diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5371476..eba3e44 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,8 +1,8 @@ name: CI # The compiler is written in Finch. It is built from bootstrap/.ll, its own LLVM IR (see bootstrap/README.md), -# then from itself. Linux x86-64 and ARM64 have seeds; macOS and Windows machines can't build the compiler yet -# (programs for them are built from Linux with --target, and tested here under Wine and qemu). +# then from itself. Seeds: Linux x86-64 and ARM64 (tested here), Windows x86-64 (tested under Wine, and here), +# macOS ARM64 and x86-64 (made with Apple's headers; only checked as IR until the macos job below passes). on: push: @@ -74,6 +74,49 @@ jobs: FINCH_CC=aarch64-linux-gnu-gcc QEMU_LD_PREFIX=/usr/aarch64-linux-gnu tests/cross.sh arm64 fi + macos: + runs-on: macos-15 + steps: + - uses: actions/checkout@v4 + - name: Install LLVM 21 (libclang) + run: brew install llvm@21 pkg-config + - name: Build the compiler + run: | + export FINCH_CLANG="$(brew --prefix llvm@21)/bin/clang" + export FINCH_LIBCLANG="-L$(brew --prefix llvm@21)/lib -lclang" + export FINCH_LLVM_INCLUDE="$(brew --prefix llvm@21)/include" + bootstrap/build.sh + build/finch version + - name: Tests + run: tests/run.sh + + windows: + runs-on: windows-2022 + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v4 + - name: Download llvm-mingw (clang with MinGW headers) and LLVM for Windows (libclang.dll) + run: | + curl -sSL -o mingw.zip https://github.com/mstorsjo/llvm-mingw/releases/download/20251216/llvm-mingw-20251216-ucrt-x86_64.zip + 7z x -y mingw.zip -o/c/ > /dev/null + curl -sSL -o llvm.exe https://github.com/llvm/llvm-project/releases/download/llvmorg-21.1.8/LLVM-21.1.8-win64.exe + 7z x -y llvm.exe -o/c/llvm > /dev/null + - name: Build the compiler + run: | + export PATH="/c/llvm-mingw-20251216-ucrt-x86_64/bin:$PATH" + export FINCH_LIBCLANG="C:/llvm/bin/libclang.dll" + export FINCH_LLVM_INCLUDE="C:/llvm/include" + export FINCH_LDFLAGS="-LC:/llvm/bin" + bootstrap/build.sh + build/finch.exe version + - name: Tests + run: | + export PATH="/c/llvm-mingw-20251216-ucrt-x86_64/bin:$PATH" + export FINCH_LDFLAGS="-LC:/llvm/bin" + FINCH=../build/finch.exe tests/run.sh + vscode: runs-on: ubuntu-24.04 defaults: diff --git a/.gitignore b/.gitignore index 7bde8c0..f40dc41 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ build/ *.o +core.* diff --git a/bootstrap/README.md b/bootstrap/README.md index 295bbdc..f4825d8 100644 --- a/bootstrap/README.md +++ b/bootstrap/README.md @@ -7,6 +7,8 @@ the compiler's own LLVM IR, one file per system: |---|---|---| | `linux-x86_64.ll` | Linux x86-64 | built and tested here and in CI | | `linux-aarch64.ll` | Linux ARM64 | made with the ARM64 cross compiler; CI builds and tests it on an ARM64 runner | +| `windows-x86_64.ll` | Windows x86-64 (MinGW: llvm-mingw's clang + libclang.dll) | built and run under Wine: it compiles itself, and every test program runs | +| `macos-arm64.ll`, `macos-x86_64.ll` | macOS | made on Linux with the macOS 11.3 SDK; checked as IR only (nobody has run them yet) | `bootstrap/build.sh` compiles the seed with `clang` (and the runtime, and libclang) into `build/finch0`; `finch0` builds `src/` into `finch1`; `finch1` builds `src/` again into `build/finch`; the two must make the same IR, or the script stops. @@ -32,8 +34,12 @@ For another system, from a machine that has that system's headers and a cross co FINCH_CC=aarch64-linux-gnu-gcc build/finch ir src/main.fch --target arm64 > bootstrap/linux-aarch64.ll ``` -## macOS and Windows +## Windows and macOS -There is no seed for them yet: it needs Apple's or Microsoft's headers, which can't be had on Linux. Until there is one, -programs for macOS and Windows are built from Linux with `--target macos|windows`, and the compiler's older C++ version -(branch `before-bootstrap`) is the way to get a compiler that runs there. +Windows: `windows-x86_64.ll` is made by `bootstrap/winseed.sh` on Linux (llvm-mingw's MinGW headers and the headers of an +official LLVM for Windows); `bootstrap/winbuild.sh` turns it into `finch.exe` for trying under Wine. On a Windows machine +`bootstrap/build.sh` does the same from Git Bash: put llvm-mingw's `bin` in PATH and set `FINCH_LIBCLANG` (the path of +`libclang.dll`), `FINCH_LLVM_INCLUDE` (its `include` folder) and `FINCH_LDFLAGS=-L`. + +macOS: the seeds were made with the macOS 11.3 SDK; `brew install llvm@21` gives clang and libclang; the CI job sets +`FINCH_CLANG`, `FINCH_LIBCLANG` and `FINCH_LLVM_INCLUDE`. If the macOS build fails, that job is where it shows first. diff --git a/bootstrap/build.sh b/bootstrap/build.sh index c86a238..9c66d1b 100755 --- a/bootstrap/build.sh +++ b/bootstrap/build.sh @@ -20,26 +20,32 @@ case "$(uname -s)-$(uname -m)" in MINGW*|MSYS*|CYGWIN*) seed=windows-x86_64 ;; *) echo "bootstrap: no seed for $(uname -s) $(uname -m) (see bootstrap/README.md)" >&2; exit 1 ;; esac +EXE= +case $seed in windows-*) EXE=.exe ;; esac [ -f "bootstrap/$seed.ll" ] || { echo "bootstrap: bootstrap/$seed.ll is missing" >&2; exit 1; } CLANG=${FINCH_CLANG:-clang} LIBS=${FINCH_LIBCLANG:--lclang} +INC= +[ -z "${FINCH_LLVM_INCLUDE:-}" ] || INC="-I $FINCH_LLVM_INCLUDE" # where clang-c/Index.h is, if clang does not find it itself export FINCH_RT=$PWD/runtime/finch_rt.c +# Windows: libclang.dll has to sit next to the programs that use it (FINCH_LIBCLANG is then the path of that dll) +if [ -n "$EXE" ]; then cp "$LIBS" build/; fi echo "bootstrap: seed ($seed) -> build/finch0" -$CLANG -O1 -w "bootstrap/$seed.ll" runtime/finch_rt.c -o build/finch0 -lm $LIBS -echo "bootstrap: build/finch0 packs the runtime and std into src/embedded.fch" -bootstrap/pack.sh build/finch0 -echo "bootstrap: build/finch0 builds the compiler -> build/finch1" -build/finch0 build src/main.fch -o build/finch1 -echo "bootstrap: build/finch1 builds the compiler -> build/finch" -build/finch1 build src/main.fch -o build/finch +$CLANG -O1 -w "bootstrap/$seed.ll" runtime/finch_rt.c -o build/finch0$EXE -lm $LIBS +echo "bootstrap: build/finch0$EXE packs the runtime and std into src/embedded.fch" +bootstrap/pack.sh build/finch0$EXE +echo "bootstrap: build/finch0$EXE builds the compiler -> build/finch1" +build/finch0$EXE build src/main.fch -o build/finch1$EXE $INC +echo "bootstrap: build/finch1$EXE builds the compiler -> build/finch" +build/finch1$EXE build src/main.fch -o build/finch$EXE $INC # a compiler that builds itself must come out the same however many times it does -build/finch1 ir src/main.fch > build/stage1.ll -build/finch ir src/main.fch > build/stage2.ll +build/finch1$EXE ir src/main.fch $INC > build/stage1.ll +build/finch$EXE ir src/main.fch $INC > build/stage2.ll if cmp -s build/stage1.ll build/stage2.ll; then - echo "bootstrap: build/finch1 and build/finch make the same IR ($(wc -l < build/stage2.ll) lines): done" + echo "bootstrap: build/finch1$EXE and build/finch make the same IR ($(wc -l < build/stage2.ll) lines): done" else echo "bootstrap: the compiler does not reproduce itself (build/stage1.ll and build/stage2.ll differ)" >&2 exit 1 diff --git a/bootstrap/linux-aarch64.ll b/bootstrap/linux-aarch64.ll index 466a007..5160ac6 100644 --- a/bootstrap/linux-aarch64.ll +++ b/bootstrap/linux-aarch64.ll @@ -6218,544 +6218,544 @@ declare ptr @getenv(ptr) @.str.6107 = private unnamed_addr constant [53 x i8] c"; generated by the Finch compiler written in Finch\0A\0A\00" @.str.6108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6109 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" -@.str.6110 = private unnamed_addr constant [18 x i8] c"target triple = \22\00" -@.str.6111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6112 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" -@.str.6113 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00" -@.str.6114 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6115 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" -@.str.6116 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6117 = private unnamed_addr constant [3 x i8] c"\0A\0A\00" +@.str.6110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6111 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6112 = private unnamed_addr constant [18 x i8] c"target triple = \22\00" +@.str.6113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6114 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6115 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00" +@.str.6116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6117 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.6118 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6120 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" -@.str.6121 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00" -@.str.6122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6123 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6124 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6126 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" -@.str.6127 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6128 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6129 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6119 = private unnamed_addr constant [3 x i8] c"\0A\0A\00" +@.str.6120 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6122 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6123 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00" +@.str.6124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6126 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6128 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6129 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6131 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" -@.str.6132 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6134 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" -@.str.6135 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00" -@.str.6136 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6137 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" -@.str.6138 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00" -@.str.6139 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6140 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" -@.str.6141 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00" -@.str.6142 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00" -@.str.6143 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6144 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00" -@.str.6145 = private unnamed_addr constant [3 x i8] c"\22)\00" -@.str.6146 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00" -@.str.6147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6148 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6131 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6133 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6136 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6137 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00" +@.str.6138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6139 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6140 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00" +@.str.6141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6142 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6143 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00" +@.str.6144 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00" +@.str.6145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6146 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00" +@.str.6147 = private unnamed_addr constant [3 x i8] c"\22)\00" +@.str.6148 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00" @.str.6149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6150 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00" +@.str.6150 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.6151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6152 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6152 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00" @.str.6153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6154 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6155 = private unnamed_addr constant [5 x i8] c"main\00" -@.str.6156 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6157 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6154 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6156 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6157 = private unnamed_addr constant [5 x i8] c"main\00" @.str.6158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6159 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6159 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.6160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6161 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.6162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6163 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6165 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6166 = private unnamed_addr constant [83 x i8] c"a library (--shared) has no main: the program that loads it calls its 'export fn's\00" +@.str.6165 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6168 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00" -@.str.6169 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6170 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6171 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6173 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6168 = private unnamed_addr constant [83 x i8] c"a library (--shared) has no main: the program that loads it calls its 'export fn's\00" +@.str.6169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6170 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00" +@.str.6171 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6172 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6173 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6175 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.6175 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.6176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6177 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6177 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.6178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6180 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" -@.str.6181 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6183 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" -@.str.6184 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6186 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" -@.str.6187 = private unnamed_addr constant [11 x i8] c" dllexport\00" -@.str.6188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6189 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6190 = private unnamed_addr constant [7 x i8] c"define\00" -@.str.6191 = private unnamed_addr constant [108 x i8] c" void @finch_module_on_fatal(ptr %handler) {\0Aentry:\0A call void @finch_on_fatal(ptr %handler)\0A ret void\0A}\0A\00" -@.str.6192 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6193 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6179 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6182 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.6183 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6185 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6186 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6188 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6189 = private unnamed_addr constant [11 x i8] c" dllexport\00" +@.str.6190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6191 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6192 = private unnamed_addr constant [7 x i8] c"define\00" +@.str.6193 = private unnamed_addr constant [108 x i8] c" void @finch_module_on_fatal(ptr %handler) {\0Aentry:\0A call void @finch_on_fatal(ptr %handler)\0A ret void\0A}\0A\00" @.str.6194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6195 = private unnamed_addr constant [6 x i8] c"call \00" -@.str.6196 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6197 = private unnamed_addr constant [2 x i8] c"(\00" -@.str.6198 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6199 = private unnamed_addr constant [134 x i8] c" %args = alloca { ptr, i64, i64 }\0A call void @finch_args(ptr %args, i32 %argc, ptr %argv)\0A %a = load { ptr, i64, i64 }, ptr %args\0A\00" -@.str.6200 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00" -@.str.6201 = private unnamed_addr constant [2 x i8] c")\00" -@.str.6202 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" -@.str.6203 = private unnamed_addr constant [6 x i8] c"%r = \00" -@.str.6204 = private unnamed_addr constant [3 x i8] c" \00" -@.str.6205 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6206 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6207 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00" -@.str.6208 = private unnamed_addr constant [63 x i8] c" %r, 0\0A br i1 %ok, label %main.ok, label %main.bad\0Amain.bad:\0A\00" -@.str.6209 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00" -@.str.6210 = private unnamed_addr constant [79 x i8] c" %r, 2\0A %mp = alloca { ptr, i64, i64 }\0A store { ptr, i64, i64 } %m, ptr %mp\0A\00" -@.str.6211 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00" -@.str.6212 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6213 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00" -@.str.6214 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00" -@.str.6215 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6216 = private unnamed_addr constant [6 x i8] c"%r = \00" -@.str.6217 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00" -@.str.6218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6219 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6220 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" -@.str.6221 = private unnamed_addr constant [3 x i8] c" \00" -@.str.6222 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6223 = private unnamed_addr constant [3 x i8] c"}\0A\00" -@.str.6224 = private unnamed_addr constant [6 x i8] c"print\00" -@.str.6225 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00" -@.str.6226 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00" -@.str.6227 = private unnamed_addr constant [6 x i8] c"input\00" -@.str.6228 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00" -@.str.6229 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00" -@.str.6230 = private unnamed_addr constant [10 x i8] c"read_file\00" -@.str.6231 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00" -@.str.6232 = private unnamed_addr constant [122 x i8] c"The whole file as text. Stops the program if it can't be read, unless handled: read_file(p) or { ... }, try read_file(p).\00" -@.str.6233 = private unnamed_addr constant [11 x i8] c"write_file\00" -@.str.6234 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00" -@.str.6235 = private unnamed_addr constant [84 x i8] c"Writes (replaces) the file. true if it worked; with or / try, the reason it didn't.\00" -@.str.6236 = private unnamed_addr constant [12 x i8] c"file_exists\00" -@.str.6237 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00" -@.str.6238 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00" -@.str.6239 = private unnamed_addr constant [12 x i8] c"delete_file\00" -@.str.6240 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00" -@.str.6241 = private unnamed_addr constant [74 x i8] c"Deletes the file. true if it worked; with or / try, the reason it didn't.\00" -@.str.6242 = private unnamed_addr constant [6 x i8] c"error\00" -@.str.6243 = private unnamed_addr constant [19 x i8] c"error(str message)\00" -@.str.6244 = private unnamed_addr constant [99 x i8] c"The failure a fallible function returns: return error(\22...\22). The caller handles it with or / try.\00" -@.str.6245 = private unnamed_addr constant [6 x i8] c"shell\00" -@.str.6246 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00" -@.str.6247 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00" -@.str.6248 = private unnamed_addr constant [5 x i8] c"exit\00" -@.str.6249 = private unnamed_addr constant [15 x i8] c"exit(int code)\00" -@.str.6250 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00" -@.str.6251 = private unnamed_addr constant [5 x i8] c"addr\00" -@.str.6252 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00" -@.str.6253 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00" -@.str.6254 = private unnamed_addr constant [4 x i8] c"new\00" -@.str.6255 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00" -@.str.6256 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00" -@.str.6257 = private unnamed_addr constant [5 x i8] c"free\00" -@.str.6258 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00" -@.str.6259 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00" -@.str.6260 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.6261 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00" -@.str.6262 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00" -@.str.6263 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6264 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00" -@.str.6265 = private unnamed_addr constant [131 x i8] c"Converts to a whole number: cuts off fractions, parses text (stops the program if it isn't a number, unless handled: int(s) or 0).\00" -@.str.6266 = private unnamed_addr constant [6 x i8] c"float\00" -@.str.6267 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00" -@.str.6268 = private unnamed_addr constant [76 x i8] c"Converts to a decimal number; parses text (int(s) or 0.0 handles bad text).\00" -@.str.6269 = private unnamed_addr constant [5 x i8] c"char\00" -@.str.6270 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00" -@.str.6271 = private unnamed_addr constant [30 x i8] c"The character with this code.\00" -@.str.6272 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str.6273 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00" -@.str.6274 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00" -@.str.6275 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6276 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00" -@.str.6277 = private unnamed_addr constant [89 x i8] c"An untyped pointer: from a typed pointer, or from a number (an address or offset for C).\00" -@.str.6278 = private unnamed_addr constant [4 x i8] c"len\00" -@.str.6279 = private unnamed_addr constant [12 x i8] c".len -> int\00" -@.str.6280 = private unnamed_addr constant [24 x i8] c"The number of elements.\00" -@.str.6281 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6282 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00" -@.str.6283 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00" -@.str.6284 = private unnamed_addr constant [5 x i8] c"push\00" -@.str.6285 = private unnamed_addr constant [10 x i8] c"push(T x)\00" -@.str.6286 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00" -@.str.6287 = private unnamed_addr constant [4 x i8] c"pop\00" -@.str.6288 = private unnamed_addr constant [11 x i8] c"pop() -> T\00" -@.str.6289 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00" -@.str.6290 = private unnamed_addr constant [7 x i8] c"insert\00" -@.str.6291 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00" -@.str.6292 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00" -@.str.6293 = private unnamed_addr constant [7 x i8] c"remove\00" -@.str.6294 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00" -@.str.6295 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00" -@.str.6296 = private unnamed_addr constant [6 x i8] c"clear\00" -@.str.6297 = private unnamed_addr constant [8 x i8] c"clear()\00" -@.str.6298 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" -@.str.6299 = private unnamed_addr constant [7 x i8] c"resize\00" -@.str.6300 = private unnamed_addr constant [14 x i8] c"resize(int n)\00" -@.str.6301 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00" -@.str.6302 = private unnamed_addr constant [5 x i8] c"find\00" -@.str.6303 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00" -@.str.6304 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00" -@.str.6305 = private unnamed_addr constant [9 x i8] c"contains\00" -@.str.6306 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00" -@.str.6307 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00" -@.str.6308 = private unnamed_addr constant [5 x i8] c"sort\00" -@.str.6309 = private unnamed_addr constant [7 x i8] c"sort()\00" -@.str.6310 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00" -@.str.6311 = private unnamed_addr constant [8 x i8] c"reverse\00" -@.str.6312 = private unnamed_addr constant [10 x i8] c"reverse()\00" -@.str.6313 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00" -@.str.6314 = private unnamed_addr constant [6 x i8] c"slice\00" -@.str.6315 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00" -@.str.6316 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00" -@.str.6317 = private unnamed_addr constant [5 x i8] c"join\00" -@.str.6318 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00" -@.str.6319 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00" -@.str.6320 = private unnamed_addr constant [4 x i8] c"len\00" -@.str.6321 = private unnamed_addr constant [12 x i8] c".len -> int\00" -@.str.6322 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00" -@.str.6323 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6324 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00" -@.str.6325 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00" -@.str.6326 = private unnamed_addr constant [4 x i8] c"sub\00" -@.str.6327 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00" -@.str.6328 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00" -@.str.6329 = private unnamed_addr constant [5 x i8] c"find\00" -@.str.6330 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00" -@.str.6331 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00" -@.str.6332 = private unnamed_addr constant [9 x i8] c"contains\00" -@.str.6333 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00" -@.str.6334 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00" -@.str.6335 = private unnamed_addr constant [12 x i8] c"starts_with\00" -@.str.6336 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00" -@.str.6337 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00" -@.str.6338 = private unnamed_addr constant [10 x i8] c"ends_with\00" -@.str.6339 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00" -@.str.6340 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00" -@.str.6341 = private unnamed_addr constant [6 x i8] c"split\00" -@.str.6342 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00" -@.str.6343 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00" -@.str.6344 = private unnamed_addr constant [5 x i8] c"trim\00" -@.str.6345 = private unnamed_addr constant [14 x i8] c"trim() -> str\00" -@.str.6346 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00" -@.str.6347 = private unnamed_addr constant [6 x i8] c"upper\00" -@.str.6348 = private unnamed_addr constant [15 x i8] c"upper() -> str\00" -@.str.6349 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00" -@.str.6350 = private unnamed_addr constant [6 x i8] c"lower\00" -@.str.6351 = private unnamed_addr constant [15 x i8] c"lower() -> str\00" -@.str.6352 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00" -@.str.6353 = private unnamed_addr constant [8 x i8] c"replace\00" -@.str.6354 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00" -@.str.6355 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00" -@.str.6356 = private unnamed_addr constant [7 x i8] c"repeat\00" -@.str.6357 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00" -@.str.6358 = private unnamed_addr constant [18 x i8] c"The text n times.\00" -@.str.6359 = private unnamed_addr constant [6 x i8] c"bytes\00" -@.str.6360 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00" -@.str.6361 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00" -@.str.6362 = private unnamed_addr constant [4 x i8] c"len\00" -@.str.6363 = private unnamed_addr constant [12 x i8] c".len -> int\00" -@.str.6364 = private unnamed_addr constant [20 x i8] c"The number of keys.\00" -@.str.6365 = private unnamed_addr constant [4 x i8] c"has\00" -@.str.6366 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00" -@.str.6367 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00" -@.str.6368 = private unnamed_addr constant [4 x i8] c"get\00" -@.str.6369 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00" -@.str.6370 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00" -@.str.6371 = private unnamed_addr constant [7 x i8] c"remove\00" -@.str.6372 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00" -@.str.6373 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00" -@.str.6374 = private unnamed_addr constant [6 x i8] c"clear\00" -@.str.6375 = private unnamed_addr constant [8 x i8] c"clear()\00" -@.str.6376 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" -@.str.6377 = private unnamed_addr constant [5 x i8] c"keys\00" -@.str.6378 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00" -@.str.6379 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00" -@.str.6380 = private unnamed_addr constant [7 x i8] c"values\00" -@.str.6381 = private unnamed_addr constant [16 x i8] c"values() -> []V\00" -@.str.6382 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00" -@.str.6383 = private unnamed_addr constant [3 x i8] c"fn\00" -@.str.6384 = private unnamed_addr constant [7 x i8] c"return\00" -@.str.6385 = private unnamed_addr constant [3 x i8] c"if\00" -@.str.6386 = private unnamed_addr constant [5 x i8] c"else\00" -@.str.6387 = private unnamed_addr constant [6 x i8] c"while\00" -@.str.6388 = private unnamed_addr constant [4 x i8] c"for\00" -@.str.6389 = private unnamed_addr constant [3 x i8] c"in\00" -@.str.6390 = private unnamed_addr constant [6 x i8] c"break\00" -@.str.6391 = private unnamed_addr constant [9 x i8] c"continue\00" -@.str.6392 = private unnamed_addr constant [5 x i8] c"true\00" -@.str.6393 = private unnamed_addr constant [6 x i8] c"false\00" -@.str.6394 = private unnamed_addr constant [5 x i8] c"null\00" -@.str.6395 = private unnamed_addr constant [7 x i8] c"import\00" -@.str.6396 = private unnamed_addr constant [5 x i8] c"link\00" -@.str.6397 = private unnamed_addr constant [7 x i8] c"struct\00" -@.str.6398 = private unnamed_addr constant [5 x i8] c"enum\00" -@.str.6399 = private unnamed_addr constant [6 x i8] c"match\00" -@.str.6400 = private unnamed_addr constant [7 x i8] c"export\00" -@.str.6401 = private unnamed_addr constant [6 x i8] c"defer\00" -@.str.6402 = private unnamed_addr constant [3 x i8] c"or\00" -@.str.6403 = private unnamed_addr constant [4 x i8] c"try\00" -@.str.6404 = private unnamed_addr constant [5 x i8] c"self\00" -@.str.6405 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6406 = private unnamed_addr constant [6 x i8] c"float\00" -@.str.6407 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str.6408 = private unnamed_addr constant [5 x i8] c"char\00" -@.str.6409 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.6410 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6411 = private unnamed_addr constant [4 x i8] c"map\00" -@.str.6412 = private unnamed_addr constant [3 x i8] c"i8\00" -@.str.6413 = private unnamed_addr constant [4 x i8] c"i16\00" -@.str.6414 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str.6415 = private unnamed_addr constant [4 x i8] c"i64\00" -@.str.6416 = private unnamed_addr constant [3 x i8] c"u8\00" -@.str.6417 = private unnamed_addr constant [4 x i8] c"u16\00" -@.str.6418 = private unnamed_addr constant [4 x i8] c"u32\00" -@.str.6419 = private unnamed_addr constant [4 x i8] c"u64\00" -@.str.6420 = private unnamed_addr constant [4 x i8] c"f32\00" -@.str.6421 = private unnamed_addr constant [4 x i8] c"f64\00" -@.str.6422 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" -@.str.6423 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00" +@.str.6195 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6197 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.6198 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6199 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6200 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6201 = private unnamed_addr constant [134 x i8] c" %args = alloca { ptr, i64, i64 }\0A call void @finch_args(ptr %args, i32 %argc, ptr %argv)\0A %a = load { ptr, i64, i64 }, ptr %args\0A\00" +@.str.6202 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00" +@.str.6203 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6204 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" +@.str.6205 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6206 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6207 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6208 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6209 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00" +@.str.6210 = private unnamed_addr constant [63 x i8] c" %r, 0\0A br i1 %ok, label %main.ok, label %main.bad\0Amain.bad:\0A\00" +@.str.6211 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00" +@.str.6212 = private unnamed_addr constant [79 x i8] c" %r, 2\0A %mp = alloca { ptr, i64, i64 }\0A store { ptr, i64, i64 } %m, ptr %mp\0A\00" +@.str.6213 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00" +@.str.6214 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6215 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00" +@.str.6216 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00" +@.str.6217 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6218 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6219 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00" +@.str.6220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6221 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6222 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str.6223 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6224 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6225 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str.6226 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.6227 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00" +@.str.6228 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00" +@.str.6229 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.6230 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00" +@.str.6231 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00" +@.str.6232 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.6233 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00" +@.str.6234 = private unnamed_addr constant [122 x i8] c"The whole file as text. Stops the program if it can't be read, unless handled: read_file(p) or { ... }, try read_file(p).\00" +@.str.6235 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.6236 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00" +@.str.6237 = private unnamed_addr constant [84 x i8] c"Writes (replaces) the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6238 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.6239 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00" +@.str.6240 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00" +@.str.6241 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.6242 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00" +@.str.6243 = private unnamed_addr constant [74 x i8] c"Deletes the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6244 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.6245 = private unnamed_addr constant [19 x i8] c"error(str message)\00" +@.str.6246 = private unnamed_addr constant [99 x i8] c"The failure a fallible function returns: return error(\22...\22). The caller handles it with or / try.\00" +@.str.6247 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.6248 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00" +@.str.6249 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00" +@.str.6250 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.6251 = private unnamed_addr constant [15 x i8] c"exit(int code)\00" +@.str.6252 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00" +@.str.6253 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.6254 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00" +@.str.6255 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00" +@.str.6256 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.6257 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00" +@.str.6258 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00" +@.str.6259 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.6260 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00" +@.str.6261 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00" +@.str.6262 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6263 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00" +@.str.6264 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00" +@.str.6265 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6266 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00" +@.str.6267 = private unnamed_addr constant [131 x i8] c"Converts to a whole number: cuts off fractions, parses text (stops the program if it isn't a number, unless handled: int(s) or 0).\00" +@.str.6268 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6269 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00" +@.str.6270 = private unnamed_addr constant [76 x i8] c"Converts to a decimal number; parses text (int(s) or 0.0 handles bad text).\00" +@.str.6271 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6272 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00" +@.str.6273 = private unnamed_addr constant [30 x i8] c"The character with this code.\00" +@.str.6274 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6275 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00" +@.str.6276 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00" +@.str.6277 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6278 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00" +@.str.6279 = private unnamed_addr constant [89 x i8] c"An untyped pointer: from a typed pointer, or from a number (an address or offset for C).\00" +@.str.6280 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6281 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6282 = private unnamed_addr constant [24 x i8] c"The number of elements.\00" +@.str.6283 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6284 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00" +@.str.6285 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00" +@.str.6286 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.6287 = private unnamed_addr constant [10 x i8] c"push(T x)\00" +@.str.6288 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00" +@.str.6289 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.6290 = private unnamed_addr constant [11 x i8] c"pop() -> T\00" +@.str.6291 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00" +@.str.6292 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.6293 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00" +@.str.6294 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00" +@.str.6295 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6296 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00" +@.str.6297 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00" +@.str.6298 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6299 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6300 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6301 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.6302 = private unnamed_addr constant [14 x i8] c"resize(int n)\00" +@.str.6303 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00" +@.str.6304 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6305 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00" +@.str.6306 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00" +@.str.6307 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6308 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00" +@.str.6309 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00" +@.str.6310 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.6311 = private unnamed_addr constant [7 x i8] c"sort()\00" +@.str.6312 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00" +@.str.6313 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.6314 = private unnamed_addr constant [10 x i8] c"reverse()\00" +@.str.6315 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00" +@.str.6316 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str.6317 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00" +@.str.6318 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00" +@.str.6319 = private unnamed_addr constant [5 x i8] c"join\00" +@.str.6320 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00" +@.str.6321 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00" +@.str.6322 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6323 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6324 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00" +@.str.6325 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6326 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00" +@.str.6327 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00" +@.str.6328 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.6329 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00" +@.str.6330 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00" +@.str.6331 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6332 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00" +@.str.6333 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00" +@.str.6334 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6335 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00" +@.str.6336 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00" +@.str.6337 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str.6338 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00" +@.str.6339 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00" +@.str.6340 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.6341 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00" +@.str.6342 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00" +@.str.6343 = private unnamed_addr constant [6 x i8] c"split\00" +@.str.6344 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00" +@.str.6345 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00" +@.str.6346 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str.6347 = private unnamed_addr constant [14 x i8] c"trim() -> str\00" +@.str.6348 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00" +@.str.6349 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str.6350 = private unnamed_addr constant [15 x i8] c"upper() -> str\00" +@.str.6351 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00" +@.str.6352 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str.6353 = private unnamed_addr constant [15 x i8] c"lower() -> str\00" +@.str.6354 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00" +@.str.6355 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str.6356 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00" +@.str.6357 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00" +@.str.6358 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str.6359 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00" +@.str.6360 = private unnamed_addr constant [18 x i8] c"The text n times.\00" +@.str.6361 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str.6362 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00" +@.str.6363 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00" +@.str.6364 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6365 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6366 = private unnamed_addr constant [20 x i8] c"The number of keys.\00" +@.str.6367 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.6368 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00" +@.str.6369 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00" +@.str.6370 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.6371 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00" +@.str.6372 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00" +@.str.6373 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6374 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00" +@.str.6375 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00" +@.str.6376 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6377 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6378 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6379 = private unnamed_addr constant [5 x i8] c"keys\00" +@.str.6380 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00" +@.str.6381 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00" +@.str.6382 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.6383 = private unnamed_addr constant [16 x i8] c"values() -> []V\00" +@.str.6384 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00" +@.str.6385 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.6386 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.6387 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.6388 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.6389 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.6390 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.6391 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.6392 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.6393 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.6394 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.6395 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.6396 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.6397 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.6398 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.6399 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.6400 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.6401 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.6402 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.6403 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.6404 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.6405 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.6406 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.6407 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6408 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6409 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6410 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6411 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6412 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6413 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.6414 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6415 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6416 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6417 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.6418 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6419 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6420 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6421 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6422 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6423 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.6424 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.6425 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00" declare ptr @clang_getCString([2 x i64]) declare void @clang_disposeString([2 x i64]) -@.str.6424 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str.6425 = private unnamed_addr constant [16 x i8] c"/finch_cc_dirs_\00" -@.str.6426 = private unnamed_addr constant [5 x i8] c".txt\00" -@.str.6427 = private unnamed_addr constant [14 x i8] c"/finch_empty_\00" -@.str.6428 = private unnamed_addr constant [3 x i8] c".c\00" -@.str.6429 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6430 = private unnamed_addr constant [13 x i8] c" -E -v -x c \00" -@.str.6431 = private unnamed_addr constant [5 x i8] c" 2> \00" -@.str.6432 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6433 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6434 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6435 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6426 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6427 = private unnamed_addr constant [16 x i8] c"/finch_cc_dirs_\00" +@.str.6428 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6429 = private unnamed_addr constant [14 x i8] c"/finch_empty_\00" +@.str.6430 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6431 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6432 = private unnamed_addr constant [13 x i8] c" -E -v -x c \00" +@.str.6433 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6434 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6435 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6436 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6437 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6438 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00" +@.str.6437 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6438 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6439 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6440 = private unnamed_addr constant [20 x i8] c"End of search list.\00" +@.str.6440 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00" @.str.6441 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6442 = private unnamed_addr constant [23 x i8] c" (framework directory)\00" -@.str.6443 = private unnamed_addr constant [12 x i8] c"-iframework\00" -@.str.6444 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6445 = private unnamed_addr constant [9 x i8] c"-isystem\00" +@.str.6442 = private unnamed_addr constant [20 x i8] c"End of search list.\00" +@.str.6443 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6444 = private unnamed_addr constant [23 x i8] c" (framework directory)\00" +@.str.6445 = private unnamed_addr constant [12 x i8] c"-iframework\00" +@.str.6446 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6447 = private unnamed_addr constant [9 x i8] c"-isystem\00" declare void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16, ptr) declare [2 x i64] @clang_getCursorUSR(ptr) -@.str.6446 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6447 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6448 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6449 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6450 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6451 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6452 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" declare [2 x i64] @clang_getCursorSpelling(ptr) -@.str.6451 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6452 = private unnamed_addr constant [2 x i8] c" \00" @.str.6453 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6454 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" -@.str.6455 = private unnamed_addr constant [13 x i8] c"anon_struct_\00" -@.str.6456 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6457 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6454 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6455 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6456 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6457 = private unnamed_addr constant [13 x i8] c"anon_struct_\00" @.str.6458 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6459 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" -declare void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16, ptr) +@.str.6459 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" @.str.6460 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6461 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6461 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16, ptr) @.str.6462 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6463 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +@.str.6463 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6464 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6465 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" declare i64 @clang_Type_getSizeOf(ptr) -@.str.6464 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6465 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6466 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +@.str.6466 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6467 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6468 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" declare i64 @clang_Type_getAlignOf(ptr) declare i32 @clang_getCursorKind(ptr) -@.str.6467 = private unnamed_addr constant [13 x i8] c"is a C union\00" +@.str.6469 = private unnamed_addr constant [13 x i8] c"is a C union\00" declare i32 @clang_Type_visitFields(ptr, ptr, ptr) -@.str.6468 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6469 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" @.str.6470 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6471 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6471 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" @.str.6472 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6473 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6474 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6475 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare void @clang_getCursorType(ptr sret(%S.C.CXType) align 16, ptr) declare i64 @clang_Cursor_getOffsetOfField(ptr) declare i32 @clang_Cursor_isBitField(ptr) -@.str.6474 = private unnamed_addr constant [15 x i8] c"has bit fields\00" -@.str.6475 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6476 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6476 = private unnamed_addr constant [15 x i8] c"has bit fields\00" @.str.6477 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6478 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00" +@.str.6478 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6479 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6480 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00" +@.str.6480 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00" @.str.6481 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6482 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6482 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00" @.str.6483 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6484 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00" +@.str.6484 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6485 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6486 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6486 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00" @.str.6487 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6488 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00" -@.str.6489 = private unnamed_addr constant [3 x i8] c"i8\00" -@.str.6490 = private unnamed_addr constant [3 x i8] c"u8\00" -@.str.6491 = private unnamed_addr constant [4 x i8] c"i16\00" -@.str.6492 = private unnamed_addr constant [4 x i8] c"u16\00" -@.str.6493 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str.6494 = private unnamed_addr constant [4 x i8] c"u32\00" -@.str.6495 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6496 = private unnamed_addr constant [4 x i8] c"u64\00" -@.str.6497 = private unnamed_addr constant [8 x i8] c"uses a \00" -@.str.6498 = private unnamed_addr constant [12 x i8] c"-bit number\00" -@.str.6499 = private unnamed_addr constant [5 x i8] c"void\00" -@.str.6500 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str.6501 = private unnamed_addr constant [5 x i8] c"char\00" -@.str.6502 = private unnamed_addr constant [4 x i8] c"f32\00" -@.str.6503 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6488 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6489 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6490 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00" +@.str.6491 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6492 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6493 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6494 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6495 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6496 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6497 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6498 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6499 = private unnamed_addr constant [8 x i8] c"uses a \00" +@.str.6500 = private unnamed_addr constant [12 x i8] c"-bit number\00" +@.str.6501 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6502 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6503 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6504 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6505 = private unnamed_addr constant [6 x i8] c"float\00" declare void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16, ptr) declare i32 @clang_isConstQualifiedType(ptr) -@.str.6504 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.6505 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6506 = private unnamed_addr constant [5 x i8] c"void\00" -@.str.6507 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str.6508 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6509 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00" -@.str.6510 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00" -@.str.6511 = private unnamed_addr constant [6 x i8] c"named\00" -@.str.6512 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.6506 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6507 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6508 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6509 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6510 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6511 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00" +@.str.6512 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00" +@.str.6513 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.6514 = private unnamed_addr constant [2 x i8] c"C\00" declare void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16, ptr) declare i64 @clang_getArraySize(ptr) -@.str.6513 = private unnamed_addr constant [17 x i8] c"uses long double\00" -@.str.6514 = private unnamed_addr constant [18 x i8] c"uses the C type '\00" +@.str.6515 = private unnamed_addr constant [17 x i8] c"uses long double\00" +@.str.6516 = private unnamed_addr constant [18 x i8] c"uses the C type '\00" declare [2 x i64] @clang_getTypeSpelling(ptr) -@.str.6515 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6516 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6517 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6517 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6518 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6519 = private unnamed_addr constant [3 x i8] c"0X\00" +@.str.6519 = private unnamed_addr constant [3 x i8] c"0x\00" @.str.6520 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6521 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6521 = private unnamed_addr constant [3 x i8] c"0X\00" @.str.6522 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6523 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6524 = private unnamed_addr constant [5 x i8] c"uUlL\00" +@.str.6524 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6525 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6526 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6526 = private unnamed_addr constant [5 x i8] c"uUlL\00" @.str.6527 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6528 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +@.str.6528 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6529 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6530 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" declare void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16, ptr) declare void @clang_tokenize(ptr, ptr, ptr, ptr) declare i32 @clang_getTokenKind(ptr) -@.str.6529 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6530 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" -declare [2 x i64] @clang_getTokenSpelling(ptr, ptr) @.str.6531 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6532 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" -declare void @clang_disposeTokens(ptr, ptr, i32) +declare [2 x i64] @clang_getTokenSpelling(ptr, ptr) @.str.6533 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6534 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6534 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare void @clang_disposeTokens(ptr, ptr, i32) @.str.6535 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6536 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6536 = private unnamed_addr constant [2 x i8] c"(\00" @.str.6537 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6538 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6539 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.6538 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6539 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6540 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6541 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.6541 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.6542 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6543 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6543 = private unnamed_addr constant [2 x i8] c"-\00" @.str.6544 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6545 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6546 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6547 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6548 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6548 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6549 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6550 = private unnamed_addr constant [2 x i8] c"e\00" +@.str.6550 = private unnamed_addr constant [2 x i8] c".\00" @.str.6551 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6552 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.6552 = private unnamed_addr constant [2 x i8] c"e\00" @.str.6553 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6554 = private unnamed_addr constant [3 x i8] c"0x\00" -@.str.6555 = private unnamed_addr constant [5 x i8] c"fFlL\00" -@.str.6556 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6557 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6554 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.6555 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6556 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6557 = private unnamed_addr constant [5 x i8] c"fFlL\00" @.str.6558 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -declare void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16, ptr) @.str.6559 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6560 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6560 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +declare void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16, ptr) @.str.6561 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6562 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6562 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6563 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6564 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6564 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6565 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6566 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6567 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6566 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6567 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6568 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6569 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6569 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6570 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6571 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6571 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6572 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6573 = private unnamed_addr constant [31 x i8] c"used .header on a null pointer\00" +@.str.6573 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6574 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6575 = private unnamed_addr constant [31 x i8] c"used .header on a null pointer\00" declare i32 @clang_Cursor_getStorageClass(ptr) -@.str.6574 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00" -@.str.6575 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6576 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6577 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00" -@.str.6578 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6579 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6576 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00" +@.str.6577 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6578 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6579 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00" +@.str.6580 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6581 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare void @clang_getResultType(ptr sret(%S.C.CXType) align 16, ptr) declare i32 @clang_getNumArgTypes(ptr) declare void @clang_getArgType(ptr sret(%S.C.CXType) align 16, ptr, i32) declare i32 @clang_isFunctionTypeVariadic(ptr) -@.str.6580 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6581 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6582 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6583 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6584 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6585 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -declare i32 @clang_isCursorDefinition(ptr) @.str.6586 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6587 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6587 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_isCursorDefinition(ptr) @.str.6588 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6589 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6589 = private unnamed_addr constant [2 x i8] c" \00" @.str.6590 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6591 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" -declare i32 @clang_visitChildren(ptr, ptr, ptr) @.str.6592 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6593 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -declare i64 @clang_getEnumConstantDeclValue(ptr) +@.str.6593 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare i32 @clang_visitChildren(ptr, ptr, ptr) @.str.6594 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6595 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -declare i32 @clang_Cursor_isMacroBuiltin(ptr) -declare i32 @clang_Cursor_isMacroFunctionLike(ptr) +declare i64 @clang_getEnumConstantDeclValue(ptr) @.str.6596 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6597 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_Cursor_isMacroBuiltin(ptr) +declare i32 @clang_Cursor_isMacroFunctionLike(ptr) @.str.6598 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6599 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6600 = private unnamed_addr constant [3 x i8] c"-x\00" -@.str.6601 = private unnamed_addr constant [2 x i8] c"c\00" -@.str.6602 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00" -@.str.6603 = private unnamed_addr constant [10 x i8] c"--target=\00" -@.str.6604 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00" -@.str.6605 = private unnamed_addr constant [3 x i8] c"-I\00" -@.str.6606 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6607 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6600 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6601 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6602 = private unnamed_addr constant [3 x i8] c"-x\00" +@.str.6603 = private unnamed_addr constant [2 x i8] c"c\00" +@.str.6604 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00" +@.str.6605 = private unnamed_addr constant [10 x i8] c"--target=\00" +@.str.6606 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00" +@.str.6607 = private unnamed_addr constant [3 x i8] c"-I\00" +@.str.6608 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6609 = private unnamed_addr constant [1 x i8] c"\00" declare ptr @clang_createIndex(i32, i32) -@.str.6608 = private unnamed_addr constant [11 x i8] c"#include \22\00" -@.str.6609 = private unnamed_addr constant [3 x i8] c"\22\0A\00" -@.str.6610 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" -@.str.6611 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6612 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6610 = private unnamed_addr constant [11 x i8] c"#include \22\00" +@.str.6611 = private unnamed_addr constant [3 x i8] c"\22\0A\00" +@.str.6612 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" @.str.6613 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" @.str.6614 = private unnamed_addr constant [1 x i8] c"\00" declare i32 @clang_parseTranslationUnit2(ptr, ptr, ptr, i32, ptr, i32, i32, ptr) @@ -6782,223 +6782,223 @@ declare void @clang_disposeDiagnostic(ptr) declare void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16, ptr) declare void @clang_disposeTranslationUnit(ptr) declare void @clang_disposeIndex(ptr) -@.str.6630 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6631 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6630 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6631 = private unnamed_addr constant [1 x i8] c"\00" @.str.6632 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6633 = private unnamed_addr constant [5 x i8] c"'\5C''\00" +@.str.6633 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" @.str.6634 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6635 = private unnamed_addr constant [10 x i8] c"/dev/null\00" -@.str.6636 = private unnamed_addr constant [7 x i8] c"TMPDIR\00" -@.str.6637 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6638 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" -@.str.6639 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6635 = private unnamed_addr constant [5 x i8] c"'\5C''\00" +@.str.6636 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6637 = private unnamed_addr constant [10 x i8] c"/dev/null\00" +@.str.6638 = private unnamed_addr constant [7 x i8] c"TMPDIR\00" +@.str.6639 = private unnamed_addr constant [1 x i8] c"\00" @.str.6640 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" -@.str.6641 = private unnamed_addr constant [5 x i8] c"/tmp\00" -@.str.6642 = private unnamed_addr constant [2 x i8] c":\00" +@.str.6641 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6642 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6643 = private unnamed_addr constant [5 x i8] c"/tmp\00" +@.str.6644 = private unnamed_addr constant [2 x i8] c":\00" declare i32 @getpid() -@.str.6643 = private unnamed_addr constant [4 x i8] c"PWD\00" -@.str.6644 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6645 = private unnamed_addr constant [15 x i8] c"XDG_CACHE_HOME\00" +@.str.6645 = private unnamed_addr constant [4 x i8] c"PWD\00" @.str.6646 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6647 = private unnamed_addr constant [7 x i8] c"/finch\00" -@.str.6648 = private unnamed_addr constant [5 x i8] c"HOME\00" -@.str.6649 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6650 = private unnamed_addr constant [14 x i8] c"/.cache/finch\00" -@.str.6651 = private unnamed_addr constant [13 x i8] c"/finch-cache\00" -@.str.6652 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" -@.str.6653 = private unnamed_addr constant [8 x i8] c"rm -rf \00" -@.str.6654 = private unnamed_addr constant [4 x i8] c"mv \00" -@.str.6655 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6656 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6657 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6658 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6647 = private unnamed_addr constant [15 x i8] c"XDG_CACHE_HOME\00" +@.str.6648 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6649 = private unnamed_addr constant [7 x i8] c"/finch\00" +@.str.6650 = private unnamed_addr constant [5 x i8] c"HOME\00" +@.str.6651 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6652 = private unnamed_addr constant [14 x i8] c"/.cache/finch\00" +@.str.6653 = private unnamed_addr constant [13 x i8] c"/finch-cache\00" +@.str.6654 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" +@.str.6655 = private unnamed_addr constant [8 x i8] c"rm -rf \00" +@.str.6656 = private unnamed_addr constant [4 x i8] c"mv \00" +@.str.6657 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6658 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6659 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6660 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6661 = private unnamed_addr constant [15 x i8] c"/finch_triple_\00" -@.str.6662 = private unnamed_addr constant [5 x i8] c".txt\00" -@.str.6663 = private unnamed_addr constant [22 x i8] c"clang -dumpmachine > \00" -@.str.6664 = private unnamed_addr constant [5 x i8] c" 2> \00" -@.str.6665 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6666 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6667 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" -@.str.6668 = private unnamed_addr constant [8 x i8] c"windows\00" -@.str.6669 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" -@.str.6670 = private unnamed_addr constant [6 x i8] c"linux\00" -@.str.6671 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" -@.str.6672 = private unnamed_addr constant [6 x i8] c"arm64\00" -@.str.6673 = private unnamed_addr constant [8 x i8] c"aarch64\00" -@.str.6674 = private unnamed_addr constant [12 x i8] c"linux-arm64\00" -@.str.6675 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00" -@.str.6676 = private unnamed_addr constant [6 x i8] c"macos\00" -@.str.6677 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6678 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6660 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6661 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6662 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6663 = private unnamed_addr constant [15 x i8] c"/finch_triple_\00" +@.str.6664 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6665 = private unnamed_addr constant [22 x i8] c"clang -dumpmachine > \00" +@.str.6666 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6667 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6668 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6669 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6670 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6671 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" +@.str.6672 = private unnamed_addr constant [6 x i8] c"linux\00" +@.str.6673 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6674 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6675 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6676 = private unnamed_addr constant [12 x i8] c"linux-arm64\00" +@.str.6677 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00" +@.str.6678 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.6679 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6680 = private unnamed_addr constant [6 x i8] c"arm64\00" -@.str.6681 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00" -@.str.6682 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00" -@.str.6683 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6684 = private unnamed_addr constant [8 x i8] c"windows\00" -@.str.6685 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6686 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6680 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6681 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6682 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6683 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00" +@.str.6684 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00" +@.str.6685 = private unnamed_addr constant [23 x i8] c"x86_64-w64-windows-gnu\00" +@.str.6686 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" @.str.6687 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6688 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6688 = private unnamed_addr constant [8 x i8] c"windows\00" @.str.6689 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6690 = private unnamed_addr constant [6 x i8] c"win32\00" +@.str.6690 = private unnamed_addr constant [6 x i8] c"mingw\00" @.str.6691 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6692 = private unnamed_addr constant [5 x i8] c"msvc\00" @.str.6693 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6694 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6694 = private unnamed_addr constant [6 x i8] c"win32\00" @.str.6695 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6696 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6696 = private unnamed_addr constant [5 x i8] c"msvc\00" @.str.6697 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6698 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.6698 = private unnamed_addr constant [6 x i8] c"apple\00" @.str.6699 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6700 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6700 = private unnamed_addr constant [7 x i8] c"darwin\00" @.str.6701 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6702 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6702 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.6703 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6704 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6705 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6706 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6707 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6708 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6708 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6709 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6710 = private unnamed_addr constant [7 x i8] c"darwin\00" -@.str.6711 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6712 = private unnamed_addr constant [5 x i8] c".exe\00" -@.str.6713 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" -@.str.6714 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6715 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00" -@.str.6716 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00" -@.str.6717 = private unnamed_addr constant [16 x i8] c"clang --target=\00" -@.str.6718 = private unnamed_addr constant [2 x i8] c";\00" -@.str.6719 = private unnamed_addr constant [6 x i8] c"clang\00" -@.str.6720 = private unnamed_addr constant [3 x i8] c"cc\00" -@.str.6721 = private unnamed_addr constant [6 x i8] c"wine \00" -@.str.6722 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00" -@.str.6723 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" -@.str.6724 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6725 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6726 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6727 = private unnamed_addr constant [11 x i8] c".framework\00" -@.str.6728 = private unnamed_addr constant [12 x i8] c"-framework \00" -@.str.6729 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6730 = private unnamed_addr constant [18 x i8] c"/finch_pkg_flags_\00" -@.str.6731 = private unnamed_addr constant [5 x i8] c".txt\00" -@.str.6732 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00" -@.str.6733 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6734 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6710 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6711 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6712 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6713 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6714 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6715 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6716 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6717 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6718 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6719 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6720 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6721 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6722 = private unnamed_addr constant [5 x i8] c".exe\00" +@.str.6723 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6724 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6725 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00" +@.str.6726 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00" +@.str.6727 = private unnamed_addr constant [16 x i8] c"clang --target=\00" +@.str.6728 = private unnamed_addr constant [2 x i8] c";\00" +@.str.6729 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6730 = private unnamed_addr constant [3 x i8] c"cc\00" +@.str.6731 = private unnamed_addr constant [6 x i8] c"wine \00" +@.str.6732 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00" +@.str.6733 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.6734 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6735 = private unnamed_addr constant [1 x i8] c"\00" @.str.6736 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6737 = private unnamed_addr constant [3 x i8] c"-l\00" -@.str.6738 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6739 = private unnamed_addr constant [2 x i8] c"/\00" -@.str.6740 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6741 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6742 = private unnamed_addr constant [2 x i8] c"/\00" -@.str.6743 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6744 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6745 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6737 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6738 = private unnamed_addr constant [12 x i8] c"-framework \00" +@.str.6739 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6740 = private unnamed_addr constant [18 x i8] c"/finch_pkg_flags_\00" +@.str.6741 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6742 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00" +@.str.6743 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6744 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6745 = private unnamed_addr constant [1 x i8] c"\00" @.str.6746 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6747 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6747 = private unnamed_addr constant [3 x i8] c"-l\00" @.str.6748 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6749 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6750 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6749 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6750 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6751 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6752 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6752 = private unnamed_addr constant [2 x i8] c"/\00" @.str.6753 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6754 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6755 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6756 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6756 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6757 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6758 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6759 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" -@.str.6760 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" -@.str.6761 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6759 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6760 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6761 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6762 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6763 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" -@.str.6764 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" -@.str.6765 = private unnamed_addr constant [3 x i8] c" \0A\00" -@.str.6766 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6767 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" -@.str.6768 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" -@.str.6769 = private unnamed_addr constant [4 x i8] c" \0A\0D\00" -@.str.6770 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6771 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" -@.str.6772 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" -@.str.6773 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" -@.str.6774 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6775 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" -@.str.6776 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" -@.str.6777 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" -@.str.6778 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6779 = private unnamed_addr constant [14 x i8] c"ld: library '\00" -@.str.6780 = private unnamed_addr constant [14 x i8] c"ld: library '\00" -@.str.6781 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6782 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6783 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6763 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6764 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6765 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6766 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6767 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6768 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6769 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6770 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6771 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6772 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6773 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6774 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6775 = private unnamed_addr constant [3 x i8] c" \0A\00" +@.str.6776 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6777 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6778 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6779 = private unnamed_addr constant [4 x i8] c" \0A\0D\00" +@.str.6780 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6781 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6782 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6783 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" @.str.6784 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6785 = private unnamed_addr constant [10 x i8] c"not found\00" -@.str.6786 = private unnamed_addr constant [12 x i8] c"framework '\00" -@.str.6787 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6788 = private unnamed_addr constant [11 x i8] c".framework\00" -@.str.6789 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6790 = private unnamed_addr constant [2 x i8] c"\22\00" -@.str.6791 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6792 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" -@.str.6793 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6785 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6786 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6787 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" +@.str.6788 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6789 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6790 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6791 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6792 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6793 = private unnamed_addr constant [12 x i8] c"framework '\00" @.str.6794 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6795 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" -@.str.6796 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6797 = private unnamed_addr constant [2 x i8] c"_\00" -@.str.6798 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6799 = private unnamed_addr constant [22 x i8] c"error: linking failed\00" -@.str.6800 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6801 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6802 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6803 = private unnamed_addr constant [21 x i8] c"error: the library '\00" -@.str.6804 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00" -@.str.6805 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6806 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6807 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6808 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6809 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6810 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6811 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6812 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6813 = private unnamed_addr constant [3 x i8] c", \00" -@.str.6814 = private unnamed_addr constant [6 x i8] c" and \00" -@.str.6815 = private unnamed_addr constant [6 x i8] c" more\00" -@.str.6816 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6817 = private unnamed_addr constant [26 x i8] c"error: no code found for \00" +@.str.6795 = private unnamed_addr constant [10 x i8] c"not found\00" +@.str.6796 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6797 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6798 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6799 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6800 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6801 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6802 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6803 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6804 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6805 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6806 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6807 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.6808 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6809 = private unnamed_addr constant [22 x i8] c"error: linking failed\00" +@.str.6810 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6811 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6812 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6813 = private unnamed_addr constant [21 x i8] c"error: the library '\00" +@.str.6814 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00" +@.str.6815 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6816 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6817 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6818 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6819 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6820 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6821 = private unnamed_addr constant [5 x i8] c"come\00" -@.str.6822 = private unnamed_addr constant [6 x i8] c"comes\00" -@.str.6823 = private unnamed_addr constant [8 x i8] c"error: \00" -@.str.6824 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6825 = private unnamed_addr constant [8 x i8] c" from \22\00" +@.str.6819 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6820 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6821 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6822 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6823 = private unnamed_addr constant [3 x i8] c", \00" +@.str.6824 = private unnamed_addr constant [6 x i8] c" and \00" +@.str.6825 = private unnamed_addr constant [6 x i8] c" more\00" @.str.6826 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6827 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00" +@.str.6827 = private unnamed_addr constant [26 x i8] c"error: no code found for \00" @.str.6828 = private unnamed_addr constant [1 x i8] c"\00" @.str.6829 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6830 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6831 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00" -@.str.6832 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6833 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6834 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6835 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00" -@.str.6836 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6837 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6838 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6839 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6840 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6841 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6842 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6843 = private unnamed_addr constant [13 x i8] c" link \22\00" -@.str.6844 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6845 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6831 = private unnamed_addr constant [5 x i8] c"come\00" +@.str.6832 = private unnamed_addr constant [6 x i8] c"comes\00" +@.str.6833 = private unnamed_addr constant [8 x i8] c"error: \00" +@.str.6834 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6835 = private unnamed_addr constant [8 x i8] c" from \22\00" +@.str.6836 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6837 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00" +@.str.6838 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6839 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6840 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6841 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00" +@.str.6842 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6843 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6844 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6845 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00" @.str.6846 = private unnamed_addr constant [1 x i8] c"\00" @.str.6847 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6848 = private unnamed_addr constant [2 x i8] c"\0A\00" @@ -7006,625 +7006,625 @@ declare i32 @getpid() @.str.6850 = private unnamed_addr constant [1 x i8] c"\00" @.str.6851 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6852 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6853 = private unnamed_addr constant [5 x i8] c"/rt-\00" -@.str.6854 = private unnamed_addr constant [4 x i8] c"2.5\00" -@.str.6855 = private unnamed_addr constant [3 x i8] c".o\00" -@.str.6856 = private unnamed_addr constant [6 x i8] c".part\00" -@.str.6857 = private unnamed_addr constant [7 x i8] c" -fPIC\00" -@.str.6858 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6859 = private unnamed_addr constant [5 x i8] c".log\00" -@.str.6860 = private unnamed_addr constant [5 x i8] c" -O2\00" -@.str.6861 = private unnamed_addr constant [5 x i8] c" -c \00" -@.str.6862 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str.6863 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6864 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.6865 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6866 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00" -@.str.6867 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00" -@.str.6868 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00" -@.str.6869 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6870 = private unnamed_addr constant [6 x i8] c"clang\00" -@.str.6871 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" -@.str.6872 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6873 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" -@.str.6874 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6853 = private unnamed_addr constant [13 x i8] c" link \22\00" +@.str.6854 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6855 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6856 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6857 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6858 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6859 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6860 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6861 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6862 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6863 = private unnamed_addr constant [5 x i8] c"/rt-\00" +@.str.6864 = private unnamed_addr constant [4 x i8] c"2.5\00" +@.str.6865 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6866 = private unnamed_addr constant [6 x i8] c".part\00" +@.str.6867 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6868 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6869 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6870 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6871 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6872 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6873 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6874 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6875 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6876 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6877 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6878 = private unnamed_addr constant [4 x i8] c".ll\00" -@.str.6879 = private unnamed_addr constant [3 x i8] c".o\00" -@.str.6880 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6881 = private unnamed_addr constant [11 x i8] c" --target=\00" -@.str.6882 = private unnamed_addr constant [5 x i8] c".log\00" -@.str.6883 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6884 = private unnamed_addr constant [8 x i8] c" -w -c \00" -@.str.6885 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str.6886 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6887 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.6888 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6889 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6890 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6891 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6892 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00" -@.str.6893 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6894 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6895 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6896 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6897 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6898 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str.6899 = private unnamed_addr constant [5 x i8] c" -lm\00" -@.str.6900 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00" -@.str.6901 = private unnamed_addr constant [9 x i8] c" -shared\00" -@.str.6902 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6903 = private unnamed_addr constant [3 x i8] c".c\00" -@.str.6904 = private unnamed_addr constant [2 x i8] c".\00" -@.str.6905 = private unnamed_addr constant [3 x i8] c".o\00" -@.str.6906 = private unnamed_addr constant [7 x i8] c" -fPIC\00" -@.str.6907 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6908 = private unnamed_addr constant [5 x i8] c" -O2\00" -@.str.6909 = private unnamed_addr constant [5 x i8] c" -c \00" -@.str.6910 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str.6911 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6912 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.6913 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6914 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00" -@.str.6915 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6916 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6917 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6918 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6919 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6876 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00" +@.str.6877 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00" +@.str.6878 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00" +@.str.6879 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6880 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6881 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6882 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6883 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6884 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6885 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6886 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6887 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6888 = private unnamed_addr constant [4 x i8] c".ll\00" +@.str.6889 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6890 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6891 = private unnamed_addr constant [11 x i8] c" --target=\00" +@.str.6892 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6893 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6894 = private unnamed_addr constant [8 x i8] c" -w -c \00" +@.str.6895 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6896 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6897 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6898 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6899 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6900 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6901 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6902 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00" +@.str.6903 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6904 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6905 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6906 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6907 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6908 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6909 = private unnamed_addr constant [5 x i8] c" -lm\00" +@.str.6910 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6911 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6912 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6913 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6914 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6915 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00" +@.str.6916 = private unnamed_addr constant [9 x i8] c" -shared\00" +@.str.6917 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6918 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6919 = private unnamed_addr constant [2 x i8] c".\00" @.str.6920 = private unnamed_addr constant [3 x i8] c".o\00" -@.str.6921 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6922 = private unnamed_addr constant [3 x i8] c".a\00" -@.str.6923 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6924 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6925 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6926 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.6927 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6928 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00" -@.str.6929 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00" +@.str.6921 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6922 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6923 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6924 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6925 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6926 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6927 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6928 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6929 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00" @.str.6930 = private unnamed_addr constant [1 x i8] c"\00" @.str.6931 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6932 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6933 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6934 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6935 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6936 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6937 = private unnamed_addr constant [8 x i8] c"file://\00" -@.str.6938 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6939 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6940 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6941 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6942 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6943 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6944 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6945 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" -@.str.6946 = private unnamed_addr constant [8 x i8] c"file://\00" -@.str.6947 = private unnamed_addr constant [6 x i8] c"/-_.~\00" -@.str.6948 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6949 = private unnamed_addr constant [2 x i8] c"%\00" -@.str.6950 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6933 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6934 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6935 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6936 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6937 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.6938 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6939 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6940 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6941 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6942 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6943 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00" +@.str.6944 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00" +@.str.6945 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6946 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6947 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6948 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6949 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6950 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6951 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6952 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6952 = private unnamed_addr constant [8 x i8] c"file://\00" @.str.6953 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6954 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6955 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6955 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6956 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6957 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6958 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6958 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6959 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6960 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6961 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6962 = private unnamed_addr constant [1 x i8] c"\00" -declare i32 @getchar() -@.str.6963 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6964 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6965 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.6960 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" +@.str.6961 = private unnamed_addr constant [8 x i8] c"file://\00" +@.str.6962 = private unnamed_addr constant [6 x i8] c"/-_.~\00" +@.str.6963 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6964 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.6965 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6966 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6967 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6968 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6969 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6970 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6971 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6972 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6973 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6974 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6975 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6976 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6977 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @getchar() +@.str.6978 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6979 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6980 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.6981 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @stdin = external global ptr declare i32 @feof(ptr) -@.str.6967 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00" -@.str.6968 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6969 = private unnamed_addr constant [16 x i8] c"Content-Length:\00" -@.str.6970 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6971 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6972 = private unnamed_addr constant [26 x i8] c"the message was cut short\00" -@.str.6973 = private unnamed_addr constant [17 x i8] c"Content-Length: \00" -@.str.6974 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00" -@.str.6975 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6982 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00" +@.str.6983 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6984 = private unnamed_addr constant [16 x i8] c"Content-Length:\00" +@.str.6985 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6986 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6987 = private unnamed_addr constant [26 x i8] c"the message was cut short\00" +@.str.6988 = private unnamed_addr constant [17 x i8] c"Content-Length: \00" +@.str.6989 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00" +@.str.6990 = private unnamed_addr constant [1 x i8] c"\00" @stdout = external global ptr declare i64 @fwrite(ptr, i64, i64, ptr) -@.str.6976 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" -@.str.6977 = private unnamed_addr constant [4 x i8] c"2.0\00" -@.str.6978 = private unnamed_addr constant [3 x i8] c"id\00" -@.str.6979 = private unnamed_addr constant [7 x i8] c"result\00" -@.str.6980 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" -@.str.6981 = private unnamed_addr constant [4 x i8] c"2.0\00" -@.str.6982 = private unnamed_addr constant [7 x i8] c"method\00" -@.str.6983 = private unnamed_addr constant [7 x i8] c"params\00" -@.str.6984 = private unnamed_addr constant [5 x i8] c"line\00" -@.str.6985 = private unnamed_addr constant [10 x i8] c"character\00" -@.str.6986 = private unnamed_addr constant [6 x i8] c"start\00" -@.str.6987 = private unnamed_addr constant [4 x i8] c"end\00" -@.str.6988 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6989 = private unnamed_addr constant [2 x i8] c"\09\00" -@.str.6990 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6991 = private unnamed_addr constant [10 x i8] c": error: \00" -@.str.6992 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6993 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6994 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6995 = private unnamed_addr constant [2 x i8] c":\00" -@.str.6996 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6997 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6998 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6999 = private unnamed_addr constant [2 x i8] c":\00" -@.str.7000 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7001 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.7002 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7003 = private unnamed_addr constant [2 x i8] c"@\00" -@.str.7004 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7005 = private unnamed_addr constant [3 x i8] c"@R\00" -@.str.7006 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6991 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.6992 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.6993 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.6994 = private unnamed_addr constant [7 x i8] c"result\00" +@.str.6995 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.6996 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.6997 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.6998 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.6999 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7000 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7001 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7002 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7003 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7004 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7005 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7006 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.7007 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7008 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7009 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7010 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7010 = private unnamed_addr constant [2 x i8] c":\00" @.str.7011 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7012 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7013 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7014 = private unnamed_addr constant [3 x i8] c"@V\00" +@.str.7014 = private unnamed_addr constant [2 x i8] c":\00" @.str.7015 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7016 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7016 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.7017 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7018 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7018 = private unnamed_addr constant [2 x i8] c"@\00" @.str.7019 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7020 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7020 = private unnamed_addr constant [3 x i8] c"@R\00" @.str.7021 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7022 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7023 = private unnamed_addr constant [3 x i8] c"@F\00" +@.str.7023 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7024 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7025 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7026 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7027 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7028 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7029 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7029 = private unnamed_addr constant [3 x i8] c"@V\00" @.str.7030 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7031 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7032 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7033 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7034 = private unnamed_addr constant [2 x i8] c"|\00" -@.str.7035 = private unnamed_addr constant [3 x i8] c"@S\00" +@.str.7034 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7035 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7036 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7037 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7038 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7038 = private unnamed_addr constant [3 x i8] c"@F\00" @.str.7039 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7040 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7041 = private unnamed_addr constant [4 x i8] c"@SF\00" +@.str.7041 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7042 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7043 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7044 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7045 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7046 = private unnamed_addr constant [3 x i8] c"@E\00" +@.str.7046 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7047 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7048 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7049 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7050 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7049 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.7050 = private unnamed_addr constant [3 x i8] c"@S\00" @.str.7051 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7052 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7053 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7054 = private unnamed_addr constant [2 x i8] c",\00" -@.str.7055 = private unnamed_addr constant [3 x i8] c"@I\00" -@.str.7056 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7057 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7058 = private unnamed_addr constant [5 x i8] c"/doc\00" -@.str.7059 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.7054 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7055 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7056 = private unnamed_addr constant [4 x i8] c"@SF\00" +@.str.7057 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7058 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7059 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7060 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7061 = private unnamed_addr constant [12 x i8] c" --overlay \00" -@.str.7062 = private unnamed_addr constant [2 x i8] c"=\00" -@.str.7063 = private unnamed_addr constant [9 x i8] c"/out.txt\00" -@.str.7064 = private unnamed_addr constant [8 x i8] c" index \00" -@.str.7065 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.7066 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.7067 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7061 = private unnamed_addr constant [3 x i8] c"@E\00" +@.str.7062 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7063 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7064 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7065 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7066 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7067 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7068 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7069 = private unnamed_addr constant [6 x i8] c"range\00" -@.str.7070 = private unnamed_addr constant [9 x i8] c"severity\00" -@.str.7071 = private unnamed_addr constant [7 x i8] c"source\00" -@.str.7072 = private unnamed_addr constant [6 x i8] c"finch\00" -@.str.7073 = private unnamed_addr constant [8 x i8] c"message\00" -@.str.7074 = private unnamed_addr constant [4 x i8] c"uri\00" -@.str.7075 = private unnamed_addr constant [12 x i8] c"diagnostics\00" -@.str.7076 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" -@.str.7077 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7078 = private unnamed_addr constant [5 x i8] c"kind\00" -@.str.7079 = private unnamed_addr constant [9 x i8] c"markdown\00" -@.str.7080 = private unnamed_addr constant [6 x i8] c"value\00" -@.str.7081 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7082 = private unnamed_addr constant [9 x i8] c"contents\00" +@.str.7069 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7070 = private unnamed_addr constant [3 x i8] c"@I\00" +@.str.7071 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7072 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7073 = private unnamed_addr constant [5 x i8] c"/doc\00" +@.str.7074 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.7075 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7076 = private unnamed_addr constant [12 x i8] c" --overlay \00" +@.str.7077 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.7078 = private unnamed_addr constant [9 x i8] c"/out.txt\00" +@.str.7079 = private unnamed_addr constant [8 x i8] c" index \00" +@.str.7080 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.7081 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.7082 = private unnamed_addr constant [1 x i8] c"\00" @.str.7083 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7084 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7085 = private unnamed_addr constant [4 x i8] c"uri\00" -@.str.7086 = private unnamed_addr constant [6 x i8] c"range\00" -@.str.7087 = private unnamed_addr constant [2 x i8] c".\00" -@.str.7088 = private unnamed_addr constant [5 x i8] c"name\00" -@.str.7089 = private unnamed_addr constant [5 x i8] c"kind\00" -@.str.7090 = private unnamed_addr constant [6 x i8] c"start\00" -@.str.7091 = private unnamed_addr constant [4 x i8] c"end\00" -@.str.7092 = private unnamed_addr constant [6 x i8] c"range\00" -@.str.7093 = private unnamed_addr constant [15 x i8] c"selectionRange\00" -@.str.7094 = private unnamed_addr constant [6 x i8] c"label\00" -@.str.7095 = private unnamed_addr constant [5 x i8] c"kind\00" -@.str.7096 = private unnamed_addr constant [7 x i8] c"detail\00" -@.str.7097 = private unnamed_addr constant [5 x i8] c"kind\00" -@.str.7098 = private unnamed_addr constant [9 x i8] c"markdown\00" -@.str.7099 = private unnamed_addr constant [6 x i8] c"value\00" -@.str.7100 = private unnamed_addr constant [14 x i8] c"documentation\00" -@.str.7101 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7084 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7085 = private unnamed_addr constant [9 x i8] c"severity\00" +@.str.7086 = private unnamed_addr constant [7 x i8] c"source\00" +@.str.7087 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7088 = private unnamed_addr constant [8 x i8] c"message\00" +@.str.7089 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7090 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7091 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7092 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7093 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7094 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7095 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7096 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7097 = private unnamed_addr constant [9 x i8] c"contents\00" +@.str.7098 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7099 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7100 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7101 = private unnamed_addr constant [6 x i8] c"range\00" @.str.7102 = private unnamed_addr constant [2 x i8] c".\00" -@.str.7103 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7104 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00" -@.str.7105 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7106 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7107 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7108 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7109 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7110 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7111 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7112 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7113 = private unnamed_addr constant [2 x i8] c"[\00" -@.str.7114 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7115 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7116 = private unnamed_addr constant [8 x i8] c"struct \00" -@.str.7117 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7118 = private unnamed_addr constant [6 x i8] c"enum \00" -@.str.7119 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7120 = private unnamed_addr constant [2 x i8] c".\00" -@.str.7121 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7103 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7104 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7105 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7106 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7107 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7108 = private unnamed_addr constant [15 x i8] c"selectionRange\00" +@.str.7109 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7110 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7111 = private unnamed_addr constant [7 x i8] c"detail\00" +@.str.7112 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7113 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7114 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7115 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7116 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7117 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7118 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7119 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00" +@.str.7120 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7121 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7122 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7123 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7123 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7124 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7125 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.7126 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.7125 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7126 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7127 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7128 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7128 = private unnamed_addr constant [2 x i8] c"[\00" @.str.7129 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7130 = private unnamed_addr constant [2 x i8] c"]\00" -@.str.7131 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7132 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7133 = private unnamed_addr constant [3 x i8] c"[]\00" -@.str.7134 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.7135 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7136 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.7130 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7131 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7132 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7133 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7135 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7136 = private unnamed_addr constant [1 x i8] c"\00" @.str.7137 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7138 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7139 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7140 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7141 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7142 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7143 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7144 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7145 = private unnamed_addr constant [8 x i8] c"struct \00" -@.str.7146 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7147 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7148 = private unnamed_addr constant [6 x i8] c"enum \00" -@.str.7149 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7150 = private unnamed_addr constant [7 x i8] c"module\00" -@.str.7151 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7152 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7153 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7138 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7139 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7140 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7141 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.7142 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7143 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7144 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7145 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7146 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7147 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7148 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7149 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7150 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7151 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.7152 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7153 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7154 = private unnamed_addr constant [1 x i8] c"\00" @.str.7155 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7156 = private unnamed_addr constant [13 x i8] c"isIncomplete\00" -@.str.7157 = private unnamed_addr constant [6 x i8] c"items\00" -@.str.7158 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7159 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7160 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7161 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7156 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7157 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7158 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7159 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7160 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7161 = private unnamed_addr constant [1 x i8] c"\00" @.str.7162 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7163 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7164 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7165 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7166 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7167 = private unnamed_addr constant [5 x i8] c"ptr[\00" -@.str.7168 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7169 = private unnamed_addr constant [2 x i8] c"]\00" -@.str.7170 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7171 = private unnamed_addr constant [6 x i8] c"label\00" -@.str.7172 = private unnamed_addr constant [6 x i8] c"label\00" -@.str.7173 = private unnamed_addr constant [11 x i8] c"parameters\00" -@.str.7174 = private unnamed_addr constant [11 x i8] c"signatures\00" -@.str.7175 = private unnamed_addr constant [16 x i8] c"activeSignature\00" -@.str.7176 = private unnamed_addr constant [16 x i8] c"activeParameter\00" -@.str.7177 = private unnamed_addr constant [6 x i8] c"label\00" -@.str.7178 = private unnamed_addr constant [14 x i8] c"documentation\00" -@.str.7179 = private unnamed_addr constant [11 x i8] c"signatures\00" -@.str.7180 = private unnamed_addr constant [16 x i8] c"activeSignature\00" -@.str.7181 = private unnamed_addr constant [16 x i8] c"activeParameter\00" -@.str.7182 = private unnamed_addr constant [13 x i8] c"textDocument\00" -@.str.7183 = private unnamed_addr constant [5 x i8] c"text\00" -@.str.7184 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7185 = private unnamed_addr constant [13 x i8] c"textDocument\00" -@.str.7186 = private unnamed_addr constant [4 x i8] c"uri\00" -@.str.7187 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7188 = private unnamed_addr constant [7 x i8] c"method\00" -@.str.7189 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7190 = private unnamed_addr constant [7 x i8] c"params\00" -@.str.7191 = private unnamed_addr constant [3 x i8] c"id\00" -@.str.7192 = private unnamed_addr constant [11 x i8] c"initialize\00" -@.str.7193 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00" -@.str.7194 = private unnamed_addr constant [14 x i8] c"hoverProvider\00" -@.str.7195 = private unnamed_addr constant [19 x i8] c"definitionProvider\00" -@.str.7196 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00" -@.str.7197 = private unnamed_addr constant [2 x i8] c".\00" -@.str.7198 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" -@.str.7199 = private unnamed_addr constant [19 x i8] c"completionProvider\00" -@.str.7200 = private unnamed_addr constant [2 x i8] c"(\00" -@.str.7201 = private unnamed_addr constant [2 x i8] c",\00" -@.str.7202 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" -@.str.7203 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00" -@.str.7204 = private unnamed_addr constant [13 x i8] c"capabilities\00" -@.str.7205 = private unnamed_addr constant [5 x i8] c"name\00" -@.str.7206 = private unnamed_addr constant [6 x i8] c"finch\00" -@.str.7207 = private unnamed_addr constant [11 x i8] c"serverInfo\00" -@.str.7208 = private unnamed_addr constant [9 x i8] c"shutdown\00" -@.str.7209 = private unnamed_addr constant [5 x i8] c"exit\00" -@.str.7210 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00" -@.str.7211 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00" -@.str.7212 = private unnamed_addr constant [15 x i8] c"contentChanges\00" -@.str.7213 = private unnamed_addr constant [5 x i8] c"text\00" -@.str.7214 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7215 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00" -@.str.7216 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00" -@.str.7217 = private unnamed_addr constant [4 x i8] c"uri\00" -@.str.7218 = private unnamed_addr constant [12 x i8] c"diagnostics\00" -@.str.7219 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" -@.str.7220 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" -@.str.7221 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" -@.str.7222 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" -@.str.7223 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" -@.str.7224 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00" -@.str.7225 = private unnamed_addr constant [9 x i8] c"position\00" -@.str.7226 = private unnamed_addr constant [5 x i8] c"line\00" -@.str.7227 = private unnamed_addr constant [9 x i8] c"position\00" -@.str.7228 = private unnamed_addr constant [10 x i8] c"character\00" -@.str.7229 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7230 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7231 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7232 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" -@.str.7233 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" -@.str.7234 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" -@.str.7235 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" -@.str.7236 = private unnamed_addr constant [12 x i8] c"/finch_lsp_\00" -@.str.7237 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7238 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7239 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7240 = private unnamed_addr constant [2 x i8] c"\22\00" -@.str.7241 = private unnamed_addr constant [3 x i8] c"\5C\22\00" -@.str.7242 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" -@.str.7243 = private unnamed_addr constant [3 x i8] c"\5Cn\00" -@.str.7244 = private unnamed_addr constant [3 x i8] c"\5Cr\00" -@.str.7245 = private unnamed_addr constant [3 x i8] c"\5Ct\00" -@.str.7246 = private unnamed_addr constant [5 x i8] c"\5Cu00\00" -@.str.7247 = private unnamed_addr constant [2 x i8] c"\22\00" -@.str.7248 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7249 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" -@.str.7250 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7251 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7252 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7253 = private unnamed_addr constant [2 x i8] c",\00" -@.str.7254 = private unnamed_addr constant [2 x i8] c":\00" -@.str.7255 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.7256 = private unnamed_addr constant [3 x i8] c": \00" -@.str.7257 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7258 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7259 = private unnamed_addr constant [5 x i8] c"null\00" -@.str.7260 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7261 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7262 = private unnamed_addr constant [5 x i8] c"true\00" -@.str.7263 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7264 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7265 = private unnamed_addr constant [6 x i8] c"false\00" -@.str.7266 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7267 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7268 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7269 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7270 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7271 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7272 = private unnamed_addr constant [3 x i8] c"[]\00" -@.str.7273 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7274 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7275 = private unnamed_addr constant [2 x i8] c"[\00" -@.str.7276 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7277 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7163 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7164 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7165 = private unnamed_addr constant [7 x i8] c"module\00" +@.str.7166 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7167 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7168 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7169 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7170 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7171 = private unnamed_addr constant [13 x i8] c"isIncomplete\00" +@.str.7172 = private unnamed_addr constant [6 x i8] c"items\00" +@.str.7173 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7174 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7175 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7176 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7177 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7178 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7179 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7180 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7181 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7182 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7183 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7184 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7185 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7186 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7187 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7188 = private unnamed_addr constant [11 x i8] c"parameters\00" +@.str.7189 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7190 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7191 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7192 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7193 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7194 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7195 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7196 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7197 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7198 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7199 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7200 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7201 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7202 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7203 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.7204 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7205 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.7206 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.7207 = private unnamed_addr constant [11 x i8] c"initialize\00" +@.str.7208 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00" +@.str.7209 = private unnamed_addr constant [14 x i8] c"hoverProvider\00" +@.str.7210 = private unnamed_addr constant [19 x i8] c"definitionProvider\00" +@.str.7211 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00" +@.str.7212 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7213 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7214 = private unnamed_addr constant [19 x i8] c"completionProvider\00" +@.str.7215 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.7216 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7217 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7218 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00" +@.str.7219 = private unnamed_addr constant [13 x i8] c"capabilities\00" +@.str.7220 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7221 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7222 = private unnamed_addr constant [11 x i8] c"serverInfo\00" +@.str.7223 = private unnamed_addr constant [9 x i8] c"shutdown\00" +@.str.7224 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.7225 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00" +@.str.7226 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00" +@.str.7227 = private unnamed_addr constant [15 x i8] c"contentChanges\00" +@.str.7228 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7229 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7230 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00" +@.str.7231 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00" +@.str.7232 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7233 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7234 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7235 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7236 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7237 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7238 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7239 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00" +@.str.7240 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7241 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7242 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7243 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7244 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7245 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7246 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7247 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7248 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7249 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7250 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7251 = private unnamed_addr constant [12 x i8] c"/finch_lsp_\00" +@.str.7252 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7253 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7254 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7255 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7256 = private unnamed_addr constant [3 x i8] c"\5C\22\00" +@.str.7257 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" +@.str.7258 = private unnamed_addr constant [3 x i8] c"\5Cn\00" +@.str.7259 = private unnamed_addr constant [3 x i8] c"\5Cr\00" +@.str.7260 = private unnamed_addr constant [3 x i8] c"\5Ct\00" +@.str.7261 = private unnamed_addr constant [5 x i8] c"\5Cu00\00" +@.str.7262 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7263 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7264 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.7265 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7266 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7267 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7268 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7269 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7270 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7271 = private unnamed_addr constant [3 x i8] c": \00" +@.str.7272 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7273 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7274 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7275 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7276 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7277 = private unnamed_addr constant [5 x i8] c"true\00" @.str.7278 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7279 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7280 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7281 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7282 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7280 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7281 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7282 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7283 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7284 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7285 = private unnamed_addr constant [3 x i8] c"{}\00" -@.str.7286 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7287 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7288 = private unnamed_addr constant [2 x i8] c"{\00" -@.str.7289 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7290 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7285 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7286 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7287 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7288 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7289 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7290 = private unnamed_addr constant [2 x i8] c"[\00" @.str.7291 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7292 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7293 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7294 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7295 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7296 = private unnamed_addr constant [2 x i8] c"}\00" -@.str.7297 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7298 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" -@.str.7299 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7300 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7301 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7302 = private unnamed_addr constant [3 x i8] c" \00" -@.str.7303 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7304 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7305 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7306 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7307 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7308 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7294 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7295 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7296 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7297 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7298 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7299 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7300 = private unnamed_addr constant [3 x i8] c"{}\00" +@.str.7301 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7302 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7303 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.7304 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7305 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7306 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7307 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7308 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7309 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7310 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7311 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7312 = private unnamed_addr constant [6 x i8] c"line \00" -@.str.7313 = private unnamed_addr constant [10 x i8] c", column \00" -@.str.7314 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7315 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7316 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7317 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7318 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7319 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7310 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7311 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.7312 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7313 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" +@.str.7314 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7315 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7316 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7317 = private unnamed_addr constant [3 x i8] c" \00" +@.str.7318 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7319 = private unnamed_addr constant [1 x i8] c"\00" @.str.7320 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7321 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7322 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7323 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7324 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7325 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7326 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7327 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7328 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7323 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7324 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7325 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7326 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7327 = private unnamed_addr constant [6 x i8] c"line \00" +@.str.7328 = private unnamed_addr constant [10 x i8] c", column \00" @.str.7329 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7330 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7331 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7332 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7333 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7334 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7335 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7336 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7332 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7333 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7334 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7335 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7336 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7337 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7338 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7339 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7340 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7341 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7338 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7339 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7340 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7341 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7342 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7343 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7344 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7345 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7346 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7347 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7348 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7348 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7349 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7350 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7351 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7352 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7353 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00" -@.str.7354 = private unnamed_addr constant [13 x i8] c" should be (\00" -@.str.7355 = private unnamed_addr constant [2 x i8] c")\00" -@.str.7356 = private unnamed_addr constant [14 x i8] c"json: found '\00" +@.str.7352 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7353 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7354 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7355 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7356 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7357 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7358 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7359 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7360 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7361 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7362 = private unnamed_addr constant [9 x i8] c"' where \00" -@.str.7363 = private unnamed_addr constant [13 x i8] c" should be (\00" -@.str.7364 = private unnamed_addr constant [2 x i8] c")\00" -@.str.7365 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7366 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7367 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7368 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7369 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7370 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7371 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7362 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7363 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7364 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7365 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7366 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7367 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7368 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00" +@.str.7369 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7370 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7371 = private unnamed_addr constant [14 x i8] c"json: found '\00" @.str.7372 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7373 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7373 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7374 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7375 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7376 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.7377 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.7378 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7379 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7376 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7377 = private unnamed_addr constant [9 x i8] c"' where \00" +@.str.7378 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7379 = private unnamed_addr constant [2 x i8] c")\00" @.str.7380 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7381 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7381 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7382 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7383 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7383 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7384 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7385 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7386 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7387 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7388 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7389 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00" -@.str.7390 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7391 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7392 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7393 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7394 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7387 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7388 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7389 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7390 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7391 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7392 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7393 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7394 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7395 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7396 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7397 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7398 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7398 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7399 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7400 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7400 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7401 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7402 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7403 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7404 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7405 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00" -@.str.7406 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7404 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00" +@.str.7405 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7406 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7407 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7408 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7408 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7409 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7410 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7411 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7410 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7411 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7412 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7413 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7413 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7414 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7415 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7416 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7417 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7418 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7419 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7420 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00" +@.str.7415 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7416 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7417 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7418 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7419 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7420 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00" @.str.7421 = private unnamed_addr constant [2 x i8] c")\00" @.str.7422 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7423 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7423 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7424 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7425 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7425 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7426 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7427 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7428 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7428 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7429 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7430 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7431 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7432 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7433 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.7434 = private unnamed_addr constant [2 x i8] c"\09\00" -@.str.7435 = private unnamed_addr constant [2 x i8] c"\0D\00" -@.str.7436 = private unnamed_addr constant [3 x i8] c"\5Cu\00" +@.str.7430 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7431 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7432 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7434 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7435 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00" +@.str.7436 = private unnamed_addr constant [2 x i8] c")\00" @.str.7437 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7438 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7439 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00" -@.str.7440 = private unnamed_addr constant [13 x i8] c" in a text (\00" -@.str.7441 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7439 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7440 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7441 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7442 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7443 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7444 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7445 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7446 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7448 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7449 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7450 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7451 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7448 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7449 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7450 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.7451 = private unnamed_addr constant [3 x i8] c"\5Cu\00" @.str.7452 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7453 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7454 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7455 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7456 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7453 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7454 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00" +@.str.7455 = private unnamed_addr constant [13 x i8] c" in a text (\00" +@.str.7456 = private unnamed_addr constant [2 x i8] c")\00" @.str.7457 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7458 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7458 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7459 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7460 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7461 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7462 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7463 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7464 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7465 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7466 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7463 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7464 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7465 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7466 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7467 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7468 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7469 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @@ -7646,63 +7646,78 @@ declare i64 @fwrite(ptr, i64, i64, ptr) @.str.7485 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7486 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7487 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7488 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7488 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7489 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7490 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7490 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7491 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7492 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7493 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7493 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7494 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7495 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7496 = private unnamed_addr constant [9 x i8] c"a number\00" +@.str.7496 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7497 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7498 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7498 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7499 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7500 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7501 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7500 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7501 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7502 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7503 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7504 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7505 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7506 = private unnamed_addr constant [16 x i8] c"a key in quotes\00" -@.str.7507 = private unnamed_addr constant [4 x i8] c"':'\00" -@.str.7508 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7509 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7510 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7511 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7505 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7506 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7507 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7508 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7509 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7510 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7511 = private unnamed_addr constant [9 x i8] c"a number\00" @.str.7512 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7513 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7514 = private unnamed_addr constant [11 x i8] c"',' or '}'\00" -@.str.7515 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7516 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7514 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7515 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7516 = private unnamed_addr constant [8 x i8] c"a value\00" @.str.7517 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7518 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7519 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7520 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7521 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7522 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7523 = private unnamed_addr constant [11 x i8] c"',' or ']'\00" -@.str.7524 = private unnamed_addr constant [5 x i8] c"true\00" -@.str.7525 = private unnamed_addr constant [6 x i8] c"false\00" -@.str.7526 = private unnamed_addr constant [5 x i8] c"null\00" -@.str.7527 = private unnamed_addr constant [8 x i8] c"a value\00" -@.str.7528 = private unnamed_addr constant [20 x i8] c"the end of the text\00" -@.str.7529 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" -@.str.7530 = private unnamed_addr constant [13 x i8] c"std/json.fch\00" -@.str.7531 = private unnamed_addr constant [13 x i8] c"std/path.fch\00" -@.str.7532 = private unnamed_addr constant [13 x i8] c"std/proc.fch\00" -@.str.7533 = private unnamed_addr constant [21 x i8] c"std/proc_windows.fch\00" -@.str.7534 = private unnamed_addr constant [13 x i8] c"std/time.fch\00" -@.str.7535 = private unnamed_addr constant [21 x i8] c"std/time_windows.fch\00" -@.str.7536 = private unnamed_addr constant [16 x i8] c"std/finch_win.h\00" -@.str.7537 = private unnamed_addr constant [24982 x i8] c"// The Finch runtime: string and array helpers, input, files and runtime errors.\0A// It is embedded in the compiler, compiled once into a cache folder, and linked\0A// statically into every Finch program. Everything here is plain C with no state.\0A//\0A// Layout shared with the compiler (src/codegen.cpp):\0A// str = { char *ptr; int64 len; int64 cap } ptr is always NUL-terminated\0A// cap > 0 : heap memory owned by the value (cap bytes allocated)\0A// cap == 0 : a string literal, valid forever, never written to\0A// cap == -1: borrowed from C, must be copied before it is kept\0A// []T = { T *ptr; int64 len; int64 cap } owns ptr when cap > 0\0A// map[K]V: see \22maps\22 below\0A\0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#ifndef _WIN32\0A#include \0A#endif\0A\0Atypedef struct {\0A char *ptr;\0A int64_t len;\0A int64_t cap;\0A} FStr;\0A\0Atypedef struct {\0A void *ptr;\0A int64_t len;\0A int64_t cap;\0A} FArr;\0A\0Astatic char empty[1] = \22\22;\0A\0A// ---------- runtime errors ----------\0A\0A// A program that loads Finch libraries (finch build --shared) can take runtime errors over\0A// instead of the process exiting: finch_module_on_fatal(handler) in each library. The handler\0A// gets the message and must not return (longjmp out, or exit itself).\0Astatic void (*fatal_hook)(const char *msg);\0Avoid finch_on_fatal(void (*hook)(const char *msg)) { fatal_hook = hook; }\0A\0Astatic __attribute__((noreturn)) void fatal(const char *msg) {\0A if (fatal_hook) fatal_hook(msg);\0A fflush(stdout);\0A fprintf(stderr, \22%s\5Cn\22, msg);\0A exit(1);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic(const char *file, int64_t line, const char *msg) {\0A char full[1024];\0A snprintf(full, sizeof full, \22%s:%lld: runtime error: %s\22, file, (long long)line, msg);\0A fflush(stdout);\0A fatal(full);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic_index(const char *file, int64_t line, int64_t i, int64_t len) {\0A char msg[128];\0A snprintf(msg, sizeof msg, \22index %lld is out of range (the length is %lld)\22, (long long)i, (long long)len);\0A finch_panic(file, line, msg);\0A}\0A\0Astatic void *must(void *p) {\0A if (!p) {\0A fflush(stdout);\0A fatal(\22runtime error: out of memory\22);\0A }\0A return p;\0A}\0A\0Avoid *finch_alloc(int64_t n) { return must(malloc(n ? (size_t)n : 1)); }\0Avoid *finch_zalloc(int64_t n) { return must(calloc(1, n ? (size_t)n : 1)); }\0A\0A// ---------- strings ----------\0A\0Astatic void str_heap(FStr *out, const char *p, int64_t len) {\0A char *m = finch_alloc(len + 1);\0A if (len) memcpy(m, p, (size_t)len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void str_static(FStr *out, const char *lit) {\0A out->ptr = (char *)lit;\0A out->len = (int64_t)strlen(lit);\0A out->cap = 0;\0A}\0A\0A// A copy that can be kept: literals are shared, everything else is duplicated.\0Avoid finch_str_copy(FStr *out, const FStr *s) {\0A if (s->cap == 0) *out = *s;\0A else str_heap(out, s->ptr, s->len);\0A}\0A\0A// Make `s` writable (before s[i] = c).\0Avoid finch_str_own(FStr *s) {\0A if (s->cap > 0) return;\0A FStr t;\0A str_heap(&t, s->ptr, s->len);\0A *s = t;\0A}\0A\0Avoid finch_str_drop(FStr *s) {\0A if (s->cap > 0) free(s->ptr);\0A}\0A\0Avoid finch_str_from_c(FStr *out, const char *p) {\0A if (!p) {\0A str_static(out, empty);\0A return;\0A }\0A out->ptr = (char *)p;\0A out->len = (int64_t)strlen(p);\0A out->cap = -1;\0A}\0A\0Avoid finch_str_concat(FStr *out, const FStr *a, const FStr *b) {\0A int64_t len = a->len + b->len;\0A char *m = finch_alloc(len + 1);\0A memcpy(m, a->ptr, (size_t)a->len);\0A memcpy(m + a->len, b->ptr, (size_t)b->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Aint finch_str_eq(const FStr *a, const FStr *b) {\0A return a->len == b->len && memcmp(a->ptr, b->ptr, (size_t)a->len) == 0;\0A}\0A\0Aint64_t finch_str_cmp(const FStr *a, const FStr *b) {\0A int64_t n = a->len < b->len ? a->len : b->len;\0A int c = memcmp(a->ptr, b->ptr, (size_t)n);\0A if (c) return c < 0 ? -1 : 1;\0A return a->len < b->len ? -1 : a->len > b->len;\0A}\0A\0Avoid finch_str_from_int(FStr *out, int64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%lld\22, (long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_uint(FStr *out, uint64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%llu\22, (unsigned long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_float(FStr *out, double v) {\0A char buf[64];\0A int n = snprintf(buf, sizeof buf, \22%g\22, v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_char(FStr *out, char c) { str_heap(out, &c, 1); }\0A\0Avoid finch_str_from_bool(FStr *out, int b) { str_static(out, b ? \22true\22 : \22false\22); }\0A\0Astatic void number_error(char *msg, size_t size, const FStr *s, const char *kind) {\0A snprintf(msg, size, \22can't turn \5C\22%.*s\5C\22 into %s\22, (int)(s->len > 100 ? 100 : s->len), s->ptr ? s->ptr : \22\22, kind);\0A}\0A\0Astatic int parse_int(const FStr *s, int64_t *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A errno = 0;\0A long long v = strtoll(p, &end, 10);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end || errno == ERANGE);\0A}\0A\0Astatic int parse_float(const FStr *s, double *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A double v = strtod(p, &end);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end);\0A}\0A\0Aint64_t finch_str_to_int(const FStr *s, const char *file, int64_t line) {\0A int64_t v;\0A if (!parse_int(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0Adouble finch_str_to_float(const FStr *s, const char *file, int64_t line) {\0A double v;\0A if (!parse_float(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0A// ---------- errors as values: int(s) or 0, try read_file(p) ... ----------\0A// Each gives back 1 on success; on failure 0, with the message in *err.\0A\0Astatic void set_error(FStr *err, const char *msg) { str_heap(err, msg, (int64_t)strlen(msg)); }\0A\0Aint finch_str_try_int(const FStr *s, int64_t *out, FStr *err) {\0A if (parse_int(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Aint finch_str_try_float(const FStr *s, double *out, FStr *err) {\0A if (parse_float(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Astatic void file_error(FStr *err, const char *what, const FStr *path) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't %s the file \5C\22%.*s\5C\22: %s\22, what, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr ? path->ptr : \22\22, strerror(errno));\0A set_error(err, msg);\0A}\0A\0A// when `fn main() -> !` fails\0Avoid finch_report_error(const FStr *msg) {\0A fflush(stdout);\0A fprintf(stderr, \22error: %.*s\5Cn\22, (int)msg->len, msg->ptr ? msg->ptr : \22\22);\0A}\0A\0Avoid finch_str_sub(FStr *out, const FStr *s, int64_t start, int64_t end, const char *file, int64_t line) {\0A if (start < 0 || end > s->len || start > end) {\0A char msg[160];\0A snprintf(msg, sizeof msg, \22sub(%lld, %lld) is out of range (the length is %lld)\22, (long long)start,\0A (long long)end, (long long)s->len);\0A finch_panic(file, line, msg);\0A }\0A str_heap(out, s->ptr + start, end - start);\0A}\0A\0Aint64_t finch_str_find(const FStr *s, const FStr *t) {\0A if (t->len == 0) return 0;\0A for (int64_t i = 0; i + t->len <= s->len; i++)\0A if (s->ptr[i] == t->ptr[0] && memcmp(s->ptr + i, t->ptr, (size_t)t->len) == 0) return i;\0A return -1;\0A}\0A\0Aint finch_str_starts(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Aint finch_str_ends(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr + s->len - t->len, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Avoid finch_str_trim(FStr *out, const FStr *s) {\0A int64_t a = 0, b = s->len;\0A while (a < b && isspace((unsigned char)s->ptr[a])) a++;\0A while (b > a && isspace((unsigned char)s->ptr[b - 1])) b--;\0A str_heap(out, s->ptr + a, b - a);\0A}\0A\0Avoid finch_str_upper(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)toupper((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_lower(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)tolower((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_replace(FStr *out, const FStr *s, const FStr *from, const FStr *to) {\0A if (from->len == 0) {\0A str_heap(out, s->ptr, s->len);\0A return;\0A }\0A int64_t count = 0;\0A for (int64_t i = 0; i + from->len <= s->len;) {\0A if (memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A count++;\0A i += from->len;\0A } else {\0A i++;\0A }\0A }\0A int64_t len = s->len + count * (to->len - from->len);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < s->len;) {\0A if (i + from->len <= s->len && memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A memcpy(w, to->ptr, (size_t)to->len);\0A w += to->len;\0A i += from->len;\0A } else {\0A *w++ = s->ptr[i++];\0A }\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len);\0A\0A// \22a,b,,c\22.split(\22,\22) -> [\22a\22, \22b\22, \22\22, \22c\22]; split(\22\22) gives single characters.\0Avoid finch_str_split(FArr *out, const FStr *s, const FStr *sep) {\0A out->ptr = NULL;\0A out->len = out->cap = 0;\0A if (sep->len == 0) {\0A for (int64_t i = 0; i < s->len; i++) arr_push_str(out, s->ptr + i, 1);\0A return;\0A }\0A int64_t start = 0;\0A for (int64_t i = 0; i + sep->len <= s->len;) {\0A if (memcmp(s->ptr + i, sep->ptr, (size_t)sep->len) == 0) {\0A arr_push_str(out, s->ptr + start, i - start);\0A i += sep->len;\0A start = i;\0A } else {\0A i++;\0A }\0A }\0A arr_push_str(out, s->ptr + start, s->len - start);\0A}\0A\0Avoid finch_str_join(FStr *out, const FArr *parts, const FStr *sep) {\0A const FStr *p = parts->ptr;\0A int64_t len = 0;\0A for (int64_t i = 0; i < parts->len; i++) len += p[i].len + (i ? sep->len : 0);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < parts->len; i++) {\0A if (i) {\0A memcpy(w, sep->ptr, (size_t)sep->len);\0A w += sep->len;\0A }\0A memcpy(w, p[i].ptr, (size_t)p[i].len);\0A w += p[i].len;\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_repeat(FStr *out, const FStr *s, int64_t n) {\0A if (n < 0) n = 0;\0A int64_t len = s->len * n;\0A char *m = finch_alloc(len + 1);\0A for (int64_t i = 0; i < n; i++) memcpy(m + i * s->len, s->ptr, (size_t)s->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_from_bytes(FStr *out, const FArr *bytes) { str_heap(out, bytes->ptr, bytes->len); }\0A\0A// ---------- building text: print(x) and str(x) of arrays, maps and structs ----------\0A// A buffer starts as an empty str and grows on the heap.\0A\0Avoid finch_buf_add(FStr *b, const char *p, int64_t n) {\0A if (b->len + n + 1 > b->cap) {\0A int64_t cap = b->cap > 0 ? b->cap * 2 : 32;\0A while (cap < b->len + n + 1) cap *= 2;\0A b->ptr = must(realloc(b->cap > 0 ? b->ptr : NULL, (size_t)cap));\0A b->cap = cap;\0A }\0A if (n) memcpy(b->ptr + b->len, p, (size_t)n);\0A b->len += n;\0A b->ptr[b->len] = 0;\0A}\0A\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) __attribute__((format(printf, 2, 3)));\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) {\0A char t[64];\0A va_list ap;\0A va_start(ap, fmt);\0A int n = vsnprintf(t, sizeof t, fmt, ap);\0A va_end(ap);\0A finch_buf_add(b, t, n);\0A}\0A\0Avoid finch_buf_int(FStr *b, int64_t v) { buf_fmt(b, \22%lld\22, (long long)v); }\0Avoid finch_buf_uint(FStr *b, uint64_t v) { buf_fmt(b, \22%llu\22, (unsigned long long)v); }\0Avoid finch_buf_float(FStr *b, double v) { buf_fmt(b, \22%g\22, v); }\0Avoid finch_buf_bool(FStr *b, int v) { finch_buf_add(b, v ? \22true\22 : \22false\22, v ? 4 : 5); }\0Avoid finch_buf_ptr(FStr *b, const void *p) {\0A if (p) buf_fmt(b, \220x%llx\22, (unsigned long long)(uintptr_t)p);\0A else finch_buf_add(b, \22null\22, 4);\0A}\0A\0Avoid finch_buf_char(FStr *b, char c, int quoted) {\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A finch_buf_add(b, &c, 1);\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A}\0A\0Avoid finch_buf_str(FStr *b, const FStr *s, int quoted) {\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A finch_buf_add(b, s->ptr, s->len);\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A}\0A\0A// print the buffer and free it\0Avoid finch_buf_print(FStr *b) {\0A if (b->len) fwrite(b->ptr, 1, (size_t)b->len, stdout);\0A if (b->cap > 0) free(b->ptr);\0A}\0A\0A// ---------- arrays ----------\0A\0Avoid finch_arr_reserve(FArr *a, int64_t need, int64_t es) {\0A if (need <= a->cap) return;\0A int64_t cap = a->cap * 2;\0A if (cap < 4) cap = 4;\0A if (cap < need) cap = need;\0A a->ptr = must(realloc(a->cap > 0 ? a->ptr : NULL, (size_t)(cap * es)));\0A a->cap = cap;\0A}\0A\0Avoid finch_arr_make(FArr *out, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A out->ptr = len ? finch_zalloc(len * es) : NULL;\0A out->len = len;\0A out->cap = len;\0A}\0A\0A// grow or shrink to `len`; new elements are zero\0Avoid finch_arr_resize(FArr *a, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A finch_arr_reserve(a, len, es);\0A if (len > a->len) memset((char *)a->ptr + a->len * es, 0, (size_t)((len - a->len) * es));\0A a->len = len;\0A}\0A\0A// a byte-for-byte copy of the elements (the compiler deep-copies owning elements afterwards)\0Avoid finch_arr_clone_raw(FArr *out, const FArr *a, int64_t es) {\0A out->len = a->len;\0A out->cap = a->len;\0A out->ptr = a->len ? finch_alloc(a->len * es) : NULL;\0A if (a->len) memcpy(out->ptr, a->ptr, (size_t)(a->len * es));\0A}\0A\0Avoid finch_arr_free(FArr *a) {\0A if (a->cap > 0) free(a->ptr);\0A}\0A\0A// open a hole at i (0 <= i <= len), len grows by one\0Avoid finch_arr_insert_gap(FArr *a, int64_t i, int64_t es, const char *file, int64_t line) {\0A if (i < 0 || i > a->len) finch_panic_index(file, line, i, a->len);\0A finch_arr_reserve(a, a->len + 1, es);\0A char *p = a->ptr;\0A memmove(p + (i + 1) * es, p + i * es, (size_t)((a->len - i) * es));\0A a->len++;\0A}\0A\0A// close the hole at i (the element was already moved out), len shrinks by one\0Avoid finch_arr_remove_gap(FArr *a, int64_t i, int64_t es) {\0A char *p = a->ptr;\0A memmove(p + i * es, p + (i + 1) * es, (size_t)((a->len - i - 1) * es));\0A a->len--;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len) {\0A finch_arr_reserve(a, a->len + 1, (int64_t)sizeof(FStr));\0A str_heap((FStr *)a->ptr + a->len, p, len);\0A a->len++;\0A}\0A\0Avoid finch_bytes_from_str(FArr *out, const FStr *s) {\0A out->len = out->cap = s->len;\0A out->ptr = s->len ? finch_alloc(s->len) : NULL;\0A if (s->len) memcpy(out->ptr, s->ptr, (size_t)s->len);\0A}\0A\0A// ---------- program arguments, input and files ----------\0A\0Avoid finch_args(FArr *out, int argc, char **argv) {\0A out->len = out->cap = argc;\0A out->ptr = finch_alloc((int64_t)sizeof(FStr) * (argc ? argc : 1));\0A for (int i = 0; i < argc; i++) str_heap((FStr *)out->ptr + i, argv[i], (int64_t)strlen(argv[i]));\0A}\0A\0A// input(\22Name? \22) prints the prompt and reads one line, without the newline.\0Avoid finch_input(FStr *out, const FStr *prompt) {\0A if (prompt->len) fwrite(prompt->ptr, 1, (size_t)prompt->len, stdout);\0A fflush(stdout);\0A // read one line of any length (getline isn't available everywhere)\0A size_t size = 128, n = 0;\0A char *line = finch_alloc((int64_t)size);\0A int c, got = 0;\0A while ((c = fgetc(stdin)) != EOF) {\0A got = 1;\0A if (c == '\5Cn') break;\0A if (n + 1 >= size) line = must(realloc(line, size *= 2));\0A line[n++] = (char)c;\0A }\0A if (!got) {\0A free(line);\0A str_static(out, empty);\0A return;\0A }\0A while (n > 0 && line[n - 1] == '\5Cr') n--;\0A line[n] = 0;\0A out->ptr = line;\0A out->len = (int64_t)n;\0A out->cap = (int64_t)size;\0A}\0A\0Aint finch_file_exists(const FStr *path) {\0A FILE *f = fopen(path->ptr, \22rb\22);\0A if (f) fclose(f);\0A return f != NULL;\0A}\0A\0Aint finch_try_read_file(FStr *out, const FStr *path, FStr *err) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A file_error(err, \22read\22, path);\0A return 0;\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A return 1;\0A}\0A\0Avoid finch_read_file(FStr *out, const FStr *path, const char *file, int64_t line) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't read the file \5C\22%.*s\5C\22: %s\22, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr, strerror(errno));\0A finch_panic(file, line, msg);\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A}\0A\0A// shell(\22ls -l\22): run a command, give back its exit code\0Aint64_t finch_shell(const FStr *cmd) {\0A fflush(stdout);\0A int status = system(cmd->ptr ? cmd->ptr : \22\22);\0A#ifdef _WIN32\0A return status; // Windows gives the exit code directly\0A#else\0A if (status == -1) return -1;\0A if (WIFEXITED(status)) return WEXITSTATUS(status);\0A return 128 + (WIFSIGNALED(status) ? WTERMSIG(status) : 0);\0A#endif\0A}\0A\0Aint finch_delete_file(const FStr *path) { return remove(path->ptr ? path->ptr : \22\22) == 0; }\0A\0Aint finch_try_delete_file(const FStr *path, FStr *err) {\0A if (remove(path->ptr ? path->ptr : \22\22) == 0) return 1;\0A file_error(err, \22delete\22, path);\0A return 0;\0A}\0A\0A// stdin/stdout/stderr are macros on some systems (Windows), so Finch asks for them here\0Avoid *finch_std_stream(int i) { return i == 0 ? (void *)stdin : i == 1 ? (void *)stdout : (void *)stderr; }\0A\0Aint finch_write_file(const FStr *path, const FStr *text) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22wb\22);\0A if (!f) return 0;\0A size_t put = text->len ? fwrite(text->ptr, 1, (size_t)text->len, f) : 0;\0A return fclose(f) == 0 && put == (size_t)text->len;\0A}\0A\0Aint finch_try_write_file(const FStr *path, const FStr *text, FStr *err) {\0A errno = 0;\0A if (finch_write_file(path, text)) return 1;\0A if (!errno) errno = EIO;\0A file_error(err, \22write\22, path);\0A return 0;\0A}\0A\0A// ---------- maps ----------\0A// map[K]V = { entries; len; used; cap; index; icap; adds }\0A// entries: `used` slots of es bytes, each { uint64 hash; K key; V value }, in insertion order.\0A// A removed entry keeps its slot (hash 0) until the next resize packs the slots.\0A// index: icap slots (a power of two, at least 2 * cap): -1 empty, -2 removed, else an entry number.\0A// adds: how many keys were ever added; a `for` over the map stops with an error if it changes.\0A// The compiler stores, copies and drops keys and values; the runtime only finds and places entries.\0A// Keys are compared byte for byte (numbers, chars, bools) or as text (kstr).\0A\0Atypedef struct {\0A char *entries;\0A int64_t len, used, cap;\0A int64_t *index;\0A int64_t icap;\0A int64_t adds;\0A} FMap;\0A\0Astatic uint64_t map_hash(const void *key, int64_t ks, int kstr) {\0A const unsigned char *p;\0A size_t n;\0A if (kstr) {\0A const FStr *s = key;\0A p = (const unsigned char *)s->ptr;\0A n = (size_t)s->len;\0A } else {\0A p = key;\0A n = (size_t)ks;\0A }\0A uint64_t h = 1469598103934665603ULL; // FNV-1a, then mixed so the low bits spread well\0A for (size_t i = 0; i < n; i++) {\0A h ^= p[i];\0A h *= 1099511628211ULL;\0A }\0A h ^= h >> 31;\0A h *= 0xbf58476d1ce4e5b9ULL;\0A h ^= h >> 29;\0A return h | 1; // 0 marks a removed entry\0A}\0A\0Astatic int map_key_eq(const char *a, const void *b, int64_t ks, int kstr) {\0A if (!kstr) return memcmp(a, b, (size_t)ks) == 0;\0A const FStr *x = (const FStr *)a, *y = b;\0A return x->len == y->len && (x->len == 0 || memcmp(x->ptr, y->ptr, (size_t)x->len) == 0);\0A}\0A\0Astatic void map_reindex(FMap *m, int64_t es) {\0A if (m->len != m->used) { // pack the slots of removed entries away\0A int64_t j = 0;\0A for (int64_t i = 0; i < m->used; i++) {\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == 0) continue;\0A if (i != j) memmove(m->entries + j * es, e, (size_t)es);\0A j++;\0A }\0A m->used = j;\0A }\0A int64_t icap = 16;\0A while (icap < m->cap * 2) icap *= 2;\0A free(m->index);\0A m->index = finch_alloc(icap * (int64_t)sizeof(int64_t));\0A memset(m->index, 0xff, (size_t)icap * sizeof(int64_t));\0A m->icap = icap;\0A for (int64_t i = 0; i < m->used; i++) {\0A uint64_t h = *(uint64_t *)(m->entries + i * es);\0A int64_t s = (int64_t)(h & (uint64_t)(icap - 1));\0A while (m->index[s] != -1) s = (s + 1) & (icap - 1);\0A m->index[s] = i;\0A }\0A}\0A\0A// the entry number of `key`, or -1\0Aint64_t finch_map_find(const FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr) {\0A if (m->len == 0) return -1;\0A uint64_t h = map_hash(key, ks, kstr);\0A for (int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));; s = (s + 1) & (m->icap - 1)) {\0A int64_t i = m->index[s];\0A if (i == -1) return -1;\0A if (i < 0) continue;\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == h && map_key_eq(e + 8, key, ks, kstr)) return i;\0A }\0A}\0A\0A// The entry for `key`. A new one is zeroed except its hash (*added = 1); the compiler then stores the key.\0Aint64_t finch_map_slot(FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr, int32_t *added) {\0A int64_t i = finch_map_find(m, key, es, ks, kstr);\0A *added = i < 0;\0A if (i >= 0) return i;\0A if (m->used == m->cap) {\0A if (m->len * 4 < m->cap * 3) { // many removed slots: pack them instead of growing\0A map_reindex(m, es);\0A } else {\0A m->cap = m->cap ? m->cap * 2 : 8;\0A m->entries = must(realloc(m->entries, (size_t)(m->cap * es)));\0A map_reindex(m, es);\0A }\0A }\0A uint64_t h = map_hash(key, ks, kstr);\0A i = m->used++;\0A char *e = m->entries + i * es;\0A memset(e, 0, (size_t)es);\0A *(uint64_t *)e = h;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] >= 0) s = (s + 1) & (m->icap - 1);\0A m->index[s] = i;\0A m->len++;\0A m->adds++;\0A return i;\0A}\0A\0A// Forget entry i (its key and value were already dropped by the compiler).\0Avoid finch_map_remove_at(FMap *m, int64_t i, int64_t es) {\0A char *e = m->entries + i * es;\0A uint64_t h = *(uint64_t *)e;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] != i) s = (s + 1) & (m->icap - 1);\0A m->index[s] = -2;\0A *(uint64_t *)e = 0;\0A if (--m->len == 0) {\0A m->used = 0;\0A memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A }\0A}\0A\0Avoid finch_map_clear(FMap *m) {\0A m->len = m->used = 0;\0A if (m->index) memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0Avoid finch_map_free(FMap *m) {\0A free(m->entries);\0A free(m->index);\0A}\0A\0A// A copy of the slots and the index; the compiler then copies the keys and values that own memory.\0Avoid finch_map_clone_raw(FMap *out, const FMap *m, int64_t es) {\0A *out = *m;\0A if (!m->cap) return;\0A out->entries = finch_alloc(m->cap * es);\0A memcpy(out->entries, m->entries, (size_t)(m->used * es));\0A out->index = finch_alloc(m->icap * (int64_t)sizeof(int64_t));\0A memcpy(out->index, m->index, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_changed(const char *file, int64_t line) {\0A finch_panic(file, line, \22a key was added to the map while looping over it (collect the new keys, and add them after the loop)\22);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_missing(const char *file, int64_t line, const FStr *key) {\0A char msg[200];\0A snprintf(msg, sizeof msg, \22the key %.*s is not in the map (check with .has(key), or use .get(key, default))\22,\0A (int)(key->len > 100 ? 100 : key->len), key->ptr ? key->ptr : \22\22);\0A finch_panic(file, line, msg);\0A}\0A\00" -@.str.7538 = private unnamed_addr constant [12885 x i8] c"// JSON: read it, build it, write it.\0A//\0A// import json\0A//\0A// doc := try json.parse(\22{\5C\22name\5C\22: \5C\22Finch\5C\22, \5C\22tags\5C\22: [\5C\22fast\5C\22, \5C\22small\5C\22], \5C\22stars\5C\22: 5}\22)\0A// print(doc.get(\22name\22).str_or(\22\22)) Finch\0A// print(doc.get(\22tags\22).at(1).str_or(\22\22)) small\0A// print(doc.get(\22stars\22).int_or(0)) 5\0A// print(doc.get(\22missing\22).is_null()) true (a missing key is null, so chains never fail)\0A//\0A// out := json.new_object()\0A// out.set(\22ok\22, json.new_bool(true))\0A// list := json.new_list()\0A// list.push(json.new_number(1.5))\0A// out.set(\22values\22, list)\0A// print(json.stringify(out)) {\22ok\22:true,\22values\22:[1.5]}\0A// print(json.pretty(out)) the same, over several lines\0A\0Aenum Kind { Null, Bool, Number, Text, List, Object }\0A\0A// One JSON value. `kind` says which of the other fields it uses: flag for Bool, num for Number,\0A// text for Text, items for List, and items with keys (the same length, in the same order) for Object.\0Astruct Json {\0A Kind kind\0A bool flag\0A float num\0A str text\0A []Json items\0A []str keys\0A}\0A\0Afn new_null() -> Json {\0A return Json(kind: Kind.Null)\0A}\0A\0Afn new_bool(bool b) -> Json {\0A return Json(kind: Kind.Bool, flag: b)\0A}\0A\0Afn new_number(float n) -> Json {\0A return Json(kind: Kind.Number, num: n)\0A}\0A\0Afn new_text(str s) -> Json {\0A return Json(kind: Kind.Text, text: s)\0A}\0A\0Afn new_list() -> Json {\0A return Json(kind: Kind.List)\0A}\0A\0Afn new_object() -> Json {\0A return Json(kind: Kind.Object)\0A}\0A\0A// ---------- looking inside ----------\0A\0Afn Json.is_null() -> bool {\0A return self.kind == Kind.Null\0A}\0A\0A// the number of elements of a list, of keys of an object, of bytes of a text; 0 for the rest\0Afn Json.len() -> int {\0A return match self.kind {\0A List, Object -> self.items.len\0A Text -> self.text.len\0A else -> 0\0A }\0A}\0A\0Afn Json.has(str key) -> bool {\0A return self.kind == Kind.Object && self.keys.contains(key)\0A}\0A\0A// the value of a key of an object; null if there is none (or this is not an object)\0Afn Json.get(str key) -> Json {\0A if self.kind != Kind.Object {\0A return new_null()\0A }\0A i := self.keys.find(key)\0A if i < 0 {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the element of a list; null if there is none\0Afn Json.at(int i) -> Json {\0A if self.kind != Kind.List || i < 0 || i >= self.items.len {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the value if it is of that kind, else what was given\0Afn Json.str_or(str fallback) -> str {\0A if self.kind == Kind.Text {\0A return self.text\0A }\0A return fallback\0A}\0A\0Afn Json.float_or(float fallback) -> float {\0A if self.kind == Kind.Number {\0A return self.num\0A }\0A return fallback\0A}\0A\0Afn Json.int_or(int fallback) -> int {\0A if self.kind == Kind.Number {\0A return int(self.num)\0A }\0A return fallback\0A}\0A\0Afn Json.bool_or(bool fallback) -> bool {\0A if self.kind == Kind.Bool {\0A return self.flag\0A }\0A return fallback\0A}\0A\0A// the keys of an object, in the order they were written\0Afn Json.names() -> []str {\0A return self.keys\0A}\0A\0A// ---------- building ----------\0A\0A// add to the end of a list\0Afn Json.push(Json v) {\0A self.items.push(v)\0A}\0A\0A// give a key a value in an object; a key that is already there is replaced\0Afn Json.set(str key, Json v) {\0A i := self.keys.find(key)\0A if i >= 0 {\0A self.items[i] = v\0A return\0A }\0A self.keys.push(key)\0A self.items.push(v)\0A}\0A\0A// ---------- writing ----------\0A\0Afn quote(str s) -> str {\0A []str parts = [\22\5C\22\22]\0A for c in s {\0A n := int(c)\0A if c == '\22' {\0A parts.push(\22\5C\5C\5C\22\22)\0A } else if c == '\5C\5C' {\0A parts.push(\22\5C\5C\5C\5C\22)\0A } else if c == '\5Cn' {\0A parts.push(\22\5C\5Cn\22)\0A } else if c == '\5Cr' {\0A parts.push(\22\5C\5Cr\22)\0A } else if c == '\5Ct' {\0A parts.push(\22\5C\5Ct\22)\0A } else if n < 32 {\0A parts.push(\22\5C\5Cu00\22 + hexdigit(n / 16) + hexdigit(n % 16))\0A } else {\0A parts.push(str(c))\0A }\0A }\0A parts.push(\22\5C\22\22)\0A return parts.join(\22\22)\0A}\0A\0Afn hexdigit(int n) -> str {\0A digits := \220123456789abcdef\22\0A return str(digits[n])\0A}\0A\0Afn number_text(float n) -> str {\0A if n == float(int(n)) && n > -1000000000000000.0 && n < 1000000000000000.0 {\0A return str(int(n))\0A }\0A return str(n)\0A}\0A\0Astruct Writer {\0A []str out\0A}\0A\0Afn write(Json j, str indent, str pad, ptr[Writer] w) {\0A nl := \22\22\0A inner := \22\22\0A sep := \22,\22\0A colon := \22:\22\0A if indent.len > 0 {\0A nl = \22\5Cn\22\0A inner = pad + indent\0A colon = \22: \22\0A }\0A match j.kind {\0A Null -> w.out.push(\22null\22)\0A Bool -> {\0A if j.flag {\0A w.out.push(\22true\22)\0A } else {\0A w.out.push(\22false\22)\0A }\0A }\0A Number -> w.out.push(number_text(j.num))\0A Text -> w.out.push(quote(j.text))\0A List -> {\0A if j.items.len == 0 {\0A w.out.push(\22[]\22)\0A return\0A }\0A w.out.push(\22[\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22]\22)\0A }\0A Object -> {\0A if j.items.len == 0 {\0A w.out.push(\22{}\22)\0A return\0A }\0A w.out.push(\22{\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner + quote(j.keys[i]) + colon)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22}\22)\0A }\0A }\0A}\0A\0A// the value as text on one line\0Afn stringify(Json j) -> str {\0A w := Writer()\0A write(j, \22\22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// the value as text over several lines, indented by two spaces\0Afn pretty(Json j) -> str {\0A w := Writer()\0A write(j, \22 \22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// ---------- reading ----------\0A\0Astruct Reader {\0A str src\0A int i\0A}\0A\0A// the line and column of a position, for a message\0Afn where(ptr[Reader] r) -> str {\0A line := 1\0A col := 1\0A for k in 0..r.i {\0A if k < r.src.len && r.src[k] == '\5Cn' {\0A line += 1\0A col = 1\0A } else {\0A col += 1\0A }\0A }\0A return \22line \22 + str(line) + \22, column \22 + str(col)\0A}\0A\0Afn peek(ptr[Reader] r) -> char {\0A if r.i < r.src.len {\0A return r.src[r.i]\0A }\0A return char(0)\0A}\0A\0Afn skip_space(ptr[Reader] r) {\0A while r.i < r.src.len && (r.src[r.i] == ' ' || r.src[r.i] == '\5Cn' || r.src[r.i] == '\5Ct' || r.src[r.i] == '\5Cr') {\0A r.i += 1\0A }\0A}\0A\0Afn unexpected(ptr[Reader] r, str wanted) -> str {\0A if r.i >= r.src.len {\0A return \22json: the text ends where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A }\0A return \22json: found '\22 + str(r.src[r.i]) + \22' where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A}\0A\0A// does `word` come next?\0Afn comes(ptr[Reader] r, str word) -> bool {\0A return r.src.len - r.i >= word.len && r.src.sub(r.i, r.i + word.len) == word\0A}\0A\0Afn expect_word(ptr[Reader] r, str word) -> ! {\0A if !comes(r, word) {\0A return error(unexpected(r, \22'\22 + word + \22'\22))\0A }\0A r.i += word.len\0A}\0A\0Afn hex_value(char c) -> int {\0A if c >= '0' && c <= '9' {\0A return int(c) - int('0')\0A }\0A if c >= 'a' && c <= 'f' {\0A return int(c) - int('a') + 10\0A }\0A if c >= 'A' && c <= 'F' {\0A return int(c) - int('A') + 10\0A }\0A return -1\0A}\0A\0A// a code point as UTF-8\0Afn utf8(int cp) -> str {\0A []u8 b\0A if cp < 128 {\0A b.push(u8(cp))\0A } else if cp < 2048 {\0A b.push(u8(192 + cp / 64))\0A b.push(u8(128 + cp % 64))\0A } else if cp < 65536 {\0A b.push(u8(224 + cp / 4096))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A } else {\0A b.push(u8(240 + cp / 262144))\0A b.push(u8(128 + (cp / 4096) % 64))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A }\0A return str(b)\0A}\0A\0Afn read_hex4(ptr[Reader] r) -> int! {\0A n := 0\0A for k in 0..4 {\0A if r.i >= r.src.len || hex_value(r.src[r.i]) < 0 {\0A return error(unexpected(r, \22a hexadecimal digit\22))\0A }\0A n = n * 16 + hex_value(r.src[r.i])\0A r.i += 1\0A }\0A return n\0A}\0A\0Afn read_string(ptr[Reader] r) -> str! {\0A r.i += 1 // the opening quote\0A []str parts\0A start := r.i\0A while true {\0A if r.i >= r.src.len {\0A return error(\22json: a text is never closed (\22 + where(r) + \22)\22)\0A }\0A c := r.src[r.i]\0A if c == '\22' {\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A return parts.join(\22\22)\0A }\0A if int(c) < 32 {\0A return error(\22json: a line break or control character inside a text (\22 + where(r) + \22)\22)\0A }\0A if c != '\5C\5C' {\0A r.i += 1\0A continue\0A }\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A e := peek(r)\0A r.i += 1\0A if e == 'n' {\0A parts.push(\22\5Cn\22)\0A } else if e == 't' {\0A parts.push(\22\5Ct\22)\0A } else if e == 'r' {\0A parts.push(\22\5Cr\22)\0A } else if e == 'b' {\0A parts.push(utf8(8))\0A } else if e == 'f' {\0A parts.push(utf8(12))\0A } else if e == '\22' || e == '\5C\5C' || e == '/' {\0A parts.push(str(e))\0A } else if e == 'u' {\0A cp := try read_hex4(r)\0A // a pair of \F0\9F\98\80 stands for one character above U+FFFF\0A if cp >= 55296 && cp < 56320 && comes(r, \22\5C\5Cu\22) {\0A r.i += 2\0A low := try read_hex4(r)\0A cp = 65536 + (cp - 55296) * 1024 + (low - 56320)\0A }\0A parts.push(utf8(cp))\0A } else {\0A return error(\22json: unknown escape \5C\5C\22 + str(e) + \22 in a text (\22 + where(r) + \22)\22)\0A }\0A start = r.i\0A }\0A}\0A\0Afn read_number(ptr[Reader] r) -> Json! {\0A start := r.i\0A if peek(r) == '-' {\0A r.i += 1\0A }\0A while r.i < r.src.len && ((r.src[r.i] >= '0' && r.src[r.i] <= '9') || r.src[r.i] == '.' || r.src[r.i] == 'e' || r.src[r.i] == 'E' || r.src[r.i] == '+' || r.src[r.i] == '-') {\0A r.i += 1\0A }\0A n := float(r.src.sub(start, r.i)) or {\0A r.i = start\0A return error(unexpected(r, \22a number\22))\0A }\0A return new_number(n)\0A}\0A\0Afn read_value(ptr[Reader] r) -> Json! {\0A skip_space(r)\0A c := peek(r)\0A if r.i >= r.src.len {\0A return error(unexpected(r, \22a value\22))\0A }\0A if c == '{' {\0A obj := new_object()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A while true {\0A skip_space(r)\0A if peek(r) != '\22' {\0A return error(unexpected(r, \22a key in quotes\22))\0A }\0A key := try read_string(r)\0A skip_space(r)\0A if peek(r) != ':' {\0A return error(unexpected(r, \22':'\22))\0A }\0A r.i += 1\0A v := try read_value(r)\0A obj.set(key, v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A return error(unexpected(r, \22',' or '}'\22))\0A }\0A }\0A if c == '[' {\0A list := new_list()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A while true {\0A v := try read_value(r)\0A list.push(v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A return error(unexpected(r, \22',' or ']'\22))\0A }\0A }\0A if c == '\22' {\0A s := try read_string(r)\0A return new_text(s)\0A }\0A if c == 't' {\0A try expect_word(r, \22true\22)\0A return new_bool(true)\0A }\0A if c == 'f' {\0A try expect_word(r, \22false\22)\0A return new_bool(false)\0A }\0A if c == 'n' {\0A try expect_word(r, \22null\22)\0A return new_null()\0A }\0A if c == '-' || (c >= '0' && c <= '9') {\0A return try read_number(r)\0A }\0A return error(unexpected(r, \22a value\22))\0A}\0A\0A// the JSON in `text`; an error with the line and column where it went wrong\0Afn parse(str text) -> Json! {\0A r := Reader(src: text)\0A v := try read_value(addr(r))\0A skip_space(addr(r))\0A if r.i < r.src.len {\0A return error(unexpected(addr(r), \22the end of the text\22))\0A }\0A return v\0A}\0A\00" -@.str.7539 = private unnamed_addr constant [2847 x i8] c"// Paths, as text. Elements are separated by \22/\22.\0A//\0A// import path\0A// path.join(\22a\22, \22b.txt\22) a/b.txt\0A// path.base(\22/tmp/x/a.tar.gz\22) a.tar.gz path.stem(...) a.tar path.ext(...) .gz\0A// path.dir(\22/tmp/x/a.txt\22) /tmp/x\0A// path.clean(\22a//b/../c/./d\22) a/c/d\0A\0A// a and b with one separator between; an absolute b replaces a\0Afn join(str a, str b) -> str {\0A if a.len == 0 {\0A return b\0A }\0A if b.len == 0 {\0A return a\0A }\0A if b[0] == '/' {\0A return b\0A }\0A if a[a.len - 1] == '/' {\0A return a + b\0A }\0A return a + \22/\22 + b\0A}\0A\0Afn is_abs(str p) -> bool {\0A return p.len > 0 && p[0] == '/'\0A}\0A\0A// the last element: \22a/b.txt\22 -> \22b.txt\22, \22a/b/\22 -> \22b\22, \22\22 -> \22.\22, \22/\22 -> \22/\22\0Afn base(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A if end == 1 && p[0] == '/' {\0A return \22/\22\0A }\0A start := end\0A while start > 0 && p[start - 1] != '/' {\0A start -= 1\0A }\0A return p.sub(start, end)\0A}\0A\0A// everything before the last element: \22a/b.txt\22 -> \22a\22, \22b.txt\22 -> \22.\22, \22/b\22 -> \22/\22\0Afn dir(str p) -> str {\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A i := end\0A while i > 0 && p[i - 1] != '/' {\0A i -= 1\0A }\0A if i == 0 {\0A return \22.\22\0A }\0A while i > 1 && p[i - 1] == '/' {\0A i -= 1\0A }\0A return p.sub(0, i)\0A}\0A\0A// the part of the last element from its last dot: \22a.tar.gz\22 -> \22.gz\22; \22\22 when there is none\0Afn ext(str p) -> str {\0A b := base(p)\0A i := b.len\0A while i > 0 && b[i - 1] != '.' {\0A i -= 1\0A }\0A if i <= 1 { // no dot, or a name that only starts with one (.bashrc)\0A return \22\22\0A }\0A return b.sub(i - 1, b.len)\0A}\0A\0A// the last element without its extension\0Afn stem(str p) -> str {\0A b := base(p)\0A e := ext(p)\0A return b.sub(0, b.len - e.len)\0A}\0A\0A// the elements of a path: \22/a/b/c\22 -> [\22a\22, \22b\22, \22c\22]\0Afn parts(str p) -> []str {\0A []str out\0A for piece in p.split(\22/\22) {\0A if piece.len > 0 {\0A out.push(piece)\0A }\0A }\0A return out\0A}\0A\0A// the shortest path with the same meaning: no \22//\22, no \22.\22, and \22..\22 resolved where it can be\0Afn clean(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A abs := is_abs(p)\0A []str out\0A for piece in parts(p) {\0A if piece == \22.\22 {\0A continue\0A }\0A if piece == \22..\22 {\0A if out.len > 0 && out[out.len - 1] != \22..\22 {\0A out.pop()\0A } else if !abs {\0A out.push(\22..\22)\0A }\0A continue\0A }\0A out.push(piece)\0A }\0A joined := out.join(\22/\22)\0A if abs {\0A return \22/\22 + joined\0A }\0A if joined.len == 0 {\0A return \22.\22\0A }\0A return joined\0A}\0A\00" -@.str.7540 = private unnamed_addr constant [1407 x i8] c"// Programs: run a command, read what it printed, look at the environment.\0A//\0A// import proc\0A// code := proc.run(\22make\22) the exit code; what the command prints goes to the screen\0A// text := try proc.output(\22git describe\22) what the command printed; an error if it failed\0A// proc.env(\22HOME\22, \22/\22) an environment variable, or the second value if it is not set\0Aimport \22stdlib.h\22\0Aimport \22unistd.h\22\0Aimport \22time.h\22\0A\0A// run a command; its output goes to the screen. Gives its exit code.\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0A// run a command and give what it printed. Fails, with its output as the message, if it exits with an error.\0Afn output(str command) -> str! {\0A tmp := \22/tmp/finch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(\22(\22 + command + \22) > '\22 + tmp + \22' 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0A// the folder the program is running in\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" -@.str.7541 = private unnamed_addr constant [996 x i8] c"// Programs, for Windows. The same functions as proc.fch (that file is for Linux and macOS).\0Aimport \22stdlib.h\22\0Aimport \22process.h\22\0Aimport \22direct.h\22\0Aimport \22time.h\22\0A\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0Afn output(str command) -> str! {\0A tmp := proc_env(\22TEMP\22, \22.\22) + \22\5C\5Cfinch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(command + \22 > \5C\22\22 + tmp + \22\5C\22 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn proc_env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn env(str name, str fallback) -> str {\0A return proc_env(name, fallback)\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" -@.str.7542 = private unnamed_addr constant [2540 x i8] c"// Time: the clock, sleeping, and dates.\0A//\0A// import time\0A// start := time.millis() milliseconds from a clock that only goes forward (to measure with)\0A// time.sleep(250) wait a quarter of a second\0A// time.now() seconds since 1970-01-01 00:00 UTC\0A// d := time.date(time.now()) the parts: d.year, d.month, d.day, d.hour, d.minute, d.second\0A// time.format(time.now(), \22%Y-%m-%d %H:%M\22) as text, in the computer's time zone\0Aimport \22time.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0A// seconds since 1970-01-01 00:00 UTC\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward: for measuring how long something took\0Afn millis() -> int {\0A timespec ts\0A clock_gettime(CLOCK_MONOTONIC, addr(ts))\0A return int(ts.tv_sec) * 1000 + int(ts.tv_nsec) / 1000000\0A}\0A\0Afn sleep(int ms) {\0A timespec ts\0A ts.tv_sec = ms / 1000\0A ts.tv_nsec = (ms % 1000) * 1000000\0A nanosleep(addr(ts), null)\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0A// the date and time of a moment, in UTC\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A gmtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// the date and time of a moment, in the computer's time zone\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// a moment as text, in the computer's time zone: %Y year, %m month, %d day, %H hour, %M minute, %S second\0A// (the rest of C's strftime works too: %A weekday name, %B month name, ...)\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0A// the number of days in a month (month is 1 to 12)\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" -@.str.7543 = private unnamed_addr constant [1793 x i8] c"// Time, for Windows. The same functions as time.fch (that file is for Linux and macOS).\0Aimport \22time.h\22\0Aimport \22finch_win.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward (the performance counter: GetTickCount64 ticks every 15 ms)\0Afn millis() -> int {\0A i64 count = 0\0A i64 freq = 1\0A QueryPerformanceFrequency(addr(freq))\0A QueryPerformanceCounter(addr(count))\0A return int(count / freq) * 1000 + int(count % freq) * 1000 / int(freq)\0A}\0A\0Afn sleep(int ms) {\0A Sleep(u32(ms))\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _gmtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" -@.str.7544 = private unnamed_addr constant [366 x i8] c"/* The Windows functions std/time_windows.fch needs. Declared here, not by including :\0A libclang can't parse that header with MinGW's intrinsics. Both are in kernel32. */\0Aunsigned long long GetTickCount64(void);\0Avoid Sleep(unsigned long milliseconds);\0Aint QueryPerformanceCounter(long long *count);\0Aint QueryPerformanceFrequency(long long *frequency);\0A\00" +@.str.7521 = private unnamed_addr constant [16 x i8] c"a key in quotes\00" +@.str.7522 = private unnamed_addr constant [4 x i8] c"':'\00" +@.str.7523 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7524 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7525 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7526 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7527 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7528 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7529 = private unnamed_addr constant [11 x i8] c"',' or '}'\00" +@.str.7530 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7531 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7532 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7533 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7534 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7535 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7536 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7537 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7538 = private unnamed_addr constant [11 x i8] c"',' or ']'\00" +@.str.7539 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.7540 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7541 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7542 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7543 = private unnamed_addr constant [20 x i8] c"the end of the text\00" +@.str.7544 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.7545 = private unnamed_addr constant [13 x i8] c"std/json.fch\00" +@.str.7546 = private unnamed_addr constant [13 x i8] c"std/path.fch\00" +@.str.7547 = private unnamed_addr constant [13 x i8] c"std/proc.fch\00" +@.str.7548 = private unnamed_addr constant [21 x i8] c"std/proc_windows.fch\00" +@.str.7549 = private unnamed_addr constant [13 x i8] c"std/time.fch\00" +@.str.7550 = private unnamed_addr constant [21 x i8] c"std/time_windows.fch\00" +@.str.7551 = private unnamed_addr constant [16 x i8] c"std/finch_win.h\00" +@.str.7552 = private unnamed_addr constant [24982 x i8] c"// The Finch runtime: string and array helpers, input, files and runtime errors.\0A// It is embedded in the compiler, compiled once into a cache folder, and linked\0A// statically into every Finch program. Everything here is plain C with no state.\0A//\0A// Layout shared with the compiler (src/codegen.cpp):\0A// str = { char *ptr; int64 len; int64 cap } ptr is always NUL-terminated\0A// cap > 0 : heap memory owned by the value (cap bytes allocated)\0A// cap == 0 : a string literal, valid forever, never written to\0A// cap == -1: borrowed from C, must be copied before it is kept\0A// []T = { T *ptr; int64 len; int64 cap } owns ptr when cap > 0\0A// map[K]V: see \22maps\22 below\0A\0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#ifndef _WIN32\0A#include \0A#endif\0A\0Atypedef struct {\0A char *ptr;\0A int64_t len;\0A int64_t cap;\0A} FStr;\0A\0Atypedef struct {\0A void *ptr;\0A int64_t len;\0A int64_t cap;\0A} FArr;\0A\0Astatic char empty[1] = \22\22;\0A\0A// ---------- runtime errors ----------\0A\0A// A program that loads Finch libraries (finch build --shared) can take runtime errors over\0A// instead of the process exiting: finch_module_on_fatal(handler) in each library. The handler\0A// gets the message and must not return (longjmp out, or exit itself).\0Astatic void (*fatal_hook)(const char *msg);\0Avoid finch_on_fatal(void (*hook)(const char *msg)) { fatal_hook = hook; }\0A\0Astatic __attribute__((noreturn)) void fatal(const char *msg) {\0A if (fatal_hook) fatal_hook(msg);\0A fflush(stdout);\0A fprintf(stderr, \22%s\5Cn\22, msg);\0A exit(1);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic(const char *file, int64_t line, const char *msg) {\0A char full[1024];\0A snprintf(full, sizeof full, \22%s:%lld: runtime error: %s\22, file, (long long)line, msg);\0A fflush(stdout);\0A fatal(full);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic_index(const char *file, int64_t line, int64_t i, int64_t len) {\0A char msg[128];\0A snprintf(msg, sizeof msg, \22index %lld is out of range (the length is %lld)\22, (long long)i, (long long)len);\0A finch_panic(file, line, msg);\0A}\0A\0Astatic void *must(void *p) {\0A if (!p) {\0A fflush(stdout);\0A fatal(\22runtime error: out of memory\22);\0A }\0A return p;\0A}\0A\0Avoid *finch_alloc(int64_t n) { return must(malloc(n ? (size_t)n : 1)); }\0Avoid *finch_zalloc(int64_t n) { return must(calloc(1, n ? (size_t)n : 1)); }\0A\0A// ---------- strings ----------\0A\0Astatic void str_heap(FStr *out, const char *p, int64_t len) {\0A char *m = finch_alloc(len + 1);\0A if (len) memcpy(m, p, (size_t)len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void str_static(FStr *out, const char *lit) {\0A out->ptr = (char *)lit;\0A out->len = (int64_t)strlen(lit);\0A out->cap = 0;\0A}\0A\0A// A copy that can be kept: literals are shared, everything else is duplicated.\0Avoid finch_str_copy(FStr *out, const FStr *s) {\0A if (s->cap == 0) *out = *s;\0A else str_heap(out, s->ptr, s->len);\0A}\0A\0A// Make `s` writable (before s[i] = c).\0Avoid finch_str_own(FStr *s) {\0A if (s->cap > 0) return;\0A FStr t;\0A str_heap(&t, s->ptr, s->len);\0A *s = t;\0A}\0A\0Avoid finch_str_drop(FStr *s) {\0A if (s->cap > 0) free(s->ptr);\0A}\0A\0Avoid finch_str_from_c(FStr *out, const char *p) {\0A if (!p) {\0A str_static(out, empty);\0A return;\0A }\0A out->ptr = (char *)p;\0A out->len = (int64_t)strlen(p);\0A out->cap = -1;\0A}\0A\0Avoid finch_str_concat(FStr *out, const FStr *a, const FStr *b) {\0A int64_t len = a->len + b->len;\0A char *m = finch_alloc(len + 1);\0A memcpy(m, a->ptr, (size_t)a->len);\0A memcpy(m + a->len, b->ptr, (size_t)b->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Aint finch_str_eq(const FStr *a, const FStr *b) {\0A return a->len == b->len && memcmp(a->ptr, b->ptr, (size_t)a->len) == 0;\0A}\0A\0Aint64_t finch_str_cmp(const FStr *a, const FStr *b) {\0A int64_t n = a->len < b->len ? a->len : b->len;\0A int c = memcmp(a->ptr, b->ptr, (size_t)n);\0A if (c) return c < 0 ? -1 : 1;\0A return a->len < b->len ? -1 : a->len > b->len;\0A}\0A\0Avoid finch_str_from_int(FStr *out, int64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%lld\22, (long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_uint(FStr *out, uint64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%llu\22, (unsigned long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_float(FStr *out, double v) {\0A char buf[64];\0A int n = snprintf(buf, sizeof buf, \22%g\22, v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_char(FStr *out, char c) { str_heap(out, &c, 1); }\0A\0Avoid finch_str_from_bool(FStr *out, int b) { str_static(out, b ? \22true\22 : \22false\22); }\0A\0Astatic void number_error(char *msg, size_t size, const FStr *s, const char *kind) {\0A snprintf(msg, size, \22can't turn \5C\22%.*s\5C\22 into %s\22, (int)(s->len > 100 ? 100 : s->len), s->ptr ? s->ptr : \22\22, kind);\0A}\0A\0Astatic int parse_int(const FStr *s, int64_t *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A errno = 0;\0A long long v = strtoll(p, &end, 10);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end || errno == ERANGE);\0A}\0A\0Astatic int parse_float(const FStr *s, double *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A double v = strtod(p, &end);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end);\0A}\0A\0Aint64_t finch_str_to_int(const FStr *s, const char *file, int64_t line) {\0A int64_t v;\0A if (!parse_int(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0Adouble finch_str_to_float(const FStr *s, const char *file, int64_t line) {\0A double v;\0A if (!parse_float(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0A// ---------- errors as values: int(s) or 0, try read_file(p) ... ----------\0A// Each gives back 1 on success; on failure 0, with the message in *err.\0A\0Astatic void set_error(FStr *err, const char *msg) { str_heap(err, msg, (int64_t)strlen(msg)); }\0A\0Aint finch_str_try_int(const FStr *s, int64_t *out, FStr *err) {\0A if (parse_int(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Aint finch_str_try_float(const FStr *s, double *out, FStr *err) {\0A if (parse_float(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Astatic void file_error(FStr *err, const char *what, const FStr *path) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't %s the file \5C\22%.*s\5C\22: %s\22, what, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr ? path->ptr : \22\22, strerror(errno));\0A set_error(err, msg);\0A}\0A\0A// when `fn main() -> !` fails\0Avoid finch_report_error(const FStr *msg) {\0A fflush(stdout);\0A fprintf(stderr, \22error: %.*s\5Cn\22, (int)msg->len, msg->ptr ? msg->ptr : \22\22);\0A}\0A\0Avoid finch_str_sub(FStr *out, const FStr *s, int64_t start, int64_t end, const char *file, int64_t line) {\0A if (start < 0 || end > s->len || start > end) {\0A char msg[160];\0A snprintf(msg, sizeof msg, \22sub(%lld, %lld) is out of range (the length is %lld)\22, (long long)start,\0A (long long)end, (long long)s->len);\0A finch_panic(file, line, msg);\0A }\0A str_heap(out, s->ptr + start, end - start);\0A}\0A\0Aint64_t finch_str_find(const FStr *s, const FStr *t) {\0A if (t->len == 0) return 0;\0A for (int64_t i = 0; i + t->len <= s->len; i++)\0A if (s->ptr[i] == t->ptr[0] && memcmp(s->ptr + i, t->ptr, (size_t)t->len) == 0) return i;\0A return -1;\0A}\0A\0Aint finch_str_starts(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Aint finch_str_ends(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr + s->len - t->len, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Avoid finch_str_trim(FStr *out, const FStr *s) {\0A int64_t a = 0, b = s->len;\0A while (a < b && isspace((unsigned char)s->ptr[a])) a++;\0A while (b > a && isspace((unsigned char)s->ptr[b - 1])) b--;\0A str_heap(out, s->ptr + a, b - a);\0A}\0A\0Avoid finch_str_upper(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)toupper((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_lower(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)tolower((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_replace(FStr *out, const FStr *s, const FStr *from, const FStr *to) {\0A if (from->len == 0) {\0A str_heap(out, s->ptr, s->len);\0A return;\0A }\0A int64_t count = 0;\0A for (int64_t i = 0; i + from->len <= s->len;) {\0A if (memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A count++;\0A i += from->len;\0A } else {\0A i++;\0A }\0A }\0A int64_t len = s->len + count * (to->len - from->len);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < s->len;) {\0A if (i + from->len <= s->len && memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A memcpy(w, to->ptr, (size_t)to->len);\0A w += to->len;\0A i += from->len;\0A } else {\0A *w++ = s->ptr[i++];\0A }\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len);\0A\0A// \22a,b,,c\22.split(\22,\22) -> [\22a\22, \22b\22, \22\22, \22c\22]; split(\22\22) gives single characters.\0Avoid finch_str_split(FArr *out, const FStr *s, const FStr *sep) {\0A out->ptr = NULL;\0A out->len = out->cap = 0;\0A if (sep->len == 0) {\0A for (int64_t i = 0; i < s->len; i++) arr_push_str(out, s->ptr + i, 1);\0A return;\0A }\0A int64_t start = 0;\0A for (int64_t i = 0; i + sep->len <= s->len;) {\0A if (memcmp(s->ptr + i, sep->ptr, (size_t)sep->len) == 0) {\0A arr_push_str(out, s->ptr + start, i - start);\0A i += sep->len;\0A start = i;\0A } else {\0A i++;\0A }\0A }\0A arr_push_str(out, s->ptr + start, s->len - start);\0A}\0A\0Avoid finch_str_join(FStr *out, const FArr *parts, const FStr *sep) {\0A const FStr *p = parts->ptr;\0A int64_t len = 0;\0A for (int64_t i = 0; i < parts->len; i++) len += p[i].len + (i ? sep->len : 0);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < parts->len; i++) {\0A if (i) {\0A memcpy(w, sep->ptr, (size_t)sep->len);\0A w += sep->len;\0A }\0A memcpy(w, p[i].ptr, (size_t)p[i].len);\0A w += p[i].len;\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_repeat(FStr *out, const FStr *s, int64_t n) {\0A if (n < 0) n = 0;\0A int64_t len = s->len * n;\0A char *m = finch_alloc(len + 1);\0A for (int64_t i = 0; i < n; i++) memcpy(m + i * s->len, s->ptr, (size_t)s->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_from_bytes(FStr *out, const FArr *bytes) { str_heap(out, bytes->ptr, bytes->len); }\0A\0A// ---------- building text: print(x) and str(x) of arrays, maps and structs ----------\0A// A buffer starts as an empty str and grows on the heap.\0A\0Avoid finch_buf_add(FStr *b, const char *p, int64_t n) {\0A if (b->len + n + 1 > b->cap) {\0A int64_t cap = b->cap > 0 ? b->cap * 2 : 32;\0A while (cap < b->len + n + 1) cap *= 2;\0A b->ptr = must(realloc(b->cap > 0 ? b->ptr : NULL, (size_t)cap));\0A b->cap = cap;\0A }\0A if (n) memcpy(b->ptr + b->len, p, (size_t)n);\0A b->len += n;\0A b->ptr[b->len] = 0;\0A}\0A\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) __attribute__((format(printf, 2, 3)));\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) {\0A char t[64];\0A va_list ap;\0A va_start(ap, fmt);\0A int n = vsnprintf(t, sizeof t, fmt, ap);\0A va_end(ap);\0A finch_buf_add(b, t, n);\0A}\0A\0Avoid finch_buf_int(FStr *b, int64_t v) { buf_fmt(b, \22%lld\22, (long long)v); }\0Avoid finch_buf_uint(FStr *b, uint64_t v) { buf_fmt(b, \22%llu\22, (unsigned long long)v); }\0Avoid finch_buf_float(FStr *b, double v) { buf_fmt(b, \22%g\22, v); }\0Avoid finch_buf_bool(FStr *b, int v) { finch_buf_add(b, v ? \22true\22 : \22false\22, v ? 4 : 5); }\0Avoid finch_buf_ptr(FStr *b, const void *p) {\0A if (p) buf_fmt(b, \220x%llx\22, (unsigned long long)(uintptr_t)p);\0A else finch_buf_add(b, \22null\22, 4);\0A}\0A\0Avoid finch_buf_char(FStr *b, char c, int quoted) {\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A finch_buf_add(b, &c, 1);\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A}\0A\0Avoid finch_buf_str(FStr *b, const FStr *s, int quoted) {\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A finch_buf_add(b, s->ptr, s->len);\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A}\0A\0A// print the buffer and free it\0Avoid finch_buf_print(FStr *b) {\0A if (b->len) fwrite(b->ptr, 1, (size_t)b->len, stdout);\0A if (b->cap > 0) free(b->ptr);\0A}\0A\0A// ---------- arrays ----------\0A\0Avoid finch_arr_reserve(FArr *a, int64_t need, int64_t es) {\0A if (need <= a->cap) return;\0A int64_t cap = a->cap * 2;\0A if (cap < 4) cap = 4;\0A if (cap < need) cap = need;\0A a->ptr = must(realloc(a->cap > 0 ? a->ptr : NULL, (size_t)(cap * es)));\0A a->cap = cap;\0A}\0A\0Avoid finch_arr_make(FArr *out, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A out->ptr = len ? finch_zalloc(len * es) : NULL;\0A out->len = len;\0A out->cap = len;\0A}\0A\0A// grow or shrink to `len`; new elements are zero\0Avoid finch_arr_resize(FArr *a, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A finch_arr_reserve(a, len, es);\0A if (len > a->len) memset((char *)a->ptr + a->len * es, 0, (size_t)((len - a->len) * es));\0A a->len = len;\0A}\0A\0A// a byte-for-byte copy of the elements (the compiler deep-copies owning elements afterwards)\0Avoid finch_arr_clone_raw(FArr *out, const FArr *a, int64_t es) {\0A out->len = a->len;\0A out->cap = a->len;\0A out->ptr = a->len ? finch_alloc(a->len * es) : NULL;\0A if (a->len) memcpy(out->ptr, a->ptr, (size_t)(a->len * es));\0A}\0A\0Avoid finch_arr_free(FArr *a) {\0A if (a->cap > 0) free(a->ptr);\0A}\0A\0A// open a hole at i (0 <= i <= len), len grows by one\0Avoid finch_arr_insert_gap(FArr *a, int64_t i, int64_t es, const char *file, int64_t line) {\0A if (i < 0 || i > a->len) finch_panic_index(file, line, i, a->len);\0A finch_arr_reserve(a, a->len + 1, es);\0A char *p = a->ptr;\0A memmove(p + (i + 1) * es, p + i * es, (size_t)((a->len - i) * es));\0A a->len++;\0A}\0A\0A// close the hole at i (the element was already moved out), len shrinks by one\0Avoid finch_arr_remove_gap(FArr *a, int64_t i, int64_t es) {\0A char *p = a->ptr;\0A memmove(p + i * es, p + (i + 1) * es, (size_t)((a->len - i - 1) * es));\0A a->len--;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len) {\0A finch_arr_reserve(a, a->len + 1, (int64_t)sizeof(FStr));\0A str_heap((FStr *)a->ptr + a->len, p, len);\0A a->len++;\0A}\0A\0Avoid finch_bytes_from_str(FArr *out, const FStr *s) {\0A out->len = out->cap = s->len;\0A out->ptr = s->len ? finch_alloc(s->len) : NULL;\0A if (s->len) memcpy(out->ptr, s->ptr, (size_t)s->len);\0A}\0A\0A// ---------- program arguments, input and files ----------\0A\0Avoid finch_args(FArr *out, int argc, char **argv) {\0A out->len = out->cap = argc;\0A out->ptr = finch_alloc((int64_t)sizeof(FStr) * (argc ? argc : 1));\0A for (int i = 0; i < argc; i++) str_heap((FStr *)out->ptr + i, argv[i], (int64_t)strlen(argv[i]));\0A}\0A\0A// input(\22Name? \22) prints the prompt and reads one line, without the newline.\0Avoid finch_input(FStr *out, const FStr *prompt) {\0A if (prompt->len) fwrite(prompt->ptr, 1, (size_t)prompt->len, stdout);\0A fflush(stdout);\0A // read one line of any length (getline isn't available everywhere)\0A size_t size = 128, n = 0;\0A char *line = finch_alloc((int64_t)size);\0A int c, got = 0;\0A while ((c = fgetc(stdin)) != EOF) {\0A got = 1;\0A if (c == '\5Cn') break;\0A if (n + 1 >= size) line = must(realloc(line, size *= 2));\0A line[n++] = (char)c;\0A }\0A if (!got) {\0A free(line);\0A str_static(out, empty);\0A return;\0A }\0A while (n > 0 && line[n - 1] == '\5Cr') n--;\0A line[n] = 0;\0A out->ptr = line;\0A out->len = (int64_t)n;\0A out->cap = (int64_t)size;\0A}\0A\0Aint finch_file_exists(const FStr *path) {\0A FILE *f = fopen(path->ptr, \22rb\22);\0A if (f) fclose(f);\0A return f != NULL;\0A}\0A\0Aint finch_try_read_file(FStr *out, const FStr *path, FStr *err) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A file_error(err, \22read\22, path);\0A return 0;\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A return 1;\0A}\0A\0Avoid finch_read_file(FStr *out, const FStr *path, const char *file, int64_t line) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't read the file \5C\22%.*s\5C\22: %s\22, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr, strerror(errno));\0A finch_panic(file, line, msg);\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A}\0A\0A// shell(\22ls -l\22): run a command, give back its exit code\0Aint64_t finch_shell(const FStr *cmd) {\0A fflush(stdout);\0A int status = system(cmd->ptr ? cmd->ptr : \22\22);\0A#ifdef _WIN32\0A return status; // Windows gives the exit code directly\0A#else\0A if (status == -1) return -1;\0A if (WIFEXITED(status)) return WEXITSTATUS(status);\0A return 128 + (WIFSIGNALED(status) ? WTERMSIG(status) : 0);\0A#endif\0A}\0A\0Aint finch_delete_file(const FStr *path) { return remove(path->ptr ? path->ptr : \22\22) == 0; }\0A\0Aint finch_try_delete_file(const FStr *path, FStr *err) {\0A if (remove(path->ptr ? path->ptr : \22\22) == 0) return 1;\0A file_error(err, \22delete\22, path);\0A return 0;\0A}\0A\0A// stdin/stdout/stderr are macros on some systems (Windows), so Finch asks for them here\0Avoid *finch_std_stream(int i) { return i == 0 ? (void *)stdin : i == 1 ? (void *)stdout : (void *)stderr; }\0A\0Aint finch_write_file(const FStr *path, const FStr *text) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22wb\22);\0A if (!f) return 0;\0A size_t put = text->len ? fwrite(text->ptr, 1, (size_t)text->len, f) : 0;\0A return fclose(f) == 0 && put == (size_t)text->len;\0A}\0A\0Aint finch_try_write_file(const FStr *path, const FStr *text, FStr *err) {\0A errno = 0;\0A if (finch_write_file(path, text)) return 1;\0A if (!errno) errno = EIO;\0A file_error(err, \22write\22, path);\0A return 0;\0A}\0A\0A// ---------- maps ----------\0A// map[K]V = { entries; len; used; cap; index; icap; adds }\0A// entries: `used` slots of es bytes, each { uint64 hash; K key; V value }, in insertion order.\0A// A removed entry keeps its slot (hash 0) until the next resize packs the slots.\0A// index: icap slots (a power of two, at least 2 * cap): -1 empty, -2 removed, else an entry number.\0A// adds: how many keys were ever added; a `for` over the map stops with an error if it changes.\0A// The compiler stores, copies and drops keys and values; the runtime only finds and places entries.\0A// Keys are compared byte for byte (numbers, chars, bools) or as text (kstr).\0A\0Atypedef struct {\0A char *entries;\0A int64_t len, used, cap;\0A int64_t *index;\0A int64_t icap;\0A int64_t adds;\0A} FMap;\0A\0Astatic uint64_t map_hash(const void *key, int64_t ks, int kstr) {\0A const unsigned char *p;\0A size_t n;\0A if (kstr) {\0A const FStr *s = key;\0A p = (const unsigned char *)s->ptr;\0A n = (size_t)s->len;\0A } else {\0A p = key;\0A n = (size_t)ks;\0A }\0A uint64_t h = 1469598103934665603ULL; // FNV-1a, then mixed so the low bits spread well\0A for (size_t i = 0; i < n; i++) {\0A h ^= p[i];\0A h *= 1099511628211ULL;\0A }\0A h ^= h >> 31;\0A h *= 0xbf58476d1ce4e5b9ULL;\0A h ^= h >> 29;\0A return h | 1; // 0 marks a removed entry\0A}\0A\0Astatic int map_key_eq(const char *a, const void *b, int64_t ks, int kstr) {\0A if (!kstr) return memcmp(a, b, (size_t)ks) == 0;\0A const FStr *x = (const FStr *)a, *y = b;\0A return x->len == y->len && (x->len == 0 || memcmp(x->ptr, y->ptr, (size_t)x->len) == 0);\0A}\0A\0Astatic void map_reindex(FMap *m, int64_t es) {\0A if (m->len != m->used) { // pack the slots of removed entries away\0A int64_t j = 0;\0A for (int64_t i = 0; i < m->used; i++) {\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == 0) continue;\0A if (i != j) memmove(m->entries + j * es, e, (size_t)es);\0A j++;\0A }\0A m->used = j;\0A }\0A int64_t icap = 16;\0A while (icap < m->cap * 2) icap *= 2;\0A free(m->index);\0A m->index = finch_alloc(icap * (int64_t)sizeof(int64_t));\0A memset(m->index, 0xff, (size_t)icap * sizeof(int64_t));\0A m->icap = icap;\0A for (int64_t i = 0; i < m->used; i++) {\0A uint64_t h = *(uint64_t *)(m->entries + i * es);\0A int64_t s = (int64_t)(h & (uint64_t)(icap - 1));\0A while (m->index[s] != -1) s = (s + 1) & (icap - 1);\0A m->index[s] = i;\0A }\0A}\0A\0A// the entry number of `key`, or -1\0Aint64_t finch_map_find(const FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr) {\0A if (m->len == 0) return -1;\0A uint64_t h = map_hash(key, ks, kstr);\0A for (int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));; s = (s + 1) & (m->icap - 1)) {\0A int64_t i = m->index[s];\0A if (i == -1) return -1;\0A if (i < 0) continue;\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == h && map_key_eq(e + 8, key, ks, kstr)) return i;\0A }\0A}\0A\0A// The entry for `key`. A new one is zeroed except its hash (*added = 1); the compiler then stores the key.\0Aint64_t finch_map_slot(FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr, int32_t *added) {\0A int64_t i = finch_map_find(m, key, es, ks, kstr);\0A *added = i < 0;\0A if (i >= 0) return i;\0A if (m->used == m->cap) {\0A if (m->len * 4 < m->cap * 3) { // many removed slots: pack them instead of growing\0A map_reindex(m, es);\0A } else {\0A m->cap = m->cap ? m->cap * 2 : 8;\0A m->entries = must(realloc(m->entries, (size_t)(m->cap * es)));\0A map_reindex(m, es);\0A }\0A }\0A uint64_t h = map_hash(key, ks, kstr);\0A i = m->used++;\0A char *e = m->entries + i * es;\0A memset(e, 0, (size_t)es);\0A *(uint64_t *)e = h;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] >= 0) s = (s + 1) & (m->icap - 1);\0A m->index[s] = i;\0A m->len++;\0A m->adds++;\0A return i;\0A}\0A\0A// Forget entry i (its key and value were already dropped by the compiler).\0Avoid finch_map_remove_at(FMap *m, int64_t i, int64_t es) {\0A char *e = m->entries + i * es;\0A uint64_t h = *(uint64_t *)e;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] != i) s = (s + 1) & (m->icap - 1);\0A m->index[s] = -2;\0A *(uint64_t *)e = 0;\0A if (--m->len == 0) {\0A m->used = 0;\0A memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A }\0A}\0A\0Avoid finch_map_clear(FMap *m) {\0A m->len = m->used = 0;\0A if (m->index) memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0Avoid finch_map_free(FMap *m) {\0A free(m->entries);\0A free(m->index);\0A}\0A\0A// A copy of the slots and the index; the compiler then copies the keys and values that own memory.\0Avoid finch_map_clone_raw(FMap *out, const FMap *m, int64_t es) {\0A *out = *m;\0A if (!m->cap) return;\0A out->entries = finch_alloc(m->cap * es);\0A memcpy(out->entries, m->entries, (size_t)(m->used * es));\0A out->index = finch_alloc(m->icap * (int64_t)sizeof(int64_t));\0A memcpy(out->index, m->index, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_changed(const char *file, int64_t line) {\0A finch_panic(file, line, \22a key was added to the map while looping over it (collect the new keys, and add them after the loop)\22);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_missing(const char *file, int64_t line, const FStr *key) {\0A char msg[200];\0A snprintf(msg, sizeof msg, \22the key %.*s is not in the map (check with .has(key), or use .get(key, default))\22,\0A (int)(key->len > 100 ? 100 : key->len), key->ptr ? key->ptr : \22\22);\0A finch_panic(file, line, msg);\0A}\0A\00" +@.str.7553 = private unnamed_addr constant [12885 x i8] c"// JSON: read it, build it, write it.\0A//\0A// import json\0A//\0A// doc := try json.parse(\22{\5C\22name\5C\22: \5C\22Finch\5C\22, \5C\22tags\5C\22: [\5C\22fast\5C\22, \5C\22small\5C\22], \5C\22stars\5C\22: 5}\22)\0A// print(doc.get(\22name\22).str_or(\22\22)) Finch\0A// print(doc.get(\22tags\22).at(1).str_or(\22\22)) small\0A// print(doc.get(\22stars\22).int_or(0)) 5\0A// print(doc.get(\22missing\22).is_null()) true (a missing key is null, so chains never fail)\0A//\0A// out := json.new_object()\0A// out.set(\22ok\22, json.new_bool(true))\0A// list := json.new_list()\0A// list.push(json.new_number(1.5))\0A// out.set(\22values\22, list)\0A// print(json.stringify(out)) {\22ok\22:true,\22values\22:[1.5]}\0A// print(json.pretty(out)) the same, over several lines\0A\0Aenum Kind { Null, Bool, Number, Text, List, Object }\0A\0A// One JSON value. `kind` says which of the other fields it uses: flag for Bool, num for Number,\0A// text for Text, items for List, and items with keys (the same length, in the same order) for Object.\0Astruct Json {\0A Kind kind\0A bool flag\0A float num\0A str text\0A []Json items\0A []str keys\0A}\0A\0Afn new_null() -> Json {\0A return Json(kind: Kind.Null)\0A}\0A\0Afn new_bool(bool b) -> Json {\0A return Json(kind: Kind.Bool, flag: b)\0A}\0A\0Afn new_number(float n) -> Json {\0A return Json(kind: Kind.Number, num: n)\0A}\0A\0Afn new_text(str s) -> Json {\0A return Json(kind: Kind.Text, text: s)\0A}\0A\0Afn new_list() -> Json {\0A return Json(kind: Kind.List)\0A}\0A\0Afn new_object() -> Json {\0A return Json(kind: Kind.Object)\0A}\0A\0A// ---------- looking inside ----------\0A\0Afn Json.is_null() -> bool {\0A return self.kind == Kind.Null\0A}\0A\0A// the number of elements of a list, of keys of an object, of bytes of a text; 0 for the rest\0Afn Json.len() -> int {\0A return match self.kind {\0A List, Object -> self.items.len\0A Text -> self.text.len\0A else -> 0\0A }\0A}\0A\0Afn Json.has(str key) -> bool {\0A return self.kind == Kind.Object && self.keys.contains(key)\0A}\0A\0A// the value of a key of an object; null if there is none (or this is not an object)\0Afn Json.get(str key) -> Json {\0A if self.kind != Kind.Object {\0A return new_null()\0A }\0A i := self.keys.find(key)\0A if i < 0 {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the element of a list; null if there is none\0Afn Json.at(int i) -> Json {\0A if self.kind != Kind.List || i < 0 || i >= self.items.len {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the value if it is of that kind, else what was given\0Afn Json.str_or(str fallback) -> str {\0A if self.kind == Kind.Text {\0A return self.text\0A }\0A return fallback\0A}\0A\0Afn Json.float_or(float fallback) -> float {\0A if self.kind == Kind.Number {\0A return self.num\0A }\0A return fallback\0A}\0A\0Afn Json.int_or(int fallback) -> int {\0A if self.kind == Kind.Number {\0A return int(self.num)\0A }\0A return fallback\0A}\0A\0Afn Json.bool_or(bool fallback) -> bool {\0A if self.kind == Kind.Bool {\0A return self.flag\0A }\0A return fallback\0A}\0A\0A// the keys of an object, in the order they were written\0Afn Json.names() -> []str {\0A return self.keys\0A}\0A\0A// ---------- building ----------\0A\0A// add to the end of a list\0Afn Json.push(Json v) {\0A self.items.push(v)\0A}\0A\0A// give a key a value in an object; a key that is already there is replaced\0Afn Json.set(str key, Json v) {\0A i := self.keys.find(key)\0A if i >= 0 {\0A self.items[i] = v\0A return\0A }\0A self.keys.push(key)\0A self.items.push(v)\0A}\0A\0A// ---------- writing ----------\0A\0Afn quote(str s) -> str {\0A []str parts = [\22\5C\22\22]\0A for c in s {\0A n := int(c)\0A if c == '\22' {\0A parts.push(\22\5C\5C\5C\22\22)\0A } else if c == '\5C\5C' {\0A parts.push(\22\5C\5C\5C\5C\22)\0A } else if c == '\5Cn' {\0A parts.push(\22\5C\5Cn\22)\0A } else if c == '\5Cr' {\0A parts.push(\22\5C\5Cr\22)\0A } else if c == '\5Ct' {\0A parts.push(\22\5C\5Ct\22)\0A } else if n < 32 {\0A parts.push(\22\5C\5Cu00\22 + hexdigit(n / 16) + hexdigit(n % 16))\0A } else {\0A parts.push(str(c))\0A }\0A }\0A parts.push(\22\5C\22\22)\0A return parts.join(\22\22)\0A}\0A\0Afn hexdigit(int n) -> str {\0A digits := \220123456789abcdef\22\0A return str(digits[n])\0A}\0A\0Afn number_text(float n) -> str {\0A if n == float(int(n)) && n > -1000000000000000.0 && n < 1000000000000000.0 {\0A return str(int(n))\0A }\0A return str(n)\0A}\0A\0Astruct Writer {\0A []str out\0A}\0A\0Afn write(Json j, str indent, str pad, ptr[Writer] w) {\0A nl := \22\22\0A inner := \22\22\0A sep := \22,\22\0A colon := \22:\22\0A if indent.len > 0 {\0A nl = \22\5Cn\22\0A inner = pad + indent\0A colon = \22: \22\0A }\0A match j.kind {\0A Null -> w.out.push(\22null\22)\0A Bool -> {\0A if j.flag {\0A w.out.push(\22true\22)\0A } else {\0A w.out.push(\22false\22)\0A }\0A }\0A Number -> w.out.push(number_text(j.num))\0A Text -> w.out.push(quote(j.text))\0A List -> {\0A if j.items.len == 0 {\0A w.out.push(\22[]\22)\0A return\0A }\0A w.out.push(\22[\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22]\22)\0A }\0A Object -> {\0A if j.items.len == 0 {\0A w.out.push(\22{}\22)\0A return\0A }\0A w.out.push(\22{\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner + quote(j.keys[i]) + colon)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22}\22)\0A }\0A }\0A}\0A\0A// the value as text on one line\0Afn stringify(Json j) -> str {\0A w := Writer()\0A write(j, \22\22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// the value as text over several lines, indented by two spaces\0Afn pretty(Json j) -> str {\0A w := Writer()\0A write(j, \22 \22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// ---------- reading ----------\0A\0Astruct Reader {\0A str src\0A int i\0A}\0A\0A// the line and column of a position, for a message\0Afn where(ptr[Reader] r) -> str {\0A line := 1\0A col := 1\0A for k in 0..r.i {\0A if k < r.src.len && r.src[k] == '\5Cn' {\0A line += 1\0A col = 1\0A } else {\0A col += 1\0A }\0A }\0A return \22line \22 + str(line) + \22, column \22 + str(col)\0A}\0A\0Afn peek(ptr[Reader] r) -> char {\0A if r.i < r.src.len {\0A return r.src[r.i]\0A }\0A return char(0)\0A}\0A\0Afn skip_space(ptr[Reader] r) {\0A while r.i < r.src.len && (r.src[r.i] == ' ' || r.src[r.i] == '\5Cn' || r.src[r.i] == '\5Ct' || r.src[r.i] == '\5Cr') {\0A r.i += 1\0A }\0A}\0A\0Afn unexpected(ptr[Reader] r, str wanted) -> str {\0A if r.i >= r.src.len {\0A return \22json: the text ends where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A }\0A return \22json: found '\22 + str(r.src[r.i]) + \22' where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A}\0A\0A// does `word` come next?\0Afn comes(ptr[Reader] r, str word) -> bool {\0A return r.src.len - r.i >= word.len && r.src.sub(r.i, r.i + word.len) == word\0A}\0A\0Afn expect_word(ptr[Reader] r, str word) -> ! {\0A if !comes(r, word) {\0A return error(unexpected(r, \22'\22 + word + \22'\22))\0A }\0A r.i += word.len\0A}\0A\0Afn hex_value(char c) -> int {\0A if c >= '0' && c <= '9' {\0A return int(c) - int('0')\0A }\0A if c >= 'a' && c <= 'f' {\0A return int(c) - int('a') + 10\0A }\0A if c >= 'A' && c <= 'F' {\0A return int(c) - int('A') + 10\0A }\0A return -1\0A}\0A\0A// a code point as UTF-8\0Afn utf8(int cp) -> str {\0A []u8 b\0A if cp < 128 {\0A b.push(u8(cp))\0A } else if cp < 2048 {\0A b.push(u8(192 + cp / 64))\0A b.push(u8(128 + cp % 64))\0A } else if cp < 65536 {\0A b.push(u8(224 + cp / 4096))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A } else {\0A b.push(u8(240 + cp / 262144))\0A b.push(u8(128 + (cp / 4096) % 64))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A }\0A return str(b)\0A}\0A\0Afn read_hex4(ptr[Reader] r) -> int! {\0A n := 0\0A for k in 0..4 {\0A if r.i >= r.src.len || hex_value(r.src[r.i]) < 0 {\0A return error(unexpected(r, \22a hexadecimal digit\22))\0A }\0A n = n * 16 + hex_value(r.src[r.i])\0A r.i += 1\0A }\0A return n\0A}\0A\0Afn read_string(ptr[Reader] r) -> str! {\0A r.i += 1 // the opening quote\0A []str parts\0A start := r.i\0A while true {\0A if r.i >= r.src.len {\0A return error(\22json: a text is never closed (\22 + where(r) + \22)\22)\0A }\0A c := r.src[r.i]\0A if c == '\22' {\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A return parts.join(\22\22)\0A }\0A if int(c) < 32 {\0A return error(\22json: a line break or control character inside a text (\22 + where(r) + \22)\22)\0A }\0A if c != '\5C\5C' {\0A r.i += 1\0A continue\0A }\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A e := peek(r)\0A r.i += 1\0A if e == 'n' {\0A parts.push(\22\5Cn\22)\0A } else if e == 't' {\0A parts.push(\22\5Ct\22)\0A } else if e == 'r' {\0A parts.push(\22\5Cr\22)\0A } else if e == 'b' {\0A parts.push(utf8(8))\0A } else if e == 'f' {\0A parts.push(utf8(12))\0A } else if e == '\22' || e == '\5C\5C' || e == '/' {\0A parts.push(str(e))\0A } else if e == 'u' {\0A cp := try read_hex4(r)\0A // a pair of \F0\9F\98\80 stands for one character above U+FFFF\0A if cp >= 55296 && cp < 56320 && comes(r, \22\5C\5Cu\22) {\0A r.i += 2\0A low := try read_hex4(r)\0A cp = 65536 + (cp - 55296) * 1024 + (low - 56320)\0A }\0A parts.push(utf8(cp))\0A } else {\0A return error(\22json: unknown escape \5C\5C\22 + str(e) + \22 in a text (\22 + where(r) + \22)\22)\0A }\0A start = r.i\0A }\0A}\0A\0Afn read_number(ptr[Reader] r) -> Json! {\0A start := r.i\0A if peek(r) == '-' {\0A r.i += 1\0A }\0A while r.i < r.src.len && ((r.src[r.i] >= '0' && r.src[r.i] <= '9') || r.src[r.i] == '.' || r.src[r.i] == 'e' || r.src[r.i] == 'E' || r.src[r.i] == '+' || r.src[r.i] == '-') {\0A r.i += 1\0A }\0A n := float(r.src.sub(start, r.i)) or {\0A r.i = start\0A return error(unexpected(r, \22a number\22))\0A }\0A return new_number(n)\0A}\0A\0Afn read_value(ptr[Reader] r) -> Json! {\0A skip_space(r)\0A c := peek(r)\0A if r.i >= r.src.len {\0A return error(unexpected(r, \22a value\22))\0A }\0A if c == '{' {\0A obj := new_object()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A while true {\0A skip_space(r)\0A if peek(r) != '\22' {\0A return error(unexpected(r, \22a key in quotes\22))\0A }\0A key := try read_string(r)\0A skip_space(r)\0A if peek(r) != ':' {\0A return error(unexpected(r, \22':'\22))\0A }\0A r.i += 1\0A v := try read_value(r)\0A obj.set(key, v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A return error(unexpected(r, \22',' or '}'\22))\0A }\0A }\0A if c == '[' {\0A list := new_list()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A while true {\0A v := try read_value(r)\0A list.push(v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A return error(unexpected(r, \22',' or ']'\22))\0A }\0A }\0A if c == '\22' {\0A s := try read_string(r)\0A return new_text(s)\0A }\0A if c == 't' {\0A try expect_word(r, \22true\22)\0A return new_bool(true)\0A }\0A if c == 'f' {\0A try expect_word(r, \22false\22)\0A return new_bool(false)\0A }\0A if c == 'n' {\0A try expect_word(r, \22null\22)\0A return new_null()\0A }\0A if c == '-' || (c >= '0' && c <= '9') {\0A return try read_number(r)\0A }\0A return error(unexpected(r, \22a value\22))\0A}\0A\0A// the JSON in `text`; an error with the line and column where it went wrong\0Afn parse(str text) -> Json! {\0A r := Reader(src: text)\0A v := try read_value(addr(r))\0A skip_space(addr(r))\0A if r.i < r.src.len {\0A return error(unexpected(addr(r), \22the end of the text\22))\0A }\0A return v\0A}\0A\00" +@.str.7554 = private unnamed_addr constant [2847 x i8] c"// Paths, as text. Elements are separated by \22/\22.\0A//\0A// import path\0A// path.join(\22a\22, \22b.txt\22) a/b.txt\0A// path.base(\22/tmp/x/a.tar.gz\22) a.tar.gz path.stem(...) a.tar path.ext(...) .gz\0A// path.dir(\22/tmp/x/a.txt\22) /tmp/x\0A// path.clean(\22a//b/../c/./d\22) a/c/d\0A\0A// a and b with one separator between; an absolute b replaces a\0Afn join(str a, str b) -> str {\0A if a.len == 0 {\0A return b\0A }\0A if b.len == 0 {\0A return a\0A }\0A if b[0] == '/' {\0A return b\0A }\0A if a[a.len - 1] == '/' {\0A return a + b\0A }\0A return a + \22/\22 + b\0A}\0A\0Afn is_abs(str p) -> bool {\0A return p.len > 0 && p[0] == '/'\0A}\0A\0A// the last element: \22a/b.txt\22 -> \22b.txt\22, \22a/b/\22 -> \22b\22, \22\22 -> \22.\22, \22/\22 -> \22/\22\0Afn base(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A if end == 1 && p[0] == '/' {\0A return \22/\22\0A }\0A start := end\0A while start > 0 && p[start - 1] != '/' {\0A start -= 1\0A }\0A return p.sub(start, end)\0A}\0A\0A// everything before the last element: \22a/b.txt\22 -> \22a\22, \22b.txt\22 -> \22.\22, \22/b\22 -> \22/\22\0Afn dir(str p) -> str {\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A i := end\0A while i > 0 && p[i - 1] != '/' {\0A i -= 1\0A }\0A if i == 0 {\0A return \22.\22\0A }\0A while i > 1 && p[i - 1] == '/' {\0A i -= 1\0A }\0A return p.sub(0, i)\0A}\0A\0A// the part of the last element from its last dot: \22a.tar.gz\22 -> \22.gz\22; \22\22 when there is none\0Afn ext(str p) -> str {\0A b := base(p)\0A i := b.len\0A while i > 0 && b[i - 1] != '.' {\0A i -= 1\0A }\0A if i <= 1 { // no dot, or a name that only starts with one (.bashrc)\0A return \22\22\0A }\0A return b.sub(i - 1, b.len)\0A}\0A\0A// the last element without its extension\0Afn stem(str p) -> str {\0A b := base(p)\0A e := ext(p)\0A return b.sub(0, b.len - e.len)\0A}\0A\0A// the elements of a path: \22/a/b/c\22 -> [\22a\22, \22b\22, \22c\22]\0Afn parts(str p) -> []str {\0A []str out\0A for piece in p.split(\22/\22) {\0A if piece.len > 0 {\0A out.push(piece)\0A }\0A }\0A return out\0A}\0A\0A// the shortest path with the same meaning: no \22//\22, no \22.\22, and \22..\22 resolved where it can be\0Afn clean(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A abs := is_abs(p)\0A []str out\0A for piece in parts(p) {\0A if piece == \22.\22 {\0A continue\0A }\0A if piece == \22..\22 {\0A if out.len > 0 && out[out.len - 1] != \22..\22 {\0A out.pop()\0A } else if !abs {\0A out.push(\22..\22)\0A }\0A continue\0A }\0A out.push(piece)\0A }\0A joined := out.join(\22/\22)\0A if abs {\0A return \22/\22 + joined\0A }\0A if joined.len == 0 {\0A return \22.\22\0A }\0A return joined\0A}\0A\00" +@.str.7555 = private unnamed_addr constant [1407 x i8] c"// Programs: run a command, read what it printed, look at the environment.\0A//\0A// import proc\0A// code := proc.run(\22make\22) the exit code; what the command prints goes to the screen\0A// text := try proc.output(\22git describe\22) what the command printed; an error if it failed\0A// proc.env(\22HOME\22, \22/\22) an environment variable, or the second value if it is not set\0Aimport \22stdlib.h\22\0Aimport \22unistd.h\22\0Aimport \22time.h\22\0A\0A// run a command; its output goes to the screen. Gives its exit code.\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0A// run a command and give what it printed. Fails, with its output as the message, if it exits with an error.\0Afn output(str command) -> str! {\0A tmp := \22/tmp/finch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(\22(\22 + command + \22) > '\22 + tmp + \22' 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0A// the folder the program is running in\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7556 = private unnamed_addr constant [996 x i8] c"// Programs, for Windows. The same functions as proc.fch (that file is for Linux and macOS).\0Aimport \22stdlib.h\22\0Aimport \22process.h\22\0Aimport \22direct.h\22\0Aimport \22time.h\22\0A\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0Afn output(str command) -> str! {\0A tmp := proc_env(\22TEMP\22, \22.\22) + \22\5C\5Cfinch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(command + \22 > \5C\22\22 + tmp + \22\5C\22 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn proc_env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn env(str name, str fallback) -> str {\0A return proc_env(name, fallback)\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7557 = private unnamed_addr constant [2540 x i8] c"// Time: the clock, sleeping, and dates.\0A//\0A// import time\0A// start := time.millis() milliseconds from a clock that only goes forward (to measure with)\0A// time.sleep(250) wait a quarter of a second\0A// time.now() seconds since 1970-01-01 00:00 UTC\0A// d := time.date(time.now()) the parts: d.year, d.month, d.day, d.hour, d.minute, d.second\0A// time.format(time.now(), \22%Y-%m-%d %H:%M\22) as text, in the computer's time zone\0Aimport \22time.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0A// seconds since 1970-01-01 00:00 UTC\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward: for measuring how long something took\0Afn millis() -> int {\0A timespec ts\0A clock_gettime(CLOCK_MONOTONIC, addr(ts))\0A return int(ts.tv_sec) * 1000 + int(ts.tv_nsec) / 1000000\0A}\0A\0Afn sleep(int ms) {\0A timespec ts\0A ts.tv_sec = ms / 1000\0A ts.tv_nsec = (ms % 1000) * 1000000\0A nanosleep(addr(ts), null)\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0A// the date and time of a moment, in UTC\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A gmtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// the date and time of a moment, in the computer's time zone\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// a moment as text, in the computer's time zone: %Y year, %m month, %d day, %H hour, %M minute, %S second\0A// (the rest of C's strftime works too: %A weekday name, %B month name, ...)\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0A// the number of days in a month (month is 1 to 12)\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7558 = private unnamed_addr constant [1793 x i8] c"// Time, for Windows. The same functions as time.fch (that file is for Linux and macOS).\0Aimport \22time.h\22\0Aimport \22finch_win.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward (the performance counter: GetTickCount64 ticks every 15 ms)\0Afn millis() -> int {\0A i64 count = 0\0A i64 freq = 1\0A QueryPerformanceFrequency(addr(freq))\0A QueryPerformanceCounter(addr(count))\0A return int(count / freq) * 1000 + int(count % freq) * 1000 / int(freq)\0A}\0A\0Afn sleep(int ms) {\0A Sleep(u32(ms))\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _gmtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7559 = private unnamed_addr constant [366 x i8] c"/* The Windows functions std/time_windows.fch needs. Declared here, not by including :\0A libclang can't parse that header with MinGW's intrinsics. Both are in kernel32. */\0Aunsigned long long GetTickCount64(void);\0Avoid Sleep(unsigned long milliseconds);\0Aint QueryPerformanceCounter(long long *count);\0Aint QueryPerformanceFrequency(long long *frequency);\0A\00" declare void @finch_panic(ptr, i64, ptr) noreturn cold declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold @@ -9698,19 +9713,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond399 -n.cond399: + br label %n.cond403 +n.cond403: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body400, label %n.end401 -n.body400: + br i1 %t6, label %n.body404, label %n.end405 +n.body404: %t7 = getelementptr inbounds %S.cimport.Header, ptr %t1, i64 %t5 call void @finch.drop.S_cimport_Header(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond399 -n.end401: + br label %n.cond403 +n.end405: call void @finch_arr_free(ptr %a) ret void } @@ -9722,19 +9737,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond402 -n.cond402: + br label %n.cond406 +n.cond406: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body403, label %n.end404 -n.body403: + br i1 %t6, label %n.body407, label %n.end408 +n.body407: %t7 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t5 call void @finch.drop.S_ast_Program(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond402 -n.end404: + br label %n.cond406 +n.end408: call void @finch_arr_free(ptr %a) ret void } @@ -9827,31 +9842,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond412 -n.cond412: + br label %n.cond416 +n.cond416: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body413, label %n.end414 -n.body413: + br i1 %t5, label %n.body417, label %n.end418 +n.body417: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live415, label %entry.next416 -entry.live415: + br i1 %t11, label %entry.live419, label %entry.next420 +entry.live419: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_cimport_CFunc(ptr %t13) - br label %entry.next416 -entry.next416: + br label %entry.next420 +entry.next420: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond412 -n.end414: + br label %n.cond416 +n.end418: call void @finch_map_free(ptr %a) ret void } @@ -9870,31 +9885,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond417 -n.cond417: + br label %n.cond421 +n.cond421: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body418, label %n.end419 -n.body418: + br i1 %t5, label %n.body422, label %n.end423 +n.body422: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live420, label %entry.next421 -entry.live420: + br i1 %t11, label %entry.live424, label %entry.next425 +entry.live424: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_cimport_CConst(ptr %t13) - br label %entry.next421 -entry.next421: + br label %entry.next425 +entry.next425: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond417 -n.end419: + br label %n.cond421 +n.end423: call void @finch_map_free(ptr %a) ret void } @@ -9905,31 +9920,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond422 -n.cond422: + br label %n.cond426 +n.cond426: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body423, label %n.end424 -n.body423: + br i1 %t5, label %n.body427, label %n.end428 +n.body427: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live425, label %entry.next426 -entry.live425: + br i1 %t11, label %entry.live429, label %entry.next430 +entry.live429: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_ast_Type(ptr %t13) - br label %entry.next426 -entry.next426: + br label %entry.next430 +entry.next430: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond422 -n.end424: + br label %n.cond426 +n.end428: call void @finch_map_free(ptr %a) ret void } @@ -9951,19 +9966,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond432 -n.cond432: + br label %n.cond436 +n.cond436: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body433, label %n.end434 -n.body433: + br i1 %t6, label %n.body437, label %n.end438 +n.body437: %t7 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t5 call void @finch.drop.S_cimport_CField(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond432 -n.end434: + br label %n.cond436 +n.end438: call void @finch_arr_free(ptr %a) ret void } @@ -9986,31 +10001,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond427 -n.cond427: + br label %n.cond431 +n.cond431: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body428, label %n.end429 -n.body428: + br i1 %t5, label %n.body432, label %n.end433 +n.body432: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live430, label %entry.next431 -entry.live430: + br i1 %t11, label %entry.live434, label %entry.next435 +entry.live434: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_cimport_CStruct(ptr %t13) - br label %entry.next431 -entry.next431: + br label %entry.next435 +entry.next435: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond427 -n.end429: + br label %n.cond431 +n.end433: call void @finch_map_free(ptr %a) ret void } @@ -10289,92 +10304,92 @@ entry: %a811 = alloca { ptr, i64, i64 }, align 16 %a812 = alloca { ptr, i64, i64 }, align 16 %a822 = alloca { ptr, i64, i64 }, align 16 - %a827 = alloca { ptr, i64, i64 }, align 16 - %a828 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 - %a844 = alloca { ptr, i64, i64 }, align 16 - %a853 = alloca %S.cimport.CImports, align 16 - %a862 = alloca { ptr, i64, i64 }, align 16 - %a863 = alloca { ptr, i64, i64 }, align 16 - %a872 = alloca %S.platform.Target, align 16 - %a873 = alloca %S.platform.Target, align 16 - %a877 = alloca %S.gen.Options, align 16 - %a878 = alloca { ptr, i64, i64 }, align 16 - %a880 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca %S.cimport.CImports, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a866 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca %S.platform.Target, align 16 + %a876 = alloca %S.platform.Target, align 16 + %a880 = alloca %S.gen.Options, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 - %a885 = alloca { ptr, i64, i64 }, align 16 - %a886 = alloca { ptr, i64, i64 }, align 16 - %a902 = alloca { ptr, i64, i64 }, align 16 - %a904 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 %a905 = alloca { ptr, i64, i64 }, align 16 %a907 = alloca { ptr, i64, i64 }, align 16 - %a918 = alloca { ptr, i64, i64 }, align 16 - %a919 = alloca { ptr, i64, i64 }, align 16 - %a920 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 %a921 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca { ptr, i64, i64 }, align 16 + %a923 = alloca { ptr, i64, i64 }, align 16 %a924 = alloca { ptr, i64, i64 }, align 16 - %a926 = alloca { ptr, i64, i64 }, align 16 - %a937 = alloca { ptr, i64, i64 }, align 16 - %a938 = alloca { ptr, i64, i64 }, align 16 - %a939 = alloca { ptr, i64, i64 }, align 16 + %a927 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 %a940 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 %a943 = alloca { ptr, i64, i64 }, align 16 - %a945 = alloca { ptr, i64, i64 }, align 16 - %a956 = alloca { ptr, i64, i64 }, align 16 - %a957 = alloca { ptr, i64, i64 }, align 16 - %a958 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 - %a964 = alloca { ptr, i64, i64 }, align 16 - %a968 = alloca { ptr, i64, i64 }, align 16 - %a973 = alloca { ptr, i64, i64 }, align 16 - %a975 = alloca { ptr, i64, i64 }, align 16 - %a980 = alloca { ptr, i64, i64 }, align 16 - %a981 = alloca { ptr, i64, i64 }, align 16 - %a982 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a978 = alloca { ptr, i64, i64 }, align 16 %a983 = alloca { ptr, i64, i64 }, align 16 + %a984 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 %a986 = alloca { ptr, i64, i64 }, align 16 - %a987 = alloca { ptr, i64, i64 }, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 %a990 = alloca { ptr, i64, i64 }, align 16 %a993 = alloca { ptr, i64, i64 }, align 16 - %a994 = alloca { ptr, i64, i64 }, align 16 - %a995 = alloca { ptr, i64, i64 }, align 16 + %a996 = alloca { ptr, i64, i64 }, align 16 + %a997 = alloca { ptr, i64, i64 }, align 16 %a998 = alloca { ptr, i64, i64 }, align 16 - %a1000 = alloca { ptr, i64, i64 }, align 16 %a1001 = alloca { ptr, i64, i64 }, align 16 - %a1005 = alloca { ptr, i64, i64 }, align 16 - %a1006 = alloca { ptr, i64, i64 }, align 16 - %a1010 = alloca { ptr, i64, i64 }, align 16 - %a1011 = alloca { ptr, i64, i64 }, align 16 - %a1015 = alloca { ptr, i64, i64 }, align 16 - %a1016 = alloca { ptr, i64, i64 }, align 16 - %a1020 = alloca { ptr, i64, i64 }, align 16 - %a1021 = alloca { ptr, i64, i64 }, align 16 - %a1027 = alloca { ptr, i64, i64 }, align 16 - %a1028 = alloca { ptr, i64, i64 }, align 16 - %a1034 = alloca %S.linker.Build, align 16 - %a1037 = alloca { ptr, i64, i64 }, align 16 - %a1038 = alloca { ptr, i64, i64 }, align 16 + %a1003 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca %S.linker.Build, align 16 + %a1040 = alloca { ptr, i64, i64 }, align 16 %a1041 = alloca { ptr, i64, i64 }, align 16 - %a1042 = alloca i64, align 16 - %a1050 = alloca { ptr, i64, i64 }, align 16 - %a1064 = alloca { ptr, i64, i64 }, align 16 - %a1065 = alloca { ptr, i64, i64 }, align 16 - %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1045 = alloca i64, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 %a1069 = alloca { ptr, i64, i64 }, align 16 %a1070 = alloca { ptr, i64, i64 }, align 16 - %a1071 = alloca { ptr, i64, i64 }, align 16 %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 %a1075 = alloca { ptr, i64, i64 }, align 16 - %a1076 = alloca { ptr, i64, i64 }, align 16 %a1078 = alloca { ptr, i64, i64 }, align 16 %a1079 = alloca { ptr, i64, i64 }, align 16 - %a1080 = alloca { ptr, i64, i64 }, align 16 %a1081 = alloca { ptr, i64, i64 }, align 16 %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 %a1085 = alloca { ptr, i64, i64 }, align 16 - %a1086 = alloca i64, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca i64, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 @@ -11779,43 +11794,54 @@ each.end350: store { ptr, i64, i64 } { ptr @.str.235, i64 0, i64 0 }, ptr %a822 %t823 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 5 %t824 = load i1, ptr %t823 - br i1 %t824, label %then394, label %endif396 -then394: - %t825 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 0 - %t826 = load { ptr, i64, i64 }, ptr %t825 - store { ptr, i64, i64 } %t826, ptr %a827 - call void @finch_str_copy(ptr %a828, ptr %a827) - %t829 = load { ptr, i64, i64 }, ptr %a828 - %t830 = load { ptr, i64, i64 }, ptr %a822 - store { ptr, i64, i64 } %t829, ptr %a822 - store { ptr, i64, i64 } %t830, ptr %a831 - call void @finch_str_drop(ptr %a831) - br label %endif396 -endif396: - %t832 = load { ptr, i64, i64 }, ptr %a632 - %t833 = load { ptr, i64, i64 }, ptr %a638 - %t834 = load { ptr, i64, i64 }, ptr %a822 - %t835 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 - %t836 = load i1, ptr %t835 - %t837 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 7 - %t838 = load { ptr, i64, i64 }, ptr %t837 - %t839 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t832, { ptr, i64, i64 } %t833, { ptr, i64, i64 } %t834, i1 %t836, { ptr, i64, i64 } %t838) - %t840 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t839, 0 - %t841 = xor i1 %t840, true - %t842 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t839, 2 - %t843 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t839, 1 - br i1 %t841, label %or.failed397, label %or.ok398 -or.failed397: - store { ptr, i64, i64 } %t842, ptr %a844 - %t845 = load { ptr, i64, i64 }, ptr %a844 - %t846 = extractvalue { ptr, i64, i64 } %t845, 1 - %t847 = trunc i64 %t846 to i32 - %t848 = extractvalue { ptr, i64, i64 } %t845, 0 - %t849 = icmp eq ptr %t848, null - %t850 = select i1 %t849, ptr @.str.236, ptr %t848 - %t851 = call i32 (ptr, ...) @printf(ptr @.str.237, i32 %t847, ptr %t850) - %t852 = call i32 (ptr, ...) @printf(ptr @.str.238) - call void @finch_str_drop(ptr %a844) + br label %logic.from394 +logic.from394: + br i1 %t824, label %logic.end396, label %logic.rhs395 +logic.rhs395: + %t825 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t826 = load i1, ptr %t825 + br label %logic.rend397 +logic.rend397: + br label %logic.end396 +logic.end396: + %t827 = phi i1 [ true, %logic.from394 ], [ %t826, %logic.rend397 ] + br i1 %t827, label %then398, label %endif400 +then398: + %t828 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 0 + %t829 = load { ptr, i64, i64 }, ptr %t828 + store { ptr, i64, i64 } %t829, ptr %a830 + call void @finch_str_copy(ptr %a831, ptr %a830) + %t832 = load { ptr, i64, i64 }, ptr %a831 + %t833 = load { ptr, i64, i64 }, ptr %a822 + store { ptr, i64, i64 } %t832, ptr %a822 + store { ptr, i64, i64 } %t833, ptr %a834 + call void @finch_str_drop(ptr %a834) + br label %endif400 +endif400: + %t835 = load { ptr, i64, i64 }, ptr %a632 + %t836 = load { ptr, i64, i64 }, ptr %a638 + %t837 = load { ptr, i64, i64 }, ptr %a822 + %t838 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t839 = load i1, ptr %t838 + %t840 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 7 + %t841 = load { ptr, i64, i64 }, ptr %t840 + %t842 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t835, { ptr, i64, i64 } %t836, { ptr, i64, i64 } %t837, i1 %t839, { ptr, i64, i64 } %t841) + %t843 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 0 + %t844 = xor i1 %t843, true + %t845 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 2 + %t846 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 1 + br i1 %t844, label %or.failed401, label %or.ok402 +or.failed401: + store { ptr, i64, i64 } %t845, ptr %a847 + %t848 = load { ptr, i64, i64 }, ptr %a847 + %t849 = extractvalue { ptr, i64, i64 } %t848, 1 + %t850 = trunc i64 %t849 to i32 + %t851 = extractvalue { ptr, i64, i64 } %t848, 0 + %t852 = icmp eq ptr %t851, null + %t853 = select i1 %t852, ptr @.str.236, ptr %t851 + %t854 = call i32 (ptr, ...) @printf(ptr @.str.237, i32 %t850, ptr %t853) + %t855 = call i32 (ptr, ...) @printf(ptr @.str.238) + call void @finch_str_drop(ptr %a847) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -11834,65 +11860,65 @@ or.failed397: call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 1 -or.ok398: - store %S.cimport.CImports %t843, ptr %a853 - %t854 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 - %t855 = load { ptr, i64, i64 }, ptr %t854 - %t856 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 1 - %t857 = load { ptr, i64, i64 }, ptr %t856 - %t858 = load %S.cimport.CImports, ptr %a853 - %t859 = load i1, ptr %a105 - %t860 = insertvalue %S.gen.Options zeroinitializer, i1 %t859, 0 - %t861 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } %t861, ptr %a862 - store { ptr, i64, i64 } { ptr @.str.239, i64 5, i64 0 }, ptr %a863 - %t864 = call i32 @finch_str_eq(ptr %a862, ptr %a863) - %t865 = icmp ne i32 %t864, 0 - %t866 = insertvalue %S.gen.Options %t860, i1 %t865, 1 - %t867 = load i1, ptr %a106 - %t868 = insertvalue %S.gen.Options %t866, i1 %t867, 2 - %t869 = call { ptr, i64, i64 } @finch.host.cwd() - %t870 = insertvalue %S.gen.Options %t868, { ptr, i64, i64 } %t869, 3 - %t871 = load %S.platform.Target, ptr %a381 - store %S.platform.Target %t871, ptr %a872 - call void @finch.copy.S_platform_Target(ptr %a873, ptr %a872) - %t874 = load %S.platform.Target, ptr %a873 - %t875 = insertvalue %S.gen.Options %t870, %S.platform.Target %t874, 4 - %t876 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t855, { ptr, i64, i64 } %t857, %S.cimport.CImports %t858, %S.gen.Options %t875) - store %S.gen.Options %t875, ptr %a877 - call void @finch.drop.S_gen_Options(ptr %a877) - store { ptr, i64, i64 } %t876, ptr %a878 - %t879 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } %t879, ptr %a880 - store { ptr, i64, i64 } { ptr @.str.240, i64 2, i64 0 }, ptr %a881 - %t882 = call i32 @finch_str_eq(ptr %a880, ptr %a881) - %t883 = icmp ne i32 %t882, 0 - br label %logic.from405 -logic.from405: - br i1 %t883, label %logic.end407, label %logic.rhs406 -logic.rhs406: - %t884 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } %t884, ptr %a885 - store { ptr, i64, i64 } { ptr @.str.241, i64 5, i64 0 }, ptr %a886 - %t887 = call i32 @finch_str_eq(ptr %a885, ptr %a886) - %t888 = icmp ne i32 %t887, 0 - br label %logic.rend408 -logic.rend408: - br label %logic.end407 -logic.end407: - %t889 = phi i1 [ true, %logic.from405 ], [ %t888, %logic.rend408 ] - br i1 %t889, label %then409, label %endif411 -then409: - %t890 = load { ptr, i64, i64 }, ptr %a878 - %t891 = extractvalue { ptr, i64, i64 } %t890, 1 - %t892 = trunc i64 %t891 to i32 - %t893 = extractvalue { ptr, i64, i64 } %t890, 0 - %t894 = icmp eq ptr %t893, null - %t895 = select i1 %t894, ptr @.str.242, ptr %t893 - %t896 = call i32 (ptr, ...) @printf(ptr @.str.243, i32 %t892, ptr %t895) - %t897 = call i32 (ptr, ...) @printf(ptr @.str.244) - call void @finch_str_drop(ptr %a878) - call void @finch.drop.S_cimport_CImports(ptr %a853) +or.ok402: + store %S.cimport.CImports %t846, ptr %a856 + %t857 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 + %t858 = load { ptr, i64, i64 }, ptr %t857 + %t859 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 1 + %t860 = load { ptr, i64, i64 }, ptr %t859 + %t861 = load %S.cimport.CImports, ptr %a856 + %t862 = load i1, ptr %a105 + %t863 = insertvalue %S.gen.Options zeroinitializer, i1 %t862, 0 + %t864 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t864, ptr %a865 + store { ptr, i64, i64 } { ptr @.str.239, i64 5, i64 0 }, ptr %a866 + %t867 = call i32 @finch_str_eq(ptr %a865, ptr %a866) + %t868 = icmp ne i32 %t867, 0 + %t869 = insertvalue %S.gen.Options %t863, i1 %t868, 1 + %t870 = load i1, ptr %a106 + %t871 = insertvalue %S.gen.Options %t869, i1 %t870, 2 + %t872 = call { ptr, i64, i64 } @finch.host.cwd() + %t873 = insertvalue %S.gen.Options %t871, { ptr, i64, i64 } %t872, 3 + %t874 = load %S.platform.Target, ptr %a381 + store %S.platform.Target %t874, ptr %a875 + call void @finch.copy.S_platform_Target(ptr %a876, ptr %a875) + %t877 = load %S.platform.Target, ptr %a876 + %t878 = insertvalue %S.gen.Options %t873, %S.platform.Target %t877, 4 + %t879 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t858, { ptr, i64, i64 } %t860, %S.cimport.CImports %t861, %S.gen.Options %t878) + store %S.gen.Options %t878, ptr %a880 + call void @finch.drop.S_gen_Options(ptr %a880) + store { ptr, i64, i64 } %t879, ptr %a881 + %t882 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t882, ptr %a883 + store { ptr, i64, i64 } { ptr @.str.240, i64 2, i64 0 }, ptr %a884 + %t885 = call i32 @finch_str_eq(ptr %a883, ptr %a884) + %t886 = icmp ne i32 %t885, 0 + br label %logic.from409 +logic.from409: + br i1 %t886, label %logic.end411, label %logic.rhs410 +logic.rhs410: + %t887 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t887, ptr %a888 + store { ptr, i64, i64 } { ptr @.str.241, i64 5, i64 0 }, ptr %a889 + %t890 = call i32 @finch_str_eq(ptr %a888, ptr %a889) + %t891 = icmp ne i32 %t890, 0 + br label %logic.rend412 +logic.rend412: + br label %logic.end411 +logic.end411: + %t892 = phi i1 [ true, %logic.from409 ], [ %t891, %logic.rend412 ] + br i1 %t892, label %then413, label %endif415 +then413: + %t893 = load { ptr, i64, i64 }, ptr %a881 + %t894 = extractvalue { ptr, i64, i64 } %t893, 1 + %t895 = trunc i64 %t894 to i32 + %t896 = extractvalue { ptr, i64, i64 } %t893, 0 + %t897 = icmp eq ptr %t896, null + %t898 = select i1 %t897, ptr @.str.242, ptr %t896 + %t899 = call i32 (ptr, ...) @printf(ptr @.str.243, i32 %t895, ptr %t898) + %t900 = call i32 (ptr, ...) @printf(ptr @.str.244) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -11911,222 +11937,222 @@ then409: call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 0 -endif411: - %t898 = extractvalue { ptr, i64, i64 } { ptr @.str.245, i64 8, i64 0 }, 0 - %t899 = icmp eq ptr %t898, null - %t900 = select i1 %t899, ptr @.str.246, ptr %t898 - %t901 = call ptr @getenv(ptr %t900) - store { ptr, i64, i64 } zeroinitializer, ptr %a902 - call void @finch_str_from_c(ptr %a902, ptr %t901) - %t903 = load { ptr, i64, i64 }, ptr %a902 - store { ptr, i64, i64 } %t903, ptr %a904 - call void @finch_str_copy(ptr %a905, ptr %a904) +endif415: + %t901 = extractvalue { ptr, i64, i64 } { ptr @.str.245, i64 8, i64 0 }, 0 + %t902 = icmp eq ptr %t901, null + %t903 = select i1 %t902, ptr @.str.246, ptr %t901 + %t904 = call ptr @getenv(ptr %t903) + store { ptr, i64, i64 } zeroinitializer, ptr %a905 + call void @finch_str_from_c(ptr %a905, ptr %t904) %t906 = load { ptr, i64, i64 }, ptr %a905 store { ptr, i64, i64 } %t906, ptr %a907 - %t908 = getelementptr inbounds { ptr, i64, i64 }, ptr %a907, i32 0, i32 1 - %t909 = load i64, ptr %t908 - %t910 = icmp eq i64 %t909, 0 - br i1 %t910, label %then435, label %endif437 -then435: - %t911 = load { ptr, i64, i64 }, ptr %a1 - %t912 = extractvalue { ptr, i64, i64 } %t911, 1 - %t913 = icmp uge i64 0, %t912 - br i1 %t913, label %range438, label %inrange439 -range438: - call void @finch_panic_index(ptr @.str.247, i64 296, i64 0, i64 %t912) + call void @finch_str_copy(ptr %a908, ptr %a907) + %t909 = load { ptr, i64, i64 }, ptr %a908 + store { ptr, i64, i64 } %t909, ptr %a910 + %t911 = getelementptr inbounds { ptr, i64, i64 }, ptr %a910, i32 0, i32 1 + %t912 = load i64, ptr %t911 + %t913 = icmp eq i64 %t912, 0 + br i1 %t913, label %then439, label %endif441 +then439: + %t914 = load { ptr, i64, i64 }, ptr %a1 + %t915 = extractvalue { ptr, i64, i64 } %t914, 1 + %t916 = icmp uge i64 0, %t915 + br i1 %t916, label %range442, label %inrange443 +range442: + call void @finch_panic_index(ptr @.str.247, i64 296, i64 0, i64 %t915) unreachable -inrange439: - %t914 = extractvalue { ptr, i64, i64 } %t911, 0 - %t915 = getelementptr inbounds { ptr, i64, i64 }, ptr %t914, i64 0 - %t916 = load { ptr, i64, i64 }, ptr %t915 - %t917 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t916) - store { ptr, i64, i64 } %t917, ptr %a919 - store { ptr, i64, i64 } { ptr @.str.248, i64 22, i64 0 }, ptr %a920 - call void @finch_str_concat(ptr %a918, ptr %a919, ptr %a920) - store { ptr, i64, i64 } %t917, ptr %a921 - call void @finch_str_drop(ptr %a921) - %t922 = load { ptr, i64, i64 }, ptr %a918 - %t923 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t922, ptr %a907 - store { ptr, i64, i64 } %t923, ptr %a924 +inrange443: + %t917 = extractvalue { ptr, i64, i64 } %t914, 0 + %t918 = getelementptr inbounds { ptr, i64, i64 }, ptr %t917, i64 0 + %t919 = load { ptr, i64, i64 }, ptr %t918 + %t920 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t919) + store { ptr, i64, i64 } %t920, ptr %a922 + store { ptr, i64, i64 } { ptr @.str.248, i64 22, i64 0 }, ptr %a923 + call void @finch_str_concat(ptr %a921, ptr %a922, ptr %a923) + store { ptr, i64, i64 } %t920, ptr %a924 call void @finch_str_drop(ptr %a924) - br label %endif437 -endif437: - %t925 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t925, ptr %a926 - %t927 = call i32 @finch_file_exists(ptr %a926) - %t928 = icmp ne i32 %t927, 0 - %t929 = xor i1 %t928, true - br i1 %t929, label %then440, label %endif442 -then440: - %t930 = load { ptr, i64, i64 }, ptr %a1 - %t931 = extractvalue { ptr, i64, i64 } %t930, 1 - %t932 = icmp uge i64 0, %t931 - br i1 %t932, label %range443, label %inrange444 -range443: - call void @finch_panic_index(ptr @.str.249, i64 299, i64 0, i64 %t931) + %t925 = load { ptr, i64, i64 }, ptr %a921 + %t926 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t925, ptr %a910 + store { ptr, i64, i64 } %t926, ptr %a927 + call void @finch_str_drop(ptr %a927) + br label %endif441 +endif441: + %t928 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t928, ptr %a929 + %t930 = call i32 @finch_file_exists(ptr %a929) + %t931 = icmp ne i32 %t930, 0 + %t932 = xor i1 %t931, true + br i1 %t932, label %then444, label %endif446 +then444: + %t933 = load { ptr, i64, i64 }, ptr %a1 + %t934 = extractvalue { ptr, i64, i64 } %t933, 1 + %t935 = icmp uge i64 0, %t934 + br i1 %t935, label %range447, label %inrange448 +range447: + call void @finch_panic_index(ptr @.str.249, i64 299, i64 0, i64 %t934) unreachable -inrange444: - %t933 = extractvalue { ptr, i64, i64 } %t930, 0 - %t934 = getelementptr inbounds { ptr, i64, i64 }, ptr %t933, i64 0 - %t935 = load { ptr, i64, i64 }, ptr %t934 - %t936 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t935) - store { ptr, i64, i64 } %t936, ptr %a938 - store { ptr, i64, i64 } { ptr @.str.250, i64 19, i64 0 }, ptr %a939 - call void @finch_str_concat(ptr %a937, ptr %a938, ptr %a939) - store { ptr, i64, i64 } %t936, ptr %a940 - call void @finch_str_drop(ptr %a940) - %t941 = load { ptr, i64, i64 }, ptr %a937 - %t942 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t941, ptr %a907 - store { ptr, i64, i64 } %t942, ptr %a943 +inrange448: + %t936 = extractvalue { ptr, i64, i64 } %t933, 0 + %t937 = getelementptr inbounds { ptr, i64, i64 }, ptr %t936, i64 0 + %t938 = load { ptr, i64, i64 }, ptr %t937 + %t939 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t938) + store { ptr, i64, i64 } %t939, ptr %a941 + store { ptr, i64, i64 } { ptr @.str.250, i64 19, i64 0 }, ptr %a942 + call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) + store { ptr, i64, i64 } %t939, ptr %a943 call void @finch_str_drop(ptr %a943) - br label %endif442 -endif442: - %t944 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t944, ptr %a945 - %t946 = call i32 @finch_file_exists(ptr %a945) - %t947 = icmp ne i32 %t946, 0 - %t948 = xor i1 %t947, true - br i1 %t948, label %then445, label %endif447 -then445: - %t949 = load { ptr, i64, i64 }, ptr %a1 - %t950 = extractvalue { ptr, i64, i64 } %t949, 1 - %t951 = icmp uge i64 0, %t950 - br i1 %t951, label %range448, label %inrange449 -range448: - call void @finch_panic_index(ptr @.str.251, i64 302, i64 0, i64 %t950) + %t944 = load { ptr, i64, i64 }, ptr %a940 + %t945 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t944, ptr %a910 + store { ptr, i64, i64 } %t945, ptr %a946 + call void @finch_str_drop(ptr %a946) + br label %endif446 +endif446: + %t947 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t947, ptr %a948 + %t949 = call i32 @finch_file_exists(ptr %a948) + %t950 = icmp ne i32 %t949, 0 + %t951 = xor i1 %t950, true + br i1 %t951, label %then449, label %endif451 +then449: + %t952 = load { ptr, i64, i64 }, ptr %a1 + %t953 = extractvalue { ptr, i64, i64 } %t952, 1 + %t954 = icmp uge i64 0, %t953 + br i1 %t954, label %range452, label %inrange453 +range452: + call void @finch_panic_index(ptr @.str.251, i64 302, i64 0, i64 %t953) unreachable -inrange449: - %t952 = extractvalue { ptr, i64, i64 } %t949, 0 - %t953 = getelementptr inbounds { ptr, i64, i64 }, ptr %t952, i64 0 - %t954 = load { ptr, i64, i64 }, ptr %t953 - %t955 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t954) - store { ptr, i64, i64 } %t955, ptr %a957 - store { ptr, i64, i64 } { ptr @.str.252, i64 34, i64 0 }, ptr %a958 - call void @finch_str_concat(ptr %a956, ptr %a957, ptr %a958) - store { ptr, i64, i64 } %t955, ptr %a959 - call void @finch_str_drop(ptr %a959) - %t960 = load { ptr, i64, i64 }, ptr %a956 - %t961 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t960, ptr %a907 - store { ptr, i64, i64 } %t961, ptr %a962 +inrange453: + %t955 = extractvalue { ptr, i64, i64 } %t952, 0 + %t956 = getelementptr inbounds { ptr, i64, i64 }, ptr %t955, i64 0 + %t957 = load { ptr, i64, i64 }, ptr %t956 + %t958 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t957) + store { ptr, i64, i64 } %t958, ptr %a960 + store { ptr, i64, i64 } { ptr @.str.252, i64 34, i64 0 }, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t958, ptr %a962 call void @finch_str_drop(ptr %a962) - br label %endif447 -endif447: - %t963 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t963, ptr %a964 - %t965 = call i32 @finch_file_exists(ptr %a964) - %t966 = icmp ne i32 %t965, 0 - %t967 = xor i1 %t966, true - br label %logic.from450 -logic.from450: - br i1 %t967, label %logic.rhs451, label %logic.end452 -logic.rhs451: - store { ptr, i64, i64 } { ptr @.str.253, i64 18, i64 0 }, ptr %a968 - %t969 = call i32 @finch_file_exists(ptr %a968) - %t970 = icmp ne i32 %t969, 0 - br label %logic.rend453 -logic.rend453: - br label %logic.end452 -logic.end452: - %t971 = phi i1 [ false, %logic.from450 ], [ %t970, %logic.rend453 ] - br i1 %t971, label %then454, label %endif456 -then454: - %t972 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } { ptr @.str.254, i64 18, i64 0 }, ptr %a907 - store { ptr, i64, i64 } %t972, ptr %a973 - call void @finch_str_drop(ptr %a973) - br label %endif456 -endif456: - %t974 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t974, ptr %a975 - %t976 = call i32 @finch_file_exists(ptr %a975) - %t977 = icmp ne i32 %t976, 0 - %t978 = xor i1 %t977, true - br i1 %t978, label %then457, label %endif459 -then457: - %t979 = call { ptr, i64, i64 } @finch.main.unpack() - store { ptr, i64, i64 } %t979, ptr %a981 - store { ptr, i64, i64 } { ptr @.str.255, i64 19, i64 0 }, ptr %a982 - call void @finch_str_concat(ptr %a980, ptr %a981, ptr %a982) - store { ptr, i64, i64 } %t979, ptr %a983 - call void @finch_str_drop(ptr %a983) - %t984 = load { ptr, i64, i64 }, ptr %a980 - %t985 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t984, ptr %a907 - store { ptr, i64, i64 } %t985, ptr %a986 + %t963 = load { ptr, i64, i64 }, ptr %a959 + %t964 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t963, ptr %a910 + store { ptr, i64, i64 } %t964, ptr %a965 + call void @finch_str_drop(ptr %a965) + br label %endif451 +endif451: + %t966 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t966, ptr %a967 + %t968 = call i32 @finch_file_exists(ptr %a967) + %t969 = icmp ne i32 %t968, 0 + %t970 = xor i1 %t969, true + br label %logic.from454 +logic.from454: + br i1 %t970, label %logic.rhs455, label %logic.end456 +logic.rhs455: + store { ptr, i64, i64 } { ptr @.str.253, i64 18, i64 0 }, ptr %a971 + %t972 = call i32 @finch_file_exists(ptr %a971) + %t973 = icmp ne i32 %t972, 0 + br label %logic.rend457 +logic.rend457: + br label %logic.end456 +logic.end456: + %t974 = phi i1 [ false, %logic.from454 ], [ %t973, %logic.rend457 ] + br i1 %t974, label %then458, label %endif460 +then458: + %t975 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } { ptr @.str.254, i64 18, i64 0 }, ptr %a910 + store { ptr, i64, i64 } %t975, ptr %a976 + call void @finch_str_drop(ptr %a976) + br label %endif460 +endif460: + %t977 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t977, ptr %a978 + %t979 = call i32 @finch_file_exists(ptr %a978) + %t980 = icmp ne i32 %t979, 0 + %t981 = xor i1 %t980, true + br i1 %t981, label %then461, label %endif463 +then461: + %t982 = call { ptr, i64, i64 } @finch.main.unpack() + store { ptr, i64, i64 } %t982, ptr %a984 + store { ptr, i64, i64 } { ptr @.str.255, i64 19, i64 0 }, ptr %a985 + call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) + store { ptr, i64, i64 } %t982, ptr %a986 call void @finch_str_drop(ptr %a986) - br label %endif459 -endif459: - store { ptr, i64, i64 } { ptr @.str.256, i64 0, i64 0 }, ptr %a987 - %t988 = load i1, ptr %a105 - br i1 %t988, label %then460, label %endif462 -then460: - %t989 = load { ptr, i64, i64 }, ptr %a987 - store { ptr, i64, i64 } { ptr @.str.257, i64 6, i64 0 }, ptr %a987 - store { ptr, i64, i64 } %t989, ptr %a990 + %t987 = load { ptr, i64, i64 }, ptr %a983 + %t988 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t987, ptr %a910 + store { ptr, i64, i64 } %t988, ptr %a989 + call void @finch_str_drop(ptr %a989) + br label %endif463 +endif463: + store { ptr, i64, i64 } { ptr @.str.256, i64 0, i64 0 }, ptr %a990 + %t991 = load i1, ptr %a105 + br i1 %t991, label %then464, label %endif466 +then464: + %t992 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } { ptr @.str.257, i64 6, i64 0 }, ptr %a990 + store { ptr, i64, i64 } %t992, ptr %a993 + call void @finch_str_drop(ptr %a993) + br label %endif466 +endif466: + %t994 = load i1, ptr %a106 + br i1 %t994, label %then467, label %endif469 +then467: + %t995 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t995, ptr %a997 + store { ptr, i64, i64 } { ptr @.str.258, i64 3, i64 0 }, ptr %a998 + call void @finch_str_concat(ptr %a996, ptr %a997, ptr %a998) + %t999 = load { ptr, i64, i64 }, ptr %a996 + %t1000 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t999, ptr %a990 + store { ptr, i64, i64 } %t1000, ptr %a1001 + call void @finch_str_drop(ptr %a1001) + br label %endif469 +endif469: + %t1002 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t1002, ptr %a1003 + call void @finch_str_copy(ptr %a1004, ptr %a1003) + %t1005 = load { ptr, i64, i64 }, ptr %a1004 + %t1006 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t1005, 0 + %t1007 = load { ptr, i64, i64 }, ptr %a881 + store { ptr, i64, i64 } %t1007, ptr %a1008 + call void @finch_str_copy(ptr %a1009, ptr %a1008) + %t1010 = load { ptr, i64, i64 }, ptr %a1009 + %t1011 = insertvalue %S.linker.Build %t1006, { ptr, i64, i64 } %t1010, 1 + %t1012 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t1012, ptr %a1013 + call void @finch_str_copy(ptr %a1014, ptr %a1013) + %t1015 = load { ptr, i64, i64 }, ptr %a1014 + %t1016 = insertvalue %S.linker.Build %t1011, { ptr, i64, i64 } %t1015, 2 + %t1017 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t1017, ptr %a1018 + call void @finch_str_copy(ptr %a1019, ptr %a1018) + %t1020 = load { ptr, i64, i64 }, ptr %a1019 + %t1021 = insertvalue %S.linker.Build %t1016, { ptr, i64, i64 } %t1020, 3 + %t1022 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t1022, ptr %a1023 + call void @finch_str_copy(ptr %a1024, ptr %a1023) + %t1025 = load { ptr, i64, i64 }, ptr %a1024 + %t1026 = insertvalue %S.linker.Build %t1021, { ptr, i64, i64 } %t1025, 4 + %t1027 = load i1, ptr %a105 + %t1028 = insertvalue %S.linker.Build %t1026, i1 %t1027, 5 + %t1029 = load { ptr, i64, i64 }, ptr %a643 + store { ptr, i64, i64 } %t1029, ptr %a1030 + call void @finch.copy.arr_str(ptr %a1031, ptr %a1030) + %t1032 = load { ptr, i64, i64 }, ptr %a1031 + %t1033 = insertvalue %S.linker.Build %t1028, { ptr, i64, i64 } %t1032, 6 + %t1034 = load %S.platform.Target, ptr %a381 + %t1035 = load %S.cimport.CImports, ptr %a856 + %t1036 = call i64 @finch.linker.build(%S.linker.Build %t1033, %S.platform.Target %t1034, %S.cimport.CImports %t1035) + store %S.linker.Build %t1033, ptr %a1037 + call void @finch.drop.S_linker_Build(ptr %a1037) + %t1038 = icmp ne i64 %t1036, 0 + br i1 %t1038, label %then470, label %endif472 +then470: call void @finch_str_drop(ptr %a990) - br label %endif462 -endif462: - %t991 = load i1, ptr %a106 - br i1 %t991, label %then463, label %endif465 -then463: - %t992 = load { ptr, i64, i64 }, ptr %a987 - store { ptr, i64, i64 } %t992, ptr %a994 - store { ptr, i64, i64 } { ptr @.str.258, i64 3, i64 0 }, ptr %a995 - call void @finch_str_concat(ptr %a993, ptr %a994, ptr %a995) - %t996 = load { ptr, i64, i64 }, ptr %a993 - %t997 = load { ptr, i64, i64 }, ptr %a987 - store { ptr, i64, i64 } %t996, ptr %a987 - store { ptr, i64, i64 } %t997, ptr %a998 - call void @finch_str_drop(ptr %a998) - br label %endif465 -endif465: - %t999 = load { ptr, i64, i64 }, ptr %a103 - store { ptr, i64, i64 } %t999, ptr %a1000 - call void @finch_str_copy(ptr %a1001, ptr %a1000) - %t1002 = load { ptr, i64, i64 }, ptr %a1001 - %t1003 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t1002, 0 - %t1004 = load { ptr, i64, i64 }, ptr %a878 - store { ptr, i64, i64 } %t1004, ptr %a1005 - call void @finch_str_copy(ptr %a1006, ptr %a1005) - %t1007 = load { ptr, i64, i64 }, ptr %a1006 - %t1008 = insertvalue %S.linker.Build %t1003, { ptr, i64, i64 } %t1007, 1 - %t1009 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t1009, ptr %a1010 - call void @finch_str_copy(ptr %a1011, ptr %a1010) - %t1012 = load { ptr, i64, i64 }, ptr %a1011 - %t1013 = insertvalue %S.linker.Build %t1008, { ptr, i64, i64 } %t1012, 2 - %t1014 = load { ptr, i64, i64 }, ptr %a108 - store { ptr, i64, i64 } %t1014, ptr %a1015 - call void @finch_str_copy(ptr %a1016, ptr %a1015) - %t1017 = load { ptr, i64, i64 }, ptr %a1016 - %t1018 = insertvalue %S.linker.Build %t1013, { ptr, i64, i64 } %t1017, 3 - %t1019 = load { ptr, i64, i64 }, ptr %a987 - store { ptr, i64, i64 } %t1019, ptr %a1020 - call void @finch_str_copy(ptr %a1021, ptr %a1020) - %t1022 = load { ptr, i64, i64 }, ptr %a1021 - %t1023 = insertvalue %S.linker.Build %t1018, { ptr, i64, i64 } %t1022, 4 - %t1024 = load i1, ptr %a105 - %t1025 = insertvalue %S.linker.Build %t1023, i1 %t1024, 5 - %t1026 = load { ptr, i64, i64 }, ptr %a643 - store { ptr, i64, i64 } %t1026, ptr %a1027 - call void @finch.copy.arr_str(ptr %a1028, ptr %a1027) - %t1029 = load { ptr, i64, i64 }, ptr %a1028 - %t1030 = insertvalue %S.linker.Build %t1025, { ptr, i64, i64 } %t1029, 6 - %t1031 = load %S.platform.Target, ptr %a381 - %t1032 = load %S.cimport.CImports, ptr %a853 - %t1033 = call i64 @finch.linker.build(%S.linker.Build %t1030, %S.platform.Target %t1031, %S.cimport.CImports %t1032) - store %S.linker.Build %t1030, ptr %a1034 - call void @finch.drop.S_linker_Build(ptr %a1034) - %t1035 = icmp ne i64 %t1033, 0 - br i1 %t1035, label %then466, label %endif468 -then466: - call void @finch_str_drop(ptr %a987) - call void @finch_str_drop(ptr %a907) - call void @finch_str_drop(ptr %a878) - call void @finch.drop.S_cimport_CImports(ptr %a853) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -12145,85 +12171,85 @@ then466: call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 1 -endif468: - %t1036 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } %t1036, ptr %a1037 - store { ptr, i64, i64 } { ptr @.str.259, i64 3, i64 0 }, ptr %a1038 - %t1039 = call i32 @finch_str_eq(ptr %a1037, ptr %a1038) - %t1040 = icmp ne i32 %t1039, 0 - br i1 %t1040, label %then469, label %endif471 -then469: - store { ptr, i64, i64 } zeroinitializer, ptr %a1041 - store i64 0, ptr %a1042 - br label %each.cond472 -each.cond472: - %t1043 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 - %t1044 = load i64, ptr %t1043 - %t1045 = load i64, ptr %a1042 - %t1046 = icmp slt i64 %t1045, %t1044 - br i1 %t1046, label %each.body473, label %each.end475 -each.body473: - %t1047 = load ptr, ptr %a113 - %t1048 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1047, i64 %t1045 - %t1049 = load { ptr, i64, i64 }, ptr %t1048 - store { ptr, i64, i64 } %t1049, ptr %a1050 - %t1051 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1041, i32 0, i32 1 - %t1052 = load { ptr, i64, i64 }, ptr %a1050 - %t1053 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1052) - %t1054 = load i64, ptr %t1051 - %t1055 = add i64 %t1054, 1 - call void @finch_arr_reserve(ptr %a1041, i64 %t1055, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) - %t1056 = load ptr, ptr %a1041 - %t1057 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1056, i64 %t1054 - store { ptr, i64, i64 } %t1053, ptr %t1057 - store i64 %t1055, ptr %t1051 - br label %each.step474 -each.step474: - %t1058 = load i64, ptr %a1042 - %t1059 = add i64 %t1058, 1 - store i64 %t1059, ptr %a1042 - br label %each.cond472 -each.end475: - %t1060 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 8 - %t1061 = load { ptr, i64, i64 }, ptr %t1060 - %t1062 = load { ptr, i64, i64 }, ptr %a103 - %t1063 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1062) - store { ptr, i64, i64 } %t1061, ptr %a1065 - store { ptr, i64, i64 } %t1063, ptr %a1066 - call void @finch_str_concat(ptr %a1064, ptr %a1065, ptr %a1066) - store { ptr, i64, i64 } %t1063, ptr %a1067 - call void @finch_str_drop(ptr %a1067) - %t1068 = load { ptr, i64, i64 }, ptr %a1064 - store { ptr, i64, i64 } %t1068, ptr %a1070 - store { ptr, i64, i64 } { ptr @.str.260, i64 1, i64 0 }, ptr %a1071 - call void @finch_str_concat(ptr %a1069, ptr %a1070, ptr %a1071) - store { ptr, i64, i64 } %t1068, ptr %a1072 - call void @finch_str_drop(ptr %a1072) - %t1073 = load { ptr, i64, i64 }, ptr %a1069 - %t1074 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1041, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.261, i64 1, i64 0 }, ptr %a1075 - call void @finch_str_join(ptr %a1076, ptr %a1041, ptr %a1075) - %t1077 = load { ptr, i64, i64 }, ptr %a1076 - store { ptr, i64, i64 } %t1073, ptr %a1079 - store { ptr, i64, i64 } %t1077, ptr %a1080 - call void @finch_str_concat(ptr %a1078, ptr %a1079, ptr %a1080) - store { ptr, i64, i64 } %t1073, ptr %a1081 - call void @finch_str_drop(ptr %a1081) - store { ptr, i64, i64 } %t1077, ptr %a1082 - call void @finch_str_drop(ptr %a1082) - %t1083 = load { ptr, i64, i64 }, ptr %a1078 - %t1084 = call i64 @finch.host.run({ ptr, i64, i64 } %t1083) - store { ptr, i64, i64 } %t1083, ptr %a1085 +endif472: + %t1039 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t1039, ptr %a1040 + store { ptr, i64, i64 } { ptr @.str.259, i64 3, i64 0 }, ptr %a1041 + %t1042 = call i32 @finch_str_eq(ptr %a1040, ptr %a1041) + %t1043 = icmp ne i32 %t1042, 0 + br i1 %t1043, label %then473, label %endif475 +then473: + store { ptr, i64, i64 } zeroinitializer, ptr %a1044 + store i64 0, ptr %a1045 + br label %each.cond476 +each.cond476: + %t1046 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t1047 = load i64, ptr %t1046 + %t1048 = load i64, ptr %a1045 + %t1049 = icmp slt i64 %t1048, %t1047 + br i1 %t1049, label %each.body477, label %each.end479 +each.body477: + %t1050 = load ptr, ptr %a113 + %t1051 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1050, i64 %t1048 + %t1052 = load { ptr, i64, i64 }, ptr %t1051 + store { ptr, i64, i64 } %t1052, ptr %a1053 + %t1054 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + %t1055 = load { ptr, i64, i64 }, ptr %a1053 + %t1056 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1055) + %t1057 = load i64, ptr %t1054 + %t1058 = add i64 %t1057, 1 + call void @finch_arr_reserve(ptr %a1044, i64 %t1058, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1059 = load ptr, ptr %a1044 + %t1060 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1059, i64 %t1057 + store { ptr, i64, i64 } %t1056, ptr %t1060 + store i64 %t1058, ptr %t1054 + br label %each.step478 +each.step478: + %t1061 = load i64, ptr %a1045 + %t1062 = add i64 %t1061, 1 + store i64 %t1062, ptr %a1045 + br label %each.cond476 +each.end479: + %t1063 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 8 + %t1064 = load { ptr, i64, i64 }, ptr %t1063 + %t1065 = load { ptr, i64, i64 }, ptr %a103 + %t1066 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1065) + store { ptr, i64, i64 } %t1064, ptr %a1068 + store { ptr, i64, i64 } %t1066, ptr %a1069 + call void @finch_str_concat(ptr %a1067, ptr %a1068, ptr %a1069) + store { ptr, i64, i64 } %t1066, ptr %a1070 + call void @finch_str_drop(ptr %a1070) + %t1071 = load { ptr, i64, i64 }, ptr %a1067 + store { ptr, i64, i64 } %t1071, ptr %a1073 + store { ptr, i64, i64 } { ptr @.str.260, i64 1, i64 0 }, ptr %a1074 + call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) + store { ptr, i64, i64 } %t1071, ptr %a1075 + call void @finch_str_drop(ptr %a1075) + %t1076 = load { ptr, i64, i64 }, ptr %a1072 + %t1077 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.261, i64 1, i64 0 }, ptr %a1078 + call void @finch_str_join(ptr %a1079, ptr %a1044, ptr %a1078) + %t1080 = load { ptr, i64, i64 }, ptr %a1079 + store { ptr, i64, i64 } %t1076, ptr %a1082 + store { ptr, i64, i64 } %t1080, ptr %a1083 + call void @finch_str_concat(ptr %a1081, ptr %a1082, ptr %a1083) + store { ptr, i64, i64 } %t1076, ptr %a1084 + call void @finch_str_drop(ptr %a1084) + store { ptr, i64, i64 } %t1080, ptr %a1085 call void @finch_str_drop(ptr %a1085) - store i64 %t1084, ptr %a1086 - %t1087 = load { ptr, i64, i64 }, ptr %a103 - call void @finch.host.remove({ ptr, i64, i64 } %t1087) - %t1088 = load i64, ptr %a1086 - call void @finch.drop.arr_str(ptr %a1041) - call void @finch_str_drop(ptr %a987) - call void @finch_str_drop(ptr %a907) - call void @finch_str_drop(ptr %a878) - call void @finch.drop.S_cimport_CImports(ptr %a853) + %t1086 = load { ptr, i64, i64 }, ptr %a1081 + %t1087 = call i64 @finch.host.run({ ptr, i64, i64 } %t1086) + store { ptr, i64, i64 } %t1086, ptr %a1088 + call void @finch_str_drop(ptr %a1088) + store i64 %t1087, ptr %a1089 + %t1090 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.host.remove({ ptr, i64, i64 } %t1090) + %t1091 = load i64, ptr %a1089 + call void @finch.drop.arr_str(ptr %a1044) + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -12241,12 +12267,12 @@ each.end475: call void @finch_str_drop(ptr %a103) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) - ret i64 %t1088 -endif471: - call void @finch_str_drop(ptr %a987) - call void @finch_str_drop(ptr %a907) - call void @finch_str_drop(ptr %a878) - call void @finch.drop.S_cimport_CImports(ptr %a853) + ret i64 %t1091 +endif475: + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -12273,50 +12299,50 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 97 - br label %logic.from476 -logic.from476: - br i1 %t3, label %logic.rhs477, label %logic.end478 -logic.rhs477: - %t4 = load i8, ptr %a1 - %t5 = icmp ule i8 %t4, 122 - br label %logic.rend479 -logic.rend479: - br label %logic.end478 -logic.end478: - %t6 = phi i1 [ false, %logic.from476 ], [ %t5, %logic.rend479 ] br label %logic.from480 logic.from480: - br i1 %t6, label %logic.end482, label %logic.rhs481 + br i1 %t3, label %logic.rhs481, label %logic.end482 logic.rhs481: - %t7 = load i8, ptr %a1 - %t8 = icmp uge i8 %t7, 65 - br label %logic.from483 -logic.from483: - br i1 %t8, label %logic.rhs484, label %logic.end485 -logic.rhs484: - %t9 = load i8, ptr %a1 - %t10 = icmp ule i8 %t9, 90 - br label %logic.rend486 -logic.rend486: - br label %logic.end485 -logic.end485: - %t11 = phi i1 [ false, %logic.from483 ], [ %t10, %logic.rend486 ] - br label %logic.rend487 -logic.rend487: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 122 + br label %logic.rend483 +logic.rend483: br label %logic.end482 logic.end482: - %t12 = phi i1 [ true, %logic.from480 ], [ %t11, %logic.rend487 ] - br label %logic.from488 -logic.from488: - br i1 %t12, label %logic.end490, label %logic.rhs489 -logic.rhs489: - %t13 = load i8, ptr %a1 - %t14 = icmp eq i8 %t13, 95 + %t6 = phi i1 [ false, %logic.from480 ], [ %t5, %logic.rend483 ] + br label %logic.from484 +logic.from484: + br i1 %t6, label %logic.end486, label %logic.rhs485 +logic.rhs485: + %t7 = load i8, ptr %a1 + %t8 = icmp uge i8 %t7, 65 + br label %logic.from487 +logic.from487: + br i1 %t8, label %logic.rhs488, label %logic.end489 +logic.rhs488: + %t9 = load i8, ptr %a1 + %t10 = icmp ule i8 %t9, 90 + br label %logic.rend490 +logic.rend490: + br label %logic.end489 +logic.end489: + %t11 = phi i1 [ false, %logic.from487 ], [ %t10, %logic.rend490 ] br label %logic.rend491 logic.rend491: - br label %logic.end490 -logic.end490: - %t15 = phi i1 [ true, %logic.from488 ], [ %t14, %logic.rend491 ] + br label %logic.end486 +logic.end486: + %t12 = phi i1 [ true, %logic.from484 ], [ %t11, %logic.rend491 ] + br label %logic.from492 +logic.from492: + br i1 %t12, label %logic.end494, label %logic.rhs493 +logic.rhs493: + %t13 = load i8, ptr %a1 + %t14 = icmp eq i8 %t13, 95 + br label %logic.rend495 +logic.rend495: + br label %logic.end494 +logic.end494: + %t15 = phi i1 [ true, %logic.from492 ], [ %t14, %logic.rend495 ] ret i1 %t15 } @@ -12326,17 +12352,17 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 - br label %logic.from492 -logic.from492: - br i1 %t3, label %logic.rhs493, label %logic.end494 -logic.rhs493: + br label %logic.from496 +logic.from496: + br i1 %t3, label %logic.rhs497, label %logic.end498 +logic.rhs497: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 - br label %logic.rend495 -logic.rend495: - br label %logic.end494 -logic.end494: - %t6 = phi i1 [ false, %logic.from492 ], [ %t5, %logic.rend495 ] + br label %logic.rend499 +logic.rend499: + br label %logic.end498 +logic.end498: + %t6 = phi i1 [ false, %logic.from496 ], [ %t5, %logic.rend499 ] ret i1 %t6 } @@ -12346,50 +12372,50 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = call i1 @finch.lexer.isDigit(i8 %t2) - br label %logic.from496 -logic.from496: - br i1 %t3, label %logic.end498, label %logic.rhs497 -logic.rhs497: + br label %logic.from500 +logic.from500: + br i1 %t3, label %logic.end502, label %logic.rhs501 +logic.rhs501: %t4 = load i8, ptr %a1 %t5 = icmp uge i8 %t4, 97 - br label %logic.from499 -logic.from499: - br i1 %t5, label %logic.rhs500, label %logic.end501 -logic.rhs500: + br label %logic.from503 +logic.from503: + br i1 %t5, label %logic.rhs504, label %logic.end505 +logic.rhs504: %t6 = load i8, ptr %a1 %t7 = icmp ule i8 %t6, 102 - br label %logic.rend502 -logic.rend502: - br label %logic.end501 -logic.end501: - %t8 = phi i1 [ false, %logic.from499 ], [ %t7, %logic.rend502 ] - br label %logic.rend503 -logic.rend503: - br label %logic.end498 -logic.end498: - %t9 = phi i1 [ true, %logic.from496 ], [ %t8, %logic.rend503 ] - br label %logic.from504 -logic.from504: - br i1 %t9, label %logic.end506, label %logic.rhs505 -logic.rhs505: + br label %logic.rend506 +logic.rend506: + br label %logic.end505 +logic.end505: + %t8 = phi i1 [ false, %logic.from503 ], [ %t7, %logic.rend506 ] + br label %logic.rend507 +logic.rend507: + br label %logic.end502 +logic.end502: + %t9 = phi i1 [ true, %logic.from500 ], [ %t8, %logic.rend507 ] + br label %logic.from508 +logic.from508: + br i1 %t9, label %logic.end510, label %logic.rhs509 +logic.rhs509: %t10 = load i8, ptr %a1 %t11 = icmp uge i8 %t10, 65 - br label %logic.from507 -logic.from507: - br i1 %t11, label %logic.rhs508, label %logic.end509 -logic.rhs508: + br label %logic.from511 +logic.from511: + br i1 %t11, label %logic.rhs512, label %logic.end513 +logic.rhs512: %t12 = load i8, ptr %a1 %t13 = icmp ule i8 %t12, 70 - br label %logic.rend510 -logic.rend510: - br label %logic.end509 -logic.end509: - %t14 = phi i1 [ false, %logic.from507 ], [ %t13, %logic.rend510 ] - br label %logic.rend511 -logic.rend511: - br label %logic.end506 -logic.end506: - %t15 = phi i1 [ true, %logic.from504 ], [ %t14, %logic.rend511 ] + br label %logic.rend514 +logic.rend514: + br label %logic.end513 +logic.end513: + %t14 = phi i1 [ false, %logic.from511 ], [ %t13, %logic.rend514 ] + br label %logic.rend515 +logic.rend515: + br label %logic.end510 +logic.end510: + %t15 = phi i1 [ true, %logic.from508 ], [ %t14, %logic.rend515 ] ret i1 %t15 } @@ -12456,27 +12482,27 @@ entry: %t32 = load i64, ptr %t29 %t33 = load ptr, ptr %a28 store i64 0, ptr %a34 - br label %find.cond512 -find.cond512: + br label %find.cond516 +find.cond516: %t35 = load i64, ptr %a34 %t36 = icmp slt i64 %t35, %t32 - br i1 %t36, label %find.body513, label %find.end516 -find.body513: + br i1 %t36, label %find.body517, label %find.end520 +find.body517: %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t35 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } %t30, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 - br i1 %t42, label %find.hit514, label %find.next515 -find.hit514: + br i1 %t42, label %find.hit518, label %find.next519 +find.hit518: store i64 %t35, ptr %a31 - br label %find.end516 -find.next515: + br label %find.end520 +find.next519: %t43 = add i64 %t35, 1 store i64 %t43, ptr %a34 - br label %find.cond512 -find.end516: + br label %find.cond516 +find.end520: %t44 = load i64, ptr %a31 %t45 = icmp sge i64 %t44, 0 call void @finch.drop.arr_str(ptr %a28) @@ -12523,11 +12549,11 @@ entry: store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic517, label %ok518 -panic517: + br i1 %t6, label %panic521, label %ok522 +panic521: call void @finch_panic(ptr @.str.283, i64 41, ptr @.str.284) unreachable -ok518: +ok522: %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %t7 store { ptr, i64, i64 } %t8, ptr %a10 @@ -12598,43 +12624,43 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic519, label %ok520 -panic519: + br i1 %t4, label %panic523, label %ok524 +panic523: call void @finch_panic(ptr @.str.291, i64 46, ptr @.str.292) unreachable -ok520: +ok524: %t5 = getelementptr inbounds %S.lexer.Lexer, ptr %t3, i32 0, i32 2 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic521, label %ok522 -panic521: + br i1 %t10, label %panic525, label %ok526 +panic525: call void @finch_panic(ptr @.str.293, i64 46, ptr @.str.294) unreachable -ok522: +ok526: %t11 = getelementptr inbounds %S.lexer.Lexer, ptr %t9, i32 0, i32 0 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = icmp slt i64 %t8, %t13 - br i1 %t14, label %then523, label %endif525 -then523: + br i1 %t14, label %then527, label %endif529 +then527: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic526, label %ok527 -panic526: + br i1 %t16, label %panic530, label %ok531 +panic530: call void @finch_panic(ptr @.str.295, i64 47, ptr @.str.296) unreachable -ok527: +ok531: %t17 = getelementptr inbounds %S.lexer.Lexer, ptr %t15, i32 0, i32 0 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic528, label %ok529 -panic528: + br i1 %t19, label %panic532, label %ok533 +panic532: call void @finch_panic(ptr @.str.297, i64 47, ptr @.str.298) unreachable -ok529: +ok533: %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 2 %t21 = load i64, ptr %t20 %t22 = load i64, ptr %a2 @@ -12642,16 +12668,16 @@ ok529: %t24 = load { ptr, i64, i64 }, ptr %t17 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 - br i1 %t26, label %range530, label %inrange531 -range530: + br i1 %t26, label %range534, label %inrange535 +range534: call void @finch_panic_index(ptr @.str.299, i64 47, i64 %t23, i64 %t25) unreachable -inrange531: +inrange535: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 %t29 = load i8, ptr %t28 ret i8 %t29 -endif525: +endif529: %t30 = trunc i64 0 to i8 ret i8 %t30 } @@ -12663,96 +12689,96 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic532, label %ok533 -panic532: + br i1 %t3, label %panic536, label %ok537 +panic536: call void @finch_panic(ptr @.str.300, i64 53, ptr @.str.301) unreachable -ok533: +ok537: %t4 = getelementptr inbounds %S.lexer.Lexer, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic534, label %ok535 -panic534: + br i1 %t6, label %panic538, label %ok539 +panic538: call void @finch_panic(ptr @.str.302, i64 53, ptr @.str.303) unreachable -ok535: +ok539: %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 2 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range536, label %inrange537 -range536: + br i1 %t11, label %range540, label %inrange541 +range540: call void @finch_panic_index(ptr @.str.304, i64 53, i64 %t8, i64 %t10) unreachable -inrange537: +inrange541: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 store i8 %t14, ptr %a15 %t16 = load i8, ptr %a15 %t17 = icmp eq i8 %t16, 10 - br i1 %t17, label %then538, label %else539 -then538: + br i1 %t17, label %then542, label %else543 +then542: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic541, label %ok542 -panic541: + br i1 %t19, label %panic545, label %ok546 +panic545: call void @finch_panic(ptr @.str.305, i64 55, ptr @.str.306) unreachable -ok542: +ok546: %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 3 %t21 = load i64, ptr %t20 %t22 = add i64 %t21, 1 store i64 %t22, ptr %t20 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic543, label %ok544 -panic543: + br i1 %t24, label %panic547, label %ok548 +panic547: call void @finch_panic(ptr @.str.307, i64 56, ptr @.str.308) unreachable -ok544: +ok548: %t25 = getelementptr inbounds %S.lexer.Lexer, ptr %t23, i32 0, i32 4 store i64 1, ptr %t25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic545, label %ok546 -panic545: + br i1 %t27, label %panic549, label %ok550 +panic549: call void @finch_panic(ptr @.str.309, i64 57, ptr @.str.310) unreachable -ok546: +ok550: %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 5 store i1 true, ptr %t28 - br label %endif540 -else539: + br label %endif544 +else543: %t29 = load i8, ptr %a15 %t30 = zext i8 %t29 to i64 %t31 = and i64 %t30, 192 %t32 = icmp ne i64 %t31, 128 - br i1 %t32, label %then547, label %endif549 -then547: + br i1 %t32, label %then551, label %endif553 +then551: %t33 = load ptr, ptr %a1 %t34 = icmp eq ptr %t33, null - br i1 %t34, label %panic550, label %ok551 -panic550: + br i1 %t34, label %panic554, label %ok555 +panic554: call void @finch_panic(ptr @.str.311, i64 59, ptr @.str.312) unreachable -ok551: +ok555: %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 4 %t36 = load i64, ptr %t35 %t37 = add i64 %t36, 1 store i64 %t37, ptr %t35 - br label %endif549 -endif549: - br label %endif540 -endif540: + br label %endif553 +endif553: + br label %endif544 +endif544: %t38 = load ptr, ptr %a1 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic552, label %ok553 -panic552: + br i1 %t39, label %panic556, label %ok557 +panic556: call void @finch_panic(ptr @.str.313, i64 61, ptr @.str.314) unreachable -ok553: +ok557: %t40 = getelementptr inbounds %S.lexer.Lexer, ptr %t38, i32 0, i32 2 %t41 = load i64, ptr %t40 %t42 = add i64 %t41, 1 @@ -12819,53 +12845,53 @@ entry: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic554, label %ok555 -panic554: + br i1 %t25, label %panic558, label %ok559 +panic558: call void @finch_panic(ptr @.str.331, i64 67, ptr @.str.332) unreachable -ok555: +ok559: %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 2 %t27 = load i64, ptr %t26 %t28 = add i64 %t27, 1 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic556, label %ok557 -panic556: + br i1 %t30, label %panic560, label %ok561 +panic560: call void @finch_panic(ptr @.str.333, i64 67, ptr @.str.334) unreachable -ok557: +ok561: %t31 = getelementptr inbounds %S.lexer.Lexer, ptr %t29, i32 0, i32 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t28, %t33 - br i1 %t34, label %then558, label %endif560 -then558: + br i1 %t34, label %then562, label %endif564 +then562: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic561, label %ok562 -panic561: + br i1 %t36, label %panic565, label %ok566 +panic565: call void @finch_panic(ptr @.str.335, i64 68, ptr @.str.336) unreachable -ok562: +ok566: %t37 = getelementptr inbounds %S.lexer.Lexer, ptr %t35, i32 0, i32 0 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic563, label %ok564 -panic563: + br i1 %t42, label %panic567, label %ok568 +panic567: call void @finch_panic(ptr @.str.338, i64 68, ptr @.str.339) unreachable -ok564: +ok568: %t43 = getelementptr inbounds %S.lexer.Lexer, ptr %t41, i32 0, i32 2 %t44 = load i64, ptr %t43 %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null - br i1 %t46, label %panic565, label %ok566 -panic565: + br i1 %t46, label %panic569, label %ok570 +panic569: call void @finch_panic(ptr @.str.340, i64 68, ptr @.str.341) unreachable -ok566: +ok570: %t47 = getelementptr inbounds %S.lexer.Lexer, ptr %t45, i32 0, i32 2 %t48 = load i64, ptr %t47 %t49 = add i64 %t48, 2 @@ -12878,65 +12904,65 @@ ok566: %t55 = load i64, ptr %t52 %t56 = load ptr, ptr %a23 store i64 0, ptr %a57 - br label %find.cond567 -find.cond567: + br label %find.cond571 +find.cond571: %t58 = load i64, ptr %a57 %t59 = icmp slt i64 %t58, %t55 - br i1 %t59, label %find.body568, label %find.end571 -find.body568: + br i1 %t59, label %find.body572, label %find.end575 +find.body572: %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i64 %t58 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } %t53, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 - br i1 %t65, label %find.hit569, label %find.next570 -find.hit569: + br i1 %t65, label %find.hit573, label %find.next574 +find.hit573: store i64 %t58, ptr %a54 - br label %find.end571 -find.next570: + br label %find.end575 +find.next574: %t66 = add i64 %t58, 1 store i64 %t66, ptr %a57 - br label %find.cond567 -find.end571: + br label %find.cond571 +find.end575: %t67 = load i64, ptr %a54 %t68 = icmp sge i64 %t67, 0 - br i1 %t68, label %then572, label %endif574 -then572: + br i1 %t68, label %then576, label %endif578 +then576: %t69 = load { ptr, i64, i64 }, ptr %a51 call void @finch.drop.arr_str(ptr %a23) ret { ptr, i64, i64 } %t69 -endif574: +endif578: call void @finch_str_drop(ptr %a51) - br label %endif560 -endif560: + br label %endif564 +endif564: store { ptr, i64, i64 } { ptr @.str.342, i64 22, i64 0 }, ptr %a70 %t71 = load ptr, ptr %a1 %t72 = icmp eq ptr %t71, null - br i1 %t72, label %panic575, label %ok576 -panic575: + br i1 %t72, label %panic579, label %ok580 +panic579: call void @finch_panic(ptr @.str.343, i64 74, ptr @.str.344) unreachable -ok576: +ok580: %t73 = getelementptr inbounds %S.lexer.Lexer, ptr %t71, i32 0, i32 0 %t74 = load { ptr, i64, i64 }, ptr %t73 store { ptr, i64, i64 } %t74, ptr %a75 %t77 = load ptr, ptr %a1 %t78 = icmp eq ptr %t77, null - br i1 %t78, label %panic577, label %ok578 -panic577: + br i1 %t78, label %panic581, label %ok582 +panic581: call void @finch_panic(ptr @.str.346, i64 74, ptr @.str.347) unreachable -ok578: +ok582: %t79 = getelementptr inbounds %S.lexer.Lexer, ptr %t77, i32 0, i32 2 %t80 = load i64, ptr %t79 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic579, label %ok580 -panic579: + br i1 %t82, label %panic583, label %ok584 +panic583: call void @finch_panic(ptr @.str.348, i64 74, ptr @.str.349) unreachable -ok580: +ok584: %t83 = getelementptr inbounds %S.lexer.Lexer, ptr %t81, i32 0, i32 2 %t84 = load i64, ptr %t83 %t85 = add i64 %t84, 1 @@ -12949,13 +12975,13 @@ ok580: store { ptr, i64, i64 } %t91, ptr %a92 %t93 = call i64 @finch_str_find(ptr %a89, ptr %a92) %t94 = icmp sge i64 %t93, 0 - br i1 %t94, label %then581, label %endif583 -then581: + br i1 %t94, label %then585, label %endif587 +then585: %t95 = load { ptr, i64, i64 }, ptr %a87 call void @finch_str_drop(ptr %a70) call void @finch.drop.arr_str(ptr %a23) ret { ptr, i64, i64 } %t95 -endif583: +endif587: call void @finch_str_drop(ptr %a87) call void @finch_str_drop(ptr %a70) call void @finch.drop.arr_str(ptr %a23) @@ -12976,75 +13002,75 @@ entry: store i8 %p1, ptr %a2 %t3 = load i8, ptr %a2 %t4 = icmp eq i8 %t3, 110 - br i1 %t4, label %then584, label %endif586 -then584: + br i1 %t4, label %then588, label %endif590 +then588: ret i8 10 -endif586: +endif590: %t5 = load i8, ptr %a2 %t6 = icmp eq i8 %t5, 116 - br i1 %t6, label %then587, label %endif589 -then587: + br i1 %t6, label %then591, label %endif593 +then591: ret i8 9 -endif589: +endif593: %t7 = load i8, ptr %a2 %t8 = icmp eq i8 %t7, 114 - br i1 %t8, label %then590, label %endif592 -then590: + br i1 %t8, label %then594, label %endif596 +then594: ret i8 13 -endif592: +endif596: %t9 = load i8, ptr %a2 %t10 = icmp eq i8 %t9, 48 - br i1 %t10, label %then593, label %endif595 -then593: + br i1 %t10, label %then597, label %endif599 +then597: %t11 = trunc i64 0 to i8 ret i8 %t11 -endif595: +endif599: %t12 = load i8, ptr %a2 %t13 = icmp eq i8 %t12, 92 - br label %logic.from596 -logic.from596: - br i1 %t13, label %logic.end598, label %logic.rhs597 -logic.rhs597: - %t14 = load i8, ptr %a2 - %t15 = icmp eq i8 %t14, 34 - br label %logic.rend599 -logic.rend599: - br label %logic.end598 -logic.end598: - %t16 = phi i1 [ true, %logic.from596 ], [ %t15, %logic.rend599 ] br label %logic.from600 logic.from600: - br i1 %t16, label %logic.end602, label %logic.rhs601 + br i1 %t13, label %logic.end602, label %logic.rhs601 logic.rhs601: - %t17 = load i8, ptr %a2 - %t18 = icmp eq i8 %t17, 39 + %t14 = load i8, ptr %a2 + %t15 = icmp eq i8 %t14, 34 br label %logic.rend603 logic.rend603: br label %logic.end602 logic.end602: - %t19 = phi i1 [ true, %logic.from600 ], [ %t18, %logic.rend603 ] - br i1 %t19, label %then604, label %endif606 -then604: + %t16 = phi i1 [ true, %logic.from600 ], [ %t15, %logic.rend603 ] + br label %logic.from604 +logic.from604: + br i1 %t16, label %logic.end606, label %logic.rhs605 +logic.rhs605: + %t17 = load i8, ptr %a2 + %t18 = icmp eq i8 %t17, 39 + br label %logic.rend607 +logic.rend607: + br label %logic.end606 +logic.end606: + %t19 = phi i1 [ true, %logic.from604 ], [ %t18, %logic.rend607 ] + br i1 %t19, label %then608, label %endif610 +then608: %t20 = load i8, ptr %a2 ret i8 %t20 -endif606: +endif610: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic607, label %ok608 -panic607: + br i1 %t23, label %panic611, label %ok612 +panic611: call void @finch_panic(ptr @.str.352, i64 97, ptr @.str.353) unreachable -ok608: +ok612: %t24 = getelementptr inbounds %S.lexer.Lexer, ptr %t22, i32 0, i32 3 %t25 = load i64, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic609, label %ok610 -panic609: + br i1 %t27, label %panic613, label %ok614 +panic613: call void @finch_panic(ptr @.str.354, i64 97, ptr @.str.355) unreachable -ok610: +ok614: %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 4 %t29 = load i64, ptr %t28 %t30 = sub i64 %t29, 1 @@ -13178,217 +13204,217 @@ entry: store %S.lexer.Lexer %t16, ptr %a17 store ptr %a17, ptr %a18 store { ptr, i64, i64 } zeroinitializer, ptr %a19 - br label %while.cond611 -while.cond611: + br label %while.cond615 +while.cond615: %t20 = load ptr, ptr %a18 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic614, label %ok615 -panic614: + br i1 %t21, label %panic618, label %ok619 +panic618: call void @finch_panic(ptr @.str.357, i64 105, ptr @.str.358) unreachable -ok615: +ok619: %t22 = getelementptr inbounds %S.lexer.Lexer, ptr %t20, i32 0, i32 2 %t23 = load i64, ptr %t22 %t24 = load ptr, ptr %a18 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic616, label %ok617 -panic616: + br i1 %t25, label %panic620, label %ok621 +panic620: call void @finch_panic(ptr @.str.359, i64 105, ptr @.str.360) unreachable -ok617: +ok621: %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = icmp slt i64 %t23, %t28 - br i1 %t29, label %while.body612, label %while.end613 -while.body612: + br i1 %t29, label %while.body616, label %while.end617 +while.body616: %t30 = load ptr, ptr %a18 %t31 = icmp eq ptr %t30, null - br i1 %t31, label %panic618, label %ok619 -panic618: + br i1 %t31, label %panic622, label %ok623 +panic622: call void @finch_panic(ptr @.str.361, i64 106, ptr @.str.362) unreachable -ok619: +ok623: %t32 = getelementptr inbounds %S.lexer.Lexer, ptr %t30, i32 0, i32 0 %t33 = load ptr, ptr %a18 %t34 = icmp eq ptr %t33, null - br i1 %t34, label %panic620, label %ok621 -panic620: + br i1 %t34, label %panic624, label %ok625 +panic624: call void @finch_panic(ptr @.str.363, i64 106, ptr @.str.364) unreachable -ok621: +ok625: %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 2 %t36 = load i64, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %t32 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range622, label %inrange623 -range622: + br i1 %t39, label %range626, label %inrange627 +range626: call void @finch_panic_index(ptr @.str.365, i64 106, i64 %t36, i64 %t38) unreachable -inrange623: +inrange627: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds i8, ptr %t40, i64 %t36 %t42 = load i8, ptr %t41 store i8 %t42, ptr %a43 %t44 = load i8, ptr %a43 %t45 = icmp eq i8 %t44, 32 - br label %logic.from624 -logic.from624: - br i1 %t45, label %logic.end626, label %logic.rhs625 -logic.rhs625: - %t46 = load i8, ptr %a43 - %t47 = icmp eq i8 %t46, 9 - br label %logic.rend627 -logic.rend627: - br label %logic.end626 -logic.end626: - %t48 = phi i1 [ true, %logic.from624 ], [ %t47, %logic.rend627 ] br label %logic.from628 logic.from628: - br i1 %t48, label %logic.end630, label %logic.rhs629 + br i1 %t45, label %logic.end630, label %logic.rhs629 logic.rhs629: - %t49 = load i8, ptr %a43 - %t50 = icmp eq i8 %t49, 10 + %t46 = load i8, ptr %a43 + %t47 = icmp eq i8 %t46, 9 br label %logic.rend631 logic.rend631: br label %logic.end630 logic.end630: - %t51 = phi i1 [ true, %logic.from628 ], [ %t50, %logic.rend631 ] + %t48 = phi i1 [ true, %logic.from628 ], [ %t47, %logic.rend631 ] br label %logic.from632 logic.from632: - br i1 %t51, label %logic.end634, label %logic.rhs633 + br i1 %t48, label %logic.end634, label %logic.rhs633 logic.rhs633: - %t52 = load i8, ptr %a43 - %t53 = icmp eq i8 %t52, 13 + %t49 = load i8, ptr %a43 + %t50 = icmp eq i8 %t49, 10 br label %logic.rend635 logic.rend635: br label %logic.end634 logic.end634: - %t54 = phi i1 [ true, %logic.from632 ], [ %t53, %logic.rend635 ] - br i1 %t54, label %then636, label %endif638 -then636: + %t51 = phi i1 [ true, %logic.from632 ], [ %t50, %logic.rend635 ] + br label %logic.from636 +logic.from636: + br i1 %t51, label %logic.end638, label %logic.rhs637 +logic.rhs637: + %t52 = load i8, ptr %a43 + %t53 = icmp eq i8 %t52, 13 + br label %logic.rend639 +logic.rend639: + br label %logic.end638 +logic.end638: + %t54 = phi i1 [ true, %logic.from636 ], [ %t53, %logic.rend639 ] + br i1 %t54, label %then640, label %endif642 +then640: %t55 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t55) - br label %while.cond611 -endif638: + br label %while.cond615 +endif642: %t56 = load i8, ptr %a43 %t57 = icmp eq i8 %t56, 47 - br label %logic.from639 -logic.from639: - br i1 %t57, label %logic.rhs640, label %logic.end641 -logic.rhs640: + br label %logic.from643 +logic.from643: + br i1 %t57, label %logic.rhs644, label %logic.end645 +logic.rhs644: %t58 = load ptr, ptr %a18 %t59 = call i8 @finch.lexer.peek(ptr %t58, i64 1) %t60 = icmp eq i8 %t59, 47 - br label %logic.rend642 -logic.rend642: - br label %logic.end641 -logic.end641: - %t61 = phi i1 [ false, %logic.from639 ], [ %t60, %logic.rend642 ] - br i1 %t61, label %then643, label %endif645 -then643: - br label %while.cond646 -while.cond646: + br label %logic.rend646 +logic.rend646: + br label %logic.end645 +logic.end645: + %t61 = phi i1 [ false, %logic.from643 ], [ %t60, %logic.rend646 ] + br i1 %t61, label %then647, label %endif649 +then647: + br label %while.cond650 +while.cond650: %t62 = load ptr, ptr %a18 %t63 = icmp eq ptr %t62, null - br i1 %t63, label %panic649, label %ok650 -panic649: + br i1 %t63, label %panic653, label %ok654 +panic653: call void @finch_panic(ptr @.str.366, i64 112, ptr @.str.367) unreachable -ok650: +ok654: %t64 = getelementptr inbounds %S.lexer.Lexer, ptr %t62, i32 0, i32 2 %t65 = load i64, ptr %t64 %t66 = load ptr, ptr %a18 %t67 = icmp eq ptr %t66, null - br i1 %t67, label %panic651, label %ok652 -panic651: + br i1 %t67, label %panic655, label %ok656 +panic655: call void @finch_panic(ptr @.str.368, i64 112, ptr @.str.369) unreachable -ok652: +ok656: %t68 = getelementptr inbounds %S.lexer.Lexer, ptr %t66, i32 0, i32 0 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = icmp slt i64 %t65, %t70 - br label %logic.from653 -logic.from653: - br i1 %t71, label %logic.rhs654, label %logic.end655 -logic.rhs654: + br label %logic.from657 +logic.from657: + br i1 %t71, label %logic.rhs658, label %logic.end659 +logic.rhs658: %t72 = load ptr, ptr %a18 %t73 = icmp eq ptr %t72, null - br i1 %t73, label %panic656, label %ok657 -panic656: + br i1 %t73, label %panic660, label %ok661 +panic660: call void @finch_panic(ptr @.str.370, i64 112, ptr @.str.371) unreachable -ok657: +ok661: %t74 = getelementptr inbounds %S.lexer.Lexer, ptr %t72, i32 0, i32 0 %t75 = load ptr, ptr %a18 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic658, label %ok659 -panic658: + br i1 %t76, label %panic662, label %ok663 +panic662: call void @finch_panic(ptr @.str.372, i64 112, ptr @.str.373) unreachable -ok659: +ok663: %t77 = getelementptr inbounds %S.lexer.Lexer, ptr %t75, i32 0, i32 2 %t78 = load i64, ptr %t77 %t79 = load { ptr, i64, i64 }, ptr %t74 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 - br i1 %t81, label %range660, label %inrange661 -range660: + br i1 %t81, label %range664, label %inrange665 +range664: call void @finch_panic_index(ptr @.str.374, i64 112, i64 %t78, i64 %t80) unreachable -inrange661: +inrange665: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds i8, ptr %t82, i64 %t78 %t84 = load i8, ptr %t83 %t85 = icmp ne i8 %t84, 10 - br label %logic.rend662 -logic.rend662: - br label %logic.end655 -logic.end655: - %t86 = phi i1 [ false, %logic.from653 ], [ %t85, %logic.rend662 ] - br i1 %t86, label %while.body647, label %while.end648 -while.body647: + br label %logic.rend666 +logic.rend666: + br label %logic.end659 +logic.end659: + %t86 = phi i1 [ false, %logic.from657 ], [ %t85, %logic.rend666 ] + br i1 %t86, label %while.body651, label %while.end652 +while.body651: %t87 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t87) - br label %while.cond646 -while.end648: - br label %while.cond611 -endif645: + br label %while.cond650 +while.end652: + br label %while.cond615 +endif649: %t88 = load i8, ptr %a43 %t89 = icmp eq i8 %t88, 47 - br label %logic.from663 -logic.from663: - br i1 %t89, label %logic.rhs664, label %logic.end665 -logic.rhs664: + br label %logic.from667 +logic.from667: + br i1 %t89, label %logic.rhs668, label %logic.end669 +logic.rhs668: %t90 = load ptr, ptr %a18 %t91 = call i8 @finch.lexer.peek(ptr %t90, i64 1) %t92 = icmp eq i8 %t91, 42 - br label %logic.rend666 -logic.rend666: - br label %logic.end665 -logic.end665: - %t93 = phi i1 [ false, %logic.from663 ], [ %t92, %logic.rend666 ] - br i1 %t93, label %then667, label %endif669 -then667: + br label %logic.rend670 +logic.rend670: + br label %logic.end669 +logic.end669: + %t93 = phi i1 [ false, %logic.from667 ], [ %t92, %logic.rend670 ] + br i1 %t93, label %then671, label %endif673 +then671: %t94 = load ptr, ptr %a18 %t95 = icmp eq ptr %t94, null - br i1 %t95, label %panic670, label %ok671 -panic670: + br i1 %t95, label %panic674, label %ok675 +panic674: call void @finch_panic(ptr @.str.375, i64 118, ptr @.str.376) unreachable -ok671: +ok675: %t96 = getelementptr inbounds %S.lexer.Lexer, ptr %t94, i32 0, i32 3 %t97 = load i64, ptr %t96 store i64 %t97, ptr %a98 %t99 = load ptr, ptr %a18 %t100 = icmp eq ptr %t99, null - br i1 %t100, label %panic672, label %ok673 -panic672: + br i1 %t100, label %panic676, label %ok677 +panic676: call void @finch_panic(ptr @.str.377, i64 119, ptr @.str.378) unreachable -ok673: +ok677: %t101 = getelementptr inbounds %S.lexer.Lexer, ptr %t99, i32 0, i32 4 %t102 = load i64, ptr %t101 store i64 %t102, ptr %a103 @@ -13396,297 +13422,297 @@ ok673: call void @finch.lexer.advance(ptr %t104) %t105 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t105) - br label %while.cond674 -while.cond674: + br label %while.cond678 +while.cond678: %t106 = load ptr, ptr %a18 %t107 = icmp eq ptr %t106, null - br i1 %t107, label %panic677, label %ok678 -panic677: + br i1 %t107, label %panic681, label %ok682 +panic681: call void @finch_panic(ptr @.str.379, i64 122, ptr @.str.380) unreachable -ok678: +ok682: %t108 = getelementptr inbounds %S.lexer.Lexer, ptr %t106, i32 0, i32 2 %t109 = load i64, ptr %t108 %t110 = load ptr, ptr %a18 %t111 = icmp eq ptr %t110, null - br i1 %t111, label %panic679, label %ok680 -panic679: + br i1 %t111, label %panic683, label %ok684 +panic683: call void @finch_panic(ptr @.str.381, i64 122, ptr @.str.382) unreachable -ok680: +ok684: %t112 = getelementptr inbounds %S.lexer.Lexer, ptr %t110, i32 0, i32 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = icmp slt i64 %t109, %t114 - br label %logic.from681 -logic.from681: - br i1 %t115, label %logic.rhs682, label %logic.end683 -logic.rhs682: + br label %logic.from685 +logic.from685: + br i1 %t115, label %logic.rhs686, label %logic.end687 +logic.rhs686: %t116 = load ptr, ptr %a18 %t117 = icmp eq ptr %t116, null - br i1 %t117, label %panic684, label %ok685 -panic684: + br i1 %t117, label %panic688, label %ok689 +panic688: call void @finch_panic(ptr @.str.383, i64 122, ptr @.str.384) unreachable -ok685: +ok689: %t118 = getelementptr inbounds %S.lexer.Lexer, ptr %t116, i32 0, i32 0 %t119 = load ptr, ptr %a18 %t120 = icmp eq ptr %t119, null - br i1 %t120, label %panic686, label %ok687 -panic686: + br i1 %t120, label %panic690, label %ok691 +panic690: call void @finch_panic(ptr @.str.385, i64 122, ptr @.str.386) unreachable -ok687: +ok691: %t121 = getelementptr inbounds %S.lexer.Lexer, ptr %t119, i32 0, i32 2 %t122 = load i64, ptr %t121 %t123 = load { ptr, i64, i64 }, ptr %t118 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 %t122, %t124 - br i1 %t125, label %range688, label %inrange689 -range688: + br i1 %t125, label %range692, label %inrange693 +range692: call void @finch_panic_index(ptr @.str.387, i64 122, i64 %t122, i64 %t124) unreachable -inrange689: +inrange693: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds i8, ptr %t126, i64 %t122 %t128 = load i8, ptr %t127 %t129 = icmp eq i8 %t128, 42 - br label %logic.from690 -logic.from690: - br i1 %t129, label %logic.rhs691, label %logic.end692 -logic.rhs691: + br label %logic.from694 +logic.from694: + br i1 %t129, label %logic.rhs695, label %logic.end696 +logic.rhs695: %t130 = load ptr, ptr %a18 %t131 = call i8 @finch.lexer.peek(ptr %t130, i64 1) %t132 = icmp eq i8 %t131, 47 - br label %logic.rend693 -logic.rend693: - br label %logic.end692 -logic.end692: - %t133 = phi i1 [ false, %logic.from690 ], [ %t132, %logic.rend693 ] + br label %logic.rend697 +logic.rend697: + br label %logic.end696 +logic.end696: + %t133 = phi i1 [ false, %logic.from694 ], [ %t132, %logic.rend697 ] %t134 = xor i1 %t133, true - br label %logic.rend694 -logic.rend694: - br label %logic.end683 -logic.end683: - %t135 = phi i1 [ false, %logic.from681 ], [ %t134, %logic.rend694 ] - br i1 %t135, label %while.body675, label %while.end676 -while.body675: + br label %logic.rend698 +logic.rend698: + br label %logic.end687 +logic.end687: + %t135 = phi i1 [ false, %logic.from685 ], [ %t134, %logic.rend698 ] + br i1 %t135, label %while.body679, label %while.end680 +while.body679: %t136 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t136) - br label %while.cond674 -while.end676: + br label %while.cond678 +while.end680: %t137 = load ptr, ptr %a18 %t138 = icmp eq ptr %t137, null - br i1 %t138, label %panic695, label %ok696 -panic695: + br i1 %t138, label %panic699, label %ok700 +panic699: call void @finch_panic(ptr @.str.388, i64 125, ptr @.str.389) unreachable -ok696: +ok700: %t139 = getelementptr inbounds %S.lexer.Lexer, ptr %t137, i32 0, i32 2 %t140 = load i64, ptr %t139 %t141 = load ptr, ptr %a18 %t142 = icmp eq ptr %t141, null - br i1 %t142, label %panic697, label %ok698 -panic697: + br i1 %t142, label %panic701, label %ok702 +panic701: call void @finch_panic(ptr @.str.390, i64 125, ptr @.str.391) unreachable -ok698: +ok702: %t143 = getelementptr inbounds %S.lexer.Lexer, ptr %t141, i32 0, i32 0 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 %t145 = load i64, ptr %t144 %t146 = icmp sge i64 %t140, %t145 - br i1 %t146, label %then699, label %endif701 -then699: + br i1 %t146, label %then703, label %endif705 +then703: %t147 = load ptr, ptr %a18 %t148 = load i64, ptr %a98 %t149 = load i64, ptr %a103 call void @finch.lexer.fail(ptr %t147, i64 %t148, i64 %t149, { ptr, i64, i64 } { ptr @.str.392, i64 36, i64 0 }) - br label %endif701 -endif701: + br label %endif705 +endif705: %t150 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t150) %t151 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t151) - br label %while.cond611 -endif669: + br label %while.cond615 +endif673: %t152 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.393, i64 0, i64 0 }, 0 %t153 = insertvalue %S.lexer.Token %t152, { ptr, i64, i64 } { ptr @.str.394, i64 0, i64 0 }, 1 %t154 = load ptr, ptr %a18 %t155 = icmp eq ptr %t154, null - br i1 %t155, label %panic702, label %ok703 -panic702: + br i1 %t155, label %panic706, label %ok707 +panic706: call void @finch_panic(ptr @.str.395, i64 133, ptr @.str.396) unreachable -ok703: +ok707: %t156 = getelementptr inbounds %S.lexer.Lexer, ptr %t154, i32 0, i32 3 %t157 = load i64, ptr %t156 %t158 = insertvalue %S.lexer.Token %t153, i64 %t157, 2 %t159 = load ptr, ptr %a18 %t160 = icmp eq ptr %t159, null - br i1 %t160, label %panic704, label %ok705 -panic704: + br i1 %t160, label %panic708, label %ok709 +panic708: call void @finch_panic(ptr @.str.397, i64 133, ptr @.str.398) unreachable -ok705: +ok709: %t161 = getelementptr inbounds %S.lexer.Lexer, ptr %t159, i32 0, i32 4 %t162 = load i64, ptr %t161 %t163 = insertvalue %S.lexer.Token %t158, i64 %t162, 3 %t164 = load ptr, ptr %a18 %t165 = icmp eq ptr %t164, null - br i1 %t165, label %panic706, label %ok707 -panic706: + br i1 %t165, label %panic710, label %ok711 +panic710: call void @finch_panic(ptr @.str.399, i64 133, ptr @.str.400) unreachable -ok707: +ok711: %t166 = getelementptr inbounds %S.lexer.Lexer, ptr %t164, i32 0, i32 5 %t167 = load i1, ptr %t166 %t168 = insertvalue %S.lexer.Token %t163, i1 %t167, 4 store %S.lexer.Token %t168, ptr %a169 %t170 = load ptr, ptr %a18 %t171 = icmp eq ptr %t170, null - br i1 %t171, label %panic708, label %ok709 -panic708: + br i1 %t171, label %panic712, label %ok713 +panic712: call void @finch_panic(ptr @.str.401, i64 134, ptr @.str.402) unreachable -ok709: +ok713: %t172 = getelementptr inbounds %S.lexer.Lexer, ptr %t170, i32 0, i32 5 store i1 false, ptr %t172 %t173 = load ptr, ptr %a18 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic710, label %ok711 -panic710: + br i1 %t174, label %panic714, label %ok715 +panic714: call void @finch_panic(ptr @.str.403, i64 135, ptr @.str.404) unreachable -ok711: +ok715: %t175 = getelementptr inbounds %S.lexer.Lexer, ptr %t173, i32 0, i32 2 %t176 = load i64, ptr %t175 store i64 %t176, ptr %a177 %t178 = load i8, ptr %a43 %t179 = call i1 @finch.lexer.isAlpha(i8 %t178) - br i1 %t179, label %then712, label %else713 -then712: - br label %while.cond715 -while.cond715: + br i1 %t179, label %then716, label %else717 +then716: + br label %while.cond719 +while.cond719: %t180 = load ptr, ptr %a18 %t181 = icmp eq ptr %t180, null - br i1 %t181, label %panic718, label %ok719 -panic718: + br i1 %t181, label %panic722, label %ok723 +panic722: call void @finch_panic(ptr @.str.405, i64 137, ptr @.str.406) unreachable -ok719: +ok723: %t182 = getelementptr inbounds %S.lexer.Lexer, ptr %t180, i32 0, i32 2 %t183 = load i64, ptr %t182 %t184 = load ptr, ptr %a18 %t185 = icmp eq ptr %t184, null - br i1 %t185, label %panic720, label %ok721 -panic720: + br i1 %t185, label %panic724, label %ok725 +panic724: call void @finch_panic(ptr @.str.407, i64 137, ptr @.str.408) unreachable -ok721: +ok725: %t186 = getelementptr inbounds %S.lexer.Lexer, ptr %t184, i32 0, i32 0 %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1 %t188 = load i64, ptr %t187 %t189 = icmp slt i64 %t183, %t188 - br label %logic.from722 -logic.from722: - br i1 %t189, label %logic.rhs723, label %logic.end724 -logic.rhs723: + br label %logic.from726 +logic.from726: + br i1 %t189, label %logic.rhs727, label %logic.end728 +logic.rhs727: %t190 = load ptr, ptr %a18 %t191 = icmp eq ptr %t190, null - br i1 %t191, label %panic725, label %ok726 -panic725: + br i1 %t191, label %panic729, label %ok730 +panic729: call void @finch_panic(ptr @.str.409, i64 137, ptr @.str.410) unreachable -ok726: +ok730: %t192 = getelementptr inbounds %S.lexer.Lexer, ptr %t190, i32 0, i32 0 %t193 = load ptr, ptr %a18 %t194 = icmp eq ptr %t193, null - br i1 %t194, label %panic727, label %ok728 -panic727: + br i1 %t194, label %panic731, label %ok732 +panic731: call void @finch_panic(ptr @.str.411, i64 137, ptr @.str.412) unreachable -ok728: +ok732: %t195 = getelementptr inbounds %S.lexer.Lexer, ptr %t193, i32 0, i32 2 %t196 = load i64, ptr %t195 %t197 = load { ptr, i64, i64 }, ptr %t192 %t198 = extractvalue { ptr, i64, i64 } %t197, 1 %t199 = icmp uge i64 %t196, %t198 - br i1 %t199, label %range729, label %inrange730 -range729: + br i1 %t199, label %range733, label %inrange734 +range733: call void @finch_panic_index(ptr @.str.413, i64 137, i64 %t196, i64 %t198) unreachable -inrange730: +inrange734: %t200 = extractvalue { ptr, i64, i64 } %t197, 0 %t201 = getelementptr inbounds i8, ptr %t200, i64 %t196 %t202 = load i8, ptr %t201 %t203 = call i1 @finch.lexer.isAlpha(i8 %t202) - br label %logic.from731 -logic.from731: - br i1 %t203, label %logic.end733, label %logic.rhs732 -logic.rhs732: + br label %logic.from735 +logic.from735: + br i1 %t203, label %logic.end737, label %logic.rhs736 +logic.rhs736: %t204 = load ptr, ptr %a18 %t205 = icmp eq ptr %t204, null - br i1 %t205, label %panic734, label %ok735 -panic734: + br i1 %t205, label %panic738, label %ok739 +panic738: call void @finch_panic(ptr @.str.414, i64 137, ptr @.str.415) unreachable -ok735: +ok739: %t206 = getelementptr inbounds %S.lexer.Lexer, ptr %t204, i32 0, i32 0 %t207 = load ptr, ptr %a18 %t208 = icmp eq ptr %t207, null - br i1 %t208, label %panic736, label %ok737 -panic736: + br i1 %t208, label %panic740, label %ok741 +panic740: call void @finch_panic(ptr @.str.416, i64 137, ptr @.str.417) unreachable -ok737: +ok741: %t209 = getelementptr inbounds %S.lexer.Lexer, ptr %t207, i32 0, i32 2 %t210 = load i64, ptr %t209 %t211 = load { ptr, i64, i64 }, ptr %t206 %t212 = extractvalue { ptr, i64, i64 } %t211, 1 %t213 = icmp uge i64 %t210, %t212 - br i1 %t213, label %range738, label %inrange739 -range738: + br i1 %t213, label %range742, label %inrange743 +range742: call void @finch_panic_index(ptr @.str.418, i64 137, i64 %t210, i64 %t212) unreachable -inrange739: +inrange743: %t214 = extractvalue { ptr, i64, i64 } %t211, 0 %t215 = getelementptr inbounds i8, ptr %t214, i64 %t210 %t216 = load i8, ptr %t215 %t217 = call i1 @finch.lexer.isDigit(i8 %t216) - br label %logic.rend740 -logic.rend740: - br label %logic.end733 -logic.end733: - %t218 = phi i1 [ true, %logic.from731 ], [ %t217, %logic.rend740 ] - br label %logic.rend741 -logic.rend741: - br label %logic.end724 -logic.end724: - %t219 = phi i1 [ false, %logic.from722 ], [ %t218, %logic.rend741 ] - br i1 %t219, label %while.body716, label %while.end717 -while.body716: + br label %logic.rend744 +logic.rend744: + br label %logic.end737 +logic.end737: + %t218 = phi i1 [ true, %logic.from735 ], [ %t217, %logic.rend744 ] + br label %logic.rend745 +logic.rend745: + br label %logic.end728 +logic.end728: + %t219 = phi i1 [ false, %logic.from726 ], [ %t218, %logic.rend745 ] + br i1 %t219, label %while.body720, label %while.end721 +while.body720: %t220 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t220) - br label %while.cond715 -while.end717: + br label %while.cond719 +while.end721: %t221 = load ptr, ptr %a18 %t222 = icmp eq ptr %t221, null - br i1 %t222, label %panic742, label %ok743 -panic742: + br i1 %t222, label %panic746, label %ok747 +panic746: call void @finch_panic(ptr @.str.419, i64 140, ptr @.str.420) unreachable -ok743: +ok747: %t223 = getelementptr inbounds %S.lexer.Lexer, ptr %t221, i32 0, i32 0 %t224 = load { ptr, i64, i64 }, ptr %t223 store { ptr, i64, i64 } %t224, ptr %a225 %t227 = load i64, ptr %a177 %t228 = load ptr, ptr %a18 %t229 = icmp eq ptr %t228, null - br i1 %t229, label %panic744, label %ok745 -panic744: + br i1 %t229, label %panic748, label %ok749 +panic748: call void @finch_panic(ptr @.str.422, i64 140, ptr @.str.423) unreachable -ok745: +ok749: %t230 = getelementptr inbounds %S.lexer.Lexer, ptr %t228, i32 0, i32 2 %t231 = load i64, ptr %t230 call void @finch_str_sub(ptr %a226, ptr %a225, i64 %t227, i64 %t231, ptr @.str.421, i64 140) @@ -13704,8 +13730,8 @@ ok745: %t239 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = call i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %t240) - br i1 %t241, label %then746, label %endif748 -then746: + br i1 %t241, label %then750, label %endif752 +then750: %t242 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t243 = load { ptr, i64, i64 }, ptr %t242 %t244 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 @@ -13716,14 +13742,14 @@ then746: store { ptr, i64, i64 } %t247, ptr %t244 store { ptr, i64, i64 } %t248, ptr %a249 call void @finch_str_drop(ptr %a249) - br label %endif748 -endif748: - br label %endif714 -else713: + br label %endif752 +endif752: + br label %endif718 +else717: %t250 = load i8, ptr %a43 %t251 = call i1 @finch.lexer.isDigit(i8 %t250) - br i1 %t251, label %then749, label %else750 -then749: + br i1 %t251, label %then753, label %else754 +then753: %t252 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t253 = load { ptr, i64, i64 }, ptr %t252 store { ptr, i64, i64 } { ptr @.str.425, i64 3, i64 0 }, ptr %t252 @@ -13731,263 +13757,263 @@ then749: call void @finch_str_drop(ptr %a254) %t255 = load i8, ptr %a43 %t256 = icmp eq i8 %t255, 48 - br label %logic.from752 -logic.from752: - br i1 %t256, label %logic.rhs753, label %logic.end754 -logic.rhs753: + br label %logic.from756 +logic.from756: + br i1 %t256, label %logic.rhs757, label %logic.end758 +logic.rhs757: %t257 = load ptr, ptr %a18 %t258 = call i8 @finch.lexer.peek(ptr %t257, i64 1) %t259 = icmp eq i8 %t258, 120 - br label %logic.from755 -logic.from755: - br i1 %t259, label %logic.end757, label %logic.rhs756 -logic.rhs756: + br label %logic.from759 +logic.from759: + br i1 %t259, label %logic.end761, label %logic.rhs760 +logic.rhs760: %t260 = load ptr, ptr %a18 %t261 = call i8 @finch.lexer.peek(ptr %t260, i64 1) %t262 = icmp eq i8 %t261, 88 - br label %logic.rend758 -logic.rend758: - br label %logic.end757 -logic.end757: - %t263 = phi i1 [ true, %logic.from755 ], [ %t262, %logic.rend758 ] - br label %logic.rend759 -logic.rend759: - br label %logic.end754 -logic.end754: - %t264 = phi i1 [ false, %logic.from752 ], [ %t263, %logic.rend759 ] - br i1 %t264, label %then760, label %else761 -then760: + br label %logic.rend762 +logic.rend762: + br label %logic.end761 +logic.end761: + %t263 = phi i1 [ true, %logic.from759 ], [ %t262, %logic.rend762 ] + br label %logic.rend763 +logic.rend763: + br label %logic.end758 +logic.end758: + %t264 = phi i1 [ false, %logic.from756 ], [ %t263, %logic.rend763 ] + br i1 %t264, label %then764, label %else765 +then764: %t265 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t265) %t266 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t266) - br label %while.cond763 -while.cond763: + br label %while.cond767 +while.cond767: %t267 = load ptr, ptr %a18 %t268 = icmp eq ptr %t267, null - br i1 %t268, label %panic766, label %ok767 -panic766: + br i1 %t268, label %panic770, label %ok771 +panic770: call void @finch_panic(ptr @.str.426, i64 150, ptr @.str.427) unreachable -ok767: +ok771: %t269 = getelementptr inbounds %S.lexer.Lexer, ptr %t267, i32 0, i32 2 %t270 = load i64, ptr %t269 %t271 = load ptr, ptr %a18 %t272 = icmp eq ptr %t271, null - br i1 %t272, label %panic768, label %ok769 -panic768: + br i1 %t272, label %panic772, label %ok773 +panic772: call void @finch_panic(ptr @.str.428, i64 150, ptr @.str.429) unreachable -ok769: +ok773: %t273 = getelementptr inbounds %S.lexer.Lexer, ptr %t271, i32 0, i32 0 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 %t275 = load i64, ptr %t274 %t276 = icmp slt i64 %t270, %t275 - br label %logic.from770 -logic.from770: - br i1 %t276, label %logic.rhs771, label %logic.end772 -logic.rhs771: + br label %logic.from774 +logic.from774: + br i1 %t276, label %logic.rhs775, label %logic.end776 +logic.rhs775: %t277 = load ptr, ptr %a18 %t278 = icmp eq ptr %t277, null - br i1 %t278, label %panic773, label %ok774 -panic773: + br i1 %t278, label %panic777, label %ok778 +panic777: call void @finch_panic(ptr @.str.430, i64 150, ptr @.str.431) unreachable -ok774: +ok778: %t279 = getelementptr inbounds %S.lexer.Lexer, ptr %t277, i32 0, i32 0 %t280 = load ptr, ptr %a18 %t281 = icmp eq ptr %t280, null - br i1 %t281, label %panic775, label %ok776 -panic775: + br i1 %t281, label %panic779, label %ok780 +panic779: call void @finch_panic(ptr @.str.432, i64 150, ptr @.str.433) unreachable -ok776: +ok780: %t282 = getelementptr inbounds %S.lexer.Lexer, ptr %t280, i32 0, i32 2 %t283 = load i64, ptr %t282 %t284 = load { ptr, i64, i64 }, ptr %t279 %t285 = extractvalue { ptr, i64, i64 } %t284, 1 %t286 = icmp uge i64 %t283, %t285 - br i1 %t286, label %range777, label %inrange778 -range777: + br i1 %t286, label %range781, label %inrange782 +range781: call void @finch_panic_index(ptr @.str.434, i64 150, i64 %t283, i64 %t285) unreachable -inrange778: +inrange782: %t287 = extractvalue { ptr, i64, i64 } %t284, 0 %t288 = getelementptr inbounds i8, ptr %t287, i64 %t283 %t289 = load i8, ptr %t288 %t290 = call i1 @finch.lexer.isHex(i8 %t289) - br label %logic.from779 -logic.from779: - br i1 %t290, label %logic.end781, label %logic.rhs780 -logic.rhs780: + br label %logic.from783 +logic.from783: + br i1 %t290, label %logic.end785, label %logic.rhs784 +logic.rhs784: %t291 = load ptr, ptr %a18 %t292 = icmp eq ptr %t291, null - br i1 %t292, label %panic782, label %ok783 -panic782: + br i1 %t292, label %panic786, label %ok787 +panic786: call void @finch_panic(ptr @.str.435, i64 150, ptr @.str.436) unreachable -ok783: +ok787: %t293 = getelementptr inbounds %S.lexer.Lexer, ptr %t291, i32 0, i32 0 %t294 = load ptr, ptr %a18 %t295 = icmp eq ptr %t294, null - br i1 %t295, label %panic784, label %ok785 -panic784: + br i1 %t295, label %panic788, label %ok789 +panic788: call void @finch_panic(ptr @.str.437, i64 150, ptr @.str.438) unreachable -ok785: +ok789: %t296 = getelementptr inbounds %S.lexer.Lexer, ptr %t294, i32 0, i32 2 %t297 = load i64, ptr %t296 %t298 = load { ptr, i64, i64 }, ptr %t293 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 %t297, %t299 - br i1 %t300, label %range786, label %inrange787 -range786: + br i1 %t300, label %range790, label %inrange791 +range790: call void @finch_panic_index(ptr @.str.439, i64 150, i64 %t297, i64 %t299) unreachable -inrange787: +inrange791: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds i8, ptr %t301, i64 %t297 %t303 = load i8, ptr %t302 %t304 = icmp eq i8 %t303, 95 - br label %logic.rend788 -logic.rend788: - br label %logic.end781 -logic.end781: - %t305 = phi i1 [ true, %logic.from779 ], [ %t304, %logic.rend788 ] - br label %logic.rend789 -logic.rend789: - br label %logic.end772 -logic.end772: - %t306 = phi i1 [ false, %logic.from770 ], [ %t305, %logic.rend789 ] - br i1 %t306, label %while.body764, label %while.end765 -while.body764: + br label %logic.rend792 +logic.rend792: + br label %logic.end785 +logic.end785: + %t305 = phi i1 [ true, %logic.from783 ], [ %t304, %logic.rend792 ] + br label %logic.rend793 +logic.rend793: + br label %logic.end776 +logic.end776: + %t306 = phi i1 [ false, %logic.from774 ], [ %t305, %logic.rend793 ] + br i1 %t306, label %while.body768, label %while.end769 +while.body768: %t307 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t307) - br label %while.cond763 -while.end765: - br label %endif762 -else761: - br label %while.cond790 -while.cond790: + br label %while.cond767 +while.end769: + br label %endif766 +else765: + br label %while.cond794 +while.cond794: %t308 = load ptr, ptr %a18 %t309 = icmp eq ptr %t308, null - br i1 %t309, label %panic793, label %ok794 -panic793: + br i1 %t309, label %panic797, label %ok798 +panic797: call void @finch_panic(ptr @.str.440, i64 154, ptr @.str.441) unreachable -ok794: +ok798: %t310 = getelementptr inbounds %S.lexer.Lexer, ptr %t308, i32 0, i32 2 %t311 = load i64, ptr %t310 %t312 = load ptr, ptr %a18 %t313 = icmp eq ptr %t312, null - br i1 %t313, label %panic795, label %ok796 -panic795: + br i1 %t313, label %panic799, label %ok800 +panic799: call void @finch_panic(ptr @.str.442, i64 154, ptr @.str.443) unreachable -ok796: +ok800: %t314 = getelementptr inbounds %S.lexer.Lexer, ptr %t312, i32 0, i32 0 %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 %t316 = load i64, ptr %t315 %t317 = icmp slt i64 %t311, %t316 - br label %logic.from797 -logic.from797: - br i1 %t317, label %logic.rhs798, label %logic.end799 -logic.rhs798: + br label %logic.from801 +logic.from801: + br i1 %t317, label %logic.rhs802, label %logic.end803 +logic.rhs802: %t318 = load ptr, ptr %a18 %t319 = icmp eq ptr %t318, null - br i1 %t319, label %panic800, label %ok801 -panic800: + br i1 %t319, label %panic804, label %ok805 +panic804: call void @finch_panic(ptr @.str.444, i64 154, ptr @.str.445) unreachable -ok801: +ok805: %t320 = getelementptr inbounds %S.lexer.Lexer, ptr %t318, i32 0, i32 0 %t321 = load ptr, ptr %a18 %t322 = icmp eq ptr %t321, null - br i1 %t322, label %panic802, label %ok803 -panic802: + br i1 %t322, label %panic806, label %ok807 +panic806: call void @finch_panic(ptr @.str.446, i64 154, ptr @.str.447) unreachable -ok803: +ok807: %t323 = getelementptr inbounds %S.lexer.Lexer, ptr %t321, i32 0, i32 2 %t324 = load i64, ptr %t323 %t325 = load { ptr, i64, i64 }, ptr %t320 %t326 = extractvalue { ptr, i64, i64 } %t325, 1 %t327 = icmp uge i64 %t324, %t326 - br i1 %t327, label %range804, label %inrange805 -range804: + br i1 %t327, label %range808, label %inrange809 +range808: call void @finch_panic_index(ptr @.str.448, i64 154, i64 %t324, i64 %t326) unreachable -inrange805: +inrange809: %t328 = extractvalue { ptr, i64, i64 } %t325, 0 %t329 = getelementptr inbounds i8, ptr %t328, i64 %t324 %t330 = load i8, ptr %t329 %t331 = call i1 @finch.lexer.isDigit(i8 %t330) - br label %logic.from806 -logic.from806: - br i1 %t331, label %logic.end808, label %logic.rhs807 -logic.rhs807: + br label %logic.from810 +logic.from810: + br i1 %t331, label %logic.end812, label %logic.rhs811 +logic.rhs811: %t332 = load ptr, ptr %a18 %t333 = icmp eq ptr %t332, null - br i1 %t333, label %panic809, label %ok810 -panic809: + br i1 %t333, label %panic813, label %ok814 +panic813: call void @finch_panic(ptr @.str.449, i64 154, ptr @.str.450) unreachable -ok810: +ok814: %t334 = getelementptr inbounds %S.lexer.Lexer, ptr %t332, i32 0, i32 0 %t335 = load ptr, ptr %a18 %t336 = icmp eq ptr %t335, null - br i1 %t336, label %panic811, label %ok812 -panic811: + br i1 %t336, label %panic815, label %ok816 +panic815: call void @finch_panic(ptr @.str.451, i64 154, ptr @.str.452) unreachable -ok812: +ok816: %t337 = getelementptr inbounds %S.lexer.Lexer, ptr %t335, i32 0, i32 2 %t338 = load i64, ptr %t337 %t339 = load { ptr, i64, i64 }, ptr %t334 %t340 = extractvalue { ptr, i64, i64 } %t339, 1 %t341 = icmp uge i64 %t338, %t340 - br i1 %t341, label %range813, label %inrange814 -range813: + br i1 %t341, label %range817, label %inrange818 +range817: call void @finch_panic_index(ptr @.str.453, i64 154, i64 %t338, i64 %t340) unreachable -inrange814: +inrange818: %t342 = extractvalue { ptr, i64, i64 } %t339, 0 %t343 = getelementptr inbounds i8, ptr %t342, i64 %t338 %t344 = load i8, ptr %t343 %t345 = icmp eq i8 %t344, 95 - br label %logic.rend815 -logic.rend815: - br label %logic.end808 -logic.end808: - %t346 = phi i1 [ true, %logic.from806 ], [ %t345, %logic.rend815 ] - br label %logic.rend816 -logic.rend816: - br label %logic.end799 -logic.end799: - %t347 = phi i1 [ false, %logic.from797 ], [ %t346, %logic.rend816 ] - br i1 %t347, label %while.body791, label %while.end792 -while.body791: + br label %logic.rend819 +logic.rend819: + br label %logic.end812 +logic.end812: + %t346 = phi i1 [ true, %logic.from810 ], [ %t345, %logic.rend819 ] + br label %logic.rend820 +logic.rend820: + br label %logic.end803 +logic.end803: + %t347 = phi i1 [ false, %logic.from801 ], [ %t346, %logic.rend820 ] + br i1 %t347, label %while.body795, label %while.end796 +while.body795: %t348 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t348) - br label %while.cond790 -while.end792: + br label %while.cond794 +while.end796: %t349 = load ptr, ptr %a18 %t350 = call i8 @finch.lexer.peek(ptr %t349, i64 0) %t351 = icmp eq i8 %t350, 46 - br label %logic.from817 -logic.from817: - br i1 %t351, label %logic.rhs818, label %logic.end819 -logic.rhs818: + br label %logic.from821 +logic.from821: + br i1 %t351, label %logic.rhs822, label %logic.end823 +logic.rhs822: %t352 = load ptr, ptr %a18 %t353 = call i8 @finch.lexer.peek(ptr %t352, i64 1) %t354 = call i1 @finch.lexer.isDigit(i8 %t353) - br label %logic.rend820 -logic.rend820: - br label %logic.end819 -logic.end819: - %t355 = phi i1 [ false, %logic.from817 ], [ %t354, %logic.rend820 ] - br i1 %t355, label %then821, label %endif823 -then821: + br label %logic.rend824 +logic.rend824: + br label %logic.end823 +logic.end823: + %t355 = phi i1 [ false, %logic.from821 ], [ %t354, %logic.rend824 ] + br i1 %t355, label %then825, label %endif827 +then825: %t356 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t357 = load { ptr, i64, i64 }, ptr %t356 store { ptr, i64, i64 } { ptr @.str.454, i64 5, i64 0 }, ptr %t356 @@ -13995,132 +14021,132 @@ then821: call void @finch_str_drop(ptr %a358) %t359 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t359) - br label %while.cond824 -while.cond824: + br label %while.cond828 +while.cond828: %t360 = load ptr, ptr %a18 %t361 = icmp eq ptr %t360, null - br i1 %t361, label %panic827, label %ok828 -panic827: + br i1 %t361, label %panic831, label %ok832 +panic831: call void @finch_panic(ptr @.str.455, i64 160, ptr @.str.456) unreachable -ok828: +ok832: %t362 = getelementptr inbounds %S.lexer.Lexer, ptr %t360, i32 0, i32 2 %t363 = load i64, ptr %t362 %t364 = load ptr, ptr %a18 %t365 = icmp eq ptr %t364, null - br i1 %t365, label %panic829, label %ok830 -panic829: + br i1 %t365, label %panic833, label %ok834 +panic833: call void @finch_panic(ptr @.str.457, i64 160, ptr @.str.458) unreachable -ok830: +ok834: %t366 = getelementptr inbounds %S.lexer.Lexer, ptr %t364, i32 0, i32 0 %t367 = getelementptr inbounds { ptr, i64, i64 }, ptr %t366, i32 0, i32 1 %t368 = load i64, ptr %t367 %t369 = icmp slt i64 %t363, %t368 - br label %logic.from831 -logic.from831: - br i1 %t369, label %logic.rhs832, label %logic.end833 -logic.rhs832: + br label %logic.from835 +logic.from835: + br i1 %t369, label %logic.rhs836, label %logic.end837 +logic.rhs836: %t370 = load ptr, ptr %a18 %t371 = icmp eq ptr %t370, null - br i1 %t371, label %panic834, label %ok835 -panic834: + br i1 %t371, label %panic838, label %ok839 +panic838: call void @finch_panic(ptr @.str.459, i64 160, ptr @.str.460) unreachable -ok835: +ok839: %t372 = getelementptr inbounds %S.lexer.Lexer, ptr %t370, i32 0, i32 0 %t373 = load ptr, ptr %a18 %t374 = icmp eq ptr %t373, null - br i1 %t374, label %panic836, label %ok837 -panic836: + br i1 %t374, label %panic840, label %ok841 +panic840: call void @finch_panic(ptr @.str.461, i64 160, ptr @.str.462) unreachable -ok837: +ok841: %t375 = getelementptr inbounds %S.lexer.Lexer, ptr %t373, i32 0, i32 2 %t376 = load i64, ptr %t375 %t377 = load { ptr, i64, i64 }, ptr %t372 %t378 = extractvalue { ptr, i64, i64 } %t377, 1 %t379 = icmp uge i64 %t376, %t378 - br i1 %t379, label %range838, label %inrange839 -range838: + br i1 %t379, label %range842, label %inrange843 +range842: call void @finch_panic_index(ptr @.str.463, i64 160, i64 %t376, i64 %t378) unreachable -inrange839: +inrange843: %t380 = extractvalue { ptr, i64, i64 } %t377, 0 %t381 = getelementptr inbounds i8, ptr %t380, i64 %t376 %t382 = load i8, ptr %t381 %t383 = call i1 @finch.lexer.isDigit(i8 %t382) - br label %logic.from840 -logic.from840: - br i1 %t383, label %logic.end842, label %logic.rhs841 -logic.rhs841: + br label %logic.from844 +logic.from844: + br i1 %t383, label %logic.end846, label %logic.rhs845 +logic.rhs845: %t384 = load ptr, ptr %a18 %t385 = icmp eq ptr %t384, null - br i1 %t385, label %panic843, label %ok844 -panic843: + br i1 %t385, label %panic847, label %ok848 +panic847: call void @finch_panic(ptr @.str.464, i64 160, ptr @.str.465) unreachable -ok844: +ok848: %t386 = getelementptr inbounds %S.lexer.Lexer, ptr %t384, i32 0, i32 0 %t387 = load ptr, ptr %a18 %t388 = icmp eq ptr %t387, null - br i1 %t388, label %panic845, label %ok846 -panic845: + br i1 %t388, label %panic849, label %ok850 +panic849: call void @finch_panic(ptr @.str.466, i64 160, ptr @.str.467) unreachable -ok846: +ok850: %t389 = getelementptr inbounds %S.lexer.Lexer, ptr %t387, i32 0, i32 2 %t390 = load i64, ptr %t389 %t391 = load { ptr, i64, i64 }, ptr %t386 %t392 = extractvalue { ptr, i64, i64 } %t391, 1 %t393 = icmp uge i64 %t390, %t392 - br i1 %t393, label %range847, label %inrange848 -range847: + br i1 %t393, label %range851, label %inrange852 +range851: call void @finch_panic_index(ptr @.str.468, i64 160, i64 %t390, i64 %t392) unreachable -inrange848: +inrange852: %t394 = extractvalue { ptr, i64, i64 } %t391, 0 %t395 = getelementptr inbounds i8, ptr %t394, i64 %t390 %t396 = load i8, ptr %t395 %t397 = icmp eq i8 %t396, 95 - br label %logic.rend849 -logic.rend849: - br label %logic.end842 -logic.end842: - %t398 = phi i1 [ true, %logic.from840 ], [ %t397, %logic.rend849 ] - br label %logic.rend850 -logic.rend850: - br label %logic.end833 -logic.end833: - %t399 = phi i1 [ false, %logic.from831 ], [ %t398, %logic.rend850 ] - br i1 %t399, label %while.body825, label %while.end826 -while.body825: + br label %logic.rend853 +logic.rend853: + br label %logic.end846 +logic.end846: + %t398 = phi i1 [ true, %logic.from844 ], [ %t397, %logic.rend853 ] + br label %logic.rend854 +logic.rend854: + br label %logic.end837 +logic.end837: + %t399 = phi i1 [ false, %logic.from835 ], [ %t398, %logic.rend854 ] + br i1 %t399, label %while.body829, label %while.end830 +while.body829: %t400 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t400) - br label %while.cond824 -while.end826: - br label %endif823 -endif823: - br label %endif762 -endif762: + br label %while.cond828 +while.end830: + br label %endif827 +endif827: + br label %endif766 +endif766: %t401 = load ptr, ptr %a18 %t402 = icmp eq ptr %t401, null - br i1 %t402, label %panic851, label %ok852 -panic851: + br i1 %t402, label %panic855, label %ok856 +panic855: call void @finch_panic(ptr @.str.469, i64 165, ptr @.str.470) unreachable -ok852: +ok856: %t403 = getelementptr inbounds %S.lexer.Lexer, ptr %t401, i32 0, i32 0 %t404 = load { ptr, i64, i64 }, ptr %t403 store { ptr, i64, i64 } %t404, ptr %a405 %t407 = load i64, ptr %a177 %t408 = load ptr, ptr %a18 %t409 = icmp eq ptr %t408, null - br i1 %t409, label %panic853, label %ok854 -panic853: + br i1 %t409, label %panic857, label %ok858 +panic857: call void @finch_panic(ptr @.str.472, i64 165, ptr @.str.473) unreachable -ok854: +ok858: %t410 = getelementptr inbounds %S.lexer.Lexer, ptr %t408, i32 0, i32 2 %t411 = load i64, ptr %t410 call void @finch_str_sub(ptr %a406, ptr %a405, i64 %t407, i64 %t411, ptr @.str.471, i64 165) @@ -14137,23 +14163,23 @@ ok854: store { ptr, i64, i64 } %t417, ptr %t419 store { ptr, i64, i64 } %t420, ptr %a421 call void @finch_str_drop(ptr %a421) - br label %endif751 -else750: + br label %endif755 +else754: %t422 = load i8, ptr %a43 %t423 = icmp eq i8 %t422, 34 - br label %logic.from855 -logic.from855: - br i1 %t423, label %logic.end857, label %logic.rhs856 -logic.rhs856: + br label %logic.from859 +logic.from859: + br i1 %t423, label %logic.end861, label %logic.rhs860 +logic.rhs860: %t424 = load i8, ptr %a43 %t425 = icmp eq i8 %t424, 39 - br label %logic.rend858 -logic.rend858: - br label %logic.end857 -logic.end857: - %t426 = phi i1 [ true, %logic.from855 ], [ %t425, %logic.rend858 ] - br i1 %t426, label %then859, label %else860 -then859: + br label %logic.rend862 +logic.rend862: + br label %logic.end861 +logic.end861: + %t426 = phi i1 [ true, %logic.from859 ], [ %t425, %logic.rend862 ] + br i1 %t426, label %then863, label %else864 +then863: %t427 = load i8, ptr %a43 store i8 %t427, ptr %a428 %t429 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 @@ -14163,64 +14189,64 @@ then859: call void @finch_str_drop(ptr %a431) %t432 = load i8, ptr %a428 %t433 = icmp eq i8 %t432, 39 - br i1 %t433, label %then862, label %endif864 -then862: + br i1 %t433, label %then866, label %endif868 +then866: %t434 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t435 = load { ptr, i64, i64 }, ptr %t434 store { ptr, i64, i64 } { ptr @.str.478, i64 4, i64 0 }, ptr %t434 store { ptr, i64, i64 } %t435, ptr %a436 call void @finch_str_drop(ptr %a436) - br label %endif864 -endif864: + br label %endif868 +endif868: %t437 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t437) store { ptr, i64, i64 } zeroinitializer, ptr %a438 - br label %while.cond865 -while.cond865: + br label %while.cond869 +while.cond869: %t439 = load ptr, ptr %a18 %t440 = call i8 @finch.lexer.peek(ptr %t439, i64 0) %t441 = load i8, ptr %a428 %t442 = icmp ne i8 %t440, %t441 - br i1 %t442, label %while.body866, label %while.end867 -while.body866: + br i1 %t442, label %while.body870, label %while.end871 +while.body870: %t443 = load ptr, ptr %a18 %t444 = call i8 @finch.lexer.peek(ptr %t443, i64 0) %t445 = trunc i64 0 to i8 %t446 = icmp eq i8 %t444, %t445 - br label %logic.from868 -logic.from868: - br i1 %t446, label %logic.end870, label %logic.rhs869 -logic.rhs869: + br label %logic.from872 +logic.from872: + br i1 %t446, label %logic.end874, label %logic.rhs873 +logic.rhs873: %t447 = load ptr, ptr %a18 %t448 = call i8 @finch.lexer.peek(ptr %t447, i64 0) %t449 = icmp eq i8 %t448, 10 - br label %logic.rend871 -logic.rend871: - br label %logic.end870 -logic.end870: - %t450 = phi i1 [ true, %logic.from868 ], [ %t449, %logic.rend871 ] - br i1 %t450, label %then872, label %endif874 -then872: + br label %logic.rend875 +logic.rend875: + br label %logic.end874 +logic.end874: + %t450 = phi i1 [ true, %logic.from872 ], [ %t449, %logic.rend875 ] + br i1 %t450, label %then876, label %endif878 +then876: %t451 = load i8, ptr %a428 %t452 = icmp eq i8 %t451, 34 - br i1 %t452, label %then875, label %endif877 -then875: + br i1 %t452, label %then879, label %endif881 +then879: %t453 = load ptr, ptr %a18 %t454 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t455 = load i64, ptr %t454 %t456 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t457 = load i64, ptr %t456 call void @finch.lexer.fail(ptr %t453, i64 %t455, i64 %t457, { ptr, i64, i64 } { ptr @.str.479, i64 34, i64 0 }) - br label %endif877 -endif877: + br label %endif881 +endif881: %t458 = load ptr, ptr %a18 %t459 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t460 = load i64, ptr %t459 %t461 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t462 = load i64, ptr %t461 call void @finch.lexer.fail(ptr %t458, i64 %t460, i64 %t462, { ptr, i64, i64 } { ptr @.str.480, i64 32, i64 0 }) - br label %endif874 -endif874: + br label %endif878 +endif878: %t463 = load ptr, ptr %a18 %t464 = call i8 @finch.lexer.peek(ptr %t463, i64 0) store i8 %t464, ptr %a465 @@ -14228,8 +14254,8 @@ endif874: call void @finch.lexer.advance(ptr %t466) %t467 = load i8, ptr %a465 %t468 = icmp eq i8 %t467, 92 - br i1 %t468, label %then878, label %endif880 -then878: + br i1 %t468, label %then882, label %endif884 +then882: %t469 = load ptr, ptr %a18 %t470 = call i8 @finch.lexer.peek(ptr %t469, i64 0) store i8 %t470, ptr %a471 @@ -14239,8 +14265,8 @@ then878: %t474 = load i8, ptr %a471 %t475 = call i8 @finch.lexer.escape(ptr %t473, i8 %t474) store i8 %t475, ptr %a465 - br label %endif880 -endif880: + br label %endif884 +endif884: %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 %t477 = load i8, ptr %a465 call void @finch_str_from_char(ptr %a478, i8 signext %t477) @@ -14252,8 +14278,8 @@ endif880: %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i64 %t480 store { ptr, i64, i64 } %t479, ptr %t483 store i64 %t481, ptr %t476 - br label %while.cond865 -while.end867: + br label %while.cond869 +while.end871: %t484 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t484) %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 @@ -14267,84 +14293,84 @@ while.end867: call void @finch_str_drop(ptr %a491) %t492 = load i8, ptr %a428 %t493 = icmp eq i8 %t492, 39 - br label %logic.from881 -logic.from881: - br i1 %t493, label %logic.rhs882, label %logic.end883 -logic.rhs882: + br label %logic.from885 +logic.from885: + br i1 %t493, label %logic.rhs886, label %logic.end887 +logic.rhs886: %t494 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i32 0, i32 1 %t496 = load i64, ptr %t495 %t497 = icmp ne i64 %t496, 1 - br label %logic.rend884 -logic.rend884: - br label %logic.end883 -logic.end883: - %t498 = phi i1 [ false, %logic.from881 ], [ %t497, %logic.rend884 ] - br i1 %t498, label %then885, label %endif887 -then885: + br label %logic.rend888 +logic.rend888: + br label %logic.end887 +logic.end887: + %t498 = phi i1 [ false, %logic.from885 ], [ %t497, %logic.rend888 ] + br i1 %t498, label %then889, label %endif891 +then889: %t499 = load ptr, ptr %a18 %t500 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t501 = load i64, ptr %t500 %t502 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t503 = load i64, ptr %t502 call void @finch.lexer.fail(ptr %t499, i64 %t501, i64 %t503, { ptr, i64, i64 } { ptr @.str.482, i64 44, i64 0 }) - br label %endif887 -endif887: + br label %endif891 +endif891: call void @finch.drop.arr_str(ptr %a438) - br label %endif861 -else860: + br label %endif865 +else864: %t504 = load ptr, ptr %a18 %t505 = call { ptr, i64, i64 } @finch.lexer.operator(ptr %t504) store { ptr, i64, i64 } %t505, ptr %a506 %t507 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 %t508 = load i64, ptr %t507 %t509 = icmp eq i64 %t508, 0 - br i1 %t509, label %then888, label %endif890 -then888: + br i1 %t509, label %then892, label %endif894 +then892: store i64 1, ptr %a510 %t511 = load i8, ptr %a43 %t512 = zext i8 %t511 to i64 %t513 = and i64 %t512, 224 %t514 = icmp eq i64 %t513, 192 - br i1 %t514, label %then891, label %else892 -then891: + br i1 %t514, label %then895, label %else896 +then895: store i64 2, ptr %a510 - br label %endif893 -else892: + br label %endif897 +else896: %t515 = load i8, ptr %a43 %t516 = zext i8 %t515 to i64 %t517 = and i64 %t516, 240 %t518 = icmp eq i64 %t517, 224 - br i1 %t518, label %then894, label %else895 -then894: + br i1 %t518, label %then898, label %else899 +then898: store i64 3, ptr %a510 - br label %endif896 -else895: + br label %endif900 +else899: %t519 = load i8, ptr %a43 %t520 = zext i8 %t519 to i64 %t521 = and i64 %t520, 248 %t522 = icmp eq i64 %t521, 240 - br i1 %t522, label %then897, label %endif899 -then897: + br i1 %t522, label %then901, label %endif903 +then901: store i64 4, ptr %a510 - br label %endif899 -endif899: - br label %endif896 -endif896: - br label %endif893 -endif893: + br label %endif903 +endif903: + br label %endif900 +endif900: + br label %endif897 +endif897: store { ptr, i64, i64 } { ptr @.str.483, i64 0, i64 0 }, ptr %a523 %t524 = load i8, ptr %a43 %t525 = zext i8 %t524 to i64 %t526 = icmp sge i64 %t525, 128 - br i1 %t526, label %then900, label %endif902 -then900: + br i1 %t526, label %then904, label %endif906 +then904: %t527 = load { ptr, i64, i64 }, ptr %a523 store { ptr, i64, i64 } { ptr @.str.484, i64 74, i64 0 }, ptr %a523 store { ptr, i64, i64 } %t527, ptr %a528 call void @finch_str_drop(ptr %a528) - br label %endif902 -endif902: + br label %endif906 +endif906: %t529 = load ptr, ptr %a18 %t530 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t531 = load i64, ptr %t530 @@ -14352,30 +14378,30 @@ endif902: %t533 = load i64, ptr %t532 %t534 = load ptr, ptr %a18 %t535 = icmp eq ptr %t534, null - br i1 %t535, label %panic903, label %ok904 -panic903: + br i1 %t535, label %panic907, label %ok908 +panic907: call void @finch_panic(ptr @.str.486, i64 211, ptr @.str.487) unreachable -ok904: +ok908: %t536 = getelementptr inbounds %S.lexer.Lexer, ptr %t534, i32 0, i32 0 %t537 = load { ptr, i64, i64 }, ptr %t536 store { ptr, i64, i64 } %t537, ptr %a538 %t540 = load ptr, ptr %a18 %t541 = icmp eq ptr %t540, null - br i1 %t541, label %panic905, label %ok906 -panic905: + br i1 %t541, label %panic909, label %ok910 +panic909: call void @finch_panic(ptr @.str.489, i64 211, ptr @.str.490) unreachable -ok906: +ok910: %t542 = getelementptr inbounds %S.lexer.Lexer, ptr %t540, i32 0, i32 2 %t543 = load i64, ptr %t542 %t544 = load ptr, ptr %a18 %t545 = icmp eq ptr %t544, null - br i1 %t545, label %panic907, label %ok908 -panic907: + br i1 %t545, label %panic911, label %ok912 +panic911: call void @finch_panic(ptr @.str.491, i64 211, ptr @.str.492) unreachable -ok908: +ok912: %t546 = getelementptr inbounds %S.lexer.Lexer, ptr %t544, i32 0, i32 2 %t547 = load i64, ptr %t546 %t548 = load i64, ptr %a510 @@ -14405,26 +14431,26 @@ ok908: store { ptr, i64, i64 } %t566, ptr %a567 call void @finch_str_drop(ptr %a567) call void @finch_str_drop(ptr %a523) - br label %endif890 -endif890: + br label %endif894 +endif894: %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 %t569 = load i64, ptr %t568 store i64 0, ptr %a570 - br label %for.cond909 -for.cond909: + br label %for.cond913 +for.cond913: %t571 = load i64, ptr %a570 %t572 = icmp slt i64 %t571, %t569 - br i1 %t572, label %for.body910, label %for.end912 -for.body910: + br i1 %t572, label %for.body914, label %for.end916 +for.body914: %t573 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t573) - br label %for.step911 -for.step911: + br label %for.step915 +for.step915: %t574 = load i64, ptr %a570 %t575 = add i64 %t574, 1 store i64 %t575, ptr %a570 - br label %for.cond909 -for.end912: + br label %for.cond913 +for.end916: %t576 = load { ptr, i64, i64 }, ptr %a506 %t577 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } %t576, ptr %a578 @@ -14444,12 +14470,12 @@ for.end912: store { ptr, i64, i64 } %t588, ptr %a589 call void @finch_str_drop(ptr %a589) call void @finch_str_drop(ptr %a506) - br label %endif861 -endif861: - br label %endif751 -endif751: - br label %endif714 -endif714: + br label %endif865 +endif865: + br label %endif755 +endif755: + br label %endif718 +endif718: %t590 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t591 = load %S.lexer.Token, ptr %a169 store %S.lexer.Token %t591, ptr %a592 @@ -14463,28 +14489,28 @@ endif714: store %S.lexer.Token %t594, ptr %t598 store i64 %t596, ptr %t590 call void @finch.drop.S_lexer_Token(ptr %a169) - br label %while.cond611 -while.end613: + br label %while.cond615 +while.end617: %t599 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t600 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.494, i64 3, i64 0 }, 0 %t601 = insertvalue %S.lexer.Token %t600, { ptr, i64, i64 } { ptr @.str.495, i64 0, i64 0 }, 1 %t602 = load ptr, ptr %a18 %t603 = icmp eq ptr %t602, null - br i1 %t603, label %panic913, label %ok914 -panic913: + br i1 %t603, label %panic917, label %ok918 +panic917: call void @finch_panic(ptr @.str.496, i64 221, ptr @.str.497) unreachable -ok914: +ok918: %t604 = getelementptr inbounds %S.lexer.Lexer, ptr %t602, i32 0, i32 3 %t605 = load i64, ptr %t604 %t606 = insertvalue %S.lexer.Token %t601, i64 %t605, 2 %t607 = load ptr, ptr %a18 %t608 = icmp eq ptr %t607, null - br i1 %t608, label %panic915, label %ok916 -panic915: + br i1 %t608, label %panic919, label %ok920 +panic919: call void @finch_panic(ptr @.str.498, i64 221, ptr @.str.499) unreachable -ok916: +ok920: %t609 = getelementptr inbounds %S.lexer.Lexer, ptr %t607, i32 0, i32 4 %t610 = load i64, ptr %t609 %t611 = insertvalue %S.lexer.Token %t606, i64 %t610, 3 @@ -14647,48 +14673,48 @@ entry: store { ptr, i64, i64 } %t6, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 - br i1 %t10, label %then917, label %endif919 -then917: + br i1 %t10, label %then921, label %endif923 +then921: ret i1 false -endif919: +endif923: %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.503, i64 6, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.from920 -logic.from920: - br i1 %t16, label %logic.end922, label %logic.rhs921 -logic.rhs921: + br label %logic.from924 +logic.from924: + br i1 %t16, label %logic.end926, label %logic.rhs925 +logic.rhs925: %t17 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.504, i64 5, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br label %logic.rend923 -logic.rend923: - br label %logic.end922 -logic.end922: - %t23 = phi i1 [ true, %logic.from920 ], [ %t22, %logic.rend923 ] - br label %logic.from924 -logic.from924: - br i1 %t23, label %logic.end926, label %logic.rhs925 -logic.rhs925: + br label %logic.rend927 +logic.rend927: + br label %logic.end926 +logic.end926: + %t23 = phi i1 [ true, %logic.from924 ], [ %t22, %logic.rend927 ] + br label %logic.from928 +logic.from928: + br i1 %t23, label %logic.end930, label %logic.rhs929 +logic.rhs929: %t24 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t25 = load { ptr, i64, i64 }, ptr %t24 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.505, i64 4, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br label %logic.rend927 -logic.rend927: - br label %logic.end926 -logic.end926: - %t30 = phi i1 [ true, %logic.from924 ], [ %t29, %logic.rend927 ] - br i1 %t30, label %then928, label %endif930 -then928: + br label %logic.rend931 +logic.rend931: + br label %logic.end930 +logic.end930: + %t30 = phi i1 [ true, %logic.from928 ], [ %t29, %logic.rend931 ] + br i1 %t30, label %then932, label %endif934 +then932: %t31 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t32 = load { ptr, i64, i64 }, ptr %t31 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -14697,10 +14723,10 @@ then928: store { ptr, i64, i64 } %t34, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br label %logic.from931 -logic.from931: - br i1 %t38, label %logic.rhs932, label %logic.end933 -logic.rhs932: + br label %logic.from935 +logic.from935: + br i1 %t38, label %logic.rhs936, label %logic.end937 +logic.rhs936: %t39 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -14709,90 +14735,90 @@ logic.rhs932: store { ptr, i64, i64 } %t42, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 - br label %logic.rend934 -logic.rend934: - br label %logic.end933 -logic.end933: - %t47 = phi i1 [ false, %logic.from931 ], [ %t46, %logic.rend934 ] + br label %logic.rend938 +logic.rend938: + br label %logic.end937 +logic.end937: + %t47 = phi i1 [ false, %logic.from935 ], [ %t46, %logic.rend938 ] ret i1 %t47 -endif930: +endif934: %t48 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.506, i64 5, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 - br label %logic.from935 -logic.from935: - br i1 %t53, label %logic.rhs936, label %logic.end937 -logic.rhs936: + br label %logic.from939 +logic.from939: + br i1 %t53, label %logic.rhs940, label %logic.end941 +logic.rhs940: %t54 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 %t55 = load i64, ptr %t54 %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t57 = load i64, ptr %t56 %t58 = icmp ne i64 %t55, %t57 - br label %logic.rend938 -logic.rend938: - br label %logic.end937 -logic.end937: - %t59 = phi i1 [ false, %logic.from935 ], [ %t58, %logic.rend938 ] - br i1 %t59, label %then939, label %endif941 -then939: + br label %logic.rend942 +logic.rend942: + br label %logic.end941 +logic.end941: + %t59 = phi i1 [ false, %logic.from939 ], [ %t58, %logic.rend942 ] + br i1 %t59, label %then943, label %endif945 +then943: ret i1 false -endif941: +endif945: %t60 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } { ptr @.str.507, i64 5, i64 0 }, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 - br label %logic.from942 -logic.from942: - br i1 %t65, label %logic.end944, label %logic.rhs943 -logic.rhs943: + br label %logic.from946 +logic.from946: + br i1 %t65, label %logic.end948, label %logic.rhs947 +logic.rhs947: %t66 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t67 = load { ptr, i64, i64 }, ptr %t66 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.508, i64 3, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 - br label %logic.rend945 -logic.rend945: - br label %logic.end944 -logic.end944: - %t72 = phi i1 [ true, %logic.from942 ], [ %t71, %logic.rend945 ] - br label %logic.from946 -logic.from946: - br i1 %t72, label %logic.end948, label %logic.rhs947 -logic.rhs947: + br label %logic.rend949 +logic.rend949: + br label %logic.end948 +logic.end948: + %t72 = phi i1 [ true, %logic.from946 ], [ %t71, %logic.rend949 ] + br label %logic.from950 +logic.from950: + br i1 %t72, label %logic.end952, label %logic.rhs951 +logic.rhs951: %t73 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t74 = load { ptr, i64, i64 }, ptr %t73 store { ptr, i64, i64 } %t74, ptr %a75 store { ptr, i64, i64 } { ptr @.str.509, i64 3, i64 0 }, ptr %a76 %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) %t78 = icmp ne i32 %t77, 0 - br label %logic.rend949 -logic.rend949: - br label %logic.end948 -logic.end948: - %t79 = phi i1 [ true, %logic.from946 ], [ %t78, %logic.rend949 ] - br label %logic.from950 -logic.from950: - br i1 %t79, label %logic.end952, label %logic.rhs951 -logic.rhs951: + br label %logic.rend953 +logic.rend953: + br label %logic.end952 +logic.end952: + %t79 = phi i1 [ true, %logic.from950 ], [ %t78, %logic.rend953 ] + br label %logic.from954 +logic.from954: + br i1 %t79, label %logic.end956, label %logic.rhs955 +logic.rhs955: %t80 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.510, i64 5, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br label %logic.rend953 -logic.rend953: - br label %logic.end952 -logic.end952: - %t86 = phi i1 [ true, %logic.from950 ], [ %t85, %logic.rend953 ] - br i1 %t86, label %then954, label %endif956 -then954: + br label %logic.rend957 +logic.rend957: + br label %logic.end956 +logic.end956: + %t86 = phi i1 [ true, %logic.from954 ], [ %t85, %logic.rend957 ] + br i1 %t86, label %then958, label %endif960 +then958: %t87 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 %t89 = load i64, ptr %t88 @@ -14800,30 +14826,30 @@ then954: %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = icmp ne i64 %t89, %t92 - br i1 %t93, label %then957, label %endif959 -then957: + br i1 %t93, label %then961, label %endif963 +then961: ret i1 false -endif959: +endif963: %t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load i64, ptr %t95 store i64 0, ptr %a97 - br label %for.cond960 -for.cond960: + br label %for.cond964 +for.cond964: %t98 = load i64, ptr %a97 %t99 = icmp slt i64 %t98, %t96 - br i1 %t99, label %for.body961, label %for.end963 -for.body961: + br i1 %t99, label %for.body965, label %for.end967 +for.body965: %t100 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t101 = load i64, ptr %a97 %t102 = load { ptr, i64, i64 }, ptr %t100 %t103 = extractvalue { ptr, i64, i64 } %t102, 1 %t104 = icmp uge i64 %t101, %t103 - br i1 %t104, label %range964, label %inrange965 -range964: + br i1 %t104, label %range968, label %inrange969 +range968: call void @finch_panic_index(ptr @.str.511, i64 54, i64 %t101, i64 %t103) unreachable -inrange965: +inrange969: %t105 = extractvalue { ptr, i64, i64 } %t102, 0 %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t101 %t107 = load %S.ast.Type, ptr %t106 @@ -14832,29 +14858,29 @@ inrange965: %t110 = load { ptr, i64, i64 }, ptr %t108 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 - br i1 %t112, label %range966, label %inrange967 -range966: + br i1 %t112, label %range970, label %inrange971 +range970: call void @finch_panic_index(ptr @.str.512, i64 54, i64 %t109, i64 %t111) unreachable -inrange967: +inrange971: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds %S.ast.Type, ptr %t113, i64 %t109 %t115 = load %S.ast.Type, ptr %t114 %t116 = call i1 @finch.ast.same(%S.ast.Type %t107, %S.ast.Type %t115) %t117 = xor i1 %t116, true - br i1 %t117, label %then968, label %endif970 -then968: + br i1 %t117, label %then972, label %endif974 +then972: ret i1 false -endif970: - br label %for.step962 -for.step962: +endif974: + br label %for.step966 +for.step966: %t118 = load i64, ptr %a97 %t119 = add i64 %t118, 1 store i64 %t119, ptr %a97 - br label %for.cond960 -for.end963: + br label %for.cond964 +for.end967: ret i1 true -endif956: +endif960: ret i1 true } @@ -14934,17 +14960,17 @@ entry: store { ptr, i64, i64 } { ptr @.str.513, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then971, label %endif973 -then971: + br i1 %t7, label %then975, label %endif977 +then975: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 0, %t10 - br i1 %t11, label %range974, label %inrange975 -range974: + br i1 %t11, label %range978, label %inrange979 +range978: call void @finch_panic_index(ptr @.str.515, i64 65, i64 0, i64 %t10) unreachable -inrange975: +inrange979: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 %t14 = load %S.ast.Type, ptr %t13 @@ -14956,15 +14982,15 @@ inrange975: call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t20 -endif973: +endif977: %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.516, i64 5, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %then976, label %endif978 -then976: + br i1 %t26, label %then980, label %endif982 +then980: %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 %t28 = load i64, ptr %t27 call void @finch_str_from_int(ptr %a29, i64 %t28) @@ -14985,11 +15011,11 @@ then976: %t42 = load { ptr, i64, i64 }, ptr %t41 %t43 = extractvalue { ptr, i64, i64 } %t42, 1 %t44 = icmp uge i64 0, %t43 - br i1 %t44, label %range979, label %inrange980 -range979: + br i1 %t44, label %range983, label %inrange984 +range983: call void @finch_panic_index(ptr @.str.519, i64 68, i64 0, i64 %t43) unreachable -inrange980: +inrange984: %t45 = extractvalue { ptr, i64, i64 } %t42, 0 %t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0 %t47 = load %S.ast.Type, ptr %t46 @@ -15003,24 +15029,24 @@ inrange980: call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a49 ret { ptr, i64, i64 } %t54 -endif978: +endif982: %t55 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t56 = load { ptr, i64, i64 }, ptr %t55 store { ptr, i64, i64 } %t56, ptr %a57 store { ptr, i64, i64 } { ptr @.str.520, i64 3, i64 0 }, ptr %a58 %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) %t60 = icmp ne i32 %t59, 0 - br i1 %t60, label %then981, label %endif983 -then981: + br i1 %t60, label %then985, label %endif987 +then985: %t61 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = extractvalue { ptr, i64, i64 } %t62, 1 %t64 = icmp uge i64 0, %t63 - br i1 %t64, label %range984, label %inrange985 -range984: + br i1 %t64, label %range988, label %inrange989 +range988: call void @finch_panic_index(ptr @.str.522, i64 71, i64 0, i64 %t63) unreachable -inrange985: +inrange989: %t65 = extractvalue { ptr, i64, i64 } %t62, 0 %t66 = getelementptr inbounds %S.ast.Type, ptr %t65, i64 0 %t67 = load %S.ast.Type, ptr %t66 @@ -15041,11 +15067,11 @@ inrange985: %t80 = load { ptr, i64, i64 }, ptr %t79 %t81 = extractvalue { ptr, i64, i64 } %t80, 1 %t82 = icmp uge i64 1, %t81 - br i1 %t82, label %range986, label %inrange987 -range986: + br i1 %t82, label %range990, label %inrange991 +range990: call void @finch_panic_index(ptr @.str.524, i64 71, i64 1, i64 %t81) unreachable -inrange987: +inrange991: %t83 = extractvalue { ptr, i64, i64 } %t80, 0 %t84 = getelementptr inbounds %S.ast.Type, ptr %t83, i64 1 %t85 = load %S.ast.Type, ptr %t84 @@ -15059,32 +15085,32 @@ inrange987: call void @finch_str_drop(ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a87 ret { ptr, i64, i64 } %t92 -endif983: +endif987: %t93 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t94 = load { ptr, i64, i64 }, ptr %t93 store { ptr, i64, i64 } %t94, ptr %a95 store { ptr, i64, i64 } { ptr @.str.525, i64 3, i64 0 }, ptr %a96 %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) %t98 = icmp ne i32 %t97, 0 - br i1 %t98, label %then988, label %endif990 -then988: + br i1 %t98, label %then992, label %endif994 +then992: %t99 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = icmp eq i64 %t101, 0 - br i1 %t102, label %then991, label %endif993 -then991: + br i1 %t102, label %then995, label %endif997 +then995: ret { ptr, i64, i64 } { ptr @.str.526, i64 3, i64 0 } -endif993: +endif997: %t103 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t104 = load { ptr, i64, i64 }, ptr %t103 %t105 = extractvalue { ptr, i64, i64 } %t104, 1 %t106 = icmp uge i64 0, %t105 - br i1 %t106, label %range994, label %inrange995 -range994: + br i1 %t106, label %range998, label %inrange999 +range998: call void @finch_panic_index(ptr @.str.528, i64 77, i64 0, i64 %t105) unreachable -inrange995: +inrange999: %t107 = extractvalue { ptr, i64, i64 } %t104, 0 %t108 = getelementptr inbounds %S.ast.Type, ptr %t107, i64 0 %t109 = load %S.ast.Type, ptr %t108 @@ -15102,51 +15128,51 @@ inrange995: call void @finch_str_drop(ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a116 ret { ptr, i64, i64 } %t120 -endif990: +endif994: %t121 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t122 = load { ptr, i64, i64 }, ptr %t121 store { ptr, i64, i64 } %t122, ptr %a123 store { ptr, i64, i64 } { ptr @.str.530, i64 6, i64 0 }, ptr %a124 %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) %t126 = icmp ne i32 %t125, 0 - br label %logic.from996 -logic.from996: - br i1 %t126, label %logic.end998, label %logic.rhs997 -logic.rhs997: + br label %logic.from1000 +logic.from1000: + br i1 %t126, label %logic.end1002, label %logic.rhs1001 +logic.rhs1001: %t127 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t128, ptr %a129 store { ptr, i64, i64 } { ptr @.str.531, i64 5, i64 0 }, ptr %a130 %t131 = call i32 @finch_str_eq(ptr %a129, ptr %a130) %t132 = icmp ne i32 %t131, 0 - br label %logic.rend999 -logic.rend999: - br label %logic.end998 -logic.end998: - %t133 = phi i1 [ true, %logic.from996 ], [ %t132, %logic.rend999 ] - br label %logic.from1000 -logic.from1000: - br i1 %t133, label %logic.end1002, label %logic.rhs1001 -logic.rhs1001: + br label %logic.rend1003 +logic.rend1003: + br label %logic.end1002 +logic.end1002: + %t133 = phi i1 [ true, %logic.from1000 ], [ %t132, %logic.rend1003 ] + br label %logic.from1004 +logic.from1004: + br i1 %t133, label %logic.end1006, label %logic.rhs1005 +logic.rhs1005: %t134 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t135 = load { ptr, i64, i64 }, ptr %t134 store { ptr, i64, i64 } %t135, ptr %a136 store { ptr, i64, i64 } { ptr @.str.532, i64 4, i64 0 }, ptr %a137 %t138 = call i32 @finch_str_eq(ptr %a136, ptr %a137) %t139 = icmp ne i32 %t138, 0 - br label %logic.rend1003 -logic.rend1003: - br label %logic.end1002 -logic.end1002: - %t140 = phi i1 [ true, %logic.from1000 ], [ %t139, %logic.rend1003 ] - br i1 %t140, label %then1004, label %endif1006 -then1004: + br label %logic.rend1007 +logic.rend1007: + br label %logic.end1006 +logic.end1006: + %t140 = phi i1 [ true, %logic.from1004 ], [ %t139, %logic.rend1007 ] + br i1 %t140, label %then1008, label %endif1010 +then1008: %t141 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 %t143 = load i64, ptr %t142 %t144 = icmp sgt i64 %t143, 0 - br i1 %t144, label %then1007, label %endif1009 -then1007: + br i1 %t144, label %then1011, label %endif1013 +then1011: %t145 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t146 = load { ptr, i64, i64 }, ptr %t145 store { ptr, i64, i64 } %t146, ptr %a148 @@ -15162,24 +15188,24 @@ then1007: call void @finch_str_drop(ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a153 ret { ptr, i64, i64 } %t157 -endif1009: +endif1013: %t158 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t159 = load { ptr, i64, i64 }, ptr %t158 store { ptr, i64, i64 } %t159, ptr %a160 call void @finch_str_copy(ptr %a161, ptr %a160) %t162 = load { ptr, i64, i64 }, ptr %a161 ret { ptr, i64, i64 } %t162 -endif1006: +endif1010: %t163 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t164 = load { ptr, i64, i64 }, ptr %t163 store { ptr, i64, i64 } %t164, ptr %a165 store { ptr, i64, i64 } { ptr @.str.534, i64 4, i64 0 }, ptr %a166 %t167 = call i32 @finch_str_eq(ptr %a165, ptr %a166) %t168 = icmp ne i32 %t167, 0 - br i1 %t168, label %then1010, label %endif1012 -then1010: + br i1 %t168, label %then1014, label %endif1016 +then1014: ret { ptr, i64, i64 } { ptr @.str.535, i64 7, i64 0 } -endif1012: +endif1016: %t169 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t170 = load { ptr, i64, i64 }, ptr %t169 store { ptr, i64, i64 } %t170, ptr %a171 @@ -15226,11 +15252,11 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic1013, label %ok1014 -panic1013: + br i1 %t5, label %panic1017, label %ok1018 +panic1017: call void @finch_panic(ptr @.str.536, i64 14, ptr @.str.537) unreachable -ok1014: +ok1018: %t6 = getelementptr inbounds %S.parser.Parser, ptr %t4, i32 0, i32 4 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a9 @@ -15303,29 +15329,29 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1015, label %ok1016 -panic1015: + br i1 %t3, label %panic1019, label %ok1020 +panic1019: call void @finch_panic(ptr @.str.544, i64 19, ptr @.str.545) unreachable -ok1016: +ok1020: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic1017, label %ok1018 -panic1017: + br i1 %t6, label %panic1021, label %ok1022 +panic1021: call void @finch_panic(ptr @.str.546, i64 19, ptr @.str.547) unreachable -ok1018: +ok1022: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range1019, label %inrange1020 -range1019: + br i1 %t11, label %range1023, label %inrange1024 +range1023: call void @finch_panic_index(ptr @.str.548, i64 19, i64 %t8, i64 %t10) unreachable -inrange1020: +inrange1024: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = load %S.lexer.Token, ptr %t13 @@ -15343,29 +15369,29 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1021, label %ok1022 -panic1021: + br i1 %t3, label %panic1025, label %ok1026 +panic1025: call void @finch_panic(ptr @.str.549, i64 23, ptr @.str.550) unreachable -ok1022: +ok1026: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic1023, label %ok1024 -panic1023: + br i1 %t6, label %panic1027, label %ok1028 +panic1027: call void @finch_panic(ptr @.str.551, i64 23, ptr @.str.552) unreachable -ok1024: +ok1028: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range1025, label %inrange1026 -range1025: + br i1 %t11, label %range1029, label %inrange1030 +range1029: call void @finch_panic_index(ptr @.str.553, i64 23, i64 %t8, i64 %t10) unreachable -inrange1026: +inrange1030: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i32 0, i32 0 @@ -15387,11 +15413,11 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic1027, label %ok1028 -panic1027: + br i1 %t4, label %panic1031, label %ok1032 +panic1031: call void @finch_panic(ptr @.str.554, i64 27, ptr @.str.555) unreachable -ok1028: +ok1032: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a2 @@ -15400,48 +15426,48 @@ ok1028: %t10 = load i64, ptr %a9 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic1029, label %ok1030 -panic1029: + br i1 %t12, label %panic1033, label %ok1034 +panic1033: call void @finch_panic(ptr @.str.556, i64 28, ptr @.str.557) unreachable -ok1030: +ok1034: %t13 = getelementptr inbounds %S.parser.Parser, ptr %t11, i32 0, i32 0 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp sge i64 %t10, %t15 - br i1 %t16, label %then1031, label %endif1033 -then1031: + br i1 %t16, label %then1035, label %endif1037 +then1035: %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null - br i1 %t18, label %panic1034, label %ok1035 -panic1034: + br i1 %t18, label %panic1038, label %ok1039 +panic1038: call void @finch_panic(ptr @.str.558, i64 29, ptr @.str.559) unreachable -ok1035: +ok1039: %t19 = getelementptr inbounds %S.parser.Parser, ptr %t17, i32 0, i32 0 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load i64, ptr %t20 %t22 = sub i64 %t21, 1 store i64 %t22, ptr %a9 - br label %endif1033 -endif1033: + br label %endif1037 +endif1037: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic1036, label %ok1037 -panic1036: + br i1 %t24, label %panic1040, label %ok1041 +panic1040: call void @finch_panic(ptr @.str.560, i64 31, ptr @.str.561) unreachable -ok1037: +ok1041: %t25 = getelementptr inbounds %S.parser.Parser, ptr %t23, i32 0, i32 0 %t26 = load i64, ptr %a9 %t27 = load { ptr, i64, i64 }, ptr %t25 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 - br i1 %t29, label %range1038, label %inrange1039 -range1038: + br i1 %t29, label %range1042, label %inrange1043 +range1042: call void @finch_panic_index(ptr @.str.562, i64 31, i64 %t26, i64 %t28) unreachable -inrange1039: +inrange1043: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.lexer.Token, ptr %t30, i64 %t26 %t32 = getelementptr inbounds %S.lexer.Token, ptr %t31, i32 0, i32 0 @@ -15462,29 +15488,29 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic1040, label %ok1041 -panic1040: + br i1 %t4, label %panic1044, label %ok1045 +panic1044: call void @finch_panic(ptr @.str.563, i64 35, ptr @.str.564) unreachable -ok1041: +ok1045: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic1042, label %ok1043 -panic1042: + br i1 %t7, label %panic1046, label %ok1047 +panic1046: call void @finch_panic(ptr @.str.565, i64 35, ptr @.str.566) unreachable -ok1043: +ok1047: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load { ptr, i64, i64 }, ptr %t5 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range1044, label %inrange1045 -range1044: + br i1 %t12, label %range1048, label %inrange1049 +range1048: call void @finch_panic_index(ptr @.str.567, i64 35, i64 %t9, i64 %t11) unreachable -inrange1045: +inrange1049: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 %t15 = getelementptr inbounds %S.lexer.Token, ptr %t14, i32 0, i32 0 @@ -15506,29 +15532,29 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1046, label %ok1047 -panic1046: + br i1 %t3, label %panic1050, label %ok1051 +panic1050: call void @finch_panic(ptr @.str.568, i64 39, ptr @.str.569) unreachable -ok1047: +ok1051: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic1048, label %ok1049 -panic1048: + br i1 %t6, label %panic1052, label %ok1053 +panic1052: call void @finch_panic(ptr @.str.570, i64 39, ptr @.str.571) unreachable -ok1049: +ok1053: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range1050, label %inrange1051 -range1050: + br i1 %t11, label %range1054, label %inrange1055 +range1054: call void @finch_panic_index(ptr @.str.572, i64 39, i64 %t8, i64 %t10) unreachable -inrange1051: +inrange1055: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = load %S.lexer.Token, ptr %t13 @@ -15538,11 +15564,11 @@ inrange1051: store %S.lexer.Token %t17, ptr %a18 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null - br i1 %t20, label %panic1052, label %ok1053 -panic1052: + br i1 %t20, label %panic1056, label %ok1057 +panic1056: call void @finch_panic(ptr @.str.573, i64 40, ptr @.str.574) unreachable -ok1053: +ok1057: %t21 = getelementptr inbounds %S.parser.Parser, ptr %t19, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = add i64 %t22, 1 @@ -15560,21 +15586,21 @@ entry: %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } %t4) - br i1 %t5, label %then1054, label %endif1056 -then1054: + br i1 %t5, label %then1058, label %endif1060 +then1058: %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic1057, label %ok1058 -panic1057: + br i1 %t7, label %panic1061, label %ok1062 +panic1061: call void @finch_panic(ptr @.str.575, i64 46, ptr @.str.576) unreachable -ok1058: +ok1062: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = add i64 %t9, 1 store i64 %t10, ptr %t8 ret i1 true -endif1056: +endif1060: ret i1 false } @@ -15614,8 +15640,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.577, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then1059, label %endif1061 -then1059: + br i1 %t7, label %then1063, label %endif1065 +then1063: %t8 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } { ptr @.str.578, i64 1, i64 0 }, ptr %a11 @@ -15629,62 +15655,62 @@ then1059: call void @finch_str_drop(ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t18 -endif1061: +endif1065: %t19 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.580, i64 3, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 - br i1 %t24, label %then1062, label %endif1064 -then1062: + br i1 %t24, label %then1066, label %endif1068 +then1066: ret { ptr, i64, i64 } { ptr @.str.581, i64 11, i64 0 } -endif1064: +endif1068: %t25 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.582, i64 3, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br label %logic.from1065 -logic.from1065: - br i1 %t30, label %logic.end1067, label %logic.rhs1066 -logic.rhs1066: + br label %logic.from1069 +logic.from1069: + br i1 %t30, label %logic.end1071, label %logic.rhs1070 +logic.rhs1070: %t31 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } { ptr @.str.583, i64 5, i64 0 }, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 - br label %logic.rend1068 -logic.rend1068: - br label %logic.end1067 -logic.end1067: - %t37 = phi i1 [ true, %logic.from1065 ], [ %t36, %logic.rend1068 ] - br i1 %t37, label %then1069, label %endif1071 -then1069: + br label %logic.rend1072 +logic.rend1072: + br label %logic.end1071 +logic.end1071: + %t37 = phi i1 [ true, %logic.from1069 ], [ %t36, %logic.rend1072 ] + br i1 %t37, label %then1073, label %endif1075 +then1073: ret { ptr, i64, i64 } { ptr @.str.584, i64 8, i64 0 } -endif1071: +endif1075: %t38 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t39 = load { ptr, i64, i64 }, ptr %t38 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.585, i64 6, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br i1 %t43, label %then1072, label %endif1074 -then1072: + br i1 %t43, label %then1076, label %endif1078 +then1076: ret { ptr, i64, i64 } { ptr @.str.586, i64 8, i64 0 } -endif1074: +endif1078: %t44 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } { ptr @.str.587, i64 4, i64 0 }, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 - br i1 %t49, label %then1075, label %endif1077 -then1075: + br i1 %t49, label %then1079, label %endif1081 +then1079: ret { ptr, i64, i64 } { ptr @.str.588, i64 6, i64 0 } -endif1077: +endif1081: %t50 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } { ptr @.str.589, i64 1, i64 0 }, ptr %a53 @@ -15727,8 +15753,8 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } %t5) %t7 = xor i1 %t6, true - br i1 %t7, label %then1078, label %endif1080 -then1078: + br i1 %t7, label %then1082, label %endif1084 +then1082: %t8 = load ptr, ptr %a1 %t9 = load ptr, ptr %a1 %t10 = call %S.lexer.Token @finch.parser.cur(ptr %t9) @@ -15761,8 +15787,8 @@ then1078: call void @finch.drop.S_lexer_Token(ptr %a31) store { ptr, i64, i64 } %t30, ptr %a32 call void @finch_str_drop(ptr %a32) - br label %endif1080 -endif1080: + br label %endif1084 +endif1084: %t33 = load ptr, ptr %a1 %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) ret %S.lexer.Token %t34 @@ -15774,53 +15800,53 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1081, label %ok1082 -panic1081: + br i1 %t3, label %panic1085, label %ok1086 +panic1085: call void @finch_panic(ptr @.str.593, i64 79, ptr @.str.594) unreachable -ok1082: +ok1086: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 2 %t5 = load i64, ptr %t4 %t6 = icmp sgt i64 %t5, 0 - br label %logic.from1083 -logic.from1083: - br i1 %t6, label %logic.end1085, label %logic.rhs1084 -logic.rhs1084: + br label %logic.from1087 +logic.from1087: + br i1 %t6, label %logic.end1089, label %logic.rhs1088 +logic.rhs1088: %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic1086, label %ok1087 -panic1086: + br i1 %t8, label %panic1090, label %ok1091 +panic1090: call void @finch_panic(ptr @.str.595, i64 79, ptr @.str.596) unreachable -ok1087: +ok1091: %t9 = getelementptr inbounds %S.parser.Parser, ptr %t7, i32 0, i32 0 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic1088, label %ok1089 -panic1088: + br i1 %t11, label %panic1092, label %ok1093 +panic1092: call void @finch_panic(ptr @.str.597, i64 79, ptr @.str.598) unreachable -ok1089: +ok1093: %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = load { ptr, i64, i64 }, ptr %t9 %t15 = extractvalue { ptr, i64, i64 } %t14, 1 %t16 = icmp uge i64 %t13, %t15 - br i1 %t16, label %range1090, label %inrange1091 -range1090: + br i1 %t16, label %range1094, label %inrange1095 +range1094: call void @finch_panic_index(ptr @.str.599, i64 79, i64 %t13, i64 %t15) unreachable -inrange1091: +inrange1095: %t17 = extractvalue { ptr, i64, i64 } %t14, 0 %t18 = getelementptr inbounds %S.lexer.Token, ptr %t17, i64 %t13 %t19 = getelementptr inbounds %S.lexer.Token, ptr %t18, i32 0, i32 4 %t20 = load i1, ptr %t19 %t21 = xor i1 %t20, true - br label %logic.rend1092 -logic.rend1092: - br label %logic.end1085 -logic.end1085: - %t22 = phi i1 [ true, %logic.from1083 ], [ %t21, %logic.rend1092 ] + br label %logic.rend1096 +logic.rend1096: + br label %logic.end1089 +logic.end1089: + %t22 = phi i1 [ true, %logic.from1087 ], [ %t21, %logic.rend1096 ] ret i1 %t22 } @@ -15837,29 +15863,29 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic1093, label %ok1094 -panic1093: + br i1 %t4, label %panic1097, label %ok1098 +panic1097: call void @finch_panic(ptr @.str.600, i64 83, ptr @.str.601) unreachable -ok1094: +ok1098: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic1095, label %ok1096 -panic1095: + br i1 %t7, label %panic1099, label %ok1100 +panic1099: call void @finch_panic(ptr @.str.602, i64 83, ptr @.str.603) unreachable -ok1096: +ok1100: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load { ptr, i64, i64 }, ptr %t5 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range1097, label %inrange1098 -range1097: + br i1 %t12, label %range1101, label %inrange1102 +range1101: call void @finch_panic_index(ptr @.str.604, i64 83, i64 %t9, i64 %t11) unreachable -inrange1098: +inrange1102: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 %t15 = load %S.lexer.Token, ptr %t14 @@ -15880,11 +15906,11 @@ inrange1098: %t30 = insertvalue %S.ast.Node %t27, i64 %t29, 12 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null - br i1 %t32, label %panic1099, label %ok1100 -panic1099: + br i1 %t32, label %panic1103, label %ok1104 +panic1103: call void @finch_panic(ptr @.str.605, i64 84, ptr @.str.606) unreachable -ok1100: +ok1104: %t33 = getelementptr inbounds %S.parser.Parser, ptr %t31, i32 0, i32 3 %t34 = load i64, ptr %t33 %t35 = insertvalue %S.ast.Node %t30, i64 %t34, 13 @@ -15945,27 +15971,27 @@ entry: %t27 = load i64, ptr %t24 %t28 = load ptr, ptr %a23 store i64 0, ptr %a29 - br label %find.cond1101 -find.cond1101: + br label %find.cond1105 +find.cond1105: %t30 = load i64, ptr %a29 %t31 = icmp slt i64 %t30, %t27 - br i1 %t31, label %find.body1102, label %find.end1105 -find.body1102: + br i1 %t31, label %find.body1106, label %find.end1109 +find.body1106: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } %t25, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %find.hit1103, label %find.next1104 -find.hit1103: + br i1 %t37, label %find.hit1107, label %find.next1108 +find.hit1107: store i64 %t30, ptr %a26 - br label %find.end1105 -find.next1104: + br label %find.end1109 +find.next1108: %t38 = add i64 %t30, 1 store i64 %t38, ptr %a29 - br label %find.cond1101 -find.end1105: + br label %find.cond1105 +find.end1109: %t39 = load i64, ptr %a26 %t40 = icmp sge i64 %t39, 0 call void @finch.drop.arr_str(ptr %a23) @@ -16030,8 +16056,8 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.accept(ptr %t2, { ptr, i64, i64 } { ptr @.str.623, i64 1, i64 0 }) - br i1 %t3, label %then1106, label %endif1108 -then1106: + br i1 %t3, label %then1110, label %endif1112 +then1110: %t4 = load ptr, ptr %a1 %t5 = call %S.lexer.Token @finch.parser.expect(ptr %t4, { ptr, i64, i64 } { ptr @.str.624, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.625, i64 36, i64 0 }) store %S.lexer.Token %t5, ptr %a6 @@ -16042,12 +16068,12 @@ then1106: store %S.ast.Type %t8, ptr %a10 call void @finch.drop.S_ast_Type(ptr %a10) ret %S.ast.Type %t9 -endif1108: +endif1112: %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.626, i64 5, i64 0 }) %t13 = xor i1 %t12, true - br i1 %t13, label %then1109, label %endif1111 -then1109: + br i1 %t13, label %then1113, label %endif1115 +then1113: %t14 = load ptr, ptr %a1 %t15 = load ptr, ptr %a1 %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) @@ -16073,8 +16099,8 @@ then1109: call void @finch.drop.S_lexer_Token(ptr %a31) store { ptr, i64, i64 } %t30, ptr %a32 call void @finch_str_drop(ptr %a32) - br label %endif1111 -endif1111: + br label %endif1115 +endif1115: %t33 = load ptr, ptr %a1 %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) %t35 = extractvalue %S.lexer.Token %t34, 1 @@ -16089,19 +16115,19 @@ endif1111: store { ptr, i64, i64 } { ptr @.str.629, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.from1112 -logic.from1112: - br i1 %t45, label %logic.rhs1113, label %logic.end1114 -logic.rhs1113: + br label %logic.from1116 +logic.from1116: + br i1 %t45, label %logic.rhs1117, label %logic.end1118 +logic.rhs1117: %t46 = load ptr, ptr %a1 %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.630, i64 1, i64 0 }) - br label %logic.rend1115 -logic.rend1115: - br label %logic.end1114 -logic.end1114: - %t48 = phi i1 [ false, %logic.from1112 ], [ %t47, %logic.rend1115 ] - br i1 %t48, label %then1116, label %endif1118 -then1116: + br label %logic.rend1119 +logic.rend1119: + br label %logic.end1118 +logic.end1118: + %t48 = phi i1 [ false, %logic.from1116 ], [ %t47, %logic.rend1119 ] + br i1 %t48, label %then1120, label %endif1122 +then1120: %t49 = load ptr, ptr %a1 %t50 = call %S.lexer.Token @finch.parser.next(ptr %t49) store %S.lexer.Token %t50, ptr %a51 @@ -16122,29 +16148,29 @@ then1116: call void @finch.drop.S_ast_Type(ptr %a54) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t61 -endif1118: +endif1122: %t63 = load { ptr, i64, i64 }, ptr %a40 %t64 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t63) - br i1 %t64, label %then1119, label %endif1121 -then1119: + br i1 %t64, label %then1123, label %endif1125 +then1123: %t65 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t65, ptr %a66 store { ptr, i64, i64 } { ptr @.str.633, i64 3, i64 0 }, ptr %a67 %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) %t69 = icmp ne i32 %t68, 0 - br label %logic.from1122 -logic.from1122: - br i1 %t69, label %logic.rhs1123, label %logic.end1124 -logic.rhs1123: + br label %logic.from1126 +logic.from1126: + br i1 %t69, label %logic.rhs1127, label %logic.end1128 +logic.rhs1127: %t70 = load ptr, ptr %a1 %t71 = call i1 @finch.parser.accept(ptr %t70, { ptr, i64, i64 } { ptr @.str.634, i64 1, i64 0 }) - br label %logic.rend1125 -logic.rend1125: - br label %logic.end1124 -logic.end1124: - %t72 = phi i1 [ false, %logic.from1122 ], [ %t71, %logic.rend1125 ] - br i1 %t72, label %then1126, label %endif1128 -then1126: + br label %logic.rend1129 +logic.rend1129: + br label %logic.end1128 +logic.end1128: + %t72 = phi i1 [ false, %logic.from1126 ], [ %t71, %logic.rend1129 ] + br i1 %t72, label %then1130, label %endif1132 +then1130: %t73 = load ptr, ptr %a1 %t74 = call %S.ast.Type @finch.parser.parseType(ptr %t73) %t75 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t74) @@ -16158,34 +16184,34 @@ then1126: %t81 = load %S.ast.Type, ptr %a77 call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t81 -endif1128: +endif1132: %t82 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t82, ptr %a83 store { ptr, i64, i64 } { ptr @.str.637, i64 3, i64 0 }, ptr %a84 %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) %t86 = icmp ne i32 %t85, 0 - br i1 %t86, label %then1129, label %endif1131 -then1129: + br i1 %t86, label %then1133, label %endif1135 +then1133: %t87 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.638, i64 3, i64 0 }) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t87 -endif1131: +endif1135: %t88 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.639, i64 3, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 - br i1 %t92, label %then1132, label %endif1134 -then1132: + br i1 %t92, label %then1136, label %endif1138 +then1136: %t93 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.640, i64 5, i64 0 }) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t93 -endif1134: +endif1138: %t94 = load { ptr, i64, i64 }, ptr %a40 %t95 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t94) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t95 -endif1121: +endif1125: %t96 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.641, i64 5, i64 0 }, 0 %t97 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t97, ptr %a98 @@ -16195,10 +16221,10 @@ endif1121: store %S.ast.Type %t101, ptr %a102 %t103 = load ptr, ptr %a1 %t104 = call i1 @finch.parser.at(ptr %t103, { ptr, i64, i64 } { ptr @.str.642, i64 1, i64 0 }) - br label %logic.from1135 -logic.from1135: - br i1 %t104, label %logic.rhs1136, label %logic.end1137 -logic.rhs1136: + br label %logic.from1139 +logic.from1139: + br i1 %t104, label %logic.rhs1140, label %logic.end1141 +logic.rhs1140: %t105 = load ptr, ptr %a1 %t106 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t105, i64 1) store { ptr, i64, i64 } %t106, ptr %a107 @@ -16207,13 +16233,13 @@ logic.rhs1136: %t110 = icmp ne i32 %t109, 0 store { ptr, i64, i64 } %t106, ptr %a111 call void @finch_str_drop(ptr %a111) - br label %logic.rend1138 -logic.rend1138: - br label %logic.end1137 -logic.end1137: - %t112 = phi i1 [ false, %logic.from1135 ], [ %t110, %logic.rend1138 ] - br i1 %t112, label %then1139, label %endif1141 -then1139: + br label %logic.rend1142 +logic.rend1142: + br label %logic.end1141 +logic.end1141: + %t112 = phi i1 [ false, %logic.from1139 ], [ %t110, %logic.rend1142 ] + br i1 %t112, label %then1143, label %endif1145 +then1143: %t113 = load ptr, ptr %a1 %t114 = call %S.lexer.Token @finch.parser.next(ptr %t113) store %S.lexer.Token %t114, ptr %a115 @@ -16240,29 +16266,29 @@ then1139: store { ptr, i64, i64 } %t128, ptr %t130 store { ptr, i64, i64 } %t131, ptr %a132 call void @finch_str_drop(ptr %a132) - br label %endif1141 -endif1141: + br label %endif1145 +endif1145: %t133 = load ptr, ptr %a1 %t134 = call i1 @finch.parser.at(ptr %t133, { ptr, i64, i64 } { ptr @.str.644, i64 1, i64 0 }) - br label %logic.from1142 -logic.from1142: - br i1 %t134, label %logic.rhs1143, label %logic.end1144 -logic.rhs1143: + br label %logic.from1146 +logic.from1146: + br i1 %t134, label %logic.rhs1147, label %logic.end1148 +logic.rhs1147: %t135 = load ptr, ptr %a1 %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) %t137 = extractvalue %S.lexer.Token %t136, 4 store %S.lexer.Token %t136, ptr %a138 call void @finch.drop.S_lexer_Token(ptr %a138) %t139 = xor i1 %t137, true - br label %logic.rend1145 -logic.rend1145: - br label %logic.end1144 -logic.end1144: - %t140 = phi i1 [ false, %logic.from1142 ], [ %t139, %logic.rend1145 ] - br label %logic.from1146 -logic.from1146: - br i1 %t140, label %logic.rhs1147, label %logic.end1148 -logic.rhs1147: + br label %logic.rend1149 +logic.rend1149: + br label %logic.end1148 +logic.end1148: + %t140 = phi i1 [ false, %logic.from1146 ], [ %t139, %logic.rend1149 ] + br label %logic.from1150 +logic.from1150: + br i1 %t140, label %logic.rhs1151, label %logic.end1152 +logic.rhs1151: %t141 = load ptr, ptr %a1 %t142 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t141, i64 1) store { ptr, i64, i64 } %t142, ptr %a143 @@ -16271,21 +16297,21 @@ logic.rhs1147: %t146 = icmp eq i32 %t145, 0 store { ptr, i64, i64 } %t142, ptr %a147 call void @finch_str_drop(ptr %a147) - br label %logic.rend1149 -logic.rend1149: - br label %logic.end1148 -logic.end1148: - %t148 = phi i1 [ false, %logic.from1146 ], [ %t146, %logic.rend1149 ] - br i1 %t148, label %then1150, label %endif1152 -then1150: + br label %logic.rend1153 +logic.rend1153: + br label %logic.end1152 +logic.end1152: + %t148 = phi i1 [ false, %logic.from1150 ], [ %t146, %logic.rend1153 ] + br i1 %t148, label %then1154, label %endif1156 +then1154: %t149 = load ptr, ptr %a1 %t150 = call %S.lexer.Token @finch.parser.next(ptr %t149) store %S.lexer.Token %t150, ptr %a151 call void @finch.drop.S_lexer_Token(ptr %a151) - br label %while.cond1153 -while.cond1153: - br label %while.body1154 -while.body1154: + br label %while.cond1157 +while.cond1157: + br label %while.body1158 +while.body1158: %t152 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 1 %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i32 0, i32 1 %t154 = load ptr, ptr %a1 @@ -16300,18 +16326,18 @@ while.body1154: %t160 = load ptr, ptr %a1 %t161 = call i1 @finch.parser.accept(ptr %t160, { ptr, i64, i64 } { ptr @.str.646, i64 1, i64 0 }) %t162 = xor i1 %t161, true - br i1 %t162, label %then1156, label %endif1158 -then1156: - br label %while.end1155 -endif1158: - br label %while.cond1153 -while.end1155: + br i1 %t162, label %then1160, label %endif1162 +then1160: + br label %while.end1159 +endif1162: + br label %while.cond1157 +while.end1159: %t163 = load ptr, ptr %a1 %t164 = call %S.lexer.Token @finch.parser.expect(ptr %t163, { ptr, i64, i64 } { ptr @.str.647, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.648, i64 28, i64 0 }) store %S.lexer.Token %t164, ptr %a165 call void @finch.drop.S_lexer_Token(ptr %a165) - br label %endif1152 -endif1152: + br label %endif1156 +endif1156: %t166 = load %S.ast.Type, ptr %a102 call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t166 @@ -16343,10 +16369,10 @@ entry: %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.649, i64 5, i64 0 }) %t4 = xor i1 %t3, true - br label %logic.from1159 -logic.from1159: - br i1 %t4, label %logic.end1161, label %logic.rhs1160 -logic.rhs1160: + br label %logic.from1163 +logic.from1163: + br i1 %t4, label %logic.end1165, label %logic.rhs1164 +logic.rhs1164: %t5 = load ptr, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t5, i64 1) store { ptr, i64, i64 } %t6, ptr %a7 @@ -16355,15 +16381,15 @@ logic.rhs1160: %t10 = icmp eq i32 %t9, 0 store { ptr, i64, i64 } %t6, ptr %a11 call void @finch_str_drop(ptr %a11) - br label %logic.rend1162 -logic.rend1162: - br label %logic.end1161 -logic.end1161: - %t12 = phi i1 [ true, %logic.from1159 ], [ %t10, %logic.rend1162 ] - br label %logic.from1163 -logic.from1163: - br i1 %t12, label %logic.end1165, label %logic.rhs1164 -logic.rhs1164: + br label %logic.rend1166 +logic.rend1166: + br label %logic.end1165 +logic.end1165: + %t12 = phi i1 [ true, %logic.from1163 ], [ %t10, %logic.rend1166 ] + br label %logic.from1167 +logic.from1167: + br i1 %t12, label %logic.end1169, label %logic.rhs1168 +logic.rhs1168: %t13 = load ptr, ptr %a1 %t14 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t13, i64 2) store { ptr, i64, i64 } %t14, ptr %a15 @@ -16372,60 +16398,60 @@ logic.rhs1164: %t18 = icmp ne i32 %t17, 0 store { ptr, i64, i64 } %t14, ptr %a19 call void @finch_str_drop(ptr %a19) - br label %logic.rend1166 -logic.rend1166: - br label %logic.end1165 -logic.end1165: - %t20 = phi i1 [ true, %logic.from1163 ], [ %t18, %logic.rend1166 ] - br i1 %t20, label %then1167, label %endif1169 -then1167: + br label %logic.rend1170 +logic.rend1170: + br label %logic.end1169 +logic.end1169: + %t20 = phi i1 [ true, %logic.from1167 ], [ %t18, %logic.rend1170 ] + br i1 %t20, label %then1171, label %endif1173 +then1171: ret i1 false -endif1169: +endif1173: store i64 0, ptr %a21 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic1170, label %ok1171 -panic1170: + br i1 %t23, label %panic1174, label %ok1175 +panic1174: call void @finch_panic(ptr @.str.652, i64 148, ptr @.str.653) unreachable -ok1171: +ok1175: %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = add i64 %t25, 1 store i64 %t26, ptr %a27 - br label %while.cond1172 -while.cond1172: + br label %while.cond1176 +while.cond1176: %t28 = load i64, ptr %a27 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic1175, label %ok1176 -panic1175: + br i1 %t30, label %panic1179, label %ok1180 +panic1179: call void @finch_panic(ptr @.str.654, i64 149, ptr @.str.655) unreachable -ok1176: +ok1180: %t31 = getelementptr inbounds %S.parser.Parser, ptr %t29, i32 0, i32 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t28, %t33 - br i1 %t34, label %while.body1173, label %while.end1174 -while.body1173: + br i1 %t34, label %while.body1177, label %while.end1178 +while.body1177: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic1177, label %ok1178 -panic1177: + br i1 %t36, label %panic1181, label %ok1182 +panic1181: call void @finch_panic(ptr @.str.656, i64 150, ptr @.str.657) unreachable -ok1178: +ok1182: %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 0 %t38 = load i64, ptr %a27 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range1179, label %inrange1180 -range1179: + br i1 %t41, label %range1183, label %inrange1184 +range1183: call void @finch_panic_index(ptr @.str.658, i64 150, i64 %t38, i64 %t40) unreachable -inrange1180: +inrange1184: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.lexer.Token, ptr %t42, i64 %t38 %t44 = getelementptr inbounds %S.lexer.Token, ptr %t43, i32 0, i32 0 @@ -16439,62 +16465,62 @@ inrange1180: store { ptr, i64, i64 } { ptr @.str.659, i64 1, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %then1181, label %else1182 -then1181: + br i1 %t54, label %then1185, label %else1186 +then1185: %t55 = load i64, ptr %a21 %t56 = add i64 %t55, 1 store i64 %t56, ptr %a21 - br label %endif1183 -else1182: + br label %endif1187 +else1186: %t57 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.660, i64 1, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br i1 %t61, label %then1184, label %else1185 -then1184: + br i1 %t61, label %then1188, label %else1189 +then1188: %t62 = load i64, ptr %a21 %t63 = sub i64 %t62, 1 store i64 %t63, ptr %a21 %t64 = load i64, ptr %a21 %t65 = icmp eq i64 %t64, 0 - br i1 %t65, label %then1187, label %endif1189 -then1187: + br i1 %t65, label %then1191, label %endif1193 +then1191: %t66 = load i64, ptr %a27 %t67 = add i64 %t66, 1 %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null - br i1 %t69, label %panic1190, label %ok1191 -panic1190: + br i1 %t69, label %panic1194, label %ok1195 +panic1194: call void @finch_panic(ptr @.str.661, i64 156, ptr @.str.662) unreachable -ok1191: +ok1195: %t70 = getelementptr inbounds %S.parser.Parser, ptr %t68, i32 0, i32 0 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load i64, ptr %t71 %t73 = icmp slt i64 %t67, %t72 - br label %logic.from1192 -logic.from1192: - br i1 %t73, label %logic.rhs1193, label %logic.end1194 -logic.rhs1193: + br label %logic.from1196 +logic.from1196: + br i1 %t73, label %logic.rhs1197, label %logic.end1198 +logic.rhs1197: %t74 = load ptr, ptr %a1 %t75 = icmp eq ptr %t74, null - br i1 %t75, label %panic1195, label %ok1196 -panic1195: + br i1 %t75, label %panic1199, label %ok1200 +panic1199: call void @finch_panic(ptr @.str.663, i64 156, ptr @.str.664) unreachable -ok1196: +ok1200: %t76 = getelementptr inbounds %S.parser.Parser, ptr %t74, i32 0, i32 0 %t77 = load i64, ptr %a27 %t78 = add i64 %t77, 1 %t79 = load { ptr, i64, i64 }, ptr %t76 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 - br i1 %t81, label %range1197, label %inrange1198 -range1197: + br i1 %t81, label %range1201, label %inrange1202 +range1201: call void @finch_panic_index(ptr @.str.665, i64 156, i64 %t78, i64 %t80) unreachable -inrange1198: +inrange1202: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds %S.lexer.Token, ptr %t82, i64 %t78 %t84 = getelementptr inbounds %S.lexer.Token, ptr %t83, i32 0, i32 0 @@ -16503,109 +16529,109 @@ inrange1198: store { ptr, i64, i64 } { ptr @.str.666, i64 5, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 - br label %logic.rend1199 -logic.rend1199: - br label %logic.end1194 -logic.end1194: - %t90 = phi i1 [ false, %logic.from1192 ], [ %t89, %logic.rend1199 ] - br label %logic.from1200 -logic.from1200: - br i1 %t90, label %logic.rhs1201, label %logic.end1202 -logic.rhs1201: + br label %logic.rend1203 +logic.rend1203: + br label %logic.end1198 +logic.end1198: + %t90 = phi i1 [ false, %logic.from1196 ], [ %t89, %logic.rend1203 ] + br label %logic.from1204 +logic.from1204: + br i1 %t90, label %logic.rhs1205, label %logic.end1206 +logic.rhs1205: %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null - br i1 %t92, label %panic1203, label %ok1204 -panic1203: + br i1 %t92, label %panic1207, label %ok1208 +panic1207: call void @finch_panic(ptr @.str.667, i64 156, ptr @.str.668) unreachable -ok1204: +ok1208: %t93 = getelementptr inbounds %S.parser.Parser, ptr %t91, i32 0, i32 0 %t94 = load i64, ptr %a27 %t95 = add i64 %t94, 1 %t96 = load { ptr, i64, i64 }, ptr %t93 %t97 = extractvalue { ptr, i64, i64 } %t96, 1 %t98 = icmp uge i64 %t95, %t97 - br i1 %t98, label %range1205, label %inrange1206 -range1205: + br i1 %t98, label %range1209, label %inrange1210 +range1209: call void @finch_panic_index(ptr @.str.669, i64 156, i64 %t95, i64 %t97) unreachable -inrange1206: +inrange1210: %t99 = extractvalue { ptr, i64, i64 } %t96, 0 %t100 = getelementptr inbounds %S.lexer.Token, ptr %t99, i64 %t95 %t101 = getelementptr inbounds %S.lexer.Token, ptr %t100, i32 0, i32 4 %t102 = load i1, ptr %t101 %t103 = xor i1 %t102, true - br label %logic.rend1207 -logic.rend1207: - br label %logic.end1202 -logic.end1202: - %t104 = phi i1 [ false, %logic.from1200 ], [ %t103, %logic.rend1207 ] + br label %logic.rend1211 +logic.rend1211: + br label %logic.end1206 +logic.end1206: + %t104 = phi i1 [ false, %logic.from1204 ], [ %t103, %logic.rend1211 ] call void @finch_str_drop(ptr %a49) ret i1 %t104 -endif1189: - br label %endif1186 -else1185: +endif1193: + br label %endif1190 +else1189: %t105 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t105, ptr %a106 store { ptr, i64, i64 } { ptr @.str.670, i64 3, i64 0 }, ptr %a107 %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) %t109 = icmp ne i32 %t108, 0 - br label %logic.from1208 -logic.from1208: - br i1 %t109, label %logic.end1210, label %logic.rhs1209 -logic.rhs1209: + br label %logic.from1212 +logic.from1212: + br i1 %t109, label %logic.end1214, label %logic.rhs1213 +logic.rhs1213: %t110 = load ptr, ptr %a1 %t111 = icmp eq ptr %t110, null - br i1 %t111, label %panic1211, label %ok1212 -panic1211: + br i1 %t111, label %panic1215, label %ok1216 +panic1215: call void @finch_panic(ptr @.str.671, i64 158, ptr @.str.672) unreachable -ok1212: +ok1216: %t112 = getelementptr inbounds %S.parser.Parser, ptr %t110, i32 0, i32 0 %t113 = load i64, ptr %a27 %t114 = load { ptr, i64, i64 }, ptr %t112 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 %t113, %t115 - br i1 %t116, label %range1213, label %inrange1214 -range1213: + br i1 %t116, label %range1217, label %inrange1218 +range1217: call void @finch_panic_index(ptr @.str.673, i64 158, i64 %t113, i64 %t115) unreachable -inrange1214: +inrange1218: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds %S.lexer.Token, ptr %t117, i64 %t113 %t119 = getelementptr inbounds %S.lexer.Token, ptr %t118, i32 0, i32 4 %t120 = load i1, ptr %t119 - br label %logic.from1215 -logic.from1215: - br i1 %t120, label %logic.rhs1216, label %logic.end1217 -logic.rhs1216: + br label %logic.from1219 +logic.from1219: + br i1 %t120, label %logic.rhs1220, label %logic.end1221 +logic.rhs1220: %t121 = load i64, ptr %a21 %t122 = icmp eq i64 %t121, 0 - br label %logic.rend1218 -logic.rend1218: - br label %logic.end1217 -logic.end1217: - %t123 = phi i1 [ false, %logic.from1215 ], [ %t122, %logic.rend1218 ] - br label %logic.rend1219 -logic.rend1219: - br label %logic.end1210 -logic.end1210: - %t124 = phi i1 [ true, %logic.from1208 ], [ %t123, %logic.rend1219 ] - br i1 %t124, label %then1220, label %endif1222 -then1220: + br label %logic.rend1222 +logic.rend1222: + br label %logic.end1221 +logic.end1221: + %t123 = phi i1 [ false, %logic.from1219 ], [ %t122, %logic.rend1222 ] + br label %logic.rend1223 +logic.rend1223: + br label %logic.end1214 +logic.end1214: + %t124 = phi i1 [ true, %logic.from1212 ], [ %t123, %logic.rend1223 ] + br i1 %t124, label %then1224, label %endif1226 +then1224: call void @finch_str_drop(ptr %a49) ret i1 false -endif1222: - br label %endif1186 -endif1186: - br label %endif1183 -endif1183: +endif1226: + br label %endif1190 +endif1190: + br label %endif1187 +endif1187: %t125 = load i64, ptr %a27 %t126 = add i64 %t125, 1 store i64 %t126, ptr %a27 call void @finch_str_drop(ptr %a49) - br label %while.cond1172 -while.end1174: + br label %while.cond1176 +while.end1178: ret i1 false } @@ -16616,11 +16642,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1223, label %ok1224 -panic1223: + br i1 %t3, label %panic1227, label %ok1228 +panic1227: call void @finch_panic(ptr @.str.674, i64 168, ptr @.str.675) unreachable -ok1224: +ok1228: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = sub i64 %t5, 1 @@ -16630,11 +16656,11 @@ ok1224: store i1 %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic1225, label %ok1226 -panic1225: + br i1 %t11, label %panic1229, label %ok1230 +panic1229: call void @finch_panic(ptr @.str.676, i64 170, ptr @.str.677) unreachable -ok1226: +ok1230: %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 @@ -16674,49 +16700,49 @@ entry: %t7 = icmp eq i32 %t6, 0 store { ptr, i64, i64 } %t3, ptr %a8 call void @finch_str_drop(ptr %a8) - br label %logic.from1227 -logic.from1227: - br i1 %t7, label %logic.end1229, label %logic.rhs1228 -logic.rhs1228: + br label %logic.from1231 +logic.from1231: + br i1 %t7, label %logic.end1233, label %logic.rhs1232 +logic.rhs1232: %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic1230, label %ok1231 -panic1230: + br i1 %t10, label %panic1234, label %ok1235 +panic1234: call void @finch_panic(ptr @.str.679, i64 176, ptr @.str.680) unreachable -ok1231: +ok1235: %t11 = getelementptr inbounds %S.parser.Parser, ptr %t9, i32 0, i32 0 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic1232, label %ok1233 -panic1232: + br i1 %t13, label %panic1236, label %ok1237 +panic1236: call void @finch_panic(ptr @.str.681, i64 176, ptr @.str.682) unreachable -ok1233: +ok1237: %t14 = getelementptr inbounds %S.parser.Parser, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = add i64 %t15, 1 %t17 = load { ptr, i64, i64 }, ptr %t11 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 - br i1 %t19, label %range1234, label %inrange1235 -range1234: + br i1 %t19, label %range1238, label %inrange1239 +range1238: call void @finch_panic_index(ptr @.str.683, i64 176, i64 %t16, i64 %t18) unreachable -inrange1235: +inrange1239: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.lexer.Token, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.lexer.Token, ptr %t21, i32 0, i32 4 %t23 = load i1, ptr %t22 - br label %logic.rend1236 -logic.rend1236: - br label %logic.end1229 -logic.end1229: - %t24 = phi i1 [ true, %logic.from1227 ], [ %t23, %logic.rend1236 ] - br label %logic.from1237 -logic.from1237: - br i1 %t24, label %logic.end1239, label %logic.rhs1238 -logic.rhs1238: + br label %logic.rend1240 +logic.rend1240: + br label %logic.end1233 +logic.end1233: + %t24 = phi i1 [ true, %logic.from1231 ], [ %t23, %logic.rend1240 ] + br label %logic.from1241 +logic.from1241: + br i1 %t24, label %logic.end1243, label %logic.rhs1242 +logic.rhs1242: %t25 = load ptr, ptr %a1 %t26 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t25, i64 2) store { ptr, i64, i64 } %t26, ptr %a27 @@ -16725,60 +16751,60 @@ logic.rhs1238: %t30 = icmp ne i32 %t29, 0 store { ptr, i64, i64 } %t26, ptr %a31 call void @finch_str_drop(ptr %a31) - br label %logic.rend1240 -logic.rend1240: - br label %logic.end1239 -logic.end1239: - %t32 = phi i1 [ true, %logic.from1237 ], [ %t30, %logic.rend1240 ] - br i1 %t32, label %then1241, label %endif1243 -then1241: + br label %logic.rend1244 +logic.rend1244: + br label %logic.end1243 +logic.end1243: + %t32 = phi i1 [ true, %logic.from1241 ], [ %t30, %logic.rend1244 ] + br i1 %t32, label %then1245, label %endif1247 +then1245: ret i1 false -endif1243: +endif1247: store i64 0, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic1244, label %ok1245 -panic1244: + br i1 %t35, label %panic1248, label %ok1249 +panic1248: call void @finch_panic(ptr @.str.685, i64 180, ptr @.str.686) unreachable -ok1245: +ok1249: %t36 = getelementptr inbounds %S.parser.Parser, ptr %t34, i32 0, i32 1 %t37 = load i64, ptr %t36 %t38 = add i64 %t37, 1 store i64 %t38, ptr %a39 - br label %while.cond1246 -while.cond1246: + br label %while.cond1250 +while.cond1250: %t40 = load i64, ptr %a39 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic1249, label %ok1250 -panic1249: + br i1 %t42, label %panic1253, label %ok1254 +panic1253: call void @finch_panic(ptr @.str.687, i64 181, ptr @.str.688) unreachable -ok1250: +ok1254: %t43 = getelementptr inbounds %S.parser.Parser, ptr %t41, i32 0, i32 0 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = icmp slt i64 %t40, %t45 - br i1 %t46, label %while.body1247, label %while.end1248 -while.body1247: + br i1 %t46, label %while.body1251, label %while.end1252 +while.body1251: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic1251, label %ok1252 -panic1251: + br i1 %t48, label %panic1255, label %ok1256 +panic1255: call void @finch_panic(ptr @.str.689, i64 182, ptr @.str.690) unreachable -ok1252: +ok1256: %t49 = getelementptr inbounds %S.parser.Parser, ptr %t47, i32 0, i32 0 %t50 = load i64, ptr %a39 %t51 = load { ptr, i64, i64 }, ptr %t49 %t52 = extractvalue { ptr, i64, i64 } %t51, 1 %t53 = icmp uge i64 %t50, %t52 - br i1 %t53, label %range1253, label %inrange1254 -range1253: + br i1 %t53, label %range1257, label %inrange1258 +range1257: call void @finch_panic_index(ptr @.str.691, i64 182, i64 %t50, i64 %t52) unreachable -inrange1254: +inrange1258: %t54 = extractvalue { ptr, i64, i64 } %t51, 0 %t55 = getelementptr inbounds %S.lexer.Token, ptr %t54, i64 %t50 %t56 = getelementptr inbounds %S.lexer.Token, ptr %t55, i32 0, i32 0 @@ -16792,62 +16818,62 @@ inrange1254: store { ptr, i64, i64 } { ptr @.str.692, i64 1, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 - br i1 %t66, label %then1255, label %else1256 -then1255: + br i1 %t66, label %then1259, label %else1260 +then1259: %t67 = load i64, ptr %a33 %t68 = add i64 %t67, 1 store i64 %t68, ptr %a33 - br label %endif1257 -else1256: + br label %endif1261 +else1260: %t69 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } { ptr @.str.693, i64 1, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 - br i1 %t73, label %then1258, label %else1259 -then1258: + br i1 %t73, label %then1262, label %else1263 +then1262: %t74 = load i64, ptr %a33 %t75 = sub i64 %t74, 1 store i64 %t75, ptr %a33 %t76 = load i64, ptr %a33 %t77 = icmp eq i64 %t76, 0 - br i1 %t77, label %then1261, label %endif1263 -then1261: + br i1 %t77, label %then1265, label %endif1267 +then1265: %t78 = load i64, ptr %a39 %t79 = add i64 %t78, 1 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null - br i1 %t81, label %panic1264, label %ok1265 -panic1264: + br i1 %t81, label %panic1268, label %ok1269 +panic1268: call void @finch_panic(ptr @.str.694, i64 188, ptr @.str.695) unreachable -ok1265: +ok1269: %t82 = getelementptr inbounds %S.parser.Parser, ptr %t80, i32 0, i32 0 %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 %t84 = load i64, ptr %t83 %t85 = icmp slt i64 %t79, %t84 - br label %logic.from1266 -logic.from1266: - br i1 %t85, label %logic.rhs1267, label %logic.end1268 -logic.rhs1267: + br label %logic.from1270 +logic.from1270: + br i1 %t85, label %logic.rhs1271, label %logic.end1272 +logic.rhs1271: %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic1269, label %ok1270 -panic1269: + br i1 %t87, label %panic1273, label %ok1274 +panic1273: call void @finch_panic(ptr @.str.696, i64 188, ptr @.str.697) unreachable -ok1270: +ok1274: %t88 = getelementptr inbounds %S.parser.Parser, ptr %t86, i32 0, i32 0 %t89 = load i64, ptr %a39 %t90 = add i64 %t89, 1 %t91 = load { ptr, i64, i64 }, ptr %t88 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 - br i1 %t93, label %range1271, label %inrange1272 -range1271: + br i1 %t93, label %range1275, label %inrange1276 +range1275: call void @finch_panic_index(ptr @.str.698, i64 188, i64 %t90, i64 %t92) unreachable -inrange1272: +inrange1276: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds %S.lexer.Token, ptr %t94, i64 %t90 %t96 = getelementptr inbounds %S.lexer.Token, ptr %t95, i32 0, i32 0 @@ -16856,98 +16882,98 @@ inrange1272: store { ptr, i64, i64 } { ptr @.str.699, i64 1, i64 0 }, ptr %a99 %t100 = call i32 @finch_str_eq(ptr %a98, ptr %a99) %t101 = icmp ne i32 %t100, 0 - br label %logic.rend1273 -logic.rend1273: - br label %logic.end1268 -logic.end1268: - %t102 = phi i1 [ false, %logic.from1266 ], [ %t101, %logic.rend1273 ] - br label %logic.from1274 -logic.from1274: - br i1 %t102, label %logic.rhs1275, label %logic.end1276 -logic.rhs1275: + br label %logic.rend1277 +logic.rend1277: + br label %logic.end1272 +logic.end1272: + %t102 = phi i1 [ false, %logic.from1270 ], [ %t101, %logic.rend1277 ] + br label %logic.from1278 +logic.from1278: + br i1 %t102, label %logic.rhs1279, label %logic.end1280 +logic.rhs1279: %t103 = load ptr, ptr %a1 %t104 = icmp eq ptr %t103, null - br i1 %t104, label %panic1277, label %ok1278 -panic1277: + br i1 %t104, label %panic1281, label %ok1282 +panic1281: call void @finch_panic(ptr @.str.700, i64 188, ptr @.str.701) unreachable -ok1278: +ok1282: %t105 = getelementptr inbounds %S.parser.Parser, ptr %t103, i32 0, i32 0 %t106 = load i64, ptr %a39 %t107 = add i64 %t106, 1 %t108 = load { ptr, i64, i64 }, ptr %t105 %t109 = extractvalue { ptr, i64, i64 } %t108, 1 %t110 = icmp uge i64 %t107, %t109 - br i1 %t110, label %range1279, label %inrange1280 -range1279: + br i1 %t110, label %range1283, label %inrange1284 +range1283: call void @finch_panic_index(ptr @.str.702, i64 188, i64 %t107, i64 %t109) unreachable -inrange1280: +inrange1284: %t111 = extractvalue { ptr, i64, i64 } %t108, 0 %t112 = getelementptr inbounds %S.lexer.Token, ptr %t111, i64 %t107 %t113 = getelementptr inbounds %S.lexer.Token, ptr %t112, i32 0, i32 4 %t114 = load i1, ptr %t113 %t115 = xor i1 %t114, true - br label %logic.rend1281 -logic.rend1281: - br label %logic.end1276 -logic.end1276: - %t116 = phi i1 [ false, %logic.from1274 ], [ %t115, %logic.rend1281 ] + br label %logic.rend1285 +logic.rend1285: + br label %logic.end1280 +logic.end1280: + %t116 = phi i1 [ false, %logic.from1278 ], [ %t115, %logic.rend1285 ] call void @finch_str_drop(ptr %a61) ret i1 %t116 -endif1263: - br label %endif1260 -else1259: +endif1267: + br label %endif1264 +else1263: %t117 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t117, ptr %a118 store { ptr, i64, i64 } { ptr @.str.703, i64 3, i64 0 }, ptr %a119 %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) %t121 = icmp ne i32 %t120, 0 - br label %logic.from1282 -logic.from1282: - br i1 %t121, label %logic.end1284, label %logic.rhs1283 -logic.rhs1283: + br label %logic.from1286 +logic.from1286: + br i1 %t121, label %logic.end1288, label %logic.rhs1287 +logic.rhs1287: %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null - br i1 %t123, label %panic1285, label %ok1286 -panic1285: + br i1 %t123, label %panic1289, label %ok1290 +panic1289: call void @finch_panic(ptr @.str.704, i64 190, ptr @.str.705) unreachable -ok1286: +ok1290: %t124 = getelementptr inbounds %S.parser.Parser, ptr %t122, i32 0, i32 0 %t125 = load i64, ptr %a39 %t126 = load { ptr, i64, i64 }, ptr %t124 %t127 = extractvalue { ptr, i64, i64 } %t126, 1 %t128 = icmp uge i64 %t125, %t127 - br i1 %t128, label %range1287, label %inrange1288 -range1287: + br i1 %t128, label %range1291, label %inrange1292 +range1291: call void @finch_panic_index(ptr @.str.706, i64 190, i64 %t125, i64 %t127) unreachable -inrange1288: +inrange1292: %t129 = extractvalue { ptr, i64, i64 } %t126, 0 %t130 = getelementptr inbounds %S.lexer.Token, ptr %t129, i64 %t125 %t131 = getelementptr inbounds %S.lexer.Token, ptr %t130, i32 0, i32 4 %t132 = load i1, ptr %t131 - br label %logic.rend1289 -logic.rend1289: - br label %logic.end1284 -logic.end1284: - %t133 = phi i1 [ true, %logic.from1282 ], [ %t132, %logic.rend1289 ] - br i1 %t133, label %then1290, label %endif1292 -then1290: + br label %logic.rend1293 +logic.rend1293: + br label %logic.end1288 +logic.end1288: + %t133 = phi i1 [ true, %logic.from1286 ], [ %t132, %logic.rend1293 ] + br i1 %t133, label %then1294, label %endif1296 +then1294: call void @finch_str_drop(ptr %a61) ret i1 false -endif1292: - br label %endif1260 -endif1260: - br label %endif1257 -endif1257: +endif1296: + br label %endif1264 +endif1264: + br label %endif1261 +endif1261: %t134 = load i64, ptr %a39 %t135 = add i64 %t134, 1 store i64 %t135, ptr %a39 call void @finch_str_drop(ptr %a61) - br label %while.cond1246 -while.end1248: + br label %while.cond1250 +while.end1252: ret i1 false } @@ -16985,14 +17011,14 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.genericDeclAhead(ptr %t2) - br i1 %t3, label %then1293, label %endif1295 -then1293: + br i1 %t3, label %then1297, label %endif1299 +then1297: ret i1 true -endif1295: +endif1299: %t4 = load ptr, ptr %a1 %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.707, i64 1, i64 0 }) - br i1 %t5, label %then1296, label %endif1298 -then1296: + br i1 %t5, label %then1300, label %endif1302 +then1300: %t6 = load ptr, ptr %a1 %t7 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t6, i64 1) store { ptr, i64, i64 } %t7, ptr %a8 @@ -17002,14 +17028,14 @@ then1296: store { ptr, i64, i64 } %t7, ptr %a12 call void @finch_str_drop(ptr %a12) ret i1 %t11 -endif1298: +endif1302: %t13 = load ptr, ptr %a1 %t14 = call i1 @finch.parser.at(ptr %t13, { ptr, i64, i64 } { ptr @.str.709, i64 5, i64 0 }) %t15 = xor i1 %t14, true - br i1 %t15, label %then1299, label %endif1301 -then1299: + br i1 %t15, label %then1303, label %endif1305 +then1303: ret i1 false -endif1301: +endif1305: %t16 = load ptr, ptr %a1 %t17 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t16, i64 1) store { ptr, i64, i64 } %t17, ptr %a18 @@ -17018,34 +17044,34 @@ endif1301: store { ptr, i64, i64 } { ptr @.str.710, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br i1 %t23, label %then1302, label %endif1304 -then1302: + br i1 %t23, label %then1306, label %endif1308 +then1306: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic1305, label %ok1306 -panic1305: + br i1 %t25, label %panic1309, label %ok1310 +panic1309: call void @finch_panic(ptr @.str.711, i64 210, ptr @.str.712) unreachable -ok1306: +ok1310: %t26 = getelementptr inbounds %S.parser.Parser, ptr %t24, i32 0, i32 0 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic1307, label %ok1308 -panic1307: + br i1 %t28, label %panic1311, label %ok1312 +panic1311: call void @finch_panic(ptr @.str.713, i64 210, ptr @.str.714) unreachable -ok1308: +ok1312: %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = add i64 %t30, 1 %t32 = load { ptr, i64, i64 }, ptr %t26 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range1309, label %inrange1310 -range1309: + br i1 %t34, label %range1313, label %inrange1314 +range1313: call void @finch_panic_index(ptr @.str.715, i64 210, i64 %t31, i64 %t33) unreachable -inrange1310: +inrange1314: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.lexer.Token, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.lexer.Token, ptr %t36, i32 0, i32 4 @@ -17053,7 +17079,7 @@ inrange1310: %t39 = xor i1 %t38, true call void @finch_str_drop(ptr %a18) ret i1 %t39 -endif1304: +endif1308: %t40 = load ptr, ptr %a1 %t41 = call %S.lexer.Token @finch.parser.cur(ptr %t40) %t42 = extractvalue %S.lexer.Token %t41, 1 @@ -17068,10 +17094,10 @@ endif1304: %t50 = icmp ne i32 %t49, 0 store { ptr, i64, i64 } %t45, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %logic.from1311 -logic.from1311: - br i1 %t50, label %logic.end1313, label %logic.rhs1312 -logic.rhs1312: + br label %logic.from1315 +logic.from1315: + br i1 %t50, label %logic.end1317, label %logic.rhs1316 +logic.rhs1316: %t52 = load ptr, ptr %a1 %t53 = call %S.lexer.Token @finch.parser.cur(ptr %t52) %t54 = extractvalue %S.lexer.Token %t53, 1 @@ -17086,39 +17112,39 @@ logic.rhs1312: %t62 = icmp ne i32 %t61, 0 store { ptr, i64, i64 } %t57, ptr %a63 call void @finch_str_drop(ptr %a63) - br label %logic.rend1314 -logic.rend1314: - br label %logic.end1313 -logic.end1313: - %t64 = phi i1 [ true, %logic.from1311 ], [ %t62, %logic.rend1314 ] - br label %logic.from1315 -logic.from1315: - br i1 %t64, label %logic.rhs1316, label %logic.end1317 -logic.rhs1316: + br label %logic.rend1318 +logic.rend1318: + br label %logic.end1317 +logic.end1317: + %t64 = phi i1 [ true, %logic.from1315 ], [ %t62, %logic.rend1318 ] + br label %logic.from1319 +logic.from1319: + br i1 %t64, label %logic.rhs1320, label %logic.end1321 +logic.rhs1320: %t65 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t65, ptr %a66 store { ptr, i64, i64 } { ptr @.str.718, i64 1, i64 0 }, ptr %a67 %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) %t69 = icmp ne i32 %t68, 0 - br label %logic.rend1318 -logic.rend1318: - br label %logic.end1317 -logic.end1317: - %t70 = phi i1 [ false, %logic.from1315 ], [ %t69, %logic.rend1318 ] - br i1 %t70, label %then1319, label %endif1321 -then1319: + br label %logic.rend1322 +logic.rend1322: + br label %logic.end1321 +logic.end1321: + %t70 = phi i1 [ false, %logic.from1319 ], [ %t69, %logic.rend1322 ] + br i1 %t70, label %then1323, label %endif1325 +then1323: call void @finch_str_drop(ptr %a18) ret i1 true -endif1321: +endif1325: %t71 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t71, ptr %a72 store { ptr, i64, i64 } { ptr @.str.719, i64 1, i64 0 }, ptr %a73 %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) %t75 = icmp ne i32 %t74, 0 - br label %logic.from1322 -logic.from1322: - br i1 %t75, label %logic.rhs1323, label %logic.end1324 -logic.rhs1323: + br label %logic.from1326 +logic.from1326: + br i1 %t75, label %logic.rhs1327, label %logic.end1328 +logic.rhs1327: %t76 = load ptr, ptr %a1 %t77 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t76, i64 2) store { ptr, i64, i64 } %t77, ptr %a78 @@ -17127,15 +17153,15 @@ logic.rhs1323: %t81 = icmp ne i32 %t80, 0 store { ptr, i64, i64 } %t77, ptr %a82 call void @finch_str_drop(ptr %a82) - br label %logic.rend1325 -logic.rend1325: - br label %logic.end1324 -logic.end1324: - %t83 = phi i1 [ false, %logic.from1322 ], [ %t81, %logic.rend1325 ] - br label %logic.from1326 -logic.from1326: - br i1 %t83, label %logic.rhs1327, label %logic.end1328 -logic.rhs1327: + br label %logic.rend1329 +logic.rend1329: + br label %logic.end1328 +logic.end1328: + %t83 = phi i1 [ false, %logic.from1326 ], [ %t81, %logic.rend1329 ] + br label %logic.from1330 +logic.from1330: + br i1 %t83, label %logic.rhs1331, label %logic.end1332 +logic.rhs1331: %t84 = load ptr, ptr %a1 %t85 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t84, i64 3) store { ptr, i64, i64 } %t85, ptr %a86 @@ -17144,51 +17170,51 @@ logic.rhs1327: %t89 = icmp ne i32 %t88, 0 store { ptr, i64, i64 } %t85, ptr %a90 call void @finch_str_drop(ptr %a90) - br label %logic.rend1329 -logic.rend1329: - br label %logic.end1328 -logic.end1328: - %t91 = phi i1 [ false, %logic.from1326 ], [ %t89, %logic.rend1329 ] - br label %logic.from1330 -logic.from1330: - br i1 %t91, label %logic.rhs1331, label %logic.end1332 -logic.rhs1331: + br label %logic.rend1333 +logic.rend1333: + br label %logic.end1332 +logic.end1332: + %t91 = phi i1 [ false, %logic.from1330 ], [ %t89, %logic.rend1333 ] + br label %logic.from1334 +logic.from1334: + br i1 %t91, label %logic.rhs1335, label %logic.end1336 +logic.rhs1335: %t92 = load ptr, ptr %a1 %t93 = icmp eq ptr %t92, null - br i1 %t93, label %panic1333, label %ok1334 -panic1333: + br i1 %t93, label %panic1337, label %ok1338 +panic1337: call void @finch_panic(ptr @.str.722, i64 215, ptr @.str.723) unreachable -ok1334: +ok1338: %t94 = getelementptr inbounds %S.parser.Parser, ptr %t92, i32 0, i32 0 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic1335, label %ok1336 -panic1335: + br i1 %t96, label %panic1339, label %ok1340 +panic1339: call void @finch_panic(ptr @.str.724, i64 215, ptr @.str.725) unreachable -ok1336: +ok1340: %t97 = getelementptr inbounds %S.parser.Parser, ptr %t95, i32 0, i32 1 %t98 = load i64, ptr %t97 %t99 = add i64 %t98, 3 %t100 = load { ptr, i64, i64 }, ptr %t94 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 %t99, %t101 - br i1 %t102, label %range1337, label %inrange1338 -range1337: + br i1 %t102, label %range1341, label %inrange1342 +range1341: call void @finch_panic_index(ptr @.str.726, i64 215, i64 %t99, i64 %t101) unreachable -inrange1338: +inrange1342: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds %S.lexer.Token, ptr %t103, i64 %t99 %t105 = getelementptr inbounds %S.lexer.Token, ptr %t104, i32 0, i32 4 %t106 = load i1, ptr %t105 %t107 = xor i1 %t106, true - br label %logic.rend1339 -logic.rend1339: - br label %logic.end1332 -logic.end1332: - %t108 = phi i1 [ false, %logic.from1330 ], [ %t107, %logic.rend1339 ] + br label %logic.rend1343 +logic.rend1343: + br label %logic.end1336 +logic.end1336: + %t108 = phi i1 [ false, %logic.from1334 ], [ %t107, %logic.rend1343 ] call void @finch_str_drop(ptr %a18) ret i1 %t108 } @@ -17211,35 +17237,35 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.727, i64 1, i64 0 }) - br label %logic.from1340 -logic.from1340: - br i1 %t3, label %logic.end1342, label %logic.rhs1341 -logic.rhs1341: - %t4 = load ptr, ptr %a1 - %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.728, i64 3, i64 0 }) - br label %logic.rend1343 -logic.rend1343: - br label %logic.end1342 -logic.end1342: - %t6 = phi i1 [ true, %logic.from1340 ], [ %t5, %logic.rend1343 ] br label %logic.from1344 logic.from1344: - br i1 %t6, label %logic.end1346, label %logic.rhs1345 + br i1 %t3, label %logic.end1346, label %logic.rhs1345 logic.rhs1345: + %t4 = load ptr, ptr %a1 + %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.728, i64 3, i64 0 }) + br label %logic.rend1347 +logic.rend1347: + br label %logic.end1346 +logic.end1346: + %t6 = phi i1 [ true, %logic.from1344 ], [ %t5, %logic.rend1347 ] + br label %logic.from1348 +logic.from1348: + br i1 %t6, label %logic.end1350, label %logic.rhs1349 +logic.rhs1349: %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.cur(ptr %t7) %t9 = extractvalue %S.lexer.Token %t8, 4 store %S.lexer.Token %t8, ptr %a10 call void @finch.drop.S_lexer_Token(ptr %a10) - br label %logic.rend1347 -logic.rend1347: - br label %logic.end1346 -logic.end1346: - %t11 = phi i1 [ true, %logic.from1344 ], [ %t9, %logic.rend1347 ] - br i1 %t11, label %then1348, label %endif1350 -then1348: + br label %logic.rend1351 +logic.rend1351: + br label %logic.end1350 +logic.end1350: + %t11 = phi i1 [ true, %logic.from1348 ], [ %t9, %logic.rend1351 ] + br i1 %t11, label %then1352, label %endif1354 +then1352: ret void -endif1350: +endif1354: %t12 = load ptr, ptr %a1 %t13 = load ptr, ptr %a1 %t14 = call %S.lexer.Token @finch.parser.cur(ptr %t13) @@ -17329,33 +17355,33 @@ entry: %a171 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store %S.ast.Program zeroinitializer, ptr %a2 - br label %while.cond1351 -while.cond1351: + br label %while.cond1355 +while.cond1355: %t3 = load ptr, ptr %a1 %t4 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } { ptr @.str.731, i64 3, i64 0 }) %t5 = xor i1 %t4, true - br i1 %t5, label %while.body1352, label %while.end1353 -while.body1352: + br i1 %t5, label %while.body1356, label %while.end1357 +while.body1356: %t6 = load ptr, ptr %a1 %t7 = call i1 @finch.parser.at(ptr %t6, { ptr, i64, i64 } { ptr @.str.732, i64 6, i64 0 }) - br i1 %t7, label %then1354, label %else1355 -then1354: + br i1 %t7, label %then1358, label %else1359 +then1358: %t8 = load ptr, ptr %a1 %t9 = call %S.lexer.Token @finch.parser.next(ptr %t8) store %S.lexer.Token %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.733, i64 6, i64 0 }) - br i1 %t12, label %then1357, label %else1358 -then1357: + br i1 %t12, label %then1361, label %else1362 +then1361: %t13 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 4 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic1360, label %ok1361 -panic1360: + br i1 %t16, label %panic1364, label %ok1365 +panic1364: call void @finch_panic(ptr @.str.734, i64 233, ptr @.str.735) unreachable -ok1361: +ok1365: %t17 = getelementptr inbounds %S.parser.Parser, ptr %t15, i32 0, i32 4 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a20 @@ -17416,18 +17442,18 @@ ok1361: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i64 %t61 store { ptr, i64, i64 } %t59, ptr %t64 store i64 %t62, ptr %t53 - br label %endif1359 -else1358: + br label %endif1363 +else1362: %t65 = load ptr, ptr %a1 %t66 = call i1 @finch.parser.at(ptr %t65, { ptr, i64, i64 } { ptr @.str.738, i64 5, i64 0 }) %t67 = xor i1 %t66, true - br i1 %t67, label %then1362, label %endif1364 -then1362: + br i1 %t67, label %then1366, label %endif1368 +then1366: %t68 = load ptr, ptr %a1 %t69 = load %S.lexer.Token, ptr %a10 call void @finch.parser.fail(ptr %t68, %S.lexer.Token %t69, { ptr, i64, i64 } { ptr @.str.739, i64 51, i64 0 }) - br label %endif1364 -endif1364: + br label %endif1368 +endif1368: %t70 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 2 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load ptr, ptr %a1 @@ -17445,15 +17471,15 @@ endif1364: %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i64 %t79 store { ptr, i64, i64 } %t77, ptr %t82 store i64 %t80, ptr %t71 - br label %endif1359 -endif1359: + br label %endif1363 +endif1363: call void @finch.drop.S_lexer_Token(ptr %a10) - br label %endif1356 -else1355: + br label %endif1360 +else1359: %t83 = load ptr, ptr %a1 %t84 = call i1 @finch.parser.at(ptr %t83, { ptr, i64, i64 } { ptr @.str.740, i64 4, i64 0 }) - br i1 %t84, label %then1365, label %else1366 -then1365: + br i1 %t84, label %then1369, label %else1370 +then1369: %t85 = load ptr, ptr %a1 %t86 = call %S.lexer.Token @finch.parser.next(ptr %t85) store %S.lexer.Token %t86, ptr %a87 @@ -17471,86 +17497,86 @@ then1365: store { ptr, i64, i64 } { ptr @.str.744, i64 2, i64 0 }, ptr %a99 %t100 = call i32 @finch_str_ends(ptr %a97, ptr %a99) %t101 = icmp ne i32 %t100, 0 - br label %logic.from1368 -logic.from1368: - br i1 %t101, label %logic.end1370, label %logic.rhs1369 -logic.rhs1369: + br label %logic.from1372 +logic.from1372: + br i1 %t101, label %logic.end1374, label %logic.rhs1373 +logic.rhs1373: %t102 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.746, i64 2, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_ends(ptr %a103, ptr %a105) %t107 = icmp ne i32 %t106, 0 - br label %logic.rend1371 -logic.rend1371: - br label %logic.end1370 -logic.end1370: - %t108 = phi i1 [ true, %logic.from1368 ], [ %t107, %logic.rend1371 ] - br label %logic.from1372 -logic.from1372: - br i1 %t108, label %logic.end1374, label %logic.rhs1373 -logic.rhs1373: + br label %logic.rend1375 +logic.rend1375: + br label %logic.end1374 +logic.end1374: + %t108 = phi i1 [ true, %logic.from1372 ], [ %t107, %logic.rend1375 ] + br label %logic.from1376 +logic.from1376: + br i1 %t108, label %logic.end1378, label %logic.rhs1377 +logic.rhs1377: %t109 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.748, i64 2, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_ends(ptr %a110, ptr %a112) %t114 = icmp ne i32 %t113, 0 - br label %logic.rend1375 -logic.rend1375: - br label %logic.end1374 -logic.end1374: - %t115 = phi i1 [ true, %logic.from1372 ], [ %t114, %logic.rend1375 ] + br label %logic.rend1379 +logic.rend1379: + br label %logic.end1378 +logic.end1378: + %t115 = phi i1 [ true, %logic.from1376 ], [ %t114, %logic.rend1379 ] store i1 %t115, ptr %a116 %t117 = load i1, ptr %a116 %t118 = xor i1 %t117, true - br label %logic.from1376 -logic.from1376: - br i1 %t118, label %logic.rhs1377, label %logic.end1378 -logic.rhs1377: + br label %logic.from1380 +logic.from1380: + br i1 %t118, label %logic.rhs1381, label %logic.end1382 +logic.rhs1381: %t119 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.750, i64 3, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_starts(ptr %a120, ptr %a122) %t124 = icmp ne i32 %t123, 0 - br label %logic.from1379 -logic.from1379: - br i1 %t124, label %logic.end1381, label %logic.rhs1380 -logic.rhs1380: + br label %logic.from1383 +logic.from1383: + br i1 %t124, label %logic.end1385, label %logic.rhs1384 +logic.rhs1384: %t125 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t125, ptr %a126 store { ptr, i64, i64 } { ptr @.str.752, i64 3, i64 0 }, ptr %a128 %t129 = call i64 @finch_str_find(ptr %a126, ptr %a128) %t130 = icmp sge i64 %t129, 0 - br label %logic.rend1382 -logic.rend1382: - br label %logic.end1381 -logic.end1381: - %t131 = phi i1 [ true, %logic.from1379 ], [ %t130, %logic.rend1382 ] - br label %logic.from1383 -logic.from1383: - br i1 %t131, label %logic.end1385, label %logic.rhs1384 -logic.rhs1384: + br label %logic.rend1386 +logic.rend1386: + br label %logic.end1385 +logic.end1385: + %t131 = phi i1 [ true, %logic.from1383 ], [ %t130, %logic.rend1386 ] + br label %logic.from1387 +logic.from1387: + br i1 %t131, label %logic.end1389, label %logic.rhs1388 +logic.rhs1388: %t132 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t132, ptr %a133 store { ptr, i64, i64 } { ptr @.str.754, i64 1, i64 0 }, ptr %a135 %t136 = call i64 @finch_str_find(ptr %a133, ptr %a135) %t137 = icmp sge i64 %t136, 0 - br label %logic.rend1386 -logic.rend1386: - br label %logic.end1385 -logic.end1385: - %t138 = phi i1 [ true, %logic.from1383 ], [ %t137, %logic.rend1386 ] - br label %logic.rend1387 -logic.rend1387: - br label %logic.end1378 -logic.end1378: - %t139 = phi i1 [ false, %logic.from1376 ], [ %t138, %logic.rend1387 ] - br i1 %t139, label %then1388, label %endif1390 -then1388: + br label %logic.rend1390 +logic.rend1390: + br label %logic.end1389 +logic.end1389: + %t138 = phi i1 [ true, %logic.from1387 ], [ %t137, %logic.rend1390 ] + br label %logic.rend1391 +logic.rend1391: + br label %logic.end1382 +logic.end1382: + %t139 = phi i1 [ false, %logic.from1380 ], [ %t138, %logic.rend1391 ] + br i1 %t139, label %then1392, label %endif1394 +then1392: %t140 = load ptr, ptr %a1 %t141 = load %S.lexer.Token, ptr %a87 call void @finch.parser.fail(ptr %t140, %S.lexer.Token %t141, { ptr, i64, i64 } { ptr @.str.755, i64 65, i64 0 }) - br label %endif1390 -endif1390: + br label %endif1394 +endif1394: %t142 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 5 %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i32 0, i32 1 %t144 = load { ptr, i64, i64 }, ptr %a95 @@ -17566,12 +17592,12 @@ endif1390: store i64 %t149, ptr %t143 call void @finch_str_drop(ptr %a95) call void @finch.drop.S_lexer_Token(ptr %a87) - br label %endif1367 -else1366: + br label %endif1371 +else1370: %t152 = load ptr, ptr %a1 %t153 = call i1 @finch.parser.at(ptr %t152, { ptr, i64, i64 } { ptr @.str.756, i64 6, i64 0 }) - br i1 %t153, label %then1391, label %else1392 -then1391: + br i1 %t153, label %then1395, label %else1396 +then1395: %t154 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 %t156 = load ptr, ptr %a1 @@ -17583,12 +17609,12 @@ then1391: %t161 = getelementptr inbounds %S.ast.Node, ptr %t160, i64 %t158 store %S.ast.Node %t157, ptr %t161 store i64 %t159, ptr %t155 - br label %endif1393 -else1392: + br label %endif1397 +else1396: %t162 = load ptr, ptr %a1 %t163 = call i1 @finch.parser.at(ptr %t162, { ptr, i64, i64 } { ptr @.str.757, i64 4, i64 0 }) - br i1 %t163, label %then1394, label %else1395 -then1394: + br i1 %t163, label %then1398, label %else1399 +then1398: %t164 = load ptr, ptr %a1 %t165 = call %S.ast.Node @finch.parser.parseEnum(ptr %t164) store %S.ast.Node %t165, ptr %a166 @@ -17607,8 +17633,8 @@ then1394: store i64 %t174, ptr %t168 %t177 = getelementptr inbounds %S.ast.Node, ptr %a166, i32 0, i32 6 %t178 = load i1, ptr %t177 - br i1 %t178, label %then1397, label %endif1399 -then1397: + br i1 %t178, label %then1401, label %endif1403 +then1401: %t179 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t181 = load %S.ast.Node, ptr %a166 @@ -17620,11 +17646,11 @@ then1397: %t186 = getelementptr inbounds %S.ast.Node, ptr %t185, i64 %t183 store %S.ast.Node %t182, ptr %t186 store i64 %t184, ptr %t180 - br label %endif1399 -endif1399: + br label %endif1403 +endif1403: call void @finch.drop.S_ast_Node(ptr %a166) - br label %endif1396 -else1395: + br label %endif1400 +else1399: %t187 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 8 %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 %t189 = load ptr, ptr %a1 @@ -17636,16 +17662,16 @@ else1395: %t194 = getelementptr inbounds %S.ast.Node, ptr %t193, i64 %t191 store %S.ast.Node %t190, ptr %t194 store i64 %t192, ptr %t188 - br label %endif1396 -endif1396: - br label %endif1393 -endif1393: - br label %endif1367 -endif1367: - br label %endif1356 -endif1356: - br label %while.cond1351 -while.end1353: + br label %endif1400 +endif1400: + br label %endif1397 +endif1397: + br label %endif1371 +endif1371: + br label %endif1360 +endif1360: + br label %while.cond1355 +while.end1357: %t195 = load %S.ast.Program, ptr %a2 ret %S.ast.Program %t195 } @@ -17755,25 +17781,25 @@ entry: %t19 = call %S.lexer.Token @finch.parser.expect(ptr %t18, { ptr, i64, i64 } { ptr @.str.763, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.764, i64 3, i64 0 }) store %S.lexer.Token %t19, ptr %a20 call void @finch.drop.S_lexer_Token(ptr %a20) - br label %while.cond1400 -while.cond1400: + br label %while.cond1404 +while.cond1404: %t21 = load ptr, ptr %a1 %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.765, i64 1, i64 0 }) %t23 = xor i1 %t22, true - br i1 %t23, label %while.body1401, label %while.end1402 -while.body1401: + br i1 %t23, label %while.body1405, label %while.end1406 +while.body1405: %t24 = load ptr, ptr %a1 %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.766, i64 3, i64 0 }) - br i1 %t25, label %then1403, label %endif1405 -then1403: + br i1 %t25, label %then1407, label %endif1409 +then1407: %t26 = load ptr, ptr %a1 %t27 = load ptr, ptr %a1 %t28 = call %S.lexer.Token @finch.parser.cur(ptr %t27) call void @finch.parser.fail(ptr %t26, %S.lexer.Token %t28, { ptr, i64, i64 } { ptr @.str.767, i64 37, i64 0 }) store %S.lexer.Token %t28, ptr %a29 call void @finch.drop.S_lexer_Token(ptr %a29) - br label %endif1405 -endif1405: + br label %endif1409 +endif1409: %t30 = load ptr, ptr %a1 %t31 = call %S.ast.Node @finch.parser.node(ptr %t30, { ptr, i64, i64 } { ptr @.str.768, i64 7, i64 0 }) store %S.ast.Node %t31, ptr %a32 @@ -17792,17 +17818,17 @@ endif1405: call void @finch_str_drop(ptr %a42) %t43 = load ptr, ptr %a1 %t44 = call i1 @finch.parser.accept(ptr %t43, { ptr, i64, i64 } { ptr @.str.771, i64 1, i64 0 }) - br i1 %t44, label %then1406, label %endif1408 -then1406: + br i1 %t44, label %then1410, label %endif1412 +then1410: %t45 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 store i1 true, ptr %t45 - br label %while.cond1409 -while.cond1409: + br label %while.cond1413 +while.cond1413: %t46 = load ptr, ptr %a1 %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.772, i64 1, i64 0 }) %t48 = xor i1 %t47, true - br i1 %t48, label %while.body1410, label %while.end1411 -while.body1410: + br i1 %t48, label %while.body1414, label %while.end1415 +while.body1414: %t49 = load ptr, ptr %a1 %t50 = call %S.ast.Node @finch.parser.node(ptr %t49, { ptr, i64, i64 } { ptr @.str.773, i64 5, i64 0 }) store %S.ast.Node %t50, ptr %a51 @@ -17829,14 +17855,14 @@ while.body1410: %t67 = load ptr, ptr %a1 %t68 = call i1 @finch.parser.accept(ptr %t67, { ptr, i64, i64 } { ptr @.str.774, i64 1, i64 0 }) %t69 = xor i1 %t68, true - br i1 %t69, label %then1412, label %endif1414 -then1412: + br i1 %t69, label %then1416, label %endif1418 +then1416: call void @finch.drop.S_ast_Node(ptr %a51) - br label %while.end1411 -endif1414: + br label %while.end1415 +endif1418: call void @finch.drop.S_ast_Node(ptr %a51) - br label %while.cond1409 -while.end1411: + br label %while.cond1413 +while.end1415: %t70 = load ptr, ptr %a1 %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.775, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.776, i64 35, i64 0 }) store %S.lexer.Token %t71, ptr %a72 @@ -17845,8 +17871,8 @@ while.end1411: %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = icmp eq i64 %t75, 0 - br i1 %t76, label %then1415, label %endif1417 -then1415: + br i1 %t76, label %then1419, label %endif1421 +then1419: %t77 = load ptr, ptr %a1 %t78 = load ptr, ptr %a1 %t79 = call %S.lexer.Token @finch.parser.cur(ptr %t78) @@ -17881,37 +17907,37 @@ then1415: call void @finch.drop.S_lexer_Token(ptr %a103) store { ptr, i64, i64 } %t102, ptr %a104 call void @finch_str_drop(ptr %a104) - br label %endif1417 -endif1417: - br label %endif1408 -endif1408: + br label %endif1421 +endif1421: + br label %endif1412 +endif1412: %t105 = load ptr, ptr %a1 %t106 = call i1 @finch.parser.accept(ptr %t105, { ptr, i64, i64 } { ptr @.str.780, i64 1, i64 0 }) - br i1 %t106, label %then1418, label %endif1420 -then1418: + br i1 %t106, label %then1422, label %endif1424 +then1422: %t107 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 %t108 = load i1, ptr %t107 - br i1 %t108, label %then1421, label %endif1423 -then1421: + br i1 %t108, label %then1425, label %endif1427 +then1425: %t109 = load ptr, ptr %a1 %t110 = load ptr, ptr %a1 %t111 = call %S.lexer.Token @finch.parser.cur(ptr %t110) call void @finch.parser.fail(ptr %t109, %S.lexer.Token %t111, { ptr, i64, i64 } { ptr @.str.781, i64 52, i64 0 }) store %S.lexer.Token %t111, ptr %a112 call void @finch.drop.S_lexer_Token(ptr %a112) - br label %endif1423 -endif1423: + br label %endif1427 +endif1427: store { ptr, i64, i64 } { ptr @.str.782, i64 0, i64 0 }, ptr %a113 %t114 = load ptr, ptr %a1 %t115 = call i1 @finch.parser.accept(ptr %t114, { ptr, i64, i64 } { ptr @.str.783, i64 1, i64 0 }) - br i1 %t115, label %then1424, label %endif1426 -then1424: + br i1 %t115, label %then1428, label %endif1430 +then1428: %t116 = load { ptr, i64, i64 }, ptr %a113 store { ptr, i64, i64 } { ptr @.str.784, i64 1, i64 0 }, ptr %a113 store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) - br label %endif1426 -endif1426: + br label %endif1430 +endif1430: %t118 = load { ptr, i64, i64 }, ptr %a113 %t119 = load ptr, ptr %a1 %t120 = call %S.lexer.Token @finch.parser.expect(ptr %t119, { ptr, i64, i64 } { ptr @.str.785, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.786, i64 30, i64 0 }) @@ -17933,8 +17959,8 @@ endif1426: store { ptr, i64, i64 } %t132, ptr %a133 call void @finch_str_drop(ptr %a133) call void @finch_str_drop(ptr %a113) - br label %endif1420 -endif1420: + br label %endif1424 +endif1424: %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 %t136 = load %S.ast.Node, ptr %a32 @@ -17951,15 +17977,15 @@ endif1420: %t144 = load ptr, ptr %a1 %t145 = call i1 @finch.parser.accept(ptr %t144, { ptr, i64, i64 } { ptr @.str.787, i64 1, i64 0 }) %t146 = xor i1 %t145, true - br i1 %t146, label %then1427, label %endif1429 -then1427: + br i1 %t146, label %then1431, label %endif1433 +then1431: %t147 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t147) - br label %endif1429 -endif1429: + br label %endif1433 +endif1433: call void @finch.drop.S_ast_Node(ptr %a32) - br label %while.cond1400 -while.end1402: + br label %while.cond1404 +while.end1406: %t148 = load ptr, ptr %a1 %t149 = call %S.lexer.Token @finch.parser.next(ptr %t148) store %S.lexer.Token %t149, ptr %a150 @@ -17968,8 +17994,8 @@ while.end1402: %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load i64, ptr %t152 %t154 = icmp eq i64 %t153, 0 - br i1 %t154, label %then1430, label %endif1432 -then1430: + br i1 %t154, label %then1434, label %endif1436 +then1434: %t155 = load ptr, ptr %a1 %t156 = load ptr, ptr %a1 %t157 = call %S.lexer.Token @finch.parser.cur(ptr %t156) @@ -17990,22 +18016,22 @@ then1430: call void @finch.drop.S_lexer_Token(ptr %a169) store { ptr, i64, i64 } %t168, ptr %a170 call void @finch_str_drop(ptr %a170) - br label %endif1432 -endif1432: + br label %endif1436 +endif1436: %t171 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 %t172 = load i1, ptr %t171 - br i1 %t172, label %then1433, label %endif1435 -then1433: + br i1 %t172, label %then1437, label %endif1439 +then1437: %t173 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 store i64 0, ptr %a174 - br label %each.cond1436 -each.cond1436: + br label %each.cond1440 +each.cond1440: %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 %t176 = load i64, ptr %t175 %t177 = load i64, ptr %a174 %t178 = icmp slt i64 %t177, %t176 - br i1 %t178, label %each.body1437, label %each.end1439 -each.body1437: + br i1 %t178, label %each.body1441, label %each.end1443 +each.body1441: %t179 = load ptr, ptr %t173 %t180 = getelementptr inbounds %S.ast.Node, ptr %t179, i64 %t177 %t181 = load %S.ast.Node, ptr %t180 @@ -18014,8 +18040,8 @@ each.body1437: %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 %t185 = load i64, ptr %t184 %t186 = icmp sgt i64 %t185, 0 - br i1 %t186, label %then1440, label %endif1442 -then1440: + br i1 %t186, label %then1444, label %endif1446 +then1444: %t187 = load ptr, ptr %a1 %t188 = load ptr, ptr %a1 %t189 = call %S.lexer.Token @finch.parser.cur(ptr %t188) @@ -18050,17 +18076,17 @@ then1440: call void @finch.drop.S_lexer_Token(ptr %a213) store { ptr, i64, i64 } %t212, ptr %a214 call void @finch_str_drop(ptr %a214) - br label %endif1442 -endif1442: - br label %each.step1438 -each.step1438: + br label %endif1446 +endif1446: + br label %each.step1442 +each.step1442: %t215 = load i64, ptr %a174 %t216 = add i64 %t215, 1 store i64 %t216, ptr %a174 - br label %each.cond1436 -each.end1439: - br label %endif1435 -endif1435: + br label %each.cond1440 +each.end1443: + br label %endif1439 +endif1439: %t217 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t217 } @@ -18144,14 +18170,14 @@ entry: store i64 %t42, ptr %t36 %t45 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 store i64 0, ptr %a46 - br label %each.cond1443 -each.cond1443: + br label %each.cond1447 +each.cond1447: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 %t48 = load i64, ptr %t47 %t49 = load i64, ptr %a46 %t50 = icmp slt i64 %t49, %t48 - br i1 %t50, label %each.body1444, label %each.end1446 -each.body1444: + br i1 %t50, label %each.body1448, label %each.end1450 +each.body1448: %t51 = load ptr, ptr %t45 %t52 = getelementptr inbounds %S.ast.Node, ptr %t51, i64 %t49 %t53 = load %S.ast.Node, ptr %t52 @@ -18160,12 +18186,12 @@ each.body1444: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 %t57 = load i64, ptr %t56 store i64 0, ptr %a58 - br label %for.cond1447 -for.cond1447: + br label %for.cond1451 +for.cond1451: %t59 = load i64, ptr %a58 %t60 = icmp slt i64 %t59, %t57 - br i1 %t60, label %for.body1448, label %for.end1450 -for.body1448: + br i1 %t60, label %for.body1452, label %for.end1454 +for.body1452: %t61 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.797, i64 5, i64 0 }, 0 %t62 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 1 %t63 = load { ptr, i64, i64 }, ptr %t62 @@ -18200,11 +18226,11 @@ for.body1448: %t90 = load { ptr, i64, i64 }, ptr %t88 %t91 = extractvalue { ptr, i64, i64 } %t90, 1 %t92 = icmp uge i64 %t89, %t91 - br i1 %t92, label %range1451, label %inrange1452 -range1451: + br i1 %t92, label %range1455, label %inrange1456 +range1455: call void @finch_panic_index(ptr @.str.799, i64 333, i64 %t89, i64 %t91) unreachable -inrange1452: +inrange1456: %t93 = extractvalue { ptr, i64, i64 } %t90, 0 %t94 = getelementptr inbounds %S.ast.Node, ptr %t93, i64 %t89 %t95 = getelementptr inbounds %S.ast.Node, ptr %t94, i32 0, i32 5 @@ -18231,20 +18257,20 @@ inrange1452: store %S.ast.Node %t108, ptr %t112 store i64 %t110, ptr %t104 call void @finch.drop.S_ast_Node(ptr %a87) - br label %for.step1449 -for.step1449: + br label %for.step1453 +for.step1453: %t113 = load i64, ptr %a58 %t114 = add i64 %t113, 1 store i64 %t114, ptr %a58 - br label %for.cond1447 -for.end1450: - br label %each.step1445 -each.step1445: + br label %for.cond1451 +for.end1454: + br label %each.step1449 +each.step1449: %t115 = load i64, ptr %a46 %t116 = add i64 %t115, 1 store i64 %t116, ptr %a46 - br label %each.cond1443 -each.end1446: + br label %each.cond1447 +each.end1450: %t117 = load %S.ast.Node, ptr %a18 call void @finch.drop.S_ast_Node(ptr %a30) ret %S.ast.Node %t117 @@ -18297,42 +18323,42 @@ entry: call void @finch.drop.S_lexer_Token(ptr %a21) %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic1453, label %ok1454 -panic1453: + br i1 %t23, label %panic1457, label %ok1458 +panic1457: call void @finch_panic(ptr @.str.805, i64 348, ptr @.str.806) unreachable -ok1454: +ok1458: %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 2 %t25 = load i64, ptr %t24 store i64 %t25, ptr %a26 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic1455, label %ok1456 -panic1455: + br i1 %t28, label %panic1459, label %ok1460 +panic1459: call void @finch_panic(ptr @.str.807, i64 349, ptr @.str.808) unreachable -ok1456: +ok1460: %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 2 store i64 0, ptr %t29 - br label %while.cond1457 -while.cond1457: + br label %while.cond1461 +while.cond1461: %t30 = load ptr, ptr %a1 %t31 = call i1 @finch.parser.at(ptr %t30, { ptr, i64, i64 } { ptr @.str.809, i64 1, i64 0 }) %t32 = xor i1 %t31, true - br i1 %t32, label %while.body1458, label %while.end1459 -while.body1458: + br i1 %t32, label %while.body1462, label %while.end1463 +while.body1462: %t33 = load ptr, ptr %a1 %t34 = call i1 @finch.parser.at(ptr %t33, { ptr, i64, i64 } { ptr @.str.810, i64 3, i64 0 }) - br i1 %t34, label %then1460, label %endif1462 -then1460: + br i1 %t34, label %then1464, label %endif1466 +then1464: %t35 = load ptr, ptr %a1 %t36 = load ptr, ptr %a1 %t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36) call void @finch.parser.fail(ptr %t35, %S.lexer.Token %t37, { ptr, i64, i64 } { ptr @.str.811, i64 37, i64 0 }) store %S.lexer.Token %t37, ptr %a38 call void @finch.drop.S_lexer_Token(ptr %a38) - br label %endif1462 -endif1462: + br label %endif1466 +endif1466: %t39 = load ptr, ptr %a1 %t40 = call %S.ast.Node @finch.parser.node(ptr %t39, { ptr, i64, i64 } { ptr @.str.812, i64 3, i64 0 }) store %S.ast.Node %t40, ptr %a41 @@ -18341,16 +18367,16 @@ endif1462: store %S.ast.Node %t43, ptr %a44 %t45 = load ptr, ptr %a1 %t46 = call i1 @finch.parser.accept(ptr %t45, { ptr, i64, i64 } { ptr @.str.814, i64 4, i64 0 }) - br i1 %t46, label %then1463, label %else1464 -then1463: + br i1 %t46, label %then1467, label %else1468 +then1467: %t47 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 6 store i1 true, ptr %t47 - br label %endif1465 -else1464: - br label %while.cond1466 -while.cond1466: - br label %while.body1467 -while.body1467: + br label %endif1469 +else1468: + br label %while.cond1470 +while.cond1470: + br label %while.body1471 +while.body1471: %t48 = getelementptr inbounds %S.ast.Node, ptr %a44, i32 0, i32 9 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 %t50 = load ptr, ptr %a1 @@ -18365,14 +18391,14 @@ while.body1467: %t56 = load ptr, ptr %a1 %t57 = call i1 @finch.parser.accept(ptr %t56, { ptr, i64, i64 } { ptr @.str.815, i64 1, i64 0 }) %t58 = xor i1 %t57, true - br i1 %t58, label %then1469, label %endif1471 -then1469: - br label %while.end1468 -endif1471: - br label %while.cond1466 -while.end1468: - br label %endif1465 -endif1465: + br i1 %t58, label %then1473, label %endif1475 +then1473: + br label %while.end1472 +endif1475: + br label %while.cond1470 +while.end1472: + br label %endif1469 +endif1469: %t59 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i32 0, i32 1 %t61 = load %S.ast.Node, ptr %a44 @@ -18392,19 +18418,19 @@ endif1465: call void @finch.drop.S_lexer_Token(ptr %a71) %t72 = load ptr, ptr %a1 %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.818, i64 1, i64 0 }) - br label %logic.from1472 -logic.from1472: - br i1 %t73, label %logic.rhs1473, label %logic.end1474 -logic.rhs1473: + br label %logic.from1476 +logic.from1476: + br i1 %t73, label %logic.rhs1477, label %logic.end1478 +logic.rhs1477: %t74 = load i1, ptr %a2 %t75 = xor i1 %t74, true - br label %logic.rend1475 -logic.rend1475: - br label %logic.end1474 -logic.end1474: - %t76 = phi i1 [ false, %logic.from1472 ], [ %t75, %logic.rend1475 ] - br i1 %t76, label %then1476, label %else1477 -then1476: + br label %logic.rend1479 +logic.rend1479: + br label %logic.end1478 +logic.end1478: + %t76 = phi i1 [ false, %logic.from1476 ], [ %t75, %logic.rend1479 ] + br i1 %t76, label %then1480, label %else1481 +then1480: %t77 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load ptr, ptr %a1 @@ -18416,11 +18442,11 @@ then1476: %t84 = getelementptr inbounds %S.ast.Node, ptr %t83, i64 %t81 store %S.ast.Node %t80, ptr %t84 store i64 %t82, ptr %t78 - br label %endif1478 -else1477: + br label %endif1482 +else1481: %t85 = load i1, ptr %a2 - br i1 %t85, label %then1479, label %else1480 -then1479: + br i1 %t85, label %then1483, label %else1484 +then1483: %t86 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load ptr, ptr %a1 @@ -18432,8 +18458,8 @@ then1479: %t93 = getelementptr inbounds %S.ast.Node, ptr %t92, i64 %t90 store %S.ast.Node %t89, ptr %t93 store i64 %t91, ptr %t87 - br label %endif1481 -else1480: + br label %endif1485 +else1484: %t94 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load ptr, ptr %a1 @@ -18445,10 +18471,10 @@ else1480: %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 store %S.ast.Node %t97, ptr %t101 store i64 %t99, ptr %t95 - br label %endif1481 -endif1481: - br label %endif1478 -endif1478: + br label %endif1485 +endif1485: + br label %endif1482 +endif1482: %t102 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i32 0, i32 1 %t104 = load %S.ast.Node, ptr %a41 @@ -18465,24 +18491,24 @@ endif1478: %t112 = load ptr, ptr %a1 %t113 = call i1 @finch.parser.accept(ptr %t112, { ptr, i64, i64 } { ptr @.str.819, i64 1, i64 0 }) %t114 = xor i1 %t113, true - br i1 %t114, label %then1482, label %endif1484 -then1482: + br i1 %t114, label %then1486, label %endif1488 +then1486: %t115 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t115) - br label %endif1484 -endif1484: + br label %endif1488 +endif1488: call void @finch.drop.S_ast_Node(ptr %a44) call void @finch.drop.S_ast_Node(ptr %a41) - br label %while.cond1457 -while.end1459: + br label %while.cond1461 +while.end1463: %t116 = load i64, ptr %a26 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null - br i1 %t118, label %panic1485, label %ok1486 -panic1485: + br i1 %t118, label %panic1489, label %ok1490 +panic1489: call void @finch_panic(ptr @.str.820, i64 380, ptr @.str.821) unreachable -ok1486: +ok1490: %t119 = getelementptr inbounds %S.parser.Parser, ptr %t117, i32 0, i32 2 store i64 %t116, ptr %t119 %t120 = load ptr, ptr %a1 @@ -18493,16 +18519,16 @@ ok1486: %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i32 0, i32 1 %t125 = load i64, ptr %t124 %t126 = icmp eq i64 %t125, 1 - br i1 %t126, label %then1487, label %endif1489 -then1487: + br i1 %t126, label %then1491, label %endif1493 +then1491: %t127 = load ptr, ptr %a1 %t128 = load ptr, ptr %a1 %t129 = call %S.lexer.Token @finch.parser.cur(ptr %t128) call void @finch.parser.fail(ptr %t127, %S.lexer.Token %t129, { ptr, i64, i64 } { ptr @.str.822, i64 30, i64 0 }) store %S.lexer.Token %t129, ptr %a130 call void @finch.drop.S_lexer_Token(ptr %a130) - br label %endif1489 -endif1489: + br label %endif1493 +endif1493: %t131 = load %S.ast.Node, ptr %a5 ret %S.ast.Node %t131 } @@ -18522,10 +18548,10 @@ entry: %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.823, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.824, i64 3, i64 0 }) store %S.lexer.Token %t4, ptr %a5 call void @finch.drop.S_lexer_Token(ptr %a5) - br label %while.cond1490 -while.cond1490: - br label %while.body1491 -while.body1491: + br label %while.cond1494 +while.cond1494: + br label %while.body1495 +while.body1495: %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.825, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.826, i64 29, i64 0 }) @@ -18545,12 +18571,12 @@ while.body1491: %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.accept(ptr %t18, { ptr, i64, i64 } { ptr @.str.827, i64 1, i64 0 }) %t20 = xor i1 %t19, true - br i1 %t20, label %then1493, label %endif1495 -then1493: - br label %while.end1492 -endif1495: - br label %while.cond1490 -while.end1492: + br i1 %t20, label %then1497, label %endif1499 +then1497: + br label %while.end1496 +endif1499: + br label %while.cond1494 +while.end1496: %t21 = load ptr, ptr %a1 %t22 = call %S.lexer.Token @finch.parser.expect(ptr %t21, { ptr, i64, i64 } { ptr @.str.828, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.829, i64 29, i64 0 }) store %S.lexer.Token %t22, ptr %a23 @@ -18614,8 +18640,8 @@ entry: call void @finch_str_drop(ptr %a17) %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.835, i64 1, i64 0 }) - br i1 %t19, label %then1496, label %endif1498 -then1496: + br i1 %t19, label %then1500, label %endif1502 +then1500: %t20 = load ptr, ptr %a1 %t21 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t20) %t22 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 @@ -18623,39 +18649,39 @@ then1496: store { ptr, i64, i64 } %t21, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 call void @finch.drop.arr_str(ptr %a24) - br label %endif1498 -endif1498: + br label %endif1502 +endif1502: %t25 = load ptr, ptr %a1 %t26 = call %S.lexer.Token @finch.parser.expect(ptr %t25, { ptr, i64, i64 } { ptr @.str.836, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.837, i64 3, i64 0 }) store %S.lexer.Token %t26, ptr %a27 call void @finch.drop.S_lexer_Token(ptr %a27) - br label %while.cond1499 -while.cond1499: + br label %while.cond1503 +while.cond1503: %t28 = load ptr, ptr %a1 %t29 = call i1 @finch.parser.at(ptr %t28, { ptr, i64, i64 } { ptr @.str.838, i64 1, i64 0 }) %t30 = xor i1 %t29, true - br i1 %t30, label %while.body1500, label %while.end1501 -while.body1500: + br i1 %t30, label %while.body1504, label %while.end1505 +while.body1504: %t31 = load ptr, ptr %a1 %t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.839, i64 3, i64 0 }) - br i1 %t32, label %then1502, label %endif1504 -then1502: + br i1 %t32, label %then1506, label %endif1508 +then1506: %t33 = load ptr, ptr %a1 %t34 = load ptr, ptr %a1 %t35 = call %S.lexer.Token @finch.parser.cur(ptr %t34) call void @finch.parser.fail(ptr %t33, %S.lexer.Token %t35, { ptr, i64, i64 } { ptr @.str.840, i64 38, i64 0 }) store %S.lexer.Token %t35, ptr %a36 call void @finch.drop.S_lexer_Token(ptr %a36) - br label %endif1504 -endif1504: + br label %endif1508 +endif1508: %t37 = load ptr, ptr %a1 %t38 = call %S.ast.Node @finch.parser.node(ptr %t37, { ptr, i64, i64 } { ptr @.str.841, i64 5, i64 0 }) store %S.ast.Node %t38, ptr %a39 %t40 = load ptr, ptr %a1 %t41 = call i1 @finch.parser.atDeclaration(ptr %t40) %t42 = xor i1 %t41, true - br i1 %t42, label %then1505, label %endif1507 -then1505: + br i1 %t42, label %then1509, label %endif1511 +then1509: %t43 = load ptr, ptr %a1 %t44 = load ptr, ptr %a1 %t45 = call %S.lexer.Token @finch.parser.cur(ptr %t44) @@ -18681,8 +18707,8 @@ then1505: call void @finch.drop.S_lexer_Token(ptr %a60) store { ptr, i64, i64 } %t59, ptr %a61 call void @finch_str_drop(ptr %a61) - br label %endif1507 -endif1507: + br label %endif1511 +endif1511: %t62 = load ptr, ptr %a1 %t63 = call %S.ast.Type @finch.parser.parseType(ptr %t62) %t64 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 5 @@ -18705,8 +18731,8 @@ endif1507: call void @finch_str_drop(ptr %a76) %t77 = load ptr, ptr %a1 %t78 = call i1 @finch.parser.accept(ptr %t77, { ptr, i64, i64 } { ptr @.str.846, i64 1, i64 0 }) - br i1 %t78, label %then1508, label %endif1510 -then1508: + br i1 %t78, label %then1512, label %endif1514 +then1512: %t79 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 9 %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 %t81 = load ptr, ptr %a1 @@ -18718,8 +18744,8 @@ then1508: %t86 = getelementptr inbounds %S.ast.Node, ptr %t85, i64 %t83 store %S.ast.Node %t82, ptr %t86 store i64 %t84, ptr %t80 - br label %endif1510 -endif1510: + br label %endif1514 +endif1514: %t87 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 %t89 = load %S.ast.Node, ptr %a39 @@ -18736,8 +18762,8 @@ endif1510: %t97 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t97) call void @finch.drop.S_ast_Node(ptr %a39) - br label %while.cond1499 -while.end1501: + br label %while.cond1503 +while.end1505: %t98 = load ptr, ptr %a1 %t99 = call %S.lexer.Token @finch.parser.next(ptr %t98) store %S.lexer.Token %t99, ptr %a100 @@ -18803,10 +18829,10 @@ entry: store i1 %t6, ptr %t7 %t8 = load ptr, ptr %a1 %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.849, i64 5, i64 0 }) - br label %logic.from1511 -logic.from1511: - br i1 %t9, label %logic.rhs1512, label %logic.end1513 -logic.rhs1512: + br label %logic.from1515 +logic.from1515: + br i1 %t9, label %logic.rhs1516, label %logic.end1517 +logic.rhs1516: %t10 = load ptr, ptr %a1 %t11 = call %S.lexer.Token @finch.parser.cur(ptr %t10) %t12 = extractvalue %S.lexer.Token %t11, 1 @@ -18818,21 +18844,21 @@ logic.rhs1512: %t17 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t15) store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_drop(ptr %a18) - br label %logic.rend1514 -logic.rend1514: - br label %logic.end1513 -logic.end1513: - %t19 = phi i1 [ false, %logic.from1511 ], [ %t17, %logic.rend1514 ] - br i1 %t19, label %then1515, label %endif1517 -then1515: + br label %logic.rend1518 +logic.rend1518: + br label %logic.end1517 +logic.end1517: + %t19 = phi i1 [ false, %logic.from1515 ], [ %t17, %logic.rend1518 ] + br i1 %t19, label %then1519, label %endif1521 +then1519: %t20 = load ptr, ptr %a1 %t21 = load ptr, ptr %a1 %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) call void @finch.parser.fail(ptr %t20, %S.lexer.Token %t22, { ptr, i64, i64 } { ptr @.str.850, i64 68, i64 0 }) store %S.lexer.Token %t22, ptr %a23 call void @finch.drop.S_lexer_Token(ptr %a23) - br label %endif1517 -endif1517: + br label %endif1521 +endif1521: %t24 = load ptr, ptr %a1 %t25 = call %S.lexer.Token @finch.parser.expect(ptr %t24, { ptr, i64, i64 } { ptr @.str.851, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.852, i64 26, i64 0 }) store %S.lexer.Token %t25, ptr %a26 @@ -18852,8 +18878,8 @@ endif1517: call void @finch_str_drop(ptr %a36) %t37 = load ptr, ptr %a1 %t38 = call i1 @finch.parser.at(ptr %t37, { ptr, i64, i64 } { ptr @.str.855, i64 1, i64 0 }) - br i1 %t38, label %then1518, label %endif1520 -then1518: + br i1 %t38, label %then1522, label %endif1524 +then1522: %t39 = load ptr, ptr %a1 %t40 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t39) %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 @@ -18861,12 +18887,12 @@ then1518: store { ptr, i64, i64 } %t40, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 call void @finch.drop.arr_str(ptr %a43) - br label %endif1520 -endif1520: + br label %endif1524 +endif1524: %t44 = load ptr, ptr %a1 %t45 = call i1 @finch.parser.accept(ptr %t44, { ptr, i64, i64 } { ptr @.str.856, i64 1, i64 0 }) - br i1 %t45, label %then1521, label %endif1523 -then1521: + br i1 %t45, label %then1525, label %endif1527 +then1525: %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 %t48 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 2 @@ -18890,19 +18916,19 @@ then1521: store { ptr, i64, i64 } %t59, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 call void @finch_str_drop(ptr %a63) - br label %endif1523 -endif1523: + br label %endif1527 +endif1527: %t64 = load ptr, ptr %a1 %t65 = call %S.lexer.Token @finch.parser.expect(ptr %t64, { ptr, i64, i64 } { ptr @.str.859, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.860, i64 3, i64 0 }) store %S.lexer.Token %t65, ptr %a66 call void @finch.drop.S_lexer_Token(ptr %a66) %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic1524, label %ok1525 -panic1524: + br i1 %t68, label %panic1528, label %ok1529 +panic1528: call void @finch_panic(ptr @.str.861, i64 446, ptr @.str.862) unreachable -ok1525: +ok1529: %t69 = getelementptr inbounds %S.parser.Parser, ptr %t67, i32 0, i32 2 %t70 = load i64, ptr %t69 %t71 = add i64 %t70, 1 @@ -18910,12 +18936,12 @@ ok1525: %t72 = load ptr, ptr %a1 %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.863, i64 1, i64 0 }) %t74 = xor i1 %t73, true - br i1 %t74, label %then1526, label %endif1528 -then1526: - br label %while.cond1529 -while.cond1529: - br label %while.body1530 -while.body1530: + br i1 %t74, label %then1530, label %endif1532 +then1530: + br label %while.cond1533 +while.cond1533: + br label %while.body1534 +while.body1534: %t75 = load ptr, ptr %a1 %t76 = call %S.ast.Node @finch.parser.node(ptr %t75, { ptr, i64, i64 } { ptr @.str.864, i64 5, i64 0 }) store %S.ast.Node %t76, ptr %a77 @@ -18955,23 +18981,23 @@ while.body1530: %t103 = load ptr, ptr %a1 %t104 = call i1 @finch.parser.accept(ptr %t103, { ptr, i64, i64 } { ptr @.str.867, i64 1, i64 0 }) %t105 = xor i1 %t104, true - br i1 %t105, label %then1532, label %endif1534 -then1532: + br i1 %t105, label %then1536, label %endif1538 +then1536: call void @finch.drop.S_ast_Node(ptr %a77) - br label %while.end1531 -endif1534: + br label %while.end1535 +endif1538: call void @finch.drop.S_ast_Node(ptr %a77) - br label %while.cond1529 -while.end1531: - br label %endif1528 -endif1528: + br label %while.cond1533 +while.end1535: + br label %endif1532 +endif1532: %t106 = load ptr, ptr %a1 %t107 = icmp eq ptr %t106, null - br i1 %t107, label %panic1535, label %ok1536 -panic1535: + br i1 %t107, label %panic1539, label %ok1540 +panic1539: call void @finch_panic(ptr @.str.868, i64 458, ptr @.str.869) unreachable -ok1536: +ok1540: %t108 = getelementptr inbounds %S.parser.Parser, ptr %t106, i32 0, i32 2 %t109 = load i64, ptr %t108 %t110 = sub i64 %t109, 1 @@ -18988,13 +19014,13 @@ ok1536: call void @finch.drop.S_ast_Type(ptr %a117) %t118 = load ptr, ptr %a1 %t119 = call i1 @finch.parser.accept(ptr %t118, { ptr, i64, i64 } { ptr @.str.873, i64 2, i64 0 }) - br i1 %t119, label %then1537, label %endif1539 -then1537: + br i1 %t119, label %then1541, label %endif1543 +then1541: %t120 = load ptr, ptr %a1 %t121 = call i1 @finch.parser.at(ptr %t120, { ptr, i64, i64 } { ptr @.str.874, i64 1, i64 0 }) %t122 = xor i1 %t121, true - br i1 %t122, label %then1540, label %endif1542 -then1540: + br i1 %t122, label %then1544, label %endif1546 +then1544: %t123 = load ptr, ptr %a1 %t124 = call %S.ast.Type @finch.parser.parseType(ptr %t123) %t125 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 @@ -19002,8 +19028,8 @@ then1540: store %S.ast.Type %t124, ptr %t125 store %S.ast.Type %t126, ptr %a127 call void @finch.drop.S_ast_Type(ptr %a127) - br label %endif1542 -endif1542: + br label %endif1546 +endif1546: %t128 = load ptr, ptr %a1 %t129 = call i1 @finch.parser.accept(ptr %t128, { ptr, i64, i64 } { ptr @.str.875, i64 1, i64 0 }) %t130 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 @@ -19011,10 +19037,10 @@ endif1542: %t131 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 %t132 = load i1, ptr %t131 %t133 = xor i1 %t132, true - br label %logic.from1543 -logic.from1543: - br i1 %t133, label %logic.rhs1544, label %logic.end1545 -logic.rhs1544: + br label %logic.from1547 +logic.from1547: + br i1 %t133, label %logic.rhs1548, label %logic.end1549 +logic.rhs1548: %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 %t135 = getelementptr inbounds %S.ast.Type, ptr %t134, i32 0, i32 0 %t136 = load { ptr, i64, i64 }, ptr %t135 @@ -19022,13 +19048,13 @@ logic.rhs1544: store { ptr, i64, i64 } { ptr @.str.876, i64 4, i64 0 }, ptr %a138 %t139 = call i32 @finch_str_eq(ptr %a137, ptr %a138) %t140 = icmp ne i32 %t139, 0 - br label %logic.rend1546 -logic.rend1546: - br label %logic.end1545 -logic.end1545: - %t141 = phi i1 [ false, %logic.from1543 ], [ %t140, %logic.rend1546 ] - br i1 %t141, label %then1547, label %endif1549 -then1547: + br label %logic.rend1550 +logic.rend1550: + br label %logic.end1549 +logic.end1549: + %t141 = phi i1 [ false, %logic.from1547 ], [ %t140, %logic.rend1550 ] + br i1 %t141, label %then1551, label %endif1553 +then1551: %t142 = load ptr, ptr %a1 %t143 = load ptr, ptr %a1 %t144 = call %S.lexer.Token @finch.parser.cur(ptr %t143) @@ -19054,10 +19080,10 @@ then1547: call void @finch.drop.S_lexer_Token(ptr %a159) store { ptr, i64, i64 } %t158, ptr %a160 call void @finch_str_drop(ptr %a160) - br label %endif1549 -endif1549: - br label %endif1539 -endif1539: + br label %endif1553 +endif1553: + br label %endif1543 +endif1543: %t161 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i32 0, i32 1 %t163 = load ptr, ptr %a1 @@ -19077,11 +19103,11 @@ endif1539: %t174 = load { ptr, i64, i64 }, ptr %t169 %t175 = extractvalue { ptr, i64, i64 } %t174, 1 %t176 = icmp uge i64 %t173, %t175 - br i1 %t176, label %range1550, label %inrange1551 -range1550: + br i1 %t176, label %range1554, label %inrange1555 +range1554: call void @finch_panic_index(ptr @.str.879, i64 471, i64 %t173, i64 %t175) unreachable -inrange1551: +inrange1555: %t177 = extractvalue { ptr, i64, i64 } %t174, 0 %t178 = getelementptr inbounds %S.ast.Node, ptr %t177, i64 %t173 %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i32 0, i32 14 @@ -19111,42 +19137,42 @@ entry: call void @finch.drop.S_lexer_Token(ptr %a7) %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic1552, label %ok1553 -panic1552: + br i1 %t9, label %panic1556, label %ok1557 +panic1556: call void @finch_panic(ptr @.str.883, i64 480, ptr @.str.884) unreachable -ok1553: +ok1557: %t10 = getelementptr inbounds %S.parser.Parser, ptr %t8, i32 0, i32 2 %t11 = load i64, ptr %t10 store i64 %t11, ptr %a12 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic1554, label %ok1555 -panic1554: + br i1 %t14, label %panic1558, label %ok1559 +panic1558: call void @finch_panic(ptr @.str.885, i64 481, ptr @.str.886) unreachable -ok1555: +ok1559: %t15 = getelementptr inbounds %S.parser.Parser, ptr %t13, i32 0, i32 2 store i64 0, ptr %t15 - br label %while.cond1556 -while.cond1556: + br label %while.cond1560 +while.cond1560: %t16 = load ptr, ptr %a1 %t17 = call i1 @finch.parser.at(ptr %t16, { ptr, i64, i64 } { ptr @.str.887, i64 1, i64 0 }) %t18 = xor i1 %t17, true - br i1 %t18, label %while.body1557, label %while.end1558 -while.body1557: + br i1 %t18, label %while.body1561, label %while.end1562 +while.body1561: %t19 = load ptr, ptr %a1 %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.888, i64 3, i64 0 }) - br i1 %t20, label %then1559, label %endif1561 -then1559: + br i1 %t20, label %then1563, label %endif1565 +then1563: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = call %S.lexer.Token @finch.parser.cur(ptr %t22) call void @finch.parser.fail(ptr %t21, %S.lexer.Token %t23, { ptr, i64, i64 } { ptr @.str.889, i64 35, i64 0 }) store %S.lexer.Token %t23, ptr %a24 call void @finch.drop.S_lexer_Token(ptr %a24) - br label %endif1561 -endif1561: + br label %endif1565 +endif1565: %t25 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 %t27 = load ptr, ptr %a1 @@ -19160,16 +19186,16 @@ endif1561: store i64 %t30, ptr %t26 %t33 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t33) - br label %while.cond1556 -while.end1558: + br label %while.cond1560 +while.end1562: %t34 = load i64, ptr %a12 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic1562, label %ok1563 -panic1562: + br i1 %t36, label %panic1566, label %ok1567 +panic1566: call void @finch_panic(ptr @.str.890, i64 489, ptr @.str.891) unreachable -ok1563: +ok1567: %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 2 store i64 %t34, ptr %t37 %t38 = load ptr, ptr %a1 @@ -19305,20 +19331,20 @@ entry: store { ptr, i64, i64 } { ptr @.str.892, i64 2, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br i1 %t9, label %then1564, label %endif1566 -then1564: + br i1 %t9, label %then1568, label %endif1570 +then1568: %t10 = load ptr, ptr %a1 %t11 = call %S.ast.Node @finch.parser.parseIf(ptr %t10) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t11 -endif1566: +endif1570: %t12 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.893, i64 5, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br i1 %t16, label %then1567, label %endif1569 -then1567: + br i1 %t16, label %then1571, label %endif1573 +then1571: %t17 = load ptr, ptr %a1 %t18 = call %S.ast.Node @finch.parser.node(ptr %t17, { ptr, i64, i64 } { ptr @.str.894, i64 5, i64 0 }) store %S.ast.Node %t18, ptr %a19 @@ -19351,14 +19377,14 @@ then1567: %t39 = load %S.ast.Node, ptr %a19 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t39 -endif1569: +endif1573: %t40 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.895, i64 3, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %then1570, label %endif1572 -then1570: + br i1 %t44, label %then1574, label %endif1576 +then1574: %t45 = load ptr, ptr %a1 %t46 = call %S.ast.Node @finch.parser.node(ptr %t45, { ptr, i64, i64 } { ptr @.str.896, i64 3, i64 0 }) store %S.ast.Node %t46, ptr %a47 @@ -19381,8 +19407,8 @@ then1570: call void @finch_str_drop(ptr %a60) %t61 = load ptr, ptr %a1 %t62 = call i1 @finch.parser.accept(ptr %t61, { ptr, i64, i64 } { ptr @.str.899, i64 1, i64 0 }) - br i1 %t62, label %then1573, label %endif1575 -then1573: + br i1 %t62, label %then1577, label %endif1579 +then1577: %t63 = load ptr, ptr %a1 %t64 = call %S.lexer.Token @finch.parser.expect(ptr %t63, { ptr, i64, i64 } { ptr @.str.900, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.901, i64 27, i64 0 }) %t65 = extractvalue %S.lexer.Token %t64, 1 @@ -19396,8 +19422,8 @@ then1573: store { ptr, i64, i64 } %t68, ptr %t70 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_drop(ptr %a72) - br label %endif1575 -endif1575: + br label %endif1579 +endif1579: %t73 = load ptr, ptr %a1 %t74 = call %S.lexer.Token @finch.parser.expect(ptr %t73, { ptr, i64, i64 } { ptr @.str.902, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.903, i64 4, i64 0 }) store %S.lexer.Token %t74, ptr %a75 @@ -19415,22 +19441,22 @@ endif1575: store i64 %t81, ptr %t77 %t84 = load ptr, ptr %a1 %t85 = call i1 @finch.parser.accept(ptr %t84, { ptr, i64, i64 } { ptr @.str.904, i64 2, i64 0 }) - br i1 %t85, label %then1576, label %else1577 -then1576: + br i1 %t85, label %then1580, label %else1581 +then1580: %t86 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load i64, ptr %t87 %t89 = icmp sgt i64 %t88, 0 - br i1 %t89, label %then1579, label %endif1581 -then1579: + br i1 %t89, label %then1583, label %endif1585 +then1583: %t90 = load ptr, ptr %a1 %t91 = load ptr, ptr %a1 %t92 = call %S.lexer.Token @finch.parser.cur(ptr %t91) call void @finch.parser.fail(ptr %t90, %S.lexer.Token %t92, { ptr, i64, i64 } { ptr @.str.905, i64 55, i64 0 }) store %S.lexer.Token %t92, ptr %a93 call void @finch.drop.S_lexer_Token(ptr %a93) - br label %endif1581 -endif1581: + br label %endif1585 +endif1585: %t94 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load ptr, ptr %a1 @@ -19442,15 +19468,15 @@ endif1581: %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 store %S.ast.Node %t97, ptr %t101 store i64 %t99, ptr %t95 - br label %endif1578 -else1577: + br label %endif1582 +else1581: %t102 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } { ptr @.str.906, i64 4, i64 0 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 call void @finch_str_drop(ptr %a104) - br label %endif1578 -endif1578: + br label %endif1582 +endif1582: %t105 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t105, i32 0, i32 1 %t107 = load ptr, ptr %a1 @@ -19465,26 +19491,26 @@ endif1578: %t113 = load %S.ast.Node, ptr %a47 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t113 -endif1572: +endif1576: %t114 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.907, i64 5, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 - br i1 %t118, label %then1582, label %endif1584 -then1582: + br i1 %t118, label %then1586, label %endif1588 +then1586: %t119 = load ptr, ptr %a1 %t120 = call %S.ast.Node @finch.parser.parseMatch(ptr %t119, i1 false) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t120 -endif1584: +endif1588: %t121 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t121, ptr %a122 store { ptr, i64, i64 } { ptr @.str.908, i64 6, i64 0 }, ptr %a123 %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) %t125 = icmp ne i32 %t124, 0 - br i1 %t125, label %then1585, label %endif1587 -then1585: + br i1 %t125, label %then1589, label %endif1591 +then1589: %t126 = load ptr, ptr %a1 %t127 = call %S.ast.Node @finch.parser.node(ptr %t126, { ptr, i64, i64 } { ptr @.str.909, i64 6, i64 0 }) store %S.ast.Node %t127, ptr %a128 @@ -19495,23 +19521,23 @@ then1585: %t132 = load ptr, ptr %a1 %t133 = call i1 @finch.parser.at(ptr %t132, { ptr, i64, i64 } { ptr @.str.910, i64 1, i64 0 }) %t134 = xor i1 %t133, true - br label %logic.from1588 -logic.from1588: - br i1 %t134, label %logic.rhs1589, label %logic.end1590 -logic.rhs1589: + br label %logic.from1592 +logic.from1592: + br i1 %t134, label %logic.rhs1593, label %logic.end1594 +logic.rhs1593: %t135 = load ptr, ptr %a1 %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) %t137 = extractvalue %S.lexer.Token %t136, 4 store %S.lexer.Token %t136, ptr %a138 call void @finch.drop.S_lexer_Token(ptr %a138) %t139 = xor i1 %t137, true - br label %logic.rend1591 -logic.rend1591: - br label %logic.end1590 -logic.end1590: - %t140 = phi i1 [ false, %logic.from1588 ], [ %t139, %logic.rend1591 ] - br i1 %t140, label %then1592, label %endif1594 -then1592: + br label %logic.rend1595 +logic.rend1595: + br label %logic.end1594 +logic.end1594: + %t140 = phi i1 [ false, %logic.from1592 ], [ %t139, %logic.rend1595 ] + br i1 %t140, label %then1596, label %endif1598 +then1596: %t141 = getelementptr inbounds %S.ast.Node, ptr %a128, i32 0, i32 9 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 %t143 = load ptr, ptr %a1 @@ -19523,33 +19549,33 @@ then1592: %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 %t145 store %S.ast.Node %t144, ptr %t148 store i64 %t146, ptr %t142 - br label %endif1594 -endif1594: + br label %endif1598 +endif1598: %t149 = load %S.ast.Node, ptr %a128 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t149 -endif1587: +endif1591: %t150 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.911, i64 5, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp ne i32 %t153, 0 - br label %logic.from1595 -logic.from1595: - br i1 %t154, label %logic.end1597, label %logic.rhs1596 -logic.rhs1596: + br label %logic.from1599 +logic.from1599: + br i1 %t154, label %logic.end1601, label %logic.rhs1600 +logic.rhs1600: %t155 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t155, ptr %a156 store { ptr, i64, i64 } { ptr @.str.912, i64 8, i64 0 }, ptr %a157 %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) %t159 = icmp ne i32 %t158, 0 - br label %logic.rend1598 -logic.rend1598: - br label %logic.end1597 -logic.end1597: - %t160 = phi i1 [ true, %logic.from1595 ], [ %t159, %logic.rend1598 ] - br i1 %t160, label %then1599, label %endif1601 -then1599: + br label %logic.rend1602 +logic.rend1602: + br label %logic.end1601 +logic.end1601: + %t160 = phi i1 [ true, %logic.from1599 ], [ %t159, %logic.rend1602 ] + br i1 %t160, label %then1603, label %endif1605 +then1603: %t161 = load ptr, ptr %a1 %t162 = load { ptr, i64, i64 }, ptr %a4 %t163 = call %S.ast.Node @finch.parser.node(ptr %t161, { ptr, i64, i64 } %t162) @@ -19561,26 +19587,26 @@ then1599: %t168 = load %S.ast.Node, ptr %a164 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t168 -endif1601: +endif1605: %t169 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t169, ptr %a170 store { ptr, i64, i64 } { ptr @.str.913, i64 1, i64 0 }, ptr %a171 %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) %t173 = icmp ne i32 %t172, 0 - br i1 %t173, label %then1602, label %endif1604 -then1602: + br i1 %t173, label %then1606, label %endif1608 +then1606: %t174 = load ptr, ptr %a1 %t175 = call %S.ast.Node @finch.parser.parseBlock(ptr %t174) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t175 -endif1604: +endif1608: %t176 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t176, ptr %a177 store { ptr, i64, i64 } { ptr @.str.914, i64 5, i64 0 }, ptr %a178 %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) %t180 = icmp ne i32 %t179, 0 - br i1 %t180, label %then1605, label %endif1607 -then1605: + br i1 %t180, label %then1609, label %endif1611 +then1609: %t181 = load ptr, ptr %a1 %t182 = call %S.ast.Node @finch.parser.node(ptr %t181, { ptr, i64, i64 } { ptr @.str.915, i64 5, i64 0 }) store %S.ast.Node %t182, ptr %a183 @@ -19590,16 +19616,16 @@ then1605: call void @finch.drop.S_lexer_Token(ptr %a186) %t187 = load ptr, ptr %a1 %t188 = call i1 @finch.parser.at(ptr %t187, { ptr, i64, i64 } { ptr @.str.916, i64 5, i64 0 }) - br i1 %t188, label %then1608, label %endif1610 -then1608: + br i1 %t188, label %then1612, label %endif1614 +then1612: %t189 = load ptr, ptr %a1 %t190 = load ptr, ptr %a1 %t191 = call %S.lexer.Token @finch.parser.cur(ptr %t190) call void @finch.parser.fail(ptr %t189, %S.lexer.Token %t191, { ptr, i64, i64 } { ptr @.str.917, i64 33, i64 0 }) store %S.lexer.Token %t191, ptr %a192 call void @finch.drop.S_lexer_Token(ptr %a192) - br label %endif1610 -endif1610: + br label %endif1614 +endif1614: %t193 = getelementptr inbounds %S.ast.Node, ptr %a183, i32 0, i32 9 %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t193, i32 0, i32 1 %t195 = load ptr, ptr %a1 @@ -19614,56 +19640,56 @@ endif1610: %t201 = load %S.ast.Node, ptr %a183 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t201 -endif1607: +endif1611: %t202 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t202, ptr %a203 store { ptr, i64, i64 } { ptr @.str.918, i64 2, i64 0 }, ptr %a204 %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) %t206 = icmp ne i32 %t205, 0 - br label %logic.from1611 -logic.from1611: - br i1 %t206, label %logic.end1613, label %logic.rhs1612 -logic.rhs1612: + br label %logic.from1615 +logic.from1615: + br i1 %t206, label %logic.end1617, label %logic.rhs1616 +logic.rhs1616: %t207 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t207, ptr %a208 store { ptr, i64, i64 } { ptr @.str.919, i64 6, i64 0 }, ptr %a209 %t210 = call i32 @finch_str_eq(ptr %a208, ptr %a209) %t211 = icmp ne i32 %t210, 0 - br label %logic.rend1614 -logic.rend1614: - br label %logic.end1613 -logic.end1613: - %t212 = phi i1 [ true, %logic.from1611 ], [ %t211, %logic.rend1614 ] - br label %logic.from1615 -logic.from1615: - br i1 %t212, label %logic.end1617, label %logic.rhs1616 -logic.rhs1616: + br label %logic.rend1618 +logic.rend1618: + br label %logic.end1617 +logic.end1617: + %t212 = phi i1 [ true, %logic.from1615 ], [ %t211, %logic.rend1618 ] + br label %logic.from1619 +logic.from1619: + br i1 %t212, label %logic.end1621, label %logic.rhs1620 +logic.rhs1620: %t213 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t213, ptr %a214 store { ptr, i64, i64 } { ptr @.str.920, i64 6, i64 0 }, ptr %a215 %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) %t217 = icmp ne i32 %t216, 0 - br label %logic.rend1618 -logic.rend1618: - br label %logic.end1617 -logic.end1617: - %t218 = phi i1 [ true, %logic.from1615 ], [ %t217, %logic.rend1618 ] - br label %logic.from1619 -logic.from1619: - br i1 %t218, label %logic.end1621, label %logic.rhs1620 -logic.rhs1620: + br label %logic.rend1622 +logic.rend1622: + br label %logic.end1621 +logic.end1621: + %t218 = phi i1 [ true, %logic.from1619 ], [ %t217, %logic.rend1622 ] + br label %logic.from1623 +logic.from1623: + br i1 %t218, label %logic.end1625, label %logic.rhs1624 +logic.rhs1624: %t219 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t219, ptr %a220 store { ptr, i64, i64 } { ptr @.str.921, i64 4, i64 0 }, ptr %a221 %t222 = call i32 @finch_str_eq(ptr %a220, ptr %a221) %t223 = icmp ne i32 %t222, 0 - br label %logic.rend1622 -logic.rend1622: - br label %logic.end1621 -logic.end1621: - %t224 = phi i1 [ true, %logic.from1619 ], [ %t223, %logic.rend1622 ] - br i1 %t224, label %then1623, label %endif1625 -then1623: + br label %logic.rend1626 +logic.rend1626: + br label %logic.end1625 +logic.end1625: + %t224 = phi i1 [ true, %logic.from1623 ], [ %t223, %logic.rend1626 ] + br i1 %t224, label %then1627, label %endif1629 +then1627: %t225 = load ptr, ptr %a1 %t226 = load ptr, ptr %a1 %t227 = call %S.lexer.Token @finch.parser.cur(ptr %t226) @@ -19683,12 +19709,12 @@ then1623: call void @finch.drop.S_lexer_Token(ptr %a238) store { ptr, i64, i64 } %t237, ptr %a239 call void @finch_str_drop(ptr %a239) - br label %endif1625 -endif1625: + br label %endif1629 +endif1629: %t240 = load ptr, ptr %a1 %t241 = call i1 @finch.parser.atDeclaration(ptr %t240) - br i1 %t241, label %then1626, label %endif1628 -then1626: + br i1 %t241, label %then1630, label %endif1632 +then1630: %t242 = load ptr, ptr %a1 %t243 = call %S.ast.Node @finch.parser.node(ptr %t242, { ptr, i64, i64 } { ptr @.str.924, i64 4, i64 0 }) store %S.ast.Node %t243, ptr %a244 @@ -19716,8 +19742,8 @@ then1626: call void @finch_str_drop(ptr %a260) %t261 = load ptr, ptr %a1 %t262 = call i1 @finch.parser.accept(ptr %t261, { ptr, i64, i64 } { ptr @.str.927, i64 1, i64 0 }) - br i1 %t262, label %then1629, label %endif1631 -then1629: + br i1 %t262, label %then1633, label %endif1635 +then1633: %t263 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 9 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load ptr, ptr %a1 @@ -19729,18 +19755,18 @@ then1629: %t270 = getelementptr inbounds %S.ast.Node, ptr %t269, i64 %t267 store %S.ast.Node %t266, ptr %t270 store i64 %t268, ptr %t264 - br label %endif1631 -endif1631: + br label %endif1635 +endif1635: %t271 = load %S.ast.Node, ptr %a244 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t271 -endif1628: +endif1632: %t272 = load ptr, ptr %a1 %t273 = call i1 @finch.parser.at(ptr %t272, { ptr, i64, i64 } { ptr @.str.928, i64 5, i64 0 }) - br label %logic.from1632 -logic.from1632: - br i1 %t273, label %logic.rhs1633, label %logic.end1634 -logic.rhs1633: + br label %logic.from1636 +logic.from1636: + br i1 %t273, label %logic.rhs1637, label %logic.end1638 +logic.rhs1637: %t274 = load ptr, ptr %a1 %t275 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t274, i64 1) store { ptr, i64, i64 } %t275, ptr %a276 @@ -19749,13 +19775,13 @@ logic.rhs1633: %t279 = icmp ne i32 %t278, 0 store { ptr, i64, i64 } %t275, ptr %a280 call void @finch_str_drop(ptr %a280) - br label %logic.rend1635 -logic.rend1635: - br label %logic.end1634 -logic.end1634: - %t281 = phi i1 [ false, %logic.from1632 ], [ %t279, %logic.rend1635 ] - br i1 %t281, label %then1636, label %endif1638 -then1636: + br label %logic.rend1639 +logic.rend1639: + br label %logic.end1638 +logic.end1638: + %t281 = phi i1 [ false, %logic.from1636 ], [ %t279, %logic.rend1639 ] + br i1 %t281, label %then1640, label %endif1642 +then1640: %t282 = load ptr, ptr %a1 %t283 = call %S.ast.Node @finch.parser.node(ptr %t282, { ptr, i64, i64 } { ptr @.str.930, i64 4, i64 0 }) store %S.ast.Node %t283, ptr %a284 @@ -19790,7 +19816,7 @@ then1636: %t306 = load %S.ast.Node, ptr %a284 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t306 -endif1638: +endif1642: %t307 = load ptr, ptr %a1 %t308 = call %S.lexer.Token @finch.parser.cur(ptr %t307) store %S.lexer.Token %t308, ptr %a309 @@ -19822,87 +19848,87 @@ endif1638: %t329 = load i64, ptr %t325 %t330 = load ptr, ptr %a324 store i64 0, ptr %a331 - br label %find.cond1639 -find.cond1639: + br label %find.cond1643 +find.cond1643: %t332 = load i64, ptr %a331 %t333 = icmp slt i64 %t332, %t329 - br i1 %t333, label %find.body1640, label %find.end1643 -find.body1640: + br i1 %t333, label %find.body1644, label %find.end1647 +find.body1644: %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t330, i64 %t332 %t335 = load { ptr, i64, i64 }, ptr %t334 store { ptr, i64, i64 } %t335, ptr %a336 store { ptr, i64, i64 } %t327, ptr %a337 %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) %t339 = icmp ne i32 %t338, 0 - br i1 %t339, label %find.hit1641, label %find.next1642 -find.hit1641: + br i1 %t339, label %find.hit1645, label %find.next1646 +find.hit1645: store i64 %t332, ptr %a328 - br label %find.end1643 -find.next1642: + br label %find.end1647 +find.next1646: %t340 = add i64 %t332, 1 store i64 %t340, ptr %a331 - br label %find.cond1639 -find.end1643: + br label %find.cond1643 +find.end1647: store { ptr, i64, i64 } %t327, ptr %a341 call void @finch_str_drop(ptr %a341) %t342 = load i64, ptr %a328 %t343 = icmp sge i64 %t342, 0 - br label %logic.from1644 -logic.from1644: - br i1 %t343, label %logic.rhs1645, label %logic.end1646 -logic.rhs1645: + br label %logic.from1648 +logic.from1648: + br i1 %t343, label %logic.rhs1649, label %logic.end1650 +logic.rhs1649: %t344 = load ptr, ptr %a1 %t345 = call i1 @finch.parser.sameLine(ptr %t344) - br label %logic.rend1647 -logic.rend1647: - br label %logic.end1646 -logic.end1646: - %t346 = phi i1 [ false, %logic.from1644 ], [ %t345, %logic.rend1647 ] - br i1 %t346, label %then1648, label %endif1650 -then1648: + br label %logic.rend1651 +logic.rend1651: + br label %logic.end1650 +logic.end1650: + %t346 = phi i1 [ false, %logic.from1648 ], [ %t345, %logic.rend1651 ] + br i1 %t346, label %then1652, label %endif1654 +then1652: %t347 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t348 = load { ptr, i64, i64 }, ptr %t347 store { ptr, i64, i64 } %t348, ptr %a349 store { ptr, i64, i64 } { ptr @.str.937, i64 3, i64 0 }, ptr %a350 %t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350) %t352 = icmp eq i32 %t351, 0 - br label %logic.from1651 -logic.from1651: - br i1 %t352, label %logic.rhs1652, label %logic.end1653 -logic.rhs1652: + br label %logic.from1655 +logic.from1655: + br i1 %t352, label %logic.rhs1656, label %logic.end1657 +logic.rhs1656: %t353 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t354 = load { ptr, i64, i64 }, ptr %t353 store { ptr, i64, i64 } %t354, ptr %a355 store { ptr, i64, i64 } { ptr @.str.938, i64 6, i64 0 }, ptr %a356 %t357 = call i32 @finch_str_eq(ptr %a355, ptr %a356) %t358 = icmp eq i32 %t357, 0 - br label %logic.rend1654 -logic.rend1654: - br label %logic.end1653 -logic.end1653: - %t359 = phi i1 [ false, %logic.from1651 ], [ %t358, %logic.rend1654 ] - br label %logic.from1655 -logic.from1655: - br i1 %t359, label %logic.rhs1656, label %logic.end1657 -logic.rhs1656: + br label %logic.rend1658 +logic.rend1658: + br label %logic.end1657 +logic.end1657: + %t359 = phi i1 [ false, %logic.from1655 ], [ %t358, %logic.rend1658 ] + br label %logic.from1659 +logic.from1659: + br i1 %t359, label %logic.rhs1660, label %logic.end1661 +logic.rhs1660: %t360 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t361 = load { ptr, i64, i64 }, ptr %t360 store { ptr, i64, i64 } %t361, ptr %a362 store { ptr, i64, i64 } { ptr @.str.939, i64 5, i64 0 }, ptr %a363 %t364 = call i32 @finch_str_eq(ptr %a362, ptr %a363) %t365 = icmp eq i32 %t364, 0 - br label %logic.rend1658 -logic.rend1658: - br label %logic.end1657 -logic.end1657: - %t366 = phi i1 [ false, %logic.from1655 ], [ %t365, %logic.rend1658 ] - br i1 %t366, label %then1659, label %endif1661 -then1659: + br label %logic.rend1662 +logic.rend1662: + br label %logic.end1661 +logic.end1661: + %t366 = phi i1 [ false, %logic.from1659 ], [ %t365, %logic.rend1662 ] + br i1 %t366, label %then1663, label %endif1665 +then1663: %t367 = load ptr, ptr %a1 %t368 = load %S.lexer.Token, ptr %a309 call void @finch.parser.fail(ptr %t367, %S.lexer.Token %t368, { ptr, i64, i64 } { ptr @.str.940, i64 66, i64 0 }) - br label %endif1661 -endif1661: + br label %endif1665 +endif1665: %t369 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.941, i64 6, i64 0 }, 0 %t370 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 %t371 = load i64, ptr %t370 @@ -19912,11 +19938,11 @@ endif1661: %t375 = insertvalue %S.ast.Node %t372, i64 %t374, 12 %t376 = load ptr, ptr %a1 %t377 = icmp eq ptr %t376, null - br i1 %t377, label %panic1662, label %ok1663 -panic1662: + br i1 %t377, label %panic1666, label %ok1667 +panic1666: call void @finch_panic(ptr @.str.942, i64 584, ptr @.str.943) unreachable -ok1663: +ok1667: %t378 = getelementptr inbounds %S.parser.Parser, ptr %t376, i32 0, i32 3 %t379 = load i64, ptr %t378 %t380 = insertvalue %S.ast.Node %t375, i64 %t379, 13 @@ -19964,65 +19990,65 @@ ok1663: call void @finch.drop.S_lexer_Token(ptr %a309) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t410 -endif1650: +endif1654: %t411 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t412 = load { ptr, i64, i64 }, ptr %t411 store { ptr, i64, i64 } %t412, ptr %a413 store { ptr, i64, i64 } { ptr @.str.944, i64 4, i64 0 }, ptr %a414 %t415 = call i32 @finch_str_eq(ptr %a413, ptr %a414) %t416 = icmp eq i32 %t415, 0 - br label %logic.from1664 -logic.from1664: - br i1 %t416, label %logic.rhs1665, label %logic.end1666 -logic.rhs1665: + br label %logic.from1668 +logic.from1668: + br i1 %t416, label %logic.rhs1669, label %logic.end1670 +logic.rhs1669: %t417 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t418 = load { ptr, i64, i64 }, ptr %t417 store { ptr, i64, i64 } %t418, ptr %a419 store { ptr, i64, i64 } { ptr @.str.945, i64 6, i64 0 }, ptr %a420 %t421 = call i32 @finch_str_eq(ptr %a419, ptr %a420) %t422 = icmp eq i32 %t421, 0 - br label %logic.rend1667 -logic.rend1667: - br label %logic.end1666 -logic.end1666: - %t423 = phi i1 [ false, %logic.from1664 ], [ %t422, %logic.rend1667 ] - br label %logic.from1668 -logic.from1668: - br i1 %t423, label %logic.rhs1669, label %logic.end1670 -logic.rhs1669: + br label %logic.rend1671 +logic.rend1671: + br label %logic.end1670 +logic.end1670: + %t423 = phi i1 [ false, %logic.from1668 ], [ %t422, %logic.rend1671 ] + br label %logic.from1672 +logic.from1672: + br i1 %t423, label %logic.rhs1673, label %logic.end1674 +logic.rhs1673: %t424 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t425 = load { ptr, i64, i64 }, ptr %t424 store { ptr, i64, i64 } %t425, ptr %a426 store { ptr, i64, i64 } { ptr @.str.946, i64 3, i64 0 }, ptr %a427 %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) %t429 = icmp eq i32 %t428, 0 - br label %logic.rend1671 -logic.rend1671: - br label %logic.end1670 -logic.end1670: - %t430 = phi i1 [ false, %logic.from1668 ], [ %t429, %logic.rend1671 ] - br label %logic.from1672 -logic.from1672: - br i1 %t430, label %logic.rhs1673, label %logic.end1674 -logic.rhs1673: + br label %logic.rend1675 +logic.rend1675: + br label %logic.end1674 +logic.end1674: + %t430 = phi i1 [ false, %logic.from1672 ], [ %t429, %logic.rend1675 ] + br label %logic.from1676 +logic.from1676: + br i1 %t430, label %logic.rhs1677, label %logic.end1678 +logic.rhs1677: %t431 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t432 = load { ptr, i64, i64 }, ptr %t431 store { ptr, i64, i64 } %t432, ptr %a433 store { ptr, i64, i64 } { ptr @.str.947, i64 2, i64 0 }, ptr %a434 %t435 = call i32 @finch_str_eq(ptr %a433, ptr %a434) %t436 = icmp eq i32 %t435, 0 - br label %logic.rend1675 -logic.rend1675: - br label %logic.end1674 -logic.end1674: - %t437 = phi i1 [ false, %logic.from1672 ], [ %t436, %logic.rend1675 ] - br i1 %t437, label %then1676, label %endif1678 -then1676: + br label %logic.rend1679 +logic.rend1679: + br label %logic.end1678 +logic.end1678: + %t437 = phi i1 [ false, %logic.from1676 ], [ %t436, %logic.rend1679 ] + br i1 %t437, label %then1680, label %endif1682 +then1680: %t438 = load ptr, ptr %a1 %t439 = load %S.lexer.Token, ptr %a309 call void @finch.parser.fail(ptr %t438, %S.lexer.Token %t439, { ptr, i64, i64 } { ptr @.str.948, i64 37, i64 0 }) - br label %endif1678 -endif1678: + br label %endif1682 +endif1682: %t440 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.949, i64 4, i64 0 }, 0 %t441 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 %t442 = load i64, ptr %t441 @@ -20032,11 +20058,11 @@ endif1678: %t446 = insertvalue %S.ast.Node %t443, i64 %t445, 12 %t447 = load ptr, ptr %a1 %t448 = icmp eq ptr %t447, null - br i1 %t448, label %panic1679, label %ok1680 -panic1679: + br i1 %t448, label %panic1683, label %ok1684 +panic1683: call void @finch_panic(ptr @.str.950, i64 593, ptr @.str.951) unreachable -ok1680: +ok1684: %t449 = getelementptr inbounds %S.parser.Parser, ptr %t447, i32 0, i32 3 %t450 = load i64, ptr %t449 %t451 = insertvalue %S.ast.Node %t446, i64 %t450, 13 @@ -20099,12 +20125,12 @@ entry: store i64 %t21, ptr %t17 %t24 = load ptr, ptr %a1 %t25 = call i1 @finch.parser.accept(ptr %t24, { ptr, i64, i64 } { ptr @.str.955, i64 4, i64 0 }) - br i1 %t25, label %then1681, label %endif1683 -then1681: + br i1 %t25, label %then1685, label %endif1687 +then1685: %t26 = load ptr, ptr %a1 %t27 = call i1 @finch.parser.at(ptr %t26, { ptr, i64, i64 } { ptr @.str.956, i64 2, i64 0 }) - br i1 %t27, label %then1684, label %else1685 -then1684: + br i1 %t27, label %then1688, label %else1689 +then1688: %t28 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 %t30 = load ptr, ptr %a1 @@ -20116,8 +20142,8 @@ then1684: %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 store %S.ast.Node %t31, ptr %t35 store i64 %t33, ptr %t29 - br label %endif1686 -else1685: + br label %endif1690 +else1689: %t36 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 %t38 = load ptr, ptr %a1 @@ -20129,10 +20155,10 @@ else1685: %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 store %S.ast.Node %t39, ptr %t43 store i64 %t41, ptr %t37 - br label %endif1686 -endif1686: - br label %endif1683 -endif1683: + br label %endif1690 +endif1690: + br label %endif1687 +endif1687: %t44 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t44 } @@ -20182,228 +20208,228 @@ entry: store { ptr, i64, i64 } { ptr @.str.957, i64 2, i64 0 }, ptr %a4 %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) %t6 = icmp ne i32 %t5, 0 - br i1 %t6, label %then1687, label %endif1689 -then1687: + br i1 %t6, label %then1691, label %endif1693 +then1691: ret i64 1 -endif1689: +endif1693: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.958, i64 2, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 - br i1 %t11, label %then1690, label %endif1692 -then1690: + br i1 %t11, label %then1694, label %endif1696 +then1694: ret i64 2 -endif1692: +endif1696: %t12 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.959, i64 2, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.from1693 -logic.from1693: - br i1 %t16, label %logic.end1695, label %logic.rhs1694 -logic.rhs1694: + br label %logic.from1697 +logic.from1697: + br i1 %t16, label %logic.end1699, label %logic.rhs1698 +logic.rhs1698: %t17 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.960, i64 2, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 - br label %logic.rend1696 -logic.rend1696: - br label %logic.end1695 -logic.end1695: - %t22 = phi i1 [ true, %logic.from1693 ], [ %t21, %logic.rend1696 ] - br label %logic.from1697 -logic.from1697: - br i1 %t22, label %logic.end1699, label %logic.rhs1698 -logic.rhs1698: + br label %logic.rend1700 +logic.rend1700: + br label %logic.end1699 +logic.end1699: + %t22 = phi i1 [ true, %logic.from1697 ], [ %t21, %logic.rend1700 ] + br label %logic.from1701 +logic.from1701: + br i1 %t22, label %logic.end1703, label %logic.rhs1702 +logic.rhs1702: %t23 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.961, i64 1, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.rend1700 -logic.rend1700: - br label %logic.end1699 -logic.end1699: - %t28 = phi i1 [ true, %logic.from1697 ], [ %t27, %logic.rend1700 ] - br label %logic.from1701 -logic.from1701: - br i1 %t28, label %logic.end1703, label %logic.rhs1702 -logic.rhs1702: + br label %logic.rend1704 +logic.rend1704: + br label %logic.end1703 +logic.end1703: + %t28 = phi i1 [ true, %logic.from1701 ], [ %t27, %logic.rend1704 ] + br label %logic.from1705 +logic.from1705: + br i1 %t28, label %logic.end1707, label %logic.rhs1706 +logic.rhs1706: %t29 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.962, i64 2, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br label %logic.rend1704 -logic.rend1704: - br label %logic.end1703 -logic.end1703: - %t34 = phi i1 [ true, %logic.from1701 ], [ %t33, %logic.rend1704 ] - br label %logic.from1705 -logic.from1705: - br i1 %t34, label %logic.end1707, label %logic.rhs1706 -logic.rhs1706: + br label %logic.rend1708 +logic.rend1708: + br label %logic.end1707 +logic.end1707: + %t34 = phi i1 [ true, %logic.from1705 ], [ %t33, %logic.rend1708 ] + br label %logic.from1709 +logic.from1709: + br i1 %t34, label %logic.end1711, label %logic.rhs1710 +logic.rhs1710: %t35 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.963, i64 1, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.rend1708 -logic.rend1708: - br label %logic.end1707 -logic.end1707: - %t40 = phi i1 [ true, %logic.from1705 ], [ %t39, %logic.rend1708 ] - br label %logic.from1709 -logic.from1709: - br i1 %t40, label %logic.end1711, label %logic.rhs1710 -logic.rhs1710: + br label %logic.rend1712 +logic.rend1712: + br label %logic.end1711 +logic.end1711: + %t40 = phi i1 [ true, %logic.from1709 ], [ %t39, %logic.rend1712 ] + br label %logic.from1713 +logic.from1713: + br i1 %t40, label %logic.end1715, label %logic.rhs1714 +logic.rhs1714: %t41 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.964, i64 2, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.rend1712 -logic.rend1712: - br label %logic.end1711 -logic.end1711: - %t46 = phi i1 [ true, %logic.from1709 ], [ %t45, %logic.rend1712 ] - br i1 %t46, label %then1713, label %endif1715 -then1713: + br label %logic.rend1716 +logic.rend1716: + br label %logic.end1715 +logic.end1715: + %t46 = phi i1 [ true, %logic.from1713 ], [ %t45, %logic.rend1716 ] + br i1 %t46, label %then1717, label %endif1719 +then1717: ret i64 3 -endif1715: +endif1719: %t47 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.965, i64 1, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 - br label %logic.from1716 -logic.from1716: - br i1 %t51, label %logic.end1718, label %logic.rhs1717 -logic.rhs1717: + br label %logic.from1720 +logic.from1720: + br i1 %t51, label %logic.end1722, label %logic.rhs1721 +logic.rhs1721: %t52 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.966, i64 1, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br label %logic.rend1719 -logic.rend1719: - br label %logic.end1718 -logic.end1718: - %t57 = phi i1 [ true, %logic.from1716 ], [ %t56, %logic.rend1719 ] - br label %logic.from1720 -logic.from1720: - br i1 %t57, label %logic.end1722, label %logic.rhs1721 -logic.rhs1721: + br label %logic.rend1723 +logic.rend1723: + br label %logic.end1722 +logic.end1722: + %t57 = phi i1 [ true, %logic.from1720 ], [ %t56, %logic.rend1723 ] + br label %logic.from1724 +logic.from1724: + br i1 %t57, label %logic.end1726, label %logic.rhs1725 +logic.rhs1725: %t58 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t58, ptr %a59 store { ptr, i64, i64 } { ptr @.str.967, i64 1, i64 0 }, ptr %a60 %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) %t62 = icmp ne i32 %t61, 0 - br label %logic.rend1723 -logic.rend1723: - br label %logic.end1722 -logic.end1722: - %t63 = phi i1 [ true, %logic.from1720 ], [ %t62, %logic.rend1723 ] - br label %logic.from1724 -logic.from1724: - br i1 %t63, label %logic.end1726, label %logic.rhs1725 -logic.rhs1725: + br label %logic.rend1727 +logic.rend1727: + br label %logic.end1726 +logic.end1726: + %t63 = phi i1 [ true, %logic.from1724 ], [ %t62, %logic.rend1727 ] + br label %logic.from1728 +logic.from1728: + br i1 %t63, label %logic.end1730, label %logic.rhs1729 +logic.rhs1729: %t64 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.968, i64 1, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 - br label %logic.rend1727 -logic.rend1727: - br label %logic.end1726 -logic.end1726: - %t69 = phi i1 [ true, %logic.from1724 ], [ %t68, %logic.rend1727 ] - br i1 %t69, label %then1728, label %endif1730 -then1728: + br label %logic.rend1731 +logic.rend1731: + br label %logic.end1730 +logic.end1730: + %t69 = phi i1 [ true, %logic.from1728 ], [ %t68, %logic.rend1731 ] + br i1 %t69, label %then1732, label %endif1734 +then1732: ret i64 4 -endif1730: +endif1734: %t70 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t70, ptr %a71 store { ptr, i64, i64 } { ptr @.str.969, i64 1, i64 0 }, ptr %a72 %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) %t74 = icmp ne i32 %t73, 0 - br label %logic.from1731 -logic.from1731: - br i1 %t74, label %logic.end1733, label %logic.rhs1732 -logic.rhs1732: + br label %logic.from1735 +logic.from1735: + br i1 %t74, label %logic.end1737, label %logic.rhs1736 +logic.rhs1736: %t75 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.970, i64 1, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 - br label %logic.rend1734 -logic.rend1734: - br label %logic.end1733 -logic.end1733: - %t80 = phi i1 [ true, %logic.from1731 ], [ %t79, %logic.rend1734 ] - br label %logic.from1735 -logic.from1735: - br i1 %t80, label %logic.end1737, label %logic.rhs1736 -logic.rhs1736: + br label %logic.rend1738 +logic.rend1738: + br label %logic.end1737 +logic.end1737: + %t80 = phi i1 [ true, %logic.from1735 ], [ %t79, %logic.rend1738 ] + br label %logic.from1739 +logic.from1739: + br i1 %t80, label %logic.end1741, label %logic.rhs1740 +logic.rhs1740: %t81 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.971, i64 1, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br label %logic.rend1738 -logic.rend1738: - br label %logic.end1737 -logic.end1737: - %t86 = phi i1 [ true, %logic.from1735 ], [ %t85, %logic.rend1738 ] - br label %logic.from1739 -logic.from1739: - br i1 %t86, label %logic.end1741, label %logic.rhs1740 -logic.rhs1740: + br label %logic.rend1742 +logic.rend1742: + br label %logic.end1741 +logic.end1741: + %t86 = phi i1 [ true, %logic.from1739 ], [ %t85, %logic.rend1742 ] + br label %logic.from1743 +logic.from1743: + br i1 %t86, label %logic.end1745, label %logic.rhs1744 +logic.rhs1744: %t87 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t87, ptr %a88 store { ptr, i64, i64 } { ptr @.str.972, i64 2, i64 0 }, ptr %a89 %t90 = call i32 @finch_str_eq(ptr %a88, ptr %a89) %t91 = icmp ne i32 %t90, 0 - br label %logic.rend1742 -logic.rend1742: - br label %logic.end1741 -logic.end1741: - %t92 = phi i1 [ true, %logic.from1739 ], [ %t91, %logic.rend1742 ] - br label %logic.from1743 -logic.from1743: - br i1 %t92, label %logic.end1745, label %logic.rhs1744 -logic.rhs1744: + br label %logic.rend1746 +logic.rend1746: + br label %logic.end1745 +logic.end1745: + %t92 = phi i1 [ true, %logic.from1743 ], [ %t91, %logic.rend1746 ] + br label %logic.from1747 +logic.from1747: + br i1 %t92, label %logic.end1749, label %logic.rhs1748 +logic.rhs1748: %t93 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t93, ptr %a94 store { ptr, i64, i64 } { ptr @.str.973, i64 2, i64 0 }, ptr %a95 %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) %t97 = icmp ne i32 %t96, 0 - br label %logic.rend1746 -logic.rend1746: - br label %logic.end1745 -logic.end1745: - %t98 = phi i1 [ true, %logic.from1743 ], [ %t97, %logic.rend1746 ] - br label %logic.from1747 -logic.from1747: - br i1 %t98, label %logic.end1749, label %logic.rhs1748 -logic.rhs1748: + br label %logic.rend1750 +logic.rend1750: + br label %logic.end1749 +logic.end1749: + %t98 = phi i1 [ true, %logic.from1747 ], [ %t97, %logic.rend1750 ] + br label %logic.from1751 +logic.from1751: + br i1 %t98, label %logic.end1753, label %logic.rhs1752 +logic.rhs1752: %t99 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t99, ptr %a100 store { ptr, i64, i64 } { ptr @.str.974, i64 1, i64 0 }, ptr %a101 %t102 = call i32 @finch_str_eq(ptr %a100, ptr %a101) %t103 = icmp ne i32 %t102, 0 - br label %logic.rend1750 -logic.rend1750: - br label %logic.end1749 -logic.end1749: - %t104 = phi i1 [ true, %logic.from1747 ], [ %t103, %logic.rend1750 ] - br i1 %t104, label %then1751, label %endif1753 -then1751: + br label %logic.rend1754 +logic.rend1754: + br label %logic.end1753 +logic.end1753: + %t104 = phi i1 [ true, %logic.from1751 ], [ %t103, %logic.rend1754 ] + br i1 %t104, label %then1755, label %endif1757 +then1755: ret i64 5 -endif1753: +endif1757: ret i64 0 } @@ -20422,23 +20448,23 @@ entry: %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.sameLine(ptr %t5) %t7 = xor i1 %t6, true - br label %logic.from1754 -logic.from1754: - br i1 %t7, label %logic.end1756, label %logic.rhs1755 -logic.rhs1755: + br label %logic.from1758 +logic.from1758: + br i1 %t7, label %logic.end1760, label %logic.rhs1759 +logic.rhs1759: %t8 = load ptr, ptr %a1 %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.975, i64 2, i64 0 }) %t10 = xor i1 %t9, true - br label %logic.rend1757 -logic.rend1757: - br label %logic.end1756 -logic.end1756: - %t11 = phi i1 [ true, %logic.from1754 ], [ %t10, %logic.rend1757 ] - br i1 %t11, label %then1758, label %endif1760 -then1758: + br label %logic.rend1761 +logic.rend1761: + br label %logic.end1760 +logic.end1760: + %t11 = phi i1 [ true, %logic.from1758 ], [ %t10, %logic.rend1761 ] + br i1 %t11, label %then1762, label %endif1764 +then1762: %t12 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t12 -endif1760: +endif1764: %t13 = load ptr, ptr %a1 %t14 = call %S.ast.Node @finch.parser.node(ptr %t13, { ptr, i64, i64 } { ptr @.str.976, i64 2, i64 0 }) store %S.ast.Node %t14, ptr %a15 @@ -20461,8 +20487,8 @@ endif1760: store i64 %t26, ptr %t20 %t29 = load ptr, ptr %a1 %t30 = call i1 @finch.parser.at(ptr %t29, { ptr, i64, i64 } { ptr @.str.977, i64 1, i64 0 }) - br i1 %t30, label %then1761, label %else1762 -then1761: + br i1 %t30, label %then1765, label %else1766 +then1765: %t31 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 6 store i1 true, ptr %t31 %t32 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 @@ -20476,8 +20502,8 @@ then1761: %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 %t36 store %S.ast.Node %t35, ptr %t39 store i64 %t37, ptr %t33 - br label %endif1763 -else1762: + br label %endif1767 +else1766: %t40 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load ptr, ptr %a1 @@ -20489,8 +20515,8 @@ else1762: %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 store %S.ast.Node %t43, ptr %t47 store i64 %t45, ptr %t41 - br label %endif1763 -endif1763: + br label %endif1767 +endif1767: %t48 = load %S.ast.Node, ptr %a15 call void @finch.drop.S_ast_Node(ptr %a4) ret %S.ast.Node %t48 @@ -20516,25 +20542,25 @@ entry: store i64 %p1, ptr %a2 %t3 = load i64, ptr %a2 %t4 = icmp sgt i64 %t3, 5 - br i1 %t4, label %then1764, label %endif1766 -then1764: + br i1 %t4, label %then1768, label %endif1770 +then1768: %t5 = load ptr, ptr %a1 %t6 = call %S.ast.Node @finch.parser.parseUnary(ptr %t5) ret %S.ast.Node %t6 -endif1766: +endif1770: %t7 = load ptr, ptr %a1 %t8 = load i64, ptr %a2 %t9 = add i64 %t8, 1 %t10 = call %S.ast.Node @finch.parser.parseBinary(ptr %t7, i64 %t9) store %S.ast.Node %t10, ptr %a11 - br label %while.cond1767 -while.cond1767: + br label %while.cond1771 +while.cond1771: %t12 = load ptr, ptr %a1 %t13 = call i1 @finch.parser.sameLine(ptr %t12) - br label %logic.from1770 -logic.from1770: - br i1 %t13, label %logic.rhs1771, label %logic.end1772 -logic.rhs1771: + br label %logic.from1774 +logic.from1774: + br i1 %t13, label %logic.rhs1775, label %logic.end1776 +logic.rhs1775: %t14 = load ptr, ptr %a1 %t15 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t14) %t16 = call i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %t15) @@ -20542,13 +20568,13 @@ logic.rhs1771: call void @finch_str_drop(ptr %a17) %t18 = load i64, ptr %a2 %t19 = icmp eq i64 %t16, %t18 - br label %logic.rend1773 -logic.rend1773: - br label %logic.end1772 -logic.end1772: - %t20 = phi i1 [ false, %logic.from1770 ], [ %t19, %logic.rend1773 ] - br i1 %t20, label %while.body1768, label %while.end1769 -while.body1768: + br label %logic.rend1777 +logic.rend1777: + br label %logic.end1776 +logic.end1776: + %t20 = phi i1 [ false, %logic.from1774 ], [ %t19, %logic.rend1777 ] + br i1 %t20, label %while.body1772, label %while.end1773 +while.body1772: %t21 = load ptr, ptr %a1 %t22 = call %S.ast.Node @finch.parser.node(ptr %t21, { ptr, i64, i64 } { ptr @.str.978, i64 6, i64 0 }) store %S.ast.Node %t22, ptr %a23 @@ -20600,8 +20626,8 @@ while.body1768: store %S.ast.Node %t58, ptr %a59 call void @finch.drop.S_ast_Node(ptr %a59) call void @finch.drop.S_ast_Node(ptr %a23) - br label %while.cond1767 -while.end1769: + br label %while.cond1771 +while.end1773: %t60 = load %S.ast.Node, ptr %a11 ret %S.ast.Node %t60 } @@ -20619,8 +20645,8 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.979, i64 3, i64 0 }) - br i1 %t3, label %then1774, label %endif1776 -then1774: + br i1 %t3, label %then1778, label %endif1780 +then1778: %t4 = load ptr, ptr %a1 %t5 = call %S.ast.Node @finch.parser.node(ptr %t4, { ptr, i64, i64 } { ptr @.str.980, i64 3, i64 0 }) store %S.ast.Node %t5, ptr %a6 @@ -20641,33 +20667,33 @@ then1774: store i64 %t15, ptr %t11 %t18 = load %S.ast.Node, ptr %a6 ret %S.ast.Node %t18 -endif1776: +endif1780: %t19 = load ptr, ptr %a1 %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.981, i64 1, i64 0 }) - br label %logic.from1777 -logic.from1777: - br i1 %t20, label %logic.end1779, label %logic.rhs1778 -logic.rhs1778: - %t21 = load ptr, ptr %a1 - %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 }) - br label %logic.rend1780 -logic.rend1780: - br label %logic.end1779 -logic.end1779: - %t23 = phi i1 [ true, %logic.from1777 ], [ %t22, %logic.rend1780 ] br label %logic.from1781 logic.from1781: - br i1 %t23, label %logic.end1783, label %logic.rhs1782 + br i1 %t20, label %logic.end1783, label %logic.rhs1782 logic.rhs1782: - %t24 = load ptr, ptr %a1 - %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.983, i64 1, i64 0 }) + %t21 = load ptr, ptr %a1 + %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 }) br label %logic.rend1784 logic.rend1784: br label %logic.end1783 logic.end1783: - %t26 = phi i1 [ true, %logic.from1781 ], [ %t25, %logic.rend1784 ] - br i1 %t26, label %then1785, label %endif1787 -then1785: + %t23 = phi i1 [ true, %logic.from1781 ], [ %t22, %logic.rend1784 ] + br label %logic.from1785 +logic.from1785: + br i1 %t23, label %logic.end1787, label %logic.rhs1786 +logic.rhs1786: + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.983, i64 1, i64 0 }) + br label %logic.rend1788 +logic.rend1788: + br label %logic.end1787 +logic.end1787: + %t26 = phi i1 [ true, %logic.from1785 ], [ %t25, %logic.rend1788 ] + br i1 %t26, label %then1789, label %endif1791 +then1789: %t27 = load ptr, ptr %a1 %t28 = call %S.ast.Node @finch.parser.node(ptr %t27, { ptr, i64, i64 } { ptr @.str.984, i64 5, i64 0 }) store %S.ast.Node %t28, ptr %a29 @@ -20697,7 +20723,7 @@ then1785: store i64 %t45, ptr %t41 %t48 = load %S.ast.Node, ptr %a29 ret %S.ast.Node %t48 -endif1787: +endif1791: %t49 = load ptr, ptr %a1 %t50 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t49) ret %S.ast.Node %t50 @@ -20728,11 +20754,11 @@ entry: call void @finch.drop.S_lexer_Token(ptr %a5) %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic1788, label %ok1789 -panic1788: + br i1 %t7, label %panic1792, label %ok1793 +panic1792: call void @finch_panic(ptr @.str.987, i64 686, ptr @.str.988) unreachable -ok1789: +ok1793: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 2 %t9 = load i64, ptr %t8 %t10 = add i64 %t9, 1 @@ -20740,22 +20766,22 @@ ok1789: %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.989, i64 1, i64 0 }) %t13 = xor i1 %t12, true - br i1 %t13, label %then1790, label %endif1792 -then1790: - br label %while.cond1793 -while.cond1793: + br i1 %t13, label %then1794, label %endif1796 +then1794: + br label %while.cond1797 +while.cond1797: %t14 = load ptr, ptr %a1 %t15 = call i1 @finch.parser.at(ptr %t14, { ptr, i64, i64 } { ptr @.str.990, i64 1, i64 0 }) %t16 = xor i1 %t15, true - br i1 %t16, label %while.body1794, label %while.end1795 -while.body1794: + br i1 %t16, label %while.body1798, label %while.end1799 +while.body1798: store { ptr, i64, i64 } { ptr @.str.991, i64 0, i64 0 }, ptr %a17 %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.992, i64 5, i64 0 }) - br label %logic.from1796 -logic.from1796: - br i1 %t19, label %logic.rhs1797, label %logic.end1798 -logic.rhs1797: + br label %logic.from1800 +logic.from1800: + br i1 %t19, label %logic.rhs1801, label %logic.end1802 +logic.rhs1801: %t20 = load ptr, ptr %a1 %t21 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t20, i64 1) store { ptr, i64, i64 } %t21, ptr %a22 @@ -20764,13 +20790,13 @@ logic.rhs1797: %t25 = icmp ne i32 %t24, 0 store { ptr, i64, i64 } %t21, ptr %a26 call void @finch_str_drop(ptr %a26) - br label %logic.rend1799 -logic.rend1799: - br label %logic.end1798 -logic.end1798: - %t27 = phi i1 [ false, %logic.from1796 ], [ %t25, %logic.rend1799 ] - br i1 %t27, label %then1800, label %endif1802 -then1800: + br label %logic.rend1803 +logic.rend1803: + br label %logic.end1802 +logic.end1802: + %t27 = phi i1 [ false, %logic.from1800 ], [ %t25, %logic.rend1803 ] + br i1 %t27, label %then1804, label %endif1806 +then1804: %t28 = load ptr, ptr %a1 %t29 = call %S.lexer.Token @finch.parser.next(ptr %t28) %t30 = extractvalue %S.lexer.Token %t29, 1 @@ -20787,15 +20813,15 @@ then1800: %t38 = call %S.lexer.Token @finch.parser.next(ptr %t37) store %S.lexer.Token %t38, ptr %a39 call void @finch.drop.S_lexer_Token(ptr %a39) - br label %endif1802 -endif1802: + br label %endif1806 +endif1806: %t40 = load ptr, ptr %a2 %t41 = icmp eq ptr %t40, null - br i1 %t41, label %panic1803, label %ok1804 -panic1803: + br i1 %t41, label %panic1807, label %ok1808 +panic1807: call void @finch_panic(ptr @.str.994, i64 694, ptr @.str.995) unreachable -ok1804: +ok1808: %t42 = getelementptr inbounds %S.ast.Node, ptr %t40, i32 0, i32 10 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t44 = load { ptr, i64, i64 }, ptr %a17 @@ -20811,11 +20837,11 @@ ok1804: store i64 %t49, ptr %t43 %t52 = load ptr, ptr %a2 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic1805, label %ok1806 -panic1805: + br i1 %t53, label %panic1809, label %ok1810 +panic1809: call void @finch_panic(ptr @.str.996, i64 695, ptr @.str.997) unreachable -ok1806: +ok1810: %t54 = getelementptr inbounds %S.ast.Node, ptr %t52, i32 0, i32 9 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load ptr, ptr %a1 @@ -20830,23 +20856,23 @@ ok1806: %t62 = load ptr, ptr %a1 %t63 = call i1 @finch.parser.accept(ptr %t62, { ptr, i64, i64 } { ptr @.str.998, i64 1, i64 0 }) %t64 = xor i1 %t63, true - br i1 %t64, label %then1807, label %endif1809 -then1807: + br i1 %t64, label %then1811, label %endif1813 +then1811: call void @finch_str_drop(ptr %a17) - br label %while.end1795 -endif1809: + br label %while.end1799 +endif1813: call void @finch_str_drop(ptr %a17) - br label %while.cond1793 -while.end1795: - br label %endif1792 -endif1792: + br label %while.cond1797 +while.end1799: + br label %endif1796 +endif1796: %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic1810, label %ok1811 -panic1810: + br i1 %t66, label %panic1814, label %ok1815 +panic1814: call void @finch_panic(ptr @.str.999, i64 701, ptr @.str.1000) unreachable -ok1811: +ok1815: %t67 = getelementptr inbounds %S.parser.Parser, ptr %t65, i32 0, i32 2 %t68 = load i64, ptr %t67 %t69 = sub i64 %t68, 1 @@ -20887,16 +20913,16 @@ entry: %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.parsePrimary(ptr %t2) store %S.ast.Node %t3, ptr %a4 - br label %while.cond1812 -while.cond1812: + br label %while.cond1816 +while.cond1816: %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.sameLine(ptr %t5) - br i1 %t6, label %while.body1813, label %while.end1814 -while.body1813: + br i1 %t6, label %while.body1817, label %while.end1818 +while.body1817: %t7 = load ptr, ptr %a1 %t8 = call i1 @finch.parser.at(ptr %t7, { ptr, i64, i64 } { ptr @.str.1003, i64 1, i64 0 }) - br i1 %t8, label %then1815, label %else1816 -then1815: + br i1 %t8, label %then1819, label %else1820 +then1819: %t9 = load ptr, ptr %a1 %t10 = call %S.ast.Node @finch.parser.node(ptr %t9, { ptr, i64, i64 } { ptr @.str.1004, i64 6, i64 0 }) store %S.ast.Node %t10, ptr %a11 @@ -20932,23 +20958,23 @@ then1815: store i64 %t32, ptr %t26 %t35 = load ptr, ptr %a1 %t36 = call i1 @finch.parser.at(ptr %t35, { ptr, i64, i64 } { ptr @.str.1007, i64 1, i64 0 }) - br label %logic.from1818 -logic.from1818: - br i1 %t36, label %logic.rhs1819, label %logic.end1820 -logic.rhs1819: + br label %logic.from1822 +logic.from1822: + br i1 %t36, label %logic.rhs1823, label %logic.end1824 +logic.rhs1823: %t37 = load ptr, ptr %a1 %t38 = call %S.lexer.Token @finch.parser.cur(ptr %t37) %t39 = extractvalue %S.lexer.Token %t38, 4 store %S.lexer.Token %t38, ptr %a40 call void @finch.drop.S_lexer_Token(ptr %a40) %t41 = xor i1 %t39, true - br label %logic.rend1821 -logic.rend1821: - br label %logic.end1820 -logic.end1820: - %t42 = phi i1 [ false, %logic.from1818 ], [ %t41, %logic.rend1821 ] - br i1 %t42, label %then1822, label %endif1824 -then1822: + br label %logic.rend1825 +logic.rend1825: + br label %logic.end1824 +logic.end1824: + %t42 = phi i1 [ false, %logic.from1822 ], [ %t41, %logic.rend1825 ] + br i1 %t42, label %then1826, label %endif1828 +then1826: %t43 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } { ptr @.str.1008, i64 6, i64 0 }, ptr %t43 @@ -20956,8 +20982,8 @@ then1822: call void @finch_str_drop(ptr %a45) %t46 = load ptr, ptr %a1 call void @finch.parser.parseArgs(ptr %t46, ptr %a11) - br label %endif1824 -endif1824: + br label %endif1828 +endif1828: %t47 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t47, ptr %a48 call void @finch.copy.S_ast_Node(ptr %a49, ptr %a48) @@ -20967,12 +20993,12 @@ endif1824: store %S.ast.Node %t51, ptr %a52 call void @finch.drop.S_ast_Node(ptr %a52) call void @finch.drop.S_ast_Node(ptr %a11) - br label %endif1817 -else1816: + br label %endif1821 +else1820: %t53 = load ptr, ptr %a1 %t54 = call i1 @finch.parser.at(ptr %t53, { ptr, i64, i64 } { ptr @.str.1009, i64 1, i64 0 }) - br i1 %t54, label %then1825, label %else1826 -then1825: + br i1 %t54, label %then1829, label %else1830 +then1829: %t55 = load ptr, ptr %a1 %t56 = call %S.ast.Node @finch.parser.node(ptr %t55, { ptr, i64, i64 } { ptr @.str.1010, i64 5, i64 0 }) store %S.ast.Node %t56, ptr %a57 @@ -20982,11 +21008,11 @@ then1825: call void @finch.drop.S_lexer_Token(ptr %a60) %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null - br i1 %t62, label %panic1828, label %ok1829 -panic1828: + br i1 %t62, label %panic1832, label %ok1833 +panic1832: call void @finch_panic(ptr @.str.1011, i64 721, ptr @.str.1012) unreachable -ok1829: +ok1833: %t63 = getelementptr inbounds %S.parser.Parser, ptr %t61, i32 0, i32 2 %t64 = load i64, ptr %t63 %t65 = add i64 %t64, 1 @@ -21017,11 +21043,11 @@ ok1829: store i64 %t81, ptr %t77 %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null - br i1 %t85, label %panic1830, label %ok1831 -panic1830: + br i1 %t85, label %panic1834, label %ok1835 +panic1834: call void @finch_panic(ptr @.str.1013, i64 724, ptr @.str.1014) unreachable -ok1831: +ok1835: %t86 = getelementptr inbounds %S.parser.Parser, ptr %t84, i32 0, i32 2 %t87 = load i64, ptr %t86 %t88 = sub i64 %t87, 1 @@ -21039,15 +21065,15 @@ ok1831: store %S.ast.Node %t96, ptr %a97 call void @finch.drop.S_ast_Node(ptr %a97) call void @finch.drop.S_ast_Node(ptr %a57) - br label %endif1827 -else1826: + br label %endif1831 +else1830: %t98 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t98 -endif1827: - br label %endif1817 -endif1817: - br label %while.cond1812 -while.end1814: +endif1831: + br label %endif1821 +endif1821: + br label %while.cond1816 +while.end1818: %t99 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t99 } @@ -21156,36 +21182,36 @@ entry: store { ptr, i64, i64 } { ptr @.str.1018, i64 3, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.from1832 -logic.from1832: - br i1 %t18, label %logic.end1834, label %logic.rhs1833 -logic.rhs1833: + br label %logic.from1836 +logic.from1836: + br i1 %t18, label %logic.end1838, label %logic.rhs1837 +logic.rhs1837: %t19 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1019, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend1835 -logic.rend1835: - br label %logic.end1834 -logic.end1834: - %t24 = phi i1 [ true, %logic.from1832 ], [ %t23, %logic.rend1835 ] - br label %logic.from1836 -logic.from1836: - br i1 %t24, label %logic.end1838, label %logic.rhs1837 -logic.rhs1837: + br label %logic.rend1839 +logic.rend1839: + br label %logic.end1838 +logic.end1838: + %t24 = phi i1 [ true, %logic.from1836 ], [ %t23, %logic.rend1839 ] + br label %logic.from1840 +logic.from1840: + br i1 %t24, label %logic.end1842, label %logic.rhs1841 +logic.rhs1841: %t25 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1020, i64 4, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br label %logic.rend1839 -logic.rend1839: - br label %logic.end1838 -logic.end1838: - %t30 = phi i1 [ true, %logic.from1836 ], [ %t29, %logic.rend1839 ] - br i1 %t30, label %then1840, label %endif1842 -then1840: + br label %logic.rend1843 +logic.rend1843: + br label %logic.end1842 +logic.end1842: + %t30 = phi i1 [ true, %logic.from1840 ], [ %t29, %logic.rend1843 ] + br i1 %t30, label %then1844, label %endif1846 +then1844: %t31 = load ptr, ptr %a1 %t32 = call %S.lexer.Token @finch.parser.next(ptr %t31) store %S.lexer.Token %t32, ptr %a33 @@ -21213,14 +21239,14 @@ then1840: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t49 -endif1842: +endif1846: %t50 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.1021, i64 6, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %then1843, label %endif1845 -then1843: + br i1 %t54, label %then1847, label %endif1849 +then1847: %t55 = load ptr, ptr %a1 %t56 = call %S.lexer.Token @finch.parser.next(ptr %t55) store %S.lexer.Token %t56, ptr %a57 @@ -21244,28 +21270,28 @@ then1843: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t69 -endif1845: +endif1849: %t70 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t70, ptr %a71 store { ptr, i64, i64 } { ptr @.str.1023, i64 4, i64 0 }, ptr %a72 %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) %t74 = icmp ne i32 %t73, 0 - br label %logic.from1846 -logic.from1846: - br i1 %t74, label %logic.end1848, label %logic.rhs1847 -logic.rhs1847: + br label %logic.from1850 +logic.from1850: + br i1 %t74, label %logic.end1852, label %logic.rhs1851 +logic.rhs1851: %t75 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.1024, i64 5, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 - br label %logic.rend1849 -logic.rend1849: - br label %logic.end1848 -logic.end1848: - %t80 = phi i1 [ true, %logic.from1846 ], [ %t79, %logic.rend1849 ] - br i1 %t80, label %then1850, label %endif1852 -then1850: + br label %logic.rend1853 +logic.rend1853: + br label %logic.end1852 +logic.end1852: + %t80 = phi i1 [ true, %logic.from1850 ], [ %t79, %logic.rend1853 ] + br i1 %t80, label %then1854, label %endif1856 +then1854: %t81 = load ptr, ptr %a1 %t82 = call %S.lexer.Token @finch.parser.next(ptr %t81) store %S.lexer.Token %t82, ptr %a83 @@ -21288,14 +21314,14 @@ then1850: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t94 -endif1852: +endif1856: %t95 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.1026, i64 4, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 - br i1 %t99, label %then1853, label %endif1855 -then1853: + br i1 %t99, label %then1857, label %endif1859 +then1857: %t100 = load ptr, ptr %a1 %t101 = call %S.lexer.Token @finch.parser.next(ptr %t100) store %S.lexer.Token %t101, ptr %a102 @@ -21309,25 +21335,25 @@ then1853: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t106 -endif1855: +endif1859: %t107 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t107, ptr %a108 store { ptr, i64, i64 } { ptr @.str.1028, i64 1, i64 0 }, ptr %a109 %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) %t111 = icmp ne i32 %t110, 0 - br i1 %t111, label %then1856, label %endif1858 -then1856: + br i1 %t111, label %then1860, label %endif1862 +then1860: %t112 = load ptr, ptr %a1 %t113 = call %S.lexer.Token @finch.parser.next(ptr %t112) store %S.lexer.Token %t113, ptr %a114 call void @finch.drop.S_lexer_Token(ptr %a114) %t115 = load ptr, ptr %a1 %t116 = icmp eq ptr %t115, null - br i1 %t116, label %panic1859, label %ok1860 -panic1859: + br i1 %t116, label %panic1863, label %ok1864 +panic1863: call void @finch_panic(ptr @.str.1029, i64 763, ptr @.str.1030) unreachable -ok1860: +ok1864: %t117 = getelementptr inbounds %S.parser.Parser, ptr %t115, i32 0, i32 2 %t118 = load i64, ptr %t117 %t119 = add i64 %t118, 1 @@ -21337,11 +21363,11 @@ ok1860: store %S.ast.Node %t121, ptr %a122 %t123 = load ptr, ptr %a1 %t124 = icmp eq ptr %t123, null - br i1 %t124, label %panic1861, label %ok1862 -panic1861: + br i1 %t124, label %panic1865, label %ok1866 +panic1865: call void @finch_panic(ptr @.str.1031, i64 765, ptr @.str.1032) unreachable -ok1862: +ok1866: %t125 = getelementptr inbounds %S.parser.Parser, ptr %t123, i32 0, i32 2 %t126 = load i64, ptr %t125 %t127 = sub i64 %t126, 1 @@ -21355,28 +21381,28 @@ ok1862: call void @finch.drop.S_ast_Node(ptr %a7) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t131 -endif1858: +endif1862: %t132 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t132, ptr %a133 store { ptr, i64, i64 } { ptr @.str.1035, i64 5, i64 0 }, ptr %a134 %t135 = call i32 @finch_str_eq(ptr %a133, ptr %a134) %t136 = icmp ne i32 %t135, 0 - br i1 %t136, label %then1863, label %endif1865 -then1863: + br i1 %t136, label %then1867, label %endif1869 +then1867: %t137 = load ptr, ptr %a1 %t138 = call %S.ast.Node @finch.parser.parseMatch(ptr %t137, i1 true) call void @finch_str_drop(ptr %a13) call void @finch.drop.S_ast_Node(ptr %a7) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t138 -endif1865: +endif1869: %t139 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t139, ptr %a140 store { ptr, i64, i64 } { ptr @.str.1036, i64 1, i64 0 }, ptr %a141 %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) %t143 = icmp ne i32 %t142, 0 - br i1 %t143, label %then1866, label %endif1868 -then1866: + br i1 %t143, label %then1870, label %endif1872 +then1870: %t144 = load ptr, ptr %a1 %t145 = call %S.lexer.Token @finch.parser.next(ptr %t144) store %S.lexer.Token %t145, ptr %a146 @@ -21388,21 +21414,21 @@ then1866: call void @finch_str_drop(ptr %a149) %t150 = load ptr, ptr %a1 %t151 = icmp eq ptr %t150, null - br i1 %t151, label %panic1869, label %ok1870 -panic1869: + br i1 %t151, label %panic1873, label %ok1874 +panic1873: call void @finch_panic(ptr @.str.1038, i64 775, ptr @.str.1039) unreachable -ok1870: +ok1874: %t152 = getelementptr inbounds %S.parser.Parser, ptr %t150, i32 0, i32 2 %t153 = load i64, ptr %t152 %t154 = add i64 %t153, 1 store i64 %t154, ptr %t152 %t155 = load ptr, ptr %a1 %t156 = call i1 @finch.parser.at(ptr %t155, { ptr, i64, i64 } { ptr @.str.1040, i64 1, i64 0 }) - br label %logic.from1871 -logic.from1871: - br i1 %t156, label %logic.rhs1872, label %logic.end1873 -logic.rhs1872: + br label %logic.from1875 +logic.from1875: + br i1 %t156, label %logic.rhs1876, label %logic.end1877 +logic.rhs1876: %t157 = load ptr, ptr %a1 %t158 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t157, i64 1) store { ptr, i64, i64 } %t158, ptr %a159 @@ -21411,13 +21437,13 @@ logic.rhs1872: %t162 = icmp ne i32 %t161, 0 store { ptr, i64, i64 } %t158, ptr %a163 call void @finch_str_drop(ptr %a163) - br label %logic.rend1874 -logic.rend1874: - br label %logic.end1873 -logic.end1873: - %t164 = phi i1 [ false, %logic.from1871 ], [ %t162, %logic.rend1874 ] - br i1 %t164, label %then1875, label %endif1877 -then1875: + br label %logic.rend1878 +logic.rend1878: + br label %logic.end1877 +logic.end1877: + %t164 = phi i1 [ false, %logic.from1875 ], [ %t162, %logic.rend1878 ] + br i1 %t164, label %then1879, label %endif1881 +then1879: %t165 = load ptr, ptr %a1 %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) store %S.lexer.Token %t166, ptr %a167 @@ -21427,15 +21453,15 @@ then1875: store { ptr, i64, i64 } { ptr @.str.1042, i64 3, i64 0 }, ptr %t168 store { ptr, i64, i64 } %t169, ptr %a170 call void @finch_str_drop(ptr %a170) - br label %endif1877 -endif1877: - br label %while.cond1878 -while.cond1878: + br label %endif1881 +endif1881: + br label %while.cond1882 +while.cond1882: %t171 = load ptr, ptr %a1 %t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.1043, i64 1, i64 0 }) %t173 = xor i1 %t172, true - br i1 %t173, label %while.body1879, label %while.end1880 -while.body1879: + br i1 %t173, label %while.body1883, label %while.end1884 +while.body1883: %t174 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1 %t176 = load ptr, ptr %a1 @@ -21451,34 +21477,34 @@ while.body1879: %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 %t184 = load i64, ptr %t183 %t185 = icmp eq i64 %t184, 1 - br label %logic.from1881 -logic.from1881: - br i1 %t185, label %logic.rhs1882, label %logic.end1883 -logic.rhs1882: + br label %logic.from1885 +logic.from1885: + br i1 %t185, label %logic.rhs1886, label %logic.end1887 +logic.rhs1886: %t186 = load ptr, ptr %a1 %t187 = call i1 @finch.parser.at(ptr %t186, { ptr, i64, i64 } { ptr @.str.1044, i64 1, i64 0 }) - br label %logic.rend1884 -logic.rend1884: - br label %logic.end1883 -logic.end1883: - %t188 = phi i1 [ false, %logic.from1881 ], [ %t187, %logic.rend1884 ] - br i1 %t188, label %then1885, label %endif1887 -then1885: + br label %logic.rend1888 +logic.rend1888: + br label %logic.end1887 +logic.end1887: + %t188 = phi i1 [ false, %logic.from1885 ], [ %t187, %logic.rend1888 ] + br i1 %t188, label %then1889, label %endif1891 +then1889: %t189 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t190 = load { ptr, i64, i64 }, ptr %t189 store { ptr, i64, i64 } { ptr @.str.1045, i64 3, i64 0 }, ptr %t189 store { ptr, i64, i64 } %t190, ptr %a191 call void @finch_str_drop(ptr %a191) - br label %endif1887 -endif1887: + br label %endif1891 +endif1891: %t192 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t193 = load { ptr, i64, i64 }, ptr %t192 store { ptr, i64, i64 } %t193, ptr %a194 store { ptr, i64, i64 } { ptr @.str.1046, i64 3, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 - br i1 %t197, label %then1888, label %endif1890 -then1888: + br i1 %t197, label %then1892, label %endif1894 +then1892: %t198 = load ptr, ptr %a1 %t199 = call %S.lexer.Token @finch.parser.expect(ptr %t198, { ptr, i64, i64 } { ptr @.str.1047, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1048, i64 41, i64 0 }) store %S.lexer.Token %t199, ptr %a200 @@ -21494,24 +21520,24 @@ then1888: %t208 = getelementptr inbounds %S.ast.Node, ptr %t207, i64 %t205 store %S.ast.Node %t204, ptr %t208 store i64 %t206, ptr %t202 - br label %endif1890 -endif1890: + br label %endif1894 +endif1894: %t209 = load ptr, ptr %a1 %t210 = call i1 @finch.parser.accept(ptr %t209, { ptr, i64, i64 } { ptr @.str.1049, i64 1, i64 0 }) %t211 = xor i1 %t210, true - br i1 %t211, label %then1891, label %endif1893 -then1891: - br label %while.end1880 -endif1893: - br label %while.cond1878 -while.end1880: + br i1 %t211, label %then1895, label %endif1897 +then1895: + br label %while.end1884 +endif1897: + br label %while.cond1882 +while.end1884: %t212 = load ptr, ptr %a1 %t213 = icmp eq ptr %t212, null - br i1 %t213, label %panic1894, label %ok1895 -panic1894: + br i1 %t213, label %panic1898, label %ok1899 +panic1898: call void @finch_panic(ptr @.str.1050, i64 793, ptr @.str.1051) unreachable -ok1895: +ok1899: %t214 = getelementptr inbounds %S.parser.Parser, ptr %t212, i32 0, i32 2 %t215 = load i64, ptr %t214 %t216 = sub i64 %t215, 1 @@ -21524,14 +21550,14 @@ ok1895: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t220 -endif1868: +endif1872: %t221 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t221, ptr %a222 store { ptr, i64, i64 } { ptr @.str.1054, i64 5, i64 0 }, ptr %a223 %t224 = call i32 @finch_str_eq(ptr %a222, ptr %a223) %t225 = icmp ne i32 %t224, 0 - br i1 %t225, label %then1896, label %endif1898 -then1896: + br i1 %t225, label %then1900, label %endif1902 +then1900: %t226 = load ptr, ptr %a1 %t227 = call %S.lexer.Token @finch.parser.next(ptr %t226) store %S.lexer.Token %t227, ptr %a228 @@ -21548,36 +21574,36 @@ then1896: call void @finch_str_drop(ptr %a236) %t237 = load ptr, ptr %a1 %t238 = call i1 @finch.parser.at(ptr %t237, { ptr, i64, i64 } { ptr @.str.1055, i64 1, i64 0 }) - br label %logic.from1899 -logic.from1899: - br i1 %t238, label %logic.rhs1900, label %logic.end1901 -logic.rhs1900: + br label %logic.from1903 +logic.from1903: + br i1 %t238, label %logic.rhs1904, label %logic.end1905 +logic.rhs1904: %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null - br i1 %t240, label %panic1902, label %ok1903 -panic1902: + br i1 %t240, label %panic1906, label %ok1907 +panic1906: call void @finch_panic(ptr @.str.1056, i64 800, ptr @.str.1057) unreachable -ok1903: +ok1907: %t241 = getelementptr inbounds %S.parser.Parser, ptr %t239, i32 0, i32 0 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null - br i1 %t243, label %panic1904, label %ok1905 -panic1904: + br i1 %t243, label %panic1908, label %ok1909 +panic1908: call void @finch_panic(ptr @.str.1058, i64 800, ptr @.str.1059) unreachable -ok1905: +ok1909: %t244 = getelementptr inbounds %S.parser.Parser, ptr %t242, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = sub i64 %t245, 1 %t247 = load { ptr, i64, i64 }, ptr %t241 %t248 = extractvalue { ptr, i64, i64 } %t247, 1 %t249 = icmp uge i64 %t246, %t248 - br i1 %t249, label %range1906, label %inrange1907 -range1906: + br i1 %t249, label %range1910, label %inrange1911 +range1910: call void @finch_panic_index(ptr @.str.1060, i64 800, i64 %t246, i64 %t248) unreachable -inrange1907: +inrange1911: %t250 = extractvalue { ptr, i64, i64 } %t247, 0 %t251 = getelementptr inbounds %S.lexer.Token, ptr %t250, i64 %t246 %t252 = getelementptr inbounds %S.lexer.Token, ptr %t251, i32 0, i32 0 @@ -21586,24 +21612,24 @@ inrange1907: store { ptr, i64, i64 } { ptr @.str.1061, i64 5, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp ne i32 %t256, 0 - br label %logic.rend1908 -logic.rend1908: - br label %logic.end1901 -logic.end1901: - %t258 = phi i1 [ false, %logic.from1899 ], [ %t257, %logic.rend1908 ] - br label %logic.from1909 -logic.from1909: - br i1 %t258, label %logic.rhs1910, label %logic.end1911 -logic.rhs1910: - %t259 = load ptr, ptr %a1 - %t260 = call i1 @finch.parser.genericCallAheadFrom(ptr %t259) br label %logic.rend1912 logic.rend1912: - br label %logic.end1911 -logic.end1911: - %t261 = phi i1 [ false, %logic.from1909 ], [ %t260, %logic.rend1912 ] - br i1 %t261, label %then1913, label %endif1915 -then1913: + br label %logic.end1905 +logic.end1905: + %t258 = phi i1 [ false, %logic.from1903 ], [ %t257, %logic.rend1912 ] + br label %logic.from1913 +logic.from1913: + br i1 %t258, label %logic.rhs1914, label %logic.end1915 +logic.rhs1914: + %t259 = load ptr, ptr %a1 + %t260 = call i1 @finch.parser.genericCallAheadFrom(ptr %t259) + br label %logic.rend1916 +logic.rend1916: + br label %logic.end1915 +logic.end1915: + %t261 = phi i1 [ false, %logic.from1913 ], [ %t260, %logic.rend1916 ] + br i1 %t261, label %then1917, label %endif1919 +then1917: %t262 = load ptr, ptr %a1 %t263 = call %S.lexer.Token @finch.parser.next(ptr %t262) store %S.lexer.Token %t263, ptr %a264 @@ -21614,10 +21640,10 @@ then1913: store %S.ast.Type %t265, ptr %t266 store %S.ast.Type %t267, ptr %a268 call void @finch.drop.S_ast_Type(ptr %a268) - br label %while.cond1916 -while.cond1916: - br label %while.body1917 -while.body1917: + br label %while.cond1920 +while.cond1920: + br label %while.body1921 +while.body1921: %t269 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 %t270 = getelementptr inbounds %S.ast.Type, ptr %t269, i32 0, i32 1 %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i32 0, i32 1 @@ -21633,12 +21659,12 @@ while.body1917: %t278 = load ptr, ptr %a1 %t279 = call i1 @finch.parser.accept(ptr %t278, { ptr, i64, i64 } { ptr @.str.1063, i64 1, i64 0 }) %t280 = xor i1 %t279, true - br i1 %t280, label %then1919, label %endif1921 -then1919: - br label %while.end1918 -endif1921: - br label %while.cond1916 -while.end1918: + br i1 %t280, label %then1923, label %endif1925 +then1923: + br label %while.end1922 +endif1925: + br label %while.cond1920 +while.end1922: %t281 = load ptr, ptr %a1 %t282 = call %S.lexer.Token @finch.parser.expect(ptr %t281, { ptr, i64, i64 } { ptr @.str.1064, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1065, i64 28, i64 0 }) store %S.lexer.Token %t282, ptr %a283 @@ -21654,26 +21680,26 @@ while.end1918: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t288 -endif1915: +endif1919: %t289 = load ptr, ptr %a1 %t290 = call i1 @finch.parser.at(ptr %t289, { ptr, i64, i64 } { ptr @.str.1067, i64 1, i64 0 }) - br label %logic.from1922 -logic.from1922: - br i1 %t290, label %logic.rhs1923, label %logic.end1924 -logic.rhs1923: + br label %logic.from1926 +logic.from1926: + br i1 %t290, label %logic.rhs1927, label %logic.end1928 +logic.rhs1927: %t291 = load ptr, ptr %a1 %t292 = call %S.lexer.Token @finch.parser.cur(ptr %t291) %t293 = extractvalue %S.lexer.Token %t292, 4 store %S.lexer.Token %t292, ptr %a294 call void @finch.drop.S_lexer_Token(ptr %a294) %t295 = xor i1 %t293, true - br label %logic.rend1925 -logic.rend1925: - br label %logic.end1924 -logic.end1924: - %t296 = phi i1 [ false, %logic.from1922 ], [ %t295, %logic.rend1925 ] - br i1 %t296, label %then1926, label %endif1928 -then1926: + br label %logic.rend1929 +logic.rend1929: + br label %logic.end1928 +logic.end1928: + %t296 = phi i1 [ false, %logic.from1926 ], [ %t295, %logic.rend1929 ] + br i1 %t296, label %then1930, label %endif1932 +then1930: %t297 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t298 = load { ptr, i64, i64 }, ptr %t297 store { ptr, i64, i64 } { ptr @.str.1068, i64 4, i64 0 }, ptr %t297 @@ -21685,7 +21711,7 @@ then1926: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t301 -endif1928: +endif1932: %t302 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t303 = load { ptr, i64, i64 }, ptr %t302 store { ptr, i64, i64 } { ptr @.str.1069, i64 3, i64 0 }, ptr %t302 @@ -21695,7 +21721,7 @@ endif1928: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t305 -endif1898: +endif1902: %t306 = load ptr, ptr %a1 %t307 = load %S.lexer.Token, ptr %a4 %t308 = load %S.lexer.Token, ptr %a4 @@ -21730,20 +21756,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond1929 -n.cond1929: + br label %n.cond1933 +n.cond1933: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body1930, label %n.end1931 -n.body1930: + br i1 %t7, label %n.body1934, label %n.end1935 +n.body1934: %t8 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lexer.Token, ptr %t2, i64 %t6 call void @finch.copy.S_lexer_Token(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond1929 -n.end1931: + br label %n.cond1933 +n.end1935: ret void } @@ -21921,45 +21947,45 @@ entry: store i64 %p7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic1932, label %ok1933 -panic1932: + br i1 %t10, label %panic1936, label %ok1937 +panic1936: call void @finch_panic(ptr @.str.1081, i64 232, ptr @.str.1082) unreachable -ok1933: +ok1937: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 %t12 = load i1, ptr %t11 %t13 = xor i1 %t12, true - br i1 %t13, label %then1934, label %endif1936 -then1934: + br i1 %t13, label %then1938, label %endif1940 +then1938: ret void -endif1936: +endif1940: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic1937, label %ok1938 -panic1937: + br i1 %t15, label %panic1941, label %ok1942 +panic1941: call void @finch_panic(ptr @.str.1083, i64 235, ptr @.str.1084) unreachable -ok1938: +ok1942: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 29 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic1939, label %ok1940 -panic1939: + br i1 %t19, label %panic1943, label %ok1944 +panic1943: call void @finch_panic(ptr @.str.1086, i64 235, ptr @.str.1087) unreachable -ok1940: +ok1944: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t20 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 - br i1 %t25, label %range1941, label %inrange1942 -range1941: + br i1 %t25, label %range1945, label %inrange1946 +range1945: call void @finch_panic_index(ptr @.str.1088, i64 235, i64 %t22, i64 %t24) unreachable -inrange1942: +inrange1946: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 %t28 = load { ptr, i64, i64 }, ptr %t27 @@ -22171,23 +22197,23 @@ entry: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 0, ptr %a6 - br label %for.cond1943 -for.cond1943: + br label %for.cond1947 +for.cond1947: %t7 = load i64, ptr %a6 %t8 = icmp slt i64 %t7, %t5 - br i1 %t8, label %for.body1944, label %for.end1946 -for.body1944: + br i1 %t8, label %for.body1948, label %for.end1950 +for.body1948: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 %t11 = load i64, ptr %a6 %t12 = load { ptr, i64, i64 }, ptr %t10 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 - br i1 %t14, label %range1947, label %inrange1948 -range1947: + br i1 %t14, label %range1951, label %inrange1952 +range1951: call void @finch_panic_index(ptr @.str.1096, i64 242, i64 %t11, i64 %t13) unreachable -inrange1948: +inrange1952: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t11 %t17 = load %S.ast.Type, ptr %t16 @@ -22203,11 +22229,11 @@ inrange1948: %t26 = load { ptr, i64, i64 }, ptr %t24 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 - br i1 %t28, label %range1949, label %inrange1950 -range1949: + br i1 %t28, label %range1953, label %inrange1954 +range1953: call void @finch_panic_index(ptr @.str.1098, i64 242, i64 %t25, i64 %t27) unreachable -inrange1950: +inrange1954: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t25 %t31 = load { ptr, i64, i64 }, ptr %t30 @@ -22224,13 +22250,13 @@ inrange1950: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t37 store { ptr, i64, i64 } %t36, ptr %t40 store i64 %t38, ptr %t9 - br label %for.step1945 -for.step1945: + br label %for.step1949 +for.step1949: %t41 = load i64, ptr %a6 %t42 = add i64 %t41, 1 store i64 %t42, ptr %a6 - br label %for.cond1943 -for.end1946: + br label %for.cond1947 +for.end1950: %t43 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 @@ -22241,8 +22267,8 @@ for.end1946: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 %t51 = load i64, ptr %t50 %t52 = icmp sgt i64 %t51, 0 - br i1 %t52, label %then1951, label %endif1953 -then1951: + br i1 %t52, label %then1955, label %endif1957 +then1955: %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a56 @@ -22261,8 +22287,8 @@ then1951: store { ptr, i64, i64 } %t65, ptr %a48 store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) - br label %endif1953 -endif1953: + br label %endif1957 +endif1957: %t68 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } { ptr @.str.1100, i64 3, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 @@ -22295,8 +22321,8 @@ endif1953: store { ptr, i64, i64 } %t92, ptr %a93 %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 9 %t95 = load i1, ptr %t94 - br i1 %t95, label %then1954, label %else1955 -then1954: + br i1 %t95, label %then1958, label %else1959 +then1958: %t96 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t97 = getelementptr inbounds %S.ast.Type, ptr %t96, i32 0, i32 0 %t98 = load { ptr, i64, i64 }, ptr %t97 @@ -22304,8 +22330,8 @@ then1954: store { ptr, i64, i64 } { ptr @.str.1104, i64 4, i64 0 }, ptr %a100 %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) %t102 = icmp ne i32 %t101, 0 - br i1 %t102, label %then1957, label %else1958 -then1957: + br i1 %t102, label %then1961, label %else1962 +then1961: %t103 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t103, ptr %a105 store { ptr, i64, i64 } { ptr @.str.1105, i64 5, i64 0 }, ptr %a106 @@ -22315,8 +22341,8 @@ then1957: store { ptr, i64, i64 } %t107, ptr %a93 store { ptr, i64, i64 } %t108, ptr %a109 call void @finch_str_drop(ptr %a109) - br label %endif1959 -else1958: + br label %endif1963 +else1962: %t110 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t110, ptr %a112 store { ptr, i64, i64 } { ptr @.str.1106, i64 4, i64 0 }, ptr %a113 @@ -22343,10 +22369,10 @@ else1958: store { ptr, i64, i64 } %t128, ptr %a93 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_drop(ptr %a130) - br label %endif1959 -endif1959: - br label %endif1956 -else1955: + br label %endif1963 +endif1963: + br label %endif1960 +else1959: %t131 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 @@ -22354,8 +22380,8 @@ else1955: store { ptr, i64, i64 } { ptr @.str.1108, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp eq i32 %t136, 0 - br i1 %t137, label %then1960, label %endif1962 -then1960: + br i1 %t137, label %then1964, label %endif1966 +then1964: %t138 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t138, ptr %a140 store { ptr, i64, i64 } { ptr @.str.1109, i64 4, i64 0 }, ptr %a141 @@ -22376,10 +22402,10 @@ then1960: store { ptr, i64, i64 } %t151, ptr %a93 store { ptr, i64, i64 } %t152, ptr %a153 call void @finch_str_drop(ptr %a153) - br label %endif1962 -endif1962: - br label %endif1956 -endif1956: + br label %endif1966 +endif1966: + br label %endif1960 +endif1960: %t154 = load { ptr, i64, i64 }, ptr %a93 call void @finch_str_drop(ptr %a48) call void @finch.drop.arr_str(ptr %a2) @@ -22417,18 +22443,18 @@ entry: store %S.gen.FnSig %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic1963, label %ok1964 -panic1963: + br i1 %t5, label %panic1967, label %ok1968 +panic1967: call void @finch_panic(ptr @.str.1110, i64 263, ptr @.str.1111) unreachable -ok1964: +ok1968: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 %t8 = xor i1 %t7, true - br i1 %t8, label %then1965, label %endif1967 -then1965: + br i1 %t8, label %then1969, label %endif1971 +then1969: ret void -endif1967: +endif1971: %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t10 = load i64, ptr %t9 store i64 %t10, ptr %a11 @@ -22438,32 +22464,32 @@ endif1967: store { ptr, i64, i64 } { ptr @.str.1112, i64 6, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br i1 %t17, label %then1968, label %endif1970 -then1968: + br i1 %t17, label %then1972, label %endif1974 +then1972: %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t19 = load i64, ptr %t18 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a11 - br label %endif1970 -endif1970: + br label %endif1974 +endif1974: %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null - br i1 %t22, label %panic1971, label %ok1972 -panic1971: + br i1 %t22, label %panic1975, label %ok1976 +panic1975: call void @finch_panic(ptr @.str.1113, i64 270, ptr @.str.1114) unreachable -ok1972: +ok1976: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 0 %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 16 %t25 = load i64, ptr %t24 %t26 = load { ptr, i64, i64 }, ptr %t23 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 - br i1 %t28, label %range1973, label %inrange1974 -range1973: + br i1 %t28, label %range1977, label %inrange1978 +range1977: call void @finch_panic_index(ptr @.str.1115, i64 270, i64 %t25, i64 %t27) unreachable -inrange1974: +inrange1978: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i64 %t25 %t31 = getelementptr inbounds %S.ast.Program, ptr %t30, i32 0, i32 8 @@ -22472,11 +22498,11 @@ inrange1974: %t34 = load { ptr, i64, i64 }, ptr %t31 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 - br i1 %t36, label %range1975, label %inrange1976 -range1975: + br i1 %t36, label %range1979, label %inrange1980 +range1979: call void @finch_panic_index(ptr @.str.1116, i64 270, i64 %t33, i64 %t35) unreachable -inrange1976: +inrange1980: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 %t39 = load %S.ast.Node, ptr %t38 @@ -22494,21 +22520,21 @@ inrange1976: %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = icmp sgt i64 %t52, 0 - br label %logic.from1977 -logic.from1977: - br i1 %t53, label %logic.rhs1978, label %logic.end1979 -logic.rhs1978: + br label %logic.from1981 +logic.from1981: + br i1 %t53, label %logic.rhs1982, label %logic.end1983 +logic.rhs1982: %t54 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 2 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp eq i64 %t56, 0 - br label %logic.rend1980 -logic.rend1980: - br label %logic.end1979 -logic.end1979: - %t58 = phi i1 [ false, %logic.from1977 ], [ %t57, %logic.rend1980 ] - br i1 %t58, label %then1981, label %endif1983 -then1981: + br label %logic.rend1984 +logic.rend1984: + br label %logic.end1983 +logic.end1983: + %t58 = phi i1 [ false, %logic.from1981 ], [ %t57, %logic.rend1984 ] + br i1 %t58, label %then1985, label %endif1987 +then1985: %t59 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 @@ -22518,8 +22544,8 @@ then1981: store { ptr, i64, i64 } %t63, ptr %a49 store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_drop(ptr %a65) - br label %endif1983 -endif1983: + br label %endif1987 +endif1987: %t66 = load ptr, ptr %a1 %t67 = load %S.ast.Node, ptr %a2 %t68 = load i64, ptr %a11 @@ -22541,22 +22567,22 @@ endif1983: %t82 = load { ptr, i64, i64 }, ptr %a78 %t83 = load ptr, ptr %a1 %t84 = icmp eq ptr %t83, null - br i1 %t84, label %panic1984, label %ok1985 -panic1984: + br i1 %t84, label %panic1988, label %ok1989 +panic1988: call void @finch_panic(ptr @.str.1119, i64 275, ptr @.str.1120) unreachable -ok1985: +ok1989: %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 1 %t86 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 13 %t87 = load i64, ptr %t86 %t88 = load { ptr, i64, i64 }, ptr %t85 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 %t87, %t89 - br i1 %t90, label %range1986, label %inrange1987 -range1986: + br i1 %t90, label %range1990, label %inrange1991 +range1990: call void @finch_panic_index(ptr @.str.1121, i64 275, i64 %t87, i64 %t89) unreachable -inrange1987: +inrange1991: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t87 %t93 = load { ptr, i64, i64 }, ptr %t92 @@ -23112,25 +23138,25 @@ entry: store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 - br label %each.cond1988 -each.cond1988: + br label %each.cond1992 +each.cond1992: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body1989, label %each.end1991 -each.body1989: + br i1 %t7, label %each.body1993, label %each.end1995 +each.body1993: %t8 = load ptr, ptr %a2 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t6 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic1992, label %ok1993 -panic1992: + br i1 %t13, label %panic1996, label %ok1997 +panic1996: call void @finch_panic(ptr @.str.1122, i64 281, ptr @.str.1123) unreachable -ok1993: +ok1997: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 29 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load { ptr, i64, i64 }, ptr %a11 @@ -23145,30 +23171,30 @@ ok1993: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i64 %t21 store { ptr, i64, i64 } %t20, ptr %t24 store i64 %t22, ptr %t15 - br label %each.step1990 -each.step1990: + br label %each.step1994 +each.step1994: %t25 = load i64, ptr %a3 %t26 = add i64 %t25, 1 store i64 %t26, ptr %a3 - br label %each.cond1988 -each.end1991: + br label %each.cond1992 +each.end1995: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic1994, label %ok1995 -panic1994: + br i1 %t28, label %panic1998, label %ok1999 +panic1998: call void @finch_panic(ptr @.str.1125, i64 283, ptr @.str.1126) unreachable -ok1995: +ok1999: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 15 store i64 0, ptr %a30 - br label %each.cond1996 -each.cond1996: + br label %each.cond2000 +each.cond2000: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load i64, ptr %a30 %t34 = icmp slt i64 %t33, %t32 - br i1 %t34, label %each.body1997, label %each.end1999 -each.body1997: + br i1 %t34, label %each.body2001, label %each.end2003 +each.body2001: %t35 = load ptr, ptr %t29 %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t33 %t37 = load %S.gen.FnSig, ptr %t36 @@ -23178,22 +23204,22 @@ each.body1997: store %S.gen.FnSig %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null - br i1 %t43, label %panic2000, label %ok2001 -panic2000: + br i1 %t43, label %panic2004, label %ok2005 +panic2004: call void @finch_panic(ptr @.str.1127, i64 284, ptr @.str.1128) unreachable -ok2001: +ok2005: %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 0 %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 16 %t46 = load i64, ptr %t45 %t47 = load { ptr, i64, i64 }, ptr %t44 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = icmp uge i64 %t46, %t48 - br i1 %t49, label %range2002, label %inrange2003 -range2002: + br i1 %t49, label %range2006, label %inrange2007 +range2006: call void @finch_panic_index(ptr @.str.1129, i64 284, i64 %t46, i64 %t48) unreachable -inrange2003: +inrange2007: %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = getelementptr inbounds %S.ast.Program, ptr %t50, i64 %t46 %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i32 0, i32 8 @@ -23202,11 +23228,11 @@ inrange2003: %t55 = load { ptr, i64, i64 }, ptr %t52 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range2004, label %inrange2005 -range2004: + br i1 %t57, label %range2008, label %inrange2009 +range2008: call void @finch_panic_index(ptr @.str.1130, i64 284, i64 %t54, i64 %t56) unreachable -inrange2005: +inrange2009: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 @@ -23218,34 +23244,34 @@ inrange2005: %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 %t67 = load i64, ptr %t66 %t68 = icmp sgt i64 %t67, 0 - br i1 %t68, label %then2006, label %endif2008 -then2006: + br i1 %t68, label %then2010, label %endif2012 +then2010: call void @finch.drop.S_ast_Node(ptr %a64) call void @finch.drop.S_gen_FnSig(ptr %a41) - br label %each.step1998 -endif2008: + br label %each.step2002 +endif2012: store { ptr, i64, i64 } zeroinitializer, ptr %a69 %t70 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load i64, ptr %t71 store i64 0, ptr %a73 - br label %for.cond2009 -for.cond2009: + br label %for.cond2013 +for.cond2013: %t74 = load i64, ptr %a73 %t75 = icmp slt i64 %t74, %t72 - br i1 %t75, label %for.body2010, label %for.end2012 -for.body2010: + br i1 %t75, label %for.body2014, label %for.end2016 +for.body2014: %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 %t77 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 %t78 = load i64, ptr %a73 %t79 = load { ptr, i64, i64 }, ptr %t77 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 - br i1 %t81, label %range2013, label %inrange2014 -range2013: + br i1 %t81, label %range2017, label %inrange2018 +range2017: call void @finch_panic_index(ptr @.str.1131, i64 290, i64 %t78, i64 %t80) unreachable -inrange2014: +inrange2018: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds %S.ast.Type, ptr %t82, i64 %t78 %t84 = load %S.ast.Type, ptr %t83 @@ -23261,11 +23287,11 @@ inrange2014: %t93 = load { ptr, i64, i64 }, ptr %t91 %t94 = extractvalue { ptr, i64, i64 } %t93, 1 %t95 = icmp uge i64 %t92, %t94 - br i1 %t95, label %range2015, label %inrange2016 -range2015: + br i1 %t95, label %range2019, label %inrange2020 +range2019: call void @finch_panic_index(ptr @.str.1133, i64 290, i64 %t92, i64 %t94) unreachable -inrange2016: +inrange2020: %t96 = extractvalue { ptr, i64, i64 } %t93, 0 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 %t92 %t98 = load { ptr, i64, i64 }, ptr %t97 @@ -23282,20 +23308,20 @@ inrange2016: %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 %t104 store { ptr, i64, i64 } %t103, ptr %t107 store i64 %t105, ptr %t76 - br label %for.step2011 -for.step2011: + br label %for.step2015 +for.step2015: %t108 = load i64, ptr %a73 %t109 = add i64 %t108, 1 store i64 %t109, ptr %a73 - br label %for.cond2009 -for.end2012: + br label %for.cond2013 +for.end2016: %t110 = load ptr, ptr %a1 %t111 = icmp eq ptr %t110, null - br i1 %t111, label %panic2017, label %ok2018 -panic2017: + br i1 %t111, label %panic2021, label %ok2022 +panic2021: call void @finch_panic(ptr @.str.1134, i64 292, ptr @.str.1135) unreachable -ok2018: +ok2022: %t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 29 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 0 @@ -23340,22 +23366,22 @@ ok2018: %t148 = load { ptr, i64, i64 }, ptr %a144 %t149 = load ptr, ptr %a1 %t150 = icmp eq ptr %t149, null - br i1 %t150, label %panic2019, label %ok2020 -panic2019: + br i1 %t150, label %panic2023, label %ok2024 +panic2023: call void @finch_panic(ptr @.str.1140, i64 292, ptr @.str.1141) unreachable -ok2020: +ok2024: %t151 = getelementptr inbounds %S.gen.Gen, ptr %t149, i32 0, i32 1 %t152 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 13 %t153 = load i64, ptr %t152 %t154 = load { ptr, i64, i64 }, ptr %t151 %t155 = extractvalue { ptr, i64, i64 } %t154, 1 %t156 = icmp uge i64 %t153, %t155 - br i1 %t156, label %range2021, label %inrange2022 -range2021: + br i1 %t156, label %range2025, label %inrange2026 +range2025: call void @finch_panic_index(ptr @.str.1142, i64 292, i64 %t153, i64 %t155) unreachable -inrange2022: +inrange2026: %t157 = extractvalue { ptr, i64, i64 } %t154, 0 %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t157, i64 %t153 %t159 = load { ptr, i64, i64 }, ptr %t158 @@ -23466,30 +23492,30 @@ inrange2022: call void @finch.drop.arr_str(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a64) call void @finch.drop.S_gen_FnSig(ptr %a41) - br label %each.step1998 -each.step1998: + br label %each.step2002 +each.step2002: %t244 = load i64, ptr %a30 %t245 = add i64 %t244, 1 store i64 %t245, ptr %a30 - br label %each.cond1996 -each.end1999: + br label %each.cond2000 +each.end2003: %t246 = load ptr, ptr %a1 %t247 = icmp eq ptr %t246, null - br i1 %t247, label %panic2023, label %ok2024 -panic2023: + br i1 %t247, label %panic2027, label %ok2028 +panic2027: call void @finch_panic(ptr @.str.1149, i64 294, ptr @.str.1150) unreachable -ok2024: +ok2028: %t248 = getelementptr inbounds %S.gen.Gen, ptr %t246, i32 0, i32 17 store i64 0, ptr %a249 - br label %each.cond2025 -each.cond2025: + br label %each.cond2029 +each.cond2029: %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 %t251 = load i64, ptr %t250 %t252 = load i64, ptr %a249 %t253 = icmp slt i64 %t252, %t251 - br i1 %t253, label %each.body2026, label %each.end2028 -each.body2026: + br i1 %t253, label %each.body2030, label %each.end2032 +each.body2030: %t254 = load ptr, ptr %t248 %t255 = getelementptr inbounds %S.gen.Template, ptr %t254, i64 %t252 %t256 = load %S.gen.Template, ptr %t255 @@ -23499,29 +23525,29 @@ each.body2026: store %S.gen.Template %t259, ptr %a260 %t261 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 6 %t262 = load i1, ptr %t261 - br i1 %t262, label %then2029, label %endif2031 -then2029: + br i1 %t262, label %then2033, label %endif2035 +then2033: call void @finch.drop.S_gen_Template(ptr %a260) - br label %each.step2027 -endif2031: + br label %each.step2031 +endif2035: %t263 = load ptr, ptr %a1 %t264 = icmp eq ptr %t263, null - br i1 %t264, label %panic2032, label %ok2033 -panic2032: + br i1 %t264, label %panic2036, label %ok2037 +panic2036: call void @finch_panic(ptr @.str.1151, i64 298, ptr @.str.1152) unreachable -ok2033: +ok2037: %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 0 %t266 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 4 %t267 = load i64, ptr %t266 %t268 = load { ptr, i64, i64 }, ptr %t265 %t269 = extractvalue { ptr, i64, i64 } %t268, 1 %t270 = icmp uge i64 %t267, %t269 - br i1 %t270, label %range2034, label %inrange2035 -range2034: + br i1 %t270, label %range2038, label %inrange2039 +range2038: call void @finch_panic_index(ptr @.str.1153, i64 298, i64 %t267, i64 %t269) unreachable -inrange2035: +inrange2039: %t271 = extractvalue { ptr, i64, i64 } %t268, 0 %t272 = getelementptr inbounds %S.ast.Program, ptr %t271, i64 %t267 %t273 = getelementptr inbounds %S.ast.Program, ptr %t272, i32 0, i32 8 @@ -23530,11 +23556,11 @@ inrange2035: %t276 = load { ptr, i64, i64 }, ptr %t273 %t277 = extractvalue { ptr, i64, i64 } %t276, 1 %t278 = icmp uge i64 %t275, %t277 - br i1 %t278, label %range2036, label %inrange2037 -range2036: + br i1 %t278, label %range2040, label %inrange2041 +range2040: call void @finch_panic_index(ptr @.str.1154, i64 298, i64 %t275, i64 %t277) unreachable -inrange2037: +inrange2041: %t279 = extractvalue { ptr, i64, i64 } %t276, 0 %t280 = getelementptr inbounds %S.ast.Node, ptr %t279, i64 %t275 %t281 = load %S.ast.Node, ptr %t280 @@ -23544,11 +23570,11 @@ inrange2037: store %S.ast.Node %t284, ptr %a285 %t286 = load ptr, ptr %a1 %t287 = icmp eq ptr %t286, null - br i1 %t287, label %panic2038, label %ok2039 -panic2038: + br i1 %t287, label %panic2042, label %ok2043 +panic2042: call void @finch_panic(ptr @.str.1155, i64 299, ptr @.str.1156) unreachable -ok2039: +ok2043: %t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 29 %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i32 0, i32 1 %t290 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 0 @@ -23593,22 +23619,22 @@ ok2039: %t324 = load { ptr, i64, i64 }, ptr %a320 %t325 = load ptr, ptr %a1 %t326 = icmp eq ptr %t325, null - br i1 %t326, label %panic2040, label %ok2041 -panic2040: + br i1 %t326, label %panic2044, label %ok2045 +panic2044: call void @finch_panic(ptr @.str.1161, i64 299, ptr @.str.1162) unreachable -ok2041: +ok2045: %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 1 %t328 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 13 %t329 = load i64, ptr %t328 %t330 = load { ptr, i64, i64 }, ptr %t327 %t331 = extractvalue { ptr, i64, i64 } %t330, 1 %t332 = icmp uge i64 %t329, %t331 - br i1 %t332, label %range2042, label %inrange2043 -range2042: + br i1 %t332, label %range2046, label %inrange2047 +range2046: call void @finch_panic_index(ptr @.str.1163, i64 299, i64 %t329, i64 %t331) unreachable -inrange2043: +inrange2047: %t333 = extractvalue { ptr, i64, i64 } %t330, 0 %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i64 %t329 %t335 = load { ptr, i64, i64 }, ptr %t334 @@ -23735,30 +23761,30 @@ inrange2043: store i64 %t432, ptr %t289 call void @finch.drop.S_ast_Node(ptr %a285) call void @finch.drop.S_gen_Template(ptr %a260) - br label %each.step2027 -each.step2027: + br label %each.step2031 +each.step2031: %t435 = load i64, ptr %a249 %t436 = add i64 %t435, 1 store i64 %t436, ptr %a249 - br label %each.cond2025 -each.end2028: + br label %each.cond2029 +each.end2032: %t437 = load ptr, ptr %a1 %t438 = icmp eq ptr %t437, null - br i1 %t438, label %panic2044, label %ok2045 -panic2044: + br i1 %t438, label %panic2048, label %ok2049 +panic2048: call void @finch_panic(ptr @.str.1173, i64 301, ptr @.str.1174) unreachable -ok2045: +ok2049: %t439 = getelementptr inbounds %S.gen.Gen, ptr %t437, i32 0, i32 16 store i64 0, ptr %a440 - br label %each.cond2046 -each.cond2046: + br label %each.cond2050 +each.cond2050: %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 %t442 = load i64, ptr %t441 %t443 = load i64, ptr %a440 %t444 = icmp slt i64 %t443, %t442 - br i1 %t444, label %each.body2047, label %each.end2049 -each.body2047: + br i1 %t444, label %each.body2051, label %each.end2053 +each.body2051: %t445 = load ptr, ptr %t439 %t446 = getelementptr inbounds %S.gen.StructDef, ptr %t445, i64 %t443 %t447 = load %S.gen.StructDef, ptr %t446 @@ -23768,42 +23794,42 @@ each.body2047: store %S.gen.StructDef %t450, ptr %a451 %t452 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 2 %t453 = load i1, ptr %t452 - br label %logic.from2050 -logic.from2050: - br i1 %t453, label %logic.end2052, label %logic.rhs2051 -logic.rhs2051: + br label %logic.from2054 +logic.from2054: + br i1 %t453, label %logic.end2056, label %logic.rhs2055 +logic.rhs2055: %t454 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 5 %t455 = getelementptr inbounds { ptr, i64, i64 }, ptr %t454, i32 0, i32 1 %t456 = load i64, ptr %t455 %t457 = icmp sgt i64 %t456, 0 - br label %logic.rend2053 -logic.rend2053: - br label %logic.end2052 -logic.end2052: - %t458 = phi i1 [ true, %logic.from2050 ], [ %t457, %logic.rend2053 ] - br i1 %t458, label %then2054, label %endif2056 -then2054: + br label %logic.rend2057 +logic.rend2057: + br label %logic.end2056 +logic.end2056: + %t458 = phi i1 [ true, %logic.from2054 ], [ %t457, %logic.rend2057 ] + br i1 %t458, label %then2058, label %endif2060 +then2058: call void @finch.drop.S_gen_StructDef(ptr %a451) - br label %each.step2048 -endif2056: + br label %each.step2052 +endif2060: %t459 = load ptr, ptr %a1 %t460 = icmp eq ptr %t459, null - br i1 %t460, label %panic2057, label %ok2058 -panic2057: + br i1 %t460, label %panic2061, label %ok2062 +panic2061: call void @finch_panic(ptr @.str.1175, i64 305, ptr @.str.1176) unreachable -ok2058: +ok2062: %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 0 %t462 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 13 %t463 = load i64, ptr %t462 %t464 = load { ptr, i64, i64 }, ptr %t461 %t465 = extractvalue { ptr, i64, i64 } %t464, 1 %t466 = icmp uge i64 %t463, %t465 - br i1 %t466, label %range2059, label %inrange2060 -range2059: + br i1 %t466, label %range2063, label %inrange2064 +range2063: call void @finch_panic_index(ptr @.str.1177, i64 305, i64 %t463, i64 %t465) unreachable -inrange2060: +inrange2064: %t467 = extractvalue { ptr, i64, i64 } %t464, 0 %t468 = getelementptr inbounds %S.ast.Program, ptr %t467, i64 %t463 %t469 = getelementptr inbounds %S.ast.Program, ptr %t468, i32 0, i32 6 @@ -23812,11 +23838,11 @@ inrange2060: %t472 = load { ptr, i64, i64 }, ptr %t469 %t473 = extractvalue { ptr, i64, i64 } %t472, 1 %t474 = icmp uge i64 %t471, %t473 - br i1 %t474, label %range2061, label %inrange2062 -range2061: + br i1 %t474, label %range2065, label %inrange2066 +range2065: call void @finch_panic_index(ptr @.str.1178, i64 305, i64 %t471, i64 %t473) unreachable -inrange2062: +inrange2066: %t475 = extractvalue { ptr, i64, i64 } %t472, 0 %t476 = getelementptr inbounds %S.ast.Node, ptr %t475, i64 %t471 %t477 = load %S.ast.Node, ptr %t476 @@ -23826,11 +23852,11 @@ inrange2062: store %S.ast.Node %t480, ptr %a481 %t482 = load ptr, ptr %a1 %t483 = icmp eq ptr %t482, null - br i1 %t483, label %panic2063, label %ok2064 -panic2063: + br i1 %t483, label %panic2067, label %ok2068 +panic2067: call void @finch_panic(ptr @.str.1179, i64 306, ptr @.str.1180) unreachable -ok2064: +ok2068: %t484 = getelementptr inbounds %S.gen.Gen, ptr %t482, i32 0, i32 29 %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %t484, i32 0, i32 1 %t486 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 @@ -23861,22 +23887,22 @@ ok2064: %t508 = load { ptr, i64, i64 }, ptr %a504 %t509 = load ptr, ptr %a1 %t510 = icmp eq ptr %t509, null - br i1 %t510, label %panic2065, label %ok2066 -panic2065: + br i1 %t510, label %panic2069, label %ok2070 +panic2069: call void @finch_panic(ptr @.str.1184, i64 306, ptr @.str.1185) unreachable -ok2066: +ok2070: %t511 = getelementptr inbounds %S.gen.Gen, ptr %t509, i32 0, i32 1 %t512 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 13 %t513 = load i64, ptr %t512 %t514 = load { ptr, i64, i64 }, ptr %t511 %t515 = extractvalue { ptr, i64, i64 } %t514, 1 %t516 = icmp uge i64 %t513, %t515 - br i1 %t516, label %range2067, label %inrange2068 -range2067: + br i1 %t516, label %range2071, label %inrange2072 +range2071: call void @finch_panic_index(ptr @.str.1186, i64 306, i64 %t513, i64 %t515) unreachable -inrange2068: +inrange2072: %t517 = extractvalue { ptr, i64, i64 } %t514, 0 %t518 = getelementptr inbounds { ptr, i64, i64 }, ptr %t517, i64 %t513 %t519 = load { ptr, i64, i64 }, ptr %t518 @@ -23933,19 +23959,19 @@ inrange2068: %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 %t561 = load i64, ptr %t560 store i64 0, ptr %a562 - br label %for.cond2069 -for.cond2069: + br label %for.cond2073 +for.cond2073: %t563 = load i64, ptr %a562 %t564 = icmp slt i64 %t563, %t561 - br i1 %t564, label %for.body2070, label %for.end2072 -for.body2070: + br i1 %t564, label %for.body2074, label %for.end2076 +for.body2074: %t565 = load ptr, ptr %a1 %t566 = icmp eq ptr %t565, null - br i1 %t566, label %panic2073, label %ok2074 -panic2073: + br i1 %t566, label %panic2077, label %ok2078 +panic2077: call void @finch_panic(ptr @.str.1189, i64 308, ptr @.str.1190) unreachable -ok2074: +ok2078: %t567 = getelementptr inbounds %S.gen.Gen, ptr %t565, i32 0, i32 29 %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %t567, i32 0, i32 1 %t569 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 @@ -23979,11 +24005,11 @@ ok2074: %t594 = load { ptr, i64, i64 }, ptr %t592 %t595 = extractvalue { ptr, i64, i64 } %t594, 1 %t596 = icmp uge i64 %t593, %t595 - br i1 %t596, label %range2075, label %inrange2076 -range2075: + br i1 %t596, label %range2079, label %inrange2080 +range2079: call void @finch_panic_index(ptr @.str.1194, i64 308, i64 %t593, i64 %t595) unreachable -inrange2076: +inrange2080: %t597 = extractvalue { ptr, i64, i64 } %t594, 0 %t598 = getelementptr inbounds { ptr, i64, i64 }, ptr %t597, i64 %t593 %t599 = load { ptr, i64, i64 }, ptr %t598 @@ -24004,11 +24030,11 @@ inrange2076: %t612 = load { ptr, i64, i64 }, ptr %t610 %t613 = extractvalue { ptr, i64, i64 } %t612, 1 %t614 = icmp uge i64 %t611, %t613 - br i1 %t614, label %range2077, label %inrange2078 -range2077: + br i1 %t614, label %range2081, label %inrange2082 +range2081: call void @finch_panic_index(ptr @.str.1196, i64 308, i64 %t611, i64 %t613) unreachable -inrange2078: +inrange2082: %t615 = extractvalue { ptr, i64, i64 } %t612, 0 %t616 = getelementptr inbounds %S.ast.Type, ptr %t615, i64 %t611 %t617 = load %S.ast.Type, ptr %t616 @@ -24028,68 +24054,68 @@ inrange2078: %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 store { ptr, i64, i64 } %t624, ptr %t628 store i64 %t626, ptr %t568 - br label %for.step2071 -for.step2071: + br label %for.step2075 +for.step2075: %t629 = load i64, ptr %a562 %t630 = add i64 %t629, 1 store i64 %t630, ptr %a562 - br label %for.cond2069 -for.end2072: + br label %for.cond2073 +for.end2076: call void @finch.drop.S_ast_Node(ptr %a481) call void @finch.drop.S_gen_StructDef(ptr %a451) - br label %each.step2048 -each.step2048: + br label %each.step2052 +each.step2052: %t631 = load i64, ptr %a440 %t632 = add i64 %t631, 1 store i64 %t632, ptr %a440 - br label %each.cond2046 -each.end2049: + br label %each.cond2050 +each.end2053: %t633 = load ptr, ptr %a1 %t634 = icmp eq ptr %t633, null - br i1 %t634, label %panic2079, label %ok2080 -panic2079: + br i1 %t634, label %panic2083, label %ok2084 +panic2083: call void @finch_panic(ptr @.str.1197, i64 311, ptr @.str.1198) unreachable -ok2080: +ok2084: %t635 = getelementptr inbounds %S.gen.Gen, ptr %t633, i32 0, i32 0 %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i32 0, i32 1 %t637 = load i64, ptr %t636 store i64 0, ptr %a638 - br label %for.cond2081 -for.cond2081: + br label %for.cond2085 +for.cond2085: %t639 = load i64, ptr %a638 %t640 = icmp slt i64 %t639, %t637 - br i1 %t640, label %for.body2082, label %for.end2084 -for.body2082: + br i1 %t640, label %for.body2086, label %for.end2088 +for.body2086: %t641 = load ptr, ptr %a1 %t642 = icmp eq ptr %t641, null - br i1 %t642, label %panic2085, label %ok2086 -panic2085: + br i1 %t642, label %panic2089, label %ok2090 +panic2089: call void @finch_panic(ptr @.str.1199, i64 312, ptr @.str.1200) unreachable -ok2086: +ok2090: %t643 = getelementptr inbounds %S.gen.Gen, ptr %t641, i32 0, i32 0 %t644 = load i64, ptr %a638 %t645 = load { ptr, i64, i64 }, ptr %t643 %t646 = extractvalue { ptr, i64, i64 } %t645, 1 %t647 = icmp uge i64 %t644, %t646 - br i1 %t647, label %range2087, label %inrange2088 -range2087: + br i1 %t647, label %range2091, label %inrange2092 +range2091: call void @finch_panic_index(ptr @.str.1201, i64 312, i64 %t644, i64 %t646) unreachable -inrange2088: +inrange2092: %t648 = extractvalue { ptr, i64, i64 } %t645, 0 %t649 = getelementptr inbounds %S.ast.Program, ptr %t648, i64 %t644 %t650 = getelementptr inbounds %S.ast.Program, ptr %t649, i32 0, i32 7 store i64 0, ptr %a651 - br label %each.cond2089 -each.cond2089: + br label %each.cond2093 +each.cond2093: %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %t650, i32 0, i32 1 %t653 = load i64, ptr %t652 %t654 = load i64, ptr %a651 %t655 = icmp slt i64 %t654, %t653 - br i1 %t655, label %each.body2090, label %each.end2092 -each.body2090: + br i1 %t655, label %each.body2094, label %each.end2096 +each.body2094: %t656 = load ptr, ptr %t650 %t657 = getelementptr inbounds %S.ast.Node, ptr %t656, i64 %t654 %t658 = load %S.ast.Node, ptr %t657 @@ -24101,14 +24127,14 @@ each.body2090: store { ptr, i64, i64 } zeroinitializer, ptr %a664 %t665 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 9 store i64 0, ptr %a666 - br label %each.cond2093 -each.cond2093: + br label %each.cond2097 +each.cond2097: %t667 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 %t668 = load i64, ptr %t667 %t669 = load i64, ptr %a666 %t670 = icmp slt i64 %t669, %t668 - br i1 %t670, label %each.body2094, label %each.end2096 -each.body2094: + br i1 %t670, label %each.body2098, label %each.end2100 +each.body2098: %t671 = load ptr, ptr %t665 %t672 = getelementptr inbounds %S.ast.Node, ptr %t671, i64 %t669 %t673 = load %S.ast.Node, ptr %t672 @@ -24126,13 +24152,13 @@ each.body2094: %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 store { ptr, i64, i64 } %t680, ptr %t684 store i64 %t682, ptr %t675 - br label %each.step2095 -each.step2095: + br label %each.step2099 +each.step2099: %t685 = load i64, ptr %a666 %t686 = add i64 %t685, 1 store i64 %t686, ptr %a666 - br label %each.cond2093 -each.end2096: + br label %each.cond2097 +each.end2100: %t687 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1203, i64 1, i64 0 }, ptr %a688 call void @finch_str_join(ptr %a689, ptr %a664, ptr %a688) @@ -24143,30 +24169,30 @@ each.end2096: call void @finch_str_drop(ptr %a692) %t693 = load ptr, ptr %a1 %t694 = icmp eq ptr %t693, null - br i1 %t694, label %panic2097, label %ok2098 -panic2097: + br i1 %t694, label %panic2101, label %ok2102 +panic2101: call void @finch_panic(ptr @.str.1204, i64 319, ptr @.str.1205) unreachable -ok2098: +ok2102: %t695 = getelementptr inbounds %S.gen.Gen, ptr %t693, i32 0, i32 29 %t696 = getelementptr inbounds { ptr, i64, i64 }, ptr %t695, i32 0, i32 1 %t697 = load ptr, ptr %a1 %t698 = icmp eq ptr %t697, null - br i1 %t698, label %panic2099, label %ok2100 -panic2099: + br i1 %t698, label %panic2103, label %ok2104 +panic2103: call void @finch_panic(ptr @.str.1207, i64 319, ptr @.str.1208) unreachable -ok2100: +ok2104: %t699 = getelementptr inbounds %S.gen.Gen, ptr %t697, i32 0, i32 0 %t700 = load i64, ptr %a638 %t701 = load { ptr, i64, i64 }, ptr %t699 %t702 = extractvalue { ptr, i64, i64 } %t701, 1 %t703 = icmp uge i64 %t700, %t702 - br i1 %t703, label %range2101, label %inrange2102 -range2101: + br i1 %t703, label %range2105, label %inrange2106 +range2105: call void @finch_panic_index(ptr @.str.1209, i64 319, i64 %t700, i64 %t702) unreachable -inrange2102: +inrange2106: %t704 = extractvalue { ptr, i64, i64 } %t701, 0 %t705 = getelementptr inbounds %S.ast.Program, ptr %t704, i64 %t700 %t706 = getelementptr inbounds %S.ast.Program, ptr %t705, i32 0, i32 0 @@ -24197,22 +24223,22 @@ inrange2102: %t728 = load { ptr, i64, i64 }, ptr %a724 %t729 = load ptr, ptr %a1 %t730 = icmp eq ptr %t729, null - br i1 %t730, label %panic2103, label %ok2104 -panic2103: + br i1 %t730, label %panic2107, label %ok2108 +panic2107: call void @finch_panic(ptr @.str.1212, i64 319, ptr @.str.1213) unreachable -ok2104: +ok2108: %t731 = getelementptr inbounds %S.gen.Gen, ptr %t729, i32 0, i32 1 %t732 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 13 %t733 = load i64, ptr %t732 %t734 = load { ptr, i64, i64 }, ptr %t731 %t735 = extractvalue { ptr, i64, i64 } %t734, 1 %t736 = icmp uge i64 %t733, %t735 - br i1 %t736, label %range2105, label %inrange2106 -range2105: + br i1 %t736, label %range2109, label %inrange2110 +range2109: call void @finch_panic_index(ptr @.str.1214, i64 319, i64 %t733, i64 %t735) unreachable -inrange2106: +inrange2110: %t737 = extractvalue { ptr, i64, i64 } %t734, 0 %t738 = getelementptr inbounds { ptr, i64, i64 }, ptr %t737, i64 %t733 %t739 = load { ptr, i64, i64 }, ptr %t738 @@ -24281,20 +24307,20 @@ inrange2106: call void @finch.drop.arr_str(ptr %a664) call void @finch_str_drop(ptr %a663) call void @finch.drop.S_ast_Node(ptr %a662) - br label %each.step2091 -each.step2091: + br label %each.step2095 +each.step2095: %t790 = load i64, ptr %a651 %t791 = add i64 %t790, 1 store i64 %t791, ptr %a651 - br label %each.cond2089 -each.end2092: - br label %for.step2083 -for.step2083: + br label %each.cond2093 +each.end2096: + br label %for.step2087 +for.step2087: %t792 = load i64, ptr %a638 %t793 = add i64 %t792, 1 store i64 %t793, ptr %a638 - br label %for.cond2081 -for.end2084: + br label %for.cond2085 +for.end2088: ret void } @@ -24343,42 +24369,42 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2107, label %ok2108 -panic2107: + br i1 %t5, label %panic2111, label %ok2112 +panic2111: call void @finch_panic(ptr @.str.1218, i64 325, ptr @.str.1219) unreachable -ok2108: +ok2112: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 - br label %logic.from2109 -logic.from2109: - br i1 %t7, label %logic.rhs2110, label %logic.end2111 -logic.rhs2110: + br label %logic.from2113 +logic.from2113: + br i1 %t7, label %logic.rhs2114, label %logic.end2115 +logic.rhs2114: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic2112, label %ok2113 -panic2112: + br i1 %t9, label %panic2116, label %ok2117 +panic2116: call void @finch_panic(ptr @.str.1220, i64 325, ptr @.str.1221) unreachable -ok2113: +ok2117: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 29 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 - br label %logic.rend2114 -logic.rend2114: - br label %logic.end2111 -logic.end2111: - %t14 = phi i1 [ false, %logic.from2109 ], [ %t13, %logic.rend2114 ] - br i1 %t14, label %then2115, label %endif2117 -then2115: + br label %logic.rend2118 +logic.rend2118: + br label %logic.end2115 +logic.end2115: + %t14 = phi i1 [ false, %logic.from2113 ], [ %t13, %logic.rend2118 ] + br i1 %t14, label %then2119, label %endif2121 +then2119: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic2118, label %ok2119 -panic2118: + br i1 %t16, label %panic2122, label %ok2123 +panic2122: call void @finch_panic(ptr @.str.1222, i64 326, ptr @.str.1223) unreachable -ok2119: +ok2123: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 29 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1224, i64 1, i64 0 }, ptr %a19 @@ -24393,26 +24419,26 @@ ok2119: store { ptr, i64, i64 } %t21, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = call i32 (ptr, ...) @printf(ptr @.str.1227) - br label %endif2117 -endif2117: + br label %endif2121 +endif2121: %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null - br i1 %t31, label %panic2120, label %ok2121 -panic2120: + br i1 %t31, label %panic2124, label %ok2125 +panic2124: call void @finch_panic(ptr @.str.1228, i64 328, ptr @.str.1229) unreachable -ok2121: +ok2125: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 1 %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t34 = load i64, ptr %t33 %t35 = load { ptr, i64, i64 }, ptr %t32 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 %t34, %t36 - br i1 %t37, label %range2122, label %inrange2123 -range2122: + br i1 %t37, label %range2126, label %inrange2127 +range2126: call void @finch_panic_index(ptr @.str.1230, i64 328, i64 %t34, i64 %t36) unreachable -inrange2123: +inrange2127: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t34 %t40 = load { ptr, i64, i64 }, ptr %t39 @@ -24465,11 +24491,11 @@ inrange2123: %t80 = load { ptr, i64, i64 }, ptr %a76 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic2124, label %ok2125 -panic2124: + br i1 %t82, label %panic2128, label %ok2129 +panic2128: call void @finch_panic(ptr @.str.1234, i64 328, ptr @.str.1235) unreachable -ok2125: +ok2129: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 20 %t84 = load { ptr, i64, i64 }, ptr %t83 store { ptr, i64, i64 } %t80, ptr %a86 @@ -24520,37 +24546,37 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2126, label %ok2127 -panic2126: + br i1 %t4, label %panic2130, label %ok2131 +panic2130: call void @finch_panic(ptr @.str.1239, i64 334, ptr @.str.1240) unreachable -ok2127: +ok2131: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 36 %t6 = load i64, ptr %t5 %t7 = icmp sge i64 %t6, 0 - br label %logic.from2128 -logic.from2128: - br i1 %t7, label %logic.rhs2129, label %logic.end2130 -logic.rhs2129: + br label %logic.from2132 +logic.from2132: + br i1 %t7, label %logic.rhs2133, label %logic.end2134 +logic.rhs2133: %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1242, i64 5, i64 0 }, ptr %a11 %t12 = call i64 @finch_str_find(ptr %a9, ptr %a11) %t13 = icmp sge i64 %t12, 0 - br label %logic.rend2131 -logic.rend2131: - br label %logic.end2130 -logic.end2130: - %t14 = phi i1 [ false, %logic.from2128 ], [ %t13, %logic.rend2131 ] - br i1 %t14, label %then2132, label %endif2134 -then2132: + br label %logic.rend2135 +logic.rend2135: + br label %logic.end2134 +logic.end2134: + %t14 = phi i1 [ false, %logic.from2132 ], [ %t13, %logic.rend2135 ] + br i1 %t14, label %then2136, label %endif2138 +then2136: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic2135, label %ok2136 -panic2135: + br i1 %t16, label %panic2139, label %ok2140 +panic2139: call void @finch_panic(ptr @.str.1243, i64 335, ptr @.str.1244) unreachable -ok2136: +ok2140: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 4 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %a2 @@ -24584,14 +24610,14 @@ ok2136: store { ptr, i64, i64 } %t38, ptr %t42 store i64 %t40, ptr %t18 ret void -endif2134: +endif2138: %t43 = load ptr, ptr %a1 %t44 = icmp eq ptr %t43, null - br i1 %t44, label %panic2137, label %ok2138 -panic2137: + br i1 %t44, label %panic2141, label %ok2142 +panic2141: call void @finch_panic(ptr @.str.1247, i64 338, ptr @.str.1248) unreachable -ok2138: +ok2142: %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 4 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %a2 @@ -24620,22 +24646,22 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic2139, label %ok2140 -panic2139: + br i1 %t3, label %panic2143, label %ok2144 +panic2143: call void @finch_panic(ptr @.str.1250, i64 342, ptr @.str.1251) unreachable -ok2140: +ok2144: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 6 %t5 = load i64, ptr %t4 %t6 = add i64 %t5, 1 store i64 %t6, ptr %t4 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic2141, label %ok2142 -panic2141: + br i1 %t8, label %panic2145, label %ok2146 +panic2145: call void @finch_panic(ptr @.str.1253, i64 343, ptr @.str.1254) unreachable -ok2142: +ok2146: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 6 %t10 = load i64, ptr %t9 call void @finch_str_from_int(ptr %a11, i64 %t10) @@ -24662,11 +24688,11 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2143, label %ok2144 -panic2143: + br i1 %t4, label %panic2147, label %ok2148 +panic2147: call void @finch_panic(ptr @.str.1255, i64 347, ptr @.str.1256) unreachable -ok2144: +ok2148: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 7 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 @@ -24674,11 +24700,11 @@ ok2144: %t8 = load { ptr, i64, i64 }, ptr %a2 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic2145, label %ok2146 -panic2145: + br i1 %t10, label %panic2149, label %ok2150 +panic2149: call void @finch_panic(ptr @.str.1257, i64 348, ptr @.str.1258) unreachable -ok2146: +ok2150: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 7 %t12 = load i64, ptr %t11 call void @finch_str_from_int(ptr %a13, i64 %t12) @@ -24703,11 +24729,11 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2147, label %ok2148 -panic2147: + br i1 %t4, label %panic2151, label %ok2152 +panic2151: call void @finch_panic(ptr @.str.1259, i64 352, ptr @.str.1260) unreachable -ok2148: +ok2152: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 4 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 @@ -24724,11 +24750,11 @@ ok2148: store i64 %t13, ptr %t6 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic2149, label %ok2150 -panic2149: + br i1 %t17, label %panic2153, label %ok2154 +panic2153: call void @finch_panic(ptr @.str.1262, i64 353, ptr @.str.1263) unreachable -ok2150: +ok2154: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 store i1 false, ptr %t18 ret void @@ -24746,16 +24772,16 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2151, label %ok2152 -panic2151: + br i1 %t4, label %panic2155, label %ok2156 +panic2155: call void @finch_panic(ptr @.str.1264, i64 357, ptr @.str.1265) unreachable -ok2152: +ok2156: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 9 %t6 = load i1, ptr %t5 %t7 = xor i1 %t6, true - br i1 %t7, label %then2153, label %endif2155 -then2153: + br i1 %t7, label %then2157, label %endif2159 +then2157: %t8 = load ptr, ptr %a1 %t9 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1266, i64 10, i64 0 }, ptr %a11 @@ -24767,15 +24793,15 @@ then2153: call void @finch_str_drop(ptr %a14) %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic2156, label %ok2157 -panic2156: + br i1 %t16, label %panic2160, label %ok2161 +panic2160: call void @finch_panic(ptr @.str.1267, i64 359, ptr @.str.1268) unreachable -ok2157: +ok2161: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 9 store i1 true, ptr %t17 - br label %endif2155 -endif2155: + br label %endif2159 +endif2159: ret void } @@ -24846,11 +24872,11 @@ entry: call void @finch_str_drop(ptr %a33) %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic2158, label %ok2159 -panic2158: + br i1 %t35, label %panic2162, label %ok2163 +panic2162: call void @finch_panic(ptr @.str.1272, i64 365, ptr @.str.1273) unreachable -ok2159: +ok2163: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 9 store i1 true, ptr %t36 ret void @@ -24885,22 +24911,22 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2160, label %ok2161 -panic2160: + br i1 %t4, label %panic2164, label %ok2165 +panic2164: call void @finch_panic(ptr @.str.1274, i64 369, ptr @.str.1275) unreachable -ok2161: +ok2165: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 6 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic2162, label %ok2163 -panic2162: + br i1 %t9, label %panic2166, label %ok2167 +panic2166: call void @finch_panic(ptr @.str.1277, i64 370, ptr @.str.1278) unreachable -ok2163: +ok2167: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 6 %t11 = load i64, ptr %t10 call void @finch_str_from_int(ptr %a12, i64 %t11) @@ -24914,11 +24940,11 @@ ok2163: store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic2164, label %ok2165 -panic2164: + br i1 %t21, label %panic2168, label %ok2169 +panic2168: call void @finch_panic(ptr @.str.1279, i64 371, ptr @.str.1280) unreachable -ok2165: +ok2169: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 5 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %a19 @@ -25172,27 +25198,27 @@ entry: %t6 = load i64, ptr %t3 %t7 = load ptr, ptr %a1 store i64 0, ptr %a8 - br label %find.cond2166 -find.cond2166: + br label %find.cond2170 +find.cond2170: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t6 - br i1 %t10, label %find.body2167, label %find.end2170 -find.body2167: + br i1 %t10, label %find.body2171, label %find.end2174 +find.body2171: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } %t4, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br i1 %t16, label %find.hit2168, label %find.next2169 -find.hit2168: + br i1 %t16, label %find.hit2172, label %find.next2173 +find.hit2172: store i64 %t9, ptr %a5 - br label %find.end2170 -find.next2169: + br label %find.end2174 +find.next2173: %t17 = add i64 %t9, 1 store i64 %t17, ptr %a8 - br label %find.cond2166 -find.end2170: + br label %find.cond2170 +find.end2174: %t18 = load i64, ptr %a5 %t19 = icmp sge i64 %t18, 0 ret i1 %t19 @@ -25233,48 +25259,48 @@ entry: store { ptr, i64, i64 } { ptr @.str.1290, i64 3, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br label %logic.from2171 -logic.from2171: - br i1 %t12, label %logic.end2173, label %logic.rhs2172 -logic.rhs2172: + br label %logic.from2175 +logic.from2175: + br i1 %t12, label %logic.end2177, label %logic.rhs2176 +logic.rhs2176: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1291, i64 2, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br label %logic.rend2174 -logic.rend2174: - br label %logic.end2173 -logic.end2173: - %t18 = phi i1 [ true, %logic.from2171 ], [ %t17, %logic.rend2174 ] - br label %logic.from2175 -logic.from2175: - br i1 %t18, label %logic.end2177, label %logic.rhs2176 -logic.rhs2176: + br label %logic.rend2178 +logic.rend2178: + br label %logic.end2177 +logic.end2177: + %t18 = phi i1 [ true, %logic.from2175 ], [ %t17, %logic.rend2178 ] + br label %logic.from2179 +logic.from2179: + br i1 %t18, label %logic.end2181, label %logic.rhs2180 +logic.rhs2180: %t19 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1292, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend2178 -logic.rend2178: - br label %logic.end2177 -logic.end2177: - %t24 = phi i1 [ true, %logic.from2175 ], [ %t23, %logic.rend2178 ] - br label %logic.from2179 -logic.from2179: - br i1 %t24, label %logic.end2181, label %logic.rhs2180 -logic.rhs2180: + br label %logic.rend2182 +logic.rend2182: + br label %logic.end2181 +logic.end2181: + %t24 = phi i1 [ true, %logic.from2179 ], [ %t23, %logic.rend2182 ] + br label %logic.from2183 +logic.from2183: + br i1 %t24, label %logic.end2185, label %logic.rhs2184 +logic.rhs2184: %t25 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1293, i64 3, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br label %logic.rend2182 -logic.rend2182: - br label %logic.end2181 -logic.end2181: - %t30 = phi i1 [ true, %logic.from2179 ], [ %t29, %logic.rend2182 ] + br label %logic.rend2186 +logic.rend2186: + br label %logic.end2185 +logic.end2185: + %t30 = phi i1 [ true, %logic.from2183 ], [ %t29, %logic.rend2186 ] call void @finch_str_drop(ptr %a7) ret i1 %t30 } @@ -25305,48 +25331,48 @@ entry: store { ptr, i64, i64 } { ptr @.str.1294, i64 2, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br label %logic.from2183 -logic.from2183: - br i1 %t12, label %logic.end2185, label %logic.rhs2184 -logic.rhs2184: + br label %logic.from2187 +logic.from2187: + br i1 %t12, label %logic.end2189, label %logic.rhs2188 +logic.rhs2188: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1295, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br label %logic.rend2186 -logic.rend2186: - br label %logic.end2185 -logic.end2185: - %t18 = phi i1 [ true, %logic.from2183 ], [ %t17, %logic.rend2186 ] - br label %logic.from2187 -logic.from2187: - br i1 %t18, label %logic.end2189, label %logic.rhs2188 -logic.rhs2188: + br label %logic.rend2190 +logic.rend2190: + br label %logic.end2189 +logic.end2189: + %t18 = phi i1 [ true, %logic.from2187 ], [ %t17, %logic.rend2190 ] + br label %logic.from2191 +logic.from2191: + br i1 %t18, label %logic.end2193, label %logic.rhs2192 +logic.rhs2192: %t19 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1296, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend2190 -logic.rend2190: - br label %logic.end2189 -logic.end2189: - %t24 = phi i1 [ true, %logic.from2187 ], [ %t23, %logic.rend2190 ] - br label %logic.from2191 -logic.from2191: - br i1 %t24, label %logic.end2193, label %logic.rhs2192 -logic.rhs2192: + br label %logic.rend2194 +logic.rend2194: + br label %logic.end2193 +logic.end2193: + %t24 = phi i1 [ true, %logic.from2191 ], [ %t23, %logic.rend2194 ] + br label %logic.from2195 +logic.from2195: + br i1 %t24, label %logic.end2197, label %logic.rhs2196 +logic.rhs2196: %t25 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1297, i64 3, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br label %logic.rend2194 -logic.rend2194: - br label %logic.end2193 -logic.end2193: - %t30 = phi i1 [ true, %logic.from2191 ], [ %t29, %logic.rend2194 ] + br label %logic.rend2198 +logic.rend2198: + br label %logic.end2197 +logic.end2197: + %t30 = phi i1 [ true, %logic.from2195 ], [ %t29, %logic.rend2198 ] call void @finch_str_drop(ptr %a7) ret i1 %t30 } @@ -25357,17 +25383,17 @@ entry: store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isSigned(%S.ast.Type %t2) - br label %logic.from2195 -logic.from2195: - br i1 %t3, label %logic.end2197, label %logic.rhs2196 -logic.rhs2196: + br label %logic.from2199 +logic.from2199: + br i1 %t3, label %logic.end2201, label %logic.rhs2200 +logic.rhs2200: %t4 = load %S.ast.Type, ptr %a1 %t5 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t4) - br label %logic.rend2198 -logic.rend2198: - br label %logic.end2197 -logic.end2197: - %t6 = phi i1 [ true, %logic.from2195 ], [ %t5, %logic.rend2198 ] + br label %logic.rend2202 +logic.rend2202: + br label %logic.end2201 +logic.end2201: + %t6 = phi i1 [ true, %logic.from2199 ], [ %t5, %logic.rend2202 ] ret i1 %t6 } @@ -25385,21 +25411,21 @@ entry: store { ptr, i64, i64 } { ptr @.str.1298, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br label %logic.from2199 -logic.from2199: - br i1 %t7, label %logic.end2201, label %logic.rhs2200 -logic.rhs2200: + br label %logic.from2203 +logic.from2203: + br i1 %t7, label %logic.end2205, label %logic.rhs2204 +logic.rhs2204: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1299, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.rend2202 -logic.rend2202: - br label %logic.end2201 -logic.end2201: - %t14 = phi i1 [ true, %logic.from2199 ], [ %t13, %logic.rend2202 ] + br label %logic.rend2206 +logic.rend2206: + br label %logic.end2205 +logic.end2205: + %t14 = phi i1 [ true, %logic.from2203 ], [ %t13, %logic.rend2206 ] ret i1 %t14 } @@ -25409,17 +25435,17 @@ entry: store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isInt(%S.ast.Type %t2) - br label %logic.from2203 -logic.from2203: - br i1 %t3, label %logic.end2205, label %logic.rhs2204 -logic.rhs2204: + br label %logic.from2207 +logic.from2207: + br i1 %t3, label %logic.end2209, label %logic.rhs2208 +logic.rhs2208: %t4 = load %S.ast.Type, ptr %a1 %t5 = call i1 @finch.gen.isFloat(%S.ast.Type %t4) - br label %logic.rend2206 -logic.rend2206: - br label %logic.end2205 -logic.end2205: - %t6 = phi i1 [ true, %logic.from2203 ], [ %t5, %logic.rend2206 ] + br label %logic.rend2210 +logic.rend2210: + br label %logic.end2209 +logic.end2209: + %t6 = phi i1 [ true, %logic.from2207 ], [ %t5, %logic.rend2210 ] ret i1 %t6 } @@ -25459,111 +25485,111 @@ entry: store { ptr, i64, i64 } { ptr @.str.1300, i64 4, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br i1 %t12, label %then2207, label %endif2209 -then2207: + br i1 %t12, label %then2211, label %endif2213 +then2211: call void @finch_str_drop(ptr %a7) ret i64 1 -endif2209: +endif2213: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1301, i64 4, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br label %logic.from2210 -logic.from2210: - br i1 %t17, label %logic.end2212, label %logic.rhs2211 -logic.rhs2211: + br label %logic.from2214 +logic.from2214: + br i1 %t17, label %logic.end2216, label %logic.rhs2215 +logic.rhs2215: %t18 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.1302, i64 2, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br label %logic.rend2213 -logic.rend2213: - br label %logic.end2212 -logic.end2212: - %t23 = phi i1 [ true, %logic.from2210 ], [ %t22, %logic.rend2213 ] - br label %logic.from2214 -logic.from2214: - br i1 %t23, label %logic.end2216, label %logic.rhs2215 -logic.rhs2215: + br label %logic.rend2217 +logic.rend2217: + br label %logic.end2216 +logic.end2216: + %t23 = phi i1 [ true, %logic.from2214 ], [ %t22, %logic.rend2217 ] + br label %logic.from2218 +logic.from2218: + br i1 %t23, label %logic.end2220, label %logic.rhs2219 +logic.rhs2219: %t24 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1303, i64 2, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br label %logic.rend2217 -logic.rend2217: - br label %logic.end2216 -logic.end2216: - %t29 = phi i1 [ true, %logic.from2214 ], [ %t28, %logic.rend2217 ] - br i1 %t29, label %then2218, label %endif2220 -then2218: + br label %logic.rend2221 +logic.rend2221: + br label %logic.end2220 +logic.end2220: + %t29 = phi i1 [ true, %logic.from2218 ], [ %t28, %logic.rend2221 ] + br i1 %t29, label %then2222, label %endif2224 +then2222: call void @finch_str_drop(ptr %a7) ret i64 8 -endif2220: +endif2224: %t30 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t30, ptr %a31 store { ptr, i64, i64 } { ptr @.str.1304, i64 3, i64 0 }, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 - br label %logic.from2221 -logic.from2221: - br i1 %t34, label %logic.end2223, label %logic.rhs2222 -logic.rhs2222: + br label %logic.from2225 +logic.from2225: + br i1 %t34, label %logic.end2227, label %logic.rhs2226 +logic.rhs2226: %t35 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1305, i64 3, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.rend2224 -logic.rend2224: - br label %logic.end2223 -logic.end2223: - %t40 = phi i1 [ true, %logic.from2221 ], [ %t39, %logic.rend2224 ] - br i1 %t40, label %then2225, label %endif2227 -then2225: + br label %logic.rend2228 +logic.rend2228: + br label %logic.end2227 +logic.end2227: + %t40 = phi i1 [ true, %logic.from2225 ], [ %t39, %logic.rend2228 ] + br i1 %t40, label %then2229, label %endif2231 +then2229: call void @finch_str_drop(ptr %a7) ret i64 16 -endif2227: +endif2231: %t41 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1306, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.from2228 -logic.from2228: - br i1 %t45, label %logic.end2230, label %logic.rhs2229 -logic.rhs2229: + br label %logic.from2232 +logic.from2232: + br i1 %t45, label %logic.end2234, label %logic.rhs2233 +logic.rhs2233: %t46 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t46, ptr %a47 store { ptr, i64, i64 } { ptr @.str.1307, i64 3, i64 0 }, ptr %a48 %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) %t50 = icmp ne i32 %t49, 0 - br label %logic.rend2231 -logic.rend2231: - br label %logic.end2230 -logic.end2230: - %t51 = phi i1 [ true, %logic.from2228 ], [ %t50, %logic.rend2231 ] - br label %logic.from2232 -logic.from2232: - br i1 %t51, label %logic.end2234, label %logic.rhs2233 -logic.rhs2233: + br label %logic.rend2235 +logic.rend2235: + br label %logic.end2234 +logic.end2234: + %t51 = phi i1 [ true, %logic.from2232 ], [ %t50, %logic.rend2235 ] + br label %logic.from2236 +logic.from2236: + br i1 %t51, label %logic.end2238, label %logic.rhs2237 +logic.rhs2237: %t52 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.1308, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br label %logic.rend2235 -logic.rend2235: - br label %logic.end2234 -logic.end2234: - %t57 = phi i1 [ true, %logic.from2232 ], [ %t56, %logic.rend2235 ] - br i1 %t57, label %then2236, label %endif2238 -then2236: + br label %logic.rend2239 +logic.rend2239: + br label %logic.end2238 +logic.end2238: + %t57 = phi i1 [ true, %logic.from2236 ], [ %t56, %logic.rend2239 ] + br i1 %t57, label %then2240, label %endif2242 +then2240: call void @finch_str_drop(ptr %a7) ret i64 32 -endif2238: +endif2242: call void @finch_str_drop(ptr %a7) ret i64 64 } @@ -25577,39 +25603,39 @@ entry: %t3 = load %S.ast.Type, ptr %a1 %t4 = call i1 @finch.gen.isInt(%S.ast.Type %t3) %t5 = xor i1 %t4, true - br label %logic.from2239 -logic.from2239: - br i1 %t5, label %logic.end2241, label %logic.rhs2240 -logic.rhs2240: + br label %logic.from2243 +logic.from2243: + br i1 %t5, label %logic.end2245, label %logic.rhs2244 +logic.rhs2244: %t6 = load %S.ast.Type, ptr %a2 %t7 = call i1 @finch.gen.isInt(%S.ast.Type %t6) %t8 = xor i1 %t7, true - br label %logic.rend2242 -logic.rend2242: - br label %logic.end2241 -logic.end2241: - %t9 = phi i1 [ true, %logic.from2239 ], [ %t8, %logic.rend2242 ] - br i1 %t9, label %then2243, label %endif2245 -then2243: + br label %logic.rend2246 +logic.rend2246: + br label %logic.end2245 +logic.end2245: + %t9 = phi i1 [ true, %logic.from2243 ], [ %t8, %logic.rend2246 ] + br i1 %t9, label %then2247, label %endif2249 +then2247: ret i1 false -endif2245: +endif2249: %t10 = load %S.ast.Type, ptr %a1 %t11 = call i1 @finch.gen.isSigned(%S.ast.Type %t10) - br label %logic.from2246 -logic.from2246: - br i1 %t11, label %logic.rhs2247, label %logic.end2248 -logic.rhs2247: + br label %logic.from2250 +logic.from2250: + br i1 %t11, label %logic.rhs2251, label %logic.end2252 +logic.rhs2251: %t12 = load %S.ast.Type, ptr %a2 %t13 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t12) - br label %logic.rend2249 -logic.rend2249: - br label %logic.end2248 -logic.end2248: - %t14 = phi i1 [ false, %logic.from2246 ], [ %t13, %logic.rend2249 ] - br i1 %t14, label %then2250, label %endif2252 -then2250: + br label %logic.rend2253 +logic.rend2253: + br label %logic.end2252 +logic.end2252: + %t14 = phi i1 [ false, %logic.from2250 ], [ %t13, %logic.rend2253 ] + br i1 %t14, label %then2254, label %endif2256 +then2254: ret i1 false -endif2252: +endif2256: %t15 = load %S.ast.Type, ptr %a2 %t16 = call i64 @finch.gen.bitsOf(%S.ast.Type %t15) %t17 = load %S.ast.Type, ptr %a1 @@ -25633,10 +25659,10 @@ entry: %t4 = load %S.ast.Type, ptr %a3 %t5 = call i1 @finch.gen.isInt(%S.ast.Type %t4) %t6 = xor i1 %t5, true - br i1 %t6, label %then2253, label %endif2255 -then2253: + br i1 %t6, label %then2257, label %endif2259 +then2257: ret i1 false -endif2255: +endif2259: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = call i64 @finch_str_to_int(ptr %a8, ptr @.str.1309, i64 464) @@ -25646,20 +25672,20 @@ endif2255: store i64 %t12, ptr %a13 %t14 = load i64, ptr %a10 %t15 = icmp slt i64 %t14, 0 - br i1 %t15, label %then2256, label %endif2258 -then2256: + br i1 %t15, label %then2260, label %endif2262 +then2260: %t16 = load %S.ast.Type, ptr %a3 %t17 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t16) - br i1 %t17, label %then2259, label %endif2261 -then2259: + br i1 %t17, label %then2263, label %endif2265 +then2263: ret i1 false -endif2261: +endif2265: %t18 = load i64, ptr %a13 %t19 = icmp eq i64 %t18, 64 - br i1 %t19, label %then2262, label %endif2264 -then2262: + br i1 %t19, label %then2266, label %endif2268 +then2266: ret i1 true -endif2264: +endif2268: %t20 = load i64, ptr %a10 %t21 = load i64, ptr %a13 %t22 = sub i64 %t21, 1 @@ -25667,28 +25693,28 @@ endif2264: %t24 = sub i64 0, %t23 %t25 = icmp sge i64 %t20, %t24 ret i1 %t25 -endif2258: +endif2262: %t26 = load i64, ptr %a13 %t27 = icmp eq i64 %t26, 64 - br i1 %t27, label %then2265, label %endif2267 -then2265: + br i1 %t27, label %then2269, label %endif2271 +then2269: ret i1 true -endif2267: +endif2271: %t28 = load i64, ptr %a13 %t29 = shl i64 1, %t28 %t30 = sub i64 %t29, 1 store i64 %t30, ptr %a31 %t32 = load %S.ast.Type, ptr %a3 %t33 = call i1 @finch.gen.isSigned(%S.ast.Type %t32) - br i1 %t33, label %then2268, label %endif2270 -then2268: + br i1 %t33, label %then2272, label %endif2274 +then2272: %t34 = load i64, ptr %a13 %t35 = sub i64 %t34, 1 %t36 = shl i64 1, %t35 %t37 = sub i64 %t36, 1 store i64 %t37, ptr %a31 - br label %endif2270 -endif2270: + br label %endif2274 +endif2274: %t38 = load i64, ptr %a10 %t39 = load i64, ptr %a31 %t40 = icmp sle i64 %t38, %t39 @@ -25710,38 +25736,38 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2271, label %ok2272 -panic2271: + br i1 %t5, label %panic2275, label %ok2276 +panic2275: call void @finch_panic(ptr @.str.1310, i64 486, ptr @.str.1311) unreachable -ok2272: +ok2276: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 16 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 - br label %for.cond2273 -for.cond2273: + br label %for.cond2277 +for.cond2277: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 - br i1 %t11, label %for.body2274, label %for.end2276 -for.body2274: + br i1 %t11, label %for.body2278, label %for.end2280 +for.body2278: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic2277, label %ok2278 -panic2277: + br i1 %t13, label %panic2281, label %ok2282 +panic2281: call void @finch_panic(ptr @.str.1312, i64 487, ptr @.str.1313) unreachable -ok2278: +ok2282: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range2279, label %inrange2280 -range2279: + br i1 %t18, label %range2283, label %inrange2284 +range2283: call void @finch_panic_index(ptr @.str.1314, i64 487, i64 %t15, i64 %t17) unreachable -inrange2280: +inrange2284: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.StructDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.StructDef, ptr %t20, i32 0, i32 0 @@ -25751,27 +25777,27 @@ inrange2280: store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from2281 -logic.from2281: - br i1 %t27, label %logic.rhs2282, label %logic.end2283 -logic.rhs2282: + br label %logic.from2285 +logic.from2285: + br i1 %t27, label %logic.rhs2286, label %logic.end2287 +logic.rhs2286: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic2284, label %ok2285 -panic2284: + br i1 %t29, label %panic2288, label %ok2289 +panic2288: call void @finch_panic(ptr @.str.1315, i64 487, ptr @.str.1316) unreachable -ok2285: +ok2289: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range2286, label %inrange2287 -range2286: + br i1 %t34, label %range2290, label %inrange2291 +range2290: call void @finch_panic_index(ptr @.str.1317, i64 487, i64 %t31, i64 %t33) unreachable -inrange2287: +inrange2291: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 1 @@ -25781,23 +25807,23 @@ inrange2287: store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend2288 -logic.rend2288: - br label %logic.end2283 -logic.end2283: - %t44 = phi i1 [ false, %logic.from2281 ], [ %t43, %logic.rend2288 ] - br i1 %t44, label %then2289, label %endif2291 -then2289: + br label %logic.rend2292 +logic.rend2292: + br label %logic.end2287 +logic.end2287: + %t44 = phi i1 [ false, %logic.from2285 ], [ %t43, %logic.rend2292 ] + br i1 %t44, label %then2293, label %endif2295 +then2293: %t45 = load i64, ptr %a9 ret i64 %t45 -endif2291: - br label %for.step2275 -for.step2275: +endif2295: + br label %for.step2279 +for.step2279: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 - br label %for.cond2273 -for.end2276: + br label %for.cond2277 +for.end2280: ret i64 -1 } @@ -25816,38 +25842,38 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2292, label %ok2293 -panic2292: + br i1 %t5, label %panic2296, label %ok2297 +panic2296: call void @finch_panic(ptr @.str.1318, i64 495, ptr @.str.1319) unreachable -ok2293: +ok2297: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 - br label %for.cond2294 -for.cond2294: + br label %for.cond2298 +for.cond2298: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 - br i1 %t11, label %for.body2295, label %for.end2297 -for.body2295: + br i1 %t11, label %for.body2299, label %for.end2301 +for.body2299: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic2298, label %ok2299 -panic2298: + br i1 %t13, label %panic2302, label %ok2303 +panic2302: call void @finch_panic(ptr @.str.1320, i64 496, ptr @.str.1321) unreachable -ok2299: +ok2303: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 21 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range2300, label %inrange2301 -range2300: + br i1 %t18, label %range2304, label %inrange2305 +range2304: call void @finch_panic_index(ptr @.str.1322, i64 496, i64 %t15, i64 %t17) unreachable -inrange2301: +inrange2305: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.EnumDef, ptr %t20, i32 0, i32 0 @@ -25857,27 +25883,27 @@ inrange2301: store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from2302 -logic.from2302: - br i1 %t27, label %logic.rhs2303, label %logic.end2304 -logic.rhs2303: + br label %logic.from2306 +logic.from2306: + br i1 %t27, label %logic.rhs2307, label %logic.end2308 +logic.rhs2307: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic2305, label %ok2306 -panic2305: + br i1 %t29, label %panic2309, label %ok2310 +panic2309: call void @finch_panic(ptr @.str.1323, i64 496, ptr @.str.1324) unreachable -ok2306: +ok2310: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 21 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range2307, label %inrange2308 -range2307: + br i1 %t34, label %range2311, label %inrange2312 +range2311: call void @finch_panic_index(ptr @.str.1325, i64 496, i64 %t31, i64 %t33) unreachable -inrange2308: +inrange2312: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.EnumDef, ptr %t36, i32 0, i32 1 @@ -25887,23 +25913,23 @@ inrange2308: store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend2309 -logic.rend2309: - br label %logic.end2304 -logic.end2304: - %t44 = phi i1 [ false, %logic.from2302 ], [ %t43, %logic.rend2309 ] - br i1 %t44, label %then2310, label %endif2312 -then2310: + br label %logic.rend2313 +logic.rend2313: + br label %logic.end2308 +logic.end2308: + %t44 = phi i1 [ false, %logic.from2306 ], [ %t43, %logic.rend2313 ] + br i1 %t44, label %then2314, label %endif2316 +then2314: %t45 = load i64, ptr %a9 ret i64 %t45 -endif2312: - br label %for.step2296 -for.step2296: +endif2316: + br label %for.step2300 +for.step2300: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 - br label %for.cond2294 -for.end2297: + br label %for.cond2298 +for.end2301: ret i64 -1 } @@ -25922,38 +25948,38 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2313, label %ok2314 -panic2313: + br i1 %t5, label %panic2317, label %ok2318 +panic2317: call void @finch_panic(ptr @.str.1326, i64 504, ptr @.str.1327) unreachable -ok2314: +ok2318: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 - br label %for.cond2315 -for.cond2315: + br label %for.cond2319 +for.cond2319: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 - br i1 %t11, label %for.body2316, label %for.end2318 -for.body2316: + br i1 %t11, label %for.body2320, label %for.end2322 +for.body2320: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic2319, label %ok2320 -panic2319: + br i1 %t13, label %panic2323, label %ok2324 +panic2323: call void @finch_panic(ptr @.str.1328, i64 505, ptr @.str.1329) unreachable -ok2320: +ok2324: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 22 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range2321, label %inrange2322 -range2321: + br i1 %t18, label %range2325, label %inrange2326 +range2325: call void @finch_panic_index(ptr @.str.1330, i64 505, i64 %t15, i64 %t17) unreachable -inrange2322: +inrange2326: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.SumDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.SumDef, ptr %t20, i32 0, i32 0 @@ -25963,27 +25989,27 @@ inrange2322: store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from2323 -logic.from2323: - br i1 %t27, label %logic.rhs2324, label %logic.end2325 -logic.rhs2324: + br label %logic.from2327 +logic.from2327: + br i1 %t27, label %logic.rhs2328, label %logic.end2329 +logic.rhs2328: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic2326, label %ok2327 -panic2326: + br i1 %t29, label %panic2330, label %ok2331 +panic2330: call void @finch_panic(ptr @.str.1331, i64 505, ptr @.str.1332) unreachable -ok2327: +ok2331: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 22 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range2328, label %inrange2329 -range2328: + br i1 %t34, label %range2332, label %inrange2333 +range2332: call void @finch_panic_index(ptr @.str.1333, i64 505, i64 %t31, i64 %t33) unreachable -inrange2329: +inrange2333: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.SumDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.SumDef, ptr %t36, i32 0, i32 1 @@ -25993,23 +26019,23 @@ inrange2329: store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend2330 -logic.rend2330: - br label %logic.end2325 -logic.end2325: - %t44 = phi i1 [ false, %logic.from2323 ], [ %t43, %logic.rend2330 ] - br i1 %t44, label %then2331, label %endif2333 -then2331: + br label %logic.rend2334 +logic.rend2334: + br label %logic.end2329 +logic.end2329: + %t44 = phi i1 [ false, %logic.from2327 ], [ %t43, %logic.rend2334 ] + br i1 %t44, label %then2335, label %endif2337 +then2335: %t45 = load i64, ptr %a9 ret i64 %t45 -endif2333: - br label %for.step2317 -for.step2317: +endif2337: + br label %for.step2321 +for.step2321: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 - br label %for.cond2315 -for.end2318: + br label %for.cond2319 +for.end2322: ret i64 -1 } @@ -26024,38 +26050,38 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2334, label %ok2335 -panic2334: + br i1 %t4, label %panic2338, label %ok2339 +panic2338: call void @finch_panic(ptr @.str.1334, i64 513, ptr @.str.1335) unreachable -ok2335: +ok2339: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 - br label %for.cond2336 -for.cond2336: + br label %for.cond2340 +for.cond2340: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 - br i1 %t10, label %for.body2337, label %for.end2339 -for.body2337: + br i1 %t10, label %for.body2341, label %for.end2343 +for.body2341: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic2340, label %ok2341 -panic2340: + br i1 %t12, label %panic2344, label %ok2345 +panic2344: call void @finch_panic(ptr @.str.1336, i64 514, ptr @.str.1337) unreachable -ok2341: +ok2345: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 0 %t14 = load i64, ptr %a8 %t15 = load { ptr, i64, i64 }, ptr %t13 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 - br i1 %t17, label %range2342, label %inrange2343 -range2342: + br i1 %t17, label %range2346, label %inrange2347 +range2346: call void @finch_panic_index(ptr @.str.1338, i64 514, i64 %t14, i64 %t16) unreachable -inrange2343: +inrange2347: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i64 %t14 %t20 = getelementptr inbounds %S.ast.Program, ptr %t19, i32 0, i32 0 @@ -26065,18 +26091,18 @@ inrange2343: store { ptr, i64, i64 } %t22, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %then2344, label %endif2346 -then2344: + br i1 %t26, label %then2348, label %endif2350 +then2348: %t27 = load i64, ptr %a8 ret i64 %t27 -endif2346: - br label %for.step2338 -for.step2338: +endif2350: + br label %for.step2342 +for.step2342: %t28 = load i64, ptr %a8 %t29 = add i64 %t28, 1 store i64 %t29, ptr %a8 - br label %for.cond2336 -for.end2339: + br label %for.cond2340 +for.end2343: ret i64 -1 } @@ -26092,31 +26118,31 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2347, label %ok2348 -panic2347: + br i1 %t4, label %panic2351, label %ok2352 +panic2351: call void @finch_panic(ptr @.str.1339, i64 522, ptr @.str.1340) unreachable -ok2348: +ok2352: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic2349, label %ok2350 -panic2349: + br i1 %t8, label %panic2353, label %ok2354 +panic2353: call void @finch_panic(ptr @.str.1341, i64 522, ptr @.str.1342) unreachable -ok2350: +ok2354: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 14 %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = call i64 @finch.gen.progOf(ptr %t6, { ptr, i64, i64 } %t10) %t12 = load { ptr, i64, i64 }, ptr %t5 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 - br i1 %t14, label %range2351, label %inrange2352 -range2351: + br i1 %t14, label %range2355, label %inrange2356 +range2355: call void @finch_panic_index(ptr @.str.1343, i64 522, i64 %t11, i64 %t13) unreachable -inrange2352: +inrange2356: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Program, ptr %t15, i64 %t11 %t17 = getelementptr inbounds %S.ast.Program, ptr %t16, i32 0, i32 2 @@ -26126,27 +26152,27 @@ inrange2352: %t21 = load i64, ptr %t18 %t22 = load ptr, ptr %t17 store i64 0, ptr %a23 - br label %find.cond2353 -find.cond2353: + br label %find.cond2357 +find.cond2357: %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, %t21 - br i1 %t25, label %find.body2354, label %find.end2357 -find.body2354: + br i1 %t25, label %find.body2358, label %find.end2361 +find.body2358: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t24 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } %t19, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br i1 %t31, label %find.hit2355, label %find.next2356 -find.hit2355: + br i1 %t31, label %find.hit2359, label %find.next2360 +find.hit2359: store i64 %t24, ptr %a20 - br label %find.end2357 -find.next2356: + br label %find.end2361 +find.next2360: %t32 = add i64 %t24, 1 store i64 %t32, ptr %a23 - br label %find.cond2353 -find.end2357: + br label %find.cond2357 +find.end2361: %t33 = load i64, ptr %a20 %t34 = icmp sge i64 %t33, 0 ret i1 %t34 @@ -26288,18 +26314,18 @@ entry: store { ptr, i64, i64 } { ptr @.str.1344, i64 5, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br i1 %t9, label %then2358, label %endif2360 -then2358: + br i1 %t9, label %then2362, label %endif2364 +then2362: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 0, %t13 - br i1 %t14, label %range2361, label %inrange2362 -range2361: + br i1 %t14, label %range2365, label %inrange2366 +range2365: call void @finch_panic_index(ptr @.str.1345, i64 527, i64 0, i64 %t13) unreachable -inrange2362: +inrange2366: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 %t17 = load %S.ast.Type, ptr %t16 @@ -26309,25 +26335,25 @@ inrange2362: store %S.ast.Type %t19, ptr %a21 call void @finch.drop.S_ast_Type(ptr %a21) ret %S.ast.Type %t20 -endif2360: +endif2364: %t22 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.1346, i64 3, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br i1 %t27, label %then2363, label %endif2365 -then2363: + br i1 %t27, label %then2367, label %endif2369 +then2367: %t28 = load ptr, ptr %a1 %t29 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 - br i1 %t32, label %range2366, label %inrange2367 -range2366: + br i1 %t32, label %range2370, label %inrange2371 +range2370: call void @finch_panic_index(ptr @.str.1347, i64 530, i64 0, i64 %t31) unreachable -inrange2367: +inrange2371: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Type, ptr %t33, i64 0 %t35 = load %S.ast.Type, ptr %t34 @@ -26337,68 +26363,68 @@ inrange2367: %t39 = load %S.ast.Type, ptr %a38 %t40 = call i1 @finch.gen.isInt(%S.ast.Type %t39) %t41 = xor i1 %t40, true - br label %logic.from2368 -logic.from2368: - br i1 %t41, label %logic.rhs2369, label %logic.end2370 -logic.rhs2369: + br label %logic.from2372 +logic.from2372: + br i1 %t41, label %logic.rhs2373, label %logic.end2374 +logic.rhs2373: %t42 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t43 = load { ptr, i64, i64 }, ptr %t42 store { ptr, i64, i64 } %t43, ptr %a44 store { ptr, i64, i64 } { ptr @.str.1348, i64 4, i64 0 }, ptr %a45 %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) %t47 = icmp eq i32 %t46, 0 - br label %logic.rend2371 -logic.rend2371: - br label %logic.end2370 -logic.end2370: - %t48 = phi i1 [ false, %logic.from2368 ], [ %t47, %logic.rend2371 ] - br label %logic.from2372 -logic.from2372: - br i1 %t48, label %logic.rhs2373, label %logic.end2374 -logic.rhs2373: + br label %logic.rend2375 +logic.rend2375: + br label %logic.end2374 +logic.end2374: + %t48 = phi i1 [ false, %logic.from2372 ], [ %t47, %logic.rend2375 ] + br label %logic.from2376 +logic.from2376: + br i1 %t48, label %logic.rhs2377, label %logic.end2378 +logic.rhs2377: %t49 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.1349, i64 4, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp eq i32 %t53, 0 - br label %logic.rend2375 -logic.rend2375: - br label %logic.end2374 -logic.end2374: - %t55 = phi i1 [ false, %logic.from2372 ], [ %t54, %logic.rend2375 ] - br label %logic.from2376 -logic.from2376: - br i1 %t55, label %logic.rhs2377, label %logic.end2378 -logic.rhs2377: + br label %logic.rend2379 +logic.rend2379: + br label %logic.end2378 +logic.end2378: + %t55 = phi i1 [ false, %logic.from2376 ], [ %t54, %logic.rend2379 ] + br label %logic.from2380 +logic.from2380: + br i1 %t55, label %logic.rhs2381, label %logic.end2382 +logic.rhs2381: %t56 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.1350, i64 3, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp eq i32 %t60, 0 - br label %logic.rend2379 -logic.rend2379: - br label %logic.end2378 -logic.end2378: - %t62 = phi i1 [ false, %logic.from2376 ], [ %t61, %logic.rend2379 ] - br label %logic.from2380 -logic.from2380: - br i1 %t62, label %logic.rhs2381, label %logic.end2382 -logic.rhs2381: + br label %logic.rend2383 +logic.rend2383: + br label %logic.end2382 +logic.end2382: + %t62 = phi i1 [ false, %logic.from2380 ], [ %t61, %logic.rend2383 ] + br label %logic.from2384 +logic.from2384: + br i1 %t62, label %logic.rhs2385, label %logic.end2386 +logic.rhs2385: %t63 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t64 = load { ptr, i64, i64 }, ptr %t63 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.1351, i64 4, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp eq i32 %t67, 0 - br label %logic.rend2383 -logic.rend2383: - br label %logic.end2382 -logic.end2382: - %t69 = phi i1 [ false, %logic.from2380 ], [ %t68, %logic.rend2383 ] - br i1 %t69, label %then2384, label %endif2386 -then2384: + br label %logic.rend2387 +logic.rend2387: + br label %logic.end2386 +logic.end2386: + %t69 = phi i1 [ false, %logic.from2384 ], [ %t68, %logic.rend2387 ] + br i1 %t69, label %then2388, label %endif2390 +then2388: %t70 = load ptr, ptr %a1 %t71 = load %S.ast.Node, ptr %a3 %t72 = load %S.ast.Type, ptr %a38 @@ -26412,18 +26438,18 @@ then2384: call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } %t78, ptr %a79 call void @finch_str_drop(ptr %a79) - br label %endif2386 -endif2386: + br label %endif2390 +endif2390: %t80 = load ptr, ptr %a1 %t81 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t82 = load { ptr, i64, i64 }, ptr %t81 %t83 = extractvalue { ptr, i64, i64 } %t82, 1 %t84 = icmp uge i64 1, %t83 - br i1 %t84, label %range2387, label %inrange2388 -range2387: + br i1 %t84, label %range2391, label %inrange2392 +range2391: call void @finch_panic_index(ptr @.str.1353, i64 534, i64 1, i64 %t83) unreachable -inrange2388: +inrange2392: %t85 = extractvalue { ptr, i64, i64 } %t82, 0 %t86 = getelementptr inbounds %S.ast.Type, ptr %t85, i64 1 %t87 = load %S.ast.Type, ptr %t86 @@ -26436,28 +26462,28 @@ inrange2388: store { ptr, i64, i64 } { ptr @.str.1354, i64 4, i64 0 }, ptr %a94 %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) %t96 = icmp ne i32 %t95, 0 - br i1 %t96, label %then2389, label %endif2391 -then2389: + br i1 %t96, label %then2393, label %endif2395 +then2393: %t97 = load ptr, ptr %a1 %t98 = load %S.ast.Node, ptr %a3 call void @finch.gen.fail(ptr %t97, %S.ast.Node %t98, { ptr, i64, i64 } { ptr @.str.1355, i64 41, i64 0 }) - br label %endif2391 -endif2391: + br label %endif2395 +endif2395: %t99 = load %S.ast.Type, ptr %a38 %t100 = load %S.ast.Type, ptr %a90 %t101 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t99, %S.ast.Type %t100) call void @finch.drop.S_ast_Type(ptr %a90) call void @finch.drop.S_ast_Type(ptr %a38) ret %S.ast.Type %t101 -endif2365: +endif2369: %t102 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 store { ptr, i64, i64 } { ptr @.str.1356, i64 5, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) %t107 = icmp ne i32 %t106, 0 - br i1 %t107, label %then2392, label %endif2394 -then2392: + br i1 %t107, label %then2396, label %endif2398 +then2396: %t108 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1357, i64 5, i64 0 }, 0 %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t110 = load i64, ptr %t109 @@ -26470,11 +26496,11 @@ then2392: %t117 = load { ptr, i64, i64 }, ptr %t116 %t118 = extractvalue { ptr, i64, i64 } %t117, 1 %t119 = icmp uge i64 0, %t118 - br i1 %t119, label %range2395, label %inrange2396 -range2395: + br i1 %t119, label %range2399, label %inrange2400 +range2399: call void @finch_panic_index(ptr @.str.1358, i64 542, i64 0, i64 %t118) unreachable -inrange2396: +inrange2400: %t120 = extractvalue { ptr, i64, i64 } %t117, 0 %t121 = getelementptr inbounds %S.ast.Type, ptr %t120, i64 0 %t122 = load %S.ast.Type, ptr %t121 @@ -26489,37 +26515,37 @@ inrange2396: store i64 %t126, ptr %t114 %t129 = load %S.ast.Type, ptr %a112 ret %S.ast.Type %t129 -endif2394: +endif2398: %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t131 = load { ptr, i64, i64 }, ptr %t130 store { ptr, i64, i64 } %t131, ptr %a132 store { ptr, i64, i64 } { ptr @.str.1359, i64 3, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 - br i1 %t135, label %then2397, label %endif2399 -then2397: + br i1 %t135, label %then2401, label %endif2403 +then2401: %t136 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 %t138 = load i64, ptr %t137 %t139 = icmp eq i64 %t138, 0 - br i1 %t139, label %then2400, label %endif2402 -then2400: + br i1 %t139, label %then2404, label %endif2406 +then2404: %t140 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t140, ptr %a141 call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) %t143 = load %S.ast.Type, ptr %a142 ret %S.ast.Type %t143 -endif2402: +endif2406: %t144 = load ptr, ptr %a1 %t145 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t146 = load { ptr, i64, i64 }, ptr %t145 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 0, %t147 - br i1 %t148, label %range2403, label %inrange2404 -range2403: + br i1 %t148, label %range2407, label %inrange2408 +range2407: call void @finch_panic_index(ptr @.str.1360, i64 549, i64 0, i64 %t147) unreachable -inrange2404: +inrange2408: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 0 %t151 = load %S.ast.Type, ptr %t150 @@ -26529,49 +26555,49 @@ inrange2404: store %S.ast.Type %t153, ptr %a155 call void @finch.drop.S_ast_Type(ptr %a155) ret %S.ast.Type %t154 -endif2399: +endif2403: %t156 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.1361, i64 5, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp eq i32 %t160, 0 - br i1 %t161, label %then2405, label %endif2407 -then2405: + br i1 %t161, label %then2409, label %endif2411 +then2409: %t162 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t162, ptr %a163 call void @finch.copy.S_ast_Type(ptr %a164, ptr %a163) %t165 = load %S.ast.Type, ptr %a164 ret %S.ast.Type %t165 -endif2407: +endif2411: %t166 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i32 0, i32 1 %t168 = load i64, ptr %t167 %t169 = icmp eq i64 %t168, 0 - br label %logic.from2408 -logic.from2408: - br i1 %t169, label %logic.rhs2409, label %logic.end2410 -logic.rhs2409: + br label %logic.from2412 +logic.from2412: + br i1 %t169, label %logic.rhs2413, label %logic.end2414 +logic.rhs2413: %t170 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 %t172 = load i64, ptr %t171 %t173 = icmp eq i64 %t172, 0 - br label %logic.rend2411 -logic.rend2411: - br label %logic.end2410 -logic.end2410: - %t174 = phi i1 [ false, %logic.from2408 ], [ %t173, %logic.rend2411 ] - br label %logic.from2412 -logic.from2412: - br i1 %t174, label %logic.rhs2413, label %logic.end2414 -logic.rhs2413: + br label %logic.rend2415 +logic.rend2415: + br label %logic.end2414 +logic.end2414: + %t174 = phi i1 [ false, %logic.from2412 ], [ %t173, %logic.rend2415 ] + br label %logic.from2416 +logic.from2416: + br i1 %t174, label %logic.rhs2417, label %logic.end2418 +logic.rhs2417: %t175 = load ptr, ptr %a1 %t176 = icmp eq ptr %t175, null - br i1 %t176, label %panic2415, label %ok2416 -panic2415: + br i1 %t176, label %panic2419, label %ok2420 +panic2419: call void @finch_panic(ptr @.str.1362, i64 555, ptr @.str.1363) unreachable -ok2416: +ok2420: %t177 = getelementptr inbounds %S.gen.Gen, ptr %t175, i32 0, i32 18 %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 %t179 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -26580,51 +26606,51 @@ ok2416: %t182 = load i64, ptr %t178 %t183 = load ptr, ptr %t177 store i64 0, ptr %a184 - br label %find.cond2417 -find.cond2417: + br label %find.cond2421 +find.cond2421: %t185 = load i64, ptr %a184 %t186 = icmp slt i64 %t185, %t182 - br i1 %t186, label %find.body2418, label %find.end2421 -find.body2418: + br i1 %t186, label %find.body2422, label %find.end2425 +find.body2422: %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i64 %t185 %t188 = load { ptr, i64, i64 }, ptr %t187 store { ptr, i64, i64 } %t188, ptr %a189 store { ptr, i64, i64 } %t180, ptr %a190 %t191 = call i32 @finch_str_eq(ptr %a189, ptr %a190) %t192 = icmp ne i32 %t191, 0 - br i1 %t192, label %find.hit2419, label %find.next2420 -find.hit2419: + br i1 %t192, label %find.hit2423, label %find.next2424 +find.hit2423: store i64 %t185, ptr %a181 - br label %find.end2421 -find.next2420: + br label %find.end2425 +find.next2424: %t193 = add i64 %t185, 1 store i64 %t193, ptr %a184 - br label %find.cond2417 -find.end2421: + br label %find.cond2421 +find.end2425: %t194 = load i64, ptr %a181 %t195 = icmp sge i64 %t194, 0 - br label %logic.rend2422 -logic.rend2422: - br label %logic.end2414 -logic.end2414: - %t196 = phi i1 [ false, %logic.from2412 ], [ %t195, %logic.rend2422 ] - br i1 %t196, label %then2423, label %endif2425 -then2423: + br label %logic.rend2426 +logic.rend2426: + br label %logic.end2418 +logic.end2418: + %t196 = phi i1 [ false, %logic.from2416 ], [ %t195, %logic.rend2426 ] + br i1 %t196, label %then2427, label %endif2429 +then2427: %t197 = load ptr, ptr %a1 %t198 = icmp eq ptr %t197, null - br i1 %t198, label %panic2426, label %ok2427 -panic2426: + br i1 %t198, label %panic2430, label %ok2431 +panic2430: call void @finch_panic(ptr @.str.1364, i64 556, ptr @.str.1365) unreachable -ok2427: +ok2431: %t199 = getelementptr inbounds %S.gen.Gen, ptr %t197, i32 0, i32 19 %t200 = load ptr, ptr %a1 %t201 = icmp eq ptr %t200, null - br i1 %t201, label %panic2428, label %ok2429 -panic2428: + br i1 %t201, label %panic2432, label %ok2433 +panic2432: call void @finch_panic(ptr @.str.1366, i64 556, ptr @.str.1367) unreachable -ok2429: +ok2433: %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 18 %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i32 0, i32 1 %t204 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -26633,36 +26659,36 @@ ok2429: %t207 = load i64, ptr %t203 %t208 = load ptr, ptr %t202 store i64 0, ptr %a209 - br label %find.cond2430 -find.cond2430: + br label %find.cond2434 +find.cond2434: %t210 = load i64, ptr %a209 %t211 = icmp slt i64 %t210, %t207 - br i1 %t211, label %find.body2431, label %find.end2434 -find.body2431: + br i1 %t211, label %find.body2435, label %find.end2438 +find.body2435: %t212 = getelementptr inbounds { ptr, i64, i64 }, ptr %t208, i64 %t210 %t213 = load { ptr, i64, i64 }, ptr %t212 store { ptr, i64, i64 } %t213, ptr %a214 store { ptr, i64, i64 } %t205, ptr %a215 %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) %t217 = icmp ne i32 %t216, 0 - br i1 %t217, label %find.hit2432, label %find.next2433 -find.hit2432: + br i1 %t217, label %find.hit2436, label %find.next2437 +find.hit2436: store i64 %t210, ptr %a206 - br label %find.end2434 -find.next2433: + br label %find.end2438 +find.next2437: %t218 = add i64 %t210, 1 store i64 %t218, ptr %a209 - br label %find.cond2430 -find.end2434: + br label %find.cond2434 +find.end2438: %t219 = load i64, ptr %a206 %t220 = load { ptr, i64, i64 }, ptr %t199 %t221 = extractvalue { ptr, i64, i64 } %t220, 1 %t222 = icmp uge i64 %t219, %t221 - br i1 %t222, label %range2435, label %inrange2436 -range2435: + br i1 %t222, label %range2439, label %inrange2440 +range2439: call void @finch_panic_index(ptr @.str.1368, i64 556, i64 %t219, i64 %t221) unreachable -inrange2436: +inrange2440: %t223 = extractvalue { ptr, i64, i64 } %t220, 0 %t224 = getelementptr inbounds %S.ast.Type, ptr %t223, i64 %t219 %t225 = load %S.ast.Type, ptr %t224 @@ -26670,24 +26696,24 @@ inrange2436: call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) %t228 = load %S.ast.Type, ptr %a227 ret %S.ast.Type %t228 -endif2425: +endif2429: %t229 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 %t231 = load i64, ptr %t230 %t232 = icmp sgt i64 %t231, 0 - br i1 %t232, label %then2437, label %endif2439 -then2437: + br i1 %t232, label %then2441, label %endif2443 +then2441: store { ptr, i64, i64 } zeroinitializer, ptr %a233 %t234 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 store i64 0, ptr %a235 - br label %each.cond2440 -each.cond2440: + br label %each.cond2444 +each.cond2444: %t236 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 %t237 = load i64, ptr %t236 %t238 = load i64, ptr %a235 %t239 = icmp slt i64 %t238, %t237 - br i1 %t239, label %each.body2441, label %each.end2443 -each.body2441: + br i1 %t239, label %each.body2445, label %each.end2447 +each.body2445: %t240 = load ptr, ptr %t234 %t241 = getelementptr inbounds %S.ast.Type, ptr %t240, i64 %t238 %t242 = load %S.ast.Type, ptr %t241 @@ -26704,20 +26730,20 @@ each.body2441: %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i64 %t249 store %S.ast.Type %t248, ptr %t252 store i64 %t250, ptr %t244 - br label %each.step2442 -each.step2442: + br label %each.step2446 +each.step2446: %t253 = load i64, ptr %a235 %t254 = add i64 %t253, 1 store i64 %t254, ptr %a235 - br label %each.cond2440 -each.end2443: + br label %each.cond2444 +each.end2447: %t255 = load ptr, ptr %a1 %t256 = icmp eq ptr %t255, null - br i1 %t256, label %panic2444, label %ok2445 -panic2444: + br i1 %t256, label %panic2448, label %ok2449 +panic2448: call void @finch_panic(ptr @.str.1369, i64 564, ptr @.str.1370) unreachable -ok2445: +ok2449: %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 14 %t258 = load { ptr, i64, i64 }, ptr %t257 store { ptr, i64, i64 } %t258, ptr %a259 @@ -26728,15 +26754,15 @@ ok2445: %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load i64, ptr %t264 %t266 = icmp sgt i64 %t265, 0 - br i1 %t266, label %then2446, label %endif2448 -then2446: + br i1 %t266, label %then2450, label %endif2452 +then2450: %t267 = load ptr, ptr %a1 %t268 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t269 = load { ptr, i64, i64 }, ptr %t268 %t270 = call i1 @finch.gen.imports(ptr %t267, { ptr, i64, i64 } %t269) %t271 = xor i1 %t270, true - br i1 %t271, label %then2449, label %endif2451 -then2449: + br i1 %t271, label %then2453, label %endif2455 +then2453: %t272 = load ptr, ptr %a1 %t273 = load %S.ast.Node, ptr %a3 %t274 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -26768,8 +26794,8 @@ then2449: call void @finch.gen.fail(ptr %t272, %S.ast.Node %t273, { ptr, i64, i64 } %t296) store { ptr, i64, i64 } %t296, ptr %a297 call void @finch_str_drop(ptr %a297) - br label %endif2451 -endif2451: + br label %endif2455 +endif2455: %t298 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t299 = load { ptr, i64, i64 }, ptr %t298 store { ptr, i64, i64 } %t299, ptr %a300 @@ -26779,8 +26805,8 @@ endif2451: store { ptr, i64, i64 } %t302, ptr %a262 store { ptr, i64, i64 } %t303, ptr %a304 call void @finch_str_drop(ptr %a304) - br label %endif2448 -endif2448: + br label %endif2452 +endif2452: %t305 = load ptr, ptr %a1 %t306 = load { ptr, i64, i64 }, ptr %a262 %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -26791,22 +26817,22 @@ endif2448: call void @finch_str_drop(ptr %a262) call void @finch.drop.arr_S_ast_Type(ptr %a233) ret %S.ast.Type %t311 -endif2439: +endif2443: %t312 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t313 = load { ptr, i64, i64 }, ptr %t312 store { ptr, i64, i64 } %t313, ptr %a314 store { ptr, i64, i64 } { ptr @.str.1374, i64 1, i64 0 }, ptr %a315 %t316 = call i32 @finch_str_eq(ptr %a314, ptr %a315) %t317 = icmp ne i32 %t316, 0 - br i1 %t317, label %then2452, label %endif2454 -then2452: + br i1 %t317, label %then2456, label %endif2458 +then2456: %t318 = load ptr, ptr %a1 %t319 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t320 = load { ptr, i64, i64 }, ptr %t319 %t321 = call i64 @finch.gen.findStruct(ptr %t318, { ptr, i64, i64 } { ptr @.str.1375, i64 1, i64 0 }, { ptr, i64, i64 } %t320) %t322 = icmp slt i64 %t321, 0 - br i1 %t322, label %then2455, label %endif2457 -then2455: + br i1 %t322, label %then2459, label %endif2461 +then2459: %t323 = load ptr, ptr %a1 %t324 = load %S.ast.Node, ptr %a3 %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -26824,8 +26850,8 @@ then2455: call void @finch.gen.fail(ptr %t323, %S.ast.Node %t324, { ptr, i64, i64 } %t335) store { ptr, i64, i64 } %t335, ptr %a336 call void @finch_str_drop(ptr %a336) - br label %endif2457 -endif2457: + br label %endif2461 +endif2461: %t337 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1378, i64 6, i64 0 }, 0 %t338 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t339 = load { ptr, i64, i64 }, ptr %t338 @@ -26835,14 +26861,14 @@ endif2457: %t343 = insertvalue %S.ast.Type %t337, { ptr, i64, i64 } %t342, 2 %t344 = insertvalue %S.ast.Type %t343, { ptr, i64, i64 } { ptr @.str.1379, i64 1, i64 0 }, 3 ret %S.ast.Type %t344 -endif2454: +endif2458: %t345 = load ptr, ptr %a1 %t346 = icmp eq ptr %t345, null - br i1 %t346, label %panic2458, label %ok2459 -panic2458: + br i1 %t346, label %panic2462, label %ok2463 +panic2462: call void @finch_panic(ptr @.str.1380, i64 579, ptr @.str.1381) unreachable -ok2459: +ok2463: %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 14 %t348 = load { ptr, i64, i64 }, ptr %t347 store { ptr, i64, i64 } %t348, ptr %a349 @@ -26853,15 +26879,15 @@ ok2459: %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i32 0, i32 1 %t355 = load i64, ptr %t354 %t356 = icmp sgt i64 %t355, 0 - br i1 %t356, label %then2460, label %endif2462 -then2460: + br i1 %t356, label %then2464, label %endif2466 +then2464: %t357 = load ptr, ptr %a1 %t358 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t359 = load { ptr, i64, i64 }, ptr %t358 %t360 = call i1 @finch.gen.imports(ptr %t357, { ptr, i64, i64 } %t359) %t361 = xor i1 %t360, true - br i1 %t361, label %then2463, label %endif2465 -then2463: + br i1 %t361, label %then2467, label %endif2469 +then2467: %t362 = load ptr, ptr %a1 %t363 = load %S.ast.Node, ptr %a3 %t364 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -26893,8 +26919,8 @@ then2463: call void @finch.gen.fail(ptr %t362, %S.ast.Node %t363, { ptr, i64, i64 } %t386) store { ptr, i64, i64 } %t386, ptr %a387 call void @finch_str_drop(ptr %a387) - br label %endif2465 -endif2465: + br label %endif2469 +endif2469: %t388 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t389 = load { ptr, i64, i64 }, ptr %t388 store { ptr, i64, i64 } %t389, ptr %a390 @@ -26904,16 +26930,16 @@ endif2465: store { ptr, i64, i64 } %t392, ptr %a352 store { ptr, i64, i64 } %t393, ptr %a394 call void @finch_str_drop(ptr %a394) - br label %endif2462 -endif2462: + br label %endif2466 +endif2466: %t395 = load ptr, ptr %a1 %t396 = load { ptr, i64, i64 }, ptr %a352 %t397 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t398 = load { ptr, i64, i64 }, ptr %t397 %t399 = call i64 @finch.gen.findEnum(ptr %t395, { ptr, i64, i64 } %t396, { ptr, i64, i64 } %t398) %t400 = icmp sge i64 %t399, 0 - br i1 %t400, label %then2466, label %endif2468 -then2466: + br i1 %t400, label %then2470, label %endif2472 +then2470: %t401 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1385, i64 4, i64 0 }, 0 %t402 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t403 = load { ptr, i64, i64 }, ptr %t402 @@ -26928,35 +26954,35 @@ then2466: %t412 = insertvalue %S.ast.Type %t407, { ptr, i64, i64 } %t411, 3 call void @finch_str_drop(ptr %a352) ret %S.ast.Type %t412 -endif2468: +endif2472: %t413 = load ptr, ptr %a1 %t414 = load { ptr, i64, i64 }, ptr %a352 %t415 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t416 = load { ptr, i64, i64 }, ptr %t415 %t417 = call i64 @finch.gen.findStruct(ptr %t413, { ptr, i64, i64 } %t414, { ptr, i64, i64 } %t416) %t418 = icmp slt i64 %t417, 0 - br i1 %t418, label %then2469, label %endif2471 -then2469: + br i1 %t418, label %then2473, label %endif2475 +then2473: %t419 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t420 = getelementptr inbounds { ptr, i64, i64 }, ptr %t419, i32 0, i32 1 %t421 = load i64, ptr %t420 %t422 = icmp eq i64 %t421, 0 - br label %logic.from2472 -logic.from2472: - br i1 %t422, label %logic.rhs2473, label %logic.end2474 -logic.rhs2473: + br label %logic.from2476 +logic.from2476: + br i1 %t422, label %logic.rhs2477, label %logic.end2478 +logic.rhs2477: %t423 = load ptr, ptr %a1 %t424 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t425 = load { ptr, i64, i64 }, ptr %t424 %t426 = call i64 @finch.gen.findStruct(ptr %t423, { ptr, i64, i64 } { ptr @.str.1386, i64 1, i64 0 }, { ptr, i64, i64 } %t425) %t427 = icmp sge i64 %t426, 0 - br label %logic.rend2475 -logic.rend2475: - br label %logic.end2474 -logic.end2474: - %t428 = phi i1 [ false, %logic.from2472 ], [ %t427, %logic.rend2475 ] - br i1 %t428, label %then2476, label %endif2478 -then2476: + br label %logic.rend2479 +logic.rend2479: + br label %logic.end2478 +logic.end2478: + %t428 = phi i1 [ false, %logic.from2476 ], [ %t427, %logic.rend2479 ] + br i1 %t428, label %then2480, label %endif2482 +then2480: %t429 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1387, i64 6, i64 0 }, 0 %t430 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t431 = load { ptr, i64, i64 }, ptr %t430 @@ -26967,7 +26993,7 @@ then2476: %t436 = insertvalue %S.ast.Type %t435, { ptr, i64, i64 } { ptr @.str.1388, i64 1, i64 0 }, 3 call void @finch_str_drop(ptr %a352) ret %S.ast.Type %t436 -endif2478: +endif2482: %t437 = load ptr, ptr %a1 %t438 = load %S.ast.Node, ptr %a3 %t439 = load %S.ast.Type, ptr %a2 @@ -26987,8 +27013,8 @@ endif2478: call void @finch.gen.fail(ptr %t437, %S.ast.Node %t438, { ptr, i64, i64 } %t450) store { ptr, i64, i64 } %t450, ptr %a451 call void @finch_str_drop(ptr %a451) - br label %endif2471 -endif2471: + br label %endif2475 +endif2475: %t452 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1391, i64 6, i64 0 }, 0 %t453 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t454 = load { ptr, i64, i64 }, ptr %t453 @@ -27067,10 +27093,10 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp eq i64 %t3, 0 - br i1 %t4, label %then2479, label %endif2481 -then2479: + br i1 %t4, label %then2483, label %endif2485 +then2483: ret { ptr, i64, i64 } { ptr @.str.1404, i64 4, i64 0 } -endif2481: +endif2485: %t5 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t5, ptr %a6 call void @finch_str_copy(ptr %a7, ptr %a6) @@ -27158,29 +27184,29 @@ entry: store { ptr, i64, i64 } { ptr @.str.1405, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br i1 %t13, label %then2482, label %endif2484 -then2482: + br i1 %t13, label %then2486, label %endif2488 +then2486: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1406, i64 2, i64 0 } -endif2484: +endif2488: %t14 = load %S.ast.Type, ptr %a2 %t15 = call i1 @finch.gen.isInt(%S.ast.Type %t14) - br label %logic.from2485 -logic.from2485: - br i1 %t15, label %logic.end2487, label %logic.rhs2486 -logic.rhs2486: + br label %logic.from2489 +logic.from2489: + br i1 %t15, label %logic.end2491, label %logic.rhs2490 +logic.rhs2490: %t16 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1407, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br label %logic.rend2488 -logic.rend2488: - br label %logic.end2487 -logic.end2487: - %t21 = phi i1 [ true, %logic.from2485 ], [ %t20, %logic.rend2488 ] - br i1 %t21, label %then2489, label %endif2491 -then2489: + br label %logic.rend2492 +logic.rend2492: + br label %logic.end2491 +logic.end2491: + %t21 = phi i1 [ true, %logic.from2489 ], [ %t20, %logic.rend2492 ] + br i1 %t21, label %then2493, label %endif2495 +then2493: %t22 = load %S.ast.Type, ptr %a2 %t23 = call i64 @finch.gen.bitsOf(%S.ast.Type %t22) call void @finch_str_from_int(ptr %a24, i64 %t23) @@ -27193,68 +27219,68 @@ then2489: %t30 = load { ptr, i64, i64 }, ptr %a26 call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } %t30 -endif2491: +endif2495: %t31 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t31, ptr %a32 store { ptr, i64, i64 } { ptr @.str.1409, i64 5, i64 0 }, ptr %a33 %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) %t35 = icmp ne i32 %t34, 0 - br i1 %t35, label %then2492, label %endif2494 -then2492: + br i1 %t35, label %then2496, label %endif2498 +then2496: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1410, i64 6, i64 0 } -endif2494: +endif2498: %t36 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.1411, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br i1 %t40, label %then2495, label %endif2497 -then2495: + br i1 %t40, label %then2499, label %endif2501 +then2499: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1412, i64 5, i64 0 } -endif2497: +endif2501: %t41 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1413, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.from2498 -logic.from2498: - br i1 %t45, label %logic.end2500, label %logic.rhs2499 -logic.rhs2499: + br label %logic.from2502 +logic.from2502: + br i1 %t45, label %logic.end2504, label %logic.rhs2503 +logic.rhs2503: %t46 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t46, ptr %a47 store { ptr, i64, i64 } { ptr @.str.1414, i64 5, i64 0 }, ptr %a48 %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) %t50 = icmp ne i32 %t49, 0 - br label %logic.rend2501 -logic.rend2501: - br label %logic.end2500 -logic.end2500: - %t51 = phi i1 [ true, %logic.from2498 ], [ %t50, %logic.rend2501 ] - br i1 %t51, label %then2502, label %endif2504 -then2502: + br label %logic.rend2505 +logic.rend2505: + br label %logic.end2504 +logic.end2504: + %t51 = phi i1 [ true, %logic.from2502 ], [ %t50, %logic.rend2505 ] + br i1 %t51, label %then2506, label %endif2508 +then2506: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1415, i64 17, i64 0 } -endif2504: +endif2508: %t52 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.1416, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %then2505, label %endif2507 -then2505: + br i1 %t56, label %then2509, label %endif2511 +then2509: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1417, i64 37, i64 0 } -endif2507: +endif2511: %t57 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.1418, i64 5, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br i1 %t61, label %then2508, label %endif2510 -then2508: + br i1 %t61, label %then2512, label %endif2514 +then2512: %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t63 = load i64, ptr %t62 call void @finch_str_from_int(ptr %a64, i64 %t63) @@ -27276,11 +27302,11 @@ then2508: %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = extractvalue { ptr, i64, i64 } %t78, 1 %t80 = icmp uge i64 0, %t79 - br i1 %t80, label %range2511, label %inrange2512 -range2511: + br i1 %t80, label %range2515, label %inrange2516 +range2515: call void @finch_panic_index(ptr @.str.1421, i64 632, i64 0, i64 %t79) unreachable -inrange2512: +inrange2516: %t81 = extractvalue { ptr, i64, i64 } %t78, 0 %t82 = getelementptr inbounds %S.ast.Type, ptr %t81, i64 0 %t83 = load %S.ast.Type, ptr %t82 @@ -27301,51 +27327,51 @@ inrange2512: %t95 = load { ptr, i64, i64 }, ptr %a91 call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } %t95 -endif2510: +endif2514: %t96 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.1423, i64 4, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 - br i1 %t100, label %then2513, label %endif2515 -then2513: + br i1 %t100, label %then2517, label %endif2519 +then2517: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1424, i64 3, i64 0 } -endif2515: +endif2519: %t101 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.1425, i64 3, i64 0 }, ptr %a103 %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) %t105 = icmp ne i32 %t104, 0 - br label %logic.from2516 -logic.from2516: - br i1 %t105, label %logic.end2518, label %logic.rhs2517 -logic.rhs2517: + br label %logic.from2520 +logic.from2520: + br i1 %t105, label %logic.end2522, label %logic.rhs2521 +logic.rhs2521: %t106 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t106, ptr %a107 store { ptr, i64, i64 } { ptr @.str.1426, i64 4, i64 0 }, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 - br label %logic.rend2519 -logic.rend2519: - br label %logic.end2518 -logic.end2518: - %t111 = phi i1 [ true, %logic.from2516 ], [ %t110, %logic.rend2519 ] - br i1 %t111, label %then2520, label %endif2522 -then2520: + br label %logic.rend2523 +logic.rend2523: + br label %logic.end2522 +logic.end2522: + %t111 = phi i1 [ true, %logic.from2520 ], [ %t110, %logic.rend2523 ] + br i1 %t111, label %then2524, label %endif2526 +then2524: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1427, i64 3, i64 0 } -endif2522: +endif2526: %t112 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.1428, i64 4, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br i1 %t116, label %then2523, label %endif2525 -then2523: + br i1 %t116, label %then2527, label %endif2529 +then2527: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1429, i64 4, i64 0 } -endif2525: +endif2529: %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t118) @@ -27396,14 +27422,14 @@ entry: %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t4 = load i1, ptr %t3 %t5 = xor i1 %t4, true - br i1 %t5, label %then2526, label %endif2528 -then2526: + br i1 %t5, label %then2530, label %endif2532 +then2530: %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t8 = load %S.ast.Type, ptr %t7 %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t6, %S.ast.Type %t8) ret { ptr, i64, i64 } %t9 -endif2528: +endif2532: store { ptr, i64, i64 } { ptr @.str.1432, i64 2, i64 0 }, ptr %a10 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 @@ -27412,8 +27438,8 @@ endif2528: store { ptr, i64, i64 } { ptr @.str.1433, i64 4, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 - br i1 %t17, label %then2529, label %endif2531 -then2529: + br i1 %t17, label %then2533, label %endif2535 +then2533: %t18 = load ptr, ptr %a1 %t19 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t20 = load %S.ast.Type, ptr %t19 @@ -27422,8 +27448,8 @@ then2529: store { ptr, i64, i64 } %t21, ptr %a10 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_drop(ptr %a23) - br label %endif2531 -endif2531: + br label %endif2535 +endif2535: %t24 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1434, i64 6, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 @@ -27554,80 +27580,80 @@ entry: store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load %S.ast.Type, ptr %a1 %t9 = call i1 @finch.gen.isInt(%S.ast.Type %t8) - br label %logic.from2532 -logic.from2532: - br i1 %t9, label %logic.end2534, label %logic.rhs2533 -logic.rhs2533: + br label %logic.from2536 +logic.from2536: + br i1 %t9, label %logic.end2538, label %logic.rhs2537 +logic.rhs2537: %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1439, i64 4, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 - br label %logic.rend2535 -logic.rend2535: - br label %logic.end2534 -logic.end2534: - %t15 = phi i1 [ true, %logic.from2532 ], [ %t14, %logic.rend2535 ] - br label %logic.from2536 -logic.from2536: - br i1 %t15, label %logic.end2538, label %logic.rhs2537 -logic.rhs2537: + br label %logic.rend2539 +logic.rend2539: + br label %logic.end2538 +logic.end2538: + %t15 = phi i1 [ true, %logic.from2536 ], [ %t14, %logic.rend2539 ] + br label %logic.from2540 +logic.from2540: + br i1 %t15, label %logic.end2542, label %logic.rhs2541 +logic.rhs2541: %t16 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1440, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br label %logic.rend2539 -logic.rend2539: - br label %logic.end2538 -logic.end2538: - %t21 = phi i1 [ true, %logic.from2536 ], [ %t20, %logic.rend2539 ] - br i1 %t21, label %then2540, label %endif2542 -then2540: + br label %logic.rend2543 +logic.rend2543: + br label %logic.end2542 +logic.end2542: + %t21 = phi i1 [ true, %logic.from2540 ], [ %t20, %logic.rend2543 ] + br i1 %t21, label %then2544, label %endif2546 +then2544: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1441, i64 1, i64 0 } -endif2542: +endif2546: %t22 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1442, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %then2543, label %endif2545 -then2543: + br i1 %t26, label %then2547, label %endif2549 +then2547: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1443, i64 5, i64 0 } -endif2545: +endif2549: %t27 = load %S.ast.Type, ptr %a1 %t28 = call i1 @finch.gen.isFloat(%S.ast.Type %t27) - br i1 %t28, label %then2546, label %endif2548 -then2546: + br i1 %t28, label %then2550, label %endif2552 +then2550: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1444, i64 3, i64 0 } -endif2548: +endif2552: %t29 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1445, i64 3, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br label %logic.from2549 -logic.from2549: - br i1 %t33, label %logic.end2551, label %logic.rhs2550 -logic.rhs2550: + br label %logic.from2553 +logic.from2553: + br i1 %t33, label %logic.end2555, label %logic.rhs2554 +logic.rhs2554: %t34 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.1446, i64 4, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br label %logic.rend2552 -logic.rend2552: - br label %logic.end2551 -logic.end2551: - %t39 = phi i1 [ true, %logic.from2549 ], [ %t38, %logic.rend2552 ] - br i1 %t39, label %then2553, label %endif2555 -then2553: + br label %logic.rend2556 +logic.rend2556: + br label %logic.end2555 +logic.end2555: + %t39 = phi i1 [ true, %logic.from2553 ], [ %t38, %logic.rend2556 ] + br i1 %t39, label %then2557, label %endif2559 +then2557: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1447, i64 4, i64 0 } -endif2555: +endif2559: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1448, i64 15, i64 0 } } @@ -27684,55 +27710,55 @@ entry: store { ptr, i64, i64 } { ptr @.str.1451, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br label %logic.from2556 -logic.from2556: - br i1 %t8, label %logic.end2558, label %logic.rhs2557 -logic.rhs2557: + br label %logic.from2560 +logic.from2560: + br i1 %t8, label %logic.end2562, label %logic.rhs2561 +logic.rhs2561: %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1452, i64 5, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 - br label %logic.rend2559 -logic.rend2559: - br label %logic.end2558 -logic.end2558: - %t15 = phi i1 [ true, %logic.from2556 ], [ %t14, %logic.rend2559 ] - br label %logic.from2560 -logic.from2560: - br i1 %t15, label %logic.end2562, label %logic.rhs2561 -logic.rhs2561: + br label %logic.rend2563 +logic.rend2563: + br label %logic.end2562 +logic.end2562: + %t15 = phi i1 [ true, %logic.from2560 ], [ %t14, %logic.rend2563 ] + br label %logic.from2564 +logic.from2564: + br i1 %t15, label %logic.end2566, label %logic.rhs2565 +logic.rhs2565: %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1453, i64 3, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 - br label %logic.rend2563 -logic.rend2563: - br label %logic.end2562 -logic.end2562: - %t22 = phi i1 [ true, %logic.from2560 ], [ %t21, %logic.rend2563 ] - br i1 %t22, label %then2564, label %endif2566 -then2564: + br label %logic.rend2567 +logic.rend2567: + br label %logic.end2566 +logic.end2566: + %t22 = phi i1 [ true, %logic.from2564 ], [ %t21, %logic.rend2567 ] + br i1 %t22, label %then2568, label %endif2570 +then2568: ret i1 true -endif2566: +endif2570: %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1454, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br i1 %t28, label %then2567, label %endif2569 -then2567: + br i1 %t28, label %then2571, label %endif2573 +then2571: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic2570, label %ok2571 -panic2570: + br i1 %t30, label %panic2574, label %ok2575 +panic2574: call void @finch_panic(ptr @.str.1455, i64 690, ptr @.str.1456) unreachable -ok2571: +ok2575: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 16 %t32 = load ptr, ptr %a1 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -27743,17 +27769,17 @@ ok2571: %t38 = load { ptr, i64, i64 }, ptr %t31 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 %t37, %t39 - br i1 %t40, label %range2572, label %inrange2573 -range2572: + br i1 %t40, label %range2576, label %inrange2577 +range2576: call void @finch_panic_index(ptr @.str.1457, i64 690, i64 %t37, i64 %t39) unreachable -inrange2573: +inrange2577: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.gen.StructDef, ptr %t41, i64 %t37 %t43 = getelementptr inbounds %S.gen.StructDef, ptr %t42, i32 0, i32 16 %t44 = load i1, ptr %t43 ret i1 %t44 -endif2569: +endif2573: ret i1 false } @@ -27819,17 +27845,17 @@ entry: store { ptr, i64, i64 } { ptr @.str.1458, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then2574, label %endif2576 -then2574: + br i1 %t7, label %then2578, label %endif2580 +then2578: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 0, %t10 - br i1 %t11, label %range2577, label %inrange2578 -range2577: + br i1 %t11, label %range2581, label %inrange2582 +range2581: call void @finch_panic_index(ptr @.str.1460, i64 697, i64 0, i64 %t10) unreachable -inrange2578: +inrange2582: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 %t14 = load %S.ast.Type, ptr %t13 @@ -27841,24 +27867,24 @@ inrange2578: call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t20 -endif2576: +endif2580: %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1461, i64 3, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %then2579, label %endif2581 -then2579: + br i1 %t26, label %then2583, label %endif2585 +then2583: %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 - br i1 %t30, label %range2582, label %inrange2583 -range2582: + br i1 %t30, label %range2586, label %inrange2587 +range2586: call void @finch_panic_index(ptr @.str.1463, i64 700, i64 0, i64 %t29) unreachable -inrange2583: +inrange2587: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 0 %t33 = load %S.ast.Type, ptr %t32 @@ -27879,11 +27905,11 @@ inrange2583: %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 - br i1 %t48, label %range2584, label %inrange2585 -range2584: + br i1 %t48, label %range2588, label %inrange2589 +range2588: call void @finch_panic_index(ptr @.str.1465, i64 700, i64 1, i64 %t47) unreachable -inrange2585: +inrange2589: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Type, ptr %t49, i64 1 %t51 = load %S.ast.Type, ptr %t50 @@ -27897,15 +27923,15 @@ inrange2585: call void @finch_str_drop(ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a53 ret { ptr, i64, i64 } %t58 -endif2581: +endif2585: %t59 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.1466, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 - br i1 %t64, label %then2586, label %endif2588 -then2586: + br i1 %t64, label %then2590, label %endif2592 +then2590: %t65 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t66 = load { ptr, i64, i64 }, ptr %t65 %t67 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t66) @@ -27930,15 +27956,15 @@ then2586: call void @finch_str_drop(ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a80 ret { ptr, i64, i64 } %t84 -endif2588: +endif2592: %t85 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 store { ptr, i64, i64 } { ptr @.str.1469, i64 6, i64 0 }, ptr %a88 %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) %t90 = icmp ne i32 %t89, 0 - br i1 %t90, label %then2589, label %endif2591 -then2589: + br i1 %t90, label %then2593, label %endif2595 +then2593: %t91 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t92 = load { ptr, i64, i64 }, ptr %t91 %t93 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t92) @@ -27966,7 +27992,7 @@ then2589: call void @finch_str_drop(ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a107 ret { ptr, i64, i64 } %t112 -endif2591: +endif2595: %t113 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t114 = load { ptr, i64, i64 }, ptr %t113 store { ptr, i64, i64 } %t114, ptr %a115 @@ -27993,11 +28019,11 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 %t4, %t6 - br i1 %t7, label %range2592, label %inrange2593 -range2592: + br i1 %t7, label %range2596, label %inrange2597 +range2596: call void @finch_panic_index(ptr @.str.1473, i64 715, i64 %t4, i64 %t6) unreachable -inrange2593: +inrange2597: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds i8, ptr %t8, i64 %t4 %t10 = load i8, ptr %t9 @@ -28008,11 +28034,11 @@ inrange2593: %t15 = load { ptr, i64, i64 }, ptr %a2 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 - br i1 %t17, label %range2594, label %inrange2595 -range2594: + br i1 %t17, label %range2598, label %inrange2599 +range2598: call void @finch_panic_index(ptr @.str.1474, i64 715, i64 %t14, i64 %t16) unreachable -inrange2595: +inrange2599: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds i8, ptr %t18, i64 %t14 %t20 = load i8, ptr %t19 @@ -28077,22 +28103,22 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2596, label %ok2597 -panic2596: + br i1 %t4, label %panic2600, label %ok2601 +panic2600: call void @finch_panic(ptr @.str.1475, i64 719, ptr @.str.1476) unreachable -ok2597: +ok2601: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 8 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic2598, label %ok2599 -panic2598: + br i1 %t9, label %panic2602, label %ok2603 +panic2602: call void @finch_panic(ptr @.str.1478, i64 720, ptr @.str.1479) unreachable -ok2599: +ok2603: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 8 %t11 = load i64, ptr %t10 call void @finch_str_from_int(ptr %a12, i64 %t11) @@ -28106,14 +28132,14 @@ ok2599: store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } zeroinitializer, ptr %a20 store i64 0, ptr %a21 - br label %each.cond2600 -each.cond2600: + br label %each.cond2604 +each.cond2604: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = load i64, ptr %a21 %t25 = icmp slt i64 %t24, %t23 - br i1 %t25, label %each.body2601, label %each.end2603 -each.body2601: + br i1 %t25, label %each.body2605, label %each.end2607 +each.body2605: %t26 = load ptr, ptr %a2 %t27 = getelementptr inbounds i8, ptr %t26, i64 %t24 %t28 = load i8, ptr %t27 @@ -28123,50 +28149,50 @@ each.body2601: store i64 %t31, ptr %a32 %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, 0 - br i1 %t34, label %then2604, label %endif2606 -then2604: + br i1 %t34, label %then2608, label %endif2610 +then2608: %t35 = load i64, ptr %a32 %t36 = add i64 %t35, 256 store i64 %t36, ptr %a32 - br label %endif2606 -endif2606: + br label %endif2610 +endif2610: %t37 = load i64, ptr %a32 %t38 = icmp sge i64 %t37, 32 - br label %logic.from2607 -logic.from2607: - br i1 %t38, label %logic.rhs2608, label %logic.end2609 -logic.rhs2608: - %t39 = load i64, ptr %a32 - %t40 = icmp slt i64 %t39, 127 - br label %logic.rend2610 -logic.rend2610: - br label %logic.end2609 -logic.end2609: - %t41 = phi i1 [ false, %logic.from2607 ], [ %t40, %logic.rend2610 ] br label %logic.from2611 logic.from2611: - br i1 %t41, label %logic.rhs2612, label %logic.end2613 + br i1 %t38, label %logic.rhs2612, label %logic.end2613 logic.rhs2612: - %t42 = load i8, ptr %a29 - %t43 = icmp ne i8 %t42, 34 + %t39 = load i64, ptr %a32 + %t40 = icmp slt i64 %t39, 127 br label %logic.rend2614 logic.rend2614: br label %logic.end2613 logic.end2613: - %t44 = phi i1 [ false, %logic.from2611 ], [ %t43, %logic.rend2614 ] + %t41 = phi i1 [ false, %logic.from2611 ], [ %t40, %logic.rend2614 ] br label %logic.from2615 logic.from2615: - br i1 %t44, label %logic.rhs2616, label %logic.end2617 + br i1 %t41, label %logic.rhs2616, label %logic.end2617 logic.rhs2616: - %t45 = load i8, ptr %a29 - %t46 = icmp ne i8 %t45, 92 + %t42 = load i8, ptr %a29 + %t43 = icmp ne i8 %t42, 34 br label %logic.rend2618 logic.rend2618: br label %logic.end2617 logic.end2617: - %t47 = phi i1 [ false, %logic.from2615 ], [ %t46, %logic.rend2618 ] - br i1 %t47, label %then2619, label %else2620 -then2619: + %t44 = phi i1 [ false, %logic.from2615 ], [ %t43, %logic.rend2618 ] + br label %logic.from2619 +logic.from2619: + br i1 %t44, label %logic.rhs2620, label %logic.end2621 +logic.rhs2620: + %t45 = load i8, ptr %a29 + %t46 = icmp ne i8 %t45, 92 + br label %logic.rend2622 +logic.rend2622: + br label %logic.end2621 +logic.end2621: + %t47 = phi i1 [ false, %logic.from2619 ], [ %t46, %logic.rend2622 ] + br i1 %t47, label %then2623, label %else2624 +then2623: %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t49 = load i8, ptr %a29 call void @finch_str_from_char(ptr %a50, i8 signext %t49) @@ -28178,8 +28204,8 @@ then2619: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 store { ptr, i64, i64 } %t51, ptr %t55 store i64 %t53, ptr %t48 - br label %endif2621 -else2620: + br label %endif2625 +else2624: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t57 = load i64, ptr %a32 %t58 = call { ptr, i64, i64 } @finch.gen.hex(i64 %t57) @@ -28196,22 +28222,22 @@ else2620: %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i64 %t64 store { ptr, i64, i64 } %t63, ptr %t67 store i64 %t65, ptr %t56 - br label %endif2621 -endif2621: - br label %each.step2602 -each.step2602: + br label %endif2625 +endif2625: + br label %each.step2606 +each.step2606: %t68 = load i64, ptr %a21 %t69 = add i64 %t68, 1 store i64 %t69, ptr %a21 - br label %each.cond2600 -each.end2603: + br label %each.cond2604 +each.end2607: %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null - br i1 %t71, label %panic2622, label %ok2623 -panic2622: + br i1 %t71, label %panic2626, label %ok2627 +panic2626: call void @finch_panic(ptr @.str.1481, i64 733, ptr @.str.1482) unreachable -ok2623: +ok2627: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 2 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 %t74 = load { ptr, i64, i64 }, ptr %a19 @@ -28390,22 +28416,22 @@ entry: %t17 = load ptr, ptr %a1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2624, label %ok2625 -panic2624: + br i1 %t19, label %panic2628, label %ok2629 +panic2628: call void @finch_panic(ptr @.str.1493, i64 749, ptr @.str.1494) unreachable -ok2625: +ok2629: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t20 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 - br i1 %t25, label %range2626, label %inrange2627 -range2626: + br i1 %t25, label %range2630, label %inrange2631 +range2630: call void @finch_panic_index(ptr @.str.1495, i64 749, i64 %t22, i64 %t24) unreachable -inrange2627: +inrange2631: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 %t28 = load { ptr, i64, i64 }, ptr %t27 @@ -28465,11 +28491,11 @@ inrange2627: call void @finch.gen.emit(ptr %t73, { ptr, i64, i64 } { ptr @.str.1500, i64 11, i64 0 }) %t74 = load ptr, ptr %a1 %t75 = icmp eq ptr %t74, null - br i1 %t75, label %panic2628, label %ok2629 -panic2628: + br i1 %t75, label %panic2632, label %ok2633 +panic2632: call void @finch_panic(ptr @.str.1501, i64 753, ptr @.str.1502) unreachable -ok2629: +ok2633: %t76 = getelementptr inbounds %S.gen.Gen, ptr %t74, i32 0, i32 9 store i1 true, ptr %t76 %t77 = load ptr, ptr %a1 @@ -28582,22 +28608,22 @@ entry: %t37 = load ptr, ptr %a1 %t38 = load ptr, ptr %a1 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic2630, label %ok2631 -panic2630: + br i1 %t39, label %panic2634, label %ok2635 +panic2634: call void @finch_panic(ptr @.str.1507, i64 763, ptr @.str.1508) unreachable -ok2631: +ok2635: %t40 = getelementptr inbounds %S.gen.Gen, ptr %t38, i32 0, i32 1 %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 %t42 = load i64, ptr %t41 %t43 = load { ptr, i64, i64 }, ptr %t40 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 %t42, %t44 - br i1 %t45, label %range2632, label %inrange2633 -range2632: + br i1 %t45, label %range2636, label %inrange2637 +range2636: call void @finch_panic_index(ptr @.str.1509, i64 763, i64 %t42, i64 %t44) unreachable -inrange2633: +inrange2637: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t42 %t48 = load { ptr, i64, i64 }, ptr %t47 @@ -28666,11 +28692,11 @@ inrange2633: call void @finch.gen.emit(ptr %t100, { ptr, i64, i64 } { ptr @.str.1515, i64 11, i64 0 }) %t101 = load ptr, ptr %a1 %t102 = icmp eq ptr %t101, null - br i1 %t102, label %panic2634, label %ok2635 -panic2634: + br i1 %t102, label %panic2638, label %ok2639 +panic2638: call void @finch_panic(ptr @.str.1516, i64 766, ptr @.str.1517) unreachable -ok2635: +ok2639: %t103 = getelementptr inbounds %S.gen.Gen, ptr %t101, i32 0, i32 9 store i1 true, ptr %t103 %t104 = load ptr, ptr %a1 @@ -28701,11 +28727,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic2636, label %ok2637 -panic2636: + br i1 %t3, label %panic2640, label %ok2641 +panic2640: call void @finch_panic(ptr @.str.1518, i64 781, ptr @.str.1519) unreachable -ok2637: +ok2641: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 4 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 @@ -28714,11 +28740,11 @@ ok2637: %t9 = insertvalue %S.gen.Saved zeroinitializer, { ptr, i64, i64 } %t8, 0 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic2638, label %ok2639 -panic2638: + br i1 %t11, label %panic2642, label %ok2643 +panic2642: call void @finch_panic(ptr @.str.1520, i64 781, ptr @.str.1521) unreachable -ok2639: +ok2643: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 5 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 @@ -28727,53 +28753,53 @@ ok2639: %t17 = insertvalue %S.gen.Saved %t9, { ptr, i64, i64 } %t16, 1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2640, label %ok2641 -panic2640: + br i1 %t19, label %panic2644, label %ok2645 +panic2644: call void @finch_panic(ptr @.str.1522, i64 781, ptr @.str.1523) unreachable -ok2641: +ok2645: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 6 %t21 = load i64, ptr %t20 %t22 = insertvalue %S.gen.Saved %t17, i64 %t21, 2 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic2642, label %ok2643 -panic2642: + br i1 %t24, label %panic2646, label %ok2647 +panic2646: call void @finch_panic(ptr @.str.1524, i64 781, ptr @.str.1525) unreachable -ok2643: +ok2647: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 9 %t26 = load i1, ptr %t25 %t27 = insertvalue %S.gen.Saved %t22, i1 %t26, 3 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic2644, label %ok2645 -panic2644: + br i1 %t29, label %panic2648, label %ok2649 +panic2648: call void @finch_panic(ptr @.str.1526, i64 781, ptr @.str.1527) unreachable -ok2645: +ok2649: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 36 %t31 = load i64, ptr %t30 %t32 = insertvalue %S.gen.Saved %t27, i64 %t31, 4 store %S.gen.Saved %t32, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic2646, label %ok2647 -panic2646: + br i1 %t35, label %panic2650, label %ok2651 +panic2650: call void @finch_panic(ptr @.str.1528, i64 782, ptr @.str.1529) unreachable -ok2647: +ok2651: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 36 store i64 -1, ptr %t36 store { ptr, i64, i64 } zeroinitializer, ptr %a37 %t38 = load { ptr, i64, i64 }, ptr %a37 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic2648, label %ok2649 -panic2648: + br i1 %t40, label %panic2652, label %ok2653 +panic2652: call void @finch_panic(ptr @.str.1530, i64 784, ptr @.str.1531) unreachable -ok2649: +ok2653: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 4 store { ptr, i64, i64 } %t38, ptr %a42 call void @finch.copy.arr_str(ptr %a43, ptr %a42) @@ -28785,11 +28811,11 @@ ok2649: %t47 = load { ptr, i64, i64 }, ptr %a37 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null - br i1 %t49, label %panic2650, label %ok2651 -panic2650: + br i1 %t49, label %panic2654, label %ok2655 +panic2654: call void @finch_panic(ptr @.str.1532, i64 785, ptr @.str.1533) unreachable -ok2651: +ok2655: %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 5 store { ptr, i64, i64 } %t47, ptr %a51 call void @finch.copy.arr_str(ptr %a52, ptr %a51) @@ -28800,20 +28826,20 @@ ok2651: call void @finch.drop.arr_str(ptr %a55) %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null - br i1 %t57, label %panic2652, label %ok2653 -panic2652: + br i1 %t57, label %panic2656, label %ok2657 +panic2656: call void @finch_panic(ptr @.str.1534, i64 786, ptr @.str.1535) unreachable -ok2653: +ok2657: %t58 = getelementptr inbounds %S.gen.Gen, ptr %t56, i32 0, i32 6 store i64 0, ptr %t58 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic2654, label %ok2655 -panic2654: + br i1 %t60, label %panic2658, label %ok2659 +panic2658: call void @finch_panic(ptr @.str.1536, i64 787, ptr @.str.1537) unreachable -ok2655: +ok2659: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 9 store i1 false, ptr %t61 %t62 = load %S.gen.Saved, ptr %a33 @@ -28862,11 +28888,11 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2656, label %ok2657 -panic2656: + br i1 %t5, label %panic2660, label %ok2661 +panic2660: call void @finch_panic(ptr @.str.1538, i64 792, ptr @.str.1539) unreachable -ok2657: +ok2661: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 3 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %a3 @@ -28876,11 +28902,11 @@ ok2657: %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic2658, label %ok2659 -panic2658: + br i1 %t14, label %panic2662, label %ok2663 +panic2662: call void @finch_panic(ptr @.str.1541, i64 792, ptr @.str.1542) unreachable -ok2659: +ok2663: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 5 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1543, i64 1, i64 0 }, ptr %a17 @@ -28902,11 +28928,11 @@ ok2659: %t30 = load { ptr, i64, i64 }, ptr %a26 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null - br i1 %t32, label %panic2660, label %ok2661 -panic2660: + br i1 %t32, label %panic2664, label %ok2665 +panic2664: call void @finch_panic(ptr @.str.1545, i64 792, ptr @.str.1546) unreachable -ok2661: +ok2665: %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 4 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1547, i64 1, i64 0 }, ptr %a35 @@ -28937,11 +28963,11 @@ ok2661: %t54 = load { ptr, i64, i64 }, ptr %t53 %t55 = load ptr, ptr %a1 %t56 = icmp eq ptr %t55, null - br i1 %t56, label %panic2662, label %ok2663 -panic2662: + br i1 %t56, label %panic2666, label %ok2667 +panic2666: call void @finch_panic(ptr @.str.1549, i64 793, ptr @.str.1550) unreachable -ok2663: +ok2667: %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 4 store { ptr, i64, i64 } %t54, ptr %a58 call void @finch.copy.arr_str(ptr %a59, ptr %a58) @@ -28954,11 +28980,11 @@ ok2663: %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic2664, label %ok2665 -panic2664: + br i1 %t66, label %panic2668, label %ok2669 +panic2668: call void @finch_panic(ptr @.str.1551, i64 794, ptr @.str.1552) unreachable -ok2665: +ok2669: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 5 store { ptr, i64, i64 } %t64, ptr %a68 call void @finch.copy.arr_str(ptr %a69, ptr %a68) @@ -28971,33 +28997,33 @@ ok2665: %t74 = load i64, ptr %t73 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic2666, label %ok2667 -panic2666: + br i1 %t76, label %panic2670, label %ok2671 +panic2670: call void @finch_panic(ptr @.str.1553, i64 795, ptr @.str.1554) unreachable -ok2667: +ok2671: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 6 store i64 %t74, ptr %t77 %t78 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 3 %t79 = load i1, ptr %t78 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null - br i1 %t81, label %panic2668, label %ok2669 -panic2668: + br i1 %t81, label %panic2672, label %ok2673 +panic2672: call void @finch_panic(ptr @.str.1555, i64 796, ptr @.str.1556) unreachable -ok2669: +ok2673: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 9 store i1 %t79, ptr %t82 %t83 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 4 %t84 = load i64, ptr %t83 %t85 = load ptr, ptr %a1 %t86 = icmp eq ptr %t85, null - br i1 %t86, label %panic2670, label %ok2671 -panic2670: + br i1 %t86, label %panic2674, label %ok2675 +panic2674: call void @finch_panic(ptr @.str.1557, i64 797, ptr @.str.1558) unreachable -ok2671: +ok2675: %t87 = getelementptr inbounds %S.gen.Gen, ptr %t85, i32 0, i32 36 store i64 %t84, ptr %t87 ret void @@ -29149,11 +29175,11 @@ entry: %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 - br i1 %t6, label %range2672, label %inrange2673 -range2672: + br i1 %t6, label %range2676, label %inrange2677 +range2676: call void @finch_panic_index(ptr @.str.1569, i64 817, i64 0, i64 %t5) unreachable -inrange2673: +inrange2677: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 0 %t9 = load { ptr, i64, i64 }, ptr %t8 @@ -29178,11 +29204,11 @@ inrange2673: %t26 = load { ptr, i64, i64 }, ptr %a2 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 0, %t27 - br i1 %t28, label %range2674, label %inrange2675 -range2674: + br i1 %t28, label %range2678, label %inrange2679 +range2678: call void @finch_panic_index(ptr @.str.1573, i64 818, i64 0, i64 %t27) unreachable -inrange2675: +inrange2679: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 %t31 = load { ptr, i64, i64 }, ptr %t30 @@ -29193,11 +29219,11 @@ inrange2675: %t34 = load { ptr, i64, i64 }, ptr %a2 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 1, %t35 - br i1 %t36, label %range2676, label %inrange2677 -range2676: + br i1 %t36, label %range2680, label %inrange2681 +range2680: call void @finch_panic_index(ptr @.str.1574, i64 819, i64 1, i64 %t35) unreachable -inrange2677: +inrange2681: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 1 %t39 = load { ptr, i64, i64 }, ptr %t38 @@ -29206,11 +29232,11 @@ inrange2677: %t41 = load { ptr, i64, i64 }, ptr %a2 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 2, %t42 - br i1 %t43, label %range2678, label %inrange2679 -range2678: + br i1 %t43, label %range2682, label %inrange2683 +range2682: call void @finch_panic_index(ptr @.str.1575, i64 820, i64 2, i64 %t42) unreachable -inrange2679: +inrange2683: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 2 %t46 = load { ptr, i64, i64 }, ptr %t45 @@ -29287,8 +29313,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.1576, i64 3, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp ne i32 %t9, 0 - br i1 %t10, label %then2680, label %else2681 -then2680: + br i1 %t10, label %then2684, label %else2685 +then2684: %t11 = load ptr, ptr %a1 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1577, i64 30, i64 0 }, ptr %a14 @@ -29317,58 +29343,58 @@ then2680: call void @finch.gen.emit(ptr %t11, { ptr, i64, i64 } %t32) store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) - br label %endif2682 -else2681: + br label %endif2686 +else2685: %t34 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1580, i64 5, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.from2683 -logic.from2683: - br i1 %t39, label %logic.end2685, label %logic.rhs2684 -logic.rhs2684: + br label %logic.from2687 +logic.from2687: + br i1 %t39, label %logic.end2689, label %logic.rhs2688 +logic.rhs2688: %t40 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1581, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.rend2686 -logic.rend2686: - br label %logic.end2685 -logic.end2685: - %t46 = phi i1 [ true, %logic.from2683 ], [ %t45, %logic.rend2686 ] - br label %logic.from2687 -logic.from2687: - br i1 %t46, label %logic.end2689, label %logic.rhs2688 -logic.rhs2688: + br label %logic.rend2690 +logic.rend2690: + br label %logic.end2689 +logic.end2689: + %t46 = phi i1 [ true, %logic.from2687 ], [ %t45, %logic.rend2690 ] + br label %logic.from2691 +logic.from2691: + br i1 %t46, label %logic.end2693, label %logic.rhs2692 +logic.rhs2692: %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.1582, i64 6, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 - br label %logic.from2690 -logic.from2690: - br i1 %t52, label %logic.rhs2691, label %logic.end2692 -logic.rhs2691: + br label %logic.from2694 +logic.from2694: + br i1 %t52, label %logic.rhs2695, label %logic.end2696 +logic.rhs2695: %t53 = load ptr, ptr %a1 %t54 = load %S.ast.Type, ptr %a4 %t55 = call i1 @finch.gen.owning(ptr %t53, %S.ast.Type %t54) - br label %logic.rend2693 -logic.rend2693: - br label %logic.end2692 -logic.end2692: - %t56 = phi i1 [ false, %logic.from2690 ], [ %t55, %logic.rend2693 ] - br label %logic.rend2694 -logic.rend2694: - br label %logic.end2689 -logic.end2689: - %t57 = phi i1 [ true, %logic.from2687 ], [ %t56, %logic.rend2694 ] - br i1 %t57, label %then2695, label %else2696 -then2695: + br label %logic.rend2697 +logic.rend2697: + br label %logic.end2696 +logic.end2696: + %t56 = phi i1 [ false, %logic.from2694 ], [ %t55, %logic.rend2697 ] + br label %logic.rend2698 +logic.rend2698: + br label %logic.end2693 +logic.end2693: + %t57 = phi i1 [ true, %logic.from2691 ], [ %t56, %logic.rend2698 ] + br i1 %t57, label %then2699, label %else2700 +then2699: %t58 = load ptr, ptr %a1 %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Type, ptr %a4 @@ -29414,8 +29440,8 @@ then2695: call void @finch.gen.emit(ptr %t58, { ptr, i64, i64 } %t93) store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) - br label %endif2697 -else2696: + br label %endif2701 +else2700: %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = load %S.ast.Type, ptr %a4 @@ -29434,10 +29460,10 @@ else2696: call void @finch_str_drop(ptr %a107) store { ptr, i64, i64 } %t104, ptr %a108 call void @finch_str_drop(ptr %a108) - br label %endif2697 -endif2697: - br label %endif2682 -endif2682: + br label %endif2701 +endif2701: + br label %endif2686 +endif2686: ret void } @@ -29642,27 +29668,27 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic2698, label %ok2699 -panic2698: + br i1 %t12, label %panic2702, label %ok2703 +panic2702: call void @finch_panic(ptr @.str.1588, i64 835, ptr @.str.1589) unreachable -ok2699: +ok2703: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) - br i1 %t16, label %then2700, label %endif2702 -then2700: + br i1 %t16, label %then2704, label %endif2706 +then2704: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 -endif2702: +endif2706: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2703, label %ok2704 -panic2703: + br i1 %t19, label %panic2707, label %ok2708 +panic2707: call void @finch_panic(ptr @.str.1590, i64 838, ptr @.str.1591) unreachable -ok2704: +ok2708: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 @@ -29685,17 +29711,17 @@ ok2704: store { ptr, i64, i64 } { ptr @.str.1592, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then2705, label %else2706 -then2705: + br i1 %t38, label %then2709, label %else2710 +then2709: %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 - br i1 %t42, label %range2708, label %inrange2709 -range2708: + br i1 %t42, label %range2712, label %inrange2713 +range2712: call void @finch_panic_index(ptr @.str.1593, i64 841, i64 0, i64 %t41) unreachable -inrange2709: +inrange2713: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 %t45 = load %S.ast.Type, ptr %t44 @@ -29725,8 +29751,8 @@ inrange2709: %t65 = load ptr, ptr %a1 %t66 = load %S.ast.Type, ptr %a49 %t67 = call i1 @finch.gen.owning(ptr %t65, %S.ast.Type %t66) - br i1 %t67, label %then2710, label %endif2712 -then2710: + br i1 %t67, label %then2714, label %endif2716 +then2714: %t68 = load ptr, ptr %a1 %t69 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.1596, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1597, i64 4, i64 0 }) store { ptr, i64, i64 } %t69, ptr %a70 @@ -29776,11 +29802,11 @@ then2710: %t109 = load { ptr, i64, i64 }, ptr %a83 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 3, %t110 - br i1 %t111, label %range2713, label %inrange2714 -range2713: + br i1 %t111, label %range2717, label %inrange2718 +range2717: call void @finch_panic_index(ptr @.str.1605, i64 848, i64 3, i64 %t110) unreachable -inrange2714: +inrange2718: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 3 %t114 = load { ptr, i64, i64 }, ptr %t113 @@ -29826,11 +29852,11 @@ inrange2714: %t148 = load { ptr, i64, i64 }, ptr %a83 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = icmp uge i64 3, %t149 - br i1 %t150, label %range2715, label %inrange2716 -range2715: + br i1 %t150, label %range2719, label %inrange2720 +range2719: call void @finch_panic_index(ptr @.str.1609, i64 849, i64 3, i64 %t149) unreachable -inrange2716: +inrange2720: %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 3 %t153 = load { ptr, i64, i64 }, ptr %t152 @@ -29858,19 +29884,19 @@ inrange2716: call void @finch_str_drop(ptr %a79) call void @finch_str_drop(ptr %a73) call void @finch_str_drop(ptr %a70) - br label %endif2712 -endif2712: + br label %endif2716 +endif2716: call void @finch.drop.S_ast_Type(ptr %a49) - br label %endif2707 -else2706: + br label %endif2711 +else2710: %t168 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t169 = load { ptr, i64, i64 }, ptr %t168 store { ptr, i64, i64 } %t169, ptr %a170 store { ptr, i64, i64 } { ptr @.str.1610, i64 3, i64 0 }, ptr %a171 %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) %t173 = icmp ne i32 %t172, 0 - br i1 %t173, label %then2717, label %else2718 -then2717: + br i1 %t173, label %then2721, label %else2722 +then2721: %t174 = load ptr, ptr %a1 %t175 = load ptr, ptr %a1 %t176 = load %S.ast.Type, ptr %a2 @@ -29895,40 +29921,40 @@ then2717: %t191 = load { ptr, i64, i64 }, ptr %t190 %t192 = extractvalue { ptr, i64, i64 } %t191, 1 %t193 = icmp uge i64 0, %t192 - br i1 %t193, label %range2720, label %inrange2721 -range2720: + br i1 %t193, label %range2724, label %inrange2725 +range2724: call void @finch_panic_index(ptr @.str.1613, i64 855, i64 0, i64 %t192) unreachable -inrange2721: +inrange2725: %t194 = extractvalue { ptr, i64, i64 } %t191, 0 %t195 = getelementptr inbounds %S.ast.Type, ptr %t194, i64 0 %t196 = load %S.ast.Type, ptr %t195 %t197 = call i1 @finch.gen.owning(ptr %t189, %S.ast.Type %t196) - br label %logic.from2722 -logic.from2722: - br i1 %t197, label %logic.end2724, label %logic.rhs2723 -logic.rhs2723: + br label %logic.from2726 +logic.from2726: + br i1 %t197, label %logic.end2728, label %logic.rhs2727 +logic.rhs2727: %t198 = load ptr, ptr %a1 %t199 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t200 = load { ptr, i64, i64 }, ptr %t199 %t201 = extractvalue { ptr, i64, i64 } %t200, 1 %t202 = icmp uge i64 1, %t201 - br i1 %t202, label %range2725, label %inrange2726 -range2725: + br i1 %t202, label %range2729, label %inrange2730 +range2729: call void @finch_panic_index(ptr @.str.1614, i64 855, i64 1, i64 %t201) unreachable -inrange2726: +inrange2730: %t203 = extractvalue { ptr, i64, i64 } %t200, 0 %t204 = getelementptr inbounds %S.ast.Type, ptr %t203, i64 1 %t205 = load %S.ast.Type, ptr %t204 %t206 = call i1 @finch.gen.owning(ptr %t198, %S.ast.Type %t205) - br label %logic.rend2727 -logic.rend2727: - br label %logic.end2724 -logic.end2724: - %t207 = phi i1 [ true, %logic.from2722 ], [ %t206, %logic.rend2727 ] - br i1 %t207, label %then2728, label %endif2730 -then2728: + br label %logic.rend2731 +logic.rend2731: + br label %logic.end2728 +logic.end2728: + %t207 = phi i1 [ true, %logic.from2726 ], [ %t206, %logic.rend2731 ] + br i1 %t207, label %then2732, label %endif2734 +then2732: %t208 = load ptr, ptr %a1 %t209 = load ptr, ptr %a1 %t210 = load ptr, ptr %a1 @@ -29962,11 +29988,11 @@ then2728: %t234 = load { ptr, i64, i64 }, ptr %a231 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 3, %t235 - br i1 %t236, label %range2731, label %inrange2732 -range2731: + br i1 %t236, label %range2735, label %inrange2736 +range2735: call void @finch_panic_index(ptr @.str.1619, i64 859, i64 3, i64 %t235) unreachable -inrange2732: +inrange2736: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 3 %t239 = load { ptr, i64, i64 }, ptr %t238 @@ -29977,11 +30003,11 @@ inrange2732: %t244 = load { ptr, i64, i64 }, ptr %a231 %t245 = extractvalue { ptr, i64, i64 } %t244, 1 %t246 = icmp uge i64 3, %t245 - br i1 %t246, label %range2733, label %inrange2734 -range2733: + br i1 %t246, label %range2737, label %inrange2738 +range2737: call void @finch_panic_index(ptr @.str.1621, i64 860, i64 3, i64 %t245) unreachable -inrange2734: +inrange2738: %t247 = extractvalue { ptr, i64, i64 } %t244, 0 %t248 = getelementptr inbounds { ptr, i64, i64 }, ptr %t247, i64 3 %t249 = load { ptr, i64, i64 }, ptr %t248 @@ -30067,11 +30093,11 @@ inrange2734: %t317 = load { ptr, i64, i64 }, ptr %t316 %t318 = extractvalue { ptr, i64, i64 } %t317, 1 %t319 = icmp uge i64 0, %t318 - br i1 %t319, label %range2735, label %inrange2736 -range2735: + br i1 %t319, label %range2739, label %inrange2740 +range2739: call void @finch_panic_index(ptr @.str.1630, i64 865, i64 0, i64 %t318) unreachable -inrange2736: +inrange2740: %t320 = extractvalue { ptr, i64, i64 } %t317, 0 %t321 = getelementptr inbounds %S.ast.Type, ptr %t320, i64 0 %t322 = load %S.ast.Type, ptr %t321 @@ -30093,11 +30119,11 @@ inrange2736: %t335 = load { ptr, i64, i64 }, ptr %t334 %t336 = extractvalue { ptr, i64, i64 } %t335, 1 %t337 = icmp uge i64 1, %t336 - br i1 %t337, label %range2737, label %inrange2738 -range2737: + br i1 %t337, label %range2741, label %inrange2742 +range2741: call void @finch_panic_index(ptr @.str.1631, i64 866, i64 1, i64 %t336) unreachable -inrange2738: +inrange2742: %t338 = extractvalue { ptr, i64, i64 } %t335, 0 %t339 = getelementptr inbounds %S.ast.Type, ptr %t338, i64 1 %t340 = load %S.ast.Type, ptr %t339 @@ -30121,17 +30147,17 @@ inrange2738: call void @finch_str_drop(ptr %a241) call void @finch.drop.arr_str(ptr %a231) call void @finch_str_drop(ptr %a227) - br label %endif2730 -endif2730: - br label %endif2719 -else2718: + br label %endif2734 +endif2734: + br label %endif2723 +else2722: %t349 = load ptr, ptr %a1 %t350 = icmp eq ptr %t349, null - br i1 %t350, label %panic2739, label %ok2740 -panic2739: + br i1 %t350, label %panic2743, label %ok2744 +panic2743: call void @finch_panic(ptr @.str.1632, i64 872, ptr @.str.1633) unreachable -ok2740: +ok2744: %t351 = getelementptr inbounds %S.gen.Gen, ptr %t349, i32 0, i32 16 %t352 = load ptr, ptr %a1 %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -30142,11 +30168,11 @@ ok2740: %t358 = load { ptr, i64, i64 }, ptr %t351 %t359 = extractvalue { ptr, i64, i64 } %t358, 1 %t360 = icmp uge i64 %t357, %t359 - br i1 %t360, label %range2741, label %inrange2742 -range2741: + br i1 %t360, label %range2745, label %inrange2746 +range2745: call void @finch_panic_index(ptr @.str.1634, i64 872, i64 %t357, i64 %t359) unreachable -inrange2742: +inrange2746: %t361 = extractvalue { ptr, i64, i64 } %t358, 0 %t362 = getelementptr inbounds %S.gen.StructDef, ptr %t361, i64 %t357 %t363 = load %S.gen.StructDef, ptr %t362 @@ -30170,29 +30196,29 @@ inrange2742: %t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 %t380 = load i64, ptr %t379 store i64 0, ptr %a381 - br label %for.cond2743 -for.cond2743: + br label %for.cond2747 +for.cond2747: %t382 = load i64, ptr %a381 %t383 = icmp slt i64 %t382, %t380 - br i1 %t383, label %for.body2744, label %for.end2746 -for.body2744: + br i1 %t383, label %for.body2748, label %for.end2750 +for.body2748: %t384 = load ptr, ptr %a1 %t385 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 %t386 = load i64, ptr %a381 %t387 = load { ptr, i64, i64 }, ptr %t385 %t388 = extractvalue { ptr, i64, i64 } %t387, 1 %t389 = icmp uge i64 %t386, %t388 - br i1 %t389, label %range2747, label %inrange2748 -range2747: + br i1 %t389, label %range2751, label %inrange2752 +range2751: call void @finch_panic_index(ptr @.str.1637, i64 876, i64 %t386, i64 %t388) unreachable -inrange2748: +inrange2752: %t390 = extractvalue { ptr, i64, i64 } %t387, 0 %t391 = getelementptr inbounds %S.ast.Type, ptr %t390, i64 %t386 %t392 = load %S.ast.Type, ptr %t391 %t393 = call i1 @finch.gen.owning(ptr %t384, %S.ast.Type %t392) - br i1 %t393, label %then2749, label %endif2751 -then2749: + br i1 %t393, label %then2753, label %endif2755 +then2753: %t394 = load ptr, ptr %a1 %t395 = load { ptr, i64, i64 }, ptr %a371 store { ptr, i64, i64 } { ptr @.str.1638, i64 23, i64 0 }, ptr %a397 @@ -30210,11 +30236,11 @@ then2749: %t407 = load { ptr, i64, i64 }, ptr %t405 %t408 = extractvalue { ptr, i64, i64 } %t407, 1 %t409 = icmp uge i64 %t406, %t408 - br i1 %t409, label %range2752, label %inrange2753 -range2752: + br i1 %t409, label %range2756, label %inrange2757 +range2756: call void @finch_panic_index(ptr @.str.1640, i64 877, i64 %t406, i64 %t408) unreachable -inrange2753: +inrange2757: %t410 = extractvalue { ptr, i64, i64 } %t407, 0 %t411 = getelementptr inbounds i64, ptr %t410, i64 %t406 %t412 = load i64, ptr %t411 @@ -30249,11 +30275,11 @@ inrange2753: %t437 = load { ptr, i64, i64 }, ptr %t435 %t438 = extractvalue { ptr, i64, i64 } %t437, 1 %t439 = icmp uge i64 %t436, %t438 - br i1 %t439, label %range2754, label %inrange2755 -range2754: + br i1 %t439, label %range2758, label %inrange2759 +range2758: call void @finch_panic_index(ptr @.str.1643, i64 878, i64 %t436, i64 %t438) unreachable -inrange2755: +inrange2759: %t440 = extractvalue { ptr, i64, i64 } %t437, 0 %t441 = getelementptr inbounds i64, ptr %t440, i64 %t436 %t442 = load i64, ptr %t441 @@ -30279,32 +30305,32 @@ inrange2755: %t459 = load { ptr, i64, i64 }, ptr %t457 %t460 = extractvalue { ptr, i64, i64 } %t459, 1 %t461 = icmp uge i64 %t458, %t460 - br i1 %t461, label %range2756, label %inrange2757 -range2756: + br i1 %t461, label %range2760, label %inrange2761 +range2760: call void @finch_panic_index(ptr @.str.1644, i64 879, i64 %t458, i64 %t460) unreachable -inrange2757: +inrange2761: %t462 = extractvalue { ptr, i64, i64 } %t459, 0 %t463 = getelementptr inbounds %S.ast.Type, ptr %t462, i64 %t458 %t464 = load %S.ast.Type, ptr %t463 call void @finch.gen.copyAt(ptr %t454, { ptr, i64, i64 } %t455, { ptr, i64, i64 } %t456, %S.ast.Type %t464) call void @finch_str_drop(ptr %a453) call void @finch_str_drop(ptr %a423) - br label %endif2751 -endif2751: - br label %for.step2745 -for.step2745: + br label %endif2755 +endif2755: + br label %for.step2749 +for.step2749: %t465 = load i64, ptr %a381 %t466 = add i64 %t465, 1 store i64 %t466, ptr %a381 - br label %for.cond2743 -for.end2746: + br label %for.cond2747 +for.end2750: call void @finch_str_drop(ptr %a371) call void @finch.drop.S_gen_StructDef(ptr %a367) - br label %endif2719 -endif2719: - br label %endif2707 -endif2707: + br label %endif2723 +endif2723: + br label %endif2711 +endif2711: %t467 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t467, { ptr, i64, i64 } { ptr @.str.1645, i64 8, i64 0 }) %t468 = load ptr, ptr %a1 @@ -30361,14 +30387,14 @@ entry: %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) %t7 = xor i1 %t6, true - br i1 %t7, label %then2758, label %endif2760 -then2758: + br i1 %t7, label %then2762, label %endif2764 +then2762: %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch_str_copy(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t11 -endif2760: +endif2764: %t12 = load ptr, ptr %a1 %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 @@ -30449,18 +30475,18 @@ entry: %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) %t7 = xor i1 %t6, true - br i1 %t7, label %then2761, label %endif2763 -then2761: + br i1 %t7, label %then2765, label %endif2767 +then2765: ret void -endif2763: +endif2767: %t8 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1648, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br i1 %t13, label %then2764, label %else2765 -then2764: + br i1 %t13, label %then2768, label %else2769 +then2768: %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1649, i64 30, i64 0 }, ptr %a17 @@ -30476,8 +30502,8 @@ then2764: call void @finch.gen.emit(ptr %t14, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_drop(ptr %a25) - br label %endif2766 -else2765: + br label %endif2770 +else2769: %t26 = load ptr, ptr %a1 %t27 = load ptr, ptr %a1 %t28 = load %S.ast.Type, ptr %a3 @@ -30510,8 +30536,8 @@ else2765: call void @finch.gen.emit(ptr %t26, { ptr, i64, i64 } %t50) store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %endif2766 -endif2766: + br label %endif2770 +endif2770: ret void } @@ -30532,8 +30558,8 @@ entry: %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) - br i1 %t6, label %then2767, label %endif2769 -then2767: + br i1 %t6, label %then2771, label %endif2773 +then2771: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = load { ptr, i64, i64 }, ptr %a2 @@ -30553,8 +30579,8 @@ then2767: call void @finch.gen.dropAt(ptr %t7, { ptr, i64, i64 } %t19, %S.ast.Type %t21) store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_drop(ptr %a22) - br label %endif2769 -endif2769: + br label %endif2773 +endif2773: ret void } @@ -30566,55 +30592,55 @@ entry: store %S.gen.Val %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 - br label %logic.from2770 -logic.from2770: - br i1 %t4, label %logic.rhs2771, label %logic.end2772 -logic.rhs2771: + br label %logic.from2774 +logic.from2774: + br i1 %t4, label %logic.rhs2775, label %logic.end2776 +logic.rhs2775: %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = icmp sgt i64 %t7, 0 - br label %logic.rend2773 -logic.rend2773: - br label %logic.end2772 -logic.end2772: - %t9 = phi i1 [ false, %logic.from2770 ], [ %t8, %logic.rend2773 ] - br label %logic.from2774 -logic.from2774: - br i1 %t9, label %logic.rhs2775, label %logic.end2776 -logic.rhs2775: - %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 - %t11 = load { ptr, i64, i64 }, ptr %t10 - %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) - %t13 = xor i1 %t12, true br label %logic.rend2777 logic.rend2777: br label %logic.end2776 logic.end2776: - %t14 = phi i1 [ false, %logic.from2774 ], [ %t13, %logic.rend2777 ] + %t9 = phi i1 [ false, %logic.from2774 ], [ %t8, %logic.rend2777 ] br label %logic.from2778 logic.from2778: - br i1 %t14, label %logic.rhs2779, label %logic.end2780 + br i1 %t9, label %logic.rhs2779, label %logic.end2780 logic.rhs2779: - %t15 = load ptr, ptr %a1 - %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 - %t17 = load %S.ast.Type, ptr %t16 - %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true br label %logic.rend2781 logic.rend2781: br label %logic.end2780 logic.end2780: - %t19 = phi i1 [ false, %logic.from2778 ], [ %t18, %logic.rend2781 ] - br i1 %t19, label %then2782, label %endif2784 -then2782: + %t14 = phi i1 [ false, %logic.from2778 ], [ %t13, %logic.rend2781 ] + br label %logic.from2782 +logic.from2782: + br i1 %t14, label %logic.rhs2783, label %logic.end2784 +logic.rhs2783: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2785 +logic.rend2785: + br label %logic.end2784 +logic.end2784: + %t19 = phi i1 [ false, %logic.from2782 ], [ %t18, %logic.rend2785 ] + br i1 %t19, label %then2786, label %endif2788 +then2786: %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t24 = load %S.ast.Type, ptr %t23 call void @finch.gen.dropValue(ptr %t20, { ptr, i64, i64 } %t22, %S.ast.Type %t24) - br label %endif2784 -endif2784: + br label %endif2788 +endif2788: ret void } @@ -30754,27 +30780,27 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic2785, label %ok2786 -panic2785: + br i1 %t12, label %panic2789, label %ok2790 +panic2789: call void @finch_panic(ptr @.str.1657, i64 930, ptr @.str.1658) unreachable -ok2786: +ok2790: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) - br i1 %t16, label %then2787, label %endif2789 -then2787: + br i1 %t16, label %then2791, label %endif2793 +then2791: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 -endif2789: +endif2793: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2790, label %ok2791 -panic2790: + br i1 %t19, label %panic2794, label %ok2795 +panic2794: call void @finch_panic(ptr @.str.1659, i64 933, ptr @.str.1660) unreachable -ok2791: +ok2795: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 @@ -30797,17 +30823,17 @@ ok2791: store { ptr, i64, i64 } { ptr @.str.1661, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then2792, label %else2793 -then2792: + br i1 %t38, label %then2796, label %else2797 +then2796: %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 - br i1 %t42, label %range2795, label %inrange2796 -range2795: + br i1 %t42, label %range2799, label %inrange2800 +range2799: call void @finch_panic_index(ptr @.str.1662, i64 936, i64 0, i64 %t41) unreachable -inrange2796: +inrange2800: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 %t45 = load %S.ast.Type, ptr %t44 @@ -30818,8 +30844,8 @@ inrange2796: %t50 = load ptr, ptr %a1 %t51 = load %S.ast.Type, ptr %a49 %t52 = call i1 @finch.gen.owning(ptr %t50, %S.ast.Type %t51) - br i1 %t52, label %then2797, label %endif2799 -then2797: + br i1 %t52, label %then2801, label %endif2803 +then2801: %t53 = load ptr, ptr %a1 %t54 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1663, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1664, i64 2, i64 0 }) store { ptr, i64, i64 } %t54, ptr %a55 @@ -30866,11 +30892,11 @@ then2797: %t91 = load { ptr, i64, i64 }, ptr %a65 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 3, %t92 - br i1 %t93, label %range2800, label %inrange2801 -range2800: + br i1 %t93, label %range2804, label %inrange2805 +range2804: call void @finch_panic_index(ptr @.str.1670, i64 941, i64 3, i64 %t92) unreachable -inrange2801: +inrange2805: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 3 %t96 = load { ptr, i64, i64 }, ptr %t95 @@ -30895,30 +30921,30 @@ inrange2801: call void @finch.drop.arr_str(ptr %a65) call void @finch_str_drop(ptr %a61) call void @finch_str_drop(ptr %a55) - br label %endif2799 -endif2799: + br label %endif2803 +endif2803: %t110 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t110, { ptr, i64, i64 } { ptr @.str.1671, i64 33, i64 0 }) call void @finch.drop.S_ast_Type(ptr %a49) - br label %endif2794 -else2793: + br label %endif2798 +else2797: %t111 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.1672, i64 3, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br i1 %t116, label %then2802, label %else2803 -then2802: + br i1 %t116, label %then2806, label %else2807 +then2806: %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 0, %t119 - br i1 %t120, label %range2805, label %inrange2806 -range2805: + br i1 %t120, label %range2809, label %inrange2810 +range2809: call void @finch_panic_index(ptr @.str.1673, i64 947, i64 0, i64 %t119) unreachable -inrange2806: +inrange2810: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 0 %t123 = load %S.ast.Type, ptr %t122 @@ -30930,11 +30956,11 @@ inrange2806: %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = extractvalue { ptr, i64, i64 } %t129, 1 %t131 = icmp uge i64 1, %t130 - br i1 %t131, label %range2807, label %inrange2808 -range2807: + br i1 %t131, label %range2811, label %inrange2812 +range2811: call void @finch_panic_index(ptr @.str.1674, i64 948, i64 1, i64 %t130) unreachable -inrange2808: +inrange2812: %t132 = extractvalue { ptr, i64, i64 } %t129, 0 %t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i64 1 %t134 = load %S.ast.Type, ptr %t133 @@ -30945,20 +30971,20 @@ inrange2808: %t139 = load ptr, ptr %a1 %t140 = load %S.ast.Type, ptr %a127 %t141 = call i1 @finch.gen.owning(ptr %t139, %S.ast.Type %t140) - br label %logic.from2809 -logic.from2809: - br i1 %t141, label %logic.end2811, label %logic.rhs2810 -logic.rhs2810: + br label %logic.from2813 +logic.from2813: + br i1 %t141, label %logic.end2815, label %logic.rhs2814 +logic.rhs2814: %t142 = load ptr, ptr %a1 %t143 = load %S.ast.Type, ptr %a138 %t144 = call i1 @finch.gen.owning(ptr %t142, %S.ast.Type %t143) - br label %logic.rend2812 -logic.rend2812: - br label %logic.end2811 -logic.end2811: - %t145 = phi i1 [ true, %logic.from2809 ], [ %t144, %logic.rend2812 ] - br i1 %t145, label %then2813, label %endif2815 -then2813: + br label %logic.rend2816 +logic.rend2816: + br label %logic.end2815 +logic.end2815: + %t145 = phi i1 [ true, %logic.from2813 ], [ %t144, %logic.rend2816 ] + br i1 %t145, label %then2817, label %endif2819 +then2817: %t146 = load ptr, ptr %a1 %t147 = load ptr, ptr %a1 %t148 = load ptr, ptr %a1 @@ -30992,11 +31018,11 @@ then2813: %t172 = load { ptr, i64, i64 }, ptr %a169 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 3, %t173 - br i1 %t174, label %range2816, label %inrange2817 -range2816: + br i1 %t174, label %range2820, label %inrange2821 +range2820: call void @finch_panic_index(ptr @.str.1679, i64 952, i64 3, i64 %t173) unreachable -inrange2817: +inrange2821: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i64 3 %t177 = load { ptr, i64, i64 }, ptr %t176 @@ -31073,21 +31099,21 @@ inrange2817: call void @finch_str_drop(ptr %a179) call void @finch.drop.arr_str(ptr %a169) call void @finch_str_drop(ptr %a165) - br label %endif2815 -endif2815: + br label %endif2819 +endif2819: %t232 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t232, { ptr, i64, i64 } { ptr @.str.1685, i64 33, i64 0 }) call void @finch.drop.S_ast_Type(ptr %a138) call void @finch.drop.S_ast_Type(ptr %a127) - br label %endif2804 -else2803: + br label %endif2808 +else2807: %t233 = load ptr, ptr %a1 %t234 = icmp eq ptr %t233, null - br i1 %t234, label %panic2818, label %ok2819 -panic2818: + br i1 %t234, label %panic2822, label %ok2823 +panic2822: call void @finch_panic(ptr @.str.1686, i64 965, ptr @.str.1687) unreachable -ok2819: +ok2823: %t235 = getelementptr inbounds %S.gen.Gen, ptr %t233, i32 0, i32 16 %t236 = load ptr, ptr %a1 %t237 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -31098,11 +31124,11 @@ ok2819: %t242 = load { ptr, i64, i64 }, ptr %t235 %t243 = extractvalue { ptr, i64, i64 } %t242, 1 %t244 = icmp uge i64 %t241, %t243 - br i1 %t244, label %range2820, label %inrange2821 -range2820: + br i1 %t244, label %range2824, label %inrange2825 +range2824: call void @finch_panic_index(ptr @.str.1688, i64 965, i64 %t241, i64 %t243) unreachable -inrange2821: +inrange2825: %t245 = extractvalue { ptr, i64, i64 } %t242, 0 %t246 = getelementptr inbounds %S.gen.StructDef, ptr %t245, i64 %t241 %t247 = load %S.gen.StructDef, ptr %t246 @@ -31118,29 +31144,29 @@ inrange2821: %t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t256, i32 0, i32 1 %t258 = load i64, ptr %t257 store i64 0, ptr %a259 - br label %for.cond2822 -for.cond2822: + br label %for.cond2826 +for.cond2826: %t260 = load i64, ptr %a259 %t261 = icmp slt i64 %t260, %t258 - br i1 %t261, label %for.body2823, label %for.end2825 -for.body2823: + br i1 %t261, label %for.body2827, label %for.end2829 +for.body2827: %t262 = load ptr, ptr %a1 %t263 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 %t264 = load i64, ptr %a259 %t265 = load { ptr, i64, i64 }, ptr %t263 %t266 = extractvalue { ptr, i64, i64 } %t265, 1 %t267 = icmp uge i64 %t264, %t266 - br i1 %t267, label %range2826, label %inrange2827 -range2826: + br i1 %t267, label %range2830, label %inrange2831 +range2830: call void @finch_panic_index(ptr @.str.1689, i64 968, i64 %t264, i64 %t266) unreachable -inrange2827: +inrange2831: %t268 = extractvalue { ptr, i64, i64 } %t265, 0 %t269 = getelementptr inbounds %S.ast.Type, ptr %t268, i64 %t264 %t270 = load %S.ast.Type, ptr %t269 %t271 = call i1 @finch.gen.owning(ptr %t262, %S.ast.Type %t270) - br i1 %t271, label %then2828, label %endif2830 -then2828: + br i1 %t271, label %then2832, label %endif2834 +then2832: %t272 = load ptr, ptr %a1 %t273 = load ptr, ptr %a1 %t274 = load { ptr, i64, i64 }, ptr %a255 @@ -31159,11 +31185,11 @@ then2828: %t286 = load { ptr, i64, i64 }, ptr %t284 %t287 = extractvalue { ptr, i64, i64 } %t286, 1 %t288 = icmp uge i64 %t285, %t287 - br i1 %t288, label %range2831, label %inrange2832 -range2831: + br i1 %t288, label %range2835, label %inrange2836 +range2835: call void @finch_panic_index(ptr @.str.1692, i64 969, i64 %t285, i64 %t287) unreachable -inrange2832: +inrange2836: %t289 = extractvalue { ptr, i64, i64 } %t286, 0 %t290 = getelementptr inbounds i64, ptr %t289, i64 %t285 %t291 = load i64, ptr %t290 @@ -31185,32 +31211,32 @@ inrange2832: %t304 = load { ptr, i64, i64 }, ptr %t302 %t305 = extractvalue { ptr, i64, i64 } %t304, 1 %t306 = icmp uge i64 %t303, %t305 - br i1 %t306, label %range2833, label %inrange2834 -range2833: + br i1 %t306, label %range2837, label %inrange2838 +range2837: call void @finch_panic_index(ptr @.str.1693, i64 969, i64 %t303, i64 %t305) unreachable -inrange2834: +inrange2838: %t307 = extractvalue { ptr, i64, i64 } %t304, 0 %t308 = getelementptr inbounds %S.ast.Type, ptr %t307, i64 %t303 %t309 = load %S.ast.Type, ptr %t308 call void @finch.gen.dropAt(ptr %t272, { ptr, i64, i64 } %t300, %S.ast.Type %t309) store { ptr, i64, i64 } %t300, ptr %a310 call void @finch_str_drop(ptr %a310) - br label %endif2830 -endif2830: - br label %for.step2824 -for.step2824: + br label %endif2834 +endif2834: + br label %for.step2828 +for.step2828: %t311 = load i64, ptr %a259 %t312 = add i64 %t311, 1 store i64 %t312, ptr %a259 - br label %for.cond2822 -for.end2825: + br label %for.cond2826 +for.end2829: call void @finch_str_drop(ptr %a255) call void @finch.drop.S_gen_StructDef(ptr %a251) - br label %endif2804 -endif2804: - br label %endif2794 -endif2794: + br label %endif2808 +endif2808: + br label %endif2798 +endif2798: %t313 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t313, { ptr, i64, i64 } { ptr @.str.1694, i64 8, i64 0 }) %t314 = load ptr, ptr %a1 @@ -31246,54 +31272,54 @@ entry: store %S.gen.Val %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 - br label %logic.from2835 -logic.from2835: - br i1 %t4, label %logic.rhs2836, label %logic.end2837 -logic.rhs2836: + br label %logic.from2839 +logic.from2839: + br i1 %t4, label %logic.rhs2840, label %logic.end2841 +logic.rhs2840: %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = icmp sgt i64 %t7, 0 - br label %logic.rend2838 -logic.rend2838: - br label %logic.end2837 -logic.end2837: - %t9 = phi i1 [ false, %logic.from2835 ], [ %t8, %logic.rend2838 ] - br label %logic.from2839 -logic.from2839: - br i1 %t9, label %logic.rhs2840, label %logic.end2841 -logic.rhs2840: - %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 - %t11 = load { ptr, i64, i64 }, ptr %t10 - %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) - %t13 = xor i1 %t12, true br label %logic.rend2842 logic.rend2842: br label %logic.end2841 logic.end2841: - %t14 = phi i1 [ false, %logic.from2839 ], [ %t13, %logic.rend2842 ] + %t9 = phi i1 [ false, %logic.from2839 ], [ %t8, %logic.rend2842 ] br label %logic.from2843 logic.from2843: - br i1 %t14, label %logic.rhs2844, label %logic.end2845 + br i1 %t9, label %logic.rhs2844, label %logic.end2845 logic.rhs2844: - %t15 = load ptr, ptr %a1 - %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 - %t17 = load %S.ast.Type, ptr %t16 - %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true br label %logic.rend2846 logic.rend2846: br label %logic.end2845 logic.end2845: - %t19 = phi i1 [ false, %logic.from2843 ], [ %t18, %logic.rend2846 ] - br i1 %t19, label %then2847, label %endif2849 -then2847: + %t14 = phi i1 [ false, %logic.from2843 ], [ %t13, %logic.rend2846 ] + br label %logic.from2847 +logic.from2847: + br i1 %t14, label %logic.rhs2848, label %logic.end2849 +logic.rhs2848: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2850 +logic.rend2850: + br label %logic.end2849 +logic.end2849: + %t19 = phi i1 [ false, %logic.from2847 ], [ %t18, %logic.rend2850 ] + br i1 %t19, label %then2851, label %endif2853 +then2851: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic2850, label %ok2851 -panic2850: + br i1 %t21, label %panic2854, label %ok2855 +panic2854: call void @finch_panic(ptr @.str.1697, i64 982, ptr @.str.1698) unreachable -ok2851: +ok2855: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 11 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 @@ -31316,8 +31342,8 @@ ok2851: %t40 = getelementptr inbounds %S.gen.Pending, ptr %t39, i64 %t37 store %S.gen.Pending %t36, ptr %t40 store i64 %t38, ptr %t23 - br label %endif2849 -endif2849: + br label %endif2853 +endif2853: ret void } @@ -31336,15 +31362,15 @@ entry: %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) - br i1 %t6, label %then2852, label %endif2854 -then2852: + br i1 %t6, label %then2856, label %endif2858 +then2856: %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic2855, label %ok2856 -panic2855: + br i1 %t8, label %panic2859, label %ok2860 +panic2859: call void @finch_panic(ptr @.str.1699, i64 988, ptr @.str.1700) unreachable -ok2856: +ok2860: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 11 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %a2 @@ -31365,8 +31391,8 @@ ok2856: %t25 = getelementptr inbounds %S.gen.Pending, ptr %t24, i64 %t22 store %S.gen.Pending %t21, ptr %t25 store i64 %t23, ptr %t10 - br label %endif2854 -endif2854: + br label %endif2858 +endif2858: ret void } @@ -31406,42 +31432,42 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2857, label %ok2858 -panic2857: + br i1 %t4, label %panic2861, label %ok2862 +panic2861: call void @finch_panic(ptr @.str.1701, i64 994, ptr @.str.1702) unreachable -ok2858: +ok2862: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 %t7, ptr %a8 - br label %while.cond2859 -while.cond2859: + br label %while.cond2863 +while.cond2863: %t9 = load i64, ptr %a8 %t10 = load i64, ptr %a2 %t11 = icmp sgt i64 %t9, %t10 - br i1 %t11, label %while.body2860, label %while.end2861 -while.body2860: + br i1 %t11, label %while.body2864, label %while.end2865 +while.body2864: %t12 = load i64, ptr %a8 %t13 = sub i64 %t12, 1 store i64 %t13, ptr %a8 %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic2862, label %ok2863 -panic2862: + br i1 %t15, label %panic2866, label %ok2867 +panic2866: call void @finch_panic(ptr @.str.1703, i64 997, ptr @.str.1704) unreachable -ok2863: +ok2867: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 11 %t17 = load i64, ptr %a8 %t18 = load { ptr, i64, i64 }, ptr %t16 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 - br i1 %t20, label %range2864, label %inrange2865 -range2864: + br i1 %t20, label %range2868, label %inrange2869 +range2868: call void @finch_panic_index(ptr @.str.1705, i64 997, i64 %t17, i64 %t19) unreachable -inrange2865: +inrange2869: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.Pending, ptr %t21, i64 %t17 %t23 = load %S.gen.Pending, ptr %t22 @@ -31451,27 +31477,27 @@ inrange2865: store %S.gen.Pending %t26, ptr %a27 %t28 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 2 %t29 = load i1, ptr %t28 - br i1 %t29, label %then2866, label %else2867 -then2866: + br i1 %t29, label %then2870, label %else2871 +then2870: %t30 = load ptr, ptr %a1 %t31 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 %t32 = load { ptr, i64, i64 }, ptr %t31 %t33 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 %t34 = load %S.ast.Type, ptr %t33 call void @finch.gen.dropAt(ptr %t30, { ptr, i64, i64 } %t32, %S.ast.Type %t34) - br label %endif2868 -else2867: + br label %endif2872 +else2871: %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 %t39 = load %S.ast.Type, ptr %t38 call void @finch.gen.dropValue(ptr %t35, { ptr, i64, i64 } %t37, %S.ast.Type %t39) - br label %endif2868 -endif2868: + br label %endif2872 +endif2872: call void @finch.drop.S_gen_Pending(ptr %a27) - br label %while.cond2859 -while.end2861: + br label %while.cond2863 +while.end2865: ret void } @@ -31482,38 +31508,38 @@ entry: %a20 = alloca %S.gen.Pending, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 - br label %while.cond2869 -while.cond2869: + br label %while.cond2873 +while.cond2873: %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2872, label %ok2873 -panic2872: + br i1 %t4, label %panic2876, label %ok2877 +panic2876: call void @finch_panic(ptr @.str.1706, i64 1008, ptr @.str.1707) unreachable -ok2873: +ok2877: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = load i64, ptr %a2 %t9 = icmp sgt i64 %t7, %t8 - br i1 %t9, label %while.body2870, label %while.end2871 -while.body2870: + br i1 %t9, label %while.body2874, label %while.end2875 +while.body2874: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic2874, label %ok2875 -panic2874: + br i1 %t11, label %panic2878, label %ok2879 +panic2878: call void @finch_panic(ptr @.str.1708, i64 1009, ptr @.str.1709) unreachable -ok2875: +ok2879: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 11 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp eq i64 %t14, 0 - br i1 %t15, label %panic2876, label %ok2877 -panic2876: + br i1 %t15, label %panic2880, label %ok2881 +panic2880: call void @finch_panic(ptr @.str.1710, i64 1009, ptr @.str.1711) unreachable -ok2877: +ok2881: %t16 = sub i64 %t14, 1 %t17 = load ptr, ptr %t12 %t18 = getelementptr inbounds %S.gen.Pending, ptr %t17, i64 %t16 @@ -31521,8 +31547,8 @@ ok2877: store i64 %t16, ptr %t13 store %S.gen.Pending %t19, ptr %a20 call void @finch.drop.S_gen_Pending(ptr %a20) - br label %while.cond2869 -while.end2871: + br label %while.cond2873 +while.end2875: ret void } @@ -31539,26 +31565,26 @@ entry: %t5 = load %S.ast.Type, ptr %t4 %t6 = call i1 @finch.gen.owning(ptr %t3, %S.ast.Type %t5) %t7 = xor i1 %t6, true - br label %logic.from2878 -logic.from2878: - br i1 %t7, label %logic.end2880, label %logic.rhs2879 -logic.rhs2879: + br label %logic.from2882 +logic.from2882: + br i1 %t7, label %logic.end2884, label %logic.rhs2883 +logic.rhs2883: %t8 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t9 = load i1, ptr %t8 - br label %logic.rend2881 -logic.rend2881: - br label %logic.end2880 -logic.end2880: - %t10 = phi i1 [ true, %logic.from2878 ], [ %t9, %logic.rend2881 ] - br i1 %t10, label %then2882, label %endif2884 -then2882: + br label %logic.rend2885 +logic.rend2885: + br label %logic.end2884 +logic.end2884: + %t10 = phi i1 [ true, %logic.from2882 ], [ %t9, %logic.rend2885 ] + br i1 %t10, label %then2886, label %endif2888 +then2886: %t11 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) %t15 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t15 -endif2884: +endif2888: %t16 = load ptr, ptr %a1 %t17 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 @@ -31610,8 +31636,8 @@ entry: %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = icmp sgt i64 %t13, 0 - br i1 %t14, label %then2885, label %endif2887 -then2885: + br i1 %t14, label %then2889, label %endif2891 +then2889: %t15 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1713, i64 2, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 @@ -31621,8 +31647,8 @@ then2885: store { ptr, i64, i64 } %t19, ptr %a11 store { ptr, i64, i64 } %t20, ptr %a21 call void @finch_str_drop(ptr %a21) - br label %endif2887 -endif2887: + br label %endif2891 +endif2891: %t22 = load ptr, ptr %a1 %t23 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t23, ptr %a25 @@ -31949,8 +31975,8 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load %S.ast.Type, ptr %a3 %t12 = call i1 @finch.gen.isSigned(%S.ast.Type %t11) - br i1 %t12, label %then2888, label %else2889 -then2888: + br i1 %t12, label %then2892, label %else2893 +then2892: %t13 = load ptr, ptr %a1 %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a2 @@ -31968,12 +31994,12 @@ then2888: call void @finch.gen.printf(ptr %t13, { ptr, i64, i64 } { ptr @.str.1724, i64 4, i64 0 }, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_drop(ptr %a25) - br label %endif2890 -else2889: + br label %endif2894 +else2893: %t26 = load %S.ast.Type, ptr %a3 %t27 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t26) - br i1 %t27, label %then2891, label %else2892 -then2891: + br i1 %t27, label %then2895, label %else2896 +then2895: %t28 = load ptr, ptr %a1 %t29 = load ptr, ptr %a1 %t30 = load { ptr, i64, i64 }, ptr %a2 @@ -31991,12 +32017,12 @@ then2891: call void @finch.gen.printf(ptr %t28, { ptr, i64, i64 } { ptr @.str.1727, i64 4, i64 0 }, { ptr, i64, i64 } %t39) store { ptr, i64, i64 } %t39, ptr %a40 call void @finch_str_drop(ptr %a40) - br label %endif2893 -else2892: + br label %endif2897 +else2896: %t41 = load %S.ast.Type, ptr %a3 %t42 = call i1 @finch.gen.isFloat(%S.ast.Type %t41) - br i1 %t42, label %then2894, label %else2895 -then2894: + br i1 %t42, label %then2898, label %else2899 +then2898: %t43 = load ptr, ptr %a1 %t44 = load ptr, ptr %a1 %t45 = load { ptr, i64, i64 }, ptr %a2 @@ -32014,15 +32040,15 @@ then2894: call void @finch.gen.printf(ptr %t43, { ptr, i64, i64 } { ptr @.str.1730, i64 2, i64 0 }, { ptr, i64, i64 } %t54) store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_drop(ptr %a55) - br label %endif2896 -else2895: + br label %endif2900 +else2899: %t56 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t56, ptr %a57 store { ptr, i64, i64 } { ptr @.str.1733, i64 4, i64 0 }, ptr %a58 %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) %t60 = icmp ne i32 %t59, 0 - br i1 %t60, label %then2897, label %else2898 -then2897: + br i1 %t60, label %then2901, label %else2902 +then2901: %t61 = load ptr, ptr %a1 %t62 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1734, i64 8, i64 0 }, ptr %a64 @@ -32040,8 +32066,8 @@ then2897: call void @finch_str_drop(ptr %a73) store { ptr, i64, i64 } %t72, ptr %a74 %t75 = load i1, ptr %a4 - br i1 %t75, label %then2900, label %else2901 -then2900: + br i1 %t75, label %then2904, label %else2905 +then2904: %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } { ptr @.str.1737, i64 4, i64 0 }, ptr %a79 @@ -32051,8 +32077,8 @@ then2900: call void @finch.gen.printf(ptr %t76, { ptr, i64, i64 } { ptr @.str.1736, i64 4, i64 0 }, { ptr, i64, i64 } %t81) store { ptr, i64, i64 } %t81, ptr %a82 call void @finch_str_drop(ptr %a82) - br label %endif2902 -else2901: + br label %endif2906 +else2905: %t83 = load ptr, ptr %a1 %t84 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } { ptr @.str.1739, i64 4, i64 0 }, ptr %a86 @@ -32062,18 +32088,18 @@ else2901: call void @finch.gen.printf(ptr %t83, { ptr, i64, i64 } { ptr @.str.1738, i64 2, i64 0 }, { ptr, i64, i64 } %t88) store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_drop(ptr %a89) - br label %endif2902 -endif2902: + br label %endif2906 +endif2906: call void @finch_str_drop(ptr %a74) - br label %endif2899 -else2898: + br label %endif2903 +else2902: %t90 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.1740, i64 4, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 - br i1 %t94, label %then2903, label %else2904 -then2903: + br i1 %t94, label %then2907, label %else2908 +then2907: %t95 = load ptr, ptr %a1 %t96 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t95, { ptr, i64, i64 } { ptr @.str.1741, i64 4, i64 0 }) store { ptr, i64, i64 } %t96, ptr %a97 @@ -32128,15 +32154,15 @@ then2903: call void @finch_str_drop(ptr %a131) call void @finch_str_drop(ptr %a100) call void @finch_str_drop(ptr %a97) - br label %endif2905 -else2904: + br label %endif2909 +else2908: %t139 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t139, ptr %a140 store { ptr, i64, i64 } { ptr @.str.1748, i64 3, i64 0 }, ptr %a141 %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) %t143 = icmp ne i32 %t142, 0 - br i1 %t143, label %then2906, label %else2907 -then2906: + br i1 %t143, label %then2910, label %else2911 +then2910: %t144 = load ptr, ptr %a1 %t145 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1749, i64 31, i64 0 }, ptr %a147 @@ -32174,8 +32200,8 @@ then2906: %t174 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t172, { ptr, i64, i64 } %t173) store { ptr, i64, i64 } %t174, ptr %a175 %t176 = load i1, ptr %a4 - br i1 %t176, label %then2909, label %else2910 -then2909: + br i1 %t176, label %then2913, label %else2914 +then2913: %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } { ptr @.str.1754, i64 4, i64 0 }, ptr %a180 @@ -32198,8 +32224,8 @@ then2909: call void @finch.gen.printf(ptr %t177, { ptr, i64, i64 } { ptr @.str.1753, i64 6, i64 0 }, { ptr, i64, i64 } %t193) store { ptr, i64, i64 } %t193, ptr %a194 call void @finch_str_drop(ptr %a194) - br label %endif2911 -else2910: + br label %endif2915 +else2914: %t195 = load ptr, ptr %a1 %t196 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } { ptr @.str.1757, i64 4, i64 0 }, ptr %a198 @@ -32222,20 +32248,20 @@ else2910: call void @finch.gen.printf(ptr %t195, { ptr, i64, i64 } { ptr @.str.1756, i64 4, i64 0 }, { ptr, i64, i64 } %t211) store { ptr, i64, i64 } %t211, ptr %a212 call void @finch_str_drop(ptr %a212) - br label %endif2911 -endif2911: + br label %endif2915 +endif2915: call void @finch_str_drop(ptr %a175) call void @finch_str_drop(ptr %a171) call void @finch_str_drop(ptr %a157) - br label %endif2908 -else2907: + br label %endif2912 +else2911: %t213 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t213, ptr %a214 store { ptr, i64, i64 } { ptr @.str.1759, i64 3, i64 0 }, ptr %a215 %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) %t217 = icmp ne i32 %t216, 0 - br i1 %t217, label %then2912, label %else2913 -then2912: + br i1 %t217, label %then2916, label %else2917 +then2916: %t218 = load ptr, ptr %a1 %t219 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1760, i64 12, i64 0 }, ptr %a221 @@ -32312,19 +32338,19 @@ then2912: call void @finch_str_drop(ptr %a237) call void @finch_str_drop(ptr %a234) call void @finch_str_drop(ptr %a231) - br label %endif2914 -else2913: + br label %endif2918 +else2917: %t276 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t276, ptr %a277 store { ptr, i64, i64 } { ptr @.str.1771, i64 4, i64 0 }, ptr %a278 %t279 = call i32 @finch_str_eq(ptr %a277, ptr %a278) %t280 = icmp ne i32 %t279, 0 - br i1 %t280, label %then2915, label %else2916 -then2915: + br i1 %t280, label %then2919, label %else2920 +then2919: %t281 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t281, { ptr, i64, i64 } { ptr @.str.1772, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1773, i64 0, i64 0 }) - br label %endif2917 -else2916: + br label %endif2921 +else2920: %t282 = load ptr, ptr %a1 %t283 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t282, { ptr, i64, i64 } { ptr @.str.1774, i64 17, i64 0 }) store { ptr, i64, i64 } %t283, ptr %a284 @@ -32353,22 +32379,22 @@ else2916: store { ptr, i64, i64 } %t302, ptr %a303 call void @finch_str_drop(ptr %a303) call void @finch_str_drop(ptr %a284) - br label %endif2917 -endif2917: - br label %endif2914 -endif2914: - br label %endif2908 -endif2908: - br label %endif2905 -endif2905: - br label %endif2899 -endif2899: - br label %endif2896 -endif2896: - br label %endif2893 -endif2893: - br label %endif2890 -endif2890: + br label %endif2921 +endif2921: + br label %endif2918 +endif2918: + br label %endif2912 +endif2912: + br label %endif2909 +endif2909: + br label %endif2903 +endif2903: + br label %endif2900 +endif2900: + br label %endif2897 +endif2897: + br label %endif2894 +endif2894: call void @finch_str_drop(ptr %a10) ret void } @@ -32676,18 +32702,18 @@ entry: store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1783, i64 1, i64 0 }, ptr %a12 %t13 = load i1, ptr %a5 - br i1 %t13, label %then2918, label %endif2920 -then2918: + br i1 %t13, label %then2922, label %endif2924 +then2922: %t14 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1784, i64 1, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_drop(ptr %a15) - br label %endif2920 -endif2920: + br label %endif2924 +endif2924: %t16 = load %S.ast.Type, ptr %a4 %t17 = call i1 @finch.gen.isSigned(%S.ast.Type %t16) - br i1 %t17, label %then2921, label %else2922 -then2921: + br i1 %t17, label %then2925, label %else2926 +then2925: %t18 = load ptr, ptr %a1 %t19 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1785, i64 29, i64 0 }, ptr %a21 @@ -32724,12 +32750,12 @@ then2921: call void @finch.gen.emit(ptr %t18, { ptr, i64, i64 } %t45) store { ptr, i64, i64 } %t45, ptr %a46 call void @finch_str_drop(ptr %a46) - br label %endif2923 -else2922: + br label %endif2927 +else2926: %t47 = load %S.ast.Type, ptr %a4 %t48 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t47) - br i1 %t48, label %then2924, label %else2925 -then2924: + br i1 %t48, label %then2928, label %else2929 +then2928: %t49 = load ptr, ptr %a1 %t50 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1789, i64 30, i64 0 }, ptr %a52 @@ -32766,12 +32792,12 @@ then2924: call void @finch.gen.emit(ptr %t49, { ptr, i64, i64 } %t76) store { ptr, i64, i64 } %t76, ptr %a77 call void @finch_str_drop(ptr %a77) - br label %endif2926 -else2925: + br label %endif2930 +else2929: %t78 = load %S.ast.Type, ptr %a4 %t79 = call i1 @finch.gen.isFloat(%S.ast.Type %t78) - br i1 %t79, label %then2927, label %else2928 -then2927: + br i1 %t79, label %then2931, label %else2932 +then2931: %t80 = load ptr, ptr %a1 %t81 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1793, i64 31, i64 0 }, ptr %a83 @@ -32808,15 +32834,15 @@ then2927: call void @finch.gen.emit(ptr %t80, { ptr, i64, i64 } %t107) store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_drop(ptr %a108) - br label %endif2929 -else2928: + br label %endif2933 +else2932: %t109 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.1797, i64 4, i64 0 }, ptr %a111 %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) %t113 = icmp ne i32 %t112, 0 - br i1 %t113, label %then2930, label %else2931 -then2930: + br i1 %t113, label %then2934, label %else2935 +then2934: %t114 = load ptr, ptr %a1 %t115 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1798, i64 30, i64 0 }, ptr %a117 @@ -32858,15 +32884,15 @@ then2930: call void @finch.gen.emit(ptr %t114, { ptr, i64, i64 } %t146) store { ptr, i64, i64 } %t146, ptr %a147 call void @finch_str_drop(ptr %a147) - br label %endif2932 -else2931: + br label %endif2936 +else2935: %t148 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t148, ptr %a149 store { ptr, i64, i64 } { ptr @.str.1802, i64 4, i64 0 }, ptr %a150 %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) %t152 = icmp ne i32 %t151, 0 - br i1 %t152, label %then2933, label %else2934 -then2933: + br i1 %t152, label %then2937, label %else2938 +then2937: %t153 = load ptr, ptr %a1 %t154 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1803, i64 30, i64 0 }, ptr %a156 @@ -32911,15 +32937,15 @@ then2933: call void @finch.gen.emit(ptr %t153, { ptr, i64, i64 } %t187) store { ptr, i64, i64 } %t187, ptr %a188 call void @finch_str_drop(ptr %a188) - br label %endif2935 -else2934: + br label %endif2939 +else2938: %t189 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t189, ptr %a190 store { ptr, i64, i64 } { ptr @.str.1808, i64 3, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 - br i1 %t193, label %then2936, label %else2937 -then2936: + br i1 %t193, label %then2940, label %else2941 +then2940: %t194 = load ptr, ptr %a1 %t195 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1809, i64 29, i64 0 }, ptr %a197 @@ -32976,29 +33002,29 @@ then2936: call void @finch.gen.emit(ptr %t194, { ptr, i64, i64 } %t239) store { ptr, i64, i64 } %t239, ptr %a240 call void @finch_str_drop(ptr %a240) - br label %endif2938 -else2937: + br label %endif2942 +else2941: %t241 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t241, ptr %a242 store { ptr, i64, i64 } { ptr @.str.1813, i64 3, i64 0 }, ptr %a243 %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) %t245 = icmp ne i32 %t244, 0 - br label %logic.from2939 -logic.from2939: - br i1 %t245, label %logic.end2941, label %logic.rhs2940 -logic.rhs2940: + br label %logic.from2943 +logic.from2943: + br i1 %t245, label %logic.end2945, label %logic.rhs2944 +logic.rhs2944: %t246 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t246, ptr %a247 store { ptr, i64, i64 } { ptr @.str.1814, i64 4, i64 0 }, ptr %a248 %t249 = call i32 @finch_str_eq(ptr %a247, ptr %a248) %t250 = icmp ne i32 %t249, 0 - br label %logic.rend2942 -logic.rend2942: - br label %logic.end2941 -logic.end2941: - %t251 = phi i1 [ true, %logic.from2939 ], [ %t250, %logic.rend2942 ] - br i1 %t251, label %then2943, label %else2944 -then2943: + br label %logic.rend2946 +logic.rend2946: + br label %logic.end2945 +logic.end2945: + %t251 = phi i1 [ true, %logic.from2943 ], [ %t250, %logic.rend2946 ] + br i1 %t251, label %then2947, label %else2948 +then2947: %t252 = load ptr, ptr %a1 %t253 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1815, i64 29, i64 0 }, ptr %a255 @@ -33027,8 +33053,8 @@ then2943: call void @finch.gen.emit(ptr %t252, { ptr, i64, i64 } %t273) store { ptr, i64, i64 } %t273, ptr %a274 call void @finch_str_drop(ptr %a274) - br label %endif2945 -else2944: + br label %endif2949 +else2948: %t275 = load ptr, ptr %a1 %t276 = load ptr, ptr %a1 %t277 = load %S.ast.Type, ptr %a4 @@ -33089,20 +33115,20 @@ else2944: call void @finch.gen.emit(ptr %t275, { ptr, i64, i64 } %t323) store { ptr, i64, i64 } %t323, ptr %a324 call void @finch_str_drop(ptr %a324) - br label %endif2945 -endif2945: - br label %endif2938 -endif2938: - br label %endif2935 -endif2935: - br label %endif2932 -endif2932: - br label %endif2929 -endif2929: - br label %endif2926 -endif2926: - br label %endif2923 -endif2923: + br label %endif2949 +endif2949: + br label %endif2942 +endif2942: + br label %endif2939 +endif2939: + br label %endif2936 +endif2936: + br label %endif2933 +endif2933: + br label %endif2930 +endif2930: + br label %endif2927 +endif2927: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a11) ret void @@ -33504,27 +33530,27 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic2946, label %ok2947 -panic2946: + br i1 %t12, label %panic2950, label %ok2951 +panic2950: call void @finch_panic(ptr @.str.1823, i64 1126, ptr @.str.1824) unreachable -ok2947: +ok2951: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) - br i1 %t16, label %then2948, label %endif2950 -then2948: + br i1 %t16, label %then2952, label %endif2954 +then2952: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 -endif2950: +endif2954: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2951, label %ok2952 -panic2951: + br i1 %t19, label %panic2955, label %ok2956 +panic2955: call void @finch_panic(ptr @.str.1825, i64 1129, ptr @.str.1826) unreachable -ok2952: +ok2956: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 @@ -33547,17 +33573,17 @@ ok2952: store { ptr, i64, i64 } { ptr @.str.1827, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then2953, label %else2954 -then2953: + br i1 %t38, label %then2957, label %else2958 +then2957: %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 - br i1 %t42, label %range2956, label %inrange2957 -range2956: + br i1 %t42, label %range2960, label %inrange2961 +range2960: call void @finch_panic_index(ptr @.str.1828, i64 1132, i64 0, i64 %t41) unreachable -inrange2957: +inrange2961: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 %t45 = load %S.ast.Type, ptr %t44 @@ -33591,11 +33617,11 @@ inrange2957: %t71 = load { ptr, i64, i64 }, ptr %a63 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 3, %t72 - br i1 %t73, label %range2958, label %inrange2959 -range2958: + br i1 %t73, label %range2962, label %inrange2963 +range2962: call void @finch_panic_index(ptr @.str.1838, i64 1139, i64 3, i64 %t72) unreachable -inrange2959: +inrange2963: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 3 %t76 = load { ptr, i64, i64 }, ptr %t75 @@ -33661,11 +33687,11 @@ inrange2959: %t125 = load { ptr, i64, i64 }, ptr %a63 %t126 = extractvalue { ptr, i64, i64 } %t125, 1 %t127 = icmp uge i64 3, %t126 - br i1 %t127, label %range2960, label %inrange2961 -range2960: + br i1 %t127, label %range2964, label %inrange2965 +range2964: call void @finch_panic_index(ptr @.str.1845, i64 1145, i64 3, i64 %t126) unreachable -inrange2961: +inrange2965: %t128 = extractvalue { ptr, i64, i64 } %t125, 0 %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i64 3 %t130 = load { ptr, i64, i64 }, ptr %t129 @@ -33705,23 +33731,23 @@ inrange2961: call void @finch_str_drop(ptr %a58) call void @finch_str_drop(ptr %a52) call void @finch.drop.S_ast_Type(ptr %a49) - br label %endif2955 -else2954: + br label %endif2959 +else2958: %t152 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t153 = load { ptr, i64, i64 }, ptr %t152 store { ptr, i64, i64 } %t153, ptr %a154 store { ptr, i64, i64 } { ptr @.str.1849, i64 4, i64 0 }, ptr %a155 %t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155) %t157 = icmp ne i32 %t156, 0 - br i1 %t157, label %then2962, label %else2963 -then2962: + br i1 %t157, label %then2966, label %else2967 +then2966: %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null - br i1 %t159, label %panic2965, label %ok2966 -panic2965: + br i1 %t159, label %panic2969, label %ok2970 +panic2969: call void @finch_panic(ptr @.str.1850, i64 1151, ptr @.str.1851) unreachable -ok2966: +ok2970: %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 21 %t161 = load ptr, ptr %a1 %t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -33732,11 +33758,11 @@ ok2966: %t167 = load { ptr, i64, i64 }, ptr %t160 %t168 = extractvalue { ptr, i64, i64 } %t167, 1 %t169 = icmp uge i64 %t166, %t168 - br i1 %t169, label %range2967, label %inrange2968 -range2967: + br i1 %t169, label %range2971, label %inrange2972 +range2971: call void @finch_panic_index(ptr @.str.1852, i64 1151, i64 %t166, i64 %t168) unreachable -inrange2968: +inrange2972: %t170 = extractvalue { ptr, i64, i64 } %t167, 0 %t171 = getelementptr inbounds %S.gen.EnumDef, ptr %t170, i64 %t166 %t172 = load %S.gen.EnumDef, ptr %t171 @@ -33759,12 +33785,12 @@ inrange2968: %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 %t190 = load i64, ptr %t189 store i64 0, ptr %a191 - br label %for.cond2969 -for.cond2969: + br label %for.cond2973 +for.cond2973: %t192 = load i64, ptr %a191 %t193 = icmp slt i64 %t192, %t190 - br i1 %t193, label %for.body2970, label %for.end2972 -for.body2970: + br i1 %t193, label %for.body2974, label %for.end2976 +for.body2974: %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a187, i32 0, i32 1 %t195 = load ptr, ptr %a1 %t196 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t195, { ptr, i64, i64 } { ptr @.str.1857, i64 6, i64 0 }) @@ -33781,11 +33807,11 @@ for.body2970: %t204 = load { ptr, i64, i64 }, ptr %t202 %t205 = extractvalue { ptr, i64, i64 } %t204, 1 %t206 = icmp uge i64 %t203, %t205 - br i1 %t206, label %range2973, label %inrange2974 -range2973: + br i1 %t206, label %range2977, label %inrange2978 +range2977: call void @finch_panic_index(ptr @.str.1859, i64 1159, i64 %t203, i64 %t205) unreachable -inrange2974: +inrange2978: %t207 = extractvalue { ptr, i64, i64 } %t204, 0 %t208 = getelementptr inbounds i64, ptr %t207, i64 %t203 %t209 = load i64, ptr %t208 @@ -33807,11 +33833,11 @@ inrange2974: %t223 = load { ptr, i64, i64 }, ptr %a187 %t224 = extractvalue { ptr, i64, i64 } %t223, 1 %t225 = icmp uge i64 %t222, %t224 - br i1 %t225, label %range2975, label %inrange2976 -range2975: + br i1 %t225, label %range2979, label %inrange2980 +range2979: call void @finch_panic_index(ptr @.str.1861, i64 1159, i64 %t222, i64 %t224) unreachable -inrange2976: +inrange2980: %t226 = extractvalue { ptr, i64, i64 } %t223, 0 %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 %t222 %t228 = load { ptr, i64, i64 }, ptr %t227 @@ -33828,13 +33854,13 @@ inrange2976: %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i64 %t234 store { ptr, i64, i64 } %t233, ptr %t237 store i64 %t235, ptr %t201 - br label %for.step2971 -for.step2971: + br label %for.step2975 +for.step2975: %t238 = load i64, ptr %a191 %t239 = add i64 %t238, 1 store i64 %t239, ptr %a191 - br label %for.cond2969 -for.end2972: + br label %for.cond2973 +for.end2976: %t240 = load ptr, ptr %a1 %t241 = load { ptr, i64, i64 }, ptr %a179 store { ptr, i64, i64 } { ptr @.str.1862, i64 11, i64 0 }, ptr %a243 @@ -33883,33 +33909,33 @@ for.end2972: call void @finch_str_drop(ptr %a277) %t278 = load ptr, ptr %a1 %t279 = icmp eq ptr %t278, null - br i1 %t279, label %panic2977, label %ok2978 -panic2977: + br i1 %t279, label %panic2981, label %ok2982 +panic2981: call void @finch_panic(ptr @.str.1867, i64 1162, ptr @.str.1868) unreachable -ok2978: +ok2982: %t280 = getelementptr inbounds %S.gen.Gen, ptr %t278, i32 0, i32 9 store i1 true, ptr %t280 %t281 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %t281, i32 0, i32 1 %t283 = load i64, ptr %t282 store i64 0, ptr %a284 - br label %for.cond2979 -for.cond2979: + br label %for.cond2983 +for.cond2983: %t285 = load i64, ptr %a284 %t286 = icmp slt i64 %t285, %t283 - br i1 %t286, label %for.body2980, label %for.end2982 -for.body2980: + br i1 %t286, label %for.body2984, label %for.end2986 +for.body2984: %t287 = load ptr, ptr %a1 %t288 = load i64, ptr %a284 %t289 = load { ptr, i64, i64 }, ptr %a187 %t290 = extractvalue { ptr, i64, i64 } %t289, 1 %t291 = icmp uge i64 %t288, %t290 - br i1 %t291, label %range2983, label %inrange2984 -range2983: + br i1 %t291, label %range2987, label %inrange2988 +range2987: call void @finch_panic_index(ptr @.str.1869, i64 1164, i64 %t288, i64 %t290) unreachable -inrange2984: +inrange2988: %t292 = extractvalue { ptr, i64, i64 } %t289, 0 %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %t292, i64 %t288 %t294 = load { ptr, i64, i64 }, ptr %t293 @@ -33920,11 +33946,11 @@ inrange2984: %t298 = load { ptr, i64, i64 }, ptr %t296 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 %t297, %t299 - br i1 %t300, label %range2985, label %inrange2986 -range2985: + br i1 %t300, label %range2989, label %inrange2990 +range2989: call void @finch_panic_index(ptr @.str.1871, i64 1165, i64 %t297, i64 %t299) unreachable -inrange2986: +inrange2990: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 %t297 %t303 = load { ptr, i64, i64 }, ptr %t302 @@ -33932,13 +33958,13 @@ inrange2986: %t304 = load ptr, ptr %a1 %t305 = load { ptr, i64, i64 }, ptr %a185 call void @finch.gen.br(ptr %t304, { ptr, i64, i64 } %t305) - br label %for.step2981 -for.step2981: + br label %for.step2985 +for.step2985: %t306 = load i64, ptr %a284 %t307 = add i64 %t306, 1 store i64 %t307, ptr %a284 - br label %for.cond2979 -for.end2982: + br label %for.cond2983 +for.end2986: %t308 = load ptr, ptr %a1 %t309 = load { ptr, i64, i64 }, ptr %a182 call void @finch.gen.label(ptr %t308, { ptr, i64, i64 } %t309) @@ -33997,16 +34023,16 @@ for.end2982: call void @finch_str_drop(ptr %a182) call void @finch_str_drop(ptr %a179) call void @finch.drop.S_gen_EnumDef(ptr %a176) - br label %endif2964 -else2963: + br label %endif2968 +else2967: %t348 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t349 = load { ptr, i64, i64 }, ptr %t348 store { ptr, i64, i64 } %t349, ptr %a350 store { ptr, i64, i64 } { ptr @.str.1880, i64 3, i64 0 }, ptr %a351 %t352 = call i32 @finch_str_eq(ptr %a350, ptr %a351) %t353 = icmp ne i32 %t352, 0 - br i1 %t353, label %then2987, label %else2988 -then2987: + br i1 %t353, label %then2991, label %else2992 +then2991: %t354 = load ptr, ptr %a1 %t355 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t354, { ptr, i64, i64 } { ptr @.str.1881, i64 2, i64 0 }) store { ptr, i64, i64 } %t355, ptr %a356 @@ -34048,11 +34074,11 @@ then2987: %t386 = load { ptr, i64, i64 }, ptr %a383 %t387 = extractvalue { ptr, i64, i64 } %t386, 1 %t388 = icmp uge i64 3, %t387 - br i1 %t388, label %range2990, label %inrange2991 -range2990: + br i1 %t388, label %range2994, label %inrange2995 +range2994: call void @finch_panic_index(ptr @.str.1890, i64 1181, i64 3, i64 %t387) unreachable -inrange2991: +inrange2995: %t389 = extractvalue { ptr, i64, i64 } %t386, 0 %t390 = getelementptr inbounds { ptr, i64, i64 }, ptr %t389, i64 3 %t391 = load { ptr, i64, i64 }, ptr %t390 @@ -34133,11 +34159,11 @@ inrange2991: %t452 = load { ptr, i64, i64 }, ptr %t451 %t453 = extractvalue { ptr, i64, i64 } %t452, 1 %t454 = icmp uge i64 0, %t453 - br i1 %t454, label %range2992, label %inrange2993 -range2992: + br i1 %t454, label %range2996, label %inrange2997 +range2996: call void @finch_panic_index(ptr @.str.1904, i64 1194, i64 0, i64 %t453) unreachable -inrange2993: +inrange2997: %t455 = extractvalue { ptr, i64, i64 } %t452, 0 %t456 = getelementptr inbounds %S.ast.Type, ptr %t455, i64 0 %t457 = load %S.ast.Type, ptr %t456 @@ -34155,11 +34181,11 @@ inrange2993: %t467 = load { ptr, i64, i64 }, ptr %t466 %t468 = extractvalue { ptr, i64, i64 } %t467, 1 %t469 = icmp uge i64 0, %t468 - br i1 %t469, label %range2994, label %inrange2995 -range2994: + br i1 %t469, label %range2998, label %inrange2999 +range2998: call void @finch_panic_index(ptr @.str.1905, i64 1194, i64 0, i64 %t468) unreachable -inrange2995: +inrange2999: %t470 = extractvalue { ptr, i64, i64 } %t467, 0 %t471 = getelementptr inbounds %S.ast.Type, ptr %t470, i64 0 %t472 = load %S.ast.Type, ptr %t471 @@ -34175,11 +34201,11 @@ inrange2995: %t479 = load { ptr, i64, i64 }, ptr %t478 %t480 = extractvalue { ptr, i64, i64 } %t479, 1 %t481 = icmp uge i64 1, %t480 - br i1 %t481, label %range2996, label %inrange2997 -range2996: + br i1 %t481, label %range3000, label %inrange3001 +range3000: call void @finch_panic_index(ptr @.str.1909, i64 1196, i64 1, i64 %t480) unreachable -inrange2997: +inrange3001: %t482 = extractvalue { ptr, i64, i64 } %t479, 0 %t483 = getelementptr inbounds %S.ast.Type, ptr %t482, i64 1 %t484 = load %S.ast.Type, ptr %t483 @@ -34197,11 +34223,11 @@ inrange2997: %t494 = load { ptr, i64, i64 }, ptr %t493 %t495 = extractvalue { ptr, i64, i64 } %t494, 1 %t496 = icmp uge i64 1, %t495 - br i1 %t496, label %range2998, label %inrange2999 -range2998: + br i1 %t496, label %range3002, label %inrange3003 +range3002: call void @finch_panic_index(ptr @.str.1910, i64 1196, i64 1, i64 %t495) unreachable -inrange2999: +inrange3003: %t497 = extractvalue { ptr, i64, i64 } %t494, 0 %t498 = getelementptr inbounds %S.ast.Type, ptr %t497, i64 1 %t499 = load %S.ast.Type, ptr %t498 @@ -34227,18 +34253,18 @@ inrange2999: call void @finch.drop.arr_str(ptr %a383) call void @finch_str_drop(ptr %a379) call void @finch_str_drop(ptr %a356) - br label %endif2989 -else2988: + br label %endif2993 +else2992: %t508 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t509 = load { ptr, i64, i64 }, ptr %t508 store { ptr, i64, i64 } %t509, ptr %a510 store { ptr, i64, i64 } { ptr @.str.1913, i64 6, i64 0 }, ptr %a511 %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) %t513 = icmp ne i32 %t512, 0 - br label %logic.from3000 -logic.from3000: - br i1 %t513, label %logic.rhs3001, label %logic.end3002 -logic.rhs3001: + br label %logic.from3004 +logic.from3004: + br i1 %t513, label %logic.rhs3005, label %logic.end3006 +logic.rhs3005: %t514 = load ptr, ptr %a1 %t515 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t516 = load { ptr, i64, i64 }, ptr %t515 @@ -34246,20 +34272,20 @@ logic.rhs3001: %t518 = load { ptr, i64, i64 }, ptr %t517 %t519 = call i64 @finch.gen.findSum(ptr %t514, { ptr, i64, i64 } %t516, { ptr, i64, i64 } %t518) %t520 = icmp sge i64 %t519, 0 - br label %logic.rend3003 -logic.rend3003: - br label %logic.end3002 -logic.end3002: - %t521 = phi i1 [ false, %logic.from3000 ], [ %t520, %logic.rend3003 ] - br i1 %t521, label %then3004, label %else3005 -then3004: + br label %logic.rend3007 +logic.rend3007: + br label %logic.end3006 +logic.end3006: + %t521 = phi i1 [ false, %logic.from3004 ], [ %t520, %logic.rend3007 ] + br i1 %t521, label %then3008, label %else3009 +then3008: %t522 = load ptr, ptr %a1 %t523 = icmp eq ptr %t522, null - br i1 %t523, label %panic3007, label %ok3008 -panic3007: + br i1 %t523, label %panic3011, label %ok3012 +panic3011: call void @finch_panic(ptr @.str.1914, i64 1203, ptr @.str.1915) unreachable -ok3008: +ok3012: %t524 = getelementptr inbounds %S.gen.Gen, ptr %t522, i32 0, i32 22 %t525 = load ptr, ptr %a1 %t526 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -34270,11 +34296,11 @@ ok3008: %t531 = load { ptr, i64, i64 }, ptr %t524 %t532 = extractvalue { ptr, i64, i64 } %t531, 1 %t533 = icmp uge i64 %t530, %t532 - br i1 %t533, label %range3009, label %inrange3010 -range3009: + br i1 %t533, label %range3013, label %inrange3014 +range3013: call void @finch_panic_index(ptr @.str.1916, i64 1203, i64 %t530, i64 %t532) unreachable -inrange3010: +inrange3014: %t534 = extractvalue { ptr, i64, i64 } %t531, 0 %t535 = getelementptr inbounds %S.gen.SumDef, ptr %t534, i64 %t530 %t536 = load %S.gen.SumDef, ptr %t535 @@ -34284,11 +34310,11 @@ inrange3010: store %S.gen.SumDef %t539, ptr %a540 %t541 = load ptr, ptr %a1 %t542 = icmp eq ptr %t541, null - br i1 %t542, label %panic3011, label %ok3012 -panic3011: + br i1 %t542, label %panic3015, label %ok3016 +panic3015: call void @finch_panic(ptr @.str.1917, i64 1204, ptr @.str.1918) unreachable -ok3012: +ok3016: %t543 = getelementptr inbounds %S.gen.Gen, ptr %t541, i32 0, i32 16 %t544 = load ptr, ptr %a1 %t545 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -34299,11 +34325,11 @@ ok3012: %t550 = load { ptr, i64, i64 }, ptr %t543 %t551 = extractvalue { ptr, i64, i64 } %t550, 1 %t552 = icmp uge i64 %t549, %t551 - br i1 %t552, label %range3013, label %inrange3014 -range3013: + br i1 %t552, label %range3017, label %inrange3018 +range3017: call void @finch_panic_index(ptr @.str.1919, i64 1204, i64 %t549, i64 %t551) unreachable -inrange3014: +inrange3018: %t553 = extractvalue { ptr, i64, i64 } %t550, 0 %t554 = getelementptr inbounds %S.gen.StructDef, ptr %t553, i64 %t549 %t555 = load %S.gen.StructDef, ptr %t554 @@ -34332,11 +34358,11 @@ inrange3014: %t577 = load { ptr, i64, i64 }, ptr %t576 %t578 = extractvalue { ptr, i64, i64 } %t577, 1 %t579 = icmp uge i64 0, %t578 - br i1 %t579, label %range3015, label %inrange3016 -range3015: + br i1 %t579, label %range3019, label %inrange3020 +range3019: call void @finch_panic_index(ptr @.str.1923, i64 1206, i64 0, i64 %t578) unreachable -inrange3016: +inrange3020: %t580 = extractvalue { ptr, i64, i64 } %t577, 0 %t581 = getelementptr inbounds i64, ptr %t580, i64 0 %t582 = load i64, ptr %t581 @@ -34369,12 +34395,12 @@ inrange3016: %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i32 0, i32 1 %t606 = load i64, ptr %t605 store i64 0, ptr %a607 - br label %for.cond3017 -for.cond3017: + br label %for.cond3021 +for.cond3021: %t608 = load i64, ptr %a607 %t609 = icmp slt i64 %t608, %t606 - br i1 %t609, label %for.body3018, label %for.end3020 -for.body3018: + br i1 %t609, label %for.body3022, label %for.end3024 +for.body3022: %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a603, i32 0, i32 1 %t611 = load ptr, ptr %a1 %t612 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t611, { ptr, i64, i64 } { ptr @.str.1926, i64 5, i64 0 }) @@ -34405,11 +34431,11 @@ for.body3018: %t632 = load { ptr, i64, i64 }, ptr %a603 %t633 = extractvalue { ptr, i64, i64 } %t632, 1 %t634 = icmp uge i64 %t631, %t633 - br i1 %t634, label %range3021, label %inrange3022 -range3021: + br i1 %t634, label %range3025, label %inrange3026 +range3025: call void @finch_panic_index(ptr @.str.1929, i64 1213, i64 %t631, i64 %t633) unreachable -inrange3022: +inrange3026: %t635 = extractvalue { ptr, i64, i64 } %t632, 0 %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t631 %t637 = load { ptr, i64, i64 }, ptr %t636 @@ -34426,13 +34452,13 @@ inrange3022: %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t645, i64 %t643 store { ptr, i64, i64 } %t642, ptr %t646 store i64 %t644, ptr %t617 - br label %for.step3019 -for.step3019: + br label %for.step3023 +for.step3023: %t647 = load i64, ptr %a607 %t648 = add i64 %t647, 1 store i64 %t648, ptr %a607 - br label %for.cond3017 -for.end3020: + br label %for.cond3021 +for.end3024: %t649 = load ptr, ptr %a1 %t650 = load { ptr, i64, i64 }, ptr %a595 store { ptr, i64, i64 } { ptr @.str.1930, i64 11, i64 0 }, ptr %a652 @@ -34481,33 +34507,33 @@ for.end3020: call void @finch_str_drop(ptr %a686) %t687 = load ptr, ptr %a1 %t688 = icmp eq ptr %t687, null - br i1 %t688, label %panic3023, label %ok3024 -panic3023: + br i1 %t688, label %panic3027, label %ok3028 +panic3027: call void @finch_panic(ptr @.str.1935, i64 1216, ptr @.str.1936) unreachable -ok3024: +ok3028: %t689 = getelementptr inbounds %S.gen.Gen, ptr %t687, i32 0, i32 9 store i1 true, ptr %t689 %t690 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %t690, i32 0, i32 1 %t692 = load i64, ptr %t691 store i64 0, ptr %a693 - br label %for.cond3025 -for.cond3025: + br label %for.cond3029 +for.cond3029: %t694 = load i64, ptr %a693 %t695 = icmp slt i64 %t694, %t692 - br i1 %t695, label %for.body3026, label %for.end3028 -for.body3026: + br i1 %t695, label %for.body3030, label %for.end3032 +for.body3030: %t696 = load ptr, ptr %a1 %t697 = load i64, ptr %a693 %t698 = load { ptr, i64, i64 }, ptr %a603 %t699 = extractvalue { ptr, i64, i64 } %t698, 1 %t700 = icmp uge i64 %t697, %t699 - br i1 %t700, label %range3029, label %inrange3030 -range3029: + br i1 %t700, label %range3033, label %inrange3034 +range3033: call void @finch_panic_index(ptr @.str.1937, i64 1218, i64 %t697, i64 %t699) unreachable -inrange3030: +inrange3034: %t701 = extractvalue { ptr, i64, i64 } %t698, 0 %t702 = getelementptr inbounds { ptr, i64, i64 }, ptr %t701, i64 %t697 %t703 = load { ptr, i64, i64 }, ptr %t702 @@ -34518,11 +34544,11 @@ inrange3030: %t707 = load { ptr, i64, i64 }, ptr %t705 %t708 = extractvalue { ptr, i64, i64 } %t707, 1 %t709 = icmp uge i64 %t706, %t708 - br i1 %t709, label %range3031, label %inrange3032 -range3031: + br i1 %t709, label %range3035, label %inrange3036 +range3035: call void @finch_panic_index(ptr @.str.1939, i64 1219, i64 %t706, i64 %t708) unreachable -inrange3032: +inrange3036: %t710 = extractvalue { ptr, i64, i64 } %t707, 0 %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i64 %t706 %t712 = load { ptr, i64, i64 }, ptr %t711 @@ -34532,17 +34558,17 @@ inrange3032: %t715 = load { ptr, i64, i64 }, ptr %t713 %t716 = extractvalue { ptr, i64, i64 } %t715, 1 %t717 = icmp uge i64 %t714, %t716 - br i1 %t717, label %range3033, label %inrange3034 -range3033: + br i1 %t717, label %range3037, label %inrange3038 +range3037: call void @finch_panic_index(ptr @.str.1940, i64 1220, i64 %t714, i64 %t716) unreachable -inrange3034: +inrange3038: %t718 = extractvalue { ptr, i64, i64 } %t715, 0 %t719 = getelementptr inbounds i64, ptr %t718, i64 %t714 %t720 = load i64, ptr %t719 %t721 = icmp sgt i64 %t720, 0 - br i1 %t721, label %then3035, label %endif3037 -then3035: + br i1 %t721, label %then3039, label %endif3041 +then3039: %t722 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t722, { ptr, i64, i64 } { ptr @.str.1941, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1942, i64 1, i64 0 }) %t723 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 @@ -34550,39 +34576,39 @@ then3035: %t725 = load { ptr, i64, i64 }, ptr %t723 %t726 = extractvalue { ptr, i64, i64 } %t725, 1 %t727 = icmp uge i64 %t724, %t726 - br i1 %t727, label %range3038, label %inrange3039 -range3038: + br i1 %t727, label %range3042, label %inrange3043 +range3042: call void @finch_panic_index(ptr @.str.1943, i64 1222, i64 %t724, i64 %t726) unreachable -inrange3039: +inrange3043: %t728 = extractvalue { ptr, i64, i64 } %t725, 0 %t729 = getelementptr inbounds i64, ptr %t728, i64 %t724 %t730 = load i64, ptr %t729 store i64 0, ptr %a731 - br label %for.cond3040 -for.cond3040: + br label %for.cond3044 +for.cond3044: %t732 = load i64, ptr %a731 %t733 = icmp slt i64 %t732, %t730 - br i1 %t733, label %for.body3041, label %for.end3043 -for.body3041: + br i1 %t733, label %for.body3045, label %for.end3047 +for.body3045: %t734 = load i64, ptr %a731 %t735 = icmp sgt i64 %t734, 0 - br i1 %t735, label %then3044, label %endif3046 -then3044: + br i1 %t735, label %then3048, label %endif3050 +then3048: %t736 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t736, { ptr, i64, i64 } { ptr @.str.1944, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1945, i64 2, i64 0 }) - br label %endif3046 -endif3046: + br label %endif3050 +endif3050: %t737 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 4 %t738 = load i64, ptr %a693 %t739 = load { ptr, i64, i64 }, ptr %t737 %t740 = extractvalue { ptr, i64, i64 } %t739, 1 %t741 = icmp uge i64 %t738, %t740 - br i1 %t741, label %range3047, label %inrange3048 -range3047: + br i1 %t741, label %range3051, label %inrange3052 +range3051: call void @finch_panic_index(ptr @.str.1946, i64 1226, i64 %t738, i64 %t740) unreachable -inrange3048: +inrange3052: %t742 = extractvalue { ptr, i64, i64 } %t739, 0 %t743 = getelementptr inbounds i64, ptr %t742, i64 %t738 %t744 = load i64, ptr %t743 @@ -34606,11 +34632,11 @@ inrange3048: %t761 = load { ptr, i64, i64 }, ptr %t759 %t762 = extractvalue { ptr, i64, i64 } %t761, 1 %t763 = icmp uge i64 %t760, %t762 - br i1 %t763, label %range3049, label %inrange3050 -range3049: + br i1 %t763, label %range3053, label %inrange3054 +range3053: call void @finch_panic_index(ptr @.str.1949, i64 1227, i64 %t760, i64 %t762) unreachable -inrange3050: +inrange3054: %t764 = extractvalue { ptr, i64, i64 } %t761, 0 %t765 = getelementptr inbounds i64, ptr %t764, i64 %t760 %t766 = load i64, ptr %t765 @@ -34636,11 +34662,11 @@ inrange3050: %t783 = load { ptr, i64, i64 }, ptr %t781 %t784 = extractvalue { ptr, i64, i64 } %t783, 1 %t785 = icmp uge i64 %t782, %t784 - br i1 %t785, label %range3051, label %inrange3052 -range3051: + br i1 %t785, label %range3055, label %inrange3056 +range3055: call void @finch_panic_index(ptr @.str.1951, i64 1228, i64 %t782, i64 %t784) unreachable -inrange3052: +inrange3056: %t786 = extractvalue { ptr, i64, i64 } %t783, 0 %t787 = getelementptr inbounds %S.ast.Type, ptr %t786, i64 %t782 %t788 = load %S.ast.Type, ptr %t787 @@ -34654,11 +34680,11 @@ inrange3052: %t795 = load { ptr, i64, i64 }, ptr %t793 %t796 = extractvalue { ptr, i64, i64 } %t795, 1 %t797 = icmp uge i64 %t794, %t796 - br i1 %t797, label %range3053, label %inrange3054 -range3053: + br i1 %t797, label %range3057, label %inrange3058 +range3057: call void @finch_panic_index(ptr @.str.1952, i64 1228, i64 %t794, i64 %t796) unreachable -inrange3054: +inrange3058: %t798 = extractvalue { ptr, i64, i64 } %t795, 0 %t799 = getelementptr inbounds %S.ast.Type, ptr %t798, i64 %t794 %t800 = load %S.ast.Type, ptr %t799 @@ -34666,27 +34692,27 @@ inrange3054: store { ptr, i64, i64 } %t791, ptr %a801 call void @finch_str_drop(ptr %a801) call void @finch_str_drop(ptr %a777) - br label %for.step3042 -for.step3042: + br label %for.step3046 +for.step3046: %t802 = load i64, ptr %a731 %t803 = add i64 %t802, 1 store i64 %t803, ptr %a731 - br label %for.cond3040 -for.end3043: + br label %for.cond3044 +for.end3047: %t804 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t804, { ptr, i64, i64 } { ptr @.str.1953, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1954, i64 1, i64 0 }) - br label %endif3037 -endif3037: + br label %endif3041 +endif3041: %t805 = load ptr, ptr %a1 %t806 = load { ptr, i64, i64 }, ptr %a601 call void @finch.gen.br(ptr %t805, { ptr, i64, i64 } %t806) - br label %for.step3027 -for.step3027: + br label %for.step3031 +for.step3031: %t807 = load i64, ptr %a693 %t808 = add i64 %t807, 1 store i64 %t808, ptr %a693 - br label %for.cond3025 -for.end3028: + br label %for.cond3029 +for.end3032: %t809 = load ptr, ptr %a1 %t810 = load { ptr, i64, i64 }, ptr %a598 call void @finch.gen.label(ptr %t809, { ptr, i64, i64 } %t810) @@ -34714,15 +34740,15 @@ for.end3028: call void @finch_str_drop(ptr %a563) call void @finch.drop.S_gen_StructDef(ptr %a559) call void @finch.drop.S_gen_SumDef(ptr %a540) - br label %endif3006 -else3005: + br label %endif3010 +else3009: %t823 = load ptr, ptr %a1 %t824 = icmp eq ptr %t823, null - br i1 %t824, label %panic3055, label %ok3056 -panic3055: + br i1 %t824, label %panic3059, label %ok3060 +panic3059: call void @finch_panic(ptr @.str.1957, i64 1239, ptr @.str.1958) unreachable -ok3056: +ok3060: %t825 = getelementptr inbounds %S.gen.Gen, ptr %t823, i32 0, i32 16 %t826 = load ptr, ptr %a1 %t827 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -34733,11 +34759,11 @@ ok3056: %t832 = load { ptr, i64, i64 }, ptr %t825 %t833 = extractvalue { ptr, i64, i64 } %t832, 1 %t834 = icmp uge i64 %t831, %t833 - br i1 %t834, label %range3057, label %inrange3058 -range3057: + br i1 %t834, label %range3061, label %inrange3062 +range3061: call void @finch_panic_index(ptr @.str.1959, i64 1239, i64 %t831, i64 %t833) unreachable -inrange3058: +inrange3062: %t835 = extractvalue { ptr, i64, i64 } %t832, 0 %t836 = getelementptr inbounds %S.gen.StructDef, ptr %t835, i64 %t831 %t837 = load %S.gen.StructDef, ptr %t836 @@ -34763,23 +34789,23 @@ inrange3058: %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i32 0, i32 1 %t856 = load i64, ptr %t855 store i64 0, ptr %a857 - br label %for.cond3059 -for.cond3059: + br label %for.cond3063 +for.cond3063: %t858 = load i64, ptr %a857 %t859 = icmp slt i64 %t858, %t856 - br i1 %t859, label %for.body3060, label %for.end3062 -for.body3060: + br i1 %t859, label %for.body3064, label %for.end3066 +for.body3064: store { ptr, i64, i64 } { ptr @.str.1962, i64 2, i64 0 }, ptr %a860 %t861 = load i64, ptr %a857 %t862 = icmp eq i64 %t861, 0 - br i1 %t862, label %then3063, label %endif3065 -then3063: + br i1 %t862, label %then3067, label %endif3069 +then3067: %t863 = load { ptr, i64, i64 }, ptr %a860 store { ptr, i64, i64 } { ptr @.str.1963, i64 0, i64 0 }, ptr %a860 store { ptr, i64, i64 } %t863, ptr %a864 call void @finch_str_drop(ptr %a864) - br label %endif3065 -endif3065: + br label %endif3069 +endif3069: %t865 = load ptr, ptr %a1 %t866 = load { ptr, i64, i64 }, ptr %a860 %t867 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 11 @@ -34787,11 +34813,11 @@ endif3065: %t869 = load { ptr, i64, i64 }, ptr %t867 %t870 = extractvalue { ptr, i64, i64 } %t869, 1 %t871 = icmp uge i64 %t868, %t870 - br i1 %t871, label %range3066, label %inrange3067 -range3066: + br i1 %t871, label %range3070, label %inrange3071 +range3070: call void @finch_panic_index(ptr @.str.1965, i64 1247, i64 %t868, i64 %t870) unreachable -inrange3067: +inrange3071: %t872 = extractvalue { ptr, i64, i64 } %t869, 0 %t873 = getelementptr inbounds { ptr, i64, i64 }, ptr %t872, i64 %t868 %t874 = load { ptr, i64, i64 }, ptr %t873 @@ -34825,11 +34851,11 @@ inrange3067: %t898 = load { ptr, i64, i64 }, ptr %t896 %t899 = extractvalue { ptr, i64, i64 } %t898, 1 %t900 = icmp uge i64 %t897, %t899 - br i1 %t900, label %range3068, label %inrange3069 -range3068: + br i1 %t900, label %range3072, label %inrange3073 +range3072: call void @finch_panic_index(ptr @.str.1969, i64 1248, i64 %t897, i64 %t899) unreachable -inrange3069: +inrange3073: %t901 = extractvalue { ptr, i64, i64 } %t898, 0 %t902 = getelementptr inbounds i64, ptr %t901, i64 %t897 %t903 = load i64, ptr %t902 @@ -34855,11 +34881,11 @@ inrange3069: %t920 = load { ptr, i64, i64 }, ptr %t918 %t921 = extractvalue { ptr, i64, i64 } %t920, 1 %t922 = icmp uge i64 %t919, %t921 - br i1 %t922, label %range3070, label %inrange3071 -range3070: + br i1 %t922, label %range3074, label %inrange3075 +range3074: call void @finch_panic_index(ptr @.str.1971, i64 1249, i64 %t919, i64 %t921) unreachable -inrange3071: +inrange3075: %t923 = extractvalue { ptr, i64, i64 } %t920, 0 %t924 = getelementptr inbounds %S.ast.Type, ptr %t923, i64 %t919 %t925 = load %S.ast.Type, ptr %t924 @@ -34873,11 +34899,11 @@ inrange3071: %t932 = load { ptr, i64, i64 }, ptr %t930 %t933 = extractvalue { ptr, i64, i64 } %t932, 1 %t934 = icmp uge i64 %t931, %t933 - br i1 %t934, label %range3072, label %inrange3073 -range3072: + br i1 %t934, label %range3076, label %inrange3077 +range3076: call void @finch_panic_index(ptr @.str.1972, i64 1249, i64 %t931, i64 %t933) unreachable -inrange3073: +inrange3077: %t935 = extractvalue { ptr, i64, i64 } %t932, 0 %t936 = getelementptr inbounds %S.ast.Type, ptr %t935, i64 %t931 %t937 = load %S.ast.Type, ptr %t936 @@ -34886,25 +34912,25 @@ inrange3073: call void @finch_str_drop(ptr %a938) call void @finch_str_drop(ptr %a914) call void @finch_str_drop(ptr %a860) - br label %for.step3061 -for.step3061: + br label %for.step3065 +for.step3065: %t939 = load i64, ptr %a857 %t940 = add i64 %t939, 1 store i64 %t940, ptr %a857 - br label %for.cond3059 -for.end3062: + br label %for.cond3063 +for.end3066: %t941 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t941, { ptr, i64, i64 } { ptr @.str.1973, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1974, i64 1, i64 0 }) call void @finch_str_drop(ptr %a845) call void @finch.drop.S_gen_StructDef(ptr %a841) - br label %endif3006 -endif3006: - br label %endif2989 -endif2989: - br label %endif2964 -endif2964: - br label %endif2955 -endif2955: + br label %endif3010 +endif3010: + br label %endif2993 +endif2993: + br label %endif2968 +endif2968: + br label %endif2959 +endif2959: %t942 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t942, { ptr, i64, i64 } { ptr @.str.1975, i64 8, i64 0 }) %t943 = load ptr, ptr %a1 @@ -35017,19 +35043,19 @@ entry: %t11 = load i64, ptr %a7 %t12 = load i64, ptr %a10 %t13 = icmp eq i64 %t11, %t12 - br i1 %t13, label %then3074, label %endif3076 -then3074: + br i1 %t13, label %then3078, label %endif3080 +then3078: %t14 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_copy(ptr %a16, ptr %a15) %t17 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t17 -endif3076: +endif3080: %t18 = load i64, ptr %a10 %t19 = load i64, ptr %a7 %t20 = icmp slt i64 %t18, %t19 - br i1 %t20, label %then3077, label %endif3079 -then3077: + br i1 %t20, label %then3081, label %endif3083 +then3081: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Type, ptr %a3 @@ -35074,11 +35100,11 @@ then3077: store { ptr, i64, i64 } %t54, ptr %a56 call void @finch_str_drop(ptr %a56) ret { ptr, i64, i64 } %t55 -endif3079: +endif3083: %t57 = load %S.ast.Type, ptr %a3 %t58 = call i1 @finch.gen.isSigned(%S.ast.Type %t57) - br i1 %t58, label %then3080, label %endif3082 -then3080: + br i1 %t58, label %then3084, label %endif3086 +then3084: %t59 = load ptr, ptr %a1 %t60 = load ptr, ptr %a1 %t61 = load %S.ast.Type, ptr %a3 @@ -35123,7 +35149,7 @@ then3080: store { ptr, i64, i64 } %t92, ptr %a94 call void @finch_str_drop(ptr %a94) ret { ptr, i64, i64 } %t93 -endif3082: +endif3086: %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = load %S.ast.Type, ptr %a3 @@ -35236,21 +35262,21 @@ entry: store { ptr, i64, i64 } %t8, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br i1 %t12, label %then3083, label %endif3085 -then3083: + br i1 %t12, label %then3087, label %endif3089 +then3087: %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch_str_copy(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 ret { ptr, i64, i64 } %t16 -endif3085: +endif3089: %t17 = load %S.ast.Type, ptr %a4 %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) %t19 = load %S.ast.Type, ptr %a3 %t20 = call i64 @finch.gen.bitsOf(%S.ast.Type %t19) %t21 = icmp sgt i64 %t18, %t20 - br i1 %t21, label %then3086, label %endif3088 -then3086: + br i1 %t21, label %then3090, label %endif3092 +then3090: %t22 = load ptr, ptr %a1 %t23 = load ptr, ptr %a1 %t24 = load %S.ast.Type, ptr %a3 @@ -35295,7 +35321,7 @@ then3086: store { ptr, i64, i64 } %t55, ptr %a57 call void @finch_str_drop(ptr %a57) ret { ptr, i64, i64 } %t56 -endif3088: +endif3092: %t58 = load ptr, ptr %a1 %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Type, ptr %a3 @@ -35398,8 +35424,8 @@ entry: store %S.ast.Type %p3, ptr %a4 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.isSigned(%S.ast.Type %t5) - br i1 %t6, label %then3089, label %endif3091 -then3089: + br i1 %t6, label %then3093, label %endif3095 +then3093: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Type, ptr %a3 @@ -35444,7 +35470,7 @@ then3089: store { ptr, i64, i64 } %t40, ptr %a42 call void @finch_str_drop(ptr %a42) ret { ptr, i64, i64 } %t41 -endif3091: +endif3095: %t43 = load ptr, ptr %a1 %t44 = load ptr, ptr %a1 %t45 = load %S.ast.Type, ptr %a3 @@ -35628,14 +35654,14 @@ entry: %t7 = load %S.ast.Type, ptr %t6 %t8 = load %S.ast.Type, ptr %a3 %t9 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t8) - br i1 %t9, label %then3092, label %endif3094 -then3092: + br i1 %t9, label %then3096, label %endif3098 +then3096: %t10 = load %S.gen.Val, ptr %a2 store %S.gen.Val %t10, ptr %a11 call void @finch.copy.S_gen_Val(ptr %a12, ptr %a11) %t13 = load %S.gen.Val, ptr %a12 ret %S.gen.Val %t13 -endif3094: +endif3098: %t14 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t15 = getelementptr inbounds %S.ast.Type, ptr %t14, i32 0, i32 0 %t16 = load { ptr, i64, i64 }, ptr %t15 @@ -35643,23 +35669,23 @@ endif3094: store { ptr, i64, i64 } { ptr @.str.1999, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br label %logic.from3095 -logic.from3095: - br i1 %t20, label %logic.rhs3096, label %logic.end3097 -logic.rhs3096: + br label %logic.from3099 +logic.from3099: + br i1 %t20, label %logic.rhs3100, label %logic.end3101 +logic.rhs3100: %t21 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.2000, i64 3, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br label %logic.rend3098 -logic.rend3098: - br label %logic.end3097 -logic.end3097: - %t27 = phi i1 [ false, %logic.from3095 ], [ %t26, %logic.rend3098 ] - br i1 %t27, label %then3099, label %endif3101 -then3099: + br label %logic.rend3102 +logic.rend3102: + br label %logic.end3101 +logic.end3101: + %t27 = phi i1 [ false, %logic.from3099 ], [ %t26, %logic.rend3102 ] + br i1 %t27, label %then3103, label %endif3105 +then3103: %t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.2001, i64 4, i64 0 }, 0 %t29 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t29, ptr %a30 @@ -35667,7 +35693,7 @@ then3099: %t32 = load %S.ast.Type, ptr %a31 %t33 = insertvalue %S.gen.Val %t28, %S.ast.Type %t32, 1 ret %S.gen.Val %t33 -endif3101: +endif3105: %t34 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t35 = getelementptr inbounds %S.ast.Type, ptr %t34, i32 0, i32 0 %t36 = load { ptr, i64, i64 }, ptr %t35 @@ -35675,50 +35701,50 @@ endif3101: store { ptr, i64, i64 } { ptr @.str.2002, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br label %logic.from3102 -logic.from3102: - br i1 %t40, label %logic.rhs3103, label %logic.end3104 -logic.rhs3103: + br label %logic.from3106 +logic.from3106: + br i1 %t40, label %logic.rhs3107, label %logic.end3108 +logic.rhs3107: %t41 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 store { ptr, i64, i64 } { ptr @.str.2003, i64 3, i64 0 }, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 - br label %logic.rend3105 -logic.rend3105: - br label %logic.end3104 -logic.end3104: - %t47 = phi i1 [ false, %logic.from3102 ], [ %t46, %logic.rend3105 ] - br label %logic.from3106 -logic.from3106: - br i1 %t47, label %logic.rhs3107, label %logic.end3108 -logic.rhs3107: + br label %logic.rend3109 +logic.rend3109: + br label %logic.end3108 +logic.end3108: + %t47 = phi i1 [ false, %logic.from3106 ], [ %t46, %logic.rend3109 ] + br label %logic.from3110 +logic.from3110: + br i1 %t47, label %logic.rhs3111, label %logic.end3112 +logic.rhs3111: %t48 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t49 = getelementptr inbounds %S.ast.Type, ptr %t48, i32 0, i32 1 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 %t51 = load i64, ptr %t50 %t52 = icmp eq i64 %t51, 0 - br label %logic.from3109 -logic.from3109: - br i1 %t52, label %logic.end3111, label %logic.rhs3110 -logic.rhs3110: + br label %logic.from3113 +logic.from3113: + br i1 %t52, label %logic.end3115, label %logic.rhs3114 +logic.rhs3114: %t53 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = icmp eq i64 %t55, 0 - br label %logic.rend3112 -logic.rend3112: - br label %logic.end3111 -logic.end3111: - %t57 = phi i1 [ true, %logic.from3109 ], [ %t56, %logic.rend3112 ] - br label %logic.rend3113 -logic.rend3113: - br label %logic.end3108 -logic.end3108: - %t58 = phi i1 [ false, %logic.from3106 ], [ %t57, %logic.rend3113 ] - br i1 %t58, label %then3114, label %endif3116 -then3114: + br label %logic.rend3116 +logic.rend3116: + br label %logic.end3115 +logic.end3115: + %t57 = phi i1 [ true, %logic.from3113 ], [ %t56, %logic.rend3116 ] + br label %logic.rend3117 +logic.rend3117: + br label %logic.end3112 +logic.end3112: + %t58 = phi i1 [ false, %logic.from3110 ], [ %t57, %logic.rend3117 ] + br i1 %t58, label %then3118, label %endif3120 +then3118: %t59 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 @@ -35731,42 +35757,42 @@ then3114: %t68 = load %S.ast.Type, ptr %a67 %t69 = insertvalue %S.gen.Val %t64, %S.ast.Type %t68, 1 ret %S.gen.Val %t69 -endif3116: +endif3120: %t70 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t71 = load %S.ast.Type, ptr %t70 %t72 = call i1 @finch.gen.isInt(%S.ast.Type %t71) - br label %logic.from3117 -logic.from3117: - br i1 %t72, label %logic.rhs3118, label %logic.end3119 -logic.rhs3118: + br label %logic.from3121 +logic.from3121: + br i1 %t72, label %logic.rhs3122, label %logic.end3123 +logic.rhs3122: %t73 = load %S.ast.Type, ptr %a3 %t74 = call i1 @finch.gen.isInt(%S.ast.Type %t73) - br label %logic.rend3120 -logic.rend3120: - br label %logic.end3119 -logic.end3119: - %t75 = phi i1 [ false, %logic.from3117 ], [ %t74, %logic.rend3120 ] - br i1 %t75, label %then3121, label %endif3123 -then3121: + br label %logic.rend3124 +logic.rend3124: + br label %logic.end3123 +logic.end3123: + %t75 = phi i1 [ false, %logic.from3121 ], [ %t74, %logic.rend3124 ] + br i1 %t75, label %then3125, label %endif3127 +then3125: %t76 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t77 = load i1, ptr %t76 - br label %logic.from3124 -logic.from3124: - br i1 %t77, label %logic.rhs3125, label %logic.end3126 -logic.rhs3125: + br label %logic.from3128 +logic.from3128: + br i1 %t77, label %logic.rhs3129, label %logic.end3130 +logic.rhs3129: %t78 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 %t80 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t81 = load %S.ast.Type, ptr %t80 %t82 = load %S.ast.Type, ptr %a3 %t83 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t79, %S.ast.Type %t81, %S.ast.Type %t82) - br label %logic.rend3127 -logic.rend3127: - br label %logic.end3126 -logic.end3126: - %t84 = phi i1 [ false, %logic.from3124 ], [ %t83, %logic.rend3127 ] - br i1 %t84, label %then3128, label %endif3130 -then3128: + br label %logic.rend3131 +logic.rend3131: + br label %logic.end3130 +logic.end3130: + %t84 = phi i1 [ false, %logic.from3128 ], [ %t83, %logic.rend3131 ] + br i1 %t84, label %then3132, label %endif3134 +then3132: %t85 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 @@ -35780,13 +35806,13 @@ then3128: %t95 = insertvalue %S.gen.Val %t90, %S.ast.Type %t94, 1 %t96 = insertvalue %S.gen.Val %t95, i1 true, 3 ret %S.gen.Val %t96 -endif3130: +endif3134: %t97 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t98 = load %S.ast.Type, ptr %t97 %t99 = load %S.ast.Type, ptr %a3 %t100 = call i1 @finch.gen.widens(%S.ast.Type %t98, %S.ast.Type %t99) - br i1 %t100, label %then3131, label %endif3133 -then3131: + br i1 %t100, label %then3135, label %endif3137 +then3135: %t101 = load ptr, ptr %a1 %t102 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 @@ -35801,11 +35827,11 @@ then3131: %t112 = load %S.ast.Type, ptr %a111 %t113 = insertvalue %S.gen.Val %t108, %S.ast.Type %t112, 1 ret %S.gen.Val %t113 -endif3133: +endif3137: %t114 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t115 = load i1, ptr %t114 - br i1 %t115, label %then3134, label %endif3136 -then3134: + br i1 %t115, label %then3138, label %endif3140 +then3138: %t116 = load ptr, ptr %a1 %t117 = load %S.ast.Node, ptr %a4 %t118 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 @@ -35833,45 +35859,45 @@ then3134: call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } %t136) store { ptr, i64, i64 } %t136, ptr %a137 call void @finch_str_drop(ptr %a137) - br label %endif3136 -endif3136: - br label %endif3123 -endif3123: + br label %endif3140 +endif3140: + br label %endif3127 +endif3127: %t138 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t139 = load %S.ast.Type, ptr %t138 %t140 = call i1 @finch.gen.isInt(%S.ast.Type %t139) - br label %logic.from3137 -logic.from3137: - br i1 %t140, label %logic.rhs3138, label %logic.end3139 -logic.rhs3138: + br label %logic.from3141 +logic.from3141: + br i1 %t140, label %logic.rhs3142, label %logic.end3143 +logic.rhs3142: %t141 = load %S.ast.Type, ptr %a3 %t142 = call i1 @finch.gen.isFloat(%S.ast.Type %t141) - br label %logic.rend3140 -logic.rend3140: - br label %logic.end3139 -logic.end3139: - %t143 = phi i1 [ false, %logic.from3137 ], [ %t142, %logic.rend3140 ] - br i1 %t143, label %then3141, label %endif3143 -then3141: + br label %logic.rend3144 +logic.rend3144: + br label %logic.end3143 +logic.end3143: + %t143 = phi i1 [ false, %logic.from3141 ], [ %t142, %logic.rend3144 ] + br i1 %t143, label %then3145, label %endif3147 +then3145: %t144 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t145 = load i1, ptr %t144 - br label %logic.from3144 -logic.from3144: - br i1 %t145, label %logic.rhs3145, label %logic.end3146 -logic.rhs3145: + br label %logic.from3148 +logic.from3148: + br i1 %t145, label %logic.rhs3149, label %logic.end3150 +logic.rhs3149: %t146 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t147 = load { ptr, i64, i64 }, ptr %t146 store { ptr, i64, i64 } %t147, ptr %a148 store { ptr, i64, i64 } { ptr @.str.2006, i64 5, i64 0 }, ptr %a149 %t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149) %t151 = icmp ne i32 %t150, 0 - br label %logic.rend3147 -logic.rend3147: - br label %logic.end3146 -logic.end3146: - %t152 = phi i1 [ false, %logic.from3144 ], [ %t151, %logic.rend3147 ] - br i1 %t152, label %then3148, label %endif3150 -then3148: + br label %logic.rend3151 +logic.rend3151: + br label %logic.end3150 +logic.end3150: + %t152 = phi i1 [ false, %logic.from3148 ], [ %t151, %logic.rend3151 ] + br i1 %t152, label %then3152, label %endif3154 +then3152: %t153 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t154 = load { ptr, i64, i64 }, ptr %t153 store { ptr, i64, i64 } %t154, ptr %a156 @@ -35886,7 +35912,7 @@ then3148: %t164 = insertvalue %S.gen.Val %t159, %S.ast.Type %t163, 1 %t165 = insertvalue %S.gen.Val %t164, i1 true, 3 ret %S.gen.Val %t165 -endif3150: +endif3154: %t166 = load ptr, ptr %a1 %t167 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t168 = load { ptr, i64, i64 }, ptr %t167 @@ -35901,7 +35927,7 @@ endif3150: %t177 = load %S.ast.Type, ptr %a176 %t178 = insertvalue %S.gen.Val %t173, %S.ast.Type %t177, 1 ret %S.gen.Val %t178 -endif3143: +endif3147: %t179 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i32 0, i32 0 %t181 = load { ptr, i64, i64 }, ptr %t180 @@ -35909,23 +35935,23 @@ endif3143: store { ptr, i64, i64 } { ptr @.str.2008, i64 3, i64 0 }, ptr %a183 %t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183) %t185 = icmp ne i32 %t184, 0 - br label %logic.from3151 -logic.from3151: - br i1 %t185, label %logic.rhs3152, label %logic.end3153 -logic.rhs3152: + br label %logic.from3155 +logic.from3155: + br i1 %t185, label %logic.rhs3156, label %logic.end3157 +logic.rhs3156: %t186 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t187 = load { ptr, i64, i64 }, ptr %t186 store { ptr, i64, i64 } %t187, ptr %a188 store { ptr, i64, i64 } { ptr @.str.2009, i64 5, i64 0 }, ptr %a189 %t190 = call i32 @finch_str_eq(ptr %a188, ptr %a189) %t191 = icmp ne i32 %t190, 0 - br label %logic.rend3154 -logic.rend3154: - br label %logic.end3153 -logic.end3153: - %t192 = phi i1 [ false, %logic.from3151 ], [ %t191, %logic.rend3154 ] - br i1 %t192, label %then3155, label %endif3157 -then3155: + br label %logic.rend3158 +logic.rend3158: + br label %logic.end3157 +logic.end3157: + %t192 = phi i1 [ false, %logic.from3155 ], [ %t191, %logic.rend3158 ] + br i1 %t192, label %then3159, label %endif3161 +then3159: %t193 = load ptr, ptr %a1 %t194 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t195 = load { ptr, i64, i64 }, ptr %t194 @@ -35940,7 +35966,7 @@ then3155: %t204 = load %S.ast.Type, ptr %a203 %t205 = insertvalue %S.gen.Val %t200, %S.ast.Type %t204, 1 ret %S.gen.Val %t205 -endif3157: +endif3161: %t206 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t207 = getelementptr inbounds %S.ast.Type, ptr %t206, i32 0, i32 0 %t208 = load { ptr, i64, i64 }, ptr %t207 @@ -35948,34 +35974,34 @@ endif3157: store { ptr, i64, i64 } { ptr @.str.2010, i64 5, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 - br label %logic.from3158 -logic.from3158: - br i1 %t212, label %logic.rhs3159, label %logic.end3160 -logic.rhs3159: + br label %logic.from3162 +logic.from3162: + br i1 %t212, label %logic.rhs3163, label %logic.end3164 +logic.rhs3163: %t213 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t214 = load { ptr, i64, i64 }, ptr %t213 store { ptr, i64, i64 } %t214, ptr %a215 store { ptr, i64, i64 } { ptr @.str.2011, i64 3, i64 0 }, ptr %a216 %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) %t218 = icmp ne i32 %t217, 0 - br label %logic.rend3161 -logic.rend3161: - br label %logic.end3160 -logic.end3160: - %t219 = phi i1 [ false, %logic.from3158 ], [ %t218, %logic.rend3161 ] - br label %logic.from3162 -logic.from3162: - br i1 %t219, label %logic.rhs3163, label %logic.end3164 -logic.rhs3163: - %t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 - %t221 = load i1, ptr %t220 br label %logic.rend3165 logic.rend3165: br label %logic.end3164 logic.end3164: - %t222 = phi i1 [ false, %logic.from3162 ], [ %t221, %logic.rend3165 ] - br i1 %t222, label %then3166, label %endif3168 -then3166: + %t219 = phi i1 [ false, %logic.from3162 ], [ %t218, %logic.rend3165 ] + br label %logic.from3166 +logic.from3166: + br i1 %t219, label %logic.rhs3167, label %logic.end3168 +logic.rhs3167: + %t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t221 = load i1, ptr %t220 + br label %logic.rend3169 +logic.rend3169: + br label %logic.end3168 +logic.end3168: + %t222 = phi i1 [ false, %logic.from3166 ], [ %t221, %logic.rend3169 ] + br i1 %t222, label %then3170, label %endif3172 +then3170: %t223 = load ptr, ptr %a1 %t224 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t225 = load { ptr, i64, i64 }, ptr %t224 @@ -35990,7 +36016,7 @@ then3166: %t234 = load %S.ast.Type, ptr %a233 %t235 = insertvalue %S.gen.Val %t230, %S.ast.Type %t234, 1 ret %S.gen.Val %t235 -endif3168: +endif3172: %t236 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t236, ptr %a238 store { ptr, i64, i64 } { ptr @.str.2012, i64 9, i64 0 }, ptr %a239 @@ -36027,19 +36053,19 @@ endif3168: %t264 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t265 = load %S.ast.Type, ptr %t264 %t266 = call i1 @finch.gen.isNumber(%S.ast.Type %t265) - br label %logic.from3169 -logic.from3169: - br i1 %t266, label %logic.rhs3170, label %logic.end3171 -logic.rhs3170: + br label %logic.from3173 +logic.from3173: + br i1 %t266, label %logic.rhs3174, label %logic.end3175 +logic.rhs3174: %t267 = load %S.ast.Type, ptr %a3 %t268 = call i1 @finch.gen.isNumber(%S.ast.Type %t267) - br label %logic.rend3172 -logic.rend3172: - br label %logic.end3171 -logic.end3171: - %t269 = phi i1 [ false, %logic.from3169 ], [ %t268, %logic.rend3172 ] - br i1 %t269, label %then3173, label %endif3175 -then3173: + br label %logic.rend3176 +logic.rend3176: + br label %logic.end3175 +logic.end3175: + %t269 = phi i1 [ false, %logic.from3173 ], [ %t268, %logic.rend3176 ] + br i1 %t269, label %then3177, label %endif3179 +then3177: %t270 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t270, ptr %a272 store { ptr, i64, i64 } { ptr @.str.2014, i64 6, i64 0 }, ptr %a273 @@ -36068,19 +36094,19 @@ then3173: %t290 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t291 = load %S.ast.Type, ptr %t290 %t292 = call i1 @finch.gen.isFloat(%S.ast.Type %t291) - br label %logic.from3176 -logic.from3176: - br i1 %t292, label %logic.rhs3177, label %logic.end3178 -logic.rhs3177: + br label %logic.from3180 +logic.from3180: + br i1 %t292, label %logic.rhs3181, label %logic.end3182 +logic.rhs3181: %t293 = load %S.ast.Type, ptr %a3 %t294 = call i1 @finch.gen.isInt(%S.ast.Type %t293) - br label %logic.rend3179 -logic.rend3179: - br label %logic.end3178 -logic.end3178: - %t295 = phi i1 [ false, %logic.from3176 ], [ %t294, %logic.rend3179 ] - br i1 %t295, label %then3180, label %endif3182 -then3180: + br label %logic.rend3183 +logic.rend3183: + br label %logic.end3182 +logic.end3182: + %t295 = phi i1 [ false, %logic.from3180 ], [ %t294, %logic.rend3183 ] + br i1 %t295, label %then3184, label %endif3186 +then3184: %t296 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t296, ptr %a298 store { ptr, i64, i64 } { ptr @.str.2016, i64 26, i64 0 }, ptr %a299 @@ -36090,8 +36116,8 @@ then3180: store { ptr, i64, i64 } %t300, ptr %a263 store { ptr, i64, i64 } %t301, ptr %a302 call void @finch_str_drop(ptr %a302) - br label %endif3182 -endif3182: + br label %endif3186 +endif3186: %t303 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t303, ptr %a305 store { ptr, i64, i64 } { ptr @.str.2017, i64 1, i64 0 }, ptr %a306 @@ -36101,25 +36127,25 @@ endif3182: store { ptr, i64, i64 } %t307, ptr %a263 store { ptr, i64, i64 } %t308, ptr %a309 call void @finch_str_drop(ptr %a309) - br label %endif3175 -endif3175: + br label %endif3179 +endif3179: %t310 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t311 = load { ptr, i64, i64 }, ptr %t310 store { ptr, i64, i64 } %t311, ptr %a312 store { ptr, i64, i64 } { ptr @.str.2018, i64 3, i64 0 }, ptr %a313 %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) %t315 = icmp ne i32 %t314, 0 - br label %logic.from3183 -logic.from3183: - br i1 %t315, label %logic.rhs3184, label %logic.end3185 -logic.rhs3184: + br label %logic.from3187 +logic.from3187: + br i1 %t315, label %logic.rhs3188, label %logic.end3189 +logic.rhs3188: %t316 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t317 = load %S.ast.Type, ptr %t316 %t318 = call i1 @finch.gen.isNumber(%S.ast.Type %t317) - br label %logic.from3186 -logic.from3186: - br i1 %t318, label %logic.end3188, label %logic.rhs3187 -logic.rhs3187: + br label %logic.from3190 +logic.from3190: + br i1 %t318, label %logic.end3192, label %logic.rhs3191 +logic.rhs3191: %t319 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t320 = getelementptr inbounds %S.ast.Type, ptr %t319, i32 0, i32 0 %t321 = load { ptr, i64, i64 }, ptr %t320 @@ -36127,15 +36153,15 @@ logic.rhs3187: store { ptr, i64, i64 } { ptr @.str.2019, i64 4, i64 0 }, ptr %a323 %t324 = call i32 @finch_str_eq(ptr %a322, ptr %a323) %t325 = icmp ne i32 %t324, 0 - br label %logic.rend3189 -logic.rend3189: - br label %logic.end3188 -logic.end3188: - %t326 = phi i1 [ true, %logic.from3186 ], [ %t325, %logic.rend3189 ] - br label %logic.from3190 -logic.from3190: - br i1 %t326, label %logic.end3192, label %logic.rhs3191 -logic.rhs3191: + br label %logic.rend3193 +logic.rend3193: + br label %logic.end3192 +logic.end3192: + %t326 = phi i1 [ true, %logic.from3190 ], [ %t325, %logic.rend3193 ] + br label %logic.from3194 +logic.from3194: + br i1 %t326, label %logic.end3196, label %logic.rhs3195 +logic.rhs3195: %t327 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t328 = getelementptr inbounds %S.ast.Type, ptr %t327, i32 0, i32 0 %t329 = load { ptr, i64, i64 }, ptr %t328 @@ -36143,18 +36169,18 @@ logic.rhs3191: store { ptr, i64, i64 } { ptr @.str.2020, i64 4, i64 0 }, ptr %a331 %t332 = call i32 @finch_str_eq(ptr %a330, ptr %a331) %t333 = icmp ne i32 %t332, 0 - br label %logic.rend3193 -logic.rend3193: - br label %logic.end3192 -logic.end3192: - %t334 = phi i1 [ true, %logic.from3190 ], [ %t333, %logic.rend3193 ] - br label %logic.rend3194 -logic.rend3194: - br label %logic.end3185 -logic.end3185: - %t335 = phi i1 [ false, %logic.from3183 ], [ %t334, %logic.rend3194 ] - br i1 %t335, label %then3195, label %endif3197 -then3195: + br label %logic.rend3197 +logic.rend3197: + br label %logic.end3196 +logic.end3196: + %t334 = phi i1 [ true, %logic.from3194 ], [ %t333, %logic.rend3197 ] + br label %logic.rend3198 +logic.rend3198: + br label %logic.end3189 +logic.end3189: + %t335 = phi i1 [ false, %logic.from3187 ], [ %t334, %logic.rend3198 ] + br i1 %t335, label %then3199, label %endif3201 +then3199: %t336 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t336, ptr %a338 store { ptr, i64, i64 } { ptr @.str.2021, i64 34, i64 0 }, ptr %a339 @@ -36164,8 +36190,8 @@ then3195: store { ptr, i64, i64 } %t340, ptr %a263 store { ptr, i64, i64 } %t341, ptr %a342 call void @finch_str_drop(ptr %a342) - br label %endif3197 -endif3197: + br label %endif3201 +endif3201: %t343 = load ptr, ptr %a1 %t344 = load %S.ast.Node, ptr %a4 %t345 = load { ptr, i64, i64 }, ptr %a263 @@ -36191,28 +36217,28 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic3198, label %ok3199 -panic3198: + br i1 %t4, label %panic3202, label %ok3203 +panic3202: call void @finch_panic(ptr @.str.2022, i64 1346, ptr @.str.2023) unreachable -ok3199: +ok3203: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 - br label %for.cond3200 -for.cond3200: + br label %for.cond3204 +for.cond3204: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 - br i1 %t10, label %for.body3201, label %for.end3203 -for.body3201: + br i1 %t10, label %for.body3205, label %for.end3207 +for.body3205: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic3204, label %ok3205 -panic3204: + br i1 %t12, label %panic3208, label %ok3209 +panic3208: call void @finch_panic(ptr @.str.2024, i64 1347, ptr @.str.2025) unreachable -ok3205: +ok3209: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 10 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load i64, ptr %t14 @@ -36222,50 +36248,50 @@ ok3205: store i64 %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic3206, label %ok3207 -panic3206: + br i1 %t21, label %panic3210, label %ok3211 +panic3210: call void @finch_panic(ptr @.str.2026, i64 1348, ptr @.str.2027) unreachable -ok3207: +ok3211: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 %t23 = load i64, ptr %a19 %t24 = load { ptr, i64, i64 }, ptr %t22 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 - br i1 %t26, label %range3208, label %inrange3209 -range3208: + br i1 %t26, label %range3212, label %inrange3213 +range3212: call void @finch_panic_index(ptr @.str.2028, i64 1348, i64 %t23, i64 %t25) unreachable -inrange3209: +inrange3213: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 store i64 0, ptr %a32 - br label %for.cond3210 -for.cond3210: + br label %for.cond3214 +for.cond3214: %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, %t31 - br i1 %t34, label %for.body3211, label %for.end3213 -for.body3211: + br i1 %t34, label %for.body3215, label %for.end3217 +for.body3215: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic3214, label %ok3215 -panic3214: + br i1 %t36, label %panic3218, label %ok3219 +panic3218: call void @finch_panic(ptr @.str.2029, i64 1349, ptr @.str.2030) unreachable -ok3215: +ok3219: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 10 %t38 = load i64, ptr %a19 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range3216, label %inrange3217 -range3216: + br i1 %t41, label %range3220, label %inrange3221 +range3220: call void @finch_panic_index(ptr @.str.2031, i64 1349, i64 %t38, i64 %t40) unreachable -inrange3217: +inrange3221: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.gen.Scope, ptr %t42, i64 %t38 %t44 = getelementptr inbounds %S.gen.Scope, ptr %t43, i32 0, i32 0 @@ -36273,11 +36299,11 @@ inrange3217: %t46 = load { ptr, i64, i64 }, ptr %t44 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 %t45, %t47 - br i1 %t48, label %range3218, label %inrange3219 -range3218: + br i1 %t48, label %range3222, label %inrange3223 +range3222: call void @finch_panic_index(ptr @.str.2032, i64 1349, i64 %t45, i64 %t47) unreachable -inrange3219: +inrange3223: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.gen.Var, ptr %t49, i64 %t45 %t51 = getelementptr inbounds %S.gen.Var, ptr %t50, i32 0, i32 0 @@ -36287,38 +36313,38 @@ inrange3219: store { ptr, i64, i64 } %t53, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 - br i1 %t57, label %then3220, label %endif3222 -then3220: + br i1 %t57, label %then3224, label %endif3226 +then3224: %t58 = load ptr, ptr %a1 %t59 = icmp eq ptr %t58, null - br i1 %t59, label %panic3223, label %ok3224 -panic3223: + br i1 %t59, label %panic3227, label %ok3228 +panic3227: call void @finch_panic(ptr @.str.2033, i64 1350, ptr @.str.2034) unreachable -ok3224: +ok3228: %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 44 %t61 = load i1, ptr %t60 - br label %logic.from3225 -logic.from3225: - br i1 %t61, label %logic.rhs3226, label %logic.end3227 -logic.rhs3226: + br label %logic.from3229 +logic.from3229: + br i1 %t61, label %logic.rhs3230, label %logic.end3231 +logic.rhs3230: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null - br i1 %t63, label %panic3228, label %ok3229 -panic3228: + br i1 %t63, label %panic3232, label %ok3233 +panic3232: call void @finch_panic(ptr @.str.2035, i64 1350, ptr @.str.2036) unreachable -ok3229: +ok3233: %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 10 %t65 = load i64, ptr %a19 %t66 = load { ptr, i64, i64 }, ptr %t64 %t67 = extractvalue { ptr, i64, i64 } %t66, 1 %t68 = icmp uge i64 %t65, %t67 - br i1 %t68, label %range3230, label %inrange3231 -range3230: + br i1 %t68, label %range3234, label %inrange3235 +range3234: call void @finch_panic_index(ptr @.str.2037, i64 1350, i64 %t65, i64 %t67) unreachable -inrange3231: +inrange3235: %t69 = extractvalue { ptr, i64, i64 } %t66, 0 %t70 = getelementptr inbounds %S.gen.Scope, ptr %t69, i64 %t65 %t71 = getelementptr inbounds %S.gen.Scope, ptr %t70, i32 0, i32 0 @@ -36326,54 +36352,54 @@ inrange3231: %t73 = load { ptr, i64, i64 }, ptr %t71 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 - br i1 %t75, label %range3232, label %inrange3233 -range3232: + br i1 %t75, label %range3236, label %inrange3237 +range3236: call void @finch_panic_index(ptr @.str.2038, i64 1350, i64 %t72, i64 %t74) unreachable -inrange3233: +inrange3237: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.gen.Var, ptr %t76, i64 %t72 %t78 = getelementptr inbounds %S.gen.Var, ptr %t77, i32 0, i32 4 %t79 = load i64, ptr %t78 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null - br i1 %t81, label %panic3234, label %ok3235 -panic3234: + br i1 %t81, label %panic3238, label %ok3239 +panic3238: call void @finch_panic(ptr @.str.2039, i64 1350, ptr @.str.2040) unreachable -ok3235: +ok3239: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 45 %t83 = load i64, ptr %t82 %t84 = icmp sge i64 %t79, %t83 - br label %logic.rend3236 -logic.rend3236: - br label %logic.end3227 -logic.end3227: - %t85 = phi i1 [ false, %logic.from3225 ], [ %t84, %logic.rend3236 ] - br i1 %t85, label %then3237, label %endif3239 -then3237: - br label %for.step3212 -endif3239: + br label %logic.rend3240 +logic.rend3240: + br label %logic.end3231 +logic.end3231: + %t85 = phi i1 [ false, %logic.from3229 ], [ %t84, %logic.rend3240 ] + br i1 %t85, label %then3241, label %endif3243 +then3241: + br label %for.step3216 +endif3243: %t86 = load i64, ptr %a19 %t87 = mul i64 %t86, 100000 %t88 = load i64, ptr %a32 %t89 = add i64 %t87, %t88 ret i64 %t89 -endif3222: - br label %for.step3212 -for.step3212: +endif3226: + br label %for.step3216 +for.step3216: %t90 = load i64, ptr %a32 %t91 = add i64 %t90, 1 store i64 %t91, ptr %a32 - br label %for.cond3210 -for.end3213: - br label %for.step3202 -for.step3202: + br label %for.cond3214 +for.end3217: + br label %for.step3206 +for.step3206: %t92 = load i64, ptr %a8 %t93 = add i64 %t92, 1 store i64 %t93, ptr %a8 - br label %for.cond3200 -for.end3203: + br label %for.cond3204 +for.end3207: ret i64 -1 } @@ -36407,22 +36433,22 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic3240, label %ok3241 -panic3240: + br i1 %t4, label %panic3244, label %ok3245 +panic3244: call void @finch_panic(ptr @.str.2041, i64 1361, ptr @.str.2042) unreachable -ok3241: +ok3245: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = load i64, ptr %a2 %t7 = sdiv i64 %t6, 100000 %t8 = load { ptr, i64, i64 }, ptr %t5 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range3242, label %inrange3243 -range3242: + br i1 %t10, label %range3246, label %inrange3247 +range3246: call void @finch_panic_index(ptr @.str.2043, i64 1361, i64 %t7, i64 %t9) unreachable -inrange3243: +inrange3247: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i64 %t7 %t13 = getelementptr inbounds %S.gen.Scope, ptr %t12, i32 0, i32 0 @@ -36431,11 +36457,11 @@ inrange3243: %t16 = load { ptr, i64, i64 }, ptr %t13 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range3244, label %inrange3245 -range3244: + br i1 %t18, label %range3248, label %inrange3249 +range3248: call void @finch_panic_index(ptr @.str.2044, i64 1361, i64 %t15, i64 %t17) unreachable -inrange3245: +inrange3249: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.Var, ptr %t19, i64 %t15 %t21 = load %S.gen.Var, ptr %t20 @@ -36460,38 +36486,38 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic3246, label %ok3247 -panic3246: + br i1 %t5, label %panic3250, label %ok3251 +panic3250: call void @finch_panic(ptr @.str.2045, i64 1365, ptr @.str.2046) unreachable -ok3247: +ok3251: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 - br label %for.cond3248 -for.cond3248: + br label %for.cond3252 +for.cond3252: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 - br i1 %t11, label %for.body3249, label %for.end3251 -for.body3249: + br i1 %t11, label %for.body3253, label %for.end3255 +for.body3253: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic3252, label %ok3253 -panic3252: + br i1 %t13, label %panic3256, label %ok3257 +panic3256: call void @finch_panic(ptr @.str.2047, i64 1366, ptr @.str.2048) unreachable -ok3253: +ok3257: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 15 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range3254, label %inrange3255 -range3254: + br i1 %t18, label %range3258, label %inrange3259 +range3258: call void @finch_panic_index(ptr @.str.2049, i64 1366, i64 %t15, i64 %t17) unreachable -inrange3255: +inrange3259: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i32 0, i32 0 @@ -36501,27 +36527,27 @@ inrange3255: store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from3256 -logic.from3256: - br i1 %t27, label %logic.rhs3257, label %logic.end3258 -logic.rhs3257: + br label %logic.from3260 +logic.from3260: + br i1 %t27, label %logic.rhs3261, label %logic.end3262 +logic.rhs3261: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic3259, label %ok3260 -panic3259: + br i1 %t29, label %panic3263, label %ok3264 +panic3263: call void @finch_panic(ptr @.str.2050, i64 1366, ptr @.str.2051) unreachable -ok3260: +ok3264: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 15 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range3261, label %inrange3262 -range3261: + br i1 %t34, label %range3265, label %inrange3266 +range3265: call void @finch_panic_index(ptr @.str.2052, i64 1366, i64 %t31, i64 %t33) unreachable -inrange3262: +inrange3266: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 1 @@ -36531,55 +36557,55 @@ inrange3262: store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend3263 -logic.rend3263: - br label %logic.end3258 -logic.end3258: - %t44 = phi i1 [ false, %logic.from3256 ], [ %t43, %logic.rend3263 ] - br label %logic.from3264 -logic.from3264: - br i1 %t44, label %logic.rhs3265, label %logic.end3266 -logic.rhs3265: + br label %logic.rend3267 +logic.rend3267: + br label %logic.end3262 +logic.end3262: + %t44 = phi i1 [ false, %logic.from3260 ], [ %t43, %logic.rend3267 ] + br label %logic.from3268 +logic.from3268: + br i1 %t44, label %logic.rhs3269, label %logic.end3270 +logic.rhs3269: %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null - br i1 %t46, label %panic3267, label %ok3268 -panic3267: + br i1 %t46, label %panic3271, label %ok3272 +panic3271: call void @finch_panic(ptr @.str.2053, i64 1366, ptr @.str.2054) unreachable -ok3268: +ok3272: %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 15 %t48 = load i64, ptr %a9 %t49 = load { ptr, i64, i64 }, ptr %t47 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 %t48, %t50 - br i1 %t51, label %range3269, label %inrange3270 -range3269: + br i1 %t51, label %range3273, label %inrange3274 +range3273: call void @finch_panic_index(ptr @.str.2055, i64 1366, i64 %t48, i64 %t50) unreachable -inrange3270: +inrange3274: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds %S.gen.FnSig, ptr %t52, i64 %t48 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 2 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp eq i64 %t56, 0 - br label %logic.rend3271 -logic.rend3271: - br label %logic.end3266 -logic.end3266: - %t58 = phi i1 [ false, %logic.from3264 ], [ %t57, %logic.rend3271 ] - br i1 %t58, label %then3272, label %endif3274 -then3272: + br label %logic.rend3275 +logic.rend3275: + br label %logic.end3270 +logic.end3270: + %t58 = phi i1 [ false, %logic.from3268 ], [ %t57, %logic.rend3275 ] + br i1 %t58, label %then3276, label %endif3278 +then3276: %t59 = load i64, ptr %a9 ret i64 %t59 -endif3274: - br label %for.step3250 -for.step3250: +endif3278: + br label %for.step3254 +for.step3254: %t60 = load i64, ptr %a9 %t61 = add i64 %t60, 1 store i64 %t61, ptr %a9 - br label %for.cond3248 -for.end3251: + br label %for.cond3252 +for.end3255: ret i64 -1 } @@ -36602,38 +36628,38 @@ entry: store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic3275, label %ok3276 -panic3275: + br i1 %t6, label %panic3279, label %ok3280 +panic3279: call void @finch_panic(ptr @.str.2056, i64 1374, ptr @.str.2057) unreachable -ok3276: +ok3280: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 15 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 %t9 = load i64, ptr %t8 store i64 0, ptr %a10 - br label %for.cond3277 -for.cond3277: + br label %for.cond3281 +for.cond3281: %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, %t9 - br i1 %t12, label %for.body3278, label %for.end3280 -for.body3278: + br i1 %t12, label %for.body3282, label %for.end3284 +for.body3282: %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic3281, label %ok3282 -panic3281: + br i1 %t14, label %panic3285, label %ok3286 +panic3285: call void @finch_panic(ptr @.str.2058, i64 1375, ptr @.str.2059) unreachable -ok3282: +ok3286: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 15 %t16 = load i64, ptr %a10 %t17 = load { ptr, i64, i64 }, ptr %t15 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 - br i1 %t19, label %range3283, label %inrange3284 -range3283: + br i1 %t19, label %range3287, label %inrange3288 +range3287: call void @finch_panic_index(ptr @.str.2060, i64 1375, i64 %t16, i64 %t18) unreachable -inrange3284: +inrange3288: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.gen.FnSig, ptr %t21, i32 0, i32 3 @@ -36643,27 +36669,27 @@ inrange3284: store { ptr, i64, i64 } %t24, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br label %logic.from3285 -logic.from3285: - br i1 %t28, label %logic.rhs3286, label %logic.end3287 -logic.rhs3286: + br label %logic.from3289 +logic.from3289: + br i1 %t28, label %logic.rhs3290, label %logic.end3291 +logic.rhs3290: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic3288, label %ok3289 -panic3288: + br i1 %t30, label %panic3292, label %ok3293 +panic3292: call void @finch_panic(ptr @.str.2061, i64 1375, ptr @.str.2062) unreachable -ok3289: +ok3293: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 15 %t32 = load i64, ptr %a10 %t33 = load { ptr, i64, i64 }, ptr %t31 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range3290, label %inrange3291 -range3290: + br i1 %t35, label %range3294, label %inrange3295 +range3294: call void @finch_panic_index(ptr @.str.2063, i64 1375, i64 %t32, i64 %t34) unreachable -inrange3291: +inrange3295: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i64 %t32 %t38 = getelementptr inbounds %S.gen.FnSig, ptr %t37, i32 0, i32 2 @@ -36673,32 +36699,32 @@ inrange3291: store { ptr, i64, i64 } %t40, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br label %logic.rend3292 -logic.rend3292: - br label %logic.end3287 -logic.end3287: - %t45 = phi i1 [ false, %logic.from3285 ], [ %t44, %logic.rend3292 ] - br label %logic.from3293 -logic.from3293: - br i1 %t45, label %logic.rhs3294, label %logic.end3295 -logic.rhs3294: + br label %logic.rend3296 +logic.rend3296: + br label %logic.end3291 +logic.end3291: + %t45 = phi i1 [ false, %logic.from3289 ], [ %t44, %logic.rend3296 ] + br label %logic.from3297 +logic.from3297: + br i1 %t45, label %logic.rhs3298, label %logic.end3299 +logic.rhs3298: %t46 = load ptr, ptr %a1 %t47 = icmp eq ptr %t46, null - br i1 %t47, label %panic3296, label %ok3297 -panic3296: + br i1 %t47, label %panic3300, label %ok3301 +panic3300: call void @finch_panic(ptr @.str.2064, i64 1375, ptr @.str.2065) unreachable -ok3297: +ok3301: %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 15 %t49 = load i64, ptr %a10 %t50 = load { ptr, i64, i64 }, ptr %t48 %t51 = extractvalue { ptr, i64, i64 } %t50, 1 %t52 = icmp uge i64 %t49, %t51 - br i1 %t52, label %range3298, label %inrange3299 -range3298: + br i1 %t52, label %range3302, label %inrange3303 +range3302: call void @finch_panic_index(ptr @.str.2066, i64 1375, i64 %t49, i64 %t51) unreachable -inrange3299: +inrange3303: %t53 = extractvalue { ptr, i64, i64 } %t50, 0 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i64 %t49 %t55 = getelementptr inbounds %S.gen.FnSig, ptr %t54, i32 0, i32 1 @@ -36708,23 +36734,23 @@ inrange3299: store { ptr, i64, i64 } %t57, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br label %logic.rend3300 -logic.rend3300: - br label %logic.end3295 -logic.end3295: - %t62 = phi i1 [ false, %logic.from3293 ], [ %t61, %logic.rend3300 ] - br i1 %t62, label %then3301, label %endif3303 -then3301: + br label %logic.rend3304 +logic.rend3304: + br label %logic.end3299 +logic.end3299: + %t62 = phi i1 [ false, %logic.from3297 ], [ %t61, %logic.rend3304 ] + br i1 %t62, label %then3305, label %endif3307 +then3305: %t63 = load i64, ptr %a10 ret i64 %t63 -endif3303: - br label %for.step3279 -for.step3279: +endif3307: + br label %for.step3283 +for.step3283: %t64 = load i64, ptr %a10 %t65 = add i64 %t64, 1 store i64 %t65, ptr %a10 - br label %for.cond3277 -for.end3280: + br label %for.cond3281 +for.end3284: ret i64 -1 } @@ -36805,27 +36831,27 @@ entry: %t39 = load i64, ptr %t36 %t40 = load ptr, ptr %a35 store i64 0, ptr %a41 - br label %find.cond3304 -find.cond3304: + br label %find.cond3308 +find.cond3308: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t39 - br i1 %t43, label %find.body3305, label %find.end3308 -find.body3305: + br i1 %t43, label %find.body3309, label %find.end3312 +find.body3309: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t42 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } %t37, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 - br i1 %t49, label %find.hit3306, label %find.next3307 -find.hit3306: + br i1 %t49, label %find.hit3310, label %find.next3311 +find.hit3310: store i64 %t42, ptr %a38 - br label %find.end3308 -find.next3307: + br label %find.end3312 +find.next3311: %t50 = add i64 %t42, 1 store i64 %t50, ptr %a41 - br label %find.cond3304 -find.end3308: + br label %find.cond3308 +find.end3312: %t51 = load i64, ptr %a38 %t52 = icmp sge i64 %t51, 0 call void @finch.drop.arr_str(ptr %a35) @@ -36984,22 +37010,22 @@ entry: %t9 = load { ptr, i64, i64 }, ptr %a3 %t10 = call i64 @finch.gen.lookup(ptr %t8, { ptr, i64, i64 } %t9) %t11 = icmp sge i64 %t10, 0 - br label %logic.from3309 -logic.from3309: - br i1 %t11, label %logic.rhs3310, label %logic.end3311 -logic.rhs3310: + br label %logic.from3313 +logic.from3313: + br i1 %t11, label %logic.rhs3314, label %logic.end3315 +logic.rhs3314: %t12 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.2095, i64 3, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp eq i32 %t15, 0 - br label %logic.rend3312 -logic.rend3312: - br label %logic.end3311 -logic.end3311: - %t17 = phi i1 [ false, %logic.from3309 ], [ %t16, %logic.rend3312 ] - br i1 %t17, label %then3313, label %endif3315 -then3313: + br label %logic.rend3316 +logic.rend3316: + br label %logic.end3315 +logic.end3315: + %t17 = phi i1 [ false, %logic.from3313 ], [ %t16, %logic.rend3316 ] + br i1 %t17, label %then3317, label %endif3319 +then3317: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 %t20 = load { ptr, i64, i64 }, ptr %a3 @@ -37016,23 +37042,23 @@ then3313: call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } %t29) store { ptr, i64, i64 } %t29, ptr %a30 call void @finch_str_drop(ptr %a30) - br label %endif3315 -endif3315: + br label %endif3319 +endif3319: %t31 = load ptr, ptr %a1 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic3316, label %ok3317 -panic3316: + br i1 %t33, label %panic3320, label %ok3321 +panic3320: call void @finch_panic(ptr @.str.2098, i64 1393, ptr @.str.2099) unreachable -ok3317: +ok3321: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 14 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = load { ptr, i64, i64 }, ptr %a3 %t37 = call i64 @finch.gen.findFn(ptr %t31, { ptr, i64, i64 } %t35, { ptr, i64, i64 } %t36) %t38 = icmp sge i64 %t37, 0 - br i1 %t38, label %then3318, label %endif3320 -then3318: + br i1 %t38, label %then3322, label %endif3324 +then3322: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 %t41 = load { ptr, i64, i64 }, ptr %a3 @@ -37049,12 +37075,12 @@ then3318: call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t50) store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %endif3320 -endif3320: + br label %endif3324 +endif3324: %t52 = load { ptr, i64, i64 }, ptr %a3 %t53 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t52) - br i1 %t53, label %then3321, label %endif3323 -then3321: + br i1 %t53, label %then3325, label %endif3327 +then3325: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a2 %t56 = load { ptr, i64, i64 }, ptr %a3 @@ -37071,8 +37097,8 @@ then3321: call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } %t65) store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_drop(ptr %a66) - br label %endif3323 -endif3323: + br label %endif3327 +endif3327: %t67 = load ptr, ptr %a1 %t68 = load ptr, ptr %a1 %t69 = load %S.ast.Type, ptr %a4 @@ -37092,50 +37118,50 @@ endif3323: call void @finch_str_drop(ptr %a80) %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic3324, label %ok3325 -panic3324: + br i1 %t82, label %panic3328, label %ok3329 +panic3328: call void @finch_panic(ptr @.str.2104, i64 1401, ptr @.str.2105) unreachable -ok3325: +ok3329: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 10 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 %t85 = load i64, ptr %t84 %t86 = sub i64 %t85, 1 store i64 %t86, ptr %a87 %t88 = load i1, ptr %a7 - br label %logic.from3326 -logic.from3326: - br i1 %t88, label %logic.rhs3327, label %logic.end3328 -logic.rhs3327: + br label %logic.from3330 +logic.from3330: + br i1 %t88, label %logic.rhs3331, label %logic.end3332 +logic.rhs3331: %t89 = load ptr, ptr %a1 %t90 = load %S.ast.Type, ptr %a4 %t91 = call i1 @finch.gen.owning(ptr %t89, %S.ast.Type %t90) - br label %logic.rend3329 -logic.rend3329: - br label %logic.end3328 -logic.end3328: - %t92 = phi i1 [ false, %logic.from3326 ], [ %t91, %logic.rend3329 ] + br label %logic.rend3333 +logic.rend3333: + br label %logic.end3332 +logic.end3332: + %t92 = phi i1 [ false, %logic.from3330 ], [ %t91, %logic.rend3333 ] store i1 %t92, ptr %a93 %t94 = load i1, ptr %a93 - br i1 %t94, label %then3330, label %endif3332 -then3330: + br i1 %t94, label %then3334, label %endif3336 +then3334: %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic3333, label %ok3334 -panic3333: + br i1 %t96, label %panic3337, label %ok3338 +panic3337: call void @finch_panic(ptr @.str.2106, i64 1404, ptr @.str.2107) unreachable -ok3334: +ok3338: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 10 %t98 = load i64, ptr %a87 %t99 = load { ptr, i64, i64 }, ptr %t97 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 %t98, %t100 - br i1 %t101, label %range3335, label %inrange3336 -range3335: + br i1 %t101, label %range3339, label %inrange3340 +range3339: call void @finch_panic_index(ptr @.str.2108, i64 1404, i64 %t98, i64 %t100) unreachable -inrange3336: +inrange3340: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.gen.Scope, ptr %t102, i64 %t98 %t104 = getelementptr inbounds %S.gen.Scope, ptr %t103, i32 0, i32 3 @@ -37143,21 +37169,21 @@ inrange3336: %t106 = insertvalue %S.gen.Cleanup zeroinitializer, i1 false, 0 %t107 = load ptr, ptr %a1 %t108 = icmp eq ptr %t107, null - br i1 %t108, label %panic3337, label %ok3338 -panic3337: + br i1 %t108, label %panic3341, label %ok3342 +panic3341: call void @finch_panic(ptr @.str.2109, i64 1404, ptr @.str.2110) unreachable -ok3338: +ok3342: %t109 = getelementptr inbounds %S.gen.Gen, ptr %t107, i32 0, i32 10 %t110 = load i64, ptr %a87 %t111 = load { ptr, i64, i64 }, ptr %t109 %t112 = extractvalue { ptr, i64, i64 } %t111, 1 %t113 = icmp uge i64 %t110, %t112 - br i1 %t113, label %range3339, label %inrange3340 -range3339: + br i1 %t113, label %range3343, label %inrange3344 +range3343: call void @finch_panic_index(ptr @.str.2111, i64 1404, i64 %t110, i64 %t112) unreachable -inrange3340: +inrange3344: %t114 = extractvalue { ptr, i64, i64 } %t111, 0 %t115 = getelementptr inbounds %S.gen.Scope, ptr %t114, i64 %t110 %t116 = getelementptr inbounds %S.gen.Scope, ptr %t115, i32 0, i32 0 @@ -37171,25 +37197,25 @@ inrange3340: %t123 = getelementptr inbounds %S.gen.Cleanup, ptr %t122, i64 %t120 store %S.gen.Cleanup %t119, ptr %t123 store i64 %t121, ptr %t105 - br label %endif3332 -endif3332: + br label %endif3336 +endif3336: %t124 = load ptr, ptr %a1 %t125 = icmp eq ptr %t124, null - br i1 %t125, label %panic3341, label %ok3342 -panic3341: + br i1 %t125, label %panic3345, label %ok3346 +panic3345: call void @finch_panic(ptr @.str.2112, i64 1406, ptr @.str.2113) unreachable -ok3342: +ok3346: %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 10 %t127 = load i64, ptr %a87 %t128 = load { ptr, i64, i64 }, ptr %t126 %t129 = extractvalue { ptr, i64, i64 } %t128, 1 %t130 = icmp uge i64 %t127, %t129 - br i1 %t130, label %range3343, label %inrange3344 -range3343: + br i1 %t130, label %range3347, label %inrange3348 +range3347: call void @finch_panic_index(ptr @.str.2114, i64 1406, i64 %t127, i64 %t129) unreachable -inrange3344: +inrange3348: %t131 = extractvalue { ptr, i64, i64 } %t128, 0 %t132 = getelementptr inbounds %S.gen.Scope, ptr %t131, i64 %t127 %t133 = getelementptr inbounds %S.gen.Scope, ptr %t132, i32 0, i32 0 @@ -37213,11 +37239,11 @@ inrange3344: %t151 = insertvalue %S.gen.Var %t149, i1 %t150, 3 %t152 = load ptr, ptr %a1 %t153 = icmp eq ptr %t152, null - br i1 %t153, label %panic3345, label %ok3346 -panic3345: + br i1 %t153, label %panic3349, label %ok3350 +panic3349: call void @finch_panic(ptr @.str.2115, i64 1406, ptr @.str.2116) unreachable -ok3346: +ok3350: %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 25 %t155 = load i64, ptr %t154 %t156 = insertvalue %S.gen.Var %t151, i64 %t155, 4 @@ -37225,22 +37251,22 @@ ok3346: %t158 = insertvalue %S.gen.Var %t156, i1 %t157, 5 %t159 = load ptr, ptr %a1 %t160 = icmp eq ptr %t159, null - br i1 %t160, label %panic3347, label %ok3348 -panic3347: + br i1 %t160, label %panic3351, label %ok3352 +panic3351: call void @finch_panic(ptr @.str.2117, i64 1406, ptr @.str.2118) unreachable -ok3348: +ok3352: %t161 = getelementptr inbounds %S.gen.Gen, ptr %t159, i32 0, i32 1 %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t163 = load i64, ptr %t162 %t164 = load { ptr, i64, i64 }, ptr %t161 %t165 = extractvalue { ptr, i64, i64 } %t164, 1 %t166 = icmp uge i64 %t163, %t165 - br i1 %t166, label %range3349, label %inrange3350 -range3349: + br i1 %t166, label %range3353, label %inrange3354 +range3353: call void @finch_panic_index(ptr @.str.2119, i64 1406, i64 %t163, i64 %t165) unreachable -inrange3350: +inrange3354: %t167 = extractvalue { ptr, i64, i64 } %t164, 0 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i64 %t163 %t169 = load { ptr, i64, i64 }, ptr %t168 @@ -37263,11 +37289,11 @@ inrange3350: store i64 %t181, ptr %t134 %t184 = load ptr, ptr %a1 %t185 = icmp eq ptr %t184, null - br i1 %t185, label %panic3351, label %ok3352 -panic3351: + br i1 %t185, label %panic3355, label %ok3356 +panic3355: call void @finch_panic(ptr @.str.2120, i64 1407, ptr @.str.2121) unreachable -ok3352: +ok3356: %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 25 %t187 = load i64, ptr %t186 %t188 = add i64 %t187, 1 @@ -37280,91 +37306,91 @@ ok3352: call void @finch.gen.dbgVariable(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t191, %S.ast.Type %t192, { ptr, i64, i64 } %t193) %t194 = load ptr, ptr %a1 %t195 = icmp eq ptr %t194, null - br i1 %t195, label %panic3353, label %ok3354 -panic3353: + br i1 %t195, label %panic3357, label %ok3358 +panic3357: call void @finch_panic(ptr @.str.2122, i64 1409, ptr @.str.2123) unreachable -ok3354: +ok3358: %t196 = getelementptr inbounds %S.gen.Gen, ptr %t194, i32 0, i32 28 %t197 = load i1, ptr %t196 - br label %logic.from3355 -logic.from3355: - br i1 %t197, label %logic.rhs3356, label %logic.end3357 -logic.rhs3356: + br label %logic.from3359 +logic.from3359: + br i1 %t197, label %logic.rhs3360, label %logic.end3361 +logic.rhs3360: %t198 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t198, ptr %a199 store { ptr, i64, i64 } { ptr @.str.2124, i64 3, i64 0 }, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp eq i32 %t201, 0 - br label %logic.rend3358 -logic.rend3358: - br label %logic.end3357 -logic.end3357: - %t203 = phi i1 [ false, %logic.from3355 ], [ %t202, %logic.rend3358 ] - br label %logic.from3359 -logic.from3359: - br i1 %t203, label %logic.rhs3360, label %logic.end3361 -logic.rhs3360: + br label %logic.rend3362 +logic.rend3362: + br label %logic.end3361 +logic.end3361: + %t203 = phi i1 [ false, %logic.from3359 ], [ %t202, %logic.rend3362 ] + br label %logic.from3363 +logic.from3363: + br i1 %t203, label %logic.rhs3364, label %logic.end3365 +logic.rhs3364: %t204 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t204, ptr %a205 store { ptr, i64, i64 } { ptr @.str.2126, i64 1, i64 0 }, ptr %a207 %t208 = call i32 @finch_str_starts(ptr %a205, ptr %a207) %t209 = icmp ne i32 %t208, 0 %t210 = xor i1 %t209, true - br label %logic.rend3362 -logic.rend3362: - br label %logic.end3361 -logic.end3361: - %t211 = phi i1 [ false, %logic.from3359 ], [ %t210, %logic.rend3362 ] - br i1 %t211, label %then3363, label %endif3365 -then3363: + br label %logic.rend3366 +logic.rend3366: + br label %logic.end3365 +logic.end3365: + %t211 = phi i1 [ false, %logic.from3363 ], [ %t210, %logic.rend3366 ] + br i1 %t211, label %then3367, label %endif3369 +then3367: %t212 = load ptr, ptr %a1 %t213 = icmp eq ptr %t212, null - br i1 %t213, label %panic3366, label %ok3367 -panic3366: + br i1 %t213, label %panic3370, label %ok3371 +panic3370: call void @finch_panic(ptr @.str.2127, i64 1410, ptr @.str.2128) unreachable -ok3367: +ok3371: %t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 0 %t215 = load ptr, ptr %a1 %t216 = icmp eq ptr %t215, null - br i1 %t216, label %panic3368, label %ok3369 -panic3368: + br i1 %t216, label %panic3372, label %ok3373 +panic3372: call void @finch_panic(ptr @.str.2129, i64 1410, ptr @.str.2130) unreachable -ok3369: +ok3373: %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 13 %t218 = getelementptr inbounds %S.gen.FnSig, ptr %t217, i32 0, i32 16 %t219 = load i64, ptr %t218 %t220 = load { ptr, i64, i64 }, ptr %t214 %t221 = extractvalue { ptr, i64, i64 } %t220, 1 %t222 = icmp uge i64 %t219, %t221 - br i1 %t222, label %range3370, label %inrange3371 -range3370: + br i1 %t222, label %range3374, label %inrange3375 +range3374: call void @finch_panic_index(ptr @.str.2131, i64 1410, i64 %t219, i64 %t221) unreachable -inrange3371: +inrange3375: %t223 = extractvalue { ptr, i64, i64 } %t220, 0 %t224 = getelementptr inbounds %S.ast.Program, ptr %t223, i64 %t219 %t225 = getelementptr inbounds %S.ast.Program, ptr %t224, i32 0, i32 8 %t226 = load ptr, ptr %a1 %t227 = icmp eq ptr %t226, null - br i1 %t227, label %panic3372, label %ok3373 -panic3372: + br i1 %t227, label %panic3376, label %ok3377 +panic3376: call void @finch_panic(ptr @.str.2132, i64 1410, ptr @.str.2133) unreachable -ok3373: +ok3377: %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 13 %t229 = getelementptr inbounds %S.gen.FnSig, ptr %t228, i32 0, i32 17 %t230 = load i64, ptr %t229 %t231 = load { ptr, i64, i64 }, ptr %t225 %t232 = extractvalue { ptr, i64, i64 } %t231, 1 %t233 = icmp uge i64 %t230, %t232 - br i1 %t233, label %range3374, label %inrange3375 -range3374: + br i1 %t233, label %range3378, label %inrange3379 +range3378: call void @finch_panic_index(ptr @.str.2134, i64 1410, i64 %t230, i64 %t232) unreachable -inrange3375: +inrange3379: %t234 = extractvalue { ptr, i64, i64 } %t231, 0 %t235 = getelementptr inbounds %S.ast.Node, ptr %t234, i64 %t230 %t236 = load %S.ast.Node, ptr %t235 @@ -37374,11 +37400,11 @@ inrange3375: store %S.ast.Node %t239, ptr %a240 %t241 = load ptr, ptr %a1 %t242 = icmp eq ptr %t241, null - br i1 %t242, label %panic3376, label %ok3377 -panic3376: + br i1 %t242, label %panic3380, label %ok3381 +panic3380: call void @finch_panic(ptr @.str.2135, i64 1411, ptr @.str.2136) unreachable -ok3377: +ok3381: %t243 = getelementptr inbounds %S.gen.Gen, ptr %t241, i32 0, i32 29 %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 %t245 = load { ptr, i64, i64 }, ptr %a3 @@ -37410,22 +37436,22 @@ ok3377: %t267 = load { ptr, i64, i64 }, ptr %a263 %t268 = load ptr, ptr %a1 %t269 = icmp eq ptr %t268, null - br i1 %t269, label %panic3378, label %ok3379 -panic3378: + br i1 %t269, label %panic3382, label %ok3383 +panic3382: call void @finch_panic(ptr @.str.2140, i64 1411, ptr @.str.2141) unreachable -ok3379: +ok3383: %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 1 %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t272 = load i64, ptr %t271 %t273 = load { ptr, i64, i64 }, ptr %t270 %t274 = extractvalue { ptr, i64, i64 } %t273, 1 %t275 = icmp uge i64 %t272, %t274 - br i1 %t275, label %range3380, label %inrange3381 -range3380: + br i1 %t275, label %range3384, label %inrange3385 +range3384: call void @finch_panic_index(ptr @.str.2142, i64 1411, i64 %t272, i64 %t274) unreachable -inrange3381: +inrange3385: %t276 = extractvalue { ptr, i64, i64 } %t273, 0 %t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t276, i64 %t272 %t278 = load { ptr, i64, i64 }, ptr %t277 @@ -37479,22 +37505,22 @@ inrange3381: %t318 = load { ptr, i64, i64 }, ptr %a314 %t319 = load ptr, ptr %a1 %t320 = icmp eq ptr %t319, null - br i1 %t320, label %panic3382, label %ok3383 -panic3382: + br i1 %t320, label %panic3386, label %ok3387 +panic3386: call void @finch_panic(ptr @.str.2146, i64 1411, ptr @.str.2147) unreachable -ok3383: +ok3387: %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 1 %t322 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 13 %t323 = load i64, ptr %t322 %t324 = load { ptr, i64, i64 }, ptr %t321 %t325 = extractvalue { ptr, i64, i64 } %t324, 1 %t326 = icmp uge i64 %t323, %t325 - br i1 %t326, label %range3384, label %inrange3385 -range3384: + br i1 %t326, label %range3388, label %inrange3389 +range3388: call void @finch_panic_index(ptr @.str.2148, i64 1411, i64 %t323, i64 %t325) unreachable -inrange3385: +inrange3389: %t327 = extractvalue { ptr, i64, i64 } %t324, 0 %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i64 %t323 %t329 = load { ptr, i64, i64 }, ptr %t328 @@ -37584,8 +37610,8 @@ inrange3385: store { ptr, i64, i64 } %t397, ptr %a398 call void @finch_str_drop(ptr %a398) call void @finch.drop.S_ast_Node(ptr %a240) - br label %endif3365 -endif3365: + br label %endif3369 +endif3369: %t399 = load { ptr, i64, i64 }, ptr %a73 ret { ptr, i64, i64 } %t399 } @@ -37596,11 +37622,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic3386, label %ok3387 -panic3386: + br i1 %t3, label %panic3390, label %ok3391 +panic3390: call void @finch_panic(ptr @.str.2155, i64 1418, ptr @.str.2156) unreachable -ok3387: +ok3391: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 10 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 @@ -37634,19 +37660,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond3399 -n.cond3399: + br label %n.cond3403 +n.cond3403: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body3400, label %n.end3401 -n.body3400: + br i1 %t6, label %n.body3404, label %n.end3405 +n.body3404: %t7 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Var(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond3399 -n.end3401: + br label %n.cond3403 +n.end3405: call void @finch_arr_free(ptr %a) ret void } @@ -37679,47 +37705,47 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic3388, label %ok3389 -panic3388: + br i1 %t3, label %panic3392, label %ok3393 +panic3392: call void @finch_panic(ptr @.str.2157, i64 1424, ptr @.str.2158) unreachable -ok3389: +ok3393: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 9 %t5 = load i1, ptr %t4 %t6 = xor i1 %t5, true - br i1 %t6, label %then3390, label %endif3392 -then3390: + br i1 %t6, label %then3394, label %endif3396 +then3394: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic3393, label %ok3394 -panic3393: + br i1 %t9, label %panic3397, label %ok3398 +panic3397: call void @finch_panic(ptr @.str.2159, i64 1425, ptr @.str.2160) unreachable -ok3394: +ok3398: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = sub i64 %t12, 1 call void @finch.gen.runCleanups(ptr %t7, i64 %t13) - br label %endif3392 -endif3392: + br label %endif3396 +endif3396: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic3395, label %ok3396 -panic3395: + br i1 %t15, label %panic3399, label %ok3400 +panic3399: call void @finch_panic(ptr @.str.2161, i64 1427, ptr @.str.2162) unreachable -ok3396: +ok3400: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 10 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = icmp eq i64 %t18, 0 - br i1 %t19, label %panic3397, label %ok3398 -panic3397: + br i1 %t19, label %panic3401, label %ok3402 +panic3401: call void @finch_panic(ptr @.str.2163, i64 1427, ptr @.str.2164) unreachable -ok3398: +ok3402: %t20 = sub i64 %t18, 1 %t21 = load ptr, ptr %t16 %t22 = getelementptr inbounds %S.gen.Scope, ptr %t21, i64 %t20 @@ -37745,53 +37771,53 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic3402, label %ok3403 -panic3402: + br i1 %t4, label %panic3406, label %ok3407 +panic3406: call void @finch_panic(ptr @.str.2165, i64 1432, ptr @.str.2166) unreachable -ok3403: +ok3407: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 - br i1 %t9, label %range3404, label %inrange3405 -range3404: + br i1 %t9, label %range3408, label %inrange3409 +range3408: call void @finch_panic_index(ptr @.str.2167, i64 1432, i64 %t6, i64 %t8) unreachable -inrange3405: +inrange3409: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.Scope, ptr %t10, i64 %t6 %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i32 0, i32 3 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 store i64 %t14, ptr %a15 - br label %while.cond3406 -while.cond3406: + br label %while.cond3410 +while.cond3410: %t16 = load i64, ptr %a15 %t17 = icmp sgt i64 %t16, 0 - br i1 %t17, label %while.body3407, label %while.end3408 -while.body3407: + br i1 %t17, label %while.body3411, label %while.end3412 +while.body3411: %t18 = load i64, ptr %a15 %t19 = sub i64 %t18, 1 store i64 %t19, ptr %a15 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic3409, label %ok3410 -panic3409: + br i1 %t21, label %panic3413, label %ok3414 +panic3413: call void @finch_panic(ptr @.str.2168, i64 1435, ptr @.str.2169) unreachable -ok3410: +ok3414: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 %t23 = load i64, ptr %a2 %t24 = load { ptr, i64, i64 }, ptr %t22 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 - br i1 %t26, label %range3411, label %inrange3412 -range3411: + br i1 %t26, label %range3415, label %inrange3416 +range3415: call void @finch_panic_index(ptr @.str.2170, i64 1435, i64 %t23, i64 %t25) unreachable -inrange3412: +inrange3416: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 3 @@ -37799,11 +37825,11 @@ inrange3412: %t31 = load { ptr, i64, i64 }, ptr %t29 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 %t30, %t32 - br i1 %t33, label %range3413, label %inrange3414 -range3413: + br i1 %t33, label %range3417, label %inrange3418 +range3417: call void @finch_panic_index(ptr @.str.2171, i64 1435, i64 %t30, i64 %t32) unreachable -inrange3414: +inrange3418: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.gen.Cleanup, ptr %t34, i64 %t30 %t36 = load %S.gen.Cleanup, ptr %t35 @@ -37811,25 +37837,25 @@ inrange3414: %t38 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 0 %t39 = load i1, ptr %t38 %t40 = xor i1 %t39, true - br i1 %t40, label %then3415, label %endif3417 -then3415: + br i1 %t40, label %then3419, label %endif3421 +then3419: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic3418, label %ok3419 -panic3418: + br i1 %t42, label %panic3422, label %ok3423 +panic3422: call void @finch_panic(ptr @.str.2172, i64 1437, ptr @.str.2173) unreachable -ok3419: +ok3423: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 10 %t44 = load i64, ptr %a2 %t45 = load { ptr, i64, i64 }, ptr %t43 %t46 = extractvalue { ptr, i64, i64 } %t45, 1 %t47 = icmp uge i64 %t44, %t46 - br i1 %t47, label %range3420, label %inrange3421 -range3420: + br i1 %t47, label %range3424, label %inrange3425 +range3424: call void @finch_panic_index(ptr @.str.2174, i64 1437, i64 %t44, i64 %t46) unreachable -inrange3421: +inrange3425: %t48 = extractvalue { ptr, i64, i64 } %t45, 0 %t49 = getelementptr inbounds %S.gen.Scope, ptr %t48, i64 %t44 %t50 = getelementptr inbounds %S.gen.Scope, ptr %t49, i32 0, i32 0 @@ -37838,11 +37864,11 @@ inrange3421: %t53 = load { ptr, i64, i64 }, ptr %t50 %t54 = extractvalue { ptr, i64, i64 } %t53, 1 %t55 = icmp uge i64 %t52, %t54 - br i1 %t55, label %range3422, label %inrange3423 -range3422: + br i1 %t55, label %range3426, label %inrange3427 +range3426: call void @finch_panic_index(ptr @.str.2175, i64 1437, i64 %t52, i64 %t54) unreachable -inrange3423: +inrange3427: %t56 = extractvalue { ptr, i64, i64 } %t53, 0 %t57 = getelementptr inbounds %S.gen.Var, ptr %t56, i64 %t52 %t58 = load %S.gen.Var, ptr %t57 @@ -37853,65 +37879,65 @@ inrange3423: %t63 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 6 %t64 = load i1, ptr %t63 %t65 = xor i1 %t64, true - br i1 %t65, label %then3424, label %endif3426 -then3424: + br i1 %t65, label %then3428, label %endif3430 +then3428: %t66 = load ptr, ptr %a1 %t67 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 2 %t68 = load { ptr, i64, i64 }, ptr %t67 %t69 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 1 %t70 = load %S.ast.Type, ptr %t69 call void @finch.gen.dropAt(ptr %t66, { ptr, i64, i64 } %t68, %S.ast.Type %t70) - br label %endif3426 -endif3426: + br label %endif3430 +endif3430: call void @finch.drop.S_gen_Var(ptr %a62) - br label %while.cond3406 -endif3417: + br label %while.cond3410 +endif3421: %t71 = load ptr, ptr %a1 %t72 = icmp eq ptr %t71, null - br i1 %t72, label %panic3427, label %ok3428 -panic3427: + br i1 %t72, label %panic3431, label %ok3432 +panic3431: call void @finch_panic(ptr @.str.2176, i64 1443, ptr @.str.2177) unreachable -ok3428: +ok3432: %t73 = getelementptr inbounds %S.gen.Gen, ptr %t71, i32 0, i32 44 %t74 = load i1, ptr %t73 store i1 %t74, ptr %a75 %t76 = load ptr, ptr %a1 %t77 = icmp eq ptr %t76, null - br i1 %t77, label %panic3429, label %ok3430 -panic3429: + br i1 %t77, label %panic3433, label %ok3434 +panic3433: call void @finch_panic(ptr @.str.2178, i64 1444, ptr @.str.2179) unreachable -ok3430: +ok3434: %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 45 %t79 = load i64, ptr %t78 store i64 %t79, ptr %a80 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic3431, label %ok3432 -panic3431: + br i1 %t82, label %panic3435, label %ok3436 +panic3435: call void @finch_panic(ptr @.str.2180, i64 1445, ptr @.str.2181) unreachable -ok3432: +ok3436: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 44 store i1 true, ptr %t83 %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null - br i1 %t85, label %panic3433, label %ok3434 -panic3433: + br i1 %t85, label %panic3437, label %ok3438 +panic3437: call void @finch_panic(ptr @.str.2182, i64 1446, ptr @.str.2183) unreachable -ok3434: +ok3438: %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 10 %t87 = load i64, ptr %a2 %t88 = load { ptr, i64, i64 }, ptr %t86 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 %t87, %t89 - br i1 %t90, label %range3435, label %inrange3436 -range3435: + br i1 %t90, label %range3439, label %inrange3440 +range3439: call void @finch_panic_index(ptr @.str.2184, i64 1446, i64 %t87, i64 %t89) unreachable -inrange3436: +inrange3440: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds %S.gen.Scope, ptr %t91, i64 %t87 %t93 = getelementptr inbounds %S.gen.Scope, ptr %t92, i32 0, i32 2 @@ -37920,30 +37946,30 @@ inrange3436: %t96 = load { ptr, i64, i64 }, ptr %t93 %t97 = extractvalue { ptr, i64, i64 } %t96, 1 %t98 = icmp uge i64 %t95, %t97 - br i1 %t98, label %range3437, label %inrange3438 -range3437: + br i1 %t98, label %range3441, label %inrange3442 +range3441: call void @finch_panic_index(ptr @.str.2185, i64 1446, i64 %t95, i64 %t97) unreachable -inrange3438: +inrange3442: %t99 = extractvalue { ptr, i64, i64 } %t96, 0 %t100 = getelementptr inbounds i64, ptr %t99, i64 %t95 %t101 = load i64, ptr %t100 %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null - br i1 %t103, label %panic3439, label %ok3440 -panic3439: + br i1 %t103, label %panic3443, label %ok3444 +panic3443: call void @finch_panic(ptr @.str.2186, i64 1446, ptr @.str.2187) unreachable -ok3440: +ok3444: %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 45 store i64 %t101, ptr %t104 %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null - br i1 %t106, label %panic3441, label %ok3442 -panic3441: + br i1 %t106, label %panic3445, label %ok3446 +panic3445: call void @finch_panic(ptr @.str.2188, i64 1447, ptr @.str.2189) unreachable -ok3442: +ok3446: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 46 %t108 = load i64, ptr %t107 %t109 = add i64 %t108, 1 @@ -37953,21 +37979,21 @@ ok3442: %t111 = load ptr, ptr %a1 %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null - br i1 %t113, label %panic3443, label %ok3444 -panic3443: + br i1 %t113, label %panic3447, label %ok3448 +panic3447: call void @finch_panic(ptr @.str.2190, i64 1449, ptr @.str.2191) unreachable -ok3444: +ok3448: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 10 %t115 = load i64, ptr %a2 %t116 = load { ptr, i64, i64 }, ptr %t114 %t117 = extractvalue { ptr, i64, i64 } %t116, 1 %t118 = icmp uge i64 %t115, %t117 - br i1 %t118, label %range3445, label %inrange3446 -range3445: + br i1 %t118, label %range3449, label %inrange3450 +range3449: call void @finch_panic_index(ptr @.str.2192, i64 1449, i64 %t115, i64 %t117) unreachable -inrange3446: +inrange3450: %t119 = extractvalue { ptr, i64, i64 } %t116, 0 %t120 = getelementptr inbounds %S.gen.Scope, ptr %t119, i64 %t115 %t121 = getelementptr inbounds %S.gen.Scope, ptr %t120, i32 0, i32 1 @@ -37976,11 +38002,11 @@ inrange3446: %t124 = load { ptr, i64, i64 }, ptr %t121 %t125 = extractvalue { ptr, i64, i64 } %t124, 1 %t126 = icmp uge i64 %t123, %t125 - br i1 %t126, label %range3447, label %inrange3448 -range3447: + br i1 %t126, label %range3451, label %inrange3452 +range3451: call void @finch_panic_index(ptr @.str.2193, i64 1449, i64 %t123, i64 %t125) unreachable -inrange3448: +inrange3452: %t127 = extractvalue { ptr, i64, i64 } %t124, 0 %t128 = getelementptr inbounds %S.ast.Node, ptr %t127, i64 %t123 %t129 = load %S.ast.Node, ptr %t128 @@ -37989,11 +38015,11 @@ inrange3448: call void @finch.gen.popScope(ptr %t130) %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null - br i1 %t132, label %panic3449, label %ok3450 -panic3449: + br i1 %t132, label %panic3453, label %ok3454 +panic3453: call void @finch_panic(ptr @.str.2194, i64 1451, ptr @.str.2195) unreachable -ok3450: +ok3454: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 46 %t134 = load i64, ptr %t133 %t135 = sub i64 %t134, 1 @@ -38001,25 +38027,25 @@ ok3450: %t136 = load i1, ptr %a75 %t137 = load ptr, ptr %a1 %t138 = icmp eq ptr %t137, null - br i1 %t138, label %panic3451, label %ok3452 -panic3451: + br i1 %t138, label %panic3455, label %ok3456 +panic3455: call void @finch_panic(ptr @.str.2196, i64 1452, ptr @.str.2197) unreachable -ok3452: +ok3456: %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 44 store i1 %t136, ptr %t139 %t140 = load i64, ptr %a80 %t141 = load ptr, ptr %a1 %t142 = icmp eq ptr %t141, null - br i1 %t142, label %panic3453, label %ok3454 -panic3453: + br i1 %t142, label %panic3457, label %ok3458 +panic3457: call void @finch_panic(ptr @.str.2198, i64 1453, ptr @.str.2199) unreachable -ok3454: +ok3458: %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 45 store i64 %t140, ptr %t143 - br label %while.cond3406 -while.end3408: + br label %while.cond3410 +while.end3412: ret void } @@ -38032,30 +38058,30 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic3455, label %ok3456 -panic3455: + br i1 %t4, label %panic3459, label %ok3460 +panic3459: call void @finch_panic(ptr @.str.2200, i64 1459, ptr @.str.2201) unreachable -ok3456: +ok3460: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 %t7, ptr %a8 - br label %while.cond3457 -while.cond3457: + br label %while.cond3461 +while.cond3461: %t9 = load i64, ptr %a8 %t10 = load i64, ptr %a2 %t11 = icmp sgt i64 %t9, %t10 - br i1 %t11, label %while.body3458, label %while.end3459 -while.body3458: + br i1 %t11, label %while.body3462, label %while.end3463 +while.body3462: %t12 = load i64, ptr %a8 %t13 = sub i64 %t12, 1 store i64 %t13, ptr %a8 %t14 = load ptr, ptr %a1 %t15 = load i64, ptr %a8 call void @finch.gen.runCleanups(ptr %t14, i64 %t15) - br label %while.cond3457 -while.end3459: + br label %while.cond3461 +while.end3463: ret void } @@ -38086,53 +38112,53 @@ entry: store { ptr, i64, i64 } { ptr @.str.2202, i64 3, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then3460, label %endif3462 -then3460: + br i1 %t7, label %then3464, label %endif3466 +then3464: %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 ret { ptr, i64, i64 } %t12 -endif3462: +endif3466: %t13 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2203, i64 6, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.from3463 -logic.from3463: - br i1 %t18, label %logic.end3465, label %logic.rhs3464 -logic.rhs3464: + br label %logic.from3467 +logic.from3467: + br i1 %t18, label %logic.end3469, label %logic.rhs3468 +logic.rhs3468: %t19 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2204, i64 5, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 - br label %logic.rend3466 -logic.rend3466: - br label %logic.end3465 -logic.end3465: - %t25 = phi i1 [ true, %logic.from3463 ], [ %t24, %logic.rend3466 ] - br i1 %t25, label %then3467, label %endif3469 -then3467: + br label %logic.rend3470 +logic.rend3470: + br label %logic.end3469 +logic.end3469: + %t25 = phi i1 [ true, %logic.from3467 ], [ %t24, %logic.rend3470 ] + br i1 %t25, label %then3471, label %endif3473 +then3471: %t26 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 %t27 = load { ptr, i64, i64 }, ptr %t26 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 0, %t28 - br i1 %t29, label %range3470, label %inrange3471 -range3470: + br i1 %t29, label %range3474, label %inrange3475 +range3474: call void @finch_panic_index(ptr @.str.2205, i64 1477, i64 0, i64 %t28) unreachable -inrange3471: +inrange3475: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.ast.Node, ptr %t30, i64 0 %t32 = load %S.ast.Node, ptr %t31 %t33 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t32) ret { ptr, i64, i64 } %t33 -endif3469: +endif3473: ret { ptr, i64, i64 } { ptr @.str.2206, i64 0, i64 0 } } @@ -38200,19 +38226,19 @@ entry: store { ptr, i64, i64 } { ptr @.str.2215, i64 6, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.from3472 -logic.from3472: - br i1 %t23, label %logic.rhs3473, label %logic.end3474 -logic.rhs3473: + br label %logic.from3476 +logic.from3476: + br i1 %t23, label %logic.rhs3477, label %logic.end3478 +logic.rhs3477: %t24 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 0, %t26 - br i1 %t27, label %range3475, label %inrange3476 -range3475: + br i1 %t27, label %range3479, label %inrange3480 +range3479: call void @finch_panic_index(ptr @.str.2216, i64 1484, i64 0, i64 %t26) unreachable -inrange3476: +inrange3480: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 %t30 = load %S.ast.Node, ptr %t29 @@ -38224,26 +38250,26 @@ inrange3476: %t36 = icmp ne i32 %t35, 0 store { ptr, i64, i64 } %t31, ptr %a37 call void @finch_str_drop(ptr %a37) - br label %logic.rend3477 -logic.rend3477: - br label %logic.end3474 -logic.end3474: - %t38 = phi i1 [ false, %logic.from3472 ], [ %t36, %logic.rend3477 ] - br i1 %t38, label %then3478, label %endif3480 -then3478: + br label %logic.rend3481 +logic.rend3481: + br label %logic.end3478 +logic.end3478: + %t38 = phi i1 [ false, %logic.from3476 ], [ %t36, %logic.rend3481 ] + br i1 %t38, label %then3482, label %endif3484 +then3482: call void @finch.drop.arr_str(ptr %a17) ret i1 true -endif3480: +endif3484: %t39 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.2217, i64 6, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br label %logic.from3481 -logic.from3481: - br i1 %t44, label %logic.rhs3482, label %logic.end3483 -logic.rhs3482: + br label %logic.from3485 +logic.from3485: + br i1 %t44, label %logic.rhs3486, label %logic.end3487 +logic.rhs3486: %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a17, i32 0, i32 1 %t46 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 @@ -38251,40 +38277,40 @@ logic.rhs3482: %t49 = load i64, ptr %t45 %t50 = load ptr, ptr %a17 store i64 0, ptr %a51 - br label %find.cond3484 -find.cond3484: + br label %find.cond3488 +find.cond3488: %t52 = load i64, ptr %a51 %t53 = icmp slt i64 %t52, %t49 - br i1 %t53, label %find.body3485, label %find.end3488 -find.body3485: + br i1 %t53, label %find.body3489, label %find.end3492 +find.body3489: %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } %t47, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 - br i1 %t59, label %find.hit3486, label %find.next3487 -find.hit3486: + br i1 %t59, label %find.hit3490, label %find.next3491 +find.hit3490: store i64 %t52, ptr %a48 - br label %find.end3488 -find.next3487: + br label %find.end3492 +find.next3491: %t60 = add i64 %t52, 1 store i64 %t60, ptr %a51 - br label %find.cond3484 -find.end3488: + br label %find.cond3488 +find.end3492: %t61 = load i64, ptr %a48 %t62 = icmp sge i64 %t61, 0 - br label %logic.from3489 -logic.from3489: - br i1 %t62, label %logic.end3491, label %logic.rhs3490 -logic.rhs3490: + br label %logic.from3493 +logic.from3493: + br i1 %t62, label %logic.end3495, label %logic.rhs3494 +logic.rhs3494: %t63 = load ptr, ptr %a1 %t64 = icmp eq ptr %t63, null - br i1 %t64, label %panic3492, label %ok3493 -panic3492: + br i1 %t64, label %panic3496, label %ok3497 +panic3496: call void @finch_panic(ptr @.str.2218, i64 1490, ptr @.str.2219) unreachable -ok3493: +ok3497: %t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 24 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 %t67 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 @@ -38293,52 +38319,52 @@ ok3493: %t70 = load i64, ptr %t66 %t71 = load ptr, ptr %t65 store i64 0, ptr %a72 - br label %find.cond3494 -find.cond3494: + br label %find.cond3498 +find.cond3498: %t73 = load i64, ptr %a72 %t74 = icmp slt i64 %t73, %t70 - br i1 %t74, label %find.body3495, label %find.end3498 -find.body3495: + br i1 %t74, label %find.body3499, label %find.end3502 +find.body3499: %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 %t73 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } %t76, ptr %a77 store { ptr, i64, i64 } %t68, ptr %a78 %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) %t80 = icmp ne i32 %t79, 0 - br i1 %t80, label %find.hit3496, label %find.next3497 -find.hit3496: + br i1 %t80, label %find.hit3500, label %find.next3501 +find.hit3500: store i64 %t73, ptr %a69 - br label %find.end3498 -find.next3497: + br label %find.end3502 +find.next3501: %t81 = add i64 %t73, 1 store i64 %t81, ptr %a72 - br label %find.cond3494 -find.end3498: + br label %find.cond3498 +find.end3502: %t82 = load i64, ptr %a69 %t83 = icmp sge i64 %t82, 0 - br label %logic.rend3499 -logic.rend3499: - br label %logic.end3491 -logic.end3491: - %t84 = phi i1 [ true, %logic.from3489 ], [ %t83, %logic.rend3499 ] - br label %logic.rend3500 -logic.rend3500: - br label %logic.end3483 -logic.end3483: - %t85 = phi i1 [ false, %logic.from3481 ], [ %t84, %logic.rend3500 ] - br label %logic.from3501 -logic.from3501: - br i1 %t85, label %logic.rhs3502, label %logic.end3503 -logic.rhs3502: + br label %logic.rend3503 +logic.rend3503: + br label %logic.end3495 +logic.end3495: + %t84 = phi i1 [ true, %logic.from3493 ], [ %t83, %logic.rend3503 ] + br label %logic.rend3504 +logic.rend3504: + br label %logic.end3487 +logic.end3487: + %t85 = phi i1 [ false, %logic.from3485 ], [ %t84, %logic.rend3504 ] + br label %logic.from3505 +logic.from3505: + br i1 %t85, label %logic.rhs3506, label %logic.end3507 +logic.rhs3506: %t86 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t87 = load { ptr, i64, i64 }, ptr %t86 %t88 = extractvalue { ptr, i64, i64 } %t87, 1 %t89 = icmp uge i64 0, %t88 - br i1 %t89, label %range3504, label %inrange3505 -range3504: + br i1 %t89, label %range3508, label %inrange3509 +range3508: call void @finch_panic_index(ptr @.str.2220, i64 1490, i64 0, i64 %t88) unreachable -inrange3505: +inrange3509: %t90 = extractvalue { ptr, i64, i64 } %t87, 0 %t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 0 %t92 = load %S.ast.Node, ptr %t91 @@ -38350,63 +38376,63 @@ inrange3505: %t98 = icmp ne i32 %t97, 0 store { ptr, i64, i64 } %t93, ptr %a99 call void @finch_str_drop(ptr %a99) - br label %logic.rend3506 -logic.rend3506: - br label %logic.end3503 -logic.end3503: - %t100 = phi i1 [ false, %logic.from3501 ], [ %t98, %logic.rend3506 ] - br i1 %t100, label %then3507, label %endif3509 -then3507: + br label %logic.rend3510 +logic.rend3510: + br label %logic.end3507 +logic.end3507: + %t100 = phi i1 [ false, %logic.from3505 ], [ %t98, %logic.rend3510 ] + br i1 %t100, label %then3511, label %endif3513 +then3511: call void @finch.drop.arr_str(ptr %a17) ret i1 true -endif3509: +endif3513: %t101 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.2221, i64 4, i64 0 }, ptr %a104 %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) %t106 = icmp ne i32 %t105, 0 - br label %logic.from3510 -logic.from3510: - br i1 %t106, label %logic.rhs3511, label %logic.end3512 -logic.rhs3511: + br label %logic.from3514 +logic.from3514: + br i1 %t106, label %logic.rhs3515, label %logic.end3516 +logic.rhs3515: %t107 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t108 = load { ptr, i64, i64 }, ptr %t107 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2222, i64 4, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 - br label %logic.rend3513 -logic.rend3513: - br label %logic.end3512 -logic.end3512: - %t113 = phi i1 [ false, %logic.from3510 ], [ %t112, %logic.rend3513 ] - br label %logic.from3514 -logic.from3514: - br i1 %t113, label %logic.rhs3515, label %logic.end3516 -logic.rhs3515: - %t114 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 - %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 - %t116 = load i64, ptr %t115 - %t117 = icmp eq i64 %t116, 1 br label %logic.rend3517 logic.rend3517: br label %logic.end3516 logic.end3516: - %t118 = phi i1 [ false, %logic.from3514 ], [ %t117, %logic.rend3517 ] + %t113 = phi i1 [ false, %logic.from3514 ], [ %t112, %logic.rend3517 ] br label %logic.from3518 logic.from3518: - br i1 %t118, label %logic.rhs3519, label %logic.end3520 + br i1 %t113, label %logic.rhs3519, label %logic.end3520 logic.rhs3519: + %t114 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp eq i64 %t116, 1 + br label %logic.rend3521 +logic.rend3521: + br label %logic.end3520 +logic.end3520: + %t118 = phi i1 [ false, %logic.from3518 ], [ %t117, %logic.rend3521 ] + br label %logic.from3522 +logic.from3522: + br i1 %t118, label %logic.rhs3523, label %logic.end3524 +logic.rhs3523: %t119 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t120 = load { ptr, i64, i64 }, ptr %t119 %t121 = extractvalue { ptr, i64, i64 } %t120, 1 %t122 = icmp uge i64 0, %t121 - br i1 %t122, label %range3521, label %inrange3522 -range3521: + br i1 %t122, label %range3525, label %inrange3526 +range3525: call void @finch_panic_index(ptr @.str.2223, i64 1493, i64 0, i64 %t121) unreachable -inrange3522: +inrange3526: %t123 = extractvalue { ptr, i64, i64 } %t120, 0 %t124 = getelementptr inbounds %S.ast.Node, ptr %t123, i64 0 %t125 = load %S.ast.Node, ptr %t124 @@ -38418,26 +38444,26 @@ inrange3522: %t131 = icmp ne i32 %t130, 0 store { ptr, i64, i64 } %t126, ptr %a132 call void @finch_str_drop(ptr %a132) - br label %logic.rend3523 -logic.rend3523: - br label %logic.end3520 -logic.end3520: - %t133 = phi i1 [ false, %logic.from3518 ], [ %t131, %logic.rend3523 ] - br i1 %t133, label %then3524, label %endif3526 -then3524: + br label %logic.rend3527 +logic.rend3527: + br label %logic.end3524 +logic.end3524: + %t133 = phi i1 [ false, %logic.from3522 ], [ %t131, %logic.rend3527 ] + br i1 %t133, label %then3528, label %endif3530 +then3528: call void @finch.drop.arr_str(ptr %a17) ret i1 true -endif3526: +endif3530: %t134 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 store i64 0, ptr %a135 - br label %each.cond3527 -each.cond3527: + br label %each.cond3531 +each.cond3531: %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 %t137 = load i64, ptr %t136 %t138 = load i64, ptr %a135 %t139 = icmp slt i64 %t138, %t137 - br i1 %t139, label %each.body3528, label %each.end3530 -each.body3528: + br i1 %t139, label %each.body3532, label %each.end3534 +each.body3532: %t140 = load ptr, ptr %t134 %t141 = getelementptr inbounds %S.ast.Node, ptr %t140, i64 %t138 %t142 = load %S.ast.Node, ptr %t141 @@ -38446,18 +38472,18 @@ each.body3528: %t145 = load { ptr, i64, i64 }, ptr %a2 %t146 = load %S.ast.Node, ptr %a143 %t147 = call i1 @finch.gen.mutates(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Node %t146) - br i1 %t147, label %then3531, label %endif3533 -then3531: + br i1 %t147, label %then3535, label %endif3537 +then3535: call void @finch.drop.arr_str(ptr %a17) ret i1 true -endif3533: - br label %each.step3529 -each.step3529: +endif3537: + br label %each.step3533 +each.step3533: %t148 = load i64, ptr %a135 %t149 = add i64 %t148, 1 store i64 %t149, ptr %a135 - br label %each.cond3527 -each.end3530: + br label %each.cond3531 +each.end3534: call void @finch.drop.arr_str(ptr %a17) ret i1 false } @@ -38807,49 +38833,49 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic3534, label %ok3535 -panic3534: + br i1 %t3, label %panic3538, label %ok3539 +panic3538: call void @finch_panic(ptr @.str.2224, i64 1507, ptr @.str.2225) unreachable -ok3535: +ok3539: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 store i64 0, ptr %a7 - br label %for.cond3536 -for.cond3536: + br label %for.cond3540 +for.cond3540: %t8 = load i64, ptr %a7 %t9 = icmp slt i64 %t8, %t6 - br i1 %t9, label %for.body3537, label %for.end3539 -for.body3537: + br i1 %t9, label %for.body3541, label %for.end3543 +for.body3541: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic3540, label %ok3541 -panic3540: + br i1 %t11, label %panic3544, label %ok3545 +panic3544: call void @finch_panic(ptr @.str.2226, i64 1508, ptr @.str.2227) unreachable -ok3541: +ok3545: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 0 %t13 = load i64, ptr %a7 %t14 = load { ptr, i64, i64 }, ptr %t12 %t15 = extractvalue { ptr, i64, i64 } %t14, 1 %t16 = icmp uge i64 %t13, %t15 - br i1 %t16, label %range3542, label %inrange3543 -range3542: + br i1 %t16, label %range3546, label %inrange3547 +range3546: call void @finch_panic_index(ptr @.str.2228, i64 1508, i64 %t13, i64 %t15) unreachable -inrange3543: +inrange3547: %t17 = extractvalue { ptr, i64, i64 } %t14, 0 %t18 = getelementptr inbounds %S.ast.Program, ptr %t17, i64 %t13 %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null - br i1 %t22, label %panic3544, label %ok3545 -panic3544: + br i1 %t22, label %panic3548, label %ok3549 +panic3548: call void @finch_panic(ptr @.str.2229, i64 1508, ptr @.str.2230) unreachable -ok3545: +ok3549: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 14 store { ptr, i64, i64 } %t20, ptr %a24 call void @finch_str_copy(ptr %a25, ptr %a24) @@ -38860,50 +38886,50 @@ ok3545: call void @finch_str_drop(ptr %a28) %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic3546, label %ok3547 -panic3546: + br i1 %t30, label %panic3550, label %ok3551 +panic3550: call void @finch_panic(ptr @.str.2231, i64 1509, ptr @.str.2232) unreachable -ok3547: +ok3551: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 0 %t32 = load i64, ptr %a7 %t33 = load { ptr, i64, i64 }, ptr %t31 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range3548, label %inrange3549 -range3548: + br i1 %t35, label %range3552, label %inrange3553 +range3552: call void @finch_panic_index(ptr @.str.2233, i64 1509, i64 %t32, i64 %t34) unreachable -inrange3549: +inrange3553: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Program, ptr %t36, i64 %t32 %t38 = getelementptr inbounds %S.ast.Program, ptr %t37, i32 0, i32 6 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i32 0, i32 1 %t40 = load i64, ptr %t39 store i64 0, ptr %a41 - br label %for.cond3550 -for.cond3550: + br label %for.cond3554 +for.cond3554: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t40 - br i1 %t43, label %for.body3551, label %for.end3553 -for.body3551: + br i1 %t43, label %for.body3555, label %for.end3557 +for.body3555: %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic3554, label %ok3555 -panic3554: + br i1 %t45, label %panic3558, label %ok3559 +panic3558: call void @finch_panic(ptr @.str.2234, i64 1510, ptr @.str.2235) unreachable -ok3555: +ok3559: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 0 %t47 = load i64, ptr %a7 %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range3556, label %inrange3557 -range3556: + br i1 %t50, label %range3560, label %inrange3561 +range3560: call void @finch_panic_index(ptr @.str.2236, i64 1510, i64 %t47, i64 %t49) unreachable -inrange3557: +inrange3561: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i64 %t47 %t53 = getelementptr inbounds %S.ast.Program, ptr %t52, i32 0, i32 6 @@ -38911,11 +38937,11 @@ inrange3557: %t55 = load { ptr, i64, i64 }, ptr %t53 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range3558, label %inrange3559 -range3558: + br i1 %t57, label %range3562, label %inrange3563 +range3562: call void @finch_panic_index(ptr @.str.2237, i64 1510, i64 %t54, i64 %t56) unreachable -inrange3559: +inrange3563: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 @@ -38926,42 +38952,42 @@ inrange3559: %t65 = load ptr, ptr %a1 %t66 = load ptr, ptr %a1 %t67 = icmp eq ptr %t66, null - br i1 %t67, label %panic3560, label %ok3561 -panic3560: + br i1 %t67, label %panic3564, label %ok3565 +panic3564: call void @finch_panic(ptr @.str.2238, i64 1511, ptr @.str.2239) unreachable -ok3561: +ok3565: %t68 = getelementptr inbounds %S.gen.Gen, ptr %t66, i32 0, i32 14 %t69 = load { ptr, i64, i64 }, ptr %t68 %t70 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 %t71 = load { ptr, i64, i64 }, ptr %t70 %t72 = call i64 @finch.gen.findStruct(ptr %t65, { ptr, i64, i64 } %t69, { ptr, i64, i64 } %t71) %t73 = icmp sge i64 %t72, 0 - br label %logic.from3562 -logic.from3562: - br i1 %t73, label %logic.end3564, label %logic.rhs3563 -logic.rhs3563: + br label %logic.from3566 +logic.from3566: + br i1 %t73, label %logic.end3568, label %logic.rhs3567 +logic.rhs3567: %t74 = load ptr, ptr %a1 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic3565, label %ok3566 -panic3565: + br i1 %t76, label %panic3569, label %ok3570 +panic3569: call void @finch_panic(ptr @.str.2240, i64 1511, ptr @.str.2241) unreachable -ok3566: +ok3570: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 14 %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 %t80 = load { ptr, i64, i64 }, ptr %t79 %t81 = call i64 @finch.gen.findTemplate(ptr %t74, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t80, { ptr, i64, i64 } { ptr @.str.2242, i64 0, i64 0 }, i1 true) %t82 = icmp sge i64 %t81, 0 - br label %logic.rend3567 -logic.rend3567: - br label %logic.end3564 -logic.end3564: - %t83 = phi i1 [ true, %logic.from3562 ], [ %t82, %logic.rend3567 ] - br i1 %t83, label %then3568, label %endif3570 -then3568: + br label %logic.rend3571 +logic.rend3571: + br label %logic.end3568 +logic.end3568: + %t83 = phi i1 [ true, %logic.from3566 ], [ %t82, %logic.rend3571 ] + br i1 %t83, label %then3572, label %endif3574 +then3572: %t84 = load ptr, ptr %a1 %t85 = load %S.ast.Node, ptr %a64 %t86 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 @@ -38979,30 +39005,30 @@ then3568: call void @finch.gen.fail(ptr %t84, %S.ast.Node %t85, { ptr, i64, i64 } %t96) store { ptr, i64, i64 } %t96, ptr %a97 call void @finch_str_drop(ptr %a97) - br label %endif3570 -endif3570: + br label %endif3574 +endif3574: %t98 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 %t100 = load i64, ptr %t99 %t101 = icmp sgt i64 %t100, 0 - br i1 %t101, label %then3571, label %endif3573 -then3571: + br i1 %t101, label %then3575, label %endif3577 +then3575: %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null - br i1 %t103, label %panic3574, label %ok3575 -panic3574: + br i1 %t103, label %panic3578, label %ok3579 +panic3578: call void @finch_panic(ptr @.str.2245, i64 1516, ptr @.str.2246) unreachable -ok3575: +ok3579: %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 17 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t106 = load ptr, ptr %a1 %t107 = icmp eq ptr %t106, null - br i1 %t107, label %panic3576, label %ok3577 -panic3576: + br i1 %t107, label %panic3580, label %ok3581 +panic3580: call void @finch_panic(ptr @.str.2247, i64 1516, ptr @.str.2248) unreachable -ok3577: +ok3581: %t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 14 %t109 = load { ptr, i64, i64 }, ptr %t108 store { ptr, i64, i64 } %t109, ptr %a110 @@ -39034,24 +39060,24 @@ ok3577: store %S.gen.Template %t130, ptr %t134 store i64 %t132, ptr %t105 call void @finch.drop.S_ast_Node(ptr %a64) - br label %for.step3552 -endif3573: + br label %for.step3556 +endif3577: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null - br i1 %t136, label %panic3578, label %ok3579 -panic3578: + br i1 %t136, label %panic3582, label %ok3583 +panic3582: call void @finch_panic(ptr @.str.2249, i64 1519, ptr @.str.2250) unreachable -ok3579: +ok3583: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 16 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null - br i1 %t140, label %panic3580, label %ok3581 -panic3580: + br i1 %t140, label %panic3584, label %ok3585 +panic3584: call void @finch_panic(ptr @.str.2251, i64 1519, ptr @.str.2252) unreachable -ok3581: +ok3585: %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 14 %t142 = load { ptr, i64, i64 }, ptr %t141 store { ptr, i64, i64 } %t142, ptr %a143 @@ -39076,65 +39102,65 @@ ok3581: store %S.gen.StructDef %t156, ptr %t160 store i64 %t158, ptr %t138 call void @finch.drop.S_ast_Node(ptr %a64) - br label %for.step3552 -for.step3552: + br label %for.step3556 +for.step3556: %t161 = load i64, ptr %a41 %t162 = add i64 %t161, 1 store i64 %t162, ptr %a41 - br label %for.cond3550 -for.end3553: - br label %for.step3538 -for.step3538: + br label %for.cond3554 +for.end3557: + br label %for.step3542 +for.step3542: %t163 = load i64, ptr %a7 %t164 = add i64 %t163, 1 store i64 %t164, ptr %a7 - br label %for.cond3536 -for.end3539: + br label %for.cond3540 +for.end3543: %t165 = load ptr, ptr %a1 %t166 = icmp eq ptr %t165, null - br i1 %t166, label %panic3582, label %ok3583 -panic3582: + br i1 %t166, label %panic3586, label %ok3587 +panic3586: call void @finch_panic(ptr @.str.2253, i64 1522, ptr @.str.2254) unreachable -ok3583: +ok3587: %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 0 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t169 = load i64, ptr %t168 store i64 0, ptr %a170 - br label %for.cond3584 -for.cond3584: + br label %for.cond3588 +for.cond3588: %t171 = load i64, ptr %a170 %t172 = icmp slt i64 %t171, %t169 - br i1 %t172, label %for.body3585, label %for.end3587 -for.body3585: + br i1 %t172, label %for.body3589, label %for.end3591 +for.body3589: %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic3588, label %ok3589 -panic3588: + br i1 %t174, label %panic3592, label %ok3593 +panic3592: call void @finch_panic(ptr @.str.2255, i64 1523, ptr @.str.2256) unreachable -ok3589: +ok3593: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 0 %t176 = load i64, ptr %a170 %t177 = load { ptr, i64, i64 }, ptr %t175 %t178 = extractvalue { ptr, i64, i64 } %t177, 1 %t179 = icmp uge i64 %t176, %t178 - br i1 %t179, label %range3590, label %inrange3591 -range3590: + br i1 %t179, label %range3594, label %inrange3595 +range3594: call void @finch_panic_index(ptr @.str.2257, i64 1523, i64 %t176, i64 %t178) unreachable -inrange3591: +inrange3595: %t180 = extractvalue { ptr, i64, i64 } %t177, 0 %t181 = getelementptr inbounds %S.ast.Program, ptr %t180, i64 %t176 %t182 = getelementptr inbounds %S.ast.Program, ptr %t181, i32 0, i32 0 %t183 = load { ptr, i64, i64 }, ptr %t182 %t184 = load ptr, ptr %a1 %t185 = icmp eq ptr %t184, null - br i1 %t185, label %panic3592, label %ok3593 -panic3592: + br i1 %t185, label %panic3596, label %ok3597 +panic3596: call void @finch_panic(ptr @.str.2258, i64 1523, ptr @.str.2259) unreachable -ok3593: +ok3597: %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 14 store { ptr, i64, i64 } %t183, ptr %a187 call void @finch_str_copy(ptr %a188, ptr %a187) @@ -39145,50 +39171,50 @@ ok3593: call void @finch_str_drop(ptr %a191) %t192 = load ptr, ptr %a1 %t193 = icmp eq ptr %t192, null - br i1 %t193, label %panic3594, label %ok3595 -panic3594: + br i1 %t193, label %panic3598, label %ok3599 +panic3598: call void @finch_panic(ptr @.str.2260, i64 1524, ptr @.str.2261) unreachable -ok3595: +ok3599: %t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 0 %t195 = load i64, ptr %a170 %t196 = load { ptr, i64, i64 }, ptr %t194 %t197 = extractvalue { ptr, i64, i64 } %t196, 1 %t198 = icmp uge i64 %t195, %t197 - br i1 %t198, label %range3596, label %inrange3597 -range3596: + br i1 %t198, label %range3600, label %inrange3601 +range3600: call void @finch_panic_index(ptr @.str.2262, i64 1524, i64 %t195, i64 %t197) unreachable -inrange3597: +inrange3601: %t199 = extractvalue { ptr, i64, i64 } %t196, 0 %t200 = getelementptr inbounds %S.ast.Program, ptr %t199, i64 %t195 %t201 = getelementptr inbounds %S.ast.Program, ptr %t200, i32 0, i32 7 %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 %t203 = load i64, ptr %t202 store i64 0, ptr %a204 - br label %for.cond3598 -for.cond3598: + br label %for.cond3602 +for.cond3602: %t205 = load i64, ptr %a204 %t206 = icmp slt i64 %t205, %t203 - br i1 %t206, label %for.body3599, label %for.end3601 -for.body3599: + br i1 %t206, label %for.body3603, label %for.end3605 +for.body3603: %t207 = load ptr, ptr %a1 %t208 = icmp eq ptr %t207, null - br i1 %t208, label %panic3602, label %ok3603 -panic3602: + br i1 %t208, label %panic3606, label %ok3607 +panic3606: call void @finch_panic(ptr @.str.2263, i64 1525, ptr @.str.2264) unreachable -ok3603: +ok3607: %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 0 %t210 = load i64, ptr %a170 %t211 = load { ptr, i64, i64 }, ptr %t209 %t212 = extractvalue { ptr, i64, i64 } %t211, 1 %t213 = icmp uge i64 %t210, %t212 - br i1 %t213, label %range3604, label %inrange3605 -range3604: + br i1 %t213, label %range3608, label %inrange3609 +range3608: call void @finch_panic_index(ptr @.str.2265, i64 1525, i64 %t210, i64 %t212) unreachable -inrange3605: +inrange3609: %t214 = extractvalue { ptr, i64, i64 } %t211, 0 %t215 = getelementptr inbounds %S.ast.Program, ptr %t214, i64 %t210 %t216 = getelementptr inbounds %S.ast.Program, ptr %t215, i32 0, i32 7 @@ -39196,11 +39222,11 @@ inrange3605: %t218 = load { ptr, i64, i64 }, ptr %t216 %t219 = extractvalue { ptr, i64, i64 } %t218, 1 %t220 = icmp uge i64 %t217, %t219 - br i1 %t220, label %range3606, label %inrange3607 -range3606: + br i1 %t220, label %range3610, label %inrange3611 +range3610: call void @finch_panic_index(ptr @.str.2266, i64 1525, i64 %t217, i64 %t219) unreachable -inrange3607: +inrange3611: %t221 = extractvalue { ptr, i64, i64 } %t218, 0 %t222 = getelementptr inbounds %S.ast.Node, ptr %t221, i64 %t217 %t223 = load %S.ast.Node, ptr %t222 @@ -39210,47 +39236,47 @@ inrange3607: store %S.ast.Node %t226, ptr %a227 %t228 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 6 %t229 = load i1, ptr %t228 - br i1 %t229, label %then3608, label %endif3610 -then3608: + br i1 %t229, label %then3612, label %endif3614 +then3612: %t230 = load ptr, ptr %a1 %t231 = load ptr, ptr %a1 %t232 = icmp eq ptr %t231, null - br i1 %t232, label %panic3611, label %ok3612 -panic3611: + br i1 %t232, label %panic3615, label %ok3616 +panic3615: call void @finch_panic(ptr @.str.2267, i64 1527, ptr @.str.2268) unreachable -ok3612: +ok3616: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 14 %t234 = load { ptr, i64, i64 }, ptr %t233 %t235 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t236 = load { ptr, i64, i64 }, ptr %t235 %t237 = call i64 @finch.gen.findEnum(ptr %t230, { ptr, i64, i64 } %t234, { ptr, i64, i64 } %t236) %t238 = icmp sge i64 %t237, 0 - br label %logic.from3613 -logic.from3613: - br i1 %t238, label %logic.end3615, label %logic.rhs3614 -logic.rhs3614: + br label %logic.from3617 +logic.from3617: + br i1 %t238, label %logic.end3619, label %logic.rhs3618 +logic.rhs3618: %t239 = load ptr, ptr %a1 %t240 = load ptr, ptr %a1 %t241 = icmp eq ptr %t240, null - br i1 %t241, label %panic3616, label %ok3617 -panic3616: + br i1 %t241, label %panic3620, label %ok3621 +panic3620: call void @finch_panic(ptr @.str.2269, i64 1527, ptr @.str.2270) unreachable -ok3617: +ok3621: %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 14 %t243 = load { ptr, i64, i64 }, ptr %t242 %t244 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t245 = load { ptr, i64, i64 }, ptr %t244 %t246 = call i64 @finch.gen.findSum(ptr %t239, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t245) %t247 = icmp sge i64 %t246, 0 - br label %logic.rend3618 -logic.rend3618: - br label %logic.end3615 -logic.end3615: - %t248 = phi i1 [ true, %logic.from3613 ], [ %t247, %logic.rend3618 ] - br i1 %t248, label %then3619, label %endif3621 -then3619: + br label %logic.rend3622 +logic.rend3622: + br label %logic.end3619 +logic.end3619: + %t248 = phi i1 [ true, %logic.from3617 ], [ %t247, %logic.rend3622 ] + br i1 %t248, label %then3623, label %endif3625 +then3623: %t249 = load ptr, ptr %a1 %t250 = load %S.ast.Node, ptr %a227 %t251 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39268,15 +39294,15 @@ then3619: call void @finch.gen.fail(ptr %t249, %S.ast.Node %t250, { ptr, i64, i64 } %t261) store { ptr, i64, i64 } %t261, ptr %a262 call void @finch_str_drop(ptr %a262) - br label %endif3621 -endif3621: + br label %endif3625 +endif3625: %t263 = load ptr, ptr %a1 %t264 = icmp eq ptr %t263, null - br i1 %t264, label %panic3622, label %ok3623 -panic3622: + br i1 %t264, label %panic3626, label %ok3627 +panic3626: call void @finch_panic(ptr @.str.2273, i64 1530, ptr @.str.2274) unreachable -ok3623: +ok3627: %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 14 %t266 = load { ptr, i64, i64 }, ptr %t265 store { ptr, i64, i64 } %t266, ptr %a267 @@ -39293,14 +39319,14 @@ ok3623: store i64 1, ptr %a278 %t279 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 store i64 0, ptr %a280 - br label %each.cond3624 -each.cond3624: + br label %each.cond3628 +each.cond3628: %t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %t279, i32 0, i32 1 %t282 = load i64, ptr %t281 %t283 = load i64, ptr %a280 %t284 = icmp slt i64 %t283, %t282 - br i1 %t284, label %each.body3625, label %each.end3627 -each.body3625: + br i1 %t284, label %each.body3629, label %each.end3631 +each.body3629: %t285 = load ptr, ptr %t279 %t286 = getelementptr inbounds %S.ast.Node, ptr %t285, i64 %t283 %t287 = load %S.ast.Node, ptr %t286 @@ -39313,31 +39339,31 @@ each.body3625: %t294 = load i64, ptr %t290 %t295 = load ptr, ptr %t289 store i64 0, ptr %a296 - br label %find.cond3628 -find.cond3628: + br label %find.cond3632 +find.cond3632: %t297 = load i64, ptr %a296 %t298 = icmp slt i64 %t297, %t294 - br i1 %t298, label %find.body3629, label %find.end3632 -find.body3629: + br i1 %t298, label %find.body3633, label %find.end3636 +find.body3633: %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t295, i64 %t297 %t300 = load { ptr, i64, i64 }, ptr %t299 store { ptr, i64, i64 } %t300, ptr %a301 store { ptr, i64, i64 } %t292, ptr %a302 %t303 = call i32 @finch_str_eq(ptr %a301, ptr %a302) %t304 = icmp ne i32 %t303, 0 - br i1 %t304, label %find.hit3630, label %find.next3631 -find.hit3630: + br i1 %t304, label %find.hit3634, label %find.next3635 +find.hit3634: store i64 %t297, ptr %a293 - br label %find.end3632 -find.next3631: + br label %find.end3636 +find.next3635: %t305 = add i64 %t297, 1 store i64 %t305, ptr %a296 - br label %find.cond3628 -find.end3632: + br label %find.cond3632 +find.end3636: %t306 = load i64, ptr %a293 %t307 = icmp sge i64 %t306, 0 - br i1 %t307, label %then3633, label %endif3635 -then3633: + br i1 %t307, label %then3637, label %endif3639 +then3637: %t308 = load ptr, ptr %a1 %t309 = load %S.ast.Node, ptr %a288 %t310 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39369,8 +39395,8 @@ then3633: call void @finch.gen.fail(ptr %t308, %S.ast.Node %t309, { ptr, i64, i64 } %t332) store { ptr, i64, i64 } %t332, ptr %a333 call void @finch_str_drop(ptr %a333) - br label %endif3635 -endif3635: + br label %endif3639 +endif3639: %t334 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 %t335 = getelementptr inbounds { ptr, i64, i64 }, ptr %t334, i32 0, i32 1 %t336 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 @@ -39413,20 +39439,20 @@ endif3635: %t364 = load i64, ptr %a278 %t365 = add i64 %t364, %t363 store i64 %t365, ptr %a278 - br label %each.step3626 -each.step3626: + br label %each.step3630 +each.step3630: %t366 = load i64, ptr %a280 %t367 = add i64 %t366, 1 store i64 %t367, ptr %a280 - br label %each.cond3624 -each.end3627: + br label %each.cond3628 +each.end3631: %t368 = load ptr, ptr %a1 %t369 = icmp eq ptr %t368, null - br i1 %t369, label %panic3636, label %ok3637 -panic3636: + br i1 %t369, label %panic3640, label %ok3641 +panic3640: call void @finch_panic(ptr @.str.2278, i64 1541, ptr @.str.2279) unreachable -ok3637: +ok3641: %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 22 %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 %t372 = load %S.gen.SumDef, ptr %a277 @@ -39442,47 +39468,47 @@ ok3637: store i64 %t377, ptr %t371 call void @finch.drop.S_gen_SumDef(ptr %a277) call void @finch.drop.S_ast_Node(ptr %a227) - br label %for.step3600 -endif3610: + br label %for.step3604 +endif3614: %t380 = load ptr, ptr %a1 %t381 = load ptr, ptr %a1 %t382 = icmp eq ptr %t381, null - br i1 %t382, label %panic3638, label %ok3639 -panic3638: + br i1 %t382, label %panic3642, label %ok3643 +panic3642: call void @finch_panic(ptr @.str.2280, i64 1544, ptr @.str.2281) unreachable -ok3639: +ok3643: %t383 = getelementptr inbounds %S.gen.Gen, ptr %t381, i32 0, i32 14 %t384 = load { ptr, i64, i64 }, ptr %t383 %t385 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t386 = load { ptr, i64, i64 }, ptr %t385 %t387 = call i64 @finch.gen.findEnum(ptr %t380, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t386) %t388 = icmp sge i64 %t387, 0 - br label %logic.from3640 -logic.from3640: - br i1 %t388, label %logic.end3642, label %logic.rhs3641 -logic.rhs3641: + br label %logic.from3644 +logic.from3644: + br i1 %t388, label %logic.end3646, label %logic.rhs3645 +logic.rhs3645: %t389 = load ptr, ptr %a1 %t390 = load ptr, ptr %a1 %t391 = icmp eq ptr %t390, null - br i1 %t391, label %panic3643, label %ok3644 -panic3643: + br i1 %t391, label %panic3647, label %ok3648 +panic3647: call void @finch_panic(ptr @.str.2282, i64 1544, ptr @.str.2283) unreachable -ok3644: +ok3648: %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 14 %t393 = load { ptr, i64, i64 }, ptr %t392 %t394 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t395 = load { ptr, i64, i64 }, ptr %t394 %t396 = call i64 @finch.gen.findStruct(ptr %t389, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t395) %t397 = icmp sge i64 %t396, 0 - br label %logic.rend3645 -logic.rend3645: - br label %logic.end3642 -logic.end3642: - %t398 = phi i1 [ true, %logic.from3640 ], [ %t397, %logic.rend3645 ] - br i1 %t398, label %then3646, label %endif3648 -then3646: + br label %logic.rend3649 +logic.rend3649: + br label %logic.end3646 +logic.end3646: + %t398 = phi i1 [ true, %logic.from3644 ], [ %t397, %logic.rend3649 ] + br i1 %t398, label %then3650, label %endif3652 +then3650: %t399 = load ptr, ptr %a1 %t400 = load %S.ast.Node, ptr %a227 %t401 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39500,15 +39526,15 @@ then3646: call void @finch.gen.fail(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t411) store { ptr, i64, i64 } %t411, ptr %a412 call void @finch_str_drop(ptr %a412) - br label %endif3648 -endif3648: + br label %endif3652 +endif3652: %t413 = load ptr, ptr %a1 %t414 = icmp eq ptr %t413, null - br i1 %t414, label %panic3649, label %ok3650 -panic3649: + br i1 %t414, label %panic3653, label %ok3654 +panic3653: call void @finch_panic(ptr @.str.2286, i64 1547, ptr @.str.2287) unreachable -ok3650: +ok3654: %t415 = getelementptr inbounds %S.gen.Gen, ptr %t413, i32 0, i32 14 %t416 = load { ptr, i64, i64 }, ptr %t415 store { ptr, i64, i64 } %t416, ptr %a417 @@ -39525,14 +39551,14 @@ ok3650: store i64 0, ptr %a428 %t429 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 store i64 0, ptr %a430 - br label %each.cond3651 -each.cond3651: + br label %each.cond3655 +each.cond3655: %t431 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i32 0, i32 1 %t432 = load i64, ptr %t431 %t433 = load i64, ptr %a430 %t434 = icmp slt i64 %t433, %t432 - br i1 %t434, label %each.body3652, label %each.end3654 -each.body3652: + br i1 %t434, label %each.body3656, label %each.end3658 +each.body3656: %t435 = load ptr, ptr %t429 %t436 = getelementptr inbounds %S.ast.Node, ptr %t435, i64 %t433 %t437 = load %S.ast.Node, ptr %t436 @@ -39541,15 +39567,15 @@ each.body3652: %t440 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 %t441 = load i64, ptr %t440 %t442 = icmp sgt i64 %t441, 0 - br i1 %t442, label %then3655, label %endif3657 -then3655: + br i1 %t442, label %then3659, label %endif3661 +then3659: %t443 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 %t444 = load { ptr, i64, i64 }, ptr %t443 store { ptr, i64, i64 } %t444, ptr %a445 %t446 = call i64 @finch_str_to_int(ptr %a445, ptr @.str.2288, i64 1551) store i64 %t446, ptr %a428 - br label %endif3657 -endif3657: + br label %endif3661 +endif3661: %t447 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 %t448 = getelementptr inbounds { ptr, i64, i64 }, ptr %t447, i32 0, i32 1 %t449 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 @@ -39558,31 +39584,31 @@ endif3657: %t452 = load i64, ptr %t448 %t453 = load ptr, ptr %t447 store i64 0, ptr %a454 - br label %find.cond3658 -find.cond3658: + br label %find.cond3662 +find.cond3662: %t455 = load i64, ptr %a454 %t456 = icmp slt i64 %t455, %t452 - br i1 %t456, label %find.body3659, label %find.end3662 -find.body3659: + br i1 %t456, label %find.body3663, label %find.end3666 +find.body3663: %t457 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t455 %t458 = load { ptr, i64, i64 }, ptr %t457 store { ptr, i64, i64 } %t458, ptr %a459 store { ptr, i64, i64 } %t450, ptr %a460 %t461 = call i32 @finch_str_eq(ptr %a459, ptr %a460) %t462 = icmp ne i32 %t461, 0 - br i1 %t462, label %find.hit3660, label %find.next3661 -find.hit3660: + br i1 %t462, label %find.hit3664, label %find.next3665 +find.hit3664: store i64 %t455, ptr %a451 - br label %find.end3662 -find.next3661: + br label %find.end3666 +find.next3665: %t463 = add i64 %t455, 1 store i64 %t463, ptr %a454 - br label %find.cond3658 -find.end3662: + br label %find.cond3662 +find.end3666: %t464 = load i64, ptr %a451 %t465 = icmp sge i64 %t464, 0 - br i1 %t465, label %then3663, label %endif3665 -then3663: + br i1 %t465, label %then3667, label %endif3669 +then3667: %t466 = load ptr, ptr %a1 %t467 = load %S.ast.Node, ptr %a438 %t468 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39614,8 +39640,8 @@ then3663: call void @finch.gen.fail(ptr %t466, %S.ast.Node %t467, { ptr, i64, i64 } %t490) store { ptr, i64, i64 } %t490, ptr %a491 call void @finch_str_drop(ptr %a491) - br label %endif3665 -endif3665: + br label %endif3669 +endif3669: %t492 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t492, i32 0, i32 1 %t494 = load i64, ptr %a428 @@ -39623,28 +39649,28 @@ endif3665: %t496 = load i64, ptr %t493 %t497 = load ptr, ptr %t492 store i64 0, ptr %a498 - br label %find.cond3666 -find.cond3666: + br label %find.cond3670 +find.cond3670: %t499 = load i64, ptr %a498 %t500 = icmp slt i64 %t499, %t496 - br i1 %t500, label %find.body3667, label %find.end3670 -find.body3667: + br i1 %t500, label %find.body3671, label %find.end3674 +find.body3671: %t501 = getelementptr inbounds i64, ptr %t497, i64 %t499 %t502 = load i64, ptr %t501 %t503 = icmp eq i64 %t502, %t494 - br i1 %t503, label %find.hit3668, label %find.next3669 -find.hit3668: + br i1 %t503, label %find.hit3672, label %find.next3673 +find.hit3672: store i64 %t499, ptr %a495 - br label %find.end3670 -find.next3669: + br label %find.end3674 +find.next3673: %t504 = add i64 %t499, 1 store i64 %t504, ptr %a498 - br label %find.cond3666 -find.end3670: + br label %find.cond3670 +find.end3674: %t505 = load i64, ptr %a495 %t506 = icmp sge i64 %t505, 0 - br i1 %t506, label %then3671, label %endif3673 -then3671: + br i1 %t506, label %then3675, label %endif3677 +then3675: %t507 = load ptr, ptr %a1 %t508 = load %S.ast.Node, ptr %a438 %t509 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39679,8 +39705,8 @@ then3671: call void @finch.gen.fail(ptr %t507, %S.ast.Node %t508, { ptr, i64, i64 } %t533) store { ptr, i64, i64 } %t533, ptr %a534 call void @finch_str_drop(ptr %a534) - br label %endif3673 -endif3673: + br label %endif3677 +endif3677: %t535 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 %t536 = getelementptr inbounds { ptr, i64, i64 }, ptr %t535, i32 0, i32 1 %t537 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 @@ -39708,20 +39734,20 @@ endif3673: %t553 = load i64, ptr %a428 %t554 = add i64 %t553, 1 store i64 %t554, ptr %a428 - br label %each.step3653 -each.step3653: + br label %each.step3657 +each.step3657: %t555 = load i64, ptr %a430 %t556 = add i64 %t555, 1 store i64 %t556, ptr %a430 - br label %each.cond3651 -each.end3654: + br label %each.cond3655 +each.end3658: %t557 = load ptr, ptr %a1 %t558 = icmp eq ptr %t557, null - br i1 %t558, label %panic3674, label %ok3675 -panic3674: + br i1 %t558, label %panic3678, label %ok3679 +panic3678: call void @finch_panic(ptr @.str.2295, i64 1563, ptr @.str.2296) unreachable -ok3675: +ok3679: %t559 = getelementptr inbounds %S.gen.Gen, ptr %t557, i32 0, i32 21 %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 %t561 = load %S.gen.EnumDef, ptr %a427 @@ -39737,66 +39763,66 @@ ok3675: store i64 %t566, ptr %t560 call void @finch.drop.S_gen_EnumDef(ptr %a427) call void @finch.drop.S_ast_Node(ptr %a227) - br label %for.step3600 -for.step3600: + br label %for.step3604 +for.step3604: %t569 = load i64, ptr %a204 %t570 = add i64 %t569, 1 store i64 %t570, ptr %a204 - br label %for.cond3598 -for.end3601: - br label %for.step3586 -for.step3586: + br label %for.cond3602 +for.end3605: + br label %for.step3590 +for.step3590: %t571 = load i64, ptr %a170 %t572 = add i64 %t571, 1 store i64 %t572, ptr %a170 - br label %for.cond3584 -for.end3587: + br label %for.cond3588 +for.end3591: %t573 = load ptr, ptr %a1 %t574 = icmp eq ptr %t573, null - br i1 %t574, label %panic3676, label %ok3677 -panic3676: + br i1 %t574, label %panic3680, label %ok3681 +panic3680: call void @finch_panic(ptr @.str.2297, i64 1566, ptr @.str.2298) unreachable -ok3677: +ok3681: %t575 = getelementptr inbounds %S.gen.Gen, ptr %t573, i32 0, i32 26 %t576 = getelementptr inbounds %S.cimport.CImports, ptr %t575, i32 0, i32 4 %t577 = getelementptr inbounds { ptr, i64, i64 }, ptr %t576, i32 0, i32 1 %t578 = load i64, ptr %t577 store i64 0, ptr %a579 - br label %for.cond3678 -for.cond3678: + br label %for.cond3682 +for.cond3682: %t580 = load i64, ptr %a579 %t581 = icmp slt i64 %t580, %t578 - br i1 %t581, label %for.body3679, label %for.end3681 -for.body3679: + br i1 %t581, label %for.body3683, label %for.end3685 +for.body3683: %t582 = load ptr, ptr %a1 %t583 = icmp eq ptr %t582, null - br i1 %t583, label %panic3682, label %ok3683 -panic3682: + br i1 %t583, label %panic3686, label %ok3687 +panic3686: call void @finch_panic(ptr @.str.2299, i64 1567, ptr @.str.2300) unreachable -ok3683: +ok3687: %t584 = getelementptr inbounds %S.gen.Gen, ptr %t582, i32 0, i32 16 %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i32 0, i32 1 %t586 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } { ptr @.str.2301, i64 1, i64 0 }, 0 %t587 = load ptr, ptr %a1 %t588 = icmp eq ptr %t587, null - br i1 %t588, label %panic3684, label %ok3685 -panic3684: + br i1 %t588, label %panic3688, label %ok3689 +panic3688: call void @finch_panic(ptr @.str.2302, i64 1567, ptr @.str.2303) unreachable -ok3685: +ok3689: %t589 = getelementptr inbounds %S.gen.Gen, ptr %t587, i32 0, i32 26 %t590 = getelementptr inbounds %S.cimport.CImports, ptr %t589, i32 0, i32 4 %t591 = load i64, ptr %a579 %t592 = load { ptr, i64, i64 }, ptr %t590 %t593 = extractvalue { ptr, i64, i64 } %t592, 1 %t594 = icmp uge i64 %t591, %t593 - br i1 %t594, label %range3686, label %inrange3687 -range3686: + br i1 %t594, label %range3690, label %inrange3691 +range3690: call void @finch_panic_index(ptr @.str.2304, i64 1567, i64 %t591, i64 %t593) unreachable -inrange3687: +inrange3691: %t595 = extractvalue { ptr, i64, i64 } %t592, 0 %t596 = getelementptr inbounds { ptr, i64, i64 }, ptr %t595, i64 %t591 %t597 = load { ptr, i64, i64 }, ptr %t596 @@ -39815,85 +39841,85 @@ inrange3687: %t609 = getelementptr inbounds %S.gen.StructDef, ptr %t608, i64 %t606 store %S.gen.StructDef %t605, ptr %t609 store i64 %t607, ptr %t585 - br label %for.step3680 -for.step3680: + br label %for.step3684 +for.step3684: %t610 = load i64, ptr %a579 %t611 = add i64 %t610, 1 store i64 %t611, ptr %a579 - br label %for.cond3678 -for.end3681: + br label %for.cond3682 +for.end3685: %t612 = load ptr, ptr %a1 %t613 = icmp eq ptr %t612, null - br i1 %t613, label %panic3688, label %ok3689 -panic3688: + br i1 %t613, label %panic3692, label %ok3693 +panic3692: call void @finch_panic(ptr @.str.2305, i64 1569, ptr @.str.2306) unreachable -ok3689: +ok3693: %t614 = getelementptr inbounds %S.gen.Gen, ptr %t612, i32 0, i32 16 %t615 = getelementptr inbounds { ptr, i64, i64 }, ptr %t614, i32 0, i32 1 %t616 = load i64, ptr %t615 store i64 0, ptr %a617 - br label %for.cond3690 -for.cond3690: + br label %for.cond3694 +for.cond3694: %t618 = load i64, ptr %a617 %t619 = icmp slt i64 %t618, %t616 - br i1 %t619, label %for.body3691, label %for.end3693 -for.body3691: + br i1 %t619, label %for.body3695, label %for.end3697 +for.body3695: %t620 = load ptr, ptr %a1 %t621 = load i64, ptr %a617 call void @finch.gen.resolveStruct(ptr %t620, i64 %t621) - br label %for.step3692 -for.step3692: + br label %for.step3696 +for.step3696: %t622 = load i64, ptr %a617 %t623 = add i64 %t622, 1 store i64 %t623, ptr %a617 - br label %for.cond3690 -for.end3693: + br label %for.cond3694 +for.end3697: %t624 = load ptr, ptr %a1 %t625 = icmp eq ptr %t624, null - br i1 %t625, label %panic3694, label %ok3695 -panic3694: + br i1 %t625, label %panic3698, label %ok3699 +panic3698: call void @finch_panic(ptr @.str.2307, i64 1572, ptr @.str.2308) unreachable -ok3695: +ok3699: %t626 = getelementptr inbounds %S.gen.Gen, ptr %t624, i32 0, i32 0 %t627 = getelementptr inbounds { ptr, i64, i64 }, ptr %t626, i32 0, i32 1 %t628 = load i64, ptr %t627 store i64 0, ptr %a629 - br label %for.cond3696 -for.cond3696: + br label %for.cond3700 +for.cond3700: %t630 = load i64, ptr %a629 %t631 = icmp slt i64 %t630, %t628 - br i1 %t631, label %for.body3697, label %for.end3699 -for.body3697: + br i1 %t631, label %for.body3701, label %for.end3703 +for.body3701: %t632 = load ptr, ptr %a1 %t633 = icmp eq ptr %t632, null - br i1 %t633, label %panic3700, label %ok3701 -panic3700: + br i1 %t633, label %panic3704, label %ok3705 +panic3704: call void @finch_panic(ptr @.str.2309, i64 1573, ptr @.str.2310) unreachable -ok3701: +ok3705: %t634 = getelementptr inbounds %S.gen.Gen, ptr %t632, i32 0, i32 0 %t635 = load i64, ptr %a629 %t636 = load { ptr, i64, i64 }, ptr %t634 %t637 = extractvalue { ptr, i64, i64 } %t636, 1 %t638 = icmp uge i64 %t635, %t637 - br i1 %t638, label %range3702, label %inrange3703 -range3702: + br i1 %t638, label %range3706, label %inrange3707 +range3706: call void @finch_panic_index(ptr @.str.2311, i64 1573, i64 %t635, i64 %t637) unreachable -inrange3703: +inrange3707: %t639 = extractvalue { ptr, i64, i64 } %t636, 0 %t640 = getelementptr inbounds %S.ast.Program, ptr %t639, i64 %t635 %t641 = getelementptr inbounds %S.ast.Program, ptr %t640, i32 0, i32 0 %t642 = load { ptr, i64, i64 }, ptr %t641 %t643 = load ptr, ptr %a1 %t644 = icmp eq ptr %t643, null - br i1 %t644, label %panic3704, label %ok3705 -panic3704: + br i1 %t644, label %panic3708, label %ok3709 +panic3708: call void @finch_panic(ptr @.str.2312, i64 1573, ptr @.str.2313) unreachable -ok3705: +ok3709: %t645 = getelementptr inbounds %S.gen.Gen, ptr %t643, i32 0, i32 14 store { ptr, i64, i64 } %t642, ptr %a646 call void @finch_str_copy(ptr %a647, ptr %a646) @@ -39904,50 +39930,50 @@ ok3705: call void @finch_str_drop(ptr %a650) %t651 = load ptr, ptr %a1 %t652 = icmp eq ptr %t651, null - br i1 %t652, label %panic3706, label %ok3707 -panic3706: + br i1 %t652, label %panic3710, label %ok3711 +panic3710: call void @finch_panic(ptr @.str.2314, i64 1574, ptr @.str.2315) unreachable -ok3707: +ok3711: %t653 = getelementptr inbounds %S.gen.Gen, ptr %t651, i32 0, i32 0 %t654 = load i64, ptr %a629 %t655 = load { ptr, i64, i64 }, ptr %t653 %t656 = extractvalue { ptr, i64, i64 } %t655, 1 %t657 = icmp uge i64 %t654, %t656 - br i1 %t657, label %range3708, label %inrange3709 -range3708: + br i1 %t657, label %range3712, label %inrange3713 +range3712: call void @finch_panic_index(ptr @.str.2316, i64 1574, i64 %t654, i64 %t656) unreachable -inrange3709: +inrange3713: %t658 = extractvalue { ptr, i64, i64 } %t655, 0 %t659 = getelementptr inbounds %S.ast.Program, ptr %t658, i64 %t654 %t660 = getelementptr inbounds %S.ast.Program, ptr %t659, i32 0, i32 8 %t661 = getelementptr inbounds { ptr, i64, i64 }, ptr %t660, i32 0, i32 1 %t662 = load i64, ptr %t661 store i64 0, ptr %a663 - br label %for.cond3710 -for.cond3710: + br label %for.cond3714 +for.cond3714: %t664 = load i64, ptr %a663 %t665 = icmp slt i64 %t664, %t662 - br i1 %t665, label %for.body3711, label %for.end3713 -for.body3711: + br i1 %t665, label %for.body3715, label %for.end3717 +for.body3715: %t666 = load ptr, ptr %a1 %t667 = icmp eq ptr %t666, null - br i1 %t667, label %panic3714, label %ok3715 -panic3714: + br i1 %t667, label %panic3718, label %ok3719 +panic3718: call void @finch_panic(ptr @.str.2317, i64 1575, ptr @.str.2318) unreachable -ok3715: +ok3719: %t668 = getelementptr inbounds %S.gen.Gen, ptr %t666, i32 0, i32 0 %t669 = load i64, ptr %a629 %t670 = load { ptr, i64, i64 }, ptr %t668 %t671 = extractvalue { ptr, i64, i64 } %t670, 1 %t672 = icmp uge i64 %t669, %t671 - br i1 %t672, label %range3716, label %inrange3717 -range3716: + br i1 %t672, label %range3720, label %inrange3721 +range3720: call void @finch_panic_index(ptr @.str.2319, i64 1575, i64 %t669, i64 %t671) unreachable -inrange3717: +inrange3721: %t673 = extractvalue { ptr, i64, i64 } %t670, 0 %t674 = getelementptr inbounds %S.ast.Program, ptr %t673, i64 %t669 %t675 = getelementptr inbounds %S.ast.Program, ptr %t674, i32 0, i32 8 @@ -39955,11 +39981,11 @@ inrange3717: %t677 = load { ptr, i64, i64 }, ptr %t675 %t678 = extractvalue { ptr, i64, i64 } %t677, 1 %t679 = icmp uge i64 %t676, %t678 - br i1 %t679, label %range3718, label %inrange3719 -range3718: + br i1 %t679, label %range3722, label %inrange3723 +range3722: call void @finch_panic_index(ptr @.str.2320, i64 1575, i64 %t676, i64 %t678) unreachable -inrange3719: +inrange3723: %t680 = extractvalue { ptr, i64, i64 } %t677, 0 %t681 = getelementptr inbounds %S.ast.Node, ptr %t680, i64 %t676 %t682 = load %S.ast.Node, ptr %t681 @@ -39971,16 +39997,16 @@ inrange3719: %t688 = getelementptr inbounds { ptr, i64, i64 }, ptr %t687, i32 0, i32 1 %t689 = load i64, ptr %t688 %t690 = icmp sgt i64 %t689, 0 - br i1 %t690, label %then3720, label %endif3722 -then3720: + br i1 %t690, label %then3724, label %endif3726 +then3724: %t691 = load ptr, ptr %a1 %t692 = load ptr, ptr %a1 %t693 = icmp eq ptr %t692, null - br i1 %t693, label %panic3723, label %ok3724 -panic3723: + br i1 %t693, label %panic3727, label %ok3728 +panic3727: call void @finch_panic(ptr @.str.2321, i64 1578, ptr @.str.2322) unreachable -ok3724: +ok3728: %t694 = getelementptr inbounds %S.gen.Gen, ptr %t692, i32 0, i32 14 %t695 = load { ptr, i64, i64 }, ptr %t694 %t696 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 @@ -39989,8 +40015,8 @@ ok3724: %t699 = load { ptr, i64, i64 }, ptr %t698 %t700 = call i64 @finch.gen.findTemplate(ptr %t691, { ptr, i64, i64 } %t695, { ptr, i64, i64 } %t697, { ptr, i64, i64 } %t699, i1 false) %t701 = icmp sge i64 %t700, 0 - br i1 %t701, label %then3725, label %endif3727 -then3725: + br i1 %t701, label %then3729, label %endif3731 +then3729: %t702 = load ptr, ptr %a1 %t703 = load %S.ast.Node, ptr %a686 %t704 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 @@ -40008,37 +40034,37 @@ then3725: call void @finch.gen.fail(ptr %t702, %S.ast.Node %t703, { ptr, i64, i64 } %t714) store { ptr, i64, i64 } %t714, ptr %a715 call void @finch_str_drop(ptr %a715) - br label %endif3727 -endif3727: + br label %endif3731 +endif3731: %t716 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t717 = getelementptr inbounds { ptr, i64, i64 }, ptr %t716, i32 0, i32 1 %t718 = load i64, ptr %t717 %t719 = icmp sgt i64 %t718, 0 - br label %logic.from3728 -logic.from3728: - br i1 %t719, label %logic.rhs3729, label %logic.end3730 -logic.rhs3729: + br label %logic.from3732 +logic.from3732: + br i1 %t719, label %logic.rhs3733, label %logic.end3734 +logic.rhs3733: %t720 = load ptr, ptr %a1 %t721 = load ptr, ptr %a1 %t722 = icmp eq ptr %t721, null - br i1 %t722, label %panic3731, label %ok3732 -panic3731: + br i1 %t722, label %panic3735, label %ok3736 +panic3735: call void @finch_panic(ptr @.str.2325, i64 1581, ptr @.str.2326) unreachable -ok3732: +ok3736: %t723 = getelementptr inbounds %S.gen.Gen, ptr %t721, i32 0, i32 14 %t724 = load { ptr, i64, i64 }, ptr %t723 %t725 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t726 = load { ptr, i64, i64 }, ptr %t725 %t727 = call i64 @finch.gen.findTemplate(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t726, { ptr, i64, i64 } { ptr @.str.2327, i64 0, i64 0 }, i1 true) %t728 = icmp slt i64 %t727, 0 - br label %logic.rend3733 -logic.rend3733: - br label %logic.end3730 -logic.end3730: - %t729 = phi i1 [ false, %logic.from3728 ], [ %t728, %logic.rend3733 ] - br i1 %t729, label %then3734, label %endif3736 -then3734: + br label %logic.rend3737 +logic.rend3737: + br label %logic.end3734 +logic.end3734: + %t729 = phi i1 [ false, %logic.from3732 ], [ %t728, %logic.rend3737 ] + br i1 %t729, label %then3738, label %endif3740 +then3738: %t730 = load ptr, ptr %a1 %t731 = load %S.ast.Node, ptr %a686 %t732 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40056,24 +40082,24 @@ then3734: call void @finch.gen.fail(ptr %t730, %S.ast.Node %t731, { ptr, i64, i64 } %t742) store { ptr, i64, i64 } %t742, ptr %a743 call void @finch_str_drop(ptr %a743) - br label %endif3736 -endif3736: + br label %endif3740 +endif3740: %t744 = load ptr, ptr %a1 %t745 = icmp eq ptr %t744, null - br i1 %t745, label %panic3737, label %ok3738 -panic3737: + br i1 %t745, label %panic3741, label %ok3742 +panic3741: call void @finch_panic(ptr @.str.2330, i64 1584, ptr @.str.2331) unreachable -ok3738: +ok3742: %t746 = getelementptr inbounds %S.gen.Gen, ptr %t744, i32 0, i32 17 %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i32 0, i32 1 %t748 = load ptr, ptr %a1 %t749 = icmp eq ptr %t748, null - br i1 %t749, label %panic3739, label %ok3740 -panic3739: + br i1 %t749, label %panic3743, label %ok3744 +panic3743: call void @finch_panic(ptr @.str.2332, i64 1584, ptr @.str.2333) unreachable -ok3740: +ok3744: %t750 = getelementptr inbounds %S.gen.Gen, ptr %t748, i32 0, i32 14 %t751 = load { ptr, i64, i64 }, ptr %t750 store { ptr, i64, i64 } %t751, ptr %a752 @@ -40110,15 +40136,15 @@ ok3740: store %S.gen.Template %t777, ptr %t781 store i64 %t779, ptr %t747 call void @finch.drop.S_ast_Node(ptr %a686) - br label %for.step3712 -endif3722: + br label %for.step3716 +endif3726: %t782 = load ptr, ptr %a1 %t783 = icmp eq ptr %t782, null - br i1 %t783, label %panic3741, label %ok3742 -panic3741: + br i1 %t783, label %panic3745, label %ok3746 +panic3745: call void @finch_panic(ptr @.str.2334, i64 1587, ptr @.str.2335) unreachable -ok3742: +ok3746: %t784 = getelementptr inbounds %S.gen.Gen, ptr %t782, i32 0, i32 14 %t785 = load { ptr, i64, i64 }, ptr %t784 store { ptr, i64, i64 } %t785, ptr %a786 @@ -40130,31 +40156,31 @@ ok3742: %t792 = getelementptr inbounds { ptr, i64, i64 }, ptr %t791, i32 0, i32 1 %t793 = load i64, ptr %t792 %t794 = icmp sgt i64 %t793, 0 - br label %logic.from3743 -logic.from3743: - br i1 %t794, label %logic.rhs3744, label %logic.end3745 -logic.rhs3744: + br label %logic.from3747 +logic.from3747: + br i1 %t794, label %logic.rhs3748, label %logic.end3749 +logic.rhs3748: %t795 = load ptr, ptr %a1 %t796 = load ptr, ptr %a1 %t797 = icmp eq ptr %t796, null - br i1 %t797, label %panic3746, label %ok3747 -panic3746: + br i1 %t797, label %panic3750, label %ok3751 +panic3750: call void @finch_panic(ptr @.str.2336, i64 1589, ptr @.str.2337) unreachable -ok3747: +ok3751: %t798 = getelementptr inbounds %S.gen.Gen, ptr %t796, i32 0, i32 14 %t799 = load { ptr, i64, i64 }, ptr %t798 %t800 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t801 = load { ptr, i64, i64 }, ptr %t800 %t802 = call i64 @finch.gen.findEnum(ptr %t795, { ptr, i64, i64 } %t799, { ptr, i64, i64 } %t801) %t803 = icmp sge i64 %t802, 0 - br label %logic.rend3748 -logic.rend3748: - br label %logic.end3745 -logic.end3745: - %t804 = phi i1 [ false, %logic.from3743 ], [ %t803, %logic.rend3748 ] - br i1 %t804, label %then3749, label %else3750 -then3749: + br label %logic.rend3752 +logic.rend3752: + br label %logic.end3749 +logic.end3749: + %t804 = phi i1 [ false, %logic.from3747 ], [ %t803, %logic.rend3752 ] + br i1 %t804, label %then3753, label %else3754 +then3753: store i1 true, ptr %a790 %t805 = load ptr, ptr %a1 %t806 = load { ptr, i64, i64 }, ptr %a789 @@ -40164,8 +40190,8 @@ then3749: %t810 = load { ptr, i64, i64 }, ptr %t809 %t811 = call i64 @finch.gen.findMethod(ptr %t805, { ptr, i64, i64 } %t806, { ptr, i64, i64 } %t808, { ptr, i64, i64 } %t810) %t812 = icmp sge i64 %t811, 0 - br i1 %t812, label %then3752, label %endif3754 -then3752: + br i1 %t812, label %then3756, label %endif3758 +then3756: %t813 = load ptr, ptr %a1 %t814 = load %S.ast.Node, ptr %a686 %t815 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40197,24 +40223,24 @@ then3752: call void @finch.gen.fail(ptr %t813, %S.ast.Node %t814, { ptr, i64, i64 } %t837) store { ptr, i64, i64 } %t837, ptr %a838 call void @finch_str_drop(ptr %a838) - br label %endif3754 -endif3754: - br label %endif3751 -else3750: + br label %endif3758 +endif3758: + br label %endif3755 +else3754: %t839 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t840 = getelementptr inbounds { ptr, i64, i64 }, ptr %t839, i32 0, i32 1 %t841 = load i64, ptr %t840 %t842 = icmp sgt i64 %t841, 0 - br i1 %t842, label %then3755, label %else3756 -then3755: + br i1 %t842, label %then3759, label %else3760 +then3759: %t843 = load ptr, ptr %a1 %t844 = load ptr, ptr %a1 %t845 = icmp eq ptr %t844, null - br i1 %t845, label %panic3758, label %ok3759 -panic3758: + br i1 %t845, label %panic3762, label %ok3763 +panic3762: call void @finch_panic(ptr @.str.2341, i64 1595, ptr @.str.2342) unreachable -ok3759: +ok3763: %t846 = getelementptr inbounds %S.gen.Gen, ptr %t844, i32 0, i32 14 %t847 = load { ptr, i64, i64 }, ptr %t846 %t848 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40223,22 +40249,22 @@ ok3759: store i64 %t850, ptr %a851 %t852 = load i64, ptr %a851 %t853 = icmp slt i64 %t852, 0 - br label %logic.from3760 -logic.from3760: - br i1 %t853, label %logic.rhs3761, label %logic.end3762 -logic.rhs3761: + br label %logic.from3764 +logic.from3764: + br i1 %t853, label %logic.rhs3765, label %logic.end3766 +logic.rhs3765: %t854 = load ptr, ptr %a1 %t855 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t856 = load { ptr, i64, i64 }, ptr %t855 %t857 = call i64 @finch.gen.findStruct(ptr %t854, { ptr, i64, i64 } { ptr @.str.2343, i64 1, i64 0 }, { ptr, i64, i64 } %t856) %t858 = icmp sge i64 %t857, 0 - br label %logic.rend3763 -logic.rend3763: - br label %logic.end3762 -logic.end3762: - %t859 = phi i1 [ false, %logic.from3760 ], [ %t858, %logic.rend3763 ] - br i1 %t859, label %then3764, label %endif3766 -then3764: + br label %logic.rend3767 +logic.rend3767: + br label %logic.end3766 +logic.end3766: + %t859 = phi i1 [ false, %logic.from3764 ], [ %t858, %logic.rend3767 ] + br i1 %t859, label %then3768, label %endif3770 +then3768: %t860 = load ptr, ptr %a1 %t861 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t862 = load { ptr, i64, i64 }, ptr %t861 @@ -40248,12 +40274,12 @@ then3764: store { ptr, i64, i64 } { ptr @.str.2345, i64 1, i64 0 }, ptr %a789 store { ptr, i64, i64 } %t864, ptr %a865 call void @finch_str_drop(ptr %a865) - br label %endif3766 -endif3766: + br label %endif3770 +endif3770: %t866 = load i64, ptr %a851 %t867 = icmp slt i64 %t866, 0 - br i1 %t867, label %then3767, label %endif3769 -then3767: + br i1 %t867, label %then3771, label %endif3773 +then3771: %t868 = load ptr, ptr %a1 %t869 = load %S.ast.Node, ptr %a686 %t870 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40271,8 +40297,8 @@ then3767: call void @finch.gen.fail(ptr %t868, %S.ast.Node %t869, { ptr, i64, i64 } %t880) store { ptr, i64, i64 } %t880, ptr %a881 call void @finch_str_drop(ptr %a881) - br label %endif3769 -endif3769: + br label %endif3773 +endif3773: %t882 = load ptr, ptr %a1 %t883 = load { ptr, i64, i64 }, ptr %a789 %t884 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40281,8 +40307,8 @@ endif3769: %t887 = load { ptr, i64, i64 }, ptr %t886 %t888 = call i64 @finch.gen.findMethod(ptr %t882, { ptr, i64, i64 } %t883, { ptr, i64, i64 } %t885, { ptr, i64, i64 } %t887) %t889 = icmp sge i64 %t888, 0 - br i1 %t889, label %then3770, label %endif3772 -then3770: + br i1 %t889, label %then3774, label %endif3776 +then3774: %t890 = load ptr, ptr %a1 %t891 = load %S.ast.Node, ptr %a686 %t892 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40314,25 +40340,25 @@ then3770: call void @finch.gen.fail(ptr %t890, %S.ast.Node %t891, { ptr, i64, i64 } %t914) store { ptr, i64, i64 } %t914, ptr %a915 call void @finch_str_drop(ptr %a915) - br label %endif3772 -endif3772: + br label %endif3776 +endif3776: %t916 = load ptr, ptr %a1 %t917 = icmp eq ptr %t916, null - br i1 %t917, label %panic3773, label %ok3774 -panic3773: + br i1 %t917, label %panic3777, label %ok3778 +panic3777: call void @finch_panic(ptr @.str.2351, i64 1606, ptr @.str.2352) unreachable -ok3774: +ok3778: %t918 = getelementptr inbounds %S.gen.Gen, ptr %t916, i32 0, i32 16 %t919 = load i64, ptr %a851 %t920 = load { ptr, i64, i64 }, ptr %t918 %t921 = extractvalue { ptr, i64, i64 } %t920, 1 %t922 = icmp uge i64 %t919, %t921 - br i1 %t922, label %range3775, label %inrange3776 -range3775: + br i1 %t922, label %range3779, label %inrange3780 +range3779: call void @finch_panic_index(ptr @.str.2353, i64 1606, i64 %t919, i64 %t921) unreachable -inrange3776: +inrange3780: %t923 = extractvalue { ptr, i64, i64 } %t920, 0 %t924 = getelementptr inbounds %S.gen.StructDef, ptr %t923, i64 %t919 %t925 = getelementptr inbounds %S.gen.StructDef, ptr %t924, i32 0, i32 11 @@ -40343,31 +40369,31 @@ inrange3776: %t930 = load i64, ptr %t926 %t931 = load ptr, ptr %t925 store i64 0, ptr %a932 - br label %find.cond3777 -find.cond3777: + br label %find.cond3781 +find.cond3781: %t933 = load i64, ptr %a932 %t934 = icmp slt i64 %t933, %t930 - br i1 %t934, label %find.body3778, label %find.end3781 -find.body3778: + br i1 %t934, label %find.body3782, label %find.end3785 +find.body3782: %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t931, i64 %t933 %t936 = load { ptr, i64, i64 }, ptr %t935 store { ptr, i64, i64 } %t936, ptr %a937 store { ptr, i64, i64 } %t928, ptr %a938 %t939 = call i32 @finch_str_eq(ptr %a937, ptr %a938) %t940 = icmp ne i32 %t939, 0 - br i1 %t940, label %find.hit3779, label %find.next3780 -find.hit3779: + br i1 %t940, label %find.hit3783, label %find.next3784 +find.hit3783: store i64 %t933, ptr %a929 - br label %find.end3781 -find.next3780: + br label %find.end3785 +find.next3784: %t941 = add i64 %t933, 1 store i64 %t941, ptr %a932 - br label %find.cond3777 -find.end3781: + br label %find.cond3781 +find.end3785: %t942 = load i64, ptr %a929 %t943 = icmp sge i64 %t942, 0 - br i1 %t943, label %then3782, label %endif3784 -then3782: + br i1 %t943, label %then3786, label %endif3788 +then3786: %t944 = load ptr, ptr %a1 %t945 = load %S.ast.Node, ptr %a686 %t946 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40399,26 +40425,26 @@ then3782: call void @finch.gen.fail(ptr %t944, %S.ast.Node %t945, { ptr, i64, i64 } %t968) store { ptr, i64, i64 } %t968, ptr %a969 call void @finch_str_drop(ptr %a969) - br label %endif3784 -endif3784: - br label %endif3757 -else3756: + br label %endif3788 +endif3788: + br label %endif3761 +else3760: %t970 = load ptr, ptr %a1 %t971 = load ptr, ptr %a1 %t972 = icmp eq ptr %t971, null - br i1 %t972, label %panic3785, label %ok3786 -panic3785: + br i1 %t972, label %panic3789, label %ok3790 +panic3789: call void @finch_panic(ptr @.str.2357, i64 1610, ptr @.str.2358) unreachable -ok3786: +ok3790: %t973 = getelementptr inbounds %S.gen.Gen, ptr %t971, i32 0, i32 14 %t974 = load { ptr, i64, i64 }, ptr %t973 %t975 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t976 = load { ptr, i64, i64 }, ptr %t975 %t977 = call i64 @finch.gen.findFn(ptr %t970, { ptr, i64, i64 } %t974, { ptr, i64, i64 } %t976) %t978 = icmp sge i64 %t977, 0 - br i1 %t978, label %then3787, label %endif3789 -then3787: + br i1 %t978, label %then3791, label %endif3793 +then3791: %t979 = load ptr, ptr %a1 %t980 = load %S.ast.Node, ptr %a686 %t981 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 @@ -40436,13 +40462,13 @@ then3787: call void @finch.gen.fail(ptr %t979, %S.ast.Node %t980, { ptr, i64, i64 } %t991) store { ptr, i64, i64 } %t991, ptr %a992 call void @finch_str_drop(ptr %a992) - br label %endif3789 -endif3789: + br label %endif3793 +endif3793: %t993 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t994 = load { ptr, i64, i64 }, ptr %t993 %t995 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t994) - br i1 %t995, label %then3790, label %endif3792 -then3790: + br i1 %t995, label %then3794, label %endif3796 +then3794: %t996 = load ptr, ptr %a1 %t997 = load %S.ast.Node, ptr %a686 %t998 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 @@ -40460,19 +40486,19 @@ then3790: call void @finch.gen.fail(ptr %t996, %S.ast.Node %t997, { ptr, i64, i64 } %t1008) store { ptr, i64, i64 } %t1008, ptr %a1009 call void @finch_str_drop(ptr %a1009) - br label %endif3792 -endif3792: - br label %endif3757 -endif3757: - br label %endif3751 -endif3751: + br label %endif3796 +endif3796: + br label %endif3761 +endif3761: + br label %endif3755 +endif3755: %t1010 = load ptr, ptr %a1 %t1011 = icmp eq ptr %t1010, null - br i1 %t1011, label %panic3793, label %ok3794 -panic3793: + br i1 %t1011, label %panic3797, label %ok3798 +panic3797: call void @finch_panic(ptr @.str.2363, i64 1617, ptr @.str.2364) unreachable -ok3794: +ok3798: %t1012 = getelementptr inbounds %S.gen.Gen, ptr %t1010, i32 0, i32 14 %t1013 = load { ptr, i64, i64 }, ptr %t1012 store { ptr, i64, i64 } %t1013, ptr %a1014 @@ -40511,11 +40537,11 @@ ok3794: store %S.gen.FnSig %t1046, ptr %a1047 %t1048 = load ptr, ptr %a1 %t1049 = icmp eq ptr %t1048, null - br i1 %t1049, label %panic3795, label %ok3796 -panic3795: + br i1 %t1049, label %panic3799, label %ok3800 +panic3799: call void @finch_panic(ptr @.str.2366, i64 1618, ptr @.str.2367) unreachable -ok3796: +ok3800: %t1050 = getelementptr inbounds %S.gen.Gen, ptr %t1048, i32 0, i32 14 %t1051 = load { ptr, i64, i64 }, ptr %t1050 %t1052 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1051) @@ -40548,15 +40574,15 @@ ok3796: %t1074 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1073, i32 0, i32 1 %t1075 = load i64, ptr %t1074 %t1076 = icmp sgt i64 %t1075, 0 - br i1 %t1076, label %then3797, label %endif3799 -then3797: + br i1 %t1076, label %then3801, label %endif3803 +then3801: %t1077 = load ptr, ptr %a1 %t1078 = icmp eq ptr %t1077, null - br i1 %t1078, label %panic3800, label %ok3801 -panic3800: + br i1 %t1078, label %panic3804, label %ok3805 +panic3804: call void @finch_panic(ptr @.str.2370, i64 1620, ptr @.str.2371) unreachable -ok3801: +ok3805: %t1079 = getelementptr inbounds %S.gen.Gen, ptr %t1077, i32 0, i32 14 %t1080 = load { ptr, i64, i64 }, ptr %t1079 %t1081 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1080) @@ -40599,8 +40625,8 @@ ok3801: store { ptr, i64, i64 } %t1110, ptr %t1111 store { ptr, i64, i64 } %t1112, ptr %a1113 call void @finch_str_drop(ptr %a1113) - br label %endif3799 -endif3799: + br label %endif3803 +endif3803: %t1114 = load ptr, ptr %a1 %t1115 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 5 %t1116 = load %S.ast.Type, ptr %t1115 @@ -40616,22 +40642,22 @@ endif3799: %t1124 = load i64, ptr %t1123 %t1125 = sub i64 %t1124, 1 store i64 0, ptr %a1126 - br label %for.cond3802 -for.cond3802: + br label %for.cond3806 +for.cond3806: %t1127 = load i64, ptr %a1126 %t1128 = icmp slt i64 %t1127, %t1125 - br i1 %t1128, label %for.body3803, label %for.end3805 -for.body3803: + br i1 %t1128, label %for.body3807, label %for.end3809 +for.body3807: %t1129 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1130 = load i64, ptr %a1126 %t1131 = load { ptr, i64, i64 }, ptr %t1129 %t1132 = extractvalue { ptr, i64, i64 } %t1131, 1 %t1133 = icmp uge i64 %t1130, %t1132 - br i1 %t1133, label %range3806, label %inrange3807 -range3806: + br i1 %t1133, label %range3810, label %inrange3811 +range3810: call void @finch_panic_index(ptr @.str.2374, i64 1624, i64 %t1130, i64 %t1132) unreachable -inrange3807: +inrange3811: %t1134 = extractvalue { ptr, i64, i64 } %t1131, 0 %t1135 = getelementptr inbounds %S.ast.Node, ptr %t1134, i64 %t1130 %t1136 = getelementptr inbounds %S.ast.Node, ptr %t1135, i32 0, i32 1 @@ -40640,32 +40666,32 @@ inrange3807: store { ptr, i64, i64 } { ptr @.str.2375, i64 4, i64 0 }, ptr %a1139 %t1140 = call i32 @finch_str_eq(ptr %a1138, ptr %a1139) %t1141 = icmp ne i32 %t1140, 0 - br label %logic.from3808 -logic.from3808: - br i1 %t1141, label %logic.rhs3809, label %logic.end3810 -logic.rhs3809: + br label %logic.from3812 +logic.from3812: + br i1 %t1141, label %logic.rhs3813, label %logic.end3814 +logic.rhs3813: %t1142 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t1143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1142, i32 0, i32 1 %t1144 = load i64, ptr %t1143 %t1145 = icmp sgt i64 %t1144, 0 - br label %logic.rend3811 -logic.rend3811: - br label %logic.end3810 -logic.end3810: - %t1146 = phi i1 [ false, %logic.from3808 ], [ %t1145, %logic.rend3811 ] - br i1 %t1146, label %then3812, label %endif3814 -then3812: + br label %logic.rend3815 +logic.rend3815: + br label %logic.end3814 +logic.end3814: + %t1146 = phi i1 [ false, %logic.from3812 ], [ %t1145, %logic.rend3815 ] + br i1 %t1146, label %then3816, label %endif3818 +then3816: %t1147 = load ptr, ptr %a1 %t1148 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1149 = load i64, ptr %a1126 %t1150 = load { ptr, i64, i64 }, ptr %t1148 %t1151 = extractvalue { ptr, i64, i64 } %t1150, 1 %t1152 = icmp uge i64 %t1149, %t1151 - br i1 %t1152, label %range3815, label %inrange3816 -range3815: + br i1 %t1152, label %range3819, label %inrange3820 +range3819: call void @finch_panic_index(ptr @.str.2376, i64 1625, i64 %t1149, i64 %t1151) unreachable -inrange3816: +inrange3820: %t1153 = extractvalue { ptr, i64, i64 } %t1150, 0 %t1154 = getelementptr inbounds %S.ast.Node, ptr %t1153, i64 %t1149 %t1155 = load %S.ast.Node, ptr %t1154 @@ -40684,8 +40710,8 @@ inrange3816: call void @finch.gen.fail(ptr %t1147, %S.ast.Node %t1155, { ptr, i64, i64 } %t1166) store { ptr, i64, i64 } %t1166, ptr %a1167 call void @finch_str_drop(ptr %a1167) - br label %endif3814 -endif3814: + br label %endif3818 +endif3818: %t1168 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 13 %t1169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1168, i32 0, i32 1 %t1170 = load ptr, ptr %a1 @@ -40694,11 +40720,11 @@ endif3814: %t1173 = load { ptr, i64, i64 }, ptr %t1171 %t1174 = extractvalue { ptr, i64, i64 } %t1173, 1 %t1175 = icmp uge i64 %t1172, %t1174 - br i1 %t1175, label %range3817, label %inrange3818 -range3817: + br i1 %t1175, label %range3821, label %inrange3822 +range3821: call void @finch_panic_index(ptr @.str.2379, i64 1627, i64 %t1172, i64 %t1174) unreachable -inrange3818: +inrange3822: %t1176 = extractvalue { ptr, i64, i64 } %t1173, 0 %t1177 = getelementptr inbounds %S.ast.Node, ptr %t1176, i64 %t1172 %t1178 = getelementptr inbounds %S.ast.Node, ptr %t1177, i32 0, i32 5 @@ -40708,11 +40734,11 @@ inrange3818: %t1182 = load { ptr, i64, i64 }, ptr %t1180 %t1183 = extractvalue { ptr, i64, i64 } %t1182, 1 %t1184 = icmp uge i64 %t1181, %t1183 - br i1 %t1184, label %range3819, label %inrange3820 -range3819: + br i1 %t1184, label %range3823, label %inrange3824 +range3823: call void @finch_panic_index(ptr @.str.2380, i64 1627, i64 %t1181, i64 %t1183) unreachable -inrange3820: +inrange3824: %t1185 = extractvalue { ptr, i64, i64 } %t1182, 0 %t1186 = getelementptr inbounds %S.ast.Node, ptr %t1185, i64 %t1181 %t1187 = load %S.ast.Node, ptr %t1186 @@ -40731,11 +40757,11 @@ inrange3820: %t1197 = load { ptr, i64, i64 }, ptr %t1195 %t1198 = extractvalue { ptr, i64, i64 } %t1197, 1 %t1199 = icmp uge i64 %t1196, %t1198 - br i1 %t1199, label %range3821, label %inrange3822 -range3821: + br i1 %t1199, label %range3825, label %inrange3826 +range3825: call void @finch_panic_index(ptr @.str.2381, i64 1628, i64 %t1196, i64 %t1198) unreachable -inrange3822: +inrange3826: %t1200 = extractvalue { ptr, i64, i64 } %t1197, 0 %t1201 = getelementptr inbounds %S.ast.Node, ptr %t1200, i64 %t1196 %t1202 = getelementptr inbounds %S.ast.Node, ptr %t1201, i32 0, i32 1 @@ -40750,30 +40776,30 @@ inrange3822: %t1210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1209, i64 %t1207 store { ptr, i64, i64 } %t1206, ptr %t1210 store i64 %t1208, ptr %t1194 - br label %for.step3804 -for.step3804: + br label %for.step3808 +for.step3808: %t1211 = load i64, ptr %a1126 %t1212 = add i64 %t1211, 1 store i64 %t1212, ptr %a1126 - br label %for.cond3802 -for.end3805: + br label %for.cond3806 +for.end3809: %t1213 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 %t1214 = load i1, ptr %t1213 - br i1 %t1214, label %then3823, label %endif3825 -then3823: + br i1 %t1214, label %then3827, label %endif3829 +then3827: %t1215 = load ptr, ptr %a1 %t1216 = load %S.ast.Node, ptr %a686 %t1217 = load %S.gen.FnSig, ptr %a1047 call void @finch.gen.checkExport(ptr %t1215, %S.ast.Node %t1216, %S.gen.FnSig %t1217) - br label %endif3825 -endif3825: + br label %endif3829 +endif3829: %t1218 = load ptr, ptr %a1 %t1219 = icmp eq ptr %t1218, null - br i1 %t1219, label %panic3826, label %ok3827 -panic3826: + br i1 %t1219, label %panic3830, label %ok3831 +panic3830: call void @finch_panic(ptr @.str.2382, i64 1633, ptr @.str.2383) unreachable -ok3827: +ok3831: %t1220 = getelementptr inbounds %S.gen.Gen, ptr %t1218, i32 0, i32 15 %t1221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1220, i32 0, i32 1 %t1222 = load %S.gen.FnSig, ptr %a1047 @@ -40790,125 +40816,125 @@ ok3827: call void @finch.drop.S_gen_FnSig(ptr %a1047) call void @finch_str_drop(ptr %a789) call void @finch.drop.S_ast_Node(ptr %a686) - br label %for.step3712 -for.step3712: + br label %for.step3716 +for.step3716: %t1230 = load i64, ptr %a663 %t1231 = add i64 %t1230, 1 store i64 %t1231, ptr %a663 - br label %for.cond3710 -for.end3713: - br label %for.step3698 -for.step3698: + br label %for.cond3714 +for.end3717: + br label %for.step3702 +for.step3702: %t1232 = load i64, ptr %a629 %t1233 = add i64 %t1232, 1 store i64 %t1233, ptr %a629 - br label %for.cond3696 -for.end3699: + br label %for.cond3700 +for.end3703: store i1 true, ptr %a1234 - br label %while.cond3828 -while.cond3828: + br label %while.cond3832 +while.cond3832: %t1235 = load i1, ptr %a1234 - br i1 %t1235, label %while.body3829, label %while.end3830 -while.body3829: + br i1 %t1235, label %while.body3833, label %while.end3834 +while.body3833: store i1 false, ptr %a1234 %t1236 = load ptr, ptr %a1 %t1237 = icmp eq ptr %t1236, null - br i1 %t1237, label %panic3831, label %ok3832 -panic3831: + br i1 %t1237, label %panic3835, label %ok3836 +panic3835: call void @finch_panic(ptr @.str.2384, i64 1641, ptr @.str.2385) unreachable -ok3832: +ok3836: %t1238 = getelementptr inbounds %S.gen.Gen, ptr %t1236, i32 0, i32 15 %t1239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1238, i32 0, i32 1 %t1240 = load i64, ptr %t1239 store i64 0, ptr %a1241 - br label %for.cond3833 -for.cond3833: + br label %for.cond3837 +for.cond3837: %t1242 = load i64, ptr %a1241 %t1243 = icmp slt i64 %t1242, %t1240 - br i1 %t1243, label %for.body3834, label %for.end3836 -for.body3834: + br i1 %t1243, label %for.body3838, label %for.end3840 +for.body3838: %t1244 = load ptr, ptr %a1 %t1245 = icmp eq ptr %t1244, null - br i1 %t1245, label %panic3837, label %ok3838 -panic3837: + br i1 %t1245, label %panic3841, label %ok3842 +panic3841: call void @finch_panic(ptr @.str.2386, i64 1642, ptr @.str.2387) unreachable -ok3838: +ok3842: %t1246 = getelementptr inbounds %S.gen.Gen, ptr %t1244, i32 0, i32 15 %t1247 = load i64, ptr %a1241 %t1248 = load { ptr, i64, i64 }, ptr %t1246 %t1249 = extractvalue { ptr, i64, i64 } %t1248, 1 %t1250 = icmp uge i64 %t1247, %t1249 - br i1 %t1250, label %range3839, label %inrange3840 -range3839: + br i1 %t1250, label %range3843, label %inrange3844 +range3843: call void @finch_panic_index(ptr @.str.2388, i64 1642, i64 %t1247, i64 %t1249) unreachable -inrange3840: +inrange3844: %t1251 = extractvalue { ptr, i64, i64 } %t1248, 0 %t1252 = getelementptr inbounds %S.gen.FnSig, ptr %t1251, i64 %t1247 %t1253 = getelementptr inbounds %S.gen.FnSig, ptr %t1252, i32 0, i32 2 %t1254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1253, i32 0, i32 1 %t1255 = load i64, ptr %t1254 %t1256 = icmp sgt i64 %t1255, 0 - br label %logic.from3841 -logic.from3841: - br i1 %t1256, label %logic.rhs3842, label %logic.end3843 -logic.rhs3842: + br label %logic.from3845 +logic.from3845: + br i1 %t1256, label %logic.rhs3846, label %logic.end3847 +logic.rhs3846: %t1257 = load ptr, ptr %a1 %t1258 = icmp eq ptr %t1257, null - br i1 %t1258, label %panic3844, label %ok3845 -panic3844: + br i1 %t1258, label %panic3848, label %ok3849 +panic3848: call void @finch_panic(ptr @.str.2389, i64 1642, ptr @.str.2390) unreachable -ok3845: +ok3849: %t1259 = getelementptr inbounds %S.gen.Gen, ptr %t1257, i32 0, i32 15 %t1260 = load i64, ptr %a1241 %t1261 = load { ptr, i64, i64 }, ptr %t1259 %t1262 = extractvalue { ptr, i64, i64 } %t1261, 1 %t1263 = icmp uge i64 %t1260, %t1262 - br i1 %t1263, label %range3846, label %inrange3847 -range3846: + br i1 %t1263, label %range3850, label %inrange3851 +range3850: call void @finch_panic_index(ptr @.str.2391, i64 1642, i64 %t1260, i64 %t1262) unreachable -inrange3847: +inrange3851: %t1264 = extractvalue { ptr, i64, i64 } %t1261, 0 %t1265 = getelementptr inbounds %S.gen.FnSig, ptr %t1264, i64 %t1260 %t1266 = getelementptr inbounds %S.gen.FnSig, ptr %t1265, i32 0, i32 10 %t1267 = load i1, ptr %t1266 %t1268 = xor i1 %t1267, true - br label %logic.rend3848 -logic.rend3848: - br label %logic.end3843 -logic.end3843: - %t1269 = phi i1 [ false, %logic.from3841 ], [ %t1268, %logic.rend3848 ] - br i1 %t1269, label %then3849, label %endif3851 -then3849: + br label %logic.rend3852 +logic.rend3852: + br label %logic.end3847 +logic.end3847: + %t1269 = phi i1 [ false, %logic.from3845 ], [ %t1268, %logic.rend3852 ] + br i1 %t1269, label %then3853, label %endif3855 +then3853: %t1270 = load ptr, ptr %a1 %t1271 = icmp eq ptr %t1270, null - br i1 %t1271, label %panic3852, label %ok3853 -panic3852: + br i1 %t1271, label %panic3856, label %ok3857 +panic3856: call void @finch_panic(ptr @.str.2392, i64 1643, ptr @.str.2393) unreachable -ok3853: +ok3857: %t1272 = getelementptr inbounds %S.gen.Gen, ptr %t1270, i32 0, i32 0 %t1273 = load ptr, ptr %a1 %t1274 = icmp eq ptr %t1273, null - br i1 %t1274, label %panic3854, label %ok3855 -panic3854: + br i1 %t1274, label %panic3858, label %ok3859 +panic3858: call void @finch_panic(ptr @.str.2394, i64 1643, ptr @.str.2395) unreachable -ok3855: +ok3859: %t1275 = getelementptr inbounds %S.gen.Gen, ptr %t1273, i32 0, i32 15 %t1276 = load i64, ptr %a1241 %t1277 = load { ptr, i64, i64 }, ptr %t1275 %t1278 = extractvalue { ptr, i64, i64 } %t1277, 1 %t1279 = icmp uge i64 %t1276, %t1278 - br i1 %t1279, label %range3856, label %inrange3857 -range3856: + br i1 %t1279, label %range3860, label %inrange3861 +range3860: call void @finch_panic_index(ptr @.str.2396, i64 1643, i64 %t1276, i64 %t1278) unreachable -inrange3857: +inrange3861: %t1280 = extractvalue { ptr, i64, i64 } %t1277, 0 %t1281 = getelementptr inbounds %S.gen.FnSig, ptr %t1280, i64 %t1276 %t1282 = getelementptr inbounds %S.gen.FnSig, ptr %t1281, i32 0, i32 16 @@ -40916,31 +40942,31 @@ inrange3857: %t1284 = load { ptr, i64, i64 }, ptr %t1272 %t1285 = extractvalue { ptr, i64, i64 } %t1284, 1 %t1286 = icmp uge i64 %t1283, %t1285 - br i1 %t1286, label %range3858, label %inrange3859 -range3858: + br i1 %t1286, label %range3862, label %inrange3863 +range3862: call void @finch_panic_index(ptr @.str.2397, i64 1643, i64 %t1283, i64 %t1285) unreachable -inrange3859: +inrange3863: %t1287 = extractvalue { ptr, i64, i64 } %t1284, 0 %t1288 = getelementptr inbounds %S.ast.Program, ptr %t1287, i64 %t1283 %t1289 = getelementptr inbounds %S.ast.Program, ptr %t1288, i32 0, i32 8 %t1290 = load ptr, ptr %a1 %t1291 = icmp eq ptr %t1290, null - br i1 %t1291, label %panic3860, label %ok3861 -panic3860: + br i1 %t1291, label %panic3864, label %ok3865 +panic3864: call void @finch_panic(ptr @.str.2398, i64 1643, ptr @.str.2399) unreachable -ok3861: +ok3865: %t1292 = getelementptr inbounds %S.gen.Gen, ptr %t1290, i32 0, i32 15 %t1293 = load i64, ptr %a1241 %t1294 = load { ptr, i64, i64 }, ptr %t1292 %t1295 = extractvalue { ptr, i64, i64 } %t1294, 1 %t1296 = icmp uge i64 %t1293, %t1295 - br i1 %t1296, label %range3862, label %inrange3863 -range3862: + br i1 %t1296, label %range3866, label %inrange3867 +range3866: call void @finch_panic_index(ptr @.str.2400, i64 1643, i64 %t1293, i64 %t1295) unreachable -inrange3863: +inrange3867: %t1297 = extractvalue { ptr, i64, i64 } %t1294, 0 %t1298 = getelementptr inbounds %S.gen.FnSig, ptr %t1297, i64 %t1293 %t1299 = getelementptr inbounds %S.gen.FnSig, ptr %t1298, i32 0, i32 17 @@ -40948,11 +40974,11 @@ inrange3863: %t1301 = load { ptr, i64, i64 }, ptr %t1289 %t1302 = extractvalue { ptr, i64, i64 } %t1301, 1 %t1303 = icmp uge i64 %t1300, %t1302 - br i1 %t1303, label %range3864, label %inrange3865 -range3864: + br i1 %t1303, label %range3868, label %inrange3869 +range3868: call void @finch_panic_index(ptr @.str.2401, i64 1643, i64 %t1300, i64 %t1302) unreachable -inrange3865: +inrange3869: %t1304 = extractvalue { ptr, i64, i64 } %t1301, 0 %t1305 = getelementptr inbounds %S.ast.Node, ptr %t1304, i64 %t1300 %t1306 = load %S.ast.Node, ptr %t1305 @@ -40969,64 +40995,64 @@ inrange3865: %t1317 = load { ptr, i64, i64 }, ptr %t1312 %t1318 = extractvalue { ptr, i64, i64 } %t1317, 1 %t1319 = icmp uge i64 %t1316, %t1318 - br i1 %t1319, label %range3866, label %inrange3867 -range3866: + br i1 %t1319, label %range3870, label %inrange3871 +range3870: call void @finch_panic_index(ptr @.str.2403, i64 1644, i64 %t1316, i64 %t1318) unreachable -inrange3867: +inrange3871: %t1320 = extractvalue { ptr, i64, i64 } %t1317, 0 %t1321 = getelementptr inbounds %S.ast.Node, ptr %t1320, i64 %t1316 %t1322 = load %S.ast.Node, ptr %t1321 %t1323 = call i1 @finch.gen.mutates(ptr %t1311, { ptr, i64, i64 } { ptr @.str.2402, i64 4, i64 0 }, %S.ast.Node %t1322) - br i1 %t1323, label %then3868, label %endif3870 -then3868: + br i1 %t1323, label %then3872, label %endif3874 +then3872: %t1324 = load ptr, ptr %a1 %t1325 = icmp eq ptr %t1324, null - br i1 %t1325, label %panic3871, label %ok3872 -panic3871: + br i1 %t1325, label %panic3875, label %ok3876 +panic3875: call void @finch_panic(ptr @.str.2404, i64 1645, ptr @.str.2405) unreachable -ok3872: +ok3876: %t1326 = getelementptr inbounds %S.gen.Gen, ptr %t1324, i32 0, i32 15 %t1327 = load i64, ptr %a1241 %t1328 = load { ptr, i64, i64 }, ptr %t1326 %t1329 = extractvalue { ptr, i64, i64 } %t1328, 1 %t1330 = icmp uge i64 %t1327, %t1329 - br i1 %t1330, label %range3873, label %inrange3874 -range3873: + br i1 %t1330, label %range3877, label %inrange3878 +range3877: call void @finch_panic_index(ptr @.str.2406, i64 1645, i64 %t1327, i64 %t1329) unreachable -inrange3874: +inrange3878: %t1331 = extractvalue { ptr, i64, i64 } %t1328, 0 %t1332 = getelementptr inbounds %S.gen.FnSig, ptr %t1331, i64 %t1327 %t1333 = getelementptr inbounds %S.gen.FnSig, ptr %t1332, i32 0, i32 10 store i1 true, ptr %t1333 %t1334 = load ptr, ptr %a1 %t1335 = icmp eq ptr %t1334, null - br i1 %t1335, label %panic3875, label %ok3876 -panic3875: + br i1 %t1335, label %panic3879, label %ok3880 +panic3879: call void @finch_panic(ptr @.str.2407, i64 1646, ptr @.str.2408) unreachable -ok3876: +ok3880: %t1336 = getelementptr inbounds %S.gen.Gen, ptr %t1334, i32 0, i32 24 %t1337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1336, i32 0, i32 1 %t1338 = load ptr, ptr %a1 %t1339 = icmp eq ptr %t1338, null - br i1 %t1339, label %panic3877, label %ok3878 -panic3877: + br i1 %t1339, label %panic3881, label %ok3882 +panic3881: call void @finch_panic(ptr @.str.2409, i64 1646, ptr @.str.2410) unreachable -ok3878: +ok3882: %t1340 = getelementptr inbounds %S.gen.Gen, ptr %t1338, i32 0, i32 15 %t1341 = load i64, ptr %a1241 %t1342 = load { ptr, i64, i64 }, ptr %t1340 %t1343 = extractvalue { ptr, i64, i64 } %t1342, 1 %t1344 = icmp uge i64 %t1341, %t1343 - br i1 %t1344, label %range3879, label %inrange3880 -range3879: + br i1 %t1344, label %range3883, label %inrange3884 +range3883: call void @finch_panic_index(ptr @.str.2411, i64 1646, i64 %t1341, i64 %t1343) unreachable -inrange3880: +inrange3884: %t1345 = extractvalue { ptr, i64, i64 } %t1342, 0 %t1346 = getelementptr inbounds %S.gen.FnSig, ptr %t1345, i64 %t1341 %t1347 = getelementptr inbounds %S.gen.FnSig, ptr %t1346, i32 0, i32 1 @@ -41042,52 +41068,52 @@ inrange3880: store { ptr, i64, i64 } %t1351, ptr %t1355 store i64 %t1353, ptr %t1337 store i1 true, ptr %a1234 - br label %endif3870 -endif3870: + br label %endif3874 +endif3874: call void @finch.drop.S_ast_Node(ptr %a1310) - br label %endif3851 -endif3851: - br label %for.step3835 -for.step3835: + br label %endif3855 +endif3855: + br label %for.step3839 +for.step3839: %t1356 = load i64, ptr %a1241 %t1357 = add i64 %t1356, 1 store i64 %t1357, ptr %a1241 - br label %for.cond3833 -for.end3836: + br label %for.cond3837 +for.end3840: %t1358 = load ptr, ptr %a1 %t1359 = icmp eq ptr %t1358, null - br i1 %t1359, label %panic3881, label %ok3882 -panic3881: + br i1 %t1359, label %panic3885, label %ok3886 +panic3885: call void @finch_panic(ptr @.str.2412, i64 1651, ptr @.str.2413) unreachable -ok3882: +ok3886: %t1360 = getelementptr inbounds %S.gen.Gen, ptr %t1358, i32 0, i32 17 %t1361 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1360, i32 0, i32 1 %t1362 = load i64, ptr %t1361 store i64 0, ptr %a1363 - br label %for.cond3883 -for.cond3883: + br label %for.cond3887 +for.cond3887: %t1364 = load i64, ptr %a1363 %t1365 = icmp slt i64 %t1364, %t1362 - br i1 %t1365, label %for.body3884, label %for.end3886 -for.body3884: + br i1 %t1365, label %for.body3888, label %for.end3890 +for.body3888: %t1366 = load ptr, ptr %a1 %t1367 = icmp eq ptr %t1366, null - br i1 %t1367, label %panic3887, label %ok3888 -panic3887: + br i1 %t1367, label %panic3891, label %ok3892 +panic3891: call void @finch_panic(ptr @.str.2414, i64 1652, ptr @.str.2415) unreachable -ok3888: +ok3892: %t1368 = getelementptr inbounds %S.gen.Gen, ptr %t1366, i32 0, i32 17 %t1369 = load i64, ptr %a1363 %t1370 = load { ptr, i64, i64 }, ptr %t1368 %t1371 = extractvalue { ptr, i64, i64 } %t1370, 1 %t1372 = icmp uge i64 %t1369, %t1371 - br i1 %t1372, label %range3889, label %inrange3890 -range3889: + br i1 %t1372, label %range3893, label %inrange3894 +range3893: call void @finch_panic_index(ptr @.str.2416, i64 1652, i64 %t1369, i64 %t1371) unreachable -inrange3890: +inrange3894: %t1373 = extractvalue { ptr, i64, i64 } %t1370, 0 %t1374 = getelementptr inbounds %S.gen.Template, ptr %t1373, i64 %t1369 %t1375 = load %S.gen.Template, ptr %t1374 @@ -41099,38 +41125,38 @@ inrange3890: %t1381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1380, i32 0, i32 1 %t1382 = load i64, ptr %t1381 %t1383 = icmp sgt i64 %t1382, 0 - br label %logic.from3891 -logic.from3891: - br i1 %t1383, label %logic.rhs3892, label %logic.end3893 -logic.rhs3892: + br label %logic.from3895 +logic.from3895: + br i1 %t1383, label %logic.rhs3896, label %logic.end3897 +logic.rhs3896: %t1384 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 7 %t1385 = load i1, ptr %t1384 %t1386 = xor i1 %t1385, true - br label %logic.rend3894 -logic.rend3894: - br label %logic.end3893 -logic.end3893: - %t1387 = phi i1 [ false, %logic.from3891 ], [ %t1386, %logic.rend3894 ] - br i1 %t1387, label %then3895, label %endif3897 -then3895: + br label %logic.rend3898 +logic.rend3898: + br label %logic.end3897 +logic.end3897: + %t1387 = phi i1 [ false, %logic.from3895 ], [ %t1386, %logic.rend3898 ] + br i1 %t1387, label %then3899, label %endif3901 +then3899: %t1388 = load ptr, ptr %a1 %t1389 = icmp eq ptr %t1388, null - br i1 %t1389, label %panic3898, label %ok3899 -panic3898: + br i1 %t1389, label %panic3902, label %ok3903 +panic3902: call void @finch_panic(ptr @.str.2417, i64 1654, ptr @.str.2418) unreachable -ok3899: +ok3903: %t1390 = getelementptr inbounds %S.gen.Gen, ptr %t1388, i32 0, i32 0 %t1391 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 4 %t1392 = load i64, ptr %t1391 %t1393 = load { ptr, i64, i64 }, ptr %t1390 %t1394 = extractvalue { ptr, i64, i64 } %t1393, 1 %t1395 = icmp uge i64 %t1392, %t1394 - br i1 %t1395, label %range3900, label %inrange3901 -range3900: + br i1 %t1395, label %range3904, label %inrange3905 +range3904: call void @finch_panic_index(ptr @.str.2419, i64 1654, i64 %t1392, i64 %t1394) unreachable -inrange3901: +inrange3905: %t1396 = extractvalue { ptr, i64, i64 } %t1393, 0 %t1397 = getelementptr inbounds %S.ast.Program, ptr %t1396, i64 %t1392 %t1398 = getelementptr inbounds %S.ast.Program, ptr %t1397, i32 0, i32 8 @@ -41139,11 +41165,11 @@ inrange3901: %t1401 = load { ptr, i64, i64 }, ptr %t1398 %t1402 = extractvalue { ptr, i64, i64 } %t1401, 1 %t1403 = icmp uge i64 %t1400, %t1402 - br i1 %t1403, label %range3902, label %inrange3903 -range3902: + br i1 %t1403, label %range3906, label %inrange3907 +range3906: call void @finch_panic_index(ptr @.str.2420, i64 1654, i64 %t1400, i64 %t1402) unreachable -inrange3903: +inrange3907: %t1404 = extractvalue { ptr, i64, i64 } %t1401, 0 %t1405 = getelementptr inbounds %S.ast.Node, ptr %t1404, i64 %t1400 %t1406 = load %S.ast.Node, ptr %t1405 @@ -41160,45 +41186,45 @@ inrange3903: %t1417 = load { ptr, i64, i64 }, ptr %t1412 %t1418 = extractvalue { ptr, i64, i64 } %t1417, 1 %t1419 = icmp uge i64 %t1416, %t1418 - br i1 %t1419, label %range3904, label %inrange3905 -range3904: + br i1 %t1419, label %range3908, label %inrange3909 +range3908: call void @finch_panic_index(ptr @.str.2422, i64 1655, i64 %t1416, i64 %t1418) unreachable -inrange3905: +inrange3909: %t1420 = extractvalue { ptr, i64, i64 } %t1417, 0 %t1421 = getelementptr inbounds %S.ast.Node, ptr %t1420, i64 %t1416 %t1422 = load %S.ast.Node, ptr %t1421 %t1423 = call i1 @finch.gen.mutates(ptr %t1411, { ptr, i64, i64 } { ptr @.str.2421, i64 4, i64 0 }, %S.ast.Node %t1422) - br i1 %t1423, label %then3906, label %endif3908 -then3906: + br i1 %t1423, label %then3910, label %endif3912 +then3910: %t1424 = load ptr, ptr %a1 %t1425 = icmp eq ptr %t1424, null - br i1 %t1425, label %panic3909, label %ok3910 -panic3909: + br i1 %t1425, label %panic3913, label %ok3914 +panic3913: call void @finch_panic(ptr @.str.2423, i64 1656, ptr @.str.2424) unreachable -ok3910: +ok3914: %t1426 = getelementptr inbounds %S.gen.Gen, ptr %t1424, i32 0, i32 17 %t1427 = load i64, ptr %a1363 %t1428 = load { ptr, i64, i64 }, ptr %t1426 %t1429 = extractvalue { ptr, i64, i64 } %t1428, 1 %t1430 = icmp uge i64 %t1427, %t1429 - br i1 %t1430, label %range3911, label %inrange3912 -range3911: + br i1 %t1430, label %range3915, label %inrange3916 +range3915: call void @finch_panic_index(ptr @.str.2425, i64 1656, i64 %t1427, i64 %t1429) unreachable -inrange3912: +inrange3916: %t1431 = extractvalue { ptr, i64, i64 } %t1428, 0 %t1432 = getelementptr inbounds %S.gen.Template, ptr %t1431, i64 %t1427 %t1433 = getelementptr inbounds %S.gen.Template, ptr %t1432, i32 0, i32 7 store i1 true, ptr %t1433 %t1434 = load ptr, ptr %a1 %t1435 = icmp eq ptr %t1434, null - br i1 %t1435, label %panic3913, label %ok3914 -panic3913: + br i1 %t1435, label %panic3917, label %ok3918 +panic3917: call void @finch_panic(ptr @.str.2426, i64 1657, ptr @.str.2427) unreachable -ok3914: +ok3918: %t1436 = getelementptr inbounds %S.gen.Gen, ptr %t1434, i32 0, i32 24 %t1437 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1436, i32 0, i32 1 %t1438 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 1 @@ -41214,63 +41240,63 @@ ok3914: store { ptr, i64, i64 } %t1442, ptr %t1446 store i64 %t1444, ptr %t1437 store i1 true, ptr %a1234 - br label %endif3908 -endif3908: + br label %endif3912 +endif3912: call void @finch.drop.S_ast_Node(ptr %a1410) - br label %endif3897 -endif3897: + br label %endif3901 +endif3901: call void @finch.drop.S_gen_Template(ptr %a1379) - br label %for.step3885 -for.step3885: + br label %for.step3889 +for.step3889: %t1447 = load i64, ptr %a1363 %t1448 = add i64 %t1447, 1 store i64 %t1448, ptr %a1363 - br label %for.cond3883 -for.end3886: - br label %while.cond3828 -while.end3830: + br label %for.cond3887 +for.end3890: + br label %while.cond3832 +while.end3834: %t1449 = load ptr, ptr %a1 %t1450 = icmp eq ptr %t1449, null - br i1 %t1450, label %panic3915, label %ok3916 -panic3915: + br i1 %t1450, label %panic3919, label %ok3920 +panic3919: call void @finch_panic(ptr @.str.2428, i64 1664, ptr @.str.2429) unreachable -ok3916: +ok3920: %t1451 = getelementptr inbounds %S.gen.Gen, ptr %t1449, i32 0, i32 15 %t1452 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1451, i32 0, i32 1 %t1453 = load i64, ptr %t1452 store i64 0, ptr %a1454 - br label %for.cond3917 -for.cond3917: + br label %for.cond3921 +for.cond3921: %t1455 = load i64, ptr %a1454 %t1456 = icmp slt i64 %t1455, %t1453 - br i1 %t1456, label %for.body3918, label %for.end3920 -for.body3918: + br i1 %t1456, label %for.body3922, label %for.end3924 +for.body3922: %t1457 = load ptr, ptr %a1 %t1458 = icmp eq ptr %t1457, null - br i1 %t1458, label %panic3921, label %ok3922 -panic3921: + br i1 %t1458, label %panic3925, label %ok3926 +panic3925: call void @finch_panic(ptr @.str.2430, i64 1665, ptr @.str.2431) unreachable -ok3922: +ok3926: %t1459 = getelementptr inbounds %S.gen.Gen, ptr %t1457, i32 0, i32 0 %t1460 = load ptr, ptr %a1 %t1461 = icmp eq ptr %t1460, null - br i1 %t1461, label %panic3923, label %ok3924 -panic3923: + br i1 %t1461, label %panic3927, label %ok3928 +panic3927: call void @finch_panic(ptr @.str.2432, i64 1665, ptr @.str.2433) unreachable -ok3924: +ok3928: %t1462 = getelementptr inbounds %S.gen.Gen, ptr %t1460, i32 0, i32 15 %t1463 = load i64, ptr %a1454 %t1464 = load { ptr, i64, i64 }, ptr %t1462 %t1465 = extractvalue { ptr, i64, i64 } %t1464, 1 %t1466 = icmp uge i64 %t1463, %t1465 - br i1 %t1466, label %range3925, label %inrange3926 -range3925: + br i1 %t1466, label %range3929, label %inrange3930 +range3929: call void @finch_panic_index(ptr @.str.2434, i64 1665, i64 %t1463, i64 %t1465) unreachable -inrange3926: +inrange3930: %t1467 = extractvalue { ptr, i64, i64 } %t1464, 0 %t1468 = getelementptr inbounds %S.gen.FnSig, ptr %t1467, i64 %t1463 %t1469 = getelementptr inbounds %S.gen.FnSig, ptr %t1468, i32 0, i32 16 @@ -41278,31 +41304,31 @@ inrange3926: %t1471 = load { ptr, i64, i64 }, ptr %t1459 %t1472 = extractvalue { ptr, i64, i64 } %t1471, 1 %t1473 = icmp uge i64 %t1470, %t1472 - br i1 %t1473, label %range3927, label %inrange3928 -range3927: + br i1 %t1473, label %range3931, label %inrange3932 +range3931: call void @finch_panic_index(ptr @.str.2435, i64 1665, i64 %t1470, i64 %t1472) unreachable -inrange3928: +inrange3932: %t1474 = extractvalue { ptr, i64, i64 } %t1471, 0 %t1475 = getelementptr inbounds %S.ast.Program, ptr %t1474, i64 %t1470 %t1476 = getelementptr inbounds %S.ast.Program, ptr %t1475, i32 0, i32 8 %t1477 = load ptr, ptr %a1 %t1478 = icmp eq ptr %t1477, null - br i1 %t1478, label %panic3929, label %ok3930 -panic3929: + br i1 %t1478, label %panic3933, label %ok3934 +panic3933: call void @finch_panic(ptr @.str.2436, i64 1665, ptr @.str.2437) unreachable -ok3930: +ok3934: %t1479 = getelementptr inbounds %S.gen.Gen, ptr %t1477, i32 0, i32 15 %t1480 = load i64, ptr %a1454 %t1481 = load { ptr, i64, i64 }, ptr %t1479 %t1482 = extractvalue { ptr, i64, i64 } %t1481, 1 %t1483 = icmp uge i64 %t1480, %t1482 - br i1 %t1483, label %range3931, label %inrange3932 -range3931: + br i1 %t1483, label %range3935, label %inrange3936 +range3935: call void @finch_panic_index(ptr @.str.2438, i64 1665, i64 %t1480, i64 %t1482) unreachable -inrange3932: +inrange3936: %t1484 = extractvalue { ptr, i64, i64 } %t1481, 0 %t1485 = getelementptr inbounds %S.gen.FnSig, ptr %t1484, i64 %t1480 %t1486 = getelementptr inbounds %S.gen.FnSig, ptr %t1485, i32 0, i32 17 @@ -41310,11 +41336,11 @@ inrange3932: %t1488 = load { ptr, i64, i64 }, ptr %t1476 %t1489 = extractvalue { ptr, i64, i64 } %t1488, 1 %t1490 = icmp uge i64 %t1487, %t1489 - br i1 %t1490, label %range3933, label %inrange3934 -range3933: + br i1 %t1490, label %range3937, label %inrange3938 +range3937: call void @finch_panic_index(ptr @.str.2439, i64 1665, i64 %t1487, i64 %t1489) unreachable -inrange3934: +inrange3938: %t1491 = extractvalue { ptr, i64, i64 } %t1488, 0 %t1492 = getelementptr inbounds %S.ast.Node, ptr %t1491, i64 %t1487 %t1493 = load %S.ast.Node, ptr %t1492 @@ -41330,11 +41356,11 @@ inrange3934: %t1503 = load { ptr, i64, i64 }, ptr %t1498 %t1504 = extractvalue { ptr, i64, i64 } %t1503, 1 %t1505 = icmp uge i64 %t1502, %t1504 - br i1 %t1505, label %range3935, label %inrange3936 -range3935: + br i1 %t1505, label %range3939, label %inrange3940 +range3939: call void @finch_panic_index(ptr @.str.2440, i64 1666, i64 %t1502, i64 %t1504) unreachable -inrange3936: +inrange3940: %t1506 = extractvalue { ptr, i64, i64 } %t1503, 0 %t1507 = getelementptr inbounds %S.ast.Node, ptr %t1506, i64 %t1502 %t1508 = load %S.ast.Node, ptr %t1507 @@ -41344,50 +41370,50 @@ inrange3936: store %S.ast.Node %t1511, ptr %a1512 %t1513 = load ptr, ptr %a1 %t1514 = icmp eq ptr %t1513, null - br i1 %t1514, label %panic3937, label %ok3938 -panic3937: + br i1 %t1514, label %panic3941, label %ok3942 +panic3941: call void @finch_panic(ptr @.str.2441, i64 1667, ptr @.str.2442) unreachable -ok3938: +ok3942: %t1515 = getelementptr inbounds %S.gen.Gen, ptr %t1513, i32 0, i32 15 %t1516 = load i64, ptr %a1454 %t1517 = load { ptr, i64, i64 }, ptr %t1515 %t1518 = extractvalue { ptr, i64, i64 } %t1517, 1 %t1519 = icmp uge i64 %t1516, %t1518 - br i1 %t1519, label %range3939, label %inrange3940 -range3939: + br i1 %t1519, label %range3943, label %inrange3944 +range3943: call void @finch_panic_index(ptr @.str.2443, i64 1667, i64 %t1516, i64 %t1518) unreachable -inrange3940: +inrange3944: %t1520 = extractvalue { ptr, i64, i64 } %t1517, 0 %t1521 = getelementptr inbounds %S.gen.FnSig, ptr %t1520, i64 %t1516 %t1522 = getelementptr inbounds %S.gen.FnSig, ptr %t1521, i32 0, i32 13 %t1523 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1522, i32 0, i32 1 %t1524 = load i64, ptr %t1523 store i64 0, ptr %a1525 - br label %for.cond3941 -for.cond3941: + br label %for.cond3945 +for.cond3945: %t1526 = load i64, ptr %a1525 %t1527 = icmp slt i64 %t1526, %t1524 - br i1 %t1527, label %for.body3942, label %for.end3944 -for.body3942: + br i1 %t1527, label %for.body3946, label %for.end3948 +for.body3946: %t1528 = load ptr, ptr %a1 %t1529 = icmp eq ptr %t1528, null - br i1 %t1529, label %panic3945, label %ok3946 -panic3945: + br i1 %t1529, label %panic3949, label %ok3950 +panic3949: call void @finch_panic(ptr @.str.2444, i64 1668, ptr @.str.2445) unreachable -ok3946: +ok3950: %t1530 = getelementptr inbounds %S.gen.Gen, ptr %t1528, i32 0, i32 15 %t1531 = load i64, ptr %a1454 %t1532 = load { ptr, i64, i64 }, ptr %t1530 %t1533 = extractvalue { ptr, i64, i64 } %t1532, 1 %t1534 = icmp uge i64 %t1531, %t1533 - br i1 %t1534, label %range3947, label %inrange3948 -range3947: + br i1 %t1534, label %range3951, label %inrange3952 +range3951: call void @finch_panic_index(ptr @.str.2446, i64 1668, i64 %t1531, i64 %t1533) unreachable -inrange3948: +inrange3952: %t1535 = extractvalue { ptr, i64, i64 } %t1532, 0 %t1536 = getelementptr inbounds %S.gen.FnSig, ptr %t1535, i64 %t1531 %t1537 = getelementptr inbounds %S.gen.FnSig, ptr %t1536, i32 0, i32 13 @@ -41395,11 +41421,11 @@ inrange3948: %t1539 = load { ptr, i64, i64 }, ptr %t1537 %t1540 = extractvalue { ptr, i64, i64 } %t1539, 1 %t1541 = icmp uge i64 %t1538, %t1540 - br i1 %t1541, label %range3949, label %inrange3950 -range3949: + br i1 %t1541, label %range3953, label %inrange3954 +range3953: call void @finch_panic_index(ptr @.str.2447, i64 1668, i64 %t1538, i64 %t1540) unreachable -inrange3950: +inrange3954: %t1542 = extractvalue { ptr, i64, i64 } %t1539, 0 %t1543 = getelementptr inbounds %S.ast.Type, ptr %t1542, i64 %t1538 %t1544 = load %S.ast.Type, ptr %t1543 @@ -41409,21 +41435,21 @@ inrange3950: store %S.ast.Type %t1547, ptr %a1548 %t1549 = load ptr, ptr %a1 %t1550 = icmp eq ptr %t1549, null - br i1 %t1550, label %panic3951, label %ok3952 -panic3951: + br i1 %t1550, label %panic3955, label %ok3956 +panic3955: call void @finch_panic(ptr @.str.2448, i64 1669, ptr @.str.2449) unreachable -ok3952: +ok3956: %t1551 = getelementptr inbounds %S.gen.Gen, ptr %t1549, i32 0, i32 15 %t1552 = load i64, ptr %a1454 %t1553 = load { ptr, i64, i64 }, ptr %t1551 %t1554 = extractvalue { ptr, i64, i64 } %t1553, 1 %t1555 = icmp uge i64 %t1552, %t1554 - br i1 %t1555, label %range3953, label %inrange3954 -range3953: + br i1 %t1555, label %range3957, label %inrange3958 +range3957: call void @finch_panic_index(ptr @.str.2450, i64 1669, i64 %t1552, i64 %t1554) unreachable -inrange3954: +inrange3958: %t1556 = extractvalue { ptr, i64, i64 } %t1553, 0 %t1557 = getelementptr inbounds %S.gen.FnSig, ptr %t1556, i64 %t1552 %t1558 = getelementptr inbounds %S.gen.FnSig, ptr %t1557, i32 0, i32 15 @@ -41431,28 +41457,28 @@ inrange3954: %t1560 = load ptr, ptr %a1 %t1561 = load %S.ast.Type, ptr %a1548 %t1562 = call i1 @finch.gen.owning(ptr %t1560, %S.ast.Type %t1561) - br label %logic.from3955 -logic.from3955: - br i1 %t1562, label %logic.rhs3956, label %logic.end3957 -logic.rhs3956: + br label %logic.from3959 +logic.from3959: + br i1 %t1562, label %logic.rhs3960, label %logic.end3961 +logic.rhs3960: %t1563 = load ptr, ptr %a1 %t1564 = load ptr, ptr %a1 %t1565 = icmp eq ptr %t1564, null - br i1 %t1565, label %panic3958, label %ok3959 -panic3958: + br i1 %t1565, label %panic3962, label %ok3963 +panic3962: call void @finch_panic(ptr @.str.2451, i64 1669, ptr @.str.2452) unreachable -ok3959: +ok3963: %t1566 = getelementptr inbounds %S.gen.Gen, ptr %t1564, i32 0, i32 15 %t1567 = load i64, ptr %a1454 %t1568 = load { ptr, i64, i64 }, ptr %t1566 %t1569 = extractvalue { ptr, i64, i64 } %t1568, 1 %t1570 = icmp uge i64 %t1567, %t1569 - br i1 %t1570, label %range3960, label %inrange3961 -range3960: + br i1 %t1570, label %range3964, label %inrange3965 +range3964: call void @finch_panic_index(ptr @.str.2453, i64 1669, i64 %t1567, i64 %t1569) unreachable -inrange3961: +inrange3965: %t1571 = extractvalue { ptr, i64, i64 } %t1568, 0 %t1572 = getelementptr inbounds %S.gen.FnSig, ptr %t1571, i64 %t1567 %t1573 = getelementptr inbounds %S.gen.FnSig, ptr %t1572, i32 0, i32 14 @@ -41460,22 +41486,22 @@ inrange3961: %t1575 = load { ptr, i64, i64 }, ptr %t1573 %t1576 = extractvalue { ptr, i64, i64 } %t1575, 1 %t1577 = icmp uge i64 %t1574, %t1576 - br i1 %t1577, label %range3962, label %inrange3963 -range3962: + br i1 %t1577, label %range3966, label %inrange3967 +range3966: call void @finch_panic_index(ptr @.str.2454, i64 1669, i64 %t1574, i64 %t1576) unreachable -inrange3963: +inrange3967: %t1578 = extractvalue { ptr, i64, i64 } %t1575, 0 %t1579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1578, i64 %t1574 %t1580 = load { ptr, i64, i64 }, ptr %t1579 %t1581 = load %S.ast.Node, ptr %a1512 %t1582 = call i1 @finch.gen.mutates(ptr %t1563, { ptr, i64, i64 } %t1580, %S.ast.Node %t1581) %t1583 = xor i1 %t1582, true - br label %logic.rend3964 -logic.rend3964: - br label %logic.end3957 -logic.end3957: - %t1584 = phi i1 [ false, %logic.from3955 ], [ %t1583, %logic.rend3964 ] + br label %logic.rend3968 +logic.rend3968: + br label %logic.end3961 +logic.end3961: + %t1584 = phi i1 [ false, %logic.from3959 ], [ %t1583, %logic.rend3968 ] %t1585 = load i64, ptr %t1559 %t1586 = add i64 %t1585, 1 call void @finch_arr_reserve(ptr %t1558, i64 %t1586, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) @@ -41484,22 +41510,22 @@ logic.end3957: store i1 %t1584, ptr %t1588 store i64 %t1586, ptr %t1559 call void @finch.drop.S_ast_Type(ptr %a1548) - br label %for.step3943 -for.step3943: + br label %for.step3947 +for.step3947: %t1589 = load i64, ptr %a1525 %t1590 = add i64 %t1589, 1 store i64 %t1590, ptr %a1525 - br label %for.cond3941 -for.end3944: + br label %for.cond3945 +for.end3948: call void @finch.drop.S_ast_Node(ptr %a1512) call void @finch.drop.S_ast_Node(ptr %a1497) - br label %for.step3919 -for.step3919: + br label %for.step3923 +for.step3923: %t1591 = load i64, ptr %a1454 %t1592 = add i64 %t1591, 1 store i64 %t1592, ptr %a1454 - br label %for.cond3917 -for.end3920: + br label %for.cond3921 +for.end3924: ret void } @@ -41527,38 +41553,38 @@ entry: store i1 %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic3965, label %ok3966 -panic3965: + br i1 %t7, label %panic3969, label %ok3970 +panic3969: call void @finch_panic(ptr @.str.2455, i64 1675, ptr @.str.2456) unreachable -ok3966: +ok3970: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 store i64 0, ptr %a11 - br label %for.cond3967 -for.cond3967: + br label %for.cond3971 +for.cond3971: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t10 - br i1 %t13, label %for.body3968, label %for.end3970 -for.body3968: + br i1 %t13, label %for.body3972, label %for.end3974 +for.body3972: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic3971, label %ok3972 -panic3971: + br i1 %t15, label %panic3975, label %ok3976 +panic3975: call void @finch_panic(ptr @.str.2457, i64 1676, ptr @.str.2458) unreachable -ok3972: +ok3976: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 17 %t17 = load i64, ptr %a11 %t18 = load { ptr, i64, i64 }, ptr %t16 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 - br i1 %t20, label %range3973, label %inrange3974 -range3973: + br i1 %t20, label %range3977, label %inrange3978 +range3977: call void @finch_panic_index(ptr @.str.2459, i64 1676, i64 %t17, i64 %t19) unreachable -inrange3974: +inrange3978: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.Template, ptr %t21, i64 %t17 %t23 = load %S.gen.Template, ptr %t22 @@ -41573,10 +41599,10 @@ inrange3974: store { ptr, i64, i64 } %t30, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 - br label %logic.from3975 -logic.from3975: - br i1 %t34, label %logic.rhs3976, label %logic.end3977 -logic.rhs3976: + br label %logic.from3979 +logic.from3979: + br i1 %t34, label %logic.rhs3980, label %logic.end3981 +logic.rhs3980: %t35 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 1 %t36 = load { ptr, i64, i64 }, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %a3 @@ -41584,15 +41610,15 @@ logic.rhs3976: store { ptr, i64, i64 } %t37, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 - br label %logic.rend3978 -logic.rend3978: - br label %logic.end3977 -logic.end3977: - %t42 = phi i1 [ false, %logic.from3975 ], [ %t41, %logic.rend3978 ] - br label %logic.from3979 -logic.from3979: - br i1 %t42, label %logic.rhs3980, label %logic.end3981 -logic.rhs3980: + br label %logic.rend3982 +logic.rend3982: + br label %logic.end3981 +logic.end3981: + %t42 = phi i1 [ false, %logic.from3979 ], [ %t41, %logic.rend3982 ] + br label %logic.from3983 +logic.from3983: + br i1 %t42, label %logic.rhs3984, label %logic.end3985 +logic.rhs3984: %t43 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 2 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = load { ptr, i64, i64 }, ptr %a4 @@ -41600,38 +41626,38 @@ logic.rhs3980: store { ptr, i64, i64 } %t45, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 - br label %logic.rend3982 -logic.rend3982: - br label %logic.end3981 -logic.end3981: - %t50 = phi i1 [ false, %logic.from3979 ], [ %t49, %logic.rend3982 ] - br label %logic.from3983 -logic.from3983: - br i1 %t50, label %logic.rhs3984, label %logic.end3985 -logic.rhs3984: - %t51 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 6 - %t52 = load i1, ptr %t51 - %t53 = load i1, ptr %a5 - %t54 = icmp eq i1 %t52, %t53 br label %logic.rend3986 logic.rend3986: br label %logic.end3985 logic.end3985: - %t55 = phi i1 [ false, %logic.from3983 ], [ %t54, %logic.rend3986 ] - br i1 %t55, label %then3987, label %endif3989 -then3987: + %t50 = phi i1 [ false, %logic.from3983 ], [ %t49, %logic.rend3986 ] + br label %logic.from3987 +logic.from3987: + br i1 %t50, label %logic.rhs3988, label %logic.end3989 +logic.rhs3988: + %t51 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 6 + %t52 = load i1, ptr %t51 + %t53 = load i1, ptr %a5 + %t54 = icmp eq i1 %t52, %t53 + br label %logic.rend3990 +logic.rend3990: + br label %logic.end3989 +logic.end3989: + %t55 = phi i1 [ false, %logic.from3987 ], [ %t54, %logic.rend3990 ] + br i1 %t55, label %then3991, label %endif3993 +then3991: %t56 = load i64, ptr %a11 call void @finch.drop.S_gen_Template(ptr %a27) ret i64 %t56 -endif3989: +endif3993: call void @finch.drop.S_gen_Template(ptr %a27) - br label %for.step3969 -for.step3969: + br label %for.step3973 +for.step3973: %t57 = load i64, ptr %a11 %t58 = add i64 %t57, 1 store i64 %t58, ptr %a11 - br label %for.cond3967 -for.end3970: + br label %for.cond3971 +for.end3974: ret i64 -1 } @@ -41646,14 +41672,14 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 store i64 0, ptr %a3 - br label %each.cond3990 -each.cond3990: + br label %each.cond3994 +each.cond3994: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body3991, label %each.end3993 -each.body3991: + br i1 %t7, label %each.body3995, label %each.end3997 +each.body3995: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 %t6 %t10 = load %S.ast.Type, ptr %t9 @@ -41668,13 +41694,13 @@ each.body3991: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t15 store { ptr, i64, i64 } %t14, ptr %t18 store i64 %t16, ptr %t12 - br label %each.step3992 -each.step3992: + br label %each.step3996 +each.step3996: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 - br label %each.cond3990 -each.end3993: + br label %each.cond3994 +each.end3997: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2460, i64 2, i64 0 }, ptr %a22 call void @finch_str_join(ptr %a23, ptr %a2, ptr %a22) @@ -41788,8 +41814,8 @@ entry: store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 - br i1 %t12, label %then3994, label %endif3996 -then3994: + br i1 %t12, label %then3998, label %endif4000 +then3998: %t13 = load ptr, ptr %a1 %t14 = load %S.ast.Node, ptr %a5 %t15 = load { ptr, i64, i64 }, ptr %a3 @@ -41819,25 +41845,25 @@ then3994: call void @finch.gen.fail(ptr %t13, %S.ast.Node %t14, { ptr, i64, i64 } %t35) store { ptr, i64, i64 } %t35, ptr %a36 call void @finch_str_drop(ptr %a36) - br label %endif3996 -endif3996: + br label %endif4000 +endif4000: %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null - br i1 %t38, label %panic3997, label %ok3998 -panic3997: + br i1 %t38, label %panic4001, label %ok4002 +panic4001: call void @finch_panic(ptr @.str.2465, i64 1698, ptr @.str.2466) unreachable -ok3998: +ok4002: %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 17 %t40 = load i64, ptr %a10 %t41 = load { ptr, i64, i64 }, ptr %t39 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 %t40, %t42 - br i1 %t43, label %range3999, label %inrange4000 -range3999: + br i1 %t43, label %range4003, label %inrange4004 +range4003: call void @finch_panic_index(ptr @.str.2467, i64 1698, i64 %t40, i64 %t42) unreachable -inrange4000: +inrange4004: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.gen.Template, ptr %t44, i64 %t40 %t46 = load %S.gen.Template, ptr %t45 @@ -41851,8 +41877,8 @@ inrange4000: %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = icmp ne i64 %t52, %t55 - br i1 %t56, label %then4001, label %endif4003 -then4001: + br i1 %t56, label %then4005, label %endif4007 +then4005: %t57 = load ptr, ptr %a1 %t58 = load %S.ast.Node, ptr %a5 %t59 = load { ptr, i64, i64 }, ptr %a3 @@ -41926,8 +41952,8 @@ then4001: call void @finch.gen.fail(ptr %t57, %S.ast.Node %t58, { ptr, i64, i64 } %t116) store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) - br label %endif4003 -endif4003: + br label %endif4007 +endif4007: %t118 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t118, ptr %a120 store { ptr, i64, i64 } { ptr @.str.2473, i64 1, i64 0 }, ptr %a121 @@ -41955,15 +41981,15 @@ endif4003: %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = call i64 @finch.gen.findStruct(ptr %t137, { ptr, i64, i64 } %t138, { ptr, i64, i64 } %t139) %t141 = icmp slt i64 %t140, 0 - br i1 %t141, label %then4004, label %endif4006 -then4004: + br i1 %t141, label %then4008, label %endif4010 +then4008: %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic4007, label %ok4008 -panic4007: + br i1 %t143, label %panic4011, label %ok4012 +panic4011: call void @finch_panic(ptr @.str.2475, i64 1704, ptr @.str.2476) unreachable -ok4008: +ok4012: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 16 %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 %t146 = load { ptr, i64, i64 }, ptr %a2 @@ -42008,18 +42034,18 @@ ok4008: %t182 = load ptr, ptr %a1 %t183 = load ptr, ptr %a1 %t184 = icmp eq ptr %t183, null - br i1 %t184, label %panic4009, label %ok4010 -panic4009: + br i1 %t184, label %panic4013, label %ok4014 +panic4013: call void @finch_panic(ptr @.str.2477, i64 1705, ptr @.str.2478) unreachable -ok4010: +ok4014: %t185 = getelementptr inbounds %S.gen.Gen, ptr %t183, i32 0, i32 16 %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i32 0, i32 1 %t187 = load i64, ptr %t186 %t188 = sub i64 %t187, 1 call void @finch.gen.resolveStruct(ptr %t182, i64 %t188) - br label %endif4006 -endif4006: + br label %endif4010 +endif4010: %t189 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.2479, i64 6, i64 0 }, 0 %t190 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } %t190, ptr %a191 @@ -42187,21 +42213,21 @@ entry: store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic4011, label %ok4012 -panic4011: + br i1 %t7, label %panic4015, label %ok4016 +panic4015: call void @finch_panic(ptr @.str.2480, i64 1712, ptr @.str.2481) unreachable -ok4012: +ok4016: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range4013, label %inrange4014 -range4013: + br i1 %t12, label %range4017, label %inrange4018 +range4017: call void @finch_panic_index(ptr @.str.2482, i64 1712, i64 %t9, i64 %t11) unreachable -inrange4014: +inrange4018: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 %t15 = load %S.gen.Template, ptr %t14 @@ -42236,8 +42262,8 @@ inrange4014: %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = icmp sgt i64 %t42, 0 - br i1 %t43, label %then4015, label %else4016 -then4015: + br i1 %t43, label %then4019, label %else4020 +then4019: %t44 = load ptr, ptr %a1 %t45 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t46 = load { ptr, i64, i64 }, ptr %t45 @@ -42249,15 +42275,15 @@ then4015: store i64 %t51, ptr %a52 %t53 = load i64, ptr %a52 %t54 = icmp sge i64 %t53, 0 - br i1 %t54, label %then4018, label %endif4020 -then4018: + br i1 %t54, label %then4022, label %endif4024 +then4022: %t55 = load i64, ptr %a52 call void @finch_str_drop(ptr %a39) call void @finch.drop.S_gen_Template(ptr %a19) ret i64 %t55 -endif4020: - br label %endif4017 -else4016: +endif4024: + br label %endif4021 +else4020: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t58 = load { ptr, i64, i64 }, ptr %t57 @@ -42266,33 +42292,33 @@ else4016: store i64 %t60, ptr %a61 %t62 = load i64, ptr %a61 %t63 = icmp sge i64 %t62, 0 - br i1 %t63, label %then4021, label %endif4023 -then4021: + br i1 %t63, label %then4025, label %endif4027 +then4025: %t64 = load i64, ptr %a61 call void @finch_str_drop(ptr %a39) call void @finch.drop.S_gen_Template(ptr %a19) ret i64 %t64 -endif4023: - br label %endif4017 -endif4017: +endif4027: + br label %endif4021 +endif4021: %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic4024, label %ok4025 -panic4024: + br i1 %t66, label %panic4028, label %ok4029 +panic4028: call void @finch_panic(ptr @.str.2485, i64 1725, ptr @.str.2486) unreachable -ok4025: +ok4029: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 0 %t68 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t69 = load i64, ptr %t68 %t70 = load { ptr, i64, i64 }, ptr %t67 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 %t69, %t71 - br i1 %t72, label %range4026, label %inrange4027 -range4026: + br i1 %t72, label %range4030, label %inrange4031 +range4030: call void @finch_panic_index(ptr @.str.2487, i64 1725, i64 %t69, i64 %t71) unreachable -inrange4027: +inrange4031: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds %S.ast.Program, ptr %t73, i64 %t69 %t75 = getelementptr inbounds %S.ast.Program, ptr %t74, i32 0, i32 8 @@ -42301,11 +42327,11 @@ inrange4027: %t78 = load { ptr, i64, i64 }, ptr %t75 %t79 = extractvalue { ptr, i64, i64 } %t78, 1 %t80 = icmp uge i64 %t77, %t79 - br i1 %t80, label %range4028, label %inrange4029 -range4028: + br i1 %t80, label %range4032, label %inrange4033 +range4032: call void @finch_panic_index(ptr @.str.2488, i64 1725, i64 %t77, i64 %t79) unreachable -inrange4029: +inrange4033: %t81 = extractvalue { ptr, i64, i64 } %t78, 0 %t82 = getelementptr inbounds %S.ast.Node, ptr %t81, i64 %t77 %t83 = load %S.ast.Node, ptr %t82 @@ -42393,8 +42419,8 @@ inrange4029: %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i32 0, i32 1 %t160 = load i64, ptr %t159 %t161 = icmp sgt i64 %t160, 0 - br i1 %t161, label %then4030, label %endif4032 -then4030: + br i1 %t161, label %then4034, label %endif4036 +then4034: %t162 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t163 = load { ptr, i64, i64 }, ptr %t162 %t164 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 1 @@ -42479,15 +42505,15 @@ then4030: store { ptr, i64, i64 } %t227, ptr %t228 store { ptr, i64, i64 } %t229, ptr %a230 call void @finch_str_drop(ptr %a230) - br label %endif4032 -endif4032: + br label %endif4036 +endif4036: %t231 = load ptr, ptr %a1 %t232 = icmp eq ptr %t231, null - br i1 %t232, label %panic4033, label %ok4034 -panic4033: + br i1 %t232, label %panic4037, label %ok4038 +panic4037: call void @finch_panic(ptr @.str.2495, i64 1734, ptr @.str.2496) unreachable -ok4034: +ok4038: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 18 %t234 = load { ptr, i64, i64 }, ptr %t233 store { ptr, i64, i64 } %t234, ptr %a235 @@ -42496,11 +42522,11 @@ ok4034: store { ptr, i64, i64 } %t237, ptr %a238 %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null - br i1 %t240, label %panic4035, label %ok4036 -panic4035: + br i1 %t240, label %panic4039, label %ok4040 +panic4039: call void @finch_panic(ptr @.str.2497, i64 1735, ptr @.str.2498) unreachable -ok4036: +ok4040: %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 19 %t242 = load { ptr, i64, i64 }, ptr %t241 store { ptr, i64, i64 } %t242, ptr %a243 @@ -42509,11 +42535,11 @@ ok4036: store { ptr, i64, i64 } %t245, ptr %a246 %t247 = load ptr, ptr %a1 %t248 = icmp eq ptr %t247, null - br i1 %t248, label %panic4037, label %ok4038 -panic4037: + br i1 %t248, label %panic4041, label %ok4042 +panic4041: call void @finch_panic(ptr @.str.2499, i64 1736, ptr @.str.2500) unreachable -ok4038: +ok4042: %t249 = getelementptr inbounds %S.gen.Gen, ptr %t247, i32 0, i32 14 %t250 = load { ptr, i64, i64 }, ptr %t249 store { ptr, i64, i64 } %t250, ptr %a251 @@ -42522,11 +42548,11 @@ ok4038: store { ptr, i64, i64 } %t253, ptr %a254 %t255 = load ptr, ptr %a1 %t256 = icmp eq ptr %t255, null - br i1 %t256, label %panic4039, label %ok4040 -panic4039: + br i1 %t256, label %panic4043, label %ok4044 +panic4043: call void @finch_panic(ptr @.str.2501, i64 1737, ptr @.str.2502) unreachable -ok4040: +ok4044: %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 20 %t258 = load { ptr, i64, i64 }, ptr %t257 store { ptr, i64, i64 } %t258, ptr %a259 @@ -42537,11 +42563,11 @@ ok4040: %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = load ptr, ptr %a1 %t266 = icmp eq ptr %t265, null - br i1 %t266, label %panic4041, label %ok4042 -panic4041: + br i1 %t266, label %panic4045, label %ok4046 +panic4045: call void @finch_panic(ptr @.str.2503, i64 1738, ptr @.str.2504) unreachable -ok4042: +ok4046: %t267 = getelementptr inbounds %S.gen.Gen, ptr %t265, i32 0, i32 18 store { ptr, i64, i64 } %t264, ptr %a268 call void @finch.copy.arr_str(ptr %a269, ptr %a268) @@ -42553,11 +42579,11 @@ ok4042: %t273 = load { ptr, i64, i64 }, ptr %a3 %t274 = load ptr, ptr %a1 %t275 = icmp eq ptr %t274, null - br i1 %t275, label %panic4043, label %ok4044 -panic4043: + br i1 %t275, label %panic4047, label %ok4048 +panic4047: call void @finch_panic(ptr @.str.2505, i64 1739, ptr @.str.2506) unreachable -ok4044: +ok4048: %t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 19 store { ptr, i64, i64 } %t273, ptr %a277 call void @finch.copy.arr_S_ast_Type(ptr %a278, ptr %a277) @@ -42570,11 +42596,11 @@ ok4044: %t283 = load { ptr, i64, i64 }, ptr %t282 %t284 = load ptr, ptr %a1 %t285 = icmp eq ptr %t284, null - br i1 %t285, label %panic4045, label %ok4046 -panic4045: + br i1 %t285, label %panic4049, label %ok4050 +panic4049: call void @finch_panic(ptr @.str.2507, i64 1740, ptr @.str.2508) unreachable -ok4046: +ok4050: %t286 = getelementptr inbounds %S.gen.Gen, ptr %t284, i32 0, i32 14 store { ptr, i64, i64 } %t283, ptr %a287 call void @finch_str_copy(ptr %a288, ptr %a287) @@ -42597,11 +42623,11 @@ ok4046: %t302 = load { ptr, i64, i64 }, ptr %a298 %t303 = load ptr, ptr %a1 %t304 = icmp eq ptr %t303, null - br i1 %t304, label %panic4047, label %ok4048 -panic4047: + br i1 %t304, label %panic4051, label %ok4052 +panic4051: call void @finch_panic(ptr @.str.2511, i64 1741, ptr @.str.2512) unreachable -ok4048: +ok4052: %t305 = getelementptr inbounds %S.gen.Gen, ptr %t303, i32 0, i32 20 %t306 = load { ptr, i64, i64 }, ptr %t305 store { ptr, i64, i64 } %t302, ptr %t305 @@ -42625,11 +42651,11 @@ ok4048: %t321 = load { ptr, i64, i64 }, ptr %t316 %t322 = extractvalue { ptr, i64, i64 } %t321, 1 %t323 = icmp uge i64 %t320, %t322 - br i1 %t323, label %range4049, label %inrange4050 -range4049: + br i1 %t323, label %range4053, label %inrange4054 +range4053: call void @finch_panic_index(ptr @.str.2513, i64 1743, i64 %t320, i64 %t322) unreachable -inrange4050: +inrange4054: %t324 = extractvalue { ptr, i64, i64 } %t321, 0 %t325 = getelementptr inbounds %S.ast.Node, ptr %t324, i64 %t320 %t326 = load %S.ast.Node, ptr %t325 @@ -42642,23 +42668,23 @@ inrange4050: %t333 = load i64, ptr %t332 %t334 = sub i64 %t333, 1 store i64 0, ptr %a335 - br label %for.cond4051 -for.cond4051: + br label %for.cond4055 +for.cond4055: %t336 = load i64, ptr %a335 %t337 = icmp slt i64 %t336, %t334 - br i1 %t337, label %for.body4052, label %for.end4054 -for.body4052: + br i1 %t337, label %for.body4056, label %for.end4058 +for.body4056: %t338 = load ptr, ptr %a1 %t339 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t340 = load i64, ptr %a335 %t341 = load { ptr, i64, i64 }, ptr %t339 %t342 = extractvalue { ptr, i64, i64 } %t341, 1 %t343 = icmp uge i64 %t340, %t342 - br i1 %t343, label %range4055, label %inrange4056 -range4055: + br i1 %t343, label %range4059, label %inrange4060 +range4059: call void @finch_panic_index(ptr @.str.2514, i64 1745, i64 %t340, i64 %t342) unreachable -inrange4056: +inrange4060: %t344 = extractvalue { ptr, i64, i64 } %t341, 0 %t345 = getelementptr inbounds %S.ast.Node, ptr %t344, i64 %t340 %t346 = getelementptr inbounds %S.ast.Node, ptr %t345, i32 0, i32 5 @@ -42668,11 +42694,11 @@ inrange4056: %t350 = load { ptr, i64, i64 }, ptr %t348 %t351 = extractvalue { ptr, i64, i64 } %t350, 1 %t352 = icmp uge i64 %t349, %t351 - br i1 %t352, label %range4057, label %inrange4058 -range4057: + br i1 %t352, label %range4061, label %inrange4062 +range4061: call void @finch_panic_index(ptr @.str.2515, i64 1745, i64 %t349, i64 %t351) unreachable -inrange4058: +inrange4062: %t353 = extractvalue { ptr, i64, i64 } %t350, 0 %t354 = getelementptr inbounds %S.ast.Node, ptr %t353, i64 %t349 %t355 = load %S.ast.Node, ptr %t354 @@ -42698,11 +42724,11 @@ inrange4058: %t372 = load { ptr, i64, i64 }, ptr %t370 %t373 = extractvalue { ptr, i64, i64 } %t372, 1 %t374 = icmp uge i64 %t371, %t373 - br i1 %t374, label %range4059, label %inrange4060 -range4059: + br i1 %t374, label %range4063, label %inrange4064 +range4063: call void @finch_panic_index(ptr @.str.2516, i64 1747, i64 %t371, i64 %t373) unreachable -inrange4060: +inrange4064: %t375 = extractvalue { ptr, i64, i64 } %t372, 0 %t376 = getelementptr inbounds %S.ast.Node, ptr %t375, i64 %t371 %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i32 0, i32 1 @@ -42722,21 +42748,21 @@ inrange4060: %t388 = load ptr, ptr %a1 %t389 = load %S.ast.Type, ptr %a357 %t390 = call i1 @finch.gen.owning(ptr %t388, %S.ast.Type %t389) - br label %logic.from4061 -logic.from4061: - br i1 %t390, label %logic.rhs4062, label %logic.end4063 -logic.rhs4062: + br label %logic.from4065 +logic.from4065: + br i1 %t390, label %logic.rhs4066, label %logic.end4067 +logic.rhs4066: %t391 = load ptr, ptr %a1 %t392 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t393 = load i64, ptr %a335 %t394 = load { ptr, i64, i64 }, ptr %t392 %t395 = extractvalue { ptr, i64, i64 } %t394, 1 %t396 = icmp uge i64 %t393, %t395 - br i1 %t396, label %range4064, label %inrange4065 -range4064: + br i1 %t396, label %range4068, label %inrange4069 +range4068: call void @finch_panic_index(ptr @.str.2517, i64 1748, i64 %t393, i64 %t395) unreachable -inrange4065: +inrange4069: %t397 = extractvalue { ptr, i64, i64 } %t394, 0 %t398 = getelementptr inbounds %S.ast.Node, ptr %t397, i64 %t393 %t399 = getelementptr inbounds %S.ast.Node, ptr %t398, i32 0, i32 1 @@ -42744,11 +42770,11 @@ inrange4065: %t401 = load %S.ast.Node, ptr %a330 %t402 = call i1 @finch.gen.mutates(ptr %t391, { ptr, i64, i64 } %t400, %S.ast.Node %t401) %t403 = xor i1 %t402, true - br label %logic.rend4066 -logic.rend4066: - br label %logic.end4063 -logic.end4063: - %t404 = phi i1 [ false, %logic.from4061 ], [ %t403, %logic.rend4066 ] + br label %logic.rend4070 +logic.rend4070: + br label %logic.end4067 +logic.end4067: + %t404 = phi i1 [ false, %logic.from4065 ], [ %t403, %logic.rend4070 ] %t405 = load i64, ptr %t387 %t406 = add i64 %t405, 1 call void @finch_arr_reserve(ptr %t386, i64 %t406, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) @@ -42757,21 +42783,21 @@ logic.end4063: store i1 %t404, ptr %t408 store i64 %t406, ptr %t387 call void @finch.drop.S_ast_Type(ptr %a357) - br label %for.step4053 -for.step4053: + br label %for.step4057 +for.step4057: %t409 = load i64, ptr %a335 %t410 = add i64 %t409, 1 store i64 %t410, ptr %a335 - br label %for.cond4051 -for.end4054: + br label %for.cond4055 +for.end4058: %t411 = load { ptr, i64, i64 }, ptr %a238 %t412 = load ptr, ptr %a1 %t413 = icmp eq ptr %t412, null - br i1 %t413, label %panic4067, label %ok4068 -panic4067: + br i1 %t413, label %panic4071, label %ok4072 +panic4071: call void @finch_panic(ptr @.str.2518, i64 1750, ptr @.str.2519) unreachable -ok4068: +ok4072: %t414 = getelementptr inbounds %S.gen.Gen, ptr %t412, i32 0, i32 18 store { ptr, i64, i64 } %t411, ptr %a415 call void @finch.copy.arr_str(ptr %a416, ptr %a415) @@ -42783,11 +42809,11 @@ ok4068: %t420 = load { ptr, i64, i64 }, ptr %a246 %t421 = load ptr, ptr %a1 %t422 = icmp eq ptr %t421, null - br i1 %t422, label %panic4069, label %ok4070 -panic4069: + br i1 %t422, label %panic4073, label %ok4074 +panic4073: call void @finch_panic(ptr @.str.2520, i64 1751, ptr @.str.2521) unreachable -ok4070: +ok4074: %t423 = getelementptr inbounds %S.gen.Gen, ptr %t421, i32 0, i32 19 store { ptr, i64, i64 } %t420, ptr %a424 call void @finch.copy.arr_S_ast_Type(ptr %a425, ptr %a424) @@ -42799,11 +42825,11 @@ ok4070: %t429 = load { ptr, i64, i64 }, ptr %a254 %t430 = load ptr, ptr %a1 %t431 = icmp eq ptr %t430, null - br i1 %t431, label %panic4071, label %ok4072 -panic4071: + br i1 %t431, label %panic4075, label %ok4076 +panic4075: call void @finch_panic(ptr @.str.2522, i64 1752, ptr @.str.2523) unreachable -ok4072: +ok4076: %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 14 store { ptr, i64, i64 } %t429, ptr %a433 call void @finch_str_copy(ptr %a434, ptr %a433) @@ -42815,11 +42841,11 @@ ok4072: %t438 = load { ptr, i64, i64 }, ptr %a262 %t439 = load ptr, ptr %a1 %t440 = icmp eq ptr %t439, null - br i1 %t440, label %panic4073, label %ok4074 -panic4073: + br i1 %t440, label %panic4077, label %ok4078 +panic4077: call void @finch_panic(ptr @.str.2524, i64 1753, ptr @.str.2525) unreachable -ok4074: +ok4078: %t441 = getelementptr inbounds %S.gen.Gen, ptr %t439, i32 0, i32 20 store { ptr, i64, i64 } %t438, ptr %a442 call void @finch_str_copy(ptr %a443, ptr %a442) @@ -42830,11 +42856,11 @@ ok4074: call void @finch_str_drop(ptr %a446) %t447 = load ptr, ptr %a1 %t448 = icmp eq ptr %t447, null - br i1 %t448, label %panic4075, label %ok4076 -panic4075: + br i1 %t448, label %panic4079, label %ok4080 +panic4079: call void @finch_panic(ptr @.str.2526, i64 1754, ptr @.str.2527) unreachable -ok4076: +ok4080: %t449 = getelementptr inbounds %S.gen.Gen, ptr %t447, i32 0, i32 15 %t450 = getelementptr inbounds { ptr, i64, i64 }, ptr %t449, i32 0, i32 1 %t451 = load %S.gen.FnSig, ptr %a133 @@ -42850,11 +42876,11 @@ ok4076: store i64 %t456, ptr %t450 %t459 = load ptr, ptr %a1 %t460 = icmp eq ptr %t459, null - br i1 %t460, label %panic4077, label %ok4078 -panic4077: + br i1 %t460, label %panic4081, label %ok4082 +panic4081: call void @finch_panic(ptr @.str.2528, i64 1755, ptr @.str.2529) unreachable -ok4078: +ok4082: %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 15 %t462 = getelementptr inbounds { ptr, i64, i64 }, ptr %t461, i32 0, i32 1 %t463 = load i64, ptr %t462 @@ -42925,36 +42951,36 @@ entry: store { ptr, i64, i64 } { ptr @.str.2530, i64 5, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 - br label %logic.from4079 -logic.from4079: - br i1 %t11, label %logic.rhs4080, label %logic.end4081 -logic.rhs4080: + br label %logic.from4083 +logic.from4083: + br i1 %t11, label %logic.rhs4084, label %logic.end4085 +logic.rhs4084: %t12 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp eq i64 %t14, 0 - br label %logic.rend4082 -logic.rend4082: - br label %logic.end4081 -logic.end4081: - %t16 = phi i1 [ false, %logic.from4079 ], [ %t15, %logic.rend4082 ] - br label %logic.from4083 -logic.from4083: - br i1 %t16, label %logic.rhs4084, label %logic.end4085 -logic.rhs4084: - %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 - %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 - %t19 = load i64, ptr %t18 - %t20 = icmp eq i64 %t19, 0 br label %logic.rend4086 logic.rend4086: br label %logic.end4085 logic.end4085: - %t21 = phi i1 [ false, %logic.from4083 ], [ %t20, %logic.rend4086 ] + %t16 = phi i1 [ false, %logic.from4083 ], [ %t15, %logic.rend4086 ] br label %logic.from4087 logic.from4087: - br i1 %t21, label %logic.rhs4088, label %logic.end4089 + br i1 %t16, label %logic.rhs4088, label %logic.end4089 logic.rhs4088: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp eq i64 %t19, 0 + br label %logic.rend4090 +logic.rend4090: + br label %logic.end4089 +logic.end4089: + %t21 = phi i1 [ false, %logic.from4087 ], [ %t20, %logic.rend4090 ] + br label %logic.from4091 +logic.from4091: + br i1 %t21, label %logic.rhs4092, label %logic.end4093 +logic.rhs4092: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t24 = load { ptr, i64, i64 }, ptr %t23 @@ -42962,36 +42988,36 @@ logic.rhs4088: %t26 = load i64, ptr %t22 %t27 = load ptr, ptr %a4 store i64 0, ptr %a28 - br label %find.cond4090 -find.cond4090: + br label %find.cond4094 +find.cond4094: %t29 = load i64, ptr %a28 %t30 = icmp slt i64 %t29, %t26 - br i1 %t30, label %find.body4091, label %find.end4094 -find.body4091: + br i1 %t30, label %find.body4095, label %find.end4098 +find.body4095: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 %t29 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } %t24, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 - br i1 %t36, label %find.hit4092, label %find.next4093 -find.hit4092: + br i1 %t36, label %find.hit4096, label %find.next4097 +find.hit4096: store i64 %t29, ptr %a25 - br label %find.end4094 -find.next4093: + br label %find.end4098 +find.next4097: %t37 = add i64 %t29, 1 store i64 %t37, ptr %a28 - br label %find.cond4090 -find.end4094: + br label %find.cond4094 +find.end4098: %t38 = load i64, ptr %a25 %t39 = icmp sge i64 %t38, 0 - br label %logic.rend4095 -logic.rend4095: - br label %logic.end4089 -logic.end4089: - %t40 = phi i1 [ false, %logic.from4087 ], [ %t39, %logic.rend4095 ] - br i1 %t40, label %then4096, label %endif4098 -then4096: + br label %logic.rend4099 +logic.rend4099: + br label %logic.end4093 +logic.end4093: + %t40 = phi i1 [ false, %logic.from4091 ], [ %t39, %logic.rend4099 ] + br i1 %t40, label %then4100, label %endif4102 +then4100: %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t42 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t43 = load { ptr, i64, i64 }, ptr %t42 @@ -42999,70 +43025,70 @@ then4096: %t45 = load i64, ptr %t41 %t46 = load ptr, ptr %a4 store i64 0, ptr %a47 - br label %find.cond4099 -find.cond4099: + br label %find.cond4103 +find.cond4103: %t48 = load i64, ptr %a47 %t49 = icmp slt i64 %t48, %t45 - br i1 %t49, label %find.body4100, label %find.end4103 -find.body4100: + br i1 %t49, label %find.body4104, label %find.end4107 +find.body4104: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t48 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t51, ptr %a52 store { ptr, i64, i64 } %t43, ptr %a53 %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) %t55 = icmp ne i32 %t54, 0 - br i1 %t55, label %find.hit4101, label %find.next4102 -find.hit4101: + br i1 %t55, label %find.hit4105, label %find.next4106 +find.hit4105: store i64 %t48, ptr %a44 - br label %find.end4103 -find.next4102: + br label %find.end4107 +find.next4106: %t56 = add i64 %t48, 1 store i64 %t56, ptr %a47 - br label %find.cond4099 -find.end4103: + br label %find.cond4103 +find.end4107: %t57 = load i64, ptr %a44 store i64 %t57, ptr %a58 %t59 = load ptr, ptr %a5 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic4104, label %ok4105 -panic4104: + br i1 %t60, label %panic4108, label %ok4109 +panic4108: call void @finch_panic(ptr @.str.2531, i64 1762, ptr @.str.2532) unreachable -ok4105: +ok4109: %t61 = getelementptr inbounds %S.gen.Binds, ptr %t59, i32 0, i32 1 %t62 = load i64, ptr %a58 %t63 = load { ptr, i64, i64 }, ptr %t61 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 - br i1 %t65, label %range4106, label %inrange4107 -range4106: + br i1 %t65, label %range4110, label %inrange4111 +range4110: call void @finch_panic_index(ptr @.str.2533, i64 1762, i64 %t62, i64 %t64) unreachable -inrange4107: +inrange4111: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i1, ptr %t66, i64 %t62 %t68 = load i1, ptr %t67 %t69 = xor i1 %t68, true - br i1 %t69, label %then4108, label %endif4110 -then4108: + br i1 %t69, label %then4112, label %endif4114 +then4112: %t70 = load %S.ast.Type, ptr %a3 %t71 = load ptr, ptr %a5 %t72 = icmp eq ptr %t71, null - br i1 %t72, label %panic4111, label %ok4112 -panic4111: + br i1 %t72, label %panic4115, label %ok4116 +panic4115: call void @finch_panic(ptr @.str.2534, i64 1763, ptr @.str.2535) unreachable -ok4112: +ok4116: %t73 = getelementptr inbounds %S.gen.Binds, ptr %t71, i32 0, i32 0 %t74 = load i64, ptr %a58 %t75 = load { ptr, i64, i64 }, ptr %t73 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 %t74, %t76 - br i1 %t77, label %range4113, label %inrange4114 -range4113: + br i1 %t77, label %range4117, label %inrange4118 +range4117: call void @finch_panic_index(ptr @.str.2536, i64 1763, i64 %t74, i64 %t76) unreachable -inrange4114: +inrange4118: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i64 %t74 store %S.ast.Type %t70, ptr %a80 @@ -43074,81 +43100,81 @@ inrange4114: call void @finch.drop.S_ast_Type(ptr %a84) %t85 = load ptr, ptr %a5 %t86 = icmp eq ptr %t85, null - br i1 %t86, label %panic4115, label %ok4116 -panic4115: + br i1 %t86, label %panic4119, label %ok4120 +panic4119: call void @finch_panic(ptr @.str.2537, i64 1764, ptr @.str.2538) unreachable -ok4116: +ok4120: %t87 = getelementptr inbounds %S.gen.Binds, ptr %t85, i32 0, i32 1 %t88 = load i64, ptr %a58 %t89 = load { ptr, i64, i64 }, ptr %t87 %t90 = extractvalue { ptr, i64, i64 } %t89, 1 %t91 = icmp uge i64 %t88, %t90 - br i1 %t91, label %range4117, label %inrange4118 -range4117: + br i1 %t91, label %range4121, label %inrange4122 +range4121: call void @finch_panic_index(ptr @.str.2539, i64 1764, i64 %t88, i64 %t90) unreachable -inrange4118: +inrange4122: %t92 = extractvalue { ptr, i64, i64 } %t89, 0 %t93 = getelementptr inbounds i1, ptr %t92, i64 %t88 store i1 true, ptr %t93 - br label %endif4110 -endif4110: + br label %endif4114 +endif4114: ret void -endif4098: +endif4102: %t94 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t95 = load { ptr, i64, i64 }, ptr %t94 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.2540, i64 5, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 - br label %logic.from4119 -logic.from4119: - br i1 %t99, label %logic.end4121, label %logic.rhs4120 -logic.rhs4120: + br label %logic.from4123 +logic.from4123: + br i1 %t99, label %logic.end4125, label %logic.rhs4124 +logic.rhs4124: %t100 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.2541, i64 3, i64 0 }, ptr %a103 %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) %t105 = icmp ne i32 %t104, 0 - br label %logic.rend4122 -logic.rend4122: - br label %logic.end4121 -logic.end4121: - %t106 = phi i1 [ true, %logic.from4119 ], [ %t105, %logic.rend4122 ] - br label %logic.from4123 -logic.from4123: - br i1 %t106, label %logic.end4125, label %logic.rhs4124 -logic.rhs4124: + br label %logic.rend4126 +logic.rend4126: + br label %logic.end4125 +logic.end4125: + %t106 = phi i1 [ true, %logic.from4123 ], [ %t105, %logic.rend4126 ] + br label %logic.from4127 +logic.from4127: + br i1 %t106, label %logic.end4129, label %logic.rhs4128 +logic.rhs4128: %t107 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t108 = load { ptr, i64, i64 }, ptr %t107 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2542, i64 5, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 - br label %logic.rend4126 -logic.rend4126: - br label %logic.end4125 -logic.end4125: - %t113 = phi i1 [ true, %logic.from4123 ], [ %t112, %logic.rend4126 ] - br label %logic.from4127 -logic.from4127: - br i1 %t113, label %logic.rhs4128, label %logic.end4129 -logic.rhs4128: - %t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 - %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 - %t116 = load i64, ptr %t115 - %t117 = icmp sgt i64 %t116, 0 br label %logic.rend4130 logic.rend4130: br label %logic.end4129 logic.end4129: - %t118 = phi i1 [ false, %logic.from4127 ], [ %t117, %logic.rend4130 ] + %t113 = phi i1 [ true, %logic.from4127 ], [ %t112, %logic.rend4130 ] br label %logic.from4131 logic.from4131: - br i1 %t118, label %logic.rhs4132, label %logic.end4133 + br i1 %t113, label %logic.rhs4132, label %logic.end4133 logic.rhs4132: + %t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp sgt i64 %t116, 0 + br label %logic.rend4134 +logic.rend4134: + br label %logic.end4133 +logic.end4133: + %t118 = phi i1 [ false, %logic.from4131 ], [ %t117, %logic.rend4134 ] + br label %logic.from4135 +logic.from4135: + br i1 %t118, label %logic.rhs4136, label %logic.end4137 +logic.rhs4136: %t119 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t120 = load { ptr, i64, i64 }, ptr %t119 %t121 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 @@ -43157,36 +43183,36 @@ logic.rhs4132: store { ptr, i64, i64 } %t122, ptr %a124 %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) %t126 = icmp ne i32 %t125, 0 - br label %logic.rend4134 -logic.rend4134: - br label %logic.end4133 -logic.end4133: - %t127 = phi i1 [ false, %logic.from4131 ], [ %t126, %logic.rend4134 ] - br label %logic.from4135 -logic.from4135: - br i1 %t127, label %logic.rhs4136, label %logic.end4137 -logic.rhs4136: - %t128 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 - %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 - %t130 = load i64, ptr %t129 - %t131 = icmp sgt i64 %t130, 0 br label %logic.rend4138 logic.rend4138: br label %logic.end4137 logic.end4137: - %t132 = phi i1 [ false, %logic.from4135 ], [ %t131, %logic.rend4138 ] - br i1 %t132, label %then4139, label %endif4141 -then4139: + %t127 = phi i1 [ false, %logic.from4135 ], [ %t126, %logic.rend4138 ] + br label %logic.from4139 +logic.from4139: + br i1 %t127, label %logic.rhs4140, label %logic.end4141 +logic.rhs4140: + %t128 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 + %t130 = load i64, ptr %t129 + %t131 = icmp sgt i64 %t130, 0 + br label %logic.rend4142 +logic.rend4142: + br label %logic.end4141 +logic.end4141: + %t132 = phi i1 [ false, %logic.from4139 ], [ %t131, %logic.rend4142 ] + br i1 %t132, label %then4143, label %endif4145 +then4143: %t133 = load ptr, ptr %a1 %t134 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t135 = load { ptr, i64, i64 }, ptr %t134 %t136 = extractvalue { ptr, i64, i64 } %t135, 1 %t137 = icmp uge i64 0, %t136 - br i1 %t137, label %range4142, label %inrange4143 -range4142: + br i1 %t137, label %range4146, label %inrange4147 +range4146: call void @finch_panic_index(ptr @.str.2543, i64 1769, i64 0, i64 %t136) unreachable -inrange4143: +inrange4147: %t138 = extractvalue { ptr, i64, i64 } %t135, 0 %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i64 0 %t140 = load %S.ast.Type, ptr %t139 @@ -43194,11 +43220,11 @@ inrange4143: %t142 = load { ptr, i64, i64 }, ptr %t141 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 0, %t143 - br i1 %t144, label %range4144, label %inrange4145 -range4144: + br i1 %t144, label %range4148, label %inrange4149 +range4148: call void @finch_panic_index(ptr @.str.2544, i64 1769, i64 0, i64 %t143) unreachable -inrange4145: +inrange4149: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds %S.ast.Type, ptr %t145, i64 0 %t147 = load %S.ast.Type, ptr %t146 @@ -43206,40 +43232,40 @@ inrange4145: %t149 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t133, %S.ast.Type %t140, %S.ast.Type %t147, { ptr, i64, i64 } %t148, ptr %t149) ret void -endif4141: +endif4145: %t150 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t151 = load { ptr, i64, i64 }, ptr %t150 store { ptr, i64, i64 } %t151, ptr %a152 store { ptr, i64, i64 } { ptr @.str.2545, i64 3, i64 0 }, ptr %a153 %t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153) %t155 = icmp ne i32 %t154, 0 - br label %logic.from4146 -logic.from4146: - br i1 %t155, label %logic.rhs4147, label %logic.end4148 -logic.rhs4147: + br label %logic.from4150 +logic.from4150: + br i1 %t155, label %logic.rhs4151, label %logic.end4152 +logic.rhs4151: %t156 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.2546, i64 3, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp ne i32 %t160, 0 - br label %logic.rend4149 -logic.rend4149: - br label %logic.end4148 -logic.end4148: - %t162 = phi i1 [ false, %logic.from4146 ], [ %t161, %logic.rend4149 ] - br i1 %t162, label %then4150, label %endif4152 -then4150: + br label %logic.rend4153 +logic.rend4153: + br label %logic.end4152 +logic.end4152: + %t162 = phi i1 [ false, %logic.from4150 ], [ %t161, %logic.rend4153 ] + br i1 %t162, label %then4154, label %endif4156 +then4154: %t163 = load ptr, ptr %a1 %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t165 = load { ptr, i64, i64 }, ptr %t164 %t166 = extractvalue { ptr, i64, i64 } %t165, 1 %t167 = icmp uge i64 0, %t166 - br i1 %t167, label %range4153, label %inrange4154 -range4153: + br i1 %t167, label %range4157, label %inrange4158 +range4157: call void @finch_panic_index(ptr @.str.2547, i64 1773, i64 0, i64 %t166) unreachable -inrange4154: +inrange4158: %t168 = extractvalue { ptr, i64, i64 } %t165, 0 %t169 = getelementptr inbounds %S.ast.Type, ptr %t168, i64 0 %t170 = load %S.ast.Type, ptr %t169 @@ -43247,11 +43273,11 @@ inrange4154: %t172 = load { ptr, i64, i64 }, ptr %t171 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 0, %t173 - br i1 %t174, label %range4155, label %inrange4156 -range4155: + br i1 %t174, label %range4159, label %inrange4160 +range4159: call void @finch_panic_index(ptr @.str.2548, i64 1773, i64 0, i64 %t173) unreachable -inrange4156: +inrange4160: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds %S.ast.Type, ptr %t175, i64 0 %t177 = load %S.ast.Type, ptr %t176 @@ -43263,11 +43289,11 @@ inrange4156: %t182 = load { ptr, i64, i64 }, ptr %t181 %t183 = extractvalue { ptr, i64, i64 } %t182, 1 %t184 = icmp uge i64 1, %t183 - br i1 %t184, label %range4157, label %inrange4158 -range4157: + br i1 %t184, label %range4161, label %inrange4162 +range4161: call void @finch_panic_index(ptr @.str.2549, i64 1774, i64 1, i64 %t183) unreachable -inrange4158: +inrange4162: %t185 = extractvalue { ptr, i64, i64 } %t182, 0 %t186 = getelementptr inbounds %S.ast.Type, ptr %t185, i64 1 %t187 = load %S.ast.Type, ptr %t186 @@ -43275,11 +43301,11 @@ inrange4158: %t189 = load { ptr, i64, i64 }, ptr %t188 %t190 = extractvalue { ptr, i64, i64 } %t189, 1 %t191 = icmp uge i64 1, %t190 - br i1 %t191, label %range4159, label %inrange4160 -range4159: + br i1 %t191, label %range4163, label %inrange4164 +range4163: call void @finch_panic_index(ptr @.str.2550, i64 1774, i64 1, i64 %t190) unreachable -inrange4160: +inrange4164: %t192 = extractvalue { ptr, i64, i64 } %t189, 0 %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i64 1 %t194 = load %S.ast.Type, ptr %t193 @@ -43287,50 +43313,50 @@ inrange4160: %t196 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t180, %S.ast.Type %t187, %S.ast.Type %t194, { ptr, i64, i64 } %t195, ptr %t196) ret void -endif4152: +endif4156: %t197 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t198 = load { ptr, i64, i64 }, ptr %t197 store { ptr, i64, i64 } %t198, ptr %a199 store { ptr, i64, i64 } { ptr @.str.2551, i64 5, i64 0 }, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp ne i32 %t201, 0 - br label %logic.from4161 -logic.from4161: - br i1 %t202, label %logic.rhs4162, label %logic.end4163 -logic.rhs4162: + br label %logic.from4165 +logic.from4165: + br i1 %t202, label %logic.rhs4166, label %logic.end4167 +logic.rhs4166: %t203 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 %t205 = load i64, ptr %t204 %t206 = icmp sgt i64 %t205, 0 - br label %logic.rend4164 -logic.rend4164: - br label %logic.end4163 -logic.end4163: - %t207 = phi i1 [ false, %logic.from4161 ], [ %t206, %logic.rend4164 ] - br label %logic.from4165 -logic.from4165: - br i1 %t207, label %logic.rhs4166, label %logic.end4167 -logic.rhs4166: + br label %logic.rend4168 +logic.rend4168: + br label %logic.end4167 +logic.end4167: + %t207 = phi i1 [ false, %logic.from4165 ], [ %t206, %logic.rend4168 ] + br label %logic.from4169 +logic.from4169: + br i1 %t207, label %logic.rhs4170, label %logic.end4171 +logic.rhs4170: %t208 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t209 = load { ptr, i64, i64 }, ptr %t208 store { ptr, i64, i64 } %t209, ptr %a210 store { ptr, i64, i64 } { ptr @.str.2552, i64 6, i64 0 }, ptr %a211 %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) %t213 = icmp ne i32 %t212, 0 - br label %logic.rend4168 -logic.rend4168: - br label %logic.end4167 -logic.end4167: - %t214 = phi i1 [ false, %logic.from4165 ], [ %t213, %logic.rend4168 ] - br i1 %t214, label %then4169, label %endif4171 -then4169: + br label %logic.rend4172 +logic.rend4172: + br label %logic.end4171 +logic.end4171: + %t214 = phi i1 [ false, %logic.from4169 ], [ %t213, %logic.rend4172 ] + br i1 %t214, label %then4173, label %endif4175 +then4173: %t215 = load ptr, ptr %a1 %t216 = icmp eq ptr %t215, null - br i1 %t216, label %panic4172, label %ok4173 -panic4172: + br i1 %t216, label %panic4176, label %ok4177 +panic4176: call void @finch_panic(ptr @.str.2553, i64 1778, ptr @.str.2554) unreachable -ok4173: +ok4177: %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 16 %t218 = load ptr, ptr %a1 %t219 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 @@ -43341,11 +43367,11 @@ ok4173: %t224 = load { ptr, i64, i64 }, ptr %t217 %t225 = extractvalue { ptr, i64, i64 } %t224, 1 %t226 = icmp uge i64 %t223, %t225 - br i1 %t226, label %range4174, label %inrange4175 -range4174: + br i1 %t226, label %range4178, label %inrange4179 +range4178: call void @finch_panic_index(ptr @.str.2555, i64 1778, i64 %t223, i64 %t225) unreachable -inrange4175: +inrange4179: %t227 = extractvalue { ptr, i64, i64 } %t224, 0 %t228 = getelementptr inbounds %S.gen.StructDef, ptr %t227, i64 %t223 %t229 = load %S.gen.StructDef, ptr %t228 @@ -43361,10 +43387,10 @@ inrange4175: store { ptr, i64, i64 } %t237, ptr %a239 %t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239) %t241 = icmp ne i32 %t240, 0 - br label %logic.from4176 -logic.from4176: - br i1 %t241, label %logic.rhs4177, label %logic.end4178 -logic.rhs4177: + br label %logic.from4180 +logic.from4180: + br i1 %t241, label %logic.rhs4181, label %logic.end4182 +logic.rhs4181: %t242 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 %t244 = load i64, ptr %t243 @@ -43372,34 +43398,34 @@ logic.rhs4177: %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %t245, i32 0, i32 1 %t247 = load i64, ptr %t246 %t248 = icmp eq i64 %t244, %t247 - br label %logic.rend4179 -logic.rend4179: - br label %logic.end4178 -logic.end4178: - %t249 = phi i1 [ false, %logic.from4176 ], [ %t248, %logic.rend4179 ] - br i1 %t249, label %then4180, label %endif4182 -then4180: + br label %logic.rend4183 +logic.rend4183: + br label %logic.end4182 +logic.end4182: + %t249 = phi i1 [ false, %logic.from4180 ], [ %t248, %logic.rend4183 ] + br i1 %t249, label %then4184, label %endif4186 +then4184: %t250 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %t250, i32 0, i32 1 %t252 = load i64, ptr %t251 store i64 0, ptr %a253 - br label %for.cond4183 -for.cond4183: + br label %for.cond4187 +for.cond4187: %t254 = load i64, ptr %a253 %t255 = icmp slt i64 %t254, %t252 - br i1 %t255, label %for.body4184, label %for.end4186 -for.body4184: + br i1 %t255, label %for.body4188, label %for.end4190 +for.body4188: %t256 = load ptr, ptr %a1 %t257 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t258 = load i64, ptr %a253 %t259 = load { ptr, i64, i64 }, ptr %t257 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 %t258, %t260 - br i1 %t261, label %range4187, label %inrange4188 -range4187: + br i1 %t261, label %range4191, label %inrange4192 +range4191: call void @finch_panic_index(ptr @.str.2556, i64 1781, i64 %t258, i64 %t260) unreachable -inrange4188: +inrange4192: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds %S.ast.Type, ptr %t262, i64 %t258 %t264 = load %S.ast.Type, ptr %t263 @@ -43408,29 +43434,29 @@ inrange4188: %t267 = load { ptr, i64, i64 }, ptr %t265 %t268 = extractvalue { ptr, i64, i64 } %t267, 1 %t269 = icmp uge i64 %t266, %t268 - br i1 %t269, label %range4189, label %inrange4190 -range4189: + br i1 %t269, label %range4193, label %inrange4194 +range4193: call void @finch_panic_index(ptr @.str.2557, i64 1781, i64 %t266, i64 %t268) unreachable -inrange4190: +inrange4194: %t270 = extractvalue { ptr, i64, i64 } %t267, 0 %t271 = getelementptr inbounds %S.ast.Type, ptr %t270, i64 %t266 %t272 = load %S.ast.Type, ptr %t271 %t273 = load { ptr, i64, i64 }, ptr %a4 %t274 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t256, %S.ast.Type %t264, %S.ast.Type %t272, { ptr, i64, i64 } %t273, ptr %t274) - br label %for.step4185 -for.step4185: + br label %for.step4189 +for.step4189: %t275 = load i64, ptr %a253 %t276 = add i64 %t275, 1 store i64 %t276, ptr %a253 - br label %for.cond4183 -for.end4186: - br label %endif4182 -endif4182: + br label %for.cond4187 +for.end4190: + br label %endif4186 +endif4186: call void @finch.drop.S_gen_StructDef(ptr %a233) - br label %endif4171 -endif4171: + br label %endif4175 +endif4175: ret void } @@ -43441,19 +43467,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond4267 -n.cond4267: + br label %n.cond4271 +n.cond4271: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body4268, label %n.end4269 -n.body4268: + br i1 %t6, label %n.body4272, label %n.end4273 +n.body4272: %t7 = getelementptr inbounds %S.gen.Val, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Val(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond4267 -n.end4269: + br label %n.cond4271 +n.end4273: call void @finch_arr_free(ptr %a) ret void } @@ -43580,21 +43606,21 @@ entry: store { ptr, i64, i64 } %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic4191, label %ok4192 -panic4191: + br i1 %t7, label %panic4195, label %ok4196 +panic4195: call void @finch_panic(ptr @.str.2558, i64 1789, ptr @.str.2559) unreachable -ok4192: +ok4196: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 %t9 = load i64, ptr %a3 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range4193, label %inrange4194 -range4193: + br i1 %t12, label %range4197, label %inrange4198 +range4197: call void @finch_panic_index(ptr @.str.2560, i64 1789, i64 %t9, i64 %t11) unreachable -inrange4194: +inrange4198: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 %t15 = load %S.gen.Template, ptr %t14 @@ -43604,22 +43630,22 @@ inrange4194: store %S.gen.Template %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic4195, label %ok4196 -panic4195: + br i1 %t21, label %panic4199, label %ok4200 +panic4199: call void @finch_panic(ptr @.str.2561, i64 1790, ptr @.str.2562) unreachable -ok4196: +ok4200: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 0 %t23 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t24 = load i64, ptr %t23 %t25 = load { ptr, i64, i64 }, ptr %t22 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 %t24, %t26 - br i1 %t27, label %range4197, label %inrange4198 -range4197: + br i1 %t27, label %range4201, label %inrange4202 +range4201: call void @finch_panic_index(ptr @.str.2563, i64 1790, i64 %t24, i64 %t26) unreachable -inrange4198: +inrange4202: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Program, ptr %t28, i64 %t24 %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i32 0, i32 8 @@ -43628,11 +43654,11 @@ inrange4198: %t33 = load { ptr, i64, i64 }, ptr %t30 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range4199, label %inrange4200 -range4199: + br i1 %t35, label %range4203, label %inrange4204 +range4203: call void @finch_panic_index(ptr @.str.2564, i64 1790, i64 %t32, i64 %t34) unreachable -inrange4200: +inrange4204: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 %t32 %t38 = load %S.ast.Node, ptr %t37 @@ -43657,8 +43683,8 @@ inrange4200: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 %t57 = load i64, ptr %t56 %t58 = icmp sgt i64 %t57, 0 - br i1 %t58, label %then4201, label %endif4203 -then4201: + br i1 %t58, label %then4205, label %endif4207 +then4205: %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t60 = getelementptr inbounds %S.ast.Type, ptr %t59, i32 0, i32 1 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 @@ -43667,8 +43693,8 @@ then4201: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load i64, ptr %t64 %t66 = icmp ne i64 %t62, %t65 - br i1 %t66, label %then4204, label %endif4206 -then4204: + br i1 %t66, label %then4208, label %endif4210 +then4208: %t67 = load ptr, ptr %a1 %t68 = load %S.ast.Node, ptr %a2 %t69 = load { ptr, i64, i64 }, ptr %a5 @@ -43712,19 +43738,19 @@ then4204: call void @finch.gen.fail(ptr %t67, %S.ast.Node %t68, { ptr, i64, i64 } %t101) store { ptr, i64, i64 } %t101, ptr %a102 call void @finch_str_drop(ptr %a102) - br label %endif4206 -endif4206: + br label %endif4210 +endif4210: %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t104 = getelementptr inbounds %S.ast.Type, ptr %t103, i32 0, i32 1 store i64 0, ptr %a105 - br label %each.cond4207 -each.cond4207: + br label %each.cond4211 +each.cond4211: %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = load i64, ptr %a105 %t109 = icmp slt i64 %t108, %t107 - br i1 %t109, label %each.body4208, label %each.end4210 -each.body4208: + br i1 %t109, label %each.body4212, label %each.end4214 +each.body4212: %t110 = load ptr, ptr %t104 %t111 = getelementptr inbounds %S.ast.Type, ptr %t110, i64 %t108 %t112 = load %S.ast.Type, ptr %t111 @@ -43741,13 +43767,13 @@ each.body4208: %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 %t119 store %S.ast.Type %t118, ptr %t122 store i64 %t120, ptr %t114 - br label %each.step4209 -each.step4209: + br label %each.step4213 +each.step4213: %t123 = load i64, ptr %a105 %t124 = add i64 %t123, 1 store i64 %t124, ptr %a105 - br label %each.cond4207 -each.end4210: + br label %each.cond4211 +each.end4214: %t125 = load ptr, ptr %a1 %t126 = load ptr, ptr %a1 %t127 = load i64, ptr %a3 @@ -43765,18 +43791,18 @@ each.end4210: call void @finch.drop.S_ast_Node(ptr %a42) call void @finch.drop.S_gen_Template(ptr %a19) ret %S.gen.Val %t136 -endif4203: +endif4207: store %S.gen.Binds zeroinitializer, ptr %a137 %t138 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 %t140 = load i64, ptr %t139 store i64 0, ptr %a141 - br label %for.cond4211 -for.cond4211: + br label %for.cond4215 +for.cond4215: %t142 = load i64, ptr %a141 %t143 = icmp slt i64 %t142, %t140 - br i1 %t143, label %for.body4212, label %for.end4214 -for.body4212: + br i1 %t143, label %for.body4216, label %for.end4218 +for.body4216: %t144 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 %t146 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2570, i64 4, i64 0 }) @@ -43796,33 +43822,33 @@ for.body4212: %t156 = getelementptr inbounds i1, ptr %t155, i64 %t153 store i1 false, ptr %t156 store i64 %t154, ptr %t152 - br label %for.step4213 -for.step4213: + br label %for.step4217 +for.step4217: %t157 = load i64, ptr %a141 %t158 = add i64 %t157, 1 store i64 %t158, ptr %a141 - br label %for.cond4211 -for.end4214: + br label %for.cond4215 +for.end4218: store { ptr, i64, i64 } zeroinitializer, ptr %a159 %t160 = load ptr, ptr %a1 %t161 = icmp eq ptr %t160, null - br i1 %t161, label %panic4215, label %ok4216 -panic4215: + br i1 %t161, label %panic4219, label %ok4220 +panic4219: call void @finch_panic(ptr @.str.2571, i64 1809, ptr @.str.2572) unreachable -ok4216: +ok4220: %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 11 %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1 %t164 = load i64, ptr %t163 store i64 %t164, ptr %a165 %t166 = load i64, ptr %a47 store i64 0, ptr %a167 - br label %for.cond4217 -for.cond4217: + br label %for.cond4221 +for.cond4221: %t168 = load i64, ptr %a167 %t169 = icmp slt i64 %t168, %t166 - br i1 %t169, label %for.body4218, label %for.end4220 -for.body4218: + br i1 %t169, label %for.body4222, label %for.end4224 +for.body4222: %t170 = load ptr, ptr %a1 %t171 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t172 = load i64, ptr %a4 @@ -43831,11 +43857,11 @@ for.body4218: %t175 = load { ptr, i64, i64 }, ptr %t171 %t176 = extractvalue { ptr, i64, i64 } %t175, 1 %t177 = icmp uge i64 %t174, %t176 - br i1 %t177, label %range4221, label %inrange4222 -range4221: + br i1 %t177, label %range4225, label %inrange4226 +range4225: call void @finch_panic_index(ptr @.str.2573, i64 1811, i64 %t174, i64 %t176) unreachable -inrange4222: +inrange4226: %t178 = extractvalue { ptr, i64, i64 } %t175, 0 %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i64 %t174 %t180 = load %S.ast.Node, ptr %t179 @@ -43848,10 +43874,10 @@ inrange4222: store { ptr, i64, i64 } { ptr @.str.2574, i64 4, i64 0 }, ptr %a187 %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) %t189 = icmp ne i32 %t188, 0 - br label %logic.from4223 -logic.from4223: - br i1 %t189, label %logic.end4225, label %logic.rhs4224 -logic.rhs4224: + br label %logic.from4227 +logic.from4227: + br i1 %t189, label %logic.end4229, label %logic.rhs4228 +logic.rhs4228: %t190 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 %t191 = getelementptr inbounds %S.ast.Type, ptr %t190, i32 0, i32 0 %t192 = load { ptr, i64, i64 }, ptr %t191 @@ -43859,13 +43885,13 @@ logic.rhs4224: store { ptr, i64, i64 } { ptr @.str.2575, i64 4, i64 0 }, ptr %a194 %t195 = call i32 @finch_str_eq(ptr %a193, ptr %a194) %t196 = icmp ne i32 %t195, 0 - br label %logic.rend4226 -logic.rend4226: - br label %logic.end4225 -logic.end4225: - %t197 = phi i1 [ true, %logic.from4223 ], [ %t196, %logic.rend4226 ] - br i1 %t197, label %then4227, label %endif4229 -then4227: + br label %logic.rend4230 +logic.rend4230: + br label %logic.end4229 +logic.end4229: + %t197 = phi i1 [ true, %logic.from4227 ], [ %t196, %logic.rend4230 ] + br i1 %t197, label %then4231, label %endif4233 +then4231: %t198 = load ptr, ptr %a1 %t199 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t200 = load i64, ptr %a4 @@ -43874,11 +43900,11 @@ then4227: %t203 = load { ptr, i64, i64 }, ptr %t199 %t204 = extractvalue { ptr, i64, i64 } %t203, 1 %t205 = icmp uge i64 %t202, %t204 - br i1 %t205, label %range4230, label %inrange4231 -range4230: + br i1 %t205, label %range4234, label %inrange4235 +range4234: call void @finch_panic_index(ptr @.str.2576, i64 1813, i64 %t202, i64 %t204) unreachable -inrange4231: +inrange4235: %t206 = extractvalue { ptr, i64, i64 } %t203, 0 %t207 = getelementptr inbounds %S.ast.Node, ptr %t206, i64 %t202 %t208 = load %S.ast.Node, ptr %t207 @@ -43902,8 +43928,8 @@ inrange4231: call void @finch.gen.fail(ptr %t198, %S.ast.Node %t208, { ptr, i64, i64 } %t223) store { ptr, i64, i64 } %t223, ptr %a224 call void @finch_str_drop(ptr %a224) - br label %endif4229 -endif4229: + br label %endif4233 +endif4233: %t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 %t226 = load %S.gen.Val, ptr %a182 store %S.gen.Val %t226, ptr %a227 @@ -43925,11 +43951,11 @@ endif4229: %t239 = load { ptr, i64, i64 }, ptr %t237 %t240 = extractvalue { ptr, i64, i64 } %t239, 1 %t241 = icmp uge i64 %t238, %t240 - br i1 %t241, label %range4232, label %inrange4233 -range4232: + br i1 %t241, label %range4236, label %inrange4237 +range4236: call void @finch_panic_index(ptr @.str.2580, i64 1817, i64 %t238, i64 %t240) unreachable -inrange4233: +inrange4237: %t242 = extractvalue { ptr, i64, i64 } %t239, 0 %t243 = getelementptr inbounds %S.ast.Node, ptr %t242, i64 %t238 %t244 = getelementptr inbounds %S.ast.Node, ptr %t243, i32 0, i32 5 @@ -43940,39 +43966,39 @@ inrange4233: %t249 = load { ptr, i64, i64 }, ptr %t248 call void @finch.gen.bindType(ptr %t236, %S.ast.Type %t245, %S.ast.Type %t247, { ptr, i64, i64 } %t249, ptr %a137) call void @finch.drop.S_gen_Val(ptr %a182) - br label %for.step4219 -for.step4219: + br label %for.step4223 +for.step4223: %t250 = load i64, ptr %a167 %t251 = add i64 %t250, 1 store i64 %t251, ptr %a167 - br label %for.cond4217 -for.end4220: + br label %for.cond4221 +for.end4224: %t252 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i32 0, i32 1 %t254 = load i64, ptr %t253 store i64 0, ptr %a255 - br label %for.cond4234 -for.cond4234: + br label %for.cond4238 +for.cond4238: %t256 = load i64, ptr %a255 %t257 = icmp slt i64 %t256, %t254 - br i1 %t257, label %for.body4235, label %for.end4237 -for.body4235: + br i1 %t257, label %for.body4239, label %for.end4241 +for.body4239: %t258 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 %t259 = load i64, ptr %a255 %t260 = load { ptr, i64, i64 }, ptr %t258 %t261 = extractvalue { ptr, i64, i64 } %t260, 1 %t262 = icmp uge i64 %t259, %t261 - br i1 %t262, label %range4238, label %inrange4239 -range4238: + br i1 %t262, label %range4242, label %inrange4243 +range4242: call void @finch_panic_index(ptr @.str.2581, i64 1820, i64 %t259, i64 %t261) unreachable -inrange4239: +inrange4243: %t263 = extractvalue { ptr, i64, i64 } %t260, 0 %t264 = getelementptr inbounds i1, ptr %t263, i64 %t259 %t265 = load i1, ptr %t264 %t266 = xor i1 %t265, true - br i1 %t266, label %then4240, label %endif4242 -then4240: + br i1 %t266, label %then4244, label %endif4246 +then4244: %t267 = load ptr, ptr %a1 %t268 = load %S.ast.Node, ptr %a2 %t269 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 @@ -43980,11 +44006,11 @@ then4240: %t271 = load { ptr, i64, i64 }, ptr %t269 %t272 = extractvalue { ptr, i64, i64 } %t271, 1 %t273 = icmp uge i64 %t270, %t272 - br i1 %t273, label %range4243, label %inrange4244 -range4243: + br i1 %t273, label %range4247, label %inrange4248 +range4247: call void @finch_panic_index(ptr @.str.2583, i64 1821, i64 %t270, i64 %t272) unreachable -inrange4244: +inrange4248: %t274 = extractvalue { ptr, i64, i64 } %t271, 0 %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t274, i64 %t270 %t276 = load { ptr, i64, i64 }, ptr %t275 @@ -44015,15 +44041,15 @@ inrange4244: call void @finch.gen.fail(ptr %t267, %S.ast.Node %t268, { ptr, i64, i64 } %t297) store { ptr, i64, i64 } %t297, ptr %a298 call void @finch_str_drop(ptr %a298) - br label %endif4242 -endif4242: - br label %for.step4236 -for.step4236: + br label %endif4246 +endif4246: + br label %for.step4240 +for.step4240: %t299 = load i64, ptr %a255 %t300 = add i64 %t299, 1 store i64 %t300, ptr %a255 - br label %for.cond4234 -for.end4237: + br label %for.cond4238 +for.end4241: %t301 = load ptr, ptr %a1 %t302 = load i64, ptr %a3 %t303 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 @@ -44036,21 +44062,21 @@ for.end4237: store i64 %t307, ptr %a309 %t310 = load ptr, ptr %a1 %t311 = icmp eq ptr %t310, null - br i1 %t311, label %panic4245, label %ok4246 -panic4245: + br i1 %t311, label %panic4249, label %ok4250 +panic4249: call void @finch_panic(ptr @.str.2587, i64 1825, ptr @.str.2588) unreachable -ok4246: +ok4250: %t312 = getelementptr inbounds %S.gen.Gen, ptr %t310, i32 0, i32 15 %t313 = load i64, ptr %a309 %t314 = load { ptr, i64, i64 }, ptr %t312 %t315 = extractvalue { ptr, i64, i64 } %t314, 1 %t316 = icmp uge i64 %t313, %t315 - br i1 %t316, label %range4247, label %inrange4248 -range4247: + br i1 %t316, label %range4251, label %inrange4252 +range4251: call void @finch_panic_index(ptr @.str.2589, i64 1825, i64 %t313, i64 %t315) unreachable -inrange4248: +inrange4252: %t317 = extractvalue { ptr, i64, i64 } %t314, 0 %t318 = getelementptr inbounds %S.gen.FnSig, ptr %t317, i64 %t313 %t319 = load %S.gen.FnSig, ptr %t318 @@ -44065,22 +44091,22 @@ inrange4248: store { ptr, i64, i64 } zeroinitializer, ptr %a327 %t328 = load i64, ptr %a47 store i64 0, ptr %a329 - br label %for.cond4249 -for.cond4249: + br label %for.cond4253 +for.cond4253: %t330 = load i64, ptr %a329 %t331 = icmp slt i64 %t330, %t328 - br i1 %t331, label %for.body4250, label %for.end4252 -for.body4250: + br i1 %t331, label %for.body4254, label %for.end4256 +for.body4254: %t332 = load ptr, ptr %a1 %t333 = load i64, ptr %a329 %t334 = load { ptr, i64, i64 }, ptr %a159 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 - br i1 %t336, label %range4253, label %inrange4254 -range4253: + br i1 %t336, label %range4257, label %inrange4258 +range4257: call void @finch_panic_index(ptr @.str.2590, i64 1829, i64 %t333, i64 %t335) unreachable -inrange4254: +inrange4258: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds %S.gen.Val, ptr %t337, i64 %t333 %t339 = load %S.gen.Val, ptr %t338 @@ -44089,11 +44115,11 @@ inrange4254: %t342 = load { ptr, i64, i64 }, ptr %t340 %t343 = extractvalue { ptr, i64, i64 } %t342, 1 %t344 = icmp uge i64 %t341, %t343 - br i1 %t344, label %range4255, label %inrange4256 -range4255: + br i1 %t344, label %range4259, label %inrange4260 +range4259: call void @finch_panic_index(ptr @.str.2591, i64 1829, i64 %t341, i64 %t343) unreachable -inrange4256: +inrange4260: %t345 = extractvalue { ptr, i64, i64 } %t342, 0 %t346 = getelementptr inbounds %S.ast.Type, ptr %t345, i64 %t341 %t347 = load %S.ast.Type, ptr %t346 @@ -44104,11 +44130,11 @@ inrange4256: %t352 = load { ptr, i64, i64 }, ptr %t348 %t353 = extractvalue { ptr, i64, i64 } %t352, 1 %t354 = icmp uge i64 %t351, %t353 - br i1 %t354, label %range4257, label %inrange4258 -range4257: + br i1 %t354, label %range4261, label %inrange4262 +range4261: call void @finch_panic_index(ptr @.str.2592, i64 1829, i64 %t351, i64 %t353) unreachable -inrange4258: +inrange4262: %t355 = extractvalue { ptr, i64, i64 } %t352, 0 %t356 = getelementptr inbounds %S.ast.Node, ptr %t355, i64 %t351 %t357 = load %S.ast.Node, ptr %t356 @@ -44117,11 +44143,11 @@ inrange4258: %t360 = load { ptr, i64, i64 }, ptr %t358 %t361 = extractvalue { ptr, i64, i64 } %t360, 1 %t362 = icmp uge i64 %t359, %t361 - br i1 %t362, label %range4259, label %inrange4260 -range4259: + br i1 %t362, label %range4263, label %inrange4264 +range4263: call void @finch_panic_index(ptr @.str.2594, i64 1829, i64 %t359, i64 %t361) unreachable -inrange4260: +inrange4264: %t363 = extractvalue { ptr, i64, i64 } %t360, 0 %t364 = getelementptr inbounds { ptr, i64, i64 }, ptr %t363, i64 %t359 %t365 = load { ptr, i64, i64 }, ptr %t364 @@ -44146,11 +44172,11 @@ inrange4260: %t382 = load { ptr, i64, i64 }, ptr %t380 %t383 = extractvalue { ptr, i64, i64 } %t382, 1 %t384 = icmp uge i64 %t381, %t383 - br i1 %t384, label %range4261, label %inrange4262 -range4261: + br i1 %t384, label %range4265, label %inrange4266 +range4265: call void @finch_panic_index(ptr @.str.2596, i64 1830, i64 %t381, i64 %t383) unreachable -inrange4262: +inrange4266: %t385 = extractvalue { ptr, i64, i64 } %t382, 0 %t386 = getelementptr inbounds %S.ast.Type, ptr %t385, i64 %t381 %t387 = load %S.ast.Type, ptr %t386 @@ -44177,13 +44203,13 @@ inrange4262: store { ptr, i64, i64 } %t400, ptr %t404 store i64 %t402, ptr %t378 call void @finch.drop.S_gen_Val(ptr %a377) - br label %for.step4251 -for.step4251: + br label %for.step4255 +for.step4255: %t405 = load i64, ptr %a329 %t406 = add i64 %t405, 1 store i64 %t406, ptr %a329 - br label %for.cond4249 -for.end4252: + br label %for.cond4253 +for.end4256: %t407 = load ptr, ptr %a1 %t408 = load %S.gen.FnSig, ptr %a323 %t409 = load %S.ast.Node, ptr %a2 @@ -44192,14 +44218,14 @@ for.end4252: %t412 = call %S.gen.Val @finch.gen.emitCall(ptr %t407, %S.gen.FnSig %t408, %S.ast.Node %t409, { ptr, i64, i64 } %t410, { ptr, i64, i64 } %t411) store %S.gen.Val %t412, ptr %a413 store i64 0, ptr %a414 - br label %each.cond4263 -each.cond4263: + br label %each.cond4267 +each.cond4267: %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 %t416 = load i64, ptr %t415 %t417 = load i64, ptr %a414 %t418 = icmp slt i64 %t417, %t416 - br i1 %t418, label %each.body4264, label %each.end4266 -each.body4264: + br i1 %t418, label %each.body4268, label %each.end4270 +each.body4268: %t419 = load ptr, ptr %a159 %t420 = getelementptr inbounds %S.gen.Val, ptr %t419, i64 %t417 %t421 = load %S.gen.Val, ptr %t420 @@ -44207,13 +44233,13 @@ each.body4264: %t423 = load ptr, ptr %a1 %t424 = load %S.gen.Val, ptr %a422 call void @finch.gen.release(ptr %t423, %S.gen.Val %t424) - br label %each.step4265 -each.step4265: + br label %each.step4269 +each.step4269: %t425 = load i64, ptr %a414 %t426 = add i64 %t425, 1 store i64 %t426, ptr %a414 - br label %each.cond4263 -each.end4266: + br label %each.cond4267 +each.end4270: %t427 = load ptr, ptr %a1 %t428 = load i64, ptr %a165 call void @finch.gen.heldEnd(ptr %t427, i64 %t428) @@ -44251,20 +44277,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond4278 -n.cond4278: + br label %n.cond4282 +n.cond4282: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body4279, label %n.end4280 -n.body4279: + br i1 %t7, label %n.body4283, label %n.end4284 +n.body4283: %t8 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.cimport.CField, ptr %t2, i64 %t6 call void @finch.copy.S_cimport_CField(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond4278 -n.end4280: + br label %n.cond4282 +n.end4284: ret void } @@ -44350,30 +44376,30 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4270, label %ok4271 -panic4270: + br i1 %t4, label %panic4274, label %ok4275 +panic4274: call void @finch_panic(ptr @.str.2598, i64 1843, ptr @.str.2599) unreachable -ok4271: +ok4275: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 26 %t6 = getelementptr inbounds %S.cimport.CImports, ptr %t5, i32 0, i32 3 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic4272, label %ok4273 -panic4272: + br i1 %t8, label %panic4276, label %ok4277 +panic4276: call void @finch_panic(ptr @.str.2600, i64 1843, ptr @.str.2601) unreachable -ok4273: +ok4277: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 16 %t10 = load i64, ptr %a2 %t11 = load { ptr, i64, i64 }, ptr %t9 %t12 = extractvalue { ptr, i64, i64 } %t11, 1 %t13 = icmp uge i64 %t10, %t12 - br i1 %t13, label %range4274, label %inrange4275 -range4274: + br i1 %t13, label %range4278, label %inrange4279 +range4278: call void @finch_panic_index(ptr @.str.2602, i64 1843, i64 %t10, i64 %t12) unreachable -inrange4275: +inrange4279: %t14 = extractvalue { ptr, i64, i64 } %t11, 0 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i64 %t10 %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i32 0, i32 1 @@ -44381,14 +44407,14 @@ inrange4275: store { ptr, i64, i64 } %t17, ptr %a18 %t19 = call i64 @finch_map_find(ptr %t6, ptr %a18, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t20 = icmp slt i64 %t19, 0 - br i1 %t20, label %map.missing4276, label %map.found4277 -map.missing4276: + br i1 %t20, label %map.missing4280, label %map.found4281 +map.missing4280: store { ptr, i64, i64 } zeroinitializer, ptr %a21 store { ptr, i64, i64 } %t17, ptr %a22 call void @finch_buf_str(ptr %a21, ptr %a22, i32 1) call void @finch_map_missing(ptr @.str.2603, i64 1843, ptr %a21) unreachable -map.found4277: +map.found4281: %t23 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 %t24 = load ptr, ptr %t23 %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t24, i64 %t19 @@ -44400,21 +44426,21 @@ map.found4277: store %S.cimport.CStruct %t30, ptr %a31 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic4281, label %ok4282 -panic4281: + br i1 %t33, label %panic4285, label %ok4286 +panic4285: call void @finch_panic(ptr @.str.2604, i64 1844, ptr @.str.2605) unreachable -ok4282: +ok4286: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 16 %t35 = load i64, ptr %a2 %t36 = load { ptr, i64, i64 }, ptr %t34 %t37 = extractvalue { ptr, i64, i64 } %t36, 1 %t38 = icmp uge i64 %t35, %t37 - br i1 %t38, label %range4283, label %inrange4284 -range4283: + br i1 %t38, label %range4287, label %inrange4288 +range4287: call void @finch_panic_index(ptr @.str.2606, i64 1844, i64 %t35, i64 %t37) unreachable -inrange4284: +inrange4288: %t39 = extractvalue { ptr, i64, i64 } %t36, 0 %t40 = getelementptr inbounds %S.gen.StructDef, ptr %t39, i64 %t35 %t41 = getelementptr inbounds %S.gen.StructDef, ptr %t40, i32 0, i32 15 @@ -44423,24 +44449,24 @@ inrange4284: store { ptr, i64, i64 } zeroinitializer, ptr %a43 %t44 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 1 store i64 0, ptr %a45 - br label %each.cond4285 -each.cond4285: + br label %each.cond4289 +each.cond4289: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load i64, ptr %a45 %t49 = icmp slt i64 %t48, %t47 - br i1 %t49, label %each.body4286, label %each.end4288 -each.body4286: + br i1 %t49, label %each.body4290, label %each.end4292 +each.body4290: %t50 = load ptr, ptr %t44 %t51 = getelementptr inbounds %S.cimport.CField, ptr %t50, i64 %t48 %t52 = load %S.cimport.CField, ptr %t51 store %S.cimport.CField %t52, ptr %a53 %t54 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 5 %t55 = load i1, ptr %t54 - br i1 %t55, label %then4289, label %endif4291 -then4289: - br label %each.step4287 -endif4291: + br i1 %t55, label %then4293, label %endif4295 +then4293: + br label %each.step4291 +endif4295: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 1 %t58 = load %S.ast.Type, ptr %t57 @@ -44452,8 +44478,8 @@ endif4291: store { ptr, i64, i64 } { ptr @.str.2607, i64 6, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 - br i1 %t66, label %then4292, label %endif4294 -then4292: + br i1 %t66, label %then4296, label %endif4298 +then4296: %t67 = load ptr, ptr %a1 %t68 = load ptr, ptr %a1 %t69 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 3 @@ -44462,14 +44488,14 @@ then4292: %t72 = load { ptr, i64, i64 }, ptr %t71 %t73 = call i64 @finch.gen.findStruct(ptr %t68, { ptr, i64, i64 } %t70, { ptr, i64, i64 } %t72) call void @finch.gen.resolveStruct(ptr %t67, i64 %t73) - br label %endif4294 -endif4294: + br label %endif4298 +endif4298: %t74 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t75 = load i64, ptr %t74 %t76 = load i64, ptr %a42 %t77 = icmp sgt i64 %t75, %t76 - br i1 %t77, label %then4295, label %endif4297 -then4295: + br i1 %t77, label %then4299, label %endif4301 +then4299: %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t79 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t80 = load i64, ptr %t79 @@ -44496,25 +44522,25 @@ then4295: %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i64 %t95 store { ptr, i64, i64 } %t94, ptr %t98 store i64 %t96, ptr %t78 - br label %endif4297 -endif4297: + br label %endif4301 +endif4301: %t99 = load ptr, ptr %a1 %t100 = icmp eq ptr %t99, null - br i1 %t100, label %panic4298, label %ok4299 -panic4298: + br i1 %t100, label %panic4302, label %ok4303 +panic4302: call void @finch_panic(ptr @.str.2610, i64 1858, ptr @.str.2611) unreachable -ok4299: +ok4303: %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 16 %t102 = load i64, ptr %a2 %t103 = load { ptr, i64, i64 }, ptr %t101 %t104 = extractvalue { ptr, i64, i64 } %t103, 1 %t105 = icmp uge i64 %t102, %t104 - br i1 %t105, label %range4300, label %inrange4301 -range4300: + br i1 %t105, label %range4304, label %inrange4305 +range4304: call void @finch_panic_index(ptr @.str.2612, i64 1858, i64 %t102, i64 %t104) unreachable -inrange4301: +inrange4305: %t106 = extractvalue { ptr, i64, i64 } %t103, 0 %t107 = getelementptr inbounds %S.gen.StructDef, ptr %t106, i64 %t102 %t108 = getelementptr inbounds %S.gen.StructDef, ptr %t107, i32 0, i32 11 @@ -44533,21 +44559,21 @@ inrange4301: store i64 %t116, ptr %t109 %t119 = load ptr, ptr %a1 %t120 = icmp eq ptr %t119, null - br i1 %t120, label %panic4302, label %ok4303 -panic4302: + br i1 %t120, label %panic4306, label %ok4307 +panic4306: call void @finch_panic(ptr @.str.2613, i64 1859, ptr @.str.2614) unreachable -ok4303: +ok4307: %t121 = getelementptr inbounds %S.gen.Gen, ptr %t119, i32 0, i32 16 %t122 = load i64, ptr %a2 %t123 = load { ptr, i64, i64 }, ptr %t121 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 %t122, %t124 - br i1 %t125, label %range4304, label %inrange4305 -range4304: + br i1 %t125, label %range4308, label %inrange4309 +range4308: call void @finch_panic_index(ptr @.str.2615, i64 1859, i64 %t122, i64 %t124) unreachable -inrange4305: +inrange4309: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds %S.gen.StructDef, ptr %t126, i64 %t122 %t128 = getelementptr inbounds %S.gen.StructDef, ptr %t127, i32 0, i32 12 @@ -44565,21 +44591,21 @@ inrange4305: store i64 %t135, ptr %t129 %t138 = load ptr, ptr %a1 %t139 = icmp eq ptr %t138, null - br i1 %t139, label %panic4306, label %ok4307 -panic4306: + br i1 %t139, label %panic4310, label %ok4311 +panic4310: call void @finch_panic(ptr @.str.2616, i64 1860, ptr @.str.2617) unreachable -ok4307: +ok4311: %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 %t141 = load i64, ptr %a2 %t142 = load { ptr, i64, i64 }, ptr %t140 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 %t141, %t143 - br i1 %t144, label %range4308, label %inrange4309 -range4308: + br i1 %t144, label %range4312, label %inrange4313 +range4312: call void @finch_panic_index(ptr @.str.2618, i64 1860, i64 %t141, i64 %t143) unreachable -inrange4309: +inrange4313: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds %S.gen.StructDef, ptr %t145, i64 %t141 %t147 = getelementptr inbounds %S.gen.StructDef, ptr %t146, i32 0, i32 3 @@ -44595,21 +44621,21 @@ inrange4309: store i64 %t152, ptr %t148 %t155 = load ptr, ptr %a1 %t156 = icmp eq ptr %t155, null - br i1 %t156, label %panic4310, label %ok4311 -panic4310: + br i1 %t156, label %panic4314, label %ok4315 +panic4314: call void @finch_panic(ptr @.str.2619, i64 1861, ptr @.str.2620) unreachable -ok4311: +ok4315: %t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 16 %t158 = load i64, ptr %a2 %t159 = load { ptr, i64, i64 }, ptr %t157 %t160 = extractvalue { ptr, i64, i64 } %t159, 1 %t161 = icmp uge i64 %t158, %t160 - br i1 %t161, label %range4312, label %inrange4313 -range4312: + br i1 %t161, label %range4316, label %inrange4317 +range4316: call void @finch_panic_index(ptr @.str.2621, i64 1861, i64 %t158, i64 %t160) unreachable -inrange4313: +inrange4317: %t162 = extractvalue { ptr, i64, i64 } %t159, 0 %t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i64 %t158 %t164 = getelementptr inbounds %S.gen.StructDef, ptr %t163, i32 0, i32 4 @@ -44641,19 +44667,19 @@ inrange4313: %t184 = add i64 %t181, %t183 store i64 %t184, ptr %a42 call void @finch.drop.S_ast_Type(ptr %a60) - br label %each.step4287 -each.step4287: + br label %each.step4291 +each.step4291: %t185 = load i64, ptr %a45 %t186 = add i64 %t185, 1 store i64 %t186, ptr %a45 - br label %each.cond4285 -each.end4288: + br label %each.cond4289 +each.end4292: %t187 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t188 = load i64, ptr %t187 %t189 = load i64, ptr %a42 %t190 = icmp sgt i64 %t188, %t189 - br i1 %t190, label %then4314, label %endif4316 -then4314: + br i1 %t190, label %then4318, label %endif4320 +then4318: %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t192 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t193 = load i64, ptr %t192 @@ -44680,27 +44706,27 @@ then4314: %t211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t210, i64 %t208 store { ptr, i64, i64 } %t207, ptr %t211 store i64 %t209, ptr %t191 - br label %endif4316 -endif4316: + br label %endif4320 +endif4320: %t212 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 %t213 = load { ptr, i64, i64 }, ptr %t212 %t214 = load ptr, ptr %a1 %t215 = icmp eq ptr %t214, null - br i1 %t215, label %panic4317, label %ok4318 -panic4317: + br i1 %t215, label %panic4321, label %ok4322 +panic4321: call void @finch_panic(ptr @.str.2624, i64 1868, ptr @.str.2625) unreachable -ok4318: +ok4322: %t216 = getelementptr inbounds %S.gen.Gen, ptr %t214, i32 0, i32 16 %t217 = load i64, ptr %a2 %t218 = load { ptr, i64, i64 }, ptr %t216 %t219 = extractvalue { ptr, i64, i64 } %t218, 1 %t220 = icmp uge i64 %t217, %t219 - br i1 %t220, label %range4319, label %inrange4320 -range4319: + br i1 %t220, label %range4323, label %inrange4324 +range4323: call void @finch_panic_index(ptr @.str.2626, i64 1868, i64 %t217, i64 %t219) unreachable -inrange4320: +inrange4324: %t221 = extractvalue { ptr, i64, i64 } %t218, 0 %t222 = getelementptr inbounds %S.gen.StructDef, ptr %t221, i64 %t217 %t223 = getelementptr inbounds %S.gen.StructDef, ptr %t222, i32 0, i32 8 @@ -44713,38 +44739,38 @@ inrange4320: call void @finch_str_drop(ptr %a228) %t229 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 5 %t230 = load i1, ptr %t229 - br label %logic.from4321 -logic.from4321: - br i1 %t230, label %logic.rhs4322, label %logic.end4323 -logic.rhs4322: + br label %logic.from4325 +logic.from4325: + br i1 %t230, label %logic.rhs4326, label %logic.end4327 +logic.rhs4326: %t231 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i32 0, i32 1 %t233 = load i64, ptr %t232 %t234 = icmp eq i64 %t233, 0 - br label %logic.rend4324 -logic.rend4324: - br label %logic.end4323 -logic.end4323: - %t235 = phi i1 [ false, %logic.from4321 ], [ %t234, %logic.rend4324 ] - br i1 %t235, label %then4325, label %endif4327 -then4325: + br label %logic.rend4328 +logic.rend4328: + br label %logic.end4327 +logic.end4327: + %t235 = phi i1 [ false, %logic.from4325 ], [ %t234, %logic.rend4328 ] + br i1 %t235, label %then4329, label %endif4331 +then4329: %t236 = load ptr, ptr %a1 %t237 = icmp eq ptr %t236, null - br i1 %t237, label %panic4328, label %ok4329 -panic4328: + br i1 %t237, label %panic4332, label %ok4333 +panic4332: call void @finch_panic(ptr @.str.2628, i64 1870, ptr @.str.2629) unreachable -ok4329: +ok4333: %t238 = getelementptr inbounds %S.gen.Gen, ptr %t236, i32 0, i32 16 %t239 = load i64, ptr %a2 %t240 = load { ptr, i64, i64 }, ptr %t238 %t241 = extractvalue { ptr, i64, i64 } %t240, 1 %t242 = icmp uge i64 %t239, %t241 - br i1 %t242, label %range4330, label %inrange4331 -range4330: + br i1 %t242, label %range4334, label %inrange4335 +range4334: call void @finch_panic_index(ptr @.str.2630, i64 1870, i64 %t239, i64 %t241) unreachable -inrange4331: +inrange4335: %t243 = extractvalue { ptr, i64, i64 } %t240, 0 %t244 = getelementptr inbounds %S.gen.StructDef, ptr %t243, i64 %t239 %t245 = getelementptr inbounds %S.gen.StructDef, ptr %t244, i32 0, i32 8 @@ -44752,27 +44778,27 @@ inrange4331: store { ptr, i64, i64 } { ptr @.str.2627, i64 49, i64 0 }, ptr %t245 store { ptr, i64, i64 } %t246, ptr %a247 call void @finch_str_drop(ptr %a247) - br label %endif4327 -endif4327: + br label %endif4331 +endif4331: %t248 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t249 = load i64, ptr %t248 %t250 = load ptr, ptr %a1 %t251 = icmp eq ptr %t250, null - br i1 %t251, label %panic4332, label %ok4333 -panic4332: + br i1 %t251, label %panic4336, label %ok4337 +panic4336: call void @finch_panic(ptr @.str.2631, i64 1872, ptr @.str.2632) unreachable -ok4333: +ok4337: %t252 = getelementptr inbounds %S.gen.Gen, ptr %t250, i32 0, i32 16 %t253 = load i64, ptr %a2 %t254 = load { ptr, i64, i64 }, ptr %t252 %t255 = extractvalue { ptr, i64, i64 } %t254, 1 %t256 = icmp uge i64 %t253, %t255 - br i1 %t256, label %range4334, label %inrange4335 -range4334: + br i1 %t256, label %range4338, label %inrange4339 +range4338: call void @finch_panic_index(ptr @.str.2633, i64 1872, i64 %t253, i64 %t255) unreachable -inrange4335: +inrange4339: %t257 = extractvalue { ptr, i64, i64 } %t254, 0 %t258 = getelementptr inbounds %S.gen.StructDef, ptr %t257, i64 %t253 %t259 = getelementptr inbounds %S.gen.StructDef, ptr %t258, i32 0, i32 9 @@ -44781,53 +44807,53 @@ inrange4335: %t261 = load i64, ptr %t260 %t262 = load ptr, ptr %a1 %t263 = icmp eq ptr %t262, null - br i1 %t263, label %panic4336, label %ok4337 -panic4336: + br i1 %t263, label %panic4340, label %ok4341 +panic4340: call void @finch_panic(ptr @.str.2634, i64 1873, ptr @.str.2635) unreachable -ok4337: +ok4341: %t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 16 %t265 = load i64, ptr %a2 %t266 = load { ptr, i64, i64 }, ptr %t264 %t267 = extractvalue { ptr, i64, i64 } %t266, 1 %t268 = icmp uge i64 %t265, %t267 - br i1 %t268, label %range4338, label %inrange4339 -range4338: + br i1 %t268, label %range4342, label %inrange4343 +range4342: call void @finch_panic_index(ptr @.str.2636, i64 1873, i64 %t265, i64 %t267) unreachable -inrange4339: +inrange4343: %t269 = extractvalue { ptr, i64, i64 } %t266, 0 %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i64 %t265 %t271 = getelementptr inbounds %S.gen.StructDef, ptr %t270, i32 0, i32 10 store i64 %t261, ptr %t271 %t272 = load ptr, ptr %a1 %t273 = icmp eq ptr %t272, null - br i1 %t273, label %panic4340, label %ok4341 -panic4340: + br i1 %t273, label %panic4344, label %ok4345 +panic4344: call void @finch_panic(ptr @.str.2637, i64 1874, ptr @.str.2638) unreachable -ok4341: +ok4345: %t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 16 %t275 = load i64, ptr %a2 %t276 = load { ptr, i64, i64 }, ptr %t274 %t277 = extractvalue { ptr, i64, i64 } %t276, 1 %t278 = icmp uge i64 %t275, %t277 - br i1 %t278, label %range4342, label %inrange4343 -range4342: + br i1 %t278, label %range4346, label %inrange4347 +range4346: call void @finch_panic_index(ptr @.str.2639, i64 1874, i64 %t275, i64 %t277) unreachable -inrange4343: +inrange4347: %t279 = extractvalue { ptr, i64, i64 } %t276, 0 %t280 = getelementptr inbounds %S.gen.StructDef, ptr %t279, i64 %t275 %t281 = getelementptr inbounds %S.gen.StructDef, ptr %t280, i32 0, i32 15 store i64 2, ptr %t281 %t282 = load ptr, ptr %a1 %t283 = icmp eq ptr %t282, null - br i1 %t283, label %panic4344, label %ok4345 -panic4344: + br i1 %t283, label %panic4348, label %ok4349 +panic4348: call void @finch_panic(ptr @.str.2640, i64 1875, ptr @.str.2641) unreachable -ok4345: +ok4349: %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 2 %t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i32 0, i32 1 %t286 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 0 @@ -44912,95 +44938,95 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4346, label %ok4347 -panic4346: + br i1 %t4, label %panic4350, label %ok4351 +panic4350: call void @finch_panic(ptr @.str.2646, i64 1879, ptr @.str.2647) unreachable -ok4347: +ok4351: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 - br i1 %t9, label %range4348, label %inrange4349 -range4348: + br i1 %t9, label %range4352, label %inrange4353 +range4352: call void @finch_panic_index(ptr @.str.2648, i64 1879, i64 %t6, i64 %t8) unreachable -inrange4349: +inrange4353: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.StructDef, ptr %t10, i64 %t6 %t12 = getelementptr inbounds %S.gen.StructDef, ptr %t11, i32 0, i32 15 %t13 = load i64, ptr %t12 %t14 = icmp eq i64 %t13, 2 - br i1 %t14, label %then4350, label %endif4352 -then4350: + br i1 %t14, label %then4354, label %endif4356 +then4354: ret void -endif4352: +endif4356: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic4353, label %ok4354 -panic4353: + br i1 %t16, label %panic4357, label %ok4358 +panic4357: call void @finch_panic(ptr @.str.2649, i64 1882, ptr @.str.2650) unreachable -ok4354: +ok4358: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 16 %t18 = load i64, ptr %a2 %t19 = load { ptr, i64, i64 }, ptr %t17 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range4355, label %inrange4356 -range4355: + br i1 %t21, label %range4359, label %inrange4360 +range4359: call void @finch_panic_index(ptr @.str.2651, i64 1882, i64 %t18, i64 %t20) unreachable -inrange4356: +inrange4360: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i64 %t18 %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i32 0, i32 2 %t25 = load i1, ptr %t24 - br i1 %t25, label %then4357, label %endif4359 -then4357: + br i1 %t25, label %then4361, label %endif4363 +then4361: %t26 = load ptr, ptr %a1 %t27 = load i64, ptr %a2 call void @finch.gen.resolveCStruct(ptr %t26, i64 %t27) ret void -endif4359: +endif4363: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic4360, label %ok4361 -panic4360: + br i1 %t29, label %panic4364, label %ok4365 +panic4364: call void @finch_panic(ptr @.str.2652, i64 1886, ptr @.str.2653) unreachable -ok4361: +ok4365: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 %t31 = load i64, ptr %a2 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range4362, label %inrange4363 -range4362: + br i1 %t34, label %range4366, label %inrange4367 +range4366: call void @finch_panic_index(ptr @.str.2654, i64 1886, i64 %t31, i64 %t33) unreachable -inrange4363: +inrange4367: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 5 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 %t39 = load i64, ptr %t38 %t40 = icmp eq i64 %t39, 0 - br i1 %t40, label %then4364, label %endif4366 -then4364: + br i1 %t40, label %then4368, label %endif4370 +then4368: %t41 = load ptr, ptr %a1 %t42 = load i64, ptr %a2 call void @finch.gen.resolveStructBody(ptr %t41, i64 %t42) ret void -endif4366: +endif4370: %t43 = load ptr, ptr %a1 %t44 = icmp eq ptr %t43, null - br i1 %t44, label %panic4367, label %ok4368 -panic4367: + br i1 %t44, label %panic4371, label %ok4372 +panic4371: call void @finch_panic(ptr @.str.2655, i64 1891, ptr @.str.2656) unreachable -ok4368: +ok4372: %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 18 %t46 = load { ptr, i64, i64 }, ptr %t45 store { ptr, i64, i64 } %t46, ptr %a47 @@ -45009,11 +45035,11 @@ ok4368: store { ptr, i64, i64 } %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null - br i1 %t52, label %panic4369, label %ok4370 -panic4369: + br i1 %t52, label %panic4373, label %ok4374 +panic4373: call void @finch_panic(ptr @.str.2657, i64 1892, ptr @.str.2658) unreachable -ok4370: +ok4374: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 19 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 @@ -45022,11 +45048,11 @@ ok4370: store { ptr, i64, i64 } %t57, ptr %a58 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic4371, label %ok4372 -panic4371: + br i1 %t60, label %panic4375, label %ok4376 +panic4375: call void @finch_panic(ptr @.str.2659, i64 1893, ptr @.str.2660) unreachable -ok4372: +ok4376: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 20 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 @@ -45035,32 +45061,32 @@ ok4372: store { ptr, i64, i64 } %t65, ptr %a66 %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic4373, label %ok4374 -panic4373: + br i1 %t68, label %panic4377, label %ok4378 +panic4377: call void @finch_panic(ptr @.str.2661, i64 1894, ptr @.str.2662) unreachable -ok4374: +ok4378: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 16 %t70 = load i64, ptr %a2 %t71 = load { ptr, i64, i64 }, ptr %t69 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 %t70, %t72 - br i1 %t73, label %range4375, label %inrange4376 -range4375: + br i1 %t73, label %range4379, label %inrange4380 +range4379: call void @finch_panic_index(ptr @.str.2663, i64 1894, i64 %t70, i64 %t72) unreachable -inrange4376: +inrange4380: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds %S.gen.StructDef, ptr %t74, i64 %t70 %t76 = getelementptr inbounds %S.gen.StructDef, ptr %t75, i32 0, i32 6 %t77 = load { ptr, i64, i64 }, ptr %t76 %t78 = load ptr, ptr %a1 %t79 = icmp eq ptr %t78, null - br i1 %t79, label %panic4377, label %ok4378 -panic4377: + br i1 %t79, label %panic4381, label %ok4382 +panic4381: call void @finch_panic(ptr @.str.2664, i64 1894, ptr @.str.2665) unreachable -ok4378: +ok4382: %t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 18 store { ptr, i64, i64 } %t77, ptr %a81 call void @finch.copy.arr_str(ptr %a82, ptr %a81) @@ -45071,32 +45097,32 @@ ok4378: call void @finch.drop.arr_str(ptr %a85) %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic4379, label %ok4380 -panic4379: + br i1 %t87, label %panic4383, label %ok4384 +panic4383: call void @finch_panic(ptr @.str.2666, i64 1895, ptr @.str.2667) unreachable -ok4380: +ok4384: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 16 %t89 = load i64, ptr %a2 %t90 = load { ptr, i64, i64 }, ptr %t88 %t91 = extractvalue { ptr, i64, i64 } %t90, 1 %t92 = icmp uge i64 %t89, %t91 - br i1 %t92, label %range4381, label %inrange4382 -range4381: + br i1 %t92, label %range4385, label %inrange4386 +range4385: call void @finch_panic_index(ptr @.str.2668, i64 1895, i64 %t89, i64 %t91) unreachable -inrange4382: +inrange4386: %t93 = extractvalue { ptr, i64, i64 } %t90, 0 %t94 = getelementptr inbounds %S.gen.StructDef, ptr %t93, i64 %t89 %t95 = getelementptr inbounds %S.gen.StructDef, ptr %t94, i32 0, i32 7 %t96 = load { ptr, i64, i64 }, ptr %t95 %t97 = load ptr, ptr %a1 %t98 = icmp eq ptr %t97, null - br i1 %t98, label %panic4383, label %ok4384 -panic4383: + br i1 %t98, label %panic4387, label %ok4388 +panic4387: call void @finch_panic(ptr @.str.2669, i64 1895, ptr @.str.2670) unreachable -ok4384: +ok4388: %t99 = getelementptr inbounds %S.gen.Gen, ptr %t97, i32 0, i32 19 store { ptr, i64, i64 } %t96, ptr %a100 call void @finch.copy.arr_S_ast_Type(ptr %a101, ptr %a100) @@ -45107,21 +45133,21 @@ ok4384: call void @finch.drop.arr_S_ast_Type(ptr %a104) %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null - br i1 %t106, label %panic4385, label %ok4386 -panic4385: + br i1 %t106, label %panic4389, label %ok4390 +panic4389: call void @finch_panic(ptr @.str.2672, i64 1896, ptr @.str.2673) unreachable -ok4386: +ok4390: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 16 %t108 = load i64, ptr %a2 %t109 = load { ptr, i64, i64 }, ptr %t107 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 %t108, %t110 - br i1 %t111, label %range4387, label %inrange4388 -range4387: + br i1 %t111, label %range4391, label %inrange4392 +range4391: call void @finch_panic_index(ptr @.str.2674, i64 1896, i64 %t108, i64 %t110) unreachable -inrange4388: +inrange4392: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds %S.gen.StructDef, ptr %t112, i64 %t108 %t114 = getelementptr inbounds %S.gen.StructDef, ptr %t113, i32 0, i32 1 @@ -45138,11 +45164,11 @@ inrange4388: %t124 = load { ptr, i64, i64 }, ptr %a120 %t125 = load ptr, ptr %a1 %t126 = icmp eq ptr %t125, null - br i1 %t126, label %panic4389, label %ok4390 -panic4389: + br i1 %t126, label %panic4393, label %ok4394 +panic4393: call void @finch_panic(ptr @.str.2676, i64 1896, ptr @.str.2677) unreachable -ok4390: +ok4394: %t127 = getelementptr inbounds %S.gen.Gen, ptr %t125, i32 0, i32 20 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t124, ptr %t127 @@ -45154,11 +45180,11 @@ ok4390: %t132 = load { ptr, i64, i64 }, ptr %a50 %t133 = load ptr, ptr %a1 %t134 = icmp eq ptr %t133, null - br i1 %t134, label %panic4391, label %ok4392 -panic4391: + br i1 %t134, label %panic4395, label %ok4396 +panic4395: call void @finch_panic(ptr @.str.2678, i64 1898, ptr @.str.2679) unreachable -ok4392: +ok4396: %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 18 store { ptr, i64, i64 } %t132, ptr %a136 call void @finch.copy.arr_str(ptr %a137, ptr %a136) @@ -45170,11 +45196,11 @@ ok4392: %t141 = load { ptr, i64, i64 }, ptr %a58 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic4393, label %ok4394 -panic4393: + br i1 %t143, label %panic4397, label %ok4398 +panic4397: call void @finch_panic(ptr @.str.2680, i64 1899, ptr @.str.2681) unreachable -ok4394: +ok4398: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 19 store { ptr, i64, i64 } %t141, ptr %a145 call void @finch.copy.arr_S_ast_Type(ptr %a146, ptr %a145) @@ -45186,11 +45212,11 @@ ok4394: %t150 = load { ptr, i64, i64 }, ptr %a66 %t151 = load ptr, ptr %a1 %t152 = icmp eq ptr %t151, null - br i1 %t152, label %panic4395, label %ok4396 -panic4395: + br i1 %t152, label %panic4399, label %ok4400 +panic4399: call void @finch_panic(ptr @.str.2682, i64 1900, ptr @.str.2683) unreachable -ok4396: +ok4400: %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 20 store { ptr, i64, i64 } %t150, ptr %a154 call void @finch_str_copy(ptr %a155, ptr %a154) @@ -45288,29 +45314,29 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4397, label %ok4398 -panic4397: + br i1 %t4, label %panic4401, label %ok4402 +panic4401: call void @finch_panic(ptr @.str.2684, i64 1904, ptr @.str.2685) unreachable -ok4398: +ok4402: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic4399, label %ok4400 -panic4399: + br i1 %t7, label %panic4403, label %ok4404 +panic4403: call void @finch_panic(ptr @.str.2686, i64 1904, ptr @.str.2687) unreachable -ok4400: +ok4404: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range4401, label %inrange4402 -range4401: + br i1 %t12, label %range4405, label %inrange4406 +range4405: call void @finch_panic_index(ptr @.str.2688, i64 1904, i64 %t9, i64 %t11) unreachable -inrange4402: +inrange4406: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i32 0, i32 13 @@ -45318,31 +45344,31 @@ inrange4402: %t17 = load { ptr, i64, i64 }, ptr %t5 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 - br i1 %t19, label %range4403, label %inrange4404 -range4403: + br i1 %t19, label %range4407, label %inrange4408 +range4407: call void @finch_panic_index(ptr @.str.2689, i64 1904, i64 %t16, i64 %t18) unreachable -inrange4404: +inrange4408: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.ast.Program, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.ast.Program, ptr %t21, i32 0, i32 6 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic4405, label %ok4406 -panic4405: + br i1 %t24, label %panic4409, label %ok4410 +panic4409: call void @finch_panic(ptr @.str.2690, i64 1904, ptr @.str.2691) unreachable -ok4406: +ok4410: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 16 %t26 = load i64, ptr %a2 %t27 = load { ptr, i64, i64 }, ptr %t25 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 - br i1 %t29, label %range4407, label %inrange4408 -range4407: + br i1 %t29, label %range4411, label %inrange4412 +range4411: call void @finch_panic_index(ptr @.str.2692, i64 1904, i64 %t26, i64 %t28) unreachable -inrange4408: +inrange4412: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.gen.StructDef, ptr %t30, i64 %t26 %t32 = getelementptr inbounds %S.gen.StructDef, ptr %t31, i32 0, i32 14 @@ -45350,11 +45376,11 @@ inrange4408: %t34 = load { ptr, i64, i64 }, ptr %t22 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 - br i1 %t36, label %range4409, label %inrange4410 -range4409: + br i1 %t36, label %range4413, label %inrange4414 +range4413: call void @finch_panic_index(ptr @.str.2693, i64 1904, i64 %t33, i64 %t35) unreachable -inrange4410: +inrange4414: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 %t39 = load %S.ast.Node, ptr %t38 @@ -45364,28 +45390,28 @@ inrange4410: store %S.ast.Node %t42, ptr %a43 %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic4411, label %ok4412 -panic4411: + br i1 %t45, label %panic4415, label %ok4416 +panic4415: call void @finch_panic(ptr @.str.2694, i64 1905, ptr @.str.2695) unreachable -ok4412: +ok4416: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 16 %t47 = load i64, ptr %a2 %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range4413, label %inrange4414 -range4413: + br i1 %t50, label %range4417, label %inrange4418 +range4417: call void @finch_panic_index(ptr @.str.2696, i64 1905, i64 %t47, i64 %t49) unreachable -inrange4414: +inrange4418: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds %S.gen.StructDef, ptr %t51, i64 %t47 %t53 = getelementptr inbounds %S.gen.StructDef, ptr %t52, i32 0, i32 15 %t54 = load i64, ptr %t53 %t55 = icmp eq i64 %t54, 1 - br i1 %t55, label %then4415, label %endif4417 -then4415: + br i1 %t55, label %then4419, label %endif4421 +then4419: %t56 = load ptr, ptr %a1 %t57 = load %S.ast.Node, ptr %a43 %t58 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 @@ -45431,36 +45457,36 @@ then4415: call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t92) store { ptr, i64, i64 } %t92, ptr %a93 call void @finch_str_drop(ptr %a93) - br label %endif4417 -endif4417: + br label %endif4421 +endif4421: %t94 = load ptr, ptr %a1 %t95 = icmp eq ptr %t94, null - br i1 %t95, label %panic4418, label %ok4419 -panic4418: + br i1 %t95, label %panic4422, label %ok4423 +panic4422: call void @finch_panic(ptr @.str.2701, i64 1908, ptr @.str.2702) unreachable -ok4419: +ok4423: %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 16 %t97 = load i64, ptr %a2 %t98 = load { ptr, i64, i64 }, ptr %t96 %t99 = extractvalue { ptr, i64, i64 } %t98, 1 %t100 = icmp uge i64 %t97, %t99 - br i1 %t100, label %range4420, label %inrange4421 -range4420: + br i1 %t100, label %range4424, label %inrange4425 +range4424: call void @finch_panic_index(ptr @.str.2703, i64 1908, i64 %t97, i64 %t99) unreachable -inrange4421: +inrange4425: %t101 = extractvalue { ptr, i64, i64 } %t98, 0 %t102 = getelementptr inbounds %S.gen.StructDef, ptr %t101, i64 %t97 %t103 = getelementptr inbounds %S.gen.StructDef, ptr %t102, i32 0, i32 15 store i64 1, ptr %t103 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null - br i1 %t105, label %panic4422, label %ok4423 -panic4422: + br i1 %t105, label %panic4426, label %ok4427 +panic4426: call void @finch_panic(ptr @.str.2704, i64 1909, ptr @.str.2705) unreachable -ok4423: +ok4427: %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 14 %t107 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t107, ptr %a108 @@ -45469,32 +45495,32 @@ ok4423: store { ptr, i64, i64 } %t110, ptr %a111 %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null - br i1 %t113, label %panic4424, label %ok4425 -panic4424: + br i1 %t113, label %panic4428, label %ok4429 +panic4428: call void @finch_panic(ptr @.str.2706, i64 1910, ptr @.str.2707) unreachable -ok4425: +ok4429: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 16 %t115 = load i64, ptr %a2 %t116 = load { ptr, i64, i64 }, ptr %t114 %t117 = extractvalue { ptr, i64, i64 } %t116, 1 %t118 = icmp uge i64 %t115, %t117 - br i1 %t118, label %range4426, label %inrange4427 -range4426: + br i1 %t118, label %range4430, label %inrange4431 +range4430: call void @finch_panic_index(ptr @.str.2708, i64 1910, i64 %t115, i64 %t117) unreachable -inrange4427: +inrange4431: %t119 = extractvalue { ptr, i64, i64 } %t116, 0 %t120 = getelementptr inbounds %S.gen.StructDef, ptr %t119, i64 %t115 %t121 = getelementptr inbounds %S.gen.StructDef, ptr %t120, i32 0, i32 0 %t122 = load { ptr, i64, i64 }, ptr %t121 %t123 = load ptr, ptr %a1 %t124 = icmp eq ptr %t123, null - br i1 %t124, label %panic4428, label %ok4429 -panic4428: + br i1 %t124, label %panic4432, label %ok4433 +panic4432: call void @finch_panic(ptr @.str.2709, i64 1910, ptr @.str.2710) unreachable -ok4429: +ok4433: %t125 = getelementptr inbounds %S.gen.Gen, ptr %t123, i32 0, i32 14 store { ptr, i64, i64 } %t122, ptr %a126 call void @finch_str_copy(ptr %a127, ptr %a126) @@ -45507,14 +45533,14 @@ ok4429: store { ptr, i64, i64 } zeroinitializer, ptr %a132 %t133 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 9 store i64 0, ptr %a134 - br label %each.cond4430 -each.cond4430: + br label %each.cond4434 +each.cond4434: %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = load i64, ptr %a134 %t138 = icmp slt i64 %t137, %t136 - br i1 %t138, label %each.body4431, label %each.end4433 -each.body4431: + br i1 %t138, label %each.body4435, label %each.end4437 +each.body4435: %t139 = load ptr, ptr %t133 %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 %t137 %t141 = load %S.ast.Node, ptr %t140 @@ -45531,8 +45557,8 @@ each.body4431: store { ptr, i64, i64 } { ptr @.str.2711, i64 6, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp ne i32 %t153, 0 - br i1 %t154, label %then4434, label %endif4436 -then4434: + br i1 %t154, label %then4438, label %endif4440 +then4438: %t155 = load ptr, ptr %a1 %t156 = load ptr, ptr %a1 %t157 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 3 @@ -45541,46 +45567,46 @@ then4434: %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = call i64 @finch.gen.findStruct(ptr %t156, { ptr, i64, i64 } %t158, { ptr, i64, i64 } %t160) call void @finch.gen.resolveStruct(ptr %t155, i64 %t161) - br label %endif4436 -endif4436: + br label %endif4440 +endif4440: %t162 = load ptr, ptr %a1 %t163 = icmp eq ptr %t162, null - br i1 %t163, label %panic4437, label %ok4438 -panic4437: + br i1 %t163, label %panic4441, label %ok4442 +panic4441: call void @finch_panic(ptr @.str.2712, i64 1918, ptr @.str.2713) unreachable -ok4438: +ok4442: %t164 = getelementptr inbounds %S.gen.Gen, ptr %t162, i32 0, i32 16 %t165 = load i64, ptr %a2 %t166 = load { ptr, i64, i64 }, ptr %t164 %t167 = extractvalue { ptr, i64, i64 } %t166, 1 %t168 = icmp uge i64 %t165, %t167 - br i1 %t168, label %range4439, label %inrange4440 -range4439: + br i1 %t168, label %range4443, label %inrange4444 +range4443: call void @finch_panic_index(ptr @.str.2714, i64 1918, i64 %t165, i64 %t167) unreachable -inrange4440: +inrange4444: %t169 = extractvalue { ptr, i64, i64 } %t166, 0 %t170 = getelementptr inbounds %S.gen.StructDef, ptr %t169, i64 %t165 %t171 = getelementptr inbounds %S.gen.StructDef, ptr %t170, i32 0, i32 3 %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic4441, label %ok4442 -panic4441: + br i1 %t174, label %panic4445, label %ok4446 +panic4445: call void @finch_panic(ptr @.str.2715, i64 1918, ptr @.str.2716) unreachable -ok4442: +ok4446: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 16 %t176 = load i64, ptr %a2 %t177 = load { ptr, i64, i64 }, ptr %t175 %t178 = extractvalue { ptr, i64, i64 } %t177, 1 %t179 = icmp uge i64 %t176, %t178 - br i1 %t179, label %range4443, label %inrange4444 -range4443: + br i1 %t179, label %range4447, label %inrange4448 +range4447: call void @finch_panic_index(ptr @.str.2717, i64 1918, i64 %t176, i64 %t178) unreachable -inrange4444: +inrange4448: %t180 = extractvalue { ptr, i64, i64 } %t177, 0 %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t176 %t182 = getelementptr inbounds %S.gen.StructDef, ptr %t181, i32 0, i32 11 @@ -45595,21 +45621,21 @@ inrange4444: store i64 %t186, ptr %t172 %t189 = load ptr, ptr %a1 %t190 = icmp eq ptr %t189, null - br i1 %t190, label %panic4445, label %ok4446 -panic4445: + br i1 %t190, label %panic4449, label %ok4450 +panic4449: call void @finch_panic(ptr @.str.2718, i64 1919, ptr @.str.2719) unreachable -ok4446: +ok4450: %t191 = getelementptr inbounds %S.gen.Gen, ptr %t189, i32 0, i32 16 %t192 = load i64, ptr %a2 %t193 = load { ptr, i64, i64 }, ptr %t191 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 %t192, %t194 - br i1 %t195, label %range4447, label %inrange4448 -range4447: + br i1 %t195, label %range4451, label %inrange4452 +range4451: call void @finch_panic_index(ptr @.str.2720, i64 1919, i64 %t192, i64 %t194) unreachable -inrange4448: +inrange4452: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds %S.gen.StructDef, ptr %t196, i64 %t192 %t198 = getelementptr inbounds %S.gen.StructDef, ptr %t197, i32 0, i32 11 @@ -45628,21 +45654,21 @@ inrange4448: store i64 %t206, ptr %t199 %t209 = load ptr, ptr %a1 %t210 = icmp eq ptr %t209, null - br i1 %t210, label %panic4449, label %ok4450 -panic4449: + br i1 %t210, label %panic4453, label %ok4454 +panic4453: call void @finch_panic(ptr @.str.2721, i64 1920, ptr @.str.2722) unreachable -ok4450: +ok4454: %t211 = getelementptr inbounds %S.gen.Gen, ptr %t209, i32 0, i32 16 %t212 = load i64, ptr %a2 %t213 = load { ptr, i64, i64 }, ptr %t211 %t214 = extractvalue { ptr, i64, i64 } %t213, 1 %t215 = icmp uge i64 %t212, %t214 - br i1 %t215, label %range4451, label %inrange4452 -range4451: + br i1 %t215, label %range4455, label %inrange4456 +range4455: call void @finch_panic_index(ptr @.str.2723, i64 1920, i64 %t212, i64 %t214) unreachable -inrange4452: +inrange4456: %t216 = extractvalue { ptr, i64, i64 } %t213, 0 %t217 = getelementptr inbounds %S.gen.StructDef, ptr %t216, i64 %t212 %t218 = getelementptr inbounds %S.gen.StructDef, ptr %t217, i32 0, i32 12 @@ -45661,11 +45687,11 @@ inrange4452: %t228 = load ptr, ptr %a1 %t229 = load %S.ast.Type, ptr %a148 %t230 = call i1 @finch.gen.owning(ptr %t228, %S.ast.Type %t229) - br i1 %t230, label %then4453, label %endif4455 -then4453: + br i1 %t230, label %then4457, label %endif4459 +then4457: store i1 true, ptr %a131 - br label %endif4455 -endif4455: + br label %endif4459 +endif4459: %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 %t232 = load ptr, ptr %a1 %t233 = load %S.ast.Type, ptr %a148 @@ -45678,31 +45704,31 @@ endif4455: store { ptr, i64, i64 } %t234, ptr %t238 store i64 %t236, ptr %t231 call void @finch.drop.S_ast_Type(ptr %a148) - br label %each.step4432 -each.step4432: + br label %each.step4436 +each.step4436: %t239 = load i64, ptr %a134 %t240 = add i64 %t239, 1 store i64 %t240, ptr %a134 - br label %each.cond4430 -each.end4433: + br label %each.cond4434 +each.end4437: %t241 = load i1, ptr %a131 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null - br i1 %t243, label %panic4456, label %ok4457 -panic4456: + br i1 %t243, label %panic4460, label %ok4461 +panic4460: call void @finch_panic(ptr @.str.2724, i64 1926, ptr @.str.2725) unreachable -ok4457: +ok4461: %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 16 %t245 = load i64, ptr %a2 %t246 = load { ptr, i64, i64 }, ptr %t244 %t247 = extractvalue { ptr, i64, i64 } %t246, 1 %t248 = icmp uge i64 %t245, %t247 - br i1 %t248, label %range4458, label %inrange4459 -range4458: + br i1 %t248, label %range4462, label %inrange4463 +range4462: call void @finch_panic_index(ptr @.str.2726, i64 1926, i64 %t245, i64 %t247) unreachable -inrange4459: +inrange4463: %t249 = extractvalue { ptr, i64, i64 } %t246, 0 %t250 = getelementptr inbounds %S.gen.StructDef, ptr %t249, i64 %t245 %t251 = getelementptr inbounds %S.gen.StructDef, ptr %t250, i32 0, i32 16 @@ -45710,11 +45736,11 @@ inrange4459: %t252 = load { ptr, i64, i64 }, ptr %a111 %t253 = load ptr, ptr %a1 %t254 = icmp eq ptr %t253, null - br i1 %t254, label %panic4460, label %ok4461 -panic4460: + br i1 %t254, label %panic4464, label %ok4465 +panic4464: call void @finch_panic(ptr @.str.2727, i64 1927, ptr @.str.2728) unreachable -ok4461: +ok4465: %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 14 store { ptr, i64, i64 } %t252, ptr %a256 call void @finch_str_copy(ptr %a257, ptr %a256) @@ -45725,51 +45751,51 @@ ok4461: call void @finch_str_drop(ptr %a260) %t261 = load ptr, ptr %a1 %t262 = icmp eq ptr %t261, null - br i1 %t262, label %panic4462, label %ok4463 -panic4462: + br i1 %t262, label %panic4466, label %ok4467 +panic4466: call void @finch_panic(ptr @.str.2729, i64 1928, ptr @.str.2730) unreachable -ok4463: +ok4467: %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 16 %t264 = load i64, ptr %a2 %t265 = load { ptr, i64, i64 }, ptr %t263 %t266 = extractvalue { ptr, i64, i64 } %t265, 1 %t267 = icmp uge i64 %t264, %t266 - br i1 %t267, label %range4464, label %inrange4465 -range4464: + br i1 %t267, label %range4468, label %inrange4469 +range4468: call void @finch_panic_index(ptr @.str.2731, i64 1928, i64 %t264, i64 %t266) unreachable -inrange4465: +inrange4469: %t268 = extractvalue { ptr, i64, i64 } %t265, 0 %t269 = getelementptr inbounds %S.gen.StructDef, ptr %t268, i64 %t264 %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i32 0, i32 15 store i64 2, ptr %t270 %t271 = load ptr, ptr %a1 %t272 = icmp eq ptr %t271, null - br i1 %t272, label %panic4466, label %ok4467 -panic4466: + br i1 %t272, label %panic4470, label %ok4471 +panic4470: call void @finch_panic(ptr @.str.2732, i64 1929, ptr @.str.2733) unreachable -ok4467: +ok4471: %t273 = getelementptr inbounds %S.gen.Gen, ptr %t271, i32 0, i32 2 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 %t275 = load ptr, ptr %a1 %t276 = icmp eq ptr %t275, null - br i1 %t276, label %panic4468, label %ok4469 -panic4468: + br i1 %t276, label %panic4472, label %ok4473 +panic4472: call void @finch_panic(ptr @.str.2735, i64 1929, ptr @.str.2736) unreachable -ok4469: +ok4473: %t277 = getelementptr inbounds %S.gen.Gen, ptr %t275, i32 0, i32 16 %t278 = load i64, ptr %a2 %t279 = load { ptr, i64, i64 }, ptr %t277 %t280 = extractvalue { ptr, i64, i64 } %t279, 1 %t281 = icmp uge i64 %t278, %t280 - br i1 %t281, label %range4470, label %inrange4471 -range4470: + br i1 %t281, label %range4474, label %inrange4475 +range4474: call void @finch_panic_index(ptr @.str.2737, i64 1929, i64 %t278, i64 %t280) unreachable -inrange4471: +inrange4475: %t282 = extractvalue { ptr, i64, i64 } %t279, 0 %t283 = getelementptr inbounds %S.gen.StructDef, ptr %t282, i64 %t278 %t284 = getelementptr inbounds %S.gen.StructDef, ptr %t283, i32 0, i32 0 @@ -45789,21 +45815,21 @@ inrange4471: %t296 = load { ptr, i64, i64 }, ptr %a292 %t297 = load ptr, ptr %a1 %t298 = icmp eq ptr %t297, null - br i1 %t298, label %panic4472, label %ok4473 -panic4472: + br i1 %t298, label %panic4476, label %ok4477 +panic4476: call void @finch_panic(ptr @.str.2739, i64 1929, ptr @.str.2740) unreachable -ok4473: +ok4477: %t299 = getelementptr inbounds %S.gen.Gen, ptr %t297, i32 0, i32 16 %t300 = load i64, ptr %a2 %t301 = load { ptr, i64, i64 }, ptr %t299 %t302 = extractvalue { ptr, i64, i64 } %t301, 1 %t303 = icmp uge i64 %t300, %t302 - br i1 %t303, label %range4474, label %inrange4475 -range4474: + br i1 %t303, label %range4478, label %inrange4479 +range4478: call void @finch_panic_index(ptr @.str.2741, i64 1929, i64 %t300, i64 %t302) unreachable -inrange4475: +inrange4479: %t304 = extractvalue { ptr, i64, i64 } %t301, 0 %t305 = getelementptr inbounds %S.gen.StructDef, ptr %t304, i64 %t300 %t306 = getelementptr inbounds %S.gen.StructDef, ptr %t305, i32 0, i32 1 @@ -45864,11 +45890,11 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4476, label %ok4477 -panic4476: + br i1 %t4, label %panic4480, label %ok4481 +panic4480: call void @finch_panic(ptr @.str.2745, i64 1938, ptr @.str.2746) unreachable -ok4477: +ok4481: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 33 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 @@ -45884,11 +45910,11 @@ ok4477: store i64 %t12, ptr %t6 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic4478, label %ok4479 -panic4478: + br i1 %t16, label %panic4482, label %ok4483 +panic4482: call void @finch_panic(ptr @.str.2747, i64 1939, ptr @.str.2748) unreachable -ok4479: +ok4483: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 33 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 @@ -45907,10 +45933,10 @@ entry: store i64 %p0, ptr %a1 %t2 = load i64, ptr %a1 %t3 = icmp slt i64 %t2, 0 - br i1 %t3, label %then4480, label %endif4482 -then4480: + br i1 %t3, label %then4484, label %endif4486 +then4484: ret { ptr, i64, i64 } { ptr @.str.2749, i64 4, i64 0 } -endif4482: +endif4486: %t4 = load i64, ptr %a1 call void @finch_str_from_int(ptr %a5, i64 %t4) %t6 = load { ptr, i64, i64 }, ptr %a5 @@ -45931,22 +45957,22 @@ entry: store i64 %p1, ptr %a2 %t3 = load i64, ptr %a2 %t4 = icmp sle i64 %t3, 1 - br i1 %t4, label %then4483, label %endif4485 -then4483: + br i1 %t4, label %then4487, label %endif4489 +then4487: %t5 = load i64, ptr %a1 ret i64 %t5 -endif4485: +endif4489: %t6 = load i64, ptr %a1 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 %t9 = sub i64 %t8, 1 %t10 = load i64, ptr %a2 %t11 = icmp eq i64 %t10, 0 - br i1 %t11, label %panic4486, label %ok4487 -panic4486: + br i1 %t11, label %panic4490, label %ok4491 +panic4490: call void @finch_panic(ptr @.str.2751, i64 1958, ptr @.str.2752) unreachable -ok4487: +ok4491: %t12 = sdiv i64 %t9, %t10 %t13 = load i64, ptr %a2 %t14 = mul i64 %t12, %t13 @@ -46012,190 +46038,190 @@ entry: store { ptr, i64, i64 } { ptr @.str.2753, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from4488 -logic.from4488: - br i1 %t13, label %logic.end4490, label %logic.rhs4489 -logic.rhs4489: + br label %logic.from4492 +logic.from4492: + br i1 %t13, label %logic.end4494, label %logic.rhs4493 +logic.rhs4493: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2754, i64 4, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.rend4491 -logic.rend4491: - br label %logic.end4490 -logic.end4490: - %t19 = phi i1 [ true, %logic.from4488 ], [ %t18, %logic.rend4491 ] - br label %logic.from4492 -logic.from4492: - br i1 %t19, label %logic.end4494, label %logic.rhs4493 -logic.rhs4493: + br label %logic.rend4495 +logic.rend4495: + br label %logic.end4494 +logic.end4494: + %t19 = phi i1 [ true, %logic.from4492 ], [ %t18, %logic.rend4495 ] + br label %logic.from4496 +logic.from4496: + br i1 %t19, label %logic.end4498, label %logic.rhs4497 +logic.rhs4497: %t20 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2755, i64 2, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 - br label %logic.rend4495 -logic.rend4495: - br label %logic.end4494 -logic.end4494: - %t25 = phi i1 [ true, %logic.from4492 ], [ %t24, %logic.rend4495 ] - br label %logic.from4496 -logic.from4496: - br i1 %t25, label %logic.end4498, label %logic.rhs4497 -logic.rhs4497: + br label %logic.rend4499 +logic.rend4499: + br label %logic.end4498 +logic.end4498: + %t25 = phi i1 [ true, %logic.from4496 ], [ %t24, %logic.rend4499 ] + br label %logic.from4500 +logic.from4500: + br i1 %t25, label %logic.end4502, label %logic.rhs4501 +logic.rhs4501: %t26 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.2756, i64 2, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br label %logic.rend4499 -logic.rend4499: - br label %logic.end4498 -logic.end4498: - %t31 = phi i1 [ true, %logic.from4496 ], [ %t30, %logic.rend4499 ] - br i1 %t31, label %then4500, label %endif4502 -then4500: + br label %logic.rend4503 +logic.rend4503: + br label %logic.end4502 +logic.end4502: + %t31 = phi i1 [ true, %logic.from4500 ], [ %t30, %logic.rend4503 ] + br i1 %t31, label %then4504, label %endif4506 +then4504: %t32 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 1, 0 %t33 = insertvalue %S.gen.SizeAlign %t32, i64 1, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t33 -endif4502: +endif4506: %t34 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.2757, i64 3, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br label %logic.from4503 -logic.from4503: - br i1 %t38, label %logic.end4505, label %logic.rhs4504 -logic.rhs4504: + br label %logic.from4507 +logic.from4507: + br i1 %t38, label %logic.end4509, label %logic.rhs4508 +logic.rhs4508: %t39 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.2758, i64 3, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend4506 -logic.rend4506: - br label %logic.end4505 -logic.end4505: - %t44 = phi i1 [ true, %logic.from4503 ], [ %t43, %logic.rend4506 ] - br i1 %t44, label %then4507, label %endif4509 -then4507: + br label %logic.rend4510 +logic.rend4510: + br label %logic.end4509 +logic.end4509: + %t44 = phi i1 [ true, %logic.from4507 ], [ %t43, %logic.rend4510 ] + br i1 %t44, label %then4511, label %endif4513 +then4511: %t45 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 2, 0 %t46 = insertvalue %S.gen.SizeAlign %t45, i64 2, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t46 -endif4509: +endif4513: %t47 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.2759, i64 3, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 - br label %logic.from4510 -logic.from4510: - br i1 %t51, label %logic.end4512, label %logic.rhs4511 -logic.rhs4511: + br label %logic.from4514 +logic.from4514: + br i1 %t51, label %logic.end4516, label %logic.rhs4515 +logic.rhs4515: %t52 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.2760, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br label %logic.rend4513 -logic.rend4513: - br label %logic.end4512 -logic.end4512: - %t57 = phi i1 [ true, %logic.from4510 ], [ %t56, %logic.rend4513 ] - br label %logic.from4514 -logic.from4514: - br i1 %t57, label %logic.end4516, label %logic.rhs4515 -logic.rhs4515: + br label %logic.rend4517 +logic.rend4517: + br label %logic.end4516 +logic.end4516: + %t57 = phi i1 [ true, %logic.from4514 ], [ %t56, %logic.rend4517 ] + br label %logic.from4518 +logic.from4518: + br i1 %t57, label %logic.end4520, label %logic.rhs4519 +logic.rhs4519: %t58 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t58, ptr %a59 store { ptr, i64, i64 } { ptr @.str.2761, i64 3, i64 0 }, ptr %a60 %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) %t62 = icmp ne i32 %t61, 0 - br label %logic.rend4517 -logic.rend4517: - br label %logic.end4516 -logic.end4516: - %t63 = phi i1 [ true, %logic.from4514 ], [ %t62, %logic.rend4517 ] - br label %logic.from4518 -logic.from4518: - br i1 %t63, label %logic.end4520, label %logic.rhs4519 -logic.rhs4519: + br label %logic.rend4521 +logic.rend4521: + br label %logic.end4520 +logic.end4520: + %t63 = phi i1 [ true, %logic.from4518 ], [ %t62, %logic.rend4521 ] + br label %logic.from4522 +logic.from4522: + br i1 %t63, label %logic.end4524, label %logic.rhs4523 +logic.rhs4523: %t64 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.2762, i64 4, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 - br label %logic.rend4521 -logic.rend4521: - br label %logic.end4520 -logic.end4520: - %t69 = phi i1 [ true, %logic.from4518 ], [ %t68, %logic.rend4521 ] - br i1 %t69, label %then4522, label %endif4524 -then4522: + br label %logic.rend4525 +logic.rend4525: + br label %logic.end4524 +logic.end4524: + %t69 = phi i1 [ true, %logic.from4522 ], [ %t68, %logic.rend4525 ] + br i1 %t69, label %then4526, label %endif4528 +then4526: %t70 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 4, 0 %t71 = insertvalue %S.gen.SizeAlign %t70, i64 4, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t71 -endif4524: +endif4528: %t72 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t72, ptr %a73 store { ptr, i64, i64 } { ptr @.str.2763, i64 3, i64 0 }, ptr %a74 %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) %t76 = icmp ne i32 %t75, 0 - br label %logic.from4525 -logic.from4525: - br i1 %t76, label %logic.end4527, label %logic.rhs4526 -logic.rhs4526: + br label %logic.from4529 +logic.from4529: + br i1 %t76, label %logic.end4531, label %logic.rhs4530 +logic.rhs4530: %t77 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.2764, i64 5, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 - br label %logic.rend4528 -logic.rend4528: - br label %logic.end4527 -logic.end4527: - %t82 = phi i1 [ true, %logic.from4525 ], [ %t81, %logic.rend4528 ] - br i1 %t82, label %then4529, label %endif4531 -then4529: + br label %logic.rend4532 +logic.rend4532: + br label %logic.end4531 +logic.end4531: + %t82 = phi i1 [ true, %logic.from4529 ], [ %t81, %logic.rend4532 ] + br i1 %t82, label %then4533, label %endif4535 +then4533: %t83 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 24, 0 %t84 = insertvalue %S.gen.SizeAlign %t83, i64 8, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t84 -endif4531: +endif4535: %t85 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.2765, i64 3, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 - br i1 %t89, label %then4532, label %endif4534 -then4532: + br i1 %t89, label %then4536, label %endif4538 +then4536: %t90 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 56, 0 %t91 = insertvalue %S.gen.SizeAlign %t90, i64 8, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t91 -endif4534: +endif4538: %t92 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t92, ptr %a93 store { ptr, i64, i64 } { ptr @.str.2766, i64 5, i64 0 }, ptr %a94 %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) %t96 = icmp ne i32 %t95, 0 - br i1 %t96, label %then4535, label %endif4537 -then4535: + br i1 %t96, label %then4539, label %endif4541 +then4539: %t97 = load ptr, ptr %a1 %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 0, %t100 - br i1 %t101, label %range4538, label %inrange4539 -range4538: + br i1 %t101, label %range4542, label %inrange4543 +range4542: call void @finch_panic_index(ptr @.str.2767, i64 1980, i64 0, i64 %t100) unreachable -inrange4539: +inrange4543: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 %t104 = load %S.ast.Type, ptr %t103 @@ -46212,21 +46238,21 @@ inrange4539: %t115 = insertvalue %S.gen.SizeAlign %t112, i64 %t114, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t115 -endif4537: +endif4541: %t116 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t116, ptr %a117 store { ptr, i64, i64 } { ptr @.str.2768, i64 6, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 - br i1 %t120, label %then4540, label %endif4542 -then4540: + br i1 %t120, label %then4544, label %endif4546 +then4544: %t121 = load ptr, ptr %a1 %t122 = icmp eq ptr %t121, null - br i1 %t122, label %panic4543, label %ok4544 -panic4543: + br i1 %t122, label %panic4547, label %ok4548 +panic4547: call void @finch_panic(ptr @.str.2769, i64 1984, ptr @.str.2770) unreachable -ok4544: +ok4548: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 16 %t124 = load ptr, ptr %a1 %t125 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -46237,11 +46263,11 @@ ok4544: %t130 = load { ptr, i64, i64 }, ptr %t123 %t131 = extractvalue { ptr, i64, i64 } %t130, 1 %t132 = icmp uge i64 %t129, %t131 - br i1 %t132, label %range4545, label %inrange4546 -range4545: + br i1 %t132, label %range4549, label %inrange4550 +range4549: call void @finch_panic_index(ptr @.str.2771, i64 1984, i64 %t129, i64 %t131) unreachable -inrange4546: +inrange4550: %t133 = extractvalue { ptr, i64, i64 } %t130, 0 %t134 = getelementptr inbounds %S.gen.StructDef, ptr %t133, i64 %t129 %t135 = load %S.gen.StructDef, ptr %t134 @@ -46251,8 +46277,8 @@ inrange4546: store %S.gen.StructDef %t138, ptr %a139 %t140 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 2 %t141 = load i1, ptr %t140 - br i1 %t141, label %then4547, label %endif4549 -then4547: + br i1 %t141, label %then4551, label %endif4553 +then4551: %t142 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 9 %t143 = load i64, ptr %t142 %t144 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t143, 0 @@ -46262,19 +46288,19 @@ then4547: call void @finch.drop.S_gen_StructDef(ptr %a139) call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t147 -endif4549: +endif4553: store i64 0, ptr %a148 store i64 1, ptr %a149 %t150 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 12 store i64 0, ptr %a151 - br label %each.cond4550 -each.cond4550: + br label %each.cond4554 +each.cond4554: %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 %t153 = load i64, ptr %t152 %t154 = load i64, ptr %a151 %t155 = icmp slt i64 %t154, %t153 - br i1 %t155, label %each.body4551, label %each.end4553 -each.body4551: + br i1 %t155, label %each.body4555, label %each.end4557 +each.body4555: %t156 = load ptr, ptr %t150 %t157 = getelementptr inbounds %S.ast.Type, ptr %t156, i64 %t154 %t158 = load %S.ast.Type, ptr %t157 @@ -46295,20 +46321,20 @@ each.body4551: %t172 = load i64, ptr %t171 %t173 = load i64, ptr %a149 %t174 = icmp sgt i64 %t172, %t173 - br i1 %t174, label %then4554, label %endif4556 -then4554: + br i1 %t174, label %then4558, label %endif4560 +then4558: %t175 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 %t176 = load i64, ptr %t175 store i64 %t176, ptr %a149 - br label %endif4556 -endif4556: - br label %each.step4552 -each.step4552: + br label %endif4560 +endif4560: + br label %each.step4556 +each.step4556: %t177 = load i64, ptr %a151 %t178 = add i64 %t177, 1 store i64 %t178, ptr %a151 - br label %each.cond4550 -each.end4553: + br label %each.cond4554 +each.end4557: %t179 = load i64, ptr %a148 %t180 = load i64, ptr %a149 %t181 = call i64 @finch.gen.alignUp(i64 %t179, i64 %t180) @@ -46318,7 +46344,7 @@ each.end4553: call void @finch.drop.S_gen_StructDef(ptr %a139) call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t184 -endif4542: +endif4546: %t185 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 8, 0 %t186 = insertvalue %S.gen.SizeAlign %t185, i64 8, 1 call void @finch_str_drop(ptr %a8) @@ -46340,27 +46366,27 @@ entry: store %S.gen.StructDef %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 - br i1 %t4, label %then4557, label %endif4559 -then4557: + br i1 %t4, label %then4561, label %endif4563 +then4561: %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 4 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch.copy.arr_int(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 ret { ptr, i64, i64 } %t9 -endif4559: +endif4563: store { ptr, i64, i64 } zeroinitializer, ptr %a10 store i64 0, ptr %a11 %t12 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 12 store i64 0, ptr %a13 - br label %each.cond4560 -each.cond4560: + br label %each.cond4564 +each.cond4564: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 - br i1 %t17, label %each.body4561, label %each.end4563 -each.body4561: + br i1 %t17, label %each.body4565, label %each.end4567 +each.body4565: %t18 = load ptr, ptr %t12 %t19 = getelementptr inbounds %S.ast.Type, ptr %t18, i64 %t16 %t20 = load %S.ast.Type, ptr %t19 @@ -46388,13 +46414,13 @@ each.body4561: %t38 = load i64, ptr %a11 %t39 = add i64 %t38, %t37 store i64 %t39, ptr %a11 - br label %each.step4562 -each.step4562: + br label %each.step4566 +each.step4566: %t40 = load i64, ptr %a13 %t41 = add i64 %t40, 1 store i64 %t41, ptr %a13 - br label %each.cond4560 -each.end4563: + br label %each.cond4564 +each.end4567: %t42 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t42 } @@ -47027,25 +47053,25 @@ entry: store { ptr, i64, i64 } { ptr @.str.2784, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from4564 -logic.from4564: - br i1 %t13, label %logic.end4566, label %logic.rhs4565 -logic.rhs4565: + br label %logic.from4568 +logic.from4568: + br i1 %t13, label %logic.end4570, label %logic.rhs4569 +logic.rhs4569: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2785, i64 4, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.rend4567 -logic.rend4567: - br label %logic.end4566 -logic.end4566: - %t19 = phi i1 [ true, %logic.from4564 ], [ %t18, %logic.rend4567 ] - br i1 %t19, label %then4568, label %endif4570 -then4568: + br label %logic.rend4571 +logic.rend4571: + br label %logic.end4570 +logic.end4570: + %t19 = phi i1 [ true, %logic.from4568 ], [ %t18, %logic.rend4571 ] + br i1 %t19, label %then4572, label %endif4574 +then4572: call void @finch_str_drop(ptr %a8) ret i64 -1 -endif4570: +endif4574: %t20 = load %S.ast.Type, ptr %a2 %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) store { ptr, i64, i64 } { ptr @.str.2786, i64 2, i64 0 }, ptr %a23 @@ -47057,38 +47083,38 @@ endif4570: store { ptr, i64, i64 } %t26, ptr %a27 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic4571, label %ok4572 -panic4571: + br i1 %t29, label %panic4575, label %ok4576 +panic4575: call void @finch_panic(ptr @.str.2787, i64 2033, ptr @.str.2788) unreachable -ok4572: +ok4576: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 34 %t31 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t31, ptr %a32 %t33 = call i64 @finch_map_find(ptr %t30, ptr %a32, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t34 = icmp sge i64 %t33, 0 - br i1 %t34, label %then4573, label %endif4575 -then4573: + br i1 %t34, label %then4577, label %endif4579 +then4577: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic4576, label %ok4577 -panic4576: + br i1 %t36, label %panic4580, label %ok4581 +panic4580: call void @finch_panic(ptr @.str.2789, i64 2034, ptr @.str.2790) unreachable -ok4577: +ok4581: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 34 %t38 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t38, ptr %a39 %t40 = call i64 @finch_map_find(ptr %t37, ptr %a39, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t41 = icmp slt i64 %t40, 0 - br i1 %t41, label %map.missing4578, label %map.found4579 -map.missing4578: + br i1 %t41, label %map.missing4582, label %map.found4583 +map.missing4582: store { ptr, i64, i64 } zeroinitializer, ptr %a42 store { ptr, i64, i64 } %t38, ptr %a43 call void @finch_buf_str(ptr %a42, ptr %a43, i32 1) call void @finch_map_missing(ptr @.str.2791, i64 2034, ptr %a42) unreachable -map.found4579: +map.found4583: %t44 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t37, i32 0, i32 0 %t45 = load ptr, ptr %t44 %t46 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t45, i64 %t40 @@ -47097,24 +47123,24 @@ map.found4579: call void @finch_str_drop(ptr %a27) call void @finch_str_drop(ptr %a8) ret i64 %t48 -endif4575: +endif4579: store i64 -1, ptr %a49 %t50 = load ptr, ptr %a1 %t51 = icmp eq ptr %t50, null - br i1 %t51, label %panic4580, label %ok4581 -panic4580: + br i1 %t51, label %panic4584, label %ok4585 +panic4584: call void @finch_panic(ptr @.str.2792, i64 2037, ptr @.str.2793) unreachable -ok4581: +ok4585: %t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 35 %t53 = load { ptr, i64, i64 }, ptr %t52 %t54 = extractvalue { ptr, i64, i64 } %t53, 1 %t55 = icmp uge i64 0, %t54 - br i1 %t55, label %range4582, label %inrange4583 -range4582: + br i1 %t55, label %range4586, label %inrange4587 +range4586: call void @finch_panic_index(ptr @.str.2794, i64 2037, i64 0, i64 %t54) unreachable -inrange4583: +inrange4587: %t56 = extractvalue { ptr, i64, i64 } %t53, 0 %t57 = getelementptr inbounds i64, ptr %t56, i64 0 %t58 = load i64, ptr %t57 @@ -47124,76 +47150,76 @@ inrange4583: store { ptr, i64, i64 } { ptr @.str.2795, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 - br i1 %t64, label %then4584, label %else4585 -then4584: + br i1 %t64, label %then4588, label %else4589 +then4588: %t65 = load ptr, ptr %a1 %t66 = call i64 @finch.gen.basicType(ptr %t65, { ptr, i64, i64 } { ptr @.str.2796, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2797, i64 14, i64 0 }) store i64 %t66, ptr %a49 - br label %endif4586 -else4585: + br label %endif4590 +else4589: %t67 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.2798, i64 4, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 - br i1 %t71, label %then4587, label %else4588 -then4587: + br i1 %t71, label %then4591, label %else4592 +then4591: %t72 = load ptr, ptr %a1 %t73 = call i64 @finch.gen.basicType(ptr %t72, { ptr, i64, i64 } { ptr @.str.2799, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2800, i64 18, i64 0 }) store i64 %t73, ptr %a49 - br label %endif4589 -else4588: + br label %endif4593 +else4592: %t74 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t74, ptr %a75 store { ptr, i64, i64 } { ptr @.str.2801, i64 3, i64 0 }, ptr %a76 %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) %t78 = icmp ne i32 %t77, 0 - br i1 %t78, label %then4590, label %else4591 -then4590: + br i1 %t78, label %then4594, label %else4595 +then4594: %t79 = load ptr, ptr %a1 %t80 = call i64 @finch.gen.basicType(ptr %t79, { ptr, i64, i64 } { ptr @.str.2802, i64 3, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2803, i64 13, i64 0 }) store i64 %t80, ptr %a49 - br label %endif4592 -else4591: + br label %endif4596 +else4595: %t81 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.2804, i64 5, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br i1 %t85, label %then4593, label %else4594 -then4593: + br i1 %t85, label %then4597, label %else4598 +then4597: %t86 = load ptr, ptr %a1 %t87 = call i64 @finch.gen.basicType(ptr %t86, { ptr, i64, i64 } { ptr @.str.2805, i64 5, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2806, i64 12, i64 0 }) store i64 %t87, ptr %a49 - br label %endif4595 -else4594: + br label %endif4599 +else4598: %t88 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.2807, i64 3, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 - br i1 %t92, label %then4596, label %else4597 -then4596: + br i1 %t92, label %then4600, label %else4601 +then4600: %t93 = load ptr, ptr %a1 %t94 = call i64 @finch.gen.basicType(ptr %t93, { ptr, i64, i64 } { ptr @.str.2808, i64 3, i64 0 }, i64 32, { ptr, i64, i64 } { ptr @.str.2809, i64 12, i64 0 }) store i64 %t94, ptr %a49 - br label %endif4598 -else4597: + br label %endif4602 +else4601: %t95 = load %S.ast.Type, ptr %a2 %t96 = call i1 @finch.gen.isInt(%S.ast.Type %t95) - br i1 %t96, label %then4599, label %else4600 -then4599: + br i1 %t96, label %then4603, label %else4604 +then4603: store { ptr, i64, i64 } { ptr @.str.2810, i64 15, i64 0 }, ptr %a97 %t98 = load %S.ast.Type, ptr %a2 %t99 = call i1 @finch.gen.isSigned(%S.ast.Type %t98) - br i1 %t99, label %then4602, label %endif4604 -then4602: + br i1 %t99, label %then4606, label %endif4608 +then4606: %t100 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } { ptr @.str.2811, i64 13, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t100, ptr %a101 call void @finch_str_drop(ptr %a101) - br label %endif4604 -endif4604: + br label %endif4608 +endif4608: %t102 = load ptr, ptr %a1 %t103 = load { ptr, i64, i64 }, ptr %a8 %t104 = load %S.ast.Type, ptr %a2 @@ -47202,22 +47228,22 @@ endif4604: %t107 = call i64 @finch.gen.basicType(ptr %t102, { ptr, i64, i64 } %t103, i64 %t105, { ptr, i64, i64 } %t106) store i64 %t107, ptr %a49 call void @finch_str_drop(ptr %a97) - br label %endif4601 -else4600: + br label %endif4605 +else4604: %t108 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2812, i64 4, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 - br i1 %t112, label %then4605, label %else4606 -then4605: + br i1 %t112, label %then4609, label %else4610 +then4609: %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null - br i1 %t114, label %panic4608, label %ok4609 -panic4608: + br i1 %t114, label %panic4612, label %ok4613 +panic4612: call void @finch_panic(ptr @.str.2813, i64 2055, ptr @.str.2814) unreachable -ok4609: +ok4613: %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 21 %t116 = load ptr, ptr %a1 %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -47228,11 +47254,11 @@ ok4609: %t122 = load { ptr, i64, i64 }, ptr %t115 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 %t121, %t123 - br i1 %t124, label %range4610, label %inrange4611 -range4610: + br i1 %t124, label %range4614, label %inrange4615 +range4614: call void @finch_panic_index(ptr @.str.2815, i64 2055, i64 %t121, i64 %t123) unreachable -inrange4611: +inrange4615: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds %S.gen.EnumDef, ptr %t125, i64 %t121 %t127 = load %S.gen.EnumDef, ptr %t126 @@ -47245,12 +47271,12 @@ inrange4611: %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load i64, ptr %t134 store i64 0, ptr %a136 - br label %for.cond4612 -for.cond4612: + br label %for.cond4616 +for.cond4616: %t137 = load i64, ptr %a136 %t138 = icmp slt i64 %t137, %t135 - br i1 %t138, label %for.body4613, label %for.end4615 -for.body4613: + br i1 %t138, label %for.body4617, label %for.end4619 +for.body4617: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 %t140 = load ptr, ptr %a1 %t141 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 @@ -47258,11 +47284,11 @@ for.body4613: %t143 = load { ptr, i64, i64 }, ptr %t141 %t144 = extractvalue { ptr, i64, i64 } %t143, 1 %t145 = icmp uge i64 %t142, %t144 - br i1 %t145, label %range4616, label %inrange4617 -range4616: + br i1 %t145, label %range4620, label %inrange4621 +range4620: call void @finch_panic_index(ptr @.str.2817, i64 2058, i64 %t142, i64 %t144) unreachable -inrange4617: +inrange4621: %t146 = extractvalue { ptr, i64, i64 } %t143, 0 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t142 %t148 = load { ptr, i64, i64 }, ptr %t147 @@ -47281,11 +47307,11 @@ inrange4617: %t160 = load { ptr, i64, i64 }, ptr %t158 %t161 = extractvalue { ptr, i64, i64 } %t160, 1 %t162 = icmp uge i64 %t159, %t161 - br i1 %t162, label %range4618, label %inrange4619 -range4618: + br i1 %t162, label %range4622, label %inrange4623 +range4622: call void @finch_panic_index(ptr @.str.2819, i64 2058, i64 %t159, i64 %t161) unreachable -inrange4619: +inrange4623: %t163 = extractvalue { ptr, i64, i64 } %t160, 0 %t164 = getelementptr inbounds i64, ptr %t163, i64 %t159 %t165 = load i64, ptr %t164 @@ -47316,13 +47342,13 @@ inrange4619: %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 store { ptr, i64, i64 } %t181, ptr %t185 store i64 %t183, ptr %t139 - br label %for.step4614 -for.step4614: + br label %for.step4618 +for.step4618: %t186 = load i64, ptr %a136 %t187 = add i64 %t186, 1 store i64 %t187, ptr %a136 - br label %for.cond4612 -for.end4615: + br label %for.cond4616 +for.end4619: %t188 = load ptr, ptr %a1 %t189 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 1 %t190 = load { ptr, i64, i64 }, ptr %t189 @@ -47377,19 +47403,19 @@ for.end4615: store i64 %t229, ptr %a49 call void @finch.drop.arr_str(ptr %a132) call void @finch.drop.S_gen_EnumDef(ptr %a131) - br label %endif4607 -else4606: + br label %endif4611 +else4610: %t231 = load ptr, ptr %a1 %t232 = call i64 @finch.gen.md(ptr %t231, { ptr, i64, i64 } { ptr @.str.2826, i64 0, i64 0 }) store i64 %t232, ptr %a49 %t233 = load i64, ptr %a49 %t234 = load ptr, ptr %a1 %t235 = icmp eq ptr %t234, null - br i1 %t235, label %panic4620, label %ok4621 -panic4620: + br i1 %t235, label %panic4624, label %ok4625 +panic4624: call void @finch_panic(ptr @.str.2827, i64 2064, ptr @.str.2828) unreachable -ok4621: +ok4625: %t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 34 %t237 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t237, ptr %a238 @@ -47400,14 +47426,14 @@ ok4621: %t243 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t242, i64 %t240 %t244 = load i32, ptr %a239 %t245 = icmp ne i32 %t244, 0 - br i1 %t245, label %map.new4622, label %map.have4623 -map.new4622: + br i1 %t245, label %map.new4626, label %map.have4627 +map.new4626: %t246 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 1 call void @finch_str_copy(ptr %t246, ptr %a238) %t247 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 store i64 0, ptr %t247 - br label %map.have4623 -map.have4623: + br label %map.have4627 +map.have4627: %t248 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 store i64 %t233, ptr %t248 %t249 = load { ptr, i64, i64 }, ptr %a8 @@ -47415,32 +47441,32 @@ map.have4623: store { ptr, i64, i64 } { ptr @.str.2829, i64 3, i64 0 }, ptr %a251 %t252 = call i32 @finch_str_eq(ptr %a250, ptr %a251) %t253 = icmp ne i32 %t252, 0 - br i1 %t253, label %then4624, label %else4625 -then4624: + br i1 %t253, label %then4628, label %else4629 +then4628: store i64 -1, ptr %a254 %t255 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %t255, i32 0, i32 1 %t257 = load i64, ptr %t256 %t258 = icmp sgt i64 %t257, 0 - br i1 %t258, label %then4627, label %endif4629 -then4627: + br i1 %t258, label %then4631, label %endif4633 +then4631: %t259 = load ptr, ptr %a1 %t260 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t261 = load { ptr, i64, i64 }, ptr %t260 %t262 = extractvalue { ptr, i64, i64 } %t261, 1 %t263 = icmp uge i64 0, %t262 - br i1 %t263, label %range4630, label %inrange4631 -range4630: + br i1 %t263, label %range4634, label %inrange4635 +range4634: call void @finch_panic_index(ptr @.str.2830, i64 2068, i64 0, i64 %t262) unreachable -inrange4631: +inrange4635: %t264 = extractvalue { ptr, i64, i64 } %t261, 0 %t265 = getelementptr inbounds %S.ast.Type, ptr %t264, i64 0 %t266 = load %S.ast.Type, ptr %t265 %t267 = call i64 @finch.gen.diType(ptr %t259, %S.ast.Type %t266) store i64 %t267, ptr %a254 - br label %endif4629 -endif4629: + br label %endif4633 +endif4633: %t268 = load i64, ptr %a254 %t269 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t268) store { ptr, i64, i64 } { ptr @.str.2831, i64 51, i64 0 }, ptr %a271 @@ -47457,46 +47483,46 @@ endif4629: %t279 = load { ptr, i64, i64 }, ptr %a275 %t280 = load ptr, ptr %a1 %t281 = icmp eq ptr %t280, null - br i1 %t281, label %panic4632, label %ok4633 -panic4632: + br i1 %t281, label %panic4636, label %ok4637 +panic4636: call void @finch_panic(ptr @.str.2833, i64 2070, ptr @.str.2834) unreachable -ok4633: +ok4637: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 33 %t283 = load i64, ptr %a49 %t284 = load { ptr, i64, i64 }, ptr %t282 %t285 = extractvalue { ptr, i64, i64 } %t284, 1 %t286 = icmp uge i64 %t283, %t285 - br i1 %t286, label %range4634, label %inrange4635 -range4634: + br i1 %t286, label %range4638, label %inrange4639 +range4638: call void @finch_panic_index(ptr @.str.2835, i64 2070, i64 %t283, i64 %t285) unreachable -inrange4635: +inrange4639: %t287 = extractvalue { ptr, i64, i64 } %t284, 0 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 %t283 %t289 = load { ptr, i64, i64 }, ptr %t288 store { ptr, i64, i64 } %t279, ptr %t288 store { ptr, i64, i64 } %t289, ptr %a290 call void @finch_str_drop(ptr %a290) - br label %endif4626 -else4625: + br label %endif4630 +else4629: %t291 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t291, ptr %a292 store { ptr, i64, i64 } { ptr @.str.2836, i64 5, i64 0 }, ptr %a293 %t294 = call i32 @finch_str_eq(ptr %a292, ptr %a293) %t295 = icmp ne i32 %t294, 0 - br i1 %t295, label %then4636, label %else4637 -then4636: + br i1 %t295, label %then4640, label %else4641 +then4640: %t296 = load ptr, ptr %a1 %t297 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t298 = load { ptr, i64, i64 }, ptr %t297 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 0, %t299 - br i1 %t300, label %range4639, label %inrange4640 -range4639: + br i1 %t300, label %range4643, label %inrange4644 +range4643: call void @finch_panic_index(ptr @.str.2837, i64 2072, i64 0, i64 %t299) unreachable -inrange4640: +inrange4644: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds %S.ast.Type, ptr %t301, i64 0 %t303 = load %S.ast.Type, ptr %t302 @@ -47528,11 +47554,11 @@ inrange4640: %t326 = load { ptr, i64, i64 }, ptr %t325 %t327 = extractvalue { ptr, i64, i64 } %t326, 1 %t328 = icmp uge i64 0, %t327 - br i1 %t328, label %range4641, label %inrange4642 -range4641: + br i1 %t328, label %range4645, label %inrange4646 +range4645: call void @finch_panic_index(ptr @.str.2841, i64 2074, i64 0, i64 %t327) unreachable -inrange4642: +inrange4646: %t329 = extractvalue { ptr, i64, i64 } %t326, 0 %t330 = getelementptr inbounds %S.ast.Type, ptr %t329, i64 0 %t331 = load %S.ast.Type, ptr %t330 @@ -47591,50 +47617,50 @@ inrange4642: %t376 = load { ptr, i64, i64 }, ptr %a372 %t377 = load ptr, ptr %a1 %t378 = icmp eq ptr %t377, null - br i1 %t378, label %panic4643, label %ok4644 -panic4643: + br i1 %t378, label %panic4647, label %ok4648 +panic4647: call void @finch_panic(ptr @.str.2845, i64 2074, ptr @.str.2846) unreachable -ok4644: +ok4648: %t379 = getelementptr inbounds %S.gen.Gen, ptr %t377, i32 0, i32 33 %t380 = load i64, ptr %a49 %t381 = load { ptr, i64, i64 }, ptr %t379 %t382 = extractvalue { ptr, i64, i64 } %t381, 1 %t383 = icmp uge i64 %t380, %t382 - br i1 %t383, label %range4645, label %inrange4646 -range4645: + br i1 %t383, label %range4649, label %inrange4650 +range4649: call void @finch_panic_index(ptr @.str.2847, i64 2074, i64 %t380, i64 %t382) unreachable -inrange4646: +inrange4650: %t384 = extractvalue { ptr, i64, i64 } %t381, 0 %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t380 %t386 = load { ptr, i64, i64 }, ptr %t385 store { ptr, i64, i64 } %t376, ptr %t385 store { ptr, i64, i64 } %t386, ptr %a387 call void @finch_str_drop(ptr %a387) - br label %endif4638 -else4637: + br label %endif4642 +else4641: %t388 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t388, ptr %a389 store { ptr, i64, i64 } { ptr @.str.2848, i64 3, i64 0 }, ptr %a390 %t391 = call i32 @finch_str_eq(ptr %a389, ptr %a390) %t392 = icmp ne i32 %t391, 0 - br label %logic.from4647 -logic.from4647: - br i1 %t392, label %logic.end4649, label %logic.rhs4648 -logic.rhs4648: + br label %logic.from4651 +logic.from4651: + br i1 %t392, label %logic.end4653, label %logic.rhs4652 +logic.rhs4652: %t393 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t393, ptr %a394 store { ptr, i64, i64 } { ptr @.str.2849, i64 5, i64 0 }, ptr %a395 %t396 = call i32 @finch_str_eq(ptr %a394, ptr %a395) %t397 = icmp ne i32 %t396, 0 - br label %logic.rend4650 -logic.rend4650: - br label %logic.end4649 -logic.end4649: - %t398 = phi i1 [ true, %logic.from4647 ], [ %t397, %logic.rend4650 ] - br i1 %t398, label %then4651, label %else4652 -then4651: + br label %logic.rend4654 +logic.rend4654: + br label %logic.end4653 +logic.end4653: + %t398 = phi i1 [ true, %logic.from4651 ], [ %t397, %logic.rend4654 ] + br i1 %t398, label %then4655, label %else4656 +then4655: %t399 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2850, i64 4, i64 0 }) store %S.ast.Type %t399, ptr %a400 %t401 = load { ptr, i64, i64 }, ptr %a8 @@ -47642,17 +47668,17 @@ then4651: store { ptr, i64, i64 } { ptr @.str.2851, i64 5, i64 0 }, ptr %a403 %t404 = call i32 @finch_str_eq(ptr %a402, ptr %a403) %t405 = icmp ne i32 %t404, 0 - br i1 %t405, label %then4654, label %endif4656 -then4654: + br i1 %t405, label %then4658, label %endif4660 +then4658: %t406 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t407 = load { ptr, i64, i64 }, ptr %t406 %t408 = extractvalue { ptr, i64, i64 } %t407, 1 %t409 = icmp uge i64 0, %t408 - br i1 %t409, label %range4657, label %inrange4658 -range4657: + br i1 %t409, label %range4661, label %inrange4662 +range4661: call void @finch_panic_index(ptr @.str.2852, i64 2078, i64 0, i64 %t408) unreachable -inrange4658: +inrange4662: %t410 = extractvalue { ptr, i64, i64 } %t407, 0 %t411 = getelementptr inbounds %S.ast.Type, ptr %t410, i64 0 %t412 = load %S.ast.Type, ptr %t411 @@ -47663,8 +47689,8 @@ inrange4658: store %S.ast.Type %t415, ptr %a400 store %S.ast.Type %t416, ptr %a417 call void @finch.drop.S_ast_Type(ptr %a417) - br label %endif4656 -endif4656: + br label %endif4660 +endif4660: %t418 = load ptr, ptr %a1 %t419 = load ptr, ptr %a1 %t420 = load %S.ast.Type, ptr %a400 @@ -47794,21 +47820,21 @@ endif4656: %t526 = load { ptr, i64, i64 }, ptr %a522 %t527 = load ptr, ptr %a1 %t528 = icmp eq ptr %t527, null - br i1 %t528, label %panic4659, label %ok4660 -panic4659: + br i1 %t528, label %panic4663, label %ok4664 +panic4663: call void @finch_panic(ptr @.str.2865, i64 2085, ptr @.str.2866) unreachable -ok4660: +ok4664: %t529 = getelementptr inbounds %S.gen.Gen, ptr %t527, i32 0, i32 33 %t530 = load i64, ptr %a49 %t531 = load { ptr, i64, i64 }, ptr %t529 %t532 = extractvalue { ptr, i64, i64 } %t531, 1 %t533 = icmp uge i64 %t530, %t532 - br i1 %t533, label %range4661, label %inrange4662 -range4661: + br i1 %t533, label %range4665, label %inrange4666 +range4665: call void @finch_panic_index(ptr @.str.2867, i64 2085, i64 %t530, i64 %t532) unreachable -inrange4662: +inrange4666: %t534 = extractvalue { ptr, i64, i64 } %t531, 0 %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %t534, i64 %t530 %t536 = load { ptr, i64, i64 }, ptr %t535 @@ -47816,15 +47842,15 @@ inrange4662: store { ptr, i64, i64 } %t536, ptr %a537 call void @finch_str_drop(ptr %a537) call void @finch.drop.S_ast_Type(ptr %a400) - br label %endif4653 -else4652: + br label %endif4657 +else4656: %t538 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t538, ptr %a539 store { ptr, i64, i64 } { ptr @.str.2868, i64 3, i64 0 }, ptr %a540 %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) %t542 = icmp ne i32 %t541, 0 - br i1 %t542, label %then4663, label %else4664 -then4663: + br i1 %t542, label %then4667, label %else4668 +then4667: %t543 = load ptr, ptr %a1 %t544 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2869, i64 3, i64 0 }) %t545 = call i64 @finch.gen.diType(ptr %t543, %S.ast.Type %t544) @@ -47856,44 +47882,44 @@ then4663: store { ptr, i64, i64 } %t562, ptr %a563 store { ptr, i64, i64 } zeroinitializer, ptr %a564 store i64 0, ptr %a565 - br label %for.cond4666 -for.cond4666: + br label %for.cond4670 +for.cond4670: %t566 = load i64, ptr %a565 %t567 = icmp slt i64 %t566, 7 - br i1 %t567, label %for.body4667, label %for.end4669 -for.body4667: + br i1 %t567, label %for.body4671, label %for.end4673 +for.body4671: %t568 = load i64, ptr %a547 store i64 %t568, ptr %a569 %t570 = load i64, ptr %a565 %t571 = icmp eq i64 %t570, 0 - br label %logic.from4670 -logic.from4670: - br i1 %t571, label %logic.end4672, label %logic.rhs4671 -logic.rhs4671: + br label %logic.from4674 +logic.from4674: + br i1 %t571, label %logic.end4676, label %logic.rhs4675 +logic.rhs4675: %t572 = load i64, ptr %a565 %t573 = icmp eq i64 %t572, 4 - br label %logic.rend4673 -logic.rend4673: - br label %logic.end4672 -logic.end4672: - %t574 = phi i1 [ true, %logic.from4670 ], [ %t573, %logic.rend4673 ] - br i1 %t574, label %then4674, label %endif4676 -then4674: + br label %logic.rend4677 +logic.rend4677: + br label %logic.end4676 +logic.end4676: + %t574 = phi i1 [ true, %logic.from4674 ], [ %t573, %logic.rend4677 ] + br i1 %t574, label %then4678, label %endif4680 +then4678: %t575 = load i64, ptr %a550 store i64 %t575, ptr %a569 - br label %endif4676 -endif4676: + br label %endif4680 +endif4680: %t576 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 %t577 = load ptr, ptr %a1 %t578 = load i64, ptr %a565 %t579 = load { ptr, i64, i64 }, ptr %a563 %t580 = extractvalue { ptr, i64, i64 } %t579, 1 %t581 = icmp uge i64 %t578, %t580 - br i1 %t581, label %range4677, label %inrange4678 -range4677: + br i1 %t581, label %range4681, label %inrange4682 +range4681: call void @finch_panic_index(ptr @.str.2879, i64 2096, i64 %t578, i64 %t580) unreachable -inrange4678: +inrange4682: %t582 = extractvalue { ptr, i64, i64 } %t579, 0 %t583 = getelementptr inbounds { ptr, i64, i64 }, ptr %t582, i64 %t578 %t584 = load { ptr, i64, i64 }, ptr %t583 @@ -47918,13 +47944,13 @@ inrange4678: %t601 = getelementptr inbounds { ptr, i64, i64 }, ptr %t600, i64 %t598 store { ptr, i64, i64 } %t597, ptr %t601 store i64 %t599, ptr %t576 - br label %for.step4668 -for.step4668: + br label %for.step4672 +for.step4672: %t602 = load i64, ptr %a565 %t603 = add i64 %t602, 1 store i64 %t603, ptr %a565 - br label %for.cond4666 -for.end4669: + br label %for.cond4670 +for.end4673: %t604 = load %S.ast.Type, ptr %a2 %t605 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t604) store { ptr, i64, i64 } { ptr @.str.2880, i64 52, i64 0 }, ptr %a607 @@ -47976,21 +48002,21 @@ for.end4669: %t644 = load { ptr, i64, i64 }, ptr %a640 %t645 = load ptr, ptr %a1 %t646 = icmp eq ptr %t645, null - br i1 %t646, label %panic4679, label %ok4680 -panic4679: + br i1 %t646, label %panic4683, label %ok4684 +panic4683: call void @finch_panic(ptr @.str.2885, i64 2098, ptr @.str.2886) unreachable -ok4680: +ok4684: %t647 = getelementptr inbounds %S.gen.Gen, ptr %t645, i32 0, i32 33 %t648 = load i64, ptr %a49 %t649 = load { ptr, i64, i64 }, ptr %t647 %t650 = extractvalue { ptr, i64, i64 } %t649, 1 %t651 = icmp uge i64 %t648, %t650 - br i1 %t651, label %range4681, label %inrange4682 -range4681: + br i1 %t651, label %range4685, label %inrange4686 +range4685: call void @finch_panic_index(ptr @.str.2887, i64 2098, i64 %t648, i64 %t650) unreachable -inrange4682: +inrange4686: %t652 = extractvalue { ptr, i64, i64 } %t649, 0 %t653 = getelementptr inbounds { ptr, i64, i64 }, ptr %t652, i64 %t648 %t654 = load { ptr, i64, i64 }, ptr %t653 @@ -47999,22 +48025,22 @@ inrange4682: call void @finch_str_drop(ptr %a655) call void @finch.drop.arr_str(ptr %a564) call void @finch.drop.arr_str(ptr %a563) - br label %endif4665 -else4664: + br label %endif4669 +else4668: %t656 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t656, ptr %a657 store { ptr, i64, i64 } { ptr @.str.2888, i64 6, i64 0 }, ptr %a658 %t659 = call i32 @finch_str_eq(ptr %a657, ptr %a658) %t660 = icmp ne i32 %t659, 0 - br i1 %t660, label %then4683, label %else4684 -then4683: + br i1 %t660, label %then4687, label %else4688 +then4687: %t661 = load ptr, ptr %a1 %t662 = icmp eq ptr %t661, null - br i1 %t662, label %panic4686, label %ok4687 -panic4686: + br i1 %t662, label %panic4690, label %ok4691 +panic4690: call void @finch_panic(ptr @.str.2889, i64 2100, ptr @.str.2890) unreachable -ok4687: +ok4691: %t663 = getelementptr inbounds %S.gen.Gen, ptr %t661, i32 0, i32 16 %t664 = load ptr, ptr %a1 %t665 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -48025,11 +48051,11 @@ ok4687: %t670 = load { ptr, i64, i64 }, ptr %t663 %t671 = extractvalue { ptr, i64, i64 } %t670, 1 %t672 = icmp uge i64 %t669, %t671 - br i1 %t672, label %range4688, label %inrange4689 -range4688: + br i1 %t672, label %range4692, label %inrange4693 +range4692: call void @finch_panic_index(ptr @.str.2891, i64 2100, i64 %t669, i64 %t671) unreachable -inrange4689: +inrange4693: %t673 = extractvalue { ptr, i64, i64 } %t670, 0 %t674 = getelementptr inbounds %S.gen.StructDef, ptr %t673, i64 %t669 %t675 = load %S.gen.StructDef, ptr %t674 @@ -48050,23 +48076,23 @@ inrange4689: %t690 = getelementptr inbounds { ptr, i64, i64 }, ptr %t689, i32 0, i32 1 %t691 = load i64, ptr %t690 store i64 0, ptr %a692 - br label %for.cond4690 -for.cond4690: + br label %for.cond4694 +for.cond4694: %t693 = load i64, ptr %a692 %t694 = icmp slt i64 %t693, %t691 - br i1 %t694, label %for.body4691, label %for.end4693 -for.body4691: + br i1 %t694, label %for.body4695, label %for.end4697 +for.body4695: %t695 = load ptr, ptr %a1 %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 %t697 = load i64, ptr %a692 %t698 = load { ptr, i64, i64 }, ptr %t696 %t699 = extractvalue { ptr, i64, i64 } %t698, 1 %t700 = icmp uge i64 %t697, %t699 - br i1 %t700, label %range4694, label %inrange4695 -range4694: + br i1 %t700, label %range4698, label %inrange4699 +range4698: call void @finch_panic_index(ptr @.str.2892, i64 2105, i64 %t697, i64 %t699) unreachable -inrange4695: +inrange4699: %t701 = extractvalue { ptr, i64, i64 } %t698, 0 %t702 = getelementptr inbounds %S.ast.Type, ptr %t701, i64 %t697 %t703 = load %S.ast.Type, ptr %t702 @@ -48079,11 +48105,11 @@ inrange4695: %t710 = load { ptr, i64, i64 }, ptr %t708 %t711 = extractvalue { ptr, i64, i64 } %t710, 1 %t712 = icmp uge i64 %t709, %t711 - br i1 %t712, label %range4696, label %inrange4697 -range4696: + br i1 %t712, label %range4700, label %inrange4701 +range4700: call void @finch_panic_index(ptr @.str.2894, i64 2106, i64 %t709, i64 %t711) unreachable -inrange4697: +inrange4701: %t713 = extractvalue { ptr, i64, i64 } %t710, 0 %t714 = getelementptr inbounds { ptr, i64, i64 }, ptr %t713, i64 %t709 %t715 = load { ptr, i64, i64 }, ptr %t714 @@ -48095,11 +48121,11 @@ inrange4697: %t721 = load { ptr, i64, i64 }, ptr %t719 %t722 = extractvalue { ptr, i64, i64 } %t721, 1 %t723 = icmp uge i64 %t720, %t722 - br i1 %t723, label %range4698, label %inrange4699 -range4698: + br i1 %t723, label %range4702, label %inrange4703 +range4702: call void @finch_panic_index(ptr @.str.2895, i64 2106, i64 %t720, i64 %t722) unreachable -inrange4699: +inrange4703: %t724 = extractvalue { ptr, i64, i64 } %t721, 0 %t725 = getelementptr inbounds %S.ast.Type, ptr %t724, i64 %t720 %t726 = load %S.ast.Type, ptr %t725 @@ -48111,11 +48137,11 @@ inrange4699: %t732 = load { ptr, i64, i64 }, ptr %a683 %t733 = extractvalue { ptr, i64, i64 } %t732, 1 %t734 = icmp uge i64 %t731, %t733 - br i1 %t734, label %range4700, label %inrange4701 -range4700: + br i1 %t734, label %range4704, label %inrange4705 +range4704: call void @finch_panic_index(ptr @.str.2896, i64 2106, i64 %t731, i64 %t733) unreachable -inrange4701: +inrange4705: %t735 = extractvalue { ptr, i64, i64 } %t732, 0 %t736 = getelementptr inbounds i64, ptr %t735, i64 %t731 %t737 = load i64, ptr %t736 @@ -48136,13 +48162,13 @@ inrange4701: %t750 = getelementptr inbounds { ptr, i64, i64 }, ptr %t749, i64 %t747 store { ptr, i64, i64 } %t746, ptr %t750 store i64 %t748, ptr %t706 - br label %for.step4692 -for.step4692: + br label %for.step4696 +for.step4696: %t751 = load i64, ptr %a692 %t752 = add i64 %t751, 1 store i64 %t752, ptr %a692 - br label %for.cond4690 -for.end4693: + br label %for.cond4694 +for.end4697: %t753 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 1 %t754 = load { ptr, i64, i64 }, ptr %t753 store { ptr, i64, i64 } { ptr @.str.2897, i64 52, i64 0 }, ptr %a756 @@ -48211,21 +48237,21 @@ for.end4693: %t808 = load { ptr, i64, i64 }, ptr %a804 %t809 = load ptr, ptr %a1 %t810 = icmp eq ptr %t809, null - br i1 %t810, label %panic4702, label %ok4703 -panic4702: + br i1 %t810, label %panic4706, label %ok4707 +panic4706: call void @finch_panic(ptr @.str.2903, i64 2108, ptr @.str.2904) unreachable -ok4703: +ok4707: %t811 = getelementptr inbounds %S.gen.Gen, ptr %t809, i32 0, i32 33 %t812 = load i64, ptr %a49 %t813 = load { ptr, i64, i64 }, ptr %t811 %t814 = extractvalue { ptr, i64, i64 } %t813, 1 %t815 = icmp uge i64 %t812, %t814 - br i1 %t815, label %range4704, label %inrange4705 -range4704: + br i1 %t815, label %range4708, label %inrange4709 +range4708: call void @finch_panic_index(ptr @.str.2905, i64 2108, i64 %t812, i64 %t814) unreachable -inrange4705: +inrange4709: %t816 = extractvalue { ptr, i64, i64 } %t813, 0 %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t812 %t818 = load { ptr, i64, i64 }, ptr %t817 @@ -48235,8 +48261,8 @@ inrange4705: call void @finch.drop.arr_str(ptr %a688) call void @finch.drop.arr_int(ptr %a683) call void @finch.drop.S_gen_StructDef(ptr %a679) - br label %endif4685 -else4684: + br label %endif4689 +else4688: %t820 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.2906, i64 20, i64 0 }, ptr %a822 store { ptr, i64, i64 } %t820, ptr %a823 @@ -48250,62 +48276,62 @@ else4684: %t829 = load { ptr, i64, i64 }, ptr %a825 %t830 = load ptr, ptr %a1 %t831 = icmp eq ptr %t830, null - br i1 %t831, label %panic4706, label %ok4707 -panic4706: + br i1 %t831, label %panic4710, label %ok4711 +panic4710: call void @finch_panic(ptr @.str.2908, i64 2110, ptr @.str.2909) unreachable -ok4707: +ok4711: %t832 = getelementptr inbounds %S.gen.Gen, ptr %t830, i32 0, i32 33 %t833 = load i64, ptr %a49 %t834 = load { ptr, i64, i64 }, ptr %t832 %t835 = extractvalue { ptr, i64, i64 } %t834, 1 %t836 = icmp uge i64 %t833, %t835 - br i1 %t836, label %range4708, label %inrange4709 -range4708: + br i1 %t836, label %range4712, label %inrange4713 +range4712: call void @finch_panic_index(ptr @.str.2910, i64 2110, i64 %t833, i64 %t835) unreachable -inrange4709: +inrange4713: %t837 = extractvalue { ptr, i64, i64 } %t834, 0 %t838 = getelementptr inbounds { ptr, i64, i64 }, ptr %t837, i64 %t833 %t839 = load { ptr, i64, i64 }, ptr %t838 store { ptr, i64, i64 } %t829, ptr %t838 store { ptr, i64, i64 } %t839, ptr %a840 call void @finch_str_drop(ptr %a840) - br label %endif4685 -endif4685: - br label %endif4665 -endif4665: - br label %endif4653 -endif4653: - br label %endif4638 -endif4638: - br label %endif4626 -endif4626: + br label %endif4689 +endif4689: + br label %endif4669 +endif4669: + br label %endif4657 +endif4657: + br label %endif4642 +endif4642: + br label %endif4630 +endif4630: %t841 = load i64, ptr %a49 call void @finch_str_drop(ptr %a27) call void @finch_str_drop(ptr %a8) ret i64 %t841 -endif4607: - br label %endif4601 -endif4601: - br label %endif4598 -endif4598: - br label %endif4595 -endif4595: - br label %endif4592 -endif4592: - br label %endif4589 -endif4589: - br label %endif4586 -endif4586: +endif4611: + br label %endif4605 +endif4605: + br label %endif4602 +endif4602: + br label %endif4599 +endif4599: + br label %endif4596 +endif4596: + br label %endif4593 +endif4593: + br label %endif4590 +endif4590: %t842 = load i64, ptr %a49 %t843 = load ptr, ptr %a1 %t844 = icmp eq ptr %t843, null - br i1 %t844, label %panic4710, label %ok4711 -panic4710: + br i1 %t844, label %panic4714, label %ok4715 +panic4714: call void @finch_panic(ptr @.str.2911, i64 2114, ptr @.str.2912) unreachable -ok4711: +ok4715: %t845 = getelementptr inbounds %S.gen.Gen, ptr %t843, i32 0, i32 34 %t846 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t846, ptr %a847 @@ -48316,14 +48342,14 @@ ok4711: %t852 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t851, i64 %t849 %t853 = load i32, ptr %a848 %t854 = icmp ne i32 %t853, 0 - br i1 %t854, label %map.new4712, label %map.have4713 -map.new4712: + br i1 %t854, label %map.new4716, label %map.have4717 +map.new4716: %t855 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 1 call void @finch_str_copy(ptr %t855, ptr %a847) %t856 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 store i64 0, ptr %t856 - br label %map.have4713 -map.have4713: + br label %map.have4717 +map.have4717: %t857 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 store i64 %t842, ptr %t857 %t858 = load i64, ptr %a49 @@ -48401,11 +48427,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic4714, label %ok4715 -panic4714: + br i1 %t3, label %panic4718, label %ok4719 +panic4718: call void @finch_panic(ptr @.str.2914, i64 2119, ptr @.str.2915) unreachable -ok4715: +ok4719: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 37 %t5 = load i64, ptr %t4 call void @finch_str_from_int(ptr %a6, i64 %t5) @@ -48424,11 +48450,11 @@ ok4715: %t17 = load { ptr, i64, i64 }, ptr %a13 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic4716, label %ok4717 -panic4716: + br i1 %t19, label %panic4720, label %ok4721 +panic4720: call void @finch_panic(ptr @.str.2917, i64 2119, ptr @.str.2918) unreachable -ok4717: +ok4721: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 38 %t21 = load i64, ptr %t20 call void @finch_str_from_int(ptr %a22, i64 %t21) @@ -48449,11 +48475,11 @@ ok4717: %t34 = load { ptr, i64, i64 }, ptr %a30 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic4718, label %ok4719 -panic4718: + br i1 %t36, label %panic4722, label %ok4723 +panic4722: call void @finch_panic(ptr @.str.2920, i64 2119, ptr @.str.2921) unreachable -ok4719: +ok4723: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 36 %t38 = load i64, ptr %t37 call void @finch_str_from_int(ptr %a39, i64 %t38) @@ -48469,38 +48495,38 @@ ok4719: store { ptr, i64, i64 } %t46, ptr %a47 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null - br i1 %t49, label %panic4720, label %ok4721 -panic4720: + br i1 %t49, label %panic4724, label %ok4725 +panic4724: call void @finch_panic(ptr @.str.2922, i64 2120, ptr @.str.2923) unreachable -ok4721: +ok4725: %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 34 %t51 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t51, ptr %a52 %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t54 = icmp sge i64 %t53, 0 - br i1 %t54, label %then4722, label %endif4724 -then4722: + br i1 %t54, label %then4726, label %endif4728 +then4726: %t55 = load ptr, ptr %a1 %t56 = icmp eq ptr %t55, null - br i1 %t56, label %panic4725, label %ok4726 -panic4725: + br i1 %t56, label %panic4729, label %ok4730 +panic4729: call void @finch_panic(ptr @.str.2924, i64 2121, ptr @.str.2925) unreachable -ok4726: +ok4730: %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 34 %t58 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t58, ptr %a59 %t60 = call i64 @finch_map_find(ptr %t57, ptr %a59, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t61 = icmp slt i64 %t60, 0 - br i1 %t61, label %map.missing4727, label %map.found4728 -map.missing4727: + br i1 %t61, label %map.missing4731, label %map.found4732 +map.missing4731: store { ptr, i64, i64 } zeroinitializer, ptr %a62 store { ptr, i64, i64 } %t58, ptr %a63 call void @finch_buf_str(ptr %a62, ptr %a63, i32 1) call void @finch_map_missing(ptr @.str.2926, i64 2121, ptr %a62) unreachable -map.found4728: +map.found4732: %t64 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t57, i32 0, i32 0 %t65 = load ptr, ptr %t64 %t66 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t65, i64 %t60 @@ -48508,15 +48534,15 @@ map.found4728: %t68 = load i64, ptr %t67 call void @finch_str_drop(ptr %a47) ret i64 %t68 -endif4724: +endif4728: %t69 = load ptr, ptr %a1 %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null - br i1 %t71, label %panic4729, label %ok4730 -panic4729: + br i1 %t71, label %panic4733, label %ok4734 +panic4733: call void @finch_panic(ptr @.str.2928, i64 2123, ptr @.str.2929) unreachable -ok4730: +ok4734: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 37 %t73 = load i64, ptr %t72 call void @finch_str_from_int(ptr %a74, i64 %t73) @@ -48535,11 +48561,11 @@ ok4730: %t85 = load { ptr, i64, i64 }, ptr %a81 %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic4731, label %ok4732 -panic4731: + br i1 %t87, label %panic4735, label %ok4736 +panic4735: call void @finch_panic(ptr @.str.2931, i64 2123, ptr @.str.2932) unreachable -ok4732: +ok4736: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 38 %t89 = load i64, ptr %t88 call void @finch_str_from_int(ptr %a90, i64 %t89) @@ -48560,11 +48586,11 @@ ok4732: %t102 = load { ptr, i64, i64 }, ptr %a98 %t103 = load ptr, ptr %a1 %t104 = icmp eq ptr %t103, null - br i1 %t104, label %panic4733, label %ok4734 -panic4733: + br i1 %t104, label %panic4737, label %ok4738 +panic4737: call void @finch_panic(ptr @.str.2934, i64 2123, ptr @.str.2935) unreachable -ok4734: +ok4738: %t105 = getelementptr inbounds %S.gen.Gen, ptr %t103, i32 0, i32 36 %t106 = load i64, ptr %t105 call void @finch_str_from_int(ptr %a107, i64 %t106) @@ -48590,11 +48616,11 @@ ok4734: %t123 = load i64, ptr %a122 %t124 = load ptr, ptr %a1 %t125 = icmp eq ptr %t124, null - br i1 %t125, label %panic4735, label %ok4736 -panic4735: + br i1 %t125, label %panic4739, label %ok4740 +panic4739: call void @finch_panic(ptr @.str.2937, i64 2124, ptr @.str.2938) unreachable -ok4736: +ok4740: %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 34 %t127 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t127, ptr %a128 @@ -48605,14 +48631,14 @@ ok4736: %t133 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t132, i64 %t130 %t134 = load i32, ptr %a129 %t135 = icmp ne i32 %t134, 0 - br i1 %t135, label %map.new4737, label %map.have4738 -map.new4737: + br i1 %t135, label %map.new4741, label %map.have4742 +map.new4741: %t136 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 1 call void @finch_str_copy(ptr %t136, ptr %a128) %t137 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 store i64 0, ptr %t137 - br label %map.have4738 -map.have4738: + br label %map.have4742 +map.have4742: %t138 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 store i64 %t123, ptr %t138 %t139 = load i64, ptr %a122 @@ -48716,11 +48742,11 @@ entry: store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4739, label %ok4740 -panic4739: + br i1 %t4, label %panic4743, label %ok4744 +panic4743: call void @finch_panic(ptr @.str.2939, i64 2129, ptr @.str.2940) unreachable -ok4740: +ok4744: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 %t6 = load %S.gen.FnSig, ptr %t5 store %S.gen.FnSig %t6, ptr %a7 @@ -48745,8 +48771,8 @@ ok4740: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp sgt i64 %t24, 0 - br i1 %t25, label %then4741, label %endif4743 -then4741: + br i1 %t25, label %then4745, label %endif4747 +then4745: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = add i64 %t27, 1 @@ -48755,18 +48781,18 @@ then4741: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t27 store { ptr, i64, i64 } { ptr @.str.2941, i64 4, i64 0 }, ptr %t30 store i64 %t28, ptr %t26 - br label %endif4743 -endif4743: + br label %endif4747 +endif4747: %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 13 store i64 0, ptr %a32 - br label %each.cond4744 -each.cond4744: + br label %each.cond4748 +each.cond4748: %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t34 = load i64, ptr %t33 %t35 = load i64, ptr %a32 %t36 = icmp slt i64 %t35, %t34 - br i1 %t36, label %each.body4745, label %each.end4747 -each.body4745: + br i1 %t36, label %each.body4749, label %each.end4751 +each.body4749: %t37 = load ptr, ptr %t31 %t38 = getelementptr inbounds %S.ast.Type, ptr %t37, i64 %t35 %t39 = load %S.ast.Type, ptr %t38 @@ -48783,31 +48809,31 @@ each.body4745: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t46 store { ptr, i64, i64 } %t45, ptr %t49 store i64 %t47, ptr %t41 - br label %each.step4746 -each.step4746: + br label %each.step4750 +each.step4750: %t50 = load i64, ptr %a32 %t51 = add i64 %t50, 1 store i64 %t51, ptr %a32 - br label %each.cond4744 -each.end4747: + br label %each.cond4748 +each.end4751: %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic4748, label %ok4749 -panic4748: + br i1 %t53, label %panic4752, label %ok4753 +panic4752: call void @finch_panic(ptr @.str.2942, i64 2138, ptr @.str.2943) unreachable -ok4749: +ok4753: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 35 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t56 = load i64, ptr %t55 %t57 = load { ptr, i64, i64 }, ptr %t54 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 %t56, %t58 - br i1 %t59, label %range4750, label %inrange4751 -range4750: + br i1 %t59, label %range4754, label %inrange4755 +range4754: call void @finch_panic_index(ptr @.str.2944, i64 2138, i64 %t56, i64 %t58) unreachable -inrange4751: +inrange4755: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds i64, ptr %t60, i64 %t56 %t62 = load i64, ptr %t61 @@ -49056,67 +49082,67 @@ entry: store { ptr, i64, i64 } %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic4752, label %ok4753 -panic4752: + br i1 %t7, label %panic4756, label %ok4757 +panic4756: call void @finch_panic(ptr @.str.2957, i64 2144, ptr @.str.2958) unreachable -ok4753: +ok4757: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 30 %t9 = load i1, ptr %t8 %t10 = xor i1 %t9, true - br label %logic.from4754 -logic.from4754: - br i1 %t10, label %logic.end4756, label %logic.rhs4755 -logic.rhs4755: + br label %logic.from4758 +logic.from4758: + br i1 %t10, label %logic.end4760, label %logic.rhs4759 +logic.rhs4759: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic4757, label %ok4758 -panic4757: + br i1 %t12, label %panic4761, label %ok4762 +panic4761: call void @finch_panic(ptr @.str.2959, i64 2144, ptr @.str.2960) unreachable -ok4758: +ok4762: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 36 %t14 = load i64, ptr %t13 %t15 = icmp slt i64 %t14, 0 - br label %logic.rend4759 -logic.rend4759: - br label %logic.end4756 -logic.end4756: - %t16 = phi i1 [ true, %logic.from4754 ], [ %t15, %logic.rend4759 ] - br i1 %t16, label %then4760, label %endif4762 -then4760: + br label %logic.rend4763 +logic.rend4763: + br label %logic.end4760 +logic.end4760: + %t16 = phi i1 [ true, %logic.from4758 ], [ %t15, %logic.rend4763 ] + br i1 %t16, label %then4764, label %endif4766 +then4764: ret void -endif4762: +endif4766: %t17 = load ptr, ptr %a1 %t18 = load %S.ast.Type, ptr %a4 %t19 = call i64 @finch.gen.diType(ptr %t17, %S.ast.Type %t18) store i64 %t19, ptr %a20 %t21 = load i64, ptr %a20 %t22 = icmp slt i64 %t21, 0 - br i1 %t22, label %then4763, label %endif4765 -then4763: + br i1 %t22, label %then4767, label %endif4769 +then4767: ret void -endif4765: +endif4769: store { ptr, i64, i64 } { ptr @.str.2961, i64 0, i64 0 }, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic4766, label %ok4767 -panic4766: + br i1 %t25, label %panic4770, label %ok4771 +panic4770: call void @finch_panic(ptr @.str.2962, i64 2152, ptr @.str.2963) unreachable -ok4767: +ok4771: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 39 %t27 = load i64, ptr %t26 %t28 = icmp sgt i64 %t27, 0 - br i1 %t28, label %then4768, label %endif4770 -then4768: + br i1 %t28, label %then4772, label %endif4774 +then4772: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic4771, label %ok4772 -panic4771: + br i1 %t30, label %panic4775, label %ok4776 +panic4775: call void @finch_panic(ptr @.str.2965, i64 2153, ptr @.str.2966) unreachable -ok4772: +ok4776: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 39 %t32 = load i64, ptr %t31 call void @finch_str_from_int(ptr %a33, i64 %t32) @@ -49131,8 +49157,8 @@ ok4772: store { ptr, i64, i64 } %t39, ptr %a23 store { ptr, i64, i64 } %t40, ptr %a41 call void @finch_str_drop(ptr %a41) - br label %endif4770 -endif4770: + br label %endif4774 +endif4774: %t42 = load ptr, ptr %a1 %t43 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2967, i64 24, i64 0 }, ptr %a45 @@ -49147,11 +49173,11 @@ endif4770: %t52 = load { ptr, i64, i64 }, ptr %a48 %t53 = load ptr, ptr %a1 %t54 = icmp eq ptr %t53, null - br i1 %t54, label %panic4773, label %ok4774 -panic4773: + br i1 %t54, label %panic4777, label %ok4778 +panic4777: call void @finch_panic(ptr @.str.2969, i64 2155, ptr @.str.2970) unreachable -ok4774: +ok4778: %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 36 %t56 = load i64, ptr %t55 call void @finch_str_from_int(ptr %a57, i64 %t56) @@ -49172,22 +49198,22 @@ ok4774: %t69 = load { ptr, i64, i64 }, ptr %a65 %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null - br i1 %t71, label %panic4775, label %ok4776 -panic4775: + br i1 %t71, label %panic4779, label %ok4780 +panic4779: call void @finch_panic(ptr @.str.2972, i64 2155, ptr @.str.2973) unreachable -ok4776: +ok4780: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 35 %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t74 = load i64, ptr %t73 %t75 = load { ptr, i64, i64 }, ptr %t72 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 %t74, %t76 - br i1 %t77, label %range4777, label %inrange4778 -range4777: + br i1 %t77, label %range4781, label %inrange4782 +range4781: call void @finch_panic_index(ptr @.str.2974, i64 2155, i64 %t74, i64 %t76) unreachable -inrange4778: +inrange4782: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds i64, ptr %t78, i64 %t74 %t80 = load i64, ptr %t79 @@ -49257,22 +49283,22 @@ inrange4778: %t133 = load i64, ptr %t132 %t134 = load ptr, ptr %a1 %t135 = icmp eq ptr %t134, null - br i1 %t135, label %panic4779, label %ok4780 -panic4779: + br i1 %t135, label %panic4783, label %ok4784 +panic4783: call void @finch_panic(ptr @.str.2978, i64 2156, ptr @.str.2979) unreachable -ok4780: +ok4784: %t136 = getelementptr inbounds %S.gen.Gen, ptr %t134, i32 0, i32 37 store i64 %t133, ptr %t136 %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t138 = load i64, ptr %t137 %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null - br i1 %t140, label %panic4781, label %ok4782 -panic4781: + br i1 %t140, label %panic4785, label %ok4786 +panic4785: call void @finch_panic(ptr @.str.2980, i64 2157, ptr @.str.2981) unreachable -ok4782: +ok4786: %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 38 store i64 %t138, ptr %t141 %t142 = load ptr, ptr %a1 @@ -49348,21 +49374,21 @@ entry: store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic4783, label %ok4784 -panic4783: + br i1 %t11, label %panic4787, label %ok4788 +panic4787: call void @finch_panic(ptr @.str.2987, i64 2164, ptr @.str.2988) unreachable -ok4784: +ok4788: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 33 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 store i64 0, ptr %a15 - br label %for.cond4785 -for.cond4785: + br label %for.cond4789 +for.cond4789: %t16 = load i64, ptr %a15 %t17 = icmp slt i64 %t16, %t14 - br i1 %t17, label %for.body4786, label %for.end4788 -for.body4786: + br i1 %t17, label %for.body4790, label %for.end4792 +for.body4790: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t19 = load i64, ptr %a15 call void @finch_str_from_int(ptr %a20, i64 %t19) @@ -49381,21 +49407,21 @@ for.body4786: %t31 = load { ptr, i64, i64 }, ptr %a27 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic4789, label %ok4790 -panic4789: + br i1 %t33, label %panic4793, label %ok4794 +panic4793: call void @finch_panic(ptr @.str.2991, i64 2165, ptr @.str.2992) unreachable -ok4790: +ok4794: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 33 %t35 = load i64, ptr %a15 %t36 = load { ptr, i64, i64 }, ptr %t34 %t37 = extractvalue { ptr, i64, i64 } %t36, 1 %t38 = icmp uge i64 %t35, %t37 - br i1 %t38, label %range4791, label %inrange4792 -range4791: + br i1 %t38, label %range4795, label %inrange4796 +range4795: call void @finch_panic_index(ptr @.str.2993, i64 2165, i64 %t35, i64 %t37) unreachable -inrange4792: +inrange4796: %t39 = extractvalue { ptr, i64, i64 } %t36, 0 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t35 %t41 = load { ptr, i64, i64 }, ptr %t40 @@ -49412,13 +49438,13 @@ inrange4792: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t18 - br label %for.step4787 -for.step4787: + br label %for.step4791 +for.step4791: %t51 = load i64, ptr %a15 %t52 = add i64 %t51, 1 store i64 %t52, ptr %a15 - br label %for.cond4785 -for.end4788: + br label %for.cond4789 +for.end4792: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2994, i64 1, i64 0 }, ptr %a54 call void @finch_str_join(ptr %a55, ptr %a9, ptr %a54) @@ -49442,20 +49468,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond4864 -n.cond4864: + br label %n.cond4868 +n.cond4868: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body4865, label %n.end4866 -n.body4865: + br i1 %t7, label %n.body4869, label %n.end4870 +n.body4869: %t8 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.gen.Var, ptr %t2, i64 %t6 call void @finch.copy.S_gen_Var(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond4864 -n.end4866: + br label %n.cond4868 +n.end4870: ret void } @@ -49495,20 +49521,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond4861 -n.cond4861: + br label %n.cond4865 +n.cond4865: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body4862, label %n.end4863 -n.body4862: + br i1 %t7, label %n.body4866, label %n.end4867 +n.body4866: %t8 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.gen.Scope, ptr %t2, i64 %t6 call void @finch.copy.S_gen_Scope(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond4861 -n.end4863: + br label %n.cond4865 +n.end4867: ret void } @@ -49519,19 +49545,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond4867 -n.cond4867: + br label %n.cond4871 +n.cond4871: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body4868, label %n.end4869 -n.body4868: + br i1 %t6, label %n.body4872, label %n.end4873 +n.body4872: %t7 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Scope(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond4867 -n.end4869: + br label %n.cond4871 +n.end4873: call void @finch_arr_free(ptr %a) ret void } @@ -49702,31 +49728,31 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4793, label %ok4794 -panic4793: + br i1 %t4, label %panic4797, label %ok4798 +panic4797: call void @finch_panic(ptr @.str.2996, i64 2171, ptr @.str.2997) unreachable -ok4794: +ok4798: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 15 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 - br i1 %t9, label %range4795, label %inrange4796 -range4795: + br i1 %t9, label %range4799, label %inrange4800 +range4799: call void @finch_panic_index(ptr @.str.2998, i64 2171, i64 %t6, i64 %t8) unreachable -inrange4796: +inrange4800: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %t10, i64 %t6 %t12 = load %S.gen.FnSig, ptr %t11 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic4797, label %ok4798 -panic4797: + br i1 %t14, label %panic4801, label %ok4802 +panic4801: call void @finch_panic(ptr @.str.2999, i64 2171, ptr @.str.3000) unreachable -ok4798: +ok4802: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 13 store %S.gen.FnSig %t12, ptr %a16 call void @finch.copy.S_gen_FnSig(ptr %a17, ptr %a16) @@ -49737,21 +49763,21 @@ ok4798: call void @finch.drop.S_gen_FnSig(ptr %a20) %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null - br i1 %t22, label %panic4799, label %ok4800 -panic4799: + br i1 %t22, label %panic4803, label %ok4804 +panic4803: call void @finch_panic(ptr @.str.3001, i64 2172, ptr @.str.3002) unreachable -ok4800: +ok4804: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 13 %t24 = getelementptr inbounds %S.gen.FnSig, ptr %t23, i32 0, i32 0 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic4801, label %ok4802 -panic4801: + br i1 %t27, label %panic4805, label %ok4806 +panic4805: call void @finch_panic(ptr @.str.3003, i64 2172, ptr @.str.3004) unreachable -ok4802: +ok4806: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 14 store { ptr, i64, i64 } %t25, ptr %a29 call void @finch_str_copy(ptr %a30, ptr %a29) @@ -49762,21 +49788,21 @@ ok4802: call void @finch_str_drop(ptr %a33) %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic4803, label %ok4804 -panic4803: + br i1 %t35, label %panic4807, label %ok4808 +panic4807: call void @finch_panic(ptr @.str.3005, i64 2173, ptr @.str.3006) unreachable -ok4804: +ok4808: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 13 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 6 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic4805, label %ok4806 -panic4805: + br i1 %t40, label %panic4809, label %ok4810 +panic4809: call void @finch_panic(ptr @.str.3007, i64 2173, ptr @.str.3008) unreachable -ok4806: +ok4810: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 18 store { ptr, i64, i64 } %t38, ptr %a42 call void @finch.copy.arr_str(ptr %a43, ptr %a42) @@ -49787,21 +49813,21 @@ ok4806: call void @finch.drop.arr_str(ptr %a46) %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic4807, label %ok4808 -panic4807: + br i1 %t48, label %panic4811, label %ok4812 +panic4811: call void @finch_panic(ptr @.str.3009, i64 2174, ptr @.str.3010) unreachable -ok4808: +ok4812: %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 13 %t50 = getelementptr inbounds %S.gen.FnSig, ptr %t49, i32 0, i32 7 %t51 = load { ptr, i64, i64 }, ptr %t50 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic4809, label %ok4810 -panic4809: + br i1 %t53, label %panic4813, label %ok4814 +panic4813: call void @finch_panic(ptr @.str.3011, i64 2174, ptr @.str.3012) unreachable -ok4810: +ok4814: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 19 store { ptr, i64, i64 } %t51, ptr %a55 call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) @@ -49812,11 +49838,11 @@ ok4810: call void @finch.drop.arr_S_ast_Type(ptr %a59) %t60 = load ptr, ptr %a1 %t61 = icmp eq ptr %t60, null - br i1 %t61, label %panic4811, label %ok4812 -panic4811: + br i1 %t61, label %panic4815, label %ok4816 +panic4815: call void @finch_panic(ptr @.str.3014, i64 2175, ptr @.str.3015) unreachable -ok4812: +ok4816: %t62 = getelementptr inbounds %S.gen.Gen, ptr %t60, i32 0, i32 20 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } { ptr @.str.3013, i64 0, i64 0 }, ptr %t62 @@ -49824,25 +49850,25 @@ ok4812: call void @finch_str_drop(ptr %a64) %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic4813, label %ok4814 -panic4813: + br i1 %t66, label %panic4817, label %ok4818 +panic4817: call void @finch_panic(ptr @.str.3016, i64 2176, ptr @.str.3017) unreachable -ok4814: +ok4818: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 13 %t68 = getelementptr inbounds %S.gen.FnSig, ptr %t67, i32 0, i32 7 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = icmp sgt i64 %t70, 0 - br i1 %t71, label %then4815, label %endif4817 -then4815: + br i1 %t71, label %then4819, label %endif4821 +then4819: %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null - br i1 %t73, label %panic4818, label %ok4819 -panic4818: + br i1 %t73, label %panic4822, label %ok4823 +panic4822: call void @finch_panic(ptr @.str.3019, i64 2177, ptr @.str.3020) unreachable -ok4819: +ok4823: %t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 13 %t75 = getelementptr inbounds %S.gen.FnSig, ptr %t74, i32 0, i32 8 %t76 = load { ptr, i64, i64 }, ptr %t75 @@ -49858,65 +49884,65 @@ ok4819: %t85 = load { ptr, i64, i64 }, ptr %a81 %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic4820, label %ok4821 -panic4820: + br i1 %t87, label %panic4824, label %ok4825 +panic4824: call void @finch_panic(ptr @.str.3022, i64 2177, ptr @.str.3023) unreachable -ok4821: +ok4825: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 20 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t85, ptr %t88 store { ptr, i64, i64 } %t89, ptr %a90 call void @finch_str_drop(ptr %a90) - br label %endif4817 -endif4817: + br label %endif4821 +endif4821: %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null - br i1 %t92, label %panic4822, label %ok4823 -panic4822: + br i1 %t92, label %panic4826, label %ok4827 +panic4826: call void @finch_panic(ptr @.str.3024, i64 2179, ptr @.str.3025) unreachable -ok4823: +ok4827: %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 0 %t94 = load ptr, ptr %a1 %t95 = icmp eq ptr %t94, null - br i1 %t95, label %panic4824, label %ok4825 -panic4824: + br i1 %t95, label %panic4828, label %ok4829 +panic4828: call void @finch_panic(ptr @.str.3026, i64 2179, ptr @.str.3027) unreachable -ok4825: +ok4829: %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 13 %t97 = getelementptr inbounds %S.gen.FnSig, ptr %t96, i32 0, i32 16 %t98 = load i64, ptr %t97 %t99 = load { ptr, i64, i64 }, ptr %t93 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 %t98, %t100 - br i1 %t101, label %range4826, label %inrange4827 -range4826: + br i1 %t101, label %range4830, label %inrange4831 +range4830: call void @finch_panic_index(ptr @.str.3028, i64 2179, i64 %t98, i64 %t100) unreachable -inrange4827: +inrange4831: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Program, ptr %t102, i64 %t98 %t104 = getelementptr inbounds %S.ast.Program, ptr %t103, i32 0, i32 8 %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null - br i1 %t106, label %panic4828, label %ok4829 -panic4828: + br i1 %t106, label %panic4832, label %ok4833 +panic4832: call void @finch_panic(ptr @.str.3029, i64 2179, ptr @.str.3030) unreachable -ok4829: +ok4833: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 13 %t108 = getelementptr inbounds %S.gen.FnSig, ptr %t107, i32 0, i32 17 %t109 = load i64, ptr %t108 %t110 = load { ptr, i64, i64 }, ptr %t104 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 - br i1 %t112, label %range4830, label %inrange4831 -range4830: + br i1 %t112, label %range4834, label %inrange4835 +range4834: call void @finch_panic_index(ptr @.str.3031, i64 2179, i64 %t109, i64 %t111) unreachable -inrange4831: +inrange4835: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds %S.ast.Node, ptr %t113, i64 %t109 %t115 = load %S.ast.Node, ptr %t114 @@ -49928,11 +49954,11 @@ inrange4831: %t121 = load { ptr, i64, i64 }, ptr %a120 %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null - br i1 %t123, label %panic4832, label %ok4833 -panic4832: + br i1 %t123, label %panic4836, label %ok4837 +panic4836: call void @finch_panic(ptr @.str.3032, i64 2181, ptr @.str.3033) unreachable -ok4833: +ok4837: %t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 4 store { ptr, i64, i64 } %t121, ptr %a125 call void @finch.copy.arr_str(ptr %a126, ptr %a125) @@ -49944,11 +49970,11 @@ ok4833: %t130 = load { ptr, i64, i64 }, ptr %a120 %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null - br i1 %t132, label %panic4834, label %ok4835 -panic4834: + br i1 %t132, label %panic4838, label %ok4839 +panic4838: call void @finch_panic(ptr @.str.3034, i64 2182, ptr @.str.3035) unreachable -ok4835: +ok4839: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 5 store { ptr, i64, i64 } %t130, ptr %a134 call void @finch.copy.arr_str(ptr %a135, ptr %a134) @@ -49959,52 +49985,52 @@ ok4835: call void @finch.drop.arr_str(ptr %a138) %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null - br i1 %t140, label %panic4836, label %ok4837 -panic4836: + br i1 %t140, label %panic4840, label %ok4841 +panic4840: call void @finch_panic(ptr @.str.3036, i64 2183, ptr @.str.3037) unreachable -ok4837: +ok4841: %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 6 store i64 0, ptr %t141 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic4838, label %ok4839 -panic4838: + br i1 %t143, label %panic4842, label %ok4843 +panic4842: call void @finch_panic(ptr @.str.3038, i64 2184, ptr @.str.3039) unreachable -ok4839: +ok4843: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 9 store i1 false, ptr %t144 %t145 = load ptr, ptr %a1 %t146 = icmp eq ptr %t145, null - br i1 %t146, label %panic4840, label %ok4841 -panic4840: + br i1 %t146, label %panic4844, label %ok4845 +panic4844: call void @finch_panic(ptr @.str.3040, i64 2185, ptr @.str.3041) unreachable -ok4841: +ok4845: %t147 = getelementptr inbounds %S.gen.Gen, ptr %t145, i32 0, i32 25 store i64 0, ptr %t147 %t148 = load ptr, ptr %a1 %t149 = icmp eq ptr %t148, null - br i1 %t149, label %panic4842, label %ok4843 -panic4842: + br i1 %t149, label %panic4846, label %ok4847 +panic4846: call void @finch_panic(ptr @.str.3042, i64 2186, ptr @.str.3043) unreachable -ok4843: +ok4847: %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 36 store i64 -1, ptr %t150 store i64 -1, ptr %a151 %t152 = load ptr, ptr %a1 %t153 = icmp eq ptr %t152, null - br i1 %t153, label %panic4844, label %ok4845 -panic4844: + br i1 %t153, label %panic4848, label %ok4849 +panic4848: call void @finch_panic(ptr @.str.3044, i64 2188, ptr @.str.3045) unreachable -ok4845: +ok4849: %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 30 %t155 = load i1, ptr %t154 - br i1 %t155, label %then4846, label %endif4848 -then4846: + br i1 %t155, label %then4850, label %endif4852 +then4850: %t156 = load ptr, ptr %a1 %t157 = load %S.ast.Node, ptr %a119 %t158 = call i64 @finch.gen.dbgSubprogram(ptr %t156, %S.ast.Node %t157) @@ -50012,64 +50038,64 @@ then4846: %t159 = load i64, ptr %a151 %t160 = load ptr, ptr %a1 %t161 = icmp eq ptr %t160, null - br i1 %t161, label %panic4849, label %ok4850 -panic4849: + br i1 %t161, label %panic4853, label %ok4854 +panic4853: call void @finch_panic(ptr @.str.3046, i64 2190, ptr @.str.3047) unreachable -ok4850: +ok4854: %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 36 store i64 %t159, ptr %t162 %t163 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 11 %t164 = load i64, ptr %t163 %t165 = load ptr, ptr %a1 %t166 = icmp eq ptr %t165, null - br i1 %t166, label %panic4851, label %ok4852 -panic4851: + br i1 %t166, label %panic4855, label %ok4856 +panic4855: call void @finch_panic(ptr @.str.3048, i64 2191, ptr @.str.3049) unreachable -ok4852: +ok4856: %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 37 store i64 %t164, ptr %t167 %t168 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 12 %t169 = load i64, ptr %t168 %t170 = load ptr, ptr %a1 %t171 = icmp eq ptr %t170, null - br i1 %t171, label %panic4853, label %ok4854 -panic4853: + br i1 %t171, label %panic4857, label %ok4858 +panic4857: call void @finch_panic(ptr @.str.3050, i64 2192, ptr @.str.3051) unreachable -ok4854: +ok4858: %t172 = getelementptr inbounds %S.gen.Gen, ptr %t170, i32 0, i32 38 store i64 %t169, ptr %t172 - br label %endif4848 -endif4848: + br label %endif4852 +endif4852: %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic4855, label %ok4856 -panic4855: + br i1 %t174, label %panic4859, label %ok4860 +panic4859: call void @finch_panic(ptr @.str.3052, i64 2194, ptr @.str.3053) unreachable -ok4856: +ok4860: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 44 store i1 false, ptr %t175 %t176 = load ptr, ptr %a1 %t177 = icmp eq ptr %t176, null - br i1 %t177, label %panic4857, label %ok4858 -panic4857: + br i1 %t177, label %panic4861, label %ok4862 +panic4861: call void @finch_panic(ptr @.str.3054, i64 2195, ptr @.str.3055) unreachable -ok4858: +ok4862: %t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 46 store i64 0, ptr %t178 store { ptr, i64, i64 } zeroinitializer, ptr %a179 %t180 = load { ptr, i64, i64 }, ptr %a179 %t181 = load ptr, ptr %a1 %t182 = icmp eq ptr %t181, null - br i1 %t182, label %panic4859, label %ok4860 -panic4859: + br i1 %t182, label %panic4863, label %ok4864 +panic4863: call void @finch_panic(ptr @.str.3056, i64 2197, ptr @.str.3057) unreachable -ok4860: +ok4864: %t183 = getelementptr inbounds %S.gen.Gen, ptr %t181, i32 0, i32 10 store { ptr, i64, i64 } %t180, ptr %a184 call void @finch.copy.arr_S_gen_Scope(ptr %a185, ptr %a184) @@ -50083,18 +50109,18 @@ ok4860: store { ptr, i64, i64 } zeroinitializer, ptr %a190 %t191 = load ptr, ptr %a1 %t192 = icmp eq ptr %t191, null - br i1 %t192, label %panic4870, label %ok4871 -panic4870: + br i1 %t192, label %panic4874, label %ok4875 +panic4874: call void @finch_panic(ptr @.str.3058, i64 2200, ptr @.str.3059) unreachable -ok4871: +ok4875: %t193 = getelementptr inbounds %S.gen.Gen, ptr %t191, i32 0, i32 13 %t194 = getelementptr inbounds %S.gen.FnSig, ptr %t193, i32 0, i32 2 %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 %t196 = load i64, ptr %t195 %t197 = icmp sgt i64 %t196, 0 - br i1 %t197, label %then4872, label %endif4874 -then4872: + br i1 %t197, label %then4876, label %endif4878 +then4876: %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 %t199 = load i64, ptr %t198 %t200 = add i64 %t199, 1 @@ -50106,22 +50132,22 @@ then4872: store { ptr, i64, i64 } { ptr @.str.3061, i64 6, i64 0 }, ptr %a203 %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null - br i1 %t205, label %panic4875, label %ok4876 -panic4875: + br i1 %t205, label %panic4879, label %ok4880 +panic4879: call void @finch_panic(ptr @.str.3062, i64 2204, ptr @.str.3063) unreachable -ok4876: +ok4880: %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 13 %t207 = getelementptr inbounds %S.gen.FnSig, ptr %t206, i32 0, i32 4 %t208 = load i1, ptr %t207 - br i1 %t208, label %then4877, label %endif4879 -then4877: + br i1 %t208, label %then4881, label %endif4883 +then4881: %t209 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } { ptr @.str.3064, i64 4, i64 0 }, ptr %a203 store { ptr, i64, i64 } %t209, ptr %a210 call void @finch_str_drop(ptr %a210) - br label %endif4879 -endif4879: + br label %endif4883 +endif4883: %t211 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t211, ptr %a212 call void @finch_str_copy(ptr %a213, ptr %a212) @@ -50129,11 +50155,11 @@ endif4879: %t215 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t214, 0 %t216 = load ptr, ptr %a1 %t217 = icmp eq ptr %t216, null - br i1 %t217, label %panic4880, label %ok4881 -panic4880: + br i1 %t217, label %panic4884, label %ok4885 +panic4884: call void @finch_panic(ptr @.str.3065, i64 2207, ptr @.str.3066) unreachable -ok4881: +ok4885: %t218 = getelementptr inbounds %S.gen.Gen, ptr %t216, i32 0, i32 13 %t219 = getelementptr inbounds %S.gen.FnSig, ptr %t218, i32 0, i32 2 %t220 = load { ptr, i64, i64 }, ptr %t219 @@ -50143,11 +50169,11 @@ ok4881: %t224 = insertvalue %S.ast.Type %t215, { ptr, i64, i64 } %t223, 2 %t225 = load ptr, ptr %a1 %t226 = icmp eq ptr %t225, null - br i1 %t226, label %panic4882, label %ok4883 -panic4882: + br i1 %t226, label %panic4886, label %ok4887 +panic4886: call void @finch_panic(ptr @.str.3067, i64 2207, ptr @.str.3068) unreachable -ok4883: +ok4887: %t227 = getelementptr inbounds %S.gen.Gen, ptr %t225, i32 0, i32 13 %t228 = getelementptr inbounds %S.gen.FnSig, ptr %t227, i32 0, i32 3 %t229 = load { ptr, i64, i64 }, ptr %t228 @@ -50158,20 +50184,20 @@ ok4883: store %S.ast.Type %t233, ptr %a234 %t235 = load ptr, ptr %a1 %t236 = icmp eq ptr %t235, null - br i1 %t236, label %panic4884, label %ok4885 -panic4884: + br i1 %t236, label %panic4888, label %ok4889 +panic4888: call void @finch_panic(ptr @.str.3069, i64 2208, ptr @.str.3070) unreachable -ok4885: +ok4889: %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 10 %t238 = load { ptr, i64, i64 }, ptr %t237 %t239 = extractvalue { ptr, i64, i64 } %t238, 1 %t240 = icmp uge i64 0, %t239 - br i1 %t240, label %range4886, label %inrange4887 -range4886: + br i1 %t240, label %range4890, label %inrange4891 +range4890: call void @finch_panic_index(ptr @.str.3071, i64 2208, i64 0, i64 %t239) unreachable -inrange4887: +inrange4891: %t241 = extractvalue { ptr, i64, i64 } %t238, 0 %t242 = getelementptr inbounds %S.gen.Scope, ptr %t241, i64 0 %t243 = getelementptr inbounds %S.gen.Scope, ptr %t242, i32 0, i32 0 @@ -50193,61 +50219,61 @@ inrange4887: store i64 %t254, ptr %t244 %t257 = load ptr, ptr %a1 %t258 = icmp eq ptr %t257, null - br i1 %t258, label %panic4888, label %ok4889 -panic4888: + br i1 %t258, label %panic4892, label %ok4893 +panic4892: call void @finch_panic(ptr @.str.3074, i64 2209, ptr @.str.3075) unreachable -ok4889: +ok4893: %t259 = getelementptr inbounds %S.gen.Gen, ptr %t257, i32 0, i32 30 %t260 = load i1, ptr %t259 - br i1 %t260, label %then4890, label %endif4892 -then4890: + br i1 %t260, label %then4894, label %endif4896 +then4894: %t261 = load ptr, ptr %a1 %t262 = load %S.ast.Node, ptr %a119 %t263 = load %S.ast.Type, ptr %a234 call void @finch.gen.dbgVariable(ptr %t261, %S.ast.Node %t262, { ptr, i64, i64 } { ptr @.str.3076, i64 4, i64 0 }, %S.ast.Type %t263, { ptr, i64, i64 } { ptr @.str.3077, i64 5, i64 0 }) - br label %endif4892 -endif4892: + br label %endif4896 +endif4896: call void @finch.drop.S_ast_Type(ptr %a234) call void @finch_str_drop(ptr %a203) - br label %endif4874 -endif4874: + br label %endif4878 +endif4878: %t264 = load ptr, ptr %a1 %t265 = icmp eq ptr %t264, null - br i1 %t265, label %panic4893, label %ok4894 -panic4893: + br i1 %t265, label %panic4897, label %ok4898 +panic4897: call void @finch_panic(ptr @.str.3078, i64 2214, ptr @.str.3079) unreachable -ok4894: +ok4898: %t266 = getelementptr inbounds %S.gen.Gen, ptr %t264, i32 0, i32 13 %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i32 0, i32 13 %t268 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i32 0, i32 1 %t269 = load i64, ptr %t268 store i64 0, ptr %a270 - br label %for.cond4895 -for.cond4895: + br label %for.cond4899 +for.cond4899: %t271 = load i64, ptr %a270 %t272 = icmp slt i64 %t271, %t269 - br i1 %t272, label %for.body4896, label %for.end4898 -for.body4896: + br i1 %t272, label %for.body4900, label %for.end4902 +for.body4900: %t273 = load ptr, ptr %a1 %t274 = icmp eq ptr %t273, null - br i1 %t274, label %panic4899, label %ok4900 -panic4899: + br i1 %t274, label %panic4903, label %ok4904 +panic4903: call void @finch_panic(ptr @.str.3080, i64 2215, ptr @.str.3081) unreachable -ok4900: +ok4904: %t275 = getelementptr inbounds %S.gen.Gen, ptr %t273, i32 0, i32 13 %t276 = getelementptr inbounds %S.gen.FnSig, ptr %t275, i32 0, i32 13 %t277 = load i64, ptr %a270 %t278 = load { ptr, i64, i64 }, ptr %t276 %t279 = extractvalue { ptr, i64, i64 } %t278, 1 %t280 = icmp uge i64 %t277, %t279 - br i1 %t280, label %range4901, label %inrange4902 -range4901: + br i1 %t280, label %range4905, label %inrange4906 +range4905: call void @finch_panic_index(ptr @.str.3082, i64 2215, i64 %t277, i64 %t279) unreachable -inrange4902: +inrange4906: %t281 = extractvalue { ptr, i64, i64 } %t278, 0 %t282 = getelementptr inbounds %S.ast.Type, ptr %t281, i64 %t277 %t283 = load %S.ast.Type, ptr %t282 @@ -50296,39 +50322,39 @@ inrange4902: %t319 = load ptr, ptr %a1 %t320 = load %S.ast.Type, ptr %a287 %t321 = call i1 @finch.gen.owning(ptr %t319, %S.ast.Type %t320) - br label %logic.from4903 -logic.from4903: - br i1 %t321, label %logic.rhs4904, label %logic.end4905 -logic.rhs4904: + br label %logic.from4907 +logic.from4907: + br i1 %t321, label %logic.rhs4908, label %logic.end4909 +logic.rhs4908: %t322 = load ptr, ptr %a1 %t323 = icmp eq ptr %t322, null - br i1 %t323, label %panic4906, label %ok4907 -panic4906: + br i1 %t323, label %panic4910, label %ok4911 +panic4910: call void @finch_panic(ptr @.str.3085, i64 2218, ptr @.str.3086) unreachable -ok4907: +ok4911: %t324 = getelementptr inbounds %S.gen.Gen, ptr %t322, i32 0, i32 13 %t325 = getelementptr inbounds %S.gen.FnSig, ptr %t324, i32 0, i32 15 %t326 = load i64, ptr %a270 %t327 = load { ptr, i64, i64 }, ptr %t325 %t328 = extractvalue { ptr, i64, i64 } %t327, 1 %t329 = icmp uge i64 %t326, %t328 - br i1 %t329, label %range4908, label %inrange4909 -range4908: + br i1 %t329, label %range4912, label %inrange4913 +range4912: call void @finch_panic_index(ptr @.str.3087, i64 2218, i64 %t326, i64 %t328) unreachable -inrange4909: +inrange4913: %t330 = extractvalue { ptr, i64, i64 } %t327, 0 %t331 = getelementptr inbounds i1, ptr %t330, i64 %t326 %t332 = load i1, ptr %t331 %t333 = xor i1 %t332, true - br label %logic.rend4910 -logic.rend4910: - br label %logic.end4905 -logic.end4905: - %t334 = phi i1 [ false, %logic.from4903 ], [ %t333, %logic.rend4910 ] - br i1 %t334, label %then4911, label %endif4913 -then4911: + br label %logic.rend4914 +logic.rend4914: + br label %logic.end4909 +logic.end4909: + %t334 = phi i1 [ false, %logic.from4907 ], [ %t333, %logic.rend4914 ] + br i1 %t334, label %then4915, label %endif4917 +then4915: %t335 = load ptr, ptr %a1 %t336 = load { ptr, i64, i64 }, ptr %a318 %t337 = load %S.ast.Type, ptr %a287 @@ -50337,78 +50363,78 @@ then4911: store { ptr, i64, i64 } %t338, ptr %a318 store { ptr, i64, i64 } %t339, ptr %a340 call void @finch_str_drop(ptr %a340) - br label %endif4913 -endif4913: + br label %endif4917 +endif4917: %t341 = load i64, ptr %a270 %t342 = add i64 %t341, 1 %t343 = load ptr, ptr %a1 %t344 = icmp eq ptr %t343, null - br i1 %t344, label %panic4914, label %ok4915 -panic4914: + br i1 %t344, label %panic4918, label %ok4919 +panic4918: call void @finch_panic(ptr @.str.3088, i64 2221, ptr @.str.3089) unreachable -ok4915: +ok4919: %t345 = getelementptr inbounds %S.gen.Gen, ptr %t343, i32 0, i32 39 store i64 %t342, ptr %t345 %t346 = load ptr, ptr %a1 %t347 = icmp eq ptr %t346, null - br i1 %t347, label %panic4916, label %ok4917 -panic4916: + br i1 %t347, label %panic4920, label %ok4921 +panic4920: call void @finch_panic(ptr @.str.3090, i64 2222, ptr @.str.3091) unreachable -ok4917: +ok4921: %t348 = getelementptr inbounds %S.gen.Gen, ptr %t346, i32 0, i32 13 %t349 = getelementptr inbounds %S.gen.FnSig, ptr %t348, i32 0, i32 2 %t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i32 0, i32 1 %t351 = load i64, ptr %t350 %t352 = icmp sgt i64 %t351, 0 - br i1 %t352, label %then4918, label %endif4920 -then4918: + br i1 %t352, label %then4922, label %endif4924 +then4922: %t353 = load i64, ptr %a270 %t354 = add i64 %t353, 2 %t355 = load ptr, ptr %a1 %t356 = icmp eq ptr %t355, null - br i1 %t356, label %panic4921, label %ok4922 -panic4921: + br i1 %t356, label %panic4925, label %ok4926 +panic4925: call void @finch_panic(ptr @.str.3092, i64 2223, ptr @.str.3093) unreachable -ok4922: +ok4926: %t357 = getelementptr inbounds %S.gen.Gen, ptr %t355, i32 0, i32 39 store i64 %t354, ptr %t357 - br label %endif4920 -endif4920: + br label %endif4924 +endif4924: %t358 = load ptr, ptr %a1 %t359 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 %t360 = load i64, ptr %a270 %t361 = load { ptr, i64, i64 }, ptr %t359 %t362 = extractvalue { ptr, i64, i64 } %t361, 1 %t363 = icmp uge i64 %t360, %t362 - br i1 %t363, label %range4923, label %inrange4924 -range4923: + br i1 %t363, label %range4927, label %inrange4928 +range4927: call void @finch_panic_index(ptr @.str.3094, i64 2225, i64 %t360, i64 %t362) unreachable -inrange4924: +inrange4928: %t364 = extractvalue { ptr, i64, i64 } %t361, 0 %t365 = getelementptr inbounds %S.ast.Node, ptr %t364, i64 %t360 %t366 = load %S.ast.Node, ptr %t365 %t367 = load ptr, ptr %a1 %t368 = icmp eq ptr %t367, null - br i1 %t368, label %panic4925, label %ok4926 -panic4925: + br i1 %t368, label %panic4929, label %ok4930 +panic4929: call void @finch_panic(ptr @.str.3095, i64 2225, ptr @.str.3096) unreachable -ok4926: +ok4930: %t369 = getelementptr inbounds %S.gen.Gen, ptr %t367, i32 0, i32 13 %t370 = getelementptr inbounds %S.gen.FnSig, ptr %t369, i32 0, i32 14 %t371 = load i64, ptr %a270 %t372 = load { ptr, i64, i64 }, ptr %t370 %t373 = extractvalue { ptr, i64, i64 } %t372, 1 %t374 = icmp uge i64 %t371, %t373 - br i1 %t374, label %range4927, label %inrange4928 -range4927: + br i1 %t374, label %range4931, label %inrange4932 +range4931: call void @finch_panic_index(ptr @.str.3097, i64 2225, i64 %t371, i64 %t373) unreachable -inrange4928: +inrange4932: %t375 = extractvalue { ptr, i64, i64 } %t372, 0 %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t371 %t377 = load { ptr, i64, i64 }, ptr %t376 @@ -50417,58 +50443,58 @@ inrange4928: %t380 = load ptr, ptr %a1 %t381 = load %S.ast.Type, ptr %a287 %t382 = call i1 @finch.gen.owning(ptr %t380, %S.ast.Type %t381) - br label %logic.from4929 -logic.from4929: - br i1 %t382, label %logic.rhs4930, label %logic.end4931 -logic.rhs4930: + br label %logic.from4933 +logic.from4933: + br i1 %t382, label %logic.rhs4934, label %logic.end4935 +logic.rhs4934: %t383 = load ptr, ptr %a1 %t384 = icmp eq ptr %t383, null - br i1 %t384, label %panic4932, label %ok4933 -panic4932: + br i1 %t384, label %panic4936, label %ok4937 +panic4936: call void @finch_panic(ptr @.str.3098, i64 2225, ptr @.str.3099) unreachable -ok4933: +ok4937: %t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 13 %t386 = getelementptr inbounds %S.gen.FnSig, ptr %t385, i32 0, i32 15 %t387 = load i64, ptr %a270 %t388 = load { ptr, i64, i64 }, ptr %t386 %t389 = extractvalue { ptr, i64, i64 } %t388, 1 %t390 = icmp uge i64 %t387, %t389 - br i1 %t390, label %range4934, label %inrange4935 -range4934: + br i1 %t390, label %range4938, label %inrange4939 +range4938: call void @finch_panic_index(ptr @.str.3100, i64 2225, i64 %t387, i64 %t389) unreachable -inrange4935: +inrange4939: %t391 = extractvalue { ptr, i64, i64 } %t388, 0 %t392 = getelementptr inbounds i1, ptr %t391, i64 %t387 %t393 = load i1, ptr %t392 %t394 = xor i1 %t393, true - br label %logic.rend4936 -logic.rend4936: - br label %logic.end4931 -logic.end4931: - %t395 = phi i1 [ false, %logic.from4929 ], [ %t394, %logic.rend4936 ] + br label %logic.rend4940 +logic.rend4940: + br label %logic.end4935 +logic.end4935: + %t395 = phi i1 [ false, %logic.from4933 ], [ %t394, %logic.rend4940 ] %t396 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t358, %S.ast.Node %t366, { ptr, i64, i64 } %t377, %S.ast.Type %t378, { ptr, i64, i64 } %t379, i1 false, i1 %t395) store { ptr, i64, i64 } %t396, ptr %a397 call void @finch_str_drop(ptr %a397) %t398 = load ptr, ptr %a1 %t399 = icmp eq ptr %t398, null - br i1 %t399, label %panic4937, label %ok4938 -panic4937: + br i1 %t399, label %panic4941, label %ok4942 +panic4941: call void @finch_panic(ptr @.str.3101, i64 2226, ptr @.str.3102) unreachable -ok4938: +ok4942: %t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 39 store i64 0, ptr %t400 call void @finch_str_drop(ptr %a318) call void @finch.drop.S_ast_Type(ptr %a287) - br label %for.step4897 -for.step4897: + br label %for.step4901 +for.step4901: %t401 = load i64, ptr %a270 %t402 = add i64 %t401, 1 store i64 %t402, ptr %a270 - br label %for.cond4895 -for.end4898: + br label %for.cond4899 +for.end4902: %t403 = load ptr, ptr %a1 %t404 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 %t405 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 @@ -50478,34 +50504,34 @@ for.end4898: %t409 = load { ptr, i64, i64 }, ptr %t404 %t410 = extractvalue { ptr, i64, i64 } %t409, 1 %t411 = icmp uge i64 %t408, %t410 - br i1 %t411, label %range4939, label %inrange4940 -range4939: + br i1 %t411, label %range4943, label %inrange4944 +range4943: call void @finch_panic_index(ptr @.str.3103, i64 2228, i64 %t408, i64 %t410) unreachable -inrange4940: +inrange4944: %t412 = extractvalue { ptr, i64, i64 } %t409, 0 %t413 = getelementptr inbounds %S.ast.Node, ptr %t412, i64 %t408 %t414 = load %S.ast.Node, ptr %t413 call void @finch.gen.block(ptr %t403, %S.ast.Node %t414, i1 false) %t415 = load ptr, ptr %a1 %t416 = icmp eq ptr %t415, null - br i1 %t416, label %panic4941, label %ok4942 -panic4941: + br i1 %t416, label %panic4945, label %ok4946 +panic4945: call void @finch_panic(ptr @.str.3104, i64 2229, ptr @.str.3105) unreachable -ok4942: +ok4946: %t417 = getelementptr inbounds %S.gen.Gen, ptr %t415, i32 0, i32 9 %t418 = load i1, ptr %t417 %t419 = xor i1 %t418, true - br i1 %t419, label %then4943, label %endif4945 -then4943: + br i1 %t419, label %then4947, label %endif4949 +then4947: %t420 = load ptr, ptr %a1 %t421 = icmp eq ptr %t420, null - br i1 %t421, label %panic4946, label %ok4947 -panic4946: + br i1 %t421, label %panic4950, label %ok4951 +panic4950: call void @finch_panic(ptr @.str.3106, i64 2230, ptr @.str.3107) unreachable -ok4947: +ok4951: %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 13 %t423 = getelementptr inbounds %S.gen.FnSig, ptr %t422, i32 0, i32 12 %t424 = getelementptr inbounds %S.ast.Type, ptr %t423, i32 0, i32 0 @@ -50514,8 +50540,8 @@ ok4947: store { ptr, i64, i64 } { ptr @.str.3108, i64 4, i64 0 }, ptr %a427 %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) %t429 = icmp eq i32 %t428, 0 - br i1 %t429, label %then4948, label %endif4950 -then4948: + br i1 %t429, label %then4952, label %endif4954 +then4952: %t430 = load ptr, ptr %a1 %t431 = load %S.ast.Node, ptr %a119 %t432 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 1 @@ -50532,11 +50558,11 @@ then4948: %t442 = load { ptr, i64, i64 }, ptr %a438 %t443 = load ptr, ptr %a1 %t444 = icmp eq ptr %t443, null - br i1 %t444, label %panic4951, label %ok4952 -panic4951: + br i1 %t444, label %panic4955, label %ok4956 +panic4955: call void @finch_panic(ptr @.str.3111, i64 2231, ptr @.str.3112) unreachable -ok4952: +ok4956: %t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 13 %t446 = getelementptr inbounds %S.gen.FnSig, ptr %t445, i32 0, i32 12 %t447 = load %S.ast.Type, ptr %t446 @@ -50552,31 +50578,31 @@ ok4952: call void @finch.gen.fail(ptr %t430, %S.ast.Node %t431, { ptr, i64, i64 } %t454) store { ptr, i64, i64 } %t454, ptr %a455 call void @finch_str_drop(ptr %a455) - br label %endif4950 -endif4950: + br label %endif4954 +endif4954: %t456 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t456, i64 0) %t457 = load ptr, ptr %a1 %t458 = icmp eq ptr %t457, null - br i1 %t458, label %panic4953, label %ok4954 -panic4953: + br i1 %t458, label %panic4957, label %ok4958 +panic4957: call void @finch_panic(ptr @.str.3113, i64 2234, ptr @.str.3114) unreachable -ok4954: +ok4958: %t459 = getelementptr inbounds %S.gen.Gen, ptr %t457, i32 0, i32 13 %t460 = getelementptr inbounds %S.gen.FnSig, ptr %t459, i32 0, i32 9 %t461 = load i1, ptr %t460 - br i1 %t461, label %then4955, label %else4956 -then4955: + br i1 %t461, label %then4959, label %else4960 +then4959: %t462 = load ptr, ptr %a1 %t463 = load ptr, ptr %a1 %t464 = load ptr, ptr %a1 %t465 = icmp eq ptr %t464, null - br i1 %t465, label %panic4958, label %ok4959 -panic4958: + br i1 %t465, label %panic4962, label %ok4963 +panic4962: call void @finch_panic(ptr @.str.3116, i64 2235, ptr @.str.3117) unreachable -ok4959: +ok4963: %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 13 %t467 = load %S.gen.FnSig, ptr %t466 %t468 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t463, %S.gen.FnSig %t467) @@ -50595,19 +50621,19 @@ ok4959: call void @finch.gen.emit(ptr %t462, { ptr, i64, i64 } %t478) store { ptr, i64, i64 } %t478, ptr %a479 call void @finch_str_drop(ptr %a479) - br label %endif4957 -else4956: + br label %endif4961 +else4960: %t480 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t480, { ptr, i64, i64 } { ptr @.str.3119, i64 8, i64 0 }) - br label %endif4957 -endif4957: - br label %endif4945 -endif4945: + br label %endif4961 +endif4961: + br label %endif4949 +endif4949: store { ptr, i64, i64 } { ptr @.str.3120, i64 0, i64 0 }, ptr %a481 %t482 = load i64, ptr %a151 %t483 = icmp sge i64 %t482, 0 - br i1 %t483, label %then4960, label %endif4962 -then4960: + br i1 %t483, label %then4964, label %endif4966 +then4964: %t484 = load i64, ptr %a151 call void @finch_str_from_int(ptr %a485, i64 %t484) %t486 = load { ptr, i64, i64 }, ptr %a485 @@ -50621,34 +50647,34 @@ then4960: store { ptr, i64, i64 } %t491, ptr %a481 store { ptr, i64, i64 } %t492, ptr %a493 call void @finch_str_drop(ptr %a493) - br label %endif4962 -endif4962: + br label %endif4966 +endif4966: %t494 = load ptr, ptr %a1 %t495 = icmp eq ptr %t494, null - br i1 %t495, label %panic4963, label %ok4964 -panic4963: + br i1 %t495, label %panic4967, label %ok4968 +panic4967: call void @finch_panic(ptr @.str.3122, i64 2244, ptr @.str.3123) unreachable -ok4964: +ok4968: %t496 = getelementptr inbounds %S.gen.Gen, ptr %t494, i32 0, i32 36 store i64 -1, ptr %t496 %t497 = load ptr, ptr %a1 %t498 = icmp eq ptr %t497, null - br i1 %t498, label %panic4965, label %ok4966 -panic4965: + br i1 %t498, label %panic4969, label %ok4970 +panic4969: call void @finch_panic(ptr @.str.3124, i64 2245, ptr @.str.3125) unreachable -ok4966: +ok4970: %t499 = getelementptr inbounds %S.gen.Gen, ptr %t497, i32 0, i32 3 %t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t499, i32 0, i32 1 %t501 = load ptr, ptr %a1 %t502 = load ptr, ptr %a1 %t503 = icmp eq ptr %t502, null - br i1 %t503, label %panic4967, label %ok4968 -panic4967: + br i1 %t503, label %panic4971, label %ok4972 +panic4971: call void @finch_panic(ptr @.str.3127, i64 2245, ptr @.str.3128) unreachable -ok4968: +ok4972: %t504 = getelementptr inbounds %S.gen.Gen, ptr %t502, i32 0, i32 13 %t505 = load %S.gen.FnSig, ptr %t504 %t506 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t501, %S.gen.FnSig %t505) @@ -50666,11 +50692,11 @@ ok4968: %t516 = load { ptr, i64, i64 }, ptr %a512 %t517 = load ptr, ptr %a1 %t518 = icmp eq ptr %t517, null - br i1 %t518, label %panic4969, label %ok4970 -panic4969: + br i1 %t518, label %panic4973, label %ok4974 +panic4973: call void @finch_panic(ptr @.str.3130, i64 2245, ptr @.str.3131) unreachable -ok4970: +ok4974: %t519 = getelementptr inbounds %S.gen.Gen, ptr %t517, i32 0, i32 13 %t520 = getelementptr inbounds %S.gen.FnSig, ptr %t519, i32 0, i32 11 %t521 = load { ptr, i64, i64 }, ptr %t520 @@ -50719,11 +50745,11 @@ ok4970: %t557 = load { ptr, i64, i64 }, ptr %a553 %t558 = load ptr, ptr %a1 %t559 = icmp eq ptr %t558, null - br i1 %t559, label %panic4971, label %ok4972 -panic4971: + br i1 %t559, label %panic4975, label %ok4976 +panic4975: call void @finch_panic(ptr @.str.3136, i64 2246, ptr @.str.3137) unreachable -ok4972: +ok4976: %t560 = getelementptr inbounds %S.gen.Gen, ptr %t558, i32 0, i32 5 %t561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t560, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3138, i64 1, i64 0 }, ptr %a562 @@ -50745,11 +50771,11 @@ ok4972: %t575 = load { ptr, i64, i64 }, ptr %a571 %t576 = load ptr, ptr %a1 %t577 = icmp eq ptr %t576, null - br i1 %t577, label %panic4973, label %ok4974 -panic4973: + br i1 %t577, label %panic4977, label %ok4978 +panic4977: call void @finch_panic(ptr @.str.3140, i64 2246, ptr @.str.3141) unreachable -ok4974: +ok4978: %t578 = getelementptr inbounds %S.gen.Gen, ptr %t576, i32 0, i32 4 %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t578, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3142, i64 1, i64 0 }, ptr %a580 @@ -50795,59 +50821,59 @@ entry: store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load i1, ptr %a3 - br i1 %t4, label %then4975, label %endif4977 -then4975: + br i1 %t4, label %then4979, label %endif4981 +then4979: %t5 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t5) - br label %endif4977 -endif4977: + br label %endif4981 +endif4981: %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 store i64 0, ptr %a7 - br label %each.cond4978 -each.cond4978: + br label %each.cond4982 +each.cond4982: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load i64, ptr %a7 %t11 = icmp slt i64 %t10, %t9 - br i1 %t11, label %each.body4979, label %each.end4981 -each.body4979: + br i1 %t11, label %each.body4983, label %each.end4985 +each.body4983: %t12 = load ptr, ptr %t6 %t13 = getelementptr inbounds %S.ast.Node, ptr %t12, i64 %t10 %t14 = load %S.ast.Node, ptr %t13 store %S.ast.Node %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic4982, label %ok4983 -panic4982: + br i1 %t17, label %panic4986, label %ok4987 +panic4986: call void @finch_panic(ptr @.str.3144, i64 2256, ptr @.str.3145) unreachable -ok4983: +ok4987: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 %t19 = load i1, ptr %t18 - br i1 %t19, label %then4984, label %endif4986 -then4984: + br i1 %t19, label %then4988, label %endif4990 +then4988: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a15 call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } { ptr @.str.3146, i64 66, i64 0 }) - br label %endif4986 -endif4986: + br label %endif4990 +endif4990: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Node, ptr %a15 call void @finch.gen.stmt(ptr %t22, %S.ast.Node %t23) - br label %each.step4980 -each.step4980: + br label %each.step4984 +each.step4984: %t24 = load i64, ptr %a7 %t25 = add i64 %t24, 1 store i64 %t25, ptr %a7 - br label %each.cond4978 -each.end4981: + br label %each.cond4982 +each.end4985: %t26 = load i1, ptr %a3 - br i1 %t26, label %then4987, label %endif4989 -then4987: + br i1 %t26, label %then4991, label %endif4993 +then4991: %t27 = load ptr, ptr %a1 call void @finch.gen.endScope(ptr %t27) - br label %endif4989 -endif4989: + br label %endif4993 +endif4993: ret void } @@ -50939,22 +50965,22 @@ entry: %t4 = load i64, ptr %t3 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic4990, label %ok4991 -panic4990: + br i1 %t6, label %panic4994, label %ok4995 +panic4994: call void @finch_panic(ptr @.str.3147, i64 2267, ptr @.str.3148) unreachable -ok4991: +ok4995: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 37 store i64 %t4, ptr %t7 %t8 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic4992, label %ok4993 -panic4992: + br i1 %t11, label %panic4996, label %ok4997 +panic4996: call void @finch_panic(ptr @.str.3149, i64 2268, ptr @.str.3150) unreachable -ok4993: +ok4997: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 38 store i64 %t9, ptr %t12 %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 @@ -50968,53 +50994,53 @@ ok4993: store { ptr, i64, i64 } { ptr @.str.3151, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br i1 %t23, label %then4994, label %else4995 -then4994: + br i1 %t23, label %then4998, label %else4999 +then4998: %t24 = load ptr, ptr %a1 %t25 = load %S.ast.Node, ptr %a2 call void @finch.gen.block(ptr %t24, %S.ast.Node %t25, i1 true) - br label %endif4996 -else4995: + br label %endif5000 +else4999: %t26 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.3152, i64 4, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br i1 %t30, label %then4997, label %else4998 -then4997: + br i1 %t30, label %then5001, label %else5002 +then5001: %t31 = load ptr, ptr %a1 %t32 = load %S.ast.Node, ptr %a2 call void @finch.gen.declStmt(ptr %t31, %S.ast.Node %t32) - br label %endif4999 -else4998: + br label %endif5003 +else5002: %t33 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3153, i64 6, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %then5000, label %else5001 -then5000: + br i1 %t37, label %then5004, label %else5005 +then5004: %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Node, ptr %a2 call void @finch.gen.assignStmt(ptr %t38, %S.ast.Node %t39) - br label %endif5002 -else5001: + br label %endif5006 +else5005: %t40 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.3154, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %then5003, label %else5004 -then5003: + br i1 %t44, label %then5007, label %else5008 +then5007: %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 0, %t47 - br i1 %t48, label %range5006, label %inrange5007 -range5006: + br i1 %t48, label %range5010, label %inrange5011 +range5010: call void @finch_panic_index(ptr @.str.3155, i64 2277, i64 0, i64 %t47) unreachable -inrange5007: +inrange5011: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 0 %t51 = getelementptr inbounds %S.ast.Node, ptr %t50, i32 0, i32 0 @@ -51023,19 +51049,19 @@ inrange5007: store { ptr, i64, i64 } { ptr @.str.3156, i64 2, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %then5008, label %else5009 -then5008: + br i1 %t56, label %then5012, label %else5013 +then5012: %t57 = load ptr, ptr %a1 %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 0, %t61 - br i1 %t62, label %range5011, label %inrange5012 -range5011: + br i1 %t62, label %range5015, label %inrange5016 +range5015: call void @finch_panic_index(ptr @.str.3157, i64 2278, i64 0, i64 %t61) unreachable -inrange5012: +inrange5016: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 0 %t65 = load %S.ast.Node, ptr %t64 @@ -51043,19 +51069,19 @@ inrange5012: call void @finch.gen.release(ptr %t57, %S.gen.Val %t66) store %S.gen.Val %t66, ptr %a67 call void @finch.drop.S_gen_Val(ptr %a67) - br label %endif5010 -else5009: + br label %endif5014 +else5013: %t68 = load ptr, ptr %a1 %t69 = load ptr, ptr %a1 %t70 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t71 = load { ptr, i64, i64 }, ptr %t70 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 0, %t72 - br i1 %t73, label %range5013, label %inrange5014 -range5013: + br i1 %t73, label %range5017, label %inrange5018 +range5017: call void @finch_panic_index(ptr @.str.3158, i64 2280, i64 0, i64 %t72) unreachable -inrange5014: +inrange5018: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 0 %t76 = load %S.ast.Node, ptr %t75 @@ -51063,115 +51089,115 @@ inrange5014: call void @finch.gen.release(ptr %t68, %S.gen.Val %t77) store %S.gen.Val %t77, ptr %a78 call void @finch.drop.S_gen_Val(ptr %a78) - br label %endif5010 -endif5010: - br label %endif5005 -else5004: + br label %endif5014 +endif5014: + br label %endif5009 +else5008: %t79 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t79, ptr %a80 store { ptr, i64, i64 } { ptr @.str.3159, i64 5, i64 0 }, ptr %a81 %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) %t83 = icmp ne i32 %t82, 0 - br i1 %t83, label %then5015, label %else5016 -then5015: + br i1 %t83, label %then5019, label %else5020 +then5019: %t84 = load ptr, ptr %a1 %t85 = load %S.ast.Node, ptr %a2 %t86 = call %S.gen.Val @finch.gen.matchGen(ptr %t84, %S.ast.Node %t85, i1 false) store %S.gen.Val %t86, ptr %a87 call void @finch.drop.S_gen_Val(ptr %a87) - br label %endif5017 -else5016: + br label %endif5021 +else5020: %t88 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.3160, i64 2, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 - br i1 %t92, label %then5018, label %else5019 -then5018: + br i1 %t92, label %then5022, label %else5023 +then5022: %t93 = load ptr, ptr %a1 %t94 = load %S.ast.Node, ptr %a2 call void @finch.gen.ifStmt(ptr %t93, %S.ast.Node %t94) - br label %endif5020 -else5019: + br label %endif5024 +else5023: %t95 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.3161, i64 5, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 - br i1 %t99, label %then5021, label %else5022 -then5021: + br i1 %t99, label %then5025, label %else5026 +then5025: %t100 = load ptr, ptr %a1 %t101 = load %S.ast.Node, ptr %a2 call void @finch.gen.whileStmt(ptr %t100, %S.ast.Node %t101) - br label %endif5023 -else5022: + br label %endif5027 +else5026: %t102 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.3162, i64 3, i64 0 }, ptr %a104 %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) %t106 = icmp ne i32 %t105, 0 - br i1 %t106, label %then5024, label %else5025 -then5024: + br i1 %t106, label %then5028, label %else5029 +then5028: %t107 = load ptr, ptr %a1 %t108 = load %S.ast.Node, ptr %a2 call void @finch.gen.forStmt(ptr %t107, %S.ast.Node %t108) - br label %endif5026 -else5025: + br label %endif5030 +else5029: %t109 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.3163, i64 4, i64 0 }, ptr %a111 %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) %t113 = icmp ne i32 %t112, 0 - br i1 %t113, label %then5027, label %else5028 -then5027: + br i1 %t113, label %then5031, label %else5032 +then5031: %t114 = load ptr, ptr %a1 %t115 = load %S.ast.Node, ptr %a2 call void @finch.gen.eachStmt(ptr %t114, %S.ast.Node %t115) - br label %endif5029 -else5028: + br label %endif5033 +else5032: %t116 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t116, ptr %a117 store { ptr, i64, i64 } { ptr @.str.3164, i64 6, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 - br i1 %t120, label %then5030, label %else5031 -then5030: + br i1 %t120, label %then5034, label %else5035 +then5034: %t121 = load ptr, ptr %a1 %t122 = load %S.ast.Node, ptr %a2 call void @finch.gen.returnStmt(ptr %t121, %S.ast.Node %t122) - br label %endif5032 -else5031: + br label %endif5036 +else5035: %t123 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.3165, i64 5, i64 0 }, ptr %a125 %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) %t127 = icmp ne i32 %t126, 0 - br i1 %t127, label %then5033, label %else5034 -then5033: + br i1 %t127, label %then5037, label %else5038 +then5037: %t128 = load ptr, ptr %a1 %t129 = icmp eq ptr %t128, null - br i1 %t129, label %panic5036, label %ok5037 -panic5036: + br i1 %t129, label %panic5040, label %ok5041 +panic5040: call void @finch_panic(ptr @.str.3166, i64 2295, ptr @.str.3167) unreachable -ok5037: +ok5041: %t130 = getelementptr inbounds %S.gen.Gen, ptr %t128, i32 0, i32 46 %t131 = load i64, ptr %t130 %t132 = icmp sgt i64 %t131, 0 - br i1 %t132, label %then5038, label %endif5040 -then5038: + br i1 %t132, label %then5042, label %endif5044 +then5042: %t133 = load ptr, ptr %a1 %t134 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } { ptr @.str.3168, i64 33, i64 0 }) - br label %endif5040 -endif5040: + br label %endif5044 +endif5044: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null - br i1 %t136, label %panic5041, label %ok5042 -panic5041: + br i1 %t136, label %panic5045, label %ok5046 +panic5045: call void @finch_panic(ptr @.str.3169, i64 2298, ptr @.str.3170) unreachable -ok5042: +ok5046: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 10 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t139 = load i64, ptr %t138 @@ -51179,21 +51205,21 @@ ok5042: store i64 %t140, ptr %a141 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic5043, label %ok5044 -panic5043: + br i1 %t143, label %panic5047, label %ok5048 +panic5047: call void @finch_panic(ptr @.str.3171, i64 2299, ptr @.str.3172) unreachable -ok5044: +ok5048: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 10 %t145 = load i64, ptr %a141 %t146 = load { ptr, i64, i64 }, ptr %t144 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 %t145, %t147 - br i1 %t148, label %range5045, label %inrange5046 -range5045: + br i1 %t148, label %range5049, label %inrange5050 +range5049: call void @finch_panic_index(ptr @.str.3173, i64 2299, i64 %t145, i64 %t147) unreachable -inrange5046: +inrange5050: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds %S.gen.Scope, ptr %t149, i64 %t145 %t151 = getelementptr inbounds %S.gen.Scope, ptr %t150, i32 0, i32 3 @@ -51201,21 +51227,21 @@ inrange5046: %t153 = insertvalue %S.gen.Cleanup zeroinitializer, i1 true, 0 %t154 = load ptr, ptr %a1 %t155 = icmp eq ptr %t154, null - br i1 %t155, label %panic5047, label %ok5048 -panic5047: + br i1 %t155, label %panic5051, label %ok5052 +panic5051: call void @finch_panic(ptr @.str.3174, i64 2299, ptr @.str.3175) unreachable -ok5048: +ok5052: %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 10 %t157 = load i64, ptr %a141 %t158 = load { ptr, i64, i64 }, ptr %t156 %t159 = extractvalue { ptr, i64, i64 } %t158, 1 %t160 = icmp uge i64 %t157, %t159 - br i1 %t160, label %range5049, label %inrange5050 -range5049: + br i1 %t160, label %range5053, label %inrange5054 +range5053: call void @finch_panic_index(ptr @.str.3176, i64 2299, i64 %t157, i64 %t159) unreachable -inrange5050: +inrange5054: %t161 = extractvalue { ptr, i64, i64 } %t158, 0 %t162 = getelementptr inbounds %S.gen.Scope, ptr %t161, i64 %t157 %t163 = getelementptr inbounds %S.gen.Scope, ptr %t162, i32 0, i32 1 @@ -51231,21 +51257,21 @@ inrange5050: store i64 %t168, ptr %t152 %t171 = load ptr, ptr %a1 %t172 = icmp eq ptr %t171, null - br i1 %t172, label %panic5051, label %ok5052 -panic5051: + br i1 %t172, label %panic5055, label %ok5056 +panic5055: call void @finch_panic(ptr @.str.3177, i64 2300, ptr @.str.3178) unreachable -ok5052: +ok5056: %t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 10 %t174 = load i64, ptr %a141 %t175 = load { ptr, i64, i64 }, ptr %t173 %t176 = extractvalue { ptr, i64, i64 } %t175, 1 %t177 = icmp uge i64 %t174, %t176 - br i1 %t177, label %range5053, label %inrange5054 -range5053: + br i1 %t177, label %range5057, label %inrange5058 +range5057: call void @finch_panic_index(ptr @.str.3179, i64 2300, i64 %t174, i64 %t176) unreachable -inrange5054: +inrange5058: %t178 = extractvalue { ptr, i64, i64 } %t175, 0 %t179 = getelementptr inbounds %S.gen.Scope, ptr %t178, i64 %t174 %t180 = getelementptr inbounds %S.gen.Scope, ptr %t179, i32 0, i32 1 @@ -51254,11 +51280,11 @@ inrange5054: %t183 = load { ptr, i64, i64 }, ptr %t182 %t184 = extractvalue { ptr, i64, i64 } %t183, 1 %t185 = icmp uge i64 0, %t184 - br i1 %t185, label %range5055, label %inrange5056 -range5055: + br i1 %t185, label %range5059, label %inrange5060 +range5059: call void @finch_panic_index(ptr @.str.3180, i64 2300, i64 0, i64 %t184) unreachable -inrange5056: +inrange5060: %t186 = extractvalue { ptr, i64, i64 } %t183, 0 %t187 = getelementptr inbounds %S.ast.Node, ptr %t186, i64 0 %t188 = load %S.ast.Node, ptr %t187 @@ -51274,32 +51300,32 @@ inrange5056: store i64 %t193, ptr %t181 %t196 = load ptr, ptr %a1 %t197 = icmp eq ptr %t196, null - br i1 %t197, label %panic5057, label %ok5058 -panic5057: + br i1 %t197, label %panic5061, label %ok5062 +panic5061: call void @finch_panic(ptr @.str.3181, i64 2301, ptr @.str.3182) unreachable -ok5058: +ok5062: %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 10 %t199 = load i64, ptr %a141 %t200 = load { ptr, i64, i64 }, ptr %t198 %t201 = extractvalue { ptr, i64, i64 } %t200, 1 %t202 = icmp uge i64 %t199, %t201 - br i1 %t202, label %range5059, label %inrange5060 -range5059: + br i1 %t202, label %range5063, label %inrange5064 +range5063: call void @finch_panic_index(ptr @.str.3183, i64 2301, i64 %t199, i64 %t201) unreachable -inrange5060: +inrange5064: %t203 = extractvalue { ptr, i64, i64 } %t200, 0 %t204 = getelementptr inbounds %S.gen.Scope, ptr %t203, i64 %t199 %t205 = getelementptr inbounds %S.gen.Scope, ptr %t204, i32 0, i32 2 %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i32 0, i32 1 %t207 = load ptr, ptr %a1 %t208 = icmp eq ptr %t207, null - br i1 %t208, label %panic5061, label %ok5062 -panic5061: + br i1 %t208, label %panic5065, label %ok5066 +panic5065: call void @finch_panic(ptr @.str.3184, i64 2301, ptr @.str.3185) unreachable -ok5062: +ok5066: %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 25 %t210 = load i64, ptr %t209 %t211 = load i64, ptr %t206 @@ -51309,41 +51335,41 @@ ok5062: %t214 = getelementptr inbounds i64, ptr %t213, i64 %t211 store i64 %t210, ptr %t214 store i64 %t212, ptr %t206 - br label %endif5035 -else5034: + br label %endif5039 +else5038: %t215 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t215, ptr %a216 store { ptr, i64, i64 } { ptr @.str.3186, i64 5, i64 0 }, ptr %a217 %t218 = call i32 @finch_str_eq(ptr %a216, ptr %a217) %t219 = icmp ne i32 %t218, 0 - br label %logic.from5063 -logic.from5063: - br i1 %t219, label %logic.end5065, label %logic.rhs5064 -logic.rhs5064: + br label %logic.from5067 +logic.from5067: + br i1 %t219, label %logic.end5069, label %logic.rhs5068 +logic.rhs5068: %t220 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t220, ptr %a221 store { ptr, i64, i64 } { ptr @.str.3187, i64 8, i64 0 }, ptr %a222 %t223 = call i32 @finch_str_eq(ptr %a221, ptr %a222) %t224 = icmp ne i32 %t223, 0 - br label %logic.rend5066 -logic.rend5066: - br label %logic.end5065 -logic.end5065: - %t225 = phi i1 [ true, %logic.from5063 ], [ %t224, %logic.rend5066 ] - br i1 %t225, label %then5067, label %else5068 -then5067: + br label %logic.rend5070 +logic.rend5070: + br label %logic.end5069 +logic.end5069: + %t225 = phi i1 [ true, %logic.from5067 ], [ %t224, %logic.rend5070 ] + br i1 %t225, label %then5071, label %else5072 +then5071: %t226 = load ptr, ptr %a1 %t227 = icmp eq ptr %t226, null - br i1 %t227, label %panic5070, label %ok5071 -panic5070: + br i1 %t227, label %panic5074, label %ok5075 +panic5074: call void @finch_panic(ptr @.str.3188, i64 2303, ptr @.str.3189) unreachable -ok5071: +ok5075: %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 46 %t229 = load i64, ptr %t228 %t230 = icmp sgt i64 %t229, 0 - br i1 %t230, label %then5072, label %endif5074 -then5072: + br i1 %t230, label %then5076, label %endif5078 +then5076: %t231 = load ptr, ptr %a1 %t232 = load %S.ast.Node, ptr %a2 %t233 = load { ptr, i64, i64 }, ptr %a18 @@ -51354,21 +51380,21 @@ then5072: call void @finch.gen.fail(ptr %t231, %S.ast.Node %t232, { ptr, i64, i64 } %t237) store { ptr, i64, i64 } %t237, ptr %a238 call void @finch_str_drop(ptr %a238) - br label %endif5074 -endif5074: + br label %endif5078 +endif5078: %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null - br i1 %t240, label %panic5075, label %ok5076 -panic5075: + br i1 %t240, label %panic5079, label %ok5080 +panic5079: call void @finch_panic(ptr @.str.3191, i64 2306, ptr @.str.3192) unreachable -ok5076: +ok5080: %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 12 %t242 = getelementptr inbounds { ptr, i64, i64 }, ptr %t241, i32 0, i32 1 %t243 = load i64, ptr %t242 %t244 = icmp eq i64 %t243, 0 - br i1 %t244, label %then5077, label %endif5079 -then5077: + br i1 %t244, label %then5081, label %endif5083 +then5081: %t245 = load ptr, ptr %a1 %t246 = load %S.ast.Node, ptr %a2 %t247 = load { ptr, i64, i64 }, ptr %a18 @@ -51379,23 +51405,23 @@ then5077: call void @finch.gen.fail(ptr %t245, %S.ast.Node %t246, { ptr, i64, i64 } %t251) store { ptr, i64, i64 } %t251, ptr %a252 call void @finch_str_drop(ptr %a252) - br label %endif5079 -endif5079: + br label %endif5083 +endif5083: %t253 = load ptr, ptr %a1 %t254 = icmp eq ptr %t253, null - br i1 %t254, label %panic5080, label %ok5081 -panic5080: + br i1 %t254, label %panic5084, label %ok5085 +panic5084: call void @finch_panic(ptr @.str.3194, i64 2309, ptr @.str.3195) unreachable -ok5081: +ok5085: %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 12 %t256 = load ptr, ptr %a1 %t257 = icmp eq ptr %t256, null - br i1 %t257, label %panic5082, label %ok5083 -panic5082: + br i1 %t257, label %panic5086, label %ok5087 +panic5086: call void @finch_panic(ptr @.str.3196, i64 2309, ptr @.str.3197) unreachable -ok5083: +ok5087: %t258 = getelementptr inbounds %S.gen.Gen, ptr %t256, i32 0, i32 12 %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 %t260 = load i64, ptr %t259 @@ -51403,11 +51429,11 @@ ok5083: %t262 = load { ptr, i64, i64 }, ptr %t255 %t263 = extractvalue { ptr, i64, i64 } %t262, 1 %t264 = icmp uge i64 %t261, %t263 - br i1 %t264, label %range5084, label %inrange5085 -range5084: + br i1 %t264, label %range5088, label %inrange5089 +range5088: call void @finch_panic_index(ptr @.str.3198, i64 2309, i64 %t261, i64 %t263) unreachable -inrange5085: +inrange5089: %t265 = extractvalue { ptr, i64, i64 } %t262, 0 %t266 = getelementptr inbounds %S.gen.Loop, ptr %t265, i64 %t261 %t267 = load %S.gen.Loop, ptr %t266 @@ -51428,23 +51454,23 @@ inrange5085: store { ptr, i64, i64 } { ptr @.str.3199, i64 5, i64 0 }, ptr %a280 %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) %t282 = icmp ne i32 %t281, 0 - br i1 %t282, label %then5086, label %else5087 -then5086: + br i1 %t282, label %then5090, label %else5091 +then5090: %t283 = load ptr, ptr %a1 %t284 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 1 %t285 = load { ptr, i64, i64 }, ptr %t284 call void @finch.gen.br(ptr %t283, { ptr, i64, i64 } %t285) - br label %endif5088 -else5087: + br label %endif5092 +else5091: %t286 = load ptr, ptr %a1 %t287 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 0 %t288 = load { ptr, i64, i64 }, ptr %t287 call void @finch.gen.br(ptr %t286, { ptr, i64, i64 } %t288) - br label %endif5088 -endif5088: + br label %endif5092 +endif5092: call void @finch.drop.S_gen_Loop(ptr %a271) - br label %endif5069 -else5068: + br label %endif5073 +else5072: %t289 = load ptr, ptr %a1 %t290 = load %S.ast.Node, ptr %a2 %t291 = load { ptr, i64, i64 }, ptr %a18 @@ -51455,30 +51481,30 @@ else5068: call void @finch.gen.fail(ptr %t289, %S.ast.Node %t290, { ptr, i64, i64 } %t295) store { ptr, i64, i64 } %t295, ptr %a296 call void @finch_str_drop(ptr %a296) - br label %endif5069 -endif5069: - br label %endif5035 -endif5035: - br label %endif5032 -endif5032: - br label %endif5029 -endif5029: - br label %endif5026 -endif5026: - br label %endif5023 -endif5023: - br label %endif5020 -endif5020: - br label %endif5017 -endif5017: - br label %endif5005 -endif5005: - br label %endif5002 -endif5002: - br label %endif4999 -endif4999: - br label %endif4996 -endif4996: + br label %endif5073 +endif5073: + br label %endif5039 +endif5039: + br label %endif5036 +endif5036: + br label %endif5033 +endif5033: + br label %endif5030 +endif5030: + br label %endif5027 +endif5027: + br label %endif5024 +endif5024: + br label %endif5021 +endif5021: + br label %endif5009 +endif5009: + br label %endif5006 +endif5006: + br label %endif5003 +endif5003: + br label %endif5000 +endif5000: call void @finch_str_drop(ptr %a18) ret void } @@ -51528,18 +51554,18 @@ entry: %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 %t4 = load i1, ptr %t3 %t5 = xor i1 %t4, true - br i1 %t5, label %then5089, label %endif5091 -then5089: + br i1 %t5, label %then5093, label %endif5095 +then5093: %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t8 = load { ptr, i64, i64 }, ptr %t7 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 0, %t9 - br i1 %t10, label %range5092, label %inrange5093 -range5092: + br i1 %t10, label %range5096, label %inrange5097 +range5096: call void @finch_panic_index(ptr @.str.3201, i64 2324, i64 0, i64 %t9) unreachable -inrange5093: +inrange5097: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.ast.Node, ptr %t11, i64 0 %t13 = load %S.ast.Node, ptr %t12 @@ -51552,24 +51578,24 @@ inrange5093: store { ptr, i64, i64 } { ptr @.str.3202, i64 4, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br i1 %t22, label %then5094, label %endif5096 -then5094: + br i1 %t22, label %then5098, label %endif5100 +then5098: %t23 = load ptr, ptr %a1 %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 0, %t26 - br i1 %t27, label %range5097, label %inrange5098 -range5097: + br i1 %t27, label %range5101, label %inrange5102 +range5101: call void @finch_panic_index(ptr @.str.3203, i64 2326, i64 0, i64 %t26) unreachable -inrange5098: +inrange5102: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 %t30 = load %S.ast.Node, ptr %t29 call void @finch.gen.fail(ptr %t23, %S.ast.Node %t30, { ptr, i64, i64 } { ptr @.str.3204, i64 46, i64 0 }) - br label %endif5096 -endif5096: + br label %endif5100 +endif5100: %t31 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 @@ -51577,18 +51603,18 @@ endif5096: store { ptr, i64, i64 } { ptr @.str.3205, i64 4, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %then5099, label %endif5101 -then5099: + br i1 %t37, label %then5103, label %endif5105 +then5103: %t38 = load ptr, ptr %a1 %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 - br i1 %t42, label %range5102, label %inrange5103 -range5102: + br i1 %t42, label %range5106, label %inrange5107 +range5106: call void @finch_panic_index(ptr @.str.3206, i64 2329, i64 0, i64 %t41) unreachable -inrange5103: +inrange5107: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 0 %t45 = load %S.ast.Node, ptr %t44 @@ -51607,8 +51633,8 @@ inrange5103: call void @finch.gen.fail(ptr %t38, %S.ast.Node %t45, { ptr, i64, i64 } %t56) store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_drop(ptr %a57) - br label %endif5101 -endif5101: + br label %endif5105 +endif5105: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Node, ptr %a2 %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -51625,7 +51651,7 @@ endif5101: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_gen_Val(ptr %a15) ret void -endif5091: +endif5095: %t70 = load ptr, ptr %a1 %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t72 = load %S.ast.Type, ptr %t71 @@ -51636,28 +51662,28 @@ endif5091: %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 %t78 = load i64, ptr %t77 %t79 = icmp eq i64 %t78, 0 - br i1 %t79, label %then5104, label %endif5106 -then5104: + br i1 %t79, label %then5108, label %endif5110 +then5108: %t80 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 0 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.3209, i64 6, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br label %logic.from5107 -logic.from5107: - br i1 %t85, label %logic.rhs5108, label %logic.end5109 -logic.rhs5108: + br label %logic.from5111 +logic.from5111: + br i1 %t85, label %logic.rhs5112, label %logic.end5113 +logic.rhs5112: %t86 = load ptr, ptr %a1 %t87 = load %S.ast.Type, ptr %a75 %t88 = call i1 @finch.gen.hasDefaults(ptr %t86, %S.ast.Type %t87) - br label %logic.rend5110 -logic.rend5110: - br label %logic.end5109 -logic.end5109: - %t89 = phi i1 [ false, %logic.from5107 ], [ %t88, %logic.rend5110 ] - br i1 %t89, label %then5111, label %endif5113 -then5111: + br label %logic.rend5114 +logic.rend5114: + br label %logic.end5113 +logic.end5113: + %t89 = phi i1 [ false, %logic.from5111 ], [ %t88, %logic.rend5114 ] + br i1 %t89, label %then5115, label %endif5117 +then5115: store { ptr, i64, i64 } zeroinitializer, ptr %a90 store { ptr, i64, i64 } zeroinitializer, ptr %a91 %t92 = load ptr, ptr %a1 @@ -51687,7 +51713,7 @@ then5111: call void @finch.drop.arr_S_ast_Node(ptr %a90) call void @finch.drop.S_ast_Type(ptr %a75) ret void -endif5113: +endif5117: %t113 = load ptr, ptr %a1 %t114 = load %S.ast.Node, ptr %a2 %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -51702,18 +51728,18 @@ endif5113: call void @finch_str_drop(ptr %a122) call void @finch.drop.S_ast_Type(ptr %a75) ret void -endif5106: +endif5110: %t123 = load ptr, ptr %a1 %t124 = load ptr, ptr %a1 %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t126 = load { ptr, i64, i64 }, ptr %t125 %t127 = extractvalue { ptr, i64, i64 } %t126, 1 %t128 = icmp uge i64 0, %t127 - br i1 %t128, label %range5114, label %inrange5115 -range5114: + br i1 %t128, label %range5118, label %inrange5119 +range5118: call void @finch_panic_index(ptr @.str.3210, i64 2346, i64 0, i64 %t127) unreachable -inrange5115: +inrange5119: %t129 = extractvalue { ptr, i64, i64 } %t126, 0 %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 0 %t131 = load %S.ast.Node, ptr %t130 @@ -51724,11 +51750,11 @@ inrange5115: %t136 = load { ptr, i64, i64 }, ptr %t135 %t137 = extractvalue { ptr, i64, i64 } %t136, 1 %t138 = icmp uge i64 0, %t137 - br i1 %t138, label %range5116, label %inrange5117 -range5116: + br i1 %t138, label %range5120, label %inrange5121 +range5120: call void @finch_panic_index(ptr @.str.3211, i64 2346, i64 0, i64 %t137) unreachable -inrange5117: +inrange5121: %t139 = extractvalue { ptr, i64, i64 } %t136, 0 %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 0 %t141 = load %S.ast.Node, ptr %t140 @@ -51781,11 +51807,11 @@ entry: store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic5118, label %ok5119 -panic5118: + br i1 %t4, label %panic5122, label %ok5123 +panic5122: call void @finch_panic(ptr @.str.3214, i64 2351, ptr @.str.3215) unreachable -ok5119: +ok5123: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -51796,11 +51822,11 @@ ok5119: %t12 = load { ptr, i64, i64 }, ptr %t5 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 - br i1 %t14, label %range5120, label %inrange5121 -range5120: + br i1 %t14, label %range5124, label %inrange5125 +range5124: call void @finch_panic_index(ptr @.str.3216, i64 2351, i64 %t11, i64 %t13) unreachable -inrange5121: +inrange5125: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i64 %t11 %t17 = load %S.gen.StructDef, ptr %t16 @@ -51810,29 +51836,29 @@ inrange5121: store %S.gen.StructDef %t20, ptr %a21 %t22 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 2 %t23 = load i1, ptr %t22 - br i1 %t23, label %then5122, label %endif5124 -then5122: + br i1 %t23, label %then5126, label %endif5128 +then5126: call void @finch.drop.S_gen_StructDef(ptr %a21) ret i1 false -endif5124: +endif5128: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic5125, label %ok5126 -panic5125: + br i1 %t25, label %panic5129, label %ok5130 +panic5129: call void @finch_panic(ptr @.str.3217, i64 2355, ptr @.str.3218) unreachable -ok5126: +ok5130: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 13 %t28 = load i64, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %t26 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 - br i1 %t31, label %range5127, label %inrange5128 -range5127: + br i1 %t31, label %range5131, label %inrange5132 +range5131: call void @finch_panic_index(ptr @.str.3219, i64 2355, i64 %t28, i64 %t30) unreachable -inrange5128: +inrange5132: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 @@ -51841,23 +51867,23 @@ inrange5128: %t37 = load { ptr, i64, i64 }, ptr %t34 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range5129, label %inrange5130 -range5129: + br i1 %t39, label %range5133, label %inrange5134 +range5133: call void @finch_panic_index(ptr @.str.3220, i64 2355, i64 %t36, i64 %t38) unreachable -inrange5130: +inrange5134: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i32 0, i32 9 store i64 0, ptr %a43 - br label %each.cond5131 -each.cond5131: + br label %each.cond5135 +each.cond5135: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = load i64, ptr %a43 %t47 = icmp slt i64 %t46, %t45 - br i1 %t47, label %each.body5132, label %each.end5134 -each.body5132: + br i1 %t47, label %each.body5136, label %each.end5138 +each.body5136: %t48 = load ptr, ptr %t42 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46 %t50 = load %S.ast.Node, ptr %t49 @@ -51866,18 +51892,18 @@ each.body5132: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sgt i64 %t54, 0 - br i1 %t55, label %then5135, label %endif5137 -then5135: + br i1 %t55, label %then5139, label %endif5141 +then5139: call void @finch.drop.S_gen_StructDef(ptr %a21) ret i1 true -endif5137: - br label %each.step5133 -each.step5133: +endif5141: + br label %each.step5137 +each.step5137: %t56 = load i64, ptr %a43 %t57 = add i64 %t56, 1 store i64 %t57, ptr %a43 - br label %each.cond5131 -each.end5134: + br label %each.cond5135 +each.end5138: call void @finch.drop.S_gen_StructDef(ptr %a21) ret i1 false } @@ -51981,11 +52007,11 @@ entry: %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 - br i1 %t6, label %range5138, label %inrange5139 -range5138: + br i1 %t6, label %range5142, label %inrange5143 +range5142: call void @finch_panic_index(ptr @.str.3221, i64 2364, i64 0, i64 %t5) unreachable -inrange5139: +inrange5143: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 %t9 = load %S.ast.Node, ptr %t8 @@ -51999,31 +52025,31 @@ inrange5139: %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a16, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = icmp sgt i64 %t18, 0 - br i1 %t19, label %then5140, label %endif5142 -then5140: + br i1 %t19, label %then5144, label %endif5146 +then5144: %t20 = load ptr, ptr %a1 %t21 = load { ptr, i64, i64 }, ptr %a16 %t22 = call i64 @finch.gen.lookup(ptr %t20, { ptr, i64, i64 } %t21) store i64 %t22, ptr %a23 %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, 0 - br label %logic.from5143 -logic.from5143: - br i1 %t25, label %logic.rhs5144, label %logic.end5145 -logic.rhs5144: + br label %logic.from5147 +logic.from5147: + br i1 %t25, label %logic.rhs5148, label %logic.end5149 +logic.rhs5148: %t26 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3222, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br label %logic.rend5146 -logic.rend5146: - br label %logic.end5145 -logic.end5145: - %t32 = phi i1 [ false, %logic.from5143 ], [ %t31, %logic.rend5146 ] - br i1 %t32, label %then5147, label %endif5149 -then5147: + br label %logic.rend5150 +logic.rend5150: + br label %logic.end5149 +logic.end5149: + %t32 = phi i1 [ false, %logic.from5147 ], [ %t31, %logic.rend5150 ] + br i1 %t32, label %then5151, label %endif5153 +then5151: %t33 = load ptr, ptr %a1 %t34 = load %S.ast.Node, ptr %a2 %t35 = load { ptr, i64, i64 }, ptr %a16 @@ -52053,27 +52079,27 @@ then5147: call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } %t55) store { ptr, i64, i64 } %t55, ptr %a56 call void @finch_str_drop(ptr %a56) - br label %endif5149 -endif5149: + br label %endif5153 +endif5153: %t57 = load i64, ptr %a23 %t58 = icmp sge i64 %t57, 0 - br label %logic.from5150 -logic.from5150: - br i1 %t58, label %logic.rhs5151, label %logic.end5152 -logic.rhs5151: + br label %logic.from5154 +logic.from5154: + br i1 %t58, label %logic.rhs5155, label %logic.end5156 +logic.rhs5155: %t59 = load ptr, ptr %a1 %t60 = load i64, ptr %a23 %t61 = call %S.gen.Var @finch.gen.varAt(ptr %t59, i64 %t60) %t62 = extractvalue %S.gen.Var %t61, 3 store %S.gen.Var %t61, ptr %a63 call void @finch.drop.S_gen_Var(ptr %a63) - br label %logic.rend5153 -logic.rend5153: - br label %logic.end5152 -logic.end5152: - %t64 = phi i1 [ false, %logic.from5150 ], [ %t62, %logic.rend5153 ] - br i1 %t64, label %then5154, label %endif5156 -then5154: + br label %logic.rend5157 +logic.rend5157: + br label %logic.end5156 +logic.end5156: + %t64 = phi i1 [ false, %logic.from5154 ], [ %t62, %logic.rend5157 ] + br i1 %t64, label %then5158, label %endif5160 +then5158: %t65 = load ptr, ptr %a1 %t66 = load %S.ast.Node, ptr %a2 %t67 = load { ptr, i64, i64 }, ptr %a16 @@ -52090,10 +52116,10 @@ then5154: call void @finch.gen.fail(ptr %t65, %S.ast.Node %t66, { ptr, i64, i64 } %t76) store { ptr, i64, i64 } %t76, ptr %a77 call void @finch_str_drop(ptr %a77) - br label %endif5156 -endif5156: - br label %endif5142 -endif5142: + br label %endif5160 +endif5160: + br label %endif5146 +endif5146: store { ptr, i64, i64 } { ptr @.str.3228, i64 9, i64 0 }, ptr %a78 %t79 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 @@ -52101,8 +52127,8 @@ endif5142: store { ptr, i64, i64 } { ptr @.str.3229, i64 3, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 - br i1 %t84, label %then5157, label %endif5159 -then5157: + br i1 %t84, label %then5161, label %endif5163 +then5161: %t85 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3230, i64 1, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 @@ -52118,16 +52144,16 @@ then5157: store { ptr, i64, i64 } %t94, ptr %a78 store { ptr, i64, i64 } %t95, ptr %a96 call void @finch_str_drop(ptr %a96) - br label %endif5159 -endif5159: + br label %endif5163 +endif5163: %t97 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t98 = load { ptr, i64, i64 }, ptr %t97 store { ptr, i64, i64 } %t98, ptr %a99 store { ptr, i64, i64 } { ptr @.str.3232, i64 1, i64 0 }, ptr %a100 %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) %t102 = icmp ne i32 %t101, 0 - br i1 %t102, label %then5160, label %endif5162 -then5160: + br i1 %t102, label %then5164, label %endif5166 +then5164: %t103 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3233, i64 4, i64 0 }) store %S.ast.Type %t103, ptr %a104 store i1 false, ptr %a105 @@ -52137,16 +52163,16 @@ then5160: store { ptr, i64, i64 } { ptr @.str.3234, i64 3, i64 0 }, ptr %a109 %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) %t111 = icmp ne i32 %t110, 0 - br i1 %t111, label %then5163, label %endif5165 -then5163: + br i1 %t111, label %then5167, label %endif5169 +then5167: %t112 = load ptr, ptr %a1 %t113 = load { ptr, i64, i64 }, ptr %a16 %t114 = call i64 @finch.gen.lookup(ptr %t112, { ptr, i64, i64 } %t113) store i64 %t114, ptr %a115 %t116 = load i64, ptr %a115 %t117 = icmp sge i64 %t116, 0 - br i1 %t117, label %then5166, label %endif5168 -then5166: + br i1 %t117, label %then5170, label %endif5172 +then5170: %t118 = load ptr, ptr %a1 %t119 = load i64, ptr %a115 %t120 = call %S.gen.Var @finch.gen.varAt(ptr %t118, i64 %t119) @@ -52161,24 +52187,24 @@ then5166: store %S.ast.Type %t126, ptr %a127 call void @finch.drop.S_ast_Type(ptr %a127) store i1 true, ptr %a105 - br label %endif5168 -endif5168: - br label %endif5165 -endif5165: + br label %endif5172 +endif5172: + br label %endif5169 +endif5169: store %S.gen.Val zeroinitializer, ptr %a128 %t129 = load i1, ptr %a105 - br i1 %t129, label %then5169, label %else5170 -then5169: + br i1 %t129, label %then5173, label %else5174 +then5173: %t130 = load ptr, ptr %a1 %t131 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t132 = load { ptr, i64, i64 }, ptr %t131 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 1, %t133 - br i1 %t134, label %range5172, label %inrange5173 -range5172: + br i1 %t134, label %range5176, label %inrange5177 +range5176: call void @finch_panic_index(ptr @.str.3235, i64 2392, i64 1, i64 %t133) unreachable -inrange5173: +inrange5177: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 1 %t137 = load %S.ast.Node, ptr %t136 @@ -52188,18 +52214,18 @@ inrange5173: store %S.gen.Val %t139, ptr %a128 store %S.gen.Val %t140, ptr %a141 call void @finch.drop.S_gen_Val(ptr %a141) - br label %endif5171 -else5170: + br label %endif5175 +else5174: %t142 = load ptr, ptr %a1 %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t144 = load { ptr, i64, i64 }, ptr %t143 %t145 = extractvalue { ptr, i64, i64 } %t144, 1 %t146 = icmp uge i64 1, %t145 - br i1 %t146, label %range5174, label %inrange5175 -range5174: + br i1 %t146, label %range5178, label %inrange5179 +range5178: call void @finch_panic_index(ptr @.str.3236, i64 2394, i64 1, i64 %t145) unreachable -inrange5175: +inrange5179: %t147 = extractvalue { ptr, i64, i64 } %t144, 0 %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 1 %t149 = load %S.ast.Node, ptr %t148 @@ -52208,15 +52234,15 @@ inrange5175: store %S.gen.Val %t150, ptr %a128 store %S.gen.Val %t151, ptr %a152 call void @finch.drop.S_gen_Val(ptr %a152) - br label %endif5171 -endif5171: + br label %endif5175 +endif5175: %t153 = load ptr, ptr %a1 %t154 = icmp eq ptr %t153, null - br i1 %t154, label %panic5176, label %ok5177 -panic5176: + br i1 %t154, label %panic5180, label %ok5181 +panic5180: call void @finch_panic(ptr @.str.3237, i64 2396, ptr @.str.3238) unreachable -ok5177: +ok5181: %t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 11 %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i32 0, i32 1 %t157 = load i64, ptr %t156 @@ -52236,11 +52262,11 @@ ok5177: %t170 = load { ptr, i64, i64 }, ptr %t169 %t171 = extractvalue { ptr, i64, i64 } %t170, 1 %t172 = icmp uge i64 1, %t171 - br i1 %t172, label %range5178, label %inrange5179 -range5178: + br i1 %t172, label %range5182, label %inrange5183 +range5182: call void @finch_panic_index(ptr @.str.3239, i64 2399, i64 1, i64 %t171) unreachable -inrange5179: +inrange5183: %t173 = extractvalue { ptr, i64, i64 } %t170, 0 %t174 = getelementptr inbounds %S.ast.Node, ptr %t173, i64 1 %t175 = load %S.ast.Node, ptr %t174 @@ -52258,8 +52284,8 @@ inrange5179: %t185 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 %t186 = load %S.ast.Type, ptr %t185 %t187 = call i1 @finch.gen.owning(ptr %t184, %S.ast.Type %t186) - br i1 %t187, label %then5180, label %else5181 -then5180: + br i1 %t187, label %then5184, label %else5185 +then5184: %t188 = load ptr, ptr %a1 %t189 = load ptr, ptr %a1 %t190 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 @@ -52288,8 +52314,8 @@ then5180: %t210 = load %S.ast.Type, ptr %t209 call void @finch.gen.dropValue(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t210) call void @finch_str_drop(ptr %a197) - br label %endif5182 -else5181: + br label %endif5186 +else5185: %t211 = load ptr, ptr %a1 %t212 = load ptr, ptr %a1 %t213 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 @@ -52301,8 +52327,8 @@ else5181: call void @finch.gen.store(ptr %t211, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t218) store { ptr, i64, i64 } %t215, ptr %a219 call void @finch_str_drop(ptr %a219) - br label %endif5182 -endif5182: + br label %endif5186 +endif5186: %t220 = load ptr, ptr %a1 %t221 = load i64, ptr %a158 call void @finch.gen.heldEnd(ptr %t220, i64 %t221) @@ -52314,17 +52340,17 @@ endif5182: call void @finch_str_drop(ptr %a16) call void @finch.drop.S_ast_Node(ptr %a13) ret void -endif5162: +endif5166: %t222 = load ptr, ptr %a1 %t223 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t224 = load { ptr, i64, i64 }, ptr %t223 %t225 = extractvalue { ptr, i64, i64 } %t224, 1 %t226 = icmp uge i64 1, %t225 - br i1 %t226, label %range5183, label %inrange5184 -range5183: + br i1 %t226, label %range5187, label %inrange5188 +range5187: call void @finch_panic_index(ptr @.str.3240, i64 2411, i64 1, i64 %t225) unreachable -inrange5184: +inrange5188: %t227 = extractvalue { ptr, i64, i64 } %t224, 0 %t228 = getelementptr inbounds %S.ast.Node, ptr %t227, i64 1 %t229 = load %S.ast.Node, ptr %t228 @@ -52332,11 +52358,11 @@ inrange5184: store %S.gen.Val %t230, ptr %a231 %t232 = load ptr, ptr %a1 %t233 = icmp eq ptr %t232, null - br i1 %t233, label %panic5185, label %ok5186 -panic5185: + br i1 %t233, label %panic5189, label %ok5190 +panic5189: call void @finch_panic(ptr @.str.3241, i64 2412, ptr @.str.3242) unreachable -ok5186: +ok5190: %t234 = getelementptr inbounds %S.gen.Gen, ptr %t232, i32 0, i32 11 %t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 %t236 = load i64, ptr %t235 @@ -52406,16 +52432,16 @@ ok5186: %t295 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t296 = load %S.ast.Type, ptr %t295 %t297 = call i1 @finch.gen.owning(ptr %t294, %S.ast.Type %t296) - br i1 %t297, label %then5187, label %endif5189 -then5187: + br i1 %t297, label %then5191, label %endif5193 +then5191: %t298 = load ptr, ptr %a1 %t299 = getelementptr inbounds %S.gen.Val, ptr %a260, i32 0, i32 0 %t300 = load { ptr, i64, i64 }, ptr %t299 %t301 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t302 = load %S.ast.Type, ptr %t301 call void @finch.gen.dropValue(ptr %t298, { ptr, i64, i64 } %t300, %S.ast.Type %t302) - br label %endif5189 -endif5189: + br label %endif5193 +endif5193: %t303 = load ptr, ptr %a1 %t304 = load i64, ptr %a237 call void @finch.gen.heldEnd(ptr %t303, i64 %t304) @@ -52478,11 +52504,11 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 - br i1 %t7, label %range5190, label %inrange5191 -range5190: + br i1 %t7, label %range5194, label %inrange5195 +range5194: call void @finch_panic_index(ptr @.str.3246, i64 2431, i64 0, i64 %t6) unreachable -inrange5191: +inrange5195: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 %t10 = load %S.ast.Node, ptr %t9 @@ -52501,22 +52527,22 @@ inrange5191: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp sgt i64 %t24, 2 - br i1 %t25, label %then5192, label %else5193 -then5192: + br i1 %t25, label %then5196, label %else5197 +then5196: %t26 = load ptr, ptr %a1 %t27 = load { ptr, i64, i64 }, ptr %a12 %t28 = load { ptr, i64, i64 }, ptr %a15 %t29 = load { ptr, i64, i64 }, ptr %a18 call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t27, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29) - br label %endif5194 -else5193: + br label %endif5198 +else5197: %t30 = load ptr, ptr %a1 %t31 = load { ptr, i64, i64 }, ptr %a12 %t32 = load { ptr, i64, i64 }, ptr %a15 %t33 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.condBr(ptr %t30, { ptr, i64, i64 } %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33) - br label %endif5194 -endif5194: + br label %endif5198 +endif5198: %t34 = load ptr, ptr %a1 %t35 = load { ptr, i64, i64 }, ptr %a15 call void @finch.gen.label(ptr %t34, { ptr, i64, i64 } %t35) @@ -52525,22 +52551,22 @@ endif5194: %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 1, %t39 - br i1 %t40, label %range5195, label %inrange5196 -range5195: + br i1 %t40, label %range5199, label %inrange5200 +range5199: call void @finch_panic_index(ptr @.str.3250, i64 2441, i64 1, i64 %t39) unreachable -inrange5196: +inrange5200: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 1 %t43 = load %S.ast.Node, ptr %t42 call void @finch.gen.block(ptr %t36, %S.ast.Node %t43, i1 true) %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic5197, label %ok5198 -panic5197: + br i1 %t45, label %panic5201, label %ok5202 +panic5201: call void @finch_panic(ptr @.str.3251, i64 2442, ptr @.str.3252) unreachable -ok5198: +ok5202: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 9 %t47 = load i1, ptr %t46 %t48 = xor i1 %t47, true @@ -52552,8 +52578,8 @@ ok5198: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sgt i64 %t54, 2 - br i1 %t55, label %then5199, label %else5200 -then5199: + br i1 %t55, label %then5203, label %else5204 +then5203: %t56 = load ptr, ptr %a1 %t57 = load { ptr, i64, i64 }, ptr %a18 call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) @@ -52562,52 +52588,52 @@ then5199: %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 2, %t61 - br i1 %t62, label %range5202, label %inrange5203 -range5202: + br i1 %t62, label %range5206, label %inrange5207 +range5206: call void @finch_panic_index(ptr @.str.3253, i64 2446, i64 2, i64 %t61) unreachable -inrange5203: +inrange5207: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 2 %t65 = load %S.ast.Node, ptr %t64 call void @finch.gen.stmt(ptr %t58, %S.ast.Node %t65) %t66 = load i1, ptr %a49 - br label %logic.from5204 -logic.from5204: - br i1 %t66, label %logic.end5206, label %logic.rhs5205 -logic.rhs5205: + br label %logic.from5208 +logic.from5208: + br i1 %t66, label %logic.end5210, label %logic.rhs5209 +logic.rhs5209: %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic5207, label %ok5208 -panic5207: + br i1 %t68, label %panic5211, label %ok5212 +panic5211: call void @finch_panic(ptr @.str.3254, i64 2447, ptr @.str.3255) unreachable -ok5208: +ok5212: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 9 %t70 = load i1, ptr %t69 %t71 = xor i1 %t70, true - br label %logic.rend5209 -logic.rend5209: - br label %logic.end5206 -logic.end5206: - %t72 = phi i1 [ true, %logic.from5204 ], [ %t71, %logic.rend5209 ] + br label %logic.rend5213 +logic.rend5213: + br label %logic.end5210 +logic.end5210: + %t72 = phi i1 [ true, %logic.from5208 ], [ %t71, %logic.rend5213 ] store i1 %t72, ptr %a49 %t73 = load ptr, ptr %a1 %t74 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.br(ptr %t73, { ptr, i64, i64 } %t74) - br label %endif5201 -else5200: + br label %endif5205 +else5204: store i1 true, ptr %a49 - br label %endif5201 -endif5201: + br label %endif5205 +endif5205: %t75 = load i1, ptr %a49 - br i1 %t75, label %then5210, label %endif5212 -then5210: + br i1 %t75, label %then5214, label %endif5216 +then5214: %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.label(ptr %t76, { ptr, i64, i64 } %t77) - br label %endif5212 -endif5212: + br label %endif5216 +endif5216: call void @finch_str_drop(ptr %a21) call void @finch_str_drop(ptr %a18) call void @finch_str_drop(ptr %a15) @@ -52655,11 +52681,11 @@ entry: %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 0, %t18 - br i1 %t19, label %range5213, label %inrange5214 -range5213: + br i1 %t19, label %range5217, label %inrange5218 +range5217: call void @finch_panic_index(ptr @.str.3259, i64 2463, i64 0, i64 %t18) unreachable -inrange5214: +inrange5218: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.ast.Node, ptr %t20, i64 0 %t22 = getelementptr inbounds %S.ast.Node, ptr %t21, i32 0, i32 0 @@ -52668,19 +52694,19 @@ inrange5214: store { ptr, i64, i64 } { ptr @.str.3260, i64 4, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from5215 -logic.from5215: - br i1 %t27, label %logic.rhs5216, label %logic.end5217 -logic.rhs5216: + br label %logic.from5219 +logic.from5219: + br i1 %t27, label %logic.rhs5220, label %logic.end5221 +logic.rhs5220: %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t29 = load { ptr, i64, i64 }, ptr %t28 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 0, %t30 - br i1 %t31, label %range5218, label %inrange5219 -range5218: + br i1 %t31, label %range5222, label %inrange5223 +range5222: call void @finch_panic_index(ptr @.str.3261, i64 2463, i64 0, i64 %t30) unreachable -inrange5219: +inrange5223: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i64 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i32 0, i32 4 @@ -52689,52 +52715,52 @@ inrange5219: store { ptr, i64, i64 } { ptr @.str.3262, i64 4, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.rend5220 -logic.rend5220: - br label %logic.end5217 -logic.end5217: - %t40 = phi i1 [ false, %logic.from5215 ], [ %t39, %logic.rend5220 ] + br label %logic.rend5224 +logic.rend5224: + br label %logic.end5221 +logic.end5221: + %t40 = phi i1 [ false, %logic.from5219 ], [ %t39, %logic.rend5224 ] store i1 %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 - br i1 %t46, label %range5221, label %inrange5222 -range5221: + br i1 %t46, label %range5225, label %inrange5226 +range5225: call void @finch_panic_index(ptr @.str.3263, i64 2464, i64 0, i64 %t45) unreachable -inrange5222: +inrange5226: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = load %S.ast.Node, ptr %t48 %t50 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t42, %S.ast.Node %t49) store { ptr, i64, i64 } %t50, ptr %a51 %t52 = load i1, ptr %a41 - br i1 %t52, label %then5223, label %else5224 -then5223: + br i1 %t52, label %then5227, label %else5228 +then5227: %t53 = load ptr, ptr %a1 %t54 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.br(ptr %t53, { ptr, i64, i64 } %t54) - br label %endif5225 -else5224: + br label %endif5229 +else5228: %t55 = load ptr, ptr %a1 %t56 = load { ptr, i64, i64 }, ptr %a51 %t57 = load { ptr, i64, i64 }, ptr %a8 %t58 = load { ptr, i64, i64 }, ptr %a11 call void @finch.gen.condBr(ptr %t55, { ptr, i64, i64 } %t56, { ptr, i64, i64 } %t57, { ptr, i64, i64 } %t58) - br label %endif5225 -endif5225: + br label %endif5229 +endif5229: %t59 = load ptr, ptr %a1 %t60 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.label(ptr %t59, { ptr, i64, i64 } %t60) %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null - br i1 %t62, label %panic5226, label %ok5227 -panic5226: + br i1 %t62, label %panic5230, label %ok5231 +panic5230: call void @finch_panic(ptr @.str.3264, i64 2471, ptr @.str.3265) unreachable -ok5227: +ok5231: %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 12 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load { ptr, i64, i64 }, ptr %a5 @@ -52749,22 +52775,22 @@ ok5227: %t74 = insertvalue %S.gen.Loop %t69, { ptr, i64, i64 } %t73, 1 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic5228, label %ok5229 -panic5228: + br i1 %t76, label %panic5232, label %ok5233 +panic5232: call void @finch_panic(ptr @.str.3266, i64 2471, ptr @.str.3267) unreachable -ok5229: +ok5233: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 10 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load i64, ptr %t78 %t80 = insertvalue %S.gen.Loop %t74, i64 %t79, 2 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic5230, label %ok5231 -panic5230: + br i1 %t82, label %panic5234, label %ok5235 +panic5234: call void @finch_panic(ptr @.str.3268, i64 2471, ptr @.str.3269) unreachable -ok5231: +ok5235: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 11 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 %t85 = load i64, ptr %t84 @@ -52780,11 +52806,11 @@ ok5231: %t92 = load { ptr, i64, i64 }, ptr %t91 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 1, %t93 - br i1 %t94, label %range5232, label %inrange5233 -range5232: + br i1 %t94, label %range5236, label %inrange5237 +range5236: call void @finch_panic_index(ptr @.str.3270, i64 2472, i64 1, i64 %t93) unreachable -inrange5233: +inrange5237: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 1 %t97 = load %S.ast.Node, ptr %t96 @@ -52795,31 +52821,31 @@ inrange5233: %t102 = load { ptr, i64, i64 }, ptr %t101 %t103 = extractvalue { ptr, i64, i64 } %t102, 1 %t104 = icmp uge i64 1, %t103 - br i1 %t104, label %range5234, label %inrange5235 -range5234: + br i1 %t104, label %range5238, label %inrange5239 +range5238: call void @finch_panic_index(ptr @.str.3271, i64 2473, i64 1, i64 %t103) unreachable -inrange5235: +inrange5239: %t105 = extractvalue { ptr, i64, i64 } %t102, 0 %t106 = getelementptr inbounds %S.ast.Node, ptr %t105, i64 1 %t107 = load %S.ast.Node, ptr %t106 call void @finch.gen.block(ptr %t100, %S.ast.Node %t107, i1 true) %t108 = load ptr, ptr %a1 %t109 = icmp eq ptr %t108, null - br i1 %t109, label %panic5236, label %ok5237 -panic5236: + br i1 %t109, label %panic5240, label %ok5241 +panic5240: call void @finch_panic(ptr @.str.3272, i64 2474, ptr @.str.3273) unreachable -ok5237: +ok5241: %t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 12 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1 %t112 = load i64, ptr %t111 %t113 = icmp eq i64 %t112, 0 - br i1 %t113, label %panic5238, label %ok5239 -panic5238: + br i1 %t113, label %panic5242, label %ok5243 +panic5242: call void @finch_panic(ptr @.str.3274, i64 2474, ptr @.str.3275) unreachable -ok5239: +ok5243: %t114 = sub i64 %t112, 1 %t115 = load ptr, ptr %t110 %t116 = getelementptr inbounds %S.gen.Loop, ptr %t115, i64 %t114 @@ -52832,23 +52858,23 @@ ok5239: call void @finch.gen.br(ptr %t119, { ptr, i64, i64 } %t120) %t121 = load i1, ptr %a41 %t122 = xor i1 %t121, true - br label %logic.from5240 -logic.from5240: - br i1 %t122, label %logic.end5242, label %logic.rhs5241 -logic.rhs5241: + br label %logic.from5244 +logic.from5244: + br i1 %t122, label %logic.end5246, label %logic.rhs5245 +logic.rhs5245: %t123 = load i1, ptr %a99 - br label %logic.rend5243 -logic.rend5243: - br label %logic.end5242 -logic.end5242: - %t124 = phi i1 [ true, %logic.from5240 ], [ %t123, %logic.rend5243 ] - br i1 %t124, label %then5244, label %endif5246 -then5244: + br label %logic.rend5247 +logic.rend5247: + br label %logic.end5246 +logic.end5246: + %t124 = phi i1 [ true, %logic.from5244 ], [ %t123, %logic.rend5247 ] + br i1 %t124, label %then5248, label %endif5250 +then5248: %t125 = load ptr, ptr %a1 %t126 = load { ptr, i64, i64 }, ptr %a11 call void @finch.gen.label(ptr %t125, { ptr, i64, i64 } %t126) - br label %endif5246 -endif5246: + br label %endif5250 +endif5250: call void @finch_str_drop(ptr %a51) call void @finch_str_drop(ptr %a11) call void @finch_str_drop(ptr %a8) @@ -52876,77 +52902,77 @@ entry: store { ptr, i64, i64 } { ptr @.str.3276, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then5247, label %endif5249 -then5247: + br i1 %t7, label %then5251, label %endif5253 +then5251: ret i1 true -endif5249: +endif5253: %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.3277, i64 5, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from5250 -logic.from5250: - br i1 %t13, label %logic.end5252, label %logic.rhs5251 -logic.rhs5251: + br label %logic.from5254 +logic.from5254: + br i1 %t13, label %logic.end5256, label %logic.rhs5255 +logic.rhs5255: %t14 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3278, i64 3, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br label %logic.rend5253 -logic.rend5253: - br label %logic.end5252 -logic.end5252: - %t20 = phi i1 [ true, %logic.from5250 ], [ %t19, %logic.rend5253 ] - br label %logic.from5254 -logic.from5254: - br i1 %t20, label %logic.end5256, label %logic.rhs5255 -logic.rhs5255: + br label %logic.rend5257 +logic.rend5257: + br label %logic.end5256 +logic.end5256: + %t20 = phi i1 [ true, %logic.from5254 ], [ %t19, %logic.rend5257 ] + br label %logic.from5258 +logic.from5258: + br i1 %t20, label %logic.end5260, label %logic.rhs5259 +logic.rhs5259: %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3279, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br label %logic.rend5257 -logic.rend5257: - br label %logic.end5256 -logic.end5256: - %t27 = phi i1 [ true, %logic.from5254 ], [ %t26, %logic.rend5257 ] - br i1 %t27, label %then5258, label %endif5260 -then5258: + br label %logic.rend5261 +logic.rend5261: + br label %logic.end5260 +logic.end5260: + %t27 = phi i1 [ true, %logic.from5258 ], [ %t26, %logic.rend5261 ] + br i1 %t27, label %then5262, label %endif5264 +then5262: ret i1 false -endif5260: +endif5264: %t28 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 store i64 0, ptr %a29 - br label %each.cond5261 -each.cond5261: + br label %each.cond5265 +each.cond5265: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = load i64, ptr %a29 %t33 = icmp slt i64 %t32, %t31 - br i1 %t33, label %each.body5262, label %each.end5264 -each.body5262: + br i1 %t33, label %each.body5266, label %each.end5268 +each.body5266: %t34 = load ptr, ptr %t28 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 %t36 = load %S.ast.Node, ptr %t35 store %S.ast.Node %t36, ptr %a37 %t38 = load %S.ast.Node, ptr %a37 %t39 = call i1 @finch.gen.countBreaks(%S.ast.Node %t38) - br i1 %t39, label %then5265, label %endif5267 -then5265: + br i1 %t39, label %then5269, label %endif5271 +then5269: ret i1 true -endif5267: - br label %each.step5263 -each.step5263: +endif5271: + br label %each.step5267 +each.step5267: %t40 = load i64, ptr %a29 %t41 = add i64 %t40, 1 store i64 %t41, ptr %a29 - br label %each.cond5261 -each.end5264: + br label %each.cond5265 +each.end5268: ret i1 false } @@ -53009,11 +53035,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range5268, label %inrange5269 -range5268: + br i1 %t8, label %range5272, label %inrange5273 +range5272: call void @finch_panic_index(ptr @.str.3280, i64 2498, i64 0, i64 %t7) unreachable -inrange5269: +inrange5273: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -53023,11 +53049,11 @@ inrange5269: %t15 = load { ptr, i64, i64 }, ptr %t14 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 0, %t16 - br i1 %t17, label %range5270, label %inrange5271 -range5270: + br i1 %t17, label %range5274, label %inrange5275 +range5274: call void @finch_panic_index(ptr @.str.3282, i64 2498, i64 0, i64 %t16) unreachable -inrange5271: +inrange5275: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 %t20 = load %S.ast.Node, ptr %t19 @@ -53049,11 +53075,11 @@ inrange5271: %t33 = load { ptr, i64, i64 }, ptr %t32 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 1, %t34 - br i1 %t35, label %range5272, label %inrange5273 -range5272: + br i1 %t35, label %range5276, label %inrange5277 +range5276: call void @finch_panic_index(ptr @.str.3284, i64 2499, i64 1, i64 %t34) unreachable -inrange5273: +inrange5277: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 1 %t38 = load %S.ast.Node, ptr %t37 @@ -53063,11 +53089,11 @@ inrange5273: %t42 = load { ptr, i64, i64 }, ptr %t41 %t43 = extractvalue { ptr, i64, i64 } %t42, 1 %t44 = icmp uge i64 1, %t43 - br i1 %t44, label %range5274, label %inrange5275 -range5274: + br i1 %t44, label %range5278, label %inrange5279 +range5278: call void @finch_panic_index(ptr @.str.3286, i64 2499, i64 1, i64 %t43) unreachable -inrange5275: +inrange5279: %t45 = extractvalue { ptr, i64, i64 } %t42, 0 %t46 = getelementptr inbounds %S.ast.Node, ptr %t45, i64 1 %t47 = load %S.ast.Node, ptr %t46 @@ -53150,11 +53176,11 @@ inrange5275: call void @finch.gen.label(ptr %t111, { ptr, i64, i64 } %t112) %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null - br i1 %t114, label %panic5276, label %ok5277 -panic5276: + br i1 %t114, label %panic5280, label %ok5281 +panic5280: call void @finch_panic(ptr @.str.3296, i64 2512, ptr @.str.3297) unreachable -ok5277: +ok5281: %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 12 %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i32 0, i32 1 %t117 = load { ptr, i64, i64 }, ptr %a75 @@ -53169,22 +53195,22 @@ ok5277: %t126 = insertvalue %S.gen.Loop %t121, { ptr, i64, i64 } %t125, 1 %t127 = load ptr, ptr %a1 %t128 = icmp eq ptr %t127, null - br i1 %t128, label %panic5278, label %ok5279 -panic5278: + br i1 %t128, label %panic5282, label %ok5283 +panic5282: call void @finch_panic(ptr @.str.3298, i64 2512, ptr @.str.3299) unreachable -ok5279: +ok5283: %t129 = getelementptr inbounds %S.gen.Gen, ptr %t127, i32 0, i32 10 %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i32 0, i32 1 %t131 = load i64, ptr %t130 %t132 = insertvalue %S.gen.Loop %t126, i64 %t131, 2 %t133 = load ptr, ptr %a1 %t134 = icmp eq ptr %t133, null - br i1 %t134, label %panic5280, label %ok5281 -panic5280: + br i1 %t134, label %panic5284, label %ok5285 +panic5284: call void @finch_panic(ptr @.str.3300, i64 2512, ptr @.str.3301) unreachable -ok5281: +ok5285: %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 11 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 %t137 = load i64, ptr %t136 @@ -53201,31 +53227,31 @@ ok5281: %t145 = load { ptr, i64, i64 }, ptr %t144 %t146 = extractvalue { ptr, i64, i64 } %t145, 1 %t147 = icmp uge i64 2, %t146 - br i1 %t147, label %range5282, label %inrange5283 -range5282: + br i1 %t147, label %range5286, label %inrange5287 +range5286: call void @finch_panic_index(ptr @.str.3302, i64 2513, i64 2, i64 %t146) unreachable -inrange5283: +inrange5287: %t148 = extractvalue { ptr, i64, i64 } %t145, 0 %t149 = getelementptr inbounds %S.ast.Node, ptr %t148, i64 2 %t150 = load %S.ast.Node, ptr %t149 call void @finch.gen.block(ptr %t143, %S.ast.Node %t150, i1 true) %t151 = load ptr, ptr %a1 %t152 = icmp eq ptr %t151, null - br i1 %t152, label %panic5284, label %ok5285 -panic5284: + br i1 %t152, label %panic5288, label %ok5289 +panic5288: call void @finch_panic(ptr @.str.3303, i64 2514, ptr @.str.3304) unreachable -ok5285: +ok5289: %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 12 %t154 = getelementptr inbounds { ptr, i64, i64 }, ptr %t153, i32 0, i32 1 %t155 = load i64, ptr %t154 %t156 = icmp eq i64 %t155, 0 - br i1 %t156, label %panic5286, label %ok5287 -panic5286: + br i1 %t156, label %panic5290, label %ok5291 +panic5290: call void @finch_panic(ptr @.str.3305, i64 2514, ptr @.str.3306) unreachable -ok5287: +ok5291: %t157 = sub i64 %t155, 1 %t158 = load ptr, ptr %t153 %t159 = getelementptr inbounds %S.gen.Loop, ptr %t158, i64 %t157 @@ -53457,11 +53483,11 @@ entry: %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 - br i1 %t9, label %range5288, label %inrange5289 -range5288: + br i1 %t9, label %range5292, label %inrange5293 +range5292: call void @finch_panic_index(ptr @.str.3311, i64 2526, i64 0, i64 %t8) unreachable -inrange5289: +inrange5293: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = load %S.ast.Type, ptr %t11 @@ -53473,11 +53499,11 @@ inrange5289: %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 1, %t19 - br i1 %t20, label %range5290, label %inrange5291 -range5290: + br i1 %t20, label %range5294, label %inrange5295 +range5294: call void @finch_panic_index(ptr @.str.3312, i64 2527, i64 1, i64 %t19) unreachable -inrange5291: +inrange5295: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 %t23 = load %S.ast.Type, ptr %t22 @@ -53486,20 +53512,20 @@ inrange5291: %t26 = load %S.ast.Type, ptr %a25 store %S.ast.Type %t26, ptr %a27 %t28 = load i1, ptr %a5 - br label %logic.from5292 -logic.from5292: - br i1 %t28, label %logic.rhs5293, label %logic.end5294 -logic.rhs5293: + br label %logic.from5296 +logic.from5296: + br i1 %t28, label %logic.rhs5297, label %logic.end5298 +logic.rhs5297: %t29 = load ptr, ptr %a1 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t31 = load { ptr, i64, i64 }, ptr %t30 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 0, %t32 - br i1 %t33, label %range5295, label %inrange5296 -range5295: + br i1 %t33, label %range5299, label %inrange5300 +range5299: call void @finch_panic_index(ptr @.str.3313, i64 2528, i64 0, i64 %t32) unreachable -inrange5296: +inrange5300: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 0 %t36 = load %S.ast.Node, ptr %t35 @@ -53508,22 +53534,22 @@ inrange5296: %t39 = load { ptr, i64, i64 }, ptr %t38 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 1, %t40 - br i1 %t41, label %range5297, label %inrange5298 -range5297: + br i1 %t41, label %range5301, label %inrange5302 +range5301: call void @finch_panic_index(ptr @.str.3314, i64 2528, i64 1, i64 %t40) unreachable -inrange5298: +inrange5302: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 1 %t44 = load %S.ast.Node, ptr %t43 %t45 = call i1 @finch.gen.mutates(ptr %t29, { ptr, i64, i64 } %t37, %S.ast.Node %t44) store { ptr, i64, i64 } %t37, ptr %a46 call void @finch_str_drop(ptr %a46) - br label %logic.rend5299 -logic.rend5299: - br label %logic.end5294 -logic.end5294: - %t47 = phi i1 [ false, %logic.from5292 ], [ %t45, %logic.rend5299 ] + br label %logic.rend5303 +logic.rend5303: + br label %logic.end5298 +logic.end5298: + %t47 = phi i1 [ false, %logic.from5296 ], [ %t45, %logic.rend5303 ] store i1 %t47, ptr %a48 %t49 = load ptr, ptr %a1 %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.3315, i64 3, i64 0 }) @@ -53533,8 +53559,8 @@ logic.end5294: call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.3316, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3317, i64 1, i64 0 }, { ptr, i64, i64 } %t53) store { ptr, i64, i64 } { ptr @.str.3318, i64 0, i64 0 }, ptr %a54 %t55 = load i1, ptr %a5 - br i1 %t55, label %then5300, label %endif5302 -then5300: + br i1 %t55, label %then5304, label %endif5306 +then5304: %t56 = load ptr, ptr %a1 %t57 = load ptr, ptr %a1 %t58 = load ptr, ptr %a1 @@ -53575,8 +53601,8 @@ then5300: store { ptr, i64, i64 } %t84, ptr %a54 store { ptr, i64, i64 } %t86, ptr %a87 call void @finch_str_drop(ptr %a87) - br label %endif5302 -endif5302: + br label %endif5306 +endif5306: %t88 = load ptr, ptr %a1 %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3323, i64 8, i64 0 }) store { ptr, i64, i64 } %t89, ptr %a90 @@ -53599,18 +53625,18 @@ endif5302: %t106 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) %t107 = load i1, ptr %a5 - br label %logic.from5303 -logic.from5303: - br i1 %t107, label %logic.rhs5304, label %logic.end5305 -logic.rhs5304: + br label %logic.from5307 +logic.from5307: + br i1 %t107, label %logic.rhs5308, label %logic.end5309 +logic.rhs5308: %t108 = load i1, ptr %a48 - br label %logic.rend5306 -logic.rend5306: - br label %logic.end5305 -logic.end5305: - %t109 = phi i1 [ false, %logic.from5303 ], [ %t108, %logic.rend5306 ] - br i1 %t109, label %then5307, label %endif5309 -then5307: + br label %logic.rend5310 +logic.rend5310: + br label %logic.end5309 +logic.end5309: + %t109 = phi i1 [ false, %logic.from5307 ], [ %t108, %logic.rend5310 ] + br i1 %t109, label %then5311, label %endif5313 +then5311: %t110 = load ptr, ptr %a1 %t111 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t110, { ptr, i64, i64 } { ptr @.str.3328, i64 11, i64 0 }) store { ptr, i64, i64 } %t111, ptr %a112 @@ -53689,22 +53715,22 @@ then5307: %t173 = load ptr, ptr %a1 %t174 = load ptr, ptr %a1 %t175 = icmp eq ptr %t174, null - br i1 %t175, label %panic5310, label %ok5311 -panic5310: + br i1 %t175, label %panic5314, label %ok5315 +panic5314: call void @finch_panic(ptr @.str.3337, i64 2549, ptr @.str.3338) unreachable -ok5311: +ok5315: %t176 = getelementptr inbounds %S.gen.Gen, ptr %t174, i32 0, i32 1 %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t178 = load i64, ptr %t177 %t179 = load { ptr, i64, i64 }, ptr %t176 %t180 = extractvalue { ptr, i64, i64 } %t179, 1 %t181 = icmp uge i64 %t178, %t180 - br i1 %t181, label %range5312, label %inrange5313 -range5312: + br i1 %t181, label %range5316, label %inrange5317 +range5316: call void @finch_panic_index(ptr @.str.3339, i64 2549, i64 %t178, i64 %t180) unreachable -inrange5313: +inrange5317: %t182 = extractvalue { ptr, i64, i64 } %t179, 0 %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t178 %t184 = load { ptr, i64, i64 }, ptr %t183 @@ -53746,11 +53772,11 @@ inrange5313: call void @finch.gen.emit(ptr %t212, { ptr, i64, i64 } { ptr @.str.3342, i64 11, i64 0 }) %t213 = load ptr, ptr %a1 %t214 = icmp eq ptr %t213, null - br i1 %t214, label %panic5314, label %ok5315 -panic5314: + br i1 %t214, label %panic5318, label %ok5319 +panic5318: call void @finch_panic(ptr @.str.3343, i64 2551, ptr @.str.3344) unreachable -ok5315: +ok5319: %t215 = getelementptr inbounds %S.gen.Gen, ptr %t213, i32 0, i32 9 store i1 true, ptr %t215 %t216 = load ptr, ptr %a1 @@ -53759,8 +53785,8 @@ ok5315: call void @finch_str_drop(ptr %a146) call void @finch_str_drop(ptr %a115) call void @finch_str_drop(ptr %a112) - br label %endif5309 -endif5309: + br label %endif5313 +endif5313: %t218 = load ptr, ptr %a1 %t219 = load { ptr, i64, i64 }, ptr %a51 %t220 = call { ptr, i64, i64 } @finch.gen.load(ptr %t218, { ptr, i64, i64 } { ptr @.str.3345, i64 3, i64 0 }, { ptr, i64, i64 } %t219) @@ -53874,11 +53900,11 @@ endif5309: call void @finch.gen.label(ptr %t309, { ptr, i64, i64 } %t310) %t311 = load ptr, ptr %a1 %t312 = icmp eq ptr %t311, null - br i1 %t312, label %panic5316, label %ok5317 -panic5316: + br i1 %t312, label %panic5320, label %ok5321 +panic5320: call void @finch_panic(ptr @.str.3355, i64 2562, ptr @.str.3356) unreachable -ok5317: +ok5321: %t313 = getelementptr inbounds %S.gen.Gen, ptr %t311, i32 0, i32 12 %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i32 0, i32 1 %t315 = load { ptr, i64, i64 }, ptr %a99 @@ -53893,22 +53919,22 @@ ok5317: %t324 = insertvalue %S.gen.Loop %t319, { ptr, i64, i64 } %t323, 1 %t325 = load ptr, ptr %a1 %t326 = icmp eq ptr %t325, null - br i1 %t326, label %panic5318, label %ok5319 -panic5318: + br i1 %t326, label %panic5322, label %ok5323 +panic5322: call void @finch_panic(ptr @.str.3357, i64 2562, ptr @.str.3358) unreachable -ok5319: +ok5323: %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 10 %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i32 0, i32 1 %t329 = load i64, ptr %t328 %t330 = insertvalue %S.gen.Loop %t324, i64 %t329, 2 %t331 = load ptr, ptr %a1 %t332 = icmp eq ptr %t331, null - br i1 %t332, label %panic5320, label %ok5321 -panic5320: + br i1 %t332, label %panic5324, label %ok5325 +panic5324: call void @finch_panic(ptr @.str.3359, i64 2562, ptr @.str.3360) unreachable -ok5321: +ok5325: %t333 = getelementptr inbounds %S.gen.Gen, ptr %t331, i32 0, i32 11 %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i32 0, i32 1 %t335 = load i64, ptr %t334 @@ -53937,8 +53963,8 @@ ok5321: call void @finch_str_drop(ptr %a352) store { ptr, i64, i64 } %t350, ptr %a353 %t354 = load i1, ptr %a48 - br i1 %t354, label %then5322, label %endif5324 -then5322: + br i1 %t354, label %then5326, label %endif5328 +then5326: %t355 = load ptr, ptr %a1 %t356 = load { ptr, i64, i64 }, ptr %a353 %t357 = load %S.ast.Type, ptr %a16 @@ -53947,8 +53973,8 @@ then5322: store { ptr, i64, i64 } %t358, ptr %a353 store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) - br label %endif5324 -endif5324: + br label %endif5328 +endif5328: %t361 = load ptr, ptr %a1 %t362 = load %S.ast.Node, ptr %a2 %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -53963,8 +53989,8 @@ endif5324: %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 %t372 = load i64, ptr %t371 %t373 = icmp sgt i64 %t372, 0 - br i1 %t373, label %then5325, label %endif5327 -then5325: + br i1 %t373, label %then5329, label %endif5331 +then5329: %t374 = load ptr, ptr %a1 %t375 = load ptr, ptr %a1 %t376 = load %S.ast.Type, ptr %a27 @@ -53980,8 +54006,8 @@ then5325: call void @finch_str_drop(ptr %a384) store { ptr, i64, i64 } %t382, ptr %a385 %t386 = load i1, ptr %a48 - br i1 %t386, label %then5328, label %endif5330 -then5328: + br i1 %t386, label %then5332, label %endif5334 +then5332: %t387 = load ptr, ptr %a1 %t388 = load { ptr, i64, i64 }, ptr %a385 %t389 = load %S.ast.Type, ptr %a27 @@ -53990,8 +54016,8 @@ then5328: store { ptr, i64, i64 } %t390, ptr %a385 store { ptr, i64, i64 } %t391, ptr %a392 call void @finch_str_drop(ptr %a392) - br label %endif5330 -endif5330: + br label %endif5334 +endif5334: %t393 = load ptr, ptr %a1 %t394 = load %S.ast.Node, ptr %a2 %t395 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 @@ -54003,18 +54029,18 @@ endif5330: store { ptr, i64, i64 } %t400, ptr %a401 call void @finch_str_drop(ptr %a401) call void @finch_str_drop(ptr %a385) - br label %endif5327 -endif5327: + br label %endif5331 +endif5331: %t402 = load ptr, ptr %a1 %t403 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t404 = load { ptr, i64, i64 }, ptr %t403 %t405 = extractvalue { ptr, i64, i64 } %t404, 1 %t406 = icmp uge i64 1, %t405 - br i1 %t406, label %range5331, label %inrange5332 -range5331: + br i1 %t406, label %range5335, label %inrange5336 +range5335: call void @finch_panic_index(ptr @.str.3361, i64 2576, i64 1, i64 %t405) unreachable -inrange5332: +inrange5336: %t407 = extractvalue { ptr, i64, i64 } %t404, 0 %t408 = getelementptr inbounds %S.ast.Node, ptr %t407, i64 1 %t409 = load %S.ast.Node, ptr %t408 @@ -54023,20 +54049,20 @@ inrange5332: call void @finch.gen.popScope(ptr %t410) %t411 = load ptr, ptr %a1 %t412 = icmp eq ptr %t411, null - br i1 %t412, label %panic5333, label %ok5334 -panic5333: + br i1 %t412, label %panic5337, label %ok5338 +panic5337: call void @finch_panic(ptr @.str.3362, i64 2578, ptr @.str.3363) unreachable -ok5334: +ok5338: %t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 12 %t414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t413, i32 0, i32 1 %t415 = load i64, ptr %t414 %t416 = icmp eq i64 %t415, 0 - br i1 %t416, label %panic5335, label %ok5336 -panic5335: + br i1 %t416, label %panic5339, label %ok5340 +panic5339: call void @finch_panic(ptr @.str.3364, i64 2578, ptr @.str.3365) unreachable -ok5336: +ok5340: %t417 = sub i64 %t415, 1 %t418 = load ptr, ptr %t413 %t419 = getelementptr inbounds %S.gen.Loop, ptr %t418, i64 %t417 @@ -54243,11 +54269,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range5337, label %inrange5338 -range5337: + br i1 %t8, label %range5341, label %inrange5342 +range5341: call void @finch_panic_index(ptr @.str.3370, i64 2589, i64 0, i64 %t7) unreachable -inrange5338: +inrange5342: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -54258,8 +54284,8 @@ inrange5338: store %S.ast.Type %t15, ptr %a16 %t17 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t18 = load i1, ptr %t17 - br i1 %t18, label %then5339, label %else5340 -then5339: + br i1 %t18, label %then5343, label %else5344 +then5343: %t19 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 %t20 = getelementptr inbounds %S.gen.Place, ptr %t19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 @@ -54280,8 +54306,8 @@ then5339: store %S.ast.Type %t32, ptr %a16 store %S.ast.Type %t33, ptr %a34 call void @finch.drop.S_ast_Type(ptr %a34) - br label %endif5341 -else5340: + br label %endif5345 +else5344: %t35 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 %t36 = getelementptr inbounds %S.gen.Val, ptr %t35, i32 0, i32 1 %t37 = load %S.ast.Type, ptr %t36 @@ -54296,11 +54322,11 @@ else5340: %t44 = load %S.ast.Node, ptr %a2 %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null - br i1 %t46, label %panic5342, label %ok5343 -panic5342: + br i1 %t46, label %panic5346, label %ok5347 +panic5346: call void @finch_panic(ptr @.str.3374, i64 2597, ptr @.str.3375) unreachable -ok5343: +ok5347: %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 25 %t48 = load i64, ptr %t47 call void @finch_str_from_int(ptr %a49, i64 %t48) @@ -54325,16 +54351,16 @@ ok5343: store { ptr, i64, i64 } %t61, ptr %a14 store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_drop(ptr %a65) - br label %endif5341 -endif5341: + br label %endif5345 +endif5345: %t66 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t67 = load { ptr, i64, i64 }, ptr %t66 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.3376, i64 3, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 - br i1 %t71, label %then5344, label %endif5346 -then5344: + br i1 %t71, label %then5348, label %endif5350 +then5348: %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Node, ptr %a2 %t74 = load { ptr, i64, i64 }, ptr %a14 @@ -54348,40 +54374,40 @@ then5344: call void @finch_str_drop(ptr %a14) call void @finch.drop.S_gen_Ref(ptr %a13) ret void -endif5346: +endif5350: %t79 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.3377, i64 5, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp eq i32 %t83, 0 - br label %logic.from5347 -logic.from5347: - br i1 %t84, label %logic.rhs5348, label %logic.end5349 -logic.rhs5348: + br label %logic.from5351 +logic.from5351: + br i1 %t84, label %logic.rhs5352, label %logic.end5353 +logic.rhs5352: %t85 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 store { ptr, i64, i64 } { ptr @.str.3378, i64 3, i64 0 }, ptr %a88 %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) %t90 = icmp eq i32 %t89, 0 - br label %logic.rend5350 -logic.rend5350: - br label %logic.end5349 -logic.end5349: - %t91 = phi i1 [ false, %logic.from5347 ], [ %t90, %logic.rend5350 ] - br i1 %t91, label %then5351, label %endif5353 -then5351: + br label %logic.rend5354 +logic.rend5354: + br label %logic.end5353 +logic.end5353: + %t91 = phi i1 [ false, %logic.from5351 ], [ %t90, %logic.rend5354 ] + br i1 %t91, label %then5355, label %endif5357 +then5355: %t92 = load ptr, ptr %a1 %t93 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t94 = load { ptr, i64, i64 }, ptr %t93 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 0, %t95 - br i1 %t96, label %range5354, label %inrange5355 -range5354: + br i1 %t96, label %range5358, label %inrange5359 +range5358: call void @finch_panic_index(ptr @.str.3379, i64 2605, i64 0, i64 %t95) unreachable -inrange5355: +inrange5359: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds %S.ast.Node, ptr %t97, i64 0 %t99 = load %S.ast.Node, ptr %t98 @@ -54402,8 +54428,8 @@ inrange5355: call void @finch.gen.fail(ptr %t92, %S.ast.Node %t99, { ptr, i64, i64 } %t111) store { ptr, i64, i64 } %t111, ptr %a112 call void @finch_str_drop(ptr %a112) - br label %endif5353 -endif5353: + br label %endif5357 +endif5357: %t113 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3382, i64 4, i64 0 }) store %S.ast.Type %t113, ptr %a114 %t115 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 @@ -54412,17 +54438,17 @@ endif5353: store { ptr, i64, i64 } { ptr @.str.3383, i64 5, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 - br i1 %t120, label %then5356, label %endif5358 -then5356: + br i1 %t120, label %then5360, label %endif5362 +then5360: %t121 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 1 %t122 = load { ptr, i64, i64 }, ptr %t121 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 0, %t123 - br i1 %t124, label %range5359, label %inrange5360 -range5359: + br i1 %t124, label %range5363, label %inrange5364 +range5363: call void @finch_panic_index(ptr @.str.3384, i64 2609, i64 0, i64 %t123) unreachable -inrange5360: +inrange5364: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i64 0 %t127 = load %S.ast.Type, ptr %t126 @@ -54433,36 +54459,36 @@ inrange5360: store %S.ast.Type %t130, ptr %a114 store %S.ast.Type %t131, ptr %a132 call void @finch.drop.S_ast_Type(ptr %a132) - br label %endif5358 -endif5358: + br label %endif5362 +endif5362: %t133 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t134 = load i1, ptr %t133 - br label %logic.from5361 -logic.from5361: - br i1 %t134, label %logic.rhs5362, label %logic.end5363 -logic.rhs5362: + br label %logic.from5365 +logic.from5365: + br i1 %t134, label %logic.rhs5366, label %logic.end5367 +logic.rhs5366: %t135 = load ptr, ptr %a1 %t136 = load %S.ast.Type, ptr %a114 %t137 = call i1 @finch.gen.owning(ptr %t135, %S.ast.Type %t136) - br label %logic.rend5364 -logic.rend5364: - br label %logic.end5363 -logic.end5363: - %t138 = phi i1 [ false, %logic.from5361 ], [ %t137, %logic.rend5364 ] - br label %logic.from5365 -logic.from5365: - br i1 %t138, label %logic.rhs5366, label %logic.end5367 -logic.rhs5366: + br label %logic.rend5368 +logic.rend5368: + br label %logic.end5367 +logic.end5367: + %t138 = phi i1 [ false, %logic.from5365 ], [ %t137, %logic.rend5368 ] + br label %logic.from5369 +logic.from5369: + br i1 %t138, label %logic.rhs5370, label %logic.end5371 +logic.rhs5370: %t139 = load ptr, ptr %a1 %t140 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t141 = load { ptr, i64, i64 }, ptr %t140 %t142 = extractvalue { ptr, i64, i64 } %t141, 1 %t143 = icmp uge i64 0, %t142 - br i1 %t143, label %range5368, label %inrange5369 -range5368: + br i1 %t143, label %range5372, label %inrange5373 +range5372: call void @finch_panic_index(ptr @.str.3385, i64 2611, i64 0, i64 %t142) unreachable -inrange5369: +inrange5373: %t144 = extractvalue { ptr, i64, i64 } %t141, 0 %t145 = getelementptr inbounds %S.ast.Node, ptr %t144, i64 0 %t146 = load %S.ast.Node, ptr %t145 @@ -54471,22 +54497,22 @@ inrange5369: %t149 = load { ptr, i64, i64 }, ptr %t148 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 1, %t150 - br i1 %t151, label %range5370, label %inrange5371 -range5370: + br i1 %t151, label %range5374, label %inrange5375 +range5374: call void @finch_panic_index(ptr @.str.3386, i64 2611, i64 1, i64 %t150) unreachable -inrange5371: +inrange5375: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 1 %t154 = load %S.ast.Node, ptr %t153 %t155 = call i1 @finch.gen.mutates(ptr %t139, { ptr, i64, i64 } %t147, %S.ast.Node %t154) store { ptr, i64, i64 } %t147, ptr %a156 call void @finch_str_drop(ptr %a156) - br label %logic.rend5372 -logic.rend5372: - br label %logic.end5367 -logic.end5367: - %t157 = phi i1 [ false, %logic.from5365 ], [ %t155, %logic.rend5372 ] + br label %logic.rend5376 +logic.rend5376: + br label %logic.end5371 +logic.end5371: + %t157 = phi i1 [ false, %logic.from5369 ], [ %t155, %logic.rend5376 ] store i1 %t157, ptr %a158 %t159 = load ptr, ptr %a1 %t160 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t159, { ptr, i64, i64 } { ptr @.str.3387, i64 3, i64 0 }) @@ -54621,8 +54647,8 @@ logic.end5367: call void @finch_str_drop(ptr %a271) store { ptr, i64, i64 } %t270, ptr %a272 %t273 = load i1, ptr %a158 - br i1 %t273, label %then5373, label %endif5375 -then5373: + br i1 %t273, label %then5377, label %endif5379 +then5377: %t274 = load ptr, ptr %a1 %t275 = load { ptr, i64, i64 }, ptr %a272 %t276 = load %S.ast.Type, ptr %a114 @@ -54631,15 +54657,15 @@ then5373: store { ptr, i64, i64 } %t277, ptr %a272 store { ptr, i64, i64 } %t278, ptr %a279 call void @finch_str_drop(ptr %a279) - br label %endif5375 -endif5375: + br label %endif5379 +endif5379: %t280 = load ptr, ptr %a1 %t281 = icmp eq ptr %t280, null - br i1 %t281, label %panic5376, label %ok5377 -panic5376: + br i1 %t281, label %panic5380, label %ok5381 +panic5380: call void @finch_panic(ptr @.str.3404, i64 2631, ptr @.str.3405) unreachable -ok5377: +ok5381: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 12 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 %t284 = load { ptr, i64, i64 }, ptr %a172 @@ -54654,22 +54680,22 @@ ok5377: %t293 = insertvalue %S.gen.Loop %t288, { ptr, i64, i64 } %t292, 1 %t294 = load ptr, ptr %a1 %t295 = icmp eq ptr %t294, null - br i1 %t295, label %panic5378, label %ok5379 -panic5378: + br i1 %t295, label %panic5382, label %ok5383 +panic5382: call void @finch_panic(ptr @.str.3406, i64 2631, ptr @.str.3407) unreachable -ok5379: +ok5383: %t296 = getelementptr inbounds %S.gen.Gen, ptr %t294, i32 0, i32 10 %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i32 0, i32 1 %t298 = load i64, ptr %t297 %t299 = insertvalue %S.gen.Loop %t293, i64 %t298, 2 %t300 = load ptr, ptr %a1 %t301 = icmp eq ptr %t300, null - br i1 %t301, label %panic5380, label %ok5381 -panic5380: + br i1 %t301, label %panic5384, label %ok5385 +panic5384: call void @finch_panic(ptr @.str.3408, i64 2631, ptr @.str.3409) unreachable -ok5381: +ok5385: %t302 = getelementptr inbounds %S.gen.Gen, ptr %t300, i32 0, i32 11 %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i32 0, i32 1 %t304 = load i64, ptr %t303 @@ -54693,8 +54719,8 @@ ok5381: %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 %t319 = load i64, ptr %t318 %t320 = icmp sgt i64 %t319, 0 - br i1 %t320, label %then5382, label %endif5384 -then5382: + br i1 %t320, label %then5386, label %endif5388 +then5386: %t321 = load ptr, ptr %a1 %t322 = load %S.ast.Node, ptr %a2 %t323 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -54715,8 +54741,8 @@ then5382: store { ptr, i64, i64 } %t334, ptr %a316 store { ptr, i64, i64 } %t335, ptr %a336 call void @finch_str_drop(ptr %a336) - br label %endif5384 -endif5384: + br label %endif5388 +endif5388: %t337 = load ptr, ptr %a1 %t338 = load %S.ast.Node, ptr %a2 %t339 = load { ptr, i64, i64 }, ptr %a316 @@ -54731,11 +54757,11 @@ endif5384: %t347 = load { ptr, i64, i64 }, ptr %t346 %t348 = extractvalue { ptr, i64, i64 } %t347, 1 %t349 = icmp uge i64 1, %t348 - br i1 %t349, label %range5385, label %inrange5386 -range5385: + br i1 %t349, label %range5389, label %inrange5390 +range5389: call void @finch_panic_index(ptr @.str.3411, i64 2639, i64 1, i64 %t348) unreachable -inrange5386: +inrange5390: %t350 = extractvalue { ptr, i64, i64 } %t347, 0 %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 1 %t352 = load %S.ast.Node, ptr %t351 @@ -54744,20 +54770,20 @@ inrange5386: call void @finch.gen.popScope(ptr %t353) %t354 = load ptr, ptr %a1 %t355 = icmp eq ptr %t354, null - br i1 %t355, label %panic5387, label %ok5388 -panic5387: + br i1 %t355, label %panic5391, label %ok5392 +panic5391: call void @finch_panic(ptr @.str.3412, i64 2641, ptr @.str.3413) unreachable -ok5388: +ok5392: %t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 12 %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 %t358 = load i64, ptr %t357 %t359 = icmp eq i64 %t358, 0 - br i1 %t359, label %panic5389, label %ok5390 -panic5389: + br i1 %t359, label %panic5393, label %ok5394 +panic5393: call void @finch_panic(ptr @.str.3414, i64 2641, ptr @.str.3415) unreachable -ok5390: +ok5394: %t360 = sub i64 %t358, 1 %t361 = load ptr, ptr %t356 %t362 = getelementptr inbounds %S.gen.Loop, ptr %t361, i64 %t360 @@ -54947,38 +54973,38 @@ entry: store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic5391, label %ok5392 -panic5391: + br i1 %t4, label %panic5395, label %ok5396 +panic5395: call void @finch_panic(ptr @.str.3420, i64 2652, ptr @.str.3421) unreachable -ok5392: +ok5396: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 - br i1 %t7, label %then5393, label %endif5395 -then5393: + br i1 %t7, label %then5397, label %endif5399 +then5397: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3422, i64 33, i64 0 }) - br label %endif5395 -endif5395: + br label %endif5399 +endif5399: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 - br label %logic.from5396 -logic.from5396: - br i1 %t13, label %logic.rhs5397, label %logic.end5398 -logic.rhs5397: + br label %logic.from5400 +logic.from5400: + br i1 %t13, label %logic.rhs5401, label %logic.end5402 +logic.rhs5401: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t15 = load { ptr, i64, i64 }, ptr %t14 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 0, %t16 - br i1 %t17, label %range5399, label %inrange5400 -range5399: + br i1 %t17, label %range5403, label %inrange5404 +range5403: call void @finch_panic_index(ptr @.str.3423, i64 2656, i64 0, i64 %t16) unreachable -inrange5400: +inrange5404: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 %t20 = getelementptr inbounds %S.ast.Node, ptr %t19, i32 0, i32 0 @@ -54987,24 +55013,24 @@ inrange5400: store { ptr, i64, i64 } { ptr @.str.3424, i64 4, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 - br label %logic.rend5401 -logic.rend5401: - br label %logic.end5398 -logic.end5398: - %t26 = phi i1 [ false, %logic.from5396 ], [ %t25, %logic.rend5401 ] - br label %logic.from5402 -logic.from5402: - br i1 %t26, label %logic.rhs5403, label %logic.end5404 -logic.rhs5403: + br label %logic.rend5405 +logic.rend5405: + br label %logic.end5402 +logic.end5402: + %t26 = phi i1 [ false, %logic.from5400 ], [ %t25, %logic.rend5405 ] + br label %logic.from5406 +logic.from5406: + br i1 %t26, label %logic.rhs5407, label %logic.end5408 +logic.rhs5407: %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 - br i1 %t30, label %range5405, label %inrange5406 -range5405: + br i1 %t30, label %range5409, label %inrange5410 +range5409: call void @finch_panic_index(ptr @.str.3425, i64 2656, i64 0, i64 %t29) unreachable -inrange5406: +inrange5410: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 0 %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i32 0, i32 1 @@ -55013,22 +55039,22 @@ inrange5406: store { ptr, i64, i64 } { ptr @.str.3426, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br label %logic.rend5407 -logic.rend5407: - br label %logic.end5404 -logic.end5404: - %t39 = phi i1 [ false, %logic.from5402 ], [ %t38, %logic.rend5407 ] - br i1 %t39, label %then5408, label %endif5410 -then5408: + br label %logic.rend5411 +logic.rend5411: + br label %logic.end5408 +logic.end5408: + %t39 = phi i1 [ false, %logic.from5406 ], [ %t38, %logic.rend5411 ] + br i1 %t39, label %then5412, label %endif5414 +then5412: %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 0, %t42 - br i1 %t43, label %range5411, label %inrange5412 -range5411: + br i1 %t43, label %range5415, label %inrange5416 +range5415: call void @finch_panic_index(ptr @.str.3427, i64 2657, i64 0, i64 %t42) unreachable -inrange5412: +inrange5416: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 0 %t46 = load %S.ast.Node, ptr %t45 @@ -55038,25 +55064,25 @@ inrange5412: store %S.ast.Node %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null - br i1 %t52, label %panic5413, label %ok5414 -panic5413: + br i1 %t52, label %panic5417, label %ok5418 +panic5417: call void @finch_panic(ptr @.str.3428, i64 2658, ptr @.str.3429) unreachable -ok5414: +ok5418: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 13 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 9 %t55 = load i1, ptr %t54 %t56 = xor i1 %t55, true - br i1 %t56, label %then5415, label %endif5417 -then5415: + br i1 %t56, label %then5419, label %endif5421 +then5419: store { ptr, i64, i64 } { ptr @.str.3430, i64 1, i64 0 }, ptr %a57 %t58 = load ptr, ptr %a1 %t59 = icmp eq ptr %t58, null - br i1 %t59, label %panic5418, label %ok5419 -panic5418: + br i1 %t59, label %panic5422, label %ok5423 +panic5422: call void @finch_panic(ptr @.str.3431, i64 2660, ptr @.str.3432) unreachable -ok5419: +ok5423: %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 13 %t61 = getelementptr inbounds %S.gen.FnSig, ptr %t60, i32 0, i32 12 %t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i32 0, i32 0 @@ -55065,15 +55091,15 @@ ok5419: store { ptr, i64, i64 } { ptr @.str.3433, i64 4, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp eq i32 %t66, 0 - br i1 %t67, label %then5420, label %endif5422 -then5420: + br i1 %t67, label %then5424, label %endif5426 +then5424: %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null - br i1 %t69, label %panic5423, label %ok5424 -panic5423: + br i1 %t69, label %panic5427, label %ok5428 +panic5427: call void @finch_panic(ptr @.str.3434, i64 2661, ptr @.str.3435) unreachable -ok5424: +ok5428: %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 13 %t71 = getelementptr inbounds %S.gen.FnSig, ptr %t70, i32 0, i32 12 %t72 = load %S.ast.Type, ptr %t71 @@ -55088,17 +55114,17 @@ ok5424: store { ptr, i64, i64 } %t78, ptr %a57 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif5422 -endif5422: + br label %endif5426 +endif5426: %t81 = load ptr, ptr %a1 %t82 = load %S.ast.Node, ptr %a50 %t83 = load ptr, ptr %a1 %t84 = icmp eq ptr %t83, null - br i1 %t84, label %panic5425, label %ok5426 -panic5425: + br i1 %t84, label %panic5429, label %ok5430 +panic5429: call void @finch_panic(ptr @.str.3438, i64 2663, ptr @.str.3439) unreachable -ok5426: +ok5430: %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 13 %t86 = getelementptr inbounds %S.gen.FnSig, ptr %t85, i32 0, i32 1 %t87 = load { ptr, i64, i64 }, ptr %t86 @@ -55129,8 +55155,8 @@ ok5426: store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a57) - br label %endif5417 -endif5417: + br label %endif5421 +endif5421: %t109 = load ptr, ptr %a1 %t110 = load %S.ast.Node, ptr %a50 call void @finch.gen.checkArgs(ptr %t109, %S.ast.Node %t110, i64 0, i64 1, { ptr, i64, i64 } { ptr @.str.3442, i64 5, i64 0 }) @@ -55140,11 +55166,11 @@ endif5417: %t114 = load { ptr, i64, i64 }, ptr %t113 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 0, %t115 - br i1 %t116, label %range5427, label %inrange5428 -range5427: + br i1 %t116, label %range5431, label %inrange5432 +range5431: call void @finch_panic_index(ptr @.str.3443, i64 2666, i64 0, i64 %t115) unreachable -inrange5428: +inrange5432: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds %S.ast.Node, ptr %t117, i64 0 %t119 = load %S.ast.Node, ptr %t118 @@ -55154,11 +55180,11 @@ inrange5428: %t123 = load { ptr, i64, i64 }, ptr %t122 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 0, %t124 - br i1 %t125, label %range5429, label %inrange5430 -range5429: + br i1 %t125, label %range5433, label %inrange5434 +range5433: call void @finch_panic_index(ptr @.str.3445, i64 2666, i64 0, i64 %t124) unreachable -inrange5430: +inrange5434: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds %S.ast.Node, ptr %t126, i64 0 %t128 = load %S.ast.Node, ptr %t127 @@ -55180,11 +55206,11 @@ inrange5430: %t140 = load ptr, ptr %a1 %t141 = load ptr, ptr %a1 %t142 = icmp eq ptr %t141, null - br i1 %t142, label %panic5431, label %ok5432 -panic5431: + br i1 %t142, label %panic5435, label %ok5436 +panic5435: call void @finch_panic(ptr @.str.3448, i64 2670, ptr @.str.3449) unreachable -ok5432: +ok5436: %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 13 %t144 = load %S.gen.FnSig, ptr %t143 %t145 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t140, %S.gen.FnSig %t144) @@ -55204,11 +55230,11 @@ ok5432: %t157 = load ptr, ptr %a1 %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null - br i1 %t159, label %panic5433, label %ok5434 -panic5433: + br i1 %t159, label %panic5437, label %ok5438 +panic5437: call void @finch_panic(ptr @.str.3452, i64 2670, ptr @.str.3453) unreachable -ok5434: +ok5438: %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 13 %t161 = load %S.gen.FnSig, ptr %t160 %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t157, %S.gen.FnSig %t161) @@ -55253,25 +55279,25 @@ ok5434: call void @finch_str_drop(ptr %a192) %t193 = load ptr, ptr %a1 %t194 = icmp eq ptr %t193, null - br i1 %t194, label %panic5435, label %ok5436 -panic5435: + br i1 %t194, label %panic5439, label %ok5440 +panic5439: call void @finch_panic(ptr @.str.3456, i64 2671, ptr @.str.3457) unreachable -ok5436: +ok5440: %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 store i1 true, ptr %t195 call void @finch_str_drop(ptr %a136) call void @finch.drop.S_gen_Val(ptr %a132) call void @finch.drop.S_ast_Node(ptr %a50) ret void -endif5410: +endif5414: %t196 = load ptr, ptr %a1 %t197 = icmp eq ptr %t196, null - br i1 %t197, label %panic5437, label %ok5438 -panic5437: + br i1 %t197, label %panic5441, label %ok5442 +panic5441: call void @finch_panic(ptr @.str.3458, i64 2674, ptr @.str.3459) unreachable -ok5438: +ok5442: %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 13 %t199 = getelementptr inbounds %S.gen.FnSig, ptr %t198, i32 0, i32 12 %t200 = getelementptr inbounds %S.ast.Type, ptr %t199, i32 0, i32 0 @@ -55280,34 +55306,34 @@ ok5438: store { ptr, i64, i64 } { ptr @.str.3460, i64 4, i64 0 }, ptr %a203 %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) %t205 = icmp ne i32 %t204, 0 - br i1 %t205, label %then5439, label %endif5441 -then5439: + br i1 %t205, label %then5443, label %endif5445 +then5443: %t206 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 %t208 = load i64, ptr %t207 %t209 = icmp sgt i64 %t208, 0 - br i1 %t209, label %then5442, label %endif5444 -then5442: + br i1 %t209, label %then5446, label %endif5448 +then5446: %t210 = load ptr, ptr %a1 %t211 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t212 = load { ptr, i64, i64 }, ptr %t211 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 0, %t213 - br i1 %t214, label %range5445, label %inrange5446 -range5445: + br i1 %t214, label %range5449, label %inrange5450 +range5449: call void @finch_panic_index(ptr @.str.3461, i64 2676, i64 0, i64 %t213) unreachable -inrange5446: +inrange5450: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 0 %t217 = load %S.ast.Node, ptr %t216 %t218 = load ptr, ptr %a1 %t219 = icmp eq ptr %t218, null - br i1 %t219, label %panic5447, label %ok5448 -panic5447: + br i1 %t219, label %panic5451, label %ok5452 +panic5451: call void @finch_panic(ptr @.str.3463, i64 2676, ptr @.str.3464) unreachable -ok5448: +ok5452: %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 13 %t221 = getelementptr inbounds %S.gen.FnSig, ptr %t220, i32 0, i32 1 %t222 = load { ptr, i64, i64 }, ptr %t221 @@ -55324,33 +55350,33 @@ ok5448: call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t231) store { ptr, i64, i64 } %t231, ptr %a232 call void @finch_str_drop(ptr %a232) - br label %endif5444 -endif5444: + br label %endif5448 +endif5448: %t233 = load ptr, ptr %a1 call void @finch.gen.dropPending(ptr %t233, i64 0) %t234 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t234, i64 0) %t235 = load ptr, ptr %a1 %t236 = icmp eq ptr %t235, null - br i1 %t236, label %panic5449, label %ok5450 -panic5449: + br i1 %t236, label %panic5453, label %ok5454 +panic5453: call void @finch_panic(ptr @.str.3466, i64 2680, ptr @.str.3467) unreachable -ok5450: +ok5454: %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 13 %t238 = getelementptr inbounds %S.gen.FnSig, ptr %t237, i32 0, i32 9 %t239 = load i1, ptr %t238 - br i1 %t239, label %then5451, label %else5452 -then5451: + br i1 %t239, label %then5455, label %else5456 +then5455: %t240 = load ptr, ptr %a1 %t241 = load ptr, ptr %a1 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null - br i1 %t243, label %panic5454, label %ok5455 -panic5454: + br i1 %t243, label %panic5458, label %ok5459 +panic5458: call void @finch_panic(ptr @.str.3469, i64 2681, ptr @.str.3470) unreachable -ok5455: +ok5459: %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 13 %t245 = load %S.gen.FnSig, ptr %t244 %t246 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t241, %S.gen.FnSig %t245) @@ -55369,38 +55395,38 @@ ok5455: call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t256) store { ptr, i64, i64 } %t256, ptr %a257 call void @finch_str_drop(ptr %a257) - br label %endif5453 -else5452: + br label %endif5457 +else5456: %t258 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t258, { ptr, i64, i64 } { ptr @.str.3472, i64 8, i64 0 }) - br label %endif5453 -endif5453: + br label %endif5457 +endif5457: %t259 = load ptr, ptr %a1 %t260 = icmp eq ptr %t259, null - br i1 %t260, label %panic5456, label %ok5457 -panic5456: + br i1 %t260, label %panic5460, label %ok5461 +panic5460: call void @finch_panic(ptr @.str.3473, i64 2685, ptr @.str.3474) unreachable -ok5457: +ok5461: %t261 = getelementptr inbounds %S.gen.Gen, ptr %t259, i32 0, i32 9 store i1 true, ptr %t261 ret void -endif5441: +endif5445: %t262 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i32 0, i32 1 %t264 = load i64, ptr %t263 %t265 = icmp eq i64 %t264, 0 - br i1 %t265, label %then5458, label %endif5460 -then5458: + br i1 %t265, label %then5462, label %endif5464 +then5462: %t266 = load ptr, ptr %a1 %t267 = load %S.ast.Node, ptr %a2 %t268 = load ptr, ptr %a1 %t269 = icmp eq ptr %t268, null - br i1 %t269, label %panic5461, label %ok5462 -panic5461: + br i1 %t269, label %panic5465, label %ok5466 +panic5465: call void @finch_panic(ptr @.str.3476, i64 2689, ptr @.str.3477) unreachable -ok5462: +ok5466: %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 13 %t271 = getelementptr inbounds %S.gen.FnSig, ptr %t270, i32 0, i32 1 %t272 = load { ptr, i64, i64 }, ptr %t271 @@ -55416,11 +55442,11 @@ ok5462: %t281 = load { ptr, i64, i64 }, ptr %a277 %t282 = load ptr, ptr %a1 %t283 = icmp eq ptr %t282, null - br i1 %t283, label %panic5463, label %ok5464 -panic5463: + br i1 %t283, label %panic5467, label %ok5468 +panic5467: call void @finch_panic(ptr @.str.3479, i64 2689, ptr @.str.3480) unreachable -ok5464: +ok5468: %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 13 %t285 = getelementptr inbounds %S.gen.FnSig, ptr %t284, i32 0, i32 12 %t286 = load %S.ast.Type, ptr %t285 @@ -55436,17 +55462,17 @@ ok5464: call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t293) store { ptr, i64, i64 } %t293, ptr %a294 call void @finch_str_drop(ptr %a294) - br label %endif5460 -endif5460: + br label %endif5464 +endif5464: %t295 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t296 = load { ptr, i64, i64 }, ptr %t295 %t297 = extractvalue { ptr, i64, i64 } %t296, 1 %t298 = icmp uge i64 0, %t297 - br i1 %t298, label %range5465, label %inrange5466 -range5465: + br i1 %t298, label %range5469, label %inrange5470 +range5469: call void @finch_panic_index(ptr @.str.3481, i64 2692, i64 0, i64 %t297) unreachable -inrange5466: +inrange5470: %t299 = extractvalue { ptr, i64, i64 } %t296, 0 %t300 = getelementptr inbounds %S.ast.Node, ptr %t299, i64 0 %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i32 0, i32 0 @@ -55455,17 +55481,17 @@ inrange5466: store { ptr, i64, i64 } { ptr @.str.3482, i64 3, i64 0 }, ptr %a304 %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) %t306 = icmp ne i32 %t305, 0 - br i1 %t306, label %then5467, label %endif5469 -then5467: + br i1 %t306, label %then5471, label %endif5473 +then5471: %t307 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t308 = load { ptr, i64, i64 }, ptr %t307 %t309 = extractvalue { ptr, i64, i64 } %t308, 1 %t310 = icmp uge i64 0, %t309 - br i1 %t310, label %range5470, label %inrange5471 -range5470: + br i1 %t310, label %range5474, label %inrange5475 +range5474: call void @finch_panic_index(ptr @.str.3483, i64 2693, i64 0, i64 %t309) unreachable -inrange5471: +inrange5475: %t311 = extractvalue { ptr, i64, i64 } %t308, 0 %t312 = getelementptr inbounds %S.ast.Node, ptr %t311, i64 0 %t313 = getelementptr inbounds %S.ast.Node, ptr %t312, i32 0, i32 1 @@ -55476,71 +55502,71 @@ inrange5471: store { ptr, i64, i64 } %t317, ptr %a318 %t319 = load ptr, ptr %a1 %t320 = icmp eq ptr %t319, null - br i1 %t320, label %panic5472, label %ok5473 -panic5472: + br i1 %t320, label %panic5476, label %ok5477 +panic5476: call void @finch_panic(ptr @.str.3484, i64 2694, ptr @.str.3485) unreachable -ok5473: +ok5477: %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 10 %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i32 0, i32 1 %t323 = load i64, ptr %t322 store i64 %t323, ptr %a324 - br label %while.cond5474 -while.cond5474: + br label %while.cond5478 +while.cond5478: %t325 = load i64, ptr %a324 %t326 = icmp sgt i64 %t325, 0 - br i1 %t326, label %while.body5475, label %while.end5476 -while.body5475: + br i1 %t326, label %while.body5479, label %while.end5480 +while.body5479: %t327 = load i64, ptr %a324 %t328 = sub i64 %t327, 1 store i64 %t328, ptr %a324 store i64 -1, ptr %a329 %t330 = load ptr, ptr %a1 %t331 = icmp eq ptr %t330, null - br i1 %t331, label %panic5477, label %ok5478 -panic5477: + br i1 %t331, label %panic5481, label %ok5482 +panic5481: call void @finch_panic(ptr @.str.3486, i64 2698, ptr @.str.3487) unreachable -ok5478: +ok5482: %t332 = getelementptr inbounds %S.gen.Gen, ptr %t330, i32 0, i32 10 %t333 = load i64, ptr %a324 %t334 = load { ptr, i64, i64 }, ptr %t332 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 - br i1 %t336, label %range5479, label %inrange5480 -range5479: + br i1 %t336, label %range5483, label %inrange5484 +range5483: call void @finch_panic_index(ptr @.str.3488, i64 2698, i64 %t333, i64 %t335) unreachable -inrange5480: +inrange5484: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds %S.gen.Scope, ptr %t337, i64 %t333 %t339 = getelementptr inbounds %S.gen.Scope, ptr %t338, i32 0, i32 0 %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %t339, i32 0, i32 1 %t341 = load i64, ptr %t340 store i64 0, ptr %a342 - br label %for.cond5481 -for.cond5481: + br label %for.cond5485 +for.cond5485: %t343 = load i64, ptr %a342 %t344 = icmp slt i64 %t343, %t341 - br i1 %t344, label %for.body5482, label %for.end5484 -for.body5482: + br i1 %t344, label %for.body5486, label %for.end5488 +for.body5486: %t345 = load ptr, ptr %a1 %t346 = icmp eq ptr %t345, null - br i1 %t346, label %panic5485, label %ok5486 -panic5485: + br i1 %t346, label %panic5489, label %ok5490 +panic5489: call void @finch_panic(ptr @.str.3489, i64 2699, ptr @.str.3490) unreachable -ok5486: +ok5490: %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 10 %t348 = load i64, ptr %a324 %t349 = load { ptr, i64, i64 }, ptr %t347 %t350 = extractvalue { ptr, i64, i64 } %t349, 1 %t351 = icmp uge i64 %t348, %t350 - br i1 %t351, label %range5487, label %inrange5488 -range5487: + br i1 %t351, label %range5491, label %inrange5492 +range5491: call void @finch_panic_index(ptr @.str.3491, i64 2699, i64 %t348, i64 %t350) unreachable -inrange5488: +inrange5492: %t352 = extractvalue { ptr, i64, i64 } %t349, 0 %t353 = getelementptr inbounds %S.gen.Scope, ptr %t352, i64 %t348 %t354 = getelementptr inbounds %S.gen.Scope, ptr %t353, i32 0, i32 0 @@ -55548,11 +55574,11 @@ inrange5488: %t356 = load { ptr, i64, i64 }, ptr %t354 %t357 = extractvalue { ptr, i64, i64 } %t356, 1 %t358 = icmp uge i64 %t355, %t357 - br i1 %t358, label %range5489, label %inrange5490 -range5489: + br i1 %t358, label %range5493, label %inrange5494 +range5493: call void @finch_panic_index(ptr @.str.3492, i64 2699, i64 %t355, i64 %t357) unreachable -inrange5490: +inrange5494: %t359 = extractvalue { ptr, i64, i64 } %t356, 0 %t360 = getelementptr inbounds %S.gen.Var, ptr %t359, i64 %t355 %t361 = getelementptr inbounds %S.gen.Var, ptr %t360, i32 0, i32 0 @@ -55562,40 +55588,40 @@ inrange5490: store { ptr, i64, i64 } %t363, ptr %a365 %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) %t367 = icmp ne i32 %t366, 0 - br label %logic.from5491 -logic.from5491: - br i1 %t367, label %logic.rhs5492, label %logic.end5493 -logic.rhs5492: + br label %logic.from5495 +logic.from5495: + br i1 %t367, label %logic.rhs5496, label %logic.end5497 +logic.rhs5496: %t368 = load ptr, ptr %a1 %t369 = icmp eq ptr %t368, null - br i1 %t369, label %panic5494, label %ok5495 -panic5494: + br i1 %t369, label %panic5498, label %ok5499 +panic5498: call void @finch_panic(ptr @.str.3493, i64 2699, ptr @.str.3494) unreachable -ok5495: +ok5499: %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 44 %t371 = load i1, ptr %t370 - br label %logic.from5496 -logic.from5496: - br i1 %t371, label %logic.rhs5497, label %logic.end5498 -logic.rhs5497: + br label %logic.from5500 +logic.from5500: + br i1 %t371, label %logic.rhs5501, label %logic.end5502 +logic.rhs5501: %t372 = load ptr, ptr %a1 %t373 = icmp eq ptr %t372, null - br i1 %t373, label %panic5499, label %ok5500 -panic5499: + br i1 %t373, label %panic5503, label %ok5504 +panic5503: call void @finch_panic(ptr @.str.3495, i64 2699, ptr @.str.3496) unreachable -ok5500: +ok5504: %t374 = getelementptr inbounds %S.gen.Gen, ptr %t372, i32 0, i32 10 %t375 = load i64, ptr %a324 %t376 = load { ptr, i64, i64 }, ptr %t374 %t377 = extractvalue { ptr, i64, i64 } %t376, 1 %t378 = icmp uge i64 %t375, %t377 - br i1 %t378, label %range5501, label %inrange5502 -range5501: + br i1 %t378, label %range5505, label %inrange5506 +range5505: call void @finch_panic_index(ptr @.str.3497, i64 2699, i64 %t375, i64 %t377) unreachable -inrange5502: +inrange5506: %t379 = extractvalue { ptr, i64, i64 } %t376, 0 %t380 = getelementptr inbounds %S.gen.Scope, ptr %t379, i64 %t375 %t381 = getelementptr inbounds %S.gen.Scope, ptr %t380, i32 0, i32 0 @@ -55603,72 +55629,72 @@ inrange5502: %t383 = load { ptr, i64, i64 }, ptr %t381 %t384 = extractvalue { ptr, i64, i64 } %t383, 1 %t385 = icmp uge i64 %t382, %t384 - br i1 %t385, label %range5503, label %inrange5504 -range5503: + br i1 %t385, label %range5507, label %inrange5508 +range5507: call void @finch_panic_index(ptr @.str.3498, i64 2699, i64 %t382, i64 %t384) unreachable -inrange5504: +inrange5508: %t386 = extractvalue { ptr, i64, i64 } %t383, 0 %t387 = getelementptr inbounds %S.gen.Var, ptr %t386, i64 %t382 %t388 = getelementptr inbounds %S.gen.Var, ptr %t387, i32 0, i32 4 %t389 = load i64, ptr %t388 %t390 = load ptr, ptr %a1 %t391 = icmp eq ptr %t390, null - br i1 %t391, label %panic5505, label %ok5506 -panic5505: + br i1 %t391, label %panic5509, label %ok5510 +panic5509: call void @finch_panic(ptr @.str.3499, i64 2699, ptr @.str.3500) unreachable -ok5506: +ok5510: %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 45 %t393 = load i64, ptr %t392 %t394 = icmp sge i64 %t389, %t393 - br label %logic.rend5507 -logic.rend5507: - br label %logic.end5498 -logic.end5498: - %t395 = phi i1 [ false, %logic.from5496 ], [ %t394, %logic.rend5507 ] + br label %logic.rend5511 +logic.rend5511: + br label %logic.end5502 +logic.end5502: + %t395 = phi i1 [ false, %logic.from5500 ], [ %t394, %logic.rend5511 ] %t396 = xor i1 %t395, true - br label %logic.rend5508 -logic.rend5508: - br label %logic.end5493 -logic.end5493: - %t397 = phi i1 [ false, %logic.from5491 ], [ %t396, %logic.rend5508 ] - br i1 %t397, label %then5509, label %endif5511 -then5509: + br label %logic.rend5512 +logic.rend5512: + br label %logic.end5497 +logic.end5497: + %t397 = phi i1 [ false, %logic.from5495 ], [ %t396, %logic.rend5512 ] + br i1 %t397, label %then5513, label %endif5515 +then5513: %t398 = load i64, ptr %a342 store i64 %t398, ptr %a329 - br label %endif5511 -endif5511: - br label %for.step5483 -for.step5483: + br label %endif5515 +endif5515: + br label %for.step5487 +for.step5487: %t399 = load i64, ptr %a342 %t400 = add i64 %t399, 1 store i64 %t400, ptr %a342 - br label %for.cond5481 -for.end5484: + br label %for.cond5485 +for.end5488: %t401 = load i64, ptr %a329 %t402 = icmp slt i64 %t401, 0 - br i1 %t402, label %then5512, label %endif5514 -then5512: - br label %while.cond5474 -endif5514: + br i1 %t402, label %then5516, label %endif5518 +then5516: + br label %while.cond5478 +endif5518: %t403 = load ptr, ptr %a1 %t404 = icmp eq ptr %t403, null - br i1 %t404, label %panic5515, label %ok5516 -panic5515: + br i1 %t404, label %panic5519, label %ok5520 +panic5519: call void @finch_panic(ptr @.str.3501, i64 2706, ptr @.str.3502) unreachable -ok5516: +ok5520: %t405 = getelementptr inbounds %S.gen.Gen, ptr %t403, i32 0, i32 10 %t406 = load i64, ptr %a324 %t407 = load { ptr, i64, i64 }, ptr %t405 %t408 = extractvalue { ptr, i64, i64 } %t407, 1 %t409 = icmp uge i64 %t406, %t408 - br i1 %t409, label %range5517, label %inrange5518 -range5517: + br i1 %t409, label %range5521, label %inrange5522 +range5521: call void @finch_panic_index(ptr @.str.3503, i64 2706, i64 %t406, i64 %t408) unreachable -inrange5518: +inrange5522: %t410 = extractvalue { ptr, i64, i64 } %t407, 0 %t411 = getelementptr inbounds %S.gen.Scope, ptr %t410, i64 %t406 %t412 = getelementptr inbounds %S.gen.Scope, ptr %t411, i32 0, i32 0 @@ -55676,11 +55702,11 @@ inrange5518: %t414 = load { ptr, i64, i64 }, ptr %t412 %t415 = extractvalue { ptr, i64, i64 } %t414, 1 %t416 = icmp uge i64 %t413, %t415 - br i1 %t416, label %range5519, label %inrange5520 -range5519: + br i1 %t416, label %range5523, label %inrange5524 +range5523: call void @finch_panic_index(ptr @.str.3504, i64 2706, i64 %t413, i64 %t415) unreachable -inrange5520: +inrange5524: %t417 = extractvalue { ptr, i64, i64 } %t414, 0 %t418 = getelementptr inbounds %S.gen.Var, ptr %t417, i64 %t413 %t419 = load %S.gen.Var, ptr %t418 @@ -55690,30 +55716,30 @@ inrange5520: store %S.gen.Var %t422, ptr %a423 %t424 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 5 %t425 = load i1, ptr %t424 - br label %logic.from5521 -logic.from5521: - br i1 %t425, label %logic.rhs5522, label %logic.end5523 -logic.rhs5522: + br label %logic.from5525 +logic.from5525: + br i1 %t425, label %logic.rhs5526, label %logic.end5527 +logic.rhs5526: %t426 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 %t427 = load %S.ast.Type, ptr %t426 %t428 = load ptr, ptr %a1 %t429 = icmp eq ptr %t428, null - br i1 %t429, label %panic5524, label %ok5525 -panic5524: + br i1 %t429, label %panic5528, label %ok5529 +panic5528: call void @finch_panic(ptr @.str.3505, i64 2707, ptr @.str.3506) unreachable -ok5525: +ok5529: %t430 = getelementptr inbounds %S.gen.Gen, ptr %t428, i32 0, i32 13 %t431 = getelementptr inbounds %S.gen.FnSig, ptr %t430, i32 0, i32 12 %t432 = load %S.ast.Type, ptr %t431 %t433 = call i1 @finch.ast.same(%S.ast.Type %t427, %S.ast.Type %t432) - br label %logic.rend5526 -logic.rend5526: - br label %logic.end5523 -logic.end5523: - %t434 = phi i1 [ false, %logic.from5521 ], [ %t433, %logic.rend5526 ] - br i1 %t434, label %then5527, label %endif5529 -then5527: + br label %logic.rend5530 +logic.rend5530: + br label %logic.end5527 +logic.end5527: + %t434 = phi i1 [ false, %logic.from5525 ], [ %t433, %logic.rend5530 ] + br i1 %t434, label %then5531, label %endif5533 +then5531: %t435 = load ptr, ptr %a1 %t436 = load ptr, ptr %a1 %t437 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 @@ -55727,21 +55753,21 @@ then5527: store { ptr, i64, i64 } %t442, ptr %a444 %t445 = load ptr, ptr %a1 %t446 = icmp eq ptr %t445, null - br i1 %t446, label %panic5530, label %ok5531 -panic5530: + br i1 %t446, label %panic5534, label %ok5535 +panic5534: call void @finch_panic(ptr @.str.3507, i64 2709, ptr @.str.3508) unreachable -ok5531: +ok5535: %t447 = getelementptr inbounds %S.gen.Gen, ptr %t445, i32 0, i32 10 %t448 = load i64, ptr %a324 %t449 = load { ptr, i64, i64 }, ptr %t447 %t450 = extractvalue { ptr, i64, i64 } %t449, 1 %t451 = icmp uge i64 %t448, %t450 - br i1 %t451, label %range5532, label %inrange5533 -range5532: + br i1 %t451, label %range5536, label %inrange5537 +range5536: call void @finch_panic_index(ptr @.str.3509, i64 2709, i64 %t448, i64 %t450) unreachable -inrange5533: +inrange5537: %t452 = extractvalue { ptr, i64, i64 } %t449, 0 %t453 = getelementptr inbounds %S.gen.Scope, ptr %t452, i64 %t448 %t454 = getelementptr inbounds %S.gen.Scope, ptr %t453, i32 0, i32 0 @@ -55749,11 +55775,11 @@ inrange5533: %t456 = load { ptr, i64, i64 }, ptr %t454 %t457 = extractvalue { ptr, i64, i64 } %t456, 1 %t458 = icmp uge i64 %t455, %t457 - br i1 %t458, label %range5534, label %inrange5535 -range5534: + br i1 %t458, label %range5538, label %inrange5539 +range5538: call void @finch_panic_index(ptr @.str.3510, i64 2709, i64 %t455, i64 %t457) unreachable -inrange5535: +inrange5539: %t459 = extractvalue { ptr, i64, i64 } %t456, 0 %t460 = getelementptr inbounds %S.gen.Var, ptr %t459, i64 %t455 %t461 = getelementptr inbounds %S.gen.Var, ptr %t460, i32 0, i32 6 @@ -55764,21 +55790,21 @@ inrange5535: call void @finch.gen.unwind(ptr %t463, i64 0) %t464 = load ptr, ptr %a1 %t465 = icmp eq ptr %t464, null - br i1 %t465, label %panic5536, label %ok5537 -panic5536: + br i1 %t465, label %panic5540, label %ok5541 +panic5540: call void @finch_panic(ptr @.str.3511, i64 2712, ptr @.str.3512) unreachable -ok5537: +ok5541: %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 10 %t467 = load i64, ptr %a324 %t468 = load { ptr, i64, i64 }, ptr %t466 %t469 = extractvalue { ptr, i64, i64 } %t468, 1 %t470 = icmp uge i64 %t467, %t469 - br i1 %t470, label %range5538, label %inrange5539 -range5538: + br i1 %t470, label %range5542, label %inrange5543 +range5542: call void @finch_panic_index(ptr @.str.3513, i64 2712, i64 %t467, i64 %t469) unreachable -inrange5539: +inrange5543: %t471 = extractvalue { ptr, i64, i64 } %t468, 0 %t472 = getelementptr inbounds %S.gen.Scope, ptr %t471, i64 %t467 %t473 = getelementptr inbounds %S.gen.Scope, ptr %t472, i32 0, i32 0 @@ -55786,11 +55812,11 @@ inrange5539: %t475 = load { ptr, i64, i64 }, ptr %t473 %t476 = extractvalue { ptr, i64, i64 } %t475, 1 %t477 = icmp uge i64 %t474, %t476 - br i1 %t477, label %range5540, label %inrange5541 -range5540: + br i1 %t477, label %range5544, label %inrange5545 +range5544: call void @finch_panic_index(ptr @.str.3514, i64 2712, i64 %t474, i64 %t476) unreachable -inrange5541: +inrange5545: %t478 = extractvalue { ptr, i64, i64 } %t475, 0 %t479 = getelementptr inbounds %S.gen.Var, ptr %t478, i64 %t474 %t480 = getelementptr inbounds %S.gen.Var, ptr %t479, i32 0, i32 6 @@ -55802,45 +55828,45 @@ inrange5541: call void @finch.drop.S_gen_Var(ptr %a423) call void @finch_str_drop(ptr %a318) ret void -endif5529: +endif5533: call void @finch.drop.S_gen_Var(ptr %a423) - br label %while.end5476 -while.end5476: + br label %while.end5480 +while.end5480: call void @finch_str_drop(ptr %a318) - br label %endif5469 -endif5469: + br label %endif5473 +endif5473: %t483 = load ptr, ptr %a1 %t484 = load ptr, ptr %a1 %t485 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t486 = load { ptr, i64, i64 }, ptr %t485 %t487 = extractvalue { ptr, i64, i64 } %t486, 1 %t488 = icmp uge i64 0, %t487 - br i1 %t488, label %range5542, label %inrange5543 -range5542: + br i1 %t488, label %range5546, label %inrange5547 +range5546: call void @finch_panic_index(ptr @.str.3515, i64 2719, i64 0, i64 %t487) unreachable -inrange5543: +inrange5547: %t489 = extractvalue { ptr, i64, i64 } %t486, 0 %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 %t491 = load %S.ast.Node, ptr %t490 %t492 = load ptr, ptr %a1 %t493 = icmp eq ptr %t492, null - br i1 %t493, label %panic5544, label %ok5545 -panic5544: + br i1 %t493, label %panic5548, label %ok5549 +panic5548: call void @finch_panic(ptr @.str.3516, i64 2719, ptr @.str.3517) unreachable -ok5545: +ok5549: %t494 = getelementptr inbounds %S.gen.Gen, ptr %t492, i32 0, i32 13 %t495 = getelementptr inbounds %S.gen.FnSig, ptr %t494, i32 0, i32 12 %t496 = load %S.ast.Type, ptr %t495 %t497 = call %S.gen.Val @finch.gen.exprWant(ptr %t484, %S.ast.Node %t491, %S.ast.Type %t496) %t498 = load ptr, ptr %a1 %t499 = icmp eq ptr %t498, null - br i1 %t499, label %panic5546, label %ok5547 -panic5546: + br i1 %t499, label %panic5550, label %ok5551 +panic5550: call void @finch_panic(ptr @.str.3518, i64 2719, ptr @.str.3519) unreachable -ok5547: +ok5551: %t500 = getelementptr inbounds %S.gen.Gen, ptr %t498, i32 0, i32 13 %t501 = getelementptr inbounds %S.gen.FnSig, ptr %t500, i32 0, i32 12 %t502 = load %S.ast.Type, ptr %t501 @@ -55848,11 +55874,11 @@ ok5547: %t504 = load { ptr, i64, i64 }, ptr %t503 %t505 = extractvalue { ptr, i64, i64 } %t504, 1 %t506 = icmp uge i64 0, %t505 - br i1 %t506, label %range5548, label %inrange5549 -range5548: + br i1 %t506, label %range5552, label %inrange5553 +range5552: call void @finch_panic_index(ptr @.str.3520, i64 2719, i64 0, i64 %t505) unreachable -inrange5549: +inrange5553: %t507 = extractvalue { ptr, i64, i64 } %t504, 0 %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 0 %t509 = load %S.ast.Node, ptr %t508 @@ -55955,25 +55981,25 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic5550, label %ok5551 -panic5550: + br i1 %t4, label %panic5554, label %ok5555 +panic5554: call void @finch_panic(ptr @.str.3522, i64 2727, ptr @.str.3523) unreachable -ok5551: +ok5555: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 %t6 = getelementptr inbounds %S.gen.FnSig, ptr %t5, i32 0, i32 9 %t7 = load i1, ptr %t6 - br i1 %t7, label %then5552, label %else5553 -then5552: + br i1 %t7, label %then5556, label %else5557 +then5556: %t8 = load ptr, ptr %a1 %t9 = load ptr, ptr %a1 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic5555, label %ok5556 -panic5555: + br i1 %t11, label %panic5559, label %ok5560 +panic5559: call void @finch_panic(ptr @.str.3525, i64 2728, ptr @.str.3526) unreachable -ok5556: +ok5560: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 %t13 = load %S.gen.FnSig, ptr %t12 %t14 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t9, %S.gen.FnSig %t13) @@ -55997,11 +56023,11 @@ ok5556: %t29 = load ptr, ptr %a1 %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null - br i1 %t31, label %panic5557, label %ok5558 -panic5557: + br i1 %t31, label %panic5561, label %ok5562 +panic5561: call void @finch_panic(ptr @.str.3529, i64 2729, ptr @.str.3530) unreachable -ok5558: +ok5562: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 13 %t33 = load %S.gen.FnSig, ptr %t32 %t34 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t29, %S.gen.FnSig %t33) @@ -56033,11 +56059,11 @@ ok5558: %t56 = load ptr, ptr %a1 %t57 = load ptr, ptr %a1 %t58 = icmp eq ptr %t57, null - br i1 %t58, label %panic5559, label %ok5560 -panic5559: + br i1 %t58, label %panic5563, label %ok5564 +panic5563: call void @finch_panic(ptr @.str.3533, i64 2729, ptr @.str.3534) unreachable -ok5560: +ok5564: %t59 = getelementptr inbounds %S.gen.Gen, ptr %t57, i32 0, i32 13 %t60 = getelementptr inbounds %S.gen.FnSig, ptr %t59, i32 0, i32 12 %t61 = load %S.ast.Type, ptr %t60 @@ -56077,11 +56103,11 @@ ok5560: %t89 = load ptr, ptr %a1 %t90 = load ptr, ptr %a1 %t91 = icmp eq ptr %t90, null - br i1 %t91, label %panic5561, label %ok5562 -panic5561: + br i1 %t91, label %panic5565, label %ok5566 +panic5565: call void @finch_panic(ptr @.str.3538, i64 2730, ptr @.str.3539) unreachable -ok5562: +ok5566: %t92 = getelementptr inbounds %S.gen.Gen, ptr %t90, i32 0, i32 13 %t93 = load %S.gen.FnSig, ptr %t92 %t94 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t89, %S.gen.FnSig %t93) @@ -56109,17 +56135,17 @@ ok5562: call void @finch_str_drop(ptr %a111) call void @finch_str_drop(ptr %a87) call void @finch_str_drop(ptr %a27) - br label %endif5554 -else5553: + br label %endif5558 +else5557: %t112 = load ptr, ptr %a1 %t113 = load ptr, ptr %a1 %t114 = load ptr, ptr %a1 %t115 = icmp eq ptr %t114, null - br i1 %t115, label %panic5563, label %ok5564 -panic5563: + br i1 %t115, label %panic5567, label %ok5568 +panic5567: call void @finch_panic(ptr @.str.3542, i64 2732, ptr @.str.3543) unreachable -ok5564: +ok5568: %t116 = getelementptr inbounds %S.gen.Gen, ptr %t114, i32 0, i32 13 %t117 = getelementptr inbounds %S.gen.FnSig, ptr %t116, i32 0, i32 12 %t118 = load %S.ast.Type, ptr %t117 @@ -56146,15 +56172,15 @@ ok5564: call void @finch.gen.emit(ptr %t112, { ptr, i64, i64 } %t135) store { ptr, i64, i64 } %t135, ptr %a136 call void @finch_str_drop(ptr %a136) - br label %endif5554 -endif5554: + br label %endif5558 +endif5558: %t137 = load ptr, ptr %a1 %t138 = icmp eq ptr %t137, null - br i1 %t138, label %panic5565, label %ok5566 -panic5565: + br i1 %t138, label %panic5569, label %ok5570 +panic5569: call void @finch_panic(ptr @.str.3545, i64 2734, ptr @.str.3546) unreachable -ok5566: +ok5570: %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 9 store i1 true, ptr %t139 ret void @@ -56188,11 +56214,11 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 - br i1 %t7, label %range5567, label %inrange5568 -range5567: + br i1 %t7, label %range5571, label %inrange5572 +range5571: call void @finch_panic_index(ptr @.str.3548, i64 2746, i64 0, i64 %t6) unreachable -inrange5568: +inrange5572: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 0 %t10 = load %S.ast.Type, ptr %t9 @@ -56214,11 +56240,11 @@ inrange5568: %t24 = load { ptr, i64, i64 }, ptr %t23 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 1, %t25 - br i1 %t26, label %range5569, label %inrange5570 -range5569: + br i1 %t26, label %range5573, label %inrange5574 +range5573: call void @finch_panic_index(ptr @.str.3550, i64 2746, i64 1, i64 %t25) unreachable -inrange5570: +inrange5574: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.ast.Type, ptr %t27, i64 1 %t29 = load %S.ast.Type, ptr %t28 @@ -56537,11 +56563,11 @@ entry: %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 - br i1 %t9, label %range5571, label %inrange5572 -range5571: + br i1 %t9, label %range5575, label %inrange5576 +range5575: call void @finch_panic_index(ptr @.str.3565, i64 2766, i64 0, i64 %t8) unreachable -inrange5572: +inrange5576: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 @@ -56550,14 +56576,14 @@ inrange5572: store { ptr, i64, i64 } { ptr @.str.3566, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br i1 %t17, label %then5573, label %endif5575 -then5573: + br i1 %t17, label %then5577, label %endif5579 +then5577: %t18 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.3567, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t18, ptr %a19 call void @finch_str_drop(ptr %a19) - br label %endif5575 -endif5575: + br label %endif5579 +endif5579: %t20 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.3568, i64 4, i64 0 }, ptr %a22 store { ptr, i64, i64 } %t20, ptr %a23 @@ -56604,11 +56630,11 @@ endif5575: %t57 = load { ptr, i64, i64 }, ptr %t56 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 0, %t58 - br i1 %t59, label %range5576, label %inrange5577 -range5576: + br i1 %t59, label %range5580, label %inrange5581 +range5580: call void @finch_panic_index(ptr @.str.3572, i64 2769, i64 0, i64 %t58) unreachable -inrange5577: +inrange5581: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i64 0 %t62 = load %S.ast.Type, ptr %t61 @@ -56702,20 +56728,20 @@ entry: store { ptr, i64, i64 } { ptr @.str.3576, i64 6, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br label %logic.from5578 -logic.from5578: - br i1 %t9, label %logic.rhs5579, label %logic.end5580 -logic.rhs5579: + br label %logic.from5582 +logic.from5582: + br i1 %t9, label %logic.rhs5583, label %logic.end5584 +logic.rhs5583: %t10 = load ptr, ptr %a1 %t11 = load %S.ast.Type, ptr %a2 %t12 = call i1 @finch.gen.hasDefaults(ptr %t10, %S.ast.Type %t11) - br label %logic.rend5581 -logic.rend5581: - br label %logic.end5580 -logic.end5580: - %t13 = phi i1 [ false, %logic.from5578 ], [ %t12, %logic.rend5581 ] - br i1 %t13, label %then5582, label %endif5584 -then5582: + br label %logic.rend5585 +logic.rend5585: + br label %logic.end5584 +logic.end5584: + %t13 = phi i1 [ false, %logic.from5582 ], [ %t12, %logic.rend5585 ] + br i1 %t13, label %then5586, label %endif5588 +then5586: store { ptr, i64, i64 } zeroinitializer, ptr %a14 store { ptr, i64, i64 } zeroinitializer, ptr %a15 %t16 = load ptr, ptr %a1 @@ -56738,7 +56764,7 @@ then5582: call void @finch.drop.arr_str(ptr %a15) call void @finch.drop.arr_S_ast_Node(ptr %a14) ret { ptr, i64, i64 } %t30 -endif5584: +endif5588: %t32 = load %S.ast.Type, ptr %a2 %t33 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t32) ret { ptr, i64, i64 } %t33 @@ -56893,11 +56919,11 @@ entry: %t87 = load { ptr, i64, i64 }, ptr %t86 %t88 = extractvalue { ptr, i64, i64 } %t87, 1 %t89 = icmp uge i64 0, %t88 - br i1 %t89, label %range5585, label %inrange5586 -range5585: + br i1 %t89, label %range5589, label %inrange5590 +range5589: call void @finch_panic_index(ptr @.str.3588, i64 2797, i64 0, i64 %t88) unreachable -inrange5586: +inrange5590: %t90 = extractvalue { ptr, i64, i64 } %t87, 0 %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i64 0 %t92 = load %S.ast.Type, ptr %t91 @@ -56905,19 +56931,19 @@ inrange5586: store { ptr, i64, i64 } %t84, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load i1, ptr %a5 - br i1 %t94, label %then5587, label %endif5589 -then5587: + br i1 %t94, label %then5591, label %endif5593 +then5591: %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t98 = load { ptr, i64, i64 }, ptr %t97 %t99 = extractvalue { ptr, i64, i64 } %t98, 1 %t100 = icmp uge i64 1, %t99 - br i1 %t100, label %range5590, label %inrange5591 -range5590: + br i1 %t100, label %range5594, label %inrange5595 +range5594: call void @finch_panic_index(ptr @.str.3589, i64 2799, i64 1, i64 %t99) unreachable -inrange5591: +inrange5595: %t101 = extractvalue { ptr, i64, i64 } %t98, 0 %t102 = getelementptr inbounds %S.ast.Type, ptr %t101, i64 1 %t103 = load %S.ast.Type, ptr %t102 @@ -56928,11 +56954,11 @@ inrange5591: %t108 = load { ptr, i64, i64 }, ptr %t107 %t109 = extractvalue { ptr, i64, i64 } %t108, 1 %t110 = icmp uge i64 1, %t109 - br i1 %t110, label %range5592, label %inrange5593 -range5592: + br i1 %t110, label %range5596, label %inrange5597 +range5596: call void @finch_panic_index(ptr @.str.3590, i64 2799, i64 1, i64 %t109) unreachable -inrange5593: +inrange5597: %t111 = extractvalue { ptr, i64, i64 } %t108, 0 %t112 = getelementptr inbounds %S.ast.Type, ptr %t111, i64 1 %t113 = load %S.ast.Type, ptr %t112 @@ -56943,11 +56969,11 @@ inrange5593: %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 1, %t119 - br i1 %t120, label %range5594, label %inrange5595 -range5594: + br i1 %t120, label %range5598, label %inrange5599 +range5598: call void @finch_panic_index(ptr @.str.3591, i64 2799, i64 1, i64 %t119) unreachable -inrange5595: +inrange5599: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 1 %t123 = load %S.ast.Type, ptr %t122 @@ -56970,8 +56996,8 @@ inrange5595: call void @finch_str_drop(ptr %a136) store { ptr, i64, i64 } %t134, ptr %a137 call void @finch_str_drop(ptr %a137) - br label %endif5589 -endif5589: + br label %endif5593 +endif5593: %t138 = load ptr, ptr %a1 %t139 = load { ptr, i64, i64 }, ptr %a57 call void @finch.gen.br(ptr %t138, { ptr, i64, i64 } %t139) @@ -57078,11 +57104,11 @@ entry: %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 - br i1 %t9, label %range5596, label %inrange5597 -range5596: + br i1 %t9, label %range5600, label %inrange5601 +range5600: call void @finch_panic_index(ptr @.str.3592, i64 2808, i64 0, i64 %t8) unreachable -inrange5597: +inrange5601: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = load %S.ast.Type, ptr %t11 @@ -57094,11 +57120,11 @@ inrange5597: %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 1, %t19 - br i1 %t20, label %range5598, label %inrange5599 -range5598: + br i1 %t20, label %range5602, label %inrange5603 +range5602: call void @finch_panic_index(ptr @.str.3593, i64 2809, i64 1, i64 %t19) unreachable -inrange5599: +inrange5603: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 %t23 = load %S.ast.Type, ptr %t22 @@ -57112,11 +57138,11 @@ inrange5599: %t31 = load { ptr, i64, i64 }, ptr %t30 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 1, %t32 - br i1 %t33, label %range5600, label %inrange5601 -range5600: + br i1 %t33, label %range5604, label %inrange5605 +range5604: call void @finch_panic_index(ptr @.str.3594, i64 2810, i64 1, i64 %t32) unreachable -inrange5601: +inrange5605: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 1 %t36 = load %S.ast.Node, ptr %t35 @@ -57127,11 +57153,11 @@ inrange5601: %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 1, %t42 - br i1 %t43, label %range5602, label %inrange5603 -range5602: + br i1 %t43, label %range5606, label %inrange5607 +range5606: call void @finch_panic_index(ptr @.str.3595, i64 2810, i64 1, i64 %t42) unreachable -inrange5603: +inrange5607: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 1 %t46 = load %S.ast.Node, ptr %t45 @@ -57140,18 +57166,18 @@ inrange5603: call void @finch.drop.S_gen_Val(ptr %a48) store %S.gen.Val %t47, ptr %a49 %t50 = load i1, ptr %a5 - br i1 %t50, label %then5604, label %endif5606 -then5604: + br i1 %t50, label %then5608, label %endif5610 +then5608: %t51 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t52 = load i1, ptr %t51 %t53 = xor i1 %t52, true - br i1 %t53, label %then5607, label %endif5609 -then5607: + br i1 %t53, label %then5611, label %endif5613 +then5611: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } { ptr @.str.3597, i64 44, i64 0 }) - br label %endif5609 -endif5609: + br label %endif5613 +endif5613: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t58 = getelementptr inbounds %S.gen.Place, ptr %t57, i32 0, i32 0 @@ -57181,12 +57207,12 @@ endif5609: call void @finch.drop.S_ast_Type(ptr %a27) call void @finch.drop.S_ast_Type(ptr %a16) ret %S.gen.Ref %t78 -endif5606: +endif5610: store { ptr, i64, i64 } { ptr @.str.3598, i64 0, i64 0 }, ptr %a79 %t80 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t81 = load i1, ptr %t80 - br i1 %t81, label %then5610, label %else5611 -then5610: + br i1 %t81, label %then5614, label %else5615 +then5614: %t82 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t83 = getelementptr inbounds %S.gen.Place, ptr %t82, i32 0, i32 0 %t84 = load { ptr, i64, i64 }, ptr %t83 @@ -57197,8 +57223,8 @@ then5610: store { ptr, i64, i64 } %t87, ptr %a79 store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_drop(ptr %a89) - br label %endif5612 -else5611: + br label %endif5616 +else5615: %t90 = load ptr, ptr %a1 %t91 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t92 = load %S.gen.Val, ptr %t91 @@ -57207,8 +57233,8 @@ else5611: store { ptr, i64, i64 } %t93, ptr %a79 store { ptr, i64, i64 } %t94, ptr %a95 call void @finch_str_drop(ptr %a95) - br label %endif5612 -endif5612: + br label %endif5616 +endif5616: %t96 = load ptr, ptr %a1 %t97 = load %S.gen.Val, ptr %a49 %t98 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t96, %S.gen.Val %t97) @@ -57265,22 +57291,22 @@ endif5612: %t142 = load ptr, ptr %a1 %t143 = load ptr, ptr %a1 %t144 = icmp eq ptr %t143, null - br i1 %t144, label %panic5613, label %ok5614 -panic5613: + br i1 %t144, label %panic5617, label %ok5618 +panic5617: call void @finch_panic(ptr @.str.3607, i64 2834, ptr @.str.3608) unreachable -ok5614: +ok5618: %t145 = getelementptr inbounds %S.gen.Gen, ptr %t143, i32 0, i32 1 %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t147 = load i64, ptr %t146 %t148 = load { ptr, i64, i64 }, ptr %t145 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = icmp uge i64 %t147, %t149 - br i1 %t150, label %range5615, label %inrange5616 -range5615: + br i1 %t150, label %range5619, label %inrange5620 +range5619: call void @finch_panic_index(ptr @.str.3609, i64 2834, i64 %t147, i64 %t149) unreachable -inrange5616: +inrange5620: %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 %t147 %t153 = load { ptr, i64, i64 }, ptr %t152 @@ -57335,11 +57361,11 @@ inrange5616: call void @finch.gen.emit(ptr %t192, { ptr, i64, i64 } { ptr @.str.3613, i64 11, i64 0 }) %t193 = load ptr, ptr %a1 %t194 = icmp eq ptr %t193, null - br i1 %t194, label %panic5617, label %ok5618 -panic5617: + br i1 %t194, label %panic5621, label %ok5622 +panic5621: call void @finch_panic(ptr @.str.3614, i64 2836, ptr @.str.3615) unreachable -ok5618: +ok5622: %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 store i1 true, ptr %t195 %t196 = load ptr, ptr %a1 @@ -57361,8 +57387,8 @@ ok5618: store { ptr, i64, i64 } %t207, ptr %a209 %t210 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t211 = load i1, ptr %t210 - br i1 %t211, label %then5619, label %endif5621 -then5619: + br i1 %t211, label %then5623, label %endif5625 +then5623: %t212 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t213 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t213, ptr %a214 @@ -57386,7 +57412,7 @@ then5619: call void @finch.drop.S_ast_Type(ptr %a27) call void @finch.drop.S_ast_Type(ptr %a16) ret %S.gen.Ref %t223 -endif5621: +endif5625: %t224 = load ptr, ptr %a1 %t225 = load ptr, ptr %a1 %t226 = load %S.ast.Type, ptr %a27 @@ -57410,20 +57436,20 @@ endif5621: %t243 = load ptr, ptr %a1 %t244 = load %S.ast.Type, ptr %a27 %t245 = call i1 @finch.gen.owning(ptr %t243, %S.ast.Type %t244) - br label %logic.from5622 -logic.from5622: - br i1 %t245, label %logic.rhs5623, label %logic.end5624 -logic.rhs5623: + br label %logic.from5626 +logic.from5626: + br i1 %t245, label %logic.rhs5627, label %logic.end5628 +logic.rhs5627: %t246 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t247 = getelementptr inbounds %S.gen.Val, ptr %t246, i32 0, i32 2 %t248 = load i1, ptr %t247 - br label %logic.rend5625 -logic.rend5625: - br label %logic.end5624 -logic.end5624: - %t249 = phi i1 [ false, %logic.from5622 ], [ %t248, %logic.rend5625 ] - br i1 %t249, label %then5626, label %endif5628 -then5626: + br label %logic.rend5629 +logic.rend5629: + br label %logic.end5628 +logic.end5628: + %t249 = phi i1 [ false, %logic.from5626 ], [ %t248, %logic.rend5629 ] + br i1 %t249, label %then5630, label %endif5632 +then5630: %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a231 %t252 = load %S.ast.Type, ptr %a27 @@ -57439,8 +57465,8 @@ then5626: store %S.gen.Val %t260, ptr %a242 store %S.gen.Val %t261, ptr %a262 call void @finch.drop.S_gen_Val(ptr %a262) - br label %endif5628 -endif5628: + br label %endif5632 +endif5632: %t263 = load ptr, ptr %a1 %t264 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t265 = load %S.gen.Val, ptr %t264 @@ -57551,19 +57577,19 @@ entry: store { ptr, i64, i64 } { ptr @.str.3616, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 - br i1 %t17, label %then5629, label %endif5631 -then5629: + br i1 %t17, label %then5633, label %endif5635 +then5633: %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 %t20 = load i64, ptr %t19 %t21 = icmp eq i64 %t20, 0 - br i1 %t21, label %then5632, label %endif5634 -then5632: + br i1 %t21, label %then5636, label %endif5638 +then5636: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t22, %S.ast.Node %t23, { ptr, i64, i64 } { ptr @.str.3617, i64 52, i64 0 }) - br label %endif5634 -endif5634: + br label %endif5638 +endif5638: store i1 true, ptr %a24 store i1 false, ptr %a25 %t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 @@ -57571,12 +57597,12 @@ endif5634: %t28 = load i64, ptr %t27 %t29 = sdiv i64 %t28, 2 store i64 0, ptr %a30 - br label %for.cond5635 -for.cond5635: + br label %for.cond5639 +for.cond5639: %t31 = load i64, ptr %a30 %t32 = icmp slt i64 %t31, %t29 - br i1 %t32, label %for.body5636, label %for.end5638 -for.body5636: + br i1 %t32, label %for.body5640, label %for.end5642 +for.body5640: %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t34 = load i64, ptr %a30 %t35 = mul i64 2, %t34 @@ -57584,11 +57610,11 @@ for.body5636: %t37 = load { ptr, i64, i64 }, ptr %t33 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range5639, label %inrange5640 -range5639: + br i1 %t39, label %range5643, label %inrange5644 +range5643: call void @finch_panic_index(ptr @.str.3618, i64 2866, i64 %t36, i64 %t38) unreachable -inrange5640: +inrange5644: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = load %S.ast.Node, ptr %t41 @@ -57602,32 +57628,32 @@ inrange5640: store { ptr, i64, i64 } { ptr @.str.3619, i64 5, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 - br label %logic.from5641 -logic.from5641: - br i1 %t52, label %logic.rhs5642, label %logic.end5643 -logic.rhs5642: + br label %logic.from5645 +logic.from5645: + br i1 %t52, label %logic.rhs5646, label %logic.end5647 +logic.rhs5646: %t53 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 1 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } { ptr @.str.3620, i64 1, i64 0 }, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 - br label %logic.rend5644 -logic.rend5644: - br label %logic.end5643 -logic.end5643: - %t59 = phi i1 [ false, %logic.from5641 ], [ %t58, %logic.rend5644 ] - br i1 %t59, label %then5645, label %endif5647 -then5645: + br label %logic.rend5648 +logic.rend5648: + br label %logic.end5647 +logic.end5647: + %t59 = phi i1 [ false, %logic.from5645 ], [ %t58, %logic.rend5648 ] + br i1 %t59, label %then5649, label %endif5651 +then5649: %t60 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 0, %t62 - br i1 %t63, label %range5648, label %inrange5649 -range5648: + br i1 %t63, label %range5652, label %inrange5653 +range5652: call void @finch_panic_index(ptr @.str.3621, i64 2868, i64 0, i64 %t62) unreachable -inrange5649: +inrange5653: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 0 %t66 = load %S.ast.Node, ptr %t65 @@ -57638,50 +57664,50 @@ inrange5649: store %S.ast.Node %t69, ptr %a46 store %S.ast.Node %t70, ptr %a71 call void @finch.drop.S_ast_Node(ptr %a71) - br label %endif5647 -endif5647: + br label %endif5651 +endif5651: %t72 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t73, ptr %a74 store { ptr, i64, i64 } { ptr @.str.3622, i64 5, i64 0 }, ptr %a75 %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) %t77 = icmp ne i32 %t76, 0 - br i1 %t77, label %then5650, label %else5651 -then5650: + br i1 %t77, label %then5654, label %else5655 +then5654: store i1 true, ptr %a25 - br label %endif5652 -else5651: + br label %endif5656 +else5655: %t78 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 store { ptr, i64, i64 } { ptr @.str.3623, i64 3, i64 0 }, ptr %a81 %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) %t83 = icmp eq i32 %t82, 0 - br i1 %t83, label %then5653, label %endif5655 -then5653: + br i1 %t83, label %then5657, label %endif5659 +then5657: store i1 false, ptr %a24 - br label %endif5655 -endif5655: - br label %endif5652 -endif5652: + br label %endif5659 +endif5659: + br label %endif5656 +endif5656: call void @finch.drop.S_ast_Node(ptr %a46) - br label %for.step5637 -for.step5637: + br label %for.step5641 +for.step5641: %t84 = load i64, ptr %a30 %t85 = add i64 %t84, 1 store i64 %t85, ptr %a30 - br label %for.cond5635 -for.end5638: + br label %for.cond5639 +for.end5642: %t86 = load ptr, ptr %a1 %t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t88 = load { ptr, i64, i64 }, ptr %t87 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 0, %t89 - br i1 %t90, label %range5656, label %inrange5657 -range5656: + br i1 %t90, label %range5660, label %inrange5661 +range5660: call void @finch_panic_index(ptr @.str.3624, i64 2876, i64 0, i64 %t89) unreachable -inrange5657: +inrange5661: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds %S.ast.Node, ptr %t91, i64 0 %t93 = load %S.ast.Node, ptr %t92 @@ -57695,11 +57721,11 @@ inrange5657: %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 1, %t100 - br i1 %t101, label %range5658, label %inrange5659 -range5658: + br i1 %t101, label %range5662, label %inrange5663 +range5662: call void @finch_panic_index(ptr @.str.3625, i64 2877, i64 1, i64 %t100) unreachable -inrange5659: +inrange5663: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Node, ptr %t102, i64 1 %t104 = load %S.ast.Node, ptr %t103 @@ -57715,10 +57741,10 @@ inrange5659: store { ptr, i64, i64 } { ptr @.str.3626, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 - br label %logic.from5660 -logic.from5660: - br i1 %t114, label %logic.end5662, label %logic.rhs5661 -logic.rhs5661: + br label %logic.from5664 +logic.from5664: + br i1 %t114, label %logic.end5666, label %logic.rhs5665 +logic.rhs5665: %t115 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i32 0, i32 0 %t117 = load { ptr, i64, i64 }, ptr %t116 @@ -57726,29 +57752,29 @@ logic.rhs5661: store { ptr, i64, i64 } { ptr @.str.3627, i64 4, i64 0 }, ptr %a119 %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) %t121 = icmp ne i32 %t120, 0 - br label %logic.rend5663 -logic.rend5663: - br label %logic.end5662 -logic.end5662: - %t122 = phi i1 [ true, %logic.from5660 ], [ %t121, %logic.rend5663 ] - br i1 %t122, label %then5664, label %endif5666 -then5664: + br label %logic.rend5667 +logic.rend5667: + br label %logic.end5666 +logic.end5666: + %t122 = phi i1 [ true, %logic.from5664 ], [ %t121, %logic.rend5667 ] + br i1 %t122, label %then5668, label %endif5670 +then5668: %t123 = load ptr, ptr %a1 %t124 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t125 = load { ptr, i64, i64 }, ptr %t124 %t126 = extractvalue { ptr, i64, i64 } %t125, 1 %t127 = icmp uge i64 0, %t126 - br i1 %t127, label %range5667, label %inrange5668 -range5667: + br i1 %t127, label %range5671, label %inrange5672 +range5671: call void @finch_panic_index(ptr @.str.3628, i64 2879, i64 0, i64 %t126) unreachable -inrange5668: +inrange5672: %t128 = extractvalue { ptr, i64, i64 } %t125, 0 %t129 = getelementptr inbounds %S.ast.Node, ptr %t128, i64 0 %t130 = load %S.ast.Node, ptr %t129 call void @finch.gen.fail(ptr %t123, %S.ast.Node %t130, { ptr, i64, i64 } { ptr @.str.3629, i64 35, i64 0 }) - br label %endif5666 -endif5666: + br label %endif5670 +endif5670: %t131 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 @@ -57756,10 +57782,10 @@ endif5666: store { ptr, i64, i64 } { ptr @.str.3630, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 - br label %logic.from5669 -logic.from5669: - br i1 %t137, label %logic.end5671, label %logic.rhs5670 -logic.rhs5670: + br label %logic.from5673 +logic.from5673: + br i1 %t137, label %logic.end5675, label %logic.rhs5674 +logic.rhs5674: %t138 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i32 0, i32 0 %t140 = load { ptr, i64, i64 }, ptr %t139 @@ -57767,29 +57793,29 @@ logic.rhs5670: store { ptr, i64, i64 } { ptr @.str.3631, i64 4, i64 0 }, ptr %a142 %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) %t144 = icmp ne i32 %t143, 0 - br label %logic.rend5672 -logic.rend5672: - br label %logic.end5671 -logic.end5671: - %t145 = phi i1 [ true, %logic.from5669 ], [ %t144, %logic.rend5672 ] - br i1 %t145, label %then5673, label %endif5675 -then5673: + br label %logic.rend5676 +logic.rend5676: + br label %logic.end5675 +logic.end5675: + %t145 = phi i1 [ true, %logic.from5673 ], [ %t144, %logic.rend5676 ] + br i1 %t145, label %then5677, label %endif5679 +then5677: %t146 = load ptr, ptr %a1 %t147 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t148 = load { ptr, i64, i64 }, ptr %t147 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = icmp uge i64 1, %t149 - br i1 %t150, label %range5676, label %inrange5677 -range5676: + br i1 %t150, label %range5680, label %inrange5681 +range5680: call void @finch_panic_index(ptr @.str.3632, i64 2882, i64 1, i64 %t149) unreachable -inrange5677: +inrange5681: %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = getelementptr inbounds %S.ast.Node, ptr %t151, i64 1 %t153 = load %S.ast.Node, ptr %t152 call void @finch.gen.fail(ptr %t146, %S.ast.Node %t153, { ptr, i64, i64 } { ptr @.str.3633, i64 37, i64 0 }) - br label %endif5675 -endif5675: + br label %endif5679 +endif5679: %t154 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t155 = load %S.ast.Type, ptr %t154 store %S.ast.Type %t155, ptr %a156 @@ -57797,25 +57823,25 @@ endif5675: %t158 = load %S.ast.Type, ptr %a157 store %S.ast.Type %t158, ptr %a159 %t160 = load i1, ptr %a24 - br label %logic.from5678 -logic.from5678: - br i1 %t160, label %logic.rhs5679, label %logic.end5680 -logic.rhs5679: + br label %logic.from5682 +logic.from5682: + br i1 %t160, label %logic.rhs5683, label %logic.end5684 +logic.rhs5683: %t161 = load i1, ptr %a25 - br label %logic.rend5681 -logic.rend5681: - br label %logic.end5680 -logic.end5680: - %t162 = phi i1 [ false, %logic.from5678 ], [ %t161, %logic.rend5681 ] - br i1 %t162, label %then5682, label %endif5684 -then5682: + br label %logic.rend5685 +logic.rend5685: + br label %logic.end5684 +logic.end5684: + %t162 = phi i1 [ false, %logic.from5682 ], [ %t161, %logic.rend5685 ] + br i1 %t162, label %then5686, label %endif5688 +then5686: %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3634, i64 5, i64 0 }) %t164 = load %S.ast.Type, ptr %a159 store %S.ast.Type %t163, ptr %a159 store %S.ast.Type %t164, ptr %a165 call void @finch.drop.S_ast_Type(ptr %a165) - br label %endif5684 -endif5684: + br label %endif5688 +endif5688: %t166 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t167 = load %S.ast.Type, ptr %t166 %t168 = load %S.ast.Type, ptr %a159 @@ -57826,8 +57852,8 @@ endif5684: call void @finch.drop.S_ast_Type(ptr %a171) store i1 true, ptr %a9 call void @finch.drop.S_ast_Type(ptr %a159) - br label %endif5631 -endif5631: + br label %endif5635 +endif5635: %t172 = load ptr, ptr %a1 %t173 = load ptr, ptr %a1 %t174 = load %S.ast.Type, ptr %a8 @@ -57846,11 +57872,11 @@ endif5631: call void @finch_str_drop(ptr %a184) %t185 = load ptr, ptr %a1 %t186 = icmp eq ptr %t185, null - br i1 %t186, label %panic5685, label %ok5686 -panic5685: + br i1 %t186, label %panic5689, label %ok5690 +panic5689: call void @finch_panic(ptr @.str.3636, i64 2893, ptr @.str.3637) unreachable -ok5686: +ok5690: %t187 = getelementptr inbounds %S.gen.Gen, ptr %t185, i32 0, i32 11 %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 %t189 = load i64, ptr %t188 @@ -57864,19 +57890,19 @@ ok5686: %t196 = load i64, ptr %t195 %t197 = sdiv i64 %t196, 2 store i64 0, ptr %a198 - br label %for.cond5687 -for.cond5687: + br label %for.cond5691 +for.cond5691: %t199 = load i64, ptr %a198 %t200 = icmp slt i64 %t199, %t197 - br i1 %t200, label %for.body5688, label %for.end5690 -for.body5688: + br i1 %t200, label %for.body5692, label %for.end5694 +for.body5692: %t201 = load ptr, ptr %a1 %t202 = icmp eq ptr %t201, null - br i1 %t202, label %panic5691, label %ok5692 -panic5691: + br i1 %t202, label %panic5695, label %ok5696 +panic5695: call void @finch_panic(ptr @.str.3638, i64 2896, ptr @.str.3639) unreachable -ok5692: +ok5696: %t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 11 %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 %t205 = load i64, ptr %t204 @@ -57888,19 +57914,19 @@ ok5692: store %S.gen.Val %t210, ptr %a211 %t212 = load i64, ptr %a198 %t213 = icmp eq i64 %t212, 0 - br label %logic.from5693 -logic.from5693: - br i1 %t213, label %logic.rhs5694, label %logic.end5695 -logic.rhs5694: + br label %logic.from5697 +logic.from5697: + br i1 %t213, label %logic.rhs5698, label %logic.end5699 +logic.rhs5698: %t214 = load i1, ptr %a9 - br label %logic.rend5696 -logic.rend5696: - br label %logic.end5695 -logic.end5695: - %t215 = phi i1 [ false, %logic.from5693 ], [ %t214, %logic.rend5696 ] + br label %logic.rend5700 +logic.rend5700: + br label %logic.end5699 +logic.end5699: + %t215 = phi i1 [ false, %logic.from5697 ], [ %t214, %logic.rend5700 ] %t216 = xor i1 %t215, true - br i1 %t216, label %then5697, label %endif5699 -then5697: + br i1 %t216, label %then5701, label %endif5703 +then5701: %t217 = load ptr, ptr %a1 %t218 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t219 = load i64, ptr %a198 @@ -57908,11 +57934,11 @@ then5697: %t221 = load { ptr, i64, i64 }, ptr %t218 %t222 = extractvalue { ptr, i64, i64 } %t221, 1 %t223 = icmp uge i64 %t220, %t222 - br i1 %t223, label %range5700, label %inrange5701 -range5700: + br i1 %t223, label %range5704, label %inrange5705 +range5704: call void @finch_panic_index(ptr @.str.3640, i64 2899, i64 %t220, i64 %t222) unreachable -inrange5701: +inrange5705: %t224 = extractvalue { ptr, i64, i64 } %t221, 0 %t225 = getelementptr inbounds %S.ast.Node, ptr %t224, i64 %t220 %t226 = load %S.ast.Node, ptr %t225 @@ -57920,11 +57946,11 @@ inrange5701: %t228 = load { ptr, i64, i64 }, ptr %t227 %t229 = extractvalue { ptr, i64, i64 } %t228, 1 %t230 = icmp uge i64 0, %t229 - br i1 %t230, label %range5702, label %inrange5703 -range5702: + br i1 %t230, label %range5706, label %inrange5707 +range5706: call void @finch_panic_index(ptr @.str.3641, i64 2899, i64 0, i64 %t229) unreachable -inrange5703: +inrange5707: %t231 = extractvalue { ptr, i64, i64 } %t228, 0 %t232 = getelementptr inbounds %S.ast.Type, ptr %t231, i64 0 %t233 = load %S.ast.Type, ptr %t232 @@ -57933,19 +57959,19 @@ inrange5703: store %S.gen.Val %t234, ptr %a211 store %S.gen.Val %t235, ptr %a236 call void @finch.drop.S_gen_Val(ptr %a236) - br label %endif5699 -endif5699: + br label %endif5703 +endif5703: %t237 = load ptr, ptr %a1 %t238 = load %S.gen.Val, ptr %a211 %t239 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = extractvalue { ptr, i64, i64 } %t240, 1 %t242 = icmp uge i64 0, %t241 - br i1 %t242, label %range5704, label %inrange5705 -range5704: + br i1 %t242, label %range5708, label %inrange5709 +range5708: call void @finch_panic_index(ptr @.str.3642, i64 2901, i64 0, i64 %t241) unreachable -inrange5705: +inrange5709: %t243 = extractvalue { ptr, i64, i64 } %t240, 0 %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i64 0 %t245 = load %S.ast.Type, ptr %t244 @@ -57955,11 +57981,11 @@ inrange5705: %t249 = load { ptr, i64, i64 }, ptr %t246 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 %t248, %t250 - br i1 %t251, label %range5706, label %inrange5707 -range5706: + br i1 %t251, label %range5710, label %inrange5711 +range5710: call void @finch_panic_index(ptr @.str.3643, i64 2901, i64 %t248, i64 %t250) unreachable -inrange5707: +inrange5711: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 %t254 = load %S.ast.Node, ptr %t253 @@ -57978,19 +58004,19 @@ inrange5707: store %S.gen.Val %t263, ptr %a264 %t265 = load i64, ptr %a198 %t266 = icmp eq i64 %t265, 0 - br label %logic.from5708 -logic.from5708: - br i1 %t266, label %logic.rhs5709, label %logic.end5710 -logic.rhs5709: + br label %logic.from5712 +logic.from5712: + br i1 %t266, label %logic.rhs5713, label %logic.end5714 +logic.rhs5713: %t267 = load i1, ptr %a9 - br label %logic.rend5711 -logic.rend5711: - br label %logic.end5710 -logic.end5710: - %t268 = phi i1 [ false, %logic.from5708 ], [ %t267, %logic.rend5711 ] + br label %logic.rend5715 +logic.rend5715: + br label %logic.end5714 +logic.end5714: + %t268 = phi i1 [ false, %logic.from5712 ], [ %t267, %logic.rend5715 ] %t269 = xor i1 %t268, true - br i1 %t269, label %then5712, label %endif5714 -then5712: + br i1 %t269, label %then5716, label %endif5718 +then5716: %t270 = load ptr, ptr %a1 %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t272 = load i64, ptr %a198 @@ -57999,11 +58025,11 @@ then5712: %t275 = load { ptr, i64, i64 }, ptr %t271 %t276 = extractvalue { ptr, i64, i64 } %t275, 1 %t277 = icmp uge i64 %t274, %t276 - br i1 %t277, label %range5715, label %inrange5716 -range5715: + br i1 %t277, label %range5719, label %inrange5720 +range5719: call void @finch_panic_index(ptr @.str.3645, i64 2905, i64 %t274, i64 %t276) unreachable -inrange5716: +inrange5720: %t278 = extractvalue { ptr, i64, i64 } %t275, 0 %t279 = getelementptr inbounds %S.ast.Node, ptr %t278, i64 %t274 %t280 = load %S.ast.Node, ptr %t279 @@ -58011,11 +58037,11 @@ inrange5716: %t282 = load { ptr, i64, i64 }, ptr %t281 %t283 = extractvalue { ptr, i64, i64 } %t282, 1 %t284 = icmp uge i64 1, %t283 - br i1 %t284, label %range5717, label %inrange5718 -range5717: + br i1 %t284, label %range5721, label %inrange5722 +range5721: call void @finch_panic_index(ptr @.str.3646, i64 2905, i64 1, i64 %t283) unreachable -inrange5718: +inrange5722: %t285 = extractvalue { ptr, i64, i64 } %t282, 0 %t286 = getelementptr inbounds %S.ast.Type, ptr %t285, i64 1 %t287 = load %S.ast.Type, ptr %t286 @@ -58024,19 +58050,19 @@ inrange5718: store %S.gen.Val %t288, ptr %a264 store %S.gen.Val %t289, ptr %a290 call void @finch.drop.S_gen_Val(ptr %a290) - br label %endif5714 -endif5714: + br label %endif5718 +endif5718: %t291 = load ptr, ptr %a1 %t292 = load %S.gen.Val, ptr %a264 %t293 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t294 = load { ptr, i64, i64 }, ptr %t293 %t295 = extractvalue { ptr, i64, i64 } %t294, 1 %t296 = icmp uge i64 1, %t295 - br i1 %t296, label %range5719, label %inrange5720 -range5719: + br i1 %t296, label %range5723, label %inrange5724 +range5723: call void @finch_panic_index(ptr @.str.3647, i64 2907, i64 1, i64 %t295) unreachable -inrange5720: +inrange5724: %t297 = extractvalue { ptr, i64, i64 } %t294, 0 %t298 = getelementptr inbounds %S.ast.Type, ptr %t297, i64 1 %t299 = load %S.ast.Type, ptr %t298 @@ -58047,11 +58073,11 @@ inrange5720: %t304 = load { ptr, i64, i64 }, ptr %t300 %t305 = extractvalue { ptr, i64, i64 } %t304, 1 %t306 = icmp uge i64 %t303, %t305 - br i1 %t306, label %range5721, label %inrange5722 -range5721: + br i1 %t306, label %range5725, label %inrange5726 +range5725: call void @finch_panic_index(ptr @.str.3648, i64 2907, i64 %t303, i64 %t305) unreachable -inrange5722: +inrange5726: %t307 = extractvalue { ptr, i64, i64 } %t304, 0 %t308 = getelementptr inbounds %S.ast.Node, ptr %t307, i64 %t303 %t309 = load %S.ast.Node, ptr %t308 @@ -58082,11 +58108,11 @@ inrange5722: %t332 = load { ptr, i64, i64 }, ptr %t331 %t333 = extractvalue { ptr, i64, i64 } %t332, 1 %t334 = icmp uge i64 1, %t333 - br i1 %t334, label %range5723, label %inrange5724 -range5723: + br i1 %t334, label %range5727, label %inrange5728 +range5727: call void @finch_panic_index(ptr @.str.3650, i64 2911, i64 1, i64 %t333) unreachable -inrange5724: +inrange5728: %t335 = extractvalue { ptr, i64, i64 } %t332, 0 %t336 = getelementptr inbounds %S.ast.Type, ptr %t335, i64 1 %t337 = load %S.ast.Type, ptr %t336 @@ -58097,11 +58123,11 @@ inrange5724: %t341 = load { ptr, i64, i64 }, ptr %t340 %t342 = extractvalue { ptr, i64, i64 } %t341, 1 %t343 = icmp uge i64 1, %t342 - br i1 %t343, label %range5725, label %inrange5726 -range5725: + br i1 %t343, label %range5729, label %inrange5730 +range5729: call void @finch_panic_index(ptr @.str.3651, i64 2912, i64 1, i64 %t342) unreachable -inrange5726: +inrange5730: %t344 = extractvalue { ptr, i64, i64 } %t341, 0 %t345 = getelementptr inbounds %S.ast.Type, ptr %t344, i64 1 %t346 = load %S.ast.Type, ptr %t345 @@ -58122,13 +58148,13 @@ inrange5726: call void @finch_str_drop(ptr %a316) call void @finch.drop.S_gen_Val(ptr %a264) call void @finch.drop.S_gen_Val(ptr %a211) - br label %for.step5689 -for.step5689: + br label %for.step5693 +for.step5693: %t355 = load i64, ptr %a198 %t356 = add i64 %t355, 1 store i64 %t356, ptr %a198 - br label %for.cond5687 -for.end5690: + br label %for.cond5691 +for.end5694: %t357 = load ptr, ptr %a1 %t358 = load i64, ptr %a190 call void @finch.gen.heldEnd(ptr %t357, i64 %t358) @@ -58482,11 +58508,11 @@ entry: %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 0, %t13 - br i1 %t14, label %range5727, label %inrange5728 -range5727: + br i1 %t14, label %range5731, label %inrange5732 +range5731: call void @finch_panic_index(ptr @.str.3652, i64 2922, i64 0, i64 %t13) unreachable -inrange5728: +inrange5732: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 %t17 = load %S.ast.Type, ptr %t16 @@ -58498,11 +58524,11 @@ inrange5728: %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 1, %t24 - br i1 %t25, label %range5729, label %inrange5730 -range5729: + br i1 %t25, label %range5733, label %inrange5734 +range5733: call void @finch_panic_index(ptr @.str.3653, i64 2923, i64 1, i64 %t24) unreachable -inrange5730: +inrange5734: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds %S.ast.Type, ptr %t26, i64 1 %t28 = load %S.ast.Type, ptr %t27 @@ -58515,66 +58541,66 @@ inrange5730: store { ptr, i64, i64 } { ptr @.str.3654, i64 3, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br label %logic.from5731 -logic.from5731: - br i1 %t37, label %logic.end5733, label %logic.rhs5732 -logic.rhs5732: + br label %logic.from5735 +logic.from5735: + br i1 %t37, label %logic.end5737, label %logic.rhs5736 +logic.rhs5736: %t38 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } { ptr @.str.3655, i64 3, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 - br label %logic.rend5734 -logic.rend5734: - br label %logic.end5733 -logic.end5733: - %t43 = phi i1 [ true, %logic.from5731 ], [ %t42, %logic.rend5734 ] - br label %logic.from5735 -logic.from5735: - br i1 %t43, label %logic.end5737, label %logic.rhs5736 -logic.rhs5736: + br label %logic.rend5738 +logic.rend5738: + br label %logic.end5737 +logic.end5737: + %t43 = phi i1 [ true, %logic.from5735 ], [ %t42, %logic.rend5738 ] + br label %logic.from5739 +logic.from5739: + br i1 %t43, label %logic.end5741, label %logic.rhs5740 +logic.rhs5740: %t44 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.3656, i64 6, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 - br label %logic.rend5738 -logic.rend5738: - br label %logic.end5737 -logic.end5737: - %t49 = phi i1 [ true, %logic.from5735 ], [ %t48, %logic.rend5738 ] - br i1 %t49, label %then5739, label %endif5741 -then5739: + br label %logic.rend5742 +logic.rend5742: + br label %logic.end5741 +logic.end5741: + %t49 = phi i1 [ true, %logic.from5739 ], [ %t48, %logic.rend5742 ] + br i1 %t49, label %then5743, label %endif5745 +then5743: %t50 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.3657, i64 3, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %then5742, label %else5743 -then5742: + br i1 %t54, label %then5746, label %else5747 +then5746: %t55 = load ptr, ptr %a1 %t56 = load %S.ast.Node, ptr %a2 %t57 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t55, %S.ast.Node %t56, i64 1, i64 2, { ptr, i64, i64 } %t57) - br label %endif5744 -else5743: + br label %endif5748 +else5747: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Node, ptr %a2 %t60 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t58, %S.ast.Node %t59, i64 1, i64 1, { ptr, i64, i64 } %t60) - br label %endif5744 -endif5744: + br label %endif5748 +endif5748: %t61 = load ptr, ptr %a1 %t62 = load ptr, ptr %a1 %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = extractvalue { ptr, i64, i64 } %t64, 1 %t66 = icmp uge i64 1, %t65 - br i1 %t66, label %range5745, label %inrange5746 -range5745: + br i1 %t66, label %range5749, label %inrange5750 +range5749: call void @finch_panic_index(ptr @.str.3658, i64 2930, i64 1, i64 %t65) unreachable -inrange5746: +inrange5750: %t67 = extractvalue { ptr, i64, i64 } %t64, 0 %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 1 %t69 = load %S.ast.Node, ptr %t68 @@ -58585,11 +58611,11 @@ inrange5746: %t74 = load { ptr, i64, i64 }, ptr %t73 %t75 = extractvalue { ptr, i64, i64 } %t74, 1 %t76 = icmp uge i64 1, %t75 - br i1 %t76, label %range5747, label %inrange5748 -range5747: + br i1 %t76, label %range5751, label %inrange5752 +range5751: call void @finch_panic_index(ptr @.str.3659, i64 2930, i64 1, i64 %t75) unreachable -inrange5748: +inrange5752: %t77 = extractvalue { ptr, i64, i64 } %t74, 0 %t78 = getelementptr inbounds %S.ast.Node, ptr %t77, i64 1 %t79 = load %S.ast.Node, ptr %t78 @@ -58631,8 +58657,8 @@ inrange5748: store { ptr, i64, i64 } { ptr @.str.3663, i64 3, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 - br i1 %t112, label %then5749, label %endif5751 -then5749: + br i1 %t112, label %then5753, label %endif5755 +then5753: %t113 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t113, ptr %a114 call void @finch_str_copy(ptr %a115, ptr %a114) @@ -58647,14 +58673,14 @@ then5749: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t119 -endif5751: +endif5755: %t120 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t120, ptr %a121 store { ptr, i64, i64 } { ptr @.str.3665, i64 6, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) %t124 = icmp ne i32 %t123, 0 - br i1 %t124, label %then5752, label %endif5754 -then5752: + br i1 %t124, label %then5756, label %endif5758 +then5756: %t125 = load ptr, ptr %a1 %t126 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t125, { ptr, i64, i64 } { ptr @.str.3666, i64 10, i64 0 }) store { ptr, i64, i64 } %t126, ptr %a127 @@ -58761,7 +58787,7 @@ then5752: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t204 -endif5754: +endif5758: %t205 = load ptr, ptr %a1 %t206 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t205, { ptr, i64, i64 } { ptr @.str.3673, i64 9, i64 0 }) store { ptr, i64, i64 } %t206, ptr %a207 @@ -58829,11 +58855,11 @@ endif5754: %t259 = load { ptr, i64, i64 }, ptr %t258 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 2, %t260 - br i1 %t261, label %range5755, label %inrange5756 -range5755: + br i1 %t261, label %range5759, label %inrange5760 +range5759: call void @finch_panic_index(ptr @.str.3678, i64 2963, i64 2, i64 %t260) unreachable -inrange5756: +inrange5760: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds %S.ast.Node, ptr %t262, i64 2 %t264 = load %S.ast.Node, ptr %t263 @@ -58844,11 +58870,11 @@ inrange5756: %t269 = load { ptr, i64, i64 }, ptr %t268 %t270 = extractvalue { ptr, i64, i64 } %t269, 1 %t271 = icmp uge i64 2, %t270 - br i1 %t271, label %range5757, label %inrange5758 -range5757: + br i1 %t271, label %range5761, label %inrange5762 +range5761: call void @finch_panic_index(ptr @.str.3679, i64 2963, i64 2, i64 %t270) unreachable -inrange5758: +inrange5762: %t272 = extractvalue { ptr, i64, i64 } %t269, 0 %t273 = getelementptr inbounds %S.ast.Node, ptr %t272, i64 2 %t274 = load %S.ast.Node, ptr %t273 @@ -58966,14 +58992,14 @@ inrange5758: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t357 -endif5741: +endif5745: %t358 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t358, ptr %a359 store { ptr, i64, i64 } { ptr @.str.3687, i64 5, i64 0 }, ptr %a360 %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) %t362 = icmp ne i32 %t361, 0 - br i1 %t362, label %then5759, label %endif5761 -then5759: + br i1 %t362, label %then5763, label %endif5765 +then5763: %t363 = load ptr, ptr %a1 %t364 = load %S.ast.Node, ptr %a2 %t365 = load { ptr, i64, i64 }, ptr %a10 @@ -58981,20 +59007,20 @@ then5759: %t366 = load ptr, ptr %a1 %t367 = load %S.ast.Type, ptr %a21 %t368 = call i1 @finch.gen.owning(ptr %t366, %S.ast.Type %t367) - br label %logic.from5762 -logic.from5762: - br i1 %t368, label %logic.end5764, label %logic.rhs5763 -logic.rhs5763: + br label %logic.from5766 +logic.from5766: + br i1 %t368, label %logic.end5768, label %logic.rhs5767 +logic.rhs5767: %t369 = load ptr, ptr %a1 %t370 = load %S.ast.Type, ptr %a32 %t371 = call i1 @finch.gen.owning(ptr %t369, %S.ast.Type %t370) - br label %logic.rend5765 -logic.rend5765: - br label %logic.end5764 -logic.end5764: - %t372 = phi i1 [ true, %logic.from5762 ], [ %t371, %logic.rend5765 ] - br i1 %t372, label %then5766, label %endif5768 -then5766: + br label %logic.rend5769 +logic.rend5769: + br label %logic.end5768 +logic.end5768: + %t372 = phi i1 [ true, %logic.from5766 ], [ %t371, %logic.rend5769 ] + br i1 %t372, label %then5770, label %endif5772 +then5770: %t373 = load ptr, ptr %a1 %t374 = load ptr, ptr %a1 %t375 = load ptr, ptr %a1 @@ -59042,11 +59068,11 @@ then5766: %t411 = load { ptr, i64, i64 }, ptr %a407 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 3, %t412 - br i1 %t413, label %range5769, label %inrange5770 -range5769: + br i1 %t413, label %range5773, label %inrange5774 +range5773: call void @finch_panic_index(ptr @.str.3692, i64 2975, i64 3, i64 %t412) unreachable -inrange5770: +inrange5774: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 3 %t416 = load { ptr, i64, i64 }, ptr %t415 @@ -59123,8 +59149,8 @@ inrange5770: call void @finch_str_drop(ptr %a418) call void @finch.drop.arr_str(ptr %a407) call void @finch_str_drop(ptr %a403) - br label %endif5768 -endif5768: + br label %endif5772 +endif5772: %t471 = load ptr, ptr %a1 %t472 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.3698, i64 31, i64 0 }, ptr %a474 @@ -59146,28 +59172,28 @@ endif5768: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t484 -endif5761: +endif5765: %t485 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t485, ptr %a486 store { ptr, i64, i64 } { ptr @.str.3701, i64 4, i64 0 }, ptr %a487 %t488 = call i32 @finch_str_eq(ptr %a486, ptr %a487) %t489 = icmp ne i32 %t488, 0 - br label %logic.from5771 -logic.from5771: - br i1 %t489, label %logic.end5773, label %logic.rhs5772 -logic.rhs5772: + br label %logic.from5775 +logic.from5775: + br i1 %t489, label %logic.end5777, label %logic.rhs5776 +logic.rhs5776: %t490 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t490, ptr %a491 store { ptr, i64, i64 } { ptr @.str.3702, i64 6, i64 0 }, ptr %a492 %t493 = call i32 @finch_str_eq(ptr %a491, ptr %a492) %t494 = icmp ne i32 %t493, 0 - br label %logic.rend5774 -logic.rend5774: - br label %logic.end5773 -logic.end5773: - %t495 = phi i1 [ true, %logic.from5771 ], [ %t494, %logic.rend5774 ] - br i1 %t495, label %then5775, label %endif5777 -then5775: + br label %logic.rend5778 +logic.rend5778: + br label %logic.end5777 +logic.end5777: + %t495 = phi i1 [ true, %logic.from5775 ], [ %t494, %logic.rend5778 ] + br i1 %t495, label %then5779, label %endif5781 +then5779: %t496 = load ptr, ptr %a1 %t497 = load %S.ast.Node, ptr %a2 %t498 = load { ptr, i64, i64 }, ptr %a10 @@ -59183,8 +59209,8 @@ then5775: store { ptr, i64, i64 } { ptr @.str.3703, i64 6, i64 0 }, ptr %a507 %t508 = call i32 @finch_str_eq(ptr %a506, ptr %a507) %t509 = icmp ne i32 %t508, 0 - br i1 %t509, label %then5778, label %endif5780 -then5778: + br i1 %t509, label %then5782, label %endif5784 +then5782: store i64 2, ptr %a499 %t510 = load %S.ast.Type, ptr %a32 store %S.ast.Type %t510, ptr %a511 @@ -59194,8 +59220,8 @@ then5778: store %S.ast.Type %t513, ptr %a504 store %S.ast.Type %t514, ptr %a515 call void @finch.drop.S_ast_Type(ptr %a515) - br label %endif5780 -endif5780: + br label %endif5784 +endif5784: %t516 = load %S.ast.Type, ptr %a504 %t517 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t516) store %S.ast.Type %t517, ptr %a518 @@ -59344,11 +59370,11 @@ endif5780: %t639 = load { ptr, i64, i64 }, ptr %a635 %t640 = extractvalue { ptr, i64, i64 } %t639, 1 %t641 = icmp uge i64 3, %t640 - br i1 %t641, label %range5781, label %inrange5782 -range5781: + br i1 %t641, label %range5785, label %inrange5786 +range5785: call void @finch_panic_index(ptr @.str.3723, i64 3007, i64 3, i64 %t640) unreachable -inrange5782: +inrange5786: %t642 = extractvalue { ptr, i64, i64 } %t639, 0 %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %t642, i64 3 %t644 = load { ptr, i64, i64 }, ptr %t643 @@ -59503,7 +59529,7 @@ inrange5782: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t756 -endif5777: +endif5781: %t757 = load ptr, ptr %a1 %t758 = load %S.ast.Node, ptr %a2 %t759 = load { ptr, i64, i64 }, ptr %a10 @@ -59583,44 +59609,44 @@ entry: store { ptr, i64, i64 } { ptr @.str.3739, i64 4, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br label %logic.from5783 -logic.from5783: - br i1 %t9, label %logic.rhs5784, label %logic.end5785 -logic.rhs5784: + br label %logic.from5787 +logic.from5787: + br i1 %t9, label %logic.rhs5788, label %logic.end5789 +logic.rhs5788: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t11 = load { ptr, i64, i64 }, ptr %t10 store { ptr, i64, i64 } %t11, ptr %a12 store { ptr, i64, i64 } { ptr @.str.3740, i64 3, i64 0 }, ptr %a13 %t14 = call i32 @finch_str_eq(ptr %a12, ptr %a13) %t15 = icmp ne i32 %t14, 0 - br label %logic.rend5786 -logic.rend5786: - br label %logic.end5785 -logic.end5785: - %t16 = phi i1 [ false, %logic.from5783 ], [ %t15, %logic.rend5786 ] - br label %logic.from5787 -logic.from5787: - br i1 %t16, label %logic.rhs5788, label %logic.end5789 -logic.rhs5788: + br label %logic.rend5790 +logic.rend5790: + br label %logic.end5789 +logic.end5789: + %t16 = phi i1 [ false, %logic.from5787 ], [ %t15, %logic.rend5790 ] + br label %logic.from5791 +logic.from5791: + br i1 %t16, label %logic.rhs5792, label %logic.end5793 +logic.rhs5792: %t17 = load ptr, ptr %a1 %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = call i64 @finch.gen.lookup(ptr %t17, { ptr, i64, i64 } %t19) %t21 = icmp slt i64 %t20, 0 - br label %logic.rend5790 -logic.rend5790: - br label %logic.end5789 -logic.end5789: - %t22 = phi i1 [ false, %logic.from5787 ], [ %t21, %logic.rend5790 ] - br i1 %t22, label %then5791, label %endif5793 -then5791: + br label %logic.rend5794 +logic.rend5794: + br label %logic.end5793 +logic.end5793: + %t22 = phi i1 [ false, %logic.from5791 ], [ %t21, %logic.rend5794 ] + br i1 %t22, label %then5795, label %endif5797 +then5795: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic5794, label %ok5795 -panic5794: + br i1 %t24, label %panic5798, label %ok5799 +panic5798: call void @finch_panic(ptr @.str.3741, i64 3029, ptr @.str.3742) unreachable -ok5795: +ok5799: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 21 %t26 = load ptr, ptr %a1 %t27 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 @@ -59631,11 +59657,11 @@ ok5795: %t32 = load { ptr, i64, i64 }, ptr %t25 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range5796, label %inrange5797 -range5796: + br i1 %t34, label %range5800, label %inrange5801 +range5800: call void @finch_panic_index(ptr @.str.3743, i64 3029, i64 %t31, i64 %t33) unreachable -inrange5797: +inrange5801: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 %t37 = load %S.gen.EnumDef, ptr %t36 @@ -59651,33 +59677,33 @@ inrange5797: %t47 = load i64, ptr %t43 %t48 = load ptr, ptr %t42 store i64 0, ptr %a49 - br label %find.cond5798 -find.cond5798: + br label %find.cond5802 +find.cond5802: %t50 = load i64, ptr %a49 %t51 = icmp slt i64 %t50, %t47 - br i1 %t51, label %find.body5799, label %find.end5802 -find.body5799: + br i1 %t51, label %find.body5803, label %find.end5806 +find.body5803: %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t50 %t53 = load { ptr, i64, i64 }, ptr %t52 store { ptr, i64, i64 } %t53, ptr %a54 store { ptr, i64, i64 } %t45, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 - br i1 %t57, label %find.hit5800, label %find.next5801 -find.hit5800: + br i1 %t57, label %find.hit5804, label %find.next5805 +find.hit5804: store i64 %t50, ptr %a46 - br label %find.end5802 -find.next5801: + br label %find.end5806 +find.next5805: %t58 = add i64 %t50, 1 store i64 %t58, ptr %a49 - br label %find.cond5798 -find.end5802: + br label %find.cond5802 +find.end5806: %t59 = load i64, ptr %a46 store i64 %t59, ptr %a60 %t61 = load i64, ptr %a60 %t62 = icmp slt i64 %t61, 0 - br i1 %t62, label %then5803, label %endif5805 -then5803: + br i1 %t62, label %then5807, label %endif5809 +then5807: %t63 = load ptr, ptr %a1 %t64 = load %S.ast.Node, ptr %a2 %t65 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -59728,18 +59754,18 @@ then5803: call void @finch.gen.fail(ptr %t63, %S.ast.Node %t64, { ptr, i64, i64 } %t103) store { ptr, i64, i64 } %t103, ptr %a104 call void @finch_str_drop(ptr %a104) - br label %endif5805 -endif5805: + br label %endif5809 +endif5809: %t105 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 3 %t106 = load i64, ptr %a60 %t107 = load { ptr, i64, i64 }, ptr %t105 %t108 = extractvalue { ptr, i64, i64 } %t107, 1 %t109 = icmp uge i64 %t106, %t108 - br i1 %t109, label %range5806, label %inrange5807 -range5806: + br i1 %t109, label %range5810, label %inrange5811 +range5810: call void @finch_panic_index(ptr @.str.3749, i64 3034, i64 %t106, i64 %t108) unreachable -inrange5807: +inrange5811: %t110 = extractvalue { ptr, i64, i64 } %t107, 0 %t111 = getelementptr inbounds i64, ptr %t110, i64 %t106 %t112 = load i64, ptr %t111 @@ -59753,7 +59779,7 @@ inrange5807: %t120 = insertvalue %S.gen.Val %t115, %S.ast.Type %t119, 1 call void @finch.drop.S_gen_EnumDef(ptr %a41) ret %S.gen.Val %t120 -endif5793: +endif5797: %t121 = load ptr, ptr %a1 %t122 = load ptr, ptr %a1 %t123 = load %S.ast.Node, ptr %a2 @@ -60018,11 +60044,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range5808, label %inrange5809 -range5808: + br i1 %t8, label %range5812, label %inrange5813 +range5812: call void @finch_panic_index(ptr @.str.3751, i64 3042, i64 0, i64 %t7) unreachable -inrange5809: +inrange5813: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -60040,46 +60066,46 @@ inrange5809: store { ptr, i64, i64 } { ptr @.str.3752, i64 4, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 - br label %logic.from5810 -logic.from5810: - br i1 %t25, label %logic.end5812, label %logic.rhs5811 -logic.rhs5811: + br label %logic.from5814 +logic.from5814: + br i1 %t25, label %logic.end5816, label %logic.rhs5815 +logic.rhs5815: %t26 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3753, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br label %logic.rend5813 -logic.rend5813: - br label %logic.end5812 -logic.end5812: - %t32 = phi i1 [ true, %logic.from5810 ], [ %t31, %logic.rend5813 ] - br i1 %t32, label %then5814, label %endif5816 -then5814: + br label %logic.rend5817 +logic.rend5817: + br label %logic.end5816 +logic.end5816: + %t32 = phi i1 [ true, %logic.from5814 ], [ %t31, %logic.rend5817 ] + br i1 %t32, label %then5818, label %endif5820 +then5818: %t33 = load ptr, ptr %a1 %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 0, %t36 - br i1 %t37, label %range5817, label %inrange5818 -range5817: + br i1 %t37, label %range5821, label %inrange5822 +range5821: call void @finch_panic_index(ptr @.str.3754, i64 3045, i64 0, i64 %t36) unreachable -inrange5818: +inrange5822: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 0 %t40 = load %S.ast.Node, ptr %t39 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.3755, i64 30, i64 0 }) - br label %endif5816 -endif5816: + br label %endif5820 +endif5820: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic5819, label %ok5820 -panic5819: + br i1 %t42, label %panic5823, label %ok5824 +panic5823: call void @finch_panic(ptr @.str.3756, i64 3047, ptr @.str.3757) unreachable -ok5820: +ok5824: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 11 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 %t45 = load i64, ptr %t44 @@ -60095,8 +60121,8 @@ ok5820: store { ptr, i64, i64 } { ptr @.str.3759, i64 6, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %then5821, label %endif5823 -then5821: + br i1 %t56, label %then5825, label %endif5827 +then5825: %t57 = load ptr, ptr %a1 %t58 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 %t59 = load { ptr, i64, i64 }, ptr %t58 @@ -60106,8 +60132,8 @@ then5821: store i64 %t62, ptr %a49 %t63 = load i64, ptr %a49 %t64 = icmp sge i64 %t63, 0 - br i1 %t64, label %then5824, label %endif5826 -then5824: + br i1 %t64, label %then5828, label %endif5830 +then5828: %t65 = load ptr, ptr %a1 %t66 = load ptr, ptr %a1 %t67 = load %S.ast.Type, ptr %a19 @@ -60140,11 +60166,11 @@ then5824: %t90 = load { ptr, i64, i64 }, ptr %a86 %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null - br i1 %t92, label %panic5827, label %ok5828 -panic5827: + br i1 %t92, label %panic5831, label %ok5832 +panic5831: call void @finch_panic(ptr @.str.3763, i64 3054, ptr @.str.3764) unreachable -ok5828: +ok5832: %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 16 %t94 = load ptr, ptr %a1 %t95 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 @@ -60155,22 +60181,22 @@ ok5828: %t100 = load { ptr, i64, i64 }, ptr %t93 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 %t99, %t101 - br i1 %t102, label %range5829, label %inrange5830 -range5829: + br i1 %t102, label %range5833, label %inrange5834 +range5833: call void @finch_panic_index(ptr @.str.3765, i64 3054, i64 %t99, i64 %t101) unreachable -inrange5830: +inrange5834: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds %S.gen.StructDef, ptr %t103, i64 %t99 %t105 = getelementptr inbounds %S.gen.StructDef, ptr %t104, i32 0, i32 3 %t106 = load { ptr, i64, i64 }, ptr %t105 %t107 = extractvalue { ptr, i64, i64 } %t106, 1 %t108 = icmp uge i64 0, %t107 - br i1 %t108, label %range5831, label %inrange5832 -range5831: + br i1 %t108, label %range5835, label %inrange5836 +range5835: call void @finch_panic_index(ptr @.str.3766, i64 3054, i64 0, i64 %t107) unreachable -inrange5832: +inrange5836: %t109 = extractvalue { ptr, i64, i64 } %t106, 0 %t110 = getelementptr inbounds i64, ptr %t109, i64 0 %t111 = load i64, ptr %t110 @@ -60191,10 +60217,10 @@ inrange5832: store { ptr, i64, i64 } %t120, ptr %a50 store { ptr, i64, i64 } %t122, ptr %a123 call void @finch_str_drop(ptr %a123) - br label %endif5826 -endif5826: - br label %endif5823 -endif5823: + br label %endif5830 +endif5830: + br label %endif5827 +endif5827: %t124 = load ptr, ptr %a1 %t125 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t124, { ptr, i64, i64 } { ptr @.str.3767, i64 9, i64 0 }) store { ptr, i64, i64 } %t125, ptr %a126 @@ -60212,23 +60238,23 @@ endif5823: store i64 %t137, ptr %a138 %t139 = load i64, ptr %a138 store i64 0, ptr %a140 - br label %for.cond5833 -for.cond5833: + br label %for.cond5837 +for.cond5837: %t141 = load i64, ptr %a140 %t142 = icmp slt i64 %t141, %t139 - br i1 %t142, label %for.body5834, label %for.end5836 -for.body5834: + br i1 %t142, label %for.body5838, label %for.end5840 +for.body5838: %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t144 = load i64, ptr %a140 %t145 = add i64 1, %t144 %t146 = load { ptr, i64, i64 }, ptr %t143 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 %t145, %t147 - br i1 %t148, label %range5837, label %inrange5838 -range5837: + br i1 %t148, label %range5841, label %inrange5842 +range5841: call void @finch_panic_index(ptr @.str.3769, i64 3066, i64 %t145, i64 %t147) unreachable -inrange5838: +inrange5842: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds %S.ast.Node, ptr %t149, i64 %t145 %t151 = load %S.ast.Node, ptr %t150 @@ -60237,13 +60263,13 @@ inrange5838: %t154 = load %S.ast.Node, ptr %a153 store %S.ast.Node %t154, ptr %a155 %t156 = load i1, ptr %a127 - br i1 %t156, label %then5839, label %endif5841 -then5839: + br i1 %t156, label %then5843, label %endif5845 +then5843: %t157 = load ptr, ptr %a1 %t158 = load %S.ast.Node, ptr %a155 call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } { ptr @.str.3770, i64 72, i64 0 }) - br label %endif5841 -endif5841: + br label %endif5845 +endif5845: %t159 = load ptr, ptr %a1 %t160 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t159, { ptr, i64, i64 } { ptr @.str.3771, i64 9, i64 0 }) store { ptr, i64, i64 } %t160, ptr %a161 @@ -60254,23 +60280,23 @@ endif5841: store i64 -1, ptr %a166 %t167 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 %t168 = load i1, ptr %t167 - br i1 %t168, label %then5842, label %else5843 -then5842: + br i1 %t168, label %then5846, label %else5847 +then5846: store i1 true, ptr %a127 %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a161 call void @finch.gen.br(ptr %t169, { ptr, i64, i64 } %t170) - br label %endif5844 -else5843: + br label %endif5848 +else5847: %t171 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 %t172 = load { ptr, i64, i64 }, ptr %t171 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 0, %t173 - br i1 %t174, label %range5845, label %inrange5846 -range5845: + br i1 %t174, label %range5849, label %inrange5850 +range5849: call void @finch_panic_index(ptr @.str.3773, i64 3078, i64 0, i64 %t173) unreachable -inrange5846: +inrange5850: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 0 %t177 = getelementptr inbounds %S.ast.Node, ptr %t176, i32 0, i32 9 @@ -60282,27 +60308,27 @@ inrange5846: %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 %t184 = load i64, ptr %t183 store i64 0, ptr %a185 - br label %for.cond5847 -for.cond5847: + br label %for.cond5851 +for.cond5851: %t186 = load i64, ptr %a185 %t187 = icmp slt i64 %t186, %t184 - br i1 %t187, label %for.body5848, label %for.end5850 -for.body5848: + br i1 %t187, label %for.body5852, label %for.end5854 +for.body5852: store { ptr, i64, i64 } { ptr @.str.3774, i64 0, i64 0 }, ptr %a188 %t189 = load i64, ptr %a49 %t190 = icmp sge i64 %t189, 0 - br i1 %t190, label %then5851, label %else5852 -then5851: + br i1 %t190, label %then5855, label %else5856 +then5855: %t191 = load ptr, ptr %a1 %t192 = load i64, ptr %a185 %t193 = load { ptr, i64, i64 }, ptr %a182 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 %t192, %t194 - br i1 %t195, label %range5854, label %inrange5855 -range5854: + br i1 %t195, label %range5858, label %inrange5859 +range5858: call void @finch_panic_index(ptr @.str.3775, i64 3082, i64 %t192, i64 %t194) unreachable -inrange5855: +inrange5859: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 %t192 %t198 = load %S.ast.Node, ptr %t197 @@ -60318,49 +60344,49 @@ inrange5855: %t208 = load i64, ptr %t202 %t209 = load ptr, ptr %a129 store i64 0, ptr %a210 - br label %find.cond5856 -find.cond5856: + br label %find.cond5860 +find.cond5860: %t211 = load i64, ptr %a210 %t212 = icmp slt i64 %t211, %t208 - br i1 %t212, label %find.body5857, label %find.end5860 -find.body5857: + br i1 %t212, label %find.body5861, label %find.end5864 +find.body5861: %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i64 %t211 %t214 = load { ptr, i64, i64 }, ptr %t213 store { ptr, i64, i64 } %t214, ptr %a215 store { ptr, i64, i64 } %t206, ptr %a216 %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) %t218 = icmp ne i32 %t217, 0 - br i1 %t218, label %find.hit5858, label %find.next5859 -find.hit5858: + br i1 %t218, label %find.hit5862, label %find.next5863 +find.hit5862: store i64 %t211, ptr %a207 - br label %find.end5860 -find.next5859: + br label %find.end5864 +find.next5863: %t219 = add i64 %t211, 1 store i64 %t219, ptr %a210 - br label %find.cond5856 -find.end5860: + br label %find.cond5860 +find.end5864: store { ptr, i64, i64 } %t206, ptr %a220 call void @finch_str_drop(ptr %a220) %t221 = load i64, ptr %a207 %t222 = icmp sge i64 %t221, 0 - br i1 %t222, label %then5861, label %endif5863 -then5861: + br i1 %t222, label %then5865, label %endif5867 +then5865: %t223 = load ptr, ptr %a1 %t224 = load i64, ptr %a185 %t225 = load { ptr, i64, i64 }, ptr %a182 %t226 = extractvalue { ptr, i64, i64 } %t225, 1 %t227 = icmp uge i64 %t224, %t226 - br i1 %t227, label %range5864, label %inrange5865 -range5864: + br i1 %t227, label %range5868, label %inrange5869 +range5868: call void @finch_panic_index(ptr @.str.3776, i64 3084, i64 %t224, i64 %t226) unreachable -inrange5865: +inrange5869: %t228 = extractvalue { ptr, i64, i64 } %t225, 0 %t229 = getelementptr inbounds %S.ast.Node, ptr %t228, i64 %t224 %t230 = load %S.ast.Node, ptr %t229 call void @finch.gen.fail(ptr %t223, %S.ast.Node %t230, { ptr, i64, i64 } { ptr @.str.3777, i64 49, i64 0 }) - br label %endif5863 -endif5863: + br label %endif5867 +endif5867: %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t232 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 %t233 = load i64, ptr %t232 @@ -60377,29 +60403,29 @@ endif5863: %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i32 0, i32 1 %t242 = load i64, ptr %t241 %t243 = icmp sgt i64 %t242, 0 - br i1 %t243, label %then5866, label %endif5868 -then5866: + br i1 %t243, label %then5870, label %endif5872 +then5870: %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = icmp sgt i64 %t245, 1 - br i1 %t246, label %then5869, label %endif5871 -then5869: + br i1 %t246, label %then5873, label %endif5875 +then5873: %t247 = load ptr, ptr %a1 %t248 = load i64, ptr %a185 %t249 = load { ptr, i64, i64 }, ptr %a182 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 %t248, %t250 - br i1 %t251, label %range5872, label %inrange5873 -range5872: + br i1 %t251, label %range5876, label %inrange5877 +range5876: call void @finch_panic_index(ptr @.str.3778, i64 3089, i64 %t248, i64 %t250) unreachable -inrange5873: +inrange5877: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 %t254 = load %S.ast.Node, ptr %t253 call void @finch.gen.fail(ptr %t247, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3779, i64 52, i64 0 }) - br label %endif5871 -endif5871: + br label %endif5875 +endif5875: %t255 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 %t256 = load { ptr, i64, i64 }, ptr %t255 store { ptr, i64, i64 } %t256, ptr %a257 @@ -60412,8 +60438,8 @@ endif5871: %t262 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 %t263 = load i64, ptr %t262 store i64 %t263, ptr %a166 - br label %endif5868 -endif5868: + br label %endif5872 +endif5872: %t264 = load ptr, ptr %a1 %t265 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } { ptr @.str.3780, i64 12, i64 0 }, ptr %a267 @@ -60446,18 +60472,18 @@ endif5868: store { ptr, i64, i64 } %t287, ptr %a288 call void @finch_str_drop(ptr %a288) call void @finch.drop.S_gen_SumPat(ptr %a201) - br label %endif5853 -else5852: + br label %endif5857 +else5856: %t289 = load ptr, ptr %a1 %t290 = load i64, ptr %a185 %t291 = load { ptr, i64, i64 }, ptr %a182 %t292 = extractvalue { ptr, i64, i64 } %t291, 1 %t293 = icmp uge i64 %t290, %t292 - br i1 %t293, label %range5874, label %inrange5875 -range5874: + br i1 %t293, label %range5878, label %inrange5879 +range5878: call void @finch_panic_index(ptr @.str.3782, i64 3096, i64 %t290, i64 %t292) unreachable -inrange5875: +inrange5879: %t294 = extractvalue { ptr, i64, i64 } %t291, 0 %t295 = getelementptr inbounds %S.ast.Node, ptr %t294, i64 %t290 %t296 = load %S.ast.Node, ptr %t295 @@ -60471,62 +60497,62 @@ inrange5875: %t304 = load i64, ptr %t300 %t305 = load ptr, ptr %a129 store i64 0, ptr %a306 - br label %find.cond5876 -find.cond5876: + br label %find.cond5880 +find.cond5880: %t307 = load i64, ptr %a306 %t308 = icmp slt i64 %t307, %t304 - br i1 %t308, label %find.body5877, label %find.end5880 -find.body5877: + br i1 %t308, label %find.body5881, label %find.end5884 +find.body5881: %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t305, i64 %t307 %t310 = load { ptr, i64, i64 }, ptr %t309 store { ptr, i64, i64 } %t310, ptr %a311 store { ptr, i64, i64 } %t302, ptr %a312 %t313 = call i32 @finch_str_eq(ptr %a311, ptr %a312) %t314 = icmp ne i32 %t313, 0 - br i1 %t314, label %find.hit5878, label %find.next5879 -find.hit5878: + br i1 %t314, label %find.hit5882, label %find.next5883 +find.hit5882: store i64 %t307, ptr %a303 - br label %find.end5880 -find.next5879: + br label %find.end5884 +find.next5883: %t315 = add i64 %t307, 1 store i64 %t315, ptr %a306 - br label %find.cond5876 -find.end5880: + br label %find.cond5880 +find.end5884: %t316 = load i64, ptr %a303 %t317 = icmp sge i64 %t316, 0 - br label %logic.from5881 -logic.from5881: - br i1 %t317, label %logic.rhs5882, label %logic.end5883 -logic.rhs5882: + br label %logic.from5885 +logic.from5885: + br i1 %t317, label %logic.rhs5886, label %logic.end5887 +logic.rhs5886: %t318 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t319 = load { ptr, i64, i64 }, ptr %t318 store { ptr, i64, i64 } %t319, ptr %a320 store { ptr, i64, i64 } { ptr @.str.3783, i64 4, i64 0 }, ptr %a321 %t322 = call i32 @finch_str_eq(ptr %a320, ptr %a321) %t323 = icmp ne i32 %t322, 0 - br label %logic.rend5884 -logic.rend5884: - br label %logic.end5883 -logic.end5883: - %t324 = phi i1 [ false, %logic.from5881 ], [ %t323, %logic.rend5884 ] - br i1 %t324, label %then5885, label %endif5887 -then5885: + br label %logic.rend5888 +logic.rend5888: + br label %logic.end5887 +logic.end5887: + %t324 = phi i1 [ false, %logic.from5885 ], [ %t323, %logic.rend5888 ] + br i1 %t324, label %then5889, label %endif5891 +then5889: %t325 = load ptr, ptr %a1 %t326 = load i64, ptr %a185 %t327 = load { ptr, i64, i64 }, ptr %a182 %t328 = extractvalue { ptr, i64, i64 } %t327, 1 %t329 = icmp uge i64 %t326, %t328 - br i1 %t329, label %range5888, label %inrange5889 -range5888: + br i1 %t329, label %range5892, label %inrange5893 +range5892: call void @finch_panic_index(ptr @.str.3784, i64 3098, i64 %t326, i64 %t328) unreachable -inrange5889: +inrange5893: %t330 = extractvalue { ptr, i64, i64 } %t327, 0 %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 %t332 = load %S.ast.Node, ptr %t331 call void @finch.gen.fail(ptr %t325, %S.ast.Node %t332, { ptr, i64, i64 } { ptr @.str.3785, i64 49, i64 0 }) - br label %endif5887 -endif5887: + br label %endif5891 +endif5891: %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t334 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 %t335 = load { ptr, i64, i64 }, ptr %t334 @@ -60547,11 +60573,11 @@ endif5887: %t347 = load { ptr, i64, i64 }, ptr %a182 %t348 = extractvalue { ptr, i64, i64 } %t347, 1 %t349 = icmp uge i64 %t346, %t348 - br i1 %t349, label %range5890, label %inrange5891 -range5890: + br i1 %t349, label %range5894, label %inrange5895 +range5894: call void @finch_panic_index(ptr @.str.3787, i64 3101, i64 %t346, i64 %t348) unreachable -inrange5891: +inrange5895: %t350 = extractvalue { ptr, i64, i64 } %t347, 0 %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 %t346 %t352 = load %S.ast.Node, ptr %t351 @@ -60567,22 +60593,22 @@ inrange5891: store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) call void @finch.drop.S_gen_Val(ptr %a299) - br label %endif5853 -endif5853: + br label %endif5857 +endif5857: %t361 = load i64, ptr %a185 %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 %t363 = load i64, ptr %t362 %t364 = sub i64 %t363, 1 %t365 = icmp eq i64 %t361, %t364 - br i1 %t365, label %then5892, label %else5893 -then5892: + br i1 %t365, label %then5896, label %else5897 +then5896: %t366 = load ptr, ptr %a1 %t367 = load { ptr, i64, i64 }, ptr %a188 %t368 = load { ptr, i64, i64 }, ptr %a161 %t369 = load { ptr, i64, i64 }, ptr %a164 call void @finch.gen.condBr(ptr %t366, { ptr, i64, i64 } %t367, { ptr, i64, i64 } %t368, { ptr, i64, i64 } %t369) - br label %endif5894 -else5893: + br label %endif5898 +else5897: %t370 = load ptr, ptr %a1 %t371 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t370, { ptr, i64, i64 } { ptr @.str.3788, i64 8, i64 0 }) store { ptr, i64, i64 } %t371, ptr %a372 @@ -60595,19 +60621,19 @@ else5893: %t378 = load { ptr, i64, i64 }, ptr %a372 call void @finch.gen.label(ptr %t377, { ptr, i64, i64 } %t378) call void @finch_str_drop(ptr %a372) - br label %endif5894 -endif5894: + br label %endif5898 +endif5898: call void @finch_str_drop(ptr %a188) - br label %for.step5849 -for.step5849: + br label %for.step5853 +for.step5853: %t379 = load i64, ptr %a185 %t380 = add i64 %t379, 1 store i64 %t380, ptr %a185 - br label %for.cond5847 -for.end5850: + br label %for.cond5851 +for.end5854: call void @finch.drop.arr_S_ast_Node(ptr %a182) - br label %endif5844 -endif5844: + br label %endif5848 +endif5848: %t381 = load ptr, ptr %a1 %t382 = load { ptr, i64, i64 }, ptr %a161 call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) @@ -60616,17 +60642,17 @@ endif5844: %t385 = icmp sgt i64 %t384, 0 store i1 %t385, ptr %a386 %t387 = load i1, ptr %a386 - br i1 %t387, label %then5895, label %endif5897 -then5895: + br i1 %t387, label %then5899, label %endif5901 +then5899: %t388 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t388) %t389 = load ptr, ptr %a1 %t390 = icmp eq ptr %t389, null - br i1 %t390, label %panic5898, label %ok5899 -panic5898: + br i1 %t390, label %panic5902, label %ok5903 +panic5902: call void @finch_panic(ptr @.str.3789, i64 3116, ptr @.str.3790) unreachable -ok5899: +ok5903: %t391 = getelementptr inbounds %S.gen.Gen, ptr %t389, i32 0, i32 16 %t392 = load ptr, ptr %a1 %t393 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 @@ -60637,11 +60663,11 @@ ok5899: %t398 = load { ptr, i64, i64 }, ptr %t391 %t399 = extractvalue { ptr, i64, i64 } %t398, 1 %t400 = icmp uge i64 %t397, %t399 - br i1 %t400, label %range5900, label %inrange5901 -range5900: + br i1 %t400, label %range5904, label %inrange5905 +range5904: call void @finch_panic_index(ptr @.str.3791, i64 3116, i64 %t397, i64 %t399) unreachable -inrange5901: +inrange5905: %t401 = extractvalue { ptr, i64, i64 } %t398, 0 %t402 = getelementptr inbounds %S.gen.StructDef, ptr %t401, i64 %t397 %t403 = load %S.gen.StructDef, ptr %t402 @@ -60652,21 +60678,21 @@ inrange5901: %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 %t409 = load i64, ptr %t408 store i64 0, ptr %a410 - br label %for.cond5902 -for.cond5902: + br label %for.cond5906 +for.cond5906: %t411 = load i64, ptr %a410 %t412 = icmp slt i64 %t411, %t409 - br i1 %t412, label %for.body5903, label %for.end5905 -for.body5903: + br i1 %t412, label %for.body5907, label %for.end5909 +for.body5907: %t413 = load i64, ptr %a410 %t414 = load { ptr, i64, i64 }, ptr %a165 %t415 = extractvalue { ptr, i64, i64 } %t414, 1 %t416 = icmp uge i64 %t413, %t415 - br i1 %t416, label %range5906, label %inrange5907 -range5906: + br i1 %t416, label %range5910, label %inrange5911 +range5910: call void @finch_panic_index(ptr @.str.3792, i64 3118, i64 %t413, i64 %t415) unreachable -inrange5907: +inrange5911: %t417 = extractvalue { ptr, i64, i64 } %t414, 0 %t418 = getelementptr inbounds %S.ast.Node, ptr %t417, i64 %t413 %t419 = getelementptr inbounds %S.ast.Node, ptr %t418, i32 0, i32 1 @@ -60675,27 +60701,27 @@ inrange5907: store { ptr, i64, i64 } { ptr @.str.3793, i64 1, i64 0 }, ptr %a422 %t423 = call i32 @finch_str_eq(ptr %a421, ptr %a422) %t424 = icmp ne i32 %t423, 0 - br i1 %t424, label %then5908, label %endif5910 -then5908: - br label %for.step5904 -endif5910: + br i1 %t424, label %then5912, label %endif5914 +then5912: + br label %for.step5908 +endif5914: %t425 = load ptr, ptr %a1 %t426 = icmp eq ptr %t425, null - br i1 %t426, label %panic5911, label %ok5912 -panic5911: + br i1 %t426, label %panic5915, label %ok5916 +panic5915: call void @finch_panic(ptr @.str.3794, i64 3121, ptr @.str.3795) unreachable -ok5912: +ok5916: %t427 = getelementptr inbounds %S.gen.Gen, ptr %t425, i32 0, i32 22 %t428 = load i64, ptr %a49 %t429 = load { ptr, i64, i64 }, ptr %t427 %t430 = extractvalue { ptr, i64, i64 } %t429, 1 %t431 = icmp uge i64 %t428, %t430 - br i1 %t431, label %range5913, label %inrange5914 -range5913: + br i1 %t431, label %range5917, label %inrange5918 +range5917: call void @finch_panic_index(ptr @.str.3796, i64 3121, i64 %t428, i64 %t430) unreachable -inrange5914: +inrange5918: %t432 = extractvalue { ptr, i64, i64 } %t429, 0 %t433 = getelementptr inbounds %S.gen.SumDef, ptr %t432, i64 %t428 %t434 = getelementptr inbounds %S.gen.SumDef, ptr %t433, i32 0, i32 4 @@ -60703,11 +60729,11 @@ inrange5914: %t436 = load { ptr, i64, i64 }, ptr %t434 %t437 = extractvalue { ptr, i64, i64 } %t436, 1 %t438 = icmp uge i64 %t435, %t437 - br i1 %t438, label %range5915, label %inrange5916 -range5915: + br i1 %t438, label %range5919, label %inrange5920 +range5919: call void @finch_panic_index(ptr @.str.3797, i64 3121, i64 %t435, i64 %t437) unreachable -inrange5916: +inrange5920: %t439 = extractvalue { ptr, i64, i64 } %t436, 0 %t440 = getelementptr inbounds i64, ptr %t439, i64 %t435 %t441 = load i64, ptr %t440 @@ -60719,11 +60745,11 @@ inrange5916: %t447 = load { ptr, i64, i64 }, ptr %t445 %t448 = extractvalue { ptr, i64, i64 } %t447, 1 %t449 = icmp uge i64 %t446, %t448 - br i1 %t449, label %range5917, label %inrange5918 -range5917: + br i1 %t449, label %range5921, label %inrange5922 +range5921: call void @finch_panic_index(ptr @.str.3798, i64 3122, i64 %t446, i64 %t448) unreachable -inrange5918: +inrange5922: %t450 = extractvalue { ptr, i64, i64 } %t447, 0 %t451 = getelementptr inbounds %S.ast.Type, ptr %t450, i64 %t446 %t452 = load %S.ast.Type, ptr %t451 @@ -60766,11 +60792,11 @@ inrange5918: %t485 = load { ptr, i64, i64 }, ptr %t483 %t486 = extractvalue { ptr, i64, i64 } %t485, 1 %t487 = icmp uge i64 %t484, %t486 - br i1 %t487, label %range5919, label %inrange5920 -range5919: + br i1 %t487, label %range5923, label %inrange5924 +range5923: call void @finch_panic_index(ptr @.str.3802, i64 3123, i64 %t484, i64 %t486) unreachable -inrange5920: +inrange5924: %t488 = extractvalue { ptr, i64, i64 } %t485, 0 %t489 = getelementptr inbounds i64, ptr %t488, i64 %t484 %t490 = load i64, ptr %t489 @@ -60793,11 +60819,11 @@ inrange5920: %t504 = load { ptr, i64, i64 }, ptr %a165 %t505 = extractvalue { ptr, i64, i64 } %t504, 1 %t506 = icmp uge i64 %t503, %t505 - br i1 %t506, label %range5921, label %inrange5922 -range5921: + br i1 %t506, label %range5925, label %inrange5926 +range5925: call void @finch_panic_index(ptr @.str.3803, i64 3124, i64 %t503, i64 %t505) unreachable -inrange5922: +inrange5926: %t507 = extractvalue { ptr, i64, i64 } %t504, 0 %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 %t503 %t509 = load %S.ast.Node, ptr %t508 @@ -60805,11 +60831,11 @@ inrange5922: %t511 = load { ptr, i64, i64 }, ptr %a165 %t512 = extractvalue { ptr, i64, i64 } %t511, 1 %t513 = icmp uge i64 %t510, %t512 - br i1 %t513, label %range5923, label %inrange5924 -range5923: + br i1 %t513, label %range5927, label %inrange5928 +range5927: call void @finch_panic_index(ptr @.str.3804, i64 3124, i64 %t510, i64 %t512) unreachable -inrange5924: +inrange5928: %t514 = extractvalue { ptr, i64, i64 } %t511, 0 %t515 = getelementptr inbounds %S.ast.Node, ptr %t514, i64 %t510 %t516 = getelementptr inbounds %S.ast.Node, ptr %t515, i32 0, i32 1 @@ -60826,25 +60852,25 @@ inrange5924: call void @finch_str_drop(ptr %a525) call void @finch_str_drop(ptr %a501) call void @finch.drop.S_ast_Type(ptr %a456) - br label %for.step5904 -for.step5904: + br label %for.step5908 +for.step5908: %t526 = load i64, ptr %a410 %t527 = add i64 %t526, 1 store i64 %t527, ptr %a410 - br label %for.cond5902 -for.end5905: + br label %for.cond5906 +for.end5909: call void @finch.drop.S_gen_StructDef(ptr %a407) - br label %endif5897 -endif5897: + br label %endif5901 +endif5901: %t528 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 %t529 = load { ptr, i64, i64 }, ptr %t528 %t530 = extractvalue { ptr, i64, i64 } %t529, 1 %t531 = icmp uge i64 1, %t530 - br i1 %t531, label %range5925, label %inrange5926 -range5925: + br i1 %t531, label %range5929, label %inrange5930 +range5929: call void @finch_panic_index(ptr @.str.3805, i64 3127, i64 1, i64 %t530) unreachable -inrange5926: +inrange5930: %t532 = extractvalue { ptr, i64, i64 } %t529, 0 %t533 = getelementptr inbounds %S.ast.Node, ptr %t532, i64 1 %t534 = load %S.ast.Node, ptr %t533 @@ -60853,31 +60879,31 @@ inrange5926: %t537 = load %S.ast.Node, ptr %a536 store %S.ast.Node %t537, ptr %a538 %t539 = load i1, ptr %a3 - br i1 %t539, label %then5927, label %else5928 -then5927: + br i1 %t539, label %then5931, label %else5932 +then5931: %t540 = load ptr, ptr %a1 %t541 = load %S.ast.Node, ptr %a538 %t542 = call %S.gen.Val @finch.gen.expr(ptr %t540, %S.ast.Node %t541) store %S.gen.Val %t542, ptr %a543 %t544 = load i64, ptr %a140 %t545 = icmp eq i64 %t544, 0 - br label %logic.from5930 -logic.from5930: - br i1 %t545, label %logic.end5932, label %logic.rhs5931 -logic.rhs5931: + br label %logic.from5934 +logic.from5934: + br i1 %t545, label %logic.end5936, label %logic.rhs5935 +logic.rhs5935: %t546 = getelementptr inbounds %S.ast.Type, ptr %a133, i32 0, i32 0 %t547 = load { ptr, i64, i64 }, ptr %t546 store { ptr, i64, i64 } %t547, ptr %a548 store { ptr, i64, i64 } { ptr @.str.3806, i64 4, i64 0 }, ptr %a549 %t550 = call i32 @finch_str_eq(ptr %a548, ptr %a549) %t551 = icmp ne i32 %t550, 0 - br label %logic.rend5933 -logic.rend5933: - br label %logic.end5932 -logic.end5932: - %t552 = phi i1 [ true, %logic.from5930 ], [ %t551, %logic.rend5933 ] - br i1 %t552, label %then5934, label %endif5936 -then5934: + br label %logic.rend5937 +logic.rend5937: + br label %logic.end5936 +logic.end5936: + %t552 = phi i1 [ true, %logic.from5934 ], [ %t551, %logic.rend5937 ] + br i1 %t552, label %then5938, label %endif5940 +then5938: %t553 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 %t554 = getelementptr inbounds %S.ast.Type, ptr %t553, i32 0, i32 0 %t555 = load { ptr, i64, i64 }, ptr %t554 @@ -60885,10 +60911,10 @@ then5934: store { ptr, i64, i64 } { ptr @.str.3807, i64 4, i64 0 }, ptr %a557 %t558 = call i32 @finch_str_eq(ptr %a556, ptr %a557) %t559 = icmp ne i32 %t558, 0 - br label %logic.from5937 -logic.from5937: - br i1 %t559, label %logic.end5939, label %logic.rhs5938 -logic.rhs5938: + br label %logic.from5941 +logic.from5941: + br i1 %t559, label %logic.end5943, label %logic.rhs5942 +logic.rhs5942: %t560 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 %t561 = getelementptr inbounds %S.ast.Type, ptr %t560, i32 0, i32 0 %t562 = load { ptr, i64, i64 }, ptr %t561 @@ -60896,18 +60922,18 @@ logic.rhs5938: store { ptr, i64, i64 } { ptr @.str.3808, i64 4, i64 0 }, ptr %a564 %t565 = call i32 @finch_str_eq(ptr %a563, ptr %a564) %t566 = icmp ne i32 %t565, 0 - br label %logic.rend5940 -logic.rend5940: - br label %logic.end5939 -logic.end5939: - %t567 = phi i1 [ true, %logic.from5937 ], [ %t566, %logic.rend5940 ] - br i1 %t567, label %then5941, label %endif5943 -then5941: + br label %logic.rend5944 +logic.rend5944: + br label %logic.end5943 +logic.end5943: + %t567 = phi i1 [ true, %logic.from5941 ], [ %t566, %logic.rend5944 ] + br i1 %t567, label %then5945, label %endif5947 +then5945: %t568 = load ptr, ptr %a1 %t569 = load %S.ast.Node, ptr %a538 call void @finch.gen.fail(ptr %t568, %S.ast.Node %t569, { ptr, i64, i64 } { ptr @.str.3809, i64 52, i64 0 }) - br label %endif5943 -endif5943: + br label %endif5947 +endif5947: %t570 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 %t571 = load %S.ast.Type, ptr %t570 store %S.ast.Type %t571, ptr %a572 @@ -60917,8 +60943,8 @@ endif5943: store %S.ast.Type %t574, ptr %a133 store %S.ast.Type %t575, ptr %a576 call void @finch.drop.S_ast_Type(ptr %a576) - br label %endif5936 -endif5936: + br label %endif5940 +endif5940: %t577 = load ptr, ptr %a1 %t578 = load %S.gen.Val, ptr %a543 %t579 = load %S.ast.Type, ptr %a133 @@ -60933,12 +60959,12 @@ endif5936: %t586 = call { ptr, i64, i64 } @finch.gen.own(ptr %t584, %S.gen.Val %t585) store { ptr, i64, i64 } %t586, ptr %a587 %t588 = load i1, ptr %a386 - br i1 %t588, label %then5944, label %endif5946 -then5944: + br i1 %t588, label %then5948, label %endif5950 +then5948: %t589 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t589) - br label %endif5946 -endif5946: + br label %endif5950 +endif5950: %t590 = load ptr, ptr %a1 %t591 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t590, { ptr, i64, i64 } { ptr @.str.3811, i64 10, i64 0 }) store { ptr, i64, i64 } %t591, ptr %a592 @@ -60979,113 +61005,113 @@ endif5946: call void @finch_str_drop(ptr %a592) call void @finch_str_drop(ptr %a587) call void @finch.drop.S_gen_Val(ptr %a543) - br label %endif5929 -else5928: + br label %endif5933 +else5932: %t617 = getelementptr inbounds %S.ast.Node, ptr %a538, i32 0, i32 0 %t618 = load { ptr, i64, i64 }, ptr %t617 store { ptr, i64, i64 } %t618, ptr %a619 store { ptr, i64, i64 } { ptr @.str.3812, i64 5, i64 0 }, ptr %a620 %t621 = call i32 @finch_str_eq(ptr %a619, ptr %a620) %t622 = icmp ne i32 %t621, 0 - br i1 %t622, label %then5947, label %else5948 -then5947: + br i1 %t622, label %then5951, label %else5952 +then5951: %t623 = load ptr, ptr %a1 %t624 = load %S.ast.Node, ptr %a538 call void @finch.gen.block(ptr %t623, %S.ast.Node %t624, i1 true) - br label %endif5949 -else5948: + br label %endif5953 +else5952: %t625 = load ptr, ptr %a1 %t626 = load %S.ast.Node, ptr %a538 call void @finch.gen.stmt(ptr %t625, %S.ast.Node %t626) - br label %endif5949 -endif5949: + br label %endif5953 +endif5953: %t627 = load ptr, ptr %a1 %t628 = icmp eq ptr %t627, null - br i1 %t628, label %panic5950, label %ok5951 -panic5950: + br i1 %t628, label %panic5954, label %ok5955 +panic5954: call void @finch_panic(ptr @.str.3813, i64 3154, ptr @.str.3814) unreachable -ok5951: +ok5955: %t629 = getelementptr inbounds %S.gen.Gen, ptr %t627, i32 0, i32 9 %t630 = load i1, ptr %t629 %t631 = xor i1 %t630, true - br i1 %t631, label %then5952, label %endif5954 -then5952: + br i1 %t631, label %then5956, label %endif5958 +then5956: store i1 true, ptr %a128 - br label %endif5954 -endif5954: + br label %endif5958 +endif5958: %t632 = load i1, ptr %a386 - br i1 %t632, label %then5955, label %endif5957 -then5955: + br i1 %t632, label %then5959, label %endif5961 +then5959: %t633 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t633) - br label %endif5957 -endif5957: + br label %endif5961 +endif5961: %t634 = load ptr, ptr %a1 %t635 = load { ptr, i64, i64 }, ptr %a126 call void @finch.gen.br(ptr %t634, { ptr, i64, i64 } %t635) - br label %endif5929 -endif5929: + br label %endif5933 +endif5933: %t636 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 %t637 = load i1, ptr %t636 %t638 = xor i1 %t637, true - br i1 %t638, label %then5958, label %endif5960 -then5958: + br i1 %t638, label %then5962, label %endif5964 +then5962: %t639 = load ptr, ptr %a1 %t640 = load { ptr, i64, i64 }, ptr %a164 call void @finch.gen.label(ptr %t639, { ptr, i64, i64 } %t640) - br label %endif5960 -endif5960: + br label %endif5964 +endif5964: call void @finch.drop.S_ast_Node(ptr %a538) call void @finch.drop.arr_S_ast_Node(ptr %a165) call void @finch_str_drop(ptr %a164) call void @finch_str_drop(ptr %a161) call void @finch.drop.S_ast_Node(ptr %a155) - br label %for.step5835 -for.step5835: + br label %for.step5839 +for.step5839: %t641 = load i64, ptr %a140 %t642 = add i64 %t641, 1 store i64 %t642, ptr %a140 - br label %for.cond5833 -for.end5836: + br label %for.cond5837 +for.end5840: %t643 = load i1, ptr %a127 %t644 = xor i1 %t643, true - br i1 %t644, label %then5961, label %endif5963 -then5961: + br i1 %t644, label %then5965, label %endif5967 +then5965: %t645 = load i64, ptr %a49 %t646 = icmp sge i64 %t645, 0 - br i1 %t646, label %then5964, label %else5965 -then5964: + br i1 %t646, label %then5968, label %else5969 +then5968: store { ptr, i64, i64 } zeroinitializer, ptr %a647 %t648 = load ptr, ptr %a1 %t649 = icmp eq ptr %t648, null - br i1 %t649, label %panic5967, label %ok5968 -panic5967: + br i1 %t649, label %panic5971, label %ok5972 +panic5971: call void @finch_panic(ptr @.str.3815, i64 3169, ptr @.str.3816) unreachable -ok5968: +ok5972: %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 22 %t651 = load i64, ptr %a49 %t652 = load { ptr, i64, i64 }, ptr %t650 %t653 = extractvalue { ptr, i64, i64 } %t652, 1 %t654 = icmp uge i64 %t651, %t653 - br i1 %t654, label %range5969, label %inrange5970 -range5969: + br i1 %t654, label %range5973, label %inrange5974 +range5973: call void @finch_panic_index(ptr @.str.3817, i64 3169, i64 %t651, i64 %t653) unreachable -inrange5970: +inrange5974: %t655 = extractvalue { ptr, i64, i64 } %t652, 0 %t656 = getelementptr inbounds %S.gen.SumDef, ptr %t655, i64 %t651 %t657 = getelementptr inbounds %S.gen.SumDef, ptr %t656, i32 0, i32 2 %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i32 0, i32 1 %t659 = load i64, ptr %t658 store i64 0, ptr %a660 - br label %for.cond5971 -for.cond5971: + br label %for.cond5975 +for.cond5975: %t661 = load i64, ptr %a660 %t662 = icmp slt i64 %t661, %t659 - br i1 %t662, label %for.body5972, label %for.end5974 -for.body5972: + br i1 %t662, label %for.body5976, label %for.end5978 +for.body5976: %t663 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t664 = load i64, ptr %a660 call void @finch_str_from_int(ptr %a665, i64 %t664) @@ -61094,52 +61120,52 @@ for.body5972: %t668 = load i64, ptr %t663 %t669 = load ptr, ptr %a129 store i64 0, ptr %a670 - br label %find.cond5975 -find.cond5975: + br label %find.cond5979 +find.cond5979: %t671 = load i64, ptr %a670 %t672 = icmp slt i64 %t671, %t668 - br i1 %t672, label %find.body5976, label %find.end5979 -find.body5976: + br i1 %t672, label %find.body5980, label %find.end5983 +find.body5980: %t673 = getelementptr inbounds { ptr, i64, i64 }, ptr %t669, i64 %t671 %t674 = load { ptr, i64, i64 }, ptr %t673 store { ptr, i64, i64 } %t674, ptr %a675 store { ptr, i64, i64 } %t666, ptr %a676 %t677 = call i32 @finch_str_eq(ptr %a675, ptr %a676) %t678 = icmp ne i32 %t677, 0 - br i1 %t678, label %find.hit5977, label %find.next5978 -find.hit5977: + br i1 %t678, label %find.hit5981, label %find.next5982 +find.hit5981: store i64 %t671, ptr %a667 - br label %find.end5979 -find.next5978: + br label %find.end5983 +find.next5982: %t679 = add i64 %t671, 1 store i64 %t679, ptr %a670 - br label %find.cond5975 -find.end5979: + br label %find.cond5979 +find.end5983: store { ptr, i64, i64 } %t666, ptr %a680 call void @finch_str_drop(ptr %a680) %t681 = load i64, ptr %a667 %t682 = icmp sge i64 %t681, 0 %t683 = xor i1 %t682, true - br i1 %t683, label %then5980, label %endif5982 -then5980: + br i1 %t683, label %then5984, label %endif5986 +then5984: %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 %t685 = load ptr, ptr %a1 %t686 = icmp eq ptr %t685, null - br i1 %t686, label %panic5983, label %ok5984 -panic5983: + br i1 %t686, label %panic5987, label %ok5988 +panic5987: call void @finch_panic(ptr @.str.3818, i64 3171, ptr @.str.3819) unreachable -ok5984: +ok5988: %t687 = getelementptr inbounds %S.gen.Gen, ptr %t685, i32 0, i32 22 %t688 = load i64, ptr %a49 %t689 = load { ptr, i64, i64 }, ptr %t687 %t690 = extractvalue { ptr, i64, i64 } %t689, 1 %t691 = icmp uge i64 %t688, %t690 - br i1 %t691, label %range5985, label %inrange5986 -range5985: + br i1 %t691, label %range5989, label %inrange5990 +range5989: call void @finch_panic_index(ptr @.str.3820, i64 3171, i64 %t688, i64 %t690) unreachable -inrange5986: +inrange5990: %t692 = extractvalue { ptr, i64, i64 } %t689, 0 %t693 = getelementptr inbounds %S.gen.SumDef, ptr %t692, i64 %t688 %t694 = getelementptr inbounds %S.gen.SumDef, ptr %t693, i32 0, i32 2 @@ -61147,11 +61173,11 @@ inrange5986: %t696 = load { ptr, i64, i64 }, ptr %t694 %t697 = extractvalue { ptr, i64, i64 } %t696, 1 %t698 = icmp uge i64 %t695, %t697 - br i1 %t698, label %range5987, label %inrange5988 -range5987: + br i1 %t698, label %range5991, label %inrange5992 +range5991: call void @finch_panic_index(ptr @.str.3821, i64 3171, i64 %t695, i64 %t697) unreachable -inrange5988: +inrange5992: %t699 = extractvalue { ptr, i64, i64 } %t696, 0 %t700 = getelementptr inbounds { ptr, i64, i64 }, ptr %t699, i64 %t695 %t701 = load { ptr, i64, i64 }, ptr %t700 @@ -61165,20 +61191,20 @@ inrange5988: %t708 = getelementptr inbounds { ptr, i64, i64 }, ptr %t707, i64 %t705 store { ptr, i64, i64 } %t704, ptr %t708 store i64 %t706, ptr %t684 - br label %endif5982 -endif5982: - br label %for.step5973 -for.step5973: + br label %endif5986 +endif5986: + br label %for.step5977 +for.step5977: %t709 = load i64, ptr %a660 %t710 = add i64 %t709, 1 store i64 %t710, ptr %a660 - br label %for.cond5971 -for.end5974: + br label %for.cond5975 +for.end5978: %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 %t712 = load i64, ptr %t711 %t713 = icmp sgt i64 %t712, 0 - br i1 %t713, label %then5989, label %endif5991 -then5989: + br i1 %t713, label %then5993, label %endif5995 +then5993: %t714 = load ptr, ptr %a1 %t715 = load %S.ast.Node, ptr %a2 %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 @@ -61200,26 +61226,26 @@ then5989: call void @finch.gen.fail(ptr %t714, %S.ast.Node %t715, { ptr, i64, i64 } %t729) store { ptr, i64, i64 } %t729, ptr %a730 call void @finch_str_drop(ptr %a730) - br label %endif5991 -endif5991: + br label %endif5995 +endif5995: call void @finch.drop.arr_str(ptr %a647) - br label %endif5966 -else5965: + br label %endif5970 +else5969: %t731 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t732 = load { ptr, i64, i64 }, ptr %t731 store { ptr, i64, i64 } %t732, ptr %a733 store { ptr, i64, i64 } { ptr @.str.3825, i64 4, i64 0 }, ptr %a734 %t735 = call i32 @finch_str_eq(ptr %a733, ptr %a734) %t736 = icmp ne i32 %t735, 0 - br i1 %t736, label %then5992, label %else5993 -then5992: + br i1 %t736, label %then5996, label %else5997 +then5996: %t737 = load ptr, ptr %a1 %t738 = icmp eq ptr %t737, null - br i1 %t738, label %panic5995, label %ok5996 -panic5995: + br i1 %t738, label %panic5999, label %ok6000 +panic5999: call void @finch_panic(ptr @.str.3826, i64 3178, ptr @.str.3827) unreachable -ok5996: +ok6000: %t739 = getelementptr inbounds %S.gen.Gen, ptr %t737, i32 0, i32 21 %t740 = load ptr, ptr %a1 %t741 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 @@ -61230,11 +61256,11 @@ ok5996: %t746 = load { ptr, i64, i64 }, ptr %t739 %t747 = extractvalue { ptr, i64, i64 } %t746, 1 %t748 = icmp uge i64 %t745, %t747 - br i1 %t748, label %range5997, label %inrange5998 -range5997: + br i1 %t748, label %range6001, label %inrange6002 +range6001: call void @finch_panic_index(ptr @.str.3828, i64 3178, i64 %t745, i64 %t747) unreachable -inrange5998: +inrange6002: %t749 = extractvalue { ptr, i64, i64 } %t746, 0 %t750 = getelementptr inbounds %S.gen.EnumDef, ptr %t749, i64 %t745 %t751 = load %S.gen.EnumDef, ptr %t750 @@ -61247,23 +61273,23 @@ inrange5998: %t758 = getelementptr inbounds { ptr, i64, i64 }, ptr %t757, i32 0, i32 1 %t759 = load i64, ptr %t758 store i64 0, ptr %a760 - br label %for.cond5999 -for.cond5999: + br label %for.cond6003 +for.cond6003: %t761 = load i64, ptr %a760 %t762 = icmp slt i64 %t761, %t759 - br i1 %t762, label %for.body6000, label %for.end6002 -for.body6000: + br i1 %t762, label %for.body6004, label %for.end6006 +for.body6004: %t763 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t764 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 3 %t765 = load i64, ptr %a760 %t766 = load { ptr, i64, i64 }, ptr %t764 %t767 = extractvalue { ptr, i64, i64 } %t766, 1 %t768 = icmp uge i64 %t765, %t767 - br i1 %t768, label %range6003, label %inrange6004 -range6003: + br i1 %t768, label %range6007, label %inrange6008 +range6007: call void @finch_panic_index(ptr @.str.3829, i64 3181, i64 %t765, i64 %t767) unreachable -inrange6004: +inrange6008: %t769 = extractvalue { ptr, i64, i64 } %t766, 0 %t770 = getelementptr inbounds i64, ptr %t769, i64 %t765 %t771 = load i64, ptr %t770 @@ -61273,45 +61299,45 @@ inrange6004: %t775 = load i64, ptr %t763 %t776 = load ptr, ptr %a129 store i64 0, ptr %a777 - br label %find.cond6005 -find.cond6005: + br label %find.cond6009 +find.cond6009: %t778 = load i64, ptr %a777 %t779 = icmp slt i64 %t778, %t775 - br i1 %t779, label %find.body6006, label %find.end6009 -find.body6006: + br i1 %t779, label %find.body6010, label %find.end6013 +find.body6010: %t780 = getelementptr inbounds { ptr, i64, i64 }, ptr %t776, i64 %t778 %t781 = load { ptr, i64, i64 }, ptr %t780 store { ptr, i64, i64 } %t781, ptr %a782 store { ptr, i64, i64 } %t773, ptr %a783 %t784 = call i32 @finch_str_eq(ptr %a782, ptr %a783) %t785 = icmp ne i32 %t784, 0 - br i1 %t785, label %find.hit6007, label %find.next6008 -find.hit6007: + br i1 %t785, label %find.hit6011, label %find.next6012 +find.hit6011: store i64 %t778, ptr %a774 - br label %find.end6009 -find.next6008: + br label %find.end6013 +find.next6012: %t786 = add i64 %t778, 1 store i64 %t786, ptr %a777 - br label %find.cond6005 -find.end6009: + br label %find.cond6009 +find.end6013: store { ptr, i64, i64 } %t773, ptr %a787 call void @finch_str_drop(ptr %a787) %t788 = load i64, ptr %a774 %t789 = icmp sge i64 %t788, 0 %t790 = xor i1 %t789, true - br i1 %t790, label %then6010, label %endif6012 -then6010: + br i1 %t790, label %then6014, label %endif6016 +then6014: %t791 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 %t792 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 %t793 = load i64, ptr %a760 %t794 = load { ptr, i64, i64 }, ptr %t792 %t795 = extractvalue { ptr, i64, i64 } %t794, 1 %t796 = icmp uge i64 %t793, %t795 - br i1 %t796, label %range6013, label %inrange6014 -range6013: + br i1 %t796, label %range6017, label %inrange6018 +range6017: call void @finch_panic_index(ptr @.str.3830, i64 3182, i64 %t793, i64 %t795) unreachable -inrange6014: +inrange6018: %t797 = extractvalue { ptr, i64, i64 } %t794, 0 %t798 = getelementptr inbounds { ptr, i64, i64 }, ptr %t797, i64 %t793 %t799 = load { ptr, i64, i64 }, ptr %t798 @@ -61325,20 +61351,20 @@ inrange6014: %t806 = getelementptr inbounds { ptr, i64, i64 }, ptr %t805, i64 %t803 store { ptr, i64, i64 } %t802, ptr %t806 store i64 %t804, ptr %t791 - br label %endif6012 -endif6012: - br label %for.step6001 -for.step6001: + br label %endif6016 +endif6016: + br label %for.step6005 +for.step6005: %t807 = load i64, ptr %a760 %t808 = add i64 %t807, 1 store i64 %t808, ptr %a760 - br label %for.cond5999 -for.end6002: + br label %for.cond6003 +for.end6006: %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 %t810 = load i64, ptr %t809 %t811 = icmp sgt i64 %t810, 0 - br i1 %t811, label %then6015, label %endif6017 -then6015: + br i1 %t811, label %then6019, label %endif6021 +then6019: %t812 = load ptr, ptr %a1 %t813 = load %S.ast.Node, ptr %a2 %t814 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 @@ -61360,12 +61386,12 @@ then6015: call void @finch.gen.fail(ptr %t812, %S.ast.Node %t813, { ptr, i64, i64 } %t827) store { ptr, i64, i64 } %t827, ptr %a828 call void @finch_str_drop(ptr %a828) - br label %endif6017 -endif6017: + br label %endif6021 +endif6021: call void @finch.drop.arr_str(ptr %a756) call void @finch.drop.S_gen_EnumDef(ptr %a755) - br label %endif5994 -else5993: + br label %endif5998 +else5997: %t829 = load ptr, ptr %a1 %t830 = load %S.ast.Node, ptr %a2 %t831 = load %S.ast.Type, ptr %a19 @@ -61385,10 +61411,10 @@ else5993: call void @finch.gen.fail(ptr %t829, %S.ast.Node %t830, { ptr, i64, i64 } %t842) store { ptr, i64, i64 } %t842, ptr %a843 call void @finch_str_drop(ptr %a843) - br label %endif5994 -endif5994: - br label %endif5966 -endif5966: + br label %endif5998 +endif5998: + br label %endif5970 +endif5970: %t844 = load ptr, ptr %a1 %t845 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t844, { ptr, i64, i64 } { ptr @.str.3836, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.3837, i64 35, i64 0 }, %S.ast.Node %t845) @@ -61396,15 +61422,15 @@ endif5966: call void @finch.gen.emit(ptr %t846, { ptr, i64, i64 } { ptr @.str.3838, i64 11, i64 0 }) %t847 = load ptr, ptr %a1 %t848 = icmp eq ptr %t847, null - br i1 %t848, label %panic6018, label %ok6019 -panic6018: + br i1 %t848, label %panic6022, label %ok6023 +panic6022: call void @finch_panic(ptr @.str.3839, i64 3194, ptr @.str.3840) unreachable -ok6019: +ok6023: %t849 = getelementptr inbounds %S.gen.Gen, ptr %t847, i32 0, i32 9 store i1 true, ptr %t849 - br label %endif5963 -endif5963: + br label %endif5967 +endif5967: %t850 = load ptr, ptr %a1 %t851 = load i64, ptr %a46 call void @finch.gen.heldEnd(ptr %t850, i64 %t851) @@ -61413,17 +61439,17 @@ endif5963: call void @finch.gen.label(ptr %t852, { ptr, i64, i64 } %t853) %t854 = load i1, ptr %a128 %t855 = xor i1 %t854, true - br i1 %t855, label %then6020, label %endif6022 -then6020: + br i1 %t855, label %then6024, label %endif6026 +then6024: %t856 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t856, { ptr, i64, i64 } { ptr @.str.3841, i64 11, i64 0 }) %t857 = load ptr, ptr %a1 %t858 = icmp eq ptr %t857, null - br i1 %t858, label %panic6023, label %ok6024 -panic6023: + br i1 %t858, label %panic6027, label %ok6028 +panic6027: call void @finch_panic(ptr @.str.3842, i64 3200, ptr @.str.3843) unreachable -ok6024: +ok6028: %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 9 store i1 true, ptr %t859 %t860 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3844, i64 4, i64 0 }) @@ -61437,10 +61463,10 @@ ok6024: call void @finch.drop.S_ast_Type(ptr %a19) call void @finch.drop.S_gen_Val(ptr %a13) ret %S.gen.Val %t861 -endif6022: +endif6026: %t862 = load i1, ptr %a3 - br i1 %t862, label %then6025, label %endif6027 -then6025: + br i1 %t862, label %then6029, label %endif6031 +then6029: %t863 = load ptr, ptr %a1 %t864 = load ptr, ptr %a1 %t865 = load %S.ast.Type, ptr %a133 @@ -61495,7 +61521,7 @@ then6025: call void @finch.drop.S_ast_Type(ptr %a19) call void @finch.drop.S_gen_Val(ptr %a13) ret %S.gen.Val %t901 -endif6027: +endif6031: %t902 = load ptr, ptr %a1 %t903 = load %S.gen.Val, ptr %a13 call void @finch.gen.release(ptr %t902, %S.gen.Val %t903) @@ -61541,22 +61567,22 @@ entry: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 0, ptr %a6 - br label %for.cond6028 -for.cond6028: + br label %for.cond6032 +for.cond6032: %t7 = load i64, ptr %a6 %t8 = icmp slt i64 %t7, %t5 - br i1 %t8, label %for.body6029, label %for.end6031 -for.body6029: + br i1 %t8, label %for.body6033, label %for.end6035 +for.body6033: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t10 = load i64, ptr %a6 %t11 = load { ptr, i64, i64 }, ptr %a1 %t12 = extractvalue { ptr, i64, i64 } %t11, 1 %t13 = icmp uge i64 %t10, %t12 - br i1 %t13, label %range6032, label %inrange6033 -range6032: + br i1 %t13, label %range6036, label %inrange6037 +range6036: call void @finch_panic_index(ptr @.str.3849, i64 3215, i64 %t10, i64 %t12) unreachable -inrange6033: +inrange6037: %t14 = extractvalue { ptr, i64, i64 } %t11, 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t10 %t16 = load { ptr, i64, i64 }, ptr %t15 @@ -61574,11 +61600,11 @@ inrange6033: %t27 = load { ptr, i64, i64 }, ptr %a2 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 - br i1 %t29, label %range6034, label %inrange6035 -range6034: + br i1 %t29, label %range6038, label %inrange6039 +range6038: call void @finch_panic_index(ptr @.str.3851, i64 3215, i64 %t26, i64 %t28) unreachable -inrange6035: +inrange6039: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t26 %t32 = load { ptr, i64, i64 }, ptr %t31 @@ -61601,13 +61627,13 @@ inrange6035: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43 store { ptr, i64, i64 } %t42, ptr %t46 store i64 %t44, ptr %t9 - br label %for.step6030 -for.step6030: + br label %for.step6034 +for.step6034: %t47 = load i64, ptr %a6 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a6 - br label %for.cond6028 -for.end6031: + br label %for.cond6032 +for.end6035: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3853, i64 2, i64 0 }, ptr %a50 call void @finch_str_join(ptr %a51, ptr %a3, ptr %a50) @@ -61661,35 +61687,35 @@ entry: store { ptr, i64, i64 } { ptr @.str.3854, i64 4, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp eq i32 %t7, 0 - br label %logic.from6036 -logic.from6036: - br i1 %t8, label %logic.rhs6037, label %logic.end6038 -logic.rhs6037: + br label %logic.from6040 +logic.from6040: + br i1 %t8, label %logic.rhs6041, label %logic.end6042 +logic.rhs6041: %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.3855, i64 6, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp eq i32 %t13, 0 - br label %logic.rend6039 -logic.rend6039: - br label %logic.end6038 -logic.end6038: - %t15 = phi i1 [ false, %logic.from6036 ], [ %t14, %logic.rend6039 ] - br i1 %t15, label %then6040, label %endif6042 -then6040: + br label %logic.rend6043 +logic.rend6043: + br label %logic.end6042 +logic.end6042: + %t15 = phi i1 [ false, %logic.from6040 ], [ %t14, %logic.rend6043 ] + br i1 %t15, label %then6044, label %endif6046 +then6044: %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } { ptr @.str.3856, i64 80, i64 0 }) - br label %endif6042 -endif6042: + br label %endif6046 +endif6046: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic6043, label %ok6044 -panic6043: + br i1 %t19, label %panic6047, label %ok6048 +panic6047: call void @finch_panic(ptr @.str.3857, i64 3233, ptr @.str.3858) unreachable -ok6044: +ok6048: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 41 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 @@ -61698,11 +61724,11 @@ ok6044: store { ptr, i64, i64 } %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic6045, label %ok6046 -panic6045: + br i1 %t27, label %panic6049, label %ok6050 +panic6049: call void @finch_panic(ptr @.str.3859, i64 3234, ptr @.str.3860) unreachable -ok6046: +ok6050: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 42 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 @@ -61711,11 +61737,11 @@ ok6046: store { ptr, i64, i64 } %t32, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic6047, label %ok6048 -panic6047: + br i1 %t35, label %panic6051, label %ok6052 +panic6051: call void @finch_panic(ptr @.str.3861, i64 3235, ptr @.str.3862) unreachable -ok6048: +ok6052: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 43 %t37 = load { ptr, i64, i64 }, ptr %t36 store { ptr, i64, i64 } %t37, ptr %a38 @@ -61726,11 +61752,11 @@ ok6048: %t43 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t42) %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic6049, label %ok6050 -panic6049: + br i1 %t45, label %panic6053, label %ok6054 +panic6053: call void @finch_panic(ptr @.str.3863, i64 3236, ptr @.str.3864) unreachable -ok6050: +ok6054: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 41 %t47 = load { ptr, i64, i64 }, ptr %t46 store { ptr, i64, i64 } %t43, ptr %t46 @@ -61738,11 +61764,11 @@ ok6050: call void @finch_str_drop(ptr %a48) %t49 = load ptr, ptr %a1 %t50 = icmp eq ptr %t49, null - br i1 %t50, label %panic6051, label %ok6052 -panic6051: + br i1 %t50, label %panic6055, label %ok6056 +panic6055: call void @finch_panic(ptr @.str.3866, i64 3237, ptr @.str.3867) unreachable -ok6052: +ok6056: %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 42 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } { ptr @.str.3865, i64 0, i64 0 }, ptr %t51 @@ -61750,11 +61776,11 @@ ok6052: call void @finch_str_drop(ptr %a53) %t54 = load ptr, ptr %a1 %t55 = icmp eq ptr %t54, null - br i1 %t55, label %panic6053, label %ok6054 -panic6053: + br i1 %t55, label %panic6057, label %ok6058 +panic6057: call void @finch_panic(ptr @.str.3869, i64 3238, ptr @.str.3870) unreachable -ok6054: +ok6058: %t56 = getelementptr inbounds %S.gen.Gen, ptr %t54, i32 0, i32 43 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } { ptr @.str.3868, i64 0, i64 0 }, ptr %t56 @@ -61771,11 +61797,11 @@ ok6054: %t67 = insertvalue %S.gen.Fallible zeroinitializer, %S.gen.Val %t66, 0 %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null - br i1 %t69, label %panic6055, label %ok6056 -panic6055: + br i1 %t69, label %panic6059, label %ok6060 +panic6059: call void @finch_panic(ptr @.str.3871, i64 3240, ptr @.str.3872) unreachable -ok6056: +ok6060: %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 42 %t71 = load { ptr, i64, i64 }, ptr %t70 store { ptr, i64, i64 } %t71, ptr %a72 @@ -61784,11 +61810,11 @@ ok6056: %t75 = insertvalue %S.gen.Fallible %t67, { ptr, i64, i64 } %t74, 1 %t76 = load ptr, ptr %a1 %t77 = icmp eq ptr %t76, null - br i1 %t77, label %panic6057, label %ok6058 -panic6057: + br i1 %t77, label %panic6061, label %ok6062 +panic6061: call void @finch_panic(ptr @.str.3873, i64 3240, ptr @.str.3874) unreachable -ok6058: +ok6062: %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 43 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 @@ -61799,11 +61825,11 @@ ok6058: %t85 = load { ptr, i64, i64 }, ptr %a25 %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic6059, label %ok6060 -panic6059: + br i1 %t87, label %panic6063, label %ok6064 +panic6063: call void @finch_panic(ptr @.str.3875, i64 3241, ptr @.str.3876) unreachable -ok6060: +ok6064: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 41 store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_copy(ptr %a90, ptr %a89) @@ -61815,11 +61841,11 @@ ok6060: %t94 = load { ptr, i64, i64 }, ptr %a33 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic6061, label %ok6062 -panic6061: + br i1 %t96, label %panic6065, label %ok6066 +panic6065: call void @finch_panic(ptr @.str.3877, i64 3242, ptr @.str.3878) unreachable -ok6062: +ok6066: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 42 store { ptr, i64, i64 } %t94, ptr %a98 call void @finch_str_copy(ptr %a99, ptr %a98) @@ -61831,11 +61857,11 @@ ok6062: %t103 = load { ptr, i64, i64 }, ptr %a41 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null - br i1 %t105, label %panic6063, label %ok6064 -panic6063: + br i1 %t105, label %panic6067, label %ok6068 +panic6067: call void @finch_panic(ptr @.str.3879, i64 3243, ptr @.str.3880) unreachable -ok6064: +ok6068: %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 43 store { ptr, i64, i64 } %t103, ptr %a107 call void @finch_str_copy(ptr %a108, ptr %a107) @@ -61848,13 +61874,13 @@ ok6064: %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = icmp eq i64 %t114, 0 - br i1 %t115, label %then6065, label %endif6067 -then6065: + br i1 %t115, label %then6069, label %endif6071 +then6069: %t116 = load ptr, ptr %a1 %t117 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } { ptr @.str.3881, i64 50, i64 0 }) - br label %endif6067 -endif6067: + br label %endif6071 +endif6071: %t118 = load %S.gen.Fallible, ptr %a84 call void @finch.drop.S_gen_Val(ptr %a62) call void @finch_str_drop(ptr %a41) @@ -61943,42 +61969,42 @@ entry: store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic6068, label %ok6069 -panic6068: + br i1 %t4, label %panic6072, label %ok6073 +panic6072: call void @finch_panic(ptr @.str.3882, i64 3252, ptr @.str.3883) unreachable -ok6069: +ok6073: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 - br i1 %t7, label %then6070, label %endif6072 -then6070: + br i1 %t7, label %then6074, label %endif6076 +then6074: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3884, i64 30, i64 0 }) - br label %endif6072 -endif6072: + br label %endif6076 +endif6076: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic6073, label %ok6074 -panic6073: + br i1 %t11, label %panic6077, label %ok6078 +panic6077: call void @finch_panic(ptr @.str.3885, i64 3255, ptr @.str.3886) unreachable -ok6074: +ok6078: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 %t13 = getelementptr inbounds %S.gen.FnSig, ptr %t12, i32 0, i32 9 %t14 = load i1, ptr %t13 %t15 = xor i1 %t14, true - br i1 %t15, label %then6075, label %endif6077 -then6075: + br i1 %t15, label %then6079, label %endif6081 +then6079: store { ptr, i64, i64 } { ptr @.str.3887, i64 1, i64 0 }, ptr %a16 %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null - br i1 %t18, label %panic6078, label %ok6079 -panic6078: + br i1 %t18, label %panic6082, label %ok6083 +panic6082: call void @finch_panic(ptr @.str.3888, i64 3257, ptr @.str.3889) unreachable -ok6079: +ok6083: %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 13 %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i32 0, i32 12 %t21 = getelementptr inbounds %S.ast.Type, ptr %t20, i32 0, i32 0 @@ -61987,15 +62013,15 @@ ok6079: store { ptr, i64, i64 } { ptr @.str.3890, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp eq i32 %t25, 0 - br i1 %t26, label %then6080, label %endif6082 -then6080: + br i1 %t26, label %then6084, label %endif6086 +then6084: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic6083, label %ok6084 -panic6083: + br i1 %t28, label %panic6087, label %ok6088 +panic6087: call void @finch_panic(ptr @.str.3891, i64 3258, ptr @.str.3892) unreachable -ok6084: +ok6088: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 13 %t30 = getelementptr inbounds %S.gen.FnSig, ptr %t29, i32 0, i32 12 %t31 = load %S.ast.Type, ptr %t30 @@ -62010,17 +62036,17 @@ ok6084: store { ptr, i64, i64 } %t37, ptr %a16 store { ptr, i64, i64 } %t38, ptr %a39 call void @finch_str_drop(ptr %a39) - br label %endif6082 -endif6082: + br label %endif6086 +endif6086: %t40 = load ptr, ptr %a1 %t41 = load %S.ast.Node, ptr %a2 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null - br i1 %t43, label %panic6085, label %ok6086 -panic6085: + br i1 %t43, label %panic6089, label %ok6090 +panic6089: call void @finch_panic(ptr @.str.3895, i64 3260, ptr @.str.3896) unreachable -ok6086: +ok6090: %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 13 %t45 = getelementptr inbounds %S.gen.FnSig, ptr %t44, i32 0, i32 1 %t46 = load { ptr, i64, i64 }, ptr %t45 @@ -62051,18 +62077,18 @@ ok6086: store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) call void @finch_str_drop(ptr %a16) - br label %endif6077 -endif6077: + br label %endif6081 +endif6081: %t68 = load ptr, ptr %a1 %t69 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t70 = load { ptr, i64, i64 }, ptr %t69 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 0, %t71 - br i1 %t72, label %range6087, label %inrange6088 -range6087: + br i1 %t72, label %range6091, label %inrange6092 +range6091: call void @finch_panic_index(ptr @.str.3899, i64 3262, i64 0, i64 %t71) unreachable -inrange6088: +inrange6092: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 0 %t75 = load %S.ast.Node, ptr %t74 @@ -62091,11 +62117,11 @@ inrange6088: %t94 = load ptr, ptr %a1 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic6089, label %ok6090 -panic6089: + br i1 %t96, label %panic6093, label %ok6094 +panic6093: call void @finch_panic(ptr @.str.3903, i64 3269, ptr @.str.3904) unreachable -ok6090: +ok6094: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 13 %t98 = load %S.gen.FnSig, ptr %t97 %t99 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t94, %S.gen.FnSig %t98) @@ -62115,11 +62141,11 @@ ok6090: %t111 = load ptr, ptr %a1 %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null - br i1 %t113, label %panic6091, label %ok6092 -panic6091: + br i1 %t113, label %panic6095, label %ok6096 +panic6095: call void @finch_panic(ptr @.str.3907, i64 3269, ptr @.str.3908) unreachable -ok6092: +ok6096: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 13 %t115 = load %S.gen.FnSig, ptr %t114 %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t111, %S.gen.FnSig %t115) @@ -62165,11 +62191,11 @@ ok6092: call void @finch_str_drop(ptr %a147) %t148 = load ptr, ptr %a1 %t149 = icmp eq ptr %t148, null - br i1 %t149, label %panic6093, label %ok6094 -panic6093: + br i1 %t149, label %panic6097, label %ok6098 +panic6097: call void @finch_panic(ptr @.str.3911, i64 3270, ptr @.str.3912) unreachable -ok6094: +ok6098: %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 9 store i1 true, ptr %t150 %t151 = load ptr, ptr %a1 @@ -62265,11 +62291,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range6095, label %inrange6096 -range6095: + br i1 %t8, label %range6099, label %inrange6100 +range6099: call void @finch_panic_index(ptr @.str.3913, i64 3277, i64 0, i64 %t7) unreachable -inrange6096: +inrange6100: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -62298,8 +62324,8 @@ inrange6096: call void @finch.gen.label(ptr %t31, { ptr, i64, i64 } %t32) %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 %t34 = load i1, ptr %t33 - br i1 %t34, label %then6097, label %endif6099 -then6097: + br i1 %t34, label %then6101, label %endif6103 +then6101: %t35 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t35) %t36 = load ptr, ptr %a1 @@ -62317,22 +62343,22 @@ then6097: %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 - br i1 %t48, label %range6100, label %inrange6101 -range6100: + br i1 %t48, label %range6104, label %inrange6105 +range6104: call void @finch_panic_index(ptr @.str.3918, i64 3286, i64 1, i64 %t47) unreachable -inrange6101: +inrange6105: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 call void @finch.gen.block(ptr %t44, %S.ast.Node %t51, i1 true) %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic6102, label %ok6103 -panic6102: + br i1 %t53, label %panic6106, label %ok6107 +panic6106: call void @finch_panic(ptr @.str.3919, i64 3287, ptr @.str.3920) unreachable -ok6103: +ok6107: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 9 %t55 = load i1, ptr %t54 store i1 %t55, ptr %a56 @@ -62340,10 +62366,10 @@ ok6103: call void @finch.gen.popScope(ptr %t57) %t58 = load i1, ptr %a56 %t59 = xor i1 %t58, true - br label %logic.from6104 -logic.from6104: - br i1 %t59, label %logic.rhs6105, label %logic.end6106 -logic.rhs6105: + br label %logic.from6108 +logic.from6108: + br i1 %t59, label %logic.rhs6109, label %logic.end6110 +logic.rhs6109: %t60 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 %t62 = load { ptr, i64, i64 }, ptr %t61 @@ -62351,45 +62377,45 @@ logic.rhs6105: store { ptr, i64, i64 } { ptr @.str.3921, i64 4, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp eq i32 %t65, 0 - br label %logic.rend6107 -logic.rend6107: - br label %logic.end6106 -logic.end6106: - %t67 = phi i1 [ false, %logic.from6104 ], [ %t66, %logic.rend6107 ] - br label %logic.from6108 -logic.from6108: - br i1 %t67, label %logic.rhs6109, label %logic.end6110 -logic.rhs6109: - %t68 = load i1, ptr %a3 - %t69 = xor i1 %t68, true br label %logic.rend6111 logic.rend6111: br label %logic.end6110 logic.end6110: - %t70 = phi i1 [ false, %logic.from6108 ], [ %t69, %logic.rend6111 ] - br i1 %t70, label %then6112, label %endif6114 -then6112: + %t67 = phi i1 [ false, %logic.from6108 ], [ %t66, %logic.rend6111 ] + br label %logic.from6112 +logic.from6112: + br i1 %t67, label %logic.rhs6113, label %logic.end6114 +logic.rhs6113: + %t68 = load i1, ptr %a3 + %t69 = xor i1 %t68, true + br label %logic.rend6115 +logic.rend6115: + br label %logic.end6114 +logic.end6114: + %t70 = phi i1 [ false, %logic.from6112 ], [ %t69, %logic.rend6115 ] + br i1 %t70, label %then6116, label %endif6118 +then6116: %t71 = load ptr, ptr %a1 %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 1, %t74 - br i1 %t75, label %range6115, label %inrange6116 -range6115: + br i1 %t75, label %range6119, label %inrange6120 +range6119: call void @finch_panic_index(ptr @.str.3922, i64 3290, i64 1, i64 %t74) unreachable -inrange6116: +inrange6120: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 1 %t78 = load %S.ast.Node, ptr %t77 call void @finch.gen.fail(ptr %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.3923, i64 142, i64 0 }) - br label %endif6114 -endif6114: + br label %endif6118 +endif6118: %t79 = load i1, ptr %a3 - br label %logic.from6117 -logic.from6117: - br i1 %t79, label %logic.rhs6118, label %logic.end6119 -logic.rhs6118: + br label %logic.from6121 +logic.from6121: + br i1 %t79, label %logic.rhs6122, label %logic.end6123 +logic.rhs6122: %t80 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t81 = getelementptr inbounds %S.ast.Type, ptr %t80, i32 0, i32 0 %t82 = load { ptr, i64, i64 }, ptr %t81 @@ -62397,13 +62423,13 @@ logic.rhs6118: store { ptr, i64, i64 } { ptr @.str.3924, i64 4, i64 0 }, ptr %a84 %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) %t86 = icmp eq i32 %t85, 0 - br label %logic.rend6120 -logic.rend6120: - br label %logic.end6119 -logic.end6119: - %t87 = phi i1 [ false, %logic.from6117 ], [ %t86, %logic.rend6120 ] - br i1 %t87, label %then6121, label %endif6123 -then6121: + br label %logic.rend6124 +logic.rend6124: + br label %logic.end6123 +logic.end6123: + %t87 = phi i1 [ false, %logic.from6121 ], [ %t86, %logic.rend6124 ] + br i1 %t87, label %then6125, label %endif6127 +then6125: %t88 = load ptr, ptr %a1 %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3925, i64 6, i64 0 }) store { ptr, i64, i64 } %t89, ptr %a90 @@ -62430,7 +62456,7 @@ then6121: call void @finch.drop.S_gen_Val(ptr %a19) call void @finch.drop.S_gen_Fallible(ptr %a13) ret %S.gen.Val %t102 -endif6123: +endif6127: %t103 = load ptr, ptr %a1 %t104 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) @@ -62442,7 +62468,7 @@ endif6123: call void @finch_str_drop(ptr %a22) call void @finch.drop.S_gen_Fallible(ptr %a13) ret %S.gen.Val %t107 -endif6099: +endif6103: %t108 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 %t110 = load { ptr, i64, i64 }, ptr %t109 @@ -62450,24 +62476,24 @@ endif6099: store { ptr, i64, i64 } { ptr @.str.3927, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 - br i1 %t114, label %then6124, label %endif6126 -then6124: + br i1 %t114, label %then6128, label %endif6130 +then6128: %t115 = load ptr, ptr %a1 %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t117 = load { ptr, i64, i64 }, ptr %t116 %t118 = extractvalue { ptr, i64, i64 } %t117, 1 %t119 = icmp uge i64 1, %t118 - br i1 %t119, label %range6127, label %inrange6128 -range6127: + br i1 %t119, label %range6131, label %inrange6132 +range6131: call void @finch_panic_index(ptr @.str.3928, i64 3306, i64 1, i64 %t118) unreachable -inrange6128: +inrange6132: %t120 = extractvalue { ptr, i64, i64 } %t117, 0 %t121 = getelementptr inbounds %S.ast.Node, ptr %t120, i64 1 %t122 = load %S.ast.Node, ptr %t121 call void @finch.gen.fail(ptr %t115, %S.ast.Node %t122, { ptr, i64, i64 } { ptr @.str.3929, i64 98, i64 0 }) - br label %endif6126 -endif6126: + br label %endif6130 +endif6130: %t123 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t123) %t124 = load ptr, ptr %a1 @@ -62486,11 +62512,11 @@ endif6126: %t135 = load { ptr, i64, i64 }, ptr %t134 %t136 = extractvalue { ptr, i64, i64 } %t135, 1 %t137 = icmp uge i64 1, %t136 - br i1 %t137, label %range6129, label %inrange6130 -range6129: + br i1 %t137, label %range6133, label %inrange6134 +range6133: call void @finch_panic_index(ptr @.str.3932, i64 3310, i64 1, i64 %t136) unreachable -inrange6130: +inrange6134: %t138 = extractvalue { ptr, i64, i64 } %t135, 0 %t139 = getelementptr inbounds %S.ast.Node, ptr %t138, i64 1 %t140 = load %S.ast.Node, ptr %t139 @@ -62503,11 +62529,11 @@ inrange6130: %t147 = load { ptr, i64, i64 }, ptr %t146 %t148 = extractvalue { ptr, i64, i64 } %t147, 1 %t149 = icmp uge i64 1, %t148 - br i1 %t149, label %range6131, label %inrange6132 -range6131: + br i1 %t149, label %range6135, label %inrange6136 +range6135: call void @finch_panic_index(ptr @.str.3933, i64 3310, i64 1, i64 %t148) unreachable -inrange6132: +inrange6136: %t150 = extractvalue { ptr, i64, i64 } %t147, 0 %t151 = getelementptr inbounds %S.ast.Node, ptr %t150, i64 1 %t152 = load %S.ast.Node, ptr %t151 @@ -62659,28 +62685,28 @@ entry: store { ptr, i64, i64 } { ptr @.str.3943, i64 5, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br i1 %t9, label %then6133, label %endif6135 -then6133: + br i1 %t9, label %then6137, label %endif6139 +then6137: %t10 = load ptr, ptr %a1 %t11 = load %S.ast.Node, ptr %a2 %t12 = load %S.ast.Type, ptr %a3 %t13 = call %S.gen.Val @finch.gen.arrayLit(ptr %t10, %S.ast.Node %t11, %S.ast.Type %t12) ret %S.gen.Val %t13 -endif6135: +endif6139: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3944, i64 3, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %then6136, label %endif6138 -then6136: + br i1 %t19, label %then6140, label %endif6142 +then6140: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a2 %t22 = load %S.ast.Type, ptr %a3 %t23 = call %S.gen.Val @finch.gen.mapLit(ptr %t20, %S.ast.Node %t21, %S.ast.Type %t22) ret %S.gen.Val %t23 -endif6138: +endif6142: %t24 = load ptr, ptr %a1 %t25 = load %S.ast.Node, ptr %a2 %t26 = call %S.gen.Val @finch.gen.expr(ptr %t24, %S.ast.Node %t25) @@ -62777,31 +62803,31 @@ entry: store { ptr, i64, i64 } { ptr @.str.3945, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br i1 %t13, label %then6139, label %endif6141 -then6139: + br i1 %t13, label %then6143, label %endif6145 +then6143: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3947, i64 2, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_starts(ptr %a16, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br label %logic.from6142 -logic.from6142: - br i1 %t20, label %logic.end6144, label %logic.rhs6143 -logic.rhs6143: + br label %logic.from6146 +logic.from6146: + br i1 %t20, label %logic.end6148, label %logic.rhs6147 +logic.rhs6147: %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3949, i64 2, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_starts(ptr %a23, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.rend6145 -logic.rend6145: - br label %logic.end6144 -logic.end6144: - %t28 = phi i1 [ true, %logic.from6142 ], [ %t27, %logic.rend6145 ] - br i1 %t28, label %then6146, label %endif6148 -then6146: + br label %logic.rend6149 +logic.rend6149: + br label %logic.end6148 +logic.end6148: + %t28 = phi i1 [ true, %logic.from6146 ], [ %t27, %logic.rend6149 ] + br i1 %t28, label %then6150, label %endif6152 +then6150: store i64 0, ptr %a29 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t31 = load { ptr, i64, i64 }, ptr %t30 @@ -62813,14 +62839,14 @@ then6146: %t37 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t37, ptr %a38 store i64 0, ptr %a39 - br label %each.cond6149 -each.cond6149: + br label %each.cond6153 +each.cond6153: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a38, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = load i64, ptr %a39 %t43 = icmp slt i64 %t42, %t41 - br i1 %t43, label %each.body6150, label %each.end6152 -each.body6150: + br i1 %t43, label %each.body6154, label %each.end6156 +each.body6154: %t44 = load ptr, ptr %a38 %t45 = getelementptr inbounds i8, ptr %t44, i64 %t42 %t46 = load i8, ptr %t45 @@ -62832,62 +62858,62 @@ each.body6150: store i64 %t51, ptr %a52 %t53 = load i8, ptr %a47 %t54 = icmp uge i8 %t53, 97 - br label %logic.from6153 -logic.from6153: - br i1 %t54, label %logic.rhs6154, label %logic.end6155 -logic.rhs6154: + br label %logic.from6157 +logic.from6157: + br i1 %t54, label %logic.rhs6158, label %logic.end6159 +logic.rhs6158: %t55 = load i8, ptr %a47 %t56 = icmp ule i8 %t55, 102 - br label %logic.rend6156 -logic.rend6156: - br label %logic.end6155 -logic.end6155: - %t57 = phi i1 [ false, %logic.from6153 ], [ %t56, %logic.rend6156 ] - br i1 %t57, label %then6157, label %endif6159 -then6157: + br label %logic.rend6160 +logic.rend6160: + br label %logic.end6159 +logic.end6159: + %t57 = phi i1 [ false, %logic.from6157 ], [ %t56, %logic.rend6160 ] + br i1 %t57, label %then6161, label %endif6163 +then6161: %t58 = load i8, ptr %a47 %t59 = zext i8 %t58 to i64 %t60 = zext i8 97 to i64 %t61 = sub i64 %t59, %t60 %t62 = add i64 %t61, 10 store i64 %t62, ptr %a52 - br label %endif6159 -endif6159: + br label %endif6163 +endif6163: %t63 = load i8, ptr %a47 %t64 = icmp uge i8 %t63, 65 - br label %logic.from6160 -logic.from6160: - br i1 %t64, label %logic.rhs6161, label %logic.end6162 -logic.rhs6161: + br label %logic.from6164 +logic.from6164: + br i1 %t64, label %logic.rhs6165, label %logic.end6166 +logic.rhs6165: %t65 = load i8, ptr %a47 %t66 = icmp ule i8 %t65, 70 - br label %logic.rend6163 -logic.rend6163: - br label %logic.end6162 -logic.end6162: - %t67 = phi i1 [ false, %logic.from6160 ], [ %t66, %logic.rend6163 ] - br i1 %t67, label %then6164, label %endif6166 -then6164: + br label %logic.rend6167 +logic.rend6167: + br label %logic.end6166 +logic.end6166: + %t67 = phi i1 [ false, %logic.from6164 ], [ %t66, %logic.rend6167 ] + br i1 %t67, label %then6168, label %endif6170 +then6168: %t68 = load i8, ptr %a47 %t69 = zext i8 %t68 to i64 %t70 = zext i8 65 to i64 %t71 = sub i64 %t69, %t70 %t72 = add i64 %t71, 10 store i64 %t72, ptr %a52 - br label %endif6166 -endif6166: + br label %endif6170 +endif6170: %t73 = load i64, ptr %a29 %t74 = mul i64 %t73, 16 %t75 = load i64, ptr %a52 %t76 = add i64 %t74, %t75 store i64 %t76, ptr %a29 - br label %each.step6151 -each.step6151: + br label %each.step6155 +each.step6155: %t77 = load i64, ptr %a39 %t78 = add i64 %t77, 1 store i64 %t78, ptr %a39 - br label %each.cond6149 -each.end6152: + br label %each.cond6153 +each.end6156: call void @finch_str_drop(ptr %a38) %t79 = load i64, ptr %a29 call void @finch_str_from_int(ptr %a80, i64 %t79) @@ -62898,7 +62924,7 @@ each.end6152: %t85 = insertvalue %S.gen.Val %t84, i1 true, 3 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t85 -endif6148: +endif6152: %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t87 = load { ptr, i64, i64 }, ptr %t86 store { ptr, i64, i64 } %t87, ptr %a88 @@ -62911,14 +62937,14 @@ endif6148: %t95 = insertvalue %S.gen.Val %t94, i1 true, 3 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t95 -endif6141: +endif6145: %t96 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.3954, i64 5, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 - br i1 %t100, label %then6167, label %endif6169 -then6167: + br i1 %t100, label %then6171, label %endif6173 +then6171: %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t102, ptr %a103 @@ -62930,14 +62956,14 @@ then6167: %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t109 -endif6169: +endif6173: %t110 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t110, ptr %a111 store { ptr, i64, i64 } { ptr @.str.3956, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 - br i1 %t114, label %then6170, label %endif6172 -then6170: + br i1 %t114, label %then6174, label %endif6176 +then6174: %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t116, ptr %a117 @@ -62948,23 +62974,23 @@ then6170: %t122 = insertvalue %S.gen.Val %t120, %S.ast.Type %t121, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t122 -endif6172: +endif6176: %t123 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.3958, i64 4, i64 0 }, ptr %a125 %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) %t127 = icmp ne i32 %t126, 0 - br i1 %t127, label %then6173, label %endif6175 -then6173: + br i1 %t127, label %then6177, label %endif6179 +then6177: %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = extractvalue { ptr, i64, i64 } %t129, 1 %t131 = icmp uge i64 0, %t130 - br i1 %t131, label %range6176, label %inrange6177 -range6176: + br i1 %t131, label %range6180, label %inrange6181 +range6180: call void @finch_panic_index(ptr @.str.3959, i64 3360, i64 0, i64 %t130) unreachable -inrange6177: +inrange6181: %t132 = extractvalue { ptr, i64, i64 } %t129, 0 %t133 = getelementptr inbounds i8, ptr %t132, i64 0 %t134 = load i8, ptr %t133 @@ -62978,69 +63004,69 @@ inrange6177: %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t142 -endif6175: +endif6179: %t143 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t143, ptr %a144 store { ptr, i64, i64 } { ptr @.str.3961, i64 3, i64 0 }, ptr %a145 %t146 = call i32 @finch_str_eq(ptr %a144, ptr %a145) %t147 = icmp ne i32 %t146, 0 - br i1 %t147, label %then6178, label %endif6180 -then6178: + br i1 %t147, label %then6182, label %endif6184 +then6182: %t148 = load ptr, ptr %a1 %t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t150 = load { ptr, i64, i64 }, ptr %t149 %t151 = call %S.gen.Val @finch.gen.strConst(ptr %t148, { ptr, i64, i64 } %t150) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t151 -endif6180: +endif6184: %t152 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t152, ptr %a153 store { ptr, i64, i64 } { ptr @.str.3962, i64 4, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 - br i1 %t156, label %then6181, label %endif6183 -then6181: + br i1 %t156, label %then6185, label %endif6187 +then6185: %t157 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.3963, i64 4, i64 0 }, 0 %t158 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3964, i64 4, i64 0 }) %t159 = insertvalue %S.gen.Val %t157, %S.ast.Type %t158, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t159 -endif6183: +endif6187: %t160 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t160, ptr %a161 store { ptr, i64, i64 } { ptr @.str.3965, i64 3, i64 0 }, ptr %a162 %t163 = call i32 @finch_str_eq(ptr %a161, ptr %a162) %t164 = icmp ne i32 %t163, 0 - br label %logic.from6184 -logic.from6184: - br i1 %t164, label %logic.end6186, label %logic.rhs6185 -logic.rhs6185: + br label %logic.from6188 +logic.from6188: + br i1 %t164, label %logic.end6190, label %logic.rhs6189 +logic.rhs6189: %t165 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t165, ptr %a166 store { ptr, i64, i64 } { ptr @.str.3966, i64 6, i64 0 }, ptr %a167 %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) %t169 = icmp ne i32 %t168, 0 - br label %logic.rend6187 -logic.rend6187: - br label %logic.end6186 -logic.end6186: - %t170 = phi i1 [ true, %logic.from6184 ], [ %t169, %logic.rend6187 ] - br label %logic.from6188 -logic.from6188: - br i1 %t170, label %logic.end6190, label %logic.rhs6189 -logic.rhs6189: + br label %logic.rend6191 +logic.rend6191: + br label %logic.end6190 +logic.end6190: + %t170 = phi i1 [ true, %logic.from6188 ], [ %t169, %logic.rend6191 ] + br label %logic.from6192 +logic.from6192: + br i1 %t170, label %logic.end6194, label %logic.rhs6193 +logic.rhs6193: %t171 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.3967, i64 5, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 - br label %logic.rend6191 -logic.rend6191: - br label %logic.end6190 -logic.end6190: - %t176 = phi i1 [ true, %logic.from6188 ], [ %t175, %logic.rend6191 ] - br i1 %t176, label %then6192, label %endif6194 -then6192: + br label %logic.rend6195 +logic.rend6195: + br label %logic.end6194 +logic.end6194: + %t176 = phi i1 [ true, %logic.from6192 ], [ %t175, %logic.rend6195 ] + br i1 %t176, label %then6196, label %endif6198 +then6196: %t177 = load ptr, ptr %a1 %t178 = load %S.ast.Node, ptr %a2 %t179 = call %S.gen.Ref @finch.gen.ref(ptr %t177, %S.ast.Node %t178, i1 false) @@ -63048,8 +63074,8 @@ then6192: %t181 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 0 %t182 = load i1, ptr %t181 %t183 = xor i1 %t182, true - br i1 %t183, label %then6195, label %endif6197 -then6195: + br i1 %t183, label %then6199, label %endif6201 +then6199: %t184 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 2 %t185 = load %S.gen.Val, ptr %t184 store %S.gen.Val %t185, ptr %a186 @@ -63058,7 +63084,7 @@ then6195: call void @finch.drop.S_gen_Ref(ptr %a180) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t188 -endif6197: +endif6201: %t189 = load ptr, ptr %a1 %t190 = load ptr, ptr %a1 %t191 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 @@ -63082,105 +63108,105 @@ endif6197: call void @finch.drop.S_gen_Ref(ptr %a180) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t207 -endif6194: +endif6198: %t208 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t208, ptr %a209 store { ptr, i64, i64 } { ptr @.str.3968, i64 5, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 - br i1 %t212, label %then6198, label %endif6200 -then6198: + br i1 %t212, label %then6202, label %endif6204 +then6202: %t213 = load ptr, ptr %a1 %t214 = load %S.ast.Node, ptr %a2 %t215 = call %S.gen.Val @finch.gen.matchGen(ptr %t213, %S.ast.Node %t214, i1 true) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t215 -endif6200: +endif6204: %t216 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t216, ptr %a217 store { ptr, i64, i64 } { ptr @.str.3969, i64 3, i64 0 }, ptr %a218 %t219 = call i32 @finch_str_eq(ptr %a217, ptr %a218) %t220 = icmp ne i32 %t219, 0 - br i1 %t220, label %then6201, label %endif6203 -then6201: + br i1 %t220, label %then6205, label %endif6207 +then6205: %t221 = load ptr, ptr %a1 %t222 = load %S.ast.Node, ptr %a2 %t223 = call %S.gen.Val @finch.gen.tryExpr(ptr %t221, %S.ast.Node %t222) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t223 -endif6203: +endif6207: %t224 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t224, ptr %a225 store { ptr, i64, i64 } { ptr @.str.3970, i64 2, i64 0 }, ptr %a226 %t227 = call i32 @finch_str_eq(ptr %a225, ptr %a226) %t228 = icmp ne i32 %t227, 0 - br i1 %t228, label %then6204, label %endif6206 -then6204: + br i1 %t228, label %then6208, label %endif6210 +then6208: %t229 = load ptr, ptr %a1 %t230 = load %S.ast.Node, ptr %a2 %t231 = call %S.gen.Val @finch.gen.orElse(ptr %t229, %S.ast.Node %t230, i1 false) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t231 -endif6206: +endif6210: %t232 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t232, ptr %a233 store { ptr, i64, i64 } { ptr @.str.3971, i64 5, i64 0 }, ptr %a234 %t235 = call i32 @finch_str_eq(ptr %a233, ptr %a234) %t236 = icmp ne i32 %t235, 0 - br i1 %t236, label %then6207, label %endif6209 -then6207: + br i1 %t236, label %then6211, label %endif6213 +then6211: %t237 = load ptr, ptr %a1 %t238 = load %S.ast.Node, ptr %a2 %t239 = call %S.gen.Val @finch.gen.unary(ptr %t237, %S.ast.Node %t238) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t239 -endif6209: +endif6213: %t240 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t240, ptr %a241 store { ptr, i64, i64 } { ptr @.str.3972, i64 6, i64 0 }, ptr %a242 %t243 = call i32 @finch_str_eq(ptr %a241, ptr %a242) %t244 = icmp ne i32 %t243, 0 - br i1 %t244, label %then6210, label %endif6212 -then6210: + br i1 %t244, label %then6214, label %endif6216 +then6214: %t245 = load ptr, ptr %a1 %t246 = load %S.ast.Node, ptr %a2 %t247 = call %S.gen.Val @finch.gen.binary(ptr %t245, %S.ast.Node %t246) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t247 -endif6212: +endif6216: %t248 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t248, ptr %a249 store { ptr, i64, i64 } { ptr @.str.3973, i64 4, i64 0 }, ptr %a250 %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) %t252 = icmp ne i32 %t251, 0 - br i1 %t252, label %then6213, label %endif6215 -then6213: + br i1 %t252, label %then6217, label %endif6219 +then6217: %t253 = load ptr, ptr %a1 %t254 = load %S.ast.Node, ptr %a2 %t255 = call %S.gen.Val @finch.gen.call(ptr %t253, %S.ast.Node %t254) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t255 -endif6215: +endif6219: %t256 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t256, ptr %a257 store { ptr, i64, i64 } { ptr @.str.3974, i64 6, i64 0 }, ptr %a258 %t259 = call i32 @finch_str_eq(ptr %a257, ptr %a258) %t260 = icmp ne i32 %t259, 0 - br i1 %t260, label %then6216, label %endif6218 -then6216: + br i1 %t260, label %then6220, label %endif6222 +then6220: %t261 = load ptr, ptr %a1 %t262 = load %S.ast.Node, ptr %a2 %t263 = call %S.gen.Val @finch.gen.method(ptr %t261, %S.ast.Node %t262) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t263 -endif6218: +endif6222: %t264 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t264, ptr %a265 store { ptr, i64, i64 } { ptr @.str.3975, i64 5, i64 0 }, ptr %a266 %t267 = call i32 @finch_str_eq(ptr %a265, ptr %a266) %t268 = icmp ne i32 %t267, 0 - br i1 %t268, label %then6219, label %endif6221 -then6219: + br i1 %t268, label %then6223, label %endif6225 +then6223: %t269 = load ptr, ptr %a1 %t270 = load %S.ast.Node, ptr %a2 %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3976, i64 4, i64 0 }) @@ -63189,14 +63215,14 @@ then6219: call void @finch.drop.S_ast_Type(ptr %a273) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t272 -endif6221: +endif6225: %t274 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t274, ptr %a275 store { ptr, i64, i64 } { ptr @.str.3977, i64 3, i64 0 }, ptr %a276 %t277 = call i32 @finch_str_eq(ptr %a275, ptr %a276) %t278 = icmp ne i32 %t277, 0 - br i1 %t278, label %then6222, label %endif6224 -then6222: + br i1 %t278, label %then6226, label %endif6228 +then6226: %t279 = load ptr, ptr %a1 %t280 = load %S.ast.Node, ptr %a2 %t281 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3978, i64 4, i64 0 }) @@ -63205,7 +63231,7 @@ then6222: call void @finch.drop.S_ast_Type(ptr %a283) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t282 -endif6224: +endif6228: %t284 = load ptr, ptr %a1 %t285 = load %S.ast.Node, ptr %a2 %t286 = load { ptr, i64, i64 }, ptr %a8 @@ -63322,11 +63348,11 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 - br i1 %t7, label %range6225, label %inrange6226 -range6225: + br i1 %t7, label %range6229, label %inrange6230 +range6229: call void @finch_panic_index(ptr @.str.3980, i64 3408, i64 0, i64 %t6) unreachable -inrange6226: +inrange6230: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 %t10 = load %S.ast.Node, ptr %t9 @@ -63338,8 +63364,8 @@ inrange6226: store { ptr, i64, i64 } { ptr @.str.3981, i64 1, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br i1 %t18, label %then6227, label %endif6229 -then6227: + br i1 %t18, label %then6231, label %endif6233 +then6231: %t19 = load ptr, ptr %a1 %t20 = load %S.gen.Val, ptr %a12 %t21 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3982, i64 4, i64 0 }) @@ -63347,11 +63373,11 @@ then6227: %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 0, %t24 - br i1 %t25, label %range6230, label %inrange6231 -range6230: + br i1 %t25, label %range6234, label %inrange6235 +range6234: call void @finch_panic_index(ptr @.str.3983, i64 3410, i64 0, i64 %t24) unreachable -inrange6231: +inrange6235: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds %S.ast.Node, ptr %t26, i64 0 %t28 = load %S.ast.Node, ptr %t27 @@ -63381,21 +63407,21 @@ inrange6231: call void @finch.drop.S_gen_Val(ptr %a31) call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t48 -endif6229: +endif6233: %t49 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.3988, i64 1, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %then6232, label %endif6234 -then6232: + br i1 %t54, label %then6236, label %endif6238 +then6236: %t55 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t56 = load %S.ast.Type, ptr %t55 %t57 = call i1 @finch.gen.isInt(%S.ast.Type %t56) %t58 = xor i1 %t57, true - br i1 %t58, label %then6235, label %endif6237 -then6235: + br i1 %t58, label %then6239, label %endif6241 +then6239: %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Node, ptr %a2 %t61 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63410,8 +63436,8 @@ then6235: call void @finch.gen.fail(ptr %t59, %S.ast.Node %t60, { ptr, i64, i64 } %t68) store { ptr, i64, i64 } %t68, ptr %a69 call void @finch_str_drop(ptr %a69) - br label %endif6237 -endif6237: + br label %endif6241 +endif6241: %t70 = load ptr, ptr %a1 %t71 = load ptr, ptr %a1 %t72 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63455,12 +63481,12 @@ endif6237: %t105 = insertvalue %S.gen.Val %t99, %S.ast.Type %t104, 1 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t105 -endif6234: +endif6238: %t106 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t107 = load %S.ast.Type, ptr %t106 %t108 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t107) - br i1 %t108, label %then6238, label %endif6240 -then6238: + br i1 %t108, label %then6242, label %endif6244 +then6242: %t109 = load ptr, ptr %a1 %t110 = load %S.ast.Node, ptr %a2 %t111 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63475,25 +63501,25 @@ then6238: call void @finch.gen.fail(ptr %t109, %S.ast.Node %t110, { ptr, i64, i64 } %t118) store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_drop(ptr %a119) - br label %endif6240 -endif6240: + br label %endif6244 +endif6244: %t120 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t121 = load %S.ast.Type, ptr %t120 %t122 = call i1 @finch.gen.isSigned(%S.ast.Type %t121) - br i1 %t122, label %then6241, label %endif6243 -then6241: + br i1 %t122, label %then6245, label %endif6247 +then6245: %t123 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 3 %t124 = load i1, ptr %t123 - br i1 %t124, label %then6244, label %endif6246 -then6244: + br i1 %t124, label %then6248, label %endif6250 +then6248: %t125 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a127 store { ptr, i64, i64 } { ptr @.str.3995, i64 1, i64 0 }, ptr %a129 %t130 = call i32 @finch_str_starts(ptr %a127, ptr %a129) %t131 = icmp ne i32 %t130, 0 - br i1 %t131, label %then6247, label %endif6249 -then6247: + br i1 %t131, label %then6251, label %endif6253 +then6251: %t132 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 @@ -63512,7 +63538,7 @@ then6247: %t147 = insertvalue %S.gen.Val %t146, i1 true, 3 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t147 -endif6249: +endif6253: %t148 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t149 = load { ptr, i64, i64 }, ptr %t148 store { ptr, i64, i64 } { ptr @.str.3997, i64 1, i64 0 }, ptr %a151 @@ -63529,7 +63555,7 @@ endif6249: %t161 = insertvalue %S.gen.Val %t160, i1 true, 3 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t161 -endif6246: +endif6250: %t162 = load ptr, ptr %a1 %t163 = load ptr, ptr %a1 %t164 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63567,12 +63593,12 @@ endif6246: %t192 = insertvalue %S.gen.Val %t186, %S.ast.Type %t191, 1 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t192 -endif6243: +endif6247: %t193 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t194 = load %S.ast.Type, ptr %t193 %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) - br i1 %t195, label %then6250, label %endif6252 -then6250: + br i1 %t195, label %then6254, label %endif6256 +then6254: %t196 = load ptr, ptr %a1 %t197 = load ptr, ptr %a1 %t198 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63610,7 +63636,7 @@ then6250: %t226 = insertvalue %S.gen.Val %t220, %S.ast.Type %t225, 1 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t226 -endif6252: +endif6256: %t227 = load ptr, ptr %a1 %t228 = load %S.ast.Node, ptr %a2 %t229 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63744,8 +63770,8 @@ entry: %t29 = load %S.ast.Type, ptr %t28 %t30 = call i1 @finch.ast.same(%S.ast.Type %t27, %S.ast.Type %t29) %t31 = xor i1 %t30, true - br i1 %t31, label %then6253, label %endif6255 -then6253: + br i1 %t31, label %then6257, label %endif6259 +then6257: %t32 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.4005, i64 5, i64 0 }, ptr %a35 @@ -63766,17 +63792,17 @@ then6253: store { ptr, i64, i64 } %t45, ptr %a25 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %endif6255 -endif6255: + br label %endif6259 +endif6259: %t48 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.4006, i64 1, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 - br label %logic.from6256 -logic.from6256: - br i1 %t52, label %logic.rhs6257, label %logic.end6258 -logic.rhs6257: + br label %logic.from6260 +logic.from6260: + br i1 %t52, label %logic.rhs6261, label %logic.end6262 +logic.rhs6261: %t53 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t54 = getelementptr inbounds %S.ast.Type, ptr %t53, i32 0, i32 0 %t55 = load { ptr, i64, i64 }, ptr %t54 @@ -63784,10 +63810,10 @@ logic.rhs6257: store { ptr, i64, i64 } { ptr @.str.4007, i64 3, i64 0 }, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 - br label %logic.from6259 -logic.from6259: - br i1 %t59, label %logic.end6261, label %logic.rhs6260 -logic.rhs6260: + br label %logic.from6263 +logic.from6263: + br i1 %t59, label %logic.end6265, label %logic.rhs6264 +logic.rhs6264: %t60 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 %t62 = load { ptr, i64, i64 }, ptr %t61 @@ -63795,18 +63821,18 @@ logic.rhs6260: store { ptr, i64, i64 } { ptr @.str.4008, i64 3, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 - br label %logic.rend6262 -logic.rend6262: - br label %logic.end6261 -logic.end6261: - %t67 = phi i1 [ true, %logic.from6259 ], [ %t66, %logic.rend6262 ] - br label %logic.rend6263 -logic.rend6263: - br label %logic.end6258 -logic.end6258: - %t68 = phi i1 [ false, %logic.from6256 ], [ %t67, %logic.rend6263 ] - br i1 %t68, label %then6264, label %endif6266 -then6264: + br label %logic.rend6266 +logic.rend6266: + br label %logic.end6265 +logic.end6265: + %t67 = phi i1 [ true, %logic.from6263 ], [ %t66, %logic.rend6266 ] + br label %logic.rend6267 +logic.rend6267: + br label %logic.end6262 +logic.end6262: + %t68 = phi i1 [ false, %logic.from6260 ], [ %t67, %logic.rend6267 ] + br i1 %t68, label %then6268, label %endif6270 +then6268: %t69 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.4009, i64 48, i64 0 }, ptr %a72 @@ -63816,31 +63842,31 @@ then6264: store { ptr, i64, i64 } %t73, ptr %a25 store { ptr, i64, i64 } %t74, ptr %a75 call void @finch_str_drop(ptr %a75) - br label %endif6266 -endif6266: + br label %endif6270 +endif6270: %t76 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t76, ptr %a77 store { ptr, i64, i64 } { ptr @.str.4010, i64 1, i64 0 }, ptr %a78 %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) %t80 = icmp ne i32 %t79, 0 - br label %logic.from6267 -logic.from6267: - br i1 %t80, label %logic.end6269, label %logic.rhs6268 -logic.rhs6268: + br label %logic.from6271 +logic.from6271: + br i1 %t80, label %logic.end6273, label %logic.rhs6272 +logic.rhs6272: %t81 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.4011, i64 1, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br label %logic.rend6270 -logic.rend6270: - br label %logic.end6269 -logic.end6269: - %t86 = phi i1 [ true, %logic.from6267 ], [ %t85, %logic.rend6270 ] - br label %logic.from6271 -logic.from6271: - br i1 %t86, label %logic.rhs6272, label %logic.end6273 -logic.rhs6272: + br label %logic.rend6274 +logic.rend6274: + br label %logic.end6273 +logic.end6273: + %t86 = phi i1 [ true, %logic.from6271 ], [ %t85, %logic.rend6274 ] + br label %logic.from6275 +logic.from6275: + br i1 %t86, label %logic.rhs6276, label %logic.end6277 +logic.rhs6276: %t87 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i32 0, i32 0 %t89 = load { ptr, i64, i64 }, ptr %t88 @@ -63848,20 +63874,20 @@ logic.rhs6272: store { ptr, i64, i64 } { ptr @.str.4012, i64 4, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) %t93 = icmp ne i32 %t92, 0 - br label %logic.rend6274 -logic.rend6274: - br label %logic.end6273 -logic.end6273: - %t94 = phi i1 [ false, %logic.from6271 ], [ %t93, %logic.rend6274 ] - br i1 %t94, label %then6275, label %else6276 -then6275: + br label %logic.rend6278 +logic.rend6278: + br label %logic.end6277 +logic.end6277: + %t94 = phi i1 [ false, %logic.from6275 ], [ %t93, %logic.rend6278 ] + br i1 %t94, label %then6279, label %else6280 +then6279: %t95 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.4013, i64 1, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 - br i1 %t99, label %then6278, label %else6279 -then6278: + br i1 %t99, label %then6282, label %else6283 +then6282: %t100 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } { ptr @.str.4014, i64 26, i64 0 }, ptr %a103 @@ -63871,8 +63897,8 @@ then6278: store { ptr, i64, i64 } %t104, ptr %a25 store { ptr, i64, i64 } %t105, ptr %a106 call void @finch_str_drop(ptr %a106) - br label %endif6280 -else6279: + br label %endif6284 +else6283: %t107 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t107, ptr %a109 store { ptr, i64, i64 } { ptr @.str.4015, i64 26, i64 0 }, ptr %a110 @@ -63882,73 +63908,73 @@ else6279: store { ptr, i64, i64 } %t111, ptr %a25 store { ptr, i64, i64 } %t112, ptr %a113 call void @finch_str_drop(ptr %a113) - br label %endif6280 -endif6280: - br label %endif6277 -else6276: + br label %endif6284 +endif6284: + br label %endif6281 +else6280: %t114 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.4016, i64 1, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 - br label %logic.from6281 -logic.from6281: - br i1 %t118, label %logic.end6283, label %logic.rhs6282 -logic.rhs6282: + br label %logic.from6285 +logic.from6285: + br i1 %t118, label %logic.end6287, label %logic.rhs6286 +logic.rhs6286: %t119 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.4017, i64 1, i64 0 }, ptr %a121 %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) %t123 = icmp ne i32 %t122, 0 - br label %logic.rend6284 -logic.rend6284: - br label %logic.end6283 -logic.end6283: - %t124 = phi i1 [ true, %logic.from6281 ], [ %t123, %logic.rend6284 ] - br label %logic.from6285 -logic.from6285: - br i1 %t124, label %logic.end6287, label %logic.rhs6286 -logic.rhs6286: + br label %logic.rend6288 +logic.rend6288: + br label %logic.end6287 +logic.end6287: + %t124 = phi i1 [ true, %logic.from6285 ], [ %t123, %logic.rend6288 ] + br label %logic.from6289 +logic.from6289: + br i1 %t124, label %logic.end6291, label %logic.rhs6290 +logic.rhs6290: %t125 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t125, ptr %a126 store { ptr, i64, i64 } { ptr @.str.4018, i64 1, i64 0 }, ptr %a127 %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) %t129 = icmp ne i32 %t128, 0 - br label %logic.rend6288 -logic.rend6288: - br label %logic.end6287 -logic.end6287: - %t130 = phi i1 [ true, %logic.from6285 ], [ %t129, %logic.rend6288 ] - br label %logic.from6289 -logic.from6289: - br i1 %t130, label %logic.end6291, label %logic.rhs6290 -logic.rhs6290: + br label %logic.rend6292 +logic.rend6292: + br label %logic.end6291 +logic.end6291: + %t130 = phi i1 [ true, %logic.from6289 ], [ %t129, %logic.rend6292 ] + br label %logic.from6293 +logic.from6293: + br i1 %t130, label %logic.end6295, label %logic.rhs6294 +logic.rhs6294: %t131 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t131, ptr %a132 store { ptr, i64, i64 } { ptr @.str.4019, i64 2, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 - br label %logic.rend6292 -logic.rend6292: - br label %logic.end6291 -logic.end6291: - %t136 = phi i1 [ true, %logic.from6289 ], [ %t135, %logic.rend6292 ] - br label %logic.from6293 -logic.from6293: - br i1 %t136, label %logic.end6295, label %logic.rhs6294 -logic.rhs6294: + br label %logic.rend6296 +logic.rend6296: + br label %logic.end6295 +logic.end6295: + %t136 = phi i1 [ true, %logic.from6293 ], [ %t135, %logic.rend6296 ] + br label %logic.from6297 +logic.from6297: + br i1 %t136, label %logic.end6299, label %logic.rhs6298 +logic.rhs6298: %t137 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t137, ptr %a138 store { ptr, i64, i64 } { ptr @.str.4020, i64 2, i64 0 }, ptr %a139 %t140 = call i32 @finch_str_eq(ptr %a138, ptr %a139) %t141 = icmp ne i32 %t140, 0 - br label %logic.rend6296 -logic.rend6296: - br label %logic.end6295 -logic.end6295: - %t142 = phi i1 [ true, %logic.from6293 ], [ %t141, %logic.rend6296 ] - br i1 %t142, label %then6297, label %endif6299 -then6297: + br label %logic.rend6300 +logic.rend6300: + br label %logic.end6299 +logic.end6299: + %t142 = phi i1 [ true, %logic.from6297 ], [ %t141, %logic.rend6300 ] + br i1 %t142, label %then6301, label %endif6303 +then6301: %t143 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t143, ptr %a145 store { ptr, i64, i64 } { ptr @.str.4021, i64 43, i64 0 }, ptr %a146 @@ -63958,10 +63984,10 @@ then6297: store { ptr, i64, i64 } %t147, ptr %a25 store { ptr, i64, i64 } %t148, ptr %a149 call void @finch_str_drop(ptr %a149) - br label %endif6299 -endif6299: - br label %endif6277 -endif6277: + br label %endif6303 +endif6303: + br label %endif6281 +endif6281: %t150 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t151 = getelementptr inbounds %S.ast.Type, ptr %t150, i32 0, i32 0 %t152 = load { ptr, i64, i64 }, ptr %t151 @@ -63969,10 +63995,10 @@ endif6277: store { ptr, i64, i64 } { ptr @.str.4022, i64 6, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 - br label %logic.from6300 -logic.from6300: - br i1 %t156, label %logic.end6302, label %logic.rhs6301 -logic.rhs6301: + br label %logic.from6304 +logic.from6304: + br i1 %t156, label %logic.end6306, label %logic.rhs6305 +logic.rhs6305: %t157 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t158 = getelementptr inbounds %S.ast.Type, ptr %t157, i32 0, i32 0 %t159 = load { ptr, i64, i64 }, ptr %t158 @@ -63980,41 +64006,41 @@ logic.rhs6301: store { ptr, i64, i64 } { ptr @.str.4023, i64 5, i64 0 }, ptr %a161 %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) %t163 = icmp ne i32 %t162, 0 - br label %logic.rend6303 -logic.rend6303: - br label %logic.end6302 -logic.end6302: - %t164 = phi i1 [ true, %logic.from6300 ], [ %t163, %logic.rend6303 ] - br label %logic.from6304 -logic.from6304: - br i1 %t164, label %logic.rhs6305, label %logic.end6306 -logic.rhs6305: + br label %logic.rend6307 +logic.rend6307: + br label %logic.end6306 +logic.end6306: + %t164 = phi i1 [ true, %logic.from6304 ], [ %t163, %logic.rend6307 ] + br label %logic.from6308 +logic.from6308: + br i1 %t164, label %logic.rhs6309, label %logic.end6310 +logic.rhs6309: %t165 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t165, ptr %a166 store { ptr, i64, i64 } { ptr @.str.4024, i64 2, i64 0 }, ptr %a167 %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) %t169 = icmp ne i32 %t168, 0 - br label %logic.from6307 -logic.from6307: - br i1 %t169, label %logic.end6309, label %logic.rhs6308 -logic.rhs6308: + br label %logic.from6311 +logic.from6311: + br i1 %t169, label %logic.end6313, label %logic.rhs6312 +logic.rhs6312: %t170 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t170, ptr %a171 store { ptr, i64, i64 } { ptr @.str.4025, i64 2, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 - br label %logic.rend6310 -logic.rend6310: - br label %logic.end6309 -logic.end6309: - %t175 = phi i1 [ true, %logic.from6307 ], [ %t174, %logic.rend6310 ] - br label %logic.rend6311 -logic.rend6311: - br label %logic.end6306 -logic.end6306: - %t176 = phi i1 [ false, %logic.from6304 ], [ %t175, %logic.rend6311 ] - br i1 %t176, label %then6312, label %endif6314 -then6312: + br label %logic.rend6314 +logic.rend6314: + br label %logic.end6313 +logic.end6313: + %t175 = phi i1 [ true, %logic.from6311 ], [ %t174, %logic.rend6314 ] + br label %logic.rend6315 +logic.rend6315: + br label %logic.end6310 +logic.end6310: + %t176 = phi i1 [ false, %logic.from6308 ], [ %t175, %logic.rend6315 ] + br i1 %t176, label %then6316, label %endif6318 +then6316: %t177 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t177, ptr %a179 store { ptr, i64, i64 } { ptr @.str.4026, i64 31, i64 0 }, ptr %a180 @@ -64024,8 +64050,8 @@ then6312: store { ptr, i64, i64 } %t181, ptr %a25 store { ptr, i64, i64 } %t182, ptr %a183 call void @finch_str_drop(ptr %a183) - br label %endif6314 -endif6314: + br label %endif6318 +endif6318: %t184 = load ptr, ptr %a1 %t185 = load %S.ast.Node, ptr %a5 %t186 = load { ptr, i64, i64 }, ptr %a25 @@ -64072,132 +64098,132 @@ entry: store ptr %p2, ptr %a3 %t4 = load ptr, ptr %a2 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic6315, label %ok6316 -panic6315: + br i1 %t5, label %panic6319, label %ok6320 +panic6319: call void @finch_panic(ptr @.str.4027, i64 3462, ptr @.str.4028) unreachable -ok6316: +ok6320: %t6 = getelementptr inbounds %S.gen.Val, ptr %t4, i32 0, i32 1 %t7 = load %S.ast.Type, ptr %t6 %t8 = load ptr, ptr %a3 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic6317, label %ok6318 -panic6317: + br i1 %t9, label %panic6321, label %ok6322 +panic6321: call void @finch_panic(ptr @.str.4029, i64 3462, ptr @.str.4030) unreachable -ok6318: +ok6322: %t10 = getelementptr inbounds %S.gen.Val, ptr %t8, i32 0, i32 1 %t11 = load %S.ast.Type, ptr %t10 %t12 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t11) - br i1 %t12, label %then6319, label %endif6321 -then6319: + br i1 %t12, label %then6323, label %endif6325 +then6323: ret i1 true -endif6321: +endif6325: %t13 = load ptr, ptr %a2 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic6322, label %ok6323 -panic6322: + br i1 %t14, label %panic6326, label %ok6327 +panic6326: call void @finch_panic(ptr @.str.4031, i64 3465, ptr @.str.4032) unreachable -ok6323: +ok6327: %t15 = getelementptr inbounds %S.gen.Val, ptr %t13, i32 0, i32 1 %t16 = load %S.ast.Type, ptr %t15 %t17 = call i1 @finch.gen.isInt(%S.ast.Type %t16) - br label %logic.from6324 -logic.from6324: - br i1 %t17, label %logic.rhs6325, label %logic.end6326 -logic.rhs6325: + br label %logic.from6328 +logic.from6328: + br i1 %t17, label %logic.rhs6329, label %logic.end6330 +logic.rhs6329: %t18 = load ptr, ptr %a3 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic6327, label %ok6328 -panic6327: + br i1 %t19, label %panic6331, label %ok6332 +panic6331: call void @finch_panic(ptr @.str.4033, i64 3465, ptr @.str.4034) unreachable -ok6328: +ok6332: %t20 = getelementptr inbounds %S.gen.Val, ptr %t18, i32 0, i32 1 %t21 = load %S.ast.Type, ptr %t20 %t22 = call i1 @finch.gen.isInt(%S.ast.Type %t21) - br label %logic.rend6329 -logic.rend6329: - br label %logic.end6326 -logic.end6326: - %t23 = phi i1 [ false, %logic.from6324 ], [ %t22, %logic.rend6329 ] - br i1 %t23, label %then6330, label %endif6332 -then6330: + br label %logic.rend6333 +logic.rend6333: + br label %logic.end6330 +logic.end6330: + %t23 = phi i1 [ false, %logic.from6328 ], [ %t22, %logic.rend6333 ] + br i1 %t23, label %then6334, label %endif6336 +then6334: %t24 = load ptr, ptr %a2 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic6333, label %ok6334 -panic6333: + br i1 %t25, label %panic6337, label %ok6338 +panic6337: call void @finch_panic(ptr @.str.4035, i64 3468, ptr @.str.4036) unreachable -ok6334: +ok6338: %t26 = getelementptr inbounds %S.gen.Val, ptr %t24, i32 0, i32 3 %t27 = load i1, ptr %t26 - br label %logic.from6335 -logic.from6335: - br i1 %t27, label %logic.rhs6336, label %logic.end6337 -logic.rhs6336: + br label %logic.from6339 +logic.from6339: + br i1 %t27, label %logic.rhs6340, label %logic.end6341 +logic.rhs6340: %t28 = load ptr, ptr %a3 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic6338, label %ok6339 -panic6338: + br i1 %t29, label %panic6342, label %ok6343 +panic6342: call void @finch_panic(ptr @.str.4037, i64 3468, ptr @.str.4038) unreachable -ok6339: +ok6343: %t30 = getelementptr inbounds %S.gen.Val, ptr %t28, i32 0, i32 3 %t31 = load i1, ptr %t30 %t32 = xor i1 %t31, true - br label %logic.rend6340 -logic.rend6340: - br label %logic.end6337 -logic.end6337: - %t33 = phi i1 [ false, %logic.from6335 ], [ %t32, %logic.rend6340 ] - br label %logic.from6341 -logic.from6341: - br i1 %t33, label %logic.rhs6342, label %logic.end6343 -logic.rhs6342: + br label %logic.rend6344 +logic.rend6344: + br label %logic.end6341 +logic.end6341: + %t33 = phi i1 [ false, %logic.from6339 ], [ %t32, %logic.rend6344 ] + br label %logic.from6345 +logic.from6345: + br i1 %t33, label %logic.rhs6346, label %logic.end6347 +logic.rhs6346: %t34 = load ptr, ptr %a2 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic6344, label %ok6345 -panic6344: + br i1 %t35, label %panic6348, label %ok6349 +panic6348: call void @finch_panic(ptr @.str.4039, i64 3468, ptr @.str.4040) unreachable -ok6345: +ok6349: %t36 = getelementptr inbounds %S.gen.Val, ptr %t34, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = load ptr, ptr %a2 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic6346, label %ok6347 -panic6346: + br i1 %t39, label %panic6350, label %ok6351 +panic6350: call void @finch_panic(ptr @.str.4041, i64 3468, ptr @.str.4042) unreachable -ok6347: +ok6351: %t40 = getelementptr inbounds %S.gen.Val, ptr %t38, i32 0, i32 1 %t41 = load %S.ast.Type, ptr %t40 %t42 = load ptr, ptr %a3 %t43 = icmp eq ptr %t42, null - br i1 %t43, label %panic6348, label %ok6349 -panic6348: + br i1 %t43, label %panic6352, label %ok6353 +panic6352: call void @finch_panic(ptr @.str.4043, i64 3468, ptr @.str.4044) unreachable -ok6349: +ok6353: %t44 = getelementptr inbounds %S.gen.Val, ptr %t42, i32 0, i32 1 %t45 = load %S.ast.Type, ptr %t44 %t46 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t37, %S.ast.Type %t41, %S.ast.Type %t45) - br label %logic.rend6350 -logic.rend6350: - br label %logic.end6343 -logic.end6343: - %t47 = phi i1 [ false, %logic.from6341 ], [ %t46, %logic.rend6350 ] - br i1 %t47, label %then6351, label %endif6353 -then6351: + br label %logic.rend6354 +logic.rend6354: + br label %logic.end6347 +logic.end6347: + %t47 = phi i1 [ false, %logic.from6345 ], [ %t46, %logic.rend6354 ] + br i1 %t47, label %then6355, label %endif6357 +then6355: %t48 = load ptr, ptr %a2 %t49 = icmp eq ptr %t48, null - br i1 %t49, label %panic6354, label %ok6355 -panic6354: + br i1 %t49, label %panic6358, label %ok6359 +panic6358: call void @finch_panic(ptr @.str.4045, i64 3469, ptr @.str.4046) unreachable -ok6355: +ok6359: %t50 = getelementptr inbounds %S.gen.Val, ptr %t48, i32 0, i32 0 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t51, ptr %a52 @@ -64206,11 +64232,11 @@ ok6355: %t55 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t54, 0 %t56 = load ptr, ptr %a3 %t57 = icmp eq ptr %t56, null - br i1 %t57, label %panic6356, label %ok6357 -panic6356: + br i1 %t57, label %panic6360, label %ok6361 +panic6360: call void @finch_panic(ptr @.str.4047, i64 3469, ptr @.str.4048) unreachable -ok6357: +ok6361: %t58 = getelementptr inbounds %S.gen.Val, ptr %t56, i32 0, i32 1 %t59 = load %S.ast.Type, ptr %t58 store %S.ast.Type %t59, ptr %a60 @@ -64220,91 +64246,91 @@ ok6357: %t64 = insertvalue %S.gen.Val %t63, i1 true, 3 %t65 = load ptr, ptr %a2 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic6358, label %ok6359 -panic6358: + br i1 %t66, label %panic6362, label %ok6363 +panic6362: call void @finch_panic(ptr @.str.4049, i64 3469, ptr @.str.4050) unreachable -ok6359: +ok6363: %t67 = load %S.gen.Val, ptr %t65 store %S.gen.Val %t64, ptr %t65 store %S.gen.Val %t67, ptr %a68 call void @finch.drop.S_gen_Val(ptr %a68) ret i1 true -endif6353: +endif6357: %t69 = load ptr, ptr %a3 %t70 = icmp eq ptr %t69, null - br i1 %t70, label %panic6360, label %ok6361 -panic6360: + br i1 %t70, label %panic6364, label %ok6365 +panic6364: call void @finch_panic(ptr @.str.4051, i64 3472, ptr @.str.4052) unreachable -ok6361: +ok6365: %t71 = getelementptr inbounds %S.gen.Val, ptr %t69, i32 0, i32 3 %t72 = load i1, ptr %t71 - br label %logic.from6362 -logic.from6362: - br i1 %t72, label %logic.rhs6363, label %logic.end6364 -logic.rhs6363: + br label %logic.from6366 +logic.from6366: + br i1 %t72, label %logic.rhs6367, label %logic.end6368 +logic.rhs6367: %t73 = load ptr, ptr %a2 %t74 = icmp eq ptr %t73, null - br i1 %t74, label %panic6365, label %ok6366 -panic6365: + br i1 %t74, label %panic6369, label %ok6370 +panic6369: call void @finch_panic(ptr @.str.4053, i64 3472, ptr @.str.4054) unreachable -ok6366: +ok6370: %t75 = getelementptr inbounds %S.gen.Val, ptr %t73, i32 0, i32 3 %t76 = load i1, ptr %t75 %t77 = xor i1 %t76, true - br label %logic.rend6367 -logic.rend6367: - br label %logic.end6364 -logic.end6364: - %t78 = phi i1 [ false, %logic.from6362 ], [ %t77, %logic.rend6367 ] - br label %logic.from6368 -logic.from6368: - br i1 %t78, label %logic.rhs6369, label %logic.end6370 -logic.rhs6369: + br label %logic.rend6371 +logic.rend6371: + br label %logic.end6368 +logic.end6368: + %t78 = phi i1 [ false, %logic.from6366 ], [ %t77, %logic.rend6371 ] + br label %logic.from6372 +logic.from6372: + br i1 %t78, label %logic.rhs6373, label %logic.end6374 +logic.rhs6373: %t79 = load ptr, ptr %a3 %t80 = icmp eq ptr %t79, null - br i1 %t80, label %panic6371, label %ok6372 -panic6371: + br i1 %t80, label %panic6375, label %ok6376 +panic6375: call void @finch_panic(ptr @.str.4055, i64 3472, ptr @.str.4056) unreachable -ok6372: +ok6376: %t81 = getelementptr inbounds %S.gen.Val, ptr %t79, i32 0, i32 0 %t82 = load { ptr, i64, i64 }, ptr %t81 %t83 = load ptr, ptr %a3 %t84 = icmp eq ptr %t83, null - br i1 %t84, label %panic6373, label %ok6374 -panic6373: + br i1 %t84, label %panic6377, label %ok6378 +panic6377: call void @finch_panic(ptr @.str.4057, i64 3472, ptr @.str.4058) unreachable -ok6374: +ok6378: %t85 = getelementptr inbounds %S.gen.Val, ptr %t83, i32 0, i32 1 %t86 = load %S.ast.Type, ptr %t85 %t87 = load ptr, ptr %a2 %t88 = icmp eq ptr %t87, null - br i1 %t88, label %panic6375, label %ok6376 -panic6375: + br i1 %t88, label %panic6379, label %ok6380 +panic6379: call void @finch_panic(ptr @.str.4059, i64 3472, ptr @.str.4060) unreachable -ok6376: +ok6380: %t89 = getelementptr inbounds %S.gen.Val, ptr %t87, i32 0, i32 1 %t90 = load %S.ast.Type, ptr %t89 %t91 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t82, %S.ast.Type %t86, %S.ast.Type %t90) - br label %logic.rend6377 -logic.rend6377: - br label %logic.end6370 -logic.end6370: - %t92 = phi i1 [ false, %logic.from6368 ], [ %t91, %logic.rend6377 ] - br i1 %t92, label %then6378, label %endif6380 -then6378: + br label %logic.rend6381 +logic.rend6381: + br label %logic.end6374 +logic.end6374: + %t92 = phi i1 [ false, %logic.from6372 ], [ %t91, %logic.rend6381 ] + br i1 %t92, label %then6382, label %endif6384 +then6382: %t93 = load ptr, ptr %a3 %t94 = icmp eq ptr %t93, null - br i1 %t94, label %panic6381, label %ok6382 -panic6381: + br i1 %t94, label %panic6385, label %ok6386 +panic6385: call void @finch_panic(ptr @.str.4061, i64 3473, ptr @.str.4062) unreachable -ok6382: +ok6386: %t95 = getelementptr inbounds %S.gen.Val, ptr %t93, i32 0, i32 0 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t96, ptr %a97 @@ -64313,11 +64339,11 @@ ok6382: %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 %t101 = load ptr, ptr %a2 %t102 = icmp eq ptr %t101, null - br i1 %t102, label %panic6383, label %ok6384 -panic6383: + br i1 %t102, label %panic6387, label %ok6388 +panic6387: call void @finch_panic(ptr @.str.4063, i64 3473, ptr @.str.4064) unreachable -ok6384: +ok6388: %t103 = getelementptr inbounds %S.gen.Val, ptr %t101, i32 0, i32 1 %t104 = load %S.ast.Type, ptr %t103 store %S.ast.Type %t104, ptr %a105 @@ -64327,75 +64353,75 @@ ok6384: %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 %t110 = load ptr, ptr %a3 %t111 = icmp eq ptr %t110, null - br i1 %t111, label %panic6385, label %ok6386 -panic6385: + br i1 %t111, label %panic6389, label %ok6390 +panic6389: call void @finch_panic(ptr @.str.4065, i64 3473, ptr @.str.4066) unreachable -ok6386: +ok6390: %t112 = load %S.gen.Val, ptr %t110 store %S.gen.Val %t109, ptr %t110 store %S.gen.Val %t112, ptr %a113 call void @finch.drop.S_gen_Val(ptr %a113) ret i1 true -endif6380: +endif6384: %t114 = load ptr, ptr %a2 %t115 = icmp eq ptr %t114, null - br i1 %t115, label %panic6387, label %ok6388 -panic6387: + br i1 %t115, label %panic6391, label %ok6392 +panic6391: call void @finch_panic(ptr @.str.4067, i64 3476, ptr @.str.4068) unreachable -ok6388: +ok6392: %t116 = getelementptr inbounds %S.gen.Val, ptr %t114, i32 0, i32 1 %t117 = load %S.ast.Type, ptr %t116 %t118 = load ptr, ptr %a3 %t119 = icmp eq ptr %t118, null - br i1 %t119, label %panic6389, label %ok6390 -panic6389: + br i1 %t119, label %panic6393, label %ok6394 +panic6393: call void @finch_panic(ptr @.str.4069, i64 3476, ptr @.str.4070) unreachable -ok6390: +ok6394: %t120 = getelementptr inbounds %S.gen.Val, ptr %t118, i32 0, i32 1 %t121 = load %S.ast.Type, ptr %t120 %t122 = call i1 @finch.gen.widens(%S.ast.Type %t117, %S.ast.Type %t121) - br i1 %t122, label %then6391, label %endif6393 -then6391: + br i1 %t122, label %then6395, label %endif6397 +then6395: %t123 = load ptr, ptr %a1 %t124 = load ptr, ptr %a2 %t125 = icmp eq ptr %t124, null - br i1 %t125, label %panic6394, label %ok6395 -panic6394: + br i1 %t125, label %panic6398, label %ok6399 +panic6398: call void @finch_panic(ptr @.str.4071, i64 3477, ptr @.str.4072) unreachable -ok6395: +ok6399: %t126 = getelementptr inbounds %S.gen.Val, ptr %t124, i32 0, i32 0 %t127 = load { ptr, i64, i64 }, ptr %t126 %t128 = load ptr, ptr %a2 %t129 = icmp eq ptr %t128, null - br i1 %t129, label %panic6396, label %ok6397 -panic6396: + br i1 %t129, label %panic6400, label %ok6401 +panic6400: call void @finch_panic(ptr @.str.4073, i64 3477, ptr @.str.4074) unreachable -ok6397: +ok6401: %t130 = getelementptr inbounds %S.gen.Val, ptr %t128, i32 0, i32 1 %t131 = load %S.ast.Type, ptr %t130 %t132 = load ptr, ptr %a3 %t133 = icmp eq ptr %t132, null - br i1 %t133, label %panic6398, label %ok6399 -panic6398: + br i1 %t133, label %panic6402, label %ok6403 +panic6402: call void @finch_panic(ptr @.str.4075, i64 3477, ptr @.str.4076) unreachable -ok6399: +ok6403: %t134 = getelementptr inbounds %S.gen.Val, ptr %t132, i32 0, i32 1 %t135 = load %S.ast.Type, ptr %t134 %t136 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t123, { ptr, i64, i64 } %t127, %S.ast.Type %t131, %S.ast.Type %t135) %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t136, 0 %t138 = load ptr, ptr %a3 %t139 = icmp eq ptr %t138, null - br i1 %t139, label %panic6400, label %ok6401 -panic6400: + br i1 %t139, label %panic6404, label %ok6405 +panic6404: call void @finch_panic(ptr @.str.4077, i64 3477, ptr @.str.4078) unreachable -ok6401: +ok6405: %t140 = getelementptr inbounds %S.gen.Val, ptr %t138, i32 0, i32 1 %t141 = load %S.ast.Type, ptr %t140 store %S.ast.Type %t141, ptr %a142 @@ -64404,75 +64430,75 @@ ok6401: %t145 = insertvalue %S.gen.Val %t137, %S.ast.Type %t144, 1 %t146 = load ptr, ptr %a2 %t147 = icmp eq ptr %t146, null - br i1 %t147, label %panic6402, label %ok6403 -panic6402: + br i1 %t147, label %panic6406, label %ok6407 +panic6406: call void @finch_panic(ptr @.str.4079, i64 3477, ptr @.str.4080) unreachable -ok6403: +ok6407: %t148 = load %S.gen.Val, ptr %t146 store %S.gen.Val %t145, ptr %t146 store %S.gen.Val %t148, ptr %a149 call void @finch.drop.S_gen_Val(ptr %a149) ret i1 true -endif6393: +endif6397: %t150 = load ptr, ptr %a3 %t151 = icmp eq ptr %t150, null - br i1 %t151, label %panic6404, label %ok6405 -panic6404: + br i1 %t151, label %panic6408, label %ok6409 +panic6408: call void @finch_panic(ptr @.str.4081, i64 3480, ptr @.str.4082) unreachable -ok6405: +ok6409: %t152 = getelementptr inbounds %S.gen.Val, ptr %t150, i32 0, i32 1 %t153 = load %S.ast.Type, ptr %t152 %t154 = load ptr, ptr %a2 %t155 = icmp eq ptr %t154, null - br i1 %t155, label %panic6406, label %ok6407 -panic6406: + br i1 %t155, label %panic6410, label %ok6411 +panic6410: call void @finch_panic(ptr @.str.4083, i64 3480, ptr @.str.4084) unreachable -ok6407: +ok6411: %t156 = getelementptr inbounds %S.gen.Val, ptr %t154, i32 0, i32 1 %t157 = load %S.ast.Type, ptr %t156 %t158 = call i1 @finch.gen.widens(%S.ast.Type %t153, %S.ast.Type %t157) - br i1 %t158, label %then6408, label %endif6410 -then6408: + br i1 %t158, label %then6412, label %endif6414 +then6412: %t159 = load ptr, ptr %a1 %t160 = load ptr, ptr %a3 %t161 = icmp eq ptr %t160, null - br i1 %t161, label %panic6411, label %ok6412 -panic6411: + br i1 %t161, label %panic6415, label %ok6416 +panic6415: call void @finch_panic(ptr @.str.4085, i64 3481, ptr @.str.4086) unreachable -ok6412: +ok6416: %t162 = getelementptr inbounds %S.gen.Val, ptr %t160, i32 0, i32 0 %t163 = load { ptr, i64, i64 }, ptr %t162 %t164 = load ptr, ptr %a3 %t165 = icmp eq ptr %t164, null - br i1 %t165, label %panic6413, label %ok6414 -panic6413: + br i1 %t165, label %panic6417, label %ok6418 +panic6417: call void @finch_panic(ptr @.str.4087, i64 3481, ptr @.str.4088) unreachable -ok6414: +ok6418: %t166 = getelementptr inbounds %S.gen.Val, ptr %t164, i32 0, i32 1 %t167 = load %S.ast.Type, ptr %t166 %t168 = load ptr, ptr %a2 %t169 = icmp eq ptr %t168, null - br i1 %t169, label %panic6415, label %ok6416 -panic6415: + br i1 %t169, label %panic6419, label %ok6420 +panic6419: call void @finch_panic(ptr @.str.4089, i64 3481, ptr @.str.4090) unreachable -ok6416: +ok6420: %t170 = getelementptr inbounds %S.gen.Val, ptr %t168, i32 0, i32 1 %t171 = load %S.ast.Type, ptr %t170 %t172 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t159, { ptr, i64, i64 } %t163, %S.ast.Type %t167, %S.ast.Type %t171) %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 %t174 = load ptr, ptr %a2 %t175 = icmp eq ptr %t174, null - br i1 %t175, label %panic6417, label %ok6418 -panic6417: + br i1 %t175, label %panic6421, label %ok6422 +panic6421: call void @finch_panic(ptr @.str.4091, i64 3481, ptr @.str.4092) unreachable -ok6418: +ok6422: %t176 = getelementptr inbounds %S.gen.Val, ptr %t174, i32 0, i32 1 %t177 = load %S.ast.Type, ptr %t176 store %S.ast.Type %t177, ptr %a178 @@ -64481,66 +64507,66 @@ ok6418: %t181 = insertvalue %S.gen.Val %t173, %S.ast.Type %t180, 1 %t182 = load ptr, ptr %a3 %t183 = icmp eq ptr %t182, null - br i1 %t183, label %panic6419, label %ok6420 -panic6419: + br i1 %t183, label %panic6423, label %ok6424 +panic6423: call void @finch_panic(ptr @.str.4093, i64 3481, ptr @.str.4094) unreachable -ok6420: +ok6424: %t184 = load %S.gen.Val, ptr %t182 store %S.gen.Val %t181, ptr %t182 store %S.gen.Val %t184, ptr %a185 call void @finch.drop.S_gen_Val(ptr %a185) ret i1 true -endif6410: +endif6414: ret i1 false -endif6332: +endif6336: %t186 = load ptr, ptr %a2 %t187 = icmp eq ptr %t186, null - br i1 %t187, label %panic6421, label %ok6422 -panic6421: + br i1 %t187, label %panic6425, label %ok6426 +panic6425: call void @finch_panic(ptr @.str.4095, i64 3486, ptr @.str.4096) unreachable -ok6422: +ok6426: %t188 = getelementptr inbounds %S.gen.Val, ptr %t186, i32 0, i32 1 %t189 = load %S.ast.Type, ptr %t188 %t190 = call i1 @finch.gen.isInt(%S.ast.Type %t189) - br label %logic.from6423 -logic.from6423: - br i1 %t190, label %logic.rhs6424, label %logic.end6425 -logic.rhs6424: + br label %logic.from6427 +logic.from6427: + br i1 %t190, label %logic.rhs6428, label %logic.end6429 +logic.rhs6428: %t191 = load ptr, ptr %a3 %t192 = icmp eq ptr %t191, null - br i1 %t192, label %panic6426, label %ok6427 -panic6426: + br i1 %t192, label %panic6430, label %ok6431 +panic6430: call void @finch_panic(ptr @.str.4097, i64 3486, ptr @.str.4098) unreachable -ok6427: +ok6431: %t193 = getelementptr inbounds %S.gen.Val, ptr %t191, i32 0, i32 1 %t194 = load %S.ast.Type, ptr %t193 %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) - br label %logic.rend6428 -logic.rend6428: - br label %logic.end6425 -logic.end6425: - %t196 = phi i1 [ false, %logic.from6423 ], [ %t195, %logic.rend6428 ] - br i1 %t196, label %then6429, label %endif6431 -then6429: + br label %logic.rend6432 +logic.rend6432: + br label %logic.end6429 +logic.end6429: + %t196 = phi i1 [ false, %logic.from6427 ], [ %t195, %logic.rend6432 ] + br i1 %t196, label %then6433, label %endif6435 +then6433: %t197 = load ptr, ptr %a1 %t198 = load ptr, ptr %a2 %t199 = icmp eq ptr %t198, null - br i1 %t199, label %panic6432, label %ok6433 -panic6432: + br i1 %t199, label %panic6436, label %ok6437 +panic6436: call void @finch_panic(ptr @.str.4099, i64 3487, ptr @.str.4100) unreachable -ok6433: +ok6437: %t200 = load %S.gen.Val, ptr %t198 %t201 = load ptr, ptr %a3 %t202 = icmp eq ptr %t201, null - br i1 %t202, label %panic6434, label %ok6435 -panic6434: + br i1 %t202, label %panic6438, label %ok6439 +panic6438: call void @finch_panic(ptr @.str.4101, i64 3487, ptr @.str.4102) unreachable -ok6435: +ok6439: %t203 = getelementptr inbounds %S.gen.Val, ptr %t201, i32 0, i32 1 %t204 = load %S.ast.Type, ptr %t203 %t205 = call %S.ast.Node @finch.gen.Node0() @@ -64549,64 +64575,64 @@ ok6435: call void @finch.drop.S_ast_Node(ptr %a207) %t208 = load ptr, ptr %a2 %t209 = icmp eq ptr %t208, null - br i1 %t209, label %panic6436, label %ok6437 -panic6436: + br i1 %t209, label %panic6440, label %ok6441 +panic6440: call void @finch_panic(ptr @.str.4104, i64 3487, ptr @.str.4105) unreachable -ok6437: +ok6441: %t210 = load %S.gen.Val, ptr %t208 store %S.gen.Val %t206, ptr %t208 store %S.gen.Val %t210, ptr %a211 call void @finch.drop.S_gen_Val(ptr %a211) ret i1 true -endif6431: +endif6435: %t212 = load ptr, ptr %a2 %t213 = icmp eq ptr %t212, null - br i1 %t213, label %panic6438, label %ok6439 -panic6438: + br i1 %t213, label %panic6442, label %ok6443 +panic6442: call void @finch_panic(ptr @.str.4106, i64 3490, ptr @.str.4107) unreachable -ok6439: +ok6443: %t214 = getelementptr inbounds %S.gen.Val, ptr %t212, i32 0, i32 1 %t215 = load %S.ast.Type, ptr %t214 %t216 = call i1 @finch.gen.isFloat(%S.ast.Type %t215) - br label %logic.from6440 -logic.from6440: - br i1 %t216, label %logic.rhs6441, label %logic.end6442 -logic.rhs6441: + br label %logic.from6444 +logic.from6444: + br i1 %t216, label %logic.rhs6445, label %logic.end6446 +logic.rhs6445: %t217 = load ptr, ptr %a3 %t218 = icmp eq ptr %t217, null - br i1 %t218, label %panic6443, label %ok6444 -panic6443: + br i1 %t218, label %panic6447, label %ok6448 +panic6447: call void @finch_panic(ptr @.str.4108, i64 3490, ptr @.str.4109) unreachable -ok6444: +ok6448: %t219 = getelementptr inbounds %S.gen.Val, ptr %t217, i32 0, i32 1 %t220 = load %S.ast.Type, ptr %t219 %t221 = call i1 @finch.gen.isInt(%S.ast.Type %t220) - br label %logic.rend6445 -logic.rend6445: - br label %logic.end6442 -logic.end6442: - %t222 = phi i1 [ false, %logic.from6440 ], [ %t221, %logic.rend6445 ] - br i1 %t222, label %then6446, label %endif6448 -then6446: + br label %logic.rend6449 +logic.rend6449: + br label %logic.end6446 +logic.end6446: + %t222 = phi i1 [ false, %logic.from6444 ], [ %t221, %logic.rend6449 ] + br i1 %t222, label %then6450, label %endif6452 +then6450: %t223 = load ptr, ptr %a1 %t224 = load ptr, ptr %a3 %t225 = icmp eq ptr %t224, null - br i1 %t225, label %panic6449, label %ok6450 -panic6449: + br i1 %t225, label %panic6453, label %ok6454 +panic6453: call void @finch_panic(ptr @.str.4110, i64 3491, ptr @.str.4111) unreachable -ok6450: +ok6454: %t226 = load %S.gen.Val, ptr %t224 %t227 = load ptr, ptr %a2 %t228 = icmp eq ptr %t227, null - br i1 %t228, label %panic6451, label %ok6452 -panic6451: + br i1 %t228, label %panic6455, label %ok6456 +panic6455: call void @finch_panic(ptr @.str.4112, i64 3491, ptr @.str.4113) unreachable -ok6452: +ok6456: %t229 = getelementptr inbounds %S.gen.Val, ptr %t227, i32 0, i32 1 %t230 = load %S.ast.Type, ptr %t229 %t231 = call %S.ast.Node @finch.gen.Node0() @@ -64615,55 +64641,55 @@ ok6452: call void @finch.drop.S_ast_Node(ptr %a233) %t234 = load ptr, ptr %a3 %t235 = icmp eq ptr %t234, null - br i1 %t235, label %panic6453, label %ok6454 -panic6453: + br i1 %t235, label %panic6457, label %ok6458 +panic6457: call void @finch_panic(ptr @.str.4115, i64 3491, ptr @.str.4116) unreachable -ok6454: +ok6458: %t236 = load %S.gen.Val, ptr %t234 store %S.gen.Val %t232, ptr %t234 store %S.gen.Val %t236, ptr %a237 call void @finch.drop.S_gen_Val(ptr %a237) ret i1 true -endif6448: +endif6452: %t238 = load ptr, ptr %a2 %t239 = icmp eq ptr %t238, null - br i1 %t239, label %panic6455, label %ok6456 -panic6455: + br i1 %t239, label %panic6459, label %ok6460 +panic6459: call void @finch_panic(ptr @.str.4117, i64 3494, ptr @.str.4118) unreachable -ok6456: +ok6460: %t240 = getelementptr inbounds %S.gen.Val, ptr %t238, i32 0, i32 1 %t241 = load %S.ast.Type, ptr %t240 %t242 = call i1 @finch.gen.isFloat(%S.ast.Type %t241) - br label %logic.from6457 -logic.from6457: - br i1 %t242, label %logic.rhs6458, label %logic.end6459 -logic.rhs6458: + br label %logic.from6461 +logic.from6461: + br i1 %t242, label %logic.rhs6462, label %logic.end6463 +logic.rhs6462: %t243 = load ptr, ptr %a3 %t244 = icmp eq ptr %t243, null - br i1 %t244, label %panic6460, label %ok6461 -panic6460: + br i1 %t244, label %panic6464, label %ok6465 +panic6464: call void @finch_panic(ptr @.str.4119, i64 3494, ptr @.str.4120) unreachable -ok6461: +ok6465: %t245 = getelementptr inbounds %S.gen.Val, ptr %t243, i32 0, i32 1 %t246 = load %S.ast.Type, ptr %t245 %t247 = call i1 @finch.gen.isFloat(%S.ast.Type %t246) - br label %logic.rend6462 -logic.rend6462: - br label %logic.end6459 -logic.end6459: - %t248 = phi i1 [ false, %logic.from6457 ], [ %t247, %logic.rend6462 ] - br i1 %t248, label %then6463, label %endif6465 -then6463: + br label %logic.rend6466 +logic.rend6466: + br label %logic.end6463 +logic.end6463: + %t248 = phi i1 [ false, %logic.from6461 ], [ %t247, %logic.rend6466 ] + br i1 %t248, label %then6467, label %endif6469 +then6467: %t249 = load ptr, ptr %a2 %t250 = icmp eq ptr %t249, null - br i1 %t250, label %panic6466, label %ok6467 -panic6466: + br i1 %t250, label %panic6470, label %ok6471 +panic6470: call void @finch_panic(ptr @.str.4121, i64 3495, ptr @.str.4122) unreachable -ok6467: +ok6471: %t251 = getelementptr inbounds %S.gen.Val, ptr %t249, i32 0, i32 1 %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i32 0, i32 0 %t253 = load { ptr, i64, i64 }, ptr %t252 @@ -64671,25 +64697,25 @@ ok6467: store { ptr, i64, i64 } { ptr @.str.4123, i64 3, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp ne i32 %t256, 0 - br i1 %t257, label %then6468, label %endif6470 -then6468: + br i1 %t257, label %then6472, label %endif6474 +then6472: %t258 = load ptr, ptr %a1 %t259 = load ptr, ptr %a2 %t260 = icmp eq ptr %t259, null - br i1 %t260, label %panic6471, label %ok6472 -panic6471: + br i1 %t260, label %panic6475, label %ok6476 +panic6475: call void @finch_panic(ptr @.str.4124, i64 3496, ptr @.str.4125) unreachable -ok6472: +ok6476: %t261 = getelementptr inbounds %S.gen.Val, ptr %t259, i32 0, i32 0 %t262 = load { ptr, i64, i64 }, ptr %t261 %t263 = load ptr, ptr %a2 %t264 = icmp eq ptr %t263, null - br i1 %t264, label %panic6473, label %ok6474 -panic6473: + br i1 %t264, label %panic6477, label %ok6478 +panic6477: call void @finch_panic(ptr @.str.4126, i64 3496, ptr @.str.4127) unreachable -ok6474: +ok6478: %t265 = getelementptr inbounds %S.gen.Val, ptr %t263, i32 0, i32 1 %t266 = load %S.ast.Type, ptr %t265 %t267 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4128, i64 5, i64 0 }) @@ -64701,24 +64727,24 @@ ok6474: %t272 = insertvalue %S.gen.Val %t270, %S.ast.Type %t271, 1 %t273 = load ptr, ptr %a2 %t274 = icmp eq ptr %t273, null - br i1 %t274, label %panic6475, label %ok6476 -panic6475: + br i1 %t274, label %panic6479, label %ok6480 +panic6479: call void @finch_panic(ptr @.str.4130, i64 3496, ptr @.str.4131) unreachable -ok6476: +ok6480: %t275 = load %S.gen.Val, ptr %t273 store %S.gen.Val %t272, ptr %t273 store %S.gen.Val %t275, ptr %a276 call void @finch.drop.S_gen_Val(ptr %a276) - br label %endif6470 -endif6470: + br label %endif6474 +endif6474: %t277 = load ptr, ptr %a3 %t278 = icmp eq ptr %t277, null - br i1 %t278, label %panic6477, label %ok6478 -panic6477: + br i1 %t278, label %panic6481, label %ok6482 +panic6481: call void @finch_panic(ptr @.str.4132, i64 3498, ptr @.str.4133) unreachable -ok6478: +ok6482: %t279 = getelementptr inbounds %S.gen.Val, ptr %t277, i32 0, i32 1 %t280 = getelementptr inbounds %S.ast.Type, ptr %t279, i32 0, i32 0 %t281 = load { ptr, i64, i64 }, ptr %t280 @@ -64726,25 +64752,25 @@ ok6478: store { ptr, i64, i64 } { ptr @.str.4134, i64 3, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 - br i1 %t285, label %then6479, label %endif6481 -then6479: + br i1 %t285, label %then6483, label %endif6485 +then6483: %t286 = load ptr, ptr %a1 %t287 = load ptr, ptr %a3 %t288 = icmp eq ptr %t287, null - br i1 %t288, label %panic6482, label %ok6483 -panic6482: + br i1 %t288, label %panic6486, label %ok6487 +panic6486: call void @finch_panic(ptr @.str.4135, i64 3499, ptr @.str.4136) unreachable -ok6483: +ok6487: %t289 = getelementptr inbounds %S.gen.Val, ptr %t287, i32 0, i32 0 %t290 = load { ptr, i64, i64 }, ptr %t289 %t291 = load ptr, ptr %a3 %t292 = icmp eq ptr %t291, null - br i1 %t292, label %panic6484, label %ok6485 -panic6484: + br i1 %t292, label %panic6488, label %ok6489 +panic6488: call void @finch_panic(ptr @.str.4137, i64 3499, ptr @.str.4138) unreachable -ok6485: +ok6489: %t293 = getelementptr inbounds %S.gen.Val, ptr %t291, i32 0, i32 1 %t294 = load %S.ast.Type, ptr %t293 %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4139, i64 5, i64 0 }) @@ -64756,19 +64782,19 @@ ok6485: %t300 = insertvalue %S.gen.Val %t298, %S.ast.Type %t299, 1 %t301 = load ptr, ptr %a3 %t302 = icmp eq ptr %t301, null - br i1 %t302, label %panic6486, label %ok6487 -panic6486: + br i1 %t302, label %panic6490, label %ok6491 +panic6490: call void @finch_panic(ptr @.str.4141, i64 3499, ptr @.str.4142) unreachable -ok6487: +ok6491: %t303 = load %S.gen.Val, ptr %t301 store %S.gen.Val %t300, ptr %t301 store %S.gen.Val %t303, ptr %a304 call void @finch.drop.S_gen_Val(ptr %a304) - br label %endif6481 -endif6481: + br label %endif6485 +endif6485: ret i1 true -endif6465: +endif6469: ret i1 false } @@ -64930,10 +64956,10 @@ entry: store { ptr, i64, i64 } { ptr @.str.4143, i64 1, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.from6488 -logic.from6488: - br i1 %t16, label %logic.rhs6489, label %logic.end6490 -logic.rhs6489: + br label %logic.from6492 +logic.from6492: + br i1 %t16, label %logic.rhs6493, label %logic.end6494 +logic.rhs6493: %t17 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t18 = getelementptr inbounds %S.ast.Type, ptr %t17, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 @@ -64941,15 +64967,15 @@ logic.rhs6489: store { ptr, i64, i64 } { ptr @.str.4144, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend6491 -logic.rend6491: - br label %logic.end6490 -logic.end6490: - %t24 = phi i1 [ false, %logic.from6488 ], [ %t23, %logic.rend6491 ] - br label %logic.from6492 -logic.from6492: - br i1 %t24, label %logic.rhs6493, label %logic.end6494 -logic.rhs6493: + br label %logic.rend6495 +logic.rend6495: + br label %logic.end6494 +logic.end6494: + %t24 = phi i1 [ false, %logic.from6492 ], [ %t23, %logic.rend6495 ] + br label %logic.from6496 +logic.from6496: + br i1 %t24, label %logic.rhs6497, label %logic.end6498 +logic.rhs6497: %t25 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t26 = getelementptr inbounds %S.ast.Type, ptr %t25, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 @@ -64957,13 +64983,13 @@ logic.rhs6493: store { ptr, i64, i64 } { ptr @.str.4145, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br label %logic.rend6495 -logic.rend6495: - br label %logic.end6494 -logic.end6494: - %t32 = phi i1 [ false, %logic.from6492 ], [ %t31, %logic.rend6495 ] - br i1 %t32, label %then6496, label %endif6498 -then6496: + br label %logic.rend6499 +logic.rend6499: + br label %logic.end6498 +logic.end6498: + %t32 = phi i1 [ false, %logic.from6496 ], [ %t31, %logic.rend6499 ] + br i1 %t32, label %then6500, label %endif6502 +then6500: %t33 = load ptr, ptr %a1 %t34 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t33, { ptr, i64, i64 } { ptr @.str.4146, i64 17, i64 0 }) store { ptr, i64, i64 } %t34, ptr %a35 @@ -65033,25 +65059,25 @@ then6496: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t86 -endif6498: +endif6502: %t87 = load ptr, ptr %a1 %t88 = call i1 @finch.gen.unify(ptr %t87, ptr %a6, ptr %a10) %t89 = xor i1 %t88, true - br i1 %t89, label %then6499, label %endif6501 -then6499: + br i1 %t89, label %then6503, label %endif6505 +then6503: %t90 = load ptr, ptr %a1 %t91 = load { ptr, i64, i64 }, ptr %a2 %t92 = load %S.gen.Val, ptr %a6 %t93 = load %S.gen.Val, ptr %a10 %t94 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t90, { ptr, i64, i64 } %t91, %S.gen.Val %t92, %S.gen.Val %t93, %S.ast.Node %t94) - br label %endif6501 -endif6501: + br label %endif6505 +endif6505: %t95 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t96 = load %S.ast.Type, ptr %t95 %t97 = call i1 @finch.gen.isInt(%S.ast.Type %t96) - br i1 %t97, label %then6502, label %endif6504 -then6502: + br i1 %t97, label %then6506, label %endif6508 +then6506: %t98 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t99 = call ptr @finch_alloc(i64 %t98) %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 0 @@ -65107,8 +65133,8 @@ then6502: %t130 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t131 = load %S.ast.Type, ptr %t130 %t132 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t131) - br i1 %t132, label %then6505, label %endif6507 -then6505: + br i1 %t132, label %then6509, label %endif6511 +then6509: %t133 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t134 = call ptr @finch_alloc(i64 %t133) %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 0 @@ -65138,49 +65164,49 @@ then6505: store { ptr, i64, i64 } %t147, ptr %a129 store { ptr, i64, i64 } %t148, ptr %a149 call void @finch.drop.arr_str(ptr %a149) - br label %endif6507 -endif6507: + br label %endif6511 +endif6511: %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t151 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a152 %t153 = load i64, ptr %t150 %t154 = load ptr, ptr %a113 store i64 0, ptr %a155 - br label %find.cond6508 -find.cond6508: + br label %find.cond6512 +find.cond6512: %t156 = load i64, ptr %a155 %t157 = icmp slt i64 %t156, %t153 - br i1 %t157, label %find.body6509, label %find.end6512 -find.body6509: + br i1 %t157, label %find.body6513, label %find.end6516 +find.body6513: %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i64 %t156 %t159 = load { ptr, i64, i64 }, ptr %t158 store { ptr, i64, i64 } %t159, ptr %a160 store { ptr, i64, i64 } %t151, ptr %a161 %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) %t163 = icmp ne i32 %t162, 0 - br i1 %t163, label %find.hit6510, label %find.next6511 -find.hit6510: + br i1 %t163, label %find.hit6514, label %find.next6515 +find.hit6514: store i64 %t156, ptr %a152 - br label %find.end6512 -find.next6511: + br label %find.end6516 +find.next6515: %t164 = add i64 %t156, 1 store i64 %t164, ptr %a155 - br label %find.cond6508 -find.end6512: + br label %find.cond6512 +find.end6516: %t165 = load i64, ptr %a152 store i64 %t165, ptr %a166 %t167 = load i64, ptr %a166 %t168 = icmp slt i64 %t167, 0 - br i1 %t168, label %then6513, label %endif6515 -then6513: + br i1 %t168, label %then6517, label %endif6519 +then6517: %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a2 %t171 = load %S.gen.Val, ptr %a6 %t172 = load %S.gen.Val, ptr %a10 %t173 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t169, { ptr, i64, i64 } %t170, %S.gen.Val %t171, %S.gen.Val %t172, %S.ast.Node %t173) - br label %endif6515 -endif6515: + br label %endif6519 +endif6519: %t174 = load ptr, ptr %a1 %t175 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t176 = load %S.ast.Type, ptr %t175 @@ -65191,51 +65217,51 @@ endif6515: store { ptr, i64, i64 } { ptr @.str.4183, i64 1, i64 0 }, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 - br label %logic.from6516 -logic.from6516: - br i1 %t183, label %logic.end6518, label %logic.rhs6517 -logic.rhs6517: + br label %logic.from6520 +logic.from6520: + br i1 %t183, label %logic.end6522, label %logic.rhs6521 +logic.rhs6521: %t184 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t184, ptr %a185 store { ptr, i64, i64 } { ptr @.str.4184, i64 1, i64 0 }, ptr %a186 %t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186) %t188 = icmp ne i32 %t187, 0 - br label %logic.rend6519 -logic.rend6519: - br label %logic.end6518 -logic.end6518: - %t189 = phi i1 [ true, %logic.from6516 ], [ %t188, %logic.rend6519 ] - br i1 %t189, label %then6520, label %endif6522 -then6520: + br label %logic.rend6523 +logic.rend6523: + br label %logic.end6522 +logic.end6522: + %t189 = phi i1 [ true, %logic.from6520 ], [ %t188, %logic.rend6523 ] + br i1 %t189, label %then6524, label %endif6526 +then6524: %t190 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 %t191 = load i1, ptr %t190 - br label %logic.from6523 -logic.from6523: - br i1 %t191, label %logic.rhs6524, label %logic.end6525 -logic.rhs6524: + br label %logic.from6527 +logic.from6527: + br i1 %t191, label %logic.rhs6528, label %logic.end6529 +logic.rhs6528: %t192 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t193 = load { ptr, i64, i64 }, ptr %t192 store { ptr, i64, i64 } %t193, ptr %a194 store { ptr, i64, i64 } { ptr @.str.4185, i64 1, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 - br label %logic.rend6526 -logic.rend6526: - br label %logic.end6525 -logic.end6525: - %t198 = phi i1 [ false, %logic.from6523 ], [ %t197, %logic.rend6526 ] - br i1 %t198, label %then6527, label %endif6529 -then6527: + br label %logic.rend6530 +logic.rend6530: + br label %logic.end6529 +logic.end6529: + %t198 = phi i1 [ false, %logic.from6527 ], [ %t197, %logic.rend6530 ] + br i1 %t198, label %then6531, label %endif6533 +then6531: %t199 = load ptr, ptr %a1 %t200 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t199, %S.ast.Node %t200, { ptr, i64, i64 } { ptr @.str.4186, i64 16, i64 0 }) - br label %endif6529 -endif6529: + br label %endif6533 +endif6533: %t201 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 %t202 = load i1, ptr %t201 %t203 = xor i1 %t202, true - br i1 %t203, label %then6530, label %endif6532 -then6530: + br i1 %t203, label %then6534, label %endif6536 +then6534: %t204 = load ptr, ptr %a1 %t205 = load ptr, ptr %a1 %t206 = load { ptr, i64, i64 }, ptr %a178 @@ -65270,20 +65296,20 @@ then6530: call void @finch.gen.panicIf(ptr %t204, { ptr, i64, i64 } %t228, { ptr, i64, i64 } { ptr @.str.4190, i64 16, i64 0 }, %S.ast.Node %t230) store { ptr, i64, i64 } %t228, ptr %a231 call void @finch_str_drop(ptr %a231) - br label %endif6532 -endif6532: - br label %endif6522 -endif6522: + br label %endif6536 +endif6536: + br label %endif6526 +endif6526: %t232 = load ptr, ptr %a1 %t233 = load i64, ptr %a166 %t234 = load { ptr, i64, i64 }, ptr %a129 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 %t233, %t235 - br i1 %t236, label %range6533, label %inrange6534 -range6533: + br i1 %t236, label %range6537, label %inrange6538 +range6537: call void @finch_panic_index(ptr @.str.4191, i64 3540, i64 %t233, i64 %t235) unreachable -inrange6534: +inrange6538: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t233 %t239 = load { ptr, i64, i64 }, ptr %t238 @@ -65342,12 +65368,12 @@ inrange6534: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t282 -endif6504: +endif6508: %t283 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t284 = load %S.ast.Type, ptr %t283 %t285 = call i1 @finch.gen.isFloat(%S.ast.Type %t284) - br i1 %t285, label %then6535, label %endif6537 -then6535: + br i1 %t285, label %then6539, label %endif6541 +then6539: %t286 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t287 = call ptr @finch_alloc(i64 %t286) %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 0 @@ -65386,51 +65412,51 @@ then6535: %t311 = load i64, ptr %t308 %t312 = load ptr, ptr %a296 store i64 0, ptr %a313 - br label %find.cond6538 -find.cond6538: + br label %find.cond6542 +find.cond6542: %t314 = load i64, ptr %a313 %t315 = icmp slt i64 %t314, %t311 - br i1 %t315, label %find.body6539, label %find.end6542 -find.body6539: + br i1 %t315, label %find.body6543, label %find.end6546 +find.body6543: %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t312, i64 %t314 %t317 = load { ptr, i64, i64 }, ptr %t316 store { ptr, i64, i64 } %t317, ptr %a318 store { ptr, i64, i64 } %t309, ptr %a319 %t320 = call i32 @finch_str_eq(ptr %a318, ptr %a319) %t321 = icmp ne i32 %t320, 0 - br i1 %t321, label %find.hit6540, label %find.next6541 -find.hit6540: + br i1 %t321, label %find.hit6544, label %find.next6545 +find.hit6544: store i64 %t314, ptr %a310 - br label %find.end6542 -find.next6541: + br label %find.end6546 +find.next6545: %t322 = add i64 %t314, 1 store i64 %t322, ptr %a313 - br label %find.cond6538 -find.end6542: + br label %find.cond6542 +find.end6546: %t323 = load i64, ptr %a310 store i64 %t323, ptr %a324 %t325 = load i64, ptr %a324 %t326 = icmp slt i64 %t325, 0 - br i1 %t326, label %then6543, label %endif6545 -then6543: + br i1 %t326, label %then6547, label %endif6549 +then6547: %t327 = load ptr, ptr %a1 %t328 = load { ptr, i64, i64 }, ptr %a2 %t329 = load %S.gen.Val, ptr %a6 %t330 = load %S.gen.Val, ptr %a10 %t331 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t327, { ptr, i64, i64 } %t328, %S.gen.Val %t329, %S.gen.Val %t330, %S.ast.Node %t331) - br label %endif6545 -endif6545: + br label %endif6549 +endif6549: %t332 = load ptr, ptr %a1 %t333 = load i64, ptr %a324 %t334 = load { ptr, i64, i64 }, ptr %a307 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 - br i1 %t336, label %range6546, label %inrange6547 -range6546: + br i1 %t336, label %range6550, label %inrange6551 +range6550: call void @finch_panic_index(ptr @.str.4205, i64 3549, i64 %t333, i64 %t335) unreachable -inrange6547: +inrange6551: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t333 %t339 = load { ptr, i64, i64 }, ptr %t338 @@ -65493,7 +65519,7 @@ inrange6547: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t386 -endif6537: +endif6541: %t387 = load ptr, ptr %a1 %t388 = load { ptr, i64, i64 }, ptr %a2 %t389 = load %S.gen.Val, ptr %a6 @@ -65758,20 +65784,20 @@ entry: store { ptr, i64, i64 } { ptr @.str.4209, i64 2, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.from6548 -logic.from6548: - br i1 %t16, label %logic.end6550, label %logic.rhs6549 -logic.rhs6549: + br label %logic.from6552 +logic.from6552: + br i1 %t16, label %logic.end6554, label %logic.rhs6553 +logic.rhs6553: %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.4210, i64 2, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 - br label %logic.rend6551 -logic.rend6551: - br label %logic.end6550 -logic.end6550: - %t22 = phi i1 [ true, %logic.from6548 ], [ %t21, %logic.rend6551 ] + br label %logic.rend6555 +logic.rend6555: + br label %logic.end6554 +logic.end6554: + %t22 = phi i1 [ true, %logic.from6552 ], [ %t21, %logic.rend6555 ] store i1 %t22, ptr %a23 %t24 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t25 = getelementptr inbounds %S.ast.Type, ptr %t24, i32 0, i32 0 @@ -65780,10 +65806,10 @@ logic.end6550: store { ptr, i64, i64 } { ptr @.str.4211, i64 3, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br label %logic.from6552 -logic.from6552: - br i1 %t30, label %logic.end6554, label %logic.rhs6553 -logic.rhs6553: + br label %logic.from6556 +logic.from6556: + br i1 %t30, label %logic.end6558, label %logic.rhs6557 +logic.rhs6557: %t31 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 @@ -65791,15 +65817,15 @@ logic.rhs6553: store { ptr, i64, i64 } { ptr @.str.4212, i64 3, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br label %logic.rend6555 -logic.rend6555: - br label %logic.end6554 -logic.end6554: - %t38 = phi i1 [ true, %logic.from6552 ], [ %t37, %logic.rend6555 ] - br label %logic.from6556 -logic.from6556: - br i1 %t38, label %logic.end6558, label %logic.rhs6557 -logic.rhs6557: + br label %logic.rend6559 +logic.rend6559: + br label %logic.end6558 +logic.end6558: + %t38 = phi i1 [ true, %logic.from6556 ], [ %t37, %logic.rend6559 ] + br label %logic.from6560 +logic.from6560: + br i1 %t38, label %logic.end6562, label %logic.rhs6561 +logic.rhs6561: %t39 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t40 = getelementptr inbounds %S.ast.Type, ptr %t39, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 @@ -65807,15 +65833,15 @@ logic.rhs6557: store { ptr, i64, i64 } { ptr @.str.4213, i64 4, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.rend6559 -logic.rend6559: - br label %logic.end6558 -logic.end6558: - %t46 = phi i1 [ true, %logic.from6556 ], [ %t45, %logic.rend6559 ] - br label %logic.from6560 -logic.from6560: - br i1 %t46, label %logic.end6562, label %logic.rhs6561 -logic.rhs6561: + br label %logic.rend6563 +logic.rend6563: + br label %logic.end6562 +logic.end6562: + %t46 = phi i1 [ true, %logic.from6560 ], [ %t45, %logic.rend6563 ] + br label %logic.from6564 +logic.from6564: + br i1 %t46, label %logic.end6566, label %logic.rhs6565 +logic.rhs6565: %t47 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t48 = getelementptr inbounds %S.ast.Type, ptr %t47, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 @@ -65823,13 +65849,13 @@ logic.rhs6561: store { ptr, i64, i64 } { ptr @.str.4214, i64 4, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 - br label %logic.rend6563 -logic.rend6563: - br label %logic.end6562 -logic.end6562: - %t54 = phi i1 [ true, %logic.from6560 ], [ %t53, %logic.rend6563 ] - br i1 %t54, label %then6564, label %endif6566 -then6564: + br label %logic.rend6567 +logic.rend6567: + br label %logic.end6566 +logic.end6566: + %t54 = phi i1 [ true, %logic.from6564 ], [ %t53, %logic.rend6567 ] + br i1 %t54, label %then6568, label %endif6570 +then6568: %t55 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t56 = getelementptr inbounds %S.ast.Type, ptr %t55, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 @@ -65837,10 +65863,10 @@ then6564: store { ptr, i64, i64 } { ptr @.str.4215, i64 3, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br label %logic.from6567 -logic.from6567: - br i1 %t61, label %logic.end6569, label %logic.rhs6568 -logic.rhs6568: + br label %logic.from6571 +logic.from6571: + br i1 %t61, label %logic.end6573, label %logic.rhs6572 +logic.rhs6572: %t62 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t63 = getelementptr inbounds %S.ast.Type, ptr %t62, i32 0, i32 0 %t64 = load { ptr, i64, i64 }, ptr %t63 @@ -65848,44 +65874,44 @@ logic.rhs6568: store { ptr, i64, i64 } { ptr @.str.4216, i64 3, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 - br label %logic.rend6570 -logic.rend6570: - br label %logic.end6569 -logic.end6569: - %t69 = phi i1 [ true, %logic.from6567 ], [ %t68, %logic.rend6570 ] - br i1 %t69, label %then6571, label %endif6573 -then6571: + br label %logic.rend6574 +logic.rend6574: + br label %logic.end6573 +logic.end6573: + %t69 = phi i1 [ true, %logic.from6571 ], [ %t68, %logic.rend6574 ] + br i1 %t69, label %then6575, label %endif6577 +then6575: %t70 = load ptr, ptr %a1 %t71 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } { ptr @.str.4217, i64 59, i64 0 }) - br label %endif6573 -endif6573: + br label %endif6577 +endif6577: %t72 = load i1, ptr %a23 %t73 = xor i1 %t72, true - br i1 %t73, label %then6574, label %endif6576 -then6574: + br i1 %t73, label %then6578, label %endif6580 +then6578: %t74 = load ptr, ptr %a1 %t75 = load { ptr, i64, i64 }, ptr %a2 %t76 = load %S.gen.Val, ptr %a6 %t77 = load %S.gen.Val, ptr %a10 %t78 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t74, { ptr, i64, i64 } %t75, %S.gen.Val %t76, %S.gen.Val %t77, %S.ast.Node %t78) - br label %endif6576 -endif6576: + br label %endif6580 +endif6580: store { ptr, i64, i64 } { ptr @.str.4218, i64 2, i64 0 }, ptr %a79 %t80 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.4219, i64 2, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 - br i1 %t84, label %then6577, label %endif6579 -then6577: + br i1 %t84, label %then6581, label %endif6583 +then6581: %t85 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4220, i64 2, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t85, ptr %a86 call void @finch_str_drop(ptr %a86) - br label %endif6579 -endif6579: + br label %endif6583 +endif6583: %t87 = load ptr, ptr %a1 %t88 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4221, i64 5, i64 0 }, ptr %a90 @@ -65930,7 +65956,7 @@ endif6579: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t121 -endif6566: +endif6570: %t122 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t123 = getelementptr inbounds %S.ast.Type, ptr %t122, i32 0, i32 0 %t124 = load { ptr, i64, i64 }, ptr %t123 @@ -65938,10 +65964,10 @@ endif6566: store { ptr, i64, i64 } { ptr @.str.4225, i64 3, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) %t128 = icmp ne i32 %t127, 0 - br label %logic.from6580 -logic.from6580: - br i1 %t128, label %logic.rhs6581, label %logic.end6582 -logic.rhs6581: + br label %logic.from6584 +logic.from6584: + br i1 %t128, label %logic.rhs6585, label %logic.end6586 +logic.rhs6585: %t129 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t130 = getelementptr inbounds %S.ast.Type, ptr %t129, i32 0, i32 0 %t131 = load { ptr, i64, i64 }, ptr %t130 @@ -65949,16 +65975,16 @@ logic.rhs6581: store { ptr, i64, i64 } { ptr @.str.4226, i64 3, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 - br label %logic.rend6583 -logic.rend6583: - br label %logic.end6582 -logic.end6582: - %t136 = phi i1 [ false, %logic.from6580 ], [ %t135, %logic.rend6583 ] - br i1 %t136, label %then6584, label %endif6586 -then6584: + br label %logic.rend6587 +logic.rend6587: + br label %logic.end6586 +logic.end6586: + %t136 = phi i1 [ false, %logic.from6584 ], [ %t135, %logic.rend6587 ] + br i1 %t136, label %then6588, label %endif6590 +then6588: %t137 = load i1, ptr %a23 - br i1 %t137, label %then6587, label %endif6589 -then6587: + br i1 %t137, label %then6591, label %endif6593 +then6591: %t138 = load ptr, ptr %a1 %t139 = load ptr, ptr %a1 %t140 = load %S.gen.Val, ptr %a6 @@ -66002,14 +66028,14 @@ then6587: store { ptr, i64, i64 } { ptr @.str.4231, i64 2, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 - br i1 %t174, label %then6590, label %endif6592 -then6590: + br i1 %t174, label %then6594, label %endif6596 +then6594: %t175 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } { ptr @.str.4232, i64 2, i64 0 }, ptr %a169 store { ptr, i64, i64 } %t175, ptr %a176 call void @finch_str_drop(ptr %a176) - br label %endif6592 -endif6592: + br label %endif6596 +endif6596: %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } { ptr @.str.4233, i64 5, i64 0 }, ptr %a180 @@ -66058,7 +66084,7 @@ endif6592: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t212 -endif6589: +endif6593: %t213 = load ptr, ptr %a1 %t214 = load ptr, ptr %a1 %t215 = load %S.gen.Val, ptr %a6 @@ -66146,20 +66172,20 @@ endif6589: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t281 -endif6586: +endif6590: %t282 = load ptr, ptr %a1 %t283 = call i1 @finch.gen.unify(ptr %t282, ptr %a6, ptr %a10) %t284 = xor i1 %t283, true - br i1 %t284, label %then6593, label %endif6595 -then6593: + br i1 %t284, label %then6597, label %endif6599 +then6597: %t285 = load ptr, ptr %a1 %t286 = load { ptr, i64, i64 }, ptr %a2 %t287 = load %S.gen.Val, ptr %a6 %t288 = load %S.gen.Val, ptr %a10 %t289 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t285, { ptr, i64, i64 } %t286, %S.gen.Val %t287, %S.gen.Val %t288, %S.ast.Node %t289) - br label %endif6595 -endif6595: + br label %endif6599 +endif6599: %t290 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t291 = getelementptr inbounds %S.ast.Type, ptr %t290, i32 0, i32 0 %t292 = load { ptr, i64, i64 }, ptr %t291 @@ -66170,8 +66196,8 @@ endif6595: %t297 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t298 = load %S.ast.Type, ptr %t297 %t299 = call i1 @finch.gen.isFloat(%S.ast.Type %t298) - br i1 %t299, label %then6596, label %endif6598 -then6596: + br i1 %t299, label %then6600, label %endif6602 +then6600: %t300 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t301 = call ptr @finch_alloc(i64 %t300) %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 0 @@ -66215,36 +66241,36 @@ then6596: %t328 = load i64, ptr %t325 %t329 = load ptr, ptr %a311 store i64 0, ptr %a330 - br label %find.cond6599 -find.cond6599: + br label %find.cond6603 +find.cond6603: %t331 = load i64, ptr %a330 %t332 = icmp slt i64 %t331, %t328 - br i1 %t332, label %find.body6600, label %find.end6603 -find.body6600: + br i1 %t332, label %find.body6604, label %find.end6607 +find.body6604: %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t329, i64 %t331 %t334 = load { ptr, i64, i64 }, ptr %t333 store { ptr, i64, i64 } %t334, ptr %a335 store { ptr, i64, i64 } %t326, ptr %a336 %t337 = call i32 @finch_str_eq(ptr %a335, ptr %a336) %t338 = icmp ne i32 %t337, 0 - br i1 %t338, label %find.hit6601, label %find.next6602 -find.hit6601: + br i1 %t338, label %find.hit6605, label %find.next6606 +find.hit6605: store i64 %t331, ptr %a327 - br label %find.end6603 -find.next6602: + br label %find.end6607 +find.next6606: %t339 = add i64 %t331, 1 store i64 %t339, ptr %a330 - br label %find.cond6599 -find.end6603: + br label %find.cond6603 +find.end6607: %t340 = load i64, ptr %a327 %t341 = load { ptr, i64, i64 }, ptr %a323 %t342 = extractvalue { ptr, i64, i64 } %t341, 1 %t343 = icmp uge i64 %t340, %t342 - br i1 %t343, label %range6604, label %inrange6605 -range6604: + br i1 %t343, label %range6608, label %inrange6609 +range6608: call void @finch_panic_index(ptr @.str.4257, i64 3595, i64 %t340, i64 %t342) unreachable -inrange6605: +inrange6609: %t344 = extractvalue { ptr, i64, i64 } %t341, 0 %t345 = getelementptr inbounds { ptr, i64, i64 }, ptr %t344, i64 %t340 %t346 = load { ptr, i64, i64 }, ptr %t345 @@ -66310,37 +66336,37 @@ inrange6605: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t394 -endif6598: +endif6602: %t395 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t395, ptr %a396 store { ptr, i64, i64 } { ptr @.str.4262, i64 4, i64 0 }, ptr %a397 %t398 = call i32 @finch_str_eq(ptr %a396, ptr %a397) %t399 = icmp ne i32 %t398, 0 - br i1 %t399, label %then6606, label %endif6608 -then6606: + br i1 %t399, label %then6610, label %endif6612 +then6610: %t400 = load i1, ptr %a23 %t401 = xor i1 %t400, true - br i1 %t401, label %then6609, label %endif6611 -then6609: + br i1 %t401, label %then6613, label %endif6615 +then6613: %t402 = load ptr, ptr %a1 %t403 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4263, i64 115, i64 0 }) - br label %endif6611 -endif6611: + br label %endif6615 +endif6615: store { ptr, i64, i64 } { ptr @.str.4264, i64 2, i64 0 }, ptr %a404 %t405 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t405, ptr %a406 store { ptr, i64, i64 } { ptr @.str.4265, i64 2, i64 0 }, ptr %a407 %t408 = call i32 @finch_str_eq(ptr %a406, ptr %a407) %t409 = icmp ne i32 %t408, 0 - br i1 %t409, label %then6612, label %endif6614 -then6612: + br i1 %t409, label %then6616, label %endif6618 +then6616: %t410 = load { ptr, i64, i64 }, ptr %a404 store { ptr, i64, i64 } { ptr @.str.4266, i64 2, i64 0 }, ptr %a404 store { ptr, i64, i64 } %t410, ptr %a411 call void @finch_str_drop(ptr %a411) - br label %endif6614 -endif6614: + br label %endif6618 +endif6618: %t412 = load ptr, ptr %a1 %t413 = load { ptr, i64, i64 }, ptr %a404 store { ptr, i64, i64 } { ptr @.str.4267, i64 5, i64 0 }, ptr %a415 @@ -66386,75 +66412,75 @@ endif6614: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t446 -endif6608: +endif6612: %t447 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t447, ptr %a448 store { ptr, i64, i64 } { ptr @.str.4271, i64 4, i64 0 }, ptr %a449 %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) %t451 = icmp ne i32 %t450, 0 - br label %logic.from6615 -logic.from6615: - br i1 %t451, label %logic.rhs6616, label %logic.end6617 -logic.rhs6616: + br label %logic.from6619 +logic.from6619: + br i1 %t451, label %logic.rhs6620, label %logic.end6621 +logic.rhs6620: %t452 = load i1, ptr %a23 %t453 = xor i1 %t452, true - br label %logic.rend6618 -logic.rend6618: - br label %logic.end6617 -logic.end6617: - %t454 = phi i1 [ false, %logic.from6615 ], [ %t453, %logic.rend6618 ] - br i1 %t454, label %then6619, label %endif6621 -then6619: + br label %logic.rend6622 +logic.rend6622: + br label %logic.end6621 +logic.end6621: + %t454 = phi i1 [ false, %logic.from6619 ], [ %t453, %logic.rend6622 ] + br i1 %t454, label %then6623, label %endif6625 +then6623: %t455 = load ptr, ptr %a1 %t456 = load { ptr, i64, i64 }, ptr %a2 %t457 = load %S.gen.Val, ptr %a6 %t458 = load %S.gen.Val, ptr %a10 %t459 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t455, { ptr, i64, i64 } %t456, %S.gen.Val %t457, %S.gen.Val %t458, %S.ast.Node %t459) - br label %endif6621 -endif6621: + br label %endif6625 +endif6625: %t460 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t461 = load %S.ast.Type, ptr %t460 %t462 = call i1 @finch.gen.isInt(%S.ast.Type %t461) %t463 = xor i1 %t462, true - br label %logic.from6622 -logic.from6622: - br i1 %t463, label %logic.rhs6623, label %logic.end6624 -logic.rhs6623: + br label %logic.from6626 +logic.from6626: + br i1 %t463, label %logic.rhs6627, label %logic.end6628 +logic.rhs6627: %t464 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t464, ptr %a465 store { ptr, i64, i64 } { ptr @.str.4272, i64 4, i64 0 }, ptr %a466 %t467 = call i32 @finch_str_eq(ptr %a465, ptr %a466) %t468 = icmp eq i32 %t467, 0 - br label %logic.rend6625 -logic.rend6625: - br label %logic.end6624 -logic.end6624: - %t469 = phi i1 [ false, %logic.from6622 ], [ %t468, %logic.rend6625 ] - br label %logic.from6626 -logic.from6626: - br i1 %t469, label %logic.rhs6627, label %logic.end6628 -logic.rhs6627: + br label %logic.rend6629 +logic.rend6629: + br label %logic.end6628 +logic.end6628: + %t469 = phi i1 [ false, %logic.from6626 ], [ %t468, %logic.rend6629 ] + br label %logic.from6630 +logic.from6630: + br i1 %t469, label %logic.rhs6631, label %logic.end6632 +logic.rhs6631: %t470 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t470, ptr %a471 store { ptr, i64, i64 } { ptr @.str.4273, i64 4, i64 0 }, ptr %a472 %t473 = call i32 @finch_str_eq(ptr %a471, ptr %a472) %t474 = icmp eq i32 %t473, 0 - br label %logic.rend6629 -logic.rend6629: - br label %logic.end6628 -logic.end6628: - %t475 = phi i1 [ false, %logic.from6626 ], [ %t474, %logic.rend6629 ] - br i1 %t475, label %then6630, label %endif6632 -then6630: + br label %logic.rend6633 +logic.rend6633: + br label %logic.end6632 +logic.end6632: + %t475 = phi i1 [ false, %logic.from6630 ], [ %t474, %logic.rend6633 ] + br i1 %t475, label %then6634, label %endif6636 +then6634: %t476 = load ptr, ptr %a1 %t477 = load { ptr, i64, i64 }, ptr %a2 %t478 = load %S.gen.Val, ptr %a6 %t479 = load %S.gen.Val, ptr %a10 %t480 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t476, { ptr, i64, i64 } %t477, %S.gen.Val %t478, %S.gen.Val %t479, %S.ast.Node %t480) - br label %endif6632 -endif6632: + br label %endif6636 +endif6636: %t481 = load ptr, ptr %a1 %t482 = load { ptr, i64, i64 }, ptr %a2 %t483 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 @@ -66577,8 +66603,8 @@ entry: %t25 = insertvalue { ptr, i64, i64 } %t24, i64 6, 2 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load i1, ptr %a2 - br i1 %t27, label %then6633, label %endif6635 -then6633: + br i1 %t27, label %then6637, label %endif6639 +then6637: %t28 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t29 = call ptr @finch_alloc(i64 %t28) %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 @@ -66600,44 +66626,44 @@ then6633: store { ptr, i64, i64 } %t38, ptr %a26 store { ptr, i64, i64 } %t39, ptr %a40 call void @finch.drop.arr_str(ptr %a40) - br label %endif6635 -endif6635: + br label %endif6639 +endif6639: %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a43 %t44 = load i64, ptr %t41 %t45 = load ptr, ptr %a14 store i64 0, ptr %a46 - br label %find.cond6636 -find.cond6636: + br label %find.cond6640 +find.cond6640: %t47 = load i64, ptr %a46 %t48 = icmp slt i64 %t47, %t44 - br i1 %t48, label %find.body6637, label %find.end6640 -find.body6637: + br i1 %t48, label %find.body6641, label %find.end6644 +find.body6641: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t47 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } %t42, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %find.hit6638, label %find.next6639 -find.hit6638: + br i1 %t54, label %find.hit6642, label %find.next6643 +find.hit6642: store i64 %t47, ptr %a43 - br label %find.end6640 -find.next6639: + br label %find.end6644 +find.next6643: %t55 = add i64 %t47, 1 store i64 %t55, ptr %a46 - br label %find.cond6636 -find.end6640: + br label %find.cond6640 +find.end6644: %t56 = load i64, ptr %a43 %t57 = load { ptr, i64, i64 }, ptr %a26 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 %t56, %t58 - br i1 %t59, label %range6641, label %inrange6642 -range6641: + br i1 %t59, label %range6645, label %inrange6646 +range6645: call void @finch_panic_index(ptr @.str.4297, i64 3622, i64 %t56, i64 %t58) unreachable -inrange6642: +inrange6646: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i64 %t56 %t62 = load { ptr, i64, i64 }, ptr %t61 @@ -66732,32 +66758,32 @@ entry: store { ptr, i64, i64 } { ptr @.str.4298, i64 2, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from6643 -logic.from6643: - br i1 %t13, label %logic.end6645, label %logic.rhs6644 -logic.rhs6644: + br label %logic.from6647 +logic.from6647: + br i1 %t13, label %logic.end6649, label %logic.rhs6648 +logic.rhs6648: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.4299, i64 2, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.rend6646 -logic.rend6646: - br label %logic.end6645 -logic.end6645: - %t19 = phi i1 [ true, %logic.from6643 ], [ %t18, %logic.rend6646 ] - br i1 %t19, label %then6647, label %endif6649 -then6647: + br label %logic.rend6650 +logic.rend6650: + br label %logic.end6649 +logic.end6649: + %t19 = phi i1 [ true, %logic.from6647 ], [ %t18, %logic.rend6650 ] + br i1 %t19, label %then6651, label %endif6653 +then6651: %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = extractvalue { ptr, i64, i64 } %t22, 1 %t24 = icmp uge i64 0, %t23 - br i1 %t24, label %range6650, label %inrange6651 -range6650: + br i1 %t24, label %range6654, label %inrange6655 +range6654: call void @finch_panic_index(ptr @.str.4300, i64 3628, i64 0, i64 %t23) unreachable -inrange6651: +inrange6655: %t25 = extractvalue { ptr, i64, i64 } %t22, 0 %t26 = getelementptr inbounds %S.ast.Node, ptr %t25, i64 0 %t27 = load %S.ast.Node, ptr %t26 @@ -66783,22 +66809,22 @@ inrange6651: store { ptr, i64, i64 } { ptr @.str.4304, i64 2, i64 0 }, ptr %a45 %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) %t47 = icmp ne i32 %t46, 0 - br i1 %t47, label %then6652, label %else6653 -then6652: + br i1 %t47, label %then6656, label %else6657 +then6656: %t48 = load ptr, ptr %a1 %t49 = load { ptr, i64, i64 }, ptr %a29 %t50 = load { ptr, i64, i64 }, ptr %a35 %t51 = load { ptr, i64, i64 }, ptr %a38 call void @finch.gen.condBr(ptr %t48, { ptr, i64, i64 } %t49, { ptr, i64, i64 } %t50, { ptr, i64, i64 } %t51) - br label %endif6654 -else6653: + br label %endif6658 +else6657: %t52 = load ptr, ptr %a1 %t53 = load { ptr, i64, i64 }, ptr %a29 %t54 = load { ptr, i64, i64 }, ptr %a38 %t55 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.condBr(ptr %t52, { ptr, i64, i64 } %t53, { ptr, i64, i64 } %t54, { ptr, i64, i64 } %t55) - br label %endif6654 -endif6654: + br label %endif6658 +endif6658: %t56 = load ptr, ptr %a1 %t57 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) @@ -66807,11 +66833,11 @@ endif6654: %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 1, %t61 - br i1 %t62, label %range6655, label %inrange6656 -range6655: + br i1 %t62, label %range6659, label %inrange6660 +range6659: call void @finch_panic_index(ptr @.str.4305, i64 3640, i64 1, i64 %t61) unreachable -inrange6656: +inrange6660: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 1 %t65 = load %S.ast.Node, ptr %t64 @@ -66838,14 +66864,14 @@ inrange6656: store { ptr, i64, i64 } { ptr @.str.4308, i64 2, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 - br i1 %t84, label %then6657, label %endif6659 -then6657: + br i1 %t84, label %then6661, label %endif6663 +then6661: %t85 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4309, i64 5, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t85, ptr %a86 call void @finch_str_drop(ptr %a86) - br label %endif6659 -endif6659: + br label %endif6663 +endif6663: %t87 = load ptr, ptr %a1 %t88 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4310, i64 9, i64 0 }, ptr %a90 @@ -66912,17 +66938,17 @@ endif6659: call void @finch_str_drop(ptr %a29) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t135 -endif6649: +endif6653: %t136 = load ptr, ptr %a1 %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t138 = load { ptr, i64, i64 }, ptr %t137 %t139 = extractvalue { ptr, i64, i64 } %t138, 1 %t140 = icmp uge i64 0, %t139 - br i1 %t140, label %range6660, label %inrange6661 -range6660: + br i1 %t140, label %range6664, label %inrange6665 +range6664: call void @finch_panic_index(ptr @.str.4316, i64 3652, i64 0, i64 %t139) unreachable -inrange6661: +inrange6665: %t141 = extractvalue { ptr, i64, i64 } %t138, 0 %t142 = getelementptr inbounds %S.ast.Node, ptr %t141, i64 0 %t143 = load %S.ast.Node, ptr %t142 @@ -66930,11 +66956,11 @@ inrange6661: store %S.gen.Val %t144, ptr %a145 %t146 = load ptr, ptr %a1 %t147 = icmp eq ptr %t146, null - br i1 %t147, label %panic6662, label %ok6663 -panic6662: + br i1 %t147, label %panic6666, label %ok6667 +panic6666: call void @finch_panic(ptr @.str.4317, i64 3653, ptr @.str.4318) unreachable -ok6663: +ok6667: %t148 = getelementptr inbounds %S.gen.Gen, ptr %t146, i32 0, i32 11 %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i32 0, i32 1 %t150 = load i64, ptr %t149 @@ -66947,11 +66973,11 @@ ok6663: %t156 = load { ptr, i64, i64 }, ptr %t155 %t157 = extractvalue { ptr, i64, i64 } %t156, 1 %t158 = icmp uge i64 1, %t157 - br i1 %t158, label %range6664, label %inrange6665 -range6664: + br i1 %t158, label %range6668, label %inrange6669 +range6668: call void @finch_panic_index(ptr @.str.4319, i64 3655, i64 1, i64 %t157) unreachable -inrange6665: +inrange6669: %t159 = extractvalue { ptr, i64, i64 } %t156, 0 %t160 = getelementptr inbounds %S.ast.Node, ptr %t159, i64 1 %t161 = load %S.ast.Node, ptr %t160 @@ -66965,78 +66991,78 @@ inrange6665: store { ptr, i64, i64 } { ptr @.str.4320, i64 2, i64 0 }, ptr %a168 %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) %t170 = icmp ne i32 %t169, 0 - br label %logic.from6666 -logic.from6666: - br i1 %t170, label %logic.end6668, label %logic.rhs6667 -logic.rhs6667: + br label %logic.from6670 +logic.from6670: + br i1 %t170, label %logic.end6672, label %logic.rhs6671 +logic.rhs6671: %t171 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.4321, i64 2, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 - br label %logic.rend6669 -logic.rend6669: - br label %logic.end6668 -logic.end6668: - %t176 = phi i1 [ true, %logic.from6666 ], [ %t175, %logic.rend6669 ] - br label %logic.from6670 -logic.from6670: - br i1 %t176, label %logic.end6672, label %logic.rhs6671 -logic.rhs6671: + br label %logic.rend6673 +logic.rend6673: + br label %logic.end6672 +logic.end6672: + %t176 = phi i1 [ true, %logic.from6670 ], [ %t175, %logic.rend6673 ] + br label %logic.from6674 +logic.from6674: + br i1 %t176, label %logic.end6676, label %logic.rhs6675 +logic.rhs6675: %t177 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t177, ptr %a178 store { ptr, i64, i64 } { ptr @.str.4322, i64 1, i64 0 }, ptr %a179 %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) %t181 = icmp ne i32 %t180, 0 - br label %logic.rend6673 -logic.rend6673: - br label %logic.end6672 -logic.end6672: - %t182 = phi i1 [ true, %logic.from6670 ], [ %t181, %logic.rend6673 ] - br label %logic.from6674 -logic.from6674: - br i1 %t182, label %logic.end6676, label %logic.rhs6675 -logic.rhs6675: + br label %logic.rend6677 +logic.rend6677: + br label %logic.end6676 +logic.end6676: + %t182 = phi i1 [ true, %logic.from6674 ], [ %t181, %logic.rend6677 ] + br label %logic.from6678 +logic.from6678: + br i1 %t182, label %logic.end6680, label %logic.rhs6679 +logic.rhs6679: %t183 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t183, ptr %a184 store { ptr, i64, i64 } { ptr @.str.4323, i64 2, i64 0 }, ptr %a185 %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) %t187 = icmp ne i32 %t186, 0 - br label %logic.rend6677 -logic.rend6677: - br label %logic.end6676 -logic.end6676: - %t188 = phi i1 [ true, %logic.from6674 ], [ %t187, %logic.rend6677 ] - br label %logic.from6678 -logic.from6678: - br i1 %t188, label %logic.end6680, label %logic.rhs6679 -logic.rhs6679: + br label %logic.rend6681 +logic.rend6681: + br label %logic.end6680 +logic.end6680: + %t188 = phi i1 [ true, %logic.from6678 ], [ %t187, %logic.rend6681 ] + br label %logic.from6682 +logic.from6682: + br i1 %t188, label %logic.end6684, label %logic.rhs6683 +logic.rhs6683: %t189 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t189, ptr %a190 store { ptr, i64, i64 } { ptr @.str.4324, i64 1, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 - br label %logic.rend6681 -logic.rend6681: - br label %logic.end6680 -logic.end6680: - %t194 = phi i1 [ true, %logic.from6678 ], [ %t193, %logic.rend6681 ] - br label %logic.from6682 -logic.from6682: - br i1 %t194, label %logic.end6684, label %logic.rhs6683 -logic.rhs6683: + br label %logic.rend6685 +logic.rend6685: + br label %logic.end6684 +logic.end6684: + %t194 = phi i1 [ true, %logic.from6682 ], [ %t193, %logic.rend6685 ] + br label %logic.from6686 +logic.from6686: + br i1 %t194, label %logic.end6688, label %logic.rhs6687 +logic.rhs6687: %t195 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t195, ptr %a196 store { ptr, i64, i64 } { ptr @.str.4325, i64 2, i64 0 }, ptr %a197 %t198 = call i32 @finch_str_eq(ptr %a196, ptr %a197) %t199 = icmp ne i32 %t198, 0 - br label %logic.rend6685 -logic.rend6685: - br label %logic.end6684 -logic.end6684: - %t200 = phi i1 [ true, %logic.from6682 ], [ %t199, %logic.rend6685 ] - br i1 %t200, label %then6686, label %endif6688 -then6686: + br label %logic.rend6689 +logic.rend6689: + br label %logic.end6688 +logic.end6688: + %t200 = phi i1 [ true, %logic.from6686 ], [ %t199, %logic.rend6689 ] + br i1 %t200, label %then6690, label %endif6692 +then6690: %t201 = load ptr, ptr %a1 %t202 = load { ptr, i64, i64 }, ptr %a8 %t203 = load %S.gen.Val, ptr %a145 @@ -67047,7 +67073,7 @@ then6686: call void @finch.drop.S_gen_Val(ptr %a145) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t206 -endif6688: +endif6692: %t207 = load ptr, ptr %a1 %t208 = load { ptr, i64, i64 }, ptr %a8 %t209 = load %S.gen.Val, ptr %a145 @@ -67200,17 +67226,17 @@ entry: store { ptr, i64, i64 } { ptr @.str.4327, i64 5, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 - br i1 %t11, label %then6689, label %else6690 -then6689: + br i1 %t11, label %then6693, label %else6694 +then6693: %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t13 = load { ptr, i64, i64 }, ptr %t12 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 0, %t14 - br i1 %t15, label %range6692, label %inrange6693 -range6692: + br i1 %t15, label %range6696, label %inrange6697 +range6696: call void @finch_panic_index(ptr @.str.4328, i64 3666, i64 0, i64 %t14) unreachable -inrange6693: +inrange6697: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i64 0 %t18 = load %S.ast.Type, ptr %t17 @@ -67221,43 +67247,43 @@ inrange6693: store %S.ast.Type %t21, ptr %a5 store %S.ast.Type %t22, ptr %a23 call void @finch.drop.S_ast_Type(ptr %a23) - br label %endif6691 -else6690: + br label %endif6695 +else6694: %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = icmp eq i64 %t26, 0 - br i1 %t27, label %then6694, label %endif6696 -then6694: + br i1 %t27, label %then6698, label %endif6700 +then6698: %t28 = load ptr, ptr %a1 %t29 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t28, %S.ast.Node %t29, { ptr, i64, i64 } { ptr @.str.4329, i64 47, i64 0 }) - br label %endif6696 -endif6696: - br label %endif6691 -endif6691: + br label %endif6700 +endif6700: + br label %endif6695 +endif6695: store { ptr, i64, i64 } zeroinitializer, ptr %a30 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null - br i1 %t32, label %panic6697, label %ok6698 -panic6697: + br i1 %t32, label %panic6701, label %ok6702 +panic6701: call void @finch_panic(ptr @.str.4330, i64 3671, ptr @.str.4331) unreachable -ok6698: +ok6702: %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 11 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 %t35 = load i64, ptr %t34 store i64 %t35, ptr %a36 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 store i64 0, ptr %a38 - br label %each.cond6699 -each.cond6699: + br label %each.cond6703 +each.cond6703: %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 %t40 = load i64, ptr %t39 %t41 = load i64, ptr %a38 %t42 = icmp slt i64 %t41, %t40 - br i1 %t42, label %each.body6700, label %each.end6702 -each.body6700: + br i1 %t42, label %each.body6704, label %each.end6706 +each.body6704: %t43 = load ptr, ptr %t37 %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 %t45 = load %S.ast.Node, ptr %t44 @@ -67269,8 +67295,8 @@ each.body6700: store { ptr, i64, i64 } { ptr @.str.4332, i64 4, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 - br i1 %t53, label %then6703, label %else6704 -then6703: + br i1 %t53, label %then6707, label %else6708 +then6707: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a46 %t56 = call %S.gen.Val @finch.gen.expr(ptr %t54, %S.ast.Node %t55) @@ -67287,8 +67313,8 @@ then6703: store %S.ast.Type %t63, ptr %a5 store %S.ast.Type %t64, ptr %a65 call void @finch.drop.S_ast_Type(ptr %a65) - br label %endif6705 -else6704: + br label %endif6709 +else6708: %t66 = load ptr, ptr %a1 %t67 = load %S.ast.Node, ptr %a46 %t68 = load %S.ast.Type, ptr %a5 @@ -67297,8 +67323,8 @@ else6704: store %S.gen.Val %t69, ptr %a47 store %S.gen.Val %t70, ptr %a71 call void @finch.drop.S_gen_Val(ptr %a71) - br label %endif6705 -endif6705: + br label %endif6709 +endif6709: %t72 = load ptr, ptr %a1 %t73 = load %S.gen.Val, ptr %a47 %t74 = load %S.ast.Type, ptr %a5 @@ -67326,11 +67352,11 @@ endif6705: %t91 = load { ptr, i64, i64 }, ptr %a30 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 - br i1 %t93, label %range6706, label %inrange6707 -range6706: + br i1 %t93, label %range6710, label %inrange6711 +range6710: call void @finch_panic_index(ptr @.str.4334, i64 3682, i64 %t90, i64 %t92) unreachable -inrange6707: +inrange6711: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 %t90 %t96 = load { ptr, i64, i64 }, ptr %t95 @@ -67348,13 +67374,13 @@ inrange6707: store %S.gen.Val %t106, ptr %a107 call void @finch.drop.S_gen_Val(ptr %a107) call void @finch.drop.S_gen_Val(ptr %a47) - br label %each.step6701 -each.step6701: + br label %each.step6705 +each.step6705: %t108 = load i64, ptr %a38 %t109 = add i64 %t108, 1 store i64 %t109, ptr %a38 - br label %each.cond6699 -each.end6702: + br label %each.cond6703 +each.end6706: %t110 = load ptr, ptr %a1 %t111 = load i64, ptr %a36 call void @finch.gen.heldEnd(ptr %t110, i64 %t111) @@ -67370,8 +67396,8 @@ each.end6702: %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t122 = load i64, ptr %t121 %t123 = icmp sgt i64 %t122, 0 - br i1 %t123, label %then6708, label %endif6710 -then6708: + br i1 %t123, label %then6712, label %endif6714 +then6712: %t124 = load ptr, ptr %a1 %t125 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } { ptr @.str.4336, i64 8, i64 0 }, ptr %a127 @@ -67419,17 +67445,17 @@ then6708: store { ptr, i64, i64 } %t160, ptr %a161 call void @finch_str_drop(ptr %a161) call void @finch_str_drop(ptr %a146) - br label %endif6710 -endif6710: + br label %endif6714 +endif6714: %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t163 = load i64, ptr %t162 store i64 0, ptr %a164 - br label %for.cond6711 -for.cond6711: + br label %for.cond6715 +for.cond6715: %t165 = load i64, ptr %a164 %t166 = icmp slt i64 %t165, %t163 - br i1 %t166, label %for.body6712, label %for.end6714 -for.body6712: + br i1 %t166, label %for.body6716, label %for.end6718 +for.body6716: %t167 = load ptr, ptr %a1 %t168 = load ptr, ptr %a1 %t169 = load %S.ast.Type, ptr %a5 @@ -67482,11 +67508,11 @@ for.body6712: %t209 = load { ptr, i64, i64 }, ptr %a30 %t210 = extractvalue { ptr, i64, i64 } %t209, 1 %t211 = icmp uge i64 %t208, %t210 - br i1 %t211, label %range6715, label %inrange6716 -range6715: + br i1 %t211, label %range6719, label %inrange6720 +range6719: call void @finch_panic_index(ptr @.str.4343, i64 3694, i64 %t208, i64 %t210) unreachable -inrange6716: +inrange6720: %t212 = extractvalue { ptr, i64, i64 } %t209, 0 %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t208 %t214 = load { ptr, i64, i64 }, ptr %t213 @@ -67495,13 +67521,13 @@ inrange6716: store { ptr, i64, i64 } %t207, ptr %a216 call void @finch_str_drop(ptr %a216) call void @finch_str_drop(ptr %a203) - br label %for.step6713 -for.step6713: + br label %for.step6717 +for.step6717: %t217 = load i64, ptr %a164 %t218 = add i64 %t217, 1 store i64 %t218, ptr %a164 - br label %for.cond6711 -for.end6714: + br label %for.cond6715 +for.end6718: %t219 = load ptr, ptr %a1 %t220 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } { ptr @.str.4344, i64 41, i64 0 }, ptr %a222 @@ -67639,22 +67665,22 @@ entry: store { ptr, i64, i64 } { ptr @.str.4352, i64 3, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br label %logic.from6717 -logic.from6717: - br i1 %t9, label %logic.rhs6718, label %logic.end6719 -logic.rhs6718: + br label %logic.from6721 +logic.from6721: + br i1 %t9, label %logic.rhs6722, label %logic.end6723 +logic.rhs6722: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) %t14 = icmp slt i64 %t13, 0 - br label %logic.rend6720 -logic.rend6720: - br label %logic.end6719 -logic.end6719: - %t15 = phi i1 [ false, %logic.from6717 ], [ %t14, %logic.rend6720 ] - br i1 %t15, label %then6721, label %endif6723 -then6721: + br label %logic.rend6724 +logic.rend6724: + br label %logic.end6723 +logic.end6723: + %t15 = phi i1 [ false, %logic.from6721 ], [ %t14, %logic.rend6724 ] + br i1 %t15, label %then6725, label %endif6727 +then6725: %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Node, ptr %a2 %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -67672,8 +67698,8 @@ then6721: call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } %t28) store { ptr, i64, i64 } %t28, ptr %a29 call void @finch_str_drop(ptr %a29) - br label %endif6723 -endif6723: + br label %endif6727 +endif6727: %t30 = load ptr, ptr %a1 %t31 = load %S.ast.Node, ptr %a2 %t32 = load i1, ptr %a3 @@ -67682,13 +67708,13 @@ endif6723: %t35 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 0 %t36 = load i1, ptr %t35 %t37 = xor i1 %t36, true - br i1 %t37, label %then6724, label %endif6726 -then6724: + br i1 %t37, label %then6728, label %endif6730 +then6728: %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t38, %S.ast.Node %t39, { ptr, i64, i64 } { ptr @.str.4355, i64 60, i64 0 }) - br label %endif6726 -endif6726: + br label %endif6730 +endif6730: %t40 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 1 %t41 = load %S.gen.Place, ptr %t40 store %S.gen.Place %t41, ptr %a42 @@ -67840,8 +67866,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.4356, i64 3, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br i1 %t9, label %then6727, label %endif6729 -then6727: + br i1 %t9, label %then6731, label %endif6733 +then6731: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 @@ -67849,17 +67875,17 @@ then6727: store i64 %t13, ptr %a14 %t15 = load i64, ptr %a14 %t16 = icmp slt i64 %t15, 0 - br label %logic.from6730 -logic.from6730: - br i1 %t16, label %logic.rhs6731, label %logic.end6732 -logic.rhs6731: + br label %logic.from6734 +logic.from6734: + br i1 %t16, label %logic.rhs6735, label %logic.end6736 +logic.rhs6735: %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null - br i1 %t18, label %panic6733, label %ok6734 -panic6733: + br i1 %t18, label %panic6737, label %ok6738 +panic6737: call void @finch_panic(ptr @.str.4357, i64 3718, ptr @.str.4358) unreachable -ok6734: +ok6738: %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 26 %t20 = getelementptr inbounds %S.cimport.CImports, ptr %t19, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -67867,20 +67893,20 @@ ok6734: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = call i64 @finch_map_find(ptr %t20, ptr %a23, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t25 = icmp sge i64 %t24, 0 - br label %logic.rend6735 -logic.rend6735: - br label %logic.end6732 -logic.end6732: - %t26 = phi i1 [ false, %logic.from6730 ], [ %t25, %logic.rend6735 ] - br i1 %t26, label %then6736, label %endif6738 -then6736: + br label %logic.rend6739 +logic.rend6739: + br label %logic.end6736 +logic.end6736: + %t26 = phi i1 [ false, %logic.from6734 ], [ %t25, %logic.rend6739 ] + br i1 %t26, label %then6740, label %endif6742 +then6740: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic6739, label %ok6740 -panic6739: + br i1 %t28, label %panic6743, label %ok6744 +panic6743: call void @finch_panic(ptr @.str.4359, i64 3719, ptr @.str.4360) unreachable -ok6740: +ok6744: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 26 %t30 = getelementptr inbounds %S.cimport.CImports, ptr %t29, i32 0, i32 1 %t31 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -67888,14 +67914,14 @@ ok6740: store { ptr, i64, i64 } %t32, ptr %a33 %t34 = call i64 @finch_map_find(ptr %t30, ptr %a33, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t35 = icmp slt i64 %t34, 0 - br i1 %t35, label %map.missing6741, label %map.found6742 -map.missing6741: + br i1 %t35, label %map.missing6745, label %map.found6746 +map.missing6745: store { ptr, i64, i64 } zeroinitializer, ptr %a36 store { ptr, i64, i64 } %t32, ptr %a37 call void @finch_buf_str(ptr %a36, ptr %a37, i32 1) call void @finch_map_missing(ptr @.str.4361, i64 3719, ptr %a36) unreachable -map.found6742: +map.found6746: %t38 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t30, i32 0, i32 0 %t39 = load ptr, ptr %t38 %t40 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t39, i64 %t34 @@ -67907,8 +67933,8 @@ map.found6742: store %S.cimport.CConst %t45, ptr %a46 %t47 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 0 %t48 = load i1, ptr %t47 - br i1 %t48, label %then6743, label %endif6745 -then6743: + br i1 %t48, label %then6747, label %endif6749 +then6747: %t49 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t50 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 3 %t51 = load { ptr, i64, i64 }, ptr %t50 @@ -67920,7 +67946,7 @@ then6743: %t57 = insertvalue %S.gen.Ref %t49, %S.gen.Val %t56, 2 call void @finch.drop.S_cimport_CConst(ptr %a46) ret %S.gen.Ref %t57 -endif6745: +endif6749: %t58 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t59 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 1 %t60 = load i64, ptr %t59 @@ -67933,20 +67959,20 @@ endif6745: %t67 = insertvalue %S.gen.Ref %t58, %S.gen.Val %t66, 2 call void @finch.drop.S_cimport_CConst(ptr %a46) ret %S.gen.Ref %t67 -endif6738: +endif6742: %t68 = load i64, ptr %a14 %t69 = icmp slt i64 %t68, 0 - br label %logic.from6746 -logic.from6746: - br i1 %t69, label %logic.rhs6747, label %logic.end6748 -logic.rhs6747: + br label %logic.from6750 +logic.from6750: + br i1 %t69, label %logic.rhs6751, label %logic.end6752 +logic.rhs6751: %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null - br i1 %t71, label %panic6749, label %ok6750 -panic6749: + br i1 %t71, label %panic6753, label %ok6754 +panic6753: call void @finch_panic(ptr @.str.4364, i64 3726, ptr @.str.4365) unreachable -ok6750: +ok6754: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 26 %t73 = getelementptr inbounds %S.cimport.CImports, ptr %t72, i32 0, i32 2 %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -67955,79 +67981,79 @@ ok6750: %t77 = call i64 @finch_map_find(ptr %t73, ptr %a76, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t78 = icmp sge i64 %t77, 0 %t79 = xor i1 %t78, true - br label %logic.rend6751 -logic.rend6751: - br label %logic.end6748 -logic.end6748: - %t80 = phi i1 [ false, %logic.from6746 ], [ %t79, %logic.rend6751 ] - br label %logic.from6752 -logic.from6752: - br i1 %t80, label %logic.rhs6753, label %logic.end6754 -logic.rhs6753: + br label %logic.rend6755 +logic.rend6755: + br label %logic.end6752 +logic.end6752: + %t80 = phi i1 [ false, %logic.from6750 ], [ %t79, %logic.rend6755 ] + br label %logic.from6756 +logic.from6756: + br i1 %t80, label %logic.rhs6757, label %logic.end6758 +logic.rhs6757: %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic6755, label %ok6756 -panic6755: + br i1 %t82, label %panic6759, label %ok6760 +panic6759: call void @finch_panic(ptr @.str.4366, i64 3726, ptr @.str.4367) unreachable -ok6756: +ok6760: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 26 %t84 = getelementptr inbounds %S.cimport.CImports, ptr %t83, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4368, i64 7, i64 0 }, ptr %a85 %t86 = call i64 @finch_map_find(ptr %t84, ptr %a85, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t87 = icmp sge i64 %t86, 0 - br label %logic.rend6757 -logic.rend6757: - br label %logic.end6754 -logic.end6754: - %t88 = phi i1 [ false, %logic.from6752 ], [ %t87, %logic.rend6757 ] - br label %logic.from6758 -logic.from6758: - br i1 %t88, label %logic.rhs6759, label %logic.end6760 -logic.rhs6759: + br label %logic.rend6761 +logic.rend6761: + br label %logic.end6758 +logic.end6758: + %t88 = phi i1 [ false, %logic.from6756 ], [ %t87, %logic.rend6761 ] + br label %logic.from6762 +logic.from6762: + br i1 %t88, label %logic.rhs6763, label %logic.end6764 +logic.rhs6763: %t89 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t90 = load { ptr, i64, i64 }, ptr %t89 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.4369, i64 5, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 - br label %logic.from6761 -logic.from6761: - br i1 %t94, label %logic.end6763, label %logic.rhs6762 -logic.rhs6762: + br label %logic.from6765 +logic.from6765: + br i1 %t94, label %logic.end6767, label %logic.rhs6766 +logic.rhs6766: %t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.4370, i64 6, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 - br label %logic.rend6764 -logic.rend6764: - br label %logic.end6763 -logic.end6763: - %t101 = phi i1 [ true, %logic.from6761 ], [ %t100, %logic.rend6764 ] - br label %logic.from6765 -logic.from6765: - br i1 %t101, label %logic.end6767, label %logic.rhs6766 -logic.rhs6766: + br label %logic.rend6768 +logic.rend6768: + br label %logic.end6767 +logic.end6767: + %t101 = phi i1 [ true, %logic.from6765 ], [ %t100, %logic.rend6768 ] + br label %logic.from6769 +logic.from6769: + br i1 %t101, label %logic.end6771, label %logic.rhs6770 +logic.rhs6770: %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 store { ptr, i64, i64 } { ptr @.str.4371, i64 6, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) %t107 = icmp ne i32 %t106, 0 - br label %logic.rend6768 -logic.rend6768: - br label %logic.end6767 -logic.end6767: - %t108 = phi i1 [ true, %logic.from6765 ], [ %t107, %logic.rend6768 ] - br label %logic.rend6769 -logic.rend6769: - br label %logic.end6760 -logic.end6760: - %t109 = phi i1 [ false, %logic.from6758 ], [ %t108, %logic.rend6769 ] - br i1 %t109, label %then6770, label %endif6772 -then6770: + br label %logic.rend6772 +logic.rend6772: + br label %logic.end6771 +logic.end6771: + %t108 = phi i1 [ true, %logic.from6769 ], [ %t107, %logic.rend6772 ] + br label %logic.rend6773 +logic.rend6773: + br label %logic.end6764 +logic.end6764: + %t109 = phi i1 [ false, %logic.from6762 ], [ %t108, %logic.rend6773 ] + br i1 %t109, label %then6774, label %endif6776 +then6774: store { ptr, i64, i64 } { ptr @.str.4372, i64 1, i64 0 }, ptr %a110 %t111 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t112 = load { ptr, i64, i64 }, ptr %t111 @@ -68035,30 +68061,30 @@ then6770: store { ptr, i64, i64 } { ptr @.str.4373, i64 5, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br i1 %t116, label %then6773, label %else6774 -then6773: + br i1 %t116, label %then6777, label %else6778 +then6777: %t117 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4374, i64 1, i64 0 }, ptr %a110 store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_drop(ptr %a118) - br label %endif6775 -else6774: + br label %endif6779 +else6778: %t119 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t120 = load { ptr, i64, i64 }, ptr %t119 store { ptr, i64, i64 } %t120, ptr %a121 store { ptr, i64, i64 } { ptr @.str.4375, i64 6, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) %t124 = icmp ne i32 %t123, 0 - br i1 %t124, label %then6776, label %endif6778 -then6776: + br i1 %t124, label %then6780, label %endif6782 +then6780: %t125 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4376, i64 1, i64 0 }, ptr %a110 store { ptr, i64, i64 } %t125, ptr %a126 call void @finch_str_drop(ptr %a126) - br label %endif6778 -endif6778: - br label %endif6775 -endif6775: + br label %endif6782 +endif6782: + br label %endif6779 +endif6779: %t127 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t128 = load ptr, ptr %a1 %t129 = load { ptr, i64, i64 }, ptr %a110 @@ -68081,20 +68107,20 @@ endif6775: %t144 = insertvalue %S.gen.Ref %t127, %S.gen.Val %t143, 2 call void @finch_str_drop(ptr %a110) ret %S.gen.Ref %t144 -endif6772: +endif6776: %t145 = load i64, ptr %a14 %t146 = icmp slt i64 %t145, 0 - br label %logic.from6779 -logic.from6779: - br i1 %t146, label %logic.rhs6780, label %logic.end6781 -logic.rhs6780: + br label %logic.from6783 +logic.from6783: + br i1 %t146, label %logic.rhs6784, label %logic.end6785 +logic.rhs6784: %t147 = load ptr, ptr %a1 %t148 = icmp eq ptr %t147, null - br i1 %t148, label %panic6782, label %ok6783 -panic6782: + br i1 %t148, label %panic6786, label %ok6787 +panic6786: call void @finch_panic(ptr @.str.4380, i64 3735, ptr @.str.4381) unreachable -ok6783: +ok6787: %t149 = getelementptr inbounds %S.gen.Gen, ptr %t147, i32 0, i32 26 %t150 = getelementptr inbounds %S.cimport.CImports, ptr %t149, i32 0, i32 2 %t151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68102,21 +68128,21 @@ ok6783: store { ptr, i64, i64 } %t152, ptr %a153 %t154 = call i64 @finch_map_find(ptr %t150, ptr %a153, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t155 = icmp sge i64 %t154, 0 - br label %logic.rend6784 -logic.rend6784: - br label %logic.end6781 -logic.end6781: - %t156 = phi i1 [ false, %logic.from6779 ], [ %t155, %logic.rend6784 ] - br i1 %t156, label %then6785, label %endif6787 -then6785: + br label %logic.rend6788 +logic.rend6788: + br label %logic.end6785 +logic.end6785: + %t156 = phi i1 [ false, %logic.from6783 ], [ %t155, %logic.rend6788 ] + br i1 %t156, label %then6789, label %endif6791 +then6789: %t157 = load ptr, ptr %a1 %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null - br i1 %t159, label %panic6788, label %ok6789 -panic6788: + br i1 %t159, label %panic6792, label %ok6793 +panic6792: call void @finch_panic(ptr @.str.4382, i64 3736, ptr @.str.4383) unreachable -ok6789: +ok6793: %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 26 %t161 = getelementptr inbounds %S.cimport.CImports, ptr %t160, i32 0, i32 2 %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68124,14 +68150,14 @@ ok6789: store { ptr, i64, i64 } %t163, ptr %a164 %t165 = call i64 @finch_map_find(ptr %t161, ptr %a164, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t166 = icmp slt i64 %t165, 0 - br i1 %t166, label %map.missing6790, label %map.found6791 -map.missing6790: + br i1 %t166, label %map.missing6794, label %map.found6795 +map.missing6794: store { ptr, i64, i64 } zeroinitializer, ptr %a167 store { ptr, i64, i64 } %t163, ptr %a168 call void @finch_buf_str(ptr %a167, ptr %a168, i32 1) call void @finch_map_missing(ptr @.str.4384, i64 3736, ptr %a167) unreachable -map.found6791: +map.found6795: %t169 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t161, i32 0, i32 0 %t170 = load ptr, ptr %t169 %t171 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t170, i64 %t165 @@ -68142,11 +68168,11 @@ map.found6791: store %S.ast.Type %t175, ptr %a176 %t177 = load ptr, ptr %a1 %t178 = icmp eq ptr %t177, null - br i1 %t178, label %panic6792, label %ok6793 -panic6792: + br i1 %t178, label %panic6796, label %ok6797 +panic6796: call void @finch_panic(ptr @.str.4385, i64 3737, ptr @.str.4386) unreachable -ok6793: +ok6797: %t179 = getelementptr inbounds %S.gen.Gen, ptr %t177, i32 0, i32 40 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t181 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68159,41 +68185,41 @@ ok6793: %t188 = load i64, ptr %t180 %t189 = load ptr, ptr %t179 store i64 0, ptr %a190 - br label %find.cond6794 -find.cond6794: + br label %find.cond6798 +find.cond6798: %t191 = load i64, ptr %a190 %t192 = icmp slt i64 %t191, %t188 - br i1 %t192, label %find.body6795, label %find.end6798 -find.body6795: + br i1 %t192, label %find.body6799, label %find.end6802 +find.body6799: %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t189, i64 %t191 %t194 = load { ptr, i64, i64 }, ptr %t193 store { ptr, i64, i64 } %t194, ptr %a195 store { ptr, i64, i64 } %t186, ptr %a196 %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) %t198 = icmp ne i32 %t197, 0 - br i1 %t198, label %find.hit6796, label %find.next6797 -find.hit6796: + br i1 %t198, label %find.hit6800, label %find.next6801 +find.hit6800: store i64 %t191, ptr %a187 - br label %find.end6798 -find.next6797: + br label %find.end6802 +find.next6801: %t199 = add i64 %t191, 1 store i64 %t199, ptr %a190 - br label %find.cond6794 -find.end6798: + br label %find.cond6798 +find.end6802: store { ptr, i64, i64 } %t186, ptr %a200 call void @finch_str_drop(ptr %a200) %t201 = load i64, ptr %a187 %t202 = icmp sge i64 %t201, 0 %t203 = xor i1 %t202, true - br i1 %t203, label %then6799, label %endif6801 -then6799: + br i1 %t203, label %then6803, label %endif6805 +then6803: %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null - br i1 %t205, label %panic6802, label %ok6803 -panic6802: + br i1 %t205, label %panic6806, label %ok6807 +panic6806: call void @finch_panic(ptr @.str.4388, i64 3738, ptr @.str.4389) unreachable -ok6803: +ok6807: %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 40 %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 %t208 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68211,11 +68237,11 @@ ok6803: store i64 %t215, ptr %t207 %t218 = load ptr, ptr %a1 %t219 = icmp eq ptr %t218, null - br i1 %t219, label %panic6804, label %ok6805 -panic6804: + br i1 %t219, label %panic6808, label %ok6809 +panic6808: call void @finch_panic(ptr @.str.4391, i64 3739, ptr @.str.4392) unreachable -ok6805: +ok6809: %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 2 %t221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t220, i32 0, i32 1 %t222 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68248,8 +68274,8 @@ ok6805: %t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i64 %t242 store { ptr, i64, i64 } %t241, ptr %t245 store i64 %t243, ptr %t221 - br label %endif6801 -endif6801: + br label %endif6805 +endif6805: %t246 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t247 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t248 = load { ptr, i64, i64 }, ptr %t247 @@ -68266,17 +68292,17 @@ endif6801: %t259 = insertvalue %S.gen.Ref %t246, %S.gen.Place %t258, 1 call void @finch.drop.S_ast_Type(ptr %a176) ret %S.gen.Ref %t259 -endif6787: +endif6791: %t260 = load i64, ptr %a14 %t261 = icmp slt i64 %t260, 0 - br i1 %t261, label %then6806, label %endif6808 -then6806: + br i1 %t261, label %then6810, label %endif6812 +then6810: %t262 = load ptr, ptr %a1 %t263 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = call i1 @finch.gen.imports(ptr %t262, { ptr, i64, i64 } %t264) - br i1 %t265, label %then6809, label %endif6811 -then6809: + br i1 %t265, label %then6813, label %endif6815 +then6813: %t266 = load ptr, ptr %a1 %t267 = load %S.ast.Node, ptr %a2 %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68308,8 +68334,8 @@ then6809: call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t290) store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_drop(ptr %a291) - br label %endif6811 -endif6811: + br label %endif6815 +endif6815: %t292 = load ptr, ptr %a1 %t293 = load %S.ast.Node, ptr %a2 %t294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68327,8 +68353,8 @@ endif6811: call void @finch.gen.fail(ptr %t292, %S.ast.Node %t293, { ptr, i64, i64 } %t304) store { ptr, i64, i64 } %t304, ptr %a305 call void @finch_str_drop(ptr %a305) - br label %endif6808 -endif6808: + br label %endif6812 +endif6812: %t306 = load ptr, ptr %a1 %t307 = load i64, ptr %a14 %t308 = call %S.gen.Var @finch.gen.varAt(ptr %t306, i64 %t307) @@ -68394,35 +68420,35 @@ endif6808: %t362 = insertvalue %S.gen.Ref %t349, %S.gen.Place %t361, 1 call void @finch.drop.S_gen_Var(ptr %a309) ret %S.gen.Ref %t362 -endif6729: +endif6733: %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t364 = load { ptr, i64, i64 }, ptr %t363 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.4404, i64 6, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 - br i1 %t368, label %then6812, label %endif6814 -then6812: + br i1 %t368, label %then6816, label %endif6818 +then6816: %t369 = load ptr, ptr %a1 %t370 = load %S.ast.Node, ptr %a2 %t371 = load i1, ptr %a3 %t372 = call %S.gen.Ref @finch.gen.member(ptr %t369, %S.ast.Node %t370, i1 %t371) ret %S.gen.Ref %t372 -endif6814: +endif6818: %t373 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t374 = load { ptr, i64, i64 }, ptr %t373 store { ptr, i64, i64 } %t374, ptr %a375 store { ptr, i64, i64 } { ptr @.str.4405, i64 5, i64 0 }, ptr %a376 %t377 = call i32 @finch_str_eq(ptr %a375, ptr %a376) %t378 = icmp ne i32 %t377, 0 - br i1 %t378, label %then6815, label %endif6817 -then6815: + br i1 %t378, label %then6819, label %endif6821 +then6819: %t379 = load ptr, ptr %a1 %t380 = load %S.ast.Node, ptr %a2 %t381 = load i1, ptr %a3 %t382 = call %S.gen.Ref @finch.gen.index(ptr %t379, %S.ast.Node %t380, i1 %t381) ret %S.gen.Ref %t382 -endif6817: +endif6821: %t383 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t384 = load ptr, ptr %a1 %t385 = load %S.ast.Node, ptr %a2 @@ -68481,8 +68507,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.4407, i64 1, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br i1 %t12, label %then6818, label %endif6820 -then6818: + br i1 %t12, label %then6822, label %endif6824 +then6822: %t13 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4408, i64 1, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 @@ -68492,16 +68518,16 @@ then6818: store { ptr, i64, i64 } %t17, ptr %a6 store { ptr, i64, i64 } %t18, ptr %a19 call void @finch_str_drop(ptr %a19) - br label %endif6820 -endif6820: + br label %endif6824 +endif6824: %t20 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.4410, i64 1, i64 0 }, ptr %a23 %t24 = call i64 @finch_str_find(ptr %a21, ptr %a23) %t25 = icmp sge i64 %t24, 0 %t26 = xor i1 %t25, true - br i1 %t26, label %then6821, label %endif6823 -then6821: + br i1 %t26, label %then6825, label %endif6827 +then6825: %t27 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.4412, i64 1, i64 0 }, ptr %a30 @@ -68509,19 +68535,19 @@ then6821: store i64 %t31, ptr %a32 %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, 0 - br i1 %t34, label %then6824, label %endif6826 -then6824: + br i1 %t34, label %then6828, label %endif6830 +then6828: %t35 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.4414, i64 1, i64 0 }, ptr %a38 %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) store i64 %t39, ptr %a32 - br label %endif6826 -endif6826: + br label %endif6830 +endif6830: %t40 = load i64, ptr %a32 %t41 = icmp slt i64 %t40, 0 - br i1 %t41, label %then6827, label %endif6829 -then6827: + br i1 %t41, label %then6831, label %endif6833 +then6831: %t42 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t42, ptr %a44 store { ptr, i64, i64 } { ptr @.str.4415, i64 2, i64 0 }, ptr %a45 @@ -68529,7 +68555,7 @@ then6827: %t46 = load { ptr, i64, i64 }, ptr %a43 call void @finch_str_drop(ptr %a6) ret { ptr, i64, i64 } %t46 -endif6829: +endif6833: %t47 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t47, ptr %a48 %t50 = load i64, ptr %a32 @@ -68558,7 +68584,7 @@ endif6829: %t69 = load { ptr, i64, i64 }, ptr %a64 call void @finch_str_drop(ptr %a6) ret { ptr, i64, i64 } %t69 -endif6823: +endif6827: %t70 = load { ptr, i64, i64 }, ptr %a6 ret { ptr, i64, i64 } %t70 } @@ -68581,56 +68607,56 @@ entry: store { ptr, i64, i64 } { ptr @.str.4419, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br label %logic.from6830 -logic.from6830: - br i1 %t8, label %logic.rhs6831, label %logic.end6832 -logic.rhs6831: + br label %logic.from6834 +logic.from6834: + br i1 %t8, label %logic.rhs6835, label %logic.end6836 +logic.rhs6835: %t9 = load ptr, ptr %a1 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) %t13 = icmp slt i64 %t12, 0 - br label %logic.rend6833 -logic.rend6833: - br label %logic.end6832 -logic.end6832: - %t14 = phi i1 [ false, %logic.from6830 ], [ %t13, %logic.rend6833 ] - br i1 %t14, label %then6834, label %endif6836 -then6834: + br label %logic.rend6837 +logic.rend6837: + br label %logic.end6836 +logic.end6836: + %t14 = phi i1 [ false, %logic.from6834 ], [ %t13, %logic.rend6837 ] + br i1 %t14, label %then6838, label %endif6840 +then6838: %t15 = load ptr, ptr %a1 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic6837, label %ok6838 -panic6837: + br i1 %t17, label %panic6841, label %ok6842 +panic6841: call void @finch_panic(ptr @.str.4420, i64 3784, ptr @.str.4421) unreachable -ok6838: +ok6842: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = call i64 @finch.gen.findEnum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) ret i64 %t22 -endif6836: +endif6840: %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4422, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br label %logic.from6839 -logic.from6839: - br i1 %t28, label %logic.rhs6840, label %logic.end6841 -logic.rhs6840: + br label %logic.from6843 +logic.from6843: + br i1 %t28, label %logic.rhs6844, label %logic.end6845 +logic.rhs6844: %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 - br i1 %t32, label %range6842, label %inrange6843 -range6842: + br i1 %t32, label %range6846, label %inrange6847 +range6846: call void @finch_panic_index(ptr @.str.4423, i64 3786, i64 0, i64 %t31) unreachable -inrange6843: +inrange6847: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 @@ -68639,72 +68665,72 @@ inrange6843: store { ptr, i64, i64 } { ptr @.str.4424, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br label %logic.rend6844 -logic.rend6844: - br label %logic.end6841 -logic.end6841: - %t41 = phi i1 [ false, %logic.from6839 ], [ %t40, %logic.rend6844 ] - br label %logic.from6845 -logic.from6845: - br i1 %t41, label %logic.rhs6846, label %logic.end6847 -logic.rhs6846: + br label %logic.rend6848 +logic.rend6848: + br label %logic.end6845 +logic.end6845: + %t41 = phi i1 [ false, %logic.from6843 ], [ %t40, %logic.rend6848 ] + br label %logic.from6849 +logic.from6849: + br i1 %t41, label %logic.rhs6850, label %logic.end6851 +logic.rhs6850: %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 - br i1 %t46, label %range6848, label %inrange6849 -range6848: + br i1 %t46, label %range6852, label %inrange6853 +range6852: call void @finch_panic_index(ptr @.str.4425, i64 3786, i64 0, i64 %t45) unreachable -inrange6849: +inrange6853: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) %t52 = icmp slt i64 %t51, 0 - br label %logic.rend6850 -logic.rend6850: - br label %logic.end6847 -logic.end6847: - %t53 = phi i1 [ false, %logic.from6845 ], [ %t52, %logic.rend6850 ] - br label %logic.from6851 -logic.from6851: - br i1 %t53, label %logic.rhs6852, label %logic.end6853 -logic.rhs6852: + br label %logic.rend6854 +logic.rend6854: + br label %logic.end6851 +logic.end6851: + %t53 = phi i1 [ false, %logic.from6849 ], [ %t52, %logic.rend6854 ] + br label %logic.from6855 +logic.from6855: + br i1 %t53, label %logic.rhs6856, label %logic.end6857 +logic.rhs6856: %t54 = load ptr, ptr %a1 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 - br i1 %t58, label %range6854, label %inrange6855 -range6854: + br i1 %t58, label %range6858, label %inrange6859 +range6858: call void @finch_panic_index(ptr @.str.4426, i64 3786, i64 0, i64 %t57) unreachable -inrange6855: +inrange6859: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) - br label %logic.rend6856 -logic.rend6856: - br label %logic.end6853 -logic.end6853: - %t64 = phi i1 [ false, %logic.from6851 ], [ %t63, %logic.rend6856 ] - br i1 %t64, label %then6857, label %endif6859 -then6857: + br label %logic.rend6860 +logic.rend6860: + br label %logic.end6857 +logic.end6857: + %t64 = phi i1 [ false, %logic.from6855 ], [ %t63, %logic.rend6860 ] + br i1 %t64, label %then6861, label %endif6863 +then6861: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 - br i1 %t69, label %range6860, label %inrange6861 -range6860: + br i1 %t69, label %range6864, label %inrange6865 +range6864: call void @finch_panic_index(ptr @.str.4427, i64 3787, i64 0, i64 %t68) unreachable -inrange6861: +inrange6865: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 @@ -68713,7 +68739,7 @@ inrange6861: %t75 = load { ptr, i64, i64 }, ptr %t74 %t76 = call i64 @finch.gen.findEnum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) ret i64 %t76 -endif6859: +endif6863: ret i64 -1 } @@ -68735,56 +68761,56 @@ entry: store { ptr, i64, i64 } { ptr @.str.4428, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br label %logic.from6862 -logic.from6862: - br i1 %t8, label %logic.rhs6863, label %logic.end6864 -logic.rhs6863: + br label %logic.from6866 +logic.from6866: + br i1 %t8, label %logic.rhs6867, label %logic.end6868 +logic.rhs6867: %t9 = load ptr, ptr %a1 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) %t13 = icmp slt i64 %t12, 0 - br label %logic.rend6865 -logic.rend6865: - br label %logic.end6864 -logic.end6864: - %t14 = phi i1 [ false, %logic.from6862 ], [ %t13, %logic.rend6865 ] - br i1 %t14, label %then6866, label %endif6868 -then6866: + br label %logic.rend6869 +logic.rend6869: + br label %logic.end6868 +logic.end6868: + %t14 = phi i1 [ false, %logic.from6866 ], [ %t13, %logic.rend6869 ] + br i1 %t14, label %then6870, label %endif6872 +then6870: %t15 = load ptr, ptr %a1 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic6869, label %ok6870 -panic6869: + br i1 %t17, label %panic6873, label %ok6874 +panic6873: call void @finch_panic(ptr @.str.4429, i64 3795, ptr @.str.4430) unreachable -ok6870: +ok6874: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = call i64 @finch.gen.findSum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) ret i64 %t22 -endif6868: +endif6872: %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4431, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br label %logic.from6871 -logic.from6871: - br i1 %t28, label %logic.rhs6872, label %logic.end6873 -logic.rhs6872: + br label %logic.from6875 +logic.from6875: + br i1 %t28, label %logic.rhs6876, label %logic.end6877 +logic.rhs6876: %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 - br i1 %t32, label %range6874, label %inrange6875 -range6874: + br i1 %t32, label %range6878, label %inrange6879 +range6878: call void @finch_panic_index(ptr @.str.4432, i64 3797, i64 0, i64 %t31) unreachable -inrange6875: +inrange6879: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 @@ -68793,72 +68819,72 @@ inrange6875: store { ptr, i64, i64 } { ptr @.str.4433, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br label %logic.rend6876 -logic.rend6876: - br label %logic.end6873 -logic.end6873: - %t41 = phi i1 [ false, %logic.from6871 ], [ %t40, %logic.rend6876 ] - br label %logic.from6877 -logic.from6877: - br i1 %t41, label %logic.rhs6878, label %logic.end6879 -logic.rhs6878: + br label %logic.rend6880 +logic.rend6880: + br label %logic.end6877 +logic.end6877: + %t41 = phi i1 [ false, %logic.from6875 ], [ %t40, %logic.rend6880 ] + br label %logic.from6881 +logic.from6881: + br i1 %t41, label %logic.rhs6882, label %logic.end6883 +logic.rhs6882: %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 - br i1 %t46, label %range6880, label %inrange6881 -range6880: + br i1 %t46, label %range6884, label %inrange6885 +range6884: call void @finch_panic_index(ptr @.str.4434, i64 3797, i64 0, i64 %t45) unreachable -inrange6881: +inrange6885: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) %t52 = icmp slt i64 %t51, 0 - br label %logic.rend6882 -logic.rend6882: - br label %logic.end6879 -logic.end6879: - %t53 = phi i1 [ false, %logic.from6877 ], [ %t52, %logic.rend6882 ] - br label %logic.from6883 -logic.from6883: - br i1 %t53, label %logic.rhs6884, label %logic.end6885 -logic.rhs6884: + br label %logic.rend6886 +logic.rend6886: + br label %logic.end6883 +logic.end6883: + %t53 = phi i1 [ false, %logic.from6881 ], [ %t52, %logic.rend6886 ] + br label %logic.from6887 +logic.from6887: + br i1 %t53, label %logic.rhs6888, label %logic.end6889 +logic.rhs6888: %t54 = load ptr, ptr %a1 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 - br i1 %t58, label %range6886, label %inrange6887 -range6886: + br i1 %t58, label %range6890, label %inrange6891 +range6890: call void @finch_panic_index(ptr @.str.4435, i64 3797, i64 0, i64 %t57) unreachable -inrange6887: +inrange6891: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) - br label %logic.rend6888 -logic.rend6888: - br label %logic.end6885 -logic.end6885: - %t64 = phi i1 [ false, %logic.from6883 ], [ %t63, %logic.rend6888 ] - br i1 %t64, label %then6889, label %endif6891 -then6889: + br label %logic.rend6892 +logic.rend6892: + br label %logic.end6889 +logic.end6889: + %t64 = phi i1 [ false, %logic.from6887 ], [ %t63, %logic.rend6892 ] + br i1 %t64, label %then6893, label %endif6895 +then6893: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 - br i1 %t69, label %range6892, label %inrange6893 -range6892: + br i1 %t69, label %range6896, label %inrange6897 +range6896: call void @finch_panic_index(ptr @.str.4436, i64 3798, i64 0, i64 %t68) unreachable -inrange6893: +inrange6897: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 @@ -68867,7 +68893,7 @@ inrange6893: %t75 = load { ptr, i64, i64 }, ptr %t74 %t76 = call i64 @finch.gen.findSum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) ret i64 %t76 -endif6891: +endif6895: ret i64 -1 } @@ -68918,21 +68944,21 @@ entry: store %S.ast.Node %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic6894, label %ok6895 -panic6894: + br i1 %t6, label %panic6898, label %ok6899 +panic6898: call void @finch_panic(ptr @.str.4437, i64 3804, ptr @.str.4438) unreachable -ok6895: +ok6899: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 22 %t8 = load i64, ptr %a2 %t9 = load { ptr, i64, i64 }, ptr %t7 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range6896, label %inrange6897 -range6896: + br i1 %t11, label %range6900, label %inrange6901 +range6900: call void @finch_panic_index(ptr @.str.4439, i64 3804, i64 %t8, i64 %t10) unreachable -inrange6897: +inrange6901: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.gen.SumDef, ptr %t12, i64 %t8 %t14 = load %S.gen.SumDef, ptr %t13 @@ -68947,33 +68973,33 @@ inrange6897: %t23 = load i64, ptr %t20 %t24 = load ptr, ptr %t19 store i64 0, ptr %a25 - br label %find.cond6898 -find.cond6898: + br label %find.cond6902 +find.cond6902: %t26 = load i64, ptr %a25 %t27 = icmp slt i64 %t26, %t23 - br i1 %t27, label %find.body6899, label %find.end6902 -find.body6899: + br i1 %t27, label %find.body6903, label %find.end6906 +find.body6903: %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } %t21, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br i1 %t33, label %find.hit6900, label %find.next6901 -find.hit6900: + br i1 %t33, label %find.hit6904, label %find.next6905 +find.hit6904: store i64 %t26, ptr %a22 - br label %find.end6902 -find.next6901: + br label %find.end6906 +find.next6905: %t34 = add i64 %t26, 1 store i64 %t34, ptr %a25 - br label %find.cond6898 -find.end6902: + br label %find.cond6902 +find.end6906: %t35 = load i64, ptr %a22 store i64 %t35, ptr %a36 %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, 0 - br i1 %t38, label %then6903, label %endif6905 -then6903: + br i1 %t38, label %then6907, label %endif6909 +then6907: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a4 %t41 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 1 @@ -69023,8 +69049,8 @@ then6903: call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } %t78, ptr %a79 call void @finch_str_drop(ptr %a79) - br label %endif6905 -endif6905: + br label %endif6909 +endif6909: %t80 = load i64, ptr %a36 call void @finch.drop.S_gen_SumDef(ptr %a18) ret i64 %t80 @@ -69135,21 +69161,21 @@ entry: store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic6906, label %ok6907 -panic6906: + br i1 %t7, label %panic6910, label %ok6911 +panic6910: call void @finch_panic(ptr @.str.4445, i64 3814, ptr @.str.4446) unreachable -ok6907: +ok6911: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 22 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range6908, label %inrange6909 -range6908: + br i1 %t12, label %range6912, label %inrange6913 +range6912: call void @finch_panic_index(ptr @.str.4447, i64 3814, i64 %t9, i64 %t11) unreachable -inrange6909: +inrange6913: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.SumDef, ptr %t13, i64 %t9 %t15 = load %S.gen.SumDef, ptr %t14 @@ -69170,33 +69196,33 @@ inrange6909: %t30 = load { ptr, i64, i64 }, ptr %t28 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 %t29, %t31 - br i1 %t32, label %range6910, label %inrange6911 -range6910: + br i1 %t32, label %range6914, label %inrange6915 +range6914: call void @finch_panic_index(ptr @.str.4448, i64 3816, i64 %t29, i64 %t31) unreachable -inrange6911: +inrange6915: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds i64, ptr %t33, i64 %t29 %t35 = load i64, ptr %t34 %t36 = icmp ne i64 %t27, %t35 - br i1 %t36, label %then6912, label %endif6914 -then6912: + br i1 %t36, label %then6916, label %endif6918 +then6916: %t37 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 %t38 = load i64, ptr %a25 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range6915, label %inrange6916 -range6915: + br i1 %t41, label %range6919, label %inrange6920 +range6919: call void @finch_panic_index(ptr @.str.4449, i64 3817, i64 %t38, i64 %t40) unreachable -inrange6916: +inrange6920: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i64, ptr %t42, i64 %t38 %t44 = load i64, ptr %t43 %t45 = icmp eq i64 %t44, 0 - br i1 %t45, label %then6917, label %endif6919 -then6917: + br i1 %t45, label %then6921, label %endif6923 +then6921: %t46 = load ptr, ptr %a1 %t47 = load %S.ast.Node, ptr %a5 %t48 = load { ptr, i64, i64 }, ptr %a3 @@ -69228,8 +69254,8 @@ then6917: call void @finch.gen.fail(ptr %t46, %S.ast.Node %t47, { ptr, i64, i64 } %t70) store { ptr, i64, i64 } %t70, ptr %a71 call void @finch_str_drop(ptr %a71) - br label %endif6919 -endif6919: + br label %endif6923 +endif6923: %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Node, ptr %a5 %t74 = load { ptr, i64, i64 }, ptr %a3 @@ -69242,11 +69268,11 @@ endif6919: %t81 = load { ptr, i64, i64 }, ptr %t79 %t82 = extractvalue { ptr, i64, i64 } %t81, 1 %t83 = icmp uge i64 %t80, %t82 - br i1 %t83, label %range6920, label %inrange6921 -range6920: + br i1 %t83, label %range6924, label %inrange6925 +range6924: call void @finch_panic_index(ptr @.str.4453, i64 3820, i64 %t80, i64 %t82) unreachable -inrange6921: +inrange6925: %t84 = extractvalue { ptr, i64, i64 } %t81, 0 %t85 = getelementptr inbounds i64, ptr %t84, i64 %t80 %t86 = load i64, ptr %t85 @@ -69314,8 +69340,8 @@ inrange6921: call void @finch.gen.fail(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t137) store { ptr, i64, i64 } %t137, ptr %a138 call void @finch_str_drop(ptr %a138) - br label %endif6914 -endif6914: + br label %endif6918 +endif6918: store { ptr, i64, i64 } zeroinitializer, ptr %a139 store { ptr, i64, i64 } zeroinitializer, ptr %a140 %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 @@ -69351,22 +69377,22 @@ endif6914: %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t166 = load i64, ptr %t165 store i64 0, ptr %a167 - br label %for.cond6922 -for.cond6922: + br label %for.cond6926 +for.cond6926: %t168 = load i64, ptr %a167 %t169 = icmp slt i64 %t168, %t166 - br i1 %t169, label %for.body6923, label %for.end6925 -for.body6923: + br i1 %t169, label %for.body6927, label %for.end6929 +for.body6927: %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 %t171 = load i64, ptr %a167 %t172 = load { ptr, i64, i64 }, ptr %a4 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 %t171, %t173 - br i1 %t174, label %range6926, label %inrange6927 -range6926: + br i1 %t174, label %range6930, label %inrange6931 +range6930: call void @finch_panic_index(ptr @.str.4460, i64 3827, i64 %t171, i64 %t173) unreachable -inrange6927: +inrange6931: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t171 %t177 = load %S.ast.Node, ptr %t176 @@ -69404,13 +69430,13 @@ inrange6927: %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 %t200 store { ptr, i64, i64 } %t199, ptr %t203 store i64 %t201, ptr %t185 - br label %for.step6924 -for.step6924: + br label %for.step6928 +for.step6928: %t204 = load i64, ptr %a167 %t205 = add i64 %t204, 1 store i64 %t205, ptr %a167 - br label %for.cond6922 -for.end6925: + br label %for.cond6926 +for.end6929: %t206 = load ptr, ptr %a1 %t207 = load %S.ast.Node, ptr %a5 %t208 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 @@ -69559,21 +69585,21 @@ entry: store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic6928, label %ok6929 -panic6928: + br i1 %t5, label %panic6932, label %ok6933 +panic6932: call void @finch_panic(ptr @.str.4466, i64 3836, ptr @.str.4467) unreachable -ok6929: +ok6933: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range6930, label %inrange6931 -range6930: + br i1 %t10, label %range6934, label %inrange6935 +range6934: call void @finch_panic_index(ptr @.str.4468, i64 3836, i64 %t7, i64 %t9) unreachable -inrange6931: +inrange6935: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.SumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.SumDef, ptr %t12 @@ -69589,22 +69615,22 @@ inrange6931: store { ptr, i64, i64 } { ptr @.str.4470, i64 3, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 - br label %logic.from6932 -logic.from6932: - br i1 %t25, label %logic.rhs6933, label %logic.end6934 -logic.rhs6933: + br label %logic.from6936 +logic.from6936: + br i1 %t25, label %logic.rhs6937, label %logic.end6938 +logic.rhs6937: %t26 = load ptr, ptr %a1 %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = call i64 @finch.gen.lookup(ptr %t26, { ptr, i64, i64 } %t28) %t30 = icmp slt i64 %t29, 0 - br label %logic.rend6935 -logic.rend6935: - br label %logic.end6934 -logic.end6934: - %t31 = phi i1 [ false, %logic.from6932 ], [ %t30, %logic.rend6935 ] - br i1 %t31, label %then6936, label %else6937 -then6936: + br label %logic.rend6939 +logic.rend6939: + br label %logic.end6938 +logic.end6938: + %t31 = phi i1 [ false, %logic.from6936 ], [ %t30, %logic.rend6939 ] + br i1 %t31, label %then6940, label %else6941 +then6940: %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 @@ -69614,16 +69640,16 @@ then6936: store { ptr, i64, i64 } %t36, ptr %a18 store { ptr, i64, i64 } %t37, ptr %a38 call void @finch_str_drop(ptr %a38) - br label %endif6938 -else6937: + br label %endif6942 +else6941: %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.4471, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %then6939, label %else6940 -then6939: + br i1 %t44, label %then6943, label %else6944 +then6943: %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t46 = load { ptr, i64, i64 }, ptr %t45 store { ptr, i64, i64 } %t46, ptr %a47 @@ -69642,41 +69668,41 @@ then6939: store { ptr, i64, i64 } %t56, ptr %a19 store { ptr, i64, i64 } %t57, ptr %a58 call void @finch.drop.arr_S_ast_Node(ptr %a58) - br label %endif6941 -else6940: + br label %endif6945 +else6944: %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.4472, i64 6, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 - br label %logic.from6942 -logic.from6942: - br i1 %t64, label %logic.rhs6943, label %logic.end6944 -logic.rhs6943: + br label %logic.from6946 +logic.from6946: + br i1 %t64, label %logic.rhs6947, label %logic.end6948 +logic.rhs6947: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 - br i1 %t69, label %range6945, label %inrange6946 -range6945: + br i1 %t69, label %range6949, label %inrange6950 +range6949: call void @finch_panic_index(ptr @.str.4473, i64 3844, i64 0, i64 %t68) unreachable -inrange6946: +inrange6950: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = load %S.ast.Node, ptr %t71 %t73 = call i64 @finch.gen.sumNamed(ptr %t65, %S.ast.Node %t72) %t74 = load i64, ptr %a3 %t75 = icmp eq i64 %t73, %t74 - br label %logic.rend6947 -logic.rend6947: - br label %logic.end6944 -logic.end6944: - %t76 = phi i1 [ false, %logic.from6942 ], [ %t75, %logic.rend6947 ] - br i1 %t76, label %then6948, label %else6949 -then6948: + br label %logic.rend6951 +logic.rend6951: + br label %logic.end6948 +logic.end6948: + %t76 = phi i1 [ false, %logic.from6946 ], [ %t75, %logic.rend6951 ] + br i1 %t76, label %then6952, label %else6953 +then6952: %t77 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t78 = load { ptr, i64, i64 }, ptr %t77 store { ptr, i64, i64 } %t78, ptr %a79 @@ -69686,41 +69712,41 @@ then6948: store { ptr, i64, i64 } %t81, ptr %a18 store { ptr, i64, i64 } %t82, ptr %a83 call void @finch_str_drop(ptr %a83) - br label %endif6950 -else6949: + br label %endif6954 +else6953: %t84 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.4474, i64 6, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 - br label %logic.from6951 -logic.from6951: - br i1 %t89, label %logic.rhs6952, label %logic.end6953 -logic.rhs6952: + br label %logic.from6955 +logic.from6955: + br i1 %t89, label %logic.rhs6956, label %logic.end6957 +logic.rhs6956: %t90 = load ptr, ptr %a1 %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t92 = load { ptr, i64, i64 }, ptr %t91 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 0, %t93 - br i1 %t94, label %range6954, label %inrange6955 -range6954: + br i1 %t94, label %range6958, label %inrange6959 +range6958: call void @finch_panic_index(ptr @.str.4475, i64 3846, i64 0, i64 %t93) unreachable -inrange6955: +inrange6959: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 0 %t97 = load %S.ast.Node, ptr %t96 %t98 = call i64 @finch.gen.sumNamed(ptr %t90, %S.ast.Node %t97) %t99 = load i64, ptr %a3 %t100 = icmp eq i64 %t98, %t99 - br label %logic.rend6956 -logic.rend6956: - br label %logic.end6953 -logic.end6953: - %t101 = phi i1 [ false, %logic.from6951 ], [ %t100, %logic.rend6956 ] - br i1 %t101, label %then6957, label %else6958 -then6957: + br label %logic.rend6960 +logic.rend6960: + br label %logic.end6957 +logic.end6957: + %t101 = phi i1 [ false, %logic.from6955 ], [ %t100, %logic.rend6960 ] + br i1 %t101, label %then6961, label %else6962 +then6961: %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 @@ -69734,23 +69760,23 @@ then6957: %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t109, i32 0, i32 1 %t111 = load i64, ptr %t110 store i64 1, ptr %a112 - br label %for.cond6960 -for.cond6960: + br label %for.cond6964 +for.cond6964: %t113 = load i64, ptr %a112 %t114 = icmp slt i64 %t113, %t111 - br i1 %t114, label %for.body6961, label %for.end6963 -for.body6961: + br i1 %t114, label %for.body6965, label %for.end6967 +for.body6965: %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t117 = load i64, ptr %a112 %t118 = load { ptr, i64, i64 }, ptr %t116 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 %t117, %t119 - br i1 %t120, label %range6964, label %inrange6965 -range6964: + br i1 %t120, label %range6968, label %inrange6969 +range6968: call void @finch_panic_index(ptr @.str.4476, i64 3849, i64 %t117, i64 %t119) unreachable -inrange6965: +inrange6969: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Node, ptr %t121, i64 %t117 %t123 = load %S.ast.Node, ptr %t122 @@ -69764,15 +69790,15 @@ inrange6965: %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 %t127 store %S.ast.Node %t126, ptr %t130 store i64 %t128, ptr %t115 - br label %for.step6962 -for.step6962: + br label %for.step6966 +for.step6966: %t131 = load i64, ptr %a112 %t132 = add i64 %t131, 1 store i64 %t132, ptr %a112 - br label %for.cond6960 -for.end6963: - br label %endif6959 -else6958: + br label %for.cond6964 +for.end6967: + br label %endif6963 +else6962: %t133 = load ptr, ptr %a1 %t134 = load %S.ast.Node, ptr %a2 %t135 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 1 @@ -69809,14 +69835,14 @@ else6958: call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } %t161) store { ptr, i64, i64 } %t161, ptr %a162 call void @finch_str_drop(ptr %a162) - br label %endif6959 -endif6959: - br label %endif6950 -endif6950: - br label %endif6941 -endif6941: - br label %endif6938 -endif6938: + br label %endif6963 +endif6963: + br label %endif6954 +endif6954: + br label %endif6945 +endif6945: + br label %endif6942 +endif6942: %t163 = load ptr, ptr %a1 %t164 = load i64, ptr %a3 %t165 = load { ptr, i64, i64 }, ptr %a18 @@ -69830,33 +69856,33 @@ endif6938: %t173 = load { ptr, i64, i64 }, ptr %t171 %t174 = extractvalue { ptr, i64, i64 } %t173, 1 %t175 = icmp uge i64 %t172, %t174 - br i1 %t175, label %range6966, label %inrange6967 -range6966: + br i1 %t175, label %range6970, label %inrange6971 +range6970: call void @finch_panic_index(ptr @.str.4481, i64 3855, i64 %t172, i64 %t174) unreachable -inrange6967: +inrange6971: %t176 = extractvalue { ptr, i64, i64 } %t173, 0 %t177 = getelementptr inbounds i64, ptr %t176, i64 %t172 %t178 = load i64, ptr %t177 %t179 = icmp ne i64 %t170, %t178 - br i1 %t179, label %then6968, label %endif6970 -then6968: + br i1 %t179, label %then6972, label %endif6974 +then6972: %t180 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 %t181 = load i64, ptr %a168 %t182 = load { ptr, i64, i64 }, ptr %t180 %t183 = extractvalue { ptr, i64, i64 } %t182, 1 %t184 = icmp uge i64 %t181, %t183 - br i1 %t184, label %range6971, label %inrange6972 -range6971: + br i1 %t184, label %range6975, label %inrange6976 +range6975: call void @finch_panic_index(ptr @.str.4482, i64 3856, i64 %t181, i64 %t183) unreachable -inrange6972: +inrange6976: %t185 = extractvalue { ptr, i64, i64 } %t182, 0 %t186 = getelementptr inbounds i64, ptr %t185, i64 %t181 %t187 = load i64, ptr %t186 %t188 = icmp eq i64 %t187, 0 - br i1 %t188, label %then6973, label %endif6975 -then6973: + br i1 %t188, label %then6977, label %endif6979 +then6977: %t189 = load ptr, ptr %a1 %t190 = load %S.ast.Node, ptr %a2 %t191 = load { ptr, i64, i64 }, ptr %a18 @@ -69874,8 +69900,8 @@ then6973: call void @finch.gen.fail(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t201) store { ptr, i64, i64 } %t201, ptr %a202 call void @finch_str_drop(ptr %a202) - br label %endif6975 -endif6975: + br label %endif6979 +endif6979: %t203 = load ptr, ptr %a1 %t204 = load %S.ast.Node, ptr %a2 %t205 = load { ptr, i64, i64 }, ptr %a18 @@ -69888,11 +69914,11 @@ endif6975: %t212 = load { ptr, i64, i64 }, ptr %t210 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 %t211, %t213 - br i1 %t214, label %range6976, label %inrange6977 -range6976: + br i1 %t214, label %range6980, label %inrange6981 +range6980: call void @finch_panic_index(ptr @.str.4485, i64 3859, i64 %t211, i64 %t213) unreachable -inrange6977: +inrange6981: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds i64, ptr %t215, i64 %t211 %t217 = load i64, ptr %t216 @@ -69928,17 +69954,17 @@ inrange6977: call void @finch.gen.fail(ptr %t203, %S.ast.Node %t204, { ptr, i64, i64 } %t241) store { ptr, i64, i64 } %t241, ptr %a242 call void @finch_str_drop(ptr %a242) - br label %endif6970 -endif6970: + br label %endif6974 +endif6974: store i64 0, ptr %a243 - br label %each.cond6978 -each.cond6978: + br label %each.cond6982 +each.cond6982: %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = load i64, ptr %a243 %t247 = icmp slt i64 %t246, %t245 - br i1 %t247, label %each.body6979, label %each.end6981 -each.body6979: + br i1 %t247, label %each.body6983, label %each.end6985 +each.body6983: %t248 = load ptr, ptr %a19 %t249 = getelementptr inbounds %S.ast.Node, ptr %t248, i64 %t246 %t250 = load %S.ast.Node, ptr %t249 @@ -69949,20 +69975,20 @@ each.body6979: store { ptr, i64, i64 } { ptr @.str.4488, i64 3, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp eq i32 %t256, 0 - br i1 %t257, label %then6982, label %endif6984 -then6982: + br i1 %t257, label %then6986, label %endif6988 +then6986: %t258 = load ptr, ptr %a1 %t259 = load %S.ast.Node, ptr %a251 call void @finch.gen.fail(ptr %t258, %S.ast.Node %t259, { ptr, i64, i64 } { ptr @.str.4489, i64 50, i64 0 }) - br label %endif6984 -endif6984: - br label %each.step6980 -each.step6980: + br label %endif6988 +endif6988: + br label %each.step6984 +each.step6984: %t260 = load i64, ptr %a243 %t261 = add i64 %t260, 1 store i64 %t261, ptr %a243 - br label %each.cond6978 -each.end6981: + br label %each.cond6982 +each.end6985: %t262 = load i64, ptr %a168 %t263 = insertvalue %S.gen.SumPat zeroinitializer, i64 %t262, 0 %t264 = load { ptr, i64, i64 }, ptr %a19 @@ -70052,21 +70078,21 @@ entry: store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic6985, label %ok6986 -panic6985: + br i1 %t5, label %panic6989, label %ok6990 +panic6989: call void @finch_panic(ptr @.str.4490, i64 3871, ptr @.str.4491) unreachable -ok6986: +ok6990: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range6987, label %inrange6988 -range6987: + br i1 %t10, label %range6991, label %inrange6992 +range6991: call void @finch_panic_index(ptr @.str.4492, i64 3871, i64 %t7, i64 %t9) unreachable -inrange6988: +inrange6992: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.EnumDef, ptr %t12 @@ -70082,33 +70108,33 @@ inrange6988: %t23 = load i64, ptr %t19 %t24 = load ptr, ptr %t18 store i64 0, ptr %a25 - br label %find.cond6989 -find.cond6989: + br label %find.cond6993 +find.cond6993: %t26 = load i64, ptr %a25 %t27 = icmp slt i64 %t26, %t23 - br i1 %t27, label %find.body6990, label %find.end6993 -find.body6990: + br i1 %t27, label %find.body6994, label %find.end6997 +find.body6994: %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } %t21, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br i1 %t33, label %find.hit6991, label %find.next6992 -find.hit6991: + br i1 %t33, label %find.hit6995, label %find.next6996 +find.hit6995: store i64 %t26, ptr %a22 - br label %find.end6993 -find.next6992: + br label %find.end6997 +find.next6996: %t34 = add i64 %t26, 1 store i64 %t34, ptr %a25 - br label %find.cond6989 -find.end6993: + br label %find.cond6993 +find.end6997: %t35 = load i64, ptr %a22 store i64 %t35, ptr %a36 %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, 0 - br i1 %t38, label %then6994, label %endif6996 -then6994: + br i1 %t38, label %then6998, label %endif7000 +then6998: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 %t41 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 @@ -70159,8 +70185,8 @@ then6994: call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t79) store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif6996 -endif6996: + br label %endif7000 +endif7000: %t81 = load ptr, ptr %a1 %t82 = load %S.ast.Node, ptr %a2 %t83 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 @@ -70200,11 +70226,11 @@ endif6996: %t114 = load { ptr, i64, i64 }, ptr %t112 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 %t113, %t115 - br i1 %t116, label %range6997, label %inrange6998 -range6997: + br i1 %t116, label %range7001, label %inrange7002 +range7001: call void @finch_panic_index(ptr @.str.4501, i64 3876, i64 %t113, i64 %t115) unreachable -inrange6998: +inrange7002: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds i64, ptr %t117, i64 %t113 %t119 = load i64, ptr %t118 @@ -70232,11 +70258,11 @@ inrange6998: %t136 = load { ptr, i64, i64 }, ptr %t134 %t137 = extractvalue { ptr, i64, i64 } %t136, 1 %t138 = icmp uge i64 %t135, %t137 - br i1 %t138, label %range6999, label %inrange7000 -range6999: + br i1 %t138, label %range7003, label %inrange7004 +range7003: call void @finch_panic_index(ptr @.str.4504, i64 3877, i64 %t135, i64 %t137) unreachable -inrange7000: +inrange7004: %t139 = extractvalue { ptr, i64, i64 } %t136, 0 %t140 = getelementptr inbounds i64, ptr %t139, i64 %t135 %t141 = load i64, ptr %t140 @@ -70610,11 +70636,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range7001, label %inrange7002 -range7001: + br i1 %t8, label %range7005, label %inrange7006 +range7005: call void @finch_panic_index(ptr @.str.4506, i64 3881, i64 0, i64 %t7) unreachable -inrange7002: +inrange7006: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -70622,16 +70648,16 @@ inrange7002: store i64 %t12, ptr %a13 %t14 = load i64, ptr %a13 %t15 = icmp sge i64 %t14, 0 - br i1 %t15, label %then7003, label %endif7005 -then7003: + br i1 %t15, label %then7007, label %endif7009 +then7007: %t16 = load i1, ptr %a3 - br i1 %t16, label %then7006, label %endif7008 -then7006: + br i1 %t16, label %then7010, label %endif7012 +then7010: %t17 = load ptr, ptr %a1 %t18 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t17, %S.ast.Node %t18, { ptr, i64, i64 } { ptr @.str.4507, i64 37, i64 0 }) - br label %endif7008 -endif7008: + br label %endif7012 +endif7012: %t19 = load ptr, ptr %a1 %t20 = load i64, ptr %a13 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -70641,21 +70667,21 @@ endif7008: store i64 %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic7009, label %ok7010 -panic7009: + br i1 %t27, label %panic7013, label %ok7014 +panic7013: call void @finch_panic(ptr @.str.4508, i64 3887, ptr @.str.4509) unreachable -ok7010: +ok7014: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 22 %t29 = load i64, ptr %a13 %t30 = load { ptr, i64, i64 }, ptr %t28 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 %t29, %t31 - br i1 %t32, label %range7011, label %inrange7012 -range7011: + br i1 %t32, label %range7015, label %inrange7016 +range7015: call void @finch_panic_index(ptr @.str.4510, i64 3887, i64 %t29, i64 %t31) unreachable -inrange7012: +inrange7016: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.gen.SumDef, ptr %t33, i64 %t29 %t35 = getelementptr inbounds %S.gen.SumDef, ptr %t34, i32 0, i32 3 @@ -70663,17 +70689,17 @@ inrange7012: %t37 = load { ptr, i64, i64 }, ptr %t35 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range7013, label %inrange7014 -range7013: + br i1 %t39, label %range7017, label %inrange7018 +range7017: call void @finch_panic_index(ptr @.str.4511, i64 3887, i64 %t36, i64 %t38) unreachable -inrange7014: +inrange7018: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds i64, ptr %t40, i64 %t36 %t42 = load i64, ptr %t41 %t43 = icmp sgt i64 %t42, 0 - br i1 %t43, label %then7015, label %endif7017 -then7015: + br i1 %t43, label %then7019, label %endif7021 +then7019: %t44 = load ptr, ptr %a1 %t45 = load %S.ast.Node, ptr %a2 %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -70684,21 +70710,21 @@ then7015: %t51 = load { ptr, i64, i64 }, ptr %a48 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic7018, label %ok7019 -panic7018: + br i1 %t53, label %panic7022, label %ok7023 +panic7022: call void @finch_panic(ptr @.str.4513, i64 3888, ptr @.str.4514) unreachable -ok7019: +ok7023: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 22 %t55 = load i64, ptr %a13 %t56 = load { ptr, i64, i64 }, ptr %t54 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 %t55, %t57 - br i1 %t58, label %range7020, label %inrange7021 -range7020: + br i1 %t58, label %range7024, label %inrange7025 +range7024: call void @finch_panic_index(ptr @.str.4515, i64 3888, i64 %t55, i64 %t57) unreachable -inrange7021: +inrange7025: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.gen.SumDef, ptr %t59, i64 %t55 %t61 = getelementptr inbounds %S.gen.SumDef, ptr %t60, i32 0, i32 3 @@ -70706,11 +70732,11 @@ inrange7021: %t63 = load { ptr, i64, i64 }, ptr %t61 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 - br i1 %t65, label %range7022, label %inrange7023 -range7022: + br i1 %t65, label %range7026, label %inrange7027 +range7026: call void @finch_panic_index(ptr @.str.4516, i64 3888, i64 %t62, i64 %t64) unreachable -inrange7023: +inrange7027: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i64, ptr %t66, i64 %t62 %t68 = load i64, ptr %t67 @@ -70732,21 +70758,21 @@ inrange7023: %t81 = load { ptr, i64, i64 }, ptr %a77 %t82 = load ptr, ptr %a1 %t83 = icmp eq ptr %t82, null - br i1 %t83, label %panic7024, label %ok7025 -panic7024: + br i1 %t83, label %panic7028, label %ok7029 +panic7028: call void @finch_panic(ptr @.str.4518, i64 3888, ptr @.str.4519) unreachable -ok7025: +ok7029: %t84 = getelementptr inbounds %S.gen.Gen, ptr %t82, i32 0, i32 22 %t85 = load i64, ptr %a13 %t86 = load { ptr, i64, i64 }, ptr %t84 %t87 = extractvalue { ptr, i64, i64 } %t86, 1 %t88 = icmp uge i64 %t85, %t87 - br i1 %t88, label %range7026, label %inrange7027 -range7026: + br i1 %t88, label %range7030, label %inrange7031 +range7030: call void @finch_panic_index(ptr @.str.4520, i64 3888, i64 %t85, i64 %t87) unreachable -inrange7027: +inrange7031: %t89 = extractvalue { ptr, i64, i64 } %t86, 0 %t90 = getelementptr inbounds %S.gen.SumDef, ptr %t89, i64 %t85 %t91 = getelementptr inbounds %S.gen.SumDef, ptr %t90, i32 0, i32 1 @@ -70780,8 +70806,8 @@ inrange7027: call void @finch.gen.fail(ptr %t44, %S.ast.Node %t45, { ptr, i64, i64 } %t114) store { ptr, i64, i64 } %t114, ptr %a115 call void @finch_str_drop(ptr %a115) - br label %endif7017 -endif7017: + br label %endif7021 +endif7021: store { ptr, i64, i64 } zeroinitializer, ptr %a116 %t117 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t118 = load ptr, ptr %a1 @@ -70794,17 +70820,17 @@ endif7017: %t125 = insertvalue %S.gen.Ref %t117, %S.gen.Val %t124, 2 call void @finch.drop.arr_S_ast_Node(ptr %a116) ret %S.gen.Ref %t125 -endif7005: +endif7009: %t126 = load ptr, ptr %a1 %t127 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t128 = load { ptr, i64, i64 }, ptr %t127 %t129 = extractvalue { ptr, i64, i64 } %t128, 1 %t130 = icmp uge i64 0, %t129 - br i1 %t130, label %range7028, label %inrange7029 -range7028: + br i1 %t130, label %range7032, label %inrange7033 +range7032: call void @finch_panic_index(ptr @.str.4523, i64 3893, i64 0, i64 %t129) unreachable -inrange7029: +inrange7033: %t131 = extractvalue { ptr, i64, i64 } %t128, 0 %t132 = getelementptr inbounds %S.ast.Node, ptr %t131, i64 0 %t133 = load %S.ast.Node, ptr %t132 @@ -70812,16 +70838,16 @@ inrange7029: store i64 %t134, ptr %a135 %t136 = load i64, ptr %a135 %t137 = icmp sge i64 %t136, 0 - br i1 %t137, label %then7030, label %endif7032 -then7030: + br i1 %t137, label %then7034, label %endif7036 +then7034: %t138 = load i1, ptr %a3 - br i1 %t138, label %then7033, label %endif7035 -then7033: + br i1 %t138, label %then7037, label %endif7039 +then7037: %t139 = load ptr, ptr %a1 %t140 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t139, %S.ast.Node %t140, { ptr, i64, i64 } { ptr @.str.4524, i64 37, i64 0 }) - br label %endif7035 -endif7035: + br label %endif7039 +endif7039: %t141 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t142 = load ptr, ptr %a1 %t143 = load %S.ast.Node, ptr %a2 @@ -70829,17 +70855,17 @@ endif7035: %t145 = call %S.gen.Val @finch.gen.enumValue(ptr %t142, %S.ast.Node %t143, i64 %t144) %t146 = insertvalue %S.gen.Ref %t141, %S.gen.Val %t145, 2 ret %S.gen.Ref %t146 -endif7032: +endif7036: %t147 = load ptr, ptr %a1 %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t149 = load { ptr, i64, i64 }, ptr %t148 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 0, %t150 - br i1 %t151, label %range7036, label %inrange7037 -range7036: + br i1 %t151, label %range7040, label %inrange7041 +range7040: call void @finch_panic_index(ptr @.str.4525, i64 3900, i64 0, i64 %t150) unreachable -inrange7037: +inrange7041: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 0 %t154 = load %S.ast.Node, ptr %t153 @@ -70855,8 +70881,8 @@ inrange7037: store %S.ast.Type %t163, ptr %a164 %t165 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t166 = load i1, ptr %t165 - br i1 %t166, label %then7038, label %endif7040 -then7038: + br i1 %t166, label %then7042, label %endif7044 +then7042: %t167 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t168 = getelementptr inbounds %S.gen.Place, ptr %t167, i32 0, i32 1 %t169 = load %S.ast.Type, ptr %t168 @@ -70867,16 +70893,16 @@ then7038: store %S.ast.Type %t172, ptr %a164 store %S.ast.Type %t173, ptr %a174 call void @finch.drop.S_ast_Type(ptr %a174) - br label %endif7040 -endif7040: + br label %endif7044 +endif7044: %t175 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t176 = load { ptr, i64, i64 }, ptr %t175 store { ptr, i64, i64 } %t176, ptr %a177 store { ptr, i64, i64 } { ptr @.str.4526, i64 3, i64 0 }, ptr %a178 %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) %t180 = icmp ne i32 %t179, 0 - br i1 %t180, label %then7041, label %endif7043 -then7041: + br i1 %t180, label %then7045, label %endif7047 +then7045: %t181 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t182 = getelementptr inbounds %S.gen.Val, ptr %t181, i32 0, i32 0 %t183 = load { ptr, i64, i64 }, ptr %t182 @@ -70886,8 +70912,8 @@ then7041: store { ptr, i64, i64 } %t186, ptr %a187 %t188 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t189 = load i1, ptr %t188 - br i1 %t189, label %then7044, label %endif7046 -then7044: + br i1 %t189, label %then7048, label %endif7050 +then7048: %t190 = load ptr, ptr %a1 %t191 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 0 @@ -70897,19 +70923,19 @@ then7044: store { ptr, i64, i64 } %t194, ptr %a187 store { ptr, i64, i64 } %t195, ptr %a196 call void @finch_str_drop(ptr %a196) - br label %endif7046 -endif7046: + br label %endif7050 +endif7050: %t197 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 %t199 = load i64, ptr %t198 %t200 = icmp eq i64 %t199, 0 - br i1 %t200, label %then7047, label %endif7049 -then7047: + br i1 %t200, label %then7051, label %endif7053 +then7051: %t201 = load ptr, ptr %a1 %t202 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t201, %S.ast.Node %t202, { ptr, i64, i64 } { ptr @.str.4528, i64 57, i64 0 }) - br label %endif7049 -endif7049: + br label %endif7053 +endif7053: %t203 = load ptr, ptr %a1 %t204 = load ptr, ptr %a1 %t205 = load { ptr, i64, i64 }, ptr %a187 @@ -70948,11 +70974,11 @@ endif7049: %t232 = load { ptr, i64, i64 }, ptr %t231 %t233 = extractvalue { ptr, i64, i64 } %t232, 1 %t234 = icmp uge i64 0, %t233 - br i1 %t234, label %range7050, label %inrange7051 -range7050: + br i1 %t234, label %range7054, label %inrange7055 +range7054: call void @finch_panic_index(ptr @.str.4533, i64 3914, i64 0, i64 %t233) unreachable -inrange7051: +inrange7055: %t235 = extractvalue { ptr, i64, i64 } %t232, 0 %t236 = getelementptr inbounds %S.ast.Type, ptr %t235, i64 0 %t237 = load %S.ast.Type, ptr %t236 @@ -70967,15 +70993,15 @@ inrange7051: store { ptr, i64, i64 } { ptr @.str.4534, i64 6, i64 0 }, ptr %a246 %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) %t248 = icmp ne i32 %t247, 0 - br i1 %t248, label %then7052, label %endif7054 -then7052: + br i1 %t248, label %then7056, label %endif7058 +then7056: %t249 = load ptr, ptr %a1 %t250 = icmp eq ptr %t249, null - br i1 %t250, label %panic7055, label %ok7056 -panic7055: + br i1 %t250, label %panic7059, label %ok7060 +panic7059: call void @finch_panic(ptr @.str.4535, i64 3917, ptr @.str.4536) unreachable -ok7056: +ok7060: %t251 = getelementptr inbounds %S.gen.Gen, ptr %t249, i32 0, i32 16 %t252 = load ptr, ptr %a1 %t253 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 3 @@ -70986,11 +71012,11 @@ ok7056: %t258 = load { ptr, i64, i64 }, ptr %t251 %t259 = extractvalue { ptr, i64, i64 } %t258, 1 %t260 = icmp uge i64 %t257, %t259 - br i1 %t260, label %range7057, label %inrange7058 -range7057: + br i1 %t260, label %range7061, label %inrange7062 +range7061: call void @finch_panic_index(ptr @.str.4537, i64 3917, i64 %t257, i64 %t259) unreachable -inrange7058: +inrange7062: %t261 = extractvalue { ptr, i64, i64 } %t258, 0 %t262 = getelementptr inbounds %S.gen.StructDef, ptr %t261, i64 %t257 %t263 = getelementptr inbounds %S.gen.StructDef, ptr %t262, i32 0, i32 11 @@ -70999,51 +71025,51 @@ inrange7058: %t266 = load i64, ptr %t264 %t267 = load ptr, ptr %t263 store i64 0, ptr %a268 - br label %find.cond7059 -find.cond7059: + br label %find.cond7063 +find.cond7063: %t269 = load i64, ptr %a268 %t270 = icmp slt i64 %t269, %t266 - br i1 %t270, label %find.body7060, label %find.end7063 -find.body7060: + br i1 %t270, label %find.body7064, label %find.end7067 +find.body7064: %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i64 %t269 %t272 = load { ptr, i64, i64 }, ptr %t271 store { ptr, i64, i64 } %t272, ptr %a273 store { ptr, i64, i64 } { ptr @.str.4538, i64 5, i64 0 }, ptr %a274 %t275 = call i32 @finch_str_eq(ptr %a273, ptr %a274) %t276 = icmp ne i32 %t275, 0 - br i1 %t276, label %find.hit7061, label %find.next7062 -find.hit7061: + br i1 %t276, label %find.hit7065, label %find.next7066 +find.hit7065: store i64 %t269, ptr %a265 - br label %find.end7063 -find.next7062: + br label %find.end7067 +find.next7066: %t277 = add i64 %t269, 1 store i64 %t277, ptr %a268 - br label %find.cond7059 -find.end7063: + br label %find.cond7063 +find.end7067: %t278 = load i64, ptr %a265 %t279 = icmp sge i64 %t278, 0 store i1 %t279, ptr %a242 - br label %endif7054 -endif7054: + br label %endif7058 +endif7058: %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t281 = load { ptr, i64, i64 }, ptr %t280 store { ptr, i64, i64 } %t281, ptr %a282 store { ptr, i64, i64 } { ptr @.str.4539, i64 5, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 - br label %logic.from7064 -logic.from7064: - br i1 %t285, label %logic.rhs7065, label %logic.end7066 -logic.rhs7065: + br label %logic.from7068 +logic.from7068: + br i1 %t285, label %logic.rhs7069, label %logic.end7070 +logic.rhs7069: %t286 = load i1, ptr %a242 %t287 = xor i1 %t286, true - br label %logic.rend7067 -logic.rend7067: - br label %logic.end7066 -logic.end7066: - %t288 = phi i1 [ false, %logic.from7064 ], [ %t287, %logic.rend7067 ] - br i1 %t288, label %then7068, label %endif7070 -then7068: + br label %logic.rend7071 +logic.rend7071: + br label %logic.end7070 +logic.end7070: + %t288 = phi i1 [ false, %logic.from7068 ], [ %t287, %logic.rend7071 ] + br i1 %t288, label %then7072, label %endif7074 +then7072: %t289 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t290 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t290, ptr %a291 @@ -71061,15 +71087,15 @@ then7068: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t300 -endif7070: +endif7074: %t301 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 %t302 = load { ptr, i64, i64 }, ptr %t301 store { ptr, i64, i64 } %t302, ptr %a303 store { ptr, i64, i64 } { ptr @.str.4540, i64 6, i64 0 }, ptr %a304 %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) %t306 = icmp eq i32 %t305, 0 - br i1 %t306, label %then7071, label %endif7073 -then7071: + br i1 %t306, label %then7075, label %endif7077 +then7075: %t307 = load ptr, ptr %a1 %t308 = load %S.ast.Node, ptr %a2 %t309 = load %S.ast.Type, ptr %a164 @@ -71089,8 +71115,8 @@ then7071: call void @finch.gen.fail(ptr %t307, %S.ast.Node %t308, { ptr, i64, i64 } %t320) store { ptr, i64, i64 } %t320, ptr %a321 call void @finch_str_drop(ptr %a321) - br label %endif7073 -endif7073: + br label %endif7077 +endif7077: %t322 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t323 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t323, ptr %a324 @@ -71117,19 +71143,19 @@ endif7073: call void @finch.drop.S_ast_Type(ptr %a341) call void @finch.drop.S_ast_Type(ptr %a241) call void @finch_str_drop(ptr %a187) - br label %endif7043 -endif7043: + br label %endif7047 +endif7047: %t342 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t343 = load { ptr, i64, i64 }, ptr %t342 store { ptr, i64, i64 } %t343, ptr %a344 store { ptr, i64, i64 } { ptr @.str.4543, i64 5, i64 0 }, ptr %a345 %t346 = call i32 @finch_str_eq(ptr %a344, ptr %a345) %t347 = icmp ne i32 %t346, 0 - br i1 %t347, label %then7074, label %endif7076 -then7074: + br i1 %t347, label %then7078, label %endif7080 +then7078: %t348 = load i1, ptr %a3 - br i1 %t348, label %then7077, label %endif7079 -then7077: + br i1 %t348, label %then7081, label %endif7083 +then7081: %t349 = load ptr, ptr %a1 %t350 = load %S.ast.Node, ptr %a2 %t351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -71147,16 +71173,16 @@ then7077: call void @finch.gen.fail(ptr %t349, %S.ast.Node %t350, { ptr, i64, i64 } %t361) store { ptr, i64, i64 } %t361, ptr %a362 call void @finch_str_drop(ptr %a362) - br label %endif7079 -endif7079: + br label %endif7083 +endif7083: %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t364 = load { ptr, i64, i64 }, ptr %t363 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.4546, i64 3, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 - br i1 %t368, label %then7080, label %endif7082 -then7080: + br i1 %t368, label %then7084, label %endif7086 +then7084: %t369 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t370 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 4 %t371 = load i64, ptr %t370 @@ -71170,15 +71196,15 @@ then7080: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t378 -endif7082: +endif7086: %t379 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t380 = load { ptr, i64, i64 }, ptr %t379 store { ptr, i64, i64 } %t380, ptr %a381 store { ptr, i64, i64 } { ptr @.str.4548, i64 3, i64 0 }, ptr %a382 %t383 = call i32 @finch_str_eq(ptr %a381, ptr %a382) %t384 = icmp eq i32 %t383, 0 - br i1 %t384, label %then7083, label %endif7085 -then7083: + br i1 %t384, label %then7087, label %endif7089 +then7087: %t385 = load ptr, ptr %a1 %t386 = load %S.ast.Node, ptr %a2 %t387 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -71196,18 +71222,18 @@ then7083: call void @finch.gen.fail(ptr %t385, %S.ast.Node %t386, { ptr, i64, i64 } %t397) store { ptr, i64, i64 } %t397, ptr %a398 call void @finch_str_drop(ptr %a398) - br label %endif7085 -endif7085: + br label %endif7089 +endif7089: %t399 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t400 = load i1, ptr %t399 %t401 = xor i1 %t400, true - br i1 %t401, label %then7086, label %endif7088 -then7086: + br i1 %t401, label %then7090, label %endif7092 +then7090: %t402 = load ptr, ptr %a1 %t403 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4551, i64 48, i64 0 }) - br label %endif7088 -endif7088: + br label %endif7092 +endif7092: %t404 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t405 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t406 = getelementptr inbounds %S.gen.Place, ptr %t405, i32 0, i32 0 @@ -71220,11 +71246,11 @@ endif7088: %t413 = load { ptr, i64, i64 }, ptr %t412 %t414 = extractvalue { ptr, i64, i64 } %t413, 1 %t415 = icmp uge i64 0, %t414 - br i1 %t415, label %range7089, label %inrange7090 -range7089: + br i1 %t415, label %range7093, label %inrange7094 +range7093: call void @finch_panic_index(ptr @.str.4552, i64 3941, i64 0, i64 %t414) unreachable -inrange7090: +inrange7094: %t416 = extractvalue { ptr, i64, i64 } %t413, 0 %t417 = getelementptr inbounds %S.ast.Type, ptr %t416, i64 0 %t418 = load %S.ast.Type, ptr %t417 @@ -71234,72 +71260,72 @@ inrange7090: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t421 -endif7076: +endif7080: %t422 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t423 = load { ptr, i64, i64 }, ptr %t422 store { ptr, i64, i64 } %t423, ptr %a424 store { ptr, i64, i64 } { ptr @.str.4553, i64 5, i64 0 }, ptr %a425 %t426 = call i32 @finch_str_eq(ptr %a424, ptr %a425) %t427 = icmp ne i32 %t426, 0 - br label %logic.from7091 -logic.from7091: - br i1 %t427, label %logic.end7093, label %logic.rhs7092 -logic.rhs7092: + br label %logic.from7095 +logic.from7095: + br i1 %t427, label %logic.end7097, label %logic.rhs7096 +logic.rhs7096: %t428 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t429 = load { ptr, i64, i64 }, ptr %t428 store { ptr, i64, i64 } %t429, ptr %a430 store { ptr, i64, i64 } { ptr @.str.4554, i64 3, i64 0 }, ptr %a431 %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) %t433 = icmp ne i32 %t432, 0 - br label %logic.rend7094 -logic.rend7094: - br label %logic.end7093 -logic.end7093: - %t434 = phi i1 [ true, %logic.from7091 ], [ %t433, %logic.rend7094 ] - br label %logic.from7095 -logic.from7095: - br i1 %t434, label %logic.rhs7096, label %logic.end7097 -logic.rhs7096: + br label %logic.rend7098 +logic.rend7098: + br label %logic.end7097 +logic.end7097: + %t434 = phi i1 [ true, %logic.from7095 ], [ %t433, %logic.rend7098 ] + br label %logic.from7099 +logic.from7099: + br i1 %t434, label %logic.rhs7100, label %logic.end7101 +logic.rhs7100: %t435 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t436 = load { ptr, i64, i64 }, ptr %t435 store { ptr, i64, i64 } %t436, ptr %a437 store { ptr, i64, i64 } { ptr @.str.4555, i64 3, i64 0 }, ptr %a438 %t439 = call i32 @finch_str_eq(ptr %a437, ptr %a438) %t440 = icmp ne i32 %t439, 0 - br label %logic.rend7098 -logic.rend7098: - br label %logic.end7097 -logic.end7097: - %t441 = phi i1 [ false, %logic.from7095 ], [ %t440, %logic.rend7098 ] - br i1 %t441, label %then7099, label %endif7101 -then7099: + br label %logic.rend7102 +logic.rend7102: + br label %logic.end7101 +logic.end7101: + %t441 = phi i1 [ false, %logic.from7099 ], [ %t440, %logic.rend7102 ] + br i1 %t441, label %then7103, label %endif7105 +then7103: %t442 = load i1, ptr %a3 - br i1 %t442, label %then7102, label %endif7104 -then7102: + br i1 %t442, label %then7106, label %endif7108 +then7106: %t443 = load ptr, ptr %a1 %t444 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t443, %S.ast.Node %t444, { ptr, i64, i64 } { ptr @.str.4556, i64 30, i64 0 }) - br label %endif7104 -endif7104: + br label %endif7108 +endif7108: %t445 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t446 = load i1, ptr %t445 %t447 = xor i1 %t446, true - br label %logic.from7105 -logic.from7105: - br i1 %t447, label %logic.rhs7106, label %logic.end7107 -logic.rhs7106: + br label %logic.from7109 +logic.from7109: + br i1 %t447, label %logic.rhs7110, label %logic.end7111 +logic.rhs7110: %t448 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t449 = getelementptr inbounds %S.gen.Val, ptr %t448, i32 0, i32 2 %t450 = load i1, ptr %t449 - br label %logic.rend7108 -logic.rend7108: - br label %logic.end7107 -logic.end7107: - %t451 = phi i1 [ false, %logic.from7105 ], [ %t450, %logic.rend7108 ] - br label %logic.from7109 -logic.from7109: - br i1 %t451, label %logic.rhs7110, label %logic.end7111 -logic.rhs7110: + br label %logic.rend7112 +logic.rend7112: + br label %logic.end7111 +logic.end7111: + %t451 = phi i1 [ false, %logic.from7109 ], [ %t450, %logic.rend7112 ] + br label %logic.from7113 +logic.from7113: + br i1 %t451, label %logic.rhs7114, label %logic.end7115 +logic.rhs7114: %t452 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t453 = getelementptr inbounds %S.gen.Val, ptr %t452, i32 0, i32 0 %t454 = load { ptr, i64, i64 }, ptr %t453 @@ -71307,18 +71333,18 @@ logic.rhs7110: store { ptr, i64, i64 } { ptr @.str.4558, i64 1, i64 0 }, ptr %a457 %t458 = call i32 @finch_str_starts(ptr %a455, ptr %a457) %t459 = icmp ne i32 %t458, 0 - br label %logic.rend7112 -logic.rend7112: - br label %logic.end7111 -logic.end7111: - %t460 = phi i1 [ false, %logic.from7109 ], [ %t459, %logic.rend7112 ] - br i1 %t460, label %then7113, label %endif7115 -then7113: + br label %logic.rend7116 +logic.rend7116: + br label %logic.end7115 +logic.end7115: + %t460 = phi i1 [ false, %logic.from7113 ], [ %t459, %logic.rend7116 ] + br i1 %t460, label %then7117, label %endif7119 +then7117: %t461 = load ptr, ptr %a1 %t462 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t461, %S.ast.Node %t462, { ptr, i64, i64 } { ptr @.str.4559, i64 53, i64 0 }) - br label %endif7115 -endif7115: + br label %endif7119 +endif7119: %t463 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t464 = getelementptr inbounds %S.gen.Val, ptr %t463, i32 0, i32 0 %t465 = load { ptr, i64, i64 }, ptr %t464 @@ -71328,8 +71354,8 @@ endif7115: store { ptr, i64, i64 } %t468, ptr %a469 %t470 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t471 = load i1, ptr %t470 - br i1 %t471, label %then7116, label %endif7118 -then7116: + br i1 %t471, label %then7120, label %endif7122 +then7120: %t472 = load ptr, ptr %a1 %t473 = load ptr, ptr %a1 %t474 = load %S.ast.Type, ptr %a164 @@ -71344,16 +71370,16 @@ then7116: store { ptr, i64, i64 } %t479, ptr %a469 store { ptr, i64, i64 } %t481, ptr %a482 call void @finch_str_drop(ptr %a482) - br label %endif7118 -endif7118: + br label %endif7122 +endif7122: %t483 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t484 = load { ptr, i64, i64 }, ptr %t483 store { ptr, i64, i64 } %t484, ptr %a485 store { ptr, i64, i64 } { ptr @.str.4560, i64 3, i64 0 }, ptr %a486 %t487 = call i32 @finch_str_eq(ptr %a485, ptr %a486) %t488 = icmp ne i32 %t487, 0 - br i1 %t488, label %then7119, label %endif7121 -then7119: + br i1 %t488, label %then7123, label %endif7125 +then7123: %t489 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t490 = load ptr, ptr %a1 %t491 = load { ptr, i64, i64 }, ptr %a469 @@ -71369,7 +71395,7 @@ then7119: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t498 -endif7121: +endif7125: %t499 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t500 = load ptr, ptr %a1 %t501 = load { ptr, i64, i64 }, ptr %a469 @@ -71391,11 +71417,11 @@ endif7121: %t515 = load { ptr, i64, i64 }, ptr %t514 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 0, %t516 - br i1 %t517, label %range7122, label %inrange7123 -range7122: + br i1 %t517, label %range7126, label %inrange7127 +range7126: call void @finch_panic_index(ptr @.str.4564, i64 3959, i64 0, i64 %t516) unreachable -inrange7123: +inrange7127: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 %t520 = load %S.ast.Type, ptr %t519 @@ -71406,53 +71432,53 @@ inrange7123: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t523 -endif7101: +endif7105: %t524 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t525 = load { ptr, i64, i64 }, ptr %t524 store { ptr, i64, i64 } %t525, ptr %a526 store { ptr, i64, i64 } { ptr @.str.4565, i64 5, i64 0 }, ptr %a527 %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) %t529 = icmp ne i32 %t528, 0 - br label %logic.from7124 -logic.from7124: - br i1 %t529, label %logic.end7126, label %logic.rhs7125 -logic.rhs7125: + br label %logic.from7128 +logic.from7128: + br i1 %t529, label %logic.end7130, label %logic.rhs7129 +logic.rhs7129: %t530 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t531 = load { ptr, i64, i64 }, ptr %t530 store { ptr, i64, i64 } %t531, ptr %a532 store { ptr, i64, i64 } { ptr @.str.4566, i64 3, i64 0 }, ptr %a533 %t534 = call i32 @finch_str_eq(ptr %a532, ptr %a533) %t535 = icmp ne i32 %t534, 0 - br label %logic.rend7127 -logic.rend7127: - br label %logic.end7126 -logic.end7126: - %t536 = phi i1 [ true, %logic.from7124 ], [ %t535, %logic.rend7127 ] - br label %logic.from7128 -logic.from7128: - br i1 %t536, label %logic.end7130, label %logic.rhs7129 -logic.rhs7129: + br label %logic.rend7131 +logic.rend7131: + br label %logic.end7130 +logic.end7130: + %t536 = phi i1 [ true, %logic.from7128 ], [ %t535, %logic.rend7131 ] + br label %logic.from7132 +logic.from7132: + br i1 %t536, label %logic.end7134, label %logic.rhs7133 +logic.rhs7133: %t537 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t538 = load { ptr, i64, i64 }, ptr %t537 store { ptr, i64, i64 } %t538, ptr %a539 store { ptr, i64, i64 } { ptr @.str.4567, i64 3, i64 0 }, ptr %a540 %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) %t542 = icmp ne i32 %t541, 0 - br label %logic.rend7131 -logic.rend7131: - br label %logic.end7130 -logic.end7130: - %t543 = phi i1 [ true, %logic.from7128 ], [ %t542, %logic.rend7131 ] - br i1 %t543, label %then7132, label %endif7134 -then7132: + br label %logic.rend7135 +logic.rend7135: + br label %logic.end7134 +logic.end7134: + %t543 = phi i1 [ true, %logic.from7132 ], [ %t542, %logic.rend7135 ] + br i1 %t543, label %then7136, label %endif7138 +then7136: %t544 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t545 = load { ptr, i64, i64 }, ptr %t544 store { ptr, i64, i64 } %t545, ptr %a546 store { ptr, i64, i64 } { ptr @.str.4568, i64 3, i64 0 }, ptr %a547 %t548 = call i32 @finch_str_eq(ptr %a546, ptr %a547) %t549 = icmp eq i32 %t548, 0 - br i1 %t549, label %then7135, label %endif7137 -then7135: + br i1 %t549, label %then7139, label %endif7141 +then7139: %t550 = load ptr, ptr %a1 %t551 = load %S.ast.Node, ptr %a2 %t552 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -71470,20 +71496,20 @@ then7135: call void @finch.gen.fail(ptr %t550, %S.ast.Node %t551, { ptr, i64, i64 } %t562) store { ptr, i64, i64 } %t562, ptr %a563 call void @finch_str_drop(ptr %a563) - br label %endif7137 -endif7137: + br label %endif7141 +endif7141: %t564 = load i1, ptr %a3 - br i1 %t564, label %then7138, label %endif7140 -then7138: + br i1 %t564, label %then7142, label %endif7144 +then7142: %t565 = load ptr, ptr %a1 %t566 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t565, %S.ast.Node %t566, { ptr, i64, i64 } { ptr @.str.4571, i64 48, i64 0 }) - br label %endif7140 -endif7140: + br label %endif7144 +endif7144: %t567 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t568 = load i1, ptr %t567 - br i1 %t568, label %then7141, label %endif7143 -then7141: + br i1 %t568, label %then7145, label %endif7147 +then7145: %t569 = load ptr, ptr %a1 %t570 = load ptr, ptr %a1 %t571 = load %S.ast.Type, ptr %a164 @@ -71531,7 +71557,7 @@ then7141: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t606 -endif7143: +endif7147: %t607 = load ptr, ptr %a1 %t608 = load ptr, ptr %a1 %t609 = load %S.ast.Type, ptr %a164 @@ -71584,15 +71610,15 @@ endif7143: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t648 -endif7134: +endif7138: %t649 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t650 = load { ptr, i64, i64 }, ptr %t649 store { ptr, i64, i64 } %t650, ptr %a651 store { ptr, i64, i64 } { ptr @.str.4581, i64 6, i64 0 }, ptr %a652 %t653 = call i32 @finch_str_eq(ptr %a651, ptr %a652) %t654 = icmp eq i32 %t653, 0 - br i1 %t654, label %then7144, label %endif7146 -then7144: + br i1 %t654, label %then7148, label %endif7150 +then7148: %t655 = load ptr, ptr %a1 %t656 = load %S.ast.Node, ptr %a2 %t657 = load %S.ast.Type, ptr %a164 @@ -71620,15 +71646,15 @@ then7144: call void @finch.gen.fail(ptr %t655, %S.ast.Node %t656, { ptr, i64, i64 } %t675) store { ptr, i64, i64 } %t675, ptr %a676 call void @finch_str_drop(ptr %a676) - br label %endif7146 -endif7146: + br label %endif7150 +endif7150: %t677 = load ptr, ptr %a1 %t678 = icmp eq ptr %t677, null - br i1 %t678, label %panic7147, label %ok7148 -panic7147: + br i1 %t678, label %panic7151, label %ok7152 +panic7151: call void @finch_panic(ptr @.str.4584, i64 3979, ptr @.str.4585) unreachable -ok7148: +ok7152: %t679 = getelementptr inbounds %S.gen.Gen, ptr %t677, i32 0, i32 16 %t680 = load ptr, ptr %a1 %t681 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 3 @@ -71639,11 +71665,11 @@ ok7148: %t686 = load { ptr, i64, i64 }, ptr %t679 %t687 = extractvalue { ptr, i64, i64 } %t686, 1 %t688 = icmp uge i64 %t685, %t687 - br i1 %t688, label %range7149, label %inrange7150 -range7149: + br i1 %t688, label %range7153, label %inrange7154 +range7153: call void @finch_panic_index(ptr @.str.4586, i64 3979, i64 %t685, i64 %t687) unreachable -inrange7150: +inrange7154: %t689 = extractvalue { ptr, i64, i64 } %t686, 0 %t690 = getelementptr inbounds %S.gen.StructDef, ptr %t689, i64 %t685 %t691 = load %S.gen.StructDef, ptr %t690 @@ -71659,33 +71685,33 @@ inrange7150: %t701 = load i64, ptr %t697 %t702 = load ptr, ptr %t696 store i64 0, ptr %a703 - br label %find.cond7151 -find.cond7151: + br label %find.cond7155 +find.cond7155: %t704 = load i64, ptr %a703 %t705 = icmp slt i64 %t704, %t701 - br i1 %t705, label %find.body7152, label %find.end7155 -find.body7152: + br i1 %t705, label %find.body7156, label %find.end7159 +find.body7156: %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 %t707 = load { ptr, i64, i64 }, ptr %t706 store { ptr, i64, i64 } %t707, ptr %a708 store { ptr, i64, i64 } %t699, ptr %a709 %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) %t711 = icmp ne i32 %t710, 0 - br i1 %t711, label %find.hit7153, label %find.next7154 -find.hit7153: + br i1 %t711, label %find.hit7157, label %find.next7158 +find.hit7157: store i64 %t704, ptr %a700 - br label %find.end7155 -find.next7154: + br label %find.end7159 +find.next7158: %t712 = add i64 %t704, 1 store i64 %t712, ptr %a703 - br label %find.cond7151 -find.end7155: + br label %find.cond7155 +find.end7159: %t713 = load i64, ptr %a700 store i64 %t713, ptr %a714 %t715 = load i64, ptr %a714 %t716 = icmp slt i64 %t715, 0 - br i1 %t716, label %then7156, label %endif7158 -then7156: + br i1 %t716, label %then7160, label %endif7162 +then7160: %t717 = load ptr, ptr %a1 %t718 = load %S.ast.Node, ptr %a2 %t719 = load %S.ast.Type, ptr %a164 @@ -71738,18 +71764,18 @@ then7156: call void @finch.gen.fail(ptr %t717, %S.ast.Node %t718, { ptr, i64, i64 } %t758) store { ptr, i64, i64 } %t758, ptr %a759 call void @finch_str_drop(ptr %a759) - br label %endif7158 -endif7158: + br label %endif7162 +endif7162: %t760 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 12 %t761 = load i64, ptr %a714 %t762 = load { ptr, i64, i64 }, ptr %t760 %t763 = extractvalue { ptr, i64, i64 } %t762, 1 %t764 = icmp uge i64 %t761, %t763 - br i1 %t764, label %range7159, label %inrange7160 -range7159: + br i1 %t764, label %range7163, label %inrange7164 +range7163: call void @finch_panic_index(ptr @.str.4592, i64 3984, i64 %t761, i64 %t763) unreachable -inrange7160: +inrange7164: %t765 = extractvalue { ptr, i64, i64 } %t762, 0 %t766 = getelementptr inbounds %S.ast.Type, ptr %t765, i64 %t761 %t767 = load %S.ast.Type, ptr %t766 @@ -71798,8 +71824,8 @@ inrange7160: call void @finch_str_drop(ptr %a804) %t805 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t806 = load i1, ptr %t805 - br i1 %t806, label %then7161, label %endif7163 -then7161: + br i1 %t806, label %then7165, label %endif7167 +then7165: %t807 = load ptr, ptr %a1 %t808 = load ptr, ptr %a1 %t809 = load %S.ast.Type, ptr %a164 @@ -71836,11 +71862,11 @@ then7161: %t836 = load { ptr, i64, i64 }, ptr %t834 %t837 = extractvalue { ptr, i64, i64 } %t836, 1 %t838 = icmp uge i64 %t835, %t837 - br i1 %t838, label %range7164, label %inrange7165 -range7164: + br i1 %t838, label %range7168, label %inrange7169 +range7168: call void @finch_panic_index(ptr @.str.4600, i64 3987, i64 %t835, i64 %t837) unreachable -inrange7165: +inrange7169: %t839 = extractvalue { ptr, i64, i64 } %t836, 0 %t840 = getelementptr inbounds i64, ptr %t839, i64 %t835 %t841 = load i64, ptr %t840 @@ -71876,7 +71902,7 @@ inrange7165: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t864 -endif7163: +endif7167: %t865 = load ptr, ptr %a1 %t866 = load ptr, ptr %a1 %t867 = load %S.ast.Type, ptr %a164 @@ -71913,11 +71939,11 @@ endif7163: %t894 = load { ptr, i64, i64 }, ptr %t892 %t895 = extractvalue { ptr, i64, i64 } %t894, 1 %t896 = icmp uge i64 %t893, %t895 - br i1 %t896, label %range7166, label %inrange7167 -range7166: + br i1 %t896, label %range7170, label %inrange7171 +range7170: call void @finch_panic_index(ptr @.str.4604, i64 3990, i64 %t893, i64 %t895) unreachable -inrange7167: +inrange7171: %t897 = extractvalue { ptr, i64, i64 } %t894, 0 %t898 = getelementptr inbounds i64, ptr %t897, i64 %t893 %t899 = load i64, ptr %t898 @@ -71949,20 +71975,20 @@ inrange7167: %t922 = load ptr, ptr %a1 %t923 = load %S.ast.Type, ptr %a771 %t924 = call i1 @finch.gen.owning(ptr %t922, %S.ast.Type %t923) - br label %logic.from7168 -logic.from7168: - br i1 %t924, label %logic.rhs7169, label %logic.end7170 -logic.rhs7169: + br label %logic.from7172 +logic.from7172: + br i1 %t924, label %logic.rhs7173, label %logic.end7174 +logic.rhs7173: %t925 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t926 = getelementptr inbounds %S.gen.Val, ptr %t925, i32 0, i32 2 %t927 = load i1, ptr %t926 - br label %logic.rend7171 -logic.rend7171: - br label %logic.end7170 -logic.end7170: - %t928 = phi i1 [ false, %logic.from7168 ], [ %t927, %logic.rend7171 ] - br i1 %t928, label %then7172, label %endif7174 -then7172: + br label %logic.rend7175 +logic.rend7175: + br label %logic.end7174 +logic.end7174: + %t928 = phi i1 [ false, %logic.from7172 ], [ %t927, %logic.rend7175 ] + br i1 %t928, label %then7176, label %endif7178 +then7176: %t929 = load ptr, ptr %a1 %t930 = load { ptr, i64, i64 }, ptr %a910 %t931 = load %S.ast.Type, ptr %a771 @@ -71978,8 +72004,8 @@ then7172: store %S.gen.Val %t939, ptr %a921 store %S.gen.Val %t940, ptr %a941 call void @finch.drop.S_gen_Val(ptr %a941) - br label %endif7174 -endif7174: + br label %endif7178 +endif7178: %t942 = load ptr, ptr %a1 %t943 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t944 = load %S.gen.Val, ptr %t943 @@ -72015,11 +72041,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range7175, label %inrange7176 -range7175: + br i1 %t8, label %range7179, label %inrange7180 +range7179: call void @finch_panic_index(ptr @.str.4605, i64 4000, i64 0, i64 %t7) unreachable -inrange7176: +inrange7180: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -72028,11 +72054,11 @@ inrange7176: store %S.gen.Ref %t13, ptr %a14 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic7177, label %ok7178 -panic7177: + br i1 %t16, label %panic7181, label %ok7182 +panic7181: call void @finch_panic(ptr @.str.4606, i64 4001, ptr @.str.4607) unreachable -ok7178: +ok7182: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 11 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 @@ -72040,14 +72066,14 @@ ok7178: %t21 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 %t22 = load i1, ptr %t21 %t23 = xor i1 %t22, true - br i1 %t23, label %then7179, label %endif7181 -then7179: + br i1 %t23, label %then7183, label %endif7185 +then7183: %t24 = load ptr, ptr %a1 %t25 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 %t26 = load %S.gen.Val, ptr %t25 call void @finch.gen.hold(ptr %t24, %S.gen.Val %t26) - br label %endif7181 -endif7181: + br label %endif7185 +endif7185: %t27 = load ptr, ptr %a1 %t28 = load %S.ast.Node, ptr %a2 %t29 = load %S.gen.Ref, ptr %a14 @@ -72247,8 +72273,8 @@ entry: store %S.ast.Type %t10, ptr %a11 %t12 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t13 = load i1, ptr %t12 - br i1 %t13, label %then7182, label %endif7184 -then7182: + br i1 %t13, label %then7186, label %endif7188 +then7186: %t14 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t15 = getelementptr inbounds %S.gen.Place, ptr %t14, i32 0, i32 1 %t16 = load %S.ast.Type, ptr %t15 @@ -72259,16 +72285,16 @@ then7182: store %S.ast.Type %t19, ptr %a11 store %S.ast.Type %t20, ptr %a21 call void @finch.drop.S_ast_Type(ptr %a21) - br label %endif7184 -endif7184: + br label %endif7188 +endif7188: %t22 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.4608, i64 3, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br i1 %t27, label %then7185, label %endif7187 -then7185: + br i1 %t27, label %then7189, label %endif7191 +then7189: %t28 = load ptr, ptr %a1 %t29 = load %S.ast.Node, ptr %a2 %t30 = load %S.gen.Ref, ptr %a3 @@ -72277,18 +72303,18 @@ then7185: %t33 = call %S.gen.Ref @finch.gen.mapIndex(ptr %t28, %S.ast.Node %t29, %S.gen.Ref %t30, %S.ast.Type %t31, i1 %t32) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t33 -endif7187: +endif7191: %t34 = load ptr, ptr %a1 %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 1, %t38 - br i1 %t39, label %range7188, label %inrange7189 -range7188: + br i1 %t39, label %range7192, label %inrange7193 +range7192: call void @finch_panic_index(ptr @.str.4609, i64 4018, i64 1, i64 %t38) unreachable -inrange7189: +inrange7193: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 %t42 = load %S.ast.Node, ptr %t41 @@ -72298,11 +72324,11 @@ inrange7189: %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 - br i1 %t48, label %range7190, label %inrange7191 -range7190: + br i1 %t48, label %range7194, label %inrange7195 +range7194: call void @finch_panic_index(ptr @.str.4611, i64 4018, i64 1, i64 %t47) unreachable -inrange7191: +inrange7195: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 @@ -72324,13 +72350,13 @@ inrange7191: store { ptr, i64, i64 } { ptr @.str.4613, i64 5, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 - br i1 %t66, label %then7192, label %endif7194 -then7192: + br i1 %t66, label %then7196, label %endif7198 +then7196: store { ptr, i64, i64 } { ptr @.str.4614, i64 0, i64 0 }, ptr %a67 %t68 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t69 = load i1, ptr %t68 - br i1 %t69, label %then7195, label %else7196 -then7195: + br i1 %t69, label %then7199, label %else7200 +then7199: %t70 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t71 = getelementptr inbounds %S.gen.Place, ptr %t70, i32 0, i32 0 %t72 = load { ptr, i64, i64 }, ptr %t71 @@ -72341,8 +72367,8 @@ then7195: store { ptr, i64, i64 } %t75, ptr %a67 store { ptr, i64, i64 } %t76, ptr %a77 call void @finch_str_drop(ptr %a77) - br label %endif7197 -else7196: + br label %endif7201 +else7200: %t78 = load ptr, ptr %a1 %t79 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t80 = load %S.gen.Val, ptr %t79 @@ -72351,8 +72377,8 @@ else7196: store { ptr, i64, i64 } %t81, ptr %a67 store { ptr, i64, i64 } %t82, ptr %a83 call void @finch_str_drop(ptr %a83) - br label %endif7197 -endif7197: + br label %endif7201 +endif7201: %t84 = load ptr, ptr %a1 %t85 = load { ptr, i64, i64 }, ptr %a60 %t86 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 4 @@ -72413,11 +72439,11 @@ endif7197: %t133 = load { ptr, i64, i64 }, ptr %t132 %t134 = extractvalue { ptr, i64, i64 } %t133, 1 %t135 = icmp uge i64 0, %t134 - br i1 %t135, label %range7198, label %inrange7199 -range7198: + br i1 %t135, label %range7202, label %inrange7203 +range7202: call void @finch_panic_index(ptr @.str.4618, i64 4028, i64 0, i64 %t134) unreachable -inrange7199: +inrange7203: %t136 = extractvalue { ptr, i64, i64 } %t133, 0 %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 0 %t138 = load %S.ast.Type, ptr %t137 @@ -72431,26 +72457,26 @@ inrange7199: call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t143 -endif7194: +endif7198: %t144 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t145 = load { ptr, i64, i64 }, ptr %t144 store { ptr, i64, i64 } %t145, ptr %a146 store { ptr, i64, i64 } { ptr @.str.4619, i64 3, i64 0 }, ptr %a147 %t148 = call i32 @finch_str_eq(ptr %a146, ptr %a147) %t149 = icmp ne i32 %t148, 0 - br i1 %t149, label %then7200, label %endif7202 -then7200: + br i1 %t149, label %then7204, label %endif7206 +then7204: %t150 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 %t152 = load i64, ptr %t151 %t153 = icmp eq i64 %t152, 0 - br i1 %t153, label %then7203, label %endif7205 -then7203: + br i1 %t153, label %then7207, label %endif7209 +then7207: %t154 = load ptr, ptr %a1 %t155 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } { ptr @.str.4620, i64 57, i64 0 }) - br label %endif7205 -endif7205: + br label %endif7209 +endif7209: %t156 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t157 = getelementptr inbounds %S.gen.Val, ptr %t156, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 @@ -72460,8 +72486,8 @@ endif7205: store { ptr, i64, i64 } %t161, ptr %a162 %t163 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t164 = load i1, ptr %t163 - br i1 %t164, label %then7206, label %endif7208 -then7206: + br i1 %t164, label %then7210, label %endif7212 +then7210: %t165 = load ptr, ptr %a1 %t166 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t167 = getelementptr inbounds %S.gen.Place, ptr %t166, i32 0, i32 0 @@ -72471,17 +72497,17 @@ then7206: store { ptr, i64, i64 } %t169, ptr %a162 store { ptr, i64, i64 } %t170, ptr %a171 call void @finch_str_drop(ptr %a171) - br label %endif7208 -endif7208: + br label %endif7212 +endif7212: %t172 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t173 = load { ptr, i64, i64 }, ptr %t172 %t174 = extractvalue { ptr, i64, i64 } %t173, 1 %t175 = icmp uge i64 0, %t174 - br i1 %t175, label %range7209, label %inrange7210 -range7209: + br i1 %t175, label %range7213, label %inrange7214 +range7213: call void @finch_panic_index(ptr @.str.4622, i64 4038, i64 0, i64 %t174) unreachable -inrange7210: +inrange7214: %t176 = extractvalue { ptr, i64, i64 } %t173, 0 %t177 = getelementptr inbounds %S.ast.Type, ptr %t176, i64 0 %t178 = load %S.ast.Type, ptr %t177 @@ -72541,30 +72567,30 @@ inrange7210: call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t223 -endif7202: +endif7206: %t224 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t225 = load { ptr, i64, i64 }, ptr %t224 store { ptr, i64, i64 } %t225, ptr %a226 store { ptr, i64, i64 } { ptr @.str.4626, i64 5, i64 0 }, ptr %a227 %t228 = call i32 @finch_str_eq(ptr %a226, ptr %a227) %t229 = icmp eq i32 %t228, 0 - br label %logic.from7211 -logic.from7211: - br i1 %t229, label %logic.rhs7212, label %logic.end7213 -logic.rhs7212: + br label %logic.from7215 +logic.from7215: + br i1 %t229, label %logic.rhs7216, label %logic.end7217 +logic.rhs7216: %t230 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t231 = load { ptr, i64, i64 }, ptr %t230 store { ptr, i64, i64 } %t231, ptr %a232 store { ptr, i64, i64 } { ptr @.str.4627, i64 3, i64 0 }, ptr %a233 %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) %t235 = icmp eq i32 %t234, 0 - br label %logic.rend7214 -logic.rend7214: - br label %logic.end7213 -logic.end7213: - %t236 = phi i1 [ false, %logic.from7211 ], [ %t235, %logic.rend7214 ] - br i1 %t236, label %then7215, label %endif7217 -then7215: + br label %logic.rend7218 +logic.rend7218: + br label %logic.end7217 +logic.end7217: + %t236 = phi i1 [ false, %logic.from7215 ], [ %t235, %logic.rend7218 ] + br i1 %t236, label %then7219, label %endif7221 +then7219: %t237 = load ptr, ptr %a1 %t238 = load %S.ast.Node, ptr %a2 %t239 = load %S.ast.Type, ptr %a11 @@ -72578,8 +72604,8 @@ then7215: call void @finch.gen.fail(ptr %t237, %S.ast.Node %t238, { ptr, i64, i64 } %t245) store { ptr, i64, i64 } %t245, ptr %a246 call void @finch_str_drop(ptr %a246) - br label %endif7217 -endif7217: + br label %endif7221 +endif7221: %t247 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4629, i64 4, i64 0 }) store %S.ast.Type %t247, ptr %a248 %t249 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 @@ -72588,17 +72614,17 @@ endif7217: store { ptr, i64, i64 } { ptr @.str.4630, i64 5, i64 0 }, ptr %a252 %t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252) %t254 = icmp ne i32 %t253, 0 - br i1 %t254, label %then7218, label %endif7220 -then7218: + br i1 %t254, label %then7222, label %endif7224 +then7222: %t255 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t256 = load { ptr, i64, i64 }, ptr %t255 %t257 = extractvalue { ptr, i64, i64 } %t256, 1 %t258 = icmp uge i64 0, %t257 - br i1 %t258, label %range7221, label %inrange7222 -range7221: + br i1 %t258, label %range7225, label %inrange7226 +range7225: call void @finch_panic_index(ptr @.str.4631, i64 4046, i64 0, i64 %t257) unreachable -inrange7222: +inrange7226: %t259 = extractvalue { ptr, i64, i64 } %t256, 0 %t260 = getelementptr inbounds %S.ast.Type, ptr %t259, i64 0 %t261 = load %S.ast.Type, ptr %t260 @@ -72609,36 +72635,36 @@ inrange7222: store %S.ast.Type %t264, ptr %a248 store %S.ast.Type %t265, ptr %a266 call void @finch.drop.S_ast_Type(ptr %a266) - br label %endif7220 -endif7220: + br label %endif7224 +endif7224: %t267 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t268 = load { ptr, i64, i64 }, ptr %t267 store { ptr, i64, i64 } %t268, ptr %a269 store { ptr, i64, i64 } { ptr @.str.4632, i64 3, i64 0 }, ptr %a270 %t271 = call i32 @finch_str_eq(ptr %a269, ptr %a270) %t272 = icmp ne i32 %t271, 0 - br label %logic.from7223 -logic.from7223: - br i1 %t272, label %logic.rhs7224, label %logic.end7225 -logic.rhs7224: + br label %logic.from7227 +logic.from7227: + br i1 %t272, label %logic.rhs7228, label %logic.end7229 +logic.rhs7228: %t273 = load i1, ptr %a4 - br label %logic.rend7226 -logic.rend7226: - br label %logic.end7225 -logic.end7225: - %t274 = phi i1 [ false, %logic.from7223 ], [ %t273, %logic.rend7226 ] - br i1 %t274, label %then7227, label %endif7229 -then7227: + br label %logic.rend7230 +logic.rend7230: + br label %logic.end7229 +logic.end7229: + %t274 = phi i1 [ false, %logic.from7227 ], [ %t273, %logic.rend7230 ] + br i1 %t274, label %then7231, label %endif7233 +then7231: %t275 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t276 = load i1, ptr %t275 %t277 = xor i1 %t276, true - br i1 %t277, label %then7230, label %endif7232 -then7230: + br i1 %t277, label %then7234, label %endif7236 +then7234: %t278 = load ptr, ptr %a1 %t279 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t278, %S.ast.Node %t279, { ptr, i64, i64 } { ptr @.str.4633, i64 44, i64 0 }) - br label %endif7232 -endif7232: + br label %endif7236 +endif7236: %t280 = load ptr, ptr %a1 %t281 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t282 = getelementptr inbounds %S.gen.Place, ptr %t281, i32 0, i32 0 @@ -72656,8 +72682,8 @@ endif7232: call void @finch.gen.emit(ptr %t280, { ptr, i64, i64 } %t292) store { ptr, i64, i64 } %t292, ptr %a293 call void @finch_str_drop(ptr %a293) - br label %endif7229 -endif7229: + br label %endif7233 +endif7233: %t294 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t295 = getelementptr inbounds %S.gen.Val, ptr %t294, i32 0, i32 0 %t296 = load { ptr, i64, i64 }, ptr %t295 @@ -72667,8 +72693,8 @@ endif7229: store { ptr, i64, i64 } %t299, ptr %a300 %t301 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t302 = load i1, ptr %t301 - br i1 %t302, label %then7233, label %endif7235 -then7233: + br i1 %t302, label %then7237, label %endif7239 +then7237: %t303 = load ptr, ptr %a1 %t304 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t305 = getelementptr inbounds %S.gen.Place, ptr %t304, i32 0, i32 0 @@ -72678,8 +72704,8 @@ then7233: store { ptr, i64, i64 } %t307, ptr %a300 store { ptr, i64, i64 } %t308, ptr %a309 call void @finch_str_drop(ptr %a309) - br label %endif7235 -endif7235: + br label %endif7239 +endif7239: %t310 = load ptr, ptr %a1 %t311 = load { ptr, i64, i64 }, ptr %a300 store { ptr, i64, i64 } { ptr @.str.4637, i64 31, i64 0 }, ptr %a313 @@ -72759,8 +72785,8 @@ endif7235: store { ptr, i64, i64 } %t373, ptr %a375 %t376 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t377 = load i1, ptr %t376 - br i1 %t377, label %then7236, label %endif7238 -then7236: + br i1 %t377, label %then7240, label %endif7242 +then7240: %t378 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t379 = load { ptr, i64, i64 }, ptr %a375 store { ptr, i64, i64 } %t379, ptr %a380 @@ -72781,7 +72807,7 @@ then7236: call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t389 -endif7238: +endif7242: %t390 = load ptr, ptr %a1 %t391 = load ptr, ptr %a1 %t392 = load %S.ast.Type, ptr %a248 @@ -72805,20 +72831,20 @@ endif7238: %t409 = load ptr, ptr %a1 %t410 = load %S.ast.Type, ptr %a248 %t411 = call i1 @finch.gen.owning(ptr %t409, %S.ast.Type %t410) - br label %logic.from7239 -logic.from7239: - br i1 %t411, label %logic.rhs7240, label %logic.end7241 -logic.rhs7240: + br label %logic.from7243 +logic.from7243: + br i1 %t411, label %logic.rhs7244, label %logic.end7245 +logic.rhs7244: %t412 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t413 = getelementptr inbounds %S.gen.Val, ptr %t412, i32 0, i32 2 %t414 = load i1, ptr %t413 - br label %logic.rend7242 -logic.rend7242: - br label %logic.end7241 -logic.end7241: - %t415 = phi i1 [ false, %logic.from7239 ], [ %t414, %logic.rend7242 ] - br i1 %t415, label %then7243, label %endif7245 -then7243: + br label %logic.rend7246 +logic.rend7246: + br label %logic.end7245 +logic.end7245: + %t415 = phi i1 [ false, %logic.from7243 ], [ %t414, %logic.rend7246 ] + br i1 %t415, label %then7247, label %endif7249 +then7247: %t416 = load ptr, ptr %a1 %t417 = load { ptr, i64, i64 }, ptr %a397 %t418 = load %S.ast.Type, ptr %a248 @@ -72834,8 +72860,8 @@ then7243: store %S.gen.Val %t426, ptr %a408 store %S.gen.Val %t427, ptr %a428 call void @finch.drop.S_gen_Val(ptr %a428) - br label %endif7245 -endif7245: + br label %endif7249 +endif7249: %t429 = load ptr, ptr %a1 %t430 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t431 = load %S.gen.Val, ptr %t430 @@ -72913,14 +72939,14 @@ entry: store i64 %t10, ptr %a11 %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 store i64 0, ptr %a13 - br label %each.cond7246 -each.cond7246: + br label %each.cond7250 +each.cond7250: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 - br i1 %t17, label %each.body7247, label %each.end7249 -each.body7247: + br i1 %t17, label %each.body7251, label %each.end7253 +each.body7251: %t18 = load ptr, ptr %t12 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 %t20 = load { ptr, i64, i64 }, ptr %t19 @@ -72928,8 +72954,8 @@ each.body7247: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp sgt i64 %t23, 0 - br i1 %t24, label %then7250, label %endif7252 -then7250: + br i1 %t24, label %then7254, label %endif7256 +then7254: %t25 = load ptr, ptr %a1 %t26 = load %S.ast.Node, ptr %a2 %t27 = load { ptr, i64, i64 }, ptr %a21 @@ -72946,20 +72972,20 @@ then7250: call void @finch.gen.fail(ptr %t25, %S.ast.Node %t26, { ptr, i64, i64 } %t36) store { ptr, i64, i64 } %t36, ptr %a37 call void @finch_str_drop(ptr %a37) - br label %endif7252 -endif7252: - br label %each.step7248 -each.step7248: + br label %endif7256 +endif7256: + br label %each.step7252 +each.step7252: %t38 = load i64, ptr %a13 %t39 = add i64 %t38, 1 store i64 %t39, ptr %a13 - br label %each.cond7246 -each.end7249: + br label %each.cond7250 +each.end7253: %t40 = load i64, ptr %a11 %t41 = load i64, ptr %a4 %t42 = icmp ne i64 %t40, %t41 - br i1 %t42, label %then7253, label %endif7255 -then7253: + br i1 %t42, label %then7257, label %endif7259 +then7257: %t43 = load ptr, ptr %a1 %t44 = load %S.ast.Node, ptr %a2 %t45 = load { ptr, i64, i64 }, ptr %a5 @@ -73004,8 +73030,8 @@ then7253: call void @finch.gen.fail(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t77) store { ptr, i64, i64 } %t77, ptr %a78 call void @finch_str_drop(ptr %a78) - br label %endif7255 -endif7255: + br label %endif7259 +endif7259: ret void } @@ -73063,19 +73089,19 @@ entry: store { ptr, i64, i64 } { ptr @.str.4651, i64 3, i64 0 }, ptr %a4 %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) %t6 = icmp ne i32 %t5, 0 - br i1 %t6, label %then7256, label %endif7258 -then7256: + br i1 %t6, label %then7260, label %endif7262 +then7260: ret { ptr, i64, i64 } { ptr @.str.4652, i64 3, i64 0 } -endif7258: +endif7262: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4653, i64 3, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 - br i1 %t11, label %then7259, label %endif7261 -then7259: + br i1 %t11, label %then7263, label %endif7265 +then7263: ret { ptr, i64, i64 } { ptr @.str.4654, i64 5, i64 0 } -endif7261: +endif7265: %t12 = mul i64 13, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t13 = call ptr @finch_alloc(i64 %t12) %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 0 @@ -73114,38 +73140,38 @@ endif7261: %t34 = load i64, ptr %t31 %t35 = load ptr, ptr %a30 store i64 0, ptr %a36 - br label %find.cond7262 -find.cond7262: + br label %find.cond7266 +find.cond7266: %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, %t34 - br i1 %t38, label %find.body7263, label %find.end7266 -find.body7263: + br i1 %t38, label %find.body7267, label %find.end7270 +find.body7267: %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t37 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } %t32, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %find.hit7264, label %find.next7265 -find.hit7264: + br i1 %t44, label %find.hit7268, label %find.next7269 +find.hit7268: store i64 %t37, ptr %a33 - br label %find.end7266 -find.next7265: + br label %find.end7270 +find.next7269: %t45 = add i64 %t37, 1 store i64 %t45, ptr %a36 - br label %find.cond7262 -find.end7266: + br label %find.cond7266 +find.end7270: %t46 = load i64, ptr %a33 %t47 = icmp sge i64 %t46, 0 - br i1 %t47, label %then7267, label %endif7269 -then7267: + br i1 %t47, label %then7271, label %endif7273 +then7271: %t48 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t48, ptr %a49 call void @finch_str_copy(ptr %a50, ptr %a49) %t51 = load { ptr, i64, i64 }, ptr %a50 call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } %t51 -endif7269: +endif7273: call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } { ptr @.str.4668, i64 0, i64 0 } } @@ -73466,11 +73492,11 @@ entry: %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 0, %t11 - br i1 %t12, label %range7270, label %inrange7271 -range7270: + br i1 %t12, label %range7274, label %inrange7275 +range7274: call void @finch_panic_index(ptr @.str.4669, i64 4116, i64 0, i64 %t11) unreachable -inrange7271: +inrange7275: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.ast.Node, ptr %t13, i64 0 %t15 = load %S.ast.Node, ptr %t14 @@ -73485,40 +73511,40 @@ inrange7271: %t24 = load %S.ast.Type, ptr %a23 %t25 = load %S.ast.Type, ptr %a3 %t26 = call i1 @finch.ast.same(%S.ast.Type %t24, %S.ast.Type %t25) - br i1 %t26, label %then7272, label %endif7274 -then7272: + br i1 %t26, label %then7276, label %endif7278 +then7276: %t27 = load %S.gen.Val, ptr %a17 call void @finch.drop.S_ast_Type(ptr %a23) ret %S.gen.Val %t27 -endif7274: +endif7278: %t28 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.4670, i64 3, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br label %logic.from7275 -logic.from7275: - br i1 %t33, label %logic.rhs7276, label %logic.end7277 -logic.rhs7276: - %t34 = load %S.ast.Type, ptr %a3 - %t35 = call i1 @finch.gen.isNumber(%S.ast.Type %t34) - br label %logic.rend7278 -logic.rend7278: - br label %logic.end7277 -logic.end7277: - %t36 = phi i1 [ false, %logic.from7275 ], [ %t35, %logic.rend7278 ] br label %logic.from7279 logic.from7279: - br i1 %t36, label %logic.rhs7280, label %logic.end7281 + br i1 %t33, label %logic.rhs7280, label %logic.end7281 logic.rhs7280: + %t34 = load %S.ast.Type, ptr %a3 + %t35 = call i1 @finch.gen.isNumber(%S.ast.Type %t34) + br label %logic.rend7282 +logic.rend7282: + br label %logic.end7281 +logic.end7281: + %t36 = phi i1 [ false, %logic.from7279 ], [ %t35, %logic.rend7282 ] + br label %logic.from7283 +logic.from7283: + br i1 %t36, label %logic.rhs7284, label %logic.end7285 +logic.rhs7284: %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null - br i1 %t38, label %panic7282, label %ok7283 -panic7282: + br i1 %t38, label %panic7286, label %ok7287 +panic7286: call void @finch_panic(ptr @.str.4671, i64 4121, ptr @.str.4672) unreachable -ok7283: +ok7287: %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 41 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = load %S.ast.Node, ptr %a2 @@ -73529,13 +73555,13 @@ ok7283: %t46 = icmp ne i32 %t45, 0 store { ptr, i64, i64 } %t42, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %logic.rend7284 -logic.rend7284: - br label %logic.end7281 -logic.end7281: - %t48 = phi i1 [ false, %logic.from7279 ], [ %t46, %logic.rend7284 ] - br i1 %t48, label %then7285, label %endif7287 -then7285: + br label %logic.rend7288 +logic.rend7288: + br label %logic.end7285 +logic.end7285: + %t48 = phi i1 [ false, %logic.from7283 ], [ %t46, %logic.rend7288 ] + br i1 %t48, label %then7289, label %endif7291 +then7289: %t49 = load ptr, ptr %a1 %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.4673, i64 17, i64 0 }) store { ptr, i64, i64 } %t50, ptr %a51 @@ -73544,8 +73570,8 @@ then7285: call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.4674, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4675, i64 15, i64 0 }, { ptr, i64, i64 } %t53) %t54 = load %S.ast.Type, ptr %a3 %t55 = call i1 @finch.gen.isInt(%S.ast.Type %t54) - br i1 %t55, label %then7288, label %endif7290 -then7288: + br i1 %t55, label %then7292, label %endif7294 +then7292: %t56 = load ptr, ptr %a1 %t57 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t56, { ptr, i64, i64 } { ptr @.str.4676, i64 3, i64 0 }) store { ptr, i64, i64 } %t57, ptr %a58 @@ -73615,11 +73641,11 @@ then7288: call void @finch_str_drop(ptr %a112) %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null - br i1 %t114, label %panic7291, label %ok7292 -panic7291: + br i1 %t114, label %panic7295, label %ok7296 +panic7295: call void @finch_panic(ptr @.str.4685, i64 4129, ptr @.str.4686) unreachable -ok7292: +ok7296: %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 42 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t111, ptr %t115 @@ -73630,11 +73656,11 @@ ok7292: %t120 = call { ptr, i64, i64 } @finch.gen.load(ptr %t118, { ptr, i64, i64 } { ptr @.str.4687, i64 17, i64 0 }, { ptr, i64, i64 } %t119) %t121 = load ptr, ptr %a1 %t122 = icmp eq ptr %t121, null - br i1 %t122, label %panic7293, label %ok7294 -panic7293: + br i1 %t122, label %panic7297, label %ok7298 +panic7297: call void @finch_panic(ptr @.str.4688, i64 4130, ptr @.str.4689) unreachable -ok7294: +ok7298: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 43 %t124 = load { ptr, i64, i64 }, ptr %t123 store { ptr, i64, i64 } %t120, ptr %t123 @@ -73666,7 +73692,7 @@ ok7294: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t142 -endif7290: +endif7294: %t143 = load ptr, ptr %a1 %t144 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t143, { ptr, i64, i64 } { ptr @.str.4692, i64 6, i64 0 }) store { ptr, i64, i64 } %t144, ptr %a145 @@ -73736,11 +73762,11 @@ endif7290: call void @finch_str_drop(ptr %a199) %t200 = load ptr, ptr %a1 %t201 = icmp eq ptr %t200, null - br i1 %t201, label %panic7295, label %ok7296 -panic7295: + br i1 %t201, label %panic7299, label %ok7300 +panic7299: call void @finch_panic(ptr @.str.4701, i64 4137, ptr @.str.4702) unreachable -ok7296: +ok7300: %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 42 %t203 = load { ptr, i64, i64 }, ptr %t202 store { ptr, i64, i64 } %t198, ptr %t202 @@ -73751,11 +73777,11 @@ ok7296: %t207 = call { ptr, i64, i64 } @finch.gen.load(ptr %t205, { ptr, i64, i64 } { ptr @.str.4703, i64 17, i64 0 }, { ptr, i64, i64 } %t206) %t208 = load ptr, ptr %a1 %t209 = icmp eq ptr %t208, null - br i1 %t209, label %panic7297, label %ok7298 -panic7297: + br i1 %t209, label %panic7301, label %ok7302 +panic7301: call void @finch_panic(ptr @.str.4704, i64 4138, ptr @.str.4705) unreachable -ok7298: +ok7302: %t210 = getelementptr inbounds %S.gen.Gen, ptr %t208, i32 0, i32 43 %t211 = load { ptr, i64, i64 }, ptr %t210 store { ptr, i64, i64 } %t207, ptr %t210 @@ -73787,45 +73813,45 @@ ok7298: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t229 -endif7287: +endif7291: %t230 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t231 = load { ptr, i64, i64 }, ptr %t230 store { ptr, i64, i64 } %t231, ptr %a232 store { ptr, i64, i64 } { ptr @.str.4708, i64 3, i64 0 }, ptr %a233 %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) %t235 = icmp ne i32 %t234, 0 - br label %logic.from7299 -logic.from7299: - br i1 %t235, label %logic.rhs7300, label %logic.end7301 -logic.rhs7300: + br label %logic.from7303 +logic.from7303: + br i1 %t235, label %logic.rhs7304, label %logic.end7305 +logic.rhs7304: %t236 = load %S.ast.Type, ptr %a3 %t237 = call i1 @finch.gen.isNumber(%S.ast.Type %t236) - br label %logic.rend7302 -logic.rend7302: - br label %logic.end7301 -logic.end7301: - %t238 = phi i1 [ false, %logic.from7299 ], [ %t237, %logic.rend7302 ] - br i1 %t238, label %then7303, label %endif7305 -then7303: + br label %logic.rend7306 +logic.rend7306: + br label %logic.end7305 +logic.end7305: + %t238 = phi i1 [ false, %logic.from7303 ], [ %t237, %logic.rend7306 ] + br i1 %t238, label %then7307, label %endif7309 +then7307: %t239 = load ptr, ptr %a1 %t240 = load ptr, ptr %a1 %t241 = icmp eq ptr %t240, null - br i1 %t241, label %panic7306, label %ok7307 -panic7306: + br i1 %t241, label %panic7310, label %ok7311 +panic7310: call void @finch_panic(ptr @.str.4709, i64 4143, ptr @.str.4710) unreachable -ok7307: +ok7311: %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 1 %t243 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t244 = load i64, ptr %t243 %t245 = load { ptr, i64, i64 }, ptr %t242 %t246 = extractvalue { ptr, i64, i64 } %t245, 1 %t247 = icmp uge i64 %t244, %t246 - br i1 %t247, label %range7308, label %inrange7309 -range7308: + br i1 %t247, label %range7312, label %inrange7313 +range7312: call void @finch_panic_index(ptr @.str.4711, i64 4143, i64 %t244, i64 %t246) unreachable -inrange7309: +inrange7313: %t248 = extractvalue { ptr, i64, i64 } %t245, 0 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t244 %t250 = load { ptr, i64, i64 }, ptr %t249 @@ -73833,8 +73859,8 @@ inrange7309: store { ptr, i64, i64 } %t251, ptr %a252 %t253 = load %S.ast.Type, ptr %a3 %t254 = call i1 @finch.gen.isInt(%S.ast.Type %t253) - br i1 %t254, label %then7310, label %endif7312 -then7310: + br i1 %t254, label %then7314, label %endif7316 +then7314: %t255 = load ptr, ptr %a1 %t256 = load ptr, ptr %a1 %t257 = load %S.gen.Val, ptr %a17 @@ -73907,7 +73933,7 @@ then7310: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t311 -endif7312: +endif7316: %t312 = load ptr, ptr %a1 %t313 = load ptr, ptr %a1 %t314 = load %S.gen.Val, ptr %a17 @@ -73980,26 +74006,26 @@ endif7312: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t368 -endif7305: +endif7309: %t369 = load %S.ast.Type, ptr %a3 %t370 = call i1 @finch.gen.isInt(%S.ast.Type %t369) - br label %logic.from7313 -logic.from7313: - br i1 %t370, label %logic.rhs7314, label %logic.end7315 -logic.rhs7314: + br label %logic.from7317 +logic.from7317: + br i1 %t370, label %logic.rhs7318, label %logic.end7319 +logic.rhs7318: %t371 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t372 = load { ptr, i64, i64 }, ptr %t371 store { ptr, i64, i64 } %t372, ptr %a373 store { ptr, i64, i64 } { ptr @.str.4722, i64 4, i64 0 }, ptr %a374 %t375 = call i32 @finch_str_eq(ptr %a373, ptr %a374) %t376 = icmp ne i32 %t375, 0 - br label %logic.rend7316 -logic.rend7316: - br label %logic.end7315 -logic.end7315: - %t377 = phi i1 [ false, %logic.from7313 ], [ %t376, %logic.rend7316 ] - br i1 %t377, label %then7317, label %endif7319 -then7317: + br label %logic.rend7320 +logic.rend7320: + br label %logic.end7319 +logic.end7319: + %t377 = phi i1 [ false, %logic.from7317 ], [ %t376, %logic.rend7320 ] + br i1 %t377, label %then7321, label %endif7323 +then7321: %t378 = load ptr, ptr %a1 %t379 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t380 = load { ptr, i64, i64 }, ptr %t379 @@ -74017,45 +74043,45 @@ then7317: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t390 -endif7319: +endif7323: %t391 = load %S.ast.Type, ptr %a3 %t392 = call i1 @finch.gen.isInt(%S.ast.Type %t391) - br label %logic.from7320 -logic.from7320: - br i1 %t392, label %logic.end7322, label %logic.rhs7321 -logic.rhs7321: + br label %logic.from7324 +logic.from7324: + br i1 %t392, label %logic.end7326, label %logic.rhs7325 +logic.rhs7325: %t393 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t394 = load { ptr, i64, i64 }, ptr %t393 store { ptr, i64, i64 } %t394, ptr %a395 store { ptr, i64, i64 } { ptr @.str.4724, i64 4, i64 0 }, ptr %a396 %t397 = call i32 @finch_str_eq(ptr %a395, ptr %a396) %t398 = icmp ne i32 %t397, 0 - br label %logic.rend7323 -logic.rend7323: - br label %logic.end7322 -logic.end7322: - %t399 = phi i1 [ true, %logic.from7320 ], [ %t398, %logic.rend7323 ] - br i1 %t399, label %then7324, label %endif7326 -then7324: + br label %logic.rend7327 +logic.rend7327: + br label %logic.end7326 +logic.end7326: + %t399 = phi i1 [ true, %logic.from7324 ], [ %t398, %logic.rend7327 ] + br i1 %t399, label %then7328, label %endif7330 +then7328: %t400 = load %S.ast.Type, ptr %a23 %t401 = call i1 @finch.gen.isInt(%S.ast.Type %t400) - br label %logic.from7327 -logic.from7327: - br i1 %t401, label %logic.end7329, label %logic.rhs7328 -logic.rhs7328: + br label %logic.from7331 +logic.from7331: + br i1 %t401, label %logic.end7333, label %logic.rhs7332 +logic.rhs7332: %t402 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t403 = load { ptr, i64, i64 }, ptr %t402 store { ptr, i64, i64 } %t403, ptr %a404 store { ptr, i64, i64 } { ptr @.str.4725, i64 4, i64 0 }, ptr %a405 %t406 = call i32 @finch_str_eq(ptr %a404, ptr %a405) %t407 = icmp ne i32 %t406, 0 - br label %logic.rend7330 -logic.rend7330: - br label %logic.end7329 -logic.end7329: - %t408 = phi i1 [ true, %logic.from7327 ], [ %t407, %logic.rend7330 ] - br i1 %t408, label %then7331, label %endif7333 -then7331: + br label %logic.rend7334 +logic.rend7334: + br label %logic.end7333 +logic.end7333: + %t408 = phi i1 [ true, %logic.from7331 ], [ %t407, %logic.rend7334 ] + br i1 %t408, label %then7335, label %endif7337 +then7335: %t409 = load ptr, ptr %a1 %t410 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t411 = load { ptr, i64, i64 }, ptr %t410 @@ -74071,15 +74097,15 @@ then7331: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t420 -endif7333: +endif7337: %t421 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t422 = load { ptr, i64, i64 }, ptr %t421 store { ptr, i64, i64 } %t422, ptr %a423 store { ptr, i64, i64 } { ptr @.str.4726, i64 4, i64 0 }, ptr %a424 %t425 = call i32 @finch_str_eq(ptr %a423, ptr %a424) %t426 = icmp ne i32 %t425, 0 - br i1 %t426, label %then7334, label %endif7336 -then7334: + br i1 %t426, label %then7338, label %endif7340 +then7338: %t427 = load ptr, ptr %a1 %t428 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t429 = load { ptr, i64, i64 }, ptr %t428 @@ -74116,33 +74142,33 @@ then7334: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t455 -endif7336: +endif7340: %t456 = load %S.ast.Type, ptr %a23 %t457 = call i1 @finch.gen.isFloat(%S.ast.Type %t456) - br label %logic.from7337 -logic.from7337: - br i1 %t457, label %logic.rhs7338, label %logic.end7339 -logic.rhs7338: + br label %logic.from7341 +logic.from7341: + br i1 %t457, label %logic.rhs7342, label %logic.end7343 +logic.rhs7342: %t458 = load %S.ast.Type, ptr %a3 %t459 = call i1 @finch.gen.isInt(%S.ast.Type %t458) - br label %logic.rend7340 -logic.rend7340: - br label %logic.end7339 -logic.end7339: - %t460 = phi i1 [ false, %logic.from7337 ], [ %t459, %logic.rend7340 ] - br i1 %t460, label %then7341, label %endif7343 -then7341: + br label %logic.rend7344 +logic.rend7344: + br label %logic.end7343 +logic.end7343: + %t460 = phi i1 [ false, %logic.from7341 ], [ %t459, %logic.rend7344 ] + br i1 %t460, label %then7345, label %endif7347 +then7345: store { ptr, i64, i64 } { ptr @.str.4729, i64 6, i64 0 }, ptr %a461 %t462 = load %S.ast.Type, ptr %a3 %t463 = call i1 @finch.gen.isSigned(%S.ast.Type %t462) - br i1 %t463, label %then7344, label %endif7346 -then7344: + br i1 %t463, label %then7348, label %endif7350 +then7348: %t464 = load { ptr, i64, i64 }, ptr %a461 store { ptr, i64, i64 } { ptr @.str.4730, i64 6, i64 0 }, ptr %a461 store { ptr, i64, i64 } %t464, ptr %a465 call void @finch_str_drop(ptr %a465) - br label %endif7346 -endif7346: + br label %endif7350 +endif7350: %t466 = load ptr, ptr %a1 %t467 = load { ptr, i64, i64 }, ptr %a461 store { ptr, i64, i64 } %t467, ptr %a469 @@ -74204,17 +74230,17 @@ endif7346: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t514 -endif7343: - br label %endif7326 -endif7326: +endif7347: + br label %endif7330 +endif7330: %t515 = load %S.ast.Type, ptr %a3 %t516 = call i1 @finch.gen.isFloat(%S.ast.Type %t515) - br i1 %t516, label %then7347, label %endif7349 -then7347: + br i1 %t516, label %then7351, label %endif7353 +then7351: %t517 = load %S.ast.Type, ptr %a23 %t518 = call i1 @finch.gen.isInt(%S.ast.Type %t517) - br i1 %t518, label %then7350, label %endif7352 -then7350: + br i1 %t518, label %then7354, label %endif7356 +then7354: %t519 = load ptr, ptr %a1 %t520 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t521 = load { ptr, i64, i64 }, ptr %t520 @@ -74230,11 +74256,11 @@ then7350: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t530 -endif7352: +endif7356: %t531 = load %S.ast.Type, ptr %a23 %t532 = call i1 @finch.gen.isFloat(%S.ast.Type %t531) - br i1 %t532, label %then7353, label %endif7355 -then7353: + br i1 %t532, label %then7357, label %endif7359 +then7357: %t533 = load ptr, ptr %a1 %t534 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t535 = load { ptr, i64, i64 }, ptr %t534 @@ -74250,28 +74276,28 @@ then7353: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t544 -endif7355: - br label %endif7349 -endif7349: +endif7359: + br label %endif7353 +endif7353: %t545 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t546 = load { ptr, i64, i64 }, ptr %t545 store { ptr, i64, i64 } %t546, ptr %a547 store { ptr, i64, i64 } { ptr @.str.4734, i64 4, i64 0 }, ptr %a548 %t549 = call i32 @finch_str_eq(ptr %a547, ptr %a548) %t550 = icmp ne i32 %t549, 0 - br label %logic.from7356 -logic.from7356: - br i1 %t550, label %logic.rhs7357, label %logic.end7358 -logic.rhs7357: + br label %logic.from7360 +logic.from7360: + br i1 %t550, label %logic.rhs7361, label %logic.end7362 +logic.rhs7361: %t551 = load %S.ast.Type, ptr %a23 %t552 = call i1 @finch.gen.isInt(%S.ast.Type %t551) - br label %logic.rend7359 -logic.rend7359: - br label %logic.end7358 -logic.end7358: - %t553 = phi i1 [ false, %logic.from7356 ], [ %t552, %logic.rend7359 ] - br i1 %t553, label %then7360, label %endif7362 -then7360: + br label %logic.rend7363 +logic.rend7363: + br label %logic.end7362 +logic.end7362: + %t553 = phi i1 [ false, %logic.from7360 ], [ %t552, %logic.rend7363 ] + br i1 %t553, label %then7364, label %endif7366 +then7364: %t554 = load ptr, ptr %a1 %t555 = load ptr, ptr %a1 %t556 = load %S.ast.Type, ptr %a23 @@ -74314,45 +74340,45 @@ then7360: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t587 -endif7362: +endif7366: %t588 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t589 = load { ptr, i64, i64 }, ptr %t588 store { ptr, i64, i64 } %t589, ptr %a590 store { ptr, i64, i64 } { ptr @.str.4738, i64 3, i64 0 }, ptr %a591 %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) %t593 = icmp ne i32 %t592, 0 - br label %logic.from7363 -logic.from7363: - br i1 %t593, label %logic.rhs7364, label %logic.end7365 -logic.rhs7364: + br label %logic.from7367 +logic.from7367: + br i1 %t593, label %logic.rhs7368, label %logic.end7369 +logic.rhs7368: %t594 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t595 = load { ptr, i64, i64 }, ptr %t594 store { ptr, i64, i64 } %t595, ptr %a596 store { ptr, i64, i64 } { ptr @.str.4739, i64 3, i64 0 }, ptr %a597 %t598 = call i32 @finch_str_eq(ptr %a596, ptr %a597) %t599 = icmp ne i32 %t598, 0 - br label %logic.from7366 -logic.from7366: - br i1 %t599, label %logic.end7368, label %logic.rhs7367 -logic.rhs7367: + br label %logic.from7370 +logic.from7370: + br i1 %t599, label %logic.end7372, label %logic.rhs7371 +logic.rhs7371: %t600 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t601 = load { ptr, i64, i64 }, ptr %t600 store { ptr, i64, i64 } %t601, ptr %a602 store { ptr, i64, i64 } { ptr @.str.4740, i64 4, i64 0 }, ptr %a603 %t604 = call i32 @finch_str_eq(ptr %a602, ptr %a603) %t605 = icmp ne i32 %t604, 0 - br label %logic.rend7369 -logic.rend7369: - br label %logic.end7368 -logic.end7368: - %t606 = phi i1 [ true, %logic.from7366 ], [ %t605, %logic.rend7369 ] - br label %logic.rend7370 -logic.rend7370: - br label %logic.end7365 -logic.end7365: - %t607 = phi i1 [ false, %logic.from7363 ], [ %t606, %logic.rend7370 ] - br i1 %t607, label %then7371, label %endif7373 -then7371: + br label %logic.rend7373 +logic.rend7373: + br label %logic.end7372 +logic.end7372: + %t606 = phi i1 [ true, %logic.from7370 ], [ %t605, %logic.rend7373 ] + br label %logic.rend7374 +logic.rend7374: + br label %logic.end7369 +logic.end7369: + %t607 = phi i1 [ false, %logic.from7367 ], [ %t606, %logic.rend7374 ] + br i1 %t607, label %then7375, label %endif7377 +then7375: %t608 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t609 = load { ptr, i64, i64 }, ptr %t608 store { ptr, i64, i64 } %t609, ptr %a610 @@ -74367,26 +74393,26 @@ then7371: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t618 -endif7373: +endif7377: %t619 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t620 = load { ptr, i64, i64 }, ptr %t619 store { ptr, i64, i64 } %t620, ptr %a621 store { ptr, i64, i64 } { ptr @.str.4741, i64 3, i64 0 }, ptr %a622 %t623 = call i32 @finch_str_eq(ptr %a621, ptr %a622) %t624 = icmp ne i32 %t623, 0 - br label %logic.from7374 -logic.from7374: - br i1 %t624, label %logic.rhs7375, label %logic.end7376 -logic.rhs7375: + br label %logic.from7378 +logic.from7378: + br i1 %t624, label %logic.rhs7379, label %logic.end7380 +logic.rhs7379: %t625 = load %S.ast.Type, ptr %a23 %t626 = call i1 @finch.gen.isInt(%S.ast.Type %t625) - br label %logic.rend7377 -logic.rend7377: - br label %logic.end7376 -logic.end7376: - %t627 = phi i1 [ false, %logic.from7374 ], [ %t626, %logic.rend7377 ] - br i1 %t627, label %then7378, label %endif7380 -then7378: + br label %logic.rend7381 +logic.rend7381: + br label %logic.end7380 +logic.end7380: + %t627 = phi i1 [ false, %logic.from7378 ], [ %t626, %logic.rend7381 ] + br i1 %t627, label %then7382, label %endif7384 +then7382: %t628 = load ptr, ptr %a1 %t629 = load ptr, ptr %a1 %t630 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 @@ -74420,26 +74446,26 @@ then7378: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t653 -endif7380: +endif7384: %t654 = load %S.ast.Type, ptr %a3 %t655 = call i1 @finch.gen.isInt(%S.ast.Type %t654) - br label %logic.from7381 -logic.from7381: - br i1 %t655, label %logic.rhs7382, label %logic.end7383 -logic.rhs7382: + br label %logic.from7385 +logic.from7385: + br i1 %t655, label %logic.rhs7386, label %logic.end7387 +logic.rhs7386: %t656 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t657 = load { ptr, i64, i64 }, ptr %t656 store { ptr, i64, i64 } %t657, ptr %a658 store { ptr, i64, i64 } { ptr @.str.4745, i64 3, i64 0 }, ptr %a659 %t660 = call i32 @finch_str_eq(ptr %a658, ptr %a659) %t661 = icmp ne i32 %t660, 0 - br label %logic.rend7384 -logic.rend7384: - br label %logic.end7383 -logic.end7383: - %t662 = phi i1 [ false, %logic.from7381 ], [ %t661, %logic.rend7384 ] - br i1 %t662, label %then7385, label %endif7387 -then7385: + br label %logic.rend7388 +logic.rend7388: + br label %logic.end7387 +logic.end7387: + %t662 = phi i1 [ false, %logic.from7385 ], [ %t661, %logic.rend7388 ] + br i1 %t662, label %then7389, label %endif7391 +then7389: %t663 = load ptr, ptr %a1 %t664 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t665 = load { ptr, i64, i64 }, ptr %t664 @@ -74476,56 +74502,56 @@ then7385: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t691 -endif7387: +endif7391: %t692 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t693 = load { ptr, i64, i64 }, ptr %t692 store { ptr, i64, i64 } %t693, ptr %a694 store { ptr, i64, i64 } { ptr @.str.4748, i64 3, i64 0 }, ptr %a695 %t696 = call i32 @finch_str_eq(ptr %a694, ptr %a695) %t697 = icmp ne i32 %t696, 0 - br label %logic.from7388 -logic.from7388: - br i1 %t697, label %logic.rhs7389, label %logic.end7390 -logic.rhs7389: + br label %logic.from7392 +logic.from7392: + br i1 %t697, label %logic.rhs7393, label %logic.end7394 +logic.rhs7393: %t698 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t699 = load { ptr, i64, i64 }, ptr %t698 store { ptr, i64, i64 } %t699, ptr %a700 store { ptr, i64, i64 } { ptr @.str.4749, i64 3, i64 0 }, ptr %a701 %t702 = call i32 @finch_str_eq(ptr %a700, ptr %a701) %t703 = icmp ne i32 %t702, 0 - br label %logic.rend7391 -logic.rend7391: - br label %logic.end7390 -logic.end7390: - %t704 = phi i1 [ false, %logic.from7388 ], [ %t703, %logic.rend7391 ] - br i1 %t704, label %then7392, label %endif7394 -then7392: + br label %logic.rend7395 +logic.rend7395: + br label %logic.end7394 +logic.end7394: + %t704 = phi i1 [ false, %logic.from7392 ], [ %t703, %logic.rend7395 ] + br i1 %t704, label %then7396, label %endif7398 +then7396: %t705 = load ptr, ptr %a1 %t706 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t707 = load { ptr, i64, i64 }, ptr %t706 %t708 = extractvalue { ptr, i64, i64 } %t707, 1 %t709 = icmp uge i64 0, %t708 - br i1 %t709, label %range7395, label %inrange7396 -range7395: + br i1 %t709, label %range7399, label %inrange7400 +range7399: call void @finch_panic_index(ptr @.str.4750, i64 4192, i64 0, i64 %t708) unreachable -inrange7396: +inrange7400: %t710 = extractvalue { ptr, i64, i64 } %t707, 0 %t711 = getelementptr inbounds %S.ast.Node, ptr %t710, i64 0 %t712 = load %S.ast.Node, ptr %t711 call void @finch.gen.fail(ptr %t705, %S.ast.Node %t712, { ptr, i64, i64 } { ptr @.str.4751, i64 70, i64 0 }) - br label %endif7394 -endif7394: + br label %endif7398 +endif7398: %t713 = load ptr, ptr %a1 %t714 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t715 = load { ptr, i64, i64 }, ptr %t714 %t716 = extractvalue { ptr, i64, i64 } %t715, 1 %t717 = icmp uge i64 0, %t716 - br i1 %t717, label %range7397, label %inrange7398 -range7397: + br i1 %t717, label %range7401, label %inrange7402 +range7401: call void @finch_panic_index(ptr @.str.4752, i64 4194, i64 0, i64 %t716) unreachable -inrange7398: +inrange7402: %t718 = extractvalue { ptr, i64, i64 } %t715, 0 %t719 = getelementptr inbounds %S.ast.Node, ptr %t718, i64 0 %t720 = load %S.ast.Node, ptr %t719 @@ -74585,15 +74611,15 @@ entry: store { ptr, i64, i64 } { ptr @.str.4755, i64 6, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br i1 %t8, label %then7399, label %endif7401 -then7399: + br i1 %t8, label %then7403, label %endif7405 +then7403: %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic7402, label %ok7403 -panic7402: + br i1 %t10, label %panic7406, label %ok7407 +panic7406: call void @finch_panic(ptr @.str.4756, i64 4227, ptr @.str.4757) unreachable -ok7403: +ok7407: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 16 %t12 = load ptr, ptr %a1 %t13 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -74604,25 +74630,25 @@ ok7403: %t18 = load { ptr, i64, i64 }, ptr %t11 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 - br i1 %t20, label %range7404, label %inrange7405 -range7404: + br i1 %t20, label %range7408, label %inrange7409 +range7408: call void @finch_panic_index(ptr @.str.4758, i64 4227, i64 %t17, i64 %t19) unreachable -inrange7405: +inrange7409: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.StructDef, ptr %t21, i64 %t17 %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i32 0, i32 9 %t24 = load i64, ptr %t23 ret i64 %t24 -endif7401: +endif7405: %t25 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.4759, i64 5, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br i1 %t30, label %then7406, label %endif7408 -then7406: + br i1 %t30, label %then7410, label %endif7412 +then7410: %t31 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t32 = load i64, ptr %t31 %t33 = load ptr, ptr %a1 @@ -74630,73 +74656,73 @@ then7406: %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 0, %t36 - br i1 %t37, label %range7409, label %inrange7410 -range7409: + br i1 %t37, label %range7413, label %inrange7414 +range7413: call void @finch_panic_index(ptr @.str.4760, i64 4230, i64 0, i64 %t36) unreachable -inrange7410: +inrange7414: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds %S.ast.Type, ptr %t38, i64 0 %t40 = load %S.ast.Type, ptr %t39 %t41 = call i64 @finch.gen.sizeBytes(ptr %t33, %S.ast.Type %t40) %t42 = mul i64 %t32, %t41 ret i64 %t42 -endif7408: +endif7412: %t43 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.4761, i64 3, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 - br label %logic.from7411 -logic.from7411: - br i1 %t48, label %logic.end7413, label %logic.rhs7412 -logic.rhs7412: + br label %logic.from7415 +logic.from7415: + br i1 %t48, label %logic.end7417, label %logic.rhs7416 +logic.rhs7416: %t49 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.4762, i64 3, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br label %logic.rend7414 -logic.rend7414: - br label %logic.end7413 -logic.end7413: - %t55 = phi i1 [ true, %logic.from7411 ], [ %t54, %logic.rend7414 ] - br i1 %t55, label %then7415, label %endif7417 -then7415: + br label %logic.rend7418 +logic.rend7418: + br label %logic.end7417 +logic.end7417: + %t55 = phi i1 [ true, %logic.from7415 ], [ %t54, %logic.rend7418 ] + br i1 %t55, label %then7419, label %endif7421 +then7419: ret i64 8 -endif7417: +endif7421: %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.4763, i64 5, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br i1 %t61, label %then7418, label %endif7420 -then7418: + br i1 %t61, label %then7422, label %endif7424 +then7422: ret i64 8 -endif7420: +endif7424: %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 store { ptr, i64, i64 } { ptr @.str.4764, i64 3, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp ne i32 %t66, 0 - br i1 %t67, label %then7421, label %endif7423 -then7421: + br i1 %t67, label %then7425, label %endif7427 +then7425: ret i64 4 -endif7423: +endif7427: %t68 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } { ptr @.str.4765, i64 4, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 - br i1 %t73, label %then7424, label %endif7426 -then7424: + br i1 %t73, label %then7428, label %endif7430 +then7428: ret i64 1 -endif7426: +endif7430: %t74 = load %S.ast.Type, ptr %a2 %t75 = call i64 @finch.gen.bitsOf(%S.ast.Type %t74) %t76 = sdiv i64 %t75, 8 @@ -74744,15 +74770,15 @@ entry: store { ptr, i64, i64 } { ptr @.str.4766, i64 6, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp ne i32 %t9, 0 - br i1 %t10, label %then7427, label %else7428 -then7427: + br i1 %t10, label %then7431, label %else7432 +then7431: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic7430, label %ok7431 -panic7430: + br i1 %t12, label %panic7434, label %ok7435 +panic7434: call void @finch_panic(ptr @.str.4767, i64 4251, ptr @.str.4768) unreachable -ok7431: +ok7435: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 16 %t14 = load ptr, ptr %a1 %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -74763,11 +74789,11 @@ ok7431: %t20 = load { ptr, i64, i64 }, ptr %t13 %t21 = extractvalue { ptr, i64, i64 } %t20, 1 %t22 = icmp uge i64 %t19, %t21 - br i1 %t22, label %range7432, label %inrange7433 -range7432: + br i1 %t22, label %range7436, label %inrange7437 +range7436: call void @finch_panic_index(ptr @.str.4769, i64 4251, i64 %t19, i64 %t21) unreachable -inrange7433: +inrange7437: %t23 = extractvalue { ptr, i64, i64 } %t20, 0 %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i64 %t19 %t25 = load %S.gen.StructDef, ptr %t24 @@ -74779,23 +74805,23 @@ inrange7433: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 %t32 = load i64, ptr %t31 store i64 0, ptr %a33 - br label %for.cond7434 -for.cond7434: + br label %for.cond7438 +for.cond7438: %t34 = load i64, ptr %a33 %t35 = icmp slt i64 %t34, %t32 - br i1 %t35, label %for.body7435, label %for.end7437 -for.body7435: + br i1 %t35, label %for.body7439, label %for.end7441 +for.body7439: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 %t38 = load i64, ptr %a33 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range7438, label %inrange7439 -range7438: + br i1 %t41, label %range7442, label %inrange7443 +range7442: call void @finch_panic_index(ptr @.str.4770, i64 4253, i64 %t38, i64 %t40) unreachable -inrange7439: +inrange7443: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Type, ptr %t42, i64 %t38 %t44 = load %S.ast.Type, ptr %t43 @@ -74805,11 +74831,11 @@ inrange7439: %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range7440, label %inrange7441 -range7440: + br i1 %t50, label %range7444, label %inrange7445 +range7444: call void @finch_panic_index(ptr @.str.4771, i64 4253, i64 %t47, i64 %t49) unreachable -inrange7441: +inrange7445: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i64, ptr %t51, i64 %t47 %t53 = load i64, ptr %t52 @@ -74817,14 +74843,14 @@ inrange7441: %t55 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t36, %S.ast.Type %t44, i64 %t54) store { ptr, i64, i64 } %t55, ptr %a56 store i64 0, ptr %a57 - br label %each.cond7442 -each.cond7442: + br label %each.cond7446 +each.cond7446: %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a56, i32 0, i32 1 %t59 = load i64, ptr %t58 %t60 = load i64, ptr %a57 %t61 = icmp slt i64 %t60, %t59 - br i1 %t61, label %each.body7443, label %each.end7445 -each.body7443: + br i1 %t61, label %each.body7447, label %each.end7449 +each.body7447: %t62 = load ptr, ptr %a56 %t63 = getelementptr inbounds %S.gen.Leaf, ptr %t62, i64 %t60 %t64 = load %S.gen.Leaf, ptr %t63 @@ -74838,42 +74864,42 @@ each.body7443: %t71 = getelementptr inbounds %S.gen.Leaf, ptr %t70, i64 %t68 store %S.gen.Leaf %t67, ptr %t71 store i64 %t69, ptr %t66 - br label %each.step7444 -each.step7444: + br label %each.step7448 +each.step7448: %t72 = load i64, ptr %a57 %t73 = add i64 %t72, 1 store i64 %t73, ptr %a57 - br label %each.cond7442 -each.end7445: + br label %each.cond7446 +each.end7449: call void @finch.drop.arr_S_gen_Leaf(ptr %a56) - br label %for.step7436 -for.step7436: + br label %for.step7440 +for.step7440: %t74 = load i64, ptr %a33 %t75 = add i64 %t74, 1 store i64 %t75, ptr %a33 - br label %for.cond7434 -for.end7437: + br label %for.cond7438 +for.end7441: call void @finch.drop.S_gen_StructDef(ptr %a29) - br label %endif7429 -else7428: + br label %endif7433 +else7432: %t76 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t77 = load { ptr, i64, i64 }, ptr %t76 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.4772, i64 5, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 - br i1 %t81, label %then7446, label %else7447 -then7446: + br i1 %t81, label %then7450, label %else7451 +then7450: %t82 = load ptr, ptr %a1 %t83 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t84 = load { ptr, i64, i64 }, ptr %t83 %t85 = extractvalue { ptr, i64, i64 } %t84, 1 %t86 = icmp uge i64 0, %t85 - br i1 %t86, label %range7449, label %inrange7450 -range7449: + br i1 %t86, label %range7453, label %inrange7454 +range7453: call void @finch_panic_index(ptr @.str.4773, i64 4258, i64 0, i64 %t85) unreachable -inrange7450: +inrange7454: %t87 = extractvalue { ptr, i64, i64 } %t84, 0 %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i64 0 %t89 = load %S.ast.Type, ptr %t88 @@ -74882,22 +74908,22 @@ inrange7450: %t92 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t93 = load i64, ptr %t92 store i64 0, ptr %a94 - br label %for.cond7451 -for.cond7451: + br label %for.cond7455 +for.cond7455: %t95 = load i64, ptr %a94 %t96 = icmp slt i64 %t95, %t93 - br i1 %t96, label %for.body7452, label %for.end7454 -for.body7452: + br i1 %t96, label %for.body7456, label %for.end7458 +for.body7456: %t97 = load ptr, ptr %a1 %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 0, %t100 - br i1 %t101, label %range7455, label %inrange7456 -range7455: + br i1 %t101, label %range7459, label %inrange7460 +range7459: call void @finch_panic_index(ptr @.str.4774, i64 4260, i64 0, i64 %t100) unreachable -inrange7456: +inrange7460: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 %t104 = load %S.ast.Type, ptr %t103 @@ -74909,14 +74935,14 @@ inrange7456: %t110 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t97, %S.ast.Type %t104, i64 %t109) store { ptr, i64, i64 } %t110, ptr %a111 store i64 0, ptr %a112 - br label %each.cond7457 -each.cond7457: + br label %each.cond7461 +each.cond7461: %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = load i64, ptr %a112 %t116 = icmp slt i64 %t115, %t114 - br i1 %t116, label %each.body7458, label %each.end7460 -each.body7458: + br i1 %t116, label %each.body7462, label %each.end7464 +each.body7462: %t117 = load ptr, ptr %a111 %t118 = getelementptr inbounds %S.gen.Leaf, ptr %t117, i64 %t115 %t119 = load %S.gen.Leaf, ptr %t118 @@ -74930,23 +74956,23 @@ each.body7458: %t126 = getelementptr inbounds %S.gen.Leaf, ptr %t125, i64 %t123 store %S.gen.Leaf %t122, ptr %t126 store i64 %t124, ptr %t121 - br label %each.step7459 -each.step7459: + br label %each.step7463 +each.step7463: %t127 = load i64, ptr %a112 %t128 = add i64 %t127, 1 store i64 %t128, ptr %a112 - br label %each.cond7457 -each.end7460: + br label %each.cond7461 +each.end7464: call void @finch.drop.arr_S_gen_Leaf(ptr %a111) - br label %for.step7453 -for.step7453: + br label %for.step7457 +for.step7457: %t129 = load i64, ptr %a94 %t130 = add i64 %t129, 1 store i64 %t130, ptr %a94 - br label %for.cond7451 -for.end7454: - br label %endif7448 -else7447: + br label %for.cond7455 +for.end7458: + br label %endif7452 +else7451: %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t132 = load i64, ptr %a3 %t133 = insertvalue %S.gen.Leaf zeroinitializer, i64 %t132, 0 @@ -74971,10 +74997,10 @@ else7447: %t151 = getelementptr inbounds %S.gen.Leaf, ptr %t150, i64 %t148 store %S.gen.Leaf %t147, ptr %t151 store i64 %t149, ptr %t131 - br label %endif7448 -endif7448: - br label %endif7429 -endif7429: + br label %endif7452 +endif7452: + br label %endif7433 +endif7433: %t152 = load { ptr, i64, i64 }, ptr %a4 ret { ptr, i64, i64 } %t152 } @@ -75073,28 +75099,28 @@ entry: %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 - br label %logic.from7461 -logic.from7461: - br i1 %t17, label %logic.rhs7462, label %logic.end7463 -logic.rhs7462: + br label %logic.from7465 +logic.from7465: + br i1 %t17, label %logic.rhs7466, label %logic.end7467 +logic.rhs7466: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp sle i64 %t19, 4 - br label %logic.rend7464 -logic.rend7464: - br label %logic.end7463 -logic.end7463: - %t21 = phi i1 [ false, %logic.from7461 ], [ %t20, %logic.rend7464 ] + br label %logic.rend7468 +logic.rend7468: + br label %logic.end7467 +logic.end7467: + %t21 = phi i1 [ false, %logic.from7465 ], [ %t20, %logic.rend7468 ] store i1 %t21, ptr %a22 store i64 0, ptr %a23 - br label %each.cond7465 -each.cond7465: + br label %each.cond7469 +each.cond7469: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load i64, ptr %a23 %t27 = icmp slt i64 %t26, %t25 - br i1 %t27, label %each.body7466, label %each.end7468 -each.body7466: + br i1 %t27, label %each.body7470, label %each.end7472 +each.body7470: %t28 = load ptr, ptr %a14 %t29 = getelementptr inbounds %S.gen.Leaf, ptr %t28, i64 %t26 %t30 = load %S.gen.Leaf, ptr %t29 @@ -75102,66 +75128,66 @@ each.body7466: %t32 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 2 %t33 = load i1, ptr %t32 %t34 = xor i1 %t33, true - br label %logic.from7469 -logic.from7469: - br i1 %t34, label %logic.end7471, label %logic.rhs7470 -logic.rhs7470: + br label %logic.from7473 +logic.from7473: + br i1 %t34, label %logic.end7475, label %logic.rhs7474 +logic.rhs7474: %t35 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 3 %t36 = load i1, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %a14 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 0, %t38 - br i1 %t39, label %range7472, label %inrange7473 -range7472: + br i1 %t39, label %range7476, label %inrange7477 +range7476: call void @finch_panic_index(ptr @.str.4776, i64 4277, i64 0, i64 %t38) unreachable -inrange7473: +inrange7477: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.gen.Leaf, ptr %t40, i64 0 %t42 = getelementptr inbounds %S.gen.Leaf, ptr %t41, i32 0, i32 3 %t43 = load i1, ptr %t42 %t44 = icmp ne i1 %t36, %t43 - br label %logic.rend7474 -logic.rend7474: - br label %logic.end7471 -logic.end7471: - %t45 = phi i1 [ true, %logic.from7469 ], [ %t44, %logic.rend7474 ] - br i1 %t45, label %then7475, label %endif7477 -then7475: + br label %logic.rend7478 +logic.rend7478: + br label %logic.end7475 +logic.end7475: + %t45 = phi i1 [ true, %logic.from7473 ], [ %t44, %logic.rend7478 ] + br i1 %t45, label %then7479, label %endif7481 +then7479: store i1 false, ptr %a22 - br label %endif7477 -endif7477: - br label %each.step7467 -each.step7467: + br label %endif7481 +endif7481: + br label %each.step7471 +each.step7471: %t46 = load i64, ptr %a23 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a23 - br label %each.cond7465 -each.end7468: + br label %each.cond7469 +each.end7472: %t48 = load i1, ptr %a22 - br i1 %t48, label %then7478, label %endif7480 -then7478: + br i1 %t48, label %then7482, label %endif7484 +then7482: store { ptr, i64, i64 } { ptr @.str.4777, i64 5, i64 0 }, ptr %a49 %t50 = load { ptr, i64, i64 }, ptr %a14 %t51 = extractvalue { ptr, i64, i64 } %t50, 1 %t52 = icmp uge i64 0, %t51 - br i1 %t52, label %range7481, label %inrange7482 -range7481: + br i1 %t52, label %range7485, label %inrange7486 +range7485: call void @finch_panic_index(ptr @.str.4778, i64 4283, i64 0, i64 %t51) unreachable -inrange7482: +inrange7486: %t53 = extractvalue { ptr, i64, i64 } %t50, 0 %t54 = getelementptr inbounds %S.gen.Leaf, ptr %t53, i64 0 %t55 = getelementptr inbounds %S.gen.Leaf, ptr %t54, i32 0, i32 3 %t56 = load i1, ptr %t55 - br i1 %t56, label %then7483, label %endif7485 -then7483: + br i1 %t56, label %then7487, label %endif7489 +then7487: %t57 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } { ptr @.str.4779, i64 6, i64 0 }, ptr %a49 store { ptr, i64, i64 } %t57, ptr %a58 call void @finch_str_drop(ptr %a58) - br label %endif7485 -endif7485: + br label %endif7489 +endif7489: %t59 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } { ptr @.str.4780, i64 6, i64 0 }, ptr %t59 @@ -75207,14 +75233,14 @@ endif7485: store i64 %t90, ptr %t63 store { ptr, i64, i64 } zeroinitializer, ptr %a93 store i64 0, ptr %a94 - br label %each.cond7486 -each.cond7486: + br label %each.cond7490 +each.cond7490: %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t96 = load i64, ptr %t95 %t97 = load i64, ptr %a94 %t98 = icmp slt i64 %t97, %t96 - br i1 %t98, label %each.body7487, label %each.end7489 -each.body7487: + br i1 %t98, label %each.body7491, label %each.end7493 +each.body7491: %t99 = load ptr, ptr %a14 %t100 = getelementptr inbounds %S.gen.Leaf, ptr %t99, i64 %t97 %t101 = load %S.gen.Leaf, ptr %t100 @@ -75231,13 +75257,13 @@ each.body7487: %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i64 %t108 store { ptr, i64, i64 } %t107, ptr %t111 store i64 %t109, ptr %t103 - br label %each.step7488 -each.step7488: + br label %each.step7492 +each.step7492: %t112 = load i64, ptr %a94 %t113 = add i64 %t112, 1 store i64 %t113, ptr %a94 - br label %each.cond7486 -each.end7489: + br label %each.cond7490 +each.end7493: %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4785, i64 2, i64 0 }, ptr %a115 call void @finch_str_join(ptr %a116, ptr %a93, ptr %a115) @@ -75264,11 +75290,11 @@ each.end7489: call void @finch_str_drop(ptr %a49) call void @finch.drop.arr_S_gen_Leaf(ptr %a14) ret %S.gen.Abi %t131 -endif7480: +endif7484: %t132 = load i64, ptr %a4 %t133 = icmp sgt i64 %t132, 16 - br i1 %t133, label %then7490, label %endif7492 -then7490: + br i1 %t133, label %then7494, label %endif7496 +then7494: %t134 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 %t135 = load { ptr, i64, i64 }, ptr %t134 store { ptr, i64, i64 } { ptr @.str.4787, i64 8, i64 0 }, ptr %t134 @@ -75277,7 +75303,7 @@ then7490: %t137 = load %S.gen.Abi, ptr %a10 call void @finch.drop.arr_S_gen_Leaf(ptr %a14) ret %S.gen.Abi %t137 -endif7492: +endif7496: %t138 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 %t139 = load { ptr, i64, i64 }, ptr %t138 store { ptr, i64, i64 } { ptr @.str.4788, i64 6, i64 0 }, ptr %t138 @@ -75285,8 +75311,8 @@ endif7492: call void @finch_str_drop(ptr %a140) %t141 = load i64, ptr %a5 %t142 = icmp sge i64 %t141, 16 - br i1 %t142, label %then7493, label %else7494 -then7493: + br i1 %t142, label %then7497, label %else7498 +then7497: %t143 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 %t145 = load i64, ptr %t144 @@ -75301,12 +75327,12 @@ then7493: store { ptr, i64, i64 } { ptr @.str.4790, i64 4, i64 0 }, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 call void @finch_str_drop(ptr %a151) - br label %endif7495 -else7494: + br label %endif7499 +else7498: %t152 = load i64, ptr %a4 %t153 = icmp sle i64 %t152, 8 - br i1 %t153, label %then7496, label %else7497 -then7496: + br i1 %t153, label %then7500, label %else7501 +then7500: %t154 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 %t156 = load i64, ptr %t155 @@ -75331,8 +75357,8 @@ then7496: store { ptr, i64, i64 } %t168, ptr %t169 store { ptr, i64, i64 } %t170, ptr %a171 call void @finch_str_drop(ptr %a171) - br label %endif7498 -else7497: + br label %endif7502 +else7501: %t172 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i32 0, i32 1 %t174 = load i64, ptr %t173 @@ -75347,10 +75373,10 @@ else7497: store { ptr, i64, i64 } { ptr @.str.4794, i64 9, i64 0 }, ptr %t178 store { ptr, i64, i64 } %t179, ptr %a180 call void @finch_str_drop(ptr %a180) - br label %endif7498 -endif7498: - br label %endif7495 -endif7495: + br label %endif7502 +endif7502: + br label %endif7499 +endif7499: %t181 = load %S.gen.Abi, ptr %a10 call void @finch.drop.arr_S_gen_Leaf(ptr %a14) ret %S.gen.Abi %t181 @@ -75431,18 +75457,18 @@ entry: store { ptr, i64, i64 } { ptr @.str.4796, i64 6, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 - br i1 %t10, label %then7499, label %endif7501 -then7499: + br i1 %t10, label %then7503, label %endif7505 +then7503: %t11 = load %S.gen.Abi, ptr %a4 ret %S.gen.Abi %t11 -endif7501: +endif7505: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic7502, label %ok7503 -panic7502: + br i1 %t13, label %panic7506, label %ok7507 +panic7506: call void @finch_panic(ptr @.str.4797, i64 4318, ptr @.str.4798) unreachable -ok7503: +ok7507: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -75453,11 +75479,11 @@ ok7503: %t21 = load { ptr, i64, i64 }, ptr %t14 %t22 = extractvalue { ptr, i64, i64 } %t21, 1 %t23 = icmp uge i64 %t20, %t22 - br i1 %t23, label %range7504, label %inrange7505 -range7504: + br i1 %t23, label %range7508, label %inrange7509 +range7508: call void @finch_panic_index(ptr @.str.4799, i64 4318, i64 %t20, i64 %t22) unreachable -inrange7505: +inrange7509: %t24 = extractvalue { ptr, i64, i64 } %t21, 0 %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 %t26 = load %S.gen.StructDef, ptr %t25 @@ -75473,26 +75499,26 @@ inrange7505: %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 %t36 = load i64, ptr %t35 %t37 = icmp sgt i64 %t36, 8 - br i1 %t37, label %then7506, label %endif7508 -then7506: + br i1 %t37, label %then7510, label %endif7512 +then7510: %t38 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 %t39 = load i64, ptr %t38 %t40 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 store i64 %t39, ptr %t40 - br label %endif7508 -endif7508: + br label %endif7512 +endif7512: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic7509, label %ok7510 -panic7509: + br i1 %t42, label %panic7513, label %ok7514 +panic7513: call void @finch_panic(ptr @.str.4800, i64 4324, ptr @.str.4801) unreachable -ok7510: +ok7514: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 31 %t44 = getelementptr inbounds %S.platform.Target, ptr %t43, i32 0, i32 4 %t45 = load i1, ptr %t44 - br i1 %t45, label %then7511, label %endif7513 -then7511: + br i1 %t45, label %then7515, label %endif7517 +then7515: %t46 = load ptr, ptr %a1 %t47 = load %S.ast.Type, ptr %a2 %t48 = load %S.gen.Abi, ptr %a4 @@ -75503,56 +75529,56 @@ then7511: call void @finch.drop.S_gen_StructDef(ptr %a30) call void @finch.drop.S_gen_Abi(ptr %a4) ret %S.gen.Abi %t52 -endif7513: +endif7517: %t53 = load ptr, ptr %a1 %t54 = icmp eq ptr %t53, null - br i1 %t54, label %panic7514, label %ok7515 -panic7514: + br i1 %t54, label %panic7518, label %ok7519 +panic7518: call void @finch_panic(ptr @.str.4802, i64 4327, ptr @.str.4803) unreachable -ok7515: +ok7519: %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 31 %t56 = getelementptr inbounds %S.platform.Target, ptr %t55, i32 0, i32 1 %t57 = load i1, ptr %t56 - br i1 %t57, label %then7516, label %endif7518 -then7516: + br i1 %t57, label %then7520, label %endif7522 +then7520: %t58 = load i64, ptr %a33 %t59 = icmp eq i64 %t58, 1 - br label %logic.from7519 -logic.from7519: - br i1 %t59, label %logic.end7521, label %logic.rhs7520 -logic.rhs7520: - %t60 = load i64, ptr %a33 - %t61 = icmp eq i64 %t60, 2 - br label %logic.rend7522 -logic.rend7522: - br label %logic.end7521 -logic.end7521: - %t62 = phi i1 [ true, %logic.from7519 ], [ %t61, %logic.rend7522 ] br label %logic.from7523 logic.from7523: - br i1 %t62, label %logic.end7525, label %logic.rhs7524 + br i1 %t59, label %logic.end7525, label %logic.rhs7524 logic.rhs7524: - %t63 = load i64, ptr %a33 - %t64 = icmp eq i64 %t63, 4 + %t60 = load i64, ptr %a33 + %t61 = icmp eq i64 %t60, 2 br label %logic.rend7526 logic.rend7526: br label %logic.end7525 logic.end7525: - %t65 = phi i1 [ true, %logic.from7523 ], [ %t64, %logic.rend7526 ] + %t62 = phi i1 [ true, %logic.from7523 ], [ %t61, %logic.rend7526 ] br label %logic.from7527 logic.from7527: - br i1 %t65, label %logic.end7529, label %logic.rhs7528 + br i1 %t62, label %logic.end7529, label %logic.rhs7528 logic.rhs7528: - %t66 = load i64, ptr %a33 - %t67 = icmp eq i64 %t66, 8 + %t63 = load i64, ptr %a33 + %t64 = icmp eq i64 %t63, 4 br label %logic.rend7530 logic.rend7530: br label %logic.end7529 logic.end7529: - %t68 = phi i1 [ true, %logic.from7527 ], [ %t67, %logic.rend7530 ] - br i1 %t68, label %then7531, label %else7532 -then7531: + %t65 = phi i1 [ true, %logic.from7527 ], [ %t64, %logic.rend7530 ] + br label %logic.from7531 +logic.from7531: + br i1 %t65, label %logic.end7533, label %logic.rhs7532 +logic.rhs7532: + %t66 = load i64, ptr %a33 + %t67 = icmp eq i64 %t66, 8 + br label %logic.rend7534 +logic.rend7534: + br label %logic.end7533 +logic.end7533: + %t68 = phi i1 [ true, %logic.from7531 ], [ %t67, %logic.rend7534 ] + br i1 %t68, label %then7535, label %else7536 +then7535: %t69 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t70 = load { ptr, i64, i64 }, ptr %t69 store { ptr, i64, i64 } { ptr @.str.4804, i64 6, i64 0 }, ptr %t69 @@ -75581,11 +75607,11 @@ then7531: %t88 = load { ptr, i64, i64 }, ptr %t87 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 0, %t89 - br i1 %t90, label %range7534, label %inrange7535 -range7534: + br i1 %t90, label %range7538, label %inrange7539 +range7538: call void @finch_panic_index(ptr @.str.4806, i64 4333, i64 0, i64 %t89) unreachable -inrange7535: +inrange7539: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 0 %t93 = load { ptr, i64, i64 }, ptr %t92 @@ -75597,34 +75623,34 @@ inrange7535: store { ptr, i64, i64 } %t97, ptr %t94 store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_drop(ptr %a99) - br label %endif7533 -else7532: + br label %endif7537 +else7536: %t100 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } { ptr @.str.4807, i64 8, i64 0 }, ptr %t100 store { ptr, i64, i64 } %t101, ptr %a102 call void @finch_str_drop(ptr %a102) - br label %endif7533 -endif7533: + br label %endif7537 +endif7537: %t103 = load %S.gen.Abi, ptr %a4 call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t103 -endif7518: +endif7522: %t104 = load i64, ptr %a33 %t105 = icmp sgt i64 %t104, 16 - br label %logic.from7536 -logic.from7536: - br i1 %t105, label %logic.end7538, label %logic.rhs7537 -logic.rhs7537: + br label %logic.from7540 +logic.from7540: + br i1 %t105, label %logic.end7542, label %logic.rhs7541 +logic.rhs7541: %t106 = load i64, ptr %a33 %t107 = icmp eq i64 %t106, 0 - br label %logic.rend7539 -logic.rend7539: - br label %logic.end7538 -logic.end7538: - %t108 = phi i1 [ true, %logic.from7536 ], [ %t107, %logic.rend7539 ] - br i1 %t108, label %then7540, label %endif7542 -then7540: + br label %logic.rend7543 +logic.rend7543: + br label %logic.end7542 +logic.end7542: + %t108 = phi i1 [ true, %logic.from7540 ], [ %t107, %logic.rend7543 ] + br i1 %t108, label %then7544, label %endif7546 +then7544: %t109 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t110 = load { ptr, i64, i64 }, ptr %t109 store { ptr, i64, i64 } { ptr @.str.4808, i64 6, i64 0 }, ptr %t109 @@ -75633,7 +75659,7 @@ then7540: %t112 = load %S.gen.Abi, ptr %a4 call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t112 -endif7542: +endif7546: %t113 = load ptr, ptr %a1 %t114 = load %S.ast.Type, ptr %a2 %t115 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t113, %S.ast.Type %t114, i64 0) @@ -75663,14 +75689,14 @@ endif7542: %t135 = insertvalue { ptr, i64, i64 } %t134, i64 2, 2 store { ptr, i64, i64 } %t135, ptr %a136 store i64 0, ptr %a137 - br label %each.cond7543 -each.cond7543: + br label %each.cond7547 +each.cond7547: %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %a116, i32 0, i32 1 %t139 = load i64, ptr %t138 %t140 = load i64, ptr %a137 %t141 = icmp slt i64 %t140, %t139 - br i1 %t141, label %each.body7544, label %each.end7546 -each.body7544: + br i1 %t141, label %each.body7548, label %each.end7550 +each.body7548: %t142 = load ptr, ptr %a116 %t143 = getelementptr inbounds %S.gen.Leaf, ptr %t142, i64 %t140 %t144 = load %S.gen.Leaf, ptr %t143 @@ -75680,24 +75706,24 @@ each.body7544: store i64 %t147, ptr %a148 %t149 = load i64, ptr %a148 %t150 = icmp sgt i64 %t149, 8 - br i1 %t150, label %then7547, label %endif7549 -then7547: + br i1 %t150, label %then7551, label %endif7553 +then7551: store i64 8, ptr %a148 - br label %endif7549 -endif7549: + br label %endif7553 +endif7553: %t151 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 %t152 = load i64, ptr %t151 %t153 = load i64, ptr %a148 %t154 = icmp eq i64 %t153, 0 - br i1 %t154, label %panic7550, label %ok7551 -panic7550: + br i1 %t154, label %panic7554, label %ok7555 +panic7554: call void @finch_panic(ptr @.str.4809, i64 4352, ptr @.str.4810) unreachable -ok7551: +ok7555: %t155 = srem i64 %t152, %t153 %t156 = icmp ne i64 %t155, 0 - br i1 %t156, label %then7552, label %endif7554 -then7552: + br i1 %t156, label %then7556, label %endif7558 +then7556: %t157 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 store { ptr, i64, i64 } { ptr @.str.4811, i64 6, i64 0 }, ptr %t157 @@ -75709,7 +75735,7 @@ then7552: call void @finch.drop.arr_S_gen_Leaf(ptr %a116) call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t160 -endif7554: +endif7558: %t161 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 %t162 = load i64, ptr %t161 %t163 = sdiv i64 %t162, 8 @@ -75718,82 +75744,82 @@ endif7554: %t166 = load { ptr, i64, i64 }, ptr %a128 %t167 = extractvalue { ptr, i64, i64 } %t166, 1 %t168 = icmp uge i64 %t165, %t167 - br i1 %t168, label %range7555, label %inrange7556 -range7555: + br i1 %t168, label %range7559, label %inrange7560 +range7559: call void @finch_panic_index(ptr @.str.4812, i64 4357, i64 %t165, i64 %t167) unreachable -inrange7556: +inrange7560: %t169 = extractvalue { ptr, i64, i64 } %t166, 0 %t170 = getelementptr inbounds i64, ptr %t169, i64 %t165 %t171 = load i64, ptr %t170 %t172 = icmp eq i64 %t171, 1 - br label %logic.from7557 -logic.from7557: - br i1 %t172, label %logic.end7559, label %logic.rhs7558 -logic.rhs7558: + br label %logic.from7561 +logic.from7561: + br i1 %t172, label %logic.end7563, label %logic.rhs7562 +logic.rhs7562: %t173 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 2 %t174 = load i1, ptr %t173 %t175 = xor i1 %t174, true - br label %logic.rend7560 -logic.rend7560: - br label %logic.end7559 -logic.end7559: - %t176 = phi i1 [ true, %logic.from7557 ], [ %t175, %logic.rend7560 ] - br i1 %t176, label %then7561, label %else7562 -then7561: + br label %logic.rend7564 +logic.rend7564: + br label %logic.end7563 +logic.end7563: + %t176 = phi i1 [ true, %logic.from7561 ], [ %t175, %logic.rend7564 ] + br i1 %t176, label %then7565, label %else7566 +then7565: %t177 = load i64, ptr %a164 %t178 = load { ptr, i64, i64 }, ptr %a128 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 %t177, %t179 - br i1 %t180, label %range7564, label %inrange7565 -range7564: + br i1 %t180, label %range7568, label %inrange7569 +range7568: call void @finch_panic_index(ptr @.str.4813, i64 4358, i64 %t177, i64 %t179) unreachable -inrange7565: +inrange7569: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds i64, ptr %t181, i64 %t177 store i64 1, ptr %t182 - br label %endif7563 -else7562: + br label %endif7567 +else7566: %t183 = load i64, ptr %a164 %t184 = load { ptr, i64, i64 }, ptr %a128 %t185 = extractvalue { ptr, i64, i64 } %t184, 1 %t186 = icmp uge i64 %t183, %t185 - br i1 %t186, label %range7566, label %inrange7567 -range7566: + br i1 %t186, label %range7570, label %inrange7571 +range7570: call void @finch_panic_index(ptr @.str.4814, i64 4360, i64 %t183, i64 %t185) unreachable -inrange7567: +inrange7571: %t187 = extractvalue { ptr, i64, i64 } %t184, 0 %t188 = getelementptr inbounds i64, ptr %t187, i64 %t183 store i64 2, ptr %t188 - br label %endif7563 -endif7563: + br label %endif7567 +endif7567: %t189 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 3 %t190 = load i1, ptr %t189 - br i1 %t190, label %then7568, label %endif7570 -then7568: + br i1 %t190, label %then7572, label %endif7574 +then7572: %t191 = load i64, ptr %a164 %t192 = load { ptr, i64, i64 }, ptr %a136 %t193 = extractvalue { ptr, i64, i64 } %t192, 1 %t194 = icmp uge i64 %t191, %t193 - br i1 %t194, label %range7571, label %inrange7572 -range7571: + br i1 %t194, label %range7575, label %inrange7576 +range7575: call void @finch_panic_index(ptr @.str.4815, i64 4363, i64 %t191, i64 %t193) unreachable -inrange7572: +inrange7576: %t195 = extractvalue { ptr, i64, i64 } %t192, 0 %t196 = getelementptr inbounds i1, ptr %t195, i64 %t191 store i1 true, ptr %t196 - br label %endif7570 -endif7570: - br label %each.step7545 -each.step7545: + br label %endif7574 +endif7574: + br label %each.step7549 +each.step7549: %t197 = load i64, ptr %a137 %t198 = add i64 %t197, 1 store i64 %t198, ptr %a137 - br label %each.cond7543 -each.end7546: + br label %each.cond7547 +each.end7550: %t199 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t200 = load { ptr, i64, i64 }, ptr %t199 store { ptr, i64, i64 } { ptr @.str.4816, i64 6, i64 0 }, ptr %t199 @@ -75801,12 +75827,12 @@ each.end7546: call void @finch_str_drop(ptr %a201) %t202 = load i64, ptr %a120 store i64 0, ptr %a203 - br label %for.cond7573 -for.cond7573: + br label %for.cond7577 +for.cond7577: %t204 = load i64, ptr %a203 %t205 = icmp slt i64 %t204, %t202 - br i1 %t205, label %for.body7574, label %for.end7576 -for.body7574: + br i1 %t205, label %for.body7578, label %for.end7580 +for.body7578: %t206 = load i64, ptr %a33 %t207 = load i64, ptr %a203 %t208 = mul i64 8, %t207 @@ -75814,40 +75840,40 @@ for.body7574: store i64 %t209, ptr %a210 %t211 = load i64, ptr %a210 %t212 = icmp sgt i64 %t211, 8 - br i1 %t212, label %then7577, label %endif7579 -then7577: + br i1 %t212, label %then7581, label %endif7583 +then7581: store i64 8, ptr %a210 - br label %endif7579 -endif7579: + br label %endif7583 +endif7583: %t213 = load i64, ptr %a203 %t214 = load { ptr, i64, i64 }, ptr %a128 %t215 = extractvalue { ptr, i64, i64 } %t214, 1 %t216 = icmp uge i64 %t213, %t215 - br i1 %t216, label %range7580, label %inrange7581 -range7580: + br i1 %t216, label %range7584, label %inrange7585 +range7584: call void @finch_panic_index(ptr @.str.4817, i64 4372, i64 %t213, i64 %t215) unreachable -inrange7581: +inrange7585: %t217 = extractvalue { ptr, i64, i64 } %t214, 0 %t218 = getelementptr inbounds i64, ptr %t217, i64 %t213 %t219 = load i64, ptr %t218 %t220 = icmp eq i64 %t219, 2 - br i1 %t220, label %then7582, label %else7583 -then7582: + br i1 %t220, label %then7586, label %else7587 +then7586: %t221 = load i64, ptr %a203 %t222 = load { ptr, i64, i64 }, ptr %a136 %t223 = extractvalue { ptr, i64, i64 } %t222, 1 %t224 = icmp uge i64 %t221, %t223 - br i1 %t224, label %range7585, label %inrange7586 -range7585: + br i1 %t224, label %range7589, label %inrange7590 +range7589: call void @finch_panic_index(ptr @.str.4818, i64 4373, i64 %t221, i64 %t223) unreachable -inrange7586: +inrange7590: %t225 = extractvalue { ptr, i64, i64 } %t222, 0 %t226 = getelementptr inbounds i1, ptr %t225, i64 %t221 %t227 = load i1, ptr %t226 - br i1 %t227, label %then7587, label %else7588 -then7587: + br i1 %t227, label %then7591, label %else7592 +then7591: %t228 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i32 0, i32 1 %t230 = load i64, ptr %t229 @@ -75857,12 +75883,12 @@ then7587: %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 %t230 store { ptr, i64, i64 } { ptr @.str.4819, i64 6, i64 0 }, ptr %t233 store i64 %t231, ptr %t229 - br label %endif7589 -else7588: + br label %endif7593 +else7592: %t234 = load i64, ptr %a210 %t235 = icmp sgt i64 %t234, 4 - br i1 %t235, label %then7590, label %else7591 -then7590: + br i1 %t235, label %then7594, label %else7595 +then7594: %t236 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1 %t238 = load i64, ptr %t237 @@ -75872,8 +75898,8 @@ then7590: %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i64 %t238 store { ptr, i64, i64 } { ptr @.str.4820, i64 11, i64 0 }, ptr %t241 store i64 %t239, ptr %t237 - br label %endif7592 -else7591: + br label %endif7596 +else7595: %t242 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 %t244 = load i64, ptr %t243 @@ -75883,12 +75909,12 @@ else7591: %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 store { ptr, i64, i64 } { ptr @.str.4821, i64 5, i64 0 }, ptr %t247 store i64 %t245, ptr %t243 - br label %endif7592 -endif7592: - br label %endif7589 -endif7589: - br label %endif7584 -else7583: + br label %endif7596 +endif7596: + br label %endif7593 +endif7593: + br label %endif7588 +else7587: %t248 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 %t250 = load i64, ptr %a210 @@ -75908,30 +75934,30 @@ else7583: %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t261, i64 %t259 store { ptr, i64, i64 } %t258, ptr %t262 store i64 %t260, ptr %t249 - br label %endif7584 -endif7584: - br label %for.step7575 -for.step7575: + br label %endif7588 +endif7588: + br label %for.step7579 +for.step7579: %t263 = load i64, ptr %a203 %t264 = add i64 %t263, 1 store i64 %t264, ptr %a203 - br label %for.cond7573 -for.end7576: + br label %for.cond7577 +for.end7580: %t265 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1 %t267 = load i64, ptr %t266 %t268 = icmp eq i64 %t267, 1 - br i1 %t268, label %then7593, label %else7594 -then7593: + br i1 %t268, label %then7597, label %else7598 +then7597: %t269 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t270 = load { ptr, i64, i64 }, ptr %t269 %t271 = extractvalue { ptr, i64, i64 } %t270, 1 %t272 = icmp uge i64 0, %t271 - br i1 %t272, label %range7596, label %inrange7597 -range7596: + br i1 %t272, label %range7600, label %inrange7601 +range7600: call void @finch_panic_index(ptr @.str.4823, i64 4385, i64 0, i64 %t271) unreachable -inrange7597: +inrange7601: %t273 = extractvalue { ptr, i64, i64 } %t270, 0 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 0 %t275 = load { ptr, i64, i64 }, ptr %t274 @@ -75943,8 +75969,8 @@ inrange7597: store { ptr, i64, i64 } %t279, ptr %t276 store { ptr, i64, i64 } %t280, ptr %a281 call void @finch_str_drop(ptr %a281) - br label %endif7595 -else7594: + br label %endif7599 +else7598: %t282 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4825, i64 2, i64 0 }, ptr %a284 @@ -75967,8 +75993,8 @@ else7594: store { ptr, i64, i64 } %t296, ptr %t297 store { ptr, i64, i64 } %t298, ptr %a299 call void @finch_str_drop(ptr %a299) - br label %endif7595 -endif7595: + br label %endif7599 +endif7599: %t300 = load %S.gen.Abi, ptr %a4 call void @finch.drop.arr_bool(ptr %a136) call void @finch.drop.arr_int(ptr %a128) @@ -76043,8 +76069,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.4828, i64 4, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp eq i32 %t20, 0 - br i1 %t21, label %then7598, label %endif7600 -then7598: + br i1 %t21, label %then7602, label %endif7604 +then7602: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Type, ptr %a2 %t24 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t22, %S.ast.Type %t23) @@ -76053,8 +76079,8 @@ then7598: store { ptr, i64, i64 } %t24, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 call void @finch_str_drop(ptr %a27) - br label %endif7600 -endif7600: + br label %endif7604 +endif7604: %t28 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t29 = getelementptr inbounds %S.gen.Abi, ptr %t28, i32 0, i32 0 %t30 = load { ptr, i64, i64 }, ptr %t29 @@ -76062,16 +76088,16 @@ endif7600: store { ptr, i64, i64 } { ptr @.str.4829, i64 8, i64 0 }, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 - br i1 %t34, label %then7601, label %endif7603 -then7601: + br i1 %t34, label %then7605, label %endif7607 +then7605: %t35 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t36 = getelementptr inbounds %S.gen.Abi, ptr %t35, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 store { ptr, i64, i64 } { ptr @.str.4830, i64 6, i64 0 }, ptr %t36 store { ptr, i64, i64 } %t37, ptr %a38 call void @finch_str_drop(ptr %a38) - br label %endif7603 -endif7603: + br label %endif7607 +endif7607: %t39 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t40 = getelementptr inbounds %S.gen.Abi, ptr %t39, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 @@ -76079,8 +76105,8 @@ endif7603: store { ptr, i64, i64 } { ptr @.str.4831, i64 6, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br i1 %t45, label %then7604, label %else7605 -then7604: + br i1 %t45, label %then7608, label %else7609 +then7608: %t46 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 3 store i1 true, ptr %t46 %t47 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 @@ -76091,8 +76117,8 @@ then7604: %t50 = load i64, ptr %a5 %t51 = sub i64 %t50, 1 store i64 %t51, ptr %a5 - br label %endif7606 -else7605: + br label %endif7610 +else7609: %t52 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t53 = getelementptr inbounds %S.gen.Abi, ptr %t52, i32 0, i32 0 %t54 = load { ptr, i64, i64 }, ptr %t53 @@ -76100,8 +76126,8 @@ else7605: store { ptr, i64, i64 } { ptr @.str.4833, i64 6, i64 0 }, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 - br i1 %t58, label %then7607, label %endif7609 -then7607: + br i1 %t58, label %then7611, label %endif7613 +then7611: %t59 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t60 = getelementptr inbounds %S.gen.Abi, ptr %t59, i32 0, i32 2 %t61 = load { ptr, i64, i64 }, ptr %t60 @@ -76113,19 +76139,19 @@ then7607: store { ptr, i64, i64 } %t65, ptr %t62 store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) - br label %endif7609 -endif7609: - br label %endif7606 -endif7606: + br label %endif7613 +endif7613: + br label %endif7610 +endif7610: store i64 0, ptr %a68 - br label %each.cond7610 -each.cond7610: + br label %each.cond7614 +each.cond7614: %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = load i64, ptr %a68 %t72 = icmp slt i64 %t71, %t70 - br i1 %t72, label %each.body7611, label %each.end7613 -each.body7611: + br i1 %t72, label %each.body7615, label %each.end7617 +each.body7615: %t73 = load ptr, ptr %a3 %t74 = getelementptr inbounds %S.ast.Type, ptr %t73, i64 %t71 %t75 = load %S.ast.Type, ptr %t74 @@ -76140,20 +76166,20 @@ each.body7611: store { ptr, i64, i64 } { ptr @.str.4834, i64 6, i64 0 }, ptr %a84 %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) %t86 = icmp ne i32 %t85, 0 - br i1 %t86, label %then7614, label %else7615 -then7614: + br i1 %t86, label %then7618, label %else7619 +then7618: store i64 0, ptr %a87 store i64 0, ptr %a88 %t89 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 1 store i64 0, ptr %a90 - br label %each.cond7617 -each.cond7617: + br label %each.cond7621 +each.cond7621: %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = load i64, ptr %a90 %t94 = icmp slt i64 %t93, %t92 - br i1 %t94, label %each.body7618, label %each.end7620 -each.body7618: + br i1 %t94, label %each.body7622, label %each.end7624 +each.body7622: %t95 = load ptr, ptr %t89 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t93 %t97 = load { ptr, i64, i64 }, ptr %t96 @@ -76163,80 +76189,80 @@ each.body7618: store { ptr, i64, i64 } { ptr @.str.4836, i64 1, i64 0 }, ptr %a102 %t103 = call i32 @finch_str_starts(ptr %a100, ptr %a102) %t104 = icmp ne i32 %t103, 0 - br i1 %t104, label %then7621, label %else7622 -then7621: + br i1 %t104, label %then7625, label %else7626 +then7625: %t105 = load i64, ptr %a87 %t106 = add i64 %t105, 1 store i64 %t106, ptr %a87 - br label %endif7623 -else7622: + br label %endif7627 +else7626: %t107 = load i64, ptr %a88 %t108 = add i64 %t107, 1 store i64 %t108, ptr %a88 - br label %endif7623 -endif7623: - br label %each.step7619 -each.step7619: + br label %endif7627 +endif7627: + br label %each.step7623 +each.step7623: %t109 = load i64, ptr %a90 %t110 = add i64 %t109, 1 store i64 %t110, ptr %a90 - br label %each.cond7617 -each.end7620: + br label %each.cond7621 +each.end7624: %t111 = load ptr, ptr %a1 %t112 = icmp eq ptr %t111, null - br i1 %t112, label %panic7624, label %ok7625 -panic7624: + br i1 %t112, label %panic7628, label %ok7629 +panic7628: call void @finch_panic(ptr @.str.4837, i64 4425, ptr @.str.4838) unreachable -ok7625: +ok7629: %t113 = getelementptr inbounds %S.gen.Gen, ptr %t111, i32 0, i32 31 %t114 = getelementptr inbounds %S.platform.Target, ptr %t113, i32 0, i32 1 %t115 = load i1, ptr %t114 - br label %logic.from7626 -logic.from7626: - br i1 %t115, label %logic.end7628, label %logic.rhs7627 -logic.rhs7627: + br label %logic.from7630 +logic.from7630: + br i1 %t115, label %logic.end7632, label %logic.rhs7631 +logic.rhs7631: %t116 = load ptr, ptr %a1 %t117 = icmp eq ptr %t116, null - br i1 %t117, label %panic7629, label %ok7630 -panic7629: + br i1 %t117, label %panic7633, label %ok7634 +panic7633: call void @finch_panic(ptr @.str.4839, i64 4425, ptr @.str.4840) unreachable -ok7630: +ok7634: %t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 31 %t119 = getelementptr inbounds %S.platform.Target, ptr %t118, i32 0, i32 4 %t120 = load i1, ptr %t119 - br label %logic.rend7631 -logic.rend7631: - br label %logic.end7628 -logic.end7628: - %t121 = phi i1 [ true, %logic.from7626 ], [ %t120, %logic.rend7631 ] - br label %logic.from7632 -logic.from7632: - br i1 %t121, label %logic.end7634, label %logic.rhs7633 -logic.rhs7633: + br label %logic.rend7635 +logic.rend7635: + br label %logic.end7632 +logic.end7632: + %t121 = phi i1 [ true, %logic.from7630 ], [ %t120, %logic.rend7635 ] + br label %logic.from7636 +logic.from7636: + br i1 %t121, label %logic.end7638, label %logic.rhs7637 +logic.rhs7637: %t122 = load i64, ptr %a87 %t123 = load i64, ptr %a5 %t124 = icmp sle i64 %t122, %t123 - br label %logic.from7635 -logic.from7635: - br i1 %t124, label %logic.rhs7636, label %logic.end7637 -logic.rhs7636: + br label %logic.from7639 +logic.from7639: + br i1 %t124, label %logic.rhs7640, label %logic.end7641 +logic.rhs7640: %t125 = load i64, ptr %a88 %t126 = load i64, ptr %a6 %t127 = icmp sle i64 %t125, %t126 - br label %logic.rend7638 -logic.rend7638: - br label %logic.end7637 -logic.end7637: - %t128 = phi i1 [ false, %logic.from7635 ], [ %t127, %logic.rend7638 ] - br label %logic.rend7639 -logic.rend7639: - br label %logic.end7634 -logic.end7634: - %t129 = phi i1 [ true, %logic.from7632 ], [ %t128, %logic.rend7639 ] - br i1 %t129, label %then7640, label %else7641 -then7640: + br label %logic.rend7642 +logic.rend7642: + br label %logic.end7641 +logic.end7641: + %t128 = phi i1 [ false, %logic.from7639 ], [ %t127, %logic.rend7642 ] + br label %logic.rend7643 +logic.rend7643: + br label %logic.end7638 +logic.end7638: + %t129 = phi i1 [ true, %logic.from7636 ], [ %t128, %logic.rend7643 ] + br i1 %t129, label %then7644, label %else7645 +then7644: %t130 = load i64, ptr %a87 %t131 = load i64, ptr %a5 %t132 = sub i64 %t131, %t130 @@ -76245,43 +76271,43 @@ then7640: %t134 = load i64, ptr %a6 %t135 = sub i64 %t134, %t133 store i64 %t135, ptr %a6 - br label %endif7642 -else7641: + br label %endif7646 +else7645: %t136 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 %t137 = load { ptr, i64, i64 }, ptr %t136 store { ptr, i64, i64 } { ptr @.str.4841, i64 6, i64 0 }, ptr %t136 store { ptr, i64, i64 } %t137, ptr %a138 call void @finch_str_drop(ptr %a138) - br label %endif7642 -endif7642: - br label %endif7616 -else7615: + br label %endif7646 +endif7646: + br label %endif7620 +else7619: %t139 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 %t140 = load { ptr, i64, i64 }, ptr %t139 store { ptr, i64, i64 } %t140, ptr %a141 store { ptr, i64, i64 } { ptr @.str.4842, i64 6, i64 0 }, ptr %a142 %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) %t144 = icmp ne i32 %t143, 0 - br i1 %t144, label %then7643, label %endif7645 -then7643: + br i1 %t144, label %then7647, label %endif7649 +then7647: %t145 = load %S.ast.Type, ptr %a76 %t146 = call i1 @finch.gen.isFloat(%S.ast.Type %t145) - br i1 %t146, label %then7646, label %else7647 -then7646: + br i1 %t146, label %then7650, label %else7651 +then7650: %t147 = load i64, ptr %a6 %t148 = sub i64 %t147, 1 store i64 %t148, ptr %a6 - br label %endif7648 -else7647: + br label %endif7652 +else7651: %t149 = load i64, ptr %a5 %t150 = sub i64 %t149, 1 store i64 %t150, ptr %a5 - br label %endif7648 -endif7648: - br label %endif7645 -endif7645: - br label %endif7616 -endif7616: + br label %endif7652 +endif7652: + br label %endif7649 +endif7649: + br label %endif7620 +endif7620: %t151 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 1 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load %S.gen.Abi, ptr %a80 @@ -76296,13 +76322,13 @@ endif7616: store %S.gen.Abi %t156, ptr %t160 store i64 %t158, ptr %t152 call void @finch.drop.S_gen_Abi(ptr %a80) - br label %each.step7612 -each.step7612: + br label %each.step7616 +each.step7616: %t161 = load i64, ptr %a68 %t162 = add i64 %t161, 1 store i64 %t162, ptr %a68 - br label %each.cond7610 -each.end7613: + br label %each.cond7614 +each.end7617: %t163 = load %S.gen.Plan, ptr %a4 ret %S.gen.Plan %t163 } @@ -76384,17 +76410,17 @@ entry: store { ptr, i64, i64 } { ptr @.str.4843, i64 6, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp eq i32 %t10, 0 - br i1 %t11, label %then7649, label %endif7651 -then7649: + br i1 %t11, label %then7653, label %endif7655 +then7653: ret void -endif7651: +endif7655: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic7652, label %ok7653 -panic7652: + br i1 %t13, label %panic7656, label %ok7657 +panic7656: call void @finch_panic(ptr @.str.4844, i64 4447, ptr @.str.4845) unreachable -ok7653: +ok7657: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 3 @@ -76405,11 +76431,11 @@ ok7653: %t21 = load { ptr, i64, i64 }, ptr %t14 %t22 = extractvalue { ptr, i64, i64 } %t21, 1 %t23 = icmp uge i64 %t20, %t22 - br i1 %t23, label %range7654, label %inrange7655 -range7654: + br i1 %t23, label %range7658, label %inrange7659 +range7658: call void @finch_panic_index(ptr @.str.4846, i64 4447, i64 %t20, i64 %t22) unreachable -inrange7655: +inrange7659: %t24 = extractvalue { ptr, i64, i64 } %t21, 0 %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 %t26 = load %S.gen.StructDef, ptr %t25 @@ -76420,8 +76446,8 @@ inrange7655: %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 2 %t32 = load i1, ptr %t31 %t33 = xor i1 %t32, true - br i1 %t33, label %then7656, label %endif7658 -then7656: + br i1 %t33, label %then7660, label %endif7662 +then7660: %t34 = load ptr, ptr %a1 %t35 = load %S.ast.Node, ptr %a2 %t36 = load { ptr, i64, i64 }, ptr %a3 @@ -76467,14 +76493,14 @@ then7656: call void @finch.gen.fail(ptr %t34, %S.ast.Node %t35, { ptr, i64, i64 } %t69) store { ptr, i64, i64 } %t69, ptr %a70 call void @finch_str_drop(ptr %a70) - br label %endif7658 -endif7658: + br label %endif7662 +endif7662: %t71 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1 %t73 = load i64, ptr %t72 %t74 = icmp sgt i64 %t73, 0 - br i1 %t74, label %then7659, label %endif7661 -then7659: + br i1 %t74, label %then7663, label %endif7665 +then7663: %t75 = load ptr, ptr %a1 %t76 = load %S.ast.Node, ptr %a2 %t77 = load { ptr, i64, i64 }, ptr %a3 @@ -76528,8 +76554,8 @@ then7659: call void @finch.gen.fail(ptr %t75, %S.ast.Node %t76, { ptr, i64, i64 } %t117) store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_drop(ptr %a118) - br label %endif7661 -endif7661: + br label %endif7665 +endif7665: call void @finch.drop.S_gen_StructDef(ptr %a30) ret void } @@ -76546,51 +76572,51 @@ entry: store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isNumber(%S.ast.Type %t2) - br label %logic.from7662 -logic.from7662: - br i1 %t3, label %logic.end7664, label %logic.rhs7663 -logic.rhs7663: + br label %logic.from7666 +logic.from7666: + br i1 %t3, label %logic.end7668, label %logic.rhs7667 +logic.rhs7667: %t4 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4855, i64 4, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br label %logic.rend7665 -logic.rend7665: - br label %logic.end7664 -logic.end7664: - %t10 = phi i1 [ true, %logic.from7662 ], [ %t9, %logic.rend7665 ] - br label %logic.from7666 -logic.from7666: - br i1 %t10, label %logic.end7668, label %logic.rhs7667 -logic.rhs7667: + br label %logic.rend7669 +logic.rend7669: + br label %logic.end7668 +logic.end7668: + %t10 = phi i1 [ true, %logic.from7666 ], [ %t9, %logic.rend7669 ] + br label %logic.from7670 +logic.from7670: + br i1 %t10, label %logic.end7672, label %logic.rhs7671 +logic.rhs7671: %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.4856, i64 4, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.rend7669 -logic.rend7669: - br label %logic.end7668 -logic.end7668: - %t17 = phi i1 [ true, %logic.from7666 ], [ %t16, %logic.rend7669 ] - br label %logic.from7670 -logic.from7670: - br i1 %t17, label %logic.end7672, label %logic.rhs7671 -logic.rhs7671: + br label %logic.rend7673 +logic.rend7673: + br label %logic.end7672 +logic.end7672: + %t17 = phi i1 [ true, %logic.from7670 ], [ %t16, %logic.rend7673 ] + br label %logic.from7674 +logic.from7674: + br i1 %t17, label %logic.end7676, label %logic.rhs7675 +logic.rhs7675: %t18 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.4857, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend7673 -logic.rend7673: - br label %logic.end7672 -logic.end7672: - %t24 = phi i1 [ true, %logic.from7670 ], [ %t23, %logic.rend7673 ] + br label %logic.rend7677 +logic.rend7677: + br label %logic.end7676 +logic.end7676: + %t24 = phi i1 [ true, %logic.from7674 ], [ %t23, %logic.rend7677 ] ret i1 %t24 } @@ -76639,71 +76665,71 @@ entry: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 - br i1 %t7, label %then7674, label %endif7676 -then7674: + br i1 %t7, label %then7678, label %endif7680 +then7678: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.4858, i64 59, i64 0 }) - br label %endif7676 -endif7676: + br label %endif7680 +endif7680: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 7 %t11 = load i1, ptr %t10 - br i1 %t11, label %then7677, label %endif7679 -then7677: + br i1 %t11, label %then7681, label %endif7683 +then7681: %t12 = load ptr, ptr %a1 %t13 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t12, %S.ast.Node %t13, { ptr, i64, i64 } { ptr @.str.4859, i64 74, i64 0 }) - br label %endif7679 -endif7679: + br label %endif7683 +endif7683: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 3 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 - br i1 %t17, label %then7680, label %endif7682 -then7680: + br i1 %t17, label %then7684, label %endif7686 +then7684: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.4860, i64 29, i64 0 }) - br label %endif7682 -endif7682: + br label %endif7686 +endif7686: %t20 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load i64, ptr %t21 store i64 0, ptr %a23 - br label %for.cond7683 -for.cond7683: + br label %for.cond7687 +for.cond7687: %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, %t22 - br i1 %t25, label %for.body7684, label %for.end7686 -for.body7684: + br i1 %t25, label %for.body7688, label %for.end7690 +for.body7688: %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t27 = load i64, ptr %a23 %t28 = load { ptr, i64, i64 }, ptr %t26 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 - br i1 %t30, label %range7687, label %inrange7688 -range7687: + br i1 %t30, label %range7691, label %inrange7692 +range7691: call void @finch_panic_index(ptr @.str.4861, i64 4472, i64 %t27, i64 %t29) unreachable -inrange7688: +inrange7692: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 %t27 %t33 = load %S.ast.Type, ptr %t32 %t34 = call i1 @finch.gen.cPlain(%S.ast.Type %t33) %t35 = xor i1 %t34, true - br i1 %t35, label %then7689, label %endif7691 -then7689: + br i1 %t35, label %then7693, label %endif7695 +then7693: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load i64, ptr %a23 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range7692, label %inrange7693 -range7692: + br i1 %t41, label %range7696, label %inrange7697 +range7696: call void @finch_panic_index(ptr @.str.4862, i64 4473, i64 %t38, i64 %t40) unreachable -inrange7693: +inrange7697: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t38 %t44 = load %S.ast.Node, ptr %t43 @@ -76712,11 +76738,11 @@ inrange7693: %t47 = load { ptr, i64, i64 }, ptr %t45 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = icmp uge i64 %t46, %t48 - br i1 %t49, label %range7694, label %inrange7695 -range7694: + br i1 %t49, label %range7698, label %inrange7699 +range7698: call void @finch_panic_index(ptr @.str.4864, i64 4473, i64 %t46, i64 %t48) unreachable -inrange7695: +inrange7699: %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = getelementptr inbounds %S.ast.Type, ptr %t50, i64 %t46 %t52 = load %S.ast.Type, ptr %t51 @@ -76736,15 +76762,15 @@ inrange7695: call void @finch.gen.fail(ptr %t36, %S.ast.Node %t44, { ptr, i64, i64 } %t63) store { ptr, i64, i64 } %t63, ptr %a64 call void @finch_str_drop(ptr %a64) - br label %endif7691 -endif7691: - br label %for.step7685 -for.step7685: + br label %endif7695 +endif7695: + br label %for.step7689 +for.step7689: %t65 = load i64, ptr %a23 %t66 = add i64 %t65, 1 store i64 %t66, ptr %a23 - br label %for.cond7683 -for.end7686: + br label %for.cond7687 +for.end7690: %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t68 = getelementptr inbounds %S.ast.Type, ptr %t67, i32 0, i32 0 %t69 = load { ptr, i64, i64 }, ptr %t68 @@ -76752,21 +76778,21 @@ for.end7686: store { ptr, i64, i64 } { ptr @.str.4866, i64 4, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp eq i32 %t72, 0 - br label %logic.from7696 -logic.from7696: - br i1 %t73, label %logic.rhs7697, label %logic.end7698 -logic.rhs7697: + br label %logic.from7700 +logic.from7700: + br i1 %t73, label %logic.rhs7701, label %logic.end7702 +logic.rhs7701: %t74 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t75 = load %S.ast.Type, ptr %t74 %t76 = call i1 @finch.gen.cPlain(%S.ast.Type %t75) %t77 = xor i1 %t76, true - br label %logic.rend7699 -logic.rend7699: - br label %logic.end7698 -logic.end7698: - %t78 = phi i1 [ false, %logic.from7696 ], [ %t77, %logic.rend7699 ] - br i1 %t78, label %then7700, label %endif7702 -then7700: + br label %logic.rend7703 +logic.rend7703: + br label %logic.end7702 +logic.end7702: + %t78 = phi i1 [ false, %logic.from7700 ], [ %t77, %logic.rend7703 ] + br i1 %t78, label %then7704, label %endif7706 +then7704: %t79 = load ptr, ptr %a1 %t80 = load %S.ast.Node, ptr %a2 %t81 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 @@ -76787,35 +76813,35 @@ then7700: call void @finch.gen.fail(ptr %t79, %S.ast.Node %t80, { ptr, i64, i64 } %t93) store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) - br label %endif7702 -endif7702: + br label %endif7706 +endif7706: %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic7703, label %ok7704 -panic7703: + br i1 %t96, label %panic7707, label %ok7708 +panic7707: call void @finch_panic(ptr @.str.4869, i64 4479, ptr @.str.4870) unreachable -ok7704: +ok7708: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 15 store i64 0, ptr %a98 - br label %each.cond7705 -each.cond7705: + br label %each.cond7709 +each.cond7709: %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i32 0, i32 1 %t100 = load i64, ptr %t99 %t101 = load i64, ptr %a98 %t102 = icmp slt i64 %t101, %t100 - br i1 %t102, label %each.body7706, label %each.end7708 -each.body7706: + br i1 %t102, label %each.body7710, label %each.end7712 +each.body7710: %t103 = load ptr, ptr %t97 %t104 = getelementptr inbounds %S.gen.FnSig, ptr %t103, i64 %t101 %t105 = load %S.gen.FnSig, ptr %t104 store %S.gen.FnSig %t105, ptr %a106 %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 5 %t108 = load i1, ptr %t107 - br label %logic.from7709 -logic.from7709: - br i1 %t108, label %logic.rhs7710, label %logic.end7711 -logic.rhs7710: + br label %logic.from7713 +logic.from7713: + br i1 %t108, label %logic.rhs7714, label %logic.end7715 +logic.rhs7714: %t109 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 1 %t110 = load { ptr, i64, i64 }, ptr %t109 %t111 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 @@ -76824,13 +76850,13 @@ logic.rhs7710: store { ptr, i64, i64 } %t112, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br label %logic.rend7712 -logic.rend7712: - br label %logic.end7711 -logic.end7711: - %t117 = phi i1 [ false, %logic.from7709 ], [ %t116, %logic.rend7712 ] - br i1 %t117, label %then7713, label %endif7715 -then7713: + br label %logic.rend7716 +logic.rend7716: + br label %logic.end7715 +logic.end7715: + %t117 = phi i1 [ false, %logic.from7713 ], [ %t116, %logic.rend7716 ] + br i1 %t117, label %then7717, label %endif7719 +then7717: %t118 = load ptr, ptr %a1 %t119 = load %S.ast.Node, ptr %a2 %t120 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 @@ -76848,15 +76874,15 @@ then7713: call void @finch.gen.fail(ptr %t118, %S.ast.Node %t119, { ptr, i64, i64 } %t130) store { ptr, i64, i64 } %t130, ptr %a131 call void @finch_str_drop(ptr %a131) - br label %endif7715 -endif7715: - br label %each.step7707 -each.step7707: + br label %endif7719 +endif7719: + br label %each.step7711 +each.step7711: %t132 = load i64, ptr %a98 %t133 = add i64 %t132, 1 store i64 %t133, ptr %a98 - br label %each.cond7705 -each.end7708: + br label %each.cond7709 +each.end7712: ret void } @@ -77036,22 +77062,22 @@ entry: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 store i64 0, ptr %a11 - br label %for.cond7716 -for.cond7716: + br label %for.cond7720 +for.cond7720: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t10 - br i1 %t13, label %for.body7717, label %for.end7719 -for.body7717: + br i1 %t13, label %for.body7721, label %for.end7723 +for.body7721: %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 %t15 = load i64, ptr %a11 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range7720, label %inrange7721 -range7720: + br i1 %t18, label %range7724, label %inrange7725 +range7724: call void @finch_panic_index(ptr @.str.4873, i64 4492, i64 %t15, i64 %t17) unreachable -inrange7721: +inrange7725: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.ast.Type, ptr %t19, i64 %t15 %t21 = load %S.ast.Type, ptr %t20 @@ -77065,8 +77091,8 @@ inrange7721: store { ptr, i64, i64 } { ptr @.str.4874, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br i1 %t31, label %then7722, label %else7723 -then7722: + br i1 %t31, label %then7726, label %else7727 +then7726: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t33 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a34, i64 %t33) @@ -77117,8 +77143,8 @@ then7722: %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t67 store { ptr, i64, i64 } %t66, ptr %t70 store i64 %t68, ptr %t45 - br label %endif7724 -else7723: + br label %endif7728 +else7727: %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Type, ptr %a25 @@ -77186,16 +77212,16 @@ else7723: %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 %t120 store { ptr, i64, i64 } %t119, ptr %t123 store i64 %t121, ptr %t102 - br label %endif7724 -endif7724: + br label %endif7728 +endif7728: call void @finch.drop.S_ast_Type(ptr %a25) - br label %for.step7718 -for.step7718: + br label %for.step7722 +for.step7722: %t124 = load i64, ptr %a11 %t125 = add i64 %t124, 1 store i64 %t125, ptr %a11 - br label %for.cond7716 -for.end7719: + br label %for.cond7720 +for.end7723: %t126 = load ptr, ptr %a1 %t127 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t128 = load %S.ast.Type, ptr %t127 @@ -77254,15 +77280,15 @@ for.end7719: store { ptr, i64, i64 } { ptr @.str.4888, i64 4, i64 0 }, ptr %a174 %t175 = call i32 @finch_str_eq(ptr %a173, ptr %a174) %t176 = icmp ne i32 %t175, 0 - br i1 %t176, label %then7725, label %else7726 -then7725: + br i1 %t176, label %then7729, label %else7730 +then7729: %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a167 call void @finch.gen.emit(ptr %t177, { ptr, i64, i64 } %t178) %t179 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t179, { ptr, i64, i64 } { ptr @.str.4889, i64 8, i64 0 }) - br label %endif7727 -else7726: + br label %endif7731 +else7730: %t180 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t181 = getelementptr inbounds %S.ast.Type, ptr %t180, i32 0, i32 0 %t182 = load { ptr, i64, i64 }, ptr %t181 @@ -77270,8 +77296,8 @@ else7726: store { ptr, i64, i64 } { ptr @.str.4890, i64 4, i64 0 }, ptr %a184 %t185 = call i32 @finch_str_eq(ptr %a183, ptr %a184) %t186 = icmp ne i32 %t185, 0 - br i1 %t186, label %then7728, label %else7729 -then7728: + br i1 %t186, label %then7732, label %else7733 +then7732: %t187 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } { ptr @.str.4891, i64 2, i64 0 }, ptr %a168 store { ptr, i64, i64 } %t187, ptr %a188 @@ -77309,8 +77335,8 @@ then7728: call void @finch.gen.emit(ptr %t191, { ptr, i64, i64 } %t212) store { ptr, i64, i64 } %t212, ptr %a213 call void @finch_str_drop(ptr %a213) - br label %endif7730 -else7729: + br label %endif7734 +else7733: %t214 = load ptr, ptr %a1 %t215 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t216 = load %S.ast.Type, ptr %t215 @@ -77353,29 +77379,29 @@ else7729: call void @finch.gen.emit(ptr %t226, { ptr, i64, i64 } %t245) store { ptr, i64, i64 } %t245, ptr %a246 call void @finch_str_drop(ptr %a246) - br label %endif7730 -endif7730: - br label %endif7727 -endif7727: + br label %endif7734 +endif7734: + br label %endif7731 +endif7731: store { ptr, i64, i64 } { ptr @.str.4898, i64 0, i64 0 }, ptr %a247 %t248 = load ptr, ptr %a1 %t249 = icmp eq ptr %t248, null - br i1 %t249, label %panic7731, label %ok7732 -panic7731: + br i1 %t249, label %panic7735, label %ok7736 +panic7735: call void @finch_panic(ptr @.str.4899, i64 4517, ptr @.str.4900) unreachable -ok7732: +ok7736: %t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 31 %t251 = getelementptr inbounds %S.platform.Target, ptr %t250, i32 0, i32 1 %t252 = load i1, ptr %t251 - br i1 %t252, label %then7733, label %endif7735 -then7733: + br i1 %t252, label %then7737, label %endif7739 +then7737: %t253 = load { ptr, i64, i64 }, ptr %a247 store { ptr, i64, i64 } { ptr @.str.4901, i64 10, i64 0 }, ptr %a247 store { ptr, i64, i64 } %t253, ptr %a254 call void @finch_str_drop(ptr %a254) - br label %endif7735 -endif7735: + br label %endif7739 +endif7739: %t255 = load ptr, ptr %a1 %t256 = load %S.gen.Saved, ptr %a7 %t257 = load { ptr, i64, i64 }, ptr %a247 @@ -77466,19 +77492,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond7858 -n.cond7858: + br label %n.cond7862 +n.cond7862: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body7859, label %n.end7860 -n.body7859: + br i1 %t6, label %n.body7863, label %n.end7864 +n.body7863: %t7 = getelementptr inbounds %S.gen.Abi, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Abi(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond7858 -n.end7860: + br label %n.cond7862 +n.end7864: call void @finch_arr_free(ptr %a) ret void } @@ -77843,21 +77869,21 @@ entry: store %S.ast.Node %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic7736, label %ok7737 -panic7736: + br i1 %t5, label %panic7740, label %ok7741 +panic7740: call void @finch_panic(ptr @.str.4908, i64 4526, ptr @.str.4909) unreachable -ok7737: +ok7741: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 %t7 = load i64, ptr %a2 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range7738, label %inrange7739 -range7738: + br i1 %t10, label %range7742, label %inrange7743 +range7742: call void @finch_panic_index(ptr @.str.4910, i64 4526, i64 %t7, i64 %t9) unreachable -inrange7739: +inrange7743: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.FnSig, ptr %t11, i64 %t7 %t13 = load %S.gen.FnSig, ptr %t12 @@ -77891,11 +77917,11 @@ inrange7739: store { ptr, i64, i64 } %t37, ptr %a38 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic7740, label %ok7741 -panic7740: + br i1 %t40, label %panic7744, label %ok7745 +panic7744: call void @finch_panic(ptr @.str.4913, i64 4528, ptr @.str.4914) unreachable -ok7741: +ok7745: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 40 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %a38 @@ -77907,44 +77933,44 @@ ok7741: %t49 = load i64, ptr %t42 %t50 = load ptr, ptr %t41 store i64 0, ptr %a51 - br label %find.cond7742 -find.cond7742: + br label %find.cond7746 +find.cond7746: %t52 = load i64, ptr %a51 %t53 = icmp slt i64 %t52, %t49 - br i1 %t53, label %find.body7743, label %find.end7746 -find.body7743: + br i1 %t53, label %find.body7747, label %find.end7750 +find.body7747: %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } %t47, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 - br i1 %t59, label %find.hit7744, label %find.next7745 -find.hit7744: + br i1 %t59, label %find.hit7748, label %find.next7749 +find.hit7748: store i64 %t52, ptr %a48 - br label %find.end7746 -find.next7745: + br label %find.end7750 +find.next7749: %t60 = add i64 %t52, 1 store i64 %t60, ptr %a51 - br label %find.cond7742 -find.end7746: + br label %find.cond7746 +find.end7750: store { ptr, i64, i64 } %t47, ptr %a61 call void @finch_str_drop(ptr %a61) %t62 = load i64, ptr %a48 %t63 = icmp sge i64 %t62, 0 - br i1 %t63, label %then7747, label %endif7749 -then7747: + br i1 %t63, label %then7751, label %endif7753 +then7751: %t64 = load { ptr, i64, i64 }, ptr %a38 call void @finch.drop.S_gen_FnSig(ptr %a17) ret { ptr, i64, i64 } %t64 -endif7749: +endif7753: %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic7750, label %ok7751 -panic7750: + br i1 %t66, label %panic7754, label %ok7755 +panic7754: call void @finch_panic(ptr @.str.4916, i64 4531, ptr @.str.4917) unreachable -ok7751: +ok7755: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 40 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 %t69 = load { ptr, i64, i64 }, ptr %a38 @@ -77963,19 +77989,19 @@ ok7751: %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i32 0, i32 1 %t80 = load i64, ptr %t79 %t81 = icmp sgt i64 %t80, 0 - br label %logic.from7752 -logic.from7752: - br i1 %t81, label %logic.end7754, label %logic.rhs7753 -logic.rhs7753: + br label %logic.from7756 +logic.from7756: + br i1 %t81, label %logic.end7758, label %logic.rhs7757 +logic.rhs7757: %t82 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 9 %t83 = load i1, ptr %t82 - br label %logic.rend7755 -logic.rend7755: - br label %logic.end7754 -logic.end7754: - %t84 = phi i1 [ true, %logic.from7752 ], [ %t83, %logic.rend7755 ] - br i1 %t84, label %then7756, label %endif7758 -then7756: + br label %logic.rend7759 +logic.rend7759: + br label %logic.end7758 +logic.end7758: + %t84 = phi i1 [ true, %logic.from7756 ], [ %t83, %logic.rend7759 ] + br i1 %t84, label %then7760, label %endif7762 +then7760: %t85 = load ptr, ptr %a1 %t86 = load %S.ast.Node, ptr %a3 %t87 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 @@ -77993,90 +78019,90 @@ then7756: call void @finch.gen.fail(ptr %t85, %S.ast.Node %t86, { ptr, i64, i64 } %t97) store { ptr, i64, i64 } %t97, ptr %a98 call void @finch_str_drop(ptr %a98) - br label %endif7758 -endif7758: + br label %endif7762 +endif7762: %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 store i64 0, ptr %a100 - br label %each.cond7759 -each.cond7759: + br label %each.cond7763 +each.cond7763: %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 %t102 = load i64, ptr %t101 %t103 = load i64, ptr %a100 %t104 = icmp slt i64 %t103, %t102 - br i1 %t104, label %each.body7760, label %each.end7762 -each.body7760: + br i1 %t104, label %each.body7764, label %each.end7766 +each.body7764: %t105 = load ptr, ptr %t99 %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t103 %t107 = load %S.ast.Type, ptr %t106 store %S.ast.Type %t107, ptr %a108 %t109 = load %S.ast.Type, ptr %a108 %t110 = call i1 @finch.gen.isNumber(%S.ast.Type %t109) - br label %logic.from7763 -logic.from7763: - br i1 %t110, label %logic.end7765, label %logic.rhs7764 -logic.rhs7764: + br label %logic.from7767 +logic.from7767: + br i1 %t110, label %logic.end7769, label %logic.rhs7768 +logic.rhs7768: %t111 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.4921, i64 4, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br label %logic.rend7766 -logic.rend7766: - br label %logic.end7765 -logic.end7765: - %t117 = phi i1 [ true, %logic.from7763 ], [ %t116, %logic.rend7766 ] - br label %logic.from7767 -logic.from7767: - br i1 %t117, label %logic.end7769, label %logic.rhs7768 -logic.rhs7768: + br label %logic.rend7770 +logic.rend7770: + br label %logic.end7769 +logic.end7769: + %t117 = phi i1 [ true, %logic.from7767 ], [ %t116, %logic.rend7770 ] + br label %logic.from7771 +logic.from7771: + br i1 %t117, label %logic.end7773, label %logic.rhs7772 +logic.rhs7772: %t118 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t119 = load { ptr, i64, i64 }, ptr %t118 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.4922, i64 4, i64 0 }, ptr %a121 %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) %t123 = icmp ne i32 %t122, 0 - br label %logic.rend7770 -logic.rend7770: - br label %logic.end7769 -logic.end7769: - %t124 = phi i1 [ true, %logic.from7767 ], [ %t123, %logic.rend7770 ] - br label %logic.from7771 -logic.from7771: - br i1 %t124, label %logic.end7773, label %logic.rhs7772 -logic.rhs7772: + br label %logic.rend7774 +logic.rend7774: + br label %logic.end7773 +logic.end7773: + %t124 = phi i1 [ true, %logic.from7771 ], [ %t123, %logic.rend7774 ] + br label %logic.from7775 +logic.from7775: + br i1 %t124, label %logic.end7777, label %logic.rhs7776 +logic.rhs7776: %t125 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a127 store { ptr, i64, i64 } { ptr @.str.4923, i64 3, i64 0 }, ptr %a128 %t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128) %t130 = icmp ne i32 %t129, 0 - br label %logic.rend7774 -logic.rend7774: - br label %logic.end7773 -logic.end7773: - %t131 = phi i1 [ true, %logic.from7771 ], [ %t130, %logic.rend7774 ] - br label %logic.from7775 -logic.from7775: - br i1 %t131, label %logic.end7777, label %logic.rhs7776 -logic.rhs7776: + br label %logic.rend7778 +logic.rend7778: + br label %logic.end7777 +logic.end7777: + %t131 = phi i1 [ true, %logic.from7775 ], [ %t130, %logic.rend7778 ] + br label %logic.from7779 +logic.from7779: + br i1 %t131, label %logic.end7781, label %logic.rhs7780 +logic.rhs7780: %t132 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 store { ptr, i64, i64 } { ptr @.str.4924, i64 6, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 - br label %logic.from7778 -logic.from7778: - br i1 %t137, label %logic.rhs7779, label %logic.end7780 -logic.rhs7779: + br label %logic.from7782 +logic.from7782: + br i1 %t137, label %logic.rhs7783, label %logic.end7784 +logic.rhs7783: %t138 = load ptr, ptr %a1 %t139 = icmp eq ptr %t138, null - br i1 %t139, label %panic7781, label %ok7782 -panic7781: + br i1 %t139, label %panic7785, label %ok7786 +panic7785: call void @finch_panic(ptr @.str.4925, i64 4536, ptr @.str.4926) unreachable -ok7782: +ok7786: %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 %t141 = load ptr, ptr %a1 %t142 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 3 @@ -78087,28 +78113,28 @@ ok7782: %t147 = load { ptr, i64, i64 }, ptr %t140 %t148 = extractvalue { ptr, i64, i64 } %t147, 1 %t149 = icmp uge i64 %t146, %t148 - br i1 %t149, label %range7783, label %inrange7784 -range7783: + br i1 %t149, label %range7787, label %inrange7788 +range7787: call void @finch_panic_index(ptr @.str.4927, i64 4536, i64 %t146, i64 %t148) unreachable -inrange7784: +inrange7788: %t150 = extractvalue { ptr, i64, i64 } %t147, 0 %t151 = getelementptr inbounds %S.gen.StructDef, ptr %t150, i64 %t146 %t152 = getelementptr inbounds %S.gen.StructDef, ptr %t151, i32 0, i32 2 %t153 = load i1, ptr %t152 - br label %logic.rend7785 -logic.rend7785: - br label %logic.end7780 -logic.end7780: - %t154 = phi i1 [ false, %logic.from7778 ], [ %t153, %logic.rend7785 ] - br label %logic.rend7786 -logic.rend7786: - br label %logic.end7777 -logic.end7777: - %t155 = phi i1 [ true, %logic.from7775 ], [ %t154, %logic.rend7786 ] + br label %logic.rend7789 +logic.rend7789: + br label %logic.end7784 +logic.end7784: + %t154 = phi i1 [ false, %logic.from7782 ], [ %t153, %logic.rend7789 ] + br label %logic.rend7790 +logic.rend7790: + br label %logic.end7781 +logic.end7781: + %t155 = phi i1 [ true, %logic.from7779 ], [ %t154, %logic.rend7790 ] %t156 = xor i1 %t155, true - br i1 %t156, label %then7787, label %endif7789 -then7787: + br i1 %t156, label %then7791, label %endif7793 +then7791: %t157 = load ptr, ptr %a1 %t158 = load %S.ast.Node, ptr %a3 %t159 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 @@ -78136,22 +78162,22 @@ then7787: call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t177) store { ptr, i64, i64 } %t177, ptr %a178 call void @finch_str_drop(ptr %a178) - br label %endif7789 -endif7789: - br label %each.step7761 -each.step7761: + br label %endif7793 +endif7793: + br label %each.step7765 +each.step7765: %t179 = load i64, ptr %a100 %t180 = add i64 %t179, 1 store i64 %t180, ptr %a100 - br label %each.cond7759 -each.end7762: + br label %each.cond7763 +each.end7766: %t181 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t182 = load %S.ast.Type, ptr %t181 %t183 = call i1 @finch.gen.isNumber(%S.ast.Type %t182) - br label %logic.from7790 -logic.from7790: - br i1 %t183, label %logic.end7792, label %logic.rhs7791 -logic.rhs7791: + br label %logic.from7794 +logic.from7794: + br i1 %t183, label %logic.end7796, label %logic.rhs7795 +logic.rhs7795: %t184 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t185 = getelementptr inbounds %S.ast.Type, ptr %t184, i32 0, i32 0 %t186 = load { ptr, i64, i64 }, ptr %t185 @@ -78159,15 +78185,15 @@ logic.rhs7791: store { ptr, i64, i64 } { ptr @.str.4930, i64 4, i64 0 }, ptr %a188 %t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188) %t190 = icmp ne i32 %t189, 0 - br label %logic.rend7793 -logic.rend7793: - br label %logic.end7792 -logic.end7792: - %t191 = phi i1 [ true, %logic.from7790 ], [ %t190, %logic.rend7793 ] - br label %logic.from7794 -logic.from7794: - br i1 %t191, label %logic.end7796, label %logic.rhs7795 -logic.rhs7795: + br label %logic.rend7797 +logic.rend7797: + br label %logic.end7796 +logic.end7796: + %t191 = phi i1 [ true, %logic.from7794 ], [ %t190, %logic.rend7797 ] + br label %logic.from7798 +logic.from7798: + br i1 %t191, label %logic.end7800, label %logic.rhs7799 +logic.rhs7799: %t192 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i32 0, i32 0 %t194 = load { ptr, i64, i64 }, ptr %t193 @@ -78175,15 +78201,15 @@ logic.rhs7795: store { ptr, i64, i64 } { ptr @.str.4931, i64 4, i64 0 }, ptr %a196 %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) %t198 = icmp ne i32 %t197, 0 - br label %logic.rend7797 -logic.rend7797: - br label %logic.end7796 -logic.end7796: - %t199 = phi i1 [ true, %logic.from7794 ], [ %t198, %logic.rend7797 ] - br label %logic.from7798 -logic.from7798: - br i1 %t199, label %logic.end7800, label %logic.rhs7799 -logic.rhs7799: + br label %logic.rend7801 +logic.rend7801: + br label %logic.end7800 +logic.end7800: + %t199 = phi i1 [ true, %logic.from7798 ], [ %t198, %logic.rend7801 ] + br label %logic.from7802 +logic.from7802: + br i1 %t199, label %logic.end7804, label %logic.rhs7803 +logic.rhs7803: %t200 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 %t202 = load { ptr, i64, i64 }, ptr %t201 @@ -78191,15 +78217,15 @@ logic.rhs7799: store { ptr, i64, i64 } { ptr @.str.4932, i64 3, i64 0 }, ptr %a204 %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) %t206 = icmp ne i32 %t205, 0 - br label %logic.rend7801 -logic.rend7801: - br label %logic.end7800 -logic.end7800: - %t207 = phi i1 [ true, %logic.from7798 ], [ %t206, %logic.rend7801 ] - br label %logic.from7802 -logic.from7802: - br i1 %t207, label %logic.end7804, label %logic.rhs7803 -logic.rhs7803: + br label %logic.rend7805 +logic.rend7805: + br label %logic.end7804 +logic.end7804: + %t207 = phi i1 [ true, %logic.from7802 ], [ %t206, %logic.rend7805 ] + br label %logic.from7806 +logic.from7806: + br i1 %t207, label %logic.end7808, label %logic.rhs7807 +logic.rhs7807: %t208 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t209 = getelementptr inbounds %S.ast.Type, ptr %t208, i32 0, i32 0 %t210 = load { ptr, i64, i64 }, ptr %t209 @@ -78207,15 +78233,15 @@ logic.rhs7803: store { ptr, i64, i64 } { ptr @.str.4933, i64 4, i64 0 }, ptr %a212 %t213 = call i32 @finch_str_eq(ptr %a211, ptr %a212) %t214 = icmp ne i32 %t213, 0 - br label %logic.rend7805 -logic.rend7805: - br label %logic.end7804 -logic.end7804: - %t215 = phi i1 [ true, %logic.from7802 ], [ %t214, %logic.rend7805 ] - br label %logic.from7806 -logic.from7806: - br i1 %t215, label %logic.end7808, label %logic.rhs7807 -logic.rhs7807: + br label %logic.rend7809 +logic.rend7809: + br label %logic.end7808 +logic.end7808: + %t215 = phi i1 [ true, %logic.from7806 ], [ %t214, %logic.rend7809 ] + br label %logic.from7810 +logic.from7810: + br i1 %t215, label %logic.end7812, label %logic.rhs7811 +logic.rhs7811: %t216 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t217 = getelementptr inbounds %S.ast.Type, ptr %t216, i32 0, i32 0 %t218 = load { ptr, i64, i64 }, ptr %t217 @@ -78223,17 +78249,17 @@ logic.rhs7807: store { ptr, i64, i64 } { ptr @.str.4934, i64 6, i64 0 }, ptr %a220 %t221 = call i32 @finch_str_eq(ptr %a219, ptr %a220) %t222 = icmp ne i32 %t221, 0 - br label %logic.from7809 -logic.from7809: - br i1 %t222, label %logic.rhs7810, label %logic.end7811 -logic.rhs7810: + br label %logic.from7813 +logic.from7813: + br i1 %t222, label %logic.rhs7814, label %logic.end7815 +logic.rhs7814: %t223 = load ptr, ptr %a1 %t224 = icmp eq ptr %t223, null - br i1 %t224, label %panic7812, label %ok7813 -panic7812: + br i1 %t224, label %panic7816, label %ok7817 +panic7816: call void @finch_panic(ptr @.str.4935, i64 4540, ptr @.str.4936) unreachable -ok7813: +ok7817: %t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 16 %t226 = load ptr, ptr %a1 %t227 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 @@ -78246,28 +78272,28 @@ ok7813: %t234 = load { ptr, i64, i64 }, ptr %t225 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 %t233, %t235 - br i1 %t236, label %range7814, label %inrange7815 -range7814: + br i1 %t236, label %range7818, label %inrange7819 +range7818: call void @finch_panic_index(ptr @.str.4937, i64 4540, i64 %t233, i64 %t235) unreachable -inrange7815: +inrange7819: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds %S.gen.StructDef, ptr %t237, i64 %t233 %t239 = getelementptr inbounds %S.gen.StructDef, ptr %t238, i32 0, i32 2 %t240 = load i1, ptr %t239 - br label %logic.rend7816 -logic.rend7816: - br label %logic.end7811 -logic.end7811: - %t241 = phi i1 [ false, %logic.from7809 ], [ %t240, %logic.rend7816 ] - br label %logic.rend7817 -logic.rend7817: - br label %logic.end7808 -logic.end7808: - %t242 = phi i1 [ true, %logic.from7806 ], [ %t241, %logic.rend7817 ] + br label %logic.rend7820 +logic.rend7820: + br label %logic.end7815 +logic.end7815: + %t241 = phi i1 [ false, %logic.from7813 ], [ %t240, %logic.rend7820 ] + br label %logic.rend7821 +logic.rend7821: + br label %logic.end7812 +logic.end7812: + %t242 = phi i1 [ true, %logic.from7810 ], [ %t241, %logic.rend7821 ] %t243 = xor i1 %t242, true - br i1 %t243, label %then7818, label %endif7820 -then7818: + br i1 %t243, label %then7822, label %endif7824 +then7822: %t244 = load ptr, ptr %a1 %t245 = load %S.ast.Node, ptr %a3 %t246 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 @@ -78296,8 +78322,8 @@ then7818: call void @finch.gen.fail(ptr %t244, %S.ast.Node %t245, { ptr, i64, i64 } %t265) store { ptr, i64, i64 } %t265, ptr %a266 call void @finch_str_drop(ptr %a266) - br label %endif7820 -endif7820: + br label %endif7824 +endif7824: %t267 = load ptr, ptr %a1 %t268 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t269 = load %S.ast.Type, ptr %t268 @@ -78313,8 +78339,8 @@ endif7820: store { ptr, i64, i64 } { ptr @.str.4940, i64 0, i64 0 }, ptr %a279 %t280 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 %t281 = load i1, ptr %t280 - br i1 %t281, label %then7821, label %endif7823 -then7821: + br i1 %t281, label %then7825, label %endif7827 +then7825: %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t283 = load ptr, ptr %a1 %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 @@ -78344,29 +78370,29 @@ then7821: store { ptr, i64, i64 } %t301, ptr %a302 call void @finch_str_drop(ptr %a302) store i64 1, ptr %a278 - br label %endif7823 -endif7823: + br label %endif7827 +endif7827: store { ptr, i64, i64 } zeroinitializer, ptr %a303 %t304 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t304, i32 0, i32 1 %t306 = load i64, ptr %t305 store i64 0, ptr %a307 - br label %for.cond7824 -for.cond7824: + br label %for.cond7828 +for.cond7828: %t308 = load i64, ptr %a307 %t309 = icmp slt i64 %t308, %t306 - br i1 %t309, label %for.body7825, label %for.end7827 -for.body7825: + br i1 %t309, label %for.body7829, label %for.end7831 +for.body7829: %t310 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t311 = load i64, ptr %a307 %t312 = load { ptr, i64, i64 }, ptr %t310 %t313 = extractvalue { ptr, i64, i64 } %t312, 1 %t314 = icmp uge i64 %t311, %t313 - br i1 %t314, label %range7828, label %inrange7829 -range7828: + br i1 %t314, label %range7832, label %inrange7833 +range7832: call void @finch_panic_index(ptr @.str.4944, i64 4555, i64 %t311, i64 %t313) unreachable -inrange7829: +inrange7833: %t315 = extractvalue { ptr, i64, i64 } %t312, 0 %t316 = getelementptr inbounds %S.ast.Type, ptr %t315, i64 %t311 %t317 = load %S.ast.Type, ptr %t316 @@ -78379,11 +78405,11 @@ inrange7829: %t324 = load { ptr, i64, i64 }, ptr %t322 %t325 = extractvalue { ptr, i64, i64 } %t324, 1 %t326 = icmp uge i64 %t323, %t325 - br i1 %t326, label %range7830, label %inrange7831 -range7830: + br i1 %t326, label %range7834, label %inrange7835 +range7834: call void @finch_panic_index(ptr @.str.4945, i64 4556, i64 %t323, i64 %t325) unreachable -inrange7831: +inrange7835: %t327 = extractvalue { ptr, i64, i64 } %t324, 0 %t328 = getelementptr inbounds %S.gen.Abi, ptr %t327, i64 %t323 %t329 = load %S.gen.Abi, ptr %t328 @@ -78397,8 +78423,8 @@ inrange7831: store { ptr, i64, i64 } { ptr @.str.4946, i64 6, i64 0 }, ptr %a337 %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) %t339 = icmp ne i32 %t338, 0 - br i1 %t339, label %then7832, label %else7833 -then7832: + br i1 %t339, label %then7836, label %else7837 +then7836: %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t341 = load ptr, ptr %a1 %t342 = load %S.ast.Type, ptr %a321 @@ -78497,16 +78523,16 @@ then7832: %t416 = load i64, ptr %a278 %t417 = add i64 %t416, 1 store i64 %t417, ptr %a278 - br label %endif7834 -else7833: + br label %endif7838 +else7837: %t418 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 %t419 = load { ptr, i64, i64 }, ptr %t418 store { ptr, i64, i64 } %t419, ptr %a420 store { ptr, i64, i64 } { ptr @.str.4952, i64 8, i64 0 }, ptr %a421 %t422 = call i32 @finch_str_eq(ptr %a420, ptr %a421) %t423 = icmp ne i32 %t422, 0 - br i1 %t423, label %then7835, label %else7836 -then7835: + br i1 %t423, label %then7839, label %else7840 +then7839: %t424 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t425 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a426, i64 %t425) @@ -78570,16 +78596,16 @@ then7835: %t471 = load i64, ptr %a278 %t472 = add i64 %t471, 1 store i64 %t472, ptr %a278 - br label %endif7837 -else7836: + br label %endif7841 +else7840: %t473 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 %t474 = load { ptr, i64, i64 }, ptr %t473 store { ptr, i64, i64 } %t474, ptr %a475 store { ptr, i64, i64 } { ptr @.str.4956, i64 6, i64 0 }, ptr %a476 %t477 = call i32 @finch_str_eq(ptr %a475, ptr %a476) %t478 = icmp ne i32 %t477, 0 - br i1 %t478, label %then7838, label %else7839 -then7838: + br i1 %t478, label %then7842, label %else7843 +then7842: %t479 = load ptr, ptr %a1 %t480 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t479, { ptr, i64, i64 } { ptr @.str.4957, i64 9, i64 0 }) store { ptr, i64, i64 } %t480, ptr %a481 @@ -78587,23 +78613,23 @@ then7838: %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 %t484 = load i64, ptr %t483 store i64 0, ptr %a485 - br label %for.cond7841 -for.cond7841: + br label %for.cond7845 +for.cond7845: %t486 = load i64, ptr %a485 %t487 = icmp slt i64 %t486, %t484 - br i1 %t487, label %for.body7842, label %for.end7844 -for.body7842: + br i1 %t487, label %for.body7846, label %for.end7848 +for.body7846: %t488 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t489 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 %t490 = load i64, ptr %a485 %t491 = load { ptr, i64, i64 }, ptr %t489 %t492 = extractvalue { ptr, i64, i64 } %t491, 1 %t493 = icmp uge i64 %t490, %t492 - br i1 %t493, label %range7845, label %inrange7846 -range7845: + br i1 %t493, label %range7849, label %inrange7850 +range7849: call void @finch_panic_index(ptr @.str.4958, i64 4568, i64 %t490, i64 %t492) unreachable -inrange7846: +inrange7850: %t494 = extractvalue { ptr, i64, i64 } %t491, 0 %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i64 %t490 %t496 = load { ptr, i64, i64 }, ptr %t495 @@ -78635,11 +78661,11 @@ inrange7846: %t517 = load { ptr, i64, i64 }, ptr %t515 %t518 = extractvalue { ptr, i64, i64 } %t517, 1 %t519 = icmp uge i64 %t516, %t518 - br i1 %t519, label %range7847, label %inrange7848 -range7847: + br i1 %t519, label %range7851, label %inrange7852 +range7851: call void @finch_panic_index(ptr @.str.4960, i64 4569, i64 %t516, i64 %t518) unreachable -inrange7848: +inrange7852: %t520 = extractvalue { ptr, i64, i64 } %t517, 0 %t521 = getelementptr inbounds { ptr, i64, i64 }, ptr %t520, i64 %t516 %t522 = load { ptr, i64, i64 }, ptr %t521 @@ -78687,13 +78713,13 @@ inrange7848: %t556 = load i64, ptr %a278 %t557 = add i64 %t556, 1 store i64 %t557, ptr %a278 - br label %for.step7843 -for.step7843: + br label %for.step7847 +for.step7847: %t558 = load i64, ptr %a485 %t559 = add i64 %t558, 1 store i64 %t559, ptr %a485 - br label %for.cond7841 -for.end7844: + br label %for.cond7845 +for.end7848: %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 %t561 = load ptr, ptr %a1 %t562 = load %S.ast.Type, ptr %a321 @@ -78728,8 +78754,8 @@ for.end7844: store { ptr, i64, i64 } %t581, ptr %t585 store i64 %t583, ptr %t560 call void @finch_str_drop(ptr %a481) - br label %endif7840 -else7839: + br label %endif7844 +else7843: %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t587 = load ptr, ptr %a1 %t588 = load %S.ast.Type, ptr %a321 @@ -78800,21 +78826,21 @@ else7839: %t639 = load i64, ptr %a278 %t640 = add i64 %t639, 1 store i64 %t640, ptr %a278 - br label %endif7840 -endif7840: - br label %endif7837 -endif7837: - br label %endif7834 -endif7834: + br label %endif7844 +endif7844: + br label %endif7841 +endif7841: + br label %endif7838 +endif7838: call void @finch.drop.S_gen_Abi(ptr %a333) call void @finch.drop.S_ast_Type(ptr %a321) - br label %for.step7826 -for.step7826: + br label %for.step7830 +for.step7830: %t641 = load i64, ptr %a307 %t642 = add i64 %t641, 1 store i64 %t642, ptr %a307 - br label %for.cond7824 -for.end7827: + br label %for.cond7828 +for.end7831: %t643 = load ptr, ptr %a1 %t644 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t645 = load %S.ast.Type, ptr %t644 @@ -78872,19 +78898,19 @@ for.end7827: store { ptr, i64, i64 } { ptr @.str.4973, i64 4, i64 0 }, ptr %a690 %t691 = call i32 @finch_str_eq(ptr %a689, ptr %a690) %t692 = icmp ne i32 %t691, 0 - br i1 %t692, label %then7849, label %else7850 -then7849: + br i1 %t692, label %then7853, label %else7854 +then7853: %t693 = load ptr, ptr %a1 %t694 = load { ptr, i64, i64 }, ptr %a684 call void @finch.gen.emit(ptr %t693, { ptr, i64, i64 } %t694) %t695 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t695, { ptr, i64, i64 } { ptr @.str.4974, i64 8, i64 0 }) - br label %endif7851 -else7850: + br label %endif7855 +else7854: %t696 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 %t697 = load i1, ptr %t696 - br i1 %t697, label %then7852, label %else7853 -then7852: + br i1 %t697, label %then7856, label %else7857 +then7856: %t698 = load ptr, ptr %a1 %t699 = load ptr, ptr %a1 %t700 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 @@ -78901,8 +78927,8 @@ then7852: call void @finch_str_drop(ptr %a708) %t709 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t709, { ptr, i64, i64 } { ptr @.str.4975, i64 8, i64 0 }) - br label %endif7854 -else7853: + br label %endif7858 +else7857: %t710 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 %t711 = getelementptr inbounds %S.gen.Abi, ptr %t710, i32 0, i32 0 %t712 = load { ptr, i64, i64 }, ptr %t711 @@ -78910,8 +78936,8 @@ else7853: store { ptr, i64, i64 } { ptr @.str.4976, i64 6, i64 0 }, ptr %a714 %t715 = call i32 @finch_str_eq(ptr %a713, ptr %a714) %t716 = icmp ne i32 %t715, 0 - br i1 %t716, label %then7855, label %else7856 -then7855: + br i1 %t716, label %then7859, label %else7860 +then7859: %t717 = load ptr, ptr %a1 %t718 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t717, { ptr, i64, i64 } { ptr @.str.4977, i64 9, i64 0 }) store { ptr, i64, i64 } %t718, ptr %a719 @@ -78961,8 +78987,8 @@ then7855: store { ptr, i64, i64 } %t755, ptr %a756 call void @finch_str_drop(ptr %a756) call void @finch_str_drop(ptr %a719) - br label %endif7857 -else7856: + br label %endif7861 +else7860: %t757 = load ptr, ptr %a1 %t758 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t759 = load %S.ast.Type, ptr %t758 @@ -79002,12 +79028,12 @@ else7856: call void @finch.gen.emit(ptr %t763, { ptr, i64, i64 } %t786) store { ptr, i64, i64 } %t786, ptr %a787 call void @finch_str_drop(ptr %a787) - br label %endif7857 -endif7857: - br label %endif7854 -endif7854: - br label %endif7851 -endif7851: + br label %endif7861 +endif7861: + br label %endif7858 +endif7858: + br label %endif7855 +endif7855: %t788 = load ptr, ptr %a1 %t789 = load %S.gen.Saved, ptr %a276 %t790 = load { ptr, i64, i64 }, ptr %a685 @@ -79182,21 +79208,21 @@ entry: store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic7861, label %ok7862 -panic7861: + br i1 %t5, label %panic7865, label %ok7866 +panic7865: call void @finch_panic(ptr @.str.4988, i64 4601, ptr @.str.4989) unreachable -ok7862: +ok7866: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range7863, label %inrange7864 -range7863: + br i1 %t10, label %range7867, label %inrange7868 +range7867: call void @finch_panic_index(ptr @.str.4990, i64 4601, i64 %t7, i64 %t9) unreachable -inrange7864: +inrange7868: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.EnumDef, ptr %t12 @@ -79214,11 +79240,11 @@ inrange7864: %t24 = load { ptr, i64, i64 }, ptr %t23 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 0, %t25 - br i1 %t26, label %range7865, label %inrange7866 -range7865: + br i1 %t26, label %range7869, label %inrange7870 +range7869: call void @finch_panic_index(ptr @.str.4991, i64 4603, i64 0, i64 %t25) unreachable -inrange7866: +inrange7870: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 0 %t29 = load %S.ast.Node, ptr %t28 @@ -79228,18 +79254,18 @@ inrange7866: %t33 = load %S.ast.Type, ptr %t32 %t34 = call i1 @finch.gen.isInt(%S.ast.Type %t33) %t35 = xor i1 %t34, true - br i1 %t35, label %then7867, label %endif7869 -then7867: + br i1 %t35, label %then7871, label %endif7873 +then7871: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 0, %t39 - br i1 %t40, label %range7870, label %inrange7871 -range7870: + br i1 %t40, label %range7874, label %inrange7875 +range7874: call void @finch_panic_index(ptr @.str.4992, i64 4605, i64 0, i64 %t39) unreachable -inrange7871: +inrange7875: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 0 %t43 = load %S.ast.Node, ptr %t42 @@ -79263,8 +79289,8 @@ inrange7871: call void @finch.gen.fail(ptr %t36, %S.ast.Node %t43, { ptr, i64, i64 } %t58) store { ptr, i64, i64 } %t58, ptr %a59 call void @finch_str_drop(ptr %a59) - br label %endif7869 -endif7869: + br label %endif7873 +endif7873: %t60 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4994, i64 4, i64 0 }, 0 %t61 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 @@ -79281,8 +79307,8 @@ endif7869: store %S.ast.Type %t72, ptr %a73 %t74 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 3 %t75 = load i1, ptr %t74 - br i1 %t75, label %then7872, label %endif7874 -then7872: + br i1 %t75, label %then7876, label %endif7878 +then7876: %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 %t78 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 @@ -79293,39 +79319,39 @@ then7872: %t83 = load i64, ptr %t77 %t84 = load ptr, ptr %t76 store i64 0, ptr %a85 - br label %find.cond7875 -find.cond7875: + br label %find.cond7879 +find.cond7879: %t86 = load i64, ptr %a85 %t87 = icmp slt i64 %t86, %t83 - br i1 %t87, label %find.body7876, label %find.end7879 -find.body7876: + br i1 %t87, label %find.body7880, label %find.end7883 +find.body7880: %t88 = getelementptr inbounds i64, ptr %t84, i64 %t86 %t89 = load i64, ptr %t88 %t90 = icmp eq i64 %t89, %t81 - br i1 %t90, label %find.hit7877, label %find.next7878 -find.hit7877: + br i1 %t90, label %find.hit7881, label %find.next7882 +find.hit7881: store i64 %t86, ptr %a82 - br label %find.end7879 -find.next7878: + br label %find.end7883 +find.next7882: %t91 = add i64 %t86, 1 store i64 %t91, ptr %a85 - br label %find.cond7875 -find.end7879: + br label %find.cond7879 +find.end7883: %t92 = load i64, ptr %a82 %t93 = icmp sge i64 %t92, 0 %t94 = xor i1 %t93, true - br i1 %t94, label %then7880, label %endif7882 -then7880: + br i1 %t94, label %then7884, label %endif7886 +then7884: %t95 = load ptr, ptr %a1 %t96 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t97 = load { ptr, i64, i64 }, ptr %t96 %t98 = extractvalue { ptr, i64, i64 } %t97, 1 %t99 = icmp uge i64 0, %t98 - br i1 %t99, label %range7883, label %inrange7884 -range7883: + br i1 %t99, label %range7887, label %inrange7888 +range7887: call void @finch_panic_index(ptr @.str.4996, i64 4610, i64 0, i64 %t98) unreachable -inrange7884: +inrange7888: %t100 = extractvalue { ptr, i64, i64 } %t97, 0 %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 0 %t102 = load %S.ast.Node, ptr %t101 @@ -79346,8 +79372,8 @@ inrange7884: call void @finch.gen.fail(ptr %t95, %S.ast.Node %t102, { ptr, i64, i64 } %t115) store { ptr, i64, i64 } %t115, ptr %a116 call void @finch_str_drop(ptr %a116) - br label %endif7882 -endif7882: + br label %endif7886 +endif7886: %t117 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t118 = load { ptr, i64, i64 }, ptr %t117 store { ptr, i64, i64 } %t118, ptr %a119 @@ -79363,7 +79389,7 @@ endif7882: call void @finch.drop.S_gen_Val(ptr %a31) call void @finch.drop.S_gen_EnumDef(ptr %a17) ret %S.gen.Val %t127 -endif7874: +endif7878: %t128 = load ptr, ptr %a1 %t129 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t130 = load { ptr, i64, i64 }, ptr %t129 @@ -79379,12 +79405,12 @@ endif7874: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 %t140 = load i64, ptr %t139 store i64 0, ptr %a141 - br label %for.cond7885 -for.cond7885: + br label %for.cond7889 +for.cond7889: %t142 = load i64, ptr %a141 %t143 = icmp slt i64 %t142, %t140 - br i1 %t143, label %for.body7886, label %for.end7888 -for.body7886: + br i1 %t143, label %for.body7890, label %for.end7892 +for.body7890: %t144 = load ptr, ptr %a1 %t145 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } { ptr @.str.5000, i64 12, i64 0 }, ptr %a147 @@ -79402,11 +79428,11 @@ for.body7886: %t157 = load { ptr, i64, i64 }, ptr %t155 %t158 = extractvalue { ptr, i64, i64 } %t157, 1 %t159 = icmp uge i64 %t156, %t158 - br i1 %t159, label %range7889, label %inrange7890 -range7889: + br i1 %t159, label %range7893, label %inrange7894 +range7893: call void @finch_panic_index(ptr @.str.5002, i64 4617, i64 %t156, i64 %t158) unreachable -inrange7890: +inrange7894: %t160 = extractvalue { ptr, i64, i64 } %t157, 0 %t161 = getelementptr inbounds i64, ptr %t160, i64 %t156 %t162 = load i64, ptr %t161 @@ -79426,8 +79452,8 @@ inrange7890: store { ptr, i64, i64 } %t171, ptr %a173 %t174 = load i64, ptr %a141 %t175 = icmp eq i64 %t174, 0 - br i1 %t175, label %then7891, label %else7892 -then7891: + br i1 %t175, label %then7895, label %else7896 +then7895: %t176 = load { ptr, i64, i64 }, ptr %a173 store { ptr, i64, i64 } %t176, ptr %a177 call void @finch_str_copy(ptr %a178, ptr %a177) @@ -79436,8 +79462,8 @@ then7891: store { ptr, i64, i64 } %t179, ptr %a137 store { ptr, i64, i64 } %t180, ptr %a181 call void @finch_str_drop(ptr %a181) - br label %endif7893 -else7892: + br label %endif7897 +else7896: %t182 = load ptr, ptr %a1 %t183 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } { ptr @.str.5003, i64 6, i64 0 }, ptr %a185 @@ -79464,16 +79490,16 @@ else7892: store { ptr, i64, i64 } %t199, ptr %a137 store { ptr, i64, i64 } %t201, ptr %a202 call void @finch_str_drop(ptr %a202) - br label %endif7893 -endif7893: + br label %endif7897 +endif7897: call void @finch_str_drop(ptr %a173) - br label %for.step7887 -for.step7887: + br label %for.step7891 +for.step7891: %t203 = load i64, ptr %a141 %t204 = add i64 %t203, 1 store i64 %t204, ptr %a141 - br label %for.cond7885 -for.end7888: + br label %for.cond7889 +for.end7892: %t205 = load ptr, ptr %a1 %t206 = load ptr, ptr %a1 %t207 = load { ptr, i64, i64 }, ptr %a137 @@ -79549,102 +79575,102 @@ entry: store { ptr, i64, i64 } { ptr @.str.5010, i64 4, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br label %logic.from7894 -logic.from7894: - br i1 %t8, label %logic.end7896, label %logic.rhs7895 -logic.rhs7895: + br label %logic.from7898 +logic.from7898: + br i1 %t8, label %logic.end7900, label %logic.rhs7899 +logic.rhs7899: %t9 = load %S.ast.Type, ptr %a2 %t10 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t9) - br label %logic.rend7897 -logic.rend7897: - br label %logic.end7896 -logic.end7896: - %t11 = phi i1 [ true, %logic.from7894 ], [ %t10, %logic.rend7897 ] - br i1 %t11, label %then7898, label %endif7900 -then7898: + br label %logic.rend7901 +logic.rend7901: + br label %logic.end7900 +logic.end7900: + %t11 = phi i1 [ true, %logic.from7898 ], [ %t10, %logic.rend7901 ] + br i1 %t11, label %then7902, label %endif7904 +then7902: %t12 = load %S.ast.Type, ptr %a2 %t13 = call i64 @finch.gen.bitsOf(%S.ast.Type %t12) %t14 = icmp slt i64 %t13, 32 - br i1 %t14, label %then7901, label %endif7903 -then7901: + br i1 %t14, label %then7905, label %endif7907 +then7905: ret { ptr, i64, i64 } { ptr @.str.5011, i64 8, i64 0 } -endif7903: - br label %endif7900 -endif7900: +endif7907: + br label %endif7904 +endif7904: %t15 = load %S.ast.Type, ptr %a2 %t16 = call i1 @finch.gen.isSigned(%S.ast.Type %t15) - br label %logic.from7904 -logic.from7904: - br i1 %t16, label %logic.end7906, label %logic.rhs7905 -logic.rhs7905: + br label %logic.from7908 +logic.from7908: + br i1 %t16, label %logic.end7910, label %logic.rhs7909 +logic.rhs7909: %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5012, i64 4, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br label %logic.from7907 -logic.from7907: - br i1 %t22, label %logic.rhs7908, label %logic.end7909 -logic.rhs7908: + br label %logic.from7911 +logic.from7911: + br i1 %t22, label %logic.rhs7912, label %logic.end7913 +logic.rhs7912: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic7910, label %ok7911 -panic7910: + br i1 %t24, label %panic7914, label %ok7915 +panic7914: call void @finch_panic(ptr @.str.5013, i64 4637, ptr @.str.5014) unreachable -ok7911: +ok7915: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 31 %t26 = load %S.platform.Target, ptr %t25 %t27 = call i1 @finch.platform.charIsSigned(%S.platform.Target %t26) - br label %logic.rend7912 -logic.rend7912: - br label %logic.end7909 -logic.end7909: - %t28 = phi i1 [ false, %logic.from7907 ], [ %t27, %logic.rend7912 ] - br label %logic.rend7913 -logic.rend7913: - br label %logic.end7906 -logic.end7906: - %t29 = phi i1 [ true, %logic.from7904 ], [ %t28, %logic.rend7913 ] - br label %logic.from7914 -logic.from7914: - br i1 %t29, label %logic.rhs7915, label %logic.end7916 -logic.rhs7915: + br label %logic.rend7916 +logic.rend7916: + br label %logic.end7913 +logic.end7913: + %t28 = phi i1 [ false, %logic.from7911 ], [ %t27, %logic.rend7916 ] + br label %logic.rend7917 +logic.rend7917: + br label %logic.end7910 +logic.end7910: + %t29 = phi i1 [ true, %logic.from7908 ], [ %t28, %logic.rend7917 ] + br label %logic.from7918 +logic.from7918: + br i1 %t29, label %logic.rhs7919, label %logic.end7920 +logic.rhs7919: %t30 = load %S.ast.Type, ptr %a2 %t31 = call i64 @finch.gen.bitsOf(%S.ast.Type %t30) %t32 = icmp slt i64 %t31, 32 - br label %logic.rend7917 -logic.rend7917: - br label %logic.end7916 -logic.end7916: - %t33 = phi i1 [ false, %logic.from7914 ], [ %t32, %logic.rend7917 ] - br i1 %t33, label %then7918, label %endif7920 -then7918: + br label %logic.rend7921 +logic.rend7921: + br label %logic.end7920 +logic.end7920: + %t33 = phi i1 [ false, %logic.from7918 ], [ %t32, %logic.rend7921 ] + br i1 %t33, label %then7922, label %endif7924 +then7922: ret { ptr, i64, i64 } { ptr @.str.5015, i64 8, i64 0 } -endif7920: +endif7924: %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.5016, i64 4, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.from7921 -logic.from7921: - br i1 %t39, label %logic.rhs7922, label %logic.end7923 -logic.rhs7922: + br label %logic.from7925 +logic.from7925: + br i1 %t39, label %logic.rhs7926, label %logic.end7927 +logic.rhs7926: %t40 = load %S.ast.Type, ptr %a2 %t41 = call i64 @finch.gen.bitsOf(%S.ast.Type %t40) %t42 = icmp slt i64 %t41, 32 - br label %logic.rend7924 -logic.rend7924: - br label %logic.end7923 -logic.end7923: - %t43 = phi i1 [ false, %logic.from7921 ], [ %t42, %logic.rend7924 ] - br i1 %t43, label %then7925, label %endif7927 -then7925: + br label %logic.rend7928 +logic.rend7928: + br label %logic.end7927 +logic.end7927: + %t43 = phi i1 [ false, %logic.from7925 ], [ %t42, %logic.rend7928 ] + br i1 %t43, label %then7929, label %endif7931 +then7929: ret { ptr, i64, i64 } { ptr @.str.5017, i64 8, i64 0 } -endif7927: +endif7931: ret { ptr, i64, i64 } { ptr @.str.5018, i64 0, i64 0 } } @@ -79662,10 +79688,10 @@ entry: store { ptr, i64, i64 } { ptr @.str.5019, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br i1 %t8, label %then7928, label %endif7930 -then7928: + br i1 %t8, label %then7932, label %endif7934 +then7932: ret { ptr, i64, i64 } { ptr @.str.5020, i64 3, i64 0 } -endif7930: +endif7934: %t9 = load ptr, ptr %a1 %t10 = load %S.ast.Type, ptr %a2 %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t9, %S.ast.Type %t10) @@ -80135,26 +80161,26 @@ entry: store %S.cimport.CFunc %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic7931, label %ok7932 -panic7931: + br i1 %t5, label %panic7935, label %ok7936 +panic7935: call void @finch_panic(ptr @.str.5021, i64 4654, ptr @.str.5022) unreachable -ok7932: +ok7936: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 - br i1 %t7, label %then7933, label %endif7935 -then7933: + br i1 %t7, label %then7937, label %endif7939 +then7937: store { ptr, i64, i64 } zeroinitializer, ptr %a8 %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 store i64 0, ptr %a10 - br label %each.cond7936 -each.cond7936: + br label %each.cond7940 +each.cond7940: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 - br i1 %t14, label %each.body7937, label %each.end7939 -each.body7937: + br i1 %t14, label %each.body7941, label %each.end7943 +each.body7941: %t15 = load ptr, ptr %t9 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 %t17 = load %S.ast.Type, ptr %t16 @@ -80169,17 +80195,17 @@ each.body7937: %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t22 store { ptr, i64, i64 } %t21, ptr %t25 store i64 %t23, ptr %t19 - br label %each.step7938 -each.step7938: + br label %each.step7942 +each.step7942: %t26 = load i64, ptr %a10 %t27 = add i64 %t26, 1 store i64 %t27, ptr %a10 - br label %each.cond7936 -each.end7939: + br label %each.cond7940 +each.end7943: %t28 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t29 = load i1, ptr %t28 - br i1 %t29, label %then7940, label %endif7942 -then7940: + br i1 %t29, label %then7944, label %endif7946 +then7944: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t31, 1 @@ -80188,8 +80214,8 @@ then7940: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } { ptr @.str.5023, i64 3, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 - br label %endif7942 -endif7942: + br label %endif7946 +endif7946: %t35 = load ptr, ptr %a1 %t36 = load %S.ast.Node, ptr %a2 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 @@ -80262,14 +80288,14 @@ endif7942: store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) call void @finch.drop.arr_str(ptr %a8) - br label %endif7935 -endif7935: + br label %endif7939 +endif7939: %t95 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 %t97 = load i64, ptr %t96 %t98 = icmp sgt i64 %t97, 0 - br i1 %t98, label %then7943, label %endif7945 -then7943: + br i1 %t98, label %then7947, label %endif7949 +then7947: %t99 = load ptr, ptr %a1 %t100 = load %S.ast.Node, ptr %a2 %t101 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -80295,23 +80321,23 @@ then7943: call void @finch.gen.fail(ptr %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t118) store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_drop(ptr %a119) - br label %endif7945 -endif7945: + br label %endif7949 +endif7949: %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t120, i32 0, i32 1 %t122 = load i64, ptr %t121 store i64 %t122, ptr %a123 %t124 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t125 = load i1, ptr %t124 - br i1 %t125, label %then7946, label %else7947 -then7946: + br i1 %t125, label %then7950, label %else7951 +then7950: %t126 = load i64, ptr %a123 %t127 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1 %t129 = load i64, ptr %t128 %t130 = icmp slt i64 %t126, %t129 - br i1 %t130, label %then7949, label %endif7951 -then7949: + br i1 %t130, label %then7953, label %endif7955 +then7953: %t131 = load ptr, ptr %a1 %t132 = load %S.ast.Node, ptr %a2 %t133 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -80359,17 +80385,17 @@ then7949: call void @finch.gen.fail(ptr %t131, %S.ast.Node %t132, { ptr, i64, i64 } %t168) store { ptr, i64, i64 } %t168, ptr %a169 call void @finch_str_drop(ptr %a169) - br label %endif7951 -endif7951: - br label %endif7948 -else7947: + br label %endif7955 +endif7955: + br label %endif7952 +else7951: %t170 = load i64, ptr %a123 %t171 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 %t173 = load i64, ptr %t172 %t174 = icmp ne i64 %t170, %t173 - br i1 %t174, label %then7952, label %endif7954 -then7952: + br i1 %t174, label %then7956, label %endif7958 +then7956: %t175 = load ptr, ptr %a1 %t176 = load %S.ast.Node, ptr %a2 %t177 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -80417,10 +80443,10 @@ then7952: call void @finch.gen.fail(ptr %t175, %S.ast.Node %t176, { ptr, i64, i64 } %t212) store { ptr, i64, i64 } %t212, ptr %a213 call void @finch_str_drop(ptr %a213) - br label %endif7954 -endif7954: - br label %endif7948 -endif7948: + br label %endif7958 +endif7958: + br label %endif7952 +endif7952: %t214 = load ptr, ptr %a1 %t215 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 %t216 = load %S.ast.Type, ptr %t215 @@ -80436,14 +80462,14 @@ endif7948: store { ptr, i64, i64 } zeroinitializer, ptr %a225 %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 store i64 0, ptr %a227 - br label %each.cond7955 -each.cond7955: + br label %each.cond7959 +each.cond7959: %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i32 0, i32 1 %t229 = load i64, ptr %t228 %t230 = load i64, ptr %a227 %t231 = icmp slt i64 %t230, %t229 - br i1 %t231, label %each.body7956, label %each.end7958 -each.body7956: + br i1 %t231, label %each.body7960, label %each.end7962 +each.body7960: %t232 = load ptr, ptr %t226 %t233 = getelementptr inbounds %S.ast.Type, ptr %t232, i64 %t230 %t234 = load %S.ast.Type, ptr %t233 @@ -80472,13 +80498,13 @@ each.body7956: store %S.ast.Type %t250, ptr %t254 store i64 %t252, ptr %t246 call void @finch.drop.S_ast_Type(ptr %a240) - br label %each.step7957 -each.step7957: + br label %each.step7961 +each.step7961: %t255 = load i64, ptr %a227 %t256 = add i64 %t255, 1 store i64 %t256, ptr %a227 - br label %each.cond7955 -each.end7958: + br label %each.cond7959 +each.end7962: %t257 = load ptr, ptr %a1 %t258 = load %S.ast.Type, ptr %a219 %t259 = load { ptr, i64, i64 }, ptr %a225 @@ -80489,8 +80515,8 @@ each.end7958: store { ptr, i64, i64 } { ptr @.str.5041, i64 0, i64 0 }, ptr %a264 %t265 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 %t266 = load i1, ptr %t265 - br i1 %t266, label %then7959, label %endif7961 -then7959: + br i1 %t266, label %then7963, label %endif7965 +then7963: %t267 = load ptr, ptr %a1 %t268 = load ptr, ptr %a1 %t269 = load %S.ast.Type, ptr %a219 @@ -80555,16 +80581,16 @@ then7959: %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t315, i64 %t313 store { ptr, i64, i64 } %t312, ptr %t316 store i64 %t314, ptr %t293 - br label %endif7961 -endif7961: + br label %endif7965 +endif7965: store { ptr, i64, i64 } zeroinitializer, ptr %a317 %t318 = load ptr, ptr %a1 %t319 = icmp eq ptr %t318, null - br i1 %t319, label %panic7962, label %ok7963 -panic7962: + br i1 %t319, label %panic7966, label %ok7967 +panic7966: call void @finch_panic(ptr @.str.5046, i64 4693, ptr @.str.5047) unreachable -ok7963: +ok7967: %t320 = getelementptr inbounds %S.gen.Gen, ptr %t318, i32 0, i32 11 %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i32 0, i32 1 %t322 = load i64, ptr %t321 @@ -80573,28 +80599,28 @@ ok7963: %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %t324, i32 0, i32 1 %t326 = load i64, ptr %t325 store i64 0, ptr %a327 - br label %for.cond7964 -for.cond7964: + br label %for.cond7968 +for.cond7968: %t328 = load i64, ptr %a327 %t329 = icmp slt i64 %t328, %t326 - br i1 %t329, label %for.body7965, label %for.end7967 -for.body7965: + br i1 %t329, label %for.body7969, label %for.end7971 +for.body7969: %t330 = load i64, ptr %a327 %t331 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 %t333 = load i64, ptr %t332 %t334 = icmp slt i64 %t330, %t333 - br i1 %t334, label %then7968, label %endif7970 -then7968: + br i1 %t334, label %then7972, label %endif7974 +then7972: %t335 = load i64, ptr %a327 %t336 = load { ptr, i64, i64 }, ptr %a225 %t337 = extractvalue { ptr, i64, i64 } %t336, 1 %t338 = icmp uge i64 %t335, %t337 - br i1 %t338, label %range7971, label %inrange7972 -range7971: + br i1 %t338, label %range7975, label %inrange7976 +range7975: call void @finch_panic_index(ptr @.str.5048, i64 4696, i64 %t335, i64 %t337) unreachable -inrange7972: +inrange7976: %t339 = extractvalue { ptr, i64, i64 } %t336, 0 %t340 = getelementptr inbounds %S.ast.Type, ptr %t339, i64 %t335 %t341 = load %S.ast.Type, ptr %t340 @@ -80607,11 +80633,11 @@ inrange7972: %t348 = load { ptr, i64, i64 }, ptr %t346 %t349 = extractvalue { ptr, i64, i64 } %t348, 1 %t350 = icmp uge i64 %t347, %t349 - br i1 %t350, label %range7973, label %inrange7974 -range7973: + br i1 %t350, label %range7977, label %inrange7978 +range7977: call void @finch_panic_index(ptr @.str.5049, i64 4697, i64 %t347, i64 %t349) unreachable -inrange7974: +inrange7978: %t351 = extractvalue { ptr, i64, i64 } %t348, 0 %t352 = getelementptr inbounds %S.gen.Abi, ptr %t351, i64 %t347 %t353 = load %S.gen.Abi, ptr %t352 @@ -80626,11 +80652,11 @@ inrange7974: %t362 = load { ptr, i64, i64 }, ptr %t360 %t363 = extractvalue { ptr, i64, i64 } %t362, 1 %t364 = icmp uge i64 %t361, %t363 - br i1 %t364, label %range7975, label %inrange7976 -range7975: + br i1 %t364, label %range7979, label %inrange7980 +range7979: call void @finch_panic_index(ptr @.str.5050, i64 4698, i64 %t361, i64 %t363) unreachable -inrange7976: +inrange7980: %t365 = extractvalue { ptr, i64, i64 } %t362, 0 %t366 = getelementptr inbounds %S.ast.Node, ptr %t365, i64 %t361 %t367 = load %S.ast.Node, ptr %t366 @@ -80642,11 +80668,11 @@ inrange7976: %t373 = load { ptr, i64, i64 }, ptr %t371 %t374 = extractvalue { ptr, i64, i64 } %t373, 1 %t375 = icmp uge i64 %t372, %t374 - br i1 %t375, label %range7977, label %inrange7978 -range7977: + br i1 %t375, label %range7981, label %inrange7982 +range7981: call void @finch_panic_index(ptr @.str.5051, i64 4698, i64 %t372, i64 %t374) unreachable -inrange7978: +inrange7982: %t376 = extractvalue { ptr, i64, i64 } %t373, 0 %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i64 %t372 %t378 = load %S.ast.Node, ptr %t377 @@ -80701,8 +80727,8 @@ inrange7978: store { ptr, i64, i64 } { ptr @.str.5054, i64 6, i64 0 }, ptr %a418 %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) %t420 = icmp ne i32 %t419, 0 - br i1 %t420, label %then7979, label %else7980 -then7979: + br i1 %t420, label %then7983, label %else7984 +then7983: %t421 = load ptr, ptr %a1 %t422 = load ptr, ptr %a1 %t423 = load %S.ast.Type, ptr %a345 @@ -80783,16 +80809,16 @@ then7979: store i64 %t482, ptr %t469 call void @finch_str_drop(ptr %a459) call void @finch_str_drop(ptr %a427) - br label %endif7981 -else7980: + br label %endif7985 +else7984: %t485 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 %t486 = load { ptr, i64, i64 }, ptr %t485 store { ptr, i64, i64 } %t486, ptr %a487 store { ptr, i64, i64 } { ptr @.str.5058, i64 8, i64 0 }, ptr %a488 %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) %t490 = icmp ne i32 %t489, 0 - br i1 %t490, label %then7982, label %else7983 -then7982: + br i1 %t490, label %then7986, label %else7987 +then7986: %t491 = load ptr, ptr %a1 %t492 = load ptr, ptr %a1 %t493 = load %S.ast.Type, ptr %a345 @@ -80833,16 +80859,16 @@ then7982: store { ptr, i64, i64 } %t516, ptr %t520 store i64 %t518, ptr %t511 call void @finch_str_drop(ptr %a497) - br label %endif7984 -else7983: + br label %endif7988 +else7987: %t521 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 %t522 = load { ptr, i64, i64 }, ptr %t521 store { ptr, i64, i64 } %t522, ptr %a523 store { ptr, i64, i64 } { ptr @.str.5061, i64 6, i64 0 }, ptr %a524 %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) %t526 = icmp ne i32 %t525, 0 - br i1 %t526, label %then7985, label %else7986 -then7985: + br i1 %t526, label %then7989, label %else7990 +then7989: %t527 = load ptr, ptr %a1 %t528 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t527, { ptr, i64, i64 } { ptr @.str.5062, i64 9, i64 0 }) store { ptr, i64, i64 } %t528, ptr %a529 @@ -80860,23 +80886,23 @@ then7985: %t539 = getelementptr inbounds { ptr, i64, i64 }, ptr %t538, i32 0, i32 1 %t540 = load i64, ptr %t539 store i64 0, ptr %a541 - br label %for.cond7988 -for.cond7988: + br label %for.cond7992 +for.cond7992: %t542 = load i64, ptr %a541 %t543 = icmp slt i64 %t542, %t540 - br i1 %t543, label %for.body7989, label %for.end7991 -for.body7989: + br i1 %t543, label %for.body7993, label %for.end7995 +for.body7993: %t544 = load ptr, ptr %a1 %t545 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 %t546 = load i64, ptr %a541 %t547 = load { ptr, i64, i64 }, ptr %t545 %t548 = extractvalue { ptr, i64, i64 } %t547, 1 %t549 = icmp uge i64 %t546, %t548 - br i1 %t549, label %range7992, label %inrange7993 -range7992: + br i1 %t549, label %range7996, label %inrange7997 +range7996: call void @finch_panic_index(ptr @.str.5063, i64 4716, i64 %t546, i64 %t548) unreachable -inrange7993: +inrange7997: %t550 = extractvalue { ptr, i64, i64 } %t547, 0 %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %t550, i64 %t546 %t552 = load { ptr, i64, i64 }, ptr %t551 @@ -80917,11 +80943,11 @@ inrange7993: %t582 = load { ptr, i64, i64 }, ptr %t580 %t583 = extractvalue { ptr, i64, i64 } %t582, 1 %t584 = icmp uge i64 %t581, %t583 - br i1 %t584, label %range7994, label %inrange7995 -range7994: + br i1 %t584, label %range7998, label %inrange7999 +range7998: call void @finch_panic_index(ptr @.str.5066, i64 4717, i64 %t581, i64 %t583) unreachable -inrange7995: +inrange7999: %t585 = extractvalue { ptr, i64, i64 } %t582, 0 %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %t585, i64 %t581 %t587 = load { ptr, i64, i64 }, ptr %t586 @@ -80941,11 +80967,11 @@ inrange7995: %t598 = load { ptr, i64, i64 }, ptr %t596 %t599 = extractvalue { ptr, i64, i64 } %t598, 1 %t600 = icmp uge i64 %t597, %t599 - br i1 %t600, label %range7996, label %inrange7997 -range7996: + br i1 %t600, label %range8000, label %inrange8001 +range8000: call void @finch_panic_index(ptr @.str.5067, i64 4718, i64 %t597, i64 %t599) unreachable -inrange7997: +inrange8001: %t601 = extractvalue { ptr, i64, i64 } %t598, 0 %t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %t601, i64 %t597 %t603 = load { ptr, i64, i64 }, ptr %t602 @@ -80968,16 +80994,16 @@ inrange7997: store { ptr, i64, i64 } %t613, ptr %t617 store i64 %t615, ptr %t595 call void @finch_str_drop(ptr %a578) - br label %for.step7990 -for.step7990: + br label %for.step7994 +for.step7994: %t618 = load i64, ptr %a541 %t619 = add i64 %t618, 1 store i64 %t619, ptr %a541 - br label %for.cond7988 -for.end7991: + br label %for.cond7992 +for.end7995: call void @finch_str_drop(ptr %a529) - br label %endif7987 -else7986: + br label %endif7991 +else7990: %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t621 = load ptr, ptr %a1 %t622 = load %S.ast.Type, ptr %a345 @@ -81006,8 +81032,8 @@ else7986: store { ptr, i64, i64 } { ptr @.str.5069, i64 3, i64 0 }, ptr %a640 %t641 = call i32 @finch_str_eq(ptr %a639, ptr %a640) %t642 = icmp ne i32 %t641, 0 - br i1 %t642, label %then7998, label %else7999 -then7998: + br i1 %t642, label %then8002, label %else8003 +then8002: %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t644 = load ptr, ptr %a1 %t645 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 @@ -81026,8 +81052,8 @@ then7998: %t656 = getelementptr inbounds { ptr, i64, i64 }, ptr %t655, i64 %t653 store { ptr, i64, i64 } %t652, ptr %t656 store i64 %t654, ptr %t643 - br label %endif8000 -else7999: + br label %endif8004 +else8003: %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t658 = load ptr, ptr %a1 %t659 = load %S.ast.Type, ptr %a345 @@ -81064,30 +81090,30 @@ else7999: %t685 = getelementptr inbounds { ptr, i64, i64 }, ptr %t684, i64 %t682 store { ptr, i64, i64 } %t681, ptr %t685 store i64 %t683, ptr %t657 - br label %endif8000 -endif8000: - br label %endif7987 -endif7987: - br label %endif7984 -endif7984: - br label %endif7981 -endif7981: + br label %endif8004 +endif8004: + br label %endif7991 +endif7991: + br label %endif7988 +endif7988: + br label %endif7985 +endif7985: call void @finch.drop.S_gen_Val(ptr %a403) call void @finch.drop.S_gen_Abi(ptr %a357) call void @finch.drop.S_ast_Type(ptr %a345) - br label %for.step7966 -endif7970: + br label %for.step7970 +endif7974: %t686 = load ptr, ptr %a1 %t687 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t688 = load i64, ptr %a327 %t689 = load { ptr, i64, i64 }, ptr %t687 %t690 = extractvalue { ptr, i64, i64 } %t689, 1 %t691 = icmp uge i64 %t688, %t690 - br i1 %t691, label %range8001, label %inrange8002 -range8001: + br i1 %t691, label %range8005, label %inrange8006 +range8005: call void @finch_panic_index(ptr @.str.5072, i64 4731, i64 %t688, i64 %t690) unreachable -inrange8002: +inrange8006: %t692 = extractvalue { ptr, i64, i64 } %t689, 0 %t693 = getelementptr inbounds %S.ast.Node, ptr %t692, i64 %t688 %t694 = load %S.ast.Node, ptr %t693 @@ -81105,25 +81131,25 @@ inrange8002: store { ptr, i64, i64 } { ptr @.str.5073, i64 4, i64 0 }, ptr %a706 %t707 = call i32 @finch_str_eq(ptr %a705, ptr %a706) %t708 = icmp ne i32 %t707, 0 - br i1 %t708, label %then8003, label %endif8005 -then8003: + br i1 %t708, label %then8007, label %endif8009 +then8007: %t709 = load ptr, ptr %a1 %t710 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t711 = load i64, ptr %a327 %t712 = load { ptr, i64, i64 }, ptr %t710 %t713 = extractvalue { ptr, i64, i64 } %t712, 1 %t714 = icmp uge i64 %t711, %t713 - br i1 %t714, label %range8006, label %inrange8007 -range8006: + br i1 %t714, label %range8010, label %inrange8011 +range8010: call void @finch_panic_index(ptr @.str.5074, i64 4734, i64 %t711, i64 %t713) unreachable -inrange8007: +inrange8011: %t715 = extractvalue { ptr, i64, i64 } %t712, 0 %t716 = getelementptr inbounds %S.ast.Node, ptr %t715, i64 %t711 %t717 = load %S.ast.Node, ptr %t716 call void @finch.gen.fail(ptr %t709, %S.ast.Node %t717, { ptr, i64, i64 } { ptr @.str.5075, i64 23, i64 0 }) - br label %endif8005 -endif8005: + br label %endif8009 +endif8009: %t718 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 %t719 = load %S.gen.Val, ptr %a696 store %S.gen.Val %t719, ptr %a720 @@ -81145,40 +81171,40 @@ endif8005: store { ptr, i64, i64 } { ptr @.str.5076, i64 6, i64 0 }, ptr %a732 %t733 = call i32 @finch_str_eq(ptr %a731, ptr %a732) %t734 = icmp ne i32 %t733, 0 - br label %logic.from8008 -logic.from8008: - br i1 %t734, label %logic.end8010, label %logic.rhs8009 -logic.rhs8009: + br label %logic.from8012 +logic.from8012: + br i1 %t734, label %logic.end8014, label %logic.rhs8013 +logic.rhs8013: %t735 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t736 = load { ptr, i64, i64 }, ptr %t735 store { ptr, i64, i64 } %t736, ptr %a737 store { ptr, i64, i64 } { ptr @.str.5077, i64 5, i64 0 }, ptr %a738 %t739 = call i32 @finch_str_eq(ptr %a737, ptr %a738) %t740 = icmp ne i32 %t739, 0 - br label %logic.rend8011 -logic.rend8011: - br label %logic.end8010 -logic.end8010: - %t741 = phi i1 [ true, %logic.from8008 ], [ %t740, %logic.rend8011 ] - br i1 %t741, label %then8012, label %endif8014 -then8012: + br label %logic.rend8015 +logic.rend8015: + br label %logic.end8014 +logic.end8014: + %t741 = phi i1 [ true, %logic.from8012 ], [ %t740, %logic.rend8015 ] + br i1 %t741, label %then8016, label %endif8018 +then8016: %t742 = load ptr, ptr %a1 %t743 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t744 = load i64, ptr %a327 %t745 = load { ptr, i64, i64 }, ptr %t743 %t746 = extractvalue { ptr, i64, i64 } %t745, 1 %t747 = icmp uge i64 %t744, %t746 - br i1 %t747, label %range8015, label %inrange8016 -range8015: + br i1 %t747, label %range8019, label %inrange8020 +range8019: call void @finch_panic_index(ptr @.str.5078, i64 4739, i64 %t744, i64 %t746) unreachable -inrange8016: +inrange8020: %t748 = extractvalue { ptr, i64, i64 } %t745, 0 %t749 = getelementptr inbounds %S.ast.Node, ptr %t748, i64 %t744 %t750 = load %S.ast.Node, ptr %t749 call void @finch.gen.fail(ptr %t742, %S.ast.Node %t750, { ptr, i64, i64 } { ptr @.str.5079, i64 68, i64 0 }) - br label %endif8014 -endif8014: + br label %endif8018 +endif8018: %t751 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 %t752 = load { ptr, i64, i64 }, ptr %t751 store { ptr, i64, i64 } %t752, ptr %a753 @@ -81191,8 +81217,8 @@ endif8014: store { ptr, i64, i64 } { ptr @.str.5080, i64 3, i64 0 }, ptr %a760 %t761 = call i32 @finch_str_eq(ptr %a759, ptr %a760) %t762 = icmp ne i32 %t761, 0 - br i1 %t762, label %then8017, label %else8018 -then8017: + br i1 %t762, label %then8021, label %else8022 +then8021: %t763 = load ptr, ptr %a1 %t764 = load { ptr, i64, i64 }, ptr %a756 %t765 = load %S.ast.Type, ptr %a702 @@ -81209,16 +81235,16 @@ then8017: store %S.ast.Type %t771, ptr %a702 store %S.ast.Type %t772, ptr %a773 call void @finch.drop.S_ast_Type(ptr %a773) - br label %endif8019 -else8018: + br label %endif8023 +else8022: %t774 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t775 = load { ptr, i64, i64 }, ptr %t774 store { ptr, i64, i64 } %t775, ptr %a776 store { ptr, i64, i64 } { ptr @.str.5083, i64 3, i64 0 }, ptr %a777 %t778 = call i32 @finch_str_eq(ptr %a776, ptr %a777) %t779 = icmp ne i32 %t778, 0 - br i1 %t779, label %then8020, label %else8021 -then8020: + br i1 %t779, label %then8024, label %else8025 +then8024: %t780 = load ptr, ptr %a1 %t781 = load { ptr, i64, i64 }, ptr %a756 %t782 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t780, { ptr, i64, i64 } %t781) @@ -81231,16 +81257,16 @@ then8020: store %S.ast.Type %t785, ptr %a702 store %S.ast.Type %t786, ptr %a787 call void @finch.drop.S_ast_Type(ptr %a787) - br label %endif8022 -else8021: + br label %endif8026 +else8025: %t788 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t789 = load { ptr, i64, i64 }, ptr %t788 store { ptr, i64, i64 } %t789, ptr %a790 store { ptr, i64, i64 } { ptr @.str.5085, i64 4, i64 0 }, ptr %a791 %t792 = call i32 @finch_str_eq(ptr %a790, ptr %a791) %t793 = icmp ne i32 %t792, 0 - br i1 %t793, label %then8023, label %else8024 -then8023: + br i1 %t793, label %then8027, label %else8028 +then8027: %t794 = load ptr, ptr %a1 %t795 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 %t796 = load { ptr, i64, i64 }, ptr %t795 @@ -81266,39 +81292,39 @@ then8023: store %S.ast.Type %t810, ptr %a702 store %S.ast.Type %t811, ptr %a812 call void @finch.drop.S_ast_Type(ptr %a812) - br label %endif8025 -else8024: + br label %endif8029 +else8028: %t813 = load %S.ast.Type, ptr %a702 %t814 = call i1 @finch.gen.isInt(%S.ast.Type %t813) - br label %logic.from8026 -logic.from8026: - br i1 %t814, label %logic.end8028, label %logic.rhs8027 -logic.rhs8027: + br label %logic.from8030 +logic.from8030: + br i1 %t814, label %logic.end8032, label %logic.rhs8031 +logic.rhs8031: %t815 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t816 = load { ptr, i64, i64 }, ptr %t815 store { ptr, i64, i64 } %t816, ptr %a817 store { ptr, i64, i64 } { ptr @.str.5089, i64 4, i64 0 }, ptr %a818 %t819 = call i32 @finch_str_eq(ptr %a817, ptr %a818) %t820 = icmp ne i32 %t819, 0 - br label %logic.rend8029 -logic.rend8029: - br label %logic.end8028 -logic.end8028: - %t821 = phi i1 [ true, %logic.from8026 ], [ %t820, %logic.rend8029 ] - br label %logic.from8030 -logic.from8030: - br i1 %t821, label %logic.rhs8031, label %logic.end8032 -logic.rhs8031: - %t822 = load %S.ast.Type, ptr %a702 - %t823 = call i64 @finch.gen.bitsOf(%S.ast.Type %t822) - %t824 = icmp slt i64 %t823, 32 br label %logic.rend8033 logic.rend8033: br label %logic.end8032 logic.end8032: - %t825 = phi i1 [ false, %logic.from8030 ], [ %t824, %logic.rend8033 ] - br i1 %t825, label %then8034, label %endif8036 -then8034: + %t821 = phi i1 [ true, %logic.from8030 ], [ %t820, %logic.rend8033 ] + br label %logic.from8034 +logic.from8034: + br i1 %t821, label %logic.rhs8035, label %logic.end8036 +logic.rhs8035: + %t822 = load %S.ast.Type, ptr %a702 + %t823 = call i64 @finch.gen.bitsOf(%S.ast.Type %t822) + %t824 = icmp slt i64 %t823, 32 + br label %logic.rend8037 +logic.rend8037: + br label %logic.end8036 +logic.end8036: + %t825 = phi i1 [ false, %logic.from8034 ], [ %t824, %logic.rend8037 ] + br i1 %t825, label %then8038, label %endif8040 +then8038: %t826 = load ptr, ptr %a1 %t827 = load { ptr, i64, i64 }, ptr %a756 %t828 = load %S.ast.Type, ptr %a702 @@ -81315,14 +81341,14 @@ then8034: store %S.ast.Type %t834, ptr %a702 store %S.ast.Type %t835, ptr %a836 call void @finch.drop.S_ast_Type(ptr %a836) - br label %endif8036 -endif8036: - br label %endif8025 -endif8025: - br label %endif8022 -endif8022: - br label %endif8019 -endif8019: + br label %endif8040 +endif8040: + br label %endif8029 +endif8029: + br label %endif8026 +endif8026: + br label %endif8023 +endif8023: %t837 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t838 = load ptr, ptr %a1 %t839 = load %S.ast.Type, ptr %a702 @@ -81350,13 +81376,13 @@ endif8019: call void @finch_str_drop(ptr %a756) call void @finch.drop.S_ast_Type(ptr %a702) call void @finch.drop.S_gen_Val(ptr %a696) - br label %for.step7966 -for.step7966: + br label %for.step7970 +for.step7970: %t856 = load i64, ptr %a327 %t857 = add i64 %t856, 1 store i64 %t857, ptr %a327 - br label %for.cond7964 -for.end7967: + br label %for.cond7968 +for.end7971: %t858 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 2 %t859 = load { ptr, i64, i64 }, ptr %t858 store { ptr, i64, i64 } %t859, ptr %a860 @@ -81371,8 +81397,8 @@ for.end7967: store { ptr, i64, i64 } { ptr @.str.5094, i64 6, i64 0 }, ptr %a869 %t870 = call i32 @finch_str_eq(ptr %a868, ptr %a869) %t871 = icmp ne i32 %t870, 0 - br i1 %t871, label %then8037, label %endif8039 -then8037: + br i1 %t871, label %then8041, label %endif8043 +then8041: %t872 = load ptr, ptr %a1 %t873 = load %S.ast.Type, ptr %a219 %t874 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t872, %S.ast.Type %t873) @@ -81380,13 +81406,13 @@ then8037: store { ptr, i64, i64 } %t874, ptr %a864 store { ptr, i64, i64 } %t875, ptr %a876 call void @finch_str_drop(ptr %a876) - br label %endif8039 -endif8039: + br label %endif8043 +endif8043: store { ptr, i64, i64 } { ptr @.str.5095, i64 0, i64 0 }, ptr %a877 %t878 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t879 = load i1, ptr %t878 - br i1 %t879, label %then8040, label %endif8042 -then8040: + br i1 %t879, label %then8044, label %endif8046 +then8044: %t880 = load { ptr, i64, i64 }, ptr %a877 store { ptr, i64, i64 } { ptr @.str.5096, i64 5, i64 0 }, ptr %a877 store { ptr, i64, i64 } %t880, ptr %a881 @@ -81394,23 +81420,23 @@ then8040: %t882 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t883 = load i64, ptr %t882 %t884 = icmp eq i64 %t883, 0 - br i1 %t884, label %then8043, label %endif8045 -then8043: + br i1 %t884, label %then8047, label %endif8049 +then8047: %t885 = load { ptr, i64, i64 }, ptr %a877 store { ptr, i64, i64 } { ptr @.str.5097, i64 3, i64 0 }, ptr %a877 store { ptr, i64, i64 } %t885, ptr %a886 call void @finch_str_drop(ptr %a886) - br label %endif8045 -endif8045: - br label %endif8042 -endif8042: + br label %endif8049 +endif8049: + br label %endif8046 +endif8046: %t887 = load ptr, ptr %a1 %t888 = icmp eq ptr %t887, null - br i1 %t888, label %panic8046, label %ok8047 -panic8046: + br i1 %t888, label %panic8050, label %ok8051 +panic8050: call void @finch_panic(ptr @.str.5098, i64 4770, ptr @.str.5099) unreachable -ok8047: +ok8051: %t889 = getelementptr inbounds %S.gen.Gen, ptr %t887, i32 0, i32 40 %t890 = getelementptr inbounds { ptr, i64, i64 }, ptr %t889, i32 0, i32 1 %t891 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -81423,41 +81449,41 @@ ok8047: %t898 = load i64, ptr %t890 %t899 = load ptr, ptr %t889 store i64 0, ptr %a900 - br label %find.cond8048 -find.cond8048: + br label %find.cond8052 +find.cond8052: %t901 = load i64, ptr %a900 %t902 = icmp slt i64 %t901, %t898 - br i1 %t902, label %find.body8049, label %find.end8052 -find.body8049: + br i1 %t902, label %find.body8053, label %find.end8056 +find.body8053: %t903 = getelementptr inbounds { ptr, i64, i64 }, ptr %t899, i64 %t901 %t904 = load { ptr, i64, i64 }, ptr %t903 store { ptr, i64, i64 } %t904, ptr %a905 store { ptr, i64, i64 } %t896, ptr %a906 %t907 = call i32 @finch_str_eq(ptr %a905, ptr %a906) %t908 = icmp ne i32 %t907, 0 - br i1 %t908, label %find.hit8050, label %find.next8051 -find.hit8050: + br i1 %t908, label %find.hit8054, label %find.next8055 +find.hit8054: store i64 %t901, ptr %a897 - br label %find.end8052 -find.next8051: + br label %find.end8056 +find.next8055: %t909 = add i64 %t901, 1 store i64 %t909, ptr %a900 - br label %find.cond8048 -find.end8052: + br label %find.cond8052 +find.end8056: store { ptr, i64, i64 } %t896, ptr %a910 call void @finch_str_drop(ptr %a910) %t911 = load i64, ptr %a897 %t912 = icmp sge i64 %t911, 0 %t913 = xor i1 %t912, true - br i1 %t913, label %then8053, label %endif8055 -then8053: + br i1 %t913, label %then8057, label %endif8059 +then8057: %t914 = load ptr, ptr %a1 %t915 = icmp eq ptr %t914, null - br i1 %t915, label %panic8056, label %ok8057 -panic8056: + br i1 %t915, label %panic8060, label %ok8061 +panic8060: call void @finch_panic(ptr @.str.5101, i64 4771, ptr @.str.5102) unreachable -ok8057: +ok8061: %t916 = getelementptr inbounds %S.gen.Gen, ptr %t914, i32 0, i32 40 %t917 = getelementptr inbounds { ptr, i64, i64 }, ptr %t916, i32 0, i32 1 %t918 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -81477,15 +81503,15 @@ ok8057: %t929 = load { ptr, i64, i64 }, ptr %t928 %t930 = call i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %t929) %t931 = xor i1 %t930, true - br i1 %t931, label %then8058, label %endif8060 -then8058: + br i1 %t931, label %then8062, label %endif8064 +then8062: %t932 = load ptr, ptr %a1 %t933 = icmp eq ptr %t932, null - br i1 %t933, label %panic8061, label %ok8062 -panic8061: + br i1 %t933, label %panic8065, label %ok8066 +panic8065: call void @finch_panic(ptr @.str.5104, i64 4773, ptr @.str.5105) unreachable -ok8062: +ok8066: %t934 = getelementptr inbounds %S.gen.Gen, ptr %t932, i32 0, i32 2 %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t934, i32 0, i32 1 %t936 = load { ptr, i64, i64 }, ptr %a864 @@ -81558,15 +81584,15 @@ ok8062: %t993 = getelementptr inbounds { ptr, i64, i64 }, ptr %t992, i64 %t990 store { ptr, i64, i64 } %t989, ptr %t993 store i64 %t991, ptr %t935 - br label %endif8060 -endif8060: - br label %endif8055 -endif8055: + br label %endif8064 +endif8064: + br label %endif8059 +endif8059: store { ptr, i64, i64 } { ptr @.str.5112, i64 0, i64 0 }, ptr %a994 %t995 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t996 = load i1, ptr %t995 - br i1 %t996, label %then8063, label %endif8065 -then8063: + br i1 %t996, label %then8067, label %endif8069 +then8067: %t997 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5114, i64 2, i64 0 }, ptr %a998 call void @finch_str_join(ptr %a999, ptr %a262, ptr %a998) @@ -81594,8 +81620,8 @@ then8063: store { ptr, i64, i64 } %t1016, ptr %a994 store { ptr, i64, i64 } %t1017, ptr %a1018 call void @finch_str_drop(ptr %a1018) - br label %endif8065 -endif8065: + br label %endif8069 +endif8069: %t1019 = load { ptr, i64, i64 }, ptr %a864 store { ptr, i64, i64 } { ptr @.str.5116, i64 4, i64 0 }, ptr %a1021 store { ptr, i64, i64 } %t1019, ptr %a1022 @@ -81666,8 +81692,8 @@ endif8065: store { ptr, i64, i64 } { ptr @.str.5122, i64 4, i64 0 }, ptr %a1077 %t1078 = call i32 @finch_str_eq(ptr %a1076, ptr %a1077) %t1079 = icmp ne i32 %t1078, 0 - br i1 %t1079, label %then8066, label %endif8068 -then8066: + br i1 %t1079, label %then8070, label %endif8072 +then8070: %t1080 = load ptr, ptr %a1 %t1081 = load { ptr, i64, i64 }, ptr %a1073 call void @finch.gen.emit(ptr %t1080, { ptr, i64, i64 } %t1081) @@ -81693,11 +81719,11 @@ then8066: call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1089 -endif8068: +endif8072: %t1090 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 %t1091 = load i1, ptr %t1090 - br i1 %t1091, label %then8069, label %endif8071 -then8069: + br i1 %t1091, label %then8073, label %endif8075 +then8073: %t1092 = load ptr, ptr %a1 %t1093 = load { ptr, i64, i64 }, ptr %a1073 call void @finch.gen.emit(ptr %t1092, { ptr, i64, i64 } %t1093) @@ -81732,7 +81758,7 @@ then8069: call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1109 -endif8071: +endif8075: %t1110 = load ptr, ptr %a1 %t1111 = load { ptr, i64, i64 }, ptr %a1073 %t1112 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1110, { ptr, i64, i64 } %t1111) @@ -81748,8 +81774,8 @@ endif8071: store { ptr, i64, i64 } { ptr @.str.5123, i64 6, i64 0 }, ptr %a1121 %t1122 = call i32 @finch_str_eq(ptr %a1120, ptr %a1121) %t1123 = icmp ne i32 %t1122, 0 - br i1 %t1123, label %then8072, label %endif8074 -then8072: + br i1 %t1123, label %then8076, label %endif8078 +then8076: %t1124 = load ptr, ptr %a1 %t1125 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1124, { ptr, i64, i64 } { ptr @.str.5124, i64 9, i64 0 }) store { ptr, i64, i64 } %t1125, ptr %a1126 @@ -81789,15 +81815,15 @@ then8072: call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1145 -endif8074: +endif8078: %t1146 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 %t1147 = load { ptr, i64, i64 }, ptr %t1146 store { ptr, i64, i64 } %t1147, ptr %a1148 store { ptr, i64, i64 } { ptr @.str.5125, i64 3, i64 0 }, ptr %a1149 %t1150 = call i32 @finch_str_eq(ptr %a1148, ptr %a1149) %t1151 = icmp ne i32 %t1150, 0 - br i1 %t1151, label %then8075, label %endif8077 -then8075: + br i1 %t1151, label %then8079, label %endif8081 +then8079: %t1152 = load ptr, ptr %a1 %t1153 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1152) store { ptr, i64, i64 } %t1153, ptr %a1154 @@ -81856,7 +81882,7 @@ then8075: call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1188 -endif8077: +endif8081: %t1189 = load { ptr, i64, i64 }, ptr %a1113 store { ptr, i64, i64 } %t1189, ptr %a1190 call void @finch_str_copy(ptr %a1191, ptr %a1190) @@ -81894,14 +81920,14 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 0, ptr %a4 - br label %each.cond8078 -each.cond8078: + br label %each.cond8082 +each.cond8082: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a4 %t8 = icmp slt i64 %t7, %t6 - br i1 %t8, label %each.body8079, label %each.end8081 -each.body8079: + br i1 %t8, label %each.body8083, label %each.end8085 +each.body8083: %t9 = load ptr, ptr %a2 %t10 = getelementptr inbounds %S.gen.Val, ptr %t9, i64 %t7 %t11 = load %S.gen.Val, ptr %t10 @@ -81909,13 +81935,13 @@ each.body8079: %t13 = load ptr, ptr %a1 %t14 = load %S.gen.Val, ptr %a12 call void @finch.gen.release(ptr %t13, %S.gen.Val %t14) - br label %each.step8080 -each.step8080: + br label %each.step8084 +each.step8084: %t15 = load i64, ptr %a4 %t16 = add i64 %t15, 1 store i64 %t16, ptr %a4 - br label %each.cond8078 -each.end8081: + br label %each.cond8082 +each.end8085: %t17 = load ptr, ptr %a1 %t18 = load i64, ptr %a3 call void @finch.gen.heldEnd(ptr %t17, i64 %t18) @@ -81953,27 +81979,27 @@ entry: %t16 = load i64, ptr %t13 %t17 = load ptr, ptr %a12 store i64 0, ptr %a18 - br label %find.cond8082 -find.cond8082: + br label %find.cond8086 +find.cond8086: %t19 = load i64, ptr %a18 %t20 = icmp slt i64 %t19, %t16 - br i1 %t20, label %find.body8083, label %find.end8086 -find.body8083: + br i1 %t20, label %find.body8087, label %find.end8090 +find.body8087: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t19 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } %t14, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %find.hit8084, label %find.next8085 -find.hit8084: + br i1 %t26, label %find.hit8088, label %find.next8089 +find.hit8088: store i64 %t19, ptr %a15 - br label %find.end8086 -find.next8085: + br label %find.end8090 +find.next8089: %t27 = add i64 %t19, 1 store i64 %t27, ptr %a18 - br label %find.cond8082 -find.end8086: + br label %find.cond8086 +find.end8090: %t28 = load i64, ptr %a15 %t29 = icmp sge i64 %t28, 0 call void @finch.drop.arr_str(ptr %a12) @@ -82108,46 +82134,46 @@ entry: %t63 = load i64, ptr %t60 %t64 = load ptr, ptr %a30 store i64 0, ptr %a65 - br label %find.cond8087 -find.cond8087: + br label %find.cond8091 +find.cond8091: %t66 = load i64, ptr %a65 %t67 = icmp slt i64 %t66, %t63 - br i1 %t67, label %find.body8088, label %find.end8091 -find.body8088: + br i1 %t67, label %find.body8092, label %find.end8095 +find.body8092: %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t66 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } %t61, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 - br i1 %t73, label %find.hit8089, label %find.next8090 -find.hit8089: + br i1 %t73, label %find.hit8093, label %find.next8094 +find.hit8093: store i64 %t66, ptr %a62 - br label %find.end8091 -find.next8090: + br label %find.end8095 +find.next8094: %t74 = add i64 %t66, 1 store i64 %t74, ptr %a65 - br label %find.cond8087 -find.end8091: + br label %find.cond8091 +find.end8095: %t75 = load i64, ptr %a62 store i64 %t75, ptr %a76 %t77 = load i64, ptr %a76 %t78 = icmp slt i64 %t77, 0 - br i1 %t78, label %then8092, label %endif8094 -then8092: + br i1 %t78, label %then8096, label %endif8098 +then8096: call void @finch.drop.arr_str(ptr %a59) call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } { ptr @.str.5183, i64 0, i64 0 } -endif8094: +endif8098: %t79 = load i64, ptr %a76 %t80 = load { ptr, i64, i64 }, ptr %a59 %t81 = extractvalue { ptr, i64, i64 } %t80, 1 %t82 = icmp uge i64 %t79, %t81 - br i1 %t82, label %range8095, label %inrange8096 -range8095: + br i1 %t82, label %range8099, label %inrange8100 +range8099: call void @finch_panic_index(ptr @.str.5185, i64 4830, i64 %t79, i64 %t81) unreachable -inrange8096: +inrange8100: %t83 = extractvalue { ptr, i64, i64 } %t80, 0 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t79 %t85 = load { ptr, i64, i64 }, ptr %t84 @@ -82185,19 +82211,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond8106 -n.cond8106: + br label %n.cond8110 +n.cond8110: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body8107, label %n.end8108 -n.body8107: + br i1 %t6, label %n.body8111, label %n.end8112 +n.body8111: %t7 = getelementptr inbounds %S.docs.Doc, ptr %t1, i64 %t5 call void @finch.drop.S_docs_Doc(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond8106 -n.end8108: + br label %n.cond8110 +n.end8112: call void @finch_arr_free(ptr %a) ret void } @@ -82865,26 +82891,26 @@ entry: store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic8097, label %ok8098 -panic8097: + br i1 %t10, label %panic8101, label %ok8102 +panic8101: call void @finch_panic(ptr @.str.5187, i64 4835, ptr @.str.5188) unreachable -ok8098: +ok8102: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 %t12 = load i1, ptr %t11 - br label %logic.from8099 -logic.from8099: - br i1 %t12, label %logic.rhs8100, label %logic.end8101 -logic.rhs8100: + br label %logic.from8103 +logic.from8103: + br i1 %t12, label %logic.rhs8104, label %logic.end8105 +logic.rhs8104: %t13 = load { ptr, i64, i64 }, ptr %a8 %t14 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t13) - br label %logic.rend8102 -logic.rend8102: - br label %logic.end8101 -logic.end8101: - %t15 = phi i1 [ false, %logic.from8099 ], [ %t14, %logic.rend8102 ] - br i1 %t15, label %then8103, label %endif8105 -then8103: + br label %logic.rend8106 +logic.rend8106: + br label %logic.end8105 +logic.end8105: + %t15 = phi i1 [ false, %logic.from8103 ], [ %t14, %logic.rend8106 ] + br i1 %t15, label %then8107, label %endif8109 +then8107: %t16 = call { ptr, i64, i64 } @finch.docs.builtins() %t17 = load { ptr, i64, i64 }, ptr %a8 %t18 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t16, { ptr, i64, i64 } %t17) @@ -82895,8 +82921,8 @@ then8103: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp sgt i64 %t23, 0 - br i1 %t24, label %then8109, label %endif8111 -then8109: + br i1 %t24, label %then8113, label %endif8115 +then8113: %t25 = load ptr, ptr %a1 %t26 = load %S.ast.Node, ptr %a2 %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 @@ -82908,51 +82934,51 @@ then8109: call void @finch.gen.noteRef(ptr %t25, %S.ast.Node %t26, i64 %t28, i64 %t30, { ptr, i64, i64 } %t32, { ptr, i64, i64 } { ptr @.str.5189, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) - br label %endif8111 -endif8111: + br label %endif8115 +endif8115: call void @finch.drop.S_docs_Doc(ptr %a20) - br label %endif8105 -endif8105: + br label %endif8109 +endif8109: %t34 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.5190, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then8112, label %endif8114 -then8112: + br i1 %t38, label %then8116, label %endif8118 +then8116: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.5191, i64 86, i64 0 }) - br label %endif8114 -endif8114: + br label %endif8118 +endif8118: %t41 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.5192, i64 5, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br i1 %t45, label %then8115, label %endif8117 -then8115: + br i1 %t45, label %then8119, label %endif8121 +then8119: %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 %t48 = load i64, ptr %t47 store i64 0, ptr %a49 - br label %for.cond8118 -for.cond8118: + br label %for.cond8122 +for.cond8122: %t50 = load i64, ptr %a49 %t51 = icmp slt i64 %t50, %t48 - br i1 %t51, label %for.body8119, label %for.end8121 -for.body8119: + br i1 %t51, label %for.body8123, label %for.end8125 +for.body8123: %t52 = load ptr, ptr %a1 %t53 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t54 = load i64, ptr %a49 %t55 = load { ptr, i64, i64 }, ptr %t53 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range8122, label %inrange8123 -range8122: + br i1 %t57, label %range8126, label %inrange8127 +range8126: call void @finch_panic_index(ptr @.str.5193, i64 4846, i64 %t54, i64 %t56) unreachable -inrange8123: +inrange8127: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 @@ -82965,33 +82991,33 @@ inrange8123: store { ptr, i64, i64 } { ptr @.str.5194, i64 4, i64 0 }, ptr %a67 %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) %t69 = icmp ne i32 %t68, 0 - br i1 %t69, label %then8124, label %endif8126 -then8124: + br i1 %t69, label %then8128, label %endif8130 +then8128: %t70 = load ptr, ptr %a1 %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t72 = load i64, ptr %a49 %t73 = load { ptr, i64, i64 }, ptr %t71 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 - br i1 %t75, label %range8127, label %inrange8128 -range8127: + br i1 %t75, label %range8131, label %inrange8132 +range8131: call void @finch_panic_index(ptr @.str.5195, i64 4848, i64 %t72, i64 %t74) unreachable -inrange8128: +inrange8132: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 %t72 %t78 = load %S.ast.Node, ptr %t77 call void @finch.gen.fail(ptr %t70, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5196, i64 53, i64 0 }) - br label %endif8126 -endif8126: + br label %endif8130 +endif8130: %t79 = load i64, ptr %a49 %t80 = icmp sgt i64 %t79, 0 - br i1 %t80, label %then8129, label %endif8131 -then8129: + br i1 %t80, label %then8133, label %endif8135 +then8133: %t81 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t81, { ptr, i64, i64 } { ptr @.str.5197, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5198, i64 0, i64 0 }) - br label %endif8131 -endif8131: + br label %endif8135 +endif8135: %t82 = load ptr, ptr %a1 %t83 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 0 %t84 = load { ptr, i64, i64 }, ptr %t83 @@ -83002,27 +83028,27 @@ endif8131: %t88 = load %S.gen.Val, ptr %a62 call void @finch.gen.release(ptr %t87, %S.gen.Val %t88) call void @finch.drop.S_gen_Val(ptr %a62) - br label %for.step8120 -for.step8120: + br label %for.step8124 +for.step8124: %t89 = load i64, ptr %a49 %t90 = add i64 %t89, 1 store i64 %t90, ptr %a49 - br label %for.cond8118 -for.end8121: + br label %for.cond8122 +for.end8125: %t91 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t91, { ptr, i64, i64 } { ptr @.str.5199, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5200, i64 0, i64 0 }) %t92 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5201, i64 4, i64 0 }) %t93 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t92, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t93 -endif8117: +endif8121: %t94 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t94, ptr %a95 store { ptr, i64, i64 } { ptr @.str.5202, i64 4, i64 0 }, ptr %a96 %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) %t98 = icmp ne i32 %t97, 0 - br i1 %t98, label %then8132, label %endif8134 -then8132: + br i1 %t98, label %then8136, label %endif8138 +then8136: %t99 = load ptr, ptr %a1 %t100 = load %S.ast.Node, ptr %a2 %t101 = load { ptr, i64, i64 }, ptr %a8 @@ -83031,11 +83057,11 @@ then8132: %t103 = load { ptr, i64, i64 }, ptr %t102 %t104 = extractvalue { ptr, i64, i64 } %t103, 1 %t105 = icmp uge i64 0, %t104 - br i1 %t105, label %range8135, label %inrange8136 -range8135: + br i1 %t105, label %range8139, label %inrange8140 +range8139: call void @finch_panic_index(ptr @.str.5203, i64 4861, i64 0, i64 %t104) unreachable -inrange8136: +inrange8140: %t106 = extractvalue { ptr, i64, i64 } %t103, 0 %t107 = getelementptr inbounds %S.ast.Node, ptr %t106, i64 0 %t108 = load %S.ast.Node, ptr %t107 @@ -83049,30 +83075,30 @@ inrange8136: store { ptr, i64, i64 } { ptr @.str.5204, i64 3, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 - br label %logic.from8137 -logic.from8137: - br i1 %t118, label %logic.rhs8138, label %logic.end8139 -logic.rhs8138: + br label %logic.from8141 +logic.from8141: + br i1 %t118, label %logic.rhs8142, label %logic.end8143 +logic.rhs8142: %t119 = load ptr, ptr %a1 %t120 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %t120 %t122 = call i64 @finch.gen.lookup(ptr %t119, { ptr, i64, i64 } %t121) %t123 = icmp slt i64 %t122, 0 - br label %logic.rend8140 -logic.rend8140: - br label %logic.end8139 -logic.end8139: - %t124 = phi i1 [ false, %logic.from8137 ], [ %t123, %logic.rend8140 ] - br i1 %t124, label %then8141, label %endif8143 -then8141: + br label %logic.rend8144 +logic.rend8144: + br label %logic.end8143 +logic.end8143: + %t124 = phi i1 [ false, %logic.from8141 ], [ %t123, %logic.rend8144 ] + br i1 %t124, label %then8145, label %endif8147 +then8145: %t125 = load ptr, ptr %a1 %t126 = load ptr, ptr %a1 %t127 = icmp eq ptr %t126, null - br i1 %t127, label %panic8144, label %ok8145 -panic8144: + br i1 %t127, label %panic8148, label %ok8149 +panic8148: call void @finch_panic(ptr @.str.5205, i64 4863, ptr @.str.5206) unreachable -ok8145: +ok8149: %t128 = getelementptr inbounds %S.gen.Gen, ptr %t126, i32 0, i32 14 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 @@ -83081,8 +83107,8 @@ ok8145: store i64 %t132, ptr %a133 %t134 = load i64, ptr %a133 %t135 = icmp sge i64 %t134, 0 - br i1 %t135, label %then8146, label %endif8148 -then8146: + br i1 %t135, label %then8150, label %endif8152 +then8150: %t136 = load ptr, ptr %a1 %t137 = load i64, ptr %a133 %t138 = load %S.ast.Node, ptr %a112 @@ -83093,52 +83119,52 @@ then8146: call void @finch.drop.S_ast_Node(ptr %a112) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t142 -endif8148: - br label %endif8143 -endif8143: +endif8152: + br label %endif8147 +endif8147: %t143 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t144 = load { ptr, i64, i64 }, ptr %t143 store { ptr, i64, i64 } %t144, ptr %a145 store { ptr, i64, i64 } { ptr @.str.5208, i64 3, i64 0 }, ptr %a146 %t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146) %t148 = icmp eq i32 %t147, 0 - br label %logic.from8149 -logic.from8149: - br i1 %t148, label %logic.rhs8150, label %logic.end8151 -logic.rhs8150: + br label %logic.from8153 +logic.from8153: + br i1 %t148, label %logic.rhs8154, label %logic.end8155 +logic.rhs8154: %t149 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.5209, i64 6, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp eq i32 %t153, 0 - br label %logic.rend8152 -logic.rend8152: - br label %logic.end8151 -logic.end8151: - %t155 = phi i1 [ false, %logic.from8149 ], [ %t154, %logic.rend8152 ] - br label %logic.from8153 -logic.from8153: - br i1 %t155, label %logic.rhs8154, label %logic.end8155 -logic.rhs8154: + br label %logic.rend8156 +logic.rend8156: + br label %logic.end8155 +logic.end8155: + %t155 = phi i1 [ false, %logic.from8153 ], [ %t154, %logic.rend8156 ] + br label %logic.from8157 +logic.from8157: + br i1 %t155, label %logic.rhs8158, label %logic.end8159 +logic.rhs8158: %t156 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.5210, i64 5, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp eq i32 %t160, 0 - br label %logic.rend8156 -logic.rend8156: - br label %logic.end8155 -logic.end8155: - %t162 = phi i1 [ false, %logic.from8153 ], [ %t161, %logic.rend8156 ] - br i1 %t162, label %then8157, label %endif8159 -then8157: + br label %logic.rend8160 +logic.rend8160: + br label %logic.end8159 +logic.end8159: + %t162 = phi i1 [ false, %logic.from8157 ], [ %t161, %logic.rend8160 ] + br i1 %t162, label %then8161, label %endif8163 +then8161: %t163 = load ptr, ptr %a1 %t164 = load %S.ast.Node, ptr %a112 call void @finch.gen.fail(ptr %t163, %S.ast.Node %t164, { ptr, i64, i64 } { ptr @.str.5211, i64 63, i64 0 }) - br label %endif8159 -endif8159: + br label %endif8163 +endif8163: %t165 = load ptr, ptr %a1 %t166 = load %S.ast.Node, ptr %a112 %t167 = call %S.gen.Place @finch.gen.place(ptr %t165, %S.ast.Node %t166, i1 true) @@ -83157,14 +83183,14 @@ endif8159: call void @finch.drop.S_ast_Node(ptr %a112) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t178 -endif8134: +endif8138: %t179 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t179, ptr %a180 store { ptr, i64, i64 } { ptr @.str.5212, i64 3, i64 0 }, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 - br i1 %t183, label %then8160, label %endif8162 -then8160: + br i1 %t183, label %then8164, label %endif8166 +then8164: %t184 = load ptr, ptr %a1 %t185 = load %S.ast.Node, ptr %a2 %t186 = load { ptr, i64, i64 }, ptr %a8 @@ -83174,11 +83200,11 @@ then8160: %t189 = load { ptr, i64, i64 }, ptr %t188 %t190 = extractvalue { ptr, i64, i64 } %t189, 1 %t191 = icmp uge i64 0, %t190 - br i1 %t191, label %range8163, label %inrange8164 -range8163: + br i1 %t191, label %range8167, label %inrange8168 +range8167: call void @finch_panic_index(ptr @.str.5213, i64 4876, i64 0, i64 %t190) unreachable -inrange8164: +inrange8168: %t192 = extractvalue { ptr, i64, i64 } %t189, 0 %t193 = getelementptr inbounds %S.ast.Node, ptr %t192, i64 0 %t194 = load %S.ast.Node, ptr %t193 @@ -83200,8 +83226,8 @@ inrange8164: store { ptr, i64, i64 } { ptr @.str.5214, i64 3, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 - br i1 %t212, label %then8165, label %else8166 -then8165: + br i1 %t212, label %then8169, label %else8170 +then8169: %t213 = load ptr, ptr %a1 %t214 = load %S.gen.Val, ptr %a196 %t215 = call { ptr, i64, i64 } @finch.gen.own(ptr %t213, %S.gen.Val %t214) @@ -83218,12 +83244,12 @@ then8165: call void @finch.drop.S_gen_Val(ptr %a196) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t223 -else8166: +else8170: %t224 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t225 = load %S.ast.Type, ptr %t224 %t226 = call i1 @finch.gen.isSigned(%S.ast.Type %t225) - br i1 %t226, label %then8168, label %else8169 -then8168: + br i1 %t226, label %then8172, label %else8173 +then8172: %t227 = load ptr, ptr %a1 %t228 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5215, i64 34, i64 0 }, ptr %a230 @@ -83262,13 +83288,13 @@ then8168: call void @finch.gen.emit(ptr %t227, { ptr, i64, i64 } %t256) store { ptr, i64, i64 } %t256, ptr %a257 call void @finch_str_drop(ptr %a257) - br label %endif8170 -else8169: + br label %endif8174 +else8173: %t258 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t259 = load %S.ast.Type, ptr %t258 %t260 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t259) - br i1 %t260, label %then8171, label %else8172 -then8171: + br i1 %t260, label %then8175, label %else8176 +then8175: %t261 = load ptr, ptr %a1 %t262 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5219, i64 35, i64 0 }, ptr %a264 @@ -83307,13 +83333,13 @@ then8171: call void @finch.gen.emit(ptr %t261, { ptr, i64, i64 } %t290) store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_drop(ptr %a291) - br label %endif8173 -else8172: + br label %endif8177 +else8176: %t292 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t293 = load %S.ast.Type, ptr %t292 %t294 = call i1 @finch.gen.isFloat(%S.ast.Type %t293) - br i1 %t294, label %then8174, label %else8175 -then8174: + br i1 %t294, label %then8178, label %else8179 +then8178: %t295 = load ptr, ptr %a1 %t296 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5223, i64 36, i64 0 }, ptr %a298 @@ -83352,15 +83378,15 @@ then8174: call void @finch.gen.emit(ptr %t295, { ptr, i64, i64 } %t324) store { ptr, i64, i64 } %t324, ptr %a325 call void @finch_str_drop(ptr %a325) - br label %endif8176 -else8175: + br label %endif8180 +else8179: %t326 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t326, ptr %a327 store { ptr, i64, i64 } { ptr @.str.5227, i64 4, i64 0 }, ptr %a328 %t329 = call i32 @finch_str_eq(ptr %a327, ptr %a328) %t330 = icmp ne i32 %t329, 0 - br i1 %t330, label %then8177, label %else8178 -then8177: + br i1 %t330, label %then8181, label %else8182 +then8181: %t331 = load ptr, ptr %a1 %t332 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5228, i64 35, i64 0 }, ptr %a334 @@ -83390,15 +83416,15 @@ then8177: call void @finch.gen.emit(ptr %t331, { ptr, i64, i64 } %t353) store { ptr, i64, i64 } %t353, ptr %a354 call void @finch_str_drop(ptr %a354) - br label %endif8179 -else8178: + br label %endif8183 +else8182: %t355 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t355, ptr %a356 store { ptr, i64, i64 } { ptr @.str.5231, i64 4, i64 0 }, ptr %a357 %t358 = call i32 @finch_str_eq(ptr %a356, ptr %a357) %t359 = icmp ne i32 %t358, 0 - br i1 %t359, label %then8180, label %else8181 -then8180: + br i1 %t359, label %then8184, label %else8185 +then8184: %t360 = load ptr, ptr %a1 %t361 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 %t362 = load { ptr, i64, i64 }, ptr %t361 @@ -83445,15 +83471,15 @@ then8180: store { ptr, i64, i64 } %t396, ptr %a397 call void @finch_str_drop(ptr %a397) call void @finch_str_drop(ptr %a374) - br label %endif8182 -else8181: + br label %endif8186 +else8185: %t398 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t398, ptr %a399 store { ptr, i64, i64 } { ptr @.str.5237, i64 3, i64 0 }, ptr %a400 %t401 = call i32 @finch_str_eq(ptr %a399, ptr %a400) %t402 = icmp ne i32 %t401, 0 - br i1 %t402, label %then8183, label %else8184 -then8183: + br i1 %t402, label %then8187, label %else8188 +then8187: %t403 = load ptr, ptr %a1 %t404 = load { ptr, i64, i64 }, ptr %a199 call void @finch.gen.store(ptr %t403, { ptr, i64, i64 } { ptr @.str.5238, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5239, i64 15, i64 0 }, { ptr, i64, i64 } %t404) @@ -83487,27 +83513,27 @@ then8183: store { ptr, i64, i64 } %t427, ptr %a428 call void @finch_str_drop(ptr %a428) store i1 true, ptr %a207 - br label %endif8185 -else8184: + br label %endif8189 +else8188: %t429 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t429, ptr %a430 store { ptr, i64, i64 } { ptr @.str.5243, i64 5, i64 0 }, ptr %a431 %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) %t433 = icmp ne i32 %t432, 0 - br label %logic.from8186 -logic.from8186: - br i1 %t433, label %logic.rhs8187, label %logic.end8188 -logic.rhs8187: + br label %logic.from8190 +logic.from8190: + br i1 %t433, label %logic.rhs8191, label %logic.end8192 +logic.rhs8191: %t434 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t435 = getelementptr inbounds %S.ast.Type, ptr %t434, i32 0, i32 1 %t436 = load { ptr, i64, i64 }, ptr %t435 %t437 = extractvalue { ptr, i64, i64 } %t436, 1 %t438 = icmp uge i64 0, %t437 - br i1 %t438, label %range8189, label %inrange8190 -range8189: + br i1 %t438, label %range8193, label %inrange8194 +range8193: call void @finch_panic_index(ptr @.str.5244, i64 4898, i64 0, i64 %t437) unreachable -inrange8190: +inrange8194: %t439 = extractvalue { ptr, i64, i64 } %t436, 0 %t440 = getelementptr inbounds %S.ast.Type, ptr %t439, i64 0 %t441 = getelementptr inbounds %S.ast.Type, ptr %t440, i32 0, i32 0 @@ -83516,20 +83542,20 @@ inrange8190: store { ptr, i64, i64 } { ptr @.str.5245, i64 2, i64 0 }, ptr %a444 %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) %t446 = icmp ne i32 %t445, 0 - br label %logic.from8191 -logic.from8191: - br i1 %t446, label %logic.end8193, label %logic.rhs8192 -logic.rhs8192: + br label %logic.from8195 +logic.from8195: + br i1 %t446, label %logic.end8197, label %logic.rhs8196 +logic.rhs8196: %t447 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t448 = getelementptr inbounds %S.ast.Type, ptr %t447, i32 0, i32 1 %t449 = load { ptr, i64, i64 }, ptr %t448 %t450 = extractvalue { ptr, i64, i64 } %t449, 1 %t451 = icmp uge i64 0, %t450 - br i1 %t451, label %range8194, label %inrange8195 -range8194: + br i1 %t451, label %range8198, label %inrange8199 +range8198: call void @finch_panic_index(ptr @.str.5246, i64 4898, i64 0, i64 %t450) unreachable -inrange8195: +inrange8199: %t452 = extractvalue { ptr, i64, i64 } %t449, 0 %t453 = getelementptr inbounds %S.ast.Type, ptr %t452, i64 0 %t454 = getelementptr inbounds %S.ast.Type, ptr %t453, i32 0, i32 0 @@ -83538,18 +83564,18 @@ inrange8195: store { ptr, i64, i64 } { ptr @.str.5247, i64 4, i64 0 }, ptr %a457 %t458 = call i32 @finch_str_eq(ptr %a456, ptr %a457) %t459 = icmp ne i32 %t458, 0 - br label %logic.rend8196 -logic.rend8196: - br label %logic.end8193 -logic.end8193: - %t460 = phi i1 [ true, %logic.from8191 ], [ %t459, %logic.rend8196 ] - br label %logic.rend8197 -logic.rend8197: - br label %logic.end8188 -logic.end8188: - %t461 = phi i1 [ false, %logic.from8186 ], [ %t460, %logic.rend8197 ] - br i1 %t461, label %then8198, label %else8199 -then8198: + br label %logic.rend8200 +logic.rend8200: + br label %logic.end8197 +logic.end8197: + %t460 = phi i1 [ true, %logic.from8195 ], [ %t459, %logic.rend8200 ] + br label %logic.rend8201 +logic.rend8201: + br label %logic.end8192 +logic.end8192: + %t461 = phi i1 [ false, %logic.from8190 ], [ %t460, %logic.rend8201 ] + br i1 %t461, label %then8202, label %else8203 +then8202: %t462 = load ptr, ptr %a1 %t463 = load { ptr, i64, i64 }, ptr %a199 call void @finch.gen.store(ptr %t462, { ptr, i64, i64 } { ptr @.str.5248, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5249, i64 15, i64 0 }, { ptr, i64, i64 } %t463) @@ -83588,85 +83614,85 @@ then8198: %t490 = load ptr, ptr %a1 %t491 = load %S.gen.Val, ptr %a196 call void @finch.gen.release(ptr %t490, %S.gen.Val %t491) - br label %endif8200 -else8199: + br label %endif8204 +else8203: %t492 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t492, ptr %a493 store { ptr, i64, i64 } { ptr @.str.5253, i64 4, i64 0 }, ptr %a494 %t495 = call i32 @finch_str_eq(ptr %a493, ptr %a494) %t496 = icmp ne i32 %t495, 0 - br label %logic.from8201 -logic.from8201: - br i1 %t496, label %logic.end8203, label %logic.rhs8202 -logic.rhs8202: + br label %logic.from8205 +logic.from8205: + br i1 %t496, label %logic.end8207, label %logic.rhs8206 +logic.rhs8206: %t497 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t497, ptr %a498 store { ptr, i64, i64 } { ptr @.str.5254, i64 4, i64 0 }, ptr %a499 %t500 = call i32 @finch_str_eq(ptr %a498, ptr %a499) %t501 = icmp ne i32 %t500, 0 - br label %logic.rend8204 -logic.rend8204: - br label %logic.end8203 -logic.end8203: - %t502 = phi i1 [ true, %logic.from8201 ], [ %t501, %logic.rend8204 ] - br label %logic.from8205 -logic.from8205: - br i1 %t502, label %logic.end8207, label %logic.rhs8206 -logic.rhs8206: + br label %logic.rend8208 +logic.rend8208: + br label %logic.end8207 +logic.end8207: + %t502 = phi i1 [ true, %logic.from8205 ], [ %t501, %logic.rend8208 ] + br label %logic.from8209 +logic.from8209: + br i1 %t502, label %logic.end8211, label %logic.rhs8210 +logic.rhs8210: %t503 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t503, ptr %a504 store { ptr, i64, i64 } { ptr @.str.5255, i64 5, i64 0 }, ptr %a505 %t506 = call i32 @finch_str_eq(ptr %a504, ptr %a505) %t507 = icmp ne i32 %t506, 0 - br label %logic.rend8208 -logic.rend8208: - br label %logic.end8207 -logic.end8207: - %t508 = phi i1 [ true, %logic.from8205 ], [ %t507, %logic.rend8208 ] - br label %logic.from8209 -logic.from8209: - br i1 %t508, label %logic.end8211, label %logic.rhs8210 -logic.rhs8210: + br label %logic.rend8212 +logic.rend8212: + br label %logic.end8211 +logic.end8211: + %t508 = phi i1 [ true, %logic.from8209 ], [ %t507, %logic.rend8212 ] + br label %logic.from8213 +logic.from8213: + br i1 %t508, label %logic.end8215, label %logic.rhs8214 +logic.rhs8214: %t509 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t509, ptr %a510 store { ptr, i64, i64 } { ptr @.str.5256, i64 3, i64 0 }, ptr %a511 %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) %t513 = icmp ne i32 %t512, 0 - br label %logic.rend8212 -logic.rend8212: - br label %logic.end8211 -logic.end8211: - %t514 = phi i1 [ true, %logic.from8209 ], [ %t513, %logic.rend8212 ] - br label %logic.from8213 -logic.from8213: - br i1 %t514, label %logic.end8215, label %logic.rhs8214 -logic.rhs8214: + br label %logic.rend8216 +logic.rend8216: + br label %logic.end8215 +logic.end8215: + %t514 = phi i1 [ true, %logic.from8213 ], [ %t513, %logic.rend8216 ] + br label %logic.from8217 +logic.from8217: + br i1 %t514, label %logic.end8219, label %logic.rhs8218 +logic.rhs8218: %t515 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t515, ptr %a516 store { ptr, i64, i64 } { ptr @.str.5257, i64 6, i64 0 }, ptr %a517 %t518 = call i32 @finch_str_eq(ptr %a516, ptr %a517) %t519 = icmp ne i32 %t518, 0 - br label %logic.rend8216 -logic.rend8216: - br label %logic.end8215 -logic.end8215: - %t520 = phi i1 [ true, %logic.from8213 ], [ %t519, %logic.rend8216 ] - br label %logic.from8217 -logic.from8217: - br i1 %t520, label %logic.end8219, label %logic.rhs8218 -logic.rhs8218: + br label %logic.rend8220 +logic.rend8220: + br label %logic.end8219 +logic.end8219: + %t520 = phi i1 [ true, %logic.from8217 ], [ %t519, %logic.rend8220 ] + br label %logic.from8221 +logic.from8221: + br i1 %t520, label %logic.end8223, label %logic.rhs8222 +logic.rhs8222: %t521 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t521, ptr %a522 store { ptr, i64, i64 } { ptr @.str.5258, i64 4, i64 0 }, ptr %a523 %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) %t525 = icmp ne i32 %t524, 0 - br label %logic.rend8220 -logic.rend8220: - br label %logic.end8219 -logic.end8219: - %t526 = phi i1 [ true, %logic.from8217 ], [ %t525, %logic.rend8220 ] - br i1 %t526, label %then8221, label %else8222 -then8221: + br label %logic.rend8224 +logic.rend8224: + br label %logic.end8223 +logic.end8223: + %t526 = phi i1 [ true, %logic.from8221 ], [ %t525, %logic.rend8224 ] + br i1 %t526, label %then8225, label %else8226 +then8225: %t527 = load ptr, ptr %a1 %t528 = load { ptr, i64, i64 }, ptr %a199 call void @finch.gen.store(ptr %t527, { ptr, i64, i64 } { ptr @.str.5259, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5260, i64 15, i64 0 }, { ptr, i64, i64 } %t528) @@ -83680,18 +83706,18 @@ then8221: %t535 = load ptr, ptr %a1 %t536 = load %S.gen.Val, ptr %a196 call void @finch.gen.release(ptr %t535, %S.gen.Val %t536) - br label %endif8223 -else8222: + br label %endif8227 +else8226: %t537 = load ptr, ptr %a1 %t538 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t539 = load { ptr, i64, i64 }, ptr %t538 %t540 = extractvalue { ptr, i64, i64 } %t539, 1 %t541 = icmp uge i64 0, %t540 - br i1 %t541, label %range8224, label %inrange8225 -range8224: + br i1 %t541, label %range8228, label %inrange8229 +range8228: call void @finch_panic_index(ptr @.str.5261, i64 4908, i64 0, i64 %t540) unreachable -inrange8225: +inrange8229: %t542 = extractvalue { ptr, i64, i64 } %t539, 0 %t543 = getelementptr inbounds %S.ast.Node, ptr %t542, i64 0 %t544 = load %S.ast.Node, ptr %t543 @@ -83713,24 +83739,24 @@ inrange8225: call void @finch.gen.fail(ptr %t537, %S.ast.Node %t544, { ptr, i64, i64 } %t557) store { ptr, i64, i64 } %t557, ptr %a558 call void @finch_str_drop(ptr %a558) - br label %endif8223 -endif8223: - br label %endif8200 -endif8200: - br label %endif8185 -endif8185: - br label %endif8182 -endif8182: - br label %endif8179 -endif8179: - br label %endif8176 -endif8176: - br label %endif8173 -endif8173: - br label %endif8170 -endif8170: - br label %endif8167 -endif8167: + br label %endif8227 +endif8227: + br label %endif8204 +endif8204: + br label %endif8189 +endif8189: + br label %endif8186 +endif8186: + br label %endif8183 +endif8183: + br label %endif8180 +endif8180: + br label %endif8177 +endif8177: + br label %endif8174 +endif8174: + br label %endif8171 +endif8171: %t559 = load ptr, ptr %a1 %t560 = load { ptr, i64, i64 }, ptr %a199 %t561 = call { ptr, i64, i64 } @finch.gen.load(ptr %t559, { ptr, i64, i64 } { ptr @.str.5264, i64 17, i64 0 }, { ptr, i64, i64 } %t560) @@ -83745,15 +83771,15 @@ endif8167: call void @finch.drop.S_gen_Val(ptr %a196) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t567 -endif8162: +endif8166: %t568 = load { ptr, i64, i64 }, ptr %a8 %t569 = call { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %t568) store { ptr, i64, i64 } %t569, ptr %a570 %t571 = getelementptr inbounds { ptr, i64, i64 }, ptr %a570, i32 0, i32 1 %t572 = load i64, ptr %t571 %t573 = icmp sgt i64 %t572, 0 - br i1 %t573, label %then8226, label %endif8228 -then8226: + br i1 %t573, label %then8230, label %endif8232 +then8230: %t574 = load ptr, ptr %a1 %t575 = load %S.ast.Node, ptr %a2 %t576 = load { ptr, i64, i64 }, ptr %a570 @@ -83764,28 +83790,28 @@ then8226: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t578 -endif8228: +endif8232: %t580 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t580, ptr %a581 store { ptr, i64, i64 } { ptr @.str.5266, i64 9, i64 0 }, ptr %a582 %t583 = call i32 @finch_str_eq(ptr %a581, ptr %a582) %t584 = icmp ne i32 %t583, 0 - br label %logic.from8229 -logic.from8229: - br i1 %t584, label %logic.end8231, label %logic.rhs8230 -logic.rhs8230: + br label %logic.from8233 +logic.from8233: + br i1 %t584, label %logic.end8235, label %logic.rhs8234 +logic.rhs8234: %t585 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t585, ptr %a586 store { ptr, i64, i64 } { ptr @.str.5267, i64 11, i64 0 }, ptr %a587 %t588 = call i32 @finch_str_eq(ptr %a586, ptr %a587) %t589 = icmp ne i32 %t588, 0 - br label %logic.rend8232 -logic.rend8232: - br label %logic.end8231 -logic.end8231: - %t590 = phi i1 [ true, %logic.from8229 ], [ %t589, %logic.rend8232 ] - br i1 %t590, label %then8233, label %endif8235 -then8233: + br label %logic.rend8236 +logic.rend8236: + br label %logic.end8235 +logic.end8235: + %t590 = phi i1 [ true, %logic.from8233 ], [ %t589, %logic.rend8236 ] + br i1 %t590, label %then8237, label %endif8239 +then8237: %t591 = load ptr, ptr %a1 %t592 = load %S.ast.Node, ptr %a2 %t593 = load { ptr, i64, i64 }, ptr %a8 @@ -83795,11 +83821,11 @@ then8233: %t596 = load { ptr, i64, i64 }, ptr %t595 %t597 = extractvalue { ptr, i64, i64 } %t596, 1 %t598 = icmp uge i64 0, %t597 - br i1 %t598, label %range8236, label %inrange8237 -range8236: + br i1 %t598, label %range8240, label %inrange8241 +range8240: call void @finch_panic_index(ptr @.str.5268, i64 4918, i64 0, i64 %t597) unreachable -inrange8237: +inrange8241: %t599 = extractvalue { ptr, i64, i64 } %t596, 0 %t600 = getelementptr inbounds %S.ast.Node, ptr %t599, i64 0 %t601 = load %S.ast.Node, ptr %t600 @@ -83814,8 +83840,8 @@ inrange8237: store { ptr, i64, i64 } { ptr @.str.5270, i64 11, i64 0 }, ptr %a610 %t611 = call i32 @finch_str_eq(ptr %a609, ptr %a610) %t612 = icmp ne i32 %t611, 0 - br i1 %t612, label %then8238, label %endif8240 -then8238: + br i1 %t612, label %then8242, label %endif8244 +then8242: %t613 = load ptr, ptr %a1 %t614 = load { ptr, i64, i64 }, ptr %a607 store { ptr, i64, i64 } { ptr @.str.5271, i64 32, i64 0 }, ptr %a616 @@ -83859,17 +83885,17 @@ then8238: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t644 -endif8240: +endif8244: %t645 = load ptr, ptr %a1 %t646 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t645) store { ptr, i64, i64 } %t646, ptr %a647 %t648 = load ptr, ptr %a1 %t649 = icmp eq ptr %t648, null - br i1 %t649, label %panic8241, label %ok8242 -panic8241: + br i1 %t649, label %panic8245, label %ok8246 +panic8245: call void @finch_panic(ptr @.str.5276, i64 4926, ptr @.str.5277) unreachable -ok8242: +ok8246: %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 41 %t651 = load { ptr, i64, i64 }, ptr %t650 %t652 = load %S.ast.Node, ptr %a2 @@ -83880,8 +83906,8 @@ ok8242: %t657 = icmp ne i32 %t656, 0 store { ptr, i64, i64 } %t653, ptr %a658 call void @finch_str_drop(ptr %a658) - br i1 %t657, label %then8243, label %endif8245 -then8243: + br i1 %t657, label %then8247, label %endif8249 +then8247: %t659 = load ptr, ptr %a1 %t660 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t659, { ptr, i64, i64 } { ptr @.str.5278, i64 17, i64 0 }) store { ptr, i64, i64 } %t660, ptr %a661 @@ -83950,11 +83976,11 @@ then8243: call void @finch_str_drop(ptr %a714) %t715 = load ptr, ptr %a1 %t716 = icmp eq ptr %t715, null - br i1 %t716, label %panic8246, label %ok8247 -panic8246: + br i1 %t716, label %panic8250, label %ok8251 +panic8250: call void @finch_panic(ptr @.str.5289, i64 4931, ptr @.str.5290) unreachable -ok8247: +ok8251: %t717 = getelementptr inbounds %S.gen.Gen, ptr %t715, i32 0, i32 42 %t718 = load { ptr, i64, i64 }, ptr %t717 store { ptr, i64, i64 } %t713, ptr %t717 @@ -83965,11 +83991,11 @@ ok8247: %t722 = call { ptr, i64, i64 } @finch.gen.load(ptr %t720, { ptr, i64, i64 } { ptr @.str.5291, i64 17, i64 0 }, { ptr, i64, i64 } %t721) %t723 = load ptr, ptr %a1 %t724 = icmp eq ptr %t723, null - br i1 %t724, label %panic8248, label %ok8249 -panic8248: + br i1 %t724, label %panic8252, label %ok8253 +panic8252: call void @finch_panic(ptr @.str.5292, i64 4932, ptr @.str.5293) unreachable -ok8249: +ok8253: %t725 = getelementptr inbounds %S.gen.Gen, ptr %t723, i32 0, i32 43 %t726 = load { ptr, i64, i64 }, ptr %t725 store { ptr, i64, i64 } %t722, ptr %t725 @@ -83993,26 +84019,26 @@ ok8249: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t736 -endif8245: +endif8249: %t737 = load ptr, ptr %a1 %t738 = load ptr, ptr %a1 %t739 = icmp eq ptr %t738, null - br i1 %t739, label %panic8250, label %ok8251 -panic8250: + br i1 %t739, label %panic8254, label %ok8255 +panic8254: call void @finch_panic(ptr @.str.5296, i64 4936, ptr @.str.5297) unreachable -ok8251: +ok8255: %t740 = getelementptr inbounds %S.gen.Gen, ptr %t738, i32 0, i32 1 %t741 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t742 = load i64, ptr %t741 %t743 = load { ptr, i64, i64 }, ptr %t740 %t744 = extractvalue { ptr, i64, i64 } %t743, 1 %t745 = icmp uge i64 %t742, %t744 - br i1 %t745, label %range8252, label %inrange8253 -range8252: + br i1 %t745, label %range8256, label %inrange8257 +range8256: call void @finch_panic_index(ptr @.str.5298, i64 4936, i64 %t742, i64 %t744) unreachable -inrange8253: +inrange8257: %t746 = extractvalue { ptr, i64, i64 } %t743, 0 %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i64 %t742 %t748 = load { ptr, i64, i64 }, ptr %t747 @@ -84094,14 +84120,14 @@ inrange8253: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t808 -endif8235: +endif8239: %t809 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t809, ptr %a810 store { ptr, i64, i64 } { ptr @.str.5306, i64 10, i64 0 }, ptr %a811 %t812 = call i32 @finch_str_eq(ptr %a810, ptr %a811) %t813 = icmp ne i32 %t812, 0 - br i1 %t813, label %then8254, label %endif8256 -then8254: + br i1 %t813, label %then8258, label %endif8260 +then8258: %t814 = load ptr, ptr %a1 %t815 = load %S.ast.Node, ptr %a2 %t816 = load { ptr, i64, i64 }, ptr %a8 @@ -84111,11 +84137,11 @@ then8254: %t819 = load { ptr, i64, i64 }, ptr %t818 %t820 = extractvalue { ptr, i64, i64 } %t819, 1 %t821 = icmp uge i64 0, %t820 - br i1 %t821, label %range8257, label %inrange8258 -range8257: + br i1 %t821, label %range8261, label %inrange8262 +range8261: call void @finch_panic_index(ptr @.str.5307, i64 4943, i64 0, i64 %t820) unreachable -inrange8258: +inrange8262: %t822 = extractvalue { ptr, i64, i64 } %t819, 0 %t823 = getelementptr inbounds %S.ast.Node, ptr %t822, i64 0 %t824 = load %S.ast.Node, ptr %t823 @@ -84123,11 +84149,11 @@ inrange8258: store %S.gen.Val %t825, ptr %a826 %t827 = load ptr, ptr %a1 %t828 = icmp eq ptr %t827, null - br i1 %t828, label %panic8259, label %ok8260 -panic8259: + br i1 %t828, label %panic8263, label %ok8264 +panic8263: call void @finch_panic(ptr @.str.5309, i64 4944, ptr @.str.5310) unreachable -ok8260: +ok8264: %t829 = getelementptr inbounds %S.gen.Gen, ptr %t827, i32 0, i32 11 %t830 = getelementptr inbounds { ptr, i64, i64 }, ptr %t829, i32 0, i32 1 %t831 = load i64, ptr %t830 @@ -84140,11 +84166,11 @@ ok8260: %t837 = load { ptr, i64, i64 }, ptr %t836 %t838 = extractvalue { ptr, i64, i64 } %t837, 1 %t839 = icmp uge i64 1, %t838 - br i1 %t839, label %range8261, label %inrange8262 -range8261: + br i1 %t839, label %range8265, label %inrange8266 +range8265: call void @finch_panic_index(ptr @.str.5311, i64 4946, i64 1, i64 %t838) unreachable -inrange8262: +inrange8266: %t840 = extractvalue { ptr, i64, i64 } %t837, 0 %t841 = getelementptr inbounds %S.ast.Node, ptr %t840, i64 1 %t842 = load %S.ast.Node, ptr %t841 @@ -84163,11 +84189,11 @@ inrange8262: store { ptr, i64, i64 } %t853, ptr %a854 %t855 = load ptr, ptr %a1 %t856 = icmp eq ptr %t855, null - br i1 %t856, label %panic8263, label %ok8264 -panic8263: + br i1 %t856, label %panic8267, label %ok8268 +panic8267: call void @finch_panic(ptr @.str.5313, i64 4950, ptr @.str.5314) unreachable -ok8264: +ok8268: %t857 = getelementptr inbounds %S.gen.Gen, ptr %t855, i32 0, i32 41 %t858 = load { ptr, i64, i64 }, ptr %t857 %t859 = load %S.ast.Node, ptr %a2 @@ -84178,8 +84204,8 @@ ok8264: %t864 = icmp ne i32 %t863, 0 store { ptr, i64, i64 } %t860, ptr %a865 call void @finch_str_drop(ptr %a865) - br i1 %t864, label %then8265, label %endif8267 -then8265: + br i1 %t864, label %then8269, label %endif8271 +then8269: %t866 = load ptr, ptr %a1 %t867 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t866, { ptr, i64, i64 } { ptr @.str.5315, i64 17, i64 0 }) store { ptr, i64, i64 } %t867, ptr %a868 @@ -84245,11 +84271,11 @@ then8265: call void @finch_str_drop(ptr %a919) %t920 = load ptr, ptr %a1 %t921 = icmp eq ptr %t920, null - br i1 %t921, label %panic8268, label %ok8269 -panic8268: + br i1 %t921, label %panic8272, label %ok8273 +panic8272: call void @finch_panic(ptr @.str.5324, i64 4954, ptr @.str.5325) unreachable -ok8269: +ok8273: %t922 = getelementptr inbounds %S.gen.Gen, ptr %t920, i32 0, i32 42 %t923 = load { ptr, i64, i64 }, ptr %t922 store { ptr, i64, i64 } %t918, ptr %t922 @@ -84260,11 +84286,11 @@ ok8269: %t927 = call { ptr, i64, i64 } @finch.gen.load(ptr %t925, { ptr, i64, i64 } { ptr @.str.5326, i64 17, i64 0 }, { ptr, i64, i64 } %t926) %t928 = load ptr, ptr %a1 %t929 = icmp eq ptr %t928, null - br i1 %t929, label %panic8270, label %ok8271 -panic8270: + br i1 %t929, label %panic8274, label %ok8275 +panic8274: call void @finch_panic(ptr @.str.5327, i64 4955, ptr @.str.5328) unreachable -ok8271: +ok8275: %t930 = getelementptr inbounds %S.gen.Gen, ptr %t928, i32 0, i32 43 %t931 = load { ptr, i64, i64 }, ptr %t930 store { ptr, i64, i64 } %t927, ptr %t930 @@ -84287,7 +84313,7 @@ ok8271: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t938 -endif8267: +endif8271: %t939 = load ptr, ptr %a1 %t940 = load { ptr, i64, i64 }, ptr %a850 store { ptr, i64, i64 } { ptr @.str.5330, i64 31, i64 0 }, ptr %a942 @@ -84349,14 +84375,14 @@ endif8267: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t983 -endif8256: +endif8260: %t984 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t984, ptr %a985 store { ptr, i64, i64 } { ptr @.str.5336, i64 11, i64 0 }, ptr %a986 %t987 = call i32 @finch_str_eq(ptr %a985, ptr %a986) %t988 = icmp ne i32 %t987, 0 - br i1 %t988, label %then8272, label %endif8274 -then8272: + br i1 %t988, label %then8276, label %endif8278 +then8276: %t989 = load ptr, ptr %a1 %t990 = load %S.ast.Node, ptr %a2 %t991 = load { ptr, i64, i64 }, ptr %a8 @@ -84366,11 +84392,11 @@ then8272: %t994 = load { ptr, i64, i64 }, ptr %t993 %t995 = extractvalue { ptr, i64, i64 } %t994, 1 %t996 = icmp uge i64 0, %t995 - br i1 %t996, label %range8275, label %inrange8276 -range8275: + br i1 %t996, label %range8279, label %inrange8280 +range8279: call void @finch_panic_index(ptr @.str.5337, i64 4967, i64 0, i64 %t995) unreachable -inrange8276: +inrange8280: %t997 = extractvalue { ptr, i64, i64 } %t994, 0 %t998 = getelementptr inbounds %S.ast.Node, ptr %t997, i64 0 %t999 = load %S.ast.Node, ptr %t998 @@ -84413,11 +84439,11 @@ inrange8276: call void @finch_str_drop(ptr %a1030) %t1031 = load ptr, ptr %a1 %t1032 = icmp eq ptr %t1031, null - br i1 %t1032, label %panic8277, label %ok8278 -panic8277: + br i1 %t1032, label %panic8281, label %ok8282 +panic8281: call void @finch_panic(ptr @.str.5342, i64 4970, ptr @.str.5343) unreachable -ok8278: +ok8282: %t1033 = getelementptr inbounds %S.gen.Gen, ptr %t1031, i32 0, i32 41 %t1034 = load { ptr, i64, i64 }, ptr %t1033 %t1035 = load %S.ast.Node, ptr %a2 @@ -84428,8 +84454,8 @@ ok8278: %t1040 = icmp ne i32 %t1039, 0 store { ptr, i64, i64 } %t1036, ptr %a1041 call void @finch_str_drop(ptr %a1041) - br i1 %t1040, label %then8279, label %endif8281 -then8279: + br i1 %t1040, label %then8283, label %endif8285 +then8283: %t1042 = load ptr, ptr %a1 %t1043 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1042, { ptr, i64, i64 } { ptr @.str.5344, i64 17, i64 0 }) store { ptr, i64, i64 } %t1043, ptr %a1044 @@ -84482,11 +84508,11 @@ then8279: call void @finch_str_drop(ptr %a1084) %t1085 = load ptr, ptr %a1 %t1086 = icmp eq ptr %t1085, null - br i1 %t1086, label %panic8282, label %ok8283 -panic8282: + br i1 %t1086, label %panic8286, label %ok8287 +panic8286: call void @finch_panic(ptr @.str.5352, i64 4974, ptr @.str.5353) unreachable -ok8283: +ok8287: %t1087 = getelementptr inbounds %S.gen.Gen, ptr %t1085, i32 0, i32 42 %t1088 = load { ptr, i64, i64 }, ptr %t1087 store { ptr, i64, i64 } %t1083, ptr %t1087 @@ -84497,11 +84523,11 @@ ok8283: %t1092 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1090, { ptr, i64, i64 } { ptr @.str.5354, i64 17, i64 0 }, { ptr, i64, i64 } %t1091) %t1093 = load ptr, ptr %a1 %t1094 = icmp eq ptr %t1093, null - br i1 %t1094, label %panic8284, label %ok8285 -panic8284: + br i1 %t1094, label %panic8288, label %ok8289 +panic8288: call void @finch_panic(ptr @.str.5355, i64 4975, ptr @.str.5356) unreachable -ok8285: +ok8289: %t1095 = getelementptr inbounds %S.gen.Gen, ptr %t1093, i32 0, i32 43 %t1096 = load { ptr, i64, i64 }, ptr %t1095 store { ptr, i64, i64 } %t1092, ptr %t1095 @@ -84525,7 +84551,7 @@ ok8285: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1105 -endif8281: +endif8285: %t1106 = load ptr, ptr %a1 %t1107 = load { ptr, i64, i64 }, ptr %a1004 store { ptr, i64, i64 } { ptr @.str.5359, i64 32, i64 0 }, ptr %a1109 @@ -84575,14 +84601,14 @@ endif8281: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1141 -endif8274: +endif8278: %t1142 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1142, ptr %a1143 store { ptr, i64, i64 } { ptr @.str.5365, i64 5, i64 0 }, ptr %a1144 %t1145 = call i32 @finch_str_eq(ptr %a1143, ptr %a1144) %t1146 = icmp ne i32 %t1145, 0 - br i1 %t1146, label %then8286, label %endif8288 -then8286: + br i1 %t1146, label %then8290, label %endif8292 +then8290: %t1147 = load ptr, ptr %a1 %t1148 = load %S.ast.Node, ptr %a2 %t1149 = load { ptr, i64, i64 }, ptr %a8 @@ -84592,11 +84618,11 @@ then8286: %t1152 = load { ptr, i64, i64 }, ptr %t1151 %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 %t1154 = icmp uge i64 0, %t1153 - br i1 %t1154, label %range8289, label %inrange8290 -range8289: + br i1 %t1154, label %range8293, label %inrange8294 +range8293: call void @finch_panic_index(ptr @.str.5366, i64 4987, i64 0, i64 %t1153) unreachable -inrange8290: +inrange8294: %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 0 %t1157 = load %S.ast.Node, ptr %t1156 @@ -84675,14 +84701,14 @@ inrange8290: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1215 -endif8288: +endif8292: %t1216 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1216, ptr %a1217 store { ptr, i64, i64 } { ptr @.str.5375, i64 4, i64 0 }, ptr %a1218 %t1219 = call i32 @finch_str_eq(ptr %a1217, ptr %a1218) %t1220 = icmp ne i32 %t1219, 0 - br i1 %t1220, label %then8291, label %endif8293 -then8291: + br i1 %t1220, label %then8295, label %endif8297 +then8295: %t1221 = load ptr, ptr %a1 %t1222 = load %S.ast.Node, ptr %a2 %t1223 = load { ptr, i64, i64 }, ptr %a8 @@ -84693,11 +84719,11 @@ then8291: %t1227 = load { ptr, i64, i64 }, ptr %t1226 %t1228 = extractvalue { ptr, i64, i64 } %t1227, 1 %t1229 = icmp uge i64 0, %t1228 - br i1 %t1229, label %range8294, label %inrange8295 -range8294: + br i1 %t1229, label %range8298, label %inrange8299 +range8298: call void @finch_panic_index(ptr @.str.5376, i64 4997, i64 0, i64 %t1228) unreachable -inrange8295: +inrange8299: %t1230 = extractvalue { ptr, i64, i64 } %t1227, 0 %t1231 = getelementptr inbounds %S.ast.Node, ptr %t1230, i64 0 %t1232 = load %S.ast.Node, ptr %t1231 @@ -84707,11 +84733,11 @@ inrange8295: %t1236 = load { ptr, i64, i64 }, ptr %t1235 %t1237 = extractvalue { ptr, i64, i64 } %t1236, 1 %t1238 = icmp uge i64 0, %t1237 - br i1 %t1238, label %range8296, label %inrange8297 -range8296: + br i1 %t1238, label %range8300, label %inrange8301 +range8300: call void @finch_panic_index(ptr @.str.5378, i64 4997, i64 0, i64 %t1237) unreachable -inrange8297: +inrange8301: %t1239 = extractvalue { ptr, i64, i64 } %t1236, 0 %t1240 = getelementptr inbounds %S.ast.Node, ptr %t1239, i64 0 %t1241 = load %S.ast.Node, ptr %t1240 @@ -84764,14 +84790,14 @@ inrange8297: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1277 -endif8293: +endif8297: %t1278 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1278, ptr %a1279 store { ptr, i64, i64 } { ptr @.str.5386, i64 5, i64 0 }, ptr %a1280 %t1281 = call i32 @finch_str_eq(ptr %a1279, ptr %a1280) %t1282 = icmp ne i32 %t1281, 0 - br i1 %t1282, label %then8298, label %endif8300 -then8298: + br i1 %t1282, label %then8302, label %endif8304 +then8302: %t1283 = load ptr, ptr %a1 %t1284 = call %S.gen.Val @finch.gen.strConst(ptr %t1283, { ptr, i64, i64 } { ptr @.str.5387, i64 0, i64 0 }) store %S.gen.Val %t1284, ptr %a1285 @@ -84779,8 +84805,8 @@ then8298: %t1287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1286, i32 0, i32 1 %t1288 = load i64, ptr %t1287 %t1289 = icmp sgt i64 %t1288, 0 - br i1 %t1289, label %then8301, label %endif8303 -then8301: + br i1 %t1289, label %then8305, label %endif8307 +then8305: %t1290 = load ptr, ptr %a1 %t1291 = load %S.ast.Node, ptr %a2 %t1292 = load { ptr, i64, i64 }, ptr %a8 @@ -84790,11 +84816,11 @@ then8301: %t1295 = load { ptr, i64, i64 }, ptr %t1294 %t1296 = extractvalue { ptr, i64, i64 } %t1295, 1 %t1297 = icmp uge i64 0, %t1296 - br i1 %t1297, label %range8304, label %inrange8305 -range8304: + br i1 %t1297, label %range8308, label %inrange8309 +range8308: call void @finch_panic_index(ptr @.str.5388, i64 5007, i64 0, i64 %t1296) unreachable -inrange8305: +inrange8309: %t1298 = extractvalue { ptr, i64, i64 } %t1295, 0 %t1299 = getelementptr inbounds %S.ast.Node, ptr %t1298, i64 0 %t1300 = load %S.ast.Node, ptr %t1299 @@ -84803,8 +84829,8 @@ inrange8305: store %S.gen.Val %t1301, ptr %a1285 store %S.gen.Val %t1302, ptr %a1303 call void @finch.drop.S_gen_Val(ptr %a1303) - br label %endif8303 -endif8303: + br label %endif8307 +endif8307: %t1304 = load ptr, ptr %a1 %t1305 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1304) store { ptr, i64, i64 } %t1305, ptr %a1306 @@ -84855,14 +84881,14 @@ endif8303: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1341 -endif8300: +endif8304: %t1342 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1342, ptr %a1343 store { ptr, i64, i64 } { ptr @.str.5395, i64 3, i64 0 }, ptr %a1344 %t1345 = call i32 @finch_str_eq(ptr %a1343, ptr %a1344) %t1346 = icmp ne i32 %t1345, 0 - br i1 %t1346, label %then8306, label %endif8308 -then8306: + br i1 %t1346, label %then8310, label %endif8312 +then8310: %t1347 = load ptr, ptr %a1 %t1348 = load %S.ast.Node, ptr %a2 %t1349 = load { ptr, i64, i64 }, ptr %a8 @@ -84872,11 +84898,11 @@ then8306: %t1352 = load { ptr, i64, i64 }, ptr %t1351 %t1353 = extractvalue { ptr, i64, i64 } %t1352, 1 %t1354 = icmp uge i64 0, %t1353 - br i1 %t1354, label %range8309, label %inrange8310 -range8309: + br i1 %t1354, label %range8313, label %inrange8314 +range8313: call void @finch_panic_index(ptr @.str.5396, i64 5016, i64 0, i64 %t1353) unreachable -inrange8310: +inrange8314: %t1355 = extractvalue { ptr, i64, i64 } %t1352, 0 %t1356 = getelementptr inbounds %S.ast.Node, ptr %t1355, i64 0 %t1357 = load %S.ast.Node, ptr %t1356 @@ -84931,14 +84957,14 @@ inrange8310: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1397 -endif8308: +endif8312: %t1398 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1398, ptr %a1399 store { ptr, i64, i64 } { ptr @.str.5399, i64 4, i64 0 }, ptr %a1400 %t1401 = call i32 @finch_str_eq(ptr %a1399, ptr %a1400) %t1402 = icmp ne i32 %t1401, 0 - br i1 %t1402, label %then8311, label %endif8313 -then8311: + br i1 %t1402, label %then8315, label %endif8317 +then8315: %t1403 = load ptr, ptr %a1 %t1404 = load %S.ast.Node, ptr %a2 %t1405 = load { ptr, i64, i64 }, ptr %a8 @@ -84948,11 +84974,11 @@ then8311: %t1408 = load { ptr, i64, i64 }, ptr %t1407 %t1409 = extractvalue { ptr, i64, i64 } %t1408, 1 %t1410 = icmp uge i64 0, %t1409 - br i1 %t1410, label %range8314, label %inrange8315 -range8314: + br i1 %t1410, label %range8318, label %inrange8319 +range8318: call void @finch_panic_index(ptr @.str.5400, i64 5023, i64 0, i64 %t1409) unreachable -inrange8315: +inrange8319: %t1411 = extractvalue { ptr, i64, i64 } %t1408, 0 %t1412 = getelementptr inbounds %S.ast.Node, ptr %t1411, i64 0 %t1413 = load %S.ast.Node, ptr %t1412 @@ -84965,55 +84991,55 @@ inrange8315: store { ptr, i64, i64 } { ptr @.str.5401, i64 3, i64 0 }, ptr %a1420 %t1421 = call i32 @finch_str_eq(ptr %a1419, ptr %a1420) %t1422 = icmp eq i32 %t1421, 0 - br i1 %t1422, label %then8316, label %endif8318 -then8316: + br i1 %t1422, label %then8320, label %endif8322 +then8320: %t1423 = load ptr, ptr %a1 %t1424 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1425 = load { ptr, i64, i64 }, ptr %t1424 %t1426 = extractvalue { ptr, i64, i64 } %t1425, 1 %t1427 = icmp uge i64 0, %t1426 - br i1 %t1427, label %range8319, label %inrange8320 -range8319: + br i1 %t1427, label %range8323, label %inrange8324 +range8323: call void @finch_panic_index(ptr @.str.5402, i64 5025, i64 0, i64 %t1426) unreachable -inrange8320: +inrange8324: %t1428 = extractvalue { ptr, i64, i64 } %t1425, 0 %t1429 = getelementptr inbounds %S.ast.Node, ptr %t1428, i64 0 %t1430 = load %S.ast.Node, ptr %t1429 call void @finch.gen.fail(ptr %t1423, %S.ast.Node %t1430, { ptr, i64, i64 } { ptr @.str.5403, i64 119, i64 0 }) - br label %endif8318 -endif8318: + br label %endif8322 +endif8322: %t1431 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 %t1432 = getelementptr inbounds %S.ast.Type, ptr %t1431, i32 0, i32 1 %t1433 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1432, i32 0, i32 1 %t1434 = load i64, ptr %t1433 %t1435 = icmp sgt i64 %t1434, 0 - br label %logic.from8321 -logic.from8321: - br i1 %t1435, label %logic.rhs8322, label %logic.end8323 -logic.rhs8322: + br label %logic.from8325 +logic.from8325: + br i1 %t1435, label %logic.rhs8326, label %logic.end8327 +logic.rhs8326: %t1436 = load ptr, ptr %a1 %t1437 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 %t1438 = getelementptr inbounds %S.ast.Type, ptr %t1437, i32 0, i32 1 %t1439 = load { ptr, i64, i64 }, ptr %t1438 %t1440 = extractvalue { ptr, i64, i64 } %t1439, 1 %t1441 = icmp uge i64 0, %t1440 - br i1 %t1441, label %range8324, label %inrange8325 -range8324: + br i1 %t1441, label %range8328, label %inrange8329 +range8328: call void @finch_panic_index(ptr @.str.5404, i64 5027, i64 0, i64 %t1440) unreachable -inrange8325: +inrange8329: %t1442 = extractvalue { ptr, i64, i64 } %t1439, 0 %t1443 = getelementptr inbounds %S.ast.Type, ptr %t1442, i64 0 %t1444 = load %S.ast.Type, ptr %t1443 %t1445 = call i1 @finch.gen.owning(ptr %t1436, %S.ast.Type %t1444) - br label %logic.rend8326 -logic.rend8326: - br label %logic.end8323 -logic.end8323: - %t1446 = phi i1 [ false, %logic.from8321 ], [ %t1445, %logic.rend8326 ] - br i1 %t1446, label %then8327, label %endif8329 -then8327: + br label %logic.rend8330 +logic.rend8330: + br label %logic.end8327 +logic.end8327: + %t1446 = phi i1 [ false, %logic.from8325 ], [ %t1445, %logic.rend8330 ] + br i1 %t1446, label %then8331, label %endif8333 +then8331: %t1447 = load ptr, ptr %a1 %t1448 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1447, { ptr, i64, i64 } { ptr @.str.5405, i64 9, i64 0 }) store { ptr, i64, i64 } %t1448, ptr %a1449 @@ -85053,11 +85079,11 @@ then8327: %t1478 = load { ptr, i64, i64 }, ptr %t1477 %t1479 = extractvalue { ptr, i64, i64 } %t1478, 1 %t1480 = icmp uge i64 0, %t1479 - br i1 %t1480, label %range8330, label %inrange8331 -range8330: + br i1 %t1480, label %range8334, label %inrange8335 +range8334: call void @finch_panic_index(ptr @.str.5409, i64 5032, i64 0, i64 %t1479) unreachable -inrange8331: +inrange8335: %t1481 = extractvalue { ptr, i64, i64 } %t1478, 0 %t1482 = getelementptr inbounds %S.ast.Type, ptr %t1481, i64 0 %t1483 = load %S.ast.Type, ptr %t1482 @@ -85070,8 +85096,8 @@ inrange8331: call void @finch.gen.label(ptr %t1486, { ptr, i64, i64 } %t1487) call void @finch_str_drop(ptr %a1452) call void @finch_str_drop(ptr %a1449) - br label %endif8329 -endif8329: + br label %endif8333 +endif8333: %t1488 = load ptr, ptr %a1 %t1489 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 %t1490 = load { ptr, i64, i64 }, ptr %t1489 @@ -85094,15 +85120,15 @@ endif8329: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1502 -endif8313: +endif8317: %t1503 = load ptr, ptr %a1 %t1504 = load ptr, ptr %a1 %t1505 = icmp eq ptr %t1504, null - br i1 %t1505, label %panic8332, label %ok8333 -panic8332: + br i1 %t1505, label %panic8336, label %ok8337 +panic8336: call void @finch_panic(ptr @.str.5413, i64 5039, ptr @.str.5414) unreachable -ok8333: +ok8337: %t1506 = getelementptr inbounds %S.gen.Gen, ptr %t1504, i32 0, i32 14 %t1507 = load { ptr, i64, i64 }, ptr %t1506 %t1508 = load { ptr, i64, i64 }, ptr %a8 @@ -85110,15 +85136,15 @@ ok8333: store i64 %t1509, ptr %a1510 %t1511 = load i64, ptr %a1510 %t1512 = icmp sge i64 %t1511, 0 - br i1 %t1512, label %then8334, label %endif8336 -then8334: + br i1 %t1512, label %then8338, label %endif8340 +then8338: %t1513 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1514 = getelementptr inbounds %S.ast.Type, ptr %t1513, i32 0, i32 1 %t1515 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1514, i32 0, i32 1 %t1516 = load i64, ptr %t1515 %t1517 = icmp sgt i64 %t1516, 0 - br i1 %t1517, label %then8337, label %endif8339 -then8337: + br i1 %t1517, label %then8341, label %endif8343 +then8341: %t1518 = load ptr, ptr %a1 %t1519 = load %S.ast.Node, ptr %a2 %t1520 = load { ptr, i64, i64 }, ptr %a8 @@ -85135,8 +85161,8 @@ then8337: call void @finch.gen.fail(ptr %t1518, %S.ast.Node %t1519, { ptr, i64, i64 } %t1529) store { ptr, i64, i64 } %t1529, ptr %a1530 call void @finch_str_drop(ptr %a1530) - br label %endif8339 -endif8339: + br label %endif8343 +endif8343: %t1531 = load ptr, ptr %a1 %t1532 = load i64, ptr %a1510 %t1533 = load %S.ast.Node, ptr %a2 @@ -85145,15 +85171,15 @@ endif8339: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1535 -endif8336: +endif8340: %t1536 = load ptr, ptr %a1 %t1537 = load ptr, ptr %a1 %t1538 = icmp eq ptr %t1537, null - br i1 %t1538, label %panic8340, label %ok8341 -panic8340: + br i1 %t1538, label %panic8344, label %ok8345 +panic8344: call void @finch_panic(ptr @.str.5419, i64 5046, ptr @.str.5420) unreachable -ok8341: +ok8345: %t1539 = getelementptr inbounds %S.gen.Gen, ptr %t1537, i32 0, i32 14 %t1540 = load { ptr, i64, i64 }, ptr %t1539 %t1541 = load { ptr, i64, i64 }, ptr %a8 @@ -85161,8 +85187,8 @@ ok8341: store i64 %t1542, ptr %a1543 %t1544 = load i64, ptr %a1543 %t1545 = icmp sge i64 %t1544, 0 - br i1 %t1545, label %then8342, label %endif8344 -then8342: + br i1 %t1545, label %then8346, label %endif8348 +then8346: %t1546 = load ptr, ptr %a1 %t1547 = load %S.ast.Node, ptr %a2 %t1548 = load i64, ptr %a1543 @@ -85171,29 +85197,29 @@ then8342: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1550 -endif8344: +endif8348: %t1551 = load ptr, ptr %a1 %t1552 = load ptr, ptr %a1 %t1553 = icmp eq ptr %t1552, null - br i1 %t1553, label %panic8345, label %ok8346 -panic8345: + br i1 %t1553, label %panic8349, label %ok8350 +panic8349: call void @finch_panic(ptr @.str.5422, i64 5050, ptr @.str.5423) unreachable -ok8346: +ok8350: %t1554 = getelementptr inbounds %S.gen.Gen, ptr %t1552, i32 0, i32 14 %t1555 = load { ptr, i64, i64 }, ptr %t1554 %t1556 = load { ptr, i64, i64 }, ptr %a8 %t1557 = call i64 @finch.gen.findTemplate(ptr %t1551, { ptr, i64, i64 } %t1555, { ptr, i64, i64 } %t1556, { ptr, i64, i64 } { ptr @.str.5424, i64 0, i64 0 }, i1 true) %t1558 = icmp sge i64 %t1557, 0 - br i1 %t1558, label %then8347, label %endif8349 -then8347: + br i1 %t1558, label %then8351, label %endif8353 +then8351: %t1559 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1560 = getelementptr inbounds %S.ast.Type, ptr %t1559, i32 0, i32 1 %t1561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1560, i32 0, i32 1 %t1562 = load i64, ptr %t1561 %t1563 = icmp eq i64 %t1562, 0 - br i1 %t1563, label %then8350, label %endif8352 -then8350: + br i1 %t1563, label %then8354, label %endif8356 +then8354: %t1564 = load ptr, ptr %a1 %t1565 = load %S.ast.Node, ptr %a2 %t1566 = load { ptr, i64, i64 }, ptr %a8 @@ -85223,20 +85249,20 @@ then8350: call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1586) store { ptr, i64, i64 } %t1586, ptr %a1587 call void @finch_str_drop(ptr %a1587) - br label %endif8352 -endif8352: + br label %endif8356 +endif8356: store { ptr, i64, i64 } zeroinitializer, ptr %a1588 %t1589 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1590 = getelementptr inbounds %S.ast.Type, ptr %t1589, i32 0, i32 1 store i64 0, ptr %a1591 - br label %each.cond8353 -each.cond8353: + br label %each.cond8357 +each.cond8357: %t1592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1590, i32 0, i32 1 %t1593 = load i64, ptr %t1592 %t1594 = load i64, ptr %a1591 %t1595 = icmp slt i64 %t1594, %t1593 - br i1 %t1595, label %each.body8354, label %each.end8356 -each.body8354: + br i1 %t1595, label %each.body8358, label %each.end8360 +each.body8358: %t1596 = load ptr, ptr %t1590 %t1597 = getelementptr inbounds %S.ast.Type, ptr %t1596, i64 %t1594 %t1598 = load %S.ast.Type, ptr %t1597 @@ -85253,21 +85279,21 @@ each.body8354: %t1608 = getelementptr inbounds %S.ast.Type, ptr %t1607, i64 %t1605 store %S.ast.Type %t1604, ptr %t1608 store i64 %t1606, ptr %t1600 - br label %each.step8355 -each.step8355: + br label %each.step8359 +each.step8359: %t1609 = load i64, ptr %a1591 %t1610 = add i64 %t1609, 1 store i64 %t1610, ptr %a1591 - br label %each.cond8353 -each.end8356: + br label %each.cond8357 +each.end8360: %t1611 = load ptr, ptr %a1 %t1612 = load ptr, ptr %a1 %t1613 = icmp eq ptr %t1612, null - br i1 %t1613, label %panic8357, label %ok8358 -panic8357: + br i1 %t1613, label %panic8361, label %ok8362 +panic8361: call void @finch_panic(ptr @.str.5428, i64 5059, ptr @.str.5429) unreachable -ok8358: +ok8362: %t1614 = getelementptr inbounds %S.gen.Gen, ptr %t1612, i32 0, i32 14 %t1615 = load { ptr, i64, i64 }, ptr %t1614 %t1616 = load { ptr, i64, i64 }, ptr %a8 @@ -85293,15 +85319,15 @@ ok8358: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1633 -endif8349: +endif8353: %t1634 = load ptr, ptr %a1 %t1635 = load ptr, ptr %a1 %t1636 = icmp eq ptr %t1635, null - br i1 %t1636, label %panic8359, label %ok8360 -panic8359: + br i1 %t1636, label %panic8363, label %ok8364 +panic8363: call void @finch_panic(ptr @.str.5430, i64 5062, ptr @.str.5431) unreachable -ok8360: +ok8364: %t1637 = getelementptr inbounds %S.gen.Gen, ptr %t1635, i32 0, i32 14 %t1638 = load { ptr, i64, i64 }, ptr %t1637 %t1639 = load { ptr, i64, i64 }, ptr %a8 @@ -85309,25 +85335,25 @@ ok8360: store i64 %t1640, ptr %a1641 %t1642 = load i64, ptr %a1641 %t1643 = icmp sge i64 %t1642, 0 - br i1 %t1643, label %then8361, label %endif8363 -then8361: + br i1 %t1643, label %then8365, label %endif8367 +then8365: %t1644 = load ptr, ptr %a1 %t1645 = icmp eq ptr %t1644, null - br i1 %t1645, label %panic8364, label %ok8365 -panic8364: + br i1 %t1645, label %panic8368, label %ok8369 +panic8368: call void @finch_panic(ptr @.str.5432, i64 5064, ptr @.str.5433) unreachable -ok8365: +ok8369: %t1646 = getelementptr inbounds %S.gen.Gen, ptr %t1644, i32 0, i32 16 %t1647 = load i64, ptr %a1641 %t1648 = load { ptr, i64, i64 }, ptr %t1646 %t1649 = extractvalue { ptr, i64, i64 } %t1648, 1 %t1650 = icmp uge i64 %t1647, %t1649 - br i1 %t1650, label %range8366, label %inrange8367 -range8366: + br i1 %t1650, label %range8370, label %inrange8371 +range8370: call void @finch_panic_index(ptr @.str.5434, i64 5064, i64 %t1647, i64 %t1649) unreachable -inrange8367: +inrange8371: %t1651 = extractvalue { ptr, i64, i64 } %t1648, 0 %t1652 = getelementptr inbounds %S.gen.StructDef, ptr %t1651, i64 %t1647 %t1653 = load %S.gen.StructDef, ptr %t1652 @@ -85337,45 +85363,45 @@ inrange8367: store %S.gen.StructDef %t1656, ptr %a1657 %t1658 = load ptr, ptr %a1 %t1659 = icmp eq ptr %t1658, null - br i1 %t1659, label %panic8368, label %ok8369 -panic8368: + br i1 %t1659, label %panic8372, label %ok8373 +panic8372: call void @finch_panic(ptr @.str.5435, i64 5065, ptr @.str.5436) unreachable -ok8369: +ok8373: %t1660 = getelementptr inbounds %S.gen.Gen, ptr %t1658, i32 0, i32 28 %t1661 = load i1, ptr %t1660 - br label %logic.from8370 -logic.from8370: - br i1 %t1661, label %logic.rhs8371, label %logic.end8372 -logic.rhs8371: + br label %logic.from8374 +logic.from8374: + br i1 %t1661, label %logic.rhs8375, label %logic.end8376 +logic.rhs8375: %t1662 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 2 %t1663 = load i1, ptr %t1662 %t1664 = xor i1 %t1663, true - br label %logic.rend8373 -logic.rend8373: - br label %logic.end8372 -logic.end8372: - %t1665 = phi i1 [ false, %logic.from8370 ], [ %t1664, %logic.rend8373 ] - br i1 %t1665, label %then8374, label %endif8376 -then8374: + br label %logic.rend8377 +logic.rend8377: + br label %logic.end8376 +logic.end8376: + %t1665 = phi i1 [ false, %logic.from8374 ], [ %t1664, %logic.rend8377 ] + br i1 %t1665, label %then8378, label %endif8380 +then8378: %t1666 = load ptr, ptr %a1 %t1667 = icmp eq ptr %t1666, null - br i1 %t1667, label %panic8377, label %ok8378 -panic8377: + br i1 %t1667, label %panic8381, label %ok8382 +panic8381: call void @finch_panic(ptr @.str.5437, i64 5066, ptr @.str.5438) unreachable -ok8378: +ok8382: %t1668 = getelementptr inbounds %S.gen.Gen, ptr %t1666, i32 0, i32 0 %t1669 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 13 %t1670 = load i64, ptr %t1669 %t1671 = load { ptr, i64, i64 }, ptr %t1668 %t1672 = extractvalue { ptr, i64, i64 } %t1671, 1 %t1673 = icmp uge i64 %t1670, %t1672 - br i1 %t1673, label %range8379, label %inrange8380 -range8379: + br i1 %t1673, label %range8383, label %inrange8384 +range8383: call void @finch_panic_index(ptr @.str.5439, i64 5066, i64 %t1670, i64 %t1672) unreachable -inrange8380: +inrange8384: %t1674 = extractvalue { ptr, i64, i64 } %t1671, 0 %t1675 = getelementptr inbounds %S.ast.Program, ptr %t1674, i64 %t1670 %t1676 = getelementptr inbounds %S.ast.Program, ptr %t1675, i32 0, i32 6 @@ -85384,11 +85410,11 @@ inrange8380: %t1679 = load { ptr, i64, i64 }, ptr %t1676 %t1680 = extractvalue { ptr, i64, i64 } %t1679, 1 %t1681 = icmp uge i64 %t1678, %t1680 - br i1 %t1681, label %range8381, label %inrange8382 -range8381: + br i1 %t1681, label %range8385, label %inrange8386 +range8385: call void @finch_panic_index(ptr @.str.5440, i64 5066, i64 %t1678, i64 %t1680) unreachable -inrange8382: +inrange8386: %t1682 = extractvalue { ptr, i64, i64 } %t1679, 0 %t1683 = getelementptr inbounds %S.ast.Node, ptr %t1682, i64 %t1678 %t1684 = load %S.ast.Node, ptr %t1683 @@ -85435,22 +85461,22 @@ inrange8382: %t1721 = load { ptr, i64, i64 }, ptr %a1717 %t1722 = load ptr, ptr %a1 %t1723 = icmp eq ptr %t1722, null - br i1 %t1723, label %panic8383, label %ok8384 -panic8383: + br i1 %t1723, label %panic8387, label %ok8388 +panic8387: call void @finch_panic(ptr @.str.5445, i64 5067, ptr @.str.5446) unreachable -ok8384: +ok8388: %t1724 = getelementptr inbounds %S.gen.Gen, ptr %t1722, i32 0, i32 1 %t1725 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 13 %t1726 = load i64, ptr %t1725 %t1727 = load { ptr, i64, i64 }, ptr %t1724 %t1728 = extractvalue { ptr, i64, i64 } %t1727, 1 %t1729 = icmp uge i64 %t1726, %t1728 - br i1 %t1729, label %range8385, label %inrange8386 -range8385: + br i1 %t1729, label %range8389, label %inrange8390 +range8389: call void @finch_panic_index(ptr @.str.5447, i64 5067, i64 %t1726, i64 %t1728) unreachable -inrange8386: +inrange8390: %t1730 = extractvalue { ptr, i64, i64 } %t1727, 0 %t1731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1730, i64 %t1726 %t1732 = load { ptr, i64, i64 }, ptr %t1731 @@ -85462,8 +85488,8 @@ inrange8386: store { ptr, i64, i64 } %t1721, ptr %a1737 call void @finch_str_drop(ptr %a1737) call void @finch.drop.S_ast_Node(ptr %a1688) - br label %endif8376 -endif8376: + br label %endif8380 +endif8380: %t1738 = load ptr, ptr %a1 %t1739 = load i64, ptr %a1641 %t1740 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 @@ -85476,15 +85502,15 @@ endif8376: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1745 -endif8363: +endif8367: %t1746 = load ptr, ptr %a1 %t1747 = load ptr, ptr %a1 %t1748 = icmp eq ptr %t1747, null - br i1 %t1748, label %panic8387, label %ok8388 -panic8387: + br i1 %t1748, label %panic8391, label %ok8392 +panic8391: call void @finch_panic(ptr @.str.5448, i64 5071, ptr @.str.5449) unreachable -ok8388: +ok8392: %t1749 = getelementptr inbounds %S.gen.Gen, ptr %t1747, i32 0, i32 14 %t1750 = load { ptr, i64, i64 }, ptr %t1749 %t1751 = load { ptr, i64, i64 }, ptr %a8 @@ -85492,8 +85518,8 @@ ok8388: store i64 %t1752, ptr %a1753 %t1754 = load i64, ptr %a1753 %t1755 = icmp sge i64 %t1754, 0 - br i1 %t1755, label %then8389, label %endif8391 -then8389: + br i1 %t1755, label %then8393, label %endif8395 +then8393: %t1756 = load ptr, ptr %a1 %t1757 = load %S.ast.Node, ptr %a2 %t1758 = load i64, ptr %a1753 @@ -85501,45 +85527,45 @@ then8389: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1759 -endif8391: +endif8395: %t1760 = load ptr, ptr %a1 %t1761 = icmp eq ptr %t1760, null - br i1 %t1761, label %panic8392, label %ok8393 -panic8392: + br i1 %t1761, label %panic8396, label %ok8397 +panic8396: call void @finch_panic(ptr @.str.5450, i64 5075, ptr @.str.5451) unreachable -ok8393: +ok8397: %t1762 = getelementptr inbounds %S.gen.Gen, ptr %t1760, i32 0, i32 26 %t1763 = getelementptr inbounds %S.cimport.CImports, ptr %t1762, i32 0, i32 0 %t1764 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1764, ptr %a1765 %t1766 = call i64 @finch_map_find(ptr %t1763, ptr %a1765, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t1767 = icmp sge i64 %t1766, 0 - br i1 %t1767, label %then8394, label %endif8396 -then8394: + br i1 %t1767, label %then8398, label %endif8400 +then8398: %t1768 = load ptr, ptr %a1 %t1769 = load %S.ast.Node, ptr %a2 %t1770 = load ptr, ptr %a1 %t1771 = icmp eq ptr %t1770, null - br i1 %t1771, label %panic8397, label %ok8398 -panic8397: + br i1 %t1771, label %panic8401, label %ok8402 +panic8401: call void @finch_panic(ptr @.str.5452, i64 5076, ptr @.str.5453) unreachable -ok8398: +ok8402: %t1772 = getelementptr inbounds %S.gen.Gen, ptr %t1770, i32 0, i32 26 %t1773 = getelementptr inbounds %S.cimport.CImports, ptr %t1772, i32 0, i32 0 %t1774 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1774, ptr %a1775 %t1776 = call i64 @finch_map_find(ptr %t1773, ptr %a1775, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t1777 = icmp slt i64 %t1776, 0 - br i1 %t1777, label %map.missing8399, label %map.found8400 -map.missing8399: + br i1 %t1777, label %map.missing8403, label %map.found8404 +map.missing8403: store { ptr, i64, i64 } zeroinitializer, ptr %a1778 store { ptr, i64, i64 } %t1774, ptr %a1779 call void @finch_buf_str(ptr %a1778, ptr %a1779, i32 1) call void @finch_map_missing(ptr @.str.5454, i64 5076, ptr %a1778) unreachable -map.found8400: +map.found8404: %t1780 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t1773, i32 0, i32 0 %t1781 = load ptr, ptr %t1780 %t1782 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1781, i64 %t1776 @@ -85549,15 +85575,15 @@ map.found8400: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1785 -endif8396: +endif8400: %t1786 = load ptr, ptr %a1 %t1787 = load { ptr, i64, i64 }, ptr %a8 %t1788 = call i64 @finch.gen.findStruct(ptr %t1786, { ptr, i64, i64 } { ptr @.str.5455, i64 1, i64 0 }, { ptr, i64, i64 } %t1787) store i64 %t1788, ptr %a1641 %t1789 = load i64, ptr %a1641 %t1790 = icmp sge i64 %t1789, 0 - br i1 %t1790, label %then8401, label %endif8403 -then8401: + br i1 %t1790, label %then8405, label %endif8407 +then8405: %t1791 = load ptr, ptr %a1 %t1792 = load i64, ptr %a1641 %t1793 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 @@ -85569,13 +85595,13 @@ then8401: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1798 -endif8403: +endif8407: %t1799 = load ptr, ptr %a1 %t1800 = load { ptr, i64, i64 }, ptr %a8 %t1801 = call i64 @finch.gen.lookup(ptr %t1799, { ptr, i64, i64 } %t1800) %t1802 = icmp sge i64 %t1801, 0 - br i1 %t1802, label %then8404, label %endif8406 -then8404: + br i1 %t1802, label %then8408, label %endif8410 +then8408: %t1803 = load ptr, ptr %a1 %t1804 = load %S.ast.Node, ptr %a2 %t1805 = load { ptr, i64, i64 }, ptr %a8 @@ -85592,8 +85618,8 @@ then8404: call void @finch.gen.fail(ptr %t1803, %S.ast.Node %t1804, { ptr, i64, i64 } %t1814) store { ptr, i64, i64 } %t1814, ptr %a1815 call void @finch_str_drop(ptr %a1815) - br label %endif8406 -endif8406: + br label %endif8410 +endif8410: %t1816 = load ptr, ptr %a1 %t1817 = load %S.ast.Node, ptr %a2 %t1818 = load { ptr, i64, i64 }, ptr %a8 @@ -85687,21 +85713,21 @@ entry: store { ptr, i64, i64 } %p6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic8407, label %ok8408 -panic8407: + br i1 %t9, label %panic8411, label %ok8412 +panic8411: call void @finch_panic(ptr @.str.5460, i64 5090, ptr @.str.5461) unreachable -ok8408: +ok8412: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 15 %t11 = load i64, ptr %a2 %t12 = load { ptr, i64, i64 }, ptr %t10 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 - br i1 %t14, label %range8409, label %inrange8410 -range8409: + br i1 %t14, label %range8413, label %inrange8414 +range8413: call void @finch_panic_index(ptr @.str.5462, i64 5090, i64 %t11, i64 %t13) unreachable -inrange8410: +inrange8414: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.gen.FnSig, ptr %t15, i64 %t11 %t17 = load %S.gen.FnSig, ptr %t16 @@ -85713,28 +85739,28 @@ inrange8410: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp eq i64 %t24, 0 - br label %logic.from8411 -logic.from8411: - br i1 %t25, label %logic.rhs8412, label %logic.end8413 -logic.rhs8412: + br label %logic.from8415 +logic.from8415: + br i1 %t25, label %logic.rhs8416, label %logic.end8417 +logic.rhs8416: %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.5463, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br label %logic.rend8414 -logic.rend8414: - br label %logic.end8413 -logic.end8413: - %t32 = phi i1 [ false, %logic.from8411 ], [ %t31, %logic.rend8414 ] - br i1 %t32, label %then8415, label %endif8417 -then8415: + br label %logic.rend8418 +logic.rend8418: + br label %logic.end8417 +logic.end8417: + %t32 = phi i1 [ false, %logic.from8415 ], [ %t31, %logic.rend8418 ] + br i1 %t32, label %then8419, label %endif8421 +then8419: %t33 = load ptr, ptr %a1 %t34 = load %S.ast.Node, ptr %a3 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } { ptr @.str.5464, i64 52, i64 0 }) - br label %endif8417 -endif8417: + br label %endif8421 +endif8421: %t35 = load ptr, ptr %a1 %t36 = load %S.ast.Node, ptr %a3 %t37 = load %S.gen.FnSig, ptr %a21 @@ -85752,8 +85778,8 @@ endif8417: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 %t48 = load i64, ptr %t47 %t49 = icmp sgt i64 %t48, 0 - br i1 %t49, label %then8418, label %endif8420 -then8418: + br i1 %t49, label %then8422, label %endif8424 +then8422: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t51 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.5465, i64 4, i64 0 }, ptr %a53 @@ -85767,16 +85793,16 @@ then8418: %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t56 store { ptr, i64, i64 } %t55, ptr %t59 store i64 %t57, ptr %t50 - br label %endif8420 -endif8420: + br label %endif8424 +endif8424: store { ptr, i64, i64 } zeroinitializer, ptr %a60 %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null - br i1 %t62, label %panic8421, label %ok8422 -panic8421: + br i1 %t62, label %panic8425, label %ok8426 +panic8425: call void @finch_panic(ptr @.str.5466, i64 5101, ptr @.str.5467) unreachable -ok8422: +ok8426: %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 11 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load i64, ptr %t64 @@ -85785,12 +85811,12 @@ ok8422: %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 %t69 = load i64, ptr %t68 store i64 0, ptr %a70 - br label %for.cond8423 -for.cond8423: + br label %for.cond8427 +for.cond8427: %t71 = load i64, ptr %a70 %t72 = icmp slt i64 %t71, %t69 - br i1 %t72, label %for.body8424, label %for.end8426 -for.body8424: + br i1 %t72, label %for.body8428, label %for.end8430 +for.body8428: %t73 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t74 = load i64, ptr %a4 %t75 = load i64, ptr %a70 @@ -85798,11 +85824,11 @@ for.body8424: %t77 = load { ptr, i64, i64 }, ptr %t73 %t78 = extractvalue { ptr, i64, i64 } %t77, 1 %t79 = icmp uge i64 %t76, %t78 - br i1 %t79, label %range8427, label %inrange8428 -range8427: + br i1 %t79, label %range8431, label %inrange8432 +range8431: call void @finch_panic_index(ptr @.str.5468, i64 5103, i64 %t76, i64 %t78) unreachable -inrange8428: +inrange8432: %t80 = extractvalue { ptr, i64, i64 } %t77, 0 %t81 = getelementptr inbounds %S.ast.Node, ptr %t80, i64 %t76 %t82 = load %S.ast.Node, ptr %t81 @@ -85818,11 +85844,11 @@ inrange8428: %t92 = load { ptr, i64, i64 }, ptr %t90 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 %t91, %t93 - br i1 %t94, label %range8429, label %inrange8430 -range8429: + br i1 %t94, label %range8433, label %inrange8434 +range8433: call void @finch_panic_index(ptr @.str.5469, i64 5104, i64 %t91, i64 %t93) unreachable -inrange8430: +inrange8434: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.ast.Type, ptr %t95, i64 %t91 %t97 = load %S.ast.Type, ptr %t96 @@ -85832,11 +85858,11 @@ inrange8430: %t101 = load { ptr, i64, i64 }, ptr %t99 %t102 = extractvalue { ptr, i64, i64 } %t101, 1 %t103 = icmp uge i64 %t100, %t102 - br i1 %t103, label %range8431, label %inrange8432 -range8431: + br i1 %t103, label %range8435, label %inrange8436 +range8435: call void @finch_panic_index(ptr @.str.5470, i64 5104, i64 %t100, i64 %t102) unreachable -inrange8432: +inrange8436: %t104 = extractvalue { ptr, i64, i64 } %t101, 0 %t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 %t100 %t106 = load %S.ast.Type, ptr %t105 @@ -85846,11 +85872,11 @@ inrange8432: %t110 = load { ptr, i64, i64 }, ptr %t108 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 - br i1 %t112, label %range8433, label %inrange8434 -range8433: + br i1 %t112, label %range8437, label %inrange8438 +range8437: call void @finch_panic_index(ptr @.str.5472, i64 5104, i64 %t109, i64 %t111) unreachable -inrange8434: +inrange8438: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i64 %t109 %t115 = load { ptr, i64, i64 }, ptr %t114 @@ -85876,43 +85902,43 @@ inrange8434: %t132 = load { ptr, i64, i64 }, ptr %t130 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 %t131, %t133 - br i1 %t134, label %range8435, label %inrange8436 -range8435: + br i1 %t134, label %range8439, label %inrange8440 +range8439: call void @finch_panic_index(ptr @.str.5474, i64 5106, i64 %t131, i64 %t133) unreachable -inrange8436: +inrange8440: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i64 %t131 %t137 = load %S.ast.Type, ptr %t136 %t138 = call i1 @finch.gen.owning(ptr %t129, %S.ast.Type %t137) - br label %logic.from8437 -logic.from8437: - br i1 %t138, label %logic.rhs8438, label %logic.end8439 -logic.rhs8438: + br label %logic.from8441 +logic.from8441: + br i1 %t138, label %logic.rhs8442, label %logic.end8443 +logic.rhs8442: %t139 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 %t140 = load i1, ptr %t139 %t141 = xor i1 %t140, true - br label %logic.rend8440 -logic.rend8440: - br label %logic.end8439 -logic.end8439: - %t142 = phi i1 [ false, %logic.from8437 ], [ %t141, %logic.rend8440 ] - br label %logic.from8441 -logic.from8441: - br i1 %t142, label %logic.rhs8442, label %logic.end8443 -logic.rhs8442: - %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 - %t144 = load i64, ptr %t143 - %t145 = icmp sgt i64 %t144, 0 br label %logic.rend8444 logic.rend8444: br label %logic.end8443 logic.end8443: - %t146 = phi i1 [ false, %logic.from8441 ], [ %t145, %logic.rend8444 ] + %t142 = phi i1 [ false, %logic.from8441 ], [ %t141, %logic.rend8444 ] br label %logic.from8445 logic.from8445: - br i1 %t146, label %logic.rhs8446, label %logic.end8447 + br i1 %t142, label %logic.rhs8446, label %logic.end8447 logic.rhs8446: + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t144 = load i64, ptr %t143 + %t145 = icmp sgt i64 %t144, 0 + br label %logic.rend8448 +logic.rend8448: + br label %logic.end8447 +logic.end8447: + %t146 = phi i1 [ false, %logic.from8445 ], [ %t145, %logic.rend8448 ] + br label %logic.from8449 +logic.from8449: + br i1 %t146, label %logic.rhs8450, label %logic.end8451 +logic.rhs8450: %t147 = load %S.ast.Node, ptr %a86 %t148 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t147) %t149 = load { ptr, i64, i64 }, ptr %a7 @@ -85922,13 +85948,13 @@ logic.rhs8446: %t153 = icmp ne i32 %t152, 0 store { ptr, i64, i64 } %t148, ptr %a154 call void @finch_str_drop(ptr %a154) - br label %logic.rend8448 -logic.rend8448: - br label %logic.end8447 -logic.end8447: - %t155 = phi i1 [ false, %logic.from8445 ], [ %t153, %logic.rend8448 ] - br i1 %t155, label %then8449, label %endif8451 -then8449: + br label %logic.rend8452 +logic.rend8452: + br label %logic.end8451 +logic.end8451: + %t155 = phi i1 [ false, %logic.from8449 ], [ %t153, %logic.rend8452 ] + br i1 %t155, label %then8453, label %endif8455 +then8453: %t156 = load ptr, ptr %a1 %t157 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 @@ -85947,8 +85973,8 @@ then8449: store %S.gen.Val %t169, ptr %a128 store %S.gen.Val %t170, ptr %a171 call void @finch.drop.S_gen_Val(ptr %a171) - br label %endif8451 -endif8451: + br label %endif8455 +endif8455: %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t173 = load ptr, ptr %a1 %t174 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 @@ -85956,11 +85982,11 @@ endif8451: %t176 = load { ptr, i64, i64 }, ptr %t174 %t177 = extractvalue { ptr, i64, i64 } %t176, 1 %t178 = icmp uge i64 %t175, %t177 - br i1 %t178, label %range8452, label %inrange8453 -range8452: + br i1 %t178, label %range8456, label %inrange8457 +range8456: call void @finch_panic_index(ptr @.str.5475, i64 5109, i64 %t175, i64 %t177) unreachable -inrange8453: +inrange8457: %t179 = extractvalue { ptr, i64, i64 } %t176, 0 %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i64 %t175 %t181 = load %S.ast.Type, ptr %t180 @@ -85988,8 +86014,8 @@ inrange8453: store i64 %t196, ptr %t172 %t199 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 %t200 = load i1, ptr %t199 - br i1 %t200, label %then8454, label %endif8456 -then8454: + br i1 %t200, label %then8458, label %endif8460 +then8458: %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 %t202 = load %S.gen.Val, ptr %a128 store %S.gen.Val %t202, ptr %a203 @@ -86002,20 +86028,20 @@ then8454: %t209 = getelementptr inbounds %S.gen.Val, ptr %t208, i64 %t206 store %S.gen.Val %t205, ptr %t209 store i64 %t207, ptr %t201 - br label %endif8456 -endif8456: + br label %endif8460 +endif8460: %t210 = load ptr, ptr %a1 %t211 = load %S.gen.Val, ptr %a128 call void @finch.gen.hold(ptr %t210, %S.gen.Val %t211) call void @finch.drop.S_gen_Val(ptr %a128) call void @finch.drop.S_ast_Node(ptr %a86) - br label %for.step8425 -for.step8425: + br label %for.step8429 +for.step8429: %t212 = load i64, ptr %a70 %t213 = add i64 %t212, 1 store i64 %t213, ptr %a70 - br label %for.cond8423 -for.end8426: + br label %for.cond8427 +for.end8430: %t214 = load ptr, ptr %a1 %t215 = load %S.gen.FnSig, ptr %a21 %t216 = load %S.ast.Node, ptr %a3 @@ -86024,14 +86050,14 @@ for.end8426: %t219 = call %S.gen.Val @finch.gen.emitCall(ptr %t214, %S.gen.FnSig %t215, %S.ast.Node %t216, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t218) store %S.gen.Val %t219, ptr %a220 store i64 0, ptr %a221 - br label %each.cond8457 -each.cond8457: + br label %each.cond8461 +each.cond8461: %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 %t223 = load i64, ptr %t222 %t224 = load i64, ptr %a221 %t225 = icmp slt i64 %t224, %t223 - br i1 %t225, label %each.body8458, label %each.end8460 -each.body8458: + br i1 %t225, label %each.body8462, label %each.end8464 +each.body8462: %t226 = load ptr, ptr %a60 %t227 = getelementptr inbounds %S.gen.Val, ptr %t226, i64 %t224 %t228 = load %S.gen.Val, ptr %t227 @@ -86039,13 +86065,13 @@ each.body8458: %t230 = load ptr, ptr %a1 %t231 = load %S.gen.Val, ptr %a229 call void @finch.gen.release(ptr %t230, %S.gen.Val %t231) - br label %each.step8459 -each.step8459: + br label %each.step8463 +each.step8463: %t232 = load i64, ptr %a221 %t233 = add i64 %t232, 1 store i64 %t233, ptr %a221 - br label %each.cond8457 -each.end8460: + br label %each.cond8461 +each.end8464: %t234 = load ptr, ptr %a1 %t235 = load i64, ptr %a66 call void @finch.gen.heldEnd(ptr %t234, i64 %t235) @@ -86208,17 +86234,17 @@ entry: store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t7 = load i1, ptr %t6 - br label %logic.from8461 -logic.from8461: - br i1 %t7, label %logic.rhs8462, label %logic.end8463 -logic.rhs8462: + br label %logic.from8465 +logic.from8465: + br i1 %t7, label %logic.rhs8466, label %logic.end8467 +logic.rhs8466: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic8464, label %ok8465 -panic8464: + br i1 %t9, label %panic8468, label %ok8469 +panic8468: call void @finch_panic(ptr @.str.5477, i64 5125, ptr @.str.5478) unreachable -ok8465: +ok8469: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 41 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = load %S.ast.Node, ptr %a3 @@ -86229,13 +86255,13 @@ ok8465: %t17 = icmp eq i32 %t16, 0 store { ptr, i64, i64 } %t13, ptr %a18 call void @finch_str_drop(ptr %a18) - br label %logic.rend8466 -logic.rend8466: - br label %logic.end8463 -logic.end8463: - %t19 = phi i1 [ false, %logic.from8461 ], [ %t17, %logic.rend8466 ] - br i1 %t19, label %then8467, label %endif8469 -then8467: + br label %logic.rend8470 +logic.rend8470: + br label %logic.end8467 +logic.end8467: + %t19 = phi i1 [ false, %logic.from8465 ], [ %t17, %logic.rend8470 ] + br i1 %t19, label %then8471, label %endif8473 +then8471: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a3 %t22 = load { ptr, i64, i64 }, ptr %a5 @@ -86291,8 +86317,8 @@ then8467: call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } %t64) store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_drop(ptr %a65) - br label %endif8469 -endif8469: + br label %endif8473 +endif8473: %t66 = load ptr, ptr %a1 %t67 = load %S.gen.FnSig, ptr %a2 %t68 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t66, %S.gen.FnSig %t67) @@ -86343,8 +86369,8 @@ endif8469: store { ptr, i64, i64 } %t105, ptr %a106 %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t108 = load i1, ptr %t107 - br i1 %t108, label %then8470, label %endif8472 -then8470: + br i1 %t108, label %then8474, label %endif8476 +then8474: %t109 = load ptr, ptr %a1 %t110 = load { ptr, i64, i64 }, ptr %a106 %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t109, { ptr, i64, i64 } %t110) @@ -86399,11 +86425,11 @@ then8470: call void @finch_str_drop(ptr %a153) %t154 = load ptr, ptr %a1 %t155 = icmp eq ptr %t154, null - br i1 %t155, label %panic8473, label %ok8474 -panic8473: + br i1 %t155, label %panic8477, label %ok8478 +panic8477: call void @finch_panic(ptr @.str.5494, i64 5132, ptr @.str.5495) unreachable -ok8474: +ok8478: %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 42 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t152, ptr %t156 @@ -86443,11 +86469,11 @@ ok8474: call void @finch_str_drop(ptr %a185) %t186 = load ptr, ptr %a1 %t187 = icmp eq ptr %t186, null - br i1 %t187, label %panic8475, label %ok8476 -panic8475: + br i1 %t187, label %panic8479, label %ok8480 +panic8479: call void @finch_panic(ptr @.str.5499, i64 5133, ptr @.str.5500) unreachable -ok8476: +ok8480: %t188 = getelementptr inbounds %S.gen.Gen, ptr %t186, i32 0, i32 43 %t189 = load { ptr, i64, i64 }, ptr %t188 store { ptr, i64, i64 } %t184, ptr %t188 @@ -86460,8 +86486,8 @@ ok8476: store { ptr, i64, i64 } { ptr @.str.5501, i64 4, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 - br i1 %t197, label %then8477, label %endif8479 -then8477: + br i1 %t197, label %then8481, label %endif8483 +then8481: %t198 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t199 = load %S.ast.Type, ptr %t198 store %S.ast.Type %t199, ptr %a200 @@ -86472,7 +86498,7 @@ then8477: call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t203 -endif8479: +endif8483: %t204 = load ptr, ptr %a1 %t205 = load ptr, ptr %a1 %t206 = load %S.gen.FnSig, ptr %a2 @@ -86521,7 +86547,7 @@ endif8479: call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t242 -endif8472: +endif8476: %t243 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i32 0, i32 0 %t245 = load { ptr, i64, i64 }, ptr %t244 @@ -86529,8 +86555,8 @@ endif8472: store { ptr, i64, i64 } { ptr @.str.5505, i64 4, i64 0 }, ptr %a247 %t248 = call i32 @finch_str_eq(ptr %a246, ptr %a247) %t249 = icmp ne i32 %t248, 0 - br i1 %t249, label %then8480, label %endif8482 -then8480: + br i1 %t249, label %then8484, label %endif8486 +then8484: %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a106 call void @finch.gen.emit(ptr %t250, { ptr, i64, i64 } %t251) @@ -86542,7 +86568,7 @@ then8480: %t257 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t256, 1 call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t257 -endif8482: +endif8486: %t258 = load ptr, ptr %a1 %t259 = load { ptr, i64, i64 }, ptr %a106 %t260 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t259) @@ -86764,21 +86790,21 @@ entry: store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic8483, label %ok8484 -panic8483: + br i1 %t7, label %panic8487, label %ok8488 +panic8487: call void @finch_panic(ptr @.str.5506, i64 5147, ptr @.str.5507) unreachable -ok8484: +ok8488: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range8485, label %inrange8486 -range8485: + br i1 %t12, label %range8489, label %inrange8490 +range8489: call void @finch_panic_index(ptr @.str.5508, i64 5147, i64 %t9, i64 %t11) unreachable -inrange8486: +inrange8490: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 %t15 = load %S.gen.StructDef, ptr %t14 @@ -86790,26 +86816,26 @@ inrange8486: %t21 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 %t22 = load i1, ptr %t21 %t23 = xor i1 %t22, true - br i1 %t23, label %then8487, label %endif8489 -then8487: + br i1 %t23, label %then8491, label %endif8493 +then8491: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic8490, label %ok8491 -panic8490: + br i1 %t25, label %panic8494, label %ok8495 +panic8494: call void @finch_panic(ptr @.str.5509, i64 5150, ptr @.str.5510) unreachable -ok8491: +ok8495: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 13 %t28 = load i64, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %t26 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 - br i1 %t31, label %range8492, label %inrange8493 -range8492: + br i1 %t31, label %range8496, label %inrange8497 +range8496: call void @finch_panic_index(ptr @.str.5511, i64 5150, i64 %t28, i64 %t30) unreachable -inrange8493: +inrange8497: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 @@ -86818,11 +86844,11 @@ inrange8493: %t37 = load { ptr, i64, i64 }, ptr %t34 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range8494, label %inrange8495 -range8494: + br i1 %t39, label %range8498, label %inrange8499 +range8498: call void @finch_panic_index(ptr @.str.5512, i64 5150, i64 %t36, i64 %t38) unreachable -inrange8495: +inrange8499: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = load %S.ast.Node, ptr %t41 @@ -86833,8 +86859,8 @@ inrange8495: store %S.ast.Node %t45, ptr %a20 store %S.ast.Node %t46, ptr %a47 call void @finch.drop.S_ast_Node(ptr %a47) - br label %endif8489 -endif8489: + br label %endif8493 +endif8493: %t48 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.5513, i64 6, i64 0 }, 0 %t49 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 @@ -86856,40 +86882,40 @@ endif8489: %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t67 = load i64, ptr %t66 %t68 = icmp sgt i64 %t67, 0 - br label %logic.from8496 -logic.from8496: - br i1 %t68, label %logic.rhs8497, label %logic.end8498 -logic.rhs8497: + br label %logic.from8500 +logic.from8500: + br i1 %t68, label %logic.rhs8501, label %logic.end8502 +logic.rhs8501: %t69 = load { ptr, i64, i64 }, ptr %a4 %t70 = extractvalue { ptr, i64, i64 } %t69, 1 %t71 = icmp uge i64 0, %t70 - br i1 %t71, label %range8499, label %inrange8500 -range8499: + br i1 %t71, label %range8503, label %inrange8504 +range8503: call void @finch_panic_index(ptr @.str.5514, i64 5154, i64 0, i64 %t70) unreachable -inrange8500: +inrange8504: %t72 = extractvalue { ptr, i64, i64 } %t69, 0 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i64 0 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = icmp sgt i64 %t75, 0 - br label %logic.rend8501 -logic.rend8501: - br label %logic.end8498 -logic.end8498: - %t77 = phi i1 [ false, %logic.from8496 ], [ %t76, %logic.rend8501 ] + br label %logic.rend8505 +logic.rend8505: + br label %logic.end8502 +logic.end8502: + %t77 = phi i1 [ false, %logic.from8500 ], [ %t76, %logic.rend8505 ] store i1 %t77, ptr %a78 store { ptr, i64, i64 } zeroinitializer, ptr %a79 %t80 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i32 0, i32 1 %t82 = load i64, ptr %t81 store i64 0, ptr %a83 - br label %for.cond8502 -for.cond8502: + br label %for.cond8506 +for.cond8506: %t84 = load i64, ptr %a83 %t85 = icmp slt i64 %t84, %t82 - br i1 %t85, label %for.body8503, label %for.end8505 -for.body8503: + br i1 %t85, label %for.body8507, label %for.end8509 +for.body8507: %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %a79, i32 0, i32 1 %t87 = load i64, ptr %t86 %t88 = add i64 %t87, 1 @@ -86898,31 +86924,31 @@ for.body8503: %t90 = getelementptr inbounds i64, ptr %t89, i64 %t87 store i64 -1, ptr %t90 store i64 %t88, ptr %t86 - br label %for.step8504 -for.step8504: + br label %for.step8508 +for.step8508: %t91 = load i64, ptr %a83 %t92 = add i64 %t91, 1 store i64 %t92, ptr %a83 - br label %for.cond8502 -for.end8505: + br label %for.cond8506 +for.end8509: %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t94 = load i64, ptr %t93 store i64 0, ptr %a95 - br label %for.cond8506 -for.cond8506: + br label %for.cond8510 +for.cond8510: %t96 = load i64, ptr %a95 %t97 = icmp slt i64 %t96, %t94 - br i1 %t97, label %for.body8507, label %for.end8509 -for.body8507: + br i1 %t97, label %for.body8511, label %for.end8513 +for.body8511: %t98 = load i64, ptr %a95 %t99 = load { ptr, i64, i64 }, ptr %a4 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 %t98, %t100 - br i1 %t101, label %range8510, label %inrange8511 -range8510: + br i1 %t101, label %range8514, label %inrange8515 +range8514: call void @finch_panic_index(ptr @.str.5515, i64 5160, i64 %t98, i64 %t100) unreachable -inrange8511: +inrange8515: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t98 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 @@ -86930,36 +86956,36 @@ inrange8511: %t106 = icmp sgt i64 %t105, 0 %t107 = load i1, ptr %a78 %t108 = icmp ne i1 %t106, %t107 - br i1 %t108, label %then8512, label %endif8514 -then8512: + br i1 %t108, label %then8516, label %endif8518 +then8516: %t109 = load ptr, ptr %a1 %t110 = load i64, ptr %a95 %t111 = load { ptr, i64, i64 }, ptr %a3 %t112 = extractvalue { ptr, i64, i64 } %t111, 1 %t113 = icmp uge i64 %t110, %t112 - br i1 %t113, label %range8515, label %inrange8516 -range8515: + br i1 %t113, label %range8519, label %inrange8520 +range8519: call void @finch_panic_index(ptr @.str.5516, i64 5161, i64 %t110, i64 %t112) unreachable -inrange8516: +inrange8520: %t114 = extractvalue { ptr, i64, i64 } %t111, 0 %t115 = getelementptr inbounds %S.ast.Node, ptr %t114, i64 %t110 %t116 = load %S.ast.Node, ptr %t115 call void @finch.gen.fail(ptr %t109, %S.ast.Node %t116, { ptr, i64, i64 } { ptr @.str.5517, i64 69, i64 0 }) - br label %endif8514 -endif8514: + br label %endif8518 +endif8518: %t117 = load i1, ptr %a78 %t118 = xor i1 %t117, true - br i1 %t118, label %then8517, label %endif8519 -then8517: + br i1 %t118, label %then8521, label %endif8523 +then8521: %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t120 = load i64, ptr %t119 %t121 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t121, i32 0, i32 1 %t123 = load i64, ptr %t122 %t124 = icmp ne i64 %t120, %t123 - br i1 %t124, label %then8520, label %endif8522 -then8520: + br i1 %t124, label %then8524, label %endif8526 +then8524: %t125 = load ptr, ptr %a1 %t126 = load %S.ast.Node, ptr %a5 %t127 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 @@ -87022,34 +87048,34 @@ then8520: call void @finch.gen.fail(ptr %t125, %S.ast.Node %t126, { ptr, i64, i64 } %t175) store { ptr, i64, i64 } %t175, ptr %a176 call void @finch_str_drop(ptr %a176) - br label %endif8522 -endif8522: + br label %endif8526 +endif8526: %t177 = load i64, ptr %a95 %t178 = load i64, ptr %a95 %t179 = load { ptr, i64, i64 }, ptr %a79 %t180 = extractvalue { ptr, i64, i64 } %t179, 1 %t181 = icmp uge i64 %t178, %t180 - br i1 %t181, label %range8523, label %inrange8524 -range8523: + br i1 %t181, label %range8527, label %inrange8528 +range8527: call void @finch_panic_index(ptr @.str.5522, i64 5167, i64 %t178, i64 %t180) unreachable -inrange8524: +inrange8528: %t182 = extractvalue { ptr, i64, i64 } %t179, 0 %t183 = getelementptr inbounds i64, ptr %t182, i64 %t178 store i64 %t177, ptr %t183 - br label %for.step8508 -endif8519: + br label %for.step8512 +endif8523: %t184 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i32 0, i32 1 %t186 = load i64, ptr %a95 %t187 = load { ptr, i64, i64 }, ptr %a4 %t188 = extractvalue { ptr, i64, i64 } %t187, 1 %t189 = icmp uge i64 %t186, %t188 - br i1 %t189, label %range8525, label %inrange8526 -range8525: + br i1 %t189, label %range8529, label %inrange8530 +range8529: call void @finch_panic_index(ptr @.str.5523, i64 5170, i64 %t186, i64 %t188) unreachable -inrange8526: +inrange8530: %t190 = extractvalue { ptr, i64, i64 } %t187, 0 %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i64 %t186 %t192 = load { ptr, i64, i64 }, ptr %t191 @@ -87057,43 +87083,43 @@ inrange8526: %t194 = load i64, ptr %t185 %t195 = load ptr, ptr %t184 store i64 0, ptr %a196 - br label %find.cond8527 -find.cond8527: + br label %find.cond8531 +find.cond8531: %t197 = load i64, ptr %a196 %t198 = icmp slt i64 %t197, %t194 - br i1 %t198, label %find.body8528, label %find.end8531 -find.body8528: + br i1 %t198, label %find.body8532, label %find.end8535 +find.body8532: %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t195, i64 %t197 %t200 = load { ptr, i64, i64 }, ptr %t199 store { ptr, i64, i64 } %t200, ptr %a201 store { ptr, i64, i64 } %t192, ptr %a202 %t203 = call i32 @finch_str_eq(ptr %a201, ptr %a202) %t204 = icmp ne i32 %t203, 0 - br i1 %t204, label %find.hit8529, label %find.next8530 -find.hit8529: + br i1 %t204, label %find.hit8533, label %find.next8534 +find.hit8533: store i64 %t197, ptr %a193 - br label %find.end8531 -find.next8530: + br label %find.end8535 +find.next8534: %t205 = add i64 %t197, 1 store i64 %t205, ptr %a196 - br label %find.cond8527 -find.end8531: + br label %find.cond8531 +find.end8535: %t206 = load i64, ptr %a193 store i64 %t206, ptr %a207 %t208 = load i64, ptr %a207 %t209 = icmp slt i64 %t208, 0 - br i1 %t209, label %then8532, label %endif8534 -then8532: + br i1 %t209, label %then8536, label %endif8538 +then8536: %t210 = load ptr, ptr %a1 %t211 = load i64, ptr %a95 %t212 = load { ptr, i64, i64 }, ptr %a3 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 %t211, %t213 - br i1 %t214, label %range8535, label %inrange8536 -range8535: + br i1 %t214, label %range8539, label %inrange8540 +range8539: call void @finch_panic_index(ptr @.str.5524, i64 5172, i64 %t211, i64 %t213) unreachable -inrange8536: +inrange8540: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 %t211 %t217 = load %S.ast.Node, ptr %t216 @@ -87107,11 +87133,11 @@ inrange8536: %t225 = load { ptr, i64, i64 }, ptr %a4 %t226 = extractvalue { ptr, i64, i64 } %t225, 1 %t227 = icmp uge i64 %t224, %t226 - br i1 %t227, label %range8537, label %inrange8538 -range8537: + br i1 %t227, label %range8541, label %inrange8542 +range8541: call void @finch_panic_index(ptr @.str.5526, i64 5172, i64 %t224, i64 %t226) unreachable -inrange8538: +inrange8542: %t228 = extractvalue { ptr, i64, i64 } %t225, 0 %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i64 %t224 %t230 = load { ptr, i64, i64 }, ptr %t229 @@ -87130,33 +87156,33 @@ inrange8538: call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t240) store { ptr, i64, i64 } %t240, ptr %a241 call void @finch_str_drop(ptr %a241) - br label %endif8534 -endif8534: + br label %endif8538 +endif8538: %t242 = load i64, ptr %a207 %t243 = load { ptr, i64, i64 }, ptr %a79 %t244 = extractvalue { ptr, i64, i64 } %t243, 1 %t245 = icmp uge i64 %t242, %t244 - br i1 %t245, label %range8539, label %inrange8540 -range8539: + br i1 %t245, label %range8543, label %inrange8544 +range8543: call void @finch_panic_index(ptr @.str.5528, i64 5174, i64 %t242, i64 %t244) unreachable -inrange8540: +inrange8544: %t246 = extractvalue { ptr, i64, i64 } %t243, 0 %t247 = getelementptr inbounds i64, ptr %t246, i64 %t242 %t248 = load i64, ptr %t247 %t249 = icmp sge i64 %t248, 0 - br i1 %t249, label %then8541, label %endif8543 -then8541: + br i1 %t249, label %then8545, label %endif8547 +then8545: %t250 = load ptr, ptr %a1 %t251 = load i64, ptr %a95 %t252 = load { ptr, i64, i64 }, ptr %a3 %t253 = extractvalue { ptr, i64, i64 } %t252, 1 %t254 = icmp uge i64 %t251, %t253 - br i1 %t254, label %range8544, label %inrange8545 -range8544: + br i1 %t254, label %range8548, label %inrange8549 +range8548: call void @finch_panic_index(ptr @.str.5529, i64 5175, i64 %t251, i64 %t253) unreachable -inrange8545: +inrange8549: %t255 = extractvalue { ptr, i64, i64 } %t252, 0 %t256 = getelementptr inbounds %S.ast.Node, ptr %t255, i64 %t251 %t257 = load %S.ast.Node, ptr %t256 @@ -87164,11 +87190,11 @@ inrange8545: %t259 = load { ptr, i64, i64 }, ptr %a4 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 %t258, %t260 - br i1 %t261, label %range8546, label %inrange8547 -range8546: + br i1 %t261, label %range8550, label %inrange8551 +range8550: call void @finch_panic_index(ptr @.str.5531, i64 5175, i64 %t258, i64 %t260) unreachable -inrange8547: +inrange8551: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 %t258 %t264 = load { ptr, i64, i64 }, ptr %t263 @@ -87185,36 +87211,36 @@ inrange8547: call void @finch.gen.fail(ptr %t250, %S.ast.Node %t257, { ptr, i64, i64 } %t273) store { ptr, i64, i64 } %t273, ptr %a274 call void @finch_str_drop(ptr %a274) - br label %endif8543 -endif8543: + br label %endif8547 +endif8547: %t275 = load i64, ptr %a95 %t276 = load i64, ptr %a207 %t277 = load { ptr, i64, i64 }, ptr %a79 %t278 = extractvalue { ptr, i64, i64 } %t277, 1 %t279 = icmp uge i64 %t276, %t278 - br i1 %t279, label %range8548, label %inrange8549 -range8548: + br i1 %t279, label %range8552, label %inrange8553 +range8552: call void @finch_panic_index(ptr @.str.5533, i64 5177, i64 %t276, i64 %t278) unreachable -inrange8549: +inrange8553: %t280 = extractvalue { ptr, i64, i64 } %t277, 0 %t281 = getelementptr inbounds i64, ptr %t280, i64 %t276 store i64 %t275, ptr %t281 - br label %for.step8508 -for.step8508: + br label %for.step8512 +for.step8512: %t282 = load i64, ptr %a95 %t283 = add i64 %t282, 1 store i64 %t283, ptr %a95 - br label %for.cond8506 -for.end8509: + br label %for.cond8510 +for.end8513: store { ptr, i64, i64 } { ptr @.str.5534, i64 15, i64 0 }, ptr %a284 %t285 = load ptr, ptr %a1 %t286 = icmp eq ptr %t285, null - br i1 %t286, label %panic8550, label %ok8551 -panic8550: + br i1 %t286, label %panic8554, label %ok8555 +panic8554: call void @finch_panic(ptr @.str.5535, i64 5180, ptr @.str.5536) unreachable -ok8551: +ok8555: %t287 = getelementptr inbounds %S.gen.Gen, ptr %t285, i32 0, i32 11 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i32 0, i32 1 %t289 = load i64, ptr %t288 @@ -87223,22 +87249,22 @@ ok8551: %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i32 0, i32 1 %t293 = load i64, ptr %t292 store i64 0, ptr %a294 - br label %for.cond8552 -for.cond8552: + br label %for.cond8556 +for.cond8556: %t295 = load i64, ptr %a294 %t296 = icmp slt i64 %t295, %t293 - br i1 %t296, label %for.body8553, label %for.end8555 -for.body8553: + br i1 %t296, label %for.body8557, label %for.end8559 +for.body8557: %t297 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 12 %t298 = load i64, ptr %a294 %t299 = load { ptr, i64, i64 }, ptr %t297 %t300 = extractvalue { ptr, i64, i64 } %t299, 1 %t301 = icmp uge i64 %t298, %t300 - br i1 %t301, label %range8556, label %inrange8557 -range8556: + br i1 %t301, label %range8560, label %inrange8561 +range8560: call void @finch_panic_index(ptr @.str.5537, i64 5182, i64 %t298, i64 %t300) unreachable -inrange8557: +inrange8561: %t302 = extractvalue { ptr, i64, i64 } %t299, 0 %t303 = getelementptr inbounds %S.ast.Type, ptr %t302, i64 %t298 %t304 = load %S.ast.Type, ptr %t303 @@ -87251,39 +87277,39 @@ inrange8557: %t311 = load { ptr, i64, i64 }, ptr %a79 %t312 = extractvalue { ptr, i64, i64 } %t311, 1 %t313 = icmp uge i64 %t310, %t312 - br i1 %t313, label %range8558, label %inrange8559 -range8558: + br i1 %t313, label %range8562, label %inrange8563 +range8562: call void @finch_panic_index(ptr @.str.5538, i64 5184, i64 %t310, i64 %t312) unreachable -inrange8559: +inrange8563: %t314 = extractvalue { ptr, i64, i64 } %t311, 0 %t315 = getelementptr inbounds i64, ptr %t314, i64 %t310 %t316 = load i64, ptr %t315 %t317 = icmp sge i64 %t316, 0 - br i1 %t317, label %then8560, label %else8561 -then8560: + br i1 %t317, label %then8564, label %else8565 +then8564: %t318 = load ptr, ptr %a1 %t319 = load ptr, ptr %a1 %t320 = load i64, ptr %a294 %t321 = load { ptr, i64, i64 }, ptr %a79 %t322 = extractvalue { ptr, i64, i64 } %t321, 1 %t323 = icmp uge i64 %t320, %t322 - br i1 %t323, label %range8563, label %inrange8564 -range8563: + br i1 %t323, label %range8567, label %inrange8568 +range8567: call void @finch_panic_index(ptr @.str.5539, i64 5185, i64 %t320, i64 %t322) unreachable -inrange8564: +inrange8568: %t324 = extractvalue { ptr, i64, i64 } %t321, 0 %t325 = getelementptr inbounds i64, ptr %t324, i64 %t320 %t326 = load i64, ptr %t325 %t327 = load { ptr, i64, i64 }, ptr %a3 %t328 = extractvalue { ptr, i64, i64 } %t327, 1 %t329 = icmp uge i64 %t326, %t328 - br i1 %t329, label %range8565, label %inrange8566 -range8565: + br i1 %t329, label %range8569, label %inrange8570 +range8569: call void @finch_panic_index(ptr @.str.5540, i64 5185, i64 %t326, i64 %t328) unreachable -inrange8566: +inrange8570: %t330 = extractvalue { ptr, i64, i64 } %t327, 0 %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 %t332 = load %S.ast.Node, ptr %t331 @@ -87294,22 +87320,22 @@ inrange8566: %t337 = load { ptr, i64, i64 }, ptr %a79 %t338 = extractvalue { ptr, i64, i64 } %t337, 1 %t339 = icmp uge i64 %t336, %t338 - br i1 %t339, label %range8567, label %inrange8568 -range8567: + br i1 %t339, label %range8571, label %inrange8572 +range8571: call void @finch_panic_index(ptr @.str.5541, i64 5185, i64 %t336, i64 %t338) unreachable -inrange8568: +inrange8572: %t340 = extractvalue { ptr, i64, i64 } %t337, 0 %t341 = getelementptr inbounds i64, ptr %t340, i64 %t336 %t342 = load i64, ptr %t341 %t343 = load { ptr, i64, i64 }, ptr %a3 %t344 = extractvalue { ptr, i64, i64 } %t343, 1 %t345 = icmp uge i64 %t342, %t344 - br i1 %t345, label %range8569, label %inrange8570 -range8569: + br i1 %t345, label %range8573, label %inrange8574 +range8573: call void @finch_panic_index(ptr @.str.5542, i64 5185, i64 %t342, i64 %t344) unreachable -inrange8570: +inrange8574: %t346 = extractvalue { ptr, i64, i64 } %t343, 0 %t347 = getelementptr inbounds %S.ast.Node, ptr %t346, i64 %t342 %t348 = load %S.ast.Node, ptr %t347 @@ -87318,11 +87344,11 @@ inrange8570: %t351 = load { ptr, i64, i64 }, ptr %t349 %t352 = extractvalue { ptr, i64, i64 } %t351, 1 %t353 = icmp uge i64 %t350, %t352 - br i1 %t353, label %range8571, label %inrange8572 -range8571: + br i1 %t353, label %range8575, label %inrange8576 +range8575: call void @finch_panic_index(ptr @.str.5544, i64 5185, i64 %t350, i64 %t352) unreachable -inrange8572: +inrange8576: %t354 = extractvalue { ptr, i64, i64 } %t351, 0 %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i64 %t350 %t356 = load { ptr, i64, i64 }, ptr %t355 @@ -87345,45 +87371,45 @@ inrange8572: store %S.gen.Val %t366, ptr %a309 store %S.gen.Val %t369, ptr %a370 call void @finch.drop.S_gen_Val(ptr %a370) - br label %endif8562 -else8561: + br label %endif8566 +else8565: %t371 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 %t372 = load i1, ptr %t371 %t373 = xor i1 %t372, true - br label %logic.from8573 -logic.from8573: - br i1 %t373, label %logic.rhs8574, label %logic.end8575 -logic.rhs8574: + br label %logic.from8577 +logic.from8577: + br i1 %t373, label %logic.rhs8578, label %logic.end8579 +logic.rhs8578: %t374 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 %t375 = load i64, ptr %a294 %t376 = load { ptr, i64, i64 }, ptr %t374 %t377 = extractvalue { ptr, i64, i64 } %t376, 1 %t378 = icmp uge i64 %t375, %t377 - br i1 %t378, label %range8576, label %inrange8577 -range8576: + br i1 %t378, label %range8580, label %inrange8581 +range8580: call void @finch_panic_index(ptr @.str.5546, i64 5186, i64 %t375, i64 %t377) unreachable -inrange8577: +inrange8581: %t379 = extractvalue { ptr, i64, i64 } %t376, 0 %t380 = getelementptr inbounds %S.ast.Node, ptr %t379, i64 %t375 %t381 = getelementptr inbounds %S.ast.Node, ptr %t380, i32 0, i32 9 %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %t381, i32 0, i32 1 %t383 = load i64, ptr %t382 %t384 = icmp sgt i64 %t383, 0 - br label %logic.rend8578 -logic.rend8578: - br label %logic.end8575 -logic.end8575: - %t385 = phi i1 [ false, %logic.from8573 ], [ %t384, %logic.rend8578 ] - br i1 %t385, label %then8579, label %else8580 -then8579: + br label %logic.rend8582 +logic.rend8582: + br label %logic.end8579 +logic.end8579: + %t385 = phi i1 [ false, %logic.from8577 ], [ %t384, %logic.rend8582 ] + br i1 %t385, label %then8583, label %else8584 +then8583: %t386 = load ptr, ptr %a1 %t387 = icmp eq ptr %t386, null - br i1 %t387, label %panic8582, label %ok8583 -panic8582: + br i1 %t387, label %panic8586, label %ok8587 +panic8586: call void @finch_panic(ptr @.str.5547, i64 5188, ptr @.str.5548) unreachable -ok8583: +ok8587: %t388 = getelementptr inbounds %S.gen.Gen, ptr %t386, i32 0, i32 10 %t389 = load { ptr, i64, i64 }, ptr %t388 store { ptr, i64, i64 } %t389, ptr %a390 @@ -87392,11 +87418,11 @@ ok8583: store { ptr, i64, i64 } %t392, ptr %a393 %t394 = load ptr, ptr %a1 %t395 = icmp eq ptr %t394, null - br i1 %t395, label %panic8584, label %ok8585 -panic8584: + br i1 %t395, label %panic8588, label %ok8589 +panic8588: call void @finch_panic(ptr @.str.5549, i64 5189, ptr @.str.5550) unreachable -ok8585: +ok8589: %t396 = getelementptr inbounds %S.gen.Gen, ptr %t394, i32 0, i32 14 %t397 = load { ptr, i64, i64 }, ptr %t396 store { ptr, i64, i64 } %t397, ptr %a398 @@ -87405,11 +87431,11 @@ ok8585: store { ptr, i64, i64 } %t400, ptr %a401 %t402 = load ptr, ptr %a1 %t403 = icmp eq ptr %t402, null - br i1 %t403, label %panic8586, label %ok8587 -panic8586: + br i1 %t403, label %panic8590, label %ok8591 +panic8590: call void @finch_panic(ptr @.str.5551, i64 5190, ptr @.str.5552) unreachable -ok8587: +ok8591: %t404 = getelementptr inbounds %S.gen.Gen, ptr %t402, i32 0, i32 18 %t405 = load { ptr, i64, i64 }, ptr %t404 store { ptr, i64, i64 } %t405, ptr %a406 @@ -87418,11 +87444,11 @@ ok8587: store { ptr, i64, i64 } %t408, ptr %a409 %t410 = load ptr, ptr %a1 %t411 = icmp eq ptr %t410, null - br i1 %t411, label %panic8588, label %ok8589 -panic8588: + br i1 %t411, label %panic8592, label %ok8593 +panic8592: call void @finch_panic(ptr @.str.5553, i64 5191, ptr @.str.5554) unreachable -ok8589: +ok8593: %t412 = getelementptr inbounds %S.gen.Gen, ptr %t410, i32 0, i32 19 %t413 = load { ptr, i64, i64 }, ptr %t412 store { ptr, i64, i64 } %t413, ptr %a414 @@ -87433,11 +87459,11 @@ ok8589: %t419 = load { ptr, i64, i64 }, ptr %t418 %t420 = load ptr, ptr %a1 %t421 = icmp eq ptr %t420, null - br i1 %t421, label %panic8590, label %ok8591 -panic8590: + br i1 %t421, label %panic8594, label %ok8595 +panic8594: call void @finch_panic(ptr @.str.5555, i64 5192, ptr @.str.5556) unreachable -ok8591: +ok8595: %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 18 store { ptr, i64, i64 } %t419, ptr %a423 call void @finch.copy.arr_str(ptr %a424, ptr %a423) @@ -87450,11 +87476,11 @@ ok8591: %t429 = load { ptr, i64, i64 }, ptr %t428 %t430 = load ptr, ptr %a1 %t431 = icmp eq ptr %t430, null - br i1 %t431, label %panic8592, label %ok8593 -panic8592: + br i1 %t431, label %panic8596, label %ok8597 +panic8596: call void @finch_panic(ptr @.str.5557, i64 5193, ptr @.str.5558) unreachable -ok8593: +ok8597: %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 19 store { ptr, i64, i64 } %t429, ptr %a433 call void @finch.copy.arr_S_ast_Type(ptr %a434, ptr %a433) @@ -87467,11 +87493,11 @@ ok8593: %t439 = load { ptr, i64, i64 }, ptr %a438 %t440 = load ptr, ptr %a1 %t441 = icmp eq ptr %t440, null - br i1 %t441, label %panic8594, label %ok8595 -panic8594: + br i1 %t441, label %panic8598, label %ok8599 +panic8598: call void @finch_panic(ptr @.str.5559, i64 5195, ptr @.str.5560) unreachable -ok8595: +ok8599: %t442 = getelementptr inbounds %S.gen.Gen, ptr %t440, i32 0, i32 10 store { ptr, i64, i64 } %t439, ptr %a443 call void @finch.copy.arr_S_gen_Scope(ptr %a444, ptr %a443) @@ -87486,11 +87512,11 @@ ok8595: %t450 = load { ptr, i64, i64 }, ptr %t449 %t451 = load ptr, ptr %a1 %t452 = icmp eq ptr %t451, null - br i1 %t452, label %panic8596, label %ok8597 -panic8596: + br i1 %t452, label %panic8600, label %ok8601 +panic8600: call void @finch_panic(ptr @.str.5561, i64 5197, ptr @.str.5562) unreachable -ok8597: +ok8601: %t453 = getelementptr inbounds %S.gen.Gen, ptr %t451, i32 0, i32 14 store { ptr, i64, i64 } %t450, ptr %a454 call void @finch_str_copy(ptr %a455, ptr %a454) @@ -87506,22 +87532,22 @@ ok8597: %t463 = load { ptr, i64, i64 }, ptr %t461 %t464 = extractvalue { ptr, i64, i64 } %t463, 1 %t465 = icmp uge i64 %t462, %t464 - br i1 %t465, label %range8598, label %inrange8599 -range8598: + br i1 %t465, label %range8602, label %inrange8603 +range8602: call void @finch_panic_index(ptr @.str.5563, i64 5198, i64 %t462, i64 %t464) unreachable -inrange8599: +inrange8603: %t466 = extractvalue { ptr, i64, i64 } %t463, 0 %t467 = getelementptr inbounds %S.ast.Node, ptr %t466, i64 %t462 %t468 = getelementptr inbounds %S.ast.Node, ptr %t467, i32 0, i32 9 %t469 = load { ptr, i64, i64 }, ptr %t468 %t470 = extractvalue { ptr, i64, i64 } %t469, 1 %t471 = icmp uge i64 0, %t470 - br i1 %t471, label %range8600, label %inrange8601 -range8600: + br i1 %t471, label %range8604, label %inrange8605 +range8604: call void @finch_panic_index(ptr @.str.5564, i64 5198, i64 0, i64 %t470) unreachable -inrange8601: +inrange8605: %t472 = extractvalue { ptr, i64, i64 } %t469, 0 %t473 = getelementptr inbounds %S.ast.Node, ptr %t472, i64 0 %t474 = load %S.ast.Node, ptr %t473 @@ -87533,22 +87559,22 @@ inrange8601: %t480 = load { ptr, i64, i64 }, ptr %t478 %t481 = extractvalue { ptr, i64, i64 } %t480, 1 %t482 = icmp uge i64 %t479, %t481 - br i1 %t482, label %range8602, label %inrange8603 -range8602: + br i1 %t482, label %range8606, label %inrange8607 +range8606: call void @finch_panic_index(ptr @.str.5565, i64 5198, i64 %t479, i64 %t481) unreachable -inrange8603: +inrange8607: %t483 = extractvalue { ptr, i64, i64 } %t480, 0 %t484 = getelementptr inbounds %S.ast.Node, ptr %t483, i64 %t479 %t485 = getelementptr inbounds %S.ast.Node, ptr %t484, i32 0, i32 9 %t486 = load { ptr, i64, i64 }, ptr %t485 %t487 = extractvalue { ptr, i64, i64 } %t486, 1 %t488 = icmp uge i64 0, %t487 - br i1 %t488, label %range8604, label %inrange8605 -range8604: + br i1 %t488, label %range8608, label %inrange8609 +range8608: call void @finch_panic_index(ptr @.str.5566, i64 5198, i64 0, i64 %t487) unreachable -inrange8605: +inrange8609: %t489 = extractvalue { ptr, i64, i64 } %t486, 0 %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 %t491 = load %S.ast.Node, ptr %t490 @@ -87557,11 +87583,11 @@ inrange8605: %t494 = load { ptr, i64, i64 }, ptr %t492 %t495 = extractvalue { ptr, i64, i64 } %t494, 1 %t496 = icmp uge i64 %t493, %t495 - br i1 %t496, label %range8606, label %inrange8607 -range8606: + br i1 %t496, label %range8610, label %inrange8611 +range8610: call void @finch_panic_index(ptr @.str.5568, i64 5198, i64 %t493, i64 %t495) unreachable -inrange8607: +inrange8611: %t497 = extractvalue { ptr, i64, i64 } %t494, 0 %t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i64 %t493 %t499 = load { ptr, i64, i64 }, ptr %t498 @@ -87587,11 +87613,11 @@ inrange8607: %t514 = load { ptr, i64, i64 }, ptr %a401 %t515 = load ptr, ptr %a1 %t516 = icmp eq ptr %t515, null - br i1 %t516, label %panic8608, label %ok8609 -panic8608: + br i1 %t516, label %panic8612, label %ok8613 +panic8612: call void @finch_panic(ptr @.str.5570, i64 5199, ptr @.str.5571) unreachable -ok8609: +ok8613: %t517 = getelementptr inbounds %S.gen.Gen, ptr %t515, i32 0, i32 14 store { ptr, i64, i64 } %t514, ptr %a518 call void @finch_str_copy(ptr %a519, ptr %a518) @@ -87603,11 +87629,11 @@ ok8609: %t523 = load { ptr, i64, i64 }, ptr %a409 %t524 = load ptr, ptr %a1 %t525 = icmp eq ptr %t524, null - br i1 %t525, label %panic8610, label %ok8611 -panic8610: + br i1 %t525, label %panic8614, label %ok8615 +panic8614: call void @finch_panic(ptr @.str.5572, i64 5200, ptr @.str.5573) unreachable -ok8611: +ok8615: %t526 = getelementptr inbounds %S.gen.Gen, ptr %t524, i32 0, i32 18 store { ptr, i64, i64 } %t523, ptr %a527 call void @finch.copy.arr_str(ptr %a528, ptr %a527) @@ -87619,11 +87645,11 @@ ok8611: %t532 = load { ptr, i64, i64 }, ptr %a417 %t533 = load ptr, ptr %a1 %t534 = icmp eq ptr %t533, null - br i1 %t534, label %panic8612, label %ok8613 -panic8612: + br i1 %t534, label %panic8616, label %ok8617 +panic8616: call void @finch_panic(ptr @.str.5574, i64 5201, ptr @.str.5575) unreachable -ok8613: +ok8617: %t535 = getelementptr inbounds %S.gen.Gen, ptr %t533, i32 0, i32 19 store { ptr, i64, i64 } %t532, ptr %a536 call void @finch.copy.arr_S_ast_Type(ptr %a537, ptr %a536) @@ -87635,11 +87661,11 @@ ok8613: %t541 = load { ptr, i64, i64 }, ptr %a393 %t542 = load ptr, ptr %a1 %t543 = icmp eq ptr %t542, null - br i1 %t543, label %panic8614, label %ok8615 -panic8614: + br i1 %t543, label %panic8618, label %ok8619 +panic8618: call void @finch_panic(ptr @.str.5576, i64 5202, ptr @.str.5577) unreachable -ok8615: +ok8619: %t544 = getelementptr inbounds %S.gen.Gen, ptr %t542, i32 0, i32 10 store { ptr, i64, i64 } %t541, ptr %a545 call void @finch.copy.arr_S_gen_Scope(ptr %a546, ptr %a545) @@ -87653,14 +87679,14 @@ ok8615: call void @finch.drop.arr_str(ptr %a409) call void @finch_str_drop(ptr %a401) call void @finch.drop.arr_S_gen_Scope(ptr %a393) - br label %endif8581 -else8580: + br label %endif8585 +else8584: call void @finch.drop.S_gen_Val(ptr %a309) call void @finch.drop.S_ast_Type(ptr %a308) - br label %for.step8554 -endif8581: - br label %endif8562 -endif8562: + br label %for.step8558 +endif8585: + br label %endif8566 +endif8566: %t550 = load ptr, ptr %a1 %t551 = load %S.gen.Val, ptr %a309 %t552 = call { ptr, i64, i64 } @finch.gen.own(ptr %t550, %S.gen.Val %t551) @@ -87740,11 +87766,11 @@ endif8562: %t616 = load { ptr, i64, i64 }, ptr %t614 %t617 = extractvalue { ptr, i64, i64 } %t616, 1 %t618 = icmp uge i64 %t615, %t617 - br i1 %t618, label %range8616, label %inrange8617 -range8616: + br i1 %t618, label %range8620, label %inrange8621 +range8620: call void @finch_panic_index(ptr @.str.5583, i64 5208, i64 %t615, i64 %t617) unreachable -inrange8617: +inrange8621: %t619 = extractvalue { ptr, i64, i64 } %t616, 0 %t620 = getelementptr inbounds i64, ptr %t619, i64 %t615 %t621 = load i64, ptr %t620 @@ -87768,13 +87794,13 @@ inrange8617: call void @finch_str_drop(ptr %a553) call void @finch.drop.S_gen_Val(ptr %a309) call void @finch.drop.S_ast_Type(ptr %a308) - br label %for.step8554 -for.step8554: + br label %for.step8558 +for.step8558: %t634 = load i64, ptr %a294 %t635 = add i64 %t634, 1 store i64 %t635, ptr %a294 - br label %for.cond8552 -for.end8555: + br label %for.cond8556 +for.end8559: %t636 = load ptr, ptr %a1 %t637 = load i64, ptr %a290 call void @finch.gen.heldEnd(ptr %t636, i64 %t637) @@ -87813,18 +87839,18 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic8618, label %ok8619 -panic8618: + br i1 %t5, label %panic8622, label %ok8623 +panic8622: call void @finch_panic(ptr @.str.5584, i64 5218, ptr @.str.5585) unreachable -ok8619: +ok8623: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 %t8 = xor i1 %t7, true - br i1 %t8, label %then8620, label %endif8622 -then8620: + br i1 %t8, label %then8624, label %endif8626 +then8624: ret void -endif8622: +endif8626: %t9 = load { ptr, i64, i64 }, ptr %a3 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 @@ -87834,8 +87860,8 @@ endif8622: %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 - br i1 %t17, label %then8623, label %endif8625 -then8623: + br i1 %t17, label %then8627, label %endif8629 +then8627: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 @@ -87849,8 +87875,8 @@ then8623: call void @finch.gen.noteRef(ptr %t18, %S.ast.Node %t19, i64 %t22, i64 %t25, { ptr, i64, i64 } %t27, { ptr, i64, i64 } { ptr @.str.5586, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_drop(ptr %a28) - br label %endif8625 -endif8625: + br label %endif8629 +endif8629: call void @finch.drop.S_docs_Doc(ptr %a13) ret void } @@ -88167,11 +88193,11 @@ entry: %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 - br i1 %t6, label %range8626, label %inrange8627 -range8626: + br i1 %t6, label %range8630, label %inrange8631 +range8630: call void @finch_panic_index(ptr @.str.5587, i64 5228, i64 0, i64 %t5) unreachable -inrange8627: +inrange8631: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 %t9 = load %S.ast.Node, ptr %t8 @@ -88185,30 +88211,30 @@ inrange8627: store i64 %t16, ptr %a17 %t18 = load i64, ptr %a17 %t19 = icmp sge i64 %t18, 0 - br i1 %t19, label %then8628, label %endif8630 -then8628: + br i1 %t19, label %then8632, label %endif8634 +then8632: store { ptr, i64, i64 } zeroinitializer, ptr %a20 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 store i64 1, ptr %a24 - br label %for.cond8631 -for.cond8631: + br label %for.cond8635 +for.cond8635: %t25 = load i64, ptr %a24 %t26 = icmp slt i64 %t25, %t23 - br i1 %t26, label %for.body8632, label %for.end8634 -for.body8632: + br i1 %t26, label %for.body8636, label %for.end8638 +for.body8636: %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t29 = load i64, ptr %a24 %t30 = load { ptr, i64, i64 }, ptr %t28 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 %t29, %t31 - br i1 %t32, label %range8635, label %inrange8636 -range8635: + br i1 %t32, label %range8639, label %inrange8640 +range8639: call void @finch_panic_index(ptr @.str.5588, i64 5233, i64 %t29, i64 %t31) unreachable -inrange8636: +inrange8640: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t29 %t35 = load %S.ast.Node, ptr %t34 @@ -88222,13 +88248,13 @@ inrange8636: %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 %t39 store %S.ast.Node %t38, ptr %t42 store i64 %t40, ptr %t27 - br label %for.step8633 -for.step8633: + br label %for.step8637 +for.step8637: %t43 = load i64, ptr %a24 %t44 = add i64 %t43, 1 store i64 %t44, ptr %a24 - br label %for.cond8631 -for.end8634: + br label %for.cond8635 +for.end8638: %t45 = load ptr, ptr %a1 %t46 = load i64, ptr %a17 %t47 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88239,29 +88265,29 @@ for.end8634: call void @finch.drop.arr_S_ast_Node(ptr %a20) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t51 -endif8630: +endif8634: %t52 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t53 = load { ptr, i64, i64 }, ptr %t52 store { ptr, i64, i64 } %t53, ptr %a54 store { ptr, i64, i64 } { ptr @.str.5589, i64 3, i64 0 }, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 - br label %logic.from8637 -logic.from8637: - br i1 %t57, label %logic.rhs8638, label %logic.end8639 -logic.rhs8638: + br label %logic.from8641 +logic.from8641: + br i1 %t57, label %logic.rhs8642, label %logic.end8643 +logic.rhs8642: %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = call i64 @finch.gen.lookup(ptr %t58, { ptr, i64, i64 } %t60) %t62 = icmp slt i64 %t61, 0 - br label %logic.rend8640 -logic.rend8640: - br label %logic.end8639 -logic.end8639: - %t63 = phi i1 [ false, %logic.from8637 ], [ %t62, %logic.rend8640 ] - br i1 %t63, label %then8641, label %endif8643 -then8641: + br label %logic.rend8644 +logic.rend8644: + br label %logic.end8643 +logic.end8643: + %t63 = phi i1 [ false, %logic.from8641 ], [ %t62, %logic.rend8644 ] + br i1 %t63, label %then8645, label %endif8647 +then8645: %t64 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 %t65 = load { ptr, i64, i64 }, ptr %t64 store { ptr, i64, i64 } %t65, ptr %a66 @@ -88272,8 +88298,8 @@ then8641: %t71 = load { ptr, i64, i64 }, ptr %a69 %t72 = call i1 @finch.gen.imports(ptr %t70, { ptr, i64, i64 } %t71) %t73 = xor i1 %t72, true - br i1 %t73, label %then8644, label %endif8646 -then8644: + br i1 %t73, label %then8648, label %endif8650 +then8648: %t74 = load ptr, ptr %a1 %t75 = load %S.ast.Node, ptr %a13 %t76 = load { ptr, i64, i64 }, ptr %a69 @@ -88303,8 +88329,8 @@ then8644: call void @finch.gen.fail(ptr %t74, %S.ast.Node %t75, { ptr, i64, i64 } %t96) store { ptr, i64, i64 } %t96, ptr %a97 call void @finch_str_drop(ptr %a97) - br label %endif8646 -endif8646: + br label %endif8650 +endif8650: %t98 = load ptr, ptr %a1 %t99 = load { ptr, i64, i64 }, ptr %a69 %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88313,8 +88339,8 @@ endif8646: store i64 %t102, ptr %a103 %t104 = load i64, ptr %a103 %t105 = icmp sge i64 %t104, 0 - br i1 %t105, label %then8647, label %endif8649 -then8647: + br i1 %t105, label %then8651, label %endif8653 +then8651: %t106 = load ptr, ptr %a1 %t107 = load i64, ptr %a103 %t108 = load %S.ast.Node, ptr %a2 @@ -88337,7 +88363,7 @@ then8647: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t121 -endif8649: +endif8653: %t123 = load ptr, ptr %a1 %t124 = load { ptr, i64, i64 }, ptr %a69 %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88346,8 +88372,8 @@ endif8649: store i64 %t127, ptr %a128 %t129 = load i64, ptr %a128 %t130 = icmp sge i64 %t129, 0 - br i1 %t130, label %then8650, label %endif8652 -then8650: + br i1 %t130, label %then8654, label %endif8656 +then8654: %t131 = load ptr, ptr %a1 %t132 = load %S.ast.Node, ptr %a2 %t133 = load i64, ptr %a128 @@ -88370,7 +88396,7 @@ then8650: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t146 -endif8652: +endif8656: %t148 = load ptr, ptr %a1 %t149 = load { ptr, i64, i64 }, ptr %a69 %t150 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88379,8 +88405,8 @@ endif8652: store i64 %t152, ptr %a153 %t154 = load i64, ptr %a153 %t155 = icmp sge i64 %t154, 0 - br i1 %t155, label %then8653, label %endif8655 -then8653: + br i1 %t155, label %then8657, label %endif8659 +then8657: %t156 = load ptr, ptr %a1 %t157 = load %S.ast.Node, ptr %a2 %t158 = load i64, ptr %a153 @@ -88388,7 +88414,7 @@ then8653: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t159 -endif8655: +endif8659: %t160 = load ptr, ptr %a1 %t161 = load { ptr, i64, i64 }, ptr %a69 %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88397,30 +88423,30 @@ endif8655: store i64 %t164, ptr %a165 %t166 = load i64, ptr %a165 %t167 = icmp sge i64 %t166, 0 - br i1 %t167, label %then8656, label %endif8658 -then8656: + br i1 %t167, label %then8660, label %endif8662 +then8660: store { ptr, i64, i64 } zeroinitializer, ptr %a168 %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 %t171 = load i64, ptr %t170 store i64 1, ptr %a172 - br label %for.cond8659 -for.cond8659: + br label %for.cond8663 +for.cond8663: %t173 = load i64, ptr %a172 %t174 = icmp slt i64 %t173, %t171 - br i1 %t174, label %for.body8660, label %for.end8662 -for.body8660: + br i1 %t174, label %for.body8664, label %for.end8666 +for.body8664: %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 %t176 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t177 = load i64, ptr %a172 %t178 = load { ptr, i64, i64 }, ptr %t176 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 %t177, %t179 - br i1 %t180, label %range8663, label %inrange8664 -range8663: + br i1 %t180, label %range8667, label %inrange8668 +range8667: call void @finch_panic_index(ptr @.str.5598, i64 5258, i64 %t177, i64 %t179) unreachable -inrange8664: +inrange8668: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds %S.ast.Node, ptr %t181, i64 %t177 %t183 = load %S.ast.Node, ptr %t182 @@ -88434,13 +88460,13 @@ inrange8664: %t190 = getelementptr inbounds %S.ast.Node, ptr %t189, i64 %t187 store %S.ast.Node %t186, ptr %t190 store i64 %t188, ptr %t175 - br label %for.step8661 -for.step8661: + br label %for.step8665 +for.step8665: %t191 = load i64, ptr %a172 %t192 = add i64 %t191, 1 store i64 %t192, ptr %a172 - br label %for.cond8659 -for.end8662: + br label %for.cond8663 +for.end8666: %t193 = load ptr, ptr %a1 %t194 = load i64, ptr %a165 %t195 = load { ptr, i64, i64 }, ptr %a168 @@ -88452,7 +88478,7 @@ for.end8662: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t199 -endif8658: +endif8662: %t200 = load ptr, ptr %a1 %t201 = load %S.ast.Node, ptr %a2 %t202 = load { ptr, i64, i64 }, ptr %a69 @@ -88484,8 +88510,8 @@ endif8658: store { ptr, i64, i64 } %t223, ptr %a224 call void @finch_str_drop(ptr %a224) call void @finch_str_drop(ptr %a69) - br label %endif8643 -endif8643: + br label %endif8647 +endif8647: %t225 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t226 = call ptr @finch_alloc(i64 %t225) %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 0 @@ -88517,38 +88543,38 @@ endif8643: %t245 = load i64, ptr %t241 %t246 = load ptr, ptr %a238 store i64 0, ptr %a247 - br label %find.cond8665 -find.cond8665: + br label %find.cond8669 +find.cond8669: %t248 = load i64, ptr %a247 %t249 = icmp slt i64 %t248, %t245 - br i1 %t249, label %find.body8666, label %find.end8669 -find.body8666: + br i1 %t249, label %find.body8670, label %find.end8673 +find.body8670: %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t248 %t251 = load { ptr, i64, i64 }, ptr %t250 store { ptr, i64, i64 } %t251, ptr %a252 store { ptr, i64, i64 } %t243, ptr %a253 %t254 = call i32 @finch_str_eq(ptr %a252, ptr %a253) %t255 = icmp ne i32 %t254, 0 - br i1 %t255, label %find.hit8667, label %find.next8668 -find.hit8667: + br i1 %t255, label %find.hit8671, label %find.next8672 +find.hit8671: store i64 %t248, ptr %a244 - br label %find.end8669 -find.next8668: + br label %find.end8673 +find.next8672: %t256 = add i64 %t248, 1 store i64 %t256, ptr %a247 - br label %find.cond8665 -find.end8669: + br label %find.cond8669 +find.end8673: %t257 = load i64, ptr %a244 %t258 = icmp sge i64 %t257, 0 %t259 = call %S.gen.Ref @finch.gen.ref(ptr %t239, %S.ast.Node %t240, i1 %t258) store %S.gen.Ref %t259, ptr %a260 %t261 = load ptr, ptr %a1 %t262 = icmp eq ptr %t261, null - br i1 %t262, label %panic8670, label %ok8671 -panic8670: + br i1 %t262, label %panic8674, label %ok8675 +panic8674: call void @finch_panic(ptr @.str.5610, i64 5266, ptr @.str.5611) unreachable -ok8671: +ok8675: %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 11 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load i64, ptr %t264 @@ -88562,8 +88588,8 @@ ok8671: store %S.ast.Type %t272, ptr %a273 %t274 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t275 = load i1, ptr %t274 - br i1 %t275, label %then8672, label %endif8674 -then8672: + br i1 %t275, label %then8676, label %endif8678 +then8676: %t276 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t277 = getelementptr inbounds %S.gen.Place, ptr %t276, i32 0, i32 1 %t278 = load %S.ast.Type, ptr %t277 @@ -88574,21 +88600,21 @@ then8672: store %S.ast.Type %t281, ptr %a273 store %S.ast.Type %t282, ptr %a283 call void @finch.drop.S_ast_Type(ptr %a283) - br label %endif8674 -endif8674: + br label %endif8678 +endif8678: %t284 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t285 = load { ptr, i64, i64 }, ptr %t284 store { ptr, i64, i64 } %t285, ptr %a286 store { ptr, i64, i64 } { ptr @.str.5612, i64 5, i64 0 }, ptr %a287 %t288 = call i32 @finch_str_eq(ptr %a286, ptr %a287) %t289 = icmp ne i32 %t288, 0 - br i1 %t289, label %then8675, label %endif8677 -then8675: + br i1 %t289, label %then8679, label %endif8681 +then8679: store { ptr, i64, i64 } { ptr @.str.5613, i64 0, i64 0 }, ptr %a290 %t291 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t292 = load i1, ptr %t291 - br i1 %t292, label %then8678, label %else8679 -then8678: + br i1 %t292, label %then8682, label %else8683 +then8682: %t293 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t294 = getelementptr inbounds %S.gen.Place, ptr %t293, i32 0, i32 0 %t295 = load { ptr, i64, i64 }, ptr %t294 @@ -88599,8 +88625,8 @@ then8678: store { ptr, i64, i64 } %t298, ptr %a290 store { ptr, i64, i64 } %t299, ptr %a300 call void @finch_str_drop(ptr %a300) - br label %endif8680 -else8679: + br label %endif8684 +else8683: %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 %t302 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t303 = load { ptr, i64, i64 }, ptr %t302 @@ -88608,31 +88634,31 @@ else8679: %t305 = load i64, ptr %t301 %t306 = load ptr, ptr %a238 store i64 0, ptr %a307 - br label %find.cond8681 -find.cond8681: + br label %find.cond8685 +find.cond8685: %t308 = load i64, ptr %a307 %t309 = icmp slt i64 %t308, %t305 - br i1 %t309, label %find.body8682, label %find.end8685 -find.body8682: + br i1 %t309, label %find.body8686, label %find.end8689 +find.body8686: %t310 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 %t308 %t311 = load { ptr, i64, i64 }, ptr %t310 store { ptr, i64, i64 } %t311, ptr %a312 store { ptr, i64, i64 } %t303, ptr %a313 %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) %t315 = icmp ne i32 %t314, 0 - br i1 %t315, label %find.hit8683, label %find.next8684 -find.hit8683: + br i1 %t315, label %find.hit8687, label %find.next8688 +find.hit8687: store i64 %t308, ptr %a304 - br label %find.end8685 -find.next8684: + br label %find.end8689 +find.next8688: %t316 = add i64 %t308, 1 store i64 %t316, ptr %a307 - br label %find.cond8681 -find.end8685: + br label %find.cond8685 +find.end8689: %t317 = load i64, ptr %a304 %t318 = icmp sge i64 %t317, 0 - br i1 %t318, label %then8686, label %endif8688 -then8686: + br i1 %t318, label %then8690, label %endif8692 +then8690: %t319 = load ptr, ptr %a1 %t320 = load %S.ast.Node, ptr %a2 %t321 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88644,8 +88670,8 @@ then8686: call void @finch.gen.fail(ptr %t319, %S.ast.Node %t320, { ptr, i64, i64 } %t326) store { ptr, i64, i64 } %t326, ptr %a327 call void @finch_str_drop(ptr %a327) - br label %endif8688 -endif8688: + br label %endif8692 +endif8692: %t328 = load ptr, ptr %a1 %t329 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t330 = load %S.gen.Val, ptr %t329 @@ -88657,16 +88683,16 @@ endif8688: %t334 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t335 = getelementptr inbounds %S.gen.Val, ptr %t334, i32 0, i32 2 %t336 = load i1, ptr %t335 - br i1 %t336, label %then8689, label %endif8691 -then8689: + br i1 %t336, label %then8693, label %endif8695 +then8693: %t337 = load ptr, ptr %a1 %t338 = load { ptr, i64, i64 }, ptr %a290 %t339 = load %S.ast.Type, ptr %a273 call void @finch.gen.holdAddr(ptr %t337, { ptr, i64, i64 } %t338, %S.ast.Type %t339) - br label %endif8691 -endif8691: - br label %endif8680 -endif8680: + br label %endif8695 +endif8695: + br label %endif8684 +endif8684: %t340 = load ptr, ptr %a1 %t341 = load %S.ast.Node, ptr %a2 %t342 = call { ptr, i64, i64 } @finch.docs.arrayMethods() @@ -88682,26 +88708,26 @@ endif8680: %t350 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t351 = load i1, ptr %t350 %t352 = xor i1 %t351, true - br label %logic.from8692 -logic.from8692: - br i1 %t352, label %logic.rhs8693, label %logic.end8694 -logic.rhs8693: + br label %logic.from8696 +logic.from8696: + br i1 %t352, label %logic.rhs8697, label %logic.end8698 +logic.rhs8697: %t353 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t354 = getelementptr inbounds %S.gen.Val, ptr %t353, i32 0, i32 2 %t355 = load i1, ptr %t354 - br label %logic.rend8695 -logic.rend8695: - br label %logic.end8694 -logic.end8694: - %t356 = phi i1 [ false, %logic.from8692 ], [ %t355, %logic.rend8695 ] - br i1 %t356, label %then8696, label %endif8698 -then8696: + br label %logic.rend8699 +logic.rend8699: + br label %logic.end8698 +logic.end8698: + %t356 = phi i1 [ false, %logic.from8696 ], [ %t355, %logic.rend8699 ] + br i1 %t356, label %then8700, label %endif8702 +then8700: %t357 = load ptr, ptr %a1 %t358 = load { ptr, i64, i64 }, ptr %a290 %t359 = load %S.ast.Type, ptr %a273 call void @finch.gen.dropAt(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359) - br label %endif8698 -endif8698: + br label %endif8702 +endif8702: %t360 = load ptr, ptr %a1 %t361 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t360, i64 %t361) @@ -88712,15 +88738,15 @@ endif8698: call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t362 -endif8677: +endif8681: %t363 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t364 = load { ptr, i64, i64 }, ptr %t363 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.5615, i64 3, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 - br i1 %t368, label %then8699, label %endif8701 -then8699: + br i1 %t368, label %then8703, label %endif8705 +then8703: %t369 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t370 = load %S.gen.Val, ptr %t369 store %S.gen.Val %t370, ptr %a371 @@ -88729,8 +88755,8 @@ then8699: store %S.gen.Val %t373, ptr %a374 %t375 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t376 = load i1, ptr %t375 - br i1 %t376, label %then8702, label %endif8704 -then8702: + br i1 %t376, label %then8706, label %endif8708 +then8706: %t377 = load ptr, ptr %a1 %t378 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t379 = getelementptr inbounds %S.gen.Place, ptr %t378, i32 0, i32 0 @@ -88746,8 +88772,8 @@ then8702: store %S.gen.Val %t387, ptr %a374 store %S.gen.Val %t388, ptr %a389 call void @finch.drop.S_gen_Val(ptr %a389) - br label %endif8704 -endif8704: + br label %endif8708 +endif8708: %t390 = load ptr, ptr %a1 %t391 = load %S.ast.Node, ptr %a2 %t392 = call { ptr, i64, i64 } @finch.docs.strMethods() @@ -88757,13 +88783,13 @@ endif8704: %t394 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t395 = load i1, ptr %t394 %t396 = xor i1 %t395, true - br i1 %t396, label %then8705, label %endif8707 -then8705: + br i1 %t396, label %then8709, label %endif8711 +then8709: %t397 = load ptr, ptr %a1 %t398 = load %S.gen.Val, ptr %a374 call void @finch.gen.hold(ptr %t397, %S.gen.Val %t398) - br label %endif8707 -endif8707: + br label %endif8711 +endif8711: %t399 = load ptr, ptr %a1 %t400 = load %S.ast.Node, ptr %a2 %t401 = load ptr, ptr %a1 @@ -88776,13 +88802,13 @@ endif8707: %t407 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t408 = load i1, ptr %t407 %t409 = xor i1 %t408, true - br i1 %t409, label %then8708, label %endif8710 -then8708: + br i1 %t409, label %then8712, label %endif8714 +then8712: %t410 = load ptr, ptr %a1 %t411 = load %S.gen.Val, ptr %a374 call void @finch.gen.release(ptr %t410, %S.gen.Val %t411) - br label %endif8710 -endif8710: + br label %endif8714 +endif8714: %t412 = load ptr, ptr %a1 %t413 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t412, i64 %t413) @@ -88793,20 +88819,20 @@ endif8710: call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t414 -endif8701: +endif8705: %t415 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t416 = load { ptr, i64, i64 }, ptr %t415 store { ptr, i64, i64 } %t416, ptr %a417 store { ptr, i64, i64 } { ptr @.str.5617, i64 3, i64 0 }, ptr %a418 %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) %t420 = icmp ne i32 %t419, 0 - br i1 %t420, label %then8711, label %endif8713 -then8711: + br i1 %t420, label %then8715, label %endif8717 +then8715: store { ptr, i64, i64 } { ptr @.str.5618, i64 0, i64 0 }, ptr %a421 %t422 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t423 = load i1, ptr %t422 - br i1 %t423, label %then8714, label %else8715 -then8714: + br i1 %t423, label %then8718, label %else8719 +then8718: %t424 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t425 = getelementptr inbounds %S.gen.Place, ptr %t424, i32 0, i32 0 %t426 = load { ptr, i64, i64 }, ptr %t425 @@ -88817,8 +88843,8 @@ then8714: store { ptr, i64, i64 } %t429, ptr %a421 store { ptr, i64, i64 } %t430, ptr %a431 call void @finch_str_drop(ptr %a431) - br label %endif8716 -else8715: + br label %endif8720 +else8719: %t432 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 %t433 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t434 = load { ptr, i64, i64 }, ptr %t433 @@ -88826,31 +88852,31 @@ else8715: %t436 = load i64, ptr %t432 %t437 = load ptr, ptr %a238 store i64 0, ptr %a438 - br label %find.cond8717 -find.cond8717: + br label %find.cond8721 +find.cond8721: %t439 = load i64, ptr %a438 %t440 = icmp slt i64 %t439, %t436 - br i1 %t440, label %find.body8718, label %find.end8721 -find.body8718: + br i1 %t440, label %find.body8722, label %find.end8725 +find.body8722: %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t437, i64 %t439 %t442 = load { ptr, i64, i64 }, ptr %t441 store { ptr, i64, i64 } %t442, ptr %a443 store { ptr, i64, i64 } %t434, ptr %a444 %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) %t446 = icmp ne i32 %t445, 0 - br i1 %t446, label %find.hit8719, label %find.next8720 -find.hit8719: + br i1 %t446, label %find.hit8723, label %find.next8724 +find.hit8723: store i64 %t439, ptr %a435 - br label %find.end8721 -find.next8720: + br label %find.end8725 +find.next8724: %t447 = add i64 %t439, 1 store i64 %t447, ptr %a438 - br label %find.cond8717 -find.end8721: + br label %find.cond8721 +find.end8725: %t448 = load i64, ptr %a435 %t449 = icmp sge i64 %t448, 0 - br i1 %t449, label %then8722, label %endif8724 -then8722: + br i1 %t449, label %then8726, label %endif8728 +then8726: %t450 = load ptr, ptr %a1 %t451 = load %S.ast.Node, ptr %a2 %t452 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88862,8 +88888,8 @@ then8722: call void @finch.gen.fail(ptr %t450, %S.ast.Node %t451, { ptr, i64, i64 } %t457) store { ptr, i64, i64 } %t457, ptr %a458 call void @finch_str_drop(ptr %a458) - br label %endif8724 -endif8724: + br label %endif8728 +endif8728: %t459 = load ptr, ptr %a1 %t460 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t461 = load %S.gen.Val, ptr %t460 @@ -88875,16 +88901,16 @@ endif8724: %t465 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t466 = getelementptr inbounds %S.gen.Val, ptr %t465, i32 0, i32 2 %t467 = load i1, ptr %t466 - br i1 %t467, label %then8725, label %endif8727 -then8725: + br i1 %t467, label %then8729, label %endif8731 +then8729: %t468 = load ptr, ptr %a1 %t469 = load { ptr, i64, i64 }, ptr %a421 %t470 = load %S.ast.Type, ptr %a273 call void @finch.gen.holdAddr(ptr %t468, { ptr, i64, i64 } %t469, %S.ast.Type %t470) - br label %endif8727 -endif8727: - br label %endif8716 -endif8716: + br label %endif8731 +endif8731: + br label %endif8720 +endif8720: %t471 = load ptr, ptr %a1 %t472 = load %S.ast.Node, ptr %a2 %t473 = call { ptr, i64, i64 } @finch.docs.mapMethods() @@ -88900,26 +88926,26 @@ endif8716: %t481 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t482 = load i1, ptr %t481 %t483 = xor i1 %t482, true - br label %logic.from8728 -logic.from8728: - br i1 %t483, label %logic.rhs8729, label %logic.end8730 -logic.rhs8729: + br label %logic.from8732 +logic.from8732: + br i1 %t483, label %logic.rhs8733, label %logic.end8734 +logic.rhs8733: %t484 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t485 = getelementptr inbounds %S.gen.Val, ptr %t484, i32 0, i32 2 %t486 = load i1, ptr %t485 - br label %logic.rend8731 -logic.rend8731: - br label %logic.end8730 -logic.end8730: - %t487 = phi i1 [ false, %logic.from8728 ], [ %t486, %logic.rend8731 ] - br i1 %t487, label %then8732, label %endif8734 -then8732: + br label %logic.rend8735 +logic.rend8735: + br label %logic.end8734 +logic.end8734: + %t487 = phi i1 [ false, %logic.from8732 ], [ %t486, %logic.rend8735 ] + br i1 %t487, label %then8736, label %endif8738 +then8736: %t488 = load ptr, ptr %a1 %t489 = load { ptr, i64, i64 }, ptr %a421 %t490 = load %S.ast.Type, ptr %a273 call void @finch.gen.dropAt(ptr %t488, { ptr, i64, i64 } %t489, %S.ast.Type %t490) - br label %endif8734 -endif8734: + br label %endif8738 +endif8738: %t491 = load ptr, ptr %a1 %t492 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t491, i64 %t492) @@ -88930,7 +88956,7 @@ endif8734: call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t493 -endif8713: +endif8717: %t494 = load ptr, ptr %a1 %t495 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t494, i64 %t495) @@ -88947,32 +88973,32 @@ endif8713: store { ptr, i64, i64 } { ptr @.str.5621, i64 3, i64 0 }, ptr %a506 %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) %t508 = icmp ne i32 %t507, 0 - br label %logic.from8735 -logic.from8735: - br i1 %t508, label %logic.rhs8736, label %logic.end8737 -logic.rhs8736: + br label %logic.from8739 +logic.from8739: + br i1 %t508, label %logic.rhs8740, label %logic.end8741 +logic.rhs8740: %t509 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i32 0, i32 1 %t511 = load i64, ptr %t510 %t512 = icmp sgt i64 %t511, 0 - br label %logic.rend8738 -logic.rend8738: - br label %logic.end8737 -logic.end8737: - %t513 = phi i1 [ false, %logic.from8735 ], [ %t512, %logic.rend8738 ] - br label %logic.from8739 -logic.from8739: - br i1 %t513, label %logic.rhs8740, label %logic.end8741 -logic.rhs8740: + br label %logic.rend8742 +logic.rend8742: + br label %logic.end8741 +logic.end8741: + %t513 = phi i1 [ false, %logic.from8739 ], [ %t512, %logic.rend8742 ] + br label %logic.from8743 +logic.from8743: + br i1 %t513, label %logic.rhs8744, label %logic.end8745 +logic.rhs8744: %t514 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 %t515 = load { ptr, i64, i64 }, ptr %t514 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 0, %t516 - br i1 %t517, label %range8742, label %inrange8743 -range8742: + br i1 %t517, label %range8746, label %inrange8747 +range8746: call void @finch_panic_index(ptr @.str.5622, i64 5333, i64 0, i64 %t516) unreachable -inrange8743: +inrange8747: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 %t520 = getelementptr inbounds %S.ast.Type, ptr %t519, i32 0, i32 0 @@ -88981,13 +89007,13 @@ inrange8743: store { ptr, i64, i64 } { ptr @.str.5623, i64 6, i64 0 }, ptr %a523 %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) %t525 = icmp ne i32 %t524, 0 - br label %logic.rend8744 -logic.rend8744: - br label %logic.end8741 -logic.end8741: - %t526 = phi i1 [ false, %logic.from8739 ], [ %t525, %logic.rend8744 ] - br i1 %t526, label %then8745, label %else8746 -then8745: + br label %logic.rend8748 +logic.rend8748: + br label %logic.end8745 +logic.end8745: + %t526 = phi i1 [ false, %logic.from8743 ], [ %t525, %logic.rend8748 ] + br i1 %t526, label %then8749, label %else8750 +then8749: %t527 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t528 = getelementptr inbounds %S.gen.Val, ptr %t527, i32 0, i32 0 %t529 = load { ptr, i64, i64 }, ptr %t528 @@ -88997,8 +89023,8 @@ then8745: store { ptr, i64, i64 } %t532, ptr %a533 %t534 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t535 = load i1, ptr %t534 - br i1 %t535, label %then8748, label %endif8750 -then8748: + br i1 %t535, label %then8752, label %endif8754 +then8752: %t536 = load ptr, ptr %a1 %t537 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t538 = getelementptr inbounds %S.gen.Place, ptr %t537, i32 0, i32 0 @@ -89008,8 +89034,8 @@ then8748: store { ptr, i64, i64 } %t540, ptr %a533 store { ptr, i64, i64 } %t541, ptr %a542 call void @finch_str_drop(ptr %a542) - br label %endif8750 -endif8750: + br label %endif8754 +endif8754: %t543 = load ptr, ptr %a1 %t544 = load ptr, ptr %a1 %t545 = load { ptr, i64, i64 }, ptr %a533 @@ -89048,11 +89074,11 @@ endif8750: %t572 = load { ptr, i64, i64 }, ptr %t571 %t573 = extractvalue { ptr, i64, i64 } %t572, 1 %t574 = icmp uge i64 0, %t573 - br i1 %t574, label %range8751, label %inrange8752 -range8751: + br i1 %t574, label %range8755, label %inrange8756 +range8755: call void @finch_panic_index(ptr @.str.5629, i64 5339, i64 0, i64 %t573) unreachable -inrange8752: +inrange8756: %t575 = extractvalue { ptr, i64, i64 } %t572, 0 %t576 = getelementptr inbounds %S.ast.Type, ptr %t575, i64 0 %t577 = load %S.ast.Type, ptr %t576 @@ -89072,35 +89098,35 @@ inrange8752: store { ptr, i64, i64 } %t587, ptr %a588 call void @finch_str_drop(ptr %a588) call void @finch_str_drop(ptr %a533) - br label %endif8747 -else8746: + br label %endif8751 +else8750: %t589 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t590 = load { ptr, i64, i64 }, ptr %t589 store { ptr, i64, i64 } %t590, ptr %a591 store { ptr, i64, i64 } { ptr @.str.5630, i64 6, i64 0 }, ptr %a592 %t593 = call i32 @finch_str_eq(ptr %a591, ptr %a592) %t594 = icmp ne i32 %t593, 0 - br label %logic.from8753 -logic.from8753: - br i1 %t594, label %logic.end8755, label %logic.rhs8754 -logic.rhs8754: + br label %logic.from8757 +logic.from8757: + br i1 %t594, label %logic.end8759, label %logic.rhs8758 +logic.rhs8758: %t595 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t596 = load { ptr, i64, i64 }, ptr %t595 store { ptr, i64, i64 } %t596, ptr %a597 store { ptr, i64, i64 } { ptr @.str.5631, i64 4, i64 0 }, ptr %a598 %t599 = call i32 @finch_str_eq(ptr %a597, ptr %a598) %t600 = icmp ne i32 %t599, 0 - br label %logic.rend8756 -logic.rend8756: - br label %logic.end8755 -logic.end8755: - %t601 = phi i1 [ true, %logic.from8753 ], [ %t600, %logic.rend8756 ] - br i1 %t601, label %then8757, label %endif8759 -then8757: + br label %logic.rend8760 +logic.rend8760: + br label %logic.end8759 +logic.end8759: + %t601 = phi i1 [ true, %logic.from8757 ], [ %t600, %logic.rend8760 ] + br i1 %t601, label %then8761, label %endif8763 +then8761: %t602 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t603 = load i1, ptr %t602 - br i1 %t603, label %then8760, label %else8761 -then8760: + br i1 %t603, label %then8764, label %else8765 +then8764: %t604 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t605 = getelementptr inbounds %S.gen.Place, ptr %t604, i32 0, i32 0 %t606 = load { ptr, i64, i64 }, ptr %t605 @@ -89111,8 +89137,8 @@ then8760: store { ptr, i64, i64 } %t609, ptr %a501 store { ptr, i64, i64 } %t610, ptr %a611 call void @finch_str_drop(ptr %a611) - br label %endif8762 -else8761: + br label %endif8766 +else8765: %t612 = load ptr, ptr %a1 %t613 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t614 = load %S.gen.Val, ptr %t613 @@ -89122,35 +89148,35 @@ else8761: store { ptr, i64, i64 } %t616, ptr %a617 call void @finch_str_drop(ptr %a617) store i1 true, ptr %a502 - br label %endif8762 -endif8762: - br label %endif8759 -endif8759: - br label %endif8747 -endif8747: + br label %endif8766 +endif8766: + br label %endif8763 +endif8763: + br label %endif8751 +endif8751: %t618 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t619 = load { ptr, i64, i64 }, ptr %t618 store { ptr, i64, i64 } %t619, ptr %a620 store { ptr, i64, i64 } { ptr @.str.5632, i64 6, i64 0 }, ptr %a621 %t622 = call i32 @finch_str_eq(ptr %a620, ptr %a621) %t623 = icmp ne i32 %t622, 0 - br label %logic.from8763 -logic.from8763: - br i1 %t623, label %logic.end8765, label %logic.rhs8764 -logic.rhs8764: + br label %logic.from8767 +logic.from8767: + br i1 %t623, label %logic.end8769, label %logic.rhs8768 +logic.rhs8768: %t624 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t625 = load { ptr, i64, i64 }, ptr %t624 store { ptr, i64, i64 } %t625, ptr %a626 store { ptr, i64, i64 } { ptr @.str.5633, i64 4, i64 0 }, ptr %a627 %t628 = call i32 @finch_str_eq(ptr %a626, ptr %a627) %t629 = icmp ne i32 %t628, 0 - br label %logic.rend8766 -logic.rend8766: - br label %logic.end8765 -logic.end8765: - %t630 = phi i1 [ true, %logic.from8763 ], [ %t629, %logic.rend8766 ] - br i1 %t630, label %then8767, label %endif8769 -then8767: + br label %logic.rend8770 +logic.rend8770: + br label %logic.end8769 +logic.end8769: + %t630 = phi i1 [ true, %logic.from8767 ], [ %t629, %logic.rend8770 ] + br i1 %t630, label %then8771, label %endif8773 +then8771: %t631 = load ptr, ptr %a1 %t632 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t633 = load { ptr, i64, i64 }, ptr %t632 @@ -89162,23 +89188,23 @@ then8767: store i64 %t638, ptr %a639 %t640 = load i64, ptr %a639 %t641 = icmp slt i64 %t640, 0 - br label %logic.from8770 -logic.from8770: - br i1 %t641, label %logic.rhs8771, label %logic.end8772 -logic.rhs8771: + br label %logic.from8774 +logic.from8774: + br i1 %t641, label %logic.rhs8775, label %logic.end8776 +logic.rhs8775: %t642 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t643 = load { ptr, i64, i64 }, ptr %t642 store { ptr, i64, i64 } %t643, ptr %a644 store { ptr, i64, i64 } { ptr @.str.5634, i64 6, i64 0 }, ptr %a645 %t646 = call i32 @finch_str_eq(ptr %a644, ptr %a645) %t647 = icmp ne i32 %t646, 0 - br label %logic.rend8773 -logic.rend8773: - br label %logic.end8772 -logic.end8772: - %t648 = phi i1 [ false, %logic.from8770 ], [ %t647, %logic.rend8773 ] - br i1 %t648, label %then8774, label %endif8776 -then8774: + br label %logic.rend8777 +logic.rend8777: + br label %logic.end8776 +logic.end8776: + %t648 = phi i1 [ false, %logic.from8774 ], [ %t647, %logic.rend8777 ] + br i1 %t648, label %then8778, label %endif8780 +then8778: %t649 = load ptr, ptr %a1 %t650 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t651 = load { ptr, i64, i64 }, ptr %t650 @@ -89188,29 +89214,29 @@ then8774: store i64 %t654, ptr %a655 %t656 = load ptr, ptr %a1 %t657 = icmp eq ptr %t656, null - br i1 %t657, label %panic8777, label %ok8778 -panic8777: + br i1 %t657, label %panic8781, label %ok8782 +panic8781: call void @finch_panic(ptr @.str.5635, i64 5353, ptr @.str.5636) unreachable -ok8778: +ok8782: %t658 = getelementptr inbounds %S.gen.Gen, ptr %t656, i32 0, i32 16 %t659 = load i64, ptr %a655 %t660 = load { ptr, i64, i64 }, ptr %t658 %t661 = extractvalue { ptr, i64, i64 } %t660, 1 %t662 = icmp uge i64 %t659, %t661 - br i1 %t662, label %range8779, label %inrange8780 -range8779: + br i1 %t662, label %range8783, label %inrange8784 +range8783: call void @finch_panic_index(ptr @.str.5637, i64 5353, i64 %t659, i64 %t661) unreachable -inrange8780: +inrange8784: %t663 = extractvalue { ptr, i64, i64 } %t660, 0 %t664 = getelementptr inbounds %S.gen.StructDef, ptr %t663, i64 %t659 %t665 = getelementptr inbounds %S.gen.StructDef, ptr %t664, i32 0, i32 5 %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 %t667 = load i64, ptr %t666 %t668 = icmp sgt i64 %t667, 0 - br i1 %t668, label %then8781, label %endif8783 -then8781: + br i1 %t668, label %then8785, label %endif8787 +then8785: %t669 = load ptr, ptr %a1 %t670 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t671 = load { ptr, i64, i64 }, ptr %t670 @@ -89218,21 +89244,21 @@ then8781: %t673 = load { ptr, i64, i64 }, ptr %t672 %t674 = load ptr, ptr %a1 %t675 = icmp eq ptr %t674, null - br i1 %t675, label %panic8784, label %ok8785 -panic8784: + br i1 %t675, label %panic8788, label %ok8789 +panic8788: call void @finch_panic(ptr @.str.5638, i64 5354, ptr @.str.5639) unreachable -ok8785: +ok8789: %t676 = getelementptr inbounds %S.gen.Gen, ptr %t674, i32 0, i32 16 %t677 = load i64, ptr %a655 %t678 = load { ptr, i64, i64 }, ptr %t676 %t679 = extractvalue { ptr, i64, i64 } %t678, 1 %t680 = icmp uge i64 %t677, %t679 - br i1 %t680, label %range8786, label %inrange8787 -range8786: + br i1 %t680, label %range8790, label %inrange8791 +range8790: call void @finch_panic_index(ptr @.str.5640, i64 5354, i64 %t677, i64 %t679) unreachable -inrange8787: +inrange8791: %t681 = extractvalue { ptr, i64, i64 } %t678, 0 %t682 = getelementptr inbounds %S.gen.StructDef, ptr %t681, i64 %t677 %t683 = getelementptr inbounds %S.gen.StructDef, ptr %t682, i32 0, i32 5 @@ -89241,27 +89267,27 @@ inrange8787: store i64 %t685, ptr %a686 %t687 = load i64, ptr %a686 %t688 = icmp sge i64 %t687, 0 - br i1 %t688, label %then8788, label %endif8790 -then8788: + br i1 %t688, label %then8792, label %endif8794 +then8792: %t689 = load ptr, ptr %a1 %t690 = load i64, ptr %a686 %t691 = load ptr, ptr %a1 %t692 = icmp eq ptr %t691, null - br i1 %t692, label %panic8791, label %ok8792 -panic8791: + br i1 %t692, label %panic8795, label %ok8796 +panic8795: call void @finch_panic(ptr @.str.5641, i64 5356, ptr @.str.5642) unreachable -ok8792: +ok8796: %t693 = getelementptr inbounds %S.gen.Gen, ptr %t691, i32 0, i32 16 %t694 = load i64, ptr %a655 %t695 = load { ptr, i64, i64 }, ptr %t693 %t696 = extractvalue { ptr, i64, i64 } %t695, 1 %t697 = icmp uge i64 %t694, %t696 - br i1 %t697, label %range8793, label %inrange8794 -range8793: + br i1 %t697, label %range8797, label %inrange8798 +range8797: call void @finch_panic_index(ptr @.str.5643, i64 5356, i64 %t694, i64 %t696) unreachable -inrange8794: +inrange8798: %t698 = extractvalue { ptr, i64, i64 } %t695, 0 %t699 = getelementptr inbounds %S.gen.StructDef, ptr %t698, i64 %t694 %t700 = getelementptr inbounds %S.gen.StructDef, ptr %t699, i32 0, i32 7 @@ -89270,34 +89296,34 @@ inrange8794: %t703 = load %S.ast.Node, ptr %a2 %t704 = call i64 @finch.gen.instFn(ptr %t689, i64 %t690, { ptr, i64, i64 } %t701, %S.ast.Type %t702, %S.ast.Node %t703) store i64 %t704, ptr %a639 - br label %endif8790 -endif8790: - br label %endif8783 -endif8783: - br label %endif8776 -endif8776: + br label %endif8794 +endif8794: + br label %endif8787 +endif8787: + br label %endif8780 +endif8780: %t705 = load i64, ptr %a639 %t706 = icmp slt i64 %t705, 0 - br i1 %t706, label %then8795, label %endif8797 -then8795: + br i1 %t706, label %then8799, label %endif8801 +then8799: store { ptr, i64, i64 } zeroinitializer, ptr %a707 %t708 = load ptr, ptr %a1 %t709 = icmp eq ptr %t708, null - br i1 %t709, label %panic8798, label %ok8799 -panic8798: + br i1 %t709, label %panic8802, label %ok8803 +panic8802: call void @finch_panic(ptr @.str.5644, i64 5362, ptr @.str.5645) unreachable -ok8799: +ok8803: %t710 = getelementptr inbounds %S.gen.Gen, ptr %t708, i32 0, i32 15 store i64 0, ptr %a711 - br label %each.cond8800 -each.cond8800: + br label %each.cond8804 +each.cond8804: %t712 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i32 0, i32 1 %t713 = load i64, ptr %t712 %t714 = load i64, ptr %a711 %t715 = icmp slt i64 %t714, %t713 - br i1 %t715, label %each.body8801, label %each.end8803 -each.body8801: + br i1 %t715, label %each.body8805, label %each.end8807 +each.body8805: %t716 = load ptr, ptr %t710 %t717 = getelementptr inbounds %S.gen.FnSig, ptr %t716, i64 %t714 %t718 = load %S.gen.FnSig, ptr %t717 @@ -89310,10 +89336,10 @@ each.body8801: store { ptr, i64, i64 } %t723, ptr %a725 %t726 = call i32 @finch_str_eq(ptr %a724, ptr %a725) %t727 = icmp ne i32 %t726, 0 - br label %logic.from8804 -logic.from8804: - br i1 %t727, label %logic.rhs8805, label %logic.end8806 -logic.rhs8805: + br label %logic.from8808 +logic.from8808: + br i1 %t727, label %logic.rhs8809, label %logic.end8810 +logic.rhs8809: %t728 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 3 %t729 = load { ptr, i64, i64 }, ptr %t728 %t730 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 @@ -89322,13 +89348,13 @@ logic.rhs8805: store { ptr, i64, i64 } %t731, ptr %a733 %t734 = call i32 @finch_str_eq(ptr %a732, ptr %a733) %t735 = icmp ne i32 %t734, 0 - br label %logic.rend8807 -logic.rend8807: - br label %logic.end8806 -logic.end8806: - %t736 = phi i1 [ false, %logic.from8804 ], [ %t735, %logic.rend8807 ] - br i1 %t736, label %then8808, label %endif8810 -then8808: + br label %logic.rend8811 +logic.rend8811: + br label %logic.end8810 +logic.end8810: + %t736 = phi i1 [ false, %logic.from8808 ], [ %t735, %logic.rend8811 ] + br i1 %t736, label %then8812, label %endif8814 +then8812: %t737 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 %t738 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 1 %t739 = load { ptr, i64, i64 }, ptr %t738 @@ -89342,20 +89368,20 @@ then8808: %t746 = getelementptr inbounds { ptr, i64, i64 }, ptr %t745, i64 %t743 store { ptr, i64, i64 } %t742, ptr %t746 store i64 %t744, ptr %t737 - br label %endif8810 -endif8810: - br label %each.step8802 -each.step8802: + br label %endif8814 +endif8814: + br label %each.step8806 +each.step8806: %t747 = load i64, ptr %a711 %t748 = add i64 %t747, 1 store i64 %t748, ptr %a711 - br label %each.cond8800 -each.end8803: + br label %each.cond8804 +each.end8807: %t749 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 %t750 = load i64, ptr %t749 %t751 = icmp eq i64 %t750, 0 - br i1 %t751, label %then8811, label %endif8813 -then8811: + br i1 %t751, label %then8815, label %endif8817 +then8815: %t752 = load ptr, ptr %a1 %t753 = load %S.ast.Node, ptr %a2 %t754 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 @@ -89417,8 +89443,8 @@ then8811: call void @finch.gen.fail(ptr %t752, %S.ast.Node %t753, { ptr, i64, i64 } %t801) store { ptr, i64, i64 } %t801, ptr %a802 call void @finch_str_drop(ptr %a802) - br label %endif8813 -endif8813: + br label %endif8817 +endif8817: %t803 = load ptr, ptr %a1 %t804 = load %S.ast.Node, ptr %a2 %t805 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 @@ -89485,66 +89511,66 @@ endif8813: store { ptr, i64, i64 } %t855, ptr %a856 call void @finch_str_drop(ptr %a856) call void @finch.drop.arr_str(ptr %a707) - br label %endif8797 -endif8797: + br label %endif8801 +endif8801: %t857 = load ptr, ptr %a1 %t858 = icmp eq ptr %t857, null - br i1 %t858, label %panic8814, label %ok8815 -panic8814: + br i1 %t858, label %panic8818, label %ok8819 +panic8818: call void @finch_panic(ptr @.str.5657, i64 5373, ptr @.str.5658) unreachable -ok8815: +ok8819: %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 15 %t860 = load i64, ptr %a639 %t861 = load { ptr, i64, i64 }, ptr %t859 %t862 = extractvalue { ptr, i64, i64 } %t861, 1 %t863 = icmp uge i64 %t860, %t862 - br i1 %t863, label %range8816, label %inrange8817 -range8816: + br i1 %t863, label %range8820, label %inrange8821 +range8820: call void @finch_panic_index(ptr @.str.5659, i64 5373, i64 %t860, i64 %t862) unreachable -inrange8817: +inrange8821: %t864 = extractvalue { ptr, i64, i64 } %t861, 0 %t865 = getelementptr inbounds %S.gen.FnSig, ptr %t864, i64 %t860 %t866 = getelementptr inbounds %S.gen.FnSig, ptr %t865, i32 0, i32 10 %t867 = load i1, ptr %t866 - br label %logic.from8818 -logic.from8818: - br i1 %t867, label %logic.rhs8819, label %logic.end8820 -logic.rhs8819: + br label %logic.from8822 +logic.from8822: + br i1 %t867, label %logic.rhs8823, label %logic.end8824 +logic.rhs8823: %t868 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t869 = load { ptr, i64, i64 }, ptr %t868 store { ptr, i64, i64 } %t869, ptr %a870 store { ptr, i64, i64 } { ptr @.str.5660, i64 6, i64 0 }, ptr %a871 %t872 = call i32 @finch_str_eq(ptr %a870, ptr %a871) %t873 = icmp ne i32 %t872, 0 - br label %logic.from8821 -logic.from8821: - br i1 %t873, label %logic.end8823, label %logic.rhs8822 -logic.rhs8822: + br label %logic.from8825 +logic.from8825: + br i1 %t873, label %logic.end8827, label %logic.rhs8826 +logic.rhs8826: %t874 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t875 = load { ptr, i64, i64 }, ptr %t874 store { ptr, i64, i64 } %t875, ptr %a876 store { ptr, i64, i64 } { ptr @.str.5661, i64 4, i64 0 }, ptr %a877 %t878 = call i32 @finch_str_eq(ptr %a876, ptr %a877) %t879 = icmp ne i32 %t878, 0 - br label %logic.rend8824 -logic.rend8824: - br label %logic.end8823 -logic.end8823: - %t880 = phi i1 [ true, %logic.from8821 ], [ %t879, %logic.rend8824 ] - br label %logic.rend8825 -logic.rend8825: - br label %logic.end8820 -logic.end8820: - %t881 = phi i1 [ false, %logic.from8818 ], [ %t880, %logic.rend8825 ] - br i1 %t881, label %then8826, label %endif8828 -then8826: + br label %logic.rend8828 +logic.rend8828: + br label %logic.end8827 +logic.end8827: + %t880 = phi i1 [ true, %logic.from8825 ], [ %t879, %logic.rend8828 ] + br label %logic.rend8829 +logic.rend8829: + br label %logic.end8824 +logic.end8824: + %t881 = phi i1 [ false, %logic.from8822 ], [ %t880, %logic.rend8829 ] + br i1 %t881, label %then8830, label %endif8832 +then8830: %t882 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t883 = load i1, ptr %t882 %t884 = xor i1 %t883, true - br i1 %t884, label %then8829, label %endif8831 -then8829: + br i1 %t884, label %then8833, label %endif8835 +then8833: %t885 = load ptr, ptr %a1 %t886 = load %S.ast.Node, ptr %a2 %t887 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -89572,39 +89598,39 @@ then8829: call void @finch.gen.fail(ptr %t885, %S.ast.Node %t886, { ptr, i64, i64 } %t905) store { ptr, i64, i64 } %t905, ptr %a906 call void @finch_str_drop(ptr %a906) - br label %endif8831 -endif8831: + br label %endif8835 +endif8835: %t907 = load %S.ast.Node, ptr %a13 %t908 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t907) store { ptr, i64, i64 } %t908, ptr %a909 %t910 = getelementptr inbounds { ptr, i64, i64 }, ptr %a909, i32 0, i32 1 %t911 = load i64, ptr %t910 %t912 = icmp sgt i64 %t911, 0 - br i1 %t912, label %then8832, label %endif8834 -then8832: + br i1 %t912, label %then8836, label %endif8838 +then8836: %t913 = load ptr, ptr %a1 %t914 = load { ptr, i64, i64 }, ptr %a909 %t915 = call i64 @finch.gen.lookup(ptr %t913, { ptr, i64, i64 } %t914) store i64 %t915, ptr %a916 %t917 = load i64, ptr %a916 %t918 = icmp sge i64 %t917, 0 - br label %logic.from8835 -logic.from8835: - br i1 %t918, label %logic.rhs8836, label %logic.end8837 -logic.rhs8836: + br label %logic.from8839 +logic.from8839: + br i1 %t918, label %logic.rhs8840, label %logic.end8841 +logic.rhs8840: %t919 = load ptr, ptr %a1 %t920 = load i64, ptr %a916 %t921 = call %S.gen.Var @finch.gen.varAt(ptr %t919, i64 %t920) %t922 = extractvalue %S.gen.Var %t921, 3 store %S.gen.Var %t921, ptr %a923 call void @finch.drop.S_gen_Var(ptr %a923) - br label %logic.rend8838 -logic.rend8838: - br label %logic.end8837 -logic.end8837: - %t924 = phi i1 [ false, %logic.from8835 ], [ %t922, %logic.rend8838 ] - br i1 %t924, label %then8839, label %endif8841 -then8839: + br label %logic.rend8842 +logic.rend8842: + br label %logic.end8841 +logic.end8841: + %t924 = phi i1 [ false, %logic.from8839 ], [ %t922, %logic.rend8842 ] + br i1 %t924, label %then8843, label %endif8845 +then8843: %t925 = load ptr, ptr %a1 %t926 = load %S.ast.Node, ptr %a2 %t927 = load { ptr, i64, i64 }, ptr %a909 @@ -89621,34 +89647,34 @@ then8839: call void @finch.gen.fail(ptr %t925, %S.ast.Node %t926, { ptr, i64, i64 } %t936) store { ptr, i64, i64 } %t936, ptr %a937 call void @finch_str_drop(ptr %a937) - br label %endif8841 -endif8841: - br label %endif8834 -endif8834: + br label %endif8845 +endif8845: + br label %endif8838 +endif8838: call void @finch_str_drop(ptr %a909) - br label %endif8828 -endif8828: + br label %endif8832 +endif8832: %t938 = load i1, ptr %a502 - br label %logic.from8842 -logic.from8842: - br i1 %t938, label %logic.rhs8843, label %logic.end8844 -logic.rhs8843: + br label %logic.from8846 +logic.from8846: + br i1 %t938, label %logic.rhs8847, label %logic.end8848 +logic.rhs8847: %t939 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t940 = getelementptr inbounds %S.gen.Val, ptr %t939, i32 0, i32 2 %t941 = load i1, ptr %t940 - br label %logic.rend8845 -logic.rend8845: - br label %logic.end8844 -logic.end8844: - %t942 = phi i1 [ false, %logic.from8842 ], [ %t941, %logic.rend8845 ] - br i1 %t942, label %then8846, label %endif8848 -then8846: + br label %logic.rend8849 +logic.rend8849: + br label %logic.end8848 +logic.end8848: + %t942 = phi i1 [ false, %logic.from8846 ], [ %t941, %logic.rend8849 ] + br i1 %t942, label %then8850, label %endif8852 +then8850: %t943 = load ptr, ptr %a1 %t944 = load { ptr, i64, i64 }, ptr %a501 %t945 = load %S.ast.Type, ptr %a500 call void @finch.gen.holdAddr(ptr %t943, { ptr, i64, i64 } %t944, %S.ast.Type %t945) - br label %endif8848 -endif8848: + br label %endif8852 +endif8852: %t946 = load ptr, ptr %a1 %t947 = load i64, ptr %a639 %t948 = load %S.ast.Node, ptr %a2 @@ -89678,38 +89704,38 @@ endif8848: call void @finch_str_drop(ptr %a968) store %S.gen.Val %t966, ptr %a969 %t970 = load i1, ptr %a502 - br label %logic.from8849 -logic.from8849: - br i1 %t970, label %logic.rhs8850, label %logic.end8851 -logic.rhs8850: + br label %logic.from8853 +logic.from8853: + br i1 %t970, label %logic.rhs8854, label %logic.end8855 +logic.rhs8854: %t971 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t972 = getelementptr inbounds %S.gen.Val, ptr %t971, i32 0, i32 2 %t973 = load i1, ptr %t972 - br label %logic.rend8852 -logic.rend8852: - br label %logic.end8851 -logic.end8851: - %t974 = phi i1 [ false, %logic.from8849 ], [ %t973, %logic.rend8852 ] - br label %logic.from8853 -logic.from8853: - br i1 %t974, label %logic.rhs8854, label %logic.end8855 -logic.rhs8854: - %t975 = load ptr, ptr %a1 - %t976 = load %S.ast.Type, ptr %a500 - %t977 = call i1 @finch.gen.owning(ptr %t975, %S.ast.Type %t976) br label %logic.rend8856 logic.rend8856: br label %logic.end8855 logic.end8855: - %t978 = phi i1 [ false, %logic.from8853 ], [ %t977, %logic.rend8856 ] - br i1 %t978, label %then8857, label %endif8859 -then8857: + %t974 = phi i1 [ false, %logic.from8853 ], [ %t973, %logic.rend8856 ] + br label %logic.from8857 +logic.from8857: + br i1 %t974, label %logic.rhs8858, label %logic.end8859 +logic.rhs8858: + %t975 = load ptr, ptr %a1 + %t976 = load %S.ast.Type, ptr %a500 + %t977 = call i1 @finch.gen.owning(ptr %t975, %S.ast.Type %t976) + br label %logic.rend8860 +logic.rend8860: + br label %logic.end8859 +logic.end8859: + %t978 = phi i1 [ false, %logic.from8857 ], [ %t977, %logic.rend8860 ] + br i1 %t978, label %then8861, label %endif8863 +then8861: %t979 = load ptr, ptr %a1 %t980 = load { ptr, i64, i64 }, ptr %a501 %t981 = load %S.ast.Type, ptr %a500 call void @finch.gen.dropAt(ptr %t979, { ptr, i64, i64 } %t980, %S.ast.Type %t981) - br label %endif8859 -endif8859: + br label %endif8863 +endif8863: %t982 = load ptr, ptr %a1 %t983 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t982, i64 %t983) @@ -89721,7 +89747,7 @@ endif8859: call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t984 -endif8769: +endif8773: %t985 = load ptr, ptr %a1 %t986 = load %S.ast.Node, ptr %a2 %t987 = load %S.ast.Type, ptr %a273 @@ -90497,11 +90523,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range8860, label %inrange8861 -range8860: + br i1 %t8, label %range8864, label %inrange8865 +range8864: call void @finch_panic_index(ptr @.str.5668, i64 5404, i64 0, i64 %t7) unreachable -inrange8861: +inrange8865: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 %t11 = load %S.ast.Type, ptr %t10 @@ -90540,8 +90566,8 @@ inrange8861: store { ptr, i64, i64 } { ptr @.str.5671, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %then8862, label %endif8864 -then8862: + br i1 %t44, label %then8866, label %endif8868 +then8866: %t45 = load ptr, ptr %a1 %t46 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t45, %S.ast.Node %t46, i64 1) @@ -90552,11 +90578,11 @@ then8862: %t51 = load { ptr, i64, i64 }, ptr %t50 %t52 = extractvalue { ptr, i64, i64 } %t51, 1 %t53 = icmp uge i64 1, %t52 - br i1 %t53, label %range8865, label %inrange8866 -range8865: + br i1 %t53, label %range8869, label %inrange8870 +range8869: call void @finch_panic_index(ptr @.str.5672, i64 5410, i64 1, i64 %t52) unreachable -inrange8866: +inrange8870: %t54 = extractvalue { ptr, i64, i64 } %t51, 0 %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 1 %t56 = load %S.ast.Node, ptr %t55 @@ -90567,11 +90593,11 @@ inrange8866: %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 1, %t62 - br i1 %t63, label %range8867, label %inrange8868 -range8867: + br i1 %t63, label %range8871, label %inrange8872 +range8871: call void @finch_panic_index(ptr @.str.5673, i64 5410, i64 1, i64 %t62) unreachable -inrange8868: +inrange8872: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 1 %t66 = load %S.ast.Node, ptr %t65 @@ -90707,14 +90733,14 @@ inrange8868: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t169 -endif8864: +endif8868: %t170 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t170, ptr %a171 store { ptr, i64, i64 } { ptr @.str.5688, i64 3, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 - br i1 %t174, label %then8869, label %endif8871 -then8869: + br i1 %t174, label %then8873, label %endif8875 +then8873: %t175 = load ptr, ptr %a1 %t176 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t175, %S.ast.Node %t176, i64 0) @@ -90830,14 +90856,14 @@ then8869: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t266 -endif8871: +endif8875: %t267 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t267, ptr %a268 store { ptr, i64, i64 } { ptr @.str.5700, i64 5, i64 0 }, ptr %a269 %t270 = call i32 @finch_str_eq(ptr %a268, ptr %a269) %t271 = icmp ne i32 %t270, 0 - br i1 %t271, label %then8872, label %endif8874 -then8872: + br i1 %t271, label %then8876, label %endif8878 +then8876: %t272 = load ptr, ptr %a1 %t273 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t272, %S.ast.Node %t273, i64 0) @@ -90855,28 +90881,28 @@ then8872: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t280 -endif8874: +endif8878: %t281 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t281, ptr %a282 store { ptr, i64, i64 } { ptr @.str.5705, i64 4, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 - br label %logic.from8875 -logic.from8875: - br i1 %t285, label %logic.end8877, label %logic.rhs8876 -logic.rhs8876: + br label %logic.from8879 +logic.from8879: + br i1 %t285, label %logic.end8881, label %logic.rhs8880 +logic.rhs8880: %t286 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t286, ptr %a287 store { ptr, i64, i64 } { ptr @.str.5706, i64 8, i64 0 }, ptr %a288 %t289 = call i32 @finch_str_eq(ptr %a287, ptr %a288) %t290 = icmp ne i32 %t289, 0 - br label %logic.rend8878 -logic.rend8878: - br label %logic.end8877 -logic.end8877: - %t291 = phi i1 [ true, %logic.from8875 ], [ %t290, %logic.rend8878 ] - br i1 %t291, label %then8879, label %endif8881 -then8879: + br label %logic.rend8882 +logic.rend8882: + br label %logic.end8881 +logic.end8881: + %t291 = phi i1 [ true, %logic.from8879 ], [ %t290, %logic.rend8882 ] + br i1 %t291, label %then8883, label %endif8885 +then8883: %t292 = load ptr, ptr %a1 %t293 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t292, %S.ast.Node %t293, i64 1) @@ -90886,11 +90912,11 @@ then8879: %t297 = load { ptr, i64, i64 }, ptr %t296 %t298 = extractvalue { ptr, i64, i64 } %t297, 1 %t299 = icmp uge i64 1, %t298 - br i1 %t299, label %range8882, label %inrange8883 -range8882: + br i1 %t299, label %range8886, label %inrange8887 +range8886: call void @finch_panic_index(ptr @.str.5707, i64 5437, i64 1, i64 %t298) unreachable -inrange8883: +inrange8887: %t300 = extractvalue { ptr, i64, i64 } %t297, 0 %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i64 1 %t302 = load %S.ast.Node, ptr %t301 @@ -90901,11 +90927,11 @@ inrange8883: %t307 = load { ptr, i64, i64 }, ptr %t306 %t308 = extractvalue { ptr, i64, i64 } %t307, 1 %t309 = icmp uge i64 1, %t308 - br i1 %t309, label %range8884, label %inrange8885 -range8884: + br i1 %t309, label %range8888, label %inrange8889 +range8888: call void @finch_panic_index(ptr @.str.5708, i64 5437, i64 1, i64 %t308) unreachable -inrange8885: +inrange8889: %t310 = extractvalue { ptr, i64, i64 } %t307, 0 %t311 = getelementptr inbounds %S.ast.Node, ptr %t310, i64 1 %t312 = load %S.ast.Node, ptr %t311 @@ -91117,8 +91143,8 @@ inrange8885: store { ptr, i64, i64 } { ptr @.str.5735, i64 4, i64 0 }, ptr %a488 %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) %t490 = icmp ne i32 %t489, 0 - br i1 %t490, label %then8886, label %endif8888 -then8886: + br i1 %t490, label %then8890, label %endif8892 +then8890: %t491 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } %t491, ptr %a492 call void @finch_str_copy(ptr %a493, ptr %a492) @@ -91146,7 +91172,7 @@ then8886: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t497 -endif8888: +endif8892: %t498 = load ptr, ptr %a1 %t499 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } { ptr @.str.5737, i64 13, i64 0 }, ptr %a501 @@ -91185,14 +91211,14 @@ endif8888: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t513 -endif8881: +endif8885: %t514 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t514, ptr %a515 store { ptr, i64, i64 } { ptr @.str.5740, i64 4, i64 0 }, ptr %a516 %t517 = call i32 @finch_str_eq(ptr %a515, ptr %a516) %t518 = icmp ne i32 %t517, 0 - br i1 %t518, label %then8889, label %endif8891 -then8889: + br i1 %t518, label %then8893, label %endif8895 +then8893: %t519 = load ptr, ptr %a1 %t520 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t519, %S.ast.Node %t520, i64 1) @@ -91202,23 +91228,23 @@ then8889: store { ptr, i64, i64 } { ptr @.str.5741, i64 3, i64 0 }, ptr %a524 %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) %t526 = icmp eq i32 %t525, 0 - br i1 %t526, label %then8892, label %endif8894 -then8892: + br i1 %t526, label %then8896, label %endif8898 +then8896: %t527 = load ptr, ptr %a1 %t528 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t527, %S.ast.Node %t528, { ptr, i64, i64 } { ptr @.str.5742, i64 31, i64 0 }) - br label %endif8894 -endif8894: + br label %endif8898 +endif8898: %t529 = load ptr, ptr %a1 %t530 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t531 = load { ptr, i64, i64 }, ptr %t530 %t532 = extractvalue { ptr, i64, i64 } %t531, 1 %t533 = icmp uge i64 1, %t532 - br i1 %t533, label %range8895, label %inrange8896 -range8895: + br i1 %t533, label %range8899, label %inrange8900 +range8899: call void @finch_panic_index(ptr @.str.5743, i64 5477, i64 1, i64 %t532) unreachable -inrange8896: +inrange8900: %t534 = extractvalue { ptr, i64, i64 } %t531, 0 %t535 = getelementptr inbounds %S.ast.Node, ptr %t534, i64 1 %t536 = load %S.ast.Node, ptr %t535 @@ -91290,14 +91316,14 @@ inrange8896: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t588 -endif8891: +endif8895: %t589 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t589, ptr %a590 store { ptr, i64, i64 } { ptr @.str.5751, i64 6, i64 0 }, ptr %a591 %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) %t593 = icmp ne i32 %t592, 0 - br i1 %t593, label %then8897, label %endif8899 -then8897: + br i1 %t593, label %then8901, label %endif8903 +then8901: %t594 = load ptr, ptr %a1 %t595 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t594, %S.ast.Node %t595, i64 2) @@ -91307,11 +91333,11 @@ then8897: %t599 = load { ptr, i64, i64 }, ptr %t598 %t600 = extractvalue { ptr, i64, i64 } %t599, 1 %t601 = icmp uge i64 1, %t600 - br i1 %t601, label %range8900, label %inrange8901 -range8900: + br i1 %t601, label %range8904, label %inrange8905 +range8904: call void @finch_panic_index(ptr @.str.5752, i64 5486, i64 1, i64 %t600) unreachable -inrange8901: +inrange8905: %t602 = extractvalue { ptr, i64, i64 } %t599, 0 %t603 = getelementptr inbounds %S.ast.Node, ptr %t602, i64 1 %t604 = load %S.ast.Node, ptr %t603 @@ -91321,11 +91347,11 @@ inrange8901: %t608 = load { ptr, i64, i64 }, ptr %t607 %t609 = extractvalue { ptr, i64, i64 } %t608, 1 %t610 = icmp uge i64 1, %t609 - br i1 %t610, label %range8902, label %inrange8903 -range8902: + br i1 %t610, label %range8906, label %inrange8907 +range8906: call void @finch_panic_index(ptr @.str.5754, i64 5486, i64 1, i64 %t609) unreachable -inrange8903: +inrange8907: %t611 = extractvalue { ptr, i64, i64 } %t608, 0 %t612 = getelementptr inbounds %S.ast.Node, ptr %t611, i64 1 %t613 = load %S.ast.Node, ptr %t612 @@ -91348,11 +91374,11 @@ inrange8903: %t627 = load { ptr, i64, i64 }, ptr %t626 %t628 = extractvalue { ptr, i64, i64 } %t627, 1 %t629 = icmp uge i64 2, %t628 - br i1 %t629, label %range8904, label %inrange8905 -range8904: + br i1 %t629, label %range8908, label %inrange8909 +range8908: call void @finch_panic_index(ptr @.str.5756, i64 5487, i64 2, i64 %t628) unreachable -inrange8905: +inrange8909: %t630 = extractvalue { ptr, i64, i64 } %t627, 0 %t631 = getelementptr inbounds %S.ast.Node, ptr %t630, i64 2 %t632 = load %S.ast.Node, ptr %t631 @@ -91363,11 +91389,11 @@ inrange8905: %t637 = load { ptr, i64, i64 }, ptr %t636 %t638 = extractvalue { ptr, i64, i64 } %t637, 1 %t639 = icmp uge i64 2, %t638 - br i1 %t639, label %range8906, label %inrange8907 -range8906: + br i1 %t639, label %range8910, label %inrange8911 +range8910: call void @finch_panic_index(ptr @.str.5757, i64 5487, i64 2, i64 %t638) unreachable -inrange8907: +inrange8911: %t640 = extractvalue { ptr, i64, i64 } %t637, 0 %t641 = getelementptr inbounds %S.ast.Node, ptr %t640, i64 2 %t642 = load %S.ast.Node, ptr %t641 @@ -91381,22 +91407,22 @@ inrange8907: %t648 = load ptr, ptr %a1 %t649 = load ptr, ptr %a1 %t650 = icmp eq ptr %t649, null - br i1 %t650, label %panic8908, label %ok8909 -panic8908: + br i1 %t650, label %panic8912, label %ok8913 +panic8912: call void @finch_panic(ptr @.str.5759, i64 5488, ptr @.str.5760) unreachable -ok8909: +ok8913: %t651 = getelementptr inbounds %S.gen.Gen, ptr %t649, i32 0, i32 1 %t652 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t653 = load i64, ptr %t652 %t654 = load { ptr, i64, i64 }, ptr %t651 %t655 = extractvalue { ptr, i64, i64 } %t654, 1 %t656 = icmp uge i64 %t653, %t655 - br i1 %t656, label %range8910, label %inrange8911 -range8910: + br i1 %t656, label %range8914, label %inrange8915 +range8914: call void @finch_panic_index(ptr @.str.5761, i64 5488, i64 %t653, i64 %t655) unreachable -inrange8911: +inrange8915: %t657 = extractvalue { ptr, i64, i64 } %t654, 0 %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i64 %t653 %t659 = load { ptr, i64, i64 }, ptr %t658 @@ -91534,14 +91560,14 @@ inrange8911: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t764 -endif8899: +endif8903: %t765 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t765, ptr %a766 store { ptr, i64, i64 } { ptr @.str.5773, i64 6, i64 0 }, ptr %a767 %t768 = call i32 @finch_str_eq(ptr %a766, ptr %a767) %t769 = icmp ne i32 %t768, 0 - br i1 %t769, label %then8912, label %endif8914 -then8912: + br i1 %t769, label %then8916, label %endif8918 +then8916: %t770 = load ptr, ptr %a1 %t771 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t770, %S.ast.Node %t771, i64 1) @@ -91551,11 +91577,11 @@ then8912: %t775 = load { ptr, i64, i64 }, ptr %t774 %t776 = extractvalue { ptr, i64, i64 } %t775, 1 %t777 = icmp uge i64 1, %t776 - br i1 %t777, label %range8915, label %inrange8916 -range8915: + br i1 %t777, label %range8919, label %inrange8920 +range8919: call void @finch_panic_index(ptr @.str.5774, i64 5496, i64 1, i64 %t776) unreachable -inrange8916: +inrange8920: %t778 = extractvalue { ptr, i64, i64 } %t775, 0 %t779 = getelementptr inbounds %S.ast.Node, ptr %t778, i64 1 %t780 = load %S.ast.Node, ptr %t779 @@ -91565,11 +91591,11 @@ inrange8916: %t784 = load { ptr, i64, i64 }, ptr %t783 %t785 = extractvalue { ptr, i64, i64 } %t784, 1 %t786 = icmp uge i64 1, %t785 - br i1 %t786, label %range8917, label %inrange8918 -range8917: + br i1 %t786, label %range8921, label %inrange8922 +range8921: call void @finch_panic_index(ptr @.str.5776, i64 5496, i64 1, i64 %t785) unreachable -inrange8918: +inrange8922: %t787 = extractvalue { ptr, i64, i64 } %t784, 0 %t788 = getelementptr inbounds %S.ast.Node, ptr %t787, i64 1 %t789 = load %S.ast.Node, ptr %t788 @@ -91706,14 +91732,14 @@ inrange8918: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t895 -endif8914: +endif8918: %t896 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t896, ptr %a897 store { ptr, i64, i64 } { ptr @.str.5787, i64 6, i64 0 }, ptr %a898 %t899 = call i32 @finch_str_eq(ptr %a897, ptr %a898) %t900 = icmp ne i32 %t899, 0 - br i1 %t900, label %then8919, label %endif8921 -then8919: + br i1 %t900, label %then8923, label %endif8925 +then8923: %t901 = load ptr, ptr %a1 %t902 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t901, %S.ast.Node %t902, i64 1) @@ -91723,11 +91749,11 @@ then8919: %t906 = load { ptr, i64, i64 }, ptr %t905 %t907 = extractvalue { ptr, i64, i64 } %t906, 1 %t908 = icmp uge i64 1, %t907 - br i1 %t908, label %range8922, label %inrange8923 -range8922: + br i1 %t908, label %range8926, label %inrange8927 +range8926: call void @finch_panic_index(ptr @.str.5788, i64 5505, i64 1, i64 %t907) unreachable -inrange8923: +inrange8927: %t909 = extractvalue { ptr, i64, i64 } %t906, 0 %t910 = getelementptr inbounds %S.ast.Node, ptr %t909, i64 1 %t911 = load %S.ast.Node, ptr %t910 @@ -91737,11 +91763,11 @@ inrange8923: %t915 = load { ptr, i64, i64 }, ptr %t914 %t916 = extractvalue { ptr, i64, i64 } %t915, 1 %t917 = icmp uge i64 1, %t916 - br i1 %t917, label %range8924, label %inrange8925 -range8924: + br i1 %t917, label %range8928, label %inrange8929 +range8928: call void @finch_panic_index(ptr @.str.5790, i64 5505, i64 1, i64 %t916) unreachable -inrange8925: +inrange8929: %t918 = extractvalue { ptr, i64, i64 } %t915, 0 %t919 = getelementptr inbounds %S.ast.Node, ptr %t918, i64 1 %t920 = load %S.ast.Node, ptr %t919 @@ -91815,14 +91841,14 @@ inrange8925: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t972 -endif8921: +endif8925: %t973 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t973, ptr %a974 store { ptr, i64, i64 } { ptr @.str.5797, i64 7, i64 0 }, ptr %a975 %t976 = call i32 @finch_str_eq(ptr %a974, ptr %a975) %t977 = icmp ne i32 %t976, 0 - br i1 %t977, label %then8926, label %endif8928 -then8926: + br i1 %t977, label %then8930, label %endif8932 +then8930: %t978 = load ptr, ptr %a1 %t979 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t978, %S.ast.Node %t979, i64 0) @@ -91882,11 +91908,11 @@ then8926: %t1028 = load { ptr, i64, i64 }, ptr %a1005 %t1029 = extractvalue { ptr, i64, i64 } %t1028, 1 %t1030 = icmp uge i64 3, %t1029 - br i1 %t1030, label %range8929, label %inrange8930 -range8929: + br i1 %t1030, label %range8933, label %inrange8934 +range8933: call void @finch_panic_index(ptr @.str.5805, i64 5516, i64 3, i64 %t1029) unreachable -inrange8930: +inrange8934: %t1031 = extractvalue { ptr, i64, i64 } %t1028, 0 %t1032 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1031, i64 3 %t1033 = load { ptr, i64, i64 }, ptr %t1032 @@ -91931,11 +91957,11 @@ inrange8930: %t1066 = load { ptr, i64, i64 }, ptr %a1005 %t1067 = extractvalue { ptr, i64, i64 } %t1066, 1 %t1068 = icmp uge i64 3, %t1067 - br i1 %t1068, label %range8931, label %inrange8932 -range8931: + br i1 %t1068, label %range8935, label %inrange8936 +range8935: call void @finch_panic_index(ptr @.str.5810, i64 5517, i64 3, i64 %t1067) unreachable -inrange8932: +inrange8936: %t1069 = extractvalue { ptr, i64, i64 } %t1066, 0 %t1070 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1069, i64 3 %t1071 = load { ptr, i64, i64 }, ptr %t1070 @@ -92024,14 +92050,14 @@ inrange8932: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t1132 -endif8928: +endif8932: %t1133 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t1133, ptr %a1134 store { ptr, i64, i64 } { ptr @.str.5815, i64 5, i64 0 }, ptr %a1135 %t1136 = call i32 @finch_str_eq(ptr %a1134, ptr %a1135) %t1137 = icmp ne i32 %t1136, 0 - br i1 %t1137, label %then8933, label %endif8935 -then8933: + br i1 %t1137, label %then8937, label %endif8939 +then8937: %t1138 = load ptr, ptr %a1 %t1139 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t1138, %S.ast.Node %t1139, i64 2) @@ -92041,11 +92067,11 @@ then8933: %t1143 = load { ptr, i64, i64 }, ptr %t1142 %t1144 = extractvalue { ptr, i64, i64 } %t1143, 1 %t1145 = icmp uge i64 1, %t1144 - br i1 %t1145, label %range8936, label %inrange8937 -range8936: + br i1 %t1145, label %range8940, label %inrange8941 +range8940: call void @finch_panic_index(ptr @.str.5816, i64 5528, i64 1, i64 %t1144) unreachable -inrange8937: +inrange8941: %t1146 = extractvalue { ptr, i64, i64 } %t1143, 0 %t1147 = getelementptr inbounds %S.ast.Node, ptr %t1146, i64 1 %t1148 = load %S.ast.Node, ptr %t1147 @@ -92055,11 +92081,11 @@ inrange8937: %t1152 = load { ptr, i64, i64 }, ptr %t1151 %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 %t1154 = icmp uge i64 1, %t1153 - br i1 %t1154, label %range8938, label %inrange8939 -range8938: + br i1 %t1154, label %range8942, label %inrange8943 +range8942: call void @finch_panic_index(ptr @.str.5818, i64 5528, i64 1, i64 %t1153) unreachable -inrange8939: +inrange8943: %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 1 %t1157 = load %S.ast.Node, ptr %t1156 @@ -92081,11 +92107,11 @@ inrange8939: %t1170 = load { ptr, i64, i64 }, ptr %t1169 %t1171 = extractvalue { ptr, i64, i64 } %t1170, 1 %t1172 = icmp uge i64 2, %t1171 - br i1 %t1172, label %range8940, label %inrange8941 -range8940: + br i1 %t1172, label %range8944, label %inrange8945 +range8944: call void @finch_panic_index(ptr @.str.5820, i64 5529, i64 2, i64 %t1171) unreachable -inrange8941: +inrange8945: %t1173 = extractvalue { ptr, i64, i64 } %t1170, 0 %t1174 = getelementptr inbounds %S.ast.Node, ptr %t1173, i64 2 %t1175 = load %S.ast.Node, ptr %t1174 @@ -92095,11 +92121,11 @@ inrange8941: %t1179 = load { ptr, i64, i64 }, ptr %t1178 %t1180 = extractvalue { ptr, i64, i64 } %t1179, 1 %t1181 = icmp uge i64 2, %t1180 - br i1 %t1181, label %range8942, label %inrange8943 -range8942: + br i1 %t1181, label %range8946, label %inrange8947 +range8946: call void @finch_panic_index(ptr @.str.5822, i64 5529, i64 2, i64 %t1180) unreachable -inrange8943: +inrange8947: %t1182 = extractvalue { ptr, i64, i64 } %t1179, 0 %t1183 = getelementptr inbounds %S.ast.Node, ptr %t1182, i64 2 %t1184 = load %S.ast.Node, ptr %t1183 @@ -92342,11 +92368,11 @@ inrange8943: %t1387 = load { ptr, i64, i64 }, ptr %a1364 %t1388 = extractvalue { ptr, i64, i64 } %t1387, 1 %t1389 = icmp uge i64 3, %t1388 - br i1 %t1389, label %range8944, label %inrange8945 -range8944: + br i1 %t1389, label %range8948, label %inrange8949 +range8948: call void @finch_panic_index(ptr @.str.5848, i64 5541, i64 3, i64 %t1388) unreachable -inrange8945: +inrange8949: %t1390 = extractvalue { ptr, i64, i64 } %t1387, 0 %t1391 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1390, i64 3 %t1392 = load { ptr, i64, i64 }, ptr %t1391 @@ -92400,11 +92426,11 @@ inrange8945: %t1434 = load { ptr, i64, i64 }, ptr %a1364 %t1435 = extractvalue { ptr, i64, i64 } %t1434, 1 %t1436 = icmp uge i64 3, %t1435 - br i1 %t1436, label %range8946, label %inrange8947 -range8946: + br i1 %t1436, label %range8950, label %inrange8951 +range8950: call void @finch_panic_index(ptr @.str.5854, i64 5542, i64 3, i64 %t1435) unreachable -inrange8947: +inrange8951: %t1437 = extractvalue { ptr, i64, i64 } %t1434, 0 %t1438 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1437, i64 3 %t1439 = load { ptr, i64, i64 }, ptr %t1438 @@ -92465,14 +92491,14 @@ inrange8947: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t1471 -endif8935: +endif8939: %t1472 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t1472, ptr %a1473 store { ptr, i64, i64 } { ptr @.str.5856, i64 4, i64 0 }, ptr %a1474 %t1475 = call i32 @finch_str_eq(ptr %a1473, ptr %a1474) %t1476 = icmp ne i32 %t1475, 0 - br i1 %t1476, label %then8948, label %endif8950 -then8948: + br i1 %t1476, label %then8952, label %endif8954 +then8952: %t1477 = load ptr, ptr %a1 %t1478 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t1477, %S.ast.Node %t1478, i64 0) @@ -92485,41 +92511,41 @@ then8948: %t1485 = load %S.ast.Type, ptr %a15 %t1486 = call i1 @finch.gen.isNumber(%S.ast.Type %t1485) %t1487 = xor i1 %t1486, true - br label %logic.from8951 -logic.from8951: - br i1 %t1487, label %logic.rhs8952, label %logic.end8953 -logic.rhs8952: + br label %logic.from8955 +logic.from8955: + br i1 %t1487, label %logic.rhs8956, label %logic.end8957 +logic.rhs8956: %t1488 = load { ptr, i64, i64 }, ptr %a1484 store { ptr, i64, i64 } %t1488, ptr %a1489 store { ptr, i64, i64 } { ptr @.str.5857, i64 4, i64 0 }, ptr %a1490 %t1491 = call i32 @finch_str_eq(ptr %a1489, ptr %a1490) %t1492 = icmp eq i32 %t1491, 0 - br label %logic.rend8954 -logic.rend8954: - br label %logic.end8953 -logic.end8953: - %t1493 = phi i1 [ false, %logic.from8951 ], [ %t1492, %logic.rend8954 ] - br label %logic.from8955 -logic.from8955: - br i1 %t1493, label %logic.rhs8956, label %logic.end8957 -logic.rhs8956: + br label %logic.rend8958 +logic.rend8958: + br label %logic.end8957 +logic.end8957: + %t1493 = phi i1 [ false, %logic.from8955 ], [ %t1492, %logic.rend8958 ] + br label %logic.from8959 +logic.from8959: + br i1 %t1493, label %logic.rhs8960, label %logic.end8961 +logic.rhs8960: %t1494 = load { ptr, i64, i64 }, ptr %a1484 store { ptr, i64, i64 } %t1494, ptr %a1495 store { ptr, i64, i64 } { ptr @.str.5858, i64 3, i64 0 }, ptr %a1496 %t1497 = call i32 @finch_str_eq(ptr %a1495, ptr %a1496) %t1498 = icmp eq i32 %t1497, 0 - br label %logic.rend8958 -logic.rend8958: - br label %logic.end8957 -logic.end8957: - %t1499 = phi i1 [ false, %logic.from8955 ], [ %t1498, %logic.rend8958 ] - br i1 %t1499, label %then8959, label %endif8961 -then8959: + br label %logic.rend8962 +logic.rend8962: + br label %logic.end8961 +logic.end8961: + %t1499 = phi i1 [ false, %logic.from8959 ], [ %t1498, %logic.rend8962 ] + br i1 %t1499, label %then8963, label %endif8965 +then8963: %t1500 = load ptr, ptr %a1 %t1501 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t1500, %S.ast.Node %t1501, { ptr, i64, i64 } { ptr @.str.5859, i64 47, i64 0 }) - br label %endif8961 -endif8961: + br label %endif8965 +endif8965: %t1502 = load ptr, ptr %a1 %t1503 = load %S.ast.Type, ptr %a15 %t1504 = call { ptr, i64, i64 } @finch.gen.cmpFn(ptr %t1502, %S.ast.Type %t1503) @@ -92601,7 +92627,7 @@ endif8961: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t1563 -endif8950: +endif8954: %t1564 = load ptr, ptr %a1 %t1565 = load %S.ast.Node, ptr %a2 %t1566 = load { ptr, i64, i64 }, ptr %a25 @@ -92758,11 +92784,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range8962, label %inrange8963 -range8962: + br i1 %t8, label %range8966, label %inrange8967 +range8966: call void @finch_panic_index(ptr @.str.5870, i64 5565, i64 0, i64 %t7) unreachable -inrange8963: +inrange8967: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 %t11 = load %S.ast.Type, ptr %t10 @@ -92774,11 +92800,11 @@ inrange8963: %t17 = load %S.ast.Type, ptr %a15 %t18 = call i1 @finch.gen.owning(ptr %t16, %S.ast.Type %t17) %t19 = xor i1 %t18, true - br i1 %t19, label %then8964, label %endif8966 -then8964: + br i1 %t19, label %then8968, label %endif8970 +then8968: call void @finch.drop.S_ast_Type(ptr %a15) ret void -endif8966: +endif8970: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Type, ptr %a15 %t22 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t20, %S.ast.Type %t21) @@ -92972,11 +92998,11 @@ endif8966: %t185 = load { ptr, i64, i64 }, ptr %a151 %t186 = extractvalue { ptr, i64, i64 } %t185, 1 %t187 = icmp uge i64 3, %t186 - br i1 %t187, label %range8967, label %inrange8968 -range8967: + br i1 %t187, label %range8971, label %inrange8972 +range8971: call void @finch_panic_index(ptr @.str.5891, i64 5576, i64 3, i64 %t186) unreachable -inrange8968: +inrange8972: %t188 = extractvalue { ptr, i64, i64 } %t185, 0 %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i64 3 %t190 = load { ptr, i64, i64 }, ptr %t189 @@ -93208,27 +93234,27 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic8969, label %ok8970 -panic8969: + br i1 %t12, label %panic8973, label %ok8974 +panic8973: call void @finch_panic(ptr @.str.5893, i64 5584, ptr @.str.5894) unreachable -ok8970: +ok8974: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) - br i1 %t16, label %then8971, label %endif8973 -then8971: + br i1 %t16, label %then8975, label %endif8977 +then8975: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 -endif8973: +endif8977: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic8974, label %ok8975 -panic8974: + br i1 %t19, label %panic8978, label %ok8979 +panic8978: call void @finch_panic(ptr @.str.5895, i64 5587, ptr @.str.5896) unreachable -ok8975: +ok8979: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 @@ -93252,8 +93278,8 @@ ok8975: store { ptr, i64, i64 } { ptr @.str.5898, i64 3, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br i1 %t39, label %then8976, label %else8977 -then8976: + br i1 %t39, label %then8980, label %else8981 +then8980: %t40 = load ptr, ptr %a1 %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t40, { ptr, i64, i64 } { ptr @.str.5899, i64 39, i64 0 }) store { ptr, i64, i64 } %t41, ptr %a42 @@ -93277,8 +93303,8 @@ then8976: store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_drop(ptr %a57) call void @finch_str_drop(ptr %a42) - br label %endif8978 -else8977: + br label %endif8982 +else8981: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Type, ptr %a2 %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) @@ -93295,8 +93321,8 @@ else8977: store { ptr, i64, i64 } { ptr @.str.5905, i64 0, i64 0 }, ptr %a71 %t72 = load %S.ast.Type, ptr %a2 %t73 = call i1 @finch.gen.isFloat(%S.ast.Type %t72) - br i1 %t73, label %then8979, label %else8980 -then8979: + br i1 %t73, label %then8983, label %else8984 +then8983: %t74 = load ptr, ptr %a1 %t75 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } { ptr @.str.5906, i64 9, i64 0 }, ptr %a77 @@ -93375,8 +93401,8 @@ then8979: store { ptr, i64, i64 } %t134, ptr %a71 store { ptr, i64, i64 } %t136, ptr %a137 call void @finch_str_drop(ptr %a137) - br label %endif8981 -else8980: + br label %endif8985 +else8984: %t138 = load ptr, ptr %a1 %t139 = load %S.ast.Type, ptr %a2 %t140 = call i1 @finch.gen.isSigned(%S.ast.Type %t139) @@ -93489,8 +93515,8 @@ else8980: store { ptr, i64, i64 } %t226, ptr %a71 store { ptr, i64, i64 } %t228, ptr %a229 call void @finch_str_drop(ptr %a229) - br label %endif8981 -endif8981: + br label %endif8985 +endif8985: %t230 = load ptr, ptr %a1 %t231 = load ptr, ptr %a1 %t232 = load { ptr, i64, i64 }, ptr %a71 @@ -93554,8 +93580,8 @@ endif8981: call void @finch_str_drop(ptr %a69) call void @finch_str_drop(ptr %a65) call void @finch_str_drop(ptr %a61) - br label %endif8978 -endif8978: + br label %endif8982 +endif8982: %t277 = load ptr, ptr %a1 %t278 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } { ptr @.str.5928, i64 8, i64 0 }, ptr %a280 @@ -93936,22 +93962,22 @@ entry: %t13 = load ptr, ptr %a1 %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic8982, label %ok8983 -panic8982: + br i1 %t15, label %panic8986, label %ok8987 +panic8986: call void @finch_panic(ptr @.str.5931, i64 5616, ptr @.str.5932) unreachable -ok8983: +ok8987: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 1 %t17 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t16 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range8984, label %inrange8985 -range8984: + br i1 %t21, label %range8988, label %inrange8989 +range8988: call void @finch_panic_index(ptr @.str.5933, i64 5616, i64 %t18, i64 %t20) unreachable -inrange8985: +inrange8989: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 %t24 = load { ptr, i64, i64 }, ptr %t23 @@ -93962,8 +93988,8 @@ inrange8985: store { ptr, i64, i64 } { ptr @.str.5934, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br i1 %t31, label %then8986, label %endif8988 -then8986: + br i1 %t31, label %then8990, label %endif8992 +then8990: %t32 = load ptr, ptr %a1 %t33 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t32, %S.ast.Node %t33, i64 2) @@ -93973,11 +93999,11 @@ then8986: %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 1, %t38 - br i1 %t39, label %range8989, label %inrange8990 -range8989: + br i1 %t39, label %range8993, label %inrange8994 +range8993: call void @finch_panic_index(ptr @.str.5935, i64 5619, i64 1, i64 %t38) unreachable -inrange8990: +inrange8994: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 %t42 = load %S.ast.Node, ptr %t41 @@ -93987,11 +94013,11 @@ inrange8990: %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 - br i1 %t48, label %range8991, label %inrange8992 -range8991: + br i1 %t48, label %range8995, label %inrange8996 +range8995: call void @finch_panic_index(ptr @.str.5937, i64 5619, i64 1, i64 %t47) unreachable -inrange8992: +inrange8996: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 @@ -94013,11 +94039,11 @@ inrange8992: %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = extractvalue { ptr, i64, i64 } %t64, 1 %t66 = icmp uge i64 2, %t65 - br i1 %t66, label %range8993, label %inrange8994 -range8993: + br i1 %t66, label %range8997, label %inrange8998 +range8997: call void @finch_panic_index(ptr @.str.5939, i64 5620, i64 2, i64 %t65) unreachable -inrange8994: +inrange8998: %t67 = extractvalue { ptr, i64, i64 } %t64, 0 %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 2 %t69 = load %S.ast.Node, ptr %t68 @@ -94027,11 +94053,11 @@ inrange8994: %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 2, %t74 - br i1 %t75, label %range8995, label %inrange8996 -range8995: + br i1 %t75, label %range8999, label %inrange9000 +range8999: call void @finch_panic_index(ptr @.str.5941, i64 5620, i64 2, i64 %t74) unreachable -inrange8996: +inrange9000: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 2 %t78 = load %S.ast.Node, ptr %t77 @@ -94145,56 +94171,56 @@ inrange8996: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t165 -endif8988: +endif8992: %t166 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t166, ptr %a167 store { ptr, i64, i64 } { ptr @.str.5952, i64 4, i64 0 }, ptr %a168 %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) %t170 = icmp ne i32 %t169, 0 - br label %logic.from8997 -logic.from8997: - br i1 %t170, label %logic.end8999, label %logic.rhs8998 -logic.rhs8998: + br label %logic.from9001 +logic.from9001: + br i1 %t170, label %logic.end9003, label %logic.rhs9002 +logic.rhs9002: %t171 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.5953, i64 8, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 - br label %logic.rend9000 -logic.rend9000: - br label %logic.end8999 -logic.end8999: - %t176 = phi i1 [ true, %logic.from8997 ], [ %t175, %logic.rend9000 ] - br label %logic.from9001 -logic.from9001: - br i1 %t176, label %logic.end9003, label %logic.rhs9002 -logic.rhs9002: + br label %logic.rend9004 +logic.rend9004: + br label %logic.end9003 +logic.end9003: + %t176 = phi i1 [ true, %logic.from9001 ], [ %t175, %logic.rend9004 ] + br label %logic.from9005 +logic.from9005: + br i1 %t176, label %logic.end9007, label %logic.rhs9006 +logic.rhs9006: %t177 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t177, ptr %a178 store { ptr, i64, i64 } { ptr @.str.5954, i64 11, i64 0 }, ptr %a179 %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) %t181 = icmp ne i32 %t180, 0 - br label %logic.rend9004 -logic.rend9004: - br label %logic.end9003 -logic.end9003: - %t182 = phi i1 [ true, %logic.from9001 ], [ %t181, %logic.rend9004 ] - br label %logic.from9005 -logic.from9005: - br i1 %t182, label %logic.end9007, label %logic.rhs9006 -logic.rhs9006: + br label %logic.rend9008 +logic.rend9008: + br label %logic.end9007 +logic.end9007: + %t182 = phi i1 [ true, %logic.from9005 ], [ %t181, %logic.rend9008 ] + br label %logic.from9009 +logic.from9009: + br i1 %t182, label %logic.end9011, label %logic.rhs9010 +logic.rhs9010: %t183 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t183, ptr %a184 store { ptr, i64, i64 } { ptr @.str.5955, i64 9, i64 0 }, ptr %a185 %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) %t187 = icmp ne i32 %t186, 0 - br label %logic.rend9008 -logic.rend9008: - br label %logic.end9007 -logic.end9007: - %t188 = phi i1 [ true, %logic.from9005 ], [ %t187, %logic.rend9008 ] - br i1 %t188, label %then9009, label %endif9011 -then9009: + br label %logic.rend9012 +logic.rend9012: + br label %logic.end9011 +logic.end9011: + %t188 = phi i1 [ true, %logic.from9009 ], [ %t187, %logic.rend9012 ] + br i1 %t188, label %then9013, label %endif9015 +then9013: %t189 = load ptr, ptr %a1 %t190 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t189, %S.ast.Node %t190, i64 1) @@ -94203,11 +94229,11 @@ then9009: %t193 = load { ptr, i64, i64 }, ptr %t192 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 1, %t194 - br i1 %t195, label %range9012, label %inrange9013 -range9012: + br i1 %t195, label %range9016, label %inrange9017 +range9016: call void @finch_panic_index(ptr @.str.5956, i64 5626, i64 1, i64 %t194) unreachable -inrange9013: +inrange9017: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 1 %t198 = load %S.ast.Node, ptr %t197 @@ -94222,8 +94248,8 @@ inrange9013: store { ptr, i64, i64 } { ptr @.str.5958, i64 4, i64 0 }, ptr %a207 %t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207) %t209 = icmp ne i32 %t208, 0 - br i1 %t209, label %then9014, label %endif9016 -then9014: + br i1 %t209, label %then9018, label %endif9020 +then9018: %t210 = load ptr, ptr %a1 %t211 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5959, i64 29, i64 0 }, ptr %a213 @@ -94270,14 +94296,14 @@ then9014: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t243 -endif9016: +endif9020: %t244 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t244, ptr %a245 store { ptr, i64, i64 } { ptr @.str.5963, i64 8, i64 0 }, ptr %a246 %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) %t248 = icmp ne i32 %t247, 0 - br i1 %t248, label %then9017, label %endif9019 -then9017: + br i1 %t248, label %then9021, label %endif9023 +then9021: %t249 = load ptr, ptr %a1 %t250 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5964, i64 29, i64 0 }, ptr %a252 @@ -94341,21 +94367,21 @@ then9017: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t296 -endif9019: +endif9023: store { ptr, i64, i64 } { ptr @.str.5970, i64 17, i64 0 }, ptr %a297 %t298 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t298, ptr %a299 store { ptr, i64, i64 } { ptr @.str.5971, i64 9, i64 0 }, ptr %a300 %t301 = call i32 @finch_str_eq(ptr %a299, ptr %a300) %t302 = icmp ne i32 %t301, 0 - br i1 %t302, label %then9020, label %endif9022 -then9020: + br i1 %t302, label %then9024, label %endif9026 +then9024: %t303 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } { ptr @.str.5972, i64 15, i64 0 }, ptr %a297 store { ptr, i64, i64 } %t303, ptr %a304 call void @finch_str_drop(ptr %a304) - br label %endif9022 -endif9022: + br label %endif9026 +endif9026: %t305 = load ptr, ptr %a1 %t306 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } { ptr @.str.5973, i64 9, i64 0 }, ptr %a308 @@ -94433,42 +94459,42 @@ endif9022: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t363 -endif9011: +endif9015: %t364 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.5980, i64 4, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 - br label %logic.from9023 -logic.from9023: - br i1 %t368, label %logic.end9025, label %logic.rhs9024 -logic.rhs9024: + br label %logic.from9027 +logic.from9027: + br i1 %t368, label %logic.end9029, label %logic.rhs9028 +logic.rhs9028: %t369 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t369, ptr %a370 store { ptr, i64, i64 } { ptr @.str.5981, i64 5, i64 0 }, ptr %a371 %t372 = call i32 @finch_str_eq(ptr %a370, ptr %a371) %t373 = icmp ne i32 %t372, 0 - br label %logic.rend9026 -logic.rend9026: - br label %logic.end9025 -logic.end9025: - %t374 = phi i1 [ true, %logic.from9023 ], [ %t373, %logic.rend9026 ] - br label %logic.from9027 -logic.from9027: - br i1 %t374, label %logic.end9029, label %logic.rhs9028 -logic.rhs9028: + br label %logic.rend9030 +logic.rend9030: + br label %logic.end9029 +logic.end9029: + %t374 = phi i1 [ true, %logic.from9027 ], [ %t373, %logic.rend9030 ] + br label %logic.from9031 +logic.from9031: + br i1 %t374, label %logic.end9033, label %logic.rhs9032 +logic.rhs9032: %t375 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t375, ptr %a376 store { ptr, i64, i64 } { ptr @.str.5982, i64 5, i64 0 }, ptr %a377 %t378 = call i32 @finch_str_eq(ptr %a376, ptr %a377) %t379 = icmp ne i32 %t378, 0 - br label %logic.rend9030 -logic.rend9030: - br label %logic.end9029 -logic.end9029: - %t380 = phi i1 [ true, %logic.from9027 ], [ %t379, %logic.rend9030 ] - br i1 %t380, label %then9031, label %endif9033 -then9031: + br label %logic.rend9034 +logic.rend9034: + br label %logic.end9033 +logic.end9033: + %t380 = phi i1 [ true, %logic.from9031 ], [ %t379, %logic.rend9034 ] + br i1 %t380, label %then9035, label %endif9037 +then9035: %t381 = load ptr, ptr %a1 %t382 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t381, %S.ast.Node %t382, i64 0) @@ -94524,14 +94550,14 @@ then9031: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t423 -endif9033: +endif9037: %t424 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t424, ptr %a425 store { ptr, i64, i64 } { ptr @.str.5989, i64 7, i64 0 }, ptr %a426 %t427 = call i32 @finch_str_eq(ptr %a425, ptr %a426) %t428 = icmp ne i32 %t427, 0 - br i1 %t428, label %then9034, label %endif9036 -then9034: + br i1 %t428, label %then9038, label %endif9040 +then9038: %t429 = load ptr, ptr %a1 %t430 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t429, %S.ast.Node %t430, i64 2) @@ -94540,11 +94566,11 @@ then9034: %t433 = load { ptr, i64, i64 }, ptr %t432 %t434 = extractvalue { ptr, i64, i64 } %t433, 1 %t435 = icmp uge i64 1, %t434 - br i1 %t435, label %range9037, label %inrange9038 -range9037: + br i1 %t435, label %range9041, label %inrange9042 +range9041: call void @finch_panic_index(ptr @.str.5990, i64 5655, i64 1, i64 %t434) unreachable -inrange9038: +inrange9042: %t436 = extractvalue { ptr, i64, i64 } %t433, 0 %t437 = getelementptr inbounds %S.ast.Node, ptr %t436, i64 1 %t438 = load %S.ast.Node, ptr %t437 @@ -94552,11 +94578,11 @@ inrange9038: store %S.gen.Val %t439, ptr %a440 %t441 = load ptr, ptr %a1 %t442 = icmp eq ptr %t441, null - br i1 %t442, label %panic9039, label %ok9040 -panic9039: + br i1 %t442, label %panic9043, label %ok9044 +panic9043: call void @finch_panic(ptr @.str.5992, i64 5656, ptr @.str.5993) unreachable -ok9040: +ok9044: %t443 = getelementptr inbounds %S.gen.Gen, ptr %t441, i32 0, i32 11 %t444 = getelementptr inbounds { ptr, i64, i64 }, ptr %t443, i32 0, i32 1 %t445 = load i64, ptr %t444 @@ -94569,11 +94595,11 @@ ok9040: %t451 = load { ptr, i64, i64 }, ptr %t450 %t452 = extractvalue { ptr, i64, i64 } %t451, 1 %t453 = icmp uge i64 2, %t452 - br i1 %t453, label %range9041, label %inrange9042 -range9041: + br i1 %t453, label %range9045, label %inrange9046 +range9045: call void @finch_panic_index(ptr @.str.5994, i64 5658, i64 2, i64 %t452) unreachable -inrange9042: +inrange9046: %t454 = extractvalue { ptr, i64, i64 } %t451, 0 %t455 = getelementptr inbounds %S.ast.Node, ptr %t454, i64 2 %t456 = load %S.ast.Node, ptr %t455 @@ -94665,14 +94691,14 @@ inrange9042: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t524 -endif9036: +endif9040: %t525 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t525, ptr %a526 store { ptr, i64, i64 } { ptr @.str.6003, i64 5, i64 0 }, ptr %a527 %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) %t529 = icmp ne i32 %t528, 0 - br i1 %t529, label %then9043, label %endif9045 -then9043: + br i1 %t529, label %then9047, label %endif9049 +then9047: %t530 = load ptr, ptr %a1 %t531 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t530, %S.ast.Node %t531, i64 1) @@ -94681,11 +94707,11 @@ then9043: %t534 = load { ptr, i64, i64 }, ptr %t533 %t535 = extractvalue { ptr, i64, i64 } %t534, 1 %t536 = icmp uge i64 1, %t535 - br i1 %t536, label %range9046, label %inrange9047 -range9046: + br i1 %t536, label %range9050, label %inrange9051 +range9050: call void @finch_panic_index(ptr @.str.6004, i64 5669, i64 1, i64 %t535) unreachable -inrange9047: +inrange9051: %t537 = extractvalue { ptr, i64, i64 } %t534, 0 %t538 = getelementptr inbounds %S.ast.Node, ptr %t537, i64 1 %t539 = load %S.ast.Node, ptr %t538 @@ -94759,14 +94785,14 @@ inrange9047: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t593 -endif9045: +endif9049: %t594 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t594, ptr %a595 store { ptr, i64, i64 } { ptr @.str.6012, i64 6, i64 0 }, ptr %a596 %t597 = call i32 @finch_str_eq(ptr %a595, ptr %a596) %t598 = icmp ne i32 %t597, 0 - br i1 %t598, label %then9048, label %endif9050 -then9048: + br i1 %t598, label %then9052, label %endif9054 +then9052: %t599 = load ptr, ptr %a1 %t600 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t599, %S.ast.Node %t600, i64 1) @@ -94776,11 +94802,11 @@ then9048: %t604 = load { ptr, i64, i64 }, ptr %t603 %t605 = extractvalue { ptr, i64, i64 } %t604, 1 %t606 = icmp uge i64 1, %t605 - br i1 %t606, label %range9051, label %inrange9052 -range9051: + br i1 %t606, label %range9055, label %inrange9056 +range9055: call void @finch_panic_index(ptr @.str.6013, i64 5678, i64 1, i64 %t605) unreachable -inrange9052: +inrange9056: %t607 = extractvalue { ptr, i64, i64 } %t604, 0 %t608 = getelementptr inbounds %S.ast.Node, ptr %t607, i64 1 %t609 = load %S.ast.Node, ptr %t608 @@ -94790,11 +94816,11 @@ inrange9052: %t613 = load { ptr, i64, i64 }, ptr %t612 %t614 = extractvalue { ptr, i64, i64 } %t613, 1 %t615 = icmp uge i64 1, %t614 - br i1 %t615, label %range9053, label %inrange9054 -range9053: + br i1 %t615, label %range9057, label %inrange9058 +range9057: call void @finch_panic_index(ptr @.str.6015, i64 5678, i64 1, i64 %t614) unreachable -inrange9054: +inrange9058: %t616 = extractvalue { ptr, i64, i64 } %t613, 0 %t617 = getelementptr inbounds %S.ast.Node, ptr %t616, i64 1 %t618 = load %S.ast.Node, ptr %t617 @@ -94863,14 +94889,14 @@ inrange9054: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t668 -endif9050: +endif9054: %t669 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t669, ptr %a670 store { ptr, i64, i64 } { ptr @.str.6023, i64 5, i64 0 }, ptr %a671 %t672 = call i32 @finch_str_eq(ptr %a670, ptr %a671) %t673 = icmp ne i32 %t672, 0 - br i1 %t673, label %then9055, label %endif9057 -then9055: + br i1 %t673, label %then9059, label %endif9061 +then9059: %t674 = load ptr, ptr %a1 %t675 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t674, %S.ast.Node %t675, i64 0) @@ -94920,7 +94946,7 @@ then9055: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t710 -endif9057: +endif9061: %t711 = load ptr, ptr %a1 %t712 = load %S.ast.Node, ptr %a2 %t713 = load { ptr, i64, i64 }, ptr %a9 @@ -95124,228 +95150,247 @@ define internal { ptr, i64, i64 } @finch.gen.assemble(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 - %a9 = alloca { ptr, i64, i64 }, align 16 - %a10 = alloca { ptr, i64, i64 }, align 16 - %a11 = alloca { ptr, i64, i64 }, align 16 - %a18 = alloca { ptr, i64, i64 }, align 16 - %a19 = alloca { ptr, i64, i64 }, align 16 - %a20 = alloca { ptr, i64, i64 }, align 16 - %a21 = alloca { ptr, i64, i64 }, align 16 - %a23 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 - %a36 = alloca { ptr, i64, i64 }, align 16 - %a38 = alloca { ptr, i64, i64 }, align 16 - %a39 = alloca { ptr, i64, i64 }, align 16 - %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 - %a43 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 - %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 - %a68 = alloca { ptr, i64, i64 }, align 16 - %a69 = alloca { ptr, i64, i64 }, align 16 - %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 - %a79 = alloca { ptr, i64, i64 }, align 16 - %a81 = alloca { ptr, i64, i64 }, align 16 - %a82 = alloca { ptr, i64, i64 }, align 16 - %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 - %a94 = alloca { ptr, i64, i64 }, align 16 - %a95 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 - %a102 = alloca { ptr, i64, i64 }, align 16 - %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6107, i64 52, i64 0 }, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic9058, label %ok9059 -panic9058: + br i1 %t4, label %panic9062, label %ok9063 +panic9062: call void @finch_panic(ptr @.str.6108, i64 5776, ptr @.str.6109) unreachable -ok9059: +ok9063: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 31 %t6 = getelementptr inbounds %S.platform.Target, ptr %t5, i32 0, i32 5 %t7 = load i1, ptr %t6 - br i1 %t7, label %then9060, label %endif9062 -then9060: - %t8 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t8, ptr %a10 - store { ptr, i64, i64 } { ptr @.str.6110, i64 17, i64 0 }, ptr %a11 - call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) - %t12 = load { ptr, i64, i64 }, ptr %a9 - %t13 = load ptr, ptr %a1 - %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic9063, label %ok9064 -panic9063: - call void @finch_panic(ptr @.str.6111, i64 5777, ptr @.str.6112) - unreachable -ok9064: - %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 31 - %t16 = getelementptr inbounds %S.platform.Target, ptr %t15, i32 0, i32 0 - %t17 = load { ptr, i64, i64 }, ptr %t16 - store { ptr, i64, i64 } %t12, ptr %a19 - store { ptr, i64, i64 } %t17, ptr %a20 - call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) - store { ptr, i64, i64 } %t12, ptr %a21 - call void @finch_str_drop(ptr %a21) - %t22 = load { ptr, i64, i64 }, ptr %a18 - store { ptr, i64, i64 } %t22, ptr %a24 - store { ptr, i64, i64 } { ptr @.str.6113, i64 3, i64 0 }, ptr %a25 - call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) - store { ptr, i64, i64 } %t22, ptr %a26 - call void @finch_str_drop(ptr %a26) - %t27 = load { ptr, i64, i64 }, ptr %a23 - %t28 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t27, ptr %a2 - store { ptr, i64, i64 } %t28, ptr %a29 - call void @finch_str_drop(ptr %a29) - br label %endif9062 -endif9062: - %t30 = load { ptr, i64, i64 }, ptr %a2 - %t31 = load ptr, ptr %a1 - %t32 = icmp eq ptr %t31, null - br i1 %t32, label %panic9065, label %ok9066 -panic9065: - call void @finch_panic(ptr @.str.6114, i64 5779, ptr @.str.6115) - unreachable -ok9066: - %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 2 - %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6116, i64 1, i64 0 }, ptr %a35 - call void @finch_str_join(ptr %a36, ptr %t33, ptr %a35) - %t37 = load { ptr, i64, i64 }, ptr %a36 - store { ptr, i64, i64 } %t30, ptr %a39 - store { ptr, i64, i64 } %t37, ptr %a40 - call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) - store { ptr, i64, i64 } %t37, ptr %a41 - call void @finch_str_drop(ptr %a41) - %t42 = load { ptr, i64, i64 }, ptr %a38 - store { ptr, i64, i64 } %t42, ptr %a44 - store { ptr, i64, i64 } { ptr @.str.6117, i64 2, i64 0 }, ptr %a45 - call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) - store { ptr, i64, i64 } %t42, ptr %a46 - call void @finch_str_drop(ptr %a46) - %t47 = load { ptr, i64, i64 }, ptr %a43 - %t48 = call { ptr, i64, i64 } @finch.gen.runtimeDecls() - store { ptr, i64, i64 } %t47, ptr %a50 - store { ptr, i64, i64 } %t48, ptr %a51 - call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) - store { ptr, i64, i64 } %t47, ptr %a52 - call void @finch_str_drop(ptr %a52) - store { ptr, i64, i64 } %t48, ptr %a53 - call void @finch_str_drop(ptr %a53) - %t54 = load { ptr, i64, i64 }, ptr %a49 - store { ptr, i64, i64 } %t54, ptr %a56 - store { ptr, i64, i64 } { ptr @.str.6118, i64 1, i64 0 }, ptr %a57 - call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) - store { ptr, i64, i64 } %t54, ptr %a58 - call void @finch_str_drop(ptr %a58) - %t59 = load { ptr, i64, i64 }, ptr %a55 - %t60 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t59, ptr %a2 - store { ptr, i64, i64 } %t60, ptr %a61 - call void @finch_str_drop(ptr %a61) - %t62 = load ptr, ptr %a1 - %t63 = icmp eq ptr %t62, null - br i1 %t63, label %panic9067, label %ok9068 + br label %logic.from9064 +logic.from9064: + br i1 %t7, label %logic.end9066, label %logic.rhs9065 +logic.rhs9065: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic9067, label %ok9068 panic9067: - call void @finch_panic(ptr @.str.6119, i64 5780, ptr @.str.6120) + call void @finch_panic(ptr @.str.6110, i64 5776, ptr @.str.6111) unreachable ok9068: - %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 30 - %t65 = load i1, ptr %t64 - br i1 %t65, label %then9069, label %endif9071 -then9069: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 31 + %t11 = getelementptr inbounds %S.platform.Target, ptr %t10, i32 0, i32 1 + %t12 = load i1, ptr %t11 + br label %logic.rend9069 +logic.rend9069: + br label %logic.end9066 +logic.end9066: + %t13 = phi i1 [ true, %logic.from9064 ], [ %t12, %logic.rend9069 ] + br i1 %t13, label %then9070, label %endif9072 +then9070: + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6112, i64 17, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic9073, label %ok9074 +panic9073: + call void @finch_panic(ptr @.str.6113, i64 5777, ptr @.str.6114) + unreachable +ok9074: + %t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 31 + %t22 = getelementptr inbounds %S.platform.Target, ptr %t21, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t18, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t18, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6115, i64 3, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a2 + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_str_drop(ptr %a35) + br label %endif9072 +endif9072: + %t36 = load { ptr, i64, i64 }, ptr %a2 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic9075, label %ok9076 +panic9075: + call void @finch_panic(ptr @.str.6116, i64 5779, ptr @.str.6117) + unreachable +ok9076: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 2 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6118, i64 1, i64 0 }, ptr %a41 + call void @finch_str_join(ptr %a42, ptr %t39, ptr %a41) + %t43 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t36, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6119, i64 2, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = call { ptr, i64, i64 } @finch.gen.runtimeDecls() + store { ptr, i64, i64 } %t53, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t53, ptr %a58 + call void @finch_str_drop(ptr %a58) + store { ptr, i64, i64 } %t54, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.6120, i64 1, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 %t66 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t66, ptr %a68 - store { ptr, i64, i64 } { ptr @.str.6121, i64 62, i64 0 }, ptr %a69 - call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) - %t70 = load { ptr, i64, i64 }, ptr %a67 - %t71 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t70, ptr %a2 - store { ptr, i64, i64 } %t71, ptr %a72 - call void @finch_str_drop(ptr %a72) - br label %endif9071 -endif9071: - %t73 = load { ptr, i64, i64 }, ptr %a2 - %t74 = load ptr, ptr %a1 - %t75 = icmp eq ptr %t74, null - br i1 %t75, label %panic9072, label %ok9073 -panic9072: - call void @finch_panic(ptr @.str.6122, i64 5783, ptr @.str.6123) + store { ptr, i64, i64 } %t65, ptr %a2 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic9077, label %ok9078 +panic9077: + call void @finch_panic(ptr @.str.6121, i64 5780, ptr @.str.6122) unreachable -ok9073: - %t76 = getelementptr inbounds %S.gen.Gen, ptr %t74, i32 0, i32 3 - %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6124, i64 1, i64 0 }, ptr %a78 - call void @finch_str_join(ptr %a79, ptr %t76, ptr %a78) - %t80 = load { ptr, i64, i64 }, ptr %a79 - store { ptr, i64, i64 } %t73, ptr %a82 - store { ptr, i64, i64 } %t80, ptr %a83 - call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) - store { ptr, i64, i64 } %t80, ptr %a84 - call void @finch_str_drop(ptr %a84) - %t85 = load { ptr, i64, i64 }, ptr %a81 - %t86 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t85, ptr %a2 - store { ptr, i64, i64 } %t86, ptr %a87 - call void @finch_str_drop(ptr %a87) - %t88 = load ptr, ptr %a1 - %t89 = icmp eq ptr %t88, null - br i1 %t89, label %panic9074, label %ok9075 -panic9074: - call void @finch_panic(ptr @.str.6125, i64 5784, ptr @.str.6126) +ok9078: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 30 + %t71 = load i1, ptr %t70 + br i1 %t71, label %then9079, label %endif9081 +then9079: + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6123, i64 62, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a73 + %t77 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a2 + store { ptr, i64, i64 } %t77, ptr %a78 + call void @finch_str_drop(ptr %a78) + br label %endif9081 +endif9081: + %t79 = load { ptr, i64, i64 }, ptr %a2 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic9082, label %ok9083 +panic9082: + call void @finch_panic(ptr @.str.6124, i64 5783, ptr @.str.6125) unreachable -ok9075: - %t90 = getelementptr inbounds %S.gen.Gen, ptr %t88, i32 0, i32 30 - %t91 = load i1, ptr %t90 - br i1 %t91, label %then9076, label %endif9078 -then9076: +ok9083: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 3 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6126, i64 1, i64 0 }, ptr %a84 + call void @finch_str_join(ptr %a85, ptr %t82, ptr %a84) + %t86 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t79, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t86, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 %t92 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t92, ptr %a94 - store { ptr, i64, i64 } { ptr @.str.6127, i64 1, i64 0 }, ptr %a95 - call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) - %t96 = load { ptr, i64, i64 }, ptr %a93 - %t97 = load ptr, ptr %a1 - %t98 = call { ptr, i64, i64 } @finch.gen.dbgModule(ptr %t97) - store { ptr, i64, i64 } %t96, ptr %a100 - store { ptr, i64, i64 } %t98, ptr %a101 + store { ptr, i64, i64 } %t91, ptr %a2 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic9084, label %ok9085 +panic9084: + call void @finch_panic(ptr @.str.6127, i64 5784, ptr @.str.6128) + unreachable +ok9085: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 30 + %t97 = load i1, ptr %t96 + br i1 %t97, label %then9086, label %endif9088 +then9086: + %t98 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6129, i64 1, i64 0 }, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) - store { ptr, i64, i64 } %t96, ptr %a102 - call void @finch_str_drop(ptr %a102) - store { ptr, i64, i64 } %t98, ptr %a103 - call void @finch_str_drop(ptr %a103) - %t104 = load { ptr, i64, i64 }, ptr %a99 - %t105 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t104, ptr %a2 - store { ptr, i64, i64 } %t105, ptr %a106 - call void @finch_str_drop(ptr %a106) - br label %endif9078 -endif9078: - %t107 = load { ptr, i64, i64 }, ptr %a2 - ret { ptr, i64, i64 } %t107 + %t102 = load { ptr, i64, i64 }, ptr %a99 + %t103 = load ptr, ptr %a1 + %t104 = call { ptr, i64, i64 } @finch.gen.dbgModule(ptr %t103) + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a105 + %t111 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t110, ptr %a2 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + br label %endif9088 +endif9088: + %t113 = load { ptr, i64, i64 }, ptr %a2 + ret { ptr, i64, i64 } %t113 } define internal void @finch.copy.arr_S_ast_Program(ptr %dst, ptr %src) { @@ -95357,20 +95402,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond9079 -n.cond9079: + br label %n.cond9089 +n.cond9089: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body9080, label %n.end9081 -n.body9080: + br i1 %t7, label %n.body9090, label %n.end9091 +n.body9090: %t8 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.ast.Program, ptr %t2, i64 %t6 call void @finch.copy.S_ast_Program(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond9079 -n.end9081: + br label %n.cond9089 +n.end9091: ret void } @@ -95404,12 +95449,12 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond9082 -n.cond9082: + br label %n.cond9092 +n.cond9092: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9083, label %n.end9084 -n.body9083: + br i1 %t5, label %n.body9093, label %n.end9094 +n.body9093: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 @@ -95419,94 +95464,14 @@ n.body9083: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 - br i1 %t14, label %entry.live9085, label %entry.next9086 -entry.live9085: + br i1 %t14, label %entry.live9095, label %entry.next9096 +entry.live9095: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_cimport_CFunc(ptr %t17, ptr %t18) - br label %entry.next9086 -entry.next9086: - %t19 = load i64, ptr %a3 - %t20 = add i64 %t19, 1 - store i64 %t20, ptr %a3 - br label %n.cond9082 -n.end9084: - ret void -} - -define internal void @finch.copy.map_str_S_cimport_CConst(ptr %dst, ptr %src) { -entry: - %a3 = alloca i64, align 16 - call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64)) - %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 - %t2 = load i64, ptr %t1 - store i64 0, ptr %a3 - br label %n.cond9087 -n.cond9087: - %t4 = load i64, ptr %a3 - %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9088, label %n.end9089 -n.body9088: - %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 - %t7 = load ptr, ptr %t6 - %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 - %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 - %t10 = load ptr, ptr %t9 - %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t10, i64 %t4 - %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 - %t13 = load i64, ptr %t12 - %t14 = icmp ne i64 %t13, 0 - br i1 %t14, label %entry.live9090, label %entry.next9091 -entry.live9090: - %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 1 - %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 - call void @finch_str_copy(ptr %t15, ptr %t16) - %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 2 - %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 - call void @finch.copy.S_cimport_CConst(ptr %t17, ptr %t18) - br label %entry.next9091 -entry.next9091: - %t19 = load i64, ptr %a3 - %t20 = add i64 %t19, 1 - store i64 %t20, ptr %a3 - br label %n.cond9087 -n.end9089: - ret void -} - -define internal void @finch.copy.map_str_S_ast_Type(ptr %dst, ptr %src) { -entry: - %a3 = alloca i64, align 16 - call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64)) - %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 - %t2 = load i64, ptr %t1 - store i64 0, ptr %a3 - br label %n.cond9092 -n.cond9092: - %t4 = load i64, ptr %a3 - %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9093, label %n.end9094 -n.body9093: - %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 - %t7 = load ptr, ptr %t6 - %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 - %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 - %t10 = load ptr, ptr %t9 - %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t10, i64 %t4 - %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 - %t13 = load i64, ptr %t12 - %t14 = icmp ne i64 %t13, 0 - br i1 %t14, label %entry.live9095, label %entry.next9096 -entry.live9095: - %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 1 - %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 - call void @finch_str_copy(ptr %t15, ptr %t16) - %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 2 - %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 - call void @finch.copy.S_ast_Type(ptr %t17, ptr %t18) br label %entry.next9096 entry.next9096: %t19 = load i64, ptr %a3 @@ -95517,10 +95482,10 @@ n.end9094: ret void } -define internal void @finch.copy.map_str_S_cimport_CStruct(ptr %dst, ptr %src) { +define internal void @finch.copy.map_str_S_cimport_CConst(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 - call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64)) + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 @@ -95532,21 +95497,21 @@ n.cond9097: n.body9098: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 - %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 - %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t10, i64 %t4 - %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live9100, label %entry.next9101 entry.live9100: - %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 1 - %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) - %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 2 - %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 - call void @finch.copy.S_cimport_CStruct(ptr %t17, ptr %t18) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CConst(ptr %t17, ptr %t18) br label %entry.next9101 entry.next9101: %t19 = load i64, ptr %a3 @@ -95557,6 +95522,86 @@ n.end9099: ret void } +define internal void @finch.copy.map_str_S_ast_Type(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9102 +n.cond9102: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9103, label %n.end9104 +n.body9103: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9105, label %entry.next9106 +entry.live9105: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_ast_Type(ptr %t17, ptr %t18) + br label %entry.next9106 +entry.next9106: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9102 +n.end9104: + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CStruct(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9107 +n.cond9107: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9108, label %n.end9109 +n.body9108: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9110, label %entry.next9111 +entry.live9110: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CStruct(ptr %t17, ptr %t18) + br label %entry.next9111 +entry.next9111: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9107 +n.end9109: + ret void +} + define internal void @finch.copy.S_cimport_CImports(ptr %dst, ptr %src) { entry: @@ -95587,19 +95632,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9170 -n.cond9170: + br label %n.cond9180 +n.cond9180: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9171, label %n.end9172 -n.body9171: + br i1 %t6, label %n.body9181, label %n.end9182 +n.body9181: %t7 = getelementptr inbounds %S.gen.Pending, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Pending(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9170 -n.end9172: + br label %n.cond9180 +n.end9182: call void @finch_arr_free(ptr %a) ret void } @@ -95611,19 +95656,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9173 -n.cond9173: + br label %n.cond9183 +n.cond9183: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9174, label %n.end9175 -n.body9174: + br i1 %t6, label %n.body9184, label %n.end9185 +n.body9184: %t7 = getelementptr inbounds %S.gen.Loop, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Loop(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9173 -n.end9175: + br label %n.cond9183 +n.end9185: call void @finch_arr_free(ptr %a) ret void } @@ -95635,19 +95680,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9176 -n.cond9176: + br label %n.cond9186 +n.cond9186: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9177, label %n.end9178 -n.body9177: + br i1 %t6, label %n.body9187, label %n.end9188 +n.body9187: %t7 = getelementptr inbounds %S.gen.FnSig, ptr %t1, i64 %t5 call void @finch.drop.S_gen_FnSig(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9176 -n.end9178: + br label %n.cond9186 +n.end9188: call void @finch_arr_free(ptr %a) ret void } @@ -95659,19 +95704,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9179 -n.cond9179: + br label %n.cond9189 +n.cond9189: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9180, label %n.end9181 -n.body9180: + br i1 %t6, label %n.body9190, label %n.end9191 +n.body9190: %t7 = getelementptr inbounds %S.gen.StructDef, ptr %t1, i64 %t5 call void @finch.drop.S_gen_StructDef(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9179 -n.end9181: + br label %n.cond9189 +n.end9191: call void @finch_arr_free(ptr %a) ret void } @@ -95683,19 +95728,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9182 -n.cond9182: + br label %n.cond9192 +n.cond9192: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9183, label %n.end9184 -n.body9183: + br i1 %t6, label %n.body9193, label %n.end9194 +n.body9193: %t7 = getelementptr inbounds %S.gen.Template, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Template(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9182 -n.end9184: + br label %n.cond9192 +n.end9194: call void @finch_arr_free(ptr %a) ret void } @@ -95707,19 +95752,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9185 -n.cond9185: + br label %n.cond9195 +n.cond9195: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9186, label %n.end9187 -n.body9186: + br i1 %t6, label %n.body9196, label %n.end9197 +n.body9196: %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %t1, i64 %t5 call void @finch.drop.S_gen_EnumDef(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9185 -n.end9187: + br label %n.cond9195 +n.end9197: call void @finch_arr_free(ptr %a) ret void } @@ -95731,19 +95776,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9188 -n.cond9188: + br label %n.cond9198 +n.cond9198: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9189, label %n.end9190 -n.body9189: + br i1 %t6, label %n.body9199, label %n.end9200 +n.body9199: %t7 = getelementptr inbounds %S.gen.SumDef, ptr %t1, i64 %t5 call void @finch.drop.S_gen_SumDef(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9188 -n.end9190: + br label %n.cond9198 +n.end9200: call void @finch_arr_free(ptr %a) ret void } @@ -95754,30 +95799,30 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond9191 -n.cond9191: + br label %n.cond9201 +n.cond9201: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9192, label %n.end9193 -n.body9192: + br i1 %t5, label %n.body9202, label %n.end9203 +n.body9202: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live9194, label %entry.next9195 -entry.live9194: + br i1 %t11, label %entry.live9204, label %entry.next9205 +entry.live9204: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 2 - br label %entry.next9195 -entry.next9195: + br label %entry.next9205 +entry.next9205: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond9191 -n.end9193: + br label %n.cond9201 +n.end9203: call void @finch_map_free(ptr %a) ret void } @@ -96087,22 +96132,22 @@ entry: store ptr %a45, ptr %a46 %t47 = load ptr, ptr %a46 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic9102, label %ok9103 -panic9102: - call void @finch_panic(ptr @.str.6128, i64 5794, ptr @.str.6129) + br i1 %t48, label %panic9112, label %ok9113 +panic9112: + call void @finch_panic(ptr @.str.6130, i64 5794, ptr @.str.6131) unreachable -ok9103: +ok9113: %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 30 %t50 = load i1, ptr %t49 - br i1 %t50, label %then9104, label %endif9106 -then9104: + br i1 %t50, label %then9114, label %endif9116 +then9114: %t51 = load ptr, ptr %a46 %t52 = icmp eq ptr %t51, null - br i1 %t52, label %panic9107, label %ok9108 -panic9107: - call void @finch_panic(ptr @.str.6130, i64 5796, ptr @.str.6131) + br i1 %t52, label %panic9117, label %ok9118 +panic9117: + call void @finch_panic(ptr @.str.6132, i64 5796, ptr @.str.6133) unreachable -ok9108: +ok9118: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 33 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 @@ -96110,15 +96155,15 @@ ok9108: call void @finch_arr_reserve(ptr %t53, i64 %t56, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t57 = load ptr, ptr %t53 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i64 %t55 - store { ptr, i64, i64 } { ptr @.str.6132, i64 0, i64 0 }, ptr %t58 + store { ptr, i64, i64 } { ptr @.str.6134, i64 0, i64 0 }, ptr %t58 store i64 %t56, ptr %t54 %t59 = load ptr, ptr %a46 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic9109, label %ok9110 -panic9109: - call void @finch_panic(ptr @.str.6133, i64 5797, ptr @.str.6134) + br i1 %t60, label %panic9119, label %ok9120 +panic9119: + call void @finch_panic(ptr @.str.6135, i64 5797, ptr @.str.6136) unreachable -ok9110: +ok9120: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 33 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1 %t63 = load i64, ptr %t62 @@ -96126,15 +96171,15 @@ ok9110: call void @finch_arr_reserve(ptr %t61, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t65 = load ptr, ptr %t61 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 - store { ptr, i64, i64 } { ptr @.str.6135, i64 33, i64 0 }, ptr %t66 + store { ptr, i64, i64 } { ptr @.str.6137, i64 33, i64 0 }, ptr %t66 store i64 %t64, ptr %t62 %t67 = load ptr, ptr %a46 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic9111, label %ok9112 -panic9111: - call void @finch_panic(ptr @.str.6136, i64 5798, ptr @.str.6137) + br i1 %t68, label %panic9121, label %ok9122 +panic9121: + call void @finch_panic(ptr @.str.6138, i64 5798, ptr @.str.6139) unreachable -ok9112: +ok9122: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 33 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 %t71 = load i64, ptr %t70 @@ -96142,49 +96187,49 @@ ok9112: call void @finch_arr_reserve(ptr %t69, i64 %t72, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t73 = load ptr, ptr %t69 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t71 - store { ptr, i64, i64 } { ptr @.str.6138, i64 38, i64 0 }, ptr %t74 + store { ptr, i64, i64 } { ptr @.str.6140, i64 38, i64 0 }, ptr %t74 store i64 %t72, ptr %t70 store i64 0, ptr %a75 - br label %each.cond9113 -each.cond9113: + br label %each.cond9123 +each.cond9123: %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t77 = load i64, ptr %t76 %t78 = load i64, ptr %a75 %t79 = icmp slt i64 %t78, %t77 - br i1 %t79, label %each.body9114, label %each.end9116 -each.body9114: + br i1 %t79, label %each.body9124, label %each.end9126 +each.body9124: %t80 = load ptr, ptr %a2 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i64 %t78 %t82 = load { ptr, i64, i64 }, ptr %t81 store { ptr, i64, i64 } %t82, ptr %a83 %t84 = load ptr, ptr %a46 %t85 = icmp eq ptr %t84, null - br i1 %t85, label %panic9117, label %ok9118 -panic9117: - call void @finch_panic(ptr @.str.6139, i64 5800, ptr @.str.6140) + br i1 %t85, label %panic9127, label %ok9128 +panic9127: + call void @finch_panic(ptr @.str.6141, i64 5800, ptr @.str.6142) unreachable -ok9118: +ok9128: %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 35 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load ptr, ptr %a46 %t89 = load { ptr, i64, i64 }, ptr %a83 - store { ptr, i64, i64 } { ptr @.str.6141, i64 19, i64 0 }, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.6143, i64 19, i64 0 }, ptr %a91 store { ptr, i64, i64 } %t89, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t93, ptr %a95 - store { ptr, i64, i64 } { ptr @.str.6142, i64 15, i64 0 }, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.6144, i64 15, i64 0 }, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) store { ptr, i64, i64 } %t93, ptr %a97 call void @finch_str_drop(ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a94 %t99 = load ptr, ptr %a46 %t100 = icmp eq ptr %t99, null - br i1 %t100, label %panic9119, label %ok9120 -panic9119: - call void @finch_panic(ptr @.str.6143, i64 5800, ptr @.str.6144) + br i1 %t100, label %panic9129, label %ok9130 +panic9129: + call void @finch_panic(ptr @.str.6145, i64 5800, ptr @.str.6146) unreachable -ok9120: +ok9130: %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 32 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t98, ptr %a104 @@ -96194,7 +96239,7 @@ ok9120: call void @finch_str_drop(ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t107, ptr %a109 - store { ptr, i64, i64 } { ptr @.str.6145, i64 2, i64 0 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.6147, i64 2, i64 0 }, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) store { ptr, i64, i64 } %t107, ptr %a111 call void @finch_str_drop(ptr %a111) @@ -96209,108 +96254,108 @@ ok9120: %t118 = getelementptr inbounds i64, ptr %t117, i64 %t115 store i64 %t113, ptr %t118 store i64 %t116, ptr %t87 - br label %each.step9115 -each.step9115: + br label %each.step9125 +each.step9125: %t119 = load i64, ptr %a75 %t120 = add i64 %t119, 1 store i64 %t120, ptr %a75 - br label %each.cond9113 -each.end9116: + br label %each.cond9123 +each.end9126: %t121 = load ptr, ptr %a46 %t122 = icmp eq ptr %t121, null - br i1 %t122, label %panic9121, label %ok9122 -panic9121: - call void @finch_panic(ptr @.str.6147, i64 5802, ptr @.str.6148) + br i1 %t122, label %panic9131, label %ok9132 +panic9131: + call void @finch_panic(ptr @.str.6149, i64 5802, ptr @.str.6150) unreachable -ok9122: +ok9132: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 35 %t124 = load { ptr, i64, i64 }, ptr %t123 %t125 = extractvalue { ptr, i64, i64 } %t124, 1 %t126 = icmp uge i64 0, %t125 - br i1 %t126, label %range9123, label %inrange9124 -range9123: - call void @finch_panic_index(ptr @.str.6149, i64 5802, i64 0, i64 %t125) + br i1 %t126, label %range9133, label %inrange9134 +range9133: + call void @finch_panic_index(ptr @.str.6151, i64 5802, i64 0, i64 %t125) unreachable -inrange9124: +inrange9134: %t127 = extractvalue { ptr, i64, i64 } %t124, 0 %t128 = getelementptr inbounds i64, ptr %t127, i64 0 %t129 = load i64, ptr %t128 call void @finch_str_from_int(ptr %a130, i64 %t129) %t131 = load { ptr, i64, i64 }, ptr %a130 - store { ptr, i64, i64 } { ptr @.str.6146, i64 52, i64 0 }, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.6148, i64 52, i64 0 }, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) store { ptr, i64, i64 } %t131, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t136, ptr %a138 - store { ptr, i64, i64 } { ptr @.str.6150, i64 84, i64 0 }, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.6152, i64 84, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a137 %t142 = load ptr, ptr %a46 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic9125, label %ok9126 -panic9125: - call void @finch_panic(ptr @.str.6151, i64 5802, ptr @.str.6152) + br i1 %t143, label %panic9135, label %ok9136 +panic9135: + call void @finch_panic(ptr @.str.6153, i64 5802, ptr @.str.6154) unreachable -ok9126: +ok9136: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 33 %t145 = load { ptr, i64, i64 }, ptr %t144 %t146 = extractvalue { ptr, i64, i64 } %t145, 1 %t147 = icmp uge i64 0, %t146 - br i1 %t147, label %range9127, label %inrange9128 -range9127: - call void @finch_panic_index(ptr @.str.6153, i64 5802, i64 0, i64 %t146) + br i1 %t147, label %range9137, label %inrange9138 +range9137: + call void @finch_panic_index(ptr @.str.6155, i64 5802, i64 0, i64 %t146) unreachable -inrange9128: +inrange9138: %t148 = extractvalue { ptr, i64, i64 } %t145, 0 %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i64 0 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } %t141, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 call void @finch_str_drop(ptr %a151) - br label %endif9106 -endif9106: + br label %endif9116 +endif9116: %t152 = load ptr, ptr %a46 call void @finch.gen.declare(ptr %t152) %t153 = load ptr, ptr %a46 - %t154 = call i64 @finch.gen.findFn(ptr %t153, { ptr, i64, i64 } { ptr @.str.6154, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6155, i64 4, i64 0 }) + %t154 = call i64 @finch.gen.findFn(ptr %t153, { ptr, i64, i64 } { ptr @.str.6156, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6157, i64 4, i64 0 }) store i64 %t154, ptr %a155 %t156 = load i1, ptr %a7 - br i1 %t156, label %then9129, label %else9130 -then9129: + br i1 %t156, label %then9139, label %else9140 +then9139: %t157 = load i64, ptr %a155 %t158 = icmp sge i64 %t157, 0 - br i1 %t158, label %then9132, label %endif9134 -then9132: + br i1 %t158, label %then9142, label %endif9144 +then9142: %t159 = load ptr, ptr %a46 %t160 = load ptr, ptr %a46 %t161 = icmp eq ptr %t160, null - br i1 %t161, label %panic9135, label %ok9136 -panic9135: - call void @finch_panic(ptr @.str.6156, i64 5808, ptr @.str.6157) + br i1 %t161, label %panic9145, label %ok9146 +panic9145: + call void @finch_panic(ptr @.str.6158, i64 5808, ptr @.str.6159) unreachable -ok9136: +ok9146: %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 0 %t163 = load ptr, ptr %a46 %t164 = icmp eq ptr %t163, null - br i1 %t164, label %panic9137, label %ok9138 -panic9137: - call void @finch_panic(ptr @.str.6158, i64 5808, ptr @.str.6159) + br i1 %t164, label %panic9147, label %ok9148 +panic9147: + call void @finch_panic(ptr @.str.6160, i64 5808, ptr @.str.6161) unreachable -ok9138: +ok9148: %t165 = getelementptr inbounds %S.gen.Gen, ptr %t163, i32 0, i32 15 %t166 = load i64, ptr %a155 %t167 = load { ptr, i64, i64 }, ptr %t165 %t168 = extractvalue { ptr, i64, i64 } %t167, 1 %t169 = icmp uge i64 %t166, %t168 - br i1 %t169, label %range9139, label %inrange9140 -range9139: - call void @finch_panic_index(ptr @.str.6160, i64 5808, i64 %t166, i64 %t168) + br i1 %t169, label %range9149, label %inrange9150 +range9149: + call void @finch_panic_index(ptr @.str.6162, i64 5808, i64 %t166, i64 %t168) unreachable -inrange9140: +inrange9150: %t170 = extractvalue { ptr, i64, i64 } %t167, 0 %t171 = getelementptr inbounds %S.gen.FnSig, ptr %t170, i64 %t166 %t172 = getelementptr inbounds %S.gen.FnSig, ptr %t171, i32 0, i32 16 @@ -96318,31 +96363,31 @@ inrange9140: %t174 = load { ptr, i64, i64 }, ptr %t162 %t175 = extractvalue { ptr, i64, i64 } %t174, 1 %t176 = icmp uge i64 %t173, %t175 - br i1 %t176, label %range9141, label %inrange9142 -range9141: - call void @finch_panic_index(ptr @.str.6161, i64 5808, i64 %t173, i64 %t175) + br i1 %t176, label %range9151, label %inrange9152 +range9151: + call void @finch_panic_index(ptr @.str.6163, i64 5808, i64 %t173, i64 %t175) unreachable -inrange9142: +inrange9152: %t177 = extractvalue { ptr, i64, i64 } %t174, 0 %t178 = getelementptr inbounds %S.ast.Program, ptr %t177, i64 %t173 %t179 = getelementptr inbounds %S.ast.Program, ptr %t178, i32 0, i32 8 %t180 = load ptr, ptr %a46 %t181 = icmp eq ptr %t180, null - br i1 %t181, label %panic9143, label %ok9144 -panic9143: - call void @finch_panic(ptr @.str.6162, i64 5808, ptr @.str.6163) + br i1 %t181, label %panic9153, label %ok9154 +panic9153: + call void @finch_panic(ptr @.str.6164, i64 5808, ptr @.str.6165) unreachable -ok9144: +ok9154: %t182 = getelementptr inbounds %S.gen.Gen, ptr %t180, i32 0, i32 15 %t183 = load i64, ptr %a155 %t184 = load { ptr, i64, i64 }, ptr %t182 %t185 = extractvalue { ptr, i64, i64 } %t184, 1 %t186 = icmp uge i64 %t183, %t185 - br i1 %t186, label %range9145, label %inrange9146 -range9145: - call void @finch_panic_index(ptr @.str.6164, i64 5808, i64 %t183, i64 %t185) + br i1 %t186, label %range9155, label %inrange9156 +range9155: + call void @finch_panic_index(ptr @.str.6166, i64 5808, i64 %t183, i64 %t185) unreachable -inrange9146: +inrange9156: %t187 = extractvalue { ptr, i64, i64 } %t184, 0 %t188 = getelementptr inbounds %S.gen.FnSig, ptr %t187, i64 %t183 %t189 = getelementptr inbounds %S.gen.FnSig, ptr %t188, i32 0, i32 17 @@ -96350,106 +96395,106 @@ inrange9146: %t191 = load { ptr, i64, i64 }, ptr %t179 %t192 = extractvalue { ptr, i64, i64 } %t191, 1 %t193 = icmp uge i64 %t190, %t192 - br i1 %t193, label %range9147, label %inrange9148 -range9147: - call void @finch_panic_index(ptr @.str.6165, i64 5808, i64 %t190, i64 %t192) + br i1 %t193, label %range9157, label %inrange9158 +range9157: + call void @finch_panic_index(ptr @.str.6167, i64 5808, i64 %t190, i64 %t192) unreachable -inrange9148: +inrange9158: %t194 = extractvalue { ptr, i64, i64 } %t191, 0 %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t190 %t196 = load %S.ast.Node, ptr %t195 - call void @finch.gen.fail(ptr %t159, %S.ast.Node %t196, { ptr, i64, i64 } { ptr @.str.6166, i64 82, i64 0 }) - br label %endif9134 -endif9134: - br label %endif9131 -else9130: + call void @finch.gen.fail(ptr %t159, %S.ast.Node %t196, { ptr, i64, i64 } { ptr @.str.6168, i64 82, i64 0 }) + br label %endif9144 +endif9144: + br label %endif9141 +else9140: %t197 = load i64, ptr %a155 %t198 = icmp slt i64 %t197, 0 - br i1 %t198, label %then9149, label %endif9151 -then9149: + br i1 %t198, label %then9159, label %endif9161 +then9159: %t199 = load { ptr, i64, i64 }, ptr %a2 %t200 = extractvalue { ptr, i64, i64 } %t199, 1 %t201 = icmp uge i64 0, %t200 - br i1 %t201, label %range9152, label %inrange9153 -range9152: - call void @finch_panic_index(ptr @.str.6167, i64 5811, i64 0, i64 %t200) + br i1 %t201, label %range9162, label %inrange9163 +range9162: + call void @finch_panic_index(ptr @.str.6169, i64 5811, i64 0, i64 %t200) unreachable -inrange9153: +inrange9163: %t202 = extractvalue { ptr, i64, i64 } %t199, 0 %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 0 %t204 = load { ptr, i64, i64 }, ptr %t203 store { ptr, i64, i64 } %t204, ptr %a206 - store { ptr, i64, i64 } { ptr @.str.6168, i64 64, i64 0 }, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.6170, i64 64, i64 0 }, ptr %a207 call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207) %t208 = load { ptr, i64, i64 }, ptr %a205 %t209 = extractvalue { ptr, i64, i64 } %t208, 1 %t210 = trunc i64 %t209 to i32 %t211 = extractvalue { ptr, i64, i64 } %t208, 0 %t212 = icmp eq ptr %t211, null - %t213 = select i1 %t212, ptr @.str.6169, ptr %t211 - %t214 = call i32 (ptr, ...) @printf(ptr @.str.6170, i32 %t210, ptr %t213) + %t213 = select i1 %t212, ptr @.str.6171, ptr %t211 + %t214 = call i32 (ptr, ...) @printf(ptr @.str.6172, i32 %t210, ptr %t213) store { ptr, i64, i64 } %t208, ptr %a215 call void @finch_str_drop(ptr %a215) - %t216 = call i32 (ptr, ...) @printf(ptr @.str.6171) + %t216 = call i32 (ptr, ...) @printf(ptr @.str.6173) %t217 = trunc i64 1 to i32 %t218 = call i32 @fflush(ptr null) call void @exit(i32 %t217) - br label %endif9151 -endif9151: - br label %endif9131 -endif9131: + br label %endif9161 +endif9161: + br label %endif9141 +endif9141: store i64 0, ptr %a219 - br label %while.cond9154 -while.cond9154: + br label %while.cond9164 +while.cond9164: %t220 = load i64, ptr %a219 %t221 = load ptr, ptr %a46 %t222 = icmp eq ptr %t221, null - br i1 %t222, label %panic9157, label %ok9158 -panic9157: - call void @finch_panic(ptr @.str.6172, i64 5816, ptr @.str.6173) + br i1 %t222, label %panic9167, label %ok9168 +panic9167: + call void @finch_panic(ptr @.str.6174, i64 5816, ptr @.str.6175) unreachable -ok9158: +ok9168: %t223 = getelementptr inbounds %S.gen.Gen, ptr %t221, i32 0, i32 15 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 %t225 = load i64, ptr %t224 %t226 = icmp slt i64 %t220, %t225 - br i1 %t226, label %while.body9155, label %while.end9156 -while.body9155: + br i1 %t226, label %while.body9165, label %while.end9166 +while.body9165: %t227 = load ptr, ptr %a46 %t228 = load i64, ptr %a219 call void @finch.gen.define(ptr %t227, i64 %t228) %t229 = load i64, ptr %a219 %t230 = add i64 %t229, 1 store i64 %t230, ptr %a219 - br label %while.cond9154 -while.end9156: + br label %while.cond9164 +while.end9166: %t231 = load ptr, ptr %a46 %t232 = icmp eq ptr %t231, null - br i1 %t232, label %panic9159, label %ok9160 -panic9159: - call void @finch_panic(ptr @.str.6174, i64 5820, ptr @.str.6175) + br i1 %t232, label %panic9169, label %ok9170 +panic9169: + call void @finch_panic(ptr @.str.6176, i64 5820, ptr @.str.6177) unreachable -ok9160: +ok9170: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 28 %t234 = load i1, ptr %t233 - br i1 %t234, label %then9161, label %endif9163 -then9161: + br i1 %t234, label %then9171, label %endif9173 +then9171: %t235 = load ptr, ptr %a46 %t236 = icmp eq ptr %t235, null - br i1 %t236, label %panic9164, label %ok9165 -panic9164: - call void @finch_panic(ptr @.str.6176, i64 5821, ptr @.str.6177) + br i1 %t236, label %panic9174, label %ok9175 +panic9174: + call void @finch_panic(ptr @.str.6178, i64 5821, ptr @.str.6179) unreachable -ok9165: +ok9175: %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 0 %t238 = load { ptr, i64, i64 }, ptr %t237 %t239 = extractvalue { ptr, i64, i64 } %t238, 1 %t240 = icmp uge i64 0, %t239 - br i1 %t240, label %range9166, label %inrange9167 -range9166: - call void @finch_panic_index(ptr @.str.6178, i64 5821, i64 0, i64 %t239) + br i1 %t240, label %range9176, label %inrange9177 +range9176: + call void @finch_panic_index(ptr @.str.6180, i64 5821, i64 0, i64 %t239) unreachable -inrange9167: +inrange9177: %t241 = extractvalue { ptr, i64, i64 } %t238, 0 %t242 = getelementptr inbounds %S.ast.Program, ptr %t241, i64 0 %t243 = getelementptr inbounds %S.ast.Program, ptr %t242, i32 0, i32 2 @@ -96463,97 +96508,97 @@ inrange9167: call void @finch.gen.indexAll(ptr %t249, { ptr, i64, i64 } %t250) %t251 = load ptr, ptr %a46 %t252 = icmp eq ptr %t251, null - br i1 %t252, label %panic9168, label %ok9169 -panic9168: - call void @finch_panic(ptr @.str.6179, i64 5823, ptr @.str.6180) + br i1 %t252, label %panic9178, label %ok9179 +panic9178: + call void @finch_panic(ptr @.str.6181, i64 5823, ptr @.str.6182) unreachable -ok9169: +ok9179: %t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 29 %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6181, i64 1, i64 0 }, ptr %a255 + store { ptr, i64, i64 } { ptr @.str.6183, i64 1, i64 0 }, ptr %a255 call void @finch_str_join(ptr %a256, ptr %t253, ptr %a255) %t257 = load { ptr, i64, i64 }, ptr %a256 call void @finch.drop.arr_str(ptr %a248) call void @finch.drop.S_gen_Gen(ptr %a45) ret { ptr, i64, i64 } %t257 -endif9163: +endif9173: %t258 = load ptr, ptr %a46 %t259 = icmp eq ptr %t258, null - br i1 %t259, label %panic9196, label %ok9197 -panic9196: - call void @finch_panic(ptr @.str.6182, i64 5825, ptr @.str.6183) + br i1 %t259, label %panic9206, label %ok9207 +panic9206: + call void @finch_panic(ptr @.str.6184, i64 5825, ptr @.str.6185) unreachable -ok9197: +ok9207: %t260 = getelementptr inbounds %S.gen.Gen, ptr %t258, i32 0, i32 15 store i64 0, ptr %a261 - br label %each.cond9198 -each.cond9198: + br label %each.cond9208 +each.cond9208: %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 %t263 = load i64, ptr %t262 %t264 = load i64, ptr %a261 %t265 = icmp slt i64 %t264, %t263 - br i1 %t265, label %each.body9199, label %each.end9201 -each.body9199: + br i1 %t265, label %each.body9209, label %each.end9211 +each.body9209: %t266 = load ptr, ptr %t260 %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i64 %t264 %t268 = load %S.gen.FnSig, ptr %t267 store %S.gen.FnSig %t268, ptr %a269 %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a269, i32 0, i32 5 %t271 = load i1, ptr %t270 - br i1 %t271, label %then9202, label %endif9204 -then9202: + br i1 %t271, label %then9212, label %endif9214 +then9212: %t272 = load ptr, ptr %a46 %t273 = load %S.gen.FnSig, ptr %a269 %t274 = call { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %t272, %S.gen.FnSig %t273) store { ptr, i64, i64 } %t274, ptr %a275 call void @finch_str_drop(ptr %a275) - br label %endif9204 -endif9204: - br label %each.step9200 -each.step9200: + br label %endif9214 +endif9214: + br label %each.step9210 +each.step9210: %t276 = load i64, ptr %a261 %t277 = add i64 %t276, 1 store i64 %t277, ptr %a261 - br label %each.cond9198 -each.end9201: + br label %each.cond9208 +each.end9211: %t278 = load i1, ptr %a7 - br i1 %t278, label %then9205, label %endif9207 -then9205: - store { ptr, i64, i64 } { ptr @.str.6184, i64 0, i64 0 }, ptr %a279 + br i1 %t278, label %then9215, label %endif9217 +then9215: + store { ptr, i64, i64 } { ptr @.str.6186, i64 0, i64 0 }, ptr %a279 %t280 = load ptr, ptr %a46 %t281 = icmp eq ptr %t280, null - br i1 %t281, label %panic9208, label %ok9209 -panic9208: - call void @finch_panic(ptr @.str.6185, i64 5833, ptr @.str.6186) + br i1 %t281, label %panic9218, label %ok9219 +panic9218: + call void @finch_panic(ptr @.str.6187, i64 5833, ptr @.str.6188) unreachable -ok9209: +ok9219: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 31 %t283 = getelementptr inbounds %S.platform.Target, ptr %t282, i32 0, i32 1 %t284 = load i1, ptr %t283 - br i1 %t284, label %then9210, label %endif9212 -then9210: + br i1 %t284, label %then9220, label %endif9222 +then9220: %t285 = load { ptr, i64, i64 }, ptr %a279 - store { ptr, i64, i64 } { ptr @.str.6187, i64 10, i64 0 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6189, i64 10, i64 0 }, ptr %a279 store { ptr, i64, i64 } %t285, ptr %a286 call void @finch_str_drop(ptr %a286) - br label %endif9212 -endif9212: + br label %endif9222 +endif9222: %t287 = load ptr, ptr %a46 %t288 = icmp eq ptr %t287, null - br i1 %t288, label %panic9213, label %ok9214 -panic9213: - call void @finch_panic(ptr @.str.6188, i64 5836, ptr @.str.6189) + br i1 %t288, label %panic9223, label %ok9224 +panic9223: + call void @finch_panic(ptr @.str.6190, i64 5836, ptr @.str.6191) unreachable -ok9214: +ok9224: %t289 = getelementptr inbounds %S.gen.Gen, ptr %t287, i32 0, i32 3 %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 %t291 = load { ptr, i64, i64 }, ptr %a279 - store { ptr, i64, i64 } { ptr @.str.6190, i64 6, i64 0 }, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.6192, i64 6, i64 0 }, ptr %a293 store { ptr, i64, i64 } %t291, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a292 store { ptr, i64, i64 } %t295, ptr %a297 - store { ptr, i64, i64 } { ptr @.str.6191, i64 107, i64 0 }, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.6193, i64 107, i64 0 }, ptr %a298 call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) store { ptr, i64, i64 } %t295, ptr %a299 call void @finch_str_drop(ptr %a299) @@ -96570,24 +96615,24 @@ ok9214: call void @finch_str_drop(ptr %a279) call void @finch.drop.S_gen_Gen(ptr %a45) ret { ptr, i64, i64 } %t306 -endif9207: +endif9217: %t307 = load ptr, ptr %a46 %t308 = icmp eq ptr %t307, null - br i1 %t308, label %panic9215, label %ok9216 -panic9215: - call void @finch_panic(ptr @.str.6192, i64 5840, ptr @.str.6193) + br i1 %t308, label %panic9225, label %ok9226 +panic9225: + call void @finch_panic(ptr @.str.6194, i64 5840, ptr @.str.6195) unreachable -ok9216: +ok9226: %t309 = getelementptr inbounds %S.gen.Gen, ptr %t307, i32 0, i32 15 %t310 = load i64, ptr %a155 %t311 = load { ptr, i64, i64 }, ptr %t309 %t312 = extractvalue { ptr, i64, i64 } %t311, 1 %t313 = icmp uge i64 %t310, %t312 - br i1 %t313, label %range9217, label %inrange9218 -range9217: - call void @finch_panic_index(ptr @.str.6194, i64 5840, i64 %t310, i64 %t312) + br i1 %t313, label %range9227, label %inrange9228 +range9227: + call void @finch_panic_index(ptr @.str.6196, i64 5840, i64 %t310, i64 %t312) unreachable -inrange9218: +inrange9228: %t314 = extractvalue { ptr, i64, i64 } %t311, 0 %t315 = getelementptr inbounds %S.gen.FnSig, ptr %t314, i64 %t310 %t316 = load %S.gen.FnSig, ptr %t315 @@ -96598,14 +96643,14 @@ inrange9218: %t321 = load ptr, ptr %a46 %t322 = load %S.gen.FnSig, ptr %a320 %t323 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t321, %S.gen.FnSig %t322) - store { ptr, i64, i64 } { ptr @.str.6195, i64 5, i64 0 }, ptr %a325 + store { ptr, i64, i64 } { ptr @.str.6197, i64 5, i64 0 }, ptr %a325 store { ptr, i64, i64 } %t323, ptr %a326 call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) store { ptr, i64, i64 } %t323, ptr %a327 call void @finch_str_drop(ptr %a327) %t328 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } %t328, ptr %a330 - store { ptr, i64, i64 } { ptr @.str.6196, i64 1, i64 0 }, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.6198, i64 1, i64 0 }, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) store { ptr, i64, i64 } %t328, ptr %a332 call void @finch_str_drop(ptr %a332) @@ -96619,50 +96664,50 @@ inrange9218: call void @finch_str_drop(ptr %a339) %t340 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } %t340, ptr %a342 - store { ptr, i64, i64 } { ptr @.str.6197, i64 1, i64 0 }, ptr %a343 + store { ptr, i64, i64 } { ptr @.str.6199, i64 1, i64 0 }, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) store { ptr, i64, i64 } %t340, ptr %a344 call void @finch_str_drop(ptr %a344) %t345 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t345, ptr %a346 - store { ptr, i64, i64 } { ptr @.str.6198, i64 0, i64 0 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6200, i64 0, i64 0 }, ptr %a347 %t348 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 13 %t349 = getelementptr inbounds { ptr, i64, i64 }, ptr %t348, i32 0, i32 1 %t350 = load i64, ptr %t349 %t351 = icmp eq i64 %t350, 1 - br i1 %t351, label %then9219, label %endif9221 -then9219: + br i1 %t351, label %then9229, label %endif9231 +then9229: %t352 = load { ptr, i64, i64 }, ptr %a347 - store { ptr, i64, i64 } { ptr @.str.6199, i64 133, i64 0 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6201, i64 133, i64 0 }, ptr %a347 store { ptr, i64, i64 } %t352, ptr %a353 call void @finch_str_drop(ptr %a353) %t354 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t354, ptr %a356 - store { ptr, i64, i64 } { ptr @.str.6200, i64 20, i64 0 }, ptr %a357 + store { ptr, i64, i64 } { ptr @.str.6202, i64 20, i64 0 }, ptr %a357 call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) %t358 = load { ptr, i64, i64 }, ptr %a355 %t359 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t358, ptr %a346 store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) - br label %endif9221 -endif9221: + br label %endif9231 +endif9231: %t361 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t361, ptr %a363 - store { ptr, i64, i64 } { ptr @.str.6201, i64 1, i64 0 }, ptr %a364 + store { ptr, i64, i64 } { ptr @.str.6203, i64 1, i64 0 }, ptr %a364 call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) %t365 = load { ptr, i64, i64 }, ptr %a362 %t366 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t365, ptr %a346 store { ptr, i64, i64 } %t366, ptr %a367 call void @finch_str_drop(ptr %a367) - store { ptr, i64, i64 } { ptr @.str.6202, i64 12, i64 0 }, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.6204, i64 12, i64 0 }, ptr %a368 %t369 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 9 %t370 = load i1, ptr %t369 - br i1 %t370, label %then9222, label %else9223 -then9222: + br i1 %t370, label %then9232, label %else9233 +then9232: %t371 = load { ptr, i64, i64 }, ptr %a346 - store { ptr, i64, i64 } { ptr @.str.6203, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.6205, i64 5, i64 0 }, ptr %a373 store { ptr, i64, i64 } %t371, ptr %a374 call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) %t375 = load { ptr, i64, i64 }, ptr %a372 @@ -96672,7 +96717,7 @@ then9222: call void @finch_str_drop(ptr %a377) %t378 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t378, ptr %a380 - store { ptr, i64, i64 } { ptr @.str.6204, i64 2, i64 0 }, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.6206, i64 2, i64 0 }, ptr %a381 call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a379 %t383 = load { ptr, i64, i64 }, ptr %a346 @@ -96683,7 +96728,7 @@ then9222: call void @finch_str_drop(ptr %a387) %t388 = load { ptr, i64, i64 }, ptr %a384 store { ptr, i64, i64 } %t388, ptr %a390 - store { ptr, i64, i64 } { ptr @.str.6205, i64 1, i64 0 }, ptr %a391 + store { ptr, i64, i64 } { ptr @.str.6207, i64 1, i64 0 }, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) store { ptr, i64, i64 } %t388, ptr %a392 call void @finch_str_drop(ptr %a392) @@ -96693,7 +96738,7 @@ then9222: store { ptr, i64, i64 } %t394, ptr %a395 call void @finch_str_drop(ptr %a395) %t396 = load { ptr, i64, i64 }, ptr %a346 - store { ptr, i64, i64 } { ptr @.str.6206, i64 0, i64 0 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6208, i64 0, i64 0 }, ptr %a346 store { ptr, i64, i64 } %t396, ptr %a397 call void @finch_str_drop(ptr %a397) %t398 = load ptr, ptr %a46 @@ -96702,7 +96747,7 @@ then9222: store { ptr, i64, i64 } %t400, ptr %a401 %t402 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t402, ptr %a404 - store { ptr, i64, i64 } { ptr @.str.6207, i64 21, i64 0 }, ptr %a405 + store { ptr, i64, i64 } { ptr @.str.6209, i64 21, i64 0 }, ptr %a405 call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) %t406 = load { ptr, i64, i64 }, ptr %a403 %t407 = load { ptr, i64, i64 }, ptr %a401 @@ -96713,7 +96758,7 @@ then9222: call void @finch_str_drop(ptr %a411) %t412 = load { ptr, i64, i64 }, ptr %a408 store { ptr, i64, i64 } %t412, ptr %a414 - store { ptr, i64, i64 } { ptr @.str.6208, i64 62, i64 0 }, ptr %a415 + store { ptr, i64, i64 } { ptr @.str.6210, i64 62, i64 0 }, ptr %a415 call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) store { ptr, i64, i64 } %t412, ptr %a416 call void @finch_str_drop(ptr %a416) @@ -96724,7 +96769,7 @@ then9222: call void @finch_str_drop(ptr %a419) %t420 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t420, ptr %a422 - store { ptr, i64, i64 } { ptr @.str.6209, i64 20, i64 0 }, ptr %a423 + store { ptr, i64, i64 } { ptr @.str.6211, i64 20, i64 0 }, ptr %a423 call void @finch_str_concat(ptr %a421, ptr %a422, ptr %a423) %t424 = load { ptr, i64, i64 }, ptr %a421 %t425 = load { ptr, i64, i64 }, ptr %a401 @@ -96735,7 +96780,7 @@ then9222: call void @finch_str_drop(ptr %a429) %t430 = load { ptr, i64, i64 }, ptr %a426 store { ptr, i64, i64 } %t430, ptr %a432 - store { ptr, i64, i64 } { ptr @.str.6210, i64 78, i64 0 }, ptr %a433 + store { ptr, i64, i64 } { ptr @.str.6212, i64 78, i64 0 }, ptr %a433 call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) store { ptr, i64, i64 } %t430, ptr %a434 call void @finch_str_drop(ptr %a434) @@ -96746,7 +96791,7 @@ then9222: call void @finch_str_drop(ptr %a437) %t438 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t438, ptr %a440 - store { ptr, i64, i64 } { ptr @.str.6211, i64 62, i64 0 }, ptr %a441 + store { ptr, i64, i64 } { ptr @.str.6213, i64 62, i64 0 }, ptr %a441 call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) %t442 = load { ptr, i64, i64 }, ptr %a439 %t443 = load { ptr, i64, i64 }, ptr %a347 @@ -96757,18 +96802,18 @@ then9222: %t446 = getelementptr inbounds %S.ast.Type, ptr %t445, i32 0, i32 0 %t447 = load { ptr, i64, i64 }, ptr %t446 store { ptr, i64, i64 } %t447, ptr %a448 - store { ptr, i64, i64 } { ptr @.str.6212, i64 3, i64 0 }, ptr %a449 + store { ptr, i64, i64 } { ptr @.str.6214, i64 3, i64 0 }, ptr %a449 %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) %t451 = icmp ne i32 %t450, 0 - br i1 %t451, label %then9225, label %endif9227 -then9225: + br i1 %t451, label %then9235, label %endif9237 +then9235: %t452 = load { ptr, i64, i64 }, ptr %a401 - store { ptr, i64, i64 } { ptr @.str.6213, i64 20, i64 0 }, ptr %a454 + store { ptr, i64, i64 } { ptr @.str.6215, i64 20, i64 0 }, ptr %a454 store { ptr, i64, i64 } %t452, ptr %a455 call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) %t456 = load { ptr, i64, i64 }, ptr %a453 store { ptr, i64, i64 } %t456, ptr %a458 - store { ptr, i64, i64 } { ptr @.str.6214, i64 53, i64 0 }, ptr %a459 + store { ptr, i64, i64 } { ptr @.str.6216, i64 53, i64 0 }, ptr %a459 call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459) store { ptr, i64, i64 } %t456, ptr %a460 call void @finch_str_drop(ptr %a460) @@ -96777,22 +96822,22 @@ then9225: store { ptr, i64, i64 } %t461, ptr %a368 store { ptr, i64, i64 } %t462, ptr %a463 call void @finch_str_drop(ptr %a463) - br label %endif9227 -endif9227: + br label %endif9237 +endif9237: call void @finch_str_drop(ptr %a401) - br label %endif9224 -else9223: + br label %endif9234 +else9233: %t464 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 %t465 = getelementptr inbounds %S.ast.Type, ptr %t464, i32 0, i32 0 %t466 = load { ptr, i64, i64 }, ptr %t465 store { ptr, i64, i64 } %t466, ptr %a467 - store { ptr, i64, i64 } { ptr @.str.6215, i64 3, i64 0 }, ptr %a468 + store { ptr, i64, i64 } { ptr @.str.6217, i64 3, i64 0 }, ptr %a468 %t469 = call i32 @finch_str_eq(ptr %a467, ptr %a468) %t470 = icmp ne i32 %t469, 0 - br i1 %t470, label %then9228, label %endif9230 -then9228: + br i1 %t470, label %then9238, label %endif9240 +then9238: %t471 = load { ptr, i64, i64 }, ptr %a346 - store { ptr, i64, i64 } { ptr @.str.6216, i64 5, i64 0 }, ptr %a473 + store { ptr, i64, i64 } { ptr @.str.6218, i64 5, i64 0 }, ptr %a473 store { ptr, i64, i64 } %t471, ptr %a474 call void @finch_str_concat(ptr %a472, ptr %a473, ptr %a474) %t475 = load { ptr, i64, i64 }, ptr %a472 @@ -96801,29 +96846,29 @@ then9228: store { ptr, i64, i64 } %t476, ptr %a477 call void @finch_str_drop(ptr %a477) %t478 = load { ptr, i64, i64 }, ptr %a368 - store { ptr, i64, i64 } { ptr @.str.6217, i64 46, i64 0 }, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.6219, i64 46, i64 0 }, ptr %a368 store { ptr, i64, i64 } %t478, ptr %a479 call void @finch_str_drop(ptr %a479) - br label %endif9230 -endif9230: - br label %endif9224 -endif9224: + br label %endif9240 +endif9240: + br label %endif9234 +endif9234: %t480 = load ptr, ptr %a46 %t481 = icmp eq ptr %t480, null - br i1 %t481, label %panic9231, label %ok9232 -panic9231: - call void @finch_panic(ptr @.str.6218, i64 5865, ptr @.str.6219) + br i1 %t481, label %panic9241, label %ok9242 +panic9241: + call void @finch_panic(ptr @.str.6220, i64 5865, ptr @.str.6221) unreachable -ok9232: +ok9242: %t482 = getelementptr inbounds %S.gen.Gen, ptr %t480, i32 0, i32 3 %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 %t484 = load { ptr, i64, i64 }, ptr %a347 - store { ptr, i64, i64 } { ptr @.str.6220, i64 48, i64 0 }, ptr %a486 + store { ptr, i64, i64 } { ptr @.str.6222, i64 48, i64 0 }, ptr %a486 store { ptr, i64, i64 } %t484, ptr %a487 call void @finch_str_concat(ptr %a485, ptr %a486, ptr %a487) %t488 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } %t488, ptr %a490 - store { ptr, i64, i64 } { ptr @.str.6221, i64 2, i64 0 }, ptr %a491 + store { ptr, i64, i64 } { ptr @.str.6223, i64 2, i64 0 }, ptr %a491 call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491) store { ptr, i64, i64 } %t488, ptr %a492 call void @finch_str_drop(ptr %a492) @@ -96836,7 +96881,7 @@ ok9232: call void @finch_str_drop(ptr %a498) %t499 = load { ptr, i64, i64 }, ptr %a495 store { ptr, i64, i64 } %t499, ptr %a501 - store { ptr, i64, i64 } { ptr @.str.6222, i64 1, i64 0 }, ptr %a502 + store { ptr, i64, i64 } { ptr @.str.6224, i64 1, i64 0 }, ptr %a502 call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) store { ptr, i64, i64 } %t499, ptr %a503 call void @finch_str_drop(ptr %a503) @@ -96849,7 +96894,7 @@ ok9232: call void @finch_str_drop(ptr %a509) %t510 = load { ptr, i64, i64 }, ptr %a506 store { ptr, i64, i64 } %t510, ptr %a512 - store { ptr, i64, i64 } { ptr @.str.6223, i64 2, i64 0 }, ptr %a513 + store { ptr, i64, i64 } { ptr @.str.6225, i64 2, i64 0 }, ptr %a513 call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) store { ptr, i64, i64 } %t510, ptr %a514 call void @finch_str_drop(ptr %a514) @@ -96906,24 +96951,24 @@ entry: define internal { ptr, i64, i64 } @finch.docs.builtins() { entry: - %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6224, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6225, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6226, i64 78, i64 0 }) - %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6227, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6228, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.6229, i64 77, i64 0 }) - %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6230, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6231, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6232, i64 121, i64 0 }) - %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6233, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6234, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.6235, i64 83, i64 0 }) - %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6236, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6237, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6238, i64 29, i64 0 }) - %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6239, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6240, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6241, i64 73, i64 0 }) - %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6242, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6243, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6244, i64 98, i64 0 }) - %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6245, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6246, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.6247, i64 66, i64 0 }) - %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6248, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6249, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6250, i64 48, i64 0 }) - %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6251, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6252, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6253, i64 77, i64 0 }) - %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6254, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6255, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6256, i64 66, i64 0 }) - %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6257, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6258, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6259, i64 73, i64 0 }) - %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6260, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6261, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6262, i64 61, i64 0 }) - %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6263, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6264, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6265, i64 130, i64 0 }) - %t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6266, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6267, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6268, i64 75, i64 0 }) - %t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6269, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6270, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6271, i64 29, i64 0 }) - %t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6272, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6273, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6274, i64 26, i64 0 }) - %t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6275, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6276, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6277, i64 88, i64 0 }) + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6226, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6227, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6228, i64 78, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6229, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6230, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.6231, i64 77, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6232, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6233, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6234, i64 121, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6235, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6236, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.6237, i64 83, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6238, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6239, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6240, i64 29, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6241, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6242, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6243, i64 73, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6244, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6245, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6246, i64 98, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6247, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6248, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.6249, i64 66, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6250, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6251, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6252, i64 48, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6253, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6254, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6255, i64 77, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6256, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6257, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6258, i64 66, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6259, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6260, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6261, i64 73, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6262, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6263, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6264, i64 61, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6265, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6266, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6267, i64 130, i64 0 }) + %t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6268, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6269, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6270, i64 75, i64 0 }) + %t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6271, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6272, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6273, i64 29, i64 0 }) + %t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6274, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6275, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6276, i64 26, i64 0 }) + %t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6277, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6278, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6279, i64 88, i64 0 }) %t19 = mul i64 18, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t20 = call ptr @finch_alloc(i64 %t19) %t21 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 0 @@ -96971,20 +97016,20 @@ entry: define internal { ptr, i64, i64 } @finch.docs.arrayMethods() { entry: - %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6278, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6279, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6280, i64 23, i64 0 }) - %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6281, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6282, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6283, i64 40, i64 0 }) - %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6284, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6285, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6286, i64 18, i64 0 }) - %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6287, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6288, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6289, i64 43, i64 0 }) - %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6290, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6291, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6292, i64 38, i64 0 }) - %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6293, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6294, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6295, i64 37, i64 0 }) - %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6296, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6297, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6298, i64 19, i64 0 }) - %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6299, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6300, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6301, i64 46, i64 0 }) - %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6302, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6303, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6304, i64 22, i64 0 }) - %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6305, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6306, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6307, i64 18, i64 0 }) - %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6308, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6309, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6310, i64 37, i64 0 }) - %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6311, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6312, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6313, i64 18, i64 0 }) - %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6314, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6315, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6316, i64 45, i64 0 }) - %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6317, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6318, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6319, i64 47, i64 0 }) + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6280, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6281, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6282, i64 23, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6283, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6284, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6285, i64 40, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6286, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6287, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6288, i64 18, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6289, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6290, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6291, i64 43, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6292, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6293, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6294, i64 38, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6295, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6296, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6297, i64 37, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6298, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6299, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6300, i64 19, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6301, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6302, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6303, i64 46, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6304, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6305, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6306, i64 22, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6307, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6308, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6309, i64 18, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6310, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6311, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6312, i64 37, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6313, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6314, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6315, i64 18, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6316, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6317, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6318, i64 45, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6319, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6320, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6321, i64 47, i64 0 }) %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 @@ -97024,20 +97069,20 @@ entry: define internal { ptr, i64, i64 } @finch.docs.strMethods() { entry: - %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6320, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6321, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6322, i64 20, i64 0 }) - %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6323, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6325, i64 59, i64 0 }) - %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6326, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6327, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.6328, i64 29, i64 0 }) - %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6329, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6330, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6331, i64 22, i64 0 }) - %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6332, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6333, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6334, i64 24, i64 0 }) - %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6335, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6337, i64 27, i64 0 }) - %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6338, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6339, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6340, i64 25, i64 0 }) - %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6341, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6342, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6343, i64 62, i64 0 }) - %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6344, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6345, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6346, i64 41, i64 0 }) - %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6347, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6348, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6349, i64 24, i64 0 }) - %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6350, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6351, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6352, i64 24, i64 0 }) - %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6353, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6354, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6355, i64 26, i64 0 }) - %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6356, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6357, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6358, i64 17, i64 0 }) - %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6359, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6360, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6361, i64 22, i64 0 }) + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6322, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6323, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 20, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6325, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6326, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6327, i64 59, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6328, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6329, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.6330, i64 29, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6331, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6332, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6333, i64 22, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6334, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6335, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 24, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6337, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6338, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6339, i64 27, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6340, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6341, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6342, i64 25, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6343, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6344, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6345, i64 62, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6346, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6347, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6348, i64 41, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6349, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6350, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6351, i64 24, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6352, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6353, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6354, i64 24, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6355, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6356, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6357, i64 26, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6358, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6359, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6360, i64 17, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6361, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6362, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6363, i64 22, i64 0 }) %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 @@ -97077,13 +97122,13 @@ entry: define internal { ptr, i64, i64 } @finch.docs.mapMethods() { entry: - %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6362, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6363, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6364, i64 19, i64 0 }) - %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6365, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6366, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6367, i64 22, i64 0 }) - %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6368, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6369, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6370, i64 53, i64 0 }) - %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6371, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6372, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6373, i64 52, i64 0 }) - %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6374, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6375, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6376, i64 19, i64 0 }) - %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6377, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6378, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6379, i64 39, i64 0 }) - %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6380, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6381, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6382, i64 47, i64 0 }) + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6364, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6365, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6366, i64 19, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6367, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6368, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6369, i64 22, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6370, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6371, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6372, i64 53, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6373, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6374, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6375, i64 52, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6376, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6377, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6378, i64 19, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6379, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6380, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6381, i64 39, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6382, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6383, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6384, i64 47, i64 0 }) %t8 = mul i64 7, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t9 = call ptr @finch_alloc(i64 %t8) %t10 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 0 @@ -97112,49 +97157,49 @@ entry: %t1 = mul i64 22, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 - store { ptr, i64, i64 } { ptr @.str.6383, i64 2, i64 0 }, ptr %t3 + store { ptr, i64, i64 } { ptr @.str.6385, i64 2, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 - store { ptr, i64, i64 } { ptr @.str.6384, i64 6, i64 0 }, ptr %t4 + store { ptr, i64, i64 } { ptr @.str.6386, i64 6, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 - store { ptr, i64, i64 } { ptr @.str.6385, i64 2, i64 0 }, ptr %t5 + store { ptr, i64, i64 } { ptr @.str.6387, i64 2, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 - store { ptr, i64, i64 } { ptr @.str.6386, i64 4, i64 0 }, ptr %t6 + store { ptr, i64, i64 } { ptr @.str.6388, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 - store { ptr, i64, i64 } { ptr @.str.6387, i64 5, i64 0 }, ptr %t7 + store { ptr, i64, i64 } { ptr @.str.6389, i64 5, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 - store { ptr, i64, i64 } { ptr @.str.6388, i64 3, i64 0 }, ptr %t8 + store { ptr, i64, i64 } { ptr @.str.6390, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 - store { ptr, i64, i64 } { ptr @.str.6389, i64 2, i64 0 }, ptr %t9 + store { ptr, i64, i64 } { ptr @.str.6391, i64 2, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 - store { ptr, i64, i64 } { ptr @.str.6390, i64 5, i64 0 }, ptr %t10 + store { ptr, i64, i64 } { ptr @.str.6392, i64 5, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 - store { ptr, i64, i64 } { ptr @.str.6391, i64 8, i64 0 }, ptr %t11 + store { ptr, i64, i64 } { ptr @.str.6393, i64 8, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 - store { ptr, i64, i64 } { ptr @.str.6392, i64 4, i64 0 }, ptr %t12 + store { ptr, i64, i64 } { ptr @.str.6394, i64 4, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 - store { ptr, i64, i64 } { ptr @.str.6393, i64 5, i64 0 }, ptr %t13 + store { ptr, i64, i64 } { ptr @.str.6395, i64 5, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 - store { ptr, i64, i64 } { ptr @.str.6394, i64 4, i64 0 }, ptr %t14 + store { ptr, i64, i64 } { ptr @.str.6396, i64 4, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 - store { ptr, i64, i64 } { ptr @.str.6395, i64 6, i64 0 }, ptr %t15 + store { ptr, i64, i64 } { ptr @.str.6397, i64 6, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 - store { ptr, i64, i64 } { ptr @.str.6396, i64 4, i64 0 }, ptr %t16 + store { ptr, i64, i64 } { ptr @.str.6398, i64 4, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 - store { ptr, i64, i64 } { ptr @.str.6397, i64 6, i64 0 }, ptr %t17 + store { ptr, i64, i64 } { ptr @.str.6399, i64 6, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 - store { ptr, i64, i64 } { ptr @.str.6398, i64 4, i64 0 }, ptr %t18 + store { ptr, i64, i64 } { ptr @.str.6400, i64 4, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 - store { ptr, i64, i64 } { ptr @.str.6399, i64 5, i64 0 }, ptr %t19 + store { ptr, i64, i64 } { ptr @.str.6401, i64 5, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 - store { ptr, i64, i64 } { ptr @.str.6400, i64 6, i64 0 }, ptr %t20 + store { ptr, i64, i64 } { ptr @.str.6402, i64 6, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 - store { ptr, i64, i64 } { ptr @.str.6401, i64 5, i64 0 }, ptr %t21 + store { ptr, i64, i64 } { ptr @.str.6403, i64 5, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 - store { ptr, i64, i64 } { ptr @.str.6402, i64 2, i64 0 }, ptr %t22 + store { ptr, i64, i64 } { ptr @.str.6404, i64 2, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 - store { ptr, i64, i64 } { ptr @.str.6403, i64 3, i64 0 }, ptr %t23 + store { ptr, i64, i64 } { ptr @.str.6405, i64 3, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 - store { ptr, i64, i64 } { ptr @.str.6404, i64 4, i64 0 }, ptr %t24 + store { ptr, i64, i64 } { ptr @.str.6406, i64 4, i64 0 }, ptr %t24 %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t26 = insertvalue { ptr, i64, i64 } %t25, i64 22, 1 %t27 = insertvalue { ptr, i64, i64 } %t26, i64 22, 2 @@ -97167,39 +97212,39 @@ entry: %t1 = mul i64 17, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 - store { ptr, i64, i64 } { ptr @.str.6405, i64 3, i64 0 }, ptr %t3 + store { ptr, i64, i64 } { ptr @.str.6407, i64 3, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 - store { ptr, i64, i64 } { ptr @.str.6406, i64 5, i64 0 }, ptr %t4 + store { ptr, i64, i64 } { ptr @.str.6408, i64 5, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 - store { ptr, i64, i64 } { ptr @.str.6407, i64 4, i64 0 }, ptr %t5 + store { ptr, i64, i64 } { ptr @.str.6409, i64 4, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 - store { ptr, i64, i64 } { ptr @.str.6408, i64 4, i64 0 }, ptr %t6 + store { ptr, i64, i64 } { ptr @.str.6410, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 - store { ptr, i64, i64 } { ptr @.str.6409, i64 3, i64 0 }, ptr %t7 + store { ptr, i64, i64 } { ptr @.str.6411, i64 3, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 - store { ptr, i64, i64 } { ptr @.str.6410, i64 3, i64 0 }, ptr %t8 + store { ptr, i64, i64 } { ptr @.str.6412, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 - store { ptr, i64, i64 } { ptr @.str.6411, i64 3, i64 0 }, ptr %t9 + store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 - store { ptr, i64, i64 } { ptr @.str.6412, i64 2, i64 0 }, ptr %t10 + store { ptr, i64, i64 } { ptr @.str.6414, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 - store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %t11 + store { ptr, i64, i64 } { ptr @.str.6415, i64 3, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 - store { ptr, i64, i64 } { ptr @.str.6414, i64 3, i64 0 }, ptr %t12 + store { ptr, i64, i64 } { ptr @.str.6416, i64 3, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 - store { ptr, i64, i64 } { ptr @.str.6415, i64 3, i64 0 }, ptr %t13 + store { ptr, i64, i64 } { ptr @.str.6417, i64 3, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 - store { ptr, i64, i64 } { ptr @.str.6416, i64 2, i64 0 }, ptr %t14 + store { ptr, i64, i64 } { ptr @.str.6418, i64 2, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 - store { ptr, i64, i64 } { ptr @.str.6417, i64 3, i64 0 }, ptr %t15 + store { ptr, i64, i64 } { ptr @.str.6419, i64 3, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 - store { ptr, i64, i64 } { ptr @.str.6418, i64 3, i64 0 }, ptr %t16 + store { ptr, i64, i64 } { ptr @.str.6420, i64 3, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 - store { ptr, i64, i64 } { ptr @.str.6419, i64 3, i64 0 }, ptr %t17 + store { ptr, i64, i64 } { ptr @.str.6421, i64 3, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 - store { ptr, i64, i64 } { ptr @.str.6420, i64 3, i64 0 }, ptr %t18 + store { ptr, i64, i64 } { ptr @.str.6422, i64 3, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 - store { ptr, i64, i64 } { ptr @.str.6421, i64 3, i64 0 }, ptr %t19 + store { ptr, i64, i64 } { ptr @.str.6423, i64 3, i64 0 }, ptr %t19 %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t21 = insertvalue { ptr, i64, i64 } %t20, i64 17, 1 %t22 = insertvalue { ptr, i64, i64 } %t21, i64 17, 2 @@ -97236,14 +97281,14 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 - br label %each.cond9233 -each.cond9233: + br label %each.cond9243 +each.cond9243: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body9234, label %each.end9236 -each.body9234: + br i1 %t7, label %each.body9244, label %each.end9246 +each.body9244: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 %t10 = load %S.docs.Doc, ptr %t9 @@ -97255,21 +97300,21 @@ each.body9234: store { ptr, i64, i64 } %t14, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br i1 %t18, label %then9237, label %endif9239 -then9237: + br i1 %t18, label %then9247, label %endif9249 +then9247: %t19 = load %S.docs.Doc, ptr %a11 store %S.docs.Doc %t19, ptr %a20 call void @finch.copy.S_docs_Doc(ptr %a21, ptr %a20) %t22 = load %S.docs.Doc, ptr %a21 ret %S.docs.Doc %t22 -endif9239: - br label %each.step9235 -each.step9235: +endif9249: + br label %each.step9245 +each.step9245: %t23 = load i64, ptr %a3 %t24 = add i64 %t23, 1 store i64 %t24, ptr %a3 - br label %each.cond9233 -each.end9236: + br label %each.cond9243 +each.end9246: ret %S.docs.Doc zeroinitializer } @@ -97290,12 +97335,12 @@ entry: store %S.docs.Doc %p0, ptr %a1 %t2 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 1 %t3 = load { ptr, i64, i64 }, ptr %t2 - store { ptr, i64, i64 } { ptr @.str.6422, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6424, i64 9, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t7, ptr %a9 - store { ptr, i64, i64 } { ptr @.str.6423, i64 5, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.6425, i64 5, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) @@ -97381,7 +97426,7 @@ entry: %a11 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 store i64 %p1, ptr %a2 - %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6424, i64 5, i64 0 }, 0 + %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6426, i64 5, i64 0 }, 0 %t4 = load i64, ptr %a2 %t5 = insertvalue %S.ast.Type %t3, i64 %t4, 4 store %S.ast.Type %t5, ptr %a6 @@ -97502,7 +97547,7 @@ entry: store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t3, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.6425, i64 15, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6427, i64 15, i64 0 }, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 call void @finch_str_drop(ptr %a7) @@ -97519,7 +97564,7 @@ entry: call void @finch_str_drop(ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t17, ptr %a19 - store { ptr, i64, i64 } { ptr @.str.6426, i64 4, i64 0 }, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.6428, i64 4, i64 0 }, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t17, ptr %a21 call void @finch_str_drop(ptr %a21) @@ -97527,7 +97572,7 @@ entry: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t24, ptr %a26 - store { ptr, i64, i64 } { ptr @.str.6427, i64 13, i64 0 }, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.6429, i64 13, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) @@ -97544,7 +97589,7 @@ entry: call void @finch_str_drop(ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t38, ptr %a40 - store { ptr, i64, i64 } { ptr @.str.6428, i64 2, i64 0 }, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.6430, i64 2, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) store { ptr, i64, i64 } %t38, ptr %a42 call void @finch_str_drop(ptr %a42) @@ -97552,12 +97597,12 @@ entry: store { ptr, i64, i64 } %t43, ptr %a44 %t45 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t45, ptr %a46 - store { ptr, i64, i64 } { ptr @.str.6429, i64 0, i64 0 }, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.6431, i64 0, i64 0 }, ptr %a47 %t48 = call i32 @finch_write_file(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 %t50 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t50, ptr %a52 - store { ptr, i64, i64 } { ptr @.str.6430, i64 12, i64 0 }, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.6432, i64 12, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a51 %t55 = load { ptr, i64, i64 }, ptr %a44 @@ -97571,7 +97616,7 @@ entry: call void @finch_str_drop(ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t62, ptr %a64 - store { ptr, i64, i64 } { ptr @.str.6431, i64 4, i64 0 }, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.6433, i64 4, i64 0 }, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) store { ptr, i64, i64 } %t62, ptr %a66 call void @finch_str_drop(ptr %a66) @@ -97587,7 +97632,7 @@ entry: call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t75, ptr %a77 - store { ptr, i64, i64 } { ptr @.str.6432, i64 3, i64 0 }, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.6434, i64 3, i64 0 }, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) store { ptr, i64, i64 } %t75, ptr %a79 call void @finch_str_drop(ptr %a79) @@ -97611,34 +97656,34 @@ entry: %t93 = call i32 @finch_file_exists(ptr %a92) %t94 = icmp ne i32 %t93, 0 %t95 = xor i1 %t94, true - br i1 %t95, label %then9240, label %endif9242 -then9240: + br i1 %t95, label %then9250, label %endif9252 +then9250: %t96 = load { ptr, i64, i64 }, ptr %a2 call void @finch_str_drop(ptr %a44) call void @finch_str_drop(ptr %a23) ret { ptr, i64, i64 } %t96 -endif9242: +endif9252: store i1 false, ptr %a97 %t98 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t98, ptr %a99 - call void @finch_read_file(ptr %a100, ptr %a99, ptr @.str.6433, i64 114) + call void @finch_read_file(ptr %a100, ptr %a99, ptr @.str.6435, i64 114) %t101 = load { ptr, i64, i64 }, ptr %a100 store { ptr, i64, i64 } %t101, ptr %a102 - store { ptr, i64, i64 } { ptr @.str.6435, i64 1, i64 0 }, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.6437, i64 1, i64 0 }, ptr %a104 call void @finch_str_split(ptr %a105, ptr %a102, ptr %a104) %t106 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t101, ptr %a107 call void @finch_str_drop(ptr %a107) store { ptr, i64, i64 } %t106, ptr %a108 store i64 0, ptr %a109 - br label %each.cond9243 -each.cond9243: + br label %each.cond9253 +each.cond9253: %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %a108, i32 0, i32 1 %t111 = load i64, ptr %t110 %t112 = load i64, ptr %a109 %t113 = icmp slt i64 %t112, %t111 - br i1 %t113, label %each.body9244, label %each.end9246 -each.body9244: + br i1 %t113, label %each.body9254, label %each.end9256 +each.body9254: %t114 = load ptr, ptr %a108 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 %t112 %t116 = load { ptr, i64, i64 }, ptr %t115 @@ -97650,60 +97695,60 @@ each.body9244: store { ptr, i64, i64 } %t121, ptr %a122 %t123 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t123, ptr %a124 - store { ptr, i64, i64 } { ptr @.str.6438, i64 34, i64 0 }, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.6440, i64 34, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_starts(ptr %a124, ptr %a126) %t128 = icmp ne i32 %t127, 0 - br i1 %t128, label %then9247, label %endif9249 -then9247: + br i1 %t128, label %then9257, label %endif9259 +then9257: store i1 true, ptr %a97 call void @finch_str_drop(ptr %a122) - br label %each.step9245 -endif9249: + br label %each.step9255 +endif9259: %t129 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t129, ptr %a130 - store { ptr, i64, i64 } { ptr @.str.6440, i64 19, i64 0 }, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.6442, i64 19, i64 0 }, ptr %a132 %t133 = call i32 @finch_str_starts(ptr %a130, ptr %a132) %t134 = icmp ne i32 %t133, 0 - br i1 %t134, label %then9250, label %endif9252 -then9250: + br i1 %t134, label %then9260, label %endif9262 +then9260: call void @finch_str_drop(ptr %a122) - br label %each.end9246 -endif9252: + br label %each.end9256 +endif9262: %t135 = load i1, ptr %a97 %t136 = xor i1 %t135, true - br label %logic.from9253 -logic.from9253: - br i1 %t136, label %logic.end9255, label %logic.rhs9254 -logic.rhs9254: + br label %logic.from9263 +logic.from9263: + br i1 %t136, label %logic.end9265, label %logic.rhs9264 +logic.rhs9264: %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 %t138 = load i64, ptr %t137 %t139 = icmp eq i64 %t138, 0 - br label %logic.rend9256 -logic.rend9256: - br label %logic.end9255 -logic.end9255: - %t140 = phi i1 [ true, %logic.from9253 ], [ %t139, %logic.rend9256 ] - br i1 %t140, label %then9257, label %endif9259 -then9257: + br label %logic.rend9266 +logic.rend9266: + br label %logic.end9265 +logic.end9265: + %t140 = phi i1 [ true, %logic.from9263 ], [ %t139, %logic.rend9266 ] + br i1 %t140, label %then9267, label %endif9269 +then9267: call void @finch_str_drop(ptr %a122) - br label %each.step9245 -endif9259: + br label %each.step9255 +endif9269: %t141 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t141, ptr %a142 - store { ptr, i64, i64 } { ptr @.str.6442, i64 22, i64 0 }, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.6444, i64 22, i64 0 }, ptr %a144 %t145 = call i32 @finch_str_ends(ptr %a142, ptr %a144) %t146 = icmp ne i32 %t145, 0 - br i1 %t146, label %then9260, label %else9261 -then9260: + br i1 %t146, label %then9270, label %else9271 +then9270: %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t148 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t148, ptr %a149 %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 %t152 = load i64, ptr %t151 %t153 = sub i64 %t152, 22 - call void @finch_str_sub(ptr %a150, ptr %a149, i64 0, i64 %t153, ptr @.str.6444, i64 128) + call void @finch_str_sub(ptr %a150, ptr %a149, i64 0, i64 %t153, ptr @.str.6446, i64 128) %t154 = load { ptr, i64, i64 }, ptr %a150 - store { ptr, i64, i64 } { ptr @.str.6443, i64 11, i64 0 }, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.6445, i64 11, i64 0 }, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) store { ptr, i64, i64 } %t154, ptr %a158 @@ -97716,11 +97761,11 @@ then9260: %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i64 %t160 store { ptr, i64, i64 } %t159, ptr %t163 store i64 %t161, ptr %t147 - br label %endif9262 -else9261: + br label %endif9272 +else9271: %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t165 = load { ptr, i64, i64 }, ptr %a122 - store { ptr, i64, i64 } { ptr @.str.6445, i64 8, i64 0 }, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.6447, i64 8, i64 0 }, ptr %a167 store { ptr, i64, i64 } %t165, ptr %a168 call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a166 @@ -97731,16 +97776,16 @@ else9261: %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i64 %t170 store { ptr, i64, i64 } %t169, ptr %t173 store i64 %t171, ptr %t164 - br label %endif9262 -endif9262: + br label %endif9272 +endif9272: call void @finch_str_drop(ptr %a122) - br label %each.step9245 -each.step9245: + br label %each.step9255 +each.step9255: %t174 = load i64, ptr %a109 %t175 = add i64 %t174, 1 store i64 %t175, ptr %a109 - br label %each.cond9243 -each.end9246: + br label %each.cond9253 +each.end9256: call void @finch.drop.arr_str(ptr %a108) %t176 = load { ptr, i64, i64 }, ptr %a23 call void @finch.host.remove({ ptr, i64, i64 } %t176) @@ -97799,38 +97844,38 @@ entry: store { ptr, i64, i64 } %t13, ptr %a14 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic9263, label %ok9264 -panic9263: - call void @finch_panic(ptr @.str.6446, i64 143, ptr @.str.6447) + br i1 %t16, label %panic9273, label %ok9274 +panic9273: + call void @finch_panic(ptr @.str.6448, i64 143, ptr @.str.6449) unreachable -ok9264: +ok9274: %t17 = getelementptr inbounds %S.cimport.Importer, ptr %t15, i32 0, i32 3 %t18 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t18, ptr %a19 %t20 = call i64 @finch_map_find(ptr %t17, ptr %a19, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t21 = icmp sge i64 %t20, 0 - br i1 %t21, label %then9265, label %endif9267 -then9265: + br i1 %t21, label %then9275, label %endif9277 +then9275: %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic9268, label %ok9269 -panic9268: - call void @finch_panic(ptr @.str.6448, i64 144, ptr @.str.6449) + br i1 %t23, label %panic9278, label %ok9279 +panic9278: + call void @finch_panic(ptr @.str.6450, i64 144, ptr @.str.6451) unreachable -ok9269: +ok9279: %t24 = getelementptr inbounds %S.cimport.Importer, ptr %t22, i32 0, i32 3 %t25 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = call i64 @finch_map_find(ptr %t24, ptr %a26, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t28 = icmp slt i64 %t27, 0 - br i1 %t28, label %map.missing9270, label %map.found9271 -map.missing9270: + br i1 %t28, label %map.missing9280, label %map.found9281 +map.missing9280: store { ptr, i64, i64 } zeroinitializer, ptr %a29 store { ptr, i64, i64 } %t25, ptr %a30 call void @finch_buf_str(ptr %a29, ptr %a30, i32 1) - call void @finch_map_missing(ptr @.str.6450, i64 144, ptr %a29) + call void @finch_map_missing(ptr @.str.6452, i64 144, ptr %a29) unreachable -map.found9271: +map.found9281: %t31 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t24, i32 0, i32 0 %t32 = load ptr, ptr %t31 %t33 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t32, i64 %t27 @@ -97841,7 +97886,7 @@ map.found9271: %t38 = load { ptr, i64, i64 }, ptr %a37 call void @finch_str_drop(ptr %a14) ret { ptr, i64, i64 } %t38 -endif9267: +endif9277: %t39 = load %S.C.CXCursor, ptr %a7 store %S.C.CXCursor %t39, ptr %a40 %t41 = call [2 x i64] @clang_getCursorSpelling(ptr %a40) @@ -97852,45 +97897,45 @@ endif9267: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = icmp eq i64 %t47, 0 - br label %logic.from9272 -logic.from9272: - br i1 %t48, label %logic.end9274, label %logic.rhs9273 -logic.rhs9273: + br label %logic.from9282 +logic.from9282: + br i1 %t48, label %logic.end9284, label %logic.rhs9283 +logic.rhs9283: %t49 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t49, ptr %a50 - store { ptr, i64, i64 } { ptr @.str.6452, i64 1, i64 0 }, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6454, i64 1, i64 0 }, ptr %a52 %t53 = call i64 @finch_str_find(ptr %a50, ptr %a52) %t54 = icmp sge i64 %t53, 0 - br label %logic.rend9275 -logic.rend9275: - br label %logic.end9274 -logic.end9274: - %t55 = phi i1 [ true, %logic.from9272 ], [ %t54, %logic.rend9275 ] - br i1 %t55, label %then9276, label %endif9278 -then9276: + br label %logic.rend9285 +logic.rend9285: + br label %logic.end9284 +logic.end9284: + %t55 = phi i1 [ true, %logic.from9282 ], [ %t54, %logic.rend9285 ] + br i1 %t55, label %then9286, label %endif9288 +then9286: %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null - br i1 %t57, label %panic9279, label %ok9280 -panic9279: - call void @finch_panic(ptr @.str.6453, i64 148, ptr @.str.6454) + br i1 %t57, label %panic9289, label %ok9290 +panic9289: + call void @finch_panic(ptr @.str.6455, i64 148, ptr @.str.6456) unreachable -ok9280: +ok9290: %t58 = getelementptr inbounds %S.cimport.Importer, ptr %t56, i32 0, i32 5 %t59 = load i64, ptr %t58 %t60 = add i64 %t59, 1 store i64 %t60, ptr %t58 %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null - br i1 %t62, label %panic9281, label %ok9282 -panic9281: - call void @finch_panic(ptr @.str.6456, i64 149, ptr @.str.6457) + br i1 %t62, label %panic9291, label %ok9292 +panic9291: + call void @finch_panic(ptr @.str.6458, i64 149, ptr @.str.6459) unreachable -ok9282: +ok9292: %t63 = getelementptr inbounds %S.cimport.Importer, ptr %t61, i32 0, i32 5 %t64 = load i64, ptr %t63 call void @finch_str_from_int(ptr %a65, i64 %t64) %t66 = load { ptr, i64, i64 }, ptr %a65 - store { ptr, i64, i64 } { ptr @.str.6455, i64 12, i64 0 }, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.6457, i64 12, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 @@ -97900,16 +97945,16 @@ ok9282: store { ptr, i64, i64 } %t71, ptr %a45 store { ptr, i64, i64 } %t72, ptr %a73 call void @finch_str_drop(ptr %a73) - br label %endif9278 -endif9278: + br label %endif9288 +endif9288: %t74 = load { ptr, i64, i64 }, ptr %a45 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic9283, label %ok9284 -panic9283: - call void @finch_panic(ptr @.str.6458, i64 151, ptr @.str.6459) + br i1 %t76, label %panic9293, label %ok9294 +panic9293: + call void @finch_panic(ptr @.str.6460, i64 151, ptr @.str.6461) unreachable -ok9284: +ok9294: %t77 = getelementptr inbounds %S.cimport.Importer, ptr %t75, i32 0, i32 3 %t78 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t78, ptr %a79 @@ -97920,14 +97965,14 @@ ok9284: %t84 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i64 %t81 %t85 = load i32, ptr %a80 %t86 = icmp ne i32 %t85, 0 - br i1 %t86, label %map.new9285, label %map.have9286 -map.new9285: + br i1 %t86, label %map.new9295, label %map.have9296 +map.new9295: %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 1 call void @finch_str_copy(ptr %t87, ptr %a79) %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t88 - br label %map.have9286 -map.have9286: + br label %map.have9296 +map.have9296: %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 store { ptr, i64, i64 } %t74, ptr %a90 call void @finch_str_copy(ptr %a91, ptr %a90) @@ -98010,63 +98055,63 @@ entry: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic9287, label %ok9288 -panic9287: - call void @finch_panic(ptr @.str.6460, i64 161, ptr @.str.6461) + br i1 %t25, label %panic9297, label %ok9298 +panic9297: + call void @finch_panic(ptr @.str.6462, i64 161, ptr @.str.6463) unreachable -ok9288: +ok9298: %t26 = getelementptr inbounds %S.cimport.Importer, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.cimport.CImports, ptr %t26, i32 0, i32 3 %t28 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t28, ptr %a29 %t30 = call i64 @finch_map_find(ptr %t27, ptr %a29, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t31 = icmp sge i64 %t30, 0 - br label %logic.from9289 -logic.from9289: - br i1 %t31, label %logic.end9291, label %logic.rhs9290 -logic.rhs9290: + br label %logic.from9299 +logic.from9299: + br i1 %t31, label %logic.end9301, label %logic.rhs9300 +logic.rhs9300: %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic9292, label %ok9293 -panic9292: - call void @finch_panic(ptr @.str.6462, i64 161, ptr @.str.6463) + br i1 %t33, label %panic9302, label %ok9303 +panic9302: + call void @finch_panic(ptr @.str.6464, i64 161, ptr @.str.6465) unreachable -ok9293: +ok9303: %t34 = getelementptr inbounds %S.cimport.Importer, ptr %t32, i32 0, i32 4 %t35 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t35, ptr %a36 %t37 = call i64 @finch_map_find(ptr %t34, ptr %a36, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t38 = icmp sge i64 %t37, 0 - br label %logic.rend9294 -logic.rend9294: - br label %logic.end9291 -logic.end9291: - %t39 = phi i1 [ true, %logic.from9289 ], [ %t38, %logic.rend9294 ] - br i1 %t39, label %then9295, label %endif9297 -then9295: + br label %logic.rend9304 +logic.rend9304: + br label %logic.end9301 +logic.end9301: + %t39 = phi i1 [ true, %logic.from9299 ], [ %t38, %logic.rend9304 ] + br i1 %t39, label %then9305, label %endif9307 +then9305: %t40 = load { ptr, i64, i64 }, ptr %a23 call void @finch_str_drop(ptr %a19) ret { ptr, i64, i64 } %t40 -endif9297: +endif9307: %t41 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t41, ptr %a42 %t43 = call i64 @clang_Type_getSizeOf(ptr %a42) store i64 %t43, ptr %a44 %t45 = load i64, ptr %a44 %t46 = icmp slt i64 %t45, 0 - br i1 %t46, label %then9298, label %endif9300 -then9298: + br i1 %t46, label %then9308, label %endif9310 +then9308: call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a19) - ret { ptr, i64, i64 } { ptr @.str.6464, i64 0, i64 0 } -endif9300: + ret { ptr, i64, i64 } { ptr @.str.6466, i64 0, i64 0 } +endif9310: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic9301, label %ok9302 -panic9301: - call void @finch_panic(ptr @.str.6465, i64 168, ptr @.str.6466) + br i1 %t48, label %panic9311, label %ok9312 +panic9311: + call void @finch_panic(ptr @.str.6467, i64 168, ptr @.str.6468) unreachable -ok9302: +ok9312: %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 4 %t50 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t50, ptr %a51 @@ -98077,14 +98122,14 @@ ok9302: %t56 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t55, i64 %t53 %t57 = load i32, ptr %a52 %t58 = icmp ne i32 %t57, 0 - br i1 %t58, label %map.new9303, label %map.have9304 -map.new9303: + br i1 %t58, label %map.new9313, label %map.have9314 +map.new9313: %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 1 call void @finch_str_copy(ptr %t59, ptr %a51) %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 store i1 false, ptr %t60 - br label %map.have9304 -map.have9304: + br label %map.have9314 +map.have9314: %t61 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 store i1 true, ptr %t61 %t62 = load { ptr, i64, i64 }, ptr %a23 @@ -98103,15 +98148,15 @@ map.have9304: store %S.C.CXCursor %t74, ptr %a75 %t76 = call i32 @clang_getCursorKind(ptr %a75) %t77 = icmp eq i32 %t76, 3 - br i1 %t77, label %then9305, label %endif9307 -then9305: + br i1 %t77, label %then9315, label %endif9317 +then9315: %t78 = getelementptr inbounds %S.cimport.CStruct, ptr %a73, i32 0, i32 4 %t79 = load { ptr, i64, i64 }, ptr %t78 - store { ptr, i64, i64 } { ptr @.str.6467, i64 12, i64 0 }, ptr %t78 + store { ptr, i64, i64 } { ptr @.str.6469, i64 12, i64 0 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif9307 -endif9307: + br label %endif9317 +endif9317: %t81 = load ptr, ptr %a1 %t82 = insertvalue %S.cimport.FieldCtx zeroinitializer, ptr %t81, 0 %t83 = insertvalue %S.cimport.FieldCtx %t82, ptr %a73, 1 @@ -98121,18 +98166,18 @@ endif9307: %t87 = call i32 @clang_Type_visitFields(ptr %a86, ptr @finch.c.cimport.visitField, ptr %a84) %t88 = load ptr, ptr %a1 %t89 = icmp eq ptr %t88, null - br i1 %t89, label %panic9308, label %ok9309 -panic9308: - call void @finch_panic(ptr @.str.6468, i64 176, ptr @.str.6469) + br i1 %t89, label %panic9318, label %ok9319 +panic9318: + call void @finch_panic(ptr @.str.6470, i64 176, ptr @.str.6471) unreachable -ok9309: +ok9319: %t90 = getelementptr inbounds %S.cimport.Importer, ptr %t88, i32 0, i32 4 %t91 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t91, ptr %a92 %t93 = call i64 @finch_map_find(ptr %t90, ptr %a92, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t94 = icmp sge i64 %t93, 0 - br i1 %t94, label %remove.hit9310, label %remove.end9311 -remove.hit9310: + br i1 %t94, label %remove.hit9320, label %remove.end9321 +remove.hit9320: %t95 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t90, i32 0, i32 0 %t96 = load ptr, ptr %t95 %t97 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t96, i64 %t93 @@ -98140,16 +98185,16 @@ remove.hit9310: call void @finch_str_drop(ptr %t98) %t99 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t97, i32 0, i32 2 call void @finch_map_remove_at(ptr %t90, i64 %t93, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64)) - br label %remove.end9311 -remove.end9311: + br label %remove.end9321 +remove.end9321: %t100 = load %S.cimport.CStruct, ptr %a73 %t101 = load ptr, ptr %a1 %t102 = icmp eq ptr %t101, null - br i1 %t102, label %panic9312, label %ok9313 -panic9312: - call void @finch_panic(ptr @.str.6470, i64 177, ptr @.str.6471) + br i1 %t102, label %panic9322, label %ok9323 +panic9322: + call void @finch_panic(ptr @.str.6472, i64 177, ptr @.str.6473) unreachable -ok9313: +ok9323: %t103 = getelementptr inbounds %S.cimport.Importer, ptr %t101, i32 0, i32 0 %t104 = getelementptr inbounds %S.cimport.CImports, ptr %t103, i32 0, i32 3 %t105 = load { ptr, i64, i64 }, ptr %a23 @@ -98161,14 +98206,14 @@ ok9313: %t111 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t110, i64 %t108 %t112 = load i32, ptr %a107 %t113 = icmp ne i32 %t112, 0 - br i1 %t113, label %map.new9314, label %map.have9315 -map.new9314: + br i1 %t113, label %map.new9324, label %map.have9325 +map.new9324: %t114 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 1 call void @finch_str_copy(ptr %t114, ptr %a106) %t115 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 store %S.cimport.CStruct zeroinitializer, ptr %t115 - br label %map.have9315 -map.have9315: + br label %map.have9325 +map.have9325: %t116 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 store %S.cimport.CStruct %t100, ptr %a117 call void @finch.copy.S_cimport_CStruct(ptr %a118, ptr %a117) @@ -98179,11 +98224,11 @@ map.have9315: call void @finch.drop.S_cimport_CStruct(ptr %a121) %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null - br i1 %t123, label %panic9316, label %ok9317 -panic9316: - call void @finch_panic(ptr @.str.6472, i64 178, ptr @.str.6473) + br i1 %t123, label %panic9326, label %ok9327 +panic9326: + call void @finch_panic(ptr @.str.6474, i64 178, ptr @.str.6475) unreachable -ok9317: +ok9327: %t124 = getelementptr inbounds %S.cimport.Importer, ptr %t122, i32 0, i32 0 %t125 = getelementptr inbounds %S.cimport.CImports, ptr %t124, i32 0, i32 4 %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t125, i32 0, i32 1 @@ -98281,39 +98326,39 @@ entry: store %S.C.CXCursor %t34, ptr %a35 %t36 = call i32 @clang_Cursor_isBitField(ptr %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %then9318, label %else9319 -then9318: + br i1 %t37, label %then9328, label %else9329 +then9328: %t38 = load ptr, ptr %a4 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic9321, label %ok9322 -panic9321: - call void @finch_panic(ptr @.str.6475, i64 195, ptr @.str.6476) + br i1 %t39, label %panic9331, label %ok9332 +panic9331: + call void @finch_panic(ptr @.str.6477, i64 195, ptr @.str.6478) unreachable -ok9322: +ok9332: %t40 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t38, i32 0, i32 1 %t41 = load ptr, ptr %t40 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic9323, label %ok9324 -panic9323: - call void @finch_panic(ptr @.str.6477, i64 195, ptr @.str.6478) + br i1 %t42, label %panic9333, label %ok9334 +panic9333: + call void @finch_panic(ptr @.str.6479, i64 195, ptr @.str.6480) unreachable -ok9324: +ok9334: %t43 = getelementptr inbounds %S.cimport.CStruct, ptr %t41, i32 0, i32 4 %t44 = load { ptr, i64, i64 }, ptr %t43 - store { ptr, i64, i64 } { ptr @.str.6474, i64 14, i64 0 }, ptr %t43 + store { ptr, i64, i64 } { ptr @.str.6476, i64 14, i64 0 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t46 - br label %endif9320 -else9319: + br label %endif9330 +else9329: %t47 = getelementptr inbounds %S.C.CXType, ptr %a20, i32 0, i32 0 %t48 = load i32, ptr %t47 %t49 = icmp eq i32 %t48, 105 - br label %logic.from9325 -logic.from9325: - br i1 %t49, label %logic.rhs9326, label %logic.end9327 -logic.rhs9326: + br label %logic.from9335 +logic.from9335: + br i1 %t49, label %logic.rhs9336, label %logic.end9337 +logic.rhs9336: %t51 = load %S.C.CXType, ptr %a20 store %S.C.CXType %t51, ptr %a52 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a50, ptr %a52) @@ -98321,24 +98366,24 @@ logic.rhs9326: store %S.C.CXCursor %t53, ptr %a54 %t55 = call i32 @clang_getCursorKind(ptr %a54) %t56 = icmp eq i32 %t55, 3 - br label %logic.rend9328 -logic.rend9328: - br label %logic.end9327 -logic.end9327: - %t57 = phi i1 [ false, %logic.from9325 ], [ %t56, %logic.rend9328 ] - br i1 %t57, label %then9329, label %else9330 -then9329: + br label %logic.rend9338 +logic.rend9338: + br label %logic.end9337 +logic.end9337: + %t57 = phi i1 [ false, %logic.from9335 ], [ %t56, %logic.rend9338 ] + br i1 %t57, label %then9339, label %else9340 +then9339: %t58 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t58 - br label %endif9331 -else9330: + br label %endif9341 +else9340: %t59 = load ptr, ptr %a4 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic9332, label %ok9333 -panic9332: - call void @finch_panic(ptr @.str.6479, i64 200, ptr @.str.6480) + br i1 %t60, label %panic9342, label %ok9343 +panic9342: + call void @finch_panic(ptr @.str.6481, i64 200, ptr @.str.6482) unreachable -ok9333: +ok9343: %t61 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t59, i32 0, i32 0 %t62 = load ptr, ptr %t61 %t63 = load %S.C.CXType, ptr %a20 @@ -98346,8 +98391,8 @@ ok9333: store %S.cimport.Mapped %t64, ptr %a65 %t66 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 2 %t67 = load i1, ptr %t66 - br i1 %t67, label %then9334, label %else9335 -then9334: + br i1 %t67, label %then9344, label %else9345 +then9344: %t68 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 0 %t69 = load %S.ast.Type, ptr %t68 %t70 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 1 @@ -98358,65 +98403,65 @@ then9334: store %S.ast.Type %t73, ptr %t70 store %S.ast.Type %t74, ptr %a75 call void @finch.drop.S_ast_Type(ptr %a75) - br label %endif9336 -else9335: + br label %endif9346 +else9345: %t76 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t76 - br label %endif9336 -endif9336: + br label %endif9346 +endif9346: call void @finch.drop.S_cimport_Mapped(ptr %a65) - br label %endif9331 -endif9331: - br label %endif9320 -endif9320: + br label %endif9341 +endif9341: + br label %endif9330 +endif9330: %t77 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 %t78 = load i1, ptr %t77 - br i1 %t78, label %then9337, label %endif9339 -then9337: + br i1 %t78, label %then9347, label %endif9349 +then9347: %t79 = load ptr, ptr %a4 %t80 = icmp eq ptr %t79, null - br i1 %t80, label %panic9340, label %ok9341 -panic9340: - call void @finch_panic(ptr @.str.6481, i64 208, ptr @.str.6482) + br i1 %t80, label %panic9350, label %ok9351 +panic9350: + call void @finch_panic(ptr @.str.6483, i64 208, ptr @.str.6484) unreachable -ok9341: +ok9351: %t81 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t79, i32 0, i32 1 %t82 = load ptr, ptr %t81 %t83 = icmp eq ptr %t82, null - br i1 %t83, label %panic9342, label %ok9343 -panic9342: - call void @finch_panic(ptr @.str.6483, i64 208, ptr @.str.6484) + br i1 %t83, label %panic9352, label %ok9353 +panic9352: + call void @finch_panic(ptr @.str.6485, i64 208, ptr @.str.6486) unreachable -ok9343: +ok9353: %t84 = getelementptr inbounds %S.cimport.CStruct, ptr %t82, i32 0, i32 5 store i1 true, ptr %t84 - br label %endif9339 -endif9339: + br label %endif9349 +endif9349: %t85 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 0 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 %t87 = load i64, ptr %t86 %t88 = icmp eq i64 %t87, 0 - br i1 %t88, label %then9344, label %endif9346 -then9344: + br i1 %t88, label %then9354, label %endif9356 +then9354: %t89 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t89 - br label %endif9346 -endif9346: + br label %endif9356 +endif9356: %t90 = load ptr, ptr %a4 %t91 = icmp eq ptr %t90, null - br i1 %t91, label %panic9347, label %ok9348 -panic9347: - call void @finch_panic(ptr @.str.6485, i64 213, ptr @.str.6486) + br i1 %t91, label %panic9357, label %ok9358 +panic9357: + call void @finch_panic(ptr @.str.6487, i64 213, ptr @.str.6488) unreachable -ok9348: +ok9358: %t92 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t90, i32 0, i32 1 %t93 = load ptr, ptr %t92 %t94 = icmp eq ptr %t93, null - br i1 %t94, label %panic9349, label %ok9350 -panic9349: - call void @finch_panic(ptr @.str.6487, i64 213, ptr @.str.6488) + br i1 %t94, label %panic9359, label %ok9360 +panic9359: + call void @finch_panic(ptr @.str.6489, i64 213, ptr @.str.6490) unreachable -ok9350: +ok9360: %t95 = getelementptr inbounds %S.cimport.CStruct, ptr %t93, i32 0, i32 1 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 %t97 = load %S.cimport.CField, ptr %a12 @@ -98460,92 +98505,92 @@ entry: store i1 %p1, ptr %a2 %t3 = load i64, ptr %a1 %t4 = icmp eq i64 %t3, 1 - br i1 %t4, label %then9351, label %endif9353 -then9351: + br i1 %t4, label %then9361, label %endif9363 +then9361: %t5 = load i1, ptr %a2 - br i1 %t5, label %then9354, label %endif9356 -then9354: - %t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6489, i64 2, i64 0 }) + br i1 %t5, label %then9364, label %endif9366 +then9364: + %t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6491, i64 2, i64 0 }) %t7 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t6) store %S.ast.Type %t6, ptr %a8 call void @finch.drop.S_ast_Type(ptr %a8) ret %S.cimport.Mapped %t7 -endif9356: - %t9 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6490, i64 2, i64 0 }) +endif9366: + %t9 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6492, i64 2, i64 0 }) %t10 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t9) store %S.ast.Type %t9, ptr %a11 call void @finch.drop.S_ast_Type(ptr %a11) ret %S.cimport.Mapped %t10 -endif9353: +endif9363: %t12 = load i64, ptr %a1 %t13 = icmp eq i64 %t12, 2 - br i1 %t13, label %then9357, label %endif9359 -then9357: + br i1 %t13, label %then9367, label %endif9369 +then9367: %t14 = load i1, ptr %a2 - br i1 %t14, label %then9360, label %endif9362 -then9360: - %t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6491, i64 3, i64 0 }) + br i1 %t14, label %then9370, label %endif9372 +then9370: + %t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6493, i64 3, i64 0 }) %t16 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t15) store %S.ast.Type %t15, ptr %a17 call void @finch.drop.S_ast_Type(ptr %a17) ret %S.cimport.Mapped %t16 -endif9362: - %t18 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6492, i64 3, i64 0 }) +endif9372: + %t18 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6494, i64 3, i64 0 }) %t19 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t18) store %S.ast.Type %t18, ptr %a20 call void @finch.drop.S_ast_Type(ptr %a20) ret %S.cimport.Mapped %t19 -endif9359: +endif9369: %t21 = load i64, ptr %a1 %t22 = icmp eq i64 %t21, 4 - br i1 %t22, label %then9363, label %endif9365 -then9363: + br i1 %t22, label %then9373, label %endif9375 +then9373: %t23 = load i1, ptr %a2 - br i1 %t23, label %then9366, label %endif9368 -then9366: - %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6493, i64 3, i64 0 }) + br i1 %t23, label %then9376, label %endif9378 +then9376: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6495, i64 3, i64 0 }) %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) store %S.ast.Type %t24, ptr %a26 call void @finch.drop.S_ast_Type(ptr %a26) ret %S.cimport.Mapped %t25 -endif9368: - %t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6494, i64 3, i64 0 }) +endif9378: + %t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }) %t28 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t27) store %S.ast.Type %t27, ptr %a29 call void @finch.drop.S_ast_Type(ptr %a29) ret %S.cimport.Mapped %t28 -endif9365: +endif9375: %t30 = load i64, ptr %a1 %t31 = icmp eq i64 %t30, 8 - br i1 %t31, label %then9369, label %endif9371 -then9369: + br i1 %t31, label %then9379, label %endif9381 +then9379: %t32 = load i1, ptr %a2 - br i1 %t32, label %then9372, label %endif9374 -then9372: - %t33 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6495, i64 3, i64 0 }) + br i1 %t32, label %then9382, label %endif9384 +then9382: + %t33 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6497, i64 3, i64 0 }) %t34 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t33) store %S.ast.Type %t33, ptr %a35 call void @finch.drop.S_ast_Type(ptr %a35) ret %S.cimport.Mapped %t34 -endif9374: - %t36 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }) +endif9384: + %t36 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6498, i64 3, i64 0 }) %t37 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t36) store %S.ast.Type %t36, ptr %a38 call void @finch.drop.S_ast_Type(ptr %a38) ret %S.cimport.Mapped %t37 -endif9371: +endif9381: %t39 = load i64, ptr %a1 %t40 = mul i64 %t39, 8 call void @finch_str_from_int(ptr %a41, i64 %t40) %t42 = load { ptr, i64, i64 }, ptr %a41 - store { ptr, i64, i64 } { ptr @.str.6497, i64 7, i64 0 }, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.6499, i64 7, i64 0 }, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) store { ptr, i64, i64 } %t42, ptr %a46 call void @finch_str_drop(ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t47, ptr %a49 - store { ptr, i64, i64 } { ptr @.str.6498, i64 11, i64 0 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6500, i64 11, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) store { ptr, i64, i64 } %t47, ptr %a51 call void @finch_str_drop(ptr %a51) @@ -98629,181 +98674,181 @@ entry: store i32 %t15, ptr %a16 %t17 = load i32, ptr %a16 %t18 = icmp eq i32 %t17, 2 - br i1 %t18, label %then9375, label %endif9377 -then9375: - %t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6499, i64 4, i64 0 }) + br i1 %t18, label %then9385, label %endif9387 +then9385: + %t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6501, i64 4, i64 0 }) %t20 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t19) store %S.ast.Type %t19, ptr %a21 call void @finch.drop.S_ast_Type(ptr %a21) ret %S.cimport.Mapped %t20 -endif9377: +endif9387: %t22 = load i32, ptr %a16 %t23 = icmp eq i32 %t22, 3 - br i1 %t23, label %then9378, label %endif9380 -then9378: - %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6500, i64 4, i64 0 }) + br i1 %t23, label %then9388, label %endif9390 +then9388: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6502, i64 4, i64 0 }) %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) store %S.ast.Type %t24, ptr %a26 call void @finch.drop.S_ast_Type(ptr %a26) ret %S.cimport.Mapped %t25 -endif9380: +endif9390: %t27 = load i32, ptr %a16 %t28 = icmp eq i32 %t27, 13 - br label %logic.from9381 -logic.from9381: - br i1 %t28, label %logic.end9383, label %logic.rhs9382 -logic.rhs9382: + br label %logic.from9391 +logic.from9391: + br i1 %t28, label %logic.end9393, label %logic.rhs9392 +logic.rhs9392: %t29 = load i32, ptr %a16 %t30 = icmp eq i32 %t29, 4 - br label %logic.rend9384 -logic.rend9384: - br label %logic.end9383 -logic.end9383: - %t31 = phi i1 [ true, %logic.from9381 ], [ %t30, %logic.rend9384 ] - br i1 %t31, label %then9385, label %endif9387 -then9385: - %t32 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6501, i64 4, i64 0 }) + br label %logic.rend9394 +logic.rend9394: + br label %logic.end9393 +logic.end9393: + %t31 = phi i1 [ true, %logic.from9391 ], [ %t30, %logic.rend9394 ] + br i1 %t31, label %then9395, label %endif9397 +then9395: + %t32 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6503, i64 4, i64 0 }) %t33 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t32) store %S.ast.Type %t32, ptr %a34 call void @finch.drop.S_ast_Type(ptr %a34) ret %S.cimport.Mapped %t33 -endif9387: +endif9397: %t35 = load i32, ptr %a16 %t36 = icmp eq i32 %t35, 14 - br label %logic.from9388 -logic.from9388: - br i1 %t36, label %logic.end9390, label %logic.rhs9389 -logic.rhs9389: + br label %logic.from9398 +logic.from9398: + br i1 %t36, label %logic.end9400, label %logic.rhs9399 +logic.rhs9399: %t37 = load i32, ptr %a16 %t38 = icmp eq i32 %t37, 16 - br label %logic.rend9391 -logic.rend9391: - br label %logic.end9390 -logic.end9390: - %t39 = phi i1 [ true, %logic.from9388 ], [ %t38, %logic.rend9391 ] - br label %logic.from9392 -logic.from9392: - br i1 %t39, label %logic.end9394, label %logic.rhs9393 -logic.rhs9393: + br label %logic.rend9401 +logic.rend9401: + br label %logic.end9400 +logic.end9400: + %t39 = phi i1 [ true, %logic.from9398 ], [ %t38, %logic.rend9401 ] + br label %logic.from9402 +logic.from9402: + br i1 %t39, label %logic.end9404, label %logic.rhs9403 +logic.rhs9403: %t40 = load i32, ptr %a16 %t41 = icmp eq i32 %t40, 17 - br label %logic.rend9395 -logic.rend9395: - br label %logic.end9394 -logic.end9394: - %t42 = phi i1 [ true, %logic.from9392 ], [ %t41, %logic.rend9395 ] - br label %logic.from9396 -logic.from9396: - br i1 %t42, label %logic.end9398, label %logic.rhs9397 -logic.rhs9397: + br label %logic.rend9405 +logic.rend9405: + br label %logic.end9404 +logic.end9404: + %t42 = phi i1 [ true, %logic.from9402 ], [ %t41, %logic.rend9405 ] + br label %logic.from9406 +logic.from9406: + br i1 %t42, label %logic.end9408, label %logic.rhs9407 +logic.rhs9407: %t43 = load i32, ptr %a16 %t44 = icmp eq i32 %t43, 18 - br label %logic.rend9399 -logic.rend9399: - br label %logic.end9398 -logic.end9398: - %t45 = phi i1 [ true, %logic.from9396 ], [ %t44, %logic.rend9399 ] - br label %logic.from9400 -logic.from9400: - br i1 %t45, label %logic.end9402, label %logic.rhs9401 -logic.rhs9401: + br label %logic.rend9409 +logic.rend9409: + br label %logic.end9408 +logic.end9408: + %t45 = phi i1 [ true, %logic.from9406 ], [ %t44, %logic.rend9409 ] + br label %logic.from9410 +logic.from9410: + br i1 %t45, label %logic.end9412, label %logic.rhs9411 +logic.rhs9411: %t46 = load i32, ptr %a16 %t47 = icmp eq i32 %t46, 19 - br label %logic.rend9403 -logic.rend9403: - br label %logic.end9402 -logic.end9402: - %t48 = phi i1 [ true, %logic.from9400 ], [ %t47, %logic.rend9403 ] - br i1 %t48, label %then9404, label %endif9406 -then9404: + br label %logic.rend9413 +logic.rend9413: + br label %logic.end9412 +logic.end9412: + %t48 = phi i1 [ true, %logic.from9410 ], [ %t47, %logic.rend9413 ] + br i1 %t48, label %then9414, label %endif9416 +then9414: %t49 = load i64, ptr %a13 %t50 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t49, i1 true) ret %S.cimport.Mapped %t50 -endif9406: +endif9416: %t51 = load i32, ptr %a16 %t52 = icmp eq i32 %t51, 5 - br label %logic.from9407 -logic.from9407: - br i1 %t52, label %logic.end9409, label %logic.rhs9408 -logic.rhs9408: + br label %logic.from9417 +logic.from9417: + br i1 %t52, label %logic.end9419, label %logic.rhs9418 +logic.rhs9418: %t53 = load i32, ptr %a16 %t54 = icmp eq i32 %t53, 8 - br label %logic.rend9410 -logic.rend9410: - br label %logic.end9409 -logic.end9409: - %t55 = phi i1 [ true, %logic.from9407 ], [ %t54, %logic.rend9410 ] - br label %logic.from9411 -logic.from9411: - br i1 %t55, label %logic.end9413, label %logic.rhs9412 -logic.rhs9412: + br label %logic.rend9420 +logic.rend9420: + br label %logic.end9419 +logic.end9419: + %t55 = phi i1 [ true, %logic.from9417 ], [ %t54, %logic.rend9420 ] + br label %logic.from9421 +logic.from9421: + br i1 %t55, label %logic.end9423, label %logic.rhs9422 +logic.rhs9422: %t56 = load i32, ptr %a16 %t57 = icmp eq i32 %t56, 9 - br label %logic.rend9414 -logic.rend9414: - br label %logic.end9413 -logic.end9413: - %t58 = phi i1 [ true, %logic.from9411 ], [ %t57, %logic.rend9414 ] - br label %logic.from9415 -logic.from9415: - br i1 %t58, label %logic.end9417, label %logic.rhs9416 -logic.rhs9416: + br label %logic.rend9424 +logic.rend9424: + br label %logic.end9423 +logic.end9423: + %t58 = phi i1 [ true, %logic.from9421 ], [ %t57, %logic.rend9424 ] + br label %logic.from9425 +logic.from9425: + br i1 %t58, label %logic.end9427, label %logic.rhs9426 +logic.rhs9426: %t59 = load i32, ptr %a16 %t60 = icmp eq i32 %t59, 10 - br label %logic.rend9418 -logic.rend9418: - br label %logic.end9417 -logic.end9417: - %t61 = phi i1 [ true, %logic.from9415 ], [ %t60, %logic.rend9418 ] - br label %logic.from9419 -logic.from9419: - br i1 %t61, label %logic.end9421, label %logic.rhs9420 -logic.rhs9420: + br label %logic.rend9428 +logic.rend9428: + br label %logic.end9427 +logic.end9427: + %t61 = phi i1 [ true, %logic.from9425 ], [ %t60, %logic.rend9428 ] + br label %logic.from9429 +logic.from9429: + br i1 %t61, label %logic.end9431, label %logic.rhs9430 +logic.rhs9430: %t62 = load i32, ptr %a16 %t63 = icmp eq i32 %t62, 11 - br label %logic.rend9422 -logic.rend9422: - br label %logic.end9421 -logic.end9421: - %t64 = phi i1 [ true, %logic.from9419 ], [ %t63, %logic.rend9422 ] - br i1 %t64, label %then9423, label %endif9425 -then9423: + br label %logic.rend9432 +logic.rend9432: + br label %logic.end9431 +logic.end9431: + %t64 = phi i1 [ true, %logic.from9429 ], [ %t63, %logic.rend9432 ] + br i1 %t64, label %then9433, label %endif9435 +then9433: %t65 = load i64, ptr %a13 %t66 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t65, i1 false) ret %S.cimport.Mapped %t66 -endif9425: +endif9435: %t67 = load i32, ptr %a16 %t68 = icmp eq i32 %t67, 106 - br i1 %t68, label %then9426, label %endif9428 -then9426: + br i1 %t68, label %then9436, label %endif9438 +then9436: %t69 = load i64, ptr %a13 %t70 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t69, i1 true) ret %S.cimport.Mapped %t70 -endif9428: +endif9438: %t71 = load i32, ptr %a16 %t72 = icmp eq i32 %t71, 21 - br i1 %t72, label %then9429, label %endif9431 -then9429: - %t73 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6502, i64 3, i64 0 }) + br i1 %t72, label %then9439, label %endif9441 +then9439: + %t73 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6504, i64 3, i64 0 }) %t74 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t73) store %S.ast.Type %t73, ptr %a75 call void @finch.drop.S_ast_Type(ptr %a75) ret %S.cimport.Mapped %t74 -endif9431: +endif9441: %t76 = load i32, ptr %a16 %t77 = icmp eq i32 %t76, 22 - br i1 %t77, label %then9432, label %endif9434 -then9432: - %t78 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6503, i64 5, i64 0 }) + br i1 %t77, label %then9442, label %endif9444 +then9442: + %t78 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6505, i64 5, i64 0 }) %t79 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t78) store %S.ast.Type %t78, ptr %a80 call void @finch.drop.S_ast_Type(ptr %a80) ret %S.cimport.Mapped %t79 -endif9434: +endif9444: %t81 = load i32, ptr %a16 %t82 = icmp eq i32 %t81, 101 - br i1 %t82, label %then9435, label %endif9437 -then9435: + br i1 %t82, label %then9445, label %endif9447 +then9445: %t85 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t85, ptr %a86 call void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16 %a84, ptr %a86) @@ -98815,90 +98860,90 @@ then9435: %t91 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t92 = load i32, ptr %t91 %t93 = icmp eq i32 %t92, 13 - br label %logic.from9438 -logic.from9438: - br i1 %t93, label %logic.end9440, label %logic.rhs9439 -logic.rhs9439: + br label %logic.from9448 +logic.from9448: + br i1 %t93, label %logic.end9450, label %logic.rhs9449 +logic.rhs9449: %t94 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t95 = load i32, ptr %t94 %t96 = icmp eq i32 %t95, 4 - br label %logic.rend9441 -logic.rend9441: - br label %logic.end9440 -logic.end9440: - %t97 = phi i1 [ true, %logic.from9438 ], [ %t96, %logic.rend9441 ] - br label %logic.from9442 -logic.from9442: - br i1 %t97, label %logic.rhs9443, label %logic.end9444 -logic.rhs9443: + br label %logic.rend9451 +logic.rend9451: + br label %logic.end9450 +logic.end9450: + %t97 = phi i1 [ true, %logic.from9448 ], [ %t96, %logic.rend9451 ] + br label %logic.from9452 +logic.from9452: + br i1 %t97, label %logic.rhs9453, label %logic.end9454 +logic.rhs9453: %t98 = load i1, ptr %a3 - br label %logic.rend9445 -logic.rend9445: - br label %logic.end9444 -logic.end9444: - %t99 = phi i1 [ false, %logic.from9442 ], [ %t98, %logic.rend9445 ] - br i1 %t99, label %then9446, label %endif9448 -then9446: + br label %logic.rend9455 +logic.rend9455: + br label %logic.end9454 +logic.end9454: + %t99 = phi i1 [ false, %logic.from9452 ], [ %t98, %logic.rend9455 ] + br i1 %t99, label %then9456, label %endif9458 +then9456: %t100 = load i1, ptr %a4 %t101 = xor i1 %t100, true - br label %logic.from9449 -logic.from9449: - br i1 %t101, label %logic.end9451, label %logic.rhs9450 -logic.rhs9450: + br label %logic.from9459 +logic.from9459: + br i1 %t101, label %logic.end9461, label %logic.rhs9460 +logic.rhs9460: %t102 = load %S.C.CXType, ptr %a90 store %S.C.CXType %t102, ptr %a103 %t104 = call i32 @clang_isConstQualifiedType(ptr %a103) %t105 = icmp ne i32 %t104, 0 - br label %logic.rend9452 -logic.rend9452: - br label %logic.end9451 -logic.end9451: - %t106 = phi i1 [ true, %logic.from9449 ], [ %t105, %logic.rend9452 ] - br i1 %t106, label %then9453, label %endif9455 -then9453: - %t107 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6504, i64 3, i64 0 }) + br label %logic.rend9462 +logic.rend9462: + br label %logic.end9461 +logic.end9461: + %t106 = phi i1 [ true, %logic.from9459 ], [ %t105, %logic.rend9462 ] + br i1 %t106, label %then9463, label %endif9465 +then9463: + %t107 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6506, i64 3, i64 0 }) %t108 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t107) store %S.ast.Type %t107, ptr %a109 call void @finch.drop.S_ast_Type(ptr %a109) ret %S.cimport.Mapped %t108 -endif9455: - br label %endif9448 -endif9448: +endif9465: + br label %endif9458 +endif9458: %t110 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t111 = load i32, ptr %t110 %t112 = icmp eq i32 %t111, 2 - br label %logic.from9456 -logic.from9456: - br i1 %t112, label %logic.end9458, label %logic.rhs9457 -logic.rhs9457: + br label %logic.from9466 +logic.from9466: + br i1 %t112, label %logic.end9468, label %logic.rhs9467 +logic.rhs9467: %t113 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t114 = load i32, ptr %t113 %t115 = icmp eq i32 %t114, 111 - br label %logic.rend9459 -logic.rend9459: - br label %logic.end9458 -logic.end9458: - %t116 = phi i1 [ true, %logic.from9456 ], [ %t115, %logic.rend9459 ] - br label %logic.from9460 -logic.from9460: - br i1 %t116, label %logic.end9462, label %logic.rhs9461 -logic.rhs9461: + br label %logic.rend9469 +logic.rend9469: + br label %logic.end9468 +logic.end9468: + %t116 = phi i1 [ true, %logic.from9466 ], [ %t115, %logic.rend9469 ] + br label %logic.from9470 +logic.from9470: + br i1 %t116, label %logic.end9472, label %logic.rhs9471 +logic.rhs9471: %t117 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t118 = load i32, ptr %t117 %t119 = icmp eq i32 %t118, 110 - br label %logic.rend9463 -logic.rend9463: - br label %logic.end9462 -logic.end9462: - %t120 = phi i1 [ true, %logic.from9460 ], [ %t119, %logic.rend9463 ] - br i1 %t120, label %then9464, label %endif9466 -then9464: - %t121 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6505, i64 3, i64 0 }) + br label %logic.rend9473 +logic.rend9473: + br label %logic.end9472 +logic.end9472: + %t120 = phi i1 [ true, %logic.from9470 ], [ %t119, %logic.rend9473 ] + br i1 %t120, label %then9474, label %endif9476 +then9474: + %t121 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6507, i64 3, i64 0 }) %t122 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t121) store %S.ast.Type %t121, ptr %a123 call void @finch.drop.S_ast_Type(ptr %a123) ret %S.cimport.Mapped %t122 -endif9466: +endif9476: %t124 = load ptr, ptr %a1 %t125 = load %S.C.CXType, ptr %a90 %t126 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t124, %S.C.CXType %t125, i1 false, i1 false) @@ -98906,47 +98951,47 @@ endif9466: %t128 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 2 %t129 = load i1, ptr %t128 %t130 = xor i1 %t129, true - br label %logic.from9467 -logic.from9467: - br i1 %t130, label %logic.end9469, label %logic.rhs9468 -logic.rhs9468: + br label %logic.from9477 +logic.from9477: + br i1 %t130, label %logic.end9479, label %logic.rhs9478 +logic.rhs9478: %t131 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 - store { ptr, i64, i64 } { ptr @.str.6506, i64 4, i64 0 }, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.6508, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 - br label %logic.rend9470 -logic.rend9470: - br label %logic.end9469 -logic.end9469: - %t138 = phi i1 [ true, %logic.from9467 ], [ %t137, %logic.rend9470 ] - br label %logic.from9471 -logic.from9471: - br i1 %t138, label %logic.end9473, label %logic.rhs9472 -logic.rhs9472: + br label %logic.rend9480 +logic.rend9480: + br label %logic.end9479 +logic.end9479: + %t138 = phi i1 [ true, %logic.from9477 ], [ %t137, %logic.rend9480 ] + br label %logic.from9481 +logic.from9481: + br i1 %t138, label %logic.end9483, label %logic.rhs9482 +logic.rhs9482: %t139 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 %t140 = getelementptr inbounds %S.ast.Type, ptr %t139, i32 0, i32 0 %t141 = load { ptr, i64, i64 }, ptr %t140 store { ptr, i64, i64 } %t141, ptr %a142 - store { ptr, i64, i64 } { ptr @.str.6507, i64 5, i64 0 }, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.6509, i64 5, i64 0 }, ptr %a143 %t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143) %t145 = icmp ne i32 %t144, 0 - br label %logic.rend9474 -logic.rend9474: - br label %logic.end9473 -logic.end9473: - %t146 = phi i1 [ true, %logic.from9471 ], [ %t145, %logic.rend9474 ] - br i1 %t146, label %then9475, label %endif9477 -then9475: - %t147 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6508, i64 3, i64 0 }) + br label %logic.rend9484 +logic.rend9484: + br label %logic.end9483 +logic.end9483: + %t146 = phi i1 [ true, %logic.from9481 ], [ %t145, %logic.rend9484 ] + br i1 %t146, label %then9485, label %endif9487 +then9485: + %t147 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6510, i64 3, i64 0 }) %t148 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t147) store %S.ast.Type %t147, ptr %a149 call void @finch.drop.S_ast_Type(ptr %a149) call void @finch.drop.S_cimport_Mapped(ptr %a127) ret %S.cimport.Mapped %t148 -endif9477: +endif9487: %t150 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 %t151 = load %S.ast.Type, ptr %t150 %t152 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t151) @@ -98955,11 +99000,11 @@ endif9477: call void @finch.drop.S_ast_Type(ptr %a154) call void @finch.drop.S_cimport_Mapped(ptr %a127) ret %S.cimport.Mapped %t153 -endif9437: +endif9447: %t155 = load i32, ptr %a16 %t156 = icmp eq i32 %t155, 105 - br i1 %t156, label %then9478, label %endif9480 -then9478: + br i1 %t156, label %then9488, label %endif9490 +then9488: %t158 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t158, ptr %a159 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a157, ptr %a159) @@ -98967,11 +99012,11 @@ then9478: store %S.C.CXCursor %t160, ptr %a161 %t162 = call i32 @clang_getCursorKind(ptr %a161) %t163 = icmp eq i32 %t162, 3 - br i1 %t163, label %then9481, label %endif9483 -then9481: - %t164 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6509, i64 23, i64 0 }) + br i1 %t163, label %then9491, label %endif9493 +then9491: + %t164 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6511, i64 23, i64 0 }) ret %S.cimport.Mapped %t164 -endif9483: +endif9493: %t165 = load ptr, ptr %a1 %t166 = load %S.C.CXType, ptr %a9 %t167 = call { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %t165, %S.C.CXType %t166) @@ -98979,29 +99024,29 @@ endif9483: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = icmp eq i64 %t170, 0 - br i1 %t171, label %then9484, label %endif9486 -then9484: - %t172 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6510, i64 36, i64 0 }) + br i1 %t171, label %then9494, label %endif9496 +then9494: + %t172 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6512, i64 36, i64 0 }) call void @finch_str_drop(ptr %a168) ret %S.cimport.Mapped %t172 -endif9486: - %t173 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6511, i64 5, i64 0 }, 0 +endif9496: + %t173 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6513, i64 5, i64 0 }, 0 %t174 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } %t174, ptr %a175 call void @finch_str_copy(ptr %a176, ptr %a175) %t177 = load { ptr, i64, i64 }, ptr %a176 %t178 = insertvalue %S.ast.Type %t173, { ptr, i64, i64 } %t177, 2 - %t179 = insertvalue %S.ast.Type %t178, { ptr, i64, i64 } { ptr @.str.6512, i64 1, i64 0 }, 3 + %t179 = insertvalue %S.ast.Type %t178, { ptr, i64, i64 } { ptr @.str.6514, i64 1, i64 0 }, 3 %t180 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t179) store %S.ast.Type %t179, ptr %a181 call void @finch.drop.S_ast_Type(ptr %a181) call void @finch_str_drop(ptr %a168) ret %S.cimport.Mapped %t180 -endif9480: +endif9490: %t182 = load i32, ptr %a16 %t183 = icmp eq i32 %t182, 112 - br i1 %t183, label %then9487, label %endif9489 -then9487: + br i1 %t183, label %then9497, label %endif9499 +then9497: %t184 = load ptr, ptr %a1 %t186 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t186, ptr %a187 @@ -99012,11 +99057,11 @@ then9487: %t191 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 2 %t192 = load i1, ptr %t191 %t193 = xor i1 %t192, true - br i1 %t193, label %then9490, label %endif9492 -then9490: + br i1 %t193, label %then9500, label %endif9502 +then9500: %t194 = load %S.cimport.Mapped, ptr %a190 ret %S.cimport.Mapped %t194 -endif9492: +endif9502: %t195 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 0 %t196 = load %S.ast.Type, ptr %t195 %t197 = load %S.C.CXType, ptr %a9 @@ -99028,28 +99073,28 @@ endif9492: call void @finch.drop.S_ast_Type(ptr %a202) call void @finch.drop.S_cimport_Mapped(ptr %a190) ret %S.cimport.Mapped %t201 -endif9489: +endif9499: %t203 = load i32, ptr %a16 %t204 = icmp eq i32 %t203, 23 - br i1 %t204, label %then9493, label %endif9495 -then9493: - %t205 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6513, i64 16, i64 0 }) + br i1 %t204, label %then9503, label %endif9505 +then9503: + %t205 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6515, i64 16, i64 0 }) ret %S.cimport.Mapped %t205 -endif9495: +endif9505: %t206 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t206, ptr %a207 %t208 = call [2 x i64] @clang_getTypeSpelling(ptr %a207) store [2 x i64] %t208, ptr %a209 %t210 = load %S.C.CXString, ptr %a209 %t211 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t210) - store { ptr, i64, i64 } { ptr @.str.6514, i64 17, i64 0 }, ptr %a213 + store { ptr, i64, i64 } { ptr @.str.6516, i64 17, i64 0 }, ptr %a213 store { ptr, i64, i64 } %t211, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) store { ptr, i64, i64 } %t211, ptr %a215 call void @finch_str_drop(ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } %t216, ptr %a218 - store { ptr, i64, i64 } { ptr @.str.6515, i64 1, i64 0 }, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.6517, i64 1, i64 0 }, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) store { ptr, i64, i64 } %t216, ptr %a220 call void @finch_str_drop(ptr %a220) @@ -99098,99 +99143,99 @@ entry: store i64 10, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t8, ptr %a9 - store { ptr, i64, i64 } { ptr @.str.6517, i64 2, i64 0 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.6519, i64 2, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_starts(ptr %a9, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from9496 -logic.from9496: - br i1 %t13, label %logic.end9498, label %logic.rhs9497 -logic.rhs9497: + br label %logic.from9506 +logic.from9506: + br i1 %t13, label %logic.end9508, label %logic.rhs9507 +logic.rhs9507: %t14 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t14, ptr %a15 - store { ptr, i64, i64 } { ptr @.str.6519, i64 2, i64 0 }, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6521, i64 2, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br label %logic.rend9499 -logic.rend9499: - br label %logic.end9498 -logic.end9498: - %t20 = phi i1 [ true, %logic.from9496 ], [ %t19, %logic.rend9499 ] - br i1 %t20, label %then9500, label %else9501 -then9500: + br label %logic.rend9509 +logic.rend9509: + br label %logic.end9508 +logic.end9508: + %t20 = phi i1 [ true, %logic.from9506 ], [ %t19, %logic.rend9509 ] + br i1 %t20, label %then9510, label %else9511 +then9510: store i64 16, ptr %a7 %t21 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t25 = load i64, ptr %t24 - call void @finch_str_sub(ptr %a23, ptr %a22, i64 2, i64 %t25, ptr @.str.6520, i64 331) + call void @finch_str_sub(ptr %a23, ptr %a22, i64 2, i64 %t25, ptr @.str.6522, i64 331) %t26 = load { ptr, i64, i64 }, ptr %a23 %t27 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t26, ptr %a6 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_drop(ptr %a28) - br label %endif9502 -else9501: + br label %endif9512 +else9511: %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = icmp sgt i64 %t30, 1 - br label %logic.from9503 -logic.from9503: - br i1 %t31, label %logic.rhs9504, label %logic.end9505 -logic.rhs9504: + br label %logic.from9513 +logic.from9513: + br i1 %t31, label %logic.rhs9514, label %logic.end9515 +logic.rhs9514: %t32 = load { ptr, i64, i64 }, ptr %a6 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 0, %t33 - br i1 %t34, label %range9506, label %inrange9507 -range9506: - call void @finch_panic_index(ptr @.str.6521, i64 332, i64 0, i64 %t33) + br i1 %t34, label %range9516, label %inrange9517 +range9516: + call void @finch_panic_index(ptr @.str.6523, i64 332, i64 0, i64 %t33) unreachable -inrange9507: +inrange9517: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds i8, ptr %t35, i64 0 %t37 = load i8, ptr %t36 %t38 = icmp eq i8 %t37, 48 - br label %logic.rend9508 -logic.rend9508: - br label %logic.end9505 -logic.end9505: - %t39 = phi i1 [ false, %logic.from9503 ], [ %t38, %logic.rend9508 ] - br i1 %t39, label %then9509, label %endif9511 -then9509: + br label %logic.rend9518 +logic.rend9518: + br label %logic.end9515 +logic.end9515: + %t39 = phi i1 [ false, %logic.from9513 ], [ %t38, %logic.rend9518 ] + br i1 %t39, label %then9519, label %endif9521 +then9519: store i64 8, ptr %a7 %t40 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t40, ptr %a41 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t44 = load i64, ptr %t43 - call void @finch_str_sub(ptr %a42, ptr %a41, i64 1, i64 %t44, ptr @.str.6522, i64 334) + call void @finch_str_sub(ptr %a42, ptr %a41, i64 1, i64 %t44, ptr @.str.6524, i64 334) %t45 = load { ptr, i64, i64 }, ptr %a42 %t46 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t45, ptr %a6 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %endif9511 -endif9511: - br label %endif9502 -endif9502: + br label %endif9521 +endif9521: + br label %endif9512 +endif9512: store i64 0, ptr %a48 store i1 false, ptr %a49 store i64 0, ptr %a50 - br label %while.cond9512 -while.cond9512: + br label %while.cond9522 +while.cond9522: %t51 = load i64, ptr %a50 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t53 = load i64, ptr %t52 %t54 = icmp slt i64 %t51, %t53 - br i1 %t54, label %while.body9513, label %while.end9514 -while.body9513: + br i1 %t54, label %while.body9523, label %while.end9524 +while.body9523: %t55 = load i64, ptr %a50 %t56 = load { ptr, i64, i64 }, ptr %a6 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 %t55, %t57 - br i1 %t58, label %range9515, label %inrange9516 -range9515: - call void @finch_panic_index(ptr @.str.6523, i64 340, i64 %t55, i64 %t57) + br i1 %t58, label %range9525, label %inrange9526 +range9525: + call void @finch_panic_index(ptr @.str.6525, i64 340, i64 %t55, i64 %t57) unreachable -inrange9516: +inrange9526: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds i8, ptr %t59, i64 %t55 %t61 = load i8, ptr %t60 @@ -99198,83 +99243,83 @@ inrange9516: store i64 99, ptr %a63 %t64 = load i8, ptr %a62 %t65 = icmp uge i8 %t64, 48 - br label %logic.from9517 -logic.from9517: - br i1 %t65, label %logic.rhs9518, label %logic.end9519 -logic.rhs9518: + br label %logic.from9527 +logic.from9527: + br i1 %t65, label %logic.rhs9528, label %logic.end9529 +logic.rhs9528: %t66 = load i8, ptr %a62 %t67 = icmp ule i8 %t66, 57 - br label %logic.rend9520 -logic.rend9520: - br label %logic.end9519 -logic.end9519: - %t68 = phi i1 [ false, %logic.from9517 ], [ %t67, %logic.rend9520 ] - br i1 %t68, label %then9521, label %else9522 -then9521: + br label %logic.rend9530 +logic.rend9530: + br label %logic.end9529 +logic.end9529: + %t68 = phi i1 [ false, %logic.from9527 ], [ %t67, %logic.rend9530 ] + br i1 %t68, label %then9531, label %else9532 +then9531: %t69 = load i8, ptr %a62 %t70 = zext i8 %t69 to i64 %t71 = zext i8 48 to i64 %t72 = sub i64 %t70, %t71 store i64 %t72, ptr %a63 - br label %endif9523 -else9522: + br label %endif9533 +else9532: %t73 = load i8, ptr %a62 %t74 = icmp uge i8 %t73, 97 - br label %logic.from9524 -logic.from9524: - br i1 %t74, label %logic.rhs9525, label %logic.end9526 -logic.rhs9525: + br label %logic.from9534 +logic.from9534: + br i1 %t74, label %logic.rhs9535, label %logic.end9536 +logic.rhs9535: %t75 = load i8, ptr %a62 %t76 = icmp ule i8 %t75, 102 - br label %logic.rend9527 -logic.rend9527: - br label %logic.end9526 -logic.end9526: - %t77 = phi i1 [ false, %logic.from9524 ], [ %t76, %logic.rend9527 ] - br i1 %t77, label %then9528, label %else9529 -then9528: + br label %logic.rend9537 +logic.rend9537: + br label %logic.end9536 +logic.end9536: + %t77 = phi i1 [ false, %logic.from9534 ], [ %t76, %logic.rend9537 ] + br i1 %t77, label %then9538, label %else9539 +then9538: %t78 = load i8, ptr %a62 %t79 = zext i8 %t78 to i64 %t80 = zext i8 97 to i64 %t81 = sub i64 %t79, %t80 %t82 = add i64 %t81, 10 store i64 %t82, ptr %a63 - br label %endif9530 -else9529: + br label %endif9540 +else9539: %t83 = load i8, ptr %a62 %t84 = icmp uge i8 %t83, 65 - br label %logic.from9531 -logic.from9531: - br i1 %t84, label %logic.rhs9532, label %logic.end9533 -logic.rhs9532: + br label %logic.from9541 +logic.from9541: + br i1 %t84, label %logic.rhs9542, label %logic.end9543 +logic.rhs9542: %t85 = load i8, ptr %a62 %t86 = icmp ule i8 %t85, 70 - br label %logic.rend9534 -logic.rend9534: - br label %logic.end9533 -logic.end9533: - %t87 = phi i1 [ false, %logic.from9531 ], [ %t86, %logic.rend9534 ] - br i1 %t87, label %then9535, label %endif9537 -then9535: + br label %logic.rend9544 +logic.rend9544: + br label %logic.end9543 +logic.end9543: + %t87 = phi i1 [ false, %logic.from9541 ], [ %t86, %logic.rend9544 ] + br i1 %t87, label %then9545, label %endif9547 +then9545: %t88 = load i8, ptr %a62 %t89 = zext i8 %t88 to i64 %t90 = zext i8 65 to i64 %t91 = sub i64 %t89, %t90 %t92 = add i64 %t91, 10 store i64 %t92, ptr %a63 - br label %endif9537 -endif9537: - br label %endif9530 -endif9530: - br label %endif9523 -endif9523: + br label %endif9547 +endif9547: + br label %endif9540 +endif9540: + br label %endif9533 +endif9533: %t93 = load i64, ptr %a63 %t94 = load i64, ptr %a7 %t95 = icmp sge i64 %t93, %t94 - br i1 %t95, label %then9538, label %endif9540 -then9538: - br label %while.end9514 -endif9540: + br i1 %t95, label %then9548, label %endif9550 +then9548: + br label %while.end9524 +endif9550: %t96 = load i64, ptr %a48 %t97 = load i64, ptr %a7 %t98 = mul i64 %t96, %t97 @@ -99285,26 +99330,26 @@ endif9540: %t101 = load i64, ptr %a50 %t102 = add i64 %t101, 1 store i64 %t102, ptr %a50 - br label %while.cond9512 -while.end9514: - br label %while.cond9541 -while.cond9541: + br label %while.cond9522 +while.end9524: + br label %while.cond9551 +while.cond9551: %t103 = load i64, ptr %a50 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t105 = load i64, ptr %t104 %t106 = icmp slt i64 %t103, %t105 - br i1 %t106, label %while.body9542, label %while.end9543 -while.body9542: - store { ptr, i64, i64 } { ptr @.str.6524, i64 4, i64 0 }, ptr %a107 + br i1 %t106, label %while.body9552, label %while.end9553 +while.body9552: + store { ptr, i64, i64 } { ptr @.str.6526, i64 4, i64 0 }, ptr %a107 %t109 = load i64, ptr %a50 %t110 = load { ptr, i64, i64 }, ptr %a6 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 - br i1 %t112, label %range9544, label %inrange9545 -range9544: - call void @finch_panic_index(ptr @.str.6526, i64 358, i64 %t109, i64 %t111) + br i1 %t112, label %range9554, label %inrange9555 +range9554: + call void @finch_panic_index(ptr @.str.6528, i64 358, i64 %t109, i64 %t111) unreachable -inrange9545: +inrange9555: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds i8, ptr %t113, i64 %t109 %t115 = load i8, ptr %t114 @@ -99316,34 +99361,34 @@ inrange9545: store { ptr, i64, i64 } %t117, ptr %a121 call void @finch_str_drop(ptr %a121) %t122 = xor i1 %t120, true - br i1 %t122, label %then9546, label %endif9548 -then9546: + br i1 %t122, label %then9556, label %endif9558 +then9556: call void @finch_str_drop(ptr %a6) ret %S.cimport.Number zeroinitializer -endif9548: +endif9558: %t123 = load i64, ptr %a50 %t124 = add i64 %t123, 1 store i64 %t124, ptr %a50 - br label %while.cond9541 -while.end9543: + br label %while.cond9551 +while.end9553: %t125 = load i1, ptr %a49 %t126 = xor i1 %t125, true - br label %logic.from9549 -logic.from9549: - br i1 %t126, label %logic.rhs9550, label %logic.end9551 -logic.rhs9550: + br label %logic.from9559 +logic.from9559: + br i1 %t126, label %logic.rhs9560, label %logic.end9561 +logic.rhs9560: %t127 = load i64, ptr %a7 %t128 = icmp ne i64 %t127, 8 - br label %logic.rend9552 -logic.rend9552: - br label %logic.end9551 -logic.end9551: - %t129 = phi i1 [ false, %logic.from9549 ], [ %t128, %logic.rend9552 ] - br i1 %t129, label %then9553, label %endif9555 -then9553: + br label %logic.rend9562 +logic.rend9562: + br label %logic.end9561 +logic.end9561: + %t129 = phi i1 [ false, %logic.from9559 ], [ %t128, %logic.rend9562 ] + br i1 %t129, label %then9563, label %endif9565 +then9563: call void @finch_str_drop(ptr %a6) ret %S.cimport.Number zeroinitializer -endif9555: +endif9565: %t130 = load i64, ptr %a48 %t131 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t130, 1 %t132 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t131, 0 @@ -99417,11 +99462,11 @@ entry: store i32 0, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic9556, label %ok9557 -panic9556: - call void @finch_panic(ptr @.str.6527, i64 373, ptr @.str.6528) + br i1 %t6, label %panic9566, label %ok9567 +panic9566: + call void @finch_panic(ptr @.str.6529, i64 373, ptr @.str.6530) unreachable -ok9557: +ok9567: %t7 = getelementptr inbounds %S.cimport.Importer, ptr %t5, i32 0, i32 1 %t8 = load ptr, ptr %t7 %t10 = load %S.C.CXCursor, ptr %a2 @@ -99434,12 +99479,12 @@ ok9557: %t15 = load i32, ptr %a4 %t16 = zext i32 %t15 to i64 store i64 1, ptr %a17 - br label %for.cond9558 -for.cond9558: + br label %for.cond9568 +for.cond9568: %t18 = load i64, ptr %a17 %t19 = icmp slt i64 %t18, %t16 - br i1 %t19, label %for.body9559, label %for.end9561 -for.body9559: + br i1 %t19, label %for.body9569, label %for.end9571 +for.body9569: %t20 = load i64, ptr %a17 %t21 = load ptr, ptr %a3 %t22 = getelementptr inbounds %S.C.CXToken, ptr %t21, i64 %t20 @@ -99447,18 +99492,18 @@ for.body9559: store %S.C.CXToken %t23, ptr %a24 %t25 = call i32 @clang_getTokenKind(ptr %a24) %t26 = icmp eq i32 %t25, 4 - br i1 %t26, label %then9562, label %endif9564 -then9562: - br label %for.step9560 -endif9564: + br i1 %t26, label %then9572, label %endif9574 +then9572: + br label %for.step9570 +endif9574: %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic9565, label %ok9566 -panic9565: - call void @finch_panic(ptr @.str.6529, i64 379, ptr @.str.6530) + br i1 %t29, label %panic9575, label %ok9576 +panic9575: + call void @finch_panic(ptr @.str.6531, i64 379, ptr @.str.6532) unreachable -ok9566: +ok9576: %t30 = getelementptr inbounds %S.cimport.Importer, ptr %t28, i32 0, i32 1 %t31 = load ptr, ptr %t30 %t32 = load i64, ptr %a17 @@ -99477,91 +99522,91 @@ ok9566: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t27 - br label %for.step9560 -for.step9560: + br label %for.step9570 +for.step9570: %t45 = load i64, ptr %a17 %t46 = add i64 %t45, 1 store i64 %t46, ptr %a17 - br label %for.cond9558 -for.end9561: + br label %for.cond9568 +for.end9571: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic9567, label %ok9568 -panic9567: - call void @finch_panic(ptr @.str.6531, i64 381, ptr @.str.6532) + br i1 %t48, label %panic9577, label %ok9578 +panic9577: + call void @finch_panic(ptr @.str.6533, i64 381, ptr @.str.6534) unreachable -ok9568: +ok9578: %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 1 %t50 = load ptr, ptr %t49 %t51 = load ptr, ptr %a3 %t52 = load i32, ptr %a4 call void @clang_disposeTokens(ptr %t50, ptr %t51, i32 %t52) - br label %while.cond9569 -while.cond9569: + br label %while.cond9579 +while.cond9579: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sge i64 %t54, 2 - br label %logic.from9572 -logic.from9572: - br i1 %t55, label %logic.rhs9573, label %logic.end9574 -logic.rhs9573: + br label %logic.from9582 +logic.from9582: + br i1 %t55, label %logic.rhs9583, label %logic.end9584 +logic.rhs9583: %t56 = load { ptr, i64, i64 }, ptr %a14 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 - br i1 %t58, label %range9575, label %inrange9576 -range9575: - call void @finch_panic_index(ptr @.str.6533, i64 383, i64 0, i64 %t57) + br i1 %t58, label %range9585, label %inrange9586 +range9585: + call void @finch_panic_index(ptr @.str.6535, i64 383, i64 0, i64 %t57) unreachable -inrange9576: +inrange9586: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 0 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 - store { ptr, i64, i64 } { ptr @.str.6534, i64 1, i64 0 }, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6536, i64 1, i64 0 }, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 - br label %logic.rend9577 -logic.rend9577: - br label %logic.end9574 -logic.end9574: - %t66 = phi i1 [ false, %logic.from9572 ], [ %t65, %logic.rend9577 ] - br label %logic.from9578 -logic.from9578: - br i1 %t66, label %logic.rhs9579, label %logic.end9580 -logic.rhs9579: + br label %logic.rend9587 +logic.rend9587: + br label %logic.end9584 +logic.end9584: + %t66 = phi i1 [ false, %logic.from9582 ], [ %t65, %logic.rend9587 ] + br label %logic.from9588 +logic.from9588: + br i1 %t66, label %logic.rhs9589, label %logic.end9590 +logic.rhs9589: %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t68 = load i64, ptr %t67 %t69 = sub i64 %t68, 1 %t70 = load { ptr, i64, i64 }, ptr %a14 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 %t69, %t71 - br i1 %t72, label %range9581, label %inrange9582 -range9581: - call void @finch_panic_index(ptr @.str.6535, i64 383, i64 %t69, i64 %t71) + br i1 %t72, label %range9591, label %inrange9592 +range9591: + call void @finch_panic_index(ptr @.str.6537, i64 383, i64 %t69, i64 %t71) unreachable -inrange9582: +inrange9592: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t69 %t75 = load { ptr, i64, i64 }, ptr %t74 store { ptr, i64, i64 } %t75, ptr %a76 - store { ptr, i64, i64 } { ptr @.str.6536, i64 1, i64 0 }, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.6538, i64 1, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 - br label %logic.rend9583 -logic.rend9583: - br label %logic.end9580 -logic.end9580: - %t80 = phi i1 [ false, %logic.from9578 ], [ %t79, %logic.rend9583 ] - br i1 %t80, label %while.body9570, label %while.end9571 -while.body9570: + br label %logic.rend9593 +logic.rend9593: + br label %logic.end9590 +logic.end9590: + %t80 = phi i1 [ false, %logic.from9588 ], [ %t79, %logic.rend9593 ] + br i1 %t80, label %while.body9580, label %while.end9581 +while.body9580: %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t82 = load i64, ptr %t81 %t83 = icmp uge i64 0, %t82 - br i1 %t83, label %range9584, label %inrange9585 -range9584: - call void @finch_panic_index(ptr @.str.6537, i64 384, i64 0, i64 %t82) + br i1 %t83, label %range9594, label %inrange9595 +range9594: + call void @finch_panic_index(ptr @.str.6539, i64 384, i64 0, i64 %t82) unreachable -inrange9585: +inrange9595: %t84 = load ptr, ptr %a14 %t85 = getelementptr inbounds { ptr, i64, i64 }, ptr %t84, i64 0 %t86 = load { ptr, i64, i64 }, ptr %t85 @@ -99571,11 +99616,11 @@ inrange9585: %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t89 = load i64, ptr %t88 %t90 = icmp eq i64 %t89, 0 - br i1 %t90, label %panic9586, label %ok9587 -panic9586: - call void @finch_panic(ptr @.str.6538, i64 385, ptr @.str.6539) + br i1 %t90, label %panic9596, label %ok9597 +panic9596: + call void @finch_panic(ptr @.str.6540, i64 385, ptr @.str.6541) unreachable -ok9587: +ok9597: %t91 = sub i64 %t89, 1 %t92 = load ptr, ptr %a14 %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t91 @@ -99583,71 +99628,71 @@ ok9587: store i64 %t91, ptr %t88 store { ptr, i64, i64 } %t94, ptr %a95 call void @finch_str_drop(ptr %a95) - br label %while.cond9569 -while.end9571: + br label %while.cond9579 +while.end9581: store i1 false, ptr %a96 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t98 = load i64, ptr %t97 %t99 = icmp eq i64 %t98, 2 - br label %logic.from9588 -logic.from9588: - br i1 %t99, label %logic.rhs9589, label %logic.end9590 -logic.rhs9589: + br label %logic.from9598 +logic.from9598: + br i1 %t99, label %logic.rhs9599, label %logic.end9600 +logic.rhs9599: %t100 = load { ptr, i64, i64 }, ptr %a14 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 0, %t101 - br i1 %t102, label %range9591, label %inrange9592 -range9591: - call void @finch_panic_index(ptr @.str.6540, i64 388, i64 0, i64 %t101) + br i1 %t102, label %range9601, label %inrange9602 +range9601: + call void @finch_panic_index(ptr @.str.6542, i64 388, i64 0, i64 %t101) unreachable -inrange9592: +inrange9602: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 0 %t105 = load { ptr, i64, i64 }, ptr %t104 store { ptr, i64, i64 } %t105, ptr %a106 - store { ptr, i64, i64 } { ptr @.str.6541, i64 1, i64 0 }, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.6543, i64 1, i64 0 }, ptr %a107 %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) %t109 = icmp ne i32 %t108, 0 - br label %logic.rend9593 -logic.rend9593: - br label %logic.end9590 -logic.end9590: - %t110 = phi i1 [ false, %logic.from9588 ], [ %t109, %logic.rend9593 ] - br i1 %t110, label %then9594, label %endif9596 -then9594: + br label %logic.rend9603 +logic.rend9603: + br label %logic.end9600 +logic.end9600: + %t110 = phi i1 [ false, %logic.from9598 ], [ %t109, %logic.rend9603 ] + br i1 %t110, label %then9604, label %endif9606 +then9604: store i1 true, ptr %a96 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t112 = load i64, ptr %t111 %t113 = icmp uge i64 0, %t112 - br i1 %t113, label %range9597, label %inrange9598 -range9597: - call void @finch_panic_index(ptr @.str.6542, i64 390, i64 0, i64 %t112) + br i1 %t113, label %range9607, label %inrange9608 +range9607: + call void @finch_panic_index(ptr @.str.6544, i64 390, i64 0, i64 %t112) unreachable -inrange9598: +inrange9608: %t114 = load ptr, ptr %a14 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 0 %t116 = load { ptr, i64, i64 }, ptr %t115 call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) - br label %endif9596 -endif9596: + br label %endif9606 +endif9606: %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t119 = load i64, ptr %t118 %t120 = icmp ne i64 %t119, 1 - br i1 %t120, label %then9599, label %endif9601 -then9599: + br i1 %t120, label %then9609, label %endif9611 +then9609: call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number zeroinitializer -endif9601: +endif9611: %t121 = load { ptr, i64, i64 }, ptr %a14 %t122 = extractvalue { ptr, i64, i64 } %t121, 1 %t123 = icmp uge i64 0, %t122 - br i1 %t123, label %range9602, label %inrange9603 -range9602: - call void @finch_panic_index(ptr @.str.6543, i64 395, i64 0, i64 %t122) + br i1 %t123, label %range9612, label %inrange9613 +range9612: + call void @finch_panic_index(ptr @.str.6545, i64 395, i64 0, i64 %t122) unreachable -inrange9603: +inrange9613: %t124 = extractvalue { ptr, i64, i64 } %t121, 0 %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 0 %t126 = load { ptr, i64, i64 }, ptr %t125 @@ -99658,154 +99703,154 @@ inrange9603: %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a130, i32 0, i32 1 %t132 = load i64, ptr %t131 %t133 = icmp eq i64 %t132, 0 - br label %logic.from9604 -logic.from9604: - br i1 %t133, label %logic.end9606, label %logic.rhs9605 -logic.rhs9605: + br label %logic.from9614 +logic.from9614: + br i1 %t133, label %logic.end9616, label %logic.rhs9615 +logic.rhs9615: %t134 = load { ptr, i64, i64 }, ptr %a130 %t135 = extractvalue { ptr, i64, i64 } %t134, 1 %t136 = icmp uge i64 0, %t135 - br i1 %t136, label %range9607, label %inrange9608 -range9607: - call void @finch_panic_index(ptr @.str.6544, i64 396, i64 0, i64 %t135) + br i1 %t136, label %range9617, label %inrange9618 +range9617: + call void @finch_panic_index(ptr @.str.6546, i64 396, i64 0, i64 %t135) unreachable -inrange9608: +inrange9618: %t137 = extractvalue { ptr, i64, i64 } %t134, 0 %t138 = getelementptr inbounds i8, ptr %t137, i64 0 %t139 = load i8, ptr %t138 %t140 = icmp uge i8 %t139, 48 - br label %logic.from9609 -logic.from9609: - br i1 %t140, label %logic.rhs9610, label %logic.end9611 -logic.rhs9610: + br label %logic.from9619 +logic.from9619: + br i1 %t140, label %logic.rhs9620, label %logic.end9621 +logic.rhs9620: %t141 = load { ptr, i64, i64 }, ptr %a130 %t142 = extractvalue { ptr, i64, i64 } %t141, 1 %t143 = icmp uge i64 0, %t142 - br i1 %t143, label %range9612, label %inrange9613 -range9612: - call void @finch_panic_index(ptr @.str.6545, i64 396, i64 0, i64 %t142) + br i1 %t143, label %range9622, label %inrange9623 +range9622: + call void @finch_panic_index(ptr @.str.6547, i64 396, i64 0, i64 %t142) unreachable -inrange9613: +inrange9623: %t144 = extractvalue { ptr, i64, i64 } %t141, 0 %t145 = getelementptr inbounds i8, ptr %t144, i64 0 %t146 = load i8, ptr %t145 %t147 = icmp ule i8 %t146, 57 - br label %logic.rend9614 -logic.rend9614: - br label %logic.end9611 -logic.end9611: - %t148 = phi i1 [ false, %logic.from9609 ], [ %t147, %logic.rend9614 ] - br label %logic.from9615 -logic.from9615: - br i1 %t148, label %logic.end9617, label %logic.rhs9616 -logic.rhs9616: + br label %logic.rend9624 +logic.rend9624: + br label %logic.end9621 +logic.end9621: + %t148 = phi i1 [ false, %logic.from9619 ], [ %t147, %logic.rend9624 ] + br label %logic.from9625 +logic.from9625: + br i1 %t148, label %logic.end9627, label %logic.rhs9626 +logic.rhs9626: %t149 = load { ptr, i64, i64 }, ptr %a130 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 0, %t150 - br i1 %t151, label %range9618, label %inrange9619 -range9618: - call void @finch_panic_index(ptr @.str.6546, i64 396, i64 0, i64 %t150) + br i1 %t151, label %range9628, label %inrange9629 +range9628: + call void @finch_panic_index(ptr @.str.6548, i64 396, i64 0, i64 %t150) unreachable -inrange9619: +inrange9629: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds i8, ptr %t152, i64 0 %t154 = load i8, ptr %t153 %t155 = icmp eq i8 %t154, 46 - br label %logic.rend9620 -logic.rend9620: - br label %logic.end9617 -logic.end9617: - %t156 = phi i1 [ true, %logic.from9615 ], [ %t155, %logic.rend9620 ] + br label %logic.rend9630 +logic.rend9630: + br label %logic.end9627 +logic.end9627: + %t156 = phi i1 [ true, %logic.from9625 ], [ %t155, %logic.rend9630 ] %t157 = xor i1 %t156, true - br label %logic.rend9621 -logic.rend9621: - br label %logic.end9606 -logic.end9606: - %t158 = phi i1 [ true, %logic.from9604 ], [ %t157, %logic.rend9621 ] - br i1 %t158, label %then9622, label %endif9624 -then9622: + br label %logic.rend9631 +logic.rend9631: + br label %logic.end9616 +logic.end9616: + %t158 = phi i1 [ true, %logic.from9614 ], [ %t157, %logic.rend9631 ] + br i1 %t158, label %then9632, label %endif9634 +then9632: call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number zeroinitializer -endif9624: +endif9634: %t159 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t159, ptr %a160 - store { ptr, i64, i64 } { ptr @.str.6548, i64 1, i64 0 }, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6550, i64 1, i64 0 }, ptr %a162 %t163 = call i64 @finch_str_find(ptr %a160, ptr %a162) %t164 = icmp sge i64 %t163, 0 - br label %logic.from9625 -logic.from9625: - br i1 %t164, label %logic.end9627, label %logic.rhs9626 -logic.rhs9626: + br label %logic.from9635 +logic.from9635: + br i1 %t164, label %logic.end9637, label %logic.rhs9636 +logic.rhs9636: %t165 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t165, ptr %a166 - store { ptr, i64, i64 } { ptr @.str.6550, i64 1, i64 0 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.6552, i64 1, i64 0 }, ptr %a168 %t169 = call i64 @finch_str_find(ptr %a166, ptr %a168) %t170 = icmp sge i64 %t169, 0 - br label %logic.rend9628 -logic.rend9628: - br label %logic.end9627 -logic.end9627: - %t171 = phi i1 [ true, %logic.from9625 ], [ %t170, %logic.rend9628 ] - br label %logic.from9629 -logic.from9629: - br i1 %t171, label %logic.end9631, label %logic.rhs9630 -logic.rhs9630: + br label %logic.rend9638 +logic.rend9638: + br label %logic.end9637 +logic.end9637: + %t171 = phi i1 [ true, %logic.from9635 ], [ %t170, %logic.rend9638 ] + br label %logic.from9639 +logic.from9639: + br i1 %t171, label %logic.end9641, label %logic.rhs9640 +logic.rhs9640: %t172 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t172, ptr %a173 - store { ptr, i64, i64 } { ptr @.str.6552, i64 1, i64 0 }, ptr %a175 + store { ptr, i64, i64 } { ptr @.str.6554, i64 1, i64 0 }, ptr %a175 %t176 = call i64 @finch_str_find(ptr %a173, ptr %a175) %t177 = icmp sge i64 %t176, 0 - br label %logic.rend9632 -logic.rend9632: - br label %logic.end9631 -logic.end9631: - %t178 = phi i1 [ true, %logic.from9629 ], [ %t177, %logic.rend9632 ] - br label %logic.from9633 -logic.from9633: - br i1 %t178, label %logic.rhs9634, label %logic.end9635 -logic.rhs9634: + br label %logic.rend9642 +logic.rend9642: + br label %logic.end9641 +logic.end9641: + %t178 = phi i1 [ true, %logic.from9639 ], [ %t177, %logic.rend9642 ] + br label %logic.from9643 +logic.from9643: + br i1 %t178, label %logic.rhs9644, label %logic.end9645 +logic.rhs9644: %t179 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t179, ptr %a180 - store { ptr, i64, i64 } { ptr @.str.6554, i64 2, i64 0 }, ptr %a182 + store { ptr, i64, i64 } { ptr @.str.6556, i64 2, i64 0 }, ptr %a182 %t183 = call i32 @finch_str_starts(ptr %a180, ptr %a182) %t184 = icmp ne i32 %t183, 0 %t185 = xor i1 %t184, true - br label %logic.rend9636 -logic.rend9636: - br label %logic.end9635 -logic.end9635: - %t186 = phi i1 [ false, %logic.from9633 ], [ %t185, %logic.rend9636 ] + br label %logic.rend9646 +logic.rend9646: + br label %logic.end9645 +logic.end9645: + %t186 = phi i1 [ false, %logic.from9643 ], [ %t185, %logic.rend9646 ] store i1 %t186, ptr %a187 %t188 = load i1, ptr %a187 - br i1 %t188, label %then9637, label %endif9639 -then9637: + br i1 %t188, label %then9647, label %endif9649 +then9647: %t189 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t189, ptr %a190 call void @finch_str_copy(ptr %a191, ptr %a190) %t192 = load { ptr, i64, i64 }, ptr %a191 store { ptr, i64, i64 } %t192, ptr %a193 - br label %while.cond9640 -while.cond9640: + br label %while.cond9650 +while.cond9650: %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 %t195 = load i64, ptr %t194 %t196 = icmp sgt i64 %t195, 0 - br label %logic.from9643 -logic.from9643: - br i1 %t196, label %logic.rhs9644, label %logic.end9645 -logic.rhs9644: - store { ptr, i64, i64 } { ptr @.str.6555, i64 4, i64 0 }, ptr %a197 + br label %logic.from9653 +logic.from9653: + br i1 %t196, label %logic.rhs9654, label %logic.end9655 +logic.rhs9654: + store { ptr, i64, i64 } { ptr @.str.6557, i64 4, i64 0 }, ptr %a197 %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 %t200 = load i64, ptr %t199 %t201 = sub i64 %t200, 1 %t202 = load { ptr, i64, i64 }, ptr %a193 %t203 = extractvalue { ptr, i64, i64 } %t202, 1 %t204 = icmp uge i64 %t201, %t203 - br i1 %t204, label %range9646, label %inrange9647 -range9646: - call void @finch_panic_index(ptr @.str.6557, i64 402, i64 %t201, i64 %t203) + br i1 %t204, label %range9656, label %inrange9657 +range9656: + call void @finch_panic_index(ptr @.str.6559, i64 402, i64 %t201, i64 %t203) unreachable -inrange9647: +inrange9657: %t205 = extractvalue { ptr, i64, i64 } %t202, 0 %t206 = getelementptr inbounds i8, ptr %t205, i64 %t201 %t207 = load i8, ptr %t206 @@ -99816,26 +99861,26 @@ inrange9647: %t212 = icmp sge i64 %t211, 0 store { ptr, i64, i64 } %t209, ptr %a213 call void @finch_str_drop(ptr %a213) - br label %logic.rend9648 -logic.rend9648: - br label %logic.end9645 -logic.end9645: - %t214 = phi i1 [ false, %logic.from9643 ], [ %t212, %logic.rend9648 ] - br i1 %t214, label %while.body9641, label %while.end9642 -while.body9641: + br label %logic.rend9658 +logic.rend9658: + br label %logic.end9655 +logic.end9655: + %t214 = phi i1 [ false, %logic.from9653 ], [ %t212, %logic.rend9658 ] + br i1 %t214, label %while.body9651, label %while.end9652 +while.body9651: %t215 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t215, ptr %a216 %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 %t219 = load i64, ptr %t218 %t220 = sub i64 %t219, 1 - call void @finch_str_sub(ptr %a217, ptr %a216, i64 0, i64 %t220, ptr @.str.6558, i64 403) + call void @finch_str_sub(ptr %a217, ptr %a216, i64 0, i64 %t220, ptr @.str.6560, i64 403) %t221 = load { ptr, i64, i64 }, ptr %a217 %t222 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t221, ptr %a193 store { ptr, i64, i64 } %t222, ptr %a223 call void @finch_str_drop(ptr %a223) - br label %while.cond9640 -while.end9642: + br label %while.cond9650 +while.end9652: %t224 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } zeroinitializer, ptr %a225 store double 0.0, ptr %a226 @@ -99844,24 +99889,24 @@ while.end9642: %t229 = icmp eq i32 %t228, 0 %t230 = load { ptr, i64, i64 }, ptr %a225 %t231 = load double, ptr %a226 - br i1 %t229, label %or.failed9649, label %or.ok9650 -or.failed9649: + br i1 %t229, label %or.failed9659, label %or.ok9660 +or.failed9659: store { ptr, i64, i64 } %t230, ptr %a232 call void @finch_str_drop(ptr %a232) call void @finch_str_drop(ptr %a193) call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number zeroinitializer -or.ok9650: +or.ok9660: store double %t231, ptr %a233 %t234 = load i1, ptr %a96 - br i1 %t234, label %then9651, label %endif9653 -then9651: + br i1 %t234, label %then9661, label %endif9663 +then9661: %t235 = load double, ptr %a233 %t236 = fsub double 0.0, %t235 store double %t236, ptr %a233 - br label %endif9653 -endif9653: + br label %endif9663 +endif9663: %t237 = insertvalue %S.cimport.CConst zeroinitializer, i1 true, 0 %t238 = load double, ptr %a233 %t239 = insertvalue %S.cimport.CConst %t237, double %t238, 2 @@ -99876,24 +99921,24 @@ endif9653: call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number %t246 -endif9639: +endif9649: %t247 = load { ptr, i64, i64 }, ptr %a130 %t248 = call %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %t247) store %S.cimport.Number %t248, ptr %a249 %t250 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 1 %t251 = load i1, ptr %t250 - br label %logic.from9654 -logic.from9654: - br i1 %t251, label %logic.rhs9655, label %logic.end9656 -logic.rhs9655: + br label %logic.from9664 +logic.from9664: + br i1 %t251, label %logic.rhs9665, label %logic.end9666 +logic.rhs9665: %t252 = load i1, ptr %a96 - br label %logic.rend9657 -logic.rend9657: - br label %logic.end9656 -logic.end9656: - %t253 = phi i1 [ false, %logic.from9654 ], [ %t252, %logic.rend9657 ] - br i1 %t253, label %then9658, label %endif9660 -then9658: + br label %logic.rend9667 +logic.rend9667: + br label %logic.end9666 +logic.end9666: + %t253 = phi i1 [ false, %logic.from9664 ], [ %t252, %logic.rend9667 ] + br i1 %t253, label %then9668, label %endif9670 +then9668: %t254 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 %t255 = getelementptr inbounds %S.cimport.CConst, ptr %t254, i32 0, i32 1 %t256 = load i64, ptr %t255 @@ -99901,8 +99946,8 @@ then9658: %t258 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 %t259 = getelementptr inbounds %S.cimport.CConst, ptr %t258, i32 0, i32 1 store i64 %t257, ptr %t259 - br label %endif9660 -endif9660: + br label %endif9670 +endif9670: %t260 = load %S.cimport.Number, ptr %a249 call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) @@ -100077,8 +100122,8 @@ entry: store i32 %t12, ptr %a13 %t14 = load i32, ptr %a13 %t15 = icmp eq i32 %t14, 20 - br i1 %t15, label %then9661, label %else9662 -then9661: + br i1 %t15, label %then9671, label %else9672 +then9671: %t18 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t18, ptr %a19 call void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16 %a17, ptr %a19) @@ -100090,8 +100135,8 @@ then9661: %t24 = getelementptr inbounds %S.C.CXType, ptr %a23, i32 0, i32 0 %t25 = load i32, ptr %t24 %t26 = icmp eq i32 %t25, 105 - br i1 %t26, label %then9664, label %endif9666 -then9664: + br i1 %t26, label %then9674, label %endif9676 +then9674: %t28 = load %S.C.CXType, ptr %a23 store %S.C.CXType %t28, ptr %a29 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a27, ptr %a29) @@ -100104,49 +100149,49 @@ then9664: store { ptr, i64, i64 } %t35, ptr %a36 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null - br i1 %t38, label %panic9667, label %ok9668 -panic9667: - call void @finch_panic(ptr @.str.6559, i64 437, ptr @.str.6560) + br i1 %t38, label %panic9677, label %ok9678 +panic9677: + call void @finch_panic(ptr @.str.6561, i64 437, ptr @.str.6562) unreachable -ok9668: +ok9678: %t39 = getelementptr inbounds %S.cimport.Importer, ptr %t37, i32 0, i32 3 %t40 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t40, ptr %a41 %t42 = call i64 @finch_map_find(ptr %t39, ptr %a41, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t43 = icmp sge i64 %t42, 0 - br label %logic.from9669 -logic.from9669: - br i1 %t43, label %logic.rhs9670, label %logic.end9671 -logic.rhs9670: + br label %logic.from9679 +logic.from9679: + br i1 %t43, label %logic.rhs9680, label %logic.end9681 +logic.rhs9680: %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic9672, label %ok9673 -panic9672: - call void @finch_panic(ptr @.str.6561, i64 437, ptr @.str.6562) + br i1 %t45, label %panic9682, label %ok9683 +panic9682: + call void @finch_panic(ptr @.str.6563, i64 437, ptr @.str.6564) unreachable -ok9673: +ok9683: %t46 = getelementptr inbounds %S.cimport.Importer, ptr %t44, i32 0, i32 0 %t47 = getelementptr inbounds %S.cimport.CImports, ptr %t46, i32 0, i32 3 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null - br i1 %t49, label %panic9674, label %ok9675 -panic9674: - call void @finch_panic(ptr @.str.6563, i64 437, ptr @.str.6564) + br i1 %t49, label %panic9684, label %ok9685 +panic9684: + call void @finch_panic(ptr @.str.6565, i64 437, ptr @.str.6566) unreachable -ok9675: +ok9685: %t50 = getelementptr inbounds %S.cimport.Importer, ptr %t48, i32 0, i32 3 %t51 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t51, ptr %a52 %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t54 = icmp slt i64 %t53, 0 - br i1 %t54, label %map.missing9676, label %map.found9677 -map.missing9676: + br i1 %t54, label %map.missing9686, label %map.found9687 +map.missing9686: store { ptr, i64, i64 } zeroinitializer, ptr %a55 store { ptr, i64, i64 } %t51, ptr %a56 call void @finch_buf_str(ptr %a55, ptr %a56, i32 1) - call void @finch_map_missing(ptr @.str.6565, i64 437, ptr %a55) + call void @finch_map_missing(ptr @.str.6567, i64 437, ptr %a55) unreachable -map.found9677: +map.found9687: %t57 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t50, i32 0, i32 0 %t58 = load ptr, ptr %t57 %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t58, i64 %t53 @@ -100155,25 +100200,25 @@ map.found9677: store { ptr, i64, i64 } %t61, ptr %a62 %t63 = call i64 @finch_map_find(ptr %t47, ptr %a62, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t64 = icmp sge i64 %t63, 0 - br label %logic.rend9678 -logic.rend9678: - br label %logic.end9671 -logic.end9671: - %t65 = phi i1 [ false, %logic.from9669 ], [ %t64, %logic.rend9678 ] + br label %logic.rend9688 +logic.rend9688: + br label %logic.end9681 +logic.end9681: + %t65 = phi i1 [ false, %logic.from9679 ], [ %t64, %logic.rend9688 ] store i1 %t65, ptr %a66 %t67 = load i1, ptr %a66 %t68 = xor i1 %t67, true - br label %logic.from9679 -logic.from9679: - br i1 %t68, label %logic.rhs9680, label %logic.end9681 -logic.rhs9680: + br label %logic.from9689 +logic.from9689: + br i1 %t68, label %logic.rhs9690, label %logic.end9691 +logic.rhs9690: %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null - br i1 %t70, label %panic9682, label %ok9683 -panic9682: - call void @finch_panic(ptr @.str.6566, i64 438, ptr @.str.6567) + br i1 %t70, label %panic9692, label %ok9693 +panic9692: + call void @finch_panic(ptr @.str.6568, i64 438, ptr @.str.6569) unreachable -ok9683: +ok9693: %t71 = getelementptr inbounds %S.cimport.Importer, ptr %t69, i32 0, i32 0 %t72 = getelementptr inbounds %S.cimport.CImports, ptr %t71, i32 0, i32 3 %t73 = load { ptr, i64, i64 }, ptr %a9 @@ -100181,21 +100226,21 @@ ok9683: %t75 = call i64 @finch_map_find(ptr %t72, ptr %a74, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t76 = icmp sge i64 %t75, 0 %t77 = xor i1 %t76, true - br label %logic.rend9684 -logic.rend9684: - br label %logic.end9681 -logic.end9681: - %t78 = phi i1 [ false, %logic.from9679 ], [ %t77, %logic.rend9684 ] - br i1 %t78, label %then9685, label %endif9687 -then9685: + br label %logic.rend9694 +logic.rend9694: + br label %logic.end9691 +logic.end9691: + %t78 = phi i1 [ false, %logic.from9689 ], [ %t77, %logic.rend9694 ] + br i1 %t78, label %then9695, label %endif9697 +then9695: %t79 = load { ptr, i64, i64 }, ptr %a9 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null - br i1 %t81, label %panic9688, label %ok9689 -panic9688: - call void @finch_panic(ptr @.str.6568, i64 439, ptr @.str.6569) + br i1 %t81, label %panic9698, label %ok9699 +panic9698: + call void @finch_panic(ptr @.str.6570, i64 439, ptr @.str.6571) unreachable -ok9689: +ok9699: %t82 = getelementptr inbounds %S.cimport.Importer, ptr %t80, i32 0, i32 3 %t83 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t83, ptr %a84 @@ -100206,14 +100251,14 @@ ok9689: %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t88, i64 %t86 %t90 = load i32, ptr %a85 %t91 = icmp ne i32 %t90, 0 - br i1 %t91, label %map.new9690, label %map.have9691 -map.new9690: + br i1 %t91, label %map.new9700, label %map.have9701 +map.new9700: %t92 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 1 call void @finch_str_copy(ptr %t92, ptr %a84) %t93 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t93 - br label %map.have9691 -map.have9691: + br label %map.have9701 +map.have9701: %t94 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 store { ptr, i64, i64 } %t79, ptr %a95 call void @finch_str_copy(ptr %a96, ptr %a95) @@ -100222,35 +100267,35 @@ map.have9691: store { ptr, i64, i64 } %t97, ptr %t94 store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_drop(ptr %a99) - br label %endif9687 -endif9687: + br label %endif9697 +endif9697: call void @finch_str_drop(ptr %a36) - br label %endif9666 -endif9666: - br label %endif9663 -else9662: + br label %endif9676 +endif9676: + br label %endif9673 +else9672: %t100 = load i32, ptr %a13 %t101 = icmp eq i32 %t100, 8 - br i1 %t101, label %then9692, label %else9693 -then9692: + br i1 %t101, label %then9702, label %else9703 +then9702: %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null - br i1 %t103, label %panic9695, label %ok9696 -panic9695: - call void @finch_panic(ptr @.str.6570, i64 443, ptr @.str.6571) + br i1 %t103, label %panic9705, label %ok9706 +panic9705: + call void @finch_panic(ptr @.str.6572, i64 443, ptr @.str.6573) unreachable -ok9696: +ok9706: %t104 = getelementptr inbounds %S.cimport.Importer, ptr %t102, i32 0, i32 0 %t105 = getelementptr inbounds %S.cimport.CImports, ptr %t104, i32 0, i32 0 %t106 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t106, ptr %a107 %t108 = call i64 @finch_map_find(ptr %t105, ptr %a107, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t109 = icmp sge i64 %t108, 0 - br i1 %t109, label %then9697, label %endif9699 -then9697: + br i1 %t109, label %then9707, label %endif9709 +then9707: call void @finch_str_drop(ptr %a9) ret void -endif9699: +endif9709: %t110 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t110, ptr %a111 call void @finch_str_copy(ptr %a112, ptr %a111) @@ -100258,11 +100303,11 @@ endif9699: %t114 = insertvalue %S.cimport.CFunc zeroinitializer, { ptr, i64, i64 } %t113, 0 %t115 = load ptr, ptr %a1 %t116 = icmp eq ptr %t115, null - br i1 %t116, label %panic9700, label %ok9701 -panic9700: - call void @finch_panic(ptr @.str.6572, i64 446, ptr @.str.6573) + br i1 %t116, label %panic9710, label %ok9711 +panic9710: + call void @finch_panic(ptr @.str.6574, i64 446, ptr @.str.6575) unreachable -ok9701: +ok9711: %t117 = getelementptr inbounds %S.cimport.Importer, ptr %t115, i32 0, i32 2 %t118 = load { ptr, i64, i64 }, ptr %t117 store { ptr, i64, i64 } %t118, ptr %a119 @@ -100274,21 +100319,21 @@ ok9701: store %S.C.CXCursor %t124, ptr %a125 %t126 = call i32 @clang_Cursor_getStorageClass(ptr %a125) %t127 = icmp eq i32 %t126, 3 - br i1 %t127, label %then9702, label %endif9704 -then9702: + br i1 %t127, label %then9712, label %endif9714 +then9712: %t128 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 %t129 = load { ptr, i64, i64 }, ptr %t128 - store { ptr, i64, i64 } { ptr @.str.6574, i64 62, i64 0 }, ptr %t128 + store { ptr, i64, i64 } { ptr @.str.6576, i64 62, i64 0 }, ptr %t128 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_drop(ptr %a130) %t131 = load %S.cimport.CFunc, ptr %a123 %t132 = load ptr, ptr %a1 %t133 = icmp eq ptr %t132, null - br i1 %t133, label %panic9705, label %ok9706 -panic9705: - call void @finch_panic(ptr @.str.6575, i64 449, ptr @.str.6576) + br i1 %t133, label %panic9715, label %ok9716 +panic9715: + call void @finch_panic(ptr @.str.6577, i64 449, ptr @.str.6578) unreachable -ok9706: +ok9716: %t134 = getelementptr inbounds %S.cimport.Importer, ptr %t132, i32 0, i32 0 %t135 = getelementptr inbounds %S.cimport.CImports, ptr %t134, i32 0, i32 0 %t136 = load { ptr, i64, i64 }, ptr %a9 @@ -100300,14 +100345,14 @@ ok9706: %t142 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t141, i64 %t139 %t143 = load i32, ptr %a138 %t144 = icmp ne i32 %t143, 0 - br i1 %t144, label %map.new9707, label %map.have9708 -map.new9707: + br i1 %t144, label %map.new9717, label %map.have9718 +map.new9717: %t145 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 1 call void @finch_str_copy(ptr %t145, ptr %a137) %t146 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t146 - br label %map.have9708 -map.have9708: + br label %map.have9718 +map.have9718: %t147 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 store %S.cimport.CFunc %t131, ptr %a148 call void @finch.copy.S_cimport_CFunc(ptr %a149, ptr %a148) @@ -100319,7 +100364,7 @@ map.have9708: call void @finch.drop.S_cimport_CFunc(ptr %a123) call void @finch_str_drop(ptr %a9) ret void -endif9704: +endif9714: %t155 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t155, ptr %a156 call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a154, ptr %a156) @@ -100331,21 +100376,21 @@ endif9704: %t161 = getelementptr inbounds %S.C.CXType, ptr %a160, i32 0, i32 0 %t162 = load i32, ptr %t161 %t163 = icmp eq i32 %t162, 110 - br i1 %t163, label %then9709, label %endif9711 -then9709: + br i1 %t163, label %then9719, label %endif9721 +then9719: %t164 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 %t165 = load { ptr, i64, i64 }, ptr %t164 - store { ptr, i64, i64 } { ptr @.str.6577, i64 42, i64 0 }, ptr %t164 + store { ptr, i64, i64 } { ptr @.str.6579, i64 42, i64 0 }, ptr %t164 store { ptr, i64, i64 } %t165, ptr %a166 call void @finch_str_drop(ptr %a166) %t167 = load %S.cimport.CFunc, ptr %a123 %t168 = load ptr, ptr %a1 %t169 = icmp eq ptr %t168, null - br i1 %t169, label %panic9712, label %ok9713 -panic9712: - call void @finch_panic(ptr @.str.6578, i64 455, ptr @.str.6579) + br i1 %t169, label %panic9722, label %ok9723 +panic9722: + call void @finch_panic(ptr @.str.6580, i64 455, ptr @.str.6581) unreachable -ok9713: +ok9723: %t170 = getelementptr inbounds %S.cimport.Importer, ptr %t168, i32 0, i32 0 %t171 = getelementptr inbounds %S.cimport.CImports, ptr %t170, i32 0, i32 0 %t172 = load { ptr, i64, i64 }, ptr %a9 @@ -100357,14 +100402,14 @@ ok9713: %t178 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t177, i64 %t175 %t179 = load i32, ptr %a174 %t180 = icmp ne i32 %t179, 0 - br i1 %t180, label %map.new9714, label %map.have9715 -map.new9714: + br i1 %t180, label %map.new9724, label %map.have9725 +map.new9724: %t181 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 1 call void @finch_str_copy(ptr %t181, ptr %a173) %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t182 - br label %map.have9715 -map.have9715: + br label %map.have9725 +map.have9725: %t183 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 store %S.cimport.CFunc %t167, ptr %a184 call void @finch.copy.S_cimport_CFunc(ptr %a185, ptr %a184) @@ -100376,7 +100421,7 @@ map.have9715: call void @finch.drop.S_cimport_CFunc(ptr %a123) call void @finch_str_drop(ptr %a9) ret void -endif9711: +endif9721: %t189 = load ptr, ptr %a1 %t191 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t191, ptr %a192 @@ -100386,8 +100431,8 @@ endif9711: store %S.cimport.Mapped %t194, ptr %a195 %t196 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 2 %t197 = load i1, ptr %t196 - br i1 %t197, label %then9716, label %else9717 -then9716: + br i1 %t197, label %then9726, label %else9727 +then9726: %t198 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 0 %t199 = load %S.ast.Type, ptr %t198 %t200 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 2 @@ -100398,8 +100443,8 @@ then9716: store %S.ast.Type %t203, ptr %t200 store %S.ast.Type %t204, ptr %a205 call void @finch.drop.S_ast_Type(ptr %a205) - br label %endif9718 -else9717: + br label %endif9728 +else9727: %t206 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 1 %t207 = load { ptr, i64, i64 }, ptr %t206 %t208 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 @@ -100410,8 +100455,8 @@ else9717: store { ptr, i64, i64 } %t211, ptr %t208 store { ptr, i64, i64 } %t212, ptr %a213 call void @finch_str_drop(ptr %a213) - br label %endif9718 -endif9718: + br label %endif9728 +endif9728: %t214 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t214, ptr %a215 %t216 = call i32 @clang_getNumArgTypes(ptr %a215) @@ -100419,20 +100464,20 @@ endif9718: store i64 %t217, ptr %a218 %t219 = load i64, ptr %a218 store i64 0, ptr %a220 - br label %for.cond9719 -for.cond9719: + br label %for.cond9729 +for.cond9729: %t221 = load i64, ptr %a220 %t222 = icmp slt i64 %t221, %t219 - br i1 %t222, label %for.body9720, label %for.end9722 -for.body9720: + br i1 %t222, label %for.body9730, label %for.end9732 +for.body9730: %t223 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 %t225 = load i64, ptr %t224 %t226 = icmp sgt i64 %t225, 0 - br i1 %t226, label %then9723, label %endif9725 -then9723: - br label %for.end9722 -endif9725: + br i1 %t226, label %then9733, label %endif9735 +then9733: + br label %for.end9732 +endif9735: %t227 = load ptr, ptr %a1 %t229 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t229, ptr %a230 @@ -100444,8 +100489,8 @@ endif9725: store %S.cimport.Mapped %t234, ptr %a235 %t236 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 2 %t237 = load i1, ptr %t236 - br i1 %t237, label %then9726, label %else9727 -then9726: + br i1 %t237, label %then9736, label %else9737 +then9736: %t238 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 3 %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i32 0, i32 1 %t240 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 0 @@ -100460,8 +100505,8 @@ then9726: %t248 = getelementptr inbounds %S.ast.Type, ptr %t247, i64 %t245 store %S.ast.Type %t244, ptr %t248 store i64 %t246, ptr %t239 - br label %endif9728 -else9727: + br label %endif9738 +else9737: %t249 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 1 %t250 = load { ptr, i64, i64 }, ptr %t249 %t251 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 @@ -100472,16 +100517,16 @@ else9727: store { ptr, i64, i64 } %t254, ptr %t251 store { ptr, i64, i64 } %t255, ptr %a256 call void @finch_str_drop(ptr %a256) - br label %endif9728 -endif9728: + br label %endif9738 +endif9738: call void @finch.drop.S_cimport_Mapped(ptr %a235) - br label %for.step9721 -for.step9721: + br label %for.step9731 +for.step9731: %t257 = load i64, ptr %a220 %t258 = add i64 %t257, 1 store i64 %t258, ptr %a220 - br label %for.cond9719 -for.end9722: + br label %for.cond9729 +for.end9732: %t259 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t259, ptr %a260 %t261 = call i32 @clang_isFunctionTypeVariadic(ptr %a260) @@ -100491,11 +100536,11 @@ for.end9722: %t264 = load %S.cimport.CFunc, ptr %a123 %t265 = load ptr, ptr %a1 %t266 = icmp eq ptr %t265, null - br i1 %t266, label %panic9729, label %ok9730 -panic9729: - call void @finch_panic(ptr @.str.6580, i64 477, ptr @.str.6581) + br i1 %t266, label %panic9739, label %ok9740 +panic9739: + call void @finch_panic(ptr @.str.6582, i64 477, ptr @.str.6583) unreachable -ok9730: +ok9740: %t267 = getelementptr inbounds %S.cimport.Importer, ptr %t265, i32 0, i32 0 %t268 = getelementptr inbounds %S.cimport.CImports, ptr %t267, i32 0, i32 0 %t269 = load { ptr, i64, i64 }, ptr %a9 @@ -100507,14 +100552,14 @@ ok9730: %t275 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t274, i64 %t272 %t276 = load i32, ptr %a271 %t277 = icmp ne i32 %t276, 0 - br i1 %t277, label %map.new9731, label %map.have9732 -map.new9731: + br i1 %t277, label %map.new9741, label %map.have9742 +map.new9741: %t278 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 1 call void @finch_str_copy(ptr %t278, ptr %a270) %t279 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t279 - br label %map.have9732 -map.have9732: + br label %map.have9742 +map.have9742: %t280 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 store %S.cimport.CFunc %t264, ptr %a281 call void @finch.copy.S_cimport_CFunc(ptr %a282, ptr %a281) @@ -100525,43 +100570,43 @@ map.have9732: call void @finch.drop.S_cimport_CFunc(ptr %a285) call void @finch.drop.S_cimport_Mapped(ptr %a195) call void @finch.drop.S_cimport_CFunc(ptr %a123) - br label %endif9694 -else9693: + br label %endif9704 +else9703: %t286 = load i32, ptr %a13 %t287 = icmp eq i32 %t286, 9 - br i1 %t287, label %then9733, label %else9734 -then9733: + br i1 %t287, label %then9743, label %else9744 +then9743: %t288 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t288, ptr %a289 %t290 = call i32 @clang_Cursor_getStorageClass(ptr %a289) %t291 = icmp ne i32 %t290, 2 - br label %logic.from9736 -logic.from9736: - br i1 %t291, label %logic.end9738, label %logic.rhs9737 -logic.rhs9737: + br label %logic.from9746 +logic.from9746: + br i1 %t291, label %logic.end9748, label %logic.rhs9747 +logic.rhs9747: %t292 = load ptr, ptr %a1 %t293 = icmp eq ptr %t292, null - br i1 %t293, label %panic9739, label %ok9740 -panic9739: - call void @finch_panic(ptr @.str.6582, i64 479, ptr @.str.6583) + br i1 %t293, label %panic9749, label %ok9750 +panic9749: + call void @finch_panic(ptr @.str.6584, i64 479, ptr @.str.6585) unreachable -ok9740: +ok9750: %t294 = getelementptr inbounds %S.cimport.Importer, ptr %t292, i32 0, i32 0 %t295 = getelementptr inbounds %S.cimport.CImports, ptr %t294, i32 0, i32 2 %t296 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t296, ptr %a297 %t298 = call i64 @finch_map_find(ptr %t295, ptr %a297, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t299 = icmp sge i64 %t298, 0 - br label %logic.rend9741 -logic.rend9741: - br label %logic.end9738 -logic.end9738: - %t300 = phi i1 [ true, %logic.from9736 ], [ %t299, %logic.rend9741 ] - br i1 %t300, label %then9742, label %endif9744 -then9742: + br label %logic.rend9751 +logic.rend9751: + br label %logic.end9748 +logic.end9748: + %t300 = phi i1 [ true, %logic.from9746 ], [ %t299, %logic.rend9751 ] + br i1 %t300, label %then9752, label %endif9754 +then9752: call void @finch_str_drop(ptr %a9) ret void -endif9744: +endif9754: %t301 = load ptr, ptr %a1 %t303 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t303, ptr %a304 @@ -100571,17 +100616,17 @@ endif9744: store %S.cimport.Mapped %t306, ptr %a307 %t308 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 2 %t309 = load i1, ptr %t308 - br i1 %t309, label %then9745, label %endif9747 -then9745: + br i1 %t309, label %then9755, label %endif9757 +then9755: %t310 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 0 %t311 = load %S.ast.Type, ptr %t310 %t312 = load ptr, ptr %a1 %t313 = icmp eq ptr %t312, null - br i1 %t313, label %panic9748, label %ok9749 -panic9748: - call void @finch_panic(ptr @.str.6584, i64 484, ptr @.str.6585) + br i1 %t313, label %panic9758, label %ok9759 +panic9758: + call void @finch_panic(ptr @.str.6586, i64 484, ptr @.str.6587) unreachable -ok9749: +ok9759: %t314 = getelementptr inbounds %S.cimport.Importer, ptr %t312, i32 0, i32 0 %t315 = getelementptr inbounds %S.cimport.CImports, ptr %t314, i32 0, i32 2 %t316 = load { ptr, i64, i64 }, ptr %a9 @@ -100593,14 +100638,14 @@ ok9749: %t322 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t321, i64 %t319 %t323 = load i32, ptr %a318 %t324 = icmp ne i32 %t323, 0 - br i1 %t324, label %map.new9750, label %map.have9751 -map.new9750: + br i1 %t324, label %map.new9760, label %map.have9761 +map.new9760: %t325 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 1 call void @finch_str_copy(ptr %t325, ptr %a317) %t326 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 store %S.ast.Type zeroinitializer, ptr %t326 - br label %map.have9751 -map.have9751: + br label %map.have9761 +map.have9761: %t327 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 store %S.ast.Type %t311, ptr %a328 call void @finch.copy.S_ast_Type(ptr %a329, ptr %a328) @@ -100609,48 +100654,48 @@ map.have9751: store %S.ast.Type %t330, ptr %t327 store %S.ast.Type %t331, ptr %a332 call void @finch.drop.S_ast_Type(ptr %a332) - br label %endif9747 -endif9747: + br label %endif9757 +endif9757: call void @finch.drop.S_cimport_Mapped(ptr %a307) - br label %endif9735 -else9734: + br label %endif9745 +else9744: %t333 = load i32, ptr %a13 %t334 = icmp eq i32 %t333, 2 - br i1 %t334, label %then9752, label %else9753 -then9752: + br i1 %t334, label %then9762, label %else9763 +then9762: %t335 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t335, ptr %a336 %t337 = call i32 @clang_isCursorDefinition(ptr %a336) %t338 = icmp ne i32 %t337, 0 - br label %logic.from9755 -logic.from9755: - br i1 %t338, label %logic.rhs9756, label %logic.end9757 -logic.rhs9756: + br label %logic.from9765 +logic.from9765: + br i1 %t338, label %logic.rhs9766, label %logic.end9767 +logic.rhs9766: %t339 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t340 = load i64, ptr %t339 %t341 = icmp sgt i64 %t340, 0 - br label %logic.rend9758 -logic.rend9758: - br label %logic.end9757 -logic.end9757: - %t342 = phi i1 [ false, %logic.from9755 ], [ %t341, %logic.rend9758 ] - br label %logic.from9759 -logic.from9759: - br i1 %t342, label %logic.rhs9760, label %logic.end9761 -logic.rhs9760: + br label %logic.rend9768 +logic.rend9768: + br label %logic.end9767 +logic.end9767: + %t342 = phi i1 [ false, %logic.from9765 ], [ %t341, %logic.rend9768 ] + br label %logic.from9769 +logic.from9769: + br i1 %t342, label %logic.rhs9770, label %logic.end9771 +logic.rhs9770: %t343 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t343, ptr %a344 - store { ptr, i64, i64 } { ptr @.str.6587, i64 1, i64 0 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6589, i64 1, i64 0 }, ptr %a346 %t347 = call i64 @finch_str_find(ptr %a344, ptr %a346) %t348 = icmp sge i64 %t347, 0 %t349 = xor i1 %t348, true - br label %logic.rend9762 -logic.rend9762: - br label %logic.end9761 -logic.end9761: - %t350 = phi i1 [ false, %logic.from9759 ], [ %t349, %logic.rend9762 ] - br i1 %t350, label %then9763, label %endif9765 -then9763: + br label %logic.rend9772 +logic.rend9772: + br label %logic.end9771 +logic.end9771: + %t350 = phi i1 [ false, %logic.from9769 ], [ %t349, %logic.rend9772 ] + br i1 %t350, label %then9773, label %endif9775 +then9773: %t351 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t351, ptr %a352 %t353 = call [2 x i64] @clang_getCursorUSR(ptr %a352) @@ -100660,27 +100705,27 @@ then9763: store { ptr, i64, i64 } %t356, ptr %a357 %t358 = load ptr, ptr %a1 %t359 = icmp eq ptr %t358, null - br i1 %t359, label %panic9766, label %ok9767 -panic9766: - call void @finch_panic(ptr @.str.6588, i64 489, ptr @.str.6589) + br i1 %t359, label %panic9776, label %ok9777 +panic9776: + call void @finch_panic(ptr @.str.6590, i64 489, ptr @.str.6591) unreachable -ok9767: +ok9777: %t360 = getelementptr inbounds %S.cimport.Importer, ptr %t358, i32 0, i32 3 %t361 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t361, ptr %a362 %t363 = call i64 @finch_map_find(ptr %t360, ptr %a362, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t364 = icmp sge i64 %t363, 0 %t365 = xor i1 %t364, true - br i1 %t365, label %then9768, label %endif9770 -then9768: + br i1 %t365, label %then9778, label %endif9780 +then9778: %t366 = load { ptr, i64, i64 }, ptr %a9 %t367 = load ptr, ptr %a1 %t368 = icmp eq ptr %t367, null - br i1 %t368, label %panic9771, label %ok9772 -panic9771: - call void @finch_panic(ptr @.str.6590, i64 490, ptr @.str.6591) + br i1 %t368, label %panic9781, label %ok9782 +panic9781: + call void @finch_panic(ptr @.str.6592, i64 490, ptr @.str.6593) unreachable -ok9772: +ok9782: %t369 = getelementptr inbounds %S.cimport.Importer, ptr %t367, i32 0, i32 3 %t370 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t370, ptr %a371 @@ -100691,14 +100736,14 @@ ok9772: %t376 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t375, i64 %t373 %t377 = load i32, ptr %a372 %t378 = icmp ne i32 %t377, 0 - br i1 %t378, label %map.new9773, label %map.have9774 -map.new9773: + br i1 %t378, label %map.new9783, label %map.have9784 +map.new9783: %t379 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 1 call void @finch_str_copy(ptr %t379, ptr %a371) %t380 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t380 - br label %map.have9774 -map.have9774: + br label %map.have9784 +map.have9784: %t381 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 store { ptr, i64, i64 } %t366, ptr %a382 call void @finch_str_copy(ptr %a383, ptr %a382) @@ -100707,34 +100752,34 @@ map.have9774: store { ptr, i64, i64 } %t384, ptr %t381 store { ptr, i64, i64 } %t385, ptr %a386 call void @finch_str_drop(ptr %a386) - br label %endif9770 -endif9770: + br label %endif9780 +endif9780: call void @finch_str_drop(ptr %a357) - br label %endif9765 -endif9765: - br label %endif9754 -else9753: + br label %endif9775 +endif9775: + br label %endif9764 +else9763: %t387 = load i32, ptr %a13 %t388 = icmp eq i32 %t387, 5 - br i1 %t388, label %then9775, label %else9776 -then9775: + br i1 %t388, label %then9785, label %else9786 +then9785: %t389 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t389, ptr %a390 %t391 = load ptr, ptr %a1 %t392 = call i32 @clang_visitChildren(ptr %a390, ptr @finch.c.cimport.visitTop, ptr %t391) - br label %endif9777 -else9776: + br label %endif9787 +else9786: %t393 = load i32, ptr %a13 %t394 = icmp eq i32 %t393, 7 - br i1 %t394, label %then9778, label %else9779 -then9778: + br i1 %t394, label %then9788, label %else9789 +then9788: %t395 = load ptr, ptr %a1 %t396 = icmp eq ptr %t395, null - br i1 %t396, label %panic9781, label %ok9782 -panic9781: - call void @finch_panic(ptr @.str.6592, i64 496, ptr @.str.6593) + br i1 %t396, label %panic9791, label %ok9792 +panic9791: + call void @finch_panic(ptr @.str.6594, i64 496, ptr @.str.6595) unreachable -ok9782: +ok9792: %t397 = getelementptr inbounds %S.cimport.Importer, ptr %t395, i32 0, i32 0 %t398 = getelementptr inbounds %S.cimport.CImports, ptr %t397, i32 0, i32 1 %t399 = load { ptr, i64, i64 }, ptr %a9 @@ -100742,19 +100787,19 @@ ok9782: %t401 = call i64 @finch_map_find(ptr %t398, ptr %a400, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t402 = icmp sge i64 %t401, 0 %t403 = xor i1 %t402, true - br i1 %t403, label %then9783, label %endif9785 -then9783: + br i1 %t403, label %then9793, label %endif9795 +then9793: %t404 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t404, ptr %a405 %t406 = call i64 @clang_getEnumConstantDeclValue(ptr %a405) %t407 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t406, 1 %t408 = load ptr, ptr %a1 %t409 = icmp eq ptr %t408, null - br i1 %t409, label %panic9786, label %ok9787 -panic9786: - call void @finch_panic(ptr @.str.6594, i64 497, ptr @.str.6595) + br i1 %t409, label %panic9796, label %ok9797 +panic9796: + call void @finch_panic(ptr @.str.6596, i64 497, ptr @.str.6597) unreachable -ok9787: +ok9797: %t410 = getelementptr inbounds %S.cimport.Importer, ptr %t408, i32 0, i32 0 %t411 = getelementptr inbounds %S.cimport.CImports, ptr %t410, i32 0, i32 1 %t412 = load { ptr, i64, i64 }, ptr %a9 @@ -100766,66 +100811,66 @@ ok9787: %t418 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t417, i64 %t415 %t419 = load i32, ptr %a414 %t420 = icmp ne i32 %t419, 0 - br i1 %t420, label %map.new9788, label %map.have9789 -map.new9788: + br i1 %t420, label %map.new9798, label %map.have9799 +map.new9798: %t421 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 1 call void @finch_str_copy(ptr %t421, ptr %a413) %t422 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 store %S.cimport.CConst zeroinitializer, ptr %t422 - br label %map.have9789 -map.have9789: + br label %map.have9799 +map.have9799: %t423 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 %t424 = load %S.cimport.CConst, ptr %t423 store %S.cimport.CConst %t407, ptr %t423 store %S.cimport.CConst %t424, ptr %a425 call void @finch.drop.S_cimport_CConst(ptr %a425) - br label %endif9785 -endif9785: - br label %endif9780 -else9779: + br label %endif9795 +endif9795: + br label %endif9790 +else9789: %t426 = load i32, ptr %a13 %t427 = icmp eq i32 %t426, 501 - br i1 %t427, label %then9790, label %endif9792 -then9790: + br i1 %t427, label %then9800, label %endif9802 +then9800: %t428 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t428, ptr %a429 %t430 = call i32 @clang_Cursor_isMacroBuiltin(ptr %a429) %t431 = icmp ne i32 %t430, 0 - br label %logic.from9793 -logic.from9793: - br i1 %t431, label %logic.end9795, label %logic.rhs9794 -logic.rhs9794: + br label %logic.from9803 +logic.from9803: + br i1 %t431, label %logic.end9805, label %logic.rhs9804 +logic.rhs9804: %t432 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t432, ptr %a433 %t434 = call i32 @clang_Cursor_isMacroFunctionLike(ptr %a433) %t435 = icmp ne i32 %t434, 0 - br label %logic.rend9796 -logic.rend9796: - br label %logic.end9795 -logic.end9795: - %t436 = phi i1 [ true, %logic.from9793 ], [ %t435, %logic.rend9796 ] - br i1 %t436, label %then9797, label %endif9799 -then9797: + br label %logic.rend9806 +logic.rend9806: + br label %logic.end9805 +logic.end9805: + %t436 = phi i1 [ true, %logic.from9803 ], [ %t435, %logic.rend9806 ] + br i1 %t436, label %then9807, label %endif9809 +then9807: call void @finch_str_drop(ptr %a9) ret void -endif9799: +endif9809: %t437 = load ptr, ptr %a1 %t438 = load %S.C.CXCursor, ptr %a2 %t439 = call %S.cimport.Number @finch.cimport.macroValue(ptr %t437, %S.C.CXCursor %t438) store %S.cimport.Number %t439, ptr %a440 %t441 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 1 %t442 = load i1, ptr %t441 - br label %logic.from9800 -logic.from9800: - br i1 %t442, label %logic.rhs9801, label %logic.end9802 -logic.rhs9801: + br label %logic.from9810 +logic.from9810: + br i1 %t442, label %logic.rhs9811, label %logic.end9812 +logic.rhs9811: %t443 = load ptr, ptr %a1 %t444 = icmp eq ptr %t443, null - br i1 %t444, label %panic9803, label %ok9804 -panic9803: - call void @finch_panic(ptr @.str.6596, i64 504, ptr @.str.6597) + br i1 %t444, label %panic9813, label %ok9814 +panic9813: + call void @finch_panic(ptr @.str.6598, i64 504, ptr @.str.6599) unreachable -ok9804: +ok9814: %t445 = getelementptr inbounds %S.cimport.Importer, ptr %t443, i32 0, i32 0 %t446 = getelementptr inbounds %S.cimport.CImports, ptr %t445, i32 0, i32 1 %t447 = load { ptr, i64, i64 }, ptr %a9 @@ -100833,22 +100878,22 @@ ok9804: %t449 = call i64 @finch_map_find(ptr %t446, ptr %a448, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t450 = icmp sge i64 %t449, 0 %t451 = xor i1 %t450, true - br label %logic.rend9805 -logic.rend9805: - br label %logic.end9802 -logic.end9802: - %t452 = phi i1 [ false, %logic.from9800 ], [ %t451, %logic.rend9805 ] - br i1 %t452, label %then9806, label %endif9808 -then9806: + br label %logic.rend9815 +logic.rend9815: + br label %logic.end9812 +logic.end9812: + %t452 = phi i1 [ false, %logic.from9810 ], [ %t451, %logic.rend9815 ] + br i1 %t452, label %then9816, label %endif9818 +then9816: %t453 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 0 %t454 = load %S.cimport.CConst, ptr %t453 %t455 = load ptr, ptr %a1 %t456 = icmp eq ptr %t455, null - br i1 %t456, label %panic9809, label %ok9810 -panic9809: - call void @finch_panic(ptr @.str.6598, i64 505, ptr @.str.6599) + br i1 %t456, label %panic9819, label %ok9820 +panic9819: + call void @finch_panic(ptr @.str.6600, i64 505, ptr @.str.6601) unreachable -ok9810: +ok9820: %t457 = getelementptr inbounds %S.cimport.Importer, ptr %t455, i32 0, i32 0 %t458 = getelementptr inbounds %S.cimport.CImports, ptr %t457, i32 0, i32 1 %t459 = load { ptr, i64, i64 }, ptr %a9 @@ -100860,14 +100905,14 @@ ok9810: %t465 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t464, i64 %t462 %t466 = load i32, ptr %a461 %t467 = icmp ne i32 %t466, 0 - br i1 %t467, label %map.new9811, label %map.have9812 -map.new9811: + br i1 %t467, label %map.new9821, label %map.have9822 +map.new9821: %t468 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 1 call void @finch_str_copy(ptr %t468, ptr %a460) %t469 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 store %S.cimport.CConst zeroinitializer, ptr %t469 - br label %map.have9812 -map.have9812: + br label %map.have9822 +map.have9822: %t470 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 store %S.cimport.CConst %t454, ptr %a471 call void @finch.copy.S_cimport_CConst(ptr %a472, ptr %a471) @@ -100876,23 +100921,23 @@ map.have9812: store %S.cimport.CConst %t473, ptr %t470 store %S.cimport.CConst %t474, ptr %a475 call void @finch.drop.S_cimport_CConst(ptr %a475) - br label %endif9808 -endif9808: + br label %endif9818 +endif9818: call void @finch.drop.S_cimport_Number(ptr %a440) - br label %endif9792 -endif9792: - br label %endif9780 -endif9780: - br label %endif9777 -endif9777: - br label %endif9754 -endif9754: - br label %endif9735 -endif9735: - br label %endif9694 -endif9694: - br label %endif9663 -endif9663: + br label %endif9802 +endif9802: + br label %endif9790 +endif9790: + br label %endif9787 +endif9787: + br label %endif9764 +endif9764: + br label %endif9745 +endif9745: + br label %endif9704 +endif9704: + br label %endif9673 +endif9673: call void @finch_str_drop(ptr %a9) ret void } @@ -100903,31 +100948,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond9816 -n.cond9816: + br label %n.cond9826 +n.cond9826: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9817, label %n.end9818 -n.body9817: + br i1 %t5, label %n.body9827, label %n.end9828 +n.body9827: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live9819, label %entry.next9820 -entry.live9819: + br i1 %t11, label %entry.live9829, label %entry.next9830 +entry.live9829: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 2 call void @finch_str_drop(ptr %t13) - br label %entry.next9820 -entry.next9820: + br label %entry.next9830 +entry.next9830: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond9816 -n.end9818: + br label %n.cond9826 +n.end9828: call void @finch_map_free(ptr %a) ret void } @@ -100938,30 +100983,30 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond9821 -n.cond9821: + br label %n.cond9831 +n.cond9831: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9822, label %n.end9823 -n.body9822: + br i1 %t5, label %n.body9832, label %n.end9833 +n.body9832: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live9824, label %entry.next9825 -entry.live9824: + br i1 %t11, label %entry.live9834, label %entry.next9835 +entry.live9834: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 2 - br label %entry.next9825 -entry.next9825: + br label %entry.next9835 +entry.next9835: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond9821 -n.end9823: + br label %n.cond9831 +n.end9833: call void @finch_map_free(ptr %a) ret void } @@ -101024,92 +101069,92 @@ entry: %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 - %a147 = alloca %S.C.CXUnsavedFile, align 16 - %a148 = alloca ptr, align 16 - %a150 = alloca i64, align 16 - %a163 = alloca i32, align 16 - %a171 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca %S.C.CXUnsavedFile, align 16 + %a138 = alloca ptr, align 16 + %a140 = alloca i64, align 16 + %a153 = alloca i32, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 - %a177 = alloca { ptr, i64, i64 }, align 16 - %a178 = alloca { ptr, i64, i64 }, align 16 - %a179 = alloca { ptr, i64, i64 }, align 16 - %a180 = alloca { ptr, i64, i64 }, align 16 - %a182 = alloca { ptr, i64, i64 }, align 16 - %a183 = alloca { ptr, i64, i64 }, align 16 - %a184 = alloca { ptr, i64, i64 }, align 16 - %a185 = alloca { ptr, i64, i64 }, align 16 - %a191 = alloca i64, align 16 - %a193 = alloca i64, align 16 - %a200 = alloca ptr, align 16 - %a206 = alloca [32 x i8], align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca i64, align 16 + %a183 = alloca i64, align 16 + %a190 = alloca ptr, align 16 + %a196 = alloca [32 x i8], align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 - %a213 = alloca { ptr, i64, i64 }, align 16 - %a214 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 - %a219 = alloca { ptr, i64, i64 }, align 16 - %a221 = alloca { ptr, i64, i64 }, align 16 - %a222 = alloca { ptr, i64, i64 }, align 16 - %a226 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 - %a230 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 - %a237 = alloca { ptr, i64, i64 }, align 16 - %a238 = alloca { ptr, i64, i64 }, align 16 - %a243 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 - %a249 = alloca { ptr, i64, i64 }, align 16 - %a250 = alloca { ptr, i64, i64 }, align 16 - %a251 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 - %a255 = alloca { ptr, i64, i64 }, align 16 - %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 - %a267 = alloca { ptr, i64, i64 }, align 16 - %a268 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 - %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 - %a279 = alloca { ptr, i64, i64 }, align 16 - %a280 = alloca { ptr, i64, i64 }, align 16 - %a281 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 - %a285 = alloca { ptr, i64, i64 }, align 16 - %a286 = alloca { ptr, i64, i64 }, align 16 - %a287 = alloca { ptr, i64, i64 }, align 16 - %a292 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 - %a298 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 - %a303 = alloca { ptr, i64, i64 }, align 16 - %a304 = alloca { ptr, i64, i64 }, align 16 - %a305 = alloca { ptr, i64, i64 }, align 16 - %a306 = alloca { ptr, i64, i64 }, align 16 - %a309 = alloca { ptr, i64, i64 }, align 16 - %a310 = alloca { ptr, i64, i64 }, align 16 - %a311 = alloca { ptr, i64, i64 }, align 16 - %a312 = alloca { ptr, i64, i64 }, align 16 - %a323 = alloca { ptr, i64, i64 }, align 16 - %a324 = alloca { ptr, i64, i64 }, align 16 - %a327 = alloca { ptr, i64, i64 }, align 16 - %a328 = alloca %S.C.CXCursor, align 16 - %a331 = alloca %S.C.CXCursor, align 16 - %a339 = alloca %S.cimport.CImports, align 16 - %a340 = alloca %S.cimport.CImports, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca %S.C.CXCursor, align 16 + %a321 = alloca %S.C.CXCursor, align 16 + %a329 = alloca %S.cimport.CImports, align 16 + %a330 = alloca %S.cimport.CImports, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 @@ -101119,8 +101164,8 @@ entry: %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = icmp eq i64 %t8, 0 - br i1 %t9, label %then9813, label %endif9815 -then9813: + br i1 %t9, label %then9823, label %endif9825 +then9823: %t10 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 %t11 = load %S.cimport.CImports, ptr %t10 store %S.cimport.CImports %t11, ptr %a12 @@ -101130,15 +101175,15 @@ then9813: %t15 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t16 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t15, %S.cimport.CImports %t14, 1 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t16 -endif9815: +endif9825: %t17 = mul i64 3, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t18 = call ptr @finch_alloc(i64 %t17) %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 0 - store { ptr, i64, i64 } { ptr @.str.6600, i64 2, i64 0 }, ptr %t19 + store { ptr, i64, i64 } { ptr @.str.6602, i64 2, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 - store { ptr, i64, i64 } { ptr @.str.6601, i64 1, i64 0 }, ptr %t20 + store { ptr, i64, i64 } { ptr @.str.6603, i64 1, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 2 - store { ptr, i64, i64 } { ptr @.str.6602, i64 10, i64 0 }, ptr %t21 + store { ptr, i64, i64 } { ptr @.str.6604, i64 10, i64 0 }, ptr %t21 %t22 = insertvalue { ptr, i64, i64 } undef, ptr %t18, 0 %t23 = insertvalue { ptr, i64, i64 } %t22, i64 3, 1 %t24 = insertvalue { ptr, i64, i64 } %t23, i64 3, 2 @@ -101146,11 +101191,11 @@ endif9815: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = icmp sgt i64 %t27, 0 - br i1 %t28, label %then9826, label %endif9828 -then9826: + br i1 %t28, label %then9836, label %endif9838 +then9836: %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6603, i64 9, i64 0 }, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.6605, i64 9, i64 0 }, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 @@ -101161,37 +101206,37 @@ then9826: %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t35 store { ptr, i64, i64 } %t34, ptr %t38 store i64 %t36, ptr %t29 - br label %endif9828 -endif9828: + br label %endif9838 +endif9838: %t39 = load i1, ptr %a4 - br i1 %t39, label %then9829, label %endif9831 -then9829: + br i1 %t39, label %then9839, label %endif9841 +then9839: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %a25, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %a25 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 - store { ptr, i64, i64 } { ptr @.str.6604, i64 19, i64 0 }, ptr %t44 + store { ptr, i64, i64 } { ptr @.str.6606, i64 19, i64 0 }, ptr %t44 store i64 %t42, ptr %t40 - br label %endif9831 -endif9831: + br label %endif9841 +endif9841: store i64 0, ptr %a45 - br label %each.cond9832 -each.cond9832: + br label %each.cond9842 +each.cond9842: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load i64, ptr %a45 %t49 = icmp slt i64 %t48, %t47 - br i1 %t49, label %each.body9833, label %each.end9835 -each.body9833: + br i1 %t49, label %each.body9843, label %each.end9845 +each.body9843: %t50 = load ptr, ptr %a2 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t55 = load { ptr, i64, i64 }, ptr %a53 - store { ptr, i64, i64 } { ptr @.str.6605, i64 2, i64 0 }, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.6607, i64 2, i64 0 }, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 @@ -101202,25 +101247,25 @@ each.body9833: %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 %t60 store { ptr, i64, i64 } %t59, ptr %t63 store i64 %t61, ptr %t54 - br label %each.step9834 -each.step9834: + br label %each.step9844 +each.step9844: %t64 = load i64, ptr %a45 %t65 = add i64 %t64, 1 store i64 %t65, ptr %a45 - br label %each.cond9832 -each.end9835: + br label %each.cond9842 +each.end9845: %t66 = load { ptr, i64, i64 }, ptr %a5 %t67 = call { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %t66) store { ptr, i64, i64 } %t67, ptr %a68 store i64 0, ptr %a69 - br label %each.cond9836 -each.cond9836: + br label %each.cond9846 +each.cond9846: %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a68, i32 0, i32 1 %t71 = load i64, ptr %t70 %t72 = load i64, ptr %a69 %t73 = icmp slt i64 %t72, %t71 - br i1 %t73, label %each.body9837, label %each.end9839 -each.body9837: + br i1 %t73, label %each.body9847, label %each.end9849 +each.body9847: %t74 = load ptr, ptr %a68 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 %t72 %t76 = load { ptr, i64, i64 }, ptr %t75 @@ -101237,40 +101282,40 @@ each.body9837: %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 store { ptr, i64, i64 } %t82, ptr %t86 store i64 %t84, ptr %t78 - br label %each.step9838 -each.step9838: + br label %each.step9848 +each.step9848: %t87 = load i64, ptr %a69 %t88 = add i64 %t87, 1 store i64 %t88, ptr %a69 - br label %each.cond9836 -each.end9839: + br label %each.cond9846 +each.end9849: call void @finch.drop.arr_str(ptr %a68) store { ptr, i64, i64 } zeroinitializer, ptr %a89 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t91 = load i64, ptr %t90 store i64 0, ptr %a92 - br label %for.cond9840 -for.cond9840: + br label %for.cond9850 +for.cond9850: %t93 = load i64, ptr %a92 %t94 = icmp slt i64 %t93, %t91 - br i1 %t94, label %for.body9841, label %for.end9843 -for.body9841: + br i1 %t94, label %for.body9851, label %for.end9853 +for.body9851: %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 %t96 = load i64, ptr %a92 %t97 = load { ptr, i64, i64 }, ptr %a25 %t98 = extractvalue { ptr, i64, i64 } %t97, 1 %t99 = icmp uge i64 %t96, %t98 - br i1 %t99, label %range9844, label %inrange9845 -range9844: - call void @finch_panic_index(ptr @.str.6606, i64 532, i64 %t96, i64 %t98) + br i1 %t99, label %range9854, label %inrange9855 +range9854: + call void @finch_panic_index(ptr @.str.6608, i64 532, i64 %t96, i64 %t98) unreachable -inrange9845: +inrange9855: %t100 = extractvalue { ptr, i64, i64 } %t97, 0 %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t96 %t102 = load { ptr, i64, i64 }, ptr %t101 %t103 = extractvalue { ptr, i64, i64 } %t102, 0 %t104 = icmp eq ptr %t103, null - %t105 = select i1 %t104, ptr @.str.6607, ptr %t103 + %t105 = select i1 %t104, ptr @.str.6609, ptr %t103 %t106 = load i64, ptr %t95 %t107 = add i64 %t106, 1 call void @finch_arr_reserve(ptr %a89, i64 %t107, i64 ptrtoint (ptr getelementptr (ptr, ptr null, i32 1) to i64)) @@ -101278,331 +101323,343 @@ inrange9845: %t109 = getelementptr inbounds ptr, ptr %t108, i64 %t106 store ptr %t105, ptr %t109 store i64 %t107, ptr %t95 - br label %for.step9842 -for.step9842: + br label %for.step9852 +for.step9852: %t110 = load i64, ptr %a92 %t111 = add i64 %t110, 1 store i64 %t111, ptr %a92 - br label %for.cond9840 -for.end9843: + br label %for.cond9850 +for.end9853: %t112 = call ptr @clang_createIndex(i32 0, i32 0) store ptr %t112, ptr %a113 store i64 0, ptr %a114 - br label %each.cond9846 -each.cond9846: + br label %each.cond9856 +each.cond9856: %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = load i64, ptr %a114 %t118 = icmp slt i64 %t117, %t116 - br i1 %t118, label %each.body9847, label %each.end9849 -each.body9847: + br i1 %t118, label %each.body9857, label %each.end9859 +each.body9857: %t119 = load ptr, ptr %a1 %t120 = getelementptr inbounds %S.cimport.Header, ptr %t119, i64 %t117 %t121 = load %S.cimport.Header, ptr %t120 store %S.cimport.Header %t121, ptr %a122 %t123 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t124 = load { ptr, i64, i64 }, ptr %t123 - store { ptr, i64, i64 } { ptr @.str.6608, i64 10, i64 0 }, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.6610, i64 10, i64 0 }, ptr %a126 store { ptr, i64, i64 } %t124, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a125 store { ptr, i64, i64 } %t128, ptr %a130 - store { ptr, i64, i64 } { ptr @.str.6609, i64 2, i64 0 }, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.6611, i64 2, i64 0 }, ptr %a131 call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) store { ptr, i64, i64 } %t128, ptr %a132 call void @finch_str_drop(ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t133, ptr %a134 - %t135 = extractvalue { ptr, i64, i64 } { ptr @.str.6610, i64 14, i64 0 }, 0 - %t136 = icmp eq ptr %t135, null - %t137 = select i1 %t136, ptr @.str.6611, ptr %t135 - %t138 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t137, 0 - %t139 = load { ptr, i64, i64 }, ptr %a134 - %t140 = extractvalue { ptr, i64, i64 } %t139, 0 - %t141 = icmp eq ptr %t140, null - %t142 = select i1 %t141, ptr @.str.6612, ptr %t140 - %t143 = insertvalue %S.C.CXUnsavedFile %t138, ptr %t142, 1 - %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %a134, i32 0, i32 1 - %t145 = load i64, ptr %t144 - %t146 = insertvalue %S.C.CXUnsavedFile %t143, i64 %t145, 2 - store %S.C.CXUnsavedFile %t146, ptr %a147 - store ptr null, ptr %a148 - %t149 = or i64 1, 64 - store i64 %t149, ptr %a150 - %t151 = load ptr, ptr %a113 - %t152 = extractvalue { ptr, i64, i64 } { ptr @.str.6613, i64 14, i64 0 }, 0 - %t153 = icmp eq ptr %t152, null - %t154 = select i1 %t153, ptr @.str.6614, ptr %t152 - %t155 = load { ptr, i64, i64 }, ptr %a89 - %t156 = extractvalue { ptr, i64, i64 } %t155, 0 - %t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 - %t158 = load i64, ptr %t157 - %t159 = trunc i64 %t158 to i32 - %t160 = load i64, ptr %a150 - %t161 = trunc i64 %t160 to i32 - %t162 = call i32 @clang_parseTranslationUnit2(ptr %t151, ptr %t154, ptr %t156, i32 %t159, ptr %a147, i32 1, i32 %t161, ptr %a148) - store i32 %t162, ptr %a163 - %t164 = load i32, ptr %a163 - %t165 = icmp ne i32 %t164, 0 - br label %logic.from9850 -logic.from9850: - br i1 %t165, label %logic.end9852, label %logic.rhs9851 -logic.rhs9851: - %t166 = load ptr, ptr %a148 - %t167 = icmp eq ptr %t166, null - br label %logic.rend9853 -logic.rend9853: - br label %logic.end9852 -logic.end9852: - %t168 = phi i1 [ true, %logic.from9850 ], [ %t167, %logic.rend9853 ] - br i1 %t168, label %then9854, label %endif9856 -then9854: - %t169 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 - %t170 = load { ptr, i64, i64 }, ptr %t169 - store { ptr, i64, i64 } %t170, ptr %a172 - store { ptr, i64, i64 } { ptr @.str.6615, i64 33, i64 0 }, ptr %a173 - call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) - %t174 = load { ptr, i64, i64 }, ptr %a171 - %t175 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t176 = load { ptr, i64, i64 }, ptr %t175 - store { ptr, i64, i64 } %t174, ptr %a178 - store { ptr, i64, i64 } %t176, ptr %a179 - call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) - store { ptr, i64, i64 } %t174, ptr %a180 - call void @finch_str_drop(ptr %a180) - %t181 = load { ptr, i64, i64 }, ptr %a177 - store { ptr, i64, i64 } %t181, ptr %a183 - store { ptr, i64, i64 } { ptr @.str.6616, i64 1, i64 0 }, ptr %a184 - call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) - store { ptr, i64, i64 } %t181, ptr %a185 - call void @finch_str_drop(ptr %a185) - %t186 = load { ptr, i64, i64 }, ptr %a182 - call void @finch_str_drop(ptr %a134) - call void @finch.drop.arr_ptr(ptr %a89) - call void @finch.drop.arr_str(ptr %a25) - call void @finch.drop.S_cimport_Importer(ptr %a6) - %t187 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t186, 2 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t187 -endif9856: - %t188 = load ptr, ptr %a148 - %t189 = call i32 @clang_getNumDiagnostics(ptr %t188) - %t190 = zext i32 %t189 to i64 - store i64 %t190, ptr %a191 - %t192 = load i64, ptr %a191 - store i64 0, ptr %a193 - br label %for.cond9857 -for.cond9857: - %t194 = load i64, ptr %a193 - %t195 = icmp slt i64 %t194, %t192 - br i1 %t195, label %for.body9858, label %for.end9860 -for.body9858: - %t196 = load ptr, ptr %a148 - %t197 = load i64, ptr %a193 - %t198 = trunc i64 %t197 to i32 - %t199 = call ptr @clang_getDiagnostic(ptr %t196, i32 %t198) - store ptr %t199, ptr %a200 - %t201 = load ptr, ptr %a200 - %t202 = call i32 @clang_getDiagnosticSeverity(ptr %t201) - %t203 = icmp sge i32 %t202, 3 - br i1 %t203, label %then9861, label %endif9863 -then9861: - %t204 = load ptr, ptr %a200 - %t205 = call [2 x i64] @clang_getDiagnosticSpelling(ptr %t204) - store [2 x i64] %t205, ptr %a206 - %t207 = load %S.C.CXString, ptr %a206 - %t208 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t207) - store { ptr, i64, i64 } %t208, ptr %a209 - %t210 = load ptr, ptr %a200 - call void @clang_disposeDiagnostic(ptr %t210) - %t211 = load { ptr, i64, i64 }, ptr %a209 - store { ptr, i64, i64 } %t211, ptr %a212 - store { ptr, i64, i64 } { ptr @.str.6618, i64 14, i64 0 }, ptr %a214 - %t215 = call i64 @finch_str_find(ptr %a212, ptr %a214) - %t216 = icmp sge i64 %t215, 0 - br i1 %t216, label %then9864, label %endif9866 + %t135 = load { ptr, i64, i64 }, ptr %a134 + %t136 = call %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } { ptr @.str.6612, i64 14, i64 0 }, { ptr, i64, i64 } %t135) + store %S.C.CXUnsavedFile %t136, ptr %a137 + store ptr null, ptr %a138 + %t139 = or i64 1, 64 + store i64 %t139, ptr %a140 + %t141 = load ptr, ptr %a113 + %t142 = extractvalue { ptr, i64, i64 } { ptr @.str.6613, i64 14, i64 0 }, 0 + %t143 = icmp eq ptr %t142, null + %t144 = select i1 %t143, ptr @.str.6614, ptr %t142 + %t145 = load { ptr, i64, i64 }, ptr %a89 + %t146 = extractvalue { ptr, i64, i64 } %t145, 0 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 + %t148 = load i64, ptr %t147 + %t149 = trunc i64 %t148 to i32 + %t150 = load i64, ptr %a140 + %t151 = trunc i64 %t150 to i32 + %t152 = call i32 @clang_parseTranslationUnit2(ptr %t141, ptr %t144, ptr %t146, i32 %t149, ptr %a137, i32 1, i32 %t151, ptr %a138) + store i32 %t152, ptr %a153 + %t154 = load i32, ptr %a153 + %t155 = icmp ne i32 %t154, 0 + br label %logic.from9860 +logic.from9860: + br i1 %t155, label %logic.end9862, label %logic.rhs9861 +logic.rhs9861: + %t156 = load ptr, ptr %a138 + %t157 = icmp eq ptr %t156, null + br label %logic.rend9863 +logic.rend9863: + br label %logic.end9862 +logic.end9862: + %t158 = phi i1 [ true, %logic.from9860 ], [ %t157, %logic.rend9863 ] + br i1 %t158, label %then9864, label %endif9866 then9864: - %t217 = load { ptr, i64, i64 }, ptr %a209 - store { ptr, i64, i64 } %t217, ptr %a218 - %t220 = load { ptr, i64, i64 }, ptr %a209 - store { ptr, i64, i64 } %t220, ptr %a221 - %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %a209, i32 0, i32 1 - %t224 = load i64, ptr %t223 - call void @finch_str_sub(ptr %a222, ptr %a221, i64 1, i64 %t224, ptr @.str.6620, i64 552) - %t225 = load { ptr, i64, i64 }, ptr %a222 - store { ptr, i64, i64 } %t225, ptr %a226 - store { ptr, i64, i64 } { ptr @.str.6622, i64 1, i64 0 }, ptr %a228 - %t229 = call i64 @finch_str_find(ptr %a226, ptr %a228) - store { ptr, i64, i64 } %t225, ptr %a230 - call void @finch_str_drop(ptr %a230) - %t231 = add i64 %t229, 1 - call void @finch_str_sub(ptr %a219, ptr %a218, i64 1, i64 %t231, ptr @.str.6619, i64 552) - %t232 = load { ptr, i64, i64 }, ptr %a219 - store { ptr, i64, i64 } %t232, ptr %a233 - %t234 = load { ptr, i64, i64 }, ptr %a233 - %t235 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t236 = load { ptr, i64, i64 }, ptr %t235 - store { ptr, i64, i64 } %t234, ptr %a237 - store { ptr, i64, i64 } %t236, ptr %a238 - %t239 = call i32 @finch_str_eq(ptr %a237, ptr %a238) - %t240 = icmp ne i32 %t239, 0 - br i1 %t240, label %then9867, label %endif9869 -then9867: - %t241 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 - %t242 = load { ptr, i64, i64 }, ptr %t241 - store { ptr, i64, i64 } %t242, ptr %a244 - store { ptr, i64, i64 } { ptr @.str.6623, i64 34, i64 0 }, ptr %a245 - call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) - %t246 = load { ptr, i64, i64 }, ptr %a243 - %t247 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t248 = load { ptr, i64, i64 }, ptr %t247 - store { ptr, i64, i64 } %t246, ptr %a250 - store { ptr, i64, i64 } %t248, ptr %a251 - call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) - store { ptr, i64, i64 } %t246, ptr %a252 - call void @finch_str_drop(ptr %a252) - %t253 = load { ptr, i64, i64 }, ptr %a249 - store { ptr, i64, i64 } %t253, ptr %a255 - store { ptr, i64, i64 } { ptr @.str.6624, i64 1, i64 0 }, ptr %a256 - call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) - store { ptr, i64, i64 } %t253, ptr %a257 - call void @finch_str_drop(ptr %a257) - %t258 = load { ptr, i64, i64 }, ptr %a254 - call void @finch_str_drop(ptr %a233) - call void @finch_str_drop(ptr %a209) + %t159 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6615, i64 33, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t166 = load { ptr, i64, i64 }, ptr %t165 + store { ptr, i64, i64 } %t164, ptr %a168 + store { ptr, i64, i64 } %t166, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t164, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t171, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.6616, i64 1, i64 0 }, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t171, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a172 call void @finch_str_drop(ptr %a134) call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) - %t259 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t258, 2 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t259 -endif9869: - %t260 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 - %t261 = load { ptr, i64, i64 }, ptr %t260 - store { ptr, i64, i64 } %t261, ptr %a263 - store { ptr, i64, i64 } { ptr @.str.6625, i64 34, i64 0 }, ptr %a264 - call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) - %t265 = load { ptr, i64, i64 }, ptr %a262 - %t266 = load { ptr, i64, i64 }, ptr %a233 - store { ptr, i64, i64 } %t265, ptr %a268 - store { ptr, i64, i64 } %t266, ptr %a269 - call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) - store { ptr, i64, i64 } %t265, ptr %a270 - call void @finch_str_drop(ptr %a270) - %t271 = load { ptr, i64, i64 }, ptr %a267 - store { ptr, i64, i64 } %t271, ptr %a273 - store { ptr, i64, i64 } { ptr @.str.6626, i64 10, i64 0 }, ptr %a274 - call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274) - store { ptr, i64, i64 } %t271, ptr %a275 - call void @finch_str_drop(ptr %a275) - %t276 = load { ptr, i64, i64 }, ptr %a272 - %t277 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t278 = load { ptr, i64, i64 }, ptr %t277 - store { ptr, i64, i64 } %t276, ptr %a280 - store { ptr, i64, i64 } %t278, ptr %a281 - call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) - store { ptr, i64, i64 } %t276, ptr %a282 - call void @finch_str_drop(ptr %a282) - %t283 = load { ptr, i64, i64 }, ptr %a279 - store { ptr, i64, i64 } %t283, ptr %a285 - store { ptr, i64, i64 } { ptr @.str.6627, i64 60, i64 0 }, ptr %a286 - call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) - store { ptr, i64, i64 } %t283, ptr %a287 - call void @finch_str_drop(ptr %a287) - %t288 = load { ptr, i64, i64 }, ptr %a284 - call void @finch_str_drop(ptr %a233) - call void @finch_str_drop(ptr %a209) - call void @finch_str_drop(ptr %a134) - call void @finch.drop.arr_ptr(ptr %a89) - call void @finch.drop.arr_str(ptr %a25) - call void @finch.drop.S_cimport_Importer(ptr %a6) - %t289 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t288, 2 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t289 + %t177 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t176, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t177 endif9866: - %t290 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 - %t291 = load { ptr, i64, i64 }, ptr %t290 - store { ptr, i64, i64 } %t291, ptr %a293 - store { ptr, i64, i64 } { ptr @.str.6628, i64 19, i64 0 }, ptr %a294 - call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) - %t295 = load { ptr, i64, i64 }, ptr %a292 - %t296 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t297 = load { ptr, i64, i64 }, ptr %t296 - store { ptr, i64, i64 } %t295, ptr %a299 + %t178 = load ptr, ptr %a138 + %t179 = call i32 @clang_getNumDiagnostics(ptr %t178) + %t180 = zext i32 %t179 to i64 + store i64 %t180, ptr %a181 + %t182 = load i64, ptr %a181 + store i64 0, ptr %a183 + br label %for.cond9867 +for.cond9867: + %t184 = load i64, ptr %a183 + %t185 = icmp slt i64 %t184, %t182 + br i1 %t185, label %for.body9868, label %for.end9870 +for.body9868: + %t186 = load ptr, ptr %a138 + %t187 = load i64, ptr %a183 + %t188 = trunc i64 %t187 to i32 + %t189 = call ptr @clang_getDiagnostic(ptr %t186, i32 %t188) + store ptr %t189, ptr %a190 + %t191 = load ptr, ptr %a190 + %t192 = call i32 @clang_getDiagnosticSeverity(ptr %t191) + %t193 = icmp sge i32 %t192, 3 + br i1 %t193, label %then9871, label %endif9873 +then9871: + %t194 = load ptr, ptr %a190 + %t195 = call [2 x i64] @clang_getDiagnosticSpelling(ptr %t194) + store [2 x i64] %t195, ptr %a196 + %t197 = load %S.C.CXString, ptr %a196 + %t198 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t197) + store { ptr, i64, i64 } %t198, ptr %a199 + %t200 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t200) + %t201 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t201, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.6618, i64 14, i64 0 }, ptr %a204 + %t205 = call i64 @finch_str_find(ptr %a202, ptr %a204) + %t206 = icmp sge i64 %t205, 0 + br i1 %t206, label %then9874, label %endif9876 +then9874: + %t207 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t207, ptr %a208 + %t210 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t210, ptr %a211 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a199, i32 0, i32 1 + %t214 = load i64, ptr %t213 + call void @finch_str_sub(ptr %a212, ptr %a211, i64 1, i64 %t214, ptr @.str.6620, i64 552) + %t215 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t215, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.6622, i64 1, i64 0 }, ptr %a218 + %t219 = call i64 @finch_str_find(ptr %a216, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = add i64 %t219, 1 + call void @finch_str_sub(ptr %a209, ptr %a208, i64 1, i64 %t221, ptr @.str.6619, i64 552) + %t222 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t222, ptr %a223 + %t224 = load { ptr, i64, i64 }, ptr %a223 + %t225 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t226 = load { ptr, i64, i64 }, ptr %t225 + store { ptr, i64, i64 } %t224, ptr %a227 + store { ptr, i64, i64 } %t226, ptr %a228 + %t229 = call i32 @finch_str_eq(ptr %a227, ptr %a228) + %t230 = icmp ne i32 %t229, 0 + br i1 %t230, label %then9877, label %endif9879 +then9877: + %t231 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t232 = load { ptr, i64, i64 }, ptr %t231 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.6623, i64 34, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a233 + %t237 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + store { ptr, i64, i64 } %t236, ptr %a240 + store { ptr, i64, i64 } %t238, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t236, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + store { ptr, i64, i64 } %t243, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.6624, i64 1, i64 0 }, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t243, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + call void @finch_str_drop(ptr %a223) + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t249 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t248, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t249 +endif9879: + %t250 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t251 = load { ptr, i64, i64 }, ptr %t250 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.6625, i64 34, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + %t255 = load { ptr, i64, i64 }, ptr %a252 + %t256 = load { ptr, i64, i64 }, ptr %a223 + store { ptr, i64, i64 } %t255, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t261, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.6626, i64 10, i64 0 }, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t261, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + %t267 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t266, ptr %a270 + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t266, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + store { ptr, i64, i64 } %t273, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.6627, i64 60, i64 0 }, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + call void @finch_str_drop(ptr %a223) + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t279 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t278, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t279 +endif9876: + %t280 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a283 + store { ptr, i64, i64 } { ptr @.str.6628, i64 19, i64 0 }, ptr %a284 + call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a282 + %t286 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t285, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t285, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t292, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.6629, i64 16, i64 0 }, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t292, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a293 + %t298 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t297, ptr %a300 - call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) - store { ptr, i64, i64 } %t295, ptr %a301 - call void @finch_str_drop(ptr %a301) - %t302 = load { ptr, i64, i64 }, ptr %a298 - store { ptr, i64, i64 } %t302, ptr %a304 - store { ptr, i64, i64 } { ptr @.str.6629, i64 16, i64 0 }, ptr %a305 - call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) - store { ptr, i64, i64 } %t302, ptr %a306 - call void @finch_str_drop(ptr %a306) - %t307 = load { ptr, i64, i64 }, ptr %a303 - %t308 = load { ptr, i64, i64 }, ptr %a209 - store { ptr, i64, i64 } %t307, ptr %a310 - store { ptr, i64, i64 } %t308, ptr %a311 - call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311) - store { ptr, i64, i64 } %t307, ptr %a312 - call void @finch_str_drop(ptr %a312) - %t313 = load { ptr, i64, i64 }, ptr %a309 - call void @finch_str_drop(ptr %a209) + store { ptr, i64, i64 } %t298, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t297, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + call void @finch_str_drop(ptr %a199) call void @finch_str_drop(ptr %a134) call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) - %t314 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t313, 2 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t314 -endif9863: - %t315 = load ptr, ptr %a200 - call void @clang_disposeDiagnostic(ptr %t315) - br label %for.step9859 -for.step9859: - %t316 = load i64, ptr %a193 - %t317 = add i64 %t316, 1 - store i64 %t317, ptr %a193 - br label %for.cond9857 -for.end9860: - %t318 = load ptr, ptr %a148 - %t319 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1 - store ptr %t318, ptr %t319 - %t320 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t321 = load { ptr, i64, i64 }, ptr %t320 - %t322 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2 - store { ptr, i64, i64 } %t321, ptr %a323 - call void @finch_str_copy(ptr %a324, ptr %a323) - %t325 = load { ptr, i64, i64 }, ptr %a324 - %t326 = load { ptr, i64, i64 }, ptr %t322 - store { ptr, i64, i64 } %t325, ptr %t322 - store { ptr, i64, i64 } %t326, ptr %a327 - call void @finch_str_drop(ptr %a327) - %t329 = load ptr, ptr %a148 - call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a328, ptr %t329) - %t330 = load %S.C.CXCursor, ptr %a328 - store %S.C.CXCursor %t330, ptr %a331 - %t332 = call i32 @clang_visitChildren(ptr %a331, ptr @finch.c.cimport.visitTop, ptr %a6) - %t333 = load ptr, ptr %a148 - call void @clang_disposeTranslationUnit(ptr %t333) + %t304 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t303, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t304 +endif9873: + %t305 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t305) + br label %for.step9869 +for.step9869: + %t306 = load i64, ptr %a183 + %t307 = add i64 %t306, 1 + store i64 %t307, ptr %a183 + br label %for.cond9867 +for.end9870: + %t308 = load ptr, ptr %a138 + %t309 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1 + store ptr %t308, ptr %t309 + %t310 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t311 = load { ptr, i64, i64 }, ptr %t310 + %t312 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2 + store { ptr, i64, i64 } %t311, ptr %a313 + call void @finch_str_copy(ptr %a314, ptr %a313) + %t315 = load { ptr, i64, i64 }, ptr %a314 + %t316 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t315, ptr %t312 + store { ptr, i64, i64 } %t316, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t319 = load ptr, ptr %a138 + call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a318, ptr %t319) + %t320 = load %S.C.CXCursor, ptr %a318 + store %S.C.CXCursor %t320, ptr %a321 + %t322 = call i32 @clang_visitChildren(ptr %a321, ptr @finch.c.cimport.visitTop, ptr %a6) + %t323 = load ptr, ptr %a138 + call void @clang_disposeTranslationUnit(ptr %t323) call void @finch_str_drop(ptr %a134) - br label %each.step9848 -each.step9848: - %t334 = load i64, ptr %a114 - %t335 = add i64 %t334, 1 - store i64 %t335, ptr %a114 - br label %each.cond9846 -each.end9849: - %t336 = load ptr, ptr %a113 - call void @clang_disposeIndex(ptr %t336) - %t337 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 - %t338 = load %S.cimport.CImports, ptr %t337 - store %S.cimport.CImports %t338, ptr %a339 - call void @finch.copy.S_cimport_CImports(ptr %a340, ptr %a339) - %t341 = load %S.cimport.CImports, ptr %a340 + br label %each.step9858 +each.step9858: + %t324 = load i64, ptr %a114 + %t325 = add i64 %t324, 1 + store i64 %t325, ptr %a114 + br label %each.cond9856 +each.end9859: + %t326 = load ptr, ptr %a113 + call void @clang_disposeIndex(ptr %t326) + %t327 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 + %t328 = load %S.cimport.CImports, ptr %t327 + store %S.cimport.CImports %t328, ptr %a329 + call void @finch.copy.S_cimport_CImports(ptr %a330, ptr %a329) + %t331 = load %S.cimport.CImports, ptr %a330 call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) - %t342 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 - %t343 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t342, %S.cimport.CImports %t341, 1 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t343 + %t332 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t333 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t332, %S.cimport.CImports %t331, 1 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t333 +} + +define internal %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + %t4 = extractvalue { ptr, i64, i64 } %t3, 0 + %t5 = icmp eq ptr %t4, null + %t6 = select i1 %t5, ptr @.str.6630, ptr %t4 + %t7 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = extractvalue { ptr, i64, i64 } %t8, 0 + %t10 = icmp eq ptr %t9, null + %t11 = select i1 %t10, ptr @.str.6631, ptr %t9 + %t12 = insertvalue %S.C.CXUnsavedFile %t7, ptr %t11, 1 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = insertvalue %S.C.CXUnsavedFile %t12, i64 %t14, 2 + ret %S.C.CXUnsavedFile %t15 } define internal { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %p0) { @@ -101623,18 +101680,18 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6632, i64 1, i64 0 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.6633, i64 4, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6634, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6635, i64 4, i64 0 }, ptr %a6 call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.6630, i64 1, i64 0 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6632, i64 1, i64 0 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t12, ptr %a14 - store { ptr, i64, i64 } { ptr @.str.6634, i64 1, i64 0 }, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6636, i64 1, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) store { ptr, i64, i64 } %t12, ptr %a16 call void @finch_str_drop(ptr %a16) @@ -101659,7 +101716,7 @@ entry: define internal { ptr, i64, i64 } @finch.host.nullDevice() { entry: - ret { ptr, i64, i64 } { ptr @.str.6635, i64 9, i64 0 } + ret { ptr, i64, i64 } { ptr @.str.6637, i64 9, i64 0 } } define internal { ptr, i64, i64 } @finch.host.tempDir() { @@ -101673,9 +101730,9 @@ entry: %a17 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 - %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6636, i64 6, i64 0 }, 0 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6638, i64 6, i64 0 }, 0 %t2 = icmp eq ptr %t1, null - %t3 = select i1 %t2, ptr @.str.6637, ptr %t1 + %t3 = select i1 %t2, ptr @.str.6639, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) @@ -101687,36 +101744,36 @@ entry: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 - br i1 %t13, label %then9870, label %endif9872 -then9870: + br i1 %t13, label %then9880, label %endif9882 +then9880: %t14 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t14, ptr %a15 - store { ptr, i64, i64 } { ptr @.str.6639, i64 1, i64 0 }, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6641, i64 1, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_ends(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %then9873, label %endif9875 -then9873: + br i1 %t19, label %then9883, label %endif9885 +then9883: %t20 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t20, ptr %a21 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = sub i64 %t24, 1 - call void @finch_str_sub(ptr %a22, ptr %a21, i64 0, i64 %t25, ptr @.str.6640, i64 25) + call void @finch_str_sub(ptr %a22, ptr %a21, i64 0, i64 %t25, ptr @.str.6642, i64 31) %t26 = load { ptr, i64, i64 }, ptr %a22 call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t26 -endif9875: +endif9885: %t27 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t27 -endif9872: +endif9882: call void @finch_str_drop(ptr %a10) - ret { ptr, i64, i64 } { ptr @.str.6641, i64 4, i64 0 } + ret { ptr, i64, i64 } { ptr @.str.6643, i64 4, i64 0 } } define internal { ptr, i64, i64 } @finch.host.pathSeparator() { entry: - ret { ptr, i64, i64 } { ptr @.str.6642, i64 1, i64 0 } + ret { ptr, i64, i64 } { ptr @.str.6644, i64 1, i64 0 } } define internal i64 @finch.host.pid() { @@ -101732,9 +101789,9 @@ entry: %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 - %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6643, i64 3, i64 0 }, 0 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6645, i64 3, i64 0 }, 0 %t2 = icmp eq ptr %t1, null - %t3 = select i1 %t2, ptr @.str.6644, ptr %t1 + %t3 = select i1 %t2, ptr @.str.6646, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) @@ -101765,9 +101822,9 @@ entry: %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 - %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6645, i64 14, i64 0 }, 0 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6647, i64 14, i64 0 }, 0 %t2 = icmp eq ptr %t1, null - %t3 = select i1 %t2, ptr @.str.6646, ptr %t1 + %t3 = select i1 %t2, ptr @.str.6648, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) @@ -101779,19 +101836,19 @@ entry: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 - br i1 %t13, label %then9876, label %endif9878 -then9876: + br i1 %t13, label %then9886, label %endif9888 +then9886: %t14 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t14, ptr %a16 - store { ptr, i64, i64 } { ptr @.str.6647, i64 6, i64 0 }, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6649, i64 6, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t18 -endif9878: - %t19 = extractvalue { ptr, i64, i64 } { ptr @.str.6648, i64 4, i64 0 }, 0 +endif9888: + %t19 = extractvalue { ptr, i64, i64 } { ptr @.str.6650, i64 4, i64 0 }, 0 %t20 = icmp eq ptr %t19, null - %t21 = select i1 %t20, ptr @.str.6649, ptr %t19 + %t21 = select i1 %t20, ptr @.str.6651, ptr %t19 %t22 = call ptr @getenv(ptr %t21) store { ptr, i64, i64 } zeroinitializer, ptr %a23 call void @finch_str_from_c(ptr %a23, ptr %t22) @@ -101803,20 +101860,20 @@ endif9878: %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = icmp sgt i64 %t30, 0 - br i1 %t31, label %then9879, label %endif9881 -then9879: + br i1 %t31, label %then9889, label %endif9891 +then9889: %t32 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t32, ptr %a34 - store { ptr, i64, i64 } { ptr @.str.6650, i64 13, i64 0 }, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.6652, i64 13, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 call void @finch_str_drop(ptr %a28) call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t36 -endif9881: +endif9891: %t37 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t37, ptr %a39 - store { ptr, i64, i64 } { ptr @.str.6651, i64 12, i64 0 }, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.6653, i64 12, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) store { ptr, i64, i64 } %t37, ptr %a41 call void @finch_str_drop(ptr %a41) @@ -101845,7 +101902,7 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) - store { ptr, i64, i64 } { ptr @.str.6652, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6654, i64 9, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 @@ -101888,7 +101945,7 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) - store { ptr, i64, i64 } { ptr @.str.6653, i64 7, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6655, i64 7, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 @@ -101927,14 +101984,14 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 %t4 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t3) - store { ptr, i64, i64 } { ptr @.str.6654, i64 3, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6656, i64 3, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) store { ptr, i64, i64 } %t4, ptr %a8 call void @finch_str_drop(ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t9, ptr %a11 - store { ptr, i64, i64 } { ptr @.str.6655, i64 1, i64 0 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.6657, i64 1, i64 0 }, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) store { ptr, i64, i64 } %t9, ptr %a13 call void @finch_str_drop(ptr %a13) @@ -101977,7 +102034,7 @@ entry: call void @finch_str_trim(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 - store { ptr, i64, i64 } { ptr @.str.6658, i64 1, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6660, i64 1, i64 0 }, ptr %a8 call void @finch_str_split(ptr %a9, ptr %a6, ptr %a8) %t10 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t5, ptr %a11 @@ -101986,11 +102043,11 @@ entry: %t13 = load { ptr, i64, i64 }, ptr %a12 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 0, %t14 - br i1 %t15, label %range9882, label %inrange9883 -range9882: - call void @finch_panic_index(ptr @.str.6659, i64 21, i64 0, i64 %t14) + br i1 %t15, label %range9892, label %inrange9893 +range9892: + call void @finch_panic_index(ptr @.str.6661, i64 21, i64 0, i64 %t14) unreachable -inrange9883: +inrange9893: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 %t18 = load { ptr, i64, i64 }, ptr %t17 @@ -102042,7 +102099,7 @@ entry: %a60 = alloca { ptr, i64, i64 }, align 16 %t1 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t1, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6661, i64 14, i64 0 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6663, i64 14, i64 0 }, ptr %a4 call void @finch_str_concat(ptr %a2, ptr %a3, ptr %a4) store { ptr, i64, i64 } %t1, ptr %a5 call void @finch_str_drop(ptr %a5) @@ -102059,7 +102116,7 @@ entry: call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t15, ptr %a17 - store { ptr, i64, i64 } { ptr @.str.6662, i64 4, i64 0 }, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.6664, i64 4, i64 0 }, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_drop(ptr %a19) @@ -102067,14 +102124,14 @@ entry: store { ptr, i64, i64 } %t20, ptr %a21 %t22 = load { ptr, i64, i64 }, ptr %a21 %t23 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t22) - store { ptr, i64, i64 } { ptr @.str.6663, i64 21, i64 0 }, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.6665, i64 21, i64 0 }, ptr %a25 store { ptr, i64, i64 } %t23, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t28, ptr %a30 - store { ptr, i64, i64 } { ptr @.str.6664, i64 4, i64 0 }, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.6666, i64 4, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) store { ptr, i64, i64 } %t28, ptr %a32 call void @finch_str_drop(ptr %a32) @@ -102099,17 +102156,17 @@ entry: %t48 = icmp eq i32 %t47, 0 %t49 = load { ptr, i64, i64 }, ptr %a46 %t50 = load { ptr, i64, i64 }, ptr %a45 - br i1 %t48, label %or.failed9884, label %or.ok9885 -or.failed9884: + br i1 %t48, label %or.failed9894, label %or.ok9895 +or.failed9894: store { ptr, i64, i64 } %t49, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %or.bend9886 -or.bend9886: - br label %or.end9887 -or.ok9885: - br label %or.end9887 -or.end9887: - %t52 = phi { ptr, i64, i64 } [ { ptr @.str.6665, i64 0, i64 0 }, %or.bend9886 ], [ %t50, %or.ok9885 ] + br label %or.bend9896 +or.bend9896: + br label %or.end9897 +or.ok9895: + br label %or.end9897 +or.end9897: + %t52 = phi { ptr, i64, i64 } [ { ptr @.str.6667, i64 0, i64 0 }, %or.bend9896 ], [ %t50, %or.ok9895 ] store { ptr, i64, i64 } %t52, ptr %a53 %t54 = load { ptr, i64, i64 }, ptr %a21 call void @finch.host.remove({ ptr, i64, i64 } %t54) @@ -102121,12 +102178,12 @@ or.end9887: store { ptr, i64, i64 } %t58, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = icmp eq i64 %t59, 0 - br i1 %t61, label %then9888, label %endif9890 -then9888: + br i1 %t61, label %then9898, label %endif9900 +then9898: call void @finch_str_drop(ptr %a53) call void @finch_str_drop(ptr %a21) - ret { ptr, i64, i64 } { ptr @.str.6667, i64 24, i64 0 } -endif9890: + ret { ptr, i64, i64 } { ptr @.str.6669, i64 24, i64 0 } +endif9900: %t62 = load { ptr, i64, i64 }, ptr %a53 %t63 = call { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %t62) call void @finch_str_drop(ptr %a53) @@ -102169,73 +102226,86 @@ entry: %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 - %a78 = alloca %S.platform.Target, align 16 - %a80 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 - %a86 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca %S.platform.Target, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 - %a110 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 - %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 - %a138 = alloca { ptr, i64, i64 }, align 16 - %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 - %a152 = alloca { ptr, i64, i64 }, align 16 - %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 - %a162 = alloca i1, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 - %a166 = alloca { ptr, i64, i64 }, align 16 - %a170 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca i1, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 - %a176 = alloca i1, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca i1, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 - %a197 = alloca { ptr, i64, i64 }, align 16 - %a202 = alloca { ptr, i64, i64 }, align 16 - %a204 = alloca { ptr, i64, i64 }, align 16 - %a205 = alloca { ptr, i64, i64 }, align 16 - %a207 = alloca { ptr, i64, i64 }, align 16 - %a213 = alloca { ptr, i64, i64 }, align 16 - %a214 = alloca { ptr, i64, i64 }, align 16 - %a217 = alloca { ptr, i64, i64 }, align 16 - %a225 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca i1, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 - %a241 = alloca { ptr, i64, i64 }, align 16 - %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 - %a249 = alloca { ptr, i64, i64 }, align 16 - %a250 = alloca { ptr, i64, i64 }, align 16 - %a253 = alloca { ptr, i64, i64 }, align 16 - %a256 = alloca { ptr, i64, i64 }, align 16 - %a259 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = call { ptr, i64, i64 } @finch.platform.hostTriple() store { ptr, i64, i64 } %t2, ptr %a3 @@ -102247,8 +102317,8 @@ entry: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp eq i64 %t10, 0 - br i1 %t11, label %then9891, label %else9892 -then9891: + br i1 %t11, label %then9901, label %else9902 +then9901: %t12 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) @@ -102257,522 +102327,571 @@ then9891: store { ptr, i64, i64 } %t15, ptr %a8 store { ptr, i64, i64 } %t16, ptr %a17 call void @finch_str_drop(ptr %a17) - br label %endif9893 -else9892: + br label %endif9903 +else9902: %t18 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t18, ptr %a19 - store { ptr, i64, i64 } { ptr @.str.6668, i64 7, i64 0 }, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.6670, i64 7, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br i1 %t22, label %then9894, label %else9895 -then9894: + br i1 %t22, label %then9904, label %else9905 +then9904: %t23 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6669, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6671, i64 18, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t23, ptr %a24 call void @finch_str_drop(ptr %a24) - br label %endif9896 -else9895: + br label %endif9906 +else9905: %t25 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t25, ptr %a26 - store { ptr, i64, i64 } { ptr @.str.6670, i64 5, i64 0 }, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.6672, i64 5, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br i1 %t29, label %then9897, label %else9898 -then9897: + br i1 %t29, label %then9907, label %else9908 +then9907: %t30 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6671, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6673, i64 24, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t30, ptr %a31 call void @finch_str_drop(ptr %a31) - br label %endif9899 -else9898: + br label %endif9909 +else9908: %t32 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t32, ptr %a33 - store { ptr, i64, i64 } { ptr @.str.6672, i64 5, i64 0 }, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.6674, i64 5, i64 0 }, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 - br label %logic.from9900 -logic.from9900: - br i1 %t36, label %logic.end9902, label %logic.rhs9901 -logic.rhs9901: + br label %logic.from9910 +logic.from9910: + br i1 %t36, label %logic.end9912, label %logic.rhs9911 +logic.rhs9911: %t37 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t37, ptr %a38 - store { ptr, i64, i64 } { ptr @.str.6673, i64 7, i64 0 }, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.6675, i64 7, i64 0 }, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 - br label %logic.rend9903 -logic.rend9903: - br label %logic.end9902 -logic.end9902: - %t42 = phi i1 [ true, %logic.from9900 ], [ %t41, %logic.rend9903 ] - br label %logic.from9904 -logic.from9904: - br i1 %t42, label %logic.end9906, label %logic.rhs9905 -logic.rhs9905: - %t43 = load { ptr, i64, i64 }, ptr %a1 - store { ptr, i64, i64 } %t43, ptr %a44 - store { ptr, i64, i64 } { ptr @.str.6674, i64 11, i64 0 }, ptr %a45 - %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) - %t47 = icmp ne i32 %t46, 0 - br label %logic.rend9907 -logic.rend9907: - br label %logic.end9906 -logic.end9906: - %t48 = phi i1 [ true, %logic.from9904 ], [ %t47, %logic.rend9907 ] - br i1 %t48, label %then9908, label %else9909 -then9908: - %t49 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6675, i64 25, i64 0 }, ptr %a8 - store { ptr, i64, i64 } %t49, ptr %a50 - call void @finch_str_drop(ptr %a50) - br label %endif9910 -else9909: - %t51 = load { ptr, i64, i64 }, ptr %a1 - store { ptr, i64, i64 } %t51, ptr %a52 - store { ptr, i64, i64 } { ptr @.str.6676, i64 5, i64 0 }, ptr %a53 - %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) - %t55 = icmp ne i32 %t54, 0 - br i1 %t55, label %then9911, label %endif9913 -then9911: - %t56 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t56, ptr %a57 - store { ptr, i64, i64 } { ptr @.str.6678, i64 7, i64 0 }, ptr %a59 - %t60 = call i32 @finch_str_starts(ptr %a57, ptr %a59) - %t61 = icmp ne i32 %t60, 0 + br label %logic.rend9913 +logic.rend9913: + br label %logic.end9912 +logic.end9912: + %t42 = phi i1 [ true, %logic.from9910 ], [ %t41, %logic.rend9913 ] br label %logic.from9914 logic.from9914: - br i1 %t61, label %logic.end9916, label %logic.rhs9915 + br i1 %t42, label %logic.end9916, label %logic.rhs9915 logic.rhs9915: - %t62 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t62, ptr %a63 - store { ptr, i64, i64 } { ptr @.str.6680, i64 5, i64 0 }, ptr %a65 - %t66 = call i32 @finch_str_starts(ptr %a63, ptr %a65) - %t67 = icmp ne i32 %t66, 0 + %t43 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.6676, i64 11, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp ne i32 %t46, 0 br label %logic.rend9917 logic.rend9917: br label %logic.end9916 logic.end9916: - %t68 = phi i1 [ true, %logic.from9914 ], [ %t67, %logic.rend9917 ] - br i1 %t68, label %then9918, label %else9919 + %t48 = phi i1 [ true, %logic.from9914 ], [ %t47, %logic.rend9917 ] + br i1 %t48, label %then9918, label %else9919 then9918: - %t69 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6681, i64 24, i64 0 }, ptr %a8 - store { ptr, i64, i64 } %t69, ptr %a70 - call void @finch_str_drop(ptr %a70) + %t49 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6677, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t49, ptr %a50 + call void @finch_str_drop(ptr %a50) br label %endif9920 else9919: + %t51 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t51, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6678, i64 5, i64 0 }, ptr %a53 + %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) + %t55 = icmp ne i32 %t54, 0 + br i1 %t55, label %then9921, label %endif9923 +then9921: + %t56 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.6680, i64 7, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_starts(ptr %a57, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.from9924 +logic.from9924: + br i1 %t61, label %logic.end9926, label %logic.rhs9925 +logic.rhs9925: + %t62 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6682, i64 5, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_starts(ptr %a63, ptr %a65) + %t67 = icmp ne i32 %t66, 0 + br label %logic.rend9927 +logic.rend9927: + br label %logic.end9926 +logic.end9926: + %t68 = phi i1 [ true, %logic.from9924 ], [ %t67, %logic.rend9927 ] + br i1 %t68, label %then9928, label %else9929 +then9928: + %t69 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6683, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_drop(ptr %a70) + br label %endif9930 +else9929: %t71 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6682, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6684, i64 25, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_drop(ptr %a72) + br label %endif9930 +endif9930: + br label %endif9923 +endif9923: br label %endif9920 endif9920: - br label %endif9913 -endif9913: - br label %endif9910 -endif9910: - br label %endif9899 -endif9899: - br label %endif9896 -endif9896: - br label %endif9893 -endif9893: + br label %endif9909 +endif9909: + br label %endif9906 +endif9906: + br label %endif9903 +endif9903: %t73 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t73, ptr %a74 - call void @finch_str_copy(ptr %a75, ptr %a74) - %t76 = load { ptr, i64, i64 }, ptr %a75 - %t77 = insertvalue %S.platform.Target zeroinitializer, { ptr, i64, i64 } %t76, 0 - store %S.platform.Target %t77, ptr %a78 - %t79 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t79, ptr %a80 - store { ptr, i64, i64 } { ptr @.str.6684, i64 7, i64 0 }, ptr %a82 - %t83 = call i64 @finch_str_find(ptr %a80, ptr %a82) - %t84 = icmp sge i64 %t83, 0 - br label %logic.from9921 -logic.from9921: - br i1 %t84, label %logic.end9923, label %logic.rhs9922 -logic.rhs9922: - %t85 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t85, ptr %a86 - store { ptr, i64, i64 } { ptr @.str.6686, i64 5, i64 0 }, ptr %a88 - %t89 = call i64 @finch_str_find(ptr %a86, ptr %a88) - %t90 = icmp sge i64 %t89, 0 - br label %logic.rend9924 -logic.rend9924: - br label %logic.end9923 -logic.end9923: - %t91 = phi i1 [ true, %logic.from9921 ], [ %t90, %logic.rend9924 ] - br label %logic.from9925 -logic.from9925: - br i1 %t91, label %logic.end9927, label %logic.rhs9926 -logic.rhs9926: + store { ptr, i64, i64 } { ptr @.str.6685, i64 22, i64 0 }, ptr %a75 + %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + br i1 %t77, label %then9931, label %endif9933 +then9931: + %t78 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6686, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif9933 +endif9933: + %t80 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t80, ptr %a81 + call void @finch_str_copy(ptr %a82, ptr %a81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = insertvalue %S.platform.Target zeroinitializer, { ptr, i64, i64 } %t83, 0 + store %S.platform.Target %t84, ptr %a85 + %t86 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.6688, i64 7, i64 0 }, ptr %a89 + %t90 = call i64 @finch_str_find(ptr %a87, ptr %a89) + %t91 = icmp sge i64 %t90, 0 + br label %logic.from9934 +logic.from9934: + br i1 %t91, label %logic.end9936, label %logic.rhs9935 +logic.rhs9935: %t92 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t92, ptr %a93 - store { ptr, i64, i64 } { ptr @.str.6688, i64 4, i64 0 }, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.6690, i64 5, i64 0 }, ptr %a95 %t96 = call i64 @finch_str_find(ptr %a93, ptr %a95) %t97 = icmp sge i64 %t96, 0 - br label %logic.rend9928 -logic.rend9928: - br label %logic.end9927 -logic.end9927: - %t98 = phi i1 [ true, %logic.from9925 ], [ %t97, %logic.rend9928 ] - br label %logic.from9929 -logic.from9929: - br i1 %t98, label %logic.end9931, label %logic.rhs9930 -logic.rhs9930: + br label %logic.rend9937 +logic.rend9937: + br label %logic.end9936 +logic.end9936: + %t98 = phi i1 [ true, %logic.from9934 ], [ %t97, %logic.rend9937 ] + br label %logic.from9938 +logic.from9938: + br i1 %t98, label %logic.end9940, label %logic.rhs9939 +logic.rhs9939: %t99 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t99, ptr %a100 - store { ptr, i64, i64 } { ptr @.str.6690, i64 5, i64 0 }, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.6692, i64 4, i64 0 }, ptr %a102 %t103 = call i64 @finch_str_find(ptr %a100, ptr %a102) %t104 = icmp sge i64 %t103, 0 - br label %logic.rend9932 -logic.rend9932: - br label %logic.end9931 -logic.end9931: - %t105 = phi i1 [ true, %logic.from9929 ], [ %t104, %logic.rend9932 ] - %t106 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - store i1 %t105, ptr %t106 - %t107 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t107, ptr %a108 - store { ptr, i64, i64 } { ptr @.str.6692, i64 4, i64 0 }, ptr %a110 - %t111 = call i64 @finch_str_find(ptr %a108, ptr %a110) - %t112 = icmp sge i64 %t111, 0 - %t113 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 2 + br label %logic.rend9941 +logic.rend9941: + br label %logic.end9940 +logic.end9940: + %t105 = phi i1 [ true, %logic.from9938 ], [ %t104, %logic.rend9941 ] + br label %logic.from9942 +logic.from9942: + br i1 %t105, label %logic.end9944, label %logic.rhs9943 +logic.rhs9943: + %t106 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.6694, i64 5, i64 0 }, ptr %a109 + %t110 = call i64 @finch_str_find(ptr %a107, ptr %a109) + %t111 = icmp sge i64 %t110, 0 + br label %logic.rend9945 +logic.rend9945: + br label %logic.end9944 +logic.end9944: + %t112 = phi i1 [ true, %logic.from9942 ], [ %t111, %logic.rend9945 ] + %t113 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 store i1 %t112, ptr %t113 %t114 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t114, ptr %a115 - store { ptr, i64, i64 } { ptr @.str.6694, i64 5, i64 0 }, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.6696, i64 4, i64 0 }, ptr %a117 %t118 = call i64 @finch_str_find(ptr %a115, ptr %a117) %t119 = icmp sge i64 %t118, 0 - br label %logic.from9933 -logic.from9933: - br i1 %t119, label %logic.end9935, label %logic.rhs9934 -logic.rhs9934: - %t120 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t120, ptr %a121 - store { ptr, i64, i64 } { ptr @.str.6696, i64 6, i64 0 }, ptr %a123 - %t124 = call i64 @finch_str_find(ptr %a121, ptr %a123) - %t125 = icmp sge i64 %t124, 0 - br label %logic.rend9936 -logic.rend9936: - br label %logic.end9935 -logic.end9935: - %t126 = phi i1 [ true, %logic.from9933 ], [ %t125, %logic.rend9936 ] - br label %logic.from9937 -logic.from9937: - br i1 %t126, label %logic.end9939, label %logic.rhs9938 -logic.rhs9938: + %t120 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 2 + store i1 %t119, ptr %t120 + %t121 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.6698, i64 5, i64 0 }, ptr %a124 + %t125 = call i64 @finch_str_find(ptr %a122, ptr %a124) + %t126 = icmp sge i64 %t125, 0 + br label %logic.from9946 +logic.from9946: + br i1 %t126, label %logic.end9948, label %logic.rhs9947 +logic.rhs9947: %t127 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t127, ptr %a128 - store { ptr, i64, i64 } { ptr @.str.6698, i64 5, i64 0 }, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6700, i64 6, i64 0 }, ptr %a130 %t131 = call i64 @finch_str_find(ptr %a128, ptr %a130) %t132 = icmp sge i64 %t131, 0 - br label %logic.rend9940 -logic.rend9940: - br label %logic.end9939 -logic.end9939: - %t133 = phi i1 [ true, %logic.from9937 ], [ %t132, %logic.rend9940 ] - %t134 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 3 - store i1 %t133, ptr %t134 - %t135 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t135, ptr %a136 - store { ptr, i64, i64 } { ptr @.str.6700, i64 7, i64 0 }, ptr %a138 - %t139 = call i32 @finch_str_starts(ptr %a136, ptr %a138) - %t140 = icmp ne i32 %t139, 0 - br label %logic.from9941 -logic.from9941: - br i1 %t140, label %logic.end9943, label %logic.rhs9942 -logic.rhs9942: - %t141 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t141, ptr %a142 - store { ptr, i64, i64 } { ptr @.str.6702, i64 5, i64 0 }, ptr %a144 - %t145 = call i32 @finch_str_starts(ptr %a142, ptr %a144) - %t146 = icmp ne i32 %t145, 0 - br label %logic.rend9944 -logic.rend9944: - br label %logic.end9943 -logic.end9943: - %t147 = phi i1 [ true, %logic.from9941 ], [ %t146, %logic.rend9944 ] - %t148 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 4 - store i1 %t147, ptr %t148 - %t149 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t149, ptr %a150 - store { ptr, i64, i64 } { ptr @.str.6704, i64 7, i64 0 }, ptr %a152 - %t153 = call i32 @finch_str_starts(ptr %a150, ptr %a152) - %t154 = icmp ne i32 %t153, 0 - br label %logic.from9945 -logic.from9945: - br i1 %t154, label %logic.end9947, label %logic.rhs9946 -logic.rhs9946: - %t155 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t155, ptr %a156 - store { ptr, i64, i64 } { ptr @.str.6706, i64 5, i64 0 }, ptr %a158 - %t159 = call i32 @finch_str_starts(ptr %a156, ptr %a158) - %t160 = icmp ne i32 %t159, 0 - br label %logic.rend9948 -logic.rend9948: - br label %logic.end9947 -logic.end9947: - %t161 = phi i1 [ true, %logic.from9945 ], [ %t160, %logic.rend9948 ] - store i1 %t161, ptr %a162 - %t163 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t163, ptr %a164 - store { ptr, i64, i64 } { ptr @.str.6708, i64 5, i64 0 }, ptr %a166 - %t167 = call i64 @finch_str_find(ptr %a164, ptr %a166) - %t168 = icmp sge i64 %t167, 0 - br label %logic.from9949 -logic.from9949: - br i1 %t168, label %logic.end9951, label %logic.rhs9950 -logic.rhs9950: - %t169 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t169, ptr %a170 - store { ptr, i64, i64 } { ptr @.str.6710, i64 6, i64 0 }, ptr %a172 - %t173 = call i64 @finch_str_find(ptr %a170, ptr %a172) - %t174 = icmp sge i64 %t173, 0 - br label %logic.rend9952 -logic.rend9952: - br label %logic.end9951 -logic.end9951: - %t175 = phi i1 [ true, %logic.from9949 ], [ %t174, %logic.rend9952 ] - store i1 %t175, ptr %a176 - %t177 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - %t178 = load i1, ptr %t177 - br label %logic.from9953 -logic.from9953: - br i1 %t178, label %logic.end9955, label %logic.rhs9954 -logic.rhs9954: - %t179 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 3 - %t180 = load i1, ptr %t179 - %t181 = load i1, ptr %a176 - %t182 = icmp ne i1 %t180, %t181 - br label %logic.rend9956 -logic.rend9956: - br label %logic.end9955 -logic.end9955: - %t183 = phi i1 [ true, %logic.from9953 ], [ %t182, %logic.rend9956 ] - br label %logic.from9957 -logic.from9957: - br i1 %t183, label %logic.end9959, label %logic.rhs9958 -logic.rhs9958: - %t184 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 4 - %t185 = load i1, ptr %t184 - %t186 = load i1, ptr %a162 - %t187 = icmp ne i1 %t185, %t186 - br label %logic.rend9960 -logic.rend9960: - br label %logic.end9959 -logic.end9959: - %t188 = phi i1 [ true, %logic.from9957 ], [ %t187, %logic.rend9960 ] - %t189 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - store i1 %t188, ptr %t189 - %t190 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 6 - %t191 = load { ptr, i64, i64 }, ptr %t190 - store { ptr, i64, i64 } { ptr @.str.6711, i64 0, i64 0 }, ptr %t190 - store { ptr, i64, i64 } %t191, ptr %a192 - call void @finch_str_drop(ptr %a192) - %t193 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - %t194 = load i1, ptr %t193 - br i1 %t194, label %then9961, label %endif9963 -then9961: - %t195 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 6 - %t196 = load { ptr, i64, i64 }, ptr %t195 - store { ptr, i64, i64 } { ptr @.str.6712, i64 4, i64 0 }, ptr %t195 - store { ptr, i64, i64 } %t196, ptr %a197 - call void @finch_str_drop(ptr %a197) - br label %endif9963 -endif9963: - %t198 = extractvalue { ptr, i64, i64 } { ptr @.str.6713, i64 8, i64 0 }, 0 - %t199 = icmp eq ptr %t198, null - %t200 = select i1 %t199, ptr @.str.6714, ptr %t198 - %t201 = call ptr @getenv(ptr %t200) - store { ptr, i64, i64 } zeroinitializer, ptr %a202 - call void @finch_str_from_c(ptr %a202, ptr %t201) - %t203 = load { ptr, i64, i64 }, ptr %a202 - store { ptr, i64, i64 } %t203, ptr %a204 - call void @finch_str_copy(ptr %a205, ptr %a204) - %t206 = load { ptr, i64, i64 }, ptr %a205 - store { ptr, i64, i64 } %t206, ptr %a207 - %t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %a207, i32 0, i32 1 - %t209 = load i64, ptr %t208 - %t210 = icmp sgt i64 %t209, 0 - br i1 %t210, label %then9964, label %else9965 -then9964: - %t211 = load { ptr, i64, i64 }, ptr %a207 - %t212 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - store { ptr, i64, i64 } %t211, ptr %a213 - call void @finch_str_copy(ptr %a214, ptr %a213) - %t215 = load { ptr, i64, i64 }, ptr %a214 - %t216 = load { ptr, i64, i64 }, ptr %t212 - store { ptr, i64, i64 } %t215, ptr %t212 - store { ptr, i64, i64 } %t216, ptr %a217 - call void @finch_str_drop(ptr %a217) - br label %endif9966 -else9965: - %t218 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - %t219 = load i1, ptr %t218 - br label %logic.from9967 -logic.from9967: - br i1 %t219, label %logic.rhs9968, label %logic.end9969 -logic.rhs9968: - %t220 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - %t221 = load i1, ptr %t220 - br label %logic.rend9970 -logic.rend9970: - br label %logic.end9969 -logic.end9969: - %t222 = phi i1 [ false, %logic.from9967 ], [ %t221, %logic.rend9970 ] - br i1 %t222, label %then9971, label %else9972 -then9971: - %t223 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t224 = load { ptr, i64, i64 }, ptr %t223 - store { ptr, i64, i64 } { ptr @.str.6715, i64 22, i64 0 }, ptr %t223 - store { ptr, i64, i64 } %t224, ptr %a225 - call void @finch_str_drop(ptr %a225) - br label %endif9973 -else9972: - %t226 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - %t227 = load i1, ptr %t226 + br label %logic.rend9949 +logic.rend9949: + br label %logic.end9948 +logic.end9948: + %t133 = phi i1 [ true, %logic.from9946 ], [ %t132, %logic.rend9949 ] + br label %logic.from9950 +logic.from9950: + br i1 %t133, label %logic.end9952, label %logic.rhs9951 +logic.rhs9951: + %t134 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t134, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.6702, i64 5, i64 0 }, ptr %a137 + %t138 = call i64 @finch_str_find(ptr %a135, ptr %a137) + %t139 = icmp sge i64 %t138, 0 + br label %logic.rend9953 +logic.rend9953: + br label %logic.end9952 +logic.end9952: + %t140 = phi i1 [ true, %logic.from9950 ], [ %t139, %logic.rend9953 ] + %t141 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + store i1 %t140, ptr %t141 + %t142 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.6704, i64 7, i64 0 }, ptr %a145 + %t146 = call i32 @finch_str_starts(ptr %a143, ptr %a145) + %t147 = icmp ne i32 %t146, 0 + br label %logic.from9954 +logic.from9954: + br i1 %t147, label %logic.end9956, label %logic.rhs9955 +logic.rhs9955: + %t148 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.6706, i64 5, i64 0 }, ptr %a151 + %t152 = call i32 @finch_str_starts(ptr %a149, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + br label %logic.rend9957 +logic.rend9957: + br label %logic.end9956 +logic.end9956: + %t154 = phi i1 [ true, %logic.from9954 ], [ %t153, %logic.rend9957 ] + %t155 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + store i1 %t154, ptr %t155 + %t156 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t156, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.6708, i64 7, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_starts(ptr %a157, ptr %a159) + %t161 = icmp ne i32 %t160, 0 + br label %logic.from9958 +logic.from9958: + br i1 %t161, label %logic.end9960, label %logic.rhs9959 +logic.rhs9959: + %t162 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t162, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.6710, i64 5, i64 0 }, ptr %a165 + %t166 = call i32 @finch_str_starts(ptr %a163, ptr %a165) + %t167 = icmp ne i32 %t166, 0 + br label %logic.rend9961 +logic.rend9961: + br label %logic.end9960 +logic.end9960: + %t168 = phi i1 [ true, %logic.from9958 ], [ %t167, %logic.rend9961 ] + store i1 %t168, ptr %a169 + %t170 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.6712, i64 5, i64 0 }, ptr %a173 + %t174 = call i64 @finch_str_find(ptr %a171, ptr %a173) + %t175 = icmp sge i64 %t174, 0 + br label %logic.from9962 +logic.from9962: + br i1 %t175, label %logic.end9964, label %logic.rhs9963 +logic.rhs9963: + %t176 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.6714, i64 6, i64 0 }, ptr %a179 + %t180 = call i64 @finch_str_find(ptr %a177, ptr %a179) + %t181 = icmp sge i64 %t180, 0 + br label %logic.rend9965 +logic.rend9965: + br label %logic.end9964 +logic.end9964: + %t182 = phi i1 [ true, %logic.from9962 ], [ %t181, %logic.rend9965 ] + store i1 %t182, ptr %a183 + %t184 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } { ptr @.str.6716, i64 7, i64 0 }, ptr %a187 + %t188 = call i64 @finch_str_find(ptr %a185, ptr %a187) + %t189 = icmp sge i64 %t188, 0 + br label %logic.from9966 +logic.from9966: + br i1 %t189, label %logic.end9968, label %logic.rhs9967 +logic.rhs9967: + %t190 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t190, ptr %a191 + store { ptr, i64, i64 } { ptr @.str.6718, i64 5, i64 0 }, ptr %a193 + %t194 = call i64 @finch_str_find(ptr %a191, ptr %a193) + %t195 = icmp sge i64 %t194, 0 + br label %logic.rend9969 +logic.rend9969: + br label %logic.end9968 +logic.end9968: + %t196 = phi i1 [ true, %logic.from9966 ], [ %t195, %logic.rend9969 ] + br label %logic.from9970 +logic.from9970: + br i1 %t196, label %logic.end9972, label %logic.rhs9971 +logic.rhs9971: + %t197 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t197, ptr %a198 + store { ptr, i64, i64 } { ptr @.str.6720, i64 4, i64 0 }, ptr %a200 + %t201 = call i64 @finch_str_find(ptr %a198, ptr %a200) + %t202 = icmp sge i64 %t201, 0 + br label %logic.rend9973 +logic.rend9973: + br label %logic.end9972 +logic.end9972: + %t203 = phi i1 [ true, %logic.from9970 ], [ %t202, %logic.rend9973 ] + store i1 %t203, ptr %a204 + %t205 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t206 = load i1, ptr %t205 + %t207 = load i1, ptr %a204 + %t208 = icmp ne i1 %t206, %t207 br label %logic.from9974 logic.from9974: - br i1 %t227, label %logic.rhs9975, label %logic.end9976 + br i1 %t208, label %logic.end9976, label %logic.rhs9975 logic.rhs9975: - %t228 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 4 - %t229 = load i1, ptr %t228 + %t209 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t210 = load i1, ptr %t209 + %t211 = load i1, ptr %a183 + %t212 = icmp ne i1 %t210, %t211 br label %logic.rend9977 logic.rend9977: br label %logic.end9976 logic.end9976: - %t230 = phi i1 [ false, %logic.from9974 ], [ %t229, %logic.rend9977 ] + %t213 = phi i1 [ true, %logic.from9974 ], [ %t212, %logic.rend9977 ] br label %logic.from9978 logic.from9978: - br i1 %t230, label %logic.rhs9979, label %logic.end9980 + br i1 %t213, label %logic.end9980, label %logic.rhs9979 logic.rhs9979: - %t231 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 3 - %t232 = load i1, ptr %t231 - %t233 = xor i1 %t232, true + %t214 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t215 = load i1, ptr %t214 + %t216 = load i1, ptr %a169 + %t217 = icmp ne i1 %t215, %t216 br label %logic.rend9981 logic.rend9981: br label %logic.end9980 logic.end9980: - %t234 = phi i1 [ false, %logic.from9978 ], [ %t233, %logic.rend9981 ] - br i1 %t234, label %then9982, label %else9983 + %t218 = phi i1 [ true, %logic.from9978 ], [ %t217, %logic.rend9981 ] + %t219 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + store i1 %t218, ptr %t219 + %t220 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t221 = load { ptr, i64, i64 }, ptr %t220 + store { ptr, i64, i64 } { ptr @.str.6721, i64 0, i64 0 }, ptr %t220 + store { ptr, i64, i64 } %t221, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t224 = load i1, ptr %t223 + br i1 %t224, label %then9982, label %endif9984 then9982: - %t235 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t236 = load { ptr, i64, i64 }, ptr %t235 - store { ptr, i64, i64 } { ptr @.str.6716, i64 21, i64 0 }, ptr %t235 - store { ptr, i64, i64 } %t236, ptr %a237 - call void @finch_str_drop(ptr %a237) + %t225 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t226 = load { ptr, i64, i64 }, ptr %t225 + store { ptr, i64, i64 } { ptr @.str.6722, i64 4, i64 0 }, ptr %t225 + store { ptr, i64, i64 } %t226, ptr %a227 + call void @finch_str_drop(ptr %a227) br label %endif9984 -else9983: - %t238 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - %t239 = load i1, ptr %t238 - br i1 %t239, label %then9985, label %else9986 +endif9984: + %t228 = extractvalue { ptr, i64, i64 } { ptr @.str.6723, i64 8, i64 0 }, 0 + %t229 = icmp eq ptr %t228, null + %t230 = select i1 %t229, ptr @.str.6724, ptr %t228 + %t231 = call ptr @getenv(ptr %t230) + store { ptr, i64, i64 } zeroinitializer, ptr %a232 + call void @finch_str_from_c(ptr %a232, ptr %t231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t233, ptr %a234 + call void @finch_str_copy(ptr %a235, ptr %a234) + %t236 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t236, ptr %a237 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %a237, i32 0, i32 1 + %t239 = load i64, ptr %t238 + %t240 = icmp sgt i64 %t239, 0 + br i1 %t240, label %then9985, label %else9986 then9985: - %t240 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6717, i64 15, i64 0 }, ptr %a242 - store { ptr, i64, i64 } %t240, ptr %a243 - call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) - %t244 = load { ptr, i64, i64 }, ptr %a241 - %t245 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t246 = load { ptr, i64, i64 }, ptr %t245 - store { ptr, i64, i64 } %t244, ptr %t245 + %t241 = load { ptr, i64, i64 }, ptr %a237 + %t242 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + store { ptr, i64, i64 } %t241, ptr %a243 + call void @finch_str_copy(ptr %a244, ptr %a243) + %t245 = load { ptr, i64, i64 }, ptr %a244 + %t246 = load { ptr, i64, i64 }, ptr %t242 + store { ptr, i64, i64 } %t245, ptr %t242 store { ptr, i64, i64 } %t246, ptr %a247 call void @finch_str_drop(ptr %a247) br label %endif9987 else9986: - %t248 = call { ptr, i64, i64 } @finch.host.pathSeparator() - store { ptr, i64, i64 } %t248, ptr %a249 - store { ptr, i64, i64 } { ptr @.str.6718, i64 1, i64 0 }, ptr %a250 - %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) - %t252 = icmp ne i32 %t251, 0 - store { ptr, i64, i64 } %t248, ptr %a253 - call void @finch_str_drop(ptr %a253) - br i1 %t252, label %then9988, label %else9989 -then9988: - %t254 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t255 = load { ptr, i64, i64 }, ptr %t254 - store { ptr, i64, i64 } { ptr @.str.6719, i64 5, i64 0 }, ptr %t254 - store { ptr, i64, i64 } %t255, ptr %a256 - call void @finch_str_drop(ptr %a256) - br label %endif9990 -else9989: - %t257 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t258 = load { ptr, i64, i64 }, ptr %t257 - store { ptr, i64, i64 } { ptr @.str.6720, i64 2, i64 0 }, ptr %t257 - store { ptr, i64, i64 } %t258, ptr %a259 - call void @finch_str_drop(ptr %a259) - br label %endif9990 -endif9990: - br label %endif9987 -endif9987: - br label %endif9984 -endif9984: - br label %endif9973 -endif9973: - br label %endif9966 -endif9966: - %t260 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - %t261 = load i1, ptr %t260 - br label %logic.from9991 -logic.from9991: - br i1 %t261, label %logic.rhs9992, label %logic.end9993 -logic.rhs9992: - %t262 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - %t263 = load i1, ptr %t262 - br label %logic.rend9994 -logic.rend9994: - br label %logic.end9993 -logic.end9993: - %t264 = phi i1 [ false, %logic.from9991 ], [ %t263, %logic.rend9994 ] - br i1 %t264, label %then9995, label %else9996 -then9995: - %t265 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 8 + %t248 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t249 = load i1, ptr %t248 + br label %logic.from9988 +logic.from9988: + br i1 %t249, label %logic.rhs9989, label %logic.end9990 +logic.rhs9989: + %t250 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t251 = load i1, ptr %t250 + br label %logic.rend9991 +logic.rend9991: + br label %logic.end9990 +logic.end9990: + %t252 = phi i1 [ false, %logic.from9988 ], [ %t251, %logic.rend9991 ] + br i1 %t252, label %then9992, label %else9993 +then9992: + %t253 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t254 = load { ptr, i64, i64 }, ptr %t253 + store { ptr, i64, i64 } { ptr @.str.6725, i64 22, i64 0 }, ptr %t253 + store { ptr, i64, i64 } %t254, ptr %a255 + call void @finch_str_drop(ptr %a255) + br label %endif9994 +else9993: + %t256 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t257 = load i1, ptr %t256 + br label %logic.from9995 +logic.from9995: + br i1 %t257, label %logic.rhs9996, label %logic.end9997 +logic.rhs9996: + %t258 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t259 = load i1, ptr %t258 + br label %logic.rend9998 +logic.rend9998: + br label %logic.end9997 +logic.end9997: + %t260 = phi i1 [ false, %logic.from9995 ], [ %t259, %logic.rend9998 ] + br label %logic.from9999 +logic.from9999: + br i1 %t260, label %logic.rhs10000, label %logic.end10001 +logic.rhs10000: + %t261 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t262 = load i1, ptr %t261 + %t263 = xor i1 %t262, true + br label %logic.rend10002 +logic.rend10002: + br label %logic.end10001 +logic.end10001: + %t264 = phi i1 [ false, %logic.from9999 ], [ %t263, %logic.rend10002 ] + br i1 %t264, label %then10003, label %else10004 +then10003: + %t265 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 %t266 = load { ptr, i64, i64 }, ptr %t265 - store { ptr, i64, i64 } { ptr @.str.6721, i64 5, i64 0 }, ptr %t265 + store { ptr, i64, i64 } { ptr @.str.6726, i64 21, i64 0 }, ptr %t265 store { ptr, i64, i64 } %t266, ptr %a267 call void @finch_str_drop(ptr %a267) - br label %endif9997 -else9996: - %t268 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 + br label %endif10005 +else10004: + %t268 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 %t269 = load i1, ptr %t268 - br label %logic.from9998 -logic.from9998: - br i1 %t269, label %logic.rhs9999, label %logic.end10000 -logic.rhs9999: - %t270 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 4 - %t271 = load i1, ptr %t270 - br label %logic.rend10001 -logic.rend10001: - br label %logic.end10000 -logic.end10000: - %t272 = phi i1 [ false, %logic.from9998 ], [ %t271, %logic.rend10001 ] - br label %logic.from10002 -logic.from10002: - br i1 %t272, label %logic.rhs10003, label %logic.end10004 -logic.rhs10003: - %t273 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 3 - %t274 = load i1, ptr %t273 - %t275 = xor i1 %t274, true - br label %logic.rend10005 -logic.rend10005: - br label %logic.end10004 -logic.end10004: - %t276 = phi i1 [ false, %logic.from10002 ], [ %t275, %logic.rend10005 ] - br i1 %t276, label %then10006, label %endif10008 + br i1 %t269, label %then10006, label %else10007 then10006: - %t277 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 8 - %t278 = load { ptr, i64, i64 }, ptr %t277 - store { ptr, i64, i64 } { ptr @.str.6722, i64 13, i64 0 }, ptr %t277 + %t270 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6727, i64 15, i64 0 }, ptr %a272 + store { ptr, i64, i64 } %t270, ptr %a273 + call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a271 + %t275 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t276 = load { ptr, i64, i64 }, ptr %t275 + store { ptr, i64, i64 } %t274, ptr %t275 + store { ptr, i64, i64 } %t276, ptr %a277 + call void @finch_str_drop(ptr %a277) + br label %endif10008 +else10007: + %t278 = call { ptr, i64, i64 } @finch.host.pathSeparator() store { ptr, i64, i64 } %t278, ptr %a279 - call void @finch_str_drop(ptr %a279) + store { ptr, i64, i64 } { ptr @.str.6728, i64 1, i64 0 }, ptr %a280 + %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) + %t282 = icmp ne i32 %t281, 0 + store { ptr, i64, i64 } %t278, ptr %a283 + call void @finch_str_drop(ptr %a283) + br i1 %t282, label %then10009, label %else10010 +then10009: + %t284 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } { ptr @.str.6729, i64 5, i64 0 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + br label %endif10011 +else10010: + %t287 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t288 = load { ptr, i64, i64 }, ptr %t287 + store { ptr, i64, i64 } { ptr @.str.6730, i64 2, i64 0 }, ptr %t287 + store { ptr, i64, i64 } %t288, ptr %a289 + call void @finch_str_drop(ptr %a289) + br label %endif10011 +endif10011: br label %endif10008 endif10008: - br label %endif9997 -endif9997: - %t280 = load %S.platform.Target, ptr %a78 - call void @finch_str_drop(ptr %a207) + br label %endif10005 +endif10005: + br label %endif9994 +endif9994: + br label %endif9987 +endif9987: + %t290 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t291 = load i1, ptr %t290 + br label %logic.from10012 +logic.from10012: + br i1 %t291, label %logic.rhs10013, label %logic.end10014 +logic.rhs10013: + %t292 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t293 = load i1, ptr %t292 + br label %logic.rend10015 +logic.rend10015: + br label %logic.end10014 +logic.end10014: + %t294 = phi i1 [ false, %logic.from10012 ], [ %t293, %logic.rend10015 ] + br i1 %t294, label %then10016, label %else10017 +then10016: + %t295 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } { ptr @.str.6731, i64 5, i64 0 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_drop(ptr %a297) + br label %endif10018 +else10017: + %t298 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t299 = load i1, ptr %t298 + br label %logic.from10019 +logic.from10019: + br i1 %t299, label %logic.rhs10020, label %logic.end10021 +logic.rhs10020: + %t300 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t301 = load i1, ptr %t300 + br label %logic.rend10022 +logic.rend10022: + br label %logic.end10021 +logic.end10021: + %t302 = phi i1 [ false, %logic.from10019 ], [ %t301, %logic.rend10022 ] + br label %logic.from10023 +logic.from10023: + br i1 %t302, label %logic.rhs10024, label %logic.end10025 +logic.rhs10024: + %t303 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t304 = load i1, ptr %t303 + %t305 = xor i1 %t304, true + br label %logic.rend10026 +logic.rend10026: + br label %logic.end10025 +logic.end10025: + %t306 = phi i1 [ false, %logic.from10023 ], [ %t305, %logic.rend10026 ] + br i1 %t306, label %then10027, label %endif10029 +then10027: + %t307 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t308 = load { ptr, i64, i64 }, ptr %t307 + store { ptr, i64, i64 } { ptr @.str.6732, i64 13, i64 0 }, ptr %t307 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10029 +endif10029: + br label %endif10018 +endif10018: + %t310 = load %S.platform.Target, ptr %a85 + call void @finch_str_drop(ptr %a237) call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a3) - ret %S.platform.Target %t280 + ret %S.platform.Target %t310 } define internal i1 @finch.platform.charIsSigned(%S.platform.Target %p0) { @@ -102782,28 +102901,28 @@ entry: %t2 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 4 %t3 = load i1, ptr %t2 %t4 = xor i1 %t3, true - br label %logic.from10009 -logic.from10009: - br i1 %t4, label %logic.end10011, label %logic.rhs10010 -logic.rhs10010: + br label %logic.from10030 +logic.from10030: + br i1 %t4, label %logic.end10032, label %logic.rhs10031 +logic.rhs10031: %t5 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 3 %t6 = load i1, ptr %t5 - br label %logic.rend10012 -logic.rend10012: - br label %logic.end10011 -logic.end10011: - %t7 = phi i1 [ true, %logic.from10009 ], [ %t6, %logic.rend10012 ] - br label %logic.from10013 -logic.from10013: - br i1 %t7, label %logic.end10015, label %logic.rhs10014 -logic.rhs10014: + br label %logic.rend10033 +logic.rend10033: + br label %logic.end10032 +logic.end10032: + %t7 = phi i1 [ true, %logic.from10030 ], [ %t6, %logic.rend10033 ] + br label %logic.from10034 +logic.from10034: + br i1 %t7, label %logic.end10036, label %logic.rhs10035 +logic.rhs10035: %t8 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 1 %t9 = load i1, ptr %t8 - br label %logic.rend10016 -logic.rend10016: - br label %logic.end10015 -logic.end10015: - %t10 = phi i1 [ true, %logic.from10013 ], [ %t9, %logic.rend10016 ] + br label %logic.rend10037 +logic.rend10037: + br label %logic.end10036 +logic.end10036: + %t10 = phi i1 [ true, %logic.from10034 ], [ %t9, %logic.rend10037 ] ret i1 %t10 } @@ -102822,14 +102941,14 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 store i32 2166136261, ptr %a2 store i64 0, ptr %a3 - br label %each.cond10017 -each.cond10017: + br label %each.cond10038 +each.cond10038: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body10018, label %each.end10020 -each.body10018: + br i1 %t7, label %each.body10039, label %each.end10041 +each.body10039: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds i8, ptr %t8, i64 %t6 %t10 = load i8, ptr %t9 @@ -102840,22 +102959,22 @@ each.body10018: %t15 = xor i32 %t12, %t14 %t16 = mul i32 %t15, 16777619 store i32 %t16, ptr %a2 - br label %each.step10019 -each.step10019: + br label %each.step10040 +each.step10040: %t17 = load i64, ptr %a3 %t18 = add i64 %t17, 1 store i64 %t18, ptr %a3 - br label %each.cond10017 -each.end10020: - store { ptr, i64, i64 } { ptr @.str.6723, i64 16, i64 0 }, ptr %a19 + br label %each.cond10038 +each.end10041: + store { ptr, i64, i64 } { ptr @.str.6733, i64 16, i64 0 }, ptr %a19 store { ptr, i64, i64 } zeroinitializer, ptr %a20 store i64 0, ptr %a21 - br label %for.cond10021 -for.cond10021: + br label %for.cond10042 +for.cond10042: %t22 = load i64, ptr %a21 %t23 = icmp slt i64 %t22, 8 - br i1 %t23, label %for.body10022, label %for.end10024 -for.body10022: + br i1 %t23, label %for.body10043, label %for.end10045 +for.body10043: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t25 = load i32, ptr %a2 %t26 = load i64, ptr %a21 @@ -102868,11 +102987,11 @@ for.body10022: %t33 = load { ptr, i64, i64 }, ptr %a19 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range10025, label %inrange10026 -range10025: - call void @finch_panic_index(ptr @.str.6724, i64 16, i64 %t32, i64 %t34) + br i1 %t35, label %range10046, label %inrange10047 +range10046: + call void @finch_panic_index(ptr @.str.6734, i64 16, i64 %t32, i64 %t34) unreachable -inrange10026: +inrange10047: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 @@ -102885,15 +103004,15 @@ inrange10026: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t24 - br label %for.step10023 -for.step10023: + br label %for.step10044 +for.step10044: %t45 = load i64, ptr %a21 %t46 = add i64 %t45, 1 store i64 %t46, ptr %a21 - br label %for.cond10021 -for.end10024: + br label %for.cond10042 +for.end10045: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6725, i64 0, i64 0 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.6735, i64 0, i64 0 }, ptr %a48 call void @finch_str_join(ptr %a49, ptr %a20, ptr %a48) %t50 = load { ptr, i64, i64 }, ptr %a49 call void @finch.drop.arr_str(ptr %a20) @@ -102980,37 +103099,37 @@ entry: store %S.platform.Target %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.6727, i64 10, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6737, i64 10, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_ends(ptr %a4, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br i1 %t8, label %then10027, label %endif10029 -then10027: + br i1 %t8, label %then10048, label %endif10050 +then10048: %t9 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t9, ptr %a10 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = sub i64 %t13, 10 - call void @finch_str_sub(ptr %a11, ptr %a10, i64 0, i64 %t14, ptr @.str.6729, i64 28) + call void @finch_str_sub(ptr %a11, ptr %a10, i64 0, i64 %t14, ptr @.str.6739, i64 28) %t15 = load { ptr, i64, i64 }, ptr %a11 %t16 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t15) store { ptr, i64, i64 } %t15, ptr %a17 call void @finch_str_drop(ptr %a17) - store { ptr, i64, i64 } { ptr @.str.6728, i64 11, i64 0 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6738, i64 11, i64 0 }, ptr %a19 store { ptr, i64, i64 } %t16, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t16, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a18 ret { ptr, i64, i64 } %t22 -endif10029: +endif10050: %t23 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t24 = load i1, ptr %t23 %t25 = xor i1 %t24, true - br i1 %t25, label %then10030, label %endif10032 -then10030: + br i1 %t25, label %then10051, label %endif10053 +then10051: %t26 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t26, ptr %a28 - store { ptr, i64, i64 } { ptr @.str.6730, i64 17, i64 0 }, ptr %a29 + store { ptr, i64, i64 } { ptr @.str.6740, i64 17, i64 0 }, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t26, ptr %a30 call void @finch_str_drop(ptr %a30) @@ -103027,7 +103146,7 @@ then10030: call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t40, ptr %a42 - store { ptr, i64, i64 } { ptr @.str.6731, i64 4, i64 0 }, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.6741, i64 4, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) @@ -103035,14 +103154,14 @@ then10030: store { ptr, i64, i64 } %t45, ptr %a46 %t47 = load { ptr, i64, i64 }, ptr %a1 %t48 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t47) - store { ptr, i64, i64 } { ptr @.str.6732, i64 18, i64 0 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6742, i64 18, i64 0 }, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t48, ptr %a52 call void @finch_str_drop(ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t53, ptr %a55 - store { ptr, i64, i64 } { ptr @.str.6733, i64 3, i64 0 }, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.6743, i64 3, i64 0 }, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) store { ptr, i64, i64 } %t53, ptr %a57 call void @finch_str_drop(ptr %a57) @@ -103058,7 +103177,7 @@ then10030: call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t66, ptr %a68 - store { ptr, i64, i64 } { ptr @.str.6734, i64 4, i64 0 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.6744, i64 4, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) @@ -103078,21 +103197,21 @@ then10030: store i64 %t79, ptr %a81 %t82 = load i64, ptr %a81 %t83 = icmp eq i64 %t82, 0 - br label %logic.from10033 -logic.from10033: - br i1 %t83, label %logic.rhs10034, label %logic.end10035 -logic.rhs10034: + br label %logic.from10054 +logic.from10054: + br i1 %t83, label %logic.rhs10055, label %logic.end10056 +logic.rhs10055: %t84 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t84, ptr %a85 %t86 = call i32 @finch_file_exists(ptr %a85) %t87 = icmp ne i32 %t86, 0 - br label %logic.rend10036 -logic.rend10036: - br label %logic.end10035 -logic.end10035: - %t88 = phi i1 [ false, %logic.from10033 ], [ %t87, %logic.rend10036 ] - br i1 %t88, label %then10037, label %endif10039 -then10037: + br label %logic.rend10057 +logic.rend10057: + br label %logic.end10056 +logic.end10056: + %t88 = phi i1 [ false, %logic.from10054 ], [ %t87, %logic.rend10057 ] + br i1 %t88, label %then10058, label %endif10060 +then10058: %t89 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } zeroinitializer, ptr %a91 @@ -103101,17 +103220,17 @@ then10037: %t94 = icmp eq i32 %t93, 0 %t95 = load { ptr, i64, i64 }, ptr %a92 %t96 = load { ptr, i64, i64 }, ptr %a91 - br i1 %t94, label %or.failed10040, label %or.ok10041 -or.failed10040: + br i1 %t94, label %or.failed10061, label %or.ok10062 +or.failed10061: store { ptr, i64, i64 } %t95, ptr %a97 call void @finch_str_drop(ptr %a97) - br label %or.bend10042 -or.bend10042: - br label %or.end10043 -or.ok10041: - br label %or.end10043 -or.end10043: - %t98 = phi { ptr, i64, i64 } [ { ptr @.str.6735, i64 0, i64 0 }, %or.bend10042 ], [ %t96, %or.ok10041 ] + br label %or.bend10063 +or.bend10063: + br label %or.end10064 +or.ok10062: + br label %or.end10064 +or.end10064: + %t98 = phi { ptr, i64, i64 } [ { ptr @.str.6745, i64 0, i64 0 }, %or.bend10063 ], [ %t96, %or.ok10062 ] store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_trim(ptr %a100, ptr %a99) %t101 = load { ptr, i64, i64 }, ptr %a100 @@ -103123,20 +103242,20 @@ or.end10043: %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %a103, i32 0, i32 1 %t106 = load i64, ptr %t105 %t107 = icmp sgt i64 %t106, 0 - br i1 %t107, label %then10044, label %endif10046 -then10044: + br i1 %t107, label %then10065, label %endif10067 +then10065: %t108 = load { ptr, i64, i64 }, ptr %a103 call void @finch_str_drop(ptr %a46) ret { ptr, i64, i64 } %t108 -endif10046: +endif10067: call void @finch_str_drop(ptr %a103) - br label %endif10039 -endif10039: + br label %endif10060 +endif10060: call void @finch_str_drop(ptr %a46) - br label %endif10032 -endif10032: + br label %endif10053 +endif10053: %t109 = load { ptr, i64, i64 }, ptr %a1 - store { ptr, i64, i64 } { ptr @.str.6737, i64 2, i64 0 }, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.6747, i64 2, i64 0 }, ptr %a111 store { ptr, i64, i64 } %t109, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 @@ -103180,22 +103299,22 @@ entry: store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6739, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.6749, i64 1, i64 0 }, ptr %a10 %t11 = call i64 @finch_str_find(ptr %a8, ptr %a10) store i64 %t11, ptr %a12 - br label %while.cond10047 -while.cond10047: + br label %while.cond10068 +while.cond10068: %t13 = load i64, ptr %a12 %t14 = icmp sge i64 %t13, 0 - br i1 %t14, label %while.body10048, label %while.end10049 -while.body10048: + br i1 %t14, label %while.body10069, label %while.end10070 +while.body10069: %t15 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t15, ptr %a16 %t18 = load i64, ptr %a12 %t19 = add i64 %t18, 1 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t21 = load i64, ptr %t20 - call void @finch_str_sub(ptr %a17, ptr %a16, i64 %t19, i64 %t21, ptr @.str.6740, i64 49) + call void @finch_str_sub(ptr %a17, ptr %a16, i64 %t19, i64 %t21, ptr @.str.6750, i64 49) %t22 = load { ptr, i64, i64 }, ptr %a17 %t23 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t22, ptr %a6 @@ -103203,126 +103322,126 @@ while.body10048: call void @finch_str_drop(ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t25, ptr %a26 - store { ptr, i64, i64 } { ptr @.str.6742, i64 1, i64 0 }, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.6752, i64 1, i64 0 }, ptr %a28 %t29 = call i64 @finch_str_find(ptr %a26, ptr %a28) store i64 %t29, ptr %a12 - br label %while.cond10047 -while.end10049: + br label %while.cond10068 +while.end10070: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t31 = load i64, ptr %t30 store i64 %t31, ptr %a32 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t34 = load i64, ptr %t33 store i64 0, ptr %a35 - br label %for.cond10050 -for.cond10050: + br label %for.cond10071 +for.cond10071: %t36 = load i64, ptr %a35 %t37 = icmp slt i64 %t36, %t34 - br i1 %t37, label %for.body10051, label %for.end10053 -for.body10051: + br i1 %t37, label %for.body10072, label %for.end10074 +for.body10072: %t38 = load i64, ptr %a35 %t39 = load { ptr, i64, i64 }, ptr %a6 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range10054, label %inrange10055 -range10054: - call void @finch_panic_index(ptr @.str.6743, i64 54, i64 %t38, i64 %t40) + br i1 %t41, label %range10075, label %inrange10076 +range10075: + call void @finch_panic_index(ptr @.str.6753, i64 54, i64 %t38, i64 %t40) unreachable -inrange10055: +inrange10076: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 %t44 = load i8, ptr %t43 %t45 = icmp eq i8 %t44, 46 - br i1 %t45, label %then10056, label %endif10058 -then10056: + br i1 %t45, label %then10077, label %endif10079 +then10077: %t46 = load i64, ptr %a35 store i64 %t46, ptr %a32 - br label %endif10058 -endif10058: - br label %for.step10052 -for.step10052: + br label %endif10079 +endif10079: + br label %for.step10073 +for.step10073: %t47 = load i64, ptr %a35 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a35 - br label %for.cond10050 -for.end10053: + br label %for.cond10071 +for.end10074: %t49 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t49, ptr %a50 %t52 = load i64, ptr %a32 - call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6744, i64 58) + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6754, i64 58) %t53 = load { ptr, i64, i64 }, ptr %a51 %t54 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t53, ptr %a6 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_drop(ptr %a55) - br label %while.cond10059 -while.cond10059: + br label %while.cond10080 +while.cond10080: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t57 = load i64, ptr %t56 %t58 = icmp sgt i64 %t57, 0 - br label %logic.from10062 -logic.from10062: - br i1 %t58, label %logic.rhs10063, label %logic.end10064 -logic.rhs10063: + br label %logic.from10083 +logic.from10083: + br i1 %t58, label %logic.rhs10084, label %logic.end10085 +logic.rhs10084: %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t60 = load i64, ptr %t59 %t61 = sub i64 %t60, 1 %t62 = load { ptr, i64, i64 }, ptr %a6 %t63 = extractvalue { ptr, i64, i64 } %t62, 1 %t64 = icmp uge i64 %t61, %t63 - br i1 %t64, label %range10065, label %inrange10066 -range10065: - call void @finch_panic_index(ptr @.str.6745, i64 59, i64 %t61, i64 %t63) + br i1 %t64, label %range10086, label %inrange10087 +range10086: + call void @finch_panic_index(ptr @.str.6755, i64 59, i64 %t61, i64 %t63) unreachable -inrange10066: +inrange10087: %t65 = extractvalue { ptr, i64, i64 } %t62, 0 %t66 = getelementptr inbounds i8, ptr %t65, i64 %t61 %t67 = load i8, ptr %t66 %t68 = icmp uge i8 %t67, 48 - br label %logic.rend10067 -logic.rend10067: - br label %logic.end10064 -logic.end10064: - %t69 = phi i1 [ false, %logic.from10062 ], [ %t68, %logic.rend10067 ] - br label %logic.from10068 -logic.from10068: - br i1 %t69, label %logic.rhs10069, label %logic.end10070 -logic.rhs10069: + br label %logic.rend10088 +logic.rend10088: + br label %logic.end10085 +logic.end10085: + %t69 = phi i1 [ false, %logic.from10083 ], [ %t68, %logic.rend10088 ] + br label %logic.from10089 +logic.from10089: + br i1 %t69, label %logic.rhs10090, label %logic.end10091 +logic.rhs10090: %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t71 = load i64, ptr %t70 %t72 = sub i64 %t71, 1 %t73 = load { ptr, i64, i64 }, ptr %a6 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 - br i1 %t75, label %range10071, label %inrange10072 -range10071: - call void @finch_panic_index(ptr @.str.6746, i64 59, i64 %t72, i64 %t74) + br i1 %t75, label %range10092, label %inrange10093 +range10092: + call void @finch_panic_index(ptr @.str.6756, i64 59, i64 %t72, i64 %t74) unreachable -inrange10072: +inrange10093: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds i8, ptr %t76, i64 %t72 %t78 = load i8, ptr %t77 %t79 = icmp ule i8 %t78, 57 - br label %logic.rend10073 -logic.rend10073: - br label %logic.end10070 -logic.end10070: - %t80 = phi i1 [ false, %logic.from10068 ], [ %t79, %logic.rend10073 ] - br i1 %t80, label %while.body10060, label %while.end10061 -while.body10060: + br label %logic.rend10094 +logic.rend10094: + br label %logic.end10091 +logic.end10091: + %t80 = phi i1 [ false, %logic.from10089 ], [ %t79, %logic.rend10094 ] + br i1 %t80, label %while.body10081, label %while.end10082 +while.body10081: %t81 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t81, ptr %a82 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t85 = load i64, ptr %t84 %t86 = sub i64 %t85, 1 - call void @finch_str_sub(ptr %a83, ptr %a82, i64 0, i64 %t86, ptr @.str.6747, i64 60) + call void @finch_str_sub(ptr %a83, ptr %a82, i64 0, i64 %t86, ptr @.str.6757, i64 60) %t87 = load { ptr, i64, i64 }, ptr %a83 %t88 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t87, ptr %a6 store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_drop(ptr %a89) - br label %while.cond10059 -while.end10061: + br label %while.cond10080 +while.end10082: %t90 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t90, ptr %a91 call void @finch_str_lower(ptr %a92, ptr %a91) @@ -103344,10 +103463,10 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp sgt i64 %t3, 0 - br label %logic.from10074 -logic.from10074: - br i1 %t4, label %logic.rhs10075, label %logic.end10076 -logic.rhs10075: + br label %logic.from10095 +logic.from10095: + br i1 %t4, label %logic.rhs10096, label %logic.end10097 +logic.rhs10096: %t5 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a1 @@ -103355,37 +103474,37 @@ logic.rhs10075: %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 - br label %find.cond10077 -find.cond10077: + br label %find.cond10098 +find.cond10098: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 - br i1 %t13, label %find.body10078, label %find.end10081 -find.body10078: + br i1 %t13, label %find.body10099, label %find.end10102 +find.body10099: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %find.hit10079, label %find.next10080 -find.hit10079: + br i1 %t19, label %find.hit10100, label %find.next10101 +find.hit10100: store i64 %t12, ptr %a8 - br label %find.end10081 -find.next10080: + br label %find.end10102 +find.next10101: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 - br label %find.cond10077 -find.end10081: + br label %find.cond10098 +find.end10102: %t21 = load i64, ptr %a8 %t22 = icmp sge i64 %t21, 0 %t23 = xor i1 %t22, true - br label %logic.rend10082 -logic.rend10082: - br label %logic.end10076 -logic.end10076: - %t24 = phi i1 [ false, %logic.from10074 ], [ %t23, %logic.rend10082 ] - br i1 %t24, label %then10083, label %endif10085 -then10083: + br label %logic.rend10103 +logic.rend10103: + br label %logic.end10097 +logic.end10097: + %t24 = phi i1 [ false, %logic.from10095 ], [ %t23, %logic.rend10103 ] + br i1 %t24, label %then10104, label %endif10106 +then10104: %t25 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %a1 @@ -103399,8 +103518,8 @@ then10083: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } %t30, ptr %t34 store i64 %t32, ptr %t26 - br label %endif10085 -endif10085: + br label %endif10106 +endif10106: ret void } @@ -103435,10 +103554,10 @@ entry: store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 - br i1 %t12, label %then10086, label %endif10088 -then10086: - ret { ptr, i64, i64 } { ptr @.str.6750, i64 0, i64 0 } -endif10088: + br i1 %t12, label %then10107, label %endif10109 +then10107: + ret { ptr, i64, i64 } { ptr @.str.6760, i64 0, i64 0 } +endif10109: %t13 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t13, ptr %a14 %t16 = load i64, ptr %a10 @@ -103447,31 +103566,31 @@ endif10088: %t19 = add i64 %t16, %t18 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t21 = load i64, ptr %t20 - call void @finch_str_sub(ptr %a15, ptr %a14, i64 %t19, i64 %t21, ptr @.str.6751, i64 81) + call void @finch_str_sub(ptr %a15, ptr %a14, i64 %t19, i64 %t21, ptr @.str.6761, i64 81) %t22 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t22, ptr %a23 store i64 0, ptr %a24 - br label %while.cond10089 -while.cond10089: + br label %while.cond10110 +while.cond10110: %t25 = load i64, ptr %a24 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = icmp slt i64 %t25, %t27 - br label %logic.from10092 -logic.from10092: - br i1 %t28, label %logic.rhs10093, label %logic.end10094 -logic.rhs10093: + br label %logic.from10113 +logic.from10113: + br i1 %t28, label %logic.rhs10114, label %logic.end10115 +logic.rhs10114: %t29 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t29, ptr %a30 %t32 = load i64, ptr %a24 %t33 = load { ptr, i64, i64 }, ptr %a23 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range10095, label %inrange10096 -range10095: - call void @finch_panic_index(ptr @.str.6753, i64 83, i64 %t32, i64 %t34) + br i1 %t35, label %range10116, label %inrange10117 +range10116: + call void @finch_panic_index(ptr @.str.6763, i64 83, i64 %t32, i64 %t34) unreachable -inrange10096: +inrange10117: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 @@ -103483,22 +103602,22 @@ inrange10096: store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = xor i1 %t43, true - br label %logic.rend10097 -logic.rend10097: - br label %logic.end10094 -logic.end10094: - %t46 = phi i1 [ false, %logic.from10092 ], [ %t45, %logic.rend10097 ] - br i1 %t46, label %while.body10090, label %while.end10091 -while.body10090: + br label %logic.rend10118 +logic.rend10118: + br label %logic.end10115 +logic.end10115: + %t46 = phi i1 [ false, %logic.from10113 ], [ %t45, %logic.rend10118 ] + br i1 %t46, label %while.body10111, label %while.end10112 +while.body10111: %t47 = load i64, ptr %a24 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a24 - br label %while.cond10089 -while.end10091: + br label %while.cond10110 +while.end10112: %t49 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t49, ptr %a50 %t52 = load i64, ptr %a24 - call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6754, i64 86) + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6764, i64 86) %t53 = load { ptr, i64, i64 }, ptr %a51 call void @finch_str_drop(ptr %a23) ret { ptr, i64, i64 } %t53 @@ -103519,19 +103638,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10201 -n.cond10201: + br label %n.cond10222 +n.cond10222: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10202, label %n.end10203 -n.body10202: + br i1 %t6, label %n.body10223, label %n.end10224 +n.body10223: %t7 = getelementptr inbounds %S.linker.Names, ptr %t1, i64 %t5 call void @finch.drop.S_linker_Names(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10201 -n.end10203: + br label %n.cond10222 +n.end10224: call void @finch_arr_free(ptr %a) ret void } @@ -103710,19 +103829,19 @@ entry: store %S.linker.Names zeroinitializer, ptr %a5 %t6 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t6, ptr %a7 - store { ptr, i64, i64 } { ptr @.str.6756, i64 1, i64 0 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6766, i64 1, i64 0 }, ptr %a9 call void @finch_str_split(ptr %a10, ptr %a7, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t11, ptr %a12 store i64 0, ptr %a13 - br label %each.cond10098 -each.cond10098: + br label %each.cond10119 +each.cond10119: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 - br i1 %t17, label %each.body10099, label %each.end10101 -each.body10099: + br i1 %t17, label %each.body10120, label %each.end10122 +each.body10120: %t18 = load ptr, ptr %a12 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 %t20 = load { ptr, i64, i64 }, ptr %t19 @@ -103734,113 +103853,113 @@ each.body10099: store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t27, ptr %a28 - store { ptr, i64, i64 } { ptr @.str.6759, i64 24, i64 0 }, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6769, i64 24, i64 0 }, ptr %a30 %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) %t32 = icmp sge i64 %t31, 0 - br i1 %t32, label %then10102, label %else10103 -then10102: + br i1 %t32, label %then10123, label %else10124 +then10123: %t33 = load { ptr, i64, i64 }, ptr %a26 - %t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6760, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6761, i64 1, i64 0 }) + %t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6770, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6771, i64 1, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t34) store { ptr, i64, i64 } %t34, ptr %a35 call void @finch_str_drop(ptr %a35) - br label %endif10104 -else10103: + br label %endif10125 +else10124: %t36 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t36, ptr %a37 - store { ptr, i64, i64 } { ptr @.str.6763, i64 18, i64 0 }, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.6773, i64 18, i64 0 }, ptr %a39 %t40 = call i64 @finch_str_find(ptr %a37, ptr %a39) %t41 = icmp sge i64 %t40, 0 - br i1 %t41, label %then10105, label %else10106 -then10105: + br i1 %t41, label %then10126, label %else10127 +then10126: %t42 = load { ptr, i64, i64 }, ptr %a26 - %t43 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t42, { ptr, i64, i64 } { ptr @.str.6764, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6765, i64 2, i64 0 }) + %t43 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t42, { ptr, i64, i64 } { ptr @.str.6774, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6775, i64 2, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t43) store { ptr, i64, i64 } %t43, ptr %a44 call void @finch_str_drop(ptr %a44) - br label %endif10107 -else10106: + br label %endif10128 +else10127: %t45 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t45, ptr %a46 - store { ptr, i64, i64 } { ptr @.str.6767, i64 27, i64 0 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.6777, i64 27, i64 0 }, ptr %a48 %t49 = call i64 @finch_str_find(ptr %a46, ptr %a48) %t50 = icmp sge i64 %t49, 0 - br i1 %t50, label %then10108, label %else10109 -then10108: + br i1 %t50, label %then10129, label %else10130 +then10129: %t51 = load { ptr, i64, i64 }, ptr %a26 - %t52 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t51, { ptr, i64, i64 } { ptr @.str.6768, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6769, i64 3, i64 0 }) + %t52 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t51, { ptr, i64, i64 } { ptr @.str.6778, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6779, i64 3, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t52) store { ptr, i64, i64 } %t52, ptr %a53 call void @finch_str_drop(ptr %a53) - br label %endif10110 -else10109: + br label %endif10131 +else10130: %t54 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t54, ptr %a55 - store { ptr, i64, i64 } { ptr @.str.6771, i64 14, i64 0 }, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.6781, i64 14, i64 0 }, ptr %a57 %t58 = call i64 @finch_str_find(ptr %a55, ptr %a57) %t59 = icmp sge i64 %t58, 0 - br i1 %t59, label %then10111, label %else10112 -then10111: + br i1 %t59, label %then10132, label %else10133 +then10132: %t60 = load { ptr, i64, i64 }, ptr %a26 - %t61 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t60, { ptr, i64, i64 } { ptr @.str.6772, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6773, i64 4, i64 0 }) + %t61 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t60, { ptr, i64, i64 } { ptr @.str.6782, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6783, i64 4, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t61) store { ptr, i64, i64 } %t61, ptr %a62 call void @finch_str_drop(ptr %a62) - br label %endif10113 -else10112: + br label %endif10134 +else10133: %t63 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t63, ptr %a64 - store { ptr, i64, i64 } { ptr @.str.6775, i64 24, i64 0 }, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.6785, i64 24, i64 0 }, ptr %a66 %t67 = call i64 @finch_str_find(ptr %a64, ptr %a66) %t68 = icmp sge i64 %t67, 0 - br i1 %t68, label %then10114, label %else10115 -then10114: + br i1 %t68, label %then10135, label %else10136 +then10135: %t69 = load { ptr, i64, i64 }, ptr %a26 - %t70 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t69, { ptr, i64, i64 } { ptr @.str.6776, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6777, i64 4, i64 0 }) + %t70 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t69, { ptr, i64, i64 } { ptr @.str.6786, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6787, i64 4, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t70) store { ptr, i64, i64 } %t70, ptr %a71 call void @finch_str_drop(ptr %a71) - br label %endif10116 -else10115: + br label %endif10137 +else10136: %t72 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t72, ptr %a73 - store { ptr, i64, i64 } { ptr @.str.6779, i64 13, i64 0 }, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.6789, i64 13, i64 0 }, ptr %a75 %t76 = call i64 @finch_str_find(ptr %a73, ptr %a75) %t77 = icmp sge i64 %t76, 0 - br i1 %t77, label %then10117, label %else10118 -then10117: + br i1 %t77, label %then10138, label %else10139 +then10138: %t78 = load { ptr, i64, i64 }, ptr %a26 - %t79 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.6780, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6781, i64 1, i64 0 }) + %t79 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.6790, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6791, i64 1, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t79) store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif10119 -else10118: + br label %endif10140 +else10139: %t81 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t81, ptr %a82 - store { ptr, i64, i64 } { ptr @.str.6783, i64 11, i64 0 }, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.6793, i64 11, i64 0 }, ptr %a84 %t85 = call i64 @finch_str_find(ptr %a82, ptr %a84) %t86 = icmp sge i64 %t85, 0 - br label %logic.from10120 -logic.from10120: - br i1 %t86, label %logic.rhs10121, label %logic.end10122 -logic.rhs10121: + br label %logic.from10141 +logic.from10141: + br i1 %t86, label %logic.rhs10142, label %logic.end10143 +logic.rhs10142: %t87 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t87, ptr %a88 - store { ptr, i64, i64 } { ptr @.str.6785, i64 9, i64 0 }, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.6795, i64 9, i64 0 }, ptr %a90 %t91 = call i64 @finch_str_find(ptr %a88, ptr %a90) %t92 = icmp sge i64 %t91, 0 - br label %logic.rend10123 -logic.rend10123: - br label %logic.end10122 -logic.end10122: - %t93 = phi i1 [ false, %logic.from10120 ], [ %t92, %logic.rend10123 ] - br i1 %t93, label %then10124, label %else10125 -then10124: + br label %logic.rend10144 +logic.rend10144: + br label %logic.end10143 +logic.end10143: + %t93 = phi i1 [ false, %logic.from10141 ], [ %t92, %logic.rend10144 ] + br i1 %t93, label %then10145, label %else10146 +then10145: %t94 = load { ptr, i64, i64 }, ptr %a26 - %t95 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t94, { ptr, i64, i64 } { ptr @.str.6786, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6787, i64 1, i64 0 }) + %t95 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t94, { ptr, i64, i64 } { ptr @.str.6796, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6797, i64 1, i64 0 }) store { ptr, i64, i64 } %t95, ptr %a97 - store { ptr, i64, i64 } { ptr @.str.6788, i64 10, i64 0 }, ptr %a98 + store { ptr, i64, i64 } { ptr @.str.6798, i64 10, i64 0 }, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) store { ptr, i64, i64 } %t95, ptr %a99 call void @finch_str_drop(ptr %a99) @@ -103848,154 +103967,154 @@ then10124: call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t100) store { ptr, i64, i64 } %t100, ptr %a101 call void @finch_str_drop(ptr %a101) - br label %endif10126 -else10125: + br label %endif10147 +else10146: %t102 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t102, ptr %a103 - store { ptr, i64, i64 } { ptr @.str.6790, i64 1, i64 0 }, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.6800, i64 1, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_starts(ptr %a103, ptr %a105) %t107 = icmp ne i32 %t106, 0 - br label %logic.from10127 -logic.from10127: - br i1 %t107, label %logic.rhs10128, label %logic.end10129 -logic.rhs10128: + br label %logic.from10148 +logic.from10148: + br i1 %t107, label %logic.rhs10149, label %logic.end10150 +logic.rhs10149: %t108 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t108, ptr %a109 - store { ptr, i64, i64 } { ptr @.str.6792, i64 19, i64 0 }, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.6802, i64 19, i64 0 }, ptr %a111 %t112 = call i64 @finch_str_find(ptr %a109, ptr %a111) %t113 = icmp sge i64 %t112, 0 - br label %logic.rend10130 -logic.rend10130: - br label %logic.end10129 -logic.end10129: - %t114 = phi i1 [ false, %logic.from10127 ], [ %t113, %logic.rend10130 ] - br i1 %t114, label %then10131, label %endif10133 -then10131: + br label %logic.rend10151 +logic.rend10151: + br label %logic.end10150 +logic.end10150: + %t114 = phi i1 [ false, %logic.from10148 ], [ %t113, %logic.rend10151 ] + br i1 %t114, label %then10152, label %endif10154 +then10152: %t115 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t115, ptr %a116 %t118 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t118, ptr %a119 - store { ptr, i64, i64 } { ptr @.str.6795, i64 19, i64 0 }, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.6805, i64 19, i64 0 }, ptr %a121 %t122 = call i64 @finch_str_find(ptr %a119, ptr %a121) - call void @finch_str_sub(ptr %a117, ptr %a116, i64 1, i64 %t122, ptr @.str.6793, i64 111) + call void @finch_str_sub(ptr %a117, ptr %a116, i64 1, i64 %t122, ptr @.str.6803, i64 111) %t123 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t123, ptr %a124 %t125 = getelementptr inbounds %S.platform.Target, ptr %a3, i32 0, i32 3 %t126 = load i1, ptr %t125 - br label %logic.from10134 -logic.from10134: - br i1 %t126, label %logic.rhs10135, label %logic.end10136 -logic.rhs10135: + br label %logic.from10155 +logic.from10155: + br i1 %t126, label %logic.rhs10156, label %logic.end10157 +logic.rhs10156: %t127 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t127, ptr %a128 - store { ptr, i64, i64 } { ptr @.str.6797, i64 1, i64 0 }, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6807, i64 1, i64 0 }, ptr %a130 %t131 = call i32 @finch_str_starts(ptr %a128, ptr %a130) %t132 = icmp ne i32 %t131, 0 - br label %logic.rend10137 -logic.rend10137: - br label %logic.end10136 -logic.end10136: - %t133 = phi i1 [ false, %logic.from10134 ], [ %t132, %logic.rend10137 ] - br i1 %t133, label %then10138, label %endif10140 -then10138: + br label %logic.rend10158 +logic.rend10158: + br label %logic.end10157 +logic.end10157: + %t133 = phi i1 [ false, %logic.from10155 ], [ %t132, %logic.rend10158 ] + br i1 %t133, label %then10159, label %endif10161 +then10159: %t134 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t134, ptr %a135 %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1 %t138 = load i64, ptr %t137 - call void @finch_str_sub(ptr %a136, ptr %a135, i64 1, i64 %t138, ptr @.str.6798, i64 113) + call void @finch_str_sub(ptr %a136, ptr %a135, i64 1, i64 %t138, ptr @.str.6808, i64 113) %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t139, ptr %a124 store { ptr, i64, i64 } %t140, ptr %a141 call void @finch_str_drop(ptr %a141) - br label %endif10140 -endif10140: + br label %endif10161 +endif10161: %t142 = load { ptr, i64, i64 }, ptr %a124 call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t142) call void @finch_str_drop(ptr %a124) - br label %endif10133 -endif10133: - br label %endif10126 -endif10126: - br label %endif10119 -endif10119: - br label %endif10116 -endif10116: - br label %endif10113 -endif10113: - br label %endif10110 -endif10110: - br label %endif10107 -endif10107: - br label %endif10104 -endif10104: + br label %endif10154 +endif10154: + br label %endif10147 +endif10147: + br label %endif10140 +endif10140: + br label %endif10137 +endif10137: + br label %endif10134 +endif10134: + br label %endif10131 +endif10131: + br label %endif10128 +endif10128: + br label %endif10125 +endif10125: call void @finch_str_drop(ptr %a26) - br label %each.step10100 -each.step10100: + br label %each.step10121 +each.step10121: %t143 = load i64, ptr %a13 %t144 = add i64 %t143, 1 store i64 %t144, ptr %a13 - br label %each.cond10098 -each.end10101: + br label %each.cond10119 +each.end10122: call void @finch.drop.arr_str(ptr %a12) %t145 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1 %t147 = load i64, ptr %t146 %t148 = icmp eq i64 %t147, 0 - br label %logic.from10141 -logic.from10141: - br i1 %t148, label %logic.rhs10142, label %logic.end10143 -logic.rhs10142: + br label %logic.from10162 +logic.from10162: + br i1 %t148, label %logic.rhs10163, label %logic.end10164 +logic.rhs10163: %t149 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t149, i32 0, i32 1 %t151 = load i64, ptr %t150 %t152 = icmp eq i64 %t151, 0 - br label %logic.rend10144 -logic.rend10144: - br label %logic.end10143 -logic.end10143: - %t153 = phi i1 [ false, %logic.from10141 ], [ %t152, %logic.rend10144 ] - br i1 %t153, label %then10145, label %endif10147 -then10145: + br label %logic.rend10165 +logic.rend10165: + br label %logic.end10164 +logic.end10164: + %t153 = phi i1 [ false, %logic.from10162 ], [ %t152, %logic.rend10165 ] + br i1 %t153, label %then10166, label %endif10168 +then10166: %t154 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t154, ptr %a156 - store { ptr, i64, i64 } { ptr @.str.6799, i64 21, i64 0 }, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.6809, i64 21, i64 0 }, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 %t159 = extractvalue { ptr, i64, i64 } %t158, 1 %t160 = trunc i64 %t159 to i32 %t161 = extractvalue { ptr, i64, i64 } %t158, 0 %t162 = icmp eq ptr %t161, null - %t163 = select i1 %t162, ptr @.str.6800, ptr %t161 - %t164 = call i32 (ptr, ...) @printf(ptr @.str.6801, i32 %t160, ptr %t163) + %t163 = select i1 %t162, ptr @.str.6810, ptr %t161 + %t164 = call i32 (ptr, ...) @printf(ptr @.str.6811, i32 %t160, ptr %t163) store { ptr, i64, i64 } %t158, ptr %a165 call void @finch_str_drop(ptr %a165) - %t166 = call i32 (ptr, ...) @printf(ptr @.str.6802) + %t166 = call i32 (ptr, ...) @printf(ptr @.str.6812) call void @finch.drop.S_linker_Names(ptr %a5) call void @finch.drop.S_linker_Names(ptr %a4) ret i64 1 -endif10147: +endif10168: %t167 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 store i64 0, ptr %a168 - br label %each.cond10148 -each.cond10148: + br label %each.cond10169 +each.cond10169: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = load i64, ptr %a168 %t172 = icmp slt i64 %t171, %t170 - br i1 %t172, label %each.body10149, label %each.end10151 -each.body10149: + br i1 %t172, label %each.body10170, label %each.end10172 +each.body10170: %t173 = load ptr, ptr %t167 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 %t171 %t175 = load { ptr, i64, i64 }, ptr %t174 store { ptr, i64, i64 } %t175, ptr %a176 %t177 = load { ptr, i64, i64 }, ptr %a176 - store { ptr, i64, i64 } { ptr @.str.6803, i64 20, i64 0 }, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.6813, i64 20, i64 0 }, ptr %a179 store { ptr, i64, i64 } %t177, ptr %a180 call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) %t181 = load { ptr, i64, i64 }, ptr %a178 store { ptr, i64, i64 } %t181, ptr %a183 - store { ptr, i64, i64 } { ptr @.str.6804, i64 62, i64 0 }, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.6814, i64 62, i64 0 }, ptr %a184 call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) store { ptr, i64, i64 } %t181, ptr %a185 call void @finch_str_drop(ptr %a185) @@ -104004,55 +104123,55 @@ each.body10149: %t188 = trunc i64 %t187 to i32 %t189 = extractvalue { ptr, i64, i64 } %t186, 0 %t190 = icmp eq ptr %t189, null - %t191 = select i1 %t190, ptr @.str.6805, ptr %t189 - %t192 = call i32 (ptr, ...) @printf(ptr @.str.6806, i32 %t188, ptr %t191) + %t191 = select i1 %t190, ptr @.str.6815, ptr %t189 + %t192 = call i32 (ptr, ...) @printf(ptr @.str.6816, i32 %t188, ptr %t191) store { ptr, i64, i64 } %t186, ptr %a193 call void @finch_str_drop(ptr %a193) - %t194 = call i32 (ptr, ...) @printf(ptr @.str.6807) - br label %each.step10150 -each.step10150: + %t194 = call i32 (ptr, ...) @printf(ptr @.str.6817) + br label %each.step10171 +each.step10171: %t195 = load i64, ptr %a168 %t196 = add i64 %t195, 1 store i64 %t196, ptr %a168 - br label %each.cond10148 -each.end10151: + br label %each.cond10169 +each.end10172: store { ptr, i64, i64 } zeroinitializer, ptr %a197 store { ptr, i64, i64 } zeroinitializer, ptr %a198 %t199 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 store i64 0, ptr %a200 - br label %each.cond10152 -each.cond10152: + br label %each.cond10173 +each.cond10173: %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i32 0, i32 1 %t202 = load i64, ptr %t201 %t203 = load i64, ptr %a200 %t204 = icmp slt i64 %t203, %t202 - br i1 %t204, label %each.body10153, label %each.end10155 -each.body10153: + br i1 %t204, label %each.body10174, label %each.end10176 +each.body10174: %t205 = load ptr, ptr %t199 %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i64 %t203 %t207 = load { ptr, i64, i64 }, ptr %t206 store { ptr, i64, i64 } %t207, ptr %a208 - store { ptr, i64, i64 } { ptr @.str.6808, i64 0, i64 0 }, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.6818, i64 0, i64 0 }, ptr %a209 %t210 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 %t211 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t211, ptr %a212 %t213 = call i64 @finch_map_find(ptr %t210, ptr %a212, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t214 = icmp sge i64 %t213, 0 - br i1 %t214, label %then10156, label %endif10158 -then10156: + br i1 %t214, label %then10177, label %endif10179 +then10177: %t215 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 %t216 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t216, ptr %a217 %t218 = call i64 @finch_map_find(ptr %t215, ptr %a217, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t219 = icmp slt i64 %t218, 0 - br i1 %t219, label %map.missing10159, label %map.found10160 -map.missing10159: + br i1 %t219, label %map.missing10180, label %map.found10181 +map.missing10180: store { ptr, i64, i64 } zeroinitializer, ptr %a220 store { ptr, i64, i64 } %t216, ptr %a221 call void @finch_buf_str(ptr %a220, ptr %a221, i32 1) - call void @finch_map_missing(ptr @.str.6809, i64 131, ptr %a220) + call void @finch_map_missing(ptr @.str.6819, i64 131, ptr %a220) unreachable -map.found10160: +map.found10181: %t222 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t215, i32 0, i32 0 %t223 = load ptr, ptr %t222 %t224 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t223, i64 %t218 @@ -104066,41 +104185,41 @@ map.found10160: store { ptr, i64, i64 } %t230, ptr %a209 store { ptr, i64, i64 } %t231, ptr %a232 call void @finch_str_drop(ptr %a232) - br label %endif10158 -endif10158: + br label %endif10179 +endif10179: %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t234 = load { ptr, i64, i64 }, ptr %a209 store i64 -1, ptr %a235 %t236 = load i64, ptr %t233 %t237 = load ptr, ptr %a197 store i64 0, ptr %a238 - br label %find.cond10161 -find.cond10161: + br label %find.cond10182 +find.cond10182: %t239 = load i64, ptr %a238 %t240 = icmp slt i64 %t239, %t236 - br i1 %t240, label %find.body10162, label %find.end10165 -find.body10162: + br i1 %t240, label %find.body10183, label %find.end10186 +find.body10183: %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t239 %t242 = load { ptr, i64, i64 }, ptr %t241 store { ptr, i64, i64 } %t242, ptr %a243 store { ptr, i64, i64 } %t234, ptr %a244 %t245 = call i32 @finch_str_eq(ptr %a243, ptr %a244) %t246 = icmp ne i32 %t245, 0 - br i1 %t246, label %find.hit10163, label %find.next10164 -find.hit10163: + br i1 %t246, label %find.hit10184, label %find.next10185 +find.hit10184: store i64 %t239, ptr %a235 - br label %find.end10165 -find.next10164: + br label %find.end10186 +find.next10185: %t247 = add i64 %t239, 1 store i64 %t247, ptr %a238 - br label %find.cond10161 -find.end10165: + br label %find.cond10182 +find.end10186: %t248 = load i64, ptr %a235 store i64 %t248, ptr %a249 %t250 = load i64, ptr %a249 %t251 = icmp slt i64 %t250, 0 - br i1 %t251, label %then10166, label %endif10168 -then10166: + br i1 %t251, label %then10187, label %endif10189 +then10187: %t252 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t253 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t253, ptr %a254 @@ -104125,47 +104244,47 @@ then10166: %t267 = load i64, ptr %t266 %t268 = sub i64 %t267, 1 store i64 %t268, ptr %a249 - br label %endif10168 -endif10168: + br label %endif10189 +endif10189: %t269 = load i64, ptr %a249 %t270 = load { ptr, i64, i64 }, ptr %a198 %t271 = extractvalue { ptr, i64, i64 } %t270, 1 %t272 = icmp uge i64 %t269, %t271 - br i1 %t272, label %range10169, label %inrange10170 -range10169: - call void @finch_panic_index(ptr @.str.6810, i64 139, i64 %t269, i64 %t271) + br i1 %t272, label %range10190, label %inrange10191 +range10190: + call void @finch_panic_index(ptr @.str.6820, i64 139, i64 %t269, i64 %t271) unreachable -inrange10170: +inrange10191: %t273 = extractvalue { ptr, i64, i64 } %t270, 0 %t274 = getelementptr inbounds %S.linker.Names, ptr %t273, i64 %t269 %t275 = load { ptr, i64, i64 }, ptr %a208 call void @finch.linker.Names.add(ptr %t274, { ptr, i64, i64 } %t275) call void @finch_str_drop(ptr %a209) - br label %each.step10154 -each.step10154: + br label %each.step10175 +each.step10175: %t276 = load i64, ptr %a200 %t277 = add i64 %t276, 1 store i64 %t277, ptr %a200 - br label %each.cond10152 -each.end10155: + br label %each.cond10173 +each.end10176: %t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t279 = load i64, ptr %t278 store i64 0, ptr %a280 - br label %for.cond10171 -for.cond10171: + br label %for.cond10192 +for.cond10192: %t281 = load i64, ptr %a280 %t282 = icmp slt i64 %t281, %t279 - br i1 %t282, label %for.body10172, label %for.end10174 -for.body10172: + br i1 %t282, label %for.body10193, label %for.end10195 +for.body10193: %t283 = load i64, ptr %a280 %t284 = load { ptr, i64, i64 }, ptr %a198 %t285 = extractvalue { ptr, i64, i64 } %t284, 1 %t286 = icmp uge i64 %t283, %t285 - br i1 %t286, label %range10175, label %inrange10176 -range10175: - call void @finch_panic_index(ptr @.str.6811, i64 142, i64 %t283, i64 %t285) + br i1 %t286, label %range10196, label %inrange10197 +range10196: + call void @finch_panic_index(ptr @.str.6821, i64 142, i64 %t283, i64 %t285) unreachable -inrange10176: +inrange10197: %t287 = extractvalue { ptr, i64, i64 } %t284, 0 %t288 = getelementptr inbounds %S.linker.Names, ptr %t287, i64 %t283 %t289 = getelementptr inbounds %S.linker.Names, ptr %t288, i32 0, i32 0 @@ -104178,26 +104297,26 @@ inrange10176: %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t297 = load i64, ptr %t296 store i64 0, ptr %a298 - br label %for.cond10177 -for.cond10177: + br label %for.cond10198 +for.cond10198: %t299 = load i64, ptr %a298 %t300 = icmp slt i64 %t299, %t297 - br i1 %t300, label %for.body10178, label %for.end10180 -for.body10178: + br i1 %t300, label %for.body10199, label %for.end10201 +for.body10199: %t301 = load i64, ptr %a298 %t302 = icmp slt i64 %t301, 3 - br i1 %t302, label %then10181, label %endif10183 -then10181: + br i1 %t302, label %then10202, label %endif10204 +then10202: %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 %t304 = load i64, ptr %a298 %t305 = load { ptr, i64, i64 }, ptr %a294 %t306 = extractvalue { ptr, i64, i64 } %t305, 1 %t307 = icmp uge i64 %t304, %t306 - br i1 %t307, label %range10184, label %inrange10185 -range10184: - call void @finch_panic_index(ptr @.str.6812, i64 146, i64 %t304, i64 %t306) + br i1 %t307, label %range10205, label %inrange10206 +range10205: + call void @finch_panic_index(ptr @.str.6822, i64 146, i64 %t304, i64 %t306) unreachable -inrange10185: +inrange10206: %t308 = extractvalue { ptr, i64, i64 } %t305, 0 %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t304 %t310 = load { ptr, i64, i64 }, ptr %t309 @@ -104211,28 +104330,28 @@ inrange10185: %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i64 %t314 store { ptr, i64, i64 } %t313, ptr %t317 store i64 %t315, ptr %t303 - br label %endif10183 -endif10183: - br label %for.step10179 -for.step10179: + br label %endif10204 +endif10204: + br label %for.step10200 +for.step10200: %t318 = load i64, ptr %a298 %t319 = add i64 %t318, 1 store i64 %t319, ptr %a298 - br label %for.cond10177 -for.end10180: + br label %for.cond10198 +for.end10201: %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6813, i64 2, i64 0 }, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.6823, i64 2, i64 0 }, ptr %a321 call void @finch_str_join(ptr %a322, ptr %a295, ptr %a321) %t323 = load { ptr, i64, i64 }, ptr %a322 store { ptr, i64, i64 } %t323, ptr %a324 %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t326 = load i64, ptr %t325 %t327 = icmp sgt i64 %t326, 3 - br i1 %t327, label %then10186, label %endif10188 -then10186: + br i1 %t327, label %then10207, label %endif10209 +then10207: %t328 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } %t328, ptr %a330 - store { ptr, i64, i64 } { ptr @.str.6814, i64 5, i64 0 }, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.6824, i64 5, i64 0 }, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) %t332 = load { ptr, i64, i64 }, ptr %a329 %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 @@ -104249,7 +104368,7 @@ then10186: call void @finch_str_drop(ptr %a342) %t343 = load { ptr, i64, i64 }, ptr %a338 store { ptr, i64, i64 } %t343, ptr %a345 - store { ptr, i64, i64 } { ptr @.str.6815, i64 5, i64 0 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6825, i64 5, i64 0 }, ptr %a346 call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) store { ptr, i64, i64 } %t343, ptr %a347 call void @finch_str_drop(ptr %a347) @@ -104258,26 +104377,26 @@ then10186: store { ptr, i64, i64 } %t348, ptr %a324 store { ptr, i64, i64 } %t349, ptr %a350 call void @finch_str_drop(ptr %a350) - br label %endif10188 -endif10188: + br label %endif10209 +endif10209: %t351 = load i64, ptr %a280 %t352 = load { ptr, i64, i64 }, ptr %a197 %t353 = extractvalue { ptr, i64, i64 } %t352, 1 %t354 = icmp uge i64 %t351, %t353 - br i1 %t354, label %range10189, label %inrange10190 -range10189: - call void @finch_panic_index(ptr @.str.6816, i64 153, i64 %t351, i64 %t353) + br i1 %t354, label %range10210, label %inrange10211 +range10210: + call void @finch_panic_index(ptr @.str.6826, i64 153, i64 %t351, i64 %t353) unreachable -inrange10190: +inrange10211: %t355 = extractvalue { ptr, i64, i64 } %t352, 0 %t356 = getelementptr inbounds { ptr, i64, i64 }, ptr %t355, i64 %t351 %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 %t358 = load i64, ptr %t357 %t359 = icmp eq i64 %t358, 0 - br i1 %t359, label %then10191, label %endif10193 -then10191: + br i1 %t359, label %then10212, label %endif10214 +then10212: %t360 = load { ptr, i64, i64 }, ptr %a324 - store { ptr, i64, i64 } { ptr @.str.6817, i64 25, i64 0 }, ptr %a362 + store { ptr, i64, i64 } { ptr @.str.6827, i64 25, i64 0 }, ptr %a362 store { ptr, i64, i64 } %t360, ptr %a363 call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) %t364 = load { ptr, i64, i64 }, ptr %a361 @@ -104285,35 +104404,35 @@ then10191: %t366 = trunc i64 %t365 to i32 %t367 = extractvalue { ptr, i64, i64 } %t364, 0 %t368 = icmp eq ptr %t367, null - %t369 = select i1 %t368, ptr @.str.6818, ptr %t367 - %t370 = call i32 (ptr, ...) @printf(ptr @.str.6819, i32 %t366, ptr %t369) + %t369 = select i1 %t368, ptr @.str.6828, ptr %t367 + %t370 = call i32 (ptr, ...) @printf(ptr @.str.6829, i32 %t366, ptr %t369) store { ptr, i64, i64 } %t364, ptr %a371 call void @finch_str_drop(ptr %a371) - %t372 = call i32 (ptr, ...) @printf(ptr @.str.6820) + %t372 = call i32 (ptr, ...) @printf(ptr @.str.6830) call void @finch_str_drop(ptr %a324) call void @finch.drop.arr_str(ptr %a295) call void @finch.drop.arr_str(ptr %a294) - br label %for.step10173 -endif10193: - store { ptr, i64, i64 } { ptr @.str.6821, i64 4, i64 0 }, ptr %a373 + br label %for.step10194 +endif10214: + store { ptr, i64, i64 } { ptr @.str.6831, i64 4, i64 0 }, ptr %a373 %t374 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t375 = load i64, ptr %t374 %t376 = icmp eq i64 %t375, 1 - br i1 %t376, label %then10194, label %endif10196 -then10194: + br i1 %t376, label %then10215, label %endif10217 +then10215: %t377 = load { ptr, i64, i64 }, ptr %a373 - store { ptr, i64, i64 } { ptr @.str.6822, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.6832, i64 5, i64 0 }, ptr %a373 store { ptr, i64, i64 } %t377, ptr %a378 call void @finch_str_drop(ptr %a378) - br label %endif10196 -endif10196: + br label %endif10217 +endif10217: %t379 = load { ptr, i64, i64 }, ptr %a324 - store { ptr, i64, i64 } { ptr @.str.6823, i64 7, i64 0 }, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.6833, i64 7, i64 0 }, ptr %a381 store { ptr, i64, i64 } %t379, ptr %a382 call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) %t383 = load { ptr, i64, i64 }, ptr %a380 store { ptr, i64, i64 } %t383, ptr %a385 - store { ptr, i64, i64 } { ptr @.str.6824, i64 1, i64 0 }, ptr %a386 + store { ptr, i64, i64 } { ptr @.str.6834, i64 1, i64 0 }, ptr %a386 call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) store { ptr, i64, i64 } %t383, ptr %a387 call void @finch_str_drop(ptr %a387) @@ -104326,7 +104445,7 @@ endif10196: call void @finch_str_drop(ptr %a393) %t394 = load { ptr, i64, i64 }, ptr %a390 store { ptr, i64, i64 } %t394, ptr %a396 - store { ptr, i64, i64 } { ptr @.str.6825, i64 7, i64 0 }, ptr %a397 + store { ptr, i64, i64 } { ptr @.str.6835, i64 7, i64 0 }, ptr %a397 call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) store { ptr, i64, i64 } %t394, ptr %a398 call void @finch_str_drop(ptr %a398) @@ -104335,11 +104454,11 @@ endif10196: %t401 = load { ptr, i64, i64 }, ptr %a197 %t402 = extractvalue { ptr, i64, i64 } %t401, 1 %t403 = icmp uge i64 %t400, %t402 - br i1 %t403, label %range10197, label %inrange10198 -range10197: - call void @finch_panic_index(ptr @.str.6826, i64 161, i64 %t400, i64 %t402) + br i1 %t403, label %range10218, label %inrange10219 +range10218: + call void @finch_panic_index(ptr @.str.6836, i64 161, i64 %t400, i64 %t402) unreachable -inrange10198: +inrange10219: %t404 = extractvalue { ptr, i64, i64 } %t401, 0 %t405 = getelementptr inbounds { ptr, i64, i64 }, ptr %t404, i64 %t400 %t406 = load { ptr, i64, i64 }, ptr %t405 @@ -104350,7 +104469,7 @@ inrange10198: call void @finch_str_drop(ptr %a410) %t411 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t411, ptr %a413 - store { ptr, i64, i64 } { ptr @.str.6827, i64 31, i64 0 }, ptr %a414 + store { ptr, i64, i64 } { ptr @.str.6837, i64 31, i64 0 }, ptr %a414 call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) store { ptr, i64, i64 } %t411, ptr %a415 call void @finch_str_drop(ptr %a415) @@ -104359,53 +104478,53 @@ inrange10198: %t418 = trunc i64 %t417 to i32 %t419 = extractvalue { ptr, i64, i64 } %t416, 0 %t420 = icmp eq ptr %t419, null - %t421 = select i1 %t420, ptr @.str.6828, ptr %t419 - %t422 = call i32 (ptr, ...) @printf(ptr @.str.6829, i32 %t418, ptr %t421) + %t421 = select i1 %t420, ptr @.str.6838, ptr %t419 + %t422 = call i32 (ptr, ...) @printf(ptr @.str.6839, i32 %t418, ptr %t421) store { ptr, i64, i64 } %t416, ptr %a423 call void @finch_str_drop(ptr %a423) - %t424 = call i32 (ptr, ...) @printf(ptr @.str.6830) - %t425 = extractvalue { ptr, i64, i64 } { ptr @.str.6831, i64 74, i64 0 }, 1 + %t424 = call i32 (ptr, ...) @printf(ptr @.str.6840) + %t425 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 1 %t426 = trunc i64 %t425 to i32 - %t427 = extractvalue { ptr, i64, i64 } { ptr @.str.6831, i64 74, i64 0 }, 0 + %t427 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 0 %t428 = icmp eq ptr %t427, null - %t429 = select i1 %t428, ptr @.str.6832, ptr %t427 - %t430 = call i32 (ptr, ...) @printf(ptr @.str.6833, i32 %t426, ptr %t429) - %t431 = call i32 (ptr, ...) @printf(ptr @.str.6834) - %t432 = extractvalue { ptr, i64, i64 } { ptr @.str.6835, i64 66, i64 0 }, 1 + %t429 = select i1 %t428, ptr @.str.6842, ptr %t427 + %t430 = call i32 (ptr, ...) @printf(ptr @.str.6843, i32 %t426, ptr %t429) + %t431 = call i32 (ptr, ...) @printf(ptr @.str.6844) + %t432 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 1 %t433 = trunc i64 %t432 to i32 - %t434 = extractvalue { ptr, i64, i64 } { ptr @.str.6835, i64 66, i64 0 }, 0 + %t434 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 0 %t435 = icmp eq ptr %t434, null - %t436 = select i1 %t435, ptr @.str.6836, ptr %t434 - %t437 = call i32 (ptr, ...) @printf(ptr @.str.6837, i32 %t433, ptr %t436) - %t438 = call i32 (ptr, ...) @printf(ptr @.str.6838) - %t439 = extractvalue { ptr, i64, i64 } { ptr @.str.6839, i64 0, i64 0 }, 1 + %t436 = select i1 %t435, ptr @.str.6846, ptr %t434 + %t437 = call i32 (ptr, ...) @printf(ptr @.str.6847, i32 %t433, ptr %t436) + %t438 = call i32 (ptr, ...) @printf(ptr @.str.6848) + %t439 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 1 %t440 = trunc i64 %t439 to i32 - %t441 = extractvalue { ptr, i64, i64 } { ptr @.str.6839, i64 0, i64 0 }, 0 + %t441 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 0 %t442 = icmp eq ptr %t441, null - %t443 = select i1 %t442, ptr @.str.6840, ptr %t441 - %t444 = call i32 (ptr, ...) @printf(ptr @.str.6841, i32 %t440, ptr %t443) - %t445 = call i32 (ptr, ...) @printf(ptr @.str.6842) + %t443 = select i1 %t442, ptr @.str.6850, ptr %t441 + %t444 = call i32 (ptr, ...) @printf(ptr @.str.6851, i32 %t440, ptr %t443) + %t445 = call i32 (ptr, ...) @printf(ptr @.str.6852) %t446 = load i64, ptr %a280 %t447 = load { ptr, i64, i64 }, ptr %a197 %t448 = extractvalue { ptr, i64, i64 } %t447, 1 %t449 = icmp uge i64 %t446, %t448 - br i1 %t449, label %range10199, label %inrange10200 -range10199: - call void @finch_panic_index(ptr @.str.6844, i64 165, i64 %t446, i64 %t448) + br i1 %t449, label %range10220, label %inrange10221 +range10220: + call void @finch_panic_index(ptr @.str.6854, i64 165, i64 %t446, i64 %t448) unreachable -inrange10200: +inrange10221: %t450 = extractvalue { ptr, i64, i64 } %t447, 0 %t451 = getelementptr inbounds { ptr, i64, i64 }, ptr %t450, i64 %t446 %t452 = load { ptr, i64, i64 }, ptr %t451 %t453 = call { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %t452) - store { ptr, i64, i64 } { ptr @.str.6843, i64 12, i64 0 }, ptr %a455 + store { ptr, i64, i64 } { ptr @.str.6853, i64 12, i64 0 }, ptr %a455 store { ptr, i64, i64 } %t453, ptr %a456 call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) store { ptr, i64, i64 } %t453, ptr %a457 call void @finch_str_drop(ptr %a457) %t458 = load { ptr, i64, i64 }, ptr %a454 store { ptr, i64, i64 } %t458, ptr %a460 - store { ptr, i64, i64 } { ptr @.str.6845, i64 1, i64 0 }, ptr %a461 + store { ptr, i64, i64 } { ptr @.str.6855, i64 1, i64 0 }, ptr %a461 call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) store { ptr, i64, i64 } %t458, ptr %a462 call void @finch_str_drop(ptr %a462) @@ -104414,29 +104533,29 @@ inrange10200: %t465 = trunc i64 %t464 to i32 %t466 = extractvalue { ptr, i64, i64 } %t463, 0 %t467 = icmp eq ptr %t466, null - %t468 = select i1 %t467, ptr @.str.6846, ptr %t466 - %t469 = call i32 (ptr, ...) @printf(ptr @.str.6847, i32 %t465, ptr %t468) + %t468 = select i1 %t467, ptr @.str.6856, ptr %t466 + %t469 = call i32 (ptr, ...) @printf(ptr @.str.6857, i32 %t465, ptr %t468) store { ptr, i64, i64 } %t463, ptr %a470 call void @finch_str_drop(ptr %a470) - %t471 = call i32 (ptr, ...) @printf(ptr @.str.6848) - %t472 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 1 + %t471 = call i32 (ptr, ...) @printf(ptr @.str.6858) + %t472 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 1 %t473 = trunc i64 %t472 to i32 - %t474 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 0 + %t474 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 0 %t475 = icmp eq ptr %t474, null - %t476 = select i1 %t475, ptr @.str.6850, ptr %t474 - %t477 = call i32 (ptr, ...) @printf(ptr @.str.6851, i32 %t473, ptr %t476) - %t478 = call i32 (ptr, ...) @printf(ptr @.str.6852) + %t476 = select i1 %t475, ptr @.str.6860, ptr %t474 + %t477 = call i32 (ptr, ...) @printf(ptr @.str.6861, i32 %t473, ptr %t476) + %t478 = call i32 (ptr, ...) @printf(ptr @.str.6862) call void @finch_str_drop(ptr %a373) call void @finch_str_drop(ptr %a324) call void @finch.drop.arr_str(ptr %a295) call void @finch.drop.arr_str(ptr %a294) - br label %for.step10173 -for.step10173: + br label %for.step10194 +for.step10194: %t479 = load i64, ptr %a280 %t480 = add i64 %t479, 1 store i64 %t480, ptr %a280 - br label %for.cond10171 -for.end10174: + br label %for.cond10192 +for.end10195: call void @finch.drop.arr_S_linker_Names(ptr %a198) call void @finch.drop.arr_str(ptr %a197) call void @finch.drop.S_linker_Names(ptr %a5) @@ -104563,17 +104682,17 @@ entry: %t9 = icmp eq i32 %t8, 0 %t10 = load { ptr, i64, i64 }, ptr %a7 %t11 = load { ptr, i64, i64 }, ptr %a6 - br i1 %t9, label %try.failed10204, label %try.ok10205 -try.failed10204: + br i1 %t9, label %try.failed10225, label %try.ok10226 +try.failed10225: %t12 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t10, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t12 -try.ok10205: +try.ok10226: store { ptr, i64, i64 } %t11, ptr %a13 %t14 = call { ptr, i64, i64 } @finch.host.cacheDir() store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t16, ptr %a18 - store { ptr, i64, i64 } { ptr @.str.6853, i64 4, i64 0 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6863, i64 4, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 %t21 = load { ptr, i64, i64 }, ptr %a13 @@ -104591,7 +104710,7 @@ try.ok10205: call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t33, ptr %a35 - store { ptr, i64, i64 } { ptr @.str.6854, i64 3, i64 0 }, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.6864, i64 3, i64 0 }, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) store { ptr, i64, i64 } %t33, ptr %a37 call void @finch_str_drop(ptr %a37) @@ -104608,7 +104727,7 @@ try.ok10205: call void @finch_str_drop(ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t46, ptr %a48 - store { ptr, i64, i64 } { ptr @.str.6855, i64 2, i64 0 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.6865, i64 2, i64 0 }, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) store { ptr, i64, i64 } %t46, ptr %a50 call void @finch_str_drop(ptr %a50) @@ -104618,20 +104737,20 @@ try.ok10205: store { ptr, i64, i64 } %t53, ptr %a54 %t55 = call i32 @finch_file_exists(ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %then10206, label %endif10208 -then10206: + br i1 %t56, label %then10227, label %endif10229 +then10227: %t57 = load { ptr, i64, i64 }, ptr %a52 call void @finch_str_drop(ptr %a15) call void @finch_str_drop(ptr %a13) %t58 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t59 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t58, { ptr, i64, i64 } %t57, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t59 -endif10208: +endif10229: %t60 = load { ptr, i64, i64 }, ptr %a15 call void @finch.host.makeDirs({ ptr, i64, i64 } %t60) %t61 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t61, ptr %a63 - store { ptr, i64, i64 } { ptr @.str.6856, i64 5, i64 0 }, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.6866, i64 5, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a62 %t66 = call i64 @finch.host.pid() @@ -104646,26 +104765,26 @@ endif10208: call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t74, ptr %a75 - store { ptr, i64, i64 } { ptr @.str.6857, i64 6, i64 0 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.6867, i64 6, i64 0 }, ptr %a76 %t77 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 %t78 = load i1, ptr %t77 - br i1 %t78, label %then10209, label %endif10211 -then10209: + br i1 %t78, label %then10230, label %endif10232 +then10230: %t79 = load { ptr, i64, i64 }, ptr %a76 - store { ptr, i64, i64 } { ptr @.str.6858, i64 0, i64 0 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.6868, i64 0, i64 0 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif10211 -endif10211: + br label %endif10232 +endif10232: %t81 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t81, ptr %a83 - store { ptr, i64, i64 } { ptr @.str.6859, i64 4, i64 0 }, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.6869, i64 4, i64 0 }, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a86 %t87 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t87, ptr %a89 - store { ptr, i64, i64 } { ptr @.str.6860, i64 4, i64 0 }, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.6870, i64 4, i64 0 }, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a88 %t92 = load { ptr, i64, i64 }, ptr %a76 @@ -104676,7 +104795,7 @@ endif10211: call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t97, ptr %a99 - store { ptr, i64, i64 } { ptr @.str.6861, i64 4, i64 0 }, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6871, i64 4, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) store { ptr, i64, i64 } %t97, ptr %a101 call void @finch_str_drop(ptr %a101) @@ -104692,7 +104811,7 @@ endif10211: call void @finch_str_drop(ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t110, ptr %a112 - store { ptr, i64, i64 } { ptr @.str.6862, i64 4, i64 0 }, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.6872, i64 4, i64 0 }, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) store { ptr, i64, i64 } %t110, ptr %a114 call void @finch_str_drop(ptr %a114) @@ -104708,7 +104827,7 @@ endif10211: call void @finch_str_drop(ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a118 store { ptr, i64, i64 } %t123, ptr %a125 - store { ptr, i64, i64 } { ptr @.str.6863, i64 3, i64 0 }, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.6873, i64 3, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) store { ptr, i64, i64 } %t123, ptr %a127 call void @finch_str_drop(ptr %a127) @@ -104724,7 +104843,7 @@ endif10211: call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } %t136, ptr %a138 - store { ptr, i64, i64 } { ptr @.str.6864, i64 5, i64 0 }, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.6874, i64 5, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) @@ -104735,8 +104854,8 @@ endif10211: store i64 %t142, ptr %a144 %t145 = load i64, ptr %a144 %t146 = icmp ne i64 %t145, 0 - br i1 %t146, label %then10212, label %endif10214 -then10212: + br i1 %t146, label %then10233, label %endif10235 +then10233: %t147 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t147, ptr %a148 store { ptr, i64, i64 } zeroinitializer, ptr %a149 @@ -104745,17 +104864,17 @@ then10212: %t152 = icmp eq i32 %t151, 0 %t153 = load { ptr, i64, i64 }, ptr %a150 %t154 = load { ptr, i64, i64 }, ptr %a149 - br i1 %t152, label %or.failed10215, label %or.ok10216 -or.failed10215: + br i1 %t152, label %or.failed10236, label %or.ok10237 +or.failed10236: store { ptr, i64, i64 } %t153, ptr %a155 call void @finch_str_drop(ptr %a155) - br label %or.bend10217 -or.bend10217: - br label %or.end10218 -or.ok10216: - br label %or.end10218 -or.end10218: - %t156 = phi { ptr, i64, i64 } [ { ptr @.str.6865, i64 0, i64 0 }, %or.bend10217 ], [ %t154, %or.ok10216 ] + br label %or.bend10238 +or.bend10238: + br label %or.end10239 +or.ok10237: + br label %or.end10239 +or.end10239: + %t156 = phi { ptr, i64, i64 } [ { ptr @.str.6875, i64 0, i64 0 }, %or.bend10238 ], [ %t154, %or.ok10237 ] store { ptr, i64, i64 } %t156, ptr %a157 %t158 = load { ptr, i64, i64 }, ptr %a75 call void @finch.host.remove({ ptr, i64, i64 } %t158) @@ -104763,7 +104882,7 @@ or.end10218: call void @finch.host.remove({ ptr, i64, i64 } %t159) %t160 = load { ptr, i64, i64 }, ptr %a157 store { ptr, i64, i64 } %t160, ptr %a162 - store { ptr, i64, i64 } { ptr @.str.6866, i64 46, i64 0 }, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.6876, i64 46, i64 0 }, ptr %a163 call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a161 %t165 = load { ptr, i64, i64 }, ptr %a3 @@ -104774,7 +104893,7 @@ or.end10218: call void @finch_str_drop(ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } %t170, ptr %a172 - store { ptr, i64, i64 } { ptr @.str.6867, i64 30, i64 0 }, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.6877, i64 30, i64 0 }, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) store { ptr, i64, i64 } %t170, ptr %a174 call void @finch_str_drop(ptr %a174) @@ -104788,7 +104907,7 @@ or.end10218: call void @finch_str_drop(ptr %a13) %t176 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t175, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t176 -endif10214: +endif10235: %t177 = load { ptr, i64, i64 }, ptr %a86 call void @finch.host.remove({ ptr, i64, i64 } %t177) %t178 = load { ptr, i64, i64 }, ptr %a75 @@ -104839,251 +104958,261 @@ entry: %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 - %a97 = alloca { ptr, i64, i64 }, align 16 - %a98 = alloca { ptr, i64, i64 }, align 16 - %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 - %a106 = alloca { ptr, i64, i64 }, align 16 - %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 - %a113 = alloca { ptr, i64, i64 }, align 16 - %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 - %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 - %a123 = alloca { ptr, i64, i64 }, align 16 - %a124 = alloca { ptr, i64, i64 }, align 16 - %a125 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 - %a130 = alloca { ptr, i64, i64 }, align 16 - %a131 = alloca { ptr, i64, i64 }, align 16 - %a132 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 - %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 - %a142 = alloca { ptr, i64, i64 }, align 16 - %a143 = alloca { ptr, i64, i64 }, align 16 - %a144 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 - %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 - %a155 = alloca { ptr, i64, i64 }, align 16 - %a156 = alloca { ptr, i64, i64 }, align 16 - %a157 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 - %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 - %a168 = alloca { ptr, i64, i64 }, align 16 - %a169 = alloca { ptr, i64, i64 }, align 16 - %a170 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 - %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 - %a181 = alloca i64, align 16 - %a186 = alloca { ptr, i64, i64 }, align 16 - %a187 = alloca { ptr, i64, i64 }, align 16 - %a188 = alloca { ptr, i64, i64 }, align 16 - %a193 = alloca { ptr, i64, i64 }, align 16 - %a201 = alloca { ptr, i64, i64 }, align 16 - %a213 = alloca { ptr, i64, i64 }, align 16 - %a214 = alloca { ptr, i64, i64 }, align 16 - %a215 = alloca { ptr, i64, i64 }, align 16 - %a219 = alloca { ptr, i64, i64 }, align 16 - %a220 = alloca { ptr, i64, i64 }, align 16 - %a221 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca i64, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 - %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 - %a232 = alloca { ptr, i64, i64 }, align 16 - %a233 = alloca { ptr, i64, i64 }, align 16 - %a234 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 - %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 - %a246 = alloca { ptr, i64, i64 }, align 16 - %a247 = alloca { ptr, i64, i64 }, align 16 - %a248 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 - %a257 = alloca { ptr, i64, i64 }, align 16 - %a258 = alloca { ptr, i64, i64 }, align 16 - %a259 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 - %a268 = alloca { ptr, i64, i64 }, align 16 - %a269 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 - %a273 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 - %a280 = alloca { ptr, i64, i64 }, align 16 - %a281 = alloca { ptr, i64, i64 }, align 16 - %a283 = alloca i64, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 - %a293 = alloca { ptr, i64, i64 }, align 16 - %a294 = alloca { ptr, i64, i64 }, align 16 - %a295 = alloca { ptr, i64, i64 }, align 16 - %a300 = alloca { ptr, i64, i64 }, align 16 - %a301 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 - %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 - %a311 = alloca { ptr, i64, i64 }, align 16 - %a312 = alloca { ptr, i64, i64 }, align 16 - %a314 = alloca { ptr, i64, i64 }, align 16 - %a315 = alloca { ptr, i64, i64 }, align 16 - %a316 = alloca { ptr, i64, i64 }, align 16 - %a317 = alloca { ptr, i64, i64 }, align 16 - %a319 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca i64, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 - %a326 = alloca { ptr, i64, i64 }, align 16 - %a327 = alloca { ptr, i64, i64 }, align 16 - %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 - %a332 = alloca { ptr, i64, i64 }, align 16 - %a333 = alloca { ptr, i64, i64 }, align 16 - %a334 = alloca { ptr, i64, i64 }, align 16 - %a336 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 - %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 - %a350 = alloca { ptr, i64, i64 }, align 16 - %a351 = alloca { ptr, i64, i64 }, align 16 - %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 - %a358 = alloca { ptr, i64, i64 }, align 16 - %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 - %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 - %a369 = alloca { ptr, i64, i64 }, align 16 - %a370 = alloca { ptr, i64, i64 }, align 16 - %a371 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 - %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 - %a382 = alloca i64, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 - %a395 = alloca { ptr, i64, i64 }, align 16 - %a396 = alloca { ptr, i64, i64 }, align 16 - %a397 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 - %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 - %a412 = alloca { ptr, i64, i64 }, align 16 - %a419 = alloca { ptr, i64, i64 }, align 16 - %a420 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca i64, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 - %a428 = alloca { ptr, i64, i64 }, align 16 - %a429 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 - %a434 = alloca { ptr, i64, i64 }, align 16 - %a435 = alloca { ptr, i64, i64 }, align 16 - %a436 = alloca { ptr, i64, i64 }, align 16 - %a437 = alloca { ptr, i64, i64 }, align 16 - %a440 = alloca { ptr, i64, i64 }, align 16 - %a442 = alloca { ptr, i64, i64 }, align 16 - %a443 = alloca { ptr, i64, i64 }, align 16 - %a444 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 - %a450 = alloca { ptr, i64, i64 }, align 16 - %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 - %a461 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 - %a468 = alloca { ptr, i64, i64 }, align 16 - %a470 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 - %a480 = alloca { ptr, i64, i64 }, align 16 - %a481 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 - %a488 = alloca { ptr, i64, i64 }, align 16 - %a489 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 - %a495 = alloca { ptr, i64, i64 }, align 16 - %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 - %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 - %a502 = alloca { ptr, i64, i64 }, align 16 - %a503 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 - %a507 = alloca i64, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 - %a511 = alloca { ptr, i64, i64 }, align 16 - %a516 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 - %a521 = alloca i64, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 - %a536 = alloca { ptr, i64, i64 }, align 16 - %a537 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca i64, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 - %a541 = alloca { ptr, i64, i64 }, align 16 - %a542 = alloca { ptr, i64, i64 }, align 16 - %a543 = alloca { ptr, i64, i64 }, align 16 - %a551 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca i64, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 store %S.linker.Build %p0, ptr %a1 store %S.platform.Target %p1, ptr %a2 store %S.cimport.CImports %p2, ptr %a3 - %t4 = extractvalue { ptr, i64, i64 } { ptr @.str.6868, i64 11, i64 0 }, 0 + %t4 = extractvalue { ptr, i64, i64 } { ptr @.str.6878, i64 11, i64 0 }, 0 %t5 = icmp eq ptr %t4, null - %t6 = select i1 %t5, ptr @.str.6869, ptr %t4 + %t6 = select i1 %t5, ptr @.str.6879, ptr %t4 %t7 = call ptr @getenv(ptr %t6) store { ptr, i64, i64 } zeroinitializer, ptr %a8 call void @finch_str_from_c(ptr %a8, ptr %t7) @@ -105095,14 +105224,14 @@ entry: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp eq i64 %t15, 0 - br i1 %t16, label %then10219, label %endif10221 -then10219: + br i1 %t16, label %then10240, label %endif10242 +then10240: %t17 = load { ptr, i64, i64 }, ptr %a13 - store { ptr, i64, i64 } { ptr @.str.6870, i64 5, i64 0 }, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.6880, i64 5, i64 0 }, ptr %a13 store { ptr, i64, i64 } %t17, ptr %a18 call void @finch_str_drop(ptr %a18) - br label %endif10221 -endif10221: + br label %endif10242 +endif10242: %t19 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t19, ptr %a20 call void @finch_str_copy(ptr %a21, ptr %a20) @@ -105110,8 +105239,8 @@ endif10221: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t25 = load i1, ptr %t24 - br i1 %t25, label %then10222, label %else10223 -then10222: + br i1 %t25, label %then10243, label %else10244 +then10243: %t26 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 7 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 @@ -105121,22 +105250,22 @@ then10222: store { ptr, i64, i64 } %t30, ptr %a23 store { ptr, i64, i64 } %t31, ptr %a32 call void @finch_str_drop(ptr %a32) - br label %endif10224 -else10223: - %t33 = extractvalue { ptr, i64, i64 } { ptr @.str.6871, i64 8, i64 0 }, 0 + br label %endif10245 +else10244: + %t33 = extractvalue { ptr, i64, i64 } { ptr @.str.6881, i64 8, i64 0 }, 0 %t34 = icmp eq ptr %t33, null - %t35 = select i1 %t34, ptr @.str.6872, ptr %t33 + %t35 = select i1 %t34, ptr @.str.6882, ptr %t33 %t36 = call ptr @getenv(ptr %t35) store { ptr, i64, i64 } zeroinitializer, ptr %a37 call void @finch_str_from_c(ptr %a37, ptr %t36) %t38 = load { ptr, i64, i64 }, ptr %a37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp sgt i64 %t39, 0 - br i1 %t40, label %then10225, label %endif10227 -then10225: - %t41 = extractvalue { ptr, i64, i64 } { ptr @.str.6873, i64 8, i64 0 }, 0 + br i1 %t40, label %then10246, label %endif10248 +then10246: + %t41 = extractvalue { ptr, i64, i64 } { ptr @.str.6883, i64 8, i64 0 }, 0 %t42 = icmp eq ptr %t41, null - %t43 = select i1 %t42, ptr @.str.6874, ptr %t41 + %t43 = select i1 %t42, ptr @.str.6884, ptr %t41 %t44 = call ptr @getenv(ptr %t43) store { ptr, i64, i64 } zeroinitializer, ptr %a45 call void @finch_str_from_c(ptr %a45, ptr %t44) @@ -105148,10 +105277,10 @@ then10225: store { ptr, i64, i64 } %t49, ptr %a23 store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %endif10227 -endif10227: - br label %endif10224 -endif10224: + br label %endif10248 +endif10248: + br label %endif10245 +endif10245: %t52 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 2 %t53 = load { ptr, i64, i64 }, ptr %t52 %t54 = load %S.platform.Target, ptr %a2 @@ -105161,34 +105290,34 @@ endif10224: %t58 = xor i1 %t57, true %t59 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 2 %t60 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 1 - br i1 %t58, label %or.failed10228, label %or.ok10229 -or.failed10228: + br i1 %t58, label %or.failed10249, label %or.ok10250 +or.failed10249: store { ptr, i64, i64 } %t59, ptr %a61 %t62 = load { ptr, i64, i64 }, ptr %a61 %t63 = extractvalue { ptr, i64, i64 } %t62, 1 %t64 = trunc i64 %t63 to i32 %t65 = extractvalue { ptr, i64, i64 } %t62, 0 %t66 = icmp eq ptr %t65, null - %t67 = select i1 %t66, ptr @.str.6875, ptr %t65 - %t68 = call i32 (ptr, ...) @printf(ptr @.str.6876, i32 %t64, ptr %t67) - %t69 = call i32 (ptr, ...) @printf(ptr @.str.6877) + %t67 = select i1 %t66, ptr @.str.6885, ptr %t65 + %t68 = call i32 (ptr, ...) @printf(ptr @.str.6886, i32 %t64, ptr %t67) + %t69 = call i32 (ptr, ...) @printf(ptr @.str.6887) call void @finch_str_drop(ptr %a61) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 -or.ok10229: +or.ok10250: store { ptr, i64, i64 } %t60, ptr %a70 %t71 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t72 = load { ptr, i64, i64 }, ptr %t71 store { ptr, i64, i64 } %t72, ptr %a74 - store { ptr, i64, i64 } { ptr @.str.6878, i64 3, i64 0 }, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.6888, i64 3, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t76, ptr %a77 %t78 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a81 - store { ptr, i64, i64 } { ptr @.str.6879, i64 2, i64 0 }, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.6889, i64 2, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t83, ptr %a84 @@ -105199,162 +105328,173 @@ or.ok10229: store { ptr, i64, i64 } %t87, ptr %a89 %t90 = call i32 @finch_write_file(ptr %a88, ptr %a89) %t91 = icmp ne i32 %t90, 0 - store { ptr, i64, i64 } { ptr @.str.6880, i64 0, i64 0 }, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.6890, i64 0, i64 0 }, ptr %a92 %t93 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t94 = load i1, ptr %t93 - br i1 %t94, label %then10230, label %endif10232 -then10230: - %t95 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 - %t96 = load { ptr, i64, i64 }, ptr %t95 - store { ptr, i64, i64 } { ptr @.str.6881, i64 10, i64 0 }, ptr %a98 - store { ptr, i64, i64 } %t96, ptr %a99 - call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) - %t100 = load { ptr, i64, i64 }, ptr %a97 - %t101 = load { ptr, i64, i64 }, ptr %a92 - store { ptr, i64, i64 } %t100, ptr %a92 - store { ptr, i64, i64 } %t101, ptr %a102 - call void @finch_str_drop(ptr %a102) - br label %endif10232 -endif10232: - %t103 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 - %t104 = load { ptr, i64, i64 }, ptr %t103 - store { ptr, i64, i64 } %t104, ptr %a106 - store { ptr, i64, i64 } { ptr @.str.6882, i64 4, i64 0 }, ptr %a107 - call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) - %t108 = load { ptr, i64, i64 }, ptr %a105 - store { ptr, i64, i64 } %t108, ptr %a109 - %t110 = load { ptr, i64, i64 }, ptr %a13 - %t111 = load { ptr, i64, i64 }, ptr %a92 - store { ptr, i64, i64 } %t110, ptr %a113 - store { ptr, i64, i64 } %t111, ptr %a114 - call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) - %t115 = load { ptr, i64, i64 }, ptr %a112 - store { ptr, i64, i64 } %t115, ptr %a117 - store { ptr, i64, i64 } { ptr @.str.6883, i64 1, i64 0 }, ptr %a118 - call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) - store { ptr, i64, i64 } %t115, ptr %a119 - call void @finch_str_drop(ptr %a119) - %t120 = load { ptr, i64, i64 }, ptr %a116 - %t121 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3 - %t122 = load { ptr, i64, i64 }, ptr %t121 - store { ptr, i64, i64 } %t120, ptr %a124 - store { ptr, i64, i64 } %t122, ptr %a125 - call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) - store { ptr, i64, i64 } %t120, ptr %a126 - call void @finch_str_drop(ptr %a126) - %t127 = load { ptr, i64, i64 }, ptr %a123 - %t128 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4 - %t129 = load { ptr, i64, i64 }, ptr %t128 - store { ptr, i64, i64 } %t127, ptr %a131 - store { ptr, i64, i64 } %t129, ptr %a132 - call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) - store { ptr, i64, i64 } %t127, ptr %a133 - call void @finch_str_drop(ptr %a133) - %t134 = load { ptr, i64, i64 }, ptr %a130 - store { ptr, i64, i64 } %t134, ptr %a136 - store { ptr, i64, i64 } { ptr @.str.6884, i64 7, i64 0 }, ptr %a137 - call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) - store { ptr, i64, i64 } %t134, ptr %a138 - call void @finch_str_drop(ptr %a138) - %t139 = load { ptr, i64, i64 }, ptr %a135 - %t140 = load { ptr, i64, i64 }, ptr %a77 - %t141 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t140) - store { ptr, i64, i64 } %t139, ptr %a143 - store { ptr, i64, i64 } %t141, ptr %a144 - call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) - store { ptr, i64, i64 } %t139, ptr %a145 - call void @finch_str_drop(ptr %a145) - store { ptr, i64, i64 } %t141, ptr %a146 - call void @finch_str_drop(ptr %a146) - %t147 = load { ptr, i64, i64 }, ptr %a142 - store { ptr, i64, i64 } %t147, ptr %a149 - store { ptr, i64, i64 } { ptr @.str.6885, i64 4, i64 0 }, ptr %a150 - call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) - store { ptr, i64, i64 } %t147, ptr %a151 - call void @finch_str_drop(ptr %a151) - %t152 = load { ptr, i64, i64 }, ptr %a148 - %t153 = load { ptr, i64, i64 }, ptr %a84 - %t154 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t153) - store { ptr, i64, i64 } %t152, ptr %a156 - store { ptr, i64, i64 } %t154, ptr %a157 - call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) - store { ptr, i64, i64 } %t152, ptr %a158 - call void @finch_str_drop(ptr %a158) - store { ptr, i64, i64 } %t154, ptr %a159 - call void @finch_str_drop(ptr %a159) - %t160 = load { ptr, i64, i64 }, ptr %a155 - store { ptr, i64, i64 } %t160, ptr %a162 - store { ptr, i64, i64 } { ptr @.str.6886, i64 3, i64 0 }, ptr %a163 - call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) - store { ptr, i64, i64 } %t160, ptr %a164 - call void @finch_str_drop(ptr %a164) - %t165 = load { ptr, i64, i64 }, ptr %a161 - %t166 = load { ptr, i64, i64 }, ptr %a109 - %t167 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t166) - store { ptr, i64, i64 } %t165, ptr %a169 - store { ptr, i64, i64 } %t167, ptr %a170 - call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) - store { ptr, i64, i64 } %t165, ptr %a171 - call void @finch_str_drop(ptr %a171) - store { ptr, i64, i64 } %t167, ptr %a172 - call void @finch_str_drop(ptr %a172) - %t173 = load { ptr, i64, i64 }, ptr %a168 - store { ptr, i64, i64 } %t173, ptr %a175 - store { ptr, i64, i64 } { ptr @.str.6887, i64 5, i64 0 }, ptr %a176 - call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) - store { ptr, i64, i64 } %t173, ptr %a177 - call void @finch_str_drop(ptr %a177) - %t178 = load { ptr, i64, i64 }, ptr %a174 - %t179 = call i64 @finch.host.run({ ptr, i64, i64 } %t178) - store { ptr, i64, i64 } %t178, ptr %a180 + br label %logic.from10251 +logic.from10251: + br i1 %t94, label %logic.end10253, label %logic.rhs10252 +logic.rhs10252: + %t95 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t96 = load i1, ptr %t95 + br label %logic.rend10254 +logic.rend10254: + br label %logic.end10253 +logic.end10253: + %t97 = phi i1 [ true, %logic.from10251 ], [ %t96, %logic.rend10254 ] + br i1 %t97, label %then10255, label %endif10257 +then10255: + %t98 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 + %t99 = load { ptr, i64, i64 }, ptr %t98 + store { ptr, i64, i64 } { ptr @.str.6891, i64 10, i64 0 }, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a100 + %t104 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t103, ptr %a92 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + br label %endif10257 +endif10257: + %t106 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6892, i64 4, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load { ptr, i64, i64 }, ptr %a13 + %t114 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t113, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.6893, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3 + %t125 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t123, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t123, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4 + %t132 = load { ptr, i64, i64 }, ptr %t131 + store { ptr, i64, i64 } %t130, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t130, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.6894, i64 7, i64 0 }, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t137, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + %t143 = load { ptr, i64, i64 }, ptr %a77 + %t144 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t143) + store { ptr, i64, i64 } %t142, ptr %a146 + store { ptr, i64, i64 } %t144, ptr %a147 + call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) + store { ptr, i64, i64 } %t142, ptr %a148 + call void @finch_str_drop(ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.6895, i64 4, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load { ptr, i64, i64 }, ptr %a84 + %t157 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t156) + store { ptr, i64, i64 } %t155, ptr %a159 + store { ptr, i64, i64 } %t157, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t155, ptr %a161 + call void @finch_str_drop(ptr %a161) + store { ptr, i64, i64 } %t157, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a158 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.6896, i64 3, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = load { ptr, i64, i64 }, ptr %a112 + %t170 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t169) + store { ptr, i64, i64 } %t168, ptr %a172 + store { ptr, i64, i64 } %t170, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t168, ptr %a174 + call void @finch_str_drop(ptr %a174) + store { ptr, i64, i64 } %t170, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } %t176, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.6897, i64 5, i64 0 }, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t176, ptr %a180 call void @finch_str_drop(ptr %a180) - store i64 %t179, ptr %a181 - %t182 = load { ptr, i64, i64 }, ptr %a77 - call void @finch.host.remove({ ptr, i64, i64 } %t182) - %t183 = load i64, ptr %a181 - %t184 = icmp ne i64 %t183, 0 - br i1 %t184, label %then10233, label %endif10235 -then10233: - %t185 = load { ptr, i64, i64 }, ptr %a109 - store { ptr, i64, i64 } %t185, ptr %a186 - store { ptr, i64, i64 } zeroinitializer, ptr %a187 - store { ptr, i64, i64 } zeroinitializer, ptr %a188 - %t189 = call i32 @finch_try_read_file(ptr %a187, ptr %a186, ptr %a188) - %t190 = icmp eq i32 %t189, 0 - %t191 = load { ptr, i64, i64 }, ptr %a188 - %t192 = load { ptr, i64, i64 }, ptr %a187 - br i1 %t190, label %or.failed10236, label %or.ok10237 -or.failed10236: - store { ptr, i64, i64 } %t191, ptr %a193 - call void @finch_str_drop(ptr %a193) - br label %or.bend10238 -or.bend10238: - br label %or.end10239 -or.ok10237: - br label %or.end10239 -or.end10239: - %t194 = phi { ptr, i64, i64 } [ { ptr @.str.6888, i64 0, i64 0 }, %or.bend10238 ], [ %t192, %or.ok10237 ] - %t195 = extractvalue { ptr, i64, i64 } %t194, 1 - %t196 = trunc i64 %t195 to i32 - %t197 = extractvalue { ptr, i64, i64 } %t194, 0 - %t198 = icmp eq ptr %t197, null - %t199 = select i1 %t198, ptr @.str.6889, ptr %t197 - %t200 = call i32 (ptr, ...) @printf(ptr @.str.6890, i32 %t196, ptr %t199) - store { ptr, i64, i64 } %t194, ptr %a201 - call void @finch_str_drop(ptr %a201) - %t202 = call i32 (ptr, ...) @printf(ptr @.str.6891) - %t203 = extractvalue { ptr, i64, i64 } { ptr @.str.6892, i64 46, i64 0 }, 1 - %t204 = trunc i64 %t203 to i32 - %t205 = extractvalue { ptr, i64, i64 } { ptr @.str.6892, i64 46, i64 0 }, 0 - %t206 = icmp eq ptr %t205, null - %t207 = select i1 %t206, ptr @.str.6893, ptr %t205 - %t208 = call i32 (ptr, ...) @printf(ptr @.str.6894, i32 %t204, ptr %t207) - %t209 = call i32 (ptr, ...) @printf(ptr @.str.6895) - %t210 = load { ptr, i64, i64 }, ptr %a84 - call void @finch.host.remove({ ptr, i64, i64 } %t210) - %t211 = load { ptr, i64, i64 }, ptr %a109 - call void @finch.host.remove({ ptr, i64, i64 } %t211) - call void @finch_str_drop(ptr %a109) + %t181 = load { ptr, i64, i64 }, ptr %a177 + %t182 = call i64 @finch.host.run({ ptr, i64, i64 } %t181) + store { ptr, i64, i64 } %t181, ptr %a183 + call void @finch_str_drop(ptr %a183) + store i64 %t182, ptr %a184 + %t185 = load { ptr, i64, i64 }, ptr %a77 + call void @finch.host.remove({ ptr, i64, i64 } %t185) + %t186 = load i64, ptr %a184 + %t187 = icmp ne i64 %t186, 0 + br i1 %t187, label %then10258, label %endif10260 +then10258: + %t188 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t188, ptr %a189 + store { ptr, i64, i64 } zeroinitializer, ptr %a190 + store { ptr, i64, i64 } zeroinitializer, ptr %a191 + %t192 = call i32 @finch_try_read_file(ptr %a190, ptr %a189, ptr %a191) + %t193 = icmp eq i32 %t192, 0 + %t194 = load { ptr, i64, i64 }, ptr %a191 + %t195 = load { ptr, i64, i64 }, ptr %a190 + br i1 %t193, label %or.failed10261, label %or.ok10262 +or.failed10261: + store { ptr, i64, i64 } %t194, ptr %a196 + call void @finch_str_drop(ptr %a196) + br label %or.bend10263 +or.bend10263: + br label %or.end10264 +or.ok10262: + br label %or.end10264 +or.end10264: + %t197 = phi { ptr, i64, i64 } [ { ptr @.str.6898, i64 0, i64 0 }, %or.bend10263 ], [ %t195, %or.ok10262 ] + %t198 = extractvalue { ptr, i64, i64 } %t197, 1 + %t199 = trunc i64 %t198 to i32 + %t200 = extractvalue { ptr, i64, i64 } %t197, 0 + %t201 = icmp eq ptr %t200, null + %t202 = select i1 %t201, ptr @.str.6899, ptr %t200 + %t203 = call i32 (ptr, ...) @printf(ptr @.str.6900, i32 %t199, ptr %t202) + store { ptr, i64, i64 } %t197, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = call i32 (ptr, ...) @printf(ptr @.str.6901) + %t206 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 1 + %t207 = trunc i64 %t206 to i32 + %t208 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 0 + %t209 = icmp eq ptr %t208, null + %t210 = select i1 %t209, ptr @.str.6903, ptr %t208 + %t211 = call i32 (ptr, ...) @printf(ptr @.str.6904, i32 %t207, ptr %t210) + %t212 = call i32 (ptr, ...) @printf(ptr @.str.6905) + %t213 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t213) + %t214 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t214) + call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) @@ -105362,503 +105502,323 @@ or.end10239: call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 -endif10235: - %t212 = load { ptr, i64, i64 }, ptr %a23 - store { ptr, i64, i64 } %t212, ptr %a214 - store { ptr, i64, i64 } { ptr @.str.6896, i64 1, i64 0 }, ptr %a215 - call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) - %t216 = load { ptr, i64, i64 }, ptr %a213 - %t217 = load { ptr, i64, i64 }, ptr %a84 - %t218 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t217) - store { ptr, i64, i64 } %t216, ptr %a220 - store { ptr, i64, i64 } %t218, ptr %a221 - call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) - store { ptr, i64, i64 } %t216, ptr %a222 - call void @finch_str_drop(ptr %a222) - store { ptr, i64, i64 } %t218, ptr %a223 - call void @finch_str_drop(ptr %a223) - %t224 = load { ptr, i64, i64 }, ptr %a219 - store { ptr, i64, i64 } %t224, ptr %a226 - store { ptr, i64, i64 } { ptr @.str.6897, i64 1, i64 0 }, ptr %a227 - call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) - store { ptr, i64, i64 } %t224, ptr %a228 - call void @finch_str_drop(ptr %a228) - %t229 = load { ptr, i64, i64 }, ptr %a225 - %t230 = load { ptr, i64, i64 }, ptr %a70 - %t231 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t230) - store { ptr, i64, i64 } %t229, ptr %a233 - store { ptr, i64, i64 } %t231, ptr %a234 - call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) - store { ptr, i64, i64 } %t229, ptr %a235 - call void @finch_str_drop(ptr %a235) - store { ptr, i64, i64 } %t231, ptr %a236 - call void @finch_str_drop(ptr %a236) - %t237 = load { ptr, i64, i64 }, ptr %a232 - store { ptr, i64, i64 } %t237, ptr %a239 - store { ptr, i64, i64 } { ptr @.str.6898, i64 4, i64 0 }, ptr %a240 - call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240) - store { ptr, i64, i64 } %t237, ptr %a241 - call void @finch_str_drop(ptr %a241) - %t242 = load { ptr, i64, i64 }, ptr %a238 - %t243 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 - %t244 = load { ptr, i64, i64 }, ptr %t243 - %t245 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t244) - store { ptr, i64, i64 } %t242, ptr %a247 - store { ptr, i64, i64 } %t245, ptr %a248 - call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) - store { ptr, i64, i64 } %t242, ptr %a249 - call void @finch_str_drop(ptr %a249) +endif10260: + %t215 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.6906, i64 1, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + %t219 = load { ptr, i64, i64 }, ptr %a216 + %t220 = load { ptr, i64, i64 }, ptr %a84 + %t221 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t220) + store { ptr, i64, i64 } %t219, ptr %a223 + store { ptr, i64, i64 } %t221, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t219, ptr %a225 + call void @finch_str_drop(ptr %a225) + store { ptr, i64, i64 } %t221, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a222 + store { ptr, i64, i64 } %t227, ptr %a229 + store { ptr, i64, i64 } { ptr @.str.6907, i64 1, i64 0 }, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + store { ptr, i64, i64 } %t227, ptr %a231 + call void @finch_str_drop(ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a228 + %t233 = load { ptr, i64, i64 }, ptr %a70 + %t234 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t233) + store { ptr, i64, i64 } %t232, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t232, ptr %a238 + call void @finch_str_drop(ptr %a238) + store { ptr, i64, i64 } %t234, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t240, ptr %a242 + store { ptr, i64, i64 } { ptr @.str.6908, i64 4, i64 0 }, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t240, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + %t246 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t247 = load { ptr, i64, i64 }, ptr %t246 + %t248 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t247) store { ptr, i64, i64 } %t245, ptr %a250 - call void @finch_str_drop(ptr %a250) - %t251 = load { ptr, i64, i64 }, ptr %a246 - store { ptr, i64, i64 } %t251, ptr %a252 - %t253 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2 - %t254 = load i1, ptr %t253 - %t255 = xor i1 %t254, true - br i1 %t255, label %then10240, label %endif10242 -then10240: - %t256 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t256, ptr %a258 - store { ptr, i64, i64 } { ptr @.str.6899, i64 4, i64 0 }, ptr %a259 - call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) - %t260 = load { ptr, i64, i64 }, ptr %a257 - %t261 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t260, ptr %a252 - store { ptr, i64, i64 } %t261, ptr %a262 - call void @finch_str_drop(ptr %a262) - br label %endif10242 -endif10242: - %t263 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5 - %t264 = load i1, ptr %t263 - br i1 %t264, label %then10243, label %endif10245 -then10243: - %t265 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3 - %t266 = load i1, ptr %t265 - br i1 %t266, label %then10246, label %else10247 -then10246: - %t267 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t267, ptr %a269 - store { ptr, i64, i64 } { ptr @.str.6900, i64 12, i64 0 }, ptr %a270 - call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) - %t271 = load { ptr, i64, i64 }, ptr %a268 - %t272 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t271, ptr %a252 - store { ptr, i64, i64 } %t272, ptr %a273 - call void @finch_str_drop(ptr %a273) - br label %endif10248 -else10247: - %t274 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t245, ptr %a252 + call void @finch_str_drop(ptr %a252) + store { ptr, i64, i64 } %t248, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a249 + store { ptr, i64, i64 } %t254, ptr %a255 + %t256 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2 + %t257 = load i1, ptr %t256 + %t258 = xor i1 %t257, true + br i1 %t258, label %then10265, label %endif10267 +then10265: + %t259 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.6909, i64 4, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a260 + %t264 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t263, ptr %a255 + store { ptr, i64, i64 } %t264, ptr %a265 + call void @finch_str_drop(ptr %a265) + br label %endif10267 +endif10267: + %t266 = extractvalue { ptr, i64, i64 } { ptr @.str.6910, i64 13, i64 0 }, 0 + %t267 = icmp eq ptr %t266, null + %t268 = select i1 %t267, ptr @.str.6911, ptr %t266 + %t269 = call ptr @getenv(ptr %t268) + store { ptr, i64, i64 } zeroinitializer, ptr %a270 + call void @finch_str_from_c(ptr %a270, ptr %t269) + %t271 = load { ptr, i64, i64 }, ptr %a270 + %t272 = extractvalue { ptr, i64, i64 } %t271, 1 + %t273 = icmp sgt i64 %t272, 0 + br i1 %t273, label %then10268, label %endif10270 +then10268: + %t274 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t274, ptr %a276 - store { ptr, i64, i64 } { ptr @.str.6901, i64 8, i64 0 }, ptr %a277 + store { ptr, i64, i64 } { ptr @.str.6912, i64 1, i64 0 }, ptr %a277 call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) %t278 = load { ptr, i64, i64 }, ptr %a275 - %t279 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t278, ptr %a252 - store { ptr, i64, i64 } %t279, ptr %a280 - call void @finch_str_drop(ptr %a280) - br label %endif10248 -endif10248: - br label %endif10245 -endif10245: - store { ptr, i64, i64 } zeroinitializer, ptr %a281 - %t282 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6 - store i64 0, ptr %a283 - br label %each.cond10249 -each.cond10249: - %t284 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 - %t285 = load i64, ptr %t284 - %t286 = load i64, ptr %a283 - %t287 = icmp slt i64 %t286, %t285 - br i1 %t287, label %each.body10250, label %each.end10252 -each.body10250: - %t288 = load ptr, ptr %t282 - %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i64 %t286 - %t290 = load { ptr, i64, i64 }, ptr %t289 + %t279 = extractvalue { ptr, i64, i64 } { ptr @.str.6913, i64 13, i64 0 }, 0 + %t280 = icmp eq ptr %t279, null + %t281 = select i1 %t280, ptr @.str.6914, ptr %t279 + %t282 = call ptr @getenv(ptr %t281) + store { ptr, i64, i64 } zeroinitializer, ptr %a283 + call void @finch_str_from_c(ptr %a283, ptr %t282) + %t284 = load { ptr, i64, i64 }, ptr %a283 + store { ptr, i64, i64 } %t278, ptr %a286 + store { ptr, i64, i64 } %t284, ptr %a287 + call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287) + store { ptr, i64, i64 } %t278, ptr %a288 + call void @finch_str_drop(ptr %a288) + %t289 = load { ptr, i64, i64 }, ptr %a285 + %t290 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t289, ptr %a255 store { ptr, i64, i64 } %t290, ptr %a291 - %t292 = load { ptr, i64, i64 }, ptr %a291 - store { ptr, i64, i64 } %t292, ptr %a293 - store { ptr, i64, i64 } { ptr @.str.6903, i64 2, i64 0 }, ptr %a295 - %t296 = call i32 @finch_str_ends(ptr %a293, ptr %a295) - %t297 = icmp ne i32 %t296, 0 - br i1 %t297, label %then10253, label %else10254 -then10253: - %t298 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 - %t299 = load { ptr, i64, i64 }, ptr %t298 - store { ptr, i64, i64 } %t299, ptr %a301 - store { ptr, i64, i64 } { ptr @.str.6904, i64 1, i64 0 }, ptr %a302 - call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) - %t303 = load { ptr, i64, i64 }, ptr %a300 - %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %a281, i32 0, i32 1 - %t305 = load i64, ptr %t304 - call void @finch_str_from_int(ptr %a306, i64 %t305) - %t307 = load { ptr, i64, i64 }, ptr %a306 - store { ptr, i64, i64 } %t303, ptr %a309 - store { ptr, i64, i64 } %t307, ptr %a310 - call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) - store { ptr, i64, i64 } %t303, ptr %a311 - call void @finch_str_drop(ptr %a311) - store { ptr, i64, i64 } %t307, ptr %a312 - call void @finch_str_drop(ptr %a312) - %t313 = load { ptr, i64, i64 }, ptr %a308 - store { ptr, i64, i64 } %t313, ptr %a315 - store { ptr, i64, i64 } { ptr @.str.6905, i64 2, i64 0 }, ptr %a316 - call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) - store { ptr, i64, i64 } %t313, ptr %a317 - call void @finch_str_drop(ptr %a317) - %t318 = load { ptr, i64, i64 }, ptr %a314 - store { ptr, i64, i64 } %t318, ptr %a319 - store { ptr, i64, i64 } { ptr @.str.6906, i64 6, i64 0 }, ptr %a320 - %t321 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 - %t322 = load i1, ptr %t321 - br i1 %t322, label %then10256, label %endif10258 -then10256: - %t323 = load { ptr, i64, i64 }, ptr %a320 - store { ptr, i64, i64 } { ptr @.str.6907, i64 0, i64 0 }, ptr %a320 - store { ptr, i64, i64 } %t323, ptr %a324 - call void @finch_str_drop(ptr %a324) - br label %endif10258 -endif10258: - %t325 = load { ptr, i64, i64 }, ptr %a23 - store { ptr, i64, i64 } %t325, ptr %a327 - store { ptr, i64, i64 } { ptr @.str.6908, i64 4, i64 0 }, ptr %a328 - call void @finch_str_concat(ptr %a326, ptr %a327, ptr %a328) - %t329 = load { ptr, i64, i64 }, ptr %a326 - %t330 = load { ptr, i64, i64 }, ptr %a320 - store { ptr, i64, i64 } %t329, ptr %a332 - store { ptr, i64, i64 } %t330, ptr %a333 - call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333) - store { ptr, i64, i64 } %t329, ptr %a334 - call void @finch_str_drop(ptr %a334) - %t335 = load { ptr, i64, i64 }, ptr %a331 - store { ptr, i64, i64 } %t335, ptr %a337 - store { ptr, i64, i64 } { ptr @.str.6909, i64 4, i64 0 }, ptr %a338 - call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) - store { ptr, i64, i64 } %t335, ptr %a339 - call void @finch_str_drop(ptr %a339) - %t340 = load { ptr, i64, i64 }, ptr %a336 - %t341 = load { ptr, i64, i64 }, ptr %a291 - %t342 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t341) - store { ptr, i64, i64 } %t340, ptr %a344 - store { ptr, i64, i64 } %t342, ptr %a345 - call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) - store { ptr, i64, i64 } %t340, ptr %a346 - call void @finch_str_drop(ptr %a346) - store { ptr, i64, i64 } %t342, ptr %a347 - call void @finch_str_drop(ptr %a347) - %t348 = load { ptr, i64, i64 }, ptr %a343 - store { ptr, i64, i64 } %t348, ptr %a350 - store { ptr, i64, i64 } { ptr @.str.6910, i64 4, i64 0 }, ptr %a351 - call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) - store { ptr, i64, i64 } %t348, ptr %a352 - call void @finch_str_drop(ptr %a352) - %t353 = load { ptr, i64, i64 }, ptr %a349 - %t354 = load { ptr, i64, i64 }, ptr %a319 - %t355 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t354) - store { ptr, i64, i64 } %t353, ptr %a357 - store { ptr, i64, i64 } %t355, ptr %a358 - call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358) - store { ptr, i64, i64 } %t353, ptr %a359 - call void @finch_str_drop(ptr %a359) - store { ptr, i64, i64 } %t355, ptr %a360 - call void @finch_str_drop(ptr %a360) - %t361 = load { ptr, i64, i64 }, ptr %a356 - store { ptr, i64, i64 } %t361, ptr %a363 - store { ptr, i64, i64 } { ptr @.str.6911, i64 3, i64 0 }, ptr %a364 - call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) - store { ptr, i64, i64 } %t361, ptr %a365 - call void @finch_str_drop(ptr %a365) - %t366 = load { ptr, i64, i64 }, ptr %a362 - %t367 = load { ptr, i64, i64 }, ptr %a109 - %t368 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t367) - store { ptr, i64, i64 } %t366, ptr %a370 - store { ptr, i64, i64 } %t368, ptr %a371 - call void @finch_str_concat(ptr %a369, ptr %a370, ptr %a371) - store { ptr, i64, i64 } %t366, ptr %a372 - call void @finch_str_drop(ptr %a372) - store { ptr, i64, i64 } %t368, ptr %a373 - call void @finch_str_drop(ptr %a373) - %t374 = load { ptr, i64, i64 }, ptr %a369 - store { ptr, i64, i64 } %t374, ptr %a376 - store { ptr, i64, i64 } { ptr @.str.6912, i64 5, i64 0 }, ptr %a377 - call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377) - store { ptr, i64, i64 } %t374, ptr %a378 - call void @finch_str_drop(ptr %a378) - %t379 = load { ptr, i64, i64 }, ptr %a375 - %t380 = call i64 @finch.host.run({ ptr, i64, i64 } %t379) - store { ptr, i64, i64 } %t379, ptr %a381 - call void @finch_str_drop(ptr %a381) - store i64 %t380, ptr %a382 - %t383 = load i64, ptr %a382 - %t384 = icmp ne i64 %t383, 0 - br i1 %t384, label %then10259, label %endif10261 -then10259: - %t385 = load { ptr, i64, i64 }, ptr %a109 - store { ptr, i64, i64 } %t385, ptr %a386 - store { ptr, i64, i64 } zeroinitializer, ptr %a387 - store { ptr, i64, i64 } zeroinitializer, ptr %a388 - %t389 = call i32 @finch_try_read_file(ptr %a387, ptr %a386, ptr %a388) - %t390 = icmp eq i32 %t389, 0 - %t391 = load { ptr, i64, i64 }, ptr %a388 - %t392 = load { ptr, i64, i64 }, ptr %a387 - br i1 %t390, label %or.failed10262, label %or.ok10263 -or.failed10262: - store { ptr, i64, i64 } %t391, ptr %a393 - call void @finch_str_drop(ptr %a393) - br label %or.bend10264 -or.bend10264: - br label %or.end10265 -or.ok10263: - br label %or.end10265 -or.end10265: - %t394 = phi { ptr, i64, i64 } [ { ptr @.str.6913, i64 0, i64 0 }, %or.bend10264 ], [ %t392, %or.ok10263 ] - store { ptr, i64, i64 } %t394, ptr %a396 - store { ptr, i64, i64 } { ptr @.str.6914, i64 24, i64 0 }, ptr %a397 - call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) - store { ptr, i64, i64 } %t394, ptr %a398 - call void @finch_str_drop(ptr %a398) - %t399 = load { ptr, i64, i64 }, ptr %a395 - %t400 = load { ptr, i64, i64 }, ptr %a291 - store { ptr, i64, i64 } %t399, ptr %a402 - store { ptr, i64, i64 } %t400, ptr %a403 - call void @finch_str_concat(ptr %a401, ptr %a402, ptr %a403) - store { ptr, i64, i64 } %t399, ptr %a404 - call void @finch_str_drop(ptr %a404) - %t405 = load { ptr, i64, i64 }, ptr %a401 - %t406 = extractvalue { ptr, i64, i64 } %t405, 1 - %t407 = trunc i64 %t406 to i32 - %t408 = extractvalue { ptr, i64, i64 } %t405, 0 - %t409 = icmp eq ptr %t408, null - %t410 = select i1 %t409, ptr @.str.6915, ptr %t408 - %t411 = call i32 (ptr, ...) @printf(ptr @.str.6916, i32 %t407, ptr %t410) - store { ptr, i64, i64 } %t405, ptr %a412 - call void @finch_str_drop(ptr %a412) - %t413 = call i32 (ptr, ...) @printf(ptr @.str.6917) - %t414 = load { ptr, i64, i64 }, ptr %a84 - call void @finch.host.remove({ ptr, i64, i64 } %t414) - %t415 = load { ptr, i64, i64 }, ptr %a109 - call void @finch.host.remove({ ptr, i64, i64 } %t415) - %t416 = load { ptr, i64, i64 }, ptr %a319 - call void @finch.host.remove({ ptr, i64, i64 } %t416) - call void @finch_str_drop(ptr %a320) - call void @finch_str_drop(ptr %a319) - call void @finch.drop.arr_str(ptr %a281) - call void @finch_str_drop(ptr %a252) - call void @finch_str_drop(ptr %a109) - call void @finch_str_drop(ptr %a92) - call void @finch_str_drop(ptr %a84) - call void @finch_str_drop(ptr %a77) - call void @finch_str_drop(ptr %a70) - call void @finch_str_drop(ptr %a23) - call void @finch_str_drop(ptr %a13) - ret i64 1 -endif10261: - %t417 = getelementptr inbounds { ptr, i64, i64 }, ptr %a281, i32 0, i32 1 - %t418 = load { ptr, i64, i64 }, ptr %a319 - store { ptr, i64, i64 } %t418, ptr %a419 - call void @finch_str_copy(ptr %a420, ptr %a419) - %t421 = load { ptr, i64, i64 }, ptr %a420 - %t422 = load i64, ptr %t417 - %t423 = add i64 %t422, 1 - call void @finch_arr_reserve(ptr %a281, i64 %t423, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) - %t424 = load ptr, ptr %a281 - %t425 = getelementptr inbounds { ptr, i64, i64 }, ptr %t424, i64 %t422 - store { ptr, i64, i64 } %t421, ptr %t425 - store i64 %t423, ptr %t417 - %t426 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t426, ptr %a428 - store { ptr, i64, i64 } { ptr @.str.6918, i64 1, i64 0 }, ptr %a429 - call void @finch_str_concat(ptr %a427, ptr %a428, ptr %a429) - %t430 = load { ptr, i64, i64 }, ptr %a427 - %t431 = load { ptr, i64, i64 }, ptr %a319 - %t432 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t431) - store { ptr, i64, i64 } %t430, ptr %a434 - store { ptr, i64, i64 } %t432, ptr %a435 - call void @finch_str_concat(ptr %a433, ptr %a434, ptr %a435) - store { ptr, i64, i64 } %t430, ptr %a436 - call void @finch_str_drop(ptr %a436) - store { ptr, i64, i64 } %t432, ptr %a437 - call void @finch_str_drop(ptr %a437) - %t438 = load { ptr, i64, i64 }, ptr %a433 - %t439 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t438, ptr %a252 - store { ptr, i64, i64 } %t439, ptr %a440 - call void @finch_str_drop(ptr %a440) - call void @finch_str_drop(ptr %a320) - call void @finch_str_drop(ptr %a319) - br label %endif10255 -else10254: - %t441 = load { ptr, i64, i64 }, ptr %a291 - store { ptr, i64, i64 } %t441, ptr %a442 - store { ptr, i64, i64 } { ptr @.str.6920, i64 2, i64 0 }, ptr %a444 - %t445 = call i32 @finch_str_ends(ptr %a442, ptr %a444) - %t446 = icmp ne i32 %t445, 0 - br label %logic.from10266 -logic.from10266: - br i1 %t446, label %logic.end10268, label %logic.rhs10267 -logic.rhs10267: - %t447 = load { ptr, i64, i64 }, ptr %a291 - store { ptr, i64, i64 } %t447, ptr %a448 - store { ptr, i64, i64 } { ptr @.str.6922, i64 2, i64 0 }, ptr %a450 - %t451 = call i32 @finch_str_ends(ptr %a448, ptr %a450) - %t452 = icmp ne i32 %t451, 0 - br label %logic.rend10269 -logic.rend10269: - br label %logic.end10268 -logic.end10268: - %t453 = phi i1 [ true, %logic.from10266 ], [ %t452, %logic.rend10269 ] - br i1 %t453, label %then10270, label %else10271 -then10270: - %t454 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t454, ptr %a456 - store { ptr, i64, i64 } { ptr @.str.6923, i64 1, i64 0 }, ptr %a457 - call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457) - %t458 = load { ptr, i64, i64 }, ptr %a455 - %t459 = load { ptr, i64, i64 }, ptr %a291 - %t460 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t459) - store { ptr, i64, i64 } %t458, ptr %a462 - store { ptr, i64, i64 } %t460, ptr %a463 - call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) - store { ptr, i64, i64 } %t458, ptr %a464 - call void @finch_str_drop(ptr %a464) - store { ptr, i64, i64 } %t460, ptr %a465 - call void @finch_str_drop(ptr %a465) - %t466 = load { ptr, i64, i64 }, ptr %a461 - %t467 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t466, ptr %a252 - store { ptr, i64, i64 } %t467, ptr %a468 - call void @finch_str_drop(ptr %a468) - br label %endif10272 -else10271: - %t469 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t469, ptr %a471 - store { ptr, i64, i64 } { ptr @.str.6924, i64 1, i64 0 }, ptr %a472 - call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) - %t473 = load { ptr, i64, i64 }, ptr %a470 - %t474 = load { ptr, i64, i64 }, ptr %a291 - %t475 = load %S.platform.Target, ptr %a2 - %t476 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t474, %S.platform.Target %t475) - store { ptr, i64, i64 } %t473, ptr %a478 - store { ptr, i64, i64 } %t476, ptr %a479 - call void @finch_str_concat(ptr %a477, ptr %a478, ptr %a479) - store { ptr, i64, i64 } %t473, ptr %a480 - call void @finch_str_drop(ptr %a480) - store { ptr, i64, i64 } %t476, ptr %a481 - call void @finch_str_drop(ptr %a481) - %t482 = load { ptr, i64, i64 }, ptr %a477 - %t483 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t482, ptr %a252 - store { ptr, i64, i64 } %t483, ptr %a484 - call void @finch_str_drop(ptr %a484) - br label %endif10272 -endif10272: - br label %endif10255 -endif10255: - br label %each.step10251 -each.step10251: - %t485 = load i64, ptr %a283 - %t486 = add i64 %t485, 1 - store i64 %t486, ptr %a283 - br label %each.cond10249 -each.end10252: - %t487 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t487, ptr %a489 - store { ptr, i64, i64 } { ptr @.str.6925, i64 3, i64 0 }, ptr %a490 - call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) - %t491 = load { ptr, i64, i64 }, ptr %a488 - %t492 = load { ptr, i64, i64 }, ptr %a109 - %t493 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t492) - store { ptr, i64, i64 } %t491, ptr %a495 - store { ptr, i64, i64 } %t493, ptr %a496 - call void @finch_str_concat(ptr %a494, ptr %a495, ptr %a496) - store { ptr, i64, i64 } %t491, ptr %a497 - call void @finch_str_drop(ptr %a497) - store { ptr, i64, i64 } %t493, ptr %a498 - call void @finch_str_drop(ptr %a498) - %t499 = load { ptr, i64, i64 }, ptr %a494 - store { ptr, i64, i64 } %t499, ptr %a501 - store { ptr, i64, i64 } { ptr @.str.6926, i64 5, i64 0 }, ptr %a502 - call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) - store { ptr, i64, i64 } %t499, ptr %a503 - call void @finch_str_drop(ptr %a503) - %t504 = load { ptr, i64, i64 }, ptr %a500 - %t505 = call i64 @finch.host.run({ ptr, i64, i64 } %t504) - store { ptr, i64, i64 } %t504, ptr %a506 - call void @finch_str_drop(ptr %a506) - store i64 %t505, ptr %a507 - %t508 = load { ptr, i64, i64 }, ptr %a109 - store { ptr, i64, i64 } %t508, ptr %a509 - store { ptr, i64, i64 } zeroinitializer, ptr %a510 - store { ptr, i64, i64 } zeroinitializer, ptr %a511 - %t512 = call i32 @finch_try_read_file(ptr %a510, ptr %a509, ptr %a511) - %t513 = icmp eq i32 %t512, 0 - %t514 = load { ptr, i64, i64 }, ptr %a511 - %t515 = load { ptr, i64, i64 }, ptr %a510 - br i1 %t513, label %or.failed10273, label %or.ok10274 -or.failed10273: - store { ptr, i64, i64 } %t514, ptr %a516 - call void @finch_str_drop(ptr %a516) - br label %or.bend10275 -or.bend10275: - br label %or.end10276 -or.ok10274: - br label %or.end10276 -or.end10276: - %t517 = phi { ptr, i64, i64 } [ { ptr @.str.6927, i64 0, i64 0 }, %or.bend10275 ], [ %t515, %or.ok10274 ] - store { ptr, i64, i64 } %t517, ptr %a518 - %t519 = load { ptr, i64, i64 }, ptr %a84 - call void @finch.host.remove({ ptr, i64, i64 } %t519) - %t520 = load { ptr, i64, i64 }, ptr %a109 - call void @finch.host.remove({ ptr, i64, i64 } %t520) - store i64 0, ptr %a521 + call void @finch_str_drop(ptr %a291) + br label %endif10270 +endif10270: + %t292 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5 + %t293 = load i1, ptr %t292 + br i1 %t293, label %then10271, label %endif10273 +then10271: + %t294 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3 + %t295 = load i1, ptr %t294 + br i1 %t295, label %then10274, label %else10275 +then10274: + %t296 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.6915, i64 12, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + %t301 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t300, ptr %a255 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + br label %endif10276 +else10275: + %t303 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t303, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.6916, i64 8, i64 0 }, ptr %a306 + call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a304 + %t308 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t307, ptr %a255 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10276 +endif10276: + br label %endif10273 +endif10273: + store { ptr, i64, i64 } zeroinitializer, ptr %a310 + %t311 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6 + store i64 0, ptr %a312 br label %each.cond10277 each.cond10277: - %t522 = getelementptr inbounds { ptr, i64, i64 }, ptr %a281, i32 0, i32 1 - %t523 = load i64, ptr %t522 - %t524 = load i64, ptr %a521 - %t525 = icmp slt i64 %t524, %t523 - br i1 %t525, label %each.body10278, label %each.end10280 + %t313 = getelementptr inbounds { ptr, i64, i64 }, ptr %t311, i32 0, i32 1 + %t314 = load i64, ptr %t313 + %t315 = load i64, ptr %a312 + %t316 = icmp slt i64 %t315, %t314 + br i1 %t316, label %each.body10278, label %each.end10280 each.body10278: - %t526 = load ptr, ptr %a281 - %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t524 - %t528 = load { ptr, i64, i64 }, ptr %t527 - store { ptr, i64, i64 } %t528, ptr %a529 - %t530 = load { ptr, i64, i64 }, ptr %a529 - call void @finch.host.remove({ ptr, i64, i64 } %t530) - br label %each.step10279 -each.step10279: - %t531 = load i64, ptr %a521 - %t532 = add i64 %t531, 1 - store i64 %t532, ptr %a521 - br label %each.cond10277 -each.end10280: - %t533 = load i64, ptr %a507 - %t534 = icmp eq i64 %t533, 127 - br i1 %t534, label %then10281, label %endif10283 + %t317 = load ptr, ptr %t311 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i64 %t315 + %t319 = load { ptr, i64, i64 }, ptr %t318 + store { ptr, i64, i64 } %t319, ptr %a320 + %t321 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t321, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.6918, i64 2, i64 0 }, ptr %a324 + %t325 = call i32 @finch_str_ends(ptr %a322, ptr %a324) + %t326 = icmp ne i32 %t325, 0 + br i1 %t326, label %then10281, label %else10282 then10281: - %t535 = load { ptr, i64, i64 }, ptr %a23 - store { ptr, i64, i64 } { ptr @.str.6928, i64 42, i64 0 }, ptr %a537 - store { ptr, i64, i64 } %t535, ptr %a538 - call void @finch_str_concat(ptr %a536, ptr %a537, ptr %a538) - %t539 = load { ptr, i64, i64 }, ptr %a536 - store { ptr, i64, i64 } %t539, ptr %a541 - store { ptr, i64, i64 } { ptr @.str.6929, i64 32, i64 0 }, ptr %a542 - call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) - store { ptr, i64, i64 } %t539, ptr %a543 - call void @finch_str_drop(ptr %a543) - %t544 = load { ptr, i64, i64 }, ptr %a540 - %t545 = extractvalue { ptr, i64, i64 } %t544, 1 - %t546 = trunc i64 %t545 to i32 - %t547 = extractvalue { ptr, i64, i64 } %t544, 0 - %t548 = icmp eq ptr %t547, null - %t549 = select i1 %t548, ptr @.str.6930, ptr %t547 - %t550 = call i32 (ptr, ...) @printf(ptr @.str.6931, i32 %t546, ptr %t549) - store { ptr, i64, i64 } %t544, ptr %a551 - call void @finch_str_drop(ptr %a551) - %t552 = call i32 (ptr, ...) @printf(ptr @.str.6932) - call void @finch_str_drop(ptr %a518) - call void @finch.drop.arr_str(ptr %a281) - call void @finch_str_drop(ptr %a252) - call void @finch_str_drop(ptr %a109) + %t327 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t328 = load { ptr, i64, i64 }, ptr %t327 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6919, i64 1, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a329 + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t334 = load i64, ptr %t333 + call void @finch_str_from_int(ptr %a335, i64 %t334) + %t336 = load { ptr, i64, i64 }, ptr %a335 + store { ptr, i64, i64 } %t332, ptr %a338 + store { ptr, i64, i64 } %t336, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t332, ptr %a340 + call void @finch_str_drop(ptr %a340) + store { ptr, i64, i64 } %t336, ptr %a341 + call void @finch_str_drop(ptr %a341) + %t342 = load { ptr, i64, i64 }, ptr %a337 + store { ptr, i64, i64 } %t342, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.6920, i64 2, i64 0 }, ptr %a345 + call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) + store { ptr, i64, i64 } %t342, ptr %a346 + call void @finch_str_drop(ptr %a346) + %t347 = load { ptr, i64, i64 }, ptr %a343 + store { ptr, i64, i64 } %t347, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.6921, i64 6, i64 0 }, ptr %a349 + %t350 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t351 = load i1, ptr %t350 + br i1 %t351, label %then10284, label %endif10286 +then10284: + %t352 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } { ptr @.str.6922, i64 0, i64 0 }, ptr %a349 + store { ptr, i64, i64 } %t352, ptr %a353 + call void @finch_str_drop(ptr %a353) + br label %endif10286 +endif10286: + %t354 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t354, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.6923, i64 4, i64 0 }, ptr %a357 + call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a355 + %t359 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } %t358, ptr %a361 + store { ptr, i64, i64 } %t359, ptr %a362 + call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) + store { ptr, i64, i64 } %t358, ptr %a363 + call void @finch_str_drop(ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a360 + store { ptr, i64, i64 } %t364, ptr %a366 + store { ptr, i64, i64 } { ptr @.str.6924, i64 4, i64 0 }, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t364, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a365 + %t370 = load { ptr, i64, i64 }, ptr %a320 + %t371 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t370) + store { ptr, i64, i64 } %t369, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t369, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t371, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a372 + store { ptr, i64, i64 } %t377, ptr %a379 + store { ptr, i64, i64 } { ptr @.str.6925, i64 4, i64 0 }, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + %t383 = load { ptr, i64, i64 }, ptr %a348 + %t384 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t383) + store { ptr, i64, i64 } %t382, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + store { ptr, i64, i64 } %t382, ptr %a388 + call void @finch_str_drop(ptr %a388) + store { ptr, i64, i64 } %t384, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t390, ptr %a392 + store { ptr, i64, i64 } { ptr @.str.6926, i64 3, i64 0 }, ptr %a393 + call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) + store { ptr, i64, i64 } %t390, ptr %a394 + call void @finch_str_drop(ptr %a394) + %t395 = load { ptr, i64, i64 }, ptr %a391 + %t396 = load { ptr, i64, i64 }, ptr %a112 + %t397 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t396) + store { ptr, i64, i64 } %t395, ptr %a399 + store { ptr, i64, i64 } %t397, ptr %a400 + call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) + store { ptr, i64, i64 } %t395, ptr %a401 + call void @finch_str_drop(ptr %a401) + store { ptr, i64, i64 } %t397, ptr %a402 + call void @finch_str_drop(ptr %a402) + %t403 = load { ptr, i64, i64 }, ptr %a398 + store { ptr, i64, i64 } %t403, ptr %a405 + store { ptr, i64, i64 } { ptr @.str.6927, i64 5, i64 0 }, ptr %a406 + call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406) + store { ptr, i64, i64 } %t403, ptr %a407 + call void @finch_str_drop(ptr %a407) + %t408 = load { ptr, i64, i64 }, ptr %a404 + %t409 = call i64 @finch.host.run({ ptr, i64, i64 } %t408) + store { ptr, i64, i64 } %t408, ptr %a410 + call void @finch_str_drop(ptr %a410) + store i64 %t409, ptr %a411 + %t412 = load i64, ptr %a411 + %t413 = icmp ne i64 %t412, 0 + br i1 %t413, label %then10287, label %endif10289 +then10287: + %t414 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t414, ptr %a415 + store { ptr, i64, i64 } zeroinitializer, ptr %a416 + store { ptr, i64, i64 } zeroinitializer, ptr %a417 + %t418 = call i32 @finch_try_read_file(ptr %a416, ptr %a415, ptr %a417) + %t419 = icmp eq i32 %t418, 0 + %t420 = load { ptr, i64, i64 }, ptr %a417 + %t421 = load { ptr, i64, i64 }, ptr %a416 + br i1 %t419, label %or.failed10290, label %or.ok10291 +or.failed10290: + store { ptr, i64, i64 } %t420, ptr %a422 + call void @finch_str_drop(ptr %a422) + br label %or.bend10292 +or.bend10292: + br label %or.end10293 +or.ok10291: + br label %or.end10293 +or.end10293: + %t423 = phi { ptr, i64, i64 } [ { ptr @.str.6928, i64 0, i64 0 }, %or.bend10292 ], [ %t421, %or.ok10291 ] + store { ptr, i64, i64 } %t423, ptr %a425 + store { ptr, i64, i64 } { ptr @.str.6929, i64 24, i64 0 }, ptr %a426 + call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) + store { ptr, i64, i64 } %t423, ptr %a427 + call void @finch_str_drop(ptr %a427) + %t428 = load { ptr, i64, i64 }, ptr %a424 + %t429 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t428, ptr %a431 + store { ptr, i64, i64 } %t429, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t428, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = extractvalue { ptr, i64, i64 } %t434, 1 + %t436 = trunc i64 %t435 to i32 + %t437 = extractvalue { ptr, i64, i64 } %t434, 0 + %t438 = icmp eq ptr %t437, null + %t439 = select i1 %t438, ptr @.str.6930, ptr %t437 + %t440 = call i32 (ptr, ...) @printf(ptr @.str.6931, i32 %t436, ptr %t439) + store { ptr, i64, i64 } %t434, ptr %a441 + call void @finch_str_drop(ptr %a441) + %t442 = call i32 (ptr, ...) @printf(ptr @.str.6932) + %t443 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t443) + %t444 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t444) + %t445 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.host.remove({ ptr, i64, i64 } %t445) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) @@ -105866,46 +105826,261 @@ then10281: call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 +endif10289: + %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t447 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t447, ptr %a448 + call void @finch_str_copy(ptr %a449, ptr %a448) + %t450 = load { ptr, i64, i64 }, ptr %a449 + %t451 = load i64, ptr %t446 + %t452 = add i64 %t451, 1 + call void @finch_arr_reserve(ptr %a310, i64 %t452, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t453 = load ptr, ptr %a310 + %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t451 + store { ptr, i64, i64 } %t450, ptr %t454 + store i64 %t452, ptr %t446 + %t455 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t455, ptr %a457 + store { ptr, i64, i64 } { ptr @.str.6933, i64 1, i64 0 }, ptr %a458 + call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) + %t459 = load { ptr, i64, i64 }, ptr %a456 + %t460 = load { ptr, i64, i64 }, ptr %a348 + %t461 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t460) + store { ptr, i64, i64 } %t459, ptr %a463 + store { ptr, i64, i64 } %t461, ptr %a464 + call void @finch_str_concat(ptr %a462, ptr %a463, ptr %a464) + store { ptr, i64, i64 } %t459, ptr %a465 + call void @finch_str_drop(ptr %a465) + store { ptr, i64, i64 } %t461, ptr %a466 + call void @finch_str_drop(ptr %a466) + %t467 = load { ptr, i64, i64 }, ptr %a462 + %t468 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t467, ptr %a255 + store { ptr, i64, i64 } %t468, ptr %a469 + call void @finch_str_drop(ptr %a469) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + br label %endif10283 +else10282: + %t470 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t470, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.6935, i64 2, i64 0 }, ptr %a473 + %t474 = call i32 @finch_str_ends(ptr %a471, ptr %a473) + %t475 = icmp ne i32 %t474, 0 + br label %logic.from10294 +logic.from10294: + br i1 %t475, label %logic.end10296, label %logic.rhs10295 +logic.rhs10295: + %t476 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t476, ptr %a477 + store { ptr, i64, i64 } { ptr @.str.6937, i64 2, i64 0 }, ptr %a479 + %t480 = call i32 @finch_str_ends(ptr %a477, ptr %a479) + %t481 = icmp ne i32 %t480, 0 + br label %logic.rend10297 +logic.rend10297: + br label %logic.end10296 +logic.end10296: + %t482 = phi i1 [ true, %logic.from10294 ], [ %t481, %logic.rend10297 ] + br i1 %t482, label %then10298, label %else10299 +then10298: + %t483 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t483, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.6938, i64 1, i64 0 }, ptr %a486 + call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) + %t487 = load { ptr, i64, i64 }, ptr %a484 + %t488 = load { ptr, i64, i64 }, ptr %a320 + %t489 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t488) + store { ptr, i64, i64 } %t487, ptr %a491 + store { ptr, i64, i64 } %t489, ptr %a492 + call void @finch_str_concat(ptr %a490, ptr %a491, ptr %a492) + store { ptr, i64, i64 } %t487, ptr %a493 + call void @finch_str_drop(ptr %a493) + store { ptr, i64, i64 } %t489, ptr %a494 + call void @finch_str_drop(ptr %a494) + %t495 = load { ptr, i64, i64 }, ptr %a490 + %t496 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t495, ptr %a255 + store { ptr, i64, i64 } %t496, ptr %a497 + call void @finch_str_drop(ptr %a497) + br label %endif10300 +else10299: + %t498 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t498, ptr %a500 + store { ptr, i64, i64 } { ptr @.str.6939, i64 1, i64 0 }, ptr %a501 + call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) + %t502 = load { ptr, i64, i64 }, ptr %a499 + %t503 = load { ptr, i64, i64 }, ptr %a320 + %t504 = load %S.platform.Target, ptr %a2 + %t505 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t503, %S.platform.Target %t504) + store { ptr, i64, i64 } %t502, ptr %a507 + store { ptr, i64, i64 } %t505, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t502, ptr %a509 + call void @finch_str_drop(ptr %a509) + store { ptr, i64, i64 } %t505, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a506 + %t512 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t511, ptr %a255 + store { ptr, i64, i64 } %t512, ptr %a513 + call void @finch_str_drop(ptr %a513) + br label %endif10300 +endif10300: + br label %endif10283 endif10283: - %t553 = load i64, ptr %a507 - %t554 = icmp ne i64 %t553, 0 - br i1 %t554, label %then10284, label %endif10286 -then10284: - %t555 = load { ptr, i64, i64 }, ptr %a518 - %t556 = load %S.cimport.CImports, ptr %a3 - %t557 = load %S.platform.Target, ptr %a2 - %t558 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t555, %S.cimport.CImports %t556, %S.platform.Target %t557) - call void @finch_str_drop(ptr %a518) - call void @finch.drop.arr_str(ptr %a281) - call void @finch_str_drop(ptr %a252) - call void @finch_str_drop(ptr %a109) + br label %each.step10279 +each.step10279: + %t514 = load i64, ptr %a312 + %t515 = add i64 %t514, 1 + store i64 %t515, ptr %a312 + br label %each.cond10277 +each.end10280: + %t516 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t516, ptr %a518 + store { ptr, i64, i64 } { ptr @.str.6940, i64 3, i64 0 }, ptr %a519 + call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519) + %t520 = load { ptr, i64, i64 }, ptr %a517 + %t521 = load { ptr, i64, i64 }, ptr %a112 + %t522 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t521) + store { ptr, i64, i64 } %t520, ptr %a524 + store { ptr, i64, i64 } %t522, ptr %a525 + call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) + store { ptr, i64, i64 } %t520, ptr %a526 + call void @finch_str_drop(ptr %a526) + store { ptr, i64, i64 } %t522, ptr %a527 + call void @finch_str_drop(ptr %a527) + %t528 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t528, ptr %a530 + store { ptr, i64, i64 } { ptr @.str.6941, i64 5, i64 0 }, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + %t534 = call i64 @finch.host.run({ ptr, i64, i64 } %t533) + store { ptr, i64, i64 } %t533, ptr %a535 + call void @finch_str_drop(ptr %a535) + store i64 %t534, ptr %a536 + %t537 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t537, ptr %a538 + store { ptr, i64, i64 } zeroinitializer, ptr %a539 + store { ptr, i64, i64 } zeroinitializer, ptr %a540 + %t541 = call i32 @finch_try_read_file(ptr %a539, ptr %a538, ptr %a540) + %t542 = icmp eq i32 %t541, 0 + %t543 = load { ptr, i64, i64 }, ptr %a540 + %t544 = load { ptr, i64, i64 }, ptr %a539 + br i1 %t542, label %or.failed10301, label %or.ok10302 +or.failed10301: + store { ptr, i64, i64 } %t543, ptr %a545 + call void @finch_str_drop(ptr %a545) + br label %or.bend10303 +or.bend10303: + br label %or.end10304 +or.ok10302: + br label %or.end10304 +or.end10304: + %t546 = phi { ptr, i64, i64 } [ { ptr @.str.6942, i64 0, i64 0 }, %or.bend10303 ], [ %t544, %or.ok10302 ] + store { ptr, i64, i64 } %t546, ptr %a547 + %t548 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t548) + %t549 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t549) + store i64 0, ptr %a550 + br label %each.cond10305 +each.cond10305: + %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t552 = load i64, ptr %t551 + %t553 = load i64, ptr %a550 + %t554 = icmp slt i64 %t553, %t552 + br i1 %t554, label %each.body10306, label %each.end10308 +each.body10306: + %t555 = load ptr, ptr %a310 + %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t555, i64 %t553 + %t557 = load { ptr, i64, i64 }, ptr %t556 + store { ptr, i64, i64 } %t557, ptr %a558 + %t559 = load { ptr, i64, i64 }, ptr %a558 + call void @finch.host.remove({ ptr, i64, i64 } %t559) + br label %each.step10307 +each.step10307: + %t560 = load i64, ptr %a550 + %t561 = add i64 %t560, 1 + store i64 %t561, ptr %a550 + br label %each.cond10305 +each.end10308: + %t562 = load i64, ptr %a536 + %t563 = icmp eq i64 %t562, 127 + br i1 %t563, label %then10309, label %endif10311 +then10309: + %t564 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.6943, i64 42, i64 0 }, ptr %a566 + store { ptr, i64, i64 } %t564, ptr %a567 + call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) + %t568 = load { ptr, i64, i64 }, ptr %a565 + store { ptr, i64, i64 } %t568, ptr %a570 + store { ptr, i64, i64 } { ptr @.str.6944, i64 32, i64 0 }, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + store { ptr, i64, i64 } %t568, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a569 + %t574 = extractvalue { ptr, i64, i64 } %t573, 1 + %t575 = trunc i64 %t574 to i32 + %t576 = extractvalue { ptr, i64, i64 } %t573, 0 + %t577 = icmp eq ptr %t576, null + %t578 = select i1 %t577, ptr @.str.6945, ptr %t576 + %t579 = call i32 (ptr, ...) @printf(ptr @.str.6946, i32 %t575, ptr %t578) + store { ptr, i64, i64 } %t573, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = call i32 (ptr, ...) @printf(ptr @.str.6947) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a70) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) - ret i64 %t558 -endif10286: - %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %a518, i32 0, i32 1 - %t560 = load i64, ptr %t559 - %t561 = icmp sgt i64 %t560, 0 - br i1 %t561, label %then10287, label %endif10289 -then10287: - %t562 = load { ptr, i64, i64 }, ptr %a518 - %t563 = extractvalue { ptr, i64, i64 } %t562, 1 - %t564 = trunc i64 %t563 to i32 - %t565 = extractvalue { ptr, i64, i64 } %t562, 0 - %t566 = icmp eq ptr %t565, null - %t567 = select i1 %t566, ptr @.str.6933, ptr %t565 - %t568 = call i32 (ptr, ...) @printf(ptr @.str.6934, i32 %t564, ptr %t567) - %t569 = call i32 (ptr, ...) @printf(ptr @.str.6935) - br label %endif10289 -endif10289: - call void @finch_str_drop(ptr %a518) - call void @finch.drop.arr_str(ptr %a281) - call void @finch_str_drop(ptr %a252) - call void @finch_str_drop(ptr %a109) + ret i64 1 +endif10311: + %t582 = load i64, ptr %a536 + %t583 = icmp ne i64 %t582, 0 + br i1 %t583, label %then10312, label %endif10314 +then10312: + %t584 = load { ptr, i64, i64 }, ptr %a547 + %t585 = load %S.cimport.CImports, ptr %a3 + %t586 = load %S.platform.Target, ptr %a2 + %t587 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t584, %S.cimport.CImports %t585, %S.platform.Target %t586) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 %t587 +endif10314: + %t588 = getelementptr inbounds { ptr, i64, i64 }, ptr %a547, i32 0, i32 1 + %t589 = load i64, ptr %t588 + %t590 = icmp sgt i64 %t589, 0 + br i1 %t590, label %then10315, label %endif10317 +then10315: + %t591 = load { ptr, i64, i64 }, ptr %a547 + %t592 = extractvalue { ptr, i64, i64 } %t591, 1 + %t593 = trunc i64 %t592 to i32 + %t594 = extractvalue { ptr, i64, i64 } %t591, 0 + %t595 = icmp eq ptr %t594, null + %t596 = select i1 %t595, ptr @.str.6948, ptr %t594 + %t597 = call i32 (ptr, ...) @printf(ptr @.str.6949, i32 %t593, ptr %t596) + %t598 = call i32 (ptr, ...) @printf(ptr @.str.6950) + br label %endif10317 +endif10317: + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) @@ -105921,69 +106096,69 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 - br label %logic.from10290 -logic.from10290: - br i1 %t3, label %logic.rhs10291, label %logic.end10292 -logic.rhs10291: + br label %logic.from10318 +logic.from10318: + br i1 %t3, label %logic.rhs10319, label %logic.end10320 +logic.rhs10319: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 - br label %logic.rend10293 -logic.rend10293: - br label %logic.end10292 -logic.end10292: - %t6 = phi i1 [ false, %logic.from10290 ], [ %t5, %logic.rend10293 ] - br i1 %t6, label %then10294, label %endif10296 -then10294: + br label %logic.rend10321 +logic.rend10321: + br label %logic.end10320 +logic.end10320: + %t6 = phi i1 [ false, %logic.from10318 ], [ %t5, %logic.rend10321 ] + br i1 %t6, label %then10322, label %endif10324 +then10322: %t7 = load i8, ptr %a1 %t8 = zext i8 %t7 to i64 %t9 = zext i8 48 to i64 %t10 = sub i64 %t8, %t9 ret i64 %t10 -endif10296: +endif10324: %t11 = load i8, ptr %a1 %t12 = icmp uge i8 %t11, 97 - br label %logic.from10297 -logic.from10297: - br i1 %t12, label %logic.rhs10298, label %logic.end10299 -logic.rhs10298: + br label %logic.from10325 +logic.from10325: + br i1 %t12, label %logic.rhs10326, label %logic.end10327 +logic.rhs10326: %t13 = load i8, ptr %a1 %t14 = icmp ule i8 %t13, 102 - br label %logic.rend10300 -logic.rend10300: - br label %logic.end10299 -logic.end10299: - %t15 = phi i1 [ false, %logic.from10297 ], [ %t14, %logic.rend10300 ] - br i1 %t15, label %then10301, label %endif10303 -then10301: + br label %logic.rend10328 +logic.rend10328: + br label %logic.end10327 +logic.end10327: + %t15 = phi i1 [ false, %logic.from10325 ], [ %t14, %logic.rend10328 ] + br i1 %t15, label %then10329, label %endif10331 +then10329: %t16 = load i8, ptr %a1 %t17 = zext i8 %t16 to i64 %t18 = zext i8 97 to i64 %t19 = sub i64 %t17, %t18 %t20 = add i64 %t19, 10 ret i64 %t20 -endif10303: +endif10331: %t21 = load i8, ptr %a1 %t22 = icmp uge i8 %t21, 65 - br label %logic.from10304 -logic.from10304: - br i1 %t22, label %logic.rhs10305, label %logic.end10306 -logic.rhs10305: + br label %logic.from10332 +logic.from10332: + br i1 %t22, label %logic.rhs10333, label %logic.end10334 +logic.rhs10333: %t23 = load i8, ptr %a1 %t24 = icmp ule i8 %t23, 70 - br label %logic.rend10307 -logic.rend10307: - br label %logic.end10306 -logic.end10306: - %t25 = phi i1 [ false, %logic.from10304 ], [ %t24, %logic.rend10307 ] - br i1 %t25, label %then10308, label %endif10310 -then10308: + br label %logic.rend10335 +logic.rend10335: + br label %logic.end10334 +logic.end10334: + %t25 = phi i1 [ false, %logic.from10332 ], [ %t24, %logic.rend10335 ] + br i1 %t25, label %then10336, label %endif10338 +then10336: %t26 = load i8, ptr %a1 %t27 = zext i8 %t26 to i64 %t28 = zext i8 65 to i64 %t29 = sub i64 %t27, %t28 %t30 = add i64 %t29, 10 ret i64 %t30 -endif10310: +endif10338: ret i64 -1 } @@ -106018,122 +106193,122 @@ entry: store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6937, i64 7, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.6952, i64 7, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br i1 %t12, label %then10311, label %endif10313 -then10311: + br i1 %t12, label %then10339, label %endif10341 +then10339: %t13 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t13, ptr %a14 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t17 = load i64, ptr %t16 - call void @finch_str_sub(ptr %a15, ptr %a14, i64 7, i64 %t17, ptr @.str.6938, i64 114) + call void @finch_str_sub(ptr %a15, ptr %a14, i64 7, i64 %t17, ptr @.str.6953, i64 114) %t18 = load { ptr, i64, i64 }, ptr %a15 %t19 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t18, ptr %a6 store { ptr, i64, i64 } %t19, ptr %a20 call void @finch_str_drop(ptr %a20) - br label %endif10313 -endif10313: + br label %endif10341 +endif10341: store { ptr, i64, i64 } zeroinitializer, ptr %a21 store i64 0, ptr %a22 - br label %while.cond10314 -while.cond10314: + br label %while.cond10342 +while.cond10342: %t23 = load i64, ptr %a22 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = icmp slt i64 %t23, %t25 - br i1 %t26, label %while.body10315, label %while.end10316 -while.body10315: + br i1 %t26, label %while.body10343, label %while.end10344 +while.body10343: %t27 = load i64, ptr %a22 %t28 = load { ptr, i64, i64 }, ptr %a6 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 - br i1 %t30, label %range10317, label %inrange10318 -range10317: - call void @finch_panic_index(ptr @.str.6939, i64 119, i64 %t27, i64 %t29) + br i1 %t30, label %range10345, label %inrange10346 +range10345: + call void @finch_panic_index(ptr @.str.6954, i64 119, i64 %t27, i64 %t29) unreachable -inrange10318: +inrange10346: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds i8, ptr %t31, i64 %t27 %t33 = load i8, ptr %t32 %t34 = icmp eq i8 %t33, 37 - br label %logic.from10319 -logic.from10319: - br i1 %t34, label %logic.rhs10320, label %logic.end10321 -logic.rhs10320: + br label %logic.from10347 +logic.from10347: + br i1 %t34, label %logic.rhs10348, label %logic.end10349 +logic.rhs10348: %t35 = load i64, ptr %a22 %t36 = add i64 %t35, 2 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = add i64 %t38, 0 %t40 = icmp slt i64 %t36, %t39 - br label %logic.rend10322 -logic.rend10322: - br label %logic.end10321 -logic.end10321: - %t41 = phi i1 [ false, %logic.from10319 ], [ %t40, %logic.rend10322 ] - br label %logic.from10323 -logic.from10323: - br i1 %t41, label %logic.rhs10324, label %logic.end10325 -logic.rhs10324: + br label %logic.rend10350 +logic.rend10350: + br label %logic.end10349 +logic.end10349: + %t41 = phi i1 [ false, %logic.from10347 ], [ %t40, %logic.rend10350 ] + br label %logic.from10351 +logic.from10351: + br i1 %t41, label %logic.rhs10352, label %logic.end10353 +logic.rhs10352: %t42 = load i64, ptr %a22 %t43 = add i64 %t42, 1 %t44 = load { ptr, i64, i64 }, ptr %a6 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 %t43, %t45 - br i1 %t46, label %range10326, label %inrange10327 -range10326: - call void @finch_panic_index(ptr @.str.6940, i64 119, i64 %t43, i64 %t45) + br i1 %t46, label %range10354, label %inrange10355 +range10354: + call void @finch_panic_index(ptr @.str.6955, i64 119, i64 %t43, i64 %t45) unreachable -inrange10327: +inrange10355: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 %t49 = load i8, ptr %t48 %t50 = call i64 @finch.lsp.hexval(i8 %t49) %t51 = icmp sge i64 %t50, 0 - br label %logic.rend10328 -logic.rend10328: - br label %logic.end10325 -logic.end10325: - %t52 = phi i1 [ false, %logic.from10323 ], [ %t51, %logic.rend10328 ] - br label %logic.from10329 -logic.from10329: - br i1 %t52, label %logic.rhs10330, label %logic.end10331 -logic.rhs10330: + br label %logic.rend10356 +logic.rend10356: + br label %logic.end10353 +logic.end10353: + %t52 = phi i1 [ false, %logic.from10351 ], [ %t51, %logic.rend10356 ] + br label %logic.from10357 +logic.from10357: + br i1 %t52, label %logic.rhs10358, label %logic.end10359 +logic.rhs10358: %t53 = load i64, ptr %a22 %t54 = add i64 %t53, 2 %t55 = load { ptr, i64, i64 }, ptr %a6 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range10332, label %inrange10333 -range10332: - call void @finch_panic_index(ptr @.str.6941, i64 119, i64 %t54, i64 %t56) + br i1 %t57, label %range10360, label %inrange10361 +range10360: + call void @finch_panic_index(ptr @.str.6956, i64 119, i64 %t54, i64 %t56) unreachable -inrange10333: +inrange10361: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 %t60 = load i8, ptr %t59 %t61 = call i64 @finch.lsp.hexval(i8 %t60) %t62 = icmp sge i64 %t61, 0 - br label %logic.rend10334 -logic.rend10334: - br label %logic.end10331 -logic.end10331: - %t63 = phi i1 [ false, %logic.from10329 ], [ %t62, %logic.rend10334 ] - br i1 %t63, label %then10335, label %else10336 -then10335: + br label %logic.rend10362 +logic.rend10362: + br label %logic.end10359 +logic.end10359: + %t63 = phi i1 [ false, %logic.from10357 ], [ %t62, %logic.rend10362 ] + br i1 %t63, label %then10363, label %else10364 +then10363: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t65 = load i64, ptr %a22 %t66 = add i64 %t65, 1 %t67 = load { ptr, i64, i64 }, ptr %a6 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 %t66, %t68 - br i1 %t69, label %range10338, label %inrange10339 -range10338: - call void @finch_panic_index(ptr @.str.6942, i64 120, i64 %t66, i64 %t68) + br i1 %t69, label %range10366, label %inrange10367 +range10366: + call void @finch_panic_index(ptr @.str.6957, i64 120, i64 %t66, i64 %t68) unreachable -inrange10339: +inrange10367: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds i8, ptr %t70, i64 %t66 %t72 = load i8, ptr %t71 @@ -106144,11 +106319,11 @@ inrange10339: %t77 = load { ptr, i64, i64 }, ptr %a6 %t78 = extractvalue { ptr, i64, i64 } %t77, 1 %t79 = icmp uge i64 %t76, %t78 - br i1 %t79, label %range10340, label %inrange10341 -range10340: - call void @finch_panic_index(ptr @.str.6943, i64 120, i64 %t76, i64 %t78) + br i1 %t79, label %range10368, label %inrange10369 +range10368: + call void @finch_panic_index(ptr @.str.6958, i64 120, i64 %t76, i64 %t78) unreachable -inrange10341: +inrange10369: %t80 = extractvalue { ptr, i64, i64 } %t77, 0 %t81 = getelementptr inbounds i8, ptr %t80, i64 %t76 %t82 = load i8, ptr %t81 @@ -106165,18 +106340,18 @@ inrange10341: %t90 = load i64, ptr %a22 %t91 = add i64 %t90, 3 store i64 %t91, ptr %a22 - br label %endif10337 -else10336: + br label %endif10365 +else10364: %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t93 = load i64, ptr %a22 %t94 = load { ptr, i64, i64 }, ptr %a6 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 %t93, %t95 - br i1 %t96, label %range10342, label %inrange10343 -range10342: - call void @finch_panic_index(ptr @.str.6944, i64 123, i64 %t93, i64 %t95) + br i1 %t96, label %range10370, label %inrange10371 +range10370: + call void @finch_panic_index(ptr @.str.6959, i64 123, i64 %t93, i64 %t95) unreachable -inrange10343: +inrange10371: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds i8, ptr %t97, i64 %t93 %t99 = load i8, ptr %t98 @@ -106190,10 +106365,10 @@ inrange10343: %t104 = load i64, ptr %a22 %t105 = add i64 %t104, 1 store i64 %t105, ptr %a22 - br label %endif10337 -endif10337: - br label %while.cond10314 -while.end10316: + br label %endif10365 +endif10365: + br label %while.cond10342 +while.end10344: %t106 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } zeroinitializer, ptr %a107 store { ptr, i64, i64 } %t106, ptr %a108 @@ -106232,24 +106407,24 @@ entry: %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 - store { ptr, i64, i64 } { ptr @.str.6945, i64 16, i64 0 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.6960, i64 16, i64 0 }, ptr %a2 %t3 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t4 = call ptr @finch_alloc(i64 %t3) %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 - store { ptr, i64, i64 } { ptr @.str.6946, i64 7, i64 0 }, ptr %t5 + store { ptr, i64, i64 } { ptr @.str.6961, i64 7, i64 0 }, ptr %t5 %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 1 %t8 = insertvalue { ptr, i64, i64 } %t7, i64 1, 2 store { ptr, i64, i64 } %t8, ptr %a9 store i64 0, ptr %a10 - br label %each.cond10344 -each.cond10344: + br label %each.cond10372 +each.cond10372: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 - br i1 %t14, label %each.body10345, label %each.end10347 -each.body10345: + br i1 %t14, label %each.body10373, label %each.end10375 +each.body10373: %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds i8, ptr %t15, i64 %t13 %t17 = load i8, ptr %t16 @@ -106259,66 +106434,66 @@ each.body10345: store i64 %t20, ptr %a21 %t22 = load i8, ptr %a18 %t23 = icmp uge i8 %t22, 97 - br label %logic.from10348 -logic.from10348: - br i1 %t23, label %logic.rhs10349, label %logic.end10350 -logic.rhs10349: + br label %logic.from10376 +logic.from10376: + br i1 %t23, label %logic.rhs10377, label %logic.end10378 +logic.rhs10377: %t24 = load i8, ptr %a18 %t25 = icmp ule i8 %t24, 122 - br label %logic.rend10351 -logic.rend10351: - br label %logic.end10350 -logic.end10350: - %t26 = phi i1 [ false, %logic.from10348 ], [ %t25, %logic.rend10351 ] - br label %logic.from10352 -logic.from10352: - br i1 %t26, label %logic.end10354, label %logic.rhs10353 -logic.rhs10353: + br label %logic.rend10379 +logic.rend10379: + br label %logic.end10378 +logic.end10378: + %t26 = phi i1 [ false, %logic.from10376 ], [ %t25, %logic.rend10379 ] + br label %logic.from10380 +logic.from10380: + br i1 %t26, label %logic.end10382, label %logic.rhs10381 +logic.rhs10381: %t27 = load i8, ptr %a18 %t28 = icmp uge i8 %t27, 65 - br label %logic.from10355 -logic.from10355: - br i1 %t28, label %logic.rhs10356, label %logic.end10357 -logic.rhs10356: + br label %logic.from10383 +logic.from10383: + br i1 %t28, label %logic.rhs10384, label %logic.end10385 +logic.rhs10384: %t29 = load i8, ptr %a18 %t30 = icmp ule i8 %t29, 90 - br label %logic.rend10358 -logic.rend10358: - br label %logic.end10357 -logic.end10357: - %t31 = phi i1 [ false, %logic.from10355 ], [ %t30, %logic.rend10358 ] - br label %logic.rend10359 -logic.rend10359: - br label %logic.end10354 -logic.end10354: - %t32 = phi i1 [ true, %logic.from10352 ], [ %t31, %logic.rend10359 ] - br label %logic.from10360 -logic.from10360: - br i1 %t32, label %logic.end10362, label %logic.rhs10361 -logic.rhs10361: + br label %logic.rend10386 +logic.rend10386: + br label %logic.end10385 +logic.end10385: + %t31 = phi i1 [ false, %logic.from10383 ], [ %t30, %logic.rend10386 ] + br label %logic.rend10387 +logic.rend10387: + br label %logic.end10382 +logic.end10382: + %t32 = phi i1 [ true, %logic.from10380 ], [ %t31, %logic.rend10387 ] + br label %logic.from10388 +logic.from10388: + br i1 %t32, label %logic.end10390, label %logic.rhs10389 +logic.rhs10389: %t33 = load i8, ptr %a18 %t34 = icmp uge i8 %t33, 48 - br label %logic.from10363 -logic.from10363: - br i1 %t34, label %logic.rhs10364, label %logic.end10365 -logic.rhs10364: + br label %logic.from10391 +logic.from10391: + br i1 %t34, label %logic.rhs10392, label %logic.end10393 +logic.rhs10392: %t35 = load i8, ptr %a18 %t36 = icmp ule i8 %t35, 57 - br label %logic.rend10366 -logic.rend10366: - br label %logic.end10365 -logic.end10365: - %t37 = phi i1 [ false, %logic.from10363 ], [ %t36, %logic.rend10366 ] - br label %logic.rend10367 -logic.rend10367: - br label %logic.end10362 -logic.end10362: - %t38 = phi i1 [ true, %logic.from10360 ], [ %t37, %logic.rend10367 ] - br label %logic.from10368 -logic.from10368: - br i1 %t38, label %logic.end10370, label %logic.rhs10369 -logic.rhs10369: - store { ptr, i64, i64 } { ptr @.str.6947, i64 5, i64 0 }, ptr %a39 + br label %logic.rend10394 +logic.rend10394: + br label %logic.end10393 +logic.end10393: + %t37 = phi i1 [ false, %logic.from10391 ], [ %t36, %logic.rend10394 ] + br label %logic.rend10395 +logic.rend10395: + br label %logic.end10390 +logic.end10390: + %t38 = phi i1 [ true, %logic.from10388 ], [ %t37, %logic.rend10395 ] + br label %logic.from10396 +logic.from10396: + br i1 %t38, label %logic.end10398, label %logic.rhs10397 +logic.rhs10397: + store { ptr, i64, i64 } { ptr @.str.6962, i64 5, i64 0 }, ptr %a39 %t41 = load i8, ptr %a18 call void @finch_str_from_char(ptr %a42, i8 signext %t41) %t43 = load { ptr, i64, i64 }, ptr %a42 @@ -106327,13 +106502,13 @@ logic.rhs10369: %t46 = icmp sge i64 %t45, 0 store { ptr, i64, i64 } %t43, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %logic.rend10371 -logic.rend10371: - br label %logic.end10370 -logic.end10370: - %t48 = phi i1 [ true, %logic.from10368 ], [ %t46, %logic.rend10371 ] - br i1 %t48, label %then10372, label %else10373 -then10372: + br label %logic.rend10399 +logic.rend10399: + br label %logic.end10398 +logic.end10398: + %t48 = phi i1 [ true, %logic.from10396 ], [ %t46, %logic.rend10399 ] + br i1 %t48, label %then10400, label %else10401 +then10400: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t50 = load i8, ptr %a18 call void @finch_str_from_char(ptr %a51, i8 signext %t50) @@ -106345,8 +106520,8 @@ then10372: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i64 %t53 store { ptr, i64, i64 } %t52, ptr %t56 store i64 %t54, ptr %t49 - br label %endif10374 -else10373: + br label %endif10402 +else10401: %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t58 = load i64, ptr %a21 %t59 = sdiv i64 %t58, 16 @@ -106354,17 +106529,17 @@ else10373: %t61 = load { ptr, i64, i64 }, ptr %a2 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 %t60, %t62 - br i1 %t63, label %range10375, label %inrange10376 -range10375: - call void @finch_panic_index(ptr @.str.6950, i64 138, i64 %t60, i64 %t62) + br i1 %t63, label %range10403, label %inrange10404 +range10403: + call void @finch_panic_index(ptr @.str.6965, i64 138, i64 %t60, i64 %t62) unreachable -inrange10376: +inrange10404: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 %t66 = load i8, ptr %t65 call void @finch_str_from_char(ptr %a67, i8 signext %t66) %t68 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } { ptr @.str.6949, i64 1, i64 0 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.6964, i64 1, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t68, ptr %a72 @@ -106375,11 +106550,11 @@ inrange10376: %t76 = load { ptr, i64, i64 }, ptr %a2 %t77 = extractvalue { ptr, i64, i64 } %t76, 1 %t78 = icmp uge i64 %t75, %t77 - br i1 %t78, label %range10377, label %inrange10378 -range10377: - call void @finch_panic_index(ptr @.str.6951, i64 138, i64 %t75, i64 %t77) + br i1 %t78, label %range10405, label %inrange10406 +range10405: + call void @finch_panic_index(ptr @.str.6966, i64 138, i64 %t75, i64 %t77) unreachable -inrange10378: +inrange10406: %t79 = extractvalue { ptr, i64, i64 } %t76, 0 %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 %t81 = load i8, ptr %t80 @@ -106400,17 +106575,17 @@ inrange10378: %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t90 store { ptr, i64, i64 } %t89, ptr %t93 store i64 %t91, ptr %t57 - br label %endif10374 -endif10374: - br label %each.step10346 -each.step10346: + br label %endif10402 +endif10402: + br label %each.step10374 +each.step10374: %t94 = load i64, ptr %a10 %t95 = add i64 %t94, 1 store i64 %t95, ptr %a10 - br label %each.cond10344 -each.end10347: + br label %each.cond10372 +each.end10375: %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6952, i64 0, i64 0 }, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.6967, i64 0, i64 0 }, ptr %a97 call void @finch_str_join(ptr %a98, ptr %a9, ptr %a97) %t99 = load { ptr, i64, i64 }, ptr %a98 call void @finch.drop.arr_str(ptr %a9) @@ -106430,80 +106605,80 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 store i64 0, ptr %a3 - br label %while.cond10379 -while.cond10379: + br label %while.cond10407 +while.cond10407: %t4 = load i64, ptr %a3 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = icmp slt i64 %t4, %t6 - br i1 %t7, label %while.body10380, label %while.end10381 -while.body10380: + br i1 %t7, label %while.body10408, label %while.end10409 +while.body10408: %t8 = load i64, ptr %a3 %t9 = load { ptr, i64, i64 }, ptr %a1 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range10382, label %inrange10383 -range10382: - call void @finch_panic_index(ptr @.str.6953, i64 149, i64 %t8, i64 %t10) + br i1 %t11, label %range10410, label %inrange10411 +range10410: + call void @finch_panic_index(ptr @.str.6968, i64 149, i64 %t8, i64 %t10) unreachable -inrange10383: +inrange10411: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 %t15 = icmp eq i8 %t14, 92 - br label %logic.from10384 -logic.from10384: - br i1 %t15, label %logic.rhs10385, label %logic.end10386 -logic.rhs10385: + br label %logic.from10412 +logic.from10412: + br i1 %t15, label %logic.rhs10413, label %logic.end10414 +logic.rhs10413: %t16 = load i64, ptr %a3 %t17 = add i64 %t16, 1 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp slt i64 %t17, %t19 - br label %logic.rend10387 -logic.rend10387: - br label %logic.end10386 -logic.end10386: - %t21 = phi i1 [ false, %logic.from10384 ], [ %t20, %logic.rend10387 ] - br i1 %t21, label %then10388, label %else10389 -then10388: + br label %logic.rend10415 +logic.rend10415: + br label %logic.end10414 +logic.end10414: + %t21 = phi i1 [ false, %logic.from10412 ], [ %t20, %logic.rend10415 ] + br i1 %t21, label %then10416, label %else10417 +then10416: %t22 = load i64, ptr %a3 %t23 = add i64 %t22, 1 %t24 = load { ptr, i64, i64 }, ptr %a1 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 - br i1 %t26, label %range10391, label %inrange10392 -range10391: - call void @finch_panic_index(ptr @.str.6954, i64 150, i64 %t23, i64 %t25) + br i1 %t26, label %range10419, label %inrange10420 +range10419: + call void @finch_panic_index(ptr @.str.6969, i64 150, i64 %t23, i64 %t25) unreachable -inrange10392: +inrange10420: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 %t29 = load i8, ptr %t28 %t30 = icmp eq i8 %t29, 110 - br i1 %t30, label %then10393, label %else10394 -then10393: + br i1 %t30, label %then10421, label %else10422 +then10421: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = add i64 %t32, 1 call void @finch_arr_reserve(ptr %a2, i64 %t33, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t34 = load ptr, ptr %a2 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i64 %t32 - store { ptr, i64, i64 } { ptr @.str.6955, i64 1, i64 0 }, ptr %t35 + store { ptr, i64, i64 } { ptr @.str.6970, i64 1, i64 0 }, ptr %t35 store i64 %t33, ptr %t31 - br label %endif10395 -else10394: + br label %endif10423 +else10422: %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t37 = load i64, ptr %a3 %t38 = add i64 %t37, 1 %t39 = load { ptr, i64, i64 }, ptr %a1 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range10396, label %inrange10397 -range10396: - call void @finch_panic_index(ptr @.str.6956, i64 153, i64 %t38, i64 %t40) + br i1 %t41, label %range10424, label %inrange10425 +range10424: + call void @finch_panic_index(ptr @.str.6971, i64 153, i64 %t38, i64 %t40) unreachable -inrange10397: +inrange10425: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 %t44 = load i8, ptr %t43 @@ -106516,23 +106691,23 @@ inrange10397: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t36 - br label %endif10395 -endif10395: + br label %endif10423 +endif10423: %t51 = load i64, ptr %a3 %t52 = add i64 %t51, 2 store i64 %t52, ptr %a3 - br label %endif10390 -else10389: + br label %endif10418 +else10417: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t54 = load i64, ptr %a3 %t55 = load { ptr, i64, i64 }, ptr %a1 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range10398, label %inrange10399 -range10398: - call void @finch_panic_index(ptr @.str.6957, i64 157, i64 %t54, i64 %t56) + br i1 %t57, label %range10426, label %inrange10427 +range10426: + call void @finch_panic_index(ptr @.str.6972, i64 157, i64 %t54, i64 %t56) unreachable -inrange10399: +inrange10427: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 %t60 = load i8, ptr %t59 @@ -106548,12 +106723,12 @@ inrange10399: %t67 = load i64, ptr %a3 %t68 = add i64 %t67, 1 store i64 %t68, ptr %a3 - br label %endif10390 -endif10390: - br label %while.cond10379 -while.end10381: + br label %endif10418 +endif10418: + br label %while.cond10407 +while.end10409: %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6958, i64 0, i64 0 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.6973, i64 0, i64 0 }, ptr %a70 call void @finch_str_join(ptr %a71, ptr %a2, ptr %a70) %t72 = load { ptr, i64, i64 }, ptr %a71 call void @finch.drop.arr_str(ptr %a2) @@ -106575,37 +106750,37 @@ entry: store i64 %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.6960, i64 1, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6975, i64 1, i64 0 }, ptr %a6 call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load i64, ptr %a2 %t11 = icmp sge i64 %t10, 1 - br label %logic.from10400 -logic.from10400: - br i1 %t11, label %logic.rhs10401, label %logic.end10402 -logic.rhs10401: + br label %logic.from10428 +logic.from10428: + br i1 %t11, label %logic.rhs10429, label %logic.end10430 +logic.rhs10429: %t12 = load i64, ptr %a2 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sle i64 %t12, %t14 - br label %logic.rend10403 -logic.rend10403: - br label %logic.end10402 -logic.end10402: - %t16 = phi i1 [ false, %logic.from10400 ], [ %t15, %logic.rend10403 ] - br i1 %t16, label %then10404, label %endif10406 -then10404: + br label %logic.rend10431 +logic.rend10431: + br label %logic.end10430 +logic.end10430: + %t16 = phi i1 [ false, %logic.from10428 ], [ %t15, %logic.rend10431 ] + br i1 %t16, label %then10432, label %endif10434 +then10432: %t17 = load i64, ptr %a2 %t18 = sub i64 %t17, 1 %t19 = load { ptr, i64, i64 }, ptr %a9 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range10407, label %inrange10408 -range10407: - call void @finch_panic_index(ptr @.str.6961, i64 167, i64 %t18, i64 %t20) + br i1 %t21, label %range10435, label %inrange10436 +range10435: + call void @finch_panic_index(ptr @.str.6976, i64 167, i64 %t18, i64 %t20) unreachable -inrange10408: +inrange10436: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 %t24 = load { ptr, i64, i64 }, ptr %t23 @@ -106614,9 +106789,9 @@ inrange10408: %t27 = load { ptr, i64, i64 }, ptr %a26 call void @finch.drop.arr_str(ptr %a9) ret { ptr, i64, i64 } %t27 -endif10406: +endif10434: call void @finch.drop.arr_str(ptr %a9) - ret { ptr, i64, i64 } { ptr @.str.6962, i64 0, i64 0 } + ret { ptr, i64, i64 } { ptr @.str.6977, i64 0, i64 0 } } define internal { ptr, i64, i64 } @finch.lsp.readLine() { @@ -106633,25 +106808,25 @@ entry: %a28 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } zeroinitializer, ptr %a1 - br label %while.cond10409 -while.cond10409: - br label %while.body10410 -while.body10410: + br label %while.cond10437 +while.cond10437: + br label %while.body10438 +while.body10438: %t2 = call i32 @getchar() store i32 %t2, ptr %a3 %t4 = load i32, ptr %a3 %t5 = icmp slt i32 %t4, 0 - br i1 %t5, label %then10412, label %endif10414 -then10412: + br i1 %t5, label %then10440, label %endif10442 +then10440: call void @finch.drop.arr_u8(ptr %a1) - ret { ptr, i64, i64 } { ptr @.str.6963, i64 0, i64 0 } -endif10414: + ret { ptr, i64, i64 } { ptr @.str.6978, i64 0, i64 0 } +endif10442: %t6 = load i32, ptr %a3 %t7 = icmp eq i32 %t6, 10 - br i1 %t7, label %then10415, label %endif10417 -then10415: - br label %while.end10411 -endif10417: + br i1 %t7, label %then10443, label %endif10445 +then10443: + br label %while.end10439 +endif10445: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t9 = load i32, ptr %a3 %t10 = trunc i32 %t9 to i8 @@ -106662,8 +106837,8 @@ endif10417: %t14 = getelementptr inbounds i8, ptr %t13, i64 %t11 store i8 %t10, ptr %t14 store i64 %t12, ptr %t8 - br label %while.cond10409 -while.end10411: + br label %while.cond10437 +while.end10439: %t15 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a16 store { ptr, i64, i64 } %t15, ptr %a17 @@ -106672,24 +106847,24 @@ while.end10411: store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t20, ptr %a21 - store { ptr, i64, i64 } { ptr @.str.6965, i64 1, i64 0 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.6980, i64 1, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_ends(ptr %a21, ptr %a23) %t25 = icmp ne i32 %t24, 0 - br i1 %t25, label %then10418, label %endif10420 -then10418: + br i1 %t25, label %then10446, label %endif10448 +then10446: %t26 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t26, ptr %a27 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = sub i64 %t30, 1 - call void @finch_str_sub(ptr %a28, ptr %a27, i64 0, i64 %t31, ptr @.str.6966, i64 188) + call void @finch_str_sub(ptr %a28, ptr %a27, i64 0, i64 %t31, ptr @.str.6981, i64 188) %t32 = load { ptr, i64, i64 }, ptr %a28 %t33 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t32, ptr %a19 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_drop(ptr %a34) - br label %endif10420 -endif10420: + br label %endif10448 +endif10448: %t35 = load { ptr, i64, i64 }, ptr %a19 call void @finch.drop.arr_u8(ptr %a1) ret { ptr, i64, i64 } %t35 @@ -106719,48 +106894,48 @@ entry: %a60 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 store i64 0, ptr %a1 - br label %while.cond10421 -while.cond10421: - br label %while.body10422 -while.body10422: + br label %while.cond10449 +while.cond10449: + br label %while.body10450 +while.body10450: %t2 = call { ptr, i64, i64 } @finch.lsp.readLine() store { ptr, i64, i64 } %t2, ptr %a3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = icmp eq i64 %t5, 0 - br i1 %t6, label %then10424, label %endif10426 -then10424: + br i1 %t6, label %then10452, label %endif10454 +then10452: %t7 = load i64, ptr %a1 %t8 = icmp sgt i64 %t7, 0 - br i1 %t8, label %then10427, label %endif10429 -then10427: + br i1 %t8, label %then10455, label %endif10457 +then10455: call void @finch_str_drop(ptr %a3) - br label %while.end10423 -endif10429: + br label %while.end10451 +endif10457: %t9 = load ptr, ptr @stdin %t10 = call i32 @feof(ptr %t9) %t11 = icmp ne i32 %t10, 0 - br i1 %t11, label %then10430, label %endif10432 -then10430: + br i1 %t11, label %then10458, label %endif10460 +then10458: call void @finch_str_drop(ptr %a3) - %t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6967, i64 32, i64 0 }, 2 + %t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6982, i64 32, i64 0 }, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t12 -endif10432: +endif10460: call void @finch_str_drop(ptr %a3) - br label %while.cond10421 -endif10426: + br label %while.cond10449 +endif10454: %t13 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t13, ptr %a14 - store { ptr, i64, i64 } { ptr @.str.6969, i64 15, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6984, i64 15, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_starts(ptr %a14, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br i1 %t18, label %then10433, label %endif10435 -then10433: + br i1 %t18, label %then10461, label %endif10463 +then10461: %t19 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t23 = load i64, ptr %t22 - call void @finch_str_sub(ptr %a21, ptr %a20, i64 15, i64 %t23, ptr @.str.6970, i64 208) + call void @finch_str_sub(ptr %a21, ptr %a20, i64 15, i64 %t23, ptr @.str.6985, i64 208) %t24 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_trim(ptr %a26, ptr %a25) @@ -106776,42 +106951,42 @@ then10433: store { ptr, i64, i64 } %t27, ptr %a35 call void @finch_str_drop(ptr %a35) %t36 = load i64, ptr %a30 - br i1 %t33, label %or.failed10436, label %or.ok10437 -or.failed10436: + br i1 %t33, label %or.failed10464, label %or.ok10465 +or.failed10464: store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_drop(ptr %a37) - br label %or.bend10438 -or.bend10438: - br label %or.end10439 -or.ok10437: - br label %or.end10439 -or.end10439: - %t38 = phi i64 [ 0, %or.bend10438 ], [ %t36, %or.ok10437 ] + br label %or.bend10466 +or.bend10466: + br label %or.end10467 +or.ok10465: + br label %or.end10467 +or.end10467: + %t38 = phi i64 [ 0, %or.bend10466 ], [ %t36, %or.ok10465 ] store i64 %t38, ptr %a1 - br label %endif10435 -endif10435: + br label %endif10463 +endif10463: call void @finch_str_drop(ptr %a3) - br label %while.cond10421 -while.end10423: + br label %while.cond10449 +while.end10451: store { ptr, i64, i64 } zeroinitializer, ptr %a39 %t40 = load i64, ptr %a1 store i64 0, ptr %a41 - br label %for.cond10440 -for.cond10440: + br label %for.cond10468 +for.cond10468: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t40 - br i1 %t43, label %for.body10441, label %for.end10443 -for.body10441: + br i1 %t43, label %for.body10469, label %for.end10471 +for.body10469: %t44 = call i32 @getchar() store i32 %t44, ptr %a45 %t46 = load i32, ptr %a45 %t47 = icmp slt i32 %t46, 0 - br i1 %t47, label %then10444, label %endif10446 -then10444: + br i1 %t47, label %then10472, label %endif10474 +then10472: call void @finch.drop.arr_u8(ptr %a39) - %t48 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6972, i64 25, i64 0 }, 2 + %t48 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6987, i64 25, i64 0 }, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t48 -endif10446: +endif10474: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a39, i32 0, i32 1 %t50 = load i32, ptr %a45 %t51 = trunc i32 %t50 to i8 @@ -106822,13 +106997,13 @@ endif10446: %t55 = getelementptr inbounds i8, ptr %t54, i64 %t52 store i8 %t51, ptr %t55 store i64 %t53, ptr %t49 - br label %for.step10442 -for.step10442: + br label %for.step10470 +for.step10470: %t56 = load i64, ptr %a41 %t57 = add i64 %t56, 1 store i64 %t57, ptr %a41 - br label %for.cond10440 -for.end10443: + br label %for.cond10468 +for.end10471: %t58 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } zeroinitializer, ptr %a59 store { ptr, i64, i64 } %t58, ptr %a60 @@ -106841,12 +107016,12 @@ for.end10443: %t66 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 1 store { ptr, i64, i64 } %t61, ptr %a67 call void @finch_str_drop(ptr %a67) - br i1 %t64, label %try.failed10447, label %try.ok10448 -try.failed10447: + br i1 %t64, label %try.failed10475, label %try.ok10476 +try.failed10475: call void @finch.drop.arr_u8(ptr %a39) %t68 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t65, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t68 -try.ok10448: +try.ok10476: call void @finch.drop.arr_u8(ptr %a39) %t69 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t70 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t69, %S.json.Json %t66, 1 @@ -106879,14 +107054,14 @@ entry: %t6 = load i64, ptr %t5 call void @finch_str_from_int(ptr %a7, i64 %t6) %t8 = load { ptr, i64, i64 }, ptr %a7 - store { ptr, i64, i64 } { ptr @.str.6973, i64 16, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.6988, i64 16, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) store { ptr, i64, i64 } %t8, ptr %a12 call void @finch_str_drop(ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t13, ptr %a15 - store { ptr, i64, i64 } { ptr @.str.6974, i64 4, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6989, i64 4, i64 0 }, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) store { ptr, i64, i64 } %t13, ptr %a17 call void @finch_str_drop(ptr %a17) @@ -106902,7 +107077,7 @@ entry: %t27 = load { ptr, i64, i64 }, ptr %a26 %t28 = extractvalue { ptr, i64, i64 } %t27, 0 %t29 = icmp eq ptr %t28, null - %t30 = select i1 %t29, ptr @.str.6975, ptr %t28 + %t30 = select i1 %t29, ptr @.str.6990, ptr %t28 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load ptr, ptr @stdout @@ -106922,19 +107097,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10449 -n.cond10449: + br label %n.cond10477 +n.cond10477: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10450, label %n.end10451 -n.body10450: + br i1 %t6, label %n.body10478, label %n.end10479 +n.body10478: %t7 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t5 call void @finch.drop.S_json_Json(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10449 -n.end10451: + br label %n.cond10477 +n.end10479: call void @finch_arr_free(ptr %a) ret void } @@ -106961,14 +107136,14 @@ entry: store %S.json.Json %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 - %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6977, i64 3, i64 0 }) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6976, i64 7, i64 0 }, %S.json.Json %t5) + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6992, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6991, i64 7, i64 0 }, %S.json.Json %t5) store %S.json.Json %t5, ptr %a6 call void @finch.drop.S_json_Json(ptr %a6) %t7 = load %S.json.Json, ptr %a1 - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6978, i64 2, i64 0 }, %S.json.Json %t7) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6993, i64 2, i64 0 }, %S.json.Json %t7) %t8 = load %S.json.Json, ptr %a2 - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6979, i64 6, i64 0 }, %S.json.Json %t8) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6994, i64 6, i64 0 }, %S.json.Json %t8) %t9 = load %S.json.Json, ptr %a4 call void @finch.lsp.send(%S.json.Json %t9) call void @finch.drop.S_json_Json(ptr %a4) @@ -106986,17 +107161,17 @@ entry: store %S.json.Json %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 - %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6981, i64 3, i64 0 }) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6980, i64 7, i64 0 }, %S.json.Json %t5) + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6996, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6995, i64 7, i64 0 }, %S.json.Json %t5) store %S.json.Json %t5, ptr %a6 call void @finch.drop.S_json_Json(ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a1 %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6982, i64 6, i64 0 }, %S.json.Json %t8) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6997, i64 6, i64 0 }, %S.json.Json %t8) store %S.json.Json %t8, ptr %a9 call void @finch.drop.S_json_Json(ptr %a9) %t10 = load %S.json.Json, ptr %a2 - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6983, i64 6, i64 0 }, %S.json.Json %t10) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6998, i64 6, i64 0 }, %S.json.Json %t10) %t11 = load %S.json.Json, ptr %a4 call void @finch.lsp.send(%S.json.Json %t11) call void @finch.drop.S_json_Json(ptr %a4) @@ -107026,12 +107201,12 @@ entry: store %S.json.Json %t3, ptr %a4 %t5 = load i64, ptr %a1 %t6 = call %S.json.Json @finch.lsp.num(i64 %t5) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6984, i64 4, i64 0 }, %S.json.Json %t6) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6999, i64 4, i64 0 }, %S.json.Json %t6) store %S.json.Json %t6, ptr %a7 call void @finch.drop.S_json_Json(ptr %a7) %t8 = load i64, ptr %a2 %t9 = call %S.json.Json @finch.lsp.num(i64 %t8) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6985, i64 9, i64 0 }, %S.json.Json %t9) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7000, i64 9, i64 0 }, %S.json.Json %t9) store %S.json.Json %t9, ptr %a10 call void @finch.drop.S_json_Json(ptr %a10) %t11 = load %S.json.Json, ptr %a4 @@ -107054,13 +107229,13 @@ entry: %t6 = load i64, ptr %a1 %t7 = load i64, ptr %a2 %t8 = call %S.json.Json @finch.lsp.position(i64 %t6, i64 %t7) - call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.6986, i64 5, i64 0 }, %S.json.Json %t8) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7001, i64 5, i64 0 }, %S.json.Json %t8) store %S.json.Json %t8, ptr %a9 call void @finch.drop.S_json_Json(ptr %a9) %t10 = load i64, ptr %a1 %t11 = load i64, ptr %a3 %t12 = call %S.json.Json @finch.lsp.position(i64 %t10, i64 %t11) - call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.6987, i64 3, i64 0 }, %S.json.Json %t12) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7002, i64 3, i64 0 }, %S.json.Json %t12) store %S.json.Json %t12, ptr %a13 call void @finch.drop.S_json_Json(ptr %a13) %t14 = load %S.json.Json, ptr %a5 @@ -107077,7 +107252,7 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6989, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7004, i64 1, i64 0 }, ptr %a5 call void @finch_str_split(ptr %a6, ptr %a3, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 ret { ptr, i64, i64 } %t7 @@ -107099,17 +107274,17 @@ entry: %t7 = icmp eq i32 %t6, 0 %t8 = load { ptr, i64, i64 }, ptr %a3 %t9 = load i64, ptr %a4 - br i1 %t7, label %or.failed10452, label %or.ok10453 -or.failed10452: + br i1 %t7, label %or.failed10480, label %or.ok10481 +or.failed10480: store { ptr, i64, i64 } %t8, ptr %a10 call void @finch_str_drop(ptr %a10) - br label %or.bend10454 -or.bend10454: - br label %or.end10455 -or.ok10453: - br label %or.end10455 -or.end10455: - %t11 = phi i64 [ 0, %or.bend10454 ], [ %t9, %or.ok10453 ] + br label %or.bend10482 +or.bend10482: + br label %or.end10483 +or.ok10481: + br label %or.end10483 +or.end10483: + %t11 = phi i64 [ 0, %or.bend10482 ], [ %t9, %or.ok10481 ] ret i64 %t11 } @@ -107144,19 +107319,19 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6991, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7006, i64 9, i64 0 }, ptr %a5 %t6 = call i64 @finch_str_find(ptr %a3, ptr %a5) store i64 %t6, ptr %a7 %t8 = load i64, ptr %a7 %t9 = icmp slt i64 %t8, 0 - br i1 %t9, label %then10456, label %endif10458 -then10456: + br i1 %t9, label %then10484, label %endif10486 +then10484: ret %S.lsp.Diag zeroinitializer -endif10458: +endif10486: %t10 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t10, ptr %a11 %t13 = load i64, ptr %a7 - call void @finch_str_sub(ptr %a12, ptr %a11, i64 0, i64 %t13, ptr @.str.6992, i64 280) + call void @finch_str_sub(ptr %a12, ptr %a11, i64 0, i64 %t13, ptr @.str.7007, i64 280) %t14 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load { ptr, i64, i64 }, ptr %a1 @@ -107165,36 +107340,36 @@ endif10458: %t20 = add i64 %t19, 9 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t22 = load i64, ptr %t21 - call void @finch_str_sub(ptr %a18, ptr %a17, i64 %t20, i64 %t22, ptr @.str.6993, i64 281) + call void @finch_str_sub(ptr %a18, ptr %a17, i64 %t20, i64 %t22, ptr @.str.7008, i64 281) %t23 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t23, ptr %a24 %t25 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t25, ptr %a26 - store { ptr, i64, i64 } { ptr @.str.6995, i64 1, i64 0 }, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.7010, i64 1, i64 0 }, ptr %a28 call void @finch_str_split(ptr %a29, ptr %a26, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t30, ptr %a31 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t33, 3 - br i1 %t34, label %then10459, label %endif10461 -then10459: + br i1 %t34, label %then10487, label %endif10489 +then10487: call void @finch.drop.arr_str(ptr %a31) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a15) ret %S.lsp.Diag zeroinitializer -endif10461: +endif10489: %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t36 = load i64, ptr %t35 %t37 = sub i64 %t36, 1 %t38 = load { ptr, i64, i64 }, ptr %a31 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 %t37, %t39 - br i1 %t40, label %range10462, label %inrange10463 -range10462: - call void @finch_panic_index(ptr @.str.6996, i64 287, i64 %t37, i64 %t39) + br i1 %t40, label %range10490, label %inrange10491 +range10490: + call void @finch_panic_index(ptr @.str.7011, i64 287, i64 %t37, i64 %t39) unreachable -inrange10463: +inrange10491: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t37 %t43 = load { ptr, i64, i64 }, ptr %t42 @@ -107206,11 +107381,11 @@ inrange10463: %t49 = load { ptr, i64, i64 }, ptr %a31 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 %t48, %t50 - br i1 %t51, label %range10464, label %inrange10465 -range10464: - call void @finch_panic_index(ptr @.str.6997, i64 288, i64 %t48, i64 %t50) + br i1 %t51, label %range10492, label %inrange10493 +range10492: + call void @finch_panic_index(ptr @.str.7012, i64 288, i64 %t48, i64 %t50) unreachable -inrange10465: +inrange10493: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t48 %t54 = load { ptr, i64, i64 }, ptr %t53 @@ -107221,22 +107396,22 @@ inrange10465: %t59 = load i64, ptr %t58 %t60 = sub i64 %t59, 2 store i64 0, ptr %a61 - br label %for.cond10466 -for.cond10466: + br label %for.cond10494 +for.cond10494: %t62 = load i64, ptr %a61 %t63 = icmp slt i64 %t62, %t60 - br i1 %t63, label %for.body10467, label %for.end10469 -for.body10467: + br i1 %t63, label %for.body10495, label %for.end10497 +for.body10495: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 %t65 = load i64, ptr %a61 %t66 = load { ptr, i64, i64 }, ptr %a31 %t67 = extractvalue { ptr, i64, i64 } %t66, 1 %t68 = icmp uge i64 %t65, %t67 - br i1 %t68, label %range10470, label %inrange10471 -range10470: - call void @finch_panic_index(ptr @.str.6998, i64 291, i64 %t65, i64 %t67) + br i1 %t68, label %range10498, label %inrange10499 +range10498: + call void @finch_panic_index(ptr @.str.7013, i64 291, i64 %t65, i64 %t67) unreachable -inrange10471: +inrange10499: %t69 = extractvalue { ptr, i64, i64 } %t66, 0 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t65 %t71 = load { ptr, i64, i64 }, ptr %t70 @@ -107250,16 +107425,16 @@ inrange10471: %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i64 %t75 store { ptr, i64, i64 } %t74, ptr %t78 store i64 %t76, ptr %t64 - br label %for.step10468 -for.step10468: + br label %for.step10496 +for.step10496: %t79 = load i64, ptr %a61 %t80 = add i64 %t79, 1 store i64 %t80, ptr %a61 - br label %for.cond10466 -for.end10469: + br label %for.cond10494 +for.end10497: %t81 = insertvalue %S.lsp.Diag zeroinitializer, i1 true, 0 %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6999, i64 1, i64 0 }, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.7014, i64 1, i64 0 }, ptr %a83 call void @finch_str_join(ptr %a84, ptr %a57, ptr %a83) %t85 = load { ptr, i64, i64 }, ptr %a84 %t86 = insertvalue %S.lsp.Diag %t81, { ptr, i64, i64 } %t85, 1 @@ -107373,41 +107548,41 @@ entry: store %S.lsp.Analysis zeroinitializer, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.7001, i64 1, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7016, i64 1, i64 0 }, ptr %a6 call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store i64 0, ptr %a10 - br label %each.cond10472 -each.cond10472: + br label %each.cond10500 +each.cond10500: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 - br i1 %t14, label %each.body10473, label %each.end10475 -each.body10473: + br i1 %t14, label %each.body10501, label %each.end10503 +each.body10501: %t15 = load ptr, ptr %a9 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t19, ptr %a20 - store { ptr, i64, i64 } { ptr @.str.7003, i64 1, i64 0 }, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.7018, i64 1, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_starts(ptr %a20, ptr %a22) %t24 = icmp ne i32 %t23, 0 - br i1 %t24, label %then10476, label %else10477 -then10476: + br i1 %t24, label %then10504, label %else10505 +then10504: %t25 = load { ptr, i64, i64 }, ptr %a18 %t26 = call { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %t25) store { ptr, i64, i64 } %t26, ptr %a27 %t28 = load { ptr, i64, i64 }, ptr %a27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 - br i1 %t30, label %range10479, label %inrange10480 -range10479: - call void @finch_panic_index(ptr @.str.7004, i64 301, i64 0, i64 %t29) + br i1 %t30, label %range10507, label %inrange10508 +range10507: + call void @finch_panic_index(ptr @.str.7019, i64 301, i64 0, i64 %t29) unreachable -inrange10480: +inrange10508: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i64 0 %t33 = load { ptr, i64, i64 }, ptr %t32 @@ -107417,33 +107592,33 @@ inrange10480: store { ptr, i64, i64 } %t36, ptr %a37 %t38 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t38, ptr %a39 - store { ptr, i64, i64 } { ptr @.str.7005, i64 2, i64 0 }, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.7020, i64 2, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 - br label %logic.from10481 -logic.from10481: - br i1 %t42, label %logic.rhs10482, label %logic.end10483 -logic.rhs10482: + br label %logic.from10509 +logic.from10509: + br i1 %t42, label %logic.rhs10510, label %logic.end10511 +logic.rhs10510: %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t44 = load i64, ptr %t43 %t45 = icmp sge i64 %t44, 9 - br label %logic.rend10484 -logic.rend10484: - br label %logic.end10483 -logic.end10483: - %t46 = phi i1 [ false, %logic.from10481 ], [ %t45, %logic.rend10484 ] - br i1 %t46, label %then10485, label %else10486 -then10485: + br label %logic.rend10512 +logic.rend10512: + br label %logic.end10511 +logic.end10511: + %t46 = phi i1 [ false, %logic.from10509 ], [ %t45, %logic.rend10512 ] + br i1 %t46, label %then10513, label %else10514 +then10513: %t47 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 0 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1 %t49 = load { ptr, i64, i64 }, ptr %a27 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 1, %t50 - br i1 %t51, label %range10488, label %inrange10489 -range10488: - call void @finch_panic_index(ptr @.str.7006, i64 303, i64 1, i64 %t50) + br i1 %t51, label %range10516, label %inrange10517 +range10516: + call void @finch_panic_index(ptr @.str.7021, i64 303, i64 1, i64 %t50) unreachable -inrange10489: +inrange10517: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 1 %t54 = load { ptr, i64, i64 }, ptr %t53 @@ -107454,11 +107629,11 @@ inrange10489: %t59 = load { ptr, i64, i64 }, ptr %a27 %t60 = extractvalue { ptr, i64, i64 } %t59, 1 %t61 = icmp uge i64 2, %t60 - br i1 %t61, label %range10490, label %inrange10491 -range10490: - call void @finch_panic_index(ptr @.str.7007, i64 303, i64 2, i64 %t60) + br i1 %t61, label %range10518, label %inrange10519 +range10518: + call void @finch_panic_index(ptr @.str.7022, i64 303, i64 2, i64 %t60) unreachable -inrange10491: +inrange10519: %t62 = extractvalue { ptr, i64, i64 } %t59, 0 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 2 %t64 = load { ptr, i64, i64 }, ptr %t63 @@ -107467,11 +107642,11 @@ inrange10491: %t67 = load { ptr, i64, i64 }, ptr %a27 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 3, %t68 - br i1 %t69, label %range10492, label %inrange10493 -range10492: - call void @finch_panic_index(ptr @.str.7008, i64 303, i64 3, i64 %t68) + br i1 %t69, label %range10520, label %inrange10521 +range10520: + call void @finch_panic_index(ptr @.str.7023, i64 303, i64 3, i64 %t68) unreachable -inrange10493: +inrange10521: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 3 %t72 = load { ptr, i64, i64 }, ptr %t71 @@ -107480,11 +107655,11 @@ inrange10493: %t75 = load { ptr, i64, i64 }, ptr %a27 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 4, %t76 - br i1 %t77, label %range10494, label %inrange10495 -range10494: - call void @finch_panic_index(ptr @.str.7009, i64 303, i64 4, i64 %t76) + br i1 %t77, label %range10522, label %inrange10523 +range10522: + call void @finch_panic_index(ptr @.str.7024, i64 303, i64 4, i64 %t76) unreachable -inrange10495: +inrange10523: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 4 %t80 = load { ptr, i64, i64 }, ptr %t79 @@ -107493,11 +107668,11 @@ inrange10495: %t83 = load { ptr, i64, i64 }, ptr %a27 %t84 = extractvalue { ptr, i64, i64 } %t83, 1 %t85 = icmp uge i64 5, %t84 - br i1 %t85, label %range10496, label %inrange10497 -range10496: - call void @finch_panic_index(ptr @.str.7010, i64 303, i64 5, i64 %t84) + br i1 %t85, label %range10524, label %inrange10525 +range10524: + call void @finch_panic_index(ptr @.str.7025, i64 303, i64 5, i64 %t84) unreachable -inrange10497: +inrange10525: %t86 = extractvalue { ptr, i64, i64 } %t83, 0 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 5 %t88 = load { ptr, i64, i64 }, ptr %t87 @@ -107508,11 +107683,11 @@ inrange10497: %t93 = load { ptr, i64, i64 }, ptr %a27 %t94 = extractvalue { ptr, i64, i64 } %t93, 1 %t95 = icmp uge i64 6, %t94 - br i1 %t95, label %range10498, label %inrange10499 -range10498: - call void @finch_panic_index(ptr @.str.7011, i64 303, i64 6, i64 %t94) + br i1 %t95, label %range10526, label %inrange10527 +range10526: + call void @finch_panic_index(ptr @.str.7026, i64 303, i64 6, i64 %t94) unreachable -inrange10499: +inrange10527: %t96 = extractvalue { ptr, i64, i64 } %t93, 0 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 6 %t98 = load { ptr, i64, i64 }, ptr %t97 @@ -107521,11 +107696,11 @@ inrange10499: %t101 = load { ptr, i64, i64 }, ptr %a27 %t102 = extractvalue { ptr, i64, i64 } %t101, 1 %t103 = icmp uge i64 7, %t102 - br i1 %t103, label %range10500, label %inrange10501 -range10500: - call void @finch_panic_index(ptr @.str.7012, i64 303, i64 7, i64 %t102) + br i1 %t103, label %range10528, label %inrange10529 +range10528: + call void @finch_panic_index(ptr @.str.7027, i64 303, i64 7, i64 %t102) unreachable -inrange10501: +inrange10529: %t104 = extractvalue { ptr, i64, i64 } %t101, 0 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 7 %t106 = load { ptr, i64, i64 }, ptr %t105 @@ -107534,11 +107709,11 @@ inrange10501: %t109 = load { ptr, i64, i64 }, ptr %a27 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 8, %t110 - br i1 %t111, label %range10502, label %inrange10503 -range10502: - call void @finch_panic_index(ptr @.str.7013, i64 303, i64 8, i64 %t110) + br i1 %t111, label %range10530, label %inrange10531 +range10530: + call void @finch_panic_index(ptr @.str.7028, i64 303, i64 8, i64 %t110) unreachable -inrange10503: +inrange10531: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 8 %t114 = load { ptr, i64, i64 }, ptr %t113 @@ -107551,37 +107726,37 @@ inrange10503: %t120 = getelementptr inbounds %S.lsp.Ref, ptr %t119, i64 %t117 store %S.lsp.Ref %t116, ptr %t120 store i64 %t118, ptr %t48 - br label %endif10487 -else10486: + br label %endif10515 +else10514: %t121 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t121, ptr %a122 - store { ptr, i64, i64 } { ptr @.str.7014, i64 2, i64 0 }, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.7029, i64 2, i64 0 }, ptr %a123 %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) %t125 = icmp ne i32 %t124, 0 - br label %logic.from10504 -logic.from10504: - br i1 %t125, label %logic.rhs10505, label %logic.end10506 -logic.rhs10505: + br label %logic.from10532 +logic.from10532: + br i1 %t125, label %logic.rhs10533, label %logic.end10534 +logic.rhs10533: %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t127 = load i64, ptr %t126 %t128 = icmp sge i64 %t127, 9 - br label %logic.rend10507 -logic.rend10507: - br label %logic.end10506 -logic.end10506: - %t129 = phi i1 [ false, %logic.from10504 ], [ %t128, %logic.rend10507 ] - br i1 %t129, label %then10508, label %else10509 -then10508: + br label %logic.rend10535 +logic.rend10535: + br label %logic.end10534 +logic.end10534: + %t129 = phi i1 [ false, %logic.from10532 ], [ %t128, %logic.rend10535 ] + br i1 %t129, label %then10536, label %else10537 +then10536: %t130 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 1 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 %t132 = load { ptr, i64, i64 }, ptr %a27 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 1, %t133 - br i1 %t134, label %range10511, label %inrange10512 -range10511: - call void @finch_panic_index(ptr @.str.7015, i64 305, i64 1, i64 %t133) + br i1 %t134, label %range10539, label %inrange10540 +range10539: + call void @finch_panic_index(ptr @.str.7030, i64 305, i64 1, i64 %t133) unreachable -inrange10512: +inrange10540: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i64 1 %t137 = load { ptr, i64, i64 }, ptr %t136 @@ -107592,11 +107767,11 @@ inrange10512: %t142 = load { ptr, i64, i64 }, ptr %a27 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 2, %t143 - br i1 %t144, label %range10513, label %inrange10514 -range10513: - call void @finch_panic_index(ptr @.str.7016, i64 305, i64 2, i64 %t143) + br i1 %t144, label %range10541, label %inrange10542 +range10541: + call void @finch_panic_index(ptr @.str.7031, i64 305, i64 2, i64 %t143) unreachable -inrange10514: +inrange10542: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 2 %t147 = load { ptr, i64, i64 }, ptr %t146 @@ -107607,11 +107782,11 @@ inrange10514: %t152 = load { ptr, i64, i64 }, ptr %a27 %t153 = extractvalue { ptr, i64, i64 } %t152, 1 %t154 = icmp uge i64 3, %t153 - br i1 %t154, label %range10515, label %inrange10516 -range10515: - call void @finch_panic_index(ptr @.str.7017, i64 305, i64 3, i64 %t153) + br i1 %t154, label %range10543, label %inrange10544 +range10543: + call void @finch_panic_index(ptr @.str.7032, i64 305, i64 3, i64 %t153) unreachable -inrange10516: +inrange10544: %t155 = extractvalue { ptr, i64, i64 } %t152, 0 %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i64 3 %t157 = load { ptr, i64, i64 }, ptr %t156 @@ -107622,11 +107797,11 @@ inrange10516: %t162 = load { ptr, i64, i64 }, ptr %a27 %t163 = extractvalue { ptr, i64, i64 } %t162, 1 %t164 = icmp uge i64 4, %t163 - br i1 %t164, label %range10517, label %inrange10518 -range10517: - call void @finch_panic_index(ptr @.str.7018, i64 305, i64 4, i64 %t163) + br i1 %t164, label %range10545, label %inrange10546 +range10545: + call void @finch_panic_index(ptr @.str.7033, i64 305, i64 4, i64 %t163) unreachable -inrange10518: +inrange10546: %t165 = extractvalue { ptr, i64, i64 } %t162, 0 %t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %t165, i64 4 %t167 = load { ptr, i64, i64 }, ptr %t166 @@ -107635,11 +107810,11 @@ inrange10518: %t170 = load { ptr, i64, i64 }, ptr %a27 %t171 = extractvalue { ptr, i64, i64 } %t170, 1 %t172 = icmp uge i64 5, %t171 - br i1 %t172, label %range10519, label %inrange10520 -range10519: - call void @finch_panic_index(ptr @.str.7019, i64 305, i64 5, i64 %t171) + br i1 %t172, label %range10547, label %inrange10548 +range10547: + call void @finch_panic_index(ptr @.str.7034, i64 305, i64 5, i64 %t171) unreachable -inrange10520: +inrange10548: %t173 = extractvalue { ptr, i64, i64 } %t170, 0 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 5 %t175 = load { ptr, i64, i64 }, ptr %t174 @@ -107648,11 +107823,11 @@ inrange10520: %t178 = load { ptr, i64, i64 }, ptr %a27 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 6, %t179 - br i1 %t180, label %range10521, label %inrange10522 -range10521: - call void @finch_panic_index(ptr @.str.7020, i64 305, i64 6, i64 %t179) + br i1 %t180, label %range10549, label %inrange10550 +range10549: + call void @finch_panic_index(ptr @.str.7035, i64 305, i64 6, i64 %t179) unreachable -inrange10522: +inrange10550: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds { ptr, i64, i64 }, ptr %t181, i64 6 %t183 = load { ptr, i64, i64 }, ptr %t182 @@ -107663,11 +107838,11 @@ inrange10522: %t188 = load { ptr, i64, i64 }, ptr %a27 %t189 = extractvalue { ptr, i64, i64 } %t188, 1 %t190 = icmp uge i64 7, %t189 - br i1 %t190, label %range10523, label %inrange10524 -range10523: - call void @finch_panic_index(ptr @.str.7021, i64 305, i64 7, i64 %t189) + br i1 %t190, label %range10551, label %inrange10552 +range10551: + call void @finch_panic_index(ptr @.str.7036, i64 305, i64 7, i64 %t189) unreachable -inrange10524: +inrange10552: %t191 = extractvalue { ptr, i64, i64 } %t188, 0 %t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %t191, i64 7 %t193 = load { ptr, i64, i64 }, ptr %t192 @@ -107676,11 +107851,11 @@ inrange10524: %t196 = load { ptr, i64, i64 }, ptr %a27 %t197 = extractvalue { ptr, i64, i64 } %t196, 1 %t198 = icmp uge i64 8, %t197 - br i1 %t198, label %range10525, label %inrange10526 -range10525: - call void @finch_panic_index(ptr @.str.7022, i64 305, i64 8, i64 %t197) + br i1 %t198, label %range10553, label %inrange10554 +range10553: + call void @finch_panic_index(ptr @.str.7037, i64 305, i64 8, i64 %t197) unreachable -inrange10526: +inrange10554: %t199 = extractvalue { ptr, i64, i64 } %t196, 0 %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 8 %t201 = load { ptr, i64, i64 }, ptr %t200 @@ -107693,37 +107868,37 @@ inrange10526: %t207 = getelementptr inbounds %S.lsp.VarRec, ptr %t206, i64 %t204 store %S.lsp.VarRec %t203, ptr %t207 store i64 %t205, ptr %t131 - br label %endif10510 -else10509: + br label %endif10538 +else10537: %t208 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t208, ptr %a209 - store { ptr, i64, i64 } { ptr @.str.7023, i64 2, i64 0 }, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.7038, i64 2, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 - br label %logic.from10527 -logic.from10527: - br i1 %t212, label %logic.rhs10528, label %logic.end10529 -logic.rhs10528: + br label %logic.from10555 +logic.from10555: + br i1 %t212, label %logic.rhs10556, label %logic.end10557 +logic.rhs10556: %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t214 = load i64, ptr %t213 %t215 = icmp sge i64 %t214, 10 - br label %logic.rend10530 -logic.rend10530: - br label %logic.end10529 -logic.end10529: - %t216 = phi i1 [ false, %logic.from10527 ], [ %t215, %logic.rend10530 ] - br i1 %t216, label %then10531, label %else10532 -then10531: + br label %logic.rend10558 +logic.rend10558: + br label %logic.end10557 +logic.end10557: + %t216 = phi i1 [ false, %logic.from10555 ], [ %t215, %logic.rend10558 ] + br i1 %t216, label %then10559, label %else10560 +then10559: %t217 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 2 %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %t217, i32 0, i32 1 %t219 = load { ptr, i64, i64 }, ptr %a27 %t220 = extractvalue { ptr, i64, i64 } %t219, 1 %t221 = icmp uge i64 1, %t220 - br i1 %t221, label %range10534, label %inrange10535 -range10534: - call void @finch_panic_index(ptr @.str.7024, i64 307, i64 1, i64 %t220) + br i1 %t221, label %range10562, label %inrange10563 +range10562: + call void @finch_panic_index(ptr @.str.7039, i64 307, i64 1, i64 %t220) unreachable -inrange10535: +inrange10563: %t222 = extractvalue { ptr, i64, i64 } %t219, 0 %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i64 1 %t224 = load { ptr, i64, i64 }, ptr %t223 @@ -107734,11 +107909,11 @@ inrange10535: %t229 = load { ptr, i64, i64 }, ptr %a27 %t230 = extractvalue { ptr, i64, i64 } %t229, 1 %t231 = icmp uge i64 2, %t230 - br i1 %t231, label %range10536, label %inrange10537 -range10536: - call void @finch_panic_index(ptr @.str.7025, i64 307, i64 2, i64 %t230) + br i1 %t231, label %range10564, label %inrange10565 +range10564: + call void @finch_panic_index(ptr @.str.7040, i64 307, i64 2, i64 %t230) unreachable -inrange10537: +inrange10565: %t232 = extractvalue { ptr, i64, i64 } %t229, 0 %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 2 %t234 = load { ptr, i64, i64 }, ptr %t233 @@ -107749,11 +107924,11 @@ inrange10537: %t239 = load { ptr, i64, i64 }, ptr %a27 %t240 = extractvalue { ptr, i64, i64 } %t239, 1 %t241 = icmp uge i64 3, %t240 - br i1 %t241, label %range10538, label %inrange10539 -range10538: - call void @finch_panic_index(ptr @.str.7026, i64 307, i64 3, i64 %t240) + br i1 %t241, label %range10566, label %inrange10567 +range10566: + call void @finch_panic_index(ptr @.str.7041, i64 307, i64 3, i64 %t240) unreachable -inrange10539: +inrange10567: %t242 = extractvalue { ptr, i64, i64 } %t239, 0 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 3 %t244 = load { ptr, i64, i64 }, ptr %t243 @@ -107764,11 +107939,11 @@ inrange10539: %t249 = load { ptr, i64, i64 }, ptr %a27 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 4, %t250 - br i1 %t251, label %range10540, label %inrange10541 -range10540: - call void @finch_panic_index(ptr @.str.7027, i64 307, i64 4, i64 %t250) + br i1 %t251, label %range10568, label %inrange10569 +range10568: + call void @finch_panic_index(ptr @.str.7042, i64 307, i64 4, i64 %t250) unreachable -inrange10541: +inrange10569: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i64 4 %t254 = load { ptr, i64, i64 }, ptr %t253 @@ -107779,11 +107954,11 @@ inrange10541: %t259 = load { ptr, i64, i64 }, ptr %a27 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 5, %t260 - br i1 %t261, label %range10542, label %inrange10543 -range10542: - call void @finch_panic_index(ptr @.str.7028, i64 307, i64 5, i64 %t260) + br i1 %t261, label %range10570, label %inrange10571 +range10570: + call void @finch_panic_index(ptr @.str.7043, i64 307, i64 5, i64 %t260) unreachable -inrange10543: +inrange10571: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 5 %t264 = load { ptr, i64, i64 }, ptr %t263 @@ -107792,11 +107967,11 @@ inrange10543: %t267 = load { ptr, i64, i64 }, ptr %a27 %t268 = extractvalue { ptr, i64, i64 } %t267, 1 %t269 = icmp uge i64 6, %t268 - br i1 %t269, label %range10544, label %inrange10545 -range10544: - call void @finch_panic_index(ptr @.str.7029, i64 307, i64 6, i64 %t268) + br i1 %t269, label %range10572, label %inrange10573 +range10572: + call void @finch_panic_index(ptr @.str.7044, i64 307, i64 6, i64 %t268) unreachable -inrange10545: +inrange10573: %t270 = extractvalue { ptr, i64, i64 } %t267, 0 %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i64 6 %t272 = load { ptr, i64, i64 }, ptr %t271 @@ -107805,11 +107980,11 @@ inrange10545: %t275 = load { ptr, i64, i64 }, ptr %a27 %t276 = extractvalue { ptr, i64, i64 } %t275, 1 %t277 = icmp uge i64 7, %t276 - br i1 %t277, label %range10546, label %inrange10547 -range10546: - call void @finch_panic_index(ptr @.str.7030, i64 307, i64 7, i64 %t276) + br i1 %t277, label %range10574, label %inrange10575 +range10574: + call void @finch_panic_index(ptr @.str.7045, i64 307, i64 7, i64 %t276) unreachable -inrange10547: +inrange10575: %t278 = extractvalue { ptr, i64, i64 } %t275, 0 %t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i64 7 %t280 = load { ptr, i64, i64 }, ptr %t279 @@ -107818,11 +107993,11 @@ inrange10547: %t283 = load { ptr, i64, i64 }, ptr %a27 %t284 = extractvalue { ptr, i64, i64 } %t283, 1 %t285 = icmp uge i64 8, %t284 - br i1 %t285, label %range10548, label %inrange10549 -range10548: - call void @finch_panic_index(ptr @.str.7031, i64 307, i64 8, i64 %t284) + br i1 %t285, label %range10576, label %inrange10577 +range10576: + call void @finch_panic_index(ptr @.str.7046, i64 307, i64 8, i64 %t284) unreachable -inrange10549: +inrange10577: %t286 = extractvalue { ptr, i64, i64 } %t283, 0 %t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t286, i64 8 %t288 = load { ptr, i64, i64 }, ptr %t287 @@ -107831,16 +108006,16 @@ inrange10549: %t291 = load { ptr, i64, i64 }, ptr %a27 %t292 = extractvalue { ptr, i64, i64 } %t291, 1 %t293 = icmp uge i64 9, %t292 - br i1 %t293, label %range10550, label %inrange10551 -range10550: - call void @finch_panic_index(ptr @.str.7032, i64 307, i64 9, i64 %t292) + br i1 %t293, label %range10578, label %inrange10579 +range10578: + call void @finch_panic_index(ptr @.str.7047, i64 307, i64 9, i64 %t292) unreachable -inrange10551: +inrange10579: %t294 = extractvalue { ptr, i64, i64 } %t291, 0 %t295 = getelementptr inbounds { ptr, i64, i64 }, ptr %t294, i64 9 %t296 = load { ptr, i64, i64 }, ptr %t295 store { ptr, i64, i64 } %t296, ptr %a297 - store { ptr, i64, i64 } { ptr @.str.7034, i64 1, i64 0 }, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.7049, i64 1, i64 0 }, ptr %a299 call void @finch_str_split(ptr %a300, ptr %a297, ptr %a299) %t301 = load { ptr, i64, i64 }, ptr %a300 %t302 = insertvalue %S.lsp.FnRec %t290, { ptr, i64, i64 } %t301, 8 @@ -107851,37 +108026,37 @@ inrange10551: %t306 = getelementptr inbounds %S.lsp.FnRec, ptr %t305, i64 %t303 store %S.lsp.FnRec %t302, ptr %t306 store i64 %t304, ptr %t218 - br label %endif10533 -else10532: + br label %endif10561 +else10560: %t307 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t307, ptr %a308 - store { ptr, i64, i64 } { ptr @.str.7035, i64 2, i64 0 }, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.7050, i64 2, i64 0 }, ptr %a309 %t310 = call i32 @finch_str_eq(ptr %a308, ptr %a309) %t311 = icmp ne i32 %t310, 0 - br label %logic.from10552 -logic.from10552: - br i1 %t311, label %logic.rhs10553, label %logic.end10554 -logic.rhs10553: + br label %logic.from10580 +logic.from10580: + br i1 %t311, label %logic.rhs10581, label %logic.end10582 +logic.rhs10581: %t312 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t313 = load i64, ptr %t312 %t314 = icmp sge i64 %t313, 6 - br label %logic.rend10555 -logic.rend10555: - br label %logic.end10554 -logic.end10554: - %t315 = phi i1 [ false, %logic.from10552 ], [ %t314, %logic.rend10555 ] - br i1 %t315, label %then10556, label %else10557 -then10556: + br label %logic.rend10583 +logic.rend10583: + br label %logic.end10582 +logic.end10582: + %t315 = phi i1 [ false, %logic.from10580 ], [ %t314, %logic.rend10583 ] + br i1 %t315, label %then10584, label %else10585 +then10584: %t316 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i32 0, i32 1 %t318 = load { ptr, i64, i64 }, ptr %a27 %t319 = extractvalue { ptr, i64, i64 } %t318, 1 %t320 = icmp uge i64 1, %t319 - br i1 %t320, label %range10559, label %inrange10560 -range10559: - call void @finch_panic_index(ptr @.str.7036, i64 309, i64 1, i64 %t319) + br i1 %t320, label %range10587, label %inrange10588 +range10587: + call void @finch_panic_index(ptr @.str.7051, i64 309, i64 1, i64 %t319) unreachable -inrange10560: +inrange10588: %t321 = extractvalue { ptr, i64, i64 } %t318, 0 %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i64 1 %t323 = load { ptr, i64, i64 }, ptr %t322 @@ -107892,11 +108067,11 @@ inrange10560: %t328 = load { ptr, i64, i64 }, ptr %a27 %t329 = extractvalue { ptr, i64, i64 } %t328, 1 %t330 = icmp uge i64 2, %t329 - br i1 %t330, label %range10561, label %inrange10562 -range10561: - call void @finch_panic_index(ptr @.str.7037, i64 309, i64 2, i64 %t329) + br i1 %t330, label %range10589, label %inrange10590 +range10589: + call void @finch_panic_index(ptr @.str.7052, i64 309, i64 2, i64 %t329) unreachable -inrange10562: +inrange10590: %t331 = extractvalue { ptr, i64, i64 } %t328, 0 %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i64 2 %t333 = load { ptr, i64, i64 }, ptr %t332 @@ -107907,11 +108082,11 @@ inrange10562: %t338 = load { ptr, i64, i64 }, ptr %a27 %t339 = extractvalue { ptr, i64, i64 } %t338, 1 %t340 = icmp uge i64 3, %t339 - br i1 %t340, label %range10563, label %inrange10564 -range10563: - call void @finch_panic_index(ptr @.str.7038, i64 309, i64 3, i64 %t339) + br i1 %t340, label %range10591, label %inrange10592 +range10591: + call void @finch_panic_index(ptr @.str.7053, i64 309, i64 3, i64 %t339) unreachable -inrange10564: +inrange10592: %t341 = extractvalue { ptr, i64, i64 } %t338, 0 %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 3 %t343 = load { ptr, i64, i64 }, ptr %t342 @@ -107922,11 +108097,11 @@ inrange10564: %t348 = load { ptr, i64, i64 }, ptr %a27 %t349 = extractvalue { ptr, i64, i64 } %t348, 1 %t350 = icmp uge i64 4, %t349 - br i1 %t350, label %range10565, label %inrange10566 -range10565: - call void @finch_panic_index(ptr @.str.7039, i64 309, i64 4, i64 %t349) + br i1 %t350, label %range10593, label %inrange10594 +range10593: + call void @finch_panic_index(ptr @.str.7054, i64 309, i64 4, i64 %t349) unreachable -inrange10566: +inrange10594: %t351 = extractvalue { ptr, i64, i64 } %t348, 0 %t352 = getelementptr inbounds { ptr, i64, i64 }, ptr %t351, i64 4 %t353 = load { ptr, i64, i64 }, ptr %t352 @@ -107935,11 +108110,11 @@ inrange10566: %t356 = load { ptr, i64, i64 }, ptr %a27 %t357 = extractvalue { ptr, i64, i64 } %t356, 1 %t358 = icmp uge i64 5, %t357 - br i1 %t358, label %range10567, label %inrange10568 -range10567: - call void @finch_panic_index(ptr @.str.7040, i64 309, i64 5, i64 %t357) + br i1 %t358, label %range10595, label %inrange10596 +range10595: + call void @finch_panic_index(ptr @.str.7055, i64 309, i64 5, i64 %t357) unreachable -inrange10568: +inrange10596: %t359 = extractvalue { ptr, i64, i64 } %t356, 0 %t360 = getelementptr inbounds { ptr, i64, i64 }, ptr %t359, i64 5 %t361 = load { ptr, i64, i64 }, ptr %t360 @@ -107952,40 +108127,40 @@ inrange10568: %t367 = getelementptr inbounds %S.lsp.StructRec, ptr %t366, i64 %t364 store %S.lsp.StructRec %t363, ptr %t367 store i64 %t365, ptr %t317 - br label %endif10558 -else10557: + br label %endif10586 +else10585: %t368 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t368, ptr %a369 - store { ptr, i64, i64 } { ptr @.str.7041, i64 3, i64 0 }, ptr %a370 + store { ptr, i64, i64 } { ptr @.str.7056, i64 3, i64 0 }, ptr %a370 %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) %t372 = icmp ne i32 %t371, 0 - br label %logic.from10569 -logic.from10569: - br i1 %t372, label %logic.rhs10570, label %logic.end10571 -logic.rhs10570: + br label %logic.from10597 +logic.from10597: + br i1 %t372, label %logic.rhs10598, label %logic.end10599 +logic.rhs10598: %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t374 = load i64, ptr %t373 %t375 = icmp sge i64 %t374, 5 - br label %logic.rend10572 -logic.rend10572: - br label %logic.end10571 -logic.end10571: - %t376 = phi i1 [ false, %logic.from10569 ], [ %t375, %logic.rend10572 ] - br label %logic.from10573 -logic.from10573: - br i1 %t376, label %logic.rhs10574, label %logic.end10575 -logic.rhs10574: + br label %logic.rend10600 +logic.rend10600: + br label %logic.end10599 +logic.end10599: + %t376 = phi i1 [ false, %logic.from10597 ], [ %t375, %logic.rend10600 ] + br label %logic.from10601 +logic.from10601: + br i1 %t376, label %logic.rhs10602, label %logic.end10603 +logic.rhs10602: %t377 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %t377, i32 0, i32 1 %t379 = load i64, ptr %t378 %t380 = icmp sgt i64 %t379, 0 - br label %logic.rend10576 -logic.rend10576: - br label %logic.end10575 -logic.end10575: - %t381 = phi i1 [ false, %logic.from10573 ], [ %t380, %logic.rend10576 ] - br i1 %t381, label %then10577, label %else10578 -then10577: + br label %logic.rend10604 +logic.rend10604: + br label %logic.end10603 +logic.end10603: + %t381 = phi i1 [ false, %logic.from10601 ], [ %t380, %logic.rend10604 ] + br i1 %t381, label %then10605, label %else10606 +then10605: %t382 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %t382, i32 0, i32 1 %t384 = load i64, ptr %t383 @@ -107996,11 +108171,11 @@ then10577: %t389 = load { ptr, i64, i64 }, ptr %t387 %t390 = extractvalue { ptr, i64, i64 } %t389, 1 %t391 = icmp uge i64 %t388, %t390 - br i1 %t391, label %range10580, label %inrange10581 -range10580: - call void @finch_panic_index(ptr @.str.7042, i64 312, i64 %t388, i64 %t390) + br i1 %t391, label %range10608, label %inrange10609 +range10608: + call void @finch_panic_index(ptr @.str.7057, i64 312, i64 %t388, i64 %t390) unreachable -inrange10581: +inrange10609: %t392 = extractvalue { ptr, i64, i64 } %t389, 0 %t393 = getelementptr inbounds %S.lsp.StructRec, ptr %t392, i64 %t388 %t394 = getelementptr inbounds %S.lsp.StructRec, ptr %t393, i32 0, i32 5 @@ -108008,11 +108183,11 @@ inrange10581: %t396 = load { ptr, i64, i64 }, ptr %a27 %t397 = extractvalue { ptr, i64, i64 } %t396, 1 %t398 = icmp uge i64 3, %t397 - br i1 %t398, label %range10582, label %inrange10583 -range10582: - call void @finch_panic_index(ptr @.str.7043, i64 312, i64 3, i64 %t397) + br i1 %t398, label %range10610, label %inrange10611 +range10610: + call void @finch_panic_index(ptr @.str.7058, i64 312, i64 3, i64 %t397) unreachable -inrange10583: +inrange10611: %t399 = extractvalue { ptr, i64, i64 } %t396, 0 %t400 = getelementptr inbounds { ptr, i64, i64 }, ptr %t399, i64 3 %t401 = load { ptr, i64, i64 }, ptr %t400 @@ -108031,11 +108206,11 @@ inrange10583: %t411 = load { ptr, i64, i64 }, ptr %t409 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 %t410, %t412 - br i1 %t413, label %range10584, label %inrange10585 -range10584: - call void @finch_panic_index(ptr @.str.7044, i64 313, i64 %t410, i64 %t412) + br i1 %t413, label %range10612, label %inrange10613 +range10612: + call void @finch_panic_index(ptr @.str.7059, i64 313, i64 %t410, i64 %t412) unreachable -inrange10585: +inrange10613: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds %S.lsp.StructRec, ptr %t414, i64 %t410 %t416 = getelementptr inbounds %S.lsp.StructRec, ptr %t415, i32 0, i32 6 @@ -108043,11 +108218,11 @@ inrange10585: %t418 = load { ptr, i64, i64 }, ptr %a27 %t419 = extractvalue { ptr, i64, i64 } %t418, 1 %t420 = icmp uge i64 4, %t419 - br i1 %t420, label %range10586, label %inrange10587 -range10586: - call void @finch_panic_index(ptr @.str.7045, i64 313, i64 4, i64 %t419) + br i1 %t420, label %range10614, label %inrange10615 +range10614: + call void @finch_panic_index(ptr @.str.7060, i64 313, i64 4, i64 %t419) unreachable -inrange10587: +inrange10615: %t421 = extractvalue { ptr, i64, i64 } %t418, 0 %t422 = getelementptr inbounds { ptr, i64, i64 }, ptr %t421, i64 4 %t423 = load { ptr, i64, i64 }, ptr %t422 @@ -108061,37 +108236,37 @@ inrange10587: %t430 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i64 %t427 store { ptr, i64, i64 } %t426, ptr %t430 store i64 %t428, ptr %t417 - br label %endif10579 -else10578: + br label %endif10607 +else10606: %t431 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t431, ptr %a432 - store { ptr, i64, i64 } { ptr @.str.7046, i64 2, i64 0 }, ptr %a433 + store { ptr, i64, i64 } { ptr @.str.7061, i64 2, i64 0 }, ptr %a433 %t434 = call i32 @finch_str_eq(ptr %a432, ptr %a433) %t435 = icmp ne i32 %t434, 0 - br label %logic.from10588 -logic.from10588: - br i1 %t435, label %logic.rhs10589, label %logic.end10590 -logic.rhs10589: + br label %logic.from10616 +logic.from10616: + br i1 %t435, label %logic.rhs10617, label %logic.end10618 +logic.rhs10617: %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t437 = load i64, ptr %t436 %t438 = icmp sge i64 %t437, 7 - br label %logic.rend10591 -logic.rend10591: - br label %logic.end10590 -logic.end10590: - %t439 = phi i1 [ false, %logic.from10588 ], [ %t438, %logic.rend10591 ] - br i1 %t439, label %then10592, label %else10593 -then10592: + br label %logic.rend10619 +logic.rend10619: + br label %logic.end10618 +logic.end10618: + %t439 = phi i1 [ false, %logic.from10616 ], [ %t438, %logic.rend10619 ] + br i1 %t439, label %then10620, label %else10621 +then10620: %t440 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 4 %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t440, i32 0, i32 1 %t442 = load { ptr, i64, i64 }, ptr %a27 %t443 = extractvalue { ptr, i64, i64 } %t442, 1 %t444 = icmp uge i64 1, %t443 - br i1 %t444, label %range10595, label %inrange10596 -range10595: - call void @finch_panic_index(ptr @.str.7047, i64 315, i64 1, i64 %t443) + br i1 %t444, label %range10623, label %inrange10624 +range10623: + call void @finch_panic_index(ptr @.str.7062, i64 315, i64 1, i64 %t443) unreachable -inrange10596: +inrange10624: %t445 = extractvalue { ptr, i64, i64 } %t442, 0 %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i64 1 %t447 = load { ptr, i64, i64 }, ptr %t446 @@ -108102,11 +108277,11 @@ inrange10596: %t452 = load { ptr, i64, i64 }, ptr %a27 %t453 = extractvalue { ptr, i64, i64 } %t452, 1 %t454 = icmp uge i64 2, %t453 - br i1 %t454, label %range10597, label %inrange10598 -range10597: - call void @finch_panic_index(ptr @.str.7048, i64 315, i64 2, i64 %t453) + br i1 %t454, label %range10625, label %inrange10626 +range10625: + call void @finch_panic_index(ptr @.str.7063, i64 315, i64 2, i64 %t453) unreachable -inrange10598: +inrange10626: %t455 = extractvalue { ptr, i64, i64 } %t452, 0 %t456 = getelementptr inbounds { ptr, i64, i64 }, ptr %t455, i64 2 %t457 = load { ptr, i64, i64 }, ptr %t456 @@ -108117,11 +108292,11 @@ inrange10598: %t462 = load { ptr, i64, i64 }, ptr %a27 %t463 = extractvalue { ptr, i64, i64 } %t462, 1 %t464 = icmp uge i64 3, %t463 - br i1 %t464, label %range10599, label %inrange10600 -range10599: - call void @finch_panic_index(ptr @.str.7049, i64 315, i64 3, i64 %t463) + br i1 %t464, label %range10627, label %inrange10628 +range10627: + call void @finch_panic_index(ptr @.str.7064, i64 315, i64 3, i64 %t463) unreachable -inrange10600: +inrange10628: %t465 = extractvalue { ptr, i64, i64 } %t462, 0 %t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 3 %t467 = load { ptr, i64, i64 }, ptr %t466 @@ -108132,11 +108307,11 @@ inrange10600: %t472 = load { ptr, i64, i64 }, ptr %a27 %t473 = extractvalue { ptr, i64, i64 } %t472, 1 %t474 = icmp uge i64 4, %t473 - br i1 %t474, label %range10601, label %inrange10602 -range10601: - call void @finch_panic_index(ptr @.str.7050, i64 315, i64 4, i64 %t473) + br i1 %t474, label %range10629, label %inrange10630 +range10629: + call void @finch_panic_index(ptr @.str.7065, i64 315, i64 4, i64 %t473) unreachable -inrange10602: +inrange10630: %t475 = extractvalue { ptr, i64, i64 } %t472, 0 %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 4 %t477 = load { ptr, i64, i64 }, ptr %t476 @@ -108145,11 +108320,11 @@ inrange10602: %t480 = load { ptr, i64, i64 }, ptr %a27 %t481 = extractvalue { ptr, i64, i64 } %t480, 1 %t482 = icmp uge i64 5, %t481 - br i1 %t482, label %range10603, label %inrange10604 -range10603: - call void @finch_panic_index(ptr @.str.7051, i64 315, i64 5, i64 %t481) + br i1 %t482, label %range10631, label %inrange10632 +range10631: + call void @finch_panic_index(ptr @.str.7066, i64 315, i64 5, i64 %t481) unreachable -inrange10604: +inrange10632: %t483 = extractvalue { ptr, i64, i64 } %t480, 0 %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 5 %t485 = load { ptr, i64, i64 }, ptr %t484 @@ -108158,16 +108333,16 @@ inrange10604: %t488 = load { ptr, i64, i64 }, ptr %a27 %t489 = extractvalue { ptr, i64, i64 } %t488, 1 %t490 = icmp uge i64 6, %t489 - br i1 %t490, label %range10605, label %inrange10606 -range10605: - call void @finch_panic_index(ptr @.str.7052, i64 315, i64 6, i64 %t489) + br i1 %t490, label %range10633, label %inrange10634 +range10633: + call void @finch_panic_index(ptr @.str.7067, i64 315, i64 6, i64 %t489) unreachable -inrange10606: +inrange10634: %t491 = extractvalue { ptr, i64, i64 } %t488, 0 %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 6 %t493 = load { ptr, i64, i64 }, ptr %t492 store { ptr, i64, i64 } %t493, ptr %a494 - store { ptr, i64, i64 } { ptr @.str.7054, i64 1, i64 0 }, ptr %a496 + store { ptr, i64, i64 } { ptr @.str.7069, i64 1, i64 0 }, ptr %a496 call void @finch_str_split(ptr %a497, ptr %a494, ptr %a496) %t498 = load { ptr, i64, i64 }, ptr %a497 %t499 = insertvalue %S.lsp.EnumRec %t487, { ptr, i64, i64 } %t498, 5 @@ -108178,37 +108353,37 @@ inrange10606: %t503 = getelementptr inbounds %S.lsp.EnumRec, ptr %t502, i64 %t500 store %S.lsp.EnumRec %t499, ptr %t503 store i64 %t501, ptr %t441 - br label %endif10594 -else10593: + br label %endif10622 +else10621: %t504 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t504, ptr %a505 - store { ptr, i64, i64 } { ptr @.str.7055, i64 2, i64 0 }, ptr %a506 + store { ptr, i64, i64 } { ptr @.str.7070, i64 2, i64 0 }, ptr %a506 %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) %t508 = icmp ne i32 %t507, 0 - br label %logic.from10607 -logic.from10607: - br i1 %t508, label %logic.rhs10608, label %logic.end10609 -logic.rhs10608: + br label %logic.from10635 +logic.from10635: + br i1 %t508, label %logic.rhs10636, label %logic.end10637 +logic.rhs10636: %t509 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t510 = load i64, ptr %t509 %t511 = icmp sge i64 %t510, 2 - br label %logic.rend10610 -logic.rend10610: - br label %logic.end10609 -logic.end10609: - %t512 = phi i1 [ false, %logic.from10607 ], [ %t511, %logic.rend10610 ] - br i1 %t512, label %then10611, label %endif10613 -then10611: + br label %logic.rend10638 +logic.rend10638: + br label %logic.end10637 +logic.end10637: + %t512 = phi i1 [ false, %logic.from10635 ], [ %t511, %logic.rend10638 ] + br i1 %t512, label %then10639, label %endif10641 +then10639: %t513 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 5 %t514 = getelementptr inbounds { ptr, i64, i64 }, ptr %t513, i32 0, i32 1 %t515 = load { ptr, i64, i64 }, ptr %a27 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 1, %t516 - br i1 %t517, label %range10614, label %inrange10615 -range10614: - call void @finch_panic_index(ptr @.str.7056, i64 317, i64 1, i64 %t516) + br i1 %t517, label %range10642, label %inrange10643 +range10642: + call void @finch_panic_index(ptr @.str.7071, i64 317, i64 1, i64 %t516) unreachable -inrange10615: +inrange10643: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 1 %t520 = load { ptr, i64, i64 }, ptr %t519 @@ -108222,30 +108397,30 @@ inrange10615: %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t524 store { ptr, i64, i64 } %t523, ptr %t527 store i64 %t525, ptr %t514 - br label %endif10613 -endif10613: - br label %endif10594 -endif10594: - br label %endif10579 -endif10579: - br label %endif10558 -endif10558: - br label %endif10533 -endif10533: - br label %endif10510 -endif10510: - br label %endif10487 -endif10487: + br label %endif10641 +endif10641: + br label %endif10622 +endif10622: + br label %endif10607 +endif10607: + br label %endif10586 +endif10586: + br label %endif10561 +endif10561: + br label %endif10538 +endif10538: + br label %endif10515 +endif10515: call void @finch_str_drop(ptr %a37) call void @finch.drop.arr_str(ptr %a27) - br label %endif10478 -else10477: + br label %endif10506 +else10505: %t528 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t529 = getelementptr inbounds %S.lsp.Diag, ptr %t528, i32 0, i32 0 %t530 = load i1, ptr %t529 %t531 = xor i1 %t530, true - br i1 %t531, label %then10616, label %endif10618 -then10616: + br i1 %t531, label %then10644, label %endif10646 +then10644: %t532 = load { ptr, i64, i64 }, ptr %a18 %t533 = call %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %t532) %t534 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 @@ -108253,17 +108428,17 @@ then10616: store %S.lsp.Diag %t533, ptr %t534 store %S.lsp.Diag %t535, ptr %a536 call void @finch.drop.S_lsp_Diag(ptr %a536) - br label %endif10618 -endif10618: - br label %endif10478 -endif10478: - br label %each.step10474 -each.step10474: + br label %endif10646 +endif10646: + br label %endif10506 +endif10506: + br label %each.step10502 +each.step10502: %t537 = load i64, ptr %a10 %t538 = add i64 %t537, 1 store i64 %t538, ptr %a10 - br label %each.cond10472 -each.end10475: + br label %each.cond10500 +each.end10503: call void @finch.drop.arr_str(ptr %a9) %t539 = load %S.lsp.Analysis, ptr %a2 ret %S.lsp.Analysis %t539 @@ -108295,20 +108470,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10639 -n.cond10639: + br label %n.cond10667 +n.cond10667: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10640, label %n.end10641 -n.body10640: + br i1 %t7, label %n.body10668, label %n.end10669 +n.body10668: %t8 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.Ref, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_Ref(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10639 -n.end10641: + br label %n.cond10667 +n.end10669: ret void } @@ -108341,20 +108516,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10642 -n.cond10642: + br label %n.cond10670 +n.cond10670: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10643, label %n.end10644 -n.body10643: + br i1 %t7, label %n.body10671, label %n.end10672 +n.body10671: %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_VarRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10642 -n.end10644: + br label %n.cond10670 +n.end10672: ret void } @@ -108393,20 +108568,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10645 -n.cond10645: + br label %n.cond10673 +n.cond10673: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10646, label %n.end10647 -n.body10646: + br i1 %t7, label %n.body10674, label %n.end10675 +n.body10674: %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_FnRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10645 -n.end10647: + br label %n.cond10673 +n.end10675: ret void } @@ -108442,20 +108617,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10648 -n.cond10648: + br label %n.cond10676 +n.cond10676: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10649, label %n.end10650 -n.body10649: + br i1 %t7, label %n.body10677, label %n.end10678 +n.body10677: %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_StructRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10648 -n.end10650: + br label %n.cond10676 +n.end10678: ret void } @@ -108488,20 +108663,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10651 -n.cond10651: + br label %n.cond10679 +n.cond10679: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10652, label %n.end10653 -n.body10652: + br i1 %t7, label %n.body10680, label %n.end10681 +n.body10680: %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_EnumRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10651 -n.end10653: + br label %n.cond10679 +n.end10681: ret void } @@ -108567,19 +108742,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10654 -n.cond10654: + br label %n.cond10682 +n.cond10682: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10655, label %n.end10656 -n.body10655: + br i1 %t6, label %n.body10683, label %n.end10684 +n.body10683: %t7 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_Ref(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10654 -n.end10656: + br label %n.cond10682 +n.end10684: call void @finch_arr_free(ptr %a) ret void } @@ -108605,19 +108780,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10657 -n.cond10657: + br label %n.cond10685 +n.cond10685: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10658, label %n.end10659 -n.body10658: + br i1 %t6, label %n.body10686, label %n.end10687 +n.body10686: %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_VarRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10657 -n.end10659: + br label %n.cond10685 +n.end10687: call void @finch_arr_free(ptr %a) ret void } @@ -108647,19 +108822,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10660 -n.cond10660: + br label %n.cond10688 +n.cond10688: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10661, label %n.end10662 -n.body10661: + br i1 %t6, label %n.body10689, label %n.end10690 +n.body10689: %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_FnRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10660 -n.end10662: + br label %n.cond10688 +n.end10690: call void @finch_arr_free(ptr %a) ret void } @@ -108687,19 +108862,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10663 -n.cond10663: + br label %n.cond10691 +n.cond10691: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10664, label %n.end10665 -n.body10664: + br i1 %t6, label %n.body10692, label %n.end10693 +n.body10692: %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_StructRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10663 -n.end10665: + br label %n.cond10691 +n.end10693: call void @finch_arr_free(ptr %a) ret void } @@ -108725,19 +108900,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10666 -n.cond10666: + br label %n.cond10694 +n.cond10694: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10667, label %n.end10668 -n.body10667: + br i1 %t6, label %n.body10695, label %n.end10696 +n.body10695: %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_EnumRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10666 -n.end10668: + br label %n.cond10694 +n.end10696: call void @finch_arr_free(ptr %a) ret void } @@ -108882,7 +109057,7 @@ entry: %t2 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t3 = load { ptr, i64, i64 }, ptr %t2 call void @finch.host.makeDirs({ ptr, i64, i64 } %t3) - store { ptr, i64, i64 } { ptr @.str.7057, i64 0, i64 0 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.7072, i64 0, i64 0 }, ptr %a4 store i64 0, ptr %a5 %t6 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %a7 @@ -108894,44 +109069,44 @@ entry: %t12 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 2 %t13 = load i64, ptr %t12 store i64 0, ptr %a14 - br label %n.cond10619 -n.cond10619: + br label %n.cond10647 +n.cond10647: %t15 = load i64, ptr %a14 %t16 = icmp slt i64 %t15, %t13 - br i1 %t16, label %n.body10620, label %n.end10621 -n.body10620: + br i1 %t16, label %n.body10648, label %n.end10649 +n.body10648: %t17 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 %t18 = load ptr, ptr %t17 %t19 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t18, i64 %t15 %t20 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 0 %t21 = load i64, ptr %t20 %t22 = icmp ne i64 %t21, 0 - br i1 %t22, label %entry.live10622, label %entry.next10623 -entry.live10622: + br i1 %t22, label %entry.live10650, label %entry.next10651 +entry.live10650: %t23 = load i64, ptr %a11 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t23 %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 1 call void @finch_str_copy(ptr %t24, ptr %t25) %t26 = add i64 %t23, 1 store i64 %t26, ptr %a11 - br label %entry.next10623 -entry.next10623: + br label %entry.next10651 +entry.next10651: %t27 = load i64, ptr %a14 %t28 = add i64 %t27, 1 store i64 %t28, ptr %a14 - br label %n.cond10619 -n.end10621: + br label %n.cond10647 +n.end10649: %t29 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t29, ptr %a30 store i64 0, ptr %a31 - br label %each.cond10624 -each.cond10624: + br label %each.cond10652 +each.cond10652: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = load i64, ptr %a31 %t35 = icmp slt i64 %t34, %t33 - br i1 %t35, label %each.body10625, label %each.end10627 -each.body10625: + br i1 %t35, label %each.body10653, label %each.end10655 +each.body10653: %t36 = load ptr, ptr %a30 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i64 %t34 %t38 = load { ptr, i64, i64 }, ptr %t37 @@ -108939,7 +109114,7 @@ each.body10625: %t40 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a43 - store { ptr, i64, i64 } { ptr @.str.7058, i64 4, i64 0 }, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.7073, i64 4, i64 0 }, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a42 %t46 = load i64, ptr %a5 @@ -108954,7 +109129,7 @@ each.body10625: call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t54, ptr %a56 - store { ptr, i64, i64 } { ptr @.str.7059, i64 4, i64 0 }, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.7074, i64 4, i64 0 }, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t54, ptr %a58 call void @finch_str_drop(ptr %a58) @@ -108966,14 +109141,14 @@ each.body10625: store { ptr, i64, i64 } %t63, ptr %a64 %t65 = call i64 @finch_map_find(ptr %t62, ptr %a64, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t66 = icmp slt i64 %t65, 0 - br i1 %t66, label %map.missing10628, label %map.found10629 -map.missing10628: + br i1 %t66, label %map.missing10656, label %map.found10657 +map.missing10656: store { ptr, i64, i64 } zeroinitializer, ptr %a67 store { ptr, i64, i64 } %t63, ptr %a68 call void @finch_buf_str(ptr %a67, ptr %a68, i32 1) - call void @finch_map_missing(ptr @.str.7060, i64 333, ptr %a67) + call void @finch_map_missing(ptr @.str.7075, i64 333, ptr %a67) unreachable -map.found10629: +map.found10657: %t69 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t62, i32 0, i32 0 %t70 = load ptr, ptr %t69 %t71 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t70, i64 %t65 @@ -108985,12 +109160,12 @@ map.found10629: %t77 = icmp ne i32 %t76, 0 %t78 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t78, ptr %a80 - store { ptr, i64, i64 } { ptr @.str.7061, i64 11, i64 0 }, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.7076, i64 11, i64 0 }, ptr %a81 call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a79 %t83 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t83, ptr %a85 - store { ptr, i64, i64 } { ptr @.str.7062, i64 1, i64 0 }, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.7077, i64 1, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 %t88 = load { ptr, i64, i64 }, ptr %a60 @@ -109019,18 +109194,18 @@ map.found10629: %t105 = add i64 %t104, 1 store i64 %t105, ptr %a5 call void @finch_str_drop(ptr %a60) - br label %each.step10626 -each.step10626: + br label %each.step10654 +each.step10654: %t106 = load i64, ptr %a31 %t107 = add i64 %t106, 1 store i64 %t107, ptr %a31 - br label %each.cond10624 -each.end10627: + br label %each.cond10652 +each.end10655: call void @finch.drop.arr_str(ptr %a30) %t108 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t109 = load { ptr, i64, i64 }, ptr %t108 store { ptr, i64, i64 } %t109, ptr %a111 - store { ptr, i64, i64 } { ptr @.str.7063, i64 8, i64 0 }, ptr %a112 + store { ptr, i64, i64 } { ptr @.str.7078, i64 8, i64 0 }, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t113, ptr %a114 @@ -109038,7 +109213,7 @@ each.end10627: %t116 = load { ptr, i64, i64 }, ptr %t115 %t117 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t116) store { ptr, i64, i64 } %t117, ptr %a119 - store { ptr, i64, i64 } { ptr @.str.7064, i64 7, i64 0 }, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.7079, i64 7, i64 0 }, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) store { ptr, i64, i64 } %t117, ptr %a121 call void @finch_str_drop(ptr %a121) @@ -109061,7 +109236,7 @@ each.end10627: call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t136, ptr %a138 - store { ptr, i64, i64 } { ptr @.str.7065, i64 3, i64 0 }, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.7080, i64 3, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) @@ -109077,7 +109252,7 @@ each.end10627: call void @finch_str_drop(ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t149, ptr %a151 - store { ptr, i64, i64 } { ptr @.str.7066, i64 5, i64 0 }, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.7081, i64 5, i64 0 }, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) store { ptr, i64, i64 } %t149, ptr %a153 call void @finch_str_drop(ptr %a153) @@ -109093,17 +109268,17 @@ each.end10627: %t162 = icmp eq i32 %t161, 0 %t163 = load { ptr, i64, i64 }, ptr %a160 %t164 = load { ptr, i64, i64 }, ptr %a159 - br i1 %t162, label %or.failed10630, label %or.ok10631 -or.failed10630: + br i1 %t162, label %or.failed10658, label %or.ok10659 +or.failed10658: store { ptr, i64, i64 } %t163, ptr %a165 call void @finch_str_drop(ptr %a165) - br label %or.bend10632 -or.bend10632: - br label %or.end10633 -or.ok10631: - br label %or.end10633 -or.end10633: - %t166 = phi { ptr, i64, i64 } [ { ptr @.str.7067, i64 0, i64 0 }, %or.bend10632 ], [ %t164, %or.ok10631 ] + br label %or.bend10660 +or.bend10660: + br label %or.end10661 +or.ok10659: + br label %or.end10661 +or.end10661: + %t166 = phi { ptr, i64, i64 } [ { ptr @.str.7082, i64 0, i64 0 }, %or.bend10660 ], [ %t164, %or.ok10659 ] %t167 = call %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %t166) store { ptr, i64, i64 } %t166, ptr %a168 call void @finch_str_drop(ptr %a168) @@ -109112,8 +109287,8 @@ or.end10633: %t171 = getelementptr inbounds %S.lsp.Diag, ptr %t170, i32 0, i32 0 %t172 = load i1, ptr %t171 %t173 = xor i1 %t172, true - br i1 %t173, label %then10634, label %else10635 -then10634: + br i1 %t173, label %then10662, label %else10663 +then10662: %t174 = load %S.lsp.Analysis, ptr %a169 %t175 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t176 = load { ptr, i64, i64 }, ptr %a1 @@ -109125,14 +109300,14 @@ then10634: %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t181, i64 %t179 %t183 = load i32, ptr %a178 %t184 = icmp ne i32 %t183, 0 - br i1 %t184, label %map.new10637, label %map.have10638 -map.new10637: + br i1 %t184, label %map.new10665, label %map.have10666 +map.new10665: %t185 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 1 call void @finch_str_copy(ptr %t185, ptr %a177) %t186 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 store %S.lsp.Analysis zeroinitializer, ptr %t186 - br label %map.have10638 -map.have10638: + br label %map.have10666 +map.have10666: %t187 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 store %S.lsp.Analysis %t174, ptr %a188 call void @finch.copy.S_lsp_Analysis(ptr %a189, ptr %a188) @@ -109141,28 +109316,28 @@ map.have10638: store %S.lsp.Analysis %t190, ptr %t187 store %S.lsp.Analysis %t191, ptr %a192 call void @finch.drop.S_lsp_Analysis(ptr %a192) - br label %endif10636 -else10635: + br label %endif10664 +else10663: %t193 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t194 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t194, ptr %a195 %t196 = call i64 @finch_map_find(ptr %t193, ptr %a195, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t197 = icmp sge i64 %t196, 0 - br i1 %t197, label %then10669, label %endif10671 -then10669: + br i1 %t197, label %then10697, label %endif10699 +then10697: %t198 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t199 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t199, ptr %a200 %t201 = call i64 @finch_map_find(ptr %t198, ptr %a200, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t202 = icmp slt i64 %t201, 0 - br i1 %t202, label %map.missing10672, label %map.found10673 -map.missing10672: + br i1 %t202, label %map.missing10700, label %map.found10701 +map.missing10700: store { ptr, i64, i64 } zeroinitializer, ptr %a203 store { ptr, i64, i64 } %t199, ptr %a204 call void @finch_buf_str(ptr %a203, ptr %a204, i32 1) - call void @finch_map_missing(ptr @.str.7068, i64 344, ptr %a203) + call void @finch_map_missing(ptr @.str.7083, i64 344, ptr %a203) unreachable -map.found10673: +map.found10701: %t205 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t198, i32 0, i32 0 %t206 = load ptr, ptr %t205 %t207 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t206, i64 %t201 @@ -109216,8 +109391,8 @@ map.found10673: %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i32 0, i32 1 %t248 = load i64, ptr %t247 %t249 = icmp eq i64 %t248, 0 - br i1 %t249, label %then10674, label %endif10676 -then10674: + br i1 %t249, label %then10702, label %endif10704 +then10702: %t250 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 5 %t251 = load { ptr, i64, i64 }, ptr %t250 %t252 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 @@ -109228,13 +109403,13 @@ then10674: store { ptr, i64, i64 } %t255, ptr %t252 store { ptr, i64, i64 } %t256, ptr %a257 call void @finch.drop.arr_str(ptr %a257) - br label %endif10676 -endif10676: + br label %endif10704 +endif10704: call void @finch.drop.S_lsp_Analysis(ptr %a213) - br label %endif10671 -endif10671: - br label %endif10636 -endif10636: + br label %endif10699 +endif10699: + br label %endif10664 +endif10664: %t258 = load %S.lsp.Analysis, ptr %a169 %t259 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t260 = load { ptr, i64, i64 }, ptr %a1 @@ -109246,14 +109421,14 @@ endif10636: %t266 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t265, i64 %t263 %t267 = load i32, ptr %a262 %t268 = icmp ne i32 %t267, 0 - br i1 %t268, label %map.new10677, label %map.have10678 -map.new10677: + br i1 %t268, label %map.new10705, label %map.have10706 +map.new10705: %t269 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 1 call void @finch_str_copy(ptr %t269, ptr %a261) %t270 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 store %S.lsp.Analysis zeroinitializer, ptr %t270 - br label %map.have10678 -map.have10678: + br label %map.have10706 +map.have10706: %t271 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 store %S.lsp.Analysis %t258, ptr %a272 call void @finch.copy.S_lsp_Analysis(ptr %a273, ptr %a272) @@ -109323,14 +109498,14 @@ entry: store { ptr, i64, i64 } %t12, ptr %a13 %t14 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 store i64 0, ptr %a15 - br label %each.cond10679 -each.cond10679: + br label %each.cond10707 +each.cond10707: %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t17 = load i64, ptr %t16 %t18 = load i64, ptr %a15 %t19 = icmp slt i64 %t18, %t17 - br i1 %t19, label %each.body10680, label %each.end10682 -each.body10680: + br i1 %t19, label %each.body10708, label %each.end10710 +each.body10708: %t20 = load ptr, ptr %t14 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 %t22 = load { ptr, i64, i64 }, ptr %t21 @@ -109341,32 +109516,32 @@ each.body10680: %t27 = load i64, ptr %t24 %t28 = load ptr, ptr %a13 store i64 0, ptr %a29 - br label %find.cond10683 -find.cond10683: + br label %find.cond10711 +find.cond10711: %t30 = load i64, ptr %a29 %t31 = icmp slt i64 %t30, %t27 - br i1 %t31, label %find.body10684, label %find.end10687 -find.body10684: + br i1 %t31, label %find.body10712, label %find.end10715 +find.body10712: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } %t25, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %find.hit10685, label %find.next10686 -find.hit10685: + br i1 %t37, label %find.hit10713, label %find.next10714 +find.hit10713: store i64 %t30, ptr %a26 - br label %find.end10687 -find.next10686: + br label %find.end10715 +find.next10714: %t38 = add i64 %t30, 1 store i64 %t38, ptr %a29 - br label %find.cond10683 -find.end10687: + br label %find.cond10711 +find.end10715: %t39 = load i64, ptr %a26 %t40 = icmp sge i64 %t39, 0 %t41 = xor i1 %t40, true - br i1 %t41, label %then10688, label %endif10690 -then10688: + br i1 %t41, label %then10716, label %endif10718 +then10716: %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t43, ptr %a44 @@ -109379,25 +109554,25 @@ then10688: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t42 - br label %endif10690 -endif10690: - br label %each.step10681 -each.step10681: + br label %endif10718 +endif10718: + br label %each.step10709 +each.step10709: %t51 = load i64, ptr %a15 %t52 = add i64 %t51, 1 store i64 %t52, ptr %a15 - br label %each.cond10679 -each.end10682: + br label %each.cond10707 +each.end10710: store { ptr, i64, i64 } zeroinitializer, ptr %a53 store i64 0, ptr %a54 - br label %each.cond10691 -each.cond10691: + br label %each.cond10719 +each.cond10719: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = load i64, ptr %a54 %t58 = icmp slt i64 %t57, %t56 - br i1 %t58, label %each.body10692, label %each.end10694 -each.body10692: + br i1 %t58, label %each.body10720, label %each.end10722 +each.body10720: %t59 = load ptr, ptr %a13 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 %t57 %t61 = load { ptr, i64, i64 }, ptr %t60 @@ -109407,10 +109582,10 @@ each.body10692: %t65 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t66 = getelementptr inbounds %S.lsp.Diag, ptr %t65, i32 0, i32 0 %t67 = load i1, ptr %t66 - br label %logic.from10695 -logic.from10695: - br i1 %t67, label %logic.rhs10696, label %logic.end10697 -logic.rhs10696: + br label %logic.from10723 +logic.from10723: + br i1 %t67, label %logic.rhs10724, label %logic.end10725 +logic.rhs10724: %t68 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t69 = getelementptr inbounds %S.lsp.Diag, ptr %t68, i32 0, i32 1 %t70 = load { ptr, i64, i64 }, ptr %t69 @@ -109419,13 +109594,13 @@ logic.rhs10696: store { ptr, i64, i64 } %t71, ptr %a73 %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) %t75 = icmp ne i32 %t74, 0 - br label %logic.rend10698 -logic.rend10698: - br label %logic.end10697 -logic.end10697: - %t76 = phi i1 [ false, %logic.from10695 ], [ %t75, %logic.rend10698 ] - br i1 %t76, label %then10699, label %endif10701 -then10699: + br label %logic.rend10726 +logic.rend10726: + br label %logic.end10725 +logic.end10725: + %t76 = phi i1 [ false, %logic.from10723 ], [ %t75, %logic.rend10726 ] + br i1 %t76, label %then10727, label %endif10729 +then10727: %t77 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t78 = getelementptr inbounds %S.lsp.Diag, ptr %t77, i32 0, i32 2 %t79 = load i64, ptr %t78 @@ -109433,11 +109608,11 @@ then10699: store i64 %t80, ptr %a81 %t82 = load i64, ptr %a81 %t83 = icmp slt i64 %t82, 0 - br i1 %t83, label %then10702, label %endif10704 -then10702: + br i1 %t83, label %then10730, label %endif10732 +then10730: store i64 0, ptr %a81 - br label %endif10704 -endif10704: + br label %endif10732 +endif10732: %t84 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t85 = getelementptr inbounds %S.lsp.Diag, ptr %t84, i32 0, i32 3 %t86 = load i64, ptr %t85 @@ -109445,11 +109620,11 @@ endif10704: store i64 %t87, ptr %a88 %t89 = load i64, ptr %a88 %t90 = icmp slt i64 %t89, 0 - br i1 %t90, label %then10705, label %endif10707 -then10705: + br i1 %t90, label %then10733, label %endif10735 +then10733: store i64 0, ptr %a88 - br label %endif10707 -endif10707: + br label %endif10735 +endif10735: %t91 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t91, ptr %a92 %t93 = load i64, ptr %a81 @@ -109457,22 +109632,22 @@ endif10707: %t95 = load i64, ptr %a88 %t96 = add i64 %t95, 1 %t97 = call %S.json.Json @finch.lsp.range(i64 %t93, i64 %t94, i64 %t96) - call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7069, i64 5, i64 0 }, %S.json.Json %t97) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7084, i64 5, i64 0 }, %S.json.Json %t97) store %S.json.Json %t97, ptr %a98 call void @finch.drop.S_json_Json(ptr %a98) %t99 = call %S.json.Json @finch.lsp.num(i64 1) - call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7070, i64 8, i64 0 }, %S.json.Json %t99) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7085, i64 8, i64 0 }, %S.json.Json %t99) store %S.json.Json %t99, ptr %a100 call void @finch.drop.S_json_Json(ptr %a100) - %t101 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7072, i64 5, i64 0 }) - call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7071, i64 6, i64 0 }, %S.json.Json %t101) + %t101 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7087, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7086, i64 6, i64 0 }, %S.json.Json %t101) store %S.json.Json %t101, ptr %a102 call void @finch.drop.S_json_Json(ptr %a102) %t103 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t104 = getelementptr inbounds %S.lsp.Diag, ptr %t103, i32 0, i32 4 %t105 = load { ptr, i64, i64 }, ptr %t104 %t106 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t105) - call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7073, i64 7, i64 0 }, %S.json.Json %t106) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7088, i64 7, i64 0 }, %S.json.Json %t106) store %S.json.Json %t106, ptr %a107 call void @finch.drop.S_json_Json(ptr %a107) %t108 = load %S.json.Json, ptr %a92 @@ -109490,8 +109665,8 @@ endif10707: store { ptr, i64, i64 } %t113, ptr %t117 store i64 %t115, ptr %t109 call void @finch.drop.S_json_Json(ptr %a92) - br label %endif10701 -endif10701: + br label %endif10729 +endif10729: %t118 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t118, ptr %a119 %t120 = load { ptr, i64, i64 }, ptr %a62 @@ -109499,22 +109674,22 @@ endif10701: %t122 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t121) store { ptr, i64, i64 } %t121, ptr %a123 call void @finch_str_drop(ptr %a123) - call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7074, i64 3, i64 0 }, %S.json.Json %t122) + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7089, i64 3, i64 0 }, %S.json.Json %t122) store %S.json.Json %t122, ptr %a124 call void @finch.drop.S_json_Json(ptr %a124) %t125 = load %S.json.Json, ptr %a64 - call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7075, i64 11, i64 0 }, %S.json.Json %t125) + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7090, i64 11, i64 0 }, %S.json.Json %t125) %t126 = load %S.json.Json, ptr %a119 - call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7076, i64 31, i64 0 }, %S.json.Json %t126) + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7091, i64 31, i64 0 }, %S.json.Json %t126) call void @finch.drop.S_json_Json(ptr %a119) call void @finch.drop.S_json_Json(ptr %a64) - br label %each.step10693 -each.step10693: + br label %each.step10721 +each.step10721: %t127 = load i64, ptr %a54 %t128 = add i64 %t127, 1 store i64 %t128, ptr %a54 - br label %each.cond10691 -each.end10694: + br label %each.cond10719 +each.end10722: %t129 = load { ptr, i64, i64 }, ptr %a53 %t130 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 store { ptr, i64, i64 } %t129, ptr %a131 @@ -109549,22 +109724,22 @@ entry: %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 - br label %for.cond10708 -for.cond10708: + br label %for.cond10736 +for.cond10736: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 - br i1 %t10, label %for.body10709, label %for.end10711 -for.body10709: + br i1 %t10, label %for.body10737, label %for.end10739 +for.body10737: %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t12 = load i64, ptr %a8 %t13 = load { ptr, i64, i64 }, ptr %t11 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 %t12, %t14 - br i1 %t15, label %range10712, label %inrange10713 -range10712: - call void @finch_panic_index(ptr @.str.7077, i64 397, i64 %t12, i64 %t14) + br i1 %t15, label %range10740, label %inrange10741 +range10740: + call void @finch_panic_index(ptr @.str.7092, i64 397, i64 %t12, i64 %t14) unreachable -inrange10713: +inrange10741: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds %S.lsp.Ref, ptr %t16, i64 %t12 %t18 = load %S.lsp.Ref, ptr %t17 @@ -109576,23 +109751,23 @@ inrange10713: %t24 = load i64, ptr %t23 %t25 = load i64, ptr %a3 %t26 = icmp eq i64 %t24, %t25 - br label %logic.from10714 -logic.from10714: - br i1 %t26, label %logic.rhs10715, label %logic.end10716 -logic.rhs10715: + br label %logic.from10742 +logic.from10742: + br i1 %t26, label %logic.rhs10743, label %logic.end10744 +logic.rhs10743: %t27 = load i64, ptr %a4 %t28 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 %t29 = load i64, ptr %t28 %t30 = icmp sge i64 %t27, %t29 - br label %logic.rend10717 -logic.rend10717: - br label %logic.end10716 -logic.end10716: - %t31 = phi i1 [ false, %logic.from10714 ], [ %t30, %logic.rend10717 ] - br label %logic.from10718 -logic.from10718: - br i1 %t31, label %logic.rhs10719, label %logic.end10720 -logic.rhs10719: + br label %logic.rend10745 +logic.rend10745: + br label %logic.end10744 +logic.end10744: + %t31 = phi i1 [ false, %logic.from10742 ], [ %t30, %logic.rend10745 ] + br label %logic.from10746 +logic.from10746: + br i1 %t31, label %logic.rhs10747, label %logic.end10748 +logic.rhs10747: %t32 = load i64, ptr %a4 %t33 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 %t34 = load i64, ptr %t33 @@ -109600,15 +109775,15 @@ logic.rhs10719: %t36 = load i64, ptr %t35 %t37 = add i64 %t34, %t36 %t38 = icmp sle i64 %t32, %t37 - br label %logic.rend10721 -logic.rend10721: - br label %logic.end10720 -logic.end10720: - %t39 = phi i1 [ false, %logic.from10718 ], [ %t38, %logic.rend10721 ] - br label %logic.from10722 -logic.from10722: - br i1 %t39, label %logic.rhs10723, label %logic.end10724 -logic.rhs10723: + br label %logic.rend10749 +logic.rend10749: + br label %logic.end10748 +logic.end10748: + %t39 = phi i1 [ false, %logic.from10746 ], [ %t38, %logic.rend10749 ] + br label %logic.from10750 +logic.from10750: + br i1 %t39, label %logic.rhs10751, label %logic.end10752 +logic.rhs10751: %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = load { ptr, i64, i64 }, ptr %a2 @@ -109616,25 +109791,25 @@ logic.rhs10723: store { ptr, i64, i64 } %t42, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 - br label %logic.rend10725 -logic.rend10725: - br label %logic.end10724 -logic.end10724: - %t47 = phi i1 [ false, %logic.from10722 ], [ %t46, %logic.rend10725 ] - br i1 %t47, label %then10726, label %endif10728 -then10726: + br label %logic.rend10753 +logic.rend10753: + br label %logic.end10752 +logic.end10752: + %t47 = phi i1 [ false, %logic.from10750 ], [ %t46, %logic.rend10753 ] + br i1 %t47, label %then10754, label %endif10756 +then10754: %t48 = load i64, ptr %a8 call void @finch.drop.S_lsp_Ref(ptr %a22) ret i64 %t48 -endif10728: +endif10756: call void @finch.drop.S_lsp_Ref(ptr %a22) - br label %for.step10710 -for.step10710: + br label %for.step10738 +for.step10738: %t49 = load i64, ptr %a8 %t50 = add i64 %t49, 1 store i64 %t50, ptr %a8 - br label %for.cond10708 -for.end10711: + br label %for.cond10736 +for.end10739: ret i64 -1 } @@ -109661,15 +109836,15 @@ entry: store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 - br i1 %t12, label %then10729, label %endif10731 -then10729: + br i1 %t12, label %then10757, label %endif10759 +then10757: %t13 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t13 -endif10731: +endif10759: %t14 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t14, ptr %a15 - %t16 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7079, i64 8, i64 0 }) - call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7078, i64 4, i64 0 }, %S.json.Json %t16) + %t16 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7094, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7093, i64 4, i64 0 }, %S.json.Json %t16) store %S.json.Json %t16, ptr %a17 call void @finch.drop.S_json_Json(ptr %a17) %t18 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 @@ -109677,23 +109852,23 @@ endif10731: %t20 = load { ptr, i64, i64 }, ptr %t18 %t21 = extractvalue { ptr, i64, i64 } %t20, 1 %t22 = icmp uge i64 %t19, %t21 - br i1 %t22, label %range10732, label %inrange10733 -range10732: - call void @finch_panic_index(ptr @.str.7081, i64 412, i64 %t19, i64 %t21) + br i1 %t22, label %range10760, label %inrange10761 +range10760: + call void @finch_panic_index(ptr @.str.7096, i64 412, i64 %t19, i64 %t21) unreachable -inrange10733: +inrange10761: %t23 = extractvalue { ptr, i64, i64 } %t20, 0 %t24 = getelementptr inbounds %S.lsp.Ref, ptr %t23, i64 %t19 %t25 = getelementptr inbounds %S.lsp.Ref, ptr %t24, i32 0, i32 7 %t26 = load { ptr, i64, i64 }, ptr %t25 %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) - call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7080, i64 5, i64 0 }, %S.json.Json %t27) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7095, i64 5, i64 0 }, %S.json.Json %t27) store %S.json.Json %t27, ptr %a28 call void @finch.drop.S_json_Json(ptr %a28) %t29 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t29, ptr %a30 %t31 = load %S.json.Json, ptr %a15 - call void @finch.json.Json.set(ptr %a30, { ptr, i64, i64 } { ptr @.str.7082, i64 8, i64 0 }, %S.json.Json %t31) + call void @finch.json.Json.set(ptr %a30, { ptr, i64, i64 } { ptr @.str.7097, i64 8, i64 0 }, %S.json.Json %t31) %t32 = load %S.json.Json, ptr %a30 call void @finch.drop.S_json_Json(ptr %a15) ret %S.json.Json %t32 @@ -109725,46 +109900,46 @@ entry: store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 - br label %logic.from10734 -logic.from10734: - br i1 %t12, label %logic.end10736, label %logic.rhs10735 -logic.rhs10735: + br label %logic.from10762 +logic.from10762: + br i1 %t12, label %logic.end10764, label %logic.rhs10763 +logic.rhs10763: %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t14 = load i64, ptr %a10 %t15 = load { ptr, i64, i64 }, ptr %t13 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 - br i1 %t17, label %range10737, label %inrange10738 -range10737: - call void @finch_panic_index(ptr @.str.7083, i64 420, i64 %t14, i64 %t16) + br i1 %t17, label %range10765, label %inrange10766 +range10765: + call void @finch_panic_index(ptr @.str.7098, i64 420, i64 %t14, i64 %t16) unreachable -inrange10738: +inrange10766: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.lsp.Ref, ptr %t18, i64 %t14 %t20 = getelementptr inbounds %S.lsp.Ref, ptr %t19, i32 0, i32 4 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = icmp eq i64 %t22, 0 - br label %logic.rend10739 -logic.rend10739: - br label %logic.end10736 -logic.end10736: - %t24 = phi i1 [ true, %logic.from10734 ], [ %t23, %logic.rend10739 ] - br i1 %t24, label %then10740, label %endif10742 -then10740: + br label %logic.rend10767 +logic.rend10767: + br label %logic.end10764 +logic.end10764: + %t24 = phi i1 [ true, %logic.from10762 ], [ %t23, %logic.rend10767 ] + br i1 %t24, label %then10768, label %endif10770 +then10768: %t25 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t25 -endif10742: +endif10770: %t26 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t27 = load i64, ptr %a10 %t28 = load { ptr, i64, i64 }, ptr %t26 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 - br i1 %t30, label %range10743, label %inrange10744 -range10743: - call void @finch_panic_index(ptr @.str.7084, i64 423, i64 %t27, i64 %t29) + br i1 %t30, label %range10771, label %inrange10772 +range10771: + call void @finch_panic_index(ptr @.str.7099, i64 423, i64 %t27, i64 %t29) unreachable -inrange10744: +inrange10772: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.lsp.Ref, ptr %t31, i64 %t27 %t33 = load %S.lsp.Ref, ptr %t32 @@ -109780,7 +109955,7 @@ inrange10744: %t43 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t42) store { ptr, i64, i64 } %t42, ptr %a44 call void @finch_str_drop(ptr %a44) - call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7085, i64 3, i64 0 }, %S.json.Json %t43) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7100, i64 3, i64 0 }, %S.json.Json %t43) store %S.json.Json %t43, ptr %a45 call void @finch.drop.S_json_Json(ptr %a45) %t46 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 5 @@ -109793,7 +109968,7 @@ inrange10744: %t53 = load i64, ptr %t52 %t54 = sub i64 %t53, 1 %t55 = call %S.json.Json @finch.lsp.range(i64 %t48, i64 %t51, i64 %t54) - call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7086, i64 5, i64 0 }, %S.json.Json %t55) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7101, i64 5, i64 0 }, %S.json.Json %t55) store %S.json.Json %t55, ptr %a56 call void @finch.drop.S_json_Json(ptr %a56) %t57 = load %S.json.Json, ptr %a39 @@ -109839,14 +110014,14 @@ entry: store %S.json.Json %t3, ptr %a4 %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a6 - br label %each.cond10745 -each.cond10745: + br label %each.cond10773 +each.cond10773: %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load i64, ptr %a6 %t10 = icmp slt i64 %t9, %t8 - br i1 %t10, label %each.body10746, label %each.end10748 -each.body10746: + br i1 %t10, label %each.body10774, label %each.end10776 +each.body10774: %t11 = load ptr, ptr %t5 %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %t11, i64 %t9 %t13 = load %S.lsp.FnRec, ptr %t12 @@ -109858,10 +110033,10 @@ each.body10746: store { ptr, i64, i64 } %t17, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp eq i32 %t20, 0 - br i1 %t21, label %then10749, label %endif10751 -then10749: - br label %each.step10747 -endif10751: + br i1 %t21, label %then10777, label %endif10779 +then10777: + br label %each.step10775 +endif10779: store i64 12, ptr %a22 %t23 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %t23 @@ -109873,13 +110048,13 @@ endif10751: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = icmp sgt i64 %t31, 0 - br i1 %t32, label %then10752, label %endif10754 -then10752: + br i1 %t32, label %then10780, label %endif10782 +then10780: store i64 6, ptr %a22 %t33 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a36 - store { ptr, i64, i64 } { ptr @.str.7087, i64 1, i64 0 }, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.7102, i64 1, i64 0 }, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 %t39 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 @@ -109894,8 +110069,8 @@ then10752: store { ptr, i64, i64 } %t45, ptr %a28 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %endif10754 -endif10754: + br label %endif10782 +endif10782: %t48 = load { ptr, i64, i64 }, ptr %a28 %t49 = load i64, ptr %a22 %t50 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 4 @@ -109909,23 +110084,23 @@ endif10754: store %S.json.Json %t56, ptr %a57 call void @finch.drop.S_json_Json(ptr %a57) call void @finch_str_drop(ptr %a28) - br label %each.step10747 -each.step10747: + br label %each.step10775 +each.step10775: %t58 = load i64, ptr %a6 %t59 = add i64 %t58, 1 store i64 %t59, ptr %a6 - br label %each.cond10745 -each.end10748: + br label %each.cond10773 +each.end10776: %t60 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a61 - br label %each.cond10755 -each.cond10755: + br label %each.cond10783 +each.cond10783: %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 %t63 = load i64, ptr %t62 %t64 = load i64, ptr %a61 %t65 = icmp slt i64 %t64, %t63 - br i1 %t65, label %each.body10756, label %each.end10758 -each.body10756: + br i1 %t65, label %each.body10784, label %each.end10786 +each.body10784: %t66 = load ptr, ptr %t60 %t67 = getelementptr inbounds %S.lsp.StructRec, ptr %t66, i64 %t64 %t68 = load %S.lsp.StructRec, ptr %t67 @@ -109937,8 +110112,8 @@ each.body10756: store { ptr, i64, i64 } %t72, ptr %a74 %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) %t76 = icmp ne i32 %t75, 0 - br i1 %t76, label %then10759, label %endif10761 -then10759: + br i1 %t76, label %then10787, label %endif10789 +then10787: %t77 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 1 %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 @@ -109956,25 +110131,25 @@ then10759: call void @finch.json.Json.push(ptr %a4, %S.json.Json %t90) store %S.json.Json %t90, ptr %a91 call void @finch.drop.S_json_Json(ptr %a91) - br label %endif10761 -endif10761: - br label %each.step10757 -each.step10757: + br label %endif10789 +endif10789: + br label %each.step10785 +each.step10785: %t92 = load i64, ptr %a61 %t93 = add i64 %t92, 1 store i64 %t93, ptr %a61 - br label %each.cond10755 -each.end10758: + br label %each.cond10783 +each.end10786: %t94 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a95 - br label %each.cond10762 -each.cond10762: + br label %each.cond10790 +each.cond10790: %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t97 = load i64, ptr %t96 %t98 = load i64, ptr %a95 %t99 = icmp slt i64 %t98, %t97 - br i1 %t99, label %each.body10763, label %each.end10765 -each.body10763: + br i1 %t99, label %each.body10791, label %each.end10793 +each.body10791: %t100 = load ptr, ptr %t94 %t101 = getelementptr inbounds %S.lsp.EnumRec, ptr %t100, i64 %t98 %t102 = load %S.lsp.EnumRec, ptr %t101 @@ -109986,8 +110161,8 @@ each.body10763: store { ptr, i64, i64 } %t106, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 - br i1 %t110, label %then10766, label %endif10768 -then10766: + br i1 %t110, label %then10794, label %endif10796 +then10794: %t111 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 1 %t112 = load { ptr, i64, i64 }, ptr %t111 %t113 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 @@ -110005,15 +110180,15 @@ then10766: call void @finch.json.Json.push(ptr %a4, %S.json.Json %t124) store %S.json.Json %t124, ptr %a125 call void @finch.drop.S_json_Json(ptr %a125) - br label %endif10768 -endif10768: - br label %each.step10764 -each.step10764: + br label %endif10796 +endif10796: + br label %each.step10792 +each.step10792: %t126 = load i64, ptr %a95 %t127 = add i64 %t126, 1 store i64 %t127, ptr %a95 - br label %each.cond10762 -each.end10765: + br label %each.cond10790 +each.end10793: %t128 = load %S.json.Json, ptr %a4 ret %S.json.Json %t128 } @@ -110041,12 +110216,12 @@ entry: store %S.json.Json %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a1 %t9 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t8) - call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7088, i64 4, i64 0 }, %S.json.Json %t9) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7103, i64 4, i64 0 }, %S.json.Json %t9) store %S.json.Json %t9, ptr %a10 call void @finch.drop.S_json_Json(ptr %a10) %t11 = load i64, ptr %a2 %t12 = call %S.json.Json @finch.lsp.num(i64 %t11) - call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7089, i64 4, i64 0 }, %S.json.Json %t12) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7104, i64 4, i64 0 }, %S.json.Json %t12) store %S.json.Json %t12, ptr %a13 call void @finch.drop.S_json_Json(ptr %a13) %t14 = call %S.json.Json @finch.json.new_object() @@ -110054,16 +110229,16 @@ entry: %t16 = load i64, ptr %a3 %t17 = sub i64 %t16, 1 %t18 = call %S.json.Json @finch.lsp.position(i64 %t17, i64 0) - call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7090, i64 5, i64 0 }, %S.json.Json %t18) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7105, i64 5, i64 0 }, %S.json.Json %t18) store %S.json.Json %t18, ptr %a19 call void @finch.drop.S_json_Json(ptr %a19) %t20 = load i64, ptr %a5 %t21 = call %S.json.Json @finch.lsp.position(i64 %t20, i64 0) - call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7091, i64 3, i64 0 }, %S.json.Json %t21) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7106, i64 3, i64 0 }, %S.json.Json %t21) store %S.json.Json %t21, ptr %a22 call void @finch.drop.S_json_Json(ptr %a22) %t23 = load %S.json.Json, ptr %a15 - call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7092, i64 5, i64 0 }, %S.json.Json %t23) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7107, i64 5, i64 0 }, %S.json.Json %t23) %t24 = load i64, ptr %a3 %t25 = sub i64 %t24, 1 %t26 = load i64, ptr %a4 @@ -110071,7 +110246,7 @@ entry: %t28 = load i64, ptr %a4 %t29 = sub i64 %t28, 1 %t30 = call %S.json.Json @finch.lsp.range(i64 %t25, i64 %t27, i64 %t29) - call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7093, i64 14, i64 0 }, %S.json.Json %t30) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7108, i64 14, i64 0 }, %S.json.Json %t30) store %S.json.Json %t30, ptr %a31 call void @finch.drop.S_json_Json(ptr %a31) %t32 = load %S.json.Json, ptr %a7 @@ -110100,47 +110275,47 @@ entry: store %S.json.Json %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a1 %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) - call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7094, i64 5, i64 0 }, %S.json.Json %t8) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7109, i64 5, i64 0 }, %S.json.Json %t8) store %S.json.Json %t8, ptr %a9 call void @finch.drop.S_json_Json(ptr %a9) %t10 = load i64, ptr %a2 %t11 = call %S.json.Json @finch.lsp.num(i64 %t10) - call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7095, i64 4, i64 0 }, %S.json.Json %t11) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7110, i64 4, i64 0 }, %S.json.Json %t11) store %S.json.Json %t11, ptr %a12 call void @finch.drop.S_json_Json(ptr %a12) %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sgt i64 %t14, 0 - br i1 %t15, label %then10769, label %endif10771 -then10769: + br i1 %t15, label %then10797, label %endif10799 +then10797: %t16 = load { ptr, i64, i64 }, ptr %a3 %t17 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t16) - call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7096, i64 6, i64 0 }, %S.json.Json %t17) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7111, i64 6, i64 0 }, %S.json.Json %t17) store %S.json.Json %t17, ptr %a18 call void @finch.drop.S_json_Json(ptr %a18) - br label %endif10771 -endif10771: + br label %endif10799 +endif10799: %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t20 = load i64, ptr %t19 %t21 = icmp sgt i64 %t20, 0 - br i1 %t21, label %then10772, label %endif10774 -then10772: + br i1 %t21, label %then10800, label %endif10802 +then10800: %t22 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t22, ptr %a23 - %t24 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7098, i64 8, i64 0 }) - call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7097, i64 4, i64 0 }, %S.json.Json %t24) + %t24 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7113, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7112, i64 4, i64 0 }, %S.json.Json %t24) store %S.json.Json %t24, ptr %a25 call void @finch.drop.S_json_Json(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a4 %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) - call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7099, i64 5, i64 0 }, %S.json.Json %t27) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7114, i64 5, i64 0 }, %S.json.Json %t27) store %S.json.Json %t27, ptr %a28 call void @finch.drop.S_json_Json(ptr %a28) %t29 = load %S.json.Json, ptr %a23 - call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7100, i64 13, i64 0 }, %S.json.Json %t29) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7115, i64 13, i64 0 }, %S.json.Json %t29) call void @finch.drop.S_json_Json(ptr %a23) - br label %endif10774 -endif10774: + br label %endif10802 +endif10802: %t30 = load %S.json.Json, ptr %a6 ret %S.json.Json %t30 } @@ -110151,72 +110326,72 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 97 - br label %logic.from10775 -logic.from10775: - br i1 %t3, label %logic.rhs10776, label %logic.end10777 -logic.rhs10776: + br label %logic.from10803 +logic.from10803: + br i1 %t3, label %logic.rhs10804, label %logic.end10805 +logic.rhs10804: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 122 - br label %logic.rend10778 -logic.rend10778: - br label %logic.end10777 -logic.end10777: - %t6 = phi i1 [ false, %logic.from10775 ], [ %t5, %logic.rend10778 ] - br label %logic.from10779 -logic.from10779: - br i1 %t6, label %logic.end10781, label %logic.rhs10780 -logic.rhs10780: + br label %logic.rend10806 +logic.rend10806: + br label %logic.end10805 +logic.end10805: + %t6 = phi i1 [ false, %logic.from10803 ], [ %t5, %logic.rend10806 ] + br label %logic.from10807 +logic.from10807: + br i1 %t6, label %logic.end10809, label %logic.rhs10808 +logic.rhs10808: %t7 = load i8, ptr %a1 %t8 = icmp uge i8 %t7, 65 - br label %logic.from10782 -logic.from10782: - br i1 %t8, label %logic.rhs10783, label %logic.end10784 -logic.rhs10783: + br label %logic.from10810 +logic.from10810: + br i1 %t8, label %logic.rhs10811, label %logic.end10812 +logic.rhs10811: %t9 = load i8, ptr %a1 %t10 = icmp ule i8 %t9, 90 - br label %logic.rend10785 -logic.rend10785: - br label %logic.end10784 -logic.end10784: - %t11 = phi i1 [ false, %logic.from10782 ], [ %t10, %logic.rend10785 ] - br label %logic.rend10786 -logic.rend10786: - br label %logic.end10781 -logic.end10781: - %t12 = phi i1 [ true, %logic.from10779 ], [ %t11, %logic.rend10786 ] - br label %logic.from10787 -logic.from10787: - br i1 %t12, label %logic.end10789, label %logic.rhs10788 -logic.rhs10788: + br label %logic.rend10813 +logic.rend10813: + br label %logic.end10812 +logic.end10812: + %t11 = phi i1 [ false, %logic.from10810 ], [ %t10, %logic.rend10813 ] + br label %logic.rend10814 +logic.rend10814: + br label %logic.end10809 +logic.end10809: + %t12 = phi i1 [ true, %logic.from10807 ], [ %t11, %logic.rend10814 ] + br label %logic.from10815 +logic.from10815: + br i1 %t12, label %logic.end10817, label %logic.rhs10816 +logic.rhs10816: %t13 = load i8, ptr %a1 %t14 = icmp uge i8 %t13, 48 - br label %logic.from10790 -logic.from10790: - br i1 %t14, label %logic.rhs10791, label %logic.end10792 -logic.rhs10791: + br label %logic.from10818 +logic.from10818: + br i1 %t14, label %logic.rhs10819, label %logic.end10820 +logic.rhs10819: %t15 = load i8, ptr %a1 %t16 = icmp ule i8 %t15, 57 - br label %logic.rend10793 -logic.rend10793: - br label %logic.end10792 -logic.end10792: - %t17 = phi i1 [ false, %logic.from10790 ], [ %t16, %logic.rend10793 ] - br label %logic.rend10794 -logic.rend10794: - br label %logic.end10789 -logic.end10789: - %t18 = phi i1 [ true, %logic.from10787 ], [ %t17, %logic.rend10794 ] - br label %logic.from10795 -logic.from10795: - br i1 %t18, label %logic.end10797, label %logic.rhs10796 -logic.rhs10796: + br label %logic.rend10821 +logic.rend10821: + br label %logic.end10820 +logic.end10820: + %t17 = phi i1 [ false, %logic.from10818 ], [ %t16, %logic.rend10821 ] + br label %logic.rend10822 +logic.rend10822: + br label %logic.end10817 +logic.end10817: + %t18 = phi i1 [ true, %logic.from10815 ], [ %t17, %logic.rend10822 ] + br label %logic.from10823 +logic.from10823: + br i1 %t18, label %logic.end10825, label %logic.rhs10824 +logic.rhs10824: %t19 = load i8, ptr %a1 %t20 = icmp eq i8 %t19, 95 - br label %logic.rend10798 -logic.rend10798: - br label %logic.end10797 -logic.end10797: - %t21 = phi i1 [ true, %logic.from10795 ], [ %t20, %logic.rend10798 ] + br label %logic.rend10826 +logic.rend10826: + br label %logic.end10825 +logic.end10825: + %t21 = phi i1 [ true, %logic.from10823 ], [ %t20, %logic.rend10826 ] ret i1 %t21 } @@ -110234,14 +110409,14 @@ entry: store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 - br label %each.cond10799 -each.cond10799: + br label %each.cond10827 +each.cond10827: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body10800, label %each.end10802 -each.body10800: + br i1 %t7, label %each.body10828, label %each.end10830 +each.body10828: %t8 = load ptr, ptr %a2 %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 %t10 = load %S.docs.Doc, ptr %t9 @@ -110250,21 +110425,21 @@ each.body10800: %t13 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 - store { ptr, i64, i64 } { ptr @.str.7102, i64 1, i64 0 }, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.7117, i64 1, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %then10803, label %endif10805 -then10803: + br i1 %t19, label %then10831, label %endif10833 +then10831: store i64 5, ptr %a12 - br label %endif10805 -endif10805: + br label %endif10833 +endif10833: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic10806, label %ok10807 -panic10806: - call void @finch_panic(ptr @.str.7103, i64 497, ptr @.str.7104) + br i1 %t21, label %panic10834, label %ok10835 +panic10834: + call void @finch_panic(ptr @.str.7118, i64 497, ptr @.str.7119) unreachable -ok10807: +ok10835: %t22 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = load i64, ptr %a12 @@ -110276,13 +110451,13 @@ ok10807: call void @finch.json.Json.push(ptr %t20, %S.json.Json %t29) store %S.json.Json %t29, ptr %a30 call void @finch.drop.S_json_Json(ptr %a30) - br label %each.step10801 -each.step10801: + br label %each.step10829 +each.step10829: %t31 = load i64, ptr %a3 %t32 = add i64 %t31, 1 store i64 %t32, ptr %a3 - br label %each.cond10799 -each.end10802: + br label %each.cond10827 +each.end10830: ret void } @@ -110309,14 +110484,14 @@ entry: store %S.lsp.VarRec zeroinitializer, ptr %a5 %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 store i64 0, ptr %a7 - br label %each.cond10808 -each.cond10808: + br label %each.cond10836 +each.cond10836: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load i64, ptr %a7 %t11 = icmp slt i64 %t10, %t9 - br i1 %t11, label %each.body10809, label %each.end10811 -each.body10809: + br i1 %t11, label %each.body10837, label %each.end10839 +each.body10837: %t12 = load ptr, ptr %t6 %t13 = getelementptr inbounds %S.lsp.VarRec, ptr %t12, i64 %t10 %t14 = load %S.lsp.VarRec, ptr %t13 @@ -110328,37 +110503,37 @@ each.body10809: store { ptr, i64, i64 } %t18, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br label %logic.from10812 -logic.from10812: - br i1 %t22, label %logic.rhs10813, label %logic.end10814 -logic.rhs10813: + br label %logic.from10840 +logic.from10840: + br i1 %t22, label %logic.rhs10841, label %logic.end10842 +logic.rhs10841: %t23 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 3 %t24 = load i64, ptr %t23 %t25 = load i64, ptr %a4 %t26 = icmp sle i64 %t24, %t25 - br label %logic.rend10815 -logic.rend10815: - br label %logic.end10814 -logic.end10814: - %t27 = phi i1 [ false, %logic.from10812 ], [ %t26, %logic.rend10815 ] - br label %logic.from10816 -logic.from10816: - br i1 %t27, label %logic.rhs10817, label %logic.end10818 -logic.rhs10817: + br label %logic.rend10843 +logic.rend10843: + br label %logic.end10842 +logic.end10842: + %t27 = phi i1 [ false, %logic.from10840 ], [ %t26, %logic.rend10843 ] + br label %logic.from10844 +logic.from10844: + br i1 %t27, label %logic.rhs10845, label %logic.end10846 +logic.rhs10845: %t28 = load i64, ptr %a4 %t29 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 7 %t30 = load i64, ptr %t29 %t31 = add i64 %t30, 1 %t32 = icmp sle i64 %t28, %t31 - br label %logic.rend10819 -logic.rend10819: - br label %logic.end10818 -logic.end10818: - %t33 = phi i1 [ false, %logic.from10816 ], [ %t32, %logic.rend10819 ] - br label %logic.from10820 -logic.from10820: - br i1 %t33, label %logic.rhs10821, label %logic.end10822 -logic.rhs10821: + br label %logic.rend10847 +logic.rend10847: + br label %logic.end10846 +logic.end10846: + %t33 = phi i1 [ false, %logic.from10844 ], [ %t32, %logic.rend10847 ] + br label %logic.from10848 +logic.from10848: + br i1 %t33, label %logic.rhs10849, label %logic.end10850 +logic.rhs10849: %t34 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 5 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = load { ptr, i64, i64 }, ptr %a2 @@ -110366,13 +110541,13 @@ logic.rhs10821: store { ptr, i64, i64 } %t36, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br label %logic.rend10823 -logic.rend10823: - br label %logic.end10822 -logic.end10822: - %t41 = phi i1 [ false, %logic.from10820 ], [ %t40, %logic.rend10823 ] - br i1 %t41, label %then10824, label %endif10826 -then10824: + br label %logic.rend10851 +logic.rend10851: + br label %logic.end10850 +logic.end10850: + %t41 = phi i1 [ false, %logic.from10848 ], [ %t40, %logic.rend10851 ] + br i1 %t41, label %then10852, label %endif10854 +then10852: %t42 = load %S.lsp.VarRec, ptr %a15 store %S.lsp.VarRec %t42, ptr %a43 call void @finch.copy.S_lsp_VarRec(ptr %a44, ptr %a43) @@ -110381,15 +110556,15 @@ then10824: store %S.lsp.VarRec %t45, ptr %a5 store %S.lsp.VarRec %t46, ptr %a47 call void @finch.drop.S_lsp_VarRec(ptr %a47) - br label %endif10826 -endif10826: - br label %each.step10810 -each.step10810: + br label %endif10854 +endif10854: + br label %each.step10838 +each.step10838: %t48 = load i64, ptr %a7 %t49 = add i64 %t48, 1 store i64 %t49, ptr %a7 - br label %each.cond10808 -each.end10811: + br label %each.cond10836 +each.end10839: %t50 = load %S.lsp.VarRec, ptr %a5 ret %S.lsp.VarRec %t50 } @@ -110584,198 +110759,198 @@ entry: %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t17 = load i64, ptr %t16 %t18 = icmp sgt i64 %t15, %t17 - br i1 %t18, label %then10827, label %endif10829 -then10827: + br i1 %t18, label %then10855, label %endif10857 +then10855: %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t20 = load i64, ptr %t19 store i64 %t20, ptr %a14 - br label %endif10829 -endif10829: + br label %endif10857 +endif10857: %t21 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = load i64, ptr %a14 - call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.7105, i64 519) + call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.7120, i64 519) %t25 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 %t28 = load i64, ptr %t27 store i64 %t28, ptr %a29 - br label %while.cond10830 -while.cond10830: + br label %while.cond10858 +while.cond10858: %t30 = load i64, ptr %a29 %t31 = icmp sgt i64 %t30, 0 - br label %logic.from10833 -logic.from10833: - br i1 %t31, label %logic.rhs10834, label %logic.end10835 -logic.rhs10834: + br label %logic.from10861 +logic.from10861: + br i1 %t31, label %logic.rhs10862, label %logic.end10863 +logic.rhs10862: %t32 = load i64, ptr %a29 %t33 = sub i64 %t32, 1 %t34 = load { ptr, i64, i64 }, ptr %a26 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 - br i1 %t36, label %range10836, label %inrange10837 -range10836: - call void @finch_panic_index(ptr @.str.7106, i64 522, i64 %t33, i64 %t35) + br i1 %t36, label %range10864, label %inrange10865 +range10864: + call void @finch_panic_index(ptr @.str.7121, i64 522, i64 %t33, i64 %t35) unreachable -inrange10837: +inrange10865: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds i8, ptr %t37, i64 %t33 %t39 = load i8, ptr %t38 %t40 = call i1 @finch.lsp.isWordChar(i8 %t39) - br label %logic.rend10838 -logic.rend10838: - br label %logic.end10835 -logic.end10835: - %t41 = phi i1 [ false, %logic.from10833 ], [ %t40, %logic.rend10838 ] - br i1 %t41, label %while.body10831, label %while.end10832 -while.body10831: + br label %logic.rend10866 +logic.rend10866: + br label %logic.end10863 +logic.end10863: + %t41 = phi i1 [ false, %logic.from10861 ], [ %t40, %logic.rend10866 ] + br i1 %t41, label %while.body10859, label %while.end10860 +while.body10859: %t42 = load i64, ptr %a29 %t43 = sub i64 %t42, 1 store i64 %t43, ptr %a29 - br label %while.cond10830 -while.end10832: + br label %while.cond10858 +while.end10860: %t44 = load i64, ptr %a29 %t45 = icmp sgt i64 %t44, 0 - br label %logic.from10839 -logic.from10839: - br i1 %t45, label %logic.rhs10840, label %logic.end10841 -logic.rhs10840: + br label %logic.from10867 +logic.from10867: + br i1 %t45, label %logic.rhs10868, label %logic.end10869 +logic.rhs10868: %t46 = load i64, ptr %a29 %t47 = sub i64 %t46, 1 %t48 = load { ptr, i64, i64 }, ptr %a26 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range10842, label %inrange10843 -range10842: - call void @finch_panic_index(ptr @.str.7107, i64 525, i64 %t47, i64 %t49) + br i1 %t50, label %range10870, label %inrange10871 +range10870: + call void @finch_panic_index(ptr @.str.7122, i64 525, i64 %t47, i64 %t49) unreachable -inrange10843: +inrange10871: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 %t53 = load i8, ptr %t52 %t54 = icmp eq i8 %t53, 46 - br label %logic.rend10844 -logic.rend10844: - br label %logic.end10841 -logic.end10841: - %t55 = phi i1 [ false, %logic.from10839 ], [ %t54, %logic.rend10844 ] + br label %logic.rend10872 +logic.rend10872: + br label %logic.end10869 +logic.end10869: + %t55 = phi i1 [ false, %logic.from10867 ], [ %t54, %logic.rend10872 ] store i1 %t55, ptr %a56 %t57 = load i1, ptr %a56 - br i1 %t57, label %then10845, label %endif10847 -then10845: + br i1 %t57, label %then10873, label %endif10875 +then10873: %t58 = load i64, ptr %a29 %t59 = sub i64 %t58, 1 store i64 %t59, ptr %a60 - br label %while.cond10848 -while.cond10848: + br label %while.cond10876 +while.cond10876: %t61 = load i64, ptr %a60 %t62 = icmp sgt i64 %t61, 0 - br label %logic.from10851 -logic.from10851: - br i1 %t62, label %logic.rhs10852, label %logic.end10853 -logic.rhs10852: + br label %logic.from10879 +logic.from10879: + br i1 %t62, label %logic.rhs10880, label %logic.end10881 +logic.rhs10880: %t63 = load i64, ptr %a60 %t64 = sub i64 %t63, 1 %t65 = load { ptr, i64, i64 }, ptr %a26 %t66 = extractvalue { ptr, i64, i64 } %t65, 1 %t67 = icmp uge i64 %t64, %t66 - br i1 %t67, label %range10854, label %inrange10855 -range10854: - call void @finch_panic_index(ptr @.str.7108, i64 528, i64 %t64, i64 %t66) + br i1 %t67, label %range10882, label %inrange10883 +range10882: + call void @finch_panic_index(ptr @.str.7123, i64 528, i64 %t64, i64 %t66) unreachable -inrange10855: +inrange10883: %t68 = extractvalue { ptr, i64, i64 } %t65, 0 %t69 = getelementptr inbounds i8, ptr %t68, i64 %t64 %t70 = load i8, ptr %t69 %t71 = call i1 @finch.lsp.isWordChar(i8 %t70) - br label %logic.from10856 -logic.from10856: - br i1 %t71, label %logic.end10858, label %logic.rhs10857 -logic.rhs10857: + br label %logic.from10884 +logic.from10884: + br i1 %t71, label %logic.end10886, label %logic.rhs10885 +logic.rhs10885: %t72 = load i64, ptr %a60 %t73 = sub i64 %t72, 1 %t74 = load { ptr, i64, i64 }, ptr %a26 %t75 = extractvalue { ptr, i64, i64 } %t74, 1 %t76 = icmp uge i64 %t73, %t75 - br i1 %t76, label %range10859, label %inrange10860 -range10859: - call void @finch_panic_index(ptr @.str.7109, i64 528, i64 %t73, i64 %t75) + br i1 %t76, label %range10887, label %inrange10888 +range10887: + call void @finch_panic_index(ptr @.str.7124, i64 528, i64 %t73, i64 %t75) unreachable -inrange10860: +inrange10888: %t77 = extractvalue { ptr, i64, i64 } %t74, 0 %t78 = getelementptr inbounds i8, ptr %t77, i64 %t73 %t79 = load i8, ptr %t78 %t80 = icmp eq i8 %t79, 91 - br label %logic.rend10861 -logic.rend10861: - br label %logic.end10858 -logic.end10858: - %t81 = phi i1 [ true, %logic.from10856 ], [ %t80, %logic.rend10861 ] - br label %logic.from10862 -logic.from10862: - br i1 %t81, label %logic.end10864, label %logic.rhs10863 -logic.rhs10863: + br label %logic.rend10889 +logic.rend10889: + br label %logic.end10886 +logic.end10886: + %t81 = phi i1 [ true, %logic.from10884 ], [ %t80, %logic.rend10889 ] + br label %logic.from10890 +logic.from10890: + br i1 %t81, label %logic.end10892, label %logic.rhs10891 +logic.rhs10891: %t82 = load i64, ptr %a60 %t83 = sub i64 %t82, 1 %t84 = load { ptr, i64, i64 }, ptr %a26 %t85 = extractvalue { ptr, i64, i64 } %t84, 1 %t86 = icmp uge i64 %t83, %t85 - br i1 %t86, label %range10865, label %inrange10866 -range10865: - call void @finch_panic_index(ptr @.str.7110, i64 528, i64 %t83, i64 %t85) + br i1 %t86, label %range10893, label %inrange10894 +range10893: + call void @finch_panic_index(ptr @.str.7125, i64 528, i64 %t83, i64 %t85) unreachable -inrange10866: +inrange10894: %t87 = extractvalue { ptr, i64, i64 } %t84, 0 %t88 = getelementptr inbounds i8, ptr %t87, i64 %t83 %t89 = load i8, ptr %t88 %t90 = icmp eq i8 %t89, 93 - br label %logic.rend10867 -logic.rend10867: - br label %logic.end10864 -logic.end10864: - %t91 = phi i1 [ true, %logic.from10862 ], [ %t90, %logic.rend10867 ] - br label %logic.rend10868 -logic.rend10868: - br label %logic.end10853 -logic.end10853: - %t92 = phi i1 [ false, %logic.from10851 ], [ %t91, %logic.rend10868 ] - br i1 %t92, label %while.body10849, label %while.end10850 -while.body10849: + br label %logic.rend10895 +logic.rend10895: + br label %logic.end10892 +logic.end10892: + %t91 = phi i1 [ true, %logic.from10890 ], [ %t90, %logic.rend10895 ] + br label %logic.rend10896 +logic.rend10896: + br label %logic.end10881 +logic.end10881: + %t92 = phi i1 [ false, %logic.from10879 ], [ %t91, %logic.rend10896 ] + br i1 %t92, label %while.body10877, label %while.end10878 +while.body10877: %t93 = load i64, ptr %a60 %t94 = sub i64 %t93, 1 store i64 %t94, ptr %a60 - br label %while.cond10848 -while.end10850: + br label %while.cond10876 +while.end10878: %t95 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t95, ptr %a96 %t98 = load i64, ptr %a60 %t99 = load i64, ptr %a29 %t100 = sub i64 %t99, 1 - call void @finch_str_sub(ptr %a97, ptr %a96, i64 %t98, i64 %t100, ptr @.str.7111, i64 531) + call void @finch_str_sub(ptr %a97, ptr %a96, i64 %t98, i64 %t100, ptr @.str.7126, i64 531) %t101 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t101, ptr %a102 store i1 false, ptr %a103 %t104 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t104, ptr %a105 - store { ptr, i64, i64 } { ptr @.str.7113, i64 1, i64 0 }, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.7128, i64 1, i64 0 }, ptr %a107 %t108 = call i64 @finch_str_find(ptr %a105, ptr %a107) store i64 %t108, ptr %a109 %t110 = load i64, ptr %a109 %t111 = icmp sge i64 %t110, 0 - br i1 %t111, label %then10869, label %endif10871 -then10869: + br i1 %t111, label %then10897, label %endif10899 +then10897: %t112 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t112, ptr %a113 %t115 = load i64, ptr %a109 - call void @finch_str_sub(ptr %a114, ptr %a113, i64 0, i64 %t115, ptr @.str.7114, i64 535) + call void @finch_str_sub(ptr %a114, ptr %a113, i64 0, i64 %t115, ptr @.str.7129, i64 535) %t116 = load { ptr, i64, i64 }, ptr %a114 %t117 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t116, ptr %a102 store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_drop(ptr %a118) store i1 true, ptr %a103 - br label %endif10871 -endif10871: + br label %endif10899 +endif10899: %t119 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %a102 @@ -110783,41 +110958,41 @@ endif10871: %t123 = load i64, ptr %t120 %t124 = load ptr, ptr %t119 store i64 0, ptr %a125 - br label %find.cond10872 -find.cond10872: + br label %find.cond10900 +find.cond10900: %t126 = load i64, ptr %a125 %t127 = icmp slt i64 %t126, %t123 - br i1 %t127, label %find.body10873, label %find.end10876 -find.body10873: + br i1 %t127, label %find.body10901, label %find.end10904 +find.body10901: %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 %t126 %t129 = load { ptr, i64, i64 }, ptr %t128 store { ptr, i64, i64 } %t129, ptr %a130 store { ptr, i64, i64 } %t121, ptr %a131 %t132 = call i32 @finch_str_eq(ptr %a130, ptr %a131) %t133 = icmp ne i32 %t132, 0 - br i1 %t133, label %find.hit10874, label %find.next10875 -find.hit10874: + br i1 %t133, label %find.hit10902, label %find.next10903 +find.hit10902: store i64 %t126, ptr %a122 - br label %find.end10876 -find.next10875: + br label %find.end10904 +find.next10903: %t134 = add i64 %t126, 1 store i64 %t134, ptr %a125 - br label %find.cond10872 -find.end10876: + br label %find.cond10900 +find.end10904: %t135 = load i64, ptr %a122 %t136 = icmp sge i64 %t135, 0 - br i1 %t136, label %then10877, label %endif10879 -then10877: + br i1 %t136, label %then10905, label %endif10907 +then10905: %t137 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a138 - br label %each.cond10880 -each.cond10880: + br label %each.cond10908 +each.cond10908: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t140 = load i64, ptr %t139 %t141 = load i64, ptr %a138 %t142 = icmp slt i64 %t141, %t140 - br i1 %t142, label %each.body10881, label %each.end10883 -each.body10881: + br i1 %t142, label %each.body10909, label %each.end10911 +each.body10909: %t143 = load ptr, ptr %t137 %t144 = getelementptr inbounds %S.lsp.FnRec, ptr %t143, i64 %t141 %t145 = load %S.lsp.FnRec, ptr %t144 @@ -110829,48 +111004,48 @@ each.body10881: store { ptr, i64, i64 } %t149, ptr %a151 %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) %t153 = icmp ne i32 %t152, 0 - br label %logic.from10884 -logic.from10884: - br i1 %t153, label %logic.rhs10885, label %logic.end10886 -logic.rhs10885: + br label %logic.from10912 +logic.from10912: + br i1 %t153, label %logic.rhs10913, label %logic.end10914 +logic.rhs10913: %t154 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 2 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 %t156 = load i64, ptr %t155 %t157 = icmp eq i64 %t156, 0 - br label %logic.rend10887 -logic.rend10887: - br label %logic.end10886 -logic.end10886: - %t158 = phi i1 [ false, %logic.from10884 ], [ %t157, %logic.rend10887 ] - br i1 %t158, label %then10888, label %endif10890 -then10888: + br label %logic.rend10915 +logic.rend10915: + br label %logic.end10914 +logic.end10914: + %t158 = phi i1 [ false, %logic.from10912 ], [ %t157, %logic.rend10915 ] + br i1 %t158, label %then10916, label %endif10918 +then10916: %t159 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 1 %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 7 %t162 = load { ptr, i64, i64 }, ptr %t161 - %t163 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t160, i64 3, { ptr, i64, i64 } %t162, { ptr, i64, i64 } { ptr @.str.7115, i64 0, i64 0 }) + %t163 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t160, i64 3, { ptr, i64, i64 } %t162, { ptr, i64, i64 } { ptr @.str.7130, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t163) store %S.json.Json %t163, ptr %a164 call void @finch.drop.S_json_Json(ptr %a164) - br label %endif10890 -endif10890: - br label %each.step10882 -each.step10882: + br label %endif10918 +endif10918: + br label %each.step10910 +each.step10910: %t165 = load i64, ptr %a138 %t166 = add i64 %t165, 1 store i64 %t166, ptr %a138 - br label %each.cond10880 -each.end10883: + br label %each.cond10908 +each.end10911: %t167 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a168 - br label %each.cond10891 -each.cond10891: + br label %each.cond10919 +each.cond10919: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = load i64, ptr %a168 %t172 = icmp slt i64 %t171, %t170 - br i1 %t172, label %each.body10892, label %each.end10894 -each.body10892: + br i1 %t172, label %each.body10920, label %each.end10922 +each.body10920: %t173 = load ptr, ptr %t167 %t174 = getelementptr inbounds %S.lsp.StructRec, ptr %t173, i64 %t171 %t175 = load %S.lsp.StructRec, ptr %t174 @@ -110882,41 +111057,41 @@ each.body10892: store { ptr, i64, i64 } %t179, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 - br i1 %t183, label %then10895, label %endif10897 -then10895: + br i1 %t183, label %then10923, label %endif10925 +then10923: %t184 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 %t185 = load { ptr, i64, i64 }, ptr %t184 %t186 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 %t187 = load { ptr, i64, i64 }, ptr %t186 - store { ptr, i64, i64 } { ptr @.str.7116, i64 7, i64 0 }, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.7131, i64 7, i64 0 }, ptr %a189 store { ptr, i64, i64 } %t187, ptr %a190 call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) %t191 = load { ptr, i64, i64 }, ptr %a188 - %t192 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t185, i64 22, { ptr, i64, i64 } %t191, { ptr, i64, i64 } { ptr @.str.7117, i64 0, i64 0 }) + %t192 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t185, i64 22, { ptr, i64, i64 } %t191, { ptr, i64, i64 } { ptr @.str.7132, i64 0, i64 0 }) store { ptr, i64, i64 } %t191, ptr %a193 call void @finch_str_drop(ptr %a193) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t192) store %S.json.Json %t192, ptr %a194 call void @finch.drop.S_json_Json(ptr %a194) - br label %endif10897 -endif10897: - br label %each.step10893 -each.step10893: + br label %endif10925 +endif10925: + br label %each.step10921 +each.step10921: %t195 = load i64, ptr %a168 %t196 = add i64 %t195, 1 store i64 %t196, ptr %a168 - br label %each.cond10891 -each.end10894: + br label %each.cond10919 +each.end10922: %t197 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a198 - br label %each.cond10898 -each.cond10898: + br label %each.cond10926 +each.cond10926: %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 %t200 = load i64, ptr %t199 %t201 = load i64, ptr %a198 %t202 = icmp slt i64 %t201, %t200 - br i1 %t202, label %each.body10899, label %each.end10901 -each.body10899: + br i1 %t202, label %each.body10927, label %each.end10929 +each.body10927: %t203 = load ptr, ptr %t197 %t204 = getelementptr inbounds %S.lsp.EnumRec, ptr %t203, i64 %t201 %t205 = load %S.lsp.EnumRec, ptr %t204 @@ -110928,31 +111103,31 @@ each.body10899: store { ptr, i64, i64 } %t209, ptr %a211 %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) %t213 = icmp ne i32 %t212, 0 - br i1 %t213, label %then10902, label %endif10904 -then10902: + br i1 %t213, label %then10930, label %endif10932 +then10930: %t214 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 %t215 = load { ptr, i64, i64 }, ptr %t214 %t216 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 %t217 = load { ptr, i64, i64 }, ptr %t216 - store { ptr, i64, i64 } { ptr @.str.7118, i64 5, i64 0 }, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.7133, i64 5, i64 0 }, ptr %a219 store { ptr, i64, i64 } %t217, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) %t221 = load { ptr, i64, i64 }, ptr %a218 - %t222 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t215, i64 13, { ptr, i64, i64 } %t221, { ptr, i64, i64 } { ptr @.str.7119, i64 0, i64 0 }) + %t222 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t215, i64 13, { ptr, i64, i64 } %t221, { ptr, i64, i64 } { ptr @.str.7134, i64 0, i64 0 }) store { ptr, i64, i64 } %t221, ptr %a223 call void @finch_str_drop(ptr %a223) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t222) store %S.json.Json %t222, ptr %a224 call void @finch.drop.S_json_Json(ptr %a224) - br label %endif10904 -endif10904: - br label %each.step10900 -each.step10900: + br label %endif10932 +endif10932: + br label %each.step10928 +each.step10928: %t225 = load i64, ptr %a198 %t226 = add i64 %t225, 1 store i64 %t226, ptr %a198 - br label %each.cond10898 -each.end10901: + br label %each.cond10926 +each.end10929: %t227 = load %S.json.Json, ptr %a7 %t228 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t227) call void @finch_str_drop(ptr %a102) @@ -110960,17 +111135,17 @@ each.end10901: call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t228 -endif10879: +endif10907: %t229 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a230 - br label %each.cond10905 -each.cond10905: + br label %each.cond10933 +each.cond10933: %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 %t232 = load i64, ptr %t231 %t233 = load i64, ptr %a230 %t234 = icmp slt i64 %t233, %t232 - br i1 %t234, label %each.body10906, label %each.end10908 -each.body10906: + br i1 %t234, label %each.body10934, label %each.end10936 +each.body10934: %t235 = load ptr, ptr %t229 %t236 = getelementptr inbounds %S.lsp.EnumRec, ptr %t235, i64 %t233 %t237 = load %S.lsp.EnumRec, ptr %t236 @@ -110982,10 +111157,10 @@ each.body10906: store { ptr, i64, i64 } %t241, ptr %a243 %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) %t245 = icmp ne i32 %t244, 0 - br label %logic.from10909 -logic.from10909: - br i1 %t245, label %logic.rhs10910, label %logic.end10911 -logic.rhs10910: + br label %logic.from10937 +logic.from10937: + br i1 %t245, label %logic.rhs10938, label %logic.end10939 +logic.rhs10938: %t246 = load %S.lsp.Analysis, ptr %a1 %t247 = load { ptr, i64, i64 }, ptr %a3 %t248 = load { ptr, i64, i64 }, ptr %a102 @@ -111001,23 +111176,23 @@ logic.rhs10910: store { ptr, i64, i64 } %t254, ptr %a257 call void @finch_str_drop(ptr %a257) %t258 = icmp eq i64 %t256, 0 - br label %logic.rend10912 -logic.rend10912: - br label %logic.end10911 -logic.end10911: - %t259 = phi i1 [ false, %logic.from10909 ], [ %t258, %logic.rend10912 ] - br i1 %t259, label %then10913, label %endif10915 -then10913: + br label %logic.rend10940 +logic.rend10940: + br label %logic.end10939 +logic.end10939: + %t259 = phi i1 [ false, %logic.from10937 ], [ %t258, %logic.rend10940 ] + br i1 %t259, label %then10941, label %endif10943 +then10941: %t260 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 5 store i64 0, ptr %a261 - br label %each.cond10916 -each.cond10916: + br label %each.cond10944 +each.cond10944: %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 %t263 = load i64, ptr %t262 %t264 = load i64, ptr %a261 %t265 = icmp slt i64 %t264, %t263 - br i1 %t265, label %each.body10917, label %each.end10919 -each.body10917: + br i1 %t265, label %each.body10945, label %each.end10947 +each.body10945: %t266 = load ptr, ptr %t260 %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t266, i64 %t264 %t268 = load { ptr, i64, i64 }, ptr %t267 @@ -111026,7 +111201,7 @@ each.body10917: %t271 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 %t272 = load { ptr, i64, i64 }, ptr %t271 store { ptr, i64, i64 } %t272, ptr %a274 - store { ptr, i64, i64 } { ptr @.str.7120, i64 1, i64 0 }, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.7135, i64 1, i64 0 }, ptr %a275 call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) %t276 = load { ptr, i64, i64 }, ptr %a273 %t277 = load { ptr, i64, i64 }, ptr %a269 @@ -111036,19 +111211,19 @@ each.body10917: store { ptr, i64, i64 } %t276, ptr %a281 call void @finch_str_drop(ptr %a281) %t282 = load { ptr, i64, i64 }, ptr %a278 - %t283 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t270, i64 20, { ptr, i64, i64 } %t282, { ptr, i64, i64 } { ptr @.str.7121, i64 0, i64 0 }) + %t283 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t270, i64 20, { ptr, i64, i64 } %t282, { ptr, i64, i64 } { ptr @.str.7136, i64 0, i64 0 }) store { ptr, i64, i64 } %t282, ptr %a284 call void @finch_str_drop(ptr %a284) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t283) store %S.json.Json %t283, ptr %a285 call void @finch.drop.S_json_Json(ptr %a285) - br label %each.step10918 -each.step10918: + br label %each.step10946 +each.step10946: %t286 = load i64, ptr %a261 %t287 = add i64 %t286, 1 store i64 %t287, ptr %a261 - br label %each.cond10916 -each.end10919: + br label %each.cond10944 +each.end10947: %t288 = load %S.json.Json, ptr %a7 %t289 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t288) call void @finch_str_drop(ptr %a102) @@ -111056,14 +111231,14 @@ each.end10919: call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t289 -endif10915: - br label %each.step10907 -each.step10907: +endif10943: + br label %each.step10935 +each.step10935: %t290 = load i64, ptr %a230 %t291 = add i64 %t290, 1 store i64 %t291, ptr %a230 - br label %each.cond10905 -each.end10908: + br label %each.cond10933 +each.end10936: %t292 = load %S.lsp.Analysis, ptr %a1 %t293 = load { ptr, i64, i64 }, ptr %a3 %t294 = load { ptr, i64, i64 }, ptr %a102 @@ -111077,132 +111252,132 @@ each.end10908: call void @finch.drop.S_lsp_VarRec(ptr %a301) store { ptr, i64, i64 } %t300, ptr %a302 %t303 = load i1, ptr %a103 - br label %logic.from10920 -logic.from10920: - br i1 %t303, label %logic.rhs10921, label %logic.end10922 -logic.rhs10921: + br label %logic.from10948 +logic.from10948: + br i1 %t303, label %logic.rhs10949, label %logic.end10950 +logic.rhs10949: %t304 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t304, ptr %a305 - store { ptr, i64, i64 } { ptr @.str.7123, i64 2, i64 0 }, ptr %a307 + store { ptr, i64, i64 } { ptr @.str.7138, i64 2, i64 0 }, ptr %a307 %t308 = call i32 @finch_str_starts(ptr %a305, ptr %a307) %t309 = icmp ne i32 %t308, 0 - br label %logic.rend10923 -logic.rend10923: - br label %logic.end10922 -logic.end10922: - %t310 = phi i1 [ false, %logic.from10920 ], [ %t309, %logic.rend10923 ] - br i1 %t310, label %then10924, label %else10925 -then10924: + br label %logic.rend10951 +logic.rend10951: + br label %logic.end10950 +logic.end10950: + %t310 = phi i1 [ false, %logic.from10948 ], [ %t309, %logic.rend10951 ] + br i1 %t310, label %then10952, label %else10953 +then10952: %t311 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t311, ptr %a312 %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 %t315 = load i64, ptr %t314 - call void @finch_str_sub(ptr %a313, ptr %a312, i64 2, i64 %t315, ptr @.str.7124, i64 569) + call void @finch_str_sub(ptr %a313, ptr %a312, i64 2, i64 %t315, ptr @.str.7139, i64 569) %t316 = load { ptr, i64, i64 }, ptr %a313 %t317 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t316, ptr %a302 store { ptr, i64, i64 } %t317, ptr %a318 call void @finch_str_drop(ptr %a318) - br label %endif10926 -else10925: + br label %endif10954 +else10953: %t319 = load i1, ptr %a103 - br label %logic.from10927 -logic.from10927: - br i1 %t319, label %logic.rhs10928, label %logic.end10929 -logic.rhs10928: + br label %logic.from10955 +logic.from10955: + br i1 %t319, label %logic.rhs10956, label %logic.end10957 +logic.rhs10956: %t320 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t320, ptr %a321 - store { ptr, i64, i64 } { ptr @.str.7125, i64 3, i64 0 }, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.7140, i64 3, i64 0 }, ptr %a322 %t323 = call i32 @finch_str_eq(ptr %a321, ptr %a322) %t324 = icmp ne i32 %t323, 0 - br label %logic.rend10930 -logic.rend10930: - br label %logic.end10929 -logic.end10929: - %t325 = phi i1 [ false, %logic.from10927 ], [ %t324, %logic.rend10930 ] - br i1 %t325, label %then10931, label %endif10933 -then10931: + br label %logic.rend10958 +logic.rend10958: + br label %logic.end10957 +logic.end10957: + %t325 = phi i1 [ false, %logic.from10955 ], [ %t324, %logic.rend10958 ] + br i1 %t325, label %then10959, label %endif10961 +then10959: %t326 = load { ptr, i64, i64 }, ptr %a302 - store { ptr, i64, i64 } { ptr @.str.7126, i64 4, i64 0 }, ptr %a302 + store { ptr, i64, i64 } { ptr @.str.7141, i64 4, i64 0 }, ptr %a302 store { ptr, i64, i64 } %t326, ptr %a327 call void @finch_str_drop(ptr %a327) - br label %endif10933 -endif10933: - br label %endif10926 -endif10926: + br label %endif10961 +endif10961: + br label %endif10954 +endif10954: %t328 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t328, ptr %a329 - store { ptr, i64, i64 } { ptr @.str.7128, i64 4, i64 0 }, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.7143, i64 4, i64 0 }, ptr %a331 %t332 = call i32 @finch_str_starts(ptr %a329, ptr %a331) %t333 = icmp ne i32 %t332, 0 - br label %logic.from10934 -logic.from10934: - br i1 %t333, label %logic.rhs10935, label %logic.end10936 -logic.rhs10935: + br label %logic.from10962 +logic.from10962: + br i1 %t333, label %logic.rhs10963, label %logic.end10964 +logic.rhs10963: %t334 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t334, ptr %a335 - store { ptr, i64, i64 } { ptr @.str.7130, i64 1, i64 0 }, ptr %a337 + store { ptr, i64, i64 } { ptr @.str.7145, i64 1, i64 0 }, ptr %a337 %t338 = call i32 @finch_str_ends(ptr %a335, ptr %a337) %t339 = icmp ne i32 %t338, 0 - br label %logic.rend10937 -logic.rend10937: - br label %logic.end10936 -logic.end10936: - %t340 = phi i1 [ false, %logic.from10934 ], [ %t339, %logic.rend10937 ] - br i1 %t340, label %then10938, label %endif10940 -then10938: + br label %logic.rend10965 +logic.rend10965: + br label %logic.end10964 +logic.end10964: + %t340 = phi i1 [ false, %logic.from10962 ], [ %t339, %logic.rend10965 ] + br i1 %t340, label %then10966, label %endif10968 +then10966: %t341 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t341, ptr %a342 %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 %t345 = load i64, ptr %t344 %t346 = sub i64 %t345, 1 - call void @finch_str_sub(ptr %a343, ptr %a342, i64 4, i64 %t346, ptr @.str.7131, i64 574) + call void @finch_str_sub(ptr %a343, ptr %a342, i64 4, i64 %t346, ptr @.str.7146, i64 574) %t347 = load { ptr, i64, i64 }, ptr %a343 %t348 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t347, ptr %a302 store { ptr, i64, i64 } %t348, ptr %a349 call void @finch_str_drop(ptr %a349) - br label %endif10940 -endif10940: + br label %endif10968 +endif10968: %t350 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t350, ptr %a351 - store { ptr, i64, i64 } { ptr @.str.7133, i64 2, i64 0 }, ptr %a353 + store { ptr, i64, i64 } { ptr @.str.7148, i64 2, i64 0 }, ptr %a353 %t354 = call i32 @finch_str_starts(ptr %a351, ptr %a353) %t355 = icmp ne i32 %t354, 0 - br i1 %t355, label %then10941, label %else10942 -then10941: + br i1 %t355, label %then10969, label %else10970 +then10969: %t356 = call { ptr, i64, i64 } @finch.docs.arrayMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t356) store { ptr, i64, i64 } %t356, ptr %a357 call void @finch.drop.arr_S_docs_Doc(ptr %a357) - br label %endif10943 -else10942: + br label %endif10971 +else10970: %t358 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t358, ptr %a359 - store { ptr, i64, i64 } { ptr @.str.7134, i64 3, i64 0 }, ptr %a360 + store { ptr, i64, i64 } { ptr @.str.7149, i64 3, i64 0 }, ptr %a360 %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) %t362 = icmp ne i32 %t361, 0 - br i1 %t362, label %then10944, label %else10945 -then10944: + br i1 %t362, label %then10972, label %else10973 +then10972: %t363 = call { ptr, i64, i64 } @finch.docs.strMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t363) store { ptr, i64, i64 } %t363, ptr %a364 call void @finch.drop.arr_S_docs_Doc(ptr %a364) - br label %endif10946 -else10945: + br label %endif10974 +else10973: %t365 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t365, ptr %a366 - store { ptr, i64, i64 } { ptr @.str.7136, i64 4, i64 0 }, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.7151, i64 4, i64 0 }, ptr %a368 %t369 = call i32 @finch_str_starts(ptr %a366, ptr %a368) %t370 = icmp ne i32 %t369, 0 - br i1 %t370, label %then10947, label %else10948 -then10947: + br i1 %t370, label %then10975, label %else10976 +then10975: %t371 = call { ptr, i64, i64 } @finch.docs.mapMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t371) store { ptr, i64, i64 } %t371, ptr %a372 call void @finch.drop.arr_S_docs_Doc(ptr %a372) - br label %endif10949 -else10948: + br label %endif10977 +else10976: %t373 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t373, ptr %a374 call void @finch_str_copy(ptr %a375, ptr %a374) @@ -111210,14 +111385,14 @@ else10948: store { ptr, i64, i64 } %t376, ptr %a377 %t378 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a379 - br label %each.cond10950 -each.cond10950: + br label %each.cond10978 +each.cond10978: %t380 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 %t381 = load i64, ptr %t380 %t382 = load i64, ptr %a379 %t383 = icmp slt i64 %t382, %t381 - br i1 %t383, label %each.body10951, label %each.end10953 -each.body10951: + br i1 %t383, label %each.body10979, label %each.end10981 +each.body10979: %t384 = load ptr, ptr %t378 %t385 = getelementptr inbounds %S.lsp.StructRec, ptr %t384, i64 %t382 %t386 = load %S.lsp.StructRec, ptr %t385 @@ -111229,28 +111404,28 @@ each.body10951: store { ptr, i64, i64 } %t390, ptr %a392 %t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392) %t394 = icmp ne i32 %t393, 0 - br i1 %t394, label %then10954, label %endif10956 -then10954: + br i1 %t394, label %then10982, label %endif10984 +then10982: %t395 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 %t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %t395, i32 0, i32 1 %t397 = load i64, ptr %t396 store i64 0, ptr %a398 - br label %for.cond10957 -for.cond10957: + br label %for.cond10985 +for.cond10985: %t399 = load i64, ptr %a398 %t400 = icmp slt i64 %t399, %t397 - br i1 %t400, label %for.body10958, label %for.end10960 -for.body10958: + br i1 %t400, label %for.body10986, label %for.end10988 +for.body10986: %t401 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 %t402 = load i64, ptr %a398 %t403 = load { ptr, i64, i64 }, ptr %t401 %t404 = extractvalue { ptr, i64, i64 } %t403, 1 %t405 = icmp uge i64 %t402, %t404 - br i1 %t405, label %range10961, label %inrange10962 -range10961: - call void @finch_panic_index(ptr @.str.7137, i64 587, i64 %t402, i64 %t404) + br i1 %t405, label %range10989, label %inrange10990 +range10989: + call void @finch_panic_index(ptr @.str.7152, i64 587, i64 %t402, i64 %t404) unreachable -inrange10962: +inrange10990: %t406 = extractvalue { ptr, i64, i64 } %t403, 0 %t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i64 %t402 %t408 = load { ptr, i64, i64 }, ptr %t407 @@ -111259,44 +111434,44 @@ inrange10962: %t411 = load { ptr, i64, i64 }, ptr %t409 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 %t410, %t412 - br i1 %t413, label %range10963, label %inrange10964 -range10963: - call void @finch_panic_index(ptr @.str.7138, i64 587, i64 %t410, i64 %t412) + br i1 %t413, label %range10991, label %inrange10992 +range10991: + call void @finch_panic_index(ptr @.str.7153, i64 587, i64 %t410, i64 %t412) unreachable -inrange10964: +inrange10992: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t410 %t416 = load { ptr, i64, i64 }, ptr %t415 - %t417 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t408, i64 5, { ptr, i64, i64 } %t416, { ptr, i64, i64 } { ptr @.str.7139, i64 0, i64 0 }) + %t417 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t408, i64 5, { ptr, i64, i64 } %t416, { ptr, i64, i64 } { ptr @.str.7154, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t417) store %S.json.Json %t417, ptr %a418 call void @finch.drop.S_json_Json(ptr %a418) - br label %for.step10959 -for.step10959: + br label %for.step10987 +for.step10987: %t419 = load i64, ptr %a398 %t420 = add i64 %t419, 1 store i64 %t420, ptr %a398 - br label %for.cond10957 -for.end10960: - br label %endif10956 -endif10956: - br label %each.step10952 -each.step10952: + br label %for.cond10985 +for.end10988: + br label %endif10984 +endif10984: + br label %each.step10980 +each.step10980: %t421 = load i64, ptr %a379 %t422 = add i64 %t421, 1 store i64 %t422, ptr %a379 - br label %each.cond10950 -each.end10953: + br label %each.cond10978 +each.end10981: %t423 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a424 - br label %each.cond10965 -each.cond10965: + br label %each.cond10993 +each.cond10993: %t425 = getelementptr inbounds { ptr, i64, i64 }, ptr %t423, i32 0, i32 1 %t426 = load i64, ptr %t425 %t427 = load i64, ptr %a424 %t428 = icmp slt i64 %t427, %t426 - br i1 %t428, label %each.body10966, label %each.end10968 -each.body10966: + br i1 %t428, label %each.body10994, label %each.end10996 +each.body10994: %t429 = load ptr, ptr %t423 %t430 = getelementptr inbounds %S.lsp.FnRec, ptr %t429, i64 %t427 %t431 = load %S.lsp.FnRec, ptr %t430 @@ -111308,32 +111483,32 @@ each.body10966: store { ptr, i64, i64 } %t435, ptr %a437 %t438 = call i32 @finch_str_eq(ptr %a436, ptr %a437) %t439 = icmp ne i32 %t438, 0 - br i1 %t439, label %then10969, label %endif10971 -then10969: + br i1 %t439, label %then10997, label %endif10999 +then10997: %t440 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 1 %t441 = load { ptr, i64, i64 }, ptr %t440 %t442 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 7 %t443 = load { ptr, i64, i64 }, ptr %t442 - %t444 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t441, i64 2, { ptr, i64, i64 } %t443, { ptr, i64, i64 } { ptr @.str.7140, i64 0, i64 0 }) + %t444 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t441, i64 2, { ptr, i64, i64 } %t443, { ptr, i64, i64 } { ptr @.str.7155, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t444) store %S.json.Json %t444, ptr %a445 call void @finch.drop.S_json_Json(ptr %a445) - br label %endif10971 -endif10971: - br label %each.step10967 -each.step10967: + br label %endif10999 +endif10999: + br label %each.step10995 +each.step10995: %t446 = load i64, ptr %a424 %t447 = add i64 %t446, 1 store i64 %t447, ptr %a424 - br label %each.cond10965 -each.end10968: + br label %each.cond10993 +each.end10996: call void @finch_str_drop(ptr %a377) - br label %endif10949 -endif10949: - br label %endif10946 -endif10946: - br label %endif10943 -endif10943: + br label %endif10977 +endif10977: + br label %endif10974 +endif10974: + br label %endif10971 +endif10971: %t448 = load %S.json.Json, ptr %a7 %t449 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t448) call void @finch_str_drop(ptr %a302) @@ -111342,18 +111517,18 @@ endif10943: call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t449 -endif10847: +endif10875: store %S.lsp.Names zeroinitializer, ptr %a450 %t451 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 store i64 0, ptr %a452 - br label %each.cond10972 -each.cond10972: + br label %each.cond11000 +each.cond11000: %t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %t451, i32 0, i32 1 %t454 = load i64, ptr %t453 %t455 = load i64, ptr %a452 %t456 = icmp slt i64 %t455, %t454 - br i1 %t456, label %each.body10973, label %each.end10975 -each.body10973: + br i1 %t456, label %each.body11001, label %each.end11003 +each.body11001: %t457 = load ptr, ptr %t451 %t458 = getelementptr inbounds %S.lsp.VarRec, ptr %t457, i64 %t455 %t459 = load %S.lsp.VarRec, ptr %t458 @@ -111362,24 +111537,24 @@ each.body10973: %t462 = load i64, ptr %t461 %t463 = load i64, ptr %a4 %t464 = icmp sle i64 %t462, %t463 - br label %logic.from10976 -logic.from10976: - br i1 %t464, label %logic.rhs10977, label %logic.end10978 -logic.rhs10977: + br label %logic.from11004 +logic.from11004: + br i1 %t464, label %logic.rhs11005, label %logic.end11006 +logic.rhs11005: %t465 = load i64, ptr %a4 %t466 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 7 %t467 = load i64, ptr %t466 %t468 = add i64 %t467, 1 %t469 = icmp sle i64 %t465, %t468 - br label %logic.rend10979 -logic.rend10979: - br label %logic.end10978 -logic.end10978: - %t470 = phi i1 [ false, %logic.from10976 ], [ %t469, %logic.rend10979 ] - br label %logic.from10980 -logic.from10980: - br i1 %t470, label %logic.rhs10981, label %logic.end10982 -logic.rhs10981: + br label %logic.rend11007 +logic.rend11007: + br label %logic.end11006 +logic.end11006: + %t470 = phi i1 [ false, %logic.from11004 ], [ %t469, %logic.rend11007 ] + br label %logic.from11008 +logic.from11008: + br i1 %t470, label %logic.rhs11009, label %logic.end11010 +logic.rhs11009: %t471 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 5 %t472 = load { ptr, i64, i64 }, ptr %t471 %t473 = load { ptr, i64, i64 }, ptr %a3 @@ -111387,52 +111562,52 @@ logic.rhs10981: store { ptr, i64, i64 } %t473, ptr %a475 %t476 = call i32 @finch_str_eq(ptr %a474, ptr %a475) %t477 = icmp ne i32 %t476, 0 - br label %logic.rend10983 -logic.rend10983: - br label %logic.end10982 -logic.end10982: - %t478 = phi i1 [ false, %logic.from10980 ], [ %t477, %logic.rend10983 ] - br label %logic.from10984 -logic.from10984: - br i1 %t478, label %logic.rhs10985, label %logic.end10986 -logic.rhs10985: + br label %logic.rend11011 +logic.rend11011: + br label %logic.end11010 +logic.end11010: + %t478 = phi i1 [ false, %logic.from11008 ], [ %t477, %logic.rend11011 ] + br label %logic.from11012 +logic.from11012: + br i1 %t478, label %logic.rhs11013, label %logic.end11014 +logic.rhs11013: %t479 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 %t480 = load { ptr, i64, i64 }, ptr %t479 %t481 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t480) - br label %logic.rend10987 -logic.rend10987: - br label %logic.end10986 -logic.end10986: - %t482 = phi i1 [ false, %logic.from10984 ], [ %t481, %logic.rend10987 ] - br i1 %t482, label %then10988, label %endif10990 -then10988: + br label %logic.rend11015 +logic.rend11015: + br label %logic.end11014 +logic.end11014: + %t482 = phi i1 [ false, %logic.from11012 ], [ %t481, %logic.rend11015 ] + br i1 %t482, label %then11016, label %endif11018 +then11016: %t483 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 %t484 = load { ptr, i64, i64 }, ptr %t483 %t485 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 1 %t486 = load { ptr, i64, i64 }, ptr %t485 - %t487 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t484, i64 6, { ptr, i64, i64 } %t486, { ptr, i64, i64 } { ptr @.str.7141, i64 0, i64 0 }) + %t487 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t484, i64 6, { ptr, i64, i64 } %t486, { ptr, i64, i64 } { ptr @.str.7156, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t487) store %S.json.Json %t487, ptr %a488 call void @finch.drop.S_json_Json(ptr %a488) - br label %endif10990 -endif10990: - br label %each.step10974 -each.step10974: + br label %endif11018 +endif11018: + br label %each.step11002 +each.step11002: %t489 = load i64, ptr %a452 %t490 = add i64 %t489, 1 store i64 %t490, ptr %a452 - br label %each.cond10972 -each.end10975: + br label %each.cond11000 +each.end11003: %t491 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a492 - br label %each.cond10991 -each.cond10991: + br label %each.cond11019 +each.cond11019: %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i32 0, i32 1 %t494 = load i64, ptr %t493 %t495 = load i64, ptr %a492 %t496 = icmp slt i64 %t495, %t494 - br i1 %t496, label %each.body10992, label %each.end10994 -each.body10992: + br i1 %t496, label %each.body11020, label %each.end11022 +each.body11020: %t497 = load ptr, ptr %t491 %t498 = getelementptr inbounds %S.lsp.FnRec, ptr %t497, i64 %t495 %t499 = load %S.lsp.FnRec, ptr %t498 @@ -111441,62 +111616,62 @@ each.body10992: %t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t501, i32 0, i32 1 %t503 = load i64, ptr %t502 %t504 = icmp eq i64 %t503, 0 - br label %logic.from10995 -logic.from10995: - br i1 %t504, label %logic.rhs10996, label %logic.end10997 -logic.rhs10996: + br label %logic.from11023 +logic.from11023: + br i1 %t504, label %logic.rhs11024, label %logic.end11025 +logic.rhs11024: %t505 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 0 %t506 = load { ptr, i64, i64 }, ptr %t505 store { ptr, i64, i64 } %t506, ptr %a507 - store { ptr, i64, i64 } { ptr @.str.7142, i64 0, i64 0 }, ptr %a508 + store { ptr, i64, i64 } { ptr @.str.7157, i64 0, i64 0 }, ptr %a508 %t509 = call i32 @finch_str_eq(ptr %a507, ptr %a508) %t510 = icmp ne i32 %t509, 0 - br label %logic.rend10998 -logic.rend10998: - br label %logic.end10997 -logic.end10997: - %t511 = phi i1 [ false, %logic.from10995 ], [ %t510, %logic.rend10998 ] - br label %logic.from10999 -logic.from10999: - br i1 %t511, label %logic.rhs11000, label %logic.end11001 -logic.rhs11000: + br label %logic.rend11026 +logic.rend11026: + br label %logic.end11025 +logic.end11025: + %t511 = phi i1 [ false, %logic.from11023 ], [ %t510, %logic.rend11026 ] + br label %logic.from11027 +logic.from11027: + br i1 %t511, label %logic.rhs11028, label %logic.end11029 +logic.rhs11028: %t512 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 %t513 = load { ptr, i64, i64 }, ptr %t512 %t514 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t513) - br label %logic.rend11002 -logic.rend11002: - br label %logic.end11001 -logic.end11001: - %t515 = phi i1 [ false, %logic.from10999 ], [ %t514, %logic.rend11002 ] - br i1 %t515, label %then11003, label %endif11005 -then11003: + br label %logic.rend11030 +logic.rend11030: + br label %logic.end11029 +logic.end11029: + %t515 = phi i1 [ false, %logic.from11027 ], [ %t514, %logic.rend11030 ] + br i1 %t515, label %then11031, label %endif11033 +then11031: %t516 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 %t517 = load { ptr, i64, i64 }, ptr %t516 %t518 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 7 %t519 = load { ptr, i64, i64 }, ptr %t518 - %t520 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t517, i64 3, { ptr, i64, i64 } %t519, { ptr, i64, i64 } { ptr @.str.7143, i64 0, i64 0 }) + %t520 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t517, i64 3, { ptr, i64, i64 } %t519, { ptr, i64, i64 } { ptr @.str.7158, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t520) store %S.json.Json %t520, ptr %a521 call void @finch.drop.S_json_Json(ptr %a521) - br label %endif11005 -endif11005: - br label %each.step10993 -each.step10993: + br label %endif11033 +endif11033: + br label %each.step11021 +each.step11021: %t522 = load i64, ptr %a492 %t523 = add i64 %t522, 1 store i64 %t523, ptr %a492 - br label %each.cond10991 -each.end10994: + br label %each.cond11019 +each.end11022: %t524 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a525 - br label %each.cond11006 -each.cond11006: + br label %each.cond11034 +each.cond11034: %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t524, i32 0, i32 1 %t527 = load i64, ptr %t526 %t528 = load i64, ptr %a525 %t529 = icmp slt i64 %t528, %t527 - br i1 %t529, label %each.body11007, label %each.end11009 -each.body11007: + br i1 %t529, label %each.body11035, label %each.end11037 +each.body11035: %t530 = load ptr, ptr %t524 %t531 = getelementptr inbounds %S.lsp.StructRec, ptr %t530, i64 %t528 %t532 = load %S.lsp.StructRec, ptr %t531 @@ -111504,56 +111679,56 @@ each.body11007: %t534 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 0 %t535 = load { ptr, i64, i64 }, ptr %t534 store { ptr, i64, i64 } %t535, ptr %a536 - store { ptr, i64, i64 } { ptr @.str.7144, i64 0, i64 0 }, ptr %a537 + store { ptr, i64, i64 } { ptr @.str.7159, i64 0, i64 0 }, ptr %a537 %t538 = call i32 @finch_str_eq(ptr %a536, ptr %a537) %t539 = icmp ne i32 %t538, 0 - br label %logic.from11010 -logic.from11010: - br i1 %t539, label %logic.rhs11011, label %logic.end11012 -logic.rhs11011: + br label %logic.from11038 +logic.from11038: + br i1 %t539, label %logic.rhs11039, label %logic.end11040 +logic.rhs11039: %t540 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 %t541 = load { ptr, i64, i64 }, ptr %t540 %t542 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t541) - br label %logic.rend11013 -logic.rend11013: - br label %logic.end11012 -logic.end11012: - %t543 = phi i1 [ false, %logic.from11010 ], [ %t542, %logic.rend11013 ] - br i1 %t543, label %then11014, label %endif11016 -then11014: + br label %logic.rend11041 +logic.rend11041: + br label %logic.end11040 +logic.end11040: + %t543 = phi i1 [ false, %logic.from11038 ], [ %t542, %logic.rend11041 ] + br i1 %t543, label %then11042, label %endif11044 +then11042: %t544 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 %t545 = load { ptr, i64, i64 }, ptr %t544 %t546 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 %t547 = load { ptr, i64, i64 }, ptr %t546 - store { ptr, i64, i64 } { ptr @.str.7145, i64 7, i64 0 }, ptr %a549 + store { ptr, i64, i64 } { ptr @.str.7160, i64 7, i64 0 }, ptr %a549 store { ptr, i64, i64 } %t547, ptr %a550 call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) %t551 = load { ptr, i64, i64 }, ptr %a548 - %t552 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t545, i64 22, { ptr, i64, i64 } %t551, { ptr, i64, i64 } { ptr @.str.7146, i64 0, i64 0 }) + %t552 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t545, i64 22, { ptr, i64, i64 } %t551, { ptr, i64, i64 } { ptr @.str.7161, i64 0, i64 0 }) store { ptr, i64, i64 } %t551, ptr %a553 call void @finch_str_drop(ptr %a553) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t552) store %S.json.Json %t552, ptr %a554 call void @finch.drop.S_json_Json(ptr %a554) - br label %endif11016 -endif11016: - br label %each.step11008 -each.step11008: + br label %endif11044 +endif11044: + br label %each.step11036 +each.step11036: %t555 = load i64, ptr %a525 %t556 = add i64 %t555, 1 store i64 %t556, ptr %a525 - br label %each.cond11006 -each.end11009: + br label %each.cond11034 +each.end11037: %t557 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a558 - br label %each.cond11017 -each.cond11017: + br label %each.cond11045 +each.cond11045: %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i32 0, i32 1 %t560 = load i64, ptr %t559 %t561 = load i64, ptr %a558 %t562 = icmp slt i64 %t561, %t560 - br i1 %t562, label %each.body11018, label %each.end11020 -each.body11018: + br i1 %t562, label %each.body11046, label %each.end11048 +each.body11046: %t563 = load ptr, ptr %t557 %t564 = getelementptr inbounds %S.lsp.EnumRec, ptr %t563, i64 %t561 %t565 = load %S.lsp.EnumRec, ptr %t564 @@ -111561,89 +111736,89 @@ each.body11018: %t567 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 0 %t568 = load { ptr, i64, i64 }, ptr %t567 store { ptr, i64, i64 } %t568, ptr %a569 - store { ptr, i64, i64 } { ptr @.str.7147, i64 0, i64 0 }, ptr %a570 + store { ptr, i64, i64 } { ptr @.str.7162, i64 0, i64 0 }, ptr %a570 %t571 = call i32 @finch_str_eq(ptr %a569, ptr %a570) %t572 = icmp ne i32 %t571, 0 - br label %logic.from11021 -logic.from11021: - br i1 %t572, label %logic.rhs11022, label %logic.end11023 -logic.rhs11022: + br label %logic.from11049 +logic.from11049: + br i1 %t572, label %logic.rhs11050, label %logic.end11051 +logic.rhs11050: %t573 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 %t574 = load { ptr, i64, i64 }, ptr %t573 %t575 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t574) - br label %logic.rend11024 -logic.rend11024: - br label %logic.end11023 -logic.end11023: - %t576 = phi i1 [ false, %logic.from11021 ], [ %t575, %logic.rend11024 ] - br i1 %t576, label %then11025, label %endif11027 -then11025: + br label %logic.rend11052 +logic.rend11052: + br label %logic.end11051 +logic.end11051: + %t576 = phi i1 [ false, %logic.from11049 ], [ %t575, %logic.rend11052 ] + br i1 %t576, label %then11053, label %endif11055 +then11053: %t577 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 %t578 = load { ptr, i64, i64 }, ptr %t577 %t579 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 %t580 = load { ptr, i64, i64 }, ptr %t579 - store { ptr, i64, i64 } { ptr @.str.7148, i64 5, i64 0 }, ptr %a582 + store { ptr, i64, i64 } { ptr @.str.7163, i64 5, i64 0 }, ptr %a582 store { ptr, i64, i64 } %t580, ptr %a583 call void @finch_str_concat(ptr %a581, ptr %a582, ptr %a583) %t584 = load { ptr, i64, i64 }, ptr %a581 - %t585 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t578, i64 13, { ptr, i64, i64 } %t584, { ptr, i64, i64 } { ptr @.str.7149, i64 0, i64 0 }) + %t585 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t578, i64 13, { ptr, i64, i64 } %t584, { ptr, i64, i64 } { ptr @.str.7164, i64 0, i64 0 }) store { ptr, i64, i64 } %t584, ptr %a586 call void @finch_str_drop(ptr %a586) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t585) store %S.json.Json %t585, ptr %a587 call void @finch.drop.S_json_Json(ptr %a587) - br label %endif11027 -endif11027: - br label %each.step11019 -each.step11019: + br label %endif11055 +endif11055: + br label %each.step11047 +each.step11047: %t588 = load i64, ptr %a558 %t589 = add i64 %t588, 1 store i64 %t589, ptr %a558 - br label %each.cond11017 -each.end11020: + br label %each.cond11045 +each.end11048: %t590 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 store i64 0, ptr %a591 - br label %each.cond11028 -each.cond11028: + br label %each.cond11056 +each.cond11056: %t592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t590, i32 0, i32 1 %t593 = load i64, ptr %t592 %t594 = load i64, ptr %a591 %t595 = icmp slt i64 %t594, %t593 - br i1 %t595, label %each.body11029, label %each.end11031 -each.body11029: + br i1 %t595, label %each.body11057, label %each.end11059 +each.body11057: %t596 = load ptr, ptr %t590 %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 %t598 = load { ptr, i64, i64 }, ptr %t597 store { ptr, i64, i64 } %t598, ptr %a599 %t600 = load { ptr, i64, i64 }, ptr %a599 %t601 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t600) - br i1 %t601, label %then11032, label %endif11034 -then11032: + br i1 %t601, label %then11060, label %endif11062 +then11060: %t602 = load { ptr, i64, i64 }, ptr %a599 - %t603 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t602, i64 9, { ptr, i64, i64 } { ptr @.str.7150, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.7151, i64 0, i64 0 }) + %t603 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t602, i64 9, { ptr, i64, i64 } { ptr @.str.7165, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.7166, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t603) store %S.json.Json %t603, ptr %a604 call void @finch.drop.S_json_Json(ptr %a604) - br label %endif11034 -endif11034: - br label %each.step11030 -each.step11030: + br label %endif11062 +endif11062: + br label %each.step11058 +each.step11058: %t605 = load i64, ptr %a591 %t606 = add i64 %t605, 1 store i64 %t606, ptr %a591 - br label %each.cond11028 -each.end11031: + br label %each.cond11056 +each.end11059: %t607 = call { ptr, i64, i64 } @finch.docs.builtins() store { ptr, i64, i64 } %t607, ptr %a608 store i64 0, ptr %a609 - br label %each.cond11035 -each.cond11035: + br label %each.cond11063 +each.cond11063: %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a608, i32 0, i32 1 %t611 = load i64, ptr %t610 %t612 = load i64, ptr %a609 %t613 = icmp slt i64 %t612, %t611 - br i1 %t613, label %each.body11036, label %each.end11038 -each.body11036: + br i1 %t613, label %each.body11064, label %each.end11066 +each.body11064: %t614 = load ptr, ptr %a608 %t615 = getelementptr inbounds %S.docs.Doc, ptr %t614, i64 %t612 %t616 = load %S.docs.Doc, ptr %t615 @@ -111651,8 +111826,8 @@ each.body11036: %t618 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 %t619 = load { ptr, i64, i64 }, ptr %t618 %t620 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t619) - br i1 %t620, label %then11039, label %endif11041 -then11039: + br i1 %t620, label %then11067, label %endif11069 +then11067: %t621 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 %t622 = load { ptr, i64, i64 }, ptr %t621 %t623 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 1 @@ -111663,83 +111838,83 @@ then11039: call void @finch.json.Json.push(ptr %a7, %S.json.Json %t627) store %S.json.Json %t627, ptr %a628 call void @finch.drop.S_json_Json(ptr %a628) - br label %endif11041 -endif11041: - br label %each.step11037 -each.step11037: + br label %endif11069 +endif11069: + br label %each.step11065 +each.step11065: %t629 = load i64, ptr %a609 %t630 = add i64 %t629, 1 store i64 %t630, ptr %a609 - br label %each.cond11035 -each.end11038: + br label %each.cond11063 +each.end11066: call void @finch.drop.arr_S_docs_Doc(ptr %a608) %t631 = call { ptr, i64, i64 } @finch.docs.keywords() store { ptr, i64, i64 } %t631, ptr %a632 store i64 0, ptr %a633 - br label %each.cond11042 -each.cond11042: + br label %each.cond11070 +each.cond11070: %t634 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 %t635 = load i64, ptr %t634 %t636 = load i64, ptr %a633 %t637 = icmp slt i64 %t636, %t635 - br i1 %t637, label %each.body11043, label %each.end11045 -each.body11043: + br i1 %t637, label %each.body11071, label %each.end11073 +each.body11071: %t638 = load ptr, ptr %a632 %t639 = getelementptr inbounds { ptr, i64, i64 }, ptr %t638, i64 %t636 %t640 = load { ptr, i64, i64 }, ptr %t639 store { ptr, i64, i64 } %t640, ptr %a641 %t642 = load { ptr, i64, i64 }, ptr %a641 %t643 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t642) - br i1 %t643, label %then11046, label %endif11048 -then11046: + br i1 %t643, label %then11074, label %endif11076 +then11074: %t644 = load { ptr, i64, i64 }, ptr %a641 - %t645 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t644, i64 14, { ptr, i64, i64 } { ptr @.str.7152, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7153, i64 0, i64 0 }) + %t645 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t644, i64 14, { ptr, i64, i64 } { ptr @.str.7167, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7168, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t645) store %S.json.Json %t645, ptr %a646 call void @finch.drop.S_json_Json(ptr %a646) - br label %endif11048 -endif11048: - br label %each.step11044 -each.step11044: + br label %endif11076 +endif11076: + br label %each.step11072 +each.step11072: %t647 = load i64, ptr %a633 %t648 = add i64 %t647, 1 store i64 %t648, ptr %a633 - br label %each.cond11042 -each.end11045: + br label %each.cond11070 +each.end11073: call void @finch.drop.arr_str(ptr %a632) %t649 = call { ptr, i64, i64 } @finch.docs.typeNames() store { ptr, i64, i64 } %t649, ptr %a650 store i64 0, ptr %a651 - br label %each.cond11049 -each.cond11049: + br label %each.cond11077 +each.cond11077: %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %a650, i32 0, i32 1 %t653 = load i64, ptr %t652 %t654 = load i64, ptr %a651 %t655 = icmp slt i64 %t654, %t653 - br i1 %t655, label %each.body11050, label %each.end11052 -each.body11050: + br i1 %t655, label %each.body11078, label %each.end11080 +each.body11078: %t656 = load ptr, ptr %a650 %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %t656, i64 %t654 %t658 = load { ptr, i64, i64 }, ptr %t657 store { ptr, i64, i64 } %t658, ptr %a659 %t660 = load { ptr, i64, i64 }, ptr %a659 %t661 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t660) - br i1 %t661, label %then11053, label %endif11055 -then11053: + br i1 %t661, label %then11081, label %endif11083 +then11081: %t662 = load { ptr, i64, i64 }, ptr %a659 - %t663 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t662, i64 25, { ptr, i64, i64 } { ptr @.str.7154, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7155, i64 0, i64 0 }) + %t663 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t662, i64 25, { ptr, i64, i64 } { ptr @.str.7169, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7170, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t663) store %S.json.Json %t663, ptr %a664 call void @finch.drop.S_json_Json(ptr %a664) - br label %endif11055 -endif11055: - br label %each.step11051 -each.step11051: + br label %endif11083 +endif11083: + br label %each.step11079 +each.step11079: %t665 = load i64, ptr %a651 %t666 = add i64 %t665, 1 store i64 %t666, ptr %a651 - br label %each.cond11049 -each.end11052: + br label %each.cond11077 +each.end11080: call void @finch.drop.arr_str(ptr %a650) %t667 = load %S.json.Json, ptr %a7 %t668 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t667) @@ -111767,33 +111942,33 @@ entry: %t6 = load i64, ptr %t3 %t7 = load ptr, ptr %t2 store i64 0, ptr %a8 - br label %find.cond11056 -find.cond11056: + br label %find.cond11084 +find.cond11084: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t6 - br i1 %t10, label %find.body11057, label %find.end11060 -find.body11057: + br i1 %t10, label %find.body11085, label %find.end11088 +find.body11085: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } %t4, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br i1 %t16, label %find.hit11058, label %find.next11059 -find.hit11058: + br i1 %t16, label %find.hit11086, label %find.next11087 +find.hit11086: store i64 %t9, ptr %a5 - br label %find.end11060 -find.next11059: + br label %find.end11088 +find.next11087: %t17 = add i64 %t9, 1 store i64 %t17, ptr %a8 - br label %find.cond11056 -find.end11060: + br label %find.cond11084 +find.end11088: %t18 = load i64, ptr %a5 %t19 = icmp sge i64 %t18, 0 - br i1 %t19, label %then11061, label %endif11063 -then11061: + br i1 %t19, label %then11089, label %endif11091 +then11089: ret i1 false -endif11063: +endif11091: %t20 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a1 @@ -111819,11 +111994,11 @@ entry: %t2 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t2, ptr %a3 %t4 = call %S.json.Json @finch.json.new_bool(i1 false) - call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7156, i64 12, i64 0 }, %S.json.Json %t4) + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7171, i64 12, i64 0 }, %S.json.Json %t4) store %S.json.Json %t4, ptr %a5 call void @finch.drop.S_json_Json(ptr %a5) %t6 = load %S.json.Json, ptr %a1 - call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7157, i64 5, i64 0 }, %S.json.Json %t6) + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7172, i64 5, i64 0 }, %S.json.Json %t6) %t7 = load %S.json.Json, ptr %a3 ret %S.json.Json %t7 } @@ -111913,17 +112088,17 @@ entry: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp sgt i64 %t13, %t15 - br i1 %t16, label %then11064, label %endif11066 -then11064: + br i1 %t16, label %then11092, label %endif11094 +then11092: %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t18 = load i64, ptr %t17 store i64 %t18, ptr %a12 - br label %endif11066 -endif11066: + br label %endif11094 +endif11094: %t19 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = load i64, ptr %a12 - call void @finch_str_sub(ptr %a21, ptr %a20, i64 0, i64 %t22, ptr @.str.7158, i64 671) + call void @finch_str_sub(ptr %a21, ptr %a20, i64 0, i64 %t22, ptr @.str.7173, i64 671) %t23 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t23, ptr %a24 store i64 0, ptr %a25 @@ -111933,246 +112108,246 @@ endif11066: %t29 = load i64, ptr %t28 %t30 = sub i64 %t29, 1 store i64 %t30, ptr %a31 - br label %while.cond11067 -while.cond11067: + br label %while.cond11095 +while.cond11095: %t32 = load i64, ptr %a31 %t33 = icmp sge i64 %t32, 0 - br i1 %t33, label %while.body11068, label %while.end11069 -while.body11068: + br i1 %t33, label %while.body11096, label %while.end11097 +while.body11096: %t34 = load i64, ptr %a31 %t35 = load { ptr, i64, i64 }, ptr %a24 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 %t34, %t36 - br i1 %t37, label %range11070, label %inrange11071 -range11070: - call void @finch_panic_index(ptr @.str.7159, i64 678, i64 %t34, i64 %t36) + br i1 %t37, label %range11098, label %inrange11099 +range11098: + call void @finch_panic_index(ptr @.str.7174, i64 678, i64 %t34, i64 %t36) unreachable -inrange11071: +inrange11099: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds i8, ptr %t38, i64 %t34 %t40 = load i8, ptr %t39 store i8 %t40, ptr %a41 %t42 = load i8, ptr %a41 %t43 = icmp eq i8 %t42, 41 - br label %logic.from11072 -logic.from11072: - br i1 %t43, label %logic.end11074, label %logic.rhs11073 -logic.rhs11073: + br label %logic.from11100 +logic.from11100: + br i1 %t43, label %logic.end11102, label %logic.rhs11101 +logic.rhs11101: %t44 = load i8, ptr %a41 %t45 = icmp eq i8 %t44, 93 - br label %logic.rend11075 -logic.rend11075: - br label %logic.end11074 -logic.end11074: - %t46 = phi i1 [ true, %logic.from11072 ], [ %t45, %logic.rend11075 ] - br i1 %t46, label %then11076, label %else11077 -then11076: + br label %logic.rend11103 +logic.rend11103: + br label %logic.end11102 +logic.end11102: + %t46 = phi i1 [ true, %logic.from11100 ], [ %t45, %logic.rend11103 ] + br i1 %t46, label %then11104, label %else11105 +then11104: %t47 = load i64, ptr %a25 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a25 - br label %endif11078 -else11077: + br label %endif11106 +else11105: %t49 = load i8, ptr %a41 %t50 = icmp eq i8 %t49, 40 - br label %logic.from11079 -logic.from11079: - br i1 %t50, label %logic.end11081, label %logic.rhs11080 -logic.rhs11080: + br label %logic.from11107 +logic.from11107: + br i1 %t50, label %logic.end11109, label %logic.rhs11108 +logic.rhs11108: %t51 = load i8, ptr %a41 %t52 = icmp eq i8 %t51, 91 - br label %logic.rend11082 -logic.rend11082: - br label %logic.end11081 -logic.end11081: - %t53 = phi i1 [ true, %logic.from11079 ], [ %t52, %logic.rend11082 ] - br i1 %t53, label %then11083, label %else11084 -then11083: + br label %logic.rend11110 +logic.rend11110: + br label %logic.end11109 +logic.end11109: + %t53 = phi i1 [ true, %logic.from11107 ], [ %t52, %logic.rend11110 ] + br i1 %t53, label %then11111, label %else11112 +then11111: %t54 = load i64, ptr %a25 %t55 = icmp eq i64 %t54, 0 - br i1 %t55, label %then11086, label %else11087 -then11086: + br i1 %t55, label %then11114, label %else11115 +then11114: %t56 = load i8, ptr %a41 %t57 = icmp eq i8 %t56, 40 - br i1 %t57, label %then11089, label %endif11091 -then11089: + br i1 %t57, label %then11117, label %endif11119 +then11117: %t58 = load i64, ptr %a31 store i64 %t58, ptr %a27 - br label %while.end11069 -endif11091: - br label %endif11088 -else11087: + br label %while.end11097 +endif11119: + br label %endif11116 +else11115: %t59 = load i64, ptr %a25 %t60 = sub i64 %t59, 1 store i64 %t60, ptr %a25 - br label %endif11088 -endif11088: - br label %endif11085 -else11084: + br label %endif11116 +endif11116: + br label %endif11113 +else11112: %t61 = load i8, ptr %a41 %t62 = icmp eq i8 %t61, 44 - br label %logic.from11092 -logic.from11092: - br i1 %t62, label %logic.rhs11093, label %logic.end11094 -logic.rhs11093: + br label %logic.from11120 +logic.from11120: + br i1 %t62, label %logic.rhs11121, label %logic.end11122 +logic.rhs11121: %t63 = load i64, ptr %a25 %t64 = icmp eq i64 %t63, 0 - br label %logic.rend11095 -logic.rend11095: - br label %logic.end11094 -logic.end11094: - %t65 = phi i1 [ false, %logic.from11092 ], [ %t64, %logic.rend11095 ] - br i1 %t65, label %then11096, label %endif11098 -then11096: + br label %logic.rend11123 +logic.rend11123: + br label %logic.end11122 +logic.end11122: + %t65 = phi i1 [ false, %logic.from11120 ], [ %t64, %logic.rend11123 ] + br i1 %t65, label %then11124, label %endif11126 +then11124: %t66 = load i64, ptr %a26 %t67 = add i64 %t66, 1 store i64 %t67, ptr %a26 - br label %endif11098 -endif11098: - br label %endif11085 -endif11085: - br label %endif11078 -endif11078: + br label %endif11126 +endif11126: + br label %endif11113 +endif11113: + br label %endif11106 +endif11106: %t68 = load i64, ptr %a31 %t69 = sub i64 %t68, 1 store i64 %t69, ptr %a31 - br label %while.cond11067 -while.end11069: + br label %while.cond11095 +while.end11097: %t70 = load i64, ptr %a27 %t71 = icmp slt i64 %t70, 0 - br i1 %t71, label %then11099, label %endif11101 -then11099: + br i1 %t71, label %then11127, label %endif11129 +then11127: %t72 = call %S.json.Json @finch.json.new_null() call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t72 -endif11101: +endif11129: %t73 = load i64, ptr %a27 store i64 %t73, ptr %a74 %t75 = load i64, ptr %a74 store i64 %t75, ptr %a76 - br label %while.cond11102 -while.cond11102: + br label %while.cond11130 +while.cond11130: %t77 = load i64, ptr %a76 %t78 = icmp sgt i64 %t77, 0 - br label %logic.from11105 -logic.from11105: - br i1 %t78, label %logic.rhs11106, label %logic.end11107 -logic.rhs11106: + br label %logic.from11133 +logic.from11133: + br i1 %t78, label %logic.rhs11134, label %logic.end11135 +logic.rhs11134: %t79 = load i64, ptr %a76 %t80 = sub i64 %t79, 1 %t81 = load { ptr, i64, i64 }, ptr %a24 %t82 = extractvalue { ptr, i64, i64 } %t81, 1 %t83 = icmp uge i64 %t80, %t82 - br i1 %t83, label %range11108, label %inrange11109 -range11108: - call void @finch_panic_index(ptr @.str.7160, i64 700, i64 %t80, i64 %t82) + br i1 %t83, label %range11136, label %inrange11137 +range11136: + call void @finch_panic_index(ptr @.str.7175, i64 700, i64 %t80, i64 %t82) unreachable -inrange11109: +inrange11137: %t84 = extractvalue { ptr, i64, i64 } %t81, 0 %t85 = getelementptr inbounds i8, ptr %t84, i64 %t80 %t86 = load i8, ptr %t85 %t87 = call i1 @finch.lsp.isWordChar(i8 %t86) - br label %logic.rend11110 -logic.rend11110: - br label %logic.end11107 -logic.end11107: - %t88 = phi i1 [ false, %logic.from11105 ], [ %t87, %logic.rend11110 ] - br i1 %t88, label %while.body11103, label %while.end11104 -while.body11103: + br label %logic.rend11138 +logic.rend11138: + br label %logic.end11135 +logic.end11135: + %t88 = phi i1 [ false, %logic.from11133 ], [ %t87, %logic.rend11138 ] + br i1 %t88, label %while.body11131, label %while.end11132 +while.body11131: %t89 = load i64, ptr %a76 %t90 = sub i64 %t89, 1 store i64 %t90, ptr %a76 - br label %while.cond11102 -while.end11104: + br label %while.cond11130 +while.end11132: %t91 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t91, ptr %a92 %t94 = load i64, ptr %a76 %t95 = load i64, ptr %a74 - call void @finch_str_sub(ptr %a93, ptr %a92, i64 %t94, i64 %t95, ptr @.str.7161, i64 703) + call void @finch_str_sub(ptr %a93, ptr %a92, i64 %t94, i64 %t95, ptr @.str.7176, i64 703) %t96 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t96, ptr %a97 %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1 %t99 = load i64, ptr %t98 %t100 = icmp eq i64 %t99, 0 - br i1 %t100, label %then11111, label %endif11113 -then11111: + br i1 %t100, label %then11139, label %endif11141 +then11139: %t101 = call %S.json.Json @finch.json.new_null() call void @finch_str_drop(ptr %a97) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t101 -endif11113: - store { ptr, i64, i64 } { ptr @.str.7162, i64 0, i64 0 }, ptr %a102 +endif11141: + store { ptr, i64, i64 } { ptr @.str.7177, i64 0, i64 0 }, ptr %a102 %t103 = load i64, ptr %a76 %t104 = icmp sgt i64 %t103, 0 - br label %logic.from11114 -logic.from11114: - br i1 %t104, label %logic.rhs11115, label %logic.end11116 -logic.rhs11115: + br label %logic.from11142 +logic.from11142: + br i1 %t104, label %logic.rhs11143, label %logic.end11144 +logic.rhs11143: %t105 = load i64, ptr %a76 %t106 = sub i64 %t105, 1 %t107 = load { ptr, i64, i64 }, ptr %a24 %t108 = extractvalue { ptr, i64, i64 } %t107, 1 %t109 = icmp uge i64 %t106, %t108 - br i1 %t109, label %range11117, label %inrange11118 -range11117: - call void @finch_panic_index(ptr @.str.7163, i64 708, i64 %t106, i64 %t108) + br i1 %t109, label %range11145, label %inrange11146 +range11145: + call void @finch_panic_index(ptr @.str.7178, i64 708, i64 %t106, i64 %t108) unreachable -inrange11118: +inrange11146: %t110 = extractvalue { ptr, i64, i64 } %t107, 0 %t111 = getelementptr inbounds i8, ptr %t110, i64 %t106 %t112 = load i8, ptr %t111 %t113 = icmp eq i8 %t112, 46 - br label %logic.rend11119 -logic.rend11119: - br label %logic.end11116 -logic.end11116: - %t114 = phi i1 [ false, %logic.from11114 ], [ %t113, %logic.rend11119 ] - br i1 %t114, label %then11120, label %endif11122 -then11120: + br label %logic.rend11147 +logic.rend11147: + br label %logic.end11144 +logic.end11144: + %t114 = phi i1 [ false, %logic.from11142 ], [ %t113, %logic.rend11147 ] + br i1 %t114, label %then11148, label %endif11150 +then11148: %t115 = load i64, ptr %a76 %t116 = sub i64 %t115, 1 store i64 %t116, ptr %a117 - br label %while.cond11123 -while.cond11123: + br label %while.cond11151 +while.cond11151: %t118 = load i64, ptr %a117 %t119 = icmp sgt i64 %t118, 0 - br label %logic.from11126 -logic.from11126: - br i1 %t119, label %logic.rhs11127, label %logic.end11128 -logic.rhs11127: + br label %logic.from11154 +logic.from11154: + br i1 %t119, label %logic.rhs11155, label %logic.end11156 +logic.rhs11155: %t120 = load i64, ptr %a117 %t121 = sub i64 %t120, 1 %t122 = load { ptr, i64, i64 }, ptr %a24 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 %t121, %t123 - br i1 %t124, label %range11129, label %inrange11130 -range11129: - call void @finch_panic_index(ptr @.str.7164, i64 711, i64 %t121, i64 %t123) + br i1 %t124, label %range11157, label %inrange11158 +range11157: + call void @finch_panic_index(ptr @.str.7179, i64 711, i64 %t121, i64 %t123) unreachable -inrange11130: +inrange11158: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds i8, ptr %t125, i64 %t121 %t127 = load i8, ptr %t126 %t128 = call i1 @finch.lsp.isWordChar(i8 %t127) - br label %logic.rend11131 -logic.rend11131: - br label %logic.end11128 -logic.end11128: - %t129 = phi i1 [ false, %logic.from11126 ], [ %t128, %logic.rend11131 ] - br i1 %t129, label %while.body11124, label %while.end11125 -while.body11124: + br label %logic.rend11159 +logic.rend11159: + br label %logic.end11156 +logic.end11156: + %t129 = phi i1 [ false, %logic.from11154 ], [ %t128, %logic.rend11159 ] + br i1 %t129, label %while.body11152, label %while.end11153 +while.body11152: %t130 = load i64, ptr %a117 %t131 = sub i64 %t130, 1 store i64 %t131, ptr %a117 - br label %while.cond11123 -while.end11125: + br label %while.cond11151 +while.end11153: %t132 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t132, ptr %a133 %t135 = load i64, ptr %a117 %t136 = load i64, ptr %a76 %t137 = sub i64 %t136, 1 - call void @finch_str_sub(ptr %a134, ptr %a133, i64 %t135, i64 %t137, ptr @.str.7165, i64 714) + call void @finch_str_sub(ptr %a134, ptr %a133, i64 %t135, i64 %t137, ptr @.str.7180, i64 714) %t138 = load { ptr, i64, i64 }, ptr %a134 store { ptr, i64, i64 } %t138, ptr %a139 %t140 = load %S.lsp.Analysis, ptr %a1 @@ -112189,38 +112364,38 @@ while.end11125: store { ptr, i64, i64 } %t148, ptr %a150 %t151 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t151, ptr %a152 - store { ptr, i64, i64 } { ptr @.str.7167, i64 4, i64 0 }, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.7182, i64 4, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_starts(ptr %a152, ptr %a154) %t156 = icmp ne i32 %t155, 0 - br label %logic.from11132 -logic.from11132: - br i1 %t156, label %logic.rhs11133, label %logic.end11134 -logic.rhs11133: + br label %logic.from11160 +logic.from11160: + br i1 %t156, label %logic.rhs11161, label %logic.end11162 +logic.rhs11161: %t157 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t157, ptr %a158 - store { ptr, i64, i64 } { ptr @.str.7169, i64 1, i64 0 }, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.7184, i64 1, i64 0 }, ptr %a160 %t161 = call i32 @finch_str_ends(ptr %a158, ptr %a160) %t162 = icmp ne i32 %t161, 0 - br label %logic.rend11135 -logic.rend11135: - br label %logic.end11134 -logic.end11134: - %t163 = phi i1 [ false, %logic.from11132 ], [ %t162, %logic.rend11135 ] - br i1 %t163, label %then11136, label %endif11138 -then11136: + br label %logic.rend11163 +logic.rend11163: + br label %logic.end11162 +logic.end11162: + %t163 = phi i1 [ false, %logic.from11160 ], [ %t162, %logic.rend11163 ] + br i1 %t163, label %then11164, label %endif11166 +then11164: %t164 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t164, ptr %a165 %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %a150, i32 0, i32 1 %t168 = load i64, ptr %t167 %t169 = sub i64 %t168, 1 - call void @finch_str_sub(ptr %a166, ptr %a165, i64 4, i64 %t169, ptr @.str.7170, i64 717) + call void @finch_str_sub(ptr %a166, ptr %a165, i64 4, i64 %t169, ptr @.str.7185, i64 717) %t170 = load { ptr, i64, i64 }, ptr %a166 %t171 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t170, ptr %a150 store { ptr, i64, i64 } %t171, ptr %a172 call void @finch_str_drop(ptr %a172) - br label %endif11138 -endif11138: + br label %endif11166 +endif11166: %t173 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t173, ptr %a174 call void @finch_str_copy(ptr %a175, ptr %a174) @@ -112231,18 +112406,18 @@ endif11138: call void @finch_str_drop(ptr %a178) call void @finch_str_drop(ptr %a150) call void @finch_str_drop(ptr %a139) - br label %endif11122 -endif11122: + br label %endif11150 +endif11150: %t179 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a180 - br label %each.cond11139 -each.cond11139: + br label %each.cond11167 +each.cond11167: %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t182 = load i64, ptr %t181 %t183 = load i64, ptr %a180 %t184 = icmp slt i64 %t183, %t182 - br i1 %t184, label %each.body11140, label %each.end11142 -each.body11140: + br i1 %t184, label %each.body11168, label %each.end11170 +each.body11168: %t185 = load ptr, ptr %t179 %t186 = getelementptr inbounds %S.lsp.FnRec, ptr %t185, i64 %t183 %t187 = load %S.lsp.FnRec, ptr %t186 @@ -112254,10 +112429,10 @@ each.body11140: store { ptr, i64, i64 } %t191, ptr %a193 %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) %t195 = icmp ne i32 %t194, 0 - br label %logic.from11143 -logic.from11143: - br i1 %t195, label %logic.rhs11144, label %logic.end11145 -logic.rhs11144: + br label %logic.from11171 +logic.from11171: + br i1 %t195, label %logic.rhs11172, label %logic.end11173 +logic.rhs11172: %t196 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 2 %t197 = load { ptr, i64, i64 }, ptr %t196 %t198 = load { ptr, i64, i64 }, ptr %a102 @@ -112265,33 +112440,33 @@ logic.rhs11144: store { ptr, i64, i64 } %t198, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp ne i32 %t201, 0 - br label %logic.rend11146 -logic.rend11146: - br label %logic.end11145 -logic.end11145: - %t203 = phi i1 [ false, %logic.from11143 ], [ %t202, %logic.rend11146 ] - br i1 %t203, label %then11147, label %endif11149 -then11147: + br label %logic.rend11174 +logic.rend11174: + br label %logic.end11173 +logic.end11173: + %t203 = phi i1 [ false, %logic.from11171 ], [ %t202, %logic.rend11174 ] + br i1 %t203, label %then11175, label %endif11177 +then11175: %t204 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t204, ptr %a205 %t206 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 7 %t207 = load { ptr, i64, i64 }, ptr %t206 %t208 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t207) - call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7171, i64 5, i64 0 }, %S.json.Json %t208) + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7186, i64 5, i64 0 }, %S.json.Json %t208) store %S.json.Json %t208, ptr %a209 call void @finch.drop.S_json_Json(ptr %a209) %t210 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t210, ptr %a211 %t212 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 8 store i64 0, ptr %a213 - br label %each.cond11150 -each.cond11150: + br label %each.cond11178 +each.cond11178: %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 %t215 = load i64, ptr %t214 %t216 = load i64, ptr %a213 %t217 = icmp slt i64 %t216, %t215 - br i1 %t217, label %each.body11151, label %each.end11153 -each.body11151: + br i1 %t217, label %each.body11179, label %each.end11181 +each.body11179: %t218 = load ptr, ptr %t212 %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t216 %t220 = load { ptr, i64, i64 }, ptr %t219 @@ -112299,29 +112474,29 @@ each.body11151: %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a221, i32 0, i32 1 %t223 = load i64, ptr %t222 %t224 = icmp sgt i64 %t223, 0 - br i1 %t224, label %then11154, label %endif11156 -then11154: + br i1 %t224, label %then11182, label %endif11184 +then11182: %t225 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t225, ptr %a226 %t227 = load { ptr, i64, i64 }, ptr %a221 %t228 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t227) - call void @finch.json.Json.set(ptr %a226, { ptr, i64, i64 } { ptr @.str.7172, i64 5, i64 0 }, %S.json.Json %t228) + call void @finch.json.Json.set(ptr %a226, { ptr, i64, i64 } { ptr @.str.7187, i64 5, i64 0 }, %S.json.Json %t228) store %S.json.Json %t228, ptr %a229 call void @finch.drop.S_json_Json(ptr %a229) %t230 = load %S.json.Json, ptr %a226 call void @finch.json.Json.push(ptr %a211, %S.json.Json %t230) call void @finch.drop.S_json_Json(ptr %a226) - br label %endif11156 -endif11156: - br label %each.step11152 -each.step11152: + br label %endif11184 +endif11184: + br label %each.step11180 +each.step11180: %t231 = load i64, ptr %a213 %t232 = add i64 %t231, 1 store i64 %t232, ptr %a213 - br label %each.cond11150 -each.end11153: + br label %each.cond11178 +each.end11181: %t233 = load %S.json.Json, ptr %a211 - call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7173, i64 10, i64 0 }, %S.json.Json %t233) + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7188, i64 10, i64 0 }, %S.json.Json %t233) %t234 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t234, ptr %a235 %t236 = load %S.json.Json, ptr %a205 @@ -112329,14 +112504,14 @@ each.end11153: %t237 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t237, ptr %a238 %t239 = load %S.json.Json, ptr %a235 - call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7174, i64 10, i64 0 }, %S.json.Json %t239) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7189, i64 10, i64 0 }, %S.json.Json %t239) %t240 = call %S.json.Json @finch.lsp.num(i64 0) - call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7175, i64 15, i64 0 }, %S.json.Json %t240) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7190, i64 15, i64 0 }, %S.json.Json %t240) store %S.json.Json %t240, ptr %a241 call void @finch.drop.S_json_Json(ptr %a241) %t242 = load i64, ptr %a26 %t243 = call %S.json.Json @finch.lsp.num(i64 %t242) - call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7176, i64 15, i64 0 }, %S.json.Json %t243) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7191, i64 15, i64 0 }, %S.json.Json %t243) store %S.json.Json %t243, ptr %a244 call void @finch.drop.S_json_Json(ptr %a244) %t245 = load %S.json.Json, ptr %a238 @@ -112348,14 +112523,14 @@ each.end11153: call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t245 -endif11149: - br label %each.step11141 -each.step11141: +endif11177: + br label %each.step11169 +each.step11169: %t246 = load i64, ptr %a180 %t247 = add i64 %t246, 1 store i64 %t247, ptr %a180 - br label %each.cond11139 -each.end11142: + br label %each.cond11167 +each.end11170: %t248 = call { ptr, i64, i64 } @finch.docs.builtins() %t249 = load { ptr, i64, i64 }, ptr %a97 %t250 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t248, { ptr, i64, i64 } %t249) @@ -112366,20 +112541,20 @@ each.end11142: %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 %t255 = load i64, ptr %t254 %t256 = icmp sgt i64 %t255, 0 - br i1 %t256, label %then11157, label %endif11159 -then11157: + br i1 %t256, label %then11185, label %endif11187 +then11185: %t257 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t257, ptr %a258 %t259 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 1 %t260 = load { ptr, i64, i64 }, ptr %t259 %t261 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t260) - call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7177, i64 5, i64 0 }, %S.json.Json %t261) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7192, i64 5, i64 0 }, %S.json.Json %t261) store %S.json.Json %t261, ptr %a262 call void @finch.drop.S_json_Json(ptr %a262) %t263 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 2 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t264) - call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7178, i64 13, i64 0 }, %S.json.Json %t265) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7193, i64 13, i64 0 }, %S.json.Json %t265) store %S.json.Json %t265, ptr %a266 call void @finch.drop.S_json_Json(ptr %a266) %t267 = call %S.json.Json @finch.json.new_list() @@ -112389,14 +112564,14 @@ then11157: %t270 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t270, ptr %a271 %t272 = load %S.json.Json, ptr %a268 - call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7179, i64 10, i64 0 }, %S.json.Json %t272) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7194, i64 10, i64 0 }, %S.json.Json %t272) %t273 = call %S.json.Json @finch.lsp.num(i64 0) - call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7180, i64 15, i64 0 }, %S.json.Json %t273) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7195, i64 15, i64 0 }, %S.json.Json %t273) store %S.json.Json %t273, ptr %a274 call void @finch.drop.S_json_Json(ptr %a274) %t275 = load i64, ptr %a26 %t276 = call %S.json.Json @finch.lsp.num(i64 %t275) - call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7181, i64 15, i64 0 }, %S.json.Json %t276) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7196, i64 15, i64 0 }, %S.json.Json %t276) store %S.json.Json %t276, ptr %a277 call void @finch.drop.S_json_Json(ptr %a277) %t278 = load %S.json.Json, ptr %a271 @@ -112408,7 +112583,7 @@ then11157: call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t278 -endif11159: +endif11187: %t279 = call %S.json.Json @finch.json.new_null() call void @finch.drop.S_docs_Doc(ptr %a252) call void @finch_str_drop(ptr %a102) @@ -112424,12 +112599,12 @@ entry: %a3 = alloca %S.json.Json, align 16 %a5 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 - %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7182, i64 12, i64 0 }) + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7197, i64 12, i64 0 }) store %S.json.Json %t2, ptr %a3 - %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7183, i64 4, i64 0 }) + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7198, i64 4, i64 0 }) call void @finch.drop.S_json_Json(ptr %a3) store %S.json.Json %t4, ptr %a5 - %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7184, i64 0, i64 0 }) + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7199, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a5) ret { ptr, i64, i64 } %t6 } @@ -112441,12 +112616,12 @@ entry: %a5 = alloca %S.json.Json, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 - %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7185, i64 12, i64 0 }) + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7200, i64 12, i64 0 }) store %S.json.Json %t2, ptr %a3 - %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7186, i64 3, i64 0 }) + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7201, i64 3, i64 0 }) call void @finch.drop.S_json_Json(ptr %a3) store %S.json.Json %t4, ptr %a5 - %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7187, i64 0, i64 0 }) + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7202, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a5) %t7 = call { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %t6) store { ptr, i64, i64 } %t6, ptr %a8 @@ -112560,80 +112735,80 @@ entry: %a322 = alloca %S.json.Json, align 16 %a328 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 - %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7188, i64 6, i64 0 }) + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7203, i64 6, i64 0 }) store %S.json.Json %t2, ptr %a3 - %t4 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a3, { ptr, i64, i64 } { ptr @.str.7189, i64 0, i64 0 }) + %t4 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a3, { ptr, i64, i64 } { ptr @.str.7204, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a3) store { ptr, i64, i64 } %t4, ptr %a5 - %t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7190, i64 6, i64 0 }) + %t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7205, i64 6, i64 0 }) store %S.json.Json %t6, ptr %a7 - %t8 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7191, i64 2, i64 0 }) + %t8 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7206, i64 2, i64 0 }) store %S.json.Json %t8, ptr %a9 %t10 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t10, ptr %a11 - store { ptr, i64, i64 } { ptr @.str.7192, i64 10, i64 0 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.7207, i64 10, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 - br i1 %t14, label %match.arm11161, label %match.next11162 -match.arm11161: + br i1 %t14, label %match.arm11189, label %match.next11190 +match.arm11189: %t15 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t15, ptr %a16 %t17 = call %S.json.Json @finch.lsp.num(i64 1) - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7193, i64 16, i64 0 }, %S.json.Json %t17) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7208, i64 16, i64 0 }, %S.json.Json %t17) store %S.json.Json %t17, ptr %a18 call void @finch.drop.S_json_Json(ptr %a18) %t19 = call %S.json.Json @finch.json.new_bool(i1 true) - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7194, i64 13, i64 0 }, %S.json.Json %t19) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7209, i64 13, i64 0 }, %S.json.Json %t19) store %S.json.Json %t19, ptr %a20 call void @finch.drop.S_json_Json(ptr %a20) %t21 = call %S.json.Json @finch.json.new_bool(i1 true) - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7195, i64 18, i64 0 }, %S.json.Json %t21) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7210, i64 18, i64 0 }, %S.json.Json %t21) store %S.json.Json %t21, ptr %a22 call void @finch.drop.S_json_Json(ptr %a22) %t23 = call %S.json.Json @finch.json.new_bool(i1 true) - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7196, i64 22, i64 0 }, %S.json.Json %t23) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7211, i64 22, i64 0 }, %S.json.Json %t23) store %S.json.Json %t23, ptr %a24 call void @finch.drop.S_json_Json(ptr %a24) %t25 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t25, ptr %a26 %t27 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t27, ptr %a28 - %t29 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7197, i64 1, i64 0 }) + %t29 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7212, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a28, %S.json.Json %t29) store %S.json.Json %t29, ptr %a30 call void @finch.drop.S_json_Json(ptr %a30) %t31 = load %S.json.Json, ptr %a28 - call void @finch.json.Json.set(ptr %a26, { ptr, i64, i64 } { ptr @.str.7198, i64 17, i64 0 }, %S.json.Json %t31) + call void @finch.json.Json.set(ptr %a26, { ptr, i64, i64 } { ptr @.str.7213, i64 17, i64 0 }, %S.json.Json %t31) %t32 = load %S.json.Json, ptr %a26 - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7199, i64 18, i64 0 }, %S.json.Json %t32) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7214, i64 18, i64 0 }, %S.json.Json %t32) %t33 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t33, ptr %a34 %t35 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t35, ptr %a36 - %t37 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7200, i64 1, i64 0 }) + %t37 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7215, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a36, %S.json.Json %t37) store %S.json.Json %t37, ptr %a38 call void @finch.drop.S_json_Json(ptr %a38) - %t39 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7201, i64 1, i64 0 }) + %t39 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7216, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a36, %S.json.Json %t39) store %S.json.Json %t39, ptr %a40 call void @finch.drop.S_json_Json(ptr %a40) %t41 = load %S.json.Json, ptr %a36 - call void @finch.json.Json.set(ptr %a34, { ptr, i64, i64 } { ptr @.str.7202, i64 17, i64 0 }, %S.json.Json %t41) + call void @finch.json.Json.set(ptr %a34, { ptr, i64, i64 } { ptr @.str.7217, i64 17, i64 0 }, %S.json.Json %t41) %t42 = load %S.json.Json, ptr %a34 - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7203, i64 21, i64 0 }, %S.json.Json %t42) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7218, i64 21, i64 0 }, %S.json.Json %t42) %t43 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t43, ptr %a44 %t45 = load %S.json.Json, ptr %a16 - call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7204, i64 12, i64 0 }, %S.json.Json %t45) + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7219, i64 12, i64 0 }, %S.json.Json %t45) %t46 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t46, ptr %a47 - %t48 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7206, i64 5, i64 0 }) - call void @finch.json.Json.set(ptr %a47, { ptr, i64, i64 } { ptr @.str.7205, i64 4, i64 0 }, %S.json.Json %t48) + %t48 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7221, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a47, { ptr, i64, i64 } { ptr @.str.7220, i64 4, i64 0 }, %S.json.Json %t48) store %S.json.Json %t48, ptr %a49 call void @finch.drop.S_json_Json(ptr %a49) %t50 = load %S.json.Json, ptr %a47 - call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7207, i64 10, i64 0 }, %S.json.Json %t50) + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7222, i64 10, i64 0 }, %S.json.Json %t50) %t51 = load %S.json.Json, ptr %a9 %t52 = load %S.json.Json, ptr %a44 call void @finch.lsp.reply(%S.json.Json %t51, %S.json.Json %t52) @@ -112644,14 +112819,14 @@ match.arm11161: call void @finch.drop.S_json_Json(ptr %a28) call void @finch.drop.S_json_Json(ptr %a26) call void @finch.drop.S_json_Json(ptr %a16) - br label %match.end11160 -match.next11162: + br label %match.end11188 +match.next11190: store { ptr, i64, i64 } %t10, ptr %a53 - store { ptr, i64, i64 } { ptr @.str.7208, i64 8, i64 0 }, ptr %a54 + store { ptr, i64, i64 } { ptr @.str.7223, i64 8, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %match.arm11163, label %match.next11164 -match.arm11163: + br i1 %t56, label %match.arm11191, label %match.next11192 +match.arm11191: %t57 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 6 store i1 true, ptr %t57 %t58 = load %S.json.Json, ptr %a9 @@ -112659,25 +112834,25 @@ match.arm11163: call void @finch.lsp.reply(%S.json.Json %t58, %S.json.Json %t59) store %S.json.Json %t59, ptr %a60 call void @finch.drop.S_json_Json(ptr %a60) - br label %match.end11160 -match.next11164: + br label %match.end11188 +match.next11192: store { ptr, i64, i64 } %t10, ptr %a61 - store { ptr, i64, i64 } { ptr @.str.7209, i64 4, i64 0 }, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.7224, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 - br i1 %t64, label %match.arm11165, label %match.next11166 -match.arm11165: + br i1 %t64, label %match.arm11193, label %match.next11194 +match.arm11193: %t65 = trunc i64 0 to i32 %t66 = call i32 @fflush(ptr null) call void @exit(i32 %t65) - br label %match.end11160 -match.next11166: + br label %match.end11188 +match.next11194: store { ptr, i64, i64 } %t10, ptr %a67 - store { ptr, i64, i64 } { ptr @.str.7210, i64 20, i64 0 }, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.7225, i64 20, i64 0 }, ptr %a68 %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) %t70 = icmp ne i32 %t69, 0 - br i1 %t70, label %match.arm11167, label %match.next11168 -match.arm11167: + br i1 %t70, label %match.arm11195, label %match.next11196 +match.arm11195: %t71 = load %S.json.Json, ptr %a7 %t72 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t71) store { ptr, i64, i64 } %t72, ptr %a73 @@ -112693,14 +112868,14 @@ match.arm11167: %t83 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t82, i64 %t80 %t84 = load i32, ptr %a79 %t85 = icmp ne i32 %t84, 0 - br i1 %t85, label %map.new11169, label %map.have11170 -map.new11169: + br i1 %t85, label %map.new11197, label %map.have11198 +map.new11197: %t86 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 1 call void @finch_str_copy(ptr %t86, ptr %a78) %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t87 - br label %map.have11170 -map.have11170: + br label %map.have11198 +map.have11198: %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t75, ptr %t88 @@ -112709,31 +112884,31 @@ map.have11170: %t91 = load { ptr, i64, i64 }, ptr %a73 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t91) call void @finch_str_drop(ptr %a73) - br label %match.end11160 -match.next11168: + br label %match.end11188 +match.next11196: store { ptr, i64, i64 } %t10, ptr %a92 - store { ptr, i64, i64 } { ptr @.str.7211, i64 22, i64 0 }, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.7226, i64 22, i64 0 }, ptr %a93 %t94 = call i32 @finch_str_eq(ptr %a92, ptr %a93) %t95 = icmp ne i32 %t94, 0 - br i1 %t95, label %match.arm11171, label %match.next11172 -match.arm11171: + br i1 %t95, label %match.arm11199, label %match.next11200 +match.arm11199: %t96 = load %S.json.Json, ptr %a7 %t97 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t96) store { ptr, i64, i64 } %t97, ptr %a98 - %t99 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7212, i64 14, i64 0 }) + %t99 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7227, i64 14, i64 0 }) store %S.json.Json %t99, ptr %a100 %t101 = call i64 @finch.json.Json.len(ptr %a100) %t102 = icmp sgt i64 %t101, 0 - br i1 %t102, label %then11173, label %endif11175 -then11173: + br i1 %t102, label %then11201, label %endif11203 +then11201: %t103 = call i64 @finch.json.Json.len(ptr %a100) %t104 = sub i64 %t103, 1 %t105 = call %S.json.Json @finch.json.Json.at(ptr %a100, i64 %t104) store %S.json.Json %t105, ptr %a106 - %t107 = call %S.json.Json @finch.json.Json.get(ptr %a106, { ptr, i64, i64 } { ptr @.str.7213, i64 4, i64 0 }) + %t107 = call %S.json.Json @finch.json.Json.get(ptr %a106, { ptr, i64, i64 } { ptr @.str.7228, i64 4, i64 0 }) call void @finch.drop.S_json_Json(ptr %a106) store %S.json.Json %t107, ptr %a108 - %t109 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a108, { ptr, i64, i64 } { ptr @.str.7214, i64 0, i64 0 }) + %t109 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a108, { ptr, i64, i64 } { ptr @.str.7229, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a108) %t110 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t111 = load { ptr, i64, i64 }, ptr %a98 @@ -112745,14 +112920,14 @@ then11173: %t117 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t116, i64 %t114 %t118 = load i32, ptr %a113 %t119 = icmp ne i32 %t118, 0 - br i1 %t119, label %map.new11176, label %map.have11177 -map.new11176: + br i1 %t119, label %map.new11204, label %map.have11205 +map.new11204: %t120 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 1 call void @finch_str_copy(ptr %t120, ptr %a112) %t121 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t121 - br label %map.have11177 -map.have11177: + br label %map.have11205 +map.have11205: %t122 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 %t123 = load { ptr, i64, i64 }, ptr %t122 store { ptr, i64, i64 } %t109, ptr %t122 @@ -112760,18 +112935,18 @@ map.have11177: call void @finch_str_drop(ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a98 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t125) - br label %endif11175 -endif11175: + br label %endif11203 +endif11203: call void @finch.drop.S_json_Json(ptr %a100) call void @finch_str_drop(ptr %a98) - br label %match.end11160 -match.next11172: + br label %match.end11188 +match.next11200: store { ptr, i64, i64 } %t10, ptr %a126 - store { ptr, i64, i64 } { ptr @.str.7215, i64 20, i64 0 }, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.7230, i64 20, i64 0 }, ptr %a127 %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) %t129 = icmp ne i32 %t128, 0 - br i1 %t129, label %match.arm11178, label %match.next11179 -match.arm11178: + br i1 %t129, label %match.arm11206, label %match.next11207 +match.arm11206: %t130 = load %S.json.Json, ptr %a7 %t131 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t130) store { ptr, i64, i64 } %t131, ptr %a132 @@ -112780,21 +112955,21 @@ match.arm11178: store { ptr, i64, i64 } %t134, ptr %a135 %t136 = call i64 @finch_map_find(ptr %t133, ptr %a135, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t137 = icmp sge i64 %t136, 0 - br i1 %t137, label %then11180, label %endif11182 -then11180: + br i1 %t137, label %then11208, label %endif11210 +then11208: %t138 = load { ptr, i64, i64 }, ptr %a132 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t138) - br label %endif11182 -endif11182: + br label %endif11210 +endif11210: call void @finch_str_drop(ptr %a132) - br label %match.end11160 -match.next11179: + br label %match.end11188 +match.next11207: store { ptr, i64, i64 } %t10, ptr %a139 - store { ptr, i64, i64 } { ptr @.str.7216, i64 21, i64 0 }, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.7231, i64 21, i64 0 }, ptr %a140 %t141 = call i32 @finch_str_eq(ptr %a139, ptr %a140) %t142 = icmp ne i32 %t141, 0 - br i1 %t142, label %match.arm11183, label %match.next11184 -match.arm11183: + br i1 %t142, label %match.arm11211, label %match.next11212 +match.arm11211: %t143 = load %S.json.Json, ptr %a7 %t144 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t143) store { ptr, i64, i64 } %t144, ptr %a145 @@ -112803,8 +112978,8 @@ match.arm11183: store { ptr, i64, i64 } %t147, ptr %a148 %t149 = call i64 @finch_map_find(ptr %t146, ptr %a148, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t150 = icmp sge i64 %t149, 0 - br i1 %t150, label %remove.hit11185, label %remove.end11186 -remove.hit11185: + br i1 %t150, label %remove.hit11213, label %remove.end11214 +remove.hit11213: %t151 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t146, i32 0, i32 0 %t152 = load ptr, ptr %t151 %t153 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t152, i64 %t149 @@ -112813,15 +112988,15 @@ remove.hit11185: %t155 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 2 call void @finch_str_drop(ptr %t155) call void @finch_map_remove_at(ptr %t146, i64 %t149, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64)) - br label %remove.end11186 -remove.end11186: + br label %remove.end11214 +remove.end11214: %t156 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t157 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t157, ptr %a158 %t159 = call i64 @finch_map_find(ptr %t156, ptr %a158, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t160 = icmp sge i64 %t159, 0 - br i1 %t160, label %remove.hit11187, label %remove.end11188 -remove.hit11187: + br i1 %t160, label %remove.hit11215, label %remove.end11216 +remove.hit11215: %t161 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t156, i32 0, i32 0 %t162 = load ptr, ptr %t161 %t163 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t162, i64 %t159 @@ -112830,15 +113005,15 @@ remove.hit11187: %t165 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 2 call void @finch.drop.S_lsp_Analysis(ptr %t165) call void @finch_map_remove_at(ptr %t156, i64 %t159, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) - br label %remove.end11188 -remove.end11188: + br label %remove.end11216 +remove.end11216: %t166 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t167 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t167, ptr %a168 %t169 = call i64 @finch_map_find(ptr %t166, ptr %a168, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t170 = icmp sge i64 %t169, 0 - br i1 %t170, label %remove.hit11189, label %remove.end11190 -remove.hit11189: + br i1 %t170, label %remove.hit11217, label %remove.end11218 +remove.hit11217: %t171 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t166, i32 0, i32 0 %t172 = load ptr, ptr %t171 %t173 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t172, i64 %t169 @@ -112847,8 +113022,8 @@ remove.hit11189: %t175 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 2 call void @finch.drop.S_lsp_Analysis(ptr %t175) call void @finch_map_remove_at(ptr %t166, i64 %t169, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) - br label %remove.end11190 -remove.end11190: + br label %remove.end11218 +remove.end11218: %t176 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t176, ptr %a177 %t178 = load { ptr, i64, i64 }, ptr %a145 @@ -112856,64 +113031,64 @@ remove.end11190: %t180 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t179) store { ptr, i64, i64 } %t179, ptr %a181 call void @finch_str_drop(ptr %a181) - call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7217, i64 3, i64 0 }, %S.json.Json %t180) + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7232, i64 3, i64 0 }, %S.json.Json %t180) store %S.json.Json %t180, ptr %a182 call void @finch.drop.S_json_Json(ptr %a182) %t183 = call %S.json.Json @finch.json.new_list() - call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7218, i64 11, i64 0 }, %S.json.Json %t183) + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7233, i64 11, i64 0 }, %S.json.Json %t183) store %S.json.Json %t183, ptr %a184 call void @finch.drop.S_json_Json(ptr %a184) %t185 = load %S.json.Json, ptr %a177 - call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7219, i64 31, i64 0 }, %S.json.Json %t185) + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7234, i64 31, i64 0 }, %S.json.Json %t185) call void @finch.drop.S_json_Json(ptr %a177) call void @finch_str_drop(ptr %a145) - br label %match.end11160 -match.next11184: + br label %match.end11188 +match.next11212: store { ptr, i64, i64 } %t10, ptr %a186 - store { ptr, i64, i64 } { ptr @.str.7220, i64 18, i64 0 }, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.7235, i64 18, i64 0 }, ptr %a187 %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) %t189 = icmp ne i32 %t188, 0 - br i1 %t189, label %match.arm11191, label %match.or11193 -match.or11193: + br i1 %t189, label %match.arm11219, label %match.or11221 +match.or11221: store { ptr, i64, i64 } %t10, ptr %a190 - store { ptr, i64, i64 } { ptr @.str.7221, i64 23, i64 0 }, ptr %a191 + store { ptr, i64, i64 } { ptr @.str.7236, i64 23, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 - br i1 %t193, label %match.arm11191, label %match.or11194 -match.or11194: + br i1 %t193, label %match.arm11219, label %match.or11222 +match.or11222: store { ptr, i64, i64 } %t10, ptr %a194 - store { ptr, i64, i64 } { ptr @.str.7222, i64 23, i64 0 }, ptr %a195 + store { ptr, i64, i64 } { ptr @.str.7237, i64 23, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 - br i1 %t197, label %match.arm11191, label %match.or11195 -match.or11195: + br i1 %t197, label %match.arm11219, label %match.or11223 +match.or11223: store { ptr, i64, i64 } %t10, ptr %a198 - store { ptr, i64, i64 } { ptr @.str.7223, i64 27, i64 0 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.7238, i64 27, i64 0 }, ptr %a199 %t200 = call i32 @finch_str_eq(ptr %a198, ptr %a199) %t201 = icmp ne i32 %t200, 0 - br i1 %t201, label %match.arm11191, label %match.or11196 -match.or11196: + br i1 %t201, label %match.arm11219, label %match.or11224 +match.or11224: store { ptr, i64, i64 } %t10, ptr %a202 - store { ptr, i64, i64 } { ptr @.str.7224, i64 26, i64 0 }, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.7239, i64 26, i64 0 }, ptr %a203 %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) %t205 = icmp ne i32 %t204, 0 - br i1 %t205, label %match.arm11191, label %match.next11192 -match.arm11191: + br i1 %t205, label %match.arm11219, label %match.next11220 +match.arm11219: %t206 = load %S.json.Json, ptr %a7 %t207 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t206) store { ptr, i64, i64 } %t207, ptr %a208 - %t209 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7225, i64 8, i64 0 }) + %t209 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7240, i64 8, i64 0 }) store %S.json.Json %t209, ptr %a210 - %t211 = call %S.json.Json @finch.json.Json.get(ptr %a210, { ptr, i64, i64 } { ptr @.str.7226, i64 4, i64 0 }) + %t211 = call %S.json.Json @finch.json.Json.get(ptr %a210, { ptr, i64, i64 } { ptr @.str.7241, i64 4, i64 0 }) call void @finch.drop.S_json_Json(ptr %a210) store %S.json.Json %t211, ptr %a212 %t213 = call i64 @finch.json.Json.int_or(ptr %a212, i64 0) call void @finch.drop.S_json_Json(ptr %a212) %t214 = add i64 %t213, 1 store i64 %t214, ptr %a215 - %t216 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7227, i64 8, i64 0 }) + %t216 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7242, i64 8, i64 0 }) store %S.json.Json %t216, ptr %a217 - %t218 = call %S.json.Json @finch.json.Json.get(ptr %a217, { ptr, i64, i64 } { ptr @.str.7228, i64 9, i64 0 }) + %t218 = call %S.json.Json @finch.json.Json.get(ptr %a217, { ptr, i64, i64 } { ptr @.str.7243, i64 9, i64 0 }) call void @finch.drop.S_json_Json(ptr %a217) store %S.json.Json %t218, ptr %a219 %t220 = call i64 @finch.json.Json.int_or(ptr %a219, i64 0) @@ -112926,8 +113101,8 @@ match.arm11191: %t226 = call i64 @finch_map_find(ptr %t223, ptr %a225, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t227 = icmp sge i64 %t226, 0 %t228 = xor i1 %t227, true - br i1 %t228, label %then11197, label %endif11199 -then11197: + br i1 %t228, label %then11225, label %endif11227 +then11225: %t229 = load %S.json.Json, ptr %a9 %t230 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t229, %S.json.Json %t230) @@ -112938,20 +113113,20 @@ then11197: call void @finch.drop.S_json_Json(ptr %a7) call void @finch_str_drop(ptr %a5) ret void -endif11199: +endif11227: %t232 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t233 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t233, ptr %a234 %t235 = call i64 @finch_map_find(ptr %t232, ptr %a234, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t236 = icmp slt i64 %t235, 0 - br i1 %t236, label %map.missing11200, label %map.found11201 -map.missing11200: + br i1 %t236, label %map.missing11228, label %map.found11229 +map.missing11228: store { ptr, i64, i64 } zeroinitializer, ptr %a237 store { ptr, i64, i64 } %t233, ptr %a238 call void @finch_buf_str(ptr %a237, ptr %a238, i32 1) - call void @finch_map_missing(ptr @.str.7229, i64 842, ptr %a237) + call void @finch_map_missing(ptr @.str.7244, i64 842, ptr %a237) unreachable -map.found11201: +map.found11229: %t239 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t232, i32 0, i32 0 %t240 = load ptr, ptr %t239 %t241 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t240, i64 %t235 @@ -112961,27 +113136,27 @@ map.found11201: call void @finch.copy.S_lsp_Analysis(ptr %a245, ptr %a244) %t246 = load %S.lsp.Analysis, ptr %a245 store %S.lsp.Analysis %t246, ptr %a247 - store { ptr, i64, i64 } { ptr @.str.7230, i64 0, i64 0 }, ptr %a248 + store { ptr, i64, i64 } { ptr @.str.7245, i64 0, i64 0 }, ptr %a248 %t249 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t250 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t250, ptr %a251 %t252 = call i64 @finch_map_find(ptr %t249, ptr %a251, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t253 = icmp sge i64 %t252, 0 - br i1 %t253, label %then11202, label %endif11204 -then11202: + br i1 %t253, label %then11230, label %endif11232 +then11230: %t254 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t255 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t255, ptr %a256 %t257 = call i64 @finch_map_find(ptr %t254, ptr %a256, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t258 = icmp slt i64 %t257, 0 - br i1 %t258, label %map.missing11205, label %map.found11206 -map.missing11205: + br i1 %t258, label %map.missing11233, label %map.found11234 +map.missing11233: store { ptr, i64, i64 } zeroinitializer, ptr %a259 store { ptr, i64, i64 } %t255, ptr %a260 call void @finch_buf_str(ptr %a259, ptr %a260, i32 1) - call void @finch_map_missing(ptr @.str.7231, i64 845, ptr %a259) + call void @finch_map_missing(ptr @.str.7246, i64 845, ptr %a259) unreachable -map.found11206: +map.found11234: %t261 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t254, i32 0, i32 0 %t262 = load ptr, ptr %t261 %t263 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t262, i64 %t257 @@ -112994,15 +113169,15 @@ map.found11206: store { ptr, i64, i64 } %t268, ptr %a248 store { ptr, i64, i64 } %t269, ptr %a270 call void @finch_str_drop(ptr %a270) - br label %endif11204 -endif11204: + br label %endif11232 +endif11232: %t271 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t271, ptr %a272 - store { ptr, i64, i64 } { ptr @.str.7232, i64 18, i64 0 }, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.7247, i64 18, i64 0 }, ptr %a273 %t274 = call i32 @finch_str_eq(ptr %a272, ptr %a273) %t275 = icmp ne i32 %t274, 0 - br i1 %t275, label %match.arm11208, label %match.next11209 -match.arm11208: + br i1 %t275, label %match.arm11236, label %match.next11237 +match.arm11236: %t276 = load %S.json.Json, ptr %a9 %t277 = load %S.lsp.Analysis, ptr %a247 %t278 = load { ptr, i64, i64 }, ptr %a208 @@ -113012,14 +113187,14 @@ match.arm11208: call void @finch.lsp.reply(%S.json.Json %t276, %S.json.Json %t281) store %S.json.Json %t281, ptr %a282 call void @finch.drop.S_json_Json(ptr %a282) - br label %match.end11207 -match.next11209: + br label %match.end11235 +match.next11237: store { ptr, i64, i64 } %t271, ptr %a283 - store { ptr, i64, i64 } { ptr @.str.7233, i64 23, i64 0 }, ptr %a284 + store { ptr, i64, i64 } { ptr @.str.7248, i64 23, i64 0 }, ptr %a284 %t285 = call i32 @finch_str_eq(ptr %a283, ptr %a284) %t286 = icmp ne i32 %t285, 0 - br i1 %t286, label %match.arm11210, label %match.next11211 -match.arm11210: + br i1 %t286, label %match.arm11238, label %match.next11239 +match.arm11238: %t287 = load %S.json.Json, ptr %a9 %t288 = load %S.lsp.Analysis, ptr %a247 %t289 = load { ptr, i64, i64 }, ptr %a208 @@ -113029,14 +113204,14 @@ match.arm11210: call void @finch.lsp.reply(%S.json.Json %t287, %S.json.Json %t292) store %S.json.Json %t292, ptr %a293 call void @finch.drop.S_json_Json(ptr %a293) - br label %match.end11207 -match.next11211: + br label %match.end11235 +match.next11239: store { ptr, i64, i64 } %t271, ptr %a294 - store { ptr, i64, i64 } { ptr @.str.7234, i64 23, i64 0 }, ptr %a295 + store { ptr, i64, i64 } { ptr @.str.7249, i64 23, i64 0 }, ptr %a295 %t296 = call i32 @finch_str_eq(ptr %a294, ptr %a295) %t297 = icmp ne i32 %t296, 0 - br i1 %t297, label %match.arm11212, label %match.next11213 -match.arm11212: + br i1 %t297, label %match.arm11240, label %match.next11241 +match.arm11240: %t298 = load %S.json.Json, ptr %a9 %t299 = load %S.lsp.Analysis, ptr %a247 %t300 = load { ptr, i64, i64 }, ptr %a248 @@ -113047,14 +113222,14 @@ match.arm11212: call void @finch.lsp.reply(%S.json.Json %t298, %S.json.Json %t304) store %S.json.Json %t304, ptr %a305 call void @finch.drop.S_json_Json(ptr %a305) - br label %match.end11207 -match.next11213: + br label %match.end11235 +match.next11241: store { ptr, i64, i64 } %t271, ptr %a306 - store { ptr, i64, i64 } { ptr @.str.7235, i64 27, i64 0 }, ptr %a307 + store { ptr, i64, i64 } { ptr @.str.7250, i64 27, i64 0 }, ptr %a307 %t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307) %t309 = icmp ne i32 %t308, 0 - br i1 %t309, label %match.arm11214, label %match.next11215 -match.arm11214: + br i1 %t309, label %match.arm11242, label %match.next11243 +match.arm11242: %t310 = load %S.json.Json, ptr %a9 %t311 = load %S.lsp.Analysis, ptr %a247 %t312 = load { ptr, i64, i64 }, ptr %a208 @@ -113062,10 +113237,10 @@ match.arm11214: call void @finch.lsp.reply(%S.json.Json %t310, %S.json.Json %t313) store %S.json.Json %t313, ptr %a314 call void @finch.drop.S_json_Json(ptr %a314) - br label %match.end11207 -match.next11215: - br label %match.arm11216 -match.arm11216: + br label %match.end11235 +match.next11243: + br label %match.arm11244 +match.arm11244: %t315 = load %S.json.Json, ptr %a9 %t316 = load %S.lsp.Analysis, ptr %a247 %t317 = load { ptr, i64, i64 }, ptr %a248 @@ -113076,29 +113251,29 @@ match.arm11216: call void @finch.lsp.reply(%S.json.Json %t315, %S.json.Json %t321) store %S.json.Json %t321, ptr %a322 call void @finch.drop.S_json_Json(ptr %a322) - br label %match.end11207 -match.end11207: + br label %match.end11235 +match.end11235: call void @finch_str_drop(ptr %a248) call void @finch.drop.S_lsp_Analysis(ptr %a247) call void @finch_str_drop(ptr %a208) - br label %match.end11160 -match.next11192: - br label %match.arm11218 -match.arm11218: + br label %match.end11188 +match.next11220: + br label %match.arm11246 +match.arm11246: %t323 = getelementptr inbounds %S.json.Json, ptr %a9, i32 0, i32 0 %t324 = load i32, ptr %t323 %t325 = icmp ne i32 %t324, 0 - br i1 %t325, label %then11220, label %endif11222 -then11220: + br i1 %t325, label %then11248, label %endif11250 +then11248: %t326 = load %S.json.Json, ptr %a9 %t327 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t326, %S.json.Json %t327) store %S.json.Json %t327, ptr %a328 call void @finch.drop.S_json_Json(ptr %a328) - br label %endif11222 -endif11222: - br label %match.end11160 -match.end11160: + br label %endif11250 +endif11250: + br label %match.end11188 +match.end11188: call void @finch.drop.S_json_Json(ptr %a9) call void @finch.drop.S_json_Json(ptr %a7) call void @finch_str_drop(ptr %a5) @@ -113111,31 +113286,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond11228 -n.cond11228: + br label %n.cond11256 +n.cond11256: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body11229, label %n.end11230 -n.body11229: + br i1 %t5, label %n.body11257, label %n.end11258 +n.body11257: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live11231, label %entry.next11232 -entry.live11231: + br i1 %t11, label %entry.live11259, label %entry.next11260 +entry.live11259: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_lsp_Analysis(ptr %t13) - br label %entry.next11232 -entry.next11232: + br label %entry.next11260 +entry.next11260: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond11228 -n.end11230: + br label %n.cond11256 +n.end11258: call void @finch_map_free(ptr %a) ret void } @@ -113185,7 +113360,7 @@ entry: %t6 = insertvalue %S.lsp.Server zeroinitializer, { ptr, i64, i64 } %t5, 0 %t7 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t7, ptr %a9 - store { ptr, i64, i64 } { ptr @.str.7236, i64 11, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.7251, i64 11, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) @@ -113203,27 +113378,27 @@ entry: %t21 = load { ptr, i64, i64 }, ptr %a16 %t22 = insertvalue %S.lsp.Server %t6, { ptr, i64, i64 } %t21, 1 store %S.lsp.Server %t22, ptr %a23 - br label %while.cond11223 -while.cond11223: - br label %while.body11224 -while.body11224: + br label %while.cond11251 +while.cond11251: + br label %while.body11252 +while.body11252: %t24 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() %t25 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 0 %t26 = xor i1 %t25, true %t27 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 2 %t28 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 1 - br i1 %t26, label %or.failed11226, label %or.ok11227 -or.failed11226: + br i1 %t26, label %or.failed11254, label %or.ok11255 +or.failed11254: store { ptr, i64, i64 } %t27, ptr %a29 call void @finch_str_drop(ptr %a29) - br label %while.end11225 -or.ok11227: + br label %while.end11253 +or.ok11255: store %S.json.Json %t28, ptr %a30 %t31 = load %S.json.Json, ptr %a30 call void @finch.lsp.Server.answer(ptr %a23, %S.json.Json %t31) call void @finch.drop.S_json_Json(ptr %a30) - br label %while.cond11223 -while.end11225: + br label %while.cond11251 +while.end11253: %t32 = getelementptr inbounds %S.lsp.Server, ptr %a23, i32 0, i32 1 %t33 = load { ptr, i64, i64 }, ptr %t32 call void @finch.host.removeTree({ ptr, i64, i64 } %t33) @@ -113302,35 +113477,35 @@ entry: %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t2 = load i32, ptr %t1 %t3 = icmp eq i32 %t2, 4 - br i1 %t3, label %match.arm11234, label %match.or11236 -match.or11236: + br i1 %t3, label %match.arm11262, label %match.or11264 +match.or11264: %t4 = icmp eq i32 %t2, 5 - br i1 %t4, label %match.arm11234, label %match.next11235 -match.arm11234: + br i1 %t4, label %match.arm11262, label %match.next11263 +match.arm11262: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 - br label %match.from11237 -match.from11237: - br label %match.end11233 -match.next11235: + br label %match.from11265 +match.from11265: + br label %match.end11261 +match.next11263: %t8 = icmp eq i32 %t2, 3 - br i1 %t8, label %match.arm11238, label %match.next11239 -match.arm11238: + br i1 %t8, label %match.arm11266, label %match.next11267 +match.arm11266: %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 - br label %match.from11240 -match.from11240: - br label %match.end11233 -match.next11239: - br label %match.arm11241 -match.arm11241: - br label %match.from11243 -match.from11243: - br label %match.end11233 -match.end11233: - %t12 = phi i64 [ %t7, %match.from11237 ], [ %t11, %match.from11240 ], [ 0, %match.from11243 ] + br label %match.from11268 +match.from11268: + br label %match.end11261 +match.next11267: + br label %match.arm11269 +match.arm11269: + br label %match.from11271 +match.from11271: + br label %match.end11261 +match.end11261: + %t12 = phi i64 [ %t7, %match.from11265 ], [ %t11, %match.from11268 ], [ 0, %match.from11271 ] ret i64 %t12 } @@ -113345,10 +113520,10 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 5 - br label %logic.from11244 -logic.from11244: - br i1 %t4, label %logic.rhs11245, label %logic.end11246 -logic.rhs11245: + br label %logic.from11272 +logic.from11272: + br i1 %t4, label %logic.rhs11273, label %logic.end11274 +logic.rhs11273: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a1 @@ -113356,34 +113531,34 @@ logic.rhs11245: %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 - br label %find.cond11247 -find.cond11247: + br label %find.cond11275 +find.cond11275: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 - br i1 %t13, label %find.body11248, label %find.end11251 -find.body11248: + br i1 %t13, label %find.body11276, label %find.end11279 +find.body11276: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %find.hit11249, label %find.next11250 -find.hit11249: + br i1 %t19, label %find.hit11277, label %find.next11278 +find.hit11277: store i64 %t12, ptr %a8 - br label %find.end11251 -find.next11250: + br label %find.end11279 +find.next11278: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 - br label %find.cond11247 -find.end11251: + br label %find.cond11275 +find.end11279: %t21 = load i64, ptr %a8 %t22 = icmp sge i64 %t21, 0 - br label %logic.rend11252 -logic.rend11252: - br label %logic.end11246 -logic.end11246: - %t23 = phi i1 [ false, %logic.from11244 ], [ %t22, %logic.rend11252 ] + br label %logic.rend11280 +logic.rend11280: + br label %logic.end11274 +logic.end11274: + %t23 = phi i1 [ false, %logic.from11272 ], [ %t22, %logic.rend11280 ] ret i1 %t23 } @@ -113396,20 +113571,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond11266 -n.cond11266: + br label %n.cond11294 +n.cond11294: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body11267, label %n.end11268 -n.body11267: + br i1 %t7, label %n.body11295, label %n.end11296 +n.body11295: %t8 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.json.Json, ptr %t2, i64 %t6 call void @finch.copy.S_json_Json(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond11266 -n.end11268: + br label %n.cond11294 +n.end11296: ret void } @@ -113444,11 +113619,11 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp ne i32 %t3, 5 - br i1 %t4, label %then11253, label %endif11255 -then11253: + br i1 %t4, label %then11281, label %endif11283 +then11281: %t5 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t5 -endif11255: +endif11283: %t6 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %a1 @@ -113456,46 +113631,46 @@ endif11255: %t10 = load i64, ptr %t7 %t11 = load ptr, ptr %t6 store i64 0, ptr %a12 - br label %find.cond11256 -find.cond11256: + br label %find.cond11284 +find.cond11284: %t13 = load i64, ptr %a12 %t14 = icmp slt i64 %t13, %t10 - br i1 %t14, label %find.body11257, label %find.end11260 -find.body11257: + br i1 %t14, label %find.body11285, label %find.end11288 +find.body11285: %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i64 %t13 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } %t8, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br i1 %t20, label %find.hit11258, label %find.next11259 -find.hit11258: + br i1 %t20, label %find.hit11286, label %find.next11287 +find.hit11286: store i64 %t13, ptr %a9 - br label %find.end11260 -find.next11259: + br label %find.end11288 +find.next11287: %t21 = add i64 %t13, 1 store i64 %t21, ptr %a12 - br label %find.cond11256 -find.end11260: + br label %find.cond11284 +find.end11288: %t22 = load i64, ptr %a9 store i64 %t22, ptr %a23 %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, 0 - br i1 %t25, label %then11261, label %endif11263 -then11261: + br i1 %t25, label %then11289, label %endif11291 +then11289: %t26 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t26 -endif11263: +endif11291: %t27 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t28 = load i64, ptr %a23 %t29 = load { ptr, i64, i64 }, ptr %t27 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 - br i1 %t31, label %range11264, label %inrange11265 -range11264: - call void @finch_panic_index(ptr @.str.7237, i64 84, i64 %t28, i64 %t30) + br i1 %t31, label %range11292, label %inrange11293 +range11292: + call void @finch_panic_index(ptr @.str.7252, i64 84, i64 %t28, i64 %t30) unreachable -inrange11265: +inrange11293: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.json.Json, ptr %t32, i64 %t28 %t34 = load %S.json.Json, ptr %t33 @@ -113514,46 +113689,46 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp ne i32 %t3, 4 - br label %logic.from11269 -logic.from11269: - br i1 %t4, label %logic.end11271, label %logic.rhs11270 -logic.rhs11270: + br label %logic.from11297 +logic.from11297: + br i1 %t4, label %logic.end11299, label %logic.rhs11298 +logic.rhs11298: %t5 = load i64, ptr %a1 %t6 = icmp slt i64 %t5, 0 - br label %logic.rend11272 -logic.rend11272: - br label %logic.end11271 -logic.end11271: - %t7 = phi i1 [ true, %logic.from11269 ], [ %t6, %logic.rend11272 ] - br label %logic.from11273 -logic.from11273: - br i1 %t7, label %logic.end11275, label %logic.rhs11274 -logic.rhs11274: + br label %logic.rend11300 +logic.rend11300: + br label %logic.end11299 +logic.end11299: + %t7 = phi i1 [ true, %logic.from11297 ], [ %t6, %logic.rend11300 ] + br label %logic.from11301 +logic.from11301: + br i1 %t7, label %logic.end11303, label %logic.rhs11302 +logic.rhs11302: %t8 = load i64, ptr %a1 %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = icmp sge i64 %t8, %t11 - br label %logic.rend11276 -logic.rend11276: - br label %logic.end11275 -logic.end11275: - %t13 = phi i1 [ true, %logic.from11273 ], [ %t12, %logic.rend11276 ] - br i1 %t13, label %then11277, label %endif11279 -then11277: + br label %logic.rend11304 +logic.rend11304: + br label %logic.end11303 +logic.end11303: + %t13 = phi i1 [ true, %logic.from11301 ], [ %t12, %logic.rend11304 ] + br i1 %t13, label %then11305, label %endif11307 +then11305: %t14 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t14 -endif11279: +endif11307: %t15 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t16 = load i64, ptr %a1 %t17 = load { ptr, i64, i64 }, ptr %t15 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 - br i1 %t19, label %range11280, label %inrange11281 -range11280: - call void @finch_panic_index(ptr @.str.7238, i64 92, i64 %t16, i64 %t18) + br i1 %t19, label %range11308, label %inrange11309 +range11308: + call void @finch_panic_index(ptr @.str.7253, i64 92, i64 %t16, i64 %t18) unreachable -inrange11281: +inrange11309: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.json.Json, ptr %t20, i64 %t16 %t22 = load %S.json.Json, ptr %t21 @@ -113574,15 +113749,15 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 3 - br i1 %t4, label %then11282, label %endif11284 -then11282: + br i1 %t4, label %then11310, label %endif11312 +then11310: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 ret { ptr, i64, i64 } %t9 -endif11284: +endif11312: %t10 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t10, ptr %a11 call void @finch_str_copy(ptr %a12, ptr %a11) @@ -113597,12 +113772,12 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 2 - br i1 %t4, label %then11285, label %endif11287 -then11285: + br i1 %t4, label %then11313, label %endif11315 +then11313: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 %t6 = load double, ptr %t5 ret double %t6 -endif11287: +endif11315: %t7 = load double, ptr %a1 ret double %t7 } @@ -113614,13 +113789,13 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 2 - br i1 %t4, label %then11288, label %endif11290 -then11288: + br i1 %t4, label %then11316, label %endif11318 +then11316: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 %t6 = load double, ptr %t5 %t7 = fptosi double %t6 to i64 ret i64 %t7 -endif11290: +endif11318: %t8 = load i64, ptr %a1 ret i64 %t8 } @@ -113632,12 +113807,12 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 1 - br i1 %t4, label %then11291, label %endif11293 -then11291: + br i1 %t4, label %then11319, label %endif11321 +then11319: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 1 %t6 = load i1, ptr %t5 ret i1 %t6 -endif11293: +endif11321: %t7 = load i1, ptr %a1 ret i1 %t7 } @@ -113701,44 +113876,44 @@ entry: %t7 = load i64, ptr %t4 %t8 = load ptr, ptr %t3 store i64 0, ptr %a9 - br label %find.cond11294 -find.cond11294: + br label %find.cond11322 +find.cond11322: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t7 - br i1 %t11, label %find.body11295, label %find.end11298 -find.body11295: + br i1 %t11, label %find.body11323, label %find.end11326 +find.body11323: %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t10 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } %t5, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br i1 %t17, label %find.hit11296, label %find.next11297 -find.hit11296: + br i1 %t17, label %find.hit11324, label %find.next11325 +find.hit11324: store i64 %t10, ptr %a6 - br label %find.end11298 -find.next11297: + br label %find.end11326 +find.next11325: %t18 = add i64 %t10, 1 store i64 %t18, ptr %a9 - br label %find.cond11294 -find.end11298: + br label %find.cond11322 +find.end11326: %t19 = load i64, ptr %a6 store i64 %t19, ptr %a20 %t21 = load i64, ptr %a20 %t22 = icmp sge i64 %t21, 0 - br i1 %t22, label %then11299, label %endif11301 -then11299: + br i1 %t22, label %then11327, label %endif11329 +then11327: %t23 = load %S.json.Json, ptr %a2 %t24 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t25 = load i64, ptr %a20 %t26 = load { ptr, i64, i64 }, ptr %t24 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 - br i1 %t28, label %range11302, label %inrange11303 -range11302: - call void @finch_panic_index(ptr @.str.7239, i64 140, i64 %t25, i64 %t27) + br i1 %t28, label %range11330, label %inrange11331 +range11330: + call void @finch_panic_index(ptr @.str.7254, i64 140, i64 %t25, i64 %t27) unreachable -inrange11303: +inrange11331: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds %S.json.Json, ptr %t29, i64 %t25 store %S.json.Json %t23, ptr %a31 @@ -113749,7 +113924,7 @@ inrange11303: store %S.json.Json %t34, ptr %a35 call void @finch.drop.S_json_Json(ptr %a35) ret void -endif11301: +endif11329: %t36 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %a1 @@ -113802,20 +113977,20 @@ entry: %t2 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 - store { ptr, i64, i64 } { ptr @.str.7240, i64 1, i64 0 }, ptr %t4 + store { ptr, i64, i64 } { ptr @.str.7255, i64 1, i64 0 }, ptr %t4 %t5 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t6 = insertvalue { ptr, i64, i64 } %t5, i64 1, 1 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 2 store { ptr, i64, i64 } %t7, ptr %a8 store i64 0, ptr %a9 - br label %each.cond11304 -each.cond11304: + br label %each.cond11332 +each.cond11332: %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = load i64, ptr %a9 %t13 = icmp slt i64 %t12, %t11 - br i1 %t13, label %each.body11305, label %each.end11307 -each.body11305: + br i1 %t13, label %each.body11333, label %each.end11335 +each.body11333: %t14 = load ptr, ptr %a1 %t15 = getelementptr inbounds i8, ptr %t14, i64 %t12 %t16 = load i8, ptr %t15 @@ -113825,83 +114000,83 @@ each.body11305: store i64 %t19, ptr %a20 %t21 = load i8, ptr %a17 %t22 = icmp eq i8 %t21, 34 - br i1 %t22, label %then11308, label %else11309 -then11308: + br i1 %t22, label %then11336, label %else11337 +then11336: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = add i64 %t24, 1 call void @finch_arr_reserve(ptr %a8, i64 %t25, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t26 = load ptr, ptr %a8 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t24 - store { ptr, i64, i64 } { ptr @.str.7241, i64 2, i64 0 }, ptr %t27 + store { ptr, i64, i64 } { ptr @.str.7256, i64 2, i64 0 }, ptr %t27 store i64 %t25, ptr %t23 - br label %endif11310 -else11309: + br label %endif11338 +else11337: %t28 = load i8, ptr %a17 %t29 = icmp eq i8 %t28, 92 - br i1 %t29, label %then11311, label %else11312 -then11311: + br i1 %t29, label %then11339, label %else11340 +then11339: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %a8 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 - store { ptr, i64, i64 } { ptr @.str.7242, i64 2, i64 0 }, ptr %t34 + store { ptr, i64, i64 } { ptr @.str.7257, i64 2, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 - br label %endif11313 -else11312: + br label %endif11341 +else11340: %t35 = load i8, ptr %a17 %t36 = icmp eq i8 %t35, 10 - br i1 %t36, label %then11314, label %else11315 -then11314: + br i1 %t36, label %then11342, label %else11343 +then11342: %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = add i64 %t38, 1 call void @finch_arr_reserve(ptr %a8, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a8 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 - store { ptr, i64, i64 } { ptr @.str.7243, i64 2, i64 0 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.7258, i64 2, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 - br label %endif11316 -else11315: + br label %endif11344 +else11343: %t42 = load i8, ptr %a17 %t43 = icmp eq i8 %t42, 13 - br i1 %t43, label %then11317, label %else11318 -then11317: + br i1 %t43, label %then11345, label %else11346 +then11345: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = add i64 %t45, 1 call void @finch_arr_reserve(ptr %a8, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t47 = load ptr, ptr %a8 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 - store { ptr, i64, i64 } { ptr @.str.7244, i64 2, i64 0 }, ptr %t48 + store { ptr, i64, i64 } { ptr @.str.7259, i64 2, i64 0 }, ptr %t48 store i64 %t46, ptr %t44 - br label %endif11319 -else11318: + br label %endif11347 +else11346: %t49 = load i8, ptr %a17 %t50 = icmp eq i8 %t49, 9 - br i1 %t50, label %then11320, label %else11321 -then11320: + br i1 %t50, label %then11348, label %else11349 +then11348: %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %a8, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %a8 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 - store { ptr, i64, i64 } { ptr @.str.7245, i64 2, i64 0 }, ptr %t55 + store { ptr, i64, i64 } { ptr @.str.7260, i64 2, i64 0 }, ptr %t55 store i64 %t53, ptr %t51 - br label %endif11322 -else11321: + br label %endif11350 +else11349: %t56 = load i64, ptr %a20 %t57 = icmp slt i64 %t56, 32 - br i1 %t57, label %then11323, label %else11324 -then11323: + br i1 %t57, label %then11351, label %else11352 +then11351: %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t59 = load i64, ptr %a20 %t60 = sdiv i64 %t59, 16 %t61 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t60) - store { ptr, i64, i64 } { ptr @.str.7246, i64 4, i64 0 }, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.7261, i64 4, i64 0 }, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t61, ptr %a65 @@ -113925,8 +114100,8 @@ then11323: %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 %t76 store { ptr, i64, i64 } %t75, ptr %t79 store i64 %t77, ptr %t58 - br label %endif11325 -else11324: + br label %endif11353 +else11352: %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t81 = load i8, ptr %a17 call void @finch_str_from_char(ptr %a82, i8 signext %t81) @@ -113938,35 +114113,35 @@ else11324: %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 %t84 store { ptr, i64, i64 } %t83, ptr %t87 store i64 %t85, ptr %t80 - br label %endif11325 -endif11325: - br label %endif11322 -endif11322: - br label %endif11319 -endif11319: - br label %endif11316 -endif11316: - br label %endif11313 -endif11313: - br label %endif11310 -endif11310: - br label %each.step11306 -each.step11306: + br label %endif11353 +endif11353: + br label %endif11350 +endif11350: + br label %endif11347 +endif11347: + br label %endif11344 +endif11344: + br label %endif11341 +endif11341: + br label %endif11338 +endif11338: + br label %each.step11334 +each.step11334: %t88 = load i64, ptr %a9 %t89 = add i64 %t88, 1 store i64 %t89, ptr %a9 - br label %each.cond11304 -each.end11307: + br label %each.cond11332 +each.end11335: %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t91 = load i64, ptr %t90 %t92 = add i64 %t91, 1 call void @finch_arr_reserve(ptr %a8, i64 %t92, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t93 = load ptr, ptr %a8 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91 - store { ptr, i64, i64 } { ptr @.str.7247, i64 1, i64 0 }, ptr %t94 + store { ptr, i64, i64 } { ptr @.str.7262, i64 1, i64 0 }, ptr %t94 store i64 %t92, ptr %t90 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.7248, i64 0, i64 0 }, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.7263, i64 0, i64 0 }, ptr %a96 call void @finch_str_join(ptr %a97, ptr %a8, ptr %a96) %t98 = load { ptr, i64, i64 }, ptr %a97 call void @finch.drop.arr_str(ptr %a8) @@ -113979,16 +114154,16 @@ entry: %a2 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 - store { ptr, i64, i64 } { ptr @.str.7249, i64 16, i64 0 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.7264, i64 16, i64 0 }, ptr %a2 %t3 = load i64, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 %t3, %t5 - br i1 %t6, label %range11326, label %inrange11327 -range11326: - call void @finch_panic_index(ptr @.str.7250, i64 175, i64 %t3, i64 %t5) + br i1 %t6, label %range11354, label %inrange11355 +range11354: + call void @finch_panic_index(ptr @.str.7265, i64 175, i64 %t3, i64 %t5) unreachable -inrange11327: +inrange11355: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds i8, ptr %t7, i64 %t3 %t9 = load i8, ptr %t8 @@ -114009,37 +114184,37 @@ entry: %t4 = fptosi double %t3 to i64 %t5 = sitofp i64 %t4 to double %t6 = fcmp oeq double %t2, %t5 - br label %logic.from11328 -logic.from11328: - br i1 %t6, label %logic.rhs11329, label %logic.end11330 -logic.rhs11329: + br label %logic.from11356 +logic.from11356: + br i1 %t6, label %logic.rhs11357, label %logic.end11358 +logic.rhs11357: %t7 = load double, ptr %a1 %t8 = fneg double 1000000000000000.0 %t9 = fcmp ogt double %t7, %t8 - br label %logic.rend11331 -logic.rend11331: - br label %logic.end11330 -logic.end11330: - %t10 = phi i1 [ false, %logic.from11328 ], [ %t9, %logic.rend11331 ] - br label %logic.from11332 -logic.from11332: - br i1 %t10, label %logic.rhs11333, label %logic.end11334 -logic.rhs11333: + br label %logic.rend11359 +logic.rend11359: + br label %logic.end11358 +logic.end11358: + %t10 = phi i1 [ false, %logic.from11356 ], [ %t9, %logic.rend11359 ] + br label %logic.from11360 +logic.from11360: + br i1 %t10, label %logic.rhs11361, label %logic.end11362 +logic.rhs11361: %t11 = load double, ptr %a1 %t12 = fcmp olt double %t11, 1000000000000000.0 - br label %logic.rend11335 -logic.rend11335: - br label %logic.end11334 -logic.end11334: - %t13 = phi i1 [ false, %logic.from11332 ], [ %t12, %logic.rend11335 ] - br i1 %t13, label %then11336, label %endif11338 -then11336: + br label %logic.rend11363 +logic.rend11363: + br label %logic.end11362 +logic.end11362: + %t13 = phi i1 [ false, %logic.from11360 ], [ %t12, %logic.rend11363 ] + br i1 %t13, label %then11364, label %endif11366 +then11364: %t14 = load double, ptr %a1 %t15 = fptosi double %t14 to i64 call void @finch_str_from_int(ptr %a16, i64 %t15) %t17 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t17 -endif11338: +endif11366: %t18 = load double, ptr %a1 call void @finch_str_from_float(ptr %a19, double %t18) %t20 = load { ptr, i64, i64 }, ptr %a19 @@ -114108,17 +114283,17 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store ptr %p3, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.7251, i64 0, i64 0 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.7252, i64 0, i64 0 }, ptr %a6 - store { ptr, i64, i64 } { ptr @.str.7253, i64 1, i64 0 }, ptr %a7 - store { ptr, i64, i64 } { ptr @.str.7254, i64 1, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.7266, i64 0, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7267, i64 0, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7268, i64 1, i64 0 }, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.7269, i64 1, i64 0 }, ptr %a8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp sgt i64 %t10, 0 - br i1 %t11, label %then11339, label %endif11341 -then11339: + br i1 %t11, label %then11367, label %endif11369 +then11367: %t12 = load { ptr, i64, i64 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.7255, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7270, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_drop(ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a3 @@ -114132,23 +114307,23 @@ then11339: store { ptr, i64, i64 } %t20, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.7256, i64 2, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.7271, i64 2, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_drop(ptr %a23) - br label %endif11341 -endif11341: + br label %endif11369 +endif11369: %t24 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 0 %t25 = load i32, ptr %t24 %t26 = icmp eq i32 %t25, 0 - br i1 %t26, label %match.arm11343, label %match.next11344 -match.arm11343: + br i1 %t26, label %match.arm11371, label %match.next11372 +match.arm11371: %t27 = load ptr, ptr %a4 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic11345, label %ok11346 -panic11345: - call void @finch_panic(ptr @.str.7257, i64 200, ptr @.str.7258) + br i1 %t28, label %panic11373, label %ok11374 +panic11373: + call void @finch_panic(ptr @.str.7272, i64 200, ptr @.str.7273) unreachable -ok11346: +ok11374: %t29 = getelementptr inbounds %S.json.Writer, ptr %t27, i32 0, i32 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 @@ -114156,24 +114331,24 @@ ok11346: call void @finch_arr_reserve(ptr %t29, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %t29 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 - store { ptr, i64, i64 } { ptr @.str.7259, i64 4, i64 0 }, ptr %t34 + store { ptr, i64, i64 } { ptr @.str.7274, i64 4, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 - br label %match.end11342 -match.next11344: + br label %match.end11370 +match.next11372: %t35 = icmp eq i32 %t25, 1 - br i1 %t35, label %match.arm11347, label %match.next11348 -match.arm11347: + br i1 %t35, label %match.arm11375, label %match.next11376 +match.arm11375: %t36 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 1 %t37 = load i1, ptr %t36 - br i1 %t37, label %then11349, label %else11350 -then11349: + br i1 %t37, label %then11377, label %else11378 +then11377: %t38 = load ptr, ptr %a4 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic11352, label %ok11353 -panic11352: - call void @finch_panic(ptr @.str.7260, i64 203, ptr @.str.7261) + br i1 %t39, label %panic11380, label %ok11381 +panic11380: + call void @finch_panic(ptr @.str.7275, i64 203, ptr @.str.7276) unreachable -ok11353: +ok11381: %t40 = getelementptr inbounds %S.json.Writer, ptr %t38, i32 0, i32 0 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load i64, ptr %t41 @@ -114181,17 +114356,17 @@ ok11353: call void @finch_arr_reserve(ptr %t40, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t44 = load ptr, ptr %t40 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 - store { ptr, i64, i64 } { ptr @.str.7262, i64 4, i64 0 }, ptr %t45 + store { ptr, i64, i64 } { ptr @.str.7277, i64 4, i64 0 }, ptr %t45 store i64 %t43, ptr %t41 - br label %endif11351 -else11350: + br label %endif11379 +else11378: %t46 = load ptr, ptr %a4 %t47 = icmp eq ptr %t46, null - br i1 %t47, label %panic11354, label %ok11355 -panic11354: - call void @finch_panic(ptr @.str.7263, i64 205, ptr @.str.7264) + br i1 %t47, label %panic11382, label %ok11383 +panic11382: + call void @finch_panic(ptr @.str.7278, i64 205, ptr @.str.7279) unreachable -ok11355: +ok11383: %t48 = getelementptr inbounds %S.json.Writer, ptr %t46, i32 0, i32 0 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 %t50 = load i64, ptr %t49 @@ -114199,22 +114374,22 @@ ok11355: call void @finch_arr_reserve(ptr %t48, i64 %t51, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t52 = load ptr, ptr %t48 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t50 - store { ptr, i64, i64 } { ptr @.str.7265, i64 5, i64 0 }, ptr %t53 + store { ptr, i64, i64 } { ptr @.str.7280, i64 5, i64 0 }, ptr %t53 store i64 %t51, ptr %t49 - br label %endif11351 -endif11351: - br label %match.end11342 -match.next11348: + br label %endif11379 +endif11379: + br label %match.end11370 +match.next11376: %t54 = icmp eq i32 %t25, 2 - br i1 %t54, label %match.arm11356, label %match.next11357 -match.arm11356: + br i1 %t54, label %match.arm11384, label %match.next11385 +match.arm11384: %t55 = load ptr, ptr %a4 %t56 = icmp eq ptr %t55, null - br i1 %t56, label %panic11358, label %ok11359 -panic11358: - call void @finch_panic(ptr @.str.7266, i64 208, ptr @.str.7267) + br i1 %t56, label %panic11386, label %ok11387 +panic11386: + call void @finch_panic(ptr @.str.7281, i64 208, ptr @.str.7282) unreachable -ok11359: +ok11387: %t57 = getelementptr inbounds %S.json.Writer, ptr %t55, i32 0, i32 0 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 %t59 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 2 @@ -114227,18 +114402,18 @@ ok11359: %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62 store { ptr, i64, i64 } %t61, ptr %t65 store i64 %t63, ptr %t58 - br label %match.end11342 -match.next11357: + br label %match.end11370 +match.next11385: %t66 = icmp eq i32 %t25, 3 - br i1 %t66, label %match.arm11360, label %match.next11361 -match.arm11360: + br i1 %t66, label %match.arm11388, label %match.next11389 +match.arm11388: %t67 = load ptr, ptr %a4 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic11362, label %ok11363 -panic11362: - call void @finch_panic(ptr @.str.7268, i64 209, ptr @.str.7269) + br i1 %t68, label %panic11390, label %ok11391 +panic11390: + call void @finch_panic(ptr @.str.7283, i64 209, ptr @.str.7284) unreachable -ok11363: +ok11391: %t69 = getelementptr inbounds %S.json.Writer, ptr %t67, i32 0, i32 0 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 %t71 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 3 @@ -114251,24 +114426,24 @@ ok11363: %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 store { ptr, i64, i64 } %t73, ptr %t77 store i64 %t75, ptr %t70 - br label %match.end11342 -match.next11361: + br label %match.end11370 +match.next11389: %t78 = icmp eq i32 %t25, 4 - br i1 %t78, label %match.arm11364, label %match.next11365 -match.arm11364: + br i1 %t78, label %match.arm11392, label %match.next11393 +match.arm11392: %t79 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 %t81 = load i64, ptr %t80 %t82 = icmp eq i64 %t81, 0 - br i1 %t82, label %then11366, label %endif11368 -then11366: + br i1 %t82, label %then11394, label %endif11396 +then11394: %t83 = load ptr, ptr %a4 %t84 = icmp eq ptr %t83, null - br i1 %t84, label %panic11369, label %ok11370 -panic11369: - call void @finch_panic(ptr @.str.7270, i64 212, ptr @.str.7271) + br i1 %t84, label %panic11397, label %ok11398 +panic11397: + call void @finch_panic(ptr @.str.7285, i64 212, ptr @.str.7286) unreachable -ok11370: +ok11398: %t85 = getelementptr inbounds %S.json.Writer, ptr %t83, i32 0, i32 0 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 %t87 = load i64, ptr %t86 @@ -114276,25 +114451,25 @@ ok11370: call void @finch_arr_reserve(ptr %t85, i64 %t88, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t89 = load ptr, ptr %t85 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i64 %t87 - store { ptr, i64, i64 } { ptr @.str.7272, i64 2, i64 0 }, ptr %t90 + store { ptr, i64, i64 } { ptr @.str.7287, i64 2, i64 0 }, ptr %t90 store i64 %t88, ptr %t86 call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a7) call void @finch_str_drop(ptr %a6) call void @finch_str_drop(ptr %a5) ret void -endif11368: +endif11396: %t91 = load ptr, ptr %a4 %t92 = icmp eq ptr %t91, null - br i1 %t92, label %panic11371, label %ok11372 -panic11371: - call void @finch_panic(ptr @.str.7273, i64 215, ptr @.str.7274) + br i1 %t92, label %panic11399, label %ok11400 +panic11399: + call void @finch_panic(ptr @.str.7288, i64 215, ptr @.str.7289) unreachable -ok11372: +ok11400: %t93 = getelementptr inbounds %S.json.Writer, ptr %t91, i32 0, i32 0 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 %t95 = load { ptr, i64, i64 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.7275, i64 1, i64 0 }, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.7290, i64 1, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 @@ -114307,14 +114482,14 @@ ok11372: store i64 %t101, ptr %t94 %t104 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 store i64 0, ptr %a105 - br label %each.cond11373 -each.cond11373: + br label %each.cond11401 +each.cond11401: %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = load i64, ptr %a105 %t109 = icmp slt i64 %t108, %t107 - br i1 %t109, label %each.body11374, label %each.end11376 -each.body11374: + br i1 %t109, label %each.body11402, label %each.end11404 +each.body11402: %t110 = load ptr, ptr %t104 %t111 = getelementptr inbounds %S.json.Json, ptr %t110, i64 %t108 %t112 = load %S.json.Json, ptr %t111 @@ -114322,15 +114497,15 @@ each.body11374: store %S.json.Json %t112, ptr %a114 %t115 = load i64, ptr %a113 %t116 = icmp sgt i64 %t115, 0 - br i1 %t116, label %then11377, label %endif11379 -then11377: + br i1 %t116, label %then11405, label %endif11407 +then11405: %t117 = load ptr, ptr %a4 %t118 = icmp eq ptr %t117, null - br i1 %t118, label %panic11380, label %ok11381 -panic11380: - call void @finch_panic(ptr @.str.7276, i64 218, ptr @.str.7277) + br i1 %t118, label %panic11408, label %ok11409 +panic11408: + call void @finch_panic(ptr @.str.7291, i64 218, ptr @.str.7292) unreachable -ok11381: +ok11409: %t119 = getelementptr inbounds %S.json.Writer, ptr %t117, i32 0, i32 0 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %a7 @@ -114346,15 +114521,15 @@ ok11381: %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i64 %t127 store { ptr, i64, i64 } %t126, ptr %t130 store i64 %t128, ptr %t120 - br label %endif11379 -endif11379: + br label %endif11407 +endif11407: %t131 = load ptr, ptr %a4 %t132 = icmp eq ptr %t131, null - br i1 %t132, label %panic11382, label %ok11383 -panic11382: - call void @finch_panic(ptr @.str.7278, i64 220, ptr @.str.7279) + br i1 %t132, label %panic11410, label %ok11411 +panic11410: + call void @finch_panic(ptr @.str.7293, i64 220, ptr @.str.7294) unreachable -ok11383: +ok11411: %t133 = getelementptr inbounds %S.json.Writer, ptr %t131, i32 0, i32 0 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load { ptr, i64, i64 }, ptr %a6 @@ -114373,20 +114548,20 @@ ok11383: %t145 = load { ptr, i64, i64 }, ptr %a6 %t146 = load ptr, ptr %a4 call void @finch.json.write(%S.json.Json %t143, { ptr, i64, i64 } %t144, { ptr, i64, i64 } %t145, ptr %t146) - br label %each.step11375 -each.step11375: + br label %each.step11403 +each.step11403: %t147 = load i64, ptr %a105 %t148 = add i64 %t147, 1 store i64 %t148, ptr %a105 - br label %each.cond11373 -each.end11376: + br label %each.cond11401 +each.end11404: %t149 = load ptr, ptr %a4 %t150 = icmp eq ptr %t149, null - br i1 %t150, label %panic11384, label %ok11385 -panic11384: - call void @finch_panic(ptr @.str.7280, i64 223, ptr @.str.7281) + br i1 %t150, label %panic11412, label %ok11413 +panic11412: + call void @finch_panic(ptr @.str.7295, i64 223, ptr @.str.7296) unreachable -ok11385: +ok11413: %t151 = getelementptr inbounds %S.json.Writer, ptr %t149, i32 0, i32 0 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load { ptr, i64, i64 }, ptr %a5 @@ -114396,7 +114571,7 @@ ok11385: call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t158, ptr %a160 - store { ptr, i64, i64 } { ptr @.str.7282, i64 1, i64 0 }, ptr %a161 + store { ptr, i64, i64 } { ptr @.str.7297, i64 1, i64 0 }, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) store { ptr, i64, i64 } %t158, ptr %a162 call void @finch_str_drop(ptr %a162) @@ -114408,24 +114583,24 @@ ok11385: %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i64 %t164 store { ptr, i64, i64 } %t163, ptr %t167 store i64 %t165, ptr %t152 - br label %match.end11342 -match.next11365: + br label %match.end11370 +match.next11393: %t168 = icmp eq i32 %t25, 5 - br i1 %t168, label %match.arm11386, label %match.next11387 -match.arm11386: + br i1 %t168, label %match.arm11414, label %match.next11415 +match.arm11414: %t169 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 %t171 = load i64, ptr %t170 %t172 = icmp eq i64 %t171, 0 - br i1 %t172, label %then11388, label %endif11390 -then11388: + br i1 %t172, label %then11416, label %endif11418 +then11416: %t173 = load ptr, ptr %a4 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic11391, label %ok11392 -panic11391: - call void @finch_panic(ptr @.str.7283, i64 227, ptr @.str.7284) + br i1 %t174, label %panic11419, label %ok11420 +panic11419: + call void @finch_panic(ptr @.str.7298, i64 227, ptr @.str.7299) unreachable -ok11392: +ok11420: %t175 = getelementptr inbounds %S.json.Writer, ptr %t173, i32 0, i32 0 %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i32 0, i32 1 %t177 = load i64, ptr %t176 @@ -114433,25 +114608,25 @@ ok11392: call void @finch_arr_reserve(ptr %t175, i64 %t178, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t179 = load ptr, ptr %t175 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t177 - store { ptr, i64, i64 } { ptr @.str.7285, i64 2, i64 0 }, ptr %t180 + store { ptr, i64, i64 } { ptr @.str.7300, i64 2, i64 0 }, ptr %t180 store i64 %t178, ptr %t176 call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a7) call void @finch_str_drop(ptr %a6) call void @finch_str_drop(ptr %a5) ret void -endif11390: +endif11418: %t181 = load ptr, ptr %a4 %t182 = icmp eq ptr %t181, null - br i1 %t182, label %panic11393, label %ok11394 -panic11393: - call void @finch_panic(ptr @.str.7286, i64 230, ptr @.str.7287) + br i1 %t182, label %panic11421, label %ok11422 +panic11421: + call void @finch_panic(ptr @.str.7301, i64 230, ptr @.str.7302) unreachable -ok11394: +ok11422: %t183 = getelementptr inbounds %S.json.Writer, ptr %t181, i32 0, i32 0 %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 %t185 = load { ptr, i64, i64 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.7288, i64 1, i64 0 }, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.7303, i64 1, i64 0 }, ptr %a187 store { ptr, i64, i64 } %t185, ptr %a188 call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) %t189 = load { ptr, i64, i64 }, ptr %a186 @@ -114464,14 +114639,14 @@ ok11394: store i64 %t191, ptr %t184 %t194 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 store i64 0, ptr %a195 - br label %each.cond11395 -each.cond11395: + br label %each.cond11423 +each.cond11423: %t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 %t197 = load i64, ptr %t196 %t198 = load i64, ptr %a195 %t199 = icmp slt i64 %t198, %t197 - br i1 %t199, label %each.body11396, label %each.end11398 -each.body11396: + br i1 %t199, label %each.body11424, label %each.end11426 +each.body11424: %t200 = load ptr, ptr %t194 %t201 = getelementptr inbounds %S.json.Json, ptr %t200, i64 %t198 %t202 = load %S.json.Json, ptr %t201 @@ -114479,15 +114654,15 @@ each.body11396: store %S.json.Json %t202, ptr %a204 %t205 = load i64, ptr %a203 %t206 = icmp sgt i64 %t205, 0 - br i1 %t206, label %then11399, label %endif11401 -then11399: + br i1 %t206, label %then11427, label %endif11429 +then11427: %t207 = load ptr, ptr %a4 %t208 = icmp eq ptr %t207, null - br i1 %t208, label %panic11402, label %ok11403 -panic11402: - call void @finch_panic(ptr @.str.7289, i64 233, ptr @.str.7290) + br i1 %t208, label %panic11430, label %ok11431 +panic11430: + call void @finch_panic(ptr @.str.7304, i64 233, ptr @.str.7305) unreachable -ok11403: +ok11431: %t209 = getelementptr inbounds %S.json.Writer, ptr %t207, i32 0, i32 0 %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 %t211 = load { ptr, i64, i64 }, ptr %a7 @@ -114503,15 +114678,15 @@ ok11403: %t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %t219, i64 %t217 store { ptr, i64, i64 } %t216, ptr %t220 store i64 %t218, ptr %t210 - br label %endif11401 -endif11401: + br label %endif11429 +endif11429: %t221 = load ptr, ptr %a4 %t222 = icmp eq ptr %t221, null - br i1 %t222, label %panic11404, label %ok11405 -panic11404: - call void @finch_panic(ptr @.str.7291, i64 235, ptr @.str.7292) + br i1 %t222, label %panic11432, label %ok11433 +panic11432: + call void @finch_panic(ptr @.str.7306, i64 235, ptr @.str.7307) unreachable -ok11405: +ok11433: %t223 = getelementptr inbounds %S.json.Writer, ptr %t221, i32 0, i32 0 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 %t225 = load { ptr, i64, i64 }, ptr %a6 @@ -114520,11 +114695,11 @@ ok11405: %t228 = load { ptr, i64, i64 }, ptr %t226 %t229 = extractvalue { ptr, i64, i64 } %t228, 1 %t230 = icmp uge i64 %t227, %t229 - br i1 %t230, label %range11406, label %inrange11407 -range11406: - call void @finch_panic_index(ptr @.str.7293, i64 235, i64 %t227, i64 %t229) + br i1 %t230, label %range11434, label %inrange11435 +range11434: + call void @finch_panic_index(ptr @.str.7308, i64 235, i64 %t227, i64 %t229) unreachable -inrange11407: +inrange11435: %t231 = extractvalue { ptr, i64, i64 } %t228, 0 %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i64 %t227 %t233 = load { ptr, i64, i64 }, ptr %t232 @@ -114554,20 +114729,20 @@ inrange11407: %t252 = load { ptr, i64, i64 }, ptr %a6 %t253 = load ptr, ptr %a4 call void @finch.json.write(%S.json.Json %t250, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252, ptr %t253) - br label %each.step11397 -each.step11397: + br label %each.step11425 +each.step11425: %t254 = load i64, ptr %a195 %t255 = add i64 %t254, 1 store i64 %t255, ptr %a195 - br label %each.cond11395 -each.end11398: + br label %each.cond11423 +each.end11426: %t256 = load ptr, ptr %a4 %t257 = icmp eq ptr %t256, null - br i1 %t257, label %panic11408, label %ok11409 -panic11408: - call void @finch_panic(ptr @.str.7294, i64 238, ptr @.str.7295) + br i1 %t257, label %panic11436, label %ok11437 +panic11436: + call void @finch_panic(ptr @.str.7309, i64 238, ptr @.str.7310) unreachable -ok11409: +ok11437: %t258 = getelementptr inbounds %S.json.Writer, ptr %t256, i32 0, i32 0 %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 %t260 = load { ptr, i64, i64 }, ptr %a5 @@ -114577,7 +114752,7 @@ ok11409: call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) %t265 = load { ptr, i64, i64 }, ptr %a262 store { ptr, i64, i64 } %t265, ptr %a267 - store { ptr, i64, i64 } { ptr @.str.7296, i64 1, i64 0 }, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.7311, i64 1, i64 0 }, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) store { ptr, i64, i64 } %t265, ptr %a269 call void @finch_str_drop(ptr %a269) @@ -114589,15 +114764,15 @@ ok11409: %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 store { ptr, i64, i64 } %t270, ptr %t274 store i64 %t272, ptr %t259 - br label %match.end11342 -match.next11387: - br i1 true, label %panic11410, label %ok11411 -panic11410: - call void @finch_panic(ptr @.str.7297, i64 199, ptr @.str.7298) + br label %match.end11370 +match.next11415: + br i1 true, label %panic11438, label %ok11439 +panic11438: + call void @finch_panic(ptr @.str.7312, i64 199, ptr @.str.7313) unreachable -ok11411: +ok11439: unreachable -match.end11342: +match.end11370: call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a7) call void @finch_str_drop(ptr %a6) @@ -114622,10 +114797,10 @@ entry: store %S.json.Json %p0, ptr %a1 store %S.json.Writer zeroinitializer, ptr %a2 %t3 = load %S.json.Json, ptr %a1 - call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7299, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7300, i64 0, i64 0 }, ptr %a2) + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7314, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7315, i64 0, i64 0 }, ptr %a2) %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.7301, i64 0, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7316, i64 0, i64 0 }, ptr %a6 call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 call void @finch.drop.S_json_Writer(ptr %a2) @@ -114641,10 +114816,10 @@ entry: store %S.json.Json %p0, ptr %a1 store %S.json.Writer zeroinitializer, ptr %a2 %t3 = load %S.json.Json, ptr %a1 - call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7302, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.7303, i64 0, i64 0 }, ptr %a2) + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7317, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.7318, i64 0, i64 0 }, ptr %a2) %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.7304, i64 0, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7319, i64 0, i64 0 }, ptr %a6 call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 call void @finch.drop.S_json_Writer(ptr %a2) @@ -114677,93 +114852,93 @@ entry: store i64 1, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic11412, label %ok11413 -panic11412: - call void @finch_panic(ptr @.str.7305, i64 268, ptr @.str.7306) + br i1 %t5, label %panic11440, label %ok11441 +panic11440: + call void @finch_panic(ptr @.str.7320, i64 268, ptr @.str.7321) unreachable -ok11413: +ok11441: %t6 = getelementptr inbounds %S.json.Reader, ptr %t4, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 - br label %for.cond11414 -for.cond11414: + br label %for.cond11442 +for.cond11442: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 - br i1 %t10, label %for.body11415, label %for.end11417 -for.body11415: + br i1 %t10, label %for.body11443, label %for.end11445 +for.body11443: %t11 = load i64, ptr %a8 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic11418, label %ok11419 -panic11418: - call void @finch_panic(ptr @.str.7307, i64 269, ptr @.str.7308) + br i1 %t13, label %panic11446, label %ok11447 +panic11446: + call void @finch_panic(ptr @.str.7322, i64 269, ptr @.str.7323) unreachable -ok11419: +ok11447: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp slt i64 %t11, %t16 - br label %logic.from11420 -logic.from11420: - br i1 %t17, label %logic.rhs11421, label %logic.end11422 -logic.rhs11421: + br label %logic.from11448 +logic.from11448: + br i1 %t17, label %logic.rhs11449, label %logic.end11450 +logic.rhs11449: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic11423, label %ok11424 -panic11423: - call void @finch_panic(ptr @.str.7309, i64 269, ptr @.str.7310) + br i1 %t19, label %panic11451, label %ok11452 +panic11451: + call void @finch_panic(ptr @.str.7324, i64 269, ptr @.str.7325) unreachable -ok11424: +ok11452: %t20 = getelementptr inbounds %S.json.Reader, ptr %t18, i32 0, i32 0 %t21 = load i64, ptr %a8 %t22 = load { ptr, i64, i64 }, ptr %t20 %t23 = extractvalue { ptr, i64, i64 } %t22, 1 %t24 = icmp uge i64 %t21, %t23 - br i1 %t24, label %range11425, label %inrange11426 -range11425: - call void @finch_panic_index(ptr @.str.7311, i64 269, i64 %t21, i64 %t23) + br i1 %t24, label %range11453, label %inrange11454 +range11453: + call void @finch_panic_index(ptr @.str.7326, i64 269, i64 %t21, i64 %t23) unreachable -inrange11426: +inrange11454: %t25 = extractvalue { ptr, i64, i64 } %t22, 0 %t26 = getelementptr inbounds i8, ptr %t25, i64 %t21 %t27 = load i8, ptr %t26 %t28 = icmp eq i8 %t27, 10 - br label %logic.rend11427 -logic.rend11427: - br label %logic.end11422 -logic.end11422: - %t29 = phi i1 [ false, %logic.from11420 ], [ %t28, %logic.rend11427 ] - br i1 %t29, label %then11428, label %else11429 -then11428: + br label %logic.rend11455 +logic.rend11455: + br label %logic.end11450 +logic.end11450: + %t29 = phi i1 [ false, %logic.from11448 ], [ %t28, %logic.rend11455 ] + br i1 %t29, label %then11456, label %else11457 +then11456: %t30 = load i64, ptr %a2 %t31 = add i64 %t30, 1 store i64 %t31, ptr %a2 store i64 1, ptr %a3 - br label %endif11430 -else11429: + br label %endif11458 +else11457: %t32 = load i64, ptr %a3 %t33 = add i64 %t32, 1 store i64 %t33, ptr %a3 - br label %endif11430 -endif11430: - br label %for.step11416 -for.step11416: + br label %endif11458 +endif11458: + br label %for.step11444 +for.step11444: %t34 = load i64, ptr %a8 %t35 = add i64 %t34, 1 store i64 %t35, ptr %a8 - br label %for.cond11414 -for.end11417: + br label %for.cond11442 +for.end11445: %t36 = load i64, ptr %a2 call void @finch_str_from_int(ptr %a37, i64 %t36) %t38 = load { ptr, i64, i64 }, ptr %a37 - store { ptr, i64, i64 } { ptr @.str.7312, i64 5, i64 0 }, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.7327, i64 5, i64 0 }, ptr %a40 store { ptr, i64, i64 } %t38, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) store { ptr, i64, i64 } %t38, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t43, ptr %a45 - store { ptr, i64, i64 } { ptr @.str.7313, i64 9, i64 0 }, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.7328, i64 9, i64 0 }, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) store { ptr, i64, i64 } %t43, ptr %a47 call void @finch_str_drop(ptr %a47) @@ -114788,56 +114963,56 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic11431, label %ok11432 -panic11431: - call void @finch_panic(ptr @.str.7314, i64 280, ptr @.str.7315) + br i1 %t3, label %panic11459, label %ok11460 +panic11459: + call void @finch_panic(ptr @.str.7329, i64 280, ptr @.str.7330) unreachable -ok11432: +ok11460: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic11433, label %ok11434 -panic11433: - call void @finch_panic(ptr @.str.7316, i64 280, ptr @.str.7317) + br i1 %t7, label %panic11461, label %ok11462 +panic11461: + call void @finch_panic(ptr @.str.7331, i64 280, ptr @.str.7332) unreachable -ok11434: +ok11462: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp slt i64 %t5, %t10 - br i1 %t11, label %then11435, label %endif11437 -then11435: + br i1 %t11, label %then11463, label %endif11465 +then11463: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic11438, label %ok11439 -panic11438: - call void @finch_panic(ptr @.str.7318, i64 281, ptr @.str.7319) + br i1 %t13, label %panic11466, label %ok11467 +panic11466: + call void @finch_panic(ptr @.str.7333, i64 281, ptr @.str.7334) unreachable -ok11439: +ok11467: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic11440, label %ok11441 -panic11440: - call void @finch_panic(ptr @.str.7320, i64 281, ptr @.str.7321) + br i1 %t16, label %panic11468, label %ok11469 +panic11468: + call void @finch_panic(ptr @.str.7335, i64 281, ptr @.str.7336) unreachable -ok11441: +ok11469: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t14 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range11442, label %inrange11443 -range11442: - call void @finch_panic_index(ptr @.str.7322, i64 281, i64 %t18, i64 %t20) + br i1 %t21, label %range11470, label %inrange11471 +range11470: + call void @finch_panic_index(ptr @.str.7337, i64 281, i64 %t18, i64 %t20) unreachable -inrange11443: +inrange11471: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 %t24 = load i8, ptr %t23 ret i8 %t24 -endif11437: +endif11465: %t25 = trunc i64 0 to i8 ret i8 %t25 } @@ -114846,195 +115021,195 @@ define internal void @finch.json.skip_space(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 - br label %while.cond11444 -while.cond11444: + br label %while.cond11472 +while.cond11472: %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic11447, label %ok11448 -panic11447: - call void @finch_panic(ptr @.str.7323, i64 287, ptr @.str.7324) + br i1 %t3, label %panic11475, label %ok11476 +panic11475: + call void @finch_panic(ptr @.str.7338, i64 287, ptr @.str.7339) unreachable -ok11448: +ok11476: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic11449, label %ok11450 -panic11449: - call void @finch_panic(ptr @.str.7325, i64 287, ptr @.str.7326) + br i1 %t7, label %panic11477, label %ok11478 +panic11477: + call void @finch_panic(ptr @.str.7340, i64 287, ptr @.str.7341) unreachable -ok11450: +ok11478: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp slt i64 %t5, %t10 - br label %logic.from11451 -logic.from11451: - br i1 %t11, label %logic.rhs11452, label %logic.end11453 -logic.rhs11452: + br label %logic.from11479 +logic.from11479: + br i1 %t11, label %logic.rhs11480, label %logic.end11481 +logic.rhs11480: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic11454, label %ok11455 -panic11454: - call void @finch_panic(ptr @.str.7327, i64 287, ptr @.str.7328) + br i1 %t13, label %panic11482, label %ok11483 +panic11482: + call void @finch_panic(ptr @.str.7342, i64 287, ptr @.str.7343) unreachable -ok11455: +ok11483: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic11456, label %ok11457 -panic11456: - call void @finch_panic(ptr @.str.7329, i64 287, ptr @.str.7330) + br i1 %t16, label %panic11484, label %ok11485 +panic11484: + call void @finch_panic(ptr @.str.7344, i64 287, ptr @.str.7345) unreachable -ok11457: +ok11485: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t14 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range11458, label %inrange11459 -range11458: - call void @finch_panic_index(ptr @.str.7331, i64 287, i64 %t18, i64 %t20) + br i1 %t21, label %range11486, label %inrange11487 +range11486: + call void @finch_panic_index(ptr @.str.7346, i64 287, i64 %t18, i64 %t20) unreachable -inrange11459: +inrange11487: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 %t24 = load i8, ptr %t23 %t25 = icmp eq i8 %t24, 32 - br label %logic.from11460 -logic.from11460: - br i1 %t25, label %logic.end11462, label %logic.rhs11461 -logic.rhs11461: + br label %logic.from11488 +logic.from11488: + br i1 %t25, label %logic.end11490, label %logic.rhs11489 +logic.rhs11489: %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic11463, label %ok11464 -panic11463: - call void @finch_panic(ptr @.str.7332, i64 287, ptr @.str.7333) + br i1 %t27, label %panic11491, label %ok11492 +panic11491: + call void @finch_panic(ptr @.str.7347, i64 287, ptr @.str.7348) unreachable -ok11464: +ok11492: %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 0 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic11465, label %ok11466 -panic11465: - call void @finch_panic(ptr @.str.7334, i64 287, ptr @.str.7335) + br i1 %t30, label %panic11493, label %ok11494 +panic11493: + call void @finch_panic(ptr @.str.7349, i64 287, ptr @.str.7350) unreachable -ok11466: +ok11494: %t31 = getelementptr inbounds %S.json.Reader, ptr %t29, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load { ptr, i64, i64 }, ptr %t28 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range11467, label %inrange11468 -range11467: - call void @finch_panic_index(ptr @.str.7336, i64 287, i64 %t32, i64 %t34) + br i1 %t35, label %range11495, label %inrange11496 +range11495: + call void @finch_panic_index(ptr @.str.7351, i64 287, i64 %t32, i64 %t34) unreachable -inrange11468: +inrange11496: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 %t39 = icmp eq i8 %t38, 10 - br label %logic.rend11469 -logic.rend11469: - br label %logic.end11462 -logic.end11462: - %t40 = phi i1 [ true, %logic.from11460 ], [ %t39, %logic.rend11469 ] - br label %logic.from11470 -logic.from11470: - br i1 %t40, label %logic.end11472, label %logic.rhs11471 -logic.rhs11471: + br label %logic.rend11497 +logic.rend11497: + br label %logic.end11490 +logic.end11490: + %t40 = phi i1 [ true, %logic.from11488 ], [ %t39, %logic.rend11497 ] + br label %logic.from11498 +logic.from11498: + br i1 %t40, label %logic.end11500, label %logic.rhs11499 +logic.rhs11499: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic11473, label %ok11474 -panic11473: - call void @finch_panic(ptr @.str.7337, i64 287, ptr @.str.7338) + br i1 %t42, label %panic11501, label %ok11502 +panic11501: + call void @finch_panic(ptr @.str.7352, i64 287, ptr @.str.7353) unreachable -ok11474: +ok11502: %t43 = getelementptr inbounds %S.json.Reader, ptr %t41, i32 0, i32 0 %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic11475, label %ok11476 -panic11475: - call void @finch_panic(ptr @.str.7339, i64 287, ptr @.str.7340) + br i1 %t45, label %panic11503, label %ok11504 +panic11503: + call void @finch_panic(ptr @.str.7354, i64 287, ptr @.str.7355) unreachable -ok11476: +ok11504: %t46 = getelementptr inbounds %S.json.Reader, ptr %t44, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load { ptr, i64, i64 }, ptr %t43 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range11477, label %inrange11478 -range11477: - call void @finch_panic_index(ptr @.str.7341, i64 287, i64 %t47, i64 %t49) + br i1 %t50, label %range11505, label %inrange11506 +range11505: + call void @finch_panic_index(ptr @.str.7356, i64 287, i64 %t47, i64 %t49) unreachable -inrange11478: +inrange11506: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 %t53 = load i8, ptr %t52 %t54 = icmp eq i8 %t53, 9 - br label %logic.rend11479 -logic.rend11479: - br label %logic.end11472 -logic.end11472: - %t55 = phi i1 [ true, %logic.from11470 ], [ %t54, %logic.rend11479 ] - br label %logic.from11480 -logic.from11480: - br i1 %t55, label %logic.end11482, label %logic.rhs11481 -logic.rhs11481: + br label %logic.rend11507 +logic.rend11507: + br label %logic.end11500 +logic.end11500: + %t55 = phi i1 [ true, %logic.from11498 ], [ %t54, %logic.rend11507 ] + br label %logic.from11508 +logic.from11508: + br i1 %t55, label %logic.end11510, label %logic.rhs11509 +logic.rhs11509: %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null - br i1 %t57, label %panic11483, label %ok11484 -panic11483: - call void @finch_panic(ptr @.str.7342, i64 287, ptr @.str.7343) + br i1 %t57, label %panic11511, label %ok11512 +panic11511: + call void @finch_panic(ptr @.str.7357, i64 287, ptr @.str.7358) unreachable -ok11484: +ok11512: %t58 = getelementptr inbounds %S.json.Reader, ptr %t56, i32 0, i32 0 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic11485, label %ok11486 -panic11485: - call void @finch_panic(ptr @.str.7344, i64 287, ptr @.str.7345) + br i1 %t60, label %panic11513, label %ok11514 +panic11513: + call void @finch_panic(ptr @.str.7359, i64 287, ptr @.str.7360) unreachable -ok11486: +ok11514: %t61 = getelementptr inbounds %S.json.Reader, ptr %t59, i32 0, i32 1 %t62 = load i64, ptr %t61 %t63 = load { ptr, i64, i64 }, ptr %t58 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 - br i1 %t65, label %range11487, label %inrange11488 -range11487: - call void @finch_panic_index(ptr @.str.7346, i64 287, i64 %t62, i64 %t64) + br i1 %t65, label %range11515, label %inrange11516 +range11515: + call void @finch_panic_index(ptr @.str.7361, i64 287, i64 %t62, i64 %t64) unreachable -inrange11488: +inrange11516: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i8, ptr %t66, i64 %t62 %t68 = load i8, ptr %t67 %t69 = icmp eq i8 %t68, 13 - br label %logic.rend11489 -logic.rend11489: - br label %logic.end11482 -logic.end11482: - %t70 = phi i1 [ true, %logic.from11480 ], [ %t69, %logic.rend11489 ] - br label %logic.rend11490 -logic.rend11490: - br label %logic.end11453 -logic.end11453: - %t71 = phi i1 [ false, %logic.from11451 ], [ %t70, %logic.rend11490 ] - br i1 %t71, label %while.body11445, label %while.end11446 -while.body11445: + br label %logic.rend11517 +logic.rend11517: + br label %logic.end11510 +logic.end11510: + %t70 = phi i1 [ true, %logic.from11508 ], [ %t69, %logic.rend11517 ] + br label %logic.rend11518 +logic.rend11518: + br label %logic.end11481 +logic.end11481: + %t71 = phi i1 [ false, %logic.from11479 ], [ %t70, %logic.rend11518 ] + br i1 %t71, label %while.body11473, label %while.end11474 +while.body11473: %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null - br i1 %t73, label %panic11491, label %ok11492 -panic11491: - call void @finch_panic(ptr @.str.7347, i64 288, ptr @.str.7348) + br i1 %t73, label %panic11519, label %ok11520 +panic11519: + call void @finch_panic(ptr @.str.7362, i64 288, ptr @.str.7363) unreachable -ok11492: +ok11520: %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = add i64 %t75, 1 store i64 %t76, ptr %t74 - br label %while.cond11444 -while.end11446: + br label %while.cond11472 +while.end11474: ret void } @@ -115088,33 +115263,33 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic11493, label %ok11494 -panic11493: - call void @finch_panic(ptr @.str.7349, i64 293, ptr @.str.7350) + br i1 %t4, label %panic11521, label %ok11522 +panic11521: + call void @finch_panic(ptr @.str.7364, i64 293, ptr @.str.7365) unreachable -ok11494: +ok11522: %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic11495, label %ok11496 -panic11495: - call void @finch_panic(ptr @.str.7351, i64 293, ptr @.str.7352) + br i1 %t8, label %panic11523, label %ok11524 +panic11523: + call void @finch_panic(ptr @.str.7366, i64 293, ptr @.str.7367) unreachable -ok11496: +ok11524: %t9 = getelementptr inbounds %S.json.Reader, ptr %t7, i32 0, i32 0 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = icmp sge i64 %t6, %t11 - br i1 %t12, label %then11497, label %endif11499 -then11497: + br i1 %t12, label %then11525, label %endif11527 +then11525: %t13 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } { ptr @.str.7353, i64 26, i64 0 }, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.7368, i64 26, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a19 - store { ptr, i64, i64 } { ptr @.str.7354, i64 12, i64 0 }, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.7369, i64 12, i64 0 }, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t17, ptr %a21 call void @finch_str_drop(ptr %a21) @@ -115130,51 +115305,51 @@ then11497: call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t30, ptr %a32 - store { ptr, i64, i64 } { ptr @.str.7355, i64 1, i64 0 }, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.7370, i64 1, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t30, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 ret { ptr, i64, i64 } %t35 -endif11499: +endif11527: %t36 = load ptr, ptr %a1 %t37 = icmp eq ptr %t36, null - br i1 %t37, label %panic11500, label %ok11501 -panic11500: - call void @finch_panic(ptr @.str.7357, i64 296, ptr @.str.7358) + br i1 %t37, label %panic11528, label %ok11529 +panic11528: + call void @finch_panic(ptr @.str.7372, i64 296, ptr @.str.7373) unreachable -ok11501: +ok11529: %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic11502, label %ok11503 -panic11502: - call void @finch_panic(ptr @.str.7359, i64 296, ptr @.str.7360) + br i1 %t40, label %panic11530, label %ok11531 +panic11530: + call void @finch_panic(ptr @.str.7374, i64 296, ptr @.str.7375) unreachable -ok11503: +ok11531: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = load { ptr, i64, i64 }, ptr %t38 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 %t42, %t44 - br i1 %t45, label %range11504, label %inrange11505 -range11504: - call void @finch_panic_index(ptr @.str.7361, i64 296, i64 %t42, i64 %t44) + br i1 %t45, label %range11532, label %inrange11533 +range11532: + call void @finch_panic_index(ptr @.str.7376, i64 296, i64 %t42, i64 %t44) unreachable -inrange11505: +inrange11533: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 %t48 = load i8, ptr %t47 call void @finch_str_from_char(ptr %a49, i8 signext %t48) %t50 = load { ptr, i64, i64 }, ptr %a49 - store { ptr, i64, i64 } { ptr @.str.7356, i64 13, i64 0 }, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.7371, i64 13, i64 0 }, ptr %a52 store { ptr, i64, i64 } %t50, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t50, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 store { ptr, i64, i64 } %t55, ptr %a57 - store { ptr, i64, i64 } { ptr @.str.7362, i64 8, i64 0 }, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.7377, i64 8, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) store { ptr, i64, i64 } %t55, ptr %a59 call void @finch_str_drop(ptr %a59) @@ -115187,7 +115362,7 @@ inrange11505: call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t66, ptr %a68 - store { ptr, i64, i64 } { ptr @.str.7363, i64 12, i64 0 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.7378, i64 12, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) @@ -115203,7 +115378,7 @@ inrange11505: call void @finch_str_drop(ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t79, ptr %a81 - store { ptr, i64, i64 } { ptr @.str.7364, i64 1, i64 0 }, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.7379, i64 1, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) store { ptr, i64, i64 } %t79, ptr %a83 call void @finch_str_drop(ptr %a83) @@ -115224,63 +115399,63 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic11506, label %ok11507 -panic11506: - call void @finch_panic(ptr @.str.7365, i64 301, ptr @.str.7366) + br i1 %t4, label %panic11534, label %ok11535 +panic11534: + call void @finch_panic(ptr @.str.7380, i64 301, ptr @.str.7381) unreachable -ok11507: +ok11535: %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic11508, label %ok11509 -panic11508: - call void @finch_panic(ptr @.str.7367, i64 301, ptr @.str.7368) + br i1 %t9, label %panic11536, label %ok11537 +panic11536: + call void @finch_panic(ptr @.str.7382, i64 301, ptr @.str.7383) unreachable -ok11509: +ok11537: %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = sub i64 %t7, %t11 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t12, %t14 - br label %logic.from11510 -logic.from11510: - br i1 %t15, label %logic.rhs11511, label %logic.end11512 -logic.rhs11511: + br label %logic.from11538 +logic.from11538: + br i1 %t15, label %logic.rhs11539, label %logic.end11540 +logic.rhs11539: %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic11513, label %ok11514 -panic11513: - call void @finch_panic(ptr @.str.7369, i64 301, ptr @.str.7370) + br i1 %t17, label %panic11541, label %ok11542 +panic11541: + call void @finch_panic(ptr @.str.7384, i64 301, ptr @.str.7385) unreachable -ok11514: +ok11542: %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic11515, label %ok11516 -panic11515: - call void @finch_panic(ptr @.str.7372, i64 301, ptr @.str.7373) + br i1 %t23, label %panic11543, label %ok11544 +panic11543: + call void @finch_panic(ptr @.str.7387, i64 301, ptr @.str.7388) unreachable -ok11516: +ok11544: %t24 = getelementptr inbounds %S.json.Reader, ptr %t22, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic11517, label %ok11518 -panic11517: - call void @finch_panic(ptr @.str.7374, i64 301, ptr @.str.7375) + br i1 %t27, label %panic11545, label %ok11546 +panic11545: + call void @finch_panic(ptr @.str.7389, i64 301, ptr @.str.7390) unreachable -ok11518: +ok11546: %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 1 %t29 = load i64, ptr %t28 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t29, %t31 - call void @finch_str_sub(ptr %a21, ptr %a20, i64 %t25, i64 %t32, ptr @.str.7371, i64 301) + call void @finch_str_sub(ptr %a21, ptr %a20, i64 %t25, i64 %t32, ptr @.str.7386, i64 301) %t33 = load { ptr, i64, i64 }, ptr %a21 %t34 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t33, ptr %a35 @@ -115289,11 +115464,11 @@ ok11518: %t38 = icmp ne i32 %t37, 0 store { ptr, i64, i64 } %t33, ptr %a39 call void @finch_str_drop(ptr %a39) - br label %logic.rend11519 -logic.rend11519: - br label %logic.end11512 -logic.end11512: - %t40 = phi i1 [ false, %logic.from11510 ], [ %t38, %logic.rend11519 ] + br label %logic.rend11547 +logic.rend11547: + br label %logic.end11540 +logic.end11540: + %t40 = phi i1 [ false, %logic.from11538 ], [ %t38, %logic.rend11547 ] ret i1 %t40 } @@ -115315,16 +115490,16 @@ entry: %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call i1 @finch.json.comes(ptr %t3, { ptr, i64, i64 } %t4) %t6 = xor i1 %t5, true - br i1 %t6, label %then11520, label %endif11522 -then11520: + br i1 %t6, label %then11548, label %endif11550 +then11548: %t7 = load ptr, ptr %a1 %t8 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } { ptr @.str.7376, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.7391, i64 1, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t12, ptr %a14 - store { ptr, i64, i64 } { ptr @.str.7377, i64 1, i64 0 }, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.7392, i64 1, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) store { ptr, i64, i64 } %t12, ptr %a16 call void @finch_str_drop(ptr %a16) @@ -115334,16 +115509,16 @@ then11520: call void @finch_str_drop(ptr %a19) %t20 = insertvalue { i1, i8, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t18, 2 ret { i1, i8, { ptr, i64, i64 } } %t20 -endif11522: +endif11550: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic11523, label %ok11524 -panic11523: - call void @finch_panic(ptr @.str.7378, i64 308, ptr @.str.7379) + br i1 %t24, label %panic11551, label %ok11552 +panic11551: + call void @finch_panic(ptr @.str.7393, i64 308, ptr @.str.7394) unreachable -ok11524: +ok11552: %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = add i64 %t26, %t22 @@ -115357,69 +115532,69 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 - br label %logic.from11525 -logic.from11525: - br i1 %t3, label %logic.rhs11526, label %logic.end11527 -logic.rhs11526: + br label %logic.from11553 +logic.from11553: + br i1 %t3, label %logic.rhs11554, label %logic.end11555 +logic.rhs11554: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 - br label %logic.rend11528 -logic.rend11528: - br label %logic.end11527 -logic.end11527: - %t6 = phi i1 [ false, %logic.from11525 ], [ %t5, %logic.rend11528 ] - br i1 %t6, label %then11529, label %endif11531 -then11529: + br label %logic.rend11556 +logic.rend11556: + br label %logic.end11555 +logic.end11555: + %t6 = phi i1 [ false, %logic.from11553 ], [ %t5, %logic.rend11556 ] + br i1 %t6, label %then11557, label %endif11559 +then11557: %t7 = load i8, ptr %a1 %t8 = zext i8 %t7 to i64 %t9 = zext i8 48 to i64 %t10 = sub i64 %t8, %t9 ret i64 %t10 -endif11531: +endif11559: %t11 = load i8, ptr %a1 %t12 = icmp uge i8 %t11, 97 - br label %logic.from11532 -logic.from11532: - br i1 %t12, label %logic.rhs11533, label %logic.end11534 -logic.rhs11533: + br label %logic.from11560 +logic.from11560: + br i1 %t12, label %logic.rhs11561, label %logic.end11562 +logic.rhs11561: %t13 = load i8, ptr %a1 %t14 = icmp ule i8 %t13, 102 - br label %logic.rend11535 -logic.rend11535: - br label %logic.end11534 -logic.end11534: - %t15 = phi i1 [ false, %logic.from11532 ], [ %t14, %logic.rend11535 ] - br i1 %t15, label %then11536, label %endif11538 -then11536: + br label %logic.rend11563 +logic.rend11563: + br label %logic.end11562 +logic.end11562: + %t15 = phi i1 [ false, %logic.from11560 ], [ %t14, %logic.rend11563 ] + br i1 %t15, label %then11564, label %endif11566 +then11564: %t16 = load i8, ptr %a1 %t17 = zext i8 %t16 to i64 %t18 = zext i8 97 to i64 %t19 = sub i64 %t17, %t18 %t20 = add i64 %t19, 10 ret i64 %t20 -endif11538: +endif11566: %t21 = load i8, ptr %a1 %t22 = icmp uge i8 %t21, 65 - br label %logic.from11539 -logic.from11539: - br i1 %t22, label %logic.rhs11540, label %logic.end11541 -logic.rhs11540: + br label %logic.from11567 +logic.from11567: + br i1 %t22, label %logic.rhs11568, label %logic.end11569 +logic.rhs11568: %t23 = load i8, ptr %a1 %t24 = icmp ule i8 %t23, 70 - br label %logic.rend11542 -logic.rend11542: - br label %logic.end11541 -logic.end11541: - %t25 = phi i1 [ false, %logic.from11539 ], [ %t24, %logic.rend11542 ] - br i1 %t25, label %then11543, label %endif11545 -then11543: + br label %logic.rend11570 +logic.rend11570: + br label %logic.end11569 +logic.end11569: + %t25 = phi i1 [ false, %logic.from11567 ], [ %t24, %logic.rend11570 ] + br i1 %t25, label %then11571, label %endif11573 +then11571: %t26 = load i8, ptr %a1 %t27 = zext i8 %t26 to i64 %t28 = zext i8 65 to i64 %t29 = sub i64 %t27, %t28 %t30 = add i64 %t29, 10 ret i64 %t30 -endif11545: +endif11573: ret i64 -1 } @@ -115433,8 +115608,8 @@ entry: store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = load i64, ptr %a1 %t4 = icmp slt i64 %t3, 128 - br i1 %t4, label %then11546, label %else11547 -then11546: + br i1 %t4, label %then11574, label %else11575 +then11574: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t6 = load i64, ptr %a1 %t7 = trunc i64 %t6 to i8 @@ -115445,12 +115620,12 @@ then11546: %t11 = getelementptr inbounds i8, ptr %t10, i64 %t8 store i8 %t7, ptr %t11 store i64 %t9, ptr %t5 - br label %endif11548 -else11547: + br label %endif11576 +else11575: %t12 = load i64, ptr %a1 %t13 = icmp slt i64 %t12, 2048 - br i1 %t13, label %then11549, label %else11550 -then11549: + br i1 %t13, label %then11577, label %else11578 +then11577: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t15 = load i64, ptr %a1 %t16 = sdiv i64 %t15, 64 @@ -115475,12 +115650,12 @@ then11549: %t31 = getelementptr inbounds i8, ptr %t30, i64 %t28 store i8 %t27, ptr %t31 store i64 %t29, ptr %t23 - br label %endif11551 -else11550: + br label %endif11579 +else11578: %t32 = load i64, ptr %a1 %t33 = icmp slt i64 %t32, 65536 - br i1 %t33, label %then11552, label %else11553 -then11552: + br i1 %t33, label %then11580, label %else11581 +then11580: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t35 = load i64, ptr %a1 %t36 = sdiv i64 %t35, 4096 @@ -115518,8 +115693,8 @@ then11552: %t61 = getelementptr inbounds i8, ptr %t60, i64 %t58 store i8 %t57, ptr %t61 store i64 %t59, ptr %t53 - br label %endif11554 -else11553: + br label %endif11582 +else11581: %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t63 = load i64, ptr %a1 %t64 = sdiv i64 %t63, 262144 @@ -115570,12 +115745,12 @@ else11553: %t99 = getelementptr inbounds i8, ptr %t98, i64 %t96 store i8 %t95, ptr %t99 store i64 %t97, ptr %t91 - br label %endif11554 -endif11554: - br label %endif11551 -endif11551: - br label %endif11548 -endif11548: + br label %endif11582 +endif11582: + br label %endif11579 +endif11579: + br label %endif11576 +endif11576: %t100 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } zeroinitializer, ptr %a101 store { ptr, i64, i64 } %t100, ptr %a102 @@ -115593,105 +115768,105 @@ entry: store ptr %p0, ptr %a1 store i64 0, ptr %a2 store i64 0, ptr %a3 - br label %for.cond11555 -for.cond11555: + br label %for.cond11583 +for.cond11583: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, 4 - br i1 %t5, label %for.body11556, label %for.end11558 -for.body11556: + br i1 %t5, label %for.body11584, label %for.end11586 +for.body11584: %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic11559, label %ok11560 -panic11559: - call void @finch_panic(ptr @.str.7380, i64 348, ptr @.str.7381) + br i1 %t7, label %panic11587, label %ok11588 +panic11587: + call void @finch_panic(ptr @.str.7395, i64 348, ptr @.str.7396) unreachable -ok11560: +ok11588: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic11561, label %ok11562 -panic11561: - call void @finch_panic(ptr @.str.7382, i64 348, ptr @.str.7383) + br i1 %t11, label %panic11589, label %ok11590 +panic11589: + call void @finch_panic(ptr @.str.7397, i64 348, ptr @.str.7398) unreachable -ok11562: +ok11590: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t9, %t14 - br label %logic.from11563 -logic.from11563: - br i1 %t15, label %logic.end11565, label %logic.rhs11564 -logic.rhs11564: + br label %logic.from11591 +logic.from11591: + br i1 %t15, label %logic.end11593, label %logic.rhs11592 +logic.rhs11592: %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic11566, label %ok11567 -panic11566: - call void @finch_panic(ptr @.str.7384, i64 348, ptr @.str.7385) + br i1 %t17, label %panic11594, label %ok11595 +panic11594: + call void @finch_panic(ptr @.str.7399, i64 348, ptr @.str.7400) unreachable -ok11567: +ok11595: %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null - br i1 %t20, label %panic11568, label %ok11569 -panic11568: - call void @finch_panic(ptr @.str.7386, i64 348, ptr @.str.7387) + br i1 %t20, label %panic11596, label %ok11597 +panic11596: + call void @finch_panic(ptr @.str.7401, i64 348, ptr @.str.7402) unreachable -ok11569: +ok11597: %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t18 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 - br i1 %t25, label %range11570, label %inrange11571 -range11570: - call void @finch_panic_index(ptr @.str.7388, i64 348, i64 %t22, i64 %t24) + br i1 %t25, label %range11598, label %inrange11599 +range11598: + call void @finch_panic_index(ptr @.str.7403, i64 348, i64 %t22, i64 %t24) unreachable -inrange11571: +inrange11599: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds i8, ptr %t26, i64 %t22 %t28 = load i8, ptr %t27 %t29 = call i64 @finch.json.hex_value(i8 %t28) %t30 = icmp slt i64 %t29, 0 - br label %logic.rend11572 -logic.rend11572: - br label %logic.end11565 -logic.end11565: - %t31 = phi i1 [ true, %logic.from11563 ], [ %t30, %logic.rend11572 ] - br i1 %t31, label %then11573, label %endif11575 -then11573: + br label %logic.rend11600 +logic.rend11600: + br label %logic.end11593 +logic.end11593: + %t31 = phi i1 [ true, %logic.from11591 ], [ %t30, %logic.rend11600 ] + br i1 %t31, label %then11601, label %endif11603 +then11601: %t32 = load ptr, ptr %a1 - %t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.7389, i64 19, i64 0 }) + %t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.7404, i64 19, i64 0 }) %t34 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t33, 2 ret { i1, i64, { ptr, i64, i64 } } %t34 -endif11575: +endif11603: %t35 = load i64, ptr %a2 %t36 = mul i64 %t35, 16 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null - br i1 %t38, label %panic11576, label %ok11577 -panic11576: - call void @finch_panic(ptr @.str.7390, i64 351, ptr @.str.7391) + br i1 %t38, label %panic11604, label %ok11605 +panic11604: + call void @finch_panic(ptr @.str.7405, i64 351, ptr @.str.7406) unreachable -ok11577: +ok11605: %t39 = getelementptr inbounds %S.json.Reader, ptr %t37, i32 0, i32 0 %t40 = load ptr, ptr %a1 %t41 = icmp eq ptr %t40, null - br i1 %t41, label %panic11578, label %ok11579 -panic11578: - call void @finch_panic(ptr @.str.7392, i64 351, ptr @.str.7393) + br i1 %t41, label %panic11606, label %ok11607 +panic11606: + call void @finch_panic(ptr @.str.7407, i64 351, ptr @.str.7408) unreachable -ok11579: +ok11607: %t42 = getelementptr inbounds %S.json.Reader, ptr %t40, i32 0, i32 1 %t43 = load i64, ptr %t42 %t44 = load { ptr, i64, i64 }, ptr %t39 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 %t43, %t45 - br i1 %t46, label %range11580, label %inrange11581 -range11580: - call void @finch_panic_index(ptr @.str.7394, i64 351, i64 %t43, i64 %t45) + br i1 %t46, label %range11608, label %inrange11609 +range11608: + call void @finch_panic_index(ptr @.str.7409, i64 351, i64 %t43, i64 %t45) unreachable -inrange11581: +inrange11609: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 %t49 = load i8, ptr %t48 @@ -115700,22 +115875,22 @@ inrange11581: store i64 %t51, ptr %a2 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic11582, label %ok11583 -panic11582: - call void @finch_panic(ptr @.str.7395, i64 352, ptr @.str.7396) + br i1 %t53, label %panic11610, label %ok11611 +panic11610: + call void @finch_panic(ptr @.str.7410, i64 352, ptr @.str.7411) unreachable -ok11583: +ok11611: %t54 = getelementptr inbounds %S.json.Reader, ptr %t52, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = add i64 %t55, 1 store i64 %t56, ptr %t54 - br label %for.step11557 -for.step11557: + br label %for.step11585 +for.step11585: %t57 = load i64, ptr %a3 %t58 = add i64 %t57, 1 store i64 %t58, ptr %a3 - br label %for.cond11555 -for.end11558: + br label %for.cond11583 +for.end11586: %t59 = load i64, ptr %a2 %t60 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t61 = insertvalue { i1, i64, { ptr, i64, i64 } } %t60, i64 %t59, 1 @@ -115775,11 +115950,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic11584, label %ok11585 -panic11584: - call void @finch_panic(ptr @.str.7397, i64 358, ptr @.str.7398) + br i1 %t3, label %panic11612, label %ok11613 +panic11612: + call void @finch_panic(ptr @.str.7412, i64 358, ptr @.str.7413) unreachable -ok11585: +ok11613: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = add i64 %t5, 1 @@ -115787,50 +115962,50 @@ ok11585: store { ptr, i64, i64 } zeroinitializer, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic11586, label %ok11587 -panic11586: - call void @finch_panic(ptr @.str.7399, i64 360, ptr @.str.7400) + br i1 %t9, label %panic11614, label %ok11615 +panic11614: + call void @finch_panic(ptr @.str.7414, i64 360, ptr @.str.7415) unreachable -ok11587: +ok11615: %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 %t11 = load i64, ptr %t10 store i64 %t11, ptr %a12 - br label %while.cond11588 -while.cond11588: - br label %while.body11589 -while.body11589: + br label %while.cond11616 +while.cond11616: + br label %while.body11617 +while.body11617: %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic11591, label %ok11592 -panic11591: - call void @finch_panic(ptr @.str.7401, i64 362, ptr @.str.7402) + br i1 %t14, label %panic11619, label %ok11620 +panic11619: + call void @finch_panic(ptr @.str.7416, i64 362, ptr @.str.7417) unreachable -ok11592: +ok11620: %t15 = getelementptr inbounds %S.json.Reader, ptr %t13, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null - br i1 %t18, label %panic11593, label %ok11594 -panic11593: - call void @finch_panic(ptr @.str.7403, i64 362, ptr @.str.7404) + br i1 %t18, label %panic11621, label %ok11622 +panic11621: + call void @finch_panic(ptr @.str.7418, i64 362, ptr @.str.7419) unreachable -ok11594: +ok11622: %t19 = getelementptr inbounds %S.json.Reader, ptr %t17, i32 0, i32 0 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load i64, ptr %t20 %t22 = icmp sge i64 %t16, %t21 - br i1 %t22, label %then11595, label %endif11597 -then11595: + br i1 %t22, label %then11623, label %endif11625 +then11623: %t23 = load ptr, ptr %a1 %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) - store { ptr, i64, i64 } { ptr @.str.7405, i64 30, i64 0 }, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.7420, i64 30, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t29, ptr %a31 - store { ptr, i64, i64 } { ptr @.str.7406, i64 1, i64 0 }, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.7421, i64 1, i64 0 }, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) store { ptr, i64, i64 } %t29, ptr %a33 call void @finch_str_drop(ptr %a33) @@ -115838,62 +116013,62 @@ then11595: call void @finch.drop.arr_str(ptr %a7) %t35 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t34, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t35 -endif11597: +endif11625: %t36 = load ptr, ptr %a1 %t37 = icmp eq ptr %t36, null - br i1 %t37, label %panic11598, label %ok11599 -panic11598: - call void @finch_panic(ptr @.str.7407, i64 365, ptr @.str.7408) + br i1 %t37, label %panic11626, label %ok11627 +panic11626: + call void @finch_panic(ptr @.str.7422, i64 365, ptr @.str.7423) unreachable -ok11599: +ok11627: %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic11600, label %ok11601 -panic11600: - call void @finch_panic(ptr @.str.7409, i64 365, ptr @.str.7410) + br i1 %t40, label %panic11628, label %ok11629 +panic11628: + call void @finch_panic(ptr @.str.7424, i64 365, ptr @.str.7425) unreachable -ok11601: +ok11629: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = load { ptr, i64, i64 }, ptr %t38 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 %t42, %t44 - br i1 %t45, label %range11602, label %inrange11603 -range11602: - call void @finch_panic_index(ptr @.str.7411, i64 365, i64 %t42, i64 %t44) + br i1 %t45, label %range11630, label %inrange11631 +range11630: + call void @finch_panic_index(ptr @.str.7426, i64 365, i64 %t42, i64 %t44) unreachable -inrange11603: +inrange11631: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 %t48 = load i8, ptr %t47 store i8 %t48, ptr %a49 %t50 = load i8, ptr %a49 %t51 = icmp eq i8 %t50, 34 - br i1 %t51, label %then11604, label %endif11606 -then11604: + br i1 %t51, label %then11632, label %endif11634 +then11632: %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t53 = load ptr, ptr %a1 %t54 = icmp eq ptr %t53, null - br i1 %t54, label %panic11607, label %ok11608 -panic11607: - call void @finch_panic(ptr @.str.7412, i64 367, ptr @.str.7413) + br i1 %t54, label %panic11635, label %ok11636 +panic11635: + call void @finch_panic(ptr @.str.7427, i64 367, ptr @.str.7428) unreachable -ok11608: +ok11636: %t55 = getelementptr inbounds %S.json.Reader, ptr %t53, i32 0, i32 0 %t56 = load { ptr, i64, i64 }, ptr %t55 store { ptr, i64, i64 } %t56, ptr %a57 %t59 = load i64, ptr %a12 %t60 = load ptr, ptr %a1 %t61 = icmp eq ptr %t60, null - br i1 %t61, label %panic11609, label %ok11610 -panic11609: - call void @finch_panic(ptr @.str.7415, i64 367, ptr @.str.7416) + br i1 %t61, label %panic11637, label %ok11638 +panic11637: + call void @finch_panic(ptr @.str.7430, i64 367, ptr @.str.7431) unreachable -ok11610: +ok11638: %t62 = getelementptr inbounds %S.json.Reader, ptr %t60, i32 0, i32 1 %t63 = load i64, ptr %t62 - call void @finch_str_sub(ptr %a58, ptr %a57, i64 %t59, i64 %t63, ptr @.str.7414, i64 367) + call void @finch_str_sub(ptr %a58, ptr %a57, i64 %t59, i64 %t63, ptr @.str.7429, i64 367) %t64 = load { ptr, i64, i64 }, ptr %a58 %t65 = load i64, ptr %t52 %t66 = add i64 %t65, 1 @@ -115904,39 +116079,39 @@ ok11610: store i64 %t66, ptr %t52 %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null - br i1 %t70, label %panic11611, label %ok11612 -panic11611: - call void @finch_panic(ptr @.str.7417, i64 368, ptr @.str.7418) + br i1 %t70, label %panic11639, label %ok11640 +panic11639: + call void @finch_panic(ptr @.str.7432, i64 368, ptr @.str.7433) unreachable -ok11612: +ok11640: %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 1 %t72 = load i64, ptr %t71 %t73 = add i64 %t72, 1 store i64 %t73, ptr %t71 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.7419, i64 0, i64 0 }, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.7434, i64 0, i64 0 }, ptr %a75 call void @finch_str_join(ptr %a76, ptr %a7, ptr %a75) %t77 = load { ptr, i64, i64 }, ptr %a76 call void @finch.drop.arr_str(ptr %a7) %t78 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t79 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t78, { ptr, i64, i64 } %t77, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t79 -endif11606: +endif11634: %t80 = load i8, ptr %a49 %t81 = zext i8 %t80 to i64 %t82 = icmp slt i64 %t81, 32 - br i1 %t82, label %then11613, label %endif11615 -then11613: + br i1 %t82, label %then11641, label %endif11643 +then11641: %t83 = load ptr, ptr %a1 %t84 = call { ptr, i64, i64 } @finch.json.where(ptr %t83) - store { ptr, i64, i64 } { ptr @.str.7420, i64 55, i64 0 }, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.7435, i64 55, i64 0 }, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) store { ptr, i64, i64 } %t84, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t89, ptr %a91 - store { ptr, i64, i64 } { ptr @.str.7421, i64 1, i64 0 }, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.7436, i64 1, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) store { ptr, i64, i64 } %t89, ptr %a93 call void @finch_str_drop(ptr %a93) @@ -115944,46 +116119,46 @@ then11613: call void @finch.drop.arr_str(ptr %a7) %t95 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t94, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t95 -endif11615: +endif11643: %t96 = load i8, ptr %a49 %t97 = icmp ne i8 %t96, 92 - br i1 %t97, label %then11616, label %endif11618 -then11616: + br i1 %t97, label %then11644, label %endif11646 +then11644: %t98 = load ptr, ptr %a1 %t99 = icmp eq ptr %t98, null - br i1 %t99, label %panic11619, label %ok11620 -panic11619: - call void @finch_panic(ptr @.str.7422, i64 375, ptr @.str.7423) + br i1 %t99, label %panic11647, label %ok11648 +panic11647: + call void @finch_panic(ptr @.str.7437, i64 375, ptr @.str.7438) unreachable -ok11620: +ok11648: %t100 = getelementptr inbounds %S.json.Reader, ptr %t98, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = add i64 %t101, 1 store i64 %t102, ptr %t100 - br label %while.cond11588 -endif11618: + br label %while.cond11616 +endif11646: %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null - br i1 %t105, label %panic11621, label %ok11622 -panic11621: - call void @finch_panic(ptr @.str.7424, i64 378, ptr @.str.7425) + br i1 %t105, label %panic11649, label %ok11650 +panic11649: + call void @finch_panic(ptr @.str.7439, i64 378, ptr @.str.7440) unreachable -ok11622: +ok11650: %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 0 %t107 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t107, ptr %a108 %t110 = load i64, ptr %a12 %t111 = load ptr, ptr %a1 %t112 = icmp eq ptr %t111, null - br i1 %t112, label %panic11623, label %ok11624 -panic11623: - call void @finch_panic(ptr @.str.7427, i64 378, ptr @.str.7428) + br i1 %t112, label %panic11651, label %ok11652 +panic11651: + call void @finch_panic(ptr @.str.7442, i64 378, ptr @.str.7443) unreachable -ok11624: +ok11652: %t113 = getelementptr inbounds %S.json.Reader, ptr %t111, i32 0, i32 1 %t114 = load i64, ptr %t113 - call void @finch_str_sub(ptr %a109, ptr %a108, i64 %t110, i64 %t114, ptr @.str.7426, i64 378) + call void @finch_str_sub(ptr %a109, ptr %a108, i64 %t110, i64 %t114, ptr @.str.7441, i64 378) %t115 = load { ptr, i64, i64 }, ptr %a109 %t116 = load i64, ptr %t103 %t117 = add i64 %t116, 1 @@ -115994,11 +116169,11 @@ ok11624: store i64 %t117, ptr %t103 %t120 = load ptr, ptr %a1 %t121 = icmp eq ptr %t120, null - br i1 %t121, label %panic11625, label %ok11626 -panic11625: - call void @finch_panic(ptr @.str.7429, i64 379, ptr @.str.7430) + br i1 %t121, label %panic11653, label %ok11654 +panic11653: + call void @finch_panic(ptr @.str.7444, i64 379, ptr @.str.7445) unreachable -ok11626: +ok11654: %t122 = getelementptr inbounds %S.json.Reader, ptr %t120, i32 0, i32 1 %t123 = load i64, ptr %t122 %t124 = add i64 %t123, 1 @@ -116008,61 +116183,61 @@ ok11626: store i8 %t126, ptr %a127 %t128 = load ptr, ptr %a1 %t129 = icmp eq ptr %t128, null - br i1 %t129, label %panic11627, label %ok11628 -panic11627: - call void @finch_panic(ptr @.str.7431, i64 381, ptr @.str.7432) + br i1 %t129, label %panic11655, label %ok11656 +panic11655: + call void @finch_panic(ptr @.str.7446, i64 381, ptr @.str.7447) unreachable -ok11628: +ok11656: %t130 = getelementptr inbounds %S.json.Reader, ptr %t128, i32 0, i32 1 %t131 = load i64, ptr %t130 %t132 = add i64 %t131, 1 store i64 %t132, ptr %t130 %t133 = load i8, ptr %a127 %t134 = icmp eq i8 %t133, 110 - br i1 %t134, label %then11629, label %else11630 -then11629: + br i1 %t134, label %then11657, label %else11658 +then11657: %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = add i64 %t136, 1 call void @finch_arr_reserve(ptr %a7, i64 %t137, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t138 = load ptr, ptr %a7 %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i64 %t136 - store { ptr, i64, i64 } { ptr @.str.7433, i64 1, i64 0 }, ptr %t139 + store { ptr, i64, i64 } { ptr @.str.7448, i64 1, i64 0 }, ptr %t139 store i64 %t137, ptr %t135 - br label %endif11631 -else11630: + br label %endif11659 +else11658: %t140 = load i8, ptr %a127 %t141 = icmp eq i8 %t140, 116 - br i1 %t141, label %then11632, label %else11633 -then11632: + br i1 %t141, label %then11660, label %else11661 +then11660: %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t143 = load i64, ptr %t142 %t144 = add i64 %t143, 1 call void @finch_arr_reserve(ptr %a7, i64 %t144, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t145 = load ptr, ptr %a7 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 %t143 - store { ptr, i64, i64 } { ptr @.str.7434, i64 1, i64 0 }, ptr %t146 + store { ptr, i64, i64 } { ptr @.str.7449, i64 1, i64 0 }, ptr %t146 store i64 %t144, ptr %t142 - br label %endif11634 -else11633: + br label %endif11662 +else11661: %t147 = load i8, ptr %a127 %t148 = icmp eq i8 %t147, 114 - br i1 %t148, label %then11635, label %else11636 -then11635: + br i1 %t148, label %then11663, label %else11664 +then11663: %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t150 = load i64, ptr %t149 %t151 = add i64 %t150, 1 call void @finch_arr_reserve(ptr %a7, i64 %t151, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t152 = load ptr, ptr %a7 %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i64 %t150 - store { ptr, i64, i64 } { ptr @.str.7435, i64 1, i64 0 }, ptr %t153 + store { ptr, i64, i64 } { ptr @.str.7450, i64 1, i64 0 }, ptr %t153 store i64 %t151, ptr %t149 - br label %endif11637 -else11636: + br label %endif11665 +else11664: %t154 = load i8, ptr %a127 %t155 = icmp eq i8 %t154, 98 - br i1 %t155, label %then11638, label %else11639 -then11638: + br i1 %t155, label %then11666, label %else11667 +then11666: %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t157 = call { ptr, i64, i64 } @finch.json.utf8(i64 8) %t158 = load i64, ptr %t156 @@ -116072,12 +116247,12 @@ then11638: %t161 = getelementptr inbounds { ptr, i64, i64 }, ptr %t160, i64 %t158 store { ptr, i64, i64 } %t157, ptr %t161 store i64 %t159, ptr %t156 - br label %endif11640 -else11639: + br label %endif11668 +else11667: %t162 = load i8, ptr %a127 %t163 = icmp eq i8 %t162, 102 - br i1 %t163, label %then11641, label %else11642 -then11641: + br i1 %t163, label %then11669, label %else11670 +then11669: %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t165 = call { ptr, i64, i64 } @finch.json.utf8(i64 12) %t166 = load i64, ptr %t164 @@ -116087,34 +116262,34 @@ then11641: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t168, i64 %t166 store { ptr, i64, i64 } %t165, ptr %t169 store i64 %t167, ptr %t164 - br label %endif11643 -else11642: + br label %endif11671 +else11670: %t170 = load i8, ptr %a127 %t171 = icmp eq i8 %t170, 34 - br label %logic.from11644 -logic.from11644: - br i1 %t171, label %logic.end11646, label %logic.rhs11645 -logic.rhs11645: + br label %logic.from11672 +logic.from11672: + br i1 %t171, label %logic.end11674, label %logic.rhs11673 +logic.rhs11673: %t172 = load i8, ptr %a127 %t173 = icmp eq i8 %t172, 92 - br label %logic.rend11647 -logic.rend11647: - br label %logic.end11646 -logic.end11646: - %t174 = phi i1 [ true, %logic.from11644 ], [ %t173, %logic.rend11647 ] - br label %logic.from11648 -logic.from11648: - br i1 %t174, label %logic.end11650, label %logic.rhs11649 -logic.rhs11649: + br label %logic.rend11675 +logic.rend11675: + br label %logic.end11674 +logic.end11674: + %t174 = phi i1 [ true, %logic.from11672 ], [ %t173, %logic.rend11675 ] + br label %logic.from11676 +logic.from11676: + br i1 %t174, label %logic.end11678, label %logic.rhs11677 +logic.rhs11677: %t175 = load i8, ptr %a127 %t176 = icmp eq i8 %t175, 47 - br label %logic.rend11651 -logic.rend11651: - br label %logic.end11650 -logic.end11650: - %t177 = phi i1 [ true, %logic.from11648 ], [ %t176, %logic.rend11651 ] - br i1 %t177, label %then11652, label %else11653 -then11652: + br label %logic.rend11679 +logic.rend11679: + br label %logic.end11678 +logic.end11678: + %t177 = phi i1 [ true, %logic.from11676 ], [ %t176, %logic.rend11679 ] + br i1 %t177, label %then11680, label %else11681 +then11680: %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t179 = load i8, ptr %a127 call void @finch_str_from_char(ptr %a180, i8 signext %t179) @@ -116126,58 +116301,58 @@ then11652: %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 store { ptr, i64, i64 } %t181, ptr %t185 store i64 %t183, ptr %t178 - br label %endif11654 -else11653: + br label %endif11682 +else11681: %t186 = load i8, ptr %a127 %t187 = icmp eq i8 %t186, 117 - br i1 %t187, label %then11655, label %else11656 -then11655: + br i1 %t187, label %then11683, label %else11684 +then11683: %t188 = load ptr, ptr %a1 %t189 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t188) %t190 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 0 %t191 = xor i1 %t190, true %t192 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 2 %t193 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 1 - br i1 %t191, label %try.failed11658, label %try.ok11659 -try.failed11658: + br i1 %t191, label %try.failed11686, label %try.ok11687 +try.failed11686: call void @finch.drop.arr_str(ptr %a7) %t194 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t192, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t194 -try.ok11659: +try.ok11687: store i64 %t193, ptr %a195 %t196 = load i64, ptr %a195 %t197 = icmp sge i64 %t196, 55296 - br label %logic.from11660 -logic.from11660: - br i1 %t197, label %logic.rhs11661, label %logic.end11662 -logic.rhs11661: + br label %logic.from11688 +logic.from11688: + br i1 %t197, label %logic.rhs11689, label %logic.end11690 +logic.rhs11689: %t198 = load i64, ptr %a195 %t199 = icmp slt i64 %t198, 56320 - br label %logic.rend11663 -logic.rend11663: - br label %logic.end11662 -logic.end11662: - %t200 = phi i1 [ false, %logic.from11660 ], [ %t199, %logic.rend11663 ] - br label %logic.from11664 -logic.from11664: - br i1 %t200, label %logic.rhs11665, label %logic.end11666 -logic.rhs11665: + br label %logic.rend11691 +logic.rend11691: + br label %logic.end11690 +logic.end11690: + %t200 = phi i1 [ false, %logic.from11688 ], [ %t199, %logic.rend11691 ] + br label %logic.from11692 +logic.from11692: + br i1 %t200, label %logic.rhs11693, label %logic.end11694 +logic.rhs11693: %t201 = load ptr, ptr %a1 - %t202 = call i1 @finch.json.comes(ptr %t201, { ptr, i64, i64 } { ptr @.str.7436, i64 2, i64 0 }) - br label %logic.rend11667 -logic.rend11667: - br label %logic.end11666 -logic.end11666: - %t203 = phi i1 [ false, %logic.from11664 ], [ %t202, %logic.rend11667 ] - br i1 %t203, label %then11668, label %endif11670 -then11668: + %t202 = call i1 @finch.json.comes(ptr %t201, { ptr, i64, i64 } { ptr @.str.7451, i64 2, i64 0 }) + br label %logic.rend11695 +logic.rend11695: + br label %logic.end11694 +logic.end11694: + %t203 = phi i1 [ false, %logic.from11692 ], [ %t202, %logic.rend11695 ] + br i1 %t203, label %then11696, label %endif11698 +then11696: %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null - br i1 %t205, label %panic11671, label %ok11672 -panic11671: - call void @finch_panic(ptr @.str.7437, i64 398, ptr @.str.7438) + br i1 %t205, label %panic11699, label %ok11700 +panic11699: + call void @finch_panic(ptr @.str.7452, i64 398, ptr @.str.7453) unreachable -ok11672: +ok11700: %t206 = getelementptr inbounds %S.json.Reader, ptr %t204, i32 0, i32 1 %t207 = load i64, ptr %t206 %t208 = add i64 %t207, 2 @@ -116188,12 +116363,12 @@ ok11672: %t212 = xor i1 %t211, true %t213 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 2 %t214 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 1 - br i1 %t212, label %try.failed11673, label %try.ok11674 -try.failed11673: + br i1 %t212, label %try.failed11701, label %try.ok11702 +try.failed11701: call void @finch.drop.arr_str(ptr %a7) %t215 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t213, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t215 -try.ok11674: +try.ok11702: store i64 %t214, ptr %a216 %t217 = load i64, ptr %a195 %t218 = sub i64 %t217, 55296 @@ -116203,8 +116378,8 @@ try.ok11674: %t222 = sub i64 %t221, 56320 %t223 = add i64 %t220, %t222 store i64 %t223, ptr %a195 - br label %endif11670 -endif11670: + br label %endif11698 +endif11698: %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t225 = load i64, ptr %a195 %t226 = call { ptr, i64, i64 } @finch.json.utf8(i64 %t225) @@ -116215,19 +116390,19 @@ endif11670: %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i64 %t227 store { ptr, i64, i64 } %t226, ptr %t230 store i64 %t228, ptr %t224 - br label %endif11657 -else11656: + br label %endif11685 +else11684: %t231 = load i8, ptr %a127 call void @finch_str_from_char(ptr %a232, i8 signext %t231) %t233 = load { ptr, i64, i64 }, ptr %a232 - store { ptr, i64, i64 } { ptr @.str.7439, i64 22, i64 0 }, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.7454, i64 22, i64 0 }, ptr %a235 store { ptr, i64, i64 } %t233, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) store { ptr, i64, i64 } %t233, ptr %a237 call void @finch_str_drop(ptr %a237) %t238 = load { ptr, i64, i64 }, ptr %a234 store { ptr, i64, i64 } %t238, ptr %a240 - store { ptr, i64, i64 } { ptr @.str.7440, i64 12, i64 0 }, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.7455, i64 12, i64 0 }, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) store { ptr, i64, i64 } %t238, ptr %a242 call void @finch_str_drop(ptr %a242) @@ -116243,7 +116418,7 @@ else11656: call void @finch_str_drop(ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t251, ptr %a253 - store { ptr, i64, i64 } { ptr @.str.7441, i64 1, i64 0 }, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.7456, i64 1, i64 0 }, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) store { ptr, i64, i64 } %t251, ptr %a255 call void @finch_str_drop(ptr %a255) @@ -116251,30 +116426,30 @@ else11656: call void @finch.drop.arr_str(ptr %a7) %t257 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t256, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t257 -endif11657: - br label %endif11654 -endif11654: - br label %endif11643 -endif11643: - br label %endif11640 -endif11640: - br label %endif11637 -endif11637: - br label %endif11634 -endif11634: - br label %endif11631 -endif11631: +endif11685: + br label %endif11682 +endif11682: + br label %endif11671 +endif11671: + br label %endif11668 +endif11668: + br label %endif11665 +endif11665: + br label %endif11662 +endif11662: + br label %endif11659 +endif11659: %t258 = load ptr, ptr %a1 %t259 = icmp eq ptr %t258, null - br i1 %t259, label %panic11675, label %ok11676 -panic11675: - call void @finch_panic(ptr @.str.7442, i64 406, ptr @.str.7443) + br i1 %t259, label %panic11703, label %ok11704 +panic11703: + call void @finch_panic(ptr @.str.7457, i64 406, ptr @.str.7458) unreachable -ok11676: +ok11704: %t260 = getelementptr inbounds %S.json.Reader, ptr %t258, i32 0, i32 1 %t261 = load i64, ptr %t260 store i64 %t261, ptr %a12 - br label %while.cond11588 + br label %while.cond11616 } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %p0) { @@ -116292,356 +116467,356 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic11677, label %ok11678 -panic11677: - call void @finch_panic(ptr @.str.7444, i64 411, ptr @.str.7445) + br i1 %t3, label %panic11705, label %ok11706 +panic11705: + call void @finch_panic(ptr @.str.7459, i64 411, ptr @.str.7460) unreachable -ok11678: +ok11706: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 %t5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = call i8 @finch.json.peek(ptr %t7) %t9 = icmp eq i8 %t8, 45 - br i1 %t9, label %then11679, label %endif11681 -then11679: + br i1 %t9, label %then11707, label %endif11709 +then11707: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic11682, label %ok11683 -panic11682: - call void @finch_panic(ptr @.str.7446, i64 413, ptr @.str.7447) + br i1 %t11, label %panic11710, label %ok11711 +panic11710: + call void @finch_panic(ptr @.str.7461, i64 413, ptr @.str.7462) unreachable -ok11683: +ok11711: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 store i64 %t14, ptr %t12 - br label %endif11681 -endif11681: - br label %while.cond11684 -while.cond11684: + br label %endif11709 +endif11709: + br label %while.cond11712 +while.cond11712: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic11687, label %ok11688 -panic11687: - call void @finch_panic(ptr @.str.7448, i64 415, ptr @.str.7449) + br i1 %t16, label %panic11715, label %ok11716 +panic11715: + call void @finch_panic(ptr @.str.7463, i64 415, ptr @.str.7464) unreachable -ok11688: +ok11716: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null - br i1 %t20, label %panic11689, label %ok11690 -panic11689: - call void @finch_panic(ptr @.str.7450, i64 415, ptr @.str.7451) + br i1 %t20, label %panic11717, label %ok11718 +panic11717: + call void @finch_panic(ptr @.str.7465, i64 415, ptr @.str.7466) unreachable -ok11690: +ok11718: %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 0 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp slt i64 %t18, %t23 - br label %logic.from11691 -logic.from11691: - br i1 %t24, label %logic.rhs11692, label %logic.end11693 -logic.rhs11692: + br label %logic.from11719 +logic.from11719: + br i1 %t24, label %logic.rhs11720, label %logic.end11721 +logic.rhs11720: %t25 = load ptr, ptr %a1 %t26 = icmp eq ptr %t25, null - br i1 %t26, label %panic11694, label %ok11695 -panic11694: - call void @finch_panic(ptr @.str.7452, i64 415, ptr @.str.7453) + br i1 %t26, label %panic11722, label %ok11723 +panic11722: + call void @finch_panic(ptr @.str.7467, i64 415, ptr @.str.7468) unreachable -ok11695: +ok11723: %t27 = getelementptr inbounds %S.json.Reader, ptr %t25, i32 0, i32 0 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic11696, label %ok11697 -panic11696: - call void @finch_panic(ptr @.str.7454, i64 415, ptr @.str.7455) + br i1 %t29, label %panic11724, label %ok11725 +panic11724: + call void @finch_panic(ptr @.str.7469, i64 415, ptr @.str.7470) unreachable -ok11697: +ok11725: %t30 = getelementptr inbounds %S.json.Reader, ptr %t28, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = load { ptr, i64, i64 }, ptr %t27 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range11698, label %inrange11699 -range11698: - call void @finch_panic_index(ptr @.str.7456, i64 415, i64 %t31, i64 %t33) + br i1 %t34, label %range11726, label %inrange11727 +range11726: + call void @finch_panic_index(ptr @.str.7471, i64 415, i64 %t31, i64 %t33) unreachable -inrange11699: +inrange11727: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds i8, ptr %t35, i64 %t31 %t37 = load i8, ptr %t36 %t38 = icmp uge i8 %t37, 48 - br label %logic.from11700 -logic.from11700: - br i1 %t38, label %logic.rhs11701, label %logic.end11702 -logic.rhs11701: + br label %logic.from11728 +logic.from11728: + br i1 %t38, label %logic.rhs11729, label %logic.end11730 +logic.rhs11729: %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic11703, label %ok11704 -panic11703: - call void @finch_panic(ptr @.str.7457, i64 415, ptr @.str.7458) + br i1 %t40, label %panic11731, label %ok11732 +panic11731: + call void @finch_panic(ptr @.str.7472, i64 415, ptr @.str.7473) unreachable -ok11704: +ok11732: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 0 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null - br i1 %t43, label %panic11705, label %ok11706 -panic11705: - call void @finch_panic(ptr @.str.7459, i64 415, ptr @.str.7460) + br i1 %t43, label %panic11733, label %ok11734 +panic11733: + call void @finch_panic(ptr @.str.7474, i64 415, ptr @.str.7475) unreachable -ok11706: +ok11734: %t44 = getelementptr inbounds %S.json.Reader, ptr %t42, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = load { ptr, i64, i64 }, ptr %t41 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 %t45, %t47 - br i1 %t48, label %range11707, label %inrange11708 -range11707: - call void @finch_panic_index(ptr @.str.7461, i64 415, i64 %t45, i64 %t47) + br i1 %t48, label %range11735, label %inrange11736 +range11735: + call void @finch_panic_index(ptr @.str.7476, i64 415, i64 %t45, i64 %t47) unreachable -inrange11708: +inrange11736: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds i8, ptr %t49, i64 %t45 %t51 = load i8, ptr %t50 %t52 = icmp ule i8 %t51, 57 - br label %logic.rend11709 -logic.rend11709: - br label %logic.end11702 -logic.end11702: - %t53 = phi i1 [ false, %logic.from11700 ], [ %t52, %logic.rend11709 ] - br label %logic.from11710 -logic.from11710: - br i1 %t53, label %logic.end11712, label %logic.rhs11711 -logic.rhs11711: + br label %logic.rend11737 +logic.rend11737: + br label %logic.end11730 +logic.end11730: + %t53 = phi i1 [ false, %logic.from11728 ], [ %t52, %logic.rend11737 ] + br label %logic.from11738 +logic.from11738: + br i1 %t53, label %logic.end11740, label %logic.rhs11739 +logic.rhs11739: %t54 = load ptr, ptr %a1 %t55 = icmp eq ptr %t54, null - br i1 %t55, label %panic11713, label %ok11714 -panic11713: - call void @finch_panic(ptr @.str.7462, i64 415, ptr @.str.7463) + br i1 %t55, label %panic11741, label %ok11742 +panic11741: + call void @finch_panic(ptr @.str.7477, i64 415, ptr @.str.7478) unreachable -ok11714: +ok11742: %t56 = getelementptr inbounds %S.json.Reader, ptr %t54, i32 0, i32 0 %t57 = load ptr, ptr %a1 %t58 = icmp eq ptr %t57, null - br i1 %t58, label %panic11715, label %ok11716 -panic11715: - call void @finch_panic(ptr @.str.7464, i64 415, ptr @.str.7465) + br i1 %t58, label %panic11743, label %ok11744 +panic11743: + call void @finch_panic(ptr @.str.7479, i64 415, ptr @.str.7480) unreachable -ok11716: +ok11744: %t59 = getelementptr inbounds %S.json.Reader, ptr %t57, i32 0, i32 1 %t60 = load i64, ptr %t59 %t61 = load { ptr, i64, i64 }, ptr %t56 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 %t60, %t62 - br i1 %t63, label %range11717, label %inrange11718 -range11717: - call void @finch_panic_index(ptr @.str.7466, i64 415, i64 %t60, i64 %t62) + br i1 %t63, label %range11745, label %inrange11746 +range11745: + call void @finch_panic_index(ptr @.str.7481, i64 415, i64 %t60, i64 %t62) unreachable -inrange11718: +inrange11746: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 %t66 = load i8, ptr %t65 %t67 = icmp eq i8 %t66, 46 - br label %logic.rend11719 -logic.rend11719: - br label %logic.end11712 -logic.end11712: - %t68 = phi i1 [ true, %logic.from11710 ], [ %t67, %logic.rend11719 ] - br label %logic.from11720 -logic.from11720: - br i1 %t68, label %logic.end11722, label %logic.rhs11721 -logic.rhs11721: + br label %logic.rend11747 +logic.rend11747: + br label %logic.end11740 +logic.end11740: + %t68 = phi i1 [ true, %logic.from11738 ], [ %t67, %logic.rend11747 ] + br label %logic.from11748 +logic.from11748: + br i1 %t68, label %logic.end11750, label %logic.rhs11749 +logic.rhs11749: %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null - br i1 %t70, label %panic11723, label %ok11724 -panic11723: - call void @finch_panic(ptr @.str.7467, i64 415, ptr @.str.7468) + br i1 %t70, label %panic11751, label %ok11752 +panic11751: + call void @finch_panic(ptr @.str.7482, i64 415, ptr @.str.7483) unreachable -ok11724: +ok11752: %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 0 %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null - br i1 %t73, label %panic11725, label %ok11726 -panic11725: - call void @finch_panic(ptr @.str.7469, i64 415, ptr @.str.7470) + br i1 %t73, label %panic11753, label %ok11754 +panic11753: + call void @finch_panic(ptr @.str.7484, i64 415, ptr @.str.7485) unreachable -ok11726: +ok11754: %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = load { ptr, i64, i64 }, ptr %t71 %t77 = extractvalue { ptr, i64, i64 } %t76, 1 %t78 = icmp uge i64 %t75, %t77 - br i1 %t78, label %range11727, label %inrange11728 -range11727: - call void @finch_panic_index(ptr @.str.7471, i64 415, i64 %t75, i64 %t77) + br i1 %t78, label %range11755, label %inrange11756 +range11755: + call void @finch_panic_index(ptr @.str.7486, i64 415, i64 %t75, i64 %t77) unreachable -inrange11728: +inrange11756: %t79 = extractvalue { ptr, i64, i64 } %t76, 0 %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 %t81 = load i8, ptr %t80 %t82 = icmp eq i8 %t81, 101 - br label %logic.rend11729 -logic.rend11729: - br label %logic.end11722 -logic.end11722: - %t83 = phi i1 [ true, %logic.from11720 ], [ %t82, %logic.rend11729 ] - br label %logic.from11730 -logic.from11730: - br i1 %t83, label %logic.end11732, label %logic.rhs11731 -logic.rhs11731: + br label %logic.rend11757 +logic.rend11757: + br label %logic.end11750 +logic.end11750: + %t83 = phi i1 [ true, %logic.from11748 ], [ %t82, %logic.rend11757 ] + br label %logic.from11758 +logic.from11758: + br i1 %t83, label %logic.end11760, label %logic.rhs11759 +logic.rhs11759: %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null - br i1 %t85, label %panic11733, label %ok11734 -panic11733: - call void @finch_panic(ptr @.str.7472, i64 415, ptr @.str.7473) + br i1 %t85, label %panic11761, label %ok11762 +panic11761: + call void @finch_panic(ptr @.str.7487, i64 415, ptr @.str.7488) unreachable -ok11734: +ok11762: %t86 = getelementptr inbounds %S.json.Reader, ptr %t84, i32 0, i32 0 %t87 = load ptr, ptr %a1 %t88 = icmp eq ptr %t87, null - br i1 %t88, label %panic11735, label %ok11736 -panic11735: - call void @finch_panic(ptr @.str.7474, i64 415, ptr @.str.7475) + br i1 %t88, label %panic11763, label %ok11764 +panic11763: + call void @finch_panic(ptr @.str.7489, i64 415, ptr @.str.7490) unreachable -ok11736: +ok11764: %t89 = getelementptr inbounds %S.json.Reader, ptr %t87, i32 0, i32 1 %t90 = load i64, ptr %t89 %t91 = load { ptr, i64, i64 }, ptr %t86 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 - br i1 %t93, label %range11737, label %inrange11738 -range11737: - call void @finch_panic_index(ptr @.str.7476, i64 415, i64 %t90, i64 %t92) + br i1 %t93, label %range11765, label %inrange11766 +range11765: + call void @finch_panic_index(ptr @.str.7491, i64 415, i64 %t90, i64 %t92) unreachable -inrange11738: +inrange11766: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds i8, ptr %t94, i64 %t90 %t96 = load i8, ptr %t95 %t97 = icmp eq i8 %t96, 69 - br label %logic.rend11739 -logic.rend11739: - br label %logic.end11732 -logic.end11732: - %t98 = phi i1 [ true, %logic.from11730 ], [ %t97, %logic.rend11739 ] - br label %logic.from11740 -logic.from11740: - br i1 %t98, label %logic.end11742, label %logic.rhs11741 -logic.rhs11741: + br label %logic.rend11767 +logic.rend11767: + br label %logic.end11760 +logic.end11760: + %t98 = phi i1 [ true, %logic.from11758 ], [ %t97, %logic.rend11767 ] + br label %logic.from11768 +logic.from11768: + br i1 %t98, label %logic.end11770, label %logic.rhs11769 +logic.rhs11769: %t99 = load ptr, ptr %a1 %t100 = icmp eq ptr %t99, null - br i1 %t100, label %panic11743, label %ok11744 -panic11743: - call void @finch_panic(ptr @.str.7477, i64 415, ptr @.str.7478) + br i1 %t100, label %panic11771, label %ok11772 +panic11771: + call void @finch_panic(ptr @.str.7492, i64 415, ptr @.str.7493) unreachable -ok11744: +ok11772: %t101 = getelementptr inbounds %S.json.Reader, ptr %t99, i32 0, i32 0 %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null - br i1 %t103, label %panic11745, label %ok11746 -panic11745: - call void @finch_panic(ptr @.str.7479, i64 415, ptr @.str.7480) + br i1 %t103, label %panic11773, label %ok11774 +panic11773: + call void @finch_panic(ptr @.str.7494, i64 415, ptr @.str.7495) unreachable -ok11746: +ok11774: %t104 = getelementptr inbounds %S.json.Reader, ptr %t102, i32 0, i32 1 %t105 = load i64, ptr %t104 %t106 = load { ptr, i64, i64 }, ptr %t101 %t107 = extractvalue { ptr, i64, i64 } %t106, 1 %t108 = icmp uge i64 %t105, %t107 - br i1 %t108, label %range11747, label %inrange11748 -range11747: - call void @finch_panic_index(ptr @.str.7481, i64 415, i64 %t105, i64 %t107) + br i1 %t108, label %range11775, label %inrange11776 +range11775: + call void @finch_panic_index(ptr @.str.7496, i64 415, i64 %t105, i64 %t107) unreachable -inrange11748: +inrange11776: %t109 = extractvalue { ptr, i64, i64 } %t106, 0 %t110 = getelementptr inbounds i8, ptr %t109, i64 %t105 %t111 = load i8, ptr %t110 %t112 = icmp eq i8 %t111, 43 - br label %logic.rend11749 -logic.rend11749: - br label %logic.end11742 -logic.end11742: - %t113 = phi i1 [ true, %logic.from11740 ], [ %t112, %logic.rend11749 ] - br label %logic.from11750 -logic.from11750: - br i1 %t113, label %logic.end11752, label %logic.rhs11751 -logic.rhs11751: + br label %logic.rend11777 +logic.rend11777: + br label %logic.end11770 +logic.end11770: + %t113 = phi i1 [ true, %logic.from11768 ], [ %t112, %logic.rend11777 ] + br label %logic.from11778 +logic.from11778: + br i1 %t113, label %logic.end11780, label %logic.rhs11779 +logic.rhs11779: %t114 = load ptr, ptr %a1 %t115 = icmp eq ptr %t114, null - br i1 %t115, label %panic11753, label %ok11754 -panic11753: - call void @finch_panic(ptr @.str.7482, i64 415, ptr @.str.7483) + br i1 %t115, label %panic11781, label %ok11782 +panic11781: + call void @finch_panic(ptr @.str.7497, i64 415, ptr @.str.7498) unreachable -ok11754: +ok11782: %t116 = getelementptr inbounds %S.json.Reader, ptr %t114, i32 0, i32 0 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null - br i1 %t118, label %panic11755, label %ok11756 -panic11755: - call void @finch_panic(ptr @.str.7484, i64 415, ptr @.str.7485) + br i1 %t118, label %panic11783, label %ok11784 +panic11783: + call void @finch_panic(ptr @.str.7499, i64 415, ptr @.str.7500) unreachable -ok11756: +ok11784: %t119 = getelementptr inbounds %S.json.Reader, ptr %t117, i32 0, i32 1 %t120 = load i64, ptr %t119 %t121 = load { ptr, i64, i64 }, ptr %t116 %t122 = extractvalue { ptr, i64, i64 } %t121, 1 %t123 = icmp uge i64 %t120, %t122 - br i1 %t123, label %range11757, label %inrange11758 -range11757: - call void @finch_panic_index(ptr @.str.7486, i64 415, i64 %t120, i64 %t122) + br i1 %t123, label %range11785, label %inrange11786 +range11785: + call void @finch_panic_index(ptr @.str.7501, i64 415, i64 %t120, i64 %t122) unreachable -inrange11758: +inrange11786: %t124 = extractvalue { ptr, i64, i64 } %t121, 0 %t125 = getelementptr inbounds i8, ptr %t124, i64 %t120 %t126 = load i8, ptr %t125 %t127 = icmp eq i8 %t126, 45 - br label %logic.rend11759 -logic.rend11759: - br label %logic.end11752 -logic.end11752: - %t128 = phi i1 [ true, %logic.from11750 ], [ %t127, %logic.rend11759 ] - br label %logic.rend11760 -logic.rend11760: - br label %logic.end11693 -logic.end11693: - %t129 = phi i1 [ false, %logic.from11691 ], [ %t128, %logic.rend11760 ] - br i1 %t129, label %while.body11685, label %while.end11686 -while.body11685: + br label %logic.rend11787 +logic.rend11787: + br label %logic.end11780 +logic.end11780: + %t128 = phi i1 [ true, %logic.from11778 ], [ %t127, %logic.rend11787 ] + br label %logic.rend11788 +logic.rend11788: + br label %logic.end11721 +logic.end11721: + %t129 = phi i1 [ false, %logic.from11719 ], [ %t128, %logic.rend11788 ] + br i1 %t129, label %while.body11713, label %while.end11714 +while.body11713: %t130 = load ptr, ptr %a1 %t131 = icmp eq ptr %t130, null - br i1 %t131, label %panic11761, label %ok11762 -panic11761: - call void @finch_panic(ptr @.str.7487, i64 416, ptr @.str.7488) + br i1 %t131, label %panic11789, label %ok11790 +panic11789: + call void @finch_panic(ptr @.str.7502, i64 416, ptr @.str.7503) unreachable -ok11762: +ok11790: %t132 = getelementptr inbounds %S.json.Reader, ptr %t130, i32 0, i32 1 %t133 = load i64, ptr %t132 %t134 = add i64 %t133, 1 store i64 %t134, ptr %t132 - br label %while.cond11684 -while.end11686: + br label %while.cond11712 +while.end11714: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null - br i1 %t136, label %panic11763, label %ok11764 -panic11763: - call void @finch_panic(ptr @.str.7489, i64 418, ptr @.str.7490) + br i1 %t136, label %panic11791, label %ok11792 +panic11791: + call void @finch_panic(ptr @.str.7504, i64 418, ptr @.str.7505) unreachable -ok11764: +ok11792: %t137 = getelementptr inbounds %S.json.Reader, ptr %t135, i32 0, i32 0 %t138 = load { ptr, i64, i64 }, ptr %t137 store { ptr, i64, i64 } %t138, ptr %a139 %t141 = load i64, ptr %a6 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic11765, label %ok11766 -panic11765: - call void @finch_panic(ptr @.str.7492, i64 418, ptr @.str.7493) + br i1 %t143, label %panic11793, label %ok11794 +panic11793: + call void @finch_panic(ptr @.str.7507, i64 418, ptr @.str.7508) unreachable -ok11766: +ok11794: %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 %t145 = load i64, ptr %t144 - call void @finch_str_sub(ptr %a140, ptr %a139, i64 %t141, i64 %t145, ptr @.str.7491, i64 418) + call void @finch_str_sub(ptr %a140, ptr %a139, i64 %t141, i64 %t145, ptr @.str.7506, i64 418) %t146 = load { ptr, i64, i64 }, ptr %a140 store { ptr, i64, i64 } zeroinitializer, ptr %a147 store double 0.0, ptr %a148 @@ -116652,25 +116827,25 @@ ok11766: store { ptr, i64, i64 } %t146, ptr %a153 call void @finch_str_drop(ptr %a153) %t154 = load double, ptr %a148 - br i1 %t151, label %or.failed11767, label %or.ok11768 -or.failed11767: + br i1 %t151, label %or.failed11795, label %or.ok11796 +or.failed11795: store { ptr, i64, i64 } %t152, ptr %a155 %t156 = load i64, ptr %a6 %t157 = load ptr, ptr %a1 %t158 = icmp eq ptr %t157, null - br i1 %t158, label %panic11769, label %ok11770 -panic11769: - call void @finch_panic(ptr @.str.7494, i64 419, ptr @.str.7495) + br i1 %t158, label %panic11797, label %ok11798 +panic11797: + call void @finch_panic(ptr @.str.7509, i64 419, ptr @.str.7510) unreachable -ok11770: +ok11798: %t159 = getelementptr inbounds %S.json.Reader, ptr %t157, i32 0, i32 1 store i64 %t156, ptr %t159 %t160 = load ptr, ptr %a1 - %t161 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t160, { ptr, i64, i64 } { ptr @.str.7496, i64 8, i64 0 }) + %t161 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t160, { ptr, i64, i64 } { ptr @.str.7511, i64 8, i64 0 }) call void @finch_str_drop(ptr %a155) %t162 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t161, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t162 -or.ok11768: +or.ok11796: store double %t154, ptr %a163 %t164 = load double, ptr %a163 %t165 = call %S.json.Json @finch.json.new_number(double %t164) @@ -116697,44 +116872,44 @@ entry: store i8 %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic11771, label %ok11772 -panic11771: - call void @finch_panic(ptr @.str.7497, i64 428, ptr @.str.7498) + br i1 %t7, label %panic11799, label %ok11800 +panic11799: + call void @finch_panic(ptr @.str.7512, i64 428, ptr @.str.7513) unreachable -ok11772: +ok11800: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic11773, label %ok11774 -panic11773: - call void @finch_panic(ptr @.str.7499, i64 428, ptr @.str.7500) + br i1 %t11, label %panic11801, label %ok11802 +panic11801: + call void @finch_panic(ptr @.str.7514, i64 428, ptr @.str.7515) unreachable -ok11774: +ok11802: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t9, %t14 - br i1 %t15, label %then11775, label %endif11777 -then11775: + br i1 %t15, label %then11803, label %endif11805 +then11803: %t16 = load ptr, ptr %a1 - %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7501, i64 7, i64 0 }) + %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7516, i64 7, i64 0 }) %t18 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t17, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t18 -endif11777: +endif11805: %t19 = load i8, ptr %a5 %t20 = icmp eq i8 %t19, 123 - br i1 %t20, label %then11778, label %endif11780 -then11778: + br i1 %t20, label %then11806, label %endif11808 +then11806: %t21 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t21, ptr %a22 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic11781, label %ok11782 -panic11781: - call void @finch_panic(ptr @.str.7502, i64 433, ptr @.str.7503) + br i1 %t24, label %panic11809, label %ok11810 +panic11809: + call void @finch_panic(ptr @.str.7517, i64 433, ptr @.str.7518) unreachable -ok11782: +ok11810: %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = add i64 %t26, 1 @@ -116744,15 +116919,15 @@ ok11782: %t29 = load ptr, ptr %a1 %t30 = call i8 @finch.json.peek(ptr %t29) %t31 = icmp eq i8 %t30, 125 - br i1 %t31, label %then11783, label %endif11785 -then11783: + br i1 %t31, label %then11811, label %endif11813 +then11811: %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic11786, label %ok11787 -panic11786: - call void @finch_panic(ptr @.str.7504, i64 436, ptr @.str.7505) + br i1 %t33, label %panic11814, label %ok11815 +panic11814: + call void @finch_panic(ptr @.str.7519, i64 436, ptr @.str.7520) unreachable -ok11787: +ok11815: %t34 = getelementptr inbounds %S.json.Reader, ptr %t32, i32 0, i32 1 %t35 = load i64, ptr %t34 %t36 = add i64 %t35, 1 @@ -116761,58 +116936,58 @@ ok11787: %t38 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t39 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t38, %S.json.Json %t37, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t39 -endif11785: - br label %while.cond11788 -while.cond11788: - br label %while.body11789 -while.body11789: +endif11813: + br label %while.cond11816 +while.cond11816: + br label %while.body11817 +while.body11817: %t40 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t40) %t41 = load ptr, ptr %a1 %t42 = call i8 @finch.json.peek(ptr %t41) %t43 = icmp ne i8 %t42, 34 - br i1 %t43, label %then11791, label %endif11793 -then11791: + br i1 %t43, label %then11819, label %endif11821 +then11819: %t44 = load ptr, ptr %a1 - %t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7506, i64 15, i64 0 }) + %t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7521, i64 15, i64 0 }) call void @finch.drop.S_json_Json(ptr %a22) %t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t45, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46 -endif11793: +endif11821: %t47 = load ptr, ptr %a1 %t48 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t47) %t49 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 0 %t50 = xor i1 %t49, true %t51 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 2 %t52 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 1 - br i1 %t50, label %try.failed11794, label %try.ok11795 -try.failed11794: + br i1 %t50, label %try.failed11822, label %try.ok11823 +try.failed11822: call void @finch.drop.S_json_Json(ptr %a22) %t53 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t51, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t53 -try.ok11795: +try.ok11823: store { ptr, i64, i64 } %t52, ptr %a54 %t55 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t55) %t56 = load ptr, ptr %a1 %t57 = call i8 @finch.json.peek(ptr %t56) %t58 = icmp ne i8 %t57, 58 - br i1 %t58, label %then11796, label %endif11798 -then11796: + br i1 %t58, label %then11824, label %endif11826 +then11824: %t59 = load ptr, ptr %a1 - %t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7507, i64 3, i64 0 }) + %t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7522, i64 3, i64 0 }) call void @finch_str_drop(ptr %a54) call void @finch.drop.S_json_Json(ptr %a22) %t61 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t60, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t61 -endif11798: +endif11826: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null - br i1 %t63, label %panic11799, label %ok11800 -panic11799: - call void @finch_panic(ptr @.str.7508, i64 449, ptr @.str.7509) + br i1 %t63, label %panic11827, label %ok11828 +panic11827: + call void @finch_panic(ptr @.str.7523, i64 449, ptr @.str.7524) unreachable -ok11800: +ok11828: %t64 = getelementptr inbounds %S.json.Reader, ptr %t62, i32 0, i32 1 %t65 = load i64, ptr %t64 %t66 = add i64 %t65, 1 @@ -116823,13 +116998,13 @@ ok11800: %t70 = xor i1 %t69, true %t71 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 2 %t72 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 1 - br i1 %t70, label %try.failed11801, label %try.ok11802 -try.failed11801: + br i1 %t70, label %try.failed11829, label %try.ok11830 +try.failed11829: call void @finch_str_drop(ptr %a54) call void @finch.drop.S_json_Json(ptr %a22) %t73 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t71, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t73 -try.ok11802: +try.ok11830: store %S.json.Json %t72, ptr %a74 %t75 = load { ptr, i64, i64 }, ptr %a54 %t76 = load %S.json.Json, ptr %a74 @@ -116839,35 +117014,35 @@ try.ok11802: %t78 = load ptr, ptr %a1 %t79 = call i8 @finch.json.peek(ptr %t78) %t80 = icmp eq i8 %t79, 44 - br i1 %t80, label %then11803, label %endif11805 -then11803: + br i1 %t80, label %then11831, label %endif11833 +then11831: %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic11806, label %ok11807 -panic11806: - call void @finch_panic(ptr @.str.7510, i64 454, ptr @.str.7511) + br i1 %t82, label %panic11834, label %ok11835 +panic11834: + call void @finch_panic(ptr @.str.7525, i64 454, ptr @.str.7526) unreachable -ok11807: +ok11835: %t83 = getelementptr inbounds %S.json.Reader, ptr %t81, i32 0, i32 1 %t84 = load i64, ptr %t83 %t85 = add i64 %t84, 1 store i64 %t85, ptr %t83 call void @finch.drop.S_json_Json(ptr %a74) call void @finch_str_drop(ptr %a54) - br label %while.cond11788 -endif11805: + br label %while.cond11816 +endif11833: %t86 = load ptr, ptr %a1 %t87 = call i8 @finch.json.peek(ptr %t86) %t88 = icmp eq i8 %t87, 125 - br i1 %t88, label %then11808, label %endif11810 -then11808: + br i1 %t88, label %then11836, label %endif11838 +then11836: %t89 = load ptr, ptr %a1 %t90 = icmp eq ptr %t89, null - br i1 %t90, label %panic11811, label %ok11812 -panic11811: - call void @finch_panic(ptr @.str.7512, i64 458, ptr @.str.7513) + br i1 %t90, label %panic11839, label %ok11840 +panic11839: + call void @finch_panic(ptr @.str.7527, i64 458, ptr @.str.7528) unreachable -ok11812: +ok11840: %t91 = getelementptr inbounds %S.json.Reader, ptr %t89, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = add i64 %t92, 1 @@ -116878,28 +117053,28 @@ ok11812: %t95 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t96 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t95, %S.json.Json %t94, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t96 -endif11810: +endif11838: %t97 = load ptr, ptr %a1 - %t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7514, i64 10, i64 0 }) + %t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7529, i64 10, i64 0 }) call void @finch.drop.S_json_Json(ptr %a74) call void @finch_str_drop(ptr %a54) call void @finch.drop.S_json_Json(ptr %a22) %t99 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t98, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t99 -endif11780: +endif11808: %t100 = load i8, ptr %a5 %t101 = icmp eq i8 %t100, 91 - br i1 %t101, label %then11813, label %endif11815 -then11813: + br i1 %t101, label %then11841, label %endif11843 +then11841: %t102 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t102, ptr %a103 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null - br i1 %t105, label %panic11816, label %ok11817 -panic11816: - call void @finch_panic(ptr @.str.7515, i64 466, ptr @.str.7516) + br i1 %t105, label %panic11844, label %ok11845 +panic11844: + call void @finch_panic(ptr @.str.7530, i64 466, ptr @.str.7531) unreachable -ok11817: +ok11845: %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = add i64 %t107, 1 @@ -116909,15 +117084,15 @@ ok11817: %t110 = load ptr, ptr %a1 %t111 = call i8 @finch.json.peek(ptr %t110) %t112 = icmp eq i8 %t111, 93 - br i1 %t112, label %then11818, label %endif11820 -then11818: + br i1 %t112, label %then11846, label %endif11848 +then11846: %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null - br i1 %t114, label %panic11821, label %ok11822 -panic11821: - call void @finch_panic(ptr @.str.7517, i64 469, ptr @.str.7518) + br i1 %t114, label %panic11849, label %ok11850 +panic11849: + call void @finch_panic(ptr @.str.7532, i64 469, ptr @.str.7533) unreachable -ok11822: +ok11850: %t115 = getelementptr inbounds %S.json.Reader, ptr %t113, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = add i64 %t116, 1 @@ -116926,23 +117101,23 @@ ok11822: %t119 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t120 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t119, %S.json.Json %t118, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t120 -endif11820: - br label %while.cond11823 -while.cond11823: - br label %while.body11824 -while.body11824: +endif11848: + br label %while.cond11851 +while.cond11851: + br label %while.body11852 +while.body11852: %t121 = load ptr, ptr %a1 %t122 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t121) %t123 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 0 %t124 = xor i1 %t123, true %t125 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 2 %t126 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 1 - br i1 %t124, label %try.failed11826, label %try.ok11827 -try.failed11826: + br i1 %t124, label %try.failed11854, label %try.ok11855 +try.failed11854: call void @finch.drop.S_json_Json(ptr %a103) %t127 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t125, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t127 -try.ok11827: +try.ok11855: store %S.json.Json %t126, ptr %a128 %t129 = load %S.json.Json, ptr %a128 call void @finch.json.Json.push(ptr %a103, %S.json.Json %t129) @@ -116951,34 +117126,34 @@ try.ok11827: %t131 = load ptr, ptr %a1 %t132 = call i8 @finch.json.peek(ptr %t131) %t133 = icmp eq i8 %t132, 44 - br i1 %t133, label %then11828, label %endif11830 -then11828: + br i1 %t133, label %then11856, label %endif11858 +then11856: %t134 = load ptr, ptr %a1 %t135 = icmp eq ptr %t134, null - br i1 %t135, label %panic11831, label %ok11832 -panic11831: - call void @finch_panic(ptr @.str.7519, i64 477, ptr @.str.7520) + br i1 %t135, label %panic11859, label %ok11860 +panic11859: + call void @finch_panic(ptr @.str.7534, i64 477, ptr @.str.7535) unreachable -ok11832: +ok11860: %t136 = getelementptr inbounds %S.json.Reader, ptr %t134, i32 0, i32 1 %t137 = load i64, ptr %t136 %t138 = add i64 %t137, 1 store i64 %t138, ptr %t136 call void @finch.drop.S_json_Json(ptr %a128) - br label %while.cond11823 -endif11830: + br label %while.cond11851 +endif11858: %t139 = load ptr, ptr %a1 %t140 = call i8 @finch.json.peek(ptr %t139) %t141 = icmp eq i8 %t140, 93 - br i1 %t141, label %then11833, label %endif11835 -then11833: + br i1 %t141, label %then11861, label %endif11863 +then11861: %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic11836, label %ok11837 -panic11836: - call void @finch_panic(ptr @.str.7521, i64 481, ptr @.str.7522) + br i1 %t143, label %panic11864, label %ok11865 +panic11864: + call void @finch_panic(ptr @.str.7536, i64 481, ptr @.str.7537) unreachable -ok11837: +ok11865: %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 %t145 = load i64, ptr %t144 %t146 = add i64 %t145, 1 @@ -116988,29 +117163,29 @@ ok11837: %t148 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t149 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t148, %S.json.Json %t147, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t149 -endif11835: +endif11863: %t150 = load ptr, ptr %a1 - %t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7523, i64 10, i64 0 }) + %t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7538, i64 10, i64 0 }) call void @finch.drop.S_json_Json(ptr %a128) call void @finch.drop.S_json_Json(ptr %a103) %t152 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t151, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t152 -endif11815: +endif11843: %t153 = load i8, ptr %a5 %t154 = icmp eq i8 %t153, 34 - br i1 %t154, label %then11838, label %endif11840 -then11838: + br i1 %t154, label %then11866, label %endif11868 +then11866: %t155 = load ptr, ptr %a1 %t156 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t155) %t157 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 0 %t158 = xor i1 %t157, true %t159 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 2 %t160 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 1 - br i1 %t158, label %try.failed11841, label %try.ok11842 -try.failed11841: + br i1 %t158, label %try.failed11869, label %try.ok11870 +try.failed11869: %t161 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t159, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t161 -try.ok11842: +try.ok11870: store { ptr, i64, i64 } %t160, ptr %a162 %t163 = load { ptr, i64, i64 }, ptr %a162 %t164 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t163) @@ -117018,107 +117193,107 @@ try.ok11842: %t165 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t165, %S.json.Json %t164, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t166 -endif11840: +endif11868: %t167 = load i8, ptr %a5 %t168 = icmp eq i8 %t167, 116 - br i1 %t168, label %then11843, label %endif11845 -then11843: + br i1 %t168, label %then11871, label %endif11873 +then11871: %t169 = load ptr, ptr %a1 - %t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7524, i64 4, i64 0 }) + %t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7539, i64 4, i64 0 }) %t171 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 0 %t172 = xor i1 %t171, true %t173 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 2 - br i1 %t172, label %try.failed11846, label %try.ok11847 -try.failed11846: + br i1 %t172, label %try.failed11874, label %try.ok11875 +try.failed11874: %t174 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t173, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t174 -try.ok11847: +try.ok11875: %t175 = call %S.json.Json @finch.json.new_bool(i1 true) %t176 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t177 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t176, %S.json.Json %t175, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t177 -endif11845: +endif11873: %t178 = load i8, ptr %a5 %t179 = icmp eq i8 %t178, 102 - br i1 %t179, label %then11848, label %endif11850 -then11848: + br i1 %t179, label %then11876, label %endif11878 +then11876: %t180 = load ptr, ptr %a1 - %t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7525, i64 5, i64 0 }) + %t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7540, i64 5, i64 0 }) %t182 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 0 %t183 = xor i1 %t182, true %t184 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 2 - br i1 %t183, label %try.failed11851, label %try.ok11852 -try.failed11851: + br i1 %t183, label %try.failed11879, label %try.ok11880 +try.failed11879: %t185 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t184, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t185 -try.ok11852: +try.ok11880: %t186 = call %S.json.Json @finch.json.new_bool(i1 false) %t187 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t188 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t187, %S.json.Json %t186, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t188 -endif11850: +endif11878: %t189 = load i8, ptr %a5 %t190 = icmp eq i8 %t189, 110 - br i1 %t190, label %then11853, label %endif11855 -then11853: + br i1 %t190, label %then11881, label %endif11883 +then11881: %t191 = load ptr, ptr %a1 - %t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7526, i64 4, i64 0 }) + %t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7541, i64 4, i64 0 }) %t193 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 0 %t194 = xor i1 %t193, true %t195 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 2 - br i1 %t194, label %try.failed11856, label %try.ok11857 -try.failed11856: + br i1 %t194, label %try.failed11884, label %try.ok11885 +try.failed11884: %t196 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t195, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t196 -try.ok11857: +try.ok11885: %t197 = call %S.json.Json @finch.json.new_null() %t198 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t199 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t198, %S.json.Json %t197, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t199 -endif11855: +endif11883: %t200 = load i8, ptr %a5 %t201 = icmp eq i8 %t200, 45 - br label %logic.from11858 -logic.from11858: - br i1 %t201, label %logic.end11860, label %logic.rhs11859 -logic.rhs11859: + br label %logic.from11886 +logic.from11886: + br i1 %t201, label %logic.end11888, label %logic.rhs11887 +logic.rhs11887: %t202 = load i8, ptr %a5 %t203 = icmp uge i8 %t202, 48 - br label %logic.from11861 -logic.from11861: - br i1 %t203, label %logic.rhs11862, label %logic.end11863 -logic.rhs11862: + br label %logic.from11889 +logic.from11889: + br i1 %t203, label %logic.rhs11890, label %logic.end11891 +logic.rhs11890: %t204 = load i8, ptr %a5 %t205 = icmp ule i8 %t204, 57 - br label %logic.rend11864 -logic.rend11864: - br label %logic.end11863 -logic.end11863: - %t206 = phi i1 [ false, %logic.from11861 ], [ %t205, %logic.rend11864 ] - br label %logic.rend11865 -logic.rend11865: - br label %logic.end11860 -logic.end11860: - %t207 = phi i1 [ true, %logic.from11858 ], [ %t206, %logic.rend11865 ] - br i1 %t207, label %then11866, label %endif11868 -then11866: + br label %logic.rend11892 +logic.rend11892: + br label %logic.end11891 +logic.end11891: + %t206 = phi i1 [ false, %logic.from11889 ], [ %t205, %logic.rend11892 ] + br label %logic.rend11893 +logic.rend11893: + br label %logic.end11888 +logic.end11888: + %t207 = phi i1 [ true, %logic.from11886 ], [ %t206, %logic.rend11893 ] + br i1 %t207, label %then11894, label %endif11896 +then11894: %t208 = load ptr, ptr %a1 %t209 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %t208) %t210 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 0 %t211 = xor i1 %t210, true %t212 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 2 %t213 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 1 - br i1 %t211, label %try.failed11869, label %try.ok11870 -try.failed11869: + br i1 %t211, label %try.failed11897, label %try.ok11898 +try.failed11897: %t214 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t212, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t214 -try.ok11870: +try.ok11898: %t215 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t216 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t215, %S.json.Json %t213, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t216 -endif11868: +endif11896: %t217 = load ptr, ptr %a1 - %t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7527, i64 7, i64 0 }) + %t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7542, i64 7, i64 0 }) %t219 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t218, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t219 } @@ -117150,12 +117325,12 @@ entry: %t10 = xor i1 %t9, true %t11 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 2 %t12 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 1 - br i1 %t10, label %try.failed11871, label %try.ok11872 -try.failed11871: + br i1 %t10, label %try.failed11899, label %try.ok11900 +try.failed11899: call void @finch.drop.S_json_Reader(ptr %a7) %t13 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t11, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t13 -try.ok11872: +try.ok11900: store %S.json.Json %t12, ptr %a14 call void @finch.json.skip_space(ptr %a7) %t15 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 1 @@ -117164,14 +117339,14 @@ try.ok11872: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp slt i64 %t16, %t19 - br i1 %t20, label %then11873, label %endif11875 -then11873: - %t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7528, i64 19, i64 0 }) + br i1 %t20, label %then11901, label %endif11903 +then11901: + %t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7543, i64 19, i64 0 }) call void @finch.drop.S_json_Json(ptr %a14) call void @finch.drop.S_json_Reader(ptr %a7) %t22 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t21, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t22 -endif11875: +endif11903: %t23 = load %S.json.Json, ptr %a14 call void @finch.drop.S_json_Reader(ptr %a7) %t24 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 @@ -117189,7 +117364,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t5 = load ptr, ptr %a1 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 - store { ptr, i64, i64 } { ptr @.str.7529, i64 18, i64 0 }, ptr %t6 + store { ptr, i64, i64 } { ptr @.str.7544, i64 18, i64 0 }, ptr %t6 store i64 %t4, ptr %t2 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 @@ -117197,7 +117372,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 - store { ptr, i64, i64 } { ptr @.str.7530, i64 12, i64 0 }, ptr %t11 + store { ptr, i64, i64 } { ptr @.str.7545, i64 12, i64 0 }, ptr %t11 store i64 %t9, ptr %t7 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 @@ -117205,7 +117380,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 - store { ptr, i64, i64 } { ptr @.str.7531, i64 12, i64 0 }, ptr %t16 + store { ptr, i64, i64 } { ptr @.str.7546, i64 12, i64 0 }, ptr %t16 store i64 %t14, ptr %t12 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t18 = load i64, ptr %t17 @@ -117213,7 +117388,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 - store { ptr, i64, i64 } { ptr @.str.7532, i64 12, i64 0 }, ptr %t21 + store { ptr, i64, i64 } { ptr @.str.7547, i64 12, i64 0 }, ptr %t21 store i64 %t19, ptr %t17 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t23 = load i64, ptr %t22 @@ -117221,7 +117396,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t25 = load ptr, ptr %a1 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 - store { ptr, i64, i64 } { ptr @.str.7533, i64 20, i64 0 }, ptr %t26 + store { ptr, i64, i64 } { ptr @.str.7548, i64 20, i64 0 }, ptr %t26 store i64 %t24, ptr %t22 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t28 = load i64, ptr %t27 @@ -117229,7 +117404,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %a1 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 - store { ptr, i64, i64 } { ptr @.str.7534, i64 12, i64 0 }, ptr %t31 + store { ptr, i64, i64 } { ptr @.str.7549, i64 12, i64 0 }, ptr %t31 store i64 %t29, ptr %t27 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t33 = load i64, ptr %t32 @@ -117237,7 +117412,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 - store { ptr, i64, i64 } { ptr @.str.7535, i64 20, i64 0 }, ptr %t36 + store { ptr, i64, i64 } { ptr @.str.7550, i64 20, i64 0 }, ptr %t36 store i64 %t34, ptr %t32 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t38 = load i64, ptr %t37 @@ -117245,7 +117420,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a1 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 - store { ptr, i64, i64 } { ptr @.str.7536, i64 15, i64 0 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.7551, i64 15, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 %t42 = load { ptr, i64, i64 }, ptr %a1 ret { ptr, i64, i64 } %t42 @@ -117261,7 +117436,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t5 = load ptr, ptr %a1 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 - store { ptr, i64, i64 } { ptr @.str.7537, i64 24981, i64 0 }, ptr %t6 + store { ptr, i64, i64 } { ptr @.str.7552, i64 24981, i64 0 }, ptr %t6 store i64 %t4, ptr %t2 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 @@ -117269,7 +117444,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 - store { ptr, i64, i64 } { ptr @.str.7538, i64 12884, i64 0 }, ptr %t11 + store { ptr, i64, i64 } { ptr @.str.7553, i64 12884, i64 0 }, ptr %t11 store i64 %t9, ptr %t7 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 @@ -117277,7 +117452,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 - store { ptr, i64, i64 } { ptr @.str.7539, i64 2846, i64 0 }, ptr %t16 + store { ptr, i64, i64 } { ptr @.str.7554, i64 2846, i64 0 }, ptr %t16 store i64 %t14, ptr %t12 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t18 = load i64, ptr %t17 @@ -117285,7 +117460,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 - store { ptr, i64, i64 } { ptr @.str.7540, i64 1406, i64 0 }, ptr %t21 + store { ptr, i64, i64 } { ptr @.str.7555, i64 1406, i64 0 }, ptr %t21 store i64 %t19, ptr %t17 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t23 = load i64, ptr %t22 @@ -117293,7 +117468,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t25 = load ptr, ptr %a1 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 - store { ptr, i64, i64 } { ptr @.str.7541, i64 995, i64 0 }, ptr %t26 + store { ptr, i64, i64 } { ptr @.str.7556, i64 995, i64 0 }, ptr %t26 store i64 %t24, ptr %t22 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t28 = load i64, ptr %t27 @@ -117301,7 +117476,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %a1 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 - store { ptr, i64, i64 } { ptr @.str.7542, i64 2539, i64 0 }, ptr %t31 + store { ptr, i64, i64 } { ptr @.str.7557, i64 2539, i64 0 }, ptr %t31 store i64 %t29, ptr %t27 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t33 = load i64, ptr %t32 @@ -117309,7 +117484,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 - store { ptr, i64, i64 } { ptr @.str.7543, i64 1792, i64 0 }, ptr %t36 + store { ptr, i64, i64 } { ptr @.str.7558, i64 1792, i64 0 }, ptr %t36 store i64 %t34, ptr %t32 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t38 = load i64, ptr %t37 @@ -117317,7 +117492,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a1 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 - store { ptr, i64, i64 } { ptr @.str.7544, i64 365, i64 0 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.7559, i64 365, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 %t42 = load { ptr, i64, i64 }, ptr %a1 ret { ptr, i64, i64 } %t42 diff --git a/bootstrap/linux-x86_64.ll b/bootstrap/linux-x86_64.ll index 41ac288..b87f062 100644 --- a/bootstrap/linux-x86_64.ll +++ b/bootstrap/linux-x86_64.ll @@ -6216,544 +6216,544 @@ declare ptr @getenv(ptr) @.str.6107 = private unnamed_addr constant [53 x i8] c"; generated by the Finch compiler written in Finch\0A\0A\00" @.str.6108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6109 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" -@.str.6110 = private unnamed_addr constant [18 x i8] c"target triple = \22\00" -@.str.6111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6112 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" -@.str.6113 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00" -@.str.6114 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6115 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" -@.str.6116 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6117 = private unnamed_addr constant [3 x i8] c"\0A\0A\00" +@.str.6110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6111 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6112 = private unnamed_addr constant [18 x i8] c"target triple = \22\00" +@.str.6113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6114 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6115 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00" +@.str.6116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6117 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" @.str.6118 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6120 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" -@.str.6121 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00" -@.str.6122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6123 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6124 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6126 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" -@.str.6127 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6128 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6129 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6119 = private unnamed_addr constant [3 x i8] c"\0A\0A\00" +@.str.6120 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6122 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6123 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00" +@.str.6124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6126 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6128 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6129 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6131 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" -@.str.6132 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6134 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" -@.str.6135 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00" -@.str.6136 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6137 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" -@.str.6138 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00" -@.str.6139 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6140 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" -@.str.6141 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00" -@.str.6142 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00" -@.str.6143 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6144 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00" -@.str.6145 = private unnamed_addr constant [3 x i8] c"\22)\00" -@.str.6146 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00" -@.str.6147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6148 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6131 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6133 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6136 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6137 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00" +@.str.6138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6139 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6140 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00" +@.str.6141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6142 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6143 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00" +@.str.6144 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00" +@.str.6145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6146 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00" +@.str.6147 = private unnamed_addr constant [3 x i8] c"\22)\00" +@.str.6148 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00" @.str.6149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6150 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00" +@.str.6150 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" @.str.6151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6152 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6152 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00" @.str.6153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6154 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6155 = private unnamed_addr constant [5 x i8] c"main\00" -@.str.6156 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6157 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6154 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6156 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6157 = private unnamed_addr constant [5 x i8] c"main\00" @.str.6158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6159 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6159 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" @.str.6160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6161 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.6162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6163 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6165 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6166 = private unnamed_addr constant [83 x i8] c"a library (--shared) has no main: the program that loads it calls its 'export fn's\00" +@.str.6165 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" @.str.6167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6168 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00" -@.str.6169 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6170 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6171 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6173 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6168 = private unnamed_addr constant [83 x i8] c"a library (--shared) has no main: the program that loads it calls its 'export fn's\00" +@.str.6169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6170 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00" +@.str.6171 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6172 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6173 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6175 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.6175 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" @.str.6176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6177 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6177 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" @.str.6178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6180 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" -@.str.6181 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6183 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" -@.str.6184 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6186 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" -@.str.6187 = private unnamed_addr constant [11 x i8] c" dllexport\00" -@.str.6188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6189 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6190 = private unnamed_addr constant [7 x i8] c"define\00" -@.str.6191 = private unnamed_addr constant [108 x i8] c" void @finch_module_on_fatal(ptr %handler) {\0Aentry:\0A call void @finch_on_fatal(ptr %handler)\0A ret void\0A}\0A\00" -@.str.6192 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6193 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6179 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6182 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.6183 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6185 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6186 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6188 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6189 = private unnamed_addr constant [11 x i8] c" dllexport\00" +@.str.6190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6191 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6192 = private unnamed_addr constant [7 x i8] c"define\00" +@.str.6193 = private unnamed_addr constant [108 x i8] c" void @finch_module_on_fatal(ptr %handler) {\0Aentry:\0A call void @finch_on_fatal(ptr %handler)\0A ret void\0A}\0A\00" @.str.6194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6195 = private unnamed_addr constant [6 x i8] c"call \00" -@.str.6196 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6197 = private unnamed_addr constant [2 x i8] c"(\00" -@.str.6198 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6199 = private unnamed_addr constant [134 x i8] c" %args = alloca { ptr, i64, i64 }\0A call void @finch_args(ptr %args, i32 %argc, ptr %argv)\0A %a = load { ptr, i64, i64 }, ptr %args\0A\00" -@.str.6200 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00" -@.str.6201 = private unnamed_addr constant [2 x i8] c")\00" -@.str.6202 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" -@.str.6203 = private unnamed_addr constant [6 x i8] c"%r = \00" -@.str.6204 = private unnamed_addr constant [3 x i8] c" \00" -@.str.6205 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6206 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6207 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00" -@.str.6208 = private unnamed_addr constant [63 x i8] c" %r, 0\0A br i1 %ok, label %main.ok, label %main.bad\0Amain.bad:\0A\00" -@.str.6209 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00" -@.str.6210 = private unnamed_addr constant [79 x i8] c" %r, 2\0A %mp = alloca { ptr, i64, i64 }\0A store { ptr, i64, i64 } %m, ptr %mp\0A\00" -@.str.6211 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00" -@.str.6212 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6213 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00" -@.str.6214 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00" -@.str.6215 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6216 = private unnamed_addr constant [6 x i8] c"%r = \00" -@.str.6217 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00" -@.str.6218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" -@.str.6219 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6220 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" -@.str.6221 = private unnamed_addr constant [3 x i8] c" \00" -@.str.6222 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6223 = private unnamed_addr constant [3 x i8] c"}\0A\00" -@.str.6224 = private unnamed_addr constant [6 x i8] c"print\00" -@.str.6225 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00" -@.str.6226 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00" -@.str.6227 = private unnamed_addr constant [6 x i8] c"input\00" -@.str.6228 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00" -@.str.6229 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00" -@.str.6230 = private unnamed_addr constant [10 x i8] c"read_file\00" -@.str.6231 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00" -@.str.6232 = private unnamed_addr constant [122 x i8] c"The whole file as text. Stops the program if it can't be read, unless handled: read_file(p) or { ... }, try read_file(p).\00" -@.str.6233 = private unnamed_addr constant [11 x i8] c"write_file\00" -@.str.6234 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00" -@.str.6235 = private unnamed_addr constant [84 x i8] c"Writes (replaces) the file. true if it worked; with or / try, the reason it didn't.\00" -@.str.6236 = private unnamed_addr constant [12 x i8] c"file_exists\00" -@.str.6237 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00" -@.str.6238 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00" -@.str.6239 = private unnamed_addr constant [12 x i8] c"delete_file\00" -@.str.6240 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00" -@.str.6241 = private unnamed_addr constant [74 x i8] c"Deletes the file. true if it worked; with or / try, the reason it didn't.\00" -@.str.6242 = private unnamed_addr constant [6 x i8] c"error\00" -@.str.6243 = private unnamed_addr constant [19 x i8] c"error(str message)\00" -@.str.6244 = private unnamed_addr constant [99 x i8] c"The failure a fallible function returns: return error(\22...\22). The caller handles it with or / try.\00" -@.str.6245 = private unnamed_addr constant [6 x i8] c"shell\00" -@.str.6246 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00" -@.str.6247 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00" -@.str.6248 = private unnamed_addr constant [5 x i8] c"exit\00" -@.str.6249 = private unnamed_addr constant [15 x i8] c"exit(int code)\00" -@.str.6250 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00" -@.str.6251 = private unnamed_addr constant [5 x i8] c"addr\00" -@.str.6252 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00" -@.str.6253 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00" -@.str.6254 = private unnamed_addr constant [4 x i8] c"new\00" -@.str.6255 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00" -@.str.6256 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00" -@.str.6257 = private unnamed_addr constant [5 x i8] c"free\00" -@.str.6258 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00" -@.str.6259 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00" -@.str.6260 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.6261 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00" -@.str.6262 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00" -@.str.6263 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6264 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00" -@.str.6265 = private unnamed_addr constant [131 x i8] c"Converts to a whole number: cuts off fractions, parses text (stops the program if it isn't a number, unless handled: int(s) or 0).\00" -@.str.6266 = private unnamed_addr constant [6 x i8] c"float\00" -@.str.6267 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00" -@.str.6268 = private unnamed_addr constant [76 x i8] c"Converts to a decimal number; parses text (int(s) or 0.0 handles bad text).\00" -@.str.6269 = private unnamed_addr constant [5 x i8] c"char\00" -@.str.6270 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00" -@.str.6271 = private unnamed_addr constant [30 x i8] c"The character with this code.\00" -@.str.6272 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str.6273 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00" -@.str.6274 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00" -@.str.6275 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6276 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00" -@.str.6277 = private unnamed_addr constant [89 x i8] c"An untyped pointer: from a typed pointer, or from a number (an address or offset for C).\00" -@.str.6278 = private unnamed_addr constant [4 x i8] c"len\00" -@.str.6279 = private unnamed_addr constant [12 x i8] c".len -> int\00" -@.str.6280 = private unnamed_addr constant [24 x i8] c"The number of elements.\00" -@.str.6281 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6282 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00" -@.str.6283 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00" -@.str.6284 = private unnamed_addr constant [5 x i8] c"push\00" -@.str.6285 = private unnamed_addr constant [10 x i8] c"push(T x)\00" -@.str.6286 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00" -@.str.6287 = private unnamed_addr constant [4 x i8] c"pop\00" -@.str.6288 = private unnamed_addr constant [11 x i8] c"pop() -> T\00" -@.str.6289 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00" -@.str.6290 = private unnamed_addr constant [7 x i8] c"insert\00" -@.str.6291 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00" -@.str.6292 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00" -@.str.6293 = private unnamed_addr constant [7 x i8] c"remove\00" -@.str.6294 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00" -@.str.6295 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00" -@.str.6296 = private unnamed_addr constant [6 x i8] c"clear\00" -@.str.6297 = private unnamed_addr constant [8 x i8] c"clear()\00" -@.str.6298 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" -@.str.6299 = private unnamed_addr constant [7 x i8] c"resize\00" -@.str.6300 = private unnamed_addr constant [14 x i8] c"resize(int n)\00" -@.str.6301 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00" -@.str.6302 = private unnamed_addr constant [5 x i8] c"find\00" -@.str.6303 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00" -@.str.6304 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00" -@.str.6305 = private unnamed_addr constant [9 x i8] c"contains\00" -@.str.6306 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00" -@.str.6307 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00" -@.str.6308 = private unnamed_addr constant [5 x i8] c"sort\00" -@.str.6309 = private unnamed_addr constant [7 x i8] c"sort()\00" -@.str.6310 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00" -@.str.6311 = private unnamed_addr constant [8 x i8] c"reverse\00" -@.str.6312 = private unnamed_addr constant [10 x i8] c"reverse()\00" -@.str.6313 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00" -@.str.6314 = private unnamed_addr constant [6 x i8] c"slice\00" -@.str.6315 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00" -@.str.6316 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00" -@.str.6317 = private unnamed_addr constant [5 x i8] c"join\00" -@.str.6318 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00" -@.str.6319 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00" -@.str.6320 = private unnamed_addr constant [4 x i8] c"len\00" -@.str.6321 = private unnamed_addr constant [12 x i8] c".len -> int\00" -@.str.6322 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00" -@.str.6323 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6324 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00" -@.str.6325 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00" -@.str.6326 = private unnamed_addr constant [4 x i8] c"sub\00" -@.str.6327 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00" -@.str.6328 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00" -@.str.6329 = private unnamed_addr constant [5 x i8] c"find\00" -@.str.6330 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00" -@.str.6331 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00" -@.str.6332 = private unnamed_addr constant [9 x i8] c"contains\00" -@.str.6333 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00" -@.str.6334 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00" -@.str.6335 = private unnamed_addr constant [12 x i8] c"starts_with\00" -@.str.6336 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00" -@.str.6337 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00" -@.str.6338 = private unnamed_addr constant [10 x i8] c"ends_with\00" -@.str.6339 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00" -@.str.6340 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00" -@.str.6341 = private unnamed_addr constant [6 x i8] c"split\00" -@.str.6342 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00" -@.str.6343 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00" -@.str.6344 = private unnamed_addr constant [5 x i8] c"trim\00" -@.str.6345 = private unnamed_addr constant [14 x i8] c"trim() -> str\00" -@.str.6346 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00" -@.str.6347 = private unnamed_addr constant [6 x i8] c"upper\00" -@.str.6348 = private unnamed_addr constant [15 x i8] c"upper() -> str\00" -@.str.6349 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00" -@.str.6350 = private unnamed_addr constant [6 x i8] c"lower\00" -@.str.6351 = private unnamed_addr constant [15 x i8] c"lower() -> str\00" -@.str.6352 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00" -@.str.6353 = private unnamed_addr constant [8 x i8] c"replace\00" -@.str.6354 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00" -@.str.6355 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00" -@.str.6356 = private unnamed_addr constant [7 x i8] c"repeat\00" -@.str.6357 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00" -@.str.6358 = private unnamed_addr constant [18 x i8] c"The text n times.\00" -@.str.6359 = private unnamed_addr constant [6 x i8] c"bytes\00" -@.str.6360 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00" -@.str.6361 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00" -@.str.6362 = private unnamed_addr constant [4 x i8] c"len\00" -@.str.6363 = private unnamed_addr constant [12 x i8] c".len -> int\00" -@.str.6364 = private unnamed_addr constant [20 x i8] c"The number of keys.\00" -@.str.6365 = private unnamed_addr constant [4 x i8] c"has\00" -@.str.6366 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00" -@.str.6367 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00" -@.str.6368 = private unnamed_addr constant [4 x i8] c"get\00" -@.str.6369 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00" -@.str.6370 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00" -@.str.6371 = private unnamed_addr constant [7 x i8] c"remove\00" -@.str.6372 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00" -@.str.6373 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00" -@.str.6374 = private unnamed_addr constant [6 x i8] c"clear\00" -@.str.6375 = private unnamed_addr constant [8 x i8] c"clear()\00" -@.str.6376 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" -@.str.6377 = private unnamed_addr constant [5 x i8] c"keys\00" -@.str.6378 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00" -@.str.6379 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00" -@.str.6380 = private unnamed_addr constant [7 x i8] c"values\00" -@.str.6381 = private unnamed_addr constant [16 x i8] c"values() -> []V\00" -@.str.6382 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00" -@.str.6383 = private unnamed_addr constant [3 x i8] c"fn\00" -@.str.6384 = private unnamed_addr constant [7 x i8] c"return\00" -@.str.6385 = private unnamed_addr constant [3 x i8] c"if\00" -@.str.6386 = private unnamed_addr constant [5 x i8] c"else\00" -@.str.6387 = private unnamed_addr constant [6 x i8] c"while\00" -@.str.6388 = private unnamed_addr constant [4 x i8] c"for\00" -@.str.6389 = private unnamed_addr constant [3 x i8] c"in\00" -@.str.6390 = private unnamed_addr constant [6 x i8] c"break\00" -@.str.6391 = private unnamed_addr constant [9 x i8] c"continue\00" -@.str.6392 = private unnamed_addr constant [5 x i8] c"true\00" -@.str.6393 = private unnamed_addr constant [6 x i8] c"false\00" -@.str.6394 = private unnamed_addr constant [5 x i8] c"null\00" -@.str.6395 = private unnamed_addr constant [7 x i8] c"import\00" -@.str.6396 = private unnamed_addr constant [5 x i8] c"link\00" -@.str.6397 = private unnamed_addr constant [7 x i8] c"struct\00" -@.str.6398 = private unnamed_addr constant [5 x i8] c"enum\00" -@.str.6399 = private unnamed_addr constant [6 x i8] c"match\00" -@.str.6400 = private unnamed_addr constant [7 x i8] c"export\00" -@.str.6401 = private unnamed_addr constant [6 x i8] c"defer\00" -@.str.6402 = private unnamed_addr constant [3 x i8] c"or\00" -@.str.6403 = private unnamed_addr constant [4 x i8] c"try\00" -@.str.6404 = private unnamed_addr constant [5 x i8] c"self\00" -@.str.6405 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6406 = private unnamed_addr constant [6 x i8] c"float\00" -@.str.6407 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str.6408 = private unnamed_addr constant [5 x i8] c"char\00" -@.str.6409 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.6410 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6411 = private unnamed_addr constant [4 x i8] c"map\00" -@.str.6412 = private unnamed_addr constant [3 x i8] c"i8\00" -@.str.6413 = private unnamed_addr constant [4 x i8] c"i16\00" -@.str.6414 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str.6415 = private unnamed_addr constant [4 x i8] c"i64\00" -@.str.6416 = private unnamed_addr constant [3 x i8] c"u8\00" -@.str.6417 = private unnamed_addr constant [4 x i8] c"u16\00" -@.str.6418 = private unnamed_addr constant [4 x i8] c"u32\00" -@.str.6419 = private unnamed_addr constant [4 x i8] c"u64\00" -@.str.6420 = private unnamed_addr constant [4 x i8] c"f32\00" -@.str.6421 = private unnamed_addr constant [4 x i8] c"f64\00" -@.str.6422 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" -@.str.6423 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00" +@.str.6195 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6197 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.6198 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6199 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6200 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6201 = private unnamed_addr constant [134 x i8] c" %args = alloca { ptr, i64, i64 }\0A call void @finch_args(ptr %args, i32 %argc, ptr %argv)\0A %a = load { ptr, i64, i64 }, ptr %args\0A\00" +@.str.6202 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00" +@.str.6203 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6204 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" +@.str.6205 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6206 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6207 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6208 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6209 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00" +@.str.6210 = private unnamed_addr constant [63 x i8] c" %r, 0\0A br i1 %ok, label %main.ok, label %main.bad\0Amain.bad:\0A\00" +@.str.6211 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00" +@.str.6212 = private unnamed_addr constant [79 x i8] c" %r, 2\0A %mp = alloca { ptr, i64, i64 }\0A store { ptr, i64, i64 } %m, ptr %mp\0A\00" +@.str.6213 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00" +@.str.6214 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6215 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00" +@.str.6216 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00" +@.str.6217 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6218 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6219 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00" +@.str.6220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6221 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6222 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str.6223 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6224 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6225 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str.6226 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.6227 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00" +@.str.6228 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00" +@.str.6229 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.6230 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00" +@.str.6231 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00" +@.str.6232 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.6233 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00" +@.str.6234 = private unnamed_addr constant [122 x i8] c"The whole file as text. Stops the program if it can't be read, unless handled: read_file(p) or { ... }, try read_file(p).\00" +@.str.6235 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.6236 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00" +@.str.6237 = private unnamed_addr constant [84 x i8] c"Writes (replaces) the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6238 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.6239 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00" +@.str.6240 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00" +@.str.6241 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.6242 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00" +@.str.6243 = private unnamed_addr constant [74 x i8] c"Deletes the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6244 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.6245 = private unnamed_addr constant [19 x i8] c"error(str message)\00" +@.str.6246 = private unnamed_addr constant [99 x i8] c"The failure a fallible function returns: return error(\22...\22). The caller handles it with or / try.\00" +@.str.6247 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.6248 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00" +@.str.6249 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00" +@.str.6250 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.6251 = private unnamed_addr constant [15 x i8] c"exit(int code)\00" +@.str.6252 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00" +@.str.6253 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.6254 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00" +@.str.6255 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00" +@.str.6256 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.6257 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00" +@.str.6258 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00" +@.str.6259 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.6260 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00" +@.str.6261 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00" +@.str.6262 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6263 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00" +@.str.6264 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00" +@.str.6265 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6266 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00" +@.str.6267 = private unnamed_addr constant [131 x i8] c"Converts to a whole number: cuts off fractions, parses text (stops the program if it isn't a number, unless handled: int(s) or 0).\00" +@.str.6268 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6269 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00" +@.str.6270 = private unnamed_addr constant [76 x i8] c"Converts to a decimal number; parses text (int(s) or 0.0 handles bad text).\00" +@.str.6271 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6272 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00" +@.str.6273 = private unnamed_addr constant [30 x i8] c"The character with this code.\00" +@.str.6274 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6275 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00" +@.str.6276 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00" +@.str.6277 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6278 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00" +@.str.6279 = private unnamed_addr constant [89 x i8] c"An untyped pointer: from a typed pointer, or from a number (an address or offset for C).\00" +@.str.6280 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6281 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6282 = private unnamed_addr constant [24 x i8] c"The number of elements.\00" +@.str.6283 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6284 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00" +@.str.6285 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00" +@.str.6286 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.6287 = private unnamed_addr constant [10 x i8] c"push(T x)\00" +@.str.6288 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00" +@.str.6289 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.6290 = private unnamed_addr constant [11 x i8] c"pop() -> T\00" +@.str.6291 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00" +@.str.6292 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.6293 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00" +@.str.6294 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00" +@.str.6295 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6296 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00" +@.str.6297 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00" +@.str.6298 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6299 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6300 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6301 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.6302 = private unnamed_addr constant [14 x i8] c"resize(int n)\00" +@.str.6303 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00" +@.str.6304 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6305 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00" +@.str.6306 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00" +@.str.6307 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6308 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00" +@.str.6309 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00" +@.str.6310 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.6311 = private unnamed_addr constant [7 x i8] c"sort()\00" +@.str.6312 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00" +@.str.6313 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.6314 = private unnamed_addr constant [10 x i8] c"reverse()\00" +@.str.6315 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00" +@.str.6316 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str.6317 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00" +@.str.6318 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00" +@.str.6319 = private unnamed_addr constant [5 x i8] c"join\00" +@.str.6320 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00" +@.str.6321 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00" +@.str.6322 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6323 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6324 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00" +@.str.6325 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6326 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00" +@.str.6327 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00" +@.str.6328 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.6329 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00" +@.str.6330 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00" +@.str.6331 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6332 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00" +@.str.6333 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00" +@.str.6334 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6335 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00" +@.str.6336 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00" +@.str.6337 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str.6338 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00" +@.str.6339 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00" +@.str.6340 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.6341 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00" +@.str.6342 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00" +@.str.6343 = private unnamed_addr constant [6 x i8] c"split\00" +@.str.6344 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00" +@.str.6345 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00" +@.str.6346 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str.6347 = private unnamed_addr constant [14 x i8] c"trim() -> str\00" +@.str.6348 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00" +@.str.6349 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str.6350 = private unnamed_addr constant [15 x i8] c"upper() -> str\00" +@.str.6351 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00" +@.str.6352 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str.6353 = private unnamed_addr constant [15 x i8] c"lower() -> str\00" +@.str.6354 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00" +@.str.6355 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str.6356 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00" +@.str.6357 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00" +@.str.6358 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str.6359 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00" +@.str.6360 = private unnamed_addr constant [18 x i8] c"The text n times.\00" +@.str.6361 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str.6362 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00" +@.str.6363 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00" +@.str.6364 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6365 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6366 = private unnamed_addr constant [20 x i8] c"The number of keys.\00" +@.str.6367 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.6368 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00" +@.str.6369 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00" +@.str.6370 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.6371 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00" +@.str.6372 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00" +@.str.6373 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6374 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00" +@.str.6375 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00" +@.str.6376 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6377 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6378 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6379 = private unnamed_addr constant [5 x i8] c"keys\00" +@.str.6380 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00" +@.str.6381 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00" +@.str.6382 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.6383 = private unnamed_addr constant [16 x i8] c"values() -> []V\00" +@.str.6384 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00" +@.str.6385 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.6386 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.6387 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.6388 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.6389 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.6390 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.6391 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.6392 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.6393 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.6394 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.6395 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.6396 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.6397 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.6398 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.6399 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.6400 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.6401 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.6402 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.6403 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.6404 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.6405 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.6406 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.6407 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6408 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6409 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6410 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6411 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6412 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6413 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.6414 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6415 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6416 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6417 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.6418 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6419 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6420 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6421 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6422 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6423 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.6424 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.6425 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00" declare ptr @clang_getCString(i64, i64) declare void @clang_disposeString(i64, i64) -@.str.6424 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str.6425 = private unnamed_addr constant [16 x i8] c"/finch_cc_dirs_\00" -@.str.6426 = private unnamed_addr constant [5 x i8] c".txt\00" -@.str.6427 = private unnamed_addr constant [14 x i8] c"/finch_empty_\00" -@.str.6428 = private unnamed_addr constant [3 x i8] c".c\00" -@.str.6429 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6430 = private unnamed_addr constant [13 x i8] c" -E -v -x c \00" -@.str.6431 = private unnamed_addr constant [5 x i8] c" 2> \00" -@.str.6432 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6433 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6434 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6435 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6426 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6427 = private unnamed_addr constant [16 x i8] c"/finch_cc_dirs_\00" +@.str.6428 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6429 = private unnamed_addr constant [14 x i8] c"/finch_empty_\00" +@.str.6430 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6431 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6432 = private unnamed_addr constant [13 x i8] c" -E -v -x c \00" +@.str.6433 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6434 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6435 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6436 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6437 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6438 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00" +@.str.6437 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6438 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6439 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6440 = private unnamed_addr constant [20 x i8] c"End of search list.\00" +@.str.6440 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00" @.str.6441 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6442 = private unnamed_addr constant [23 x i8] c" (framework directory)\00" -@.str.6443 = private unnamed_addr constant [12 x i8] c"-iframework\00" -@.str.6444 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6445 = private unnamed_addr constant [9 x i8] c"-isystem\00" +@.str.6442 = private unnamed_addr constant [20 x i8] c"End of search list.\00" +@.str.6443 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6444 = private unnamed_addr constant [23 x i8] c" (framework directory)\00" +@.str.6445 = private unnamed_addr constant [12 x i8] c"-iframework\00" +@.str.6446 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6447 = private unnamed_addr constant [9 x i8] c"-isystem\00" declare void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16, ptr byval(%S.C.CXType) align 8) declare { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8) -@.str.6446 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6447 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6448 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6449 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6450 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6451 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6452 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" declare { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8) -@.str.6451 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6452 = private unnamed_addr constant [2 x i8] c" \00" @.str.6453 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6454 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" -@.str.6455 = private unnamed_addr constant [13 x i8] c"anon_struct_\00" -@.str.6456 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6457 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6454 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6455 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6456 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6457 = private unnamed_addr constant [13 x i8] c"anon_struct_\00" @.str.6458 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6459 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" -declare void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) +@.str.6459 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" @.str.6460 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6461 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6461 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) @.str.6462 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6463 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +@.str.6463 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6464 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6465 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" declare i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8) -@.str.6464 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6465 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6466 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +@.str.6466 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6467 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6468 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" declare i64 @clang_Type_getAlignOf(ptr byval(%S.C.CXType) align 8) declare i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8) -@.str.6467 = private unnamed_addr constant [13 x i8] c"is a C union\00" +@.str.6469 = private unnamed_addr constant [13 x i8] c"is a C union\00" declare i32 @clang_Type_visitFields(ptr byval(%S.C.CXType) align 8, ptr, ptr) -@.str.6468 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6469 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" @.str.6470 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6471 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6471 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" @.str.6472 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6473 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6474 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6475 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare void @clang_getCursorType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXCursor) align 8) declare i64 @clang_Cursor_getOffsetOfField(ptr byval(%S.C.CXCursor) align 8) declare i32 @clang_Cursor_isBitField(ptr byval(%S.C.CXCursor) align 8) -@.str.6474 = private unnamed_addr constant [15 x i8] c"has bit fields\00" -@.str.6475 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6476 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6476 = private unnamed_addr constant [15 x i8] c"has bit fields\00" @.str.6477 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6478 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00" +@.str.6478 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6479 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6480 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00" +@.str.6480 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00" @.str.6481 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6482 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6482 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00" @.str.6483 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6484 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00" +@.str.6484 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" @.str.6485 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6486 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6486 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00" @.str.6487 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6488 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00" -@.str.6489 = private unnamed_addr constant [3 x i8] c"i8\00" -@.str.6490 = private unnamed_addr constant [3 x i8] c"u8\00" -@.str.6491 = private unnamed_addr constant [4 x i8] c"i16\00" -@.str.6492 = private unnamed_addr constant [4 x i8] c"u16\00" -@.str.6493 = private unnamed_addr constant [4 x i8] c"i32\00" -@.str.6494 = private unnamed_addr constant [4 x i8] c"u32\00" -@.str.6495 = private unnamed_addr constant [4 x i8] c"int\00" -@.str.6496 = private unnamed_addr constant [4 x i8] c"u64\00" -@.str.6497 = private unnamed_addr constant [8 x i8] c"uses a \00" -@.str.6498 = private unnamed_addr constant [12 x i8] c"-bit number\00" -@.str.6499 = private unnamed_addr constant [5 x i8] c"void\00" -@.str.6500 = private unnamed_addr constant [5 x i8] c"bool\00" -@.str.6501 = private unnamed_addr constant [5 x i8] c"char\00" -@.str.6502 = private unnamed_addr constant [4 x i8] c"f32\00" -@.str.6503 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6488 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6489 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6490 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00" +@.str.6491 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6492 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6493 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6494 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6495 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6496 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6497 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6498 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6499 = private unnamed_addr constant [8 x i8] c"uses a \00" +@.str.6500 = private unnamed_addr constant [12 x i8] c"-bit number\00" +@.str.6501 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6502 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6503 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6504 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6505 = private unnamed_addr constant [6 x i8] c"float\00" declare void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) declare i32 @clang_isConstQualifiedType(ptr byval(%S.C.CXType) align 8) -@.str.6504 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.6505 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6506 = private unnamed_addr constant [5 x i8] c"void\00" -@.str.6507 = private unnamed_addr constant [6 x i8] c"fixed\00" -@.str.6508 = private unnamed_addr constant [4 x i8] c"ptr\00" -@.str.6509 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00" -@.str.6510 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00" -@.str.6511 = private unnamed_addr constant [6 x i8] c"named\00" -@.str.6512 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.6506 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6507 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6508 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6509 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6510 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6511 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00" +@.str.6512 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00" +@.str.6513 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.6514 = private unnamed_addr constant [2 x i8] c"C\00" declare void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) declare i64 @clang_getArraySize(ptr byval(%S.C.CXType) align 8) -@.str.6513 = private unnamed_addr constant [17 x i8] c"uses long double\00" -@.str.6514 = private unnamed_addr constant [18 x i8] c"uses the C type '\00" +@.str.6515 = private unnamed_addr constant [17 x i8] c"uses long double\00" +@.str.6516 = private unnamed_addr constant [18 x i8] c"uses the C type '\00" declare { i64, i64 } @clang_getTypeSpelling(ptr byval(%S.C.CXType) align 8) -@.str.6515 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6516 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6517 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6517 = private unnamed_addr constant [2 x i8] c"'\00" @.str.6518 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6519 = private unnamed_addr constant [3 x i8] c"0X\00" +@.str.6519 = private unnamed_addr constant [3 x i8] c"0x\00" @.str.6520 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6521 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6521 = private unnamed_addr constant [3 x i8] c"0X\00" @.str.6522 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6523 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6524 = private unnamed_addr constant [5 x i8] c"uUlL\00" +@.str.6524 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6525 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6526 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6526 = private unnamed_addr constant [5 x i8] c"uUlL\00" @.str.6527 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6528 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +@.str.6528 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6529 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6530 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" declare void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16, ptr byval(%S.C.CXCursor) align 8) declare void @clang_tokenize(ptr, ptr byval(%S.C.CXSourceRange) align 8, ptr, ptr) declare i32 @clang_getTokenKind(ptr byval(%S.C.CXToken) align 8) -@.str.6529 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6530 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" -declare { i64, i64 } @clang_getTokenSpelling(ptr, ptr byval(%S.C.CXToken) align 8) @.str.6531 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6532 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" -declare void @clang_disposeTokens(ptr, ptr, i32) +declare { i64, i64 } @clang_getTokenSpelling(ptr, ptr byval(%S.C.CXToken) align 8) @.str.6533 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6534 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6534 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare void @clang_disposeTokens(ptr, ptr, i32) @.str.6535 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6536 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6536 = private unnamed_addr constant [2 x i8] c"(\00" @.str.6537 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6538 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6539 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.6538 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6539 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6540 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6541 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.6541 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" @.str.6542 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6543 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6543 = private unnamed_addr constant [2 x i8] c"-\00" @.str.6544 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6545 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6546 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6547 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6548 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6548 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6549 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6550 = private unnamed_addr constant [2 x i8] c"e\00" +@.str.6550 = private unnamed_addr constant [2 x i8] c".\00" @.str.6551 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6552 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.6552 = private unnamed_addr constant [2 x i8] c"e\00" @.str.6553 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6554 = private unnamed_addr constant [3 x i8] c"0x\00" -@.str.6555 = private unnamed_addr constant [5 x i8] c"fFlL\00" -@.str.6556 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6557 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6554 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.6555 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6556 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6557 = private unnamed_addr constant [5 x i8] c"fFlL\00" @.str.6558 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -declare void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXCursor) align 8) @.str.6559 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6560 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6560 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +declare void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXCursor) align 8) @.str.6561 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6562 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6562 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6563 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6564 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6564 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6565 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6566 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6567 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6566 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6567 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6568 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6569 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6569 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6570 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6571 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6571 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" @.str.6572 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6573 = private unnamed_addr constant [31 x i8] c"used .header on a null pointer\00" +@.str.6573 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6574 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6575 = private unnamed_addr constant [31 x i8] c"used .header on a null pointer\00" declare i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8) -@.str.6574 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00" -@.str.6575 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6576 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6577 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00" -@.str.6578 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6579 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6576 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00" +@.str.6577 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6578 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6579 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00" +@.str.6580 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6581 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" declare void @clang_getResultType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) declare i32 @clang_getNumArgTypes(ptr byval(%S.C.CXType) align 8) declare void @clang_getArgType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8, i32) declare i32 @clang_isFunctionTypeVariadic(ptr byval(%S.C.CXType) align 8) -@.str.6580 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6581 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6582 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6583 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.6584 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6585 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -declare i32 @clang_isCursorDefinition(ptr byval(%S.C.CXCursor) align 8) @.str.6586 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6587 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6587 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_isCursorDefinition(ptr byval(%S.C.CXCursor) align 8) @.str.6588 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6589 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6589 = private unnamed_addr constant [2 x i8] c" \00" @.str.6590 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6591 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" -declare i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8, ptr, ptr) @.str.6592 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6593 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -declare i64 @clang_getEnumConstantDeclValue(ptr byval(%S.C.CXCursor) align 8) +@.str.6593 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8, ptr, ptr) @.str.6594 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6595 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -declare i32 @clang_Cursor_isMacroBuiltin(ptr byval(%S.C.CXCursor) align 8) -declare i32 @clang_Cursor_isMacroFunctionLike(ptr byval(%S.C.CXCursor) align 8) +declare i64 @clang_getEnumConstantDeclValue(ptr byval(%S.C.CXCursor) align 8) @.str.6596 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6597 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_Cursor_isMacroBuiltin(ptr byval(%S.C.CXCursor) align 8) +declare i32 @clang_Cursor_isMacroFunctionLike(ptr byval(%S.C.CXCursor) align 8) @.str.6598 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" @.str.6599 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.6600 = private unnamed_addr constant [3 x i8] c"-x\00" -@.str.6601 = private unnamed_addr constant [2 x i8] c"c\00" -@.str.6602 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00" -@.str.6603 = private unnamed_addr constant [10 x i8] c"--target=\00" -@.str.6604 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00" -@.str.6605 = private unnamed_addr constant [3 x i8] c"-I\00" -@.str.6606 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" -@.str.6607 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6600 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6601 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6602 = private unnamed_addr constant [3 x i8] c"-x\00" +@.str.6603 = private unnamed_addr constant [2 x i8] c"c\00" +@.str.6604 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00" +@.str.6605 = private unnamed_addr constant [10 x i8] c"--target=\00" +@.str.6606 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00" +@.str.6607 = private unnamed_addr constant [3 x i8] c"-I\00" +@.str.6608 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6609 = private unnamed_addr constant [1 x i8] c"\00" declare ptr @clang_createIndex(i32, i32) -@.str.6608 = private unnamed_addr constant [11 x i8] c"#include \22\00" -@.str.6609 = private unnamed_addr constant [3 x i8] c"\22\0A\00" -@.str.6610 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" -@.str.6611 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6612 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6610 = private unnamed_addr constant [11 x i8] c"#include \22\00" +@.str.6611 = private unnamed_addr constant [3 x i8] c"\22\0A\00" +@.str.6612 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" @.str.6613 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" @.str.6614 = private unnamed_addr constant [1 x i8] c"\00" declare i32 @clang_parseTranslationUnit2(ptr, ptr, ptr, i32, ptr, i32, i32, ptr) @@ -6780,223 +6780,223 @@ declare void @clang_disposeDiagnostic(ptr) declare void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16, ptr) declare void @clang_disposeTranslationUnit(ptr) declare void @clang_disposeIndex(ptr) -@.str.6630 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6631 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6630 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6631 = private unnamed_addr constant [1 x i8] c"\00" @.str.6632 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6633 = private unnamed_addr constant [5 x i8] c"'\5C''\00" +@.str.6633 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" @.str.6634 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6635 = private unnamed_addr constant [10 x i8] c"/dev/null\00" -@.str.6636 = private unnamed_addr constant [7 x i8] c"TMPDIR\00" -@.str.6637 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6638 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" -@.str.6639 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6635 = private unnamed_addr constant [5 x i8] c"'\5C''\00" +@.str.6636 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6637 = private unnamed_addr constant [10 x i8] c"/dev/null\00" +@.str.6638 = private unnamed_addr constant [7 x i8] c"TMPDIR\00" +@.str.6639 = private unnamed_addr constant [1 x i8] c"\00" @.str.6640 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" -@.str.6641 = private unnamed_addr constant [5 x i8] c"/tmp\00" -@.str.6642 = private unnamed_addr constant [2 x i8] c":\00" +@.str.6641 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6642 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6643 = private unnamed_addr constant [5 x i8] c"/tmp\00" +@.str.6644 = private unnamed_addr constant [2 x i8] c":\00" declare i32 @getpid() -@.str.6643 = private unnamed_addr constant [4 x i8] c"PWD\00" -@.str.6644 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6645 = private unnamed_addr constant [15 x i8] c"XDG_CACHE_HOME\00" +@.str.6645 = private unnamed_addr constant [4 x i8] c"PWD\00" @.str.6646 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6647 = private unnamed_addr constant [7 x i8] c"/finch\00" -@.str.6648 = private unnamed_addr constant [5 x i8] c"HOME\00" -@.str.6649 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6650 = private unnamed_addr constant [14 x i8] c"/.cache/finch\00" -@.str.6651 = private unnamed_addr constant [13 x i8] c"/finch-cache\00" -@.str.6652 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" -@.str.6653 = private unnamed_addr constant [8 x i8] c"rm -rf \00" -@.str.6654 = private unnamed_addr constant [4 x i8] c"mv \00" -@.str.6655 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6656 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6657 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6658 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6647 = private unnamed_addr constant [15 x i8] c"XDG_CACHE_HOME\00" +@.str.6648 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6649 = private unnamed_addr constant [7 x i8] c"/finch\00" +@.str.6650 = private unnamed_addr constant [5 x i8] c"HOME\00" +@.str.6651 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6652 = private unnamed_addr constant [14 x i8] c"/.cache/finch\00" +@.str.6653 = private unnamed_addr constant [13 x i8] c"/finch-cache\00" +@.str.6654 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" +@.str.6655 = private unnamed_addr constant [8 x i8] c"rm -rf \00" +@.str.6656 = private unnamed_addr constant [4 x i8] c"mv \00" +@.str.6657 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6658 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6659 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6660 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6661 = private unnamed_addr constant [15 x i8] c"/finch_triple_\00" -@.str.6662 = private unnamed_addr constant [5 x i8] c".txt\00" -@.str.6663 = private unnamed_addr constant [22 x i8] c"clang -dumpmachine > \00" -@.str.6664 = private unnamed_addr constant [5 x i8] c" 2> \00" -@.str.6665 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6666 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6667 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" -@.str.6668 = private unnamed_addr constant [8 x i8] c"windows\00" -@.str.6669 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" -@.str.6670 = private unnamed_addr constant [6 x i8] c"linux\00" -@.str.6671 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" -@.str.6672 = private unnamed_addr constant [6 x i8] c"arm64\00" -@.str.6673 = private unnamed_addr constant [8 x i8] c"aarch64\00" -@.str.6674 = private unnamed_addr constant [12 x i8] c"linux-arm64\00" -@.str.6675 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00" -@.str.6676 = private unnamed_addr constant [6 x i8] c"macos\00" -@.str.6677 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6678 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6660 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6661 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6662 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6663 = private unnamed_addr constant [15 x i8] c"/finch_triple_\00" +@.str.6664 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6665 = private unnamed_addr constant [22 x i8] c"clang -dumpmachine > \00" +@.str.6666 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6667 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6668 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6669 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6670 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6671 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" +@.str.6672 = private unnamed_addr constant [6 x i8] c"linux\00" +@.str.6673 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6674 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6675 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6676 = private unnamed_addr constant [12 x i8] c"linux-arm64\00" +@.str.6677 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00" +@.str.6678 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.6679 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6680 = private unnamed_addr constant [6 x i8] c"arm64\00" -@.str.6681 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00" -@.str.6682 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00" -@.str.6683 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6684 = private unnamed_addr constant [8 x i8] c"windows\00" -@.str.6685 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6686 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6680 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6681 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6682 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6683 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00" +@.str.6684 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00" +@.str.6685 = private unnamed_addr constant [23 x i8] c"x86_64-w64-windows-gnu\00" +@.str.6686 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" @.str.6687 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6688 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6688 = private unnamed_addr constant [8 x i8] c"windows\00" @.str.6689 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6690 = private unnamed_addr constant [6 x i8] c"win32\00" +@.str.6690 = private unnamed_addr constant [6 x i8] c"mingw\00" @.str.6691 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6692 = private unnamed_addr constant [5 x i8] c"msvc\00" @.str.6693 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6694 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6694 = private unnamed_addr constant [6 x i8] c"win32\00" @.str.6695 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6696 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6696 = private unnamed_addr constant [5 x i8] c"msvc\00" @.str.6697 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6698 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.6698 = private unnamed_addr constant [6 x i8] c"apple\00" @.str.6699 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6700 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6700 = private unnamed_addr constant [7 x i8] c"darwin\00" @.str.6701 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6702 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6702 = private unnamed_addr constant [6 x i8] c"macos\00" @.str.6703 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6704 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6705 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" @.str.6706 = private unnamed_addr constant [6 x i8] c"arm64\00" @.str.6707 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6708 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6708 = private unnamed_addr constant [8 x i8] c"aarch64\00" @.str.6709 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" -@.str.6710 = private unnamed_addr constant [7 x i8] c"darwin\00" -@.str.6711 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6712 = private unnamed_addr constant [5 x i8] c".exe\00" -@.str.6713 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" -@.str.6714 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6715 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00" -@.str.6716 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00" -@.str.6717 = private unnamed_addr constant [16 x i8] c"clang --target=\00" -@.str.6718 = private unnamed_addr constant [2 x i8] c";\00" -@.str.6719 = private unnamed_addr constant [6 x i8] c"clang\00" -@.str.6720 = private unnamed_addr constant [3 x i8] c"cc\00" -@.str.6721 = private unnamed_addr constant [6 x i8] c"wine \00" -@.str.6722 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00" -@.str.6723 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" -@.str.6724 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6725 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6726 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6727 = private unnamed_addr constant [11 x i8] c".framework\00" -@.str.6728 = private unnamed_addr constant [12 x i8] c"-framework \00" -@.str.6729 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6730 = private unnamed_addr constant [18 x i8] c"/finch_pkg_flags_\00" -@.str.6731 = private unnamed_addr constant [5 x i8] c".txt\00" -@.str.6732 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00" -@.str.6733 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6734 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6710 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6711 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6712 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6713 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6714 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6715 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6716 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6717 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6718 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6719 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6720 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6721 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6722 = private unnamed_addr constant [5 x i8] c".exe\00" +@.str.6723 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6724 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6725 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00" +@.str.6726 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00" +@.str.6727 = private unnamed_addr constant [16 x i8] c"clang --target=\00" +@.str.6728 = private unnamed_addr constant [2 x i8] c";\00" +@.str.6729 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6730 = private unnamed_addr constant [3 x i8] c"cc\00" +@.str.6731 = private unnamed_addr constant [6 x i8] c"wine \00" +@.str.6732 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00" +@.str.6733 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.6734 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6735 = private unnamed_addr constant [1 x i8] c"\00" @.str.6736 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6737 = private unnamed_addr constant [3 x i8] c"-l\00" -@.str.6738 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6739 = private unnamed_addr constant [2 x i8] c"/\00" -@.str.6740 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6741 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6742 = private unnamed_addr constant [2 x i8] c"/\00" -@.str.6743 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6744 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6745 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6737 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6738 = private unnamed_addr constant [12 x i8] c"-framework \00" +@.str.6739 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6740 = private unnamed_addr constant [18 x i8] c"/finch_pkg_flags_\00" +@.str.6741 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6742 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00" +@.str.6743 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6744 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6745 = private unnamed_addr constant [1 x i8] c"\00" @.str.6746 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6747 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6747 = private unnamed_addr constant [3 x i8] c"-l\00" @.str.6748 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6749 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6750 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6749 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6750 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6751 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6752 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6752 = private unnamed_addr constant [2 x i8] c"/\00" @.str.6753 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6754 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6755 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6756 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6756 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6757 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6758 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6759 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" -@.str.6760 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" -@.str.6761 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6759 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6760 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6761 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" @.str.6762 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6763 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" -@.str.6764 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" -@.str.6765 = private unnamed_addr constant [3 x i8] c" \0A\00" -@.str.6766 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6767 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" -@.str.6768 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" -@.str.6769 = private unnamed_addr constant [4 x i8] c" \0A\0D\00" -@.str.6770 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6771 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" -@.str.6772 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" -@.str.6773 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" -@.str.6774 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6775 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" -@.str.6776 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" -@.str.6777 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" -@.str.6778 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6779 = private unnamed_addr constant [14 x i8] c"ld: library '\00" -@.str.6780 = private unnamed_addr constant [14 x i8] c"ld: library '\00" -@.str.6781 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6782 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6783 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6763 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6764 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6765 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6766 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6767 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6768 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6769 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6770 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6771 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6772 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6773 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6774 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6775 = private unnamed_addr constant [3 x i8] c" \0A\00" +@.str.6776 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6777 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6778 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6779 = private unnamed_addr constant [4 x i8] c" \0A\0D\00" +@.str.6780 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6781 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6782 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6783 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" @.str.6784 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6785 = private unnamed_addr constant [10 x i8] c"not found\00" -@.str.6786 = private unnamed_addr constant [12 x i8] c"framework '\00" -@.str.6787 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.6788 = private unnamed_addr constant [11 x i8] c".framework\00" -@.str.6789 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6790 = private unnamed_addr constant [2 x i8] c"\22\00" -@.str.6791 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6792 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" -@.str.6793 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6785 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6786 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6787 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" +@.str.6788 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6789 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6790 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6791 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6792 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6793 = private unnamed_addr constant [12 x i8] c"framework '\00" @.str.6794 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6795 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" -@.str.6796 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6797 = private unnamed_addr constant [2 x i8] c"_\00" -@.str.6798 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6799 = private unnamed_addr constant [22 x i8] c"error: linking failed\00" -@.str.6800 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6801 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6802 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6803 = private unnamed_addr constant [21 x i8] c"error: the library '\00" -@.str.6804 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00" -@.str.6805 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6806 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6807 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6808 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6809 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6810 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6811 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6812 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6813 = private unnamed_addr constant [3 x i8] c", \00" -@.str.6814 = private unnamed_addr constant [6 x i8] c" and \00" -@.str.6815 = private unnamed_addr constant [6 x i8] c" more\00" -@.str.6816 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6817 = private unnamed_addr constant [26 x i8] c"error: no code found for \00" +@.str.6795 = private unnamed_addr constant [10 x i8] c"not found\00" +@.str.6796 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6797 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6798 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6799 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6800 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6801 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6802 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6803 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6804 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6805 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6806 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6807 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.6808 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6809 = private unnamed_addr constant [22 x i8] c"error: linking failed\00" +@.str.6810 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6811 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6812 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6813 = private unnamed_addr constant [21 x i8] c"error: the library '\00" +@.str.6814 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00" +@.str.6815 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6816 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6817 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6818 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6819 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6820 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6821 = private unnamed_addr constant [5 x i8] c"come\00" -@.str.6822 = private unnamed_addr constant [6 x i8] c"comes\00" -@.str.6823 = private unnamed_addr constant [8 x i8] c"error: \00" -@.str.6824 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6825 = private unnamed_addr constant [8 x i8] c" from \22\00" +@.str.6819 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6820 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6821 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6822 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6823 = private unnamed_addr constant [3 x i8] c", \00" +@.str.6824 = private unnamed_addr constant [6 x i8] c" and \00" +@.str.6825 = private unnamed_addr constant [6 x i8] c" more\00" @.str.6826 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6827 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00" +@.str.6827 = private unnamed_addr constant [26 x i8] c"error: no code found for \00" @.str.6828 = private unnamed_addr constant [1 x i8] c"\00" @.str.6829 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6830 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6831 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00" -@.str.6832 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6833 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6834 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6835 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00" -@.str.6836 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6837 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6838 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6839 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6840 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6841 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6842 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6843 = private unnamed_addr constant [13 x i8] c" link \22\00" -@.str.6844 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6845 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6831 = private unnamed_addr constant [5 x i8] c"come\00" +@.str.6832 = private unnamed_addr constant [6 x i8] c"comes\00" +@.str.6833 = private unnamed_addr constant [8 x i8] c"error: \00" +@.str.6834 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6835 = private unnamed_addr constant [8 x i8] c" from \22\00" +@.str.6836 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6837 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00" +@.str.6838 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6839 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6840 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6841 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00" +@.str.6842 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6843 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6844 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6845 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00" @.str.6846 = private unnamed_addr constant [1 x i8] c"\00" @.str.6847 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6848 = private unnamed_addr constant [2 x i8] c"\0A\00" @@ -7004,625 +7004,625 @@ declare i32 @getpid() @.str.6850 = private unnamed_addr constant [1 x i8] c"\00" @.str.6851 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6852 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6853 = private unnamed_addr constant [5 x i8] c"/rt-\00" -@.str.6854 = private unnamed_addr constant [4 x i8] c"2.5\00" -@.str.6855 = private unnamed_addr constant [3 x i8] c".o\00" -@.str.6856 = private unnamed_addr constant [6 x i8] c".part\00" -@.str.6857 = private unnamed_addr constant [7 x i8] c" -fPIC\00" -@.str.6858 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6859 = private unnamed_addr constant [5 x i8] c".log\00" -@.str.6860 = private unnamed_addr constant [5 x i8] c" -O2\00" -@.str.6861 = private unnamed_addr constant [5 x i8] c" -c \00" -@.str.6862 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str.6863 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6864 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.6865 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6866 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00" -@.str.6867 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00" -@.str.6868 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00" -@.str.6869 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6870 = private unnamed_addr constant [6 x i8] c"clang\00" -@.str.6871 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" -@.str.6872 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6873 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" -@.str.6874 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6853 = private unnamed_addr constant [13 x i8] c" link \22\00" +@.str.6854 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6855 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6856 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6857 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6858 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6859 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6860 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6861 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6862 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6863 = private unnamed_addr constant [5 x i8] c"/rt-\00" +@.str.6864 = private unnamed_addr constant [4 x i8] c"2.5\00" +@.str.6865 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6866 = private unnamed_addr constant [6 x i8] c".part\00" +@.str.6867 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6868 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6869 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6870 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6871 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6872 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6873 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6874 = private unnamed_addr constant [6 x i8] c" 2>&1\00" @.str.6875 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6876 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6877 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6878 = private unnamed_addr constant [4 x i8] c".ll\00" -@.str.6879 = private unnamed_addr constant [3 x i8] c".o\00" -@.str.6880 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6881 = private unnamed_addr constant [11 x i8] c" --target=\00" -@.str.6882 = private unnamed_addr constant [5 x i8] c".log\00" -@.str.6883 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6884 = private unnamed_addr constant [8 x i8] c" -w -c \00" -@.str.6885 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str.6886 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6887 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.6888 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6889 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6890 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6891 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6892 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00" -@.str.6893 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6894 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6895 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6896 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6897 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6898 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str.6899 = private unnamed_addr constant [5 x i8] c" -lm\00" -@.str.6900 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00" -@.str.6901 = private unnamed_addr constant [9 x i8] c" -shared\00" -@.str.6902 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6903 = private unnamed_addr constant [3 x i8] c".c\00" -@.str.6904 = private unnamed_addr constant [2 x i8] c".\00" -@.str.6905 = private unnamed_addr constant [3 x i8] c".o\00" -@.str.6906 = private unnamed_addr constant [7 x i8] c" -fPIC\00" -@.str.6907 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6908 = private unnamed_addr constant [5 x i8] c" -O2\00" -@.str.6909 = private unnamed_addr constant [5 x i8] c" -c \00" -@.str.6910 = private unnamed_addr constant [5 x i8] c" -o \00" -@.str.6911 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6912 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.6913 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6914 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00" -@.str.6915 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6916 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6917 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6918 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6919 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6876 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00" +@.str.6877 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00" +@.str.6878 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00" +@.str.6879 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6880 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6881 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6882 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6883 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6884 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6885 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6886 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6887 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6888 = private unnamed_addr constant [4 x i8] c".ll\00" +@.str.6889 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6890 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6891 = private unnamed_addr constant [11 x i8] c" --target=\00" +@.str.6892 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6893 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6894 = private unnamed_addr constant [8 x i8] c" -w -c \00" +@.str.6895 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6896 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6897 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6898 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6899 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6900 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6901 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6902 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00" +@.str.6903 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6904 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6905 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6906 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6907 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6908 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6909 = private unnamed_addr constant [5 x i8] c" -lm\00" +@.str.6910 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6911 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6912 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6913 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6914 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6915 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00" +@.str.6916 = private unnamed_addr constant [9 x i8] c" -shared\00" +@.str.6917 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6918 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6919 = private unnamed_addr constant [2 x i8] c".\00" @.str.6920 = private unnamed_addr constant [3 x i8] c".o\00" -@.str.6921 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" -@.str.6922 = private unnamed_addr constant [3 x i8] c".a\00" -@.str.6923 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6924 = private unnamed_addr constant [2 x i8] c" \00" -@.str.6925 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.6926 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.6927 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6928 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00" -@.str.6929 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00" +@.str.6921 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6922 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6923 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6924 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6925 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6926 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6927 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6928 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6929 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00" @.str.6930 = private unnamed_addr constant [1 x i8] c"\00" @.str.6931 = private unnamed_addr constant [5 x i8] c"%.*s\00" @.str.6932 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6933 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6934 = private unnamed_addr constant [5 x i8] c"%.*s\00" -@.str.6935 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6936 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6937 = private unnamed_addr constant [8 x i8] c"file://\00" -@.str.6938 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6939 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6940 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6941 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6942 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6943 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6944 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6945 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" -@.str.6946 = private unnamed_addr constant [8 x i8] c"file://\00" -@.str.6947 = private unnamed_addr constant [6 x i8] c"/-_.~\00" -@.str.6948 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6949 = private unnamed_addr constant [2 x i8] c"%\00" -@.str.6950 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6933 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6934 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6935 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6936 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6937 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.6938 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6939 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6940 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6941 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6942 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6943 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00" +@.str.6944 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00" +@.str.6945 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6946 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6947 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6948 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6949 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6950 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.6951 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6952 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6952 = private unnamed_addr constant [8 x i8] c"file://\00" @.str.6953 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6954 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6955 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6955 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6956 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6957 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6958 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6958 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6959 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6960 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.6961 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6962 = private unnamed_addr constant [1 x i8] c"\00" -declare i32 @getchar() -@.str.6963 = private unnamed_addr constant [1 x i8] c"\00" -@.str.6964 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6965 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.6960 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" +@.str.6961 = private unnamed_addr constant [8 x i8] c"file://\00" +@.str.6962 = private unnamed_addr constant [6 x i8] c"/-_.~\00" +@.str.6963 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6964 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.6965 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.6966 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6967 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6968 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6969 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6970 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6971 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6972 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6973 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6974 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6975 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6976 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6977 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @getchar() +@.str.6978 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6979 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6980 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.6981 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @stdin = external global ptr declare i32 @feof(ptr) -@.str.6967 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00" -@.str.6968 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6969 = private unnamed_addr constant [16 x i8] c"Content-Length:\00" -@.str.6970 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6971 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6972 = private unnamed_addr constant [26 x i8] c"the message was cut short\00" -@.str.6973 = private unnamed_addr constant [17 x i8] c"Content-Length: \00" -@.str.6974 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00" -@.str.6975 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6982 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00" +@.str.6983 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6984 = private unnamed_addr constant [16 x i8] c"Content-Length:\00" +@.str.6985 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6986 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6987 = private unnamed_addr constant [26 x i8] c"the message was cut short\00" +@.str.6988 = private unnamed_addr constant [17 x i8] c"Content-Length: \00" +@.str.6989 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00" +@.str.6990 = private unnamed_addr constant [1 x i8] c"\00" @stdout = external global ptr declare i64 @fwrite(ptr, i64, i64, ptr) -@.str.6976 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" -@.str.6977 = private unnamed_addr constant [4 x i8] c"2.0\00" -@.str.6978 = private unnamed_addr constant [3 x i8] c"id\00" -@.str.6979 = private unnamed_addr constant [7 x i8] c"result\00" -@.str.6980 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" -@.str.6981 = private unnamed_addr constant [4 x i8] c"2.0\00" -@.str.6982 = private unnamed_addr constant [7 x i8] c"method\00" -@.str.6983 = private unnamed_addr constant [7 x i8] c"params\00" -@.str.6984 = private unnamed_addr constant [5 x i8] c"line\00" -@.str.6985 = private unnamed_addr constant [10 x i8] c"character\00" -@.str.6986 = private unnamed_addr constant [6 x i8] c"start\00" -@.str.6987 = private unnamed_addr constant [4 x i8] c"end\00" -@.str.6988 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6989 = private unnamed_addr constant [2 x i8] c"\09\00" -@.str.6990 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6991 = private unnamed_addr constant [10 x i8] c": error: \00" -@.str.6992 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6993 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6994 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6995 = private unnamed_addr constant [2 x i8] c":\00" -@.str.6996 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6997 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6998 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.6999 = private unnamed_addr constant [2 x i8] c":\00" -@.str.7000 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7001 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.7002 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7003 = private unnamed_addr constant [2 x i8] c"@\00" -@.str.7004 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7005 = private unnamed_addr constant [3 x i8] c"@R\00" -@.str.7006 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6991 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.6992 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.6993 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.6994 = private unnamed_addr constant [7 x i8] c"result\00" +@.str.6995 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.6996 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.6997 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.6998 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.6999 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7000 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7001 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7002 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7003 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7004 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7005 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7006 = private unnamed_addr constant [10 x i8] c": error: \00" @.str.7007 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7008 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7009 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7010 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7010 = private unnamed_addr constant [2 x i8] c":\00" @.str.7011 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7012 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7013 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7014 = private unnamed_addr constant [3 x i8] c"@V\00" +@.str.7014 = private unnamed_addr constant [2 x i8] c":\00" @.str.7015 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7016 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7016 = private unnamed_addr constant [2 x i8] c"\0A\00" @.str.7017 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7018 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7018 = private unnamed_addr constant [2 x i8] c"@\00" @.str.7019 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7020 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7020 = private unnamed_addr constant [3 x i8] c"@R\00" @.str.7021 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7022 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7023 = private unnamed_addr constant [3 x i8] c"@F\00" +@.str.7023 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7024 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7025 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7026 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7027 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7028 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7029 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7029 = private unnamed_addr constant [3 x i8] c"@V\00" @.str.7030 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7031 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7032 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7033 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7034 = private unnamed_addr constant [2 x i8] c"|\00" -@.str.7035 = private unnamed_addr constant [3 x i8] c"@S\00" +@.str.7034 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7035 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7036 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7037 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7038 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7038 = private unnamed_addr constant [3 x i8] c"@F\00" @.str.7039 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7040 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7041 = private unnamed_addr constant [4 x i8] c"@SF\00" +@.str.7041 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7042 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7043 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7044 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7045 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7046 = private unnamed_addr constant [3 x i8] c"@E\00" +@.str.7046 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7047 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7048 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7049 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7050 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7049 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.7050 = private unnamed_addr constant [3 x i8] c"@S\00" @.str.7051 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7052 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7053 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7054 = private unnamed_addr constant [2 x i8] c",\00" -@.str.7055 = private unnamed_addr constant [3 x i8] c"@I\00" -@.str.7056 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7057 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7058 = private unnamed_addr constant [5 x i8] c"/doc\00" -@.str.7059 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.7054 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7055 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7056 = private unnamed_addr constant [4 x i8] c"@SF\00" +@.str.7057 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7058 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7059 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7060 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7061 = private unnamed_addr constant [12 x i8] c" --overlay \00" -@.str.7062 = private unnamed_addr constant [2 x i8] c"=\00" -@.str.7063 = private unnamed_addr constant [9 x i8] c"/out.txt\00" -@.str.7064 = private unnamed_addr constant [8 x i8] c" index \00" -@.str.7065 = private unnamed_addr constant [4 x i8] c" > \00" -@.str.7066 = private unnamed_addr constant [6 x i8] c" 2>&1\00" -@.str.7067 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7061 = private unnamed_addr constant [3 x i8] c"@E\00" +@.str.7062 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7063 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7064 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7065 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7066 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7067 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7068 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7069 = private unnamed_addr constant [6 x i8] c"range\00" -@.str.7070 = private unnamed_addr constant [9 x i8] c"severity\00" -@.str.7071 = private unnamed_addr constant [7 x i8] c"source\00" -@.str.7072 = private unnamed_addr constant [6 x i8] c"finch\00" -@.str.7073 = private unnamed_addr constant [8 x i8] c"message\00" -@.str.7074 = private unnamed_addr constant [4 x i8] c"uri\00" -@.str.7075 = private unnamed_addr constant [12 x i8] c"diagnostics\00" -@.str.7076 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" -@.str.7077 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7078 = private unnamed_addr constant [5 x i8] c"kind\00" -@.str.7079 = private unnamed_addr constant [9 x i8] c"markdown\00" -@.str.7080 = private unnamed_addr constant [6 x i8] c"value\00" -@.str.7081 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7082 = private unnamed_addr constant [9 x i8] c"contents\00" +@.str.7069 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7070 = private unnamed_addr constant [3 x i8] c"@I\00" +@.str.7071 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7072 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7073 = private unnamed_addr constant [5 x i8] c"/doc\00" +@.str.7074 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.7075 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7076 = private unnamed_addr constant [12 x i8] c" --overlay \00" +@.str.7077 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.7078 = private unnamed_addr constant [9 x i8] c"/out.txt\00" +@.str.7079 = private unnamed_addr constant [8 x i8] c" index \00" +@.str.7080 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.7081 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.7082 = private unnamed_addr constant [1 x i8] c"\00" @.str.7083 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7084 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7085 = private unnamed_addr constant [4 x i8] c"uri\00" -@.str.7086 = private unnamed_addr constant [6 x i8] c"range\00" -@.str.7087 = private unnamed_addr constant [2 x i8] c".\00" -@.str.7088 = private unnamed_addr constant [5 x i8] c"name\00" -@.str.7089 = private unnamed_addr constant [5 x i8] c"kind\00" -@.str.7090 = private unnamed_addr constant [6 x i8] c"start\00" -@.str.7091 = private unnamed_addr constant [4 x i8] c"end\00" -@.str.7092 = private unnamed_addr constant [6 x i8] c"range\00" -@.str.7093 = private unnamed_addr constant [15 x i8] c"selectionRange\00" -@.str.7094 = private unnamed_addr constant [6 x i8] c"label\00" -@.str.7095 = private unnamed_addr constant [5 x i8] c"kind\00" -@.str.7096 = private unnamed_addr constant [7 x i8] c"detail\00" -@.str.7097 = private unnamed_addr constant [5 x i8] c"kind\00" -@.str.7098 = private unnamed_addr constant [9 x i8] c"markdown\00" -@.str.7099 = private unnamed_addr constant [6 x i8] c"value\00" -@.str.7100 = private unnamed_addr constant [14 x i8] c"documentation\00" -@.str.7101 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7084 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7085 = private unnamed_addr constant [9 x i8] c"severity\00" +@.str.7086 = private unnamed_addr constant [7 x i8] c"source\00" +@.str.7087 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7088 = private unnamed_addr constant [8 x i8] c"message\00" +@.str.7089 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7090 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7091 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7092 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7093 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7094 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7095 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7096 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7097 = private unnamed_addr constant [9 x i8] c"contents\00" +@.str.7098 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7099 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7100 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7101 = private unnamed_addr constant [6 x i8] c"range\00" @.str.7102 = private unnamed_addr constant [2 x i8] c".\00" -@.str.7103 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7104 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00" -@.str.7105 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7106 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7107 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7108 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7109 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7110 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7111 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7112 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7113 = private unnamed_addr constant [2 x i8] c"[\00" -@.str.7114 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7115 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7116 = private unnamed_addr constant [8 x i8] c"struct \00" -@.str.7117 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7118 = private unnamed_addr constant [6 x i8] c"enum \00" -@.str.7119 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7120 = private unnamed_addr constant [2 x i8] c".\00" -@.str.7121 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7103 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7104 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7105 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7106 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7107 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7108 = private unnamed_addr constant [15 x i8] c"selectionRange\00" +@.str.7109 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7110 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7111 = private unnamed_addr constant [7 x i8] c"detail\00" +@.str.7112 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7113 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7114 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7115 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7116 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7117 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7118 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7119 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00" +@.str.7120 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7121 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7122 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7123 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7123 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7124 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7125 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.7126 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.7125 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7126 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7127 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7128 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7128 = private unnamed_addr constant [2 x i8] c"[\00" @.str.7129 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7130 = private unnamed_addr constant [2 x i8] c"]\00" -@.str.7131 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7132 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7133 = private unnamed_addr constant [3 x i8] c"[]\00" -@.str.7134 = private unnamed_addr constant [4 x i8] c"str\00" -@.str.7135 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7136 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.7130 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7131 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7132 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7133 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7135 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7136 = private unnamed_addr constant [1 x i8] c"\00" @.str.7137 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7138 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7139 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7140 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7141 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7142 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7143 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7144 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7145 = private unnamed_addr constant [8 x i8] c"struct \00" -@.str.7146 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7147 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7148 = private unnamed_addr constant [6 x i8] c"enum \00" -@.str.7149 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7150 = private unnamed_addr constant [7 x i8] c"module\00" -@.str.7151 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7152 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7153 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7138 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7139 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7140 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7141 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.7142 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7143 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7144 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7145 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7146 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7147 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7148 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7149 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7150 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7151 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.7152 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7153 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" @.str.7154 = private unnamed_addr constant [1 x i8] c"\00" @.str.7155 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7156 = private unnamed_addr constant [13 x i8] c"isIncomplete\00" -@.str.7157 = private unnamed_addr constant [6 x i8] c"items\00" -@.str.7158 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7159 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7160 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7161 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7156 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7157 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7158 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7159 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7160 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7161 = private unnamed_addr constant [1 x i8] c"\00" @.str.7162 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7163 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7164 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7165 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7166 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7167 = private unnamed_addr constant [5 x i8] c"ptr[\00" -@.str.7168 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7169 = private unnamed_addr constant [2 x i8] c"]\00" -@.str.7170 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7171 = private unnamed_addr constant [6 x i8] c"label\00" -@.str.7172 = private unnamed_addr constant [6 x i8] c"label\00" -@.str.7173 = private unnamed_addr constant [11 x i8] c"parameters\00" -@.str.7174 = private unnamed_addr constant [11 x i8] c"signatures\00" -@.str.7175 = private unnamed_addr constant [16 x i8] c"activeSignature\00" -@.str.7176 = private unnamed_addr constant [16 x i8] c"activeParameter\00" -@.str.7177 = private unnamed_addr constant [6 x i8] c"label\00" -@.str.7178 = private unnamed_addr constant [14 x i8] c"documentation\00" -@.str.7179 = private unnamed_addr constant [11 x i8] c"signatures\00" -@.str.7180 = private unnamed_addr constant [16 x i8] c"activeSignature\00" -@.str.7181 = private unnamed_addr constant [16 x i8] c"activeParameter\00" -@.str.7182 = private unnamed_addr constant [13 x i8] c"textDocument\00" -@.str.7183 = private unnamed_addr constant [5 x i8] c"text\00" -@.str.7184 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7185 = private unnamed_addr constant [13 x i8] c"textDocument\00" -@.str.7186 = private unnamed_addr constant [4 x i8] c"uri\00" -@.str.7187 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7188 = private unnamed_addr constant [7 x i8] c"method\00" -@.str.7189 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7190 = private unnamed_addr constant [7 x i8] c"params\00" -@.str.7191 = private unnamed_addr constant [3 x i8] c"id\00" -@.str.7192 = private unnamed_addr constant [11 x i8] c"initialize\00" -@.str.7193 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00" -@.str.7194 = private unnamed_addr constant [14 x i8] c"hoverProvider\00" -@.str.7195 = private unnamed_addr constant [19 x i8] c"definitionProvider\00" -@.str.7196 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00" -@.str.7197 = private unnamed_addr constant [2 x i8] c".\00" -@.str.7198 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" -@.str.7199 = private unnamed_addr constant [19 x i8] c"completionProvider\00" -@.str.7200 = private unnamed_addr constant [2 x i8] c"(\00" -@.str.7201 = private unnamed_addr constant [2 x i8] c",\00" -@.str.7202 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" -@.str.7203 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00" -@.str.7204 = private unnamed_addr constant [13 x i8] c"capabilities\00" -@.str.7205 = private unnamed_addr constant [5 x i8] c"name\00" -@.str.7206 = private unnamed_addr constant [6 x i8] c"finch\00" -@.str.7207 = private unnamed_addr constant [11 x i8] c"serverInfo\00" -@.str.7208 = private unnamed_addr constant [9 x i8] c"shutdown\00" -@.str.7209 = private unnamed_addr constant [5 x i8] c"exit\00" -@.str.7210 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00" -@.str.7211 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00" -@.str.7212 = private unnamed_addr constant [15 x i8] c"contentChanges\00" -@.str.7213 = private unnamed_addr constant [5 x i8] c"text\00" -@.str.7214 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7215 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00" -@.str.7216 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00" -@.str.7217 = private unnamed_addr constant [4 x i8] c"uri\00" -@.str.7218 = private unnamed_addr constant [12 x i8] c"diagnostics\00" -@.str.7219 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" -@.str.7220 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" -@.str.7221 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" -@.str.7222 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" -@.str.7223 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" -@.str.7224 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00" -@.str.7225 = private unnamed_addr constant [9 x i8] c"position\00" -@.str.7226 = private unnamed_addr constant [5 x i8] c"line\00" -@.str.7227 = private unnamed_addr constant [9 x i8] c"position\00" -@.str.7228 = private unnamed_addr constant [10 x i8] c"character\00" -@.str.7229 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7230 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7231 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" -@.str.7232 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" -@.str.7233 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" -@.str.7234 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" -@.str.7235 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" -@.str.7236 = private unnamed_addr constant [12 x i8] c"/finch_lsp_\00" -@.str.7237 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7238 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7239 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7240 = private unnamed_addr constant [2 x i8] c"\22\00" -@.str.7241 = private unnamed_addr constant [3 x i8] c"\5C\22\00" -@.str.7242 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" -@.str.7243 = private unnamed_addr constant [3 x i8] c"\5Cn\00" -@.str.7244 = private unnamed_addr constant [3 x i8] c"\5Cr\00" -@.str.7245 = private unnamed_addr constant [3 x i8] c"\5Ct\00" -@.str.7246 = private unnamed_addr constant [5 x i8] c"\5Cu00\00" -@.str.7247 = private unnamed_addr constant [2 x i8] c"\22\00" -@.str.7248 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7249 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" -@.str.7250 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7251 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7252 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7253 = private unnamed_addr constant [2 x i8] c",\00" -@.str.7254 = private unnamed_addr constant [2 x i8] c":\00" -@.str.7255 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.7256 = private unnamed_addr constant [3 x i8] c": \00" -@.str.7257 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7258 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7259 = private unnamed_addr constant [5 x i8] c"null\00" -@.str.7260 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7261 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7262 = private unnamed_addr constant [5 x i8] c"true\00" -@.str.7263 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7264 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7265 = private unnamed_addr constant [6 x i8] c"false\00" -@.str.7266 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7267 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7268 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7269 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7270 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7271 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7272 = private unnamed_addr constant [3 x i8] c"[]\00" -@.str.7273 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7274 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7275 = private unnamed_addr constant [2 x i8] c"[\00" -@.str.7276 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7277 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7163 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7164 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7165 = private unnamed_addr constant [7 x i8] c"module\00" +@.str.7166 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7167 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7168 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7169 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7170 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7171 = private unnamed_addr constant [13 x i8] c"isIncomplete\00" +@.str.7172 = private unnamed_addr constant [6 x i8] c"items\00" +@.str.7173 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7174 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7175 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7176 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7177 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7178 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7179 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7180 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7181 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7182 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7183 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7184 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7185 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7186 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7187 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7188 = private unnamed_addr constant [11 x i8] c"parameters\00" +@.str.7189 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7190 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7191 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7192 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7193 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7194 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7195 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7196 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7197 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7198 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7199 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7200 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7201 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7202 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7203 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.7204 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7205 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.7206 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.7207 = private unnamed_addr constant [11 x i8] c"initialize\00" +@.str.7208 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00" +@.str.7209 = private unnamed_addr constant [14 x i8] c"hoverProvider\00" +@.str.7210 = private unnamed_addr constant [19 x i8] c"definitionProvider\00" +@.str.7211 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00" +@.str.7212 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7213 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7214 = private unnamed_addr constant [19 x i8] c"completionProvider\00" +@.str.7215 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.7216 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7217 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7218 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00" +@.str.7219 = private unnamed_addr constant [13 x i8] c"capabilities\00" +@.str.7220 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7221 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7222 = private unnamed_addr constant [11 x i8] c"serverInfo\00" +@.str.7223 = private unnamed_addr constant [9 x i8] c"shutdown\00" +@.str.7224 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.7225 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00" +@.str.7226 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00" +@.str.7227 = private unnamed_addr constant [15 x i8] c"contentChanges\00" +@.str.7228 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7229 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7230 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00" +@.str.7231 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00" +@.str.7232 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7233 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7234 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7235 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7236 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7237 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7238 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7239 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00" +@.str.7240 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7241 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7242 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7243 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7244 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7245 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7246 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7247 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7248 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7249 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7250 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7251 = private unnamed_addr constant [12 x i8] c"/finch_lsp_\00" +@.str.7252 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7253 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7254 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7255 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7256 = private unnamed_addr constant [3 x i8] c"\5C\22\00" +@.str.7257 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" +@.str.7258 = private unnamed_addr constant [3 x i8] c"\5Cn\00" +@.str.7259 = private unnamed_addr constant [3 x i8] c"\5Cr\00" +@.str.7260 = private unnamed_addr constant [3 x i8] c"\5Ct\00" +@.str.7261 = private unnamed_addr constant [5 x i8] c"\5Cu00\00" +@.str.7262 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7263 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7264 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.7265 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7266 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7267 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7268 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7269 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7270 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7271 = private unnamed_addr constant [3 x i8] c": \00" +@.str.7272 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7273 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7274 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7275 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7276 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7277 = private unnamed_addr constant [5 x i8] c"true\00" @.str.7278 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7279 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7280 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7281 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7282 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7280 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7281 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7282 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7283 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7284 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7285 = private unnamed_addr constant [3 x i8] c"{}\00" -@.str.7286 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7287 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7288 = private unnamed_addr constant [2 x i8] c"{\00" -@.str.7289 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7290 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7285 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7286 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7287 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7288 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7289 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7290 = private unnamed_addr constant [2 x i8] c"[\00" @.str.7291 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7292 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" @.str.7293 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7294 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7295 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" -@.str.7296 = private unnamed_addr constant [2 x i8] c"}\00" -@.str.7297 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7298 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" -@.str.7299 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7300 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7301 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7302 = private unnamed_addr constant [3 x i8] c" \00" -@.str.7303 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7304 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7305 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7306 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7307 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7308 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7294 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7295 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7296 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7297 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7298 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7299 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7300 = private unnamed_addr constant [3 x i8] c"{}\00" +@.str.7301 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7302 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7303 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.7304 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7305 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7306 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7307 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7308 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7309 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7310 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7311 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7312 = private unnamed_addr constant [6 x i8] c"line \00" -@.str.7313 = private unnamed_addr constant [10 x i8] c", column \00" -@.str.7314 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7315 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7316 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7317 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7318 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7319 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7310 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7311 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.7312 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7313 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" +@.str.7314 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7315 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7316 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7317 = private unnamed_addr constant [3 x i8] c" \00" +@.str.7318 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7319 = private unnamed_addr constant [1 x i8] c"\00" @.str.7320 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7321 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7322 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7323 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7324 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7325 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7326 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7327 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7328 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7323 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7324 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7325 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7326 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7327 = private unnamed_addr constant [6 x i8] c"line \00" +@.str.7328 = private unnamed_addr constant [10 x i8] c", column \00" @.str.7329 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7330 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7331 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7332 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7333 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7334 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7335 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7336 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7332 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7333 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7334 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7335 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7336 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7337 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7338 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7339 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7340 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7341 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7338 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7339 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7340 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7341 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7342 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7343 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7344 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7345 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7346 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7347 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7348 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7348 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7349 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7350 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7351 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7352 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7353 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00" -@.str.7354 = private unnamed_addr constant [13 x i8] c" should be (\00" -@.str.7355 = private unnamed_addr constant [2 x i8] c")\00" -@.str.7356 = private unnamed_addr constant [14 x i8] c"json: found '\00" +@.str.7352 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7353 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7354 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7355 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7356 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7357 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7358 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7359 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7360 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7361 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7362 = private unnamed_addr constant [9 x i8] c"' where \00" -@.str.7363 = private unnamed_addr constant [13 x i8] c" should be (\00" -@.str.7364 = private unnamed_addr constant [2 x i8] c")\00" -@.str.7365 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7366 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7367 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7368 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7369 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7370 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7371 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7362 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7363 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7364 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7365 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7366 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7367 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7368 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00" +@.str.7369 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7370 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7371 = private unnamed_addr constant [14 x i8] c"json: found '\00" @.str.7372 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7373 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7373 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7374 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7375 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7376 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.7377 = private unnamed_addr constant [2 x i8] c"'\00" -@.str.7378 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7379 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7376 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7377 = private unnamed_addr constant [9 x i8] c"' where \00" +@.str.7378 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7379 = private unnamed_addr constant [2 x i8] c")\00" @.str.7380 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7381 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7381 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7382 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7383 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7383 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7384 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7385 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7386 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7387 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7388 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7389 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00" -@.str.7390 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7391 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7392 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7393 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7394 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7387 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7388 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7389 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7390 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7391 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7392 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7393 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7394 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7395 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7396 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7397 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7398 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7398 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7399 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7400 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7400 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7401 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7402 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7403 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7404 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7405 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00" -@.str.7406 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7404 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00" +@.str.7405 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7406 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7407 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7408 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7408 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7409 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7410 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7411 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7410 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7411 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7412 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7413 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7413 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7414 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7415 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7416 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7417 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7418 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7419 = private unnamed_addr constant [1 x i8] c"\00" -@.str.7420 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00" +@.str.7415 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7416 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7417 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7418 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7419 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7420 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00" @.str.7421 = private unnamed_addr constant [2 x i8] c")\00" @.str.7422 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7423 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7423 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7424 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7425 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7425 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7426 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7427 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7428 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7428 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7429 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7430 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7431 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7432 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7433 = private unnamed_addr constant [2 x i8] c"\0A\00" -@.str.7434 = private unnamed_addr constant [2 x i8] c"\09\00" -@.str.7435 = private unnamed_addr constant [2 x i8] c"\0D\00" -@.str.7436 = private unnamed_addr constant [3 x i8] c"\5Cu\00" +@.str.7430 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7431 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7432 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7434 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7435 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00" +@.str.7436 = private unnamed_addr constant [2 x i8] c")\00" @.str.7437 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7438 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7439 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00" -@.str.7440 = private unnamed_addr constant [13 x i8] c" in a text (\00" -@.str.7441 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7439 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7440 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7441 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7442 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7443 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7444 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7445 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7446 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7448 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7449 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7450 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7451 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7448 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7449 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7450 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.7451 = private unnamed_addr constant [3 x i8] c"\5Cu\00" @.str.7452 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7453 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7454 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7455 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7456 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7453 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7454 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00" +@.str.7455 = private unnamed_addr constant [13 x i8] c" in a text (\00" +@.str.7456 = private unnamed_addr constant [2 x i8] c")\00" @.str.7457 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7458 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7458 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7459 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7460 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7461 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7462 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7463 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7464 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7465 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7466 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7463 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7464 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7465 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7466 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7467 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7468 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7469 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @@ -7644,63 +7644,78 @@ declare i64 @fwrite(ptr, i64, i64, ptr) @.str.7485 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7486 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7487 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7488 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7488 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7489 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7490 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7490 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7491 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7492 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7493 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7493 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7494 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7495 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7496 = private unnamed_addr constant [9 x i8] c"a number\00" +@.str.7496 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7497 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7498 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7498 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" @.str.7499 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7500 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" -@.str.7501 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7500 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7501 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7502 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7503 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7504 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7505 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7506 = private unnamed_addr constant [16 x i8] c"a key in quotes\00" -@.str.7507 = private unnamed_addr constant [4 x i8] c"':'\00" -@.str.7508 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7509 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7510 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7511 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7505 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7506 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7507 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7508 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7509 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7510 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7511 = private unnamed_addr constant [9 x i8] c"a number\00" @.str.7512 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7513 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7514 = private unnamed_addr constant [11 x i8] c"',' or '}'\00" -@.str.7515 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7516 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7514 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7515 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7516 = private unnamed_addr constant [8 x i8] c"a value\00" @.str.7517 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7518 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" @.str.7519 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" @.str.7520 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7521 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" -@.str.7522 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" -@.str.7523 = private unnamed_addr constant [11 x i8] c"',' or ']'\00" -@.str.7524 = private unnamed_addr constant [5 x i8] c"true\00" -@.str.7525 = private unnamed_addr constant [6 x i8] c"false\00" -@.str.7526 = private unnamed_addr constant [5 x i8] c"null\00" -@.str.7527 = private unnamed_addr constant [8 x i8] c"a value\00" -@.str.7528 = private unnamed_addr constant [20 x i8] c"the end of the text\00" -@.str.7529 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" -@.str.7530 = private unnamed_addr constant [13 x i8] c"std/json.fch\00" -@.str.7531 = private unnamed_addr constant [13 x i8] c"std/path.fch\00" -@.str.7532 = private unnamed_addr constant [13 x i8] c"std/proc.fch\00" -@.str.7533 = private unnamed_addr constant [21 x i8] c"std/proc_windows.fch\00" -@.str.7534 = private unnamed_addr constant [13 x i8] c"std/time.fch\00" -@.str.7535 = private unnamed_addr constant [21 x i8] c"std/time_windows.fch\00" -@.str.7536 = private unnamed_addr constant [16 x i8] c"std/finch_win.h\00" -@.str.7537 = private unnamed_addr constant [24982 x i8] c"// The Finch runtime: string and array helpers, input, files and runtime errors.\0A// It is embedded in the compiler, compiled once into a cache folder, and linked\0A// statically into every Finch program. Everything here is plain C with no state.\0A//\0A// Layout shared with the compiler (src/codegen.cpp):\0A// str = { char *ptr; int64 len; int64 cap } ptr is always NUL-terminated\0A// cap > 0 : heap memory owned by the value (cap bytes allocated)\0A// cap == 0 : a string literal, valid forever, never written to\0A// cap == -1: borrowed from C, must be copied before it is kept\0A// []T = { T *ptr; int64 len; int64 cap } owns ptr when cap > 0\0A// map[K]V: see \22maps\22 below\0A\0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#ifndef _WIN32\0A#include \0A#endif\0A\0Atypedef struct {\0A char *ptr;\0A int64_t len;\0A int64_t cap;\0A} FStr;\0A\0Atypedef struct {\0A void *ptr;\0A int64_t len;\0A int64_t cap;\0A} FArr;\0A\0Astatic char empty[1] = \22\22;\0A\0A// ---------- runtime errors ----------\0A\0A// A program that loads Finch libraries (finch build --shared) can take runtime errors over\0A// instead of the process exiting: finch_module_on_fatal(handler) in each library. The handler\0A// gets the message and must not return (longjmp out, or exit itself).\0Astatic void (*fatal_hook)(const char *msg);\0Avoid finch_on_fatal(void (*hook)(const char *msg)) { fatal_hook = hook; }\0A\0Astatic __attribute__((noreturn)) void fatal(const char *msg) {\0A if (fatal_hook) fatal_hook(msg);\0A fflush(stdout);\0A fprintf(stderr, \22%s\5Cn\22, msg);\0A exit(1);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic(const char *file, int64_t line, const char *msg) {\0A char full[1024];\0A snprintf(full, sizeof full, \22%s:%lld: runtime error: %s\22, file, (long long)line, msg);\0A fflush(stdout);\0A fatal(full);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic_index(const char *file, int64_t line, int64_t i, int64_t len) {\0A char msg[128];\0A snprintf(msg, sizeof msg, \22index %lld is out of range (the length is %lld)\22, (long long)i, (long long)len);\0A finch_panic(file, line, msg);\0A}\0A\0Astatic void *must(void *p) {\0A if (!p) {\0A fflush(stdout);\0A fatal(\22runtime error: out of memory\22);\0A }\0A return p;\0A}\0A\0Avoid *finch_alloc(int64_t n) { return must(malloc(n ? (size_t)n : 1)); }\0Avoid *finch_zalloc(int64_t n) { return must(calloc(1, n ? (size_t)n : 1)); }\0A\0A// ---------- strings ----------\0A\0Astatic void str_heap(FStr *out, const char *p, int64_t len) {\0A char *m = finch_alloc(len + 1);\0A if (len) memcpy(m, p, (size_t)len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void str_static(FStr *out, const char *lit) {\0A out->ptr = (char *)lit;\0A out->len = (int64_t)strlen(lit);\0A out->cap = 0;\0A}\0A\0A// A copy that can be kept: literals are shared, everything else is duplicated.\0Avoid finch_str_copy(FStr *out, const FStr *s) {\0A if (s->cap == 0) *out = *s;\0A else str_heap(out, s->ptr, s->len);\0A}\0A\0A// Make `s` writable (before s[i] = c).\0Avoid finch_str_own(FStr *s) {\0A if (s->cap > 0) return;\0A FStr t;\0A str_heap(&t, s->ptr, s->len);\0A *s = t;\0A}\0A\0Avoid finch_str_drop(FStr *s) {\0A if (s->cap > 0) free(s->ptr);\0A}\0A\0Avoid finch_str_from_c(FStr *out, const char *p) {\0A if (!p) {\0A str_static(out, empty);\0A return;\0A }\0A out->ptr = (char *)p;\0A out->len = (int64_t)strlen(p);\0A out->cap = -1;\0A}\0A\0Avoid finch_str_concat(FStr *out, const FStr *a, const FStr *b) {\0A int64_t len = a->len + b->len;\0A char *m = finch_alloc(len + 1);\0A memcpy(m, a->ptr, (size_t)a->len);\0A memcpy(m + a->len, b->ptr, (size_t)b->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Aint finch_str_eq(const FStr *a, const FStr *b) {\0A return a->len == b->len && memcmp(a->ptr, b->ptr, (size_t)a->len) == 0;\0A}\0A\0Aint64_t finch_str_cmp(const FStr *a, const FStr *b) {\0A int64_t n = a->len < b->len ? a->len : b->len;\0A int c = memcmp(a->ptr, b->ptr, (size_t)n);\0A if (c) return c < 0 ? -1 : 1;\0A return a->len < b->len ? -1 : a->len > b->len;\0A}\0A\0Avoid finch_str_from_int(FStr *out, int64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%lld\22, (long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_uint(FStr *out, uint64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%llu\22, (unsigned long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_float(FStr *out, double v) {\0A char buf[64];\0A int n = snprintf(buf, sizeof buf, \22%g\22, v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_char(FStr *out, char c) { str_heap(out, &c, 1); }\0A\0Avoid finch_str_from_bool(FStr *out, int b) { str_static(out, b ? \22true\22 : \22false\22); }\0A\0Astatic void number_error(char *msg, size_t size, const FStr *s, const char *kind) {\0A snprintf(msg, size, \22can't turn \5C\22%.*s\5C\22 into %s\22, (int)(s->len > 100 ? 100 : s->len), s->ptr ? s->ptr : \22\22, kind);\0A}\0A\0Astatic int parse_int(const FStr *s, int64_t *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A errno = 0;\0A long long v = strtoll(p, &end, 10);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end || errno == ERANGE);\0A}\0A\0Astatic int parse_float(const FStr *s, double *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A double v = strtod(p, &end);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end);\0A}\0A\0Aint64_t finch_str_to_int(const FStr *s, const char *file, int64_t line) {\0A int64_t v;\0A if (!parse_int(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0Adouble finch_str_to_float(const FStr *s, const char *file, int64_t line) {\0A double v;\0A if (!parse_float(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0A// ---------- errors as values: int(s) or 0, try read_file(p) ... ----------\0A// Each gives back 1 on success; on failure 0, with the message in *err.\0A\0Astatic void set_error(FStr *err, const char *msg) { str_heap(err, msg, (int64_t)strlen(msg)); }\0A\0Aint finch_str_try_int(const FStr *s, int64_t *out, FStr *err) {\0A if (parse_int(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Aint finch_str_try_float(const FStr *s, double *out, FStr *err) {\0A if (parse_float(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Astatic void file_error(FStr *err, const char *what, const FStr *path) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't %s the file \5C\22%.*s\5C\22: %s\22, what, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr ? path->ptr : \22\22, strerror(errno));\0A set_error(err, msg);\0A}\0A\0A// when `fn main() -> !` fails\0Avoid finch_report_error(const FStr *msg) {\0A fflush(stdout);\0A fprintf(stderr, \22error: %.*s\5Cn\22, (int)msg->len, msg->ptr ? msg->ptr : \22\22);\0A}\0A\0Avoid finch_str_sub(FStr *out, const FStr *s, int64_t start, int64_t end, const char *file, int64_t line) {\0A if (start < 0 || end > s->len || start > end) {\0A char msg[160];\0A snprintf(msg, sizeof msg, \22sub(%lld, %lld) is out of range (the length is %lld)\22, (long long)start,\0A (long long)end, (long long)s->len);\0A finch_panic(file, line, msg);\0A }\0A str_heap(out, s->ptr + start, end - start);\0A}\0A\0Aint64_t finch_str_find(const FStr *s, const FStr *t) {\0A if (t->len == 0) return 0;\0A for (int64_t i = 0; i + t->len <= s->len; i++)\0A if (s->ptr[i] == t->ptr[0] && memcmp(s->ptr + i, t->ptr, (size_t)t->len) == 0) return i;\0A return -1;\0A}\0A\0Aint finch_str_starts(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Aint finch_str_ends(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr + s->len - t->len, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Avoid finch_str_trim(FStr *out, const FStr *s) {\0A int64_t a = 0, b = s->len;\0A while (a < b && isspace((unsigned char)s->ptr[a])) a++;\0A while (b > a && isspace((unsigned char)s->ptr[b - 1])) b--;\0A str_heap(out, s->ptr + a, b - a);\0A}\0A\0Avoid finch_str_upper(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)toupper((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_lower(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)tolower((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_replace(FStr *out, const FStr *s, const FStr *from, const FStr *to) {\0A if (from->len == 0) {\0A str_heap(out, s->ptr, s->len);\0A return;\0A }\0A int64_t count = 0;\0A for (int64_t i = 0; i + from->len <= s->len;) {\0A if (memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A count++;\0A i += from->len;\0A } else {\0A i++;\0A }\0A }\0A int64_t len = s->len + count * (to->len - from->len);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < s->len;) {\0A if (i + from->len <= s->len && memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A memcpy(w, to->ptr, (size_t)to->len);\0A w += to->len;\0A i += from->len;\0A } else {\0A *w++ = s->ptr[i++];\0A }\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len);\0A\0A// \22a,b,,c\22.split(\22,\22) -> [\22a\22, \22b\22, \22\22, \22c\22]; split(\22\22) gives single characters.\0Avoid finch_str_split(FArr *out, const FStr *s, const FStr *sep) {\0A out->ptr = NULL;\0A out->len = out->cap = 0;\0A if (sep->len == 0) {\0A for (int64_t i = 0; i < s->len; i++) arr_push_str(out, s->ptr + i, 1);\0A return;\0A }\0A int64_t start = 0;\0A for (int64_t i = 0; i + sep->len <= s->len;) {\0A if (memcmp(s->ptr + i, sep->ptr, (size_t)sep->len) == 0) {\0A arr_push_str(out, s->ptr + start, i - start);\0A i += sep->len;\0A start = i;\0A } else {\0A i++;\0A }\0A }\0A arr_push_str(out, s->ptr + start, s->len - start);\0A}\0A\0Avoid finch_str_join(FStr *out, const FArr *parts, const FStr *sep) {\0A const FStr *p = parts->ptr;\0A int64_t len = 0;\0A for (int64_t i = 0; i < parts->len; i++) len += p[i].len + (i ? sep->len : 0);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < parts->len; i++) {\0A if (i) {\0A memcpy(w, sep->ptr, (size_t)sep->len);\0A w += sep->len;\0A }\0A memcpy(w, p[i].ptr, (size_t)p[i].len);\0A w += p[i].len;\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_repeat(FStr *out, const FStr *s, int64_t n) {\0A if (n < 0) n = 0;\0A int64_t len = s->len * n;\0A char *m = finch_alloc(len + 1);\0A for (int64_t i = 0; i < n; i++) memcpy(m + i * s->len, s->ptr, (size_t)s->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_from_bytes(FStr *out, const FArr *bytes) { str_heap(out, bytes->ptr, bytes->len); }\0A\0A// ---------- building text: print(x) and str(x) of arrays, maps and structs ----------\0A// A buffer starts as an empty str and grows on the heap.\0A\0Avoid finch_buf_add(FStr *b, const char *p, int64_t n) {\0A if (b->len + n + 1 > b->cap) {\0A int64_t cap = b->cap > 0 ? b->cap * 2 : 32;\0A while (cap < b->len + n + 1) cap *= 2;\0A b->ptr = must(realloc(b->cap > 0 ? b->ptr : NULL, (size_t)cap));\0A b->cap = cap;\0A }\0A if (n) memcpy(b->ptr + b->len, p, (size_t)n);\0A b->len += n;\0A b->ptr[b->len] = 0;\0A}\0A\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) __attribute__((format(printf, 2, 3)));\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) {\0A char t[64];\0A va_list ap;\0A va_start(ap, fmt);\0A int n = vsnprintf(t, sizeof t, fmt, ap);\0A va_end(ap);\0A finch_buf_add(b, t, n);\0A}\0A\0Avoid finch_buf_int(FStr *b, int64_t v) { buf_fmt(b, \22%lld\22, (long long)v); }\0Avoid finch_buf_uint(FStr *b, uint64_t v) { buf_fmt(b, \22%llu\22, (unsigned long long)v); }\0Avoid finch_buf_float(FStr *b, double v) { buf_fmt(b, \22%g\22, v); }\0Avoid finch_buf_bool(FStr *b, int v) { finch_buf_add(b, v ? \22true\22 : \22false\22, v ? 4 : 5); }\0Avoid finch_buf_ptr(FStr *b, const void *p) {\0A if (p) buf_fmt(b, \220x%llx\22, (unsigned long long)(uintptr_t)p);\0A else finch_buf_add(b, \22null\22, 4);\0A}\0A\0Avoid finch_buf_char(FStr *b, char c, int quoted) {\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A finch_buf_add(b, &c, 1);\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A}\0A\0Avoid finch_buf_str(FStr *b, const FStr *s, int quoted) {\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A finch_buf_add(b, s->ptr, s->len);\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A}\0A\0A// print the buffer and free it\0Avoid finch_buf_print(FStr *b) {\0A if (b->len) fwrite(b->ptr, 1, (size_t)b->len, stdout);\0A if (b->cap > 0) free(b->ptr);\0A}\0A\0A// ---------- arrays ----------\0A\0Avoid finch_arr_reserve(FArr *a, int64_t need, int64_t es) {\0A if (need <= a->cap) return;\0A int64_t cap = a->cap * 2;\0A if (cap < 4) cap = 4;\0A if (cap < need) cap = need;\0A a->ptr = must(realloc(a->cap > 0 ? a->ptr : NULL, (size_t)(cap * es)));\0A a->cap = cap;\0A}\0A\0Avoid finch_arr_make(FArr *out, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A out->ptr = len ? finch_zalloc(len * es) : NULL;\0A out->len = len;\0A out->cap = len;\0A}\0A\0A// grow or shrink to `len`; new elements are zero\0Avoid finch_arr_resize(FArr *a, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A finch_arr_reserve(a, len, es);\0A if (len > a->len) memset((char *)a->ptr + a->len * es, 0, (size_t)((len - a->len) * es));\0A a->len = len;\0A}\0A\0A// a byte-for-byte copy of the elements (the compiler deep-copies owning elements afterwards)\0Avoid finch_arr_clone_raw(FArr *out, const FArr *a, int64_t es) {\0A out->len = a->len;\0A out->cap = a->len;\0A out->ptr = a->len ? finch_alloc(a->len * es) : NULL;\0A if (a->len) memcpy(out->ptr, a->ptr, (size_t)(a->len * es));\0A}\0A\0Avoid finch_arr_free(FArr *a) {\0A if (a->cap > 0) free(a->ptr);\0A}\0A\0A// open a hole at i (0 <= i <= len), len grows by one\0Avoid finch_arr_insert_gap(FArr *a, int64_t i, int64_t es, const char *file, int64_t line) {\0A if (i < 0 || i > a->len) finch_panic_index(file, line, i, a->len);\0A finch_arr_reserve(a, a->len + 1, es);\0A char *p = a->ptr;\0A memmove(p + (i + 1) * es, p + i * es, (size_t)((a->len - i) * es));\0A a->len++;\0A}\0A\0A// close the hole at i (the element was already moved out), len shrinks by one\0Avoid finch_arr_remove_gap(FArr *a, int64_t i, int64_t es) {\0A char *p = a->ptr;\0A memmove(p + i * es, p + (i + 1) * es, (size_t)((a->len - i - 1) * es));\0A a->len--;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len) {\0A finch_arr_reserve(a, a->len + 1, (int64_t)sizeof(FStr));\0A str_heap((FStr *)a->ptr + a->len, p, len);\0A a->len++;\0A}\0A\0Avoid finch_bytes_from_str(FArr *out, const FStr *s) {\0A out->len = out->cap = s->len;\0A out->ptr = s->len ? finch_alloc(s->len) : NULL;\0A if (s->len) memcpy(out->ptr, s->ptr, (size_t)s->len);\0A}\0A\0A// ---------- program arguments, input and files ----------\0A\0Avoid finch_args(FArr *out, int argc, char **argv) {\0A out->len = out->cap = argc;\0A out->ptr = finch_alloc((int64_t)sizeof(FStr) * (argc ? argc : 1));\0A for (int i = 0; i < argc; i++) str_heap((FStr *)out->ptr + i, argv[i], (int64_t)strlen(argv[i]));\0A}\0A\0A// input(\22Name? \22) prints the prompt and reads one line, without the newline.\0Avoid finch_input(FStr *out, const FStr *prompt) {\0A if (prompt->len) fwrite(prompt->ptr, 1, (size_t)prompt->len, stdout);\0A fflush(stdout);\0A // read one line of any length (getline isn't available everywhere)\0A size_t size = 128, n = 0;\0A char *line = finch_alloc((int64_t)size);\0A int c, got = 0;\0A while ((c = fgetc(stdin)) != EOF) {\0A got = 1;\0A if (c == '\5Cn') break;\0A if (n + 1 >= size) line = must(realloc(line, size *= 2));\0A line[n++] = (char)c;\0A }\0A if (!got) {\0A free(line);\0A str_static(out, empty);\0A return;\0A }\0A while (n > 0 && line[n - 1] == '\5Cr') n--;\0A line[n] = 0;\0A out->ptr = line;\0A out->len = (int64_t)n;\0A out->cap = (int64_t)size;\0A}\0A\0Aint finch_file_exists(const FStr *path) {\0A FILE *f = fopen(path->ptr, \22rb\22);\0A if (f) fclose(f);\0A return f != NULL;\0A}\0A\0Aint finch_try_read_file(FStr *out, const FStr *path, FStr *err) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A file_error(err, \22read\22, path);\0A return 0;\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A return 1;\0A}\0A\0Avoid finch_read_file(FStr *out, const FStr *path, const char *file, int64_t line) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't read the file \5C\22%.*s\5C\22: %s\22, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr, strerror(errno));\0A finch_panic(file, line, msg);\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A}\0A\0A// shell(\22ls -l\22): run a command, give back its exit code\0Aint64_t finch_shell(const FStr *cmd) {\0A fflush(stdout);\0A int status = system(cmd->ptr ? cmd->ptr : \22\22);\0A#ifdef _WIN32\0A return status; // Windows gives the exit code directly\0A#else\0A if (status == -1) return -1;\0A if (WIFEXITED(status)) return WEXITSTATUS(status);\0A return 128 + (WIFSIGNALED(status) ? WTERMSIG(status) : 0);\0A#endif\0A}\0A\0Aint finch_delete_file(const FStr *path) { return remove(path->ptr ? path->ptr : \22\22) == 0; }\0A\0Aint finch_try_delete_file(const FStr *path, FStr *err) {\0A if (remove(path->ptr ? path->ptr : \22\22) == 0) return 1;\0A file_error(err, \22delete\22, path);\0A return 0;\0A}\0A\0A// stdin/stdout/stderr are macros on some systems (Windows), so Finch asks for them here\0Avoid *finch_std_stream(int i) { return i == 0 ? (void *)stdin : i == 1 ? (void *)stdout : (void *)stderr; }\0A\0Aint finch_write_file(const FStr *path, const FStr *text) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22wb\22);\0A if (!f) return 0;\0A size_t put = text->len ? fwrite(text->ptr, 1, (size_t)text->len, f) : 0;\0A return fclose(f) == 0 && put == (size_t)text->len;\0A}\0A\0Aint finch_try_write_file(const FStr *path, const FStr *text, FStr *err) {\0A errno = 0;\0A if (finch_write_file(path, text)) return 1;\0A if (!errno) errno = EIO;\0A file_error(err, \22write\22, path);\0A return 0;\0A}\0A\0A// ---------- maps ----------\0A// map[K]V = { entries; len; used; cap; index; icap; adds }\0A// entries: `used` slots of es bytes, each { uint64 hash; K key; V value }, in insertion order.\0A// A removed entry keeps its slot (hash 0) until the next resize packs the slots.\0A// index: icap slots (a power of two, at least 2 * cap): -1 empty, -2 removed, else an entry number.\0A// adds: how many keys were ever added; a `for` over the map stops with an error if it changes.\0A// The compiler stores, copies and drops keys and values; the runtime only finds and places entries.\0A// Keys are compared byte for byte (numbers, chars, bools) or as text (kstr).\0A\0Atypedef struct {\0A char *entries;\0A int64_t len, used, cap;\0A int64_t *index;\0A int64_t icap;\0A int64_t adds;\0A} FMap;\0A\0Astatic uint64_t map_hash(const void *key, int64_t ks, int kstr) {\0A const unsigned char *p;\0A size_t n;\0A if (kstr) {\0A const FStr *s = key;\0A p = (const unsigned char *)s->ptr;\0A n = (size_t)s->len;\0A } else {\0A p = key;\0A n = (size_t)ks;\0A }\0A uint64_t h = 1469598103934665603ULL; // FNV-1a, then mixed so the low bits spread well\0A for (size_t i = 0; i < n; i++) {\0A h ^= p[i];\0A h *= 1099511628211ULL;\0A }\0A h ^= h >> 31;\0A h *= 0xbf58476d1ce4e5b9ULL;\0A h ^= h >> 29;\0A return h | 1; // 0 marks a removed entry\0A}\0A\0Astatic int map_key_eq(const char *a, const void *b, int64_t ks, int kstr) {\0A if (!kstr) return memcmp(a, b, (size_t)ks) == 0;\0A const FStr *x = (const FStr *)a, *y = b;\0A return x->len == y->len && (x->len == 0 || memcmp(x->ptr, y->ptr, (size_t)x->len) == 0);\0A}\0A\0Astatic void map_reindex(FMap *m, int64_t es) {\0A if (m->len != m->used) { // pack the slots of removed entries away\0A int64_t j = 0;\0A for (int64_t i = 0; i < m->used; i++) {\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == 0) continue;\0A if (i != j) memmove(m->entries + j * es, e, (size_t)es);\0A j++;\0A }\0A m->used = j;\0A }\0A int64_t icap = 16;\0A while (icap < m->cap * 2) icap *= 2;\0A free(m->index);\0A m->index = finch_alloc(icap * (int64_t)sizeof(int64_t));\0A memset(m->index, 0xff, (size_t)icap * sizeof(int64_t));\0A m->icap = icap;\0A for (int64_t i = 0; i < m->used; i++) {\0A uint64_t h = *(uint64_t *)(m->entries + i * es);\0A int64_t s = (int64_t)(h & (uint64_t)(icap - 1));\0A while (m->index[s] != -1) s = (s + 1) & (icap - 1);\0A m->index[s] = i;\0A }\0A}\0A\0A// the entry number of `key`, or -1\0Aint64_t finch_map_find(const FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr) {\0A if (m->len == 0) return -1;\0A uint64_t h = map_hash(key, ks, kstr);\0A for (int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));; s = (s + 1) & (m->icap - 1)) {\0A int64_t i = m->index[s];\0A if (i == -1) return -1;\0A if (i < 0) continue;\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == h && map_key_eq(e + 8, key, ks, kstr)) return i;\0A }\0A}\0A\0A// The entry for `key`. A new one is zeroed except its hash (*added = 1); the compiler then stores the key.\0Aint64_t finch_map_slot(FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr, int32_t *added) {\0A int64_t i = finch_map_find(m, key, es, ks, kstr);\0A *added = i < 0;\0A if (i >= 0) return i;\0A if (m->used == m->cap) {\0A if (m->len * 4 < m->cap * 3) { // many removed slots: pack them instead of growing\0A map_reindex(m, es);\0A } else {\0A m->cap = m->cap ? m->cap * 2 : 8;\0A m->entries = must(realloc(m->entries, (size_t)(m->cap * es)));\0A map_reindex(m, es);\0A }\0A }\0A uint64_t h = map_hash(key, ks, kstr);\0A i = m->used++;\0A char *e = m->entries + i * es;\0A memset(e, 0, (size_t)es);\0A *(uint64_t *)e = h;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] >= 0) s = (s + 1) & (m->icap - 1);\0A m->index[s] = i;\0A m->len++;\0A m->adds++;\0A return i;\0A}\0A\0A// Forget entry i (its key and value were already dropped by the compiler).\0Avoid finch_map_remove_at(FMap *m, int64_t i, int64_t es) {\0A char *e = m->entries + i * es;\0A uint64_t h = *(uint64_t *)e;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] != i) s = (s + 1) & (m->icap - 1);\0A m->index[s] = -2;\0A *(uint64_t *)e = 0;\0A if (--m->len == 0) {\0A m->used = 0;\0A memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A }\0A}\0A\0Avoid finch_map_clear(FMap *m) {\0A m->len = m->used = 0;\0A if (m->index) memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0Avoid finch_map_free(FMap *m) {\0A free(m->entries);\0A free(m->index);\0A}\0A\0A// A copy of the slots and the index; the compiler then copies the keys and values that own memory.\0Avoid finch_map_clone_raw(FMap *out, const FMap *m, int64_t es) {\0A *out = *m;\0A if (!m->cap) return;\0A out->entries = finch_alloc(m->cap * es);\0A memcpy(out->entries, m->entries, (size_t)(m->used * es));\0A out->index = finch_alloc(m->icap * (int64_t)sizeof(int64_t));\0A memcpy(out->index, m->index, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_changed(const char *file, int64_t line) {\0A finch_panic(file, line, \22a key was added to the map while looping over it (collect the new keys, and add them after the loop)\22);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_missing(const char *file, int64_t line, const FStr *key) {\0A char msg[200];\0A snprintf(msg, sizeof msg, \22the key %.*s is not in the map (check with .has(key), or use .get(key, default))\22,\0A (int)(key->len > 100 ? 100 : key->len), key->ptr ? key->ptr : \22\22);\0A finch_panic(file, line, msg);\0A}\0A\00" -@.str.7538 = private unnamed_addr constant [12885 x i8] c"// JSON: read it, build it, write it.\0A//\0A// import json\0A//\0A// doc := try json.parse(\22{\5C\22name\5C\22: \5C\22Finch\5C\22, \5C\22tags\5C\22: [\5C\22fast\5C\22, \5C\22small\5C\22], \5C\22stars\5C\22: 5}\22)\0A// print(doc.get(\22name\22).str_or(\22\22)) Finch\0A// print(doc.get(\22tags\22).at(1).str_or(\22\22)) small\0A// print(doc.get(\22stars\22).int_or(0)) 5\0A// print(doc.get(\22missing\22).is_null()) true (a missing key is null, so chains never fail)\0A//\0A// out := json.new_object()\0A// out.set(\22ok\22, json.new_bool(true))\0A// list := json.new_list()\0A// list.push(json.new_number(1.5))\0A// out.set(\22values\22, list)\0A// print(json.stringify(out)) {\22ok\22:true,\22values\22:[1.5]}\0A// print(json.pretty(out)) the same, over several lines\0A\0Aenum Kind { Null, Bool, Number, Text, List, Object }\0A\0A// One JSON value. `kind` says which of the other fields it uses: flag for Bool, num for Number,\0A// text for Text, items for List, and items with keys (the same length, in the same order) for Object.\0Astruct Json {\0A Kind kind\0A bool flag\0A float num\0A str text\0A []Json items\0A []str keys\0A}\0A\0Afn new_null() -> Json {\0A return Json(kind: Kind.Null)\0A}\0A\0Afn new_bool(bool b) -> Json {\0A return Json(kind: Kind.Bool, flag: b)\0A}\0A\0Afn new_number(float n) -> Json {\0A return Json(kind: Kind.Number, num: n)\0A}\0A\0Afn new_text(str s) -> Json {\0A return Json(kind: Kind.Text, text: s)\0A}\0A\0Afn new_list() -> Json {\0A return Json(kind: Kind.List)\0A}\0A\0Afn new_object() -> Json {\0A return Json(kind: Kind.Object)\0A}\0A\0A// ---------- looking inside ----------\0A\0Afn Json.is_null() -> bool {\0A return self.kind == Kind.Null\0A}\0A\0A// the number of elements of a list, of keys of an object, of bytes of a text; 0 for the rest\0Afn Json.len() -> int {\0A return match self.kind {\0A List, Object -> self.items.len\0A Text -> self.text.len\0A else -> 0\0A }\0A}\0A\0Afn Json.has(str key) -> bool {\0A return self.kind == Kind.Object && self.keys.contains(key)\0A}\0A\0A// the value of a key of an object; null if there is none (or this is not an object)\0Afn Json.get(str key) -> Json {\0A if self.kind != Kind.Object {\0A return new_null()\0A }\0A i := self.keys.find(key)\0A if i < 0 {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the element of a list; null if there is none\0Afn Json.at(int i) -> Json {\0A if self.kind != Kind.List || i < 0 || i >= self.items.len {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the value if it is of that kind, else what was given\0Afn Json.str_or(str fallback) -> str {\0A if self.kind == Kind.Text {\0A return self.text\0A }\0A return fallback\0A}\0A\0Afn Json.float_or(float fallback) -> float {\0A if self.kind == Kind.Number {\0A return self.num\0A }\0A return fallback\0A}\0A\0Afn Json.int_or(int fallback) -> int {\0A if self.kind == Kind.Number {\0A return int(self.num)\0A }\0A return fallback\0A}\0A\0Afn Json.bool_or(bool fallback) -> bool {\0A if self.kind == Kind.Bool {\0A return self.flag\0A }\0A return fallback\0A}\0A\0A// the keys of an object, in the order they were written\0Afn Json.names() -> []str {\0A return self.keys\0A}\0A\0A// ---------- building ----------\0A\0A// add to the end of a list\0Afn Json.push(Json v) {\0A self.items.push(v)\0A}\0A\0A// give a key a value in an object; a key that is already there is replaced\0Afn Json.set(str key, Json v) {\0A i := self.keys.find(key)\0A if i >= 0 {\0A self.items[i] = v\0A return\0A }\0A self.keys.push(key)\0A self.items.push(v)\0A}\0A\0A// ---------- writing ----------\0A\0Afn quote(str s) -> str {\0A []str parts = [\22\5C\22\22]\0A for c in s {\0A n := int(c)\0A if c == '\22' {\0A parts.push(\22\5C\5C\5C\22\22)\0A } else if c == '\5C\5C' {\0A parts.push(\22\5C\5C\5C\5C\22)\0A } else if c == '\5Cn' {\0A parts.push(\22\5C\5Cn\22)\0A } else if c == '\5Cr' {\0A parts.push(\22\5C\5Cr\22)\0A } else if c == '\5Ct' {\0A parts.push(\22\5C\5Ct\22)\0A } else if n < 32 {\0A parts.push(\22\5C\5Cu00\22 + hexdigit(n / 16) + hexdigit(n % 16))\0A } else {\0A parts.push(str(c))\0A }\0A }\0A parts.push(\22\5C\22\22)\0A return parts.join(\22\22)\0A}\0A\0Afn hexdigit(int n) -> str {\0A digits := \220123456789abcdef\22\0A return str(digits[n])\0A}\0A\0Afn number_text(float n) -> str {\0A if n == float(int(n)) && n > -1000000000000000.0 && n < 1000000000000000.0 {\0A return str(int(n))\0A }\0A return str(n)\0A}\0A\0Astruct Writer {\0A []str out\0A}\0A\0Afn write(Json j, str indent, str pad, ptr[Writer] w) {\0A nl := \22\22\0A inner := \22\22\0A sep := \22,\22\0A colon := \22:\22\0A if indent.len > 0 {\0A nl = \22\5Cn\22\0A inner = pad + indent\0A colon = \22: \22\0A }\0A match j.kind {\0A Null -> w.out.push(\22null\22)\0A Bool -> {\0A if j.flag {\0A w.out.push(\22true\22)\0A } else {\0A w.out.push(\22false\22)\0A }\0A }\0A Number -> w.out.push(number_text(j.num))\0A Text -> w.out.push(quote(j.text))\0A List -> {\0A if j.items.len == 0 {\0A w.out.push(\22[]\22)\0A return\0A }\0A w.out.push(\22[\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22]\22)\0A }\0A Object -> {\0A if j.items.len == 0 {\0A w.out.push(\22{}\22)\0A return\0A }\0A w.out.push(\22{\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner + quote(j.keys[i]) + colon)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22}\22)\0A }\0A }\0A}\0A\0A// the value as text on one line\0Afn stringify(Json j) -> str {\0A w := Writer()\0A write(j, \22\22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// the value as text over several lines, indented by two spaces\0Afn pretty(Json j) -> str {\0A w := Writer()\0A write(j, \22 \22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// ---------- reading ----------\0A\0Astruct Reader {\0A str src\0A int i\0A}\0A\0A// the line and column of a position, for a message\0Afn where(ptr[Reader] r) -> str {\0A line := 1\0A col := 1\0A for k in 0..r.i {\0A if k < r.src.len && r.src[k] == '\5Cn' {\0A line += 1\0A col = 1\0A } else {\0A col += 1\0A }\0A }\0A return \22line \22 + str(line) + \22, column \22 + str(col)\0A}\0A\0Afn peek(ptr[Reader] r) -> char {\0A if r.i < r.src.len {\0A return r.src[r.i]\0A }\0A return char(0)\0A}\0A\0Afn skip_space(ptr[Reader] r) {\0A while r.i < r.src.len && (r.src[r.i] == ' ' || r.src[r.i] == '\5Cn' || r.src[r.i] == '\5Ct' || r.src[r.i] == '\5Cr') {\0A r.i += 1\0A }\0A}\0A\0Afn unexpected(ptr[Reader] r, str wanted) -> str {\0A if r.i >= r.src.len {\0A return \22json: the text ends where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A }\0A return \22json: found '\22 + str(r.src[r.i]) + \22' where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A}\0A\0A// does `word` come next?\0Afn comes(ptr[Reader] r, str word) -> bool {\0A return r.src.len - r.i >= word.len && r.src.sub(r.i, r.i + word.len) == word\0A}\0A\0Afn expect_word(ptr[Reader] r, str word) -> ! {\0A if !comes(r, word) {\0A return error(unexpected(r, \22'\22 + word + \22'\22))\0A }\0A r.i += word.len\0A}\0A\0Afn hex_value(char c) -> int {\0A if c >= '0' && c <= '9' {\0A return int(c) - int('0')\0A }\0A if c >= 'a' && c <= 'f' {\0A return int(c) - int('a') + 10\0A }\0A if c >= 'A' && c <= 'F' {\0A return int(c) - int('A') + 10\0A }\0A return -1\0A}\0A\0A// a code point as UTF-8\0Afn utf8(int cp) -> str {\0A []u8 b\0A if cp < 128 {\0A b.push(u8(cp))\0A } else if cp < 2048 {\0A b.push(u8(192 + cp / 64))\0A b.push(u8(128 + cp % 64))\0A } else if cp < 65536 {\0A b.push(u8(224 + cp / 4096))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A } else {\0A b.push(u8(240 + cp / 262144))\0A b.push(u8(128 + (cp / 4096) % 64))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A }\0A return str(b)\0A}\0A\0Afn read_hex4(ptr[Reader] r) -> int! {\0A n := 0\0A for k in 0..4 {\0A if r.i >= r.src.len || hex_value(r.src[r.i]) < 0 {\0A return error(unexpected(r, \22a hexadecimal digit\22))\0A }\0A n = n * 16 + hex_value(r.src[r.i])\0A r.i += 1\0A }\0A return n\0A}\0A\0Afn read_string(ptr[Reader] r) -> str! {\0A r.i += 1 // the opening quote\0A []str parts\0A start := r.i\0A while true {\0A if r.i >= r.src.len {\0A return error(\22json: a text is never closed (\22 + where(r) + \22)\22)\0A }\0A c := r.src[r.i]\0A if c == '\22' {\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A return parts.join(\22\22)\0A }\0A if int(c) < 32 {\0A return error(\22json: a line break or control character inside a text (\22 + where(r) + \22)\22)\0A }\0A if c != '\5C\5C' {\0A r.i += 1\0A continue\0A }\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A e := peek(r)\0A r.i += 1\0A if e == 'n' {\0A parts.push(\22\5Cn\22)\0A } else if e == 't' {\0A parts.push(\22\5Ct\22)\0A } else if e == 'r' {\0A parts.push(\22\5Cr\22)\0A } else if e == 'b' {\0A parts.push(utf8(8))\0A } else if e == 'f' {\0A parts.push(utf8(12))\0A } else if e == '\22' || e == '\5C\5C' || e == '/' {\0A parts.push(str(e))\0A } else if e == 'u' {\0A cp := try read_hex4(r)\0A // a pair of \F0\9F\98\80 stands for one character above U+FFFF\0A if cp >= 55296 && cp < 56320 && comes(r, \22\5C\5Cu\22) {\0A r.i += 2\0A low := try read_hex4(r)\0A cp = 65536 + (cp - 55296) * 1024 + (low - 56320)\0A }\0A parts.push(utf8(cp))\0A } else {\0A return error(\22json: unknown escape \5C\5C\22 + str(e) + \22 in a text (\22 + where(r) + \22)\22)\0A }\0A start = r.i\0A }\0A}\0A\0Afn read_number(ptr[Reader] r) -> Json! {\0A start := r.i\0A if peek(r) == '-' {\0A r.i += 1\0A }\0A while r.i < r.src.len && ((r.src[r.i] >= '0' && r.src[r.i] <= '9') || r.src[r.i] == '.' || r.src[r.i] == 'e' || r.src[r.i] == 'E' || r.src[r.i] == '+' || r.src[r.i] == '-') {\0A r.i += 1\0A }\0A n := float(r.src.sub(start, r.i)) or {\0A r.i = start\0A return error(unexpected(r, \22a number\22))\0A }\0A return new_number(n)\0A}\0A\0Afn read_value(ptr[Reader] r) -> Json! {\0A skip_space(r)\0A c := peek(r)\0A if r.i >= r.src.len {\0A return error(unexpected(r, \22a value\22))\0A }\0A if c == '{' {\0A obj := new_object()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A while true {\0A skip_space(r)\0A if peek(r) != '\22' {\0A return error(unexpected(r, \22a key in quotes\22))\0A }\0A key := try read_string(r)\0A skip_space(r)\0A if peek(r) != ':' {\0A return error(unexpected(r, \22':'\22))\0A }\0A r.i += 1\0A v := try read_value(r)\0A obj.set(key, v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A return error(unexpected(r, \22',' or '}'\22))\0A }\0A }\0A if c == '[' {\0A list := new_list()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A while true {\0A v := try read_value(r)\0A list.push(v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A return error(unexpected(r, \22',' or ']'\22))\0A }\0A }\0A if c == '\22' {\0A s := try read_string(r)\0A return new_text(s)\0A }\0A if c == 't' {\0A try expect_word(r, \22true\22)\0A return new_bool(true)\0A }\0A if c == 'f' {\0A try expect_word(r, \22false\22)\0A return new_bool(false)\0A }\0A if c == 'n' {\0A try expect_word(r, \22null\22)\0A return new_null()\0A }\0A if c == '-' || (c >= '0' && c <= '9') {\0A return try read_number(r)\0A }\0A return error(unexpected(r, \22a value\22))\0A}\0A\0A// the JSON in `text`; an error with the line and column where it went wrong\0Afn parse(str text) -> Json! {\0A r := Reader(src: text)\0A v := try read_value(addr(r))\0A skip_space(addr(r))\0A if r.i < r.src.len {\0A return error(unexpected(addr(r), \22the end of the text\22))\0A }\0A return v\0A}\0A\00" -@.str.7539 = private unnamed_addr constant [2847 x i8] c"// Paths, as text. Elements are separated by \22/\22.\0A//\0A// import path\0A// path.join(\22a\22, \22b.txt\22) a/b.txt\0A// path.base(\22/tmp/x/a.tar.gz\22) a.tar.gz path.stem(...) a.tar path.ext(...) .gz\0A// path.dir(\22/tmp/x/a.txt\22) /tmp/x\0A// path.clean(\22a//b/../c/./d\22) a/c/d\0A\0A// a and b with one separator between; an absolute b replaces a\0Afn join(str a, str b) -> str {\0A if a.len == 0 {\0A return b\0A }\0A if b.len == 0 {\0A return a\0A }\0A if b[0] == '/' {\0A return b\0A }\0A if a[a.len - 1] == '/' {\0A return a + b\0A }\0A return a + \22/\22 + b\0A}\0A\0Afn is_abs(str p) -> bool {\0A return p.len > 0 && p[0] == '/'\0A}\0A\0A// the last element: \22a/b.txt\22 -> \22b.txt\22, \22a/b/\22 -> \22b\22, \22\22 -> \22.\22, \22/\22 -> \22/\22\0Afn base(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A if end == 1 && p[0] == '/' {\0A return \22/\22\0A }\0A start := end\0A while start > 0 && p[start - 1] != '/' {\0A start -= 1\0A }\0A return p.sub(start, end)\0A}\0A\0A// everything before the last element: \22a/b.txt\22 -> \22a\22, \22b.txt\22 -> \22.\22, \22/b\22 -> \22/\22\0Afn dir(str p) -> str {\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A i := end\0A while i > 0 && p[i - 1] != '/' {\0A i -= 1\0A }\0A if i == 0 {\0A return \22.\22\0A }\0A while i > 1 && p[i - 1] == '/' {\0A i -= 1\0A }\0A return p.sub(0, i)\0A}\0A\0A// the part of the last element from its last dot: \22a.tar.gz\22 -> \22.gz\22; \22\22 when there is none\0Afn ext(str p) -> str {\0A b := base(p)\0A i := b.len\0A while i > 0 && b[i - 1] != '.' {\0A i -= 1\0A }\0A if i <= 1 { // no dot, or a name that only starts with one (.bashrc)\0A return \22\22\0A }\0A return b.sub(i - 1, b.len)\0A}\0A\0A// the last element without its extension\0Afn stem(str p) -> str {\0A b := base(p)\0A e := ext(p)\0A return b.sub(0, b.len - e.len)\0A}\0A\0A// the elements of a path: \22/a/b/c\22 -> [\22a\22, \22b\22, \22c\22]\0Afn parts(str p) -> []str {\0A []str out\0A for piece in p.split(\22/\22) {\0A if piece.len > 0 {\0A out.push(piece)\0A }\0A }\0A return out\0A}\0A\0A// the shortest path with the same meaning: no \22//\22, no \22.\22, and \22..\22 resolved where it can be\0Afn clean(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A abs := is_abs(p)\0A []str out\0A for piece in parts(p) {\0A if piece == \22.\22 {\0A continue\0A }\0A if piece == \22..\22 {\0A if out.len > 0 && out[out.len - 1] != \22..\22 {\0A out.pop()\0A } else if !abs {\0A out.push(\22..\22)\0A }\0A continue\0A }\0A out.push(piece)\0A }\0A joined := out.join(\22/\22)\0A if abs {\0A return \22/\22 + joined\0A }\0A if joined.len == 0 {\0A return \22.\22\0A }\0A return joined\0A}\0A\00" -@.str.7540 = private unnamed_addr constant [1407 x i8] c"// Programs: run a command, read what it printed, look at the environment.\0A//\0A// import proc\0A// code := proc.run(\22make\22) the exit code; what the command prints goes to the screen\0A// text := try proc.output(\22git describe\22) what the command printed; an error if it failed\0A// proc.env(\22HOME\22, \22/\22) an environment variable, or the second value if it is not set\0Aimport \22stdlib.h\22\0Aimport \22unistd.h\22\0Aimport \22time.h\22\0A\0A// run a command; its output goes to the screen. Gives its exit code.\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0A// run a command and give what it printed. Fails, with its output as the message, if it exits with an error.\0Afn output(str command) -> str! {\0A tmp := \22/tmp/finch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(\22(\22 + command + \22) > '\22 + tmp + \22' 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0A// the folder the program is running in\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" -@.str.7541 = private unnamed_addr constant [996 x i8] c"// Programs, for Windows. The same functions as proc.fch (that file is for Linux and macOS).\0Aimport \22stdlib.h\22\0Aimport \22process.h\22\0Aimport \22direct.h\22\0Aimport \22time.h\22\0A\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0Afn output(str command) -> str! {\0A tmp := proc_env(\22TEMP\22, \22.\22) + \22\5C\5Cfinch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(command + \22 > \5C\22\22 + tmp + \22\5C\22 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn proc_env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn env(str name, str fallback) -> str {\0A return proc_env(name, fallback)\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" -@.str.7542 = private unnamed_addr constant [2540 x i8] c"// Time: the clock, sleeping, and dates.\0A//\0A// import time\0A// start := time.millis() milliseconds from a clock that only goes forward (to measure with)\0A// time.sleep(250) wait a quarter of a second\0A// time.now() seconds since 1970-01-01 00:00 UTC\0A// d := time.date(time.now()) the parts: d.year, d.month, d.day, d.hour, d.minute, d.second\0A// time.format(time.now(), \22%Y-%m-%d %H:%M\22) as text, in the computer's time zone\0Aimport \22time.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0A// seconds since 1970-01-01 00:00 UTC\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward: for measuring how long something took\0Afn millis() -> int {\0A timespec ts\0A clock_gettime(CLOCK_MONOTONIC, addr(ts))\0A return int(ts.tv_sec) * 1000 + int(ts.tv_nsec) / 1000000\0A}\0A\0Afn sleep(int ms) {\0A timespec ts\0A ts.tv_sec = ms / 1000\0A ts.tv_nsec = (ms % 1000) * 1000000\0A nanosleep(addr(ts), null)\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0A// the date and time of a moment, in UTC\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A gmtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// the date and time of a moment, in the computer's time zone\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// a moment as text, in the computer's time zone: %Y year, %m month, %d day, %H hour, %M minute, %S second\0A// (the rest of C's strftime works too: %A weekday name, %B month name, ...)\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0A// the number of days in a month (month is 1 to 12)\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" -@.str.7543 = private unnamed_addr constant [1793 x i8] c"// Time, for Windows. The same functions as time.fch (that file is for Linux and macOS).\0Aimport \22time.h\22\0Aimport \22finch_win.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward (the performance counter: GetTickCount64 ticks every 15 ms)\0Afn millis() -> int {\0A i64 count = 0\0A i64 freq = 1\0A QueryPerformanceFrequency(addr(freq))\0A QueryPerformanceCounter(addr(count))\0A return int(count / freq) * 1000 + int(count % freq) * 1000 / int(freq)\0A}\0A\0Afn sleep(int ms) {\0A Sleep(u32(ms))\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _gmtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" -@.str.7544 = private unnamed_addr constant [366 x i8] c"/* The Windows functions std/time_windows.fch needs. Declared here, not by including :\0A libclang can't parse that header with MinGW's intrinsics. Both are in kernel32. */\0Aunsigned long long GetTickCount64(void);\0Avoid Sleep(unsigned long milliseconds);\0Aint QueryPerformanceCounter(long long *count);\0Aint QueryPerformanceFrequency(long long *frequency);\0A\00" +@.str.7521 = private unnamed_addr constant [16 x i8] c"a key in quotes\00" +@.str.7522 = private unnamed_addr constant [4 x i8] c"':'\00" +@.str.7523 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7524 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7525 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7526 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7527 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7528 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7529 = private unnamed_addr constant [11 x i8] c"',' or '}'\00" +@.str.7530 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7531 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7532 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7533 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7534 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7535 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7536 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7537 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7538 = private unnamed_addr constant [11 x i8] c"',' or ']'\00" +@.str.7539 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.7540 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7541 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7542 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7543 = private unnamed_addr constant [20 x i8] c"the end of the text\00" +@.str.7544 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.7545 = private unnamed_addr constant [13 x i8] c"std/json.fch\00" +@.str.7546 = private unnamed_addr constant [13 x i8] c"std/path.fch\00" +@.str.7547 = private unnamed_addr constant [13 x i8] c"std/proc.fch\00" +@.str.7548 = private unnamed_addr constant [21 x i8] c"std/proc_windows.fch\00" +@.str.7549 = private unnamed_addr constant [13 x i8] c"std/time.fch\00" +@.str.7550 = private unnamed_addr constant [21 x i8] c"std/time_windows.fch\00" +@.str.7551 = private unnamed_addr constant [16 x i8] c"std/finch_win.h\00" +@.str.7552 = private unnamed_addr constant [24982 x i8] c"// The Finch runtime: string and array helpers, input, files and runtime errors.\0A// It is embedded in the compiler, compiled once into a cache folder, and linked\0A// statically into every Finch program. Everything here is plain C with no state.\0A//\0A// Layout shared with the compiler (src/codegen.cpp):\0A// str = { char *ptr; int64 len; int64 cap } ptr is always NUL-terminated\0A// cap > 0 : heap memory owned by the value (cap bytes allocated)\0A// cap == 0 : a string literal, valid forever, never written to\0A// cap == -1: borrowed from C, must be copied before it is kept\0A// []T = { T *ptr; int64 len; int64 cap } owns ptr when cap > 0\0A// map[K]V: see \22maps\22 below\0A\0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#ifndef _WIN32\0A#include \0A#endif\0A\0Atypedef struct {\0A char *ptr;\0A int64_t len;\0A int64_t cap;\0A} FStr;\0A\0Atypedef struct {\0A void *ptr;\0A int64_t len;\0A int64_t cap;\0A} FArr;\0A\0Astatic char empty[1] = \22\22;\0A\0A// ---------- runtime errors ----------\0A\0A// A program that loads Finch libraries (finch build --shared) can take runtime errors over\0A// instead of the process exiting: finch_module_on_fatal(handler) in each library. The handler\0A// gets the message and must not return (longjmp out, or exit itself).\0Astatic void (*fatal_hook)(const char *msg);\0Avoid finch_on_fatal(void (*hook)(const char *msg)) { fatal_hook = hook; }\0A\0Astatic __attribute__((noreturn)) void fatal(const char *msg) {\0A if (fatal_hook) fatal_hook(msg);\0A fflush(stdout);\0A fprintf(stderr, \22%s\5Cn\22, msg);\0A exit(1);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic(const char *file, int64_t line, const char *msg) {\0A char full[1024];\0A snprintf(full, sizeof full, \22%s:%lld: runtime error: %s\22, file, (long long)line, msg);\0A fflush(stdout);\0A fatal(full);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic_index(const char *file, int64_t line, int64_t i, int64_t len) {\0A char msg[128];\0A snprintf(msg, sizeof msg, \22index %lld is out of range (the length is %lld)\22, (long long)i, (long long)len);\0A finch_panic(file, line, msg);\0A}\0A\0Astatic void *must(void *p) {\0A if (!p) {\0A fflush(stdout);\0A fatal(\22runtime error: out of memory\22);\0A }\0A return p;\0A}\0A\0Avoid *finch_alloc(int64_t n) { return must(malloc(n ? (size_t)n : 1)); }\0Avoid *finch_zalloc(int64_t n) { return must(calloc(1, n ? (size_t)n : 1)); }\0A\0A// ---------- strings ----------\0A\0Astatic void str_heap(FStr *out, const char *p, int64_t len) {\0A char *m = finch_alloc(len + 1);\0A if (len) memcpy(m, p, (size_t)len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void str_static(FStr *out, const char *lit) {\0A out->ptr = (char *)lit;\0A out->len = (int64_t)strlen(lit);\0A out->cap = 0;\0A}\0A\0A// A copy that can be kept: literals are shared, everything else is duplicated.\0Avoid finch_str_copy(FStr *out, const FStr *s) {\0A if (s->cap == 0) *out = *s;\0A else str_heap(out, s->ptr, s->len);\0A}\0A\0A// Make `s` writable (before s[i] = c).\0Avoid finch_str_own(FStr *s) {\0A if (s->cap > 0) return;\0A FStr t;\0A str_heap(&t, s->ptr, s->len);\0A *s = t;\0A}\0A\0Avoid finch_str_drop(FStr *s) {\0A if (s->cap > 0) free(s->ptr);\0A}\0A\0Avoid finch_str_from_c(FStr *out, const char *p) {\0A if (!p) {\0A str_static(out, empty);\0A return;\0A }\0A out->ptr = (char *)p;\0A out->len = (int64_t)strlen(p);\0A out->cap = -1;\0A}\0A\0Avoid finch_str_concat(FStr *out, const FStr *a, const FStr *b) {\0A int64_t len = a->len + b->len;\0A char *m = finch_alloc(len + 1);\0A memcpy(m, a->ptr, (size_t)a->len);\0A memcpy(m + a->len, b->ptr, (size_t)b->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Aint finch_str_eq(const FStr *a, const FStr *b) {\0A return a->len == b->len && memcmp(a->ptr, b->ptr, (size_t)a->len) == 0;\0A}\0A\0Aint64_t finch_str_cmp(const FStr *a, const FStr *b) {\0A int64_t n = a->len < b->len ? a->len : b->len;\0A int c = memcmp(a->ptr, b->ptr, (size_t)n);\0A if (c) return c < 0 ? -1 : 1;\0A return a->len < b->len ? -1 : a->len > b->len;\0A}\0A\0Avoid finch_str_from_int(FStr *out, int64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%lld\22, (long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_uint(FStr *out, uint64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%llu\22, (unsigned long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_float(FStr *out, double v) {\0A char buf[64];\0A int n = snprintf(buf, sizeof buf, \22%g\22, v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_char(FStr *out, char c) { str_heap(out, &c, 1); }\0A\0Avoid finch_str_from_bool(FStr *out, int b) { str_static(out, b ? \22true\22 : \22false\22); }\0A\0Astatic void number_error(char *msg, size_t size, const FStr *s, const char *kind) {\0A snprintf(msg, size, \22can't turn \5C\22%.*s\5C\22 into %s\22, (int)(s->len > 100 ? 100 : s->len), s->ptr ? s->ptr : \22\22, kind);\0A}\0A\0Astatic int parse_int(const FStr *s, int64_t *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A errno = 0;\0A long long v = strtoll(p, &end, 10);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end || errno == ERANGE);\0A}\0A\0Astatic int parse_float(const FStr *s, double *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A double v = strtod(p, &end);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end);\0A}\0A\0Aint64_t finch_str_to_int(const FStr *s, const char *file, int64_t line) {\0A int64_t v;\0A if (!parse_int(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0Adouble finch_str_to_float(const FStr *s, const char *file, int64_t line) {\0A double v;\0A if (!parse_float(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0A// ---------- errors as values: int(s) or 0, try read_file(p) ... ----------\0A// Each gives back 1 on success; on failure 0, with the message in *err.\0A\0Astatic void set_error(FStr *err, const char *msg) { str_heap(err, msg, (int64_t)strlen(msg)); }\0A\0Aint finch_str_try_int(const FStr *s, int64_t *out, FStr *err) {\0A if (parse_int(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Aint finch_str_try_float(const FStr *s, double *out, FStr *err) {\0A if (parse_float(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Astatic void file_error(FStr *err, const char *what, const FStr *path) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't %s the file \5C\22%.*s\5C\22: %s\22, what, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr ? path->ptr : \22\22, strerror(errno));\0A set_error(err, msg);\0A}\0A\0A// when `fn main() -> !` fails\0Avoid finch_report_error(const FStr *msg) {\0A fflush(stdout);\0A fprintf(stderr, \22error: %.*s\5Cn\22, (int)msg->len, msg->ptr ? msg->ptr : \22\22);\0A}\0A\0Avoid finch_str_sub(FStr *out, const FStr *s, int64_t start, int64_t end, const char *file, int64_t line) {\0A if (start < 0 || end > s->len || start > end) {\0A char msg[160];\0A snprintf(msg, sizeof msg, \22sub(%lld, %lld) is out of range (the length is %lld)\22, (long long)start,\0A (long long)end, (long long)s->len);\0A finch_panic(file, line, msg);\0A }\0A str_heap(out, s->ptr + start, end - start);\0A}\0A\0Aint64_t finch_str_find(const FStr *s, const FStr *t) {\0A if (t->len == 0) return 0;\0A for (int64_t i = 0; i + t->len <= s->len; i++)\0A if (s->ptr[i] == t->ptr[0] && memcmp(s->ptr + i, t->ptr, (size_t)t->len) == 0) return i;\0A return -1;\0A}\0A\0Aint finch_str_starts(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Aint finch_str_ends(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr + s->len - t->len, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Avoid finch_str_trim(FStr *out, const FStr *s) {\0A int64_t a = 0, b = s->len;\0A while (a < b && isspace((unsigned char)s->ptr[a])) a++;\0A while (b > a && isspace((unsigned char)s->ptr[b - 1])) b--;\0A str_heap(out, s->ptr + a, b - a);\0A}\0A\0Avoid finch_str_upper(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)toupper((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_lower(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)tolower((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_replace(FStr *out, const FStr *s, const FStr *from, const FStr *to) {\0A if (from->len == 0) {\0A str_heap(out, s->ptr, s->len);\0A return;\0A }\0A int64_t count = 0;\0A for (int64_t i = 0; i + from->len <= s->len;) {\0A if (memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A count++;\0A i += from->len;\0A } else {\0A i++;\0A }\0A }\0A int64_t len = s->len + count * (to->len - from->len);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < s->len;) {\0A if (i + from->len <= s->len && memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A memcpy(w, to->ptr, (size_t)to->len);\0A w += to->len;\0A i += from->len;\0A } else {\0A *w++ = s->ptr[i++];\0A }\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len);\0A\0A// \22a,b,,c\22.split(\22,\22) -> [\22a\22, \22b\22, \22\22, \22c\22]; split(\22\22) gives single characters.\0Avoid finch_str_split(FArr *out, const FStr *s, const FStr *sep) {\0A out->ptr = NULL;\0A out->len = out->cap = 0;\0A if (sep->len == 0) {\0A for (int64_t i = 0; i < s->len; i++) arr_push_str(out, s->ptr + i, 1);\0A return;\0A }\0A int64_t start = 0;\0A for (int64_t i = 0; i + sep->len <= s->len;) {\0A if (memcmp(s->ptr + i, sep->ptr, (size_t)sep->len) == 0) {\0A arr_push_str(out, s->ptr + start, i - start);\0A i += sep->len;\0A start = i;\0A } else {\0A i++;\0A }\0A }\0A arr_push_str(out, s->ptr + start, s->len - start);\0A}\0A\0Avoid finch_str_join(FStr *out, const FArr *parts, const FStr *sep) {\0A const FStr *p = parts->ptr;\0A int64_t len = 0;\0A for (int64_t i = 0; i < parts->len; i++) len += p[i].len + (i ? sep->len : 0);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < parts->len; i++) {\0A if (i) {\0A memcpy(w, sep->ptr, (size_t)sep->len);\0A w += sep->len;\0A }\0A memcpy(w, p[i].ptr, (size_t)p[i].len);\0A w += p[i].len;\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_repeat(FStr *out, const FStr *s, int64_t n) {\0A if (n < 0) n = 0;\0A int64_t len = s->len * n;\0A char *m = finch_alloc(len + 1);\0A for (int64_t i = 0; i < n; i++) memcpy(m + i * s->len, s->ptr, (size_t)s->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_from_bytes(FStr *out, const FArr *bytes) { str_heap(out, bytes->ptr, bytes->len); }\0A\0A// ---------- building text: print(x) and str(x) of arrays, maps and structs ----------\0A// A buffer starts as an empty str and grows on the heap.\0A\0Avoid finch_buf_add(FStr *b, const char *p, int64_t n) {\0A if (b->len + n + 1 > b->cap) {\0A int64_t cap = b->cap > 0 ? b->cap * 2 : 32;\0A while (cap < b->len + n + 1) cap *= 2;\0A b->ptr = must(realloc(b->cap > 0 ? b->ptr : NULL, (size_t)cap));\0A b->cap = cap;\0A }\0A if (n) memcpy(b->ptr + b->len, p, (size_t)n);\0A b->len += n;\0A b->ptr[b->len] = 0;\0A}\0A\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) __attribute__((format(printf, 2, 3)));\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) {\0A char t[64];\0A va_list ap;\0A va_start(ap, fmt);\0A int n = vsnprintf(t, sizeof t, fmt, ap);\0A va_end(ap);\0A finch_buf_add(b, t, n);\0A}\0A\0Avoid finch_buf_int(FStr *b, int64_t v) { buf_fmt(b, \22%lld\22, (long long)v); }\0Avoid finch_buf_uint(FStr *b, uint64_t v) { buf_fmt(b, \22%llu\22, (unsigned long long)v); }\0Avoid finch_buf_float(FStr *b, double v) { buf_fmt(b, \22%g\22, v); }\0Avoid finch_buf_bool(FStr *b, int v) { finch_buf_add(b, v ? \22true\22 : \22false\22, v ? 4 : 5); }\0Avoid finch_buf_ptr(FStr *b, const void *p) {\0A if (p) buf_fmt(b, \220x%llx\22, (unsigned long long)(uintptr_t)p);\0A else finch_buf_add(b, \22null\22, 4);\0A}\0A\0Avoid finch_buf_char(FStr *b, char c, int quoted) {\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A finch_buf_add(b, &c, 1);\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A}\0A\0Avoid finch_buf_str(FStr *b, const FStr *s, int quoted) {\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A finch_buf_add(b, s->ptr, s->len);\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A}\0A\0A// print the buffer and free it\0Avoid finch_buf_print(FStr *b) {\0A if (b->len) fwrite(b->ptr, 1, (size_t)b->len, stdout);\0A if (b->cap > 0) free(b->ptr);\0A}\0A\0A// ---------- arrays ----------\0A\0Avoid finch_arr_reserve(FArr *a, int64_t need, int64_t es) {\0A if (need <= a->cap) return;\0A int64_t cap = a->cap * 2;\0A if (cap < 4) cap = 4;\0A if (cap < need) cap = need;\0A a->ptr = must(realloc(a->cap > 0 ? a->ptr : NULL, (size_t)(cap * es)));\0A a->cap = cap;\0A}\0A\0Avoid finch_arr_make(FArr *out, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A out->ptr = len ? finch_zalloc(len * es) : NULL;\0A out->len = len;\0A out->cap = len;\0A}\0A\0A// grow or shrink to `len`; new elements are zero\0Avoid finch_arr_resize(FArr *a, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A finch_arr_reserve(a, len, es);\0A if (len > a->len) memset((char *)a->ptr + a->len * es, 0, (size_t)((len - a->len) * es));\0A a->len = len;\0A}\0A\0A// a byte-for-byte copy of the elements (the compiler deep-copies owning elements afterwards)\0Avoid finch_arr_clone_raw(FArr *out, const FArr *a, int64_t es) {\0A out->len = a->len;\0A out->cap = a->len;\0A out->ptr = a->len ? finch_alloc(a->len * es) : NULL;\0A if (a->len) memcpy(out->ptr, a->ptr, (size_t)(a->len * es));\0A}\0A\0Avoid finch_arr_free(FArr *a) {\0A if (a->cap > 0) free(a->ptr);\0A}\0A\0A// open a hole at i (0 <= i <= len), len grows by one\0Avoid finch_arr_insert_gap(FArr *a, int64_t i, int64_t es, const char *file, int64_t line) {\0A if (i < 0 || i > a->len) finch_panic_index(file, line, i, a->len);\0A finch_arr_reserve(a, a->len + 1, es);\0A char *p = a->ptr;\0A memmove(p + (i + 1) * es, p + i * es, (size_t)((a->len - i) * es));\0A a->len++;\0A}\0A\0A// close the hole at i (the element was already moved out), len shrinks by one\0Avoid finch_arr_remove_gap(FArr *a, int64_t i, int64_t es) {\0A char *p = a->ptr;\0A memmove(p + i * es, p + (i + 1) * es, (size_t)((a->len - i - 1) * es));\0A a->len--;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len) {\0A finch_arr_reserve(a, a->len + 1, (int64_t)sizeof(FStr));\0A str_heap((FStr *)a->ptr + a->len, p, len);\0A a->len++;\0A}\0A\0Avoid finch_bytes_from_str(FArr *out, const FStr *s) {\0A out->len = out->cap = s->len;\0A out->ptr = s->len ? finch_alloc(s->len) : NULL;\0A if (s->len) memcpy(out->ptr, s->ptr, (size_t)s->len);\0A}\0A\0A// ---------- program arguments, input and files ----------\0A\0Avoid finch_args(FArr *out, int argc, char **argv) {\0A out->len = out->cap = argc;\0A out->ptr = finch_alloc((int64_t)sizeof(FStr) * (argc ? argc : 1));\0A for (int i = 0; i < argc; i++) str_heap((FStr *)out->ptr + i, argv[i], (int64_t)strlen(argv[i]));\0A}\0A\0A// input(\22Name? \22) prints the prompt and reads one line, without the newline.\0Avoid finch_input(FStr *out, const FStr *prompt) {\0A if (prompt->len) fwrite(prompt->ptr, 1, (size_t)prompt->len, stdout);\0A fflush(stdout);\0A // read one line of any length (getline isn't available everywhere)\0A size_t size = 128, n = 0;\0A char *line = finch_alloc((int64_t)size);\0A int c, got = 0;\0A while ((c = fgetc(stdin)) != EOF) {\0A got = 1;\0A if (c == '\5Cn') break;\0A if (n + 1 >= size) line = must(realloc(line, size *= 2));\0A line[n++] = (char)c;\0A }\0A if (!got) {\0A free(line);\0A str_static(out, empty);\0A return;\0A }\0A while (n > 0 && line[n - 1] == '\5Cr') n--;\0A line[n] = 0;\0A out->ptr = line;\0A out->len = (int64_t)n;\0A out->cap = (int64_t)size;\0A}\0A\0Aint finch_file_exists(const FStr *path) {\0A FILE *f = fopen(path->ptr, \22rb\22);\0A if (f) fclose(f);\0A return f != NULL;\0A}\0A\0Aint finch_try_read_file(FStr *out, const FStr *path, FStr *err) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A file_error(err, \22read\22, path);\0A return 0;\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A return 1;\0A}\0A\0Avoid finch_read_file(FStr *out, const FStr *path, const char *file, int64_t line) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't read the file \5C\22%.*s\5C\22: %s\22, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr, strerror(errno));\0A finch_panic(file, line, msg);\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A}\0A\0A// shell(\22ls -l\22): run a command, give back its exit code\0Aint64_t finch_shell(const FStr *cmd) {\0A fflush(stdout);\0A int status = system(cmd->ptr ? cmd->ptr : \22\22);\0A#ifdef _WIN32\0A return status; // Windows gives the exit code directly\0A#else\0A if (status == -1) return -1;\0A if (WIFEXITED(status)) return WEXITSTATUS(status);\0A return 128 + (WIFSIGNALED(status) ? WTERMSIG(status) : 0);\0A#endif\0A}\0A\0Aint finch_delete_file(const FStr *path) { return remove(path->ptr ? path->ptr : \22\22) == 0; }\0A\0Aint finch_try_delete_file(const FStr *path, FStr *err) {\0A if (remove(path->ptr ? path->ptr : \22\22) == 0) return 1;\0A file_error(err, \22delete\22, path);\0A return 0;\0A}\0A\0A// stdin/stdout/stderr are macros on some systems (Windows), so Finch asks for them here\0Avoid *finch_std_stream(int i) { return i == 0 ? (void *)stdin : i == 1 ? (void *)stdout : (void *)stderr; }\0A\0Aint finch_write_file(const FStr *path, const FStr *text) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22wb\22);\0A if (!f) return 0;\0A size_t put = text->len ? fwrite(text->ptr, 1, (size_t)text->len, f) : 0;\0A return fclose(f) == 0 && put == (size_t)text->len;\0A}\0A\0Aint finch_try_write_file(const FStr *path, const FStr *text, FStr *err) {\0A errno = 0;\0A if (finch_write_file(path, text)) return 1;\0A if (!errno) errno = EIO;\0A file_error(err, \22write\22, path);\0A return 0;\0A}\0A\0A// ---------- maps ----------\0A// map[K]V = { entries; len; used; cap; index; icap; adds }\0A// entries: `used` slots of es bytes, each { uint64 hash; K key; V value }, in insertion order.\0A// A removed entry keeps its slot (hash 0) until the next resize packs the slots.\0A// index: icap slots (a power of two, at least 2 * cap): -1 empty, -2 removed, else an entry number.\0A// adds: how many keys were ever added; a `for` over the map stops with an error if it changes.\0A// The compiler stores, copies and drops keys and values; the runtime only finds and places entries.\0A// Keys are compared byte for byte (numbers, chars, bools) or as text (kstr).\0A\0Atypedef struct {\0A char *entries;\0A int64_t len, used, cap;\0A int64_t *index;\0A int64_t icap;\0A int64_t adds;\0A} FMap;\0A\0Astatic uint64_t map_hash(const void *key, int64_t ks, int kstr) {\0A const unsigned char *p;\0A size_t n;\0A if (kstr) {\0A const FStr *s = key;\0A p = (const unsigned char *)s->ptr;\0A n = (size_t)s->len;\0A } else {\0A p = key;\0A n = (size_t)ks;\0A }\0A uint64_t h = 1469598103934665603ULL; // FNV-1a, then mixed so the low bits spread well\0A for (size_t i = 0; i < n; i++) {\0A h ^= p[i];\0A h *= 1099511628211ULL;\0A }\0A h ^= h >> 31;\0A h *= 0xbf58476d1ce4e5b9ULL;\0A h ^= h >> 29;\0A return h | 1; // 0 marks a removed entry\0A}\0A\0Astatic int map_key_eq(const char *a, const void *b, int64_t ks, int kstr) {\0A if (!kstr) return memcmp(a, b, (size_t)ks) == 0;\0A const FStr *x = (const FStr *)a, *y = b;\0A return x->len == y->len && (x->len == 0 || memcmp(x->ptr, y->ptr, (size_t)x->len) == 0);\0A}\0A\0Astatic void map_reindex(FMap *m, int64_t es) {\0A if (m->len != m->used) { // pack the slots of removed entries away\0A int64_t j = 0;\0A for (int64_t i = 0; i < m->used; i++) {\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == 0) continue;\0A if (i != j) memmove(m->entries + j * es, e, (size_t)es);\0A j++;\0A }\0A m->used = j;\0A }\0A int64_t icap = 16;\0A while (icap < m->cap * 2) icap *= 2;\0A free(m->index);\0A m->index = finch_alloc(icap * (int64_t)sizeof(int64_t));\0A memset(m->index, 0xff, (size_t)icap * sizeof(int64_t));\0A m->icap = icap;\0A for (int64_t i = 0; i < m->used; i++) {\0A uint64_t h = *(uint64_t *)(m->entries + i * es);\0A int64_t s = (int64_t)(h & (uint64_t)(icap - 1));\0A while (m->index[s] != -1) s = (s + 1) & (icap - 1);\0A m->index[s] = i;\0A }\0A}\0A\0A// the entry number of `key`, or -1\0Aint64_t finch_map_find(const FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr) {\0A if (m->len == 0) return -1;\0A uint64_t h = map_hash(key, ks, kstr);\0A for (int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));; s = (s + 1) & (m->icap - 1)) {\0A int64_t i = m->index[s];\0A if (i == -1) return -1;\0A if (i < 0) continue;\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == h && map_key_eq(e + 8, key, ks, kstr)) return i;\0A }\0A}\0A\0A// The entry for `key`. A new one is zeroed except its hash (*added = 1); the compiler then stores the key.\0Aint64_t finch_map_slot(FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr, int32_t *added) {\0A int64_t i = finch_map_find(m, key, es, ks, kstr);\0A *added = i < 0;\0A if (i >= 0) return i;\0A if (m->used == m->cap) {\0A if (m->len * 4 < m->cap * 3) { // many removed slots: pack them instead of growing\0A map_reindex(m, es);\0A } else {\0A m->cap = m->cap ? m->cap * 2 : 8;\0A m->entries = must(realloc(m->entries, (size_t)(m->cap * es)));\0A map_reindex(m, es);\0A }\0A }\0A uint64_t h = map_hash(key, ks, kstr);\0A i = m->used++;\0A char *e = m->entries + i * es;\0A memset(e, 0, (size_t)es);\0A *(uint64_t *)e = h;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] >= 0) s = (s + 1) & (m->icap - 1);\0A m->index[s] = i;\0A m->len++;\0A m->adds++;\0A return i;\0A}\0A\0A// Forget entry i (its key and value were already dropped by the compiler).\0Avoid finch_map_remove_at(FMap *m, int64_t i, int64_t es) {\0A char *e = m->entries + i * es;\0A uint64_t h = *(uint64_t *)e;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] != i) s = (s + 1) & (m->icap - 1);\0A m->index[s] = -2;\0A *(uint64_t *)e = 0;\0A if (--m->len == 0) {\0A m->used = 0;\0A memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A }\0A}\0A\0Avoid finch_map_clear(FMap *m) {\0A m->len = m->used = 0;\0A if (m->index) memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0Avoid finch_map_free(FMap *m) {\0A free(m->entries);\0A free(m->index);\0A}\0A\0A// A copy of the slots and the index; the compiler then copies the keys and values that own memory.\0Avoid finch_map_clone_raw(FMap *out, const FMap *m, int64_t es) {\0A *out = *m;\0A if (!m->cap) return;\0A out->entries = finch_alloc(m->cap * es);\0A memcpy(out->entries, m->entries, (size_t)(m->used * es));\0A out->index = finch_alloc(m->icap * (int64_t)sizeof(int64_t));\0A memcpy(out->index, m->index, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_changed(const char *file, int64_t line) {\0A finch_panic(file, line, \22a key was added to the map while looping over it (collect the new keys, and add them after the loop)\22);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_missing(const char *file, int64_t line, const FStr *key) {\0A char msg[200];\0A snprintf(msg, sizeof msg, \22the key %.*s is not in the map (check with .has(key), or use .get(key, default))\22,\0A (int)(key->len > 100 ? 100 : key->len), key->ptr ? key->ptr : \22\22);\0A finch_panic(file, line, msg);\0A}\0A\00" +@.str.7553 = private unnamed_addr constant [12885 x i8] c"// JSON: read it, build it, write it.\0A//\0A// import json\0A//\0A// doc := try json.parse(\22{\5C\22name\5C\22: \5C\22Finch\5C\22, \5C\22tags\5C\22: [\5C\22fast\5C\22, \5C\22small\5C\22], \5C\22stars\5C\22: 5}\22)\0A// print(doc.get(\22name\22).str_or(\22\22)) Finch\0A// print(doc.get(\22tags\22).at(1).str_or(\22\22)) small\0A// print(doc.get(\22stars\22).int_or(0)) 5\0A// print(doc.get(\22missing\22).is_null()) true (a missing key is null, so chains never fail)\0A//\0A// out := json.new_object()\0A// out.set(\22ok\22, json.new_bool(true))\0A// list := json.new_list()\0A// list.push(json.new_number(1.5))\0A// out.set(\22values\22, list)\0A// print(json.stringify(out)) {\22ok\22:true,\22values\22:[1.5]}\0A// print(json.pretty(out)) the same, over several lines\0A\0Aenum Kind { Null, Bool, Number, Text, List, Object }\0A\0A// One JSON value. `kind` says which of the other fields it uses: flag for Bool, num for Number,\0A// text for Text, items for List, and items with keys (the same length, in the same order) for Object.\0Astruct Json {\0A Kind kind\0A bool flag\0A float num\0A str text\0A []Json items\0A []str keys\0A}\0A\0Afn new_null() -> Json {\0A return Json(kind: Kind.Null)\0A}\0A\0Afn new_bool(bool b) -> Json {\0A return Json(kind: Kind.Bool, flag: b)\0A}\0A\0Afn new_number(float n) -> Json {\0A return Json(kind: Kind.Number, num: n)\0A}\0A\0Afn new_text(str s) -> Json {\0A return Json(kind: Kind.Text, text: s)\0A}\0A\0Afn new_list() -> Json {\0A return Json(kind: Kind.List)\0A}\0A\0Afn new_object() -> Json {\0A return Json(kind: Kind.Object)\0A}\0A\0A// ---------- looking inside ----------\0A\0Afn Json.is_null() -> bool {\0A return self.kind == Kind.Null\0A}\0A\0A// the number of elements of a list, of keys of an object, of bytes of a text; 0 for the rest\0Afn Json.len() -> int {\0A return match self.kind {\0A List, Object -> self.items.len\0A Text -> self.text.len\0A else -> 0\0A }\0A}\0A\0Afn Json.has(str key) -> bool {\0A return self.kind == Kind.Object && self.keys.contains(key)\0A}\0A\0A// the value of a key of an object; null if there is none (or this is not an object)\0Afn Json.get(str key) -> Json {\0A if self.kind != Kind.Object {\0A return new_null()\0A }\0A i := self.keys.find(key)\0A if i < 0 {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the element of a list; null if there is none\0Afn Json.at(int i) -> Json {\0A if self.kind != Kind.List || i < 0 || i >= self.items.len {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the value if it is of that kind, else what was given\0Afn Json.str_or(str fallback) -> str {\0A if self.kind == Kind.Text {\0A return self.text\0A }\0A return fallback\0A}\0A\0Afn Json.float_or(float fallback) -> float {\0A if self.kind == Kind.Number {\0A return self.num\0A }\0A return fallback\0A}\0A\0Afn Json.int_or(int fallback) -> int {\0A if self.kind == Kind.Number {\0A return int(self.num)\0A }\0A return fallback\0A}\0A\0Afn Json.bool_or(bool fallback) -> bool {\0A if self.kind == Kind.Bool {\0A return self.flag\0A }\0A return fallback\0A}\0A\0A// the keys of an object, in the order they were written\0Afn Json.names() -> []str {\0A return self.keys\0A}\0A\0A// ---------- building ----------\0A\0A// add to the end of a list\0Afn Json.push(Json v) {\0A self.items.push(v)\0A}\0A\0A// give a key a value in an object; a key that is already there is replaced\0Afn Json.set(str key, Json v) {\0A i := self.keys.find(key)\0A if i >= 0 {\0A self.items[i] = v\0A return\0A }\0A self.keys.push(key)\0A self.items.push(v)\0A}\0A\0A// ---------- writing ----------\0A\0Afn quote(str s) -> str {\0A []str parts = [\22\5C\22\22]\0A for c in s {\0A n := int(c)\0A if c == '\22' {\0A parts.push(\22\5C\5C\5C\22\22)\0A } else if c == '\5C\5C' {\0A parts.push(\22\5C\5C\5C\5C\22)\0A } else if c == '\5Cn' {\0A parts.push(\22\5C\5Cn\22)\0A } else if c == '\5Cr' {\0A parts.push(\22\5C\5Cr\22)\0A } else if c == '\5Ct' {\0A parts.push(\22\5C\5Ct\22)\0A } else if n < 32 {\0A parts.push(\22\5C\5Cu00\22 + hexdigit(n / 16) + hexdigit(n % 16))\0A } else {\0A parts.push(str(c))\0A }\0A }\0A parts.push(\22\5C\22\22)\0A return parts.join(\22\22)\0A}\0A\0Afn hexdigit(int n) -> str {\0A digits := \220123456789abcdef\22\0A return str(digits[n])\0A}\0A\0Afn number_text(float n) -> str {\0A if n == float(int(n)) && n > -1000000000000000.0 && n < 1000000000000000.0 {\0A return str(int(n))\0A }\0A return str(n)\0A}\0A\0Astruct Writer {\0A []str out\0A}\0A\0Afn write(Json j, str indent, str pad, ptr[Writer] w) {\0A nl := \22\22\0A inner := \22\22\0A sep := \22,\22\0A colon := \22:\22\0A if indent.len > 0 {\0A nl = \22\5Cn\22\0A inner = pad + indent\0A colon = \22: \22\0A }\0A match j.kind {\0A Null -> w.out.push(\22null\22)\0A Bool -> {\0A if j.flag {\0A w.out.push(\22true\22)\0A } else {\0A w.out.push(\22false\22)\0A }\0A }\0A Number -> w.out.push(number_text(j.num))\0A Text -> w.out.push(quote(j.text))\0A List -> {\0A if j.items.len == 0 {\0A w.out.push(\22[]\22)\0A return\0A }\0A w.out.push(\22[\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22]\22)\0A }\0A Object -> {\0A if j.items.len == 0 {\0A w.out.push(\22{}\22)\0A return\0A }\0A w.out.push(\22{\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner + quote(j.keys[i]) + colon)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22}\22)\0A }\0A }\0A}\0A\0A// the value as text on one line\0Afn stringify(Json j) -> str {\0A w := Writer()\0A write(j, \22\22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// the value as text over several lines, indented by two spaces\0Afn pretty(Json j) -> str {\0A w := Writer()\0A write(j, \22 \22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// ---------- reading ----------\0A\0Astruct Reader {\0A str src\0A int i\0A}\0A\0A// the line and column of a position, for a message\0Afn where(ptr[Reader] r) -> str {\0A line := 1\0A col := 1\0A for k in 0..r.i {\0A if k < r.src.len && r.src[k] == '\5Cn' {\0A line += 1\0A col = 1\0A } else {\0A col += 1\0A }\0A }\0A return \22line \22 + str(line) + \22, column \22 + str(col)\0A}\0A\0Afn peek(ptr[Reader] r) -> char {\0A if r.i < r.src.len {\0A return r.src[r.i]\0A }\0A return char(0)\0A}\0A\0Afn skip_space(ptr[Reader] r) {\0A while r.i < r.src.len && (r.src[r.i] == ' ' || r.src[r.i] == '\5Cn' || r.src[r.i] == '\5Ct' || r.src[r.i] == '\5Cr') {\0A r.i += 1\0A }\0A}\0A\0Afn unexpected(ptr[Reader] r, str wanted) -> str {\0A if r.i >= r.src.len {\0A return \22json: the text ends where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A }\0A return \22json: found '\22 + str(r.src[r.i]) + \22' where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A}\0A\0A// does `word` come next?\0Afn comes(ptr[Reader] r, str word) -> bool {\0A return r.src.len - r.i >= word.len && r.src.sub(r.i, r.i + word.len) == word\0A}\0A\0Afn expect_word(ptr[Reader] r, str word) -> ! {\0A if !comes(r, word) {\0A return error(unexpected(r, \22'\22 + word + \22'\22))\0A }\0A r.i += word.len\0A}\0A\0Afn hex_value(char c) -> int {\0A if c >= '0' && c <= '9' {\0A return int(c) - int('0')\0A }\0A if c >= 'a' && c <= 'f' {\0A return int(c) - int('a') + 10\0A }\0A if c >= 'A' && c <= 'F' {\0A return int(c) - int('A') + 10\0A }\0A return -1\0A}\0A\0A// a code point as UTF-8\0Afn utf8(int cp) -> str {\0A []u8 b\0A if cp < 128 {\0A b.push(u8(cp))\0A } else if cp < 2048 {\0A b.push(u8(192 + cp / 64))\0A b.push(u8(128 + cp % 64))\0A } else if cp < 65536 {\0A b.push(u8(224 + cp / 4096))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A } else {\0A b.push(u8(240 + cp / 262144))\0A b.push(u8(128 + (cp / 4096) % 64))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A }\0A return str(b)\0A}\0A\0Afn read_hex4(ptr[Reader] r) -> int! {\0A n := 0\0A for k in 0..4 {\0A if r.i >= r.src.len || hex_value(r.src[r.i]) < 0 {\0A return error(unexpected(r, \22a hexadecimal digit\22))\0A }\0A n = n * 16 + hex_value(r.src[r.i])\0A r.i += 1\0A }\0A return n\0A}\0A\0Afn read_string(ptr[Reader] r) -> str! {\0A r.i += 1 // the opening quote\0A []str parts\0A start := r.i\0A while true {\0A if r.i >= r.src.len {\0A return error(\22json: a text is never closed (\22 + where(r) + \22)\22)\0A }\0A c := r.src[r.i]\0A if c == '\22' {\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A return parts.join(\22\22)\0A }\0A if int(c) < 32 {\0A return error(\22json: a line break or control character inside a text (\22 + where(r) + \22)\22)\0A }\0A if c != '\5C\5C' {\0A r.i += 1\0A continue\0A }\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A e := peek(r)\0A r.i += 1\0A if e == 'n' {\0A parts.push(\22\5Cn\22)\0A } else if e == 't' {\0A parts.push(\22\5Ct\22)\0A } else if e == 'r' {\0A parts.push(\22\5Cr\22)\0A } else if e == 'b' {\0A parts.push(utf8(8))\0A } else if e == 'f' {\0A parts.push(utf8(12))\0A } else if e == '\22' || e == '\5C\5C' || e == '/' {\0A parts.push(str(e))\0A } else if e == 'u' {\0A cp := try read_hex4(r)\0A // a pair of \F0\9F\98\80 stands for one character above U+FFFF\0A if cp >= 55296 && cp < 56320 && comes(r, \22\5C\5Cu\22) {\0A r.i += 2\0A low := try read_hex4(r)\0A cp = 65536 + (cp - 55296) * 1024 + (low - 56320)\0A }\0A parts.push(utf8(cp))\0A } else {\0A return error(\22json: unknown escape \5C\5C\22 + str(e) + \22 in a text (\22 + where(r) + \22)\22)\0A }\0A start = r.i\0A }\0A}\0A\0Afn read_number(ptr[Reader] r) -> Json! {\0A start := r.i\0A if peek(r) == '-' {\0A r.i += 1\0A }\0A while r.i < r.src.len && ((r.src[r.i] >= '0' && r.src[r.i] <= '9') || r.src[r.i] == '.' || r.src[r.i] == 'e' || r.src[r.i] == 'E' || r.src[r.i] == '+' || r.src[r.i] == '-') {\0A r.i += 1\0A }\0A n := float(r.src.sub(start, r.i)) or {\0A r.i = start\0A return error(unexpected(r, \22a number\22))\0A }\0A return new_number(n)\0A}\0A\0Afn read_value(ptr[Reader] r) -> Json! {\0A skip_space(r)\0A c := peek(r)\0A if r.i >= r.src.len {\0A return error(unexpected(r, \22a value\22))\0A }\0A if c == '{' {\0A obj := new_object()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A while true {\0A skip_space(r)\0A if peek(r) != '\22' {\0A return error(unexpected(r, \22a key in quotes\22))\0A }\0A key := try read_string(r)\0A skip_space(r)\0A if peek(r) != ':' {\0A return error(unexpected(r, \22':'\22))\0A }\0A r.i += 1\0A v := try read_value(r)\0A obj.set(key, v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A return error(unexpected(r, \22',' or '}'\22))\0A }\0A }\0A if c == '[' {\0A list := new_list()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A while true {\0A v := try read_value(r)\0A list.push(v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A return error(unexpected(r, \22',' or ']'\22))\0A }\0A }\0A if c == '\22' {\0A s := try read_string(r)\0A return new_text(s)\0A }\0A if c == 't' {\0A try expect_word(r, \22true\22)\0A return new_bool(true)\0A }\0A if c == 'f' {\0A try expect_word(r, \22false\22)\0A return new_bool(false)\0A }\0A if c == 'n' {\0A try expect_word(r, \22null\22)\0A return new_null()\0A }\0A if c == '-' || (c >= '0' && c <= '9') {\0A return try read_number(r)\0A }\0A return error(unexpected(r, \22a value\22))\0A}\0A\0A// the JSON in `text`; an error with the line and column where it went wrong\0Afn parse(str text) -> Json! {\0A r := Reader(src: text)\0A v := try read_value(addr(r))\0A skip_space(addr(r))\0A if r.i < r.src.len {\0A return error(unexpected(addr(r), \22the end of the text\22))\0A }\0A return v\0A}\0A\00" +@.str.7554 = private unnamed_addr constant [2847 x i8] c"// Paths, as text. Elements are separated by \22/\22.\0A//\0A// import path\0A// path.join(\22a\22, \22b.txt\22) a/b.txt\0A// path.base(\22/tmp/x/a.tar.gz\22) a.tar.gz path.stem(...) a.tar path.ext(...) .gz\0A// path.dir(\22/tmp/x/a.txt\22) /tmp/x\0A// path.clean(\22a//b/../c/./d\22) a/c/d\0A\0A// a and b with one separator between; an absolute b replaces a\0Afn join(str a, str b) -> str {\0A if a.len == 0 {\0A return b\0A }\0A if b.len == 0 {\0A return a\0A }\0A if b[0] == '/' {\0A return b\0A }\0A if a[a.len - 1] == '/' {\0A return a + b\0A }\0A return a + \22/\22 + b\0A}\0A\0Afn is_abs(str p) -> bool {\0A return p.len > 0 && p[0] == '/'\0A}\0A\0A// the last element: \22a/b.txt\22 -> \22b.txt\22, \22a/b/\22 -> \22b\22, \22\22 -> \22.\22, \22/\22 -> \22/\22\0Afn base(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A if end == 1 && p[0] == '/' {\0A return \22/\22\0A }\0A start := end\0A while start > 0 && p[start - 1] != '/' {\0A start -= 1\0A }\0A return p.sub(start, end)\0A}\0A\0A// everything before the last element: \22a/b.txt\22 -> \22a\22, \22b.txt\22 -> \22.\22, \22/b\22 -> \22/\22\0Afn dir(str p) -> str {\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A i := end\0A while i > 0 && p[i - 1] != '/' {\0A i -= 1\0A }\0A if i == 0 {\0A return \22.\22\0A }\0A while i > 1 && p[i - 1] == '/' {\0A i -= 1\0A }\0A return p.sub(0, i)\0A}\0A\0A// the part of the last element from its last dot: \22a.tar.gz\22 -> \22.gz\22; \22\22 when there is none\0Afn ext(str p) -> str {\0A b := base(p)\0A i := b.len\0A while i > 0 && b[i - 1] != '.' {\0A i -= 1\0A }\0A if i <= 1 { // no dot, or a name that only starts with one (.bashrc)\0A return \22\22\0A }\0A return b.sub(i - 1, b.len)\0A}\0A\0A// the last element without its extension\0Afn stem(str p) -> str {\0A b := base(p)\0A e := ext(p)\0A return b.sub(0, b.len - e.len)\0A}\0A\0A// the elements of a path: \22/a/b/c\22 -> [\22a\22, \22b\22, \22c\22]\0Afn parts(str p) -> []str {\0A []str out\0A for piece in p.split(\22/\22) {\0A if piece.len > 0 {\0A out.push(piece)\0A }\0A }\0A return out\0A}\0A\0A// the shortest path with the same meaning: no \22//\22, no \22.\22, and \22..\22 resolved where it can be\0Afn clean(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A abs := is_abs(p)\0A []str out\0A for piece in parts(p) {\0A if piece == \22.\22 {\0A continue\0A }\0A if piece == \22..\22 {\0A if out.len > 0 && out[out.len - 1] != \22..\22 {\0A out.pop()\0A } else if !abs {\0A out.push(\22..\22)\0A }\0A continue\0A }\0A out.push(piece)\0A }\0A joined := out.join(\22/\22)\0A if abs {\0A return \22/\22 + joined\0A }\0A if joined.len == 0 {\0A return \22.\22\0A }\0A return joined\0A}\0A\00" +@.str.7555 = private unnamed_addr constant [1407 x i8] c"// Programs: run a command, read what it printed, look at the environment.\0A//\0A// import proc\0A// code := proc.run(\22make\22) the exit code; what the command prints goes to the screen\0A// text := try proc.output(\22git describe\22) what the command printed; an error if it failed\0A// proc.env(\22HOME\22, \22/\22) an environment variable, or the second value if it is not set\0Aimport \22stdlib.h\22\0Aimport \22unistd.h\22\0Aimport \22time.h\22\0A\0A// run a command; its output goes to the screen. Gives its exit code.\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0A// run a command and give what it printed. Fails, with its output as the message, if it exits with an error.\0Afn output(str command) -> str! {\0A tmp := \22/tmp/finch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(\22(\22 + command + \22) > '\22 + tmp + \22' 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0A// the folder the program is running in\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7556 = private unnamed_addr constant [996 x i8] c"// Programs, for Windows. The same functions as proc.fch (that file is for Linux and macOS).\0Aimport \22stdlib.h\22\0Aimport \22process.h\22\0Aimport \22direct.h\22\0Aimport \22time.h\22\0A\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0Afn output(str command) -> str! {\0A tmp := proc_env(\22TEMP\22, \22.\22) + \22\5C\5Cfinch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(command + \22 > \5C\22\22 + tmp + \22\5C\22 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn proc_env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn env(str name, str fallback) -> str {\0A return proc_env(name, fallback)\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7557 = private unnamed_addr constant [2540 x i8] c"// Time: the clock, sleeping, and dates.\0A//\0A// import time\0A// start := time.millis() milliseconds from a clock that only goes forward (to measure with)\0A// time.sleep(250) wait a quarter of a second\0A// time.now() seconds since 1970-01-01 00:00 UTC\0A// d := time.date(time.now()) the parts: d.year, d.month, d.day, d.hour, d.minute, d.second\0A// time.format(time.now(), \22%Y-%m-%d %H:%M\22) as text, in the computer's time zone\0Aimport \22time.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0A// seconds since 1970-01-01 00:00 UTC\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward: for measuring how long something took\0Afn millis() -> int {\0A timespec ts\0A clock_gettime(CLOCK_MONOTONIC, addr(ts))\0A return int(ts.tv_sec) * 1000 + int(ts.tv_nsec) / 1000000\0A}\0A\0Afn sleep(int ms) {\0A timespec ts\0A ts.tv_sec = ms / 1000\0A ts.tv_nsec = (ms % 1000) * 1000000\0A nanosleep(addr(ts), null)\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0A// the date and time of a moment, in UTC\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A gmtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// the date and time of a moment, in the computer's time zone\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// a moment as text, in the computer's time zone: %Y year, %m month, %d day, %H hour, %M minute, %S second\0A// (the rest of C's strftime works too: %A weekday name, %B month name, ...)\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0A// the number of days in a month (month is 1 to 12)\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7558 = private unnamed_addr constant [1793 x i8] c"// Time, for Windows. The same functions as time.fch (that file is for Linux and macOS).\0Aimport \22time.h\22\0Aimport \22finch_win.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward (the performance counter: GetTickCount64 ticks every 15 ms)\0Afn millis() -> int {\0A i64 count = 0\0A i64 freq = 1\0A QueryPerformanceFrequency(addr(freq))\0A QueryPerformanceCounter(addr(count))\0A return int(count / freq) * 1000 + int(count % freq) * 1000 / int(freq)\0A}\0A\0Afn sleep(int ms) {\0A Sleep(u32(ms))\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _gmtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7559 = private unnamed_addr constant [366 x i8] c"/* The Windows functions std/time_windows.fch needs. Declared here, not by including :\0A libclang can't parse that header with MinGW's intrinsics. Both are in kernel32. */\0Aunsigned long long GetTickCount64(void);\0Avoid Sleep(unsigned long milliseconds);\0Aint QueryPerformanceCounter(long long *count);\0Aint QueryPerformanceFrequency(long long *frequency);\0A\00" declare void @finch_panic(ptr, i64, ptr) noreturn cold declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold @@ -9696,19 +9711,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond399 -n.cond399: + br label %n.cond403 +n.cond403: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body400, label %n.end401 -n.body400: + br i1 %t6, label %n.body404, label %n.end405 +n.body404: %t7 = getelementptr inbounds %S.cimport.Header, ptr %t1, i64 %t5 call void @finch.drop.S_cimport_Header(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond399 -n.end401: + br label %n.cond403 +n.end405: call void @finch_arr_free(ptr %a) ret void } @@ -9720,19 +9735,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond402 -n.cond402: + br label %n.cond406 +n.cond406: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body403, label %n.end404 -n.body403: + br i1 %t6, label %n.body407, label %n.end408 +n.body407: %t7 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t5 call void @finch.drop.S_ast_Program(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond402 -n.end404: + br label %n.cond406 +n.end408: call void @finch_arr_free(ptr %a) ret void } @@ -9825,31 +9840,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond412 -n.cond412: + br label %n.cond416 +n.cond416: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body413, label %n.end414 -n.body413: + br i1 %t5, label %n.body417, label %n.end418 +n.body417: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live415, label %entry.next416 -entry.live415: + br i1 %t11, label %entry.live419, label %entry.next420 +entry.live419: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_cimport_CFunc(ptr %t13) - br label %entry.next416 -entry.next416: + br label %entry.next420 +entry.next420: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond412 -n.end414: + br label %n.cond416 +n.end418: call void @finch_map_free(ptr %a) ret void } @@ -9868,31 +9883,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond417 -n.cond417: + br label %n.cond421 +n.cond421: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body418, label %n.end419 -n.body418: + br i1 %t5, label %n.body422, label %n.end423 +n.body422: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live420, label %entry.next421 -entry.live420: + br i1 %t11, label %entry.live424, label %entry.next425 +entry.live424: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_cimport_CConst(ptr %t13) - br label %entry.next421 -entry.next421: + br label %entry.next425 +entry.next425: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond417 -n.end419: + br label %n.cond421 +n.end423: call void @finch_map_free(ptr %a) ret void } @@ -9903,31 +9918,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond422 -n.cond422: + br label %n.cond426 +n.cond426: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body423, label %n.end424 -n.body423: + br i1 %t5, label %n.body427, label %n.end428 +n.body427: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live425, label %entry.next426 -entry.live425: + br i1 %t11, label %entry.live429, label %entry.next430 +entry.live429: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_ast_Type(ptr %t13) - br label %entry.next426 -entry.next426: + br label %entry.next430 +entry.next430: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond422 -n.end424: + br label %n.cond426 +n.end428: call void @finch_map_free(ptr %a) ret void } @@ -9949,19 +9964,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond432 -n.cond432: + br label %n.cond436 +n.cond436: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body433, label %n.end434 -n.body433: + br i1 %t6, label %n.body437, label %n.end438 +n.body437: %t7 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t5 call void @finch.drop.S_cimport_CField(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond432 -n.end434: + br label %n.cond436 +n.end438: call void @finch_arr_free(ptr %a) ret void } @@ -9984,31 +9999,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond427 -n.cond427: + br label %n.cond431 +n.cond431: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body428, label %n.end429 -n.body428: + br i1 %t5, label %n.body432, label %n.end433 +n.body432: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live430, label %entry.next431 -entry.live430: + br i1 %t11, label %entry.live434, label %entry.next435 +entry.live434: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_cimport_CStruct(ptr %t13) - br label %entry.next431 -entry.next431: + br label %entry.next435 +entry.next435: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond427 -n.end429: + br label %n.cond431 +n.end433: call void @finch_map_free(ptr %a) ret void } @@ -10287,92 +10302,92 @@ entry: %a811 = alloca { ptr, i64, i64 }, align 16 %a812 = alloca { ptr, i64, i64 }, align 16 %a822 = alloca { ptr, i64, i64 }, align 16 - %a827 = alloca { ptr, i64, i64 }, align 16 - %a828 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 %a831 = alloca { ptr, i64, i64 }, align 16 - %a844 = alloca { ptr, i64, i64 }, align 16 - %a853 = alloca %S.cimport.CImports, align 16 - %a862 = alloca { ptr, i64, i64 }, align 16 - %a863 = alloca { ptr, i64, i64 }, align 16 - %a872 = alloca %S.platform.Target, align 16 - %a873 = alloca %S.platform.Target, align 16 - %a877 = alloca %S.gen.Options, align 16 - %a878 = alloca { ptr, i64, i64 }, align 16 - %a880 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca %S.cimport.CImports, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a866 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca %S.platform.Target, align 16 + %a876 = alloca %S.platform.Target, align 16 + %a880 = alloca %S.gen.Options, align 16 %a881 = alloca { ptr, i64, i64 }, align 16 - %a885 = alloca { ptr, i64, i64 }, align 16 - %a886 = alloca { ptr, i64, i64 }, align 16 - %a902 = alloca { ptr, i64, i64 }, align 16 - %a904 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 %a905 = alloca { ptr, i64, i64 }, align 16 %a907 = alloca { ptr, i64, i64 }, align 16 - %a918 = alloca { ptr, i64, i64 }, align 16 - %a919 = alloca { ptr, i64, i64 }, align 16 - %a920 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 %a921 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca { ptr, i64, i64 }, align 16 + %a923 = alloca { ptr, i64, i64 }, align 16 %a924 = alloca { ptr, i64, i64 }, align 16 - %a926 = alloca { ptr, i64, i64 }, align 16 - %a937 = alloca { ptr, i64, i64 }, align 16 - %a938 = alloca { ptr, i64, i64 }, align 16 - %a939 = alloca { ptr, i64, i64 }, align 16 + %a927 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 %a940 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 %a943 = alloca { ptr, i64, i64 }, align 16 - %a945 = alloca { ptr, i64, i64 }, align 16 - %a956 = alloca { ptr, i64, i64 }, align 16 - %a957 = alloca { ptr, i64, i64 }, align 16 - %a958 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 %a962 = alloca { ptr, i64, i64 }, align 16 - %a964 = alloca { ptr, i64, i64 }, align 16 - %a968 = alloca { ptr, i64, i64 }, align 16 - %a973 = alloca { ptr, i64, i64 }, align 16 - %a975 = alloca { ptr, i64, i64 }, align 16 - %a980 = alloca { ptr, i64, i64 }, align 16 - %a981 = alloca { ptr, i64, i64 }, align 16 - %a982 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a978 = alloca { ptr, i64, i64 }, align 16 %a983 = alloca { ptr, i64, i64 }, align 16 + %a984 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 %a986 = alloca { ptr, i64, i64 }, align 16 - %a987 = alloca { ptr, i64, i64 }, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 %a990 = alloca { ptr, i64, i64 }, align 16 %a993 = alloca { ptr, i64, i64 }, align 16 - %a994 = alloca { ptr, i64, i64 }, align 16 - %a995 = alloca { ptr, i64, i64 }, align 16 + %a996 = alloca { ptr, i64, i64 }, align 16 + %a997 = alloca { ptr, i64, i64 }, align 16 %a998 = alloca { ptr, i64, i64 }, align 16 - %a1000 = alloca { ptr, i64, i64 }, align 16 %a1001 = alloca { ptr, i64, i64 }, align 16 - %a1005 = alloca { ptr, i64, i64 }, align 16 - %a1006 = alloca { ptr, i64, i64 }, align 16 - %a1010 = alloca { ptr, i64, i64 }, align 16 - %a1011 = alloca { ptr, i64, i64 }, align 16 - %a1015 = alloca { ptr, i64, i64 }, align 16 - %a1016 = alloca { ptr, i64, i64 }, align 16 - %a1020 = alloca { ptr, i64, i64 }, align 16 - %a1021 = alloca { ptr, i64, i64 }, align 16 - %a1027 = alloca { ptr, i64, i64 }, align 16 - %a1028 = alloca { ptr, i64, i64 }, align 16 - %a1034 = alloca %S.linker.Build, align 16 - %a1037 = alloca { ptr, i64, i64 }, align 16 - %a1038 = alloca { ptr, i64, i64 }, align 16 + %a1003 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca %S.linker.Build, align 16 + %a1040 = alloca { ptr, i64, i64 }, align 16 %a1041 = alloca { ptr, i64, i64 }, align 16 - %a1042 = alloca i64, align 16 - %a1050 = alloca { ptr, i64, i64 }, align 16 - %a1064 = alloca { ptr, i64, i64 }, align 16 - %a1065 = alloca { ptr, i64, i64 }, align 16 - %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1045 = alloca i64, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 %a1069 = alloca { ptr, i64, i64 }, align 16 %a1070 = alloca { ptr, i64, i64 }, align 16 - %a1071 = alloca { ptr, i64, i64 }, align 16 %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 %a1075 = alloca { ptr, i64, i64 }, align 16 - %a1076 = alloca { ptr, i64, i64 }, align 16 %a1078 = alloca { ptr, i64, i64 }, align 16 %a1079 = alloca { ptr, i64, i64 }, align 16 - %a1080 = alloca { ptr, i64, i64 }, align 16 %a1081 = alloca { ptr, i64, i64 }, align 16 %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 %a1085 = alloca { ptr, i64, i64 }, align 16 - %a1086 = alloca i64, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca i64, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 @@ -11777,43 +11792,54 @@ each.end350: store { ptr, i64, i64 } { ptr @.str.235, i64 0, i64 0 }, ptr %a822 %t823 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 5 %t824 = load i1, ptr %t823 - br i1 %t824, label %then394, label %endif396 -then394: - %t825 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 0 - %t826 = load { ptr, i64, i64 }, ptr %t825 - store { ptr, i64, i64 } %t826, ptr %a827 - call void @finch_str_copy(ptr %a828, ptr %a827) - %t829 = load { ptr, i64, i64 }, ptr %a828 - %t830 = load { ptr, i64, i64 }, ptr %a822 - store { ptr, i64, i64 } %t829, ptr %a822 - store { ptr, i64, i64 } %t830, ptr %a831 - call void @finch_str_drop(ptr %a831) - br label %endif396 -endif396: - %t832 = load { ptr, i64, i64 }, ptr %a632 - %t833 = load { ptr, i64, i64 }, ptr %a638 - %t834 = load { ptr, i64, i64 }, ptr %a822 - %t835 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 - %t836 = load i1, ptr %t835 - %t837 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 7 - %t838 = load { ptr, i64, i64 }, ptr %t837 - %t839 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t832, { ptr, i64, i64 } %t833, { ptr, i64, i64 } %t834, i1 %t836, { ptr, i64, i64 } %t838) - %t840 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t839, 0 - %t841 = xor i1 %t840, true - %t842 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t839, 2 - %t843 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t839, 1 - br i1 %t841, label %or.failed397, label %or.ok398 -or.failed397: - store { ptr, i64, i64 } %t842, ptr %a844 - %t845 = load { ptr, i64, i64 }, ptr %a844 - %t846 = extractvalue { ptr, i64, i64 } %t845, 1 - %t847 = trunc i64 %t846 to i32 - %t848 = extractvalue { ptr, i64, i64 } %t845, 0 - %t849 = icmp eq ptr %t848, null - %t850 = select i1 %t849, ptr @.str.236, ptr %t848 - %t851 = call i32 (ptr, ...) @printf(ptr @.str.237, i32 %t847, ptr %t850) - %t852 = call i32 (ptr, ...) @printf(ptr @.str.238) - call void @finch_str_drop(ptr %a844) + br label %logic.from394 +logic.from394: + br i1 %t824, label %logic.end396, label %logic.rhs395 +logic.rhs395: + %t825 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t826 = load i1, ptr %t825 + br label %logic.rend397 +logic.rend397: + br label %logic.end396 +logic.end396: + %t827 = phi i1 [ true, %logic.from394 ], [ %t826, %logic.rend397 ] + br i1 %t827, label %then398, label %endif400 +then398: + %t828 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 0 + %t829 = load { ptr, i64, i64 }, ptr %t828 + store { ptr, i64, i64 } %t829, ptr %a830 + call void @finch_str_copy(ptr %a831, ptr %a830) + %t832 = load { ptr, i64, i64 }, ptr %a831 + %t833 = load { ptr, i64, i64 }, ptr %a822 + store { ptr, i64, i64 } %t832, ptr %a822 + store { ptr, i64, i64 } %t833, ptr %a834 + call void @finch_str_drop(ptr %a834) + br label %endif400 +endif400: + %t835 = load { ptr, i64, i64 }, ptr %a632 + %t836 = load { ptr, i64, i64 }, ptr %a638 + %t837 = load { ptr, i64, i64 }, ptr %a822 + %t838 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t839 = load i1, ptr %t838 + %t840 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 7 + %t841 = load { ptr, i64, i64 }, ptr %t840 + %t842 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t835, { ptr, i64, i64 } %t836, { ptr, i64, i64 } %t837, i1 %t839, { ptr, i64, i64 } %t841) + %t843 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 0 + %t844 = xor i1 %t843, true + %t845 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 2 + %t846 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 1 + br i1 %t844, label %or.failed401, label %or.ok402 +or.failed401: + store { ptr, i64, i64 } %t845, ptr %a847 + %t848 = load { ptr, i64, i64 }, ptr %a847 + %t849 = extractvalue { ptr, i64, i64 } %t848, 1 + %t850 = trunc i64 %t849 to i32 + %t851 = extractvalue { ptr, i64, i64 } %t848, 0 + %t852 = icmp eq ptr %t851, null + %t853 = select i1 %t852, ptr @.str.236, ptr %t851 + %t854 = call i32 (ptr, ...) @printf(ptr @.str.237, i32 %t850, ptr %t853) + %t855 = call i32 (ptr, ...) @printf(ptr @.str.238) + call void @finch_str_drop(ptr %a847) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -11832,65 +11858,65 @@ or.failed397: call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 1 -or.ok398: - store %S.cimport.CImports %t843, ptr %a853 - %t854 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 - %t855 = load { ptr, i64, i64 }, ptr %t854 - %t856 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 1 - %t857 = load { ptr, i64, i64 }, ptr %t856 - %t858 = load %S.cimport.CImports, ptr %a853 - %t859 = load i1, ptr %a105 - %t860 = insertvalue %S.gen.Options zeroinitializer, i1 %t859, 0 - %t861 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } %t861, ptr %a862 - store { ptr, i64, i64 } { ptr @.str.239, i64 5, i64 0 }, ptr %a863 - %t864 = call i32 @finch_str_eq(ptr %a862, ptr %a863) - %t865 = icmp ne i32 %t864, 0 - %t866 = insertvalue %S.gen.Options %t860, i1 %t865, 1 - %t867 = load i1, ptr %a106 - %t868 = insertvalue %S.gen.Options %t866, i1 %t867, 2 - %t869 = call { ptr, i64, i64 } @finch.host.cwd() - %t870 = insertvalue %S.gen.Options %t868, { ptr, i64, i64 } %t869, 3 - %t871 = load %S.platform.Target, ptr %a381 - store %S.platform.Target %t871, ptr %a872 - call void @finch.copy.S_platform_Target(ptr %a873, ptr %a872) - %t874 = load %S.platform.Target, ptr %a873 - %t875 = insertvalue %S.gen.Options %t870, %S.platform.Target %t874, 4 - %t876 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t855, { ptr, i64, i64 } %t857, %S.cimport.CImports %t858, %S.gen.Options %t875) - store %S.gen.Options %t875, ptr %a877 - call void @finch.drop.S_gen_Options(ptr %a877) - store { ptr, i64, i64 } %t876, ptr %a878 - %t879 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } %t879, ptr %a880 - store { ptr, i64, i64 } { ptr @.str.240, i64 2, i64 0 }, ptr %a881 - %t882 = call i32 @finch_str_eq(ptr %a880, ptr %a881) - %t883 = icmp ne i32 %t882, 0 - br label %logic.from405 -logic.from405: - br i1 %t883, label %logic.end407, label %logic.rhs406 -logic.rhs406: - %t884 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } %t884, ptr %a885 - store { ptr, i64, i64 } { ptr @.str.241, i64 5, i64 0 }, ptr %a886 - %t887 = call i32 @finch_str_eq(ptr %a885, ptr %a886) - %t888 = icmp ne i32 %t887, 0 - br label %logic.rend408 -logic.rend408: - br label %logic.end407 -logic.end407: - %t889 = phi i1 [ true, %logic.from405 ], [ %t888, %logic.rend408 ] - br i1 %t889, label %then409, label %endif411 -then409: - %t890 = load { ptr, i64, i64 }, ptr %a878 - %t891 = extractvalue { ptr, i64, i64 } %t890, 1 - %t892 = trunc i64 %t891 to i32 - %t893 = extractvalue { ptr, i64, i64 } %t890, 0 - %t894 = icmp eq ptr %t893, null - %t895 = select i1 %t894, ptr @.str.242, ptr %t893 - %t896 = call i32 (ptr, ...) @printf(ptr @.str.243, i32 %t892, ptr %t895) - %t897 = call i32 (ptr, ...) @printf(ptr @.str.244) - call void @finch_str_drop(ptr %a878) - call void @finch.drop.S_cimport_CImports(ptr %a853) +or.ok402: + store %S.cimport.CImports %t846, ptr %a856 + %t857 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 + %t858 = load { ptr, i64, i64 }, ptr %t857 + %t859 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 1 + %t860 = load { ptr, i64, i64 }, ptr %t859 + %t861 = load %S.cimport.CImports, ptr %a856 + %t862 = load i1, ptr %a105 + %t863 = insertvalue %S.gen.Options zeroinitializer, i1 %t862, 0 + %t864 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t864, ptr %a865 + store { ptr, i64, i64 } { ptr @.str.239, i64 5, i64 0 }, ptr %a866 + %t867 = call i32 @finch_str_eq(ptr %a865, ptr %a866) + %t868 = icmp ne i32 %t867, 0 + %t869 = insertvalue %S.gen.Options %t863, i1 %t868, 1 + %t870 = load i1, ptr %a106 + %t871 = insertvalue %S.gen.Options %t869, i1 %t870, 2 + %t872 = call { ptr, i64, i64 } @finch.host.cwd() + %t873 = insertvalue %S.gen.Options %t871, { ptr, i64, i64 } %t872, 3 + %t874 = load %S.platform.Target, ptr %a381 + store %S.platform.Target %t874, ptr %a875 + call void @finch.copy.S_platform_Target(ptr %a876, ptr %a875) + %t877 = load %S.platform.Target, ptr %a876 + %t878 = insertvalue %S.gen.Options %t873, %S.platform.Target %t877, 4 + %t879 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t858, { ptr, i64, i64 } %t860, %S.cimport.CImports %t861, %S.gen.Options %t878) + store %S.gen.Options %t878, ptr %a880 + call void @finch.drop.S_gen_Options(ptr %a880) + store { ptr, i64, i64 } %t879, ptr %a881 + %t882 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t882, ptr %a883 + store { ptr, i64, i64 } { ptr @.str.240, i64 2, i64 0 }, ptr %a884 + %t885 = call i32 @finch_str_eq(ptr %a883, ptr %a884) + %t886 = icmp ne i32 %t885, 0 + br label %logic.from409 +logic.from409: + br i1 %t886, label %logic.end411, label %logic.rhs410 +logic.rhs410: + %t887 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t887, ptr %a888 + store { ptr, i64, i64 } { ptr @.str.241, i64 5, i64 0 }, ptr %a889 + %t890 = call i32 @finch_str_eq(ptr %a888, ptr %a889) + %t891 = icmp ne i32 %t890, 0 + br label %logic.rend412 +logic.rend412: + br label %logic.end411 +logic.end411: + %t892 = phi i1 [ true, %logic.from409 ], [ %t891, %logic.rend412 ] + br i1 %t892, label %then413, label %endif415 +then413: + %t893 = load { ptr, i64, i64 }, ptr %a881 + %t894 = extractvalue { ptr, i64, i64 } %t893, 1 + %t895 = trunc i64 %t894 to i32 + %t896 = extractvalue { ptr, i64, i64 } %t893, 0 + %t897 = icmp eq ptr %t896, null + %t898 = select i1 %t897, ptr @.str.242, ptr %t896 + %t899 = call i32 (ptr, ...) @printf(ptr @.str.243, i32 %t895, ptr %t898) + %t900 = call i32 (ptr, ...) @printf(ptr @.str.244) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -11909,222 +11935,222 @@ then409: call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 0 -endif411: - %t898 = extractvalue { ptr, i64, i64 } { ptr @.str.245, i64 8, i64 0 }, 0 - %t899 = icmp eq ptr %t898, null - %t900 = select i1 %t899, ptr @.str.246, ptr %t898 - %t901 = call ptr @getenv(ptr %t900) - store { ptr, i64, i64 } zeroinitializer, ptr %a902 - call void @finch_str_from_c(ptr %a902, ptr %t901) - %t903 = load { ptr, i64, i64 }, ptr %a902 - store { ptr, i64, i64 } %t903, ptr %a904 - call void @finch_str_copy(ptr %a905, ptr %a904) +endif415: + %t901 = extractvalue { ptr, i64, i64 } { ptr @.str.245, i64 8, i64 0 }, 0 + %t902 = icmp eq ptr %t901, null + %t903 = select i1 %t902, ptr @.str.246, ptr %t901 + %t904 = call ptr @getenv(ptr %t903) + store { ptr, i64, i64 } zeroinitializer, ptr %a905 + call void @finch_str_from_c(ptr %a905, ptr %t904) %t906 = load { ptr, i64, i64 }, ptr %a905 store { ptr, i64, i64 } %t906, ptr %a907 - %t908 = getelementptr inbounds { ptr, i64, i64 }, ptr %a907, i32 0, i32 1 - %t909 = load i64, ptr %t908 - %t910 = icmp eq i64 %t909, 0 - br i1 %t910, label %then435, label %endif437 -then435: - %t911 = load { ptr, i64, i64 }, ptr %a1 - %t912 = extractvalue { ptr, i64, i64 } %t911, 1 - %t913 = icmp uge i64 0, %t912 - br i1 %t913, label %range438, label %inrange439 -range438: - call void @finch_panic_index(ptr @.str.247, i64 296, i64 0, i64 %t912) + call void @finch_str_copy(ptr %a908, ptr %a907) + %t909 = load { ptr, i64, i64 }, ptr %a908 + store { ptr, i64, i64 } %t909, ptr %a910 + %t911 = getelementptr inbounds { ptr, i64, i64 }, ptr %a910, i32 0, i32 1 + %t912 = load i64, ptr %t911 + %t913 = icmp eq i64 %t912, 0 + br i1 %t913, label %then439, label %endif441 +then439: + %t914 = load { ptr, i64, i64 }, ptr %a1 + %t915 = extractvalue { ptr, i64, i64 } %t914, 1 + %t916 = icmp uge i64 0, %t915 + br i1 %t916, label %range442, label %inrange443 +range442: + call void @finch_panic_index(ptr @.str.247, i64 296, i64 0, i64 %t915) unreachable -inrange439: - %t914 = extractvalue { ptr, i64, i64 } %t911, 0 - %t915 = getelementptr inbounds { ptr, i64, i64 }, ptr %t914, i64 0 - %t916 = load { ptr, i64, i64 }, ptr %t915 - %t917 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t916) - store { ptr, i64, i64 } %t917, ptr %a919 - store { ptr, i64, i64 } { ptr @.str.248, i64 22, i64 0 }, ptr %a920 - call void @finch_str_concat(ptr %a918, ptr %a919, ptr %a920) - store { ptr, i64, i64 } %t917, ptr %a921 - call void @finch_str_drop(ptr %a921) - %t922 = load { ptr, i64, i64 }, ptr %a918 - %t923 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t922, ptr %a907 - store { ptr, i64, i64 } %t923, ptr %a924 +inrange443: + %t917 = extractvalue { ptr, i64, i64 } %t914, 0 + %t918 = getelementptr inbounds { ptr, i64, i64 }, ptr %t917, i64 0 + %t919 = load { ptr, i64, i64 }, ptr %t918 + %t920 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t919) + store { ptr, i64, i64 } %t920, ptr %a922 + store { ptr, i64, i64 } { ptr @.str.248, i64 22, i64 0 }, ptr %a923 + call void @finch_str_concat(ptr %a921, ptr %a922, ptr %a923) + store { ptr, i64, i64 } %t920, ptr %a924 call void @finch_str_drop(ptr %a924) - br label %endif437 -endif437: - %t925 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t925, ptr %a926 - %t927 = call i32 @finch_file_exists(ptr %a926) - %t928 = icmp ne i32 %t927, 0 - %t929 = xor i1 %t928, true - br i1 %t929, label %then440, label %endif442 -then440: - %t930 = load { ptr, i64, i64 }, ptr %a1 - %t931 = extractvalue { ptr, i64, i64 } %t930, 1 - %t932 = icmp uge i64 0, %t931 - br i1 %t932, label %range443, label %inrange444 -range443: - call void @finch_panic_index(ptr @.str.249, i64 299, i64 0, i64 %t931) + %t925 = load { ptr, i64, i64 }, ptr %a921 + %t926 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t925, ptr %a910 + store { ptr, i64, i64 } %t926, ptr %a927 + call void @finch_str_drop(ptr %a927) + br label %endif441 +endif441: + %t928 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t928, ptr %a929 + %t930 = call i32 @finch_file_exists(ptr %a929) + %t931 = icmp ne i32 %t930, 0 + %t932 = xor i1 %t931, true + br i1 %t932, label %then444, label %endif446 +then444: + %t933 = load { ptr, i64, i64 }, ptr %a1 + %t934 = extractvalue { ptr, i64, i64 } %t933, 1 + %t935 = icmp uge i64 0, %t934 + br i1 %t935, label %range447, label %inrange448 +range447: + call void @finch_panic_index(ptr @.str.249, i64 299, i64 0, i64 %t934) unreachable -inrange444: - %t933 = extractvalue { ptr, i64, i64 } %t930, 0 - %t934 = getelementptr inbounds { ptr, i64, i64 }, ptr %t933, i64 0 - %t935 = load { ptr, i64, i64 }, ptr %t934 - %t936 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t935) - store { ptr, i64, i64 } %t936, ptr %a938 - store { ptr, i64, i64 } { ptr @.str.250, i64 19, i64 0 }, ptr %a939 - call void @finch_str_concat(ptr %a937, ptr %a938, ptr %a939) - store { ptr, i64, i64 } %t936, ptr %a940 - call void @finch_str_drop(ptr %a940) - %t941 = load { ptr, i64, i64 }, ptr %a937 - %t942 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t941, ptr %a907 - store { ptr, i64, i64 } %t942, ptr %a943 +inrange448: + %t936 = extractvalue { ptr, i64, i64 } %t933, 0 + %t937 = getelementptr inbounds { ptr, i64, i64 }, ptr %t936, i64 0 + %t938 = load { ptr, i64, i64 }, ptr %t937 + %t939 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t938) + store { ptr, i64, i64 } %t939, ptr %a941 + store { ptr, i64, i64 } { ptr @.str.250, i64 19, i64 0 }, ptr %a942 + call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) + store { ptr, i64, i64 } %t939, ptr %a943 call void @finch_str_drop(ptr %a943) - br label %endif442 -endif442: - %t944 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t944, ptr %a945 - %t946 = call i32 @finch_file_exists(ptr %a945) - %t947 = icmp ne i32 %t946, 0 - %t948 = xor i1 %t947, true - br i1 %t948, label %then445, label %endif447 -then445: - %t949 = load { ptr, i64, i64 }, ptr %a1 - %t950 = extractvalue { ptr, i64, i64 } %t949, 1 - %t951 = icmp uge i64 0, %t950 - br i1 %t951, label %range448, label %inrange449 -range448: - call void @finch_panic_index(ptr @.str.251, i64 302, i64 0, i64 %t950) + %t944 = load { ptr, i64, i64 }, ptr %a940 + %t945 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t944, ptr %a910 + store { ptr, i64, i64 } %t945, ptr %a946 + call void @finch_str_drop(ptr %a946) + br label %endif446 +endif446: + %t947 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t947, ptr %a948 + %t949 = call i32 @finch_file_exists(ptr %a948) + %t950 = icmp ne i32 %t949, 0 + %t951 = xor i1 %t950, true + br i1 %t951, label %then449, label %endif451 +then449: + %t952 = load { ptr, i64, i64 }, ptr %a1 + %t953 = extractvalue { ptr, i64, i64 } %t952, 1 + %t954 = icmp uge i64 0, %t953 + br i1 %t954, label %range452, label %inrange453 +range452: + call void @finch_panic_index(ptr @.str.251, i64 302, i64 0, i64 %t953) unreachable -inrange449: - %t952 = extractvalue { ptr, i64, i64 } %t949, 0 - %t953 = getelementptr inbounds { ptr, i64, i64 }, ptr %t952, i64 0 - %t954 = load { ptr, i64, i64 }, ptr %t953 - %t955 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t954) - store { ptr, i64, i64 } %t955, ptr %a957 - store { ptr, i64, i64 } { ptr @.str.252, i64 34, i64 0 }, ptr %a958 - call void @finch_str_concat(ptr %a956, ptr %a957, ptr %a958) - store { ptr, i64, i64 } %t955, ptr %a959 - call void @finch_str_drop(ptr %a959) - %t960 = load { ptr, i64, i64 }, ptr %a956 - %t961 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t960, ptr %a907 - store { ptr, i64, i64 } %t961, ptr %a962 +inrange453: + %t955 = extractvalue { ptr, i64, i64 } %t952, 0 + %t956 = getelementptr inbounds { ptr, i64, i64 }, ptr %t955, i64 0 + %t957 = load { ptr, i64, i64 }, ptr %t956 + %t958 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t957) + store { ptr, i64, i64 } %t958, ptr %a960 + store { ptr, i64, i64 } { ptr @.str.252, i64 34, i64 0 }, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t958, ptr %a962 call void @finch_str_drop(ptr %a962) - br label %endif447 -endif447: - %t963 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t963, ptr %a964 - %t965 = call i32 @finch_file_exists(ptr %a964) - %t966 = icmp ne i32 %t965, 0 - %t967 = xor i1 %t966, true - br label %logic.from450 -logic.from450: - br i1 %t967, label %logic.rhs451, label %logic.end452 -logic.rhs451: - store { ptr, i64, i64 } { ptr @.str.253, i64 18, i64 0 }, ptr %a968 - %t969 = call i32 @finch_file_exists(ptr %a968) - %t970 = icmp ne i32 %t969, 0 - br label %logic.rend453 -logic.rend453: - br label %logic.end452 -logic.end452: - %t971 = phi i1 [ false, %logic.from450 ], [ %t970, %logic.rend453 ] - br i1 %t971, label %then454, label %endif456 -then454: - %t972 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } { ptr @.str.254, i64 18, i64 0 }, ptr %a907 - store { ptr, i64, i64 } %t972, ptr %a973 - call void @finch_str_drop(ptr %a973) - br label %endif456 -endif456: - %t974 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t974, ptr %a975 - %t976 = call i32 @finch_file_exists(ptr %a975) - %t977 = icmp ne i32 %t976, 0 - %t978 = xor i1 %t977, true - br i1 %t978, label %then457, label %endif459 -then457: - %t979 = call { ptr, i64, i64 } @finch.main.unpack() - store { ptr, i64, i64 } %t979, ptr %a981 - store { ptr, i64, i64 } { ptr @.str.255, i64 19, i64 0 }, ptr %a982 - call void @finch_str_concat(ptr %a980, ptr %a981, ptr %a982) - store { ptr, i64, i64 } %t979, ptr %a983 - call void @finch_str_drop(ptr %a983) - %t984 = load { ptr, i64, i64 }, ptr %a980 - %t985 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t984, ptr %a907 - store { ptr, i64, i64 } %t985, ptr %a986 + %t963 = load { ptr, i64, i64 }, ptr %a959 + %t964 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t963, ptr %a910 + store { ptr, i64, i64 } %t964, ptr %a965 + call void @finch_str_drop(ptr %a965) + br label %endif451 +endif451: + %t966 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t966, ptr %a967 + %t968 = call i32 @finch_file_exists(ptr %a967) + %t969 = icmp ne i32 %t968, 0 + %t970 = xor i1 %t969, true + br label %logic.from454 +logic.from454: + br i1 %t970, label %logic.rhs455, label %logic.end456 +logic.rhs455: + store { ptr, i64, i64 } { ptr @.str.253, i64 18, i64 0 }, ptr %a971 + %t972 = call i32 @finch_file_exists(ptr %a971) + %t973 = icmp ne i32 %t972, 0 + br label %logic.rend457 +logic.rend457: + br label %logic.end456 +logic.end456: + %t974 = phi i1 [ false, %logic.from454 ], [ %t973, %logic.rend457 ] + br i1 %t974, label %then458, label %endif460 +then458: + %t975 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } { ptr @.str.254, i64 18, i64 0 }, ptr %a910 + store { ptr, i64, i64 } %t975, ptr %a976 + call void @finch_str_drop(ptr %a976) + br label %endif460 +endif460: + %t977 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t977, ptr %a978 + %t979 = call i32 @finch_file_exists(ptr %a978) + %t980 = icmp ne i32 %t979, 0 + %t981 = xor i1 %t980, true + br i1 %t981, label %then461, label %endif463 +then461: + %t982 = call { ptr, i64, i64 } @finch.main.unpack() + store { ptr, i64, i64 } %t982, ptr %a984 + store { ptr, i64, i64 } { ptr @.str.255, i64 19, i64 0 }, ptr %a985 + call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) + store { ptr, i64, i64 } %t982, ptr %a986 call void @finch_str_drop(ptr %a986) - br label %endif459 -endif459: - store { ptr, i64, i64 } { ptr @.str.256, i64 0, i64 0 }, ptr %a987 - %t988 = load i1, ptr %a105 - br i1 %t988, label %then460, label %endif462 -then460: - %t989 = load { ptr, i64, i64 }, ptr %a987 - store { ptr, i64, i64 } { ptr @.str.257, i64 6, i64 0 }, ptr %a987 - store { ptr, i64, i64 } %t989, ptr %a990 + %t987 = load { ptr, i64, i64 }, ptr %a983 + %t988 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t987, ptr %a910 + store { ptr, i64, i64 } %t988, ptr %a989 + call void @finch_str_drop(ptr %a989) + br label %endif463 +endif463: + store { ptr, i64, i64 } { ptr @.str.256, i64 0, i64 0 }, ptr %a990 + %t991 = load i1, ptr %a105 + br i1 %t991, label %then464, label %endif466 +then464: + %t992 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } { ptr @.str.257, i64 6, i64 0 }, ptr %a990 + store { ptr, i64, i64 } %t992, ptr %a993 + call void @finch_str_drop(ptr %a993) + br label %endif466 +endif466: + %t994 = load i1, ptr %a106 + br i1 %t994, label %then467, label %endif469 +then467: + %t995 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t995, ptr %a997 + store { ptr, i64, i64 } { ptr @.str.258, i64 3, i64 0 }, ptr %a998 + call void @finch_str_concat(ptr %a996, ptr %a997, ptr %a998) + %t999 = load { ptr, i64, i64 }, ptr %a996 + %t1000 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t999, ptr %a990 + store { ptr, i64, i64 } %t1000, ptr %a1001 + call void @finch_str_drop(ptr %a1001) + br label %endif469 +endif469: + %t1002 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t1002, ptr %a1003 + call void @finch_str_copy(ptr %a1004, ptr %a1003) + %t1005 = load { ptr, i64, i64 }, ptr %a1004 + %t1006 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t1005, 0 + %t1007 = load { ptr, i64, i64 }, ptr %a881 + store { ptr, i64, i64 } %t1007, ptr %a1008 + call void @finch_str_copy(ptr %a1009, ptr %a1008) + %t1010 = load { ptr, i64, i64 }, ptr %a1009 + %t1011 = insertvalue %S.linker.Build %t1006, { ptr, i64, i64 } %t1010, 1 + %t1012 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t1012, ptr %a1013 + call void @finch_str_copy(ptr %a1014, ptr %a1013) + %t1015 = load { ptr, i64, i64 }, ptr %a1014 + %t1016 = insertvalue %S.linker.Build %t1011, { ptr, i64, i64 } %t1015, 2 + %t1017 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t1017, ptr %a1018 + call void @finch_str_copy(ptr %a1019, ptr %a1018) + %t1020 = load { ptr, i64, i64 }, ptr %a1019 + %t1021 = insertvalue %S.linker.Build %t1016, { ptr, i64, i64 } %t1020, 3 + %t1022 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t1022, ptr %a1023 + call void @finch_str_copy(ptr %a1024, ptr %a1023) + %t1025 = load { ptr, i64, i64 }, ptr %a1024 + %t1026 = insertvalue %S.linker.Build %t1021, { ptr, i64, i64 } %t1025, 4 + %t1027 = load i1, ptr %a105 + %t1028 = insertvalue %S.linker.Build %t1026, i1 %t1027, 5 + %t1029 = load { ptr, i64, i64 }, ptr %a643 + store { ptr, i64, i64 } %t1029, ptr %a1030 + call void @finch.copy.arr_str(ptr %a1031, ptr %a1030) + %t1032 = load { ptr, i64, i64 }, ptr %a1031 + %t1033 = insertvalue %S.linker.Build %t1028, { ptr, i64, i64 } %t1032, 6 + %t1034 = load %S.platform.Target, ptr %a381 + %t1035 = load %S.cimport.CImports, ptr %a856 + %t1036 = call i64 @finch.linker.build(%S.linker.Build %t1033, %S.platform.Target %t1034, %S.cimport.CImports %t1035) + store %S.linker.Build %t1033, ptr %a1037 + call void @finch.drop.S_linker_Build(ptr %a1037) + %t1038 = icmp ne i64 %t1036, 0 + br i1 %t1038, label %then470, label %endif472 +then470: call void @finch_str_drop(ptr %a990) - br label %endif462 -endif462: - %t991 = load i1, ptr %a106 - br i1 %t991, label %then463, label %endif465 -then463: - %t992 = load { ptr, i64, i64 }, ptr %a987 - store { ptr, i64, i64 } %t992, ptr %a994 - store { ptr, i64, i64 } { ptr @.str.258, i64 3, i64 0 }, ptr %a995 - call void @finch_str_concat(ptr %a993, ptr %a994, ptr %a995) - %t996 = load { ptr, i64, i64 }, ptr %a993 - %t997 = load { ptr, i64, i64 }, ptr %a987 - store { ptr, i64, i64 } %t996, ptr %a987 - store { ptr, i64, i64 } %t997, ptr %a998 - call void @finch_str_drop(ptr %a998) - br label %endif465 -endif465: - %t999 = load { ptr, i64, i64 }, ptr %a103 - store { ptr, i64, i64 } %t999, ptr %a1000 - call void @finch_str_copy(ptr %a1001, ptr %a1000) - %t1002 = load { ptr, i64, i64 }, ptr %a1001 - %t1003 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t1002, 0 - %t1004 = load { ptr, i64, i64 }, ptr %a878 - store { ptr, i64, i64 } %t1004, ptr %a1005 - call void @finch_str_copy(ptr %a1006, ptr %a1005) - %t1007 = load { ptr, i64, i64 }, ptr %a1006 - %t1008 = insertvalue %S.linker.Build %t1003, { ptr, i64, i64 } %t1007, 1 - %t1009 = load { ptr, i64, i64 }, ptr %a907 - store { ptr, i64, i64 } %t1009, ptr %a1010 - call void @finch_str_copy(ptr %a1011, ptr %a1010) - %t1012 = load { ptr, i64, i64 }, ptr %a1011 - %t1013 = insertvalue %S.linker.Build %t1008, { ptr, i64, i64 } %t1012, 2 - %t1014 = load { ptr, i64, i64 }, ptr %a108 - store { ptr, i64, i64 } %t1014, ptr %a1015 - call void @finch_str_copy(ptr %a1016, ptr %a1015) - %t1017 = load { ptr, i64, i64 }, ptr %a1016 - %t1018 = insertvalue %S.linker.Build %t1013, { ptr, i64, i64 } %t1017, 3 - %t1019 = load { ptr, i64, i64 }, ptr %a987 - store { ptr, i64, i64 } %t1019, ptr %a1020 - call void @finch_str_copy(ptr %a1021, ptr %a1020) - %t1022 = load { ptr, i64, i64 }, ptr %a1021 - %t1023 = insertvalue %S.linker.Build %t1018, { ptr, i64, i64 } %t1022, 4 - %t1024 = load i1, ptr %a105 - %t1025 = insertvalue %S.linker.Build %t1023, i1 %t1024, 5 - %t1026 = load { ptr, i64, i64 }, ptr %a643 - store { ptr, i64, i64 } %t1026, ptr %a1027 - call void @finch.copy.arr_str(ptr %a1028, ptr %a1027) - %t1029 = load { ptr, i64, i64 }, ptr %a1028 - %t1030 = insertvalue %S.linker.Build %t1025, { ptr, i64, i64 } %t1029, 6 - %t1031 = load %S.platform.Target, ptr %a381 - %t1032 = load %S.cimport.CImports, ptr %a853 - %t1033 = call i64 @finch.linker.build(%S.linker.Build %t1030, %S.platform.Target %t1031, %S.cimport.CImports %t1032) - store %S.linker.Build %t1030, ptr %a1034 - call void @finch.drop.S_linker_Build(ptr %a1034) - %t1035 = icmp ne i64 %t1033, 0 - br i1 %t1035, label %then466, label %endif468 -then466: - call void @finch_str_drop(ptr %a987) - call void @finch_str_drop(ptr %a907) - call void @finch_str_drop(ptr %a878) - call void @finch.drop.S_cimport_CImports(ptr %a853) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -12143,85 +12169,85 @@ then466: call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) ret i64 1 -endif468: - %t1036 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } %t1036, ptr %a1037 - store { ptr, i64, i64 } { ptr @.str.259, i64 3, i64 0 }, ptr %a1038 - %t1039 = call i32 @finch_str_eq(ptr %a1037, ptr %a1038) - %t1040 = icmp ne i32 %t1039, 0 - br i1 %t1040, label %then469, label %endif471 -then469: - store { ptr, i64, i64 } zeroinitializer, ptr %a1041 - store i64 0, ptr %a1042 - br label %each.cond472 -each.cond472: - %t1043 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 - %t1044 = load i64, ptr %t1043 - %t1045 = load i64, ptr %a1042 - %t1046 = icmp slt i64 %t1045, %t1044 - br i1 %t1046, label %each.body473, label %each.end475 -each.body473: - %t1047 = load ptr, ptr %a113 - %t1048 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1047, i64 %t1045 - %t1049 = load { ptr, i64, i64 }, ptr %t1048 - store { ptr, i64, i64 } %t1049, ptr %a1050 - %t1051 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1041, i32 0, i32 1 - %t1052 = load { ptr, i64, i64 }, ptr %a1050 - %t1053 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1052) - %t1054 = load i64, ptr %t1051 - %t1055 = add i64 %t1054, 1 - call void @finch_arr_reserve(ptr %a1041, i64 %t1055, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) - %t1056 = load ptr, ptr %a1041 - %t1057 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1056, i64 %t1054 - store { ptr, i64, i64 } %t1053, ptr %t1057 - store i64 %t1055, ptr %t1051 - br label %each.step474 -each.step474: - %t1058 = load i64, ptr %a1042 - %t1059 = add i64 %t1058, 1 - store i64 %t1059, ptr %a1042 - br label %each.cond472 -each.end475: - %t1060 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 8 - %t1061 = load { ptr, i64, i64 }, ptr %t1060 - %t1062 = load { ptr, i64, i64 }, ptr %a103 - %t1063 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1062) - store { ptr, i64, i64 } %t1061, ptr %a1065 - store { ptr, i64, i64 } %t1063, ptr %a1066 - call void @finch_str_concat(ptr %a1064, ptr %a1065, ptr %a1066) - store { ptr, i64, i64 } %t1063, ptr %a1067 - call void @finch_str_drop(ptr %a1067) - %t1068 = load { ptr, i64, i64 }, ptr %a1064 - store { ptr, i64, i64 } %t1068, ptr %a1070 - store { ptr, i64, i64 } { ptr @.str.260, i64 1, i64 0 }, ptr %a1071 - call void @finch_str_concat(ptr %a1069, ptr %a1070, ptr %a1071) - store { ptr, i64, i64 } %t1068, ptr %a1072 - call void @finch_str_drop(ptr %a1072) - %t1073 = load { ptr, i64, i64 }, ptr %a1069 - %t1074 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1041, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.261, i64 1, i64 0 }, ptr %a1075 - call void @finch_str_join(ptr %a1076, ptr %a1041, ptr %a1075) - %t1077 = load { ptr, i64, i64 }, ptr %a1076 - store { ptr, i64, i64 } %t1073, ptr %a1079 - store { ptr, i64, i64 } %t1077, ptr %a1080 - call void @finch_str_concat(ptr %a1078, ptr %a1079, ptr %a1080) - store { ptr, i64, i64 } %t1073, ptr %a1081 - call void @finch_str_drop(ptr %a1081) - store { ptr, i64, i64 } %t1077, ptr %a1082 - call void @finch_str_drop(ptr %a1082) - %t1083 = load { ptr, i64, i64 }, ptr %a1078 - %t1084 = call i64 @finch.host.run({ ptr, i64, i64 } %t1083) - store { ptr, i64, i64 } %t1083, ptr %a1085 +endif472: + %t1039 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t1039, ptr %a1040 + store { ptr, i64, i64 } { ptr @.str.259, i64 3, i64 0 }, ptr %a1041 + %t1042 = call i32 @finch_str_eq(ptr %a1040, ptr %a1041) + %t1043 = icmp ne i32 %t1042, 0 + br i1 %t1043, label %then473, label %endif475 +then473: + store { ptr, i64, i64 } zeroinitializer, ptr %a1044 + store i64 0, ptr %a1045 + br label %each.cond476 +each.cond476: + %t1046 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t1047 = load i64, ptr %t1046 + %t1048 = load i64, ptr %a1045 + %t1049 = icmp slt i64 %t1048, %t1047 + br i1 %t1049, label %each.body477, label %each.end479 +each.body477: + %t1050 = load ptr, ptr %a113 + %t1051 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1050, i64 %t1048 + %t1052 = load { ptr, i64, i64 }, ptr %t1051 + store { ptr, i64, i64 } %t1052, ptr %a1053 + %t1054 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + %t1055 = load { ptr, i64, i64 }, ptr %a1053 + %t1056 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1055) + %t1057 = load i64, ptr %t1054 + %t1058 = add i64 %t1057, 1 + call void @finch_arr_reserve(ptr %a1044, i64 %t1058, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1059 = load ptr, ptr %a1044 + %t1060 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1059, i64 %t1057 + store { ptr, i64, i64 } %t1056, ptr %t1060 + store i64 %t1058, ptr %t1054 + br label %each.step478 +each.step478: + %t1061 = load i64, ptr %a1045 + %t1062 = add i64 %t1061, 1 + store i64 %t1062, ptr %a1045 + br label %each.cond476 +each.end479: + %t1063 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 8 + %t1064 = load { ptr, i64, i64 }, ptr %t1063 + %t1065 = load { ptr, i64, i64 }, ptr %a103 + %t1066 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1065) + store { ptr, i64, i64 } %t1064, ptr %a1068 + store { ptr, i64, i64 } %t1066, ptr %a1069 + call void @finch_str_concat(ptr %a1067, ptr %a1068, ptr %a1069) + store { ptr, i64, i64 } %t1066, ptr %a1070 + call void @finch_str_drop(ptr %a1070) + %t1071 = load { ptr, i64, i64 }, ptr %a1067 + store { ptr, i64, i64 } %t1071, ptr %a1073 + store { ptr, i64, i64 } { ptr @.str.260, i64 1, i64 0 }, ptr %a1074 + call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) + store { ptr, i64, i64 } %t1071, ptr %a1075 + call void @finch_str_drop(ptr %a1075) + %t1076 = load { ptr, i64, i64 }, ptr %a1072 + %t1077 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.261, i64 1, i64 0 }, ptr %a1078 + call void @finch_str_join(ptr %a1079, ptr %a1044, ptr %a1078) + %t1080 = load { ptr, i64, i64 }, ptr %a1079 + store { ptr, i64, i64 } %t1076, ptr %a1082 + store { ptr, i64, i64 } %t1080, ptr %a1083 + call void @finch_str_concat(ptr %a1081, ptr %a1082, ptr %a1083) + store { ptr, i64, i64 } %t1076, ptr %a1084 + call void @finch_str_drop(ptr %a1084) + store { ptr, i64, i64 } %t1080, ptr %a1085 call void @finch_str_drop(ptr %a1085) - store i64 %t1084, ptr %a1086 - %t1087 = load { ptr, i64, i64 }, ptr %a103 - call void @finch.host.remove({ ptr, i64, i64 } %t1087) - %t1088 = load i64, ptr %a1086 - call void @finch.drop.arr_str(ptr %a1041) - call void @finch_str_drop(ptr %a987) - call void @finch_str_drop(ptr %a907) - call void @finch_str_drop(ptr %a878) - call void @finch.drop.S_cimport_CImports(ptr %a853) + %t1086 = load { ptr, i64, i64 }, ptr %a1081 + %t1087 = call i64 @finch.host.run({ ptr, i64, i64 } %t1086) + store { ptr, i64, i64 } %t1086, ptr %a1088 + call void @finch_str_drop(ptr %a1088) + store i64 %t1087, ptr %a1089 + %t1090 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.host.remove({ ptr, i64, i64 } %t1090) + %t1091 = load i64, ptr %a1089 + call void @finch.drop.arr_str(ptr %a1044) + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -12239,12 +12265,12 @@ each.end475: call void @finch_str_drop(ptr %a103) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a67) - ret i64 %t1088 -endif471: - call void @finch_str_drop(ptr %a987) - call void @finch_str_drop(ptr %a907) - call void @finch_str_drop(ptr %a878) - call void @finch.drop.S_cimport_CImports(ptr %a853) + ret i64 %t1091 +endif475: + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) call void @finch_str_drop(ptr %a822) call void @finch.drop.arr_str(ptr %a643) call void @finch.drop.arr_str(ptr %a638) @@ -12271,50 +12297,50 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 97 - br label %logic.from476 -logic.from476: - br i1 %t3, label %logic.rhs477, label %logic.end478 -logic.rhs477: - %t4 = load i8, ptr %a1 - %t5 = icmp ule i8 %t4, 122 - br label %logic.rend479 -logic.rend479: - br label %logic.end478 -logic.end478: - %t6 = phi i1 [ false, %logic.from476 ], [ %t5, %logic.rend479 ] br label %logic.from480 logic.from480: - br i1 %t6, label %logic.end482, label %logic.rhs481 + br i1 %t3, label %logic.rhs481, label %logic.end482 logic.rhs481: - %t7 = load i8, ptr %a1 - %t8 = icmp uge i8 %t7, 65 - br label %logic.from483 -logic.from483: - br i1 %t8, label %logic.rhs484, label %logic.end485 -logic.rhs484: - %t9 = load i8, ptr %a1 - %t10 = icmp ule i8 %t9, 90 - br label %logic.rend486 -logic.rend486: - br label %logic.end485 -logic.end485: - %t11 = phi i1 [ false, %logic.from483 ], [ %t10, %logic.rend486 ] - br label %logic.rend487 -logic.rend487: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 122 + br label %logic.rend483 +logic.rend483: br label %logic.end482 logic.end482: - %t12 = phi i1 [ true, %logic.from480 ], [ %t11, %logic.rend487 ] - br label %logic.from488 -logic.from488: - br i1 %t12, label %logic.end490, label %logic.rhs489 -logic.rhs489: - %t13 = load i8, ptr %a1 - %t14 = icmp eq i8 %t13, 95 + %t6 = phi i1 [ false, %logic.from480 ], [ %t5, %logic.rend483 ] + br label %logic.from484 +logic.from484: + br i1 %t6, label %logic.end486, label %logic.rhs485 +logic.rhs485: + %t7 = load i8, ptr %a1 + %t8 = icmp uge i8 %t7, 65 + br label %logic.from487 +logic.from487: + br i1 %t8, label %logic.rhs488, label %logic.end489 +logic.rhs488: + %t9 = load i8, ptr %a1 + %t10 = icmp ule i8 %t9, 90 + br label %logic.rend490 +logic.rend490: + br label %logic.end489 +logic.end489: + %t11 = phi i1 [ false, %logic.from487 ], [ %t10, %logic.rend490 ] br label %logic.rend491 logic.rend491: - br label %logic.end490 -logic.end490: - %t15 = phi i1 [ true, %logic.from488 ], [ %t14, %logic.rend491 ] + br label %logic.end486 +logic.end486: + %t12 = phi i1 [ true, %logic.from484 ], [ %t11, %logic.rend491 ] + br label %logic.from492 +logic.from492: + br i1 %t12, label %logic.end494, label %logic.rhs493 +logic.rhs493: + %t13 = load i8, ptr %a1 + %t14 = icmp eq i8 %t13, 95 + br label %logic.rend495 +logic.rend495: + br label %logic.end494 +logic.end494: + %t15 = phi i1 [ true, %logic.from492 ], [ %t14, %logic.rend495 ] ret i1 %t15 } @@ -12324,17 +12350,17 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 - br label %logic.from492 -logic.from492: - br i1 %t3, label %logic.rhs493, label %logic.end494 -logic.rhs493: + br label %logic.from496 +logic.from496: + br i1 %t3, label %logic.rhs497, label %logic.end498 +logic.rhs497: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 - br label %logic.rend495 -logic.rend495: - br label %logic.end494 -logic.end494: - %t6 = phi i1 [ false, %logic.from492 ], [ %t5, %logic.rend495 ] + br label %logic.rend499 +logic.rend499: + br label %logic.end498 +logic.end498: + %t6 = phi i1 [ false, %logic.from496 ], [ %t5, %logic.rend499 ] ret i1 %t6 } @@ -12344,50 +12370,50 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = call i1 @finch.lexer.isDigit(i8 %t2) - br label %logic.from496 -logic.from496: - br i1 %t3, label %logic.end498, label %logic.rhs497 -logic.rhs497: + br label %logic.from500 +logic.from500: + br i1 %t3, label %logic.end502, label %logic.rhs501 +logic.rhs501: %t4 = load i8, ptr %a1 %t5 = icmp uge i8 %t4, 97 - br label %logic.from499 -logic.from499: - br i1 %t5, label %logic.rhs500, label %logic.end501 -logic.rhs500: + br label %logic.from503 +logic.from503: + br i1 %t5, label %logic.rhs504, label %logic.end505 +logic.rhs504: %t6 = load i8, ptr %a1 %t7 = icmp ule i8 %t6, 102 - br label %logic.rend502 -logic.rend502: - br label %logic.end501 -logic.end501: - %t8 = phi i1 [ false, %logic.from499 ], [ %t7, %logic.rend502 ] - br label %logic.rend503 -logic.rend503: - br label %logic.end498 -logic.end498: - %t9 = phi i1 [ true, %logic.from496 ], [ %t8, %logic.rend503 ] - br label %logic.from504 -logic.from504: - br i1 %t9, label %logic.end506, label %logic.rhs505 -logic.rhs505: + br label %logic.rend506 +logic.rend506: + br label %logic.end505 +logic.end505: + %t8 = phi i1 [ false, %logic.from503 ], [ %t7, %logic.rend506 ] + br label %logic.rend507 +logic.rend507: + br label %logic.end502 +logic.end502: + %t9 = phi i1 [ true, %logic.from500 ], [ %t8, %logic.rend507 ] + br label %logic.from508 +logic.from508: + br i1 %t9, label %logic.end510, label %logic.rhs509 +logic.rhs509: %t10 = load i8, ptr %a1 %t11 = icmp uge i8 %t10, 65 - br label %logic.from507 -logic.from507: - br i1 %t11, label %logic.rhs508, label %logic.end509 -logic.rhs508: + br label %logic.from511 +logic.from511: + br i1 %t11, label %logic.rhs512, label %logic.end513 +logic.rhs512: %t12 = load i8, ptr %a1 %t13 = icmp ule i8 %t12, 70 - br label %logic.rend510 -logic.rend510: - br label %logic.end509 -logic.end509: - %t14 = phi i1 [ false, %logic.from507 ], [ %t13, %logic.rend510 ] - br label %logic.rend511 -logic.rend511: - br label %logic.end506 -logic.end506: - %t15 = phi i1 [ true, %logic.from504 ], [ %t14, %logic.rend511 ] + br label %logic.rend514 +logic.rend514: + br label %logic.end513 +logic.end513: + %t14 = phi i1 [ false, %logic.from511 ], [ %t13, %logic.rend514 ] + br label %logic.rend515 +logic.rend515: + br label %logic.end510 +logic.end510: + %t15 = phi i1 [ true, %logic.from508 ], [ %t14, %logic.rend515 ] ret i1 %t15 } @@ -12454,27 +12480,27 @@ entry: %t32 = load i64, ptr %t29 %t33 = load ptr, ptr %a28 store i64 0, ptr %a34 - br label %find.cond512 -find.cond512: + br label %find.cond516 +find.cond516: %t35 = load i64, ptr %a34 %t36 = icmp slt i64 %t35, %t32 - br i1 %t36, label %find.body513, label %find.end516 -find.body513: + br i1 %t36, label %find.body517, label %find.end520 +find.body517: %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t35 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } %t30, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 - br i1 %t42, label %find.hit514, label %find.next515 -find.hit514: + br i1 %t42, label %find.hit518, label %find.next519 +find.hit518: store i64 %t35, ptr %a31 - br label %find.end516 -find.next515: + br label %find.end520 +find.next519: %t43 = add i64 %t35, 1 store i64 %t43, ptr %a34 - br label %find.cond512 -find.end516: + br label %find.cond516 +find.end520: %t44 = load i64, ptr %a31 %t45 = icmp sge i64 %t44, 0 call void @finch.drop.arr_str(ptr %a28) @@ -12521,11 +12547,11 @@ entry: store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic517, label %ok518 -panic517: + br i1 %t6, label %panic521, label %ok522 +panic521: call void @finch_panic(ptr @.str.283, i64 41, ptr @.str.284) unreachable -ok518: +ok522: %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %t7 store { ptr, i64, i64 } %t8, ptr %a10 @@ -12596,43 +12622,43 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic519, label %ok520 -panic519: + br i1 %t4, label %panic523, label %ok524 +panic523: call void @finch_panic(ptr @.str.291, i64 46, ptr @.str.292) unreachable -ok520: +ok524: %t5 = getelementptr inbounds %S.lexer.Lexer, ptr %t3, i32 0, i32 2 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic521, label %ok522 -panic521: + br i1 %t10, label %panic525, label %ok526 +panic525: call void @finch_panic(ptr @.str.293, i64 46, ptr @.str.294) unreachable -ok522: +ok526: %t11 = getelementptr inbounds %S.lexer.Lexer, ptr %t9, i32 0, i32 0 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = icmp slt i64 %t8, %t13 - br i1 %t14, label %then523, label %endif525 -then523: + br i1 %t14, label %then527, label %endif529 +then527: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic526, label %ok527 -panic526: + br i1 %t16, label %panic530, label %ok531 +panic530: call void @finch_panic(ptr @.str.295, i64 47, ptr @.str.296) unreachable -ok527: +ok531: %t17 = getelementptr inbounds %S.lexer.Lexer, ptr %t15, i32 0, i32 0 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic528, label %ok529 -panic528: + br i1 %t19, label %panic532, label %ok533 +panic532: call void @finch_panic(ptr @.str.297, i64 47, ptr @.str.298) unreachable -ok529: +ok533: %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 2 %t21 = load i64, ptr %t20 %t22 = load i64, ptr %a2 @@ -12640,16 +12666,16 @@ ok529: %t24 = load { ptr, i64, i64 }, ptr %t17 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 - br i1 %t26, label %range530, label %inrange531 -range530: + br i1 %t26, label %range534, label %inrange535 +range534: call void @finch_panic_index(ptr @.str.299, i64 47, i64 %t23, i64 %t25) unreachable -inrange531: +inrange535: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 %t29 = load i8, ptr %t28 ret i8 %t29 -endif525: +endif529: %t30 = trunc i64 0 to i8 ret i8 %t30 } @@ -12661,96 +12687,96 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic532, label %ok533 -panic532: + br i1 %t3, label %panic536, label %ok537 +panic536: call void @finch_panic(ptr @.str.300, i64 53, ptr @.str.301) unreachable -ok533: +ok537: %t4 = getelementptr inbounds %S.lexer.Lexer, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic534, label %ok535 -panic534: + br i1 %t6, label %panic538, label %ok539 +panic538: call void @finch_panic(ptr @.str.302, i64 53, ptr @.str.303) unreachable -ok535: +ok539: %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 2 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range536, label %inrange537 -range536: + br i1 %t11, label %range540, label %inrange541 +range540: call void @finch_panic_index(ptr @.str.304, i64 53, i64 %t8, i64 %t10) unreachable -inrange537: +inrange541: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 store i8 %t14, ptr %a15 %t16 = load i8, ptr %a15 %t17 = icmp eq i8 %t16, 10 - br i1 %t17, label %then538, label %else539 -then538: + br i1 %t17, label %then542, label %else543 +then542: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic541, label %ok542 -panic541: + br i1 %t19, label %panic545, label %ok546 +panic545: call void @finch_panic(ptr @.str.305, i64 55, ptr @.str.306) unreachable -ok542: +ok546: %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 3 %t21 = load i64, ptr %t20 %t22 = add i64 %t21, 1 store i64 %t22, ptr %t20 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic543, label %ok544 -panic543: + br i1 %t24, label %panic547, label %ok548 +panic547: call void @finch_panic(ptr @.str.307, i64 56, ptr @.str.308) unreachable -ok544: +ok548: %t25 = getelementptr inbounds %S.lexer.Lexer, ptr %t23, i32 0, i32 4 store i64 1, ptr %t25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic545, label %ok546 -panic545: + br i1 %t27, label %panic549, label %ok550 +panic549: call void @finch_panic(ptr @.str.309, i64 57, ptr @.str.310) unreachable -ok546: +ok550: %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 5 store i1 true, ptr %t28 - br label %endif540 -else539: + br label %endif544 +else543: %t29 = load i8, ptr %a15 %t30 = zext i8 %t29 to i64 %t31 = and i64 %t30, 192 %t32 = icmp ne i64 %t31, 128 - br i1 %t32, label %then547, label %endif549 -then547: + br i1 %t32, label %then551, label %endif553 +then551: %t33 = load ptr, ptr %a1 %t34 = icmp eq ptr %t33, null - br i1 %t34, label %panic550, label %ok551 -panic550: + br i1 %t34, label %panic554, label %ok555 +panic554: call void @finch_panic(ptr @.str.311, i64 59, ptr @.str.312) unreachable -ok551: +ok555: %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 4 %t36 = load i64, ptr %t35 %t37 = add i64 %t36, 1 store i64 %t37, ptr %t35 - br label %endif549 -endif549: - br label %endif540 -endif540: + br label %endif553 +endif553: + br label %endif544 +endif544: %t38 = load ptr, ptr %a1 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic552, label %ok553 -panic552: + br i1 %t39, label %panic556, label %ok557 +panic556: call void @finch_panic(ptr @.str.313, i64 61, ptr @.str.314) unreachable -ok553: +ok557: %t40 = getelementptr inbounds %S.lexer.Lexer, ptr %t38, i32 0, i32 2 %t41 = load i64, ptr %t40 %t42 = add i64 %t41, 1 @@ -12817,53 +12843,53 @@ entry: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic554, label %ok555 -panic554: + br i1 %t25, label %panic558, label %ok559 +panic558: call void @finch_panic(ptr @.str.331, i64 67, ptr @.str.332) unreachable -ok555: +ok559: %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 2 %t27 = load i64, ptr %t26 %t28 = add i64 %t27, 1 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic556, label %ok557 -panic556: + br i1 %t30, label %panic560, label %ok561 +panic560: call void @finch_panic(ptr @.str.333, i64 67, ptr @.str.334) unreachable -ok557: +ok561: %t31 = getelementptr inbounds %S.lexer.Lexer, ptr %t29, i32 0, i32 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t28, %t33 - br i1 %t34, label %then558, label %endif560 -then558: + br i1 %t34, label %then562, label %endif564 +then562: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic561, label %ok562 -panic561: + br i1 %t36, label %panic565, label %ok566 +panic565: call void @finch_panic(ptr @.str.335, i64 68, ptr @.str.336) unreachable -ok562: +ok566: %t37 = getelementptr inbounds %S.lexer.Lexer, ptr %t35, i32 0, i32 0 %t38 = load { ptr, i64, i64 }, ptr %t37 store { ptr, i64, i64 } %t38, ptr %a39 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic563, label %ok564 -panic563: + br i1 %t42, label %panic567, label %ok568 +panic567: call void @finch_panic(ptr @.str.338, i64 68, ptr @.str.339) unreachable -ok564: +ok568: %t43 = getelementptr inbounds %S.lexer.Lexer, ptr %t41, i32 0, i32 2 %t44 = load i64, ptr %t43 %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null - br i1 %t46, label %panic565, label %ok566 -panic565: + br i1 %t46, label %panic569, label %ok570 +panic569: call void @finch_panic(ptr @.str.340, i64 68, ptr @.str.341) unreachable -ok566: +ok570: %t47 = getelementptr inbounds %S.lexer.Lexer, ptr %t45, i32 0, i32 2 %t48 = load i64, ptr %t47 %t49 = add i64 %t48, 2 @@ -12876,65 +12902,65 @@ ok566: %t55 = load i64, ptr %t52 %t56 = load ptr, ptr %a23 store i64 0, ptr %a57 - br label %find.cond567 -find.cond567: + br label %find.cond571 +find.cond571: %t58 = load i64, ptr %a57 %t59 = icmp slt i64 %t58, %t55 - br i1 %t59, label %find.body568, label %find.end571 -find.body568: + br i1 %t59, label %find.body572, label %find.end575 +find.body572: %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i64 %t58 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } %t53, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 - br i1 %t65, label %find.hit569, label %find.next570 -find.hit569: + br i1 %t65, label %find.hit573, label %find.next574 +find.hit573: store i64 %t58, ptr %a54 - br label %find.end571 -find.next570: + br label %find.end575 +find.next574: %t66 = add i64 %t58, 1 store i64 %t66, ptr %a57 - br label %find.cond567 -find.end571: + br label %find.cond571 +find.end575: %t67 = load i64, ptr %a54 %t68 = icmp sge i64 %t67, 0 - br i1 %t68, label %then572, label %endif574 -then572: + br i1 %t68, label %then576, label %endif578 +then576: %t69 = load { ptr, i64, i64 }, ptr %a51 call void @finch.drop.arr_str(ptr %a23) ret { ptr, i64, i64 } %t69 -endif574: +endif578: call void @finch_str_drop(ptr %a51) - br label %endif560 -endif560: + br label %endif564 +endif564: store { ptr, i64, i64 } { ptr @.str.342, i64 22, i64 0 }, ptr %a70 %t71 = load ptr, ptr %a1 %t72 = icmp eq ptr %t71, null - br i1 %t72, label %panic575, label %ok576 -panic575: + br i1 %t72, label %panic579, label %ok580 +panic579: call void @finch_panic(ptr @.str.343, i64 74, ptr @.str.344) unreachable -ok576: +ok580: %t73 = getelementptr inbounds %S.lexer.Lexer, ptr %t71, i32 0, i32 0 %t74 = load { ptr, i64, i64 }, ptr %t73 store { ptr, i64, i64 } %t74, ptr %a75 %t77 = load ptr, ptr %a1 %t78 = icmp eq ptr %t77, null - br i1 %t78, label %panic577, label %ok578 -panic577: + br i1 %t78, label %panic581, label %ok582 +panic581: call void @finch_panic(ptr @.str.346, i64 74, ptr @.str.347) unreachable -ok578: +ok582: %t79 = getelementptr inbounds %S.lexer.Lexer, ptr %t77, i32 0, i32 2 %t80 = load i64, ptr %t79 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic579, label %ok580 -panic579: + br i1 %t82, label %panic583, label %ok584 +panic583: call void @finch_panic(ptr @.str.348, i64 74, ptr @.str.349) unreachable -ok580: +ok584: %t83 = getelementptr inbounds %S.lexer.Lexer, ptr %t81, i32 0, i32 2 %t84 = load i64, ptr %t83 %t85 = add i64 %t84, 1 @@ -12947,13 +12973,13 @@ ok580: store { ptr, i64, i64 } %t91, ptr %a92 %t93 = call i64 @finch_str_find(ptr %a89, ptr %a92) %t94 = icmp sge i64 %t93, 0 - br i1 %t94, label %then581, label %endif583 -then581: + br i1 %t94, label %then585, label %endif587 +then585: %t95 = load { ptr, i64, i64 }, ptr %a87 call void @finch_str_drop(ptr %a70) call void @finch.drop.arr_str(ptr %a23) ret { ptr, i64, i64 } %t95 -endif583: +endif587: call void @finch_str_drop(ptr %a87) call void @finch_str_drop(ptr %a70) call void @finch.drop.arr_str(ptr %a23) @@ -12974,75 +13000,75 @@ entry: store i8 %p1, ptr %a2 %t3 = load i8, ptr %a2 %t4 = icmp eq i8 %t3, 110 - br i1 %t4, label %then584, label %endif586 -then584: + br i1 %t4, label %then588, label %endif590 +then588: ret i8 10 -endif586: +endif590: %t5 = load i8, ptr %a2 %t6 = icmp eq i8 %t5, 116 - br i1 %t6, label %then587, label %endif589 -then587: + br i1 %t6, label %then591, label %endif593 +then591: ret i8 9 -endif589: +endif593: %t7 = load i8, ptr %a2 %t8 = icmp eq i8 %t7, 114 - br i1 %t8, label %then590, label %endif592 -then590: + br i1 %t8, label %then594, label %endif596 +then594: ret i8 13 -endif592: +endif596: %t9 = load i8, ptr %a2 %t10 = icmp eq i8 %t9, 48 - br i1 %t10, label %then593, label %endif595 -then593: + br i1 %t10, label %then597, label %endif599 +then597: %t11 = trunc i64 0 to i8 ret i8 %t11 -endif595: +endif599: %t12 = load i8, ptr %a2 %t13 = icmp eq i8 %t12, 92 - br label %logic.from596 -logic.from596: - br i1 %t13, label %logic.end598, label %logic.rhs597 -logic.rhs597: - %t14 = load i8, ptr %a2 - %t15 = icmp eq i8 %t14, 34 - br label %logic.rend599 -logic.rend599: - br label %logic.end598 -logic.end598: - %t16 = phi i1 [ true, %logic.from596 ], [ %t15, %logic.rend599 ] br label %logic.from600 logic.from600: - br i1 %t16, label %logic.end602, label %logic.rhs601 + br i1 %t13, label %logic.end602, label %logic.rhs601 logic.rhs601: - %t17 = load i8, ptr %a2 - %t18 = icmp eq i8 %t17, 39 + %t14 = load i8, ptr %a2 + %t15 = icmp eq i8 %t14, 34 br label %logic.rend603 logic.rend603: br label %logic.end602 logic.end602: - %t19 = phi i1 [ true, %logic.from600 ], [ %t18, %logic.rend603 ] - br i1 %t19, label %then604, label %endif606 -then604: + %t16 = phi i1 [ true, %logic.from600 ], [ %t15, %logic.rend603 ] + br label %logic.from604 +logic.from604: + br i1 %t16, label %logic.end606, label %logic.rhs605 +logic.rhs605: + %t17 = load i8, ptr %a2 + %t18 = icmp eq i8 %t17, 39 + br label %logic.rend607 +logic.rend607: + br label %logic.end606 +logic.end606: + %t19 = phi i1 [ true, %logic.from604 ], [ %t18, %logic.rend607 ] + br i1 %t19, label %then608, label %endif610 +then608: %t20 = load i8, ptr %a2 ret i8 %t20 -endif606: +endif610: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic607, label %ok608 -panic607: + br i1 %t23, label %panic611, label %ok612 +panic611: call void @finch_panic(ptr @.str.352, i64 97, ptr @.str.353) unreachable -ok608: +ok612: %t24 = getelementptr inbounds %S.lexer.Lexer, ptr %t22, i32 0, i32 3 %t25 = load i64, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic609, label %ok610 -panic609: + br i1 %t27, label %panic613, label %ok614 +panic613: call void @finch_panic(ptr @.str.354, i64 97, ptr @.str.355) unreachable -ok610: +ok614: %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 4 %t29 = load i64, ptr %t28 %t30 = sub i64 %t29, 1 @@ -13176,217 +13202,217 @@ entry: store %S.lexer.Lexer %t16, ptr %a17 store ptr %a17, ptr %a18 store { ptr, i64, i64 } zeroinitializer, ptr %a19 - br label %while.cond611 -while.cond611: + br label %while.cond615 +while.cond615: %t20 = load ptr, ptr %a18 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic614, label %ok615 -panic614: + br i1 %t21, label %panic618, label %ok619 +panic618: call void @finch_panic(ptr @.str.357, i64 105, ptr @.str.358) unreachable -ok615: +ok619: %t22 = getelementptr inbounds %S.lexer.Lexer, ptr %t20, i32 0, i32 2 %t23 = load i64, ptr %t22 %t24 = load ptr, ptr %a18 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic616, label %ok617 -panic616: + br i1 %t25, label %panic620, label %ok621 +panic620: call void @finch_panic(ptr @.str.359, i64 105, ptr @.str.360) unreachable -ok617: +ok621: %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 %t28 = load i64, ptr %t27 %t29 = icmp slt i64 %t23, %t28 - br i1 %t29, label %while.body612, label %while.end613 -while.body612: + br i1 %t29, label %while.body616, label %while.end617 +while.body616: %t30 = load ptr, ptr %a18 %t31 = icmp eq ptr %t30, null - br i1 %t31, label %panic618, label %ok619 -panic618: + br i1 %t31, label %panic622, label %ok623 +panic622: call void @finch_panic(ptr @.str.361, i64 106, ptr @.str.362) unreachable -ok619: +ok623: %t32 = getelementptr inbounds %S.lexer.Lexer, ptr %t30, i32 0, i32 0 %t33 = load ptr, ptr %a18 %t34 = icmp eq ptr %t33, null - br i1 %t34, label %panic620, label %ok621 -panic620: + br i1 %t34, label %panic624, label %ok625 +panic624: call void @finch_panic(ptr @.str.363, i64 106, ptr @.str.364) unreachable -ok621: +ok625: %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 2 %t36 = load i64, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %t32 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range622, label %inrange623 -range622: + br i1 %t39, label %range626, label %inrange627 +range626: call void @finch_panic_index(ptr @.str.365, i64 106, i64 %t36, i64 %t38) unreachable -inrange623: +inrange627: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds i8, ptr %t40, i64 %t36 %t42 = load i8, ptr %t41 store i8 %t42, ptr %a43 %t44 = load i8, ptr %a43 %t45 = icmp eq i8 %t44, 32 - br label %logic.from624 -logic.from624: - br i1 %t45, label %logic.end626, label %logic.rhs625 -logic.rhs625: - %t46 = load i8, ptr %a43 - %t47 = icmp eq i8 %t46, 9 - br label %logic.rend627 -logic.rend627: - br label %logic.end626 -logic.end626: - %t48 = phi i1 [ true, %logic.from624 ], [ %t47, %logic.rend627 ] br label %logic.from628 logic.from628: - br i1 %t48, label %logic.end630, label %logic.rhs629 + br i1 %t45, label %logic.end630, label %logic.rhs629 logic.rhs629: - %t49 = load i8, ptr %a43 - %t50 = icmp eq i8 %t49, 10 + %t46 = load i8, ptr %a43 + %t47 = icmp eq i8 %t46, 9 br label %logic.rend631 logic.rend631: br label %logic.end630 logic.end630: - %t51 = phi i1 [ true, %logic.from628 ], [ %t50, %logic.rend631 ] + %t48 = phi i1 [ true, %logic.from628 ], [ %t47, %logic.rend631 ] br label %logic.from632 logic.from632: - br i1 %t51, label %logic.end634, label %logic.rhs633 + br i1 %t48, label %logic.end634, label %logic.rhs633 logic.rhs633: - %t52 = load i8, ptr %a43 - %t53 = icmp eq i8 %t52, 13 + %t49 = load i8, ptr %a43 + %t50 = icmp eq i8 %t49, 10 br label %logic.rend635 logic.rend635: br label %logic.end634 logic.end634: - %t54 = phi i1 [ true, %logic.from632 ], [ %t53, %logic.rend635 ] - br i1 %t54, label %then636, label %endif638 -then636: + %t51 = phi i1 [ true, %logic.from632 ], [ %t50, %logic.rend635 ] + br label %logic.from636 +logic.from636: + br i1 %t51, label %logic.end638, label %logic.rhs637 +logic.rhs637: + %t52 = load i8, ptr %a43 + %t53 = icmp eq i8 %t52, 13 + br label %logic.rend639 +logic.rend639: + br label %logic.end638 +logic.end638: + %t54 = phi i1 [ true, %logic.from636 ], [ %t53, %logic.rend639 ] + br i1 %t54, label %then640, label %endif642 +then640: %t55 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t55) - br label %while.cond611 -endif638: + br label %while.cond615 +endif642: %t56 = load i8, ptr %a43 %t57 = icmp eq i8 %t56, 47 - br label %logic.from639 -logic.from639: - br i1 %t57, label %logic.rhs640, label %logic.end641 -logic.rhs640: + br label %logic.from643 +logic.from643: + br i1 %t57, label %logic.rhs644, label %logic.end645 +logic.rhs644: %t58 = load ptr, ptr %a18 %t59 = call i8 @finch.lexer.peek(ptr %t58, i64 1) %t60 = icmp eq i8 %t59, 47 - br label %logic.rend642 -logic.rend642: - br label %logic.end641 -logic.end641: - %t61 = phi i1 [ false, %logic.from639 ], [ %t60, %logic.rend642 ] - br i1 %t61, label %then643, label %endif645 -then643: - br label %while.cond646 -while.cond646: + br label %logic.rend646 +logic.rend646: + br label %logic.end645 +logic.end645: + %t61 = phi i1 [ false, %logic.from643 ], [ %t60, %logic.rend646 ] + br i1 %t61, label %then647, label %endif649 +then647: + br label %while.cond650 +while.cond650: %t62 = load ptr, ptr %a18 %t63 = icmp eq ptr %t62, null - br i1 %t63, label %panic649, label %ok650 -panic649: + br i1 %t63, label %panic653, label %ok654 +panic653: call void @finch_panic(ptr @.str.366, i64 112, ptr @.str.367) unreachable -ok650: +ok654: %t64 = getelementptr inbounds %S.lexer.Lexer, ptr %t62, i32 0, i32 2 %t65 = load i64, ptr %t64 %t66 = load ptr, ptr %a18 %t67 = icmp eq ptr %t66, null - br i1 %t67, label %panic651, label %ok652 -panic651: + br i1 %t67, label %panic655, label %ok656 +panic655: call void @finch_panic(ptr @.str.368, i64 112, ptr @.str.369) unreachable -ok652: +ok656: %t68 = getelementptr inbounds %S.lexer.Lexer, ptr %t66, i32 0, i32 0 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = icmp slt i64 %t65, %t70 - br label %logic.from653 -logic.from653: - br i1 %t71, label %logic.rhs654, label %logic.end655 -logic.rhs654: + br label %logic.from657 +logic.from657: + br i1 %t71, label %logic.rhs658, label %logic.end659 +logic.rhs658: %t72 = load ptr, ptr %a18 %t73 = icmp eq ptr %t72, null - br i1 %t73, label %panic656, label %ok657 -panic656: + br i1 %t73, label %panic660, label %ok661 +panic660: call void @finch_panic(ptr @.str.370, i64 112, ptr @.str.371) unreachable -ok657: +ok661: %t74 = getelementptr inbounds %S.lexer.Lexer, ptr %t72, i32 0, i32 0 %t75 = load ptr, ptr %a18 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic658, label %ok659 -panic658: + br i1 %t76, label %panic662, label %ok663 +panic662: call void @finch_panic(ptr @.str.372, i64 112, ptr @.str.373) unreachable -ok659: +ok663: %t77 = getelementptr inbounds %S.lexer.Lexer, ptr %t75, i32 0, i32 2 %t78 = load i64, ptr %t77 %t79 = load { ptr, i64, i64 }, ptr %t74 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 - br i1 %t81, label %range660, label %inrange661 -range660: + br i1 %t81, label %range664, label %inrange665 +range664: call void @finch_panic_index(ptr @.str.374, i64 112, i64 %t78, i64 %t80) unreachable -inrange661: +inrange665: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds i8, ptr %t82, i64 %t78 %t84 = load i8, ptr %t83 %t85 = icmp ne i8 %t84, 10 - br label %logic.rend662 -logic.rend662: - br label %logic.end655 -logic.end655: - %t86 = phi i1 [ false, %logic.from653 ], [ %t85, %logic.rend662 ] - br i1 %t86, label %while.body647, label %while.end648 -while.body647: + br label %logic.rend666 +logic.rend666: + br label %logic.end659 +logic.end659: + %t86 = phi i1 [ false, %logic.from657 ], [ %t85, %logic.rend666 ] + br i1 %t86, label %while.body651, label %while.end652 +while.body651: %t87 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t87) - br label %while.cond646 -while.end648: - br label %while.cond611 -endif645: + br label %while.cond650 +while.end652: + br label %while.cond615 +endif649: %t88 = load i8, ptr %a43 %t89 = icmp eq i8 %t88, 47 - br label %logic.from663 -logic.from663: - br i1 %t89, label %logic.rhs664, label %logic.end665 -logic.rhs664: + br label %logic.from667 +logic.from667: + br i1 %t89, label %logic.rhs668, label %logic.end669 +logic.rhs668: %t90 = load ptr, ptr %a18 %t91 = call i8 @finch.lexer.peek(ptr %t90, i64 1) %t92 = icmp eq i8 %t91, 42 - br label %logic.rend666 -logic.rend666: - br label %logic.end665 -logic.end665: - %t93 = phi i1 [ false, %logic.from663 ], [ %t92, %logic.rend666 ] - br i1 %t93, label %then667, label %endif669 -then667: + br label %logic.rend670 +logic.rend670: + br label %logic.end669 +logic.end669: + %t93 = phi i1 [ false, %logic.from667 ], [ %t92, %logic.rend670 ] + br i1 %t93, label %then671, label %endif673 +then671: %t94 = load ptr, ptr %a18 %t95 = icmp eq ptr %t94, null - br i1 %t95, label %panic670, label %ok671 -panic670: + br i1 %t95, label %panic674, label %ok675 +panic674: call void @finch_panic(ptr @.str.375, i64 118, ptr @.str.376) unreachable -ok671: +ok675: %t96 = getelementptr inbounds %S.lexer.Lexer, ptr %t94, i32 0, i32 3 %t97 = load i64, ptr %t96 store i64 %t97, ptr %a98 %t99 = load ptr, ptr %a18 %t100 = icmp eq ptr %t99, null - br i1 %t100, label %panic672, label %ok673 -panic672: + br i1 %t100, label %panic676, label %ok677 +panic676: call void @finch_panic(ptr @.str.377, i64 119, ptr @.str.378) unreachable -ok673: +ok677: %t101 = getelementptr inbounds %S.lexer.Lexer, ptr %t99, i32 0, i32 4 %t102 = load i64, ptr %t101 store i64 %t102, ptr %a103 @@ -13394,297 +13420,297 @@ ok673: call void @finch.lexer.advance(ptr %t104) %t105 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t105) - br label %while.cond674 -while.cond674: + br label %while.cond678 +while.cond678: %t106 = load ptr, ptr %a18 %t107 = icmp eq ptr %t106, null - br i1 %t107, label %panic677, label %ok678 -panic677: + br i1 %t107, label %panic681, label %ok682 +panic681: call void @finch_panic(ptr @.str.379, i64 122, ptr @.str.380) unreachable -ok678: +ok682: %t108 = getelementptr inbounds %S.lexer.Lexer, ptr %t106, i32 0, i32 2 %t109 = load i64, ptr %t108 %t110 = load ptr, ptr %a18 %t111 = icmp eq ptr %t110, null - br i1 %t111, label %panic679, label %ok680 -panic679: + br i1 %t111, label %panic683, label %ok684 +panic683: call void @finch_panic(ptr @.str.381, i64 122, ptr @.str.382) unreachable -ok680: +ok684: %t112 = getelementptr inbounds %S.lexer.Lexer, ptr %t110, i32 0, i32 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = icmp slt i64 %t109, %t114 - br label %logic.from681 -logic.from681: - br i1 %t115, label %logic.rhs682, label %logic.end683 -logic.rhs682: + br label %logic.from685 +logic.from685: + br i1 %t115, label %logic.rhs686, label %logic.end687 +logic.rhs686: %t116 = load ptr, ptr %a18 %t117 = icmp eq ptr %t116, null - br i1 %t117, label %panic684, label %ok685 -panic684: + br i1 %t117, label %panic688, label %ok689 +panic688: call void @finch_panic(ptr @.str.383, i64 122, ptr @.str.384) unreachable -ok685: +ok689: %t118 = getelementptr inbounds %S.lexer.Lexer, ptr %t116, i32 0, i32 0 %t119 = load ptr, ptr %a18 %t120 = icmp eq ptr %t119, null - br i1 %t120, label %panic686, label %ok687 -panic686: + br i1 %t120, label %panic690, label %ok691 +panic690: call void @finch_panic(ptr @.str.385, i64 122, ptr @.str.386) unreachable -ok687: +ok691: %t121 = getelementptr inbounds %S.lexer.Lexer, ptr %t119, i32 0, i32 2 %t122 = load i64, ptr %t121 %t123 = load { ptr, i64, i64 }, ptr %t118 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 %t122, %t124 - br i1 %t125, label %range688, label %inrange689 -range688: + br i1 %t125, label %range692, label %inrange693 +range692: call void @finch_panic_index(ptr @.str.387, i64 122, i64 %t122, i64 %t124) unreachable -inrange689: +inrange693: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds i8, ptr %t126, i64 %t122 %t128 = load i8, ptr %t127 %t129 = icmp eq i8 %t128, 42 - br label %logic.from690 -logic.from690: - br i1 %t129, label %logic.rhs691, label %logic.end692 -logic.rhs691: + br label %logic.from694 +logic.from694: + br i1 %t129, label %logic.rhs695, label %logic.end696 +logic.rhs695: %t130 = load ptr, ptr %a18 %t131 = call i8 @finch.lexer.peek(ptr %t130, i64 1) %t132 = icmp eq i8 %t131, 47 - br label %logic.rend693 -logic.rend693: - br label %logic.end692 -logic.end692: - %t133 = phi i1 [ false, %logic.from690 ], [ %t132, %logic.rend693 ] + br label %logic.rend697 +logic.rend697: + br label %logic.end696 +logic.end696: + %t133 = phi i1 [ false, %logic.from694 ], [ %t132, %logic.rend697 ] %t134 = xor i1 %t133, true - br label %logic.rend694 -logic.rend694: - br label %logic.end683 -logic.end683: - %t135 = phi i1 [ false, %logic.from681 ], [ %t134, %logic.rend694 ] - br i1 %t135, label %while.body675, label %while.end676 -while.body675: + br label %logic.rend698 +logic.rend698: + br label %logic.end687 +logic.end687: + %t135 = phi i1 [ false, %logic.from685 ], [ %t134, %logic.rend698 ] + br i1 %t135, label %while.body679, label %while.end680 +while.body679: %t136 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t136) - br label %while.cond674 -while.end676: + br label %while.cond678 +while.end680: %t137 = load ptr, ptr %a18 %t138 = icmp eq ptr %t137, null - br i1 %t138, label %panic695, label %ok696 -panic695: + br i1 %t138, label %panic699, label %ok700 +panic699: call void @finch_panic(ptr @.str.388, i64 125, ptr @.str.389) unreachable -ok696: +ok700: %t139 = getelementptr inbounds %S.lexer.Lexer, ptr %t137, i32 0, i32 2 %t140 = load i64, ptr %t139 %t141 = load ptr, ptr %a18 %t142 = icmp eq ptr %t141, null - br i1 %t142, label %panic697, label %ok698 -panic697: + br i1 %t142, label %panic701, label %ok702 +panic701: call void @finch_panic(ptr @.str.390, i64 125, ptr @.str.391) unreachable -ok698: +ok702: %t143 = getelementptr inbounds %S.lexer.Lexer, ptr %t141, i32 0, i32 0 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 %t145 = load i64, ptr %t144 %t146 = icmp sge i64 %t140, %t145 - br i1 %t146, label %then699, label %endif701 -then699: + br i1 %t146, label %then703, label %endif705 +then703: %t147 = load ptr, ptr %a18 %t148 = load i64, ptr %a98 %t149 = load i64, ptr %a103 call void @finch.lexer.fail(ptr %t147, i64 %t148, i64 %t149, { ptr, i64, i64 } { ptr @.str.392, i64 36, i64 0 }) - br label %endif701 -endif701: + br label %endif705 +endif705: %t150 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t150) %t151 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t151) - br label %while.cond611 -endif669: + br label %while.cond615 +endif673: %t152 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.393, i64 0, i64 0 }, 0 %t153 = insertvalue %S.lexer.Token %t152, { ptr, i64, i64 } { ptr @.str.394, i64 0, i64 0 }, 1 %t154 = load ptr, ptr %a18 %t155 = icmp eq ptr %t154, null - br i1 %t155, label %panic702, label %ok703 -panic702: + br i1 %t155, label %panic706, label %ok707 +panic706: call void @finch_panic(ptr @.str.395, i64 133, ptr @.str.396) unreachable -ok703: +ok707: %t156 = getelementptr inbounds %S.lexer.Lexer, ptr %t154, i32 0, i32 3 %t157 = load i64, ptr %t156 %t158 = insertvalue %S.lexer.Token %t153, i64 %t157, 2 %t159 = load ptr, ptr %a18 %t160 = icmp eq ptr %t159, null - br i1 %t160, label %panic704, label %ok705 -panic704: + br i1 %t160, label %panic708, label %ok709 +panic708: call void @finch_panic(ptr @.str.397, i64 133, ptr @.str.398) unreachable -ok705: +ok709: %t161 = getelementptr inbounds %S.lexer.Lexer, ptr %t159, i32 0, i32 4 %t162 = load i64, ptr %t161 %t163 = insertvalue %S.lexer.Token %t158, i64 %t162, 3 %t164 = load ptr, ptr %a18 %t165 = icmp eq ptr %t164, null - br i1 %t165, label %panic706, label %ok707 -panic706: + br i1 %t165, label %panic710, label %ok711 +panic710: call void @finch_panic(ptr @.str.399, i64 133, ptr @.str.400) unreachable -ok707: +ok711: %t166 = getelementptr inbounds %S.lexer.Lexer, ptr %t164, i32 0, i32 5 %t167 = load i1, ptr %t166 %t168 = insertvalue %S.lexer.Token %t163, i1 %t167, 4 store %S.lexer.Token %t168, ptr %a169 %t170 = load ptr, ptr %a18 %t171 = icmp eq ptr %t170, null - br i1 %t171, label %panic708, label %ok709 -panic708: + br i1 %t171, label %panic712, label %ok713 +panic712: call void @finch_panic(ptr @.str.401, i64 134, ptr @.str.402) unreachable -ok709: +ok713: %t172 = getelementptr inbounds %S.lexer.Lexer, ptr %t170, i32 0, i32 5 store i1 false, ptr %t172 %t173 = load ptr, ptr %a18 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic710, label %ok711 -panic710: + br i1 %t174, label %panic714, label %ok715 +panic714: call void @finch_panic(ptr @.str.403, i64 135, ptr @.str.404) unreachable -ok711: +ok715: %t175 = getelementptr inbounds %S.lexer.Lexer, ptr %t173, i32 0, i32 2 %t176 = load i64, ptr %t175 store i64 %t176, ptr %a177 %t178 = load i8, ptr %a43 %t179 = call i1 @finch.lexer.isAlpha(i8 %t178) - br i1 %t179, label %then712, label %else713 -then712: - br label %while.cond715 -while.cond715: + br i1 %t179, label %then716, label %else717 +then716: + br label %while.cond719 +while.cond719: %t180 = load ptr, ptr %a18 %t181 = icmp eq ptr %t180, null - br i1 %t181, label %panic718, label %ok719 -panic718: + br i1 %t181, label %panic722, label %ok723 +panic722: call void @finch_panic(ptr @.str.405, i64 137, ptr @.str.406) unreachable -ok719: +ok723: %t182 = getelementptr inbounds %S.lexer.Lexer, ptr %t180, i32 0, i32 2 %t183 = load i64, ptr %t182 %t184 = load ptr, ptr %a18 %t185 = icmp eq ptr %t184, null - br i1 %t185, label %panic720, label %ok721 -panic720: + br i1 %t185, label %panic724, label %ok725 +panic724: call void @finch_panic(ptr @.str.407, i64 137, ptr @.str.408) unreachable -ok721: +ok725: %t186 = getelementptr inbounds %S.lexer.Lexer, ptr %t184, i32 0, i32 0 %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1 %t188 = load i64, ptr %t187 %t189 = icmp slt i64 %t183, %t188 - br label %logic.from722 -logic.from722: - br i1 %t189, label %logic.rhs723, label %logic.end724 -logic.rhs723: + br label %logic.from726 +logic.from726: + br i1 %t189, label %logic.rhs727, label %logic.end728 +logic.rhs727: %t190 = load ptr, ptr %a18 %t191 = icmp eq ptr %t190, null - br i1 %t191, label %panic725, label %ok726 -panic725: + br i1 %t191, label %panic729, label %ok730 +panic729: call void @finch_panic(ptr @.str.409, i64 137, ptr @.str.410) unreachable -ok726: +ok730: %t192 = getelementptr inbounds %S.lexer.Lexer, ptr %t190, i32 0, i32 0 %t193 = load ptr, ptr %a18 %t194 = icmp eq ptr %t193, null - br i1 %t194, label %panic727, label %ok728 -panic727: + br i1 %t194, label %panic731, label %ok732 +panic731: call void @finch_panic(ptr @.str.411, i64 137, ptr @.str.412) unreachable -ok728: +ok732: %t195 = getelementptr inbounds %S.lexer.Lexer, ptr %t193, i32 0, i32 2 %t196 = load i64, ptr %t195 %t197 = load { ptr, i64, i64 }, ptr %t192 %t198 = extractvalue { ptr, i64, i64 } %t197, 1 %t199 = icmp uge i64 %t196, %t198 - br i1 %t199, label %range729, label %inrange730 -range729: + br i1 %t199, label %range733, label %inrange734 +range733: call void @finch_panic_index(ptr @.str.413, i64 137, i64 %t196, i64 %t198) unreachable -inrange730: +inrange734: %t200 = extractvalue { ptr, i64, i64 } %t197, 0 %t201 = getelementptr inbounds i8, ptr %t200, i64 %t196 %t202 = load i8, ptr %t201 %t203 = call i1 @finch.lexer.isAlpha(i8 %t202) - br label %logic.from731 -logic.from731: - br i1 %t203, label %logic.end733, label %logic.rhs732 -logic.rhs732: + br label %logic.from735 +logic.from735: + br i1 %t203, label %logic.end737, label %logic.rhs736 +logic.rhs736: %t204 = load ptr, ptr %a18 %t205 = icmp eq ptr %t204, null - br i1 %t205, label %panic734, label %ok735 -panic734: + br i1 %t205, label %panic738, label %ok739 +panic738: call void @finch_panic(ptr @.str.414, i64 137, ptr @.str.415) unreachable -ok735: +ok739: %t206 = getelementptr inbounds %S.lexer.Lexer, ptr %t204, i32 0, i32 0 %t207 = load ptr, ptr %a18 %t208 = icmp eq ptr %t207, null - br i1 %t208, label %panic736, label %ok737 -panic736: + br i1 %t208, label %panic740, label %ok741 +panic740: call void @finch_panic(ptr @.str.416, i64 137, ptr @.str.417) unreachable -ok737: +ok741: %t209 = getelementptr inbounds %S.lexer.Lexer, ptr %t207, i32 0, i32 2 %t210 = load i64, ptr %t209 %t211 = load { ptr, i64, i64 }, ptr %t206 %t212 = extractvalue { ptr, i64, i64 } %t211, 1 %t213 = icmp uge i64 %t210, %t212 - br i1 %t213, label %range738, label %inrange739 -range738: + br i1 %t213, label %range742, label %inrange743 +range742: call void @finch_panic_index(ptr @.str.418, i64 137, i64 %t210, i64 %t212) unreachable -inrange739: +inrange743: %t214 = extractvalue { ptr, i64, i64 } %t211, 0 %t215 = getelementptr inbounds i8, ptr %t214, i64 %t210 %t216 = load i8, ptr %t215 %t217 = call i1 @finch.lexer.isDigit(i8 %t216) - br label %logic.rend740 -logic.rend740: - br label %logic.end733 -logic.end733: - %t218 = phi i1 [ true, %logic.from731 ], [ %t217, %logic.rend740 ] - br label %logic.rend741 -logic.rend741: - br label %logic.end724 -logic.end724: - %t219 = phi i1 [ false, %logic.from722 ], [ %t218, %logic.rend741 ] - br i1 %t219, label %while.body716, label %while.end717 -while.body716: + br label %logic.rend744 +logic.rend744: + br label %logic.end737 +logic.end737: + %t218 = phi i1 [ true, %logic.from735 ], [ %t217, %logic.rend744 ] + br label %logic.rend745 +logic.rend745: + br label %logic.end728 +logic.end728: + %t219 = phi i1 [ false, %logic.from726 ], [ %t218, %logic.rend745 ] + br i1 %t219, label %while.body720, label %while.end721 +while.body720: %t220 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t220) - br label %while.cond715 -while.end717: + br label %while.cond719 +while.end721: %t221 = load ptr, ptr %a18 %t222 = icmp eq ptr %t221, null - br i1 %t222, label %panic742, label %ok743 -panic742: + br i1 %t222, label %panic746, label %ok747 +panic746: call void @finch_panic(ptr @.str.419, i64 140, ptr @.str.420) unreachable -ok743: +ok747: %t223 = getelementptr inbounds %S.lexer.Lexer, ptr %t221, i32 0, i32 0 %t224 = load { ptr, i64, i64 }, ptr %t223 store { ptr, i64, i64 } %t224, ptr %a225 %t227 = load i64, ptr %a177 %t228 = load ptr, ptr %a18 %t229 = icmp eq ptr %t228, null - br i1 %t229, label %panic744, label %ok745 -panic744: + br i1 %t229, label %panic748, label %ok749 +panic748: call void @finch_panic(ptr @.str.422, i64 140, ptr @.str.423) unreachable -ok745: +ok749: %t230 = getelementptr inbounds %S.lexer.Lexer, ptr %t228, i32 0, i32 2 %t231 = load i64, ptr %t230 call void @finch_str_sub(ptr %a226, ptr %a225, i64 %t227, i64 %t231, ptr @.str.421, i64 140) @@ -13702,8 +13728,8 @@ ok745: %t239 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = call i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %t240) - br i1 %t241, label %then746, label %endif748 -then746: + br i1 %t241, label %then750, label %endif752 +then750: %t242 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t243 = load { ptr, i64, i64 }, ptr %t242 %t244 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 @@ -13714,14 +13740,14 @@ then746: store { ptr, i64, i64 } %t247, ptr %t244 store { ptr, i64, i64 } %t248, ptr %a249 call void @finch_str_drop(ptr %a249) - br label %endif748 -endif748: - br label %endif714 -else713: + br label %endif752 +endif752: + br label %endif718 +else717: %t250 = load i8, ptr %a43 %t251 = call i1 @finch.lexer.isDigit(i8 %t250) - br i1 %t251, label %then749, label %else750 -then749: + br i1 %t251, label %then753, label %else754 +then753: %t252 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t253 = load { ptr, i64, i64 }, ptr %t252 store { ptr, i64, i64 } { ptr @.str.425, i64 3, i64 0 }, ptr %t252 @@ -13729,263 +13755,263 @@ then749: call void @finch_str_drop(ptr %a254) %t255 = load i8, ptr %a43 %t256 = icmp eq i8 %t255, 48 - br label %logic.from752 -logic.from752: - br i1 %t256, label %logic.rhs753, label %logic.end754 -logic.rhs753: + br label %logic.from756 +logic.from756: + br i1 %t256, label %logic.rhs757, label %logic.end758 +logic.rhs757: %t257 = load ptr, ptr %a18 %t258 = call i8 @finch.lexer.peek(ptr %t257, i64 1) %t259 = icmp eq i8 %t258, 120 - br label %logic.from755 -logic.from755: - br i1 %t259, label %logic.end757, label %logic.rhs756 -logic.rhs756: + br label %logic.from759 +logic.from759: + br i1 %t259, label %logic.end761, label %logic.rhs760 +logic.rhs760: %t260 = load ptr, ptr %a18 %t261 = call i8 @finch.lexer.peek(ptr %t260, i64 1) %t262 = icmp eq i8 %t261, 88 - br label %logic.rend758 -logic.rend758: - br label %logic.end757 -logic.end757: - %t263 = phi i1 [ true, %logic.from755 ], [ %t262, %logic.rend758 ] - br label %logic.rend759 -logic.rend759: - br label %logic.end754 -logic.end754: - %t264 = phi i1 [ false, %logic.from752 ], [ %t263, %logic.rend759 ] - br i1 %t264, label %then760, label %else761 -then760: + br label %logic.rend762 +logic.rend762: + br label %logic.end761 +logic.end761: + %t263 = phi i1 [ true, %logic.from759 ], [ %t262, %logic.rend762 ] + br label %logic.rend763 +logic.rend763: + br label %logic.end758 +logic.end758: + %t264 = phi i1 [ false, %logic.from756 ], [ %t263, %logic.rend763 ] + br i1 %t264, label %then764, label %else765 +then764: %t265 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t265) %t266 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t266) - br label %while.cond763 -while.cond763: + br label %while.cond767 +while.cond767: %t267 = load ptr, ptr %a18 %t268 = icmp eq ptr %t267, null - br i1 %t268, label %panic766, label %ok767 -panic766: + br i1 %t268, label %panic770, label %ok771 +panic770: call void @finch_panic(ptr @.str.426, i64 150, ptr @.str.427) unreachable -ok767: +ok771: %t269 = getelementptr inbounds %S.lexer.Lexer, ptr %t267, i32 0, i32 2 %t270 = load i64, ptr %t269 %t271 = load ptr, ptr %a18 %t272 = icmp eq ptr %t271, null - br i1 %t272, label %panic768, label %ok769 -panic768: + br i1 %t272, label %panic772, label %ok773 +panic772: call void @finch_panic(ptr @.str.428, i64 150, ptr @.str.429) unreachable -ok769: +ok773: %t273 = getelementptr inbounds %S.lexer.Lexer, ptr %t271, i32 0, i32 0 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 %t275 = load i64, ptr %t274 %t276 = icmp slt i64 %t270, %t275 - br label %logic.from770 -logic.from770: - br i1 %t276, label %logic.rhs771, label %logic.end772 -logic.rhs771: + br label %logic.from774 +logic.from774: + br i1 %t276, label %logic.rhs775, label %logic.end776 +logic.rhs775: %t277 = load ptr, ptr %a18 %t278 = icmp eq ptr %t277, null - br i1 %t278, label %panic773, label %ok774 -panic773: + br i1 %t278, label %panic777, label %ok778 +panic777: call void @finch_panic(ptr @.str.430, i64 150, ptr @.str.431) unreachable -ok774: +ok778: %t279 = getelementptr inbounds %S.lexer.Lexer, ptr %t277, i32 0, i32 0 %t280 = load ptr, ptr %a18 %t281 = icmp eq ptr %t280, null - br i1 %t281, label %panic775, label %ok776 -panic775: + br i1 %t281, label %panic779, label %ok780 +panic779: call void @finch_panic(ptr @.str.432, i64 150, ptr @.str.433) unreachable -ok776: +ok780: %t282 = getelementptr inbounds %S.lexer.Lexer, ptr %t280, i32 0, i32 2 %t283 = load i64, ptr %t282 %t284 = load { ptr, i64, i64 }, ptr %t279 %t285 = extractvalue { ptr, i64, i64 } %t284, 1 %t286 = icmp uge i64 %t283, %t285 - br i1 %t286, label %range777, label %inrange778 -range777: + br i1 %t286, label %range781, label %inrange782 +range781: call void @finch_panic_index(ptr @.str.434, i64 150, i64 %t283, i64 %t285) unreachable -inrange778: +inrange782: %t287 = extractvalue { ptr, i64, i64 } %t284, 0 %t288 = getelementptr inbounds i8, ptr %t287, i64 %t283 %t289 = load i8, ptr %t288 %t290 = call i1 @finch.lexer.isHex(i8 %t289) - br label %logic.from779 -logic.from779: - br i1 %t290, label %logic.end781, label %logic.rhs780 -logic.rhs780: + br label %logic.from783 +logic.from783: + br i1 %t290, label %logic.end785, label %logic.rhs784 +logic.rhs784: %t291 = load ptr, ptr %a18 %t292 = icmp eq ptr %t291, null - br i1 %t292, label %panic782, label %ok783 -panic782: + br i1 %t292, label %panic786, label %ok787 +panic786: call void @finch_panic(ptr @.str.435, i64 150, ptr @.str.436) unreachable -ok783: +ok787: %t293 = getelementptr inbounds %S.lexer.Lexer, ptr %t291, i32 0, i32 0 %t294 = load ptr, ptr %a18 %t295 = icmp eq ptr %t294, null - br i1 %t295, label %panic784, label %ok785 -panic784: + br i1 %t295, label %panic788, label %ok789 +panic788: call void @finch_panic(ptr @.str.437, i64 150, ptr @.str.438) unreachable -ok785: +ok789: %t296 = getelementptr inbounds %S.lexer.Lexer, ptr %t294, i32 0, i32 2 %t297 = load i64, ptr %t296 %t298 = load { ptr, i64, i64 }, ptr %t293 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 %t297, %t299 - br i1 %t300, label %range786, label %inrange787 -range786: + br i1 %t300, label %range790, label %inrange791 +range790: call void @finch_panic_index(ptr @.str.439, i64 150, i64 %t297, i64 %t299) unreachable -inrange787: +inrange791: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds i8, ptr %t301, i64 %t297 %t303 = load i8, ptr %t302 %t304 = icmp eq i8 %t303, 95 - br label %logic.rend788 -logic.rend788: - br label %logic.end781 -logic.end781: - %t305 = phi i1 [ true, %logic.from779 ], [ %t304, %logic.rend788 ] - br label %logic.rend789 -logic.rend789: - br label %logic.end772 -logic.end772: - %t306 = phi i1 [ false, %logic.from770 ], [ %t305, %logic.rend789 ] - br i1 %t306, label %while.body764, label %while.end765 -while.body764: + br label %logic.rend792 +logic.rend792: + br label %logic.end785 +logic.end785: + %t305 = phi i1 [ true, %logic.from783 ], [ %t304, %logic.rend792 ] + br label %logic.rend793 +logic.rend793: + br label %logic.end776 +logic.end776: + %t306 = phi i1 [ false, %logic.from774 ], [ %t305, %logic.rend793 ] + br i1 %t306, label %while.body768, label %while.end769 +while.body768: %t307 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t307) - br label %while.cond763 -while.end765: - br label %endif762 -else761: - br label %while.cond790 -while.cond790: + br label %while.cond767 +while.end769: + br label %endif766 +else765: + br label %while.cond794 +while.cond794: %t308 = load ptr, ptr %a18 %t309 = icmp eq ptr %t308, null - br i1 %t309, label %panic793, label %ok794 -panic793: + br i1 %t309, label %panic797, label %ok798 +panic797: call void @finch_panic(ptr @.str.440, i64 154, ptr @.str.441) unreachable -ok794: +ok798: %t310 = getelementptr inbounds %S.lexer.Lexer, ptr %t308, i32 0, i32 2 %t311 = load i64, ptr %t310 %t312 = load ptr, ptr %a18 %t313 = icmp eq ptr %t312, null - br i1 %t313, label %panic795, label %ok796 -panic795: + br i1 %t313, label %panic799, label %ok800 +panic799: call void @finch_panic(ptr @.str.442, i64 154, ptr @.str.443) unreachable -ok796: +ok800: %t314 = getelementptr inbounds %S.lexer.Lexer, ptr %t312, i32 0, i32 0 %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 %t316 = load i64, ptr %t315 %t317 = icmp slt i64 %t311, %t316 - br label %logic.from797 -logic.from797: - br i1 %t317, label %logic.rhs798, label %logic.end799 -logic.rhs798: + br label %logic.from801 +logic.from801: + br i1 %t317, label %logic.rhs802, label %logic.end803 +logic.rhs802: %t318 = load ptr, ptr %a18 %t319 = icmp eq ptr %t318, null - br i1 %t319, label %panic800, label %ok801 -panic800: + br i1 %t319, label %panic804, label %ok805 +panic804: call void @finch_panic(ptr @.str.444, i64 154, ptr @.str.445) unreachable -ok801: +ok805: %t320 = getelementptr inbounds %S.lexer.Lexer, ptr %t318, i32 0, i32 0 %t321 = load ptr, ptr %a18 %t322 = icmp eq ptr %t321, null - br i1 %t322, label %panic802, label %ok803 -panic802: + br i1 %t322, label %panic806, label %ok807 +panic806: call void @finch_panic(ptr @.str.446, i64 154, ptr @.str.447) unreachable -ok803: +ok807: %t323 = getelementptr inbounds %S.lexer.Lexer, ptr %t321, i32 0, i32 2 %t324 = load i64, ptr %t323 %t325 = load { ptr, i64, i64 }, ptr %t320 %t326 = extractvalue { ptr, i64, i64 } %t325, 1 %t327 = icmp uge i64 %t324, %t326 - br i1 %t327, label %range804, label %inrange805 -range804: + br i1 %t327, label %range808, label %inrange809 +range808: call void @finch_panic_index(ptr @.str.448, i64 154, i64 %t324, i64 %t326) unreachable -inrange805: +inrange809: %t328 = extractvalue { ptr, i64, i64 } %t325, 0 %t329 = getelementptr inbounds i8, ptr %t328, i64 %t324 %t330 = load i8, ptr %t329 %t331 = call i1 @finch.lexer.isDigit(i8 %t330) - br label %logic.from806 -logic.from806: - br i1 %t331, label %logic.end808, label %logic.rhs807 -logic.rhs807: + br label %logic.from810 +logic.from810: + br i1 %t331, label %logic.end812, label %logic.rhs811 +logic.rhs811: %t332 = load ptr, ptr %a18 %t333 = icmp eq ptr %t332, null - br i1 %t333, label %panic809, label %ok810 -panic809: + br i1 %t333, label %panic813, label %ok814 +panic813: call void @finch_panic(ptr @.str.449, i64 154, ptr @.str.450) unreachable -ok810: +ok814: %t334 = getelementptr inbounds %S.lexer.Lexer, ptr %t332, i32 0, i32 0 %t335 = load ptr, ptr %a18 %t336 = icmp eq ptr %t335, null - br i1 %t336, label %panic811, label %ok812 -panic811: + br i1 %t336, label %panic815, label %ok816 +panic815: call void @finch_panic(ptr @.str.451, i64 154, ptr @.str.452) unreachable -ok812: +ok816: %t337 = getelementptr inbounds %S.lexer.Lexer, ptr %t335, i32 0, i32 2 %t338 = load i64, ptr %t337 %t339 = load { ptr, i64, i64 }, ptr %t334 %t340 = extractvalue { ptr, i64, i64 } %t339, 1 %t341 = icmp uge i64 %t338, %t340 - br i1 %t341, label %range813, label %inrange814 -range813: + br i1 %t341, label %range817, label %inrange818 +range817: call void @finch_panic_index(ptr @.str.453, i64 154, i64 %t338, i64 %t340) unreachable -inrange814: +inrange818: %t342 = extractvalue { ptr, i64, i64 } %t339, 0 %t343 = getelementptr inbounds i8, ptr %t342, i64 %t338 %t344 = load i8, ptr %t343 %t345 = icmp eq i8 %t344, 95 - br label %logic.rend815 -logic.rend815: - br label %logic.end808 -logic.end808: - %t346 = phi i1 [ true, %logic.from806 ], [ %t345, %logic.rend815 ] - br label %logic.rend816 -logic.rend816: - br label %logic.end799 -logic.end799: - %t347 = phi i1 [ false, %logic.from797 ], [ %t346, %logic.rend816 ] - br i1 %t347, label %while.body791, label %while.end792 -while.body791: + br label %logic.rend819 +logic.rend819: + br label %logic.end812 +logic.end812: + %t346 = phi i1 [ true, %logic.from810 ], [ %t345, %logic.rend819 ] + br label %logic.rend820 +logic.rend820: + br label %logic.end803 +logic.end803: + %t347 = phi i1 [ false, %logic.from801 ], [ %t346, %logic.rend820 ] + br i1 %t347, label %while.body795, label %while.end796 +while.body795: %t348 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t348) - br label %while.cond790 -while.end792: + br label %while.cond794 +while.end796: %t349 = load ptr, ptr %a18 %t350 = call i8 @finch.lexer.peek(ptr %t349, i64 0) %t351 = icmp eq i8 %t350, 46 - br label %logic.from817 -logic.from817: - br i1 %t351, label %logic.rhs818, label %logic.end819 -logic.rhs818: + br label %logic.from821 +logic.from821: + br i1 %t351, label %logic.rhs822, label %logic.end823 +logic.rhs822: %t352 = load ptr, ptr %a18 %t353 = call i8 @finch.lexer.peek(ptr %t352, i64 1) %t354 = call i1 @finch.lexer.isDigit(i8 %t353) - br label %logic.rend820 -logic.rend820: - br label %logic.end819 -logic.end819: - %t355 = phi i1 [ false, %logic.from817 ], [ %t354, %logic.rend820 ] - br i1 %t355, label %then821, label %endif823 -then821: + br label %logic.rend824 +logic.rend824: + br label %logic.end823 +logic.end823: + %t355 = phi i1 [ false, %logic.from821 ], [ %t354, %logic.rend824 ] + br i1 %t355, label %then825, label %endif827 +then825: %t356 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t357 = load { ptr, i64, i64 }, ptr %t356 store { ptr, i64, i64 } { ptr @.str.454, i64 5, i64 0 }, ptr %t356 @@ -13993,132 +14019,132 @@ then821: call void @finch_str_drop(ptr %a358) %t359 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t359) - br label %while.cond824 -while.cond824: + br label %while.cond828 +while.cond828: %t360 = load ptr, ptr %a18 %t361 = icmp eq ptr %t360, null - br i1 %t361, label %panic827, label %ok828 -panic827: + br i1 %t361, label %panic831, label %ok832 +panic831: call void @finch_panic(ptr @.str.455, i64 160, ptr @.str.456) unreachable -ok828: +ok832: %t362 = getelementptr inbounds %S.lexer.Lexer, ptr %t360, i32 0, i32 2 %t363 = load i64, ptr %t362 %t364 = load ptr, ptr %a18 %t365 = icmp eq ptr %t364, null - br i1 %t365, label %panic829, label %ok830 -panic829: + br i1 %t365, label %panic833, label %ok834 +panic833: call void @finch_panic(ptr @.str.457, i64 160, ptr @.str.458) unreachable -ok830: +ok834: %t366 = getelementptr inbounds %S.lexer.Lexer, ptr %t364, i32 0, i32 0 %t367 = getelementptr inbounds { ptr, i64, i64 }, ptr %t366, i32 0, i32 1 %t368 = load i64, ptr %t367 %t369 = icmp slt i64 %t363, %t368 - br label %logic.from831 -logic.from831: - br i1 %t369, label %logic.rhs832, label %logic.end833 -logic.rhs832: + br label %logic.from835 +logic.from835: + br i1 %t369, label %logic.rhs836, label %logic.end837 +logic.rhs836: %t370 = load ptr, ptr %a18 %t371 = icmp eq ptr %t370, null - br i1 %t371, label %panic834, label %ok835 -panic834: + br i1 %t371, label %panic838, label %ok839 +panic838: call void @finch_panic(ptr @.str.459, i64 160, ptr @.str.460) unreachable -ok835: +ok839: %t372 = getelementptr inbounds %S.lexer.Lexer, ptr %t370, i32 0, i32 0 %t373 = load ptr, ptr %a18 %t374 = icmp eq ptr %t373, null - br i1 %t374, label %panic836, label %ok837 -panic836: + br i1 %t374, label %panic840, label %ok841 +panic840: call void @finch_panic(ptr @.str.461, i64 160, ptr @.str.462) unreachable -ok837: +ok841: %t375 = getelementptr inbounds %S.lexer.Lexer, ptr %t373, i32 0, i32 2 %t376 = load i64, ptr %t375 %t377 = load { ptr, i64, i64 }, ptr %t372 %t378 = extractvalue { ptr, i64, i64 } %t377, 1 %t379 = icmp uge i64 %t376, %t378 - br i1 %t379, label %range838, label %inrange839 -range838: + br i1 %t379, label %range842, label %inrange843 +range842: call void @finch_panic_index(ptr @.str.463, i64 160, i64 %t376, i64 %t378) unreachable -inrange839: +inrange843: %t380 = extractvalue { ptr, i64, i64 } %t377, 0 %t381 = getelementptr inbounds i8, ptr %t380, i64 %t376 %t382 = load i8, ptr %t381 %t383 = call i1 @finch.lexer.isDigit(i8 %t382) - br label %logic.from840 -logic.from840: - br i1 %t383, label %logic.end842, label %logic.rhs841 -logic.rhs841: + br label %logic.from844 +logic.from844: + br i1 %t383, label %logic.end846, label %logic.rhs845 +logic.rhs845: %t384 = load ptr, ptr %a18 %t385 = icmp eq ptr %t384, null - br i1 %t385, label %panic843, label %ok844 -panic843: + br i1 %t385, label %panic847, label %ok848 +panic847: call void @finch_panic(ptr @.str.464, i64 160, ptr @.str.465) unreachable -ok844: +ok848: %t386 = getelementptr inbounds %S.lexer.Lexer, ptr %t384, i32 0, i32 0 %t387 = load ptr, ptr %a18 %t388 = icmp eq ptr %t387, null - br i1 %t388, label %panic845, label %ok846 -panic845: + br i1 %t388, label %panic849, label %ok850 +panic849: call void @finch_panic(ptr @.str.466, i64 160, ptr @.str.467) unreachable -ok846: +ok850: %t389 = getelementptr inbounds %S.lexer.Lexer, ptr %t387, i32 0, i32 2 %t390 = load i64, ptr %t389 %t391 = load { ptr, i64, i64 }, ptr %t386 %t392 = extractvalue { ptr, i64, i64 } %t391, 1 %t393 = icmp uge i64 %t390, %t392 - br i1 %t393, label %range847, label %inrange848 -range847: + br i1 %t393, label %range851, label %inrange852 +range851: call void @finch_panic_index(ptr @.str.468, i64 160, i64 %t390, i64 %t392) unreachable -inrange848: +inrange852: %t394 = extractvalue { ptr, i64, i64 } %t391, 0 %t395 = getelementptr inbounds i8, ptr %t394, i64 %t390 %t396 = load i8, ptr %t395 %t397 = icmp eq i8 %t396, 95 - br label %logic.rend849 -logic.rend849: - br label %logic.end842 -logic.end842: - %t398 = phi i1 [ true, %logic.from840 ], [ %t397, %logic.rend849 ] - br label %logic.rend850 -logic.rend850: - br label %logic.end833 -logic.end833: - %t399 = phi i1 [ false, %logic.from831 ], [ %t398, %logic.rend850 ] - br i1 %t399, label %while.body825, label %while.end826 -while.body825: + br label %logic.rend853 +logic.rend853: + br label %logic.end846 +logic.end846: + %t398 = phi i1 [ true, %logic.from844 ], [ %t397, %logic.rend853 ] + br label %logic.rend854 +logic.rend854: + br label %logic.end837 +logic.end837: + %t399 = phi i1 [ false, %logic.from835 ], [ %t398, %logic.rend854 ] + br i1 %t399, label %while.body829, label %while.end830 +while.body829: %t400 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t400) - br label %while.cond824 -while.end826: - br label %endif823 -endif823: - br label %endif762 -endif762: + br label %while.cond828 +while.end830: + br label %endif827 +endif827: + br label %endif766 +endif766: %t401 = load ptr, ptr %a18 %t402 = icmp eq ptr %t401, null - br i1 %t402, label %panic851, label %ok852 -panic851: + br i1 %t402, label %panic855, label %ok856 +panic855: call void @finch_panic(ptr @.str.469, i64 165, ptr @.str.470) unreachable -ok852: +ok856: %t403 = getelementptr inbounds %S.lexer.Lexer, ptr %t401, i32 0, i32 0 %t404 = load { ptr, i64, i64 }, ptr %t403 store { ptr, i64, i64 } %t404, ptr %a405 %t407 = load i64, ptr %a177 %t408 = load ptr, ptr %a18 %t409 = icmp eq ptr %t408, null - br i1 %t409, label %panic853, label %ok854 -panic853: + br i1 %t409, label %panic857, label %ok858 +panic857: call void @finch_panic(ptr @.str.472, i64 165, ptr @.str.473) unreachable -ok854: +ok858: %t410 = getelementptr inbounds %S.lexer.Lexer, ptr %t408, i32 0, i32 2 %t411 = load i64, ptr %t410 call void @finch_str_sub(ptr %a406, ptr %a405, i64 %t407, i64 %t411, ptr @.str.471, i64 165) @@ -14135,23 +14161,23 @@ ok854: store { ptr, i64, i64 } %t417, ptr %t419 store { ptr, i64, i64 } %t420, ptr %a421 call void @finch_str_drop(ptr %a421) - br label %endif751 -else750: + br label %endif755 +else754: %t422 = load i8, ptr %a43 %t423 = icmp eq i8 %t422, 34 - br label %logic.from855 -logic.from855: - br i1 %t423, label %logic.end857, label %logic.rhs856 -logic.rhs856: + br label %logic.from859 +logic.from859: + br i1 %t423, label %logic.end861, label %logic.rhs860 +logic.rhs860: %t424 = load i8, ptr %a43 %t425 = icmp eq i8 %t424, 39 - br label %logic.rend858 -logic.rend858: - br label %logic.end857 -logic.end857: - %t426 = phi i1 [ true, %logic.from855 ], [ %t425, %logic.rend858 ] - br i1 %t426, label %then859, label %else860 -then859: + br label %logic.rend862 +logic.rend862: + br label %logic.end861 +logic.end861: + %t426 = phi i1 [ true, %logic.from859 ], [ %t425, %logic.rend862 ] + br i1 %t426, label %then863, label %else864 +then863: %t427 = load i8, ptr %a43 store i8 %t427, ptr %a428 %t429 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 @@ -14161,64 +14187,64 @@ then859: call void @finch_str_drop(ptr %a431) %t432 = load i8, ptr %a428 %t433 = icmp eq i8 %t432, 39 - br i1 %t433, label %then862, label %endif864 -then862: + br i1 %t433, label %then866, label %endif868 +then866: %t434 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 %t435 = load { ptr, i64, i64 }, ptr %t434 store { ptr, i64, i64 } { ptr @.str.478, i64 4, i64 0 }, ptr %t434 store { ptr, i64, i64 } %t435, ptr %a436 call void @finch_str_drop(ptr %a436) - br label %endif864 -endif864: + br label %endif868 +endif868: %t437 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t437) store { ptr, i64, i64 } zeroinitializer, ptr %a438 - br label %while.cond865 -while.cond865: + br label %while.cond869 +while.cond869: %t439 = load ptr, ptr %a18 %t440 = call i8 @finch.lexer.peek(ptr %t439, i64 0) %t441 = load i8, ptr %a428 %t442 = icmp ne i8 %t440, %t441 - br i1 %t442, label %while.body866, label %while.end867 -while.body866: + br i1 %t442, label %while.body870, label %while.end871 +while.body870: %t443 = load ptr, ptr %a18 %t444 = call i8 @finch.lexer.peek(ptr %t443, i64 0) %t445 = trunc i64 0 to i8 %t446 = icmp eq i8 %t444, %t445 - br label %logic.from868 -logic.from868: - br i1 %t446, label %logic.end870, label %logic.rhs869 -logic.rhs869: + br label %logic.from872 +logic.from872: + br i1 %t446, label %logic.end874, label %logic.rhs873 +logic.rhs873: %t447 = load ptr, ptr %a18 %t448 = call i8 @finch.lexer.peek(ptr %t447, i64 0) %t449 = icmp eq i8 %t448, 10 - br label %logic.rend871 -logic.rend871: - br label %logic.end870 -logic.end870: - %t450 = phi i1 [ true, %logic.from868 ], [ %t449, %logic.rend871 ] - br i1 %t450, label %then872, label %endif874 -then872: + br label %logic.rend875 +logic.rend875: + br label %logic.end874 +logic.end874: + %t450 = phi i1 [ true, %logic.from872 ], [ %t449, %logic.rend875 ] + br i1 %t450, label %then876, label %endif878 +then876: %t451 = load i8, ptr %a428 %t452 = icmp eq i8 %t451, 34 - br i1 %t452, label %then875, label %endif877 -then875: + br i1 %t452, label %then879, label %endif881 +then879: %t453 = load ptr, ptr %a18 %t454 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t455 = load i64, ptr %t454 %t456 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t457 = load i64, ptr %t456 call void @finch.lexer.fail(ptr %t453, i64 %t455, i64 %t457, { ptr, i64, i64 } { ptr @.str.479, i64 34, i64 0 }) - br label %endif877 -endif877: + br label %endif881 +endif881: %t458 = load ptr, ptr %a18 %t459 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t460 = load i64, ptr %t459 %t461 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t462 = load i64, ptr %t461 call void @finch.lexer.fail(ptr %t458, i64 %t460, i64 %t462, { ptr, i64, i64 } { ptr @.str.480, i64 32, i64 0 }) - br label %endif874 -endif874: + br label %endif878 +endif878: %t463 = load ptr, ptr %a18 %t464 = call i8 @finch.lexer.peek(ptr %t463, i64 0) store i8 %t464, ptr %a465 @@ -14226,8 +14252,8 @@ endif874: call void @finch.lexer.advance(ptr %t466) %t467 = load i8, ptr %a465 %t468 = icmp eq i8 %t467, 92 - br i1 %t468, label %then878, label %endif880 -then878: + br i1 %t468, label %then882, label %endif884 +then882: %t469 = load ptr, ptr %a18 %t470 = call i8 @finch.lexer.peek(ptr %t469, i64 0) store i8 %t470, ptr %a471 @@ -14237,8 +14263,8 @@ then878: %t474 = load i8, ptr %a471 %t475 = call i8 @finch.lexer.escape(ptr %t473, i8 %t474) store i8 %t475, ptr %a465 - br label %endif880 -endif880: + br label %endif884 +endif884: %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 %t477 = load i8, ptr %a465 call void @finch_str_from_char(ptr %a478, i8 signext %t477) @@ -14250,8 +14276,8 @@ endif880: %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i64 %t480 store { ptr, i64, i64 } %t479, ptr %t483 store i64 %t481, ptr %t476 - br label %while.cond865 -while.end867: + br label %while.cond869 +while.end871: %t484 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t484) %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 @@ -14265,84 +14291,84 @@ while.end867: call void @finch_str_drop(ptr %a491) %t492 = load i8, ptr %a428 %t493 = icmp eq i8 %t492, 39 - br label %logic.from881 -logic.from881: - br i1 %t493, label %logic.rhs882, label %logic.end883 -logic.rhs882: + br label %logic.from885 +logic.from885: + br i1 %t493, label %logic.rhs886, label %logic.end887 +logic.rhs886: %t494 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i32 0, i32 1 %t496 = load i64, ptr %t495 %t497 = icmp ne i64 %t496, 1 - br label %logic.rend884 -logic.rend884: - br label %logic.end883 -logic.end883: - %t498 = phi i1 [ false, %logic.from881 ], [ %t497, %logic.rend884 ] - br i1 %t498, label %then885, label %endif887 -then885: + br label %logic.rend888 +logic.rend888: + br label %logic.end887 +logic.end887: + %t498 = phi i1 [ false, %logic.from885 ], [ %t497, %logic.rend888 ] + br i1 %t498, label %then889, label %endif891 +then889: %t499 = load ptr, ptr %a18 %t500 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t501 = load i64, ptr %t500 %t502 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 %t503 = load i64, ptr %t502 call void @finch.lexer.fail(ptr %t499, i64 %t501, i64 %t503, { ptr, i64, i64 } { ptr @.str.482, i64 44, i64 0 }) - br label %endif887 -endif887: + br label %endif891 +endif891: call void @finch.drop.arr_str(ptr %a438) - br label %endif861 -else860: + br label %endif865 +else864: %t504 = load ptr, ptr %a18 %t505 = call { ptr, i64, i64 } @finch.lexer.operator(ptr %t504) store { ptr, i64, i64 } %t505, ptr %a506 %t507 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 %t508 = load i64, ptr %t507 %t509 = icmp eq i64 %t508, 0 - br i1 %t509, label %then888, label %endif890 -then888: + br i1 %t509, label %then892, label %endif894 +then892: store i64 1, ptr %a510 %t511 = load i8, ptr %a43 %t512 = zext i8 %t511 to i64 %t513 = and i64 %t512, 224 %t514 = icmp eq i64 %t513, 192 - br i1 %t514, label %then891, label %else892 -then891: + br i1 %t514, label %then895, label %else896 +then895: store i64 2, ptr %a510 - br label %endif893 -else892: + br label %endif897 +else896: %t515 = load i8, ptr %a43 %t516 = zext i8 %t515 to i64 %t517 = and i64 %t516, 240 %t518 = icmp eq i64 %t517, 224 - br i1 %t518, label %then894, label %else895 -then894: + br i1 %t518, label %then898, label %else899 +then898: store i64 3, ptr %a510 - br label %endif896 -else895: + br label %endif900 +else899: %t519 = load i8, ptr %a43 %t520 = zext i8 %t519 to i64 %t521 = and i64 %t520, 248 %t522 = icmp eq i64 %t521, 240 - br i1 %t522, label %then897, label %endif899 -then897: + br i1 %t522, label %then901, label %endif903 +then901: store i64 4, ptr %a510 - br label %endif899 -endif899: - br label %endif896 -endif896: - br label %endif893 -endif893: + br label %endif903 +endif903: + br label %endif900 +endif900: + br label %endif897 +endif897: store { ptr, i64, i64 } { ptr @.str.483, i64 0, i64 0 }, ptr %a523 %t524 = load i8, ptr %a43 %t525 = zext i8 %t524 to i64 %t526 = icmp sge i64 %t525, 128 - br i1 %t526, label %then900, label %endif902 -then900: + br i1 %t526, label %then904, label %endif906 +then904: %t527 = load { ptr, i64, i64 }, ptr %a523 store { ptr, i64, i64 } { ptr @.str.484, i64 74, i64 0 }, ptr %a523 store { ptr, i64, i64 } %t527, ptr %a528 call void @finch_str_drop(ptr %a528) - br label %endif902 -endif902: + br label %endif906 +endif906: %t529 = load ptr, ptr %a18 %t530 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 %t531 = load i64, ptr %t530 @@ -14350,30 +14376,30 @@ endif902: %t533 = load i64, ptr %t532 %t534 = load ptr, ptr %a18 %t535 = icmp eq ptr %t534, null - br i1 %t535, label %panic903, label %ok904 -panic903: + br i1 %t535, label %panic907, label %ok908 +panic907: call void @finch_panic(ptr @.str.486, i64 211, ptr @.str.487) unreachable -ok904: +ok908: %t536 = getelementptr inbounds %S.lexer.Lexer, ptr %t534, i32 0, i32 0 %t537 = load { ptr, i64, i64 }, ptr %t536 store { ptr, i64, i64 } %t537, ptr %a538 %t540 = load ptr, ptr %a18 %t541 = icmp eq ptr %t540, null - br i1 %t541, label %panic905, label %ok906 -panic905: + br i1 %t541, label %panic909, label %ok910 +panic909: call void @finch_panic(ptr @.str.489, i64 211, ptr @.str.490) unreachable -ok906: +ok910: %t542 = getelementptr inbounds %S.lexer.Lexer, ptr %t540, i32 0, i32 2 %t543 = load i64, ptr %t542 %t544 = load ptr, ptr %a18 %t545 = icmp eq ptr %t544, null - br i1 %t545, label %panic907, label %ok908 -panic907: + br i1 %t545, label %panic911, label %ok912 +panic911: call void @finch_panic(ptr @.str.491, i64 211, ptr @.str.492) unreachable -ok908: +ok912: %t546 = getelementptr inbounds %S.lexer.Lexer, ptr %t544, i32 0, i32 2 %t547 = load i64, ptr %t546 %t548 = load i64, ptr %a510 @@ -14403,26 +14429,26 @@ ok908: store { ptr, i64, i64 } %t566, ptr %a567 call void @finch_str_drop(ptr %a567) call void @finch_str_drop(ptr %a523) - br label %endif890 -endif890: + br label %endif894 +endif894: %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 %t569 = load i64, ptr %t568 store i64 0, ptr %a570 - br label %for.cond909 -for.cond909: + br label %for.cond913 +for.cond913: %t571 = load i64, ptr %a570 %t572 = icmp slt i64 %t571, %t569 - br i1 %t572, label %for.body910, label %for.end912 -for.body910: + br i1 %t572, label %for.body914, label %for.end916 +for.body914: %t573 = load ptr, ptr %a18 call void @finch.lexer.advance(ptr %t573) - br label %for.step911 -for.step911: + br label %for.step915 +for.step915: %t574 = load i64, ptr %a570 %t575 = add i64 %t574, 1 store i64 %t575, ptr %a570 - br label %for.cond909 -for.end912: + br label %for.cond913 +for.end916: %t576 = load { ptr, i64, i64 }, ptr %a506 %t577 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 store { ptr, i64, i64 } %t576, ptr %a578 @@ -14442,12 +14468,12 @@ for.end912: store { ptr, i64, i64 } %t588, ptr %a589 call void @finch_str_drop(ptr %a589) call void @finch_str_drop(ptr %a506) - br label %endif861 -endif861: - br label %endif751 -endif751: - br label %endif714 -endif714: + br label %endif865 +endif865: + br label %endif755 +endif755: + br label %endif718 +endif718: %t590 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t591 = load %S.lexer.Token, ptr %a169 store %S.lexer.Token %t591, ptr %a592 @@ -14461,28 +14487,28 @@ endif714: store %S.lexer.Token %t594, ptr %t598 store i64 %t596, ptr %t590 call void @finch.drop.S_lexer_Token(ptr %a169) - br label %while.cond611 -while.end613: + br label %while.cond615 +while.end617: %t599 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t600 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.494, i64 3, i64 0 }, 0 %t601 = insertvalue %S.lexer.Token %t600, { ptr, i64, i64 } { ptr @.str.495, i64 0, i64 0 }, 1 %t602 = load ptr, ptr %a18 %t603 = icmp eq ptr %t602, null - br i1 %t603, label %panic913, label %ok914 -panic913: + br i1 %t603, label %panic917, label %ok918 +panic917: call void @finch_panic(ptr @.str.496, i64 221, ptr @.str.497) unreachable -ok914: +ok918: %t604 = getelementptr inbounds %S.lexer.Lexer, ptr %t602, i32 0, i32 3 %t605 = load i64, ptr %t604 %t606 = insertvalue %S.lexer.Token %t601, i64 %t605, 2 %t607 = load ptr, ptr %a18 %t608 = icmp eq ptr %t607, null - br i1 %t608, label %panic915, label %ok916 -panic915: + br i1 %t608, label %panic919, label %ok920 +panic919: call void @finch_panic(ptr @.str.498, i64 221, ptr @.str.499) unreachable -ok916: +ok920: %t609 = getelementptr inbounds %S.lexer.Lexer, ptr %t607, i32 0, i32 4 %t610 = load i64, ptr %t609 %t611 = insertvalue %S.lexer.Token %t606, i64 %t610, 3 @@ -14645,48 +14671,48 @@ entry: store { ptr, i64, i64 } %t6, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 - br i1 %t10, label %then917, label %endif919 -then917: + br i1 %t10, label %then921, label %endif923 +then921: ret i1 false -endif919: +endif923: %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.503, i64 6, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.from920 -logic.from920: - br i1 %t16, label %logic.end922, label %logic.rhs921 -logic.rhs921: + br label %logic.from924 +logic.from924: + br i1 %t16, label %logic.end926, label %logic.rhs925 +logic.rhs925: %t17 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.504, i64 5, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br label %logic.rend923 -logic.rend923: - br label %logic.end922 -logic.end922: - %t23 = phi i1 [ true, %logic.from920 ], [ %t22, %logic.rend923 ] - br label %logic.from924 -logic.from924: - br i1 %t23, label %logic.end926, label %logic.rhs925 -logic.rhs925: + br label %logic.rend927 +logic.rend927: + br label %logic.end926 +logic.end926: + %t23 = phi i1 [ true, %logic.from924 ], [ %t22, %logic.rend927 ] + br label %logic.from928 +logic.from928: + br i1 %t23, label %logic.end930, label %logic.rhs929 +logic.rhs929: %t24 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t25 = load { ptr, i64, i64 }, ptr %t24 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.505, i64 4, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br label %logic.rend927 -logic.rend927: - br label %logic.end926 -logic.end926: - %t30 = phi i1 [ true, %logic.from924 ], [ %t29, %logic.rend927 ] - br i1 %t30, label %then928, label %endif930 -then928: + br label %logic.rend931 +logic.rend931: + br label %logic.end930 +logic.end930: + %t30 = phi i1 [ true, %logic.from928 ], [ %t29, %logic.rend931 ] + br i1 %t30, label %then932, label %endif934 +then932: %t31 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t32 = load { ptr, i64, i64 }, ptr %t31 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -14695,10 +14721,10 @@ then928: store { ptr, i64, i64 } %t34, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br label %logic.from931 -logic.from931: - br i1 %t38, label %logic.rhs932, label %logic.end933 -logic.rhs932: + br label %logic.from935 +logic.from935: + br i1 %t38, label %logic.rhs936, label %logic.end937 +logic.rhs936: %t39 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -14707,90 +14733,90 @@ logic.rhs932: store { ptr, i64, i64 } %t42, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 - br label %logic.rend934 -logic.rend934: - br label %logic.end933 -logic.end933: - %t47 = phi i1 [ false, %logic.from931 ], [ %t46, %logic.rend934 ] + br label %logic.rend938 +logic.rend938: + br label %logic.end937 +logic.end937: + %t47 = phi i1 [ false, %logic.from935 ], [ %t46, %logic.rend938 ] ret i1 %t47 -endif930: +endif934: %t48 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 store { ptr, i64, i64 } %t49, ptr %a50 store { ptr, i64, i64 } { ptr @.str.506, i64 5, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 - br label %logic.from935 -logic.from935: - br i1 %t53, label %logic.rhs936, label %logic.end937 -logic.rhs936: + br label %logic.from939 +logic.from939: + br i1 %t53, label %logic.rhs940, label %logic.end941 +logic.rhs940: %t54 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 %t55 = load i64, ptr %t54 %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t57 = load i64, ptr %t56 %t58 = icmp ne i64 %t55, %t57 - br label %logic.rend938 -logic.rend938: - br label %logic.end937 -logic.end937: - %t59 = phi i1 [ false, %logic.from935 ], [ %t58, %logic.rend938 ] - br i1 %t59, label %then939, label %endif941 -then939: + br label %logic.rend942 +logic.rend942: + br label %logic.end941 +logic.end941: + %t59 = phi i1 [ false, %logic.from939 ], [ %t58, %logic.rend942 ] + br i1 %t59, label %then943, label %endif945 +then943: ret i1 false -endif941: +endif945: %t60 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 store { ptr, i64, i64 } { ptr @.str.507, i64 5, i64 0 }, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 - br label %logic.from942 -logic.from942: - br i1 %t65, label %logic.end944, label %logic.rhs943 -logic.rhs943: + br label %logic.from946 +logic.from946: + br i1 %t65, label %logic.end948, label %logic.rhs947 +logic.rhs947: %t66 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t67 = load { ptr, i64, i64 }, ptr %t66 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.508, i64 3, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 - br label %logic.rend945 -logic.rend945: - br label %logic.end944 -logic.end944: - %t72 = phi i1 [ true, %logic.from942 ], [ %t71, %logic.rend945 ] - br label %logic.from946 -logic.from946: - br i1 %t72, label %logic.end948, label %logic.rhs947 -logic.rhs947: + br label %logic.rend949 +logic.rend949: + br label %logic.end948 +logic.end948: + %t72 = phi i1 [ true, %logic.from946 ], [ %t71, %logic.rend949 ] + br label %logic.from950 +logic.from950: + br i1 %t72, label %logic.end952, label %logic.rhs951 +logic.rhs951: %t73 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t74 = load { ptr, i64, i64 }, ptr %t73 store { ptr, i64, i64 } %t74, ptr %a75 store { ptr, i64, i64 } { ptr @.str.509, i64 3, i64 0 }, ptr %a76 %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) %t78 = icmp ne i32 %t77, 0 - br label %logic.rend949 -logic.rend949: - br label %logic.end948 -logic.end948: - %t79 = phi i1 [ true, %logic.from946 ], [ %t78, %logic.rend949 ] - br label %logic.from950 -logic.from950: - br i1 %t79, label %logic.end952, label %logic.rhs951 -logic.rhs951: + br label %logic.rend953 +logic.rend953: + br label %logic.end952 +logic.end952: + %t79 = phi i1 [ true, %logic.from950 ], [ %t78, %logic.rend953 ] + br label %logic.from954 +logic.from954: + br i1 %t79, label %logic.end956, label %logic.rhs955 +logic.rhs955: %t80 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.510, i64 5, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br label %logic.rend953 -logic.rend953: - br label %logic.end952 -logic.end952: - %t86 = phi i1 [ true, %logic.from950 ], [ %t85, %logic.rend953 ] - br i1 %t86, label %then954, label %endif956 -then954: + br label %logic.rend957 +logic.rend957: + br label %logic.end956 +logic.end956: + %t86 = phi i1 [ true, %logic.from954 ], [ %t85, %logic.rend957 ] + br i1 %t86, label %then958, label %endif960 +then958: %t87 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 %t89 = load i64, ptr %t88 @@ -14798,30 +14824,30 @@ then954: %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = icmp ne i64 %t89, %t92 - br i1 %t93, label %then957, label %endif959 -then957: + br i1 %t93, label %then961, label %endif963 +then961: ret i1 false -endif959: +endif963: %t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load i64, ptr %t95 store i64 0, ptr %a97 - br label %for.cond960 -for.cond960: + br label %for.cond964 +for.cond964: %t98 = load i64, ptr %a97 %t99 = icmp slt i64 %t98, %t96 - br i1 %t99, label %for.body961, label %for.end963 -for.body961: + br i1 %t99, label %for.body965, label %for.end967 +for.body965: %t100 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t101 = load i64, ptr %a97 %t102 = load { ptr, i64, i64 }, ptr %t100 %t103 = extractvalue { ptr, i64, i64 } %t102, 1 %t104 = icmp uge i64 %t101, %t103 - br i1 %t104, label %range964, label %inrange965 -range964: + br i1 %t104, label %range968, label %inrange969 +range968: call void @finch_panic_index(ptr @.str.511, i64 54, i64 %t101, i64 %t103) unreachable -inrange965: +inrange969: %t105 = extractvalue { ptr, i64, i64 } %t102, 0 %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t101 %t107 = load %S.ast.Type, ptr %t106 @@ -14830,29 +14856,29 @@ inrange965: %t110 = load { ptr, i64, i64 }, ptr %t108 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 - br i1 %t112, label %range966, label %inrange967 -range966: + br i1 %t112, label %range970, label %inrange971 +range970: call void @finch_panic_index(ptr @.str.512, i64 54, i64 %t109, i64 %t111) unreachable -inrange967: +inrange971: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds %S.ast.Type, ptr %t113, i64 %t109 %t115 = load %S.ast.Type, ptr %t114 %t116 = call i1 @finch.ast.same(%S.ast.Type %t107, %S.ast.Type %t115) %t117 = xor i1 %t116, true - br i1 %t117, label %then968, label %endif970 -then968: + br i1 %t117, label %then972, label %endif974 +then972: ret i1 false -endif970: - br label %for.step962 -for.step962: +endif974: + br label %for.step966 +for.step966: %t118 = load i64, ptr %a97 %t119 = add i64 %t118, 1 store i64 %t119, ptr %a97 - br label %for.cond960 -for.end963: + br label %for.cond964 +for.end967: ret i1 true -endif956: +endif960: ret i1 true } @@ -14932,17 +14958,17 @@ entry: store { ptr, i64, i64 } { ptr @.str.513, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then971, label %endif973 -then971: + br i1 %t7, label %then975, label %endif977 +then975: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 0, %t10 - br i1 %t11, label %range974, label %inrange975 -range974: + br i1 %t11, label %range978, label %inrange979 +range978: call void @finch_panic_index(ptr @.str.515, i64 65, i64 0, i64 %t10) unreachable -inrange975: +inrange979: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 %t14 = load %S.ast.Type, ptr %t13 @@ -14954,15 +14980,15 @@ inrange975: call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t20 -endif973: +endif977: %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.516, i64 5, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %then976, label %endif978 -then976: + br i1 %t26, label %then980, label %endif982 +then980: %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 %t28 = load i64, ptr %t27 call void @finch_str_from_int(ptr %a29, i64 %t28) @@ -14983,11 +15009,11 @@ then976: %t42 = load { ptr, i64, i64 }, ptr %t41 %t43 = extractvalue { ptr, i64, i64 } %t42, 1 %t44 = icmp uge i64 0, %t43 - br i1 %t44, label %range979, label %inrange980 -range979: + br i1 %t44, label %range983, label %inrange984 +range983: call void @finch_panic_index(ptr @.str.519, i64 68, i64 0, i64 %t43) unreachable -inrange980: +inrange984: %t45 = extractvalue { ptr, i64, i64 } %t42, 0 %t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0 %t47 = load %S.ast.Type, ptr %t46 @@ -15001,24 +15027,24 @@ inrange980: call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a49 ret { ptr, i64, i64 } %t54 -endif978: +endif982: %t55 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t56 = load { ptr, i64, i64 }, ptr %t55 store { ptr, i64, i64 } %t56, ptr %a57 store { ptr, i64, i64 } { ptr @.str.520, i64 3, i64 0 }, ptr %a58 %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) %t60 = icmp ne i32 %t59, 0 - br i1 %t60, label %then981, label %endif983 -then981: + br i1 %t60, label %then985, label %endif987 +then985: %t61 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = extractvalue { ptr, i64, i64 } %t62, 1 %t64 = icmp uge i64 0, %t63 - br i1 %t64, label %range984, label %inrange985 -range984: + br i1 %t64, label %range988, label %inrange989 +range988: call void @finch_panic_index(ptr @.str.522, i64 71, i64 0, i64 %t63) unreachable -inrange985: +inrange989: %t65 = extractvalue { ptr, i64, i64 } %t62, 0 %t66 = getelementptr inbounds %S.ast.Type, ptr %t65, i64 0 %t67 = load %S.ast.Type, ptr %t66 @@ -15039,11 +15065,11 @@ inrange985: %t80 = load { ptr, i64, i64 }, ptr %t79 %t81 = extractvalue { ptr, i64, i64 } %t80, 1 %t82 = icmp uge i64 1, %t81 - br i1 %t82, label %range986, label %inrange987 -range986: + br i1 %t82, label %range990, label %inrange991 +range990: call void @finch_panic_index(ptr @.str.524, i64 71, i64 1, i64 %t81) unreachable -inrange987: +inrange991: %t83 = extractvalue { ptr, i64, i64 } %t80, 0 %t84 = getelementptr inbounds %S.ast.Type, ptr %t83, i64 1 %t85 = load %S.ast.Type, ptr %t84 @@ -15057,32 +15083,32 @@ inrange987: call void @finch_str_drop(ptr %a91) %t92 = load { ptr, i64, i64 }, ptr %a87 ret { ptr, i64, i64 } %t92 -endif983: +endif987: %t93 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t94 = load { ptr, i64, i64 }, ptr %t93 store { ptr, i64, i64 } %t94, ptr %a95 store { ptr, i64, i64 } { ptr @.str.525, i64 3, i64 0 }, ptr %a96 %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) %t98 = icmp ne i32 %t97, 0 - br i1 %t98, label %then988, label %endif990 -then988: + br i1 %t98, label %then992, label %endif994 +then992: %t99 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = icmp eq i64 %t101, 0 - br i1 %t102, label %then991, label %endif993 -then991: + br i1 %t102, label %then995, label %endif997 +then995: ret { ptr, i64, i64 } { ptr @.str.526, i64 3, i64 0 } -endif993: +endif997: %t103 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t104 = load { ptr, i64, i64 }, ptr %t103 %t105 = extractvalue { ptr, i64, i64 } %t104, 1 %t106 = icmp uge i64 0, %t105 - br i1 %t106, label %range994, label %inrange995 -range994: + br i1 %t106, label %range998, label %inrange999 +range998: call void @finch_panic_index(ptr @.str.528, i64 77, i64 0, i64 %t105) unreachable -inrange995: +inrange999: %t107 = extractvalue { ptr, i64, i64 } %t104, 0 %t108 = getelementptr inbounds %S.ast.Type, ptr %t107, i64 0 %t109 = load %S.ast.Type, ptr %t108 @@ -15100,51 +15126,51 @@ inrange995: call void @finch_str_drop(ptr %a119) %t120 = load { ptr, i64, i64 }, ptr %a116 ret { ptr, i64, i64 } %t120 -endif990: +endif994: %t121 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t122 = load { ptr, i64, i64 }, ptr %t121 store { ptr, i64, i64 } %t122, ptr %a123 store { ptr, i64, i64 } { ptr @.str.530, i64 6, i64 0 }, ptr %a124 %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) %t126 = icmp ne i32 %t125, 0 - br label %logic.from996 -logic.from996: - br i1 %t126, label %logic.end998, label %logic.rhs997 -logic.rhs997: + br label %logic.from1000 +logic.from1000: + br i1 %t126, label %logic.end1002, label %logic.rhs1001 +logic.rhs1001: %t127 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t128, ptr %a129 store { ptr, i64, i64 } { ptr @.str.531, i64 5, i64 0 }, ptr %a130 %t131 = call i32 @finch_str_eq(ptr %a129, ptr %a130) %t132 = icmp ne i32 %t131, 0 - br label %logic.rend999 -logic.rend999: - br label %logic.end998 -logic.end998: - %t133 = phi i1 [ true, %logic.from996 ], [ %t132, %logic.rend999 ] - br label %logic.from1000 -logic.from1000: - br i1 %t133, label %logic.end1002, label %logic.rhs1001 -logic.rhs1001: + br label %logic.rend1003 +logic.rend1003: + br label %logic.end1002 +logic.end1002: + %t133 = phi i1 [ true, %logic.from1000 ], [ %t132, %logic.rend1003 ] + br label %logic.from1004 +logic.from1004: + br i1 %t133, label %logic.end1006, label %logic.rhs1005 +logic.rhs1005: %t134 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t135 = load { ptr, i64, i64 }, ptr %t134 store { ptr, i64, i64 } %t135, ptr %a136 store { ptr, i64, i64 } { ptr @.str.532, i64 4, i64 0 }, ptr %a137 %t138 = call i32 @finch_str_eq(ptr %a136, ptr %a137) %t139 = icmp ne i32 %t138, 0 - br label %logic.rend1003 -logic.rend1003: - br label %logic.end1002 -logic.end1002: - %t140 = phi i1 [ true, %logic.from1000 ], [ %t139, %logic.rend1003 ] - br i1 %t140, label %then1004, label %endif1006 -then1004: + br label %logic.rend1007 +logic.rend1007: + br label %logic.end1006 +logic.end1006: + %t140 = phi i1 [ true, %logic.from1004 ], [ %t139, %logic.rend1007 ] + br i1 %t140, label %then1008, label %endif1010 +then1008: %t141 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 %t143 = load i64, ptr %t142 %t144 = icmp sgt i64 %t143, 0 - br i1 %t144, label %then1007, label %endif1009 -then1007: + br i1 %t144, label %then1011, label %endif1013 +then1011: %t145 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t146 = load { ptr, i64, i64 }, ptr %t145 store { ptr, i64, i64 } %t146, ptr %a148 @@ -15160,24 +15186,24 @@ then1007: call void @finch_str_drop(ptr %a156) %t157 = load { ptr, i64, i64 }, ptr %a153 ret { ptr, i64, i64 } %t157 -endif1009: +endif1013: %t158 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 %t159 = load { ptr, i64, i64 }, ptr %t158 store { ptr, i64, i64 } %t159, ptr %a160 call void @finch_str_copy(ptr %a161, ptr %a160) %t162 = load { ptr, i64, i64 }, ptr %a161 ret { ptr, i64, i64 } %t162 -endif1006: +endif1010: %t163 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t164 = load { ptr, i64, i64 }, ptr %t163 store { ptr, i64, i64 } %t164, ptr %a165 store { ptr, i64, i64 } { ptr @.str.534, i64 4, i64 0 }, ptr %a166 %t167 = call i32 @finch_str_eq(ptr %a165, ptr %a166) %t168 = icmp ne i32 %t167, 0 - br i1 %t168, label %then1010, label %endif1012 -then1010: + br i1 %t168, label %then1014, label %endif1016 +then1014: ret { ptr, i64, i64 } { ptr @.str.535, i64 7, i64 0 } -endif1012: +endif1016: %t169 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t170 = load { ptr, i64, i64 }, ptr %t169 store { ptr, i64, i64 } %t170, ptr %a171 @@ -15224,11 +15250,11 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic1013, label %ok1014 -panic1013: + br i1 %t5, label %panic1017, label %ok1018 +panic1017: call void @finch_panic(ptr @.str.536, i64 14, ptr @.str.537) unreachable -ok1014: +ok1018: %t6 = getelementptr inbounds %S.parser.Parser, ptr %t4, i32 0, i32 4 %t7 = load { ptr, i64, i64 }, ptr %t6 store { ptr, i64, i64 } %t7, ptr %a9 @@ -15301,29 +15327,29 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1015, label %ok1016 -panic1015: + br i1 %t3, label %panic1019, label %ok1020 +panic1019: call void @finch_panic(ptr @.str.544, i64 19, ptr @.str.545) unreachable -ok1016: +ok1020: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic1017, label %ok1018 -panic1017: + br i1 %t6, label %panic1021, label %ok1022 +panic1021: call void @finch_panic(ptr @.str.546, i64 19, ptr @.str.547) unreachable -ok1018: +ok1022: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range1019, label %inrange1020 -range1019: + br i1 %t11, label %range1023, label %inrange1024 +range1023: call void @finch_panic_index(ptr @.str.548, i64 19, i64 %t8, i64 %t10) unreachable -inrange1020: +inrange1024: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = load %S.lexer.Token, ptr %t13 @@ -15341,29 +15367,29 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1021, label %ok1022 -panic1021: + br i1 %t3, label %panic1025, label %ok1026 +panic1025: call void @finch_panic(ptr @.str.549, i64 23, ptr @.str.550) unreachable -ok1022: +ok1026: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic1023, label %ok1024 -panic1023: + br i1 %t6, label %panic1027, label %ok1028 +panic1027: call void @finch_panic(ptr @.str.551, i64 23, ptr @.str.552) unreachable -ok1024: +ok1028: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range1025, label %inrange1026 -range1025: + br i1 %t11, label %range1029, label %inrange1030 +range1029: call void @finch_panic_index(ptr @.str.553, i64 23, i64 %t8, i64 %t10) unreachable -inrange1026: +inrange1030: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i32 0, i32 0 @@ -15385,11 +15411,11 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic1027, label %ok1028 -panic1027: + br i1 %t4, label %panic1031, label %ok1032 +panic1031: call void @finch_panic(ptr @.str.554, i64 27, ptr @.str.555) unreachable -ok1028: +ok1032: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a2 @@ -15398,48 +15424,48 @@ ok1028: %t10 = load i64, ptr %a9 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic1029, label %ok1030 -panic1029: + br i1 %t12, label %panic1033, label %ok1034 +panic1033: call void @finch_panic(ptr @.str.556, i64 28, ptr @.str.557) unreachable -ok1030: +ok1034: %t13 = getelementptr inbounds %S.parser.Parser, ptr %t11, i32 0, i32 0 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp sge i64 %t10, %t15 - br i1 %t16, label %then1031, label %endif1033 -then1031: + br i1 %t16, label %then1035, label %endif1037 +then1035: %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null - br i1 %t18, label %panic1034, label %ok1035 -panic1034: + br i1 %t18, label %panic1038, label %ok1039 +panic1038: call void @finch_panic(ptr @.str.558, i64 29, ptr @.str.559) unreachable -ok1035: +ok1039: %t19 = getelementptr inbounds %S.parser.Parser, ptr %t17, i32 0, i32 0 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load i64, ptr %t20 %t22 = sub i64 %t21, 1 store i64 %t22, ptr %a9 - br label %endif1033 -endif1033: + br label %endif1037 +endif1037: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic1036, label %ok1037 -panic1036: + br i1 %t24, label %panic1040, label %ok1041 +panic1040: call void @finch_panic(ptr @.str.560, i64 31, ptr @.str.561) unreachable -ok1037: +ok1041: %t25 = getelementptr inbounds %S.parser.Parser, ptr %t23, i32 0, i32 0 %t26 = load i64, ptr %a9 %t27 = load { ptr, i64, i64 }, ptr %t25 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 - br i1 %t29, label %range1038, label %inrange1039 -range1038: + br i1 %t29, label %range1042, label %inrange1043 +range1042: call void @finch_panic_index(ptr @.str.562, i64 31, i64 %t26, i64 %t28) unreachable -inrange1039: +inrange1043: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.lexer.Token, ptr %t30, i64 %t26 %t32 = getelementptr inbounds %S.lexer.Token, ptr %t31, i32 0, i32 0 @@ -15460,29 +15486,29 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic1040, label %ok1041 -panic1040: + br i1 %t4, label %panic1044, label %ok1045 +panic1044: call void @finch_panic(ptr @.str.563, i64 35, ptr @.str.564) unreachable -ok1041: +ok1045: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic1042, label %ok1043 -panic1042: + br i1 %t7, label %panic1046, label %ok1047 +panic1046: call void @finch_panic(ptr @.str.565, i64 35, ptr @.str.566) unreachable -ok1043: +ok1047: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load { ptr, i64, i64 }, ptr %t5 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range1044, label %inrange1045 -range1044: + br i1 %t12, label %range1048, label %inrange1049 +range1048: call void @finch_panic_index(ptr @.str.567, i64 35, i64 %t9, i64 %t11) unreachable -inrange1045: +inrange1049: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 %t15 = getelementptr inbounds %S.lexer.Token, ptr %t14, i32 0, i32 0 @@ -15504,29 +15530,29 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1046, label %ok1047 -panic1046: + br i1 %t3, label %panic1050, label %ok1051 +panic1050: call void @finch_panic(ptr @.str.568, i64 39, ptr @.str.569) unreachable -ok1047: +ok1051: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic1048, label %ok1049 -panic1048: + br i1 %t6, label %panic1052, label %ok1053 +panic1052: call void @finch_panic(ptr @.str.570, i64 39, ptr @.str.571) unreachable -ok1049: +ok1053: %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load { ptr, i64, i64 }, ptr %t4 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range1050, label %inrange1051 -range1050: + br i1 %t11, label %range1054, label %inrange1055 +range1054: call void @finch_panic_index(ptr @.str.572, i64 39, i64 %t8, i64 %t10) unreachable -inrange1051: +inrange1055: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 %t14 = load %S.lexer.Token, ptr %t13 @@ -15536,11 +15562,11 @@ inrange1051: store %S.lexer.Token %t17, ptr %a18 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null - br i1 %t20, label %panic1052, label %ok1053 -panic1052: + br i1 %t20, label %panic1056, label %ok1057 +panic1056: call void @finch_panic(ptr @.str.573, i64 40, ptr @.str.574) unreachable -ok1053: +ok1057: %t21 = getelementptr inbounds %S.parser.Parser, ptr %t19, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = add i64 %t22, 1 @@ -15558,21 +15584,21 @@ entry: %t3 = load ptr, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } %t4) - br i1 %t5, label %then1054, label %endif1056 -then1054: + br i1 %t5, label %then1058, label %endif1060 +then1058: %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic1057, label %ok1058 -panic1057: + br i1 %t7, label %panic1061, label %ok1062 +panic1061: call void @finch_panic(ptr @.str.575, i64 46, ptr @.str.576) unreachable -ok1058: +ok1062: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = add i64 %t9, 1 store i64 %t10, ptr %t8 ret i1 true -endif1056: +endif1060: ret i1 false } @@ -15612,8 +15638,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.577, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then1059, label %endif1061 -then1059: + br i1 %t7, label %then1063, label %endif1065 +then1063: %t8 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } { ptr @.str.578, i64 1, i64 0 }, ptr %a11 @@ -15627,62 +15653,62 @@ then1059: call void @finch_str_drop(ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t18 -endif1061: +endif1065: %t19 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.580, i64 3, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 - br i1 %t24, label %then1062, label %endif1064 -then1062: + br i1 %t24, label %then1066, label %endif1068 +then1066: ret { ptr, i64, i64 } { ptr @.str.581, i64 11, i64 0 } -endif1064: +endif1068: %t25 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.582, i64 3, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br label %logic.from1065 -logic.from1065: - br i1 %t30, label %logic.end1067, label %logic.rhs1066 -logic.rhs1066: + br label %logic.from1069 +logic.from1069: + br i1 %t30, label %logic.end1071, label %logic.rhs1070 +logic.rhs1070: %t31 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } { ptr @.str.583, i64 5, i64 0 }, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 - br label %logic.rend1068 -logic.rend1068: - br label %logic.end1067 -logic.end1067: - %t37 = phi i1 [ true, %logic.from1065 ], [ %t36, %logic.rend1068 ] - br i1 %t37, label %then1069, label %endif1071 -then1069: + br label %logic.rend1072 +logic.rend1072: + br label %logic.end1071 +logic.end1071: + %t37 = phi i1 [ true, %logic.from1069 ], [ %t36, %logic.rend1072 ] + br i1 %t37, label %then1073, label %endif1075 +then1073: ret { ptr, i64, i64 } { ptr @.str.584, i64 8, i64 0 } -endif1071: +endif1075: %t38 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t39 = load { ptr, i64, i64 }, ptr %t38 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.585, i64 6, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br i1 %t43, label %then1072, label %endif1074 -then1072: + br i1 %t43, label %then1076, label %endif1078 +then1076: ret { ptr, i64, i64 } { ptr @.str.586, i64 8, i64 0 } -endif1074: +endif1078: %t44 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } { ptr @.str.587, i64 4, i64 0 }, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 - br i1 %t49, label %then1075, label %endif1077 -then1075: + br i1 %t49, label %then1079, label %endif1081 +then1079: ret { ptr, i64, i64 } { ptr @.str.588, i64 6, i64 0 } -endif1077: +endif1081: %t50 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } { ptr @.str.589, i64 1, i64 0 }, ptr %a53 @@ -15725,8 +15751,8 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } %t5) %t7 = xor i1 %t6, true - br i1 %t7, label %then1078, label %endif1080 -then1078: + br i1 %t7, label %then1082, label %endif1084 +then1082: %t8 = load ptr, ptr %a1 %t9 = load ptr, ptr %a1 %t10 = call %S.lexer.Token @finch.parser.cur(ptr %t9) @@ -15759,8 +15785,8 @@ then1078: call void @finch.drop.S_lexer_Token(ptr %a31) store { ptr, i64, i64 } %t30, ptr %a32 call void @finch_str_drop(ptr %a32) - br label %endif1080 -endif1080: + br label %endif1084 +endif1084: %t33 = load ptr, ptr %a1 %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) ret %S.lexer.Token %t34 @@ -15772,53 +15798,53 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1081, label %ok1082 -panic1081: + br i1 %t3, label %panic1085, label %ok1086 +panic1085: call void @finch_panic(ptr @.str.593, i64 79, ptr @.str.594) unreachable -ok1082: +ok1086: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 2 %t5 = load i64, ptr %t4 %t6 = icmp sgt i64 %t5, 0 - br label %logic.from1083 -logic.from1083: - br i1 %t6, label %logic.end1085, label %logic.rhs1084 -logic.rhs1084: + br label %logic.from1087 +logic.from1087: + br i1 %t6, label %logic.end1089, label %logic.rhs1088 +logic.rhs1088: %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic1086, label %ok1087 -panic1086: + br i1 %t8, label %panic1090, label %ok1091 +panic1090: call void @finch_panic(ptr @.str.595, i64 79, ptr @.str.596) unreachable -ok1087: +ok1091: %t9 = getelementptr inbounds %S.parser.Parser, ptr %t7, i32 0, i32 0 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic1088, label %ok1089 -panic1088: + br i1 %t11, label %panic1092, label %ok1093 +panic1092: call void @finch_panic(ptr @.str.597, i64 79, ptr @.str.598) unreachable -ok1089: +ok1093: %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = load { ptr, i64, i64 }, ptr %t9 %t15 = extractvalue { ptr, i64, i64 } %t14, 1 %t16 = icmp uge i64 %t13, %t15 - br i1 %t16, label %range1090, label %inrange1091 -range1090: + br i1 %t16, label %range1094, label %inrange1095 +range1094: call void @finch_panic_index(ptr @.str.599, i64 79, i64 %t13, i64 %t15) unreachable -inrange1091: +inrange1095: %t17 = extractvalue { ptr, i64, i64 } %t14, 0 %t18 = getelementptr inbounds %S.lexer.Token, ptr %t17, i64 %t13 %t19 = getelementptr inbounds %S.lexer.Token, ptr %t18, i32 0, i32 4 %t20 = load i1, ptr %t19 %t21 = xor i1 %t20, true - br label %logic.rend1092 -logic.rend1092: - br label %logic.end1085 -logic.end1085: - %t22 = phi i1 [ true, %logic.from1083 ], [ %t21, %logic.rend1092 ] + br label %logic.rend1096 +logic.rend1096: + br label %logic.end1089 +logic.end1089: + %t22 = phi i1 [ true, %logic.from1087 ], [ %t21, %logic.rend1096 ] ret i1 %t22 } @@ -15835,29 +15861,29 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic1093, label %ok1094 -panic1093: + br i1 %t4, label %panic1097, label %ok1098 +panic1097: call void @finch_panic(ptr @.str.600, i64 83, ptr @.str.601) unreachable -ok1094: +ok1098: %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic1095, label %ok1096 -panic1095: + br i1 %t7, label %panic1099, label %ok1100 +panic1099: call void @finch_panic(ptr @.str.602, i64 83, ptr @.str.603) unreachable -ok1096: +ok1100: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load { ptr, i64, i64 }, ptr %t5 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range1097, label %inrange1098 -range1097: + br i1 %t12, label %range1101, label %inrange1102 +range1101: call void @finch_panic_index(ptr @.str.604, i64 83, i64 %t9, i64 %t11) unreachable -inrange1098: +inrange1102: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 %t15 = load %S.lexer.Token, ptr %t14 @@ -15878,11 +15904,11 @@ inrange1098: %t30 = insertvalue %S.ast.Node %t27, i64 %t29, 12 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null - br i1 %t32, label %panic1099, label %ok1100 -panic1099: + br i1 %t32, label %panic1103, label %ok1104 +panic1103: call void @finch_panic(ptr @.str.605, i64 84, ptr @.str.606) unreachable -ok1100: +ok1104: %t33 = getelementptr inbounds %S.parser.Parser, ptr %t31, i32 0, i32 3 %t34 = load i64, ptr %t33 %t35 = insertvalue %S.ast.Node %t30, i64 %t34, 13 @@ -15943,27 +15969,27 @@ entry: %t27 = load i64, ptr %t24 %t28 = load ptr, ptr %a23 store i64 0, ptr %a29 - br label %find.cond1101 -find.cond1101: + br label %find.cond1105 +find.cond1105: %t30 = load i64, ptr %a29 %t31 = icmp slt i64 %t30, %t27 - br i1 %t31, label %find.body1102, label %find.end1105 -find.body1102: + br i1 %t31, label %find.body1106, label %find.end1109 +find.body1106: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } %t25, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %find.hit1103, label %find.next1104 -find.hit1103: + br i1 %t37, label %find.hit1107, label %find.next1108 +find.hit1107: store i64 %t30, ptr %a26 - br label %find.end1105 -find.next1104: + br label %find.end1109 +find.next1108: %t38 = add i64 %t30, 1 store i64 %t38, ptr %a29 - br label %find.cond1101 -find.end1105: + br label %find.cond1105 +find.end1109: %t39 = load i64, ptr %a26 %t40 = icmp sge i64 %t39, 0 call void @finch.drop.arr_str(ptr %a23) @@ -16028,8 +16054,8 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.accept(ptr %t2, { ptr, i64, i64 } { ptr @.str.623, i64 1, i64 0 }) - br i1 %t3, label %then1106, label %endif1108 -then1106: + br i1 %t3, label %then1110, label %endif1112 +then1110: %t4 = load ptr, ptr %a1 %t5 = call %S.lexer.Token @finch.parser.expect(ptr %t4, { ptr, i64, i64 } { ptr @.str.624, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.625, i64 36, i64 0 }) store %S.lexer.Token %t5, ptr %a6 @@ -16040,12 +16066,12 @@ then1106: store %S.ast.Type %t8, ptr %a10 call void @finch.drop.S_ast_Type(ptr %a10) ret %S.ast.Type %t9 -endif1108: +endif1112: %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.626, i64 5, i64 0 }) %t13 = xor i1 %t12, true - br i1 %t13, label %then1109, label %endif1111 -then1109: + br i1 %t13, label %then1113, label %endif1115 +then1113: %t14 = load ptr, ptr %a1 %t15 = load ptr, ptr %a1 %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) @@ -16071,8 +16097,8 @@ then1109: call void @finch.drop.S_lexer_Token(ptr %a31) store { ptr, i64, i64 } %t30, ptr %a32 call void @finch_str_drop(ptr %a32) - br label %endif1111 -endif1111: + br label %endif1115 +endif1115: %t33 = load ptr, ptr %a1 %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) %t35 = extractvalue %S.lexer.Token %t34, 1 @@ -16087,19 +16113,19 @@ endif1111: store { ptr, i64, i64 } { ptr @.str.629, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.from1112 -logic.from1112: - br i1 %t45, label %logic.rhs1113, label %logic.end1114 -logic.rhs1113: + br label %logic.from1116 +logic.from1116: + br i1 %t45, label %logic.rhs1117, label %logic.end1118 +logic.rhs1117: %t46 = load ptr, ptr %a1 %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.630, i64 1, i64 0 }) - br label %logic.rend1115 -logic.rend1115: - br label %logic.end1114 -logic.end1114: - %t48 = phi i1 [ false, %logic.from1112 ], [ %t47, %logic.rend1115 ] - br i1 %t48, label %then1116, label %endif1118 -then1116: + br label %logic.rend1119 +logic.rend1119: + br label %logic.end1118 +logic.end1118: + %t48 = phi i1 [ false, %logic.from1116 ], [ %t47, %logic.rend1119 ] + br i1 %t48, label %then1120, label %endif1122 +then1120: %t49 = load ptr, ptr %a1 %t50 = call %S.lexer.Token @finch.parser.next(ptr %t49) store %S.lexer.Token %t50, ptr %a51 @@ -16120,29 +16146,29 @@ then1116: call void @finch.drop.S_ast_Type(ptr %a54) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t61 -endif1118: +endif1122: %t63 = load { ptr, i64, i64 }, ptr %a40 %t64 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t63) - br i1 %t64, label %then1119, label %endif1121 -then1119: + br i1 %t64, label %then1123, label %endif1125 +then1123: %t65 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t65, ptr %a66 store { ptr, i64, i64 } { ptr @.str.633, i64 3, i64 0 }, ptr %a67 %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) %t69 = icmp ne i32 %t68, 0 - br label %logic.from1122 -logic.from1122: - br i1 %t69, label %logic.rhs1123, label %logic.end1124 -logic.rhs1123: + br label %logic.from1126 +logic.from1126: + br i1 %t69, label %logic.rhs1127, label %logic.end1128 +logic.rhs1127: %t70 = load ptr, ptr %a1 %t71 = call i1 @finch.parser.accept(ptr %t70, { ptr, i64, i64 } { ptr @.str.634, i64 1, i64 0 }) - br label %logic.rend1125 -logic.rend1125: - br label %logic.end1124 -logic.end1124: - %t72 = phi i1 [ false, %logic.from1122 ], [ %t71, %logic.rend1125 ] - br i1 %t72, label %then1126, label %endif1128 -then1126: + br label %logic.rend1129 +logic.rend1129: + br label %logic.end1128 +logic.end1128: + %t72 = phi i1 [ false, %logic.from1126 ], [ %t71, %logic.rend1129 ] + br i1 %t72, label %then1130, label %endif1132 +then1130: %t73 = load ptr, ptr %a1 %t74 = call %S.ast.Type @finch.parser.parseType(ptr %t73) %t75 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t74) @@ -16156,34 +16182,34 @@ then1126: %t81 = load %S.ast.Type, ptr %a77 call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t81 -endif1128: +endif1132: %t82 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t82, ptr %a83 store { ptr, i64, i64 } { ptr @.str.637, i64 3, i64 0 }, ptr %a84 %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) %t86 = icmp ne i32 %t85, 0 - br i1 %t86, label %then1129, label %endif1131 -then1129: + br i1 %t86, label %then1133, label %endif1135 +then1133: %t87 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.638, i64 3, i64 0 }) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t87 -endif1131: +endif1135: %t88 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.639, i64 3, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 - br i1 %t92, label %then1132, label %endif1134 -then1132: + br i1 %t92, label %then1136, label %endif1138 +then1136: %t93 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.640, i64 5, i64 0 }) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t93 -endif1134: +endif1138: %t94 = load { ptr, i64, i64 }, ptr %a40 %t95 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t94) call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t95 -endif1121: +endif1125: %t96 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.641, i64 5, i64 0 }, 0 %t97 = load { ptr, i64, i64 }, ptr %a40 store { ptr, i64, i64 } %t97, ptr %a98 @@ -16193,10 +16219,10 @@ endif1121: store %S.ast.Type %t101, ptr %a102 %t103 = load ptr, ptr %a1 %t104 = call i1 @finch.parser.at(ptr %t103, { ptr, i64, i64 } { ptr @.str.642, i64 1, i64 0 }) - br label %logic.from1135 -logic.from1135: - br i1 %t104, label %logic.rhs1136, label %logic.end1137 -logic.rhs1136: + br label %logic.from1139 +logic.from1139: + br i1 %t104, label %logic.rhs1140, label %logic.end1141 +logic.rhs1140: %t105 = load ptr, ptr %a1 %t106 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t105, i64 1) store { ptr, i64, i64 } %t106, ptr %a107 @@ -16205,13 +16231,13 @@ logic.rhs1136: %t110 = icmp ne i32 %t109, 0 store { ptr, i64, i64 } %t106, ptr %a111 call void @finch_str_drop(ptr %a111) - br label %logic.rend1138 -logic.rend1138: - br label %logic.end1137 -logic.end1137: - %t112 = phi i1 [ false, %logic.from1135 ], [ %t110, %logic.rend1138 ] - br i1 %t112, label %then1139, label %endif1141 -then1139: + br label %logic.rend1142 +logic.rend1142: + br label %logic.end1141 +logic.end1141: + %t112 = phi i1 [ false, %logic.from1139 ], [ %t110, %logic.rend1142 ] + br i1 %t112, label %then1143, label %endif1145 +then1143: %t113 = load ptr, ptr %a1 %t114 = call %S.lexer.Token @finch.parser.next(ptr %t113) store %S.lexer.Token %t114, ptr %a115 @@ -16238,29 +16264,29 @@ then1139: store { ptr, i64, i64 } %t128, ptr %t130 store { ptr, i64, i64 } %t131, ptr %a132 call void @finch_str_drop(ptr %a132) - br label %endif1141 -endif1141: + br label %endif1145 +endif1145: %t133 = load ptr, ptr %a1 %t134 = call i1 @finch.parser.at(ptr %t133, { ptr, i64, i64 } { ptr @.str.644, i64 1, i64 0 }) - br label %logic.from1142 -logic.from1142: - br i1 %t134, label %logic.rhs1143, label %logic.end1144 -logic.rhs1143: + br label %logic.from1146 +logic.from1146: + br i1 %t134, label %logic.rhs1147, label %logic.end1148 +logic.rhs1147: %t135 = load ptr, ptr %a1 %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) %t137 = extractvalue %S.lexer.Token %t136, 4 store %S.lexer.Token %t136, ptr %a138 call void @finch.drop.S_lexer_Token(ptr %a138) %t139 = xor i1 %t137, true - br label %logic.rend1145 -logic.rend1145: - br label %logic.end1144 -logic.end1144: - %t140 = phi i1 [ false, %logic.from1142 ], [ %t139, %logic.rend1145 ] - br label %logic.from1146 -logic.from1146: - br i1 %t140, label %logic.rhs1147, label %logic.end1148 -logic.rhs1147: + br label %logic.rend1149 +logic.rend1149: + br label %logic.end1148 +logic.end1148: + %t140 = phi i1 [ false, %logic.from1146 ], [ %t139, %logic.rend1149 ] + br label %logic.from1150 +logic.from1150: + br i1 %t140, label %logic.rhs1151, label %logic.end1152 +logic.rhs1151: %t141 = load ptr, ptr %a1 %t142 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t141, i64 1) store { ptr, i64, i64 } %t142, ptr %a143 @@ -16269,21 +16295,21 @@ logic.rhs1147: %t146 = icmp eq i32 %t145, 0 store { ptr, i64, i64 } %t142, ptr %a147 call void @finch_str_drop(ptr %a147) - br label %logic.rend1149 -logic.rend1149: - br label %logic.end1148 -logic.end1148: - %t148 = phi i1 [ false, %logic.from1146 ], [ %t146, %logic.rend1149 ] - br i1 %t148, label %then1150, label %endif1152 -then1150: + br label %logic.rend1153 +logic.rend1153: + br label %logic.end1152 +logic.end1152: + %t148 = phi i1 [ false, %logic.from1150 ], [ %t146, %logic.rend1153 ] + br i1 %t148, label %then1154, label %endif1156 +then1154: %t149 = load ptr, ptr %a1 %t150 = call %S.lexer.Token @finch.parser.next(ptr %t149) store %S.lexer.Token %t150, ptr %a151 call void @finch.drop.S_lexer_Token(ptr %a151) - br label %while.cond1153 -while.cond1153: - br label %while.body1154 -while.body1154: + br label %while.cond1157 +while.cond1157: + br label %while.body1158 +while.body1158: %t152 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 1 %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i32 0, i32 1 %t154 = load ptr, ptr %a1 @@ -16298,18 +16324,18 @@ while.body1154: %t160 = load ptr, ptr %a1 %t161 = call i1 @finch.parser.accept(ptr %t160, { ptr, i64, i64 } { ptr @.str.646, i64 1, i64 0 }) %t162 = xor i1 %t161, true - br i1 %t162, label %then1156, label %endif1158 -then1156: - br label %while.end1155 -endif1158: - br label %while.cond1153 -while.end1155: + br i1 %t162, label %then1160, label %endif1162 +then1160: + br label %while.end1159 +endif1162: + br label %while.cond1157 +while.end1159: %t163 = load ptr, ptr %a1 %t164 = call %S.lexer.Token @finch.parser.expect(ptr %t163, { ptr, i64, i64 } { ptr @.str.647, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.648, i64 28, i64 0 }) store %S.lexer.Token %t164, ptr %a165 call void @finch.drop.S_lexer_Token(ptr %a165) - br label %endif1152 -endif1152: + br label %endif1156 +endif1156: %t166 = load %S.ast.Type, ptr %a102 call void @finch_str_drop(ptr %a40) ret %S.ast.Type %t166 @@ -16341,10 +16367,10 @@ entry: %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.649, i64 5, i64 0 }) %t4 = xor i1 %t3, true - br label %logic.from1159 -logic.from1159: - br i1 %t4, label %logic.end1161, label %logic.rhs1160 -logic.rhs1160: + br label %logic.from1163 +logic.from1163: + br i1 %t4, label %logic.end1165, label %logic.rhs1164 +logic.rhs1164: %t5 = load ptr, ptr %a1 %t6 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t5, i64 1) store { ptr, i64, i64 } %t6, ptr %a7 @@ -16353,15 +16379,15 @@ logic.rhs1160: %t10 = icmp eq i32 %t9, 0 store { ptr, i64, i64 } %t6, ptr %a11 call void @finch_str_drop(ptr %a11) - br label %logic.rend1162 -logic.rend1162: - br label %logic.end1161 -logic.end1161: - %t12 = phi i1 [ true, %logic.from1159 ], [ %t10, %logic.rend1162 ] - br label %logic.from1163 -logic.from1163: - br i1 %t12, label %logic.end1165, label %logic.rhs1164 -logic.rhs1164: + br label %logic.rend1166 +logic.rend1166: + br label %logic.end1165 +logic.end1165: + %t12 = phi i1 [ true, %logic.from1163 ], [ %t10, %logic.rend1166 ] + br label %logic.from1167 +logic.from1167: + br i1 %t12, label %logic.end1169, label %logic.rhs1168 +logic.rhs1168: %t13 = load ptr, ptr %a1 %t14 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t13, i64 2) store { ptr, i64, i64 } %t14, ptr %a15 @@ -16370,60 +16396,60 @@ logic.rhs1164: %t18 = icmp ne i32 %t17, 0 store { ptr, i64, i64 } %t14, ptr %a19 call void @finch_str_drop(ptr %a19) - br label %logic.rend1166 -logic.rend1166: - br label %logic.end1165 -logic.end1165: - %t20 = phi i1 [ true, %logic.from1163 ], [ %t18, %logic.rend1166 ] - br i1 %t20, label %then1167, label %endif1169 -then1167: + br label %logic.rend1170 +logic.rend1170: + br label %logic.end1169 +logic.end1169: + %t20 = phi i1 [ true, %logic.from1167 ], [ %t18, %logic.rend1170 ] + br i1 %t20, label %then1171, label %endif1173 +then1171: ret i1 false -endif1169: +endif1173: store i64 0, ptr %a21 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic1170, label %ok1171 -panic1170: + br i1 %t23, label %panic1174, label %ok1175 +panic1174: call void @finch_panic(ptr @.str.652, i64 148, ptr @.str.653) unreachable -ok1171: +ok1175: %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = add i64 %t25, 1 store i64 %t26, ptr %a27 - br label %while.cond1172 -while.cond1172: + br label %while.cond1176 +while.cond1176: %t28 = load i64, ptr %a27 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic1175, label %ok1176 -panic1175: + br i1 %t30, label %panic1179, label %ok1180 +panic1179: call void @finch_panic(ptr @.str.654, i64 149, ptr @.str.655) unreachable -ok1176: +ok1180: %t31 = getelementptr inbounds %S.parser.Parser, ptr %t29, i32 0, i32 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t28, %t33 - br i1 %t34, label %while.body1173, label %while.end1174 -while.body1173: + br i1 %t34, label %while.body1177, label %while.end1178 +while.body1177: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic1177, label %ok1178 -panic1177: + br i1 %t36, label %panic1181, label %ok1182 +panic1181: call void @finch_panic(ptr @.str.656, i64 150, ptr @.str.657) unreachable -ok1178: +ok1182: %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 0 %t38 = load i64, ptr %a27 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range1179, label %inrange1180 -range1179: + br i1 %t41, label %range1183, label %inrange1184 +range1183: call void @finch_panic_index(ptr @.str.658, i64 150, i64 %t38, i64 %t40) unreachable -inrange1180: +inrange1184: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.lexer.Token, ptr %t42, i64 %t38 %t44 = getelementptr inbounds %S.lexer.Token, ptr %t43, i32 0, i32 0 @@ -16437,62 +16463,62 @@ inrange1180: store { ptr, i64, i64 } { ptr @.str.659, i64 1, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %then1181, label %else1182 -then1181: + br i1 %t54, label %then1185, label %else1186 +then1185: %t55 = load i64, ptr %a21 %t56 = add i64 %t55, 1 store i64 %t56, ptr %a21 - br label %endif1183 -else1182: + br label %endif1187 +else1186: %t57 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.660, i64 1, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br i1 %t61, label %then1184, label %else1185 -then1184: + br i1 %t61, label %then1188, label %else1189 +then1188: %t62 = load i64, ptr %a21 %t63 = sub i64 %t62, 1 store i64 %t63, ptr %a21 %t64 = load i64, ptr %a21 %t65 = icmp eq i64 %t64, 0 - br i1 %t65, label %then1187, label %endif1189 -then1187: + br i1 %t65, label %then1191, label %endif1193 +then1191: %t66 = load i64, ptr %a27 %t67 = add i64 %t66, 1 %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null - br i1 %t69, label %panic1190, label %ok1191 -panic1190: + br i1 %t69, label %panic1194, label %ok1195 +panic1194: call void @finch_panic(ptr @.str.661, i64 156, ptr @.str.662) unreachable -ok1191: +ok1195: %t70 = getelementptr inbounds %S.parser.Parser, ptr %t68, i32 0, i32 0 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load i64, ptr %t71 %t73 = icmp slt i64 %t67, %t72 - br label %logic.from1192 -logic.from1192: - br i1 %t73, label %logic.rhs1193, label %logic.end1194 -logic.rhs1193: + br label %logic.from1196 +logic.from1196: + br i1 %t73, label %logic.rhs1197, label %logic.end1198 +logic.rhs1197: %t74 = load ptr, ptr %a1 %t75 = icmp eq ptr %t74, null - br i1 %t75, label %panic1195, label %ok1196 -panic1195: + br i1 %t75, label %panic1199, label %ok1200 +panic1199: call void @finch_panic(ptr @.str.663, i64 156, ptr @.str.664) unreachable -ok1196: +ok1200: %t76 = getelementptr inbounds %S.parser.Parser, ptr %t74, i32 0, i32 0 %t77 = load i64, ptr %a27 %t78 = add i64 %t77, 1 %t79 = load { ptr, i64, i64 }, ptr %t76 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 - br i1 %t81, label %range1197, label %inrange1198 -range1197: + br i1 %t81, label %range1201, label %inrange1202 +range1201: call void @finch_panic_index(ptr @.str.665, i64 156, i64 %t78, i64 %t80) unreachable -inrange1198: +inrange1202: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds %S.lexer.Token, ptr %t82, i64 %t78 %t84 = getelementptr inbounds %S.lexer.Token, ptr %t83, i32 0, i32 0 @@ -16501,109 +16527,109 @@ inrange1198: store { ptr, i64, i64 } { ptr @.str.666, i64 5, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 - br label %logic.rend1199 -logic.rend1199: - br label %logic.end1194 -logic.end1194: - %t90 = phi i1 [ false, %logic.from1192 ], [ %t89, %logic.rend1199 ] - br label %logic.from1200 -logic.from1200: - br i1 %t90, label %logic.rhs1201, label %logic.end1202 -logic.rhs1201: + br label %logic.rend1203 +logic.rend1203: + br label %logic.end1198 +logic.end1198: + %t90 = phi i1 [ false, %logic.from1196 ], [ %t89, %logic.rend1203 ] + br label %logic.from1204 +logic.from1204: + br i1 %t90, label %logic.rhs1205, label %logic.end1206 +logic.rhs1205: %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null - br i1 %t92, label %panic1203, label %ok1204 -panic1203: + br i1 %t92, label %panic1207, label %ok1208 +panic1207: call void @finch_panic(ptr @.str.667, i64 156, ptr @.str.668) unreachable -ok1204: +ok1208: %t93 = getelementptr inbounds %S.parser.Parser, ptr %t91, i32 0, i32 0 %t94 = load i64, ptr %a27 %t95 = add i64 %t94, 1 %t96 = load { ptr, i64, i64 }, ptr %t93 %t97 = extractvalue { ptr, i64, i64 } %t96, 1 %t98 = icmp uge i64 %t95, %t97 - br i1 %t98, label %range1205, label %inrange1206 -range1205: + br i1 %t98, label %range1209, label %inrange1210 +range1209: call void @finch_panic_index(ptr @.str.669, i64 156, i64 %t95, i64 %t97) unreachable -inrange1206: +inrange1210: %t99 = extractvalue { ptr, i64, i64 } %t96, 0 %t100 = getelementptr inbounds %S.lexer.Token, ptr %t99, i64 %t95 %t101 = getelementptr inbounds %S.lexer.Token, ptr %t100, i32 0, i32 4 %t102 = load i1, ptr %t101 %t103 = xor i1 %t102, true - br label %logic.rend1207 -logic.rend1207: - br label %logic.end1202 -logic.end1202: - %t104 = phi i1 [ false, %logic.from1200 ], [ %t103, %logic.rend1207 ] + br label %logic.rend1211 +logic.rend1211: + br label %logic.end1206 +logic.end1206: + %t104 = phi i1 [ false, %logic.from1204 ], [ %t103, %logic.rend1211 ] call void @finch_str_drop(ptr %a49) ret i1 %t104 -endif1189: - br label %endif1186 -else1185: +endif1193: + br label %endif1190 +else1189: %t105 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t105, ptr %a106 store { ptr, i64, i64 } { ptr @.str.670, i64 3, i64 0 }, ptr %a107 %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) %t109 = icmp ne i32 %t108, 0 - br label %logic.from1208 -logic.from1208: - br i1 %t109, label %logic.end1210, label %logic.rhs1209 -logic.rhs1209: + br label %logic.from1212 +logic.from1212: + br i1 %t109, label %logic.end1214, label %logic.rhs1213 +logic.rhs1213: %t110 = load ptr, ptr %a1 %t111 = icmp eq ptr %t110, null - br i1 %t111, label %panic1211, label %ok1212 -panic1211: + br i1 %t111, label %panic1215, label %ok1216 +panic1215: call void @finch_panic(ptr @.str.671, i64 158, ptr @.str.672) unreachable -ok1212: +ok1216: %t112 = getelementptr inbounds %S.parser.Parser, ptr %t110, i32 0, i32 0 %t113 = load i64, ptr %a27 %t114 = load { ptr, i64, i64 }, ptr %t112 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 %t113, %t115 - br i1 %t116, label %range1213, label %inrange1214 -range1213: + br i1 %t116, label %range1217, label %inrange1218 +range1217: call void @finch_panic_index(ptr @.str.673, i64 158, i64 %t113, i64 %t115) unreachable -inrange1214: +inrange1218: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds %S.lexer.Token, ptr %t117, i64 %t113 %t119 = getelementptr inbounds %S.lexer.Token, ptr %t118, i32 0, i32 4 %t120 = load i1, ptr %t119 - br label %logic.from1215 -logic.from1215: - br i1 %t120, label %logic.rhs1216, label %logic.end1217 -logic.rhs1216: + br label %logic.from1219 +logic.from1219: + br i1 %t120, label %logic.rhs1220, label %logic.end1221 +logic.rhs1220: %t121 = load i64, ptr %a21 %t122 = icmp eq i64 %t121, 0 - br label %logic.rend1218 -logic.rend1218: - br label %logic.end1217 -logic.end1217: - %t123 = phi i1 [ false, %logic.from1215 ], [ %t122, %logic.rend1218 ] - br label %logic.rend1219 -logic.rend1219: - br label %logic.end1210 -logic.end1210: - %t124 = phi i1 [ true, %logic.from1208 ], [ %t123, %logic.rend1219 ] - br i1 %t124, label %then1220, label %endif1222 -then1220: + br label %logic.rend1222 +logic.rend1222: + br label %logic.end1221 +logic.end1221: + %t123 = phi i1 [ false, %logic.from1219 ], [ %t122, %logic.rend1222 ] + br label %logic.rend1223 +logic.rend1223: + br label %logic.end1214 +logic.end1214: + %t124 = phi i1 [ true, %logic.from1212 ], [ %t123, %logic.rend1223 ] + br i1 %t124, label %then1224, label %endif1226 +then1224: call void @finch_str_drop(ptr %a49) ret i1 false -endif1222: - br label %endif1186 -endif1186: - br label %endif1183 -endif1183: +endif1226: + br label %endif1190 +endif1190: + br label %endif1187 +endif1187: %t125 = load i64, ptr %a27 %t126 = add i64 %t125, 1 store i64 %t126, ptr %a27 call void @finch_str_drop(ptr %a49) - br label %while.cond1172 -while.end1174: + br label %while.cond1176 +while.end1178: ret i1 false } @@ -16614,11 +16640,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic1223, label %ok1224 -panic1223: + br i1 %t3, label %panic1227, label %ok1228 +panic1227: call void @finch_panic(ptr @.str.674, i64 168, ptr @.str.675) unreachable -ok1224: +ok1228: %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = sub i64 %t5, 1 @@ -16628,11 +16654,11 @@ ok1224: store i1 %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic1225, label %ok1226 -panic1225: + br i1 %t11, label %panic1229, label %ok1230 +panic1229: call void @finch_panic(ptr @.str.676, i64 170, ptr @.str.677) unreachable -ok1226: +ok1230: %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 @@ -16672,49 +16698,49 @@ entry: %t7 = icmp eq i32 %t6, 0 store { ptr, i64, i64 } %t3, ptr %a8 call void @finch_str_drop(ptr %a8) - br label %logic.from1227 -logic.from1227: - br i1 %t7, label %logic.end1229, label %logic.rhs1228 -logic.rhs1228: + br label %logic.from1231 +logic.from1231: + br i1 %t7, label %logic.end1233, label %logic.rhs1232 +logic.rhs1232: %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic1230, label %ok1231 -panic1230: + br i1 %t10, label %panic1234, label %ok1235 +panic1234: call void @finch_panic(ptr @.str.679, i64 176, ptr @.str.680) unreachable -ok1231: +ok1235: %t11 = getelementptr inbounds %S.parser.Parser, ptr %t9, i32 0, i32 0 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic1232, label %ok1233 -panic1232: + br i1 %t13, label %panic1236, label %ok1237 +panic1236: call void @finch_panic(ptr @.str.681, i64 176, ptr @.str.682) unreachable -ok1233: +ok1237: %t14 = getelementptr inbounds %S.parser.Parser, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = add i64 %t15, 1 %t17 = load { ptr, i64, i64 }, ptr %t11 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 - br i1 %t19, label %range1234, label %inrange1235 -range1234: + br i1 %t19, label %range1238, label %inrange1239 +range1238: call void @finch_panic_index(ptr @.str.683, i64 176, i64 %t16, i64 %t18) unreachable -inrange1235: +inrange1239: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.lexer.Token, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.lexer.Token, ptr %t21, i32 0, i32 4 %t23 = load i1, ptr %t22 - br label %logic.rend1236 -logic.rend1236: - br label %logic.end1229 -logic.end1229: - %t24 = phi i1 [ true, %logic.from1227 ], [ %t23, %logic.rend1236 ] - br label %logic.from1237 -logic.from1237: - br i1 %t24, label %logic.end1239, label %logic.rhs1238 -logic.rhs1238: + br label %logic.rend1240 +logic.rend1240: + br label %logic.end1233 +logic.end1233: + %t24 = phi i1 [ true, %logic.from1231 ], [ %t23, %logic.rend1240 ] + br label %logic.from1241 +logic.from1241: + br i1 %t24, label %logic.end1243, label %logic.rhs1242 +logic.rhs1242: %t25 = load ptr, ptr %a1 %t26 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t25, i64 2) store { ptr, i64, i64 } %t26, ptr %a27 @@ -16723,60 +16749,60 @@ logic.rhs1238: %t30 = icmp ne i32 %t29, 0 store { ptr, i64, i64 } %t26, ptr %a31 call void @finch_str_drop(ptr %a31) - br label %logic.rend1240 -logic.rend1240: - br label %logic.end1239 -logic.end1239: - %t32 = phi i1 [ true, %logic.from1237 ], [ %t30, %logic.rend1240 ] - br i1 %t32, label %then1241, label %endif1243 -then1241: + br label %logic.rend1244 +logic.rend1244: + br label %logic.end1243 +logic.end1243: + %t32 = phi i1 [ true, %logic.from1241 ], [ %t30, %logic.rend1244 ] + br i1 %t32, label %then1245, label %endif1247 +then1245: ret i1 false -endif1243: +endif1247: store i64 0, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic1244, label %ok1245 -panic1244: + br i1 %t35, label %panic1248, label %ok1249 +panic1248: call void @finch_panic(ptr @.str.685, i64 180, ptr @.str.686) unreachable -ok1245: +ok1249: %t36 = getelementptr inbounds %S.parser.Parser, ptr %t34, i32 0, i32 1 %t37 = load i64, ptr %t36 %t38 = add i64 %t37, 1 store i64 %t38, ptr %a39 - br label %while.cond1246 -while.cond1246: + br label %while.cond1250 +while.cond1250: %t40 = load i64, ptr %a39 %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic1249, label %ok1250 -panic1249: + br i1 %t42, label %panic1253, label %ok1254 +panic1253: call void @finch_panic(ptr @.str.687, i64 181, ptr @.str.688) unreachable -ok1250: +ok1254: %t43 = getelementptr inbounds %S.parser.Parser, ptr %t41, i32 0, i32 0 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = icmp slt i64 %t40, %t45 - br i1 %t46, label %while.body1247, label %while.end1248 -while.body1247: + br i1 %t46, label %while.body1251, label %while.end1252 +while.body1251: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic1251, label %ok1252 -panic1251: + br i1 %t48, label %panic1255, label %ok1256 +panic1255: call void @finch_panic(ptr @.str.689, i64 182, ptr @.str.690) unreachable -ok1252: +ok1256: %t49 = getelementptr inbounds %S.parser.Parser, ptr %t47, i32 0, i32 0 %t50 = load i64, ptr %a39 %t51 = load { ptr, i64, i64 }, ptr %t49 %t52 = extractvalue { ptr, i64, i64 } %t51, 1 %t53 = icmp uge i64 %t50, %t52 - br i1 %t53, label %range1253, label %inrange1254 -range1253: + br i1 %t53, label %range1257, label %inrange1258 +range1257: call void @finch_panic_index(ptr @.str.691, i64 182, i64 %t50, i64 %t52) unreachable -inrange1254: +inrange1258: %t54 = extractvalue { ptr, i64, i64 } %t51, 0 %t55 = getelementptr inbounds %S.lexer.Token, ptr %t54, i64 %t50 %t56 = getelementptr inbounds %S.lexer.Token, ptr %t55, i32 0, i32 0 @@ -16790,62 +16816,62 @@ inrange1254: store { ptr, i64, i64 } { ptr @.str.692, i64 1, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 - br i1 %t66, label %then1255, label %else1256 -then1255: + br i1 %t66, label %then1259, label %else1260 +then1259: %t67 = load i64, ptr %a33 %t68 = add i64 %t67, 1 store i64 %t68, ptr %a33 - br label %endif1257 -else1256: + br label %endif1261 +else1260: %t69 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } { ptr @.str.693, i64 1, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 - br i1 %t73, label %then1258, label %else1259 -then1258: + br i1 %t73, label %then1262, label %else1263 +then1262: %t74 = load i64, ptr %a33 %t75 = sub i64 %t74, 1 store i64 %t75, ptr %a33 %t76 = load i64, ptr %a33 %t77 = icmp eq i64 %t76, 0 - br i1 %t77, label %then1261, label %endif1263 -then1261: + br i1 %t77, label %then1265, label %endif1267 +then1265: %t78 = load i64, ptr %a39 %t79 = add i64 %t78, 1 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null - br i1 %t81, label %panic1264, label %ok1265 -panic1264: + br i1 %t81, label %panic1268, label %ok1269 +panic1268: call void @finch_panic(ptr @.str.694, i64 188, ptr @.str.695) unreachable -ok1265: +ok1269: %t82 = getelementptr inbounds %S.parser.Parser, ptr %t80, i32 0, i32 0 %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 %t84 = load i64, ptr %t83 %t85 = icmp slt i64 %t79, %t84 - br label %logic.from1266 -logic.from1266: - br i1 %t85, label %logic.rhs1267, label %logic.end1268 -logic.rhs1267: + br label %logic.from1270 +logic.from1270: + br i1 %t85, label %logic.rhs1271, label %logic.end1272 +logic.rhs1271: %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic1269, label %ok1270 -panic1269: + br i1 %t87, label %panic1273, label %ok1274 +panic1273: call void @finch_panic(ptr @.str.696, i64 188, ptr @.str.697) unreachable -ok1270: +ok1274: %t88 = getelementptr inbounds %S.parser.Parser, ptr %t86, i32 0, i32 0 %t89 = load i64, ptr %a39 %t90 = add i64 %t89, 1 %t91 = load { ptr, i64, i64 }, ptr %t88 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 - br i1 %t93, label %range1271, label %inrange1272 -range1271: + br i1 %t93, label %range1275, label %inrange1276 +range1275: call void @finch_panic_index(ptr @.str.698, i64 188, i64 %t90, i64 %t92) unreachable -inrange1272: +inrange1276: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds %S.lexer.Token, ptr %t94, i64 %t90 %t96 = getelementptr inbounds %S.lexer.Token, ptr %t95, i32 0, i32 0 @@ -16854,98 +16880,98 @@ inrange1272: store { ptr, i64, i64 } { ptr @.str.699, i64 1, i64 0 }, ptr %a99 %t100 = call i32 @finch_str_eq(ptr %a98, ptr %a99) %t101 = icmp ne i32 %t100, 0 - br label %logic.rend1273 -logic.rend1273: - br label %logic.end1268 -logic.end1268: - %t102 = phi i1 [ false, %logic.from1266 ], [ %t101, %logic.rend1273 ] - br label %logic.from1274 -logic.from1274: - br i1 %t102, label %logic.rhs1275, label %logic.end1276 -logic.rhs1275: + br label %logic.rend1277 +logic.rend1277: + br label %logic.end1272 +logic.end1272: + %t102 = phi i1 [ false, %logic.from1270 ], [ %t101, %logic.rend1277 ] + br label %logic.from1278 +logic.from1278: + br i1 %t102, label %logic.rhs1279, label %logic.end1280 +logic.rhs1279: %t103 = load ptr, ptr %a1 %t104 = icmp eq ptr %t103, null - br i1 %t104, label %panic1277, label %ok1278 -panic1277: + br i1 %t104, label %panic1281, label %ok1282 +panic1281: call void @finch_panic(ptr @.str.700, i64 188, ptr @.str.701) unreachable -ok1278: +ok1282: %t105 = getelementptr inbounds %S.parser.Parser, ptr %t103, i32 0, i32 0 %t106 = load i64, ptr %a39 %t107 = add i64 %t106, 1 %t108 = load { ptr, i64, i64 }, ptr %t105 %t109 = extractvalue { ptr, i64, i64 } %t108, 1 %t110 = icmp uge i64 %t107, %t109 - br i1 %t110, label %range1279, label %inrange1280 -range1279: + br i1 %t110, label %range1283, label %inrange1284 +range1283: call void @finch_panic_index(ptr @.str.702, i64 188, i64 %t107, i64 %t109) unreachable -inrange1280: +inrange1284: %t111 = extractvalue { ptr, i64, i64 } %t108, 0 %t112 = getelementptr inbounds %S.lexer.Token, ptr %t111, i64 %t107 %t113 = getelementptr inbounds %S.lexer.Token, ptr %t112, i32 0, i32 4 %t114 = load i1, ptr %t113 %t115 = xor i1 %t114, true - br label %logic.rend1281 -logic.rend1281: - br label %logic.end1276 -logic.end1276: - %t116 = phi i1 [ false, %logic.from1274 ], [ %t115, %logic.rend1281 ] + br label %logic.rend1285 +logic.rend1285: + br label %logic.end1280 +logic.end1280: + %t116 = phi i1 [ false, %logic.from1278 ], [ %t115, %logic.rend1285 ] call void @finch_str_drop(ptr %a61) ret i1 %t116 -endif1263: - br label %endif1260 -else1259: +endif1267: + br label %endif1264 +else1263: %t117 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t117, ptr %a118 store { ptr, i64, i64 } { ptr @.str.703, i64 3, i64 0 }, ptr %a119 %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) %t121 = icmp ne i32 %t120, 0 - br label %logic.from1282 -logic.from1282: - br i1 %t121, label %logic.end1284, label %logic.rhs1283 -logic.rhs1283: + br label %logic.from1286 +logic.from1286: + br i1 %t121, label %logic.end1288, label %logic.rhs1287 +logic.rhs1287: %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null - br i1 %t123, label %panic1285, label %ok1286 -panic1285: + br i1 %t123, label %panic1289, label %ok1290 +panic1289: call void @finch_panic(ptr @.str.704, i64 190, ptr @.str.705) unreachable -ok1286: +ok1290: %t124 = getelementptr inbounds %S.parser.Parser, ptr %t122, i32 0, i32 0 %t125 = load i64, ptr %a39 %t126 = load { ptr, i64, i64 }, ptr %t124 %t127 = extractvalue { ptr, i64, i64 } %t126, 1 %t128 = icmp uge i64 %t125, %t127 - br i1 %t128, label %range1287, label %inrange1288 -range1287: + br i1 %t128, label %range1291, label %inrange1292 +range1291: call void @finch_panic_index(ptr @.str.706, i64 190, i64 %t125, i64 %t127) unreachable -inrange1288: +inrange1292: %t129 = extractvalue { ptr, i64, i64 } %t126, 0 %t130 = getelementptr inbounds %S.lexer.Token, ptr %t129, i64 %t125 %t131 = getelementptr inbounds %S.lexer.Token, ptr %t130, i32 0, i32 4 %t132 = load i1, ptr %t131 - br label %logic.rend1289 -logic.rend1289: - br label %logic.end1284 -logic.end1284: - %t133 = phi i1 [ true, %logic.from1282 ], [ %t132, %logic.rend1289 ] - br i1 %t133, label %then1290, label %endif1292 -then1290: + br label %logic.rend1293 +logic.rend1293: + br label %logic.end1288 +logic.end1288: + %t133 = phi i1 [ true, %logic.from1286 ], [ %t132, %logic.rend1293 ] + br i1 %t133, label %then1294, label %endif1296 +then1294: call void @finch_str_drop(ptr %a61) ret i1 false -endif1292: - br label %endif1260 -endif1260: - br label %endif1257 -endif1257: +endif1296: + br label %endif1264 +endif1264: + br label %endif1261 +endif1261: %t134 = load i64, ptr %a39 %t135 = add i64 %t134, 1 store i64 %t135, ptr %a39 call void @finch_str_drop(ptr %a61) - br label %while.cond1246 -while.end1248: + br label %while.cond1250 +while.end1252: ret i1 false } @@ -16983,14 +17009,14 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.genericDeclAhead(ptr %t2) - br i1 %t3, label %then1293, label %endif1295 -then1293: + br i1 %t3, label %then1297, label %endif1299 +then1297: ret i1 true -endif1295: +endif1299: %t4 = load ptr, ptr %a1 %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.707, i64 1, i64 0 }) - br i1 %t5, label %then1296, label %endif1298 -then1296: + br i1 %t5, label %then1300, label %endif1302 +then1300: %t6 = load ptr, ptr %a1 %t7 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t6, i64 1) store { ptr, i64, i64 } %t7, ptr %a8 @@ -17000,14 +17026,14 @@ then1296: store { ptr, i64, i64 } %t7, ptr %a12 call void @finch_str_drop(ptr %a12) ret i1 %t11 -endif1298: +endif1302: %t13 = load ptr, ptr %a1 %t14 = call i1 @finch.parser.at(ptr %t13, { ptr, i64, i64 } { ptr @.str.709, i64 5, i64 0 }) %t15 = xor i1 %t14, true - br i1 %t15, label %then1299, label %endif1301 -then1299: + br i1 %t15, label %then1303, label %endif1305 +then1303: ret i1 false -endif1301: +endif1305: %t16 = load ptr, ptr %a1 %t17 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t16, i64 1) store { ptr, i64, i64 } %t17, ptr %a18 @@ -17016,34 +17042,34 @@ endif1301: store { ptr, i64, i64 } { ptr @.str.710, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br i1 %t23, label %then1302, label %endif1304 -then1302: + br i1 %t23, label %then1306, label %endif1308 +then1306: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic1305, label %ok1306 -panic1305: + br i1 %t25, label %panic1309, label %ok1310 +panic1309: call void @finch_panic(ptr @.str.711, i64 210, ptr @.str.712) unreachable -ok1306: +ok1310: %t26 = getelementptr inbounds %S.parser.Parser, ptr %t24, i32 0, i32 0 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic1307, label %ok1308 -panic1307: + br i1 %t28, label %panic1311, label %ok1312 +panic1311: call void @finch_panic(ptr @.str.713, i64 210, ptr @.str.714) unreachable -ok1308: +ok1312: %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = add i64 %t30, 1 %t32 = load { ptr, i64, i64 }, ptr %t26 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range1309, label %inrange1310 -range1309: + br i1 %t34, label %range1313, label %inrange1314 +range1313: call void @finch_panic_index(ptr @.str.715, i64 210, i64 %t31, i64 %t33) unreachable -inrange1310: +inrange1314: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.lexer.Token, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.lexer.Token, ptr %t36, i32 0, i32 4 @@ -17051,7 +17077,7 @@ inrange1310: %t39 = xor i1 %t38, true call void @finch_str_drop(ptr %a18) ret i1 %t39 -endif1304: +endif1308: %t40 = load ptr, ptr %a1 %t41 = call %S.lexer.Token @finch.parser.cur(ptr %t40) %t42 = extractvalue %S.lexer.Token %t41, 1 @@ -17066,10 +17092,10 @@ endif1304: %t50 = icmp ne i32 %t49, 0 store { ptr, i64, i64 } %t45, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %logic.from1311 -logic.from1311: - br i1 %t50, label %logic.end1313, label %logic.rhs1312 -logic.rhs1312: + br label %logic.from1315 +logic.from1315: + br i1 %t50, label %logic.end1317, label %logic.rhs1316 +logic.rhs1316: %t52 = load ptr, ptr %a1 %t53 = call %S.lexer.Token @finch.parser.cur(ptr %t52) %t54 = extractvalue %S.lexer.Token %t53, 1 @@ -17084,39 +17110,39 @@ logic.rhs1312: %t62 = icmp ne i32 %t61, 0 store { ptr, i64, i64 } %t57, ptr %a63 call void @finch_str_drop(ptr %a63) - br label %logic.rend1314 -logic.rend1314: - br label %logic.end1313 -logic.end1313: - %t64 = phi i1 [ true, %logic.from1311 ], [ %t62, %logic.rend1314 ] - br label %logic.from1315 -logic.from1315: - br i1 %t64, label %logic.rhs1316, label %logic.end1317 -logic.rhs1316: + br label %logic.rend1318 +logic.rend1318: + br label %logic.end1317 +logic.end1317: + %t64 = phi i1 [ true, %logic.from1315 ], [ %t62, %logic.rend1318 ] + br label %logic.from1319 +logic.from1319: + br i1 %t64, label %logic.rhs1320, label %logic.end1321 +logic.rhs1320: %t65 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t65, ptr %a66 store { ptr, i64, i64 } { ptr @.str.718, i64 1, i64 0 }, ptr %a67 %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) %t69 = icmp ne i32 %t68, 0 - br label %logic.rend1318 -logic.rend1318: - br label %logic.end1317 -logic.end1317: - %t70 = phi i1 [ false, %logic.from1315 ], [ %t69, %logic.rend1318 ] - br i1 %t70, label %then1319, label %endif1321 -then1319: + br label %logic.rend1322 +logic.rend1322: + br label %logic.end1321 +logic.end1321: + %t70 = phi i1 [ false, %logic.from1319 ], [ %t69, %logic.rend1322 ] + br i1 %t70, label %then1323, label %endif1325 +then1323: call void @finch_str_drop(ptr %a18) ret i1 true -endif1321: +endif1325: %t71 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t71, ptr %a72 store { ptr, i64, i64 } { ptr @.str.719, i64 1, i64 0 }, ptr %a73 %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) %t75 = icmp ne i32 %t74, 0 - br label %logic.from1322 -logic.from1322: - br i1 %t75, label %logic.rhs1323, label %logic.end1324 -logic.rhs1323: + br label %logic.from1326 +logic.from1326: + br i1 %t75, label %logic.rhs1327, label %logic.end1328 +logic.rhs1327: %t76 = load ptr, ptr %a1 %t77 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t76, i64 2) store { ptr, i64, i64 } %t77, ptr %a78 @@ -17125,15 +17151,15 @@ logic.rhs1323: %t81 = icmp ne i32 %t80, 0 store { ptr, i64, i64 } %t77, ptr %a82 call void @finch_str_drop(ptr %a82) - br label %logic.rend1325 -logic.rend1325: - br label %logic.end1324 -logic.end1324: - %t83 = phi i1 [ false, %logic.from1322 ], [ %t81, %logic.rend1325 ] - br label %logic.from1326 -logic.from1326: - br i1 %t83, label %logic.rhs1327, label %logic.end1328 -logic.rhs1327: + br label %logic.rend1329 +logic.rend1329: + br label %logic.end1328 +logic.end1328: + %t83 = phi i1 [ false, %logic.from1326 ], [ %t81, %logic.rend1329 ] + br label %logic.from1330 +logic.from1330: + br i1 %t83, label %logic.rhs1331, label %logic.end1332 +logic.rhs1331: %t84 = load ptr, ptr %a1 %t85 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t84, i64 3) store { ptr, i64, i64 } %t85, ptr %a86 @@ -17142,51 +17168,51 @@ logic.rhs1327: %t89 = icmp ne i32 %t88, 0 store { ptr, i64, i64 } %t85, ptr %a90 call void @finch_str_drop(ptr %a90) - br label %logic.rend1329 -logic.rend1329: - br label %logic.end1328 -logic.end1328: - %t91 = phi i1 [ false, %logic.from1326 ], [ %t89, %logic.rend1329 ] - br label %logic.from1330 -logic.from1330: - br i1 %t91, label %logic.rhs1331, label %logic.end1332 -logic.rhs1331: + br label %logic.rend1333 +logic.rend1333: + br label %logic.end1332 +logic.end1332: + %t91 = phi i1 [ false, %logic.from1330 ], [ %t89, %logic.rend1333 ] + br label %logic.from1334 +logic.from1334: + br i1 %t91, label %logic.rhs1335, label %logic.end1336 +logic.rhs1335: %t92 = load ptr, ptr %a1 %t93 = icmp eq ptr %t92, null - br i1 %t93, label %panic1333, label %ok1334 -panic1333: + br i1 %t93, label %panic1337, label %ok1338 +panic1337: call void @finch_panic(ptr @.str.722, i64 215, ptr @.str.723) unreachable -ok1334: +ok1338: %t94 = getelementptr inbounds %S.parser.Parser, ptr %t92, i32 0, i32 0 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic1335, label %ok1336 -panic1335: + br i1 %t96, label %panic1339, label %ok1340 +panic1339: call void @finch_panic(ptr @.str.724, i64 215, ptr @.str.725) unreachable -ok1336: +ok1340: %t97 = getelementptr inbounds %S.parser.Parser, ptr %t95, i32 0, i32 1 %t98 = load i64, ptr %t97 %t99 = add i64 %t98, 3 %t100 = load { ptr, i64, i64 }, ptr %t94 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 %t99, %t101 - br i1 %t102, label %range1337, label %inrange1338 -range1337: + br i1 %t102, label %range1341, label %inrange1342 +range1341: call void @finch_panic_index(ptr @.str.726, i64 215, i64 %t99, i64 %t101) unreachable -inrange1338: +inrange1342: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds %S.lexer.Token, ptr %t103, i64 %t99 %t105 = getelementptr inbounds %S.lexer.Token, ptr %t104, i32 0, i32 4 %t106 = load i1, ptr %t105 %t107 = xor i1 %t106, true - br label %logic.rend1339 -logic.rend1339: - br label %logic.end1332 -logic.end1332: - %t108 = phi i1 [ false, %logic.from1330 ], [ %t107, %logic.rend1339 ] + br label %logic.rend1343 +logic.rend1343: + br label %logic.end1336 +logic.end1336: + %t108 = phi i1 [ false, %logic.from1334 ], [ %t107, %logic.rend1343 ] call void @finch_str_drop(ptr %a18) ret i1 %t108 } @@ -17209,35 +17235,35 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.727, i64 1, i64 0 }) - br label %logic.from1340 -logic.from1340: - br i1 %t3, label %logic.end1342, label %logic.rhs1341 -logic.rhs1341: - %t4 = load ptr, ptr %a1 - %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.728, i64 3, i64 0 }) - br label %logic.rend1343 -logic.rend1343: - br label %logic.end1342 -logic.end1342: - %t6 = phi i1 [ true, %logic.from1340 ], [ %t5, %logic.rend1343 ] br label %logic.from1344 logic.from1344: - br i1 %t6, label %logic.end1346, label %logic.rhs1345 + br i1 %t3, label %logic.end1346, label %logic.rhs1345 logic.rhs1345: + %t4 = load ptr, ptr %a1 + %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.728, i64 3, i64 0 }) + br label %logic.rend1347 +logic.rend1347: + br label %logic.end1346 +logic.end1346: + %t6 = phi i1 [ true, %logic.from1344 ], [ %t5, %logic.rend1347 ] + br label %logic.from1348 +logic.from1348: + br i1 %t6, label %logic.end1350, label %logic.rhs1349 +logic.rhs1349: %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.cur(ptr %t7) %t9 = extractvalue %S.lexer.Token %t8, 4 store %S.lexer.Token %t8, ptr %a10 call void @finch.drop.S_lexer_Token(ptr %a10) - br label %logic.rend1347 -logic.rend1347: - br label %logic.end1346 -logic.end1346: - %t11 = phi i1 [ true, %logic.from1344 ], [ %t9, %logic.rend1347 ] - br i1 %t11, label %then1348, label %endif1350 -then1348: + br label %logic.rend1351 +logic.rend1351: + br label %logic.end1350 +logic.end1350: + %t11 = phi i1 [ true, %logic.from1348 ], [ %t9, %logic.rend1351 ] + br i1 %t11, label %then1352, label %endif1354 +then1352: ret void -endif1350: +endif1354: %t12 = load ptr, ptr %a1 %t13 = load ptr, ptr %a1 %t14 = call %S.lexer.Token @finch.parser.cur(ptr %t13) @@ -17327,33 +17353,33 @@ entry: %a171 = alloca %S.ast.Node, align 16 store ptr %p0, ptr %a1 store %S.ast.Program zeroinitializer, ptr %a2 - br label %while.cond1351 -while.cond1351: + br label %while.cond1355 +while.cond1355: %t3 = load ptr, ptr %a1 %t4 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } { ptr @.str.731, i64 3, i64 0 }) %t5 = xor i1 %t4, true - br i1 %t5, label %while.body1352, label %while.end1353 -while.body1352: + br i1 %t5, label %while.body1356, label %while.end1357 +while.body1356: %t6 = load ptr, ptr %a1 %t7 = call i1 @finch.parser.at(ptr %t6, { ptr, i64, i64 } { ptr @.str.732, i64 6, i64 0 }) - br i1 %t7, label %then1354, label %else1355 -then1354: + br i1 %t7, label %then1358, label %else1359 +then1358: %t8 = load ptr, ptr %a1 %t9 = call %S.lexer.Token @finch.parser.next(ptr %t8) store %S.lexer.Token %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.733, i64 6, i64 0 }) - br i1 %t12, label %then1357, label %else1358 -then1357: + br i1 %t12, label %then1361, label %else1362 +then1361: %t13 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 4 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic1360, label %ok1361 -panic1360: + br i1 %t16, label %panic1364, label %ok1365 +panic1364: call void @finch_panic(ptr @.str.734, i64 233, ptr @.str.735) unreachable -ok1361: +ok1365: %t17 = getelementptr inbounds %S.parser.Parser, ptr %t15, i32 0, i32 4 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a20 @@ -17414,18 +17440,18 @@ ok1361: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i64 %t61 store { ptr, i64, i64 } %t59, ptr %t64 store i64 %t62, ptr %t53 - br label %endif1359 -else1358: + br label %endif1363 +else1362: %t65 = load ptr, ptr %a1 %t66 = call i1 @finch.parser.at(ptr %t65, { ptr, i64, i64 } { ptr @.str.738, i64 5, i64 0 }) %t67 = xor i1 %t66, true - br i1 %t67, label %then1362, label %endif1364 -then1362: + br i1 %t67, label %then1366, label %endif1368 +then1366: %t68 = load ptr, ptr %a1 %t69 = load %S.lexer.Token, ptr %a10 call void @finch.parser.fail(ptr %t68, %S.lexer.Token %t69, { ptr, i64, i64 } { ptr @.str.739, i64 51, i64 0 }) - br label %endif1364 -endif1364: + br label %endif1368 +endif1368: %t70 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 2 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load ptr, ptr %a1 @@ -17443,15 +17469,15 @@ endif1364: %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i64 %t79 store { ptr, i64, i64 } %t77, ptr %t82 store i64 %t80, ptr %t71 - br label %endif1359 -endif1359: + br label %endif1363 +endif1363: call void @finch.drop.S_lexer_Token(ptr %a10) - br label %endif1356 -else1355: + br label %endif1360 +else1359: %t83 = load ptr, ptr %a1 %t84 = call i1 @finch.parser.at(ptr %t83, { ptr, i64, i64 } { ptr @.str.740, i64 4, i64 0 }) - br i1 %t84, label %then1365, label %else1366 -then1365: + br i1 %t84, label %then1369, label %else1370 +then1369: %t85 = load ptr, ptr %a1 %t86 = call %S.lexer.Token @finch.parser.next(ptr %t85) store %S.lexer.Token %t86, ptr %a87 @@ -17469,86 +17495,86 @@ then1365: store { ptr, i64, i64 } { ptr @.str.744, i64 2, i64 0 }, ptr %a99 %t100 = call i32 @finch_str_ends(ptr %a97, ptr %a99) %t101 = icmp ne i32 %t100, 0 - br label %logic.from1368 -logic.from1368: - br i1 %t101, label %logic.end1370, label %logic.rhs1369 -logic.rhs1369: + br label %logic.from1372 +logic.from1372: + br i1 %t101, label %logic.end1374, label %logic.rhs1373 +logic.rhs1373: %t102 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.746, i64 2, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_ends(ptr %a103, ptr %a105) %t107 = icmp ne i32 %t106, 0 - br label %logic.rend1371 -logic.rend1371: - br label %logic.end1370 -logic.end1370: - %t108 = phi i1 [ true, %logic.from1368 ], [ %t107, %logic.rend1371 ] - br label %logic.from1372 -logic.from1372: - br i1 %t108, label %logic.end1374, label %logic.rhs1373 -logic.rhs1373: + br label %logic.rend1375 +logic.rend1375: + br label %logic.end1374 +logic.end1374: + %t108 = phi i1 [ true, %logic.from1372 ], [ %t107, %logic.rend1375 ] + br label %logic.from1376 +logic.from1376: + br i1 %t108, label %logic.end1378, label %logic.rhs1377 +logic.rhs1377: %t109 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.748, i64 2, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_ends(ptr %a110, ptr %a112) %t114 = icmp ne i32 %t113, 0 - br label %logic.rend1375 -logic.rend1375: - br label %logic.end1374 -logic.end1374: - %t115 = phi i1 [ true, %logic.from1372 ], [ %t114, %logic.rend1375 ] + br label %logic.rend1379 +logic.rend1379: + br label %logic.end1378 +logic.end1378: + %t115 = phi i1 [ true, %logic.from1376 ], [ %t114, %logic.rend1379 ] store i1 %t115, ptr %a116 %t117 = load i1, ptr %a116 %t118 = xor i1 %t117, true - br label %logic.from1376 -logic.from1376: - br i1 %t118, label %logic.rhs1377, label %logic.end1378 -logic.rhs1377: + br label %logic.from1380 +logic.from1380: + br i1 %t118, label %logic.rhs1381, label %logic.end1382 +logic.rhs1381: %t119 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.750, i64 3, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_starts(ptr %a120, ptr %a122) %t124 = icmp ne i32 %t123, 0 - br label %logic.from1379 -logic.from1379: - br i1 %t124, label %logic.end1381, label %logic.rhs1380 -logic.rhs1380: + br label %logic.from1383 +logic.from1383: + br i1 %t124, label %logic.end1385, label %logic.rhs1384 +logic.rhs1384: %t125 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t125, ptr %a126 store { ptr, i64, i64 } { ptr @.str.752, i64 3, i64 0 }, ptr %a128 %t129 = call i64 @finch_str_find(ptr %a126, ptr %a128) %t130 = icmp sge i64 %t129, 0 - br label %logic.rend1382 -logic.rend1382: - br label %logic.end1381 -logic.end1381: - %t131 = phi i1 [ true, %logic.from1379 ], [ %t130, %logic.rend1382 ] - br label %logic.from1383 -logic.from1383: - br i1 %t131, label %logic.end1385, label %logic.rhs1384 -logic.rhs1384: + br label %logic.rend1386 +logic.rend1386: + br label %logic.end1385 +logic.end1385: + %t131 = phi i1 [ true, %logic.from1383 ], [ %t130, %logic.rend1386 ] + br label %logic.from1387 +logic.from1387: + br i1 %t131, label %logic.end1389, label %logic.rhs1388 +logic.rhs1388: %t132 = load { ptr, i64, i64 }, ptr %a95 store { ptr, i64, i64 } %t132, ptr %a133 store { ptr, i64, i64 } { ptr @.str.754, i64 1, i64 0 }, ptr %a135 %t136 = call i64 @finch_str_find(ptr %a133, ptr %a135) %t137 = icmp sge i64 %t136, 0 - br label %logic.rend1386 -logic.rend1386: - br label %logic.end1385 -logic.end1385: - %t138 = phi i1 [ true, %logic.from1383 ], [ %t137, %logic.rend1386 ] - br label %logic.rend1387 -logic.rend1387: - br label %logic.end1378 -logic.end1378: - %t139 = phi i1 [ false, %logic.from1376 ], [ %t138, %logic.rend1387 ] - br i1 %t139, label %then1388, label %endif1390 -then1388: + br label %logic.rend1390 +logic.rend1390: + br label %logic.end1389 +logic.end1389: + %t138 = phi i1 [ true, %logic.from1387 ], [ %t137, %logic.rend1390 ] + br label %logic.rend1391 +logic.rend1391: + br label %logic.end1382 +logic.end1382: + %t139 = phi i1 [ false, %logic.from1380 ], [ %t138, %logic.rend1391 ] + br i1 %t139, label %then1392, label %endif1394 +then1392: %t140 = load ptr, ptr %a1 %t141 = load %S.lexer.Token, ptr %a87 call void @finch.parser.fail(ptr %t140, %S.lexer.Token %t141, { ptr, i64, i64 } { ptr @.str.755, i64 65, i64 0 }) - br label %endif1390 -endif1390: + br label %endif1394 +endif1394: %t142 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 5 %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i32 0, i32 1 %t144 = load { ptr, i64, i64 }, ptr %a95 @@ -17564,12 +17590,12 @@ endif1390: store i64 %t149, ptr %t143 call void @finch_str_drop(ptr %a95) call void @finch.drop.S_lexer_Token(ptr %a87) - br label %endif1367 -else1366: + br label %endif1371 +else1370: %t152 = load ptr, ptr %a1 %t153 = call i1 @finch.parser.at(ptr %t152, { ptr, i64, i64 } { ptr @.str.756, i64 6, i64 0 }) - br i1 %t153, label %then1391, label %else1392 -then1391: + br i1 %t153, label %then1395, label %else1396 +then1395: %t154 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 %t156 = load ptr, ptr %a1 @@ -17581,12 +17607,12 @@ then1391: %t161 = getelementptr inbounds %S.ast.Node, ptr %t160, i64 %t158 store %S.ast.Node %t157, ptr %t161 store i64 %t159, ptr %t155 - br label %endif1393 -else1392: + br label %endif1397 +else1396: %t162 = load ptr, ptr %a1 %t163 = call i1 @finch.parser.at(ptr %t162, { ptr, i64, i64 } { ptr @.str.757, i64 4, i64 0 }) - br i1 %t163, label %then1394, label %else1395 -then1394: + br i1 %t163, label %then1398, label %else1399 +then1398: %t164 = load ptr, ptr %a1 %t165 = call %S.ast.Node @finch.parser.parseEnum(ptr %t164) store %S.ast.Node %t165, ptr %a166 @@ -17605,8 +17631,8 @@ then1394: store i64 %t174, ptr %t168 %t177 = getelementptr inbounds %S.ast.Node, ptr %a166, i32 0, i32 6 %t178 = load i1, ptr %t177 - br i1 %t178, label %then1397, label %endif1399 -then1397: + br i1 %t178, label %then1401, label %endif1403 +then1401: %t179 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t181 = load %S.ast.Node, ptr %a166 @@ -17618,11 +17644,11 @@ then1397: %t186 = getelementptr inbounds %S.ast.Node, ptr %t185, i64 %t183 store %S.ast.Node %t182, ptr %t186 store i64 %t184, ptr %t180 - br label %endif1399 -endif1399: + br label %endif1403 +endif1403: call void @finch.drop.S_ast_Node(ptr %a166) - br label %endif1396 -else1395: + br label %endif1400 +else1399: %t187 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 8 %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 %t189 = load ptr, ptr %a1 @@ -17634,16 +17660,16 @@ else1395: %t194 = getelementptr inbounds %S.ast.Node, ptr %t193, i64 %t191 store %S.ast.Node %t190, ptr %t194 store i64 %t192, ptr %t188 - br label %endif1396 -endif1396: - br label %endif1393 -endif1393: - br label %endif1367 -endif1367: - br label %endif1356 -endif1356: - br label %while.cond1351 -while.end1353: + br label %endif1400 +endif1400: + br label %endif1397 +endif1397: + br label %endif1371 +endif1371: + br label %endif1360 +endif1360: + br label %while.cond1355 +while.end1357: %t195 = load %S.ast.Program, ptr %a2 ret %S.ast.Program %t195 } @@ -17753,25 +17779,25 @@ entry: %t19 = call %S.lexer.Token @finch.parser.expect(ptr %t18, { ptr, i64, i64 } { ptr @.str.763, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.764, i64 3, i64 0 }) store %S.lexer.Token %t19, ptr %a20 call void @finch.drop.S_lexer_Token(ptr %a20) - br label %while.cond1400 -while.cond1400: + br label %while.cond1404 +while.cond1404: %t21 = load ptr, ptr %a1 %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.765, i64 1, i64 0 }) %t23 = xor i1 %t22, true - br i1 %t23, label %while.body1401, label %while.end1402 -while.body1401: + br i1 %t23, label %while.body1405, label %while.end1406 +while.body1405: %t24 = load ptr, ptr %a1 %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.766, i64 3, i64 0 }) - br i1 %t25, label %then1403, label %endif1405 -then1403: + br i1 %t25, label %then1407, label %endif1409 +then1407: %t26 = load ptr, ptr %a1 %t27 = load ptr, ptr %a1 %t28 = call %S.lexer.Token @finch.parser.cur(ptr %t27) call void @finch.parser.fail(ptr %t26, %S.lexer.Token %t28, { ptr, i64, i64 } { ptr @.str.767, i64 37, i64 0 }) store %S.lexer.Token %t28, ptr %a29 call void @finch.drop.S_lexer_Token(ptr %a29) - br label %endif1405 -endif1405: + br label %endif1409 +endif1409: %t30 = load ptr, ptr %a1 %t31 = call %S.ast.Node @finch.parser.node(ptr %t30, { ptr, i64, i64 } { ptr @.str.768, i64 7, i64 0 }) store %S.ast.Node %t31, ptr %a32 @@ -17790,17 +17816,17 @@ endif1405: call void @finch_str_drop(ptr %a42) %t43 = load ptr, ptr %a1 %t44 = call i1 @finch.parser.accept(ptr %t43, { ptr, i64, i64 } { ptr @.str.771, i64 1, i64 0 }) - br i1 %t44, label %then1406, label %endif1408 -then1406: + br i1 %t44, label %then1410, label %endif1412 +then1410: %t45 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 store i1 true, ptr %t45 - br label %while.cond1409 -while.cond1409: + br label %while.cond1413 +while.cond1413: %t46 = load ptr, ptr %a1 %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.772, i64 1, i64 0 }) %t48 = xor i1 %t47, true - br i1 %t48, label %while.body1410, label %while.end1411 -while.body1410: + br i1 %t48, label %while.body1414, label %while.end1415 +while.body1414: %t49 = load ptr, ptr %a1 %t50 = call %S.ast.Node @finch.parser.node(ptr %t49, { ptr, i64, i64 } { ptr @.str.773, i64 5, i64 0 }) store %S.ast.Node %t50, ptr %a51 @@ -17827,14 +17853,14 @@ while.body1410: %t67 = load ptr, ptr %a1 %t68 = call i1 @finch.parser.accept(ptr %t67, { ptr, i64, i64 } { ptr @.str.774, i64 1, i64 0 }) %t69 = xor i1 %t68, true - br i1 %t69, label %then1412, label %endif1414 -then1412: + br i1 %t69, label %then1416, label %endif1418 +then1416: call void @finch.drop.S_ast_Node(ptr %a51) - br label %while.end1411 -endif1414: + br label %while.end1415 +endif1418: call void @finch.drop.S_ast_Node(ptr %a51) - br label %while.cond1409 -while.end1411: + br label %while.cond1413 +while.end1415: %t70 = load ptr, ptr %a1 %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.775, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.776, i64 35, i64 0 }) store %S.lexer.Token %t71, ptr %a72 @@ -17843,8 +17869,8 @@ while.end1411: %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = icmp eq i64 %t75, 0 - br i1 %t76, label %then1415, label %endif1417 -then1415: + br i1 %t76, label %then1419, label %endif1421 +then1419: %t77 = load ptr, ptr %a1 %t78 = load ptr, ptr %a1 %t79 = call %S.lexer.Token @finch.parser.cur(ptr %t78) @@ -17879,37 +17905,37 @@ then1415: call void @finch.drop.S_lexer_Token(ptr %a103) store { ptr, i64, i64 } %t102, ptr %a104 call void @finch_str_drop(ptr %a104) - br label %endif1417 -endif1417: - br label %endif1408 -endif1408: + br label %endif1421 +endif1421: + br label %endif1412 +endif1412: %t105 = load ptr, ptr %a1 %t106 = call i1 @finch.parser.accept(ptr %t105, { ptr, i64, i64 } { ptr @.str.780, i64 1, i64 0 }) - br i1 %t106, label %then1418, label %endif1420 -then1418: + br i1 %t106, label %then1422, label %endif1424 +then1422: %t107 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 %t108 = load i1, ptr %t107 - br i1 %t108, label %then1421, label %endif1423 -then1421: + br i1 %t108, label %then1425, label %endif1427 +then1425: %t109 = load ptr, ptr %a1 %t110 = load ptr, ptr %a1 %t111 = call %S.lexer.Token @finch.parser.cur(ptr %t110) call void @finch.parser.fail(ptr %t109, %S.lexer.Token %t111, { ptr, i64, i64 } { ptr @.str.781, i64 52, i64 0 }) store %S.lexer.Token %t111, ptr %a112 call void @finch.drop.S_lexer_Token(ptr %a112) - br label %endif1423 -endif1423: + br label %endif1427 +endif1427: store { ptr, i64, i64 } { ptr @.str.782, i64 0, i64 0 }, ptr %a113 %t114 = load ptr, ptr %a1 %t115 = call i1 @finch.parser.accept(ptr %t114, { ptr, i64, i64 } { ptr @.str.783, i64 1, i64 0 }) - br i1 %t115, label %then1424, label %endif1426 -then1424: + br i1 %t115, label %then1428, label %endif1430 +then1428: %t116 = load { ptr, i64, i64 }, ptr %a113 store { ptr, i64, i64 } { ptr @.str.784, i64 1, i64 0 }, ptr %a113 store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) - br label %endif1426 -endif1426: + br label %endif1430 +endif1430: %t118 = load { ptr, i64, i64 }, ptr %a113 %t119 = load ptr, ptr %a1 %t120 = call %S.lexer.Token @finch.parser.expect(ptr %t119, { ptr, i64, i64 } { ptr @.str.785, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.786, i64 30, i64 0 }) @@ -17931,8 +17957,8 @@ endif1426: store { ptr, i64, i64 } %t132, ptr %a133 call void @finch_str_drop(ptr %a133) call void @finch_str_drop(ptr %a113) - br label %endif1420 -endif1420: + br label %endif1424 +endif1424: %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 %t136 = load %S.ast.Node, ptr %a32 @@ -17949,15 +17975,15 @@ endif1420: %t144 = load ptr, ptr %a1 %t145 = call i1 @finch.parser.accept(ptr %t144, { ptr, i64, i64 } { ptr @.str.787, i64 1, i64 0 }) %t146 = xor i1 %t145, true - br i1 %t146, label %then1427, label %endif1429 -then1427: + br i1 %t146, label %then1431, label %endif1433 +then1431: %t147 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t147) - br label %endif1429 -endif1429: + br label %endif1433 +endif1433: call void @finch.drop.S_ast_Node(ptr %a32) - br label %while.cond1400 -while.end1402: + br label %while.cond1404 +while.end1406: %t148 = load ptr, ptr %a1 %t149 = call %S.lexer.Token @finch.parser.next(ptr %t148) store %S.lexer.Token %t149, ptr %a150 @@ -17966,8 +17992,8 @@ while.end1402: %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load i64, ptr %t152 %t154 = icmp eq i64 %t153, 0 - br i1 %t154, label %then1430, label %endif1432 -then1430: + br i1 %t154, label %then1434, label %endif1436 +then1434: %t155 = load ptr, ptr %a1 %t156 = load ptr, ptr %a1 %t157 = call %S.lexer.Token @finch.parser.cur(ptr %t156) @@ -17988,22 +18014,22 @@ then1430: call void @finch.drop.S_lexer_Token(ptr %a169) store { ptr, i64, i64 } %t168, ptr %a170 call void @finch_str_drop(ptr %a170) - br label %endif1432 -endif1432: + br label %endif1436 +endif1436: %t171 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 %t172 = load i1, ptr %t171 - br i1 %t172, label %then1433, label %endif1435 -then1433: + br i1 %t172, label %then1437, label %endif1439 +then1437: %t173 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 store i64 0, ptr %a174 - br label %each.cond1436 -each.cond1436: + br label %each.cond1440 +each.cond1440: %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 %t176 = load i64, ptr %t175 %t177 = load i64, ptr %a174 %t178 = icmp slt i64 %t177, %t176 - br i1 %t178, label %each.body1437, label %each.end1439 -each.body1437: + br i1 %t178, label %each.body1441, label %each.end1443 +each.body1441: %t179 = load ptr, ptr %t173 %t180 = getelementptr inbounds %S.ast.Node, ptr %t179, i64 %t177 %t181 = load %S.ast.Node, ptr %t180 @@ -18012,8 +18038,8 @@ each.body1437: %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 %t185 = load i64, ptr %t184 %t186 = icmp sgt i64 %t185, 0 - br i1 %t186, label %then1440, label %endif1442 -then1440: + br i1 %t186, label %then1444, label %endif1446 +then1444: %t187 = load ptr, ptr %a1 %t188 = load ptr, ptr %a1 %t189 = call %S.lexer.Token @finch.parser.cur(ptr %t188) @@ -18048,17 +18074,17 @@ then1440: call void @finch.drop.S_lexer_Token(ptr %a213) store { ptr, i64, i64 } %t212, ptr %a214 call void @finch_str_drop(ptr %a214) - br label %endif1442 -endif1442: - br label %each.step1438 -each.step1438: + br label %endif1446 +endif1446: + br label %each.step1442 +each.step1442: %t215 = load i64, ptr %a174 %t216 = add i64 %t215, 1 store i64 %t216, ptr %a174 - br label %each.cond1436 -each.end1439: - br label %endif1435 -endif1435: + br label %each.cond1440 +each.end1443: + br label %endif1439 +endif1439: %t217 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t217 } @@ -18142,14 +18168,14 @@ entry: store i64 %t42, ptr %t36 %t45 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 store i64 0, ptr %a46 - br label %each.cond1443 -each.cond1443: + br label %each.cond1447 +each.cond1447: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 %t48 = load i64, ptr %t47 %t49 = load i64, ptr %a46 %t50 = icmp slt i64 %t49, %t48 - br i1 %t50, label %each.body1444, label %each.end1446 -each.body1444: + br i1 %t50, label %each.body1448, label %each.end1450 +each.body1448: %t51 = load ptr, ptr %t45 %t52 = getelementptr inbounds %S.ast.Node, ptr %t51, i64 %t49 %t53 = load %S.ast.Node, ptr %t52 @@ -18158,12 +18184,12 @@ each.body1444: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 %t57 = load i64, ptr %t56 store i64 0, ptr %a58 - br label %for.cond1447 -for.cond1447: + br label %for.cond1451 +for.cond1451: %t59 = load i64, ptr %a58 %t60 = icmp slt i64 %t59, %t57 - br i1 %t60, label %for.body1448, label %for.end1450 -for.body1448: + br i1 %t60, label %for.body1452, label %for.end1454 +for.body1452: %t61 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.797, i64 5, i64 0 }, 0 %t62 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 1 %t63 = load { ptr, i64, i64 }, ptr %t62 @@ -18198,11 +18224,11 @@ for.body1448: %t90 = load { ptr, i64, i64 }, ptr %t88 %t91 = extractvalue { ptr, i64, i64 } %t90, 1 %t92 = icmp uge i64 %t89, %t91 - br i1 %t92, label %range1451, label %inrange1452 -range1451: + br i1 %t92, label %range1455, label %inrange1456 +range1455: call void @finch_panic_index(ptr @.str.799, i64 333, i64 %t89, i64 %t91) unreachable -inrange1452: +inrange1456: %t93 = extractvalue { ptr, i64, i64 } %t90, 0 %t94 = getelementptr inbounds %S.ast.Node, ptr %t93, i64 %t89 %t95 = getelementptr inbounds %S.ast.Node, ptr %t94, i32 0, i32 5 @@ -18229,20 +18255,20 @@ inrange1452: store %S.ast.Node %t108, ptr %t112 store i64 %t110, ptr %t104 call void @finch.drop.S_ast_Node(ptr %a87) - br label %for.step1449 -for.step1449: + br label %for.step1453 +for.step1453: %t113 = load i64, ptr %a58 %t114 = add i64 %t113, 1 store i64 %t114, ptr %a58 - br label %for.cond1447 -for.end1450: - br label %each.step1445 -each.step1445: + br label %for.cond1451 +for.end1454: + br label %each.step1449 +each.step1449: %t115 = load i64, ptr %a46 %t116 = add i64 %t115, 1 store i64 %t116, ptr %a46 - br label %each.cond1443 -each.end1446: + br label %each.cond1447 +each.end1450: %t117 = load %S.ast.Node, ptr %a18 call void @finch.drop.S_ast_Node(ptr %a30) ret %S.ast.Node %t117 @@ -18295,42 +18321,42 @@ entry: call void @finch.drop.S_lexer_Token(ptr %a21) %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic1453, label %ok1454 -panic1453: + br i1 %t23, label %panic1457, label %ok1458 +panic1457: call void @finch_panic(ptr @.str.805, i64 348, ptr @.str.806) unreachable -ok1454: +ok1458: %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 2 %t25 = load i64, ptr %t24 store i64 %t25, ptr %a26 %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic1455, label %ok1456 -panic1455: + br i1 %t28, label %panic1459, label %ok1460 +panic1459: call void @finch_panic(ptr @.str.807, i64 349, ptr @.str.808) unreachable -ok1456: +ok1460: %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 2 store i64 0, ptr %t29 - br label %while.cond1457 -while.cond1457: + br label %while.cond1461 +while.cond1461: %t30 = load ptr, ptr %a1 %t31 = call i1 @finch.parser.at(ptr %t30, { ptr, i64, i64 } { ptr @.str.809, i64 1, i64 0 }) %t32 = xor i1 %t31, true - br i1 %t32, label %while.body1458, label %while.end1459 -while.body1458: + br i1 %t32, label %while.body1462, label %while.end1463 +while.body1462: %t33 = load ptr, ptr %a1 %t34 = call i1 @finch.parser.at(ptr %t33, { ptr, i64, i64 } { ptr @.str.810, i64 3, i64 0 }) - br i1 %t34, label %then1460, label %endif1462 -then1460: + br i1 %t34, label %then1464, label %endif1466 +then1464: %t35 = load ptr, ptr %a1 %t36 = load ptr, ptr %a1 %t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36) call void @finch.parser.fail(ptr %t35, %S.lexer.Token %t37, { ptr, i64, i64 } { ptr @.str.811, i64 37, i64 0 }) store %S.lexer.Token %t37, ptr %a38 call void @finch.drop.S_lexer_Token(ptr %a38) - br label %endif1462 -endif1462: + br label %endif1466 +endif1466: %t39 = load ptr, ptr %a1 %t40 = call %S.ast.Node @finch.parser.node(ptr %t39, { ptr, i64, i64 } { ptr @.str.812, i64 3, i64 0 }) store %S.ast.Node %t40, ptr %a41 @@ -18339,16 +18365,16 @@ endif1462: store %S.ast.Node %t43, ptr %a44 %t45 = load ptr, ptr %a1 %t46 = call i1 @finch.parser.accept(ptr %t45, { ptr, i64, i64 } { ptr @.str.814, i64 4, i64 0 }) - br i1 %t46, label %then1463, label %else1464 -then1463: + br i1 %t46, label %then1467, label %else1468 +then1467: %t47 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 6 store i1 true, ptr %t47 - br label %endif1465 -else1464: - br label %while.cond1466 -while.cond1466: - br label %while.body1467 -while.body1467: + br label %endif1469 +else1468: + br label %while.cond1470 +while.cond1470: + br label %while.body1471 +while.body1471: %t48 = getelementptr inbounds %S.ast.Node, ptr %a44, i32 0, i32 9 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 %t50 = load ptr, ptr %a1 @@ -18363,14 +18389,14 @@ while.body1467: %t56 = load ptr, ptr %a1 %t57 = call i1 @finch.parser.accept(ptr %t56, { ptr, i64, i64 } { ptr @.str.815, i64 1, i64 0 }) %t58 = xor i1 %t57, true - br i1 %t58, label %then1469, label %endif1471 -then1469: - br label %while.end1468 -endif1471: - br label %while.cond1466 -while.end1468: - br label %endif1465 -endif1465: + br i1 %t58, label %then1473, label %endif1475 +then1473: + br label %while.end1472 +endif1475: + br label %while.cond1470 +while.end1472: + br label %endif1469 +endif1469: %t59 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i32 0, i32 1 %t61 = load %S.ast.Node, ptr %a44 @@ -18390,19 +18416,19 @@ endif1465: call void @finch.drop.S_lexer_Token(ptr %a71) %t72 = load ptr, ptr %a1 %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.818, i64 1, i64 0 }) - br label %logic.from1472 -logic.from1472: - br i1 %t73, label %logic.rhs1473, label %logic.end1474 -logic.rhs1473: + br label %logic.from1476 +logic.from1476: + br i1 %t73, label %logic.rhs1477, label %logic.end1478 +logic.rhs1477: %t74 = load i1, ptr %a2 %t75 = xor i1 %t74, true - br label %logic.rend1475 -logic.rend1475: - br label %logic.end1474 -logic.end1474: - %t76 = phi i1 [ false, %logic.from1472 ], [ %t75, %logic.rend1475 ] - br i1 %t76, label %then1476, label %else1477 -then1476: + br label %logic.rend1479 +logic.rend1479: + br label %logic.end1478 +logic.end1478: + %t76 = phi i1 [ false, %logic.from1476 ], [ %t75, %logic.rend1479 ] + br i1 %t76, label %then1480, label %else1481 +then1480: %t77 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load ptr, ptr %a1 @@ -18414,11 +18440,11 @@ then1476: %t84 = getelementptr inbounds %S.ast.Node, ptr %t83, i64 %t81 store %S.ast.Node %t80, ptr %t84 store i64 %t82, ptr %t78 - br label %endif1478 -else1477: + br label %endif1482 +else1481: %t85 = load i1, ptr %a2 - br i1 %t85, label %then1479, label %else1480 -then1479: + br i1 %t85, label %then1483, label %else1484 +then1483: %t86 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load ptr, ptr %a1 @@ -18430,8 +18456,8 @@ then1479: %t93 = getelementptr inbounds %S.ast.Node, ptr %t92, i64 %t90 store %S.ast.Node %t89, ptr %t93 store i64 %t91, ptr %t87 - br label %endif1481 -else1480: + br label %endif1485 +else1484: %t94 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load ptr, ptr %a1 @@ -18443,10 +18469,10 @@ else1480: %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 store %S.ast.Node %t97, ptr %t101 store i64 %t99, ptr %t95 - br label %endif1481 -endif1481: - br label %endif1478 -endif1478: + br label %endif1485 +endif1485: + br label %endif1482 +endif1482: %t102 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i32 0, i32 1 %t104 = load %S.ast.Node, ptr %a41 @@ -18463,24 +18489,24 @@ endif1478: %t112 = load ptr, ptr %a1 %t113 = call i1 @finch.parser.accept(ptr %t112, { ptr, i64, i64 } { ptr @.str.819, i64 1, i64 0 }) %t114 = xor i1 %t113, true - br i1 %t114, label %then1482, label %endif1484 -then1482: + br i1 %t114, label %then1486, label %endif1488 +then1486: %t115 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t115) - br label %endif1484 -endif1484: + br label %endif1488 +endif1488: call void @finch.drop.S_ast_Node(ptr %a44) call void @finch.drop.S_ast_Node(ptr %a41) - br label %while.cond1457 -while.end1459: + br label %while.cond1461 +while.end1463: %t116 = load i64, ptr %a26 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null - br i1 %t118, label %panic1485, label %ok1486 -panic1485: + br i1 %t118, label %panic1489, label %ok1490 +panic1489: call void @finch_panic(ptr @.str.820, i64 380, ptr @.str.821) unreachable -ok1486: +ok1490: %t119 = getelementptr inbounds %S.parser.Parser, ptr %t117, i32 0, i32 2 store i64 %t116, ptr %t119 %t120 = load ptr, ptr %a1 @@ -18491,16 +18517,16 @@ ok1486: %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i32 0, i32 1 %t125 = load i64, ptr %t124 %t126 = icmp eq i64 %t125, 1 - br i1 %t126, label %then1487, label %endif1489 -then1487: + br i1 %t126, label %then1491, label %endif1493 +then1491: %t127 = load ptr, ptr %a1 %t128 = load ptr, ptr %a1 %t129 = call %S.lexer.Token @finch.parser.cur(ptr %t128) call void @finch.parser.fail(ptr %t127, %S.lexer.Token %t129, { ptr, i64, i64 } { ptr @.str.822, i64 30, i64 0 }) store %S.lexer.Token %t129, ptr %a130 call void @finch.drop.S_lexer_Token(ptr %a130) - br label %endif1489 -endif1489: + br label %endif1493 +endif1493: %t131 = load %S.ast.Node, ptr %a5 ret %S.ast.Node %t131 } @@ -18520,10 +18546,10 @@ entry: %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.823, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.824, i64 3, i64 0 }) store %S.lexer.Token %t4, ptr %a5 call void @finch.drop.S_lexer_Token(ptr %a5) - br label %while.cond1490 -while.cond1490: - br label %while.body1491 -while.body1491: + br label %while.cond1494 +while.cond1494: + br label %while.body1495 +while.body1495: %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t7 = load ptr, ptr %a1 %t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.825, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.826, i64 29, i64 0 }) @@ -18543,12 +18569,12 @@ while.body1491: %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.accept(ptr %t18, { ptr, i64, i64 } { ptr @.str.827, i64 1, i64 0 }) %t20 = xor i1 %t19, true - br i1 %t20, label %then1493, label %endif1495 -then1493: - br label %while.end1492 -endif1495: - br label %while.cond1490 -while.end1492: + br i1 %t20, label %then1497, label %endif1499 +then1497: + br label %while.end1496 +endif1499: + br label %while.cond1494 +while.end1496: %t21 = load ptr, ptr %a1 %t22 = call %S.lexer.Token @finch.parser.expect(ptr %t21, { ptr, i64, i64 } { ptr @.str.828, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.829, i64 29, i64 0 }) store %S.lexer.Token %t22, ptr %a23 @@ -18612,8 +18638,8 @@ entry: call void @finch_str_drop(ptr %a17) %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.835, i64 1, i64 0 }) - br i1 %t19, label %then1496, label %endif1498 -then1496: + br i1 %t19, label %then1500, label %endif1502 +then1500: %t20 = load ptr, ptr %a1 %t21 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t20) %t22 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 @@ -18621,39 +18647,39 @@ then1496: store { ptr, i64, i64 } %t21, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 call void @finch.drop.arr_str(ptr %a24) - br label %endif1498 -endif1498: + br label %endif1502 +endif1502: %t25 = load ptr, ptr %a1 %t26 = call %S.lexer.Token @finch.parser.expect(ptr %t25, { ptr, i64, i64 } { ptr @.str.836, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.837, i64 3, i64 0 }) store %S.lexer.Token %t26, ptr %a27 call void @finch.drop.S_lexer_Token(ptr %a27) - br label %while.cond1499 -while.cond1499: + br label %while.cond1503 +while.cond1503: %t28 = load ptr, ptr %a1 %t29 = call i1 @finch.parser.at(ptr %t28, { ptr, i64, i64 } { ptr @.str.838, i64 1, i64 0 }) %t30 = xor i1 %t29, true - br i1 %t30, label %while.body1500, label %while.end1501 -while.body1500: + br i1 %t30, label %while.body1504, label %while.end1505 +while.body1504: %t31 = load ptr, ptr %a1 %t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.839, i64 3, i64 0 }) - br i1 %t32, label %then1502, label %endif1504 -then1502: + br i1 %t32, label %then1506, label %endif1508 +then1506: %t33 = load ptr, ptr %a1 %t34 = load ptr, ptr %a1 %t35 = call %S.lexer.Token @finch.parser.cur(ptr %t34) call void @finch.parser.fail(ptr %t33, %S.lexer.Token %t35, { ptr, i64, i64 } { ptr @.str.840, i64 38, i64 0 }) store %S.lexer.Token %t35, ptr %a36 call void @finch.drop.S_lexer_Token(ptr %a36) - br label %endif1504 -endif1504: + br label %endif1508 +endif1508: %t37 = load ptr, ptr %a1 %t38 = call %S.ast.Node @finch.parser.node(ptr %t37, { ptr, i64, i64 } { ptr @.str.841, i64 5, i64 0 }) store %S.ast.Node %t38, ptr %a39 %t40 = load ptr, ptr %a1 %t41 = call i1 @finch.parser.atDeclaration(ptr %t40) %t42 = xor i1 %t41, true - br i1 %t42, label %then1505, label %endif1507 -then1505: + br i1 %t42, label %then1509, label %endif1511 +then1509: %t43 = load ptr, ptr %a1 %t44 = load ptr, ptr %a1 %t45 = call %S.lexer.Token @finch.parser.cur(ptr %t44) @@ -18679,8 +18705,8 @@ then1505: call void @finch.drop.S_lexer_Token(ptr %a60) store { ptr, i64, i64 } %t59, ptr %a61 call void @finch_str_drop(ptr %a61) - br label %endif1507 -endif1507: + br label %endif1511 +endif1511: %t62 = load ptr, ptr %a1 %t63 = call %S.ast.Type @finch.parser.parseType(ptr %t62) %t64 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 5 @@ -18703,8 +18729,8 @@ endif1507: call void @finch_str_drop(ptr %a76) %t77 = load ptr, ptr %a1 %t78 = call i1 @finch.parser.accept(ptr %t77, { ptr, i64, i64 } { ptr @.str.846, i64 1, i64 0 }) - br i1 %t78, label %then1508, label %endif1510 -then1508: + br i1 %t78, label %then1512, label %endif1514 +then1512: %t79 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 9 %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 %t81 = load ptr, ptr %a1 @@ -18716,8 +18742,8 @@ then1508: %t86 = getelementptr inbounds %S.ast.Node, ptr %t85, i64 %t83 store %S.ast.Node %t82, ptr %t86 store i64 %t84, ptr %t80 - br label %endif1510 -endif1510: + br label %endif1514 +endif1514: %t87 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 %t89 = load %S.ast.Node, ptr %a39 @@ -18734,8 +18760,8 @@ endif1510: %t97 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t97) call void @finch.drop.S_ast_Node(ptr %a39) - br label %while.cond1499 -while.end1501: + br label %while.cond1503 +while.end1505: %t98 = load ptr, ptr %a1 %t99 = call %S.lexer.Token @finch.parser.next(ptr %t98) store %S.lexer.Token %t99, ptr %a100 @@ -18801,10 +18827,10 @@ entry: store i1 %t6, ptr %t7 %t8 = load ptr, ptr %a1 %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.849, i64 5, i64 0 }) - br label %logic.from1511 -logic.from1511: - br i1 %t9, label %logic.rhs1512, label %logic.end1513 -logic.rhs1512: + br label %logic.from1515 +logic.from1515: + br i1 %t9, label %logic.rhs1516, label %logic.end1517 +logic.rhs1516: %t10 = load ptr, ptr %a1 %t11 = call %S.lexer.Token @finch.parser.cur(ptr %t10) %t12 = extractvalue %S.lexer.Token %t11, 1 @@ -18816,21 +18842,21 @@ logic.rhs1512: %t17 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t15) store { ptr, i64, i64 } %t15, ptr %a18 call void @finch_str_drop(ptr %a18) - br label %logic.rend1514 -logic.rend1514: - br label %logic.end1513 -logic.end1513: - %t19 = phi i1 [ false, %logic.from1511 ], [ %t17, %logic.rend1514 ] - br i1 %t19, label %then1515, label %endif1517 -then1515: + br label %logic.rend1518 +logic.rend1518: + br label %logic.end1517 +logic.end1517: + %t19 = phi i1 [ false, %logic.from1515 ], [ %t17, %logic.rend1518 ] + br i1 %t19, label %then1519, label %endif1521 +then1519: %t20 = load ptr, ptr %a1 %t21 = load ptr, ptr %a1 %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) call void @finch.parser.fail(ptr %t20, %S.lexer.Token %t22, { ptr, i64, i64 } { ptr @.str.850, i64 68, i64 0 }) store %S.lexer.Token %t22, ptr %a23 call void @finch.drop.S_lexer_Token(ptr %a23) - br label %endif1517 -endif1517: + br label %endif1521 +endif1521: %t24 = load ptr, ptr %a1 %t25 = call %S.lexer.Token @finch.parser.expect(ptr %t24, { ptr, i64, i64 } { ptr @.str.851, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.852, i64 26, i64 0 }) store %S.lexer.Token %t25, ptr %a26 @@ -18850,8 +18876,8 @@ endif1517: call void @finch_str_drop(ptr %a36) %t37 = load ptr, ptr %a1 %t38 = call i1 @finch.parser.at(ptr %t37, { ptr, i64, i64 } { ptr @.str.855, i64 1, i64 0 }) - br i1 %t38, label %then1518, label %endif1520 -then1518: + br i1 %t38, label %then1522, label %endif1524 +then1522: %t39 = load ptr, ptr %a1 %t40 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t39) %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 @@ -18859,12 +18885,12 @@ then1518: store { ptr, i64, i64 } %t40, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 call void @finch.drop.arr_str(ptr %a43) - br label %endif1520 -endif1520: + br label %endif1524 +endif1524: %t44 = load ptr, ptr %a1 %t45 = call i1 @finch.parser.accept(ptr %t44, { ptr, i64, i64 } { ptr @.str.856, i64 1, i64 0 }) - br i1 %t45, label %then1521, label %endif1523 -then1521: + br i1 %t45, label %then1525, label %endif1527 +then1525: %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 %t48 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 2 @@ -18888,19 +18914,19 @@ then1521: store { ptr, i64, i64 } %t59, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 call void @finch_str_drop(ptr %a63) - br label %endif1523 -endif1523: + br label %endif1527 +endif1527: %t64 = load ptr, ptr %a1 %t65 = call %S.lexer.Token @finch.parser.expect(ptr %t64, { ptr, i64, i64 } { ptr @.str.859, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.860, i64 3, i64 0 }) store %S.lexer.Token %t65, ptr %a66 call void @finch.drop.S_lexer_Token(ptr %a66) %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic1524, label %ok1525 -panic1524: + br i1 %t68, label %panic1528, label %ok1529 +panic1528: call void @finch_panic(ptr @.str.861, i64 446, ptr @.str.862) unreachable -ok1525: +ok1529: %t69 = getelementptr inbounds %S.parser.Parser, ptr %t67, i32 0, i32 2 %t70 = load i64, ptr %t69 %t71 = add i64 %t70, 1 @@ -18908,12 +18934,12 @@ ok1525: %t72 = load ptr, ptr %a1 %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.863, i64 1, i64 0 }) %t74 = xor i1 %t73, true - br i1 %t74, label %then1526, label %endif1528 -then1526: - br label %while.cond1529 -while.cond1529: - br label %while.body1530 -while.body1530: + br i1 %t74, label %then1530, label %endif1532 +then1530: + br label %while.cond1533 +while.cond1533: + br label %while.body1534 +while.body1534: %t75 = load ptr, ptr %a1 %t76 = call %S.ast.Node @finch.parser.node(ptr %t75, { ptr, i64, i64 } { ptr @.str.864, i64 5, i64 0 }) store %S.ast.Node %t76, ptr %a77 @@ -18953,23 +18979,23 @@ while.body1530: %t103 = load ptr, ptr %a1 %t104 = call i1 @finch.parser.accept(ptr %t103, { ptr, i64, i64 } { ptr @.str.867, i64 1, i64 0 }) %t105 = xor i1 %t104, true - br i1 %t105, label %then1532, label %endif1534 -then1532: + br i1 %t105, label %then1536, label %endif1538 +then1536: call void @finch.drop.S_ast_Node(ptr %a77) - br label %while.end1531 -endif1534: + br label %while.end1535 +endif1538: call void @finch.drop.S_ast_Node(ptr %a77) - br label %while.cond1529 -while.end1531: - br label %endif1528 -endif1528: + br label %while.cond1533 +while.end1535: + br label %endif1532 +endif1532: %t106 = load ptr, ptr %a1 %t107 = icmp eq ptr %t106, null - br i1 %t107, label %panic1535, label %ok1536 -panic1535: + br i1 %t107, label %panic1539, label %ok1540 +panic1539: call void @finch_panic(ptr @.str.868, i64 458, ptr @.str.869) unreachable -ok1536: +ok1540: %t108 = getelementptr inbounds %S.parser.Parser, ptr %t106, i32 0, i32 2 %t109 = load i64, ptr %t108 %t110 = sub i64 %t109, 1 @@ -18986,13 +19012,13 @@ ok1536: call void @finch.drop.S_ast_Type(ptr %a117) %t118 = load ptr, ptr %a1 %t119 = call i1 @finch.parser.accept(ptr %t118, { ptr, i64, i64 } { ptr @.str.873, i64 2, i64 0 }) - br i1 %t119, label %then1537, label %endif1539 -then1537: + br i1 %t119, label %then1541, label %endif1543 +then1541: %t120 = load ptr, ptr %a1 %t121 = call i1 @finch.parser.at(ptr %t120, { ptr, i64, i64 } { ptr @.str.874, i64 1, i64 0 }) %t122 = xor i1 %t121, true - br i1 %t122, label %then1540, label %endif1542 -then1540: + br i1 %t122, label %then1544, label %endif1546 +then1544: %t123 = load ptr, ptr %a1 %t124 = call %S.ast.Type @finch.parser.parseType(ptr %t123) %t125 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 @@ -19000,8 +19026,8 @@ then1540: store %S.ast.Type %t124, ptr %t125 store %S.ast.Type %t126, ptr %a127 call void @finch.drop.S_ast_Type(ptr %a127) - br label %endif1542 -endif1542: + br label %endif1546 +endif1546: %t128 = load ptr, ptr %a1 %t129 = call i1 @finch.parser.accept(ptr %t128, { ptr, i64, i64 } { ptr @.str.875, i64 1, i64 0 }) %t130 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 @@ -19009,10 +19035,10 @@ endif1542: %t131 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 %t132 = load i1, ptr %t131 %t133 = xor i1 %t132, true - br label %logic.from1543 -logic.from1543: - br i1 %t133, label %logic.rhs1544, label %logic.end1545 -logic.rhs1544: + br label %logic.from1547 +logic.from1547: + br i1 %t133, label %logic.rhs1548, label %logic.end1549 +logic.rhs1548: %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 %t135 = getelementptr inbounds %S.ast.Type, ptr %t134, i32 0, i32 0 %t136 = load { ptr, i64, i64 }, ptr %t135 @@ -19020,13 +19046,13 @@ logic.rhs1544: store { ptr, i64, i64 } { ptr @.str.876, i64 4, i64 0 }, ptr %a138 %t139 = call i32 @finch_str_eq(ptr %a137, ptr %a138) %t140 = icmp ne i32 %t139, 0 - br label %logic.rend1546 -logic.rend1546: - br label %logic.end1545 -logic.end1545: - %t141 = phi i1 [ false, %logic.from1543 ], [ %t140, %logic.rend1546 ] - br i1 %t141, label %then1547, label %endif1549 -then1547: + br label %logic.rend1550 +logic.rend1550: + br label %logic.end1549 +logic.end1549: + %t141 = phi i1 [ false, %logic.from1547 ], [ %t140, %logic.rend1550 ] + br i1 %t141, label %then1551, label %endif1553 +then1551: %t142 = load ptr, ptr %a1 %t143 = load ptr, ptr %a1 %t144 = call %S.lexer.Token @finch.parser.cur(ptr %t143) @@ -19052,10 +19078,10 @@ then1547: call void @finch.drop.S_lexer_Token(ptr %a159) store { ptr, i64, i64 } %t158, ptr %a160 call void @finch_str_drop(ptr %a160) - br label %endif1549 -endif1549: - br label %endif1539 -endif1539: + br label %endif1553 +endif1553: + br label %endif1543 +endif1543: %t161 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i32 0, i32 1 %t163 = load ptr, ptr %a1 @@ -19075,11 +19101,11 @@ endif1539: %t174 = load { ptr, i64, i64 }, ptr %t169 %t175 = extractvalue { ptr, i64, i64 } %t174, 1 %t176 = icmp uge i64 %t173, %t175 - br i1 %t176, label %range1550, label %inrange1551 -range1550: + br i1 %t176, label %range1554, label %inrange1555 +range1554: call void @finch_panic_index(ptr @.str.879, i64 471, i64 %t173, i64 %t175) unreachable -inrange1551: +inrange1555: %t177 = extractvalue { ptr, i64, i64 } %t174, 0 %t178 = getelementptr inbounds %S.ast.Node, ptr %t177, i64 %t173 %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i32 0, i32 14 @@ -19109,42 +19135,42 @@ entry: call void @finch.drop.S_lexer_Token(ptr %a7) %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic1552, label %ok1553 -panic1552: + br i1 %t9, label %panic1556, label %ok1557 +panic1556: call void @finch_panic(ptr @.str.883, i64 480, ptr @.str.884) unreachable -ok1553: +ok1557: %t10 = getelementptr inbounds %S.parser.Parser, ptr %t8, i32 0, i32 2 %t11 = load i64, ptr %t10 store i64 %t11, ptr %a12 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic1554, label %ok1555 -panic1554: + br i1 %t14, label %panic1558, label %ok1559 +panic1558: call void @finch_panic(ptr @.str.885, i64 481, ptr @.str.886) unreachable -ok1555: +ok1559: %t15 = getelementptr inbounds %S.parser.Parser, ptr %t13, i32 0, i32 2 store i64 0, ptr %t15 - br label %while.cond1556 -while.cond1556: + br label %while.cond1560 +while.cond1560: %t16 = load ptr, ptr %a1 %t17 = call i1 @finch.parser.at(ptr %t16, { ptr, i64, i64 } { ptr @.str.887, i64 1, i64 0 }) %t18 = xor i1 %t17, true - br i1 %t18, label %while.body1557, label %while.end1558 -while.body1557: + br i1 %t18, label %while.body1561, label %while.end1562 +while.body1561: %t19 = load ptr, ptr %a1 %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.888, i64 3, i64 0 }) - br i1 %t20, label %then1559, label %endif1561 -then1559: + br i1 %t20, label %then1563, label %endif1565 +then1563: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = call %S.lexer.Token @finch.parser.cur(ptr %t22) call void @finch.parser.fail(ptr %t21, %S.lexer.Token %t23, { ptr, i64, i64 } { ptr @.str.889, i64 35, i64 0 }) store %S.lexer.Token %t23, ptr %a24 call void @finch.drop.S_lexer_Token(ptr %a24) - br label %endif1561 -endif1561: + br label %endif1565 +endif1565: %t25 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 %t27 = load ptr, ptr %a1 @@ -19158,16 +19184,16 @@ endif1561: store i64 %t30, ptr %t26 %t33 = load ptr, ptr %a1 call void @finch.parser.endOfStatement(ptr %t33) - br label %while.cond1556 -while.end1558: + br label %while.cond1560 +while.end1562: %t34 = load i64, ptr %a12 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic1562, label %ok1563 -panic1562: + br i1 %t36, label %panic1566, label %ok1567 +panic1566: call void @finch_panic(ptr @.str.890, i64 489, ptr @.str.891) unreachable -ok1563: +ok1567: %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 2 store i64 %t34, ptr %t37 %t38 = load ptr, ptr %a1 @@ -19303,20 +19329,20 @@ entry: store { ptr, i64, i64 } { ptr @.str.892, i64 2, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br i1 %t9, label %then1564, label %endif1566 -then1564: + br i1 %t9, label %then1568, label %endif1570 +then1568: %t10 = load ptr, ptr %a1 %t11 = call %S.ast.Node @finch.parser.parseIf(ptr %t10) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t11 -endif1566: +endif1570: %t12 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.893, i64 5, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br i1 %t16, label %then1567, label %endif1569 -then1567: + br i1 %t16, label %then1571, label %endif1573 +then1571: %t17 = load ptr, ptr %a1 %t18 = call %S.ast.Node @finch.parser.node(ptr %t17, { ptr, i64, i64 } { ptr @.str.894, i64 5, i64 0 }) store %S.ast.Node %t18, ptr %a19 @@ -19349,14 +19375,14 @@ then1567: %t39 = load %S.ast.Node, ptr %a19 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t39 -endif1569: +endif1573: %t40 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.895, i64 3, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %then1570, label %endif1572 -then1570: + br i1 %t44, label %then1574, label %endif1576 +then1574: %t45 = load ptr, ptr %a1 %t46 = call %S.ast.Node @finch.parser.node(ptr %t45, { ptr, i64, i64 } { ptr @.str.896, i64 3, i64 0 }) store %S.ast.Node %t46, ptr %a47 @@ -19379,8 +19405,8 @@ then1570: call void @finch_str_drop(ptr %a60) %t61 = load ptr, ptr %a1 %t62 = call i1 @finch.parser.accept(ptr %t61, { ptr, i64, i64 } { ptr @.str.899, i64 1, i64 0 }) - br i1 %t62, label %then1573, label %endif1575 -then1573: + br i1 %t62, label %then1577, label %endif1579 +then1577: %t63 = load ptr, ptr %a1 %t64 = call %S.lexer.Token @finch.parser.expect(ptr %t63, { ptr, i64, i64 } { ptr @.str.900, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.901, i64 27, i64 0 }) %t65 = extractvalue %S.lexer.Token %t64, 1 @@ -19394,8 +19420,8 @@ then1573: store { ptr, i64, i64 } %t68, ptr %t70 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_drop(ptr %a72) - br label %endif1575 -endif1575: + br label %endif1579 +endif1579: %t73 = load ptr, ptr %a1 %t74 = call %S.lexer.Token @finch.parser.expect(ptr %t73, { ptr, i64, i64 } { ptr @.str.902, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.903, i64 4, i64 0 }) store %S.lexer.Token %t74, ptr %a75 @@ -19413,22 +19439,22 @@ endif1575: store i64 %t81, ptr %t77 %t84 = load ptr, ptr %a1 %t85 = call i1 @finch.parser.accept(ptr %t84, { ptr, i64, i64 } { ptr @.str.904, i64 2, i64 0 }) - br i1 %t85, label %then1576, label %else1577 -then1576: + br i1 %t85, label %then1580, label %else1581 +then1580: %t86 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load i64, ptr %t87 %t89 = icmp sgt i64 %t88, 0 - br i1 %t89, label %then1579, label %endif1581 -then1579: + br i1 %t89, label %then1583, label %endif1585 +then1583: %t90 = load ptr, ptr %a1 %t91 = load ptr, ptr %a1 %t92 = call %S.lexer.Token @finch.parser.cur(ptr %t91) call void @finch.parser.fail(ptr %t90, %S.lexer.Token %t92, { ptr, i64, i64 } { ptr @.str.905, i64 55, i64 0 }) store %S.lexer.Token %t92, ptr %a93 call void @finch.drop.S_lexer_Token(ptr %a93) - br label %endif1581 -endif1581: + br label %endif1585 +endif1585: %t94 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t96 = load ptr, ptr %a1 @@ -19440,15 +19466,15 @@ endif1581: %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 store %S.ast.Node %t97, ptr %t101 store i64 %t99, ptr %t95 - br label %endif1578 -else1577: + br label %endif1582 +else1581: %t102 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } { ptr @.str.906, i64 4, i64 0 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 call void @finch_str_drop(ptr %a104) - br label %endif1578 -endif1578: + br label %endif1582 +endif1582: %t105 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t105, i32 0, i32 1 %t107 = load ptr, ptr %a1 @@ -19463,26 +19489,26 @@ endif1578: %t113 = load %S.ast.Node, ptr %a47 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t113 -endif1572: +endif1576: %t114 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.907, i64 5, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 - br i1 %t118, label %then1582, label %endif1584 -then1582: + br i1 %t118, label %then1586, label %endif1588 +then1586: %t119 = load ptr, ptr %a1 %t120 = call %S.ast.Node @finch.parser.parseMatch(ptr %t119, i1 false) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t120 -endif1584: +endif1588: %t121 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t121, ptr %a122 store { ptr, i64, i64 } { ptr @.str.908, i64 6, i64 0 }, ptr %a123 %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) %t125 = icmp ne i32 %t124, 0 - br i1 %t125, label %then1585, label %endif1587 -then1585: + br i1 %t125, label %then1589, label %endif1591 +then1589: %t126 = load ptr, ptr %a1 %t127 = call %S.ast.Node @finch.parser.node(ptr %t126, { ptr, i64, i64 } { ptr @.str.909, i64 6, i64 0 }) store %S.ast.Node %t127, ptr %a128 @@ -19493,23 +19519,23 @@ then1585: %t132 = load ptr, ptr %a1 %t133 = call i1 @finch.parser.at(ptr %t132, { ptr, i64, i64 } { ptr @.str.910, i64 1, i64 0 }) %t134 = xor i1 %t133, true - br label %logic.from1588 -logic.from1588: - br i1 %t134, label %logic.rhs1589, label %logic.end1590 -logic.rhs1589: + br label %logic.from1592 +logic.from1592: + br i1 %t134, label %logic.rhs1593, label %logic.end1594 +logic.rhs1593: %t135 = load ptr, ptr %a1 %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) %t137 = extractvalue %S.lexer.Token %t136, 4 store %S.lexer.Token %t136, ptr %a138 call void @finch.drop.S_lexer_Token(ptr %a138) %t139 = xor i1 %t137, true - br label %logic.rend1591 -logic.rend1591: - br label %logic.end1590 -logic.end1590: - %t140 = phi i1 [ false, %logic.from1588 ], [ %t139, %logic.rend1591 ] - br i1 %t140, label %then1592, label %endif1594 -then1592: + br label %logic.rend1595 +logic.rend1595: + br label %logic.end1594 +logic.end1594: + %t140 = phi i1 [ false, %logic.from1592 ], [ %t139, %logic.rend1595 ] + br i1 %t140, label %then1596, label %endif1598 +then1596: %t141 = getelementptr inbounds %S.ast.Node, ptr %a128, i32 0, i32 9 %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 %t143 = load ptr, ptr %a1 @@ -19521,33 +19547,33 @@ then1592: %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 %t145 store %S.ast.Node %t144, ptr %t148 store i64 %t146, ptr %t142 - br label %endif1594 -endif1594: + br label %endif1598 +endif1598: %t149 = load %S.ast.Node, ptr %a128 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t149 -endif1587: +endif1591: %t150 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.911, i64 5, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp ne i32 %t153, 0 - br label %logic.from1595 -logic.from1595: - br i1 %t154, label %logic.end1597, label %logic.rhs1596 -logic.rhs1596: + br label %logic.from1599 +logic.from1599: + br i1 %t154, label %logic.end1601, label %logic.rhs1600 +logic.rhs1600: %t155 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t155, ptr %a156 store { ptr, i64, i64 } { ptr @.str.912, i64 8, i64 0 }, ptr %a157 %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) %t159 = icmp ne i32 %t158, 0 - br label %logic.rend1598 -logic.rend1598: - br label %logic.end1597 -logic.end1597: - %t160 = phi i1 [ true, %logic.from1595 ], [ %t159, %logic.rend1598 ] - br i1 %t160, label %then1599, label %endif1601 -then1599: + br label %logic.rend1602 +logic.rend1602: + br label %logic.end1601 +logic.end1601: + %t160 = phi i1 [ true, %logic.from1599 ], [ %t159, %logic.rend1602 ] + br i1 %t160, label %then1603, label %endif1605 +then1603: %t161 = load ptr, ptr %a1 %t162 = load { ptr, i64, i64 }, ptr %a4 %t163 = call %S.ast.Node @finch.parser.node(ptr %t161, { ptr, i64, i64 } %t162) @@ -19559,26 +19585,26 @@ then1599: %t168 = load %S.ast.Node, ptr %a164 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t168 -endif1601: +endif1605: %t169 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t169, ptr %a170 store { ptr, i64, i64 } { ptr @.str.913, i64 1, i64 0 }, ptr %a171 %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) %t173 = icmp ne i32 %t172, 0 - br i1 %t173, label %then1602, label %endif1604 -then1602: + br i1 %t173, label %then1606, label %endif1608 +then1606: %t174 = load ptr, ptr %a1 %t175 = call %S.ast.Node @finch.parser.parseBlock(ptr %t174) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t175 -endif1604: +endif1608: %t176 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t176, ptr %a177 store { ptr, i64, i64 } { ptr @.str.914, i64 5, i64 0 }, ptr %a178 %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) %t180 = icmp ne i32 %t179, 0 - br i1 %t180, label %then1605, label %endif1607 -then1605: + br i1 %t180, label %then1609, label %endif1611 +then1609: %t181 = load ptr, ptr %a1 %t182 = call %S.ast.Node @finch.parser.node(ptr %t181, { ptr, i64, i64 } { ptr @.str.915, i64 5, i64 0 }) store %S.ast.Node %t182, ptr %a183 @@ -19588,16 +19614,16 @@ then1605: call void @finch.drop.S_lexer_Token(ptr %a186) %t187 = load ptr, ptr %a1 %t188 = call i1 @finch.parser.at(ptr %t187, { ptr, i64, i64 } { ptr @.str.916, i64 5, i64 0 }) - br i1 %t188, label %then1608, label %endif1610 -then1608: + br i1 %t188, label %then1612, label %endif1614 +then1612: %t189 = load ptr, ptr %a1 %t190 = load ptr, ptr %a1 %t191 = call %S.lexer.Token @finch.parser.cur(ptr %t190) call void @finch.parser.fail(ptr %t189, %S.lexer.Token %t191, { ptr, i64, i64 } { ptr @.str.917, i64 33, i64 0 }) store %S.lexer.Token %t191, ptr %a192 call void @finch.drop.S_lexer_Token(ptr %a192) - br label %endif1610 -endif1610: + br label %endif1614 +endif1614: %t193 = getelementptr inbounds %S.ast.Node, ptr %a183, i32 0, i32 9 %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t193, i32 0, i32 1 %t195 = load ptr, ptr %a1 @@ -19612,56 +19638,56 @@ endif1610: %t201 = load %S.ast.Node, ptr %a183 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t201 -endif1607: +endif1611: %t202 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t202, ptr %a203 store { ptr, i64, i64 } { ptr @.str.918, i64 2, i64 0 }, ptr %a204 %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) %t206 = icmp ne i32 %t205, 0 - br label %logic.from1611 -logic.from1611: - br i1 %t206, label %logic.end1613, label %logic.rhs1612 -logic.rhs1612: + br label %logic.from1615 +logic.from1615: + br i1 %t206, label %logic.end1617, label %logic.rhs1616 +logic.rhs1616: %t207 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t207, ptr %a208 store { ptr, i64, i64 } { ptr @.str.919, i64 6, i64 0 }, ptr %a209 %t210 = call i32 @finch_str_eq(ptr %a208, ptr %a209) %t211 = icmp ne i32 %t210, 0 - br label %logic.rend1614 -logic.rend1614: - br label %logic.end1613 -logic.end1613: - %t212 = phi i1 [ true, %logic.from1611 ], [ %t211, %logic.rend1614 ] - br label %logic.from1615 -logic.from1615: - br i1 %t212, label %logic.end1617, label %logic.rhs1616 -logic.rhs1616: + br label %logic.rend1618 +logic.rend1618: + br label %logic.end1617 +logic.end1617: + %t212 = phi i1 [ true, %logic.from1615 ], [ %t211, %logic.rend1618 ] + br label %logic.from1619 +logic.from1619: + br i1 %t212, label %logic.end1621, label %logic.rhs1620 +logic.rhs1620: %t213 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t213, ptr %a214 store { ptr, i64, i64 } { ptr @.str.920, i64 6, i64 0 }, ptr %a215 %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) %t217 = icmp ne i32 %t216, 0 - br label %logic.rend1618 -logic.rend1618: - br label %logic.end1617 -logic.end1617: - %t218 = phi i1 [ true, %logic.from1615 ], [ %t217, %logic.rend1618 ] - br label %logic.from1619 -logic.from1619: - br i1 %t218, label %logic.end1621, label %logic.rhs1620 -logic.rhs1620: + br label %logic.rend1622 +logic.rend1622: + br label %logic.end1621 +logic.end1621: + %t218 = phi i1 [ true, %logic.from1619 ], [ %t217, %logic.rend1622 ] + br label %logic.from1623 +logic.from1623: + br i1 %t218, label %logic.end1625, label %logic.rhs1624 +logic.rhs1624: %t219 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t219, ptr %a220 store { ptr, i64, i64 } { ptr @.str.921, i64 4, i64 0 }, ptr %a221 %t222 = call i32 @finch_str_eq(ptr %a220, ptr %a221) %t223 = icmp ne i32 %t222, 0 - br label %logic.rend1622 -logic.rend1622: - br label %logic.end1621 -logic.end1621: - %t224 = phi i1 [ true, %logic.from1619 ], [ %t223, %logic.rend1622 ] - br i1 %t224, label %then1623, label %endif1625 -then1623: + br label %logic.rend1626 +logic.rend1626: + br label %logic.end1625 +logic.end1625: + %t224 = phi i1 [ true, %logic.from1623 ], [ %t223, %logic.rend1626 ] + br i1 %t224, label %then1627, label %endif1629 +then1627: %t225 = load ptr, ptr %a1 %t226 = load ptr, ptr %a1 %t227 = call %S.lexer.Token @finch.parser.cur(ptr %t226) @@ -19681,12 +19707,12 @@ then1623: call void @finch.drop.S_lexer_Token(ptr %a238) store { ptr, i64, i64 } %t237, ptr %a239 call void @finch_str_drop(ptr %a239) - br label %endif1625 -endif1625: + br label %endif1629 +endif1629: %t240 = load ptr, ptr %a1 %t241 = call i1 @finch.parser.atDeclaration(ptr %t240) - br i1 %t241, label %then1626, label %endif1628 -then1626: + br i1 %t241, label %then1630, label %endif1632 +then1630: %t242 = load ptr, ptr %a1 %t243 = call %S.ast.Node @finch.parser.node(ptr %t242, { ptr, i64, i64 } { ptr @.str.924, i64 4, i64 0 }) store %S.ast.Node %t243, ptr %a244 @@ -19714,8 +19740,8 @@ then1626: call void @finch_str_drop(ptr %a260) %t261 = load ptr, ptr %a1 %t262 = call i1 @finch.parser.accept(ptr %t261, { ptr, i64, i64 } { ptr @.str.927, i64 1, i64 0 }) - br i1 %t262, label %then1629, label %endif1631 -then1629: + br i1 %t262, label %then1633, label %endif1635 +then1633: %t263 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 9 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load ptr, ptr %a1 @@ -19727,18 +19753,18 @@ then1629: %t270 = getelementptr inbounds %S.ast.Node, ptr %t269, i64 %t267 store %S.ast.Node %t266, ptr %t270 store i64 %t268, ptr %t264 - br label %endif1631 -endif1631: + br label %endif1635 +endif1635: %t271 = load %S.ast.Node, ptr %a244 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t271 -endif1628: +endif1632: %t272 = load ptr, ptr %a1 %t273 = call i1 @finch.parser.at(ptr %t272, { ptr, i64, i64 } { ptr @.str.928, i64 5, i64 0 }) - br label %logic.from1632 -logic.from1632: - br i1 %t273, label %logic.rhs1633, label %logic.end1634 -logic.rhs1633: + br label %logic.from1636 +logic.from1636: + br i1 %t273, label %logic.rhs1637, label %logic.end1638 +logic.rhs1637: %t274 = load ptr, ptr %a1 %t275 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t274, i64 1) store { ptr, i64, i64 } %t275, ptr %a276 @@ -19747,13 +19773,13 @@ logic.rhs1633: %t279 = icmp ne i32 %t278, 0 store { ptr, i64, i64 } %t275, ptr %a280 call void @finch_str_drop(ptr %a280) - br label %logic.rend1635 -logic.rend1635: - br label %logic.end1634 -logic.end1634: - %t281 = phi i1 [ false, %logic.from1632 ], [ %t279, %logic.rend1635 ] - br i1 %t281, label %then1636, label %endif1638 -then1636: + br label %logic.rend1639 +logic.rend1639: + br label %logic.end1638 +logic.end1638: + %t281 = phi i1 [ false, %logic.from1636 ], [ %t279, %logic.rend1639 ] + br i1 %t281, label %then1640, label %endif1642 +then1640: %t282 = load ptr, ptr %a1 %t283 = call %S.ast.Node @finch.parser.node(ptr %t282, { ptr, i64, i64 } { ptr @.str.930, i64 4, i64 0 }) store %S.ast.Node %t283, ptr %a284 @@ -19788,7 +19814,7 @@ then1636: %t306 = load %S.ast.Node, ptr %a284 call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t306 -endif1638: +endif1642: %t307 = load ptr, ptr %a1 %t308 = call %S.lexer.Token @finch.parser.cur(ptr %t307) store %S.lexer.Token %t308, ptr %a309 @@ -19820,87 +19846,87 @@ endif1638: %t329 = load i64, ptr %t325 %t330 = load ptr, ptr %a324 store i64 0, ptr %a331 - br label %find.cond1639 -find.cond1639: + br label %find.cond1643 +find.cond1643: %t332 = load i64, ptr %a331 %t333 = icmp slt i64 %t332, %t329 - br i1 %t333, label %find.body1640, label %find.end1643 -find.body1640: + br i1 %t333, label %find.body1644, label %find.end1647 +find.body1644: %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t330, i64 %t332 %t335 = load { ptr, i64, i64 }, ptr %t334 store { ptr, i64, i64 } %t335, ptr %a336 store { ptr, i64, i64 } %t327, ptr %a337 %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) %t339 = icmp ne i32 %t338, 0 - br i1 %t339, label %find.hit1641, label %find.next1642 -find.hit1641: + br i1 %t339, label %find.hit1645, label %find.next1646 +find.hit1645: store i64 %t332, ptr %a328 - br label %find.end1643 -find.next1642: + br label %find.end1647 +find.next1646: %t340 = add i64 %t332, 1 store i64 %t340, ptr %a331 - br label %find.cond1639 -find.end1643: + br label %find.cond1643 +find.end1647: store { ptr, i64, i64 } %t327, ptr %a341 call void @finch_str_drop(ptr %a341) %t342 = load i64, ptr %a328 %t343 = icmp sge i64 %t342, 0 - br label %logic.from1644 -logic.from1644: - br i1 %t343, label %logic.rhs1645, label %logic.end1646 -logic.rhs1645: + br label %logic.from1648 +logic.from1648: + br i1 %t343, label %logic.rhs1649, label %logic.end1650 +logic.rhs1649: %t344 = load ptr, ptr %a1 %t345 = call i1 @finch.parser.sameLine(ptr %t344) - br label %logic.rend1647 -logic.rend1647: - br label %logic.end1646 -logic.end1646: - %t346 = phi i1 [ false, %logic.from1644 ], [ %t345, %logic.rend1647 ] - br i1 %t346, label %then1648, label %endif1650 -then1648: + br label %logic.rend1651 +logic.rend1651: + br label %logic.end1650 +logic.end1650: + %t346 = phi i1 [ false, %logic.from1648 ], [ %t345, %logic.rend1651 ] + br i1 %t346, label %then1652, label %endif1654 +then1652: %t347 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t348 = load { ptr, i64, i64 }, ptr %t347 store { ptr, i64, i64 } %t348, ptr %a349 store { ptr, i64, i64 } { ptr @.str.937, i64 3, i64 0 }, ptr %a350 %t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350) %t352 = icmp eq i32 %t351, 0 - br label %logic.from1651 -logic.from1651: - br i1 %t352, label %logic.rhs1652, label %logic.end1653 -logic.rhs1652: + br label %logic.from1655 +logic.from1655: + br i1 %t352, label %logic.rhs1656, label %logic.end1657 +logic.rhs1656: %t353 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t354 = load { ptr, i64, i64 }, ptr %t353 store { ptr, i64, i64 } %t354, ptr %a355 store { ptr, i64, i64 } { ptr @.str.938, i64 6, i64 0 }, ptr %a356 %t357 = call i32 @finch_str_eq(ptr %a355, ptr %a356) %t358 = icmp eq i32 %t357, 0 - br label %logic.rend1654 -logic.rend1654: - br label %logic.end1653 -logic.end1653: - %t359 = phi i1 [ false, %logic.from1651 ], [ %t358, %logic.rend1654 ] - br label %logic.from1655 -logic.from1655: - br i1 %t359, label %logic.rhs1656, label %logic.end1657 -logic.rhs1656: + br label %logic.rend1658 +logic.rend1658: + br label %logic.end1657 +logic.end1657: + %t359 = phi i1 [ false, %logic.from1655 ], [ %t358, %logic.rend1658 ] + br label %logic.from1659 +logic.from1659: + br i1 %t359, label %logic.rhs1660, label %logic.end1661 +logic.rhs1660: %t360 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t361 = load { ptr, i64, i64 }, ptr %t360 store { ptr, i64, i64 } %t361, ptr %a362 store { ptr, i64, i64 } { ptr @.str.939, i64 5, i64 0 }, ptr %a363 %t364 = call i32 @finch_str_eq(ptr %a362, ptr %a363) %t365 = icmp eq i32 %t364, 0 - br label %logic.rend1658 -logic.rend1658: - br label %logic.end1657 -logic.end1657: - %t366 = phi i1 [ false, %logic.from1655 ], [ %t365, %logic.rend1658 ] - br i1 %t366, label %then1659, label %endif1661 -then1659: + br label %logic.rend1662 +logic.rend1662: + br label %logic.end1661 +logic.end1661: + %t366 = phi i1 [ false, %logic.from1659 ], [ %t365, %logic.rend1662 ] + br i1 %t366, label %then1663, label %endif1665 +then1663: %t367 = load ptr, ptr %a1 %t368 = load %S.lexer.Token, ptr %a309 call void @finch.parser.fail(ptr %t367, %S.lexer.Token %t368, { ptr, i64, i64 } { ptr @.str.940, i64 66, i64 0 }) - br label %endif1661 -endif1661: + br label %endif1665 +endif1665: %t369 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.941, i64 6, i64 0 }, 0 %t370 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 %t371 = load i64, ptr %t370 @@ -19910,11 +19936,11 @@ endif1661: %t375 = insertvalue %S.ast.Node %t372, i64 %t374, 12 %t376 = load ptr, ptr %a1 %t377 = icmp eq ptr %t376, null - br i1 %t377, label %panic1662, label %ok1663 -panic1662: + br i1 %t377, label %panic1666, label %ok1667 +panic1666: call void @finch_panic(ptr @.str.942, i64 584, ptr @.str.943) unreachable -ok1663: +ok1667: %t378 = getelementptr inbounds %S.parser.Parser, ptr %t376, i32 0, i32 3 %t379 = load i64, ptr %t378 %t380 = insertvalue %S.ast.Node %t375, i64 %t379, 13 @@ -19962,65 +19988,65 @@ ok1663: call void @finch.drop.S_lexer_Token(ptr %a309) call void @finch_str_drop(ptr %a4) ret %S.ast.Node %t410 -endif1650: +endif1654: %t411 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t412 = load { ptr, i64, i64 }, ptr %t411 store { ptr, i64, i64 } %t412, ptr %a413 store { ptr, i64, i64 } { ptr @.str.944, i64 4, i64 0 }, ptr %a414 %t415 = call i32 @finch_str_eq(ptr %a413, ptr %a414) %t416 = icmp eq i32 %t415, 0 - br label %logic.from1664 -logic.from1664: - br i1 %t416, label %logic.rhs1665, label %logic.end1666 -logic.rhs1665: + br label %logic.from1668 +logic.from1668: + br i1 %t416, label %logic.rhs1669, label %logic.end1670 +logic.rhs1669: %t417 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t418 = load { ptr, i64, i64 }, ptr %t417 store { ptr, i64, i64 } %t418, ptr %a419 store { ptr, i64, i64 } { ptr @.str.945, i64 6, i64 0 }, ptr %a420 %t421 = call i32 @finch_str_eq(ptr %a419, ptr %a420) %t422 = icmp eq i32 %t421, 0 - br label %logic.rend1667 -logic.rend1667: - br label %logic.end1666 -logic.end1666: - %t423 = phi i1 [ false, %logic.from1664 ], [ %t422, %logic.rend1667 ] - br label %logic.from1668 -logic.from1668: - br i1 %t423, label %logic.rhs1669, label %logic.end1670 -logic.rhs1669: + br label %logic.rend1671 +logic.rend1671: + br label %logic.end1670 +logic.end1670: + %t423 = phi i1 [ false, %logic.from1668 ], [ %t422, %logic.rend1671 ] + br label %logic.from1672 +logic.from1672: + br i1 %t423, label %logic.rhs1673, label %logic.end1674 +logic.rhs1673: %t424 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t425 = load { ptr, i64, i64 }, ptr %t424 store { ptr, i64, i64 } %t425, ptr %a426 store { ptr, i64, i64 } { ptr @.str.946, i64 3, i64 0 }, ptr %a427 %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) %t429 = icmp eq i32 %t428, 0 - br label %logic.rend1671 -logic.rend1671: - br label %logic.end1670 -logic.end1670: - %t430 = phi i1 [ false, %logic.from1668 ], [ %t429, %logic.rend1671 ] - br label %logic.from1672 -logic.from1672: - br i1 %t430, label %logic.rhs1673, label %logic.end1674 -logic.rhs1673: + br label %logic.rend1675 +logic.rend1675: + br label %logic.end1674 +logic.end1674: + %t430 = phi i1 [ false, %logic.from1672 ], [ %t429, %logic.rend1675 ] + br label %logic.from1676 +logic.from1676: + br i1 %t430, label %logic.rhs1677, label %logic.end1678 +logic.rhs1677: %t431 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 %t432 = load { ptr, i64, i64 }, ptr %t431 store { ptr, i64, i64 } %t432, ptr %a433 store { ptr, i64, i64 } { ptr @.str.947, i64 2, i64 0 }, ptr %a434 %t435 = call i32 @finch_str_eq(ptr %a433, ptr %a434) %t436 = icmp eq i32 %t435, 0 - br label %logic.rend1675 -logic.rend1675: - br label %logic.end1674 -logic.end1674: - %t437 = phi i1 [ false, %logic.from1672 ], [ %t436, %logic.rend1675 ] - br i1 %t437, label %then1676, label %endif1678 -then1676: + br label %logic.rend1679 +logic.rend1679: + br label %logic.end1678 +logic.end1678: + %t437 = phi i1 [ false, %logic.from1676 ], [ %t436, %logic.rend1679 ] + br i1 %t437, label %then1680, label %endif1682 +then1680: %t438 = load ptr, ptr %a1 %t439 = load %S.lexer.Token, ptr %a309 call void @finch.parser.fail(ptr %t438, %S.lexer.Token %t439, { ptr, i64, i64 } { ptr @.str.948, i64 37, i64 0 }) - br label %endif1678 -endif1678: + br label %endif1682 +endif1682: %t440 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.949, i64 4, i64 0 }, 0 %t441 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 %t442 = load i64, ptr %t441 @@ -20030,11 +20056,11 @@ endif1678: %t446 = insertvalue %S.ast.Node %t443, i64 %t445, 12 %t447 = load ptr, ptr %a1 %t448 = icmp eq ptr %t447, null - br i1 %t448, label %panic1679, label %ok1680 -panic1679: + br i1 %t448, label %panic1683, label %ok1684 +panic1683: call void @finch_panic(ptr @.str.950, i64 593, ptr @.str.951) unreachable -ok1680: +ok1684: %t449 = getelementptr inbounds %S.parser.Parser, ptr %t447, i32 0, i32 3 %t450 = load i64, ptr %t449 %t451 = insertvalue %S.ast.Node %t446, i64 %t450, 13 @@ -20097,12 +20123,12 @@ entry: store i64 %t21, ptr %t17 %t24 = load ptr, ptr %a1 %t25 = call i1 @finch.parser.accept(ptr %t24, { ptr, i64, i64 } { ptr @.str.955, i64 4, i64 0 }) - br i1 %t25, label %then1681, label %endif1683 -then1681: + br i1 %t25, label %then1685, label %endif1687 +then1685: %t26 = load ptr, ptr %a1 %t27 = call i1 @finch.parser.at(ptr %t26, { ptr, i64, i64 } { ptr @.str.956, i64 2, i64 0 }) - br i1 %t27, label %then1684, label %else1685 -then1684: + br i1 %t27, label %then1688, label %else1689 +then1688: %t28 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 %t30 = load ptr, ptr %a1 @@ -20114,8 +20140,8 @@ then1684: %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 store %S.ast.Node %t31, ptr %t35 store i64 %t33, ptr %t29 - br label %endif1686 -else1685: + br label %endif1690 +else1689: %t36 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 %t38 = load ptr, ptr %a1 @@ -20127,10 +20153,10 @@ else1685: %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 store %S.ast.Node %t39, ptr %t43 store i64 %t41, ptr %t37 - br label %endif1686 -endif1686: - br label %endif1683 -endif1683: + br label %endif1690 +endif1690: + br label %endif1687 +endif1687: %t44 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t44 } @@ -20180,228 +20206,228 @@ entry: store { ptr, i64, i64 } { ptr @.str.957, i64 2, i64 0 }, ptr %a4 %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) %t6 = icmp ne i32 %t5, 0 - br i1 %t6, label %then1687, label %endif1689 -then1687: + br i1 %t6, label %then1691, label %endif1693 +then1691: ret i64 1 -endif1689: +endif1693: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.958, i64 2, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 - br i1 %t11, label %then1690, label %endif1692 -then1690: + br i1 %t11, label %then1694, label %endif1696 +then1694: ret i64 2 -endif1692: +endif1696: %t12 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.959, i64 2, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.from1693 -logic.from1693: - br i1 %t16, label %logic.end1695, label %logic.rhs1694 -logic.rhs1694: + br label %logic.from1697 +logic.from1697: + br i1 %t16, label %logic.end1699, label %logic.rhs1698 +logic.rhs1698: %t17 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.960, i64 2, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 - br label %logic.rend1696 -logic.rend1696: - br label %logic.end1695 -logic.end1695: - %t22 = phi i1 [ true, %logic.from1693 ], [ %t21, %logic.rend1696 ] - br label %logic.from1697 -logic.from1697: - br i1 %t22, label %logic.end1699, label %logic.rhs1698 -logic.rhs1698: + br label %logic.rend1700 +logic.rend1700: + br label %logic.end1699 +logic.end1699: + %t22 = phi i1 [ true, %logic.from1697 ], [ %t21, %logic.rend1700 ] + br label %logic.from1701 +logic.from1701: + br i1 %t22, label %logic.end1703, label %logic.rhs1702 +logic.rhs1702: %t23 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.961, i64 1, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.rend1700 -logic.rend1700: - br label %logic.end1699 -logic.end1699: - %t28 = phi i1 [ true, %logic.from1697 ], [ %t27, %logic.rend1700 ] - br label %logic.from1701 -logic.from1701: - br i1 %t28, label %logic.end1703, label %logic.rhs1702 -logic.rhs1702: + br label %logic.rend1704 +logic.rend1704: + br label %logic.end1703 +logic.end1703: + %t28 = phi i1 [ true, %logic.from1701 ], [ %t27, %logic.rend1704 ] + br label %logic.from1705 +logic.from1705: + br i1 %t28, label %logic.end1707, label %logic.rhs1706 +logic.rhs1706: %t29 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.962, i64 2, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br label %logic.rend1704 -logic.rend1704: - br label %logic.end1703 -logic.end1703: - %t34 = phi i1 [ true, %logic.from1701 ], [ %t33, %logic.rend1704 ] - br label %logic.from1705 -logic.from1705: - br i1 %t34, label %logic.end1707, label %logic.rhs1706 -logic.rhs1706: + br label %logic.rend1708 +logic.rend1708: + br label %logic.end1707 +logic.end1707: + %t34 = phi i1 [ true, %logic.from1705 ], [ %t33, %logic.rend1708 ] + br label %logic.from1709 +logic.from1709: + br i1 %t34, label %logic.end1711, label %logic.rhs1710 +logic.rhs1710: %t35 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.963, i64 1, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.rend1708 -logic.rend1708: - br label %logic.end1707 -logic.end1707: - %t40 = phi i1 [ true, %logic.from1705 ], [ %t39, %logic.rend1708 ] - br label %logic.from1709 -logic.from1709: - br i1 %t40, label %logic.end1711, label %logic.rhs1710 -logic.rhs1710: + br label %logic.rend1712 +logic.rend1712: + br label %logic.end1711 +logic.end1711: + %t40 = phi i1 [ true, %logic.from1709 ], [ %t39, %logic.rend1712 ] + br label %logic.from1713 +logic.from1713: + br i1 %t40, label %logic.end1715, label %logic.rhs1714 +logic.rhs1714: %t41 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.964, i64 2, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.rend1712 -logic.rend1712: - br label %logic.end1711 -logic.end1711: - %t46 = phi i1 [ true, %logic.from1709 ], [ %t45, %logic.rend1712 ] - br i1 %t46, label %then1713, label %endif1715 -then1713: + br label %logic.rend1716 +logic.rend1716: + br label %logic.end1715 +logic.end1715: + %t46 = phi i1 [ true, %logic.from1713 ], [ %t45, %logic.rend1716 ] + br i1 %t46, label %then1717, label %endif1719 +then1717: ret i64 3 -endif1715: +endif1719: %t47 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.965, i64 1, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 - br label %logic.from1716 -logic.from1716: - br i1 %t51, label %logic.end1718, label %logic.rhs1717 -logic.rhs1717: + br label %logic.from1720 +logic.from1720: + br i1 %t51, label %logic.end1722, label %logic.rhs1721 +logic.rhs1721: %t52 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.966, i64 1, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br label %logic.rend1719 -logic.rend1719: - br label %logic.end1718 -logic.end1718: - %t57 = phi i1 [ true, %logic.from1716 ], [ %t56, %logic.rend1719 ] - br label %logic.from1720 -logic.from1720: - br i1 %t57, label %logic.end1722, label %logic.rhs1721 -logic.rhs1721: + br label %logic.rend1723 +logic.rend1723: + br label %logic.end1722 +logic.end1722: + %t57 = phi i1 [ true, %logic.from1720 ], [ %t56, %logic.rend1723 ] + br label %logic.from1724 +logic.from1724: + br i1 %t57, label %logic.end1726, label %logic.rhs1725 +logic.rhs1725: %t58 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t58, ptr %a59 store { ptr, i64, i64 } { ptr @.str.967, i64 1, i64 0 }, ptr %a60 %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) %t62 = icmp ne i32 %t61, 0 - br label %logic.rend1723 -logic.rend1723: - br label %logic.end1722 -logic.end1722: - %t63 = phi i1 [ true, %logic.from1720 ], [ %t62, %logic.rend1723 ] - br label %logic.from1724 -logic.from1724: - br i1 %t63, label %logic.end1726, label %logic.rhs1725 -logic.rhs1725: + br label %logic.rend1727 +logic.rend1727: + br label %logic.end1726 +logic.end1726: + %t63 = phi i1 [ true, %logic.from1724 ], [ %t62, %logic.rend1727 ] + br label %logic.from1728 +logic.from1728: + br i1 %t63, label %logic.end1730, label %logic.rhs1729 +logic.rhs1729: %t64 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.968, i64 1, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 - br label %logic.rend1727 -logic.rend1727: - br label %logic.end1726 -logic.end1726: - %t69 = phi i1 [ true, %logic.from1724 ], [ %t68, %logic.rend1727 ] - br i1 %t69, label %then1728, label %endif1730 -then1728: + br label %logic.rend1731 +logic.rend1731: + br label %logic.end1730 +logic.end1730: + %t69 = phi i1 [ true, %logic.from1728 ], [ %t68, %logic.rend1731 ] + br i1 %t69, label %then1732, label %endif1734 +then1732: ret i64 4 -endif1730: +endif1734: %t70 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t70, ptr %a71 store { ptr, i64, i64 } { ptr @.str.969, i64 1, i64 0 }, ptr %a72 %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) %t74 = icmp ne i32 %t73, 0 - br label %logic.from1731 -logic.from1731: - br i1 %t74, label %logic.end1733, label %logic.rhs1732 -logic.rhs1732: + br label %logic.from1735 +logic.from1735: + br i1 %t74, label %logic.end1737, label %logic.rhs1736 +logic.rhs1736: %t75 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.970, i64 1, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 - br label %logic.rend1734 -logic.rend1734: - br label %logic.end1733 -logic.end1733: - %t80 = phi i1 [ true, %logic.from1731 ], [ %t79, %logic.rend1734 ] - br label %logic.from1735 -logic.from1735: - br i1 %t80, label %logic.end1737, label %logic.rhs1736 -logic.rhs1736: + br label %logic.rend1738 +logic.rend1738: + br label %logic.end1737 +logic.end1737: + %t80 = phi i1 [ true, %logic.from1735 ], [ %t79, %logic.rend1738 ] + br label %logic.from1739 +logic.from1739: + br i1 %t80, label %logic.end1741, label %logic.rhs1740 +logic.rhs1740: %t81 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.971, i64 1, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br label %logic.rend1738 -logic.rend1738: - br label %logic.end1737 -logic.end1737: - %t86 = phi i1 [ true, %logic.from1735 ], [ %t85, %logic.rend1738 ] - br label %logic.from1739 -logic.from1739: - br i1 %t86, label %logic.end1741, label %logic.rhs1740 -logic.rhs1740: + br label %logic.rend1742 +logic.rend1742: + br label %logic.end1741 +logic.end1741: + %t86 = phi i1 [ true, %logic.from1739 ], [ %t85, %logic.rend1742 ] + br label %logic.from1743 +logic.from1743: + br i1 %t86, label %logic.end1745, label %logic.rhs1744 +logic.rhs1744: %t87 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t87, ptr %a88 store { ptr, i64, i64 } { ptr @.str.972, i64 2, i64 0 }, ptr %a89 %t90 = call i32 @finch_str_eq(ptr %a88, ptr %a89) %t91 = icmp ne i32 %t90, 0 - br label %logic.rend1742 -logic.rend1742: - br label %logic.end1741 -logic.end1741: - %t92 = phi i1 [ true, %logic.from1739 ], [ %t91, %logic.rend1742 ] - br label %logic.from1743 -logic.from1743: - br i1 %t92, label %logic.end1745, label %logic.rhs1744 -logic.rhs1744: + br label %logic.rend1746 +logic.rend1746: + br label %logic.end1745 +logic.end1745: + %t92 = phi i1 [ true, %logic.from1743 ], [ %t91, %logic.rend1746 ] + br label %logic.from1747 +logic.from1747: + br i1 %t92, label %logic.end1749, label %logic.rhs1748 +logic.rhs1748: %t93 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t93, ptr %a94 store { ptr, i64, i64 } { ptr @.str.973, i64 2, i64 0 }, ptr %a95 %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) %t97 = icmp ne i32 %t96, 0 - br label %logic.rend1746 -logic.rend1746: - br label %logic.end1745 -logic.end1745: - %t98 = phi i1 [ true, %logic.from1743 ], [ %t97, %logic.rend1746 ] - br label %logic.from1747 -logic.from1747: - br i1 %t98, label %logic.end1749, label %logic.rhs1748 -logic.rhs1748: + br label %logic.rend1750 +logic.rend1750: + br label %logic.end1749 +logic.end1749: + %t98 = phi i1 [ true, %logic.from1747 ], [ %t97, %logic.rend1750 ] + br label %logic.from1751 +logic.from1751: + br i1 %t98, label %logic.end1753, label %logic.rhs1752 +logic.rhs1752: %t99 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t99, ptr %a100 store { ptr, i64, i64 } { ptr @.str.974, i64 1, i64 0 }, ptr %a101 %t102 = call i32 @finch_str_eq(ptr %a100, ptr %a101) %t103 = icmp ne i32 %t102, 0 - br label %logic.rend1750 -logic.rend1750: - br label %logic.end1749 -logic.end1749: - %t104 = phi i1 [ true, %logic.from1747 ], [ %t103, %logic.rend1750 ] - br i1 %t104, label %then1751, label %endif1753 -then1751: + br label %logic.rend1754 +logic.rend1754: + br label %logic.end1753 +logic.end1753: + %t104 = phi i1 [ true, %logic.from1751 ], [ %t103, %logic.rend1754 ] + br i1 %t104, label %then1755, label %endif1757 +then1755: ret i64 5 -endif1753: +endif1757: ret i64 0 } @@ -20420,23 +20446,23 @@ entry: %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.sameLine(ptr %t5) %t7 = xor i1 %t6, true - br label %logic.from1754 -logic.from1754: - br i1 %t7, label %logic.end1756, label %logic.rhs1755 -logic.rhs1755: + br label %logic.from1758 +logic.from1758: + br i1 %t7, label %logic.end1760, label %logic.rhs1759 +logic.rhs1759: %t8 = load ptr, ptr %a1 %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.975, i64 2, i64 0 }) %t10 = xor i1 %t9, true - br label %logic.rend1757 -logic.rend1757: - br label %logic.end1756 -logic.end1756: - %t11 = phi i1 [ true, %logic.from1754 ], [ %t10, %logic.rend1757 ] - br i1 %t11, label %then1758, label %endif1760 -then1758: + br label %logic.rend1761 +logic.rend1761: + br label %logic.end1760 +logic.end1760: + %t11 = phi i1 [ true, %logic.from1758 ], [ %t10, %logic.rend1761 ] + br i1 %t11, label %then1762, label %endif1764 +then1762: %t12 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t12 -endif1760: +endif1764: %t13 = load ptr, ptr %a1 %t14 = call %S.ast.Node @finch.parser.node(ptr %t13, { ptr, i64, i64 } { ptr @.str.976, i64 2, i64 0 }) store %S.ast.Node %t14, ptr %a15 @@ -20459,8 +20485,8 @@ endif1760: store i64 %t26, ptr %t20 %t29 = load ptr, ptr %a1 %t30 = call i1 @finch.parser.at(ptr %t29, { ptr, i64, i64 } { ptr @.str.977, i64 1, i64 0 }) - br i1 %t30, label %then1761, label %else1762 -then1761: + br i1 %t30, label %then1765, label %else1766 +then1765: %t31 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 6 store i1 true, ptr %t31 %t32 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 @@ -20474,8 +20500,8 @@ then1761: %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 %t36 store %S.ast.Node %t35, ptr %t39 store i64 %t37, ptr %t33 - br label %endif1763 -else1762: + br label %endif1767 +else1766: %t40 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load ptr, ptr %a1 @@ -20487,8 +20513,8 @@ else1762: %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 store %S.ast.Node %t43, ptr %t47 store i64 %t45, ptr %t41 - br label %endif1763 -endif1763: + br label %endif1767 +endif1767: %t48 = load %S.ast.Node, ptr %a15 call void @finch.drop.S_ast_Node(ptr %a4) ret %S.ast.Node %t48 @@ -20514,25 +20540,25 @@ entry: store i64 %p1, ptr %a2 %t3 = load i64, ptr %a2 %t4 = icmp sgt i64 %t3, 5 - br i1 %t4, label %then1764, label %endif1766 -then1764: + br i1 %t4, label %then1768, label %endif1770 +then1768: %t5 = load ptr, ptr %a1 %t6 = call %S.ast.Node @finch.parser.parseUnary(ptr %t5) ret %S.ast.Node %t6 -endif1766: +endif1770: %t7 = load ptr, ptr %a1 %t8 = load i64, ptr %a2 %t9 = add i64 %t8, 1 %t10 = call %S.ast.Node @finch.parser.parseBinary(ptr %t7, i64 %t9) store %S.ast.Node %t10, ptr %a11 - br label %while.cond1767 -while.cond1767: + br label %while.cond1771 +while.cond1771: %t12 = load ptr, ptr %a1 %t13 = call i1 @finch.parser.sameLine(ptr %t12) - br label %logic.from1770 -logic.from1770: - br i1 %t13, label %logic.rhs1771, label %logic.end1772 -logic.rhs1771: + br label %logic.from1774 +logic.from1774: + br i1 %t13, label %logic.rhs1775, label %logic.end1776 +logic.rhs1775: %t14 = load ptr, ptr %a1 %t15 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t14) %t16 = call i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %t15) @@ -20540,13 +20566,13 @@ logic.rhs1771: call void @finch_str_drop(ptr %a17) %t18 = load i64, ptr %a2 %t19 = icmp eq i64 %t16, %t18 - br label %logic.rend1773 -logic.rend1773: - br label %logic.end1772 -logic.end1772: - %t20 = phi i1 [ false, %logic.from1770 ], [ %t19, %logic.rend1773 ] - br i1 %t20, label %while.body1768, label %while.end1769 -while.body1768: + br label %logic.rend1777 +logic.rend1777: + br label %logic.end1776 +logic.end1776: + %t20 = phi i1 [ false, %logic.from1774 ], [ %t19, %logic.rend1777 ] + br i1 %t20, label %while.body1772, label %while.end1773 +while.body1772: %t21 = load ptr, ptr %a1 %t22 = call %S.ast.Node @finch.parser.node(ptr %t21, { ptr, i64, i64 } { ptr @.str.978, i64 6, i64 0 }) store %S.ast.Node %t22, ptr %a23 @@ -20598,8 +20624,8 @@ while.body1768: store %S.ast.Node %t58, ptr %a59 call void @finch.drop.S_ast_Node(ptr %a59) call void @finch.drop.S_ast_Node(ptr %a23) - br label %while.cond1767 -while.end1769: + br label %while.cond1771 +while.end1773: %t60 = load %S.ast.Node, ptr %a11 ret %S.ast.Node %t60 } @@ -20617,8 +20643,8 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.979, i64 3, i64 0 }) - br i1 %t3, label %then1774, label %endif1776 -then1774: + br i1 %t3, label %then1778, label %endif1780 +then1778: %t4 = load ptr, ptr %a1 %t5 = call %S.ast.Node @finch.parser.node(ptr %t4, { ptr, i64, i64 } { ptr @.str.980, i64 3, i64 0 }) store %S.ast.Node %t5, ptr %a6 @@ -20639,33 +20665,33 @@ then1774: store i64 %t15, ptr %t11 %t18 = load %S.ast.Node, ptr %a6 ret %S.ast.Node %t18 -endif1776: +endif1780: %t19 = load ptr, ptr %a1 %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.981, i64 1, i64 0 }) - br label %logic.from1777 -logic.from1777: - br i1 %t20, label %logic.end1779, label %logic.rhs1778 -logic.rhs1778: - %t21 = load ptr, ptr %a1 - %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 }) - br label %logic.rend1780 -logic.rend1780: - br label %logic.end1779 -logic.end1779: - %t23 = phi i1 [ true, %logic.from1777 ], [ %t22, %logic.rend1780 ] br label %logic.from1781 logic.from1781: - br i1 %t23, label %logic.end1783, label %logic.rhs1782 + br i1 %t20, label %logic.end1783, label %logic.rhs1782 logic.rhs1782: - %t24 = load ptr, ptr %a1 - %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.983, i64 1, i64 0 }) + %t21 = load ptr, ptr %a1 + %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 }) br label %logic.rend1784 logic.rend1784: br label %logic.end1783 logic.end1783: - %t26 = phi i1 [ true, %logic.from1781 ], [ %t25, %logic.rend1784 ] - br i1 %t26, label %then1785, label %endif1787 -then1785: + %t23 = phi i1 [ true, %logic.from1781 ], [ %t22, %logic.rend1784 ] + br label %logic.from1785 +logic.from1785: + br i1 %t23, label %logic.end1787, label %logic.rhs1786 +logic.rhs1786: + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.983, i64 1, i64 0 }) + br label %logic.rend1788 +logic.rend1788: + br label %logic.end1787 +logic.end1787: + %t26 = phi i1 [ true, %logic.from1785 ], [ %t25, %logic.rend1788 ] + br i1 %t26, label %then1789, label %endif1791 +then1789: %t27 = load ptr, ptr %a1 %t28 = call %S.ast.Node @finch.parser.node(ptr %t27, { ptr, i64, i64 } { ptr @.str.984, i64 5, i64 0 }) store %S.ast.Node %t28, ptr %a29 @@ -20695,7 +20721,7 @@ then1785: store i64 %t45, ptr %t41 %t48 = load %S.ast.Node, ptr %a29 ret %S.ast.Node %t48 -endif1787: +endif1791: %t49 = load ptr, ptr %a1 %t50 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t49) ret %S.ast.Node %t50 @@ -20726,11 +20752,11 @@ entry: call void @finch.drop.S_lexer_Token(ptr %a5) %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic1788, label %ok1789 -panic1788: + br i1 %t7, label %panic1792, label %ok1793 +panic1792: call void @finch_panic(ptr @.str.987, i64 686, ptr @.str.988) unreachable -ok1789: +ok1793: %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 2 %t9 = load i64, ptr %t8 %t10 = add i64 %t9, 1 @@ -20738,22 +20764,22 @@ ok1789: %t11 = load ptr, ptr %a1 %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.989, i64 1, i64 0 }) %t13 = xor i1 %t12, true - br i1 %t13, label %then1790, label %endif1792 -then1790: - br label %while.cond1793 -while.cond1793: + br i1 %t13, label %then1794, label %endif1796 +then1794: + br label %while.cond1797 +while.cond1797: %t14 = load ptr, ptr %a1 %t15 = call i1 @finch.parser.at(ptr %t14, { ptr, i64, i64 } { ptr @.str.990, i64 1, i64 0 }) %t16 = xor i1 %t15, true - br i1 %t16, label %while.body1794, label %while.end1795 -while.body1794: + br i1 %t16, label %while.body1798, label %while.end1799 +while.body1798: store { ptr, i64, i64 } { ptr @.str.991, i64 0, i64 0 }, ptr %a17 %t18 = load ptr, ptr %a1 %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.992, i64 5, i64 0 }) - br label %logic.from1796 -logic.from1796: - br i1 %t19, label %logic.rhs1797, label %logic.end1798 -logic.rhs1797: + br label %logic.from1800 +logic.from1800: + br i1 %t19, label %logic.rhs1801, label %logic.end1802 +logic.rhs1801: %t20 = load ptr, ptr %a1 %t21 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t20, i64 1) store { ptr, i64, i64 } %t21, ptr %a22 @@ -20762,13 +20788,13 @@ logic.rhs1797: %t25 = icmp ne i32 %t24, 0 store { ptr, i64, i64 } %t21, ptr %a26 call void @finch_str_drop(ptr %a26) - br label %logic.rend1799 -logic.rend1799: - br label %logic.end1798 -logic.end1798: - %t27 = phi i1 [ false, %logic.from1796 ], [ %t25, %logic.rend1799 ] - br i1 %t27, label %then1800, label %endif1802 -then1800: + br label %logic.rend1803 +logic.rend1803: + br label %logic.end1802 +logic.end1802: + %t27 = phi i1 [ false, %logic.from1800 ], [ %t25, %logic.rend1803 ] + br i1 %t27, label %then1804, label %endif1806 +then1804: %t28 = load ptr, ptr %a1 %t29 = call %S.lexer.Token @finch.parser.next(ptr %t28) %t30 = extractvalue %S.lexer.Token %t29, 1 @@ -20785,15 +20811,15 @@ then1800: %t38 = call %S.lexer.Token @finch.parser.next(ptr %t37) store %S.lexer.Token %t38, ptr %a39 call void @finch.drop.S_lexer_Token(ptr %a39) - br label %endif1802 -endif1802: + br label %endif1806 +endif1806: %t40 = load ptr, ptr %a2 %t41 = icmp eq ptr %t40, null - br i1 %t41, label %panic1803, label %ok1804 -panic1803: + br i1 %t41, label %panic1807, label %ok1808 +panic1807: call void @finch_panic(ptr @.str.994, i64 694, ptr @.str.995) unreachable -ok1804: +ok1808: %t42 = getelementptr inbounds %S.ast.Node, ptr %t40, i32 0, i32 10 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t44 = load { ptr, i64, i64 }, ptr %a17 @@ -20809,11 +20835,11 @@ ok1804: store i64 %t49, ptr %t43 %t52 = load ptr, ptr %a2 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic1805, label %ok1806 -panic1805: + br i1 %t53, label %panic1809, label %ok1810 +panic1809: call void @finch_panic(ptr @.str.996, i64 695, ptr @.str.997) unreachable -ok1806: +ok1810: %t54 = getelementptr inbounds %S.ast.Node, ptr %t52, i32 0, i32 9 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load ptr, ptr %a1 @@ -20828,23 +20854,23 @@ ok1806: %t62 = load ptr, ptr %a1 %t63 = call i1 @finch.parser.accept(ptr %t62, { ptr, i64, i64 } { ptr @.str.998, i64 1, i64 0 }) %t64 = xor i1 %t63, true - br i1 %t64, label %then1807, label %endif1809 -then1807: + br i1 %t64, label %then1811, label %endif1813 +then1811: call void @finch_str_drop(ptr %a17) - br label %while.end1795 -endif1809: + br label %while.end1799 +endif1813: call void @finch_str_drop(ptr %a17) - br label %while.cond1793 -while.end1795: - br label %endif1792 -endif1792: + br label %while.cond1797 +while.end1799: + br label %endif1796 +endif1796: %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic1810, label %ok1811 -panic1810: + br i1 %t66, label %panic1814, label %ok1815 +panic1814: call void @finch_panic(ptr @.str.999, i64 701, ptr @.str.1000) unreachable -ok1811: +ok1815: %t67 = getelementptr inbounds %S.parser.Parser, ptr %t65, i32 0, i32 2 %t68 = load i64, ptr %t67 %t69 = sub i64 %t68, 1 @@ -20885,16 +20911,16 @@ entry: %t2 = load ptr, ptr %a1 %t3 = call %S.ast.Node @finch.parser.parsePrimary(ptr %t2) store %S.ast.Node %t3, ptr %a4 - br label %while.cond1812 -while.cond1812: + br label %while.cond1816 +while.cond1816: %t5 = load ptr, ptr %a1 %t6 = call i1 @finch.parser.sameLine(ptr %t5) - br i1 %t6, label %while.body1813, label %while.end1814 -while.body1813: + br i1 %t6, label %while.body1817, label %while.end1818 +while.body1817: %t7 = load ptr, ptr %a1 %t8 = call i1 @finch.parser.at(ptr %t7, { ptr, i64, i64 } { ptr @.str.1003, i64 1, i64 0 }) - br i1 %t8, label %then1815, label %else1816 -then1815: + br i1 %t8, label %then1819, label %else1820 +then1819: %t9 = load ptr, ptr %a1 %t10 = call %S.ast.Node @finch.parser.node(ptr %t9, { ptr, i64, i64 } { ptr @.str.1004, i64 6, i64 0 }) store %S.ast.Node %t10, ptr %a11 @@ -20930,23 +20956,23 @@ then1815: store i64 %t32, ptr %t26 %t35 = load ptr, ptr %a1 %t36 = call i1 @finch.parser.at(ptr %t35, { ptr, i64, i64 } { ptr @.str.1007, i64 1, i64 0 }) - br label %logic.from1818 -logic.from1818: - br i1 %t36, label %logic.rhs1819, label %logic.end1820 -logic.rhs1819: + br label %logic.from1822 +logic.from1822: + br i1 %t36, label %logic.rhs1823, label %logic.end1824 +logic.rhs1823: %t37 = load ptr, ptr %a1 %t38 = call %S.lexer.Token @finch.parser.cur(ptr %t37) %t39 = extractvalue %S.lexer.Token %t38, 4 store %S.lexer.Token %t38, ptr %a40 call void @finch.drop.S_lexer_Token(ptr %a40) %t41 = xor i1 %t39, true - br label %logic.rend1821 -logic.rend1821: - br label %logic.end1820 -logic.end1820: - %t42 = phi i1 [ false, %logic.from1818 ], [ %t41, %logic.rend1821 ] - br i1 %t42, label %then1822, label %endif1824 -then1822: + br label %logic.rend1825 +logic.rend1825: + br label %logic.end1824 +logic.end1824: + %t42 = phi i1 [ false, %logic.from1822 ], [ %t41, %logic.rend1825 ] + br i1 %t42, label %then1826, label %endif1828 +then1826: %t43 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } { ptr @.str.1008, i64 6, i64 0 }, ptr %t43 @@ -20954,8 +20980,8 @@ then1822: call void @finch_str_drop(ptr %a45) %t46 = load ptr, ptr %a1 call void @finch.parser.parseArgs(ptr %t46, ptr %a11) - br label %endif1824 -endif1824: + br label %endif1828 +endif1828: %t47 = load %S.ast.Node, ptr %a11 store %S.ast.Node %t47, ptr %a48 call void @finch.copy.S_ast_Node(ptr %a49, ptr %a48) @@ -20965,12 +20991,12 @@ endif1824: store %S.ast.Node %t51, ptr %a52 call void @finch.drop.S_ast_Node(ptr %a52) call void @finch.drop.S_ast_Node(ptr %a11) - br label %endif1817 -else1816: + br label %endif1821 +else1820: %t53 = load ptr, ptr %a1 %t54 = call i1 @finch.parser.at(ptr %t53, { ptr, i64, i64 } { ptr @.str.1009, i64 1, i64 0 }) - br i1 %t54, label %then1825, label %else1826 -then1825: + br i1 %t54, label %then1829, label %else1830 +then1829: %t55 = load ptr, ptr %a1 %t56 = call %S.ast.Node @finch.parser.node(ptr %t55, { ptr, i64, i64 } { ptr @.str.1010, i64 5, i64 0 }) store %S.ast.Node %t56, ptr %a57 @@ -20980,11 +21006,11 @@ then1825: call void @finch.drop.S_lexer_Token(ptr %a60) %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null - br i1 %t62, label %panic1828, label %ok1829 -panic1828: + br i1 %t62, label %panic1832, label %ok1833 +panic1832: call void @finch_panic(ptr @.str.1011, i64 721, ptr @.str.1012) unreachable -ok1829: +ok1833: %t63 = getelementptr inbounds %S.parser.Parser, ptr %t61, i32 0, i32 2 %t64 = load i64, ptr %t63 %t65 = add i64 %t64, 1 @@ -21015,11 +21041,11 @@ ok1829: store i64 %t81, ptr %t77 %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null - br i1 %t85, label %panic1830, label %ok1831 -panic1830: + br i1 %t85, label %panic1834, label %ok1835 +panic1834: call void @finch_panic(ptr @.str.1013, i64 724, ptr @.str.1014) unreachable -ok1831: +ok1835: %t86 = getelementptr inbounds %S.parser.Parser, ptr %t84, i32 0, i32 2 %t87 = load i64, ptr %t86 %t88 = sub i64 %t87, 1 @@ -21037,15 +21063,15 @@ ok1831: store %S.ast.Node %t96, ptr %a97 call void @finch.drop.S_ast_Node(ptr %a97) call void @finch.drop.S_ast_Node(ptr %a57) - br label %endif1827 -else1826: + br label %endif1831 +else1830: %t98 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t98 -endif1827: - br label %endif1817 -endif1817: - br label %while.cond1812 -while.end1814: +endif1831: + br label %endif1821 +endif1821: + br label %while.cond1816 +while.end1818: %t99 = load %S.ast.Node, ptr %a4 ret %S.ast.Node %t99 } @@ -21154,36 +21180,36 @@ entry: store { ptr, i64, i64 } { ptr @.str.1018, i64 3, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.from1832 -logic.from1832: - br i1 %t18, label %logic.end1834, label %logic.rhs1833 -logic.rhs1833: + br label %logic.from1836 +logic.from1836: + br i1 %t18, label %logic.end1838, label %logic.rhs1837 +logic.rhs1837: %t19 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1019, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend1835 -logic.rend1835: - br label %logic.end1834 -logic.end1834: - %t24 = phi i1 [ true, %logic.from1832 ], [ %t23, %logic.rend1835 ] - br label %logic.from1836 -logic.from1836: - br i1 %t24, label %logic.end1838, label %logic.rhs1837 -logic.rhs1837: + br label %logic.rend1839 +logic.rend1839: + br label %logic.end1838 +logic.end1838: + %t24 = phi i1 [ true, %logic.from1836 ], [ %t23, %logic.rend1839 ] + br label %logic.from1840 +logic.from1840: + br i1 %t24, label %logic.end1842, label %logic.rhs1841 +logic.rhs1841: %t25 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1020, i64 4, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br label %logic.rend1839 -logic.rend1839: - br label %logic.end1838 -logic.end1838: - %t30 = phi i1 [ true, %logic.from1836 ], [ %t29, %logic.rend1839 ] - br i1 %t30, label %then1840, label %endif1842 -then1840: + br label %logic.rend1843 +logic.rend1843: + br label %logic.end1842 +logic.end1842: + %t30 = phi i1 [ true, %logic.from1840 ], [ %t29, %logic.rend1843 ] + br i1 %t30, label %then1844, label %endif1846 +then1844: %t31 = load ptr, ptr %a1 %t32 = call %S.lexer.Token @finch.parser.next(ptr %t31) store %S.lexer.Token %t32, ptr %a33 @@ -21211,14 +21237,14 @@ then1840: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t49 -endif1842: +endif1846: %t50 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.1021, i64 6, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %then1843, label %endif1845 -then1843: + br i1 %t54, label %then1847, label %endif1849 +then1847: %t55 = load ptr, ptr %a1 %t56 = call %S.lexer.Token @finch.parser.next(ptr %t55) store %S.lexer.Token %t56, ptr %a57 @@ -21242,28 +21268,28 @@ then1843: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t69 -endif1845: +endif1849: %t70 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t70, ptr %a71 store { ptr, i64, i64 } { ptr @.str.1023, i64 4, i64 0 }, ptr %a72 %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) %t74 = icmp ne i32 %t73, 0 - br label %logic.from1846 -logic.from1846: - br i1 %t74, label %logic.end1848, label %logic.rhs1847 -logic.rhs1847: + br label %logic.from1850 +logic.from1850: + br i1 %t74, label %logic.end1852, label %logic.rhs1851 +logic.rhs1851: %t75 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t75, ptr %a76 store { ptr, i64, i64 } { ptr @.str.1024, i64 5, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 - br label %logic.rend1849 -logic.rend1849: - br label %logic.end1848 -logic.end1848: - %t80 = phi i1 [ true, %logic.from1846 ], [ %t79, %logic.rend1849 ] - br i1 %t80, label %then1850, label %endif1852 -then1850: + br label %logic.rend1853 +logic.rend1853: + br label %logic.end1852 +logic.end1852: + %t80 = phi i1 [ true, %logic.from1850 ], [ %t79, %logic.rend1853 ] + br i1 %t80, label %then1854, label %endif1856 +then1854: %t81 = load ptr, ptr %a1 %t82 = call %S.lexer.Token @finch.parser.next(ptr %t81) store %S.lexer.Token %t82, ptr %a83 @@ -21286,14 +21312,14 @@ then1850: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t94 -endif1852: +endif1856: %t95 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.1026, i64 4, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 - br i1 %t99, label %then1853, label %endif1855 -then1853: + br i1 %t99, label %then1857, label %endif1859 +then1857: %t100 = load ptr, ptr %a1 %t101 = call %S.lexer.Token @finch.parser.next(ptr %t100) store %S.lexer.Token %t101, ptr %a102 @@ -21307,25 +21333,25 @@ then1853: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t106 -endif1855: +endif1859: %t107 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t107, ptr %a108 store { ptr, i64, i64 } { ptr @.str.1028, i64 1, i64 0 }, ptr %a109 %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) %t111 = icmp ne i32 %t110, 0 - br i1 %t111, label %then1856, label %endif1858 -then1856: + br i1 %t111, label %then1860, label %endif1862 +then1860: %t112 = load ptr, ptr %a1 %t113 = call %S.lexer.Token @finch.parser.next(ptr %t112) store %S.lexer.Token %t113, ptr %a114 call void @finch.drop.S_lexer_Token(ptr %a114) %t115 = load ptr, ptr %a1 %t116 = icmp eq ptr %t115, null - br i1 %t116, label %panic1859, label %ok1860 -panic1859: + br i1 %t116, label %panic1863, label %ok1864 +panic1863: call void @finch_panic(ptr @.str.1029, i64 763, ptr @.str.1030) unreachable -ok1860: +ok1864: %t117 = getelementptr inbounds %S.parser.Parser, ptr %t115, i32 0, i32 2 %t118 = load i64, ptr %t117 %t119 = add i64 %t118, 1 @@ -21335,11 +21361,11 @@ ok1860: store %S.ast.Node %t121, ptr %a122 %t123 = load ptr, ptr %a1 %t124 = icmp eq ptr %t123, null - br i1 %t124, label %panic1861, label %ok1862 -panic1861: + br i1 %t124, label %panic1865, label %ok1866 +panic1865: call void @finch_panic(ptr @.str.1031, i64 765, ptr @.str.1032) unreachable -ok1862: +ok1866: %t125 = getelementptr inbounds %S.parser.Parser, ptr %t123, i32 0, i32 2 %t126 = load i64, ptr %t125 %t127 = sub i64 %t126, 1 @@ -21353,28 +21379,28 @@ ok1862: call void @finch.drop.S_ast_Node(ptr %a7) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t131 -endif1858: +endif1862: %t132 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t132, ptr %a133 store { ptr, i64, i64 } { ptr @.str.1035, i64 5, i64 0 }, ptr %a134 %t135 = call i32 @finch_str_eq(ptr %a133, ptr %a134) %t136 = icmp ne i32 %t135, 0 - br i1 %t136, label %then1863, label %endif1865 -then1863: + br i1 %t136, label %then1867, label %endif1869 +then1867: %t137 = load ptr, ptr %a1 %t138 = call %S.ast.Node @finch.parser.parseMatch(ptr %t137, i1 true) call void @finch_str_drop(ptr %a13) call void @finch.drop.S_ast_Node(ptr %a7) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t138 -endif1865: +endif1869: %t139 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t139, ptr %a140 store { ptr, i64, i64 } { ptr @.str.1036, i64 1, i64 0 }, ptr %a141 %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) %t143 = icmp ne i32 %t142, 0 - br i1 %t143, label %then1866, label %endif1868 -then1866: + br i1 %t143, label %then1870, label %endif1872 +then1870: %t144 = load ptr, ptr %a1 %t145 = call %S.lexer.Token @finch.parser.next(ptr %t144) store %S.lexer.Token %t145, ptr %a146 @@ -21386,21 +21412,21 @@ then1866: call void @finch_str_drop(ptr %a149) %t150 = load ptr, ptr %a1 %t151 = icmp eq ptr %t150, null - br i1 %t151, label %panic1869, label %ok1870 -panic1869: + br i1 %t151, label %panic1873, label %ok1874 +panic1873: call void @finch_panic(ptr @.str.1038, i64 775, ptr @.str.1039) unreachable -ok1870: +ok1874: %t152 = getelementptr inbounds %S.parser.Parser, ptr %t150, i32 0, i32 2 %t153 = load i64, ptr %t152 %t154 = add i64 %t153, 1 store i64 %t154, ptr %t152 %t155 = load ptr, ptr %a1 %t156 = call i1 @finch.parser.at(ptr %t155, { ptr, i64, i64 } { ptr @.str.1040, i64 1, i64 0 }) - br label %logic.from1871 -logic.from1871: - br i1 %t156, label %logic.rhs1872, label %logic.end1873 -logic.rhs1872: + br label %logic.from1875 +logic.from1875: + br i1 %t156, label %logic.rhs1876, label %logic.end1877 +logic.rhs1876: %t157 = load ptr, ptr %a1 %t158 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t157, i64 1) store { ptr, i64, i64 } %t158, ptr %a159 @@ -21409,13 +21435,13 @@ logic.rhs1872: %t162 = icmp ne i32 %t161, 0 store { ptr, i64, i64 } %t158, ptr %a163 call void @finch_str_drop(ptr %a163) - br label %logic.rend1874 -logic.rend1874: - br label %logic.end1873 -logic.end1873: - %t164 = phi i1 [ false, %logic.from1871 ], [ %t162, %logic.rend1874 ] - br i1 %t164, label %then1875, label %endif1877 -then1875: + br label %logic.rend1878 +logic.rend1878: + br label %logic.end1877 +logic.end1877: + %t164 = phi i1 [ false, %logic.from1875 ], [ %t162, %logic.rend1878 ] + br i1 %t164, label %then1879, label %endif1881 +then1879: %t165 = load ptr, ptr %a1 %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) store %S.lexer.Token %t166, ptr %a167 @@ -21425,15 +21451,15 @@ then1875: store { ptr, i64, i64 } { ptr @.str.1042, i64 3, i64 0 }, ptr %t168 store { ptr, i64, i64 } %t169, ptr %a170 call void @finch_str_drop(ptr %a170) - br label %endif1877 -endif1877: - br label %while.cond1878 -while.cond1878: + br label %endif1881 +endif1881: + br label %while.cond1882 +while.cond1882: %t171 = load ptr, ptr %a1 %t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.1043, i64 1, i64 0 }) %t173 = xor i1 %t172, true - br i1 %t173, label %while.body1879, label %while.end1880 -while.body1879: + br i1 %t173, label %while.body1883, label %while.end1884 +while.body1883: %t174 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1 %t176 = load ptr, ptr %a1 @@ -21449,34 +21475,34 @@ while.body1879: %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 %t184 = load i64, ptr %t183 %t185 = icmp eq i64 %t184, 1 - br label %logic.from1881 -logic.from1881: - br i1 %t185, label %logic.rhs1882, label %logic.end1883 -logic.rhs1882: + br label %logic.from1885 +logic.from1885: + br i1 %t185, label %logic.rhs1886, label %logic.end1887 +logic.rhs1886: %t186 = load ptr, ptr %a1 %t187 = call i1 @finch.parser.at(ptr %t186, { ptr, i64, i64 } { ptr @.str.1044, i64 1, i64 0 }) - br label %logic.rend1884 -logic.rend1884: - br label %logic.end1883 -logic.end1883: - %t188 = phi i1 [ false, %logic.from1881 ], [ %t187, %logic.rend1884 ] - br i1 %t188, label %then1885, label %endif1887 -then1885: + br label %logic.rend1888 +logic.rend1888: + br label %logic.end1887 +logic.end1887: + %t188 = phi i1 [ false, %logic.from1885 ], [ %t187, %logic.rend1888 ] + br i1 %t188, label %then1889, label %endif1891 +then1889: %t189 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t190 = load { ptr, i64, i64 }, ptr %t189 store { ptr, i64, i64 } { ptr @.str.1045, i64 3, i64 0 }, ptr %t189 store { ptr, i64, i64 } %t190, ptr %a191 call void @finch_str_drop(ptr %a191) - br label %endif1887 -endif1887: + br label %endif1891 +endif1891: %t192 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t193 = load { ptr, i64, i64 }, ptr %t192 store { ptr, i64, i64 } %t193, ptr %a194 store { ptr, i64, i64 } { ptr @.str.1046, i64 3, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 - br i1 %t197, label %then1888, label %endif1890 -then1888: + br i1 %t197, label %then1892, label %endif1894 +then1892: %t198 = load ptr, ptr %a1 %t199 = call %S.lexer.Token @finch.parser.expect(ptr %t198, { ptr, i64, i64 } { ptr @.str.1047, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1048, i64 41, i64 0 }) store %S.lexer.Token %t199, ptr %a200 @@ -21492,24 +21518,24 @@ then1888: %t208 = getelementptr inbounds %S.ast.Node, ptr %t207, i64 %t205 store %S.ast.Node %t204, ptr %t208 store i64 %t206, ptr %t202 - br label %endif1890 -endif1890: + br label %endif1894 +endif1894: %t209 = load ptr, ptr %a1 %t210 = call i1 @finch.parser.accept(ptr %t209, { ptr, i64, i64 } { ptr @.str.1049, i64 1, i64 0 }) %t211 = xor i1 %t210, true - br i1 %t211, label %then1891, label %endif1893 -then1891: - br label %while.end1880 -endif1893: - br label %while.cond1878 -while.end1880: + br i1 %t211, label %then1895, label %endif1897 +then1895: + br label %while.end1884 +endif1897: + br label %while.cond1882 +while.end1884: %t212 = load ptr, ptr %a1 %t213 = icmp eq ptr %t212, null - br i1 %t213, label %panic1894, label %ok1895 -panic1894: + br i1 %t213, label %panic1898, label %ok1899 +panic1898: call void @finch_panic(ptr @.str.1050, i64 793, ptr @.str.1051) unreachable -ok1895: +ok1899: %t214 = getelementptr inbounds %S.parser.Parser, ptr %t212, i32 0, i32 2 %t215 = load i64, ptr %t214 %t216 = sub i64 %t215, 1 @@ -21522,14 +21548,14 @@ ok1895: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t220 -endif1868: +endif1872: %t221 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t221, ptr %a222 store { ptr, i64, i64 } { ptr @.str.1054, i64 5, i64 0 }, ptr %a223 %t224 = call i32 @finch_str_eq(ptr %a222, ptr %a223) %t225 = icmp ne i32 %t224, 0 - br i1 %t225, label %then1896, label %endif1898 -then1896: + br i1 %t225, label %then1900, label %endif1902 +then1900: %t226 = load ptr, ptr %a1 %t227 = call %S.lexer.Token @finch.parser.next(ptr %t226) store %S.lexer.Token %t227, ptr %a228 @@ -21546,36 +21572,36 @@ then1896: call void @finch_str_drop(ptr %a236) %t237 = load ptr, ptr %a1 %t238 = call i1 @finch.parser.at(ptr %t237, { ptr, i64, i64 } { ptr @.str.1055, i64 1, i64 0 }) - br label %logic.from1899 -logic.from1899: - br i1 %t238, label %logic.rhs1900, label %logic.end1901 -logic.rhs1900: + br label %logic.from1903 +logic.from1903: + br i1 %t238, label %logic.rhs1904, label %logic.end1905 +logic.rhs1904: %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null - br i1 %t240, label %panic1902, label %ok1903 -panic1902: + br i1 %t240, label %panic1906, label %ok1907 +panic1906: call void @finch_panic(ptr @.str.1056, i64 800, ptr @.str.1057) unreachable -ok1903: +ok1907: %t241 = getelementptr inbounds %S.parser.Parser, ptr %t239, i32 0, i32 0 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null - br i1 %t243, label %panic1904, label %ok1905 -panic1904: + br i1 %t243, label %panic1908, label %ok1909 +panic1908: call void @finch_panic(ptr @.str.1058, i64 800, ptr @.str.1059) unreachable -ok1905: +ok1909: %t244 = getelementptr inbounds %S.parser.Parser, ptr %t242, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = sub i64 %t245, 1 %t247 = load { ptr, i64, i64 }, ptr %t241 %t248 = extractvalue { ptr, i64, i64 } %t247, 1 %t249 = icmp uge i64 %t246, %t248 - br i1 %t249, label %range1906, label %inrange1907 -range1906: + br i1 %t249, label %range1910, label %inrange1911 +range1910: call void @finch_panic_index(ptr @.str.1060, i64 800, i64 %t246, i64 %t248) unreachable -inrange1907: +inrange1911: %t250 = extractvalue { ptr, i64, i64 } %t247, 0 %t251 = getelementptr inbounds %S.lexer.Token, ptr %t250, i64 %t246 %t252 = getelementptr inbounds %S.lexer.Token, ptr %t251, i32 0, i32 0 @@ -21584,24 +21610,24 @@ inrange1907: store { ptr, i64, i64 } { ptr @.str.1061, i64 5, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp ne i32 %t256, 0 - br label %logic.rend1908 -logic.rend1908: - br label %logic.end1901 -logic.end1901: - %t258 = phi i1 [ false, %logic.from1899 ], [ %t257, %logic.rend1908 ] - br label %logic.from1909 -logic.from1909: - br i1 %t258, label %logic.rhs1910, label %logic.end1911 -logic.rhs1910: - %t259 = load ptr, ptr %a1 - %t260 = call i1 @finch.parser.genericCallAheadFrom(ptr %t259) br label %logic.rend1912 logic.rend1912: - br label %logic.end1911 -logic.end1911: - %t261 = phi i1 [ false, %logic.from1909 ], [ %t260, %logic.rend1912 ] - br i1 %t261, label %then1913, label %endif1915 -then1913: + br label %logic.end1905 +logic.end1905: + %t258 = phi i1 [ false, %logic.from1903 ], [ %t257, %logic.rend1912 ] + br label %logic.from1913 +logic.from1913: + br i1 %t258, label %logic.rhs1914, label %logic.end1915 +logic.rhs1914: + %t259 = load ptr, ptr %a1 + %t260 = call i1 @finch.parser.genericCallAheadFrom(ptr %t259) + br label %logic.rend1916 +logic.rend1916: + br label %logic.end1915 +logic.end1915: + %t261 = phi i1 [ false, %logic.from1913 ], [ %t260, %logic.rend1916 ] + br i1 %t261, label %then1917, label %endif1919 +then1917: %t262 = load ptr, ptr %a1 %t263 = call %S.lexer.Token @finch.parser.next(ptr %t262) store %S.lexer.Token %t263, ptr %a264 @@ -21612,10 +21638,10 @@ then1913: store %S.ast.Type %t265, ptr %t266 store %S.ast.Type %t267, ptr %a268 call void @finch.drop.S_ast_Type(ptr %a268) - br label %while.cond1916 -while.cond1916: - br label %while.body1917 -while.body1917: + br label %while.cond1920 +while.cond1920: + br label %while.body1921 +while.body1921: %t269 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 %t270 = getelementptr inbounds %S.ast.Type, ptr %t269, i32 0, i32 1 %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i32 0, i32 1 @@ -21631,12 +21657,12 @@ while.body1917: %t278 = load ptr, ptr %a1 %t279 = call i1 @finch.parser.accept(ptr %t278, { ptr, i64, i64 } { ptr @.str.1063, i64 1, i64 0 }) %t280 = xor i1 %t279, true - br i1 %t280, label %then1919, label %endif1921 -then1919: - br label %while.end1918 -endif1921: - br label %while.cond1916 -while.end1918: + br i1 %t280, label %then1923, label %endif1925 +then1923: + br label %while.end1922 +endif1925: + br label %while.cond1920 +while.end1922: %t281 = load ptr, ptr %a1 %t282 = call %S.lexer.Token @finch.parser.expect(ptr %t281, { ptr, i64, i64 } { ptr @.str.1064, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1065, i64 28, i64 0 }) store %S.lexer.Token %t282, ptr %a283 @@ -21652,26 +21678,26 @@ while.end1918: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t288 -endif1915: +endif1919: %t289 = load ptr, ptr %a1 %t290 = call i1 @finch.parser.at(ptr %t289, { ptr, i64, i64 } { ptr @.str.1067, i64 1, i64 0 }) - br label %logic.from1922 -logic.from1922: - br i1 %t290, label %logic.rhs1923, label %logic.end1924 -logic.rhs1923: + br label %logic.from1926 +logic.from1926: + br i1 %t290, label %logic.rhs1927, label %logic.end1928 +logic.rhs1927: %t291 = load ptr, ptr %a1 %t292 = call %S.lexer.Token @finch.parser.cur(ptr %t291) %t293 = extractvalue %S.lexer.Token %t292, 4 store %S.lexer.Token %t292, ptr %a294 call void @finch.drop.S_lexer_Token(ptr %a294) %t295 = xor i1 %t293, true - br label %logic.rend1925 -logic.rend1925: - br label %logic.end1924 -logic.end1924: - %t296 = phi i1 [ false, %logic.from1922 ], [ %t295, %logic.rend1925 ] - br i1 %t296, label %then1926, label %endif1928 -then1926: + br label %logic.rend1929 +logic.rend1929: + br label %logic.end1928 +logic.end1928: + %t296 = phi i1 [ false, %logic.from1926 ], [ %t295, %logic.rend1929 ] + br i1 %t296, label %then1930, label %endif1932 +then1930: %t297 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t298 = load { ptr, i64, i64 }, ptr %t297 store { ptr, i64, i64 } { ptr @.str.1068, i64 4, i64 0 }, ptr %t297 @@ -21683,7 +21709,7 @@ then1926: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t301 -endif1928: +endif1932: %t302 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 %t303 = load { ptr, i64, i64 }, ptr %t302 store { ptr, i64, i64 } { ptr @.str.1069, i64 3, i64 0 }, ptr %t302 @@ -21693,7 +21719,7 @@ endif1928: call void @finch_str_drop(ptr %a13) call void @finch.drop.S_lexer_Token(ptr %a4) ret %S.ast.Node %t305 -endif1898: +endif1902: %t306 = load ptr, ptr %a1 %t307 = load %S.lexer.Token, ptr %a4 %t308 = load %S.lexer.Token, ptr %a4 @@ -21728,20 +21754,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond1929 -n.cond1929: + br label %n.cond1933 +n.cond1933: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body1930, label %n.end1931 -n.body1930: + br i1 %t7, label %n.body1934, label %n.end1935 +n.body1934: %t8 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lexer.Token, ptr %t2, i64 %t6 call void @finch.copy.S_lexer_Token(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond1929 -n.end1931: + br label %n.cond1933 +n.end1935: ret void } @@ -21919,45 +21945,45 @@ entry: store i64 %p7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic1932, label %ok1933 -panic1932: + br i1 %t10, label %panic1936, label %ok1937 +panic1936: call void @finch_panic(ptr @.str.1081, i64 232, ptr @.str.1082) unreachable -ok1933: +ok1937: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 %t12 = load i1, ptr %t11 %t13 = xor i1 %t12, true - br i1 %t13, label %then1934, label %endif1936 -then1934: + br i1 %t13, label %then1938, label %endif1940 +then1938: ret void -endif1936: +endif1940: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic1937, label %ok1938 -panic1937: + br i1 %t15, label %panic1941, label %ok1942 +panic1941: call void @finch_panic(ptr @.str.1083, i64 235, ptr @.str.1084) unreachable -ok1938: +ok1942: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 29 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic1939, label %ok1940 -panic1939: + br i1 %t19, label %panic1943, label %ok1944 +panic1943: call void @finch_panic(ptr @.str.1086, i64 235, ptr @.str.1087) unreachable -ok1940: +ok1944: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t20 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 - br i1 %t25, label %range1941, label %inrange1942 -range1941: + br i1 %t25, label %range1945, label %inrange1946 +range1945: call void @finch_panic_index(ptr @.str.1088, i64 235, i64 %t22, i64 %t24) unreachable -inrange1942: +inrange1946: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 %t28 = load { ptr, i64, i64 }, ptr %t27 @@ -22169,23 +22195,23 @@ entry: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 0, ptr %a6 - br label %for.cond1943 -for.cond1943: + br label %for.cond1947 +for.cond1947: %t7 = load i64, ptr %a6 %t8 = icmp slt i64 %t7, %t5 - br i1 %t8, label %for.body1944, label %for.end1946 -for.body1944: + br i1 %t8, label %for.body1948, label %for.end1950 +for.body1948: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 %t11 = load i64, ptr %a6 %t12 = load { ptr, i64, i64 }, ptr %t10 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 - br i1 %t14, label %range1947, label %inrange1948 -range1947: + br i1 %t14, label %range1951, label %inrange1952 +range1951: call void @finch_panic_index(ptr @.str.1096, i64 242, i64 %t11, i64 %t13) unreachable -inrange1948: +inrange1952: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t11 %t17 = load %S.ast.Type, ptr %t16 @@ -22201,11 +22227,11 @@ inrange1948: %t26 = load { ptr, i64, i64 }, ptr %t24 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 - br i1 %t28, label %range1949, label %inrange1950 -range1949: + br i1 %t28, label %range1953, label %inrange1954 +range1953: call void @finch_panic_index(ptr @.str.1098, i64 242, i64 %t25, i64 %t27) unreachable -inrange1950: +inrange1954: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t25 %t31 = load { ptr, i64, i64 }, ptr %t30 @@ -22222,13 +22248,13 @@ inrange1950: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t37 store { ptr, i64, i64 } %t36, ptr %t40 store i64 %t38, ptr %t9 - br label %for.step1945 -for.step1945: + br label %for.step1949 +for.step1949: %t41 = load i64, ptr %a6 %t42 = add i64 %t41, 1 store i64 %t42, ptr %a6 - br label %for.cond1943 -for.end1946: + br label %for.cond1947 +for.end1950: %t43 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 @@ -22239,8 +22265,8 @@ for.end1946: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 %t51 = load i64, ptr %t50 %t52 = icmp sgt i64 %t51, 0 - br i1 %t52, label %then1951, label %endif1953 -then1951: + br i1 %t52, label %then1955, label %endif1957 +then1955: %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a56 @@ -22259,8 +22285,8 @@ then1951: store { ptr, i64, i64 } %t65, ptr %a48 store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) - br label %endif1953 -endif1953: + br label %endif1957 +endif1957: %t68 = load { ptr, i64, i64 }, ptr %a48 store { ptr, i64, i64 } { ptr @.str.1100, i64 3, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 @@ -22293,8 +22319,8 @@ endif1953: store { ptr, i64, i64 } %t92, ptr %a93 %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 9 %t95 = load i1, ptr %t94 - br i1 %t95, label %then1954, label %else1955 -then1954: + br i1 %t95, label %then1958, label %else1959 +then1958: %t96 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t97 = getelementptr inbounds %S.ast.Type, ptr %t96, i32 0, i32 0 %t98 = load { ptr, i64, i64 }, ptr %t97 @@ -22302,8 +22328,8 @@ then1954: store { ptr, i64, i64 } { ptr @.str.1104, i64 4, i64 0 }, ptr %a100 %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) %t102 = icmp ne i32 %t101, 0 - br i1 %t102, label %then1957, label %else1958 -then1957: + br i1 %t102, label %then1961, label %else1962 +then1961: %t103 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t103, ptr %a105 store { ptr, i64, i64 } { ptr @.str.1105, i64 5, i64 0 }, ptr %a106 @@ -22313,8 +22339,8 @@ then1957: store { ptr, i64, i64 } %t107, ptr %a93 store { ptr, i64, i64 } %t108, ptr %a109 call void @finch_str_drop(ptr %a109) - br label %endif1959 -else1958: + br label %endif1963 +else1962: %t110 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t110, ptr %a112 store { ptr, i64, i64 } { ptr @.str.1106, i64 4, i64 0 }, ptr %a113 @@ -22341,10 +22367,10 @@ else1958: store { ptr, i64, i64 } %t128, ptr %a93 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_drop(ptr %a130) - br label %endif1959 -endif1959: - br label %endif1956 -else1955: + br label %endif1963 +endif1963: + br label %endif1960 +else1959: %t131 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 @@ -22352,8 +22378,8 @@ else1955: store { ptr, i64, i64 } { ptr @.str.1108, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp eq i32 %t136, 0 - br i1 %t137, label %then1960, label %endif1962 -then1960: + br i1 %t137, label %then1964, label %endif1966 +then1964: %t138 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t138, ptr %a140 store { ptr, i64, i64 } { ptr @.str.1109, i64 4, i64 0 }, ptr %a141 @@ -22374,10 +22400,10 @@ then1960: store { ptr, i64, i64 } %t151, ptr %a93 store { ptr, i64, i64 } %t152, ptr %a153 call void @finch_str_drop(ptr %a153) - br label %endif1962 -endif1962: - br label %endif1956 -endif1956: + br label %endif1966 +endif1966: + br label %endif1960 +endif1960: %t154 = load { ptr, i64, i64 }, ptr %a93 call void @finch_str_drop(ptr %a48) call void @finch.drop.arr_str(ptr %a2) @@ -22415,18 +22441,18 @@ entry: store %S.gen.FnSig %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic1963, label %ok1964 -panic1963: + br i1 %t5, label %panic1967, label %ok1968 +panic1967: call void @finch_panic(ptr @.str.1110, i64 263, ptr @.str.1111) unreachable -ok1964: +ok1968: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 %t8 = xor i1 %t7, true - br i1 %t8, label %then1965, label %endif1967 -then1965: + br i1 %t8, label %then1969, label %endif1971 +then1969: ret void -endif1967: +endif1971: %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t10 = load i64, ptr %t9 store i64 %t10, ptr %a11 @@ -22436,32 +22462,32 @@ endif1967: store { ptr, i64, i64 } { ptr @.str.1112, i64 6, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br i1 %t17, label %then1968, label %endif1970 -then1968: + br i1 %t17, label %then1972, label %endif1974 +then1972: %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t19 = load i64, ptr %t18 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a11 - br label %endif1970 -endif1970: + br label %endif1974 +endif1974: %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null - br i1 %t22, label %panic1971, label %ok1972 -panic1971: + br i1 %t22, label %panic1975, label %ok1976 +panic1975: call void @finch_panic(ptr @.str.1113, i64 270, ptr @.str.1114) unreachable -ok1972: +ok1976: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 0 %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 16 %t25 = load i64, ptr %t24 %t26 = load { ptr, i64, i64 }, ptr %t23 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 - br i1 %t28, label %range1973, label %inrange1974 -range1973: + br i1 %t28, label %range1977, label %inrange1978 +range1977: call void @finch_panic_index(ptr @.str.1115, i64 270, i64 %t25, i64 %t27) unreachable -inrange1974: +inrange1978: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i64 %t25 %t31 = getelementptr inbounds %S.ast.Program, ptr %t30, i32 0, i32 8 @@ -22470,11 +22496,11 @@ inrange1974: %t34 = load { ptr, i64, i64 }, ptr %t31 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 - br i1 %t36, label %range1975, label %inrange1976 -range1975: + br i1 %t36, label %range1979, label %inrange1980 +range1979: call void @finch_panic_index(ptr @.str.1116, i64 270, i64 %t33, i64 %t35) unreachable -inrange1976: +inrange1980: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 %t39 = load %S.ast.Node, ptr %t38 @@ -22492,21 +22518,21 @@ inrange1976: %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = icmp sgt i64 %t52, 0 - br label %logic.from1977 -logic.from1977: - br i1 %t53, label %logic.rhs1978, label %logic.end1979 -logic.rhs1978: + br label %logic.from1981 +logic.from1981: + br i1 %t53, label %logic.rhs1982, label %logic.end1983 +logic.rhs1982: %t54 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 2 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp eq i64 %t56, 0 - br label %logic.rend1980 -logic.rend1980: - br label %logic.end1979 -logic.end1979: - %t58 = phi i1 [ false, %logic.from1977 ], [ %t57, %logic.rend1980 ] - br i1 %t58, label %then1981, label %endif1983 -then1981: + br label %logic.rend1984 +logic.rend1984: + br label %logic.end1983 +logic.end1983: + %t58 = phi i1 [ false, %logic.from1981 ], [ %t57, %logic.rend1984 ] + br i1 %t58, label %then1985, label %endif1987 +then1985: %t59 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 @@ -22516,8 +22542,8 @@ then1981: store { ptr, i64, i64 } %t63, ptr %a49 store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_drop(ptr %a65) - br label %endif1983 -endif1983: + br label %endif1987 +endif1987: %t66 = load ptr, ptr %a1 %t67 = load %S.ast.Node, ptr %a2 %t68 = load i64, ptr %a11 @@ -22539,22 +22565,22 @@ endif1983: %t82 = load { ptr, i64, i64 }, ptr %a78 %t83 = load ptr, ptr %a1 %t84 = icmp eq ptr %t83, null - br i1 %t84, label %panic1984, label %ok1985 -panic1984: + br i1 %t84, label %panic1988, label %ok1989 +panic1988: call void @finch_panic(ptr @.str.1119, i64 275, ptr @.str.1120) unreachable -ok1985: +ok1989: %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 1 %t86 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 13 %t87 = load i64, ptr %t86 %t88 = load { ptr, i64, i64 }, ptr %t85 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 %t87, %t89 - br i1 %t90, label %range1986, label %inrange1987 -range1986: + br i1 %t90, label %range1990, label %inrange1991 +range1990: call void @finch_panic_index(ptr @.str.1121, i64 275, i64 %t87, i64 %t89) unreachable -inrange1987: +inrange1991: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t87 %t93 = load { ptr, i64, i64 }, ptr %t92 @@ -23110,25 +23136,25 @@ entry: store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 - br label %each.cond1988 -each.cond1988: + br label %each.cond1992 +each.cond1992: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body1989, label %each.end1991 -each.body1989: + br i1 %t7, label %each.body1993, label %each.end1995 +each.body1993: %t8 = load ptr, ptr %a2 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t6 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic1992, label %ok1993 -panic1992: + br i1 %t13, label %panic1996, label %ok1997 +panic1996: call void @finch_panic(ptr @.str.1122, i64 281, ptr @.str.1123) unreachable -ok1993: +ok1997: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 29 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load { ptr, i64, i64 }, ptr %a11 @@ -23143,30 +23169,30 @@ ok1993: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i64 %t21 store { ptr, i64, i64 } %t20, ptr %t24 store i64 %t22, ptr %t15 - br label %each.step1990 -each.step1990: + br label %each.step1994 +each.step1994: %t25 = load i64, ptr %a3 %t26 = add i64 %t25, 1 store i64 %t26, ptr %a3 - br label %each.cond1988 -each.end1991: + br label %each.cond1992 +each.end1995: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic1994, label %ok1995 -panic1994: + br i1 %t28, label %panic1998, label %ok1999 +panic1998: call void @finch_panic(ptr @.str.1125, i64 283, ptr @.str.1126) unreachable -ok1995: +ok1999: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 15 store i64 0, ptr %a30 - br label %each.cond1996 -each.cond1996: + br label %each.cond2000 +each.cond2000: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load i64, ptr %a30 %t34 = icmp slt i64 %t33, %t32 - br i1 %t34, label %each.body1997, label %each.end1999 -each.body1997: + br i1 %t34, label %each.body2001, label %each.end2003 +each.body2001: %t35 = load ptr, ptr %t29 %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t33 %t37 = load %S.gen.FnSig, ptr %t36 @@ -23176,22 +23202,22 @@ each.body1997: store %S.gen.FnSig %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null - br i1 %t43, label %panic2000, label %ok2001 -panic2000: + br i1 %t43, label %panic2004, label %ok2005 +panic2004: call void @finch_panic(ptr @.str.1127, i64 284, ptr @.str.1128) unreachable -ok2001: +ok2005: %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 0 %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 16 %t46 = load i64, ptr %t45 %t47 = load { ptr, i64, i64 }, ptr %t44 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = icmp uge i64 %t46, %t48 - br i1 %t49, label %range2002, label %inrange2003 -range2002: + br i1 %t49, label %range2006, label %inrange2007 +range2006: call void @finch_panic_index(ptr @.str.1129, i64 284, i64 %t46, i64 %t48) unreachable -inrange2003: +inrange2007: %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = getelementptr inbounds %S.ast.Program, ptr %t50, i64 %t46 %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i32 0, i32 8 @@ -23200,11 +23226,11 @@ inrange2003: %t55 = load { ptr, i64, i64 }, ptr %t52 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range2004, label %inrange2005 -range2004: + br i1 %t57, label %range2008, label %inrange2009 +range2008: call void @finch_panic_index(ptr @.str.1130, i64 284, i64 %t54, i64 %t56) unreachable -inrange2005: +inrange2009: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 @@ -23216,34 +23242,34 @@ inrange2005: %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 %t67 = load i64, ptr %t66 %t68 = icmp sgt i64 %t67, 0 - br i1 %t68, label %then2006, label %endif2008 -then2006: + br i1 %t68, label %then2010, label %endif2012 +then2010: call void @finch.drop.S_ast_Node(ptr %a64) call void @finch.drop.S_gen_FnSig(ptr %a41) - br label %each.step1998 -endif2008: + br label %each.step2002 +endif2012: store { ptr, i64, i64 } zeroinitializer, ptr %a69 %t70 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 %t72 = load i64, ptr %t71 store i64 0, ptr %a73 - br label %for.cond2009 -for.cond2009: + br label %for.cond2013 +for.cond2013: %t74 = load i64, ptr %a73 %t75 = icmp slt i64 %t74, %t72 - br i1 %t75, label %for.body2010, label %for.end2012 -for.body2010: + br i1 %t75, label %for.body2014, label %for.end2016 +for.body2014: %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 %t77 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 %t78 = load i64, ptr %a73 %t79 = load { ptr, i64, i64 }, ptr %t77 %t80 = extractvalue { ptr, i64, i64 } %t79, 1 %t81 = icmp uge i64 %t78, %t80 - br i1 %t81, label %range2013, label %inrange2014 -range2013: + br i1 %t81, label %range2017, label %inrange2018 +range2017: call void @finch_panic_index(ptr @.str.1131, i64 290, i64 %t78, i64 %t80) unreachable -inrange2014: +inrange2018: %t82 = extractvalue { ptr, i64, i64 } %t79, 0 %t83 = getelementptr inbounds %S.ast.Type, ptr %t82, i64 %t78 %t84 = load %S.ast.Type, ptr %t83 @@ -23259,11 +23285,11 @@ inrange2014: %t93 = load { ptr, i64, i64 }, ptr %t91 %t94 = extractvalue { ptr, i64, i64 } %t93, 1 %t95 = icmp uge i64 %t92, %t94 - br i1 %t95, label %range2015, label %inrange2016 -range2015: + br i1 %t95, label %range2019, label %inrange2020 +range2019: call void @finch_panic_index(ptr @.str.1133, i64 290, i64 %t92, i64 %t94) unreachable -inrange2016: +inrange2020: %t96 = extractvalue { ptr, i64, i64 } %t93, 0 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 %t92 %t98 = load { ptr, i64, i64 }, ptr %t97 @@ -23280,20 +23306,20 @@ inrange2016: %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 %t104 store { ptr, i64, i64 } %t103, ptr %t107 store i64 %t105, ptr %t76 - br label %for.step2011 -for.step2011: + br label %for.step2015 +for.step2015: %t108 = load i64, ptr %a73 %t109 = add i64 %t108, 1 store i64 %t109, ptr %a73 - br label %for.cond2009 -for.end2012: + br label %for.cond2013 +for.end2016: %t110 = load ptr, ptr %a1 %t111 = icmp eq ptr %t110, null - br i1 %t111, label %panic2017, label %ok2018 -panic2017: + br i1 %t111, label %panic2021, label %ok2022 +panic2021: call void @finch_panic(ptr @.str.1134, i64 292, ptr @.str.1135) unreachable -ok2018: +ok2022: %t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 29 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 0 @@ -23338,22 +23364,22 @@ ok2018: %t148 = load { ptr, i64, i64 }, ptr %a144 %t149 = load ptr, ptr %a1 %t150 = icmp eq ptr %t149, null - br i1 %t150, label %panic2019, label %ok2020 -panic2019: + br i1 %t150, label %panic2023, label %ok2024 +panic2023: call void @finch_panic(ptr @.str.1140, i64 292, ptr @.str.1141) unreachable -ok2020: +ok2024: %t151 = getelementptr inbounds %S.gen.Gen, ptr %t149, i32 0, i32 1 %t152 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 13 %t153 = load i64, ptr %t152 %t154 = load { ptr, i64, i64 }, ptr %t151 %t155 = extractvalue { ptr, i64, i64 } %t154, 1 %t156 = icmp uge i64 %t153, %t155 - br i1 %t156, label %range2021, label %inrange2022 -range2021: + br i1 %t156, label %range2025, label %inrange2026 +range2025: call void @finch_panic_index(ptr @.str.1142, i64 292, i64 %t153, i64 %t155) unreachable -inrange2022: +inrange2026: %t157 = extractvalue { ptr, i64, i64 } %t154, 0 %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t157, i64 %t153 %t159 = load { ptr, i64, i64 }, ptr %t158 @@ -23464,30 +23490,30 @@ inrange2022: call void @finch.drop.arr_str(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a64) call void @finch.drop.S_gen_FnSig(ptr %a41) - br label %each.step1998 -each.step1998: + br label %each.step2002 +each.step2002: %t244 = load i64, ptr %a30 %t245 = add i64 %t244, 1 store i64 %t245, ptr %a30 - br label %each.cond1996 -each.end1999: + br label %each.cond2000 +each.end2003: %t246 = load ptr, ptr %a1 %t247 = icmp eq ptr %t246, null - br i1 %t247, label %panic2023, label %ok2024 -panic2023: + br i1 %t247, label %panic2027, label %ok2028 +panic2027: call void @finch_panic(ptr @.str.1149, i64 294, ptr @.str.1150) unreachable -ok2024: +ok2028: %t248 = getelementptr inbounds %S.gen.Gen, ptr %t246, i32 0, i32 17 store i64 0, ptr %a249 - br label %each.cond2025 -each.cond2025: + br label %each.cond2029 +each.cond2029: %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 %t251 = load i64, ptr %t250 %t252 = load i64, ptr %a249 %t253 = icmp slt i64 %t252, %t251 - br i1 %t253, label %each.body2026, label %each.end2028 -each.body2026: + br i1 %t253, label %each.body2030, label %each.end2032 +each.body2030: %t254 = load ptr, ptr %t248 %t255 = getelementptr inbounds %S.gen.Template, ptr %t254, i64 %t252 %t256 = load %S.gen.Template, ptr %t255 @@ -23497,29 +23523,29 @@ each.body2026: store %S.gen.Template %t259, ptr %a260 %t261 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 6 %t262 = load i1, ptr %t261 - br i1 %t262, label %then2029, label %endif2031 -then2029: + br i1 %t262, label %then2033, label %endif2035 +then2033: call void @finch.drop.S_gen_Template(ptr %a260) - br label %each.step2027 -endif2031: + br label %each.step2031 +endif2035: %t263 = load ptr, ptr %a1 %t264 = icmp eq ptr %t263, null - br i1 %t264, label %panic2032, label %ok2033 -panic2032: + br i1 %t264, label %panic2036, label %ok2037 +panic2036: call void @finch_panic(ptr @.str.1151, i64 298, ptr @.str.1152) unreachable -ok2033: +ok2037: %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 0 %t266 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 4 %t267 = load i64, ptr %t266 %t268 = load { ptr, i64, i64 }, ptr %t265 %t269 = extractvalue { ptr, i64, i64 } %t268, 1 %t270 = icmp uge i64 %t267, %t269 - br i1 %t270, label %range2034, label %inrange2035 -range2034: + br i1 %t270, label %range2038, label %inrange2039 +range2038: call void @finch_panic_index(ptr @.str.1153, i64 298, i64 %t267, i64 %t269) unreachable -inrange2035: +inrange2039: %t271 = extractvalue { ptr, i64, i64 } %t268, 0 %t272 = getelementptr inbounds %S.ast.Program, ptr %t271, i64 %t267 %t273 = getelementptr inbounds %S.ast.Program, ptr %t272, i32 0, i32 8 @@ -23528,11 +23554,11 @@ inrange2035: %t276 = load { ptr, i64, i64 }, ptr %t273 %t277 = extractvalue { ptr, i64, i64 } %t276, 1 %t278 = icmp uge i64 %t275, %t277 - br i1 %t278, label %range2036, label %inrange2037 -range2036: + br i1 %t278, label %range2040, label %inrange2041 +range2040: call void @finch_panic_index(ptr @.str.1154, i64 298, i64 %t275, i64 %t277) unreachable -inrange2037: +inrange2041: %t279 = extractvalue { ptr, i64, i64 } %t276, 0 %t280 = getelementptr inbounds %S.ast.Node, ptr %t279, i64 %t275 %t281 = load %S.ast.Node, ptr %t280 @@ -23542,11 +23568,11 @@ inrange2037: store %S.ast.Node %t284, ptr %a285 %t286 = load ptr, ptr %a1 %t287 = icmp eq ptr %t286, null - br i1 %t287, label %panic2038, label %ok2039 -panic2038: + br i1 %t287, label %panic2042, label %ok2043 +panic2042: call void @finch_panic(ptr @.str.1155, i64 299, ptr @.str.1156) unreachable -ok2039: +ok2043: %t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 29 %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i32 0, i32 1 %t290 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 0 @@ -23591,22 +23617,22 @@ ok2039: %t324 = load { ptr, i64, i64 }, ptr %a320 %t325 = load ptr, ptr %a1 %t326 = icmp eq ptr %t325, null - br i1 %t326, label %panic2040, label %ok2041 -panic2040: + br i1 %t326, label %panic2044, label %ok2045 +panic2044: call void @finch_panic(ptr @.str.1161, i64 299, ptr @.str.1162) unreachable -ok2041: +ok2045: %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 1 %t328 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 13 %t329 = load i64, ptr %t328 %t330 = load { ptr, i64, i64 }, ptr %t327 %t331 = extractvalue { ptr, i64, i64 } %t330, 1 %t332 = icmp uge i64 %t329, %t331 - br i1 %t332, label %range2042, label %inrange2043 -range2042: + br i1 %t332, label %range2046, label %inrange2047 +range2046: call void @finch_panic_index(ptr @.str.1163, i64 299, i64 %t329, i64 %t331) unreachable -inrange2043: +inrange2047: %t333 = extractvalue { ptr, i64, i64 } %t330, 0 %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i64 %t329 %t335 = load { ptr, i64, i64 }, ptr %t334 @@ -23733,30 +23759,30 @@ inrange2043: store i64 %t432, ptr %t289 call void @finch.drop.S_ast_Node(ptr %a285) call void @finch.drop.S_gen_Template(ptr %a260) - br label %each.step2027 -each.step2027: + br label %each.step2031 +each.step2031: %t435 = load i64, ptr %a249 %t436 = add i64 %t435, 1 store i64 %t436, ptr %a249 - br label %each.cond2025 -each.end2028: + br label %each.cond2029 +each.end2032: %t437 = load ptr, ptr %a1 %t438 = icmp eq ptr %t437, null - br i1 %t438, label %panic2044, label %ok2045 -panic2044: + br i1 %t438, label %panic2048, label %ok2049 +panic2048: call void @finch_panic(ptr @.str.1173, i64 301, ptr @.str.1174) unreachable -ok2045: +ok2049: %t439 = getelementptr inbounds %S.gen.Gen, ptr %t437, i32 0, i32 16 store i64 0, ptr %a440 - br label %each.cond2046 -each.cond2046: + br label %each.cond2050 +each.cond2050: %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 %t442 = load i64, ptr %t441 %t443 = load i64, ptr %a440 %t444 = icmp slt i64 %t443, %t442 - br i1 %t444, label %each.body2047, label %each.end2049 -each.body2047: + br i1 %t444, label %each.body2051, label %each.end2053 +each.body2051: %t445 = load ptr, ptr %t439 %t446 = getelementptr inbounds %S.gen.StructDef, ptr %t445, i64 %t443 %t447 = load %S.gen.StructDef, ptr %t446 @@ -23766,42 +23792,42 @@ each.body2047: store %S.gen.StructDef %t450, ptr %a451 %t452 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 2 %t453 = load i1, ptr %t452 - br label %logic.from2050 -logic.from2050: - br i1 %t453, label %logic.end2052, label %logic.rhs2051 -logic.rhs2051: + br label %logic.from2054 +logic.from2054: + br i1 %t453, label %logic.end2056, label %logic.rhs2055 +logic.rhs2055: %t454 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 5 %t455 = getelementptr inbounds { ptr, i64, i64 }, ptr %t454, i32 0, i32 1 %t456 = load i64, ptr %t455 %t457 = icmp sgt i64 %t456, 0 - br label %logic.rend2053 -logic.rend2053: - br label %logic.end2052 -logic.end2052: - %t458 = phi i1 [ true, %logic.from2050 ], [ %t457, %logic.rend2053 ] - br i1 %t458, label %then2054, label %endif2056 -then2054: + br label %logic.rend2057 +logic.rend2057: + br label %logic.end2056 +logic.end2056: + %t458 = phi i1 [ true, %logic.from2054 ], [ %t457, %logic.rend2057 ] + br i1 %t458, label %then2058, label %endif2060 +then2058: call void @finch.drop.S_gen_StructDef(ptr %a451) - br label %each.step2048 -endif2056: + br label %each.step2052 +endif2060: %t459 = load ptr, ptr %a1 %t460 = icmp eq ptr %t459, null - br i1 %t460, label %panic2057, label %ok2058 -panic2057: + br i1 %t460, label %panic2061, label %ok2062 +panic2061: call void @finch_panic(ptr @.str.1175, i64 305, ptr @.str.1176) unreachable -ok2058: +ok2062: %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 0 %t462 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 13 %t463 = load i64, ptr %t462 %t464 = load { ptr, i64, i64 }, ptr %t461 %t465 = extractvalue { ptr, i64, i64 } %t464, 1 %t466 = icmp uge i64 %t463, %t465 - br i1 %t466, label %range2059, label %inrange2060 -range2059: + br i1 %t466, label %range2063, label %inrange2064 +range2063: call void @finch_panic_index(ptr @.str.1177, i64 305, i64 %t463, i64 %t465) unreachable -inrange2060: +inrange2064: %t467 = extractvalue { ptr, i64, i64 } %t464, 0 %t468 = getelementptr inbounds %S.ast.Program, ptr %t467, i64 %t463 %t469 = getelementptr inbounds %S.ast.Program, ptr %t468, i32 0, i32 6 @@ -23810,11 +23836,11 @@ inrange2060: %t472 = load { ptr, i64, i64 }, ptr %t469 %t473 = extractvalue { ptr, i64, i64 } %t472, 1 %t474 = icmp uge i64 %t471, %t473 - br i1 %t474, label %range2061, label %inrange2062 -range2061: + br i1 %t474, label %range2065, label %inrange2066 +range2065: call void @finch_panic_index(ptr @.str.1178, i64 305, i64 %t471, i64 %t473) unreachable -inrange2062: +inrange2066: %t475 = extractvalue { ptr, i64, i64 } %t472, 0 %t476 = getelementptr inbounds %S.ast.Node, ptr %t475, i64 %t471 %t477 = load %S.ast.Node, ptr %t476 @@ -23824,11 +23850,11 @@ inrange2062: store %S.ast.Node %t480, ptr %a481 %t482 = load ptr, ptr %a1 %t483 = icmp eq ptr %t482, null - br i1 %t483, label %panic2063, label %ok2064 -panic2063: + br i1 %t483, label %panic2067, label %ok2068 +panic2067: call void @finch_panic(ptr @.str.1179, i64 306, ptr @.str.1180) unreachable -ok2064: +ok2068: %t484 = getelementptr inbounds %S.gen.Gen, ptr %t482, i32 0, i32 29 %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %t484, i32 0, i32 1 %t486 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 @@ -23859,22 +23885,22 @@ ok2064: %t508 = load { ptr, i64, i64 }, ptr %a504 %t509 = load ptr, ptr %a1 %t510 = icmp eq ptr %t509, null - br i1 %t510, label %panic2065, label %ok2066 -panic2065: + br i1 %t510, label %panic2069, label %ok2070 +panic2069: call void @finch_panic(ptr @.str.1184, i64 306, ptr @.str.1185) unreachable -ok2066: +ok2070: %t511 = getelementptr inbounds %S.gen.Gen, ptr %t509, i32 0, i32 1 %t512 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 13 %t513 = load i64, ptr %t512 %t514 = load { ptr, i64, i64 }, ptr %t511 %t515 = extractvalue { ptr, i64, i64 } %t514, 1 %t516 = icmp uge i64 %t513, %t515 - br i1 %t516, label %range2067, label %inrange2068 -range2067: + br i1 %t516, label %range2071, label %inrange2072 +range2071: call void @finch_panic_index(ptr @.str.1186, i64 306, i64 %t513, i64 %t515) unreachable -inrange2068: +inrange2072: %t517 = extractvalue { ptr, i64, i64 } %t514, 0 %t518 = getelementptr inbounds { ptr, i64, i64 }, ptr %t517, i64 %t513 %t519 = load { ptr, i64, i64 }, ptr %t518 @@ -23931,19 +23957,19 @@ inrange2068: %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 %t561 = load i64, ptr %t560 store i64 0, ptr %a562 - br label %for.cond2069 -for.cond2069: + br label %for.cond2073 +for.cond2073: %t563 = load i64, ptr %a562 %t564 = icmp slt i64 %t563, %t561 - br i1 %t564, label %for.body2070, label %for.end2072 -for.body2070: + br i1 %t564, label %for.body2074, label %for.end2076 +for.body2074: %t565 = load ptr, ptr %a1 %t566 = icmp eq ptr %t565, null - br i1 %t566, label %panic2073, label %ok2074 -panic2073: + br i1 %t566, label %panic2077, label %ok2078 +panic2077: call void @finch_panic(ptr @.str.1189, i64 308, ptr @.str.1190) unreachable -ok2074: +ok2078: %t567 = getelementptr inbounds %S.gen.Gen, ptr %t565, i32 0, i32 29 %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %t567, i32 0, i32 1 %t569 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 @@ -23977,11 +24003,11 @@ ok2074: %t594 = load { ptr, i64, i64 }, ptr %t592 %t595 = extractvalue { ptr, i64, i64 } %t594, 1 %t596 = icmp uge i64 %t593, %t595 - br i1 %t596, label %range2075, label %inrange2076 -range2075: + br i1 %t596, label %range2079, label %inrange2080 +range2079: call void @finch_panic_index(ptr @.str.1194, i64 308, i64 %t593, i64 %t595) unreachable -inrange2076: +inrange2080: %t597 = extractvalue { ptr, i64, i64 } %t594, 0 %t598 = getelementptr inbounds { ptr, i64, i64 }, ptr %t597, i64 %t593 %t599 = load { ptr, i64, i64 }, ptr %t598 @@ -24002,11 +24028,11 @@ inrange2076: %t612 = load { ptr, i64, i64 }, ptr %t610 %t613 = extractvalue { ptr, i64, i64 } %t612, 1 %t614 = icmp uge i64 %t611, %t613 - br i1 %t614, label %range2077, label %inrange2078 -range2077: + br i1 %t614, label %range2081, label %inrange2082 +range2081: call void @finch_panic_index(ptr @.str.1196, i64 308, i64 %t611, i64 %t613) unreachable -inrange2078: +inrange2082: %t615 = extractvalue { ptr, i64, i64 } %t612, 0 %t616 = getelementptr inbounds %S.ast.Type, ptr %t615, i64 %t611 %t617 = load %S.ast.Type, ptr %t616 @@ -24026,68 +24052,68 @@ inrange2078: %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 store { ptr, i64, i64 } %t624, ptr %t628 store i64 %t626, ptr %t568 - br label %for.step2071 -for.step2071: + br label %for.step2075 +for.step2075: %t629 = load i64, ptr %a562 %t630 = add i64 %t629, 1 store i64 %t630, ptr %a562 - br label %for.cond2069 -for.end2072: + br label %for.cond2073 +for.end2076: call void @finch.drop.S_ast_Node(ptr %a481) call void @finch.drop.S_gen_StructDef(ptr %a451) - br label %each.step2048 -each.step2048: + br label %each.step2052 +each.step2052: %t631 = load i64, ptr %a440 %t632 = add i64 %t631, 1 store i64 %t632, ptr %a440 - br label %each.cond2046 -each.end2049: + br label %each.cond2050 +each.end2053: %t633 = load ptr, ptr %a1 %t634 = icmp eq ptr %t633, null - br i1 %t634, label %panic2079, label %ok2080 -panic2079: + br i1 %t634, label %panic2083, label %ok2084 +panic2083: call void @finch_panic(ptr @.str.1197, i64 311, ptr @.str.1198) unreachable -ok2080: +ok2084: %t635 = getelementptr inbounds %S.gen.Gen, ptr %t633, i32 0, i32 0 %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i32 0, i32 1 %t637 = load i64, ptr %t636 store i64 0, ptr %a638 - br label %for.cond2081 -for.cond2081: + br label %for.cond2085 +for.cond2085: %t639 = load i64, ptr %a638 %t640 = icmp slt i64 %t639, %t637 - br i1 %t640, label %for.body2082, label %for.end2084 -for.body2082: + br i1 %t640, label %for.body2086, label %for.end2088 +for.body2086: %t641 = load ptr, ptr %a1 %t642 = icmp eq ptr %t641, null - br i1 %t642, label %panic2085, label %ok2086 -panic2085: + br i1 %t642, label %panic2089, label %ok2090 +panic2089: call void @finch_panic(ptr @.str.1199, i64 312, ptr @.str.1200) unreachable -ok2086: +ok2090: %t643 = getelementptr inbounds %S.gen.Gen, ptr %t641, i32 0, i32 0 %t644 = load i64, ptr %a638 %t645 = load { ptr, i64, i64 }, ptr %t643 %t646 = extractvalue { ptr, i64, i64 } %t645, 1 %t647 = icmp uge i64 %t644, %t646 - br i1 %t647, label %range2087, label %inrange2088 -range2087: + br i1 %t647, label %range2091, label %inrange2092 +range2091: call void @finch_panic_index(ptr @.str.1201, i64 312, i64 %t644, i64 %t646) unreachable -inrange2088: +inrange2092: %t648 = extractvalue { ptr, i64, i64 } %t645, 0 %t649 = getelementptr inbounds %S.ast.Program, ptr %t648, i64 %t644 %t650 = getelementptr inbounds %S.ast.Program, ptr %t649, i32 0, i32 7 store i64 0, ptr %a651 - br label %each.cond2089 -each.cond2089: + br label %each.cond2093 +each.cond2093: %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %t650, i32 0, i32 1 %t653 = load i64, ptr %t652 %t654 = load i64, ptr %a651 %t655 = icmp slt i64 %t654, %t653 - br i1 %t655, label %each.body2090, label %each.end2092 -each.body2090: + br i1 %t655, label %each.body2094, label %each.end2096 +each.body2094: %t656 = load ptr, ptr %t650 %t657 = getelementptr inbounds %S.ast.Node, ptr %t656, i64 %t654 %t658 = load %S.ast.Node, ptr %t657 @@ -24099,14 +24125,14 @@ each.body2090: store { ptr, i64, i64 } zeroinitializer, ptr %a664 %t665 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 9 store i64 0, ptr %a666 - br label %each.cond2093 -each.cond2093: + br label %each.cond2097 +each.cond2097: %t667 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 %t668 = load i64, ptr %t667 %t669 = load i64, ptr %a666 %t670 = icmp slt i64 %t669, %t668 - br i1 %t670, label %each.body2094, label %each.end2096 -each.body2094: + br i1 %t670, label %each.body2098, label %each.end2100 +each.body2098: %t671 = load ptr, ptr %t665 %t672 = getelementptr inbounds %S.ast.Node, ptr %t671, i64 %t669 %t673 = load %S.ast.Node, ptr %t672 @@ -24124,13 +24150,13 @@ each.body2094: %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 store { ptr, i64, i64 } %t680, ptr %t684 store i64 %t682, ptr %t675 - br label %each.step2095 -each.step2095: + br label %each.step2099 +each.step2099: %t685 = load i64, ptr %a666 %t686 = add i64 %t685, 1 store i64 %t686, ptr %a666 - br label %each.cond2093 -each.end2096: + br label %each.cond2097 +each.end2100: %t687 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1203, i64 1, i64 0 }, ptr %a688 call void @finch_str_join(ptr %a689, ptr %a664, ptr %a688) @@ -24141,30 +24167,30 @@ each.end2096: call void @finch_str_drop(ptr %a692) %t693 = load ptr, ptr %a1 %t694 = icmp eq ptr %t693, null - br i1 %t694, label %panic2097, label %ok2098 -panic2097: + br i1 %t694, label %panic2101, label %ok2102 +panic2101: call void @finch_panic(ptr @.str.1204, i64 319, ptr @.str.1205) unreachable -ok2098: +ok2102: %t695 = getelementptr inbounds %S.gen.Gen, ptr %t693, i32 0, i32 29 %t696 = getelementptr inbounds { ptr, i64, i64 }, ptr %t695, i32 0, i32 1 %t697 = load ptr, ptr %a1 %t698 = icmp eq ptr %t697, null - br i1 %t698, label %panic2099, label %ok2100 -panic2099: + br i1 %t698, label %panic2103, label %ok2104 +panic2103: call void @finch_panic(ptr @.str.1207, i64 319, ptr @.str.1208) unreachable -ok2100: +ok2104: %t699 = getelementptr inbounds %S.gen.Gen, ptr %t697, i32 0, i32 0 %t700 = load i64, ptr %a638 %t701 = load { ptr, i64, i64 }, ptr %t699 %t702 = extractvalue { ptr, i64, i64 } %t701, 1 %t703 = icmp uge i64 %t700, %t702 - br i1 %t703, label %range2101, label %inrange2102 -range2101: + br i1 %t703, label %range2105, label %inrange2106 +range2105: call void @finch_panic_index(ptr @.str.1209, i64 319, i64 %t700, i64 %t702) unreachable -inrange2102: +inrange2106: %t704 = extractvalue { ptr, i64, i64 } %t701, 0 %t705 = getelementptr inbounds %S.ast.Program, ptr %t704, i64 %t700 %t706 = getelementptr inbounds %S.ast.Program, ptr %t705, i32 0, i32 0 @@ -24195,22 +24221,22 @@ inrange2102: %t728 = load { ptr, i64, i64 }, ptr %a724 %t729 = load ptr, ptr %a1 %t730 = icmp eq ptr %t729, null - br i1 %t730, label %panic2103, label %ok2104 -panic2103: + br i1 %t730, label %panic2107, label %ok2108 +panic2107: call void @finch_panic(ptr @.str.1212, i64 319, ptr @.str.1213) unreachable -ok2104: +ok2108: %t731 = getelementptr inbounds %S.gen.Gen, ptr %t729, i32 0, i32 1 %t732 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 13 %t733 = load i64, ptr %t732 %t734 = load { ptr, i64, i64 }, ptr %t731 %t735 = extractvalue { ptr, i64, i64 } %t734, 1 %t736 = icmp uge i64 %t733, %t735 - br i1 %t736, label %range2105, label %inrange2106 -range2105: + br i1 %t736, label %range2109, label %inrange2110 +range2109: call void @finch_panic_index(ptr @.str.1214, i64 319, i64 %t733, i64 %t735) unreachable -inrange2106: +inrange2110: %t737 = extractvalue { ptr, i64, i64 } %t734, 0 %t738 = getelementptr inbounds { ptr, i64, i64 }, ptr %t737, i64 %t733 %t739 = load { ptr, i64, i64 }, ptr %t738 @@ -24279,20 +24305,20 @@ inrange2106: call void @finch.drop.arr_str(ptr %a664) call void @finch_str_drop(ptr %a663) call void @finch.drop.S_ast_Node(ptr %a662) - br label %each.step2091 -each.step2091: + br label %each.step2095 +each.step2095: %t790 = load i64, ptr %a651 %t791 = add i64 %t790, 1 store i64 %t791, ptr %a651 - br label %each.cond2089 -each.end2092: - br label %for.step2083 -for.step2083: + br label %each.cond2093 +each.end2096: + br label %for.step2087 +for.step2087: %t792 = load i64, ptr %a638 %t793 = add i64 %t792, 1 store i64 %t793, ptr %a638 - br label %for.cond2081 -for.end2084: + br label %for.cond2085 +for.end2088: ret void } @@ -24341,42 +24367,42 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2107, label %ok2108 -panic2107: + br i1 %t5, label %panic2111, label %ok2112 +panic2111: call void @finch_panic(ptr @.str.1218, i64 325, ptr @.str.1219) unreachable -ok2108: +ok2112: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 - br label %logic.from2109 -logic.from2109: - br i1 %t7, label %logic.rhs2110, label %logic.end2111 -logic.rhs2110: + br label %logic.from2113 +logic.from2113: + br i1 %t7, label %logic.rhs2114, label %logic.end2115 +logic.rhs2114: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic2112, label %ok2113 -panic2112: + br i1 %t9, label %panic2116, label %ok2117 +panic2116: call void @finch_panic(ptr @.str.1220, i64 325, ptr @.str.1221) unreachable -ok2113: +ok2117: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 29 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 - br label %logic.rend2114 -logic.rend2114: - br label %logic.end2111 -logic.end2111: - %t14 = phi i1 [ false, %logic.from2109 ], [ %t13, %logic.rend2114 ] - br i1 %t14, label %then2115, label %endif2117 -then2115: + br label %logic.rend2118 +logic.rend2118: + br label %logic.end2115 +logic.end2115: + %t14 = phi i1 [ false, %logic.from2113 ], [ %t13, %logic.rend2118 ] + br i1 %t14, label %then2119, label %endif2121 +then2119: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic2118, label %ok2119 -panic2118: + br i1 %t16, label %panic2122, label %ok2123 +panic2122: call void @finch_panic(ptr @.str.1222, i64 326, ptr @.str.1223) unreachable -ok2119: +ok2123: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 29 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1224, i64 1, i64 0 }, ptr %a19 @@ -24391,26 +24417,26 @@ ok2119: store { ptr, i64, i64 } %t21, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = call i32 (ptr, ...) @printf(ptr @.str.1227) - br label %endif2117 -endif2117: + br label %endif2121 +endif2121: %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null - br i1 %t31, label %panic2120, label %ok2121 -panic2120: + br i1 %t31, label %panic2124, label %ok2125 +panic2124: call void @finch_panic(ptr @.str.1228, i64 328, ptr @.str.1229) unreachable -ok2121: +ok2125: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 1 %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t34 = load i64, ptr %t33 %t35 = load { ptr, i64, i64 }, ptr %t32 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 %t34, %t36 - br i1 %t37, label %range2122, label %inrange2123 -range2122: + br i1 %t37, label %range2126, label %inrange2127 +range2126: call void @finch_panic_index(ptr @.str.1230, i64 328, i64 %t34, i64 %t36) unreachable -inrange2123: +inrange2127: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t34 %t40 = load { ptr, i64, i64 }, ptr %t39 @@ -24463,11 +24489,11 @@ inrange2123: %t80 = load { ptr, i64, i64 }, ptr %a76 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic2124, label %ok2125 -panic2124: + br i1 %t82, label %panic2128, label %ok2129 +panic2128: call void @finch_panic(ptr @.str.1234, i64 328, ptr @.str.1235) unreachable -ok2125: +ok2129: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 20 %t84 = load { ptr, i64, i64 }, ptr %t83 store { ptr, i64, i64 } %t80, ptr %a86 @@ -24518,37 +24544,37 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2126, label %ok2127 -panic2126: + br i1 %t4, label %panic2130, label %ok2131 +panic2130: call void @finch_panic(ptr @.str.1239, i64 334, ptr @.str.1240) unreachable -ok2127: +ok2131: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 36 %t6 = load i64, ptr %t5 %t7 = icmp sge i64 %t6, 0 - br label %logic.from2128 -logic.from2128: - br i1 %t7, label %logic.rhs2129, label %logic.end2130 -logic.rhs2129: + br label %logic.from2132 +logic.from2132: + br i1 %t7, label %logic.rhs2133, label %logic.end2134 +logic.rhs2133: %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 store { ptr, i64, i64 } { ptr @.str.1242, i64 5, i64 0 }, ptr %a11 %t12 = call i64 @finch_str_find(ptr %a9, ptr %a11) %t13 = icmp sge i64 %t12, 0 - br label %logic.rend2131 -logic.rend2131: - br label %logic.end2130 -logic.end2130: - %t14 = phi i1 [ false, %logic.from2128 ], [ %t13, %logic.rend2131 ] - br i1 %t14, label %then2132, label %endif2134 -then2132: + br label %logic.rend2135 +logic.rend2135: + br label %logic.end2134 +logic.end2134: + %t14 = phi i1 [ false, %logic.from2132 ], [ %t13, %logic.rend2135 ] + br i1 %t14, label %then2136, label %endif2138 +then2136: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic2135, label %ok2136 -panic2135: + br i1 %t16, label %panic2139, label %ok2140 +panic2139: call void @finch_panic(ptr @.str.1243, i64 335, ptr @.str.1244) unreachable -ok2136: +ok2140: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 4 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %a2 @@ -24582,14 +24608,14 @@ ok2136: store { ptr, i64, i64 } %t38, ptr %t42 store i64 %t40, ptr %t18 ret void -endif2134: +endif2138: %t43 = load ptr, ptr %a1 %t44 = icmp eq ptr %t43, null - br i1 %t44, label %panic2137, label %ok2138 -panic2137: + br i1 %t44, label %panic2141, label %ok2142 +panic2141: call void @finch_panic(ptr @.str.1247, i64 338, ptr @.str.1248) unreachable -ok2138: +ok2142: %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 4 %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %a2 @@ -24618,22 +24644,22 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic2139, label %ok2140 -panic2139: + br i1 %t3, label %panic2143, label %ok2144 +panic2143: call void @finch_panic(ptr @.str.1250, i64 342, ptr @.str.1251) unreachable -ok2140: +ok2144: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 6 %t5 = load i64, ptr %t4 %t6 = add i64 %t5, 1 store i64 %t6, ptr %t4 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic2141, label %ok2142 -panic2141: + br i1 %t8, label %panic2145, label %ok2146 +panic2145: call void @finch_panic(ptr @.str.1253, i64 343, ptr @.str.1254) unreachable -ok2142: +ok2146: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 6 %t10 = load i64, ptr %t9 call void @finch_str_from_int(ptr %a11, i64 %t10) @@ -24660,11 +24686,11 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2143, label %ok2144 -panic2143: + br i1 %t4, label %panic2147, label %ok2148 +panic2147: call void @finch_panic(ptr @.str.1255, i64 347, ptr @.str.1256) unreachable -ok2144: +ok2148: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 7 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 @@ -24672,11 +24698,11 @@ ok2144: %t8 = load { ptr, i64, i64 }, ptr %a2 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic2145, label %ok2146 -panic2145: + br i1 %t10, label %panic2149, label %ok2150 +panic2149: call void @finch_panic(ptr @.str.1257, i64 348, ptr @.str.1258) unreachable -ok2146: +ok2150: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 7 %t12 = load i64, ptr %t11 call void @finch_str_from_int(ptr %a13, i64 %t12) @@ -24701,11 +24727,11 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2147, label %ok2148 -panic2147: + br i1 %t4, label %panic2151, label %ok2152 +panic2151: call void @finch_panic(ptr @.str.1259, i64 352, ptr @.str.1260) unreachable -ok2148: +ok2152: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 4 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 @@ -24722,11 +24748,11 @@ ok2148: store i64 %t13, ptr %t6 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic2149, label %ok2150 -panic2149: + br i1 %t17, label %panic2153, label %ok2154 +panic2153: call void @finch_panic(ptr @.str.1262, i64 353, ptr @.str.1263) unreachable -ok2150: +ok2154: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 store i1 false, ptr %t18 ret void @@ -24744,16 +24770,16 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2151, label %ok2152 -panic2151: + br i1 %t4, label %panic2155, label %ok2156 +panic2155: call void @finch_panic(ptr @.str.1264, i64 357, ptr @.str.1265) unreachable -ok2152: +ok2156: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 9 %t6 = load i1, ptr %t5 %t7 = xor i1 %t6, true - br i1 %t7, label %then2153, label %endif2155 -then2153: + br i1 %t7, label %then2157, label %endif2159 +then2157: %t8 = load ptr, ptr %a1 %t9 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1266, i64 10, i64 0 }, ptr %a11 @@ -24765,15 +24791,15 @@ then2153: call void @finch_str_drop(ptr %a14) %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic2156, label %ok2157 -panic2156: + br i1 %t16, label %panic2160, label %ok2161 +panic2160: call void @finch_panic(ptr @.str.1267, i64 359, ptr @.str.1268) unreachable -ok2157: +ok2161: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 9 store i1 true, ptr %t17 - br label %endif2155 -endif2155: + br label %endif2159 +endif2159: ret void } @@ -24844,11 +24870,11 @@ entry: call void @finch_str_drop(ptr %a33) %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic2158, label %ok2159 -panic2158: + br i1 %t35, label %panic2162, label %ok2163 +panic2162: call void @finch_panic(ptr @.str.1272, i64 365, ptr @.str.1273) unreachable -ok2159: +ok2163: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 9 store i1 true, ptr %t36 ret void @@ -24883,22 +24909,22 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2160, label %ok2161 -panic2160: + br i1 %t4, label %panic2164, label %ok2165 +panic2164: call void @finch_panic(ptr @.str.1274, i64 369, ptr @.str.1275) unreachable -ok2161: +ok2165: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 6 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic2162, label %ok2163 -panic2162: + br i1 %t9, label %panic2166, label %ok2167 +panic2166: call void @finch_panic(ptr @.str.1277, i64 370, ptr @.str.1278) unreachable -ok2163: +ok2167: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 6 %t11 = load i64, ptr %t10 call void @finch_str_from_int(ptr %a12, i64 %t11) @@ -24912,11 +24938,11 @@ ok2163: store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic2164, label %ok2165 -panic2164: + br i1 %t21, label %panic2168, label %ok2169 +panic2168: call void @finch_panic(ptr @.str.1279, i64 371, ptr @.str.1280) unreachable -ok2165: +ok2169: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 5 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %a19 @@ -25170,27 +25196,27 @@ entry: %t6 = load i64, ptr %t3 %t7 = load ptr, ptr %a1 store i64 0, ptr %a8 - br label %find.cond2166 -find.cond2166: + br label %find.cond2170 +find.cond2170: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t6 - br i1 %t10, label %find.body2167, label %find.end2170 -find.body2167: + br i1 %t10, label %find.body2171, label %find.end2174 +find.body2171: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } %t4, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br i1 %t16, label %find.hit2168, label %find.next2169 -find.hit2168: + br i1 %t16, label %find.hit2172, label %find.next2173 +find.hit2172: store i64 %t9, ptr %a5 - br label %find.end2170 -find.next2169: + br label %find.end2174 +find.next2173: %t17 = add i64 %t9, 1 store i64 %t17, ptr %a8 - br label %find.cond2166 -find.end2170: + br label %find.cond2170 +find.end2174: %t18 = load i64, ptr %a5 %t19 = icmp sge i64 %t18, 0 ret i1 %t19 @@ -25231,48 +25257,48 @@ entry: store { ptr, i64, i64 } { ptr @.str.1290, i64 3, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br label %logic.from2171 -logic.from2171: - br i1 %t12, label %logic.end2173, label %logic.rhs2172 -logic.rhs2172: + br label %logic.from2175 +logic.from2175: + br i1 %t12, label %logic.end2177, label %logic.rhs2176 +logic.rhs2176: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1291, i64 2, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br label %logic.rend2174 -logic.rend2174: - br label %logic.end2173 -logic.end2173: - %t18 = phi i1 [ true, %logic.from2171 ], [ %t17, %logic.rend2174 ] - br label %logic.from2175 -logic.from2175: - br i1 %t18, label %logic.end2177, label %logic.rhs2176 -logic.rhs2176: + br label %logic.rend2178 +logic.rend2178: + br label %logic.end2177 +logic.end2177: + %t18 = phi i1 [ true, %logic.from2175 ], [ %t17, %logic.rend2178 ] + br label %logic.from2179 +logic.from2179: + br i1 %t18, label %logic.end2181, label %logic.rhs2180 +logic.rhs2180: %t19 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1292, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend2178 -logic.rend2178: - br label %logic.end2177 -logic.end2177: - %t24 = phi i1 [ true, %logic.from2175 ], [ %t23, %logic.rend2178 ] - br label %logic.from2179 -logic.from2179: - br i1 %t24, label %logic.end2181, label %logic.rhs2180 -logic.rhs2180: + br label %logic.rend2182 +logic.rend2182: + br label %logic.end2181 +logic.end2181: + %t24 = phi i1 [ true, %logic.from2179 ], [ %t23, %logic.rend2182 ] + br label %logic.from2183 +logic.from2183: + br i1 %t24, label %logic.end2185, label %logic.rhs2184 +logic.rhs2184: %t25 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1293, i64 3, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br label %logic.rend2182 -logic.rend2182: - br label %logic.end2181 -logic.end2181: - %t30 = phi i1 [ true, %logic.from2179 ], [ %t29, %logic.rend2182 ] + br label %logic.rend2186 +logic.rend2186: + br label %logic.end2185 +logic.end2185: + %t30 = phi i1 [ true, %logic.from2183 ], [ %t29, %logic.rend2186 ] call void @finch_str_drop(ptr %a7) ret i1 %t30 } @@ -25303,48 +25329,48 @@ entry: store { ptr, i64, i64 } { ptr @.str.1294, i64 2, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br label %logic.from2183 -logic.from2183: - br i1 %t12, label %logic.end2185, label %logic.rhs2184 -logic.rhs2184: + br label %logic.from2187 +logic.from2187: + br i1 %t12, label %logic.end2189, label %logic.rhs2188 +logic.rhs2188: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1295, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br label %logic.rend2186 -logic.rend2186: - br label %logic.end2185 -logic.end2185: - %t18 = phi i1 [ true, %logic.from2183 ], [ %t17, %logic.rend2186 ] - br label %logic.from2187 -logic.from2187: - br i1 %t18, label %logic.end2189, label %logic.rhs2188 -logic.rhs2188: + br label %logic.rend2190 +logic.rend2190: + br label %logic.end2189 +logic.end2189: + %t18 = phi i1 [ true, %logic.from2187 ], [ %t17, %logic.rend2190 ] + br label %logic.from2191 +logic.from2191: + br i1 %t18, label %logic.end2193, label %logic.rhs2192 +logic.rhs2192: %t19 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.1296, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend2190 -logic.rend2190: - br label %logic.end2189 -logic.end2189: - %t24 = phi i1 [ true, %logic.from2187 ], [ %t23, %logic.rend2190 ] - br label %logic.from2191 -logic.from2191: - br i1 %t24, label %logic.end2193, label %logic.rhs2192 -logic.rhs2192: + br label %logic.rend2194 +logic.rend2194: + br label %logic.end2193 +logic.end2193: + %t24 = phi i1 [ true, %logic.from2191 ], [ %t23, %logic.rend2194 ] + br label %logic.from2195 +logic.from2195: + br i1 %t24, label %logic.end2197, label %logic.rhs2196 +logic.rhs2196: %t25 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t25, ptr %a26 store { ptr, i64, i64 } { ptr @.str.1297, i64 3, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br label %logic.rend2194 -logic.rend2194: - br label %logic.end2193 -logic.end2193: - %t30 = phi i1 [ true, %logic.from2191 ], [ %t29, %logic.rend2194 ] + br label %logic.rend2198 +logic.rend2198: + br label %logic.end2197 +logic.end2197: + %t30 = phi i1 [ true, %logic.from2195 ], [ %t29, %logic.rend2198 ] call void @finch_str_drop(ptr %a7) ret i1 %t30 } @@ -25355,17 +25381,17 @@ entry: store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isSigned(%S.ast.Type %t2) - br label %logic.from2195 -logic.from2195: - br i1 %t3, label %logic.end2197, label %logic.rhs2196 -logic.rhs2196: + br label %logic.from2199 +logic.from2199: + br i1 %t3, label %logic.end2201, label %logic.rhs2200 +logic.rhs2200: %t4 = load %S.ast.Type, ptr %a1 %t5 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t4) - br label %logic.rend2198 -logic.rend2198: - br label %logic.end2197 -logic.end2197: - %t6 = phi i1 [ true, %logic.from2195 ], [ %t5, %logic.rend2198 ] + br label %logic.rend2202 +logic.rend2202: + br label %logic.end2201 +logic.end2201: + %t6 = phi i1 [ true, %logic.from2199 ], [ %t5, %logic.rend2202 ] ret i1 %t6 } @@ -25383,21 +25409,21 @@ entry: store { ptr, i64, i64 } { ptr @.str.1298, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br label %logic.from2199 -logic.from2199: - br i1 %t7, label %logic.end2201, label %logic.rhs2200 -logic.rhs2200: + br label %logic.from2203 +logic.from2203: + br i1 %t7, label %logic.end2205, label %logic.rhs2204 +logic.rhs2204: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1299, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.rend2202 -logic.rend2202: - br label %logic.end2201 -logic.end2201: - %t14 = phi i1 [ true, %logic.from2199 ], [ %t13, %logic.rend2202 ] + br label %logic.rend2206 +logic.rend2206: + br label %logic.end2205 +logic.end2205: + %t14 = phi i1 [ true, %logic.from2203 ], [ %t13, %logic.rend2206 ] ret i1 %t14 } @@ -25407,17 +25433,17 @@ entry: store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isInt(%S.ast.Type %t2) - br label %logic.from2203 -logic.from2203: - br i1 %t3, label %logic.end2205, label %logic.rhs2204 -logic.rhs2204: + br label %logic.from2207 +logic.from2207: + br i1 %t3, label %logic.end2209, label %logic.rhs2208 +logic.rhs2208: %t4 = load %S.ast.Type, ptr %a1 %t5 = call i1 @finch.gen.isFloat(%S.ast.Type %t4) - br label %logic.rend2206 -logic.rend2206: - br label %logic.end2205 -logic.end2205: - %t6 = phi i1 [ true, %logic.from2203 ], [ %t5, %logic.rend2206 ] + br label %logic.rend2210 +logic.rend2210: + br label %logic.end2209 +logic.end2209: + %t6 = phi i1 [ true, %logic.from2207 ], [ %t5, %logic.rend2210 ] ret i1 %t6 } @@ -25457,111 +25483,111 @@ entry: store { ptr, i64, i64 } { ptr @.str.1300, i64 4, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br i1 %t12, label %then2207, label %endif2209 -then2207: + br i1 %t12, label %then2211, label %endif2213 +then2211: call void @finch_str_drop(ptr %a7) ret i64 1 -endif2209: +endif2213: %t13 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } { ptr @.str.1301, i64 4, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br label %logic.from2210 -logic.from2210: - br i1 %t17, label %logic.end2212, label %logic.rhs2211 -logic.rhs2211: + br label %logic.from2214 +logic.from2214: + br i1 %t17, label %logic.end2216, label %logic.rhs2215 +logic.rhs2215: %t18 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.1302, i64 2, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br label %logic.rend2213 -logic.rend2213: - br label %logic.end2212 -logic.end2212: - %t23 = phi i1 [ true, %logic.from2210 ], [ %t22, %logic.rend2213 ] - br label %logic.from2214 -logic.from2214: - br i1 %t23, label %logic.end2216, label %logic.rhs2215 -logic.rhs2215: + br label %logic.rend2217 +logic.rend2217: + br label %logic.end2216 +logic.end2216: + %t23 = phi i1 [ true, %logic.from2214 ], [ %t22, %logic.rend2217 ] + br label %logic.from2218 +logic.from2218: + br i1 %t23, label %logic.end2220, label %logic.rhs2219 +logic.rhs2219: %t24 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1303, i64 2, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br label %logic.rend2217 -logic.rend2217: - br label %logic.end2216 -logic.end2216: - %t29 = phi i1 [ true, %logic.from2214 ], [ %t28, %logic.rend2217 ] - br i1 %t29, label %then2218, label %endif2220 -then2218: + br label %logic.rend2221 +logic.rend2221: + br label %logic.end2220 +logic.end2220: + %t29 = phi i1 [ true, %logic.from2218 ], [ %t28, %logic.rend2221 ] + br i1 %t29, label %then2222, label %endif2224 +then2222: call void @finch_str_drop(ptr %a7) ret i64 8 -endif2220: +endif2224: %t30 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t30, ptr %a31 store { ptr, i64, i64 } { ptr @.str.1304, i64 3, i64 0 }, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 - br label %logic.from2221 -logic.from2221: - br i1 %t34, label %logic.end2223, label %logic.rhs2222 -logic.rhs2222: + br label %logic.from2225 +logic.from2225: + br i1 %t34, label %logic.end2227, label %logic.rhs2226 +logic.rhs2226: %t35 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1305, i64 3, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.rend2224 -logic.rend2224: - br label %logic.end2223 -logic.end2223: - %t40 = phi i1 [ true, %logic.from2221 ], [ %t39, %logic.rend2224 ] - br i1 %t40, label %then2225, label %endif2227 -then2225: + br label %logic.rend2228 +logic.rend2228: + br label %logic.end2227 +logic.end2227: + %t40 = phi i1 [ true, %logic.from2225 ], [ %t39, %logic.rend2228 ] + br i1 %t40, label %then2229, label %endif2231 +then2229: call void @finch_str_drop(ptr %a7) ret i64 16 -endif2227: +endif2231: %t41 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1306, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.from2228 -logic.from2228: - br i1 %t45, label %logic.end2230, label %logic.rhs2229 -logic.rhs2229: + br label %logic.from2232 +logic.from2232: + br i1 %t45, label %logic.end2234, label %logic.rhs2233 +logic.rhs2233: %t46 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t46, ptr %a47 store { ptr, i64, i64 } { ptr @.str.1307, i64 3, i64 0 }, ptr %a48 %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) %t50 = icmp ne i32 %t49, 0 - br label %logic.rend2231 -logic.rend2231: - br label %logic.end2230 -logic.end2230: - %t51 = phi i1 [ true, %logic.from2228 ], [ %t50, %logic.rend2231 ] - br label %logic.from2232 -logic.from2232: - br i1 %t51, label %logic.end2234, label %logic.rhs2233 -logic.rhs2233: + br label %logic.rend2235 +logic.rend2235: + br label %logic.end2234 +logic.end2234: + %t51 = phi i1 [ true, %logic.from2232 ], [ %t50, %logic.rend2235 ] + br label %logic.from2236 +logic.from2236: + br i1 %t51, label %logic.end2238, label %logic.rhs2237 +logic.rhs2237: %t52 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.1308, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br label %logic.rend2235 -logic.rend2235: - br label %logic.end2234 -logic.end2234: - %t57 = phi i1 [ true, %logic.from2232 ], [ %t56, %logic.rend2235 ] - br i1 %t57, label %then2236, label %endif2238 -then2236: + br label %logic.rend2239 +logic.rend2239: + br label %logic.end2238 +logic.end2238: + %t57 = phi i1 [ true, %logic.from2236 ], [ %t56, %logic.rend2239 ] + br i1 %t57, label %then2240, label %endif2242 +then2240: call void @finch_str_drop(ptr %a7) ret i64 32 -endif2238: +endif2242: call void @finch_str_drop(ptr %a7) ret i64 64 } @@ -25575,39 +25601,39 @@ entry: %t3 = load %S.ast.Type, ptr %a1 %t4 = call i1 @finch.gen.isInt(%S.ast.Type %t3) %t5 = xor i1 %t4, true - br label %logic.from2239 -logic.from2239: - br i1 %t5, label %logic.end2241, label %logic.rhs2240 -logic.rhs2240: + br label %logic.from2243 +logic.from2243: + br i1 %t5, label %logic.end2245, label %logic.rhs2244 +logic.rhs2244: %t6 = load %S.ast.Type, ptr %a2 %t7 = call i1 @finch.gen.isInt(%S.ast.Type %t6) %t8 = xor i1 %t7, true - br label %logic.rend2242 -logic.rend2242: - br label %logic.end2241 -logic.end2241: - %t9 = phi i1 [ true, %logic.from2239 ], [ %t8, %logic.rend2242 ] - br i1 %t9, label %then2243, label %endif2245 -then2243: + br label %logic.rend2246 +logic.rend2246: + br label %logic.end2245 +logic.end2245: + %t9 = phi i1 [ true, %logic.from2243 ], [ %t8, %logic.rend2246 ] + br i1 %t9, label %then2247, label %endif2249 +then2247: ret i1 false -endif2245: +endif2249: %t10 = load %S.ast.Type, ptr %a1 %t11 = call i1 @finch.gen.isSigned(%S.ast.Type %t10) - br label %logic.from2246 -logic.from2246: - br i1 %t11, label %logic.rhs2247, label %logic.end2248 -logic.rhs2247: + br label %logic.from2250 +logic.from2250: + br i1 %t11, label %logic.rhs2251, label %logic.end2252 +logic.rhs2251: %t12 = load %S.ast.Type, ptr %a2 %t13 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t12) - br label %logic.rend2249 -logic.rend2249: - br label %logic.end2248 -logic.end2248: - %t14 = phi i1 [ false, %logic.from2246 ], [ %t13, %logic.rend2249 ] - br i1 %t14, label %then2250, label %endif2252 -then2250: + br label %logic.rend2253 +logic.rend2253: + br label %logic.end2252 +logic.end2252: + %t14 = phi i1 [ false, %logic.from2250 ], [ %t13, %logic.rend2253 ] + br i1 %t14, label %then2254, label %endif2256 +then2254: ret i1 false -endif2252: +endif2256: %t15 = load %S.ast.Type, ptr %a2 %t16 = call i64 @finch.gen.bitsOf(%S.ast.Type %t15) %t17 = load %S.ast.Type, ptr %a1 @@ -25631,10 +25657,10 @@ entry: %t4 = load %S.ast.Type, ptr %a3 %t5 = call i1 @finch.gen.isInt(%S.ast.Type %t4) %t6 = xor i1 %t5, true - br i1 %t6, label %then2253, label %endif2255 -then2253: + br i1 %t6, label %then2257, label %endif2259 +then2257: ret i1 false -endif2255: +endif2259: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 %t9 = call i64 @finch_str_to_int(ptr %a8, ptr @.str.1309, i64 464) @@ -25644,20 +25670,20 @@ endif2255: store i64 %t12, ptr %a13 %t14 = load i64, ptr %a10 %t15 = icmp slt i64 %t14, 0 - br i1 %t15, label %then2256, label %endif2258 -then2256: + br i1 %t15, label %then2260, label %endif2262 +then2260: %t16 = load %S.ast.Type, ptr %a3 %t17 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t16) - br i1 %t17, label %then2259, label %endif2261 -then2259: + br i1 %t17, label %then2263, label %endif2265 +then2263: ret i1 false -endif2261: +endif2265: %t18 = load i64, ptr %a13 %t19 = icmp eq i64 %t18, 64 - br i1 %t19, label %then2262, label %endif2264 -then2262: + br i1 %t19, label %then2266, label %endif2268 +then2266: ret i1 true -endif2264: +endif2268: %t20 = load i64, ptr %a10 %t21 = load i64, ptr %a13 %t22 = sub i64 %t21, 1 @@ -25665,28 +25691,28 @@ endif2264: %t24 = sub i64 0, %t23 %t25 = icmp sge i64 %t20, %t24 ret i1 %t25 -endif2258: +endif2262: %t26 = load i64, ptr %a13 %t27 = icmp eq i64 %t26, 64 - br i1 %t27, label %then2265, label %endif2267 -then2265: + br i1 %t27, label %then2269, label %endif2271 +then2269: ret i1 true -endif2267: +endif2271: %t28 = load i64, ptr %a13 %t29 = shl i64 1, %t28 %t30 = sub i64 %t29, 1 store i64 %t30, ptr %a31 %t32 = load %S.ast.Type, ptr %a3 %t33 = call i1 @finch.gen.isSigned(%S.ast.Type %t32) - br i1 %t33, label %then2268, label %endif2270 -then2268: + br i1 %t33, label %then2272, label %endif2274 +then2272: %t34 = load i64, ptr %a13 %t35 = sub i64 %t34, 1 %t36 = shl i64 1, %t35 %t37 = sub i64 %t36, 1 store i64 %t37, ptr %a31 - br label %endif2270 -endif2270: + br label %endif2274 +endif2274: %t38 = load i64, ptr %a10 %t39 = load i64, ptr %a31 %t40 = icmp sle i64 %t38, %t39 @@ -25708,38 +25734,38 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2271, label %ok2272 -panic2271: + br i1 %t5, label %panic2275, label %ok2276 +panic2275: call void @finch_panic(ptr @.str.1310, i64 486, ptr @.str.1311) unreachable -ok2272: +ok2276: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 16 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 - br label %for.cond2273 -for.cond2273: + br label %for.cond2277 +for.cond2277: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 - br i1 %t11, label %for.body2274, label %for.end2276 -for.body2274: + br i1 %t11, label %for.body2278, label %for.end2280 +for.body2278: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic2277, label %ok2278 -panic2277: + br i1 %t13, label %panic2281, label %ok2282 +panic2281: call void @finch_panic(ptr @.str.1312, i64 487, ptr @.str.1313) unreachable -ok2278: +ok2282: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range2279, label %inrange2280 -range2279: + br i1 %t18, label %range2283, label %inrange2284 +range2283: call void @finch_panic_index(ptr @.str.1314, i64 487, i64 %t15, i64 %t17) unreachable -inrange2280: +inrange2284: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.StructDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.StructDef, ptr %t20, i32 0, i32 0 @@ -25749,27 +25775,27 @@ inrange2280: store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from2281 -logic.from2281: - br i1 %t27, label %logic.rhs2282, label %logic.end2283 -logic.rhs2282: + br label %logic.from2285 +logic.from2285: + br i1 %t27, label %logic.rhs2286, label %logic.end2287 +logic.rhs2286: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic2284, label %ok2285 -panic2284: + br i1 %t29, label %panic2288, label %ok2289 +panic2288: call void @finch_panic(ptr @.str.1315, i64 487, ptr @.str.1316) unreachable -ok2285: +ok2289: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range2286, label %inrange2287 -range2286: + br i1 %t34, label %range2290, label %inrange2291 +range2290: call void @finch_panic_index(ptr @.str.1317, i64 487, i64 %t31, i64 %t33) unreachable -inrange2287: +inrange2291: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 1 @@ -25779,23 +25805,23 @@ inrange2287: store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend2288 -logic.rend2288: - br label %logic.end2283 -logic.end2283: - %t44 = phi i1 [ false, %logic.from2281 ], [ %t43, %logic.rend2288 ] - br i1 %t44, label %then2289, label %endif2291 -then2289: + br label %logic.rend2292 +logic.rend2292: + br label %logic.end2287 +logic.end2287: + %t44 = phi i1 [ false, %logic.from2285 ], [ %t43, %logic.rend2292 ] + br i1 %t44, label %then2293, label %endif2295 +then2293: %t45 = load i64, ptr %a9 ret i64 %t45 -endif2291: - br label %for.step2275 -for.step2275: +endif2295: + br label %for.step2279 +for.step2279: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 - br label %for.cond2273 -for.end2276: + br label %for.cond2277 +for.end2280: ret i64 -1 } @@ -25814,38 +25840,38 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2292, label %ok2293 -panic2292: + br i1 %t5, label %panic2296, label %ok2297 +panic2296: call void @finch_panic(ptr @.str.1318, i64 495, ptr @.str.1319) unreachable -ok2293: +ok2297: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 - br label %for.cond2294 -for.cond2294: + br label %for.cond2298 +for.cond2298: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 - br i1 %t11, label %for.body2295, label %for.end2297 -for.body2295: + br i1 %t11, label %for.body2299, label %for.end2301 +for.body2299: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic2298, label %ok2299 -panic2298: + br i1 %t13, label %panic2302, label %ok2303 +panic2302: call void @finch_panic(ptr @.str.1320, i64 496, ptr @.str.1321) unreachable -ok2299: +ok2303: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 21 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range2300, label %inrange2301 -range2300: + br i1 %t18, label %range2304, label %inrange2305 +range2304: call void @finch_panic_index(ptr @.str.1322, i64 496, i64 %t15, i64 %t17) unreachable -inrange2301: +inrange2305: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.EnumDef, ptr %t20, i32 0, i32 0 @@ -25855,27 +25881,27 @@ inrange2301: store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from2302 -logic.from2302: - br i1 %t27, label %logic.rhs2303, label %logic.end2304 -logic.rhs2303: + br label %logic.from2306 +logic.from2306: + br i1 %t27, label %logic.rhs2307, label %logic.end2308 +logic.rhs2307: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic2305, label %ok2306 -panic2305: + br i1 %t29, label %panic2309, label %ok2310 +panic2309: call void @finch_panic(ptr @.str.1323, i64 496, ptr @.str.1324) unreachable -ok2306: +ok2310: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 21 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range2307, label %inrange2308 -range2307: + br i1 %t34, label %range2311, label %inrange2312 +range2311: call void @finch_panic_index(ptr @.str.1325, i64 496, i64 %t31, i64 %t33) unreachable -inrange2308: +inrange2312: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.EnumDef, ptr %t36, i32 0, i32 1 @@ -25885,23 +25911,23 @@ inrange2308: store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend2309 -logic.rend2309: - br label %logic.end2304 -logic.end2304: - %t44 = phi i1 [ false, %logic.from2302 ], [ %t43, %logic.rend2309 ] - br i1 %t44, label %then2310, label %endif2312 -then2310: + br label %logic.rend2313 +logic.rend2313: + br label %logic.end2308 +logic.end2308: + %t44 = phi i1 [ false, %logic.from2306 ], [ %t43, %logic.rend2313 ] + br i1 %t44, label %then2314, label %endif2316 +then2314: %t45 = load i64, ptr %a9 ret i64 %t45 -endif2312: - br label %for.step2296 -for.step2296: +endif2316: + br label %for.step2300 +for.step2300: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 - br label %for.cond2294 -for.end2297: + br label %for.cond2298 +for.end2301: ret i64 -1 } @@ -25920,38 +25946,38 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2313, label %ok2314 -panic2313: + br i1 %t5, label %panic2317, label %ok2318 +panic2317: call void @finch_panic(ptr @.str.1326, i64 504, ptr @.str.1327) unreachable -ok2314: +ok2318: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 - br label %for.cond2315 -for.cond2315: + br label %for.cond2319 +for.cond2319: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 - br i1 %t11, label %for.body2316, label %for.end2318 -for.body2316: + br i1 %t11, label %for.body2320, label %for.end2322 +for.body2320: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic2319, label %ok2320 -panic2319: + br i1 %t13, label %panic2323, label %ok2324 +panic2323: call void @finch_panic(ptr @.str.1328, i64 505, ptr @.str.1329) unreachable -ok2320: +ok2324: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 22 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range2321, label %inrange2322 -range2321: + br i1 %t18, label %range2325, label %inrange2326 +range2325: call void @finch_panic_index(ptr @.str.1330, i64 505, i64 %t15, i64 %t17) unreachable -inrange2322: +inrange2326: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.SumDef, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.SumDef, ptr %t20, i32 0, i32 0 @@ -25961,27 +25987,27 @@ inrange2322: store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from2323 -logic.from2323: - br i1 %t27, label %logic.rhs2324, label %logic.end2325 -logic.rhs2324: + br label %logic.from2327 +logic.from2327: + br i1 %t27, label %logic.rhs2328, label %logic.end2329 +logic.rhs2328: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic2326, label %ok2327 -panic2326: + br i1 %t29, label %panic2330, label %ok2331 +panic2330: call void @finch_panic(ptr @.str.1331, i64 505, ptr @.str.1332) unreachable -ok2327: +ok2331: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 22 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range2328, label %inrange2329 -range2328: + br i1 %t34, label %range2332, label %inrange2333 +range2332: call void @finch_panic_index(ptr @.str.1333, i64 505, i64 %t31, i64 %t33) unreachable -inrange2329: +inrange2333: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.SumDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.SumDef, ptr %t36, i32 0, i32 1 @@ -25991,23 +26017,23 @@ inrange2329: store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend2330 -logic.rend2330: - br label %logic.end2325 -logic.end2325: - %t44 = phi i1 [ false, %logic.from2323 ], [ %t43, %logic.rend2330 ] - br i1 %t44, label %then2331, label %endif2333 -then2331: + br label %logic.rend2334 +logic.rend2334: + br label %logic.end2329 +logic.end2329: + %t44 = phi i1 [ false, %logic.from2327 ], [ %t43, %logic.rend2334 ] + br i1 %t44, label %then2335, label %endif2337 +then2335: %t45 = load i64, ptr %a9 ret i64 %t45 -endif2333: - br label %for.step2317 -for.step2317: +endif2337: + br label %for.step2321 +for.step2321: %t46 = load i64, ptr %a9 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a9 - br label %for.cond2315 -for.end2318: + br label %for.cond2319 +for.end2322: ret i64 -1 } @@ -26022,38 +26048,38 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2334, label %ok2335 -panic2334: + br i1 %t4, label %panic2338, label %ok2339 +panic2338: call void @finch_panic(ptr @.str.1334, i64 513, ptr @.str.1335) unreachable -ok2335: +ok2339: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 - br label %for.cond2336 -for.cond2336: + br label %for.cond2340 +for.cond2340: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 - br i1 %t10, label %for.body2337, label %for.end2339 -for.body2337: + br i1 %t10, label %for.body2341, label %for.end2343 +for.body2341: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic2340, label %ok2341 -panic2340: + br i1 %t12, label %panic2344, label %ok2345 +panic2344: call void @finch_panic(ptr @.str.1336, i64 514, ptr @.str.1337) unreachable -ok2341: +ok2345: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 0 %t14 = load i64, ptr %a8 %t15 = load { ptr, i64, i64 }, ptr %t13 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 - br i1 %t17, label %range2342, label %inrange2343 -range2342: + br i1 %t17, label %range2346, label %inrange2347 +range2346: call void @finch_panic_index(ptr @.str.1338, i64 514, i64 %t14, i64 %t16) unreachable -inrange2343: +inrange2347: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i64 %t14 %t20 = getelementptr inbounds %S.ast.Program, ptr %t19, i32 0, i32 0 @@ -26063,18 +26089,18 @@ inrange2343: store { ptr, i64, i64 } %t22, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %then2344, label %endif2346 -then2344: + br i1 %t26, label %then2348, label %endif2350 +then2348: %t27 = load i64, ptr %a8 ret i64 %t27 -endif2346: - br label %for.step2338 -for.step2338: +endif2350: + br label %for.step2342 +for.step2342: %t28 = load i64, ptr %a8 %t29 = add i64 %t28, 1 store i64 %t29, ptr %a8 - br label %for.cond2336 -for.end2339: + br label %for.cond2340 +for.end2343: ret i64 -1 } @@ -26090,31 +26116,31 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2347, label %ok2348 -panic2347: + br i1 %t4, label %panic2351, label %ok2352 +panic2351: call void @finch_panic(ptr @.str.1339, i64 522, ptr @.str.1340) unreachable -ok2348: +ok2352: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic2349, label %ok2350 -panic2349: + br i1 %t8, label %panic2353, label %ok2354 +panic2353: call void @finch_panic(ptr @.str.1341, i64 522, ptr @.str.1342) unreachable -ok2350: +ok2354: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 14 %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = call i64 @finch.gen.progOf(ptr %t6, { ptr, i64, i64 } %t10) %t12 = load { ptr, i64, i64 }, ptr %t5 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 - br i1 %t14, label %range2351, label %inrange2352 -range2351: + br i1 %t14, label %range2355, label %inrange2356 +range2355: call void @finch_panic_index(ptr @.str.1343, i64 522, i64 %t11, i64 %t13) unreachable -inrange2352: +inrange2356: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Program, ptr %t15, i64 %t11 %t17 = getelementptr inbounds %S.ast.Program, ptr %t16, i32 0, i32 2 @@ -26124,27 +26150,27 @@ inrange2352: %t21 = load i64, ptr %t18 %t22 = load ptr, ptr %t17 store i64 0, ptr %a23 - br label %find.cond2353 -find.cond2353: + br label %find.cond2357 +find.cond2357: %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, %t21 - br i1 %t25, label %find.body2354, label %find.end2357 -find.body2354: + br i1 %t25, label %find.body2358, label %find.end2361 +find.body2358: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t24 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } %t19, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br i1 %t31, label %find.hit2355, label %find.next2356 -find.hit2355: + br i1 %t31, label %find.hit2359, label %find.next2360 +find.hit2359: store i64 %t24, ptr %a20 - br label %find.end2357 -find.next2356: + br label %find.end2361 +find.next2360: %t32 = add i64 %t24, 1 store i64 %t32, ptr %a23 - br label %find.cond2353 -find.end2357: + br label %find.cond2357 +find.end2361: %t33 = load i64, ptr %a20 %t34 = icmp sge i64 %t33, 0 ret i1 %t34 @@ -26286,18 +26312,18 @@ entry: store { ptr, i64, i64 } { ptr @.str.1344, i64 5, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br i1 %t9, label %then2358, label %endif2360 -then2358: + br i1 %t9, label %then2362, label %endif2364 +then2362: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 0, %t13 - br i1 %t14, label %range2361, label %inrange2362 -range2361: + br i1 %t14, label %range2365, label %inrange2366 +range2365: call void @finch_panic_index(ptr @.str.1345, i64 527, i64 0, i64 %t13) unreachable -inrange2362: +inrange2366: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 %t17 = load %S.ast.Type, ptr %t16 @@ -26307,25 +26333,25 @@ inrange2362: store %S.ast.Type %t19, ptr %a21 call void @finch.drop.S_ast_Type(ptr %a21) ret %S.ast.Type %t20 -endif2360: +endif2364: %t22 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.1346, i64 3, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br i1 %t27, label %then2363, label %endif2365 -then2363: + br i1 %t27, label %then2367, label %endif2369 +then2367: %t28 = load ptr, ptr %a1 %t29 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 - br i1 %t32, label %range2366, label %inrange2367 -range2366: + br i1 %t32, label %range2370, label %inrange2371 +range2370: call void @finch_panic_index(ptr @.str.1347, i64 530, i64 0, i64 %t31) unreachable -inrange2367: +inrange2371: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Type, ptr %t33, i64 0 %t35 = load %S.ast.Type, ptr %t34 @@ -26335,68 +26361,68 @@ inrange2367: %t39 = load %S.ast.Type, ptr %a38 %t40 = call i1 @finch.gen.isInt(%S.ast.Type %t39) %t41 = xor i1 %t40, true - br label %logic.from2368 -logic.from2368: - br i1 %t41, label %logic.rhs2369, label %logic.end2370 -logic.rhs2369: + br label %logic.from2372 +logic.from2372: + br i1 %t41, label %logic.rhs2373, label %logic.end2374 +logic.rhs2373: %t42 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t43 = load { ptr, i64, i64 }, ptr %t42 store { ptr, i64, i64 } %t43, ptr %a44 store { ptr, i64, i64 } { ptr @.str.1348, i64 4, i64 0 }, ptr %a45 %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) %t47 = icmp eq i32 %t46, 0 - br label %logic.rend2371 -logic.rend2371: - br label %logic.end2370 -logic.end2370: - %t48 = phi i1 [ false, %logic.from2368 ], [ %t47, %logic.rend2371 ] - br label %logic.from2372 -logic.from2372: - br i1 %t48, label %logic.rhs2373, label %logic.end2374 -logic.rhs2373: + br label %logic.rend2375 +logic.rend2375: + br label %logic.end2374 +logic.end2374: + %t48 = phi i1 [ false, %logic.from2372 ], [ %t47, %logic.rend2375 ] + br label %logic.from2376 +logic.from2376: + br i1 %t48, label %logic.rhs2377, label %logic.end2378 +logic.rhs2377: %t49 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.1349, i64 4, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp eq i32 %t53, 0 - br label %logic.rend2375 -logic.rend2375: - br label %logic.end2374 -logic.end2374: - %t55 = phi i1 [ false, %logic.from2372 ], [ %t54, %logic.rend2375 ] - br label %logic.from2376 -logic.from2376: - br i1 %t55, label %logic.rhs2377, label %logic.end2378 -logic.rhs2377: + br label %logic.rend2379 +logic.rend2379: + br label %logic.end2378 +logic.end2378: + %t55 = phi i1 [ false, %logic.from2376 ], [ %t54, %logic.rend2379 ] + br label %logic.from2380 +logic.from2380: + br i1 %t55, label %logic.rhs2381, label %logic.end2382 +logic.rhs2381: %t56 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.1350, i64 3, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp eq i32 %t60, 0 - br label %logic.rend2379 -logic.rend2379: - br label %logic.end2378 -logic.end2378: - %t62 = phi i1 [ false, %logic.from2376 ], [ %t61, %logic.rend2379 ] - br label %logic.from2380 -logic.from2380: - br i1 %t62, label %logic.rhs2381, label %logic.end2382 -logic.rhs2381: + br label %logic.rend2383 +logic.rend2383: + br label %logic.end2382 +logic.end2382: + %t62 = phi i1 [ false, %logic.from2380 ], [ %t61, %logic.rend2383 ] + br label %logic.from2384 +logic.from2384: + br i1 %t62, label %logic.rhs2385, label %logic.end2386 +logic.rhs2385: %t63 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 %t64 = load { ptr, i64, i64 }, ptr %t63 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.1351, i64 4, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp eq i32 %t67, 0 - br label %logic.rend2383 -logic.rend2383: - br label %logic.end2382 -logic.end2382: - %t69 = phi i1 [ false, %logic.from2380 ], [ %t68, %logic.rend2383 ] - br i1 %t69, label %then2384, label %endif2386 -then2384: + br label %logic.rend2387 +logic.rend2387: + br label %logic.end2386 +logic.end2386: + %t69 = phi i1 [ false, %logic.from2384 ], [ %t68, %logic.rend2387 ] + br i1 %t69, label %then2388, label %endif2390 +then2388: %t70 = load ptr, ptr %a1 %t71 = load %S.ast.Node, ptr %a3 %t72 = load %S.ast.Type, ptr %a38 @@ -26410,18 +26436,18 @@ then2384: call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } %t78, ptr %a79 call void @finch_str_drop(ptr %a79) - br label %endif2386 -endif2386: + br label %endif2390 +endif2390: %t80 = load ptr, ptr %a1 %t81 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t82 = load { ptr, i64, i64 }, ptr %t81 %t83 = extractvalue { ptr, i64, i64 } %t82, 1 %t84 = icmp uge i64 1, %t83 - br i1 %t84, label %range2387, label %inrange2388 -range2387: + br i1 %t84, label %range2391, label %inrange2392 +range2391: call void @finch_panic_index(ptr @.str.1353, i64 534, i64 1, i64 %t83) unreachable -inrange2388: +inrange2392: %t85 = extractvalue { ptr, i64, i64 } %t82, 0 %t86 = getelementptr inbounds %S.ast.Type, ptr %t85, i64 1 %t87 = load %S.ast.Type, ptr %t86 @@ -26434,28 +26460,28 @@ inrange2388: store { ptr, i64, i64 } { ptr @.str.1354, i64 4, i64 0 }, ptr %a94 %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) %t96 = icmp ne i32 %t95, 0 - br i1 %t96, label %then2389, label %endif2391 -then2389: + br i1 %t96, label %then2393, label %endif2395 +then2393: %t97 = load ptr, ptr %a1 %t98 = load %S.ast.Node, ptr %a3 call void @finch.gen.fail(ptr %t97, %S.ast.Node %t98, { ptr, i64, i64 } { ptr @.str.1355, i64 41, i64 0 }) - br label %endif2391 -endif2391: + br label %endif2395 +endif2395: %t99 = load %S.ast.Type, ptr %a38 %t100 = load %S.ast.Type, ptr %a90 %t101 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t99, %S.ast.Type %t100) call void @finch.drop.S_ast_Type(ptr %a90) call void @finch.drop.S_ast_Type(ptr %a38) ret %S.ast.Type %t101 -endif2365: +endif2369: %t102 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 store { ptr, i64, i64 } { ptr @.str.1356, i64 5, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) %t107 = icmp ne i32 %t106, 0 - br i1 %t107, label %then2392, label %endif2394 -then2392: + br i1 %t107, label %then2396, label %endif2398 +then2396: %t108 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1357, i64 5, i64 0 }, 0 %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t110 = load i64, ptr %t109 @@ -26468,11 +26494,11 @@ then2392: %t117 = load { ptr, i64, i64 }, ptr %t116 %t118 = extractvalue { ptr, i64, i64 } %t117, 1 %t119 = icmp uge i64 0, %t118 - br i1 %t119, label %range2395, label %inrange2396 -range2395: + br i1 %t119, label %range2399, label %inrange2400 +range2399: call void @finch_panic_index(ptr @.str.1358, i64 542, i64 0, i64 %t118) unreachable -inrange2396: +inrange2400: %t120 = extractvalue { ptr, i64, i64 } %t117, 0 %t121 = getelementptr inbounds %S.ast.Type, ptr %t120, i64 0 %t122 = load %S.ast.Type, ptr %t121 @@ -26487,37 +26513,37 @@ inrange2396: store i64 %t126, ptr %t114 %t129 = load %S.ast.Type, ptr %a112 ret %S.ast.Type %t129 -endif2394: +endif2398: %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t131 = load { ptr, i64, i64 }, ptr %t130 store { ptr, i64, i64 } %t131, ptr %a132 store { ptr, i64, i64 } { ptr @.str.1359, i64 3, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 - br i1 %t135, label %then2397, label %endif2399 -then2397: + br i1 %t135, label %then2401, label %endif2403 +then2401: %t136 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 %t138 = load i64, ptr %t137 %t139 = icmp eq i64 %t138, 0 - br i1 %t139, label %then2400, label %endif2402 -then2400: + br i1 %t139, label %then2404, label %endif2406 +then2404: %t140 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t140, ptr %a141 call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) %t143 = load %S.ast.Type, ptr %a142 ret %S.ast.Type %t143 -endif2402: +endif2406: %t144 = load ptr, ptr %a1 %t145 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t146 = load { ptr, i64, i64 }, ptr %t145 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 0, %t147 - br i1 %t148, label %range2403, label %inrange2404 -range2403: + br i1 %t148, label %range2407, label %inrange2408 +range2407: call void @finch_panic_index(ptr @.str.1360, i64 549, i64 0, i64 %t147) unreachable -inrange2404: +inrange2408: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 0 %t151 = load %S.ast.Type, ptr %t150 @@ -26527,49 +26553,49 @@ inrange2404: store %S.ast.Type %t153, ptr %a155 call void @finch.drop.S_ast_Type(ptr %a155) ret %S.ast.Type %t154 -endif2399: +endif2403: %t156 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.1361, i64 5, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp eq i32 %t160, 0 - br i1 %t161, label %then2405, label %endif2407 -then2405: + br i1 %t161, label %then2409, label %endif2411 +then2409: %t162 = load %S.ast.Type, ptr %a2 store %S.ast.Type %t162, ptr %a163 call void @finch.copy.S_ast_Type(ptr %a164, ptr %a163) %t165 = load %S.ast.Type, ptr %a164 ret %S.ast.Type %t165 -endif2407: +endif2411: %t166 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i32 0, i32 1 %t168 = load i64, ptr %t167 %t169 = icmp eq i64 %t168, 0 - br label %logic.from2408 -logic.from2408: - br i1 %t169, label %logic.rhs2409, label %logic.end2410 -logic.rhs2409: + br label %logic.from2412 +logic.from2412: + br i1 %t169, label %logic.rhs2413, label %logic.end2414 +logic.rhs2413: %t170 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 %t172 = load i64, ptr %t171 %t173 = icmp eq i64 %t172, 0 - br label %logic.rend2411 -logic.rend2411: - br label %logic.end2410 -logic.end2410: - %t174 = phi i1 [ false, %logic.from2408 ], [ %t173, %logic.rend2411 ] - br label %logic.from2412 -logic.from2412: - br i1 %t174, label %logic.rhs2413, label %logic.end2414 -logic.rhs2413: + br label %logic.rend2415 +logic.rend2415: + br label %logic.end2414 +logic.end2414: + %t174 = phi i1 [ false, %logic.from2412 ], [ %t173, %logic.rend2415 ] + br label %logic.from2416 +logic.from2416: + br i1 %t174, label %logic.rhs2417, label %logic.end2418 +logic.rhs2417: %t175 = load ptr, ptr %a1 %t176 = icmp eq ptr %t175, null - br i1 %t176, label %panic2415, label %ok2416 -panic2415: + br i1 %t176, label %panic2419, label %ok2420 +panic2419: call void @finch_panic(ptr @.str.1362, i64 555, ptr @.str.1363) unreachable -ok2416: +ok2420: %t177 = getelementptr inbounds %S.gen.Gen, ptr %t175, i32 0, i32 18 %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 %t179 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -26578,51 +26604,51 @@ ok2416: %t182 = load i64, ptr %t178 %t183 = load ptr, ptr %t177 store i64 0, ptr %a184 - br label %find.cond2417 -find.cond2417: + br label %find.cond2421 +find.cond2421: %t185 = load i64, ptr %a184 %t186 = icmp slt i64 %t185, %t182 - br i1 %t186, label %find.body2418, label %find.end2421 -find.body2418: + br i1 %t186, label %find.body2422, label %find.end2425 +find.body2422: %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i64 %t185 %t188 = load { ptr, i64, i64 }, ptr %t187 store { ptr, i64, i64 } %t188, ptr %a189 store { ptr, i64, i64 } %t180, ptr %a190 %t191 = call i32 @finch_str_eq(ptr %a189, ptr %a190) %t192 = icmp ne i32 %t191, 0 - br i1 %t192, label %find.hit2419, label %find.next2420 -find.hit2419: + br i1 %t192, label %find.hit2423, label %find.next2424 +find.hit2423: store i64 %t185, ptr %a181 - br label %find.end2421 -find.next2420: + br label %find.end2425 +find.next2424: %t193 = add i64 %t185, 1 store i64 %t193, ptr %a184 - br label %find.cond2417 -find.end2421: + br label %find.cond2421 +find.end2425: %t194 = load i64, ptr %a181 %t195 = icmp sge i64 %t194, 0 - br label %logic.rend2422 -logic.rend2422: - br label %logic.end2414 -logic.end2414: - %t196 = phi i1 [ false, %logic.from2412 ], [ %t195, %logic.rend2422 ] - br i1 %t196, label %then2423, label %endif2425 -then2423: + br label %logic.rend2426 +logic.rend2426: + br label %logic.end2418 +logic.end2418: + %t196 = phi i1 [ false, %logic.from2416 ], [ %t195, %logic.rend2426 ] + br i1 %t196, label %then2427, label %endif2429 +then2427: %t197 = load ptr, ptr %a1 %t198 = icmp eq ptr %t197, null - br i1 %t198, label %panic2426, label %ok2427 -panic2426: + br i1 %t198, label %panic2430, label %ok2431 +panic2430: call void @finch_panic(ptr @.str.1364, i64 556, ptr @.str.1365) unreachable -ok2427: +ok2431: %t199 = getelementptr inbounds %S.gen.Gen, ptr %t197, i32 0, i32 19 %t200 = load ptr, ptr %a1 %t201 = icmp eq ptr %t200, null - br i1 %t201, label %panic2428, label %ok2429 -panic2428: + br i1 %t201, label %panic2432, label %ok2433 +panic2432: call void @finch_panic(ptr @.str.1366, i64 556, ptr @.str.1367) unreachable -ok2429: +ok2433: %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 18 %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i32 0, i32 1 %t204 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -26631,36 +26657,36 @@ ok2429: %t207 = load i64, ptr %t203 %t208 = load ptr, ptr %t202 store i64 0, ptr %a209 - br label %find.cond2430 -find.cond2430: + br label %find.cond2434 +find.cond2434: %t210 = load i64, ptr %a209 %t211 = icmp slt i64 %t210, %t207 - br i1 %t211, label %find.body2431, label %find.end2434 -find.body2431: + br i1 %t211, label %find.body2435, label %find.end2438 +find.body2435: %t212 = getelementptr inbounds { ptr, i64, i64 }, ptr %t208, i64 %t210 %t213 = load { ptr, i64, i64 }, ptr %t212 store { ptr, i64, i64 } %t213, ptr %a214 store { ptr, i64, i64 } %t205, ptr %a215 %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) %t217 = icmp ne i32 %t216, 0 - br i1 %t217, label %find.hit2432, label %find.next2433 -find.hit2432: + br i1 %t217, label %find.hit2436, label %find.next2437 +find.hit2436: store i64 %t210, ptr %a206 - br label %find.end2434 -find.next2433: + br label %find.end2438 +find.next2437: %t218 = add i64 %t210, 1 store i64 %t218, ptr %a209 - br label %find.cond2430 -find.end2434: + br label %find.cond2434 +find.end2438: %t219 = load i64, ptr %a206 %t220 = load { ptr, i64, i64 }, ptr %t199 %t221 = extractvalue { ptr, i64, i64 } %t220, 1 %t222 = icmp uge i64 %t219, %t221 - br i1 %t222, label %range2435, label %inrange2436 -range2435: + br i1 %t222, label %range2439, label %inrange2440 +range2439: call void @finch_panic_index(ptr @.str.1368, i64 556, i64 %t219, i64 %t221) unreachable -inrange2436: +inrange2440: %t223 = extractvalue { ptr, i64, i64 } %t220, 0 %t224 = getelementptr inbounds %S.ast.Type, ptr %t223, i64 %t219 %t225 = load %S.ast.Type, ptr %t224 @@ -26668,24 +26694,24 @@ inrange2436: call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) %t228 = load %S.ast.Type, ptr %a227 ret %S.ast.Type %t228 -endif2425: +endif2429: %t229 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 %t231 = load i64, ptr %t230 %t232 = icmp sgt i64 %t231, 0 - br i1 %t232, label %then2437, label %endif2439 -then2437: + br i1 %t232, label %then2441, label %endif2443 +then2441: store { ptr, i64, i64 } zeroinitializer, ptr %a233 %t234 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 store i64 0, ptr %a235 - br label %each.cond2440 -each.cond2440: + br label %each.cond2444 +each.cond2444: %t236 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 %t237 = load i64, ptr %t236 %t238 = load i64, ptr %a235 %t239 = icmp slt i64 %t238, %t237 - br i1 %t239, label %each.body2441, label %each.end2443 -each.body2441: + br i1 %t239, label %each.body2445, label %each.end2447 +each.body2445: %t240 = load ptr, ptr %t234 %t241 = getelementptr inbounds %S.ast.Type, ptr %t240, i64 %t238 %t242 = load %S.ast.Type, ptr %t241 @@ -26702,20 +26728,20 @@ each.body2441: %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i64 %t249 store %S.ast.Type %t248, ptr %t252 store i64 %t250, ptr %t244 - br label %each.step2442 -each.step2442: + br label %each.step2446 +each.step2446: %t253 = load i64, ptr %a235 %t254 = add i64 %t253, 1 store i64 %t254, ptr %a235 - br label %each.cond2440 -each.end2443: + br label %each.cond2444 +each.end2447: %t255 = load ptr, ptr %a1 %t256 = icmp eq ptr %t255, null - br i1 %t256, label %panic2444, label %ok2445 -panic2444: + br i1 %t256, label %panic2448, label %ok2449 +panic2448: call void @finch_panic(ptr @.str.1369, i64 564, ptr @.str.1370) unreachable -ok2445: +ok2449: %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 14 %t258 = load { ptr, i64, i64 }, ptr %t257 store { ptr, i64, i64 } %t258, ptr %a259 @@ -26726,15 +26752,15 @@ ok2445: %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load i64, ptr %t264 %t266 = icmp sgt i64 %t265, 0 - br i1 %t266, label %then2446, label %endif2448 -then2446: + br i1 %t266, label %then2450, label %endif2452 +then2450: %t267 = load ptr, ptr %a1 %t268 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t269 = load { ptr, i64, i64 }, ptr %t268 %t270 = call i1 @finch.gen.imports(ptr %t267, { ptr, i64, i64 } %t269) %t271 = xor i1 %t270, true - br i1 %t271, label %then2449, label %endif2451 -then2449: + br i1 %t271, label %then2453, label %endif2455 +then2453: %t272 = load ptr, ptr %a1 %t273 = load %S.ast.Node, ptr %a3 %t274 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -26766,8 +26792,8 @@ then2449: call void @finch.gen.fail(ptr %t272, %S.ast.Node %t273, { ptr, i64, i64 } %t296) store { ptr, i64, i64 } %t296, ptr %a297 call void @finch_str_drop(ptr %a297) - br label %endif2451 -endif2451: + br label %endif2455 +endif2455: %t298 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t299 = load { ptr, i64, i64 }, ptr %t298 store { ptr, i64, i64 } %t299, ptr %a300 @@ -26777,8 +26803,8 @@ endif2451: store { ptr, i64, i64 } %t302, ptr %a262 store { ptr, i64, i64 } %t303, ptr %a304 call void @finch_str_drop(ptr %a304) - br label %endif2448 -endif2448: + br label %endif2452 +endif2452: %t305 = load ptr, ptr %a1 %t306 = load { ptr, i64, i64 }, ptr %a262 %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -26789,22 +26815,22 @@ endif2448: call void @finch_str_drop(ptr %a262) call void @finch.drop.arr_S_ast_Type(ptr %a233) ret %S.ast.Type %t311 -endif2439: +endif2443: %t312 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t313 = load { ptr, i64, i64 }, ptr %t312 store { ptr, i64, i64 } %t313, ptr %a314 store { ptr, i64, i64 } { ptr @.str.1374, i64 1, i64 0 }, ptr %a315 %t316 = call i32 @finch_str_eq(ptr %a314, ptr %a315) %t317 = icmp ne i32 %t316, 0 - br i1 %t317, label %then2452, label %endif2454 -then2452: + br i1 %t317, label %then2456, label %endif2458 +then2456: %t318 = load ptr, ptr %a1 %t319 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t320 = load { ptr, i64, i64 }, ptr %t319 %t321 = call i64 @finch.gen.findStruct(ptr %t318, { ptr, i64, i64 } { ptr @.str.1375, i64 1, i64 0 }, { ptr, i64, i64 } %t320) %t322 = icmp slt i64 %t321, 0 - br i1 %t322, label %then2455, label %endif2457 -then2455: + br i1 %t322, label %then2459, label %endif2461 +then2459: %t323 = load ptr, ptr %a1 %t324 = load %S.ast.Node, ptr %a3 %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 @@ -26822,8 +26848,8 @@ then2455: call void @finch.gen.fail(ptr %t323, %S.ast.Node %t324, { ptr, i64, i64 } %t335) store { ptr, i64, i64 } %t335, ptr %a336 call void @finch_str_drop(ptr %a336) - br label %endif2457 -endif2457: + br label %endif2461 +endif2461: %t337 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1378, i64 6, i64 0 }, 0 %t338 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t339 = load { ptr, i64, i64 }, ptr %t338 @@ -26833,14 +26859,14 @@ endif2457: %t343 = insertvalue %S.ast.Type %t337, { ptr, i64, i64 } %t342, 2 %t344 = insertvalue %S.ast.Type %t343, { ptr, i64, i64 } { ptr @.str.1379, i64 1, i64 0 }, 3 ret %S.ast.Type %t344 -endif2454: +endif2458: %t345 = load ptr, ptr %a1 %t346 = icmp eq ptr %t345, null - br i1 %t346, label %panic2458, label %ok2459 -panic2458: + br i1 %t346, label %panic2462, label %ok2463 +panic2462: call void @finch_panic(ptr @.str.1380, i64 579, ptr @.str.1381) unreachable -ok2459: +ok2463: %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 14 %t348 = load { ptr, i64, i64 }, ptr %t347 store { ptr, i64, i64 } %t348, ptr %a349 @@ -26851,15 +26877,15 @@ ok2459: %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i32 0, i32 1 %t355 = load i64, ptr %t354 %t356 = icmp sgt i64 %t355, 0 - br i1 %t356, label %then2460, label %endif2462 -then2460: + br i1 %t356, label %then2464, label %endif2466 +then2464: %t357 = load ptr, ptr %a1 %t358 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t359 = load { ptr, i64, i64 }, ptr %t358 %t360 = call i1 @finch.gen.imports(ptr %t357, { ptr, i64, i64 } %t359) %t361 = xor i1 %t360, true - br i1 %t361, label %then2463, label %endif2465 -then2463: + br i1 %t361, label %then2467, label %endif2469 +then2467: %t362 = load ptr, ptr %a1 %t363 = load %S.ast.Node, ptr %a3 %t364 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -26891,8 +26917,8 @@ then2463: call void @finch.gen.fail(ptr %t362, %S.ast.Node %t363, { ptr, i64, i64 } %t386) store { ptr, i64, i64 } %t386, ptr %a387 call void @finch_str_drop(ptr %a387) - br label %endif2465 -endif2465: + br label %endif2469 +endif2469: %t388 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t389 = load { ptr, i64, i64 }, ptr %t388 store { ptr, i64, i64 } %t389, ptr %a390 @@ -26902,16 +26928,16 @@ endif2465: store { ptr, i64, i64 } %t392, ptr %a352 store { ptr, i64, i64 } %t393, ptr %a394 call void @finch_str_drop(ptr %a394) - br label %endif2462 -endif2462: + br label %endif2466 +endif2466: %t395 = load ptr, ptr %a1 %t396 = load { ptr, i64, i64 }, ptr %a352 %t397 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t398 = load { ptr, i64, i64 }, ptr %t397 %t399 = call i64 @finch.gen.findEnum(ptr %t395, { ptr, i64, i64 } %t396, { ptr, i64, i64 } %t398) %t400 = icmp sge i64 %t399, 0 - br i1 %t400, label %then2466, label %endif2468 -then2466: + br i1 %t400, label %then2470, label %endif2472 +then2470: %t401 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1385, i64 4, i64 0 }, 0 %t402 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t403 = load { ptr, i64, i64 }, ptr %t402 @@ -26926,35 +26952,35 @@ then2466: %t412 = insertvalue %S.ast.Type %t407, { ptr, i64, i64 } %t411, 3 call void @finch_str_drop(ptr %a352) ret %S.ast.Type %t412 -endif2468: +endif2472: %t413 = load ptr, ptr %a1 %t414 = load { ptr, i64, i64 }, ptr %a352 %t415 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t416 = load { ptr, i64, i64 }, ptr %t415 %t417 = call i64 @finch.gen.findStruct(ptr %t413, { ptr, i64, i64 } %t414, { ptr, i64, i64 } %t416) %t418 = icmp slt i64 %t417, 0 - br i1 %t418, label %then2469, label %endif2471 -then2469: + br i1 %t418, label %then2473, label %endif2475 +then2473: %t419 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t420 = getelementptr inbounds { ptr, i64, i64 }, ptr %t419, i32 0, i32 1 %t421 = load i64, ptr %t420 %t422 = icmp eq i64 %t421, 0 - br label %logic.from2472 -logic.from2472: - br i1 %t422, label %logic.rhs2473, label %logic.end2474 -logic.rhs2473: + br label %logic.from2476 +logic.from2476: + br i1 %t422, label %logic.rhs2477, label %logic.end2478 +logic.rhs2477: %t423 = load ptr, ptr %a1 %t424 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t425 = load { ptr, i64, i64 }, ptr %t424 %t426 = call i64 @finch.gen.findStruct(ptr %t423, { ptr, i64, i64 } { ptr @.str.1386, i64 1, i64 0 }, { ptr, i64, i64 } %t425) %t427 = icmp sge i64 %t426, 0 - br label %logic.rend2475 -logic.rend2475: - br label %logic.end2474 -logic.end2474: - %t428 = phi i1 [ false, %logic.from2472 ], [ %t427, %logic.rend2475 ] - br i1 %t428, label %then2476, label %endif2478 -then2476: + br label %logic.rend2479 +logic.rend2479: + br label %logic.end2478 +logic.end2478: + %t428 = phi i1 [ false, %logic.from2476 ], [ %t427, %logic.rend2479 ] + br i1 %t428, label %then2480, label %endif2482 +then2480: %t429 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1387, i64 6, i64 0 }, 0 %t430 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t431 = load { ptr, i64, i64 }, ptr %t430 @@ -26965,7 +26991,7 @@ then2476: %t436 = insertvalue %S.ast.Type %t435, { ptr, i64, i64 } { ptr @.str.1388, i64 1, i64 0 }, 3 call void @finch_str_drop(ptr %a352) ret %S.ast.Type %t436 -endif2478: +endif2482: %t437 = load ptr, ptr %a1 %t438 = load %S.ast.Node, ptr %a3 %t439 = load %S.ast.Type, ptr %a2 @@ -26985,8 +27011,8 @@ endif2478: call void @finch.gen.fail(ptr %t437, %S.ast.Node %t438, { ptr, i64, i64 } %t450) store { ptr, i64, i64 } %t450, ptr %a451 call void @finch_str_drop(ptr %a451) - br label %endif2471 -endif2471: + br label %endif2475 +endif2475: %t452 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1391, i64 6, i64 0 }, 0 %t453 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t454 = load { ptr, i64, i64 }, ptr %t453 @@ -27065,10 +27091,10 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp eq i64 %t3, 0 - br i1 %t4, label %then2479, label %endif2481 -then2479: + br i1 %t4, label %then2483, label %endif2485 +then2483: ret { ptr, i64, i64 } { ptr @.str.1404, i64 4, i64 0 } -endif2481: +endif2485: %t5 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t5, ptr %a6 call void @finch_str_copy(ptr %a7, ptr %a6) @@ -27156,29 +27182,29 @@ entry: store { ptr, i64, i64 } { ptr @.str.1405, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br i1 %t13, label %then2482, label %endif2484 -then2482: + br i1 %t13, label %then2486, label %endif2488 +then2486: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1406, i64 2, i64 0 } -endif2484: +endif2488: %t14 = load %S.ast.Type, ptr %a2 %t15 = call i1 @finch.gen.isInt(%S.ast.Type %t14) - br label %logic.from2485 -logic.from2485: - br i1 %t15, label %logic.end2487, label %logic.rhs2486 -logic.rhs2486: + br label %logic.from2489 +logic.from2489: + br i1 %t15, label %logic.end2491, label %logic.rhs2490 +logic.rhs2490: %t16 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1407, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br label %logic.rend2488 -logic.rend2488: - br label %logic.end2487 -logic.end2487: - %t21 = phi i1 [ true, %logic.from2485 ], [ %t20, %logic.rend2488 ] - br i1 %t21, label %then2489, label %endif2491 -then2489: + br label %logic.rend2492 +logic.rend2492: + br label %logic.end2491 +logic.end2491: + %t21 = phi i1 [ true, %logic.from2489 ], [ %t20, %logic.rend2492 ] + br i1 %t21, label %then2493, label %endif2495 +then2493: %t22 = load %S.ast.Type, ptr %a2 %t23 = call i64 @finch.gen.bitsOf(%S.ast.Type %t22) call void @finch_str_from_int(ptr %a24, i64 %t23) @@ -27191,68 +27217,68 @@ then2489: %t30 = load { ptr, i64, i64 }, ptr %a26 call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } %t30 -endif2491: +endif2495: %t31 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t31, ptr %a32 store { ptr, i64, i64 } { ptr @.str.1409, i64 5, i64 0 }, ptr %a33 %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) %t35 = icmp ne i32 %t34, 0 - br i1 %t35, label %then2492, label %endif2494 -then2492: + br i1 %t35, label %then2496, label %endif2498 +then2496: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1410, i64 6, i64 0 } -endif2494: +endif2498: %t36 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t36, ptr %a37 store { ptr, i64, i64 } { ptr @.str.1411, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br i1 %t40, label %then2495, label %endif2497 -then2495: + br i1 %t40, label %then2499, label %endif2501 +then2499: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1412, i64 5, i64 0 } -endif2497: +endif2501: %t41 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1413, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.from2498 -logic.from2498: - br i1 %t45, label %logic.end2500, label %logic.rhs2499 -logic.rhs2499: + br label %logic.from2502 +logic.from2502: + br i1 %t45, label %logic.end2504, label %logic.rhs2503 +logic.rhs2503: %t46 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t46, ptr %a47 store { ptr, i64, i64 } { ptr @.str.1414, i64 5, i64 0 }, ptr %a48 %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) %t50 = icmp ne i32 %t49, 0 - br label %logic.rend2501 -logic.rend2501: - br label %logic.end2500 -logic.end2500: - %t51 = phi i1 [ true, %logic.from2498 ], [ %t50, %logic.rend2501 ] - br i1 %t51, label %then2502, label %endif2504 -then2502: + br label %logic.rend2505 +logic.rend2505: + br label %logic.end2504 +logic.end2504: + %t51 = phi i1 [ true, %logic.from2502 ], [ %t50, %logic.rend2505 ] + br i1 %t51, label %then2506, label %endif2508 +then2506: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1415, i64 17, i64 0 } -endif2504: +endif2508: %t52 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.1416, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %then2505, label %endif2507 -then2505: + br i1 %t56, label %then2509, label %endif2511 +then2509: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1417, i64 37, i64 0 } -endif2507: +endif2511: %t57 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.1418, i64 5, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br i1 %t61, label %then2508, label %endif2510 -then2508: + br i1 %t61, label %then2512, label %endif2514 +then2512: %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t63 = load i64, ptr %t62 call void @finch_str_from_int(ptr %a64, i64 %t63) @@ -27274,11 +27300,11 @@ then2508: %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = extractvalue { ptr, i64, i64 } %t78, 1 %t80 = icmp uge i64 0, %t79 - br i1 %t80, label %range2511, label %inrange2512 -range2511: + br i1 %t80, label %range2515, label %inrange2516 +range2515: call void @finch_panic_index(ptr @.str.1421, i64 632, i64 0, i64 %t79) unreachable -inrange2512: +inrange2516: %t81 = extractvalue { ptr, i64, i64 } %t78, 0 %t82 = getelementptr inbounds %S.ast.Type, ptr %t81, i64 0 %t83 = load %S.ast.Type, ptr %t82 @@ -27299,51 +27325,51 @@ inrange2512: %t95 = load { ptr, i64, i64 }, ptr %a91 call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } %t95 -endif2510: +endif2514: %t96 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.1423, i64 4, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 - br i1 %t100, label %then2513, label %endif2515 -then2513: + br i1 %t100, label %then2517, label %endif2519 +then2517: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1424, i64 3, i64 0 } -endif2515: +endif2519: %t101 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.1425, i64 3, i64 0 }, ptr %a103 %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) %t105 = icmp ne i32 %t104, 0 - br label %logic.from2516 -logic.from2516: - br i1 %t105, label %logic.end2518, label %logic.rhs2517 -logic.rhs2517: + br label %logic.from2520 +logic.from2520: + br i1 %t105, label %logic.end2522, label %logic.rhs2521 +logic.rhs2521: %t106 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t106, ptr %a107 store { ptr, i64, i64 } { ptr @.str.1426, i64 4, i64 0 }, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 - br label %logic.rend2519 -logic.rend2519: - br label %logic.end2518 -logic.end2518: - %t111 = phi i1 [ true, %logic.from2516 ], [ %t110, %logic.rend2519 ] - br i1 %t111, label %then2520, label %endif2522 -then2520: + br label %logic.rend2523 +logic.rend2523: + br label %logic.end2522 +logic.end2522: + %t111 = phi i1 [ true, %logic.from2520 ], [ %t110, %logic.rend2523 ] + br i1 %t111, label %then2524, label %endif2526 +then2524: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1427, i64 3, i64 0 } -endif2522: +endif2526: %t112 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.1428, i64 4, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br i1 %t116, label %then2523, label %endif2525 -then2523: + br i1 %t116, label %then2527, label %endif2529 +then2527: call void @finch_str_drop(ptr %a8) ret { ptr, i64, i64 } { ptr @.str.1429, i64 4, i64 0 } -endif2525: +endif2529: %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t118) @@ -27394,14 +27420,14 @@ entry: %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t4 = load i1, ptr %t3 %t5 = xor i1 %t4, true - br i1 %t5, label %then2526, label %endif2528 -then2526: + br i1 %t5, label %then2530, label %endif2532 +then2530: %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t8 = load %S.ast.Type, ptr %t7 %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t6, %S.ast.Type %t8) ret { ptr, i64, i64 } %t9 -endif2528: +endif2532: store { ptr, i64, i64 } { ptr @.str.1432, i64 2, i64 0 }, ptr %a10 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 @@ -27410,8 +27436,8 @@ endif2528: store { ptr, i64, i64 } { ptr @.str.1433, i64 4, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 - br i1 %t17, label %then2529, label %endif2531 -then2529: + br i1 %t17, label %then2533, label %endif2535 +then2533: %t18 = load ptr, ptr %a1 %t19 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t20 = load %S.ast.Type, ptr %t19 @@ -27420,8 +27446,8 @@ then2529: store { ptr, i64, i64 } %t21, ptr %a10 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_drop(ptr %a23) - br label %endif2531 -endif2531: + br label %endif2535 +endif2535: %t24 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1434, i64 6, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 @@ -27552,80 +27578,80 @@ entry: store { ptr, i64, i64 } %t6, ptr %a7 %t8 = load %S.ast.Type, ptr %a1 %t9 = call i1 @finch.gen.isInt(%S.ast.Type %t8) - br label %logic.from2532 -logic.from2532: - br i1 %t9, label %logic.end2534, label %logic.rhs2533 -logic.rhs2533: + br label %logic.from2536 +logic.from2536: + br i1 %t9, label %logic.end2538, label %logic.rhs2537 +logic.rhs2537: %t10 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1439, i64 4, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 - br label %logic.rend2535 -logic.rend2535: - br label %logic.end2534 -logic.end2534: - %t15 = phi i1 [ true, %logic.from2532 ], [ %t14, %logic.rend2535 ] - br label %logic.from2536 -logic.from2536: - br i1 %t15, label %logic.end2538, label %logic.rhs2537 -logic.rhs2537: + br label %logic.rend2539 +logic.rend2539: + br label %logic.end2538 +logic.end2538: + %t15 = phi i1 [ true, %logic.from2536 ], [ %t14, %logic.rend2539 ] + br label %logic.from2540 +logic.from2540: + br i1 %t15, label %logic.end2542, label %logic.rhs2541 +logic.rhs2541: %t16 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } { ptr @.str.1440, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br label %logic.rend2539 -logic.rend2539: - br label %logic.end2538 -logic.end2538: - %t21 = phi i1 [ true, %logic.from2536 ], [ %t20, %logic.rend2539 ] - br i1 %t21, label %then2540, label %endif2542 -then2540: + br label %logic.rend2543 +logic.rend2543: + br label %logic.end2542 +logic.end2542: + %t21 = phi i1 [ true, %logic.from2540 ], [ %t20, %logic.rend2543 ] + br i1 %t21, label %then2544, label %endif2546 +then2544: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1441, i64 1, i64 0 } -endif2542: +endif2546: %t22 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1442, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %then2543, label %endif2545 -then2543: + br i1 %t26, label %then2547, label %endif2549 +then2547: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1443, i64 5, i64 0 } -endif2545: +endif2549: %t27 = load %S.ast.Type, ptr %a1 %t28 = call i1 @finch.gen.isFloat(%S.ast.Type %t27) - br i1 %t28, label %then2546, label %endif2548 -then2546: + br i1 %t28, label %then2550, label %endif2552 +then2550: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1444, i64 3, i64 0 } -endif2548: +endif2552: %t29 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.1445, i64 3, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br label %logic.from2549 -logic.from2549: - br i1 %t33, label %logic.end2551, label %logic.rhs2550 -logic.rhs2550: + br label %logic.from2553 +logic.from2553: + br i1 %t33, label %logic.end2555, label %logic.rhs2554 +logic.rhs2554: %t34 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.1446, i64 4, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br label %logic.rend2552 -logic.rend2552: - br label %logic.end2551 -logic.end2551: - %t39 = phi i1 [ true, %logic.from2549 ], [ %t38, %logic.rend2552 ] - br i1 %t39, label %then2553, label %endif2555 -then2553: + br label %logic.rend2556 +logic.rend2556: + br label %logic.end2555 +logic.end2555: + %t39 = phi i1 [ true, %logic.from2553 ], [ %t38, %logic.rend2556 ] + br i1 %t39, label %then2557, label %endif2559 +then2557: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1447, i64 4, i64 0 } -endif2555: +endif2559: call void @finch_str_drop(ptr %a7) ret { ptr, i64, i64 } { ptr @.str.1448, i64 15, i64 0 } } @@ -27682,55 +27708,55 @@ entry: store { ptr, i64, i64 } { ptr @.str.1451, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br label %logic.from2556 -logic.from2556: - br i1 %t8, label %logic.end2558, label %logic.rhs2557 -logic.rhs2557: + br label %logic.from2560 +logic.from2560: + br i1 %t8, label %logic.end2562, label %logic.rhs2561 +logic.rhs2561: %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1452, i64 5, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 - br label %logic.rend2559 -logic.rend2559: - br label %logic.end2558 -logic.end2558: - %t15 = phi i1 [ true, %logic.from2556 ], [ %t14, %logic.rend2559 ] - br label %logic.from2560 -logic.from2560: - br i1 %t15, label %logic.end2562, label %logic.rhs2561 -logic.rhs2561: + br label %logic.rend2563 +logic.rend2563: + br label %logic.end2562 +logic.end2562: + %t15 = phi i1 [ true, %logic.from2560 ], [ %t14, %logic.rend2563 ] + br label %logic.from2564 +logic.from2564: + br i1 %t15, label %logic.end2566, label %logic.rhs2565 +logic.rhs2565: %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.1453, i64 3, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 - br label %logic.rend2563 -logic.rend2563: - br label %logic.end2562 -logic.end2562: - %t22 = phi i1 [ true, %logic.from2560 ], [ %t21, %logic.rend2563 ] - br i1 %t22, label %then2564, label %endif2566 -then2564: + br label %logic.rend2567 +logic.rend2567: + br label %logic.end2566 +logic.end2566: + %t22 = phi i1 [ true, %logic.from2564 ], [ %t21, %logic.rend2567 ] + br i1 %t22, label %then2568, label %endif2570 +then2568: ret i1 true -endif2566: +endif2570: %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.1454, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br i1 %t28, label %then2567, label %endif2569 -then2567: + br i1 %t28, label %then2571, label %endif2573 +then2571: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic2570, label %ok2571 -panic2570: + br i1 %t30, label %panic2574, label %ok2575 +panic2574: call void @finch_panic(ptr @.str.1455, i64 690, ptr @.str.1456) unreachable -ok2571: +ok2575: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 16 %t32 = load ptr, ptr %a1 %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -27741,17 +27767,17 @@ ok2571: %t38 = load { ptr, i64, i64 }, ptr %t31 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 %t37, %t39 - br i1 %t40, label %range2572, label %inrange2573 -range2572: + br i1 %t40, label %range2576, label %inrange2577 +range2576: call void @finch_panic_index(ptr @.str.1457, i64 690, i64 %t37, i64 %t39) unreachable -inrange2573: +inrange2577: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.gen.StructDef, ptr %t41, i64 %t37 %t43 = getelementptr inbounds %S.gen.StructDef, ptr %t42, i32 0, i32 16 %t44 = load i1, ptr %t43 ret i1 %t44 -endif2569: +endif2573: ret i1 false } @@ -27817,17 +27843,17 @@ entry: store { ptr, i64, i64 } { ptr @.str.1458, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then2574, label %endif2576 -then2574: + br i1 %t7, label %then2578, label %endif2580 +then2578: %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 0, %t10 - br i1 %t11, label %range2577, label %inrange2578 -range2577: + br i1 %t11, label %range2581, label %inrange2582 +range2581: call void @finch_panic_index(ptr @.str.1460, i64 697, i64 0, i64 %t10) unreachable -inrange2578: +inrange2582: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 %t14 = load %S.ast.Type, ptr %t13 @@ -27839,24 +27865,24 @@ inrange2578: call void @finch_str_drop(ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t20 -endif2576: +endif2580: %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.1461, i64 3, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %then2579, label %endif2581 -then2579: + br i1 %t26, label %then2583, label %endif2585 +then2583: %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 - br i1 %t30, label %range2582, label %inrange2583 -range2582: + br i1 %t30, label %range2586, label %inrange2587 +range2586: call void @finch_panic_index(ptr @.str.1463, i64 700, i64 0, i64 %t29) unreachable -inrange2583: +inrange2587: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 0 %t33 = load %S.ast.Type, ptr %t32 @@ -27877,11 +27903,11 @@ inrange2583: %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 - br i1 %t48, label %range2584, label %inrange2585 -range2584: + br i1 %t48, label %range2588, label %inrange2589 +range2588: call void @finch_panic_index(ptr @.str.1465, i64 700, i64 1, i64 %t47) unreachable -inrange2585: +inrange2589: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Type, ptr %t49, i64 1 %t51 = load %S.ast.Type, ptr %t50 @@ -27895,15 +27921,15 @@ inrange2585: call void @finch_str_drop(ptr %a57) %t58 = load { ptr, i64, i64 }, ptr %a53 ret { ptr, i64, i64 } %t58 -endif2581: +endif2585: %t59 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.1466, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 - br i1 %t64, label %then2586, label %endif2588 -then2586: + br i1 %t64, label %then2590, label %endif2592 +then2590: %t65 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t66 = load { ptr, i64, i64 }, ptr %t65 %t67 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t66) @@ -27928,15 +27954,15 @@ then2586: call void @finch_str_drop(ptr %a83) %t84 = load { ptr, i64, i64 }, ptr %a80 ret { ptr, i64, i64 } %t84 -endif2588: +endif2592: %t85 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 store { ptr, i64, i64 } { ptr @.str.1469, i64 6, i64 0 }, ptr %a88 %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) %t90 = icmp ne i32 %t89, 0 - br i1 %t90, label %then2589, label %endif2591 -then2589: + br i1 %t90, label %then2593, label %endif2595 +then2593: %t91 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 %t92 = load { ptr, i64, i64 }, ptr %t91 %t93 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t92) @@ -27964,7 +27990,7 @@ then2589: call void @finch_str_drop(ptr %a111) %t112 = load { ptr, i64, i64 }, ptr %a107 ret { ptr, i64, i64 } %t112 -endif2591: +endif2595: %t113 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t114 = load { ptr, i64, i64 }, ptr %t113 store { ptr, i64, i64 } %t114, ptr %a115 @@ -27991,11 +28017,11 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %a2 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 %t4, %t6 - br i1 %t7, label %range2592, label %inrange2593 -range2592: + br i1 %t7, label %range2596, label %inrange2597 +range2596: call void @finch_panic_index(ptr @.str.1473, i64 715, i64 %t4, i64 %t6) unreachable -inrange2593: +inrange2597: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds i8, ptr %t8, i64 %t4 %t10 = load i8, ptr %t9 @@ -28006,11 +28032,11 @@ inrange2593: %t15 = load { ptr, i64, i64 }, ptr %a2 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 - br i1 %t17, label %range2594, label %inrange2595 -range2594: + br i1 %t17, label %range2598, label %inrange2599 +range2598: call void @finch_panic_index(ptr @.str.1474, i64 715, i64 %t14, i64 %t16) unreachable -inrange2595: +inrange2599: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds i8, ptr %t18, i64 %t14 %t20 = load i8, ptr %t19 @@ -28075,22 +28101,22 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2596, label %ok2597 -panic2596: + br i1 %t4, label %panic2600, label %ok2601 +panic2600: call void @finch_panic(ptr @.str.1475, i64 719, ptr @.str.1476) unreachable -ok2597: +ok2601: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 8 %t6 = load i64, ptr %t5 %t7 = add i64 %t6, 1 store i64 %t7, ptr %t5 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic2598, label %ok2599 -panic2598: + br i1 %t9, label %panic2602, label %ok2603 +panic2602: call void @finch_panic(ptr @.str.1478, i64 720, ptr @.str.1479) unreachable -ok2599: +ok2603: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 8 %t11 = load i64, ptr %t10 call void @finch_str_from_int(ptr %a12, i64 %t11) @@ -28104,14 +28130,14 @@ ok2599: store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } zeroinitializer, ptr %a20 store i64 0, ptr %a21 - br label %each.cond2600 -each.cond2600: + br label %each.cond2604 +each.cond2604: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = load i64, ptr %a21 %t25 = icmp slt i64 %t24, %t23 - br i1 %t25, label %each.body2601, label %each.end2603 -each.body2601: + br i1 %t25, label %each.body2605, label %each.end2607 +each.body2605: %t26 = load ptr, ptr %a2 %t27 = getelementptr inbounds i8, ptr %t26, i64 %t24 %t28 = load i8, ptr %t27 @@ -28121,50 +28147,50 @@ each.body2601: store i64 %t31, ptr %a32 %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, 0 - br i1 %t34, label %then2604, label %endif2606 -then2604: + br i1 %t34, label %then2608, label %endif2610 +then2608: %t35 = load i64, ptr %a32 %t36 = add i64 %t35, 256 store i64 %t36, ptr %a32 - br label %endif2606 -endif2606: + br label %endif2610 +endif2610: %t37 = load i64, ptr %a32 %t38 = icmp sge i64 %t37, 32 - br label %logic.from2607 -logic.from2607: - br i1 %t38, label %logic.rhs2608, label %logic.end2609 -logic.rhs2608: - %t39 = load i64, ptr %a32 - %t40 = icmp slt i64 %t39, 127 - br label %logic.rend2610 -logic.rend2610: - br label %logic.end2609 -logic.end2609: - %t41 = phi i1 [ false, %logic.from2607 ], [ %t40, %logic.rend2610 ] br label %logic.from2611 logic.from2611: - br i1 %t41, label %logic.rhs2612, label %logic.end2613 + br i1 %t38, label %logic.rhs2612, label %logic.end2613 logic.rhs2612: - %t42 = load i8, ptr %a29 - %t43 = icmp ne i8 %t42, 34 + %t39 = load i64, ptr %a32 + %t40 = icmp slt i64 %t39, 127 br label %logic.rend2614 logic.rend2614: br label %logic.end2613 logic.end2613: - %t44 = phi i1 [ false, %logic.from2611 ], [ %t43, %logic.rend2614 ] + %t41 = phi i1 [ false, %logic.from2611 ], [ %t40, %logic.rend2614 ] br label %logic.from2615 logic.from2615: - br i1 %t44, label %logic.rhs2616, label %logic.end2617 + br i1 %t41, label %logic.rhs2616, label %logic.end2617 logic.rhs2616: - %t45 = load i8, ptr %a29 - %t46 = icmp ne i8 %t45, 92 + %t42 = load i8, ptr %a29 + %t43 = icmp ne i8 %t42, 34 br label %logic.rend2618 logic.rend2618: br label %logic.end2617 logic.end2617: - %t47 = phi i1 [ false, %logic.from2615 ], [ %t46, %logic.rend2618 ] - br i1 %t47, label %then2619, label %else2620 -then2619: + %t44 = phi i1 [ false, %logic.from2615 ], [ %t43, %logic.rend2618 ] + br label %logic.from2619 +logic.from2619: + br i1 %t44, label %logic.rhs2620, label %logic.end2621 +logic.rhs2620: + %t45 = load i8, ptr %a29 + %t46 = icmp ne i8 %t45, 92 + br label %logic.rend2622 +logic.rend2622: + br label %logic.end2621 +logic.end2621: + %t47 = phi i1 [ false, %logic.from2619 ], [ %t46, %logic.rend2622 ] + br i1 %t47, label %then2623, label %else2624 +then2623: %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t49 = load i8, ptr %a29 call void @finch_str_from_char(ptr %a50, i8 signext %t49) @@ -28176,8 +28202,8 @@ then2619: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 store { ptr, i64, i64 } %t51, ptr %t55 store i64 %t53, ptr %t48 - br label %endif2621 -else2620: + br label %endif2625 +else2624: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t57 = load i64, ptr %a32 %t58 = call { ptr, i64, i64 } @finch.gen.hex(i64 %t57) @@ -28194,22 +28220,22 @@ else2620: %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i64 %t64 store { ptr, i64, i64 } %t63, ptr %t67 store i64 %t65, ptr %t56 - br label %endif2621 -endif2621: - br label %each.step2602 -each.step2602: + br label %endif2625 +endif2625: + br label %each.step2606 +each.step2606: %t68 = load i64, ptr %a21 %t69 = add i64 %t68, 1 store i64 %t69, ptr %a21 - br label %each.cond2600 -each.end2603: + br label %each.cond2604 +each.end2607: %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null - br i1 %t71, label %panic2622, label %ok2623 -panic2622: + br i1 %t71, label %panic2626, label %ok2627 +panic2626: call void @finch_panic(ptr @.str.1481, i64 733, ptr @.str.1482) unreachable -ok2623: +ok2627: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 2 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 %t74 = load { ptr, i64, i64 }, ptr %a19 @@ -28388,22 +28414,22 @@ entry: %t17 = load ptr, ptr %a1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2624, label %ok2625 -panic2624: + br i1 %t19, label %panic2628, label %ok2629 +panic2628: call void @finch_panic(ptr @.str.1493, i64 749, ptr @.str.1494) unreachable -ok2625: +ok2629: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t20 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 - br i1 %t25, label %range2626, label %inrange2627 -range2626: + br i1 %t25, label %range2630, label %inrange2631 +range2630: call void @finch_panic_index(ptr @.str.1495, i64 749, i64 %t22, i64 %t24) unreachable -inrange2627: +inrange2631: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 %t28 = load { ptr, i64, i64 }, ptr %t27 @@ -28463,11 +28489,11 @@ inrange2627: call void @finch.gen.emit(ptr %t73, { ptr, i64, i64 } { ptr @.str.1500, i64 11, i64 0 }) %t74 = load ptr, ptr %a1 %t75 = icmp eq ptr %t74, null - br i1 %t75, label %panic2628, label %ok2629 -panic2628: + br i1 %t75, label %panic2632, label %ok2633 +panic2632: call void @finch_panic(ptr @.str.1501, i64 753, ptr @.str.1502) unreachable -ok2629: +ok2633: %t76 = getelementptr inbounds %S.gen.Gen, ptr %t74, i32 0, i32 9 store i1 true, ptr %t76 %t77 = load ptr, ptr %a1 @@ -28580,22 +28606,22 @@ entry: %t37 = load ptr, ptr %a1 %t38 = load ptr, ptr %a1 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic2630, label %ok2631 -panic2630: + br i1 %t39, label %panic2634, label %ok2635 +panic2634: call void @finch_panic(ptr @.str.1507, i64 763, ptr @.str.1508) unreachable -ok2631: +ok2635: %t40 = getelementptr inbounds %S.gen.Gen, ptr %t38, i32 0, i32 1 %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 %t42 = load i64, ptr %t41 %t43 = load { ptr, i64, i64 }, ptr %t40 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 %t42, %t44 - br i1 %t45, label %range2632, label %inrange2633 -range2632: + br i1 %t45, label %range2636, label %inrange2637 +range2636: call void @finch_panic_index(ptr @.str.1509, i64 763, i64 %t42, i64 %t44) unreachable -inrange2633: +inrange2637: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t42 %t48 = load { ptr, i64, i64 }, ptr %t47 @@ -28664,11 +28690,11 @@ inrange2633: call void @finch.gen.emit(ptr %t100, { ptr, i64, i64 } { ptr @.str.1515, i64 11, i64 0 }) %t101 = load ptr, ptr %a1 %t102 = icmp eq ptr %t101, null - br i1 %t102, label %panic2634, label %ok2635 -panic2634: + br i1 %t102, label %panic2638, label %ok2639 +panic2638: call void @finch_panic(ptr @.str.1516, i64 766, ptr @.str.1517) unreachable -ok2635: +ok2639: %t103 = getelementptr inbounds %S.gen.Gen, ptr %t101, i32 0, i32 9 store i1 true, ptr %t103 %t104 = load ptr, ptr %a1 @@ -28699,11 +28725,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic2636, label %ok2637 -panic2636: + br i1 %t3, label %panic2640, label %ok2641 +panic2640: call void @finch_panic(ptr @.str.1518, i64 781, ptr @.str.1519) unreachable -ok2637: +ok2641: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 4 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 @@ -28712,11 +28738,11 @@ ok2637: %t9 = insertvalue %S.gen.Saved zeroinitializer, { ptr, i64, i64 } %t8, 0 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic2638, label %ok2639 -panic2638: + br i1 %t11, label %panic2642, label %ok2643 +panic2642: call void @finch_panic(ptr @.str.1520, i64 781, ptr @.str.1521) unreachable -ok2639: +ok2643: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 5 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 @@ -28725,53 +28751,53 @@ ok2639: %t17 = insertvalue %S.gen.Saved %t9, { ptr, i64, i64 } %t16, 1 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2640, label %ok2641 -panic2640: + br i1 %t19, label %panic2644, label %ok2645 +panic2644: call void @finch_panic(ptr @.str.1522, i64 781, ptr @.str.1523) unreachable -ok2641: +ok2645: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 6 %t21 = load i64, ptr %t20 %t22 = insertvalue %S.gen.Saved %t17, i64 %t21, 2 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic2642, label %ok2643 -panic2642: + br i1 %t24, label %panic2646, label %ok2647 +panic2646: call void @finch_panic(ptr @.str.1524, i64 781, ptr @.str.1525) unreachable -ok2643: +ok2647: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 9 %t26 = load i1, ptr %t25 %t27 = insertvalue %S.gen.Saved %t22, i1 %t26, 3 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic2644, label %ok2645 -panic2644: + br i1 %t29, label %panic2648, label %ok2649 +panic2648: call void @finch_panic(ptr @.str.1526, i64 781, ptr @.str.1527) unreachable -ok2645: +ok2649: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 36 %t31 = load i64, ptr %t30 %t32 = insertvalue %S.gen.Saved %t27, i64 %t31, 4 store %S.gen.Saved %t32, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic2646, label %ok2647 -panic2646: + br i1 %t35, label %panic2650, label %ok2651 +panic2650: call void @finch_panic(ptr @.str.1528, i64 782, ptr @.str.1529) unreachable -ok2647: +ok2651: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 36 store i64 -1, ptr %t36 store { ptr, i64, i64 } zeroinitializer, ptr %a37 %t38 = load { ptr, i64, i64 }, ptr %a37 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic2648, label %ok2649 -panic2648: + br i1 %t40, label %panic2652, label %ok2653 +panic2652: call void @finch_panic(ptr @.str.1530, i64 784, ptr @.str.1531) unreachable -ok2649: +ok2653: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 4 store { ptr, i64, i64 } %t38, ptr %a42 call void @finch.copy.arr_str(ptr %a43, ptr %a42) @@ -28783,11 +28809,11 @@ ok2649: %t47 = load { ptr, i64, i64 }, ptr %a37 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null - br i1 %t49, label %panic2650, label %ok2651 -panic2650: + br i1 %t49, label %panic2654, label %ok2655 +panic2654: call void @finch_panic(ptr @.str.1532, i64 785, ptr @.str.1533) unreachable -ok2651: +ok2655: %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 5 store { ptr, i64, i64 } %t47, ptr %a51 call void @finch.copy.arr_str(ptr %a52, ptr %a51) @@ -28798,20 +28824,20 @@ ok2651: call void @finch.drop.arr_str(ptr %a55) %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null - br i1 %t57, label %panic2652, label %ok2653 -panic2652: + br i1 %t57, label %panic2656, label %ok2657 +panic2656: call void @finch_panic(ptr @.str.1534, i64 786, ptr @.str.1535) unreachable -ok2653: +ok2657: %t58 = getelementptr inbounds %S.gen.Gen, ptr %t56, i32 0, i32 6 store i64 0, ptr %t58 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic2654, label %ok2655 -panic2654: + br i1 %t60, label %panic2658, label %ok2659 +panic2658: call void @finch_panic(ptr @.str.1536, i64 787, ptr @.str.1537) unreachable -ok2655: +ok2659: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 9 store i1 false, ptr %t61 %t62 = load %S.gen.Saved, ptr %a33 @@ -28860,11 +28886,11 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic2656, label %ok2657 -panic2656: + br i1 %t5, label %panic2660, label %ok2661 +panic2660: call void @finch_panic(ptr @.str.1538, i64 792, ptr @.str.1539) unreachable -ok2657: +ok2661: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 3 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %a3 @@ -28874,11 +28900,11 @@ ok2657: %t12 = load { ptr, i64, i64 }, ptr %a9 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic2658, label %ok2659 -panic2658: + br i1 %t14, label %panic2662, label %ok2663 +panic2662: call void @finch_panic(ptr @.str.1541, i64 792, ptr @.str.1542) unreachable -ok2659: +ok2663: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 5 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1543, i64 1, i64 0 }, ptr %a17 @@ -28900,11 +28926,11 @@ ok2659: %t30 = load { ptr, i64, i64 }, ptr %a26 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null - br i1 %t32, label %panic2660, label %ok2661 -panic2660: + br i1 %t32, label %panic2664, label %ok2665 +panic2664: call void @finch_panic(ptr @.str.1545, i64 792, ptr @.str.1546) unreachable -ok2661: +ok2665: %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 4 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.1547, i64 1, i64 0 }, ptr %a35 @@ -28935,11 +28961,11 @@ ok2661: %t54 = load { ptr, i64, i64 }, ptr %t53 %t55 = load ptr, ptr %a1 %t56 = icmp eq ptr %t55, null - br i1 %t56, label %panic2662, label %ok2663 -panic2662: + br i1 %t56, label %panic2666, label %ok2667 +panic2666: call void @finch_panic(ptr @.str.1549, i64 793, ptr @.str.1550) unreachable -ok2663: +ok2667: %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 4 store { ptr, i64, i64 } %t54, ptr %a58 call void @finch.copy.arr_str(ptr %a59, ptr %a58) @@ -28952,11 +28978,11 @@ ok2663: %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic2664, label %ok2665 -panic2664: + br i1 %t66, label %panic2668, label %ok2669 +panic2668: call void @finch_panic(ptr @.str.1551, i64 794, ptr @.str.1552) unreachable -ok2665: +ok2669: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 5 store { ptr, i64, i64 } %t64, ptr %a68 call void @finch.copy.arr_str(ptr %a69, ptr %a68) @@ -28969,33 +28995,33 @@ ok2665: %t74 = load i64, ptr %t73 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic2666, label %ok2667 -panic2666: + br i1 %t76, label %panic2670, label %ok2671 +panic2670: call void @finch_panic(ptr @.str.1553, i64 795, ptr @.str.1554) unreachable -ok2667: +ok2671: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 6 store i64 %t74, ptr %t77 %t78 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 3 %t79 = load i1, ptr %t78 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null - br i1 %t81, label %panic2668, label %ok2669 -panic2668: + br i1 %t81, label %panic2672, label %ok2673 +panic2672: call void @finch_panic(ptr @.str.1555, i64 796, ptr @.str.1556) unreachable -ok2669: +ok2673: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 9 store i1 %t79, ptr %t82 %t83 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 4 %t84 = load i64, ptr %t83 %t85 = load ptr, ptr %a1 %t86 = icmp eq ptr %t85, null - br i1 %t86, label %panic2670, label %ok2671 -panic2670: + br i1 %t86, label %panic2674, label %ok2675 +panic2674: call void @finch_panic(ptr @.str.1557, i64 797, ptr @.str.1558) unreachable -ok2671: +ok2675: %t87 = getelementptr inbounds %S.gen.Gen, ptr %t85, i32 0, i32 36 store i64 %t84, ptr %t87 ret void @@ -29147,11 +29173,11 @@ entry: %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 - br i1 %t6, label %range2672, label %inrange2673 -range2672: + br i1 %t6, label %range2676, label %inrange2677 +range2676: call void @finch_panic_index(ptr @.str.1569, i64 817, i64 0, i64 %t5) unreachable -inrange2673: +inrange2677: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 0 %t9 = load { ptr, i64, i64 }, ptr %t8 @@ -29176,11 +29202,11 @@ inrange2673: %t26 = load { ptr, i64, i64 }, ptr %a2 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 0, %t27 - br i1 %t28, label %range2674, label %inrange2675 -range2674: + br i1 %t28, label %range2678, label %inrange2679 +range2678: call void @finch_panic_index(ptr @.str.1573, i64 818, i64 0, i64 %t27) unreachable -inrange2675: +inrange2679: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 %t31 = load { ptr, i64, i64 }, ptr %t30 @@ -29191,11 +29217,11 @@ inrange2675: %t34 = load { ptr, i64, i64 }, ptr %a2 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 1, %t35 - br i1 %t36, label %range2676, label %inrange2677 -range2676: + br i1 %t36, label %range2680, label %inrange2681 +range2680: call void @finch_panic_index(ptr @.str.1574, i64 819, i64 1, i64 %t35) unreachable -inrange2677: +inrange2681: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 1 %t39 = load { ptr, i64, i64 }, ptr %t38 @@ -29204,11 +29230,11 @@ inrange2677: %t41 = load { ptr, i64, i64 }, ptr %a2 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 2, %t42 - br i1 %t43, label %range2678, label %inrange2679 -range2678: + br i1 %t43, label %range2682, label %inrange2683 +range2682: call void @finch_panic_index(ptr @.str.1575, i64 820, i64 2, i64 %t42) unreachable -inrange2679: +inrange2683: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 2 %t46 = load { ptr, i64, i64 }, ptr %t45 @@ -29285,8 +29311,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.1576, i64 3, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp ne i32 %t9, 0 - br i1 %t10, label %then2680, label %else2681 -then2680: + br i1 %t10, label %then2684, label %else2685 +then2684: %t11 = load ptr, ptr %a1 %t12 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1577, i64 30, i64 0 }, ptr %a14 @@ -29315,58 +29341,58 @@ then2680: call void @finch.gen.emit(ptr %t11, { ptr, i64, i64 } %t32) store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) - br label %endif2682 -else2681: + br label %endif2686 +else2685: %t34 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.1580, i64 5, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.from2683 -logic.from2683: - br i1 %t39, label %logic.end2685, label %logic.rhs2684 -logic.rhs2684: + br label %logic.from2687 +logic.from2687: + br i1 %t39, label %logic.end2689, label %logic.rhs2688 +logic.rhs2688: %t40 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.1581, i64 3, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.rend2686 -logic.rend2686: - br label %logic.end2685 -logic.end2685: - %t46 = phi i1 [ true, %logic.from2683 ], [ %t45, %logic.rend2686 ] - br label %logic.from2687 -logic.from2687: - br i1 %t46, label %logic.end2689, label %logic.rhs2688 -logic.rhs2688: + br label %logic.rend2690 +logic.rend2690: + br label %logic.end2689 +logic.end2689: + %t46 = phi i1 [ true, %logic.from2687 ], [ %t45, %logic.rend2690 ] + br label %logic.from2691 +logic.from2691: + br i1 %t46, label %logic.end2693, label %logic.rhs2692 +logic.rhs2692: %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 %t48 = load { ptr, i64, i64 }, ptr %t47 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.1582, i64 6, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 - br label %logic.from2690 -logic.from2690: - br i1 %t52, label %logic.rhs2691, label %logic.end2692 -logic.rhs2691: + br label %logic.from2694 +logic.from2694: + br i1 %t52, label %logic.rhs2695, label %logic.end2696 +logic.rhs2695: %t53 = load ptr, ptr %a1 %t54 = load %S.ast.Type, ptr %a4 %t55 = call i1 @finch.gen.owning(ptr %t53, %S.ast.Type %t54) - br label %logic.rend2693 -logic.rend2693: - br label %logic.end2692 -logic.end2692: - %t56 = phi i1 [ false, %logic.from2690 ], [ %t55, %logic.rend2693 ] - br label %logic.rend2694 -logic.rend2694: - br label %logic.end2689 -logic.end2689: - %t57 = phi i1 [ true, %logic.from2687 ], [ %t56, %logic.rend2694 ] - br i1 %t57, label %then2695, label %else2696 -then2695: + br label %logic.rend2697 +logic.rend2697: + br label %logic.end2696 +logic.end2696: + %t56 = phi i1 [ false, %logic.from2694 ], [ %t55, %logic.rend2697 ] + br label %logic.rend2698 +logic.rend2698: + br label %logic.end2693 +logic.end2693: + %t57 = phi i1 [ true, %logic.from2691 ], [ %t56, %logic.rend2698 ] + br i1 %t57, label %then2699, label %else2700 +then2699: %t58 = load ptr, ptr %a1 %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Type, ptr %a4 @@ -29412,8 +29438,8 @@ then2695: call void @finch.gen.emit(ptr %t58, { ptr, i64, i64 } %t93) store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) - br label %endif2697 -else2696: + br label %endif2701 +else2700: %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = load %S.ast.Type, ptr %a4 @@ -29432,10 +29458,10 @@ else2696: call void @finch_str_drop(ptr %a107) store { ptr, i64, i64 } %t104, ptr %a108 call void @finch_str_drop(ptr %a108) - br label %endif2697 -endif2697: - br label %endif2682 -endif2682: + br label %endif2701 +endif2701: + br label %endif2686 +endif2686: ret void } @@ -29640,27 +29666,27 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic2698, label %ok2699 -panic2698: + br i1 %t12, label %panic2702, label %ok2703 +panic2702: call void @finch_panic(ptr @.str.1588, i64 835, ptr @.str.1589) unreachable -ok2699: +ok2703: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) - br i1 %t16, label %then2700, label %endif2702 -then2700: + br i1 %t16, label %then2704, label %endif2706 +then2704: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 -endif2702: +endif2706: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2703, label %ok2704 -panic2703: + br i1 %t19, label %panic2707, label %ok2708 +panic2707: call void @finch_panic(ptr @.str.1590, i64 838, ptr @.str.1591) unreachable -ok2704: +ok2708: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 @@ -29683,17 +29709,17 @@ ok2704: store { ptr, i64, i64 } { ptr @.str.1592, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then2705, label %else2706 -then2705: + br i1 %t38, label %then2709, label %else2710 +then2709: %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 - br i1 %t42, label %range2708, label %inrange2709 -range2708: + br i1 %t42, label %range2712, label %inrange2713 +range2712: call void @finch_panic_index(ptr @.str.1593, i64 841, i64 0, i64 %t41) unreachable -inrange2709: +inrange2713: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 %t45 = load %S.ast.Type, ptr %t44 @@ -29723,8 +29749,8 @@ inrange2709: %t65 = load ptr, ptr %a1 %t66 = load %S.ast.Type, ptr %a49 %t67 = call i1 @finch.gen.owning(ptr %t65, %S.ast.Type %t66) - br i1 %t67, label %then2710, label %endif2712 -then2710: + br i1 %t67, label %then2714, label %endif2716 +then2714: %t68 = load ptr, ptr %a1 %t69 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.1596, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1597, i64 4, i64 0 }) store { ptr, i64, i64 } %t69, ptr %a70 @@ -29774,11 +29800,11 @@ then2710: %t109 = load { ptr, i64, i64 }, ptr %a83 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 3, %t110 - br i1 %t111, label %range2713, label %inrange2714 -range2713: + br i1 %t111, label %range2717, label %inrange2718 +range2717: call void @finch_panic_index(ptr @.str.1605, i64 848, i64 3, i64 %t110) unreachable -inrange2714: +inrange2718: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 3 %t114 = load { ptr, i64, i64 }, ptr %t113 @@ -29824,11 +29850,11 @@ inrange2714: %t148 = load { ptr, i64, i64 }, ptr %a83 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = icmp uge i64 3, %t149 - br i1 %t150, label %range2715, label %inrange2716 -range2715: + br i1 %t150, label %range2719, label %inrange2720 +range2719: call void @finch_panic_index(ptr @.str.1609, i64 849, i64 3, i64 %t149) unreachable -inrange2716: +inrange2720: %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 3 %t153 = load { ptr, i64, i64 }, ptr %t152 @@ -29856,19 +29882,19 @@ inrange2716: call void @finch_str_drop(ptr %a79) call void @finch_str_drop(ptr %a73) call void @finch_str_drop(ptr %a70) - br label %endif2712 -endif2712: + br label %endif2716 +endif2716: call void @finch.drop.S_ast_Type(ptr %a49) - br label %endif2707 -else2706: + br label %endif2711 +else2710: %t168 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t169 = load { ptr, i64, i64 }, ptr %t168 store { ptr, i64, i64 } %t169, ptr %a170 store { ptr, i64, i64 } { ptr @.str.1610, i64 3, i64 0 }, ptr %a171 %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) %t173 = icmp ne i32 %t172, 0 - br i1 %t173, label %then2717, label %else2718 -then2717: + br i1 %t173, label %then2721, label %else2722 +then2721: %t174 = load ptr, ptr %a1 %t175 = load ptr, ptr %a1 %t176 = load %S.ast.Type, ptr %a2 @@ -29893,40 +29919,40 @@ then2717: %t191 = load { ptr, i64, i64 }, ptr %t190 %t192 = extractvalue { ptr, i64, i64 } %t191, 1 %t193 = icmp uge i64 0, %t192 - br i1 %t193, label %range2720, label %inrange2721 -range2720: + br i1 %t193, label %range2724, label %inrange2725 +range2724: call void @finch_panic_index(ptr @.str.1613, i64 855, i64 0, i64 %t192) unreachable -inrange2721: +inrange2725: %t194 = extractvalue { ptr, i64, i64 } %t191, 0 %t195 = getelementptr inbounds %S.ast.Type, ptr %t194, i64 0 %t196 = load %S.ast.Type, ptr %t195 %t197 = call i1 @finch.gen.owning(ptr %t189, %S.ast.Type %t196) - br label %logic.from2722 -logic.from2722: - br i1 %t197, label %logic.end2724, label %logic.rhs2723 -logic.rhs2723: + br label %logic.from2726 +logic.from2726: + br i1 %t197, label %logic.end2728, label %logic.rhs2727 +logic.rhs2727: %t198 = load ptr, ptr %a1 %t199 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t200 = load { ptr, i64, i64 }, ptr %t199 %t201 = extractvalue { ptr, i64, i64 } %t200, 1 %t202 = icmp uge i64 1, %t201 - br i1 %t202, label %range2725, label %inrange2726 -range2725: + br i1 %t202, label %range2729, label %inrange2730 +range2729: call void @finch_panic_index(ptr @.str.1614, i64 855, i64 1, i64 %t201) unreachable -inrange2726: +inrange2730: %t203 = extractvalue { ptr, i64, i64 } %t200, 0 %t204 = getelementptr inbounds %S.ast.Type, ptr %t203, i64 1 %t205 = load %S.ast.Type, ptr %t204 %t206 = call i1 @finch.gen.owning(ptr %t198, %S.ast.Type %t205) - br label %logic.rend2727 -logic.rend2727: - br label %logic.end2724 -logic.end2724: - %t207 = phi i1 [ true, %logic.from2722 ], [ %t206, %logic.rend2727 ] - br i1 %t207, label %then2728, label %endif2730 -then2728: + br label %logic.rend2731 +logic.rend2731: + br label %logic.end2728 +logic.end2728: + %t207 = phi i1 [ true, %logic.from2726 ], [ %t206, %logic.rend2731 ] + br i1 %t207, label %then2732, label %endif2734 +then2732: %t208 = load ptr, ptr %a1 %t209 = load ptr, ptr %a1 %t210 = load ptr, ptr %a1 @@ -29960,11 +29986,11 @@ then2728: %t234 = load { ptr, i64, i64 }, ptr %a231 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 3, %t235 - br i1 %t236, label %range2731, label %inrange2732 -range2731: + br i1 %t236, label %range2735, label %inrange2736 +range2735: call void @finch_panic_index(ptr @.str.1619, i64 859, i64 3, i64 %t235) unreachable -inrange2732: +inrange2736: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 3 %t239 = load { ptr, i64, i64 }, ptr %t238 @@ -29975,11 +30001,11 @@ inrange2732: %t244 = load { ptr, i64, i64 }, ptr %a231 %t245 = extractvalue { ptr, i64, i64 } %t244, 1 %t246 = icmp uge i64 3, %t245 - br i1 %t246, label %range2733, label %inrange2734 -range2733: + br i1 %t246, label %range2737, label %inrange2738 +range2737: call void @finch_panic_index(ptr @.str.1621, i64 860, i64 3, i64 %t245) unreachable -inrange2734: +inrange2738: %t247 = extractvalue { ptr, i64, i64 } %t244, 0 %t248 = getelementptr inbounds { ptr, i64, i64 }, ptr %t247, i64 3 %t249 = load { ptr, i64, i64 }, ptr %t248 @@ -30065,11 +30091,11 @@ inrange2734: %t317 = load { ptr, i64, i64 }, ptr %t316 %t318 = extractvalue { ptr, i64, i64 } %t317, 1 %t319 = icmp uge i64 0, %t318 - br i1 %t319, label %range2735, label %inrange2736 -range2735: + br i1 %t319, label %range2739, label %inrange2740 +range2739: call void @finch_panic_index(ptr @.str.1630, i64 865, i64 0, i64 %t318) unreachable -inrange2736: +inrange2740: %t320 = extractvalue { ptr, i64, i64 } %t317, 0 %t321 = getelementptr inbounds %S.ast.Type, ptr %t320, i64 0 %t322 = load %S.ast.Type, ptr %t321 @@ -30091,11 +30117,11 @@ inrange2736: %t335 = load { ptr, i64, i64 }, ptr %t334 %t336 = extractvalue { ptr, i64, i64 } %t335, 1 %t337 = icmp uge i64 1, %t336 - br i1 %t337, label %range2737, label %inrange2738 -range2737: + br i1 %t337, label %range2741, label %inrange2742 +range2741: call void @finch_panic_index(ptr @.str.1631, i64 866, i64 1, i64 %t336) unreachable -inrange2738: +inrange2742: %t338 = extractvalue { ptr, i64, i64 } %t335, 0 %t339 = getelementptr inbounds %S.ast.Type, ptr %t338, i64 1 %t340 = load %S.ast.Type, ptr %t339 @@ -30119,17 +30145,17 @@ inrange2738: call void @finch_str_drop(ptr %a241) call void @finch.drop.arr_str(ptr %a231) call void @finch_str_drop(ptr %a227) - br label %endif2730 -endif2730: - br label %endif2719 -else2718: + br label %endif2734 +endif2734: + br label %endif2723 +else2722: %t349 = load ptr, ptr %a1 %t350 = icmp eq ptr %t349, null - br i1 %t350, label %panic2739, label %ok2740 -panic2739: + br i1 %t350, label %panic2743, label %ok2744 +panic2743: call void @finch_panic(ptr @.str.1632, i64 872, ptr @.str.1633) unreachable -ok2740: +ok2744: %t351 = getelementptr inbounds %S.gen.Gen, ptr %t349, i32 0, i32 16 %t352 = load ptr, ptr %a1 %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -30140,11 +30166,11 @@ ok2740: %t358 = load { ptr, i64, i64 }, ptr %t351 %t359 = extractvalue { ptr, i64, i64 } %t358, 1 %t360 = icmp uge i64 %t357, %t359 - br i1 %t360, label %range2741, label %inrange2742 -range2741: + br i1 %t360, label %range2745, label %inrange2746 +range2745: call void @finch_panic_index(ptr @.str.1634, i64 872, i64 %t357, i64 %t359) unreachable -inrange2742: +inrange2746: %t361 = extractvalue { ptr, i64, i64 } %t358, 0 %t362 = getelementptr inbounds %S.gen.StructDef, ptr %t361, i64 %t357 %t363 = load %S.gen.StructDef, ptr %t362 @@ -30168,29 +30194,29 @@ inrange2742: %t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 %t380 = load i64, ptr %t379 store i64 0, ptr %a381 - br label %for.cond2743 -for.cond2743: + br label %for.cond2747 +for.cond2747: %t382 = load i64, ptr %a381 %t383 = icmp slt i64 %t382, %t380 - br i1 %t383, label %for.body2744, label %for.end2746 -for.body2744: + br i1 %t383, label %for.body2748, label %for.end2750 +for.body2748: %t384 = load ptr, ptr %a1 %t385 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 %t386 = load i64, ptr %a381 %t387 = load { ptr, i64, i64 }, ptr %t385 %t388 = extractvalue { ptr, i64, i64 } %t387, 1 %t389 = icmp uge i64 %t386, %t388 - br i1 %t389, label %range2747, label %inrange2748 -range2747: + br i1 %t389, label %range2751, label %inrange2752 +range2751: call void @finch_panic_index(ptr @.str.1637, i64 876, i64 %t386, i64 %t388) unreachable -inrange2748: +inrange2752: %t390 = extractvalue { ptr, i64, i64 } %t387, 0 %t391 = getelementptr inbounds %S.ast.Type, ptr %t390, i64 %t386 %t392 = load %S.ast.Type, ptr %t391 %t393 = call i1 @finch.gen.owning(ptr %t384, %S.ast.Type %t392) - br i1 %t393, label %then2749, label %endif2751 -then2749: + br i1 %t393, label %then2753, label %endif2755 +then2753: %t394 = load ptr, ptr %a1 %t395 = load { ptr, i64, i64 }, ptr %a371 store { ptr, i64, i64 } { ptr @.str.1638, i64 23, i64 0 }, ptr %a397 @@ -30208,11 +30234,11 @@ then2749: %t407 = load { ptr, i64, i64 }, ptr %t405 %t408 = extractvalue { ptr, i64, i64 } %t407, 1 %t409 = icmp uge i64 %t406, %t408 - br i1 %t409, label %range2752, label %inrange2753 -range2752: + br i1 %t409, label %range2756, label %inrange2757 +range2756: call void @finch_panic_index(ptr @.str.1640, i64 877, i64 %t406, i64 %t408) unreachable -inrange2753: +inrange2757: %t410 = extractvalue { ptr, i64, i64 } %t407, 0 %t411 = getelementptr inbounds i64, ptr %t410, i64 %t406 %t412 = load i64, ptr %t411 @@ -30247,11 +30273,11 @@ inrange2753: %t437 = load { ptr, i64, i64 }, ptr %t435 %t438 = extractvalue { ptr, i64, i64 } %t437, 1 %t439 = icmp uge i64 %t436, %t438 - br i1 %t439, label %range2754, label %inrange2755 -range2754: + br i1 %t439, label %range2758, label %inrange2759 +range2758: call void @finch_panic_index(ptr @.str.1643, i64 878, i64 %t436, i64 %t438) unreachable -inrange2755: +inrange2759: %t440 = extractvalue { ptr, i64, i64 } %t437, 0 %t441 = getelementptr inbounds i64, ptr %t440, i64 %t436 %t442 = load i64, ptr %t441 @@ -30277,32 +30303,32 @@ inrange2755: %t459 = load { ptr, i64, i64 }, ptr %t457 %t460 = extractvalue { ptr, i64, i64 } %t459, 1 %t461 = icmp uge i64 %t458, %t460 - br i1 %t461, label %range2756, label %inrange2757 -range2756: + br i1 %t461, label %range2760, label %inrange2761 +range2760: call void @finch_panic_index(ptr @.str.1644, i64 879, i64 %t458, i64 %t460) unreachable -inrange2757: +inrange2761: %t462 = extractvalue { ptr, i64, i64 } %t459, 0 %t463 = getelementptr inbounds %S.ast.Type, ptr %t462, i64 %t458 %t464 = load %S.ast.Type, ptr %t463 call void @finch.gen.copyAt(ptr %t454, { ptr, i64, i64 } %t455, { ptr, i64, i64 } %t456, %S.ast.Type %t464) call void @finch_str_drop(ptr %a453) call void @finch_str_drop(ptr %a423) - br label %endif2751 -endif2751: - br label %for.step2745 -for.step2745: + br label %endif2755 +endif2755: + br label %for.step2749 +for.step2749: %t465 = load i64, ptr %a381 %t466 = add i64 %t465, 1 store i64 %t466, ptr %a381 - br label %for.cond2743 -for.end2746: + br label %for.cond2747 +for.end2750: call void @finch_str_drop(ptr %a371) call void @finch.drop.S_gen_StructDef(ptr %a367) - br label %endif2719 -endif2719: - br label %endif2707 -endif2707: + br label %endif2723 +endif2723: + br label %endif2711 +endif2711: %t467 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t467, { ptr, i64, i64 } { ptr @.str.1645, i64 8, i64 0 }) %t468 = load ptr, ptr %a1 @@ -30359,14 +30385,14 @@ entry: %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) %t7 = xor i1 %t6, true - br i1 %t7, label %then2758, label %endif2760 -then2758: + br i1 %t7, label %then2762, label %endif2764 +then2762: %t8 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t8, ptr %a9 call void @finch_str_copy(ptr %a10, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t11 -endif2760: +endif2764: %t12 = load ptr, ptr %a1 %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 @@ -30447,18 +30473,18 @@ entry: %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) %t7 = xor i1 %t6, true - br i1 %t7, label %then2761, label %endif2763 -then2761: + br i1 %t7, label %then2765, label %endif2767 +then2765: ret void -endif2763: +endif2767: %t8 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.1648, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br i1 %t13, label %then2764, label %else2765 -then2764: + br i1 %t13, label %then2768, label %else2769 +then2768: %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1649, i64 30, i64 0 }, ptr %a17 @@ -30474,8 +30500,8 @@ then2764: call void @finch.gen.emit(ptr %t14, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_drop(ptr %a25) - br label %endif2766 -else2765: + br label %endif2770 +else2769: %t26 = load ptr, ptr %a1 %t27 = load ptr, ptr %a1 %t28 = load %S.ast.Type, ptr %a3 @@ -30508,8 +30534,8 @@ else2765: call void @finch.gen.emit(ptr %t26, { ptr, i64, i64 } %t50) store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %endif2766 -endif2766: + br label %endif2770 +endif2770: ret void } @@ -30530,8 +30556,8 @@ entry: %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) - br i1 %t6, label %then2767, label %endif2769 -then2767: + br i1 %t6, label %then2771, label %endif2773 +then2771: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = load { ptr, i64, i64 }, ptr %a2 @@ -30551,8 +30577,8 @@ then2767: call void @finch.gen.dropAt(ptr %t7, { ptr, i64, i64 } %t19, %S.ast.Type %t21) store { ptr, i64, i64 } %t19, ptr %a22 call void @finch_str_drop(ptr %a22) - br label %endif2769 -endif2769: + br label %endif2773 +endif2773: ret void } @@ -30564,55 +30590,55 @@ entry: store %S.gen.Val %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 - br label %logic.from2770 -logic.from2770: - br i1 %t4, label %logic.rhs2771, label %logic.end2772 -logic.rhs2771: + br label %logic.from2774 +logic.from2774: + br i1 %t4, label %logic.rhs2775, label %logic.end2776 +logic.rhs2775: %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = icmp sgt i64 %t7, 0 - br label %logic.rend2773 -logic.rend2773: - br label %logic.end2772 -logic.end2772: - %t9 = phi i1 [ false, %logic.from2770 ], [ %t8, %logic.rend2773 ] - br label %logic.from2774 -logic.from2774: - br i1 %t9, label %logic.rhs2775, label %logic.end2776 -logic.rhs2775: - %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 - %t11 = load { ptr, i64, i64 }, ptr %t10 - %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) - %t13 = xor i1 %t12, true br label %logic.rend2777 logic.rend2777: br label %logic.end2776 logic.end2776: - %t14 = phi i1 [ false, %logic.from2774 ], [ %t13, %logic.rend2777 ] + %t9 = phi i1 [ false, %logic.from2774 ], [ %t8, %logic.rend2777 ] br label %logic.from2778 logic.from2778: - br i1 %t14, label %logic.rhs2779, label %logic.end2780 + br i1 %t9, label %logic.rhs2779, label %logic.end2780 logic.rhs2779: - %t15 = load ptr, ptr %a1 - %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 - %t17 = load %S.ast.Type, ptr %t16 - %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true br label %logic.rend2781 logic.rend2781: br label %logic.end2780 logic.end2780: - %t19 = phi i1 [ false, %logic.from2778 ], [ %t18, %logic.rend2781 ] - br i1 %t19, label %then2782, label %endif2784 -then2782: + %t14 = phi i1 [ false, %logic.from2778 ], [ %t13, %logic.rend2781 ] + br label %logic.from2782 +logic.from2782: + br i1 %t14, label %logic.rhs2783, label %logic.end2784 +logic.rhs2783: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2785 +logic.rend2785: + br label %logic.end2784 +logic.end2784: + %t19 = phi i1 [ false, %logic.from2782 ], [ %t18, %logic.rend2785 ] + br i1 %t19, label %then2786, label %endif2788 +then2786: %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t24 = load %S.ast.Type, ptr %t23 call void @finch.gen.dropValue(ptr %t20, { ptr, i64, i64 } %t22, %S.ast.Type %t24) - br label %endif2784 -endif2784: + br label %endif2788 +endif2788: ret void } @@ -30752,27 +30778,27 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic2785, label %ok2786 -panic2785: + br i1 %t12, label %panic2789, label %ok2790 +panic2789: call void @finch_panic(ptr @.str.1657, i64 930, ptr @.str.1658) unreachable -ok2786: +ok2790: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) - br i1 %t16, label %then2787, label %endif2789 -then2787: + br i1 %t16, label %then2791, label %endif2793 +then2791: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 -endif2789: +endif2793: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2790, label %ok2791 -panic2790: + br i1 %t19, label %panic2794, label %ok2795 +panic2794: call void @finch_panic(ptr @.str.1659, i64 933, ptr @.str.1660) unreachable -ok2791: +ok2795: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 @@ -30795,17 +30821,17 @@ ok2791: store { ptr, i64, i64 } { ptr @.str.1661, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then2792, label %else2793 -then2792: + br i1 %t38, label %then2796, label %else2797 +then2796: %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 - br i1 %t42, label %range2795, label %inrange2796 -range2795: + br i1 %t42, label %range2799, label %inrange2800 +range2799: call void @finch_panic_index(ptr @.str.1662, i64 936, i64 0, i64 %t41) unreachable -inrange2796: +inrange2800: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 %t45 = load %S.ast.Type, ptr %t44 @@ -30816,8 +30842,8 @@ inrange2796: %t50 = load ptr, ptr %a1 %t51 = load %S.ast.Type, ptr %a49 %t52 = call i1 @finch.gen.owning(ptr %t50, %S.ast.Type %t51) - br i1 %t52, label %then2797, label %endif2799 -then2797: + br i1 %t52, label %then2801, label %endif2803 +then2801: %t53 = load ptr, ptr %a1 %t54 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1663, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1664, i64 2, i64 0 }) store { ptr, i64, i64 } %t54, ptr %a55 @@ -30864,11 +30890,11 @@ then2797: %t91 = load { ptr, i64, i64 }, ptr %a65 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 3, %t92 - br i1 %t93, label %range2800, label %inrange2801 -range2800: + br i1 %t93, label %range2804, label %inrange2805 +range2804: call void @finch_panic_index(ptr @.str.1670, i64 941, i64 3, i64 %t92) unreachable -inrange2801: +inrange2805: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 3 %t96 = load { ptr, i64, i64 }, ptr %t95 @@ -30893,30 +30919,30 @@ inrange2801: call void @finch.drop.arr_str(ptr %a65) call void @finch_str_drop(ptr %a61) call void @finch_str_drop(ptr %a55) - br label %endif2799 -endif2799: + br label %endif2803 +endif2803: %t110 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t110, { ptr, i64, i64 } { ptr @.str.1671, i64 33, i64 0 }) call void @finch.drop.S_ast_Type(ptr %a49) - br label %endif2794 -else2793: + br label %endif2798 +else2797: %t111 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.1672, i64 3, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br i1 %t116, label %then2802, label %else2803 -then2802: + br i1 %t116, label %then2806, label %else2807 +then2806: %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 0, %t119 - br i1 %t120, label %range2805, label %inrange2806 -range2805: + br i1 %t120, label %range2809, label %inrange2810 +range2809: call void @finch_panic_index(ptr @.str.1673, i64 947, i64 0, i64 %t119) unreachable -inrange2806: +inrange2810: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 0 %t123 = load %S.ast.Type, ptr %t122 @@ -30928,11 +30954,11 @@ inrange2806: %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = extractvalue { ptr, i64, i64 } %t129, 1 %t131 = icmp uge i64 1, %t130 - br i1 %t131, label %range2807, label %inrange2808 -range2807: + br i1 %t131, label %range2811, label %inrange2812 +range2811: call void @finch_panic_index(ptr @.str.1674, i64 948, i64 1, i64 %t130) unreachable -inrange2808: +inrange2812: %t132 = extractvalue { ptr, i64, i64 } %t129, 0 %t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i64 1 %t134 = load %S.ast.Type, ptr %t133 @@ -30943,20 +30969,20 @@ inrange2808: %t139 = load ptr, ptr %a1 %t140 = load %S.ast.Type, ptr %a127 %t141 = call i1 @finch.gen.owning(ptr %t139, %S.ast.Type %t140) - br label %logic.from2809 -logic.from2809: - br i1 %t141, label %logic.end2811, label %logic.rhs2810 -logic.rhs2810: + br label %logic.from2813 +logic.from2813: + br i1 %t141, label %logic.end2815, label %logic.rhs2814 +logic.rhs2814: %t142 = load ptr, ptr %a1 %t143 = load %S.ast.Type, ptr %a138 %t144 = call i1 @finch.gen.owning(ptr %t142, %S.ast.Type %t143) - br label %logic.rend2812 -logic.rend2812: - br label %logic.end2811 -logic.end2811: - %t145 = phi i1 [ true, %logic.from2809 ], [ %t144, %logic.rend2812 ] - br i1 %t145, label %then2813, label %endif2815 -then2813: + br label %logic.rend2816 +logic.rend2816: + br label %logic.end2815 +logic.end2815: + %t145 = phi i1 [ true, %logic.from2813 ], [ %t144, %logic.rend2816 ] + br i1 %t145, label %then2817, label %endif2819 +then2817: %t146 = load ptr, ptr %a1 %t147 = load ptr, ptr %a1 %t148 = load ptr, ptr %a1 @@ -30990,11 +31016,11 @@ then2813: %t172 = load { ptr, i64, i64 }, ptr %a169 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 3, %t173 - br i1 %t174, label %range2816, label %inrange2817 -range2816: + br i1 %t174, label %range2820, label %inrange2821 +range2820: call void @finch_panic_index(ptr @.str.1679, i64 952, i64 3, i64 %t173) unreachable -inrange2817: +inrange2821: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i64 3 %t177 = load { ptr, i64, i64 }, ptr %t176 @@ -31071,21 +31097,21 @@ inrange2817: call void @finch_str_drop(ptr %a179) call void @finch.drop.arr_str(ptr %a169) call void @finch_str_drop(ptr %a165) - br label %endif2815 -endif2815: + br label %endif2819 +endif2819: %t232 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t232, { ptr, i64, i64 } { ptr @.str.1685, i64 33, i64 0 }) call void @finch.drop.S_ast_Type(ptr %a138) call void @finch.drop.S_ast_Type(ptr %a127) - br label %endif2804 -else2803: + br label %endif2808 +else2807: %t233 = load ptr, ptr %a1 %t234 = icmp eq ptr %t233, null - br i1 %t234, label %panic2818, label %ok2819 -panic2818: + br i1 %t234, label %panic2822, label %ok2823 +panic2822: call void @finch_panic(ptr @.str.1686, i64 965, ptr @.str.1687) unreachable -ok2819: +ok2823: %t235 = getelementptr inbounds %S.gen.Gen, ptr %t233, i32 0, i32 16 %t236 = load ptr, ptr %a1 %t237 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -31096,11 +31122,11 @@ ok2819: %t242 = load { ptr, i64, i64 }, ptr %t235 %t243 = extractvalue { ptr, i64, i64 } %t242, 1 %t244 = icmp uge i64 %t241, %t243 - br i1 %t244, label %range2820, label %inrange2821 -range2820: + br i1 %t244, label %range2824, label %inrange2825 +range2824: call void @finch_panic_index(ptr @.str.1688, i64 965, i64 %t241, i64 %t243) unreachable -inrange2821: +inrange2825: %t245 = extractvalue { ptr, i64, i64 } %t242, 0 %t246 = getelementptr inbounds %S.gen.StructDef, ptr %t245, i64 %t241 %t247 = load %S.gen.StructDef, ptr %t246 @@ -31116,29 +31142,29 @@ inrange2821: %t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t256, i32 0, i32 1 %t258 = load i64, ptr %t257 store i64 0, ptr %a259 - br label %for.cond2822 -for.cond2822: + br label %for.cond2826 +for.cond2826: %t260 = load i64, ptr %a259 %t261 = icmp slt i64 %t260, %t258 - br i1 %t261, label %for.body2823, label %for.end2825 -for.body2823: + br i1 %t261, label %for.body2827, label %for.end2829 +for.body2827: %t262 = load ptr, ptr %a1 %t263 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 %t264 = load i64, ptr %a259 %t265 = load { ptr, i64, i64 }, ptr %t263 %t266 = extractvalue { ptr, i64, i64 } %t265, 1 %t267 = icmp uge i64 %t264, %t266 - br i1 %t267, label %range2826, label %inrange2827 -range2826: + br i1 %t267, label %range2830, label %inrange2831 +range2830: call void @finch_panic_index(ptr @.str.1689, i64 968, i64 %t264, i64 %t266) unreachable -inrange2827: +inrange2831: %t268 = extractvalue { ptr, i64, i64 } %t265, 0 %t269 = getelementptr inbounds %S.ast.Type, ptr %t268, i64 %t264 %t270 = load %S.ast.Type, ptr %t269 %t271 = call i1 @finch.gen.owning(ptr %t262, %S.ast.Type %t270) - br i1 %t271, label %then2828, label %endif2830 -then2828: + br i1 %t271, label %then2832, label %endif2834 +then2832: %t272 = load ptr, ptr %a1 %t273 = load ptr, ptr %a1 %t274 = load { ptr, i64, i64 }, ptr %a255 @@ -31157,11 +31183,11 @@ then2828: %t286 = load { ptr, i64, i64 }, ptr %t284 %t287 = extractvalue { ptr, i64, i64 } %t286, 1 %t288 = icmp uge i64 %t285, %t287 - br i1 %t288, label %range2831, label %inrange2832 -range2831: + br i1 %t288, label %range2835, label %inrange2836 +range2835: call void @finch_panic_index(ptr @.str.1692, i64 969, i64 %t285, i64 %t287) unreachable -inrange2832: +inrange2836: %t289 = extractvalue { ptr, i64, i64 } %t286, 0 %t290 = getelementptr inbounds i64, ptr %t289, i64 %t285 %t291 = load i64, ptr %t290 @@ -31183,32 +31209,32 @@ inrange2832: %t304 = load { ptr, i64, i64 }, ptr %t302 %t305 = extractvalue { ptr, i64, i64 } %t304, 1 %t306 = icmp uge i64 %t303, %t305 - br i1 %t306, label %range2833, label %inrange2834 -range2833: + br i1 %t306, label %range2837, label %inrange2838 +range2837: call void @finch_panic_index(ptr @.str.1693, i64 969, i64 %t303, i64 %t305) unreachable -inrange2834: +inrange2838: %t307 = extractvalue { ptr, i64, i64 } %t304, 0 %t308 = getelementptr inbounds %S.ast.Type, ptr %t307, i64 %t303 %t309 = load %S.ast.Type, ptr %t308 call void @finch.gen.dropAt(ptr %t272, { ptr, i64, i64 } %t300, %S.ast.Type %t309) store { ptr, i64, i64 } %t300, ptr %a310 call void @finch_str_drop(ptr %a310) - br label %endif2830 -endif2830: - br label %for.step2824 -for.step2824: + br label %endif2834 +endif2834: + br label %for.step2828 +for.step2828: %t311 = load i64, ptr %a259 %t312 = add i64 %t311, 1 store i64 %t312, ptr %a259 - br label %for.cond2822 -for.end2825: + br label %for.cond2826 +for.end2829: call void @finch_str_drop(ptr %a255) call void @finch.drop.S_gen_StructDef(ptr %a251) - br label %endif2804 -endif2804: - br label %endif2794 -endif2794: + br label %endif2808 +endif2808: + br label %endif2798 +endif2798: %t313 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t313, { ptr, i64, i64 } { ptr @.str.1694, i64 8, i64 0 }) %t314 = load ptr, ptr %a1 @@ -31244,54 +31270,54 @@ entry: store %S.gen.Val %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 - br label %logic.from2835 -logic.from2835: - br i1 %t4, label %logic.rhs2836, label %logic.end2837 -logic.rhs2836: + br label %logic.from2839 +logic.from2839: + br i1 %t4, label %logic.rhs2840, label %logic.end2841 +logic.rhs2840: %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = icmp sgt i64 %t7, 0 - br label %logic.rend2838 -logic.rend2838: - br label %logic.end2837 -logic.end2837: - %t9 = phi i1 [ false, %logic.from2835 ], [ %t8, %logic.rend2838 ] - br label %logic.from2839 -logic.from2839: - br i1 %t9, label %logic.rhs2840, label %logic.end2841 -logic.rhs2840: - %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 - %t11 = load { ptr, i64, i64 }, ptr %t10 - %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) - %t13 = xor i1 %t12, true br label %logic.rend2842 logic.rend2842: br label %logic.end2841 logic.end2841: - %t14 = phi i1 [ false, %logic.from2839 ], [ %t13, %logic.rend2842 ] + %t9 = phi i1 [ false, %logic.from2839 ], [ %t8, %logic.rend2842 ] br label %logic.from2843 logic.from2843: - br i1 %t14, label %logic.rhs2844, label %logic.end2845 + br i1 %t9, label %logic.rhs2844, label %logic.end2845 logic.rhs2844: - %t15 = load ptr, ptr %a1 - %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 - %t17 = load %S.ast.Type, ptr %t16 - %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true br label %logic.rend2846 logic.rend2846: br label %logic.end2845 logic.end2845: - %t19 = phi i1 [ false, %logic.from2843 ], [ %t18, %logic.rend2846 ] - br i1 %t19, label %then2847, label %endif2849 -then2847: + %t14 = phi i1 [ false, %logic.from2843 ], [ %t13, %logic.rend2846 ] + br label %logic.from2847 +logic.from2847: + br i1 %t14, label %logic.rhs2848, label %logic.end2849 +logic.rhs2848: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2850 +logic.rend2850: + br label %logic.end2849 +logic.end2849: + %t19 = phi i1 [ false, %logic.from2847 ], [ %t18, %logic.rend2850 ] + br i1 %t19, label %then2851, label %endif2853 +then2851: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic2850, label %ok2851 -panic2850: + br i1 %t21, label %panic2854, label %ok2855 +panic2854: call void @finch_panic(ptr @.str.1697, i64 982, ptr @.str.1698) unreachable -ok2851: +ok2855: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 11 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 @@ -31314,8 +31340,8 @@ ok2851: %t40 = getelementptr inbounds %S.gen.Pending, ptr %t39, i64 %t37 store %S.gen.Pending %t36, ptr %t40 store i64 %t38, ptr %t23 - br label %endif2849 -endif2849: + br label %endif2853 +endif2853: ret void } @@ -31334,15 +31360,15 @@ entry: %t4 = load ptr, ptr %a1 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) - br i1 %t6, label %then2852, label %endif2854 -then2852: + br i1 %t6, label %then2856, label %endif2858 +then2856: %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic2855, label %ok2856 -panic2855: + br i1 %t8, label %panic2859, label %ok2860 +panic2859: call void @finch_panic(ptr @.str.1699, i64 988, ptr @.str.1700) unreachable -ok2856: +ok2860: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 11 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %a2 @@ -31363,8 +31389,8 @@ ok2856: %t25 = getelementptr inbounds %S.gen.Pending, ptr %t24, i64 %t22 store %S.gen.Pending %t21, ptr %t25 store i64 %t23, ptr %t10 - br label %endif2854 -endif2854: + br label %endif2858 +endif2858: ret void } @@ -31404,42 +31430,42 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2857, label %ok2858 -panic2857: + br i1 %t4, label %panic2861, label %ok2862 +panic2861: call void @finch_panic(ptr @.str.1701, i64 994, ptr @.str.1702) unreachable -ok2858: +ok2862: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 %t7, ptr %a8 - br label %while.cond2859 -while.cond2859: + br label %while.cond2863 +while.cond2863: %t9 = load i64, ptr %a8 %t10 = load i64, ptr %a2 %t11 = icmp sgt i64 %t9, %t10 - br i1 %t11, label %while.body2860, label %while.end2861 -while.body2860: + br i1 %t11, label %while.body2864, label %while.end2865 +while.body2864: %t12 = load i64, ptr %a8 %t13 = sub i64 %t12, 1 store i64 %t13, ptr %a8 %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic2862, label %ok2863 -panic2862: + br i1 %t15, label %panic2866, label %ok2867 +panic2866: call void @finch_panic(ptr @.str.1703, i64 997, ptr @.str.1704) unreachable -ok2863: +ok2867: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 11 %t17 = load i64, ptr %a8 %t18 = load { ptr, i64, i64 }, ptr %t16 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 - br i1 %t20, label %range2864, label %inrange2865 -range2864: + br i1 %t20, label %range2868, label %inrange2869 +range2868: call void @finch_panic_index(ptr @.str.1705, i64 997, i64 %t17, i64 %t19) unreachable -inrange2865: +inrange2869: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.Pending, ptr %t21, i64 %t17 %t23 = load %S.gen.Pending, ptr %t22 @@ -31449,27 +31475,27 @@ inrange2865: store %S.gen.Pending %t26, ptr %a27 %t28 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 2 %t29 = load i1, ptr %t28 - br i1 %t29, label %then2866, label %else2867 -then2866: + br i1 %t29, label %then2870, label %else2871 +then2870: %t30 = load ptr, ptr %a1 %t31 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 %t32 = load { ptr, i64, i64 }, ptr %t31 %t33 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 %t34 = load %S.ast.Type, ptr %t33 call void @finch.gen.dropAt(ptr %t30, { ptr, i64, i64 } %t32, %S.ast.Type %t34) - br label %endif2868 -else2867: + br label %endif2872 +else2871: %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 %t39 = load %S.ast.Type, ptr %t38 call void @finch.gen.dropValue(ptr %t35, { ptr, i64, i64 } %t37, %S.ast.Type %t39) - br label %endif2868 -endif2868: + br label %endif2872 +endif2872: call void @finch.drop.S_gen_Pending(ptr %a27) - br label %while.cond2859 -while.end2861: + br label %while.cond2863 +while.end2865: ret void } @@ -31480,38 +31506,38 @@ entry: %a20 = alloca %S.gen.Pending, align 16 store ptr %p0, ptr %a1 store i64 %p1, ptr %a2 - br label %while.cond2869 -while.cond2869: + br label %while.cond2873 +while.cond2873: %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic2872, label %ok2873 -panic2872: + br i1 %t4, label %panic2876, label %ok2877 +panic2876: call void @finch_panic(ptr @.str.1706, i64 1008, ptr @.str.1707) unreachable -ok2873: +ok2877: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = load i64, ptr %a2 %t9 = icmp sgt i64 %t7, %t8 - br i1 %t9, label %while.body2870, label %while.end2871 -while.body2870: + br i1 %t9, label %while.body2874, label %while.end2875 +while.body2874: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic2874, label %ok2875 -panic2874: + br i1 %t11, label %panic2878, label %ok2879 +panic2878: call void @finch_panic(ptr @.str.1708, i64 1009, ptr @.str.1709) unreachable -ok2875: +ok2879: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 11 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp eq i64 %t14, 0 - br i1 %t15, label %panic2876, label %ok2877 -panic2876: + br i1 %t15, label %panic2880, label %ok2881 +panic2880: call void @finch_panic(ptr @.str.1710, i64 1009, ptr @.str.1711) unreachable -ok2877: +ok2881: %t16 = sub i64 %t14, 1 %t17 = load ptr, ptr %t12 %t18 = getelementptr inbounds %S.gen.Pending, ptr %t17, i64 %t16 @@ -31519,8 +31545,8 @@ ok2877: store i64 %t16, ptr %t13 store %S.gen.Pending %t19, ptr %a20 call void @finch.drop.S_gen_Pending(ptr %a20) - br label %while.cond2869 -while.end2871: + br label %while.cond2873 +while.end2875: ret void } @@ -31537,26 +31563,26 @@ entry: %t5 = load %S.ast.Type, ptr %t4 %t6 = call i1 @finch.gen.owning(ptr %t3, %S.ast.Type %t5) %t7 = xor i1 %t6, true - br label %logic.from2878 -logic.from2878: - br i1 %t7, label %logic.end2880, label %logic.rhs2879 -logic.rhs2879: + br label %logic.from2882 +logic.from2882: + br i1 %t7, label %logic.end2884, label %logic.rhs2883 +logic.rhs2883: %t8 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 %t9 = load i1, ptr %t8 - br label %logic.rend2881 -logic.rend2881: - br label %logic.end2880 -logic.end2880: - %t10 = phi i1 [ true, %logic.from2878 ], [ %t9, %logic.rend2881 ] - br i1 %t10, label %then2882, label %endif2884 -then2882: + br label %logic.rend2885 +logic.rend2885: + br label %logic.end2884 +logic.end2884: + %t10 = phi i1 [ true, %logic.from2882 ], [ %t9, %logic.rend2885 ] + br i1 %t10, label %then2886, label %endif2888 +then2886: %t11 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) %t15 = load { ptr, i64, i64 }, ptr %a14 ret { ptr, i64, i64 } %t15 -endif2884: +endif2888: %t16 = load ptr, ptr %a1 %t17 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 @@ -31608,8 +31634,8 @@ entry: %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = icmp sgt i64 %t13, 0 - br i1 %t14, label %then2885, label %endif2887 -then2885: + br i1 %t14, label %then2889, label %endif2891 +then2889: %t15 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.1713, i64 2, i64 0 }, ptr %a17 store { ptr, i64, i64 } %t15, ptr %a18 @@ -31619,8 +31645,8 @@ then2885: store { ptr, i64, i64 } %t19, ptr %a11 store { ptr, i64, i64 } %t20, ptr %a21 call void @finch_str_drop(ptr %a21) - br label %endif2887 -endif2887: + br label %endif2891 +endif2891: %t22 = load ptr, ptr %a1 %t23 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t23, ptr %a25 @@ -31947,8 +31973,8 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load %S.ast.Type, ptr %a3 %t12 = call i1 @finch.gen.isSigned(%S.ast.Type %t11) - br i1 %t12, label %then2888, label %else2889 -then2888: + br i1 %t12, label %then2892, label %else2893 +then2892: %t13 = load ptr, ptr %a1 %t14 = load ptr, ptr %a1 %t15 = load { ptr, i64, i64 }, ptr %a2 @@ -31966,12 +31992,12 @@ then2888: call void @finch.gen.printf(ptr %t13, { ptr, i64, i64 } { ptr @.str.1724, i64 4, i64 0 }, { ptr, i64, i64 } %t24) store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_drop(ptr %a25) - br label %endif2890 -else2889: + br label %endif2894 +else2893: %t26 = load %S.ast.Type, ptr %a3 %t27 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t26) - br i1 %t27, label %then2891, label %else2892 -then2891: + br i1 %t27, label %then2895, label %else2896 +then2895: %t28 = load ptr, ptr %a1 %t29 = load ptr, ptr %a1 %t30 = load { ptr, i64, i64 }, ptr %a2 @@ -31989,12 +32015,12 @@ then2891: call void @finch.gen.printf(ptr %t28, { ptr, i64, i64 } { ptr @.str.1727, i64 4, i64 0 }, { ptr, i64, i64 } %t39) store { ptr, i64, i64 } %t39, ptr %a40 call void @finch_str_drop(ptr %a40) - br label %endif2893 -else2892: + br label %endif2897 +else2896: %t41 = load %S.ast.Type, ptr %a3 %t42 = call i1 @finch.gen.isFloat(%S.ast.Type %t41) - br i1 %t42, label %then2894, label %else2895 -then2894: + br i1 %t42, label %then2898, label %else2899 +then2898: %t43 = load ptr, ptr %a1 %t44 = load ptr, ptr %a1 %t45 = load { ptr, i64, i64 }, ptr %a2 @@ -32012,15 +32038,15 @@ then2894: call void @finch.gen.printf(ptr %t43, { ptr, i64, i64 } { ptr @.str.1730, i64 2, i64 0 }, { ptr, i64, i64 } %t54) store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_drop(ptr %a55) - br label %endif2896 -else2895: + br label %endif2900 +else2899: %t56 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t56, ptr %a57 store { ptr, i64, i64 } { ptr @.str.1733, i64 4, i64 0 }, ptr %a58 %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) %t60 = icmp ne i32 %t59, 0 - br i1 %t60, label %then2897, label %else2898 -then2897: + br i1 %t60, label %then2901, label %else2902 +then2901: %t61 = load ptr, ptr %a1 %t62 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1734, i64 8, i64 0 }, ptr %a64 @@ -32038,8 +32064,8 @@ then2897: call void @finch_str_drop(ptr %a73) store { ptr, i64, i64 } %t72, ptr %a74 %t75 = load i1, ptr %a4 - br i1 %t75, label %then2900, label %else2901 -then2900: + br i1 %t75, label %then2904, label %else2905 +then2904: %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } { ptr @.str.1737, i64 4, i64 0 }, ptr %a79 @@ -32049,8 +32075,8 @@ then2900: call void @finch.gen.printf(ptr %t76, { ptr, i64, i64 } { ptr @.str.1736, i64 4, i64 0 }, { ptr, i64, i64 } %t81) store { ptr, i64, i64 } %t81, ptr %a82 call void @finch_str_drop(ptr %a82) - br label %endif2902 -else2901: + br label %endif2906 +else2905: %t83 = load ptr, ptr %a1 %t84 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } { ptr @.str.1739, i64 4, i64 0 }, ptr %a86 @@ -32060,18 +32086,18 @@ else2901: call void @finch.gen.printf(ptr %t83, { ptr, i64, i64 } { ptr @.str.1738, i64 2, i64 0 }, { ptr, i64, i64 } %t88) store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_drop(ptr %a89) - br label %endif2902 -endif2902: + br label %endif2906 +endif2906: call void @finch_str_drop(ptr %a74) - br label %endif2899 -else2898: + br label %endif2903 +else2902: %t90 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.1740, i64 4, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 - br i1 %t94, label %then2903, label %else2904 -then2903: + br i1 %t94, label %then2907, label %else2908 +then2907: %t95 = load ptr, ptr %a1 %t96 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t95, { ptr, i64, i64 } { ptr @.str.1741, i64 4, i64 0 }) store { ptr, i64, i64 } %t96, ptr %a97 @@ -32126,15 +32152,15 @@ then2903: call void @finch_str_drop(ptr %a131) call void @finch_str_drop(ptr %a100) call void @finch_str_drop(ptr %a97) - br label %endif2905 -else2904: + br label %endif2909 +else2908: %t139 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t139, ptr %a140 store { ptr, i64, i64 } { ptr @.str.1748, i64 3, i64 0 }, ptr %a141 %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) %t143 = icmp ne i32 %t142, 0 - br i1 %t143, label %then2906, label %else2907 -then2906: + br i1 %t143, label %then2910, label %else2911 +then2910: %t144 = load ptr, ptr %a1 %t145 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1749, i64 31, i64 0 }, ptr %a147 @@ -32172,8 +32198,8 @@ then2906: %t174 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t172, { ptr, i64, i64 } %t173) store { ptr, i64, i64 } %t174, ptr %a175 %t176 = load i1, ptr %a4 - br i1 %t176, label %then2909, label %else2910 -then2909: + br i1 %t176, label %then2913, label %else2914 +then2913: %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } { ptr @.str.1754, i64 4, i64 0 }, ptr %a180 @@ -32196,8 +32222,8 @@ then2909: call void @finch.gen.printf(ptr %t177, { ptr, i64, i64 } { ptr @.str.1753, i64 6, i64 0 }, { ptr, i64, i64 } %t193) store { ptr, i64, i64 } %t193, ptr %a194 call void @finch_str_drop(ptr %a194) - br label %endif2911 -else2910: + br label %endif2915 +else2914: %t195 = load ptr, ptr %a1 %t196 = load { ptr, i64, i64 }, ptr %a171 store { ptr, i64, i64 } { ptr @.str.1757, i64 4, i64 0 }, ptr %a198 @@ -32220,20 +32246,20 @@ else2910: call void @finch.gen.printf(ptr %t195, { ptr, i64, i64 } { ptr @.str.1756, i64 4, i64 0 }, { ptr, i64, i64 } %t211) store { ptr, i64, i64 } %t211, ptr %a212 call void @finch_str_drop(ptr %a212) - br label %endif2911 -endif2911: + br label %endif2915 +endif2915: call void @finch_str_drop(ptr %a175) call void @finch_str_drop(ptr %a171) call void @finch_str_drop(ptr %a157) - br label %endif2908 -else2907: + br label %endif2912 +else2911: %t213 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t213, ptr %a214 store { ptr, i64, i64 } { ptr @.str.1759, i64 3, i64 0 }, ptr %a215 %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) %t217 = icmp ne i32 %t216, 0 - br i1 %t217, label %then2912, label %else2913 -then2912: + br i1 %t217, label %then2916, label %else2917 +then2916: %t218 = load ptr, ptr %a1 %t219 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1760, i64 12, i64 0 }, ptr %a221 @@ -32310,19 +32336,19 @@ then2912: call void @finch_str_drop(ptr %a237) call void @finch_str_drop(ptr %a234) call void @finch_str_drop(ptr %a231) - br label %endif2914 -else2913: + br label %endif2918 +else2917: %t276 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t276, ptr %a277 store { ptr, i64, i64 } { ptr @.str.1771, i64 4, i64 0 }, ptr %a278 %t279 = call i32 @finch_str_eq(ptr %a277, ptr %a278) %t280 = icmp ne i32 %t279, 0 - br i1 %t280, label %then2915, label %else2916 -then2915: + br i1 %t280, label %then2919, label %else2920 +then2919: %t281 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t281, { ptr, i64, i64 } { ptr @.str.1772, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1773, i64 0, i64 0 }) - br label %endif2917 -else2916: + br label %endif2921 +else2920: %t282 = load ptr, ptr %a1 %t283 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t282, { ptr, i64, i64 } { ptr @.str.1774, i64 17, i64 0 }) store { ptr, i64, i64 } %t283, ptr %a284 @@ -32351,22 +32377,22 @@ else2916: store { ptr, i64, i64 } %t302, ptr %a303 call void @finch_str_drop(ptr %a303) call void @finch_str_drop(ptr %a284) - br label %endif2917 -endif2917: - br label %endif2914 -endif2914: - br label %endif2908 -endif2908: - br label %endif2905 -endif2905: - br label %endif2899 -endif2899: - br label %endif2896 -endif2896: - br label %endif2893 -endif2893: - br label %endif2890 -endif2890: + br label %endif2921 +endif2921: + br label %endif2918 +endif2918: + br label %endif2912 +endif2912: + br label %endif2909 +endif2909: + br label %endif2903 +endif2903: + br label %endif2900 +endif2900: + br label %endif2897 +endif2897: + br label %endif2894 +endif2894: call void @finch_str_drop(ptr %a10) ret void } @@ -32674,18 +32700,18 @@ entry: store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.1783, i64 1, i64 0 }, ptr %a12 %t13 = load i1, ptr %a5 - br i1 %t13, label %then2918, label %endif2920 -then2918: + br i1 %t13, label %then2922, label %endif2924 +then2922: %t14 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } { ptr @.str.1784, i64 1, i64 0 }, ptr %a12 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_drop(ptr %a15) - br label %endif2920 -endif2920: + br label %endif2924 +endif2924: %t16 = load %S.ast.Type, ptr %a4 %t17 = call i1 @finch.gen.isSigned(%S.ast.Type %t16) - br i1 %t17, label %then2921, label %else2922 -then2921: + br i1 %t17, label %then2925, label %else2926 +then2925: %t18 = load ptr, ptr %a1 %t19 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1785, i64 29, i64 0 }, ptr %a21 @@ -32722,12 +32748,12 @@ then2921: call void @finch.gen.emit(ptr %t18, { ptr, i64, i64 } %t45) store { ptr, i64, i64 } %t45, ptr %a46 call void @finch_str_drop(ptr %a46) - br label %endif2923 -else2922: + br label %endif2927 +else2926: %t47 = load %S.ast.Type, ptr %a4 %t48 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t47) - br i1 %t48, label %then2924, label %else2925 -then2924: + br i1 %t48, label %then2928, label %else2929 +then2928: %t49 = load ptr, ptr %a1 %t50 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1789, i64 30, i64 0 }, ptr %a52 @@ -32764,12 +32790,12 @@ then2924: call void @finch.gen.emit(ptr %t49, { ptr, i64, i64 } %t76) store { ptr, i64, i64 } %t76, ptr %a77 call void @finch_str_drop(ptr %a77) - br label %endif2926 -else2925: + br label %endif2930 +else2929: %t78 = load %S.ast.Type, ptr %a4 %t79 = call i1 @finch.gen.isFloat(%S.ast.Type %t78) - br i1 %t79, label %then2927, label %else2928 -then2927: + br i1 %t79, label %then2931, label %else2932 +then2931: %t80 = load ptr, ptr %a1 %t81 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1793, i64 31, i64 0 }, ptr %a83 @@ -32806,15 +32832,15 @@ then2927: call void @finch.gen.emit(ptr %t80, { ptr, i64, i64 } %t107) store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_drop(ptr %a108) - br label %endif2929 -else2928: + br label %endif2933 +else2932: %t109 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.1797, i64 4, i64 0 }, ptr %a111 %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) %t113 = icmp ne i32 %t112, 0 - br i1 %t113, label %then2930, label %else2931 -then2930: + br i1 %t113, label %then2934, label %else2935 +then2934: %t114 = load ptr, ptr %a1 %t115 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1798, i64 30, i64 0 }, ptr %a117 @@ -32856,15 +32882,15 @@ then2930: call void @finch.gen.emit(ptr %t114, { ptr, i64, i64 } %t146) store { ptr, i64, i64 } %t146, ptr %a147 call void @finch_str_drop(ptr %a147) - br label %endif2932 -else2931: + br label %endif2936 +else2935: %t148 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t148, ptr %a149 store { ptr, i64, i64 } { ptr @.str.1802, i64 4, i64 0 }, ptr %a150 %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) %t152 = icmp ne i32 %t151, 0 - br i1 %t152, label %then2933, label %else2934 -then2933: + br i1 %t152, label %then2937, label %else2938 +then2937: %t153 = load ptr, ptr %a1 %t154 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1803, i64 30, i64 0 }, ptr %a156 @@ -32909,15 +32935,15 @@ then2933: call void @finch.gen.emit(ptr %t153, { ptr, i64, i64 } %t187) store { ptr, i64, i64 } %t187, ptr %a188 call void @finch_str_drop(ptr %a188) - br label %endif2935 -else2934: + br label %endif2939 +else2938: %t189 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t189, ptr %a190 store { ptr, i64, i64 } { ptr @.str.1808, i64 3, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 - br i1 %t193, label %then2936, label %else2937 -then2936: + br i1 %t193, label %then2940, label %else2941 +then2940: %t194 = load ptr, ptr %a1 %t195 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1809, i64 29, i64 0 }, ptr %a197 @@ -32974,29 +33000,29 @@ then2936: call void @finch.gen.emit(ptr %t194, { ptr, i64, i64 } %t239) store { ptr, i64, i64 } %t239, ptr %a240 call void @finch_str_drop(ptr %a240) - br label %endif2938 -else2937: + br label %endif2942 +else2941: %t241 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t241, ptr %a242 store { ptr, i64, i64 } { ptr @.str.1813, i64 3, i64 0 }, ptr %a243 %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) %t245 = icmp ne i32 %t244, 0 - br label %logic.from2939 -logic.from2939: - br i1 %t245, label %logic.end2941, label %logic.rhs2940 -logic.rhs2940: + br label %logic.from2943 +logic.from2943: + br i1 %t245, label %logic.end2945, label %logic.rhs2944 +logic.rhs2944: %t246 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t246, ptr %a247 store { ptr, i64, i64 } { ptr @.str.1814, i64 4, i64 0 }, ptr %a248 %t249 = call i32 @finch_str_eq(ptr %a247, ptr %a248) %t250 = icmp ne i32 %t249, 0 - br label %logic.rend2942 -logic.rend2942: - br label %logic.end2941 -logic.end2941: - %t251 = phi i1 [ true, %logic.from2939 ], [ %t250, %logic.rend2942 ] - br i1 %t251, label %then2943, label %else2944 -then2943: + br label %logic.rend2946 +logic.rend2946: + br label %logic.end2945 +logic.end2945: + %t251 = phi i1 [ true, %logic.from2943 ], [ %t250, %logic.rend2946 ] + br i1 %t251, label %then2947, label %else2948 +then2947: %t252 = load ptr, ptr %a1 %t253 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.1815, i64 29, i64 0 }, ptr %a255 @@ -33025,8 +33051,8 @@ then2943: call void @finch.gen.emit(ptr %t252, { ptr, i64, i64 } %t273) store { ptr, i64, i64 } %t273, ptr %a274 call void @finch_str_drop(ptr %a274) - br label %endif2945 -else2944: + br label %endif2949 +else2948: %t275 = load ptr, ptr %a1 %t276 = load ptr, ptr %a1 %t277 = load %S.ast.Type, ptr %a4 @@ -33087,20 +33113,20 @@ else2944: call void @finch.gen.emit(ptr %t275, { ptr, i64, i64 } %t323) store { ptr, i64, i64 } %t323, ptr %a324 call void @finch_str_drop(ptr %a324) - br label %endif2945 -endif2945: - br label %endif2938 -endif2938: - br label %endif2935 -endif2935: - br label %endif2932 -endif2932: - br label %endif2929 -endif2929: - br label %endif2926 -endif2926: - br label %endif2923 -endif2923: + br label %endif2949 +endif2949: + br label %endif2942 +endif2942: + br label %endif2939 +endif2939: + br label %endif2936 +endif2936: + br label %endif2933 +endif2933: + br label %endif2930 +endif2930: + br label %endif2927 +endif2927: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a11) ret void @@ -33502,27 +33528,27 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic2946, label %ok2947 -panic2946: + br i1 %t12, label %panic2950, label %ok2951 +panic2950: call void @finch_panic(ptr @.str.1823, i64 1126, ptr @.str.1824) unreachable -ok2947: +ok2951: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) - br i1 %t16, label %then2948, label %endif2950 -then2948: + br i1 %t16, label %then2952, label %endif2954 +then2952: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 -endif2950: +endif2954: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic2951, label %ok2952 -panic2951: + br i1 %t19, label %panic2955, label %ok2956 +panic2955: call void @finch_panic(ptr @.str.1825, i64 1129, ptr @.str.1826) unreachable -ok2952: +ok2956: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 @@ -33545,17 +33571,17 @@ ok2952: store { ptr, i64, i64 } { ptr @.str.1827, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then2953, label %else2954 -then2953: + br i1 %t38, label %then2957, label %else2958 +then2957: %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 - br i1 %t42, label %range2956, label %inrange2957 -range2956: + br i1 %t42, label %range2960, label %inrange2961 +range2960: call void @finch_panic_index(ptr @.str.1828, i64 1132, i64 0, i64 %t41) unreachable -inrange2957: +inrange2961: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 %t45 = load %S.ast.Type, ptr %t44 @@ -33589,11 +33615,11 @@ inrange2957: %t71 = load { ptr, i64, i64 }, ptr %a63 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 3, %t72 - br i1 %t73, label %range2958, label %inrange2959 -range2958: + br i1 %t73, label %range2962, label %inrange2963 +range2962: call void @finch_panic_index(ptr @.str.1838, i64 1139, i64 3, i64 %t72) unreachable -inrange2959: +inrange2963: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 3 %t76 = load { ptr, i64, i64 }, ptr %t75 @@ -33659,11 +33685,11 @@ inrange2959: %t125 = load { ptr, i64, i64 }, ptr %a63 %t126 = extractvalue { ptr, i64, i64 } %t125, 1 %t127 = icmp uge i64 3, %t126 - br i1 %t127, label %range2960, label %inrange2961 -range2960: + br i1 %t127, label %range2964, label %inrange2965 +range2964: call void @finch_panic_index(ptr @.str.1845, i64 1145, i64 3, i64 %t126) unreachable -inrange2961: +inrange2965: %t128 = extractvalue { ptr, i64, i64 } %t125, 0 %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i64 3 %t130 = load { ptr, i64, i64 }, ptr %t129 @@ -33703,23 +33729,23 @@ inrange2961: call void @finch_str_drop(ptr %a58) call void @finch_str_drop(ptr %a52) call void @finch.drop.S_ast_Type(ptr %a49) - br label %endif2955 -else2954: + br label %endif2959 +else2958: %t152 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t153 = load { ptr, i64, i64 }, ptr %t152 store { ptr, i64, i64 } %t153, ptr %a154 store { ptr, i64, i64 } { ptr @.str.1849, i64 4, i64 0 }, ptr %a155 %t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155) %t157 = icmp ne i32 %t156, 0 - br i1 %t157, label %then2962, label %else2963 -then2962: + br i1 %t157, label %then2966, label %else2967 +then2966: %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null - br i1 %t159, label %panic2965, label %ok2966 -panic2965: + br i1 %t159, label %panic2969, label %ok2970 +panic2969: call void @finch_panic(ptr @.str.1850, i64 1151, ptr @.str.1851) unreachable -ok2966: +ok2970: %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 21 %t161 = load ptr, ptr %a1 %t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -33730,11 +33756,11 @@ ok2966: %t167 = load { ptr, i64, i64 }, ptr %t160 %t168 = extractvalue { ptr, i64, i64 } %t167, 1 %t169 = icmp uge i64 %t166, %t168 - br i1 %t169, label %range2967, label %inrange2968 -range2967: + br i1 %t169, label %range2971, label %inrange2972 +range2971: call void @finch_panic_index(ptr @.str.1852, i64 1151, i64 %t166, i64 %t168) unreachable -inrange2968: +inrange2972: %t170 = extractvalue { ptr, i64, i64 } %t167, 0 %t171 = getelementptr inbounds %S.gen.EnumDef, ptr %t170, i64 %t166 %t172 = load %S.gen.EnumDef, ptr %t171 @@ -33757,12 +33783,12 @@ inrange2968: %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 %t190 = load i64, ptr %t189 store i64 0, ptr %a191 - br label %for.cond2969 -for.cond2969: + br label %for.cond2973 +for.cond2973: %t192 = load i64, ptr %a191 %t193 = icmp slt i64 %t192, %t190 - br i1 %t193, label %for.body2970, label %for.end2972 -for.body2970: + br i1 %t193, label %for.body2974, label %for.end2976 +for.body2974: %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a187, i32 0, i32 1 %t195 = load ptr, ptr %a1 %t196 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t195, { ptr, i64, i64 } { ptr @.str.1857, i64 6, i64 0 }) @@ -33779,11 +33805,11 @@ for.body2970: %t204 = load { ptr, i64, i64 }, ptr %t202 %t205 = extractvalue { ptr, i64, i64 } %t204, 1 %t206 = icmp uge i64 %t203, %t205 - br i1 %t206, label %range2973, label %inrange2974 -range2973: + br i1 %t206, label %range2977, label %inrange2978 +range2977: call void @finch_panic_index(ptr @.str.1859, i64 1159, i64 %t203, i64 %t205) unreachable -inrange2974: +inrange2978: %t207 = extractvalue { ptr, i64, i64 } %t204, 0 %t208 = getelementptr inbounds i64, ptr %t207, i64 %t203 %t209 = load i64, ptr %t208 @@ -33805,11 +33831,11 @@ inrange2974: %t223 = load { ptr, i64, i64 }, ptr %a187 %t224 = extractvalue { ptr, i64, i64 } %t223, 1 %t225 = icmp uge i64 %t222, %t224 - br i1 %t225, label %range2975, label %inrange2976 -range2975: + br i1 %t225, label %range2979, label %inrange2980 +range2979: call void @finch_panic_index(ptr @.str.1861, i64 1159, i64 %t222, i64 %t224) unreachable -inrange2976: +inrange2980: %t226 = extractvalue { ptr, i64, i64 } %t223, 0 %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 %t222 %t228 = load { ptr, i64, i64 }, ptr %t227 @@ -33826,13 +33852,13 @@ inrange2976: %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i64 %t234 store { ptr, i64, i64 } %t233, ptr %t237 store i64 %t235, ptr %t201 - br label %for.step2971 -for.step2971: + br label %for.step2975 +for.step2975: %t238 = load i64, ptr %a191 %t239 = add i64 %t238, 1 store i64 %t239, ptr %a191 - br label %for.cond2969 -for.end2972: + br label %for.cond2973 +for.end2976: %t240 = load ptr, ptr %a1 %t241 = load { ptr, i64, i64 }, ptr %a179 store { ptr, i64, i64 } { ptr @.str.1862, i64 11, i64 0 }, ptr %a243 @@ -33881,33 +33907,33 @@ for.end2972: call void @finch_str_drop(ptr %a277) %t278 = load ptr, ptr %a1 %t279 = icmp eq ptr %t278, null - br i1 %t279, label %panic2977, label %ok2978 -panic2977: + br i1 %t279, label %panic2981, label %ok2982 +panic2981: call void @finch_panic(ptr @.str.1867, i64 1162, ptr @.str.1868) unreachable -ok2978: +ok2982: %t280 = getelementptr inbounds %S.gen.Gen, ptr %t278, i32 0, i32 9 store i1 true, ptr %t280 %t281 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %t281, i32 0, i32 1 %t283 = load i64, ptr %t282 store i64 0, ptr %a284 - br label %for.cond2979 -for.cond2979: + br label %for.cond2983 +for.cond2983: %t285 = load i64, ptr %a284 %t286 = icmp slt i64 %t285, %t283 - br i1 %t286, label %for.body2980, label %for.end2982 -for.body2980: + br i1 %t286, label %for.body2984, label %for.end2986 +for.body2984: %t287 = load ptr, ptr %a1 %t288 = load i64, ptr %a284 %t289 = load { ptr, i64, i64 }, ptr %a187 %t290 = extractvalue { ptr, i64, i64 } %t289, 1 %t291 = icmp uge i64 %t288, %t290 - br i1 %t291, label %range2983, label %inrange2984 -range2983: + br i1 %t291, label %range2987, label %inrange2988 +range2987: call void @finch_panic_index(ptr @.str.1869, i64 1164, i64 %t288, i64 %t290) unreachable -inrange2984: +inrange2988: %t292 = extractvalue { ptr, i64, i64 } %t289, 0 %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %t292, i64 %t288 %t294 = load { ptr, i64, i64 }, ptr %t293 @@ -33918,11 +33944,11 @@ inrange2984: %t298 = load { ptr, i64, i64 }, ptr %t296 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 %t297, %t299 - br i1 %t300, label %range2985, label %inrange2986 -range2985: + br i1 %t300, label %range2989, label %inrange2990 +range2989: call void @finch_panic_index(ptr @.str.1871, i64 1165, i64 %t297, i64 %t299) unreachable -inrange2986: +inrange2990: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 %t297 %t303 = load { ptr, i64, i64 }, ptr %t302 @@ -33930,13 +33956,13 @@ inrange2986: %t304 = load ptr, ptr %a1 %t305 = load { ptr, i64, i64 }, ptr %a185 call void @finch.gen.br(ptr %t304, { ptr, i64, i64 } %t305) - br label %for.step2981 -for.step2981: + br label %for.step2985 +for.step2985: %t306 = load i64, ptr %a284 %t307 = add i64 %t306, 1 store i64 %t307, ptr %a284 - br label %for.cond2979 -for.end2982: + br label %for.cond2983 +for.end2986: %t308 = load ptr, ptr %a1 %t309 = load { ptr, i64, i64 }, ptr %a182 call void @finch.gen.label(ptr %t308, { ptr, i64, i64 } %t309) @@ -33995,16 +34021,16 @@ for.end2982: call void @finch_str_drop(ptr %a182) call void @finch_str_drop(ptr %a179) call void @finch.drop.S_gen_EnumDef(ptr %a176) - br label %endif2964 -else2963: + br label %endif2968 +else2967: %t348 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t349 = load { ptr, i64, i64 }, ptr %t348 store { ptr, i64, i64 } %t349, ptr %a350 store { ptr, i64, i64 } { ptr @.str.1880, i64 3, i64 0 }, ptr %a351 %t352 = call i32 @finch_str_eq(ptr %a350, ptr %a351) %t353 = icmp ne i32 %t352, 0 - br i1 %t353, label %then2987, label %else2988 -then2987: + br i1 %t353, label %then2991, label %else2992 +then2991: %t354 = load ptr, ptr %a1 %t355 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t354, { ptr, i64, i64 } { ptr @.str.1881, i64 2, i64 0 }) store { ptr, i64, i64 } %t355, ptr %a356 @@ -34046,11 +34072,11 @@ then2987: %t386 = load { ptr, i64, i64 }, ptr %a383 %t387 = extractvalue { ptr, i64, i64 } %t386, 1 %t388 = icmp uge i64 3, %t387 - br i1 %t388, label %range2990, label %inrange2991 -range2990: + br i1 %t388, label %range2994, label %inrange2995 +range2994: call void @finch_panic_index(ptr @.str.1890, i64 1181, i64 3, i64 %t387) unreachable -inrange2991: +inrange2995: %t389 = extractvalue { ptr, i64, i64 } %t386, 0 %t390 = getelementptr inbounds { ptr, i64, i64 }, ptr %t389, i64 3 %t391 = load { ptr, i64, i64 }, ptr %t390 @@ -34131,11 +34157,11 @@ inrange2991: %t452 = load { ptr, i64, i64 }, ptr %t451 %t453 = extractvalue { ptr, i64, i64 } %t452, 1 %t454 = icmp uge i64 0, %t453 - br i1 %t454, label %range2992, label %inrange2993 -range2992: + br i1 %t454, label %range2996, label %inrange2997 +range2996: call void @finch_panic_index(ptr @.str.1904, i64 1194, i64 0, i64 %t453) unreachable -inrange2993: +inrange2997: %t455 = extractvalue { ptr, i64, i64 } %t452, 0 %t456 = getelementptr inbounds %S.ast.Type, ptr %t455, i64 0 %t457 = load %S.ast.Type, ptr %t456 @@ -34153,11 +34179,11 @@ inrange2993: %t467 = load { ptr, i64, i64 }, ptr %t466 %t468 = extractvalue { ptr, i64, i64 } %t467, 1 %t469 = icmp uge i64 0, %t468 - br i1 %t469, label %range2994, label %inrange2995 -range2994: + br i1 %t469, label %range2998, label %inrange2999 +range2998: call void @finch_panic_index(ptr @.str.1905, i64 1194, i64 0, i64 %t468) unreachable -inrange2995: +inrange2999: %t470 = extractvalue { ptr, i64, i64 } %t467, 0 %t471 = getelementptr inbounds %S.ast.Type, ptr %t470, i64 0 %t472 = load %S.ast.Type, ptr %t471 @@ -34173,11 +34199,11 @@ inrange2995: %t479 = load { ptr, i64, i64 }, ptr %t478 %t480 = extractvalue { ptr, i64, i64 } %t479, 1 %t481 = icmp uge i64 1, %t480 - br i1 %t481, label %range2996, label %inrange2997 -range2996: + br i1 %t481, label %range3000, label %inrange3001 +range3000: call void @finch_panic_index(ptr @.str.1909, i64 1196, i64 1, i64 %t480) unreachable -inrange2997: +inrange3001: %t482 = extractvalue { ptr, i64, i64 } %t479, 0 %t483 = getelementptr inbounds %S.ast.Type, ptr %t482, i64 1 %t484 = load %S.ast.Type, ptr %t483 @@ -34195,11 +34221,11 @@ inrange2997: %t494 = load { ptr, i64, i64 }, ptr %t493 %t495 = extractvalue { ptr, i64, i64 } %t494, 1 %t496 = icmp uge i64 1, %t495 - br i1 %t496, label %range2998, label %inrange2999 -range2998: + br i1 %t496, label %range3002, label %inrange3003 +range3002: call void @finch_panic_index(ptr @.str.1910, i64 1196, i64 1, i64 %t495) unreachable -inrange2999: +inrange3003: %t497 = extractvalue { ptr, i64, i64 } %t494, 0 %t498 = getelementptr inbounds %S.ast.Type, ptr %t497, i64 1 %t499 = load %S.ast.Type, ptr %t498 @@ -34225,18 +34251,18 @@ inrange2999: call void @finch.drop.arr_str(ptr %a383) call void @finch_str_drop(ptr %a379) call void @finch_str_drop(ptr %a356) - br label %endif2989 -else2988: + br label %endif2993 +else2992: %t508 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t509 = load { ptr, i64, i64 }, ptr %t508 store { ptr, i64, i64 } %t509, ptr %a510 store { ptr, i64, i64 } { ptr @.str.1913, i64 6, i64 0 }, ptr %a511 %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) %t513 = icmp ne i32 %t512, 0 - br label %logic.from3000 -logic.from3000: - br i1 %t513, label %logic.rhs3001, label %logic.end3002 -logic.rhs3001: + br label %logic.from3004 +logic.from3004: + br i1 %t513, label %logic.rhs3005, label %logic.end3006 +logic.rhs3005: %t514 = load ptr, ptr %a1 %t515 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t516 = load { ptr, i64, i64 }, ptr %t515 @@ -34244,20 +34270,20 @@ logic.rhs3001: %t518 = load { ptr, i64, i64 }, ptr %t517 %t519 = call i64 @finch.gen.findSum(ptr %t514, { ptr, i64, i64 } %t516, { ptr, i64, i64 } %t518) %t520 = icmp sge i64 %t519, 0 - br label %logic.rend3003 -logic.rend3003: - br label %logic.end3002 -logic.end3002: - %t521 = phi i1 [ false, %logic.from3000 ], [ %t520, %logic.rend3003 ] - br i1 %t521, label %then3004, label %else3005 -then3004: + br label %logic.rend3007 +logic.rend3007: + br label %logic.end3006 +logic.end3006: + %t521 = phi i1 [ false, %logic.from3004 ], [ %t520, %logic.rend3007 ] + br i1 %t521, label %then3008, label %else3009 +then3008: %t522 = load ptr, ptr %a1 %t523 = icmp eq ptr %t522, null - br i1 %t523, label %panic3007, label %ok3008 -panic3007: + br i1 %t523, label %panic3011, label %ok3012 +panic3011: call void @finch_panic(ptr @.str.1914, i64 1203, ptr @.str.1915) unreachable -ok3008: +ok3012: %t524 = getelementptr inbounds %S.gen.Gen, ptr %t522, i32 0, i32 22 %t525 = load ptr, ptr %a1 %t526 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -34268,11 +34294,11 @@ ok3008: %t531 = load { ptr, i64, i64 }, ptr %t524 %t532 = extractvalue { ptr, i64, i64 } %t531, 1 %t533 = icmp uge i64 %t530, %t532 - br i1 %t533, label %range3009, label %inrange3010 -range3009: + br i1 %t533, label %range3013, label %inrange3014 +range3013: call void @finch_panic_index(ptr @.str.1916, i64 1203, i64 %t530, i64 %t532) unreachable -inrange3010: +inrange3014: %t534 = extractvalue { ptr, i64, i64 } %t531, 0 %t535 = getelementptr inbounds %S.gen.SumDef, ptr %t534, i64 %t530 %t536 = load %S.gen.SumDef, ptr %t535 @@ -34282,11 +34308,11 @@ inrange3010: store %S.gen.SumDef %t539, ptr %a540 %t541 = load ptr, ptr %a1 %t542 = icmp eq ptr %t541, null - br i1 %t542, label %panic3011, label %ok3012 -panic3011: + br i1 %t542, label %panic3015, label %ok3016 +panic3015: call void @finch_panic(ptr @.str.1917, i64 1204, ptr @.str.1918) unreachable -ok3012: +ok3016: %t543 = getelementptr inbounds %S.gen.Gen, ptr %t541, i32 0, i32 16 %t544 = load ptr, ptr %a1 %t545 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -34297,11 +34323,11 @@ ok3012: %t550 = load { ptr, i64, i64 }, ptr %t543 %t551 = extractvalue { ptr, i64, i64 } %t550, 1 %t552 = icmp uge i64 %t549, %t551 - br i1 %t552, label %range3013, label %inrange3014 -range3013: + br i1 %t552, label %range3017, label %inrange3018 +range3017: call void @finch_panic_index(ptr @.str.1919, i64 1204, i64 %t549, i64 %t551) unreachable -inrange3014: +inrange3018: %t553 = extractvalue { ptr, i64, i64 } %t550, 0 %t554 = getelementptr inbounds %S.gen.StructDef, ptr %t553, i64 %t549 %t555 = load %S.gen.StructDef, ptr %t554 @@ -34330,11 +34356,11 @@ inrange3014: %t577 = load { ptr, i64, i64 }, ptr %t576 %t578 = extractvalue { ptr, i64, i64 } %t577, 1 %t579 = icmp uge i64 0, %t578 - br i1 %t579, label %range3015, label %inrange3016 -range3015: + br i1 %t579, label %range3019, label %inrange3020 +range3019: call void @finch_panic_index(ptr @.str.1923, i64 1206, i64 0, i64 %t578) unreachable -inrange3016: +inrange3020: %t580 = extractvalue { ptr, i64, i64 } %t577, 0 %t581 = getelementptr inbounds i64, ptr %t580, i64 0 %t582 = load i64, ptr %t581 @@ -34367,12 +34393,12 @@ inrange3016: %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i32 0, i32 1 %t606 = load i64, ptr %t605 store i64 0, ptr %a607 - br label %for.cond3017 -for.cond3017: + br label %for.cond3021 +for.cond3021: %t608 = load i64, ptr %a607 %t609 = icmp slt i64 %t608, %t606 - br i1 %t609, label %for.body3018, label %for.end3020 -for.body3018: + br i1 %t609, label %for.body3022, label %for.end3024 +for.body3022: %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a603, i32 0, i32 1 %t611 = load ptr, ptr %a1 %t612 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t611, { ptr, i64, i64 } { ptr @.str.1926, i64 5, i64 0 }) @@ -34403,11 +34429,11 @@ for.body3018: %t632 = load { ptr, i64, i64 }, ptr %a603 %t633 = extractvalue { ptr, i64, i64 } %t632, 1 %t634 = icmp uge i64 %t631, %t633 - br i1 %t634, label %range3021, label %inrange3022 -range3021: + br i1 %t634, label %range3025, label %inrange3026 +range3025: call void @finch_panic_index(ptr @.str.1929, i64 1213, i64 %t631, i64 %t633) unreachable -inrange3022: +inrange3026: %t635 = extractvalue { ptr, i64, i64 } %t632, 0 %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t631 %t637 = load { ptr, i64, i64 }, ptr %t636 @@ -34424,13 +34450,13 @@ inrange3022: %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t645, i64 %t643 store { ptr, i64, i64 } %t642, ptr %t646 store i64 %t644, ptr %t617 - br label %for.step3019 -for.step3019: + br label %for.step3023 +for.step3023: %t647 = load i64, ptr %a607 %t648 = add i64 %t647, 1 store i64 %t648, ptr %a607 - br label %for.cond3017 -for.end3020: + br label %for.cond3021 +for.end3024: %t649 = load ptr, ptr %a1 %t650 = load { ptr, i64, i64 }, ptr %a595 store { ptr, i64, i64 } { ptr @.str.1930, i64 11, i64 0 }, ptr %a652 @@ -34479,33 +34505,33 @@ for.end3020: call void @finch_str_drop(ptr %a686) %t687 = load ptr, ptr %a1 %t688 = icmp eq ptr %t687, null - br i1 %t688, label %panic3023, label %ok3024 -panic3023: + br i1 %t688, label %panic3027, label %ok3028 +panic3027: call void @finch_panic(ptr @.str.1935, i64 1216, ptr @.str.1936) unreachable -ok3024: +ok3028: %t689 = getelementptr inbounds %S.gen.Gen, ptr %t687, i32 0, i32 9 store i1 true, ptr %t689 %t690 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %t690, i32 0, i32 1 %t692 = load i64, ptr %t691 store i64 0, ptr %a693 - br label %for.cond3025 -for.cond3025: + br label %for.cond3029 +for.cond3029: %t694 = load i64, ptr %a693 %t695 = icmp slt i64 %t694, %t692 - br i1 %t695, label %for.body3026, label %for.end3028 -for.body3026: + br i1 %t695, label %for.body3030, label %for.end3032 +for.body3030: %t696 = load ptr, ptr %a1 %t697 = load i64, ptr %a693 %t698 = load { ptr, i64, i64 }, ptr %a603 %t699 = extractvalue { ptr, i64, i64 } %t698, 1 %t700 = icmp uge i64 %t697, %t699 - br i1 %t700, label %range3029, label %inrange3030 -range3029: + br i1 %t700, label %range3033, label %inrange3034 +range3033: call void @finch_panic_index(ptr @.str.1937, i64 1218, i64 %t697, i64 %t699) unreachable -inrange3030: +inrange3034: %t701 = extractvalue { ptr, i64, i64 } %t698, 0 %t702 = getelementptr inbounds { ptr, i64, i64 }, ptr %t701, i64 %t697 %t703 = load { ptr, i64, i64 }, ptr %t702 @@ -34516,11 +34542,11 @@ inrange3030: %t707 = load { ptr, i64, i64 }, ptr %t705 %t708 = extractvalue { ptr, i64, i64 } %t707, 1 %t709 = icmp uge i64 %t706, %t708 - br i1 %t709, label %range3031, label %inrange3032 -range3031: + br i1 %t709, label %range3035, label %inrange3036 +range3035: call void @finch_panic_index(ptr @.str.1939, i64 1219, i64 %t706, i64 %t708) unreachable -inrange3032: +inrange3036: %t710 = extractvalue { ptr, i64, i64 } %t707, 0 %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i64 %t706 %t712 = load { ptr, i64, i64 }, ptr %t711 @@ -34530,17 +34556,17 @@ inrange3032: %t715 = load { ptr, i64, i64 }, ptr %t713 %t716 = extractvalue { ptr, i64, i64 } %t715, 1 %t717 = icmp uge i64 %t714, %t716 - br i1 %t717, label %range3033, label %inrange3034 -range3033: + br i1 %t717, label %range3037, label %inrange3038 +range3037: call void @finch_panic_index(ptr @.str.1940, i64 1220, i64 %t714, i64 %t716) unreachable -inrange3034: +inrange3038: %t718 = extractvalue { ptr, i64, i64 } %t715, 0 %t719 = getelementptr inbounds i64, ptr %t718, i64 %t714 %t720 = load i64, ptr %t719 %t721 = icmp sgt i64 %t720, 0 - br i1 %t721, label %then3035, label %endif3037 -then3035: + br i1 %t721, label %then3039, label %endif3041 +then3039: %t722 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t722, { ptr, i64, i64 } { ptr @.str.1941, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1942, i64 1, i64 0 }) %t723 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 @@ -34548,39 +34574,39 @@ then3035: %t725 = load { ptr, i64, i64 }, ptr %t723 %t726 = extractvalue { ptr, i64, i64 } %t725, 1 %t727 = icmp uge i64 %t724, %t726 - br i1 %t727, label %range3038, label %inrange3039 -range3038: + br i1 %t727, label %range3042, label %inrange3043 +range3042: call void @finch_panic_index(ptr @.str.1943, i64 1222, i64 %t724, i64 %t726) unreachable -inrange3039: +inrange3043: %t728 = extractvalue { ptr, i64, i64 } %t725, 0 %t729 = getelementptr inbounds i64, ptr %t728, i64 %t724 %t730 = load i64, ptr %t729 store i64 0, ptr %a731 - br label %for.cond3040 -for.cond3040: + br label %for.cond3044 +for.cond3044: %t732 = load i64, ptr %a731 %t733 = icmp slt i64 %t732, %t730 - br i1 %t733, label %for.body3041, label %for.end3043 -for.body3041: + br i1 %t733, label %for.body3045, label %for.end3047 +for.body3045: %t734 = load i64, ptr %a731 %t735 = icmp sgt i64 %t734, 0 - br i1 %t735, label %then3044, label %endif3046 -then3044: + br i1 %t735, label %then3048, label %endif3050 +then3048: %t736 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t736, { ptr, i64, i64 } { ptr @.str.1944, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1945, i64 2, i64 0 }) - br label %endif3046 -endif3046: + br label %endif3050 +endif3050: %t737 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 4 %t738 = load i64, ptr %a693 %t739 = load { ptr, i64, i64 }, ptr %t737 %t740 = extractvalue { ptr, i64, i64 } %t739, 1 %t741 = icmp uge i64 %t738, %t740 - br i1 %t741, label %range3047, label %inrange3048 -range3047: + br i1 %t741, label %range3051, label %inrange3052 +range3051: call void @finch_panic_index(ptr @.str.1946, i64 1226, i64 %t738, i64 %t740) unreachable -inrange3048: +inrange3052: %t742 = extractvalue { ptr, i64, i64 } %t739, 0 %t743 = getelementptr inbounds i64, ptr %t742, i64 %t738 %t744 = load i64, ptr %t743 @@ -34604,11 +34630,11 @@ inrange3048: %t761 = load { ptr, i64, i64 }, ptr %t759 %t762 = extractvalue { ptr, i64, i64 } %t761, 1 %t763 = icmp uge i64 %t760, %t762 - br i1 %t763, label %range3049, label %inrange3050 -range3049: + br i1 %t763, label %range3053, label %inrange3054 +range3053: call void @finch_panic_index(ptr @.str.1949, i64 1227, i64 %t760, i64 %t762) unreachable -inrange3050: +inrange3054: %t764 = extractvalue { ptr, i64, i64 } %t761, 0 %t765 = getelementptr inbounds i64, ptr %t764, i64 %t760 %t766 = load i64, ptr %t765 @@ -34634,11 +34660,11 @@ inrange3050: %t783 = load { ptr, i64, i64 }, ptr %t781 %t784 = extractvalue { ptr, i64, i64 } %t783, 1 %t785 = icmp uge i64 %t782, %t784 - br i1 %t785, label %range3051, label %inrange3052 -range3051: + br i1 %t785, label %range3055, label %inrange3056 +range3055: call void @finch_panic_index(ptr @.str.1951, i64 1228, i64 %t782, i64 %t784) unreachable -inrange3052: +inrange3056: %t786 = extractvalue { ptr, i64, i64 } %t783, 0 %t787 = getelementptr inbounds %S.ast.Type, ptr %t786, i64 %t782 %t788 = load %S.ast.Type, ptr %t787 @@ -34652,11 +34678,11 @@ inrange3052: %t795 = load { ptr, i64, i64 }, ptr %t793 %t796 = extractvalue { ptr, i64, i64 } %t795, 1 %t797 = icmp uge i64 %t794, %t796 - br i1 %t797, label %range3053, label %inrange3054 -range3053: + br i1 %t797, label %range3057, label %inrange3058 +range3057: call void @finch_panic_index(ptr @.str.1952, i64 1228, i64 %t794, i64 %t796) unreachable -inrange3054: +inrange3058: %t798 = extractvalue { ptr, i64, i64 } %t795, 0 %t799 = getelementptr inbounds %S.ast.Type, ptr %t798, i64 %t794 %t800 = load %S.ast.Type, ptr %t799 @@ -34664,27 +34690,27 @@ inrange3054: store { ptr, i64, i64 } %t791, ptr %a801 call void @finch_str_drop(ptr %a801) call void @finch_str_drop(ptr %a777) - br label %for.step3042 -for.step3042: + br label %for.step3046 +for.step3046: %t802 = load i64, ptr %a731 %t803 = add i64 %t802, 1 store i64 %t803, ptr %a731 - br label %for.cond3040 -for.end3043: + br label %for.cond3044 +for.end3047: %t804 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t804, { ptr, i64, i64 } { ptr @.str.1953, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1954, i64 1, i64 0 }) - br label %endif3037 -endif3037: + br label %endif3041 +endif3041: %t805 = load ptr, ptr %a1 %t806 = load { ptr, i64, i64 }, ptr %a601 call void @finch.gen.br(ptr %t805, { ptr, i64, i64 } %t806) - br label %for.step3027 -for.step3027: + br label %for.step3031 +for.step3031: %t807 = load i64, ptr %a693 %t808 = add i64 %t807, 1 store i64 %t808, ptr %a693 - br label %for.cond3025 -for.end3028: + br label %for.cond3029 +for.end3032: %t809 = load ptr, ptr %a1 %t810 = load { ptr, i64, i64 }, ptr %a598 call void @finch.gen.label(ptr %t809, { ptr, i64, i64 } %t810) @@ -34712,15 +34738,15 @@ for.end3028: call void @finch_str_drop(ptr %a563) call void @finch.drop.S_gen_StructDef(ptr %a559) call void @finch.drop.S_gen_SumDef(ptr %a540) - br label %endif3006 -else3005: + br label %endif3010 +else3009: %t823 = load ptr, ptr %a1 %t824 = icmp eq ptr %t823, null - br i1 %t824, label %panic3055, label %ok3056 -panic3055: + br i1 %t824, label %panic3059, label %ok3060 +panic3059: call void @finch_panic(ptr @.str.1957, i64 1239, ptr @.str.1958) unreachable -ok3056: +ok3060: %t825 = getelementptr inbounds %S.gen.Gen, ptr %t823, i32 0, i32 16 %t826 = load ptr, ptr %a1 %t827 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -34731,11 +34757,11 @@ ok3056: %t832 = load { ptr, i64, i64 }, ptr %t825 %t833 = extractvalue { ptr, i64, i64 } %t832, 1 %t834 = icmp uge i64 %t831, %t833 - br i1 %t834, label %range3057, label %inrange3058 -range3057: + br i1 %t834, label %range3061, label %inrange3062 +range3061: call void @finch_panic_index(ptr @.str.1959, i64 1239, i64 %t831, i64 %t833) unreachable -inrange3058: +inrange3062: %t835 = extractvalue { ptr, i64, i64 } %t832, 0 %t836 = getelementptr inbounds %S.gen.StructDef, ptr %t835, i64 %t831 %t837 = load %S.gen.StructDef, ptr %t836 @@ -34761,23 +34787,23 @@ inrange3058: %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i32 0, i32 1 %t856 = load i64, ptr %t855 store i64 0, ptr %a857 - br label %for.cond3059 -for.cond3059: + br label %for.cond3063 +for.cond3063: %t858 = load i64, ptr %a857 %t859 = icmp slt i64 %t858, %t856 - br i1 %t859, label %for.body3060, label %for.end3062 -for.body3060: + br i1 %t859, label %for.body3064, label %for.end3066 +for.body3064: store { ptr, i64, i64 } { ptr @.str.1962, i64 2, i64 0 }, ptr %a860 %t861 = load i64, ptr %a857 %t862 = icmp eq i64 %t861, 0 - br i1 %t862, label %then3063, label %endif3065 -then3063: + br i1 %t862, label %then3067, label %endif3069 +then3067: %t863 = load { ptr, i64, i64 }, ptr %a860 store { ptr, i64, i64 } { ptr @.str.1963, i64 0, i64 0 }, ptr %a860 store { ptr, i64, i64 } %t863, ptr %a864 call void @finch_str_drop(ptr %a864) - br label %endif3065 -endif3065: + br label %endif3069 +endif3069: %t865 = load ptr, ptr %a1 %t866 = load { ptr, i64, i64 }, ptr %a860 %t867 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 11 @@ -34785,11 +34811,11 @@ endif3065: %t869 = load { ptr, i64, i64 }, ptr %t867 %t870 = extractvalue { ptr, i64, i64 } %t869, 1 %t871 = icmp uge i64 %t868, %t870 - br i1 %t871, label %range3066, label %inrange3067 -range3066: + br i1 %t871, label %range3070, label %inrange3071 +range3070: call void @finch_panic_index(ptr @.str.1965, i64 1247, i64 %t868, i64 %t870) unreachable -inrange3067: +inrange3071: %t872 = extractvalue { ptr, i64, i64 } %t869, 0 %t873 = getelementptr inbounds { ptr, i64, i64 }, ptr %t872, i64 %t868 %t874 = load { ptr, i64, i64 }, ptr %t873 @@ -34823,11 +34849,11 @@ inrange3067: %t898 = load { ptr, i64, i64 }, ptr %t896 %t899 = extractvalue { ptr, i64, i64 } %t898, 1 %t900 = icmp uge i64 %t897, %t899 - br i1 %t900, label %range3068, label %inrange3069 -range3068: + br i1 %t900, label %range3072, label %inrange3073 +range3072: call void @finch_panic_index(ptr @.str.1969, i64 1248, i64 %t897, i64 %t899) unreachable -inrange3069: +inrange3073: %t901 = extractvalue { ptr, i64, i64 } %t898, 0 %t902 = getelementptr inbounds i64, ptr %t901, i64 %t897 %t903 = load i64, ptr %t902 @@ -34853,11 +34879,11 @@ inrange3069: %t920 = load { ptr, i64, i64 }, ptr %t918 %t921 = extractvalue { ptr, i64, i64 } %t920, 1 %t922 = icmp uge i64 %t919, %t921 - br i1 %t922, label %range3070, label %inrange3071 -range3070: + br i1 %t922, label %range3074, label %inrange3075 +range3074: call void @finch_panic_index(ptr @.str.1971, i64 1249, i64 %t919, i64 %t921) unreachable -inrange3071: +inrange3075: %t923 = extractvalue { ptr, i64, i64 } %t920, 0 %t924 = getelementptr inbounds %S.ast.Type, ptr %t923, i64 %t919 %t925 = load %S.ast.Type, ptr %t924 @@ -34871,11 +34897,11 @@ inrange3071: %t932 = load { ptr, i64, i64 }, ptr %t930 %t933 = extractvalue { ptr, i64, i64 } %t932, 1 %t934 = icmp uge i64 %t931, %t933 - br i1 %t934, label %range3072, label %inrange3073 -range3072: + br i1 %t934, label %range3076, label %inrange3077 +range3076: call void @finch_panic_index(ptr @.str.1972, i64 1249, i64 %t931, i64 %t933) unreachable -inrange3073: +inrange3077: %t935 = extractvalue { ptr, i64, i64 } %t932, 0 %t936 = getelementptr inbounds %S.ast.Type, ptr %t935, i64 %t931 %t937 = load %S.ast.Type, ptr %t936 @@ -34884,25 +34910,25 @@ inrange3073: call void @finch_str_drop(ptr %a938) call void @finch_str_drop(ptr %a914) call void @finch_str_drop(ptr %a860) - br label %for.step3061 -for.step3061: + br label %for.step3065 +for.step3065: %t939 = load i64, ptr %a857 %t940 = add i64 %t939, 1 store i64 %t940, ptr %a857 - br label %for.cond3059 -for.end3062: + br label %for.cond3063 +for.end3066: %t941 = load ptr, ptr %a1 call void @finch.gen.bufText(ptr %t941, { ptr, i64, i64 } { ptr @.str.1973, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1974, i64 1, i64 0 }) call void @finch_str_drop(ptr %a845) call void @finch.drop.S_gen_StructDef(ptr %a841) - br label %endif3006 -endif3006: - br label %endif2989 -endif2989: - br label %endif2964 -endif2964: - br label %endif2955 -endif2955: + br label %endif3010 +endif3010: + br label %endif2993 +endif2993: + br label %endif2968 +endif2968: + br label %endif2959 +endif2959: %t942 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t942, { ptr, i64, i64 } { ptr @.str.1975, i64 8, i64 0 }) %t943 = load ptr, ptr %a1 @@ -35015,19 +35041,19 @@ entry: %t11 = load i64, ptr %a7 %t12 = load i64, ptr %a10 %t13 = icmp eq i64 %t11, %t12 - br i1 %t13, label %then3074, label %endif3076 -then3074: + br i1 %t13, label %then3078, label %endif3080 +then3078: %t14 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t14, ptr %a15 call void @finch_str_copy(ptr %a16, ptr %a15) %t17 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t17 -endif3076: +endif3080: %t18 = load i64, ptr %a10 %t19 = load i64, ptr %a7 %t20 = icmp slt i64 %t18, %t19 - br i1 %t20, label %then3077, label %endif3079 -then3077: + br i1 %t20, label %then3081, label %endif3083 +then3081: %t21 = load ptr, ptr %a1 %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Type, ptr %a3 @@ -35072,11 +35098,11 @@ then3077: store { ptr, i64, i64 } %t54, ptr %a56 call void @finch_str_drop(ptr %a56) ret { ptr, i64, i64 } %t55 -endif3079: +endif3083: %t57 = load %S.ast.Type, ptr %a3 %t58 = call i1 @finch.gen.isSigned(%S.ast.Type %t57) - br i1 %t58, label %then3080, label %endif3082 -then3080: + br i1 %t58, label %then3084, label %endif3086 +then3084: %t59 = load ptr, ptr %a1 %t60 = load ptr, ptr %a1 %t61 = load %S.ast.Type, ptr %a3 @@ -35121,7 +35147,7 @@ then3080: store { ptr, i64, i64 } %t92, ptr %a94 call void @finch_str_drop(ptr %a94) ret { ptr, i64, i64 } %t93 -endif3082: +endif3086: %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = load %S.ast.Type, ptr %a3 @@ -35234,21 +35260,21 @@ entry: store { ptr, i64, i64 } %t8, ptr %a10 %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br i1 %t12, label %then3083, label %endif3085 -then3083: + br i1 %t12, label %then3087, label %endif3089 +then3087: %t13 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t13, ptr %a14 call void @finch_str_copy(ptr %a15, ptr %a14) %t16 = load { ptr, i64, i64 }, ptr %a15 ret { ptr, i64, i64 } %t16 -endif3085: +endif3089: %t17 = load %S.ast.Type, ptr %a4 %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) %t19 = load %S.ast.Type, ptr %a3 %t20 = call i64 @finch.gen.bitsOf(%S.ast.Type %t19) %t21 = icmp sgt i64 %t18, %t20 - br i1 %t21, label %then3086, label %endif3088 -then3086: + br i1 %t21, label %then3090, label %endif3092 +then3090: %t22 = load ptr, ptr %a1 %t23 = load ptr, ptr %a1 %t24 = load %S.ast.Type, ptr %a3 @@ -35293,7 +35319,7 @@ then3086: store { ptr, i64, i64 } %t55, ptr %a57 call void @finch_str_drop(ptr %a57) ret { ptr, i64, i64 } %t56 -endif3088: +endif3092: %t58 = load ptr, ptr %a1 %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Type, ptr %a3 @@ -35396,8 +35422,8 @@ entry: store %S.ast.Type %p3, ptr %a4 %t5 = load %S.ast.Type, ptr %a3 %t6 = call i1 @finch.gen.isSigned(%S.ast.Type %t5) - br i1 %t6, label %then3089, label %endif3091 -then3089: + br i1 %t6, label %then3093, label %endif3095 +then3093: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Type, ptr %a3 @@ -35442,7 +35468,7 @@ then3089: store { ptr, i64, i64 } %t40, ptr %a42 call void @finch_str_drop(ptr %a42) ret { ptr, i64, i64 } %t41 -endif3091: +endif3095: %t43 = load ptr, ptr %a1 %t44 = load ptr, ptr %a1 %t45 = load %S.ast.Type, ptr %a3 @@ -35626,14 +35652,14 @@ entry: %t7 = load %S.ast.Type, ptr %t6 %t8 = load %S.ast.Type, ptr %a3 %t9 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t8) - br i1 %t9, label %then3092, label %endif3094 -then3092: + br i1 %t9, label %then3096, label %endif3098 +then3096: %t10 = load %S.gen.Val, ptr %a2 store %S.gen.Val %t10, ptr %a11 call void @finch.copy.S_gen_Val(ptr %a12, ptr %a11) %t13 = load %S.gen.Val, ptr %a12 ret %S.gen.Val %t13 -endif3094: +endif3098: %t14 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t15 = getelementptr inbounds %S.ast.Type, ptr %t14, i32 0, i32 0 %t16 = load { ptr, i64, i64 }, ptr %t15 @@ -35641,23 +35667,23 @@ endif3094: store { ptr, i64, i64 } { ptr @.str.1999, i64 4, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br label %logic.from3095 -logic.from3095: - br i1 %t20, label %logic.rhs3096, label %logic.end3097 -logic.rhs3096: + br label %logic.from3099 +logic.from3099: + br i1 %t20, label %logic.rhs3100, label %logic.end3101 +logic.rhs3100: %t21 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.2000, i64 3, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br label %logic.rend3098 -logic.rend3098: - br label %logic.end3097 -logic.end3097: - %t27 = phi i1 [ false, %logic.from3095 ], [ %t26, %logic.rend3098 ] - br i1 %t27, label %then3099, label %endif3101 -then3099: + br label %logic.rend3102 +logic.rend3102: + br label %logic.end3101 +logic.end3101: + %t27 = phi i1 [ false, %logic.from3099 ], [ %t26, %logic.rend3102 ] + br i1 %t27, label %then3103, label %endif3105 +then3103: %t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.2001, i64 4, i64 0 }, 0 %t29 = load %S.ast.Type, ptr %a3 store %S.ast.Type %t29, ptr %a30 @@ -35665,7 +35691,7 @@ then3099: %t32 = load %S.ast.Type, ptr %a31 %t33 = insertvalue %S.gen.Val %t28, %S.ast.Type %t32, 1 ret %S.gen.Val %t33 -endif3101: +endif3105: %t34 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t35 = getelementptr inbounds %S.ast.Type, ptr %t34, i32 0, i32 0 %t36 = load { ptr, i64, i64 }, ptr %t35 @@ -35673,50 +35699,50 @@ endif3101: store { ptr, i64, i64 } { ptr @.str.2002, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br label %logic.from3102 -logic.from3102: - br i1 %t40, label %logic.rhs3103, label %logic.end3104 -logic.rhs3103: + br label %logic.from3106 +logic.from3106: + br i1 %t40, label %logic.rhs3107, label %logic.end3108 +logic.rhs3107: %t41 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t42 = load { ptr, i64, i64 }, ptr %t41 store { ptr, i64, i64 } %t42, ptr %a43 store { ptr, i64, i64 } { ptr @.str.2003, i64 3, i64 0 }, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 - br label %logic.rend3105 -logic.rend3105: - br label %logic.end3104 -logic.end3104: - %t47 = phi i1 [ false, %logic.from3102 ], [ %t46, %logic.rend3105 ] - br label %logic.from3106 -logic.from3106: - br i1 %t47, label %logic.rhs3107, label %logic.end3108 -logic.rhs3107: + br label %logic.rend3109 +logic.rend3109: + br label %logic.end3108 +logic.end3108: + %t47 = phi i1 [ false, %logic.from3106 ], [ %t46, %logic.rend3109 ] + br label %logic.from3110 +logic.from3110: + br i1 %t47, label %logic.rhs3111, label %logic.end3112 +logic.rhs3111: %t48 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t49 = getelementptr inbounds %S.ast.Type, ptr %t48, i32 0, i32 1 %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 %t51 = load i64, ptr %t50 %t52 = icmp eq i64 %t51, 0 - br label %logic.from3109 -logic.from3109: - br i1 %t52, label %logic.end3111, label %logic.rhs3110 -logic.rhs3110: + br label %logic.from3113 +logic.from3113: + br i1 %t52, label %logic.end3115, label %logic.rhs3114 +logic.rhs3114: %t53 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = icmp eq i64 %t55, 0 - br label %logic.rend3112 -logic.rend3112: - br label %logic.end3111 -logic.end3111: - %t57 = phi i1 [ true, %logic.from3109 ], [ %t56, %logic.rend3112 ] - br label %logic.rend3113 -logic.rend3113: - br label %logic.end3108 -logic.end3108: - %t58 = phi i1 [ false, %logic.from3106 ], [ %t57, %logic.rend3113 ] - br i1 %t58, label %then3114, label %endif3116 -then3114: + br label %logic.rend3116 +logic.rend3116: + br label %logic.end3115 +logic.end3115: + %t57 = phi i1 [ true, %logic.from3113 ], [ %t56, %logic.rend3116 ] + br label %logic.rend3117 +logic.rend3117: + br label %logic.end3112 +logic.end3112: + %t58 = phi i1 [ false, %logic.from3110 ], [ %t57, %logic.rend3117 ] + br i1 %t58, label %then3118, label %endif3120 +then3118: %t59 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 @@ -35729,42 +35755,42 @@ then3114: %t68 = load %S.ast.Type, ptr %a67 %t69 = insertvalue %S.gen.Val %t64, %S.ast.Type %t68, 1 ret %S.gen.Val %t69 -endif3116: +endif3120: %t70 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t71 = load %S.ast.Type, ptr %t70 %t72 = call i1 @finch.gen.isInt(%S.ast.Type %t71) - br label %logic.from3117 -logic.from3117: - br i1 %t72, label %logic.rhs3118, label %logic.end3119 -logic.rhs3118: + br label %logic.from3121 +logic.from3121: + br i1 %t72, label %logic.rhs3122, label %logic.end3123 +logic.rhs3122: %t73 = load %S.ast.Type, ptr %a3 %t74 = call i1 @finch.gen.isInt(%S.ast.Type %t73) - br label %logic.rend3120 -logic.rend3120: - br label %logic.end3119 -logic.end3119: - %t75 = phi i1 [ false, %logic.from3117 ], [ %t74, %logic.rend3120 ] - br i1 %t75, label %then3121, label %endif3123 -then3121: + br label %logic.rend3124 +logic.rend3124: + br label %logic.end3123 +logic.end3123: + %t75 = phi i1 [ false, %logic.from3121 ], [ %t74, %logic.rend3124 ] + br i1 %t75, label %then3125, label %endif3127 +then3125: %t76 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t77 = load i1, ptr %t76 - br label %logic.from3124 -logic.from3124: - br i1 %t77, label %logic.rhs3125, label %logic.end3126 -logic.rhs3125: + br label %logic.from3128 +logic.from3128: + br i1 %t77, label %logic.rhs3129, label %logic.end3130 +logic.rhs3129: %t78 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 %t80 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t81 = load %S.ast.Type, ptr %t80 %t82 = load %S.ast.Type, ptr %a3 %t83 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t79, %S.ast.Type %t81, %S.ast.Type %t82) - br label %logic.rend3127 -logic.rend3127: - br label %logic.end3126 -logic.end3126: - %t84 = phi i1 [ false, %logic.from3124 ], [ %t83, %logic.rend3127 ] - br i1 %t84, label %then3128, label %endif3130 -then3128: + br label %logic.rend3131 +logic.rend3131: + br label %logic.end3130 +logic.end3130: + %t84 = phi i1 [ false, %logic.from3128 ], [ %t83, %logic.rend3131 ] + br i1 %t84, label %then3132, label %endif3134 +then3132: %t85 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 @@ -35778,13 +35804,13 @@ then3128: %t95 = insertvalue %S.gen.Val %t90, %S.ast.Type %t94, 1 %t96 = insertvalue %S.gen.Val %t95, i1 true, 3 ret %S.gen.Val %t96 -endif3130: +endif3134: %t97 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t98 = load %S.ast.Type, ptr %t97 %t99 = load %S.ast.Type, ptr %a3 %t100 = call i1 @finch.gen.widens(%S.ast.Type %t98, %S.ast.Type %t99) - br i1 %t100, label %then3131, label %endif3133 -then3131: + br i1 %t100, label %then3135, label %endif3137 +then3135: %t101 = load ptr, ptr %a1 %t102 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t103 = load { ptr, i64, i64 }, ptr %t102 @@ -35799,11 +35825,11 @@ then3131: %t112 = load %S.ast.Type, ptr %a111 %t113 = insertvalue %S.gen.Val %t108, %S.ast.Type %t112, 1 ret %S.gen.Val %t113 -endif3133: +endif3137: %t114 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t115 = load i1, ptr %t114 - br i1 %t115, label %then3134, label %endif3136 -then3134: + br i1 %t115, label %then3138, label %endif3140 +then3138: %t116 = load ptr, ptr %a1 %t117 = load %S.ast.Node, ptr %a4 %t118 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 @@ -35831,45 +35857,45 @@ then3134: call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } %t136) store { ptr, i64, i64 } %t136, ptr %a137 call void @finch_str_drop(ptr %a137) - br label %endif3136 -endif3136: - br label %endif3123 -endif3123: + br label %endif3140 +endif3140: + br label %endif3127 +endif3127: %t138 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t139 = load %S.ast.Type, ptr %t138 %t140 = call i1 @finch.gen.isInt(%S.ast.Type %t139) - br label %logic.from3137 -logic.from3137: - br i1 %t140, label %logic.rhs3138, label %logic.end3139 -logic.rhs3138: + br label %logic.from3141 +logic.from3141: + br i1 %t140, label %logic.rhs3142, label %logic.end3143 +logic.rhs3142: %t141 = load %S.ast.Type, ptr %a3 %t142 = call i1 @finch.gen.isFloat(%S.ast.Type %t141) - br label %logic.rend3140 -logic.rend3140: - br label %logic.end3139 -logic.end3139: - %t143 = phi i1 [ false, %logic.from3137 ], [ %t142, %logic.rend3140 ] - br i1 %t143, label %then3141, label %endif3143 -then3141: + br label %logic.rend3144 +logic.rend3144: + br label %logic.end3143 +logic.end3143: + %t143 = phi i1 [ false, %logic.from3141 ], [ %t142, %logic.rend3144 ] + br i1 %t143, label %then3145, label %endif3147 +then3145: %t144 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 %t145 = load i1, ptr %t144 - br label %logic.from3144 -logic.from3144: - br i1 %t145, label %logic.rhs3145, label %logic.end3146 -logic.rhs3145: + br label %logic.from3148 +logic.from3148: + br i1 %t145, label %logic.rhs3149, label %logic.end3150 +logic.rhs3149: %t146 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t147 = load { ptr, i64, i64 }, ptr %t146 store { ptr, i64, i64 } %t147, ptr %a148 store { ptr, i64, i64 } { ptr @.str.2006, i64 5, i64 0 }, ptr %a149 %t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149) %t151 = icmp ne i32 %t150, 0 - br label %logic.rend3147 -logic.rend3147: - br label %logic.end3146 -logic.end3146: - %t152 = phi i1 [ false, %logic.from3144 ], [ %t151, %logic.rend3147 ] - br i1 %t152, label %then3148, label %endif3150 -then3148: + br label %logic.rend3151 +logic.rend3151: + br label %logic.end3150 +logic.end3150: + %t152 = phi i1 [ false, %logic.from3148 ], [ %t151, %logic.rend3151 ] + br i1 %t152, label %then3152, label %endif3154 +then3152: %t153 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t154 = load { ptr, i64, i64 }, ptr %t153 store { ptr, i64, i64 } %t154, ptr %a156 @@ -35884,7 +35910,7 @@ then3148: %t164 = insertvalue %S.gen.Val %t159, %S.ast.Type %t163, 1 %t165 = insertvalue %S.gen.Val %t164, i1 true, 3 ret %S.gen.Val %t165 -endif3150: +endif3154: %t166 = load ptr, ptr %a1 %t167 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t168 = load { ptr, i64, i64 }, ptr %t167 @@ -35899,7 +35925,7 @@ endif3150: %t177 = load %S.ast.Type, ptr %a176 %t178 = insertvalue %S.gen.Val %t173, %S.ast.Type %t177, 1 ret %S.gen.Val %t178 -endif3143: +endif3147: %t179 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i32 0, i32 0 %t181 = load { ptr, i64, i64 }, ptr %t180 @@ -35907,23 +35933,23 @@ endif3143: store { ptr, i64, i64 } { ptr @.str.2008, i64 3, i64 0 }, ptr %a183 %t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183) %t185 = icmp ne i32 %t184, 0 - br label %logic.from3151 -logic.from3151: - br i1 %t185, label %logic.rhs3152, label %logic.end3153 -logic.rhs3152: + br label %logic.from3155 +logic.from3155: + br i1 %t185, label %logic.rhs3156, label %logic.end3157 +logic.rhs3156: %t186 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t187 = load { ptr, i64, i64 }, ptr %t186 store { ptr, i64, i64 } %t187, ptr %a188 store { ptr, i64, i64 } { ptr @.str.2009, i64 5, i64 0 }, ptr %a189 %t190 = call i32 @finch_str_eq(ptr %a188, ptr %a189) %t191 = icmp ne i32 %t190, 0 - br label %logic.rend3154 -logic.rend3154: - br label %logic.end3153 -logic.end3153: - %t192 = phi i1 [ false, %logic.from3151 ], [ %t191, %logic.rend3154 ] - br i1 %t192, label %then3155, label %endif3157 -then3155: + br label %logic.rend3158 +logic.rend3158: + br label %logic.end3157 +logic.end3157: + %t192 = phi i1 [ false, %logic.from3155 ], [ %t191, %logic.rend3158 ] + br i1 %t192, label %then3159, label %endif3161 +then3159: %t193 = load ptr, ptr %a1 %t194 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t195 = load { ptr, i64, i64 }, ptr %t194 @@ -35938,7 +35964,7 @@ then3155: %t204 = load %S.ast.Type, ptr %a203 %t205 = insertvalue %S.gen.Val %t200, %S.ast.Type %t204, 1 ret %S.gen.Val %t205 -endif3157: +endif3161: %t206 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t207 = getelementptr inbounds %S.ast.Type, ptr %t206, i32 0, i32 0 %t208 = load { ptr, i64, i64 }, ptr %t207 @@ -35946,34 +35972,34 @@ endif3157: store { ptr, i64, i64 } { ptr @.str.2010, i64 5, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 - br label %logic.from3158 -logic.from3158: - br i1 %t212, label %logic.rhs3159, label %logic.end3160 -logic.rhs3159: + br label %logic.from3162 +logic.from3162: + br i1 %t212, label %logic.rhs3163, label %logic.end3164 +logic.rhs3163: %t213 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t214 = load { ptr, i64, i64 }, ptr %t213 store { ptr, i64, i64 } %t214, ptr %a215 store { ptr, i64, i64 } { ptr @.str.2011, i64 3, i64 0 }, ptr %a216 %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) %t218 = icmp ne i32 %t217, 0 - br label %logic.rend3161 -logic.rend3161: - br label %logic.end3160 -logic.end3160: - %t219 = phi i1 [ false, %logic.from3158 ], [ %t218, %logic.rend3161 ] - br label %logic.from3162 -logic.from3162: - br i1 %t219, label %logic.rhs3163, label %logic.end3164 -logic.rhs3163: - %t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 - %t221 = load i1, ptr %t220 br label %logic.rend3165 logic.rend3165: br label %logic.end3164 logic.end3164: - %t222 = phi i1 [ false, %logic.from3162 ], [ %t221, %logic.rend3165 ] - br i1 %t222, label %then3166, label %endif3168 -then3166: + %t219 = phi i1 [ false, %logic.from3162 ], [ %t218, %logic.rend3165 ] + br label %logic.from3166 +logic.from3166: + br i1 %t219, label %logic.rhs3167, label %logic.end3168 +logic.rhs3167: + %t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t221 = load i1, ptr %t220 + br label %logic.rend3169 +logic.rend3169: + br label %logic.end3168 +logic.end3168: + %t222 = phi i1 [ false, %logic.from3166 ], [ %t221, %logic.rend3169 ] + br i1 %t222, label %then3170, label %endif3172 +then3170: %t223 = load ptr, ptr %a1 %t224 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 %t225 = load { ptr, i64, i64 }, ptr %t224 @@ -35988,7 +36014,7 @@ then3166: %t234 = load %S.ast.Type, ptr %a233 %t235 = insertvalue %S.gen.Val %t230, %S.ast.Type %t234, 1 ret %S.gen.Val %t235 -endif3168: +endif3172: %t236 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t236, ptr %a238 store { ptr, i64, i64 } { ptr @.str.2012, i64 9, i64 0 }, ptr %a239 @@ -36025,19 +36051,19 @@ endif3168: %t264 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t265 = load %S.ast.Type, ptr %t264 %t266 = call i1 @finch.gen.isNumber(%S.ast.Type %t265) - br label %logic.from3169 -logic.from3169: - br i1 %t266, label %logic.rhs3170, label %logic.end3171 -logic.rhs3170: + br label %logic.from3173 +logic.from3173: + br i1 %t266, label %logic.rhs3174, label %logic.end3175 +logic.rhs3174: %t267 = load %S.ast.Type, ptr %a3 %t268 = call i1 @finch.gen.isNumber(%S.ast.Type %t267) - br label %logic.rend3172 -logic.rend3172: - br label %logic.end3171 -logic.end3171: - %t269 = phi i1 [ false, %logic.from3169 ], [ %t268, %logic.rend3172 ] - br i1 %t269, label %then3173, label %endif3175 -then3173: + br label %logic.rend3176 +logic.rend3176: + br label %logic.end3175 +logic.end3175: + %t269 = phi i1 [ false, %logic.from3173 ], [ %t268, %logic.rend3176 ] + br i1 %t269, label %then3177, label %endif3179 +then3177: %t270 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t270, ptr %a272 store { ptr, i64, i64 } { ptr @.str.2014, i64 6, i64 0 }, ptr %a273 @@ -36066,19 +36092,19 @@ then3173: %t290 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t291 = load %S.ast.Type, ptr %t290 %t292 = call i1 @finch.gen.isFloat(%S.ast.Type %t291) - br label %logic.from3176 -logic.from3176: - br i1 %t292, label %logic.rhs3177, label %logic.end3178 -logic.rhs3177: + br label %logic.from3180 +logic.from3180: + br i1 %t292, label %logic.rhs3181, label %logic.end3182 +logic.rhs3181: %t293 = load %S.ast.Type, ptr %a3 %t294 = call i1 @finch.gen.isInt(%S.ast.Type %t293) - br label %logic.rend3179 -logic.rend3179: - br label %logic.end3178 -logic.end3178: - %t295 = phi i1 [ false, %logic.from3176 ], [ %t294, %logic.rend3179 ] - br i1 %t295, label %then3180, label %endif3182 -then3180: + br label %logic.rend3183 +logic.rend3183: + br label %logic.end3182 +logic.end3182: + %t295 = phi i1 [ false, %logic.from3180 ], [ %t294, %logic.rend3183 ] + br i1 %t295, label %then3184, label %endif3186 +then3184: %t296 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t296, ptr %a298 store { ptr, i64, i64 } { ptr @.str.2016, i64 26, i64 0 }, ptr %a299 @@ -36088,8 +36114,8 @@ then3180: store { ptr, i64, i64 } %t300, ptr %a263 store { ptr, i64, i64 } %t301, ptr %a302 call void @finch_str_drop(ptr %a302) - br label %endif3182 -endif3182: + br label %endif3186 +endif3186: %t303 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t303, ptr %a305 store { ptr, i64, i64 } { ptr @.str.2017, i64 1, i64 0 }, ptr %a306 @@ -36099,25 +36125,25 @@ endif3182: store { ptr, i64, i64 } %t307, ptr %a263 store { ptr, i64, i64 } %t308, ptr %a309 call void @finch_str_drop(ptr %a309) - br label %endif3175 -endif3175: + br label %endif3179 +endif3179: %t310 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t311 = load { ptr, i64, i64 }, ptr %t310 store { ptr, i64, i64 } %t311, ptr %a312 store { ptr, i64, i64 } { ptr @.str.2018, i64 3, i64 0 }, ptr %a313 %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) %t315 = icmp ne i32 %t314, 0 - br label %logic.from3183 -logic.from3183: - br i1 %t315, label %logic.rhs3184, label %logic.end3185 -logic.rhs3184: + br label %logic.from3187 +logic.from3187: + br i1 %t315, label %logic.rhs3188, label %logic.end3189 +logic.rhs3188: %t316 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t317 = load %S.ast.Type, ptr %t316 %t318 = call i1 @finch.gen.isNumber(%S.ast.Type %t317) - br label %logic.from3186 -logic.from3186: - br i1 %t318, label %logic.end3188, label %logic.rhs3187 -logic.rhs3187: + br label %logic.from3190 +logic.from3190: + br i1 %t318, label %logic.end3192, label %logic.rhs3191 +logic.rhs3191: %t319 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t320 = getelementptr inbounds %S.ast.Type, ptr %t319, i32 0, i32 0 %t321 = load { ptr, i64, i64 }, ptr %t320 @@ -36125,15 +36151,15 @@ logic.rhs3187: store { ptr, i64, i64 } { ptr @.str.2019, i64 4, i64 0 }, ptr %a323 %t324 = call i32 @finch_str_eq(ptr %a322, ptr %a323) %t325 = icmp ne i32 %t324, 0 - br label %logic.rend3189 -logic.rend3189: - br label %logic.end3188 -logic.end3188: - %t326 = phi i1 [ true, %logic.from3186 ], [ %t325, %logic.rend3189 ] - br label %logic.from3190 -logic.from3190: - br i1 %t326, label %logic.end3192, label %logic.rhs3191 -logic.rhs3191: + br label %logic.rend3193 +logic.rend3193: + br label %logic.end3192 +logic.end3192: + %t326 = phi i1 [ true, %logic.from3190 ], [ %t325, %logic.rend3193 ] + br label %logic.from3194 +logic.from3194: + br i1 %t326, label %logic.end3196, label %logic.rhs3195 +logic.rhs3195: %t327 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 %t328 = getelementptr inbounds %S.ast.Type, ptr %t327, i32 0, i32 0 %t329 = load { ptr, i64, i64 }, ptr %t328 @@ -36141,18 +36167,18 @@ logic.rhs3191: store { ptr, i64, i64 } { ptr @.str.2020, i64 4, i64 0 }, ptr %a331 %t332 = call i32 @finch_str_eq(ptr %a330, ptr %a331) %t333 = icmp ne i32 %t332, 0 - br label %logic.rend3193 -logic.rend3193: - br label %logic.end3192 -logic.end3192: - %t334 = phi i1 [ true, %logic.from3190 ], [ %t333, %logic.rend3193 ] - br label %logic.rend3194 -logic.rend3194: - br label %logic.end3185 -logic.end3185: - %t335 = phi i1 [ false, %logic.from3183 ], [ %t334, %logic.rend3194 ] - br i1 %t335, label %then3195, label %endif3197 -then3195: + br label %logic.rend3197 +logic.rend3197: + br label %logic.end3196 +logic.end3196: + %t334 = phi i1 [ true, %logic.from3194 ], [ %t333, %logic.rend3197 ] + br label %logic.rend3198 +logic.rend3198: + br label %logic.end3189 +logic.end3189: + %t335 = phi i1 [ false, %logic.from3187 ], [ %t334, %logic.rend3198 ] + br i1 %t335, label %then3199, label %endif3201 +then3199: %t336 = load { ptr, i64, i64 }, ptr %a263 store { ptr, i64, i64 } %t336, ptr %a338 store { ptr, i64, i64 } { ptr @.str.2021, i64 34, i64 0 }, ptr %a339 @@ -36162,8 +36188,8 @@ then3195: store { ptr, i64, i64 } %t340, ptr %a263 store { ptr, i64, i64 } %t341, ptr %a342 call void @finch_str_drop(ptr %a342) - br label %endif3197 -endif3197: + br label %endif3201 +endif3201: %t343 = load ptr, ptr %a1 %t344 = load %S.ast.Node, ptr %a4 %t345 = load { ptr, i64, i64 }, ptr %a263 @@ -36189,28 +36215,28 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic3198, label %ok3199 -panic3198: + br i1 %t4, label %panic3202, label %ok3203 +panic3202: call void @finch_panic(ptr @.str.2022, i64 1346, ptr @.str.2023) unreachable -ok3199: +ok3203: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 - br label %for.cond3200 -for.cond3200: + br label %for.cond3204 +for.cond3204: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 - br i1 %t10, label %for.body3201, label %for.end3203 -for.body3201: + br i1 %t10, label %for.body3205, label %for.end3207 +for.body3205: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic3204, label %ok3205 -panic3204: + br i1 %t12, label %panic3208, label %ok3209 +panic3208: call void @finch_panic(ptr @.str.2024, i64 1347, ptr @.str.2025) unreachable -ok3205: +ok3209: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 10 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 %t15 = load i64, ptr %t14 @@ -36220,50 +36246,50 @@ ok3205: store i64 %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic3206, label %ok3207 -panic3206: + br i1 %t21, label %panic3210, label %ok3211 +panic3210: call void @finch_panic(ptr @.str.2026, i64 1348, ptr @.str.2027) unreachable -ok3207: +ok3211: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 %t23 = load i64, ptr %a19 %t24 = load { ptr, i64, i64 }, ptr %t22 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 - br i1 %t26, label %range3208, label %inrange3209 -range3208: + br i1 %t26, label %range3212, label %inrange3213 +range3212: call void @finch_panic_index(ptr @.str.2028, i64 1348, i64 %t23, i64 %t25) unreachable -inrange3209: +inrange3213: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 store i64 0, ptr %a32 - br label %for.cond3210 -for.cond3210: + br label %for.cond3214 +for.cond3214: %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, %t31 - br i1 %t34, label %for.body3211, label %for.end3213 -for.body3211: + br i1 %t34, label %for.body3215, label %for.end3217 +for.body3215: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic3214, label %ok3215 -panic3214: + br i1 %t36, label %panic3218, label %ok3219 +panic3218: call void @finch_panic(ptr @.str.2029, i64 1349, ptr @.str.2030) unreachable -ok3215: +ok3219: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 10 %t38 = load i64, ptr %a19 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range3216, label %inrange3217 -range3216: + br i1 %t41, label %range3220, label %inrange3221 +range3220: call void @finch_panic_index(ptr @.str.2031, i64 1349, i64 %t38, i64 %t40) unreachable -inrange3217: +inrange3221: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.gen.Scope, ptr %t42, i64 %t38 %t44 = getelementptr inbounds %S.gen.Scope, ptr %t43, i32 0, i32 0 @@ -36271,11 +36297,11 @@ inrange3217: %t46 = load { ptr, i64, i64 }, ptr %t44 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 %t45, %t47 - br i1 %t48, label %range3218, label %inrange3219 -range3218: + br i1 %t48, label %range3222, label %inrange3223 +range3222: call void @finch_panic_index(ptr @.str.2032, i64 1349, i64 %t45, i64 %t47) unreachable -inrange3219: +inrange3223: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.gen.Var, ptr %t49, i64 %t45 %t51 = getelementptr inbounds %S.gen.Var, ptr %t50, i32 0, i32 0 @@ -36285,38 +36311,38 @@ inrange3219: store { ptr, i64, i64 } %t53, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 - br i1 %t57, label %then3220, label %endif3222 -then3220: + br i1 %t57, label %then3224, label %endif3226 +then3224: %t58 = load ptr, ptr %a1 %t59 = icmp eq ptr %t58, null - br i1 %t59, label %panic3223, label %ok3224 -panic3223: + br i1 %t59, label %panic3227, label %ok3228 +panic3227: call void @finch_panic(ptr @.str.2033, i64 1350, ptr @.str.2034) unreachable -ok3224: +ok3228: %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 44 %t61 = load i1, ptr %t60 - br label %logic.from3225 -logic.from3225: - br i1 %t61, label %logic.rhs3226, label %logic.end3227 -logic.rhs3226: + br label %logic.from3229 +logic.from3229: + br i1 %t61, label %logic.rhs3230, label %logic.end3231 +logic.rhs3230: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null - br i1 %t63, label %panic3228, label %ok3229 -panic3228: + br i1 %t63, label %panic3232, label %ok3233 +panic3232: call void @finch_panic(ptr @.str.2035, i64 1350, ptr @.str.2036) unreachable -ok3229: +ok3233: %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 10 %t65 = load i64, ptr %a19 %t66 = load { ptr, i64, i64 }, ptr %t64 %t67 = extractvalue { ptr, i64, i64 } %t66, 1 %t68 = icmp uge i64 %t65, %t67 - br i1 %t68, label %range3230, label %inrange3231 -range3230: + br i1 %t68, label %range3234, label %inrange3235 +range3234: call void @finch_panic_index(ptr @.str.2037, i64 1350, i64 %t65, i64 %t67) unreachable -inrange3231: +inrange3235: %t69 = extractvalue { ptr, i64, i64 } %t66, 0 %t70 = getelementptr inbounds %S.gen.Scope, ptr %t69, i64 %t65 %t71 = getelementptr inbounds %S.gen.Scope, ptr %t70, i32 0, i32 0 @@ -36324,54 +36350,54 @@ inrange3231: %t73 = load { ptr, i64, i64 }, ptr %t71 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 - br i1 %t75, label %range3232, label %inrange3233 -range3232: + br i1 %t75, label %range3236, label %inrange3237 +range3236: call void @finch_panic_index(ptr @.str.2038, i64 1350, i64 %t72, i64 %t74) unreachable -inrange3233: +inrange3237: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.gen.Var, ptr %t76, i64 %t72 %t78 = getelementptr inbounds %S.gen.Var, ptr %t77, i32 0, i32 4 %t79 = load i64, ptr %t78 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null - br i1 %t81, label %panic3234, label %ok3235 -panic3234: + br i1 %t81, label %panic3238, label %ok3239 +panic3238: call void @finch_panic(ptr @.str.2039, i64 1350, ptr @.str.2040) unreachable -ok3235: +ok3239: %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 45 %t83 = load i64, ptr %t82 %t84 = icmp sge i64 %t79, %t83 - br label %logic.rend3236 -logic.rend3236: - br label %logic.end3227 -logic.end3227: - %t85 = phi i1 [ false, %logic.from3225 ], [ %t84, %logic.rend3236 ] - br i1 %t85, label %then3237, label %endif3239 -then3237: - br label %for.step3212 -endif3239: + br label %logic.rend3240 +logic.rend3240: + br label %logic.end3231 +logic.end3231: + %t85 = phi i1 [ false, %logic.from3229 ], [ %t84, %logic.rend3240 ] + br i1 %t85, label %then3241, label %endif3243 +then3241: + br label %for.step3216 +endif3243: %t86 = load i64, ptr %a19 %t87 = mul i64 %t86, 100000 %t88 = load i64, ptr %a32 %t89 = add i64 %t87, %t88 ret i64 %t89 -endif3222: - br label %for.step3212 -for.step3212: +endif3226: + br label %for.step3216 +for.step3216: %t90 = load i64, ptr %a32 %t91 = add i64 %t90, 1 store i64 %t91, ptr %a32 - br label %for.cond3210 -for.end3213: - br label %for.step3202 -for.step3202: + br label %for.cond3214 +for.end3217: + br label %for.step3206 +for.step3206: %t92 = load i64, ptr %a8 %t93 = add i64 %t92, 1 store i64 %t93, ptr %a8 - br label %for.cond3200 -for.end3203: + br label %for.cond3204 +for.end3207: ret i64 -1 } @@ -36405,22 +36431,22 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic3240, label %ok3241 -panic3240: + br i1 %t4, label %panic3244, label %ok3245 +panic3244: call void @finch_panic(ptr @.str.2041, i64 1361, ptr @.str.2042) unreachable -ok3241: +ok3245: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = load i64, ptr %a2 %t7 = sdiv i64 %t6, 100000 %t8 = load { ptr, i64, i64 }, ptr %t5 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range3242, label %inrange3243 -range3242: + br i1 %t10, label %range3246, label %inrange3247 +range3246: call void @finch_panic_index(ptr @.str.2043, i64 1361, i64 %t7, i64 %t9) unreachable -inrange3243: +inrange3247: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i64 %t7 %t13 = getelementptr inbounds %S.gen.Scope, ptr %t12, i32 0, i32 0 @@ -36429,11 +36455,11 @@ inrange3243: %t16 = load { ptr, i64, i64 }, ptr %t13 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range3244, label %inrange3245 -range3244: + br i1 %t18, label %range3248, label %inrange3249 +range3248: call void @finch_panic_index(ptr @.str.2044, i64 1361, i64 %t15, i64 %t17) unreachable -inrange3245: +inrange3249: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.Var, ptr %t19, i64 %t15 %t21 = load %S.gen.Var, ptr %t20 @@ -36458,38 +36484,38 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic3246, label %ok3247 -panic3246: + br i1 %t5, label %panic3250, label %ok3251 +panic3250: call void @finch_panic(ptr @.str.2045, i64 1365, ptr @.str.2046) unreachable -ok3247: +ok3251: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load i64, ptr %t7 store i64 0, ptr %a9 - br label %for.cond3248 -for.cond3248: + br label %for.cond3252 +for.cond3252: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t8 - br i1 %t11, label %for.body3249, label %for.end3251 -for.body3249: + br i1 %t11, label %for.body3253, label %for.end3255 +for.body3253: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic3252, label %ok3253 -panic3252: + br i1 %t13, label %panic3256, label %ok3257 +panic3256: call void @finch_panic(ptr @.str.2047, i64 1366, ptr @.str.2048) unreachable -ok3253: +ok3257: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 15 %t15 = load i64, ptr %a9 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range3254, label %inrange3255 -range3254: + br i1 %t18, label %range3258, label %inrange3259 +range3258: call void @finch_panic_index(ptr @.str.2049, i64 1366, i64 %t15, i64 %t17) unreachable -inrange3255: +inrange3259: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i64 %t15 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i32 0, i32 0 @@ -36499,27 +36525,27 @@ inrange3255: store { ptr, i64, i64 } %t23, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from3256 -logic.from3256: - br i1 %t27, label %logic.rhs3257, label %logic.end3258 -logic.rhs3257: + br label %logic.from3260 +logic.from3260: + br i1 %t27, label %logic.rhs3261, label %logic.end3262 +logic.rhs3261: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic3259, label %ok3260 -panic3259: + br i1 %t29, label %panic3263, label %ok3264 +panic3263: call void @finch_panic(ptr @.str.2050, i64 1366, ptr @.str.2051) unreachable -ok3260: +ok3264: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 15 %t31 = load i64, ptr %a9 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range3261, label %inrange3262 -range3261: + br i1 %t34, label %range3265, label %inrange3266 +range3265: call void @finch_panic_index(ptr @.str.2052, i64 1366, i64 %t31, i64 %t33) unreachable -inrange3262: +inrange3266: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 1 @@ -36529,55 +36555,55 @@ inrange3262: store { ptr, i64, i64 } %t39, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend3263 -logic.rend3263: - br label %logic.end3258 -logic.end3258: - %t44 = phi i1 [ false, %logic.from3256 ], [ %t43, %logic.rend3263 ] - br label %logic.from3264 -logic.from3264: - br i1 %t44, label %logic.rhs3265, label %logic.end3266 -logic.rhs3265: + br label %logic.rend3267 +logic.rend3267: + br label %logic.end3262 +logic.end3262: + %t44 = phi i1 [ false, %logic.from3260 ], [ %t43, %logic.rend3267 ] + br label %logic.from3268 +logic.from3268: + br i1 %t44, label %logic.rhs3269, label %logic.end3270 +logic.rhs3269: %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null - br i1 %t46, label %panic3267, label %ok3268 -panic3267: + br i1 %t46, label %panic3271, label %ok3272 +panic3271: call void @finch_panic(ptr @.str.2053, i64 1366, ptr @.str.2054) unreachable -ok3268: +ok3272: %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 15 %t48 = load i64, ptr %a9 %t49 = load { ptr, i64, i64 }, ptr %t47 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 %t48, %t50 - br i1 %t51, label %range3269, label %inrange3270 -range3269: + br i1 %t51, label %range3273, label %inrange3274 +range3273: call void @finch_panic_index(ptr @.str.2055, i64 1366, i64 %t48, i64 %t50) unreachable -inrange3270: +inrange3274: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds %S.gen.FnSig, ptr %t52, i64 %t48 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 2 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = icmp eq i64 %t56, 0 - br label %logic.rend3271 -logic.rend3271: - br label %logic.end3266 -logic.end3266: - %t58 = phi i1 [ false, %logic.from3264 ], [ %t57, %logic.rend3271 ] - br i1 %t58, label %then3272, label %endif3274 -then3272: + br label %logic.rend3275 +logic.rend3275: + br label %logic.end3270 +logic.end3270: + %t58 = phi i1 [ false, %logic.from3268 ], [ %t57, %logic.rend3275 ] + br i1 %t58, label %then3276, label %endif3278 +then3276: %t59 = load i64, ptr %a9 ret i64 %t59 -endif3274: - br label %for.step3250 -for.step3250: +endif3278: + br label %for.step3254 +for.step3254: %t60 = load i64, ptr %a9 %t61 = add i64 %t60, 1 store i64 %t61, ptr %a9 - br label %for.cond3248 -for.end3251: + br label %for.cond3252 +for.end3255: ret i64 -1 } @@ -36600,38 +36626,38 @@ entry: store { ptr, i64, i64 } %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic3275, label %ok3276 -panic3275: + br i1 %t6, label %panic3279, label %ok3280 +panic3279: call void @finch_panic(ptr @.str.2056, i64 1374, ptr @.str.2057) unreachable -ok3276: +ok3280: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 15 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 %t9 = load i64, ptr %t8 store i64 0, ptr %a10 - br label %for.cond3277 -for.cond3277: + br label %for.cond3281 +for.cond3281: %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, %t9 - br i1 %t12, label %for.body3278, label %for.end3280 -for.body3278: + br i1 %t12, label %for.body3282, label %for.end3284 +for.body3282: %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic3281, label %ok3282 -panic3281: + br i1 %t14, label %panic3285, label %ok3286 +panic3285: call void @finch_panic(ptr @.str.2058, i64 1375, ptr @.str.2059) unreachable -ok3282: +ok3286: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 15 %t16 = load i64, ptr %a10 %t17 = load { ptr, i64, i64 }, ptr %t15 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 - br i1 %t19, label %range3283, label %inrange3284 -range3283: + br i1 %t19, label %range3287, label %inrange3288 +range3287: call void @finch_panic_index(ptr @.str.2060, i64 1375, i64 %t16, i64 %t18) unreachable -inrange3284: +inrange3288: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.gen.FnSig, ptr %t21, i32 0, i32 3 @@ -36641,27 +36667,27 @@ inrange3284: store { ptr, i64, i64 } %t24, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br label %logic.from3285 -logic.from3285: - br i1 %t28, label %logic.rhs3286, label %logic.end3287 -logic.rhs3286: + br label %logic.from3289 +logic.from3289: + br i1 %t28, label %logic.rhs3290, label %logic.end3291 +logic.rhs3290: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic3288, label %ok3289 -panic3288: + br i1 %t30, label %panic3292, label %ok3293 +panic3292: call void @finch_panic(ptr @.str.2061, i64 1375, ptr @.str.2062) unreachable -ok3289: +ok3293: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 15 %t32 = load i64, ptr %a10 %t33 = load { ptr, i64, i64 }, ptr %t31 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range3290, label %inrange3291 -range3290: + br i1 %t35, label %range3294, label %inrange3295 +range3294: call void @finch_panic_index(ptr @.str.2063, i64 1375, i64 %t32, i64 %t34) unreachable -inrange3291: +inrange3295: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i64 %t32 %t38 = getelementptr inbounds %S.gen.FnSig, ptr %t37, i32 0, i32 2 @@ -36671,32 +36697,32 @@ inrange3291: store { ptr, i64, i64 } %t40, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br label %logic.rend3292 -logic.rend3292: - br label %logic.end3287 -logic.end3287: - %t45 = phi i1 [ false, %logic.from3285 ], [ %t44, %logic.rend3292 ] - br label %logic.from3293 -logic.from3293: - br i1 %t45, label %logic.rhs3294, label %logic.end3295 -logic.rhs3294: + br label %logic.rend3296 +logic.rend3296: + br label %logic.end3291 +logic.end3291: + %t45 = phi i1 [ false, %logic.from3289 ], [ %t44, %logic.rend3296 ] + br label %logic.from3297 +logic.from3297: + br i1 %t45, label %logic.rhs3298, label %logic.end3299 +logic.rhs3298: %t46 = load ptr, ptr %a1 %t47 = icmp eq ptr %t46, null - br i1 %t47, label %panic3296, label %ok3297 -panic3296: + br i1 %t47, label %panic3300, label %ok3301 +panic3300: call void @finch_panic(ptr @.str.2064, i64 1375, ptr @.str.2065) unreachable -ok3297: +ok3301: %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 15 %t49 = load i64, ptr %a10 %t50 = load { ptr, i64, i64 }, ptr %t48 %t51 = extractvalue { ptr, i64, i64 } %t50, 1 %t52 = icmp uge i64 %t49, %t51 - br i1 %t52, label %range3298, label %inrange3299 -range3298: + br i1 %t52, label %range3302, label %inrange3303 +range3302: call void @finch_panic_index(ptr @.str.2066, i64 1375, i64 %t49, i64 %t51) unreachable -inrange3299: +inrange3303: %t53 = extractvalue { ptr, i64, i64 } %t50, 0 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i64 %t49 %t55 = getelementptr inbounds %S.gen.FnSig, ptr %t54, i32 0, i32 1 @@ -36706,23 +36732,23 @@ inrange3299: store { ptr, i64, i64 } %t57, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br label %logic.rend3300 -logic.rend3300: - br label %logic.end3295 -logic.end3295: - %t62 = phi i1 [ false, %logic.from3293 ], [ %t61, %logic.rend3300 ] - br i1 %t62, label %then3301, label %endif3303 -then3301: + br label %logic.rend3304 +logic.rend3304: + br label %logic.end3299 +logic.end3299: + %t62 = phi i1 [ false, %logic.from3297 ], [ %t61, %logic.rend3304 ] + br i1 %t62, label %then3305, label %endif3307 +then3305: %t63 = load i64, ptr %a10 ret i64 %t63 -endif3303: - br label %for.step3279 -for.step3279: +endif3307: + br label %for.step3283 +for.step3283: %t64 = load i64, ptr %a10 %t65 = add i64 %t64, 1 store i64 %t65, ptr %a10 - br label %for.cond3277 -for.end3280: + br label %for.cond3281 +for.end3284: ret i64 -1 } @@ -36803,27 +36829,27 @@ entry: %t39 = load i64, ptr %t36 %t40 = load ptr, ptr %a35 store i64 0, ptr %a41 - br label %find.cond3304 -find.cond3304: + br label %find.cond3308 +find.cond3308: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t39 - br i1 %t43, label %find.body3305, label %find.end3308 -find.body3305: + br i1 %t43, label %find.body3309, label %find.end3312 +find.body3309: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t42 %t45 = load { ptr, i64, i64 }, ptr %t44 store { ptr, i64, i64 } %t45, ptr %a46 store { ptr, i64, i64 } %t37, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 - br i1 %t49, label %find.hit3306, label %find.next3307 -find.hit3306: + br i1 %t49, label %find.hit3310, label %find.next3311 +find.hit3310: store i64 %t42, ptr %a38 - br label %find.end3308 -find.next3307: + br label %find.end3312 +find.next3311: %t50 = add i64 %t42, 1 store i64 %t50, ptr %a41 - br label %find.cond3304 -find.end3308: + br label %find.cond3308 +find.end3312: %t51 = load i64, ptr %a38 %t52 = icmp sge i64 %t51, 0 call void @finch.drop.arr_str(ptr %a35) @@ -36982,22 +37008,22 @@ entry: %t9 = load { ptr, i64, i64 }, ptr %a3 %t10 = call i64 @finch.gen.lookup(ptr %t8, { ptr, i64, i64 } %t9) %t11 = icmp sge i64 %t10, 0 - br label %logic.from3309 -logic.from3309: - br i1 %t11, label %logic.rhs3310, label %logic.end3311 -logic.rhs3310: + br label %logic.from3313 +logic.from3313: + br i1 %t11, label %logic.rhs3314, label %logic.end3315 +logic.rhs3314: %t12 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.2095, i64 3, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp eq i32 %t15, 0 - br label %logic.rend3312 -logic.rend3312: - br label %logic.end3311 -logic.end3311: - %t17 = phi i1 [ false, %logic.from3309 ], [ %t16, %logic.rend3312 ] - br i1 %t17, label %then3313, label %endif3315 -then3313: + br label %logic.rend3316 +logic.rend3316: + br label %logic.end3315 +logic.end3315: + %t17 = phi i1 [ false, %logic.from3313 ], [ %t16, %logic.rend3316 ] + br i1 %t17, label %then3317, label %endif3319 +then3317: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 %t20 = load { ptr, i64, i64 }, ptr %a3 @@ -37014,23 +37040,23 @@ then3313: call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } %t29) store { ptr, i64, i64 } %t29, ptr %a30 call void @finch_str_drop(ptr %a30) - br label %endif3315 -endif3315: + br label %endif3319 +endif3319: %t31 = load ptr, ptr %a1 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic3316, label %ok3317 -panic3316: + br i1 %t33, label %panic3320, label %ok3321 +panic3320: call void @finch_panic(ptr @.str.2098, i64 1393, ptr @.str.2099) unreachable -ok3317: +ok3321: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 14 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = load { ptr, i64, i64 }, ptr %a3 %t37 = call i64 @finch.gen.findFn(ptr %t31, { ptr, i64, i64 } %t35, { ptr, i64, i64 } %t36) %t38 = icmp sge i64 %t37, 0 - br i1 %t38, label %then3318, label %endif3320 -then3318: + br i1 %t38, label %then3322, label %endif3324 +then3322: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 %t41 = load { ptr, i64, i64 }, ptr %a3 @@ -37047,12 +37073,12 @@ then3318: call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t50) store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %endif3320 -endif3320: + br label %endif3324 +endif3324: %t52 = load { ptr, i64, i64 }, ptr %a3 %t53 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t52) - br i1 %t53, label %then3321, label %endif3323 -then3321: + br i1 %t53, label %then3325, label %endif3327 +then3325: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a2 %t56 = load { ptr, i64, i64 }, ptr %a3 @@ -37069,8 +37095,8 @@ then3321: call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } %t65) store { ptr, i64, i64 } %t65, ptr %a66 call void @finch_str_drop(ptr %a66) - br label %endif3323 -endif3323: + br label %endif3327 +endif3327: %t67 = load ptr, ptr %a1 %t68 = load ptr, ptr %a1 %t69 = load %S.ast.Type, ptr %a4 @@ -37090,50 +37116,50 @@ endif3323: call void @finch_str_drop(ptr %a80) %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic3324, label %ok3325 -panic3324: + br i1 %t82, label %panic3328, label %ok3329 +panic3328: call void @finch_panic(ptr @.str.2104, i64 1401, ptr @.str.2105) unreachable -ok3325: +ok3329: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 10 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 %t85 = load i64, ptr %t84 %t86 = sub i64 %t85, 1 store i64 %t86, ptr %a87 %t88 = load i1, ptr %a7 - br label %logic.from3326 -logic.from3326: - br i1 %t88, label %logic.rhs3327, label %logic.end3328 -logic.rhs3327: + br label %logic.from3330 +logic.from3330: + br i1 %t88, label %logic.rhs3331, label %logic.end3332 +logic.rhs3331: %t89 = load ptr, ptr %a1 %t90 = load %S.ast.Type, ptr %a4 %t91 = call i1 @finch.gen.owning(ptr %t89, %S.ast.Type %t90) - br label %logic.rend3329 -logic.rend3329: - br label %logic.end3328 -logic.end3328: - %t92 = phi i1 [ false, %logic.from3326 ], [ %t91, %logic.rend3329 ] + br label %logic.rend3333 +logic.rend3333: + br label %logic.end3332 +logic.end3332: + %t92 = phi i1 [ false, %logic.from3330 ], [ %t91, %logic.rend3333 ] store i1 %t92, ptr %a93 %t94 = load i1, ptr %a93 - br i1 %t94, label %then3330, label %endif3332 -then3330: + br i1 %t94, label %then3334, label %endif3336 +then3334: %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic3333, label %ok3334 -panic3333: + br i1 %t96, label %panic3337, label %ok3338 +panic3337: call void @finch_panic(ptr @.str.2106, i64 1404, ptr @.str.2107) unreachable -ok3334: +ok3338: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 10 %t98 = load i64, ptr %a87 %t99 = load { ptr, i64, i64 }, ptr %t97 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 %t98, %t100 - br i1 %t101, label %range3335, label %inrange3336 -range3335: + br i1 %t101, label %range3339, label %inrange3340 +range3339: call void @finch_panic_index(ptr @.str.2108, i64 1404, i64 %t98, i64 %t100) unreachable -inrange3336: +inrange3340: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.gen.Scope, ptr %t102, i64 %t98 %t104 = getelementptr inbounds %S.gen.Scope, ptr %t103, i32 0, i32 3 @@ -37141,21 +37167,21 @@ inrange3336: %t106 = insertvalue %S.gen.Cleanup zeroinitializer, i1 false, 0 %t107 = load ptr, ptr %a1 %t108 = icmp eq ptr %t107, null - br i1 %t108, label %panic3337, label %ok3338 -panic3337: + br i1 %t108, label %panic3341, label %ok3342 +panic3341: call void @finch_panic(ptr @.str.2109, i64 1404, ptr @.str.2110) unreachable -ok3338: +ok3342: %t109 = getelementptr inbounds %S.gen.Gen, ptr %t107, i32 0, i32 10 %t110 = load i64, ptr %a87 %t111 = load { ptr, i64, i64 }, ptr %t109 %t112 = extractvalue { ptr, i64, i64 } %t111, 1 %t113 = icmp uge i64 %t110, %t112 - br i1 %t113, label %range3339, label %inrange3340 -range3339: + br i1 %t113, label %range3343, label %inrange3344 +range3343: call void @finch_panic_index(ptr @.str.2111, i64 1404, i64 %t110, i64 %t112) unreachable -inrange3340: +inrange3344: %t114 = extractvalue { ptr, i64, i64 } %t111, 0 %t115 = getelementptr inbounds %S.gen.Scope, ptr %t114, i64 %t110 %t116 = getelementptr inbounds %S.gen.Scope, ptr %t115, i32 0, i32 0 @@ -37169,25 +37195,25 @@ inrange3340: %t123 = getelementptr inbounds %S.gen.Cleanup, ptr %t122, i64 %t120 store %S.gen.Cleanup %t119, ptr %t123 store i64 %t121, ptr %t105 - br label %endif3332 -endif3332: + br label %endif3336 +endif3336: %t124 = load ptr, ptr %a1 %t125 = icmp eq ptr %t124, null - br i1 %t125, label %panic3341, label %ok3342 -panic3341: + br i1 %t125, label %panic3345, label %ok3346 +panic3345: call void @finch_panic(ptr @.str.2112, i64 1406, ptr @.str.2113) unreachable -ok3342: +ok3346: %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 10 %t127 = load i64, ptr %a87 %t128 = load { ptr, i64, i64 }, ptr %t126 %t129 = extractvalue { ptr, i64, i64 } %t128, 1 %t130 = icmp uge i64 %t127, %t129 - br i1 %t130, label %range3343, label %inrange3344 -range3343: + br i1 %t130, label %range3347, label %inrange3348 +range3347: call void @finch_panic_index(ptr @.str.2114, i64 1406, i64 %t127, i64 %t129) unreachable -inrange3344: +inrange3348: %t131 = extractvalue { ptr, i64, i64 } %t128, 0 %t132 = getelementptr inbounds %S.gen.Scope, ptr %t131, i64 %t127 %t133 = getelementptr inbounds %S.gen.Scope, ptr %t132, i32 0, i32 0 @@ -37211,11 +37237,11 @@ inrange3344: %t151 = insertvalue %S.gen.Var %t149, i1 %t150, 3 %t152 = load ptr, ptr %a1 %t153 = icmp eq ptr %t152, null - br i1 %t153, label %panic3345, label %ok3346 -panic3345: + br i1 %t153, label %panic3349, label %ok3350 +panic3349: call void @finch_panic(ptr @.str.2115, i64 1406, ptr @.str.2116) unreachable -ok3346: +ok3350: %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 25 %t155 = load i64, ptr %t154 %t156 = insertvalue %S.gen.Var %t151, i64 %t155, 4 @@ -37223,22 +37249,22 @@ ok3346: %t158 = insertvalue %S.gen.Var %t156, i1 %t157, 5 %t159 = load ptr, ptr %a1 %t160 = icmp eq ptr %t159, null - br i1 %t160, label %panic3347, label %ok3348 -panic3347: + br i1 %t160, label %panic3351, label %ok3352 +panic3351: call void @finch_panic(ptr @.str.2117, i64 1406, ptr @.str.2118) unreachable -ok3348: +ok3352: %t161 = getelementptr inbounds %S.gen.Gen, ptr %t159, i32 0, i32 1 %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t163 = load i64, ptr %t162 %t164 = load { ptr, i64, i64 }, ptr %t161 %t165 = extractvalue { ptr, i64, i64 } %t164, 1 %t166 = icmp uge i64 %t163, %t165 - br i1 %t166, label %range3349, label %inrange3350 -range3349: + br i1 %t166, label %range3353, label %inrange3354 +range3353: call void @finch_panic_index(ptr @.str.2119, i64 1406, i64 %t163, i64 %t165) unreachable -inrange3350: +inrange3354: %t167 = extractvalue { ptr, i64, i64 } %t164, 0 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i64 %t163 %t169 = load { ptr, i64, i64 }, ptr %t168 @@ -37261,11 +37287,11 @@ inrange3350: store i64 %t181, ptr %t134 %t184 = load ptr, ptr %a1 %t185 = icmp eq ptr %t184, null - br i1 %t185, label %panic3351, label %ok3352 -panic3351: + br i1 %t185, label %panic3355, label %ok3356 +panic3355: call void @finch_panic(ptr @.str.2120, i64 1407, ptr @.str.2121) unreachable -ok3352: +ok3356: %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 25 %t187 = load i64, ptr %t186 %t188 = add i64 %t187, 1 @@ -37278,91 +37304,91 @@ ok3352: call void @finch.gen.dbgVariable(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t191, %S.ast.Type %t192, { ptr, i64, i64 } %t193) %t194 = load ptr, ptr %a1 %t195 = icmp eq ptr %t194, null - br i1 %t195, label %panic3353, label %ok3354 -panic3353: + br i1 %t195, label %panic3357, label %ok3358 +panic3357: call void @finch_panic(ptr @.str.2122, i64 1409, ptr @.str.2123) unreachable -ok3354: +ok3358: %t196 = getelementptr inbounds %S.gen.Gen, ptr %t194, i32 0, i32 28 %t197 = load i1, ptr %t196 - br label %logic.from3355 -logic.from3355: - br i1 %t197, label %logic.rhs3356, label %logic.end3357 -logic.rhs3356: + br label %logic.from3359 +logic.from3359: + br i1 %t197, label %logic.rhs3360, label %logic.end3361 +logic.rhs3360: %t198 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t198, ptr %a199 store { ptr, i64, i64 } { ptr @.str.2124, i64 3, i64 0 }, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp eq i32 %t201, 0 - br label %logic.rend3358 -logic.rend3358: - br label %logic.end3357 -logic.end3357: - %t203 = phi i1 [ false, %logic.from3355 ], [ %t202, %logic.rend3358 ] - br label %logic.from3359 -logic.from3359: - br i1 %t203, label %logic.rhs3360, label %logic.end3361 -logic.rhs3360: + br label %logic.rend3362 +logic.rend3362: + br label %logic.end3361 +logic.end3361: + %t203 = phi i1 [ false, %logic.from3359 ], [ %t202, %logic.rend3362 ] + br label %logic.from3363 +logic.from3363: + br i1 %t203, label %logic.rhs3364, label %logic.end3365 +logic.rhs3364: %t204 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t204, ptr %a205 store { ptr, i64, i64 } { ptr @.str.2126, i64 1, i64 0 }, ptr %a207 %t208 = call i32 @finch_str_starts(ptr %a205, ptr %a207) %t209 = icmp ne i32 %t208, 0 %t210 = xor i1 %t209, true - br label %logic.rend3362 -logic.rend3362: - br label %logic.end3361 -logic.end3361: - %t211 = phi i1 [ false, %logic.from3359 ], [ %t210, %logic.rend3362 ] - br i1 %t211, label %then3363, label %endif3365 -then3363: + br label %logic.rend3366 +logic.rend3366: + br label %logic.end3365 +logic.end3365: + %t211 = phi i1 [ false, %logic.from3363 ], [ %t210, %logic.rend3366 ] + br i1 %t211, label %then3367, label %endif3369 +then3367: %t212 = load ptr, ptr %a1 %t213 = icmp eq ptr %t212, null - br i1 %t213, label %panic3366, label %ok3367 -panic3366: + br i1 %t213, label %panic3370, label %ok3371 +panic3370: call void @finch_panic(ptr @.str.2127, i64 1410, ptr @.str.2128) unreachable -ok3367: +ok3371: %t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 0 %t215 = load ptr, ptr %a1 %t216 = icmp eq ptr %t215, null - br i1 %t216, label %panic3368, label %ok3369 -panic3368: + br i1 %t216, label %panic3372, label %ok3373 +panic3372: call void @finch_panic(ptr @.str.2129, i64 1410, ptr @.str.2130) unreachable -ok3369: +ok3373: %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 13 %t218 = getelementptr inbounds %S.gen.FnSig, ptr %t217, i32 0, i32 16 %t219 = load i64, ptr %t218 %t220 = load { ptr, i64, i64 }, ptr %t214 %t221 = extractvalue { ptr, i64, i64 } %t220, 1 %t222 = icmp uge i64 %t219, %t221 - br i1 %t222, label %range3370, label %inrange3371 -range3370: + br i1 %t222, label %range3374, label %inrange3375 +range3374: call void @finch_panic_index(ptr @.str.2131, i64 1410, i64 %t219, i64 %t221) unreachable -inrange3371: +inrange3375: %t223 = extractvalue { ptr, i64, i64 } %t220, 0 %t224 = getelementptr inbounds %S.ast.Program, ptr %t223, i64 %t219 %t225 = getelementptr inbounds %S.ast.Program, ptr %t224, i32 0, i32 8 %t226 = load ptr, ptr %a1 %t227 = icmp eq ptr %t226, null - br i1 %t227, label %panic3372, label %ok3373 -panic3372: + br i1 %t227, label %panic3376, label %ok3377 +panic3376: call void @finch_panic(ptr @.str.2132, i64 1410, ptr @.str.2133) unreachable -ok3373: +ok3377: %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 13 %t229 = getelementptr inbounds %S.gen.FnSig, ptr %t228, i32 0, i32 17 %t230 = load i64, ptr %t229 %t231 = load { ptr, i64, i64 }, ptr %t225 %t232 = extractvalue { ptr, i64, i64 } %t231, 1 %t233 = icmp uge i64 %t230, %t232 - br i1 %t233, label %range3374, label %inrange3375 -range3374: + br i1 %t233, label %range3378, label %inrange3379 +range3378: call void @finch_panic_index(ptr @.str.2134, i64 1410, i64 %t230, i64 %t232) unreachable -inrange3375: +inrange3379: %t234 = extractvalue { ptr, i64, i64 } %t231, 0 %t235 = getelementptr inbounds %S.ast.Node, ptr %t234, i64 %t230 %t236 = load %S.ast.Node, ptr %t235 @@ -37372,11 +37398,11 @@ inrange3375: store %S.ast.Node %t239, ptr %a240 %t241 = load ptr, ptr %a1 %t242 = icmp eq ptr %t241, null - br i1 %t242, label %panic3376, label %ok3377 -panic3376: + br i1 %t242, label %panic3380, label %ok3381 +panic3380: call void @finch_panic(ptr @.str.2135, i64 1411, ptr @.str.2136) unreachable -ok3377: +ok3381: %t243 = getelementptr inbounds %S.gen.Gen, ptr %t241, i32 0, i32 29 %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 %t245 = load { ptr, i64, i64 }, ptr %a3 @@ -37408,22 +37434,22 @@ ok3377: %t267 = load { ptr, i64, i64 }, ptr %a263 %t268 = load ptr, ptr %a1 %t269 = icmp eq ptr %t268, null - br i1 %t269, label %panic3378, label %ok3379 -panic3378: + br i1 %t269, label %panic3382, label %ok3383 +panic3382: call void @finch_panic(ptr @.str.2140, i64 1411, ptr @.str.2141) unreachable -ok3379: +ok3383: %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 1 %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t272 = load i64, ptr %t271 %t273 = load { ptr, i64, i64 }, ptr %t270 %t274 = extractvalue { ptr, i64, i64 } %t273, 1 %t275 = icmp uge i64 %t272, %t274 - br i1 %t275, label %range3380, label %inrange3381 -range3380: + br i1 %t275, label %range3384, label %inrange3385 +range3384: call void @finch_panic_index(ptr @.str.2142, i64 1411, i64 %t272, i64 %t274) unreachable -inrange3381: +inrange3385: %t276 = extractvalue { ptr, i64, i64 } %t273, 0 %t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t276, i64 %t272 %t278 = load { ptr, i64, i64 }, ptr %t277 @@ -37477,22 +37503,22 @@ inrange3381: %t318 = load { ptr, i64, i64 }, ptr %a314 %t319 = load ptr, ptr %a1 %t320 = icmp eq ptr %t319, null - br i1 %t320, label %panic3382, label %ok3383 -panic3382: + br i1 %t320, label %panic3386, label %ok3387 +panic3386: call void @finch_panic(ptr @.str.2146, i64 1411, ptr @.str.2147) unreachable -ok3383: +ok3387: %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 1 %t322 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 13 %t323 = load i64, ptr %t322 %t324 = load { ptr, i64, i64 }, ptr %t321 %t325 = extractvalue { ptr, i64, i64 } %t324, 1 %t326 = icmp uge i64 %t323, %t325 - br i1 %t326, label %range3384, label %inrange3385 -range3384: + br i1 %t326, label %range3388, label %inrange3389 +range3388: call void @finch_panic_index(ptr @.str.2148, i64 1411, i64 %t323, i64 %t325) unreachable -inrange3385: +inrange3389: %t327 = extractvalue { ptr, i64, i64 } %t324, 0 %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i64 %t323 %t329 = load { ptr, i64, i64 }, ptr %t328 @@ -37582,8 +37608,8 @@ inrange3385: store { ptr, i64, i64 } %t397, ptr %a398 call void @finch_str_drop(ptr %a398) call void @finch.drop.S_ast_Node(ptr %a240) - br label %endif3365 -endif3365: + br label %endif3369 +endif3369: %t399 = load { ptr, i64, i64 }, ptr %a73 ret { ptr, i64, i64 } %t399 } @@ -37594,11 +37620,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic3386, label %ok3387 -panic3386: + br i1 %t3, label %panic3390, label %ok3391 +panic3390: call void @finch_panic(ptr @.str.2155, i64 1418, ptr @.str.2156) unreachable -ok3387: +ok3391: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 10 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 @@ -37632,19 +37658,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond3399 -n.cond3399: + br label %n.cond3403 +n.cond3403: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body3400, label %n.end3401 -n.body3400: + br i1 %t6, label %n.body3404, label %n.end3405 +n.body3404: %t7 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Var(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond3399 -n.end3401: + br label %n.cond3403 +n.end3405: call void @finch_arr_free(ptr %a) ret void } @@ -37677,47 +37703,47 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic3388, label %ok3389 -panic3388: + br i1 %t3, label %panic3392, label %ok3393 +panic3392: call void @finch_panic(ptr @.str.2157, i64 1424, ptr @.str.2158) unreachable -ok3389: +ok3393: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 9 %t5 = load i1, ptr %t4 %t6 = xor i1 %t5, true - br i1 %t6, label %then3390, label %endif3392 -then3390: + br i1 %t6, label %then3394, label %endif3396 +then3394: %t7 = load ptr, ptr %a1 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic3393, label %ok3394 -panic3393: + br i1 %t9, label %panic3397, label %ok3398 +panic3397: call void @finch_panic(ptr @.str.2159, i64 1425, ptr @.str.2160) unreachable -ok3394: +ok3398: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = sub i64 %t12, 1 call void @finch.gen.runCleanups(ptr %t7, i64 %t13) - br label %endif3392 -endif3392: + br label %endif3396 +endif3396: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic3395, label %ok3396 -panic3395: + br i1 %t15, label %panic3399, label %ok3400 +panic3399: call void @finch_panic(ptr @.str.2161, i64 1427, ptr @.str.2162) unreachable -ok3396: +ok3400: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 10 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = icmp eq i64 %t18, 0 - br i1 %t19, label %panic3397, label %ok3398 -panic3397: + br i1 %t19, label %panic3401, label %ok3402 +panic3401: call void @finch_panic(ptr @.str.2163, i64 1427, ptr @.str.2164) unreachable -ok3398: +ok3402: %t20 = sub i64 %t18, 1 %t21 = load ptr, ptr %t16 %t22 = getelementptr inbounds %S.gen.Scope, ptr %t21, i64 %t20 @@ -37743,53 +37769,53 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic3402, label %ok3403 -panic3402: + br i1 %t4, label %panic3406, label %ok3407 +panic3406: call void @finch_panic(ptr @.str.2165, i64 1432, ptr @.str.2166) unreachable -ok3403: +ok3407: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 - br i1 %t9, label %range3404, label %inrange3405 -range3404: + br i1 %t9, label %range3408, label %inrange3409 +range3408: call void @finch_panic_index(ptr @.str.2167, i64 1432, i64 %t6, i64 %t8) unreachable -inrange3405: +inrange3409: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.Scope, ptr %t10, i64 %t6 %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i32 0, i32 3 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 store i64 %t14, ptr %a15 - br label %while.cond3406 -while.cond3406: + br label %while.cond3410 +while.cond3410: %t16 = load i64, ptr %a15 %t17 = icmp sgt i64 %t16, 0 - br i1 %t17, label %while.body3407, label %while.end3408 -while.body3407: + br i1 %t17, label %while.body3411, label %while.end3412 +while.body3411: %t18 = load i64, ptr %a15 %t19 = sub i64 %t18, 1 store i64 %t19, ptr %a15 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic3409, label %ok3410 -panic3409: + br i1 %t21, label %panic3413, label %ok3414 +panic3413: call void @finch_panic(ptr @.str.2168, i64 1435, ptr @.str.2169) unreachable -ok3410: +ok3414: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 %t23 = load i64, ptr %a2 %t24 = load { ptr, i64, i64 }, ptr %t22 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 - br i1 %t26, label %range3411, label %inrange3412 -range3411: + br i1 %t26, label %range3415, label %inrange3416 +range3415: call void @finch_panic_index(ptr @.str.2170, i64 1435, i64 %t23, i64 %t25) unreachable -inrange3412: +inrange3416: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 3 @@ -37797,11 +37823,11 @@ inrange3412: %t31 = load { ptr, i64, i64 }, ptr %t29 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 %t30, %t32 - br i1 %t33, label %range3413, label %inrange3414 -range3413: + br i1 %t33, label %range3417, label %inrange3418 +range3417: call void @finch_panic_index(ptr @.str.2171, i64 1435, i64 %t30, i64 %t32) unreachable -inrange3414: +inrange3418: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.gen.Cleanup, ptr %t34, i64 %t30 %t36 = load %S.gen.Cleanup, ptr %t35 @@ -37809,25 +37835,25 @@ inrange3414: %t38 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 0 %t39 = load i1, ptr %t38 %t40 = xor i1 %t39, true - br i1 %t40, label %then3415, label %endif3417 -then3415: + br i1 %t40, label %then3419, label %endif3421 +then3419: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic3418, label %ok3419 -panic3418: + br i1 %t42, label %panic3422, label %ok3423 +panic3422: call void @finch_panic(ptr @.str.2172, i64 1437, ptr @.str.2173) unreachable -ok3419: +ok3423: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 10 %t44 = load i64, ptr %a2 %t45 = load { ptr, i64, i64 }, ptr %t43 %t46 = extractvalue { ptr, i64, i64 } %t45, 1 %t47 = icmp uge i64 %t44, %t46 - br i1 %t47, label %range3420, label %inrange3421 -range3420: + br i1 %t47, label %range3424, label %inrange3425 +range3424: call void @finch_panic_index(ptr @.str.2174, i64 1437, i64 %t44, i64 %t46) unreachable -inrange3421: +inrange3425: %t48 = extractvalue { ptr, i64, i64 } %t45, 0 %t49 = getelementptr inbounds %S.gen.Scope, ptr %t48, i64 %t44 %t50 = getelementptr inbounds %S.gen.Scope, ptr %t49, i32 0, i32 0 @@ -37836,11 +37862,11 @@ inrange3421: %t53 = load { ptr, i64, i64 }, ptr %t50 %t54 = extractvalue { ptr, i64, i64 } %t53, 1 %t55 = icmp uge i64 %t52, %t54 - br i1 %t55, label %range3422, label %inrange3423 -range3422: + br i1 %t55, label %range3426, label %inrange3427 +range3426: call void @finch_panic_index(ptr @.str.2175, i64 1437, i64 %t52, i64 %t54) unreachable -inrange3423: +inrange3427: %t56 = extractvalue { ptr, i64, i64 } %t53, 0 %t57 = getelementptr inbounds %S.gen.Var, ptr %t56, i64 %t52 %t58 = load %S.gen.Var, ptr %t57 @@ -37851,65 +37877,65 @@ inrange3423: %t63 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 6 %t64 = load i1, ptr %t63 %t65 = xor i1 %t64, true - br i1 %t65, label %then3424, label %endif3426 -then3424: + br i1 %t65, label %then3428, label %endif3430 +then3428: %t66 = load ptr, ptr %a1 %t67 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 2 %t68 = load { ptr, i64, i64 }, ptr %t67 %t69 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 1 %t70 = load %S.ast.Type, ptr %t69 call void @finch.gen.dropAt(ptr %t66, { ptr, i64, i64 } %t68, %S.ast.Type %t70) - br label %endif3426 -endif3426: + br label %endif3430 +endif3430: call void @finch.drop.S_gen_Var(ptr %a62) - br label %while.cond3406 -endif3417: + br label %while.cond3410 +endif3421: %t71 = load ptr, ptr %a1 %t72 = icmp eq ptr %t71, null - br i1 %t72, label %panic3427, label %ok3428 -panic3427: + br i1 %t72, label %panic3431, label %ok3432 +panic3431: call void @finch_panic(ptr @.str.2176, i64 1443, ptr @.str.2177) unreachable -ok3428: +ok3432: %t73 = getelementptr inbounds %S.gen.Gen, ptr %t71, i32 0, i32 44 %t74 = load i1, ptr %t73 store i1 %t74, ptr %a75 %t76 = load ptr, ptr %a1 %t77 = icmp eq ptr %t76, null - br i1 %t77, label %panic3429, label %ok3430 -panic3429: + br i1 %t77, label %panic3433, label %ok3434 +panic3433: call void @finch_panic(ptr @.str.2178, i64 1444, ptr @.str.2179) unreachable -ok3430: +ok3434: %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 45 %t79 = load i64, ptr %t78 store i64 %t79, ptr %a80 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic3431, label %ok3432 -panic3431: + br i1 %t82, label %panic3435, label %ok3436 +panic3435: call void @finch_panic(ptr @.str.2180, i64 1445, ptr @.str.2181) unreachable -ok3432: +ok3436: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 44 store i1 true, ptr %t83 %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null - br i1 %t85, label %panic3433, label %ok3434 -panic3433: + br i1 %t85, label %panic3437, label %ok3438 +panic3437: call void @finch_panic(ptr @.str.2182, i64 1446, ptr @.str.2183) unreachable -ok3434: +ok3438: %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 10 %t87 = load i64, ptr %a2 %t88 = load { ptr, i64, i64 }, ptr %t86 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 %t87, %t89 - br i1 %t90, label %range3435, label %inrange3436 -range3435: + br i1 %t90, label %range3439, label %inrange3440 +range3439: call void @finch_panic_index(ptr @.str.2184, i64 1446, i64 %t87, i64 %t89) unreachable -inrange3436: +inrange3440: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds %S.gen.Scope, ptr %t91, i64 %t87 %t93 = getelementptr inbounds %S.gen.Scope, ptr %t92, i32 0, i32 2 @@ -37918,30 +37944,30 @@ inrange3436: %t96 = load { ptr, i64, i64 }, ptr %t93 %t97 = extractvalue { ptr, i64, i64 } %t96, 1 %t98 = icmp uge i64 %t95, %t97 - br i1 %t98, label %range3437, label %inrange3438 -range3437: + br i1 %t98, label %range3441, label %inrange3442 +range3441: call void @finch_panic_index(ptr @.str.2185, i64 1446, i64 %t95, i64 %t97) unreachable -inrange3438: +inrange3442: %t99 = extractvalue { ptr, i64, i64 } %t96, 0 %t100 = getelementptr inbounds i64, ptr %t99, i64 %t95 %t101 = load i64, ptr %t100 %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null - br i1 %t103, label %panic3439, label %ok3440 -panic3439: + br i1 %t103, label %panic3443, label %ok3444 +panic3443: call void @finch_panic(ptr @.str.2186, i64 1446, ptr @.str.2187) unreachable -ok3440: +ok3444: %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 45 store i64 %t101, ptr %t104 %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null - br i1 %t106, label %panic3441, label %ok3442 -panic3441: + br i1 %t106, label %panic3445, label %ok3446 +panic3445: call void @finch_panic(ptr @.str.2188, i64 1447, ptr @.str.2189) unreachable -ok3442: +ok3446: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 46 %t108 = load i64, ptr %t107 %t109 = add i64 %t108, 1 @@ -37951,21 +37977,21 @@ ok3442: %t111 = load ptr, ptr %a1 %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null - br i1 %t113, label %panic3443, label %ok3444 -panic3443: + br i1 %t113, label %panic3447, label %ok3448 +panic3447: call void @finch_panic(ptr @.str.2190, i64 1449, ptr @.str.2191) unreachable -ok3444: +ok3448: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 10 %t115 = load i64, ptr %a2 %t116 = load { ptr, i64, i64 }, ptr %t114 %t117 = extractvalue { ptr, i64, i64 } %t116, 1 %t118 = icmp uge i64 %t115, %t117 - br i1 %t118, label %range3445, label %inrange3446 -range3445: + br i1 %t118, label %range3449, label %inrange3450 +range3449: call void @finch_panic_index(ptr @.str.2192, i64 1449, i64 %t115, i64 %t117) unreachable -inrange3446: +inrange3450: %t119 = extractvalue { ptr, i64, i64 } %t116, 0 %t120 = getelementptr inbounds %S.gen.Scope, ptr %t119, i64 %t115 %t121 = getelementptr inbounds %S.gen.Scope, ptr %t120, i32 0, i32 1 @@ -37974,11 +38000,11 @@ inrange3446: %t124 = load { ptr, i64, i64 }, ptr %t121 %t125 = extractvalue { ptr, i64, i64 } %t124, 1 %t126 = icmp uge i64 %t123, %t125 - br i1 %t126, label %range3447, label %inrange3448 -range3447: + br i1 %t126, label %range3451, label %inrange3452 +range3451: call void @finch_panic_index(ptr @.str.2193, i64 1449, i64 %t123, i64 %t125) unreachable -inrange3448: +inrange3452: %t127 = extractvalue { ptr, i64, i64 } %t124, 0 %t128 = getelementptr inbounds %S.ast.Node, ptr %t127, i64 %t123 %t129 = load %S.ast.Node, ptr %t128 @@ -37987,11 +38013,11 @@ inrange3448: call void @finch.gen.popScope(ptr %t130) %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null - br i1 %t132, label %panic3449, label %ok3450 -panic3449: + br i1 %t132, label %panic3453, label %ok3454 +panic3453: call void @finch_panic(ptr @.str.2194, i64 1451, ptr @.str.2195) unreachable -ok3450: +ok3454: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 46 %t134 = load i64, ptr %t133 %t135 = sub i64 %t134, 1 @@ -37999,25 +38025,25 @@ ok3450: %t136 = load i1, ptr %a75 %t137 = load ptr, ptr %a1 %t138 = icmp eq ptr %t137, null - br i1 %t138, label %panic3451, label %ok3452 -panic3451: + br i1 %t138, label %panic3455, label %ok3456 +panic3455: call void @finch_panic(ptr @.str.2196, i64 1452, ptr @.str.2197) unreachable -ok3452: +ok3456: %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 44 store i1 %t136, ptr %t139 %t140 = load i64, ptr %a80 %t141 = load ptr, ptr %a1 %t142 = icmp eq ptr %t141, null - br i1 %t142, label %panic3453, label %ok3454 -panic3453: + br i1 %t142, label %panic3457, label %ok3458 +panic3457: call void @finch_panic(ptr @.str.2198, i64 1453, ptr @.str.2199) unreachable -ok3454: +ok3458: %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 45 store i64 %t140, ptr %t143 - br label %while.cond3406 -while.end3408: + br label %while.cond3410 +while.end3412: ret void } @@ -38030,30 +38056,30 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic3455, label %ok3456 -panic3455: + br i1 %t4, label %panic3459, label %ok3460 +panic3459: call void @finch_panic(ptr @.str.2200, i64 1459, ptr @.str.2201) unreachable -ok3456: +ok3460: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 %t7, ptr %a8 - br label %while.cond3457 -while.cond3457: + br label %while.cond3461 +while.cond3461: %t9 = load i64, ptr %a8 %t10 = load i64, ptr %a2 %t11 = icmp sgt i64 %t9, %t10 - br i1 %t11, label %while.body3458, label %while.end3459 -while.body3458: + br i1 %t11, label %while.body3462, label %while.end3463 +while.body3462: %t12 = load i64, ptr %a8 %t13 = sub i64 %t12, 1 store i64 %t13, ptr %a8 %t14 = load ptr, ptr %a1 %t15 = load i64, ptr %a8 call void @finch.gen.runCleanups(ptr %t14, i64 %t15) - br label %while.cond3457 -while.end3459: + br label %while.cond3461 +while.end3463: ret void } @@ -38084,53 +38110,53 @@ entry: store { ptr, i64, i64 } { ptr @.str.2202, i64 3, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then3460, label %endif3462 -then3460: + br i1 %t7, label %then3464, label %endif3466 +then3464: %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 call void @finch_str_copy(ptr %a11, ptr %a10) %t12 = load { ptr, i64, i64 }, ptr %a11 ret { ptr, i64, i64 } %t12 -endif3462: +endif3466: %t13 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2203, i64 6, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.from3463 -logic.from3463: - br i1 %t18, label %logic.end3465, label %logic.rhs3464 -logic.rhs3464: + br label %logic.from3467 +logic.from3467: + br i1 %t18, label %logic.end3469, label %logic.rhs3468 +logic.rhs3468: %t19 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2204, i64 5, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 - br label %logic.rend3466 -logic.rend3466: - br label %logic.end3465 -logic.end3465: - %t25 = phi i1 [ true, %logic.from3463 ], [ %t24, %logic.rend3466 ] - br i1 %t25, label %then3467, label %endif3469 -then3467: + br label %logic.rend3470 +logic.rend3470: + br label %logic.end3469 +logic.end3469: + %t25 = phi i1 [ true, %logic.from3467 ], [ %t24, %logic.rend3470 ] + br i1 %t25, label %then3471, label %endif3473 +then3471: %t26 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 %t27 = load { ptr, i64, i64 }, ptr %t26 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 0, %t28 - br i1 %t29, label %range3470, label %inrange3471 -range3470: + br i1 %t29, label %range3474, label %inrange3475 +range3474: call void @finch_panic_index(ptr @.str.2205, i64 1477, i64 0, i64 %t28) unreachable -inrange3471: +inrange3475: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.ast.Node, ptr %t30, i64 0 %t32 = load %S.ast.Node, ptr %t31 %t33 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t32) ret { ptr, i64, i64 } %t33 -endif3469: +endif3473: ret { ptr, i64, i64 } { ptr @.str.2206, i64 0, i64 0 } } @@ -38198,19 +38224,19 @@ entry: store { ptr, i64, i64 } { ptr @.str.2215, i64 6, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.from3472 -logic.from3472: - br i1 %t23, label %logic.rhs3473, label %logic.end3474 -logic.rhs3473: + br label %logic.from3476 +logic.from3476: + br i1 %t23, label %logic.rhs3477, label %logic.end3478 +logic.rhs3477: %t24 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 0, %t26 - br i1 %t27, label %range3475, label %inrange3476 -range3475: + br i1 %t27, label %range3479, label %inrange3480 +range3479: call void @finch_panic_index(ptr @.str.2216, i64 1484, i64 0, i64 %t26) unreachable -inrange3476: +inrange3480: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 %t30 = load %S.ast.Node, ptr %t29 @@ -38222,26 +38248,26 @@ inrange3476: %t36 = icmp ne i32 %t35, 0 store { ptr, i64, i64 } %t31, ptr %a37 call void @finch_str_drop(ptr %a37) - br label %logic.rend3477 -logic.rend3477: - br label %logic.end3474 -logic.end3474: - %t38 = phi i1 [ false, %logic.from3472 ], [ %t36, %logic.rend3477 ] - br i1 %t38, label %then3478, label %endif3480 -then3478: + br label %logic.rend3481 +logic.rend3481: + br label %logic.end3478 +logic.end3478: + %t38 = phi i1 [ false, %logic.from3476 ], [ %t36, %logic.rend3481 ] + br i1 %t38, label %then3482, label %endif3484 +then3482: call void @finch.drop.arr_str(ptr %a17) ret i1 true -endif3480: +endif3484: %t39 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.2217, i64 6, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br label %logic.from3481 -logic.from3481: - br i1 %t44, label %logic.rhs3482, label %logic.end3483 -logic.rhs3482: + br label %logic.from3485 +logic.from3485: + br i1 %t44, label %logic.rhs3486, label %logic.end3487 +logic.rhs3486: %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a17, i32 0, i32 1 %t46 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t47 = load { ptr, i64, i64 }, ptr %t46 @@ -38249,40 +38275,40 @@ logic.rhs3482: %t49 = load i64, ptr %t45 %t50 = load ptr, ptr %a17 store i64 0, ptr %a51 - br label %find.cond3484 -find.cond3484: + br label %find.cond3488 +find.cond3488: %t52 = load i64, ptr %a51 %t53 = icmp slt i64 %t52, %t49 - br i1 %t53, label %find.body3485, label %find.end3488 -find.body3485: + br i1 %t53, label %find.body3489, label %find.end3492 +find.body3489: %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } %t47, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 - br i1 %t59, label %find.hit3486, label %find.next3487 -find.hit3486: + br i1 %t59, label %find.hit3490, label %find.next3491 +find.hit3490: store i64 %t52, ptr %a48 - br label %find.end3488 -find.next3487: + br label %find.end3492 +find.next3491: %t60 = add i64 %t52, 1 store i64 %t60, ptr %a51 - br label %find.cond3484 -find.end3488: + br label %find.cond3488 +find.end3492: %t61 = load i64, ptr %a48 %t62 = icmp sge i64 %t61, 0 - br label %logic.from3489 -logic.from3489: - br i1 %t62, label %logic.end3491, label %logic.rhs3490 -logic.rhs3490: + br label %logic.from3493 +logic.from3493: + br i1 %t62, label %logic.end3495, label %logic.rhs3494 +logic.rhs3494: %t63 = load ptr, ptr %a1 %t64 = icmp eq ptr %t63, null - br i1 %t64, label %panic3492, label %ok3493 -panic3492: + br i1 %t64, label %panic3496, label %ok3497 +panic3496: call void @finch_panic(ptr @.str.2218, i64 1490, ptr @.str.2219) unreachable -ok3493: +ok3497: %t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 24 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 %t67 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 @@ -38291,52 +38317,52 @@ ok3493: %t70 = load i64, ptr %t66 %t71 = load ptr, ptr %t65 store i64 0, ptr %a72 - br label %find.cond3494 -find.cond3494: + br label %find.cond3498 +find.cond3498: %t73 = load i64, ptr %a72 %t74 = icmp slt i64 %t73, %t70 - br i1 %t74, label %find.body3495, label %find.end3498 -find.body3495: + br i1 %t74, label %find.body3499, label %find.end3502 +find.body3499: %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 %t73 %t76 = load { ptr, i64, i64 }, ptr %t75 store { ptr, i64, i64 } %t76, ptr %a77 store { ptr, i64, i64 } %t68, ptr %a78 %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) %t80 = icmp ne i32 %t79, 0 - br i1 %t80, label %find.hit3496, label %find.next3497 -find.hit3496: + br i1 %t80, label %find.hit3500, label %find.next3501 +find.hit3500: store i64 %t73, ptr %a69 - br label %find.end3498 -find.next3497: + br label %find.end3502 +find.next3501: %t81 = add i64 %t73, 1 store i64 %t81, ptr %a72 - br label %find.cond3494 -find.end3498: + br label %find.cond3498 +find.end3502: %t82 = load i64, ptr %a69 %t83 = icmp sge i64 %t82, 0 - br label %logic.rend3499 -logic.rend3499: - br label %logic.end3491 -logic.end3491: - %t84 = phi i1 [ true, %logic.from3489 ], [ %t83, %logic.rend3499 ] - br label %logic.rend3500 -logic.rend3500: - br label %logic.end3483 -logic.end3483: - %t85 = phi i1 [ false, %logic.from3481 ], [ %t84, %logic.rend3500 ] - br label %logic.from3501 -logic.from3501: - br i1 %t85, label %logic.rhs3502, label %logic.end3503 -logic.rhs3502: + br label %logic.rend3503 +logic.rend3503: + br label %logic.end3495 +logic.end3495: + %t84 = phi i1 [ true, %logic.from3493 ], [ %t83, %logic.rend3503 ] + br label %logic.rend3504 +logic.rend3504: + br label %logic.end3487 +logic.end3487: + %t85 = phi i1 [ false, %logic.from3485 ], [ %t84, %logic.rend3504 ] + br label %logic.from3505 +logic.from3505: + br i1 %t85, label %logic.rhs3506, label %logic.end3507 +logic.rhs3506: %t86 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t87 = load { ptr, i64, i64 }, ptr %t86 %t88 = extractvalue { ptr, i64, i64 } %t87, 1 %t89 = icmp uge i64 0, %t88 - br i1 %t89, label %range3504, label %inrange3505 -range3504: + br i1 %t89, label %range3508, label %inrange3509 +range3508: call void @finch_panic_index(ptr @.str.2220, i64 1490, i64 0, i64 %t88) unreachable -inrange3505: +inrange3509: %t90 = extractvalue { ptr, i64, i64 } %t87, 0 %t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 0 %t92 = load %S.ast.Node, ptr %t91 @@ -38348,63 +38374,63 @@ inrange3505: %t98 = icmp ne i32 %t97, 0 store { ptr, i64, i64 } %t93, ptr %a99 call void @finch_str_drop(ptr %a99) - br label %logic.rend3506 -logic.rend3506: - br label %logic.end3503 -logic.end3503: - %t100 = phi i1 [ false, %logic.from3501 ], [ %t98, %logic.rend3506 ] - br i1 %t100, label %then3507, label %endif3509 -then3507: + br label %logic.rend3510 +logic.rend3510: + br label %logic.end3507 +logic.end3507: + %t100 = phi i1 [ false, %logic.from3505 ], [ %t98, %logic.rend3510 ] + br i1 %t100, label %then3511, label %endif3513 +then3511: call void @finch.drop.arr_str(ptr %a17) ret i1 true -endif3509: +endif3513: %t101 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.2221, i64 4, i64 0 }, ptr %a104 %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) %t106 = icmp ne i32 %t105, 0 - br label %logic.from3510 -logic.from3510: - br i1 %t106, label %logic.rhs3511, label %logic.end3512 -logic.rhs3511: + br label %logic.from3514 +logic.from3514: + br i1 %t106, label %logic.rhs3515, label %logic.end3516 +logic.rhs3515: %t107 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 %t108 = load { ptr, i64, i64 }, ptr %t107 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2222, i64 4, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 - br label %logic.rend3513 -logic.rend3513: - br label %logic.end3512 -logic.end3512: - %t113 = phi i1 [ false, %logic.from3510 ], [ %t112, %logic.rend3513 ] - br label %logic.from3514 -logic.from3514: - br i1 %t113, label %logic.rhs3515, label %logic.end3516 -logic.rhs3515: - %t114 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 - %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 - %t116 = load i64, ptr %t115 - %t117 = icmp eq i64 %t116, 1 br label %logic.rend3517 logic.rend3517: br label %logic.end3516 logic.end3516: - %t118 = phi i1 [ false, %logic.from3514 ], [ %t117, %logic.rend3517 ] + %t113 = phi i1 [ false, %logic.from3514 ], [ %t112, %logic.rend3517 ] br label %logic.from3518 logic.from3518: - br i1 %t118, label %logic.rhs3519, label %logic.end3520 + br i1 %t113, label %logic.rhs3519, label %logic.end3520 logic.rhs3519: + %t114 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp eq i64 %t116, 1 + br label %logic.rend3521 +logic.rend3521: + br label %logic.end3520 +logic.end3520: + %t118 = phi i1 [ false, %logic.from3518 ], [ %t117, %logic.rend3521 ] + br label %logic.from3522 +logic.from3522: + br i1 %t118, label %logic.rhs3523, label %logic.end3524 +logic.rhs3523: %t119 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t120 = load { ptr, i64, i64 }, ptr %t119 %t121 = extractvalue { ptr, i64, i64 } %t120, 1 %t122 = icmp uge i64 0, %t121 - br i1 %t122, label %range3521, label %inrange3522 -range3521: + br i1 %t122, label %range3525, label %inrange3526 +range3525: call void @finch_panic_index(ptr @.str.2223, i64 1493, i64 0, i64 %t121) unreachable -inrange3522: +inrange3526: %t123 = extractvalue { ptr, i64, i64 } %t120, 0 %t124 = getelementptr inbounds %S.ast.Node, ptr %t123, i64 0 %t125 = load %S.ast.Node, ptr %t124 @@ -38416,26 +38442,26 @@ inrange3522: %t131 = icmp ne i32 %t130, 0 store { ptr, i64, i64 } %t126, ptr %a132 call void @finch_str_drop(ptr %a132) - br label %logic.rend3523 -logic.rend3523: - br label %logic.end3520 -logic.end3520: - %t133 = phi i1 [ false, %logic.from3518 ], [ %t131, %logic.rend3523 ] - br i1 %t133, label %then3524, label %endif3526 -then3524: + br label %logic.rend3527 +logic.rend3527: + br label %logic.end3524 +logic.end3524: + %t133 = phi i1 [ false, %logic.from3522 ], [ %t131, %logic.rend3527 ] + br i1 %t133, label %then3528, label %endif3530 +then3528: call void @finch.drop.arr_str(ptr %a17) ret i1 true -endif3526: +endif3530: %t134 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 store i64 0, ptr %a135 - br label %each.cond3527 -each.cond3527: + br label %each.cond3531 +each.cond3531: %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 %t137 = load i64, ptr %t136 %t138 = load i64, ptr %a135 %t139 = icmp slt i64 %t138, %t137 - br i1 %t139, label %each.body3528, label %each.end3530 -each.body3528: + br i1 %t139, label %each.body3532, label %each.end3534 +each.body3532: %t140 = load ptr, ptr %t134 %t141 = getelementptr inbounds %S.ast.Node, ptr %t140, i64 %t138 %t142 = load %S.ast.Node, ptr %t141 @@ -38444,18 +38470,18 @@ each.body3528: %t145 = load { ptr, i64, i64 }, ptr %a2 %t146 = load %S.ast.Node, ptr %a143 %t147 = call i1 @finch.gen.mutates(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Node %t146) - br i1 %t147, label %then3531, label %endif3533 -then3531: + br i1 %t147, label %then3535, label %endif3537 +then3535: call void @finch.drop.arr_str(ptr %a17) ret i1 true -endif3533: - br label %each.step3529 -each.step3529: +endif3537: + br label %each.step3533 +each.step3533: %t148 = load i64, ptr %a135 %t149 = add i64 %t148, 1 store i64 %t149, ptr %a135 - br label %each.cond3527 -each.end3530: + br label %each.cond3531 +each.end3534: call void @finch.drop.arr_str(ptr %a17) ret i1 false } @@ -38805,49 +38831,49 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic3534, label %ok3535 -panic3534: + br i1 %t3, label %panic3538, label %ok3539 +panic3538: call void @finch_panic(ptr @.str.2224, i64 1507, ptr @.str.2225) unreachable -ok3535: +ok3539: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 store i64 0, ptr %a7 - br label %for.cond3536 -for.cond3536: + br label %for.cond3540 +for.cond3540: %t8 = load i64, ptr %a7 %t9 = icmp slt i64 %t8, %t6 - br i1 %t9, label %for.body3537, label %for.end3539 -for.body3537: + br i1 %t9, label %for.body3541, label %for.end3543 +for.body3541: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic3540, label %ok3541 -panic3540: + br i1 %t11, label %panic3544, label %ok3545 +panic3544: call void @finch_panic(ptr @.str.2226, i64 1508, ptr @.str.2227) unreachable -ok3541: +ok3545: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 0 %t13 = load i64, ptr %a7 %t14 = load { ptr, i64, i64 }, ptr %t12 %t15 = extractvalue { ptr, i64, i64 } %t14, 1 %t16 = icmp uge i64 %t13, %t15 - br i1 %t16, label %range3542, label %inrange3543 -range3542: + br i1 %t16, label %range3546, label %inrange3547 +range3546: call void @finch_panic_index(ptr @.str.2228, i64 1508, i64 %t13, i64 %t15) unreachable -inrange3543: +inrange3547: %t17 = extractvalue { ptr, i64, i64 } %t14, 0 %t18 = getelementptr inbounds %S.ast.Program, ptr %t17, i64 %t13 %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i32 0, i32 0 %t20 = load { ptr, i64, i64 }, ptr %t19 %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null - br i1 %t22, label %panic3544, label %ok3545 -panic3544: + br i1 %t22, label %panic3548, label %ok3549 +panic3548: call void @finch_panic(ptr @.str.2229, i64 1508, ptr @.str.2230) unreachable -ok3545: +ok3549: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 14 store { ptr, i64, i64 } %t20, ptr %a24 call void @finch_str_copy(ptr %a25, ptr %a24) @@ -38858,50 +38884,50 @@ ok3545: call void @finch_str_drop(ptr %a28) %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic3546, label %ok3547 -panic3546: + br i1 %t30, label %panic3550, label %ok3551 +panic3550: call void @finch_panic(ptr @.str.2231, i64 1509, ptr @.str.2232) unreachable -ok3547: +ok3551: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 0 %t32 = load i64, ptr %a7 %t33 = load { ptr, i64, i64 }, ptr %t31 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range3548, label %inrange3549 -range3548: + br i1 %t35, label %range3552, label %inrange3553 +range3552: call void @finch_panic_index(ptr @.str.2233, i64 1509, i64 %t32, i64 %t34) unreachable -inrange3549: +inrange3553: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Program, ptr %t36, i64 %t32 %t38 = getelementptr inbounds %S.ast.Program, ptr %t37, i32 0, i32 6 %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i32 0, i32 1 %t40 = load i64, ptr %t39 store i64 0, ptr %a41 - br label %for.cond3550 -for.cond3550: + br label %for.cond3554 +for.cond3554: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t40 - br i1 %t43, label %for.body3551, label %for.end3553 -for.body3551: + br i1 %t43, label %for.body3555, label %for.end3557 +for.body3555: %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic3554, label %ok3555 -panic3554: + br i1 %t45, label %panic3558, label %ok3559 +panic3558: call void @finch_panic(ptr @.str.2234, i64 1510, ptr @.str.2235) unreachable -ok3555: +ok3559: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 0 %t47 = load i64, ptr %a7 %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range3556, label %inrange3557 -range3556: + br i1 %t50, label %range3560, label %inrange3561 +range3560: call void @finch_panic_index(ptr @.str.2236, i64 1510, i64 %t47, i64 %t49) unreachable -inrange3557: +inrange3561: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i64 %t47 %t53 = getelementptr inbounds %S.ast.Program, ptr %t52, i32 0, i32 6 @@ -38909,11 +38935,11 @@ inrange3557: %t55 = load { ptr, i64, i64 }, ptr %t53 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range3558, label %inrange3559 -range3558: + br i1 %t57, label %range3562, label %inrange3563 +range3562: call void @finch_panic_index(ptr @.str.2237, i64 1510, i64 %t54, i64 %t56) unreachable -inrange3559: +inrange3563: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 @@ -38924,42 +38950,42 @@ inrange3559: %t65 = load ptr, ptr %a1 %t66 = load ptr, ptr %a1 %t67 = icmp eq ptr %t66, null - br i1 %t67, label %panic3560, label %ok3561 -panic3560: + br i1 %t67, label %panic3564, label %ok3565 +panic3564: call void @finch_panic(ptr @.str.2238, i64 1511, ptr @.str.2239) unreachable -ok3561: +ok3565: %t68 = getelementptr inbounds %S.gen.Gen, ptr %t66, i32 0, i32 14 %t69 = load { ptr, i64, i64 }, ptr %t68 %t70 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 %t71 = load { ptr, i64, i64 }, ptr %t70 %t72 = call i64 @finch.gen.findStruct(ptr %t65, { ptr, i64, i64 } %t69, { ptr, i64, i64 } %t71) %t73 = icmp sge i64 %t72, 0 - br label %logic.from3562 -logic.from3562: - br i1 %t73, label %logic.end3564, label %logic.rhs3563 -logic.rhs3563: + br label %logic.from3566 +logic.from3566: + br i1 %t73, label %logic.end3568, label %logic.rhs3567 +logic.rhs3567: %t74 = load ptr, ptr %a1 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic3565, label %ok3566 -panic3565: + br i1 %t76, label %panic3569, label %ok3570 +panic3569: call void @finch_panic(ptr @.str.2240, i64 1511, ptr @.str.2241) unreachable -ok3566: +ok3570: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 14 %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 %t80 = load { ptr, i64, i64 }, ptr %t79 %t81 = call i64 @finch.gen.findTemplate(ptr %t74, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t80, { ptr, i64, i64 } { ptr @.str.2242, i64 0, i64 0 }, i1 true) %t82 = icmp sge i64 %t81, 0 - br label %logic.rend3567 -logic.rend3567: - br label %logic.end3564 -logic.end3564: - %t83 = phi i1 [ true, %logic.from3562 ], [ %t82, %logic.rend3567 ] - br i1 %t83, label %then3568, label %endif3570 -then3568: + br label %logic.rend3571 +logic.rend3571: + br label %logic.end3568 +logic.end3568: + %t83 = phi i1 [ true, %logic.from3566 ], [ %t82, %logic.rend3571 ] + br i1 %t83, label %then3572, label %endif3574 +then3572: %t84 = load ptr, ptr %a1 %t85 = load %S.ast.Node, ptr %a64 %t86 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 @@ -38977,30 +39003,30 @@ then3568: call void @finch.gen.fail(ptr %t84, %S.ast.Node %t85, { ptr, i64, i64 } %t96) store { ptr, i64, i64 } %t96, ptr %a97 call void @finch_str_drop(ptr %a97) - br label %endif3570 -endif3570: + br label %endif3574 +endif3574: %t98 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 %t100 = load i64, ptr %t99 %t101 = icmp sgt i64 %t100, 0 - br i1 %t101, label %then3571, label %endif3573 -then3571: + br i1 %t101, label %then3575, label %endif3577 +then3575: %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null - br i1 %t103, label %panic3574, label %ok3575 -panic3574: + br i1 %t103, label %panic3578, label %ok3579 +panic3578: call void @finch_panic(ptr @.str.2245, i64 1516, ptr @.str.2246) unreachable -ok3575: +ok3579: %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 17 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t106 = load ptr, ptr %a1 %t107 = icmp eq ptr %t106, null - br i1 %t107, label %panic3576, label %ok3577 -panic3576: + br i1 %t107, label %panic3580, label %ok3581 +panic3580: call void @finch_panic(ptr @.str.2247, i64 1516, ptr @.str.2248) unreachable -ok3577: +ok3581: %t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 14 %t109 = load { ptr, i64, i64 }, ptr %t108 store { ptr, i64, i64 } %t109, ptr %a110 @@ -39032,24 +39058,24 @@ ok3577: store %S.gen.Template %t130, ptr %t134 store i64 %t132, ptr %t105 call void @finch.drop.S_ast_Node(ptr %a64) - br label %for.step3552 -endif3573: + br label %for.step3556 +endif3577: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null - br i1 %t136, label %panic3578, label %ok3579 -panic3578: + br i1 %t136, label %panic3582, label %ok3583 +panic3582: call void @finch_panic(ptr @.str.2249, i64 1519, ptr @.str.2250) unreachable -ok3579: +ok3583: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 16 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null - br i1 %t140, label %panic3580, label %ok3581 -panic3580: + br i1 %t140, label %panic3584, label %ok3585 +panic3584: call void @finch_panic(ptr @.str.2251, i64 1519, ptr @.str.2252) unreachable -ok3581: +ok3585: %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 14 %t142 = load { ptr, i64, i64 }, ptr %t141 store { ptr, i64, i64 } %t142, ptr %a143 @@ -39074,65 +39100,65 @@ ok3581: store %S.gen.StructDef %t156, ptr %t160 store i64 %t158, ptr %t138 call void @finch.drop.S_ast_Node(ptr %a64) - br label %for.step3552 -for.step3552: + br label %for.step3556 +for.step3556: %t161 = load i64, ptr %a41 %t162 = add i64 %t161, 1 store i64 %t162, ptr %a41 - br label %for.cond3550 -for.end3553: - br label %for.step3538 -for.step3538: + br label %for.cond3554 +for.end3557: + br label %for.step3542 +for.step3542: %t163 = load i64, ptr %a7 %t164 = add i64 %t163, 1 store i64 %t164, ptr %a7 - br label %for.cond3536 -for.end3539: + br label %for.cond3540 +for.end3543: %t165 = load ptr, ptr %a1 %t166 = icmp eq ptr %t165, null - br i1 %t166, label %panic3582, label %ok3583 -panic3582: + br i1 %t166, label %panic3586, label %ok3587 +panic3586: call void @finch_panic(ptr @.str.2253, i64 1522, ptr @.str.2254) unreachable -ok3583: +ok3587: %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 0 %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t169 = load i64, ptr %t168 store i64 0, ptr %a170 - br label %for.cond3584 -for.cond3584: + br label %for.cond3588 +for.cond3588: %t171 = load i64, ptr %a170 %t172 = icmp slt i64 %t171, %t169 - br i1 %t172, label %for.body3585, label %for.end3587 -for.body3585: + br i1 %t172, label %for.body3589, label %for.end3591 +for.body3589: %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic3588, label %ok3589 -panic3588: + br i1 %t174, label %panic3592, label %ok3593 +panic3592: call void @finch_panic(ptr @.str.2255, i64 1523, ptr @.str.2256) unreachable -ok3589: +ok3593: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 0 %t176 = load i64, ptr %a170 %t177 = load { ptr, i64, i64 }, ptr %t175 %t178 = extractvalue { ptr, i64, i64 } %t177, 1 %t179 = icmp uge i64 %t176, %t178 - br i1 %t179, label %range3590, label %inrange3591 -range3590: + br i1 %t179, label %range3594, label %inrange3595 +range3594: call void @finch_panic_index(ptr @.str.2257, i64 1523, i64 %t176, i64 %t178) unreachable -inrange3591: +inrange3595: %t180 = extractvalue { ptr, i64, i64 } %t177, 0 %t181 = getelementptr inbounds %S.ast.Program, ptr %t180, i64 %t176 %t182 = getelementptr inbounds %S.ast.Program, ptr %t181, i32 0, i32 0 %t183 = load { ptr, i64, i64 }, ptr %t182 %t184 = load ptr, ptr %a1 %t185 = icmp eq ptr %t184, null - br i1 %t185, label %panic3592, label %ok3593 -panic3592: + br i1 %t185, label %panic3596, label %ok3597 +panic3596: call void @finch_panic(ptr @.str.2258, i64 1523, ptr @.str.2259) unreachable -ok3593: +ok3597: %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 14 store { ptr, i64, i64 } %t183, ptr %a187 call void @finch_str_copy(ptr %a188, ptr %a187) @@ -39143,50 +39169,50 @@ ok3593: call void @finch_str_drop(ptr %a191) %t192 = load ptr, ptr %a1 %t193 = icmp eq ptr %t192, null - br i1 %t193, label %panic3594, label %ok3595 -panic3594: + br i1 %t193, label %panic3598, label %ok3599 +panic3598: call void @finch_panic(ptr @.str.2260, i64 1524, ptr @.str.2261) unreachable -ok3595: +ok3599: %t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 0 %t195 = load i64, ptr %a170 %t196 = load { ptr, i64, i64 }, ptr %t194 %t197 = extractvalue { ptr, i64, i64 } %t196, 1 %t198 = icmp uge i64 %t195, %t197 - br i1 %t198, label %range3596, label %inrange3597 -range3596: + br i1 %t198, label %range3600, label %inrange3601 +range3600: call void @finch_panic_index(ptr @.str.2262, i64 1524, i64 %t195, i64 %t197) unreachable -inrange3597: +inrange3601: %t199 = extractvalue { ptr, i64, i64 } %t196, 0 %t200 = getelementptr inbounds %S.ast.Program, ptr %t199, i64 %t195 %t201 = getelementptr inbounds %S.ast.Program, ptr %t200, i32 0, i32 7 %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 %t203 = load i64, ptr %t202 store i64 0, ptr %a204 - br label %for.cond3598 -for.cond3598: + br label %for.cond3602 +for.cond3602: %t205 = load i64, ptr %a204 %t206 = icmp slt i64 %t205, %t203 - br i1 %t206, label %for.body3599, label %for.end3601 -for.body3599: + br i1 %t206, label %for.body3603, label %for.end3605 +for.body3603: %t207 = load ptr, ptr %a1 %t208 = icmp eq ptr %t207, null - br i1 %t208, label %panic3602, label %ok3603 -panic3602: + br i1 %t208, label %panic3606, label %ok3607 +panic3606: call void @finch_panic(ptr @.str.2263, i64 1525, ptr @.str.2264) unreachable -ok3603: +ok3607: %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 0 %t210 = load i64, ptr %a170 %t211 = load { ptr, i64, i64 }, ptr %t209 %t212 = extractvalue { ptr, i64, i64 } %t211, 1 %t213 = icmp uge i64 %t210, %t212 - br i1 %t213, label %range3604, label %inrange3605 -range3604: + br i1 %t213, label %range3608, label %inrange3609 +range3608: call void @finch_panic_index(ptr @.str.2265, i64 1525, i64 %t210, i64 %t212) unreachable -inrange3605: +inrange3609: %t214 = extractvalue { ptr, i64, i64 } %t211, 0 %t215 = getelementptr inbounds %S.ast.Program, ptr %t214, i64 %t210 %t216 = getelementptr inbounds %S.ast.Program, ptr %t215, i32 0, i32 7 @@ -39194,11 +39220,11 @@ inrange3605: %t218 = load { ptr, i64, i64 }, ptr %t216 %t219 = extractvalue { ptr, i64, i64 } %t218, 1 %t220 = icmp uge i64 %t217, %t219 - br i1 %t220, label %range3606, label %inrange3607 -range3606: + br i1 %t220, label %range3610, label %inrange3611 +range3610: call void @finch_panic_index(ptr @.str.2266, i64 1525, i64 %t217, i64 %t219) unreachable -inrange3607: +inrange3611: %t221 = extractvalue { ptr, i64, i64 } %t218, 0 %t222 = getelementptr inbounds %S.ast.Node, ptr %t221, i64 %t217 %t223 = load %S.ast.Node, ptr %t222 @@ -39208,47 +39234,47 @@ inrange3607: store %S.ast.Node %t226, ptr %a227 %t228 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 6 %t229 = load i1, ptr %t228 - br i1 %t229, label %then3608, label %endif3610 -then3608: + br i1 %t229, label %then3612, label %endif3614 +then3612: %t230 = load ptr, ptr %a1 %t231 = load ptr, ptr %a1 %t232 = icmp eq ptr %t231, null - br i1 %t232, label %panic3611, label %ok3612 -panic3611: + br i1 %t232, label %panic3615, label %ok3616 +panic3615: call void @finch_panic(ptr @.str.2267, i64 1527, ptr @.str.2268) unreachable -ok3612: +ok3616: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 14 %t234 = load { ptr, i64, i64 }, ptr %t233 %t235 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t236 = load { ptr, i64, i64 }, ptr %t235 %t237 = call i64 @finch.gen.findEnum(ptr %t230, { ptr, i64, i64 } %t234, { ptr, i64, i64 } %t236) %t238 = icmp sge i64 %t237, 0 - br label %logic.from3613 -logic.from3613: - br i1 %t238, label %logic.end3615, label %logic.rhs3614 -logic.rhs3614: + br label %logic.from3617 +logic.from3617: + br i1 %t238, label %logic.end3619, label %logic.rhs3618 +logic.rhs3618: %t239 = load ptr, ptr %a1 %t240 = load ptr, ptr %a1 %t241 = icmp eq ptr %t240, null - br i1 %t241, label %panic3616, label %ok3617 -panic3616: + br i1 %t241, label %panic3620, label %ok3621 +panic3620: call void @finch_panic(ptr @.str.2269, i64 1527, ptr @.str.2270) unreachable -ok3617: +ok3621: %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 14 %t243 = load { ptr, i64, i64 }, ptr %t242 %t244 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t245 = load { ptr, i64, i64 }, ptr %t244 %t246 = call i64 @finch.gen.findSum(ptr %t239, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t245) %t247 = icmp sge i64 %t246, 0 - br label %logic.rend3618 -logic.rend3618: - br label %logic.end3615 -logic.end3615: - %t248 = phi i1 [ true, %logic.from3613 ], [ %t247, %logic.rend3618 ] - br i1 %t248, label %then3619, label %endif3621 -then3619: + br label %logic.rend3622 +logic.rend3622: + br label %logic.end3619 +logic.end3619: + %t248 = phi i1 [ true, %logic.from3617 ], [ %t247, %logic.rend3622 ] + br i1 %t248, label %then3623, label %endif3625 +then3623: %t249 = load ptr, ptr %a1 %t250 = load %S.ast.Node, ptr %a227 %t251 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39266,15 +39292,15 @@ then3619: call void @finch.gen.fail(ptr %t249, %S.ast.Node %t250, { ptr, i64, i64 } %t261) store { ptr, i64, i64 } %t261, ptr %a262 call void @finch_str_drop(ptr %a262) - br label %endif3621 -endif3621: + br label %endif3625 +endif3625: %t263 = load ptr, ptr %a1 %t264 = icmp eq ptr %t263, null - br i1 %t264, label %panic3622, label %ok3623 -panic3622: + br i1 %t264, label %panic3626, label %ok3627 +panic3626: call void @finch_panic(ptr @.str.2273, i64 1530, ptr @.str.2274) unreachable -ok3623: +ok3627: %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 14 %t266 = load { ptr, i64, i64 }, ptr %t265 store { ptr, i64, i64 } %t266, ptr %a267 @@ -39291,14 +39317,14 @@ ok3623: store i64 1, ptr %a278 %t279 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 store i64 0, ptr %a280 - br label %each.cond3624 -each.cond3624: + br label %each.cond3628 +each.cond3628: %t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %t279, i32 0, i32 1 %t282 = load i64, ptr %t281 %t283 = load i64, ptr %a280 %t284 = icmp slt i64 %t283, %t282 - br i1 %t284, label %each.body3625, label %each.end3627 -each.body3625: + br i1 %t284, label %each.body3629, label %each.end3631 +each.body3629: %t285 = load ptr, ptr %t279 %t286 = getelementptr inbounds %S.ast.Node, ptr %t285, i64 %t283 %t287 = load %S.ast.Node, ptr %t286 @@ -39311,31 +39337,31 @@ each.body3625: %t294 = load i64, ptr %t290 %t295 = load ptr, ptr %t289 store i64 0, ptr %a296 - br label %find.cond3628 -find.cond3628: + br label %find.cond3632 +find.cond3632: %t297 = load i64, ptr %a296 %t298 = icmp slt i64 %t297, %t294 - br i1 %t298, label %find.body3629, label %find.end3632 -find.body3629: + br i1 %t298, label %find.body3633, label %find.end3636 +find.body3633: %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t295, i64 %t297 %t300 = load { ptr, i64, i64 }, ptr %t299 store { ptr, i64, i64 } %t300, ptr %a301 store { ptr, i64, i64 } %t292, ptr %a302 %t303 = call i32 @finch_str_eq(ptr %a301, ptr %a302) %t304 = icmp ne i32 %t303, 0 - br i1 %t304, label %find.hit3630, label %find.next3631 -find.hit3630: + br i1 %t304, label %find.hit3634, label %find.next3635 +find.hit3634: store i64 %t297, ptr %a293 - br label %find.end3632 -find.next3631: + br label %find.end3636 +find.next3635: %t305 = add i64 %t297, 1 store i64 %t305, ptr %a296 - br label %find.cond3628 -find.end3632: + br label %find.cond3632 +find.end3636: %t306 = load i64, ptr %a293 %t307 = icmp sge i64 %t306, 0 - br i1 %t307, label %then3633, label %endif3635 -then3633: + br i1 %t307, label %then3637, label %endif3639 +then3637: %t308 = load ptr, ptr %a1 %t309 = load %S.ast.Node, ptr %a288 %t310 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39367,8 +39393,8 @@ then3633: call void @finch.gen.fail(ptr %t308, %S.ast.Node %t309, { ptr, i64, i64 } %t332) store { ptr, i64, i64 } %t332, ptr %a333 call void @finch_str_drop(ptr %a333) - br label %endif3635 -endif3635: + br label %endif3639 +endif3639: %t334 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 %t335 = getelementptr inbounds { ptr, i64, i64 }, ptr %t334, i32 0, i32 1 %t336 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 @@ -39411,20 +39437,20 @@ endif3635: %t364 = load i64, ptr %a278 %t365 = add i64 %t364, %t363 store i64 %t365, ptr %a278 - br label %each.step3626 -each.step3626: + br label %each.step3630 +each.step3630: %t366 = load i64, ptr %a280 %t367 = add i64 %t366, 1 store i64 %t367, ptr %a280 - br label %each.cond3624 -each.end3627: + br label %each.cond3628 +each.end3631: %t368 = load ptr, ptr %a1 %t369 = icmp eq ptr %t368, null - br i1 %t369, label %panic3636, label %ok3637 -panic3636: + br i1 %t369, label %panic3640, label %ok3641 +panic3640: call void @finch_panic(ptr @.str.2278, i64 1541, ptr @.str.2279) unreachable -ok3637: +ok3641: %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 22 %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 %t372 = load %S.gen.SumDef, ptr %a277 @@ -39440,47 +39466,47 @@ ok3637: store i64 %t377, ptr %t371 call void @finch.drop.S_gen_SumDef(ptr %a277) call void @finch.drop.S_ast_Node(ptr %a227) - br label %for.step3600 -endif3610: + br label %for.step3604 +endif3614: %t380 = load ptr, ptr %a1 %t381 = load ptr, ptr %a1 %t382 = icmp eq ptr %t381, null - br i1 %t382, label %panic3638, label %ok3639 -panic3638: + br i1 %t382, label %panic3642, label %ok3643 +panic3642: call void @finch_panic(ptr @.str.2280, i64 1544, ptr @.str.2281) unreachable -ok3639: +ok3643: %t383 = getelementptr inbounds %S.gen.Gen, ptr %t381, i32 0, i32 14 %t384 = load { ptr, i64, i64 }, ptr %t383 %t385 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t386 = load { ptr, i64, i64 }, ptr %t385 %t387 = call i64 @finch.gen.findEnum(ptr %t380, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t386) %t388 = icmp sge i64 %t387, 0 - br label %logic.from3640 -logic.from3640: - br i1 %t388, label %logic.end3642, label %logic.rhs3641 -logic.rhs3641: + br label %logic.from3644 +logic.from3644: + br i1 %t388, label %logic.end3646, label %logic.rhs3645 +logic.rhs3645: %t389 = load ptr, ptr %a1 %t390 = load ptr, ptr %a1 %t391 = icmp eq ptr %t390, null - br i1 %t391, label %panic3643, label %ok3644 -panic3643: + br i1 %t391, label %panic3647, label %ok3648 +panic3647: call void @finch_panic(ptr @.str.2282, i64 1544, ptr @.str.2283) unreachable -ok3644: +ok3648: %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 14 %t393 = load { ptr, i64, i64 }, ptr %t392 %t394 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 %t395 = load { ptr, i64, i64 }, ptr %t394 %t396 = call i64 @finch.gen.findStruct(ptr %t389, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t395) %t397 = icmp sge i64 %t396, 0 - br label %logic.rend3645 -logic.rend3645: - br label %logic.end3642 -logic.end3642: - %t398 = phi i1 [ true, %logic.from3640 ], [ %t397, %logic.rend3645 ] - br i1 %t398, label %then3646, label %endif3648 -then3646: + br label %logic.rend3649 +logic.rend3649: + br label %logic.end3646 +logic.end3646: + %t398 = phi i1 [ true, %logic.from3644 ], [ %t397, %logic.rend3649 ] + br i1 %t398, label %then3650, label %endif3652 +then3650: %t399 = load ptr, ptr %a1 %t400 = load %S.ast.Node, ptr %a227 %t401 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39498,15 +39524,15 @@ then3646: call void @finch.gen.fail(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t411) store { ptr, i64, i64 } %t411, ptr %a412 call void @finch_str_drop(ptr %a412) - br label %endif3648 -endif3648: + br label %endif3652 +endif3652: %t413 = load ptr, ptr %a1 %t414 = icmp eq ptr %t413, null - br i1 %t414, label %panic3649, label %ok3650 -panic3649: + br i1 %t414, label %panic3653, label %ok3654 +panic3653: call void @finch_panic(ptr @.str.2286, i64 1547, ptr @.str.2287) unreachable -ok3650: +ok3654: %t415 = getelementptr inbounds %S.gen.Gen, ptr %t413, i32 0, i32 14 %t416 = load { ptr, i64, i64 }, ptr %t415 store { ptr, i64, i64 } %t416, ptr %a417 @@ -39523,14 +39549,14 @@ ok3650: store i64 0, ptr %a428 %t429 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 store i64 0, ptr %a430 - br label %each.cond3651 -each.cond3651: + br label %each.cond3655 +each.cond3655: %t431 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i32 0, i32 1 %t432 = load i64, ptr %t431 %t433 = load i64, ptr %a430 %t434 = icmp slt i64 %t433, %t432 - br i1 %t434, label %each.body3652, label %each.end3654 -each.body3652: + br i1 %t434, label %each.body3656, label %each.end3658 +each.body3656: %t435 = load ptr, ptr %t429 %t436 = getelementptr inbounds %S.ast.Node, ptr %t435, i64 %t433 %t437 = load %S.ast.Node, ptr %t436 @@ -39539,15 +39565,15 @@ each.body3652: %t440 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 %t441 = load i64, ptr %t440 %t442 = icmp sgt i64 %t441, 0 - br i1 %t442, label %then3655, label %endif3657 -then3655: + br i1 %t442, label %then3659, label %endif3661 +then3659: %t443 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 %t444 = load { ptr, i64, i64 }, ptr %t443 store { ptr, i64, i64 } %t444, ptr %a445 %t446 = call i64 @finch_str_to_int(ptr %a445, ptr @.str.2288, i64 1551) store i64 %t446, ptr %a428 - br label %endif3657 -endif3657: + br label %endif3661 +endif3661: %t447 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 %t448 = getelementptr inbounds { ptr, i64, i64 }, ptr %t447, i32 0, i32 1 %t449 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 @@ -39556,31 +39582,31 @@ endif3657: %t452 = load i64, ptr %t448 %t453 = load ptr, ptr %t447 store i64 0, ptr %a454 - br label %find.cond3658 -find.cond3658: + br label %find.cond3662 +find.cond3662: %t455 = load i64, ptr %a454 %t456 = icmp slt i64 %t455, %t452 - br i1 %t456, label %find.body3659, label %find.end3662 -find.body3659: + br i1 %t456, label %find.body3663, label %find.end3666 +find.body3663: %t457 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t455 %t458 = load { ptr, i64, i64 }, ptr %t457 store { ptr, i64, i64 } %t458, ptr %a459 store { ptr, i64, i64 } %t450, ptr %a460 %t461 = call i32 @finch_str_eq(ptr %a459, ptr %a460) %t462 = icmp ne i32 %t461, 0 - br i1 %t462, label %find.hit3660, label %find.next3661 -find.hit3660: + br i1 %t462, label %find.hit3664, label %find.next3665 +find.hit3664: store i64 %t455, ptr %a451 - br label %find.end3662 -find.next3661: + br label %find.end3666 +find.next3665: %t463 = add i64 %t455, 1 store i64 %t463, ptr %a454 - br label %find.cond3658 -find.end3662: + br label %find.cond3662 +find.end3666: %t464 = load i64, ptr %a451 %t465 = icmp sge i64 %t464, 0 - br i1 %t465, label %then3663, label %endif3665 -then3663: + br i1 %t465, label %then3667, label %endif3669 +then3667: %t466 = load ptr, ptr %a1 %t467 = load %S.ast.Node, ptr %a438 %t468 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39612,8 +39638,8 @@ then3663: call void @finch.gen.fail(ptr %t466, %S.ast.Node %t467, { ptr, i64, i64 } %t490) store { ptr, i64, i64 } %t490, ptr %a491 call void @finch_str_drop(ptr %a491) - br label %endif3665 -endif3665: + br label %endif3669 +endif3669: %t492 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t492, i32 0, i32 1 %t494 = load i64, ptr %a428 @@ -39621,28 +39647,28 @@ endif3665: %t496 = load i64, ptr %t493 %t497 = load ptr, ptr %t492 store i64 0, ptr %a498 - br label %find.cond3666 -find.cond3666: + br label %find.cond3670 +find.cond3670: %t499 = load i64, ptr %a498 %t500 = icmp slt i64 %t499, %t496 - br i1 %t500, label %find.body3667, label %find.end3670 -find.body3667: + br i1 %t500, label %find.body3671, label %find.end3674 +find.body3671: %t501 = getelementptr inbounds i64, ptr %t497, i64 %t499 %t502 = load i64, ptr %t501 %t503 = icmp eq i64 %t502, %t494 - br i1 %t503, label %find.hit3668, label %find.next3669 -find.hit3668: + br i1 %t503, label %find.hit3672, label %find.next3673 +find.hit3672: store i64 %t499, ptr %a495 - br label %find.end3670 -find.next3669: + br label %find.end3674 +find.next3673: %t504 = add i64 %t499, 1 store i64 %t504, ptr %a498 - br label %find.cond3666 -find.end3670: + br label %find.cond3670 +find.end3674: %t505 = load i64, ptr %a495 %t506 = icmp sge i64 %t505, 0 - br i1 %t506, label %then3671, label %endif3673 -then3671: + br i1 %t506, label %then3675, label %endif3677 +then3675: %t507 = load ptr, ptr %a1 %t508 = load %S.ast.Node, ptr %a438 %t509 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 @@ -39677,8 +39703,8 @@ then3671: call void @finch.gen.fail(ptr %t507, %S.ast.Node %t508, { ptr, i64, i64 } %t533) store { ptr, i64, i64 } %t533, ptr %a534 call void @finch_str_drop(ptr %a534) - br label %endif3673 -endif3673: + br label %endif3677 +endif3677: %t535 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 %t536 = getelementptr inbounds { ptr, i64, i64 }, ptr %t535, i32 0, i32 1 %t537 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 @@ -39706,20 +39732,20 @@ endif3673: %t553 = load i64, ptr %a428 %t554 = add i64 %t553, 1 store i64 %t554, ptr %a428 - br label %each.step3653 -each.step3653: + br label %each.step3657 +each.step3657: %t555 = load i64, ptr %a430 %t556 = add i64 %t555, 1 store i64 %t556, ptr %a430 - br label %each.cond3651 -each.end3654: + br label %each.cond3655 +each.end3658: %t557 = load ptr, ptr %a1 %t558 = icmp eq ptr %t557, null - br i1 %t558, label %panic3674, label %ok3675 -panic3674: + br i1 %t558, label %panic3678, label %ok3679 +panic3678: call void @finch_panic(ptr @.str.2295, i64 1563, ptr @.str.2296) unreachable -ok3675: +ok3679: %t559 = getelementptr inbounds %S.gen.Gen, ptr %t557, i32 0, i32 21 %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 %t561 = load %S.gen.EnumDef, ptr %a427 @@ -39735,66 +39761,66 @@ ok3675: store i64 %t566, ptr %t560 call void @finch.drop.S_gen_EnumDef(ptr %a427) call void @finch.drop.S_ast_Node(ptr %a227) - br label %for.step3600 -for.step3600: + br label %for.step3604 +for.step3604: %t569 = load i64, ptr %a204 %t570 = add i64 %t569, 1 store i64 %t570, ptr %a204 - br label %for.cond3598 -for.end3601: - br label %for.step3586 -for.step3586: + br label %for.cond3602 +for.end3605: + br label %for.step3590 +for.step3590: %t571 = load i64, ptr %a170 %t572 = add i64 %t571, 1 store i64 %t572, ptr %a170 - br label %for.cond3584 -for.end3587: + br label %for.cond3588 +for.end3591: %t573 = load ptr, ptr %a1 %t574 = icmp eq ptr %t573, null - br i1 %t574, label %panic3676, label %ok3677 -panic3676: + br i1 %t574, label %panic3680, label %ok3681 +panic3680: call void @finch_panic(ptr @.str.2297, i64 1566, ptr @.str.2298) unreachable -ok3677: +ok3681: %t575 = getelementptr inbounds %S.gen.Gen, ptr %t573, i32 0, i32 26 %t576 = getelementptr inbounds %S.cimport.CImports, ptr %t575, i32 0, i32 4 %t577 = getelementptr inbounds { ptr, i64, i64 }, ptr %t576, i32 0, i32 1 %t578 = load i64, ptr %t577 store i64 0, ptr %a579 - br label %for.cond3678 -for.cond3678: + br label %for.cond3682 +for.cond3682: %t580 = load i64, ptr %a579 %t581 = icmp slt i64 %t580, %t578 - br i1 %t581, label %for.body3679, label %for.end3681 -for.body3679: + br i1 %t581, label %for.body3683, label %for.end3685 +for.body3683: %t582 = load ptr, ptr %a1 %t583 = icmp eq ptr %t582, null - br i1 %t583, label %panic3682, label %ok3683 -panic3682: + br i1 %t583, label %panic3686, label %ok3687 +panic3686: call void @finch_panic(ptr @.str.2299, i64 1567, ptr @.str.2300) unreachable -ok3683: +ok3687: %t584 = getelementptr inbounds %S.gen.Gen, ptr %t582, i32 0, i32 16 %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i32 0, i32 1 %t586 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } { ptr @.str.2301, i64 1, i64 0 }, 0 %t587 = load ptr, ptr %a1 %t588 = icmp eq ptr %t587, null - br i1 %t588, label %panic3684, label %ok3685 -panic3684: + br i1 %t588, label %panic3688, label %ok3689 +panic3688: call void @finch_panic(ptr @.str.2302, i64 1567, ptr @.str.2303) unreachable -ok3685: +ok3689: %t589 = getelementptr inbounds %S.gen.Gen, ptr %t587, i32 0, i32 26 %t590 = getelementptr inbounds %S.cimport.CImports, ptr %t589, i32 0, i32 4 %t591 = load i64, ptr %a579 %t592 = load { ptr, i64, i64 }, ptr %t590 %t593 = extractvalue { ptr, i64, i64 } %t592, 1 %t594 = icmp uge i64 %t591, %t593 - br i1 %t594, label %range3686, label %inrange3687 -range3686: + br i1 %t594, label %range3690, label %inrange3691 +range3690: call void @finch_panic_index(ptr @.str.2304, i64 1567, i64 %t591, i64 %t593) unreachable -inrange3687: +inrange3691: %t595 = extractvalue { ptr, i64, i64 } %t592, 0 %t596 = getelementptr inbounds { ptr, i64, i64 }, ptr %t595, i64 %t591 %t597 = load { ptr, i64, i64 }, ptr %t596 @@ -39813,85 +39839,85 @@ inrange3687: %t609 = getelementptr inbounds %S.gen.StructDef, ptr %t608, i64 %t606 store %S.gen.StructDef %t605, ptr %t609 store i64 %t607, ptr %t585 - br label %for.step3680 -for.step3680: + br label %for.step3684 +for.step3684: %t610 = load i64, ptr %a579 %t611 = add i64 %t610, 1 store i64 %t611, ptr %a579 - br label %for.cond3678 -for.end3681: + br label %for.cond3682 +for.end3685: %t612 = load ptr, ptr %a1 %t613 = icmp eq ptr %t612, null - br i1 %t613, label %panic3688, label %ok3689 -panic3688: + br i1 %t613, label %panic3692, label %ok3693 +panic3692: call void @finch_panic(ptr @.str.2305, i64 1569, ptr @.str.2306) unreachable -ok3689: +ok3693: %t614 = getelementptr inbounds %S.gen.Gen, ptr %t612, i32 0, i32 16 %t615 = getelementptr inbounds { ptr, i64, i64 }, ptr %t614, i32 0, i32 1 %t616 = load i64, ptr %t615 store i64 0, ptr %a617 - br label %for.cond3690 -for.cond3690: + br label %for.cond3694 +for.cond3694: %t618 = load i64, ptr %a617 %t619 = icmp slt i64 %t618, %t616 - br i1 %t619, label %for.body3691, label %for.end3693 -for.body3691: + br i1 %t619, label %for.body3695, label %for.end3697 +for.body3695: %t620 = load ptr, ptr %a1 %t621 = load i64, ptr %a617 call void @finch.gen.resolveStruct(ptr %t620, i64 %t621) - br label %for.step3692 -for.step3692: + br label %for.step3696 +for.step3696: %t622 = load i64, ptr %a617 %t623 = add i64 %t622, 1 store i64 %t623, ptr %a617 - br label %for.cond3690 -for.end3693: + br label %for.cond3694 +for.end3697: %t624 = load ptr, ptr %a1 %t625 = icmp eq ptr %t624, null - br i1 %t625, label %panic3694, label %ok3695 -panic3694: + br i1 %t625, label %panic3698, label %ok3699 +panic3698: call void @finch_panic(ptr @.str.2307, i64 1572, ptr @.str.2308) unreachable -ok3695: +ok3699: %t626 = getelementptr inbounds %S.gen.Gen, ptr %t624, i32 0, i32 0 %t627 = getelementptr inbounds { ptr, i64, i64 }, ptr %t626, i32 0, i32 1 %t628 = load i64, ptr %t627 store i64 0, ptr %a629 - br label %for.cond3696 -for.cond3696: + br label %for.cond3700 +for.cond3700: %t630 = load i64, ptr %a629 %t631 = icmp slt i64 %t630, %t628 - br i1 %t631, label %for.body3697, label %for.end3699 -for.body3697: + br i1 %t631, label %for.body3701, label %for.end3703 +for.body3701: %t632 = load ptr, ptr %a1 %t633 = icmp eq ptr %t632, null - br i1 %t633, label %panic3700, label %ok3701 -panic3700: + br i1 %t633, label %panic3704, label %ok3705 +panic3704: call void @finch_panic(ptr @.str.2309, i64 1573, ptr @.str.2310) unreachable -ok3701: +ok3705: %t634 = getelementptr inbounds %S.gen.Gen, ptr %t632, i32 0, i32 0 %t635 = load i64, ptr %a629 %t636 = load { ptr, i64, i64 }, ptr %t634 %t637 = extractvalue { ptr, i64, i64 } %t636, 1 %t638 = icmp uge i64 %t635, %t637 - br i1 %t638, label %range3702, label %inrange3703 -range3702: + br i1 %t638, label %range3706, label %inrange3707 +range3706: call void @finch_panic_index(ptr @.str.2311, i64 1573, i64 %t635, i64 %t637) unreachable -inrange3703: +inrange3707: %t639 = extractvalue { ptr, i64, i64 } %t636, 0 %t640 = getelementptr inbounds %S.ast.Program, ptr %t639, i64 %t635 %t641 = getelementptr inbounds %S.ast.Program, ptr %t640, i32 0, i32 0 %t642 = load { ptr, i64, i64 }, ptr %t641 %t643 = load ptr, ptr %a1 %t644 = icmp eq ptr %t643, null - br i1 %t644, label %panic3704, label %ok3705 -panic3704: + br i1 %t644, label %panic3708, label %ok3709 +panic3708: call void @finch_panic(ptr @.str.2312, i64 1573, ptr @.str.2313) unreachable -ok3705: +ok3709: %t645 = getelementptr inbounds %S.gen.Gen, ptr %t643, i32 0, i32 14 store { ptr, i64, i64 } %t642, ptr %a646 call void @finch_str_copy(ptr %a647, ptr %a646) @@ -39902,50 +39928,50 @@ ok3705: call void @finch_str_drop(ptr %a650) %t651 = load ptr, ptr %a1 %t652 = icmp eq ptr %t651, null - br i1 %t652, label %panic3706, label %ok3707 -panic3706: + br i1 %t652, label %panic3710, label %ok3711 +panic3710: call void @finch_panic(ptr @.str.2314, i64 1574, ptr @.str.2315) unreachable -ok3707: +ok3711: %t653 = getelementptr inbounds %S.gen.Gen, ptr %t651, i32 0, i32 0 %t654 = load i64, ptr %a629 %t655 = load { ptr, i64, i64 }, ptr %t653 %t656 = extractvalue { ptr, i64, i64 } %t655, 1 %t657 = icmp uge i64 %t654, %t656 - br i1 %t657, label %range3708, label %inrange3709 -range3708: + br i1 %t657, label %range3712, label %inrange3713 +range3712: call void @finch_panic_index(ptr @.str.2316, i64 1574, i64 %t654, i64 %t656) unreachable -inrange3709: +inrange3713: %t658 = extractvalue { ptr, i64, i64 } %t655, 0 %t659 = getelementptr inbounds %S.ast.Program, ptr %t658, i64 %t654 %t660 = getelementptr inbounds %S.ast.Program, ptr %t659, i32 0, i32 8 %t661 = getelementptr inbounds { ptr, i64, i64 }, ptr %t660, i32 0, i32 1 %t662 = load i64, ptr %t661 store i64 0, ptr %a663 - br label %for.cond3710 -for.cond3710: + br label %for.cond3714 +for.cond3714: %t664 = load i64, ptr %a663 %t665 = icmp slt i64 %t664, %t662 - br i1 %t665, label %for.body3711, label %for.end3713 -for.body3711: + br i1 %t665, label %for.body3715, label %for.end3717 +for.body3715: %t666 = load ptr, ptr %a1 %t667 = icmp eq ptr %t666, null - br i1 %t667, label %panic3714, label %ok3715 -panic3714: + br i1 %t667, label %panic3718, label %ok3719 +panic3718: call void @finch_panic(ptr @.str.2317, i64 1575, ptr @.str.2318) unreachable -ok3715: +ok3719: %t668 = getelementptr inbounds %S.gen.Gen, ptr %t666, i32 0, i32 0 %t669 = load i64, ptr %a629 %t670 = load { ptr, i64, i64 }, ptr %t668 %t671 = extractvalue { ptr, i64, i64 } %t670, 1 %t672 = icmp uge i64 %t669, %t671 - br i1 %t672, label %range3716, label %inrange3717 -range3716: + br i1 %t672, label %range3720, label %inrange3721 +range3720: call void @finch_panic_index(ptr @.str.2319, i64 1575, i64 %t669, i64 %t671) unreachable -inrange3717: +inrange3721: %t673 = extractvalue { ptr, i64, i64 } %t670, 0 %t674 = getelementptr inbounds %S.ast.Program, ptr %t673, i64 %t669 %t675 = getelementptr inbounds %S.ast.Program, ptr %t674, i32 0, i32 8 @@ -39953,11 +39979,11 @@ inrange3717: %t677 = load { ptr, i64, i64 }, ptr %t675 %t678 = extractvalue { ptr, i64, i64 } %t677, 1 %t679 = icmp uge i64 %t676, %t678 - br i1 %t679, label %range3718, label %inrange3719 -range3718: + br i1 %t679, label %range3722, label %inrange3723 +range3722: call void @finch_panic_index(ptr @.str.2320, i64 1575, i64 %t676, i64 %t678) unreachable -inrange3719: +inrange3723: %t680 = extractvalue { ptr, i64, i64 } %t677, 0 %t681 = getelementptr inbounds %S.ast.Node, ptr %t680, i64 %t676 %t682 = load %S.ast.Node, ptr %t681 @@ -39969,16 +39995,16 @@ inrange3719: %t688 = getelementptr inbounds { ptr, i64, i64 }, ptr %t687, i32 0, i32 1 %t689 = load i64, ptr %t688 %t690 = icmp sgt i64 %t689, 0 - br i1 %t690, label %then3720, label %endif3722 -then3720: + br i1 %t690, label %then3724, label %endif3726 +then3724: %t691 = load ptr, ptr %a1 %t692 = load ptr, ptr %a1 %t693 = icmp eq ptr %t692, null - br i1 %t693, label %panic3723, label %ok3724 -panic3723: + br i1 %t693, label %panic3727, label %ok3728 +panic3727: call void @finch_panic(ptr @.str.2321, i64 1578, ptr @.str.2322) unreachable -ok3724: +ok3728: %t694 = getelementptr inbounds %S.gen.Gen, ptr %t692, i32 0, i32 14 %t695 = load { ptr, i64, i64 }, ptr %t694 %t696 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 @@ -39987,8 +40013,8 @@ ok3724: %t699 = load { ptr, i64, i64 }, ptr %t698 %t700 = call i64 @finch.gen.findTemplate(ptr %t691, { ptr, i64, i64 } %t695, { ptr, i64, i64 } %t697, { ptr, i64, i64 } %t699, i1 false) %t701 = icmp sge i64 %t700, 0 - br i1 %t701, label %then3725, label %endif3727 -then3725: + br i1 %t701, label %then3729, label %endif3731 +then3729: %t702 = load ptr, ptr %a1 %t703 = load %S.ast.Node, ptr %a686 %t704 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 @@ -40006,37 +40032,37 @@ then3725: call void @finch.gen.fail(ptr %t702, %S.ast.Node %t703, { ptr, i64, i64 } %t714) store { ptr, i64, i64 } %t714, ptr %a715 call void @finch_str_drop(ptr %a715) - br label %endif3727 -endif3727: + br label %endif3731 +endif3731: %t716 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t717 = getelementptr inbounds { ptr, i64, i64 }, ptr %t716, i32 0, i32 1 %t718 = load i64, ptr %t717 %t719 = icmp sgt i64 %t718, 0 - br label %logic.from3728 -logic.from3728: - br i1 %t719, label %logic.rhs3729, label %logic.end3730 -logic.rhs3729: + br label %logic.from3732 +logic.from3732: + br i1 %t719, label %logic.rhs3733, label %logic.end3734 +logic.rhs3733: %t720 = load ptr, ptr %a1 %t721 = load ptr, ptr %a1 %t722 = icmp eq ptr %t721, null - br i1 %t722, label %panic3731, label %ok3732 -panic3731: + br i1 %t722, label %panic3735, label %ok3736 +panic3735: call void @finch_panic(ptr @.str.2325, i64 1581, ptr @.str.2326) unreachable -ok3732: +ok3736: %t723 = getelementptr inbounds %S.gen.Gen, ptr %t721, i32 0, i32 14 %t724 = load { ptr, i64, i64 }, ptr %t723 %t725 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t726 = load { ptr, i64, i64 }, ptr %t725 %t727 = call i64 @finch.gen.findTemplate(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t726, { ptr, i64, i64 } { ptr @.str.2327, i64 0, i64 0 }, i1 true) %t728 = icmp slt i64 %t727, 0 - br label %logic.rend3733 -logic.rend3733: - br label %logic.end3730 -logic.end3730: - %t729 = phi i1 [ false, %logic.from3728 ], [ %t728, %logic.rend3733 ] - br i1 %t729, label %then3734, label %endif3736 -then3734: + br label %logic.rend3737 +logic.rend3737: + br label %logic.end3734 +logic.end3734: + %t729 = phi i1 [ false, %logic.from3732 ], [ %t728, %logic.rend3737 ] + br i1 %t729, label %then3738, label %endif3740 +then3738: %t730 = load ptr, ptr %a1 %t731 = load %S.ast.Node, ptr %a686 %t732 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40054,24 +40080,24 @@ then3734: call void @finch.gen.fail(ptr %t730, %S.ast.Node %t731, { ptr, i64, i64 } %t742) store { ptr, i64, i64 } %t742, ptr %a743 call void @finch_str_drop(ptr %a743) - br label %endif3736 -endif3736: + br label %endif3740 +endif3740: %t744 = load ptr, ptr %a1 %t745 = icmp eq ptr %t744, null - br i1 %t745, label %panic3737, label %ok3738 -panic3737: + br i1 %t745, label %panic3741, label %ok3742 +panic3741: call void @finch_panic(ptr @.str.2330, i64 1584, ptr @.str.2331) unreachable -ok3738: +ok3742: %t746 = getelementptr inbounds %S.gen.Gen, ptr %t744, i32 0, i32 17 %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i32 0, i32 1 %t748 = load ptr, ptr %a1 %t749 = icmp eq ptr %t748, null - br i1 %t749, label %panic3739, label %ok3740 -panic3739: + br i1 %t749, label %panic3743, label %ok3744 +panic3743: call void @finch_panic(ptr @.str.2332, i64 1584, ptr @.str.2333) unreachable -ok3740: +ok3744: %t750 = getelementptr inbounds %S.gen.Gen, ptr %t748, i32 0, i32 14 %t751 = load { ptr, i64, i64 }, ptr %t750 store { ptr, i64, i64 } %t751, ptr %a752 @@ -40108,15 +40134,15 @@ ok3740: store %S.gen.Template %t777, ptr %t781 store i64 %t779, ptr %t747 call void @finch.drop.S_ast_Node(ptr %a686) - br label %for.step3712 -endif3722: + br label %for.step3716 +endif3726: %t782 = load ptr, ptr %a1 %t783 = icmp eq ptr %t782, null - br i1 %t783, label %panic3741, label %ok3742 -panic3741: + br i1 %t783, label %panic3745, label %ok3746 +panic3745: call void @finch_panic(ptr @.str.2334, i64 1587, ptr @.str.2335) unreachable -ok3742: +ok3746: %t784 = getelementptr inbounds %S.gen.Gen, ptr %t782, i32 0, i32 14 %t785 = load { ptr, i64, i64 }, ptr %t784 store { ptr, i64, i64 } %t785, ptr %a786 @@ -40128,31 +40154,31 @@ ok3742: %t792 = getelementptr inbounds { ptr, i64, i64 }, ptr %t791, i32 0, i32 1 %t793 = load i64, ptr %t792 %t794 = icmp sgt i64 %t793, 0 - br label %logic.from3743 -logic.from3743: - br i1 %t794, label %logic.rhs3744, label %logic.end3745 -logic.rhs3744: + br label %logic.from3747 +logic.from3747: + br i1 %t794, label %logic.rhs3748, label %logic.end3749 +logic.rhs3748: %t795 = load ptr, ptr %a1 %t796 = load ptr, ptr %a1 %t797 = icmp eq ptr %t796, null - br i1 %t797, label %panic3746, label %ok3747 -panic3746: + br i1 %t797, label %panic3750, label %ok3751 +panic3750: call void @finch_panic(ptr @.str.2336, i64 1589, ptr @.str.2337) unreachable -ok3747: +ok3751: %t798 = getelementptr inbounds %S.gen.Gen, ptr %t796, i32 0, i32 14 %t799 = load { ptr, i64, i64 }, ptr %t798 %t800 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t801 = load { ptr, i64, i64 }, ptr %t800 %t802 = call i64 @finch.gen.findEnum(ptr %t795, { ptr, i64, i64 } %t799, { ptr, i64, i64 } %t801) %t803 = icmp sge i64 %t802, 0 - br label %logic.rend3748 -logic.rend3748: - br label %logic.end3745 -logic.end3745: - %t804 = phi i1 [ false, %logic.from3743 ], [ %t803, %logic.rend3748 ] - br i1 %t804, label %then3749, label %else3750 -then3749: + br label %logic.rend3752 +logic.rend3752: + br label %logic.end3749 +logic.end3749: + %t804 = phi i1 [ false, %logic.from3747 ], [ %t803, %logic.rend3752 ] + br i1 %t804, label %then3753, label %else3754 +then3753: store i1 true, ptr %a790 %t805 = load ptr, ptr %a1 %t806 = load { ptr, i64, i64 }, ptr %a789 @@ -40162,8 +40188,8 @@ then3749: %t810 = load { ptr, i64, i64 }, ptr %t809 %t811 = call i64 @finch.gen.findMethod(ptr %t805, { ptr, i64, i64 } %t806, { ptr, i64, i64 } %t808, { ptr, i64, i64 } %t810) %t812 = icmp sge i64 %t811, 0 - br i1 %t812, label %then3752, label %endif3754 -then3752: + br i1 %t812, label %then3756, label %endif3758 +then3756: %t813 = load ptr, ptr %a1 %t814 = load %S.ast.Node, ptr %a686 %t815 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40195,24 +40221,24 @@ then3752: call void @finch.gen.fail(ptr %t813, %S.ast.Node %t814, { ptr, i64, i64 } %t837) store { ptr, i64, i64 } %t837, ptr %a838 call void @finch_str_drop(ptr %a838) - br label %endif3754 -endif3754: - br label %endif3751 -else3750: + br label %endif3758 +endif3758: + br label %endif3755 +else3754: %t839 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t840 = getelementptr inbounds { ptr, i64, i64 }, ptr %t839, i32 0, i32 1 %t841 = load i64, ptr %t840 %t842 = icmp sgt i64 %t841, 0 - br i1 %t842, label %then3755, label %else3756 -then3755: + br i1 %t842, label %then3759, label %else3760 +then3759: %t843 = load ptr, ptr %a1 %t844 = load ptr, ptr %a1 %t845 = icmp eq ptr %t844, null - br i1 %t845, label %panic3758, label %ok3759 -panic3758: + br i1 %t845, label %panic3762, label %ok3763 +panic3762: call void @finch_panic(ptr @.str.2341, i64 1595, ptr @.str.2342) unreachable -ok3759: +ok3763: %t846 = getelementptr inbounds %S.gen.Gen, ptr %t844, i32 0, i32 14 %t847 = load { ptr, i64, i64 }, ptr %t846 %t848 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40221,22 +40247,22 @@ ok3759: store i64 %t850, ptr %a851 %t852 = load i64, ptr %a851 %t853 = icmp slt i64 %t852, 0 - br label %logic.from3760 -logic.from3760: - br i1 %t853, label %logic.rhs3761, label %logic.end3762 -logic.rhs3761: + br label %logic.from3764 +logic.from3764: + br i1 %t853, label %logic.rhs3765, label %logic.end3766 +logic.rhs3765: %t854 = load ptr, ptr %a1 %t855 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t856 = load { ptr, i64, i64 }, ptr %t855 %t857 = call i64 @finch.gen.findStruct(ptr %t854, { ptr, i64, i64 } { ptr @.str.2343, i64 1, i64 0 }, { ptr, i64, i64 } %t856) %t858 = icmp sge i64 %t857, 0 - br label %logic.rend3763 -logic.rend3763: - br label %logic.end3762 -logic.end3762: - %t859 = phi i1 [ false, %logic.from3760 ], [ %t858, %logic.rend3763 ] - br i1 %t859, label %then3764, label %endif3766 -then3764: + br label %logic.rend3767 +logic.rend3767: + br label %logic.end3766 +logic.end3766: + %t859 = phi i1 [ false, %logic.from3764 ], [ %t858, %logic.rend3767 ] + br i1 %t859, label %then3768, label %endif3770 +then3768: %t860 = load ptr, ptr %a1 %t861 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t862 = load { ptr, i64, i64 }, ptr %t861 @@ -40246,12 +40272,12 @@ then3764: store { ptr, i64, i64 } { ptr @.str.2345, i64 1, i64 0 }, ptr %a789 store { ptr, i64, i64 } %t864, ptr %a865 call void @finch_str_drop(ptr %a865) - br label %endif3766 -endif3766: + br label %endif3770 +endif3770: %t866 = load i64, ptr %a851 %t867 = icmp slt i64 %t866, 0 - br i1 %t867, label %then3767, label %endif3769 -then3767: + br i1 %t867, label %then3771, label %endif3773 +then3771: %t868 = load ptr, ptr %a1 %t869 = load %S.ast.Node, ptr %a686 %t870 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40269,8 +40295,8 @@ then3767: call void @finch.gen.fail(ptr %t868, %S.ast.Node %t869, { ptr, i64, i64 } %t880) store { ptr, i64, i64 } %t880, ptr %a881 call void @finch_str_drop(ptr %a881) - br label %endif3769 -endif3769: + br label %endif3773 +endif3773: %t882 = load ptr, ptr %a1 %t883 = load { ptr, i64, i64 }, ptr %a789 %t884 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40279,8 +40305,8 @@ endif3769: %t887 = load { ptr, i64, i64 }, ptr %t886 %t888 = call i64 @finch.gen.findMethod(ptr %t882, { ptr, i64, i64 } %t883, { ptr, i64, i64 } %t885, { ptr, i64, i64 } %t887) %t889 = icmp sge i64 %t888, 0 - br i1 %t889, label %then3770, label %endif3772 -then3770: + br i1 %t889, label %then3774, label %endif3776 +then3774: %t890 = load ptr, ptr %a1 %t891 = load %S.ast.Node, ptr %a686 %t892 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40312,25 +40338,25 @@ then3770: call void @finch.gen.fail(ptr %t890, %S.ast.Node %t891, { ptr, i64, i64 } %t914) store { ptr, i64, i64 } %t914, ptr %a915 call void @finch_str_drop(ptr %a915) - br label %endif3772 -endif3772: + br label %endif3776 +endif3776: %t916 = load ptr, ptr %a1 %t917 = icmp eq ptr %t916, null - br i1 %t917, label %panic3773, label %ok3774 -panic3773: + br i1 %t917, label %panic3777, label %ok3778 +panic3777: call void @finch_panic(ptr @.str.2351, i64 1606, ptr @.str.2352) unreachable -ok3774: +ok3778: %t918 = getelementptr inbounds %S.gen.Gen, ptr %t916, i32 0, i32 16 %t919 = load i64, ptr %a851 %t920 = load { ptr, i64, i64 }, ptr %t918 %t921 = extractvalue { ptr, i64, i64 } %t920, 1 %t922 = icmp uge i64 %t919, %t921 - br i1 %t922, label %range3775, label %inrange3776 -range3775: + br i1 %t922, label %range3779, label %inrange3780 +range3779: call void @finch_panic_index(ptr @.str.2353, i64 1606, i64 %t919, i64 %t921) unreachable -inrange3776: +inrange3780: %t923 = extractvalue { ptr, i64, i64 } %t920, 0 %t924 = getelementptr inbounds %S.gen.StructDef, ptr %t923, i64 %t919 %t925 = getelementptr inbounds %S.gen.StructDef, ptr %t924, i32 0, i32 11 @@ -40341,31 +40367,31 @@ inrange3776: %t930 = load i64, ptr %t926 %t931 = load ptr, ptr %t925 store i64 0, ptr %a932 - br label %find.cond3777 -find.cond3777: + br label %find.cond3781 +find.cond3781: %t933 = load i64, ptr %a932 %t934 = icmp slt i64 %t933, %t930 - br i1 %t934, label %find.body3778, label %find.end3781 -find.body3778: + br i1 %t934, label %find.body3782, label %find.end3785 +find.body3782: %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t931, i64 %t933 %t936 = load { ptr, i64, i64 }, ptr %t935 store { ptr, i64, i64 } %t936, ptr %a937 store { ptr, i64, i64 } %t928, ptr %a938 %t939 = call i32 @finch_str_eq(ptr %a937, ptr %a938) %t940 = icmp ne i32 %t939, 0 - br i1 %t940, label %find.hit3779, label %find.next3780 -find.hit3779: + br i1 %t940, label %find.hit3783, label %find.next3784 +find.hit3783: store i64 %t933, ptr %a929 - br label %find.end3781 -find.next3780: + br label %find.end3785 +find.next3784: %t941 = add i64 %t933, 1 store i64 %t941, ptr %a932 - br label %find.cond3777 -find.end3781: + br label %find.cond3781 +find.end3785: %t942 = load i64, ptr %a929 %t943 = icmp sge i64 %t942, 0 - br i1 %t943, label %then3782, label %endif3784 -then3782: + br i1 %t943, label %then3786, label %endif3788 +then3786: %t944 = load ptr, ptr %a1 %t945 = load %S.ast.Node, ptr %a686 %t946 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 @@ -40397,26 +40423,26 @@ then3782: call void @finch.gen.fail(ptr %t944, %S.ast.Node %t945, { ptr, i64, i64 } %t968) store { ptr, i64, i64 } %t968, ptr %a969 call void @finch_str_drop(ptr %a969) - br label %endif3784 -endif3784: - br label %endif3757 -else3756: + br label %endif3788 +endif3788: + br label %endif3761 +else3760: %t970 = load ptr, ptr %a1 %t971 = load ptr, ptr %a1 %t972 = icmp eq ptr %t971, null - br i1 %t972, label %panic3785, label %ok3786 -panic3785: + br i1 %t972, label %panic3789, label %ok3790 +panic3789: call void @finch_panic(ptr @.str.2357, i64 1610, ptr @.str.2358) unreachable -ok3786: +ok3790: %t973 = getelementptr inbounds %S.gen.Gen, ptr %t971, i32 0, i32 14 %t974 = load { ptr, i64, i64 }, ptr %t973 %t975 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t976 = load { ptr, i64, i64 }, ptr %t975 %t977 = call i64 @finch.gen.findFn(ptr %t970, { ptr, i64, i64 } %t974, { ptr, i64, i64 } %t976) %t978 = icmp sge i64 %t977, 0 - br i1 %t978, label %then3787, label %endif3789 -then3787: + br i1 %t978, label %then3791, label %endif3793 +then3791: %t979 = load ptr, ptr %a1 %t980 = load %S.ast.Node, ptr %a686 %t981 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 @@ -40434,13 +40460,13 @@ then3787: call void @finch.gen.fail(ptr %t979, %S.ast.Node %t980, { ptr, i64, i64 } %t991) store { ptr, i64, i64 } %t991, ptr %a992 call void @finch_str_drop(ptr %a992) - br label %endif3789 -endif3789: + br label %endif3793 +endif3793: %t993 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 %t994 = load { ptr, i64, i64 }, ptr %t993 %t995 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t994) - br i1 %t995, label %then3790, label %endif3792 -then3790: + br i1 %t995, label %then3794, label %endif3796 +then3794: %t996 = load ptr, ptr %a1 %t997 = load %S.ast.Node, ptr %a686 %t998 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 @@ -40458,19 +40484,19 @@ then3790: call void @finch.gen.fail(ptr %t996, %S.ast.Node %t997, { ptr, i64, i64 } %t1008) store { ptr, i64, i64 } %t1008, ptr %a1009 call void @finch_str_drop(ptr %a1009) - br label %endif3792 -endif3792: - br label %endif3757 -endif3757: - br label %endif3751 -endif3751: + br label %endif3796 +endif3796: + br label %endif3761 +endif3761: + br label %endif3755 +endif3755: %t1010 = load ptr, ptr %a1 %t1011 = icmp eq ptr %t1010, null - br i1 %t1011, label %panic3793, label %ok3794 -panic3793: + br i1 %t1011, label %panic3797, label %ok3798 +panic3797: call void @finch_panic(ptr @.str.2363, i64 1617, ptr @.str.2364) unreachable -ok3794: +ok3798: %t1012 = getelementptr inbounds %S.gen.Gen, ptr %t1010, i32 0, i32 14 %t1013 = load { ptr, i64, i64 }, ptr %t1012 store { ptr, i64, i64 } %t1013, ptr %a1014 @@ -40509,11 +40535,11 @@ ok3794: store %S.gen.FnSig %t1046, ptr %a1047 %t1048 = load ptr, ptr %a1 %t1049 = icmp eq ptr %t1048, null - br i1 %t1049, label %panic3795, label %ok3796 -panic3795: + br i1 %t1049, label %panic3799, label %ok3800 +panic3799: call void @finch_panic(ptr @.str.2366, i64 1618, ptr @.str.2367) unreachable -ok3796: +ok3800: %t1050 = getelementptr inbounds %S.gen.Gen, ptr %t1048, i32 0, i32 14 %t1051 = load { ptr, i64, i64 }, ptr %t1050 %t1052 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1051) @@ -40546,15 +40572,15 @@ ok3796: %t1074 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1073, i32 0, i32 1 %t1075 = load i64, ptr %t1074 %t1076 = icmp sgt i64 %t1075, 0 - br i1 %t1076, label %then3797, label %endif3799 -then3797: + br i1 %t1076, label %then3801, label %endif3803 +then3801: %t1077 = load ptr, ptr %a1 %t1078 = icmp eq ptr %t1077, null - br i1 %t1078, label %panic3800, label %ok3801 -panic3800: + br i1 %t1078, label %panic3804, label %ok3805 +panic3804: call void @finch_panic(ptr @.str.2370, i64 1620, ptr @.str.2371) unreachable -ok3801: +ok3805: %t1079 = getelementptr inbounds %S.gen.Gen, ptr %t1077, i32 0, i32 14 %t1080 = load { ptr, i64, i64 }, ptr %t1079 %t1081 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1080) @@ -40597,8 +40623,8 @@ ok3801: store { ptr, i64, i64 } %t1110, ptr %t1111 store { ptr, i64, i64 } %t1112, ptr %a1113 call void @finch_str_drop(ptr %a1113) - br label %endif3799 -endif3799: + br label %endif3803 +endif3803: %t1114 = load ptr, ptr %a1 %t1115 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 5 %t1116 = load %S.ast.Type, ptr %t1115 @@ -40614,22 +40640,22 @@ endif3799: %t1124 = load i64, ptr %t1123 %t1125 = sub i64 %t1124, 1 store i64 0, ptr %a1126 - br label %for.cond3802 -for.cond3802: + br label %for.cond3806 +for.cond3806: %t1127 = load i64, ptr %a1126 %t1128 = icmp slt i64 %t1127, %t1125 - br i1 %t1128, label %for.body3803, label %for.end3805 -for.body3803: + br i1 %t1128, label %for.body3807, label %for.end3809 +for.body3807: %t1129 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1130 = load i64, ptr %a1126 %t1131 = load { ptr, i64, i64 }, ptr %t1129 %t1132 = extractvalue { ptr, i64, i64 } %t1131, 1 %t1133 = icmp uge i64 %t1130, %t1132 - br i1 %t1133, label %range3806, label %inrange3807 -range3806: + br i1 %t1133, label %range3810, label %inrange3811 +range3810: call void @finch_panic_index(ptr @.str.2374, i64 1624, i64 %t1130, i64 %t1132) unreachable -inrange3807: +inrange3811: %t1134 = extractvalue { ptr, i64, i64 } %t1131, 0 %t1135 = getelementptr inbounds %S.ast.Node, ptr %t1134, i64 %t1130 %t1136 = getelementptr inbounds %S.ast.Node, ptr %t1135, i32 0, i32 1 @@ -40638,32 +40664,32 @@ inrange3807: store { ptr, i64, i64 } { ptr @.str.2375, i64 4, i64 0 }, ptr %a1139 %t1140 = call i32 @finch_str_eq(ptr %a1138, ptr %a1139) %t1141 = icmp ne i32 %t1140, 0 - br label %logic.from3808 -logic.from3808: - br i1 %t1141, label %logic.rhs3809, label %logic.end3810 -logic.rhs3809: + br label %logic.from3812 +logic.from3812: + br i1 %t1141, label %logic.rhs3813, label %logic.end3814 +logic.rhs3813: %t1142 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 %t1143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1142, i32 0, i32 1 %t1144 = load i64, ptr %t1143 %t1145 = icmp sgt i64 %t1144, 0 - br label %logic.rend3811 -logic.rend3811: - br label %logic.end3810 -logic.end3810: - %t1146 = phi i1 [ false, %logic.from3808 ], [ %t1145, %logic.rend3811 ] - br i1 %t1146, label %then3812, label %endif3814 -then3812: + br label %logic.rend3815 +logic.rend3815: + br label %logic.end3814 +logic.end3814: + %t1146 = phi i1 [ false, %logic.from3812 ], [ %t1145, %logic.rend3815 ] + br i1 %t1146, label %then3816, label %endif3818 +then3816: %t1147 = load ptr, ptr %a1 %t1148 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 %t1149 = load i64, ptr %a1126 %t1150 = load { ptr, i64, i64 }, ptr %t1148 %t1151 = extractvalue { ptr, i64, i64 } %t1150, 1 %t1152 = icmp uge i64 %t1149, %t1151 - br i1 %t1152, label %range3815, label %inrange3816 -range3815: + br i1 %t1152, label %range3819, label %inrange3820 +range3819: call void @finch_panic_index(ptr @.str.2376, i64 1625, i64 %t1149, i64 %t1151) unreachable -inrange3816: +inrange3820: %t1153 = extractvalue { ptr, i64, i64 } %t1150, 0 %t1154 = getelementptr inbounds %S.ast.Node, ptr %t1153, i64 %t1149 %t1155 = load %S.ast.Node, ptr %t1154 @@ -40682,8 +40708,8 @@ inrange3816: call void @finch.gen.fail(ptr %t1147, %S.ast.Node %t1155, { ptr, i64, i64 } %t1166) store { ptr, i64, i64 } %t1166, ptr %a1167 call void @finch_str_drop(ptr %a1167) - br label %endif3814 -endif3814: + br label %endif3818 +endif3818: %t1168 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 13 %t1169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1168, i32 0, i32 1 %t1170 = load ptr, ptr %a1 @@ -40692,11 +40718,11 @@ endif3814: %t1173 = load { ptr, i64, i64 }, ptr %t1171 %t1174 = extractvalue { ptr, i64, i64 } %t1173, 1 %t1175 = icmp uge i64 %t1172, %t1174 - br i1 %t1175, label %range3817, label %inrange3818 -range3817: + br i1 %t1175, label %range3821, label %inrange3822 +range3821: call void @finch_panic_index(ptr @.str.2379, i64 1627, i64 %t1172, i64 %t1174) unreachable -inrange3818: +inrange3822: %t1176 = extractvalue { ptr, i64, i64 } %t1173, 0 %t1177 = getelementptr inbounds %S.ast.Node, ptr %t1176, i64 %t1172 %t1178 = getelementptr inbounds %S.ast.Node, ptr %t1177, i32 0, i32 5 @@ -40706,11 +40732,11 @@ inrange3818: %t1182 = load { ptr, i64, i64 }, ptr %t1180 %t1183 = extractvalue { ptr, i64, i64 } %t1182, 1 %t1184 = icmp uge i64 %t1181, %t1183 - br i1 %t1184, label %range3819, label %inrange3820 -range3819: + br i1 %t1184, label %range3823, label %inrange3824 +range3823: call void @finch_panic_index(ptr @.str.2380, i64 1627, i64 %t1181, i64 %t1183) unreachable -inrange3820: +inrange3824: %t1185 = extractvalue { ptr, i64, i64 } %t1182, 0 %t1186 = getelementptr inbounds %S.ast.Node, ptr %t1185, i64 %t1181 %t1187 = load %S.ast.Node, ptr %t1186 @@ -40729,11 +40755,11 @@ inrange3820: %t1197 = load { ptr, i64, i64 }, ptr %t1195 %t1198 = extractvalue { ptr, i64, i64 } %t1197, 1 %t1199 = icmp uge i64 %t1196, %t1198 - br i1 %t1199, label %range3821, label %inrange3822 -range3821: + br i1 %t1199, label %range3825, label %inrange3826 +range3825: call void @finch_panic_index(ptr @.str.2381, i64 1628, i64 %t1196, i64 %t1198) unreachable -inrange3822: +inrange3826: %t1200 = extractvalue { ptr, i64, i64 } %t1197, 0 %t1201 = getelementptr inbounds %S.ast.Node, ptr %t1200, i64 %t1196 %t1202 = getelementptr inbounds %S.ast.Node, ptr %t1201, i32 0, i32 1 @@ -40748,30 +40774,30 @@ inrange3822: %t1210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1209, i64 %t1207 store { ptr, i64, i64 } %t1206, ptr %t1210 store i64 %t1208, ptr %t1194 - br label %for.step3804 -for.step3804: + br label %for.step3808 +for.step3808: %t1211 = load i64, ptr %a1126 %t1212 = add i64 %t1211, 1 store i64 %t1212, ptr %a1126 - br label %for.cond3802 -for.end3805: + br label %for.cond3806 +for.end3809: %t1213 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 %t1214 = load i1, ptr %t1213 - br i1 %t1214, label %then3823, label %endif3825 -then3823: + br i1 %t1214, label %then3827, label %endif3829 +then3827: %t1215 = load ptr, ptr %a1 %t1216 = load %S.ast.Node, ptr %a686 %t1217 = load %S.gen.FnSig, ptr %a1047 call void @finch.gen.checkExport(ptr %t1215, %S.ast.Node %t1216, %S.gen.FnSig %t1217) - br label %endif3825 -endif3825: + br label %endif3829 +endif3829: %t1218 = load ptr, ptr %a1 %t1219 = icmp eq ptr %t1218, null - br i1 %t1219, label %panic3826, label %ok3827 -panic3826: + br i1 %t1219, label %panic3830, label %ok3831 +panic3830: call void @finch_panic(ptr @.str.2382, i64 1633, ptr @.str.2383) unreachable -ok3827: +ok3831: %t1220 = getelementptr inbounds %S.gen.Gen, ptr %t1218, i32 0, i32 15 %t1221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1220, i32 0, i32 1 %t1222 = load %S.gen.FnSig, ptr %a1047 @@ -40788,125 +40814,125 @@ ok3827: call void @finch.drop.S_gen_FnSig(ptr %a1047) call void @finch_str_drop(ptr %a789) call void @finch.drop.S_ast_Node(ptr %a686) - br label %for.step3712 -for.step3712: + br label %for.step3716 +for.step3716: %t1230 = load i64, ptr %a663 %t1231 = add i64 %t1230, 1 store i64 %t1231, ptr %a663 - br label %for.cond3710 -for.end3713: - br label %for.step3698 -for.step3698: + br label %for.cond3714 +for.end3717: + br label %for.step3702 +for.step3702: %t1232 = load i64, ptr %a629 %t1233 = add i64 %t1232, 1 store i64 %t1233, ptr %a629 - br label %for.cond3696 -for.end3699: + br label %for.cond3700 +for.end3703: store i1 true, ptr %a1234 - br label %while.cond3828 -while.cond3828: + br label %while.cond3832 +while.cond3832: %t1235 = load i1, ptr %a1234 - br i1 %t1235, label %while.body3829, label %while.end3830 -while.body3829: + br i1 %t1235, label %while.body3833, label %while.end3834 +while.body3833: store i1 false, ptr %a1234 %t1236 = load ptr, ptr %a1 %t1237 = icmp eq ptr %t1236, null - br i1 %t1237, label %panic3831, label %ok3832 -panic3831: + br i1 %t1237, label %panic3835, label %ok3836 +panic3835: call void @finch_panic(ptr @.str.2384, i64 1641, ptr @.str.2385) unreachable -ok3832: +ok3836: %t1238 = getelementptr inbounds %S.gen.Gen, ptr %t1236, i32 0, i32 15 %t1239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1238, i32 0, i32 1 %t1240 = load i64, ptr %t1239 store i64 0, ptr %a1241 - br label %for.cond3833 -for.cond3833: + br label %for.cond3837 +for.cond3837: %t1242 = load i64, ptr %a1241 %t1243 = icmp slt i64 %t1242, %t1240 - br i1 %t1243, label %for.body3834, label %for.end3836 -for.body3834: + br i1 %t1243, label %for.body3838, label %for.end3840 +for.body3838: %t1244 = load ptr, ptr %a1 %t1245 = icmp eq ptr %t1244, null - br i1 %t1245, label %panic3837, label %ok3838 -panic3837: + br i1 %t1245, label %panic3841, label %ok3842 +panic3841: call void @finch_panic(ptr @.str.2386, i64 1642, ptr @.str.2387) unreachable -ok3838: +ok3842: %t1246 = getelementptr inbounds %S.gen.Gen, ptr %t1244, i32 0, i32 15 %t1247 = load i64, ptr %a1241 %t1248 = load { ptr, i64, i64 }, ptr %t1246 %t1249 = extractvalue { ptr, i64, i64 } %t1248, 1 %t1250 = icmp uge i64 %t1247, %t1249 - br i1 %t1250, label %range3839, label %inrange3840 -range3839: + br i1 %t1250, label %range3843, label %inrange3844 +range3843: call void @finch_panic_index(ptr @.str.2388, i64 1642, i64 %t1247, i64 %t1249) unreachable -inrange3840: +inrange3844: %t1251 = extractvalue { ptr, i64, i64 } %t1248, 0 %t1252 = getelementptr inbounds %S.gen.FnSig, ptr %t1251, i64 %t1247 %t1253 = getelementptr inbounds %S.gen.FnSig, ptr %t1252, i32 0, i32 2 %t1254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1253, i32 0, i32 1 %t1255 = load i64, ptr %t1254 %t1256 = icmp sgt i64 %t1255, 0 - br label %logic.from3841 -logic.from3841: - br i1 %t1256, label %logic.rhs3842, label %logic.end3843 -logic.rhs3842: + br label %logic.from3845 +logic.from3845: + br i1 %t1256, label %logic.rhs3846, label %logic.end3847 +logic.rhs3846: %t1257 = load ptr, ptr %a1 %t1258 = icmp eq ptr %t1257, null - br i1 %t1258, label %panic3844, label %ok3845 -panic3844: + br i1 %t1258, label %panic3848, label %ok3849 +panic3848: call void @finch_panic(ptr @.str.2389, i64 1642, ptr @.str.2390) unreachable -ok3845: +ok3849: %t1259 = getelementptr inbounds %S.gen.Gen, ptr %t1257, i32 0, i32 15 %t1260 = load i64, ptr %a1241 %t1261 = load { ptr, i64, i64 }, ptr %t1259 %t1262 = extractvalue { ptr, i64, i64 } %t1261, 1 %t1263 = icmp uge i64 %t1260, %t1262 - br i1 %t1263, label %range3846, label %inrange3847 -range3846: + br i1 %t1263, label %range3850, label %inrange3851 +range3850: call void @finch_panic_index(ptr @.str.2391, i64 1642, i64 %t1260, i64 %t1262) unreachable -inrange3847: +inrange3851: %t1264 = extractvalue { ptr, i64, i64 } %t1261, 0 %t1265 = getelementptr inbounds %S.gen.FnSig, ptr %t1264, i64 %t1260 %t1266 = getelementptr inbounds %S.gen.FnSig, ptr %t1265, i32 0, i32 10 %t1267 = load i1, ptr %t1266 %t1268 = xor i1 %t1267, true - br label %logic.rend3848 -logic.rend3848: - br label %logic.end3843 -logic.end3843: - %t1269 = phi i1 [ false, %logic.from3841 ], [ %t1268, %logic.rend3848 ] - br i1 %t1269, label %then3849, label %endif3851 -then3849: + br label %logic.rend3852 +logic.rend3852: + br label %logic.end3847 +logic.end3847: + %t1269 = phi i1 [ false, %logic.from3845 ], [ %t1268, %logic.rend3852 ] + br i1 %t1269, label %then3853, label %endif3855 +then3853: %t1270 = load ptr, ptr %a1 %t1271 = icmp eq ptr %t1270, null - br i1 %t1271, label %panic3852, label %ok3853 -panic3852: + br i1 %t1271, label %panic3856, label %ok3857 +panic3856: call void @finch_panic(ptr @.str.2392, i64 1643, ptr @.str.2393) unreachable -ok3853: +ok3857: %t1272 = getelementptr inbounds %S.gen.Gen, ptr %t1270, i32 0, i32 0 %t1273 = load ptr, ptr %a1 %t1274 = icmp eq ptr %t1273, null - br i1 %t1274, label %panic3854, label %ok3855 -panic3854: + br i1 %t1274, label %panic3858, label %ok3859 +panic3858: call void @finch_panic(ptr @.str.2394, i64 1643, ptr @.str.2395) unreachable -ok3855: +ok3859: %t1275 = getelementptr inbounds %S.gen.Gen, ptr %t1273, i32 0, i32 15 %t1276 = load i64, ptr %a1241 %t1277 = load { ptr, i64, i64 }, ptr %t1275 %t1278 = extractvalue { ptr, i64, i64 } %t1277, 1 %t1279 = icmp uge i64 %t1276, %t1278 - br i1 %t1279, label %range3856, label %inrange3857 -range3856: + br i1 %t1279, label %range3860, label %inrange3861 +range3860: call void @finch_panic_index(ptr @.str.2396, i64 1643, i64 %t1276, i64 %t1278) unreachable -inrange3857: +inrange3861: %t1280 = extractvalue { ptr, i64, i64 } %t1277, 0 %t1281 = getelementptr inbounds %S.gen.FnSig, ptr %t1280, i64 %t1276 %t1282 = getelementptr inbounds %S.gen.FnSig, ptr %t1281, i32 0, i32 16 @@ -40914,31 +40940,31 @@ inrange3857: %t1284 = load { ptr, i64, i64 }, ptr %t1272 %t1285 = extractvalue { ptr, i64, i64 } %t1284, 1 %t1286 = icmp uge i64 %t1283, %t1285 - br i1 %t1286, label %range3858, label %inrange3859 -range3858: + br i1 %t1286, label %range3862, label %inrange3863 +range3862: call void @finch_panic_index(ptr @.str.2397, i64 1643, i64 %t1283, i64 %t1285) unreachable -inrange3859: +inrange3863: %t1287 = extractvalue { ptr, i64, i64 } %t1284, 0 %t1288 = getelementptr inbounds %S.ast.Program, ptr %t1287, i64 %t1283 %t1289 = getelementptr inbounds %S.ast.Program, ptr %t1288, i32 0, i32 8 %t1290 = load ptr, ptr %a1 %t1291 = icmp eq ptr %t1290, null - br i1 %t1291, label %panic3860, label %ok3861 -panic3860: + br i1 %t1291, label %panic3864, label %ok3865 +panic3864: call void @finch_panic(ptr @.str.2398, i64 1643, ptr @.str.2399) unreachable -ok3861: +ok3865: %t1292 = getelementptr inbounds %S.gen.Gen, ptr %t1290, i32 0, i32 15 %t1293 = load i64, ptr %a1241 %t1294 = load { ptr, i64, i64 }, ptr %t1292 %t1295 = extractvalue { ptr, i64, i64 } %t1294, 1 %t1296 = icmp uge i64 %t1293, %t1295 - br i1 %t1296, label %range3862, label %inrange3863 -range3862: + br i1 %t1296, label %range3866, label %inrange3867 +range3866: call void @finch_panic_index(ptr @.str.2400, i64 1643, i64 %t1293, i64 %t1295) unreachable -inrange3863: +inrange3867: %t1297 = extractvalue { ptr, i64, i64 } %t1294, 0 %t1298 = getelementptr inbounds %S.gen.FnSig, ptr %t1297, i64 %t1293 %t1299 = getelementptr inbounds %S.gen.FnSig, ptr %t1298, i32 0, i32 17 @@ -40946,11 +40972,11 @@ inrange3863: %t1301 = load { ptr, i64, i64 }, ptr %t1289 %t1302 = extractvalue { ptr, i64, i64 } %t1301, 1 %t1303 = icmp uge i64 %t1300, %t1302 - br i1 %t1303, label %range3864, label %inrange3865 -range3864: + br i1 %t1303, label %range3868, label %inrange3869 +range3868: call void @finch_panic_index(ptr @.str.2401, i64 1643, i64 %t1300, i64 %t1302) unreachable -inrange3865: +inrange3869: %t1304 = extractvalue { ptr, i64, i64 } %t1301, 0 %t1305 = getelementptr inbounds %S.ast.Node, ptr %t1304, i64 %t1300 %t1306 = load %S.ast.Node, ptr %t1305 @@ -40967,64 +40993,64 @@ inrange3865: %t1317 = load { ptr, i64, i64 }, ptr %t1312 %t1318 = extractvalue { ptr, i64, i64 } %t1317, 1 %t1319 = icmp uge i64 %t1316, %t1318 - br i1 %t1319, label %range3866, label %inrange3867 -range3866: + br i1 %t1319, label %range3870, label %inrange3871 +range3870: call void @finch_panic_index(ptr @.str.2403, i64 1644, i64 %t1316, i64 %t1318) unreachable -inrange3867: +inrange3871: %t1320 = extractvalue { ptr, i64, i64 } %t1317, 0 %t1321 = getelementptr inbounds %S.ast.Node, ptr %t1320, i64 %t1316 %t1322 = load %S.ast.Node, ptr %t1321 %t1323 = call i1 @finch.gen.mutates(ptr %t1311, { ptr, i64, i64 } { ptr @.str.2402, i64 4, i64 0 }, %S.ast.Node %t1322) - br i1 %t1323, label %then3868, label %endif3870 -then3868: + br i1 %t1323, label %then3872, label %endif3874 +then3872: %t1324 = load ptr, ptr %a1 %t1325 = icmp eq ptr %t1324, null - br i1 %t1325, label %panic3871, label %ok3872 -panic3871: + br i1 %t1325, label %panic3875, label %ok3876 +panic3875: call void @finch_panic(ptr @.str.2404, i64 1645, ptr @.str.2405) unreachable -ok3872: +ok3876: %t1326 = getelementptr inbounds %S.gen.Gen, ptr %t1324, i32 0, i32 15 %t1327 = load i64, ptr %a1241 %t1328 = load { ptr, i64, i64 }, ptr %t1326 %t1329 = extractvalue { ptr, i64, i64 } %t1328, 1 %t1330 = icmp uge i64 %t1327, %t1329 - br i1 %t1330, label %range3873, label %inrange3874 -range3873: + br i1 %t1330, label %range3877, label %inrange3878 +range3877: call void @finch_panic_index(ptr @.str.2406, i64 1645, i64 %t1327, i64 %t1329) unreachable -inrange3874: +inrange3878: %t1331 = extractvalue { ptr, i64, i64 } %t1328, 0 %t1332 = getelementptr inbounds %S.gen.FnSig, ptr %t1331, i64 %t1327 %t1333 = getelementptr inbounds %S.gen.FnSig, ptr %t1332, i32 0, i32 10 store i1 true, ptr %t1333 %t1334 = load ptr, ptr %a1 %t1335 = icmp eq ptr %t1334, null - br i1 %t1335, label %panic3875, label %ok3876 -panic3875: + br i1 %t1335, label %panic3879, label %ok3880 +panic3879: call void @finch_panic(ptr @.str.2407, i64 1646, ptr @.str.2408) unreachable -ok3876: +ok3880: %t1336 = getelementptr inbounds %S.gen.Gen, ptr %t1334, i32 0, i32 24 %t1337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1336, i32 0, i32 1 %t1338 = load ptr, ptr %a1 %t1339 = icmp eq ptr %t1338, null - br i1 %t1339, label %panic3877, label %ok3878 -panic3877: + br i1 %t1339, label %panic3881, label %ok3882 +panic3881: call void @finch_panic(ptr @.str.2409, i64 1646, ptr @.str.2410) unreachable -ok3878: +ok3882: %t1340 = getelementptr inbounds %S.gen.Gen, ptr %t1338, i32 0, i32 15 %t1341 = load i64, ptr %a1241 %t1342 = load { ptr, i64, i64 }, ptr %t1340 %t1343 = extractvalue { ptr, i64, i64 } %t1342, 1 %t1344 = icmp uge i64 %t1341, %t1343 - br i1 %t1344, label %range3879, label %inrange3880 -range3879: + br i1 %t1344, label %range3883, label %inrange3884 +range3883: call void @finch_panic_index(ptr @.str.2411, i64 1646, i64 %t1341, i64 %t1343) unreachable -inrange3880: +inrange3884: %t1345 = extractvalue { ptr, i64, i64 } %t1342, 0 %t1346 = getelementptr inbounds %S.gen.FnSig, ptr %t1345, i64 %t1341 %t1347 = getelementptr inbounds %S.gen.FnSig, ptr %t1346, i32 0, i32 1 @@ -41040,52 +41066,52 @@ inrange3880: store { ptr, i64, i64 } %t1351, ptr %t1355 store i64 %t1353, ptr %t1337 store i1 true, ptr %a1234 - br label %endif3870 -endif3870: + br label %endif3874 +endif3874: call void @finch.drop.S_ast_Node(ptr %a1310) - br label %endif3851 -endif3851: - br label %for.step3835 -for.step3835: + br label %endif3855 +endif3855: + br label %for.step3839 +for.step3839: %t1356 = load i64, ptr %a1241 %t1357 = add i64 %t1356, 1 store i64 %t1357, ptr %a1241 - br label %for.cond3833 -for.end3836: + br label %for.cond3837 +for.end3840: %t1358 = load ptr, ptr %a1 %t1359 = icmp eq ptr %t1358, null - br i1 %t1359, label %panic3881, label %ok3882 -panic3881: + br i1 %t1359, label %panic3885, label %ok3886 +panic3885: call void @finch_panic(ptr @.str.2412, i64 1651, ptr @.str.2413) unreachable -ok3882: +ok3886: %t1360 = getelementptr inbounds %S.gen.Gen, ptr %t1358, i32 0, i32 17 %t1361 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1360, i32 0, i32 1 %t1362 = load i64, ptr %t1361 store i64 0, ptr %a1363 - br label %for.cond3883 -for.cond3883: + br label %for.cond3887 +for.cond3887: %t1364 = load i64, ptr %a1363 %t1365 = icmp slt i64 %t1364, %t1362 - br i1 %t1365, label %for.body3884, label %for.end3886 -for.body3884: + br i1 %t1365, label %for.body3888, label %for.end3890 +for.body3888: %t1366 = load ptr, ptr %a1 %t1367 = icmp eq ptr %t1366, null - br i1 %t1367, label %panic3887, label %ok3888 -panic3887: + br i1 %t1367, label %panic3891, label %ok3892 +panic3891: call void @finch_panic(ptr @.str.2414, i64 1652, ptr @.str.2415) unreachable -ok3888: +ok3892: %t1368 = getelementptr inbounds %S.gen.Gen, ptr %t1366, i32 0, i32 17 %t1369 = load i64, ptr %a1363 %t1370 = load { ptr, i64, i64 }, ptr %t1368 %t1371 = extractvalue { ptr, i64, i64 } %t1370, 1 %t1372 = icmp uge i64 %t1369, %t1371 - br i1 %t1372, label %range3889, label %inrange3890 -range3889: + br i1 %t1372, label %range3893, label %inrange3894 +range3893: call void @finch_panic_index(ptr @.str.2416, i64 1652, i64 %t1369, i64 %t1371) unreachable -inrange3890: +inrange3894: %t1373 = extractvalue { ptr, i64, i64 } %t1370, 0 %t1374 = getelementptr inbounds %S.gen.Template, ptr %t1373, i64 %t1369 %t1375 = load %S.gen.Template, ptr %t1374 @@ -41097,38 +41123,38 @@ inrange3890: %t1381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1380, i32 0, i32 1 %t1382 = load i64, ptr %t1381 %t1383 = icmp sgt i64 %t1382, 0 - br label %logic.from3891 -logic.from3891: - br i1 %t1383, label %logic.rhs3892, label %logic.end3893 -logic.rhs3892: + br label %logic.from3895 +logic.from3895: + br i1 %t1383, label %logic.rhs3896, label %logic.end3897 +logic.rhs3896: %t1384 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 7 %t1385 = load i1, ptr %t1384 %t1386 = xor i1 %t1385, true - br label %logic.rend3894 -logic.rend3894: - br label %logic.end3893 -logic.end3893: - %t1387 = phi i1 [ false, %logic.from3891 ], [ %t1386, %logic.rend3894 ] - br i1 %t1387, label %then3895, label %endif3897 -then3895: + br label %logic.rend3898 +logic.rend3898: + br label %logic.end3897 +logic.end3897: + %t1387 = phi i1 [ false, %logic.from3895 ], [ %t1386, %logic.rend3898 ] + br i1 %t1387, label %then3899, label %endif3901 +then3899: %t1388 = load ptr, ptr %a1 %t1389 = icmp eq ptr %t1388, null - br i1 %t1389, label %panic3898, label %ok3899 -panic3898: + br i1 %t1389, label %panic3902, label %ok3903 +panic3902: call void @finch_panic(ptr @.str.2417, i64 1654, ptr @.str.2418) unreachable -ok3899: +ok3903: %t1390 = getelementptr inbounds %S.gen.Gen, ptr %t1388, i32 0, i32 0 %t1391 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 4 %t1392 = load i64, ptr %t1391 %t1393 = load { ptr, i64, i64 }, ptr %t1390 %t1394 = extractvalue { ptr, i64, i64 } %t1393, 1 %t1395 = icmp uge i64 %t1392, %t1394 - br i1 %t1395, label %range3900, label %inrange3901 -range3900: + br i1 %t1395, label %range3904, label %inrange3905 +range3904: call void @finch_panic_index(ptr @.str.2419, i64 1654, i64 %t1392, i64 %t1394) unreachable -inrange3901: +inrange3905: %t1396 = extractvalue { ptr, i64, i64 } %t1393, 0 %t1397 = getelementptr inbounds %S.ast.Program, ptr %t1396, i64 %t1392 %t1398 = getelementptr inbounds %S.ast.Program, ptr %t1397, i32 0, i32 8 @@ -41137,11 +41163,11 @@ inrange3901: %t1401 = load { ptr, i64, i64 }, ptr %t1398 %t1402 = extractvalue { ptr, i64, i64 } %t1401, 1 %t1403 = icmp uge i64 %t1400, %t1402 - br i1 %t1403, label %range3902, label %inrange3903 -range3902: + br i1 %t1403, label %range3906, label %inrange3907 +range3906: call void @finch_panic_index(ptr @.str.2420, i64 1654, i64 %t1400, i64 %t1402) unreachable -inrange3903: +inrange3907: %t1404 = extractvalue { ptr, i64, i64 } %t1401, 0 %t1405 = getelementptr inbounds %S.ast.Node, ptr %t1404, i64 %t1400 %t1406 = load %S.ast.Node, ptr %t1405 @@ -41158,45 +41184,45 @@ inrange3903: %t1417 = load { ptr, i64, i64 }, ptr %t1412 %t1418 = extractvalue { ptr, i64, i64 } %t1417, 1 %t1419 = icmp uge i64 %t1416, %t1418 - br i1 %t1419, label %range3904, label %inrange3905 -range3904: + br i1 %t1419, label %range3908, label %inrange3909 +range3908: call void @finch_panic_index(ptr @.str.2422, i64 1655, i64 %t1416, i64 %t1418) unreachable -inrange3905: +inrange3909: %t1420 = extractvalue { ptr, i64, i64 } %t1417, 0 %t1421 = getelementptr inbounds %S.ast.Node, ptr %t1420, i64 %t1416 %t1422 = load %S.ast.Node, ptr %t1421 %t1423 = call i1 @finch.gen.mutates(ptr %t1411, { ptr, i64, i64 } { ptr @.str.2421, i64 4, i64 0 }, %S.ast.Node %t1422) - br i1 %t1423, label %then3906, label %endif3908 -then3906: + br i1 %t1423, label %then3910, label %endif3912 +then3910: %t1424 = load ptr, ptr %a1 %t1425 = icmp eq ptr %t1424, null - br i1 %t1425, label %panic3909, label %ok3910 -panic3909: + br i1 %t1425, label %panic3913, label %ok3914 +panic3913: call void @finch_panic(ptr @.str.2423, i64 1656, ptr @.str.2424) unreachable -ok3910: +ok3914: %t1426 = getelementptr inbounds %S.gen.Gen, ptr %t1424, i32 0, i32 17 %t1427 = load i64, ptr %a1363 %t1428 = load { ptr, i64, i64 }, ptr %t1426 %t1429 = extractvalue { ptr, i64, i64 } %t1428, 1 %t1430 = icmp uge i64 %t1427, %t1429 - br i1 %t1430, label %range3911, label %inrange3912 -range3911: + br i1 %t1430, label %range3915, label %inrange3916 +range3915: call void @finch_panic_index(ptr @.str.2425, i64 1656, i64 %t1427, i64 %t1429) unreachable -inrange3912: +inrange3916: %t1431 = extractvalue { ptr, i64, i64 } %t1428, 0 %t1432 = getelementptr inbounds %S.gen.Template, ptr %t1431, i64 %t1427 %t1433 = getelementptr inbounds %S.gen.Template, ptr %t1432, i32 0, i32 7 store i1 true, ptr %t1433 %t1434 = load ptr, ptr %a1 %t1435 = icmp eq ptr %t1434, null - br i1 %t1435, label %panic3913, label %ok3914 -panic3913: + br i1 %t1435, label %panic3917, label %ok3918 +panic3917: call void @finch_panic(ptr @.str.2426, i64 1657, ptr @.str.2427) unreachable -ok3914: +ok3918: %t1436 = getelementptr inbounds %S.gen.Gen, ptr %t1434, i32 0, i32 24 %t1437 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1436, i32 0, i32 1 %t1438 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 1 @@ -41212,63 +41238,63 @@ ok3914: store { ptr, i64, i64 } %t1442, ptr %t1446 store i64 %t1444, ptr %t1437 store i1 true, ptr %a1234 - br label %endif3908 -endif3908: + br label %endif3912 +endif3912: call void @finch.drop.S_ast_Node(ptr %a1410) - br label %endif3897 -endif3897: + br label %endif3901 +endif3901: call void @finch.drop.S_gen_Template(ptr %a1379) - br label %for.step3885 -for.step3885: + br label %for.step3889 +for.step3889: %t1447 = load i64, ptr %a1363 %t1448 = add i64 %t1447, 1 store i64 %t1448, ptr %a1363 - br label %for.cond3883 -for.end3886: - br label %while.cond3828 -while.end3830: + br label %for.cond3887 +for.end3890: + br label %while.cond3832 +while.end3834: %t1449 = load ptr, ptr %a1 %t1450 = icmp eq ptr %t1449, null - br i1 %t1450, label %panic3915, label %ok3916 -panic3915: + br i1 %t1450, label %panic3919, label %ok3920 +panic3919: call void @finch_panic(ptr @.str.2428, i64 1664, ptr @.str.2429) unreachable -ok3916: +ok3920: %t1451 = getelementptr inbounds %S.gen.Gen, ptr %t1449, i32 0, i32 15 %t1452 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1451, i32 0, i32 1 %t1453 = load i64, ptr %t1452 store i64 0, ptr %a1454 - br label %for.cond3917 -for.cond3917: + br label %for.cond3921 +for.cond3921: %t1455 = load i64, ptr %a1454 %t1456 = icmp slt i64 %t1455, %t1453 - br i1 %t1456, label %for.body3918, label %for.end3920 -for.body3918: + br i1 %t1456, label %for.body3922, label %for.end3924 +for.body3922: %t1457 = load ptr, ptr %a1 %t1458 = icmp eq ptr %t1457, null - br i1 %t1458, label %panic3921, label %ok3922 -panic3921: + br i1 %t1458, label %panic3925, label %ok3926 +panic3925: call void @finch_panic(ptr @.str.2430, i64 1665, ptr @.str.2431) unreachable -ok3922: +ok3926: %t1459 = getelementptr inbounds %S.gen.Gen, ptr %t1457, i32 0, i32 0 %t1460 = load ptr, ptr %a1 %t1461 = icmp eq ptr %t1460, null - br i1 %t1461, label %panic3923, label %ok3924 -panic3923: + br i1 %t1461, label %panic3927, label %ok3928 +panic3927: call void @finch_panic(ptr @.str.2432, i64 1665, ptr @.str.2433) unreachable -ok3924: +ok3928: %t1462 = getelementptr inbounds %S.gen.Gen, ptr %t1460, i32 0, i32 15 %t1463 = load i64, ptr %a1454 %t1464 = load { ptr, i64, i64 }, ptr %t1462 %t1465 = extractvalue { ptr, i64, i64 } %t1464, 1 %t1466 = icmp uge i64 %t1463, %t1465 - br i1 %t1466, label %range3925, label %inrange3926 -range3925: + br i1 %t1466, label %range3929, label %inrange3930 +range3929: call void @finch_panic_index(ptr @.str.2434, i64 1665, i64 %t1463, i64 %t1465) unreachable -inrange3926: +inrange3930: %t1467 = extractvalue { ptr, i64, i64 } %t1464, 0 %t1468 = getelementptr inbounds %S.gen.FnSig, ptr %t1467, i64 %t1463 %t1469 = getelementptr inbounds %S.gen.FnSig, ptr %t1468, i32 0, i32 16 @@ -41276,31 +41302,31 @@ inrange3926: %t1471 = load { ptr, i64, i64 }, ptr %t1459 %t1472 = extractvalue { ptr, i64, i64 } %t1471, 1 %t1473 = icmp uge i64 %t1470, %t1472 - br i1 %t1473, label %range3927, label %inrange3928 -range3927: + br i1 %t1473, label %range3931, label %inrange3932 +range3931: call void @finch_panic_index(ptr @.str.2435, i64 1665, i64 %t1470, i64 %t1472) unreachable -inrange3928: +inrange3932: %t1474 = extractvalue { ptr, i64, i64 } %t1471, 0 %t1475 = getelementptr inbounds %S.ast.Program, ptr %t1474, i64 %t1470 %t1476 = getelementptr inbounds %S.ast.Program, ptr %t1475, i32 0, i32 8 %t1477 = load ptr, ptr %a1 %t1478 = icmp eq ptr %t1477, null - br i1 %t1478, label %panic3929, label %ok3930 -panic3929: + br i1 %t1478, label %panic3933, label %ok3934 +panic3933: call void @finch_panic(ptr @.str.2436, i64 1665, ptr @.str.2437) unreachable -ok3930: +ok3934: %t1479 = getelementptr inbounds %S.gen.Gen, ptr %t1477, i32 0, i32 15 %t1480 = load i64, ptr %a1454 %t1481 = load { ptr, i64, i64 }, ptr %t1479 %t1482 = extractvalue { ptr, i64, i64 } %t1481, 1 %t1483 = icmp uge i64 %t1480, %t1482 - br i1 %t1483, label %range3931, label %inrange3932 -range3931: + br i1 %t1483, label %range3935, label %inrange3936 +range3935: call void @finch_panic_index(ptr @.str.2438, i64 1665, i64 %t1480, i64 %t1482) unreachable -inrange3932: +inrange3936: %t1484 = extractvalue { ptr, i64, i64 } %t1481, 0 %t1485 = getelementptr inbounds %S.gen.FnSig, ptr %t1484, i64 %t1480 %t1486 = getelementptr inbounds %S.gen.FnSig, ptr %t1485, i32 0, i32 17 @@ -41308,11 +41334,11 @@ inrange3932: %t1488 = load { ptr, i64, i64 }, ptr %t1476 %t1489 = extractvalue { ptr, i64, i64 } %t1488, 1 %t1490 = icmp uge i64 %t1487, %t1489 - br i1 %t1490, label %range3933, label %inrange3934 -range3933: + br i1 %t1490, label %range3937, label %inrange3938 +range3937: call void @finch_panic_index(ptr @.str.2439, i64 1665, i64 %t1487, i64 %t1489) unreachable -inrange3934: +inrange3938: %t1491 = extractvalue { ptr, i64, i64 } %t1488, 0 %t1492 = getelementptr inbounds %S.ast.Node, ptr %t1491, i64 %t1487 %t1493 = load %S.ast.Node, ptr %t1492 @@ -41328,11 +41354,11 @@ inrange3934: %t1503 = load { ptr, i64, i64 }, ptr %t1498 %t1504 = extractvalue { ptr, i64, i64 } %t1503, 1 %t1505 = icmp uge i64 %t1502, %t1504 - br i1 %t1505, label %range3935, label %inrange3936 -range3935: + br i1 %t1505, label %range3939, label %inrange3940 +range3939: call void @finch_panic_index(ptr @.str.2440, i64 1666, i64 %t1502, i64 %t1504) unreachable -inrange3936: +inrange3940: %t1506 = extractvalue { ptr, i64, i64 } %t1503, 0 %t1507 = getelementptr inbounds %S.ast.Node, ptr %t1506, i64 %t1502 %t1508 = load %S.ast.Node, ptr %t1507 @@ -41342,50 +41368,50 @@ inrange3936: store %S.ast.Node %t1511, ptr %a1512 %t1513 = load ptr, ptr %a1 %t1514 = icmp eq ptr %t1513, null - br i1 %t1514, label %panic3937, label %ok3938 -panic3937: + br i1 %t1514, label %panic3941, label %ok3942 +panic3941: call void @finch_panic(ptr @.str.2441, i64 1667, ptr @.str.2442) unreachable -ok3938: +ok3942: %t1515 = getelementptr inbounds %S.gen.Gen, ptr %t1513, i32 0, i32 15 %t1516 = load i64, ptr %a1454 %t1517 = load { ptr, i64, i64 }, ptr %t1515 %t1518 = extractvalue { ptr, i64, i64 } %t1517, 1 %t1519 = icmp uge i64 %t1516, %t1518 - br i1 %t1519, label %range3939, label %inrange3940 -range3939: + br i1 %t1519, label %range3943, label %inrange3944 +range3943: call void @finch_panic_index(ptr @.str.2443, i64 1667, i64 %t1516, i64 %t1518) unreachable -inrange3940: +inrange3944: %t1520 = extractvalue { ptr, i64, i64 } %t1517, 0 %t1521 = getelementptr inbounds %S.gen.FnSig, ptr %t1520, i64 %t1516 %t1522 = getelementptr inbounds %S.gen.FnSig, ptr %t1521, i32 0, i32 13 %t1523 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1522, i32 0, i32 1 %t1524 = load i64, ptr %t1523 store i64 0, ptr %a1525 - br label %for.cond3941 -for.cond3941: + br label %for.cond3945 +for.cond3945: %t1526 = load i64, ptr %a1525 %t1527 = icmp slt i64 %t1526, %t1524 - br i1 %t1527, label %for.body3942, label %for.end3944 -for.body3942: + br i1 %t1527, label %for.body3946, label %for.end3948 +for.body3946: %t1528 = load ptr, ptr %a1 %t1529 = icmp eq ptr %t1528, null - br i1 %t1529, label %panic3945, label %ok3946 -panic3945: + br i1 %t1529, label %panic3949, label %ok3950 +panic3949: call void @finch_panic(ptr @.str.2444, i64 1668, ptr @.str.2445) unreachable -ok3946: +ok3950: %t1530 = getelementptr inbounds %S.gen.Gen, ptr %t1528, i32 0, i32 15 %t1531 = load i64, ptr %a1454 %t1532 = load { ptr, i64, i64 }, ptr %t1530 %t1533 = extractvalue { ptr, i64, i64 } %t1532, 1 %t1534 = icmp uge i64 %t1531, %t1533 - br i1 %t1534, label %range3947, label %inrange3948 -range3947: + br i1 %t1534, label %range3951, label %inrange3952 +range3951: call void @finch_panic_index(ptr @.str.2446, i64 1668, i64 %t1531, i64 %t1533) unreachable -inrange3948: +inrange3952: %t1535 = extractvalue { ptr, i64, i64 } %t1532, 0 %t1536 = getelementptr inbounds %S.gen.FnSig, ptr %t1535, i64 %t1531 %t1537 = getelementptr inbounds %S.gen.FnSig, ptr %t1536, i32 0, i32 13 @@ -41393,11 +41419,11 @@ inrange3948: %t1539 = load { ptr, i64, i64 }, ptr %t1537 %t1540 = extractvalue { ptr, i64, i64 } %t1539, 1 %t1541 = icmp uge i64 %t1538, %t1540 - br i1 %t1541, label %range3949, label %inrange3950 -range3949: + br i1 %t1541, label %range3953, label %inrange3954 +range3953: call void @finch_panic_index(ptr @.str.2447, i64 1668, i64 %t1538, i64 %t1540) unreachable -inrange3950: +inrange3954: %t1542 = extractvalue { ptr, i64, i64 } %t1539, 0 %t1543 = getelementptr inbounds %S.ast.Type, ptr %t1542, i64 %t1538 %t1544 = load %S.ast.Type, ptr %t1543 @@ -41407,21 +41433,21 @@ inrange3950: store %S.ast.Type %t1547, ptr %a1548 %t1549 = load ptr, ptr %a1 %t1550 = icmp eq ptr %t1549, null - br i1 %t1550, label %panic3951, label %ok3952 -panic3951: + br i1 %t1550, label %panic3955, label %ok3956 +panic3955: call void @finch_panic(ptr @.str.2448, i64 1669, ptr @.str.2449) unreachable -ok3952: +ok3956: %t1551 = getelementptr inbounds %S.gen.Gen, ptr %t1549, i32 0, i32 15 %t1552 = load i64, ptr %a1454 %t1553 = load { ptr, i64, i64 }, ptr %t1551 %t1554 = extractvalue { ptr, i64, i64 } %t1553, 1 %t1555 = icmp uge i64 %t1552, %t1554 - br i1 %t1555, label %range3953, label %inrange3954 -range3953: + br i1 %t1555, label %range3957, label %inrange3958 +range3957: call void @finch_panic_index(ptr @.str.2450, i64 1669, i64 %t1552, i64 %t1554) unreachable -inrange3954: +inrange3958: %t1556 = extractvalue { ptr, i64, i64 } %t1553, 0 %t1557 = getelementptr inbounds %S.gen.FnSig, ptr %t1556, i64 %t1552 %t1558 = getelementptr inbounds %S.gen.FnSig, ptr %t1557, i32 0, i32 15 @@ -41429,28 +41455,28 @@ inrange3954: %t1560 = load ptr, ptr %a1 %t1561 = load %S.ast.Type, ptr %a1548 %t1562 = call i1 @finch.gen.owning(ptr %t1560, %S.ast.Type %t1561) - br label %logic.from3955 -logic.from3955: - br i1 %t1562, label %logic.rhs3956, label %logic.end3957 -logic.rhs3956: + br label %logic.from3959 +logic.from3959: + br i1 %t1562, label %logic.rhs3960, label %logic.end3961 +logic.rhs3960: %t1563 = load ptr, ptr %a1 %t1564 = load ptr, ptr %a1 %t1565 = icmp eq ptr %t1564, null - br i1 %t1565, label %panic3958, label %ok3959 -panic3958: + br i1 %t1565, label %panic3962, label %ok3963 +panic3962: call void @finch_panic(ptr @.str.2451, i64 1669, ptr @.str.2452) unreachable -ok3959: +ok3963: %t1566 = getelementptr inbounds %S.gen.Gen, ptr %t1564, i32 0, i32 15 %t1567 = load i64, ptr %a1454 %t1568 = load { ptr, i64, i64 }, ptr %t1566 %t1569 = extractvalue { ptr, i64, i64 } %t1568, 1 %t1570 = icmp uge i64 %t1567, %t1569 - br i1 %t1570, label %range3960, label %inrange3961 -range3960: + br i1 %t1570, label %range3964, label %inrange3965 +range3964: call void @finch_panic_index(ptr @.str.2453, i64 1669, i64 %t1567, i64 %t1569) unreachable -inrange3961: +inrange3965: %t1571 = extractvalue { ptr, i64, i64 } %t1568, 0 %t1572 = getelementptr inbounds %S.gen.FnSig, ptr %t1571, i64 %t1567 %t1573 = getelementptr inbounds %S.gen.FnSig, ptr %t1572, i32 0, i32 14 @@ -41458,22 +41484,22 @@ inrange3961: %t1575 = load { ptr, i64, i64 }, ptr %t1573 %t1576 = extractvalue { ptr, i64, i64 } %t1575, 1 %t1577 = icmp uge i64 %t1574, %t1576 - br i1 %t1577, label %range3962, label %inrange3963 -range3962: + br i1 %t1577, label %range3966, label %inrange3967 +range3966: call void @finch_panic_index(ptr @.str.2454, i64 1669, i64 %t1574, i64 %t1576) unreachable -inrange3963: +inrange3967: %t1578 = extractvalue { ptr, i64, i64 } %t1575, 0 %t1579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1578, i64 %t1574 %t1580 = load { ptr, i64, i64 }, ptr %t1579 %t1581 = load %S.ast.Node, ptr %a1512 %t1582 = call i1 @finch.gen.mutates(ptr %t1563, { ptr, i64, i64 } %t1580, %S.ast.Node %t1581) %t1583 = xor i1 %t1582, true - br label %logic.rend3964 -logic.rend3964: - br label %logic.end3957 -logic.end3957: - %t1584 = phi i1 [ false, %logic.from3955 ], [ %t1583, %logic.rend3964 ] + br label %logic.rend3968 +logic.rend3968: + br label %logic.end3961 +logic.end3961: + %t1584 = phi i1 [ false, %logic.from3959 ], [ %t1583, %logic.rend3968 ] %t1585 = load i64, ptr %t1559 %t1586 = add i64 %t1585, 1 call void @finch_arr_reserve(ptr %t1558, i64 %t1586, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) @@ -41482,22 +41508,22 @@ logic.end3957: store i1 %t1584, ptr %t1588 store i64 %t1586, ptr %t1559 call void @finch.drop.S_ast_Type(ptr %a1548) - br label %for.step3943 -for.step3943: + br label %for.step3947 +for.step3947: %t1589 = load i64, ptr %a1525 %t1590 = add i64 %t1589, 1 store i64 %t1590, ptr %a1525 - br label %for.cond3941 -for.end3944: + br label %for.cond3945 +for.end3948: call void @finch.drop.S_ast_Node(ptr %a1512) call void @finch.drop.S_ast_Node(ptr %a1497) - br label %for.step3919 -for.step3919: + br label %for.step3923 +for.step3923: %t1591 = load i64, ptr %a1454 %t1592 = add i64 %t1591, 1 store i64 %t1592, ptr %a1454 - br label %for.cond3917 -for.end3920: + br label %for.cond3921 +for.end3924: ret void } @@ -41525,38 +41551,38 @@ entry: store i1 %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic3965, label %ok3966 -panic3965: + br i1 %t7, label %panic3969, label %ok3970 +panic3969: call void @finch_panic(ptr @.str.2455, i64 1675, ptr @.str.2456) unreachable -ok3966: +ok3970: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 store i64 0, ptr %a11 - br label %for.cond3967 -for.cond3967: + br label %for.cond3971 +for.cond3971: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t10 - br i1 %t13, label %for.body3968, label %for.end3970 -for.body3968: + br i1 %t13, label %for.body3972, label %for.end3974 +for.body3972: %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic3971, label %ok3972 -panic3971: + br i1 %t15, label %panic3975, label %ok3976 +panic3975: call void @finch_panic(ptr @.str.2457, i64 1676, ptr @.str.2458) unreachable -ok3972: +ok3976: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 17 %t17 = load i64, ptr %a11 %t18 = load { ptr, i64, i64 }, ptr %t16 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 - br i1 %t20, label %range3973, label %inrange3974 -range3973: + br i1 %t20, label %range3977, label %inrange3978 +range3977: call void @finch_panic_index(ptr @.str.2459, i64 1676, i64 %t17, i64 %t19) unreachable -inrange3974: +inrange3978: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.Template, ptr %t21, i64 %t17 %t23 = load %S.gen.Template, ptr %t22 @@ -41571,10 +41597,10 @@ inrange3974: store { ptr, i64, i64 } %t30, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 - br label %logic.from3975 -logic.from3975: - br i1 %t34, label %logic.rhs3976, label %logic.end3977 -logic.rhs3976: + br label %logic.from3979 +logic.from3979: + br i1 %t34, label %logic.rhs3980, label %logic.end3981 +logic.rhs3980: %t35 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 1 %t36 = load { ptr, i64, i64 }, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %a3 @@ -41582,15 +41608,15 @@ logic.rhs3976: store { ptr, i64, i64 } %t37, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 - br label %logic.rend3978 -logic.rend3978: - br label %logic.end3977 -logic.end3977: - %t42 = phi i1 [ false, %logic.from3975 ], [ %t41, %logic.rend3978 ] - br label %logic.from3979 -logic.from3979: - br i1 %t42, label %logic.rhs3980, label %logic.end3981 -logic.rhs3980: + br label %logic.rend3982 +logic.rend3982: + br label %logic.end3981 +logic.end3981: + %t42 = phi i1 [ false, %logic.from3979 ], [ %t41, %logic.rend3982 ] + br label %logic.from3983 +logic.from3983: + br i1 %t42, label %logic.rhs3984, label %logic.end3985 +logic.rhs3984: %t43 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 2 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = load { ptr, i64, i64 }, ptr %a4 @@ -41598,38 +41624,38 @@ logic.rhs3980: store { ptr, i64, i64 } %t45, ptr %a47 %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 - br label %logic.rend3982 -logic.rend3982: - br label %logic.end3981 -logic.end3981: - %t50 = phi i1 [ false, %logic.from3979 ], [ %t49, %logic.rend3982 ] - br label %logic.from3983 -logic.from3983: - br i1 %t50, label %logic.rhs3984, label %logic.end3985 -logic.rhs3984: - %t51 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 6 - %t52 = load i1, ptr %t51 - %t53 = load i1, ptr %a5 - %t54 = icmp eq i1 %t52, %t53 br label %logic.rend3986 logic.rend3986: br label %logic.end3985 logic.end3985: - %t55 = phi i1 [ false, %logic.from3983 ], [ %t54, %logic.rend3986 ] - br i1 %t55, label %then3987, label %endif3989 -then3987: + %t50 = phi i1 [ false, %logic.from3983 ], [ %t49, %logic.rend3986 ] + br label %logic.from3987 +logic.from3987: + br i1 %t50, label %logic.rhs3988, label %logic.end3989 +logic.rhs3988: + %t51 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 6 + %t52 = load i1, ptr %t51 + %t53 = load i1, ptr %a5 + %t54 = icmp eq i1 %t52, %t53 + br label %logic.rend3990 +logic.rend3990: + br label %logic.end3989 +logic.end3989: + %t55 = phi i1 [ false, %logic.from3987 ], [ %t54, %logic.rend3990 ] + br i1 %t55, label %then3991, label %endif3993 +then3991: %t56 = load i64, ptr %a11 call void @finch.drop.S_gen_Template(ptr %a27) ret i64 %t56 -endif3989: +endif3993: call void @finch.drop.S_gen_Template(ptr %a27) - br label %for.step3969 -for.step3969: + br label %for.step3973 +for.step3973: %t57 = load i64, ptr %a11 %t58 = add i64 %t57, 1 store i64 %t58, ptr %a11 - br label %for.cond3967 -for.end3970: + br label %for.cond3971 +for.end3974: ret i64 -1 } @@ -41644,14 +41670,14 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 store i64 0, ptr %a3 - br label %each.cond3990 -each.cond3990: + br label %each.cond3994 +each.cond3994: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body3991, label %each.end3993 -each.body3991: + br i1 %t7, label %each.body3995, label %each.end3997 +each.body3995: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 %t6 %t10 = load %S.ast.Type, ptr %t9 @@ -41666,13 +41692,13 @@ each.body3991: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t15 store { ptr, i64, i64 } %t14, ptr %t18 store i64 %t16, ptr %t12 - br label %each.step3992 -each.step3992: + br label %each.step3996 +each.step3996: %t19 = load i64, ptr %a3 %t20 = add i64 %t19, 1 store i64 %t20, ptr %a3 - br label %each.cond3990 -each.end3993: + br label %each.cond3994 +each.end3997: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2460, i64 2, i64 0 }, ptr %a22 call void @finch_str_join(ptr %a23, ptr %a2, ptr %a22) @@ -41786,8 +41812,8 @@ entry: store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 - br i1 %t12, label %then3994, label %endif3996 -then3994: + br i1 %t12, label %then3998, label %endif4000 +then3998: %t13 = load ptr, ptr %a1 %t14 = load %S.ast.Node, ptr %a5 %t15 = load { ptr, i64, i64 }, ptr %a3 @@ -41817,25 +41843,25 @@ then3994: call void @finch.gen.fail(ptr %t13, %S.ast.Node %t14, { ptr, i64, i64 } %t35) store { ptr, i64, i64 } %t35, ptr %a36 call void @finch_str_drop(ptr %a36) - br label %endif3996 -endif3996: + br label %endif4000 +endif4000: %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null - br i1 %t38, label %panic3997, label %ok3998 -panic3997: + br i1 %t38, label %panic4001, label %ok4002 +panic4001: call void @finch_panic(ptr @.str.2465, i64 1698, ptr @.str.2466) unreachable -ok3998: +ok4002: %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 17 %t40 = load i64, ptr %a10 %t41 = load { ptr, i64, i64 }, ptr %t39 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 %t40, %t42 - br i1 %t43, label %range3999, label %inrange4000 -range3999: + br i1 %t43, label %range4003, label %inrange4004 +range4003: call void @finch_panic_index(ptr @.str.2467, i64 1698, i64 %t40, i64 %t42) unreachable -inrange4000: +inrange4004: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.gen.Template, ptr %t44, i64 %t40 %t46 = load %S.gen.Template, ptr %t45 @@ -41849,8 +41875,8 @@ inrange4000: %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = icmp ne i64 %t52, %t55 - br i1 %t56, label %then4001, label %endif4003 -then4001: + br i1 %t56, label %then4005, label %endif4007 +then4005: %t57 = load ptr, ptr %a1 %t58 = load %S.ast.Node, ptr %a5 %t59 = load { ptr, i64, i64 }, ptr %a3 @@ -41924,8 +41950,8 @@ then4001: call void @finch.gen.fail(ptr %t57, %S.ast.Node %t58, { ptr, i64, i64 } %t116) store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) - br label %endif4003 -endif4003: + br label %endif4007 +endif4007: %t118 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t118, ptr %a120 store { ptr, i64, i64 } { ptr @.str.2473, i64 1, i64 0 }, ptr %a121 @@ -41953,15 +41979,15 @@ endif4003: %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = call i64 @finch.gen.findStruct(ptr %t137, { ptr, i64, i64 } %t138, { ptr, i64, i64 } %t139) %t141 = icmp slt i64 %t140, 0 - br i1 %t141, label %then4004, label %endif4006 -then4004: + br i1 %t141, label %then4008, label %endif4010 +then4008: %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic4007, label %ok4008 -panic4007: + br i1 %t143, label %panic4011, label %ok4012 +panic4011: call void @finch_panic(ptr @.str.2475, i64 1704, ptr @.str.2476) unreachable -ok4008: +ok4012: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 16 %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 %t146 = load { ptr, i64, i64 }, ptr %a2 @@ -42006,18 +42032,18 @@ ok4008: %t182 = load ptr, ptr %a1 %t183 = load ptr, ptr %a1 %t184 = icmp eq ptr %t183, null - br i1 %t184, label %panic4009, label %ok4010 -panic4009: + br i1 %t184, label %panic4013, label %ok4014 +panic4013: call void @finch_panic(ptr @.str.2477, i64 1705, ptr @.str.2478) unreachable -ok4010: +ok4014: %t185 = getelementptr inbounds %S.gen.Gen, ptr %t183, i32 0, i32 16 %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i32 0, i32 1 %t187 = load i64, ptr %t186 %t188 = sub i64 %t187, 1 call void @finch.gen.resolveStruct(ptr %t182, i64 %t188) - br label %endif4006 -endif4006: + br label %endif4010 +endif4010: %t189 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.2479, i64 6, i64 0 }, 0 %t190 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } %t190, ptr %a191 @@ -42185,21 +42211,21 @@ entry: store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic4011, label %ok4012 -panic4011: + br i1 %t7, label %panic4015, label %ok4016 +panic4015: call void @finch_panic(ptr @.str.2480, i64 1712, ptr @.str.2481) unreachable -ok4012: +ok4016: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range4013, label %inrange4014 -range4013: + br i1 %t12, label %range4017, label %inrange4018 +range4017: call void @finch_panic_index(ptr @.str.2482, i64 1712, i64 %t9, i64 %t11) unreachable -inrange4014: +inrange4018: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 %t15 = load %S.gen.Template, ptr %t14 @@ -42234,8 +42260,8 @@ inrange4014: %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = icmp sgt i64 %t42, 0 - br i1 %t43, label %then4015, label %else4016 -then4015: + br i1 %t43, label %then4019, label %else4020 +then4019: %t44 = load ptr, ptr %a1 %t45 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t46 = load { ptr, i64, i64 }, ptr %t45 @@ -42247,15 +42273,15 @@ then4015: store i64 %t51, ptr %a52 %t53 = load i64, ptr %a52 %t54 = icmp sge i64 %t53, 0 - br i1 %t54, label %then4018, label %endif4020 -then4018: + br i1 %t54, label %then4022, label %endif4024 +then4022: %t55 = load i64, ptr %a52 call void @finch_str_drop(ptr %a39) call void @finch.drop.S_gen_Template(ptr %a19) ret i64 %t55 -endif4020: - br label %endif4017 -else4016: +endif4024: + br label %endif4021 +else4020: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 %t58 = load { ptr, i64, i64 }, ptr %t57 @@ -42264,33 +42290,33 @@ else4016: store i64 %t60, ptr %a61 %t62 = load i64, ptr %a61 %t63 = icmp sge i64 %t62, 0 - br i1 %t63, label %then4021, label %endif4023 -then4021: + br i1 %t63, label %then4025, label %endif4027 +then4025: %t64 = load i64, ptr %a61 call void @finch_str_drop(ptr %a39) call void @finch.drop.S_gen_Template(ptr %a19) ret i64 %t64 -endif4023: - br label %endif4017 -endif4017: +endif4027: + br label %endif4021 +endif4021: %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic4024, label %ok4025 -panic4024: + br i1 %t66, label %panic4028, label %ok4029 +panic4028: call void @finch_panic(ptr @.str.2485, i64 1725, ptr @.str.2486) unreachable -ok4025: +ok4029: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 0 %t68 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t69 = load i64, ptr %t68 %t70 = load { ptr, i64, i64 }, ptr %t67 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 %t69, %t71 - br i1 %t72, label %range4026, label %inrange4027 -range4026: + br i1 %t72, label %range4030, label %inrange4031 +range4030: call void @finch_panic_index(ptr @.str.2487, i64 1725, i64 %t69, i64 %t71) unreachable -inrange4027: +inrange4031: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds %S.ast.Program, ptr %t73, i64 %t69 %t75 = getelementptr inbounds %S.ast.Program, ptr %t74, i32 0, i32 8 @@ -42299,11 +42325,11 @@ inrange4027: %t78 = load { ptr, i64, i64 }, ptr %t75 %t79 = extractvalue { ptr, i64, i64 } %t78, 1 %t80 = icmp uge i64 %t77, %t79 - br i1 %t80, label %range4028, label %inrange4029 -range4028: + br i1 %t80, label %range4032, label %inrange4033 +range4032: call void @finch_panic_index(ptr @.str.2488, i64 1725, i64 %t77, i64 %t79) unreachable -inrange4029: +inrange4033: %t81 = extractvalue { ptr, i64, i64 } %t78, 0 %t82 = getelementptr inbounds %S.ast.Node, ptr %t81, i64 %t77 %t83 = load %S.ast.Node, ptr %t82 @@ -42391,8 +42417,8 @@ inrange4029: %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i32 0, i32 1 %t160 = load i64, ptr %t159 %t161 = icmp sgt i64 %t160, 0 - br i1 %t161, label %then4030, label %endif4032 -then4030: + br i1 %t161, label %then4034, label %endif4036 +then4034: %t162 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 %t163 = load { ptr, i64, i64 }, ptr %t162 %t164 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 1 @@ -42477,15 +42503,15 @@ then4030: store { ptr, i64, i64 } %t227, ptr %t228 store { ptr, i64, i64 } %t229, ptr %a230 call void @finch_str_drop(ptr %a230) - br label %endif4032 -endif4032: + br label %endif4036 +endif4036: %t231 = load ptr, ptr %a1 %t232 = icmp eq ptr %t231, null - br i1 %t232, label %panic4033, label %ok4034 -panic4033: + br i1 %t232, label %panic4037, label %ok4038 +panic4037: call void @finch_panic(ptr @.str.2495, i64 1734, ptr @.str.2496) unreachable -ok4034: +ok4038: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 18 %t234 = load { ptr, i64, i64 }, ptr %t233 store { ptr, i64, i64 } %t234, ptr %a235 @@ -42494,11 +42520,11 @@ ok4034: store { ptr, i64, i64 } %t237, ptr %a238 %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null - br i1 %t240, label %panic4035, label %ok4036 -panic4035: + br i1 %t240, label %panic4039, label %ok4040 +panic4039: call void @finch_panic(ptr @.str.2497, i64 1735, ptr @.str.2498) unreachable -ok4036: +ok4040: %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 19 %t242 = load { ptr, i64, i64 }, ptr %t241 store { ptr, i64, i64 } %t242, ptr %a243 @@ -42507,11 +42533,11 @@ ok4036: store { ptr, i64, i64 } %t245, ptr %a246 %t247 = load ptr, ptr %a1 %t248 = icmp eq ptr %t247, null - br i1 %t248, label %panic4037, label %ok4038 -panic4037: + br i1 %t248, label %panic4041, label %ok4042 +panic4041: call void @finch_panic(ptr @.str.2499, i64 1736, ptr @.str.2500) unreachable -ok4038: +ok4042: %t249 = getelementptr inbounds %S.gen.Gen, ptr %t247, i32 0, i32 14 %t250 = load { ptr, i64, i64 }, ptr %t249 store { ptr, i64, i64 } %t250, ptr %a251 @@ -42520,11 +42546,11 @@ ok4038: store { ptr, i64, i64 } %t253, ptr %a254 %t255 = load ptr, ptr %a1 %t256 = icmp eq ptr %t255, null - br i1 %t256, label %panic4039, label %ok4040 -panic4039: + br i1 %t256, label %panic4043, label %ok4044 +panic4043: call void @finch_panic(ptr @.str.2501, i64 1737, ptr @.str.2502) unreachable -ok4040: +ok4044: %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 20 %t258 = load { ptr, i64, i64 }, ptr %t257 store { ptr, i64, i64 } %t258, ptr %a259 @@ -42535,11 +42561,11 @@ ok4040: %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = load ptr, ptr %a1 %t266 = icmp eq ptr %t265, null - br i1 %t266, label %panic4041, label %ok4042 -panic4041: + br i1 %t266, label %panic4045, label %ok4046 +panic4045: call void @finch_panic(ptr @.str.2503, i64 1738, ptr @.str.2504) unreachable -ok4042: +ok4046: %t267 = getelementptr inbounds %S.gen.Gen, ptr %t265, i32 0, i32 18 store { ptr, i64, i64 } %t264, ptr %a268 call void @finch.copy.arr_str(ptr %a269, ptr %a268) @@ -42551,11 +42577,11 @@ ok4042: %t273 = load { ptr, i64, i64 }, ptr %a3 %t274 = load ptr, ptr %a1 %t275 = icmp eq ptr %t274, null - br i1 %t275, label %panic4043, label %ok4044 -panic4043: + br i1 %t275, label %panic4047, label %ok4048 +panic4047: call void @finch_panic(ptr @.str.2505, i64 1739, ptr @.str.2506) unreachable -ok4044: +ok4048: %t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 19 store { ptr, i64, i64 } %t273, ptr %a277 call void @finch.copy.arr_S_ast_Type(ptr %a278, ptr %a277) @@ -42568,11 +42594,11 @@ ok4044: %t283 = load { ptr, i64, i64 }, ptr %t282 %t284 = load ptr, ptr %a1 %t285 = icmp eq ptr %t284, null - br i1 %t285, label %panic4045, label %ok4046 -panic4045: + br i1 %t285, label %panic4049, label %ok4050 +panic4049: call void @finch_panic(ptr @.str.2507, i64 1740, ptr @.str.2508) unreachable -ok4046: +ok4050: %t286 = getelementptr inbounds %S.gen.Gen, ptr %t284, i32 0, i32 14 store { ptr, i64, i64 } %t283, ptr %a287 call void @finch_str_copy(ptr %a288, ptr %a287) @@ -42595,11 +42621,11 @@ ok4046: %t302 = load { ptr, i64, i64 }, ptr %a298 %t303 = load ptr, ptr %a1 %t304 = icmp eq ptr %t303, null - br i1 %t304, label %panic4047, label %ok4048 -panic4047: + br i1 %t304, label %panic4051, label %ok4052 +panic4051: call void @finch_panic(ptr @.str.2511, i64 1741, ptr @.str.2512) unreachable -ok4048: +ok4052: %t305 = getelementptr inbounds %S.gen.Gen, ptr %t303, i32 0, i32 20 %t306 = load { ptr, i64, i64 }, ptr %t305 store { ptr, i64, i64 } %t302, ptr %t305 @@ -42623,11 +42649,11 @@ ok4048: %t321 = load { ptr, i64, i64 }, ptr %t316 %t322 = extractvalue { ptr, i64, i64 } %t321, 1 %t323 = icmp uge i64 %t320, %t322 - br i1 %t323, label %range4049, label %inrange4050 -range4049: + br i1 %t323, label %range4053, label %inrange4054 +range4053: call void @finch_panic_index(ptr @.str.2513, i64 1743, i64 %t320, i64 %t322) unreachable -inrange4050: +inrange4054: %t324 = extractvalue { ptr, i64, i64 } %t321, 0 %t325 = getelementptr inbounds %S.ast.Node, ptr %t324, i64 %t320 %t326 = load %S.ast.Node, ptr %t325 @@ -42640,23 +42666,23 @@ inrange4050: %t333 = load i64, ptr %t332 %t334 = sub i64 %t333, 1 store i64 0, ptr %a335 - br label %for.cond4051 -for.cond4051: + br label %for.cond4055 +for.cond4055: %t336 = load i64, ptr %a335 %t337 = icmp slt i64 %t336, %t334 - br i1 %t337, label %for.body4052, label %for.end4054 -for.body4052: + br i1 %t337, label %for.body4056, label %for.end4058 +for.body4056: %t338 = load ptr, ptr %a1 %t339 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t340 = load i64, ptr %a335 %t341 = load { ptr, i64, i64 }, ptr %t339 %t342 = extractvalue { ptr, i64, i64 } %t341, 1 %t343 = icmp uge i64 %t340, %t342 - br i1 %t343, label %range4055, label %inrange4056 -range4055: + br i1 %t343, label %range4059, label %inrange4060 +range4059: call void @finch_panic_index(ptr @.str.2514, i64 1745, i64 %t340, i64 %t342) unreachable -inrange4056: +inrange4060: %t344 = extractvalue { ptr, i64, i64 } %t341, 0 %t345 = getelementptr inbounds %S.ast.Node, ptr %t344, i64 %t340 %t346 = getelementptr inbounds %S.ast.Node, ptr %t345, i32 0, i32 5 @@ -42666,11 +42692,11 @@ inrange4056: %t350 = load { ptr, i64, i64 }, ptr %t348 %t351 = extractvalue { ptr, i64, i64 } %t350, 1 %t352 = icmp uge i64 %t349, %t351 - br i1 %t352, label %range4057, label %inrange4058 -range4057: + br i1 %t352, label %range4061, label %inrange4062 +range4061: call void @finch_panic_index(ptr @.str.2515, i64 1745, i64 %t349, i64 %t351) unreachable -inrange4058: +inrange4062: %t353 = extractvalue { ptr, i64, i64 } %t350, 0 %t354 = getelementptr inbounds %S.ast.Node, ptr %t353, i64 %t349 %t355 = load %S.ast.Node, ptr %t354 @@ -42696,11 +42722,11 @@ inrange4058: %t372 = load { ptr, i64, i64 }, ptr %t370 %t373 = extractvalue { ptr, i64, i64 } %t372, 1 %t374 = icmp uge i64 %t371, %t373 - br i1 %t374, label %range4059, label %inrange4060 -range4059: + br i1 %t374, label %range4063, label %inrange4064 +range4063: call void @finch_panic_index(ptr @.str.2516, i64 1747, i64 %t371, i64 %t373) unreachable -inrange4060: +inrange4064: %t375 = extractvalue { ptr, i64, i64 } %t372, 0 %t376 = getelementptr inbounds %S.ast.Node, ptr %t375, i64 %t371 %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i32 0, i32 1 @@ -42720,21 +42746,21 @@ inrange4060: %t388 = load ptr, ptr %a1 %t389 = load %S.ast.Type, ptr %a357 %t390 = call i1 @finch.gen.owning(ptr %t388, %S.ast.Type %t389) - br label %logic.from4061 -logic.from4061: - br i1 %t390, label %logic.rhs4062, label %logic.end4063 -logic.rhs4062: + br label %logic.from4065 +logic.from4065: + br i1 %t390, label %logic.rhs4066, label %logic.end4067 +logic.rhs4066: %t391 = load ptr, ptr %a1 %t392 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 %t393 = load i64, ptr %a335 %t394 = load { ptr, i64, i64 }, ptr %t392 %t395 = extractvalue { ptr, i64, i64 } %t394, 1 %t396 = icmp uge i64 %t393, %t395 - br i1 %t396, label %range4064, label %inrange4065 -range4064: + br i1 %t396, label %range4068, label %inrange4069 +range4068: call void @finch_panic_index(ptr @.str.2517, i64 1748, i64 %t393, i64 %t395) unreachable -inrange4065: +inrange4069: %t397 = extractvalue { ptr, i64, i64 } %t394, 0 %t398 = getelementptr inbounds %S.ast.Node, ptr %t397, i64 %t393 %t399 = getelementptr inbounds %S.ast.Node, ptr %t398, i32 0, i32 1 @@ -42742,11 +42768,11 @@ inrange4065: %t401 = load %S.ast.Node, ptr %a330 %t402 = call i1 @finch.gen.mutates(ptr %t391, { ptr, i64, i64 } %t400, %S.ast.Node %t401) %t403 = xor i1 %t402, true - br label %logic.rend4066 -logic.rend4066: - br label %logic.end4063 -logic.end4063: - %t404 = phi i1 [ false, %logic.from4061 ], [ %t403, %logic.rend4066 ] + br label %logic.rend4070 +logic.rend4070: + br label %logic.end4067 +logic.end4067: + %t404 = phi i1 [ false, %logic.from4065 ], [ %t403, %logic.rend4070 ] %t405 = load i64, ptr %t387 %t406 = add i64 %t405, 1 call void @finch_arr_reserve(ptr %t386, i64 %t406, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) @@ -42755,21 +42781,21 @@ logic.end4063: store i1 %t404, ptr %t408 store i64 %t406, ptr %t387 call void @finch.drop.S_ast_Type(ptr %a357) - br label %for.step4053 -for.step4053: + br label %for.step4057 +for.step4057: %t409 = load i64, ptr %a335 %t410 = add i64 %t409, 1 store i64 %t410, ptr %a335 - br label %for.cond4051 -for.end4054: + br label %for.cond4055 +for.end4058: %t411 = load { ptr, i64, i64 }, ptr %a238 %t412 = load ptr, ptr %a1 %t413 = icmp eq ptr %t412, null - br i1 %t413, label %panic4067, label %ok4068 -panic4067: + br i1 %t413, label %panic4071, label %ok4072 +panic4071: call void @finch_panic(ptr @.str.2518, i64 1750, ptr @.str.2519) unreachable -ok4068: +ok4072: %t414 = getelementptr inbounds %S.gen.Gen, ptr %t412, i32 0, i32 18 store { ptr, i64, i64 } %t411, ptr %a415 call void @finch.copy.arr_str(ptr %a416, ptr %a415) @@ -42781,11 +42807,11 @@ ok4068: %t420 = load { ptr, i64, i64 }, ptr %a246 %t421 = load ptr, ptr %a1 %t422 = icmp eq ptr %t421, null - br i1 %t422, label %panic4069, label %ok4070 -panic4069: + br i1 %t422, label %panic4073, label %ok4074 +panic4073: call void @finch_panic(ptr @.str.2520, i64 1751, ptr @.str.2521) unreachable -ok4070: +ok4074: %t423 = getelementptr inbounds %S.gen.Gen, ptr %t421, i32 0, i32 19 store { ptr, i64, i64 } %t420, ptr %a424 call void @finch.copy.arr_S_ast_Type(ptr %a425, ptr %a424) @@ -42797,11 +42823,11 @@ ok4070: %t429 = load { ptr, i64, i64 }, ptr %a254 %t430 = load ptr, ptr %a1 %t431 = icmp eq ptr %t430, null - br i1 %t431, label %panic4071, label %ok4072 -panic4071: + br i1 %t431, label %panic4075, label %ok4076 +panic4075: call void @finch_panic(ptr @.str.2522, i64 1752, ptr @.str.2523) unreachable -ok4072: +ok4076: %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 14 store { ptr, i64, i64 } %t429, ptr %a433 call void @finch_str_copy(ptr %a434, ptr %a433) @@ -42813,11 +42839,11 @@ ok4072: %t438 = load { ptr, i64, i64 }, ptr %a262 %t439 = load ptr, ptr %a1 %t440 = icmp eq ptr %t439, null - br i1 %t440, label %panic4073, label %ok4074 -panic4073: + br i1 %t440, label %panic4077, label %ok4078 +panic4077: call void @finch_panic(ptr @.str.2524, i64 1753, ptr @.str.2525) unreachable -ok4074: +ok4078: %t441 = getelementptr inbounds %S.gen.Gen, ptr %t439, i32 0, i32 20 store { ptr, i64, i64 } %t438, ptr %a442 call void @finch_str_copy(ptr %a443, ptr %a442) @@ -42828,11 +42854,11 @@ ok4074: call void @finch_str_drop(ptr %a446) %t447 = load ptr, ptr %a1 %t448 = icmp eq ptr %t447, null - br i1 %t448, label %panic4075, label %ok4076 -panic4075: + br i1 %t448, label %panic4079, label %ok4080 +panic4079: call void @finch_panic(ptr @.str.2526, i64 1754, ptr @.str.2527) unreachable -ok4076: +ok4080: %t449 = getelementptr inbounds %S.gen.Gen, ptr %t447, i32 0, i32 15 %t450 = getelementptr inbounds { ptr, i64, i64 }, ptr %t449, i32 0, i32 1 %t451 = load %S.gen.FnSig, ptr %a133 @@ -42848,11 +42874,11 @@ ok4076: store i64 %t456, ptr %t450 %t459 = load ptr, ptr %a1 %t460 = icmp eq ptr %t459, null - br i1 %t460, label %panic4077, label %ok4078 -panic4077: + br i1 %t460, label %panic4081, label %ok4082 +panic4081: call void @finch_panic(ptr @.str.2528, i64 1755, ptr @.str.2529) unreachable -ok4078: +ok4082: %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 15 %t462 = getelementptr inbounds { ptr, i64, i64 }, ptr %t461, i32 0, i32 1 %t463 = load i64, ptr %t462 @@ -42923,36 +42949,36 @@ entry: store { ptr, i64, i64 } { ptr @.str.2530, i64 5, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 - br label %logic.from4079 -logic.from4079: - br i1 %t11, label %logic.rhs4080, label %logic.end4081 -logic.rhs4080: + br label %logic.from4083 +logic.from4083: + br i1 %t11, label %logic.rhs4084, label %logic.end4085 +logic.rhs4084: %t12 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp eq i64 %t14, 0 - br label %logic.rend4082 -logic.rend4082: - br label %logic.end4081 -logic.end4081: - %t16 = phi i1 [ false, %logic.from4079 ], [ %t15, %logic.rend4082 ] - br label %logic.from4083 -logic.from4083: - br i1 %t16, label %logic.rhs4084, label %logic.end4085 -logic.rhs4084: - %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 - %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 - %t19 = load i64, ptr %t18 - %t20 = icmp eq i64 %t19, 0 br label %logic.rend4086 logic.rend4086: br label %logic.end4085 logic.end4085: - %t21 = phi i1 [ false, %logic.from4083 ], [ %t20, %logic.rend4086 ] + %t16 = phi i1 [ false, %logic.from4083 ], [ %t15, %logic.rend4086 ] br label %logic.from4087 logic.from4087: - br i1 %t21, label %logic.rhs4088, label %logic.end4089 + br i1 %t16, label %logic.rhs4088, label %logic.end4089 logic.rhs4088: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp eq i64 %t19, 0 + br label %logic.rend4090 +logic.rend4090: + br label %logic.end4089 +logic.end4089: + %t21 = phi i1 [ false, %logic.from4087 ], [ %t20, %logic.rend4090 ] + br label %logic.from4091 +logic.from4091: + br i1 %t21, label %logic.rhs4092, label %logic.end4093 +logic.rhs4092: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t24 = load { ptr, i64, i64 }, ptr %t23 @@ -42960,36 +42986,36 @@ logic.rhs4088: %t26 = load i64, ptr %t22 %t27 = load ptr, ptr %a4 store i64 0, ptr %a28 - br label %find.cond4090 -find.cond4090: + br label %find.cond4094 +find.cond4094: %t29 = load i64, ptr %a28 %t30 = icmp slt i64 %t29, %t26 - br i1 %t30, label %find.body4091, label %find.end4094 -find.body4091: + br i1 %t30, label %find.body4095, label %find.end4098 +find.body4095: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 %t29 %t32 = load { ptr, i64, i64 }, ptr %t31 store { ptr, i64, i64 } %t32, ptr %a33 store { ptr, i64, i64 } %t24, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 - br i1 %t36, label %find.hit4092, label %find.next4093 -find.hit4092: + br i1 %t36, label %find.hit4096, label %find.next4097 +find.hit4096: store i64 %t29, ptr %a25 - br label %find.end4094 -find.next4093: + br label %find.end4098 +find.next4097: %t37 = add i64 %t29, 1 store i64 %t37, ptr %a28 - br label %find.cond4090 -find.end4094: + br label %find.cond4094 +find.end4098: %t38 = load i64, ptr %a25 %t39 = icmp sge i64 %t38, 0 - br label %logic.rend4095 -logic.rend4095: - br label %logic.end4089 -logic.end4089: - %t40 = phi i1 [ false, %logic.from4087 ], [ %t39, %logic.rend4095 ] - br i1 %t40, label %then4096, label %endif4098 -then4096: + br label %logic.rend4099 +logic.rend4099: + br label %logic.end4093 +logic.end4093: + %t40 = phi i1 [ false, %logic.from4091 ], [ %t39, %logic.rend4099 ] + br i1 %t40, label %then4100, label %endif4102 +then4100: %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t42 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 %t43 = load { ptr, i64, i64 }, ptr %t42 @@ -42997,70 +43023,70 @@ then4096: %t45 = load i64, ptr %t41 %t46 = load ptr, ptr %a4 store i64 0, ptr %a47 - br label %find.cond4099 -find.cond4099: + br label %find.cond4103 +find.cond4103: %t48 = load i64, ptr %a47 %t49 = icmp slt i64 %t48, %t45 - br i1 %t49, label %find.body4100, label %find.end4103 -find.body4100: + br i1 %t49, label %find.body4104, label %find.end4107 +find.body4104: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t48 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t51, ptr %a52 store { ptr, i64, i64 } %t43, ptr %a53 %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) %t55 = icmp ne i32 %t54, 0 - br i1 %t55, label %find.hit4101, label %find.next4102 -find.hit4101: + br i1 %t55, label %find.hit4105, label %find.next4106 +find.hit4105: store i64 %t48, ptr %a44 - br label %find.end4103 -find.next4102: + br label %find.end4107 +find.next4106: %t56 = add i64 %t48, 1 store i64 %t56, ptr %a47 - br label %find.cond4099 -find.end4103: + br label %find.cond4103 +find.end4107: %t57 = load i64, ptr %a44 store i64 %t57, ptr %a58 %t59 = load ptr, ptr %a5 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic4104, label %ok4105 -panic4104: + br i1 %t60, label %panic4108, label %ok4109 +panic4108: call void @finch_panic(ptr @.str.2531, i64 1762, ptr @.str.2532) unreachable -ok4105: +ok4109: %t61 = getelementptr inbounds %S.gen.Binds, ptr %t59, i32 0, i32 1 %t62 = load i64, ptr %a58 %t63 = load { ptr, i64, i64 }, ptr %t61 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 - br i1 %t65, label %range4106, label %inrange4107 -range4106: + br i1 %t65, label %range4110, label %inrange4111 +range4110: call void @finch_panic_index(ptr @.str.2533, i64 1762, i64 %t62, i64 %t64) unreachable -inrange4107: +inrange4111: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i1, ptr %t66, i64 %t62 %t68 = load i1, ptr %t67 %t69 = xor i1 %t68, true - br i1 %t69, label %then4108, label %endif4110 -then4108: + br i1 %t69, label %then4112, label %endif4114 +then4112: %t70 = load %S.ast.Type, ptr %a3 %t71 = load ptr, ptr %a5 %t72 = icmp eq ptr %t71, null - br i1 %t72, label %panic4111, label %ok4112 -panic4111: + br i1 %t72, label %panic4115, label %ok4116 +panic4115: call void @finch_panic(ptr @.str.2534, i64 1763, ptr @.str.2535) unreachable -ok4112: +ok4116: %t73 = getelementptr inbounds %S.gen.Binds, ptr %t71, i32 0, i32 0 %t74 = load i64, ptr %a58 %t75 = load { ptr, i64, i64 }, ptr %t73 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 %t74, %t76 - br i1 %t77, label %range4113, label %inrange4114 -range4113: + br i1 %t77, label %range4117, label %inrange4118 +range4117: call void @finch_panic_index(ptr @.str.2536, i64 1763, i64 %t74, i64 %t76) unreachable -inrange4114: +inrange4118: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i64 %t74 store %S.ast.Type %t70, ptr %a80 @@ -43072,81 +43098,81 @@ inrange4114: call void @finch.drop.S_ast_Type(ptr %a84) %t85 = load ptr, ptr %a5 %t86 = icmp eq ptr %t85, null - br i1 %t86, label %panic4115, label %ok4116 -panic4115: + br i1 %t86, label %panic4119, label %ok4120 +panic4119: call void @finch_panic(ptr @.str.2537, i64 1764, ptr @.str.2538) unreachable -ok4116: +ok4120: %t87 = getelementptr inbounds %S.gen.Binds, ptr %t85, i32 0, i32 1 %t88 = load i64, ptr %a58 %t89 = load { ptr, i64, i64 }, ptr %t87 %t90 = extractvalue { ptr, i64, i64 } %t89, 1 %t91 = icmp uge i64 %t88, %t90 - br i1 %t91, label %range4117, label %inrange4118 -range4117: + br i1 %t91, label %range4121, label %inrange4122 +range4121: call void @finch_panic_index(ptr @.str.2539, i64 1764, i64 %t88, i64 %t90) unreachable -inrange4118: +inrange4122: %t92 = extractvalue { ptr, i64, i64 } %t89, 0 %t93 = getelementptr inbounds i1, ptr %t92, i64 %t88 store i1 true, ptr %t93 - br label %endif4110 -endif4110: + br label %endif4114 +endif4114: ret void -endif4098: +endif4102: %t94 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t95 = load { ptr, i64, i64 }, ptr %t94 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.2540, i64 5, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 - br label %logic.from4119 -logic.from4119: - br i1 %t99, label %logic.end4121, label %logic.rhs4120 -logic.rhs4120: + br label %logic.from4123 +logic.from4123: + br i1 %t99, label %logic.end4125, label %logic.rhs4124 +logic.rhs4124: %t100 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } %t101, ptr %a102 store { ptr, i64, i64 } { ptr @.str.2541, i64 3, i64 0 }, ptr %a103 %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) %t105 = icmp ne i32 %t104, 0 - br label %logic.rend4122 -logic.rend4122: - br label %logic.end4121 -logic.end4121: - %t106 = phi i1 [ true, %logic.from4119 ], [ %t105, %logic.rend4122 ] - br label %logic.from4123 -logic.from4123: - br i1 %t106, label %logic.end4125, label %logic.rhs4124 -logic.rhs4124: + br label %logic.rend4126 +logic.rend4126: + br label %logic.end4125 +logic.end4125: + %t106 = phi i1 [ true, %logic.from4123 ], [ %t105, %logic.rend4126 ] + br label %logic.from4127 +logic.from4127: + br i1 %t106, label %logic.end4129, label %logic.rhs4128 +logic.rhs4128: %t107 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t108 = load { ptr, i64, i64 }, ptr %t107 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2542, i64 5, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 - br label %logic.rend4126 -logic.rend4126: - br label %logic.end4125 -logic.end4125: - %t113 = phi i1 [ true, %logic.from4123 ], [ %t112, %logic.rend4126 ] - br label %logic.from4127 -logic.from4127: - br i1 %t113, label %logic.rhs4128, label %logic.end4129 -logic.rhs4128: - %t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 - %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 - %t116 = load i64, ptr %t115 - %t117 = icmp sgt i64 %t116, 0 br label %logic.rend4130 logic.rend4130: br label %logic.end4129 logic.end4129: - %t118 = phi i1 [ false, %logic.from4127 ], [ %t117, %logic.rend4130 ] + %t113 = phi i1 [ true, %logic.from4127 ], [ %t112, %logic.rend4130 ] br label %logic.from4131 logic.from4131: - br i1 %t118, label %logic.rhs4132, label %logic.end4133 + br i1 %t113, label %logic.rhs4132, label %logic.end4133 logic.rhs4132: + %t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp sgt i64 %t116, 0 + br label %logic.rend4134 +logic.rend4134: + br label %logic.end4133 +logic.end4133: + %t118 = phi i1 [ false, %logic.from4131 ], [ %t117, %logic.rend4134 ] + br label %logic.from4135 +logic.from4135: + br i1 %t118, label %logic.rhs4136, label %logic.end4137 +logic.rhs4136: %t119 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t120 = load { ptr, i64, i64 }, ptr %t119 %t121 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 @@ -43155,36 +43181,36 @@ logic.rhs4132: store { ptr, i64, i64 } %t122, ptr %a124 %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) %t126 = icmp ne i32 %t125, 0 - br label %logic.rend4134 -logic.rend4134: - br label %logic.end4133 -logic.end4133: - %t127 = phi i1 [ false, %logic.from4131 ], [ %t126, %logic.rend4134 ] - br label %logic.from4135 -logic.from4135: - br i1 %t127, label %logic.rhs4136, label %logic.end4137 -logic.rhs4136: - %t128 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 - %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 - %t130 = load i64, ptr %t129 - %t131 = icmp sgt i64 %t130, 0 br label %logic.rend4138 logic.rend4138: br label %logic.end4137 logic.end4137: - %t132 = phi i1 [ false, %logic.from4135 ], [ %t131, %logic.rend4138 ] - br i1 %t132, label %then4139, label %endif4141 -then4139: + %t127 = phi i1 [ false, %logic.from4135 ], [ %t126, %logic.rend4138 ] + br label %logic.from4139 +logic.from4139: + br i1 %t127, label %logic.rhs4140, label %logic.end4141 +logic.rhs4140: + %t128 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 + %t130 = load i64, ptr %t129 + %t131 = icmp sgt i64 %t130, 0 + br label %logic.rend4142 +logic.rend4142: + br label %logic.end4141 +logic.end4141: + %t132 = phi i1 [ false, %logic.from4139 ], [ %t131, %logic.rend4142 ] + br i1 %t132, label %then4143, label %endif4145 +then4143: %t133 = load ptr, ptr %a1 %t134 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t135 = load { ptr, i64, i64 }, ptr %t134 %t136 = extractvalue { ptr, i64, i64 } %t135, 1 %t137 = icmp uge i64 0, %t136 - br i1 %t137, label %range4142, label %inrange4143 -range4142: + br i1 %t137, label %range4146, label %inrange4147 +range4146: call void @finch_panic_index(ptr @.str.2543, i64 1769, i64 0, i64 %t136) unreachable -inrange4143: +inrange4147: %t138 = extractvalue { ptr, i64, i64 } %t135, 0 %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i64 0 %t140 = load %S.ast.Type, ptr %t139 @@ -43192,11 +43218,11 @@ inrange4143: %t142 = load { ptr, i64, i64 }, ptr %t141 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 0, %t143 - br i1 %t144, label %range4144, label %inrange4145 -range4144: + br i1 %t144, label %range4148, label %inrange4149 +range4148: call void @finch_panic_index(ptr @.str.2544, i64 1769, i64 0, i64 %t143) unreachable -inrange4145: +inrange4149: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds %S.ast.Type, ptr %t145, i64 0 %t147 = load %S.ast.Type, ptr %t146 @@ -43204,40 +43230,40 @@ inrange4145: %t149 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t133, %S.ast.Type %t140, %S.ast.Type %t147, { ptr, i64, i64 } %t148, ptr %t149) ret void -endif4141: +endif4145: %t150 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t151 = load { ptr, i64, i64 }, ptr %t150 store { ptr, i64, i64 } %t151, ptr %a152 store { ptr, i64, i64 } { ptr @.str.2545, i64 3, i64 0 }, ptr %a153 %t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153) %t155 = icmp ne i32 %t154, 0 - br label %logic.from4146 -logic.from4146: - br i1 %t155, label %logic.rhs4147, label %logic.end4148 -logic.rhs4147: + br label %logic.from4150 +logic.from4150: + br i1 %t155, label %logic.rhs4151, label %logic.end4152 +logic.rhs4151: %t156 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.2546, i64 3, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp ne i32 %t160, 0 - br label %logic.rend4149 -logic.rend4149: - br label %logic.end4148 -logic.end4148: - %t162 = phi i1 [ false, %logic.from4146 ], [ %t161, %logic.rend4149 ] - br i1 %t162, label %then4150, label %endif4152 -then4150: + br label %logic.rend4153 +logic.rend4153: + br label %logic.end4152 +logic.end4152: + %t162 = phi i1 [ false, %logic.from4150 ], [ %t161, %logic.rend4153 ] + br i1 %t162, label %then4154, label %endif4156 +then4154: %t163 = load ptr, ptr %a1 %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t165 = load { ptr, i64, i64 }, ptr %t164 %t166 = extractvalue { ptr, i64, i64 } %t165, 1 %t167 = icmp uge i64 0, %t166 - br i1 %t167, label %range4153, label %inrange4154 -range4153: + br i1 %t167, label %range4157, label %inrange4158 +range4157: call void @finch_panic_index(ptr @.str.2547, i64 1773, i64 0, i64 %t166) unreachable -inrange4154: +inrange4158: %t168 = extractvalue { ptr, i64, i64 } %t165, 0 %t169 = getelementptr inbounds %S.ast.Type, ptr %t168, i64 0 %t170 = load %S.ast.Type, ptr %t169 @@ -43245,11 +43271,11 @@ inrange4154: %t172 = load { ptr, i64, i64 }, ptr %t171 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 0, %t173 - br i1 %t174, label %range4155, label %inrange4156 -range4155: + br i1 %t174, label %range4159, label %inrange4160 +range4159: call void @finch_panic_index(ptr @.str.2548, i64 1773, i64 0, i64 %t173) unreachable -inrange4156: +inrange4160: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds %S.ast.Type, ptr %t175, i64 0 %t177 = load %S.ast.Type, ptr %t176 @@ -43261,11 +43287,11 @@ inrange4156: %t182 = load { ptr, i64, i64 }, ptr %t181 %t183 = extractvalue { ptr, i64, i64 } %t182, 1 %t184 = icmp uge i64 1, %t183 - br i1 %t184, label %range4157, label %inrange4158 -range4157: + br i1 %t184, label %range4161, label %inrange4162 +range4161: call void @finch_panic_index(ptr @.str.2549, i64 1774, i64 1, i64 %t183) unreachable -inrange4158: +inrange4162: %t185 = extractvalue { ptr, i64, i64 } %t182, 0 %t186 = getelementptr inbounds %S.ast.Type, ptr %t185, i64 1 %t187 = load %S.ast.Type, ptr %t186 @@ -43273,11 +43299,11 @@ inrange4158: %t189 = load { ptr, i64, i64 }, ptr %t188 %t190 = extractvalue { ptr, i64, i64 } %t189, 1 %t191 = icmp uge i64 1, %t190 - br i1 %t191, label %range4159, label %inrange4160 -range4159: + br i1 %t191, label %range4163, label %inrange4164 +range4163: call void @finch_panic_index(ptr @.str.2550, i64 1774, i64 1, i64 %t190) unreachable -inrange4160: +inrange4164: %t192 = extractvalue { ptr, i64, i64 } %t189, 0 %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i64 1 %t194 = load %S.ast.Type, ptr %t193 @@ -43285,50 +43311,50 @@ inrange4160: %t196 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t180, %S.ast.Type %t187, %S.ast.Type %t194, { ptr, i64, i64 } %t195, ptr %t196) ret void -endif4152: +endif4156: %t197 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t198 = load { ptr, i64, i64 }, ptr %t197 store { ptr, i64, i64 } %t198, ptr %a199 store { ptr, i64, i64 } { ptr @.str.2551, i64 5, i64 0 }, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp ne i32 %t201, 0 - br label %logic.from4161 -logic.from4161: - br i1 %t202, label %logic.rhs4162, label %logic.end4163 -logic.rhs4162: + br label %logic.from4165 +logic.from4165: + br i1 %t202, label %logic.rhs4166, label %logic.end4167 +logic.rhs4166: %t203 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 %t205 = load i64, ptr %t204 %t206 = icmp sgt i64 %t205, 0 - br label %logic.rend4164 -logic.rend4164: - br label %logic.end4163 -logic.end4163: - %t207 = phi i1 [ false, %logic.from4161 ], [ %t206, %logic.rend4164 ] - br label %logic.from4165 -logic.from4165: - br i1 %t207, label %logic.rhs4166, label %logic.end4167 -logic.rhs4166: + br label %logic.rend4168 +logic.rend4168: + br label %logic.end4167 +logic.end4167: + %t207 = phi i1 [ false, %logic.from4165 ], [ %t206, %logic.rend4168 ] + br label %logic.from4169 +logic.from4169: + br i1 %t207, label %logic.rhs4170, label %logic.end4171 +logic.rhs4170: %t208 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t209 = load { ptr, i64, i64 }, ptr %t208 store { ptr, i64, i64 } %t209, ptr %a210 store { ptr, i64, i64 } { ptr @.str.2552, i64 6, i64 0 }, ptr %a211 %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) %t213 = icmp ne i32 %t212, 0 - br label %logic.rend4168 -logic.rend4168: - br label %logic.end4167 -logic.end4167: - %t214 = phi i1 [ false, %logic.from4165 ], [ %t213, %logic.rend4168 ] - br i1 %t214, label %then4169, label %endif4171 -then4169: + br label %logic.rend4172 +logic.rend4172: + br label %logic.end4171 +logic.end4171: + %t214 = phi i1 [ false, %logic.from4169 ], [ %t213, %logic.rend4172 ] + br i1 %t214, label %then4173, label %endif4175 +then4173: %t215 = load ptr, ptr %a1 %t216 = icmp eq ptr %t215, null - br i1 %t216, label %panic4172, label %ok4173 -panic4172: + br i1 %t216, label %panic4176, label %ok4177 +panic4176: call void @finch_panic(ptr @.str.2553, i64 1778, ptr @.str.2554) unreachable -ok4173: +ok4177: %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 16 %t218 = load ptr, ptr %a1 %t219 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 @@ -43339,11 +43365,11 @@ ok4173: %t224 = load { ptr, i64, i64 }, ptr %t217 %t225 = extractvalue { ptr, i64, i64 } %t224, 1 %t226 = icmp uge i64 %t223, %t225 - br i1 %t226, label %range4174, label %inrange4175 -range4174: + br i1 %t226, label %range4178, label %inrange4179 +range4178: call void @finch_panic_index(ptr @.str.2555, i64 1778, i64 %t223, i64 %t225) unreachable -inrange4175: +inrange4179: %t227 = extractvalue { ptr, i64, i64 } %t224, 0 %t228 = getelementptr inbounds %S.gen.StructDef, ptr %t227, i64 %t223 %t229 = load %S.gen.StructDef, ptr %t228 @@ -43359,10 +43385,10 @@ inrange4175: store { ptr, i64, i64 } %t237, ptr %a239 %t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239) %t241 = icmp ne i32 %t240, 0 - br label %logic.from4176 -logic.from4176: - br i1 %t241, label %logic.rhs4177, label %logic.end4178 -logic.rhs4177: + br label %logic.from4180 +logic.from4180: + br i1 %t241, label %logic.rhs4181, label %logic.end4182 +logic.rhs4181: %t242 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 %t244 = load i64, ptr %t243 @@ -43370,34 +43396,34 @@ logic.rhs4177: %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %t245, i32 0, i32 1 %t247 = load i64, ptr %t246 %t248 = icmp eq i64 %t244, %t247 - br label %logic.rend4179 -logic.rend4179: - br label %logic.end4178 -logic.end4178: - %t249 = phi i1 [ false, %logic.from4176 ], [ %t248, %logic.rend4179 ] - br i1 %t249, label %then4180, label %endif4182 -then4180: + br label %logic.rend4183 +logic.rend4183: + br label %logic.end4182 +logic.end4182: + %t249 = phi i1 [ false, %logic.from4180 ], [ %t248, %logic.rend4183 ] + br i1 %t249, label %then4184, label %endif4186 +then4184: %t250 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %t250, i32 0, i32 1 %t252 = load i64, ptr %t251 store i64 0, ptr %a253 - br label %for.cond4183 -for.cond4183: + br label %for.cond4187 +for.cond4187: %t254 = load i64, ptr %a253 %t255 = icmp slt i64 %t254, %t252 - br i1 %t255, label %for.body4184, label %for.end4186 -for.body4184: + br i1 %t255, label %for.body4188, label %for.end4190 +for.body4188: %t256 = load ptr, ptr %a1 %t257 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t258 = load i64, ptr %a253 %t259 = load { ptr, i64, i64 }, ptr %t257 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 %t258, %t260 - br i1 %t261, label %range4187, label %inrange4188 -range4187: + br i1 %t261, label %range4191, label %inrange4192 +range4191: call void @finch_panic_index(ptr @.str.2556, i64 1781, i64 %t258, i64 %t260) unreachable -inrange4188: +inrange4192: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds %S.ast.Type, ptr %t262, i64 %t258 %t264 = load %S.ast.Type, ptr %t263 @@ -43406,29 +43432,29 @@ inrange4188: %t267 = load { ptr, i64, i64 }, ptr %t265 %t268 = extractvalue { ptr, i64, i64 } %t267, 1 %t269 = icmp uge i64 %t266, %t268 - br i1 %t269, label %range4189, label %inrange4190 -range4189: + br i1 %t269, label %range4193, label %inrange4194 +range4193: call void @finch_panic_index(ptr @.str.2557, i64 1781, i64 %t266, i64 %t268) unreachable -inrange4190: +inrange4194: %t270 = extractvalue { ptr, i64, i64 } %t267, 0 %t271 = getelementptr inbounds %S.ast.Type, ptr %t270, i64 %t266 %t272 = load %S.ast.Type, ptr %t271 %t273 = load { ptr, i64, i64 }, ptr %a4 %t274 = load ptr, ptr %a5 call void @finch.gen.bindType(ptr %t256, %S.ast.Type %t264, %S.ast.Type %t272, { ptr, i64, i64 } %t273, ptr %t274) - br label %for.step4185 -for.step4185: + br label %for.step4189 +for.step4189: %t275 = load i64, ptr %a253 %t276 = add i64 %t275, 1 store i64 %t276, ptr %a253 - br label %for.cond4183 -for.end4186: - br label %endif4182 -endif4182: + br label %for.cond4187 +for.end4190: + br label %endif4186 +endif4186: call void @finch.drop.S_gen_StructDef(ptr %a233) - br label %endif4171 -endif4171: + br label %endif4175 +endif4175: ret void } @@ -43439,19 +43465,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond4267 -n.cond4267: + br label %n.cond4271 +n.cond4271: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body4268, label %n.end4269 -n.body4268: + br i1 %t6, label %n.body4272, label %n.end4273 +n.body4272: %t7 = getelementptr inbounds %S.gen.Val, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Val(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond4267 -n.end4269: + br label %n.cond4271 +n.end4273: call void @finch_arr_free(ptr %a) ret void } @@ -43578,21 +43604,21 @@ entry: store { ptr, i64, i64 } %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic4191, label %ok4192 -panic4191: + br i1 %t7, label %panic4195, label %ok4196 +panic4195: call void @finch_panic(ptr @.str.2558, i64 1789, ptr @.str.2559) unreachable -ok4192: +ok4196: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 %t9 = load i64, ptr %a3 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range4193, label %inrange4194 -range4193: + br i1 %t12, label %range4197, label %inrange4198 +range4197: call void @finch_panic_index(ptr @.str.2560, i64 1789, i64 %t9, i64 %t11) unreachable -inrange4194: +inrange4198: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 %t15 = load %S.gen.Template, ptr %t14 @@ -43602,22 +43628,22 @@ inrange4194: store %S.gen.Template %t18, ptr %a19 %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic4195, label %ok4196 -panic4195: + br i1 %t21, label %panic4199, label %ok4200 +panic4199: call void @finch_panic(ptr @.str.2561, i64 1790, ptr @.str.2562) unreachable -ok4196: +ok4200: %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 0 %t23 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 %t24 = load i64, ptr %t23 %t25 = load { ptr, i64, i64 }, ptr %t22 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 %t24, %t26 - br i1 %t27, label %range4197, label %inrange4198 -range4197: + br i1 %t27, label %range4201, label %inrange4202 +range4201: call void @finch_panic_index(ptr @.str.2563, i64 1790, i64 %t24, i64 %t26) unreachable -inrange4198: +inrange4202: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Program, ptr %t28, i64 %t24 %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i32 0, i32 8 @@ -43626,11 +43652,11 @@ inrange4198: %t33 = load { ptr, i64, i64 }, ptr %t30 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range4199, label %inrange4200 -range4199: + br i1 %t35, label %range4203, label %inrange4204 +range4203: call void @finch_panic_index(ptr @.str.2564, i64 1790, i64 %t32, i64 %t34) unreachable -inrange4200: +inrange4204: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 %t32 %t38 = load %S.ast.Node, ptr %t37 @@ -43655,8 +43681,8 @@ inrange4200: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 %t57 = load i64, ptr %t56 %t58 = icmp sgt i64 %t57, 0 - br i1 %t58, label %then4201, label %endif4203 -then4201: + br i1 %t58, label %then4205, label %endif4207 +then4205: %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t60 = getelementptr inbounds %S.ast.Type, ptr %t59, i32 0, i32 1 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 @@ -43665,8 +43691,8 @@ then4201: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load i64, ptr %t64 %t66 = icmp ne i64 %t62, %t65 - br i1 %t66, label %then4204, label %endif4206 -then4204: + br i1 %t66, label %then4208, label %endif4210 +then4208: %t67 = load ptr, ptr %a1 %t68 = load %S.ast.Node, ptr %a2 %t69 = load { ptr, i64, i64 }, ptr %a5 @@ -43710,19 +43736,19 @@ then4204: call void @finch.gen.fail(ptr %t67, %S.ast.Node %t68, { ptr, i64, i64 } %t101) store { ptr, i64, i64 } %t101, ptr %a102 call void @finch_str_drop(ptr %a102) - br label %endif4206 -endif4206: + br label %endif4210 +endif4210: %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t104 = getelementptr inbounds %S.ast.Type, ptr %t103, i32 0, i32 1 store i64 0, ptr %a105 - br label %each.cond4207 -each.cond4207: + br label %each.cond4211 +each.cond4211: %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = load i64, ptr %a105 %t109 = icmp slt i64 %t108, %t107 - br i1 %t109, label %each.body4208, label %each.end4210 -each.body4208: + br i1 %t109, label %each.body4212, label %each.end4214 +each.body4212: %t110 = load ptr, ptr %t104 %t111 = getelementptr inbounds %S.ast.Type, ptr %t110, i64 %t108 %t112 = load %S.ast.Type, ptr %t111 @@ -43739,13 +43765,13 @@ each.body4208: %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 %t119 store %S.ast.Type %t118, ptr %t122 store i64 %t120, ptr %t114 - br label %each.step4209 -each.step4209: + br label %each.step4213 +each.step4213: %t123 = load i64, ptr %a105 %t124 = add i64 %t123, 1 store i64 %t124, ptr %a105 - br label %each.cond4207 -each.end4210: + br label %each.cond4211 +each.end4214: %t125 = load ptr, ptr %a1 %t126 = load ptr, ptr %a1 %t127 = load i64, ptr %a3 @@ -43763,18 +43789,18 @@ each.end4210: call void @finch.drop.S_ast_Node(ptr %a42) call void @finch.drop.S_gen_Template(ptr %a19) ret %S.gen.Val %t136 -endif4203: +endif4207: store %S.gen.Binds zeroinitializer, ptr %a137 %t138 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 %t140 = load i64, ptr %t139 store i64 0, ptr %a141 - br label %for.cond4211 -for.cond4211: + br label %for.cond4215 +for.cond4215: %t142 = load i64, ptr %a141 %t143 = icmp slt i64 %t142, %t140 - br i1 %t143, label %for.body4212, label %for.end4214 -for.body4212: + br i1 %t143, label %for.body4216, label %for.end4218 +for.body4216: %t144 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 %t146 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2570, i64 4, i64 0 }) @@ -43794,33 +43820,33 @@ for.body4212: %t156 = getelementptr inbounds i1, ptr %t155, i64 %t153 store i1 false, ptr %t156 store i64 %t154, ptr %t152 - br label %for.step4213 -for.step4213: + br label %for.step4217 +for.step4217: %t157 = load i64, ptr %a141 %t158 = add i64 %t157, 1 store i64 %t158, ptr %a141 - br label %for.cond4211 -for.end4214: + br label %for.cond4215 +for.end4218: store { ptr, i64, i64 } zeroinitializer, ptr %a159 %t160 = load ptr, ptr %a1 %t161 = icmp eq ptr %t160, null - br i1 %t161, label %panic4215, label %ok4216 -panic4215: + br i1 %t161, label %panic4219, label %ok4220 +panic4219: call void @finch_panic(ptr @.str.2571, i64 1809, ptr @.str.2572) unreachable -ok4216: +ok4220: %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 11 %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1 %t164 = load i64, ptr %t163 store i64 %t164, ptr %a165 %t166 = load i64, ptr %a47 store i64 0, ptr %a167 - br label %for.cond4217 -for.cond4217: + br label %for.cond4221 +for.cond4221: %t168 = load i64, ptr %a167 %t169 = icmp slt i64 %t168, %t166 - br i1 %t169, label %for.body4218, label %for.end4220 -for.body4218: + br i1 %t169, label %for.body4222, label %for.end4224 +for.body4222: %t170 = load ptr, ptr %a1 %t171 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t172 = load i64, ptr %a4 @@ -43829,11 +43855,11 @@ for.body4218: %t175 = load { ptr, i64, i64 }, ptr %t171 %t176 = extractvalue { ptr, i64, i64 } %t175, 1 %t177 = icmp uge i64 %t174, %t176 - br i1 %t177, label %range4221, label %inrange4222 -range4221: + br i1 %t177, label %range4225, label %inrange4226 +range4225: call void @finch_panic_index(ptr @.str.2573, i64 1811, i64 %t174, i64 %t176) unreachable -inrange4222: +inrange4226: %t178 = extractvalue { ptr, i64, i64 } %t175, 0 %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i64 %t174 %t180 = load %S.ast.Node, ptr %t179 @@ -43846,10 +43872,10 @@ inrange4222: store { ptr, i64, i64 } { ptr @.str.2574, i64 4, i64 0 }, ptr %a187 %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) %t189 = icmp ne i32 %t188, 0 - br label %logic.from4223 -logic.from4223: - br i1 %t189, label %logic.end4225, label %logic.rhs4224 -logic.rhs4224: + br label %logic.from4227 +logic.from4227: + br i1 %t189, label %logic.end4229, label %logic.rhs4228 +logic.rhs4228: %t190 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 %t191 = getelementptr inbounds %S.ast.Type, ptr %t190, i32 0, i32 0 %t192 = load { ptr, i64, i64 }, ptr %t191 @@ -43857,13 +43883,13 @@ logic.rhs4224: store { ptr, i64, i64 } { ptr @.str.2575, i64 4, i64 0 }, ptr %a194 %t195 = call i32 @finch_str_eq(ptr %a193, ptr %a194) %t196 = icmp ne i32 %t195, 0 - br label %logic.rend4226 -logic.rend4226: - br label %logic.end4225 -logic.end4225: - %t197 = phi i1 [ true, %logic.from4223 ], [ %t196, %logic.rend4226 ] - br i1 %t197, label %then4227, label %endif4229 -then4227: + br label %logic.rend4230 +logic.rend4230: + br label %logic.end4229 +logic.end4229: + %t197 = phi i1 [ true, %logic.from4227 ], [ %t196, %logic.rend4230 ] + br i1 %t197, label %then4231, label %endif4233 +then4231: %t198 = load ptr, ptr %a1 %t199 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t200 = load i64, ptr %a4 @@ -43872,11 +43898,11 @@ then4227: %t203 = load { ptr, i64, i64 }, ptr %t199 %t204 = extractvalue { ptr, i64, i64 } %t203, 1 %t205 = icmp uge i64 %t202, %t204 - br i1 %t205, label %range4230, label %inrange4231 -range4230: + br i1 %t205, label %range4234, label %inrange4235 +range4234: call void @finch_panic_index(ptr @.str.2576, i64 1813, i64 %t202, i64 %t204) unreachable -inrange4231: +inrange4235: %t206 = extractvalue { ptr, i64, i64 } %t203, 0 %t207 = getelementptr inbounds %S.ast.Node, ptr %t206, i64 %t202 %t208 = load %S.ast.Node, ptr %t207 @@ -43900,8 +43926,8 @@ inrange4231: call void @finch.gen.fail(ptr %t198, %S.ast.Node %t208, { ptr, i64, i64 } %t223) store { ptr, i64, i64 } %t223, ptr %a224 call void @finch_str_drop(ptr %a224) - br label %endif4229 -endif4229: + br label %endif4233 +endif4233: %t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 %t226 = load %S.gen.Val, ptr %a182 store %S.gen.Val %t226, ptr %a227 @@ -43923,11 +43949,11 @@ endif4229: %t239 = load { ptr, i64, i64 }, ptr %t237 %t240 = extractvalue { ptr, i64, i64 } %t239, 1 %t241 = icmp uge i64 %t238, %t240 - br i1 %t241, label %range4232, label %inrange4233 -range4232: + br i1 %t241, label %range4236, label %inrange4237 +range4236: call void @finch_panic_index(ptr @.str.2580, i64 1817, i64 %t238, i64 %t240) unreachable -inrange4233: +inrange4237: %t242 = extractvalue { ptr, i64, i64 } %t239, 0 %t243 = getelementptr inbounds %S.ast.Node, ptr %t242, i64 %t238 %t244 = getelementptr inbounds %S.ast.Node, ptr %t243, i32 0, i32 5 @@ -43938,39 +43964,39 @@ inrange4233: %t249 = load { ptr, i64, i64 }, ptr %t248 call void @finch.gen.bindType(ptr %t236, %S.ast.Type %t245, %S.ast.Type %t247, { ptr, i64, i64 } %t249, ptr %a137) call void @finch.drop.S_gen_Val(ptr %a182) - br label %for.step4219 -for.step4219: + br label %for.step4223 +for.step4223: %t250 = load i64, ptr %a167 %t251 = add i64 %t250, 1 store i64 %t251, ptr %a167 - br label %for.cond4217 -for.end4220: + br label %for.cond4221 +for.end4224: %t252 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i32 0, i32 1 %t254 = load i64, ptr %t253 store i64 0, ptr %a255 - br label %for.cond4234 -for.cond4234: + br label %for.cond4238 +for.cond4238: %t256 = load i64, ptr %a255 %t257 = icmp slt i64 %t256, %t254 - br i1 %t257, label %for.body4235, label %for.end4237 -for.body4235: + br i1 %t257, label %for.body4239, label %for.end4241 +for.body4239: %t258 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 %t259 = load i64, ptr %a255 %t260 = load { ptr, i64, i64 }, ptr %t258 %t261 = extractvalue { ptr, i64, i64 } %t260, 1 %t262 = icmp uge i64 %t259, %t261 - br i1 %t262, label %range4238, label %inrange4239 -range4238: + br i1 %t262, label %range4242, label %inrange4243 +range4242: call void @finch_panic_index(ptr @.str.2581, i64 1820, i64 %t259, i64 %t261) unreachable -inrange4239: +inrange4243: %t263 = extractvalue { ptr, i64, i64 } %t260, 0 %t264 = getelementptr inbounds i1, ptr %t263, i64 %t259 %t265 = load i1, ptr %t264 %t266 = xor i1 %t265, true - br i1 %t266, label %then4240, label %endif4242 -then4240: + br i1 %t266, label %then4244, label %endif4246 +then4244: %t267 = load ptr, ptr %a1 %t268 = load %S.ast.Node, ptr %a2 %t269 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 @@ -43978,11 +44004,11 @@ then4240: %t271 = load { ptr, i64, i64 }, ptr %t269 %t272 = extractvalue { ptr, i64, i64 } %t271, 1 %t273 = icmp uge i64 %t270, %t272 - br i1 %t273, label %range4243, label %inrange4244 -range4243: + br i1 %t273, label %range4247, label %inrange4248 +range4247: call void @finch_panic_index(ptr @.str.2583, i64 1821, i64 %t270, i64 %t272) unreachable -inrange4244: +inrange4248: %t274 = extractvalue { ptr, i64, i64 } %t271, 0 %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t274, i64 %t270 %t276 = load { ptr, i64, i64 }, ptr %t275 @@ -44013,15 +44039,15 @@ inrange4244: call void @finch.gen.fail(ptr %t267, %S.ast.Node %t268, { ptr, i64, i64 } %t297) store { ptr, i64, i64 } %t297, ptr %a298 call void @finch_str_drop(ptr %a298) - br label %endif4242 -endif4242: - br label %for.step4236 -for.step4236: + br label %endif4246 +endif4246: + br label %for.step4240 +for.step4240: %t299 = load i64, ptr %a255 %t300 = add i64 %t299, 1 store i64 %t300, ptr %a255 - br label %for.cond4234 -for.end4237: + br label %for.cond4238 +for.end4241: %t301 = load ptr, ptr %a1 %t302 = load i64, ptr %a3 %t303 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 @@ -44034,21 +44060,21 @@ for.end4237: store i64 %t307, ptr %a309 %t310 = load ptr, ptr %a1 %t311 = icmp eq ptr %t310, null - br i1 %t311, label %panic4245, label %ok4246 -panic4245: + br i1 %t311, label %panic4249, label %ok4250 +panic4249: call void @finch_panic(ptr @.str.2587, i64 1825, ptr @.str.2588) unreachable -ok4246: +ok4250: %t312 = getelementptr inbounds %S.gen.Gen, ptr %t310, i32 0, i32 15 %t313 = load i64, ptr %a309 %t314 = load { ptr, i64, i64 }, ptr %t312 %t315 = extractvalue { ptr, i64, i64 } %t314, 1 %t316 = icmp uge i64 %t313, %t315 - br i1 %t316, label %range4247, label %inrange4248 -range4247: + br i1 %t316, label %range4251, label %inrange4252 +range4251: call void @finch_panic_index(ptr @.str.2589, i64 1825, i64 %t313, i64 %t315) unreachable -inrange4248: +inrange4252: %t317 = extractvalue { ptr, i64, i64 } %t314, 0 %t318 = getelementptr inbounds %S.gen.FnSig, ptr %t317, i64 %t313 %t319 = load %S.gen.FnSig, ptr %t318 @@ -44063,22 +44089,22 @@ inrange4248: store { ptr, i64, i64 } zeroinitializer, ptr %a327 %t328 = load i64, ptr %a47 store i64 0, ptr %a329 - br label %for.cond4249 -for.cond4249: + br label %for.cond4253 +for.cond4253: %t330 = load i64, ptr %a329 %t331 = icmp slt i64 %t330, %t328 - br i1 %t331, label %for.body4250, label %for.end4252 -for.body4250: + br i1 %t331, label %for.body4254, label %for.end4256 +for.body4254: %t332 = load ptr, ptr %a1 %t333 = load i64, ptr %a329 %t334 = load { ptr, i64, i64 }, ptr %a159 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 - br i1 %t336, label %range4253, label %inrange4254 -range4253: + br i1 %t336, label %range4257, label %inrange4258 +range4257: call void @finch_panic_index(ptr @.str.2590, i64 1829, i64 %t333, i64 %t335) unreachable -inrange4254: +inrange4258: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds %S.gen.Val, ptr %t337, i64 %t333 %t339 = load %S.gen.Val, ptr %t338 @@ -44087,11 +44113,11 @@ inrange4254: %t342 = load { ptr, i64, i64 }, ptr %t340 %t343 = extractvalue { ptr, i64, i64 } %t342, 1 %t344 = icmp uge i64 %t341, %t343 - br i1 %t344, label %range4255, label %inrange4256 -range4255: + br i1 %t344, label %range4259, label %inrange4260 +range4259: call void @finch_panic_index(ptr @.str.2591, i64 1829, i64 %t341, i64 %t343) unreachable -inrange4256: +inrange4260: %t345 = extractvalue { ptr, i64, i64 } %t342, 0 %t346 = getelementptr inbounds %S.ast.Type, ptr %t345, i64 %t341 %t347 = load %S.ast.Type, ptr %t346 @@ -44102,11 +44128,11 @@ inrange4256: %t352 = load { ptr, i64, i64 }, ptr %t348 %t353 = extractvalue { ptr, i64, i64 } %t352, 1 %t354 = icmp uge i64 %t351, %t353 - br i1 %t354, label %range4257, label %inrange4258 -range4257: + br i1 %t354, label %range4261, label %inrange4262 +range4261: call void @finch_panic_index(ptr @.str.2592, i64 1829, i64 %t351, i64 %t353) unreachable -inrange4258: +inrange4262: %t355 = extractvalue { ptr, i64, i64 } %t352, 0 %t356 = getelementptr inbounds %S.ast.Node, ptr %t355, i64 %t351 %t357 = load %S.ast.Node, ptr %t356 @@ -44115,11 +44141,11 @@ inrange4258: %t360 = load { ptr, i64, i64 }, ptr %t358 %t361 = extractvalue { ptr, i64, i64 } %t360, 1 %t362 = icmp uge i64 %t359, %t361 - br i1 %t362, label %range4259, label %inrange4260 -range4259: + br i1 %t362, label %range4263, label %inrange4264 +range4263: call void @finch_panic_index(ptr @.str.2594, i64 1829, i64 %t359, i64 %t361) unreachable -inrange4260: +inrange4264: %t363 = extractvalue { ptr, i64, i64 } %t360, 0 %t364 = getelementptr inbounds { ptr, i64, i64 }, ptr %t363, i64 %t359 %t365 = load { ptr, i64, i64 }, ptr %t364 @@ -44144,11 +44170,11 @@ inrange4260: %t382 = load { ptr, i64, i64 }, ptr %t380 %t383 = extractvalue { ptr, i64, i64 } %t382, 1 %t384 = icmp uge i64 %t381, %t383 - br i1 %t384, label %range4261, label %inrange4262 -range4261: + br i1 %t384, label %range4265, label %inrange4266 +range4265: call void @finch_panic_index(ptr @.str.2596, i64 1830, i64 %t381, i64 %t383) unreachable -inrange4262: +inrange4266: %t385 = extractvalue { ptr, i64, i64 } %t382, 0 %t386 = getelementptr inbounds %S.ast.Type, ptr %t385, i64 %t381 %t387 = load %S.ast.Type, ptr %t386 @@ -44175,13 +44201,13 @@ inrange4262: store { ptr, i64, i64 } %t400, ptr %t404 store i64 %t402, ptr %t378 call void @finch.drop.S_gen_Val(ptr %a377) - br label %for.step4251 -for.step4251: + br label %for.step4255 +for.step4255: %t405 = load i64, ptr %a329 %t406 = add i64 %t405, 1 store i64 %t406, ptr %a329 - br label %for.cond4249 -for.end4252: + br label %for.cond4253 +for.end4256: %t407 = load ptr, ptr %a1 %t408 = load %S.gen.FnSig, ptr %a323 %t409 = load %S.ast.Node, ptr %a2 @@ -44190,14 +44216,14 @@ for.end4252: %t412 = call %S.gen.Val @finch.gen.emitCall(ptr %t407, %S.gen.FnSig %t408, %S.ast.Node %t409, { ptr, i64, i64 } %t410, { ptr, i64, i64 } %t411) store %S.gen.Val %t412, ptr %a413 store i64 0, ptr %a414 - br label %each.cond4263 -each.cond4263: + br label %each.cond4267 +each.cond4267: %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 %t416 = load i64, ptr %t415 %t417 = load i64, ptr %a414 %t418 = icmp slt i64 %t417, %t416 - br i1 %t418, label %each.body4264, label %each.end4266 -each.body4264: + br i1 %t418, label %each.body4268, label %each.end4270 +each.body4268: %t419 = load ptr, ptr %a159 %t420 = getelementptr inbounds %S.gen.Val, ptr %t419, i64 %t417 %t421 = load %S.gen.Val, ptr %t420 @@ -44205,13 +44231,13 @@ each.body4264: %t423 = load ptr, ptr %a1 %t424 = load %S.gen.Val, ptr %a422 call void @finch.gen.release(ptr %t423, %S.gen.Val %t424) - br label %each.step4265 -each.step4265: + br label %each.step4269 +each.step4269: %t425 = load i64, ptr %a414 %t426 = add i64 %t425, 1 store i64 %t426, ptr %a414 - br label %each.cond4263 -each.end4266: + br label %each.cond4267 +each.end4270: %t427 = load ptr, ptr %a1 %t428 = load i64, ptr %a165 call void @finch.gen.heldEnd(ptr %t427, i64 %t428) @@ -44249,20 +44275,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond4278 -n.cond4278: + br label %n.cond4282 +n.cond4282: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body4279, label %n.end4280 -n.body4279: + br i1 %t7, label %n.body4283, label %n.end4284 +n.body4283: %t8 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.cimport.CField, ptr %t2, i64 %t6 call void @finch.copy.S_cimport_CField(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond4278 -n.end4280: + br label %n.cond4282 +n.end4284: ret void } @@ -44348,30 +44374,30 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4270, label %ok4271 -panic4270: + br i1 %t4, label %panic4274, label %ok4275 +panic4274: call void @finch_panic(ptr @.str.2598, i64 1843, ptr @.str.2599) unreachable -ok4271: +ok4275: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 26 %t6 = getelementptr inbounds %S.cimport.CImports, ptr %t5, i32 0, i32 3 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic4272, label %ok4273 -panic4272: + br i1 %t8, label %panic4276, label %ok4277 +panic4276: call void @finch_panic(ptr @.str.2600, i64 1843, ptr @.str.2601) unreachable -ok4273: +ok4277: %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 16 %t10 = load i64, ptr %a2 %t11 = load { ptr, i64, i64 }, ptr %t9 %t12 = extractvalue { ptr, i64, i64 } %t11, 1 %t13 = icmp uge i64 %t10, %t12 - br i1 %t13, label %range4274, label %inrange4275 -range4274: + br i1 %t13, label %range4278, label %inrange4279 +range4278: call void @finch_panic_index(ptr @.str.2602, i64 1843, i64 %t10, i64 %t12) unreachable -inrange4275: +inrange4279: %t14 = extractvalue { ptr, i64, i64 } %t11, 0 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i64 %t10 %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i32 0, i32 1 @@ -44379,14 +44405,14 @@ inrange4275: store { ptr, i64, i64 } %t17, ptr %a18 %t19 = call i64 @finch_map_find(ptr %t6, ptr %a18, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t20 = icmp slt i64 %t19, 0 - br i1 %t20, label %map.missing4276, label %map.found4277 -map.missing4276: + br i1 %t20, label %map.missing4280, label %map.found4281 +map.missing4280: store { ptr, i64, i64 } zeroinitializer, ptr %a21 store { ptr, i64, i64 } %t17, ptr %a22 call void @finch_buf_str(ptr %a21, ptr %a22, i32 1) call void @finch_map_missing(ptr @.str.2603, i64 1843, ptr %a21) unreachable -map.found4277: +map.found4281: %t23 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 %t24 = load ptr, ptr %t23 %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t24, i64 %t19 @@ -44398,21 +44424,21 @@ map.found4277: store %S.cimport.CStruct %t30, ptr %a31 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic4281, label %ok4282 -panic4281: + br i1 %t33, label %panic4285, label %ok4286 +panic4285: call void @finch_panic(ptr @.str.2604, i64 1844, ptr @.str.2605) unreachable -ok4282: +ok4286: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 16 %t35 = load i64, ptr %a2 %t36 = load { ptr, i64, i64 }, ptr %t34 %t37 = extractvalue { ptr, i64, i64 } %t36, 1 %t38 = icmp uge i64 %t35, %t37 - br i1 %t38, label %range4283, label %inrange4284 -range4283: + br i1 %t38, label %range4287, label %inrange4288 +range4287: call void @finch_panic_index(ptr @.str.2606, i64 1844, i64 %t35, i64 %t37) unreachable -inrange4284: +inrange4288: %t39 = extractvalue { ptr, i64, i64 } %t36, 0 %t40 = getelementptr inbounds %S.gen.StructDef, ptr %t39, i64 %t35 %t41 = getelementptr inbounds %S.gen.StructDef, ptr %t40, i32 0, i32 15 @@ -44421,24 +44447,24 @@ inrange4284: store { ptr, i64, i64 } zeroinitializer, ptr %a43 %t44 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 1 store i64 0, ptr %a45 - br label %each.cond4285 -each.cond4285: + br label %each.cond4289 +each.cond4289: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load i64, ptr %a45 %t49 = icmp slt i64 %t48, %t47 - br i1 %t49, label %each.body4286, label %each.end4288 -each.body4286: + br i1 %t49, label %each.body4290, label %each.end4292 +each.body4290: %t50 = load ptr, ptr %t44 %t51 = getelementptr inbounds %S.cimport.CField, ptr %t50, i64 %t48 %t52 = load %S.cimport.CField, ptr %t51 store %S.cimport.CField %t52, ptr %a53 %t54 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 5 %t55 = load i1, ptr %t54 - br i1 %t55, label %then4289, label %endif4291 -then4289: - br label %each.step4287 -endif4291: + br i1 %t55, label %then4293, label %endif4295 +then4293: + br label %each.step4291 +endif4295: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 1 %t58 = load %S.ast.Type, ptr %t57 @@ -44450,8 +44476,8 @@ endif4291: store { ptr, i64, i64 } { ptr @.str.2607, i64 6, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 - br i1 %t66, label %then4292, label %endif4294 -then4292: + br i1 %t66, label %then4296, label %endif4298 +then4296: %t67 = load ptr, ptr %a1 %t68 = load ptr, ptr %a1 %t69 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 3 @@ -44460,14 +44486,14 @@ then4292: %t72 = load { ptr, i64, i64 }, ptr %t71 %t73 = call i64 @finch.gen.findStruct(ptr %t68, { ptr, i64, i64 } %t70, { ptr, i64, i64 } %t72) call void @finch.gen.resolveStruct(ptr %t67, i64 %t73) - br label %endif4294 -endif4294: + br label %endif4298 +endif4298: %t74 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t75 = load i64, ptr %t74 %t76 = load i64, ptr %a42 %t77 = icmp sgt i64 %t75, %t76 - br i1 %t77, label %then4295, label %endif4297 -then4295: + br i1 %t77, label %then4299, label %endif4301 +then4299: %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t79 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 %t80 = load i64, ptr %t79 @@ -44494,25 +44520,25 @@ then4295: %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i64 %t95 store { ptr, i64, i64 } %t94, ptr %t98 store i64 %t96, ptr %t78 - br label %endif4297 -endif4297: + br label %endif4301 +endif4301: %t99 = load ptr, ptr %a1 %t100 = icmp eq ptr %t99, null - br i1 %t100, label %panic4298, label %ok4299 -panic4298: + br i1 %t100, label %panic4302, label %ok4303 +panic4302: call void @finch_panic(ptr @.str.2610, i64 1858, ptr @.str.2611) unreachable -ok4299: +ok4303: %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 16 %t102 = load i64, ptr %a2 %t103 = load { ptr, i64, i64 }, ptr %t101 %t104 = extractvalue { ptr, i64, i64 } %t103, 1 %t105 = icmp uge i64 %t102, %t104 - br i1 %t105, label %range4300, label %inrange4301 -range4300: + br i1 %t105, label %range4304, label %inrange4305 +range4304: call void @finch_panic_index(ptr @.str.2612, i64 1858, i64 %t102, i64 %t104) unreachable -inrange4301: +inrange4305: %t106 = extractvalue { ptr, i64, i64 } %t103, 0 %t107 = getelementptr inbounds %S.gen.StructDef, ptr %t106, i64 %t102 %t108 = getelementptr inbounds %S.gen.StructDef, ptr %t107, i32 0, i32 11 @@ -44531,21 +44557,21 @@ inrange4301: store i64 %t116, ptr %t109 %t119 = load ptr, ptr %a1 %t120 = icmp eq ptr %t119, null - br i1 %t120, label %panic4302, label %ok4303 -panic4302: + br i1 %t120, label %panic4306, label %ok4307 +panic4306: call void @finch_panic(ptr @.str.2613, i64 1859, ptr @.str.2614) unreachable -ok4303: +ok4307: %t121 = getelementptr inbounds %S.gen.Gen, ptr %t119, i32 0, i32 16 %t122 = load i64, ptr %a2 %t123 = load { ptr, i64, i64 }, ptr %t121 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 %t122, %t124 - br i1 %t125, label %range4304, label %inrange4305 -range4304: + br i1 %t125, label %range4308, label %inrange4309 +range4308: call void @finch_panic_index(ptr @.str.2615, i64 1859, i64 %t122, i64 %t124) unreachable -inrange4305: +inrange4309: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds %S.gen.StructDef, ptr %t126, i64 %t122 %t128 = getelementptr inbounds %S.gen.StructDef, ptr %t127, i32 0, i32 12 @@ -44563,21 +44589,21 @@ inrange4305: store i64 %t135, ptr %t129 %t138 = load ptr, ptr %a1 %t139 = icmp eq ptr %t138, null - br i1 %t139, label %panic4306, label %ok4307 -panic4306: + br i1 %t139, label %panic4310, label %ok4311 +panic4310: call void @finch_panic(ptr @.str.2616, i64 1860, ptr @.str.2617) unreachable -ok4307: +ok4311: %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 %t141 = load i64, ptr %a2 %t142 = load { ptr, i64, i64 }, ptr %t140 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 %t141, %t143 - br i1 %t144, label %range4308, label %inrange4309 -range4308: + br i1 %t144, label %range4312, label %inrange4313 +range4312: call void @finch_panic_index(ptr @.str.2618, i64 1860, i64 %t141, i64 %t143) unreachable -inrange4309: +inrange4313: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds %S.gen.StructDef, ptr %t145, i64 %t141 %t147 = getelementptr inbounds %S.gen.StructDef, ptr %t146, i32 0, i32 3 @@ -44593,21 +44619,21 @@ inrange4309: store i64 %t152, ptr %t148 %t155 = load ptr, ptr %a1 %t156 = icmp eq ptr %t155, null - br i1 %t156, label %panic4310, label %ok4311 -panic4310: + br i1 %t156, label %panic4314, label %ok4315 +panic4314: call void @finch_panic(ptr @.str.2619, i64 1861, ptr @.str.2620) unreachable -ok4311: +ok4315: %t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 16 %t158 = load i64, ptr %a2 %t159 = load { ptr, i64, i64 }, ptr %t157 %t160 = extractvalue { ptr, i64, i64 } %t159, 1 %t161 = icmp uge i64 %t158, %t160 - br i1 %t161, label %range4312, label %inrange4313 -range4312: + br i1 %t161, label %range4316, label %inrange4317 +range4316: call void @finch_panic_index(ptr @.str.2621, i64 1861, i64 %t158, i64 %t160) unreachable -inrange4313: +inrange4317: %t162 = extractvalue { ptr, i64, i64 } %t159, 0 %t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i64 %t158 %t164 = getelementptr inbounds %S.gen.StructDef, ptr %t163, i32 0, i32 4 @@ -44639,19 +44665,19 @@ inrange4313: %t184 = add i64 %t181, %t183 store i64 %t184, ptr %a42 call void @finch.drop.S_ast_Type(ptr %a60) - br label %each.step4287 -each.step4287: + br label %each.step4291 +each.step4291: %t185 = load i64, ptr %a45 %t186 = add i64 %t185, 1 store i64 %t186, ptr %a45 - br label %each.cond4285 -each.end4288: + br label %each.cond4289 +each.end4292: %t187 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t188 = load i64, ptr %t187 %t189 = load i64, ptr %a42 %t190 = icmp sgt i64 %t188, %t189 - br i1 %t190, label %then4314, label %endif4316 -then4314: + br i1 %t190, label %then4318, label %endif4320 +then4318: %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 %t192 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t193 = load i64, ptr %t192 @@ -44678,27 +44704,27 @@ then4314: %t211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t210, i64 %t208 store { ptr, i64, i64 } %t207, ptr %t211 store i64 %t209, ptr %t191 - br label %endif4316 -endif4316: + br label %endif4320 +endif4320: %t212 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 %t213 = load { ptr, i64, i64 }, ptr %t212 %t214 = load ptr, ptr %a1 %t215 = icmp eq ptr %t214, null - br i1 %t215, label %panic4317, label %ok4318 -panic4317: + br i1 %t215, label %panic4321, label %ok4322 +panic4321: call void @finch_panic(ptr @.str.2624, i64 1868, ptr @.str.2625) unreachable -ok4318: +ok4322: %t216 = getelementptr inbounds %S.gen.Gen, ptr %t214, i32 0, i32 16 %t217 = load i64, ptr %a2 %t218 = load { ptr, i64, i64 }, ptr %t216 %t219 = extractvalue { ptr, i64, i64 } %t218, 1 %t220 = icmp uge i64 %t217, %t219 - br i1 %t220, label %range4319, label %inrange4320 -range4319: + br i1 %t220, label %range4323, label %inrange4324 +range4323: call void @finch_panic_index(ptr @.str.2626, i64 1868, i64 %t217, i64 %t219) unreachable -inrange4320: +inrange4324: %t221 = extractvalue { ptr, i64, i64 } %t218, 0 %t222 = getelementptr inbounds %S.gen.StructDef, ptr %t221, i64 %t217 %t223 = getelementptr inbounds %S.gen.StructDef, ptr %t222, i32 0, i32 8 @@ -44711,38 +44737,38 @@ inrange4320: call void @finch_str_drop(ptr %a228) %t229 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 5 %t230 = load i1, ptr %t229 - br label %logic.from4321 -logic.from4321: - br i1 %t230, label %logic.rhs4322, label %logic.end4323 -logic.rhs4322: + br label %logic.from4325 +logic.from4325: + br i1 %t230, label %logic.rhs4326, label %logic.end4327 +logic.rhs4326: %t231 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i32 0, i32 1 %t233 = load i64, ptr %t232 %t234 = icmp eq i64 %t233, 0 - br label %logic.rend4324 -logic.rend4324: - br label %logic.end4323 -logic.end4323: - %t235 = phi i1 [ false, %logic.from4321 ], [ %t234, %logic.rend4324 ] - br i1 %t235, label %then4325, label %endif4327 -then4325: + br label %logic.rend4328 +logic.rend4328: + br label %logic.end4327 +logic.end4327: + %t235 = phi i1 [ false, %logic.from4325 ], [ %t234, %logic.rend4328 ] + br i1 %t235, label %then4329, label %endif4331 +then4329: %t236 = load ptr, ptr %a1 %t237 = icmp eq ptr %t236, null - br i1 %t237, label %panic4328, label %ok4329 -panic4328: + br i1 %t237, label %panic4332, label %ok4333 +panic4332: call void @finch_panic(ptr @.str.2628, i64 1870, ptr @.str.2629) unreachable -ok4329: +ok4333: %t238 = getelementptr inbounds %S.gen.Gen, ptr %t236, i32 0, i32 16 %t239 = load i64, ptr %a2 %t240 = load { ptr, i64, i64 }, ptr %t238 %t241 = extractvalue { ptr, i64, i64 } %t240, 1 %t242 = icmp uge i64 %t239, %t241 - br i1 %t242, label %range4330, label %inrange4331 -range4330: + br i1 %t242, label %range4334, label %inrange4335 +range4334: call void @finch_panic_index(ptr @.str.2630, i64 1870, i64 %t239, i64 %t241) unreachable -inrange4331: +inrange4335: %t243 = extractvalue { ptr, i64, i64 } %t240, 0 %t244 = getelementptr inbounds %S.gen.StructDef, ptr %t243, i64 %t239 %t245 = getelementptr inbounds %S.gen.StructDef, ptr %t244, i32 0, i32 8 @@ -44750,27 +44776,27 @@ inrange4331: store { ptr, i64, i64 } { ptr @.str.2627, i64 49, i64 0 }, ptr %t245 store { ptr, i64, i64 } %t246, ptr %a247 call void @finch_str_drop(ptr %a247) - br label %endif4327 -endif4327: + br label %endif4331 +endif4331: %t248 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 %t249 = load i64, ptr %t248 %t250 = load ptr, ptr %a1 %t251 = icmp eq ptr %t250, null - br i1 %t251, label %panic4332, label %ok4333 -panic4332: + br i1 %t251, label %panic4336, label %ok4337 +panic4336: call void @finch_panic(ptr @.str.2631, i64 1872, ptr @.str.2632) unreachable -ok4333: +ok4337: %t252 = getelementptr inbounds %S.gen.Gen, ptr %t250, i32 0, i32 16 %t253 = load i64, ptr %a2 %t254 = load { ptr, i64, i64 }, ptr %t252 %t255 = extractvalue { ptr, i64, i64 } %t254, 1 %t256 = icmp uge i64 %t253, %t255 - br i1 %t256, label %range4334, label %inrange4335 -range4334: + br i1 %t256, label %range4338, label %inrange4339 +range4338: call void @finch_panic_index(ptr @.str.2633, i64 1872, i64 %t253, i64 %t255) unreachable -inrange4335: +inrange4339: %t257 = extractvalue { ptr, i64, i64 } %t254, 0 %t258 = getelementptr inbounds %S.gen.StructDef, ptr %t257, i64 %t253 %t259 = getelementptr inbounds %S.gen.StructDef, ptr %t258, i32 0, i32 9 @@ -44779,53 +44805,53 @@ inrange4335: %t261 = load i64, ptr %t260 %t262 = load ptr, ptr %a1 %t263 = icmp eq ptr %t262, null - br i1 %t263, label %panic4336, label %ok4337 -panic4336: + br i1 %t263, label %panic4340, label %ok4341 +panic4340: call void @finch_panic(ptr @.str.2634, i64 1873, ptr @.str.2635) unreachable -ok4337: +ok4341: %t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 16 %t265 = load i64, ptr %a2 %t266 = load { ptr, i64, i64 }, ptr %t264 %t267 = extractvalue { ptr, i64, i64 } %t266, 1 %t268 = icmp uge i64 %t265, %t267 - br i1 %t268, label %range4338, label %inrange4339 -range4338: + br i1 %t268, label %range4342, label %inrange4343 +range4342: call void @finch_panic_index(ptr @.str.2636, i64 1873, i64 %t265, i64 %t267) unreachable -inrange4339: +inrange4343: %t269 = extractvalue { ptr, i64, i64 } %t266, 0 %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i64 %t265 %t271 = getelementptr inbounds %S.gen.StructDef, ptr %t270, i32 0, i32 10 store i64 %t261, ptr %t271 %t272 = load ptr, ptr %a1 %t273 = icmp eq ptr %t272, null - br i1 %t273, label %panic4340, label %ok4341 -panic4340: + br i1 %t273, label %panic4344, label %ok4345 +panic4344: call void @finch_panic(ptr @.str.2637, i64 1874, ptr @.str.2638) unreachable -ok4341: +ok4345: %t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 16 %t275 = load i64, ptr %a2 %t276 = load { ptr, i64, i64 }, ptr %t274 %t277 = extractvalue { ptr, i64, i64 } %t276, 1 %t278 = icmp uge i64 %t275, %t277 - br i1 %t278, label %range4342, label %inrange4343 -range4342: + br i1 %t278, label %range4346, label %inrange4347 +range4346: call void @finch_panic_index(ptr @.str.2639, i64 1874, i64 %t275, i64 %t277) unreachable -inrange4343: +inrange4347: %t279 = extractvalue { ptr, i64, i64 } %t276, 0 %t280 = getelementptr inbounds %S.gen.StructDef, ptr %t279, i64 %t275 %t281 = getelementptr inbounds %S.gen.StructDef, ptr %t280, i32 0, i32 15 store i64 2, ptr %t281 %t282 = load ptr, ptr %a1 %t283 = icmp eq ptr %t282, null - br i1 %t283, label %panic4344, label %ok4345 -panic4344: + br i1 %t283, label %panic4348, label %ok4349 +panic4348: call void @finch_panic(ptr @.str.2640, i64 1875, ptr @.str.2641) unreachable -ok4345: +ok4349: %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 2 %t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i32 0, i32 1 %t286 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 0 @@ -44910,95 +44936,95 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4346, label %ok4347 -panic4346: + br i1 %t4, label %panic4350, label %ok4351 +panic4350: call void @finch_panic(ptr @.str.2646, i64 1879, ptr @.str.2647) unreachable -ok4347: +ok4351: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 - br i1 %t9, label %range4348, label %inrange4349 -range4348: + br i1 %t9, label %range4352, label %inrange4353 +range4352: call void @finch_panic_index(ptr @.str.2648, i64 1879, i64 %t6, i64 %t8) unreachable -inrange4349: +inrange4353: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.StructDef, ptr %t10, i64 %t6 %t12 = getelementptr inbounds %S.gen.StructDef, ptr %t11, i32 0, i32 15 %t13 = load i64, ptr %t12 %t14 = icmp eq i64 %t13, 2 - br i1 %t14, label %then4350, label %endif4352 -then4350: + br i1 %t14, label %then4354, label %endif4356 +then4354: ret void -endif4352: +endif4356: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic4353, label %ok4354 -panic4353: + br i1 %t16, label %panic4357, label %ok4358 +panic4357: call void @finch_panic(ptr @.str.2649, i64 1882, ptr @.str.2650) unreachable -ok4354: +ok4358: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 16 %t18 = load i64, ptr %a2 %t19 = load { ptr, i64, i64 }, ptr %t17 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range4355, label %inrange4356 -range4355: + br i1 %t21, label %range4359, label %inrange4360 +range4359: call void @finch_panic_index(ptr @.str.2651, i64 1882, i64 %t18, i64 %t20) unreachable -inrange4356: +inrange4360: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i64 %t18 %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i32 0, i32 2 %t25 = load i1, ptr %t24 - br i1 %t25, label %then4357, label %endif4359 -then4357: + br i1 %t25, label %then4361, label %endif4363 +then4361: %t26 = load ptr, ptr %a1 %t27 = load i64, ptr %a2 call void @finch.gen.resolveCStruct(ptr %t26, i64 %t27) ret void -endif4359: +endif4363: %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic4360, label %ok4361 -panic4360: + br i1 %t29, label %panic4364, label %ok4365 +panic4364: call void @finch_panic(ptr @.str.2652, i64 1886, ptr @.str.2653) unreachable -ok4361: +ok4365: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 %t31 = load i64, ptr %a2 %t32 = load { ptr, i64, i64 }, ptr %t30 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range4362, label %inrange4363 -range4362: + br i1 %t34, label %range4366, label %inrange4367 +range4366: call void @finch_panic_index(ptr @.str.2654, i64 1886, i64 %t31, i64 %t33) unreachable -inrange4363: +inrange4367: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 5 %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 %t39 = load i64, ptr %t38 %t40 = icmp eq i64 %t39, 0 - br i1 %t40, label %then4364, label %endif4366 -then4364: + br i1 %t40, label %then4368, label %endif4370 +then4368: %t41 = load ptr, ptr %a1 %t42 = load i64, ptr %a2 call void @finch.gen.resolveStructBody(ptr %t41, i64 %t42) ret void -endif4366: +endif4370: %t43 = load ptr, ptr %a1 %t44 = icmp eq ptr %t43, null - br i1 %t44, label %panic4367, label %ok4368 -panic4367: + br i1 %t44, label %panic4371, label %ok4372 +panic4371: call void @finch_panic(ptr @.str.2655, i64 1891, ptr @.str.2656) unreachable -ok4368: +ok4372: %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 18 %t46 = load { ptr, i64, i64 }, ptr %t45 store { ptr, i64, i64 } %t46, ptr %a47 @@ -45007,11 +45033,11 @@ ok4368: store { ptr, i64, i64 } %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null - br i1 %t52, label %panic4369, label %ok4370 -panic4369: + br i1 %t52, label %panic4373, label %ok4374 +panic4373: call void @finch_panic(ptr @.str.2657, i64 1892, ptr @.str.2658) unreachable -ok4370: +ok4374: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 19 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 @@ -45020,11 +45046,11 @@ ok4370: store { ptr, i64, i64 } %t57, ptr %a58 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic4371, label %ok4372 -panic4371: + br i1 %t60, label %panic4375, label %ok4376 +panic4375: call void @finch_panic(ptr @.str.2659, i64 1893, ptr @.str.2660) unreachable -ok4372: +ok4376: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 20 %t62 = load { ptr, i64, i64 }, ptr %t61 store { ptr, i64, i64 } %t62, ptr %a63 @@ -45033,32 +45059,32 @@ ok4372: store { ptr, i64, i64 } %t65, ptr %a66 %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic4373, label %ok4374 -panic4373: + br i1 %t68, label %panic4377, label %ok4378 +panic4377: call void @finch_panic(ptr @.str.2661, i64 1894, ptr @.str.2662) unreachable -ok4374: +ok4378: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 16 %t70 = load i64, ptr %a2 %t71 = load { ptr, i64, i64 }, ptr %t69 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 %t70, %t72 - br i1 %t73, label %range4375, label %inrange4376 -range4375: + br i1 %t73, label %range4379, label %inrange4380 +range4379: call void @finch_panic_index(ptr @.str.2663, i64 1894, i64 %t70, i64 %t72) unreachable -inrange4376: +inrange4380: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds %S.gen.StructDef, ptr %t74, i64 %t70 %t76 = getelementptr inbounds %S.gen.StructDef, ptr %t75, i32 0, i32 6 %t77 = load { ptr, i64, i64 }, ptr %t76 %t78 = load ptr, ptr %a1 %t79 = icmp eq ptr %t78, null - br i1 %t79, label %panic4377, label %ok4378 -panic4377: + br i1 %t79, label %panic4381, label %ok4382 +panic4381: call void @finch_panic(ptr @.str.2664, i64 1894, ptr @.str.2665) unreachable -ok4378: +ok4382: %t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 18 store { ptr, i64, i64 } %t77, ptr %a81 call void @finch.copy.arr_str(ptr %a82, ptr %a81) @@ -45069,32 +45095,32 @@ ok4378: call void @finch.drop.arr_str(ptr %a85) %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic4379, label %ok4380 -panic4379: + br i1 %t87, label %panic4383, label %ok4384 +panic4383: call void @finch_panic(ptr @.str.2666, i64 1895, ptr @.str.2667) unreachable -ok4380: +ok4384: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 16 %t89 = load i64, ptr %a2 %t90 = load { ptr, i64, i64 }, ptr %t88 %t91 = extractvalue { ptr, i64, i64 } %t90, 1 %t92 = icmp uge i64 %t89, %t91 - br i1 %t92, label %range4381, label %inrange4382 -range4381: + br i1 %t92, label %range4385, label %inrange4386 +range4385: call void @finch_panic_index(ptr @.str.2668, i64 1895, i64 %t89, i64 %t91) unreachable -inrange4382: +inrange4386: %t93 = extractvalue { ptr, i64, i64 } %t90, 0 %t94 = getelementptr inbounds %S.gen.StructDef, ptr %t93, i64 %t89 %t95 = getelementptr inbounds %S.gen.StructDef, ptr %t94, i32 0, i32 7 %t96 = load { ptr, i64, i64 }, ptr %t95 %t97 = load ptr, ptr %a1 %t98 = icmp eq ptr %t97, null - br i1 %t98, label %panic4383, label %ok4384 -panic4383: + br i1 %t98, label %panic4387, label %ok4388 +panic4387: call void @finch_panic(ptr @.str.2669, i64 1895, ptr @.str.2670) unreachable -ok4384: +ok4388: %t99 = getelementptr inbounds %S.gen.Gen, ptr %t97, i32 0, i32 19 store { ptr, i64, i64 } %t96, ptr %a100 call void @finch.copy.arr_S_ast_Type(ptr %a101, ptr %a100) @@ -45105,21 +45131,21 @@ ok4384: call void @finch.drop.arr_S_ast_Type(ptr %a104) %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null - br i1 %t106, label %panic4385, label %ok4386 -panic4385: + br i1 %t106, label %panic4389, label %ok4390 +panic4389: call void @finch_panic(ptr @.str.2672, i64 1896, ptr @.str.2673) unreachable -ok4386: +ok4390: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 16 %t108 = load i64, ptr %a2 %t109 = load { ptr, i64, i64 }, ptr %t107 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 %t108, %t110 - br i1 %t111, label %range4387, label %inrange4388 -range4387: + br i1 %t111, label %range4391, label %inrange4392 +range4391: call void @finch_panic_index(ptr @.str.2674, i64 1896, i64 %t108, i64 %t110) unreachable -inrange4388: +inrange4392: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds %S.gen.StructDef, ptr %t112, i64 %t108 %t114 = getelementptr inbounds %S.gen.StructDef, ptr %t113, i32 0, i32 1 @@ -45136,11 +45162,11 @@ inrange4388: %t124 = load { ptr, i64, i64 }, ptr %a120 %t125 = load ptr, ptr %a1 %t126 = icmp eq ptr %t125, null - br i1 %t126, label %panic4389, label %ok4390 -panic4389: + br i1 %t126, label %panic4393, label %ok4394 +panic4393: call void @finch_panic(ptr @.str.2676, i64 1896, ptr @.str.2677) unreachable -ok4390: +ok4394: %t127 = getelementptr inbounds %S.gen.Gen, ptr %t125, i32 0, i32 20 %t128 = load { ptr, i64, i64 }, ptr %t127 store { ptr, i64, i64 } %t124, ptr %t127 @@ -45152,11 +45178,11 @@ ok4390: %t132 = load { ptr, i64, i64 }, ptr %a50 %t133 = load ptr, ptr %a1 %t134 = icmp eq ptr %t133, null - br i1 %t134, label %panic4391, label %ok4392 -panic4391: + br i1 %t134, label %panic4395, label %ok4396 +panic4395: call void @finch_panic(ptr @.str.2678, i64 1898, ptr @.str.2679) unreachable -ok4392: +ok4396: %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 18 store { ptr, i64, i64 } %t132, ptr %a136 call void @finch.copy.arr_str(ptr %a137, ptr %a136) @@ -45168,11 +45194,11 @@ ok4392: %t141 = load { ptr, i64, i64 }, ptr %a58 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic4393, label %ok4394 -panic4393: + br i1 %t143, label %panic4397, label %ok4398 +panic4397: call void @finch_panic(ptr @.str.2680, i64 1899, ptr @.str.2681) unreachable -ok4394: +ok4398: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 19 store { ptr, i64, i64 } %t141, ptr %a145 call void @finch.copy.arr_S_ast_Type(ptr %a146, ptr %a145) @@ -45184,11 +45210,11 @@ ok4394: %t150 = load { ptr, i64, i64 }, ptr %a66 %t151 = load ptr, ptr %a1 %t152 = icmp eq ptr %t151, null - br i1 %t152, label %panic4395, label %ok4396 -panic4395: + br i1 %t152, label %panic4399, label %ok4400 +panic4399: call void @finch_panic(ptr @.str.2682, i64 1900, ptr @.str.2683) unreachable -ok4396: +ok4400: %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 20 store { ptr, i64, i64 } %t150, ptr %a154 call void @finch_str_copy(ptr %a155, ptr %a154) @@ -45286,29 +45312,29 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4397, label %ok4398 -panic4397: + br i1 %t4, label %panic4401, label %ok4402 +panic4401: call void @finch_panic(ptr @.str.2684, i64 1904, ptr @.str.2685) unreachable -ok4398: +ok4402: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic4399, label %ok4400 -panic4399: + br i1 %t7, label %panic4403, label %ok4404 +panic4403: call void @finch_panic(ptr @.str.2686, i64 1904, ptr @.str.2687) unreachable -ok4400: +ok4404: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range4401, label %inrange4402 -range4401: + br i1 %t12, label %range4405, label %inrange4406 +range4405: call void @finch_panic_index(ptr @.str.2688, i64 1904, i64 %t9, i64 %t11) unreachable -inrange4402: +inrange4406: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i32 0, i32 13 @@ -45316,31 +45342,31 @@ inrange4402: %t17 = load { ptr, i64, i64 }, ptr %t5 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 - br i1 %t19, label %range4403, label %inrange4404 -range4403: + br i1 %t19, label %range4407, label %inrange4408 +range4407: call void @finch_panic_index(ptr @.str.2689, i64 1904, i64 %t16, i64 %t18) unreachable -inrange4404: +inrange4408: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.ast.Program, ptr %t20, i64 %t16 %t22 = getelementptr inbounds %S.ast.Program, ptr %t21, i32 0, i32 6 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic4405, label %ok4406 -panic4405: + br i1 %t24, label %panic4409, label %ok4410 +panic4409: call void @finch_panic(ptr @.str.2690, i64 1904, ptr @.str.2691) unreachable -ok4406: +ok4410: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 16 %t26 = load i64, ptr %a2 %t27 = load { ptr, i64, i64 }, ptr %t25 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 - br i1 %t29, label %range4407, label %inrange4408 -range4407: + br i1 %t29, label %range4411, label %inrange4412 +range4411: call void @finch_panic_index(ptr @.str.2692, i64 1904, i64 %t26, i64 %t28) unreachable -inrange4408: +inrange4412: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds %S.gen.StructDef, ptr %t30, i64 %t26 %t32 = getelementptr inbounds %S.gen.StructDef, ptr %t31, i32 0, i32 14 @@ -45348,11 +45374,11 @@ inrange4408: %t34 = load { ptr, i64, i64 }, ptr %t22 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 - br i1 %t36, label %range4409, label %inrange4410 -range4409: + br i1 %t36, label %range4413, label %inrange4414 +range4413: call void @finch_panic_index(ptr @.str.2693, i64 1904, i64 %t33, i64 %t35) unreachable -inrange4410: +inrange4414: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 %t39 = load %S.ast.Node, ptr %t38 @@ -45362,28 +45388,28 @@ inrange4410: store %S.ast.Node %t42, ptr %a43 %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic4411, label %ok4412 -panic4411: + br i1 %t45, label %panic4415, label %ok4416 +panic4415: call void @finch_panic(ptr @.str.2694, i64 1905, ptr @.str.2695) unreachable -ok4412: +ok4416: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 16 %t47 = load i64, ptr %a2 %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range4413, label %inrange4414 -range4413: + br i1 %t50, label %range4417, label %inrange4418 +range4417: call void @finch_panic_index(ptr @.str.2696, i64 1905, i64 %t47, i64 %t49) unreachable -inrange4414: +inrange4418: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds %S.gen.StructDef, ptr %t51, i64 %t47 %t53 = getelementptr inbounds %S.gen.StructDef, ptr %t52, i32 0, i32 15 %t54 = load i64, ptr %t53 %t55 = icmp eq i64 %t54, 1 - br i1 %t55, label %then4415, label %endif4417 -then4415: + br i1 %t55, label %then4419, label %endif4421 +then4419: %t56 = load ptr, ptr %a1 %t57 = load %S.ast.Node, ptr %a43 %t58 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 @@ -45429,36 +45455,36 @@ then4415: call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t92) store { ptr, i64, i64 } %t92, ptr %a93 call void @finch_str_drop(ptr %a93) - br label %endif4417 -endif4417: + br label %endif4421 +endif4421: %t94 = load ptr, ptr %a1 %t95 = icmp eq ptr %t94, null - br i1 %t95, label %panic4418, label %ok4419 -panic4418: + br i1 %t95, label %panic4422, label %ok4423 +panic4422: call void @finch_panic(ptr @.str.2701, i64 1908, ptr @.str.2702) unreachable -ok4419: +ok4423: %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 16 %t97 = load i64, ptr %a2 %t98 = load { ptr, i64, i64 }, ptr %t96 %t99 = extractvalue { ptr, i64, i64 } %t98, 1 %t100 = icmp uge i64 %t97, %t99 - br i1 %t100, label %range4420, label %inrange4421 -range4420: + br i1 %t100, label %range4424, label %inrange4425 +range4424: call void @finch_panic_index(ptr @.str.2703, i64 1908, i64 %t97, i64 %t99) unreachable -inrange4421: +inrange4425: %t101 = extractvalue { ptr, i64, i64 } %t98, 0 %t102 = getelementptr inbounds %S.gen.StructDef, ptr %t101, i64 %t97 %t103 = getelementptr inbounds %S.gen.StructDef, ptr %t102, i32 0, i32 15 store i64 1, ptr %t103 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null - br i1 %t105, label %panic4422, label %ok4423 -panic4422: + br i1 %t105, label %panic4426, label %ok4427 +panic4426: call void @finch_panic(ptr @.str.2704, i64 1909, ptr @.str.2705) unreachable -ok4423: +ok4427: %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 14 %t107 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t107, ptr %a108 @@ -45467,32 +45493,32 @@ ok4423: store { ptr, i64, i64 } %t110, ptr %a111 %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null - br i1 %t113, label %panic4424, label %ok4425 -panic4424: + br i1 %t113, label %panic4428, label %ok4429 +panic4428: call void @finch_panic(ptr @.str.2706, i64 1910, ptr @.str.2707) unreachable -ok4425: +ok4429: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 16 %t115 = load i64, ptr %a2 %t116 = load { ptr, i64, i64 }, ptr %t114 %t117 = extractvalue { ptr, i64, i64 } %t116, 1 %t118 = icmp uge i64 %t115, %t117 - br i1 %t118, label %range4426, label %inrange4427 -range4426: + br i1 %t118, label %range4430, label %inrange4431 +range4430: call void @finch_panic_index(ptr @.str.2708, i64 1910, i64 %t115, i64 %t117) unreachable -inrange4427: +inrange4431: %t119 = extractvalue { ptr, i64, i64 } %t116, 0 %t120 = getelementptr inbounds %S.gen.StructDef, ptr %t119, i64 %t115 %t121 = getelementptr inbounds %S.gen.StructDef, ptr %t120, i32 0, i32 0 %t122 = load { ptr, i64, i64 }, ptr %t121 %t123 = load ptr, ptr %a1 %t124 = icmp eq ptr %t123, null - br i1 %t124, label %panic4428, label %ok4429 -panic4428: + br i1 %t124, label %panic4432, label %ok4433 +panic4432: call void @finch_panic(ptr @.str.2709, i64 1910, ptr @.str.2710) unreachable -ok4429: +ok4433: %t125 = getelementptr inbounds %S.gen.Gen, ptr %t123, i32 0, i32 14 store { ptr, i64, i64 } %t122, ptr %a126 call void @finch_str_copy(ptr %a127, ptr %a126) @@ -45505,14 +45531,14 @@ ok4429: store { ptr, i64, i64 } zeroinitializer, ptr %a132 %t133 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 9 store i64 0, ptr %a134 - br label %each.cond4430 -each.cond4430: + br label %each.cond4434 +each.cond4434: %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = load i64, ptr %a134 %t138 = icmp slt i64 %t137, %t136 - br i1 %t138, label %each.body4431, label %each.end4433 -each.body4431: + br i1 %t138, label %each.body4435, label %each.end4437 +each.body4435: %t139 = load ptr, ptr %t133 %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 %t137 %t141 = load %S.ast.Node, ptr %t140 @@ -45529,8 +45555,8 @@ each.body4431: store { ptr, i64, i64 } { ptr @.str.2711, i64 6, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp ne i32 %t153, 0 - br i1 %t154, label %then4434, label %endif4436 -then4434: + br i1 %t154, label %then4438, label %endif4440 +then4438: %t155 = load ptr, ptr %a1 %t156 = load ptr, ptr %a1 %t157 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 3 @@ -45539,46 +45565,46 @@ then4434: %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = call i64 @finch.gen.findStruct(ptr %t156, { ptr, i64, i64 } %t158, { ptr, i64, i64 } %t160) call void @finch.gen.resolveStruct(ptr %t155, i64 %t161) - br label %endif4436 -endif4436: + br label %endif4440 +endif4440: %t162 = load ptr, ptr %a1 %t163 = icmp eq ptr %t162, null - br i1 %t163, label %panic4437, label %ok4438 -panic4437: + br i1 %t163, label %panic4441, label %ok4442 +panic4441: call void @finch_panic(ptr @.str.2712, i64 1918, ptr @.str.2713) unreachable -ok4438: +ok4442: %t164 = getelementptr inbounds %S.gen.Gen, ptr %t162, i32 0, i32 16 %t165 = load i64, ptr %a2 %t166 = load { ptr, i64, i64 }, ptr %t164 %t167 = extractvalue { ptr, i64, i64 } %t166, 1 %t168 = icmp uge i64 %t165, %t167 - br i1 %t168, label %range4439, label %inrange4440 -range4439: + br i1 %t168, label %range4443, label %inrange4444 +range4443: call void @finch_panic_index(ptr @.str.2714, i64 1918, i64 %t165, i64 %t167) unreachable -inrange4440: +inrange4444: %t169 = extractvalue { ptr, i64, i64 } %t166, 0 %t170 = getelementptr inbounds %S.gen.StructDef, ptr %t169, i64 %t165 %t171 = getelementptr inbounds %S.gen.StructDef, ptr %t170, i32 0, i32 3 %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic4441, label %ok4442 -panic4441: + br i1 %t174, label %panic4445, label %ok4446 +panic4445: call void @finch_panic(ptr @.str.2715, i64 1918, ptr @.str.2716) unreachable -ok4442: +ok4446: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 16 %t176 = load i64, ptr %a2 %t177 = load { ptr, i64, i64 }, ptr %t175 %t178 = extractvalue { ptr, i64, i64 } %t177, 1 %t179 = icmp uge i64 %t176, %t178 - br i1 %t179, label %range4443, label %inrange4444 -range4443: + br i1 %t179, label %range4447, label %inrange4448 +range4447: call void @finch_panic_index(ptr @.str.2717, i64 1918, i64 %t176, i64 %t178) unreachable -inrange4444: +inrange4448: %t180 = extractvalue { ptr, i64, i64 } %t177, 0 %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t176 %t182 = getelementptr inbounds %S.gen.StructDef, ptr %t181, i32 0, i32 11 @@ -45593,21 +45619,21 @@ inrange4444: store i64 %t186, ptr %t172 %t189 = load ptr, ptr %a1 %t190 = icmp eq ptr %t189, null - br i1 %t190, label %panic4445, label %ok4446 -panic4445: + br i1 %t190, label %panic4449, label %ok4450 +panic4449: call void @finch_panic(ptr @.str.2718, i64 1919, ptr @.str.2719) unreachable -ok4446: +ok4450: %t191 = getelementptr inbounds %S.gen.Gen, ptr %t189, i32 0, i32 16 %t192 = load i64, ptr %a2 %t193 = load { ptr, i64, i64 }, ptr %t191 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 %t192, %t194 - br i1 %t195, label %range4447, label %inrange4448 -range4447: + br i1 %t195, label %range4451, label %inrange4452 +range4451: call void @finch_panic_index(ptr @.str.2720, i64 1919, i64 %t192, i64 %t194) unreachable -inrange4448: +inrange4452: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds %S.gen.StructDef, ptr %t196, i64 %t192 %t198 = getelementptr inbounds %S.gen.StructDef, ptr %t197, i32 0, i32 11 @@ -45626,21 +45652,21 @@ inrange4448: store i64 %t206, ptr %t199 %t209 = load ptr, ptr %a1 %t210 = icmp eq ptr %t209, null - br i1 %t210, label %panic4449, label %ok4450 -panic4449: + br i1 %t210, label %panic4453, label %ok4454 +panic4453: call void @finch_panic(ptr @.str.2721, i64 1920, ptr @.str.2722) unreachable -ok4450: +ok4454: %t211 = getelementptr inbounds %S.gen.Gen, ptr %t209, i32 0, i32 16 %t212 = load i64, ptr %a2 %t213 = load { ptr, i64, i64 }, ptr %t211 %t214 = extractvalue { ptr, i64, i64 } %t213, 1 %t215 = icmp uge i64 %t212, %t214 - br i1 %t215, label %range4451, label %inrange4452 -range4451: + br i1 %t215, label %range4455, label %inrange4456 +range4455: call void @finch_panic_index(ptr @.str.2723, i64 1920, i64 %t212, i64 %t214) unreachable -inrange4452: +inrange4456: %t216 = extractvalue { ptr, i64, i64 } %t213, 0 %t217 = getelementptr inbounds %S.gen.StructDef, ptr %t216, i64 %t212 %t218 = getelementptr inbounds %S.gen.StructDef, ptr %t217, i32 0, i32 12 @@ -45659,11 +45685,11 @@ inrange4452: %t228 = load ptr, ptr %a1 %t229 = load %S.ast.Type, ptr %a148 %t230 = call i1 @finch.gen.owning(ptr %t228, %S.ast.Type %t229) - br i1 %t230, label %then4453, label %endif4455 -then4453: + br i1 %t230, label %then4457, label %endif4459 +then4457: store i1 true, ptr %a131 - br label %endif4455 -endif4455: + br label %endif4459 +endif4459: %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 %t232 = load ptr, ptr %a1 %t233 = load %S.ast.Type, ptr %a148 @@ -45676,31 +45702,31 @@ endif4455: store { ptr, i64, i64 } %t234, ptr %t238 store i64 %t236, ptr %t231 call void @finch.drop.S_ast_Type(ptr %a148) - br label %each.step4432 -each.step4432: + br label %each.step4436 +each.step4436: %t239 = load i64, ptr %a134 %t240 = add i64 %t239, 1 store i64 %t240, ptr %a134 - br label %each.cond4430 -each.end4433: + br label %each.cond4434 +each.end4437: %t241 = load i1, ptr %a131 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null - br i1 %t243, label %panic4456, label %ok4457 -panic4456: + br i1 %t243, label %panic4460, label %ok4461 +panic4460: call void @finch_panic(ptr @.str.2724, i64 1926, ptr @.str.2725) unreachable -ok4457: +ok4461: %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 16 %t245 = load i64, ptr %a2 %t246 = load { ptr, i64, i64 }, ptr %t244 %t247 = extractvalue { ptr, i64, i64 } %t246, 1 %t248 = icmp uge i64 %t245, %t247 - br i1 %t248, label %range4458, label %inrange4459 -range4458: + br i1 %t248, label %range4462, label %inrange4463 +range4462: call void @finch_panic_index(ptr @.str.2726, i64 1926, i64 %t245, i64 %t247) unreachable -inrange4459: +inrange4463: %t249 = extractvalue { ptr, i64, i64 } %t246, 0 %t250 = getelementptr inbounds %S.gen.StructDef, ptr %t249, i64 %t245 %t251 = getelementptr inbounds %S.gen.StructDef, ptr %t250, i32 0, i32 16 @@ -45708,11 +45734,11 @@ inrange4459: %t252 = load { ptr, i64, i64 }, ptr %a111 %t253 = load ptr, ptr %a1 %t254 = icmp eq ptr %t253, null - br i1 %t254, label %panic4460, label %ok4461 -panic4460: + br i1 %t254, label %panic4464, label %ok4465 +panic4464: call void @finch_panic(ptr @.str.2727, i64 1927, ptr @.str.2728) unreachable -ok4461: +ok4465: %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 14 store { ptr, i64, i64 } %t252, ptr %a256 call void @finch_str_copy(ptr %a257, ptr %a256) @@ -45723,51 +45749,51 @@ ok4461: call void @finch_str_drop(ptr %a260) %t261 = load ptr, ptr %a1 %t262 = icmp eq ptr %t261, null - br i1 %t262, label %panic4462, label %ok4463 -panic4462: + br i1 %t262, label %panic4466, label %ok4467 +panic4466: call void @finch_panic(ptr @.str.2729, i64 1928, ptr @.str.2730) unreachable -ok4463: +ok4467: %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 16 %t264 = load i64, ptr %a2 %t265 = load { ptr, i64, i64 }, ptr %t263 %t266 = extractvalue { ptr, i64, i64 } %t265, 1 %t267 = icmp uge i64 %t264, %t266 - br i1 %t267, label %range4464, label %inrange4465 -range4464: + br i1 %t267, label %range4468, label %inrange4469 +range4468: call void @finch_panic_index(ptr @.str.2731, i64 1928, i64 %t264, i64 %t266) unreachable -inrange4465: +inrange4469: %t268 = extractvalue { ptr, i64, i64 } %t265, 0 %t269 = getelementptr inbounds %S.gen.StructDef, ptr %t268, i64 %t264 %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i32 0, i32 15 store i64 2, ptr %t270 %t271 = load ptr, ptr %a1 %t272 = icmp eq ptr %t271, null - br i1 %t272, label %panic4466, label %ok4467 -panic4466: + br i1 %t272, label %panic4470, label %ok4471 +panic4470: call void @finch_panic(ptr @.str.2732, i64 1929, ptr @.str.2733) unreachable -ok4467: +ok4471: %t273 = getelementptr inbounds %S.gen.Gen, ptr %t271, i32 0, i32 2 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 %t275 = load ptr, ptr %a1 %t276 = icmp eq ptr %t275, null - br i1 %t276, label %panic4468, label %ok4469 -panic4468: + br i1 %t276, label %panic4472, label %ok4473 +panic4472: call void @finch_panic(ptr @.str.2735, i64 1929, ptr @.str.2736) unreachable -ok4469: +ok4473: %t277 = getelementptr inbounds %S.gen.Gen, ptr %t275, i32 0, i32 16 %t278 = load i64, ptr %a2 %t279 = load { ptr, i64, i64 }, ptr %t277 %t280 = extractvalue { ptr, i64, i64 } %t279, 1 %t281 = icmp uge i64 %t278, %t280 - br i1 %t281, label %range4470, label %inrange4471 -range4470: + br i1 %t281, label %range4474, label %inrange4475 +range4474: call void @finch_panic_index(ptr @.str.2737, i64 1929, i64 %t278, i64 %t280) unreachable -inrange4471: +inrange4475: %t282 = extractvalue { ptr, i64, i64 } %t279, 0 %t283 = getelementptr inbounds %S.gen.StructDef, ptr %t282, i64 %t278 %t284 = getelementptr inbounds %S.gen.StructDef, ptr %t283, i32 0, i32 0 @@ -45787,21 +45813,21 @@ inrange4471: %t296 = load { ptr, i64, i64 }, ptr %a292 %t297 = load ptr, ptr %a1 %t298 = icmp eq ptr %t297, null - br i1 %t298, label %panic4472, label %ok4473 -panic4472: + br i1 %t298, label %panic4476, label %ok4477 +panic4476: call void @finch_panic(ptr @.str.2739, i64 1929, ptr @.str.2740) unreachable -ok4473: +ok4477: %t299 = getelementptr inbounds %S.gen.Gen, ptr %t297, i32 0, i32 16 %t300 = load i64, ptr %a2 %t301 = load { ptr, i64, i64 }, ptr %t299 %t302 = extractvalue { ptr, i64, i64 } %t301, 1 %t303 = icmp uge i64 %t300, %t302 - br i1 %t303, label %range4474, label %inrange4475 -range4474: + br i1 %t303, label %range4478, label %inrange4479 +range4478: call void @finch_panic_index(ptr @.str.2741, i64 1929, i64 %t300, i64 %t302) unreachable -inrange4475: +inrange4479: %t304 = extractvalue { ptr, i64, i64 } %t301, 0 %t305 = getelementptr inbounds %S.gen.StructDef, ptr %t304, i64 %t300 %t306 = getelementptr inbounds %S.gen.StructDef, ptr %t305, i32 0, i32 1 @@ -45862,11 +45888,11 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4476, label %ok4477 -panic4476: + br i1 %t4, label %panic4480, label %ok4481 +panic4480: call void @finch_panic(ptr @.str.2745, i64 1938, ptr @.str.2746) unreachable -ok4477: +ok4481: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 33 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a2 @@ -45882,11 +45908,11 @@ ok4477: store i64 %t12, ptr %t6 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic4478, label %ok4479 -panic4478: + br i1 %t16, label %panic4482, label %ok4483 +panic4482: call void @finch_panic(ptr @.str.2747, i64 1939, ptr @.str.2748) unreachable -ok4479: +ok4483: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 33 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 @@ -45905,10 +45931,10 @@ entry: store i64 %p0, ptr %a1 %t2 = load i64, ptr %a1 %t3 = icmp slt i64 %t2, 0 - br i1 %t3, label %then4480, label %endif4482 -then4480: + br i1 %t3, label %then4484, label %endif4486 +then4484: ret { ptr, i64, i64 } { ptr @.str.2749, i64 4, i64 0 } -endif4482: +endif4486: %t4 = load i64, ptr %a1 call void @finch_str_from_int(ptr %a5, i64 %t4) %t6 = load { ptr, i64, i64 }, ptr %a5 @@ -45929,22 +45955,22 @@ entry: store i64 %p1, ptr %a2 %t3 = load i64, ptr %a2 %t4 = icmp sle i64 %t3, 1 - br i1 %t4, label %then4483, label %endif4485 -then4483: + br i1 %t4, label %then4487, label %endif4489 +then4487: %t5 = load i64, ptr %a1 ret i64 %t5 -endif4485: +endif4489: %t6 = load i64, ptr %a1 %t7 = load i64, ptr %a2 %t8 = add i64 %t6, %t7 %t9 = sub i64 %t8, 1 %t10 = load i64, ptr %a2 %t11 = icmp eq i64 %t10, 0 - br i1 %t11, label %panic4486, label %ok4487 -panic4486: + br i1 %t11, label %panic4490, label %ok4491 +panic4490: call void @finch_panic(ptr @.str.2751, i64 1958, ptr @.str.2752) unreachable -ok4487: +ok4491: %t12 = sdiv i64 %t9, %t10 %t13 = load i64, ptr %a2 %t14 = mul i64 %t12, %t13 @@ -46010,190 +46036,190 @@ entry: store { ptr, i64, i64 } { ptr @.str.2753, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from4488 -logic.from4488: - br i1 %t13, label %logic.end4490, label %logic.rhs4489 -logic.rhs4489: + br label %logic.from4492 +logic.from4492: + br i1 %t13, label %logic.end4494, label %logic.rhs4493 +logic.rhs4493: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2754, i64 4, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.rend4491 -logic.rend4491: - br label %logic.end4490 -logic.end4490: - %t19 = phi i1 [ true, %logic.from4488 ], [ %t18, %logic.rend4491 ] - br label %logic.from4492 -logic.from4492: - br i1 %t19, label %logic.end4494, label %logic.rhs4493 -logic.rhs4493: + br label %logic.rend4495 +logic.rend4495: + br label %logic.end4494 +logic.end4494: + %t19 = phi i1 [ true, %logic.from4492 ], [ %t18, %logic.rend4495 ] + br label %logic.from4496 +logic.from4496: + br i1 %t19, label %logic.end4498, label %logic.rhs4497 +logic.rhs4497: %t20 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.2755, i64 2, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) %t24 = icmp ne i32 %t23, 0 - br label %logic.rend4495 -logic.rend4495: - br label %logic.end4494 -logic.end4494: - %t25 = phi i1 [ true, %logic.from4492 ], [ %t24, %logic.rend4495 ] - br label %logic.from4496 -logic.from4496: - br i1 %t25, label %logic.end4498, label %logic.rhs4497 -logic.rhs4497: + br label %logic.rend4499 +logic.rend4499: + br label %logic.end4498 +logic.end4498: + %t25 = phi i1 [ true, %logic.from4496 ], [ %t24, %logic.rend4499 ] + br label %logic.from4500 +logic.from4500: + br i1 %t25, label %logic.end4502, label %logic.rhs4501 +logic.rhs4501: %t26 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.2756, i64 2, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br label %logic.rend4499 -logic.rend4499: - br label %logic.end4498 -logic.end4498: - %t31 = phi i1 [ true, %logic.from4496 ], [ %t30, %logic.rend4499 ] - br i1 %t31, label %then4500, label %endif4502 -then4500: + br label %logic.rend4503 +logic.rend4503: + br label %logic.end4502 +logic.end4502: + %t31 = phi i1 [ true, %logic.from4500 ], [ %t30, %logic.rend4503 ] + br i1 %t31, label %then4504, label %endif4506 +then4504: %t32 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 1, 0 %t33 = insertvalue %S.gen.SizeAlign %t32, i64 1, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t33 -endif4502: +endif4506: %t34 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.2757, i64 3, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br label %logic.from4503 -logic.from4503: - br i1 %t38, label %logic.end4505, label %logic.rhs4504 -logic.rhs4504: + br label %logic.from4507 +logic.from4507: + br i1 %t38, label %logic.end4509, label %logic.rhs4508 +logic.rhs4508: %t39 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t39, ptr %a40 store { ptr, i64, i64 } { ptr @.str.2758, i64 3, i64 0 }, ptr %a41 %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) %t43 = icmp ne i32 %t42, 0 - br label %logic.rend4506 -logic.rend4506: - br label %logic.end4505 -logic.end4505: - %t44 = phi i1 [ true, %logic.from4503 ], [ %t43, %logic.rend4506 ] - br i1 %t44, label %then4507, label %endif4509 -then4507: + br label %logic.rend4510 +logic.rend4510: + br label %logic.end4509 +logic.end4509: + %t44 = phi i1 [ true, %logic.from4507 ], [ %t43, %logic.rend4510 ] + br i1 %t44, label %then4511, label %endif4513 +then4511: %t45 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 2, 0 %t46 = insertvalue %S.gen.SizeAlign %t45, i64 2, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t46 -endif4509: +endif4513: %t47 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t47, ptr %a48 store { ptr, i64, i64 } { ptr @.str.2759, i64 3, i64 0 }, ptr %a49 %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) %t51 = icmp ne i32 %t50, 0 - br label %logic.from4510 -logic.from4510: - br i1 %t51, label %logic.end4512, label %logic.rhs4511 -logic.rhs4511: + br label %logic.from4514 +logic.from4514: + br i1 %t51, label %logic.end4516, label %logic.rhs4515 +logic.rhs4515: %t52 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t52, ptr %a53 store { ptr, i64, i64 } { ptr @.str.2760, i64 3, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br label %logic.rend4513 -logic.rend4513: - br label %logic.end4512 -logic.end4512: - %t57 = phi i1 [ true, %logic.from4510 ], [ %t56, %logic.rend4513 ] - br label %logic.from4514 -logic.from4514: - br i1 %t57, label %logic.end4516, label %logic.rhs4515 -logic.rhs4515: + br label %logic.rend4517 +logic.rend4517: + br label %logic.end4516 +logic.end4516: + %t57 = phi i1 [ true, %logic.from4514 ], [ %t56, %logic.rend4517 ] + br label %logic.from4518 +logic.from4518: + br i1 %t57, label %logic.end4520, label %logic.rhs4519 +logic.rhs4519: %t58 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t58, ptr %a59 store { ptr, i64, i64 } { ptr @.str.2761, i64 3, i64 0 }, ptr %a60 %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) %t62 = icmp ne i32 %t61, 0 - br label %logic.rend4517 -logic.rend4517: - br label %logic.end4516 -logic.end4516: - %t63 = phi i1 [ true, %logic.from4514 ], [ %t62, %logic.rend4517 ] - br label %logic.from4518 -logic.from4518: - br i1 %t63, label %logic.end4520, label %logic.rhs4519 -logic.rhs4519: + br label %logic.rend4521 +logic.rend4521: + br label %logic.end4520 +logic.end4520: + %t63 = phi i1 [ true, %logic.from4518 ], [ %t62, %logic.rend4521 ] + br label %logic.from4522 +logic.from4522: + br i1 %t63, label %logic.end4524, label %logic.rhs4523 +logic.rhs4523: %t64 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t64, ptr %a65 store { ptr, i64, i64 } { ptr @.str.2762, i64 4, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 - br label %logic.rend4521 -logic.rend4521: - br label %logic.end4520 -logic.end4520: - %t69 = phi i1 [ true, %logic.from4518 ], [ %t68, %logic.rend4521 ] - br i1 %t69, label %then4522, label %endif4524 -then4522: + br label %logic.rend4525 +logic.rend4525: + br label %logic.end4524 +logic.end4524: + %t69 = phi i1 [ true, %logic.from4522 ], [ %t68, %logic.rend4525 ] + br i1 %t69, label %then4526, label %endif4528 +then4526: %t70 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 4, 0 %t71 = insertvalue %S.gen.SizeAlign %t70, i64 4, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t71 -endif4524: +endif4528: %t72 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t72, ptr %a73 store { ptr, i64, i64 } { ptr @.str.2763, i64 3, i64 0 }, ptr %a74 %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) %t76 = icmp ne i32 %t75, 0 - br label %logic.from4525 -logic.from4525: - br i1 %t76, label %logic.end4527, label %logic.rhs4526 -logic.rhs4526: + br label %logic.from4529 +logic.from4529: + br i1 %t76, label %logic.end4531, label %logic.rhs4530 +logic.rhs4530: %t77 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.2764, i64 5, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 - br label %logic.rend4528 -logic.rend4528: - br label %logic.end4527 -logic.end4527: - %t82 = phi i1 [ true, %logic.from4525 ], [ %t81, %logic.rend4528 ] - br i1 %t82, label %then4529, label %endif4531 -then4529: + br label %logic.rend4532 +logic.rend4532: + br label %logic.end4531 +logic.end4531: + %t82 = phi i1 [ true, %logic.from4529 ], [ %t81, %logic.rend4532 ] + br i1 %t82, label %then4533, label %endif4535 +then4533: %t83 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 24, 0 %t84 = insertvalue %S.gen.SizeAlign %t83, i64 8, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t84 -endif4531: +endif4535: %t85 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.2765, i64 3, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 - br i1 %t89, label %then4532, label %endif4534 -then4532: + br i1 %t89, label %then4536, label %endif4538 +then4536: %t90 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 56, 0 %t91 = insertvalue %S.gen.SizeAlign %t90, i64 8, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t91 -endif4534: +endif4538: %t92 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t92, ptr %a93 store { ptr, i64, i64 } { ptr @.str.2766, i64 5, i64 0 }, ptr %a94 %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) %t96 = icmp ne i32 %t95, 0 - br i1 %t96, label %then4535, label %endif4537 -then4535: + br i1 %t96, label %then4539, label %endif4541 +then4539: %t97 = load ptr, ptr %a1 %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 0, %t100 - br i1 %t101, label %range4538, label %inrange4539 -range4538: + br i1 %t101, label %range4542, label %inrange4543 +range4542: call void @finch_panic_index(ptr @.str.2767, i64 1980, i64 0, i64 %t100) unreachable -inrange4539: +inrange4543: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 %t104 = load %S.ast.Type, ptr %t103 @@ -46210,21 +46236,21 @@ inrange4539: %t115 = insertvalue %S.gen.SizeAlign %t112, i64 %t114, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t115 -endif4537: +endif4541: %t116 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t116, ptr %a117 store { ptr, i64, i64 } { ptr @.str.2768, i64 6, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 - br i1 %t120, label %then4540, label %endif4542 -then4540: + br i1 %t120, label %then4544, label %endif4546 +then4544: %t121 = load ptr, ptr %a1 %t122 = icmp eq ptr %t121, null - br i1 %t122, label %panic4543, label %ok4544 -panic4543: + br i1 %t122, label %panic4547, label %ok4548 +panic4547: call void @finch_panic(ptr @.str.2769, i64 1984, ptr @.str.2770) unreachable -ok4544: +ok4548: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 16 %t124 = load ptr, ptr %a1 %t125 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -46235,11 +46261,11 @@ ok4544: %t130 = load { ptr, i64, i64 }, ptr %t123 %t131 = extractvalue { ptr, i64, i64 } %t130, 1 %t132 = icmp uge i64 %t129, %t131 - br i1 %t132, label %range4545, label %inrange4546 -range4545: + br i1 %t132, label %range4549, label %inrange4550 +range4549: call void @finch_panic_index(ptr @.str.2771, i64 1984, i64 %t129, i64 %t131) unreachable -inrange4546: +inrange4550: %t133 = extractvalue { ptr, i64, i64 } %t130, 0 %t134 = getelementptr inbounds %S.gen.StructDef, ptr %t133, i64 %t129 %t135 = load %S.gen.StructDef, ptr %t134 @@ -46249,8 +46275,8 @@ inrange4546: store %S.gen.StructDef %t138, ptr %a139 %t140 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 2 %t141 = load i1, ptr %t140 - br i1 %t141, label %then4547, label %endif4549 -then4547: + br i1 %t141, label %then4551, label %endif4553 +then4551: %t142 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 9 %t143 = load i64, ptr %t142 %t144 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t143, 0 @@ -46260,19 +46286,19 @@ then4547: call void @finch.drop.S_gen_StructDef(ptr %a139) call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t147 -endif4549: +endif4553: store i64 0, ptr %a148 store i64 1, ptr %a149 %t150 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 12 store i64 0, ptr %a151 - br label %each.cond4550 -each.cond4550: + br label %each.cond4554 +each.cond4554: %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 %t153 = load i64, ptr %t152 %t154 = load i64, ptr %a151 %t155 = icmp slt i64 %t154, %t153 - br i1 %t155, label %each.body4551, label %each.end4553 -each.body4551: + br i1 %t155, label %each.body4555, label %each.end4557 +each.body4555: %t156 = load ptr, ptr %t150 %t157 = getelementptr inbounds %S.ast.Type, ptr %t156, i64 %t154 %t158 = load %S.ast.Type, ptr %t157 @@ -46293,20 +46319,20 @@ each.body4551: %t172 = load i64, ptr %t171 %t173 = load i64, ptr %a149 %t174 = icmp sgt i64 %t172, %t173 - br i1 %t174, label %then4554, label %endif4556 -then4554: + br i1 %t174, label %then4558, label %endif4560 +then4558: %t175 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 %t176 = load i64, ptr %t175 store i64 %t176, ptr %a149 - br label %endif4556 -endif4556: - br label %each.step4552 -each.step4552: + br label %endif4560 +endif4560: + br label %each.step4556 +each.step4556: %t177 = load i64, ptr %a151 %t178 = add i64 %t177, 1 store i64 %t178, ptr %a151 - br label %each.cond4550 -each.end4553: + br label %each.cond4554 +each.end4557: %t179 = load i64, ptr %a148 %t180 = load i64, ptr %a149 %t181 = call i64 @finch.gen.alignUp(i64 %t179, i64 %t180) @@ -46316,7 +46342,7 @@ each.end4553: call void @finch.drop.S_gen_StructDef(ptr %a139) call void @finch_str_drop(ptr %a8) ret %S.gen.SizeAlign %t184 -endif4542: +endif4546: %t185 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 8, 0 %t186 = insertvalue %S.gen.SizeAlign %t185, i64 8, 1 call void @finch_str_drop(ptr %a8) @@ -46338,27 +46364,27 @@ entry: store %S.gen.StructDef %p1, ptr %a2 %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 2 %t4 = load i1, ptr %t3 - br i1 %t4, label %then4557, label %endif4559 -then4557: + br i1 %t4, label %then4561, label %endif4563 +then4561: %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 4 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch.copy.arr_int(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 ret { ptr, i64, i64 } %t9 -endif4559: +endif4563: store { ptr, i64, i64 } zeroinitializer, ptr %a10 store i64 0, ptr %a11 %t12 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 12 store i64 0, ptr %a13 - br label %each.cond4560 -each.cond4560: + br label %each.cond4564 +each.cond4564: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 - br i1 %t17, label %each.body4561, label %each.end4563 -each.body4561: + br i1 %t17, label %each.body4565, label %each.end4567 +each.body4565: %t18 = load ptr, ptr %t12 %t19 = getelementptr inbounds %S.ast.Type, ptr %t18, i64 %t16 %t20 = load %S.ast.Type, ptr %t19 @@ -46386,13 +46412,13 @@ each.body4561: %t38 = load i64, ptr %a11 %t39 = add i64 %t38, %t37 store i64 %t39, ptr %a11 - br label %each.step4562 -each.step4562: + br label %each.step4566 +each.step4566: %t40 = load i64, ptr %a13 %t41 = add i64 %t40, 1 store i64 %t41, ptr %a13 - br label %each.cond4560 -each.end4563: + br label %each.cond4564 +each.end4567: %t42 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t42 } @@ -47025,25 +47051,25 @@ entry: store { ptr, i64, i64 } { ptr @.str.2784, i64 4, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from4564 -logic.from4564: - br i1 %t13, label %logic.end4566, label %logic.rhs4565 -logic.rhs4565: + br label %logic.from4568 +logic.from4568: + br i1 %t13, label %logic.end4570, label %logic.rhs4569 +logic.rhs4569: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.2785, i64 4, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.rend4567 -logic.rend4567: - br label %logic.end4566 -logic.end4566: - %t19 = phi i1 [ true, %logic.from4564 ], [ %t18, %logic.rend4567 ] - br i1 %t19, label %then4568, label %endif4570 -then4568: + br label %logic.rend4571 +logic.rend4571: + br label %logic.end4570 +logic.end4570: + %t19 = phi i1 [ true, %logic.from4568 ], [ %t18, %logic.rend4571 ] + br i1 %t19, label %then4572, label %endif4574 +then4572: call void @finch_str_drop(ptr %a8) ret i64 -1 -endif4570: +endif4574: %t20 = load %S.ast.Type, ptr %a2 %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) store { ptr, i64, i64 } { ptr @.str.2786, i64 2, i64 0 }, ptr %a23 @@ -47055,38 +47081,38 @@ endif4570: store { ptr, i64, i64 } %t26, ptr %a27 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic4571, label %ok4572 -panic4571: + br i1 %t29, label %panic4575, label %ok4576 +panic4575: call void @finch_panic(ptr @.str.2787, i64 2033, ptr @.str.2788) unreachable -ok4572: +ok4576: %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 34 %t31 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t31, ptr %a32 %t33 = call i64 @finch_map_find(ptr %t30, ptr %a32, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t34 = icmp sge i64 %t33, 0 - br i1 %t34, label %then4573, label %endif4575 -then4573: + br i1 %t34, label %then4577, label %endif4579 +then4577: %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic4576, label %ok4577 -panic4576: + br i1 %t36, label %panic4580, label %ok4581 +panic4580: call void @finch_panic(ptr @.str.2789, i64 2034, ptr @.str.2790) unreachable -ok4577: +ok4581: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 34 %t38 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t38, ptr %a39 %t40 = call i64 @finch_map_find(ptr %t37, ptr %a39, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t41 = icmp slt i64 %t40, 0 - br i1 %t41, label %map.missing4578, label %map.found4579 -map.missing4578: + br i1 %t41, label %map.missing4582, label %map.found4583 +map.missing4582: store { ptr, i64, i64 } zeroinitializer, ptr %a42 store { ptr, i64, i64 } %t38, ptr %a43 call void @finch_buf_str(ptr %a42, ptr %a43, i32 1) call void @finch_map_missing(ptr @.str.2791, i64 2034, ptr %a42) unreachable -map.found4579: +map.found4583: %t44 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t37, i32 0, i32 0 %t45 = load ptr, ptr %t44 %t46 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t45, i64 %t40 @@ -47095,24 +47121,24 @@ map.found4579: call void @finch_str_drop(ptr %a27) call void @finch_str_drop(ptr %a8) ret i64 %t48 -endif4575: +endif4579: store i64 -1, ptr %a49 %t50 = load ptr, ptr %a1 %t51 = icmp eq ptr %t50, null - br i1 %t51, label %panic4580, label %ok4581 -panic4580: + br i1 %t51, label %panic4584, label %ok4585 +panic4584: call void @finch_panic(ptr @.str.2792, i64 2037, ptr @.str.2793) unreachable -ok4581: +ok4585: %t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 35 %t53 = load { ptr, i64, i64 }, ptr %t52 %t54 = extractvalue { ptr, i64, i64 } %t53, 1 %t55 = icmp uge i64 0, %t54 - br i1 %t55, label %range4582, label %inrange4583 -range4582: + br i1 %t55, label %range4586, label %inrange4587 +range4586: call void @finch_panic_index(ptr @.str.2794, i64 2037, i64 0, i64 %t54) unreachable -inrange4583: +inrange4587: %t56 = extractvalue { ptr, i64, i64 } %t53, 0 %t57 = getelementptr inbounds i64, ptr %t56, i64 0 %t58 = load i64, ptr %t57 @@ -47122,76 +47148,76 @@ inrange4583: store { ptr, i64, i64 } { ptr @.str.2795, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 - br i1 %t64, label %then4584, label %else4585 -then4584: + br i1 %t64, label %then4588, label %else4589 +then4588: %t65 = load ptr, ptr %a1 %t66 = call i64 @finch.gen.basicType(ptr %t65, { ptr, i64, i64 } { ptr @.str.2796, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2797, i64 14, i64 0 }) store i64 %t66, ptr %a49 - br label %endif4586 -else4585: + br label %endif4590 +else4589: %t67 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.2798, i64 4, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 - br i1 %t71, label %then4587, label %else4588 -then4587: + br i1 %t71, label %then4591, label %else4592 +then4591: %t72 = load ptr, ptr %a1 %t73 = call i64 @finch.gen.basicType(ptr %t72, { ptr, i64, i64 } { ptr @.str.2799, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2800, i64 18, i64 0 }) store i64 %t73, ptr %a49 - br label %endif4589 -else4588: + br label %endif4593 +else4592: %t74 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t74, ptr %a75 store { ptr, i64, i64 } { ptr @.str.2801, i64 3, i64 0 }, ptr %a76 %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) %t78 = icmp ne i32 %t77, 0 - br i1 %t78, label %then4590, label %else4591 -then4590: + br i1 %t78, label %then4594, label %else4595 +then4594: %t79 = load ptr, ptr %a1 %t80 = call i64 @finch.gen.basicType(ptr %t79, { ptr, i64, i64 } { ptr @.str.2802, i64 3, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2803, i64 13, i64 0 }) store i64 %t80, ptr %a49 - br label %endif4592 -else4591: + br label %endif4596 +else4595: %t81 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.2804, i64 5, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br i1 %t85, label %then4593, label %else4594 -then4593: + br i1 %t85, label %then4597, label %else4598 +then4597: %t86 = load ptr, ptr %a1 %t87 = call i64 @finch.gen.basicType(ptr %t86, { ptr, i64, i64 } { ptr @.str.2805, i64 5, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2806, i64 12, i64 0 }) store i64 %t87, ptr %a49 - br label %endif4595 -else4594: + br label %endif4599 +else4598: %t88 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.2807, i64 3, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 - br i1 %t92, label %then4596, label %else4597 -then4596: + br i1 %t92, label %then4600, label %else4601 +then4600: %t93 = load ptr, ptr %a1 %t94 = call i64 @finch.gen.basicType(ptr %t93, { ptr, i64, i64 } { ptr @.str.2808, i64 3, i64 0 }, i64 32, { ptr, i64, i64 } { ptr @.str.2809, i64 12, i64 0 }) store i64 %t94, ptr %a49 - br label %endif4598 -else4597: + br label %endif4602 +else4601: %t95 = load %S.ast.Type, ptr %a2 %t96 = call i1 @finch.gen.isInt(%S.ast.Type %t95) - br i1 %t96, label %then4599, label %else4600 -then4599: + br i1 %t96, label %then4603, label %else4604 +then4603: store { ptr, i64, i64 } { ptr @.str.2810, i64 15, i64 0 }, ptr %a97 %t98 = load %S.ast.Type, ptr %a2 %t99 = call i1 @finch.gen.isSigned(%S.ast.Type %t98) - br i1 %t99, label %then4602, label %endif4604 -then4602: + br i1 %t99, label %then4606, label %endif4608 +then4606: %t100 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } { ptr @.str.2811, i64 13, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t100, ptr %a101 call void @finch_str_drop(ptr %a101) - br label %endif4604 -endif4604: + br label %endif4608 +endif4608: %t102 = load ptr, ptr %a1 %t103 = load { ptr, i64, i64 }, ptr %a8 %t104 = load %S.ast.Type, ptr %a2 @@ -47200,22 +47226,22 @@ endif4604: %t107 = call i64 @finch.gen.basicType(ptr %t102, { ptr, i64, i64 } %t103, i64 %t105, { ptr, i64, i64 } %t106) store i64 %t107, ptr %a49 call void @finch_str_drop(ptr %a97) - br label %endif4601 -else4600: + br label %endif4605 +else4604: %t108 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t108, ptr %a109 store { ptr, i64, i64 } { ptr @.str.2812, i64 4, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 - br i1 %t112, label %then4605, label %else4606 -then4605: + br i1 %t112, label %then4609, label %else4610 +then4609: %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null - br i1 %t114, label %panic4608, label %ok4609 -panic4608: + br i1 %t114, label %panic4612, label %ok4613 +panic4612: call void @finch_panic(ptr @.str.2813, i64 2055, ptr @.str.2814) unreachable -ok4609: +ok4613: %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 21 %t116 = load ptr, ptr %a1 %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -47226,11 +47252,11 @@ ok4609: %t122 = load { ptr, i64, i64 }, ptr %t115 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 %t121, %t123 - br i1 %t124, label %range4610, label %inrange4611 -range4610: + br i1 %t124, label %range4614, label %inrange4615 +range4614: call void @finch_panic_index(ptr @.str.2815, i64 2055, i64 %t121, i64 %t123) unreachable -inrange4611: +inrange4615: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds %S.gen.EnumDef, ptr %t125, i64 %t121 %t127 = load %S.gen.EnumDef, ptr %t126 @@ -47243,12 +47269,12 @@ inrange4611: %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load i64, ptr %t134 store i64 0, ptr %a136 - br label %for.cond4612 -for.cond4612: + br label %for.cond4616 +for.cond4616: %t137 = load i64, ptr %a136 %t138 = icmp slt i64 %t137, %t135 - br i1 %t138, label %for.body4613, label %for.end4615 -for.body4613: + br i1 %t138, label %for.body4617, label %for.end4619 +for.body4617: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 %t140 = load ptr, ptr %a1 %t141 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 @@ -47256,11 +47282,11 @@ for.body4613: %t143 = load { ptr, i64, i64 }, ptr %t141 %t144 = extractvalue { ptr, i64, i64 } %t143, 1 %t145 = icmp uge i64 %t142, %t144 - br i1 %t145, label %range4616, label %inrange4617 -range4616: + br i1 %t145, label %range4620, label %inrange4621 +range4620: call void @finch_panic_index(ptr @.str.2817, i64 2058, i64 %t142, i64 %t144) unreachable -inrange4617: +inrange4621: %t146 = extractvalue { ptr, i64, i64 } %t143, 0 %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t142 %t148 = load { ptr, i64, i64 }, ptr %t147 @@ -47279,11 +47305,11 @@ inrange4617: %t160 = load { ptr, i64, i64 }, ptr %t158 %t161 = extractvalue { ptr, i64, i64 } %t160, 1 %t162 = icmp uge i64 %t159, %t161 - br i1 %t162, label %range4618, label %inrange4619 -range4618: + br i1 %t162, label %range4622, label %inrange4623 +range4622: call void @finch_panic_index(ptr @.str.2819, i64 2058, i64 %t159, i64 %t161) unreachable -inrange4619: +inrange4623: %t163 = extractvalue { ptr, i64, i64 } %t160, 0 %t164 = getelementptr inbounds i64, ptr %t163, i64 %t159 %t165 = load i64, ptr %t164 @@ -47314,13 +47340,13 @@ inrange4619: %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 store { ptr, i64, i64 } %t181, ptr %t185 store i64 %t183, ptr %t139 - br label %for.step4614 -for.step4614: + br label %for.step4618 +for.step4618: %t186 = load i64, ptr %a136 %t187 = add i64 %t186, 1 store i64 %t187, ptr %a136 - br label %for.cond4612 -for.end4615: + br label %for.cond4616 +for.end4619: %t188 = load ptr, ptr %a1 %t189 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 1 %t190 = load { ptr, i64, i64 }, ptr %t189 @@ -47375,19 +47401,19 @@ for.end4615: store i64 %t229, ptr %a49 call void @finch.drop.arr_str(ptr %a132) call void @finch.drop.S_gen_EnumDef(ptr %a131) - br label %endif4607 -else4606: + br label %endif4611 +else4610: %t231 = load ptr, ptr %a1 %t232 = call i64 @finch.gen.md(ptr %t231, { ptr, i64, i64 } { ptr @.str.2826, i64 0, i64 0 }) store i64 %t232, ptr %a49 %t233 = load i64, ptr %a49 %t234 = load ptr, ptr %a1 %t235 = icmp eq ptr %t234, null - br i1 %t235, label %panic4620, label %ok4621 -panic4620: + br i1 %t235, label %panic4624, label %ok4625 +panic4624: call void @finch_panic(ptr @.str.2827, i64 2064, ptr @.str.2828) unreachable -ok4621: +ok4625: %t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 34 %t237 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t237, ptr %a238 @@ -47398,14 +47424,14 @@ ok4621: %t243 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t242, i64 %t240 %t244 = load i32, ptr %a239 %t245 = icmp ne i32 %t244, 0 - br i1 %t245, label %map.new4622, label %map.have4623 -map.new4622: + br i1 %t245, label %map.new4626, label %map.have4627 +map.new4626: %t246 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 1 call void @finch_str_copy(ptr %t246, ptr %a238) %t247 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 store i64 0, ptr %t247 - br label %map.have4623 -map.have4623: + br label %map.have4627 +map.have4627: %t248 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 store i64 %t233, ptr %t248 %t249 = load { ptr, i64, i64 }, ptr %a8 @@ -47413,32 +47439,32 @@ map.have4623: store { ptr, i64, i64 } { ptr @.str.2829, i64 3, i64 0 }, ptr %a251 %t252 = call i32 @finch_str_eq(ptr %a250, ptr %a251) %t253 = icmp ne i32 %t252, 0 - br i1 %t253, label %then4624, label %else4625 -then4624: + br i1 %t253, label %then4628, label %else4629 +then4628: store i64 -1, ptr %a254 %t255 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %t255, i32 0, i32 1 %t257 = load i64, ptr %t256 %t258 = icmp sgt i64 %t257, 0 - br i1 %t258, label %then4627, label %endif4629 -then4627: + br i1 %t258, label %then4631, label %endif4633 +then4631: %t259 = load ptr, ptr %a1 %t260 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t261 = load { ptr, i64, i64 }, ptr %t260 %t262 = extractvalue { ptr, i64, i64 } %t261, 1 %t263 = icmp uge i64 0, %t262 - br i1 %t263, label %range4630, label %inrange4631 -range4630: + br i1 %t263, label %range4634, label %inrange4635 +range4634: call void @finch_panic_index(ptr @.str.2830, i64 2068, i64 0, i64 %t262) unreachable -inrange4631: +inrange4635: %t264 = extractvalue { ptr, i64, i64 } %t261, 0 %t265 = getelementptr inbounds %S.ast.Type, ptr %t264, i64 0 %t266 = load %S.ast.Type, ptr %t265 %t267 = call i64 @finch.gen.diType(ptr %t259, %S.ast.Type %t266) store i64 %t267, ptr %a254 - br label %endif4629 -endif4629: + br label %endif4633 +endif4633: %t268 = load i64, ptr %a254 %t269 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t268) store { ptr, i64, i64 } { ptr @.str.2831, i64 51, i64 0 }, ptr %a271 @@ -47455,46 +47481,46 @@ endif4629: %t279 = load { ptr, i64, i64 }, ptr %a275 %t280 = load ptr, ptr %a1 %t281 = icmp eq ptr %t280, null - br i1 %t281, label %panic4632, label %ok4633 -panic4632: + br i1 %t281, label %panic4636, label %ok4637 +panic4636: call void @finch_panic(ptr @.str.2833, i64 2070, ptr @.str.2834) unreachable -ok4633: +ok4637: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 33 %t283 = load i64, ptr %a49 %t284 = load { ptr, i64, i64 }, ptr %t282 %t285 = extractvalue { ptr, i64, i64 } %t284, 1 %t286 = icmp uge i64 %t283, %t285 - br i1 %t286, label %range4634, label %inrange4635 -range4634: + br i1 %t286, label %range4638, label %inrange4639 +range4638: call void @finch_panic_index(ptr @.str.2835, i64 2070, i64 %t283, i64 %t285) unreachable -inrange4635: +inrange4639: %t287 = extractvalue { ptr, i64, i64 } %t284, 0 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 %t283 %t289 = load { ptr, i64, i64 }, ptr %t288 store { ptr, i64, i64 } %t279, ptr %t288 store { ptr, i64, i64 } %t289, ptr %a290 call void @finch_str_drop(ptr %a290) - br label %endif4626 -else4625: + br label %endif4630 +else4629: %t291 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t291, ptr %a292 store { ptr, i64, i64 } { ptr @.str.2836, i64 5, i64 0 }, ptr %a293 %t294 = call i32 @finch_str_eq(ptr %a292, ptr %a293) %t295 = icmp ne i32 %t294, 0 - br i1 %t295, label %then4636, label %else4637 -then4636: + br i1 %t295, label %then4640, label %else4641 +then4640: %t296 = load ptr, ptr %a1 %t297 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t298 = load { ptr, i64, i64 }, ptr %t297 %t299 = extractvalue { ptr, i64, i64 } %t298, 1 %t300 = icmp uge i64 0, %t299 - br i1 %t300, label %range4639, label %inrange4640 -range4639: + br i1 %t300, label %range4643, label %inrange4644 +range4643: call void @finch_panic_index(ptr @.str.2837, i64 2072, i64 0, i64 %t299) unreachable -inrange4640: +inrange4644: %t301 = extractvalue { ptr, i64, i64 } %t298, 0 %t302 = getelementptr inbounds %S.ast.Type, ptr %t301, i64 0 %t303 = load %S.ast.Type, ptr %t302 @@ -47526,11 +47552,11 @@ inrange4640: %t326 = load { ptr, i64, i64 }, ptr %t325 %t327 = extractvalue { ptr, i64, i64 } %t326, 1 %t328 = icmp uge i64 0, %t327 - br i1 %t328, label %range4641, label %inrange4642 -range4641: + br i1 %t328, label %range4645, label %inrange4646 +range4645: call void @finch_panic_index(ptr @.str.2841, i64 2074, i64 0, i64 %t327) unreachable -inrange4642: +inrange4646: %t329 = extractvalue { ptr, i64, i64 } %t326, 0 %t330 = getelementptr inbounds %S.ast.Type, ptr %t329, i64 0 %t331 = load %S.ast.Type, ptr %t330 @@ -47589,50 +47615,50 @@ inrange4642: %t376 = load { ptr, i64, i64 }, ptr %a372 %t377 = load ptr, ptr %a1 %t378 = icmp eq ptr %t377, null - br i1 %t378, label %panic4643, label %ok4644 -panic4643: + br i1 %t378, label %panic4647, label %ok4648 +panic4647: call void @finch_panic(ptr @.str.2845, i64 2074, ptr @.str.2846) unreachable -ok4644: +ok4648: %t379 = getelementptr inbounds %S.gen.Gen, ptr %t377, i32 0, i32 33 %t380 = load i64, ptr %a49 %t381 = load { ptr, i64, i64 }, ptr %t379 %t382 = extractvalue { ptr, i64, i64 } %t381, 1 %t383 = icmp uge i64 %t380, %t382 - br i1 %t383, label %range4645, label %inrange4646 -range4645: + br i1 %t383, label %range4649, label %inrange4650 +range4649: call void @finch_panic_index(ptr @.str.2847, i64 2074, i64 %t380, i64 %t382) unreachable -inrange4646: +inrange4650: %t384 = extractvalue { ptr, i64, i64 } %t381, 0 %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t380 %t386 = load { ptr, i64, i64 }, ptr %t385 store { ptr, i64, i64 } %t376, ptr %t385 store { ptr, i64, i64 } %t386, ptr %a387 call void @finch_str_drop(ptr %a387) - br label %endif4638 -else4637: + br label %endif4642 +else4641: %t388 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t388, ptr %a389 store { ptr, i64, i64 } { ptr @.str.2848, i64 3, i64 0 }, ptr %a390 %t391 = call i32 @finch_str_eq(ptr %a389, ptr %a390) %t392 = icmp ne i32 %t391, 0 - br label %logic.from4647 -logic.from4647: - br i1 %t392, label %logic.end4649, label %logic.rhs4648 -logic.rhs4648: + br label %logic.from4651 +logic.from4651: + br i1 %t392, label %logic.end4653, label %logic.rhs4652 +logic.rhs4652: %t393 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t393, ptr %a394 store { ptr, i64, i64 } { ptr @.str.2849, i64 5, i64 0 }, ptr %a395 %t396 = call i32 @finch_str_eq(ptr %a394, ptr %a395) %t397 = icmp ne i32 %t396, 0 - br label %logic.rend4650 -logic.rend4650: - br label %logic.end4649 -logic.end4649: - %t398 = phi i1 [ true, %logic.from4647 ], [ %t397, %logic.rend4650 ] - br i1 %t398, label %then4651, label %else4652 -then4651: + br label %logic.rend4654 +logic.rend4654: + br label %logic.end4653 +logic.end4653: + %t398 = phi i1 [ true, %logic.from4651 ], [ %t397, %logic.rend4654 ] + br i1 %t398, label %then4655, label %else4656 +then4655: %t399 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2850, i64 4, i64 0 }) store %S.ast.Type %t399, ptr %a400 %t401 = load { ptr, i64, i64 }, ptr %a8 @@ -47640,17 +47666,17 @@ then4651: store { ptr, i64, i64 } { ptr @.str.2851, i64 5, i64 0 }, ptr %a403 %t404 = call i32 @finch_str_eq(ptr %a402, ptr %a403) %t405 = icmp ne i32 %t404, 0 - br i1 %t405, label %then4654, label %endif4656 -then4654: + br i1 %t405, label %then4658, label %endif4660 +then4658: %t406 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t407 = load { ptr, i64, i64 }, ptr %t406 %t408 = extractvalue { ptr, i64, i64 } %t407, 1 %t409 = icmp uge i64 0, %t408 - br i1 %t409, label %range4657, label %inrange4658 -range4657: + br i1 %t409, label %range4661, label %inrange4662 +range4661: call void @finch_panic_index(ptr @.str.2852, i64 2078, i64 0, i64 %t408) unreachable -inrange4658: +inrange4662: %t410 = extractvalue { ptr, i64, i64 } %t407, 0 %t411 = getelementptr inbounds %S.ast.Type, ptr %t410, i64 0 %t412 = load %S.ast.Type, ptr %t411 @@ -47661,8 +47687,8 @@ inrange4658: store %S.ast.Type %t415, ptr %a400 store %S.ast.Type %t416, ptr %a417 call void @finch.drop.S_ast_Type(ptr %a417) - br label %endif4656 -endif4656: + br label %endif4660 +endif4660: %t418 = load ptr, ptr %a1 %t419 = load ptr, ptr %a1 %t420 = load %S.ast.Type, ptr %a400 @@ -47792,21 +47818,21 @@ endif4656: %t526 = load { ptr, i64, i64 }, ptr %a522 %t527 = load ptr, ptr %a1 %t528 = icmp eq ptr %t527, null - br i1 %t528, label %panic4659, label %ok4660 -panic4659: + br i1 %t528, label %panic4663, label %ok4664 +panic4663: call void @finch_panic(ptr @.str.2865, i64 2085, ptr @.str.2866) unreachable -ok4660: +ok4664: %t529 = getelementptr inbounds %S.gen.Gen, ptr %t527, i32 0, i32 33 %t530 = load i64, ptr %a49 %t531 = load { ptr, i64, i64 }, ptr %t529 %t532 = extractvalue { ptr, i64, i64 } %t531, 1 %t533 = icmp uge i64 %t530, %t532 - br i1 %t533, label %range4661, label %inrange4662 -range4661: + br i1 %t533, label %range4665, label %inrange4666 +range4665: call void @finch_panic_index(ptr @.str.2867, i64 2085, i64 %t530, i64 %t532) unreachable -inrange4662: +inrange4666: %t534 = extractvalue { ptr, i64, i64 } %t531, 0 %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %t534, i64 %t530 %t536 = load { ptr, i64, i64 }, ptr %t535 @@ -47814,15 +47840,15 @@ inrange4662: store { ptr, i64, i64 } %t536, ptr %a537 call void @finch_str_drop(ptr %a537) call void @finch.drop.S_ast_Type(ptr %a400) - br label %endif4653 -else4652: + br label %endif4657 +else4656: %t538 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t538, ptr %a539 store { ptr, i64, i64 } { ptr @.str.2868, i64 3, i64 0 }, ptr %a540 %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) %t542 = icmp ne i32 %t541, 0 - br i1 %t542, label %then4663, label %else4664 -then4663: + br i1 %t542, label %then4667, label %else4668 +then4667: %t543 = load ptr, ptr %a1 %t544 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2869, i64 3, i64 0 }) %t545 = call i64 @finch.gen.diType(ptr %t543, %S.ast.Type %t544) @@ -47854,44 +47880,44 @@ then4663: store { ptr, i64, i64 } %t562, ptr %a563 store { ptr, i64, i64 } zeroinitializer, ptr %a564 store i64 0, ptr %a565 - br label %for.cond4666 -for.cond4666: + br label %for.cond4670 +for.cond4670: %t566 = load i64, ptr %a565 %t567 = icmp slt i64 %t566, 7 - br i1 %t567, label %for.body4667, label %for.end4669 -for.body4667: + br i1 %t567, label %for.body4671, label %for.end4673 +for.body4671: %t568 = load i64, ptr %a547 store i64 %t568, ptr %a569 %t570 = load i64, ptr %a565 %t571 = icmp eq i64 %t570, 0 - br label %logic.from4670 -logic.from4670: - br i1 %t571, label %logic.end4672, label %logic.rhs4671 -logic.rhs4671: + br label %logic.from4674 +logic.from4674: + br i1 %t571, label %logic.end4676, label %logic.rhs4675 +logic.rhs4675: %t572 = load i64, ptr %a565 %t573 = icmp eq i64 %t572, 4 - br label %logic.rend4673 -logic.rend4673: - br label %logic.end4672 -logic.end4672: - %t574 = phi i1 [ true, %logic.from4670 ], [ %t573, %logic.rend4673 ] - br i1 %t574, label %then4674, label %endif4676 -then4674: + br label %logic.rend4677 +logic.rend4677: + br label %logic.end4676 +logic.end4676: + %t574 = phi i1 [ true, %logic.from4674 ], [ %t573, %logic.rend4677 ] + br i1 %t574, label %then4678, label %endif4680 +then4678: %t575 = load i64, ptr %a550 store i64 %t575, ptr %a569 - br label %endif4676 -endif4676: + br label %endif4680 +endif4680: %t576 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 %t577 = load ptr, ptr %a1 %t578 = load i64, ptr %a565 %t579 = load { ptr, i64, i64 }, ptr %a563 %t580 = extractvalue { ptr, i64, i64 } %t579, 1 %t581 = icmp uge i64 %t578, %t580 - br i1 %t581, label %range4677, label %inrange4678 -range4677: + br i1 %t581, label %range4681, label %inrange4682 +range4681: call void @finch_panic_index(ptr @.str.2879, i64 2096, i64 %t578, i64 %t580) unreachable -inrange4678: +inrange4682: %t582 = extractvalue { ptr, i64, i64 } %t579, 0 %t583 = getelementptr inbounds { ptr, i64, i64 }, ptr %t582, i64 %t578 %t584 = load { ptr, i64, i64 }, ptr %t583 @@ -47916,13 +47942,13 @@ inrange4678: %t601 = getelementptr inbounds { ptr, i64, i64 }, ptr %t600, i64 %t598 store { ptr, i64, i64 } %t597, ptr %t601 store i64 %t599, ptr %t576 - br label %for.step4668 -for.step4668: + br label %for.step4672 +for.step4672: %t602 = load i64, ptr %a565 %t603 = add i64 %t602, 1 store i64 %t603, ptr %a565 - br label %for.cond4666 -for.end4669: + br label %for.cond4670 +for.end4673: %t604 = load %S.ast.Type, ptr %a2 %t605 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t604) store { ptr, i64, i64 } { ptr @.str.2880, i64 52, i64 0 }, ptr %a607 @@ -47974,21 +48000,21 @@ for.end4669: %t644 = load { ptr, i64, i64 }, ptr %a640 %t645 = load ptr, ptr %a1 %t646 = icmp eq ptr %t645, null - br i1 %t646, label %panic4679, label %ok4680 -panic4679: + br i1 %t646, label %panic4683, label %ok4684 +panic4683: call void @finch_panic(ptr @.str.2885, i64 2098, ptr @.str.2886) unreachable -ok4680: +ok4684: %t647 = getelementptr inbounds %S.gen.Gen, ptr %t645, i32 0, i32 33 %t648 = load i64, ptr %a49 %t649 = load { ptr, i64, i64 }, ptr %t647 %t650 = extractvalue { ptr, i64, i64 } %t649, 1 %t651 = icmp uge i64 %t648, %t650 - br i1 %t651, label %range4681, label %inrange4682 -range4681: + br i1 %t651, label %range4685, label %inrange4686 +range4685: call void @finch_panic_index(ptr @.str.2887, i64 2098, i64 %t648, i64 %t650) unreachable -inrange4682: +inrange4686: %t652 = extractvalue { ptr, i64, i64 } %t649, 0 %t653 = getelementptr inbounds { ptr, i64, i64 }, ptr %t652, i64 %t648 %t654 = load { ptr, i64, i64 }, ptr %t653 @@ -47997,22 +48023,22 @@ inrange4682: call void @finch_str_drop(ptr %a655) call void @finch.drop.arr_str(ptr %a564) call void @finch.drop.arr_str(ptr %a563) - br label %endif4665 -else4664: + br label %endif4669 +else4668: %t656 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t656, ptr %a657 store { ptr, i64, i64 } { ptr @.str.2888, i64 6, i64 0 }, ptr %a658 %t659 = call i32 @finch_str_eq(ptr %a657, ptr %a658) %t660 = icmp ne i32 %t659, 0 - br i1 %t660, label %then4683, label %else4684 -then4683: + br i1 %t660, label %then4687, label %else4688 +then4687: %t661 = load ptr, ptr %a1 %t662 = icmp eq ptr %t661, null - br i1 %t662, label %panic4686, label %ok4687 -panic4686: + br i1 %t662, label %panic4690, label %ok4691 +panic4690: call void @finch_panic(ptr @.str.2889, i64 2100, ptr @.str.2890) unreachable -ok4687: +ok4691: %t663 = getelementptr inbounds %S.gen.Gen, ptr %t661, i32 0, i32 16 %t664 = load ptr, ptr %a1 %t665 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -48023,11 +48049,11 @@ ok4687: %t670 = load { ptr, i64, i64 }, ptr %t663 %t671 = extractvalue { ptr, i64, i64 } %t670, 1 %t672 = icmp uge i64 %t669, %t671 - br i1 %t672, label %range4688, label %inrange4689 -range4688: + br i1 %t672, label %range4692, label %inrange4693 +range4692: call void @finch_panic_index(ptr @.str.2891, i64 2100, i64 %t669, i64 %t671) unreachable -inrange4689: +inrange4693: %t673 = extractvalue { ptr, i64, i64 } %t670, 0 %t674 = getelementptr inbounds %S.gen.StructDef, ptr %t673, i64 %t669 %t675 = load %S.gen.StructDef, ptr %t674 @@ -48048,23 +48074,23 @@ inrange4689: %t690 = getelementptr inbounds { ptr, i64, i64 }, ptr %t689, i32 0, i32 1 %t691 = load i64, ptr %t690 store i64 0, ptr %a692 - br label %for.cond4690 -for.cond4690: + br label %for.cond4694 +for.cond4694: %t693 = load i64, ptr %a692 %t694 = icmp slt i64 %t693, %t691 - br i1 %t694, label %for.body4691, label %for.end4693 -for.body4691: + br i1 %t694, label %for.body4695, label %for.end4697 +for.body4695: %t695 = load ptr, ptr %a1 %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 %t697 = load i64, ptr %a692 %t698 = load { ptr, i64, i64 }, ptr %t696 %t699 = extractvalue { ptr, i64, i64 } %t698, 1 %t700 = icmp uge i64 %t697, %t699 - br i1 %t700, label %range4694, label %inrange4695 -range4694: + br i1 %t700, label %range4698, label %inrange4699 +range4698: call void @finch_panic_index(ptr @.str.2892, i64 2105, i64 %t697, i64 %t699) unreachable -inrange4695: +inrange4699: %t701 = extractvalue { ptr, i64, i64 } %t698, 0 %t702 = getelementptr inbounds %S.ast.Type, ptr %t701, i64 %t697 %t703 = load %S.ast.Type, ptr %t702 @@ -48077,11 +48103,11 @@ inrange4695: %t710 = load { ptr, i64, i64 }, ptr %t708 %t711 = extractvalue { ptr, i64, i64 } %t710, 1 %t712 = icmp uge i64 %t709, %t711 - br i1 %t712, label %range4696, label %inrange4697 -range4696: + br i1 %t712, label %range4700, label %inrange4701 +range4700: call void @finch_panic_index(ptr @.str.2894, i64 2106, i64 %t709, i64 %t711) unreachable -inrange4697: +inrange4701: %t713 = extractvalue { ptr, i64, i64 } %t710, 0 %t714 = getelementptr inbounds { ptr, i64, i64 }, ptr %t713, i64 %t709 %t715 = load { ptr, i64, i64 }, ptr %t714 @@ -48093,11 +48119,11 @@ inrange4697: %t721 = load { ptr, i64, i64 }, ptr %t719 %t722 = extractvalue { ptr, i64, i64 } %t721, 1 %t723 = icmp uge i64 %t720, %t722 - br i1 %t723, label %range4698, label %inrange4699 -range4698: + br i1 %t723, label %range4702, label %inrange4703 +range4702: call void @finch_panic_index(ptr @.str.2895, i64 2106, i64 %t720, i64 %t722) unreachable -inrange4699: +inrange4703: %t724 = extractvalue { ptr, i64, i64 } %t721, 0 %t725 = getelementptr inbounds %S.ast.Type, ptr %t724, i64 %t720 %t726 = load %S.ast.Type, ptr %t725 @@ -48109,11 +48135,11 @@ inrange4699: %t732 = load { ptr, i64, i64 }, ptr %a683 %t733 = extractvalue { ptr, i64, i64 } %t732, 1 %t734 = icmp uge i64 %t731, %t733 - br i1 %t734, label %range4700, label %inrange4701 -range4700: + br i1 %t734, label %range4704, label %inrange4705 +range4704: call void @finch_panic_index(ptr @.str.2896, i64 2106, i64 %t731, i64 %t733) unreachable -inrange4701: +inrange4705: %t735 = extractvalue { ptr, i64, i64 } %t732, 0 %t736 = getelementptr inbounds i64, ptr %t735, i64 %t731 %t737 = load i64, ptr %t736 @@ -48134,13 +48160,13 @@ inrange4701: %t750 = getelementptr inbounds { ptr, i64, i64 }, ptr %t749, i64 %t747 store { ptr, i64, i64 } %t746, ptr %t750 store i64 %t748, ptr %t706 - br label %for.step4692 -for.step4692: + br label %for.step4696 +for.step4696: %t751 = load i64, ptr %a692 %t752 = add i64 %t751, 1 store i64 %t752, ptr %a692 - br label %for.cond4690 -for.end4693: + br label %for.cond4694 +for.end4697: %t753 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 1 %t754 = load { ptr, i64, i64 }, ptr %t753 store { ptr, i64, i64 } { ptr @.str.2897, i64 52, i64 0 }, ptr %a756 @@ -48209,21 +48235,21 @@ for.end4693: %t808 = load { ptr, i64, i64 }, ptr %a804 %t809 = load ptr, ptr %a1 %t810 = icmp eq ptr %t809, null - br i1 %t810, label %panic4702, label %ok4703 -panic4702: + br i1 %t810, label %panic4706, label %ok4707 +panic4706: call void @finch_panic(ptr @.str.2903, i64 2108, ptr @.str.2904) unreachable -ok4703: +ok4707: %t811 = getelementptr inbounds %S.gen.Gen, ptr %t809, i32 0, i32 33 %t812 = load i64, ptr %a49 %t813 = load { ptr, i64, i64 }, ptr %t811 %t814 = extractvalue { ptr, i64, i64 } %t813, 1 %t815 = icmp uge i64 %t812, %t814 - br i1 %t815, label %range4704, label %inrange4705 -range4704: + br i1 %t815, label %range4708, label %inrange4709 +range4708: call void @finch_panic_index(ptr @.str.2905, i64 2108, i64 %t812, i64 %t814) unreachable -inrange4705: +inrange4709: %t816 = extractvalue { ptr, i64, i64 } %t813, 0 %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t812 %t818 = load { ptr, i64, i64 }, ptr %t817 @@ -48233,8 +48259,8 @@ inrange4705: call void @finch.drop.arr_str(ptr %a688) call void @finch.drop.arr_int(ptr %a683) call void @finch.drop.S_gen_StructDef(ptr %a679) - br label %endif4685 -else4684: + br label %endif4689 +else4688: %t820 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } { ptr @.str.2906, i64 20, i64 0 }, ptr %a822 store { ptr, i64, i64 } %t820, ptr %a823 @@ -48248,62 +48274,62 @@ else4684: %t829 = load { ptr, i64, i64 }, ptr %a825 %t830 = load ptr, ptr %a1 %t831 = icmp eq ptr %t830, null - br i1 %t831, label %panic4706, label %ok4707 -panic4706: + br i1 %t831, label %panic4710, label %ok4711 +panic4710: call void @finch_panic(ptr @.str.2908, i64 2110, ptr @.str.2909) unreachable -ok4707: +ok4711: %t832 = getelementptr inbounds %S.gen.Gen, ptr %t830, i32 0, i32 33 %t833 = load i64, ptr %a49 %t834 = load { ptr, i64, i64 }, ptr %t832 %t835 = extractvalue { ptr, i64, i64 } %t834, 1 %t836 = icmp uge i64 %t833, %t835 - br i1 %t836, label %range4708, label %inrange4709 -range4708: + br i1 %t836, label %range4712, label %inrange4713 +range4712: call void @finch_panic_index(ptr @.str.2910, i64 2110, i64 %t833, i64 %t835) unreachable -inrange4709: +inrange4713: %t837 = extractvalue { ptr, i64, i64 } %t834, 0 %t838 = getelementptr inbounds { ptr, i64, i64 }, ptr %t837, i64 %t833 %t839 = load { ptr, i64, i64 }, ptr %t838 store { ptr, i64, i64 } %t829, ptr %t838 store { ptr, i64, i64 } %t839, ptr %a840 call void @finch_str_drop(ptr %a840) - br label %endif4685 -endif4685: - br label %endif4665 -endif4665: - br label %endif4653 -endif4653: - br label %endif4638 -endif4638: - br label %endif4626 -endif4626: + br label %endif4689 +endif4689: + br label %endif4669 +endif4669: + br label %endif4657 +endif4657: + br label %endif4642 +endif4642: + br label %endif4630 +endif4630: %t841 = load i64, ptr %a49 call void @finch_str_drop(ptr %a27) call void @finch_str_drop(ptr %a8) ret i64 %t841 -endif4607: - br label %endif4601 -endif4601: - br label %endif4598 -endif4598: - br label %endif4595 -endif4595: - br label %endif4592 -endif4592: - br label %endif4589 -endif4589: - br label %endif4586 -endif4586: +endif4611: + br label %endif4605 +endif4605: + br label %endif4602 +endif4602: + br label %endif4599 +endif4599: + br label %endif4596 +endif4596: + br label %endif4593 +endif4593: + br label %endif4590 +endif4590: %t842 = load i64, ptr %a49 %t843 = load ptr, ptr %a1 %t844 = icmp eq ptr %t843, null - br i1 %t844, label %panic4710, label %ok4711 -panic4710: + br i1 %t844, label %panic4714, label %ok4715 +panic4714: call void @finch_panic(ptr @.str.2911, i64 2114, ptr @.str.2912) unreachable -ok4711: +ok4715: %t845 = getelementptr inbounds %S.gen.Gen, ptr %t843, i32 0, i32 34 %t846 = load { ptr, i64, i64 }, ptr %a27 store { ptr, i64, i64 } %t846, ptr %a847 @@ -48314,14 +48340,14 @@ ok4711: %t852 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t851, i64 %t849 %t853 = load i32, ptr %a848 %t854 = icmp ne i32 %t853, 0 - br i1 %t854, label %map.new4712, label %map.have4713 -map.new4712: + br i1 %t854, label %map.new4716, label %map.have4717 +map.new4716: %t855 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 1 call void @finch_str_copy(ptr %t855, ptr %a847) %t856 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 store i64 0, ptr %t856 - br label %map.have4713 -map.have4713: + br label %map.have4717 +map.have4717: %t857 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 store i64 %t842, ptr %t857 %t858 = load i64, ptr %a49 @@ -48399,11 +48425,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic4714, label %ok4715 -panic4714: + br i1 %t3, label %panic4718, label %ok4719 +panic4718: call void @finch_panic(ptr @.str.2914, i64 2119, ptr @.str.2915) unreachable -ok4715: +ok4719: %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 37 %t5 = load i64, ptr %t4 call void @finch_str_from_int(ptr %a6, i64 %t5) @@ -48422,11 +48448,11 @@ ok4715: %t17 = load { ptr, i64, i64 }, ptr %a13 %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic4716, label %ok4717 -panic4716: + br i1 %t19, label %panic4720, label %ok4721 +panic4720: call void @finch_panic(ptr @.str.2917, i64 2119, ptr @.str.2918) unreachable -ok4717: +ok4721: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 38 %t21 = load i64, ptr %t20 call void @finch_str_from_int(ptr %a22, i64 %t21) @@ -48447,11 +48473,11 @@ ok4717: %t34 = load { ptr, i64, i64 }, ptr %a30 %t35 = load ptr, ptr %a1 %t36 = icmp eq ptr %t35, null - br i1 %t36, label %panic4718, label %ok4719 -panic4718: + br i1 %t36, label %panic4722, label %ok4723 +panic4722: call void @finch_panic(ptr @.str.2920, i64 2119, ptr @.str.2921) unreachable -ok4719: +ok4723: %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 36 %t38 = load i64, ptr %t37 call void @finch_str_from_int(ptr %a39, i64 %t38) @@ -48467,38 +48493,38 @@ ok4719: store { ptr, i64, i64 } %t46, ptr %a47 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null - br i1 %t49, label %panic4720, label %ok4721 -panic4720: + br i1 %t49, label %panic4724, label %ok4725 +panic4724: call void @finch_panic(ptr @.str.2922, i64 2120, ptr @.str.2923) unreachable -ok4721: +ok4725: %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 34 %t51 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t51, ptr %a52 %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t54 = icmp sge i64 %t53, 0 - br i1 %t54, label %then4722, label %endif4724 -then4722: + br i1 %t54, label %then4726, label %endif4728 +then4726: %t55 = load ptr, ptr %a1 %t56 = icmp eq ptr %t55, null - br i1 %t56, label %panic4725, label %ok4726 -panic4725: + br i1 %t56, label %panic4729, label %ok4730 +panic4729: call void @finch_panic(ptr @.str.2924, i64 2121, ptr @.str.2925) unreachable -ok4726: +ok4730: %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 34 %t58 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t58, ptr %a59 %t60 = call i64 @finch_map_find(ptr %t57, ptr %a59, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t61 = icmp slt i64 %t60, 0 - br i1 %t61, label %map.missing4727, label %map.found4728 -map.missing4727: + br i1 %t61, label %map.missing4731, label %map.found4732 +map.missing4731: store { ptr, i64, i64 } zeroinitializer, ptr %a62 store { ptr, i64, i64 } %t58, ptr %a63 call void @finch_buf_str(ptr %a62, ptr %a63, i32 1) call void @finch_map_missing(ptr @.str.2926, i64 2121, ptr %a62) unreachable -map.found4728: +map.found4732: %t64 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t57, i32 0, i32 0 %t65 = load ptr, ptr %t64 %t66 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t65, i64 %t60 @@ -48506,15 +48532,15 @@ map.found4728: %t68 = load i64, ptr %t67 call void @finch_str_drop(ptr %a47) ret i64 %t68 -endif4724: +endif4728: %t69 = load ptr, ptr %a1 %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null - br i1 %t71, label %panic4729, label %ok4730 -panic4729: + br i1 %t71, label %panic4733, label %ok4734 +panic4733: call void @finch_panic(ptr @.str.2928, i64 2123, ptr @.str.2929) unreachable -ok4730: +ok4734: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 37 %t73 = load i64, ptr %t72 call void @finch_str_from_int(ptr %a74, i64 %t73) @@ -48533,11 +48559,11 @@ ok4730: %t85 = load { ptr, i64, i64 }, ptr %a81 %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic4731, label %ok4732 -panic4731: + br i1 %t87, label %panic4735, label %ok4736 +panic4735: call void @finch_panic(ptr @.str.2931, i64 2123, ptr @.str.2932) unreachable -ok4732: +ok4736: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 38 %t89 = load i64, ptr %t88 call void @finch_str_from_int(ptr %a90, i64 %t89) @@ -48558,11 +48584,11 @@ ok4732: %t102 = load { ptr, i64, i64 }, ptr %a98 %t103 = load ptr, ptr %a1 %t104 = icmp eq ptr %t103, null - br i1 %t104, label %panic4733, label %ok4734 -panic4733: + br i1 %t104, label %panic4737, label %ok4738 +panic4737: call void @finch_panic(ptr @.str.2934, i64 2123, ptr @.str.2935) unreachable -ok4734: +ok4738: %t105 = getelementptr inbounds %S.gen.Gen, ptr %t103, i32 0, i32 36 %t106 = load i64, ptr %t105 call void @finch_str_from_int(ptr %a107, i64 %t106) @@ -48588,11 +48614,11 @@ ok4734: %t123 = load i64, ptr %a122 %t124 = load ptr, ptr %a1 %t125 = icmp eq ptr %t124, null - br i1 %t125, label %panic4735, label %ok4736 -panic4735: + br i1 %t125, label %panic4739, label %ok4740 +panic4739: call void @finch_panic(ptr @.str.2937, i64 2124, ptr @.str.2938) unreachable -ok4736: +ok4740: %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 34 %t127 = load { ptr, i64, i64 }, ptr %a47 store { ptr, i64, i64 } %t127, ptr %a128 @@ -48603,14 +48629,14 @@ ok4736: %t133 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t132, i64 %t130 %t134 = load i32, ptr %a129 %t135 = icmp ne i32 %t134, 0 - br i1 %t135, label %map.new4737, label %map.have4738 -map.new4737: + br i1 %t135, label %map.new4741, label %map.have4742 +map.new4741: %t136 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 1 call void @finch_str_copy(ptr %t136, ptr %a128) %t137 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 store i64 0, ptr %t137 - br label %map.have4738 -map.have4738: + br label %map.have4742 +map.have4742: %t138 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 store i64 %t123, ptr %t138 %t139 = load i64, ptr %a122 @@ -48714,11 +48740,11 @@ entry: store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4739, label %ok4740 -panic4739: + br i1 %t4, label %panic4743, label %ok4744 +panic4743: call void @finch_panic(ptr @.str.2939, i64 2129, ptr @.str.2940) unreachable -ok4740: +ok4744: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 %t6 = load %S.gen.FnSig, ptr %t5 store %S.gen.FnSig %t6, ptr %a7 @@ -48743,8 +48769,8 @@ ok4740: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp sgt i64 %t24, 0 - br i1 %t25, label %then4741, label %endif4743 -then4741: + br i1 %t25, label %then4745, label %endif4747 +then4745: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = add i64 %t27, 1 @@ -48753,18 +48779,18 @@ then4741: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t27 store { ptr, i64, i64 } { ptr @.str.2941, i64 4, i64 0 }, ptr %t30 store i64 %t28, ptr %t26 - br label %endif4743 -endif4743: + br label %endif4747 +endif4747: %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 13 store i64 0, ptr %a32 - br label %each.cond4744 -each.cond4744: + br label %each.cond4748 +each.cond4748: %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 %t34 = load i64, ptr %t33 %t35 = load i64, ptr %a32 %t36 = icmp slt i64 %t35, %t34 - br i1 %t36, label %each.body4745, label %each.end4747 -each.body4745: + br i1 %t36, label %each.body4749, label %each.end4751 +each.body4749: %t37 = load ptr, ptr %t31 %t38 = getelementptr inbounds %S.ast.Type, ptr %t37, i64 %t35 %t39 = load %S.ast.Type, ptr %t38 @@ -48781,31 +48807,31 @@ each.body4745: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t46 store { ptr, i64, i64 } %t45, ptr %t49 store i64 %t47, ptr %t41 - br label %each.step4746 -each.step4746: + br label %each.step4750 +each.step4750: %t50 = load i64, ptr %a32 %t51 = add i64 %t50, 1 store i64 %t51, ptr %a32 - br label %each.cond4744 -each.end4747: + br label %each.cond4748 +each.end4751: %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic4748, label %ok4749 -panic4748: + br i1 %t53, label %panic4752, label %ok4753 +panic4752: call void @finch_panic(ptr @.str.2942, i64 2138, ptr @.str.2943) unreachable -ok4749: +ok4753: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 35 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t56 = load i64, ptr %t55 %t57 = load { ptr, i64, i64 }, ptr %t54 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 %t56, %t58 - br i1 %t59, label %range4750, label %inrange4751 -range4750: + br i1 %t59, label %range4754, label %inrange4755 +range4754: call void @finch_panic_index(ptr @.str.2944, i64 2138, i64 %t56, i64 %t58) unreachable -inrange4751: +inrange4755: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds i64, ptr %t60, i64 %t56 %t62 = load i64, ptr %t61 @@ -49054,67 +49080,67 @@ entry: store { ptr, i64, i64 } %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic4752, label %ok4753 -panic4752: + br i1 %t7, label %panic4756, label %ok4757 +panic4756: call void @finch_panic(ptr @.str.2957, i64 2144, ptr @.str.2958) unreachable -ok4753: +ok4757: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 30 %t9 = load i1, ptr %t8 %t10 = xor i1 %t9, true - br label %logic.from4754 -logic.from4754: - br i1 %t10, label %logic.end4756, label %logic.rhs4755 -logic.rhs4755: + br label %logic.from4758 +logic.from4758: + br i1 %t10, label %logic.end4760, label %logic.rhs4759 +logic.rhs4759: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic4757, label %ok4758 -panic4757: + br i1 %t12, label %panic4761, label %ok4762 +panic4761: call void @finch_panic(ptr @.str.2959, i64 2144, ptr @.str.2960) unreachable -ok4758: +ok4762: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 36 %t14 = load i64, ptr %t13 %t15 = icmp slt i64 %t14, 0 - br label %logic.rend4759 -logic.rend4759: - br label %logic.end4756 -logic.end4756: - %t16 = phi i1 [ true, %logic.from4754 ], [ %t15, %logic.rend4759 ] - br i1 %t16, label %then4760, label %endif4762 -then4760: + br label %logic.rend4763 +logic.rend4763: + br label %logic.end4760 +logic.end4760: + %t16 = phi i1 [ true, %logic.from4758 ], [ %t15, %logic.rend4763 ] + br i1 %t16, label %then4764, label %endif4766 +then4764: ret void -endif4762: +endif4766: %t17 = load ptr, ptr %a1 %t18 = load %S.ast.Type, ptr %a4 %t19 = call i64 @finch.gen.diType(ptr %t17, %S.ast.Type %t18) store i64 %t19, ptr %a20 %t21 = load i64, ptr %a20 %t22 = icmp slt i64 %t21, 0 - br i1 %t22, label %then4763, label %endif4765 -then4763: + br i1 %t22, label %then4767, label %endif4769 +then4767: ret void -endif4765: +endif4769: store { ptr, i64, i64 } { ptr @.str.2961, i64 0, i64 0 }, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic4766, label %ok4767 -panic4766: + br i1 %t25, label %panic4770, label %ok4771 +panic4770: call void @finch_panic(ptr @.str.2962, i64 2152, ptr @.str.2963) unreachable -ok4767: +ok4771: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 39 %t27 = load i64, ptr %t26 %t28 = icmp sgt i64 %t27, 0 - br i1 %t28, label %then4768, label %endif4770 -then4768: + br i1 %t28, label %then4772, label %endif4774 +then4772: %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic4771, label %ok4772 -panic4771: + br i1 %t30, label %panic4775, label %ok4776 +panic4775: call void @finch_panic(ptr @.str.2965, i64 2153, ptr @.str.2966) unreachable -ok4772: +ok4776: %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 39 %t32 = load i64, ptr %t31 call void @finch_str_from_int(ptr %a33, i64 %t32) @@ -49129,8 +49155,8 @@ ok4772: store { ptr, i64, i64 } %t39, ptr %a23 store { ptr, i64, i64 } %t40, ptr %a41 call void @finch_str_drop(ptr %a41) - br label %endif4770 -endif4770: + br label %endif4774 +endif4774: %t42 = load ptr, ptr %a1 %t43 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.2967, i64 24, i64 0 }, ptr %a45 @@ -49145,11 +49171,11 @@ endif4770: %t52 = load { ptr, i64, i64 }, ptr %a48 %t53 = load ptr, ptr %a1 %t54 = icmp eq ptr %t53, null - br i1 %t54, label %panic4773, label %ok4774 -panic4773: + br i1 %t54, label %panic4777, label %ok4778 +panic4777: call void @finch_panic(ptr @.str.2969, i64 2155, ptr @.str.2970) unreachable -ok4774: +ok4778: %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 36 %t56 = load i64, ptr %t55 call void @finch_str_from_int(ptr %a57, i64 %t56) @@ -49170,22 +49196,22 @@ ok4774: %t69 = load { ptr, i64, i64 }, ptr %a65 %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null - br i1 %t71, label %panic4775, label %ok4776 -panic4775: + br i1 %t71, label %panic4779, label %ok4780 +panic4779: call void @finch_panic(ptr @.str.2972, i64 2155, ptr @.str.2973) unreachable -ok4776: +ok4780: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 35 %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t74 = load i64, ptr %t73 %t75 = load { ptr, i64, i64 }, ptr %t72 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 %t74, %t76 - br i1 %t77, label %range4777, label %inrange4778 -range4777: + br i1 %t77, label %range4781, label %inrange4782 +range4781: call void @finch_panic_index(ptr @.str.2974, i64 2155, i64 %t74, i64 %t76) unreachable -inrange4778: +inrange4782: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds i64, ptr %t78, i64 %t74 %t80 = load i64, ptr %t79 @@ -49255,22 +49281,22 @@ inrange4778: %t133 = load i64, ptr %t132 %t134 = load ptr, ptr %a1 %t135 = icmp eq ptr %t134, null - br i1 %t135, label %panic4779, label %ok4780 -panic4779: + br i1 %t135, label %panic4783, label %ok4784 +panic4783: call void @finch_panic(ptr @.str.2978, i64 2156, ptr @.str.2979) unreachable -ok4780: +ok4784: %t136 = getelementptr inbounds %S.gen.Gen, ptr %t134, i32 0, i32 37 store i64 %t133, ptr %t136 %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t138 = load i64, ptr %t137 %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null - br i1 %t140, label %panic4781, label %ok4782 -panic4781: + br i1 %t140, label %panic4785, label %ok4786 +panic4785: call void @finch_panic(ptr @.str.2980, i64 2157, ptr @.str.2981) unreachable -ok4782: +ok4786: %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 38 store i64 %t138, ptr %t141 %t142 = load ptr, ptr %a1 @@ -49346,21 +49372,21 @@ entry: store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic4783, label %ok4784 -panic4783: + br i1 %t11, label %panic4787, label %ok4788 +panic4787: call void @finch_panic(ptr @.str.2987, i64 2164, ptr @.str.2988) unreachable -ok4784: +ok4788: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 33 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 store i64 0, ptr %a15 - br label %for.cond4785 -for.cond4785: + br label %for.cond4789 +for.cond4789: %t16 = load i64, ptr %a15 %t17 = icmp slt i64 %t16, %t14 - br i1 %t17, label %for.body4786, label %for.end4788 -for.body4786: + br i1 %t17, label %for.body4790, label %for.end4792 +for.body4790: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t19 = load i64, ptr %a15 call void @finch_str_from_int(ptr %a20, i64 %t19) @@ -49379,21 +49405,21 @@ for.body4786: %t31 = load { ptr, i64, i64 }, ptr %a27 %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic4789, label %ok4790 -panic4789: + br i1 %t33, label %panic4793, label %ok4794 +panic4793: call void @finch_panic(ptr @.str.2991, i64 2165, ptr @.str.2992) unreachable -ok4790: +ok4794: %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 33 %t35 = load i64, ptr %a15 %t36 = load { ptr, i64, i64 }, ptr %t34 %t37 = extractvalue { ptr, i64, i64 } %t36, 1 %t38 = icmp uge i64 %t35, %t37 - br i1 %t38, label %range4791, label %inrange4792 -range4791: + br i1 %t38, label %range4795, label %inrange4796 +range4795: call void @finch_panic_index(ptr @.str.2993, i64 2165, i64 %t35, i64 %t37) unreachable -inrange4792: +inrange4796: %t39 = extractvalue { ptr, i64, i64 } %t36, 0 %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t35 %t41 = load { ptr, i64, i64 }, ptr %t40 @@ -49410,13 +49436,13 @@ inrange4792: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t18 - br label %for.step4787 -for.step4787: + br label %for.step4791 +for.step4791: %t51 = load i64, ptr %a15 %t52 = add i64 %t51, 1 store i64 %t52, ptr %a15 - br label %for.cond4785 -for.end4788: + br label %for.cond4789 +for.end4792: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.2994, i64 1, i64 0 }, ptr %a54 call void @finch_str_join(ptr %a55, ptr %a9, ptr %a54) @@ -49440,20 +49466,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond4864 -n.cond4864: + br label %n.cond4868 +n.cond4868: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body4865, label %n.end4866 -n.body4865: + br i1 %t7, label %n.body4869, label %n.end4870 +n.body4869: %t8 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.gen.Var, ptr %t2, i64 %t6 call void @finch.copy.S_gen_Var(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond4864 -n.end4866: + br label %n.cond4868 +n.end4870: ret void } @@ -49493,20 +49519,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond4861 -n.cond4861: + br label %n.cond4865 +n.cond4865: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body4862, label %n.end4863 -n.body4862: + br i1 %t7, label %n.body4866, label %n.end4867 +n.body4866: %t8 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.gen.Scope, ptr %t2, i64 %t6 call void @finch.copy.S_gen_Scope(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond4861 -n.end4863: + br label %n.cond4865 +n.end4867: ret void } @@ -49517,19 +49543,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond4867 -n.cond4867: + br label %n.cond4871 +n.cond4871: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body4868, label %n.end4869 -n.body4868: + br i1 %t6, label %n.body4872, label %n.end4873 +n.body4872: %t7 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Scope(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond4867 -n.end4869: + br label %n.cond4871 +n.end4873: call void @finch_arr_free(ptr %a) ret void } @@ -49700,31 +49726,31 @@ entry: store i64 %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic4793, label %ok4794 -panic4793: + br i1 %t4, label %panic4797, label %ok4798 +panic4797: call void @finch_panic(ptr @.str.2996, i64 2171, ptr @.str.2997) unreachable -ok4794: +ok4798: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 15 %t6 = load i64, ptr %a2 %t7 = load { ptr, i64, i64 }, ptr %t5 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 %t6, %t8 - br i1 %t9, label %range4795, label %inrange4796 -range4795: + br i1 %t9, label %range4799, label %inrange4800 +range4799: call void @finch_panic_index(ptr @.str.2998, i64 2171, i64 %t6, i64 %t8) unreachable -inrange4796: +inrange4800: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.gen.FnSig, ptr %t10, i64 %t6 %t12 = load %S.gen.FnSig, ptr %t11 %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic4797, label %ok4798 -panic4797: + br i1 %t14, label %panic4801, label %ok4802 +panic4801: call void @finch_panic(ptr @.str.2999, i64 2171, ptr @.str.3000) unreachable -ok4798: +ok4802: %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 13 store %S.gen.FnSig %t12, ptr %a16 call void @finch.copy.S_gen_FnSig(ptr %a17, ptr %a16) @@ -49735,21 +49761,21 @@ ok4798: call void @finch.drop.S_gen_FnSig(ptr %a20) %t21 = load ptr, ptr %a1 %t22 = icmp eq ptr %t21, null - br i1 %t22, label %panic4799, label %ok4800 -panic4799: + br i1 %t22, label %panic4803, label %ok4804 +panic4803: call void @finch_panic(ptr @.str.3001, i64 2172, ptr @.str.3002) unreachable -ok4800: +ok4804: %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 13 %t24 = getelementptr inbounds %S.gen.FnSig, ptr %t23, i32 0, i32 0 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic4801, label %ok4802 -panic4801: + br i1 %t27, label %panic4805, label %ok4806 +panic4805: call void @finch_panic(ptr @.str.3003, i64 2172, ptr @.str.3004) unreachable -ok4802: +ok4806: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 14 store { ptr, i64, i64 } %t25, ptr %a29 call void @finch_str_copy(ptr %a30, ptr %a29) @@ -49760,21 +49786,21 @@ ok4802: call void @finch_str_drop(ptr %a33) %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic4803, label %ok4804 -panic4803: + br i1 %t35, label %panic4807, label %ok4808 +panic4807: call void @finch_panic(ptr @.str.3005, i64 2173, ptr @.str.3006) unreachable -ok4804: +ok4808: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 13 %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 6 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic4805, label %ok4806 -panic4805: + br i1 %t40, label %panic4809, label %ok4810 +panic4809: call void @finch_panic(ptr @.str.3007, i64 2173, ptr @.str.3008) unreachable -ok4806: +ok4810: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 18 store { ptr, i64, i64 } %t38, ptr %a42 call void @finch.copy.arr_str(ptr %a43, ptr %a42) @@ -49785,21 +49811,21 @@ ok4806: call void @finch.drop.arr_str(ptr %a46) %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic4807, label %ok4808 -panic4807: + br i1 %t48, label %panic4811, label %ok4812 +panic4811: call void @finch_panic(ptr @.str.3009, i64 2174, ptr @.str.3010) unreachable -ok4808: +ok4812: %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 13 %t50 = getelementptr inbounds %S.gen.FnSig, ptr %t49, i32 0, i32 7 %t51 = load { ptr, i64, i64 }, ptr %t50 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic4809, label %ok4810 -panic4809: + br i1 %t53, label %panic4813, label %ok4814 +panic4813: call void @finch_panic(ptr @.str.3011, i64 2174, ptr @.str.3012) unreachable -ok4810: +ok4814: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 19 store { ptr, i64, i64 } %t51, ptr %a55 call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) @@ -49810,11 +49836,11 @@ ok4810: call void @finch.drop.arr_S_ast_Type(ptr %a59) %t60 = load ptr, ptr %a1 %t61 = icmp eq ptr %t60, null - br i1 %t61, label %panic4811, label %ok4812 -panic4811: + br i1 %t61, label %panic4815, label %ok4816 +panic4815: call void @finch_panic(ptr @.str.3014, i64 2175, ptr @.str.3015) unreachable -ok4812: +ok4816: %t62 = getelementptr inbounds %S.gen.Gen, ptr %t60, i32 0, i32 20 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } { ptr @.str.3013, i64 0, i64 0 }, ptr %t62 @@ -49822,25 +49848,25 @@ ok4812: call void @finch_str_drop(ptr %a64) %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic4813, label %ok4814 -panic4813: + br i1 %t66, label %panic4817, label %ok4818 +panic4817: call void @finch_panic(ptr @.str.3016, i64 2176, ptr @.str.3017) unreachable -ok4814: +ok4818: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 13 %t68 = getelementptr inbounds %S.gen.FnSig, ptr %t67, i32 0, i32 7 %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = icmp sgt i64 %t70, 0 - br i1 %t71, label %then4815, label %endif4817 -then4815: + br i1 %t71, label %then4819, label %endif4821 +then4819: %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null - br i1 %t73, label %panic4818, label %ok4819 -panic4818: + br i1 %t73, label %panic4822, label %ok4823 +panic4822: call void @finch_panic(ptr @.str.3019, i64 2177, ptr @.str.3020) unreachable -ok4819: +ok4823: %t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 13 %t75 = getelementptr inbounds %S.gen.FnSig, ptr %t74, i32 0, i32 8 %t76 = load { ptr, i64, i64 }, ptr %t75 @@ -49856,65 +49882,65 @@ ok4819: %t85 = load { ptr, i64, i64 }, ptr %a81 %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic4820, label %ok4821 -panic4820: + br i1 %t87, label %panic4824, label %ok4825 +panic4824: call void @finch_panic(ptr @.str.3022, i64 2177, ptr @.str.3023) unreachable -ok4821: +ok4825: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 20 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t85, ptr %t88 store { ptr, i64, i64 } %t89, ptr %a90 call void @finch_str_drop(ptr %a90) - br label %endif4817 -endif4817: + br label %endif4821 +endif4821: %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null - br i1 %t92, label %panic4822, label %ok4823 -panic4822: + br i1 %t92, label %panic4826, label %ok4827 +panic4826: call void @finch_panic(ptr @.str.3024, i64 2179, ptr @.str.3025) unreachable -ok4823: +ok4827: %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 0 %t94 = load ptr, ptr %a1 %t95 = icmp eq ptr %t94, null - br i1 %t95, label %panic4824, label %ok4825 -panic4824: + br i1 %t95, label %panic4828, label %ok4829 +panic4828: call void @finch_panic(ptr @.str.3026, i64 2179, ptr @.str.3027) unreachable -ok4825: +ok4829: %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 13 %t97 = getelementptr inbounds %S.gen.FnSig, ptr %t96, i32 0, i32 16 %t98 = load i64, ptr %t97 %t99 = load { ptr, i64, i64 }, ptr %t93 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 %t98, %t100 - br i1 %t101, label %range4826, label %inrange4827 -range4826: + br i1 %t101, label %range4830, label %inrange4831 +range4830: call void @finch_panic_index(ptr @.str.3028, i64 2179, i64 %t98, i64 %t100) unreachable -inrange4827: +inrange4831: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Program, ptr %t102, i64 %t98 %t104 = getelementptr inbounds %S.ast.Program, ptr %t103, i32 0, i32 8 %t105 = load ptr, ptr %a1 %t106 = icmp eq ptr %t105, null - br i1 %t106, label %panic4828, label %ok4829 -panic4828: + br i1 %t106, label %panic4832, label %ok4833 +panic4832: call void @finch_panic(ptr @.str.3029, i64 2179, ptr @.str.3030) unreachable -ok4829: +ok4833: %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 13 %t108 = getelementptr inbounds %S.gen.FnSig, ptr %t107, i32 0, i32 17 %t109 = load i64, ptr %t108 %t110 = load { ptr, i64, i64 }, ptr %t104 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 - br i1 %t112, label %range4830, label %inrange4831 -range4830: + br i1 %t112, label %range4834, label %inrange4835 +range4834: call void @finch_panic_index(ptr @.str.3031, i64 2179, i64 %t109, i64 %t111) unreachable -inrange4831: +inrange4835: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds %S.ast.Node, ptr %t113, i64 %t109 %t115 = load %S.ast.Node, ptr %t114 @@ -49926,11 +49952,11 @@ inrange4831: %t121 = load { ptr, i64, i64 }, ptr %a120 %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null - br i1 %t123, label %panic4832, label %ok4833 -panic4832: + br i1 %t123, label %panic4836, label %ok4837 +panic4836: call void @finch_panic(ptr @.str.3032, i64 2181, ptr @.str.3033) unreachable -ok4833: +ok4837: %t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 4 store { ptr, i64, i64 } %t121, ptr %a125 call void @finch.copy.arr_str(ptr %a126, ptr %a125) @@ -49942,11 +49968,11 @@ ok4833: %t130 = load { ptr, i64, i64 }, ptr %a120 %t131 = load ptr, ptr %a1 %t132 = icmp eq ptr %t131, null - br i1 %t132, label %panic4834, label %ok4835 -panic4834: + br i1 %t132, label %panic4838, label %ok4839 +panic4838: call void @finch_panic(ptr @.str.3034, i64 2182, ptr @.str.3035) unreachable -ok4835: +ok4839: %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 5 store { ptr, i64, i64 } %t130, ptr %a134 call void @finch.copy.arr_str(ptr %a135, ptr %a134) @@ -49957,52 +49983,52 @@ ok4835: call void @finch.drop.arr_str(ptr %a138) %t139 = load ptr, ptr %a1 %t140 = icmp eq ptr %t139, null - br i1 %t140, label %panic4836, label %ok4837 -panic4836: + br i1 %t140, label %panic4840, label %ok4841 +panic4840: call void @finch_panic(ptr @.str.3036, i64 2183, ptr @.str.3037) unreachable -ok4837: +ok4841: %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 6 store i64 0, ptr %t141 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic4838, label %ok4839 -panic4838: + br i1 %t143, label %panic4842, label %ok4843 +panic4842: call void @finch_panic(ptr @.str.3038, i64 2184, ptr @.str.3039) unreachable -ok4839: +ok4843: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 9 store i1 false, ptr %t144 %t145 = load ptr, ptr %a1 %t146 = icmp eq ptr %t145, null - br i1 %t146, label %panic4840, label %ok4841 -panic4840: + br i1 %t146, label %panic4844, label %ok4845 +panic4844: call void @finch_panic(ptr @.str.3040, i64 2185, ptr @.str.3041) unreachable -ok4841: +ok4845: %t147 = getelementptr inbounds %S.gen.Gen, ptr %t145, i32 0, i32 25 store i64 0, ptr %t147 %t148 = load ptr, ptr %a1 %t149 = icmp eq ptr %t148, null - br i1 %t149, label %panic4842, label %ok4843 -panic4842: + br i1 %t149, label %panic4846, label %ok4847 +panic4846: call void @finch_panic(ptr @.str.3042, i64 2186, ptr @.str.3043) unreachable -ok4843: +ok4847: %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 36 store i64 -1, ptr %t150 store i64 -1, ptr %a151 %t152 = load ptr, ptr %a1 %t153 = icmp eq ptr %t152, null - br i1 %t153, label %panic4844, label %ok4845 -panic4844: + br i1 %t153, label %panic4848, label %ok4849 +panic4848: call void @finch_panic(ptr @.str.3044, i64 2188, ptr @.str.3045) unreachable -ok4845: +ok4849: %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 30 %t155 = load i1, ptr %t154 - br i1 %t155, label %then4846, label %endif4848 -then4846: + br i1 %t155, label %then4850, label %endif4852 +then4850: %t156 = load ptr, ptr %a1 %t157 = load %S.ast.Node, ptr %a119 %t158 = call i64 @finch.gen.dbgSubprogram(ptr %t156, %S.ast.Node %t157) @@ -50010,64 +50036,64 @@ then4846: %t159 = load i64, ptr %a151 %t160 = load ptr, ptr %a1 %t161 = icmp eq ptr %t160, null - br i1 %t161, label %panic4849, label %ok4850 -panic4849: + br i1 %t161, label %panic4853, label %ok4854 +panic4853: call void @finch_panic(ptr @.str.3046, i64 2190, ptr @.str.3047) unreachable -ok4850: +ok4854: %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 36 store i64 %t159, ptr %t162 %t163 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 11 %t164 = load i64, ptr %t163 %t165 = load ptr, ptr %a1 %t166 = icmp eq ptr %t165, null - br i1 %t166, label %panic4851, label %ok4852 -panic4851: + br i1 %t166, label %panic4855, label %ok4856 +panic4855: call void @finch_panic(ptr @.str.3048, i64 2191, ptr @.str.3049) unreachable -ok4852: +ok4856: %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 37 store i64 %t164, ptr %t167 %t168 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 12 %t169 = load i64, ptr %t168 %t170 = load ptr, ptr %a1 %t171 = icmp eq ptr %t170, null - br i1 %t171, label %panic4853, label %ok4854 -panic4853: + br i1 %t171, label %panic4857, label %ok4858 +panic4857: call void @finch_panic(ptr @.str.3050, i64 2192, ptr @.str.3051) unreachable -ok4854: +ok4858: %t172 = getelementptr inbounds %S.gen.Gen, ptr %t170, i32 0, i32 38 store i64 %t169, ptr %t172 - br label %endif4848 -endif4848: + br label %endif4852 +endif4852: %t173 = load ptr, ptr %a1 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic4855, label %ok4856 -panic4855: + br i1 %t174, label %panic4859, label %ok4860 +panic4859: call void @finch_panic(ptr @.str.3052, i64 2194, ptr @.str.3053) unreachable -ok4856: +ok4860: %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 44 store i1 false, ptr %t175 %t176 = load ptr, ptr %a1 %t177 = icmp eq ptr %t176, null - br i1 %t177, label %panic4857, label %ok4858 -panic4857: + br i1 %t177, label %panic4861, label %ok4862 +panic4861: call void @finch_panic(ptr @.str.3054, i64 2195, ptr @.str.3055) unreachable -ok4858: +ok4862: %t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 46 store i64 0, ptr %t178 store { ptr, i64, i64 } zeroinitializer, ptr %a179 %t180 = load { ptr, i64, i64 }, ptr %a179 %t181 = load ptr, ptr %a1 %t182 = icmp eq ptr %t181, null - br i1 %t182, label %panic4859, label %ok4860 -panic4859: + br i1 %t182, label %panic4863, label %ok4864 +panic4863: call void @finch_panic(ptr @.str.3056, i64 2197, ptr @.str.3057) unreachable -ok4860: +ok4864: %t183 = getelementptr inbounds %S.gen.Gen, ptr %t181, i32 0, i32 10 store { ptr, i64, i64 } %t180, ptr %a184 call void @finch.copy.arr_S_gen_Scope(ptr %a185, ptr %a184) @@ -50081,18 +50107,18 @@ ok4860: store { ptr, i64, i64 } zeroinitializer, ptr %a190 %t191 = load ptr, ptr %a1 %t192 = icmp eq ptr %t191, null - br i1 %t192, label %panic4870, label %ok4871 -panic4870: + br i1 %t192, label %panic4874, label %ok4875 +panic4874: call void @finch_panic(ptr @.str.3058, i64 2200, ptr @.str.3059) unreachable -ok4871: +ok4875: %t193 = getelementptr inbounds %S.gen.Gen, ptr %t191, i32 0, i32 13 %t194 = getelementptr inbounds %S.gen.FnSig, ptr %t193, i32 0, i32 2 %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 %t196 = load i64, ptr %t195 %t197 = icmp sgt i64 %t196, 0 - br i1 %t197, label %then4872, label %endif4874 -then4872: + br i1 %t197, label %then4876, label %endif4878 +then4876: %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 %t199 = load i64, ptr %t198 %t200 = add i64 %t199, 1 @@ -50104,22 +50130,22 @@ then4872: store { ptr, i64, i64 } { ptr @.str.3061, i64 6, i64 0 }, ptr %a203 %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null - br i1 %t205, label %panic4875, label %ok4876 -panic4875: + br i1 %t205, label %panic4879, label %ok4880 +panic4879: call void @finch_panic(ptr @.str.3062, i64 2204, ptr @.str.3063) unreachable -ok4876: +ok4880: %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 13 %t207 = getelementptr inbounds %S.gen.FnSig, ptr %t206, i32 0, i32 4 %t208 = load i1, ptr %t207 - br i1 %t208, label %then4877, label %endif4879 -then4877: + br i1 %t208, label %then4881, label %endif4883 +then4881: %t209 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } { ptr @.str.3064, i64 4, i64 0 }, ptr %a203 store { ptr, i64, i64 } %t209, ptr %a210 call void @finch_str_drop(ptr %a210) - br label %endif4879 -endif4879: + br label %endif4883 +endif4883: %t211 = load { ptr, i64, i64 }, ptr %a203 store { ptr, i64, i64 } %t211, ptr %a212 call void @finch_str_copy(ptr %a213, ptr %a212) @@ -50127,11 +50153,11 @@ endif4879: %t215 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t214, 0 %t216 = load ptr, ptr %a1 %t217 = icmp eq ptr %t216, null - br i1 %t217, label %panic4880, label %ok4881 -panic4880: + br i1 %t217, label %panic4884, label %ok4885 +panic4884: call void @finch_panic(ptr @.str.3065, i64 2207, ptr @.str.3066) unreachable -ok4881: +ok4885: %t218 = getelementptr inbounds %S.gen.Gen, ptr %t216, i32 0, i32 13 %t219 = getelementptr inbounds %S.gen.FnSig, ptr %t218, i32 0, i32 2 %t220 = load { ptr, i64, i64 }, ptr %t219 @@ -50141,11 +50167,11 @@ ok4881: %t224 = insertvalue %S.ast.Type %t215, { ptr, i64, i64 } %t223, 2 %t225 = load ptr, ptr %a1 %t226 = icmp eq ptr %t225, null - br i1 %t226, label %panic4882, label %ok4883 -panic4882: + br i1 %t226, label %panic4886, label %ok4887 +panic4886: call void @finch_panic(ptr @.str.3067, i64 2207, ptr @.str.3068) unreachable -ok4883: +ok4887: %t227 = getelementptr inbounds %S.gen.Gen, ptr %t225, i32 0, i32 13 %t228 = getelementptr inbounds %S.gen.FnSig, ptr %t227, i32 0, i32 3 %t229 = load { ptr, i64, i64 }, ptr %t228 @@ -50156,20 +50182,20 @@ ok4883: store %S.ast.Type %t233, ptr %a234 %t235 = load ptr, ptr %a1 %t236 = icmp eq ptr %t235, null - br i1 %t236, label %panic4884, label %ok4885 -panic4884: + br i1 %t236, label %panic4888, label %ok4889 +panic4888: call void @finch_panic(ptr @.str.3069, i64 2208, ptr @.str.3070) unreachable -ok4885: +ok4889: %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 10 %t238 = load { ptr, i64, i64 }, ptr %t237 %t239 = extractvalue { ptr, i64, i64 } %t238, 1 %t240 = icmp uge i64 0, %t239 - br i1 %t240, label %range4886, label %inrange4887 -range4886: + br i1 %t240, label %range4890, label %inrange4891 +range4890: call void @finch_panic_index(ptr @.str.3071, i64 2208, i64 0, i64 %t239) unreachable -inrange4887: +inrange4891: %t241 = extractvalue { ptr, i64, i64 } %t238, 0 %t242 = getelementptr inbounds %S.gen.Scope, ptr %t241, i64 0 %t243 = getelementptr inbounds %S.gen.Scope, ptr %t242, i32 0, i32 0 @@ -50191,61 +50217,61 @@ inrange4887: store i64 %t254, ptr %t244 %t257 = load ptr, ptr %a1 %t258 = icmp eq ptr %t257, null - br i1 %t258, label %panic4888, label %ok4889 -panic4888: + br i1 %t258, label %panic4892, label %ok4893 +panic4892: call void @finch_panic(ptr @.str.3074, i64 2209, ptr @.str.3075) unreachable -ok4889: +ok4893: %t259 = getelementptr inbounds %S.gen.Gen, ptr %t257, i32 0, i32 30 %t260 = load i1, ptr %t259 - br i1 %t260, label %then4890, label %endif4892 -then4890: + br i1 %t260, label %then4894, label %endif4896 +then4894: %t261 = load ptr, ptr %a1 %t262 = load %S.ast.Node, ptr %a119 %t263 = load %S.ast.Type, ptr %a234 call void @finch.gen.dbgVariable(ptr %t261, %S.ast.Node %t262, { ptr, i64, i64 } { ptr @.str.3076, i64 4, i64 0 }, %S.ast.Type %t263, { ptr, i64, i64 } { ptr @.str.3077, i64 5, i64 0 }) - br label %endif4892 -endif4892: + br label %endif4896 +endif4896: call void @finch.drop.S_ast_Type(ptr %a234) call void @finch_str_drop(ptr %a203) - br label %endif4874 -endif4874: + br label %endif4878 +endif4878: %t264 = load ptr, ptr %a1 %t265 = icmp eq ptr %t264, null - br i1 %t265, label %panic4893, label %ok4894 -panic4893: + br i1 %t265, label %panic4897, label %ok4898 +panic4897: call void @finch_panic(ptr @.str.3078, i64 2214, ptr @.str.3079) unreachable -ok4894: +ok4898: %t266 = getelementptr inbounds %S.gen.Gen, ptr %t264, i32 0, i32 13 %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i32 0, i32 13 %t268 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i32 0, i32 1 %t269 = load i64, ptr %t268 store i64 0, ptr %a270 - br label %for.cond4895 -for.cond4895: + br label %for.cond4899 +for.cond4899: %t271 = load i64, ptr %a270 %t272 = icmp slt i64 %t271, %t269 - br i1 %t272, label %for.body4896, label %for.end4898 -for.body4896: + br i1 %t272, label %for.body4900, label %for.end4902 +for.body4900: %t273 = load ptr, ptr %a1 %t274 = icmp eq ptr %t273, null - br i1 %t274, label %panic4899, label %ok4900 -panic4899: + br i1 %t274, label %panic4903, label %ok4904 +panic4903: call void @finch_panic(ptr @.str.3080, i64 2215, ptr @.str.3081) unreachable -ok4900: +ok4904: %t275 = getelementptr inbounds %S.gen.Gen, ptr %t273, i32 0, i32 13 %t276 = getelementptr inbounds %S.gen.FnSig, ptr %t275, i32 0, i32 13 %t277 = load i64, ptr %a270 %t278 = load { ptr, i64, i64 }, ptr %t276 %t279 = extractvalue { ptr, i64, i64 } %t278, 1 %t280 = icmp uge i64 %t277, %t279 - br i1 %t280, label %range4901, label %inrange4902 -range4901: + br i1 %t280, label %range4905, label %inrange4906 +range4905: call void @finch_panic_index(ptr @.str.3082, i64 2215, i64 %t277, i64 %t279) unreachable -inrange4902: +inrange4906: %t281 = extractvalue { ptr, i64, i64 } %t278, 0 %t282 = getelementptr inbounds %S.ast.Type, ptr %t281, i64 %t277 %t283 = load %S.ast.Type, ptr %t282 @@ -50294,39 +50320,39 @@ inrange4902: %t319 = load ptr, ptr %a1 %t320 = load %S.ast.Type, ptr %a287 %t321 = call i1 @finch.gen.owning(ptr %t319, %S.ast.Type %t320) - br label %logic.from4903 -logic.from4903: - br i1 %t321, label %logic.rhs4904, label %logic.end4905 -logic.rhs4904: + br label %logic.from4907 +logic.from4907: + br i1 %t321, label %logic.rhs4908, label %logic.end4909 +logic.rhs4908: %t322 = load ptr, ptr %a1 %t323 = icmp eq ptr %t322, null - br i1 %t323, label %panic4906, label %ok4907 -panic4906: + br i1 %t323, label %panic4910, label %ok4911 +panic4910: call void @finch_panic(ptr @.str.3085, i64 2218, ptr @.str.3086) unreachable -ok4907: +ok4911: %t324 = getelementptr inbounds %S.gen.Gen, ptr %t322, i32 0, i32 13 %t325 = getelementptr inbounds %S.gen.FnSig, ptr %t324, i32 0, i32 15 %t326 = load i64, ptr %a270 %t327 = load { ptr, i64, i64 }, ptr %t325 %t328 = extractvalue { ptr, i64, i64 } %t327, 1 %t329 = icmp uge i64 %t326, %t328 - br i1 %t329, label %range4908, label %inrange4909 -range4908: + br i1 %t329, label %range4912, label %inrange4913 +range4912: call void @finch_panic_index(ptr @.str.3087, i64 2218, i64 %t326, i64 %t328) unreachable -inrange4909: +inrange4913: %t330 = extractvalue { ptr, i64, i64 } %t327, 0 %t331 = getelementptr inbounds i1, ptr %t330, i64 %t326 %t332 = load i1, ptr %t331 %t333 = xor i1 %t332, true - br label %logic.rend4910 -logic.rend4910: - br label %logic.end4905 -logic.end4905: - %t334 = phi i1 [ false, %logic.from4903 ], [ %t333, %logic.rend4910 ] - br i1 %t334, label %then4911, label %endif4913 -then4911: + br label %logic.rend4914 +logic.rend4914: + br label %logic.end4909 +logic.end4909: + %t334 = phi i1 [ false, %logic.from4907 ], [ %t333, %logic.rend4914 ] + br i1 %t334, label %then4915, label %endif4917 +then4915: %t335 = load ptr, ptr %a1 %t336 = load { ptr, i64, i64 }, ptr %a318 %t337 = load %S.ast.Type, ptr %a287 @@ -50335,78 +50361,78 @@ then4911: store { ptr, i64, i64 } %t338, ptr %a318 store { ptr, i64, i64 } %t339, ptr %a340 call void @finch_str_drop(ptr %a340) - br label %endif4913 -endif4913: + br label %endif4917 +endif4917: %t341 = load i64, ptr %a270 %t342 = add i64 %t341, 1 %t343 = load ptr, ptr %a1 %t344 = icmp eq ptr %t343, null - br i1 %t344, label %panic4914, label %ok4915 -panic4914: + br i1 %t344, label %panic4918, label %ok4919 +panic4918: call void @finch_panic(ptr @.str.3088, i64 2221, ptr @.str.3089) unreachable -ok4915: +ok4919: %t345 = getelementptr inbounds %S.gen.Gen, ptr %t343, i32 0, i32 39 store i64 %t342, ptr %t345 %t346 = load ptr, ptr %a1 %t347 = icmp eq ptr %t346, null - br i1 %t347, label %panic4916, label %ok4917 -panic4916: + br i1 %t347, label %panic4920, label %ok4921 +panic4920: call void @finch_panic(ptr @.str.3090, i64 2222, ptr @.str.3091) unreachable -ok4917: +ok4921: %t348 = getelementptr inbounds %S.gen.Gen, ptr %t346, i32 0, i32 13 %t349 = getelementptr inbounds %S.gen.FnSig, ptr %t348, i32 0, i32 2 %t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i32 0, i32 1 %t351 = load i64, ptr %t350 %t352 = icmp sgt i64 %t351, 0 - br i1 %t352, label %then4918, label %endif4920 -then4918: + br i1 %t352, label %then4922, label %endif4924 +then4922: %t353 = load i64, ptr %a270 %t354 = add i64 %t353, 2 %t355 = load ptr, ptr %a1 %t356 = icmp eq ptr %t355, null - br i1 %t356, label %panic4921, label %ok4922 -panic4921: + br i1 %t356, label %panic4925, label %ok4926 +panic4925: call void @finch_panic(ptr @.str.3092, i64 2223, ptr @.str.3093) unreachable -ok4922: +ok4926: %t357 = getelementptr inbounds %S.gen.Gen, ptr %t355, i32 0, i32 39 store i64 %t354, ptr %t357 - br label %endif4920 -endif4920: + br label %endif4924 +endif4924: %t358 = load ptr, ptr %a1 %t359 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 %t360 = load i64, ptr %a270 %t361 = load { ptr, i64, i64 }, ptr %t359 %t362 = extractvalue { ptr, i64, i64 } %t361, 1 %t363 = icmp uge i64 %t360, %t362 - br i1 %t363, label %range4923, label %inrange4924 -range4923: + br i1 %t363, label %range4927, label %inrange4928 +range4927: call void @finch_panic_index(ptr @.str.3094, i64 2225, i64 %t360, i64 %t362) unreachable -inrange4924: +inrange4928: %t364 = extractvalue { ptr, i64, i64 } %t361, 0 %t365 = getelementptr inbounds %S.ast.Node, ptr %t364, i64 %t360 %t366 = load %S.ast.Node, ptr %t365 %t367 = load ptr, ptr %a1 %t368 = icmp eq ptr %t367, null - br i1 %t368, label %panic4925, label %ok4926 -panic4925: + br i1 %t368, label %panic4929, label %ok4930 +panic4929: call void @finch_panic(ptr @.str.3095, i64 2225, ptr @.str.3096) unreachable -ok4926: +ok4930: %t369 = getelementptr inbounds %S.gen.Gen, ptr %t367, i32 0, i32 13 %t370 = getelementptr inbounds %S.gen.FnSig, ptr %t369, i32 0, i32 14 %t371 = load i64, ptr %a270 %t372 = load { ptr, i64, i64 }, ptr %t370 %t373 = extractvalue { ptr, i64, i64 } %t372, 1 %t374 = icmp uge i64 %t371, %t373 - br i1 %t374, label %range4927, label %inrange4928 -range4927: + br i1 %t374, label %range4931, label %inrange4932 +range4931: call void @finch_panic_index(ptr @.str.3097, i64 2225, i64 %t371, i64 %t373) unreachable -inrange4928: +inrange4932: %t375 = extractvalue { ptr, i64, i64 } %t372, 0 %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t371 %t377 = load { ptr, i64, i64 }, ptr %t376 @@ -50415,58 +50441,58 @@ inrange4928: %t380 = load ptr, ptr %a1 %t381 = load %S.ast.Type, ptr %a287 %t382 = call i1 @finch.gen.owning(ptr %t380, %S.ast.Type %t381) - br label %logic.from4929 -logic.from4929: - br i1 %t382, label %logic.rhs4930, label %logic.end4931 -logic.rhs4930: + br label %logic.from4933 +logic.from4933: + br i1 %t382, label %logic.rhs4934, label %logic.end4935 +logic.rhs4934: %t383 = load ptr, ptr %a1 %t384 = icmp eq ptr %t383, null - br i1 %t384, label %panic4932, label %ok4933 -panic4932: + br i1 %t384, label %panic4936, label %ok4937 +panic4936: call void @finch_panic(ptr @.str.3098, i64 2225, ptr @.str.3099) unreachable -ok4933: +ok4937: %t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 13 %t386 = getelementptr inbounds %S.gen.FnSig, ptr %t385, i32 0, i32 15 %t387 = load i64, ptr %a270 %t388 = load { ptr, i64, i64 }, ptr %t386 %t389 = extractvalue { ptr, i64, i64 } %t388, 1 %t390 = icmp uge i64 %t387, %t389 - br i1 %t390, label %range4934, label %inrange4935 -range4934: + br i1 %t390, label %range4938, label %inrange4939 +range4938: call void @finch_panic_index(ptr @.str.3100, i64 2225, i64 %t387, i64 %t389) unreachable -inrange4935: +inrange4939: %t391 = extractvalue { ptr, i64, i64 } %t388, 0 %t392 = getelementptr inbounds i1, ptr %t391, i64 %t387 %t393 = load i1, ptr %t392 %t394 = xor i1 %t393, true - br label %logic.rend4936 -logic.rend4936: - br label %logic.end4931 -logic.end4931: - %t395 = phi i1 [ false, %logic.from4929 ], [ %t394, %logic.rend4936 ] + br label %logic.rend4940 +logic.rend4940: + br label %logic.end4935 +logic.end4935: + %t395 = phi i1 [ false, %logic.from4933 ], [ %t394, %logic.rend4940 ] %t396 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t358, %S.ast.Node %t366, { ptr, i64, i64 } %t377, %S.ast.Type %t378, { ptr, i64, i64 } %t379, i1 false, i1 %t395) store { ptr, i64, i64 } %t396, ptr %a397 call void @finch_str_drop(ptr %a397) %t398 = load ptr, ptr %a1 %t399 = icmp eq ptr %t398, null - br i1 %t399, label %panic4937, label %ok4938 -panic4937: + br i1 %t399, label %panic4941, label %ok4942 +panic4941: call void @finch_panic(ptr @.str.3101, i64 2226, ptr @.str.3102) unreachable -ok4938: +ok4942: %t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 39 store i64 0, ptr %t400 call void @finch_str_drop(ptr %a318) call void @finch.drop.S_ast_Type(ptr %a287) - br label %for.step4897 -for.step4897: + br label %for.step4901 +for.step4901: %t401 = load i64, ptr %a270 %t402 = add i64 %t401, 1 store i64 %t402, ptr %a270 - br label %for.cond4895 -for.end4898: + br label %for.cond4899 +for.end4902: %t403 = load ptr, ptr %a1 %t404 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 %t405 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 @@ -50476,34 +50502,34 @@ for.end4898: %t409 = load { ptr, i64, i64 }, ptr %t404 %t410 = extractvalue { ptr, i64, i64 } %t409, 1 %t411 = icmp uge i64 %t408, %t410 - br i1 %t411, label %range4939, label %inrange4940 -range4939: + br i1 %t411, label %range4943, label %inrange4944 +range4943: call void @finch_panic_index(ptr @.str.3103, i64 2228, i64 %t408, i64 %t410) unreachable -inrange4940: +inrange4944: %t412 = extractvalue { ptr, i64, i64 } %t409, 0 %t413 = getelementptr inbounds %S.ast.Node, ptr %t412, i64 %t408 %t414 = load %S.ast.Node, ptr %t413 call void @finch.gen.block(ptr %t403, %S.ast.Node %t414, i1 false) %t415 = load ptr, ptr %a1 %t416 = icmp eq ptr %t415, null - br i1 %t416, label %panic4941, label %ok4942 -panic4941: + br i1 %t416, label %panic4945, label %ok4946 +panic4945: call void @finch_panic(ptr @.str.3104, i64 2229, ptr @.str.3105) unreachable -ok4942: +ok4946: %t417 = getelementptr inbounds %S.gen.Gen, ptr %t415, i32 0, i32 9 %t418 = load i1, ptr %t417 %t419 = xor i1 %t418, true - br i1 %t419, label %then4943, label %endif4945 -then4943: + br i1 %t419, label %then4947, label %endif4949 +then4947: %t420 = load ptr, ptr %a1 %t421 = icmp eq ptr %t420, null - br i1 %t421, label %panic4946, label %ok4947 -panic4946: + br i1 %t421, label %panic4950, label %ok4951 +panic4950: call void @finch_panic(ptr @.str.3106, i64 2230, ptr @.str.3107) unreachable -ok4947: +ok4951: %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 13 %t423 = getelementptr inbounds %S.gen.FnSig, ptr %t422, i32 0, i32 12 %t424 = getelementptr inbounds %S.ast.Type, ptr %t423, i32 0, i32 0 @@ -50512,8 +50538,8 @@ ok4947: store { ptr, i64, i64 } { ptr @.str.3108, i64 4, i64 0 }, ptr %a427 %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) %t429 = icmp eq i32 %t428, 0 - br i1 %t429, label %then4948, label %endif4950 -then4948: + br i1 %t429, label %then4952, label %endif4954 +then4952: %t430 = load ptr, ptr %a1 %t431 = load %S.ast.Node, ptr %a119 %t432 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 1 @@ -50530,11 +50556,11 @@ then4948: %t442 = load { ptr, i64, i64 }, ptr %a438 %t443 = load ptr, ptr %a1 %t444 = icmp eq ptr %t443, null - br i1 %t444, label %panic4951, label %ok4952 -panic4951: + br i1 %t444, label %panic4955, label %ok4956 +panic4955: call void @finch_panic(ptr @.str.3111, i64 2231, ptr @.str.3112) unreachable -ok4952: +ok4956: %t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 13 %t446 = getelementptr inbounds %S.gen.FnSig, ptr %t445, i32 0, i32 12 %t447 = load %S.ast.Type, ptr %t446 @@ -50550,31 +50576,31 @@ ok4952: call void @finch.gen.fail(ptr %t430, %S.ast.Node %t431, { ptr, i64, i64 } %t454) store { ptr, i64, i64 } %t454, ptr %a455 call void @finch_str_drop(ptr %a455) - br label %endif4950 -endif4950: + br label %endif4954 +endif4954: %t456 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t456, i64 0) %t457 = load ptr, ptr %a1 %t458 = icmp eq ptr %t457, null - br i1 %t458, label %panic4953, label %ok4954 -panic4953: + br i1 %t458, label %panic4957, label %ok4958 +panic4957: call void @finch_panic(ptr @.str.3113, i64 2234, ptr @.str.3114) unreachable -ok4954: +ok4958: %t459 = getelementptr inbounds %S.gen.Gen, ptr %t457, i32 0, i32 13 %t460 = getelementptr inbounds %S.gen.FnSig, ptr %t459, i32 0, i32 9 %t461 = load i1, ptr %t460 - br i1 %t461, label %then4955, label %else4956 -then4955: + br i1 %t461, label %then4959, label %else4960 +then4959: %t462 = load ptr, ptr %a1 %t463 = load ptr, ptr %a1 %t464 = load ptr, ptr %a1 %t465 = icmp eq ptr %t464, null - br i1 %t465, label %panic4958, label %ok4959 -panic4958: + br i1 %t465, label %panic4962, label %ok4963 +panic4962: call void @finch_panic(ptr @.str.3116, i64 2235, ptr @.str.3117) unreachable -ok4959: +ok4963: %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 13 %t467 = load %S.gen.FnSig, ptr %t466 %t468 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t463, %S.gen.FnSig %t467) @@ -50593,19 +50619,19 @@ ok4959: call void @finch.gen.emit(ptr %t462, { ptr, i64, i64 } %t478) store { ptr, i64, i64 } %t478, ptr %a479 call void @finch_str_drop(ptr %a479) - br label %endif4957 -else4956: + br label %endif4961 +else4960: %t480 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t480, { ptr, i64, i64 } { ptr @.str.3119, i64 8, i64 0 }) - br label %endif4957 -endif4957: - br label %endif4945 -endif4945: + br label %endif4961 +endif4961: + br label %endif4949 +endif4949: store { ptr, i64, i64 } { ptr @.str.3120, i64 0, i64 0 }, ptr %a481 %t482 = load i64, ptr %a151 %t483 = icmp sge i64 %t482, 0 - br i1 %t483, label %then4960, label %endif4962 -then4960: + br i1 %t483, label %then4964, label %endif4966 +then4964: %t484 = load i64, ptr %a151 call void @finch_str_from_int(ptr %a485, i64 %t484) %t486 = load { ptr, i64, i64 }, ptr %a485 @@ -50619,34 +50645,34 @@ then4960: store { ptr, i64, i64 } %t491, ptr %a481 store { ptr, i64, i64 } %t492, ptr %a493 call void @finch_str_drop(ptr %a493) - br label %endif4962 -endif4962: + br label %endif4966 +endif4966: %t494 = load ptr, ptr %a1 %t495 = icmp eq ptr %t494, null - br i1 %t495, label %panic4963, label %ok4964 -panic4963: + br i1 %t495, label %panic4967, label %ok4968 +panic4967: call void @finch_panic(ptr @.str.3122, i64 2244, ptr @.str.3123) unreachable -ok4964: +ok4968: %t496 = getelementptr inbounds %S.gen.Gen, ptr %t494, i32 0, i32 36 store i64 -1, ptr %t496 %t497 = load ptr, ptr %a1 %t498 = icmp eq ptr %t497, null - br i1 %t498, label %panic4965, label %ok4966 -panic4965: + br i1 %t498, label %panic4969, label %ok4970 +panic4969: call void @finch_panic(ptr @.str.3124, i64 2245, ptr @.str.3125) unreachable -ok4966: +ok4970: %t499 = getelementptr inbounds %S.gen.Gen, ptr %t497, i32 0, i32 3 %t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t499, i32 0, i32 1 %t501 = load ptr, ptr %a1 %t502 = load ptr, ptr %a1 %t503 = icmp eq ptr %t502, null - br i1 %t503, label %panic4967, label %ok4968 -panic4967: + br i1 %t503, label %panic4971, label %ok4972 +panic4971: call void @finch_panic(ptr @.str.3127, i64 2245, ptr @.str.3128) unreachable -ok4968: +ok4972: %t504 = getelementptr inbounds %S.gen.Gen, ptr %t502, i32 0, i32 13 %t505 = load %S.gen.FnSig, ptr %t504 %t506 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t501, %S.gen.FnSig %t505) @@ -50664,11 +50690,11 @@ ok4968: %t516 = load { ptr, i64, i64 }, ptr %a512 %t517 = load ptr, ptr %a1 %t518 = icmp eq ptr %t517, null - br i1 %t518, label %panic4969, label %ok4970 -panic4969: + br i1 %t518, label %panic4973, label %ok4974 +panic4973: call void @finch_panic(ptr @.str.3130, i64 2245, ptr @.str.3131) unreachable -ok4970: +ok4974: %t519 = getelementptr inbounds %S.gen.Gen, ptr %t517, i32 0, i32 13 %t520 = getelementptr inbounds %S.gen.FnSig, ptr %t519, i32 0, i32 11 %t521 = load { ptr, i64, i64 }, ptr %t520 @@ -50717,11 +50743,11 @@ ok4970: %t557 = load { ptr, i64, i64 }, ptr %a553 %t558 = load ptr, ptr %a1 %t559 = icmp eq ptr %t558, null - br i1 %t559, label %panic4971, label %ok4972 -panic4971: + br i1 %t559, label %panic4975, label %ok4976 +panic4975: call void @finch_panic(ptr @.str.3136, i64 2246, ptr @.str.3137) unreachable -ok4972: +ok4976: %t560 = getelementptr inbounds %S.gen.Gen, ptr %t558, i32 0, i32 5 %t561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t560, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3138, i64 1, i64 0 }, ptr %a562 @@ -50743,11 +50769,11 @@ ok4972: %t575 = load { ptr, i64, i64 }, ptr %a571 %t576 = load ptr, ptr %a1 %t577 = icmp eq ptr %t576, null - br i1 %t577, label %panic4973, label %ok4974 -panic4973: + br i1 %t577, label %panic4977, label %ok4978 +panic4977: call void @finch_panic(ptr @.str.3140, i64 2246, ptr @.str.3141) unreachable -ok4974: +ok4978: %t578 = getelementptr inbounds %S.gen.Gen, ptr %t576, i32 0, i32 4 %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t578, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3142, i64 1, i64 0 }, ptr %a580 @@ -50793,59 +50819,59 @@ entry: store %S.ast.Node %p1, ptr %a2 store i1 %p2, ptr %a3 %t4 = load i1, ptr %a3 - br i1 %t4, label %then4975, label %endif4977 -then4975: + br i1 %t4, label %then4979, label %endif4981 +then4979: %t5 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t5) - br label %endif4977 -endif4977: + br label %endif4981 +endif4981: %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 store i64 0, ptr %a7 - br label %each.cond4978 -each.cond4978: + br label %each.cond4982 +each.cond4982: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load i64, ptr %a7 %t11 = icmp slt i64 %t10, %t9 - br i1 %t11, label %each.body4979, label %each.end4981 -each.body4979: + br i1 %t11, label %each.body4983, label %each.end4985 +each.body4983: %t12 = load ptr, ptr %t6 %t13 = getelementptr inbounds %S.ast.Node, ptr %t12, i64 %t10 %t14 = load %S.ast.Node, ptr %t13 store %S.ast.Node %t14, ptr %a15 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic4982, label %ok4983 -panic4982: + br i1 %t17, label %panic4986, label %ok4987 +panic4986: call void @finch_panic(ptr @.str.3144, i64 2256, ptr @.str.3145) unreachable -ok4983: +ok4987: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 %t19 = load i1, ptr %t18 - br i1 %t19, label %then4984, label %endif4986 -then4984: + br i1 %t19, label %then4988, label %endif4990 +then4988: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a15 call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } { ptr @.str.3146, i64 66, i64 0 }) - br label %endif4986 -endif4986: + br label %endif4990 +endif4990: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Node, ptr %a15 call void @finch.gen.stmt(ptr %t22, %S.ast.Node %t23) - br label %each.step4980 -each.step4980: + br label %each.step4984 +each.step4984: %t24 = load i64, ptr %a7 %t25 = add i64 %t24, 1 store i64 %t25, ptr %a7 - br label %each.cond4978 -each.end4981: + br label %each.cond4982 +each.end4985: %t26 = load i1, ptr %a3 - br i1 %t26, label %then4987, label %endif4989 -then4987: + br i1 %t26, label %then4991, label %endif4993 +then4991: %t27 = load ptr, ptr %a1 call void @finch.gen.endScope(ptr %t27) - br label %endif4989 -endif4989: + br label %endif4993 +endif4993: ret void } @@ -50937,22 +50963,22 @@ entry: %t4 = load i64, ptr %t3 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic4990, label %ok4991 -panic4990: + br i1 %t6, label %panic4994, label %ok4995 +panic4994: call void @finch_panic(ptr @.str.3147, i64 2267, ptr @.str.3148) unreachable -ok4991: +ok4995: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 37 store i64 %t4, ptr %t7 %t8 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic4992, label %ok4993 -panic4992: + br i1 %t11, label %panic4996, label %ok4997 +panic4996: call void @finch_panic(ptr @.str.3149, i64 2268, ptr @.str.3150) unreachable -ok4993: +ok4997: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 38 store i64 %t9, ptr %t12 %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 @@ -50966,53 +50992,53 @@ ok4993: store { ptr, i64, i64 } { ptr @.str.3151, i64 5, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br i1 %t23, label %then4994, label %else4995 -then4994: + br i1 %t23, label %then4998, label %else4999 +then4998: %t24 = load ptr, ptr %a1 %t25 = load %S.ast.Node, ptr %a2 call void @finch.gen.block(ptr %t24, %S.ast.Node %t25, i1 true) - br label %endif4996 -else4995: + br label %endif5000 +else4999: %t26 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.3152, i64 4, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br i1 %t30, label %then4997, label %else4998 -then4997: + br i1 %t30, label %then5001, label %else5002 +then5001: %t31 = load ptr, ptr %a1 %t32 = load %S.ast.Node, ptr %a2 call void @finch.gen.declStmt(ptr %t31, %S.ast.Node %t32) - br label %endif4999 -else4998: + br label %endif5003 +else5002: %t33 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } { ptr @.str.3153, i64 6, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %then5000, label %else5001 -then5000: + br i1 %t37, label %then5004, label %else5005 +then5004: %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Node, ptr %a2 call void @finch.gen.assignStmt(ptr %t38, %S.ast.Node %t39) - br label %endif5002 -else5001: + br label %endif5006 +else5005: %t40 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.3154, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %then5003, label %else5004 -then5003: + br i1 %t44, label %then5007, label %else5008 +then5007: %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 0, %t47 - br i1 %t48, label %range5006, label %inrange5007 -range5006: + br i1 %t48, label %range5010, label %inrange5011 +range5010: call void @finch_panic_index(ptr @.str.3155, i64 2277, i64 0, i64 %t47) unreachable -inrange5007: +inrange5011: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 0 %t51 = getelementptr inbounds %S.ast.Node, ptr %t50, i32 0, i32 0 @@ -51021,19 +51047,19 @@ inrange5007: store { ptr, i64, i64 } { ptr @.str.3156, i64 2, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %then5008, label %else5009 -then5008: + br i1 %t56, label %then5012, label %else5013 +then5012: %t57 = load ptr, ptr %a1 %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 0, %t61 - br i1 %t62, label %range5011, label %inrange5012 -range5011: + br i1 %t62, label %range5015, label %inrange5016 +range5015: call void @finch_panic_index(ptr @.str.3157, i64 2278, i64 0, i64 %t61) unreachable -inrange5012: +inrange5016: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 0 %t65 = load %S.ast.Node, ptr %t64 @@ -51041,19 +51067,19 @@ inrange5012: call void @finch.gen.release(ptr %t57, %S.gen.Val %t66) store %S.gen.Val %t66, ptr %a67 call void @finch.drop.S_gen_Val(ptr %a67) - br label %endif5010 -else5009: + br label %endif5014 +else5013: %t68 = load ptr, ptr %a1 %t69 = load ptr, ptr %a1 %t70 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t71 = load { ptr, i64, i64 }, ptr %t70 %t72 = extractvalue { ptr, i64, i64 } %t71, 1 %t73 = icmp uge i64 0, %t72 - br i1 %t73, label %range5013, label %inrange5014 -range5013: + br i1 %t73, label %range5017, label %inrange5018 +range5017: call void @finch_panic_index(ptr @.str.3158, i64 2280, i64 0, i64 %t72) unreachable -inrange5014: +inrange5018: %t74 = extractvalue { ptr, i64, i64 } %t71, 0 %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 0 %t76 = load %S.ast.Node, ptr %t75 @@ -51061,115 +51087,115 @@ inrange5014: call void @finch.gen.release(ptr %t68, %S.gen.Val %t77) store %S.gen.Val %t77, ptr %a78 call void @finch.drop.S_gen_Val(ptr %a78) - br label %endif5010 -endif5010: - br label %endif5005 -else5004: + br label %endif5014 +endif5014: + br label %endif5009 +else5008: %t79 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t79, ptr %a80 store { ptr, i64, i64 } { ptr @.str.3159, i64 5, i64 0 }, ptr %a81 %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) %t83 = icmp ne i32 %t82, 0 - br i1 %t83, label %then5015, label %else5016 -then5015: + br i1 %t83, label %then5019, label %else5020 +then5019: %t84 = load ptr, ptr %a1 %t85 = load %S.ast.Node, ptr %a2 %t86 = call %S.gen.Val @finch.gen.matchGen(ptr %t84, %S.ast.Node %t85, i1 false) store %S.gen.Val %t86, ptr %a87 call void @finch.drop.S_gen_Val(ptr %a87) - br label %endif5017 -else5016: + br label %endif5021 +else5020: %t88 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t88, ptr %a89 store { ptr, i64, i64 } { ptr @.str.3160, i64 2, i64 0 }, ptr %a90 %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) %t92 = icmp ne i32 %t91, 0 - br i1 %t92, label %then5018, label %else5019 -then5018: + br i1 %t92, label %then5022, label %else5023 +then5022: %t93 = load ptr, ptr %a1 %t94 = load %S.ast.Node, ptr %a2 call void @finch.gen.ifStmt(ptr %t93, %S.ast.Node %t94) - br label %endif5020 -else5019: + br label %endif5024 +else5023: %t95 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.3161, i64 5, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 - br i1 %t99, label %then5021, label %else5022 -then5021: + br i1 %t99, label %then5025, label %else5026 +then5025: %t100 = load ptr, ptr %a1 %t101 = load %S.ast.Node, ptr %a2 call void @finch.gen.whileStmt(ptr %t100, %S.ast.Node %t101) - br label %endif5023 -else5022: + br label %endif5027 +else5026: %t102 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t102, ptr %a103 store { ptr, i64, i64 } { ptr @.str.3162, i64 3, i64 0 }, ptr %a104 %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) %t106 = icmp ne i32 %t105, 0 - br i1 %t106, label %then5024, label %else5025 -then5024: + br i1 %t106, label %then5028, label %else5029 +then5028: %t107 = load ptr, ptr %a1 %t108 = load %S.ast.Node, ptr %a2 call void @finch.gen.forStmt(ptr %t107, %S.ast.Node %t108) - br label %endif5026 -else5025: + br label %endif5030 +else5029: %t109 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t109, ptr %a110 store { ptr, i64, i64 } { ptr @.str.3163, i64 4, i64 0 }, ptr %a111 %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) %t113 = icmp ne i32 %t112, 0 - br i1 %t113, label %then5027, label %else5028 -then5027: + br i1 %t113, label %then5031, label %else5032 +then5031: %t114 = load ptr, ptr %a1 %t115 = load %S.ast.Node, ptr %a2 call void @finch.gen.eachStmt(ptr %t114, %S.ast.Node %t115) - br label %endif5029 -else5028: + br label %endif5033 +else5032: %t116 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t116, ptr %a117 store { ptr, i64, i64 } { ptr @.str.3164, i64 6, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 - br i1 %t120, label %then5030, label %else5031 -then5030: + br i1 %t120, label %then5034, label %else5035 +then5034: %t121 = load ptr, ptr %a1 %t122 = load %S.ast.Node, ptr %a2 call void @finch.gen.returnStmt(ptr %t121, %S.ast.Node %t122) - br label %endif5032 -else5031: + br label %endif5036 +else5035: %t123 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.3165, i64 5, i64 0 }, ptr %a125 %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) %t127 = icmp ne i32 %t126, 0 - br i1 %t127, label %then5033, label %else5034 -then5033: + br i1 %t127, label %then5037, label %else5038 +then5037: %t128 = load ptr, ptr %a1 %t129 = icmp eq ptr %t128, null - br i1 %t129, label %panic5036, label %ok5037 -panic5036: + br i1 %t129, label %panic5040, label %ok5041 +panic5040: call void @finch_panic(ptr @.str.3166, i64 2295, ptr @.str.3167) unreachable -ok5037: +ok5041: %t130 = getelementptr inbounds %S.gen.Gen, ptr %t128, i32 0, i32 46 %t131 = load i64, ptr %t130 %t132 = icmp sgt i64 %t131, 0 - br i1 %t132, label %then5038, label %endif5040 -then5038: + br i1 %t132, label %then5042, label %endif5044 +then5042: %t133 = load ptr, ptr %a1 %t134 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } { ptr @.str.3168, i64 33, i64 0 }) - br label %endif5040 -endif5040: + br label %endif5044 +endif5044: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null - br i1 %t136, label %panic5041, label %ok5042 -panic5041: + br i1 %t136, label %panic5045, label %ok5046 +panic5045: call void @finch_panic(ptr @.str.3169, i64 2298, ptr @.str.3170) unreachable -ok5042: +ok5046: %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 10 %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t139 = load i64, ptr %t138 @@ -51177,21 +51203,21 @@ ok5042: store i64 %t140, ptr %a141 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic5043, label %ok5044 -panic5043: + br i1 %t143, label %panic5047, label %ok5048 +panic5047: call void @finch_panic(ptr @.str.3171, i64 2299, ptr @.str.3172) unreachable -ok5044: +ok5048: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 10 %t145 = load i64, ptr %a141 %t146 = load { ptr, i64, i64 }, ptr %t144 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 %t145, %t147 - br i1 %t148, label %range5045, label %inrange5046 -range5045: + br i1 %t148, label %range5049, label %inrange5050 +range5049: call void @finch_panic_index(ptr @.str.3173, i64 2299, i64 %t145, i64 %t147) unreachable -inrange5046: +inrange5050: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds %S.gen.Scope, ptr %t149, i64 %t145 %t151 = getelementptr inbounds %S.gen.Scope, ptr %t150, i32 0, i32 3 @@ -51199,21 +51225,21 @@ inrange5046: %t153 = insertvalue %S.gen.Cleanup zeroinitializer, i1 true, 0 %t154 = load ptr, ptr %a1 %t155 = icmp eq ptr %t154, null - br i1 %t155, label %panic5047, label %ok5048 -panic5047: + br i1 %t155, label %panic5051, label %ok5052 +panic5051: call void @finch_panic(ptr @.str.3174, i64 2299, ptr @.str.3175) unreachable -ok5048: +ok5052: %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 10 %t157 = load i64, ptr %a141 %t158 = load { ptr, i64, i64 }, ptr %t156 %t159 = extractvalue { ptr, i64, i64 } %t158, 1 %t160 = icmp uge i64 %t157, %t159 - br i1 %t160, label %range5049, label %inrange5050 -range5049: + br i1 %t160, label %range5053, label %inrange5054 +range5053: call void @finch_panic_index(ptr @.str.3176, i64 2299, i64 %t157, i64 %t159) unreachable -inrange5050: +inrange5054: %t161 = extractvalue { ptr, i64, i64 } %t158, 0 %t162 = getelementptr inbounds %S.gen.Scope, ptr %t161, i64 %t157 %t163 = getelementptr inbounds %S.gen.Scope, ptr %t162, i32 0, i32 1 @@ -51229,21 +51255,21 @@ inrange5050: store i64 %t168, ptr %t152 %t171 = load ptr, ptr %a1 %t172 = icmp eq ptr %t171, null - br i1 %t172, label %panic5051, label %ok5052 -panic5051: + br i1 %t172, label %panic5055, label %ok5056 +panic5055: call void @finch_panic(ptr @.str.3177, i64 2300, ptr @.str.3178) unreachable -ok5052: +ok5056: %t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 10 %t174 = load i64, ptr %a141 %t175 = load { ptr, i64, i64 }, ptr %t173 %t176 = extractvalue { ptr, i64, i64 } %t175, 1 %t177 = icmp uge i64 %t174, %t176 - br i1 %t177, label %range5053, label %inrange5054 -range5053: + br i1 %t177, label %range5057, label %inrange5058 +range5057: call void @finch_panic_index(ptr @.str.3179, i64 2300, i64 %t174, i64 %t176) unreachable -inrange5054: +inrange5058: %t178 = extractvalue { ptr, i64, i64 } %t175, 0 %t179 = getelementptr inbounds %S.gen.Scope, ptr %t178, i64 %t174 %t180 = getelementptr inbounds %S.gen.Scope, ptr %t179, i32 0, i32 1 @@ -51252,11 +51278,11 @@ inrange5054: %t183 = load { ptr, i64, i64 }, ptr %t182 %t184 = extractvalue { ptr, i64, i64 } %t183, 1 %t185 = icmp uge i64 0, %t184 - br i1 %t185, label %range5055, label %inrange5056 -range5055: + br i1 %t185, label %range5059, label %inrange5060 +range5059: call void @finch_panic_index(ptr @.str.3180, i64 2300, i64 0, i64 %t184) unreachable -inrange5056: +inrange5060: %t186 = extractvalue { ptr, i64, i64 } %t183, 0 %t187 = getelementptr inbounds %S.ast.Node, ptr %t186, i64 0 %t188 = load %S.ast.Node, ptr %t187 @@ -51272,32 +51298,32 @@ inrange5056: store i64 %t193, ptr %t181 %t196 = load ptr, ptr %a1 %t197 = icmp eq ptr %t196, null - br i1 %t197, label %panic5057, label %ok5058 -panic5057: + br i1 %t197, label %panic5061, label %ok5062 +panic5061: call void @finch_panic(ptr @.str.3181, i64 2301, ptr @.str.3182) unreachable -ok5058: +ok5062: %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 10 %t199 = load i64, ptr %a141 %t200 = load { ptr, i64, i64 }, ptr %t198 %t201 = extractvalue { ptr, i64, i64 } %t200, 1 %t202 = icmp uge i64 %t199, %t201 - br i1 %t202, label %range5059, label %inrange5060 -range5059: + br i1 %t202, label %range5063, label %inrange5064 +range5063: call void @finch_panic_index(ptr @.str.3183, i64 2301, i64 %t199, i64 %t201) unreachable -inrange5060: +inrange5064: %t203 = extractvalue { ptr, i64, i64 } %t200, 0 %t204 = getelementptr inbounds %S.gen.Scope, ptr %t203, i64 %t199 %t205 = getelementptr inbounds %S.gen.Scope, ptr %t204, i32 0, i32 2 %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i32 0, i32 1 %t207 = load ptr, ptr %a1 %t208 = icmp eq ptr %t207, null - br i1 %t208, label %panic5061, label %ok5062 -panic5061: + br i1 %t208, label %panic5065, label %ok5066 +panic5065: call void @finch_panic(ptr @.str.3184, i64 2301, ptr @.str.3185) unreachable -ok5062: +ok5066: %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 25 %t210 = load i64, ptr %t209 %t211 = load i64, ptr %t206 @@ -51307,41 +51333,41 @@ ok5062: %t214 = getelementptr inbounds i64, ptr %t213, i64 %t211 store i64 %t210, ptr %t214 store i64 %t212, ptr %t206 - br label %endif5035 -else5034: + br label %endif5039 +else5038: %t215 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t215, ptr %a216 store { ptr, i64, i64 } { ptr @.str.3186, i64 5, i64 0 }, ptr %a217 %t218 = call i32 @finch_str_eq(ptr %a216, ptr %a217) %t219 = icmp ne i32 %t218, 0 - br label %logic.from5063 -logic.from5063: - br i1 %t219, label %logic.end5065, label %logic.rhs5064 -logic.rhs5064: + br label %logic.from5067 +logic.from5067: + br i1 %t219, label %logic.end5069, label %logic.rhs5068 +logic.rhs5068: %t220 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t220, ptr %a221 store { ptr, i64, i64 } { ptr @.str.3187, i64 8, i64 0 }, ptr %a222 %t223 = call i32 @finch_str_eq(ptr %a221, ptr %a222) %t224 = icmp ne i32 %t223, 0 - br label %logic.rend5066 -logic.rend5066: - br label %logic.end5065 -logic.end5065: - %t225 = phi i1 [ true, %logic.from5063 ], [ %t224, %logic.rend5066 ] - br i1 %t225, label %then5067, label %else5068 -then5067: + br label %logic.rend5070 +logic.rend5070: + br label %logic.end5069 +logic.end5069: + %t225 = phi i1 [ true, %logic.from5067 ], [ %t224, %logic.rend5070 ] + br i1 %t225, label %then5071, label %else5072 +then5071: %t226 = load ptr, ptr %a1 %t227 = icmp eq ptr %t226, null - br i1 %t227, label %panic5070, label %ok5071 -panic5070: + br i1 %t227, label %panic5074, label %ok5075 +panic5074: call void @finch_panic(ptr @.str.3188, i64 2303, ptr @.str.3189) unreachable -ok5071: +ok5075: %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 46 %t229 = load i64, ptr %t228 %t230 = icmp sgt i64 %t229, 0 - br i1 %t230, label %then5072, label %endif5074 -then5072: + br i1 %t230, label %then5076, label %endif5078 +then5076: %t231 = load ptr, ptr %a1 %t232 = load %S.ast.Node, ptr %a2 %t233 = load { ptr, i64, i64 }, ptr %a18 @@ -51352,21 +51378,21 @@ then5072: call void @finch.gen.fail(ptr %t231, %S.ast.Node %t232, { ptr, i64, i64 } %t237) store { ptr, i64, i64 } %t237, ptr %a238 call void @finch_str_drop(ptr %a238) - br label %endif5074 -endif5074: + br label %endif5078 +endif5078: %t239 = load ptr, ptr %a1 %t240 = icmp eq ptr %t239, null - br i1 %t240, label %panic5075, label %ok5076 -panic5075: + br i1 %t240, label %panic5079, label %ok5080 +panic5079: call void @finch_panic(ptr @.str.3191, i64 2306, ptr @.str.3192) unreachable -ok5076: +ok5080: %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 12 %t242 = getelementptr inbounds { ptr, i64, i64 }, ptr %t241, i32 0, i32 1 %t243 = load i64, ptr %t242 %t244 = icmp eq i64 %t243, 0 - br i1 %t244, label %then5077, label %endif5079 -then5077: + br i1 %t244, label %then5081, label %endif5083 +then5081: %t245 = load ptr, ptr %a1 %t246 = load %S.ast.Node, ptr %a2 %t247 = load { ptr, i64, i64 }, ptr %a18 @@ -51377,23 +51403,23 @@ then5077: call void @finch.gen.fail(ptr %t245, %S.ast.Node %t246, { ptr, i64, i64 } %t251) store { ptr, i64, i64 } %t251, ptr %a252 call void @finch_str_drop(ptr %a252) - br label %endif5079 -endif5079: + br label %endif5083 +endif5083: %t253 = load ptr, ptr %a1 %t254 = icmp eq ptr %t253, null - br i1 %t254, label %panic5080, label %ok5081 -panic5080: + br i1 %t254, label %panic5084, label %ok5085 +panic5084: call void @finch_panic(ptr @.str.3194, i64 2309, ptr @.str.3195) unreachable -ok5081: +ok5085: %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 12 %t256 = load ptr, ptr %a1 %t257 = icmp eq ptr %t256, null - br i1 %t257, label %panic5082, label %ok5083 -panic5082: + br i1 %t257, label %panic5086, label %ok5087 +panic5086: call void @finch_panic(ptr @.str.3196, i64 2309, ptr @.str.3197) unreachable -ok5083: +ok5087: %t258 = getelementptr inbounds %S.gen.Gen, ptr %t256, i32 0, i32 12 %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 %t260 = load i64, ptr %t259 @@ -51401,11 +51427,11 @@ ok5083: %t262 = load { ptr, i64, i64 }, ptr %t255 %t263 = extractvalue { ptr, i64, i64 } %t262, 1 %t264 = icmp uge i64 %t261, %t263 - br i1 %t264, label %range5084, label %inrange5085 -range5084: + br i1 %t264, label %range5088, label %inrange5089 +range5088: call void @finch_panic_index(ptr @.str.3198, i64 2309, i64 %t261, i64 %t263) unreachable -inrange5085: +inrange5089: %t265 = extractvalue { ptr, i64, i64 } %t262, 0 %t266 = getelementptr inbounds %S.gen.Loop, ptr %t265, i64 %t261 %t267 = load %S.gen.Loop, ptr %t266 @@ -51426,23 +51452,23 @@ inrange5085: store { ptr, i64, i64 } { ptr @.str.3199, i64 5, i64 0 }, ptr %a280 %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) %t282 = icmp ne i32 %t281, 0 - br i1 %t282, label %then5086, label %else5087 -then5086: + br i1 %t282, label %then5090, label %else5091 +then5090: %t283 = load ptr, ptr %a1 %t284 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 1 %t285 = load { ptr, i64, i64 }, ptr %t284 call void @finch.gen.br(ptr %t283, { ptr, i64, i64 } %t285) - br label %endif5088 -else5087: + br label %endif5092 +else5091: %t286 = load ptr, ptr %a1 %t287 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 0 %t288 = load { ptr, i64, i64 }, ptr %t287 call void @finch.gen.br(ptr %t286, { ptr, i64, i64 } %t288) - br label %endif5088 -endif5088: + br label %endif5092 +endif5092: call void @finch.drop.S_gen_Loop(ptr %a271) - br label %endif5069 -else5068: + br label %endif5073 +else5072: %t289 = load ptr, ptr %a1 %t290 = load %S.ast.Node, ptr %a2 %t291 = load { ptr, i64, i64 }, ptr %a18 @@ -51453,30 +51479,30 @@ else5068: call void @finch.gen.fail(ptr %t289, %S.ast.Node %t290, { ptr, i64, i64 } %t295) store { ptr, i64, i64 } %t295, ptr %a296 call void @finch_str_drop(ptr %a296) - br label %endif5069 -endif5069: - br label %endif5035 -endif5035: - br label %endif5032 -endif5032: - br label %endif5029 -endif5029: - br label %endif5026 -endif5026: - br label %endif5023 -endif5023: - br label %endif5020 -endif5020: - br label %endif5017 -endif5017: - br label %endif5005 -endif5005: - br label %endif5002 -endif5002: - br label %endif4999 -endif4999: - br label %endif4996 -endif4996: + br label %endif5073 +endif5073: + br label %endif5039 +endif5039: + br label %endif5036 +endif5036: + br label %endif5033 +endif5033: + br label %endif5030 +endif5030: + br label %endif5027 +endif5027: + br label %endif5024 +endif5024: + br label %endif5021 +endif5021: + br label %endif5009 +endif5009: + br label %endif5006 +endif5006: + br label %endif5003 +endif5003: + br label %endif5000 +endif5000: call void @finch_str_drop(ptr %a18) ret void } @@ -51526,18 +51552,18 @@ entry: %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 %t4 = load i1, ptr %t3 %t5 = xor i1 %t4, true - br i1 %t5, label %then5089, label %endif5091 -then5089: + br i1 %t5, label %then5093, label %endif5095 +then5093: %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t8 = load { ptr, i64, i64 }, ptr %t7 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 0, %t9 - br i1 %t10, label %range5092, label %inrange5093 -range5092: + br i1 %t10, label %range5096, label %inrange5097 +range5096: call void @finch_panic_index(ptr @.str.3201, i64 2324, i64 0, i64 %t9) unreachable -inrange5093: +inrange5097: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.ast.Node, ptr %t11, i64 0 %t13 = load %S.ast.Node, ptr %t12 @@ -51550,24 +51576,24 @@ inrange5093: store { ptr, i64, i64 } { ptr @.str.3202, i64 4, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br i1 %t22, label %then5094, label %endif5096 -then5094: + br i1 %t22, label %then5098, label %endif5100 +then5098: %t23 = load ptr, ptr %a1 %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t25 = load { ptr, i64, i64 }, ptr %t24 %t26 = extractvalue { ptr, i64, i64 } %t25, 1 %t27 = icmp uge i64 0, %t26 - br i1 %t27, label %range5097, label %inrange5098 -range5097: + br i1 %t27, label %range5101, label %inrange5102 +range5101: call void @finch_panic_index(ptr @.str.3203, i64 2326, i64 0, i64 %t26) unreachable -inrange5098: +inrange5102: %t28 = extractvalue { ptr, i64, i64 } %t25, 0 %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 %t30 = load %S.ast.Node, ptr %t29 call void @finch.gen.fail(ptr %t23, %S.ast.Node %t30, { ptr, i64, i64 } { ptr @.str.3204, i64 46, i64 0 }) - br label %endif5096 -endif5096: + br label %endif5100 +endif5100: %t31 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 @@ -51575,18 +51601,18 @@ endif5096: store { ptr, i64, i64 } { ptr @.str.3205, i64 4, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %then5099, label %endif5101 -then5099: + br i1 %t37, label %then5103, label %endif5105 +then5103: %t38 = load ptr, ptr %a1 %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = extractvalue { ptr, i64, i64 } %t40, 1 %t42 = icmp uge i64 0, %t41 - br i1 %t42, label %range5102, label %inrange5103 -range5102: + br i1 %t42, label %range5106, label %inrange5107 +range5106: call void @finch_panic_index(ptr @.str.3206, i64 2329, i64 0, i64 %t41) unreachable -inrange5103: +inrange5107: %t43 = extractvalue { ptr, i64, i64 } %t40, 0 %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 0 %t45 = load %S.ast.Node, ptr %t44 @@ -51605,8 +51631,8 @@ inrange5103: call void @finch.gen.fail(ptr %t38, %S.ast.Node %t45, { ptr, i64, i64 } %t56) store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_drop(ptr %a57) - br label %endif5101 -endif5101: + br label %endif5105 +endif5105: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Node, ptr %a2 %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -51623,7 +51649,7 @@ endif5101: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_gen_Val(ptr %a15) ret void -endif5091: +endif5095: %t70 = load ptr, ptr %a1 %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t72 = load %S.ast.Type, ptr %t71 @@ -51634,28 +51660,28 @@ endif5091: %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 %t78 = load i64, ptr %t77 %t79 = icmp eq i64 %t78, 0 - br i1 %t79, label %then5104, label %endif5106 -then5104: + br i1 %t79, label %then5108, label %endif5110 +then5108: %t80 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 0 %t81 = load { ptr, i64, i64 }, ptr %t80 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.3209, i64 6, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br label %logic.from5107 -logic.from5107: - br i1 %t85, label %logic.rhs5108, label %logic.end5109 -logic.rhs5108: + br label %logic.from5111 +logic.from5111: + br i1 %t85, label %logic.rhs5112, label %logic.end5113 +logic.rhs5112: %t86 = load ptr, ptr %a1 %t87 = load %S.ast.Type, ptr %a75 %t88 = call i1 @finch.gen.hasDefaults(ptr %t86, %S.ast.Type %t87) - br label %logic.rend5110 -logic.rend5110: - br label %logic.end5109 -logic.end5109: - %t89 = phi i1 [ false, %logic.from5107 ], [ %t88, %logic.rend5110 ] - br i1 %t89, label %then5111, label %endif5113 -then5111: + br label %logic.rend5114 +logic.rend5114: + br label %logic.end5113 +logic.end5113: + %t89 = phi i1 [ false, %logic.from5111 ], [ %t88, %logic.rend5114 ] + br i1 %t89, label %then5115, label %endif5117 +then5115: store { ptr, i64, i64 } zeroinitializer, ptr %a90 store { ptr, i64, i64 } zeroinitializer, ptr %a91 %t92 = load ptr, ptr %a1 @@ -51685,7 +51711,7 @@ then5111: call void @finch.drop.arr_S_ast_Node(ptr %a90) call void @finch.drop.S_ast_Type(ptr %a75) ret void -endif5113: +endif5117: %t113 = load ptr, ptr %a1 %t114 = load %S.ast.Node, ptr %a2 %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -51700,18 +51726,18 @@ endif5113: call void @finch_str_drop(ptr %a122) call void @finch.drop.S_ast_Type(ptr %a75) ret void -endif5106: +endif5110: %t123 = load ptr, ptr %a1 %t124 = load ptr, ptr %a1 %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t126 = load { ptr, i64, i64 }, ptr %t125 %t127 = extractvalue { ptr, i64, i64 } %t126, 1 %t128 = icmp uge i64 0, %t127 - br i1 %t128, label %range5114, label %inrange5115 -range5114: + br i1 %t128, label %range5118, label %inrange5119 +range5118: call void @finch_panic_index(ptr @.str.3210, i64 2346, i64 0, i64 %t127) unreachable -inrange5115: +inrange5119: %t129 = extractvalue { ptr, i64, i64 } %t126, 0 %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 0 %t131 = load %S.ast.Node, ptr %t130 @@ -51722,11 +51748,11 @@ inrange5115: %t136 = load { ptr, i64, i64 }, ptr %t135 %t137 = extractvalue { ptr, i64, i64 } %t136, 1 %t138 = icmp uge i64 0, %t137 - br i1 %t138, label %range5116, label %inrange5117 -range5116: + br i1 %t138, label %range5120, label %inrange5121 +range5120: call void @finch_panic_index(ptr @.str.3211, i64 2346, i64 0, i64 %t137) unreachable -inrange5117: +inrange5121: %t139 = extractvalue { ptr, i64, i64 } %t136, 0 %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 0 %t141 = load %S.ast.Node, ptr %t140 @@ -51779,11 +51805,11 @@ entry: store %S.ast.Type %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic5118, label %ok5119 -panic5118: + br i1 %t4, label %panic5122, label %ok5123 +panic5122: call void @finch_panic(ptr @.str.3214, i64 2351, ptr @.str.3215) unreachable -ok5119: +ok5123: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 %t6 = load ptr, ptr %a1 %t7 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -51794,11 +51820,11 @@ ok5119: %t12 = load { ptr, i64, i64 }, ptr %t5 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 - br i1 %t14, label %range5120, label %inrange5121 -range5120: + br i1 %t14, label %range5124, label %inrange5125 +range5124: call void @finch_panic_index(ptr @.str.3216, i64 2351, i64 %t11, i64 %t13) unreachable -inrange5121: +inrange5125: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i64 %t11 %t17 = load %S.gen.StructDef, ptr %t16 @@ -51808,29 +51834,29 @@ inrange5121: store %S.gen.StructDef %t20, ptr %a21 %t22 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 2 %t23 = load i1, ptr %t22 - br i1 %t23, label %then5122, label %endif5124 -then5122: + br i1 %t23, label %then5126, label %endif5128 +then5126: call void @finch.drop.S_gen_StructDef(ptr %a21) ret i1 false -endif5124: +endif5128: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic5125, label %ok5126 -panic5125: + br i1 %t25, label %panic5129, label %ok5130 +panic5129: call void @finch_panic(ptr @.str.3217, i64 2355, ptr @.str.3218) unreachable -ok5126: +ok5130: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 13 %t28 = load i64, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %t26 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 - br i1 %t31, label %range5127, label %inrange5128 -range5127: + br i1 %t31, label %range5131, label %inrange5132 +range5131: call void @finch_panic_index(ptr @.str.3219, i64 2355, i64 %t28, i64 %t30) unreachable -inrange5128: +inrange5132: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 @@ -51839,23 +51865,23 @@ inrange5128: %t37 = load { ptr, i64, i64 }, ptr %t34 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range5129, label %inrange5130 -range5129: + br i1 %t39, label %range5133, label %inrange5134 +range5133: call void @finch_panic_index(ptr @.str.3220, i64 2355, i64 %t36, i64 %t38) unreachable -inrange5130: +inrange5134: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i32 0, i32 9 store i64 0, ptr %a43 - br label %each.cond5131 -each.cond5131: + br label %each.cond5135 +each.cond5135: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = load i64, ptr %a43 %t47 = icmp slt i64 %t46, %t45 - br i1 %t47, label %each.body5132, label %each.end5134 -each.body5132: + br i1 %t47, label %each.body5136, label %each.end5138 +each.body5136: %t48 = load ptr, ptr %t42 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46 %t50 = load %S.ast.Node, ptr %t49 @@ -51864,18 +51890,18 @@ each.body5132: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sgt i64 %t54, 0 - br i1 %t55, label %then5135, label %endif5137 -then5135: + br i1 %t55, label %then5139, label %endif5141 +then5139: call void @finch.drop.S_gen_StructDef(ptr %a21) ret i1 true -endif5137: - br label %each.step5133 -each.step5133: +endif5141: + br label %each.step5137 +each.step5137: %t56 = load i64, ptr %a43 %t57 = add i64 %t56, 1 store i64 %t57, ptr %a43 - br label %each.cond5131 -each.end5134: + br label %each.cond5135 +each.end5138: call void @finch.drop.S_gen_StructDef(ptr %a21) ret i1 false } @@ -51979,11 +52005,11 @@ entry: %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 - br i1 %t6, label %range5138, label %inrange5139 -range5138: + br i1 %t6, label %range5142, label %inrange5143 +range5142: call void @finch_panic_index(ptr @.str.3221, i64 2364, i64 0, i64 %t5) unreachable -inrange5139: +inrange5143: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 %t9 = load %S.ast.Node, ptr %t8 @@ -51997,31 +52023,31 @@ inrange5139: %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a16, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = icmp sgt i64 %t18, 0 - br i1 %t19, label %then5140, label %endif5142 -then5140: + br i1 %t19, label %then5144, label %endif5146 +then5144: %t20 = load ptr, ptr %a1 %t21 = load { ptr, i64, i64 }, ptr %a16 %t22 = call i64 @finch.gen.lookup(ptr %t20, { ptr, i64, i64 } %t21) store i64 %t22, ptr %a23 %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, 0 - br label %logic.from5143 -logic.from5143: - br i1 %t25, label %logic.rhs5144, label %logic.end5145 -logic.rhs5144: + br label %logic.from5147 +logic.from5147: + br i1 %t25, label %logic.rhs5148, label %logic.end5149 +logic.rhs5148: %t26 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3222, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br label %logic.rend5146 -logic.rend5146: - br label %logic.end5145 -logic.end5145: - %t32 = phi i1 [ false, %logic.from5143 ], [ %t31, %logic.rend5146 ] - br i1 %t32, label %then5147, label %endif5149 -then5147: + br label %logic.rend5150 +logic.rend5150: + br label %logic.end5149 +logic.end5149: + %t32 = phi i1 [ false, %logic.from5147 ], [ %t31, %logic.rend5150 ] + br i1 %t32, label %then5151, label %endif5153 +then5151: %t33 = load ptr, ptr %a1 %t34 = load %S.ast.Node, ptr %a2 %t35 = load { ptr, i64, i64 }, ptr %a16 @@ -52051,27 +52077,27 @@ then5147: call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } %t55) store { ptr, i64, i64 } %t55, ptr %a56 call void @finch_str_drop(ptr %a56) - br label %endif5149 -endif5149: + br label %endif5153 +endif5153: %t57 = load i64, ptr %a23 %t58 = icmp sge i64 %t57, 0 - br label %logic.from5150 -logic.from5150: - br i1 %t58, label %logic.rhs5151, label %logic.end5152 -logic.rhs5151: + br label %logic.from5154 +logic.from5154: + br i1 %t58, label %logic.rhs5155, label %logic.end5156 +logic.rhs5155: %t59 = load ptr, ptr %a1 %t60 = load i64, ptr %a23 %t61 = call %S.gen.Var @finch.gen.varAt(ptr %t59, i64 %t60) %t62 = extractvalue %S.gen.Var %t61, 3 store %S.gen.Var %t61, ptr %a63 call void @finch.drop.S_gen_Var(ptr %a63) - br label %logic.rend5153 -logic.rend5153: - br label %logic.end5152 -logic.end5152: - %t64 = phi i1 [ false, %logic.from5150 ], [ %t62, %logic.rend5153 ] - br i1 %t64, label %then5154, label %endif5156 -then5154: + br label %logic.rend5157 +logic.rend5157: + br label %logic.end5156 +logic.end5156: + %t64 = phi i1 [ false, %logic.from5154 ], [ %t62, %logic.rend5157 ] + br i1 %t64, label %then5158, label %endif5160 +then5158: %t65 = load ptr, ptr %a1 %t66 = load %S.ast.Node, ptr %a2 %t67 = load { ptr, i64, i64 }, ptr %a16 @@ -52088,10 +52114,10 @@ then5154: call void @finch.gen.fail(ptr %t65, %S.ast.Node %t66, { ptr, i64, i64 } %t76) store { ptr, i64, i64 } %t76, ptr %a77 call void @finch_str_drop(ptr %a77) - br label %endif5156 -endif5156: - br label %endif5142 -endif5142: + br label %endif5160 +endif5160: + br label %endif5146 +endif5146: store { ptr, i64, i64 } { ptr @.str.3228, i64 9, i64 0 }, ptr %a78 %t79 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 @@ -52099,8 +52125,8 @@ endif5142: store { ptr, i64, i64 } { ptr @.str.3229, i64 3, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 - br i1 %t84, label %then5157, label %endif5159 -then5157: + br i1 %t84, label %then5161, label %endif5163 +then5161: %t85 = load { ptr, i64, i64 }, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3230, i64 1, i64 0 }, ptr %a87 store { ptr, i64, i64 } %t85, ptr %a88 @@ -52116,16 +52142,16 @@ then5157: store { ptr, i64, i64 } %t94, ptr %a78 store { ptr, i64, i64 } %t95, ptr %a96 call void @finch_str_drop(ptr %a96) - br label %endif5159 -endif5159: + br label %endif5163 +endif5163: %t97 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t98 = load { ptr, i64, i64 }, ptr %t97 store { ptr, i64, i64 } %t98, ptr %a99 store { ptr, i64, i64 } { ptr @.str.3232, i64 1, i64 0 }, ptr %a100 %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) %t102 = icmp ne i32 %t101, 0 - br i1 %t102, label %then5160, label %endif5162 -then5160: + br i1 %t102, label %then5164, label %endif5166 +then5164: %t103 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3233, i64 4, i64 0 }) store %S.ast.Type %t103, ptr %a104 store i1 false, ptr %a105 @@ -52135,16 +52161,16 @@ then5160: store { ptr, i64, i64 } { ptr @.str.3234, i64 3, i64 0 }, ptr %a109 %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) %t111 = icmp ne i32 %t110, 0 - br i1 %t111, label %then5163, label %endif5165 -then5163: + br i1 %t111, label %then5167, label %endif5169 +then5167: %t112 = load ptr, ptr %a1 %t113 = load { ptr, i64, i64 }, ptr %a16 %t114 = call i64 @finch.gen.lookup(ptr %t112, { ptr, i64, i64 } %t113) store i64 %t114, ptr %a115 %t116 = load i64, ptr %a115 %t117 = icmp sge i64 %t116, 0 - br i1 %t117, label %then5166, label %endif5168 -then5166: + br i1 %t117, label %then5170, label %endif5172 +then5170: %t118 = load ptr, ptr %a1 %t119 = load i64, ptr %a115 %t120 = call %S.gen.Var @finch.gen.varAt(ptr %t118, i64 %t119) @@ -52159,24 +52185,24 @@ then5166: store %S.ast.Type %t126, ptr %a127 call void @finch.drop.S_ast_Type(ptr %a127) store i1 true, ptr %a105 - br label %endif5168 -endif5168: - br label %endif5165 -endif5165: + br label %endif5172 +endif5172: + br label %endif5169 +endif5169: store %S.gen.Val zeroinitializer, ptr %a128 %t129 = load i1, ptr %a105 - br i1 %t129, label %then5169, label %else5170 -then5169: + br i1 %t129, label %then5173, label %else5174 +then5173: %t130 = load ptr, ptr %a1 %t131 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t132 = load { ptr, i64, i64 }, ptr %t131 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 1, %t133 - br i1 %t134, label %range5172, label %inrange5173 -range5172: + br i1 %t134, label %range5176, label %inrange5177 +range5176: call void @finch_panic_index(ptr @.str.3235, i64 2392, i64 1, i64 %t133) unreachable -inrange5173: +inrange5177: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 1 %t137 = load %S.ast.Node, ptr %t136 @@ -52186,18 +52212,18 @@ inrange5173: store %S.gen.Val %t139, ptr %a128 store %S.gen.Val %t140, ptr %a141 call void @finch.drop.S_gen_Val(ptr %a141) - br label %endif5171 -else5170: + br label %endif5175 +else5174: %t142 = load ptr, ptr %a1 %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t144 = load { ptr, i64, i64 }, ptr %t143 %t145 = extractvalue { ptr, i64, i64 } %t144, 1 %t146 = icmp uge i64 1, %t145 - br i1 %t146, label %range5174, label %inrange5175 -range5174: + br i1 %t146, label %range5178, label %inrange5179 +range5178: call void @finch_panic_index(ptr @.str.3236, i64 2394, i64 1, i64 %t145) unreachable -inrange5175: +inrange5179: %t147 = extractvalue { ptr, i64, i64 } %t144, 0 %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 1 %t149 = load %S.ast.Node, ptr %t148 @@ -52206,15 +52232,15 @@ inrange5175: store %S.gen.Val %t150, ptr %a128 store %S.gen.Val %t151, ptr %a152 call void @finch.drop.S_gen_Val(ptr %a152) - br label %endif5171 -endif5171: + br label %endif5175 +endif5175: %t153 = load ptr, ptr %a1 %t154 = icmp eq ptr %t153, null - br i1 %t154, label %panic5176, label %ok5177 -panic5176: + br i1 %t154, label %panic5180, label %ok5181 +panic5180: call void @finch_panic(ptr @.str.3237, i64 2396, ptr @.str.3238) unreachable -ok5177: +ok5181: %t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 11 %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i32 0, i32 1 %t157 = load i64, ptr %t156 @@ -52234,11 +52260,11 @@ ok5177: %t170 = load { ptr, i64, i64 }, ptr %t169 %t171 = extractvalue { ptr, i64, i64 } %t170, 1 %t172 = icmp uge i64 1, %t171 - br i1 %t172, label %range5178, label %inrange5179 -range5178: + br i1 %t172, label %range5182, label %inrange5183 +range5182: call void @finch_panic_index(ptr @.str.3239, i64 2399, i64 1, i64 %t171) unreachable -inrange5179: +inrange5183: %t173 = extractvalue { ptr, i64, i64 } %t170, 0 %t174 = getelementptr inbounds %S.ast.Node, ptr %t173, i64 1 %t175 = load %S.ast.Node, ptr %t174 @@ -52256,8 +52282,8 @@ inrange5179: %t185 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 %t186 = load %S.ast.Type, ptr %t185 %t187 = call i1 @finch.gen.owning(ptr %t184, %S.ast.Type %t186) - br i1 %t187, label %then5180, label %else5181 -then5180: + br i1 %t187, label %then5184, label %else5185 +then5184: %t188 = load ptr, ptr %a1 %t189 = load ptr, ptr %a1 %t190 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 @@ -52286,8 +52312,8 @@ then5180: %t210 = load %S.ast.Type, ptr %t209 call void @finch.gen.dropValue(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t210) call void @finch_str_drop(ptr %a197) - br label %endif5182 -else5181: + br label %endif5186 +else5185: %t211 = load ptr, ptr %a1 %t212 = load ptr, ptr %a1 %t213 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 @@ -52299,8 +52325,8 @@ else5181: call void @finch.gen.store(ptr %t211, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t218) store { ptr, i64, i64 } %t215, ptr %a219 call void @finch_str_drop(ptr %a219) - br label %endif5182 -endif5182: + br label %endif5186 +endif5186: %t220 = load ptr, ptr %a1 %t221 = load i64, ptr %a158 call void @finch.gen.heldEnd(ptr %t220, i64 %t221) @@ -52312,17 +52338,17 @@ endif5182: call void @finch_str_drop(ptr %a16) call void @finch.drop.S_ast_Node(ptr %a13) ret void -endif5162: +endif5166: %t222 = load ptr, ptr %a1 %t223 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t224 = load { ptr, i64, i64 }, ptr %t223 %t225 = extractvalue { ptr, i64, i64 } %t224, 1 %t226 = icmp uge i64 1, %t225 - br i1 %t226, label %range5183, label %inrange5184 -range5183: + br i1 %t226, label %range5187, label %inrange5188 +range5187: call void @finch_panic_index(ptr @.str.3240, i64 2411, i64 1, i64 %t225) unreachable -inrange5184: +inrange5188: %t227 = extractvalue { ptr, i64, i64 } %t224, 0 %t228 = getelementptr inbounds %S.ast.Node, ptr %t227, i64 1 %t229 = load %S.ast.Node, ptr %t228 @@ -52330,11 +52356,11 @@ inrange5184: store %S.gen.Val %t230, ptr %a231 %t232 = load ptr, ptr %a1 %t233 = icmp eq ptr %t232, null - br i1 %t233, label %panic5185, label %ok5186 -panic5185: + br i1 %t233, label %panic5189, label %ok5190 +panic5189: call void @finch_panic(ptr @.str.3241, i64 2412, ptr @.str.3242) unreachable -ok5186: +ok5190: %t234 = getelementptr inbounds %S.gen.Gen, ptr %t232, i32 0, i32 11 %t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 %t236 = load i64, ptr %t235 @@ -52404,16 +52430,16 @@ ok5186: %t295 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t296 = load %S.ast.Type, ptr %t295 %t297 = call i1 @finch.gen.owning(ptr %t294, %S.ast.Type %t296) - br i1 %t297, label %then5187, label %endif5189 -then5187: + br i1 %t297, label %then5191, label %endif5193 +then5191: %t298 = load ptr, ptr %a1 %t299 = getelementptr inbounds %S.gen.Val, ptr %a260, i32 0, i32 0 %t300 = load { ptr, i64, i64 }, ptr %t299 %t301 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 %t302 = load %S.ast.Type, ptr %t301 call void @finch.gen.dropValue(ptr %t298, { ptr, i64, i64 } %t300, %S.ast.Type %t302) - br label %endif5189 -endif5189: + br label %endif5193 +endif5193: %t303 = load ptr, ptr %a1 %t304 = load i64, ptr %a237 call void @finch.gen.heldEnd(ptr %t303, i64 %t304) @@ -52476,11 +52502,11 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 - br i1 %t7, label %range5190, label %inrange5191 -range5190: + br i1 %t7, label %range5194, label %inrange5195 +range5194: call void @finch_panic_index(ptr @.str.3246, i64 2431, i64 0, i64 %t6) unreachable -inrange5191: +inrange5195: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 %t10 = load %S.ast.Node, ptr %t9 @@ -52499,22 +52525,22 @@ inrange5191: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp sgt i64 %t24, 2 - br i1 %t25, label %then5192, label %else5193 -then5192: + br i1 %t25, label %then5196, label %else5197 +then5196: %t26 = load ptr, ptr %a1 %t27 = load { ptr, i64, i64 }, ptr %a12 %t28 = load { ptr, i64, i64 }, ptr %a15 %t29 = load { ptr, i64, i64 }, ptr %a18 call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t27, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29) - br label %endif5194 -else5193: + br label %endif5198 +else5197: %t30 = load ptr, ptr %a1 %t31 = load { ptr, i64, i64 }, ptr %a12 %t32 = load { ptr, i64, i64 }, ptr %a15 %t33 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.condBr(ptr %t30, { ptr, i64, i64 } %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33) - br label %endif5194 -endif5194: + br label %endif5198 +endif5198: %t34 = load ptr, ptr %a1 %t35 = load { ptr, i64, i64 }, ptr %a15 call void @finch.gen.label(ptr %t34, { ptr, i64, i64 } %t35) @@ -52523,22 +52549,22 @@ endif5194: %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 1, %t39 - br i1 %t40, label %range5195, label %inrange5196 -range5195: + br i1 %t40, label %range5199, label %inrange5200 +range5199: call void @finch_panic_index(ptr @.str.3250, i64 2441, i64 1, i64 %t39) unreachable -inrange5196: +inrange5200: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 1 %t43 = load %S.ast.Node, ptr %t42 call void @finch.gen.block(ptr %t36, %S.ast.Node %t43, i1 true) %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic5197, label %ok5198 -panic5197: + br i1 %t45, label %panic5201, label %ok5202 +panic5201: call void @finch_panic(ptr @.str.3251, i64 2442, ptr @.str.3252) unreachable -ok5198: +ok5202: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 9 %t47 = load i1, ptr %t46 %t48 = xor i1 %t47, true @@ -52550,8 +52576,8 @@ ok5198: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sgt i64 %t54, 2 - br i1 %t55, label %then5199, label %else5200 -then5199: + br i1 %t55, label %then5203, label %else5204 +then5203: %t56 = load ptr, ptr %a1 %t57 = load { ptr, i64, i64 }, ptr %a18 call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) @@ -52560,52 +52586,52 @@ then5199: %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 2, %t61 - br i1 %t62, label %range5202, label %inrange5203 -range5202: + br i1 %t62, label %range5206, label %inrange5207 +range5206: call void @finch_panic_index(ptr @.str.3253, i64 2446, i64 2, i64 %t61) unreachable -inrange5203: +inrange5207: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 2 %t65 = load %S.ast.Node, ptr %t64 call void @finch.gen.stmt(ptr %t58, %S.ast.Node %t65) %t66 = load i1, ptr %a49 - br label %logic.from5204 -logic.from5204: - br i1 %t66, label %logic.end5206, label %logic.rhs5205 -logic.rhs5205: + br label %logic.from5208 +logic.from5208: + br i1 %t66, label %logic.end5210, label %logic.rhs5209 +logic.rhs5209: %t67 = load ptr, ptr %a1 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic5207, label %ok5208 -panic5207: + br i1 %t68, label %panic5211, label %ok5212 +panic5211: call void @finch_panic(ptr @.str.3254, i64 2447, ptr @.str.3255) unreachable -ok5208: +ok5212: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 9 %t70 = load i1, ptr %t69 %t71 = xor i1 %t70, true - br label %logic.rend5209 -logic.rend5209: - br label %logic.end5206 -logic.end5206: - %t72 = phi i1 [ true, %logic.from5204 ], [ %t71, %logic.rend5209 ] + br label %logic.rend5213 +logic.rend5213: + br label %logic.end5210 +logic.end5210: + %t72 = phi i1 [ true, %logic.from5208 ], [ %t71, %logic.rend5213 ] store i1 %t72, ptr %a49 %t73 = load ptr, ptr %a1 %t74 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.br(ptr %t73, { ptr, i64, i64 } %t74) - br label %endif5201 -else5200: + br label %endif5205 +else5204: store i1 true, ptr %a49 - br label %endif5201 -endif5201: + br label %endif5205 +endif5205: %t75 = load i1, ptr %a49 - br i1 %t75, label %then5210, label %endif5212 -then5210: + br i1 %t75, label %then5214, label %endif5216 +then5214: %t76 = load ptr, ptr %a1 %t77 = load { ptr, i64, i64 }, ptr %a21 call void @finch.gen.label(ptr %t76, { ptr, i64, i64 } %t77) - br label %endif5212 -endif5212: + br label %endif5216 +endif5216: call void @finch_str_drop(ptr %a21) call void @finch_str_drop(ptr %a18) call void @finch_str_drop(ptr %a15) @@ -52653,11 +52679,11 @@ entry: %t17 = load { ptr, i64, i64 }, ptr %t16 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 0, %t18 - br i1 %t19, label %range5213, label %inrange5214 -range5213: + br i1 %t19, label %range5217, label %inrange5218 +range5217: call void @finch_panic_index(ptr @.str.3259, i64 2463, i64 0, i64 %t18) unreachable -inrange5214: +inrange5218: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.ast.Node, ptr %t20, i64 0 %t22 = getelementptr inbounds %S.ast.Node, ptr %t21, i32 0, i32 0 @@ -52666,19 +52692,19 @@ inrange5214: store { ptr, i64, i64 } { ptr @.str.3260, i64 4, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.from5215 -logic.from5215: - br i1 %t27, label %logic.rhs5216, label %logic.end5217 -logic.rhs5216: + br label %logic.from5219 +logic.from5219: + br i1 %t27, label %logic.rhs5220, label %logic.end5221 +logic.rhs5220: %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t29 = load { ptr, i64, i64 }, ptr %t28 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 0, %t30 - br i1 %t31, label %range5218, label %inrange5219 -range5218: + br i1 %t31, label %range5222, label %inrange5223 +range5222: call void @finch_panic_index(ptr @.str.3261, i64 2463, i64 0, i64 %t30) unreachable -inrange5219: +inrange5223: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i64 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i32 0, i32 4 @@ -52687,52 +52713,52 @@ inrange5219: store { ptr, i64, i64 } { ptr @.str.3262, i64 4, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.rend5220 -logic.rend5220: - br label %logic.end5217 -logic.end5217: - %t40 = phi i1 [ false, %logic.from5215 ], [ %t39, %logic.rend5220 ] + br label %logic.rend5224 +logic.rend5224: + br label %logic.end5221 +logic.end5221: + %t40 = phi i1 [ false, %logic.from5219 ], [ %t39, %logic.rend5224 ] store i1 %t40, ptr %a41 %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 - br i1 %t46, label %range5221, label %inrange5222 -range5221: + br i1 %t46, label %range5225, label %inrange5226 +range5225: call void @finch_panic_index(ptr @.str.3263, i64 2464, i64 0, i64 %t45) unreachable -inrange5222: +inrange5226: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = load %S.ast.Node, ptr %t48 %t50 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t42, %S.ast.Node %t49) store { ptr, i64, i64 } %t50, ptr %a51 %t52 = load i1, ptr %a41 - br i1 %t52, label %then5223, label %else5224 -then5223: + br i1 %t52, label %then5227, label %else5228 +then5227: %t53 = load ptr, ptr %a1 %t54 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.br(ptr %t53, { ptr, i64, i64 } %t54) - br label %endif5225 -else5224: + br label %endif5229 +else5228: %t55 = load ptr, ptr %a1 %t56 = load { ptr, i64, i64 }, ptr %a51 %t57 = load { ptr, i64, i64 }, ptr %a8 %t58 = load { ptr, i64, i64 }, ptr %a11 call void @finch.gen.condBr(ptr %t55, { ptr, i64, i64 } %t56, { ptr, i64, i64 } %t57, { ptr, i64, i64 } %t58) - br label %endif5225 -endif5225: + br label %endif5229 +endif5229: %t59 = load ptr, ptr %a1 %t60 = load { ptr, i64, i64 }, ptr %a8 call void @finch.gen.label(ptr %t59, { ptr, i64, i64 } %t60) %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null - br i1 %t62, label %panic5226, label %ok5227 -panic5226: + br i1 %t62, label %panic5230, label %ok5231 +panic5230: call void @finch_panic(ptr @.str.3264, i64 2471, ptr @.str.3265) unreachable -ok5227: +ok5231: %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 12 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load { ptr, i64, i64 }, ptr %a5 @@ -52747,22 +52773,22 @@ ok5227: %t74 = insertvalue %S.gen.Loop %t69, { ptr, i64, i64 } %t73, 1 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic5228, label %ok5229 -panic5228: + br i1 %t76, label %panic5232, label %ok5233 +panic5232: call void @finch_panic(ptr @.str.3266, i64 2471, ptr @.str.3267) unreachable -ok5229: +ok5233: %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 10 %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 %t79 = load i64, ptr %t78 %t80 = insertvalue %S.gen.Loop %t74, i64 %t79, 2 %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic5230, label %ok5231 -panic5230: + br i1 %t82, label %panic5234, label %ok5235 +panic5234: call void @finch_panic(ptr @.str.3268, i64 2471, ptr @.str.3269) unreachable -ok5231: +ok5235: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 11 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 %t85 = load i64, ptr %t84 @@ -52778,11 +52804,11 @@ ok5231: %t92 = load { ptr, i64, i64 }, ptr %t91 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 1, %t93 - br i1 %t94, label %range5232, label %inrange5233 -range5232: + br i1 %t94, label %range5236, label %inrange5237 +range5236: call void @finch_panic_index(ptr @.str.3270, i64 2472, i64 1, i64 %t93) unreachable -inrange5233: +inrange5237: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 1 %t97 = load %S.ast.Node, ptr %t96 @@ -52793,31 +52819,31 @@ inrange5233: %t102 = load { ptr, i64, i64 }, ptr %t101 %t103 = extractvalue { ptr, i64, i64 } %t102, 1 %t104 = icmp uge i64 1, %t103 - br i1 %t104, label %range5234, label %inrange5235 -range5234: + br i1 %t104, label %range5238, label %inrange5239 +range5238: call void @finch_panic_index(ptr @.str.3271, i64 2473, i64 1, i64 %t103) unreachable -inrange5235: +inrange5239: %t105 = extractvalue { ptr, i64, i64 } %t102, 0 %t106 = getelementptr inbounds %S.ast.Node, ptr %t105, i64 1 %t107 = load %S.ast.Node, ptr %t106 call void @finch.gen.block(ptr %t100, %S.ast.Node %t107, i1 true) %t108 = load ptr, ptr %a1 %t109 = icmp eq ptr %t108, null - br i1 %t109, label %panic5236, label %ok5237 -panic5236: + br i1 %t109, label %panic5240, label %ok5241 +panic5240: call void @finch_panic(ptr @.str.3272, i64 2474, ptr @.str.3273) unreachable -ok5237: +ok5241: %t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 12 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1 %t112 = load i64, ptr %t111 %t113 = icmp eq i64 %t112, 0 - br i1 %t113, label %panic5238, label %ok5239 -panic5238: + br i1 %t113, label %panic5242, label %ok5243 +panic5242: call void @finch_panic(ptr @.str.3274, i64 2474, ptr @.str.3275) unreachable -ok5239: +ok5243: %t114 = sub i64 %t112, 1 %t115 = load ptr, ptr %t110 %t116 = getelementptr inbounds %S.gen.Loop, ptr %t115, i64 %t114 @@ -52830,23 +52856,23 @@ ok5239: call void @finch.gen.br(ptr %t119, { ptr, i64, i64 } %t120) %t121 = load i1, ptr %a41 %t122 = xor i1 %t121, true - br label %logic.from5240 -logic.from5240: - br i1 %t122, label %logic.end5242, label %logic.rhs5241 -logic.rhs5241: + br label %logic.from5244 +logic.from5244: + br i1 %t122, label %logic.end5246, label %logic.rhs5245 +logic.rhs5245: %t123 = load i1, ptr %a99 - br label %logic.rend5243 -logic.rend5243: - br label %logic.end5242 -logic.end5242: - %t124 = phi i1 [ true, %logic.from5240 ], [ %t123, %logic.rend5243 ] - br i1 %t124, label %then5244, label %endif5246 -then5244: + br label %logic.rend5247 +logic.rend5247: + br label %logic.end5246 +logic.end5246: + %t124 = phi i1 [ true, %logic.from5244 ], [ %t123, %logic.rend5247 ] + br i1 %t124, label %then5248, label %endif5250 +then5248: %t125 = load ptr, ptr %a1 %t126 = load { ptr, i64, i64 }, ptr %a11 call void @finch.gen.label(ptr %t125, { ptr, i64, i64 } %t126) - br label %endif5246 -endif5246: + br label %endif5250 +endif5250: call void @finch_str_drop(ptr %a51) call void @finch_str_drop(ptr %a11) call void @finch_str_drop(ptr %a8) @@ -52874,77 +52900,77 @@ entry: store { ptr, i64, i64 } { ptr @.str.3276, i64 5, i64 0 }, ptr %a5 %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) %t7 = icmp ne i32 %t6, 0 - br i1 %t7, label %then5247, label %endif5249 -then5247: + br i1 %t7, label %then5251, label %endif5253 +then5251: ret i1 true -endif5249: +endif5253: %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t9 = load { ptr, i64, i64 }, ptr %t8 store { ptr, i64, i64 } %t9, ptr %a10 store { ptr, i64, i64 } { ptr @.str.3277, i64 5, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from5250 -logic.from5250: - br i1 %t13, label %logic.end5252, label %logic.rhs5251 -logic.rhs5251: + br label %logic.from5254 +logic.from5254: + br i1 %t13, label %logic.end5256, label %logic.rhs5255 +logic.rhs5255: %t14 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3278, i64 3, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br label %logic.rend5253 -logic.rend5253: - br label %logic.end5252 -logic.end5252: - %t20 = phi i1 [ true, %logic.from5250 ], [ %t19, %logic.rend5253 ] - br label %logic.from5254 -logic.from5254: - br i1 %t20, label %logic.end5256, label %logic.rhs5255 -logic.rhs5255: + br label %logic.rend5257 +logic.rend5257: + br label %logic.end5256 +logic.end5256: + %t20 = phi i1 [ true, %logic.from5254 ], [ %t19, %logic.rend5257 ] + br label %logic.from5258 +logic.from5258: + br i1 %t20, label %logic.end5260, label %logic.rhs5259 +logic.rhs5259: %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3279, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br label %logic.rend5257 -logic.rend5257: - br label %logic.end5256 -logic.end5256: - %t27 = phi i1 [ true, %logic.from5254 ], [ %t26, %logic.rend5257 ] - br i1 %t27, label %then5258, label %endif5260 -then5258: + br label %logic.rend5261 +logic.rend5261: + br label %logic.end5260 +logic.end5260: + %t27 = phi i1 [ true, %logic.from5258 ], [ %t26, %logic.rend5261 ] + br i1 %t27, label %then5262, label %endif5264 +then5262: ret i1 false -endif5260: +endif5264: %t28 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 store i64 0, ptr %a29 - br label %each.cond5261 -each.cond5261: + br label %each.cond5265 +each.cond5265: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = load i64, ptr %a29 %t33 = icmp slt i64 %t32, %t31 - br i1 %t33, label %each.body5262, label %each.end5264 -each.body5262: + br i1 %t33, label %each.body5266, label %each.end5268 +each.body5266: %t34 = load ptr, ptr %t28 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 %t36 = load %S.ast.Node, ptr %t35 store %S.ast.Node %t36, ptr %a37 %t38 = load %S.ast.Node, ptr %a37 %t39 = call i1 @finch.gen.countBreaks(%S.ast.Node %t38) - br i1 %t39, label %then5265, label %endif5267 -then5265: + br i1 %t39, label %then5269, label %endif5271 +then5269: ret i1 true -endif5267: - br label %each.step5263 -each.step5263: +endif5271: + br label %each.step5267 +each.step5267: %t40 = load i64, ptr %a29 %t41 = add i64 %t40, 1 store i64 %t41, ptr %a29 - br label %each.cond5261 -each.end5264: + br label %each.cond5265 +each.end5268: ret i1 false } @@ -53007,11 +53033,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range5268, label %inrange5269 -range5268: + br i1 %t8, label %range5272, label %inrange5273 +range5272: call void @finch_panic_index(ptr @.str.3280, i64 2498, i64 0, i64 %t7) unreachable -inrange5269: +inrange5273: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -53021,11 +53047,11 @@ inrange5269: %t15 = load { ptr, i64, i64 }, ptr %t14 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 0, %t16 - br i1 %t17, label %range5270, label %inrange5271 -range5270: + br i1 %t17, label %range5274, label %inrange5275 +range5274: call void @finch_panic_index(ptr @.str.3282, i64 2498, i64 0, i64 %t16) unreachable -inrange5271: +inrange5275: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 %t20 = load %S.ast.Node, ptr %t19 @@ -53047,11 +53073,11 @@ inrange5271: %t33 = load { ptr, i64, i64 }, ptr %t32 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 1, %t34 - br i1 %t35, label %range5272, label %inrange5273 -range5272: + br i1 %t35, label %range5276, label %inrange5277 +range5276: call void @finch_panic_index(ptr @.str.3284, i64 2499, i64 1, i64 %t34) unreachable -inrange5273: +inrange5277: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 1 %t38 = load %S.ast.Node, ptr %t37 @@ -53061,11 +53087,11 @@ inrange5273: %t42 = load { ptr, i64, i64 }, ptr %t41 %t43 = extractvalue { ptr, i64, i64 } %t42, 1 %t44 = icmp uge i64 1, %t43 - br i1 %t44, label %range5274, label %inrange5275 -range5274: + br i1 %t44, label %range5278, label %inrange5279 +range5278: call void @finch_panic_index(ptr @.str.3286, i64 2499, i64 1, i64 %t43) unreachable -inrange5275: +inrange5279: %t45 = extractvalue { ptr, i64, i64 } %t42, 0 %t46 = getelementptr inbounds %S.ast.Node, ptr %t45, i64 1 %t47 = load %S.ast.Node, ptr %t46 @@ -53148,11 +53174,11 @@ inrange5275: call void @finch.gen.label(ptr %t111, { ptr, i64, i64 } %t112) %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null - br i1 %t114, label %panic5276, label %ok5277 -panic5276: + br i1 %t114, label %panic5280, label %ok5281 +panic5280: call void @finch_panic(ptr @.str.3296, i64 2512, ptr @.str.3297) unreachable -ok5277: +ok5281: %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 12 %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i32 0, i32 1 %t117 = load { ptr, i64, i64 }, ptr %a75 @@ -53167,22 +53193,22 @@ ok5277: %t126 = insertvalue %S.gen.Loop %t121, { ptr, i64, i64 } %t125, 1 %t127 = load ptr, ptr %a1 %t128 = icmp eq ptr %t127, null - br i1 %t128, label %panic5278, label %ok5279 -panic5278: + br i1 %t128, label %panic5282, label %ok5283 +panic5282: call void @finch_panic(ptr @.str.3298, i64 2512, ptr @.str.3299) unreachable -ok5279: +ok5283: %t129 = getelementptr inbounds %S.gen.Gen, ptr %t127, i32 0, i32 10 %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i32 0, i32 1 %t131 = load i64, ptr %t130 %t132 = insertvalue %S.gen.Loop %t126, i64 %t131, 2 %t133 = load ptr, ptr %a1 %t134 = icmp eq ptr %t133, null - br i1 %t134, label %panic5280, label %ok5281 -panic5280: + br i1 %t134, label %panic5284, label %ok5285 +panic5284: call void @finch_panic(ptr @.str.3300, i64 2512, ptr @.str.3301) unreachable -ok5281: +ok5285: %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 11 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 %t137 = load i64, ptr %t136 @@ -53199,31 +53225,31 @@ ok5281: %t145 = load { ptr, i64, i64 }, ptr %t144 %t146 = extractvalue { ptr, i64, i64 } %t145, 1 %t147 = icmp uge i64 2, %t146 - br i1 %t147, label %range5282, label %inrange5283 -range5282: + br i1 %t147, label %range5286, label %inrange5287 +range5286: call void @finch_panic_index(ptr @.str.3302, i64 2513, i64 2, i64 %t146) unreachable -inrange5283: +inrange5287: %t148 = extractvalue { ptr, i64, i64 } %t145, 0 %t149 = getelementptr inbounds %S.ast.Node, ptr %t148, i64 2 %t150 = load %S.ast.Node, ptr %t149 call void @finch.gen.block(ptr %t143, %S.ast.Node %t150, i1 true) %t151 = load ptr, ptr %a1 %t152 = icmp eq ptr %t151, null - br i1 %t152, label %panic5284, label %ok5285 -panic5284: + br i1 %t152, label %panic5288, label %ok5289 +panic5288: call void @finch_panic(ptr @.str.3303, i64 2514, ptr @.str.3304) unreachable -ok5285: +ok5289: %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 12 %t154 = getelementptr inbounds { ptr, i64, i64 }, ptr %t153, i32 0, i32 1 %t155 = load i64, ptr %t154 %t156 = icmp eq i64 %t155, 0 - br i1 %t156, label %panic5286, label %ok5287 -panic5286: + br i1 %t156, label %panic5290, label %ok5291 +panic5290: call void @finch_panic(ptr @.str.3305, i64 2514, ptr @.str.3306) unreachable -ok5287: +ok5291: %t157 = sub i64 %t155, 1 %t158 = load ptr, ptr %t153 %t159 = getelementptr inbounds %S.gen.Loop, ptr %t158, i64 %t157 @@ -53455,11 +53481,11 @@ entry: %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 - br i1 %t9, label %range5288, label %inrange5289 -range5288: + br i1 %t9, label %range5292, label %inrange5293 +range5292: call void @finch_panic_index(ptr @.str.3311, i64 2526, i64 0, i64 %t8) unreachable -inrange5289: +inrange5293: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = load %S.ast.Type, ptr %t11 @@ -53471,11 +53497,11 @@ inrange5289: %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 1, %t19 - br i1 %t20, label %range5290, label %inrange5291 -range5290: + br i1 %t20, label %range5294, label %inrange5295 +range5294: call void @finch_panic_index(ptr @.str.3312, i64 2527, i64 1, i64 %t19) unreachable -inrange5291: +inrange5295: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 %t23 = load %S.ast.Type, ptr %t22 @@ -53484,20 +53510,20 @@ inrange5291: %t26 = load %S.ast.Type, ptr %a25 store %S.ast.Type %t26, ptr %a27 %t28 = load i1, ptr %a5 - br label %logic.from5292 -logic.from5292: - br i1 %t28, label %logic.rhs5293, label %logic.end5294 -logic.rhs5293: + br label %logic.from5296 +logic.from5296: + br i1 %t28, label %logic.rhs5297, label %logic.end5298 +logic.rhs5297: %t29 = load ptr, ptr %a1 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t31 = load { ptr, i64, i64 }, ptr %t30 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 0, %t32 - br i1 %t33, label %range5295, label %inrange5296 -range5295: + br i1 %t33, label %range5299, label %inrange5300 +range5299: call void @finch_panic_index(ptr @.str.3313, i64 2528, i64 0, i64 %t32) unreachable -inrange5296: +inrange5300: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 0 %t36 = load %S.ast.Node, ptr %t35 @@ -53506,22 +53532,22 @@ inrange5296: %t39 = load { ptr, i64, i64 }, ptr %t38 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 1, %t40 - br i1 %t41, label %range5297, label %inrange5298 -range5297: + br i1 %t41, label %range5301, label %inrange5302 +range5301: call void @finch_panic_index(ptr @.str.3314, i64 2528, i64 1, i64 %t40) unreachable -inrange5298: +inrange5302: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 1 %t44 = load %S.ast.Node, ptr %t43 %t45 = call i1 @finch.gen.mutates(ptr %t29, { ptr, i64, i64 } %t37, %S.ast.Node %t44) store { ptr, i64, i64 } %t37, ptr %a46 call void @finch_str_drop(ptr %a46) - br label %logic.rend5299 -logic.rend5299: - br label %logic.end5294 -logic.end5294: - %t47 = phi i1 [ false, %logic.from5292 ], [ %t45, %logic.rend5299 ] + br label %logic.rend5303 +logic.rend5303: + br label %logic.end5298 +logic.end5298: + %t47 = phi i1 [ false, %logic.from5296 ], [ %t45, %logic.rend5303 ] store i1 %t47, ptr %a48 %t49 = load ptr, ptr %a1 %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.3315, i64 3, i64 0 }) @@ -53531,8 +53557,8 @@ logic.end5294: call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.3316, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3317, i64 1, i64 0 }, { ptr, i64, i64 } %t53) store { ptr, i64, i64 } { ptr @.str.3318, i64 0, i64 0 }, ptr %a54 %t55 = load i1, ptr %a5 - br i1 %t55, label %then5300, label %endif5302 -then5300: + br i1 %t55, label %then5304, label %endif5306 +then5304: %t56 = load ptr, ptr %a1 %t57 = load ptr, ptr %a1 %t58 = load ptr, ptr %a1 @@ -53573,8 +53599,8 @@ then5300: store { ptr, i64, i64 } %t84, ptr %a54 store { ptr, i64, i64 } %t86, ptr %a87 call void @finch_str_drop(ptr %a87) - br label %endif5302 -endif5302: + br label %endif5306 +endif5306: %t88 = load ptr, ptr %a1 %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3323, i64 8, i64 0 }) store { ptr, i64, i64 } %t89, ptr %a90 @@ -53597,18 +53623,18 @@ endif5302: %t106 = load { ptr, i64, i64 }, ptr %a90 call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) %t107 = load i1, ptr %a5 - br label %logic.from5303 -logic.from5303: - br i1 %t107, label %logic.rhs5304, label %logic.end5305 -logic.rhs5304: + br label %logic.from5307 +logic.from5307: + br i1 %t107, label %logic.rhs5308, label %logic.end5309 +logic.rhs5308: %t108 = load i1, ptr %a48 - br label %logic.rend5306 -logic.rend5306: - br label %logic.end5305 -logic.end5305: - %t109 = phi i1 [ false, %logic.from5303 ], [ %t108, %logic.rend5306 ] - br i1 %t109, label %then5307, label %endif5309 -then5307: + br label %logic.rend5310 +logic.rend5310: + br label %logic.end5309 +logic.end5309: + %t109 = phi i1 [ false, %logic.from5307 ], [ %t108, %logic.rend5310 ] + br i1 %t109, label %then5311, label %endif5313 +then5311: %t110 = load ptr, ptr %a1 %t111 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t110, { ptr, i64, i64 } { ptr @.str.3328, i64 11, i64 0 }) store { ptr, i64, i64 } %t111, ptr %a112 @@ -53687,22 +53713,22 @@ then5307: %t173 = load ptr, ptr %a1 %t174 = load ptr, ptr %a1 %t175 = icmp eq ptr %t174, null - br i1 %t175, label %panic5310, label %ok5311 -panic5310: + br i1 %t175, label %panic5314, label %ok5315 +panic5314: call void @finch_panic(ptr @.str.3337, i64 2549, ptr @.str.3338) unreachable -ok5311: +ok5315: %t176 = getelementptr inbounds %S.gen.Gen, ptr %t174, i32 0, i32 1 %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t178 = load i64, ptr %t177 %t179 = load { ptr, i64, i64 }, ptr %t176 %t180 = extractvalue { ptr, i64, i64 } %t179, 1 %t181 = icmp uge i64 %t178, %t180 - br i1 %t181, label %range5312, label %inrange5313 -range5312: + br i1 %t181, label %range5316, label %inrange5317 +range5316: call void @finch_panic_index(ptr @.str.3339, i64 2549, i64 %t178, i64 %t180) unreachable -inrange5313: +inrange5317: %t182 = extractvalue { ptr, i64, i64 } %t179, 0 %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t178 %t184 = load { ptr, i64, i64 }, ptr %t183 @@ -53744,11 +53770,11 @@ inrange5313: call void @finch.gen.emit(ptr %t212, { ptr, i64, i64 } { ptr @.str.3342, i64 11, i64 0 }) %t213 = load ptr, ptr %a1 %t214 = icmp eq ptr %t213, null - br i1 %t214, label %panic5314, label %ok5315 -panic5314: + br i1 %t214, label %panic5318, label %ok5319 +panic5318: call void @finch_panic(ptr @.str.3343, i64 2551, ptr @.str.3344) unreachable -ok5315: +ok5319: %t215 = getelementptr inbounds %S.gen.Gen, ptr %t213, i32 0, i32 9 store i1 true, ptr %t215 %t216 = load ptr, ptr %a1 @@ -53757,8 +53783,8 @@ ok5315: call void @finch_str_drop(ptr %a146) call void @finch_str_drop(ptr %a115) call void @finch_str_drop(ptr %a112) - br label %endif5309 -endif5309: + br label %endif5313 +endif5313: %t218 = load ptr, ptr %a1 %t219 = load { ptr, i64, i64 }, ptr %a51 %t220 = call { ptr, i64, i64 } @finch.gen.load(ptr %t218, { ptr, i64, i64 } { ptr @.str.3345, i64 3, i64 0 }, { ptr, i64, i64 } %t219) @@ -53872,11 +53898,11 @@ endif5309: call void @finch.gen.label(ptr %t309, { ptr, i64, i64 } %t310) %t311 = load ptr, ptr %a1 %t312 = icmp eq ptr %t311, null - br i1 %t312, label %panic5316, label %ok5317 -panic5316: + br i1 %t312, label %panic5320, label %ok5321 +panic5320: call void @finch_panic(ptr @.str.3355, i64 2562, ptr @.str.3356) unreachable -ok5317: +ok5321: %t313 = getelementptr inbounds %S.gen.Gen, ptr %t311, i32 0, i32 12 %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i32 0, i32 1 %t315 = load { ptr, i64, i64 }, ptr %a99 @@ -53891,22 +53917,22 @@ ok5317: %t324 = insertvalue %S.gen.Loop %t319, { ptr, i64, i64 } %t323, 1 %t325 = load ptr, ptr %a1 %t326 = icmp eq ptr %t325, null - br i1 %t326, label %panic5318, label %ok5319 -panic5318: + br i1 %t326, label %panic5322, label %ok5323 +panic5322: call void @finch_panic(ptr @.str.3357, i64 2562, ptr @.str.3358) unreachable -ok5319: +ok5323: %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 10 %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i32 0, i32 1 %t329 = load i64, ptr %t328 %t330 = insertvalue %S.gen.Loop %t324, i64 %t329, 2 %t331 = load ptr, ptr %a1 %t332 = icmp eq ptr %t331, null - br i1 %t332, label %panic5320, label %ok5321 -panic5320: + br i1 %t332, label %panic5324, label %ok5325 +panic5324: call void @finch_panic(ptr @.str.3359, i64 2562, ptr @.str.3360) unreachable -ok5321: +ok5325: %t333 = getelementptr inbounds %S.gen.Gen, ptr %t331, i32 0, i32 11 %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i32 0, i32 1 %t335 = load i64, ptr %t334 @@ -53935,8 +53961,8 @@ ok5321: call void @finch_str_drop(ptr %a352) store { ptr, i64, i64 } %t350, ptr %a353 %t354 = load i1, ptr %a48 - br i1 %t354, label %then5322, label %endif5324 -then5322: + br i1 %t354, label %then5326, label %endif5328 +then5326: %t355 = load ptr, ptr %a1 %t356 = load { ptr, i64, i64 }, ptr %a353 %t357 = load %S.ast.Type, ptr %a16 @@ -53945,8 +53971,8 @@ then5322: store { ptr, i64, i64 } %t358, ptr %a353 store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) - br label %endif5324 -endif5324: + br label %endif5328 +endif5328: %t361 = load ptr, ptr %a1 %t362 = load %S.ast.Node, ptr %a2 %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -53961,8 +53987,8 @@ endif5324: %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 %t372 = load i64, ptr %t371 %t373 = icmp sgt i64 %t372, 0 - br i1 %t373, label %then5325, label %endif5327 -then5325: + br i1 %t373, label %then5329, label %endif5331 +then5329: %t374 = load ptr, ptr %a1 %t375 = load ptr, ptr %a1 %t376 = load %S.ast.Type, ptr %a27 @@ -53978,8 +54004,8 @@ then5325: call void @finch_str_drop(ptr %a384) store { ptr, i64, i64 } %t382, ptr %a385 %t386 = load i1, ptr %a48 - br i1 %t386, label %then5328, label %endif5330 -then5328: + br i1 %t386, label %then5332, label %endif5334 +then5332: %t387 = load ptr, ptr %a1 %t388 = load { ptr, i64, i64 }, ptr %a385 %t389 = load %S.ast.Type, ptr %a27 @@ -53988,8 +54014,8 @@ then5328: store { ptr, i64, i64 } %t390, ptr %a385 store { ptr, i64, i64 } %t391, ptr %a392 call void @finch_str_drop(ptr %a392) - br label %endif5330 -endif5330: + br label %endif5334 +endif5334: %t393 = load ptr, ptr %a1 %t394 = load %S.ast.Node, ptr %a2 %t395 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 @@ -54001,18 +54027,18 @@ endif5330: store { ptr, i64, i64 } %t400, ptr %a401 call void @finch_str_drop(ptr %a401) call void @finch_str_drop(ptr %a385) - br label %endif5327 -endif5327: + br label %endif5331 +endif5331: %t402 = load ptr, ptr %a1 %t403 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t404 = load { ptr, i64, i64 }, ptr %t403 %t405 = extractvalue { ptr, i64, i64 } %t404, 1 %t406 = icmp uge i64 1, %t405 - br i1 %t406, label %range5331, label %inrange5332 -range5331: + br i1 %t406, label %range5335, label %inrange5336 +range5335: call void @finch_panic_index(ptr @.str.3361, i64 2576, i64 1, i64 %t405) unreachable -inrange5332: +inrange5336: %t407 = extractvalue { ptr, i64, i64 } %t404, 0 %t408 = getelementptr inbounds %S.ast.Node, ptr %t407, i64 1 %t409 = load %S.ast.Node, ptr %t408 @@ -54021,20 +54047,20 @@ inrange5332: call void @finch.gen.popScope(ptr %t410) %t411 = load ptr, ptr %a1 %t412 = icmp eq ptr %t411, null - br i1 %t412, label %panic5333, label %ok5334 -panic5333: + br i1 %t412, label %panic5337, label %ok5338 +panic5337: call void @finch_panic(ptr @.str.3362, i64 2578, ptr @.str.3363) unreachable -ok5334: +ok5338: %t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 12 %t414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t413, i32 0, i32 1 %t415 = load i64, ptr %t414 %t416 = icmp eq i64 %t415, 0 - br i1 %t416, label %panic5335, label %ok5336 -panic5335: + br i1 %t416, label %panic5339, label %ok5340 +panic5339: call void @finch_panic(ptr @.str.3364, i64 2578, ptr @.str.3365) unreachable -ok5336: +ok5340: %t417 = sub i64 %t415, 1 %t418 = load ptr, ptr %t413 %t419 = getelementptr inbounds %S.gen.Loop, ptr %t418, i64 %t417 @@ -54241,11 +54267,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range5337, label %inrange5338 -range5337: + br i1 %t8, label %range5341, label %inrange5342 +range5341: call void @finch_panic_index(ptr @.str.3370, i64 2589, i64 0, i64 %t7) unreachable -inrange5338: +inrange5342: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -54256,8 +54282,8 @@ inrange5338: store %S.ast.Type %t15, ptr %a16 %t17 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t18 = load i1, ptr %t17 - br i1 %t18, label %then5339, label %else5340 -then5339: + br i1 %t18, label %then5343, label %else5344 +then5343: %t19 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 %t20 = getelementptr inbounds %S.gen.Place, ptr %t19, i32 0, i32 0 %t21 = load { ptr, i64, i64 }, ptr %t20 @@ -54278,8 +54304,8 @@ then5339: store %S.ast.Type %t32, ptr %a16 store %S.ast.Type %t33, ptr %a34 call void @finch.drop.S_ast_Type(ptr %a34) - br label %endif5341 -else5340: + br label %endif5345 +else5344: %t35 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 %t36 = getelementptr inbounds %S.gen.Val, ptr %t35, i32 0, i32 1 %t37 = load %S.ast.Type, ptr %t36 @@ -54294,11 +54320,11 @@ else5340: %t44 = load %S.ast.Node, ptr %a2 %t45 = load ptr, ptr %a1 %t46 = icmp eq ptr %t45, null - br i1 %t46, label %panic5342, label %ok5343 -panic5342: + br i1 %t46, label %panic5346, label %ok5347 +panic5346: call void @finch_panic(ptr @.str.3374, i64 2597, ptr @.str.3375) unreachable -ok5343: +ok5347: %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 25 %t48 = load i64, ptr %t47 call void @finch_str_from_int(ptr %a49, i64 %t48) @@ -54323,16 +54349,16 @@ ok5343: store { ptr, i64, i64 } %t61, ptr %a14 store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_drop(ptr %a65) - br label %endif5341 -endif5341: + br label %endif5345 +endif5345: %t66 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t67 = load { ptr, i64, i64 }, ptr %t66 store { ptr, i64, i64 } %t67, ptr %a68 store { ptr, i64, i64 } { ptr @.str.3376, i64 3, i64 0 }, ptr %a69 %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) %t71 = icmp ne i32 %t70, 0 - br i1 %t71, label %then5344, label %endif5346 -then5344: + br i1 %t71, label %then5348, label %endif5350 +then5348: %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Node, ptr %a2 %t74 = load { ptr, i64, i64 }, ptr %a14 @@ -54346,40 +54372,40 @@ then5344: call void @finch_str_drop(ptr %a14) call void @finch.drop.S_gen_Ref(ptr %a13) ret void -endif5346: +endif5350: %t79 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t80 = load { ptr, i64, i64 }, ptr %t79 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.3377, i64 5, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp eq i32 %t83, 0 - br label %logic.from5347 -logic.from5347: - br i1 %t84, label %logic.rhs5348, label %logic.end5349 -logic.rhs5348: + br label %logic.from5351 +logic.from5351: + br i1 %t84, label %logic.rhs5352, label %logic.end5353 +logic.rhs5352: %t85 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 %t86 = load { ptr, i64, i64 }, ptr %t85 store { ptr, i64, i64 } %t86, ptr %a87 store { ptr, i64, i64 } { ptr @.str.3378, i64 3, i64 0 }, ptr %a88 %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) %t90 = icmp eq i32 %t89, 0 - br label %logic.rend5350 -logic.rend5350: - br label %logic.end5349 -logic.end5349: - %t91 = phi i1 [ false, %logic.from5347 ], [ %t90, %logic.rend5350 ] - br i1 %t91, label %then5351, label %endif5353 -then5351: + br label %logic.rend5354 +logic.rend5354: + br label %logic.end5353 +logic.end5353: + %t91 = phi i1 [ false, %logic.from5351 ], [ %t90, %logic.rend5354 ] + br i1 %t91, label %then5355, label %endif5357 +then5355: %t92 = load ptr, ptr %a1 %t93 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t94 = load { ptr, i64, i64 }, ptr %t93 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 0, %t95 - br i1 %t96, label %range5354, label %inrange5355 -range5354: + br i1 %t96, label %range5358, label %inrange5359 +range5358: call void @finch_panic_index(ptr @.str.3379, i64 2605, i64 0, i64 %t95) unreachable -inrange5355: +inrange5359: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds %S.ast.Node, ptr %t97, i64 0 %t99 = load %S.ast.Node, ptr %t98 @@ -54400,8 +54426,8 @@ inrange5355: call void @finch.gen.fail(ptr %t92, %S.ast.Node %t99, { ptr, i64, i64 } %t111) store { ptr, i64, i64 } %t111, ptr %a112 call void @finch_str_drop(ptr %a112) - br label %endif5353 -endif5353: + br label %endif5357 +endif5357: %t113 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3382, i64 4, i64 0 }) store %S.ast.Type %t113, ptr %a114 %t115 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 @@ -54410,17 +54436,17 @@ endif5353: store { ptr, i64, i64 } { ptr @.str.3383, i64 5, i64 0 }, ptr %a118 %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) %t120 = icmp ne i32 %t119, 0 - br i1 %t120, label %then5356, label %endif5358 -then5356: + br i1 %t120, label %then5360, label %endif5362 +then5360: %t121 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 1 %t122 = load { ptr, i64, i64 }, ptr %t121 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 0, %t123 - br i1 %t124, label %range5359, label %inrange5360 -range5359: + br i1 %t124, label %range5363, label %inrange5364 +range5363: call void @finch_panic_index(ptr @.str.3384, i64 2609, i64 0, i64 %t123) unreachable -inrange5360: +inrange5364: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i64 0 %t127 = load %S.ast.Type, ptr %t126 @@ -54431,36 +54457,36 @@ inrange5360: store %S.ast.Type %t130, ptr %a114 store %S.ast.Type %t131, ptr %a132 call void @finch.drop.S_ast_Type(ptr %a132) - br label %endif5358 -endif5358: + br label %endif5362 +endif5362: %t133 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 %t134 = load i1, ptr %t133 - br label %logic.from5361 -logic.from5361: - br i1 %t134, label %logic.rhs5362, label %logic.end5363 -logic.rhs5362: + br label %logic.from5365 +logic.from5365: + br i1 %t134, label %logic.rhs5366, label %logic.end5367 +logic.rhs5366: %t135 = load ptr, ptr %a1 %t136 = load %S.ast.Type, ptr %a114 %t137 = call i1 @finch.gen.owning(ptr %t135, %S.ast.Type %t136) - br label %logic.rend5364 -logic.rend5364: - br label %logic.end5363 -logic.end5363: - %t138 = phi i1 [ false, %logic.from5361 ], [ %t137, %logic.rend5364 ] - br label %logic.from5365 -logic.from5365: - br i1 %t138, label %logic.rhs5366, label %logic.end5367 -logic.rhs5366: + br label %logic.rend5368 +logic.rend5368: + br label %logic.end5367 +logic.end5367: + %t138 = phi i1 [ false, %logic.from5365 ], [ %t137, %logic.rend5368 ] + br label %logic.from5369 +logic.from5369: + br i1 %t138, label %logic.rhs5370, label %logic.end5371 +logic.rhs5370: %t139 = load ptr, ptr %a1 %t140 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t141 = load { ptr, i64, i64 }, ptr %t140 %t142 = extractvalue { ptr, i64, i64 } %t141, 1 %t143 = icmp uge i64 0, %t142 - br i1 %t143, label %range5368, label %inrange5369 -range5368: + br i1 %t143, label %range5372, label %inrange5373 +range5372: call void @finch_panic_index(ptr @.str.3385, i64 2611, i64 0, i64 %t142) unreachable -inrange5369: +inrange5373: %t144 = extractvalue { ptr, i64, i64 } %t141, 0 %t145 = getelementptr inbounds %S.ast.Node, ptr %t144, i64 0 %t146 = load %S.ast.Node, ptr %t145 @@ -54469,22 +54495,22 @@ inrange5369: %t149 = load { ptr, i64, i64 }, ptr %t148 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 1, %t150 - br i1 %t151, label %range5370, label %inrange5371 -range5370: + br i1 %t151, label %range5374, label %inrange5375 +range5374: call void @finch_panic_index(ptr @.str.3386, i64 2611, i64 1, i64 %t150) unreachable -inrange5371: +inrange5375: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 1 %t154 = load %S.ast.Node, ptr %t153 %t155 = call i1 @finch.gen.mutates(ptr %t139, { ptr, i64, i64 } %t147, %S.ast.Node %t154) store { ptr, i64, i64 } %t147, ptr %a156 call void @finch_str_drop(ptr %a156) - br label %logic.rend5372 -logic.rend5372: - br label %logic.end5367 -logic.end5367: - %t157 = phi i1 [ false, %logic.from5365 ], [ %t155, %logic.rend5372 ] + br label %logic.rend5376 +logic.rend5376: + br label %logic.end5371 +logic.end5371: + %t157 = phi i1 [ false, %logic.from5369 ], [ %t155, %logic.rend5376 ] store i1 %t157, ptr %a158 %t159 = load ptr, ptr %a1 %t160 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t159, { ptr, i64, i64 } { ptr @.str.3387, i64 3, i64 0 }) @@ -54619,8 +54645,8 @@ logic.end5367: call void @finch_str_drop(ptr %a271) store { ptr, i64, i64 } %t270, ptr %a272 %t273 = load i1, ptr %a158 - br i1 %t273, label %then5373, label %endif5375 -then5373: + br i1 %t273, label %then5377, label %endif5379 +then5377: %t274 = load ptr, ptr %a1 %t275 = load { ptr, i64, i64 }, ptr %a272 %t276 = load %S.ast.Type, ptr %a114 @@ -54629,15 +54655,15 @@ then5373: store { ptr, i64, i64 } %t277, ptr %a272 store { ptr, i64, i64 } %t278, ptr %a279 call void @finch_str_drop(ptr %a279) - br label %endif5375 -endif5375: + br label %endif5379 +endif5379: %t280 = load ptr, ptr %a1 %t281 = icmp eq ptr %t280, null - br i1 %t281, label %panic5376, label %ok5377 -panic5376: + br i1 %t281, label %panic5380, label %ok5381 +panic5380: call void @finch_panic(ptr @.str.3404, i64 2631, ptr @.str.3405) unreachable -ok5377: +ok5381: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 12 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 %t284 = load { ptr, i64, i64 }, ptr %a172 @@ -54652,22 +54678,22 @@ ok5377: %t293 = insertvalue %S.gen.Loop %t288, { ptr, i64, i64 } %t292, 1 %t294 = load ptr, ptr %a1 %t295 = icmp eq ptr %t294, null - br i1 %t295, label %panic5378, label %ok5379 -panic5378: + br i1 %t295, label %panic5382, label %ok5383 +panic5382: call void @finch_panic(ptr @.str.3406, i64 2631, ptr @.str.3407) unreachable -ok5379: +ok5383: %t296 = getelementptr inbounds %S.gen.Gen, ptr %t294, i32 0, i32 10 %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i32 0, i32 1 %t298 = load i64, ptr %t297 %t299 = insertvalue %S.gen.Loop %t293, i64 %t298, 2 %t300 = load ptr, ptr %a1 %t301 = icmp eq ptr %t300, null - br i1 %t301, label %panic5380, label %ok5381 -panic5380: + br i1 %t301, label %panic5384, label %ok5385 +panic5384: call void @finch_panic(ptr @.str.3408, i64 2631, ptr @.str.3409) unreachable -ok5381: +ok5385: %t302 = getelementptr inbounds %S.gen.Gen, ptr %t300, i32 0, i32 11 %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i32 0, i32 1 %t304 = load i64, ptr %t303 @@ -54691,8 +54717,8 @@ ok5381: %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 %t319 = load i64, ptr %t318 %t320 = icmp sgt i64 %t319, 0 - br i1 %t320, label %then5382, label %endif5384 -then5382: + br i1 %t320, label %then5386, label %endif5388 +then5386: %t321 = load ptr, ptr %a1 %t322 = load %S.ast.Node, ptr %a2 %t323 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -54713,8 +54739,8 @@ then5382: store { ptr, i64, i64 } %t334, ptr %a316 store { ptr, i64, i64 } %t335, ptr %a336 call void @finch_str_drop(ptr %a336) - br label %endif5384 -endif5384: + br label %endif5388 +endif5388: %t337 = load ptr, ptr %a1 %t338 = load %S.ast.Node, ptr %a2 %t339 = load { ptr, i64, i64 }, ptr %a316 @@ -54729,11 +54755,11 @@ endif5384: %t347 = load { ptr, i64, i64 }, ptr %t346 %t348 = extractvalue { ptr, i64, i64 } %t347, 1 %t349 = icmp uge i64 1, %t348 - br i1 %t349, label %range5385, label %inrange5386 -range5385: + br i1 %t349, label %range5389, label %inrange5390 +range5389: call void @finch_panic_index(ptr @.str.3411, i64 2639, i64 1, i64 %t348) unreachable -inrange5386: +inrange5390: %t350 = extractvalue { ptr, i64, i64 } %t347, 0 %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 1 %t352 = load %S.ast.Node, ptr %t351 @@ -54742,20 +54768,20 @@ inrange5386: call void @finch.gen.popScope(ptr %t353) %t354 = load ptr, ptr %a1 %t355 = icmp eq ptr %t354, null - br i1 %t355, label %panic5387, label %ok5388 -panic5387: + br i1 %t355, label %panic5391, label %ok5392 +panic5391: call void @finch_panic(ptr @.str.3412, i64 2641, ptr @.str.3413) unreachable -ok5388: +ok5392: %t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 12 %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 %t358 = load i64, ptr %t357 %t359 = icmp eq i64 %t358, 0 - br i1 %t359, label %panic5389, label %ok5390 -panic5389: + br i1 %t359, label %panic5393, label %ok5394 +panic5393: call void @finch_panic(ptr @.str.3414, i64 2641, ptr @.str.3415) unreachable -ok5390: +ok5394: %t360 = sub i64 %t358, 1 %t361 = load ptr, ptr %t356 %t362 = getelementptr inbounds %S.gen.Loop, ptr %t361, i64 %t360 @@ -54945,38 +54971,38 @@ entry: store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic5391, label %ok5392 -panic5391: + br i1 %t4, label %panic5395, label %ok5396 +panic5395: call void @finch_panic(ptr @.str.3420, i64 2652, ptr @.str.3421) unreachable -ok5392: +ok5396: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 - br i1 %t7, label %then5393, label %endif5395 -then5393: + br i1 %t7, label %then5397, label %endif5399 +then5397: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3422, i64 33, i64 0 }) - br label %endif5395 -endif5395: + br label %endif5399 +endif5399: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 - br label %logic.from5396 -logic.from5396: - br i1 %t13, label %logic.rhs5397, label %logic.end5398 -logic.rhs5397: + br label %logic.from5400 +logic.from5400: + br i1 %t13, label %logic.rhs5401, label %logic.end5402 +logic.rhs5401: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t15 = load { ptr, i64, i64 }, ptr %t14 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 0, %t16 - br i1 %t17, label %range5399, label %inrange5400 -range5399: + br i1 %t17, label %range5403, label %inrange5404 +range5403: call void @finch_panic_index(ptr @.str.3423, i64 2656, i64 0, i64 %t16) unreachable -inrange5400: +inrange5404: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 %t20 = getelementptr inbounds %S.ast.Node, ptr %t19, i32 0, i32 0 @@ -54985,24 +55011,24 @@ inrange5400: store { ptr, i64, i64 } { ptr @.str.3424, i64 4, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 - br label %logic.rend5401 -logic.rend5401: - br label %logic.end5398 -logic.end5398: - %t26 = phi i1 [ false, %logic.from5396 ], [ %t25, %logic.rend5401 ] - br label %logic.from5402 -logic.from5402: - br i1 %t26, label %logic.rhs5403, label %logic.end5404 -logic.rhs5403: + br label %logic.rend5405 +logic.rend5405: + br label %logic.end5402 +logic.end5402: + %t26 = phi i1 [ false, %logic.from5400 ], [ %t25, %logic.rend5405 ] + br label %logic.from5406 +logic.from5406: + br i1 %t26, label %logic.rhs5407, label %logic.end5408 +logic.rhs5407: %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 - br i1 %t30, label %range5405, label %inrange5406 -range5405: + br i1 %t30, label %range5409, label %inrange5410 +range5409: call void @finch_panic_index(ptr @.str.3425, i64 2656, i64 0, i64 %t29) unreachable -inrange5406: +inrange5410: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 0 %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i32 0, i32 1 @@ -55011,22 +55037,22 @@ inrange5406: store { ptr, i64, i64 } { ptr @.str.3426, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br label %logic.rend5407 -logic.rend5407: - br label %logic.end5404 -logic.end5404: - %t39 = phi i1 [ false, %logic.from5402 ], [ %t38, %logic.rend5407 ] - br i1 %t39, label %then5408, label %endif5410 -then5408: + br label %logic.rend5411 +logic.rend5411: + br label %logic.end5408 +logic.end5408: + %t39 = phi i1 [ false, %logic.from5406 ], [ %t38, %logic.rend5411 ] + br i1 %t39, label %then5412, label %endif5414 +then5412: %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 0, %t42 - br i1 %t43, label %range5411, label %inrange5412 -range5411: + br i1 %t43, label %range5415, label %inrange5416 +range5415: call void @finch_panic_index(ptr @.str.3427, i64 2657, i64 0, i64 %t42) unreachable -inrange5412: +inrange5416: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 0 %t46 = load %S.ast.Node, ptr %t45 @@ -55036,25 +55062,25 @@ inrange5412: store %S.ast.Node %t49, ptr %a50 %t51 = load ptr, ptr %a1 %t52 = icmp eq ptr %t51, null - br i1 %t52, label %panic5413, label %ok5414 -panic5413: + br i1 %t52, label %panic5417, label %ok5418 +panic5417: call void @finch_panic(ptr @.str.3428, i64 2658, ptr @.str.3429) unreachable -ok5414: +ok5418: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 13 %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 9 %t55 = load i1, ptr %t54 %t56 = xor i1 %t55, true - br i1 %t56, label %then5415, label %endif5417 -then5415: + br i1 %t56, label %then5419, label %endif5421 +then5419: store { ptr, i64, i64 } { ptr @.str.3430, i64 1, i64 0 }, ptr %a57 %t58 = load ptr, ptr %a1 %t59 = icmp eq ptr %t58, null - br i1 %t59, label %panic5418, label %ok5419 -panic5418: + br i1 %t59, label %panic5422, label %ok5423 +panic5422: call void @finch_panic(ptr @.str.3431, i64 2660, ptr @.str.3432) unreachable -ok5419: +ok5423: %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 13 %t61 = getelementptr inbounds %S.gen.FnSig, ptr %t60, i32 0, i32 12 %t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i32 0, i32 0 @@ -55063,15 +55089,15 @@ ok5419: store { ptr, i64, i64 } { ptr @.str.3433, i64 4, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp eq i32 %t66, 0 - br i1 %t67, label %then5420, label %endif5422 -then5420: + br i1 %t67, label %then5424, label %endif5426 +then5424: %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null - br i1 %t69, label %panic5423, label %ok5424 -panic5423: + br i1 %t69, label %panic5427, label %ok5428 +panic5427: call void @finch_panic(ptr @.str.3434, i64 2661, ptr @.str.3435) unreachable -ok5424: +ok5428: %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 13 %t71 = getelementptr inbounds %S.gen.FnSig, ptr %t70, i32 0, i32 12 %t72 = load %S.ast.Type, ptr %t71 @@ -55086,17 +55112,17 @@ ok5424: store { ptr, i64, i64 } %t78, ptr %a57 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif5422 -endif5422: + br label %endif5426 +endif5426: %t81 = load ptr, ptr %a1 %t82 = load %S.ast.Node, ptr %a50 %t83 = load ptr, ptr %a1 %t84 = icmp eq ptr %t83, null - br i1 %t84, label %panic5425, label %ok5426 -panic5425: + br i1 %t84, label %panic5429, label %ok5430 +panic5429: call void @finch_panic(ptr @.str.3438, i64 2663, ptr @.str.3439) unreachable -ok5426: +ok5430: %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 13 %t86 = getelementptr inbounds %S.gen.FnSig, ptr %t85, i32 0, i32 1 %t87 = load { ptr, i64, i64 }, ptr %t86 @@ -55127,8 +55153,8 @@ ok5426: store { ptr, i64, i64 } %t107, ptr %a108 call void @finch_str_drop(ptr %a108) call void @finch_str_drop(ptr %a57) - br label %endif5417 -endif5417: + br label %endif5421 +endif5421: %t109 = load ptr, ptr %a1 %t110 = load %S.ast.Node, ptr %a50 call void @finch.gen.checkArgs(ptr %t109, %S.ast.Node %t110, i64 0, i64 1, { ptr, i64, i64 } { ptr @.str.3442, i64 5, i64 0 }) @@ -55138,11 +55164,11 @@ endif5417: %t114 = load { ptr, i64, i64 }, ptr %t113 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 0, %t115 - br i1 %t116, label %range5427, label %inrange5428 -range5427: + br i1 %t116, label %range5431, label %inrange5432 +range5431: call void @finch_panic_index(ptr @.str.3443, i64 2666, i64 0, i64 %t115) unreachable -inrange5428: +inrange5432: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds %S.ast.Node, ptr %t117, i64 0 %t119 = load %S.ast.Node, ptr %t118 @@ -55152,11 +55178,11 @@ inrange5428: %t123 = load { ptr, i64, i64 }, ptr %t122 %t124 = extractvalue { ptr, i64, i64 } %t123, 1 %t125 = icmp uge i64 0, %t124 - br i1 %t125, label %range5429, label %inrange5430 -range5429: + br i1 %t125, label %range5433, label %inrange5434 +range5433: call void @finch_panic_index(ptr @.str.3445, i64 2666, i64 0, i64 %t124) unreachable -inrange5430: +inrange5434: %t126 = extractvalue { ptr, i64, i64 } %t123, 0 %t127 = getelementptr inbounds %S.ast.Node, ptr %t126, i64 0 %t128 = load %S.ast.Node, ptr %t127 @@ -55178,11 +55204,11 @@ inrange5430: %t140 = load ptr, ptr %a1 %t141 = load ptr, ptr %a1 %t142 = icmp eq ptr %t141, null - br i1 %t142, label %panic5431, label %ok5432 -panic5431: + br i1 %t142, label %panic5435, label %ok5436 +panic5435: call void @finch_panic(ptr @.str.3448, i64 2670, ptr @.str.3449) unreachable -ok5432: +ok5436: %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 13 %t144 = load %S.gen.FnSig, ptr %t143 %t145 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t140, %S.gen.FnSig %t144) @@ -55202,11 +55228,11 @@ ok5432: %t157 = load ptr, ptr %a1 %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null - br i1 %t159, label %panic5433, label %ok5434 -panic5433: + br i1 %t159, label %panic5437, label %ok5438 +panic5437: call void @finch_panic(ptr @.str.3452, i64 2670, ptr @.str.3453) unreachable -ok5434: +ok5438: %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 13 %t161 = load %S.gen.FnSig, ptr %t160 %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t157, %S.gen.FnSig %t161) @@ -55251,25 +55277,25 @@ ok5434: call void @finch_str_drop(ptr %a192) %t193 = load ptr, ptr %a1 %t194 = icmp eq ptr %t193, null - br i1 %t194, label %panic5435, label %ok5436 -panic5435: + br i1 %t194, label %panic5439, label %ok5440 +panic5439: call void @finch_panic(ptr @.str.3456, i64 2671, ptr @.str.3457) unreachable -ok5436: +ok5440: %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 store i1 true, ptr %t195 call void @finch_str_drop(ptr %a136) call void @finch.drop.S_gen_Val(ptr %a132) call void @finch.drop.S_ast_Node(ptr %a50) ret void -endif5410: +endif5414: %t196 = load ptr, ptr %a1 %t197 = icmp eq ptr %t196, null - br i1 %t197, label %panic5437, label %ok5438 -panic5437: + br i1 %t197, label %panic5441, label %ok5442 +panic5441: call void @finch_panic(ptr @.str.3458, i64 2674, ptr @.str.3459) unreachable -ok5438: +ok5442: %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 13 %t199 = getelementptr inbounds %S.gen.FnSig, ptr %t198, i32 0, i32 12 %t200 = getelementptr inbounds %S.ast.Type, ptr %t199, i32 0, i32 0 @@ -55278,34 +55304,34 @@ ok5438: store { ptr, i64, i64 } { ptr @.str.3460, i64 4, i64 0 }, ptr %a203 %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) %t205 = icmp ne i32 %t204, 0 - br i1 %t205, label %then5439, label %endif5441 -then5439: + br i1 %t205, label %then5443, label %endif5445 +then5443: %t206 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 %t208 = load i64, ptr %t207 %t209 = icmp sgt i64 %t208, 0 - br i1 %t209, label %then5442, label %endif5444 -then5442: + br i1 %t209, label %then5446, label %endif5448 +then5446: %t210 = load ptr, ptr %a1 %t211 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t212 = load { ptr, i64, i64 }, ptr %t211 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 0, %t213 - br i1 %t214, label %range5445, label %inrange5446 -range5445: + br i1 %t214, label %range5449, label %inrange5450 +range5449: call void @finch_panic_index(ptr @.str.3461, i64 2676, i64 0, i64 %t213) unreachable -inrange5446: +inrange5450: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 0 %t217 = load %S.ast.Node, ptr %t216 %t218 = load ptr, ptr %a1 %t219 = icmp eq ptr %t218, null - br i1 %t219, label %panic5447, label %ok5448 -panic5447: + br i1 %t219, label %panic5451, label %ok5452 +panic5451: call void @finch_panic(ptr @.str.3463, i64 2676, ptr @.str.3464) unreachable -ok5448: +ok5452: %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 13 %t221 = getelementptr inbounds %S.gen.FnSig, ptr %t220, i32 0, i32 1 %t222 = load { ptr, i64, i64 }, ptr %t221 @@ -55322,33 +55348,33 @@ ok5448: call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t231) store { ptr, i64, i64 } %t231, ptr %a232 call void @finch_str_drop(ptr %a232) - br label %endif5444 -endif5444: + br label %endif5448 +endif5448: %t233 = load ptr, ptr %a1 call void @finch.gen.dropPending(ptr %t233, i64 0) %t234 = load ptr, ptr %a1 call void @finch.gen.unwind(ptr %t234, i64 0) %t235 = load ptr, ptr %a1 %t236 = icmp eq ptr %t235, null - br i1 %t236, label %panic5449, label %ok5450 -panic5449: + br i1 %t236, label %panic5453, label %ok5454 +panic5453: call void @finch_panic(ptr @.str.3466, i64 2680, ptr @.str.3467) unreachable -ok5450: +ok5454: %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 13 %t238 = getelementptr inbounds %S.gen.FnSig, ptr %t237, i32 0, i32 9 %t239 = load i1, ptr %t238 - br i1 %t239, label %then5451, label %else5452 -then5451: + br i1 %t239, label %then5455, label %else5456 +then5455: %t240 = load ptr, ptr %a1 %t241 = load ptr, ptr %a1 %t242 = load ptr, ptr %a1 %t243 = icmp eq ptr %t242, null - br i1 %t243, label %panic5454, label %ok5455 -panic5454: + br i1 %t243, label %panic5458, label %ok5459 +panic5458: call void @finch_panic(ptr @.str.3469, i64 2681, ptr @.str.3470) unreachable -ok5455: +ok5459: %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 13 %t245 = load %S.gen.FnSig, ptr %t244 %t246 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t241, %S.gen.FnSig %t245) @@ -55367,38 +55393,38 @@ ok5455: call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t256) store { ptr, i64, i64 } %t256, ptr %a257 call void @finch_str_drop(ptr %a257) - br label %endif5453 -else5452: + br label %endif5457 +else5456: %t258 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t258, { ptr, i64, i64 } { ptr @.str.3472, i64 8, i64 0 }) - br label %endif5453 -endif5453: + br label %endif5457 +endif5457: %t259 = load ptr, ptr %a1 %t260 = icmp eq ptr %t259, null - br i1 %t260, label %panic5456, label %ok5457 -panic5456: + br i1 %t260, label %panic5460, label %ok5461 +panic5460: call void @finch_panic(ptr @.str.3473, i64 2685, ptr @.str.3474) unreachable -ok5457: +ok5461: %t261 = getelementptr inbounds %S.gen.Gen, ptr %t259, i32 0, i32 9 store i1 true, ptr %t261 ret void -endif5441: +endif5445: %t262 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i32 0, i32 1 %t264 = load i64, ptr %t263 %t265 = icmp eq i64 %t264, 0 - br i1 %t265, label %then5458, label %endif5460 -then5458: + br i1 %t265, label %then5462, label %endif5464 +then5462: %t266 = load ptr, ptr %a1 %t267 = load %S.ast.Node, ptr %a2 %t268 = load ptr, ptr %a1 %t269 = icmp eq ptr %t268, null - br i1 %t269, label %panic5461, label %ok5462 -panic5461: + br i1 %t269, label %panic5465, label %ok5466 +panic5465: call void @finch_panic(ptr @.str.3476, i64 2689, ptr @.str.3477) unreachable -ok5462: +ok5466: %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 13 %t271 = getelementptr inbounds %S.gen.FnSig, ptr %t270, i32 0, i32 1 %t272 = load { ptr, i64, i64 }, ptr %t271 @@ -55414,11 +55440,11 @@ ok5462: %t281 = load { ptr, i64, i64 }, ptr %a277 %t282 = load ptr, ptr %a1 %t283 = icmp eq ptr %t282, null - br i1 %t283, label %panic5463, label %ok5464 -panic5463: + br i1 %t283, label %panic5467, label %ok5468 +panic5467: call void @finch_panic(ptr @.str.3479, i64 2689, ptr @.str.3480) unreachable -ok5464: +ok5468: %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 13 %t285 = getelementptr inbounds %S.gen.FnSig, ptr %t284, i32 0, i32 12 %t286 = load %S.ast.Type, ptr %t285 @@ -55434,17 +55460,17 @@ ok5464: call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t293) store { ptr, i64, i64 } %t293, ptr %a294 call void @finch_str_drop(ptr %a294) - br label %endif5460 -endif5460: + br label %endif5464 +endif5464: %t295 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t296 = load { ptr, i64, i64 }, ptr %t295 %t297 = extractvalue { ptr, i64, i64 } %t296, 1 %t298 = icmp uge i64 0, %t297 - br i1 %t298, label %range5465, label %inrange5466 -range5465: + br i1 %t298, label %range5469, label %inrange5470 +range5469: call void @finch_panic_index(ptr @.str.3481, i64 2692, i64 0, i64 %t297) unreachable -inrange5466: +inrange5470: %t299 = extractvalue { ptr, i64, i64 } %t296, 0 %t300 = getelementptr inbounds %S.ast.Node, ptr %t299, i64 0 %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i32 0, i32 0 @@ -55453,17 +55479,17 @@ inrange5466: store { ptr, i64, i64 } { ptr @.str.3482, i64 3, i64 0 }, ptr %a304 %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) %t306 = icmp ne i32 %t305, 0 - br i1 %t306, label %then5467, label %endif5469 -then5467: + br i1 %t306, label %then5471, label %endif5473 +then5471: %t307 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t308 = load { ptr, i64, i64 }, ptr %t307 %t309 = extractvalue { ptr, i64, i64 } %t308, 1 %t310 = icmp uge i64 0, %t309 - br i1 %t310, label %range5470, label %inrange5471 -range5470: + br i1 %t310, label %range5474, label %inrange5475 +range5474: call void @finch_panic_index(ptr @.str.3483, i64 2693, i64 0, i64 %t309) unreachable -inrange5471: +inrange5475: %t311 = extractvalue { ptr, i64, i64 } %t308, 0 %t312 = getelementptr inbounds %S.ast.Node, ptr %t311, i64 0 %t313 = getelementptr inbounds %S.ast.Node, ptr %t312, i32 0, i32 1 @@ -55474,71 +55500,71 @@ inrange5471: store { ptr, i64, i64 } %t317, ptr %a318 %t319 = load ptr, ptr %a1 %t320 = icmp eq ptr %t319, null - br i1 %t320, label %panic5472, label %ok5473 -panic5472: + br i1 %t320, label %panic5476, label %ok5477 +panic5476: call void @finch_panic(ptr @.str.3484, i64 2694, ptr @.str.3485) unreachable -ok5473: +ok5477: %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 10 %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i32 0, i32 1 %t323 = load i64, ptr %t322 store i64 %t323, ptr %a324 - br label %while.cond5474 -while.cond5474: + br label %while.cond5478 +while.cond5478: %t325 = load i64, ptr %a324 %t326 = icmp sgt i64 %t325, 0 - br i1 %t326, label %while.body5475, label %while.end5476 -while.body5475: + br i1 %t326, label %while.body5479, label %while.end5480 +while.body5479: %t327 = load i64, ptr %a324 %t328 = sub i64 %t327, 1 store i64 %t328, ptr %a324 store i64 -1, ptr %a329 %t330 = load ptr, ptr %a1 %t331 = icmp eq ptr %t330, null - br i1 %t331, label %panic5477, label %ok5478 -panic5477: + br i1 %t331, label %panic5481, label %ok5482 +panic5481: call void @finch_panic(ptr @.str.3486, i64 2698, ptr @.str.3487) unreachable -ok5478: +ok5482: %t332 = getelementptr inbounds %S.gen.Gen, ptr %t330, i32 0, i32 10 %t333 = load i64, ptr %a324 %t334 = load { ptr, i64, i64 }, ptr %t332 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 - br i1 %t336, label %range5479, label %inrange5480 -range5479: + br i1 %t336, label %range5483, label %inrange5484 +range5483: call void @finch_panic_index(ptr @.str.3488, i64 2698, i64 %t333, i64 %t335) unreachable -inrange5480: +inrange5484: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds %S.gen.Scope, ptr %t337, i64 %t333 %t339 = getelementptr inbounds %S.gen.Scope, ptr %t338, i32 0, i32 0 %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %t339, i32 0, i32 1 %t341 = load i64, ptr %t340 store i64 0, ptr %a342 - br label %for.cond5481 -for.cond5481: + br label %for.cond5485 +for.cond5485: %t343 = load i64, ptr %a342 %t344 = icmp slt i64 %t343, %t341 - br i1 %t344, label %for.body5482, label %for.end5484 -for.body5482: + br i1 %t344, label %for.body5486, label %for.end5488 +for.body5486: %t345 = load ptr, ptr %a1 %t346 = icmp eq ptr %t345, null - br i1 %t346, label %panic5485, label %ok5486 -panic5485: + br i1 %t346, label %panic5489, label %ok5490 +panic5489: call void @finch_panic(ptr @.str.3489, i64 2699, ptr @.str.3490) unreachable -ok5486: +ok5490: %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 10 %t348 = load i64, ptr %a324 %t349 = load { ptr, i64, i64 }, ptr %t347 %t350 = extractvalue { ptr, i64, i64 } %t349, 1 %t351 = icmp uge i64 %t348, %t350 - br i1 %t351, label %range5487, label %inrange5488 -range5487: + br i1 %t351, label %range5491, label %inrange5492 +range5491: call void @finch_panic_index(ptr @.str.3491, i64 2699, i64 %t348, i64 %t350) unreachable -inrange5488: +inrange5492: %t352 = extractvalue { ptr, i64, i64 } %t349, 0 %t353 = getelementptr inbounds %S.gen.Scope, ptr %t352, i64 %t348 %t354 = getelementptr inbounds %S.gen.Scope, ptr %t353, i32 0, i32 0 @@ -55546,11 +55572,11 @@ inrange5488: %t356 = load { ptr, i64, i64 }, ptr %t354 %t357 = extractvalue { ptr, i64, i64 } %t356, 1 %t358 = icmp uge i64 %t355, %t357 - br i1 %t358, label %range5489, label %inrange5490 -range5489: + br i1 %t358, label %range5493, label %inrange5494 +range5493: call void @finch_panic_index(ptr @.str.3492, i64 2699, i64 %t355, i64 %t357) unreachable -inrange5490: +inrange5494: %t359 = extractvalue { ptr, i64, i64 } %t356, 0 %t360 = getelementptr inbounds %S.gen.Var, ptr %t359, i64 %t355 %t361 = getelementptr inbounds %S.gen.Var, ptr %t360, i32 0, i32 0 @@ -55560,40 +55586,40 @@ inrange5490: store { ptr, i64, i64 } %t363, ptr %a365 %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) %t367 = icmp ne i32 %t366, 0 - br label %logic.from5491 -logic.from5491: - br i1 %t367, label %logic.rhs5492, label %logic.end5493 -logic.rhs5492: + br label %logic.from5495 +logic.from5495: + br i1 %t367, label %logic.rhs5496, label %logic.end5497 +logic.rhs5496: %t368 = load ptr, ptr %a1 %t369 = icmp eq ptr %t368, null - br i1 %t369, label %panic5494, label %ok5495 -panic5494: + br i1 %t369, label %panic5498, label %ok5499 +panic5498: call void @finch_panic(ptr @.str.3493, i64 2699, ptr @.str.3494) unreachable -ok5495: +ok5499: %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 44 %t371 = load i1, ptr %t370 - br label %logic.from5496 -logic.from5496: - br i1 %t371, label %logic.rhs5497, label %logic.end5498 -logic.rhs5497: + br label %logic.from5500 +logic.from5500: + br i1 %t371, label %logic.rhs5501, label %logic.end5502 +logic.rhs5501: %t372 = load ptr, ptr %a1 %t373 = icmp eq ptr %t372, null - br i1 %t373, label %panic5499, label %ok5500 -panic5499: + br i1 %t373, label %panic5503, label %ok5504 +panic5503: call void @finch_panic(ptr @.str.3495, i64 2699, ptr @.str.3496) unreachable -ok5500: +ok5504: %t374 = getelementptr inbounds %S.gen.Gen, ptr %t372, i32 0, i32 10 %t375 = load i64, ptr %a324 %t376 = load { ptr, i64, i64 }, ptr %t374 %t377 = extractvalue { ptr, i64, i64 } %t376, 1 %t378 = icmp uge i64 %t375, %t377 - br i1 %t378, label %range5501, label %inrange5502 -range5501: + br i1 %t378, label %range5505, label %inrange5506 +range5505: call void @finch_panic_index(ptr @.str.3497, i64 2699, i64 %t375, i64 %t377) unreachable -inrange5502: +inrange5506: %t379 = extractvalue { ptr, i64, i64 } %t376, 0 %t380 = getelementptr inbounds %S.gen.Scope, ptr %t379, i64 %t375 %t381 = getelementptr inbounds %S.gen.Scope, ptr %t380, i32 0, i32 0 @@ -55601,72 +55627,72 @@ inrange5502: %t383 = load { ptr, i64, i64 }, ptr %t381 %t384 = extractvalue { ptr, i64, i64 } %t383, 1 %t385 = icmp uge i64 %t382, %t384 - br i1 %t385, label %range5503, label %inrange5504 -range5503: + br i1 %t385, label %range5507, label %inrange5508 +range5507: call void @finch_panic_index(ptr @.str.3498, i64 2699, i64 %t382, i64 %t384) unreachable -inrange5504: +inrange5508: %t386 = extractvalue { ptr, i64, i64 } %t383, 0 %t387 = getelementptr inbounds %S.gen.Var, ptr %t386, i64 %t382 %t388 = getelementptr inbounds %S.gen.Var, ptr %t387, i32 0, i32 4 %t389 = load i64, ptr %t388 %t390 = load ptr, ptr %a1 %t391 = icmp eq ptr %t390, null - br i1 %t391, label %panic5505, label %ok5506 -panic5505: + br i1 %t391, label %panic5509, label %ok5510 +panic5509: call void @finch_panic(ptr @.str.3499, i64 2699, ptr @.str.3500) unreachable -ok5506: +ok5510: %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 45 %t393 = load i64, ptr %t392 %t394 = icmp sge i64 %t389, %t393 - br label %logic.rend5507 -logic.rend5507: - br label %logic.end5498 -logic.end5498: - %t395 = phi i1 [ false, %logic.from5496 ], [ %t394, %logic.rend5507 ] + br label %logic.rend5511 +logic.rend5511: + br label %logic.end5502 +logic.end5502: + %t395 = phi i1 [ false, %logic.from5500 ], [ %t394, %logic.rend5511 ] %t396 = xor i1 %t395, true - br label %logic.rend5508 -logic.rend5508: - br label %logic.end5493 -logic.end5493: - %t397 = phi i1 [ false, %logic.from5491 ], [ %t396, %logic.rend5508 ] - br i1 %t397, label %then5509, label %endif5511 -then5509: + br label %logic.rend5512 +logic.rend5512: + br label %logic.end5497 +logic.end5497: + %t397 = phi i1 [ false, %logic.from5495 ], [ %t396, %logic.rend5512 ] + br i1 %t397, label %then5513, label %endif5515 +then5513: %t398 = load i64, ptr %a342 store i64 %t398, ptr %a329 - br label %endif5511 -endif5511: - br label %for.step5483 -for.step5483: + br label %endif5515 +endif5515: + br label %for.step5487 +for.step5487: %t399 = load i64, ptr %a342 %t400 = add i64 %t399, 1 store i64 %t400, ptr %a342 - br label %for.cond5481 -for.end5484: + br label %for.cond5485 +for.end5488: %t401 = load i64, ptr %a329 %t402 = icmp slt i64 %t401, 0 - br i1 %t402, label %then5512, label %endif5514 -then5512: - br label %while.cond5474 -endif5514: + br i1 %t402, label %then5516, label %endif5518 +then5516: + br label %while.cond5478 +endif5518: %t403 = load ptr, ptr %a1 %t404 = icmp eq ptr %t403, null - br i1 %t404, label %panic5515, label %ok5516 -panic5515: + br i1 %t404, label %panic5519, label %ok5520 +panic5519: call void @finch_panic(ptr @.str.3501, i64 2706, ptr @.str.3502) unreachable -ok5516: +ok5520: %t405 = getelementptr inbounds %S.gen.Gen, ptr %t403, i32 0, i32 10 %t406 = load i64, ptr %a324 %t407 = load { ptr, i64, i64 }, ptr %t405 %t408 = extractvalue { ptr, i64, i64 } %t407, 1 %t409 = icmp uge i64 %t406, %t408 - br i1 %t409, label %range5517, label %inrange5518 -range5517: + br i1 %t409, label %range5521, label %inrange5522 +range5521: call void @finch_panic_index(ptr @.str.3503, i64 2706, i64 %t406, i64 %t408) unreachable -inrange5518: +inrange5522: %t410 = extractvalue { ptr, i64, i64 } %t407, 0 %t411 = getelementptr inbounds %S.gen.Scope, ptr %t410, i64 %t406 %t412 = getelementptr inbounds %S.gen.Scope, ptr %t411, i32 0, i32 0 @@ -55674,11 +55700,11 @@ inrange5518: %t414 = load { ptr, i64, i64 }, ptr %t412 %t415 = extractvalue { ptr, i64, i64 } %t414, 1 %t416 = icmp uge i64 %t413, %t415 - br i1 %t416, label %range5519, label %inrange5520 -range5519: + br i1 %t416, label %range5523, label %inrange5524 +range5523: call void @finch_panic_index(ptr @.str.3504, i64 2706, i64 %t413, i64 %t415) unreachable -inrange5520: +inrange5524: %t417 = extractvalue { ptr, i64, i64 } %t414, 0 %t418 = getelementptr inbounds %S.gen.Var, ptr %t417, i64 %t413 %t419 = load %S.gen.Var, ptr %t418 @@ -55688,30 +55714,30 @@ inrange5520: store %S.gen.Var %t422, ptr %a423 %t424 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 5 %t425 = load i1, ptr %t424 - br label %logic.from5521 -logic.from5521: - br i1 %t425, label %logic.rhs5522, label %logic.end5523 -logic.rhs5522: + br label %logic.from5525 +logic.from5525: + br i1 %t425, label %logic.rhs5526, label %logic.end5527 +logic.rhs5526: %t426 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 %t427 = load %S.ast.Type, ptr %t426 %t428 = load ptr, ptr %a1 %t429 = icmp eq ptr %t428, null - br i1 %t429, label %panic5524, label %ok5525 -panic5524: + br i1 %t429, label %panic5528, label %ok5529 +panic5528: call void @finch_panic(ptr @.str.3505, i64 2707, ptr @.str.3506) unreachable -ok5525: +ok5529: %t430 = getelementptr inbounds %S.gen.Gen, ptr %t428, i32 0, i32 13 %t431 = getelementptr inbounds %S.gen.FnSig, ptr %t430, i32 0, i32 12 %t432 = load %S.ast.Type, ptr %t431 %t433 = call i1 @finch.ast.same(%S.ast.Type %t427, %S.ast.Type %t432) - br label %logic.rend5526 -logic.rend5526: - br label %logic.end5523 -logic.end5523: - %t434 = phi i1 [ false, %logic.from5521 ], [ %t433, %logic.rend5526 ] - br i1 %t434, label %then5527, label %endif5529 -then5527: + br label %logic.rend5530 +logic.rend5530: + br label %logic.end5527 +logic.end5527: + %t434 = phi i1 [ false, %logic.from5525 ], [ %t433, %logic.rend5530 ] + br i1 %t434, label %then5531, label %endif5533 +then5531: %t435 = load ptr, ptr %a1 %t436 = load ptr, ptr %a1 %t437 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 @@ -55725,21 +55751,21 @@ then5527: store { ptr, i64, i64 } %t442, ptr %a444 %t445 = load ptr, ptr %a1 %t446 = icmp eq ptr %t445, null - br i1 %t446, label %panic5530, label %ok5531 -panic5530: + br i1 %t446, label %panic5534, label %ok5535 +panic5534: call void @finch_panic(ptr @.str.3507, i64 2709, ptr @.str.3508) unreachable -ok5531: +ok5535: %t447 = getelementptr inbounds %S.gen.Gen, ptr %t445, i32 0, i32 10 %t448 = load i64, ptr %a324 %t449 = load { ptr, i64, i64 }, ptr %t447 %t450 = extractvalue { ptr, i64, i64 } %t449, 1 %t451 = icmp uge i64 %t448, %t450 - br i1 %t451, label %range5532, label %inrange5533 -range5532: + br i1 %t451, label %range5536, label %inrange5537 +range5536: call void @finch_panic_index(ptr @.str.3509, i64 2709, i64 %t448, i64 %t450) unreachable -inrange5533: +inrange5537: %t452 = extractvalue { ptr, i64, i64 } %t449, 0 %t453 = getelementptr inbounds %S.gen.Scope, ptr %t452, i64 %t448 %t454 = getelementptr inbounds %S.gen.Scope, ptr %t453, i32 0, i32 0 @@ -55747,11 +55773,11 @@ inrange5533: %t456 = load { ptr, i64, i64 }, ptr %t454 %t457 = extractvalue { ptr, i64, i64 } %t456, 1 %t458 = icmp uge i64 %t455, %t457 - br i1 %t458, label %range5534, label %inrange5535 -range5534: + br i1 %t458, label %range5538, label %inrange5539 +range5538: call void @finch_panic_index(ptr @.str.3510, i64 2709, i64 %t455, i64 %t457) unreachable -inrange5535: +inrange5539: %t459 = extractvalue { ptr, i64, i64 } %t456, 0 %t460 = getelementptr inbounds %S.gen.Var, ptr %t459, i64 %t455 %t461 = getelementptr inbounds %S.gen.Var, ptr %t460, i32 0, i32 6 @@ -55762,21 +55788,21 @@ inrange5535: call void @finch.gen.unwind(ptr %t463, i64 0) %t464 = load ptr, ptr %a1 %t465 = icmp eq ptr %t464, null - br i1 %t465, label %panic5536, label %ok5537 -panic5536: + br i1 %t465, label %panic5540, label %ok5541 +panic5540: call void @finch_panic(ptr @.str.3511, i64 2712, ptr @.str.3512) unreachable -ok5537: +ok5541: %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 10 %t467 = load i64, ptr %a324 %t468 = load { ptr, i64, i64 }, ptr %t466 %t469 = extractvalue { ptr, i64, i64 } %t468, 1 %t470 = icmp uge i64 %t467, %t469 - br i1 %t470, label %range5538, label %inrange5539 -range5538: + br i1 %t470, label %range5542, label %inrange5543 +range5542: call void @finch_panic_index(ptr @.str.3513, i64 2712, i64 %t467, i64 %t469) unreachable -inrange5539: +inrange5543: %t471 = extractvalue { ptr, i64, i64 } %t468, 0 %t472 = getelementptr inbounds %S.gen.Scope, ptr %t471, i64 %t467 %t473 = getelementptr inbounds %S.gen.Scope, ptr %t472, i32 0, i32 0 @@ -55784,11 +55810,11 @@ inrange5539: %t475 = load { ptr, i64, i64 }, ptr %t473 %t476 = extractvalue { ptr, i64, i64 } %t475, 1 %t477 = icmp uge i64 %t474, %t476 - br i1 %t477, label %range5540, label %inrange5541 -range5540: + br i1 %t477, label %range5544, label %inrange5545 +range5544: call void @finch_panic_index(ptr @.str.3514, i64 2712, i64 %t474, i64 %t476) unreachable -inrange5541: +inrange5545: %t478 = extractvalue { ptr, i64, i64 } %t475, 0 %t479 = getelementptr inbounds %S.gen.Var, ptr %t478, i64 %t474 %t480 = getelementptr inbounds %S.gen.Var, ptr %t479, i32 0, i32 6 @@ -55800,45 +55826,45 @@ inrange5541: call void @finch.drop.S_gen_Var(ptr %a423) call void @finch_str_drop(ptr %a318) ret void -endif5529: +endif5533: call void @finch.drop.S_gen_Var(ptr %a423) - br label %while.end5476 -while.end5476: + br label %while.end5480 +while.end5480: call void @finch_str_drop(ptr %a318) - br label %endif5469 -endif5469: + br label %endif5473 +endif5473: %t483 = load ptr, ptr %a1 %t484 = load ptr, ptr %a1 %t485 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t486 = load { ptr, i64, i64 }, ptr %t485 %t487 = extractvalue { ptr, i64, i64 } %t486, 1 %t488 = icmp uge i64 0, %t487 - br i1 %t488, label %range5542, label %inrange5543 -range5542: + br i1 %t488, label %range5546, label %inrange5547 +range5546: call void @finch_panic_index(ptr @.str.3515, i64 2719, i64 0, i64 %t487) unreachable -inrange5543: +inrange5547: %t489 = extractvalue { ptr, i64, i64 } %t486, 0 %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 %t491 = load %S.ast.Node, ptr %t490 %t492 = load ptr, ptr %a1 %t493 = icmp eq ptr %t492, null - br i1 %t493, label %panic5544, label %ok5545 -panic5544: + br i1 %t493, label %panic5548, label %ok5549 +panic5548: call void @finch_panic(ptr @.str.3516, i64 2719, ptr @.str.3517) unreachable -ok5545: +ok5549: %t494 = getelementptr inbounds %S.gen.Gen, ptr %t492, i32 0, i32 13 %t495 = getelementptr inbounds %S.gen.FnSig, ptr %t494, i32 0, i32 12 %t496 = load %S.ast.Type, ptr %t495 %t497 = call %S.gen.Val @finch.gen.exprWant(ptr %t484, %S.ast.Node %t491, %S.ast.Type %t496) %t498 = load ptr, ptr %a1 %t499 = icmp eq ptr %t498, null - br i1 %t499, label %panic5546, label %ok5547 -panic5546: + br i1 %t499, label %panic5550, label %ok5551 +panic5550: call void @finch_panic(ptr @.str.3518, i64 2719, ptr @.str.3519) unreachable -ok5547: +ok5551: %t500 = getelementptr inbounds %S.gen.Gen, ptr %t498, i32 0, i32 13 %t501 = getelementptr inbounds %S.gen.FnSig, ptr %t500, i32 0, i32 12 %t502 = load %S.ast.Type, ptr %t501 @@ -55846,11 +55872,11 @@ ok5547: %t504 = load { ptr, i64, i64 }, ptr %t503 %t505 = extractvalue { ptr, i64, i64 } %t504, 1 %t506 = icmp uge i64 0, %t505 - br i1 %t506, label %range5548, label %inrange5549 -range5548: + br i1 %t506, label %range5552, label %inrange5553 +range5552: call void @finch_panic_index(ptr @.str.3520, i64 2719, i64 0, i64 %t505) unreachable -inrange5549: +inrange5553: %t507 = extractvalue { ptr, i64, i64 } %t504, 0 %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 0 %t509 = load %S.ast.Node, ptr %t508 @@ -55953,25 +55979,25 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic5550, label %ok5551 -panic5550: + br i1 %t4, label %panic5554, label %ok5555 +panic5554: call void @finch_panic(ptr @.str.3522, i64 2727, ptr @.str.3523) unreachable -ok5551: +ok5555: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 %t6 = getelementptr inbounds %S.gen.FnSig, ptr %t5, i32 0, i32 9 %t7 = load i1, ptr %t6 - br i1 %t7, label %then5552, label %else5553 -then5552: + br i1 %t7, label %then5556, label %else5557 +then5556: %t8 = load ptr, ptr %a1 %t9 = load ptr, ptr %a1 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic5555, label %ok5556 -panic5555: + br i1 %t11, label %panic5559, label %ok5560 +panic5559: call void @finch_panic(ptr @.str.3525, i64 2728, ptr @.str.3526) unreachable -ok5556: +ok5560: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 %t13 = load %S.gen.FnSig, ptr %t12 %t14 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t9, %S.gen.FnSig %t13) @@ -55995,11 +56021,11 @@ ok5556: %t29 = load ptr, ptr %a1 %t30 = load ptr, ptr %a1 %t31 = icmp eq ptr %t30, null - br i1 %t31, label %panic5557, label %ok5558 -panic5557: + br i1 %t31, label %panic5561, label %ok5562 +panic5561: call void @finch_panic(ptr @.str.3529, i64 2729, ptr @.str.3530) unreachable -ok5558: +ok5562: %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 13 %t33 = load %S.gen.FnSig, ptr %t32 %t34 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t29, %S.gen.FnSig %t33) @@ -56031,11 +56057,11 @@ ok5558: %t56 = load ptr, ptr %a1 %t57 = load ptr, ptr %a1 %t58 = icmp eq ptr %t57, null - br i1 %t58, label %panic5559, label %ok5560 -panic5559: + br i1 %t58, label %panic5563, label %ok5564 +panic5563: call void @finch_panic(ptr @.str.3533, i64 2729, ptr @.str.3534) unreachable -ok5560: +ok5564: %t59 = getelementptr inbounds %S.gen.Gen, ptr %t57, i32 0, i32 13 %t60 = getelementptr inbounds %S.gen.FnSig, ptr %t59, i32 0, i32 12 %t61 = load %S.ast.Type, ptr %t60 @@ -56075,11 +56101,11 @@ ok5560: %t89 = load ptr, ptr %a1 %t90 = load ptr, ptr %a1 %t91 = icmp eq ptr %t90, null - br i1 %t91, label %panic5561, label %ok5562 -panic5561: + br i1 %t91, label %panic5565, label %ok5566 +panic5565: call void @finch_panic(ptr @.str.3538, i64 2730, ptr @.str.3539) unreachable -ok5562: +ok5566: %t92 = getelementptr inbounds %S.gen.Gen, ptr %t90, i32 0, i32 13 %t93 = load %S.gen.FnSig, ptr %t92 %t94 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t89, %S.gen.FnSig %t93) @@ -56107,17 +56133,17 @@ ok5562: call void @finch_str_drop(ptr %a111) call void @finch_str_drop(ptr %a87) call void @finch_str_drop(ptr %a27) - br label %endif5554 -else5553: + br label %endif5558 +else5557: %t112 = load ptr, ptr %a1 %t113 = load ptr, ptr %a1 %t114 = load ptr, ptr %a1 %t115 = icmp eq ptr %t114, null - br i1 %t115, label %panic5563, label %ok5564 -panic5563: + br i1 %t115, label %panic5567, label %ok5568 +panic5567: call void @finch_panic(ptr @.str.3542, i64 2732, ptr @.str.3543) unreachable -ok5564: +ok5568: %t116 = getelementptr inbounds %S.gen.Gen, ptr %t114, i32 0, i32 13 %t117 = getelementptr inbounds %S.gen.FnSig, ptr %t116, i32 0, i32 12 %t118 = load %S.ast.Type, ptr %t117 @@ -56144,15 +56170,15 @@ ok5564: call void @finch.gen.emit(ptr %t112, { ptr, i64, i64 } %t135) store { ptr, i64, i64 } %t135, ptr %a136 call void @finch_str_drop(ptr %a136) - br label %endif5554 -endif5554: + br label %endif5558 +endif5558: %t137 = load ptr, ptr %a1 %t138 = icmp eq ptr %t137, null - br i1 %t138, label %panic5565, label %ok5566 -panic5565: + br i1 %t138, label %panic5569, label %ok5570 +panic5569: call void @finch_panic(ptr @.str.3545, i64 2734, ptr @.str.3546) unreachable -ok5566: +ok5570: %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 9 store i1 true, ptr %t139 ret void @@ -56186,11 +56212,11 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 - br i1 %t7, label %range5567, label %inrange5568 -range5567: + br i1 %t7, label %range5571, label %inrange5572 +range5571: call void @finch_panic_index(ptr @.str.3548, i64 2746, i64 0, i64 %t6) unreachable -inrange5568: +inrange5572: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 0 %t10 = load %S.ast.Type, ptr %t9 @@ -56212,11 +56238,11 @@ inrange5568: %t24 = load { ptr, i64, i64 }, ptr %t23 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 1, %t25 - br i1 %t26, label %range5569, label %inrange5570 -range5569: + br i1 %t26, label %range5573, label %inrange5574 +range5573: call void @finch_panic_index(ptr @.str.3550, i64 2746, i64 1, i64 %t25) unreachable -inrange5570: +inrange5574: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.ast.Type, ptr %t27, i64 1 %t29 = load %S.ast.Type, ptr %t28 @@ -56535,11 +56561,11 @@ entry: %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 - br i1 %t9, label %range5571, label %inrange5572 -range5571: + br i1 %t9, label %range5575, label %inrange5576 +range5575: call void @finch_panic_index(ptr @.str.3565, i64 2766, i64 0, i64 %t8) unreachable -inrange5572: +inrange5576: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 @@ -56548,14 +56574,14 @@ inrange5572: store { ptr, i64, i64 } { ptr @.str.3566, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br i1 %t17, label %then5573, label %endif5575 -then5573: + br i1 %t17, label %then5577, label %endif5579 +then5577: %t18 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } { ptr @.str.3567, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t18, ptr %a19 call void @finch_str_drop(ptr %a19) - br label %endif5575 -endif5575: + br label %endif5579 +endif5579: %t20 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } { ptr @.str.3568, i64 4, i64 0 }, ptr %a22 store { ptr, i64, i64 } %t20, ptr %a23 @@ -56602,11 +56628,11 @@ endif5575: %t57 = load { ptr, i64, i64 }, ptr %t56 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 0, %t58 - br i1 %t59, label %range5576, label %inrange5577 -range5576: + br i1 %t59, label %range5580, label %inrange5581 +range5580: call void @finch_panic_index(ptr @.str.3572, i64 2769, i64 0, i64 %t58) unreachable -inrange5577: +inrange5581: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i64 0 %t62 = load %S.ast.Type, ptr %t61 @@ -56700,20 +56726,20 @@ entry: store { ptr, i64, i64 } { ptr @.str.3576, i64 6, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br label %logic.from5578 -logic.from5578: - br i1 %t9, label %logic.rhs5579, label %logic.end5580 -logic.rhs5579: + br label %logic.from5582 +logic.from5582: + br i1 %t9, label %logic.rhs5583, label %logic.end5584 +logic.rhs5583: %t10 = load ptr, ptr %a1 %t11 = load %S.ast.Type, ptr %a2 %t12 = call i1 @finch.gen.hasDefaults(ptr %t10, %S.ast.Type %t11) - br label %logic.rend5581 -logic.rend5581: - br label %logic.end5580 -logic.end5580: - %t13 = phi i1 [ false, %logic.from5578 ], [ %t12, %logic.rend5581 ] - br i1 %t13, label %then5582, label %endif5584 -then5582: + br label %logic.rend5585 +logic.rend5585: + br label %logic.end5584 +logic.end5584: + %t13 = phi i1 [ false, %logic.from5582 ], [ %t12, %logic.rend5585 ] + br i1 %t13, label %then5586, label %endif5588 +then5586: store { ptr, i64, i64 } zeroinitializer, ptr %a14 store { ptr, i64, i64 } zeroinitializer, ptr %a15 %t16 = load ptr, ptr %a1 @@ -56736,7 +56762,7 @@ then5582: call void @finch.drop.arr_str(ptr %a15) call void @finch.drop.arr_S_ast_Node(ptr %a14) ret { ptr, i64, i64 } %t30 -endif5584: +endif5588: %t32 = load %S.ast.Type, ptr %a2 %t33 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t32) ret { ptr, i64, i64 } %t33 @@ -56891,11 +56917,11 @@ entry: %t87 = load { ptr, i64, i64 }, ptr %t86 %t88 = extractvalue { ptr, i64, i64 } %t87, 1 %t89 = icmp uge i64 0, %t88 - br i1 %t89, label %range5585, label %inrange5586 -range5585: + br i1 %t89, label %range5589, label %inrange5590 +range5589: call void @finch_panic_index(ptr @.str.3588, i64 2797, i64 0, i64 %t88) unreachable -inrange5586: +inrange5590: %t90 = extractvalue { ptr, i64, i64 } %t87, 0 %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i64 0 %t92 = load %S.ast.Type, ptr %t91 @@ -56903,19 +56929,19 @@ inrange5586: store { ptr, i64, i64 } %t84, ptr %a93 call void @finch_str_drop(ptr %a93) %t94 = load i1, ptr %a5 - br i1 %t94, label %then5587, label %endif5589 -then5587: + br i1 %t94, label %then5591, label %endif5593 +then5591: %t95 = load ptr, ptr %a1 %t96 = load ptr, ptr %a1 %t97 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t98 = load { ptr, i64, i64 }, ptr %t97 %t99 = extractvalue { ptr, i64, i64 } %t98, 1 %t100 = icmp uge i64 1, %t99 - br i1 %t100, label %range5590, label %inrange5591 -range5590: + br i1 %t100, label %range5594, label %inrange5595 +range5594: call void @finch_panic_index(ptr @.str.3589, i64 2799, i64 1, i64 %t99) unreachable -inrange5591: +inrange5595: %t101 = extractvalue { ptr, i64, i64 } %t98, 0 %t102 = getelementptr inbounds %S.ast.Type, ptr %t101, i64 1 %t103 = load %S.ast.Type, ptr %t102 @@ -56926,11 +56952,11 @@ inrange5591: %t108 = load { ptr, i64, i64 }, ptr %t107 %t109 = extractvalue { ptr, i64, i64 } %t108, 1 %t110 = icmp uge i64 1, %t109 - br i1 %t110, label %range5592, label %inrange5593 -range5592: + br i1 %t110, label %range5596, label %inrange5597 +range5596: call void @finch_panic_index(ptr @.str.3590, i64 2799, i64 1, i64 %t109) unreachable -inrange5593: +inrange5597: %t111 = extractvalue { ptr, i64, i64 } %t108, 0 %t112 = getelementptr inbounds %S.ast.Type, ptr %t111, i64 1 %t113 = load %S.ast.Type, ptr %t112 @@ -56941,11 +56967,11 @@ inrange5593: %t118 = load { ptr, i64, i64 }, ptr %t117 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 1, %t119 - br i1 %t120, label %range5594, label %inrange5595 -range5594: + br i1 %t120, label %range5598, label %inrange5599 +range5598: call void @finch_panic_index(ptr @.str.3591, i64 2799, i64 1, i64 %t119) unreachable -inrange5595: +inrange5599: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 1 %t123 = load %S.ast.Type, ptr %t122 @@ -56968,8 +56994,8 @@ inrange5595: call void @finch_str_drop(ptr %a136) store { ptr, i64, i64 } %t134, ptr %a137 call void @finch_str_drop(ptr %a137) - br label %endif5589 -endif5589: + br label %endif5593 +endif5593: %t138 = load ptr, ptr %a1 %t139 = load { ptr, i64, i64 }, ptr %a57 call void @finch.gen.br(ptr %t138, { ptr, i64, i64 } %t139) @@ -57076,11 +57102,11 @@ entry: %t7 = load { ptr, i64, i64 }, ptr %t6 %t8 = extractvalue { ptr, i64, i64 } %t7, 1 %t9 = icmp uge i64 0, %t8 - br i1 %t9, label %range5596, label %inrange5597 -range5596: + br i1 %t9, label %range5600, label %inrange5601 +range5600: call void @finch_panic_index(ptr @.str.3592, i64 2808, i64 0, i64 %t8) unreachable -inrange5597: +inrange5601: %t10 = extractvalue { ptr, i64, i64 } %t7, 0 %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 %t12 = load %S.ast.Type, ptr %t11 @@ -57092,11 +57118,11 @@ inrange5597: %t18 = load { ptr, i64, i64 }, ptr %t17 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 1, %t19 - br i1 %t20, label %range5598, label %inrange5599 -range5598: + br i1 %t20, label %range5602, label %inrange5603 +range5602: call void @finch_panic_index(ptr @.str.3593, i64 2809, i64 1, i64 %t19) unreachable -inrange5599: +inrange5603: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 %t23 = load %S.ast.Type, ptr %t22 @@ -57110,11 +57136,11 @@ inrange5599: %t31 = load { ptr, i64, i64 }, ptr %t30 %t32 = extractvalue { ptr, i64, i64 } %t31, 1 %t33 = icmp uge i64 1, %t32 - br i1 %t33, label %range5600, label %inrange5601 -range5600: + br i1 %t33, label %range5604, label %inrange5605 +range5604: call void @finch_panic_index(ptr @.str.3594, i64 2810, i64 1, i64 %t32) unreachable -inrange5601: +inrange5605: %t34 = extractvalue { ptr, i64, i64 } %t31, 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 1 %t36 = load %S.ast.Node, ptr %t35 @@ -57125,11 +57151,11 @@ inrange5601: %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = extractvalue { ptr, i64, i64 } %t41, 1 %t43 = icmp uge i64 1, %t42 - br i1 %t43, label %range5602, label %inrange5603 -range5602: + br i1 %t43, label %range5606, label %inrange5607 +range5606: call void @finch_panic_index(ptr @.str.3595, i64 2810, i64 1, i64 %t42) unreachable -inrange5603: +inrange5607: %t44 = extractvalue { ptr, i64, i64 } %t41, 0 %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 1 %t46 = load %S.ast.Node, ptr %t45 @@ -57138,18 +57164,18 @@ inrange5603: call void @finch.drop.S_gen_Val(ptr %a48) store %S.gen.Val %t47, ptr %a49 %t50 = load i1, ptr %a5 - br i1 %t50, label %then5604, label %endif5606 -then5604: + br i1 %t50, label %then5608, label %endif5610 +then5608: %t51 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t52 = load i1, ptr %t51 %t53 = xor i1 %t52, true - br i1 %t53, label %then5607, label %endif5609 -then5607: + br i1 %t53, label %then5611, label %endif5613 +then5611: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } { ptr @.str.3597, i64 44, i64 0 }) - br label %endif5609 -endif5609: + br label %endif5613 +endif5613: %t56 = load ptr, ptr %a1 %t57 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t58 = getelementptr inbounds %S.gen.Place, ptr %t57, i32 0, i32 0 @@ -57179,12 +57205,12 @@ endif5609: call void @finch.drop.S_ast_Type(ptr %a27) call void @finch.drop.S_ast_Type(ptr %a16) ret %S.gen.Ref %t78 -endif5606: +endif5610: store { ptr, i64, i64 } { ptr @.str.3598, i64 0, i64 0 }, ptr %a79 %t80 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t81 = load i1, ptr %t80 - br i1 %t81, label %then5610, label %else5611 -then5610: + br i1 %t81, label %then5614, label %else5615 +then5614: %t82 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t83 = getelementptr inbounds %S.gen.Place, ptr %t82, i32 0, i32 0 %t84 = load { ptr, i64, i64 }, ptr %t83 @@ -57195,8 +57221,8 @@ then5610: store { ptr, i64, i64 } %t87, ptr %a79 store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_drop(ptr %a89) - br label %endif5612 -else5611: + br label %endif5616 +else5615: %t90 = load ptr, ptr %a1 %t91 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t92 = load %S.gen.Val, ptr %t91 @@ -57205,8 +57231,8 @@ else5611: store { ptr, i64, i64 } %t93, ptr %a79 store { ptr, i64, i64 } %t94, ptr %a95 call void @finch_str_drop(ptr %a95) - br label %endif5612 -endif5612: + br label %endif5616 +endif5616: %t96 = load ptr, ptr %a1 %t97 = load %S.gen.Val, ptr %a49 %t98 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t96, %S.gen.Val %t97) @@ -57263,22 +57289,22 @@ endif5612: %t142 = load ptr, ptr %a1 %t143 = load ptr, ptr %a1 %t144 = icmp eq ptr %t143, null - br i1 %t144, label %panic5613, label %ok5614 -panic5613: + br i1 %t144, label %panic5617, label %ok5618 +panic5617: call void @finch_panic(ptr @.str.3607, i64 2834, ptr @.str.3608) unreachable -ok5614: +ok5618: %t145 = getelementptr inbounds %S.gen.Gen, ptr %t143, i32 0, i32 1 %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t147 = load i64, ptr %t146 %t148 = load { ptr, i64, i64 }, ptr %t145 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = icmp uge i64 %t147, %t149 - br i1 %t150, label %range5615, label %inrange5616 -range5615: + br i1 %t150, label %range5619, label %inrange5620 +range5619: call void @finch_panic_index(ptr @.str.3609, i64 2834, i64 %t147, i64 %t149) unreachable -inrange5616: +inrange5620: %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 %t147 %t153 = load { ptr, i64, i64 }, ptr %t152 @@ -57333,11 +57359,11 @@ inrange5616: call void @finch.gen.emit(ptr %t192, { ptr, i64, i64 } { ptr @.str.3613, i64 11, i64 0 }) %t193 = load ptr, ptr %a1 %t194 = icmp eq ptr %t193, null - br i1 %t194, label %panic5617, label %ok5618 -panic5617: + br i1 %t194, label %panic5621, label %ok5622 +panic5621: call void @finch_panic(ptr @.str.3614, i64 2836, ptr @.str.3615) unreachable -ok5618: +ok5622: %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 store i1 true, ptr %t195 %t196 = load ptr, ptr %a1 @@ -57359,8 +57385,8 @@ ok5618: store { ptr, i64, i64 } %t207, ptr %a209 %t210 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t211 = load i1, ptr %t210 - br i1 %t211, label %then5619, label %endif5621 -then5619: + br i1 %t211, label %then5623, label %endif5625 +then5623: %t212 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t213 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t213, ptr %a214 @@ -57384,7 +57410,7 @@ then5619: call void @finch.drop.S_ast_Type(ptr %a27) call void @finch.drop.S_ast_Type(ptr %a16) ret %S.gen.Ref %t223 -endif5621: +endif5625: %t224 = load ptr, ptr %a1 %t225 = load ptr, ptr %a1 %t226 = load %S.ast.Type, ptr %a27 @@ -57408,20 +57434,20 @@ endif5621: %t243 = load ptr, ptr %a1 %t244 = load %S.ast.Type, ptr %a27 %t245 = call i1 @finch.gen.owning(ptr %t243, %S.ast.Type %t244) - br label %logic.from5622 -logic.from5622: - br i1 %t245, label %logic.rhs5623, label %logic.end5624 -logic.rhs5623: + br label %logic.from5626 +logic.from5626: + br i1 %t245, label %logic.rhs5627, label %logic.end5628 +logic.rhs5627: %t246 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t247 = getelementptr inbounds %S.gen.Val, ptr %t246, i32 0, i32 2 %t248 = load i1, ptr %t247 - br label %logic.rend5625 -logic.rend5625: - br label %logic.end5624 -logic.end5624: - %t249 = phi i1 [ false, %logic.from5622 ], [ %t248, %logic.rend5625 ] - br i1 %t249, label %then5626, label %endif5628 -then5626: + br label %logic.rend5629 +logic.rend5629: + br label %logic.end5628 +logic.end5628: + %t249 = phi i1 [ false, %logic.from5626 ], [ %t248, %logic.rend5629 ] + br i1 %t249, label %then5630, label %endif5632 +then5630: %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a231 %t252 = load %S.ast.Type, ptr %a27 @@ -57437,8 +57463,8 @@ then5626: store %S.gen.Val %t260, ptr %a242 store %S.gen.Val %t261, ptr %a262 call void @finch.drop.S_gen_Val(ptr %a262) - br label %endif5628 -endif5628: + br label %endif5632 +endif5632: %t263 = load ptr, ptr %a1 %t264 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t265 = load %S.gen.Val, ptr %t264 @@ -57549,19 +57575,19 @@ entry: store { ptr, i64, i64 } { ptr @.str.3616, i64 3, i64 0 }, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp eq i32 %t16, 0 - br i1 %t17, label %then5629, label %endif5631 -then5629: + br i1 %t17, label %then5633, label %endif5635 +then5633: %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 %t20 = load i64, ptr %t19 %t21 = icmp eq i64 %t20, 0 - br i1 %t21, label %then5632, label %endif5634 -then5632: + br i1 %t21, label %then5636, label %endif5638 +then5636: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t22, %S.ast.Node %t23, { ptr, i64, i64 } { ptr @.str.3617, i64 52, i64 0 }) - br label %endif5634 -endif5634: + br label %endif5638 +endif5638: store i1 true, ptr %a24 store i1 false, ptr %a25 %t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 @@ -57569,12 +57595,12 @@ endif5634: %t28 = load i64, ptr %t27 %t29 = sdiv i64 %t28, 2 store i64 0, ptr %a30 - br label %for.cond5635 -for.cond5635: + br label %for.cond5639 +for.cond5639: %t31 = load i64, ptr %a30 %t32 = icmp slt i64 %t31, %t29 - br i1 %t32, label %for.body5636, label %for.end5638 -for.body5636: + br i1 %t32, label %for.body5640, label %for.end5642 +for.body5640: %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t34 = load i64, ptr %a30 %t35 = mul i64 2, %t34 @@ -57582,11 +57608,11 @@ for.body5636: %t37 = load { ptr, i64, i64 }, ptr %t33 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range5639, label %inrange5640 -range5639: + br i1 %t39, label %range5643, label %inrange5644 +range5643: call void @finch_panic_index(ptr @.str.3618, i64 2866, i64 %t36, i64 %t38) unreachable -inrange5640: +inrange5644: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = load %S.ast.Node, ptr %t41 @@ -57600,32 +57626,32 @@ inrange5640: store { ptr, i64, i64 } { ptr @.str.3619, i64 5, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 - br label %logic.from5641 -logic.from5641: - br i1 %t52, label %logic.rhs5642, label %logic.end5643 -logic.rhs5642: + br label %logic.from5645 +logic.from5645: + br i1 %t52, label %logic.rhs5646, label %logic.end5647 +logic.rhs5646: %t53 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 1 %t54 = load { ptr, i64, i64 }, ptr %t53 store { ptr, i64, i64 } %t54, ptr %a55 store { ptr, i64, i64 } { ptr @.str.3620, i64 1, i64 0 }, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 - br label %logic.rend5644 -logic.rend5644: - br label %logic.end5643 -logic.end5643: - %t59 = phi i1 [ false, %logic.from5641 ], [ %t58, %logic.rend5644 ] - br i1 %t59, label %then5645, label %endif5647 -then5645: + br label %logic.rend5648 +logic.rend5648: + br label %logic.end5647 +logic.end5647: + %t59 = phi i1 [ false, %logic.from5645 ], [ %t58, %logic.rend5648 ] + br i1 %t59, label %then5649, label %endif5651 +then5649: %t60 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 0, %t62 - br i1 %t63, label %range5648, label %inrange5649 -range5648: + br i1 %t63, label %range5652, label %inrange5653 +range5652: call void @finch_panic_index(ptr @.str.3621, i64 2868, i64 0, i64 %t62) unreachable -inrange5649: +inrange5653: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 0 %t66 = load %S.ast.Node, ptr %t65 @@ -57636,50 +57662,50 @@ inrange5649: store %S.ast.Node %t69, ptr %a46 store %S.ast.Node %t70, ptr %a71 call void @finch.drop.S_ast_Node(ptr %a71) - br label %endif5647 -endif5647: + br label %endif5651 +endif5651: %t72 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t73 = load { ptr, i64, i64 }, ptr %t72 store { ptr, i64, i64 } %t73, ptr %a74 store { ptr, i64, i64 } { ptr @.str.3622, i64 5, i64 0 }, ptr %a75 %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) %t77 = icmp ne i32 %t76, 0 - br i1 %t77, label %then5650, label %else5651 -then5650: + br i1 %t77, label %then5654, label %else5655 +then5654: store i1 true, ptr %a25 - br label %endif5652 -else5651: + br label %endif5656 +else5655: %t78 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 store { ptr, i64, i64 } { ptr @.str.3623, i64 3, i64 0 }, ptr %a81 %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) %t83 = icmp eq i32 %t82, 0 - br i1 %t83, label %then5653, label %endif5655 -then5653: + br i1 %t83, label %then5657, label %endif5659 +then5657: store i1 false, ptr %a24 - br label %endif5655 -endif5655: - br label %endif5652 -endif5652: + br label %endif5659 +endif5659: + br label %endif5656 +endif5656: call void @finch.drop.S_ast_Node(ptr %a46) - br label %for.step5637 -for.step5637: + br label %for.step5641 +for.step5641: %t84 = load i64, ptr %a30 %t85 = add i64 %t84, 1 store i64 %t85, ptr %a30 - br label %for.cond5635 -for.end5638: + br label %for.cond5639 +for.end5642: %t86 = load ptr, ptr %a1 %t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t88 = load { ptr, i64, i64 }, ptr %t87 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 0, %t89 - br i1 %t90, label %range5656, label %inrange5657 -range5656: + br i1 %t90, label %range5660, label %inrange5661 +range5660: call void @finch_panic_index(ptr @.str.3624, i64 2876, i64 0, i64 %t89) unreachable -inrange5657: +inrange5661: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds %S.ast.Node, ptr %t91, i64 0 %t93 = load %S.ast.Node, ptr %t92 @@ -57693,11 +57719,11 @@ inrange5657: %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 1, %t100 - br i1 %t101, label %range5658, label %inrange5659 -range5658: + br i1 %t101, label %range5662, label %inrange5663 +range5662: call void @finch_panic_index(ptr @.str.3625, i64 2877, i64 1, i64 %t100) unreachable -inrange5659: +inrange5663: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Node, ptr %t102, i64 1 %t104 = load %S.ast.Node, ptr %t103 @@ -57713,10 +57739,10 @@ inrange5659: store { ptr, i64, i64 } { ptr @.str.3626, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 - br label %logic.from5660 -logic.from5660: - br i1 %t114, label %logic.end5662, label %logic.rhs5661 -logic.rhs5661: + br label %logic.from5664 +logic.from5664: + br i1 %t114, label %logic.end5666, label %logic.rhs5665 +logic.rhs5665: %t115 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i32 0, i32 0 %t117 = load { ptr, i64, i64 }, ptr %t116 @@ -57724,29 +57750,29 @@ logic.rhs5661: store { ptr, i64, i64 } { ptr @.str.3627, i64 4, i64 0 }, ptr %a119 %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) %t121 = icmp ne i32 %t120, 0 - br label %logic.rend5663 -logic.rend5663: - br label %logic.end5662 -logic.end5662: - %t122 = phi i1 [ true, %logic.from5660 ], [ %t121, %logic.rend5663 ] - br i1 %t122, label %then5664, label %endif5666 -then5664: + br label %logic.rend5667 +logic.rend5667: + br label %logic.end5666 +logic.end5666: + %t122 = phi i1 [ true, %logic.from5664 ], [ %t121, %logic.rend5667 ] + br i1 %t122, label %then5668, label %endif5670 +then5668: %t123 = load ptr, ptr %a1 %t124 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t125 = load { ptr, i64, i64 }, ptr %t124 %t126 = extractvalue { ptr, i64, i64 } %t125, 1 %t127 = icmp uge i64 0, %t126 - br i1 %t127, label %range5667, label %inrange5668 -range5667: + br i1 %t127, label %range5671, label %inrange5672 +range5671: call void @finch_panic_index(ptr @.str.3628, i64 2879, i64 0, i64 %t126) unreachable -inrange5668: +inrange5672: %t128 = extractvalue { ptr, i64, i64 } %t125, 0 %t129 = getelementptr inbounds %S.ast.Node, ptr %t128, i64 0 %t130 = load %S.ast.Node, ptr %t129 call void @finch.gen.fail(ptr %t123, %S.ast.Node %t130, { ptr, i64, i64 } { ptr @.str.3629, i64 35, i64 0 }) - br label %endif5666 -endif5666: + br label %endif5670 +endif5670: %t131 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 @@ -57754,10 +57780,10 @@ endif5666: store { ptr, i64, i64 } { ptr @.str.3630, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 - br label %logic.from5669 -logic.from5669: - br i1 %t137, label %logic.end5671, label %logic.rhs5670 -logic.rhs5670: + br label %logic.from5673 +logic.from5673: + br i1 %t137, label %logic.end5675, label %logic.rhs5674 +logic.rhs5674: %t138 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i32 0, i32 0 %t140 = load { ptr, i64, i64 }, ptr %t139 @@ -57765,29 +57791,29 @@ logic.rhs5670: store { ptr, i64, i64 } { ptr @.str.3631, i64 4, i64 0 }, ptr %a142 %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) %t144 = icmp ne i32 %t143, 0 - br label %logic.rend5672 -logic.rend5672: - br label %logic.end5671 -logic.end5671: - %t145 = phi i1 [ true, %logic.from5669 ], [ %t144, %logic.rend5672 ] - br i1 %t145, label %then5673, label %endif5675 -then5673: + br label %logic.rend5676 +logic.rend5676: + br label %logic.end5675 +logic.end5675: + %t145 = phi i1 [ true, %logic.from5673 ], [ %t144, %logic.rend5676 ] + br i1 %t145, label %then5677, label %endif5679 +then5677: %t146 = load ptr, ptr %a1 %t147 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t148 = load { ptr, i64, i64 }, ptr %t147 %t149 = extractvalue { ptr, i64, i64 } %t148, 1 %t150 = icmp uge i64 1, %t149 - br i1 %t150, label %range5676, label %inrange5677 -range5676: + br i1 %t150, label %range5680, label %inrange5681 +range5680: call void @finch_panic_index(ptr @.str.3632, i64 2882, i64 1, i64 %t149) unreachable -inrange5677: +inrange5681: %t151 = extractvalue { ptr, i64, i64 } %t148, 0 %t152 = getelementptr inbounds %S.ast.Node, ptr %t151, i64 1 %t153 = load %S.ast.Node, ptr %t152 call void @finch.gen.fail(ptr %t146, %S.ast.Node %t153, { ptr, i64, i64 } { ptr @.str.3633, i64 37, i64 0 }) - br label %endif5675 -endif5675: + br label %endif5679 +endif5679: %t154 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 %t155 = load %S.ast.Type, ptr %t154 store %S.ast.Type %t155, ptr %a156 @@ -57795,25 +57821,25 @@ endif5675: %t158 = load %S.ast.Type, ptr %a157 store %S.ast.Type %t158, ptr %a159 %t160 = load i1, ptr %a24 - br label %logic.from5678 -logic.from5678: - br i1 %t160, label %logic.rhs5679, label %logic.end5680 -logic.rhs5679: + br label %logic.from5682 +logic.from5682: + br i1 %t160, label %logic.rhs5683, label %logic.end5684 +logic.rhs5683: %t161 = load i1, ptr %a25 - br label %logic.rend5681 -logic.rend5681: - br label %logic.end5680 -logic.end5680: - %t162 = phi i1 [ false, %logic.from5678 ], [ %t161, %logic.rend5681 ] - br i1 %t162, label %then5682, label %endif5684 -then5682: + br label %logic.rend5685 +logic.rend5685: + br label %logic.end5684 +logic.end5684: + %t162 = phi i1 [ false, %logic.from5682 ], [ %t161, %logic.rend5685 ] + br i1 %t162, label %then5686, label %endif5688 +then5686: %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3634, i64 5, i64 0 }) %t164 = load %S.ast.Type, ptr %a159 store %S.ast.Type %t163, ptr %a159 store %S.ast.Type %t164, ptr %a165 call void @finch.drop.S_ast_Type(ptr %a165) - br label %endif5684 -endif5684: + br label %endif5688 +endif5688: %t166 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t167 = load %S.ast.Type, ptr %t166 %t168 = load %S.ast.Type, ptr %a159 @@ -57824,8 +57850,8 @@ endif5684: call void @finch.drop.S_ast_Type(ptr %a171) store i1 true, ptr %a9 call void @finch.drop.S_ast_Type(ptr %a159) - br label %endif5631 -endif5631: + br label %endif5635 +endif5635: %t172 = load ptr, ptr %a1 %t173 = load ptr, ptr %a1 %t174 = load %S.ast.Type, ptr %a8 @@ -57844,11 +57870,11 @@ endif5631: call void @finch_str_drop(ptr %a184) %t185 = load ptr, ptr %a1 %t186 = icmp eq ptr %t185, null - br i1 %t186, label %panic5685, label %ok5686 -panic5685: + br i1 %t186, label %panic5689, label %ok5690 +panic5689: call void @finch_panic(ptr @.str.3636, i64 2893, ptr @.str.3637) unreachable -ok5686: +ok5690: %t187 = getelementptr inbounds %S.gen.Gen, ptr %t185, i32 0, i32 11 %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 %t189 = load i64, ptr %t188 @@ -57862,19 +57888,19 @@ ok5686: %t196 = load i64, ptr %t195 %t197 = sdiv i64 %t196, 2 store i64 0, ptr %a198 - br label %for.cond5687 -for.cond5687: + br label %for.cond5691 +for.cond5691: %t199 = load i64, ptr %a198 %t200 = icmp slt i64 %t199, %t197 - br i1 %t200, label %for.body5688, label %for.end5690 -for.body5688: + br i1 %t200, label %for.body5692, label %for.end5694 +for.body5692: %t201 = load ptr, ptr %a1 %t202 = icmp eq ptr %t201, null - br i1 %t202, label %panic5691, label %ok5692 -panic5691: + br i1 %t202, label %panic5695, label %ok5696 +panic5695: call void @finch_panic(ptr @.str.3638, i64 2896, ptr @.str.3639) unreachable -ok5692: +ok5696: %t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 11 %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 %t205 = load i64, ptr %t204 @@ -57886,19 +57912,19 @@ ok5692: store %S.gen.Val %t210, ptr %a211 %t212 = load i64, ptr %a198 %t213 = icmp eq i64 %t212, 0 - br label %logic.from5693 -logic.from5693: - br i1 %t213, label %logic.rhs5694, label %logic.end5695 -logic.rhs5694: + br label %logic.from5697 +logic.from5697: + br i1 %t213, label %logic.rhs5698, label %logic.end5699 +logic.rhs5698: %t214 = load i1, ptr %a9 - br label %logic.rend5696 -logic.rend5696: - br label %logic.end5695 -logic.end5695: - %t215 = phi i1 [ false, %logic.from5693 ], [ %t214, %logic.rend5696 ] + br label %logic.rend5700 +logic.rend5700: + br label %logic.end5699 +logic.end5699: + %t215 = phi i1 [ false, %logic.from5697 ], [ %t214, %logic.rend5700 ] %t216 = xor i1 %t215, true - br i1 %t216, label %then5697, label %endif5699 -then5697: + br i1 %t216, label %then5701, label %endif5703 +then5701: %t217 = load ptr, ptr %a1 %t218 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t219 = load i64, ptr %a198 @@ -57906,11 +57932,11 @@ then5697: %t221 = load { ptr, i64, i64 }, ptr %t218 %t222 = extractvalue { ptr, i64, i64 } %t221, 1 %t223 = icmp uge i64 %t220, %t222 - br i1 %t223, label %range5700, label %inrange5701 -range5700: + br i1 %t223, label %range5704, label %inrange5705 +range5704: call void @finch_panic_index(ptr @.str.3640, i64 2899, i64 %t220, i64 %t222) unreachable -inrange5701: +inrange5705: %t224 = extractvalue { ptr, i64, i64 } %t221, 0 %t225 = getelementptr inbounds %S.ast.Node, ptr %t224, i64 %t220 %t226 = load %S.ast.Node, ptr %t225 @@ -57918,11 +57944,11 @@ inrange5701: %t228 = load { ptr, i64, i64 }, ptr %t227 %t229 = extractvalue { ptr, i64, i64 } %t228, 1 %t230 = icmp uge i64 0, %t229 - br i1 %t230, label %range5702, label %inrange5703 -range5702: + br i1 %t230, label %range5706, label %inrange5707 +range5706: call void @finch_panic_index(ptr @.str.3641, i64 2899, i64 0, i64 %t229) unreachable -inrange5703: +inrange5707: %t231 = extractvalue { ptr, i64, i64 } %t228, 0 %t232 = getelementptr inbounds %S.ast.Type, ptr %t231, i64 0 %t233 = load %S.ast.Type, ptr %t232 @@ -57931,19 +57957,19 @@ inrange5703: store %S.gen.Val %t234, ptr %a211 store %S.gen.Val %t235, ptr %a236 call void @finch.drop.S_gen_Val(ptr %a236) - br label %endif5699 -endif5699: + br label %endif5703 +endif5703: %t237 = load ptr, ptr %a1 %t238 = load %S.gen.Val, ptr %a211 %t239 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t240 = load { ptr, i64, i64 }, ptr %t239 %t241 = extractvalue { ptr, i64, i64 } %t240, 1 %t242 = icmp uge i64 0, %t241 - br i1 %t242, label %range5704, label %inrange5705 -range5704: + br i1 %t242, label %range5708, label %inrange5709 +range5708: call void @finch_panic_index(ptr @.str.3642, i64 2901, i64 0, i64 %t241) unreachable -inrange5705: +inrange5709: %t243 = extractvalue { ptr, i64, i64 } %t240, 0 %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i64 0 %t245 = load %S.ast.Type, ptr %t244 @@ -57953,11 +57979,11 @@ inrange5705: %t249 = load { ptr, i64, i64 }, ptr %t246 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 %t248, %t250 - br i1 %t251, label %range5706, label %inrange5707 -range5706: + br i1 %t251, label %range5710, label %inrange5711 +range5710: call void @finch_panic_index(ptr @.str.3643, i64 2901, i64 %t248, i64 %t250) unreachable -inrange5707: +inrange5711: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 %t254 = load %S.ast.Node, ptr %t253 @@ -57976,19 +58002,19 @@ inrange5707: store %S.gen.Val %t263, ptr %a264 %t265 = load i64, ptr %a198 %t266 = icmp eq i64 %t265, 0 - br label %logic.from5708 -logic.from5708: - br i1 %t266, label %logic.rhs5709, label %logic.end5710 -logic.rhs5709: + br label %logic.from5712 +logic.from5712: + br i1 %t266, label %logic.rhs5713, label %logic.end5714 +logic.rhs5713: %t267 = load i1, ptr %a9 - br label %logic.rend5711 -logic.rend5711: - br label %logic.end5710 -logic.end5710: - %t268 = phi i1 [ false, %logic.from5708 ], [ %t267, %logic.rend5711 ] + br label %logic.rend5715 +logic.rend5715: + br label %logic.end5714 +logic.end5714: + %t268 = phi i1 [ false, %logic.from5712 ], [ %t267, %logic.rend5715 ] %t269 = xor i1 %t268, true - br i1 %t269, label %then5712, label %endif5714 -then5712: + br i1 %t269, label %then5716, label %endif5718 +then5716: %t270 = load ptr, ptr %a1 %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t272 = load i64, ptr %a198 @@ -57997,11 +58023,11 @@ then5712: %t275 = load { ptr, i64, i64 }, ptr %t271 %t276 = extractvalue { ptr, i64, i64 } %t275, 1 %t277 = icmp uge i64 %t274, %t276 - br i1 %t277, label %range5715, label %inrange5716 -range5715: + br i1 %t277, label %range5719, label %inrange5720 +range5719: call void @finch_panic_index(ptr @.str.3645, i64 2905, i64 %t274, i64 %t276) unreachable -inrange5716: +inrange5720: %t278 = extractvalue { ptr, i64, i64 } %t275, 0 %t279 = getelementptr inbounds %S.ast.Node, ptr %t278, i64 %t274 %t280 = load %S.ast.Node, ptr %t279 @@ -58009,11 +58035,11 @@ inrange5716: %t282 = load { ptr, i64, i64 }, ptr %t281 %t283 = extractvalue { ptr, i64, i64 } %t282, 1 %t284 = icmp uge i64 1, %t283 - br i1 %t284, label %range5717, label %inrange5718 -range5717: + br i1 %t284, label %range5721, label %inrange5722 +range5721: call void @finch_panic_index(ptr @.str.3646, i64 2905, i64 1, i64 %t283) unreachable -inrange5718: +inrange5722: %t285 = extractvalue { ptr, i64, i64 } %t282, 0 %t286 = getelementptr inbounds %S.ast.Type, ptr %t285, i64 1 %t287 = load %S.ast.Type, ptr %t286 @@ -58022,19 +58048,19 @@ inrange5718: store %S.gen.Val %t288, ptr %a264 store %S.gen.Val %t289, ptr %a290 call void @finch.drop.S_gen_Val(ptr %a290) - br label %endif5714 -endif5714: + br label %endif5718 +endif5718: %t291 = load ptr, ptr %a1 %t292 = load %S.gen.Val, ptr %a264 %t293 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 %t294 = load { ptr, i64, i64 }, ptr %t293 %t295 = extractvalue { ptr, i64, i64 } %t294, 1 %t296 = icmp uge i64 1, %t295 - br i1 %t296, label %range5719, label %inrange5720 -range5719: + br i1 %t296, label %range5723, label %inrange5724 +range5723: call void @finch_panic_index(ptr @.str.3647, i64 2907, i64 1, i64 %t295) unreachable -inrange5720: +inrange5724: %t297 = extractvalue { ptr, i64, i64 } %t294, 0 %t298 = getelementptr inbounds %S.ast.Type, ptr %t297, i64 1 %t299 = load %S.ast.Type, ptr %t298 @@ -58045,11 +58071,11 @@ inrange5720: %t304 = load { ptr, i64, i64 }, ptr %t300 %t305 = extractvalue { ptr, i64, i64 } %t304, 1 %t306 = icmp uge i64 %t303, %t305 - br i1 %t306, label %range5721, label %inrange5722 -range5721: + br i1 %t306, label %range5725, label %inrange5726 +range5725: call void @finch_panic_index(ptr @.str.3648, i64 2907, i64 %t303, i64 %t305) unreachable -inrange5722: +inrange5726: %t307 = extractvalue { ptr, i64, i64 } %t304, 0 %t308 = getelementptr inbounds %S.ast.Node, ptr %t307, i64 %t303 %t309 = load %S.ast.Node, ptr %t308 @@ -58080,11 +58106,11 @@ inrange5722: %t332 = load { ptr, i64, i64 }, ptr %t331 %t333 = extractvalue { ptr, i64, i64 } %t332, 1 %t334 = icmp uge i64 1, %t333 - br i1 %t334, label %range5723, label %inrange5724 -range5723: + br i1 %t334, label %range5727, label %inrange5728 +range5727: call void @finch_panic_index(ptr @.str.3650, i64 2911, i64 1, i64 %t333) unreachable -inrange5724: +inrange5728: %t335 = extractvalue { ptr, i64, i64 } %t332, 0 %t336 = getelementptr inbounds %S.ast.Type, ptr %t335, i64 1 %t337 = load %S.ast.Type, ptr %t336 @@ -58095,11 +58121,11 @@ inrange5724: %t341 = load { ptr, i64, i64 }, ptr %t340 %t342 = extractvalue { ptr, i64, i64 } %t341, 1 %t343 = icmp uge i64 1, %t342 - br i1 %t343, label %range5725, label %inrange5726 -range5725: + br i1 %t343, label %range5729, label %inrange5730 +range5729: call void @finch_panic_index(ptr @.str.3651, i64 2912, i64 1, i64 %t342) unreachable -inrange5726: +inrange5730: %t344 = extractvalue { ptr, i64, i64 } %t341, 0 %t345 = getelementptr inbounds %S.ast.Type, ptr %t344, i64 1 %t346 = load %S.ast.Type, ptr %t345 @@ -58120,13 +58146,13 @@ inrange5726: call void @finch_str_drop(ptr %a316) call void @finch.drop.S_gen_Val(ptr %a264) call void @finch.drop.S_gen_Val(ptr %a211) - br label %for.step5689 -for.step5689: + br label %for.step5693 +for.step5693: %t355 = load i64, ptr %a198 %t356 = add i64 %t355, 1 store i64 %t356, ptr %a198 - br label %for.cond5687 -for.end5690: + br label %for.cond5691 +for.end5694: %t357 = load ptr, ptr %a1 %t358 = load i64, ptr %a190 call void @finch.gen.heldEnd(ptr %t357, i64 %t358) @@ -58480,11 +58506,11 @@ entry: %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 0, %t13 - br i1 %t14, label %range5727, label %inrange5728 -range5727: + br i1 %t14, label %range5731, label %inrange5732 +range5731: call void @finch_panic_index(ptr @.str.3652, i64 2922, i64 0, i64 %t13) unreachable -inrange5728: +inrange5732: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 %t17 = load %S.ast.Type, ptr %t16 @@ -58496,11 +58522,11 @@ inrange5728: %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 1, %t24 - br i1 %t25, label %range5729, label %inrange5730 -range5729: + br i1 %t25, label %range5733, label %inrange5734 +range5733: call void @finch_panic_index(ptr @.str.3653, i64 2923, i64 1, i64 %t24) unreachable -inrange5730: +inrange5734: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds %S.ast.Type, ptr %t26, i64 1 %t28 = load %S.ast.Type, ptr %t27 @@ -58513,66 +58539,66 @@ inrange5730: store { ptr, i64, i64 } { ptr @.str.3654, i64 3, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br label %logic.from5731 -logic.from5731: - br i1 %t37, label %logic.end5733, label %logic.rhs5732 -logic.rhs5732: + br label %logic.from5735 +logic.from5735: + br i1 %t37, label %logic.end5737, label %logic.rhs5736 +logic.rhs5736: %t38 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t38, ptr %a39 store { ptr, i64, i64 } { ptr @.str.3655, i64 3, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 - br label %logic.rend5734 -logic.rend5734: - br label %logic.end5733 -logic.end5733: - %t43 = phi i1 [ true, %logic.from5731 ], [ %t42, %logic.rend5734 ] - br label %logic.from5735 -logic.from5735: - br i1 %t43, label %logic.end5737, label %logic.rhs5736 -logic.rhs5736: + br label %logic.rend5738 +logic.rend5738: + br label %logic.end5737 +logic.end5737: + %t43 = phi i1 [ true, %logic.from5735 ], [ %t42, %logic.rend5738 ] + br label %logic.from5739 +logic.from5739: + br i1 %t43, label %logic.end5741, label %logic.rhs5740 +logic.rhs5740: %t44 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.3656, i64 6, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 - br label %logic.rend5738 -logic.rend5738: - br label %logic.end5737 -logic.end5737: - %t49 = phi i1 [ true, %logic.from5735 ], [ %t48, %logic.rend5738 ] - br i1 %t49, label %then5739, label %endif5741 -then5739: + br label %logic.rend5742 +logic.rend5742: + br label %logic.end5741 +logic.end5741: + %t49 = phi i1 [ true, %logic.from5739 ], [ %t48, %logic.rend5742 ] + br i1 %t49, label %then5743, label %endif5745 +then5743: %t50 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.3657, i64 3, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %then5742, label %else5743 -then5742: + br i1 %t54, label %then5746, label %else5747 +then5746: %t55 = load ptr, ptr %a1 %t56 = load %S.ast.Node, ptr %a2 %t57 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t55, %S.ast.Node %t56, i64 1, i64 2, { ptr, i64, i64 } %t57) - br label %endif5744 -else5743: + br label %endif5748 +else5747: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Node, ptr %a2 %t60 = load { ptr, i64, i64 }, ptr %a10 call void @finch.gen.checkArgs(ptr %t58, %S.ast.Node %t59, i64 1, i64 1, { ptr, i64, i64 } %t60) - br label %endif5744 -endif5744: + br label %endif5748 +endif5748: %t61 = load ptr, ptr %a1 %t62 = load ptr, ptr %a1 %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = extractvalue { ptr, i64, i64 } %t64, 1 %t66 = icmp uge i64 1, %t65 - br i1 %t66, label %range5745, label %inrange5746 -range5745: + br i1 %t66, label %range5749, label %inrange5750 +range5749: call void @finch_panic_index(ptr @.str.3658, i64 2930, i64 1, i64 %t65) unreachable -inrange5746: +inrange5750: %t67 = extractvalue { ptr, i64, i64 } %t64, 0 %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 1 %t69 = load %S.ast.Node, ptr %t68 @@ -58583,11 +58609,11 @@ inrange5746: %t74 = load { ptr, i64, i64 }, ptr %t73 %t75 = extractvalue { ptr, i64, i64 } %t74, 1 %t76 = icmp uge i64 1, %t75 - br i1 %t76, label %range5747, label %inrange5748 -range5747: + br i1 %t76, label %range5751, label %inrange5752 +range5751: call void @finch_panic_index(ptr @.str.3659, i64 2930, i64 1, i64 %t75) unreachable -inrange5748: +inrange5752: %t77 = extractvalue { ptr, i64, i64 } %t74, 0 %t78 = getelementptr inbounds %S.ast.Node, ptr %t77, i64 1 %t79 = load %S.ast.Node, ptr %t78 @@ -58629,8 +58655,8 @@ inrange5748: store { ptr, i64, i64 } { ptr @.str.3663, i64 3, i64 0 }, ptr %a110 %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) %t112 = icmp ne i32 %t111, 0 - br i1 %t112, label %then5749, label %endif5751 -then5749: + br i1 %t112, label %then5753, label %endif5755 +then5753: %t113 = load { ptr, i64, i64 }, ptr %a107 store { ptr, i64, i64 } %t113, ptr %a114 call void @finch_str_copy(ptr %a115, ptr %a114) @@ -58645,14 +58671,14 @@ then5749: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t119 -endif5751: +endif5755: %t120 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t120, ptr %a121 store { ptr, i64, i64 } { ptr @.str.3665, i64 6, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) %t124 = icmp ne i32 %t123, 0 - br i1 %t124, label %then5752, label %endif5754 -then5752: + br i1 %t124, label %then5756, label %endif5758 +then5756: %t125 = load ptr, ptr %a1 %t126 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t125, { ptr, i64, i64 } { ptr @.str.3666, i64 10, i64 0 }) store { ptr, i64, i64 } %t126, ptr %a127 @@ -58759,7 +58785,7 @@ then5752: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t204 -endif5754: +endif5758: %t205 = load ptr, ptr %a1 %t206 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t205, { ptr, i64, i64 } { ptr @.str.3673, i64 9, i64 0 }) store { ptr, i64, i64 } %t206, ptr %a207 @@ -58827,11 +58853,11 @@ endif5754: %t259 = load { ptr, i64, i64 }, ptr %t258 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 2, %t260 - br i1 %t261, label %range5755, label %inrange5756 -range5755: + br i1 %t261, label %range5759, label %inrange5760 +range5759: call void @finch_panic_index(ptr @.str.3678, i64 2963, i64 2, i64 %t260) unreachable -inrange5756: +inrange5760: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds %S.ast.Node, ptr %t262, i64 2 %t264 = load %S.ast.Node, ptr %t263 @@ -58842,11 +58868,11 @@ inrange5756: %t269 = load { ptr, i64, i64 }, ptr %t268 %t270 = extractvalue { ptr, i64, i64 } %t269, 1 %t271 = icmp uge i64 2, %t270 - br i1 %t271, label %range5757, label %inrange5758 -range5757: + br i1 %t271, label %range5761, label %inrange5762 +range5761: call void @finch_panic_index(ptr @.str.3679, i64 2963, i64 2, i64 %t270) unreachable -inrange5758: +inrange5762: %t272 = extractvalue { ptr, i64, i64 } %t269, 0 %t273 = getelementptr inbounds %S.ast.Node, ptr %t272, i64 2 %t274 = load %S.ast.Node, ptr %t273 @@ -58964,14 +58990,14 @@ inrange5758: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t357 -endif5741: +endif5745: %t358 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t358, ptr %a359 store { ptr, i64, i64 } { ptr @.str.3687, i64 5, i64 0 }, ptr %a360 %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) %t362 = icmp ne i32 %t361, 0 - br i1 %t362, label %then5759, label %endif5761 -then5759: + br i1 %t362, label %then5763, label %endif5765 +then5763: %t363 = load ptr, ptr %a1 %t364 = load %S.ast.Node, ptr %a2 %t365 = load { ptr, i64, i64 }, ptr %a10 @@ -58979,20 +59005,20 @@ then5759: %t366 = load ptr, ptr %a1 %t367 = load %S.ast.Type, ptr %a21 %t368 = call i1 @finch.gen.owning(ptr %t366, %S.ast.Type %t367) - br label %logic.from5762 -logic.from5762: - br i1 %t368, label %logic.end5764, label %logic.rhs5763 -logic.rhs5763: + br label %logic.from5766 +logic.from5766: + br i1 %t368, label %logic.end5768, label %logic.rhs5767 +logic.rhs5767: %t369 = load ptr, ptr %a1 %t370 = load %S.ast.Type, ptr %a32 %t371 = call i1 @finch.gen.owning(ptr %t369, %S.ast.Type %t370) - br label %logic.rend5765 -logic.rend5765: - br label %logic.end5764 -logic.end5764: - %t372 = phi i1 [ true, %logic.from5762 ], [ %t371, %logic.rend5765 ] - br i1 %t372, label %then5766, label %endif5768 -then5766: + br label %logic.rend5769 +logic.rend5769: + br label %logic.end5768 +logic.end5768: + %t372 = phi i1 [ true, %logic.from5766 ], [ %t371, %logic.rend5769 ] + br i1 %t372, label %then5770, label %endif5772 +then5770: %t373 = load ptr, ptr %a1 %t374 = load ptr, ptr %a1 %t375 = load ptr, ptr %a1 @@ -59040,11 +59066,11 @@ then5766: %t411 = load { ptr, i64, i64 }, ptr %a407 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 3, %t412 - br i1 %t413, label %range5769, label %inrange5770 -range5769: + br i1 %t413, label %range5773, label %inrange5774 +range5773: call void @finch_panic_index(ptr @.str.3692, i64 2975, i64 3, i64 %t412) unreachable -inrange5770: +inrange5774: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 3 %t416 = load { ptr, i64, i64 }, ptr %t415 @@ -59121,8 +59147,8 @@ inrange5770: call void @finch_str_drop(ptr %a418) call void @finch.drop.arr_str(ptr %a407) call void @finch_str_drop(ptr %a403) - br label %endif5768 -endif5768: + br label %endif5772 +endif5772: %t471 = load ptr, ptr %a1 %t472 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.3698, i64 31, i64 0 }, ptr %a474 @@ -59144,28 +59170,28 @@ endif5768: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t484 -endif5761: +endif5765: %t485 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t485, ptr %a486 store { ptr, i64, i64 } { ptr @.str.3701, i64 4, i64 0 }, ptr %a487 %t488 = call i32 @finch_str_eq(ptr %a486, ptr %a487) %t489 = icmp ne i32 %t488, 0 - br label %logic.from5771 -logic.from5771: - br i1 %t489, label %logic.end5773, label %logic.rhs5772 -logic.rhs5772: + br label %logic.from5775 +logic.from5775: + br i1 %t489, label %logic.end5777, label %logic.rhs5776 +logic.rhs5776: %t490 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t490, ptr %a491 store { ptr, i64, i64 } { ptr @.str.3702, i64 6, i64 0 }, ptr %a492 %t493 = call i32 @finch_str_eq(ptr %a491, ptr %a492) %t494 = icmp ne i32 %t493, 0 - br label %logic.rend5774 -logic.rend5774: - br label %logic.end5773 -logic.end5773: - %t495 = phi i1 [ true, %logic.from5771 ], [ %t494, %logic.rend5774 ] - br i1 %t495, label %then5775, label %endif5777 -then5775: + br label %logic.rend5778 +logic.rend5778: + br label %logic.end5777 +logic.end5777: + %t495 = phi i1 [ true, %logic.from5775 ], [ %t494, %logic.rend5778 ] + br i1 %t495, label %then5779, label %endif5781 +then5779: %t496 = load ptr, ptr %a1 %t497 = load %S.ast.Node, ptr %a2 %t498 = load { ptr, i64, i64 }, ptr %a10 @@ -59181,8 +59207,8 @@ then5775: store { ptr, i64, i64 } { ptr @.str.3703, i64 6, i64 0 }, ptr %a507 %t508 = call i32 @finch_str_eq(ptr %a506, ptr %a507) %t509 = icmp ne i32 %t508, 0 - br i1 %t509, label %then5778, label %endif5780 -then5778: + br i1 %t509, label %then5782, label %endif5784 +then5782: store i64 2, ptr %a499 %t510 = load %S.ast.Type, ptr %a32 store %S.ast.Type %t510, ptr %a511 @@ -59192,8 +59218,8 @@ then5778: store %S.ast.Type %t513, ptr %a504 store %S.ast.Type %t514, ptr %a515 call void @finch.drop.S_ast_Type(ptr %a515) - br label %endif5780 -endif5780: + br label %endif5784 +endif5784: %t516 = load %S.ast.Type, ptr %a504 %t517 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t516) store %S.ast.Type %t517, ptr %a518 @@ -59342,11 +59368,11 @@ endif5780: %t639 = load { ptr, i64, i64 }, ptr %a635 %t640 = extractvalue { ptr, i64, i64 } %t639, 1 %t641 = icmp uge i64 3, %t640 - br i1 %t641, label %range5781, label %inrange5782 -range5781: + br i1 %t641, label %range5785, label %inrange5786 +range5785: call void @finch_panic_index(ptr @.str.3723, i64 3007, i64 3, i64 %t640) unreachable -inrange5782: +inrange5786: %t642 = extractvalue { ptr, i64, i64 } %t639, 0 %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %t642, i64 3 %t644 = load { ptr, i64, i64 }, ptr %t643 @@ -59501,7 +59527,7 @@ inrange5782: call void @finch.drop.S_ast_Type(ptr %a21) call void @finch_str_drop(ptr %a10) ret %S.gen.Val %t756 -endif5777: +endif5781: %t757 = load ptr, ptr %a1 %t758 = load %S.ast.Node, ptr %a2 %t759 = load { ptr, i64, i64 }, ptr %a10 @@ -59581,44 +59607,44 @@ entry: store { ptr, i64, i64 } { ptr @.str.3739, i64 4, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br label %logic.from5783 -logic.from5783: - br i1 %t9, label %logic.rhs5784, label %logic.end5785 -logic.rhs5784: + br label %logic.from5787 +logic.from5787: + br i1 %t9, label %logic.rhs5788, label %logic.end5789 +logic.rhs5788: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t11 = load { ptr, i64, i64 }, ptr %t10 store { ptr, i64, i64 } %t11, ptr %a12 store { ptr, i64, i64 } { ptr @.str.3740, i64 3, i64 0 }, ptr %a13 %t14 = call i32 @finch_str_eq(ptr %a12, ptr %a13) %t15 = icmp ne i32 %t14, 0 - br label %logic.rend5786 -logic.rend5786: - br label %logic.end5785 -logic.end5785: - %t16 = phi i1 [ false, %logic.from5783 ], [ %t15, %logic.rend5786 ] - br label %logic.from5787 -logic.from5787: - br i1 %t16, label %logic.rhs5788, label %logic.end5789 -logic.rhs5788: + br label %logic.rend5790 +logic.rend5790: + br label %logic.end5789 +logic.end5789: + %t16 = phi i1 [ false, %logic.from5787 ], [ %t15, %logic.rend5790 ] + br label %logic.from5791 +logic.from5791: + br i1 %t16, label %logic.rhs5792, label %logic.end5793 +logic.rhs5792: %t17 = load ptr, ptr %a1 %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = call i64 @finch.gen.lookup(ptr %t17, { ptr, i64, i64 } %t19) %t21 = icmp slt i64 %t20, 0 - br label %logic.rend5790 -logic.rend5790: - br label %logic.end5789 -logic.end5789: - %t22 = phi i1 [ false, %logic.from5787 ], [ %t21, %logic.rend5790 ] - br i1 %t22, label %then5791, label %endif5793 -then5791: + br label %logic.rend5794 +logic.rend5794: + br label %logic.end5793 +logic.end5793: + %t22 = phi i1 [ false, %logic.from5791 ], [ %t21, %logic.rend5794 ] + br i1 %t22, label %then5795, label %endif5797 +then5795: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic5794, label %ok5795 -panic5794: + br i1 %t24, label %panic5798, label %ok5799 +panic5798: call void @finch_panic(ptr @.str.3741, i64 3029, ptr @.str.3742) unreachable -ok5795: +ok5799: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 21 %t26 = load ptr, ptr %a1 %t27 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 @@ -59629,11 +59655,11 @@ ok5795: %t32 = load { ptr, i64, i64 }, ptr %t25 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range5796, label %inrange5797 -range5796: + br i1 %t34, label %range5800, label %inrange5801 +range5800: call void @finch_panic_index(ptr @.str.3743, i64 3029, i64 %t31, i64 %t33) unreachable -inrange5797: +inrange5801: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 %t37 = load %S.gen.EnumDef, ptr %t36 @@ -59649,33 +59675,33 @@ inrange5797: %t47 = load i64, ptr %t43 %t48 = load ptr, ptr %t42 store i64 0, ptr %a49 - br label %find.cond5798 -find.cond5798: + br label %find.cond5802 +find.cond5802: %t50 = load i64, ptr %a49 %t51 = icmp slt i64 %t50, %t47 - br i1 %t51, label %find.body5799, label %find.end5802 -find.body5799: + br i1 %t51, label %find.body5803, label %find.end5806 +find.body5803: %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t50 %t53 = load { ptr, i64, i64 }, ptr %t52 store { ptr, i64, i64 } %t53, ptr %a54 store { ptr, i64, i64 } %t45, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 - br i1 %t57, label %find.hit5800, label %find.next5801 -find.hit5800: + br i1 %t57, label %find.hit5804, label %find.next5805 +find.hit5804: store i64 %t50, ptr %a46 - br label %find.end5802 -find.next5801: + br label %find.end5806 +find.next5805: %t58 = add i64 %t50, 1 store i64 %t58, ptr %a49 - br label %find.cond5798 -find.end5802: + br label %find.cond5802 +find.end5806: %t59 = load i64, ptr %a46 store i64 %t59, ptr %a60 %t61 = load i64, ptr %a60 %t62 = icmp slt i64 %t61, 0 - br i1 %t62, label %then5803, label %endif5805 -then5803: + br i1 %t62, label %then5807, label %endif5809 +then5807: %t63 = load ptr, ptr %a1 %t64 = load %S.ast.Node, ptr %a2 %t65 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -59726,18 +59752,18 @@ then5803: call void @finch.gen.fail(ptr %t63, %S.ast.Node %t64, { ptr, i64, i64 } %t103) store { ptr, i64, i64 } %t103, ptr %a104 call void @finch_str_drop(ptr %a104) - br label %endif5805 -endif5805: + br label %endif5809 +endif5809: %t105 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 3 %t106 = load i64, ptr %a60 %t107 = load { ptr, i64, i64 }, ptr %t105 %t108 = extractvalue { ptr, i64, i64 } %t107, 1 %t109 = icmp uge i64 %t106, %t108 - br i1 %t109, label %range5806, label %inrange5807 -range5806: + br i1 %t109, label %range5810, label %inrange5811 +range5810: call void @finch_panic_index(ptr @.str.3749, i64 3034, i64 %t106, i64 %t108) unreachable -inrange5807: +inrange5811: %t110 = extractvalue { ptr, i64, i64 } %t107, 0 %t111 = getelementptr inbounds i64, ptr %t110, i64 %t106 %t112 = load i64, ptr %t111 @@ -59751,7 +59777,7 @@ inrange5807: %t120 = insertvalue %S.gen.Val %t115, %S.ast.Type %t119, 1 call void @finch.drop.S_gen_EnumDef(ptr %a41) ret %S.gen.Val %t120 -endif5793: +endif5797: %t121 = load ptr, ptr %a1 %t122 = load ptr, ptr %a1 %t123 = load %S.ast.Node, ptr %a2 @@ -60016,11 +60042,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range5808, label %inrange5809 -range5808: + br i1 %t8, label %range5812, label %inrange5813 +range5812: call void @finch_panic_index(ptr @.str.3751, i64 3042, i64 0, i64 %t7) unreachable -inrange5809: +inrange5813: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -60038,46 +60064,46 @@ inrange5809: store { ptr, i64, i64 } { ptr @.str.3752, i64 4, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 - br label %logic.from5810 -logic.from5810: - br i1 %t25, label %logic.end5812, label %logic.rhs5811 -logic.rhs5811: + br label %logic.from5814 +logic.from5814: + br i1 %t25, label %logic.end5816, label %logic.rhs5815 +logic.rhs5815: %t26 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.3753, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br label %logic.rend5813 -logic.rend5813: - br label %logic.end5812 -logic.end5812: - %t32 = phi i1 [ true, %logic.from5810 ], [ %t31, %logic.rend5813 ] - br i1 %t32, label %then5814, label %endif5816 -then5814: + br label %logic.rend5817 +logic.rend5817: + br label %logic.end5816 +logic.end5816: + %t32 = phi i1 [ true, %logic.from5814 ], [ %t31, %logic.rend5817 ] + br i1 %t32, label %then5818, label %endif5820 +then5818: %t33 = load ptr, ptr %a1 %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 0, %t36 - br i1 %t37, label %range5817, label %inrange5818 -range5817: + br i1 %t37, label %range5821, label %inrange5822 +range5821: call void @finch_panic_index(ptr @.str.3754, i64 3045, i64 0, i64 %t36) unreachable -inrange5818: +inrange5822: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 0 %t40 = load %S.ast.Node, ptr %t39 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.3755, i64 30, i64 0 }) - br label %endif5816 -endif5816: + br label %endif5820 +endif5820: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic5819, label %ok5820 -panic5819: + br i1 %t42, label %panic5823, label %ok5824 +panic5823: call void @finch_panic(ptr @.str.3756, i64 3047, ptr @.str.3757) unreachable -ok5820: +ok5824: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 11 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 %t45 = load i64, ptr %t44 @@ -60093,8 +60119,8 @@ ok5820: store { ptr, i64, i64 } { ptr @.str.3759, i64 6, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %then5821, label %endif5823 -then5821: + br i1 %t56, label %then5825, label %endif5827 +then5825: %t57 = load ptr, ptr %a1 %t58 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 %t59 = load { ptr, i64, i64 }, ptr %t58 @@ -60104,8 +60130,8 @@ then5821: store i64 %t62, ptr %a49 %t63 = load i64, ptr %a49 %t64 = icmp sge i64 %t63, 0 - br i1 %t64, label %then5824, label %endif5826 -then5824: + br i1 %t64, label %then5828, label %endif5830 +then5828: %t65 = load ptr, ptr %a1 %t66 = load ptr, ptr %a1 %t67 = load %S.ast.Type, ptr %a19 @@ -60138,11 +60164,11 @@ then5824: %t90 = load { ptr, i64, i64 }, ptr %a86 %t91 = load ptr, ptr %a1 %t92 = icmp eq ptr %t91, null - br i1 %t92, label %panic5827, label %ok5828 -panic5827: + br i1 %t92, label %panic5831, label %ok5832 +panic5831: call void @finch_panic(ptr @.str.3763, i64 3054, ptr @.str.3764) unreachable -ok5828: +ok5832: %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 16 %t94 = load ptr, ptr %a1 %t95 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 @@ -60153,22 +60179,22 @@ ok5828: %t100 = load { ptr, i64, i64 }, ptr %t93 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 %t99, %t101 - br i1 %t102, label %range5829, label %inrange5830 -range5829: + br i1 %t102, label %range5833, label %inrange5834 +range5833: call void @finch_panic_index(ptr @.str.3765, i64 3054, i64 %t99, i64 %t101) unreachable -inrange5830: +inrange5834: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds %S.gen.StructDef, ptr %t103, i64 %t99 %t105 = getelementptr inbounds %S.gen.StructDef, ptr %t104, i32 0, i32 3 %t106 = load { ptr, i64, i64 }, ptr %t105 %t107 = extractvalue { ptr, i64, i64 } %t106, 1 %t108 = icmp uge i64 0, %t107 - br i1 %t108, label %range5831, label %inrange5832 -range5831: + br i1 %t108, label %range5835, label %inrange5836 +range5835: call void @finch_panic_index(ptr @.str.3766, i64 3054, i64 0, i64 %t107) unreachable -inrange5832: +inrange5836: %t109 = extractvalue { ptr, i64, i64 } %t106, 0 %t110 = getelementptr inbounds i64, ptr %t109, i64 0 %t111 = load i64, ptr %t110 @@ -60189,10 +60215,10 @@ inrange5832: store { ptr, i64, i64 } %t120, ptr %a50 store { ptr, i64, i64 } %t122, ptr %a123 call void @finch_str_drop(ptr %a123) - br label %endif5826 -endif5826: - br label %endif5823 -endif5823: + br label %endif5830 +endif5830: + br label %endif5827 +endif5827: %t124 = load ptr, ptr %a1 %t125 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t124, { ptr, i64, i64 } { ptr @.str.3767, i64 9, i64 0 }) store { ptr, i64, i64 } %t125, ptr %a126 @@ -60210,23 +60236,23 @@ endif5823: store i64 %t137, ptr %a138 %t139 = load i64, ptr %a138 store i64 0, ptr %a140 - br label %for.cond5833 -for.cond5833: + br label %for.cond5837 +for.cond5837: %t141 = load i64, ptr %a140 %t142 = icmp slt i64 %t141, %t139 - br i1 %t142, label %for.body5834, label %for.end5836 -for.body5834: + br i1 %t142, label %for.body5838, label %for.end5840 +for.body5838: %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t144 = load i64, ptr %a140 %t145 = add i64 1, %t144 %t146 = load { ptr, i64, i64 }, ptr %t143 %t147 = extractvalue { ptr, i64, i64 } %t146, 1 %t148 = icmp uge i64 %t145, %t147 - br i1 %t148, label %range5837, label %inrange5838 -range5837: + br i1 %t148, label %range5841, label %inrange5842 +range5841: call void @finch_panic_index(ptr @.str.3769, i64 3066, i64 %t145, i64 %t147) unreachable -inrange5838: +inrange5842: %t149 = extractvalue { ptr, i64, i64 } %t146, 0 %t150 = getelementptr inbounds %S.ast.Node, ptr %t149, i64 %t145 %t151 = load %S.ast.Node, ptr %t150 @@ -60235,13 +60261,13 @@ inrange5838: %t154 = load %S.ast.Node, ptr %a153 store %S.ast.Node %t154, ptr %a155 %t156 = load i1, ptr %a127 - br i1 %t156, label %then5839, label %endif5841 -then5839: + br i1 %t156, label %then5843, label %endif5845 +then5843: %t157 = load ptr, ptr %a1 %t158 = load %S.ast.Node, ptr %a155 call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } { ptr @.str.3770, i64 72, i64 0 }) - br label %endif5841 -endif5841: + br label %endif5845 +endif5845: %t159 = load ptr, ptr %a1 %t160 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t159, { ptr, i64, i64 } { ptr @.str.3771, i64 9, i64 0 }) store { ptr, i64, i64 } %t160, ptr %a161 @@ -60252,23 +60278,23 @@ endif5841: store i64 -1, ptr %a166 %t167 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 %t168 = load i1, ptr %t167 - br i1 %t168, label %then5842, label %else5843 -then5842: + br i1 %t168, label %then5846, label %else5847 +then5846: store i1 true, ptr %a127 %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a161 call void @finch.gen.br(ptr %t169, { ptr, i64, i64 } %t170) - br label %endif5844 -else5843: + br label %endif5848 +else5847: %t171 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 %t172 = load { ptr, i64, i64 }, ptr %t171 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 0, %t173 - br i1 %t174, label %range5845, label %inrange5846 -range5845: + br i1 %t174, label %range5849, label %inrange5850 +range5849: call void @finch_panic_index(ptr @.str.3773, i64 3078, i64 0, i64 %t173) unreachable -inrange5846: +inrange5850: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 0 %t177 = getelementptr inbounds %S.ast.Node, ptr %t176, i32 0, i32 9 @@ -60280,27 +60306,27 @@ inrange5846: %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 %t184 = load i64, ptr %t183 store i64 0, ptr %a185 - br label %for.cond5847 -for.cond5847: + br label %for.cond5851 +for.cond5851: %t186 = load i64, ptr %a185 %t187 = icmp slt i64 %t186, %t184 - br i1 %t187, label %for.body5848, label %for.end5850 -for.body5848: + br i1 %t187, label %for.body5852, label %for.end5854 +for.body5852: store { ptr, i64, i64 } { ptr @.str.3774, i64 0, i64 0 }, ptr %a188 %t189 = load i64, ptr %a49 %t190 = icmp sge i64 %t189, 0 - br i1 %t190, label %then5851, label %else5852 -then5851: + br i1 %t190, label %then5855, label %else5856 +then5855: %t191 = load ptr, ptr %a1 %t192 = load i64, ptr %a185 %t193 = load { ptr, i64, i64 }, ptr %a182 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 %t192, %t194 - br i1 %t195, label %range5854, label %inrange5855 -range5854: + br i1 %t195, label %range5858, label %inrange5859 +range5858: call void @finch_panic_index(ptr @.str.3775, i64 3082, i64 %t192, i64 %t194) unreachable -inrange5855: +inrange5859: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 %t192 %t198 = load %S.ast.Node, ptr %t197 @@ -60316,49 +60342,49 @@ inrange5855: %t208 = load i64, ptr %t202 %t209 = load ptr, ptr %a129 store i64 0, ptr %a210 - br label %find.cond5856 -find.cond5856: + br label %find.cond5860 +find.cond5860: %t211 = load i64, ptr %a210 %t212 = icmp slt i64 %t211, %t208 - br i1 %t212, label %find.body5857, label %find.end5860 -find.body5857: + br i1 %t212, label %find.body5861, label %find.end5864 +find.body5861: %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i64 %t211 %t214 = load { ptr, i64, i64 }, ptr %t213 store { ptr, i64, i64 } %t214, ptr %a215 store { ptr, i64, i64 } %t206, ptr %a216 %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) %t218 = icmp ne i32 %t217, 0 - br i1 %t218, label %find.hit5858, label %find.next5859 -find.hit5858: + br i1 %t218, label %find.hit5862, label %find.next5863 +find.hit5862: store i64 %t211, ptr %a207 - br label %find.end5860 -find.next5859: + br label %find.end5864 +find.next5863: %t219 = add i64 %t211, 1 store i64 %t219, ptr %a210 - br label %find.cond5856 -find.end5860: + br label %find.cond5860 +find.end5864: store { ptr, i64, i64 } %t206, ptr %a220 call void @finch_str_drop(ptr %a220) %t221 = load i64, ptr %a207 %t222 = icmp sge i64 %t221, 0 - br i1 %t222, label %then5861, label %endif5863 -then5861: + br i1 %t222, label %then5865, label %endif5867 +then5865: %t223 = load ptr, ptr %a1 %t224 = load i64, ptr %a185 %t225 = load { ptr, i64, i64 }, ptr %a182 %t226 = extractvalue { ptr, i64, i64 } %t225, 1 %t227 = icmp uge i64 %t224, %t226 - br i1 %t227, label %range5864, label %inrange5865 -range5864: + br i1 %t227, label %range5868, label %inrange5869 +range5868: call void @finch_panic_index(ptr @.str.3776, i64 3084, i64 %t224, i64 %t226) unreachable -inrange5865: +inrange5869: %t228 = extractvalue { ptr, i64, i64 } %t225, 0 %t229 = getelementptr inbounds %S.ast.Node, ptr %t228, i64 %t224 %t230 = load %S.ast.Node, ptr %t229 call void @finch.gen.fail(ptr %t223, %S.ast.Node %t230, { ptr, i64, i64 } { ptr @.str.3777, i64 49, i64 0 }) - br label %endif5863 -endif5863: + br label %endif5867 +endif5867: %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t232 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 %t233 = load i64, ptr %t232 @@ -60375,29 +60401,29 @@ endif5863: %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i32 0, i32 1 %t242 = load i64, ptr %t241 %t243 = icmp sgt i64 %t242, 0 - br i1 %t243, label %then5866, label %endif5868 -then5866: + br i1 %t243, label %then5870, label %endif5872 +then5870: %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = icmp sgt i64 %t245, 1 - br i1 %t246, label %then5869, label %endif5871 -then5869: + br i1 %t246, label %then5873, label %endif5875 +then5873: %t247 = load ptr, ptr %a1 %t248 = load i64, ptr %a185 %t249 = load { ptr, i64, i64 }, ptr %a182 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 %t248, %t250 - br i1 %t251, label %range5872, label %inrange5873 -range5872: + br i1 %t251, label %range5876, label %inrange5877 +range5876: call void @finch_panic_index(ptr @.str.3778, i64 3089, i64 %t248, i64 %t250) unreachable -inrange5873: +inrange5877: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 %t254 = load %S.ast.Node, ptr %t253 call void @finch.gen.fail(ptr %t247, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3779, i64 52, i64 0 }) - br label %endif5871 -endif5871: + br label %endif5875 +endif5875: %t255 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 %t256 = load { ptr, i64, i64 }, ptr %t255 store { ptr, i64, i64 } %t256, ptr %a257 @@ -60410,8 +60436,8 @@ endif5871: %t262 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 %t263 = load i64, ptr %t262 store i64 %t263, ptr %a166 - br label %endif5868 -endif5868: + br label %endif5872 +endif5872: %t264 = load ptr, ptr %a1 %t265 = load { ptr, i64, i64 }, ptr %a50 store { ptr, i64, i64 } { ptr @.str.3780, i64 12, i64 0 }, ptr %a267 @@ -60444,18 +60470,18 @@ endif5868: store { ptr, i64, i64 } %t287, ptr %a288 call void @finch_str_drop(ptr %a288) call void @finch.drop.S_gen_SumPat(ptr %a201) - br label %endif5853 -else5852: + br label %endif5857 +else5856: %t289 = load ptr, ptr %a1 %t290 = load i64, ptr %a185 %t291 = load { ptr, i64, i64 }, ptr %a182 %t292 = extractvalue { ptr, i64, i64 } %t291, 1 %t293 = icmp uge i64 %t290, %t292 - br i1 %t293, label %range5874, label %inrange5875 -range5874: + br i1 %t293, label %range5878, label %inrange5879 +range5878: call void @finch_panic_index(ptr @.str.3782, i64 3096, i64 %t290, i64 %t292) unreachable -inrange5875: +inrange5879: %t294 = extractvalue { ptr, i64, i64 } %t291, 0 %t295 = getelementptr inbounds %S.ast.Node, ptr %t294, i64 %t290 %t296 = load %S.ast.Node, ptr %t295 @@ -60469,62 +60495,62 @@ inrange5875: %t304 = load i64, ptr %t300 %t305 = load ptr, ptr %a129 store i64 0, ptr %a306 - br label %find.cond5876 -find.cond5876: + br label %find.cond5880 +find.cond5880: %t307 = load i64, ptr %a306 %t308 = icmp slt i64 %t307, %t304 - br i1 %t308, label %find.body5877, label %find.end5880 -find.body5877: + br i1 %t308, label %find.body5881, label %find.end5884 +find.body5881: %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t305, i64 %t307 %t310 = load { ptr, i64, i64 }, ptr %t309 store { ptr, i64, i64 } %t310, ptr %a311 store { ptr, i64, i64 } %t302, ptr %a312 %t313 = call i32 @finch_str_eq(ptr %a311, ptr %a312) %t314 = icmp ne i32 %t313, 0 - br i1 %t314, label %find.hit5878, label %find.next5879 -find.hit5878: + br i1 %t314, label %find.hit5882, label %find.next5883 +find.hit5882: store i64 %t307, ptr %a303 - br label %find.end5880 -find.next5879: + br label %find.end5884 +find.next5883: %t315 = add i64 %t307, 1 store i64 %t315, ptr %a306 - br label %find.cond5876 -find.end5880: + br label %find.cond5880 +find.end5884: %t316 = load i64, ptr %a303 %t317 = icmp sge i64 %t316, 0 - br label %logic.from5881 -logic.from5881: - br i1 %t317, label %logic.rhs5882, label %logic.end5883 -logic.rhs5882: + br label %logic.from5885 +logic.from5885: + br i1 %t317, label %logic.rhs5886, label %logic.end5887 +logic.rhs5886: %t318 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t319 = load { ptr, i64, i64 }, ptr %t318 store { ptr, i64, i64 } %t319, ptr %a320 store { ptr, i64, i64 } { ptr @.str.3783, i64 4, i64 0 }, ptr %a321 %t322 = call i32 @finch_str_eq(ptr %a320, ptr %a321) %t323 = icmp ne i32 %t322, 0 - br label %logic.rend5884 -logic.rend5884: - br label %logic.end5883 -logic.end5883: - %t324 = phi i1 [ false, %logic.from5881 ], [ %t323, %logic.rend5884 ] - br i1 %t324, label %then5885, label %endif5887 -then5885: + br label %logic.rend5888 +logic.rend5888: + br label %logic.end5887 +logic.end5887: + %t324 = phi i1 [ false, %logic.from5885 ], [ %t323, %logic.rend5888 ] + br i1 %t324, label %then5889, label %endif5891 +then5889: %t325 = load ptr, ptr %a1 %t326 = load i64, ptr %a185 %t327 = load { ptr, i64, i64 }, ptr %a182 %t328 = extractvalue { ptr, i64, i64 } %t327, 1 %t329 = icmp uge i64 %t326, %t328 - br i1 %t329, label %range5888, label %inrange5889 -range5888: + br i1 %t329, label %range5892, label %inrange5893 +range5892: call void @finch_panic_index(ptr @.str.3784, i64 3098, i64 %t326, i64 %t328) unreachable -inrange5889: +inrange5893: %t330 = extractvalue { ptr, i64, i64 } %t327, 0 %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 %t332 = load %S.ast.Node, ptr %t331 call void @finch.gen.fail(ptr %t325, %S.ast.Node %t332, { ptr, i64, i64 } { ptr @.str.3785, i64 49, i64 0 }) - br label %endif5887 -endif5887: + br label %endif5891 +endif5891: %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t334 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 %t335 = load { ptr, i64, i64 }, ptr %t334 @@ -60545,11 +60571,11 @@ endif5887: %t347 = load { ptr, i64, i64 }, ptr %a182 %t348 = extractvalue { ptr, i64, i64 } %t347, 1 %t349 = icmp uge i64 %t346, %t348 - br i1 %t349, label %range5890, label %inrange5891 -range5890: + br i1 %t349, label %range5894, label %inrange5895 +range5894: call void @finch_panic_index(ptr @.str.3787, i64 3101, i64 %t346, i64 %t348) unreachable -inrange5891: +inrange5895: %t350 = extractvalue { ptr, i64, i64 } %t347, 0 %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 %t346 %t352 = load %S.ast.Node, ptr %t351 @@ -60565,22 +60591,22 @@ inrange5891: store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) call void @finch.drop.S_gen_Val(ptr %a299) - br label %endif5853 -endif5853: + br label %endif5857 +endif5857: %t361 = load i64, ptr %a185 %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 %t363 = load i64, ptr %t362 %t364 = sub i64 %t363, 1 %t365 = icmp eq i64 %t361, %t364 - br i1 %t365, label %then5892, label %else5893 -then5892: + br i1 %t365, label %then5896, label %else5897 +then5896: %t366 = load ptr, ptr %a1 %t367 = load { ptr, i64, i64 }, ptr %a188 %t368 = load { ptr, i64, i64 }, ptr %a161 %t369 = load { ptr, i64, i64 }, ptr %a164 call void @finch.gen.condBr(ptr %t366, { ptr, i64, i64 } %t367, { ptr, i64, i64 } %t368, { ptr, i64, i64 } %t369) - br label %endif5894 -else5893: + br label %endif5898 +else5897: %t370 = load ptr, ptr %a1 %t371 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t370, { ptr, i64, i64 } { ptr @.str.3788, i64 8, i64 0 }) store { ptr, i64, i64 } %t371, ptr %a372 @@ -60593,19 +60619,19 @@ else5893: %t378 = load { ptr, i64, i64 }, ptr %a372 call void @finch.gen.label(ptr %t377, { ptr, i64, i64 } %t378) call void @finch_str_drop(ptr %a372) - br label %endif5894 -endif5894: + br label %endif5898 +endif5898: call void @finch_str_drop(ptr %a188) - br label %for.step5849 -for.step5849: + br label %for.step5853 +for.step5853: %t379 = load i64, ptr %a185 %t380 = add i64 %t379, 1 store i64 %t380, ptr %a185 - br label %for.cond5847 -for.end5850: + br label %for.cond5851 +for.end5854: call void @finch.drop.arr_S_ast_Node(ptr %a182) - br label %endif5844 -endif5844: + br label %endif5848 +endif5848: %t381 = load ptr, ptr %a1 %t382 = load { ptr, i64, i64 }, ptr %a161 call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) @@ -60614,17 +60640,17 @@ endif5844: %t385 = icmp sgt i64 %t384, 0 store i1 %t385, ptr %a386 %t387 = load i1, ptr %a386 - br i1 %t387, label %then5895, label %endif5897 -then5895: + br i1 %t387, label %then5899, label %endif5901 +then5899: %t388 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t388) %t389 = load ptr, ptr %a1 %t390 = icmp eq ptr %t389, null - br i1 %t390, label %panic5898, label %ok5899 -panic5898: + br i1 %t390, label %panic5902, label %ok5903 +panic5902: call void @finch_panic(ptr @.str.3789, i64 3116, ptr @.str.3790) unreachable -ok5899: +ok5903: %t391 = getelementptr inbounds %S.gen.Gen, ptr %t389, i32 0, i32 16 %t392 = load ptr, ptr %a1 %t393 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 @@ -60635,11 +60661,11 @@ ok5899: %t398 = load { ptr, i64, i64 }, ptr %t391 %t399 = extractvalue { ptr, i64, i64 } %t398, 1 %t400 = icmp uge i64 %t397, %t399 - br i1 %t400, label %range5900, label %inrange5901 -range5900: + br i1 %t400, label %range5904, label %inrange5905 +range5904: call void @finch_panic_index(ptr @.str.3791, i64 3116, i64 %t397, i64 %t399) unreachable -inrange5901: +inrange5905: %t401 = extractvalue { ptr, i64, i64 } %t398, 0 %t402 = getelementptr inbounds %S.gen.StructDef, ptr %t401, i64 %t397 %t403 = load %S.gen.StructDef, ptr %t402 @@ -60650,21 +60676,21 @@ inrange5901: %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 %t409 = load i64, ptr %t408 store i64 0, ptr %a410 - br label %for.cond5902 -for.cond5902: + br label %for.cond5906 +for.cond5906: %t411 = load i64, ptr %a410 %t412 = icmp slt i64 %t411, %t409 - br i1 %t412, label %for.body5903, label %for.end5905 -for.body5903: + br i1 %t412, label %for.body5907, label %for.end5909 +for.body5907: %t413 = load i64, ptr %a410 %t414 = load { ptr, i64, i64 }, ptr %a165 %t415 = extractvalue { ptr, i64, i64 } %t414, 1 %t416 = icmp uge i64 %t413, %t415 - br i1 %t416, label %range5906, label %inrange5907 -range5906: + br i1 %t416, label %range5910, label %inrange5911 +range5910: call void @finch_panic_index(ptr @.str.3792, i64 3118, i64 %t413, i64 %t415) unreachable -inrange5907: +inrange5911: %t417 = extractvalue { ptr, i64, i64 } %t414, 0 %t418 = getelementptr inbounds %S.ast.Node, ptr %t417, i64 %t413 %t419 = getelementptr inbounds %S.ast.Node, ptr %t418, i32 0, i32 1 @@ -60673,27 +60699,27 @@ inrange5907: store { ptr, i64, i64 } { ptr @.str.3793, i64 1, i64 0 }, ptr %a422 %t423 = call i32 @finch_str_eq(ptr %a421, ptr %a422) %t424 = icmp ne i32 %t423, 0 - br i1 %t424, label %then5908, label %endif5910 -then5908: - br label %for.step5904 -endif5910: + br i1 %t424, label %then5912, label %endif5914 +then5912: + br label %for.step5908 +endif5914: %t425 = load ptr, ptr %a1 %t426 = icmp eq ptr %t425, null - br i1 %t426, label %panic5911, label %ok5912 -panic5911: + br i1 %t426, label %panic5915, label %ok5916 +panic5915: call void @finch_panic(ptr @.str.3794, i64 3121, ptr @.str.3795) unreachable -ok5912: +ok5916: %t427 = getelementptr inbounds %S.gen.Gen, ptr %t425, i32 0, i32 22 %t428 = load i64, ptr %a49 %t429 = load { ptr, i64, i64 }, ptr %t427 %t430 = extractvalue { ptr, i64, i64 } %t429, 1 %t431 = icmp uge i64 %t428, %t430 - br i1 %t431, label %range5913, label %inrange5914 -range5913: + br i1 %t431, label %range5917, label %inrange5918 +range5917: call void @finch_panic_index(ptr @.str.3796, i64 3121, i64 %t428, i64 %t430) unreachable -inrange5914: +inrange5918: %t432 = extractvalue { ptr, i64, i64 } %t429, 0 %t433 = getelementptr inbounds %S.gen.SumDef, ptr %t432, i64 %t428 %t434 = getelementptr inbounds %S.gen.SumDef, ptr %t433, i32 0, i32 4 @@ -60701,11 +60727,11 @@ inrange5914: %t436 = load { ptr, i64, i64 }, ptr %t434 %t437 = extractvalue { ptr, i64, i64 } %t436, 1 %t438 = icmp uge i64 %t435, %t437 - br i1 %t438, label %range5915, label %inrange5916 -range5915: + br i1 %t438, label %range5919, label %inrange5920 +range5919: call void @finch_panic_index(ptr @.str.3797, i64 3121, i64 %t435, i64 %t437) unreachable -inrange5916: +inrange5920: %t439 = extractvalue { ptr, i64, i64 } %t436, 0 %t440 = getelementptr inbounds i64, ptr %t439, i64 %t435 %t441 = load i64, ptr %t440 @@ -60717,11 +60743,11 @@ inrange5916: %t447 = load { ptr, i64, i64 }, ptr %t445 %t448 = extractvalue { ptr, i64, i64 } %t447, 1 %t449 = icmp uge i64 %t446, %t448 - br i1 %t449, label %range5917, label %inrange5918 -range5917: + br i1 %t449, label %range5921, label %inrange5922 +range5921: call void @finch_panic_index(ptr @.str.3798, i64 3122, i64 %t446, i64 %t448) unreachable -inrange5918: +inrange5922: %t450 = extractvalue { ptr, i64, i64 } %t447, 0 %t451 = getelementptr inbounds %S.ast.Type, ptr %t450, i64 %t446 %t452 = load %S.ast.Type, ptr %t451 @@ -60764,11 +60790,11 @@ inrange5918: %t485 = load { ptr, i64, i64 }, ptr %t483 %t486 = extractvalue { ptr, i64, i64 } %t485, 1 %t487 = icmp uge i64 %t484, %t486 - br i1 %t487, label %range5919, label %inrange5920 -range5919: + br i1 %t487, label %range5923, label %inrange5924 +range5923: call void @finch_panic_index(ptr @.str.3802, i64 3123, i64 %t484, i64 %t486) unreachable -inrange5920: +inrange5924: %t488 = extractvalue { ptr, i64, i64 } %t485, 0 %t489 = getelementptr inbounds i64, ptr %t488, i64 %t484 %t490 = load i64, ptr %t489 @@ -60791,11 +60817,11 @@ inrange5920: %t504 = load { ptr, i64, i64 }, ptr %a165 %t505 = extractvalue { ptr, i64, i64 } %t504, 1 %t506 = icmp uge i64 %t503, %t505 - br i1 %t506, label %range5921, label %inrange5922 -range5921: + br i1 %t506, label %range5925, label %inrange5926 +range5925: call void @finch_panic_index(ptr @.str.3803, i64 3124, i64 %t503, i64 %t505) unreachable -inrange5922: +inrange5926: %t507 = extractvalue { ptr, i64, i64 } %t504, 0 %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 %t503 %t509 = load %S.ast.Node, ptr %t508 @@ -60803,11 +60829,11 @@ inrange5922: %t511 = load { ptr, i64, i64 }, ptr %a165 %t512 = extractvalue { ptr, i64, i64 } %t511, 1 %t513 = icmp uge i64 %t510, %t512 - br i1 %t513, label %range5923, label %inrange5924 -range5923: + br i1 %t513, label %range5927, label %inrange5928 +range5927: call void @finch_panic_index(ptr @.str.3804, i64 3124, i64 %t510, i64 %t512) unreachable -inrange5924: +inrange5928: %t514 = extractvalue { ptr, i64, i64 } %t511, 0 %t515 = getelementptr inbounds %S.ast.Node, ptr %t514, i64 %t510 %t516 = getelementptr inbounds %S.ast.Node, ptr %t515, i32 0, i32 1 @@ -60824,25 +60850,25 @@ inrange5924: call void @finch_str_drop(ptr %a525) call void @finch_str_drop(ptr %a501) call void @finch.drop.S_ast_Type(ptr %a456) - br label %for.step5904 -for.step5904: + br label %for.step5908 +for.step5908: %t526 = load i64, ptr %a410 %t527 = add i64 %t526, 1 store i64 %t527, ptr %a410 - br label %for.cond5902 -for.end5905: + br label %for.cond5906 +for.end5909: call void @finch.drop.S_gen_StructDef(ptr %a407) - br label %endif5897 -endif5897: + br label %endif5901 +endif5901: %t528 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 %t529 = load { ptr, i64, i64 }, ptr %t528 %t530 = extractvalue { ptr, i64, i64 } %t529, 1 %t531 = icmp uge i64 1, %t530 - br i1 %t531, label %range5925, label %inrange5926 -range5925: + br i1 %t531, label %range5929, label %inrange5930 +range5929: call void @finch_panic_index(ptr @.str.3805, i64 3127, i64 1, i64 %t530) unreachable -inrange5926: +inrange5930: %t532 = extractvalue { ptr, i64, i64 } %t529, 0 %t533 = getelementptr inbounds %S.ast.Node, ptr %t532, i64 1 %t534 = load %S.ast.Node, ptr %t533 @@ -60851,31 +60877,31 @@ inrange5926: %t537 = load %S.ast.Node, ptr %a536 store %S.ast.Node %t537, ptr %a538 %t539 = load i1, ptr %a3 - br i1 %t539, label %then5927, label %else5928 -then5927: + br i1 %t539, label %then5931, label %else5932 +then5931: %t540 = load ptr, ptr %a1 %t541 = load %S.ast.Node, ptr %a538 %t542 = call %S.gen.Val @finch.gen.expr(ptr %t540, %S.ast.Node %t541) store %S.gen.Val %t542, ptr %a543 %t544 = load i64, ptr %a140 %t545 = icmp eq i64 %t544, 0 - br label %logic.from5930 -logic.from5930: - br i1 %t545, label %logic.end5932, label %logic.rhs5931 -logic.rhs5931: + br label %logic.from5934 +logic.from5934: + br i1 %t545, label %logic.end5936, label %logic.rhs5935 +logic.rhs5935: %t546 = getelementptr inbounds %S.ast.Type, ptr %a133, i32 0, i32 0 %t547 = load { ptr, i64, i64 }, ptr %t546 store { ptr, i64, i64 } %t547, ptr %a548 store { ptr, i64, i64 } { ptr @.str.3806, i64 4, i64 0 }, ptr %a549 %t550 = call i32 @finch_str_eq(ptr %a548, ptr %a549) %t551 = icmp ne i32 %t550, 0 - br label %logic.rend5933 -logic.rend5933: - br label %logic.end5932 -logic.end5932: - %t552 = phi i1 [ true, %logic.from5930 ], [ %t551, %logic.rend5933 ] - br i1 %t552, label %then5934, label %endif5936 -then5934: + br label %logic.rend5937 +logic.rend5937: + br label %logic.end5936 +logic.end5936: + %t552 = phi i1 [ true, %logic.from5934 ], [ %t551, %logic.rend5937 ] + br i1 %t552, label %then5938, label %endif5940 +then5938: %t553 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 %t554 = getelementptr inbounds %S.ast.Type, ptr %t553, i32 0, i32 0 %t555 = load { ptr, i64, i64 }, ptr %t554 @@ -60883,10 +60909,10 @@ then5934: store { ptr, i64, i64 } { ptr @.str.3807, i64 4, i64 0 }, ptr %a557 %t558 = call i32 @finch_str_eq(ptr %a556, ptr %a557) %t559 = icmp ne i32 %t558, 0 - br label %logic.from5937 -logic.from5937: - br i1 %t559, label %logic.end5939, label %logic.rhs5938 -logic.rhs5938: + br label %logic.from5941 +logic.from5941: + br i1 %t559, label %logic.end5943, label %logic.rhs5942 +logic.rhs5942: %t560 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 %t561 = getelementptr inbounds %S.ast.Type, ptr %t560, i32 0, i32 0 %t562 = load { ptr, i64, i64 }, ptr %t561 @@ -60894,18 +60920,18 @@ logic.rhs5938: store { ptr, i64, i64 } { ptr @.str.3808, i64 4, i64 0 }, ptr %a564 %t565 = call i32 @finch_str_eq(ptr %a563, ptr %a564) %t566 = icmp ne i32 %t565, 0 - br label %logic.rend5940 -logic.rend5940: - br label %logic.end5939 -logic.end5939: - %t567 = phi i1 [ true, %logic.from5937 ], [ %t566, %logic.rend5940 ] - br i1 %t567, label %then5941, label %endif5943 -then5941: + br label %logic.rend5944 +logic.rend5944: + br label %logic.end5943 +logic.end5943: + %t567 = phi i1 [ true, %logic.from5941 ], [ %t566, %logic.rend5944 ] + br i1 %t567, label %then5945, label %endif5947 +then5945: %t568 = load ptr, ptr %a1 %t569 = load %S.ast.Node, ptr %a538 call void @finch.gen.fail(ptr %t568, %S.ast.Node %t569, { ptr, i64, i64 } { ptr @.str.3809, i64 52, i64 0 }) - br label %endif5943 -endif5943: + br label %endif5947 +endif5947: %t570 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 %t571 = load %S.ast.Type, ptr %t570 store %S.ast.Type %t571, ptr %a572 @@ -60915,8 +60941,8 @@ endif5943: store %S.ast.Type %t574, ptr %a133 store %S.ast.Type %t575, ptr %a576 call void @finch.drop.S_ast_Type(ptr %a576) - br label %endif5936 -endif5936: + br label %endif5940 +endif5940: %t577 = load ptr, ptr %a1 %t578 = load %S.gen.Val, ptr %a543 %t579 = load %S.ast.Type, ptr %a133 @@ -60931,12 +60957,12 @@ endif5936: %t586 = call { ptr, i64, i64 } @finch.gen.own(ptr %t584, %S.gen.Val %t585) store { ptr, i64, i64 } %t586, ptr %a587 %t588 = load i1, ptr %a386 - br i1 %t588, label %then5944, label %endif5946 -then5944: + br i1 %t588, label %then5948, label %endif5950 +then5948: %t589 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t589) - br label %endif5946 -endif5946: + br label %endif5950 +endif5950: %t590 = load ptr, ptr %a1 %t591 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t590, { ptr, i64, i64 } { ptr @.str.3811, i64 10, i64 0 }) store { ptr, i64, i64 } %t591, ptr %a592 @@ -60977,113 +61003,113 @@ endif5946: call void @finch_str_drop(ptr %a592) call void @finch_str_drop(ptr %a587) call void @finch.drop.S_gen_Val(ptr %a543) - br label %endif5929 -else5928: + br label %endif5933 +else5932: %t617 = getelementptr inbounds %S.ast.Node, ptr %a538, i32 0, i32 0 %t618 = load { ptr, i64, i64 }, ptr %t617 store { ptr, i64, i64 } %t618, ptr %a619 store { ptr, i64, i64 } { ptr @.str.3812, i64 5, i64 0 }, ptr %a620 %t621 = call i32 @finch_str_eq(ptr %a619, ptr %a620) %t622 = icmp ne i32 %t621, 0 - br i1 %t622, label %then5947, label %else5948 -then5947: + br i1 %t622, label %then5951, label %else5952 +then5951: %t623 = load ptr, ptr %a1 %t624 = load %S.ast.Node, ptr %a538 call void @finch.gen.block(ptr %t623, %S.ast.Node %t624, i1 true) - br label %endif5949 -else5948: + br label %endif5953 +else5952: %t625 = load ptr, ptr %a1 %t626 = load %S.ast.Node, ptr %a538 call void @finch.gen.stmt(ptr %t625, %S.ast.Node %t626) - br label %endif5949 -endif5949: + br label %endif5953 +endif5953: %t627 = load ptr, ptr %a1 %t628 = icmp eq ptr %t627, null - br i1 %t628, label %panic5950, label %ok5951 -panic5950: + br i1 %t628, label %panic5954, label %ok5955 +panic5954: call void @finch_panic(ptr @.str.3813, i64 3154, ptr @.str.3814) unreachable -ok5951: +ok5955: %t629 = getelementptr inbounds %S.gen.Gen, ptr %t627, i32 0, i32 9 %t630 = load i1, ptr %t629 %t631 = xor i1 %t630, true - br i1 %t631, label %then5952, label %endif5954 -then5952: + br i1 %t631, label %then5956, label %endif5958 +then5956: store i1 true, ptr %a128 - br label %endif5954 -endif5954: + br label %endif5958 +endif5958: %t632 = load i1, ptr %a386 - br i1 %t632, label %then5955, label %endif5957 -then5955: + br i1 %t632, label %then5959, label %endif5961 +then5959: %t633 = load ptr, ptr %a1 call void @finch.gen.popScope(ptr %t633) - br label %endif5957 -endif5957: + br label %endif5961 +endif5961: %t634 = load ptr, ptr %a1 %t635 = load { ptr, i64, i64 }, ptr %a126 call void @finch.gen.br(ptr %t634, { ptr, i64, i64 } %t635) - br label %endif5929 -endif5929: + br label %endif5933 +endif5933: %t636 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 %t637 = load i1, ptr %t636 %t638 = xor i1 %t637, true - br i1 %t638, label %then5958, label %endif5960 -then5958: + br i1 %t638, label %then5962, label %endif5964 +then5962: %t639 = load ptr, ptr %a1 %t640 = load { ptr, i64, i64 }, ptr %a164 call void @finch.gen.label(ptr %t639, { ptr, i64, i64 } %t640) - br label %endif5960 -endif5960: + br label %endif5964 +endif5964: call void @finch.drop.S_ast_Node(ptr %a538) call void @finch.drop.arr_S_ast_Node(ptr %a165) call void @finch_str_drop(ptr %a164) call void @finch_str_drop(ptr %a161) call void @finch.drop.S_ast_Node(ptr %a155) - br label %for.step5835 -for.step5835: + br label %for.step5839 +for.step5839: %t641 = load i64, ptr %a140 %t642 = add i64 %t641, 1 store i64 %t642, ptr %a140 - br label %for.cond5833 -for.end5836: + br label %for.cond5837 +for.end5840: %t643 = load i1, ptr %a127 %t644 = xor i1 %t643, true - br i1 %t644, label %then5961, label %endif5963 -then5961: + br i1 %t644, label %then5965, label %endif5967 +then5965: %t645 = load i64, ptr %a49 %t646 = icmp sge i64 %t645, 0 - br i1 %t646, label %then5964, label %else5965 -then5964: + br i1 %t646, label %then5968, label %else5969 +then5968: store { ptr, i64, i64 } zeroinitializer, ptr %a647 %t648 = load ptr, ptr %a1 %t649 = icmp eq ptr %t648, null - br i1 %t649, label %panic5967, label %ok5968 -panic5967: + br i1 %t649, label %panic5971, label %ok5972 +panic5971: call void @finch_panic(ptr @.str.3815, i64 3169, ptr @.str.3816) unreachable -ok5968: +ok5972: %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 22 %t651 = load i64, ptr %a49 %t652 = load { ptr, i64, i64 }, ptr %t650 %t653 = extractvalue { ptr, i64, i64 } %t652, 1 %t654 = icmp uge i64 %t651, %t653 - br i1 %t654, label %range5969, label %inrange5970 -range5969: + br i1 %t654, label %range5973, label %inrange5974 +range5973: call void @finch_panic_index(ptr @.str.3817, i64 3169, i64 %t651, i64 %t653) unreachable -inrange5970: +inrange5974: %t655 = extractvalue { ptr, i64, i64 } %t652, 0 %t656 = getelementptr inbounds %S.gen.SumDef, ptr %t655, i64 %t651 %t657 = getelementptr inbounds %S.gen.SumDef, ptr %t656, i32 0, i32 2 %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i32 0, i32 1 %t659 = load i64, ptr %t658 store i64 0, ptr %a660 - br label %for.cond5971 -for.cond5971: + br label %for.cond5975 +for.cond5975: %t661 = load i64, ptr %a660 %t662 = icmp slt i64 %t661, %t659 - br i1 %t662, label %for.body5972, label %for.end5974 -for.body5972: + br i1 %t662, label %for.body5976, label %for.end5978 +for.body5976: %t663 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t664 = load i64, ptr %a660 call void @finch_str_from_int(ptr %a665, i64 %t664) @@ -61092,52 +61118,52 @@ for.body5972: %t668 = load i64, ptr %t663 %t669 = load ptr, ptr %a129 store i64 0, ptr %a670 - br label %find.cond5975 -find.cond5975: + br label %find.cond5979 +find.cond5979: %t671 = load i64, ptr %a670 %t672 = icmp slt i64 %t671, %t668 - br i1 %t672, label %find.body5976, label %find.end5979 -find.body5976: + br i1 %t672, label %find.body5980, label %find.end5983 +find.body5980: %t673 = getelementptr inbounds { ptr, i64, i64 }, ptr %t669, i64 %t671 %t674 = load { ptr, i64, i64 }, ptr %t673 store { ptr, i64, i64 } %t674, ptr %a675 store { ptr, i64, i64 } %t666, ptr %a676 %t677 = call i32 @finch_str_eq(ptr %a675, ptr %a676) %t678 = icmp ne i32 %t677, 0 - br i1 %t678, label %find.hit5977, label %find.next5978 -find.hit5977: + br i1 %t678, label %find.hit5981, label %find.next5982 +find.hit5981: store i64 %t671, ptr %a667 - br label %find.end5979 -find.next5978: + br label %find.end5983 +find.next5982: %t679 = add i64 %t671, 1 store i64 %t679, ptr %a670 - br label %find.cond5975 -find.end5979: + br label %find.cond5979 +find.end5983: store { ptr, i64, i64 } %t666, ptr %a680 call void @finch_str_drop(ptr %a680) %t681 = load i64, ptr %a667 %t682 = icmp sge i64 %t681, 0 %t683 = xor i1 %t682, true - br i1 %t683, label %then5980, label %endif5982 -then5980: + br i1 %t683, label %then5984, label %endif5986 +then5984: %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 %t685 = load ptr, ptr %a1 %t686 = icmp eq ptr %t685, null - br i1 %t686, label %panic5983, label %ok5984 -panic5983: + br i1 %t686, label %panic5987, label %ok5988 +panic5987: call void @finch_panic(ptr @.str.3818, i64 3171, ptr @.str.3819) unreachable -ok5984: +ok5988: %t687 = getelementptr inbounds %S.gen.Gen, ptr %t685, i32 0, i32 22 %t688 = load i64, ptr %a49 %t689 = load { ptr, i64, i64 }, ptr %t687 %t690 = extractvalue { ptr, i64, i64 } %t689, 1 %t691 = icmp uge i64 %t688, %t690 - br i1 %t691, label %range5985, label %inrange5986 -range5985: + br i1 %t691, label %range5989, label %inrange5990 +range5989: call void @finch_panic_index(ptr @.str.3820, i64 3171, i64 %t688, i64 %t690) unreachable -inrange5986: +inrange5990: %t692 = extractvalue { ptr, i64, i64 } %t689, 0 %t693 = getelementptr inbounds %S.gen.SumDef, ptr %t692, i64 %t688 %t694 = getelementptr inbounds %S.gen.SumDef, ptr %t693, i32 0, i32 2 @@ -61145,11 +61171,11 @@ inrange5986: %t696 = load { ptr, i64, i64 }, ptr %t694 %t697 = extractvalue { ptr, i64, i64 } %t696, 1 %t698 = icmp uge i64 %t695, %t697 - br i1 %t698, label %range5987, label %inrange5988 -range5987: + br i1 %t698, label %range5991, label %inrange5992 +range5991: call void @finch_panic_index(ptr @.str.3821, i64 3171, i64 %t695, i64 %t697) unreachable -inrange5988: +inrange5992: %t699 = extractvalue { ptr, i64, i64 } %t696, 0 %t700 = getelementptr inbounds { ptr, i64, i64 }, ptr %t699, i64 %t695 %t701 = load { ptr, i64, i64 }, ptr %t700 @@ -61163,20 +61189,20 @@ inrange5988: %t708 = getelementptr inbounds { ptr, i64, i64 }, ptr %t707, i64 %t705 store { ptr, i64, i64 } %t704, ptr %t708 store i64 %t706, ptr %t684 - br label %endif5982 -endif5982: - br label %for.step5973 -for.step5973: + br label %endif5986 +endif5986: + br label %for.step5977 +for.step5977: %t709 = load i64, ptr %a660 %t710 = add i64 %t709, 1 store i64 %t710, ptr %a660 - br label %for.cond5971 -for.end5974: + br label %for.cond5975 +for.end5978: %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 %t712 = load i64, ptr %t711 %t713 = icmp sgt i64 %t712, 0 - br i1 %t713, label %then5989, label %endif5991 -then5989: + br i1 %t713, label %then5993, label %endif5995 +then5993: %t714 = load ptr, ptr %a1 %t715 = load %S.ast.Node, ptr %a2 %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 @@ -61198,26 +61224,26 @@ then5989: call void @finch.gen.fail(ptr %t714, %S.ast.Node %t715, { ptr, i64, i64 } %t729) store { ptr, i64, i64 } %t729, ptr %a730 call void @finch_str_drop(ptr %a730) - br label %endif5991 -endif5991: + br label %endif5995 +endif5995: call void @finch.drop.arr_str(ptr %a647) - br label %endif5966 -else5965: + br label %endif5970 +else5969: %t731 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 %t732 = load { ptr, i64, i64 }, ptr %t731 store { ptr, i64, i64 } %t732, ptr %a733 store { ptr, i64, i64 } { ptr @.str.3825, i64 4, i64 0 }, ptr %a734 %t735 = call i32 @finch_str_eq(ptr %a733, ptr %a734) %t736 = icmp ne i32 %t735, 0 - br i1 %t736, label %then5992, label %else5993 -then5992: + br i1 %t736, label %then5996, label %else5997 +then5996: %t737 = load ptr, ptr %a1 %t738 = icmp eq ptr %t737, null - br i1 %t738, label %panic5995, label %ok5996 -panic5995: + br i1 %t738, label %panic5999, label %ok6000 +panic5999: call void @finch_panic(ptr @.str.3826, i64 3178, ptr @.str.3827) unreachable -ok5996: +ok6000: %t739 = getelementptr inbounds %S.gen.Gen, ptr %t737, i32 0, i32 21 %t740 = load ptr, ptr %a1 %t741 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 @@ -61228,11 +61254,11 @@ ok5996: %t746 = load { ptr, i64, i64 }, ptr %t739 %t747 = extractvalue { ptr, i64, i64 } %t746, 1 %t748 = icmp uge i64 %t745, %t747 - br i1 %t748, label %range5997, label %inrange5998 -range5997: + br i1 %t748, label %range6001, label %inrange6002 +range6001: call void @finch_panic_index(ptr @.str.3828, i64 3178, i64 %t745, i64 %t747) unreachable -inrange5998: +inrange6002: %t749 = extractvalue { ptr, i64, i64 } %t746, 0 %t750 = getelementptr inbounds %S.gen.EnumDef, ptr %t749, i64 %t745 %t751 = load %S.gen.EnumDef, ptr %t750 @@ -61245,23 +61271,23 @@ inrange5998: %t758 = getelementptr inbounds { ptr, i64, i64 }, ptr %t757, i32 0, i32 1 %t759 = load i64, ptr %t758 store i64 0, ptr %a760 - br label %for.cond5999 -for.cond5999: + br label %for.cond6003 +for.cond6003: %t761 = load i64, ptr %a760 %t762 = icmp slt i64 %t761, %t759 - br i1 %t762, label %for.body6000, label %for.end6002 -for.body6000: + br i1 %t762, label %for.body6004, label %for.end6006 +for.body6004: %t763 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 %t764 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 3 %t765 = load i64, ptr %a760 %t766 = load { ptr, i64, i64 }, ptr %t764 %t767 = extractvalue { ptr, i64, i64 } %t766, 1 %t768 = icmp uge i64 %t765, %t767 - br i1 %t768, label %range6003, label %inrange6004 -range6003: + br i1 %t768, label %range6007, label %inrange6008 +range6007: call void @finch_panic_index(ptr @.str.3829, i64 3181, i64 %t765, i64 %t767) unreachable -inrange6004: +inrange6008: %t769 = extractvalue { ptr, i64, i64 } %t766, 0 %t770 = getelementptr inbounds i64, ptr %t769, i64 %t765 %t771 = load i64, ptr %t770 @@ -61271,45 +61297,45 @@ inrange6004: %t775 = load i64, ptr %t763 %t776 = load ptr, ptr %a129 store i64 0, ptr %a777 - br label %find.cond6005 -find.cond6005: + br label %find.cond6009 +find.cond6009: %t778 = load i64, ptr %a777 %t779 = icmp slt i64 %t778, %t775 - br i1 %t779, label %find.body6006, label %find.end6009 -find.body6006: + br i1 %t779, label %find.body6010, label %find.end6013 +find.body6010: %t780 = getelementptr inbounds { ptr, i64, i64 }, ptr %t776, i64 %t778 %t781 = load { ptr, i64, i64 }, ptr %t780 store { ptr, i64, i64 } %t781, ptr %a782 store { ptr, i64, i64 } %t773, ptr %a783 %t784 = call i32 @finch_str_eq(ptr %a782, ptr %a783) %t785 = icmp ne i32 %t784, 0 - br i1 %t785, label %find.hit6007, label %find.next6008 -find.hit6007: + br i1 %t785, label %find.hit6011, label %find.next6012 +find.hit6011: store i64 %t778, ptr %a774 - br label %find.end6009 -find.next6008: + br label %find.end6013 +find.next6012: %t786 = add i64 %t778, 1 store i64 %t786, ptr %a777 - br label %find.cond6005 -find.end6009: + br label %find.cond6009 +find.end6013: store { ptr, i64, i64 } %t773, ptr %a787 call void @finch_str_drop(ptr %a787) %t788 = load i64, ptr %a774 %t789 = icmp sge i64 %t788, 0 %t790 = xor i1 %t789, true - br i1 %t790, label %then6010, label %endif6012 -then6010: + br i1 %t790, label %then6014, label %endif6016 +then6014: %t791 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 %t792 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 %t793 = load i64, ptr %a760 %t794 = load { ptr, i64, i64 }, ptr %t792 %t795 = extractvalue { ptr, i64, i64 } %t794, 1 %t796 = icmp uge i64 %t793, %t795 - br i1 %t796, label %range6013, label %inrange6014 -range6013: + br i1 %t796, label %range6017, label %inrange6018 +range6017: call void @finch_panic_index(ptr @.str.3830, i64 3182, i64 %t793, i64 %t795) unreachable -inrange6014: +inrange6018: %t797 = extractvalue { ptr, i64, i64 } %t794, 0 %t798 = getelementptr inbounds { ptr, i64, i64 }, ptr %t797, i64 %t793 %t799 = load { ptr, i64, i64 }, ptr %t798 @@ -61323,20 +61349,20 @@ inrange6014: %t806 = getelementptr inbounds { ptr, i64, i64 }, ptr %t805, i64 %t803 store { ptr, i64, i64 } %t802, ptr %t806 store i64 %t804, ptr %t791 - br label %endif6012 -endif6012: - br label %for.step6001 -for.step6001: + br label %endif6016 +endif6016: + br label %for.step6005 +for.step6005: %t807 = load i64, ptr %a760 %t808 = add i64 %t807, 1 store i64 %t808, ptr %a760 - br label %for.cond5999 -for.end6002: + br label %for.cond6003 +for.end6006: %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 %t810 = load i64, ptr %t809 %t811 = icmp sgt i64 %t810, 0 - br i1 %t811, label %then6015, label %endif6017 -then6015: + br i1 %t811, label %then6019, label %endif6021 +then6019: %t812 = load ptr, ptr %a1 %t813 = load %S.ast.Node, ptr %a2 %t814 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 @@ -61358,12 +61384,12 @@ then6015: call void @finch.gen.fail(ptr %t812, %S.ast.Node %t813, { ptr, i64, i64 } %t827) store { ptr, i64, i64 } %t827, ptr %a828 call void @finch_str_drop(ptr %a828) - br label %endif6017 -endif6017: + br label %endif6021 +endif6021: call void @finch.drop.arr_str(ptr %a756) call void @finch.drop.S_gen_EnumDef(ptr %a755) - br label %endif5994 -else5993: + br label %endif5998 +else5997: %t829 = load ptr, ptr %a1 %t830 = load %S.ast.Node, ptr %a2 %t831 = load %S.ast.Type, ptr %a19 @@ -61383,10 +61409,10 @@ else5993: call void @finch.gen.fail(ptr %t829, %S.ast.Node %t830, { ptr, i64, i64 } %t842) store { ptr, i64, i64 } %t842, ptr %a843 call void @finch_str_drop(ptr %a843) - br label %endif5994 -endif5994: - br label %endif5966 -endif5966: + br label %endif5998 +endif5998: + br label %endif5970 +endif5970: %t844 = load ptr, ptr %a1 %t845 = load %S.ast.Node, ptr %a2 call void @finch.gen.panicIf(ptr %t844, { ptr, i64, i64 } { ptr @.str.3836, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.3837, i64 35, i64 0 }, %S.ast.Node %t845) @@ -61394,15 +61420,15 @@ endif5966: call void @finch.gen.emit(ptr %t846, { ptr, i64, i64 } { ptr @.str.3838, i64 11, i64 0 }) %t847 = load ptr, ptr %a1 %t848 = icmp eq ptr %t847, null - br i1 %t848, label %panic6018, label %ok6019 -panic6018: + br i1 %t848, label %panic6022, label %ok6023 +panic6022: call void @finch_panic(ptr @.str.3839, i64 3194, ptr @.str.3840) unreachable -ok6019: +ok6023: %t849 = getelementptr inbounds %S.gen.Gen, ptr %t847, i32 0, i32 9 store i1 true, ptr %t849 - br label %endif5963 -endif5963: + br label %endif5967 +endif5967: %t850 = load ptr, ptr %a1 %t851 = load i64, ptr %a46 call void @finch.gen.heldEnd(ptr %t850, i64 %t851) @@ -61411,17 +61437,17 @@ endif5963: call void @finch.gen.label(ptr %t852, { ptr, i64, i64 } %t853) %t854 = load i1, ptr %a128 %t855 = xor i1 %t854, true - br i1 %t855, label %then6020, label %endif6022 -then6020: + br i1 %t855, label %then6024, label %endif6026 +then6024: %t856 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t856, { ptr, i64, i64 } { ptr @.str.3841, i64 11, i64 0 }) %t857 = load ptr, ptr %a1 %t858 = icmp eq ptr %t857, null - br i1 %t858, label %panic6023, label %ok6024 -panic6023: + br i1 %t858, label %panic6027, label %ok6028 +panic6027: call void @finch_panic(ptr @.str.3842, i64 3200, ptr @.str.3843) unreachable -ok6024: +ok6028: %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 9 store i1 true, ptr %t859 %t860 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3844, i64 4, i64 0 }) @@ -61435,10 +61461,10 @@ ok6024: call void @finch.drop.S_ast_Type(ptr %a19) call void @finch.drop.S_gen_Val(ptr %a13) ret %S.gen.Val %t861 -endif6022: +endif6026: %t862 = load i1, ptr %a3 - br i1 %t862, label %then6025, label %endif6027 -then6025: + br i1 %t862, label %then6029, label %endif6031 +then6029: %t863 = load ptr, ptr %a1 %t864 = load ptr, ptr %a1 %t865 = load %S.ast.Type, ptr %a133 @@ -61493,7 +61519,7 @@ then6025: call void @finch.drop.S_ast_Type(ptr %a19) call void @finch.drop.S_gen_Val(ptr %a13) ret %S.gen.Val %t901 -endif6027: +endif6031: %t902 = load ptr, ptr %a1 %t903 = load %S.gen.Val, ptr %a13 call void @finch.gen.release(ptr %t902, %S.gen.Val %t903) @@ -61539,22 +61565,22 @@ entry: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 0, ptr %a6 - br label %for.cond6028 -for.cond6028: + br label %for.cond6032 +for.cond6032: %t7 = load i64, ptr %a6 %t8 = icmp slt i64 %t7, %t5 - br i1 %t8, label %for.body6029, label %for.end6031 -for.body6029: + br i1 %t8, label %for.body6033, label %for.end6035 +for.body6033: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t10 = load i64, ptr %a6 %t11 = load { ptr, i64, i64 }, ptr %a1 %t12 = extractvalue { ptr, i64, i64 } %t11, 1 %t13 = icmp uge i64 %t10, %t12 - br i1 %t13, label %range6032, label %inrange6033 -range6032: + br i1 %t13, label %range6036, label %inrange6037 +range6036: call void @finch_panic_index(ptr @.str.3849, i64 3215, i64 %t10, i64 %t12) unreachable -inrange6033: +inrange6037: %t14 = extractvalue { ptr, i64, i64 } %t11, 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t10 %t16 = load { ptr, i64, i64 }, ptr %t15 @@ -61572,11 +61598,11 @@ inrange6033: %t27 = load { ptr, i64, i64 }, ptr %a2 %t28 = extractvalue { ptr, i64, i64 } %t27, 1 %t29 = icmp uge i64 %t26, %t28 - br i1 %t29, label %range6034, label %inrange6035 -range6034: + br i1 %t29, label %range6038, label %inrange6039 +range6038: call void @finch_panic_index(ptr @.str.3851, i64 3215, i64 %t26, i64 %t28) unreachable -inrange6035: +inrange6039: %t30 = extractvalue { ptr, i64, i64 } %t27, 0 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t26 %t32 = load { ptr, i64, i64 }, ptr %t31 @@ -61599,13 +61625,13 @@ inrange6035: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43 store { ptr, i64, i64 } %t42, ptr %t46 store i64 %t44, ptr %t9 - br label %for.step6030 -for.step6030: + br label %for.step6034 +for.step6034: %t47 = load i64, ptr %a6 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a6 - br label %for.cond6028 -for.end6031: + br label %for.cond6032 +for.end6035: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.3853, i64 2, i64 0 }, ptr %a50 call void @finch_str_join(ptr %a51, ptr %a3, ptr %a50) @@ -61659,35 +61685,35 @@ entry: store { ptr, i64, i64 } { ptr @.str.3854, i64 4, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp eq i32 %t7, 0 - br label %logic.from6036 -logic.from6036: - br i1 %t8, label %logic.rhs6037, label %logic.end6038 -logic.rhs6037: + br label %logic.from6040 +logic.from6040: + br i1 %t8, label %logic.rhs6041, label %logic.end6042 +logic.rhs6041: %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t10 = load { ptr, i64, i64 }, ptr %t9 store { ptr, i64, i64 } %t10, ptr %a11 store { ptr, i64, i64 } { ptr @.str.3855, i64 6, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp eq i32 %t13, 0 - br label %logic.rend6039 -logic.rend6039: - br label %logic.end6038 -logic.end6038: - %t15 = phi i1 [ false, %logic.from6036 ], [ %t14, %logic.rend6039 ] - br i1 %t15, label %then6040, label %endif6042 -then6040: + br label %logic.rend6043 +logic.rend6043: + br label %logic.end6042 +logic.end6042: + %t15 = phi i1 [ false, %logic.from6040 ], [ %t14, %logic.rend6043 ] + br i1 %t15, label %then6044, label %endif6046 +then6044: %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } { ptr @.str.3856, i64 80, i64 0 }) - br label %endif6042 -endif6042: + br label %endif6046 +endif6046: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic6043, label %ok6044 -panic6043: + br i1 %t19, label %panic6047, label %ok6048 +panic6047: call void @finch_panic(ptr @.str.3857, i64 3233, ptr @.str.3858) unreachable -ok6044: +ok6048: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 41 %t21 = load { ptr, i64, i64 }, ptr %t20 store { ptr, i64, i64 } %t21, ptr %a22 @@ -61696,11 +61722,11 @@ ok6044: store { ptr, i64, i64 } %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic6045, label %ok6046 -panic6045: + br i1 %t27, label %panic6049, label %ok6050 +panic6049: call void @finch_panic(ptr @.str.3859, i64 3234, ptr @.str.3860) unreachable -ok6046: +ok6050: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 42 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 @@ -61709,11 +61735,11 @@ ok6046: store { ptr, i64, i64 } %t32, ptr %a33 %t34 = load ptr, ptr %a1 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic6047, label %ok6048 -panic6047: + br i1 %t35, label %panic6051, label %ok6052 +panic6051: call void @finch_panic(ptr @.str.3861, i64 3235, ptr @.str.3862) unreachable -ok6048: +ok6052: %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 43 %t37 = load { ptr, i64, i64 }, ptr %t36 store { ptr, i64, i64 } %t37, ptr %a38 @@ -61724,11 +61750,11 @@ ok6048: %t43 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t42) %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic6049, label %ok6050 -panic6049: + br i1 %t45, label %panic6053, label %ok6054 +panic6053: call void @finch_panic(ptr @.str.3863, i64 3236, ptr @.str.3864) unreachable -ok6050: +ok6054: %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 41 %t47 = load { ptr, i64, i64 }, ptr %t46 store { ptr, i64, i64 } %t43, ptr %t46 @@ -61736,11 +61762,11 @@ ok6050: call void @finch_str_drop(ptr %a48) %t49 = load ptr, ptr %a1 %t50 = icmp eq ptr %t49, null - br i1 %t50, label %panic6051, label %ok6052 -panic6051: + br i1 %t50, label %panic6055, label %ok6056 +panic6055: call void @finch_panic(ptr @.str.3866, i64 3237, ptr @.str.3867) unreachable -ok6052: +ok6056: %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 42 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } { ptr @.str.3865, i64 0, i64 0 }, ptr %t51 @@ -61748,11 +61774,11 @@ ok6052: call void @finch_str_drop(ptr %a53) %t54 = load ptr, ptr %a1 %t55 = icmp eq ptr %t54, null - br i1 %t55, label %panic6053, label %ok6054 -panic6053: + br i1 %t55, label %panic6057, label %ok6058 +panic6057: call void @finch_panic(ptr @.str.3869, i64 3238, ptr @.str.3870) unreachable -ok6054: +ok6058: %t56 = getelementptr inbounds %S.gen.Gen, ptr %t54, i32 0, i32 43 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } { ptr @.str.3868, i64 0, i64 0 }, ptr %t56 @@ -61769,11 +61795,11 @@ ok6054: %t67 = insertvalue %S.gen.Fallible zeroinitializer, %S.gen.Val %t66, 0 %t68 = load ptr, ptr %a1 %t69 = icmp eq ptr %t68, null - br i1 %t69, label %panic6055, label %ok6056 -panic6055: + br i1 %t69, label %panic6059, label %ok6060 +panic6059: call void @finch_panic(ptr @.str.3871, i64 3240, ptr @.str.3872) unreachable -ok6056: +ok6060: %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 42 %t71 = load { ptr, i64, i64 }, ptr %t70 store { ptr, i64, i64 } %t71, ptr %a72 @@ -61782,11 +61808,11 @@ ok6056: %t75 = insertvalue %S.gen.Fallible %t67, { ptr, i64, i64 } %t74, 1 %t76 = load ptr, ptr %a1 %t77 = icmp eq ptr %t76, null - br i1 %t77, label %panic6057, label %ok6058 -panic6057: + br i1 %t77, label %panic6061, label %ok6062 +panic6061: call void @finch_panic(ptr @.str.3873, i64 3240, ptr @.str.3874) unreachable -ok6058: +ok6062: %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 43 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 @@ -61797,11 +61823,11 @@ ok6058: %t85 = load { ptr, i64, i64 }, ptr %a25 %t86 = load ptr, ptr %a1 %t87 = icmp eq ptr %t86, null - br i1 %t87, label %panic6059, label %ok6060 -panic6059: + br i1 %t87, label %panic6063, label %ok6064 +panic6063: call void @finch_panic(ptr @.str.3875, i64 3241, ptr @.str.3876) unreachable -ok6060: +ok6064: %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 41 store { ptr, i64, i64 } %t85, ptr %a89 call void @finch_str_copy(ptr %a90, ptr %a89) @@ -61813,11 +61839,11 @@ ok6060: %t94 = load { ptr, i64, i64 }, ptr %a33 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic6061, label %ok6062 -panic6061: + br i1 %t96, label %panic6065, label %ok6066 +panic6065: call void @finch_panic(ptr @.str.3877, i64 3242, ptr @.str.3878) unreachable -ok6062: +ok6066: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 42 store { ptr, i64, i64 } %t94, ptr %a98 call void @finch_str_copy(ptr %a99, ptr %a98) @@ -61829,11 +61855,11 @@ ok6062: %t103 = load { ptr, i64, i64 }, ptr %a41 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null - br i1 %t105, label %panic6063, label %ok6064 -panic6063: + br i1 %t105, label %panic6067, label %ok6068 +panic6067: call void @finch_panic(ptr @.str.3879, i64 3243, ptr @.str.3880) unreachable -ok6064: +ok6068: %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 43 store { ptr, i64, i64 } %t103, ptr %a107 call void @finch_str_copy(ptr %a108, ptr %a107) @@ -61846,13 +61872,13 @@ ok6064: %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = icmp eq i64 %t114, 0 - br i1 %t115, label %then6065, label %endif6067 -then6065: + br i1 %t115, label %then6069, label %endif6071 +then6069: %t116 = load ptr, ptr %a1 %t117 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } { ptr @.str.3881, i64 50, i64 0 }) - br label %endif6067 -endif6067: + br label %endif6071 +endif6071: %t118 = load %S.gen.Fallible, ptr %a84 call void @finch.drop.S_gen_Val(ptr %a62) call void @finch_str_drop(ptr %a41) @@ -61941,42 +61967,42 @@ entry: store %S.ast.Node %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic6068, label %ok6069 -panic6068: + br i1 %t4, label %panic6072, label %ok6073 +panic6072: call void @finch_panic(ptr @.str.3882, i64 3252, ptr @.str.3883) unreachable -ok6069: +ok6073: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 - br i1 %t7, label %then6070, label %endif6072 -then6070: + br i1 %t7, label %then6074, label %endif6076 +then6074: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3884, i64 30, i64 0 }) - br label %endif6072 -endif6072: + br label %endif6076 +endif6076: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic6073, label %ok6074 -panic6073: + br i1 %t11, label %panic6077, label %ok6078 +panic6077: call void @finch_panic(ptr @.str.3885, i64 3255, ptr @.str.3886) unreachable -ok6074: +ok6078: %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 %t13 = getelementptr inbounds %S.gen.FnSig, ptr %t12, i32 0, i32 9 %t14 = load i1, ptr %t13 %t15 = xor i1 %t14, true - br i1 %t15, label %then6075, label %endif6077 -then6075: + br i1 %t15, label %then6079, label %endif6081 +then6079: store { ptr, i64, i64 } { ptr @.str.3887, i64 1, i64 0 }, ptr %a16 %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null - br i1 %t18, label %panic6078, label %ok6079 -panic6078: + br i1 %t18, label %panic6082, label %ok6083 +panic6082: call void @finch_panic(ptr @.str.3888, i64 3257, ptr @.str.3889) unreachable -ok6079: +ok6083: %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 13 %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i32 0, i32 12 %t21 = getelementptr inbounds %S.ast.Type, ptr %t20, i32 0, i32 0 @@ -61985,15 +62011,15 @@ ok6079: store { ptr, i64, i64 } { ptr @.str.3890, i64 4, i64 0 }, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp eq i32 %t25, 0 - br i1 %t26, label %then6080, label %endif6082 -then6080: + br i1 %t26, label %then6084, label %endif6086 +then6084: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic6083, label %ok6084 -panic6083: + br i1 %t28, label %panic6087, label %ok6088 +panic6087: call void @finch_panic(ptr @.str.3891, i64 3258, ptr @.str.3892) unreachable -ok6084: +ok6088: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 13 %t30 = getelementptr inbounds %S.gen.FnSig, ptr %t29, i32 0, i32 12 %t31 = load %S.ast.Type, ptr %t30 @@ -62008,17 +62034,17 @@ ok6084: store { ptr, i64, i64 } %t37, ptr %a16 store { ptr, i64, i64 } %t38, ptr %a39 call void @finch_str_drop(ptr %a39) - br label %endif6082 -endif6082: + br label %endif6086 +endif6086: %t40 = load ptr, ptr %a1 %t41 = load %S.ast.Node, ptr %a2 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null - br i1 %t43, label %panic6085, label %ok6086 -panic6085: + br i1 %t43, label %panic6089, label %ok6090 +panic6089: call void @finch_panic(ptr @.str.3895, i64 3260, ptr @.str.3896) unreachable -ok6086: +ok6090: %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 13 %t45 = getelementptr inbounds %S.gen.FnSig, ptr %t44, i32 0, i32 1 %t46 = load { ptr, i64, i64 }, ptr %t45 @@ -62049,18 +62075,18 @@ ok6086: store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) call void @finch_str_drop(ptr %a16) - br label %endif6077 -endif6077: + br label %endif6081 +endif6081: %t68 = load ptr, ptr %a1 %t69 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t70 = load { ptr, i64, i64 }, ptr %t69 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 0, %t71 - br i1 %t72, label %range6087, label %inrange6088 -range6087: + br i1 %t72, label %range6091, label %inrange6092 +range6091: call void @finch_panic_index(ptr @.str.3899, i64 3262, i64 0, i64 %t71) unreachable -inrange6088: +inrange6092: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 0 %t75 = load %S.ast.Node, ptr %t74 @@ -62089,11 +62115,11 @@ inrange6088: %t94 = load ptr, ptr %a1 %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic6089, label %ok6090 -panic6089: + br i1 %t96, label %panic6093, label %ok6094 +panic6093: call void @finch_panic(ptr @.str.3903, i64 3269, ptr @.str.3904) unreachable -ok6090: +ok6094: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 13 %t98 = load %S.gen.FnSig, ptr %t97 %t99 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t94, %S.gen.FnSig %t98) @@ -62113,11 +62139,11 @@ ok6090: %t111 = load ptr, ptr %a1 %t112 = load ptr, ptr %a1 %t113 = icmp eq ptr %t112, null - br i1 %t113, label %panic6091, label %ok6092 -panic6091: + br i1 %t113, label %panic6095, label %ok6096 +panic6095: call void @finch_panic(ptr @.str.3907, i64 3269, ptr @.str.3908) unreachable -ok6092: +ok6096: %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 13 %t115 = load %S.gen.FnSig, ptr %t114 %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t111, %S.gen.FnSig %t115) @@ -62163,11 +62189,11 @@ ok6092: call void @finch_str_drop(ptr %a147) %t148 = load ptr, ptr %a1 %t149 = icmp eq ptr %t148, null - br i1 %t149, label %panic6093, label %ok6094 -panic6093: + br i1 %t149, label %panic6097, label %ok6098 +panic6097: call void @finch_panic(ptr @.str.3911, i64 3270, ptr @.str.3912) unreachable -ok6094: +ok6098: %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 9 store i1 true, ptr %t150 %t151 = load ptr, ptr %a1 @@ -62263,11 +62289,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range6095, label %inrange6096 -range6095: + br i1 %t8, label %range6099, label %inrange6100 +range6099: call void @finch_panic_index(ptr @.str.3913, i64 3277, i64 0, i64 %t7) unreachable -inrange6096: +inrange6100: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -62296,8 +62322,8 @@ inrange6096: call void @finch.gen.label(ptr %t31, { ptr, i64, i64 } %t32) %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 %t34 = load i1, ptr %t33 - br i1 %t34, label %then6097, label %endif6099 -then6097: + br i1 %t34, label %then6101, label %endif6103 +then6101: %t35 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t35) %t36 = load ptr, ptr %a1 @@ -62315,22 +62341,22 @@ then6097: %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 - br i1 %t48, label %range6100, label %inrange6101 -range6100: + br i1 %t48, label %range6104, label %inrange6105 +range6104: call void @finch_panic_index(ptr @.str.3918, i64 3286, i64 1, i64 %t47) unreachable -inrange6101: +inrange6105: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 call void @finch.gen.block(ptr %t44, %S.ast.Node %t51, i1 true) %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic6102, label %ok6103 -panic6102: + br i1 %t53, label %panic6106, label %ok6107 +panic6106: call void @finch_panic(ptr @.str.3919, i64 3287, ptr @.str.3920) unreachable -ok6103: +ok6107: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 9 %t55 = load i1, ptr %t54 store i1 %t55, ptr %a56 @@ -62338,10 +62364,10 @@ ok6103: call void @finch.gen.popScope(ptr %t57) %t58 = load i1, ptr %a56 %t59 = xor i1 %t58, true - br label %logic.from6104 -logic.from6104: - br i1 %t59, label %logic.rhs6105, label %logic.end6106 -logic.rhs6105: + br label %logic.from6108 +logic.from6108: + br i1 %t59, label %logic.rhs6109, label %logic.end6110 +logic.rhs6109: %t60 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 %t62 = load { ptr, i64, i64 }, ptr %t61 @@ -62349,45 +62375,45 @@ logic.rhs6105: store { ptr, i64, i64 } { ptr @.str.3921, i64 4, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp eq i32 %t65, 0 - br label %logic.rend6107 -logic.rend6107: - br label %logic.end6106 -logic.end6106: - %t67 = phi i1 [ false, %logic.from6104 ], [ %t66, %logic.rend6107 ] - br label %logic.from6108 -logic.from6108: - br i1 %t67, label %logic.rhs6109, label %logic.end6110 -logic.rhs6109: - %t68 = load i1, ptr %a3 - %t69 = xor i1 %t68, true br label %logic.rend6111 logic.rend6111: br label %logic.end6110 logic.end6110: - %t70 = phi i1 [ false, %logic.from6108 ], [ %t69, %logic.rend6111 ] - br i1 %t70, label %then6112, label %endif6114 -then6112: + %t67 = phi i1 [ false, %logic.from6108 ], [ %t66, %logic.rend6111 ] + br label %logic.from6112 +logic.from6112: + br i1 %t67, label %logic.rhs6113, label %logic.end6114 +logic.rhs6113: + %t68 = load i1, ptr %a3 + %t69 = xor i1 %t68, true + br label %logic.rend6115 +logic.rend6115: + br label %logic.end6114 +logic.end6114: + %t70 = phi i1 [ false, %logic.from6112 ], [ %t69, %logic.rend6115 ] + br i1 %t70, label %then6116, label %endif6118 +then6116: %t71 = load ptr, ptr %a1 %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 1, %t74 - br i1 %t75, label %range6115, label %inrange6116 -range6115: + br i1 %t75, label %range6119, label %inrange6120 +range6119: call void @finch_panic_index(ptr @.str.3922, i64 3290, i64 1, i64 %t74) unreachable -inrange6116: +inrange6120: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 1 %t78 = load %S.ast.Node, ptr %t77 call void @finch.gen.fail(ptr %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.3923, i64 142, i64 0 }) - br label %endif6114 -endif6114: + br label %endif6118 +endif6118: %t79 = load i1, ptr %a3 - br label %logic.from6117 -logic.from6117: - br i1 %t79, label %logic.rhs6118, label %logic.end6119 -logic.rhs6118: + br label %logic.from6121 +logic.from6121: + br i1 %t79, label %logic.rhs6122, label %logic.end6123 +logic.rhs6122: %t80 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t81 = getelementptr inbounds %S.ast.Type, ptr %t80, i32 0, i32 0 %t82 = load { ptr, i64, i64 }, ptr %t81 @@ -62395,13 +62421,13 @@ logic.rhs6118: store { ptr, i64, i64 } { ptr @.str.3924, i64 4, i64 0 }, ptr %a84 %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) %t86 = icmp eq i32 %t85, 0 - br label %logic.rend6120 -logic.rend6120: - br label %logic.end6119 -logic.end6119: - %t87 = phi i1 [ false, %logic.from6117 ], [ %t86, %logic.rend6120 ] - br i1 %t87, label %then6121, label %endif6123 -then6121: + br label %logic.rend6124 +logic.rend6124: + br label %logic.end6123 +logic.end6123: + %t87 = phi i1 [ false, %logic.from6121 ], [ %t86, %logic.rend6124 ] + br i1 %t87, label %then6125, label %endif6127 +then6125: %t88 = load ptr, ptr %a1 %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3925, i64 6, i64 0 }) store { ptr, i64, i64 } %t89, ptr %a90 @@ -62428,7 +62454,7 @@ then6121: call void @finch.drop.S_gen_Val(ptr %a19) call void @finch.drop.S_gen_Fallible(ptr %a13) ret %S.gen.Val %t102 -endif6123: +endif6127: %t103 = load ptr, ptr %a1 %t104 = load { ptr, i64, i64 }, ptr %a25 call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) @@ -62440,7 +62466,7 @@ endif6123: call void @finch_str_drop(ptr %a22) call void @finch.drop.S_gen_Fallible(ptr %a13) ret %S.gen.Val %t107 -endif6099: +endif6103: %t108 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 %t110 = load { ptr, i64, i64 }, ptr %t109 @@ -62448,24 +62474,24 @@ endif6099: store { ptr, i64, i64 } { ptr @.str.3927, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 - br i1 %t114, label %then6124, label %endif6126 -then6124: + br i1 %t114, label %then6128, label %endif6130 +then6128: %t115 = load ptr, ptr %a1 %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t117 = load { ptr, i64, i64 }, ptr %t116 %t118 = extractvalue { ptr, i64, i64 } %t117, 1 %t119 = icmp uge i64 1, %t118 - br i1 %t119, label %range6127, label %inrange6128 -range6127: + br i1 %t119, label %range6131, label %inrange6132 +range6131: call void @finch_panic_index(ptr @.str.3928, i64 3306, i64 1, i64 %t118) unreachable -inrange6128: +inrange6132: %t120 = extractvalue { ptr, i64, i64 } %t117, 0 %t121 = getelementptr inbounds %S.ast.Node, ptr %t120, i64 1 %t122 = load %S.ast.Node, ptr %t121 call void @finch.gen.fail(ptr %t115, %S.ast.Node %t122, { ptr, i64, i64 } { ptr @.str.3929, i64 98, i64 0 }) - br label %endif6126 -endif6126: + br label %endif6130 +endif6130: %t123 = load ptr, ptr %a1 call void @finch.gen.pushScope(ptr %t123) %t124 = load ptr, ptr %a1 @@ -62484,11 +62510,11 @@ endif6126: %t135 = load { ptr, i64, i64 }, ptr %t134 %t136 = extractvalue { ptr, i64, i64 } %t135, 1 %t137 = icmp uge i64 1, %t136 - br i1 %t137, label %range6129, label %inrange6130 -range6129: + br i1 %t137, label %range6133, label %inrange6134 +range6133: call void @finch_panic_index(ptr @.str.3932, i64 3310, i64 1, i64 %t136) unreachable -inrange6130: +inrange6134: %t138 = extractvalue { ptr, i64, i64 } %t135, 0 %t139 = getelementptr inbounds %S.ast.Node, ptr %t138, i64 1 %t140 = load %S.ast.Node, ptr %t139 @@ -62501,11 +62527,11 @@ inrange6130: %t147 = load { ptr, i64, i64 }, ptr %t146 %t148 = extractvalue { ptr, i64, i64 } %t147, 1 %t149 = icmp uge i64 1, %t148 - br i1 %t149, label %range6131, label %inrange6132 -range6131: + br i1 %t149, label %range6135, label %inrange6136 +range6135: call void @finch_panic_index(ptr @.str.3933, i64 3310, i64 1, i64 %t148) unreachable -inrange6132: +inrange6136: %t150 = extractvalue { ptr, i64, i64 } %t147, 0 %t151 = getelementptr inbounds %S.ast.Node, ptr %t150, i64 1 %t152 = load %S.ast.Node, ptr %t151 @@ -62657,28 +62683,28 @@ entry: store { ptr, i64, i64 } { ptr @.str.3943, i64 5, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br i1 %t9, label %then6133, label %endif6135 -then6133: + br i1 %t9, label %then6137, label %endif6139 +then6137: %t10 = load ptr, ptr %a1 %t11 = load %S.ast.Node, ptr %a2 %t12 = load %S.ast.Type, ptr %a3 %t13 = call %S.gen.Val @finch.gen.arrayLit(ptr %t10, %S.ast.Node %t11, %S.ast.Type %t12) ret %S.gen.Val %t13 -endif6135: +endif6139: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3944, i64 3, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %then6136, label %endif6138 -then6136: + br i1 %t19, label %then6140, label %endif6142 +then6140: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a2 %t22 = load %S.ast.Type, ptr %a3 %t23 = call %S.gen.Val @finch.gen.mapLit(ptr %t20, %S.ast.Node %t21, %S.ast.Type %t22) ret %S.gen.Val %t23 -endif6138: +endif6142: %t24 = load ptr, ptr %a1 %t25 = load %S.ast.Node, ptr %a2 %t26 = call %S.gen.Val @finch.gen.expr(ptr %t24, %S.ast.Node %t25) @@ -62775,31 +62801,31 @@ entry: store { ptr, i64, i64 } { ptr @.str.3945, i64 3, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br i1 %t13, label %then6139, label %endif6141 -then6139: + br i1 %t13, label %then6143, label %endif6145 +then6143: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } { ptr @.str.3947, i64 2, i64 0 }, ptr %a18 %t19 = call i32 @finch_str_starts(ptr %a16, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br label %logic.from6142 -logic.from6142: - br i1 %t20, label %logic.end6144, label %logic.rhs6143 -logic.rhs6143: + br label %logic.from6146 +logic.from6146: + br i1 %t20, label %logic.end6148, label %logic.rhs6147 +logic.rhs6147: %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } { ptr @.str.3949, i64 2, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_starts(ptr %a23, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br label %logic.rend6145 -logic.rend6145: - br label %logic.end6144 -logic.end6144: - %t28 = phi i1 [ true, %logic.from6142 ], [ %t27, %logic.rend6145 ] - br i1 %t28, label %then6146, label %endif6148 -then6146: + br label %logic.rend6149 +logic.rend6149: + br label %logic.end6148 +logic.end6148: + %t28 = phi i1 [ true, %logic.from6146 ], [ %t27, %logic.rend6149 ] + br i1 %t28, label %then6150, label %endif6152 +then6150: store i64 0, ptr %a29 %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t31 = load { ptr, i64, i64 }, ptr %t30 @@ -62811,14 +62837,14 @@ then6146: %t37 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t37, ptr %a38 store i64 0, ptr %a39 - br label %each.cond6149 -each.cond6149: + br label %each.cond6153 +each.cond6153: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a38, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = load i64, ptr %a39 %t43 = icmp slt i64 %t42, %t41 - br i1 %t43, label %each.body6150, label %each.end6152 -each.body6150: + br i1 %t43, label %each.body6154, label %each.end6156 +each.body6154: %t44 = load ptr, ptr %a38 %t45 = getelementptr inbounds i8, ptr %t44, i64 %t42 %t46 = load i8, ptr %t45 @@ -62830,62 +62856,62 @@ each.body6150: store i64 %t51, ptr %a52 %t53 = load i8, ptr %a47 %t54 = icmp uge i8 %t53, 97 - br label %logic.from6153 -logic.from6153: - br i1 %t54, label %logic.rhs6154, label %logic.end6155 -logic.rhs6154: + br label %logic.from6157 +logic.from6157: + br i1 %t54, label %logic.rhs6158, label %logic.end6159 +logic.rhs6158: %t55 = load i8, ptr %a47 %t56 = icmp ule i8 %t55, 102 - br label %logic.rend6156 -logic.rend6156: - br label %logic.end6155 -logic.end6155: - %t57 = phi i1 [ false, %logic.from6153 ], [ %t56, %logic.rend6156 ] - br i1 %t57, label %then6157, label %endif6159 -then6157: + br label %logic.rend6160 +logic.rend6160: + br label %logic.end6159 +logic.end6159: + %t57 = phi i1 [ false, %logic.from6157 ], [ %t56, %logic.rend6160 ] + br i1 %t57, label %then6161, label %endif6163 +then6161: %t58 = load i8, ptr %a47 %t59 = zext i8 %t58 to i64 %t60 = zext i8 97 to i64 %t61 = sub i64 %t59, %t60 %t62 = add i64 %t61, 10 store i64 %t62, ptr %a52 - br label %endif6159 -endif6159: + br label %endif6163 +endif6163: %t63 = load i8, ptr %a47 %t64 = icmp uge i8 %t63, 65 - br label %logic.from6160 -logic.from6160: - br i1 %t64, label %logic.rhs6161, label %logic.end6162 -logic.rhs6161: + br label %logic.from6164 +logic.from6164: + br i1 %t64, label %logic.rhs6165, label %logic.end6166 +logic.rhs6165: %t65 = load i8, ptr %a47 %t66 = icmp ule i8 %t65, 70 - br label %logic.rend6163 -logic.rend6163: - br label %logic.end6162 -logic.end6162: - %t67 = phi i1 [ false, %logic.from6160 ], [ %t66, %logic.rend6163 ] - br i1 %t67, label %then6164, label %endif6166 -then6164: + br label %logic.rend6167 +logic.rend6167: + br label %logic.end6166 +logic.end6166: + %t67 = phi i1 [ false, %logic.from6164 ], [ %t66, %logic.rend6167 ] + br i1 %t67, label %then6168, label %endif6170 +then6168: %t68 = load i8, ptr %a47 %t69 = zext i8 %t68 to i64 %t70 = zext i8 65 to i64 %t71 = sub i64 %t69, %t70 %t72 = add i64 %t71, 10 store i64 %t72, ptr %a52 - br label %endif6166 -endif6166: + br label %endif6170 +endif6170: %t73 = load i64, ptr %a29 %t74 = mul i64 %t73, 16 %t75 = load i64, ptr %a52 %t76 = add i64 %t74, %t75 store i64 %t76, ptr %a29 - br label %each.step6151 -each.step6151: + br label %each.step6155 +each.step6155: %t77 = load i64, ptr %a39 %t78 = add i64 %t77, 1 store i64 %t78, ptr %a39 - br label %each.cond6149 -each.end6152: + br label %each.cond6153 +each.end6156: call void @finch_str_drop(ptr %a38) %t79 = load i64, ptr %a29 call void @finch_str_from_int(ptr %a80, i64 %t79) @@ -62896,7 +62922,7 @@ each.end6152: %t85 = insertvalue %S.gen.Val %t84, i1 true, 3 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t85 -endif6148: +endif6152: %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t87 = load { ptr, i64, i64 }, ptr %t86 store { ptr, i64, i64 } %t87, ptr %a88 @@ -62909,14 +62935,14 @@ endif6148: %t95 = insertvalue %S.gen.Val %t94, i1 true, 3 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t95 -endif6141: +endif6145: %t96 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.3954, i64 5, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 - br i1 %t100, label %then6167, label %endif6169 -then6167: + br i1 %t100, label %then6171, label %endif6173 +then6171: %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t102, ptr %a103 @@ -62928,14 +62954,14 @@ then6167: %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t109 -endif6169: +endif6173: %t110 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t110, ptr %a111 store { ptr, i64, i64 } { ptr @.str.3956, i64 4, i64 0 }, ptr %a112 %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) %t114 = icmp ne i32 %t113, 0 - br i1 %t114, label %then6170, label %endif6172 -then6170: + br i1 %t114, label %then6174, label %endif6176 +then6174: %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t116, ptr %a117 @@ -62946,23 +62972,23 @@ then6170: %t122 = insertvalue %S.gen.Val %t120, %S.ast.Type %t121, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t122 -endif6172: +endif6176: %t123 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t123, ptr %a124 store { ptr, i64, i64 } { ptr @.str.3958, i64 4, i64 0 }, ptr %a125 %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) %t127 = icmp ne i32 %t126, 0 - br i1 %t127, label %then6173, label %endif6175 -then6173: + br i1 %t127, label %then6177, label %endif6179 +then6177: %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = extractvalue { ptr, i64, i64 } %t129, 1 %t131 = icmp uge i64 0, %t130 - br i1 %t131, label %range6176, label %inrange6177 -range6176: + br i1 %t131, label %range6180, label %inrange6181 +range6180: call void @finch_panic_index(ptr @.str.3959, i64 3360, i64 0, i64 %t130) unreachable -inrange6177: +inrange6181: %t132 = extractvalue { ptr, i64, i64 } %t129, 0 %t133 = getelementptr inbounds i8, ptr %t132, i64 0 %t134 = load i8, ptr %t133 @@ -62976,69 +63002,69 @@ inrange6177: %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t142 -endif6175: +endif6179: %t143 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t143, ptr %a144 store { ptr, i64, i64 } { ptr @.str.3961, i64 3, i64 0 }, ptr %a145 %t146 = call i32 @finch_str_eq(ptr %a144, ptr %a145) %t147 = icmp ne i32 %t146, 0 - br i1 %t147, label %then6178, label %endif6180 -then6178: + br i1 %t147, label %then6182, label %endif6184 +then6182: %t148 = load ptr, ptr %a1 %t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 %t150 = load { ptr, i64, i64 }, ptr %t149 %t151 = call %S.gen.Val @finch.gen.strConst(ptr %t148, { ptr, i64, i64 } %t150) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t151 -endif6180: +endif6184: %t152 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t152, ptr %a153 store { ptr, i64, i64 } { ptr @.str.3962, i64 4, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 - br i1 %t156, label %then6181, label %endif6183 -then6181: + br i1 %t156, label %then6185, label %endif6187 +then6185: %t157 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.3963, i64 4, i64 0 }, 0 %t158 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3964, i64 4, i64 0 }) %t159 = insertvalue %S.gen.Val %t157, %S.ast.Type %t158, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t159 -endif6183: +endif6187: %t160 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t160, ptr %a161 store { ptr, i64, i64 } { ptr @.str.3965, i64 3, i64 0 }, ptr %a162 %t163 = call i32 @finch_str_eq(ptr %a161, ptr %a162) %t164 = icmp ne i32 %t163, 0 - br label %logic.from6184 -logic.from6184: - br i1 %t164, label %logic.end6186, label %logic.rhs6185 -logic.rhs6185: + br label %logic.from6188 +logic.from6188: + br i1 %t164, label %logic.end6190, label %logic.rhs6189 +logic.rhs6189: %t165 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t165, ptr %a166 store { ptr, i64, i64 } { ptr @.str.3966, i64 6, i64 0 }, ptr %a167 %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) %t169 = icmp ne i32 %t168, 0 - br label %logic.rend6187 -logic.rend6187: - br label %logic.end6186 -logic.end6186: - %t170 = phi i1 [ true, %logic.from6184 ], [ %t169, %logic.rend6187 ] - br label %logic.from6188 -logic.from6188: - br i1 %t170, label %logic.end6190, label %logic.rhs6189 -logic.rhs6189: + br label %logic.rend6191 +logic.rend6191: + br label %logic.end6190 +logic.end6190: + %t170 = phi i1 [ true, %logic.from6188 ], [ %t169, %logic.rend6191 ] + br label %logic.from6192 +logic.from6192: + br i1 %t170, label %logic.end6194, label %logic.rhs6193 +logic.rhs6193: %t171 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.3967, i64 5, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 - br label %logic.rend6191 -logic.rend6191: - br label %logic.end6190 -logic.end6190: - %t176 = phi i1 [ true, %logic.from6188 ], [ %t175, %logic.rend6191 ] - br i1 %t176, label %then6192, label %endif6194 -then6192: + br label %logic.rend6195 +logic.rend6195: + br label %logic.end6194 +logic.end6194: + %t176 = phi i1 [ true, %logic.from6192 ], [ %t175, %logic.rend6195 ] + br i1 %t176, label %then6196, label %endif6198 +then6196: %t177 = load ptr, ptr %a1 %t178 = load %S.ast.Node, ptr %a2 %t179 = call %S.gen.Ref @finch.gen.ref(ptr %t177, %S.ast.Node %t178, i1 false) @@ -63046,8 +63072,8 @@ then6192: %t181 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 0 %t182 = load i1, ptr %t181 %t183 = xor i1 %t182, true - br i1 %t183, label %then6195, label %endif6197 -then6195: + br i1 %t183, label %then6199, label %endif6201 +then6199: %t184 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 2 %t185 = load %S.gen.Val, ptr %t184 store %S.gen.Val %t185, ptr %a186 @@ -63056,7 +63082,7 @@ then6195: call void @finch.drop.S_gen_Ref(ptr %a180) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t188 -endif6197: +endif6201: %t189 = load ptr, ptr %a1 %t190 = load ptr, ptr %a1 %t191 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 @@ -63080,105 +63106,105 @@ endif6197: call void @finch.drop.S_gen_Ref(ptr %a180) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t207 -endif6194: +endif6198: %t208 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t208, ptr %a209 store { ptr, i64, i64 } { ptr @.str.3968, i64 5, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 - br i1 %t212, label %then6198, label %endif6200 -then6198: + br i1 %t212, label %then6202, label %endif6204 +then6202: %t213 = load ptr, ptr %a1 %t214 = load %S.ast.Node, ptr %a2 %t215 = call %S.gen.Val @finch.gen.matchGen(ptr %t213, %S.ast.Node %t214, i1 true) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t215 -endif6200: +endif6204: %t216 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t216, ptr %a217 store { ptr, i64, i64 } { ptr @.str.3969, i64 3, i64 0 }, ptr %a218 %t219 = call i32 @finch_str_eq(ptr %a217, ptr %a218) %t220 = icmp ne i32 %t219, 0 - br i1 %t220, label %then6201, label %endif6203 -then6201: + br i1 %t220, label %then6205, label %endif6207 +then6205: %t221 = load ptr, ptr %a1 %t222 = load %S.ast.Node, ptr %a2 %t223 = call %S.gen.Val @finch.gen.tryExpr(ptr %t221, %S.ast.Node %t222) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t223 -endif6203: +endif6207: %t224 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t224, ptr %a225 store { ptr, i64, i64 } { ptr @.str.3970, i64 2, i64 0 }, ptr %a226 %t227 = call i32 @finch_str_eq(ptr %a225, ptr %a226) %t228 = icmp ne i32 %t227, 0 - br i1 %t228, label %then6204, label %endif6206 -then6204: + br i1 %t228, label %then6208, label %endif6210 +then6208: %t229 = load ptr, ptr %a1 %t230 = load %S.ast.Node, ptr %a2 %t231 = call %S.gen.Val @finch.gen.orElse(ptr %t229, %S.ast.Node %t230, i1 false) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t231 -endif6206: +endif6210: %t232 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t232, ptr %a233 store { ptr, i64, i64 } { ptr @.str.3971, i64 5, i64 0 }, ptr %a234 %t235 = call i32 @finch_str_eq(ptr %a233, ptr %a234) %t236 = icmp ne i32 %t235, 0 - br i1 %t236, label %then6207, label %endif6209 -then6207: + br i1 %t236, label %then6211, label %endif6213 +then6211: %t237 = load ptr, ptr %a1 %t238 = load %S.ast.Node, ptr %a2 %t239 = call %S.gen.Val @finch.gen.unary(ptr %t237, %S.ast.Node %t238) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t239 -endif6209: +endif6213: %t240 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t240, ptr %a241 store { ptr, i64, i64 } { ptr @.str.3972, i64 6, i64 0 }, ptr %a242 %t243 = call i32 @finch_str_eq(ptr %a241, ptr %a242) %t244 = icmp ne i32 %t243, 0 - br i1 %t244, label %then6210, label %endif6212 -then6210: + br i1 %t244, label %then6214, label %endif6216 +then6214: %t245 = load ptr, ptr %a1 %t246 = load %S.ast.Node, ptr %a2 %t247 = call %S.gen.Val @finch.gen.binary(ptr %t245, %S.ast.Node %t246) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t247 -endif6212: +endif6216: %t248 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t248, ptr %a249 store { ptr, i64, i64 } { ptr @.str.3973, i64 4, i64 0 }, ptr %a250 %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) %t252 = icmp ne i32 %t251, 0 - br i1 %t252, label %then6213, label %endif6215 -then6213: + br i1 %t252, label %then6217, label %endif6219 +then6217: %t253 = load ptr, ptr %a1 %t254 = load %S.ast.Node, ptr %a2 %t255 = call %S.gen.Val @finch.gen.call(ptr %t253, %S.ast.Node %t254) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t255 -endif6215: +endif6219: %t256 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t256, ptr %a257 store { ptr, i64, i64 } { ptr @.str.3974, i64 6, i64 0 }, ptr %a258 %t259 = call i32 @finch_str_eq(ptr %a257, ptr %a258) %t260 = icmp ne i32 %t259, 0 - br i1 %t260, label %then6216, label %endif6218 -then6216: + br i1 %t260, label %then6220, label %endif6222 +then6220: %t261 = load ptr, ptr %a1 %t262 = load %S.ast.Node, ptr %a2 %t263 = call %S.gen.Val @finch.gen.method(ptr %t261, %S.ast.Node %t262) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t263 -endif6218: +endif6222: %t264 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t264, ptr %a265 store { ptr, i64, i64 } { ptr @.str.3975, i64 5, i64 0 }, ptr %a266 %t267 = call i32 @finch_str_eq(ptr %a265, ptr %a266) %t268 = icmp ne i32 %t267, 0 - br i1 %t268, label %then6219, label %endif6221 -then6219: + br i1 %t268, label %then6223, label %endif6225 +then6223: %t269 = load ptr, ptr %a1 %t270 = load %S.ast.Node, ptr %a2 %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3976, i64 4, i64 0 }) @@ -63187,14 +63213,14 @@ then6219: call void @finch.drop.S_ast_Type(ptr %a273) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t272 -endif6221: +endif6225: %t274 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t274, ptr %a275 store { ptr, i64, i64 } { ptr @.str.3977, i64 3, i64 0 }, ptr %a276 %t277 = call i32 @finch_str_eq(ptr %a275, ptr %a276) %t278 = icmp ne i32 %t277, 0 - br i1 %t278, label %then6222, label %endif6224 -then6222: + br i1 %t278, label %then6226, label %endif6228 +then6226: %t279 = load ptr, ptr %a1 %t280 = load %S.ast.Node, ptr %a2 %t281 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3978, i64 4, i64 0 }) @@ -63203,7 +63229,7 @@ then6222: call void @finch.drop.S_ast_Type(ptr %a283) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t282 -endif6224: +endif6228: %t284 = load ptr, ptr %a1 %t285 = load %S.ast.Node, ptr %a2 %t286 = load { ptr, i64, i64 }, ptr %a8 @@ -63320,11 +63346,11 @@ entry: %t5 = load { ptr, i64, i64 }, ptr %t4 %t6 = extractvalue { ptr, i64, i64 } %t5, 1 %t7 = icmp uge i64 0, %t6 - br i1 %t7, label %range6225, label %inrange6226 -range6225: + br i1 %t7, label %range6229, label %inrange6230 +range6229: call void @finch_panic_index(ptr @.str.3980, i64 3408, i64 0, i64 %t6) unreachable -inrange6226: +inrange6230: %t8 = extractvalue { ptr, i64, i64 } %t5, 0 %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 %t10 = load %S.ast.Node, ptr %t9 @@ -63336,8 +63362,8 @@ inrange6226: store { ptr, i64, i64 } { ptr @.str.3981, i64 1, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br i1 %t18, label %then6227, label %endif6229 -then6227: + br i1 %t18, label %then6231, label %endif6233 +then6231: %t19 = load ptr, ptr %a1 %t20 = load %S.gen.Val, ptr %a12 %t21 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3982, i64 4, i64 0 }) @@ -63345,11 +63371,11 @@ then6227: %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 0, %t24 - br i1 %t25, label %range6230, label %inrange6231 -range6230: + br i1 %t25, label %range6234, label %inrange6235 +range6234: call void @finch_panic_index(ptr @.str.3983, i64 3410, i64 0, i64 %t24) unreachable -inrange6231: +inrange6235: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds %S.ast.Node, ptr %t26, i64 0 %t28 = load %S.ast.Node, ptr %t27 @@ -63379,21 +63405,21 @@ inrange6231: call void @finch.drop.S_gen_Val(ptr %a31) call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t48 -endif6229: +endif6233: %t49 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.3988, i64 1, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %then6232, label %endif6234 -then6232: + br i1 %t54, label %then6236, label %endif6238 +then6236: %t55 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t56 = load %S.ast.Type, ptr %t55 %t57 = call i1 @finch.gen.isInt(%S.ast.Type %t56) %t58 = xor i1 %t57, true - br i1 %t58, label %then6235, label %endif6237 -then6235: + br i1 %t58, label %then6239, label %endif6241 +then6239: %t59 = load ptr, ptr %a1 %t60 = load %S.ast.Node, ptr %a2 %t61 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63408,8 +63434,8 @@ then6235: call void @finch.gen.fail(ptr %t59, %S.ast.Node %t60, { ptr, i64, i64 } %t68) store { ptr, i64, i64 } %t68, ptr %a69 call void @finch_str_drop(ptr %a69) - br label %endif6237 -endif6237: + br label %endif6241 +endif6241: %t70 = load ptr, ptr %a1 %t71 = load ptr, ptr %a1 %t72 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63453,12 +63479,12 @@ endif6237: %t105 = insertvalue %S.gen.Val %t99, %S.ast.Type %t104, 1 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t105 -endif6234: +endif6238: %t106 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t107 = load %S.ast.Type, ptr %t106 %t108 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t107) - br i1 %t108, label %then6238, label %endif6240 -then6238: + br i1 %t108, label %then6242, label %endif6244 +then6242: %t109 = load ptr, ptr %a1 %t110 = load %S.ast.Node, ptr %a2 %t111 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63473,25 +63499,25 @@ then6238: call void @finch.gen.fail(ptr %t109, %S.ast.Node %t110, { ptr, i64, i64 } %t118) store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_drop(ptr %a119) - br label %endif6240 -endif6240: + br label %endif6244 +endif6244: %t120 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t121 = load %S.ast.Type, ptr %t120 %t122 = call i1 @finch.gen.isSigned(%S.ast.Type %t121) - br i1 %t122, label %then6241, label %endif6243 -then6241: + br i1 %t122, label %then6245, label %endif6247 +then6245: %t123 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 3 %t124 = load i1, ptr %t123 - br i1 %t124, label %then6244, label %endif6246 -then6244: + br i1 %t124, label %then6248, label %endif6250 +then6248: %t125 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a127 store { ptr, i64, i64 } { ptr @.str.3995, i64 1, i64 0 }, ptr %a129 %t130 = call i32 @finch_str_starts(ptr %a127, ptr %a129) %t131 = icmp ne i32 %t130, 0 - br i1 %t131, label %then6247, label %endif6249 -then6247: + br i1 %t131, label %then6251, label %endif6253 +then6251: %t132 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 @@ -63510,7 +63536,7 @@ then6247: %t147 = insertvalue %S.gen.Val %t146, i1 true, 3 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t147 -endif6249: +endif6253: %t148 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 %t149 = load { ptr, i64, i64 }, ptr %t148 store { ptr, i64, i64 } { ptr @.str.3997, i64 1, i64 0 }, ptr %a151 @@ -63527,7 +63553,7 @@ endif6249: %t161 = insertvalue %S.gen.Val %t160, i1 true, 3 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t161 -endif6246: +endif6250: %t162 = load ptr, ptr %a1 %t163 = load ptr, ptr %a1 %t164 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63565,12 +63591,12 @@ endif6246: %t192 = insertvalue %S.gen.Val %t186, %S.ast.Type %t191, 1 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t192 -endif6243: +endif6247: %t193 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 %t194 = load %S.ast.Type, ptr %t193 %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) - br i1 %t195, label %then6250, label %endif6252 -then6250: + br i1 %t195, label %then6254, label %endif6256 +then6254: %t196 = load ptr, ptr %a1 %t197 = load ptr, ptr %a1 %t198 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63608,7 +63634,7 @@ then6250: %t226 = insertvalue %S.gen.Val %t220, %S.ast.Type %t225, 1 call void @finch.drop.S_gen_Val(ptr %a12) ret %S.gen.Val %t226 -endif6252: +endif6256: %t227 = load ptr, ptr %a1 %t228 = load %S.ast.Node, ptr %a2 %t229 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 @@ -63742,8 +63768,8 @@ entry: %t29 = load %S.ast.Type, ptr %t28 %t30 = call i1 @finch.ast.same(%S.ast.Type %t27, %S.ast.Type %t29) %t31 = xor i1 %t30, true - br i1 %t31, label %then6253, label %endif6255 -then6253: + br i1 %t31, label %then6257, label %endif6259 +then6257: %t32 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t32, ptr %a34 store { ptr, i64, i64 } { ptr @.str.4005, i64 5, i64 0 }, ptr %a35 @@ -63764,17 +63790,17 @@ then6253: store { ptr, i64, i64 } %t45, ptr %a25 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %endif6255 -endif6255: + br label %endif6259 +endif6259: %t48 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t48, ptr %a49 store { ptr, i64, i64 } { ptr @.str.4006, i64 1, i64 0 }, ptr %a50 %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) %t52 = icmp ne i32 %t51, 0 - br label %logic.from6256 -logic.from6256: - br i1 %t52, label %logic.rhs6257, label %logic.end6258 -logic.rhs6257: + br label %logic.from6260 +logic.from6260: + br i1 %t52, label %logic.rhs6261, label %logic.end6262 +logic.rhs6261: %t53 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t54 = getelementptr inbounds %S.ast.Type, ptr %t53, i32 0, i32 0 %t55 = load { ptr, i64, i64 }, ptr %t54 @@ -63782,10 +63808,10 @@ logic.rhs6257: store { ptr, i64, i64 } { ptr @.str.4007, i64 3, i64 0 }, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 - br label %logic.from6259 -logic.from6259: - br i1 %t59, label %logic.end6261, label %logic.rhs6260 -logic.rhs6260: + br label %logic.from6263 +logic.from6263: + br i1 %t59, label %logic.end6265, label %logic.rhs6264 +logic.rhs6264: %t60 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 %t62 = load { ptr, i64, i64 }, ptr %t61 @@ -63793,18 +63819,18 @@ logic.rhs6260: store { ptr, i64, i64 } { ptr @.str.4008, i64 3, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 - br label %logic.rend6262 -logic.rend6262: - br label %logic.end6261 -logic.end6261: - %t67 = phi i1 [ true, %logic.from6259 ], [ %t66, %logic.rend6262 ] - br label %logic.rend6263 -logic.rend6263: - br label %logic.end6258 -logic.end6258: - %t68 = phi i1 [ false, %logic.from6256 ], [ %t67, %logic.rend6263 ] - br i1 %t68, label %then6264, label %endif6266 -then6264: + br label %logic.rend6266 +logic.rend6266: + br label %logic.end6265 +logic.end6265: + %t67 = phi i1 [ true, %logic.from6263 ], [ %t66, %logic.rend6266 ] + br label %logic.rend6267 +logic.rend6267: + br label %logic.end6262 +logic.end6262: + %t68 = phi i1 [ false, %logic.from6260 ], [ %t67, %logic.rend6267 ] + br i1 %t68, label %then6268, label %endif6270 +then6268: %t69 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t69, ptr %a71 store { ptr, i64, i64 } { ptr @.str.4009, i64 48, i64 0 }, ptr %a72 @@ -63814,31 +63840,31 @@ then6264: store { ptr, i64, i64 } %t73, ptr %a25 store { ptr, i64, i64 } %t74, ptr %a75 call void @finch_str_drop(ptr %a75) - br label %endif6266 -endif6266: + br label %endif6270 +endif6270: %t76 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t76, ptr %a77 store { ptr, i64, i64 } { ptr @.str.4010, i64 1, i64 0 }, ptr %a78 %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) %t80 = icmp ne i32 %t79, 0 - br label %logic.from6267 -logic.from6267: - br i1 %t80, label %logic.end6269, label %logic.rhs6268 -logic.rhs6268: + br label %logic.from6271 +logic.from6271: + br i1 %t80, label %logic.end6273, label %logic.rhs6272 +logic.rhs6272: %t81 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t81, ptr %a82 store { ptr, i64, i64 } { ptr @.str.4011, i64 1, i64 0 }, ptr %a83 %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) %t85 = icmp ne i32 %t84, 0 - br label %logic.rend6270 -logic.rend6270: - br label %logic.end6269 -logic.end6269: - %t86 = phi i1 [ true, %logic.from6267 ], [ %t85, %logic.rend6270 ] - br label %logic.from6271 -logic.from6271: - br i1 %t86, label %logic.rhs6272, label %logic.end6273 -logic.rhs6272: + br label %logic.rend6274 +logic.rend6274: + br label %logic.end6273 +logic.end6273: + %t86 = phi i1 [ true, %logic.from6271 ], [ %t85, %logic.rend6274 ] + br label %logic.from6275 +logic.from6275: + br i1 %t86, label %logic.rhs6276, label %logic.end6277 +logic.rhs6276: %t87 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i32 0, i32 0 %t89 = load { ptr, i64, i64 }, ptr %t88 @@ -63846,20 +63872,20 @@ logic.rhs6272: store { ptr, i64, i64 } { ptr @.str.4012, i64 4, i64 0 }, ptr %a91 %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) %t93 = icmp ne i32 %t92, 0 - br label %logic.rend6274 -logic.rend6274: - br label %logic.end6273 -logic.end6273: - %t94 = phi i1 [ false, %logic.from6271 ], [ %t93, %logic.rend6274 ] - br i1 %t94, label %then6275, label %else6276 -then6275: + br label %logic.rend6278 +logic.rend6278: + br label %logic.end6277 +logic.end6277: + %t94 = phi i1 [ false, %logic.from6275 ], [ %t93, %logic.rend6278 ] + br i1 %t94, label %then6279, label %else6280 +then6279: %t95 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t95, ptr %a96 store { ptr, i64, i64 } { ptr @.str.4013, i64 1, i64 0 }, ptr %a97 %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) %t99 = icmp ne i32 %t98, 0 - br i1 %t99, label %then6278, label %else6279 -then6278: + br i1 %t99, label %then6282, label %else6283 +then6282: %t100 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t100, ptr %a102 store { ptr, i64, i64 } { ptr @.str.4014, i64 26, i64 0 }, ptr %a103 @@ -63869,8 +63895,8 @@ then6278: store { ptr, i64, i64 } %t104, ptr %a25 store { ptr, i64, i64 } %t105, ptr %a106 call void @finch_str_drop(ptr %a106) - br label %endif6280 -else6279: + br label %endif6284 +else6283: %t107 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t107, ptr %a109 store { ptr, i64, i64 } { ptr @.str.4015, i64 26, i64 0 }, ptr %a110 @@ -63880,73 +63906,73 @@ else6279: store { ptr, i64, i64 } %t111, ptr %a25 store { ptr, i64, i64 } %t112, ptr %a113 call void @finch_str_drop(ptr %a113) - br label %endif6280 -endif6280: - br label %endif6277 -else6276: + br label %endif6284 +endif6284: + br label %endif6281 +else6280: %t114 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t114, ptr %a115 store { ptr, i64, i64 } { ptr @.str.4016, i64 1, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 - br label %logic.from6281 -logic.from6281: - br i1 %t118, label %logic.end6283, label %logic.rhs6282 -logic.rhs6282: + br label %logic.from6285 +logic.from6285: + br i1 %t118, label %logic.end6287, label %logic.rhs6286 +logic.rhs6286: %t119 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.4017, i64 1, i64 0 }, ptr %a121 %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) %t123 = icmp ne i32 %t122, 0 - br label %logic.rend6284 -logic.rend6284: - br label %logic.end6283 -logic.end6283: - %t124 = phi i1 [ true, %logic.from6281 ], [ %t123, %logic.rend6284 ] - br label %logic.from6285 -logic.from6285: - br i1 %t124, label %logic.end6287, label %logic.rhs6286 -logic.rhs6286: + br label %logic.rend6288 +logic.rend6288: + br label %logic.end6287 +logic.end6287: + %t124 = phi i1 [ true, %logic.from6285 ], [ %t123, %logic.rend6288 ] + br label %logic.from6289 +logic.from6289: + br i1 %t124, label %logic.end6291, label %logic.rhs6290 +logic.rhs6290: %t125 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t125, ptr %a126 store { ptr, i64, i64 } { ptr @.str.4018, i64 1, i64 0 }, ptr %a127 %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) %t129 = icmp ne i32 %t128, 0 - br label %logic.rend6288 -logic.rend6288: - br label %logic.end6287 -logic.end6287: - %t130 = phi i1 [ true, %logic.from6285 ], [ %t129, %logic.rend6288 ] - br label %logic.from6289 -logic.from6289: - br i1 %t130, label %logic.end6291, label %logic.rhs6290 -logic.rhs6290: + br label %logic.rend6292 +logic.rend6292: + br label %logic.end6291 +logic.end6291: + %t130 = phi i1 [ true, %logic.from6289 ], [ %t129, %logic.rend6292 ] + br label %logic.from6293 +logic.from6293: + br i1 %t130, label %logic.end6295, label %logic.rhs6294 +logic.rhs6294: %t131 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t131, ptr %a132 store { ptr, i64, i64 } { ptr @.str.4019, i64 2, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 - br label %logic.rend6292 -logic.rend6292: - br label %logic.end6291 -logic.end6291: - %t136 = phi i1 [ true, %logic.from6289 ], [ %t135, %logic.rend6292 ] - br label %logic.from6293 -logic.from6293: - br i1 %t136, label %logic.end6295, label %logic.rhs6294 -logic.rhs6294: + br label %logic.rend6296 +logic.rend6296: + br label %logic.end6295 +logic.end6295: + %t136 = phi i1 [ true, %logic.from6293 ], [ %t135, %logic.rend6296 ] + br label %logic.from6297 +logic.from6297: + br i1 %t136, label %logic.end6299, label %logic.rhs6298 +logic.rhs6298: %t137 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t137, ptr %a138 store { ptr, i64, i64 } { ptr @.str.4020, i64 2, i64 0 }, ptr %a139 %t140 = call i32 @finch_str_eq(ptr %a138, ptr %a139) %t141 = icmp ne i32 %t140, 0 - br label %logic.rend6296 -logic.rend6296: - br label %logic.end6295 -logic.end6295: - %t142 = phi i1 [ true, %logic.from6293 ], [ %t141, %logic.rend6296 ] - br i1 %t142, label %then6297, label %endif6299 -then6297: + br label %logic.rend6300 +logic.rend6300: + br label %logic.end6299 +logic.end6299: + %t142 = phi i1 [ true, %logic.from6297 ], [ %t141, %logic.rend6300 ] + br i1 %t142, label %then6301, label %endif6303 +then6301: %t143 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t143, ptr %a145 store { ptr, i64, i64 } { ptr @.str.4021, i64 43, i64 0 }, ptr %a146 @@ -63956,10 +63982,10 @@ then6297: store { ptr, i64, i64 } %t147, ptr %a25 store { ptr, i64, i64 } %t148, ptr %a149 call void @finch_str_drop(ptr %a149) - br label %endif6299 -endif6299: - br label %endif6277 -endif6277: + br label %endif6303 +endif6303: + br label %endif6281 +endif6281: %t150 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t151 = getelementptr inbounds %S.ast.Type, ptr %t150, i32 0, i32 0 %t152 = load { ptr, i64, i64 }, ptr %t151 @@ -63967,10 +63993,10 @@ endif6277: store { ptr, i64, i64 } { ptr @.str.4022, i64 6, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) %t156 = icmp ne i32 %t155, 0 - br label %logic.from6300 -logic.from6300: - br i1 %t156, label %logic.end6302, label %logic.rhs6301 -logic.rhs6301: + br label %logic.from6304 +logic.from6304: + br i1 %t156, label %logic.end6306, label %logic.rhs6305 +logic.rhs6305: %t157 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 %t158 = getelementptr inbounds %S.ast.Type, ptr %t157, i32 0, i32 0 %t159 = load { ptr, i64, i64 }, ptr %t158 @@ -63978,41 +64004,41 @@ logic.rhs6301: store { ptr, i64, i64 } { ptr @.str.4023, i64 5, i64 0 }, ptr %a161 %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) %t163 = icmp ne i32 %t162, 0 - br label %logic.rend6303 -logic.rend6303: - br label %logic.end6302 -logic.end6302: - %t164 = phi i1 [ true, %logic.from6300 ], [ %t163, %logic.rend6303 ] - br label %logic.from6304 -logic.from6304: - br i1 %t164, label %logic.rhs6305, label %logic.end6306 -logic.rhs6305: + br label %logic.rend6307 +logic.rend6307: + br label %logic.end6306 +logic.end6306: + %t164 = phi i1 [ true, %logic.from6304 ], [ %t163, %logic.rend6307 ] + br label %logic.from6308 +logic.from6308: + br i1 %t164, label %logic.rhs6309, label %logic.end6310 +logic.rhs6309: %t165 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t165, ptr %a166 store { ptr, i64, i64 } { ptr @.str.4024, i64 2, i64 0 }, ptr %a167 %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) %t169 = icmp ne i32 %t168, 0 - br label %logic.from6307 -logic.from6307: - br i1 %t169, label %logic.end6309, label %logic.rhs6308 -logic.rhs6308: + br label %logic.from6311 +logic.from6311: + br i1 %t169, label %logic.end6313, label %logic.rhs6312 +logic.rhs6312: %t170 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t170, ptr %a171 store { ptr, i64, i64 } { ptr @.str.4025, i64 2, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 - br label %logic.rend6310 -logic.rend6310: - br label %logic.end6309 -logic.end6309: - %t175 = phi i1 [ true, %logic.from6307 ], [ %t174, %logic.rend6310 ] - br label %logic.rend6311 -logic.rend6311: - br label %logic.end6306 -logic.end6306: - %t176 = phi i1 [ false, %logic.from6304 ], [ %t175, %logic.rend6311 ] - br i1 %t176, label %then6312, label %endif6314 -then6312: + br label %logic.rend6314 +logic.rend6314: + br label %logic.end6313 +logic.end6313: + %t175 = phi i1 [ true, %logic.from6311 ], [ %t174, %logic.rend6314 ] + br label %logic.rend6315 +logic.rend6315: + br label %logic.end6310 +logic.end6310: + %t176 = phi i1 [ false, %logic.from6308 ], [ %t175, %logic.rend6315 ] + br i1 %t176, label %then6316, label %endif6318 +then6316: %t177 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t177, ptr %a179 store { ptr, i64, i64 } { ptr @.str.4026, i64 31, i64 0 }, ptr %a180 @@ -64022,8 +64048,8 @@ then6312: store { ptr, i64, i64 } %t181, ptr %a25 store { ptr, i64, i64 } %t182, ptr %a183 call void @finch_str_drop(ptr %a183) - br label %endif6314 -endif6314: + br label %endif6318 +endif6318: %t184 = load ptr, ptr %a1 %t185 = load %S.ast.Node, ptr %a5 %t186 = load { ptr, i64, i64 }, ptr %a25 @@ -64070,132 +64096,132 @@ entry: store ptr %p2, ptr %a3 %t4 = load ptr, ptr %a2 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic6315, label %ok6316 -panic6315: + br i1 %t5, label %panic6319, label %ok6320 +panic6319: call void @finch_panic(ptr @.str.4027, i64 3462, ptr @.str.4028) unreachable -ok6316: +ok6320: %t6 = getelementptr inbounds %S.gen.Val, ptr %t4, i32 0, i32 1 %t7 = load %S.ast.Type, ptr %t6 %t8 = load ptr, ptr %a3 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic6317, label %ok6318 -panic6317: + br i1 %t9, label %panic6321, label %ok6322 +panic6321: call void @finch_panic(ptr @.str.4029, i64 3462, ptr @.str.4030) unreachable -ok6318: +ok6322: %t10 = getelementptr inbounds %S.gen.Val, ptr %t8, i32 0, i32 1 %t11 = load %S.ast.Type, ptr %t10 %t12 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t11) - br i1 %t12, label %then6319, label %endif6321 -then6319: + br i1 %t12, label %then6323, label %endif6325 +then6323: ret i1 true -endif6321: +endif6325: %t13 = load ptr, ptr %a2 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic6322, label %ok6323 -panic6322: + br i1 %t14, label %panic6326, label %ok6327 +panic6326: call void @finch_panic(ptr @.str.4031, i64 3465, ptr @.str.4032) unreachable -ok6323: +ok6327: %t15 = getelementptr inbounds %S.gen.Val, ptr %t13, i32 0, i32 1 %t16 = load %S.ast.Type, ptr %t15 %t17 = call i1 @finch.gen.isInt(%S.ast.Type %t16) - br label %logic.from6324 -logic.from6324: - br i1 %t17, label %logic.rhs6325, label %logic.end6326 -logic.rhs6325: + br label %logic.from6328 +logic.from6328: + br i1 %t17, label %logic.rhs6329, label %logic.end6330 +logic.rhs6329: %t18 = load ptr, ptr %a3 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic6327, label %ok6328 -panic6327: + br i1 %t19, label %panic6331, label %ok6332 +panic6331: call void @finch_panic(ptr @.str.4033, i64 3465, ptr @.str.4034) unreachable -ok6328: +ok6332: %t20 = getelementptr inbounds %S.gen.Val, ptr %t18, i32 0, i32 1 %t21 = load %S.ast.Type, ptr %t20 %t22 = call i1 @finch.gen.isInt(%S.ast.Type %t21) - br label %logic.rend6329 -logic.rend6329: - br label %logic.end6326 -logic.end6326: - %t23 = phi i1 [ false, %logic.from6324 ], [ %t22, %logic.rend6329 ] - br i1 %t23, label %then6330, label %endif6332 -then6330: + br label %logic.rend6333 +logic.rend6333: + br label %logic.end6330 +logic.end6330: + %t23 = phi i1 [ false, %logic.from6328 ], [ %t22, %logic.rend6333 ] + br i1 %t23, label %then6334, label %endif6336 +then6334: %t24 = load ptr, ptr %a2 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic6333, label %ok6334 -panic6333: + br i1 %t25, label %panic6337, label %ok6338 +panic6337: call void @finch_panic(ptr @.str.4035, i64 3468, ptr @.str.4036) unreachable -ok6334: +ok6338: %t26 = getelementptr inbounds %S.gen.Val, ptr %t24, i32 0, i32 3 %t27 = load i1, ptr %t26 - br label %logic.from6335 -logic.from6335: - br i1 %t27, label %logic.rhs6336, label %logic.end6337 -logic.rhs6336: + br label %logic.from6339 +logic.from6339: + br i1 %t27, label %logic.rhs6340, label %logic.end6341 +logic.rhs6340: %t28 = load ptr, ptr %a3 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic6338, label %ok6339 -panic6338: + br i1 %t29, label %panic6342, label %ok6343 +panic6342: call void @finch_panic(ptr @.str.4037, i64 3468, ptr @.str.4038) unreachable -ok6339: +ok6343: %t30 = getelementptr inbounds %S.gen.Val, ptr %t28, i32 0, i32 3 %t31 = load i1, ptr %t30 %t32 = xor i1 %t31, true - br label %logic.rend6340 -logic.rend6340: - br label %logic.end6337 -logic.end6337: - %t33 = phi i1 [ false, %logic.from6335 ], [ %t32, %logic.rend6340 ] - br label %logic.from6341 -logic.from6341: - br i1 %t33, label %logic.rhs6342, label %logic.end6343 -logic.rhs6342: + br label %logic.rend6344 +logic.rend6344: + br label %logic.end6341 +logic.end6341: + %t33 = phi i1 [ false, %logic.from6339 ], [ %t32, %logic.rend6344 ] + br label %logic.from6345 +logic.from6345: + br i1 %t33, label %logic.rhs6346, label %logic.end6347 +logic.rhs6346: %t34 = load ptr, ptr %a2 %t35 = icmp eq ptr %t34, null - br i1 %t35, label %panic6344, label %ok6345 -panic6344: + br i1 %t35, label %panic6348, label %ok6349 +panic6348: call void @finch_panic(ptr @.str.4039, i64 3468, ptr @.str.4040) unreachable -ok6345: +ok6349: %t36 = getelementptr inbounds %S.gen.Val, ptr %t34, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = load ptr, ptr %a2 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic6346, label %ok6347 -panic6346: + br i1 %t39, label %panic6350, label %ok6351 +panic6350: call void @finch_panic(ptr @.str.4041, i64 3468, ptr @.str.4042) unreachable -ok6347: +ok6351: %t40 = getelementptr inbounds %S.gen.Val, ptr %t38, i32 0, i32 1 %t41 = load %S.ast.Type, ptr %t40 %t42 = load ptr, ptr %a3 %t43 = icmp eq ptr %t42, null - br i1 %t43, label %panic6348, label %ok6349 -panic6348: + br i1 %t43, label %panic6352, label %ok6353 +panic6352: call void @finch_panic(ptr @.str.4043, i64 3468, ptr @.str.4044) unreachable -ok6349: +ok6353: %t44 = getelementptr inbounds %S.gen.Val, ptr %t42, i32 0, i32 1 %t45 = load %S.ast.Type, ptr %t44 %t46 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t37, %S.ast.Type %t41, %S.ast.Type %t45) - br label %logic.rend6350 -logic.rend6350: - br label %logic.end6343 -logic.end6343: - %t47 = phi i1 [ false, %logic.from6341 ], [ %t46, %logic.rend6350 ] - br i1 %t47, label %then6351, label %endif6353 -then6351: + br label %logic.rend6354 +logic.rend6354: + br label %logic.end6347 +logic.end6347: + %t47 = phi i1 [ false, %logic.from6345 ], [ %t46, %logic.rend6354 ] + br i1 %t47, label %then6355, label %endif6357 +then6355: %t48 = load ptr, ptr %a2 %t49 = icmp eq ptr %t48, null - br i1 %t49, label %panic6354, label %ok6355 -panic6354: + br i1 %t49, label %panic6358, label %ok6359 +panic6358: call void @finch_panic(ptr @.str.4045, i64 3469, ptr @.str.4046) unreachable -ok6355: +ok6359: %t50 = getelementptr inbounds %S.gen.Val, ptr %t48, i32 0, i32 0 %t51 = load { ptr, i64, i64 }, ptr %t50 store { ptr, i64, i64 } %t51, ptr %a52 @@ -64204,11 +64230,11 @@ ok6355: %t55 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t54, 0 %t56 = load ptr, ptr %a3 %t57 = icmp eq ptr %t56, null - br i1 %t57, label %panic6356, label %ok6357 -panic6356: + br i1 %t57, label %panic6360, label %ok6361 +panic6360: call void @finch_panic(ptr @.str.4047, i64 3469, ptr @.str.4048) unreachable -ok6357: +ok6361: %t58 = getelementptr inbounds %S.gen.Val, ptr %t56, i32 0, i32 1 %t59 = load %S.ast.Type, ptr %t58 store %S.ast.Type %t59, ptr %a60 @@ -64218,91 +64244,91 @@ ok6357: %t64 = insertvalue %S.gen.Val %t63, i1 true, 3 %t65 = load ptr, ptr %a2 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic6358, label %ok6359 -panic6358: + br i1 %t66, label %panic6362, label %ok6363 +panic6362: call void @finch_panic(ptr @.str.4049, i64 3469, ptr @.str.4050) unreachable -ok6359: +ok6363: %t67 = load %S.gen.Val, ptr %t65 store %S.gen.Val %t64, ptr %t65 store %S.gen.Val %t67, ptr %a68 call void @finch.drop.S_gen_Val(ptr %a68) ret i1 true -endif6353: +endif6357: %t69 = load ptr, ptr %a3 %t70 = icmp eq ptr %t69, null - br i1 %t70, label %panic6360, label %ok6361 -panic6360: + br i1 %t70, label %panic6364, label %ok6365 +panic6364: call void @finch_panic(ptr @.str.4051, i64 3472, ptr @.str.4052) unreachable -ok6361: +ok6365: %t71 = getelementptr inbounds %S.gen.Val, ptr %t69, i32 0, i32 3 %t72 = load i1, ptr %t71 - br label %logic.from6362 -logic.from6362: - br i1 %t72, label %logic.rhs6363, label %logic.end6364 -logic.rhs6363: + br label %logic.from6366 +logic.from6366: + br i1 %t72, label %logic.rhs6367, label %logic.end6368 +logic.rhs6367: %t73 = load ptr, ptr %a2 %t74 = icmp eq ptr %t73, null - br i1 %t74, label %panic6365, label %ok6366 -panic6365: + br i1 %t74, label %panic6369, label %ok6370 +panic6369: call void @finch_panic(ptr @.str.4053, i64 3472, ptr @.str.4054) unreachable -ok6366: +ok6370: %t75 = getelementptr inbounds %S.gen.Val, ptr %t73, i32 0, i32 3 %t76 = load i1, ptr %t75 %t77 = xor i1 %t76, true - br label %logic.rend6367 -logic.rend6367: - br label %logic.end6364 -logic.end6364: - %t78 = phi i1 [ false, %logic.from6362 ], [ %t77, %logic.rend6367 ] - br label %logic.from6368 -logic.from6368: - br i1 %t78, label %logic.rhs6369, label %logic.end6370 -logic.rhs6369: + br label %logic.rend6371 +logic.rend6371: + br label %logic.end6368 +logic.end6368: + %t78 = phi i1 [ false, %logic.from6366 ], [ %t77, %logic.rend6371 ] + br label %logic.from6372 +logic.from6372: + br i1 %t78, label %logic.rhs6373, label %logic.end6374 +logic.rhs6373: %t79 = load ptr, ptr %a3 %t80 = icmp eq ptr %t79, null - br i1 %t80, label %panic6371, label %ok6372 -panic6371: + br i1 %t80, label %panic6375, label %ok6376 +panic6375: call void @finch_panic(ptr @.str.4055, i64 3472, ptr @.str.4056) unreachable -ok6372: +ok6376: %t81 = getelementptr inbounds %S.gen.Val, ptr %t79, i32 0, i32 0 %t82 = load { ptr, i64, i64 }, ptr %t81 %t83 = load ptr, ptr %a3 %t84 = icmp eq ptr %t83, null - br i1 %t84, label %panic6373, label %ok6374 -panic6373: + br i1 %t84, label %panic6377, label %ok6378 +panic6377: call void @finch_panic(ptr @.str.4057, i64 3472, ptr @.str.4058) unreachable -ok6374: +ok6378: %t85 = getelementptr inbounds %S.gen.Val, ptr %t83, i32 0, i32 1 %t86 = load %S.ast.Type, ptr %t85 %t87 = load ptr, ptr %a2 %t88 = icmp eq ptr %t87, null - br i1 %t88, label %panic6375, label %ok6376 -panic6375: + br i1 %t88, label %panic6379, label %ok6380 +panic6379: call void @finch_panic(ptr @.str.4059, i64 3472, ptr @.str.4060) unreachable -ok6376: +ok6380: %t89 = getelementptr inbounds %S.gen.Val, ptr %t87, i32 0, i32 1 %t90 = load %S.ast.Type, ptr %t89 %t91 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t82, %S.ast.Type %t86, %S.ast.Type %t90) - br label %logic.rend6377 -logic.rend6377: - br label %logic.end6370 -logic.end6370: - %t92 = phi i1 [ false, %logic.from6368 ], [ %t91, %logic.rend6377 ] - br i1 %t92, label %then6378, label %endif6380 -then6378: + br label %logic.rend6381 +logic.rend6381: + br label %logic.end6374 +logic.end6374: + %t92 = phi i1 [ false, %logic.from6372 ], [ %t91, %logic.rend6381 ] + br i1 %t92, label %then6382, label %endif6384 +then6382: %t93 = load ptr, ptr %a3 %t94 = icmp eq ptr %t93, null - br i1 %t94, label %panic6381, label %ok6382 -panic6381: + br i1 %t94, label %panic6385, label %ok6386 +panic6385: call void @finch_panic(ptr @.str.4061, i64 3473, ptr @.str.4062) unreachable -ok6382: +ok6386: %t95 = getelementptr inbounds %S.gen.Val, ptr %t93, i32 0, i32 0 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t96, ptr %a97 @@ -64311,11 +64337,11 @@ ok6382: %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 %t101 = load ptr, ptr %a2 %t102 = icmp eq ptr %t101, null - br i1 %t102, label %panic6383, label %ok6384 -panic6383: + br i1 %t102, label %panic6387, label %ok6388 +panic6387: call void @finch_panic(ptr @.str.4063, i64 3473, ptr @.str.4064) unreachable -ok6384: +ok6388: %t103 = getelementptr inbounds %S.gen.Val, ptr %t101, i32 0, i32 1 %t104 = load %S.ast.Type, ptr %t103 store %S.ast.Type %t104, ptr %a105 @@ -64325,75 +64351,75 @@ ok6384: %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 %t110 = load ptr, ptr %a3 %t111 = icmp eq ptr %t110, null - br i1 %t111, label %panic6385, label %ok6386 -panic6385: + br i1 %t111, label %panic6389, label %ok6390 +panic6389: call void @finch_panic(ptr @.str.4065, i64 3473, ptr @.str.4066) unreachable -ok6386: +ok6390: %t112 = load %S.gen.Val, ptr %t110 store %S.gen.Val %t109, ptr %t110 store %S.gen.Val %t112, ptr %a113 call void @finch.drop.S_gen_Val(ptr %a113) ret i1 true -endif6380: +endif6384: %t114 = load ptr, ptr %a2 %t115 = icmp eq ptr %t114, null - br i1 %t115, label %panic6387, label %ok6388 -panic6387: + br i1 %t115, label %panic6391, label %ok6392 +panic6391: call void @finch_panic(ptr @.str.4067, i64 3476, ptr @.str.4068) unreachable -ok6388: +ok6392: %t116 = getelementptr inbounds %S.gen.Val, ptr %t114, i32 0, i32 1 %t117 = load %S.ast.Type, ptr %t116 %t118 = load ptr, ptr %a3 %t119 = icmp eq ptr %t118, null - br i1 %t119, label %panic6389, label %ok6390 -panic6389: + br i1 %t119, label %panic6393, label %ok6394 +panic6393: call void @finch_panic(ptr @.str.4069, i64 3476, ptr @.str.4070) unreachable -ok6390: +ok6394: %t120 = getelementptr inbounds %S.gen.Val, ptr %t118, i32 0, i32 1 %t121 = load %S.ast.Type, ptr %t120 %t122 = call i1 @finch.gen.widens(%S.ast.Type %t117, %S.ast.Type %t121) - br i1 %t122, label %then6391, label %endif6393 -then6391: + br i1 %t122, label %then6395, label %endif6397 +then6395: %t123 = load ptr, ptr %a1 %t124 = load ptr, ptr %a2 %t125 = icmp eq ptr %t124, null - br i1 %t125, label %panic6394, label %ok6395 -panic6394: + br i1 %t125, label %panic6398, label %ok6399 +panic6398: call void @finch_panic(ptr @.str.4071, i64 3477, ptr @.str.4072) unreachable -ok6395: +ok6399: %t126 = getelementptr inbounds %S.gen.Val, ptr %t124, i32 0, i32 0 %t127 = load { ptr, i64, i64 }, ptr %t126 %t128 = load ptr, ptr %a2 %t129 = icmp eq ptr %t128, null - br i1 %t129, label %panic6396, label %ok6397 -panic6396: + br i1 %t129, label %panic6400, label %ok6401 +panic6400: call void @finch_panic(ptr @.str.4073, i64 3477, ptr @.str.4074) unreachable -ok6397: +ok6401: %t130 = getelementptr inbounds %S.gen.Val, ptr %t128, i32 0, i32 1 %t131 = load %S.ast.Type, ptr %t130 %t132 = load ptr, ptr %a3 %t133 = icmp eq ptr %t132, null - br i1 %t133, label %panic6398, label %ok6399 -panic6398: + br i1 %t133, label %panic6402, label %ok6403 +panic6402: call void @finch_panic(ptr @.str.4075, i64 3477, ptr @.str.4076) unreachable -ok6399: +ok6403: %t134 = getelementptr inbounds %S.gen.Val, ptr %t132, i32 0, i32 1 %t135 = load %S.ast.Type, ptr %t134 %t136 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t123, { ptr, i64, i64 } %t127, %S.ast.Type %t131, %S.ast.Type %t135) %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t136, 0 %t138 = load ptr, ptr %a3 %t139 = icmp eq ptr %t138, null - br i1 %t139, label %panic6400, label %ok6401 -panic6400: + br i1 %t139, label %panic6404, label %ok6405 +panic6404: call void @finch_panic(ptr @.str.4077, i64 3477, ptr @.str.4078) unreachable -ok6401: +ok6405: %t140 = getelementptr inbounds %S.gen.Val, ptr %t138, i32 0, i32 1 %t141 = load %S.ast.Type, ptr %t140 store %S.ast.Type %t141, ptr %a142 @@ -64402,75 +64428,75 @@ ok6401: %t145 = insertvalue %S.gen.Val %t137, %S.ast.Type %t144, 1 %t146 = load ptr, ptr %a2 %t147 = icmp eq ptr %t146, null - br i1 %t147, label %panic6402, label %ok6403 -panic6402: + br i1 %t147, label %panic6406, label %ok6407 +panic6406: call void @finch_panic(ptr @.str.4079, i64 3477, ptr @.str.4080) unreachable -ok6403: +ok6407: %t148 = load %S.gen.Val, ptr %t146 store %S.gen.Val %t145, ptr %t146 store %S.gen.Val %t148, ptr %a149 call void @finch.drop.S_gen_Val(ptr %a149) ret i1 true -endif6393: +endif6397: %t150 = load ptr, ptr %a3 %t151 = icmp eq ptr %t150, null - br i1 %t151, label %panic6404, label %ok6405 -panic6404: + br i1 %t151, label %panic6408, label %ok6409 +panic6408: call void @finch_panic(ptr @.str.4081, i64 3480, ptr @.str.4082) unreachable -ok6405: +ok6409: %t152 = getelementptr inbounds %S.gen.Val, ptr %t150, i32 0, i32 1 %t153 = load %S.ast.Type, ptr %t152 %t154 = load ptr, ptr %a2 %t155 = icmp eq ptr %t154, null - br i1 %t155, label %panic6406, label %ok6407 -panic6406: + br i1 %t155, label %panic6410, label %ok6411 +panic6410: call void @finch_panic(ptr @.str.4083, i64 3480, ptr @.str.4084) unreachable -ok6407: +ok6411: %t156 = getelementptr inbounds %S.gen.Val, ptr %t154, i32 0, i32 1 %t157 = load %S.ast.Type, ptr %t156 %t158 = call i1 @finch.gen.widens(%S.ast.Type %t153, %S.ast.Type %t157) - br i1 %t158, label %then6408, label %endif6410 -then6408: + br i1 %t158, label %then6412, label %endif6414 +then6412: %t159 = load ptr, ptr %a1 %t160 = load ptr, ptr %a3 %t161 = icmp eq ptr %t160, null - br i1 %t161, label %panic6411, label %ok6412 -panic6411: + br i1 %t161, label %panic6415, label %ok6416 +panic6415: call void @finch_panic(ptr @.str.4085, i64 3481, ptr @.str.4086) unreachable -ok6412: +ok6416: %t162 = getelementptr inbounds %S.gen.Val, ptr %t160, i32 0, i32 0 %t163 = load { ptr, i64, i64 }, ptr %t162 %t164 = load ptr, ptr %a3 %t165 = icmp eq ptr %t164, null - br i1 %t165, label %panic6413, label %ok6414 -panic6413: + br i1 %t165, label %panic6417, label %ok6418 +panic6417: call void @finch_panic(ptr @.str.4087, i64 3481, ptr @.str.4088) unreachable -ok6414: +ok6418: %t166 = getelementptr inbounds %S.gen.Val, ptr %t164, i32 0, i32 1 %t167 = load %S.ast.Type, ptr %t166 %t168 = load ptr, ptr %a2 %t169 = icmp eq ptr %t168, null - br i1 %t169, label %panic6415, label %ok6416 -panic6415: + br i1 %t169, label %panic6419, label %ok6420 +panic6419: call void @finch_panic(ptr @.str.4089, i64 3481, ptr @.str.4090) unreachable -ok6416: +ok6420: %t170 = getelementptr inbounds %S.gen.Val, ptr %t168, i32 0, i32 1 %t171 = load %S.ast.Type, ptr %t170 %t172 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t159, { ptr, i64, i64 } %t163, %S.ast.Type %t167, %S.ast.Type %t171) %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 %t174 = load ptr, ptr %a2 %t175 = icmp eq ptr %t174, null - br i1 %t175, label %panic6417, label %ok6418 -panic6417: + br i1 %t175, label %panic6421, label %ok6422 +panic6421: call void @finch_panic(ptr @.str.4091, i64 3481, ptr @.str.4092) unreachable -ok6418: +ok6422: %t176 = getelementptr inbounds %S.gen.Val, ptr %t174, i32 0, i32 1 %t177 = load %S.ast.Type, ptr %t176 store %S.ast.Type %t177, ptr %a178 @@ -64479,66 +64505,66 @@ ok6418: %t181 = insertvalue %S.gen.Val %t173, %S.ast.Type %t180, 1 %t182 = load ptr, ptr %a3 %t183 = icmp eq ptr %t182, null - br i1 %t183, label %panic6419, label %ok6420 -panic6419: + br i1 %t183, label %panic6423, label %ok6424 +panic6423: call void @finch_panic(ptr @.str.4093, i64 3481, ptr @.str.4094) unreachable -ok6420: +ok6424: %t184 = load %S.gen.Val, ptr %t182 store %S.gen.Val %t181, ptr %t182 store %S.gen.Val %t184, ptr %a185 call void @finch.drop.S_gen_Val(ptr %a185) ret i1 true -endif6410: +endif6414: ret i1 false -endif6332: +endif6336: %t186 = load ptr, ptr %a2 %t187 = icmp eq ptr %t186, null - br i1 %t187, label %panic6421, label %ok6422 -panic6421: + br i1 %t187, label %panic6425, label %ok6426 +panic6425: call void @finch_panic(ptr @.str.4095, i64 3486, ptr @.str.4096) unreachable -ok6422: +ok6426: %t188 = getelementptr inbounds %S.gen.Val, ptr %t186, i32 0, i32 1 %t189 = load %S.ast.Type, ptr %t188 %t190 = call i1 @finch.gen.isInt(%S.ast.Type %t189) - br label %logic.from6423 -logic.from6423: - br i1 %t190, label %logic.rhs6424, label %logic.end6425 -logic.rhs6424: + br label %logic.from6427 +logic.from6427: + br i1 %t190, label %logic.rhs6428, label %logic.end6429 +logic.rhs6428: %t191 = load ptr, ptr %a3 %t192 = icmp eq ptr %t191, null - br i1 %t192, label %panic6426, label %ok6427 -panic6426: + br i1 %t192, label %panic6430, label %ok6431 +panic6430: call void @finch_panic(ptr @.str.4097, i64 3486, ptr @.str.4098) unreachable -ok6427: +ok6431: %t193 = getelementptr inbounds %S.gen.Val, ptr %t191, i32 0, i32 1 %t194 = load %S.ast.Type, ptr %t193 %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) - br label %logic.rend6428 -logic.rend6428: - br label %logic.end6425 -logic.end6425: - %t196 = phi i1 [ false, %logic.from6423 ], [ %t195, %logic.rend6428 ] - br i1 %t196, label %then6429, label %endif6431 -then6429: + br label %logic.rend6432 +logic.rend6432: + br label %logic.end6429 +logic.end6429: + %t196 = phi i1 [ false, %logic.from6427 ], [ %t195, %logic.rend6432 ] + br i1 %t196, label %then6433, label %endif6435 +then6433: %t197 = load ptr, ptr %a1 %t198 = load ptr, ptr %a2 %t199 = icmp eq ptr %t198, null - br i1 %t199, label %panic6432, label %ok6433 -panic6432: + br i1 %t199, label %panic6436, label %ok6437 +panic6436: call void @finch_panic(ptr @.str.4099, i64 3487, ptr @.str.4100) unreachable -ok6433: +ok6437: %t200 = load %S.gen.Val, ptr %t198 %t201 = load ptr, ptr %a3 %t202 = icmp eq ptr %t201, null - br i1 %t202, label %panic6434, label %ok6435 -panic6434: + br i1 %t202, label %panic6438, label %ok6439 +panic6438: call void @finch_panic(ptr @.str.4101, i64 3487, ptr @.str.4102) unreachable -ok6435: +ok6439: %t203 = getelementptr inbounds %S.gen.Val, ptr %t201, i32 0, i32 1 %t204 = load %S.ast.Type, ptr %t203 %t205 = call %S.ast.Node @finch.gen.Node0() @@ -64547,64 +64573,64 @@ ok6435: call void @finch.drop.S_ast_Node(ptr %a207) %t208 = load ptr, ptr %a2 %t209 = icmp eq ptr %t208, null - br i1 %t209, label %panic6436, label %ok6437 -panic6436: + br i1 %t209, label %panic6440, label %ok6441 +panic6440: call void @finch_panic(ptr @.str.4104, i64 3487, ptr @.str.4105) unreachable -ok6437: +ok6441: %t210 = load %S.gen.Val, ptr %t208 store %S.gen.Val %t206, ptr %t208 store %S.gen.Val %t210, ptr %a211 call void @finch.drop.S_gen_Val(ptr %a211) ret i1 true -endif6431: +endif6435: %t212 = load ptr, ptr %a2 %t213 = icmp eq ptr %t212, null - br i1 %t213, label %panic6438, label %ok6439 -panic6438: + br i1 %t213, label %panic6442, label %ok6443 +panic6442: call void @finch_panic(ptr @.str.4106, i64 3490, ptr @.str.4107) unreachable -ok6439: +ok6443: %t214 = getelementptr inbounds %S.gen.Val, ptr %t212, i32 0, i32 1 %t215 = load %S.ast.Type, ptr %t214 %t216 = call i1 @finch.gen.isFloat(%S.ast.Type %t215) - br label %logic.from6440 -logic.from6440: - br i1 %t216, label %logic.rhs6441, label %logic.end6442 -logic.rhs6441: + br label %logic.from6444 +logic.from6444: + br i1 %t216, label %logic.rhs6445, label %logic.end6446 +logic.rhs6445: %t217 = load ptr, ptr %a3 %t218 = icmp eq ptr %t217, null - br i1 %t218, label %panic6443, label %ok6444 -panic6443: + br i1 %t218, label %panic6447, label %ok6448 +panic6447: call void @finch_panic(ptr @.str.4108, i64 3490, ptr @.str.4109) unreachable -ok6444: +ok6448: %t219 = getelementptr inbounds %S.gen.Val, ptr %t217, i32 0, i32 1 %t220 = load %S.ast.Type, ptr %t219 %t221 = call i1 @finch.gen.isInt(%S.ast.Type %t220) - br label %logic.rend6445 -logic.rend6445: - br label %logic.end6442 -logic.end6442: - %t222 = phi i1 [ false, %logic.from6440 ], [ %t221, %logic.rend6445 ] - br i1 %t222, label %then6446, label %endif6448 -then6446: + br label %logic.rend6449 +logic.rend6449: + br label %logic.end6446 +logic.end6446: + %t222 = phi i1 [ false, %logic.from6444 ], [ %t221, %logic.rend6449 ] + br i1 %t222, label %then6450, label %endif6452 +then6450: %t223 = load ptr, ptr %a1 %t224 = load ptr, ptr %a3 %t225 = icmp eq ptr %t224, null - br i1 %t225, label %panic6449, label %ok6450 -panic6449: + br i1 %t225, label %panic6453, label %ok6454 +panic6453: call void @finch_panic(ptr @.str.4110, i64 3491, ptr @.str.4111) unreachable -ok6450: +ok6454: %t226 = load %S.gen.Val, ptr %t224 %t227 = load ptr, ptr %a2 %t228 = icmp eq ptr %t227, null - br i1 %t228, label %panic6451, label %ok6452 -panic6451: + br i1 %t228, label %panic6455, label %ok6456 +panic6455: call void @finch_panic(ptr @.str.4112, i64 3491, ptr @.str.4113) unreachable -ok6452: +ok6456: %t229 = getelementptr inbounds %S.gen.Val, ptr %t227, i32 0, i32 1 %t230 = load %S.ast.Type, ptr %t229 %t231 = call %S.ast.Node @finch.gen.Node0() @@ -64613,55 +64639,55 @@ ok6452: call void @finch.drop.S_ast_Node(ptr %a233) %t234 = load ptr, ptr %a3 %t235 = icmp eq ptr %t234, null - br i1 %t235, label %panic6453, label %ok6454 -panic6453: + br i1 %t235, label %panic6457, label %ok6458 +panic6457: call void @finch_panic(ptr @.str.4115, i64 3491, ptr @.str.4116) unreachable -ok6454: +ok6458: %t236 = load %S.gen.Val, ptr %t234 store %S.gen.Val %t232, ptr %t234 store %S.gen.Val %t236, ptr %a237 call void @finch.drop.S_gen_Val(ptr %a237) ret i1 true -endif6448: +endif6452: %t238 = load ptr, ptr %a2 %t239 = icmp eq ptr %t238, null - br i1 %t239, label %panic6455, label %ok6456 -panic6455: + br i1 %t239, label %panic6459, label %ok6460 +panic6459: call void @finch_panic(ptr @.str.4117, i64 3494, ptr @.str.4118) unreachable -ok6456: +ok6460: %t240 = getelementptr inbounds %S.gen.Val, ptr %t238, i32 0, i32 1 %t241 = load %S.ast.Type, ptr %t240 %t242 = call i1 @finch.gen.isFloat(%S.ast.Type %t241) - br label %logic.from6457 -logic.from6457: - br i1 %t242, label %logic.rhs6458, label %logic.end6459 -logic.rhs6458: + br label %logic.from6461 +logic.from6461: + br i1 %t242, label %logic.rhs6462, label %logic.end6463 +logic.rhs6462: %t243 = load ptr, ptr %a3 %t244 = icmp eq ptr %t243, null - br i1 %t244, label %panic6460, label %ok6461 -panic6460: + br i1 %t244, label %panic6464, label %ok6465 +panic6464: call void @finch_panic(ptr @.str.4119, i64 3494, ptr @.str.4120) unreachable -ok6461: +ok6465: %t245 = getelementptr inbounds %S.gen.Val, ptr %t243, i32 0, i32 1 %t246 = load %S.ast.Type, ptr %t245 %t247 = call i1 @finch.gen.isFloat(%S.ast.Type %t246) - br label %logic.rend6462 -logic.rend6462: - br label %logic.end6459 -logic.end6459: - %t248 = phi i1 [ false, %logic.from6457 ], [ %t247, %logic.rend6462 ] - br i1 %t248, label %then6463, label %endif6465 -then6463: + br label %logic.rend6466 +logic.rend6466: + br label %logic.end6463 +logic.end6463: + %t248 = phi i1 [ false, %logic.from6461 ], [ %t247, %logic.rend6466 ] + br i1 %t248, label %then6467, label %endif6469 +then6467: %t249 = load ptr, ptr %a2 %t250 = icmp eq ptr %t249, null - br i1 %t250, label %panic6466, label %ok6467 -panic6466: + br i1 %t250, label %panic6470, label %ok6471 +panic6470: call void @finch_panic(ptr @.str.4121, i64 3495, ptr @.str.4122) unreachable -ok6467: +ok6471: %t251 = getelementptr inbounds %S.gen.Val, ptr %t249, i32 0, i32 1 %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i32 0, i32 0 %t253 = load { ptr, i64, i64 }, ptr %t252 @@ -64669,25 +64695,25 @@ ok6467: store { ptr, i64, i64 } { ptr @.str.4123, i64 3, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp ne i32 %t256, 0 - br i1 %t257, label %then6468, label %endif6470 -then6468: + br i1 %t257, label %then6472, label %endif6474 +then6472: %t258 = load ptr, ptr %a1 %t259 = load ptr, ptr %a2 %t260 = icmp eq ptr %t259, null - br i1 %t260, label %panic6471, label %ok6472 -panic6471: + br i1 %t260, label %panic6475, label %ok6476 +panic6475: call void @finch_panic(ptr @.str.4124, i64 3496, ptr @.str.4125) unreachable -ok6472: +ok6476: %t261 = getelementptr inbounds %S.gen.Val, ptr %t259, i32 0, i32 0 %t262 = load { ptr, i64, i64 }, ptr %t261 %t263 = load ptr, ptr %a2 %t264 = icmp eq ptr %t263, null - br i1 %t264, label %panic6473, label %ok6474 -panic6473: + br i1 %t264, label %panic6477, label %ok6478 +panic6477: call void @finch_panic(ptr @.str.4126, i64 3496, ptr @.str.4127) unreachable -ok6474: +ok6478: %t265 = getelementptr inbounds %S.gen.Val, ptr %t263, i32 0, i32 1 %t266 = load %S.ast.Type, ptr %t265 %t267 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4128, i64 5, i64 0 }) @@ -64699,24 +64725,24 @@ ok6474: %t272 = insertvalue %S.gen.Val %t270, %S.ast.Type %t271, 1 %t273 = load ptr, ptr %a2 %t274 = icmp eq ptr %t273, null - br i1 %t274, label %panic6475, label %ok6476 -panic6475: + br i1 %t274, label %panic6479, label %ok6480 +panic6479: call void @finch_panic(ptr @.str.4130, i64 3496, ptr @.str.4131) unreachable -ok6476: +ok6480: %t275 = load %S.gen.Val, ptr %t273 store %S.gen.Val %t272, ptr %t273 store %S.gen.Val %t275, ptr %a276 call void @finch.drop.S_gen_Val(ptr %a276) - br label %endif6470 -endif6470: + br label %endif6474 +endif6474: %t277 = load ptr, ptr %a3 %t278 = icmp eq ptr %t277, null - br i1 %t278, label %panic6477, label %ok6478 -panic6477: + br i1 %t278, label %panic6481, label %ok6482 +panic6481: call void @finch_panic(ptr @.str.4132, i64 3498, ptr @.str.4133) unreachable -ok6478: +ok6482: %t279 = getelementptr inbounds %S.gen.Val, ptr %t277, i32 0, i32 1 %t280 = getelementptr inbounds %S.ast.Type, ptr %t279, i32 0, i32 0 %t281 = load { ptr, i64, i64 }, ptr %t280 @@ -64724,25 +64750,25 @@ ok6478: store { ptr, i64, i64 } { ptr @.str.4134, i64 3, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 - br i1 %t285, label %then6479, label %endif6481 -then6479: + br i1 %t285, label %then6483, label %endif6485 +then6483: %t286 = load ptr, ptr %a1 %t287 = load ptr, ptr %a3 %t288 = icmp eq ptr %t287, null - br i1 %t288, label %panic6482, label %ok6483 -panic6482: + br i1 %t288, label %panic6486, label %ok6487 +panic6486: call void @finch_panic(ptr @.str.4135, i64 3499, ptr @.str.4136) unreachable -ok6483: +ok6487: %t289 = getelementptr inbounds %S.gen.Val, ptr %t287, i32 0, i32 0 %t290 = load { ptr, i64, i64 }, ptr %t289 %t291 = load ptr, ptr %a3 %t292 = icmp eq ptr %t291, null - br i1 %t292, label %panic6484, label %ok6485 -panic6484: + br i1 %t292, label %panic6488, label %ok6489 +panic6488: call void @finch_panic(ptr @.str.4137, i64 3499, ptr @.str.4138) unreachable -ok6485: +ok6489: %t293 = getelementptr inbounds %S.gen.Val, ptr %t291, i32 0, i32 1 %t294 = load %S.ast.Type, ptr %t293 %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4139, i64 5, i64 0 }) @@ -64754,19 +64780,19 @@ ok6485: %t300 = insertvalue %S.gen.Val %t298, %S.ast.Type %t299, 1 %t301 = load ptr, ptr %a3 %t302 = icmp eq ptr %t301, null - br i1 %t302, label %panic6486, label %ok6487 -panic6486: + br i1 %t302, label %panic6490, label %ok6491 +panic6490: call void @finch_panic(ptr @.str.4141, i64 3499, ptr @.str.4142) unreachable -ok6487: +ok6491: %t303 = load %S.gen.Val, ptr %t301 store %S.gen.Val %t300, ptr %t301 store %S.gen.Val %t303, ptr %a304 call void @finch.drop.S_gen_Val(ptr %a304) - br label %endif6481 -endif6481: + br label %endif6485 +endif6485: ret i1 true -endif6465: +endif6469: ret i1 false } @@ -64928,10 +64954,10 @@ entry: store { ptr, i64, i64 } { ptr @.str.4143, i64 1, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.from6488 -logic.from6488: - br i1 %t16, label %logic.rhs6489, label %logic.end6490 -logic.rhs6489: + br label %logic.from6492 +logic.from6492: + br i1 %t16, label %logic.rhs6493, label %logic.end6494 +logic.rhs6493: %t17 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t18 = getelementptr inbounds %S.ast.Type, ptr %t17, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 @@ -64939,15 +64965,15 @@ logic.rhs6489: store { ptr, i64, i64 } { ptr @.str.4144, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend6491 -logic.rend6491: - br label %logic.end6490 -logic.end6490: - %t24 = phi i1 [ false, %logic.from6488 ], [ %t23, %logic.rend6491 ] - br label %logic.from6492 -logic.from6492: - br i1 %t24, label %logic.rhs6493, label %logic.end6494 -logic.rhs6493: + br label %logic.rend6495 +logic.rend6495: + br label %logic.end6494 +logic.end6494: + %t24 = phi i1 [ false, %logic.from6492 ], [ %t23, %logic.rend6495 ] + br label %logic.from6496 +logic.from6496: + br i1 %t24, label %logic.rhs6497, label %logic.end6498 +logic.rhs6497: %t25 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t26 = getelementptr inbounds %S.ast.Type, ptr %t25, i32 0, i32 0 %t27 = load { ptr, i64, i64 }, ptr %t26 @@ -64955,13 +64981,13 @@ logic.rhs6493: store { ptr, i64, i64 } { ptr @.str.4145, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br label %logic.rend6495 -logic.rend6495: - br label %logic.end6494 -logic.end6494: - %t32 = phi i1 [ false, %logic.from6492 ], [ %t31, %logic.rend6495 ] - br i1 %t32, label %then6496, label %endif6498 -then6496: + br label %logic.rend6499 +logic.rend6499: + br label %logic.end6498 +logic.end6498: + %t32 = phi i1 [ false, %logic.from6496 ], [ %t31, %logic.rend6499 ] + br i1 %t32, label %then6500, label %endif6502 +then6500: %t33 = load ptr, ptr %a1 %t34 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t33, { ptr, i64, i64 } { ptr @.str.4146, i64 17, i64 0 }) store { ptr, i64, i64 } %t34, ptr %a35 @@ -65031,25 +65057,25 @@ then6496: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t86 -endif6498: +endif6502: %t87 = load ptr, ptr %a1 %t88 = call i1 @finch.gen.unify(ptr %t87, ptr %a6, ptr %a10) %t89 = xor i1 %t88, true - br i1 %t89, label %then6499, label %endif6501 -then6499: + br i1 %t89, label %then6503, label %endif6505 +then6503: %t90 = load ptr, ptr %a1 %t91 = load { ptr, i64, i64 }, ptr %a2 %t92 = load %S.gen.Val, ptr %a6 %t93 = load %S.gen.Val, ptr %a10 %t94 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t90, { ptr, i64, i64 } %t91, %S.gen.Val %t92, %S.gen.Val %t93, %S.ast.Node %t94) - br label %endif6501 -endif6501: + br label %endif6505 +endif6505: %t95 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t96 = load %S.ast.Type, ptr %t95 %t97 = call i1 @finch.gen.isInt(%S.ast.Type %t96) - br i1 %t97, label %then6502, label %endif6504 -then6502: + br i1 %t97, label %then6506, label %endif6508 +then6506: %t98 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t99 = call ptr @finch_alloc(i64 %t98) %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 0 @@ -65105,8 +65131,8 @@ then6502: %t130 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t131 = load %S.ast.Type, ptr %t130 %t132 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t131) - br i1 %t132, label %then6505, label %endif6507 -then6505: + br i1 %t132, label %then6509, label %endif6511 +then6509: %t133 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t134 = call ptr @finch_alloc(i64 %t133) %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 0 @@ -65136,49 +65162,49 @@ then6505: store { ptr, i64, i64 } %t147, ptr %a129 store { ptr, i64, i64 } %t148, ptr %a149 call void @finch.drop.arr_str(ptr %a149) - br label %endif6507 -endif6507: + br label %endif6511 +endif6511: %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 %t151 = load { ptr, i64, i64 }, ptr %a2 store i64 -1, ptr %a152 %t153 = load i64, ptr %t150 %t154 = load ptr, ptr %a113 store i64 0, ptr %a155 - br label %find.cond6508 -find.cond6508: + br label %find.cond6512 +find.cond6512: %t156 = load i64, ptr %a155 %t157 = icmp slt i64 %t156, %t153 - br i1 %t157, label %find.body6509, label %find.end6512 -find.body6509: + br i1 %t157, label %find.body6513, label %find.end6516 +find.body6513: %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i64 %t156 %t159 = load { ptr, i64, i64 }, ptr %t158 store { ptr, i64, i64 } %t159, ptr %a160 store { ptr, i64, i64 } %t151, ptr %a161 %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) %t163 = icmp ne i32 %t162, 0 - br i1 %t163, label %find.hit6510, label %find.next6511 -find.hit6510: + br i1 %t163, label %find.hit6514, label %find.next6515 +find.hit6514: store i64 %t156, ptr %a152 - br label %find.end6512 -find.next6511: + br label %find.end6516 +find.next6515: %t164 = add i64 %t156, 1 store i64 %t164, ptr %a155 - br label %find.cond6508 -find.end6512: + br label %find.cond6512 +find.end6516: %t165 = load i64, ptr %a152 store i64 %t165, ptr %a166 %t167 = load i64, ptr %a166 %t168 = icmp slt i64 %t167, 0 - br i1 %t168, label %then6513, label %endif6515 -then6513: + br i1 %t168, label %then6517, label %endif6519 +then6517: %t169 = load ptr, ptr %a1 %t170 = load { ptr, i64, i64 }, ptr %a2 %t171 = load %S.gen.Val, ptr %a6 %t172 = load %S.gen.Val, ptr %a10 %t173 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t169, { ptr, i64, i64 } %t170, %S.gen.Val %t171, %S.gen.Val %t172, %S.ast.Node %t173) - br label %endif6515 -endif6515: + br label %endif6519 +endif6519: %t174 = load ptr, ptr %a1 %t175 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t176 = load %S.ast.Type, ptr %t175 @@ -65189,51 +65215,51 @@ endif6515: store { ptr, i64, i64 } { ptr @.str.4183, i64 1, i64 0 }, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 - br label %logic.from6516 -logic.from6516: - br i1 %t183, label %logic.end6518, label %logic.rhs6517 -logic.rhs6517: + br label %logic.from6520 +logic.from6520: + br i1 %t183, label %logic.end6522, label %logic.rhs6521 +logic.rhs6521: %t184 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t184, ptr %a185 store { ptr, i64, i64 } { ptr @.str.4184, i64 1, i64 0 }, ptr %a186 %t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186) %t188 = icmp ne i32 %t187, 0 - br label %logic.rend6519 -logic.rend6519: - br label %logic.end6518 -logic.end6518: - %t189 = phi i1 [ true, %logic.from6516 ], [ %t188, %logic.rend6519 ] - br i1 %t189, label %then6520, label %endif6522 -then6520: + br label %logic.rend6523 +logic.rend6523: + br label %logic.end6522 +logic.end6522: + %t189 = phi i1 [ true, %logic.from6520 ], [ %t188, %logic.rend6523 ] + br i1 %t189, label %then6524, label %endif6526 +then6524: %t190 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 %t191 = load i1, ptr %t190 - br label %logic.from6523 -logic.from6523: - br i1 %t191, label %logic.rhs6524, label %logic.end6525 -logic.rhs6524: + br label %logic.from6527 +logic.from6527: + br i1 %t191, label %logic.rhs6528, label %logic.end6529 +logic.rhs6528: %t192 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 %t193 = load { ptr, i64, i64 }, ptr %t192 store { ptr, i64, i64 } %t193, ptr %a194 store { ptr, i64, i64 } { ptr @.str.4185, i64 1, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 - br label %logic.rend6526 -logic.rend6526: - br label %logic.end6525 -logic.end6525: - %t198 = phi i1 [ false, %logic.from6523 ], [ %t197, %logic.rend6526 ] - br i1 %t198, label %then6527, label %endif6529 -then6527: + br label %logic.rend6530 +logic.rend6530: + br label %logic.end6529 +logic.end6529: + %t198 = phi i1 [ false, %logic.from6527 ], [ %t197, %logic.rend6530 ] + br i1 %t198, label %then6531, label %endif6533 +then6531: %t199 = load ptr, ptr %a1 %t200 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t199, %S.ast.Node %t200, { ptr, i64, i64 } { ptr @.str.4186, i64 16, i64 0 }) - br label %endif6529 -endif6529: + br label %endif6533 +endif6533: %t201 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 %t202 = load i1, ptr %t201 %t203 = xor i1 %t202, true - br i1 %t203, label %then6530, label %endif6532 -then6530: + br i1 %t203, label %then6534, label %endif6536 +then6534: %t204 = load ptr, ptr %a1 %t205 = load ptr, ptr %a1 %t206 = load { ptr, i64, i64 }, ptr %a178 @@ -65268,20 +65294,20 @@ then6530: call void @finch.gen.panicIf(ptr %t204, { ptr, i64, i64 } %t228, { ptr, i64, i64 } { ptr @.str.4190, i64 16, i64 0 }, %S.ast.Node %t230) store { ptr, i64, i64 } %t228, ptr %a231 call void @finch_str_drop(ptr %a231) - br label %endif6532 -endif6532: - br label %endif6522 -endif6522: + br label %endif6536 +endif6536: + br label %endif6526 +endif6526: %t232 = load ptr, ptr %a1 %t233 = load i64, ptr %a166 %t234 = load { ptr, i64, i64 }, ptr %a129 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 %t233, %t235 - br i1 %t236, label %range6533, label %inrange6534 -range6533: + br i1 %t236, label %range6537, label %inrange6538 +range6537: call void @finch_panic_index(ptr @.str.4191, i64 3540, i64 %t233, i64 %t235) unreachable -inrange6534: +inrange6538: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t233 %t239 = load { ptr, i64, i64 }, ptr %t238 @@ -65340,12 +65366,12 @@ inrange6534: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t282 -endif6504: +endif6508: %t283 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t284 = load %S.ast.Type, ptr %t283 %t285 = call i1 @finch.gen.isFloat(%S.ast.Type %t284) - br i1 %t285, label %then6535, label %endif6537 -then6535: + br i1 %t285, label %then6539, label %endif6541 +then6539: %t286 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t287 = call ptr @finch_alloc(i64 %t286) %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 0 @@ -65384,51 +65410,51 @@ then6535: %t311 = load i64, ptr %t308 %t312 = load ptr, ptr %a296 store i64 0, ptr %a313 - br label %find.cond6538 -find.cond6538: + br label %find.cond6542 +find.cond6542: %t314 = load i64, ptr %a313 %t315 = icmp slt i64 %t314, %t311 - br i1 %t315, label %find.body6539, label %find.end6542 -find.body6539: + br i1 %t315, label %find.body6543, label %find.end6546 +find.body6543: %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t312, i64 %t314 %t317 = load { ptr, i64, i64 }, ptr %t316 store { ptr, i64, i64 } %t317, ptr %a318 store { ptr, i64, i64 } %t309, ptr %a319 %t320 = call i32 @finch_str_eq(ptr %a318, ptr %a319) %t321 = icmp ne i32 %t320, 0 - br i1 %t321, label %find.hit6540, label %find.next6541 -find.hit6540: + br i1 %t321, label %find.hit6544, label %find.next6545 +find.hit6544: store i64 %t314, ptr %a310 - br label %find.end6542 -find.next6541: + br label %find.end6546 +find.next6545: %t322 = add i64 %t314, 1 store i64 %t322, ptr %a313 - br label %find.cond6538 -find.end6542: + br label %find.cond6542 +find.end6546: %t323 = load i64, ptr %a310 store i64 %t323, ptr %a324 %t325 = load i64, ptr %a324 %t326 = icmp slt i64 %t325, 0 - br i1 %t326, label %then6543, label %endif6545 -then6543: + br i1 %t326, label %then6547, label %endif6549 +then6547: %t327 = load ptr, ptr %a1 %t328 = load { ptr, i64, i64 }, ptr %a2 %t329 = load %S.gen.Val, ptr %a6 %t330 = load %S.gen.Val, ptr %a10 %t331 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t327, { ptr, i64, i64 } %t328, %S.gen.Val %t329, %S.gen.Val %t330, %S.ast.Node %t331) - br label %endif6545 -endif6545: + br label %endif6549 +endif6549: %t332 = load ptr, ptr %a1 %t333 = load i64, ptr %a324 %t334 = load { ptr, i64, i64 }, ptr %a307 %t335 = extractvalue { ptr, i64, i64 } %t334, 1 %t336 = icmp uge i64 %t333, %t335 - br i1 %t336, label %range6546, label %inrange6547 -range6546: + br i1 %t336, label %range6550, label %inrange6551 +range6550: call void @finch_panic_index(ptr @.str.4205, i64 3549, i64 %t333, i64 %t335) unreachable -inrange6547: +inrange6551: %t337 = extractvalue { ptr, i64, i64 } %t334, 0 %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t333 %t339 = load { ptr, i64, i64 }, ptr %t338 @@ -65491,7 +65517,7 @@ inrange6547: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t386 -endif6537: +endif6541: %t387 = load ptr, ptr %a1 %t388 = load { ptr, i64, i64 }, ptr %a2 %t389 = load %S.gen.Val, ptr %a6 @@ -65756,20 +65782,20 @@ entry: store { ptr, i64, i64 } { ptr @.str.4209, i64 2, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.from6548 -logic.from6548: - br i1 %t16, label %logic.end6550, label %logic.rhs6549 -logic.rhs6549: + br label %logic.from6552 +logic.from6552: + br i1 %t16, label %logic.end6554, label %logic.rhs6553 +logic.rhs6553: %t17 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t17, ptr %a18 store { ptr, i64, i64 } { ptr @.str.4210, i64 2, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp ne i32 %t20, 0 - br label %logic.rend6551 -logic.rend6551: - br label %logic.end6550 -logic.end6550: - %t22 = phi i1 [ true, %logic.from6548 ], [ %t21, %logic.rend6551 ] + br label %logic.rend6555 +logic.rend6555: + br label %logic.end6554 +logic.end6554: + %t22 = phi i1 [ true, %logic.from6552 ], [ %t21, %logic.rend6555 ] store i1 %t22, ptr %a23 %t24 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t25 = getelementptr inbounds %S.ast.Type, ptr %t24, i32 0, i32 0 @@ -65778,10 +65804,10 @@ logic.end6550: store { ptr, i64, i64 } { ptr @.str.4211, i64 3, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br label %logic.from6552 -logic.from6552: - br i1 %t30, label %logic.end6554, label %logic.rhs6553 -logic.rhs6553: + br label %logic.from6556 +logic.from6556: + br i1 %t30, label %logic.end6558, label %logic.rhs6557 +logic.rhs6557: %t31 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 %t33 = load { ptr, i64, i64 }, ptr %t32 @@ -65789,15 +65815,15 @@ logic.rhs6553: store { ptr, i64, i64 } { ptr @.str.4212, i64 3, i64 0 }, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br label %logic.rend6555 -logic.rend6555: - br label %logic.end6554 -logic.end6554: - %t38 = phi i1 [ true, %logic.from6552 ], [ %t37, %logic.rend6555 ] - br label %logic.from6556 -logic.from6556: - br i1 %t38, label %logic.end6558, label %logic.rhs6557 -logic.rhs6557: + br label %logic.rend6559 +logic.rend6559: + br label %logic.end6558 +logic.end6558: + %t38 = phi i1 [ true, %logic.from6556 ], [ %t37, %logic.rend6559 ] + br label %logic.from6560 +logic.from6560: + br i1 %t38, label %logic.end6562, label %logic.rhs6561 +logic.rhs6561: %t39 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t40 = getelementptr inbounds %S.ast.Type, ptr %t39, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 @@ -65805,15 +65831,15 @@ logic.rhs6557: store { ptr, i64, i64 } { ptr @.str.4213, i64 4, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br label %logic.rend6559 -logic.rend6559: - br label %logic.end6558 -logic.end6558: - %t46 = phi i1 [ true, %logic.from6556 ], [ %t45, %logic.rend6559 ] - br label %logic.from6560 -logic.from6560: - br i1 %t46, label %logic.end6562, label %logic.rhs6561 -logic.rhs6561: + br label %logic.rend6563 +logic.rend6563: + br label %logic.end6562 +logic.end6562: + %t46 = phi i1 [ true, %logic.from6560 ], [ %t45, %logic.rend6563 ] + br label %logic.from6564 +logic.from6564: + br i1 %t46, label %logic.end6566, label %logic.rhs6565 +logic.rhs6565: %t47 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t48 = getelementptr inbounds %S.ast.Type, ptr %t47, i32 0, i32 0 %t49 = load { ptr, i64, i64 }, ptr %t48 @@ -65821,13 +65847,13 @@ logic.rhs6561: store { ptr, i64, i64 } { ptr @.str.4214, i64 4, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 - br label %logic.rend6563 -logic.rend6563: - br label %logic.end6562 -logic.end6562: - %t54 = phi i1 [ true, %logic.from6560 ], [ %t53, %logic.rend6563 ] - br i1 %t54, label %then6564, label %endif6566 -then6564: + br label %logic.rend6567 +logic.rend6567: + br label %logic.end6566 +logic.end6566: + %t54 = phi i1 [ true, %logic.from6564 ], [ %t53, %logic.rend6567 ] + br i1 %t54, label %then6568, label %endif6570 +then6568: %t55 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t56 = getelementptr inbounds %S.ast.Type, ptr %t55, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 @@ -65835,10 +65861,10 @@ then6564: store { ptr, i64, i64 } { ptr @.str.4215, i64 3, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br label %logic.from6567 -logic.from6567: - br i1 %t61, label %logic.end6569, label %logic.rhs6568 -logic.rhs6568: + br label %logic.from6571 +logic.from6571: + br i1 %t61, label %logic.end6573, label %logic.rhs6572 +logic.rhs6572: %t62 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t63 = getelementptr inbounds %S.ast.Type, ptr %t62, i32 0, i32 0 %t64 = load { ptr, i64, i64 }, ptr %t63 @@ -65846,44 +65872,44 @@ logic.rhs6568: store { ptr, i64, i64 } { ptr @.str.4216, i64 3, i64 0 }, ptr %a66 %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) %t68 = icmp ne i32 %t67, 0 - br label %logic.rend6570 -logic.rend6570: - br label %logic.end6569 -logic.end6569: - %t69 = phi i1 [ true, %logic.from6567 ], [ %t68, %logic.rend6570 ] - br i1 %t69, label %then6571, label %endif6573 -then6571: + br label %logic.rend6574 +logic.rend6574: + br label %logic.end6573 +logic.end6573: + %t69 = phi i1 [ true, %logic.from6571 ], [ %t68, %logic.rend6574 ] + br i1 %t69, label %then6575, label %endif6577 +then6575: %t70 = load ptr, ptr %a1 %t71 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } { ptr @.str.4217, i64 59, i64 0 }) - br label %endif6573 -endif6573: + br label %endif6577 +endif6577: %t72 = load i1, ptr %a23 %t73 = xor i1 %t72, true - br i1 %t73, label %then6574, label %endif6576 -then6574: + br i1 %t73, label %then6578, label %endif6580 +then6578: %t74 = load ptr, ptr %a1 %t75 = load { ptr, i64, i64 }, ptr %a2 %t76 = load %S.gen.Val, ptr %a6 %t77 = load %S.gen.Val, ptr %a10 %t78 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t74, { ptr, i64, i64 } %t75, %S.gen.Val %t76, %S.gen.Val %t77, %S.ast.Node %t78) - br label %endif6576 -endif6576: + br label %endif6580 +endif6580: store { ptr, i64, i64 } { ptr @.str.4218, i64 2, i64 0 }, ptr %a79 %t80 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t80, ptr %a81 store { ptr, i64, i64 } { ptr @.str.4219, i64 2, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 - br i1 %t84, label %then6577, label %endif6579 -then6577: + br i1 %t84, label %then6581, label %endif6583 +then6581: %t85 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4220, i64 2, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t85, ptr %a86 call void @finch_str_drop(ptr %a86) - br label %endif6579 -endif6579: + br label %endif6583 +endif6583: %t87 = load ptr, ptr %a1 %t88 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4221, i64 5, i64 0 }, ptr %a90 @@ -65928,7 +65954,7 @@ endif6579: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t121 -endif6566: +endif6570: %t122 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t123 = getelementptr inbounds %S.ast.Type, ptr %t122, i32 0, i32 0 %t124 = load { ptr, i64, i64 }, ptr %t123 @@ -65936,10 +65962,10 @@ endif6566: store { ptr, i64, i64 } { ptr @.str.4225, i64 3, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) %t128 = icmp ne i32 %t127, 0 - br label %logic.from6580 -logic.from6580: - br i1 %t128, label %logic.rhs6581, label %logic.end6582 -logic.rhs6581: + br label %logic.from6584 +logic.from6584: + br i1 %t128, label %logic.rhs6585, label %logic.end6586 +logic.rhs6585: %t129 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 %t130 = getelementptr inbounds %S.ast.Type, ptr %t129, i32 0, i32 0 %t131 = load { ptr, i64, i64 }, ptr %t130 @@ -65947,16 +65973,16 @@ logic.rhs6581: store { ptr, i64, i64 } { ptr @.str.4226, i64 3, i64 0 }, ptr %a133 %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) %t135 = icmp ne i32 %t134, 0 - br label %logic.rend6583 -logic.rend6583: - br label %logic.end6582 -logic.end6582: - %t136 = phi i1 [ false, %logic.from6580 ], [ %t135, %logic.rend6583 ] - br i1 %t136, label %then6584, label %endif6586 -then6584: + br label %logic.rend6587 +logic.rend6587: + br label %logic.end6586 +logic.end6586: + %t136 = phi i1 [ false, %logic.from6584 ], [ %t135, %logic.rend6587 ] + br i1 %t136, label %then6588, label %endif6590 +then6588: %t137 = load i1, ptr %a23 - br i1 %t137, label %then6587, label %endif6589 -then6587: + br i1 %t137, label %then6591, label %endif6593 +then6591: %t138 = load ptr, ptr %a1 %t139 = load ptr, ptr %a1 %t140 = load %S.gen.Val, ptr %a6 @@ -66000,14 +66026,14 @@ then6587: store { ptr, i64, i64 } { ptr @.str.4231, i64 2, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 - br i1 %t174, label %then6590, label %endif6592 -then6590: + br i1 %t174, label %then6594, label %endif6596 +then6594: %t175 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } { ptr @.str.4232, i64 2, i64 0 }, ptr %a169 store { ptr, i64, i64 } %t175, ptr %a176 call void @finch_str_drop(ptr %a176) - br label %endif6592 -endif6592: + br label %endif6596 +endif6596: %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a169 store { ptr, i64, i64 } { ptr @.str.4233, i64 5, i64 0 }, ptr %a180 @@ -66056,7 +66082,7 @@ endif6592: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t212 -endif6589: +endif6593: %t213 = load ptr, ptr %a1 %t214 = load ptr, ptr %a1 %t215 = load %S.gen.Val, ptr %a6 @@ -66144,20 +66170,20 @@ endif6589: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t281 -endif6586: +endif6590: %t282 = load ptr, ptr %a1 %t283 = call i1 @finch.gen.unify(ptr %t282, ptr %a6, ptr %a10) %t284 = xor i1 %t283, true - br i1 %t284, label %then6593, label %endif6595 -then6593: + br i1 %t284, label %then6597, label %endif6599 +then6597: %t285 = load ptr, ptr %a1 %t286 = load { ptr, i64, i64 }, ptr %a2 %t287 = load %S.gen.Val, ptr %a6 %t288 = load %S.gen.Val, ptr %a10 %t289 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t285, { ptr, i64, i64 } %t286, %S.gen.Val %t287, %S.gen.Val %t288, %S.ast.Node %t289) - br label %endif6595 -endif6595: + br label %endif6599 +endif6599: %t290 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t291 = getelementptr inbounds %S.ast.Type, ptr %t290, i32 0, i32 0 %t292 = load { ptr, i64, i64 }, ptr %t291 @@ -66168,8 +66194,8 @@ endif6595: %t297 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t298 = load %S.ast.Type, ptr %t297 %t299 = call i1 @finch.gen.isFloat(%S.ast.Type %t298) - br i1 %t299, label %then6596, label %endif6598 -then6596: + br i1 %t299, label %then6600, label %endif6602 +then6600: %t300 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t301 = call ptr @finch_alloc(i64 %t300) %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 0 @@ -66213,36 +66239,36 @@ then6596: %t328 = load i64, ptr %t325 %t329 = load ptr, ptr %a311 store i64 0, ptr %a330 - br label %find.cond6599 -find.cond6599: + br label %find.cond6603 +find.cond6603: %t331 = load i64, ptr %a330 %t332 = icmp slt i64 %t331, %t328 - br i1 %t332, label %find.body6600, label %find.end6603 -find.body6600: + br i1 %t332, label %find.body6604, label %find.end6607 +find.body6604: %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t329, i64 %t331 %t334 = load { ptr, i64, i64 }, ptr %t333 store { ptr, i64, i64 } %t334, ptr %a335 store { ptr, i64, i64 } %t326, ptr %a336 %t337 = call i32 @finch_str_eq(ptr %a335, ptr %a336) %t338 = icmp ne i32 %t337, 0 - br i1 %t338, label %find.hit6601, label %find.next6602 -find.hit6601: + br i1 %t338, label %find.hit6605, label %find.next6606 +find.hit6605: store i64 %t331, ptr %a327 - br label %find.end6603 -find.next6602: + br label %find.end6607 +find.next6606: %t339 = add i64 %t331, 1 store i64 %t339, ptr %a330 - br label %find.cond6599 -find.end6603: + br label %find.cond6603 +find.end6607: %t340 = load i64, ptr %a327 %t341 = load { ptr, i64, i64 }, ptr %a323 %t342 = extractvalue { ptr, i64, i64 } %t341, 1 %t343 = icmp uge i64 %t340, %t342 - br i1 %t343, label %range6604, label %inrange6605 -range6604: + br i1 %t343, label %range6608, label %inrange6609 +range6608: call void @finch_panic_index(ptr @.str.4257, i64 3595, i64 %t340, i64 %t342) unreachable -inrange6605: +inrange6609: %t344 = extractvalue { ptr, i64, i64 } %t341, 0 %t345 = getelementptr inbounds { ptr, i64, i64 }, ptr %t344, i64 %t340 %t346 = load { ptr, i64, i64 }, ptr %t345 @@ -66308,37 +66334,37 @@ inrange6605: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t394 -endif6598: +endif6602: %t395 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t395, ptr %a396 store { ptr, i64, i64 } { ptr @.str.4262, i64 4, i64 0 }, ptr %a397 %t398 = call i32 @finch_str_eq(ptr %a396, ptr %a397) %t399 = icmp ne i32 %t398, 0 - br i1 %t399, label %then6606, label %endif6608 -then6606: + br i1 %t399, label %then6610, label %endif6612 +then6610: %t400 = load i1, ptr %a23 %t401 = xor i1 %t400, true - br i1 %t401, label %then6609, label %endif6611 -then6609: + br i1 %t401, label %then6613, label %endif6615 +then6613: %t402 = load ptr, ptr %a1 %t403 = load %S.ast.Node, ptr %a11 call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4263, i64 115, i64 0 }) - br label %endif6611 -endif6611: + br label %endif6615 +endif6615: store { ptr, i64, i64 } { ptr @.str.4264, i64 2, i64 0 }, ptr %a404 %t405 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t405, ptr %a406 store { ptr, i64, i64 } { ptr @.str.4265, i64 2, i64 0 }, ptr %a407 %t408 = call i32 @finch_str_eq(ptr %a406, ptr %a407) %t409 = icmp ne i32 %t408, 0 - br i1 %t409, label %then6612, label %endif6614 -then6612: + br i1 %t409, label %then6616, label %endif6618 +then6616: %t410 = load { ptr, i64, i64 }, ptr %a404 store { ptr, i64, i64 } { ptr @.str.4266, i64 2, i64 0 }, ptr %a404 store { ptr, i64, i64 } %t410, ptr %a411 call void @finch_str_drop(ptr %a411) - br label %endif6614 -endif6614: + br label %endif6618 +endif6618: %t412 = load ptr, ptr %a1 %t413 = load { ptr, i64, i64 }, ptr %a404 store { ptr, i64, i64 } { ptr @.str.4267, i64 5, i64 0 }, ptr %a415 @@ -66384,75 +66410,75 @@ endif6614: call void @finch.drop.S_gen_Val(ptr %a10) call void @finch.drop.S_gen_Val(ptr %a6) ret %S.gen.Val %t446 -endif6608: +endif6612: %t447 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t447, ptr %a448 store { ptr, i64, i64 } { ptr @.str.4271, i64 4, i64 0 }, ptr %a449 %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) %t451 = icmp ne i32 %t450, 0 - br label %logic.from6615 -logic.from6615: - br i1 %t451, label %logic.rhs6616, label %logic.end6617 -logic.rhs6616: + br label %logic.from6619 +logic.from6619: + br i1 %t451, label %logic.rhs6620, label %logic.end6621 +logic.rhs6620: %t452 = load i1, ptr %a23 %t453 = xor i1 %t452, true - br label %logic.rend6618 -logic.rend6618: - br label %logic.end6617 -logic.end6617: - %t454 = phi i1 [ false, %logic.from6615 ], [ %t453, %logic.rend6618 ] - br i1 %t454, label %then6619, label %endif6621 -then6619: + br label %logic.rend6622 +logic.rend6622: + br label %logic.end6621 +logic.end6621: + %t454 = phi i1 [ false, %logic.from6619 ], [ %t453, %logic.rend6622 ] + br i1 %t454, label %then6623, label %endif6625 +then6623: %t455 = load ptr, ptr %a1 %t456 = load { ptr, i64, i64 }, ptr %a2 %t457 = load %S.gen.Val, ptr %a6 %t458 = load %S.gen.Val, ptr %a10 %t459 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t455, { ptr, i64, i64 } %t456, %S.gen.Val %t457, %S.gen.Val %t458, %S.ast.Node %t459) - br label %endif6621 -endif6621: + br label %endif6625 +endif6625: %t460 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 %t461 = load %S.ast.Type, ptr %t460 %t462 = call i1 @finch.gen.isInt(%S.ast.Type %t461) %t463 = xor i1 %t462, true - br label %logic.from6622 -logic.from6622: - br i1 %t463, label %logic.rhs6623, label %logic.end6624 -logic.rhs6623: + br label %logic.from6626 +logic.from6626: + br i1 %t463, label %logic.rhs6627, label %logic.end6628 +logic.rhs6627: %t464 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t464, ptr %a465 store { ptr, i64, i64 } { ptr @.str.4272, i64 4, i64 0 }, ptr %a466 %t467 = call i32 @finch_str_eq(ptr %a465, ptr %a466) %t468 = icmp eq i32 %t467, 0 - br label %logic.rend6625 -logic.rend6625: - br label %logic.end6624 -logic.end6624: - %t469 = phi i1 [ false, %logic.from6622 ], [ %t468, %logic.rend6625 ] - br label %logic.from6626 -logic.from6626: - br i1 %t469, label %logic.rhs6627, label %logic.end6628 -logic.rhs6627: + br label %logic.rend6629 +logic.rend6629: + br label %logic.end6628 +logic.end6628: + %t469 = phi i1 [ false, %logic.from6626 ], [ %t468, %logic.rend6629 ] + br label %logic.from6630 +logic.from6630: + br i1 %t469, label %logic.rhs6631, label %logic.end6632 +logic.rhs6631: %t470 = load { ptr, i64, i64 }, ptr %a296 store { ptr, i64, i64 } %t470, ptr %a471 store { ptr, i64, i64 } { ptr @.str.4273, i64 4, i64 0 }, ptr %a472 %t473 = call i32 @finch_str_eq(ptr %a471, ptr %a472) %t474 = icmp eq i32 %t473, 0 - br label %logic.rend6629 -logic.rend6629: - br label %logic.end6628 -logic.end6628: - %t475 = phi i1 [ false, %logic.from6626 ], [ %t474, %logic.rend6629 ] - br i1 %t475, label %then6630, label %endif6632 -then6630: + br label %logic.rend6633 +logic.rend6633: + br label %logic.end6632 +logic.end6632: + %t475 = phi i1 [ false, %logic.from6630 ], [ %t474, %logic.rend6633 ] + br i1 %t475, label %then6634, label %endif6636 +then6634: %t476 = load ptr, ptr %a1 %t477 = load { ptr, i64, i64 }, ptr %a2 %t478 = load %S.gen.Val, ptr %a6 %t479 = load %S.gen.Val, ptr %a10 %t480 = load %S.ast.Node, ptr %a11 call void @finch.gen.badOperands(ptr %t476, { ptr, i64, i64 } %t477, %S.gen.Val %t478, %S.gen.Val %t479, %S.ast.Node %t480) - br label %endif6632 -endif6632: + br label %endif6636 +endif6636: %t481 = load ptr, ptr %a1 %t482 = load { ptr, i64, i64 }, ptr %a2 %t483 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 @@ -66575,8 +66601,8 @@ entry: %t25 = insertvalue { ptr, i64, i64 } %t24, i64 6, 2 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load i1, ptr %a2 - br i1 %t27, label %then6633, label %endif6635 -then6633: + br i1 %t27, label %then6637, label %endif6639 +then6637: %t28 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t29 = call ptr @finch_alloc(i64 %t28) %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 @@ -66598,44 +66624,44 @@ then6633: store { ptr, i64, i64 } %t38, ptr %a26 store { ptr, i64, i64 } %t39, ptr %a40 call void @finch.drop.arr_str(ptr %a40) - br label %endif6635 -endif6635: + br label %endif6639 +endif6639: %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t42 = load { ptr, i64, i64 }, ptr %a1 store i64 -1, ptr %a43 %t44 = load i64, ptr %t41 %t45 = load ptr, ptr %a14 store i64 0, ptr %a46 - br label %find.cond6636 -find.cond6636: + br label %find.cond6640 +find.cond6640: %t47 = load i64, ptr %a46 %t48 = icmp slt i64 %t47, %t44 - br i1 %t48, label %find.body6637, label %find.end6640 -find.body6637: + br i1 %t48, label %find.body6641, label %find.end6644 +find.body6641: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t47 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } %t42, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br i1 %t54, label %find.hit6638, label %find.next6639 -find.hit6638: + br i1 %t54, label %find.hit6642, label %find.next6643 +find.hit6642: store i64 %t47, ptr %a43 - br label %find.end6640 -find.next6639: + br label %find.end6644 +find.next6643: %t55 = add i64 %t47, 1 store i64 %t55, ptr %a46 - br label %find.cond6636 -find.end6640: + br label %find.cond6640 +find.end6644: %t56 = load i64, ptr %a43 %t57 = load { ptr, i64, i64 }, ptr %a26 %t58 = extractvalue { ptr, i64, i64 } %t57, 1 %t59 = icmp uge i64 %t56, %t58 - br i1 %t59, label %range6641, label %inrange6642 -range6641: + br i1 %t59, label %range6645, label %inrange6646 +range6645: call void @finch_panic_index(ptr @.str.4297, i64 3622, i64 %t56, i64 %t58) unreachable -inrange6642: +inrange6646: %t60 = extractvalue { ptr, i64, i64 } %t57, 0 %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i64 %t56 %t62 = load { ptr, i64, i64 }, ptr %t61 @@ -66730,32 +66756,32 @@ entry: store { ptr, i64, i64 } { ptr @.str.4298, i64 2, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from6643 -logic.from6643: - br i1 %t13, label %logic.end6645, label %logic.rhs6644 -logic.rhs6644: + br label %logic.from6647 +logic.from6647: + br i1 %t13, label %logic.end6649, label %logic.rhs6648 +logic.rhs6648: %t14 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t14, ptr %a15 store { ptr, i64, i64 } { ptr @.str.4299, i64 2, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br label %logic.rend6646 -logic.rend6646: - br label %logic.end6645 -logic.end6645: - %t19 = phi i1 [ true, %logic.from6643 ], [ %t18, %logic.rend6646 ] - br i1 %t19, label %then6647, label %endif6649 -then6647: + br label %logic.rend6650 +logic.rend6650: + br label %logic.end6649 +logic.end6649: + %t19 = phi i1 [ true, %logic.from6647 ], [ %t18, %logic.rend6650 ] + br i1 %t19, label %then6651, label %endif6653 +then6651: %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t22 = load { ptr, i64, i64 }, ptr %t21 %t23 = extractvalue { ptr, i64, i64 } %t22, 1 %t24 = icmp uge i64 0, %t23 - br i1 %t24, label %range6650, label %inrange6651 -range6650: + br i1 %t24, label %range6654, label %inrange6655 +range6654: call void @finch_panic_index(ptr @.str.4300, i64 3628, i64 0, i64 %t23) unreachable -inrange6651: +inrange6655: %t25 = extractvalue { ptr, i64, i64 } %t22, 0 %t26 = getelementptr inbounds %S.ast.Node, ptr %t25, i64 0 %t27 = load %S.ast.Node, ptr %t26 @@ -66781,22 +66807,22 @@ inrange6651: store { ptr, i64, i64 } { ptr @.str.4304, i64 2, i64 0 }, ptr %a45 %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) %t47 = icmp ne i32 %t46, 0 - br i1 %t47, label %then6652, label %else6653 -then6652: + br i1 %t47, label %then6656, label %else6657 +then6656: %t48 = load ptr, ptr %a1 %t49 = load { ptr, i64, i64 }, ptr %a29 %t50 = load { ptr, i64, i64 }, ptr %a35 %t51 = load { ptr, i64, i64 }, ptr %a38 call void @finch.gen.condBr(ptr %t48, { ptr, i64, i64 } %t49, { ptr, i64, i64 } %t50, { ptr, i64, i64 } %t51) - br label %endif6654 -else6653: + br label %endif6658 +else6657: %t52 = load ptr, ptr %a1 %t53 = load { ptr, i64, i64 }, ptr %a29 %t54 = load { ptr, i64, i64 }, ptr %a38 %t55 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.condBr(ptr %t52, { ptr, i64, i64 } %t53, { ptr, i64, i64 } %t54, { ptr, i64, i64 } %t55) - br label %endif6654 -endif6654: + br label %endif6658 +endif6658: %t56 = load ptr, ptr %a1 %t57 = load { ptr, i64, i64 }, ptr %a35 call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) @@ -66805,11 +66831,11 @@ endif6654: %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = extractvalue { ptr, i64, i64 } %t60, 1 %t62 = icmp uge i64 1, %t61 - br i1 %t62, label %range6655, label %inrange6656 -range6655: + br i1 %t62, label %range6659, label %inrange6660 +range6659: call void @finch_panic_index(ptr @.str.4305, i64 3640, i64 1, i64 %t61) unreachable -inrange6656: +inrange6660: %t63 = extractvalue { ptr, i64, i64 } %t60, 0 %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 1 %t65 = load %S.ast.Node, ptr %t64 @@ -66836,14 +66862,14 @@ inrange6656: store { ptr, i64, i64 } { ptr @.str.4308, i64 2, i64 0 }, ptr %a82 %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) %t84 = icmp ne i32 %t83, 0 - br i1 %t84, label %then6657, label %endif6659 -then6657: + br i1 %t84, label %then6661, label %endif6663 +then6661: %t85 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4309, i64 5, i64 0 }, ptr %a79 store { ptr, i64, i64 } %t85, ptr %a86 call void @finch_str_drop(ptr %a86) - br label %endif6659 -endif6659: + br label %endif6663 +endif6663: %t87 = load ptr, ptr %a1 %t88 = load { ptr, i64, i64 }, ptr %a79 store { ptr, i64, i64 } { ptr @.str.4310, i64 9, i64 0 }, ptr %a90 @@ -66910,17 +66936,17 @@ endif6659: call void @finch_str_drop(ptr %a29) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t135 -endif6649: +endif6653: %t136 = load ptr, ptr %a1 %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t138 = load { ptr, i64, i64 }, ptr %t137 %t139 = extractvalue { ptr, i64, i64 } %t138, 1 %t140 = icmp uge i64 0, %t139 - br i1 %t140, label %range6660, label %inrange6661 -range6660: + br i1 %t140, label %range6664, label %inrange6665 +range6664: call void @finch_panic_index(ptr @.str.4316, i64 3652, i64 0, i64 %t139) unreachable -inrange6661: +inrange6665: %t141 = extractvalue { ptr, i64, i64 } %t138, 0 %t142 = getelementptr inbounds %S.ast.Node, ptr %t141, i64 0 %t143 = load %S.ast.Node, ptr %t142 @@ -66928,11 +66954,11 @@ inrange6661: store %S.gen.Val %t144, ptr %a145 %t146 = load ptr, ptr %a1 %t147 = icmp eq ptr %t146, null - br i1 %t147, label %panic6662, label %ok6663 -panic6662: + br i1 %t147, label %panic6666, label %ok6667 +panic6666: call void @finch_panic(ptr @.str.4317, i64 3653, ptr @.str.4318) unreachable -ok6663: +ok6667: %t148 = getelementptr inbounds %S.gen.Gen, ptr %t146, i32 0, i32 11 %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i32 0, i32 1 %t150 = load i64, ptr %t149 @@ -66945,11 +66971,11 @@ ok6663: %t156 = load { ptr, i64, i64 }, ptr %t155 %t157 = extractvalue { ptr, i64, i64 } %t156, 1 %t158 = icmp uge i64 1, %t157 - br i1 %t158, label %range6664, label %inrange6665 -range6664: + br i1 %t158, label %range6668, label %inrange6669 +range6668: call void @finch_panic_index(ptr @.str.4319, i64 3655, i64 1, i64 %t157) unreachable -inrange6665: +inrange6669: %t159 = extractvalue { ptr, i64, i64 } %t156, 0 %t160 = getelementptr inbounds %S.ast.Node, ptr %t159, i64 1 %t161 = load %S.ast.Node, ptr %t160 @@ -66963,78 +66989,78 @@ inrange6665: store { ptr, i64, i64 } { ptr @.str.4320, i64 2, i64 0 }, ptr %a168 %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) %t170 = icmp ne i32 %t169, 0 - br label %logic.from6666 -logic.from6666: - br i1 %t170, label %logic.end6668, label %logic.rhs6667 -logic.rhs6667: + br label %logic.from6670 +logic.from6670: + br i1 %t170, label %logic.end6672, label %logic.rhs6671 +logic.rhs6671: %t171 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.4321, i64 2, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 - br label %logic.rend6669 -logic.rend6669: - br label %logic.end6668 -logic.end6668: - %t176 = phi i1 [ true, %logic.from6666 ], [ %t175, %logic.rend6669 ] - br label %logic.from6670 -logic.from6670: - br i1 %t176, label %logic.end6672, label %logic.rhs6671 -logic.rhs6671: + br label %logic.rend6673 +logic.rend6673: + br label %logic.end6672 +logic.end6672: + %t176 = phi i1 [ true, %logic.from6670 ], [ %t175, %logic.rend6673 ] + br label %logic.from6674 +logic.from6674: + br i1 %t176, label %logic.end6676, label %logic.rhs6675 +logic.rhs6675: %t177 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t177, ptr %a178 store { ptr, i64, i64 } { ptr @.str.4322, i64 1, i64 0 }, ptr %a179 %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) %t181 = icmp ne i32 %t180, 0 - br label %logic.rend6673 -logic.rend6673: - br label %logic.end6672 -logic.end6672: - %t182 = phi i1 [ true, %logic.from6670 ], [ %t181, %logic.rend6673 ] - br label %logic.from6674 -logic.from6674: - br i1 %t182, label %logic.end6676, label %logic.rhs6675 -logic.rhs6675: + br label %logic.rend6677 +logic.rend6677: + br label %logic.end6676 +logic.end6676: + %t182 = phi i1 [ true, %logic.from6674 ], [ %t181, %logic.rend6677 ] + br label %logic.from6678 +logic.from6678: + br i1 %t182, label %logic.end6680, label %logic.rhs6679 +logic.rhs6679: %t183 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t183, ptr %a184 store { ptr, i64, i64 } { ptr @.str.4323, i64 2, i64 0 }, ptr %a185 %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) %t187 = icmp ne i32 %t186, 0 - br label %logic.rend6677 -logic.rend6677: - br label %logic.end6676 -logic.end6676: - %t188 = phi i1 [ true, %logic.from6674 ], [ %t187, %logic.rend6677 ] - br label %logic.from6678 -logic.from6678: - br i1 %t188, label %logic.end6680, label %logic.rhs6679 -logic.rhs6679: + br label %logic.rend6681 +logic.rend6681: + br label %logic.end6680 +logic.end6680: + %t188 = phi i1 [ true, %logic.from6678 ], [ %t187, %logic.rend6681 ] + br label %logic.from6682 +logic.from6682: + br i1 %t188, label %logic.end6684, label %logic.rhs6683 +logic.rhs6683: %t189 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t189, ptr %a190 store { ptr, i64, i64 } { ptr @.str.4324, i64 1, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 - br label %logic.rend6681 -logic.rend6681: - br label %logic.end6680 -logic.end6680: - %t194 = phi i1 [ true, %logic.from6678 ], [ %t193, %logic.rend6681 ] - br label %logic.from6682 -logic.from6682: - br i1 %t194, label %logic.end6684, label %logic.rhs6683 -logic.rhs6683: + br label %logic.rend6685 +logic.rend6685: + br label %logic.end6684 +logic.end6684: + %t194 = phi i1 [ true, %logic.from6682 ], [ %t193, %logic.rend6685 ] + br label %logic.from6686 +logic.from6686: + br i1 %t194, label %logic.end6688, label %logic.rhs6687 +logic.rhs6687: %t195 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t195, ptr %a196 store { ptr, i64, i64 } { ptr @.str.4325, i64 2, i64 0 }, ptr %a197 %t198 = call i32 @finch_str_eq(ptr %a196, ptr %a197) %t199 = icmp ne i32 %t198, 0 - br label %logic.rend6685 -logic.rend6685: - br label %logic.end6684 -logic.end6684: - %t200 = phi i1 [ true, %logic.from6682 ], [ %t199, %logic.rend6685 ] - br i1 %t200, label %then6686, label %endif6688 -then6686: + br label %logic.rend6689 +logic.rend6689: + br label %logic.end6688 +logic.end6688: + %t200 = phi i1 [ true, %logic.from6686 ], [ %t199, %logic.rend6689 ] + br i1 %t200, label %then6690, label %endif6692 +then6690: %t201 = load ptr, ptr %a1 %t202 = load { ptr, i64, i64 }, ptr %a8 %t203 = load %S.gen.Val, ptr %a145 @@ -67045,7 +67071,7 @@ then6686: call void @finch.drop.S_gen_Val(ptr %a145) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t206 -endif6688: +endif6692: %t207 = load ptr, ptr %a1 %t208 = load { ptr, i64, i64 }, ptr %a8 %t209 = load %S.gen.Val, ptr %a145 @@ -67198,17 +67224,17 @@ entry: store { ptr, i64, i64 } { ptr @.str.4327, i64 5, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 - br i1 %t11, label %then6689, label %else6690 -then6689: + br i1 %t11, label %then6693, label %else6694 +then6693: %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 %t13 = load { ptr, i64, i64 }, ptr %t12 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 0, %t14 - br i1 %t15, label %range6692, label %inrange6693 -range6692: + br i1 %t15, label %range6696, label %inrange6697 +range6696: call void @finch_panic_index(ptr @.str.4328, i64 3666, i64 0, i64 %t14) unreachable -inrange6693: +inrange6697: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i64 0 %t18 = load %S.ast.Type, ptr %t17 @@ -67219,43 +67245,43 @@ inrange6693: store %S.ast.Type %t21, ptr %a5 store %S.ast.Type %t22, ptr %a23 call void @finch.drop.S_ast_Type(ptr %a23) - br label %endif6691 -else6690: + br label %endif6695 +else6694: %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = icmp eq i64 %t26, 0 - br i1 %t27, label %then6694, label %endif6696 -then6694: + br i1 %t27, label %then6698, label %endif6700 +then6698: %t28 = load ptr, ptr %a1 %t29 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t28, %S.ast.Node %t29, { ptr, i64, i64 } { ptr @.str.4329, i64 47, i64 0 }) - br label %endif6696 -endif6696: - br label %endif6691 -endif6691: + br label %endif6700 +endif6700: + br label %endif6695 +endif6695: store { ptr, i64, i64 } zeroinitializer, ptr %a30 %t31 = load ptr, ptr %a1 %t32 = icmp eq ptr %t31, null - br i1 %t32, label %panic6697, label %ok6698 -panic6697: + br i1 %t32, label %panic6701, label %ok6702 +panic6701: call void @finch_panic(ptr @.str.4330, i64 3671, ptr @.str.4331) unreachable -ok6698: +ok6702: %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 11 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 %t35 = load i64, ptr %t34 store i64 %t35, ptr %a36 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 store i64 0, ptr %a38 - br label %each.cond6699 -each.cond6699: + br label %each.cond6703 +each.cond6703: %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 %t40 = load i64, ptr %t39 %t41 = load i64, ptr %a38 %t42 = icmp slt i64 %t41, %t40 - br i1 %t42, label %each.body6700, label %each.end6702 -each.body6700: + br i1 %t42, label %each.body6704, label %each.end6706 +each.body6704: %t43 = load ptr, ptr %t37 %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 %t45 = load %S.ast.Node, ptr %t44 @@ -67267,8 +67293,8 @@ each.body6700: store { ptr, i64, i64 } { ptr @.str.4332, i64 4, i64 0 }, ptr %a51 %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) %t53 = icmp ne i32 %t52, 0 - br i1 %t53, label %then6703, label %else6704 -then6703: + br i1 %t53, label %then6707, label %else6708 +then6707: %t54 = load ptr, ptr %a1 %t55 = load %S.ast.Node, ptr %a46 %t56 = call %S.gen.Val @finch.gen.expr(ptr %t54, %S.ast.Node %t55) @@ -67285,8 +67311,8 @@ then6703: store %S.ast.Type %t63, ptr %a5 store %S.ast.Type %t64, ptr %a65 call void @finch.drop.S_ast_Type(ptr %a65) - br label %endif6705 -else6704: + br label %endif6709 +else6708: %t66 = load ptr, ptr %a1 %t67 = load %S.ast.Node, ptr %a46 %t68 = load %S.ast.Type, ptr %a5 @@ -67295,8 +67321,8 @@ else6704: store %S.gen.Val %t69, ptr %a47 store %S.gen.Val %t70, ptr %a71 call void @finch.drop.S_gen_Val(ptr %a71) - br label %endif6705 -endif6705: + br label %endif6709 +endif6709: %t72 = load ptr, ptr %a1 %t73 = load %S.gen.Val, ptr %a47 %t74 = load %S.ast.Type, ptr %a5 @@ -67324,11 +67350,11 @@ endif6705: %t91 = load { ptr, i64, i64 }, ptr %a30 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 - br i1 %t93, label %range6706, label %inrange6707 -range6706: + br i1 %t93, label %range6710, label %inrange6711 +range6710: call void @finch_panic_index(ptr @.str.4334, i64 3682, i64 %t90, i64 %t92) unreachable -inrange6707: +inrange6711: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 %t90 %t96 = load { ptr, i64, i64 }, ptr %t95 @@ -67346,13 +67372,13 @@ inrange6707: store %S.gen.Val %t106, ptr %a107 call void @finch.drop.S_gen_Val(ptr %a107) call void @finch.drop.S_gen_Val(ptr %a47) - br label %each.step6701 -each.step6701: + br label %each.step6705 +each.step6705: %t108 = load i64, ptr %a38 %t109 = add i64 %t108, 1 store i64 %t109, ptr %a38 - br label %each.cond6699 -each.end6702: + br label %each.cond6703 +each.end6706: %t110 = load ptr, ptr %a1 %t111 = load i64, ptr %a36 call void @finch.gen.heldEnd(ptr %t110, i64 %t111) @@ -67368,8 +67394,8 @@ each.end6702: %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t122 = load i64, ptr %t121 %t123 = icmp sgt i64 %t122, 0 - br i1 %t123, label %then6708, label %endif6710 -then6708: + br i1 %t123, label %then6712, label %endif6714 +then6712: %t124 = load ptr, ptr %a1 %t125 = load { ptr, i64, i64 }, ptr %a119 store { ptr, i64, i64 } { ptr @.str.4336, i64 8, i64 0 }, ptr %a127 @@ -67417,17 +67443,17 @@ then6708: store { ptr, i64, i64 } %t160, ptr %a161 call void @finch_str_drop(ptr %a161) call void @finch_str_drop(ptr %a146) - br label %endif6710 -endif6710: + br label %endif6714 +endif6714: %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t163 = load i64, ptr %t162 store i64 0, ptr %a164 - br label %for.cond6711 -for.cond6711: + br label %for.cond6715 +for.cond6715: %t165 = load i64, ptr %a164 %t166 = icmp slt i64 %t165, %t163 - br i1 %t166, label %for.body6712, label %for.end6714 -for.body6712: + br i1 %t166, label %for.body6716, label %for.end6718 +for.body6716: %t167 = load ptr, ptr %a1 %t168 = load ptr, ptr %a1 %t169 = load %S.ast.Type, ptr %a5 @@ -67480,11 +67506,11 @@ for.body6712: %t209 = load { ptr, i64, i64 }, ptr %a30 %t210 = extractvalue { ptr, i64, i64 } %t209, 1 %t211 = icmp uge i64 %t208, %t210 - br i1 %t211, label %range6715, label %inrange6716 -range6715: + br i1 %t211, label %range6719, label %inrange6720 +range6719: call void @finch_panic_index(ptr @.str.4343, i64 3694, i64 %t208, i64 %t210) unreachable -inrange6716: +inrange6720: %t212 = extractvalue { ptr, i64, i64 } %t209, 0 %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t208 %t214 = load { ptr, i64, i64 }, ptr %t213 @@ -67493,13 +67519,13 @@ inrange6716: store { ptr, i64, i64 } %t207, ptr %a216 call void @finch_str_drop(ptr %a216) call void @finch_str_drop(ptr %a203) - br label %for.step6713 -for.step6713: + br label %for.step6717 +for.step6717: %t217 = load i64, ptr %a164 %t218 = add i64 %t217, 1 store i64 %t218, ptr %a164 - br label %for.cond6711 -for.end6714: + br label %for.cond6715 +for.end6718: %t219 = load ptr, ptr %a1 %t220 = load { ptr, i64, i64 }, ptr %a120 store { ptr, i64, i64 } { ptr @.str.4344, i64 41, i64 0 }, ptr %a222 @@ -67637,22 +67663,22 @@ entry: store { ptr, i64, i64 } { ptr @.str.4352, i64 3, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br label %logic.from6717 -logic.from6717: - br i1 %t9, label %logic.rhs6718, label %logic.end6719 -logic.rhs6718: + br label %logic.from6721 +logic.from6721: + br i1 %t9, label %logic.rhs6722, label %logic.end6723 +logic.rhs6722: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) %t14 = icmp slt i64 %t13, 0 - br label %logic.rend6720 -logic.rend6720: - br label %logic.end6719 -logic.end6719: - %t15 = phi i1 [ false, %logic.from6717 ], [ %t14, %logic.rend6720 ] - br i1 %t15, label %then6721, label %endif6723 -then6721: + br label %logic.rend6724 +logic.rend6724: + br label %logic.end6723 +logic.end6723: + %t15 = phi i1 [ false, %logic.from6721 ], [ %t14, %logic.rend6724 ] + br i1 %t15, label %then6725, label %endif6727 +then6725: %t16 = load ptr, ptr %a1 %t17 = load %S.ast.Node, ptr %a2 %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -67670,8 +67696,8 @@ then6721: call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } %t28) store { ptr, i64, i64 } %t28, ptr %a29 call void @finch_str_drop(ptr %a29) - br label %endif6723 -endif6723: + br label %endif6727 +endif6727: %t30 = load ptr, ptr %a1 %t31 = load %S.ast.Node, ptr %a2 %t32 = load i1, ptr %a3 @@ -67680,13 +67706,13 @@ endif6723: %t35 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 0 %t36 = load i1, ptr %t35 %t37 = xor i1 %t36, true - br i1 %t37, label %then6724, label %endif6726 -then6724: + br i1 %t37, label %then6728, label %endif6730 +then6728: %t38 = load ptr, ptr %a1 %t39 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t38, %S.ast.Node %t39, { ptr, i64, i64 } { ptr @.str.4355, i64 60, i64 0 }) - br label %endif6726 -endif6726: + br label %endif6730 +endif6730: %t40 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 1 %t41 = load %S.gen.Place, ptr %t40 store %S.gen.Place %t41, ptr %a42 @@ -67838,8 +67864,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.4356, i64 3, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br i1 %t9, label %then6727, label %endif6729 -then6727: + br i1 %t9, label %then6731, label %endif6733 +then6731: %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t12 = load { ptr, i64, i64 }, ptr %t11 @@ -67847,17 +67873,17 @@ then6727: store i64 %t13, ptr %a14 %t15 = load i64, ptr %a14 %t16 = icmp slt i64 %t15, 0 - br label %logic.from6730 -logic.from6730: - br i1 %t16, label %logic.rhs6731, label %logic.end6732 -logic.rhs6731: + br label %logic.from6734 +logic.from6734: + br i1 %t16, label %logic.rhs6735, label %logic.end6736 +logic.rhs6735: %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null - br i1 %t18, label %panic6733, label %ok6734 -panic6733: + br i1 %t18, label %panic6737, label %ok6738 +panic6737: call void @finch_panic(ptr @.str.4357, i64 3718, ptr @.str.4358) unreachable -ok6734: +ok6738: %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 26 %t20 = getelementptr inbounds %S.cimport.CImports, ptr %t19, i32 0, i32 1 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -67865,20 +67891,20 @@ ok6734: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = call i64 @finch_map_find(ptr %t20, ptr %a23, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t25 = icmp sge i64 %t24, 0 - br label %logic.rend6735 -logic.rend6735: - br label %logic.end6732 -logic.end6732: - %t26 = phi i1 [ false, %logic.from6730 ], [ %t25, %logic.rend6735 ] - br i1 %t26, label %then6736, label %endif6738 -then6736: + br label %logic.rend6739 +logic.rend6739: + br label %logic.end6736 +logic.end6736: + %t26 = phi i1 [ false, %logic.from6734 ], [ %t25, %logic.rend6739 ] + br i1 %t26, label %then6740, label %endif6742 +then6740: %t27 = load ptr, ptr %a1 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic6739, label %ok6740 -panic6739: + br i1 %t28, label %panic6743, label %ok6744 +panic6743: call void @finch_panic(ptr @.str.4359, i64 3719, ptr @.str.4360) unreachable -ok6740: +ok6744: %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 26 %t30 = getelementptr inbounds %S.cimport.CImports, ptr %t29, i32 0, i32 1 %t31 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -67886,14 +67912,14 @@ ok6740: store { ptr, i64, i64 } %t32, ptr %a33 %t34 = call i64 @finch_map_find(ptr %t30, ptr %a33, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t35 = icmp slt i64 %t34, 0 - br i1 %t35, label %map.missing6741, label %map.found6742 -map.missing6741: + br i1 %t35, label %map.missing6745, label %map.found6746 +map.missing6745: store { ptr, i64, i64 } zeroinitializer, ptr %a36 store { ptr, i64, i64 } %t32, ptr %a37 call void @finch_buf_str(ptr %a36, ptr %a37, i32 1) call void @finch_map_missing(ptr @.str.4361, i64 3719, ptr %a36) unreachable -map.found6742: +map.found6746: %t38 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t30, i32 0, i32 0 %t39 = load ptr, ptr %t38 %t40 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t39, i64 %t34 @@ -67905,8 +67931,8 @@ map.found6742: store %S.cimport.CConst %t45, ptr %a46 %t47 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 0 %t48 = load i1, ptr %t47 - br i1 %t48, label %then6743, label %endif6745 -then6743: + br i1 %t48, label %then6747, label %endif6749 +then6747: %t49 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t50 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 3 %t51 = load { ptr, i64, i64 }, ptr %t50 @@ -67918,7 +67944,7 @@ then6743: %t57 = insertvalue %S.gen.Ref %t49, %S.gen.Val %t56, 2 call void @finch.drop.S_cimport_CConst(ptr %a46) ret %S.gen.Ref %t57 -endif6745: +endif6749: %t58 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t59 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 1 %t60 = load i64, ptr %t59 @@ -67931,20 +67957,20 @@ endif6745: %t67 = insertvalue %S.gen.Ref %t58, %S.gen.Val %t66, 2 call void @finch.drop.S_cimport_CConst(ptr %a46) ret %S.gen.Ref %t67 -endif6738: +endif6742: %t68 = load i64, ptr %a14 %t69 = icmp slt i64 %t68, 0 - br label %logic.from6746 -logic.from6746: - br i1 %t69, label %logic.rhs6747, label %logic.end6748 -logic.rhs6747: + br label %logic.from6750 +logic.from6750: + br i1 %t69, label %logic.rhs6751, label %logic.end6752 +logic.rhs6751: %t70 = load ptr, ptr %a1 %t71 = icmp eq ptr %t70, null - br i1 %t71, label %panic6749, label %ok6750 -panic6749: + br i1 %t71, label %panic6753, label %ok6754 +panic6753: call void @finch_panic(ptr @.str.4364, i64 3726, ptr @.str.4365) unreachable -ok6750: +ok6754: %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 26 %t73 = getelementptr inbounds %S.cimport.CImports, ptr %t72, i32 0, i32 2 %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -67953,79 +67979,79 @@ ok6750: %t77 = call i64 @finch_map_find(ptr %t73, ptr %a76, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t78 = icmp sge i64 %t77, 0 %t79 = xor i1 %t78, true - br label %logic.rend6751 -logic.rend6751: - br label %logic.end6748 -logic.end6748: - %t80 = phi i1 [ false, %logic.from6746 ], [ %t79, %logic.rend6751 ] - br label %logic.from6752 -logic.from6752: - br i1 %t80, label %logic.rhs6753, label %logic.end6754 -logic.rhs6753: + br label %logic.rend6755 +logic.rend6755: + br label %logic.end6752 +logic.end6752: + %t80 = phi i1 [ false, %logic.from6750 ], [ %t79, %logic.rend6755 ] + br label %logic.from6756 +logic.from6756: + br i1 %t80, label %logic.rhs6757, label %logic.end6758 +logic.rhs6757: %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic6755, label %ok6756 -panic6755: + br i1 %t82, label %panic6759, label %ok6760 +panic6759: call void @finch_panic(ptr @.str.4366, i64 3726, ptr @.str.4367) unreachable -ok6756: +ok6760: %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 26 %t84 = getelementptr inbounds %S.cimport.CImports, ptr %t83, i32 0, i32 0 store { ptr, i64, i64 } { ptr @.str.4368, i64 7, i64 0 }, ptr %a85 %t86 = call i64 @finch_map_find(ptr %t84, ptr %a85, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t87 = icmp sge i64 %t86, 0 - br label %logic.rend6757 -logic.rend6757: - br label %logic.end6754 -logic.end6754: - %t88 = phi i1 [ false, %logic.from6752 ], [ %t87, %logic.rend6757 ] - br label %logic.from6758 -logic.from6758: - br i1 %t88, label %logic.rhs6759, label %logic.end6760 -logic.rhs6759: + br label %logic.rend6761 +logic.rend6761: + br label %logic.end6758 +logic.end6758: + %t88 = phi i1 [ false, %logic.from6756 ], [ %t87, %logic.rend6761 ] + br label %logic.from6762 +logic.from6762: + br i1 %t88, label %logic.rhs6763, label %logic.end6764 +logic.rhs6763: %t89 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t90 = load { ptr, i64, i64 }, ptr %t89 store { ptr, i64, i64 } %t90, ptr %a91 store { ptr, i64, i64 } { ptr @.str.4369, i64 5, i64 0 }, ptr %a92 %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) %t94 = icmp ne i32 %t93, 0 - br label %logic.from6761 -logic.from6761: - br i1 %t94, label %logic.end6763, label %logic.rhs6762 -logic.rhs6762: + br label %logic.from6765 +logic.from6765: + br i1 %t94, label %logic.end6767, label %logic.rhs6766 +logic.rhs6766: %t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t96 = load { ptr, i64, i64 }, ptr %t95 store { ptr, i64, i64 } %t96, ptr %a97 store { ptr, i64, i64 } { ptr @.str.4370, i64 6, i64 0 }, ptr %a98 %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) %t100 = icmp ne i32 %t99, 0 - br label %logic.rend6764 -logic.rend6764: - br label %logic.end6763 -logic.end6763: - %t101 = phi i1 [ true, %logic.from6761 ], [ %t100, %logic.rend6764 ] - br label %logic.from6765 -logic.from6765: - br i1 %t101, label %logic.end6767, label %logic.rhs6766 -logic.rhs6766: + br label %logic.rend6768 +logic.rend6768: + br label %logic.end6767 +logic.end6767: + %t101 = phi i1 [ true, %logic.from6765 ], [ %t100, %logic.rend6768 ] + br label %logic.from6769 +logic.from6769: + br i1 %t101, label %logic.end6771, label %logic.rhs6770 +logic.rhs6770: %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 store { ptr, i64, i64 } { ptr @.str.4371, i64 6, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) %t107 = icmp ne i32 %t106, 0 - br label %logic.rend6768 -logic.rend6768: - br label %logic.end6767 -logic.end6767: - %t108 = phi i1 [ true, %logic.from6765 ], [ %t107, %logic.rend6768 ] - br label %logic.rend6769 -logic.rend6769: - br label %logic.end6760 -logic.end6760: - %t109 = phi i1 [ false, %logic.from6758 ], [ %t108, %logic.rend6769 ] - br i1 %t109, label %then6770, label %endif6772 -then6770: + br label %logic.rend6772 +logic.rend6772: + br label %logic.end6771 +logic.end6771: + %t108 = phi i1 [ true, %logic.from6769 ], [ %t107, %logic.rend6772 ] + br label %logic.rend6773 +logic.rend6773: + br label %logic.end6764 +logic.end6764: + %t109 = phi i1 [ false, %logic.from6762 ], [ %t108, %logic.rend6773 ] + br i1 %t109, label %then6774, label %endif6776 +then6774: store { ptr, i64, i64 } { ptr @.str.4372, i64 1, i64 0 }, ptr %a110 %t111 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t112 = load { ptr, i64, i64 }, ptr %t111 @@ -68033,30 +68059,30 @@ then6770: store { ptr, i64, i64 } { ptr @.str.4373, i64 5, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br i1 %t116, label %then6773, label %else6774 -then6773: + br i1 %t116, label %then6777, label %else6778 +then6777: %t117 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4374, i64 1, i64 0 }, ptr %a110 store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_drop(ptr %a118) - br label %endif6775 -else6774: + br label %endif6779 +else6778: %t119 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t120 = load { ptr, i64, i64 }, ptr %t119 store { ptr, i64, i64 } %t120, ptr %a121 store { ptr, i64, i64 } { ptr @.str.4375, i64 6, i64 0 }, ptr %a122 %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) %t124 = icmp ne i32 %t123, 0 - br i1 %t124, label %then6776, label %endif6778 -then6776: + br i1 %t124, label %then6780, label %endif6782 +then6780: %t125 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } { ptr @.str.4376, i64 1, i64 0 }, ptr %a110 store { ptr, i64, i64 } %t125, ptr %a126 call void @finch_str_drop(ptr %a126) - br label %endif6778 -endif6778: - br label %endif6775 -endif6775: + br label %endif6782 +endif6782: + br label %endif6779 +endif6779: %t127 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t128 = load ptr, ptr %a1 %t129 = load { ptr, i64, i64 }, ptr %a110 @@ -68079,20 +68105,20 @@ endif6775: %t144 = insertvalue %S.gen.Ref %t127, %S.gen.Val %t143, 2 call void @finch_str_drop(ptr %a110) ret %S.gen.Ref %t144 -endif6772: +endif6776: %t145 = load i64, ptr %a14 %t146 = icmp slt i64 %t145, 0 - br label %logic.from6779 -logic.from6779: - br i1 %t146, label %logic.rhs6780, label %logic.end6781 -logic.rhs6780: + br label %logic.from6783 +logic.from6783: + br i1 %t146, label %logic.rhs6784, label %logic.end6785 +logic.rhs6784: %t147 = load ptr, ptr %a1 %t148 = icmp eq ptr %t147, null - br i1 %t148, label %panic6782, label %ok6783 -panic6782: + br i1 %t148, label %panic6786, label %ok6787 +panic6786: call void @finch_panic(ptr @.str.4380, i64 3735, ptr @.str.4381) unreachable -ok6783: +ok6787: %t149 = getelementptr inbounds %S.gen.Gen, ptr %t147, i32 0, i32 26 %t150 = getelementptr inbounds %S.cimport.CImports, ptr %t149, i32 0, i32 2 %t151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68100,21 +68126,21 @@ ok6783: store { ptr, i64, i64 } %t152, ptr %a153 %t154 = call i64 @finch_map_find(ptr %t150, ptr %a153, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t155 = icmp sge i64 %t154, 0 - br label %logic.rend6784 -logic.rend6784: - br label %logic.end6781 -logic.end6781: - %t156 = phi i1 [ false, %logic.from6779 ], [ %t155, %logic.rend6784 ] - br i1 %t156, label %then6785, label %endif6787 -then6785: + br label %logic.rend6788 +logic.rend6788: + br label %logic.end6785 +logic.end6785: + %t156 = phi i1 [ false, %logic.from6783 ], [ %t155, %logic.rend6788 ] + br i1 %t156, label %then6789, label %endif6791 +then6789: %t157 = load ptr, ptr %a1 %t158 = load ptr, ptr %a1 %t159 = icmp eq ptr %t158, null - br i1 %t159, label %panic6788, label %ok6789 -panic6788: + br i1 %t159, label %panic6792, label %ok6793 +panic6792: call void @finch_panic(ptr @.str.4382, i64 3736, ptr @.str.4383) unreachable -ok6789: +ok6793: %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 26 %t161 = getelementptr inbounds %S.cimport.CImports, ptr %t160, i32 0, i32 2 %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68122,14 +68148,14 @@ ok6789: store { ptr, i64, i64 } %t163, ptr %a164 %t165 = call i64 @finch_map_find(ptr %t161, ptr %a164, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t166 = icmp slt i64 %t165, 0 - br i1 %t166, label %map.missing6790, label %map.found6791 -map.missing6790: + br i1 %t166, label %map.missing6794, label %map.found6795 +map.missing6794: store { ptr, i64, i64 } zeroinitializer, ptr %a167 store { ptr, i64, i64 } %t163, ptr %a168 call void @finch_buf_str(ptr %a167, ptr %a168, i32 1) call void @finch_map_missing(ptr @.str.4384, i64 3736, ptr %a167) unreachable -map.found6791: +map.found6795: %t169 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t161, i32 0, i32 0 %t170 = load ptr, ptr %t169 %t171 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t170, i64 %t165 @@ -68140,11 +68166,11 @@ map.found6791: store %S.ast.Type %t175, ptr %a176 %t177 = load ptr, ptr %a1 %t178 = icmp eq ptr %t177, null - br i1 %t178, label %panic6792, label %ok6793 -panic6792: + br i1 %t178, label %panic6796, label %ok6797 +panic6796: call void @finch_panic(ptr @.str.4385, i64 3737, ptr @.str.4386) unreachable -ok6793: +ok6797: %t179 = getelementptr inbounds %S.gen.Gen, ptr %t177, i32 0, i32 40 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t181 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68157,41 +68183,41 @@ ok6793: %t188 = load i64, ptr %t180 %t189 = load ptr, ptr %t179 store i64 0, ptr %a190 - br label %find.cond6794 -find.cond6794: + br label %find.cond6798 +find.cond6798: %t191 = load i64, ptr %a190 %t192 = icmp slt i64 %t191, %t188 - br i1 %t192, label %find.body6795, label %find.end6798 -find.body6795: + br i1 %t192, label %find.body6799, label %find.end6802 +find.body6799: %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t189, i64 %t191 %t194 = load { ptr, i64, i64 }, ptr %t193 store { ptr, i64, i64 } %t194, ptr %a195 store { ptr, i64, i64 } %t186, ptr %a196 %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) %t198 = icmp ne i32 %t197, 0 - br i1 %t198, label %find.hit6796, label %find.next6797 -find.hit6796: + br i1 %t198, label %find.hit6800, label %find.next6801 +find.hit6800: store i64 %t191, ptr %a187 - br label %find.end6798 -find.next6797: + br label %find.end6802 +find.next6801: %t199 = add i64 %t191, 1 store i64 %t199, ptr %a190 - br label %find.cond6794 -find.end6798: + br label %find.cond6798 +find.end6802: store { ptr, i64, i64 } %t186, ptr %a200 call void @finch_str_drop(ptr %a200) %t201 = load i64, ptr %a187 %t202 = icmp sge i64 %t201, 0 %t203 = xor i1 %t202, true - br i1 %t203, label %then6799, label %endif6801 -then6799: + br i1 %t203, label %then6803, label %endif6805 +then6803: %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null - br i1 %t205, label %panic6802, label %ok6803 -panic6802: + br i1 %t205, label %panic6806, label %ok6807 +panic6806: call void @finch_panic(ptr @.str.4388, i64 3738, ptr @.str.4389) unreachable -ok6803: +ok6807: %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 40 %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 %t208 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68209,11 +68235,11 @@ ok6803: store i64 %t215, ptr %t207 %t218 = load ptr, ptr %a1 %t219 = icmp eq ptr %t218, null - br i1 %t219, label %panic6804, label %ok6805 -panic6804: + br i1 %t219, label %panic6808, label %ok6809 +panic6808: call void @finch_panic(ptr @.str.4391, i64 3739, ptr @.str.4392) unreachable -ok6805: +ok6809: %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 2 %t221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t220, i32 0, i32 1 %t222 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68246,8 +68272,8 @@ ok6805: %t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i64 %t242 store { ptr, i64, i64 } %t241, ptr %t245 store i64 %t243, ptr %t221 - br label %endif6801 -endif6801: + br label %endif6805 +endif6805: %t246 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t247 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t248 = load { ptr, i64, i64 }, ptr %t247 @@ -68264,17 +68290,17 @@ endif6801: %t259 = insertvalue %S.gen.Ref %t246, %S.gen.Place %t258, 1 call void @finch.drop.S_ast_Type(ptr %a176) ret %S.gen.Ref %t259 -endif6787: +endif6791: %t260 = load i64, ptr %a14 %t261 = icmp slt i64 %t260, 0 - br i1 %t261, label %then6806, label %endif6808 -then6806: + br i1 %t261, label %then6810, label %endif6812 +then6810: %t262 = load ptr, ptr %a1 %t263 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = call i1 @finch.gen.imports(ptr %t262, { ptr, i64, i64 } %t264) - br i1 %t265, label %then6809, label %endif6811 -then6809: + br i1 %t265, label %then6813, label %endif6815 +then6813: %t266 = load ptr, ptr %a1 %t267 = load %S.ast.Node, ptr %a2 %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68306,8 +68332,8 @@ then6809: call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t290) store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_drop(ptr %a291) - br label %endif6811 -endif6811: + br label %endif6815 +endif6815: %t292 = load ptr, ptr %a1 %t293 = load %S.ast.Node, ptr %a2 %t294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -68325,8 +68351,8 @@ endif6811: call void @finch.gen.fail(ptr %t292, %S.ast.Node %t293, { ptr, i64, i64 } %t304) store { ptr, i64, i64 } %t304, ptr %a305 call void @finch_str_drop(ptr %a305) - br label %endif6808 -endif6808: + br label %endif6812 +endif6812: %t306 = load ptr, ptr %a1 %t307 = load i64, ptr %a14 %t308 = call %S.gen.Var @finch.gen.varAt(ptr %t306, i64 %t307) @@ -68392,35 +68418,35 @@ endif6808: %t362 = insertvalue %S.gen.Ref %t349, %S.gen.Place %t361, 1 call void @finch.drop.S_gen_Var(ptr %a309) ret %S.gen.Ref %t362 -endif6729: +endif6733: %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t364 = load { ptr, i64, i64 }, ptr %t363 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.4404, i64 6, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 - br i1 %t368, label %then6812, label %endif6814 -then6812: + br i1 %t368, label %then6816, label %endif6818 +then6816: %t369 = load ptr, ptr %a1 %t370 = load %S.ast.Node, ptr %a2 %t371 = load i1, ptr %a3 %t372 = call %S.gen.Ref @finch.gen.member(ptr %t369, %S.ast.Node %t370, i1 %t371) ret %S.gen.Ref %t372 -endif6814: +endif6818: %t373 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t374 = load { ptr, i64, i64 }, ptr %t373 store { ptr, i64, i64 } %t374, ptr %a375 store { ptr, i64, i64 } { ptr @.str.4405, i64 5, i64 0 }, ptr %a376 %t377 = call i32 @finch_str_eq(ptr %a375, ptr %a376) %t378 = icmp ne i32 %t377, 0 - br i1 %t378, label %then6815, label %endif6817 -then6815: + br i1 %t378, label %then6819, label %endif6821 +then6819: %t379 = load ptr, ptr %a1 %t380 = load %S.ast.Node, ptr %a2 %t381 = load i1, ptr %a3 %t382 = call %S.gen.Ref @finch.gen.index(ptr %t379, %S.ast.Node %t380, i1 %t381) ret %S.gen.Ref %t382 -endif6817: +endif6821: %t383 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t384 = load ptr, ptr %a1 %t385 = load %S.ast.Node, ptr %a2 @@ -68479,8 +68505,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.4407, i64 1, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br i1 %t12, label %then6818, label %endif6820 -then6818: + br i1 %t12, label %then6822, label %endif6824 +then6822: %t13 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4408, i64 1, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 @@ -68490,16 +68516,16 @@ then6818: store { ptr, i64, i64 } %t17, ptr %a6 store { ptr, i64, i64 } %t18, ptr %a19 call void @finch_str_drop(ptr %a19) - br label %endif6820 -endif6820: + br label %endif6824 +endif6824: %t20 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t20, ptr %a21 store { ptr, i64, i64 } { ptr @.str.4410, i64 1, i64 0 }, ptr %a23 %t24 = call i64 @finch_str_find(ptr %a21, ptr %a23) %t25 = icmp sge i64 %t24, 0 %t26 = xor i1 %t25, true - br i1 %t26, label %then6821, label %endif6823 -then6821: + br i1 %t26, label %then6825, label %endif6827 +then6825: %t27 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.4412, i64 1, i64 0 }, ptr %a30 @@ -68507,19 +68533,19 @@ then6821: store i64 %t31, ptr %a32 %t33 = load i64, ptr %a32 %t34 = icmp slt i64 %t33, 0 - br i1 %t34, label %then6824, label %endif6826 -then6824: + br i1 %t34, label %then6828, label %endif6830 +then6828: %t35 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.4414, i64 1, i64 0 }, ptr %a38 %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) store i64 %t39, ptr %a32 - br label %endif6826 -endif6826: + br label %endif6830 +endif6830: %t40 = load i64, ptr %a32 %t41 = icmp slt i64 %t40, 0 - br i1 %t41, label %then6827, label %endif6829 -then6827: + br i1 %t41, label %then6831, label %endif6833 +then6831: %t42 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t42, ptr %a44 store { ptr, i64, i64 } { ptr @.str.4415, i64 2, i64 0 }, ptr %a45 @@ -68527,7 +68553,7 @@ then6827: %t46 = load { ptr, i64, i64 }, ptr %a43 call void @finch_str_drop(ptr %a6) ret { ptr, i64, i64 } %t46 -endif6829: +endif6833: %t47 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t47, ptr %a48 %t50 = load i64, ptr %a32 @@ -68556,7 +68582,7 @@ endif6829: %t69 = load { ptr, i64, i64 }, ptr %a64 call void @finch_str_drop(ptr %a6) ret { ptr, i64, i64 } %t69 -endif6823: +endif6827: %t70 = load { ptr, i64, i64 }, ptr %a6 ret { ptr, i64, i64 } %t70 } @@ -68579,56 +68605,56 @@ entry: store { ptr, i64, i64 } { ptr @.str.4419, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br label %logic.from6830 -logic.from6830: - br i1 %t8, label %logic.rhs6831, label %logic.end6832 -logic.rhs6831: + br label %logic.from6834 +logic.from6834: + br i1 %t8, label %logic.rhs6835, label %logic.end6836 +logic.rhs6835: %t9 = load ptr, ptr %a1 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) %t13 = icmp slt i64 %t12, 0 - br label %logic.rend6833 -logic.rend6833: - br label %logic.end6832 -logic.end6832: - %t14 = phi i1 [ false, %logic.from6830 ], [ %t13, %logic.rend6833 ] - br i1 %t14, label %then6834, label %endif6836 -then6834: + br label %logic.rend6837 +logic.rend6837: + br label %logic.end6836 +logic.end6836: + %t14 = phi i1 [ false, %logic.from6834 ], [ %t13, %logic.rend6837 ] + br i1 %t14, label %then6838, label %endif6840 +then6838: %t15 = load ptr, ptr %a1 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic6837, label %ok6838 -panic6837: + br i1 %t17, label %panic6841, label %ok6842 +panic6841: call void @finch_panic(ptr @.str.4420, i64 3784, ptr @.str.4421) unreachable -ok6838: +ok6842: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = call i64 @finch.gen.findEnum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) ret i64 %t22 -endif6836: +endif6840: %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4422, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br label %logic.from6839 -logic.from6839: - br i1 %t28, label %logic.rhs6840, label %logic.end6841 -logic.rhs6840: + br label %logic.from6843 +logic.from6843: + br i1 %t28, label %logic.rhs6844, label %logic.end6845 +logic.rhs6844: %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 - br i1 %t32, label %range6842, label %inrange6843 -range6842: + br i1 %t32, label %range6846, label %inrange6847 +range6846: call void @finch_panic_index(ptr @.str.4423, i64 3786, i64 0, i64 %t31) unreachable -inrange6843: +inrange6847: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 @@ -68637,72 +68663,72 @@ inrange6843: store { ptr, i64, i64 } { ptr @.str.4424, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br label %logic.rend6844 -logic.rend6844: - br label %logic.end6841 -logic.end6841: - %t41 = phi i1 [ false, %logic.from6839 ], [ %t40, %logic.rend6844 ] - br label %logic.from6845 -logic.from6845: - br i1 %t41, label %logic.rhs6846, label %logic.end6847 -logic.rhs6846: + br label %logic.rend6848 +logic.rend6848: + br label %logic.end6845 +logic.end6845: + %t41 = phi i1 [ false, %logic.from6843 ], [ %t40, %logic.rend6848 ] + br label %logic.from6849 +logic.from6849: + br i1 %t41, label %logic.rhs6850, label %logic.end6851 +logic.rhs6850: %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 - br i1 %t46, label %range6848, label %inrange6849 -range6848: + br i1 %t46, label %range6852, label %inrange6853 +range6852: call void @finch_panic_index(ptr @.str.4425, i64 3786, i64 0, i64 %t45) unreachable -inrange6849: +inrange6853: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) %t52 = icmp slt i64 %t51, 0 - br label %logic.rend6850 -logic.rend6850: - br label %logic.end6847 -logic.end6847: - %t53 = phi i1 [ false, %logic.from6845 ], [ %t52, %logic.rend6850 ] - br label %logic.from6851 -logic.from6851: - br i1 %t53, label %logic.rhs6852, label %logic.end6853 -logic.rhs6852: + br label %logic.rend6854 +logic.rend6854: + br label %logic.end6851 +logic.end6851: + %t53 = phi i1 [ false, %logic.from6849 ], [ %t52, %logic.rend6854 ] + br label %logic.from6855 +logic.from6855: + br i1 %t53, label %logic.rhs6856, label %logic.end6857 +logic.rhs6856: %t54 = load ptr, ptr %a1 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 - br i1 %t58, label %range6854, label %inrange6855 -range6854: + br i1 %t58, label %range6858, label %inrange6859 +range6858: call void @finch_panic_index(ptr @.str.4426, i64 3786, i64 0, i64 %t57) unreachable -inrange6855: +inrange6859: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) - br label %logic.rend6856 -logic.rend6856: - br label %logic.end6853 -logic.end6853: - %t64 = phi i1 [ false, %logic.from6851 ], [ %t63, %logic.rend6856 ] - br i1 %t64, label %then6857, label %endif6859 -then6857: + br label %logic.rend6860 +logic.rend6860: + br label %logic.end6857 +logic.end6857: + %t64 = phi i1 [ false, %logic.from6855 ], [ %t63, %logic.rend6860 ] + br i1 %t64, label %then6861, label %endif6863 +then6861: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 - br i1 %t69, label %range6860, label %inrange6861 -range6860: + br i1 %t69, label %range6864, label %inrange6865 +range6864: call void @finch_panic_index(ptr @.str.4427, i64 3787, i64 0, i64 %t68) unreachable -inrange6861: +inrange6865: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 @@ -68711,7 +68737,7 @@ inrange6861: %t75 = load { ptr, i64, i64 }, ptr %t74 %t76 = call i64 @finch.gen.findEnum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) ret i64 %t76 -endif6859: +endif6863: ret i64 -1 } @@ -68733,56 +68759,56 @@ entry: store { ptr, i64, i64 } { ptr @.str.4428, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br label %logic.from6862 -logic.from6862: - br i1 %t8, label %logic.rhs6863, label %logic.end6864 -logic.rhs6863: + br label %logic.from6866 +logic.from6866: + br i1 %t8, label %logic.rhs6867, label %logic.end6868 +logic.rhs6867: %t9 = load ptr, ptr %a1 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) %t13 = icmp slt i64 %t12, 0 - br label %logic.rend6865 -logic.rend6865: - br label %logic.end6864 -logic.end6864: - %t14 = phi i1 [ false, %logic.from6862 ], [ %t13, %logic.rend6865 ] - br i1 %t14, label %then6866, label %endif6868 -then6866: + br label %logic.rend6869 +logic.rend6869: + br label %logic.end6868 +logic.end6868: + %t14 = phi i1 [ false, %logic.from6866 ], [ %t13, %logic.rend6869 ] + br i1 %t14, label %then6870, label %endif6872 +then6870: %t15 = load ptr, ptr %a1 %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic6869, label %ok6870 -panic6869: + br i1 %t17, label %panic6873, label %ok6874 +panic6873: call void @finch_panic(ptr @.str.4429, i64 3795, ptr @.str.4430) unreachable -ok6870: +ok6874: %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 %t19 = load { ptr, i64, i64 }, ptr %t18 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t21 = load { ptr, i64, i64 }, ptr %t20 %t22 = call i64 @finch.gen.findSum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) ret i64 %t22 -endif6868: +endif6872: %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t24 = load { ptr, i64, i64 }, ptr %t23 store { ptr, i64, i64 } %t24, ptr %a25 store { ptr, i64, i64 } { ptr @.str.4431, i64 6, i64 0 }, ptr %a26 %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) %t28 = icmp ne i32 %t27, 0 - br label %logic.from6871 -logic.from6871: - br i1 %t28, label %logic.rhs6872, label %logic.end6873 -logic.rhs6872: + br label %logic.from6875 +logic.from6875: + br i1 %t28, label %logic.rhs6876, label %logic.end6877 +logic.rhs6876: %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t30 = load { ptr, i64, i64 }, ptr %t29 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 0, %t31 - br i1 %t32, label %range6874, label %inrange6875 -range6874: + br i1 %t32, label %range6878, label %inrange6879 +range6878: call void @finch_panic_index(ptr @.str.4432, i64 3797, i64 0, i64 %t31) unreachable -inrange6875: +inrange6879: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 @@ -68791,72 +68817,72 @@ inrange6875: store { ptr, i64, i64 } { ptr @.str.4433, i64 3, i64 0 }, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br label %logic.rend6876 -logic.rend6876: - br label %logic.end6873 -logic.end6873: - %t41 = phi i1 [ false, %logic.from6871 ], [ %t40, %logic.rend6876 ] - br label %logic.from6877 -logic.from6877: - br i1 %t41, label %logic.rhs6878, label %logic.end6879 -logic.rhs6878: + br label %logic.rend6880 +logic.rend6880: + br label %logic.end6877 +logic.end6877: + %t41 = phi i1 [ false, %logic.from6875 ], [ %t40, %logic.rend6880 ] + br label %logic.from6881 +logic.from6881: + br i1 %t41, label %logic.rhs6882, label %logic.end6883 +logic.rhs6882: %t42 = load ptr, ptr %a1 %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t44 = load { ptr, i64, i64 }, ptr %t43 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 0, %t45 - br i1 %t46, label %range6880, label %inrange6881 -range6880: + br i1 %t46, label %range6884, label %inrange6885 +range6884: call void @finch_panic_index(ptr @.str.4434, i64 3797, i64 0, i64 %t45) unreachable -inrange6881: +inrange6885: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) %t52 = icmp slt i64 %t51, 0 - br label %logic.rend6882 -logic.rend6882: - br label %logic.end6879 -logic.end6879: - %t53 = phi i1 [ false, %logic.from6877 ], [ %t52, %logic.rend6882 ] - br label %logic.from6883 -logic.from6883: - br i1 %t53, label %logic.rhs6884, label %logic.end6885 -logic.rhs6884: + br label %logic.rend6886 +logic.rend6886: + br label %logic.end6883 +logic.end6883: + %t53 = phi i1 [ false, %logic.from6881 ], [ %t52, %logic.rend6886 ] + br label %logic.from6887 +logic.from6887: + br i1 %t53, label %logic.rhs6888, label %logic.end6889 +logic.rhs6888: %t54 = load ptr, ptr %a1 %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t56 = load { ptr, i64, i64 }, ptr %t55 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 - br i1 %t58, label %range6886, label %inrange6887 -range6886: + br i1 %t58, label %range6890, label %inrange6891 +range6890: call void @finch_panic_index(ptr @.str.4435, i64 3797, i64 0, i64 %t57) unreachable -inrange6887: +inrange6891: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) - br label %logic.rend6888 -logic.rend6888: - br label %logic.end6885 -logic.end6885: - %t64 = phi i1 [ false, %logic.from6883 ], [ %t63, %logic.rend6888 ] - br i1 %t64, label %then6889, label %endif6891 -then6889: + br label %logic.rend6892 +logic.rend6892: + br label %logic.end6889 +logic.end6889: + %t64 = phi i1 [ false, %logic.from6887 ], [ %t63, %logic.rend6892 ] + br i1 %t64, label %then6893, label %endif6895 +then6893: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 - br i1 %t69, label %range6892, label %inrange6893 -range6892: + br i1 %t69, label %range6896, label %inrange6897 +range6896: call void @finch_panic_index(ptr @.str.4436, i64 3798, i64 0, i64 %t68) unreachable -inrange6893: +inrange6897: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 @@ -68865,7 +68891,7 @@ inrange6893: %t75 = load { ptr, i64, i64 }, ptr %t74 %t76 = call i64 @finch.gen.findSum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) ret i64 %t76 -endif6891: +endif6895: ret i64 -1 } @@ -68916,21 +68942,21 @@ entry: store %S.ast.Node %p3, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic6894, label %ok6895 -panic6894: + br i1 %t6, label %panic6898, label %ok6899 +panic6898: call void @finch_panic(ptr @.str.4437, i64 3804, ptr @.str.4438) unreachable -ok6895: +ok6899: %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 22 %t8 = load i64, ptr %a2 %t9 = load { ptr, i64, i64 }, ptr %t7 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range6896, label %inrange6897 -range6896: + br i1 %t11, label %range6900, label %inrange6901 +range6900: call void @finch_panic_index(ptr @.str.4439, i64 3804, i64 %t8, i64 %t10) unreachable -inrange6897: +inrange6901: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds %S.gen.SumDef, ptr %t12, i64 %t8 %t14 = load %S.gen.SumDef, ptr %t13 @@ -68945,33 +68971,33 @@ inrange6897: %t23 = load i64, ptr %t20 %t24 = load ptr, ptr %t19 store i64 0, ptr %a25 - br label %find.cond6898 -find.cond6898: + br label %find.cond6902 +find.cond6902: %t26 = load i64, ptr %a25 %t27 = icmp slt i64 %t26, %t23 - br i1 %t27, label %find.body6899, label %find.end6902 -find.body6899: + br i1 %t27, label %find.body6903, label %find.end6906 +find.body6903: %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } %t21, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br i1 %t33, label %find.hit6900, label %find.next6901 -find.hit6900: + br i1 %t33, label %find.hit6904, label %find.next6905 +find.hit6904: store i64 %t26, ptr %a22 - br label %find.end6902 -find.next6901: + br label %find.end6906 +find.next6905: %t34 = add i64 %t26, 1 store i64 %t34, ptr %a25 - br label %find.cond6898 -find.end6902: + br label %find.cond6902 +find.end6906: %t35 = load i64, ptr %a22 store i64 %t35, ptr %a36 %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, 0 - br i1 %t38, label %then6903, label %endif6905 -then6903: + br i1 %t38, label %then6907, label %endif6909 +then6907: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a4 %t41 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 1 @@ -69021,8 +69047,8 @@ then6903: call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t78) store { ptr, i64, i64 } %t78, ptr %a79 call void @finch_str_drop(ptr %a79) - br label %endif6905 -endif6905: + br label %endif6909 +endif6909: %t80 = load i64, ptr %a36 call void @finch.drop.S_gen_SumDef(ptr %a18) ret i64 %t80 @@ -69133,21 +69159,21 @@ entry: store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic6906, label %ok6907 -panic6906: + br i1 %t7, label %panic6910, label %ok6911 +panic6910: call void @finch_panic(ptr @.str.4445, i64 3814, ptr @.str.4446) unreachable -ok6907: +ok6911: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 22 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range6908, label %inrange6909 -range6908: + br i1 %t12, label %range6912, label %inrange6913 +range6912: call void @finch_panic_index(ptr @.str.4447, i64 3814, i64 %t9, i64 %t11) unreachable -inrange6909: +inrange6913: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.SumDef, ptr %t13, i64 %t9 %t15 = load %S.gen.SumDef, ptr %t14 @@ -69168,33 +69194,33 @@ inrange6909: %t30 = load { ptr, i64, i64 }, ptr %t28 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 %t29, %t31 - br i1 %t32, label %range6910, label %inrange6911 -range6910: + br i1 %t32, label %range6914, label %inrange6915 +range6914: call void @finch_panic_index(ptr @.str.4448, i64 3816, i64 %t29, i64 %t31) unreachable -inrange6911: +inrange6915: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds i64, ptr %t33, i64 %t29 %t35 = load i64, ptr %t34 %t36 = icmp ne i64 %t27, %t35 - br i1 %t36, label %then6912, label %endif6914 -then6912: + br i1 %t36, label %then6916, label %endif6918 +then6916: %t37 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 %t38 = load i64, ptr %a25 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range6915, label %inrange6916 -range6915: + br i1 %t41, label %range6919, label %inrange6920 +range6919: call void @finch_panic_index(ptr @.str.4449, i64 3817, i64 %t38, i64 %t40) unreachable -inrange6916: +inrange6920: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i64, ptr %t42, i64 %t38 %t44 = load i64, ptr %t43 %t45 = icmp eq i64 %t44, 0 - br i1 %t45, label %then6917, label %endif6919 -then6917: + br i1 %t45, label %then6921, label %endif6923 +then6921: %t46 = load ptr, ptr %a1 %t47 = load %S.ast.Node, ptr %a5 %t48 = load { ptr, i64, i64 }, ptr %a3 @@ -69226,8 +69252,8 @@ then6917: call void @finch.gen.fail(ptr %t46, %S.ast.Node %t47, { ptr, i64, i64 } %t70) store { ptr, i64, i64 } %t70, ptr %a71 call void @finch_str_drop(ptr %a71) - br label %endif6919 -endif6919: + br label %endif6923 +endif6923: %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Node, ptr %a5 %t74 = load { ptr, i64, i64 }, ptr %a3 @@ -69240,11 +69266,11 @@ endif6919: %t81 = load { ptr, i64, i64 }, ptr %t79 %t82 = extractvalue { ptr, i64, i64 } %t81, 1 %t83 = icmp uge i64 %t80, %t82 - br i1 %t83, label %range6920, label %inrange6921 -range6920: + br i1 %t83, label %range6924, label %inrange6925 +range6924: call void @finch_panic_index(ptr @.str.4453, i64 3820, i64 %t80, i64 %t82) unreachable -inrange6921: +inrange6925: %t84 = extractvalue { ptr, i64, i64 } %t81, 0 %t85 = getelementptr inbounds i64, ptr %t84, i64 %t80 %t86 = load i64, ptr %t85 @@ -69312,8 +69338,8 @@ inrange6921: call void @finch.gen.fail(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t137) store { ptr, i64, i64 } %t137, ptr %a138 call void @finch_str_drop(ptr %a138) - br label %endif6914 -endif6914: + br label %endif6918 +endif6918: store { ptr, i64, i64 } zeroinitializer, ptr %a139 store { ptr, i64, i64 } zeroinitializer, ptr %a140 %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 @@ -69349,22 +69375,22 @@ endif6914: %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t166 = load i64, ptr %t165 store i64 0, ptr %a167 - br label %for.cond6922 -for.cond6922: + br label %for.cond6926 +for.cond6926: %t168 = load i64, ptr %a167 %t169 = icmp slt i64 %t168, %t166 - br i1 %t169, label %for.body6923, label %for.end6925 -for.body6923: + br i1 %t169, label %for.body6927, label %for.end6929 +for.body6927: %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 %t171 = load i64, ptr %a167 %t172 = load { ptr, i64, i64 }, ptr %a4 %t173 = extractvalue { ptr, i64, i64 } %t172, 1 %t174 = icmp uge i64 %t171, %t173 - br i1 %t174, label %range6926, label %inrange6927 -range6926: + br i1 %t174, label %range6930, label %inrange6931 +range6930: call void @finch_panic_index(ptr @.str.4460, i64 3827, i64 %t171, i64 %t173) unreachable -inrange6927: +inrange6931: %t175 = extractvalue { ptr, i64, i64 } %t172, 0 %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t171 %t177 = load %S.ast.Node, ptr %t176 @@ -69402,13 +69428,13 @@ inrange6927: %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 %t200 store { ptr, i64, i64 } %t199, ptr %t203 store i64 %t201, ptr %t185 - br label %for.step6924 -for.step6924: + br label %for.step6928 +for.step6928: %t204 = load i64, ptr %a167 %t205 = add i64 %t204, 1 store i64 %t205, ptr %a167 - br label %for.cond6922 -for.end6925: + br label %for.cond6926 +for.end6929: %t206 = load ptr, ptr %a1 %t207 = load %S.ast.Node, ptr %a5 %t208 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 @@ -69557,21 +69583,21 @@ entry: store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic6928, label %ok6929 -panic6928: + br i1 %t5, label %panic6932, label %ok6933 +panic6932: call void @finch_panic(ptr @.str.4466, i64 3836, ptr @.str.4467) unreachable -ok6929: +ok6933: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range6930, label %inrange6931 -range6930: + br i1 %t10, label %range6934, label %inrange6935 +range6934: call void @finch_panic_index(ptr @.str.4468, i64 3836, i64 %t7, i64 %t9) unreachable -inrange6931: +inrange6935: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.SumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.SumDef, ptr %t12 @@ -69587,22 +69613,22 @@ inrange6931: store { ptr, i64, i64 } { ptr @.str.4470, i64 3, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) %t25 = icmp ne i32 %t24, 0 - br label %logic.from6932 -logic.from6932: - br i1 %t25, label %logic.rhs6933, label %logic.end6934 -logic.rhs6933: + br label %logic.from6936 +logic.from6936: + br i1 %t25, label %logic.rhs6937, label %logic.end6938 +logic.rhs6937: %t26 = load ptr, ptr %a1 %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t28 = load { ptr, i64, i64 }, ptr %t27 %t29 = call i64 @finch.gen.lookup(ptr %t26, { ptr, i64, i64 } %t28) %t30 = icmp slt i64 %t29, 0 - br label %logic.rend6935 -logic.rend6935: - br label %logic.end6934 -logic.end6934: - %t31 = phi i1 [ false, %logic.from6932 ], [ %t30, %logic.rend6935 ] - br i1 %t31, label %then6936, label %else6937 -then6936: + br label %logic.rend6939 +logic.rend6939: + br label %logic.end6938 +logic.end6938: + %t31 = phi i1 [ false, %logic.from6936 ], [ %t30, %logic.rend6939 ] + br i1 %t31, label %then6940, label %else6941 +then6940: %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 @@ -69612,16 +69638,16 @@ then6936: store { ptr, i64, i64 } %t36, ptr %a18 store { ptr, i64, i64 } %t37, ptr %a38 call void @finch_str_drop(ptr %a38) - br label %endif6938 -else6937: + br label %endif6942 +else6941: %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } { ptr @.str.4471, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %then6939, label %else6940 -then6939: + br i1 %t44, label %then6943, label %else6944 +then6943: %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t46 = load { ptr, i64, i64 }, ptr %t45 store { ptr, i64, i64 } %t46, ptr %a47 @@ -69640,41 +69666,41 @@ then6939: store { ptr, i64, i64 } %t56, ptr %a19 store { ptr, i64, i64 } %t57, ptr %a58 call void @finch.drop.arr_S_ast_Node(ptr %a58) - br label %endif6941 -else6940: + br label %endif6945 +else6944: %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } %t60, ptr %a61 store { ptr, i64, i64 } { ptr @.str.4472, i64 6, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 - br label %logic.from6942 -logic.from6942: - br i1 %t64, label %logic.rhs6943, label %logic.end6944 -logic.rhs6943: + br label %logic.from6946 +logic.from6946: + br i1 %t64, label %logic.rhs6947, label %logic.end6948 +logic.rhs6947: %t65 = load ptr, ptr %a1 %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t67 = load { ptr, i64, i64 }, ptr %t66 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 0, %t68 - br i1 %t69, label %range6945, label %inrange6946 -range6945: + br i1 %t69, label %range6949, label %inrange6950 +range6949: call void @finch_panic_index(ptr @.str.4473, i64 3844, i64 0, i64 %t68) unreachable -inrange6946: +inrange6950: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 %t72 = load %S.ast.Node, ptr %t71 %t73 = call i64 @finch.gen.sumNamed(ptr %t65, %S.ast.Node %t72) %t74 = load i64, ptr %a3 %t75 = icmp eq i64 %t73, %t74 - br label %logic.rend6947 -logic.rend6947: - br label %logic.end6944 -logic.end6944: - %t76 = phi i1 [ false, %logic.from6942 ], [ %t75, %logic.rend6947 ] - br i1 %t76, label %then6948, label %else6949 -then6948: + br label %logic.rend6951 +logic.rend6951: + br label %logic.end6948 +logic.end6948: + %t76 = phi i1 [ false, %logic.from6946 ], [ %t75, %logic.rend6951 ] + br i1 %t76, label %then6952, label %else6953 +then6952: %t77 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t78 = load { ptr, i64, i64 }, ptr %t77 store { ptr, i64, i64 } %t78, ptr %a79 @@ -69684,41 +69710,41 @@ then6948: store { ptr, i64, i64 } %t81, ptr %a18 store { ptr, i64, i64 } %t82, ptr %a83 call void @finch_str_drop(ptr %a83) - br label %endif6950 -else6949: + br label %endif6954 +else6953: %t84 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 %t85 = load { ptr, i64, i64 }, ptr %t84 store { ptr, i64, i64 } %t85, ptr %a86 store { ptr, i64, i64 } { ptr @.str.4474, i64 6, i64 0 }, ptr %a87 %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) %t89 = icmp ne i32 %t88, 0 - br label %logic.from6951 -logic.from6951: - br i1 %t89, label %logic.rhs6952, label %logic.end6953 -logic.rhs6952: + br label %logic.from6955 +logic.from6955: + br i1 %t89, label %logic.rhs6956, label %logic.end6957 +logic.rhs6956: %t90 = load ptr, ptr %a1 %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t92 = load { ptr, i64, i64 }, ptr %t91 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 0, %t93 - br i1 %t94, label %range6954, label %inrange6955 -range6954: + br i1 %t94, label %range6958, label %inrange6959 +range6958: call void @finch_panic_index(ptr @.str.4475, i64 3846, i64 0, i64 %t93) unreachable -inrange6955: +inrange6959: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 0 %t97 = load %S.ast.Node, ptr %t96 %t98 = call i64 @finch.gen.sumNamed(ptr %t90, %S.ast.Node %t97) %t99 = load i64, ptr %a3 %t100 = icmp eq i64 %t98, %t99 - br label %logic.rend6956 -logic.rend6956: - br label %logic.end6953 -logic.end6953: - %t101 = phi i1 [ false, %logic.from6951 ], [ %t100, %logic.rend6956 ] - br i1 %t101, label %then6957, label %else6958 -then6957: + br label %logic.rend6960 +logic.rend6960: + br label %logic.end6957 +logic.end6957: + %t101 = phi i1 [ false, %logic.from6955 ], [ %t100, %logic.rend6960 ] + br i1 %t101, label %then6961, label %else6962 +then6961: %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t103 = load { ptr, i64, i64 }, ptr %t102 store { ptr, i64, i64 } %t103, ptr %a104 @@ -69732,23 +69758,23 @@ then6957: %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t109, i32 0, i32 1 %t111 = load i64, ptr %t110 store i64 1, ptr %a112 - br label %for.cond6960 -for.cond6960: + br label %for.cond6964 +for.cond6964: %t113 = load i64, ptr %a112 %t114 = icmp slt i64 %t113, %t111 - br i1 %t114, label %for.body6961, label %for.end6963 -for.body6961: + br i1 %t114, label %for.body6965, label %for.end6967 +for.body6965: %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t117 = load i64, ptr %a112 %t118 = load { ptr, i64, i64 }, ptr %t116 %t119 = extractvalue { ptr, i64, i64 } %t118, 1 %t120 = icmp uge i64 %t117, %t119 - br i1 %t120, label %range6964, label %inrange6965 -range6964: + br i1 %t120, label %range6968, label %inrange6969 +range6968: call void @finch_panic_index(ptr @.str.4476, i64 3849, i64 %t117, i64 %t119) unreachable -inrange6965: +inrange6969: %t121 = extractvalue { ptr, i64, i64 } %t118, 0 %t122 = getelementptr inbounds %S.ast.Node, ptr %t121, i64 %t117 %t123 = load %S.ast.Node, ptr %t122 @@ -69762,15 +69788,15 @@ inrange6965: %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 %t127 store %S.ast.Node %t126, ptr %t130 store i64 %t128, ptr %t115 - br label %for.step6962 -for.step6962: + br label %for.step6966 +for.step6966: %t131 = load i64, ptr %a112 %t132 = add i64 %t131, 1 store i64 %t132, ptr %a112 - br label %for.cond6960 -for.end6963: - br label %endif6959 -else6958: + br label %for.cond6964 +for.end6967: + br label %endif6963 +else6962: %t133 = load ptr, ptr %a1 %t134 = load %S.ast.Node, ptr %a2 %t135 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 1 @@ -69807,14 +69833,14 @@ else6958: call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } %t161) store { ptr, i64, i64 } %t161, ptr %a162 call void @finch_str_drop(ptr %a162) - br label %endif6959 -endif6959: - br label %endif6950 -endif6950: - br label %endif6941 -endif6941: - br label %endif6938 -endif6938: + br label %endif6963 +endif6963: + br label %endif6954 +endif6954: + br label %endif6945 +endif6945: + br label %endif6942 +endif6942: %t163 = load ptr, ptr %a1 %t164 = load i64, ptr %a3 %t165 = load { ptr, i64, i64 }, ptr %a18 @@ -69828,33 +69854,33 @@ endif6938: %t173 = load { ptr, i64, i64 }, ptr %t171 %t174 = extractvalue { ptr, i64, i64 } %t173, 1 %t175 = icmp uge i64 %t172, %t174 - br i1 %t175, label %range6966, label %inrange6967 -range6966: + br i1 %t175, label %range6970, label %inrange6971 +range6970: call void @finch_panic_index(ptr @.str.4481, i64 3855, i64 %t172, i64 %t174) unreachable -inrange6967: +inrange6971: %t176 = extractvalue { ptr, i64, i64 } %t173, 0 %t177 = getelementptr inbounds i64, ptr %t176, i64 %t172 %t178 = load i64, ptr %t177 %t179 = icmp ne i64 %t170, %t178 - br i1 %t179, label %then6968, label %endif6970 -then6968: + br i1 %t179, label %then6972, label %endif6974 +then6972: %t180 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 %t181 = load i64, ptr %a168 %t182 = load { ptr, i64, i64 }, ptr %t180 %t183 = extractvalue { ptr, i64, i64 } %t182, 1 %t184 = icmp uge i64 %t181, %t183 - br i1 %t184, label %range6971, label %inrange6972 -range6971: + br i1 %t184, label %range6975, label %inrange6976 +range6975: call void @finch_panic_index(ptr @.str.4482, i64 3856, i64 %t181, i64 %t183) unreachable -inrange6972: +inrange6976: %t185 = extractvalue { ptr, i64, i64 } %t182, 0 %t186 = getelementptr inbounds i64, ptr %t185, i64 %t181 %t187 = load i64, ptr %t186 %t188 = icmp eq i64 %t187, 0 - br i1 %t188, label %then6973, label %endif6975 -then6973: + br i1 %t188, label %then6977, label %endif6979 +then6977: %t189 = load ptr, ptr %a1 %t190 = load %S.ast.Node, ptr %a2 %t191 = load { ptr, i64, i64 }, ptr %a18 @@ -69872,8 +69898,8 @@ then6973: call void @finch.gen.fail(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t201) store { ptr, i64, i64 } %t201, ptr %a202 call void @finch_str_drop(ptr %a202) - br label %endif6975 -endif6975: + br label %endif6979 +endif6979: %t203 = load ptr, ptr %a1 %t204 = load %S.ast.Node, ptr %a2 %t205 = load { ptr, i64, i64 }, ptr %a18 @@ -69886,11 +69912,11 @@ endif6975: %t212 = load { ptr, i64, i64 }, ptr %t210 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 %t211, %t213 - br i1 %t214, label %range6976, label %inrange6977 -range6976: + br i1 %t214, label %range6980, label %inrange6981 +range6980: call void @finch_panic_index(ptr @.str.4485, i64 3859, i64 %t211, i64 %t213) unreachable -inrange6977: +inrange6981: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds i64, ptr %t215, i64 %t211 %t217 = load i64, ptr %t216 @@ -69926,17 +69952,17 @@ inrange6977: call void @finch.gen.fail(ptr %t203, %S.ast.Node %t204, { ptr, i64, i64 } %t241) store { ptr, i64, i64 } %t241, ptr %a242 call void @finch_str_drop(ptr %a242) - br label %endif6970 -endif6970: + br label %endif6974 +endif6974: store i64 0, ptr %a243 - br label %each.cond6978 -each.cond6978: + br label %each.cond6982 +each.cond6982: %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t245 = load i64, ptr %t244 %t246 = load i64, ptr %a243 %t247 = icmp slt i64 %t246, %t245 - br i1 %t247, label %each.body6979, label %each.end6981 -each.body6979: + br i1 %t247, label %each.body6983, label %each.end6985 +each.body6983: %t248 = load ptr, ptr %a19 %t249 = getelementptr inbounds %S.ast.Node, ptr %t248, i64 %t246 %t250 = load %S.ast.Node, ptr %t249 @@ -69947,20 +69973,20 @@ each.body6979: store { ptr, i64, i64 } { ptr @.str.4488, i64 3, i64 0 }, ptr %a255 %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) %t257 = icmp eq i32 %t256, 0 - br i1 %t257, label %then6982, label %endif6984 -then6982: + br i1 %t257, label %then6986, label %endif6988 +then6986: %t258 = load ptr, ptr %a1 %t259 = load %S.ast.Node, ptr %a251 call void @finch.gen.fail(ptr %t258, %S.ast.Node %t259, { ptr, i64, i64 } { ptr @.str.4489, i64 50, i64 0 }) - br label %endif6984 -endif6984: - br label %each.step6980 -each.step6980: + br label %endif6988 +endif6988: + br label %each.step6984 +each.step6984: %t260 = load i64, ptr %a243 %t261 = add i64 %t260, 1 store i64 %t261, ptr %a243 - br label %each.cond6978 -each.end6981: + br label %each.cond6982 +each.end6985: %t262 = load i64, ptr %a168 %t263 = insertvalue %S.gen.SumPat zeroinitializer, i64 %t262, 0 %t264 = load { ptr, i64, i64 }, ptr %a19 @@ -70050,21 +70076,21 @@ entry: store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic6985, label %ok6986 -panic6985: + br i1 %t5, label %panic6989, label %ok6990 +panic6989: call void @finch_panic(ptr @.str.4490, i64 3871, ptr @.str.4491) unreachable -ok6986: +ok6990: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range6987, label %inrange6988 -range6987: + br i1 %t10, label %range6991, label %inrange6992 +range6991: call void @finch_panic_index(ptr @.str.4492, i64 3871, i64 %t7, i64 %t9) unreachable -inrange6988: +inrange6992: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.EnumDef, ptr %t12 @@ -70080,33 +70106,33 @@ inrange6988: %t23 = load i64, ptr %t19 %t24 = load ptr, ptr %t18 store i64 0, ptr %a25 - br label %find.cond6989 -find.cond6989: + br label %find.cond6993 +find.cond6993: %t26 = load i64, ptr %a25 %t27 = icmp slt i64 %t26, %t23 - br i1 %t27, label %find.body6990, label %find.end6993 -find.body6990: + br i1 %t27, label %find.body6994, label %find.end6997 +find.body6994: %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } %t21, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br i1 %t33, label %find.hit6991, label %find.next6992 -find.hit6991: + br i1 %t33, label %find.hit6995, label %find.next6996 +find.hit6995: store i64 %t26, ptr %a22 - br label %find.end6993 -find.next6992: + br label %find.end6997 +find.next6996: %t34 = add i64 %t26, 1 store i64 %t34, ptr %a25 - br label %find.cond6989 -find.end6993: + br label %find.cond6993 +find.end6997: %t35 = load i64, ptr %a22 store i64 %t35, ptr %a36 %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, 0 - br i1 %t38, label %then6994, label %endif6996 -then6994: + br i1 %t38, label %then6998, label %endif7000 +then6998: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 %t41 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 @@ -70157,8 +70183,8 @@ then6994: call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t79) store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif6996 -endif6996: + br label %endif7000 +endif7000: %t81 = load ptr, ptr %a1 %t82 = load %S.ast.Node, ptr %a2 %t83 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 @@ -70198,11 +70224,11 @@ endif6996: %t114 = load { ptr, i64, i64 }, ptr %t112 %t115 = extractvalue { ptr, i64, i64 } %t114, 1 %t116 = icmp uge i64 %t113, %t115 - br i1 %t116, label %range6997, label %inrange6998 -range6997: + br i1 %t116, label %range7001, label %inrange7002 +range7001: call void @finch_panic_index(ptr @.str.4501, i64 3876, i64 %t113, i64 %t115) unreachable -inrange6998: +inrange7002: %t117 = extractvalue { ptr, i64, i64 } %t114, 0 %t118 = getelementptr inbounds i64, ptr %t117, i64 %t113 %t119 = load i64, ptr %t118 @@ -70230,11 +70256,11 @@ inrange6998: %t136 = load { ptr, i64, i64 }, ptr %t134 %t137 = extractvalue { ptr, i64, i64 } %t136, 1 %t138 = icmp uge i64 %t135, %t137 - br i1 %t138, label %range6999, label %inrange7000 -range6999: + br i1 %t138, label %range7003, label %inrange7004 +range7003: call void @finch_panic_index(ptr @.str.4504, i64 3877, i64 %t135, i64 %t137) unreachable -inrange7000: +inrange7004: %t139 = extractvalue { ptr, i64, i64 } %t136, 0 %t140 = getelementptr inbounds i64, ptr %t139, i64 %t135 %t141 = load i64, ptr %t140 @@ -70608,11 +70634,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range7001, label %inrange7002 -range7001: + br i1 %t8, label %range7005, label %inrange7006 +range7005: call void @finch_panic_index(ptr @.str.4506, i64 3881, i64 0, i64 %t7) unreachable -inrange7002: +inrange7006: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -70620,16 +70646,16 @@ inrange7002: store i64 %t12, ptr %a13 %t14 = load i64, ptr %a13 %t15 = icmp sge i64 %t14, 0 - br i1 %t15, label %then7003, label %endif7005 -then7003: + br i1 %t15, label %then7007, label %endif7009 +then7007: %t16 = load i1, ptr %a3 - br i1 %t16, label %then7006, label %endif7008 -then7006: + br i1 %t16, label %then7010, label %endif7012 +then7010: %t17 = load ptr, ptr %a1 %t18 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t17, %S.ast.Node %t18, { ptr, i64, i64 } { ptr @.str.4507, i64 37, i64 0 }) - br label %endif7008 -endif7008: + br label %endif7012 +endif7012: %t19 = load ptr, ptr %a1 %t20 = load i64, ptr %a13 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -70639,21 +70665,21 @@ endif7008: store i64 %t24, ptr %a25 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic7009, label %ok7010 -panic7009: + br i1 %t27, label %panic7013, label %ok7014 +panic7013: call void @finch_panic(ptr @.str.4508, i64 3887, ptr @.str.4509) unreachable -ok7010: +ok7014: %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 22 %t29 = load i64, ptr %a13 %t30 = load { ptr, i64, i64 }, ptr %t28 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 %t29, %t31 - br i1 %t32, label %range7011, label %inrange7012 -range7011: + br i1 %t32, label %range7015, label %inrange7016 +range7015: call void @finch_panic_index(ptr @.str.4510, i64 3887, i64 %t29, i64 %t31) unreachable -inrange7012: +inrange7016: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.gen.SumDef, ptr %t33, i64 %t29 %t35 = getelementptr inbounds %S.gen.SumDef, ptr %t34, i32 0, i32 3 @@ -70661,17 +70687,17 @@ inrange7012: %t37 = load { ptr, i64, i64 }, ptr %t35 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range7013, label %inrange7014 -range7013: + br i1 %t39, label %range7017, label %inrange7018 +range7017: call void @finch_panic_index(ptr @.str.4511, i64 3887, i64 %t36, i64 %t38) unreachable -inrange7014: +inrange7018: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds i64, ptr %t40, i64 %t36 %t42 = load i64, ptr %t41 %t43 = icmp sgt i64 %t42, 0 - br i1 %t43, label %then7015, label %endif7017 -then7015: + br i1 %t43, label %then7019, label %endif7021 +then7019: %t44 = load ptr, ptr %a1 %t45 = load %S.ast.Node, ptr %a2 %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -70682,21 +70708,21 @@ then7015: %t51 = load { ptr, i64, i64 }, ptr %a48 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic7018, label %ok7019 -panic7018: + br i1 %t53, label %panic7022, label %ok7023 +panic7022: call void @finch_panic(ptr @.str.4513, i64 3888, ptr @.str.4514) unreachable -ok7019: +ok7023: %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 22 %t55 = load i64, ptr %a13 %t56 = load { ptr, i64, i64 }, ptr %t54 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 %t55, %t57 - br i1 %t58, label %range7020, label %inrange7021 -range7020: + br i1 %t58, label %range7024, label %inrange7025 +range7024: call void @finch_panic_index(ptr @.str.4515, i64 3888, i64 %t55, i64 %t57) unreachable -inrange7021: +inrange7025: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds %S.gen.SumDef, ptr %t59, i64 %t55 %t61 = getelementptr inbounds %S.gen.SumDef, ptr %t60, i32 0, i32 3 @@ -70704,11 +70730,11 @@ inrange7021: %t63 = load { ptr, i64, i64 }, ptr %t61 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 - br i1 %t65, label %range7022, label %inrange7023 -range7022: + br i1 %t65, label %range7026, label %inrange7027 +range7026: call void @finch_panic_index(ptr @.str.4516, i64 3888, i64 %t62, i64 %t64) unreachable -inrange7023: +inrange7027: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i64, ptr %t66, i64 %t62 %t68 = load i64, ptr %t67 @@ -70730,21 +70756,21 @@ inrange7023: %t81 = load { ptr, i64, i64 }, ptr %a77 %t82 = load ptr, ptr %a1 %t83 = icmp eq ptr %t82, null - br i1 %t83, label %panic7024, label %ok7025 -panic7024: + br i1 %t83, label %panic7028, label %ok7029 +panic7028: call void @finch_panic(ptr @.str.4518, i64 3888, ptr @.str.4519) unreachable -ok7025: +ok7029: %t84 = getelementptr inbounds %S.gen.Gen, ptr %t82, i32 0, i32 22 %t85 = load i64, ptr %a13 %t86 = load { ptr, i64, i64 }, ptr %t84 %t87 = extractvalue { ptr, i64, i64 } %t86, 1 %t88 = icmp uge i64 %t85, %t87 - br i1 %t88, label %range7026, label %inrange7027 -range7026: + br i1 %t88, label %range7030, label %inrange7031 +range7030: call void @finch_panic_index(ptr @.str.4520, i64 3888, i64 %t85, i64 %t87) unreachable -inrange7027: +inrange7031: %t89 = extractvalue { ptr, i64, i64 } %t86, 0 %t90 = getelementptr inbounds %S.gen.SumDef, ptr %t89, i64 %t85 %t91 = getelementptr inbounds %S.gen.SumDef, ptr %t90, i32 0, i32 1 @@ -70778,8 +70804,8 @@ inrange7027: call void @finch.gen.fail(ptr %t44, %S.ast.Node %t45, { ptr, i64, i64 } %t114) store { ptr, i64, i64 } %t114, ptr %a115 call void @finch_str_drop(ptr %a115) - br label %endif7017 -endif7017: + br label %endif7021 +endif7021: store { ptr, i64, i64 } zeroinitializer, ptr %a116 %t117 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t118 = load ptr, ptr %a1 @@ -70792,17 +70818,17 @@ endif7017: %t125 = insertvalue %S.gen.Ref %t117, %S.gen.Val %t124, 2 call void @finch.drop.arr_S_ast_Node(ptr %a116) ret %S.gen.Ref %t125 -endif7005: +endif7009: %t126 = load ptr, ptr %a1 %t127 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t128 = load { ptr, i64, i64 }, ptr %t127 %t129 = extractvalue { ptr, i64, i64 } %t128, 1 %t130 = icmp uge i64 0, %t129 - br i1 %t130, label %range7028, label %inrange7029 -range7028: + br i1 %t130, label %range7032, label %inrange7033 +range7032: call void @finch_panic_index(ptr @.str.4523, i64 3893, i64 0, i64 %t129) unreachable -inrange7029: +inrange7033: %t131 = extractvalue { ptr, i64, i64 } %t128, 0 %t132 = getelementptr inbounds %S.ast.Node, ptr %t131, i64 0 %t133 = load %S.ast.Node, ptr %t132 @@ -70810,16 +70836,16 @@ inrange7029: store i64 %t134, ptr %a135 %t136 = load i64, ptr %a135 %t137 = icmp sge i64 %t136, 0 - br i1 %t137, label %then7030, label %endif7032 -then7030: + br i1 %t137, label %then7034, label %endif7036 +then7034: %t138 = load i1, ptr %a3 - br i1 %t138, label %then7033, label %endif7035 -then7033: + br i1 %t138, label %then7037, label %endif7039 +then7037: %t139 = load ptr, ptr %a1 %t140 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t139, %S.ast.Node %t140, { ptr, i64, i64 } { ptr @.str.4524, i64 37, i64 0 }) - br label %endif7035 -endif7035: + br label %endif7039 +endif7039: %t141 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t142 = load ptr, ptr %a1 %t143 = load %S.ast.Node, ptr %a2 @@ -70827,17 +70853,17 @@ endif7035: %t145 = call %S.gen.Val @finch.gen.enumValue(ptr %t142, %S.ast.Node %t143, i64 %t144) %t146 = insertvalue %S.gen.Ref %t141, %S.gen.Val %t145, 2 ret %S.gen.Ref %t146 -endif7032: +endif7036: %t147 = load ptr, ptr %a1 %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t149 = load { ptr, i64, i64 }, ptr %t148 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 0, %t150 - br i1 %t151, label %range7036, label %inrange7037 -range7036: + br i1 %t151, label %range7040, label %inrange7041 +range7040: call void @finch_panic_index(ptr @.str.4525, i64 3900, i64 0, i64 %t150) unreachable -inrange7037: +inrange7041: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 0 %t154 = load %S.ast.Node, ptr %t153 @@ -70853,8 +70879,8 @@ inrange7037: store %S.ast.Type %t163, ptr %a164 %t165 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t166 = load i1, ptr %t165 - br i1 %t166, label %then7038, label %endif7040 -then7038: + br i1 %t166, label %then7042, label %endif7044 +then7042: %t167 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t168 = getelementptr inbounds %S.gen.Place, ptr %t167, i32 0, i32 1 %t169 = load %S.ast.Type, ptr %t168 @@ -70865,16 +70891,16 @@ then7038: store %S.ast.Type %t172, ptr %a164 store %S.ast.Type %t173, ptr %a174 call void @finch.drop.S_ast_Type(ptr %a174) - br label %endif7040 -endif7040: + br label %endif7044 +endif7044: %t175 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t176 = load { ptr, i64, i64 }, ptr %t175 store { ptr, i64, i64 } %t176, ptr %a177 store { ptr, i64, i64 } { ptr @.str.4526, i64 3, i64 0 }, ptr %a178 %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) %t180 = icmp ne i32 %t179, 0 - br i1 %t180, label %then7041, label %endif7043 -then7041: + br i1 %t180, label %then7045, label %endif7047 +then7045: %t181 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t182 = getelementptr inbounds %S.gen.Val, ptr %t181, i32 0, i32 0 %t183 = load { ptr, i64, i64 }, ptr %t182 @@ -70884,8 +70910,8 @@ then7041: store { ptr, i64, i64 } %t186, ptr %a187 %t188 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t189 = load i1, ptr %t188 - br i1 %t189, label %then7044, label %endif7046 -then7044: + br i1 %t189, label %then7048, label %endif7050 +then7048: %t190 = load ptr, ptr %a1 %t191 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 0 @@ -70895,19 +70921,19 @@ then7044: store { ptr, i64, i64 } %t194, ptr %a187 store { ptr, i64, i64 } %t195, ptr %a196 call void @finch_str_drop(ptr %a196) - br label %endif7046 -endif7046: + br label %endif7050 +endif7050: %t197 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 %t199 = load i64, ptr %t198 %t200 = icmp eq i64 %t199, 0 - br i1 %t200, label %then7047, label %endif7049 -then7047: + br i1 %t200, label %then7051, label %endif7053 +then7051: %t201 = load ptr, ptr %a1 %t202 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t201, %S.ast.Node %t202, { ptr, i64, i64 } { ptr @.str.4528, i64 57, i64 0 }) - br label %endif7049 -endif7049: + br label %endif7053 +endif7053: %t203 = load ptr, ptr %a1 %t204 = load ptr, ptr %a1 %t205 = load { ptr, i64, i64 }, ptr %a187 @@ -70946,11 +70972,11 @@ endif7049: %t232 = load { ptr, i64, i64 }, ptr %t231 %t233 = extractvalue { ptr, i64, i64 } %t232, 1 %t234 = icmp uge i64 0, %t233 - br i1 %t234, label %range7050, label %inrange7051 -range7050: + br i1 %t234, label %range7054, label %inrange7055 +range7054: call void @finch_panic_index(ptr @.str.4533, i64 3914, i64 0, i64 %t233) unreachable -inrange7051: +inrange7055: %t235 = extractvalue { ptr, i64, i64 } %t232, 0 %t236 = getelementptr inbounds %S.ast.Type, ptr %t235, i64 0 %t237 = load %S.ast.Type, ptr %t236 @@ -70965,15 +70991,15 @@ inrange7051: store { ptr, i64, i64 } { ptr @.str.4534, i64 6, i64 0 }, ptr %a246 %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) %t248 = icmp ne i32 %t247, 0 - br i1 %t248, label %then7052, label %endif7054 -then7052: + br i1 %t248, label %then7056, label %endif7058 +then7056: %t249 = load ptr, ptr %a1 %t250 = icmp eq ptr %t249, null - br i1 %t250, label %panic7055, label %ok7056 -panic7055: + br i1 %t250, label %panic7059, label %ok7060 +panic7059: call void @finch_panic(ptr @.str.4535, i64 3917, ptr @.str.4536) unreachable -ok7056: +ok7060: %t251 = getelementptr inbounds %S.gen.Gen, ptr %t249, i32 0, i32 16 %t252 = load ptr, ptr %a1 %t253 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 3 @@ -70984,11 +71010,11 @@ ok7056: %t258 = load { ptr, i64, i64 }, ptr %t251 %t259 = extractvalue { ptr, i64, i64 } %t258, 1 %t260 = icmp uge i64 %t257, %t259 - br i1 %t260, label %range7057, label %inrange7058 -range7057: + br i1 %t260, label %range7061, label %inrange7062 +range7061: call void @finch_panic_index(ptr @.str.4537, i64 3917, i64 %t257, i64 %t259) unreachable -inrange7058: +inrange7062: %t261 = extractvalue { ptr, i64, i64 } %t258, 0 %t262 = getelementptr inbounds %S.gen.StructDef, ptr %t261, i64 %t257 %t263 = getelementptr inbounds %S.gen.StructDef, ptr %t262, i32 0, i32 11 @@ -70997,51 +71023,51 @@ inrange7058: %t266 = load i64, ptr %t264 %t267 = load ptr, ptr %t263 store i64 0, ptr %a268 - br label %find.cond7059 -find.cond7059: + br label %find.cond7063 +find.cond7063: %t269 = load i64, ptr %a268 %t270 = icmp slt i64 %t269, %t266 - br i1 %t270, label %find.body7060, label %find.end7063 -find.body7060: + br i1 %t270, label %find.body7064, label %find.end7067 +find.body7064: %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i64 %t269 %t272 = load { ptr, i64, i64 }, ptr %t271 store { ptr, i64, i64 } %t272, ptr %a273 store { ptr, i64, i64 } { ptr @.str.4538, i64 5, i64 0 }, ptr %a274 %t275 = call i32 @finch_str_eq(ptr %a273, ptr %a274) %t276 = icmp ne i32 %t275, 0 - br i1 %t276, label %find.hit7061, label %find.next7062 -find.hit7061: + br i1 %t276, label %find.hit7065, label %find.next7066 +find.hit7065: store i64 %t269, ptr %a265 - br label %find.end7063 -find.next7062: + br label %find.end7067 +find.next7066: %t277 = add i64 %t269, 1 store i64 %t277, ptr %a268 - br label %find.cond7059 -find.end7063: + br label %find.cond7063 +find.end7067: %t278 = load i64, ptr %a265 %t279 = icmp sge i64 %t278, 0 store i1 %t279, ptr %a242 - br label %endif7054 -endif7054: + br label %endif7058 +endif7058: %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t281 = load { ptr, i64, i64 }, ptr %t280 store { ptr, i64, i64 } %t281, ptr %a282 store { ptr, i64, i64 } { ptr @.str.4539, i64 5, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 - br label %logic.from7064 -logic.from7064: - br i1 %t285, label %logic.rhs7065, label %logic.end7066 -logic.rhs7065: + br label %logic.from7068 +logic.from7068: + br i1 %t285, label %logic.rhs7069, label %logic.end7070 +logic.rhs7069: %t286 = load i1, ptr %a242 %t287 = xor i1 %t286, true - br label %logic.rend7067 -logic.rend7067: - br label %logic.end7066 -logic.end7066: - %t288 = phi i1 [ false, %logic.from7064 ], [ %t287, %logic.rend7067 ] - br i1 %t288, label %then7068, label %endif7070 -then7068: + br label %logic.rend7071 +logic.rend7071: + br label %logic.end7070 +logic.end7070: + %t288 = phi i1 [ false, %logic.from7068 ], [ %t287, %logic.rend7071 ] + br i1 %t288, label %then7072, label %endif7074 +then7072: %t289 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t290 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t290, ptr %a291 @@ -71059,15 +71085,15 @@ then7068: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t300 -endif7070: +endif7074: %t301 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 %t302 = load { ptr, i64, i64 }, ptr %t301 store { ptr, i64, i64 } %t302, ptr %a303 store { ptr, i64, i64 } { ptr @.str.4540, i64 6, i64 0 }, ptr %a304 %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) %t306 = icmp eq i32 %t305, 0 - br i1 %t306, label %then7071, label %endif7073 -then7071: + br i1 %t306, label %then7075, label %endif7077 +then7075: %t307 = load ptr, ptr %a1 %t308 = load %S.ast.Node, ptr %a2 %t309 = load %S.ast.Type, ptr %a164 @@ -71087,8 +71113,8 @@ then7071: call void @finch.gen.fail(ptr %t307, %S.ast.Node %t308, { ptr, i64, i64 } %t320) store { ptr, i64, i64 } %t320, ptr %a321 call void @finch_str_drop(ptr %a321) - br label %endif7073 -endif7073: + br label %endif7077 +endif7077: %t322 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t323 = load { ptr, i64, i64 }, ptr %a187 store { ptr, i64, i64 } %t323, ptr %a324 @@ -71115,19 +71141,19 @@ endif7073: call void @finch.drop.S_ast_Type(ptr %a341) call void @finch.drop.S_ast_Type(ptr %a241) call void @finch_str_drop(ptr %a187) - br label %endif7043 -endif7043: + br label %endif7047 +endif7047: %t342 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t343 = load { ptr, i64, i64 }, ptr %t342 store { ptr, i64, i64 } %t343, ptr %a344 store { ptr, i64, i64 } { ptr @.str.4543, i64 5, i64 0 }, ptr %a345 %t346 = call i32 @finch_str_eq(ptr %a344, ptr %a345) %t347 = icmp ne i32 %t346, 0 - br i1 %t347, label %then7074, label %endif7076 -then7074: + br i1 %t347, label %then7078, label %endif7080 +then7078: %t348 = load i1, ptr %a3 - br i1 %t348, label %then7077, label %endif7079 -then7077: + br i1 %t348, label %then7081, label %endif7083 +then7081: %t349 = load ptr, ptr %a1 %t350 = load %S.ast.Node, ptr %a2 %t351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -71145,16 +71171,16 @@ then7077: call void @finch.gen.fail(ptr %t349, %S.ast.Node %t350, { ptr, i64, i64 } %t361) store { ptr, i64, i64 } %t361, ptr %a362 call void @finch_str_drop(ptr %a362) - br label %endif7079 -endif7079: + br label %endif7083 +endif7083: %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t364 = load { ptr, i64, i64 }, ptr %t363 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.4546, i64 3, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 - br i1 %t368, label %then7080, label %endif7082 -then7080: + br i1 %t368, label %then7084, label %endif7086 +then7084: %t369 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t370 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 4 %t371 = load i64, ptr %t370 @@ -71168,15 +71194,15 @@ then7080: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t378 -endif7082: +endif7086: %t379 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t380 = load { ptr, i64, i64 }, ptr %t379 store { ptr, i64, i64 } %t380, ptr %a381 store { ptr, i64, i64 } { ptr @.str.4548, i64 3, i64 0 }, ptr %a382 %t383 = call i32 @finch_str_eq(ptr %a381, ptr %a382) %t384 = icmp eq i32 %t383, 0 - br i1 %t384, label %then7083, label %endif7085 -then7083: + br i1 %t384, label %then7087, label %endif7089 +then7087: %t385 = load ptr, ptr %a1 %t386 = load %S.ast.Node, ptr %a2 %t387 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -71194,18 +71220,18 @@ then7083: call void @finch.gen.fail(ptr %t385, %S.ast.Node %t386, { ptr, i64, i64 } %t397) store { ptr, i64, i64 } %t397, ptr %a398 call void @finch_str_drop(ptr %a398) - br label %endif7085 -endif7085: + br label %endif7089 +endif7089: %t399 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t400 = load i1, ptr %t399 %t401 = xor i1 %t400, true - br i1 %t401, label %then7086, label %endif7088 -then7086: + br i1 %t401, label %then7090, label %endif7092 +then7090: %t402 = load ptr, ptr %a1 %t403 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4551, i64 48, i64 0 }) - br label %endif7088 -endif7088: + br label %endif7092 +endif7092: %t404 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t405 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 %t406 = getelementptr inbounds %S.gen.Place, ptr %t405, i32 0, i32 0 @@ -71218,11 +71244,11 @@ endif7088: %t413 = load { ptr, i64, i64 }, ptr %t412 %t414 = extractvalue { ptr, i64, i64 } %t413, 1 %t415 = icmp uge i64 0, %t414 - br i1 %t415, label %range7089, label %inrange7090 -range7089: + br i1 %t415, label %range7093, label %inrange7094 +range7093: call void @finch_panic_index(ptr @.str.4552, i64 3941, i64 0, i64 %t414) unreachable -inrange7090: +inrange7094: %t416 = extractvalue { ptr, i64, i64 } %t413, 0 %t417 = getelementptr inbounds %S.ast.Type, ptr %t416, i64 0 %t418 = load %S.ast.Type, ptr %t417 @@ -71232,72 +71258,72 @@ inrange7090: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t421 -endif7076: +endif7080: %t422 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t423 = load { ptr, i64, i64 }, ptr %t422 store { ptr, i64, i64 } %t423, ptr %a424 store { ptr, i64, i64 } { ptr @.str.4553, i64 5, i64 0 }, ptr %a425 %t426 = call i32 @finch_str_eq(ptr %a424, ptr %a425) %t427 = icmp ne i32 %t426, 0 - br label %logic.from7091 -logic.from7091: - br i1 %t427, label %logic.end7093, label %logic.rhs7092 -logic.rhs7092: + br label %logic.from7095 +logic.from7095: + br i1 %t427, label %logic.end7097, label %logic.rhs7096 +logic.rhs7096: %t428 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t429 = load { ptr, i64, i64 }, ptr %t428 store { ptr, i64, i64 } %t429, ptr %a430 store { ptr, i64, i64 } { ptr @.str.4554, i64 3, i64 0 }, ptr %a431 %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) %t433 = icmp ne i32 %t432, 0 - br label %logic.rend7094 -logic.rend7094: - br label %logic.end7093 -logic.end7093: - %t434 = phi i1 [ true, %logic.from7091 ], [ %t433, %logic.rend7094 ] - br label %logic.from7095 -logic.from7095: - br i1 %t434, label %logic.rhs7096, label %logic.end7097 -logic.rhs7096: + br label %logic.rend7098 +logic.rend7098: + br label %logic.end7097 +logic.end7097: + %t434 = phi i1 [ true, %logic.from7095 ], [ %t433, %logic.rend7098 ] + br label %logic.from7099 +logic.from7099: + br i1 %t434, label %logic.rhs7100, label %logic.end7101 +logic.rhs7100: %t435 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t436 = load { ptr, i64, i64 }, ptr %t435 store { ptr, i64, i64 } %t436, ptr %a437 store { ptr, i64, i64 } { ptr @.str.4555, i64 3, i64 0 }, ptr %a438 %t439 = call i32 @finch_str_eq(ptr %a437, ptr %a438) %t440 = icmp ne i32 %t439, 0 - br label %logic.rend7098 -logic.rend7098: - br label %logic.end7097 -logic.end7097: - %t441 = phi i1 [ false, %logic.from7095 ], [ %t440, %logic.rend7098 ] - br i1 %t441, label %then7099, label %endif7101 -then7099: + br label %logic.rend7102 +logic.rend7102: + br label %logic.end7101 +logic.end7101: + %t441 = phi i1 [ false, %logic.from7099 ], [ %t440, %logic.rend7102 ] + br i1 %t441, label %then7103, label %endif7105 +then7103: %t442 = load i1, ptr %a3 - br i1 %t442, label %then7102, label %endif7104 -then7102: + br i1 %t442, label %then7106, label %endif7108 +then7106: %t443 = load ptr, ptr %a1 %t444 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t443, %S.ast.Node %t444, { ptr, i64, i64 } { ptr @.str.4556, i64 30, i64 0 }) - br label %endif7104 -endif7104: + br label %endif7108 +endif7108: %t445 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t446 = load i1, ptr %t445 %t447 = xor i1 %t446, true - br label %logic.from7105 -logic.from7105: - br i1 %t447, label %logic.rhs7106, label %logic.end7107 -logic.rhs7106: + br label %logic.from7109 +logic.from7109: + br i1 %t447, label %logic.rhs7110, label %logic.end7111 +logic.rhs7110: %t448 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t449 = getelementptr inbounds %S.gen.Val, ptr %t448, i32 0, i32 2 %t450 = load i1, ptr %t449 - br label %logic.rend7108 -logic.rend7108: - br label %logic.end7107 -logic.end7107: - %t451 = phi i1 [ false, %logic.from7105 ], [ %t450, %logic.rend7108 ] - br label %logic.from7109 -logic.from7109: - br i1 %t451, label %logic.rhs7110, label %logic.end7111 -logic.rhs7110: + br label %logic.rend7112 +logic.rend7112: + br label %logic.end7111 +logic.end7111: + %t451 = phi i1 [ false, %logic.from7109 ], [ %t450, %logic.rend7112 ] + br label %logic.from7113 +logic.from7113: + br i1 %t451, label %logic.rhs7114, label %logic.end7115 +logic.rhs7114: %t452 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t453 = getelementptr inbounds %S.gen.Val, ptr %t452, i32 0, i32 0 %t454 = load { ptr, i64, i64 }, ptr %t453 @@ -71305,18 +71331,18 @@ logic.rhs7110: store { ptr, i64, i64 } { ptr @.str.4558, i64 1, i64 0 }, ptr %a457 %t458 = call i32 @finch_str_starts(ptr %a455, ptr %a457) %t459 = icmp ne i32 %t458, 0 - br label %logic.rend7112 -logic.rend7112: - br label %logic.end7111 -logic.end7111: - %t460 = phi i1 [ false, %logic.from7109 ], [ %t459, %logic.rend7112 ] - br i1 %t460, label %then7113, label %endif7115 -then7113: + br label %logic.rend7116 +logic.rend7116: + br label %logic.end7115 +logic.end7115: + %t460 = phi i1 [ false, %logic.from7113 ], [ %t459, %logic.rend7116 ] + br i1 %t460, label %then7117, label %endif7119 +then7117: %t461 = load ptr, ptr %a1 %t462 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t461, %S.ast.Node %t462, { ptr, i64, i64 } { ptr @.str.4559, i64 53, i64 0 }) - br label %endif7115 -endif7115: + br label %endif7119 +endif7119: %t463 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t464 = getelementptr inbounds %S.gen.Val, ptr %t463, i32 0, i32 0 %t465 = load { ptr, i64, i64 }, ptr %t464 @@ -71326,8 +71352,8 @@ endif7115: store { ptr, i64, i64 } %t468, ptr %a469 %t470 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t471 = load i1, ptr %t470 - br i1 %t471, label %then7116, label %endif7118 -then7116: + br i1 %t471, label %then7120, label %endif7122 +then7120: %t472 = load ptr, ptr %a1 %t473 = load ptr, ptr %a1 %t474 = load %S.ast.Type, ptr %a164 @@ -71342,16 +71368,16 @@ then7116: store { ptr, i64, i64 } %t479, ptr %a469 store { ptr, i64, i64 } %t481, ptr %a482 call void @finch_str_drop(ptr %a482) - br label %endif7118 -endif7118: + br label %endif7122 +endif7122: %t483 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t484 = load { ptr, i64, i64 }, ptr %t483 store { ptr, i64, i64 } %t484, ptr %a485 store { ptr, i64, i64 } { ptr @.str.4560, i64 3, i64 0 }, ptr %a486 %t487 = call i32 @finch_str_eq(ptr %a485, ptr %a486) %t488 = icmp ne i32 %t487, 0 - br i1 %t488, label %then7119, label %endif7121 -then7119: + br i1 %t488, label %then7123, label %endif7125 +then7123: %t489 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t490 = load ptr, ptr %a1 %t491 = load { ptr, i64, i64 }, ptr %a469 @@ -71367,7 +71393,7 @@ then7119: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t498 -endif7121: +endif7125: %t499 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 %t500 = load ptr, ptr %a1 %t501 = load { ptr, i64, i64 }, ptr %a469 @@ -71389,11 +71415,11 @@ endif7121: %t515 = load { ptr, i64, i64 }, ptr %t514 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 0, %t516 - br i1 %t517, label %range7122, label %inrange7123 -range7122: + br i1 %t517, label %range7126, label %inrange7127 +range7126: call void @finch_panic_index(ptr @.str.4564, i64 3959, i64 0, i64 %t516) unreachable -inrange7123: +inrange7127: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 %t520 = load %S.ast.Type, ptr %t519 @@ -71404,53 +71430,53 @@ inrange7123: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t523 -endif7101: +endif7105: %t524 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t525 = load { ptr, i64, i64 }, ptr %t524 store { ptr, i64, i64 } %t525, ptr %a526 store { ptr, i64, i64 } { ptr @.str.4565, i64 5, i64 0 }, ptr %a527 %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) %t529 = icmp ne i32 %t528, 0 - br label %logic.from7124 -logic.from7124: - br i1 %t529, label %logic.end7126, label %logic.rhs7125 -logic.rhs7125: + br label %logic.from7128 +logic.from7128: + br i1 %t529, label %logic.end7130, label %logic.rhs7129 +logic.rhs7129: %t530 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t531 = load { ptr, i64, i64 }, ptr %t530 store { ptr, i64, i64 } %t531, ptr %a532 store { ptr, i64, i64 } { ptr @.str.4566, i64 3, i64 0 }, ptr %a533 %t534 = call i32 @finch_str_eq(ptr %a532, ptr %a533) %t535 = icmp ne i32 %t534, 0 - br label %logic.rend7127 -logic.rend7127: - br label %logic.end7126 -logic.end7126: - %t536 = phi i1 [ true, %logic.from7124 ], [ %t535, %logic.rend7127 ] - br label %logic.from7128 -logic.from7128: - br i1 %t536, label %logic.end7130, label %logic.rhs7129 -logic.rhs7129: + br label %logic.rend7131 +logic.rend7131: + br label %logic.end7130 +logic.end7130: + %t536 = phi i1 [ true, %logic.from7128 ], [ %t535, %logic.rend7131 ] + br label %logic.from7132 +logic.from7132: + br i1 %t536, label %logic.end7134, label %logic.rhs7133 +logic.rhs7133: %t537 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t538 = load { ptr, i64, i64 }, ptr %t537 store { ptr, i64, i64 } %t538, ptr %a539 store { ptr, i64, i64 } { ptr @.str.4567, i64 3, i64 0 }, ptr %a540 %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) %t542 = icmp ne i32 %t541, 0 - br label %logic.rend7131 -logic.rend7131: - br label %logic.end7130 -logic.end7130: - %t543 = phi i1 [ true, %logic.from7128 ], [ %t542, %logic.rend7131 ] - br i1 %t543, label %then7132, label %endif7134 -then7132: + br label %logic.rend7135 +logic.rend7135: + br label %logic.end7134 +logic.end7134: + %t543 = phi i1 [ true, %logic.from7132 ], [ %t542, %logic.rend7135 ] + br i1 %t543, label %then7136, label %endif7138 +then7136: %t544 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t545 = load { ptr, i64, i64 }, ptr %t544 store { ptr, i64, i64 } %t545, ptr %a546 store { ptr, i64, i64 } { ptr @.str.4568, i64 3, i64 0 }, ptr %a547 %t548 = call i32 @finch_str_eq(ptr %a546, ptr %a547) %t549 = icmp eq i32 %t548, 0 - br i1 %t549, label %then7135, label %endif7137 -then7135: + br i1 %t549, label %then7139, label %endif7141 +then7139: %t550 = load ptr, ptr %a1 %t551 = load %S.ast.Node, ptr %a2 %t552 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -71468,20 +71494,20 @@ then7135: call void @finch.gen.fail(ptr %t550, %S.ast.Node %t551, { ptr, i64, i64 } %t562) store { ptr, i64, i64 } %t562, ptr %a563 call void @finch_str_drop(ptr %a563) - br label %endif7137 -endif7137: + br label %endif7141 +endif7141: %t564 = load i1, ptr %a3 - br i1 %t564, label %then7138, label %endif7140 -then7138: + br i1 %t564, label %then7142, label %endif7144 +then7142: %t565 = load ptr, ptr %a1 %t566 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t565, %S.ast.Node %t566, { ptr, i64, i64 } { ptr @.str.4571, i64 48, i64 0 }) - br label %endif7140 -endif7140: + br label %endif7144 +endif7144: %t567 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t568 = load i1, ptr %t567 - br i1 %t568, label %then7141, label %endif7143 -then7141: + br i1 %t568, label %then7145, label %endif7147 +then7145: %t569 = load ptr, ptr %a1 %t570 = load ptr, ptr %a1 %t571 = load %S.ast.Type, ptr %a164 @@ -71529,7 +71555,7 @@ then7141: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t606 -endif7143: +endif7147: %t607 = load ptr, ptr %a1 %t608 = load ptr, ptr %a1 %t609 = load %S.ast.Type, ptr %a164 @@ -71582,15 +71608,15 @@ endif7143: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t648 -endif7134: +endif7138: %t649 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 %t650 = load { ptr, i64, i64 }, ptr %t649 store { ptr, i64, i64 } %t650, ptr %a651 store { ptr, i64, i64 } { ptr @.str.4581, i64 6, i64 0 }, ptr %a652 %t653 = call i32 @finch_str_eq(ptr %a651, ptr %a652) %t654 = icmp eq i32 %t653, 0 - br i1 %t654, label %then7144, label %endif7146 -then7144: + br i1 %t654, label %then7148, label %endif7150 +then7148: %t655 = load ptr, ptr %a1 %t656 = load %S.ast.Node, ptr %a2 %t657 = load %S.ast.Type, ptr %a164 @@ -71618,15 +71644,15 @@ then7144: call void @finch.gen.fail(ptr %t655, %S.ast.Node %t656, { ptr, i64, i64 } %t675) store { ptr, i64, i64 } %t675, ptr %a676 call void @finch_str_drop(ptr %a676) - br label %endif7146 -endif7146: + br label %endif7150 +endif7150: %t677 = load ptr, ptr %a1 %t678 = icmp eq ptr %t677, null - br i1 %t678, label %panic7147, label %ok7148 -panic7147: + br i1 %t678, label %panic7151, label %ok7152 +panic7151: call void @finch_panic(ptr @.str.4584, i64 3979, ptr @.str.4585) unreachable -ok7148: +ok7152: %t679 = getelementptr inbounds %S.gen.Gen, ptr %t677, i32 0, i32 16 %t680 = load ptr, ptr %a1 %t681 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 3 @@ -71637,11 +71663,11 @@ ok7148: %t686 = load { ptr, i64, i64 }, ptr %t679 %t687 = extractvalue { ptr, i64, i64 } %t686, 1 %t688 = icmp uge i64 %t685, %t687 - br i1 %t688, label %range7149, label %inrange7150 -range7149: + br i1 %t688, label %range7153, label %inrange7154 +range7153: call void @finch_panic_index(ptr @.str.4586, i64 3979, i64 %t685, i64 %t687) unreachable -inrange7150: +inrange7154: %t689 = extractvalue { ptr, i64, i64 } %t686, 0 %t690 = getelementptr inbounds %S.gen.StructDef, ptr %t689, i64 %t685 %t691 = load %S.gen.StructDef, ptr %t690 @@ -71657,33 +71683,33 @@ inrange7150: %t701 = load i64, ptr %t697 %t702 = load ptr, ptr %t696 store i64 0, ptr %a703 - br label %find.cond7151 -find.cond7151: + br label %find.cond7155 +find.cond7155: %t704 = load i64, ptr %a703 %t705 = icmp slt i64 %t704, %t701 - br i1 %t705, label %find.body7152, label %find.end7155 -find.body7152: + br i1 %t705, label %find.body7156, label %find.end7159 +find.body7156: %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 %t707 = load { ptr, i64, i64 }, ptr %t706 store { ptr, i64, i64 } %t707, ptr %a708 store { ptr, i64, i64 } %t699, ptr %a709 %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) %t711 = icmp ne i32 %t710, 0 - br i1 %t711, label %find.hit7153, label %find.next7154 -find.hit7153: + br i1 %t711, label %find.hit7157, label %find.next7158 +find.hit7157: store i64 %t704, ptr %a700 - br label %find.end7155 -find.next7154: + br label %find.end7159 +find.next7158: %t712 = add i64 %t704, 1 store i64 %t712, ptr %a703 - br label %find.cond7151 -find.end7155: + br label %find.cond7155 +find.end7159: %t713 = load i64, ptr %a700 store i64 %t713, ptr %a714 %t715 = load i64, ptr %a714 %t716 = icmp slt i64 %t715, 0 - br i1 %t716, label %then7156, label %endif7158 -then7156: + br i1 %t716, label %then7160, label %endif7162 +then7160: %t717 = load ptr, ptr %a1 %t718 = load %S.ast.Node, ptr %a2 %t719 = load %S.ast.Type, ptr %a164 @@ -71736,18 +71762,18 @@ then7156: call void @finch.gen.fail(ptr %t717, %S.ast.Node %t718, { ptr, i64, i64 } %t758) store { ptr, i64, i64 } %t758, ptr %a759 call void @finch_str_drop(ptr %a759) - br label %endif7158 -endif7158: + br label %endif7162 +endif7162: %t760 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 12 %t761 = load i64, ptr %a714 %t762 = load { ptr, i64, i64 }, ptr %t760 %t763 = extractvalue { ptr, i64, i64 } %t762, 1 %t764 = icmp uge i64 %t761, %t763 - br i1 %t764, label %range7159, label %inrange7160 -range7159: + br i1 %t764, label %range7163, label %inrange7164 +range7163: call void @finch_panic_index(ptr @.str.4592, i64 3984, i64 %t761, i64 %t763) unreachable -inrange7160: +inrange7164: %t765 = extractvalue { ptr, i64, i64 } %t762, 0 %t766 = getelementptr inbounds %S.ast.Type, ptr %t765, i64 %t761 %t767 = load %S.ast.Type, ptr %t766 @@ -71796,8 +71822,8 @@ inrange7160: call void @finch_str_drop(ptr %a804) %t805 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 %t806 = load i1, ptr %t805 - br i1 %t806, label %then7161, label %endif7163 -then7161: + br i1 %t806, label %then7165, label %endif7167 +then7165: %t807 = load ptr, ptr %a1 %t808 = load ptr, ptr %a1 %t809 = load %S.ast.Type, ptr %a164 @@ -71834,11 +71860,11 @@ then7161: %t836 = load { ptr, i64, i64 }, ptr %t834 %t837 = extractvalue { ptr, i64, i64 } %t836, 1 %t838 = icmp uge i64 %t835, %t837 - br i1 %t838, label %range7164, label %inrange7165 -range7164: + br i1 %t838, label %range7168, label %inrange7169 +range7168: call void @finch_panic_index(ptr @.str.4600, i64 3987, i64 %t835, i64 %t837) unreachable -inrange7165: +inrange7169: %t839 = extractvalue { ptr, i64, i64 } %t836, 0 %t840 = getelementptr inbounds i64, ptr %t839, i64 %t835 %t841 = load i64, ptr %t840 @@ -71874,7 +71900,7 @@ inrange7165: call void @finch.drop.S_ast_Type(ptr %a164) call void @finch.drop.S_gen_Ref(ptr %a157) ret %S.gen.Ref %t864 -endif7163: +endif7167: %t865 = load ptr, ptr %a1 %t866 = load ptr, ptr %a1 %t867 = load %S.ast.Type, ptr %a164 @@ -71911,11 +71937,11 @@ endif7163: %t894 = load { ptr, i64, i64 }, ptr %t892 %t895 = extractvalue { ptr, i64, i64 } %t894, 1 %t896 = icmp uge i64 %t893, %t895 - br i1 %t896, label %range7166, label %inrange7167 -range7166: + br i1 %t896, label %range7170, label %inrange7171 +range7170: call void @finch_panic_index(ptr @.str.4604, i64 3990, i64 %t893, i64 %t895) unreachable -inrange7167: +inrange7171: %t897 = extractvalue { ptr, i64, i64 } %t894, 0 %t898 = getelementptr inbounds i64, ptr %t897, i64 %t893 %t899 = load i64, ptr %t898 @@ -71947,20 +71973,20 @@ inrange7167: %t922 = load ptr, ptr %a1 %t923 = load %S.ast.Type, ptr %a771 %t924 = call i1 @finch.gen.owning(ptr %t922, %S.ast.Type %t923) - br label %logic.from7168 -logic.from7168: - br i1 %t924, label %logic.rhs7169, label %logic.end7170 -logic.rhs7169: + br label %logic.from7172 +logic.from7172: + br i1 %t924, label %logic.rhs7173, label %logic.end7174 +logic.rhs7173: %t925 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t926 = getelementptr inbounds %S.gen.Val, ptr %t925, i32 0, i32 2 %t927 = load i1, ptr %t926 - br label %logic.rend7171 -logic.rend7171: - br label %logic.end7170 -logic.end7170: - %t928 = phi i1 [ false, %logic.from7168 ], [ %t927, %logic.rend7171 ] - br i1 %t928, label %then7172, label %endif7174 -then7172: + br label %logic.rend7175 +logic.rend7175: + br label %logic.end7174 +logic.end7174: + %t928 = phi i1 [ false, %logic.from7172 ], [ %t927, %logic.rend7175 ] + br i1 %t928, label %then7176, label %endif7178 +then7176: %t929 = load ptr, ptr %a1 %t930 = load { ptr, i64, i64 }, ptr %a910 %t931 = load %S.ast.Type, ptr %a771 @@ -71976,8 +72002,8 @@ then7172: store %S.gen.Val %t939, ptr %a921 store %S.gen.Val %t940, ptr %a941 call void @finch.drop.S_gen_Val(ptr %a941) - br label %endif7174 -endif7174: + br label %endif7178 +endif7178: %t942 = load ptr, ptr %a1 %t943 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 %t944 = load %S.gen.Val, ptr %t943 @@ -72013,11 +72039,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range7175, label %inrange7176 -range7175: + br i1 %t8, label %range7179, label %inrange7180 +range7179: call void @finch_panic_index(ptr @.str.4605, i64 4000, i64 0, i64 %t7) unreachable -inrange7176: +inrange7180: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 %t11 = load %S.ast.Node, ptr %t10 @@ -72026,11 +72052,11 @@ inrange7176: store %S.gen.Ref %t13, ptr %a14 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic7177, label %ok7178 -panic7177: + br i1 %t16, label %panic7181, label %ok7182 +panic7181: call void @finch_panic(ptr @.str.4606, i64 4001, ptr @.str.4607) unreachable -ok7178: +ok7182: %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 11 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 @@ -72038,14 +72064,14 @@ ok7178: %t21 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 %t22 = load i1, ptr %t21 %t23 = xor i1 %t22, true - br i1 %t23, label %then7179, label %endif7181 -then7179: + br i1 %t23, label %then7183, label %endif7185 +then7183: %t24 = load ptr, ptr %a1 %t25 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 %t26 = load %S.gen.Val, ptr %t25 call void @finch.gen.hold(ptr %t24, %S.gen.Val %t26) - br label %endif7181 -endif7181: + br label %endif7185 +endif7185: %t27 = load ptr, ptr %a1 %t28 = load %S.ast.Node, ptr %a2 %t29 = load %S.gen.Ref, ptr %a14 @@ -72245,8 +72271,8 @@ entry: store %S.ast.Type %t10, ptr %a11 %t12 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t13 = load i1, ptr %t12 - br i1 %t13, label %then7182, label %endif7184 -then7182: + br i1 %t13, label %then7186, label %endif7188 +then7186: %t14 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t15 = getelementptr inbounds %S.gen.Place, ptr %t14, i32 0, i32 1 %t16 = load %S.ast.Type, ptr %t15 @@ -72257,16 +72283,16 @@ then7182: store %S.ast.Type %t19, ptr %a11 store %S.ast.Type %t20, ptr %a21 call void @finch.drop.S_ast_Type(ptr %a21) - br label %endif7184 -endif7184: + br label %endif7188 +endif7188: %t22 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 store { ptr, i64, i64 } %t23, ptr %a24 store { ptr, i64, i64 } { ptr @.str.4608, i64 3, i64 0 }, ptr %a25 %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) %t27 = icmp ne i32 %t26, 0 - br i1 %t27, label %then7185, label %endif7187 -then7185: + br i1 %t27, label %then7189, label %endif7191 +then7189: %t28 = load ptr, ptr %a1 %t29 = load %S.ast.Node, ptr %a2 %t30 = load %S.gen.Ref, ptr %a3 @@ -72275,18 +72301,18 @@ then7185: %t33 = call %S.gen.Ref @finch.gen.mapIndex(ptr %t28, %S.ast.Node %t29, %S.gen.Ref %t30, %S.ast.Type %t31, i1 %t32) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t33 -endif7187: +endif7191: %t34 = load ptr, ptr %a1 %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 1, %t38 - br i1 %t39, label %range7188, label %inrange7189 -range7188: + br i1 %t39, label %range7192, label %inrange7193 +range7192: call void @finch_panic_index(ptr @.str.4609, i64 4018, i64 1, i64 %t38) unreachable -inrange7189: +inrange7193: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 %t42 = load %S.ast.Node, ptr %t41 @@ -72296,11 +72322,11 @@ inrange7189: %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 - br i1 %t48, label %range7190, label %inrange7191 -range7190: + br i1 %t48, label %range7194, label %inrange7195 +range7194: call void @finch_panic_index(ptr @.str.4611, i64 4018, i64 1, i64 %t47) unreachable -inrange7191: +inrange7195: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 @@ -72322,13 +72348,13 @@ inrange7191: store { ptr, i64, i64 } { ptr @.str.4613, i64 5, i64 0 }, ptr %a64 %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) %t66 = icmp ne i32 %t65, 0 - br i1 %t66, label %then7192, label %endif7194 -then7192: + br i1 %t66, label %then7196, label %endif7198 +then7196: store { ptr, i64, i64 } { ptr @.str.4614, i64 0, i64 0 }, ptr %a67 %t68 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t69 = load i1, ptr %t68 - br i1 %t69, label %then7195, label %else7196 -then7195: + br i1 %t69, label %then7199, label %else7200 +then7199: %t70 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t71 = getelementptr inbounds %S.gen.Place, ptr %t70, i32 0, i32 0 %t72 = load { ptr, i64, i64 }, ptr %t71 @@ -72339,8 +72365,8 @@ then7195: store { ptr, i64, i64 } %t75, ptr %a67 store { ptr, i64, i64 } %t76, ptr %a77 call void @finch_str_drop(ptr %a77) - br label %endif7197 -else7196: + br label %endif7201 +else7200: %t78 = load ptr, ptr %a1 %t79 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t80 = load %S.gen.Val, ptr %t79 @@ -72349,8 +72375,8 @@ else7196: store { ptr, i64, i64 } %t81, ptr %a67 store { ptr, i64, i64 } %t82, ptr %a83 call void @finch_str_drop(ptr %a83) - br label %endif7197 -endif7197: + br label %endif7201 +endif7201: %t84 = load ptr, ptr %a1 %t85 = load { ptr, i64, i64 }, ptr %a60 %t86 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 4 @@ -72411,11 +72437,11 @@ endif7197: %t133 = load { ptr, i64, i64 }, ptr %t132 %t134 = extractvalue { ptr, i64, i64 } %t133, 1 %t135 = icmp uge i64 0, %t134 - br i1 %t135, label %range7198, label %inrange7199 -range7198: + br i1 %t135, label %range7202, label %inrange7203 +range7202: call void @finch_panic_index(ptr @.str.4618, i64 4028, i64 0, i64 %t134) unreachable -inrange7199: +inrange7203: %t136 = extractvalue { ptr, i64, i64 } %t133, 0 %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 0 %t138 = load %S.ast.Type, ptr %t137 @@ -72429,26 +72455,26 @@ inrange7199: call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t143 -endif7194: +endif7198: %t144 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t145 = load { ptr, i64, i64 }, ptr %t144 store { ptr, i64, i64 } %t145, ptr %a146 store { ptr, i64, i64 } { ptr @.str.4619, i64 3, i64 0 }, ptr %a147 %t148 = call i32 @finch_str_eq(ptr %a146, ptr %a147) %t149 = icmp ne i32 %t148, 0 - br i1 %t149, label %then7200, label %endif7202 -then7200: + br i1 %t149, label %then7204, label %endif7206 +then7204: %t150 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 %t152 = load i64, ptr %t151 %t153 = icmp eq i64 %t152, 0 - br i1 %t153, label %then7203, label %endif7205 -then7203: + br i1 %t153, label %then7207, label %endif7209 +then7207: %t154 = load ptr, ptr %a1 %t155 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } { ptr @.str.4620, i64 57, i64 0 }) - br label %endif7205 -endif7205: + br label %endif7209 +endif7209: %t156 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t157 = getelementptr inbounds %S.gen.Val, ptr %t156, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 @@ -72458,8 +72484,8 @@ endif7205: store { ptr, i64, i64 } %t161, ptr %a162 %t163 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t164 = load i1, ptr %t163 - br i1 %t164, label %then7206, label %endif7208 -then7206: + br i1 %t164, label %then7210, label %endif7212 +then7210: %t165 = load ptr, ptr %a1 %t166 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t167 = getelementptr inbounds %S.gen.Place, ptr %t166, i32 0, i32 0 @@ -72469,17 +72495,17 @@ then7206: store { ptr, i64, i64 } %t169, ptr %a162 store { ptr, i64, i64 } %t170, ptr %a171 call void @finch_str_drop(ptr %a171) - br label %endif7208 -endif7208: + br label %endif7212 +endif7212: %t172 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t173 = load { ptr, i64, i64 }, ptr %t172 %t174 = extractvalue { ptr, i64, i64 } %t173, 1 %t175 = icmp uge i64 0, %t174 - br i1 %t175, label %range7209, label %inrange7210 -range7209: + br i1 %t175, label %range7213, label %inrange7214 +range7213: call void @finch_panic_index(ptr @.str.4622, i64 4038, i64 0, i64 %t174) unreachable -inrange7210: +inrange7214: %t176 = extractvalue { ptr, i64, i64 } %t173, 0 %t177 = getelementptr inbounds %S.ast.Type, ptr %t176, i64 0 %t178 = load %S.ast.Type, ptr %t177 @@ -72539,30 +72565,30 @@ inrange7210: call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t223 -endif7202: +endif7206: %t224 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t225 = load { ptr, i64, i64 }, ptr %t224 store { ptr, i64, i64 } %t225, ptr %a226 store { ptr, i64, i64 } { ptr @.str.4626, i64 5, i64 0 }, ptr %a227 %t228 = call i32 @finch_str_eq(ptr %a226, ptr %a227) %t229 = icmp eq i32 %t228, 0 - br label %logic.from7211 -logic.from7211: - br i1 %t229, label %logic.rhs7212, label %logic.end7213 -logic.rhs7212: + br label %logic.from7215 +logic.from7215: + br i1 %t229, label %logic.rhs7216, label %logic.end7217 +logic.rhs7216: %t230 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t231 = load { ptr, i64, i64 }, ptr %t230 store { ptr, i64, i64 } %t231, ptr %a232 store { ptr, i64, i64 } { ptr @.str.4627, i64 3, i64 0 }, ptr %a233 %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) %t235 = icmp eq i32 %t234, 0 - br label %logic.rend7214 -logic.rend7214: - br label %logic.end7213 -logic.end7213: - %t236 = phi i1 [ false, %logic.from7211 ], [ %t235, %logic.rend7214 ] - br i1 %t236, label %then7215, label %endif7217 -then7215: + br label %logic.rend7218 +logic.rend7218: + br label %logic.end7217 +logic.end7217: + %t236 = phi i1 [ false, %logic.from7215 ], [ %t235, %logic.rend7218 ] + br i1 %t236, label %then7219, label %endif7221 +then7219: %t237 = load ptr, ptr %a1 %t238 = load %S.ast.Node, ptr %a2 %t239 = load %S.ast.Type, ptr %a11 @@ -72576,8 +72602,8 @@ then7215: call void @finch.gen.fail(ptr %t237, %S.ast.Node %t238, { ptr, i64, i64 } %t245) store { ptr, i64, i64 } %t245, ptr %a246 call void @finch_str_drop(ptr %a246) - br label %endif7217 -endif7217: + br label %endif7221 +endif7221: %t247 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4629, i64 4, i64 0 }) store %S.ast.Type %t247, ptr %a248 %t249 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 @@ -72586,17 +72612,17 @@ endif7217: store { ptr, i64, i64 } { ptr @.str.4630, i64 5, i64 0 }, ptr %a252 %t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252) %t254 = icmp ne i32 %t253, 0 - br i1 %t254, label %then7218, label %endif7220 -then7218: + br i1 %t254, label %then7222, label %endif7224 +then7222: %t255 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 %t256 = load { ptr, i64, i64 }, ptr %t255 %t257 = extractvalue { ptr, i64, i64 } %t256, 1 %t258 = icmp uge i64 0, %t257 - br i1 %t258, label %range7221, label %inrange7222 -range7221: + br i1 %t258, label %range7225, label %inrange7226 +range7225: call void @finch_panic_index(ptr @.str.4631, i64 4046, i64 0, i64 %t257) unreachable -inrange7222: +inrange7226: %t259 = extractvalue { ptr, i64, i64 } %t256, 0 %t260 = getelementptr inbounds %S.ast.Type, ptr %t259, i64 0 %t261 = load %S.ast.Type, ptr %t260 @@ -72607,36 +72633,36 @@ inrange7222: store %S.ast.Type %t264, ptr %a248 store %S.ast.Type %t265, ptr %a266 call void @finch.drop.S_ast_Type(ptr %a266) - br label %endif7220 -endif7220: + br label %endif7224 +endif7224: %t267 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 %t268 = load { ptr, i64, i64 }, ptr %t267 store { ptr, i64, i64 } %t268, ptr %a269 store { ptr, i64, i64 } { ptr @.str.4632, i64 3, i64 0 }, ptr %a270 %t271 = call i32 @finch_str_eq(ptr %a269, ptr %a270) %t272 = icmp ne i32 %t271, 0 - br label %logic.from7223 -logic.from7223: - br i1 %t272, label %logic.rhs7224, label %logic.end7225 -logic.rhs7224: + br label %logic.from7227 +logic.from7227: + br i1 %t272, label %logic.rhs7228, label %logic.end7229 +logic.rhs7228: %t273 = load i1, ptr %a4 - br label %logic.rend7226 -logic.rend7226: - br label %logic.end7225 -logic.end7225: - %t274 = phi i1 [ false, %logic.from7223 ], [ %t273, %logic.rend7226 ] - br i1 %t274, label %then7227, label %endif7229 -then7227: + br label %logic.rend7230 +logic.rend7230: + br label %logic.end7229 +logic.end7229: + %t274 = phi i1 [ false, %logic.from7227 ], [ %t273, %logic.rend7230 ] + br i1 %t274, label %then7231, label %endif7233 +then7231: %t275 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t276 = load i1, ptr %t275 %t277 = xor i1 %t276, true - br i1 %t277, label %then7230, label %endif7232 -then7230: + br i1 %t277, label %then7234, label %endif7236 +then7234: %t278 = load ptr, ptr %a1 %t279 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t278, %S.ast.Node %t279, { ptr, i64, i64 } { ptr @.str.4633, i64 44, i64 0 }) - br label %endif7232 -endif7232: + br label %endif7236 +endif7236: %t280 = load ptr, ptr %a1 %t281 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t282 = getelementptr inbounds %S.gen.Place, ptr %t281, i32 0, i32 0 @@ -72654,8 +72680,8 @@ endif7232: call void @finch.gen.emit(ptr %t280, { ptr, i64, i64 } %t292) store { ptr, i64, i64 } %t292, ptr %a293 call void @finch_str_drop(ptr %a293) - br label %endif7229 -endif7229: + br label %endif7233 +endif7233: %t294 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t295 = getelementptr inbounds %S.gen.Val, ptr %t294, i32 0, i32 0 %t296 = load { ptr, i64, i64 }, ptr %t295 @@ -72665,8 +72691,8 @@ endif7229: store { ptr, i64, i64 } %t299, ptr %a300 %t301 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t302 = load i1, ptr %t301 - br i1 %t302, label %then7233, label %endif7235 -then7233: + br i1 %t302, label %then7237, label %endif7239 +then7237: %t303 = load ptr, ptr %a1 %t304 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 %t305 = getelementptr inbounds %S.gen.Place, ptr %t304, i32 0, i32 0 @@ -72676,8 +72702,8 @@ then7233: store { ptr, i64, i64 } %t307, ptr %a300 store { ptr, i64, i64 } %t308, ptr %a309 call void @finch_str_drop(ptr %a309) - br label %endif7235 -endif7235: + br label %endif7239 +endif7239: %t310 = load ptr, ptr %a1 %t311 = load { ptr, i64, i64 }, ptr %a300 store { ptr, i64, i64 } { ptr @.str.4637, i64 31, i64 0 }, ptr %a313 @@ -72757,8 +72783,8 @@ endif7235: store { ptr, i64, i64 } %t373, ptr %a375 %t376 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 %t377 = load i1, ptr %t376 - br i1 %t377, label %then7236, label %endif7238 -then7236: + br i1 %t377, label %then7240, label %endif7242 +then7240: %t378 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 %t379 = load { ptr, i64, i64 }, ptr %a375 store { ptr, i64, i64 } %t379, ptr %a380 @@ -72779,7 +72805,7 @@ then7236: call void @finch_str_drop(ptr %a60) call void @finch.drop.S_ast_Type(ptr %a11) ret %S.gen.Ref %t389 -endif7238: +endif7242: %t390 = load ptr, ptr %a1 %t391 = load ptr, ptr %a1 %t392 = load %S.ast.Type, ptr %a248 @@ -72803,20 +72829,20 @@ endif7238: %t409 = load ptr, ptr %a1 %t410 = load %S.ast.Type, ptr %a248 %t411 = call i1 @finch.gen.owning(ptr %t409, %S.ast.Type %t410) - br label %logic.from7239 -logic.from7239: - br i1 %t411, label %logic.rhs7240, label %logic.end7241 -logic.rhs7240: + br label %logic.from7243 +logic.from7243: + br i1 %t411, label %logic.rhs7244, label %logic.end7245 +logic.rhs7244: %t412 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t413 = getelementptr inbounds %S.gen.Val, ptr %t412, i32 0, i32 2 %t414 = load i1, ptr %t413 - br label %logic.rend7242 -logic.rend7242: - br label %logic.end7241 -logic.end7241: - %t415 = phi i1 [ false, %logic.from7239 ], [ %t414, %logic.rend7242 ] - br i1 %t415, label %then7243, label %endif7245 -then7243: + br label %logic.rend7246 +logic.rend7246: + br label %logic.end7245 +logic.end7245: + %t415 = phi i1 [ false, %logic.from7243 ], [ %t414, %logic.rend7246 ] + br i1 %t415, label %then7247, label %endif7249 +then7247: %t416 = load ptr, ptr %a1 %t417 = load { ptr, i64, i64 }, ptr %a397 %t418 = load %S.ast.Type, ptr %a248 @@ -72832,8 +72858,8 @@ then7243: store %S.gen.Val %t426, ptr %a408 store %S.gen.Val %t427, ptr %a428 call void @finch.drop.S_gen_Val(ptr %a428) - br label %endif7245 -endif7245: + br label %endif7249 +endif7249: %t429 = load ptr, ptr %a1 %t430 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 %t431 = load %S.gen.Val, ptr %t430 @@ -72911,14 +72937,14 @@ entry: store i64 %t10, ptr %a11 %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 store i64 0, ptr %a13 - br label %each.cond7246 -each.cond7246: + br label %each.cond7250 +each.cond7250: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 - br i1 %t17, label %each.body7247, label %each.end7249 -each.body7247: + br i1 %t17, label %each.body7251, label %each.end7253 +each.body7251: %t18 = load ptr, ptr %t12 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 %t20 = load { ptr, i64, i64 }, ptr %t19 @@ -72926,8 +72952,8 @@ each.body7247: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp sgt i64 %t23, 0 - br i1 %t24, label %then7250, label %endif7252 -then7250: + br i1 %t24, label %then7254, label %endif7256 +then7254: %t25 = load ptr, ptr %a1 %t26 = load %S.ast.Node, ptr %a2 %t27 = load { ptr, i64, i64 }, ptr %a21 @@ -72944,20 +72970,20 @@ then7250: call void @finch.gen.fail(ptr %t25, %S.ast.Node %t26, { ptr, i64, i64 } %t36) store { ptr, i64, i64 } %t36, ptr %a37 call void @finch_str_drop(ptr %a37) - br label %endif7252 -endif7252: - br label %each.step7248 -each.step7248: + br label %endif7256 +endif7256: + br label %each.step7252 +each.step7252: %t38 = load i64, ptr %a13 %t39 = add i64 %t38, 1 store i64 %t39, ptr %a13 - br label %each.cond7246 -each.end7249: + br label %each.cond7250 +each.end7253: %t40 = load i64, ptr %a11 %t41 = load i64, ptr %a4 %t42 = icmp ne i64 %t40, %t41 - br i1 %t42, label %then7253, label %endif7255 -then7253: + br i1 %t42, label %then7257, label %endif7259 +then7257: %t43 = load ptr, ptr %a1 %t44 = load %S.ast.Node, ptr %a2 %t45 = load { ptr, i64, i64 }, ptr %a5 @@ -73002,8 +73028,8 @@ then7253: call void @finch.gen.fail(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t77) store { ptr, i64, i64 } %t77, ptr %a78 call void @finch_str_drop(ptr %a78) - br label %endif7255 -endif7255: + br label %endif7259 +endif7259: ret void } @@ -73061,19 +73087,19 @@ entry: store { ptr, i64, i64 } { ptr @.str.4651, i64 3, i64 0 }, ptr %a4 %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) %t6 = icmp ne i32 %t5, 0 - br i1 %t6, label %then7256, label %endif7258 -then7256: + br i1 %t6, label %then7260, label %endif7262 +then7260: ret { ptr, i64, i64 } { ptr @.str.4652, i64 3, i64 0 } -endif7258: +endif7262: %t7 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t7, ptr %a8 store { ptr, i64, i64 } { ptr @.str.4653, i64 3, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp ne i32 %t10, 0 - br i1 %t11, label %then7259, label %endif7261 -then7259: + br i1 %t11, label %then7263, label %endif7265 +then7263: ret { ptr, i64, i64 } { ptr @.str.4654, i64 5, i64 0 } -endif7261: +endif7265: %t12 = mul i64 13, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t13 = call ptr @finch_alloc(i64 %t12) %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 0 @@ -73112,38 +73138,38 @@ endif7261: %t34 = load i64, ptr %t31 %t35 = load ptr, ptr %a30 store i64 0, ptr %a36 - br label %find.cond7262 -find.cond7262: + br label %find.cond7266 +find.cond7266: %t37 = load i64, ptr %a36 %t38 = icmp slt i64 %t37, %t34 - br i1 %t38, label %find.body7263, label %find.end7266 -find.body7263: + br i1 %t38, label %find.body7267, label %find.end7270 +find.body7267: %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t37 %t40 = load { ptr, i64, i64 }, ptr %t39 store { ptr, i64, i64 } %t40, ptr %a41 store { ptr, i64, i64 } %t32, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %find.hit7264, label %find.next7265 -find.hit7264: + br i1 %t44, label %find.hit7268, label %find.next7269 +find.hit7268: store i64 %t37, ptr %a33 - br label %find.end7266 -find.next7265: + br label %find.end7270 +find.next7269: %t45 = add i64 %t37, 1 store i64 %t45, ptr %a36 - br label %find.cond7262 -find.end7266: + br label %find.cond7266 +find.end7270: %t46 = load i64, ptr %a33 %t47 = icmp sge i64 %t46, 0 - br i1 %t47, label %then7267, label %endif7269 -then7267: + br i1 %t47, label %then7271, label %endif7273 +then7271: %t48 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t48, ptr %a49 call void @finch_str_copy(ptr %a50, ptr %a49) %t51 = load { ptr, i64, i64 }, ptr %a50 call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } %t51 -endif7269: +endif7273: call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } { ptr @.str.4668, i64 0, i64 0 } } @@ -73464,11 +73490,11 @@ entry: %t10 = load { ptr, i64, i64 }, ptr %t9 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 0, %t11 - br i1 %t12, label %range7270, label %inrange7271 -range7270: + br i1 %t12, label %range7274, label %inrange7275 +range7274: call void @finch_panic_index(ptr @.str.4669, i64 4116, i64 0, i64 %t11) unreachable -inrange7271: +inrange7275: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.ast.Node, ptr %t13, i64 0 %t15 = load %S.ast.Node, ptr %t14 @@ -73483,40 +73509,40 @@ inrange7271: %t24 = load %S.ast.Type, ptr %a23 %t25 = load %S.ast.Type, ptr %a3 %t26 = call i1 @finch.ast.same(%S.ast.Type %t24, %S.ast.Type %t25) - br i1 %t26, label %then7272, label %endif7274 -then7272: + br i1 %t26, label %then7276, label %endif7278 +then7276: %t27 = load %S.gen.Val, ptr %a17 call void @finch.drop.S_ast_Type(ptr %a23) ret %S.gen.Val %t27 -endif7274: +endif7278: %t28 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t29 = load { ptr, i64, i64 }, ptr %t28 store { ptr, i64, i64 } %t29, ptr %a30 store { ptr, i64, i64 } { ptr @.str.4670, i64 3, i64 0 }, ptr %a31 %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) %t33 = icmp ne i32 %t32, 0 - br label %logic.from7275 -logic.from7275: - br i1 %t33, label %logic.rhs7276, label %logic.end7277 -logic.rhs7276: - %t34 = load %S.ast.Type, ptr %a3 - %t35 = call i1 @finch.gen.isNumber(%S.ast.Type %t34) - br label %logic.rend7278 -logic.rend7278: - br label %logic.end7277 -logic.end7277: - %t36 = phi i1 [ false, %logic.from7275 ], [ %t35, %logic.rend7278 ] br label %logic.from7279 logic.from7279: - br i1 %t36, label %logic.rhs7280, label %logic.end7281 + br i1 %t33, label %logic.rhs7280, label %logic.end7281 logic.rhs7280: + %t34 = load %S.ast.Type, ptr %a3 + %t35 = call i1 @finch.gen.isNumber(%S.ast.Type %t34) + br label %logic.rend7282 +logic.rend7282: + br label %logic.end7281 +logic.end7281: + %t36 = phi i1 [ false, %logic.from7279 ], [ %t35, %logic.rend7282 ] + br label %logic.from7283 +logic.from7283: + br i1 %t36, label %logic.rhs7284, label %logic.end7285 +logic.rhs7284: %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null - br i1 %t38, label %panic7282, label %ok7283 -panic7282: + br i1 %t38, label %panic7286, label %ok7287 +panic7286: call void @finch_panic(ptr @.str.4671, i64 4121, ptr @.str.4672) unreachable -ok7283: +ok7287: %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 41 %t40 = load { ptr, i64, i64 }, ptr %t39 %t41 = load %S.ast.Node, ptr %a2 @@ -73527,13 +73553,13 @@ ok7283: %t46 = icmp ne i32 %t45, 0 store { ptr, i64, i64 } %t42, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %logic.rend7284 -logic.rend7284: - br label %logic.end7281 -logic.end7281: - %t48 = phi i1 [ false, %logic.from7279 ], [ %t46, %logic.rend7284 ] - br i1 %t48, label %then7285, label %endif7287 -then7285: + br label %logic.rend7288 +logic.rend7288: + br label %logic.end7285 +logic.end7285: + %t48 = phi i1 [ false, %logic.from7283 ], [ %t46, %logic.rend7288 ] + br i1 %t48, label %then7289, label %endif7291 +then7289: %t49 = load ptr, ptr %a1 %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.4673, i64 17, i64 0 }) store { ptr, i64, i64 } %t50, ptr %a51 @@ -73542,8 +73568,8 @@ then7285: call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.4674, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4675, i64 15, i64 0 }, { ptr, i64, i64 } %t53) %t54 = load %S.ast.Type, ptr %a3 %t55 = call i1 @finch.gen.isInt(%S.ast.Type %t54) - br i1 %t55, label %then7288, label %endif7290 -then7288: + br i1 %t55, label %then7292, label %endif7294 +then7292: %t56 = load ptr, ptr %a1 %t57 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t56, { ptr, i64, i64 } { ptr @.str.4676, i64 3, i64 0 }) store { ptr, i64, i64 } %t57, ptr %a58 @@ -73613,11 +73639,11 @@ then7288: call void @finch_str_drop(ptr %a112) %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null - br i1 %t114, label %panic7291, label %ok7292 -panic7291: + br i1 %t114, label %panic7295, label %ok7296 +panic7295: call void @finch_panic(ptr @.str.4685, i64 4129, ptr @.str.4686) unreachable -ok7292: +ok7296: %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 42 %t116 = load { ptr, i64, i64 }, ptr %t115 store { ptr, i64, i64 } %t111, ptr %t115 @@ -73628,11 +73654,11 @@ ok7292: %t120 = call { ptr, i64, i64 } @finch.gen.load(ptr %t118, { ptr, i64, i64 } { ptr @.str.4687, i64 17, i64 0 }, { ptr, i64, i64 } %t119) %t121 = load ptr, ptr %a1 %t122 = icmp eq ptr %t121, null - br i1 %t122, label %panic7293, label %ok7294 -panic7293: + br i1 %t122, label %panic7297, label %ok7298 +panic7297: call void @finch_panic(ptr @.str.4688, i64 4130, ptr @.str.4689) unreachable -ok7294: +ok7298: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 43 %t124 = load { ptr, i64, i64 }, ptr %t123 store { ptr, i64, i64 } %t120, ptr %t123 @@ -73664,7 +73690,7 @@ ok7294: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t142 -endif7290: +endif7294: %t143 = load ptr, ptr %a1 %t144 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t143, { ptr, i64, i64 } { ptr @.str.4692, i64 6, i64 0 }) store { ptr, i64, i64 } %t144, ptr %a145 @@ -73734,11 +73760,11 @@ endif7290: call void @finch_str_drop(ptr %a199) %t200 = load ptr, ptr %a1 %t201 = icmp eq ptr %t200, null - br i1 %t201, label %panic7295, label %ok7296 -panic7295: + br i1 %t201, label %panic7299, label %ok7300 +panic7299: call void @finch_panic(ptr @.str.4701, i64 4137, ptr @.str.4702) unreachable -ok7296: +ok7300: %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 42 %t203 = load { ptr, i64, i64 }, ptr %t202 store { ptr, i64, i64 } %t198, ptr %t202 @@ -73749,11 +73775,11 @@ ok7296: %t207 = call { ptr, i64, i64 } @finch.gen.load(ptr %t205, { ptr, i64, i64 } { ptr @.str.4703, i64 17, i64 0 }, { ptr, i64, i64 } %t206) %t208 = load ptr, ptr %a1 %t209 = icmp eq ptr %t208, null - br i1 %t209, label %panic7297, label %ok7298 -panic7297: + br i1 %t209, label %panic7301, label %ok7302 +panic7301: call void @finch_panic(ptr @.str.4704, i64 4138, ptr @.str.4705) unreachable -ok7298: +ok7302: %t210 = getelementptr inbounds %S.gen.Gen, ptr %t208, i32 0, i32 43 %t211 = load { ptr, i64, i64 }, ptr %t210 store { ptr, i64, i64 } %t207, ptr %t210 @@ -73785,45 +73811,45 @@ ok7298: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t229 -endif7287: +endif7291: %t230 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t231 = load { ptr, i64, i64 }, ptr %t230 store { ptr, i64, i64 } %t231, ptr %a232 store { ptr, i64, i64 } { ptr @.str.4708, i64 3, i64 0 }, ptr %a233 %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) %t235 = icmp ne i32 %t234, 0 - br label %logic.from7299 -logic.from7299: - br i1 %t235, label %logic.rhs7300, label %logic.end7301 -logic.rhs7300: + br label %logic.from7303 +logic.from7303: + br i1 %t235, label %logic.rhs7304, label %logic.end7305 +logic.rhs7304: %t236 = load %S.ast.Type, ptr %a3 %t237 = call i1 @finch.gen.isNumber(%S.ast.Type %t236) - br label %logic.rend7302 -logic.rend7302: - br label %logic.end7301 -logic.end7301: - %t238 = phi i1 [ false, %logic.from7299 ], [ %t237, %logic.rend7302 ] - br i1 %t238, label %then7303, label %endif7305 -then7303: + br label %logic.rend7306 +logic.rend7306: + br label %logic.end7305 +logic.end7305: + %t238 = phi i1 [ false, %logic.from7303 ], [ %t237, %logic.rend7306 ] + br i1 %t238, label %then7307, label %endif7309 +then7307: %t239 = load ptr, ptr %a1 %t240 = load ptr, ptr %a1 %t241 = icmp eq ptr %t240, null - br i1 %t241, label %panic7306, label %ok7307 -panic7306: + br i1 %t241, label %panic7310, label %ok7311 +panic7310: call void @finch_panic(ptr @.str.4709, i64 4143, ptr @.str.4710) unreachable -ok7307: +ok7311: %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 1 %t243 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t244 = load i64, ptr %t243 %t245 = load { ptr, i64, i64 }, ptr %t242 %t246 = extractvalue { ptr, i64, i64 } %t245, 1 %t247 = icmp uge i64 %t244, %t246 - br i1 %t247, label %range7308, label %inrange7309 -range7308: + br i1 %t247, label %range7312, label %inrange7313 +range7312: call void @finch_panic_index(ptr @.str.4711, i64 4143, i64 %t244, i64 %t246) unreachable -inrange7309: +inrange7313: %t248 = extractvalue { ptr, i64, i64 } %t245, 0 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t244 %t250 = load { ptr, i64, i64 }, ptr %t249 @@ -73831,8 +73857,8 @@ inrange7309: store { ptr, i64, i64 } %t251, ptr %a252 %t253 = load %S.ast.Type, ptr %a3 %t254 = call i1 @finch.gen.isInt(%S.ast.Type %t253) - br i1 %t254, label %then7310, label %endif7312 -then7310: + br i1 %t254, label %then7314, label %endif7316 +then7314: %t255 = load ptr, ptr %a1 %t256 = load ptr, ptr %a1 %t257 = load %S.gen.Val, ptr %a17 @@ -73905,7 +73931,7 @@ then7310: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t311 -endif7312: +endif7316: %t312 = load ptr, ptr %a1 %t313 = load ptr, ptr %a1 %t314 = load %S.gen.Val, ptr %a17 @@ -73978,26 +74004,26 @@ endif7312: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t368 -endif7305: +endif7309: %t369 = load %S.ast.Type, ptr %a3 %t370 = call i1 @finch.gen.isInt(%S.ast.Type %t369) - br label %logic.from7313 -logic.from7313: - br i1 %t370, label %logic.rhs7314, label %logic.end7315 -logic.rhs7314: + br label %logic.from7317 +logic.from7317: + br i1 %t370, label %logic.rhs7318, label %logic.end7319 +logic.rhs7318: %t371 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t372 = load { ptr, i64, i64 }, ptr %t371 store { ptr, i64, i64 } %t372, ptr %a373 store { ptr, i64, i64 } { ptr @.str.4722, i64 4, i64 0 }, ptr %a374 %t375 = call i32 @finch_str_eq(ptr %a373, ptr %a374) %t376 = icmp ne i32 %t375, 0 - br label %logic.rend7316 -logic.rend7316: - br label %logic.end7315 -logic.end7315: - %t377 = phi i1 [ false, %logic.from7313 ], [ %t376, %logic.rend7316 ] - br i1 %t377, label %then7317, label %endif7319 -then7317: + br label %logic.rend7320 +logic.rend7320: + br label %logic.end7319 +logic.end7319: + %t377 = phi i1 [ false, %logic.from7317 ], [ %t376, %logic.rend7320 ] + br i1 %t377, label %then7321, label %endif7323 +then7321: %t378 = load ptr, ptr %a1 %t379 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t380 = load { ptr, i64, i64 }, ptr %t379 @@ -74015,45 +74041,45 @@ then7317: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t390 -endif7319: +endif7323: %t391 = load %S.ast.Type, ptr %a3 %t392 = call i1 @finch.gen.isInt(%S.ast.Type %t391) - br label %logic.from7320 -logic.from7320: - br i1 %t392, label %logic.end7322, label %logic.rhs7321 -logic.rhs7321: + br label %logic.from7324 +logic.from7324: + br i1 %t392, label %logic.end7326, label %logic.rhs7325 +logic.rhs7325: %t393 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t394 = load { ptr, i64, i64 }, ptr %t393 store { ptr, i64, i64 } %t394, ptr %a395 store { ptr, i64, i64 } { ptr @.str.4724, i64 4, i64 0 }, ptr %a396 %t397 = call i32 @finch_str_eq(ptr %a395, ptr %a396) %t398 = icmp ne i32 %t397, 0 - br label %logic.rend7323 -logic.rend7323: - br label %logic.end7322 -logic.end7322: - %t399 = phi i1 [ true, %logic.from7320 ], [ %t398, %logic.rend7323 ] - br i1 %t399, label %then7324, label %endif7326 -then7324: + br label %logic.rend7327 +logic.rend7327: + br label %logic.end7326 +logic.end7326: + %t399 = phi i1 [ true, %logic.from7324 ], [ %t398, %logic.rend7327 ] + br i1 %t399, label %then7328, label %endif7330 +then7328: %t400 = load %S.ast.Type, ptr %a23 %t401 = call i1 @finch.gen.isInt(%S.ast.Type %t400) - br label %logic.from7327 -logic.from7327: - br i1 %t401, label %logic.end7329, label %logic.rhs7328 -logic.rhs7328: + br label %logic.from7331 +logic.from7331: + br i1 %t401, label %logic.end7333, label %logic.rhs7332 +logic.rhs7332: %t402 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t403 = load { ptr, i64, i64 }, ptr %t402 store { ptr, i64, i64 } %t403, ptr %a404 store { ptr, i64, i64 } { ptr @.str.4725, i64 4, i64 0 }, ptr %a405 %t406 = call i32 @finch_str_eq(ptr %a404, ptr %a405) %t407 = icmp ne i32 %t406, 0 - br label %logic.rend7330 -logic.rend7330: - br label %logic.end7329 -logic.end7329: - %t408 = phi i1 [ true, %logic.from7327 ], [ %t407, %logic.rend7330 ] - br i1 %t408, label %then7331, label %endif7333 -then7331: + br label %logic.rend7334 +logic.rend7334: + br label %logic.end7333 +logic.end7333: + %t408 = phi i1 [ true, %logic.from7331 ], [ %t407, %logic.rend7334 ] + br i1 %t408, label %then7335, label %endif7337 +then7335: %t409 = load ptr, ptr %a1 %t410 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t411 = load { ptr, i64, i64 }, ptr %t410 @@ -74069,15 +74095,15 @@ then7331: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t420 -endif7333: +endif7337: %t421 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t422 = load { ptr, i64, i64 }, ptr %t421 store { ptr, i64, i64 } %t422, ptr %a423 store { ptr, i64, i64 } { ptr @.str.4726, i64 4, i64 0 }, ptr %a424 %t425 = call i32 @finch_str_eq(ptr %a423, ptr %a424) %t426 = icmp ne i32 %t425, 0 - br i1 %t426, label %then7334, label %endif7336 -then7334: + br i1 %t426, label %then7338, label %endif7340 +then7338: %t427 = load ptr, ptr %a1 %t428 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t429 = load { ptr, i64, i64 }, ptr %t428 @@ -74114,33 +74140,33 @@ then7334: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t455 -endif7336: +endif7340: %t456 = load %S.ast.Type, ptr %a23 %t457 = call i1 @finch.gen.isFloat(%S.ast.Type %t456) - br label %logic.from7337 -logic.from7337: - br i1 %t457, label %logic.rhs7338, label %logic.end7339 -logic.rhs7338: + br label %logic.from7341 +logic.from7341: + br i1 %t457, label %logic.rhs7342, label %logic.end7343 +logic.rhs7342: %t458 = load %S.ast.Type, ptr %a3 %t459 = call i1 @finch.gen.isInt(%S.ast.Type %t458) - br label %logic.rend7340 -logic.rend7340: - br label %logic.end7339 -logic.end7339: - %t460 = phi i1 [ false, %logic.from7337 ], [ %t459, %logic.rend7340 ] - br i1 %t460, label %then7341, label %endif7343 -then7341: + br label %logic.rend7344 +logic.rend7344: + br label %logic.end7343 +logic.end7343: + %t460 = phi i1 [ false, %logic.from7341 ], [ %t459, %logic.rend7344 ] + br i1 %t460, label %then7345, label %endif7347 +then7345: store { ptr, i64, i64 } { ptr @.str.4729, i64 6, i64 0 }, ptr %a461 %t462 = load %S.ast.Type, ptr %a3 %t463 = call i1 @finch.gen.isSigned(%S.ast.Type %t462) - br i1 %t463, label %then7344, label %endif7346 -then7344: + br i1 %t463, label %then7348, label %endif7350 +then7348: %t464 = load { ptr, i64, i64 }, ptr %a461 store { ptr, i64, i64 } { ptr @.str.4730, i64 6, i64 0 }, ptr %a461 store { ptr, i64, i64 } %t464, ptr %a465 call void @finch_str_drop(ptr %a465) - br label %endif7346 -endif7346: + br label %endif7350 +endif7350: %t466 = load ptr, ptr %a1 %t467 = load { ptr, i64, i64 }, ptr %a461 store { ptr, i64, i64 } %t467, ptr %a469 @@ -74202,17 +74228,17 @@ endif7346: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t514 -endif7343: - br label %endif7326 -endif7326: +endif7347: + br label %endif7330 +endif7330: %t515 = load %S.ast.Type, ptr %a3 %t516 = call i1 @finch.gen.isFloat(%S.ast.Type %t515) - br i1 %t516, label %then7347, label %endif7349 -then7347: + br i1 %t516, label %then7351, label %endif7353 +then7351: %t517 = load %S.ast.Type, ptr %a23 %t518 = call i1 @finch.gen.isInt(%S.ast.Type %t517) - br i1 %t518, label %then7350, label %endif7352 -then7350: + br i1 %t518, label %then7354, label %endif7356 +then7354: %t519 = load ptr, ptr %a1 %t520 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t521 = load { ptr, i64, i64 }, ptr %t520 @@ -74228,11 +74254,11 @@ then7350: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t530 -endif7352: +endif7356: %t531 = load %S.ast.Type, ptr %a23 %t532 = call i1 @finch.gen.isFloat(%S.ast.Type %t531) - br i1 %t532, label %then7353, label %endif7355 -then7353: + br i1 %t532, label %then7357, label %endif7359 +then7357: %t533 = load ptr, ptr %a1 %t534 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t535 = load { ptr, i64, i64 }, ptr %t534 @@ -74248,28 +74274,28 @@ then7353: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t544 -endif7355: - br label %endif7349 -endif7349: +endif7359: + br label %endif7353 +endif7353: %t545 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t546 = load { ptr, i64, i64 }, ptr %t545 store { ptr, i64, i64 } %t546, ptr %a547 store { ptr, i64, i64 } { ptr @.str.4734, i64 4, i64 0 }, ptr %a548 %t549 = call i32 @finch_str_eq(ptr %a547, ptr %a548) %t550 = icmp ne i32 %t549, 0 - br label %logic.from7356 -logic.from7356: - br i1 %t550, label %logic.rhs7357, label %logic.end7358 -logic.rhs7357: + br label %logic.from7360 +logic.from7360: + br i1 %t550, label %logic.rhs7361, label %logic.end7362 +logic.rhs7361: %t551 = load %S.ast.Type, ptr %a23 %t552 = call i1 @finch.gen.isInt(%S.ast.Type %t551) - br label %logic.rend7359 -logic.rend7359: - br label %logic.end7358 -logic.end7358: - %t553 = phi i1 [ false, %logic.from7356 ], [ %t552, %logic.rend7359 ] - br i1 %t553, label %then7360, label %endif7362 -then7360: + br label %logic.rend7363 +logic.rend7363: + br label %logic.end7362 +logic.end7362: + %t553 = phi i1 [ false, %logic.from7360 ], [ %t552, %logic.rend7363 ] + br i1 %t553, label %then7364, label %endif7366 +then7364: %t554 = load ptr, ptr %a1 %t555 = load ptr, ptr %a1 %t556 = load %S.ast.Type, ptr %a23 @@ -74312,45 +74338,45 @@ then7360: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t587 -endif7362: +endif7366: %t588 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t589 = load { ptr, i64, i64 }, ptr %t588 store { ptr, i64, i64 } %t589, ptr %a590 store { ptr, i64, i64 } { ptr @.str.4738, i64 3, i64 0 }, ptr %a591 %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) %t593 = icmp ne i32 %t592, 0 - br label %logic.from7363 -logic.from7363: - br i1 %t593, label %logic.rhs7364, label %logic.end7365 -logic.rhs7364: + br label %logic.from7367 +logic.from7367: + br i1 %t593, label %logic.rhs7368, label %logic.end7369 +logic.rhs7368: %t594 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t595 = load { ptr, i64, i64 }, ptr %t594 store { ptr, i64, i64 } %t595, ptr %a596 store { ptr, i64, i64 } { ptr @.str.4739, i64 3, i64 0 }, ptr %a597 %t598 = call i32 @finch_str_eq(ptr %a596, ptr %a597) %t599 = icmp ne i32 %t598, 0 - br label %logic.from7366 -logic.from7366: - br i1 %t599, label %logic.end7368, label %logic.rhs7367 -logic.rhs7367: + br label %logic.from7370 +logic.from7370: + br i1 %t599, label %logic.end7372, label %logic.rhs7371 +logic.rhs7371: %t600 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t601 = load { ptr, i64, i64 }, ptr %t600 store { ptr, i64, i64 } %t601, ptr %a602 store { ptr, i64, i64 } { ptr @.str.4740, i64 4, i64 0 }, ptr %a603 %t604 = call i32 @finch_str_eq(ptr %a602, ptr %a603) %t605 = icmp ne i32 %t604, 0 - br label %logic.rend7369 -logic.rend7369: - br label %logic.end7368 -logic.end7368: - %t606 = phi i1 [ true, %logic.from7366 ], [ %t605, %logic.rend7369 ] - br label %logic.rend7370 -logic.rend7370: - br label %logic.end7365 -logic.end7365: - %t607 = phi i1 [ false, %logic.from7363 ], [ %t606, %logic.rend7370 ] - br i1 %t607, label %then7371, label %endif7373 -then7371: + br label %logic.rend7373 +logic.rend7373: + br label %logic.end7372 +logic.end7372: + %t606 = phi i1 [ true, %logic.from7370 ], [ %t605, %logic.rend7373 ] + br label %logic.rend7374 +logic.rend7374: + br label %logic.end7369 +logic.end7369: + %t607 = phi i1 [ false, %logic.from7367 ], [ %t606, %logic.rend7374 ] + br i1 %t607, label %then7375, label %endif7377 +then7375: %t608 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t609 = load { ptr, i64, i64 }, ptr %t608 store { ptr, i64, i64 } %t609, ptr %a610 @@ -74365,26 +74391,26 @@ then7371: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t618 -endif7373: +endif7377: %t619 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t620 = load { ptr, i64, i64 }, ptr %t619 store { ptr, i64, i64 } %t620, ptr %a621 store { ptr, i64, i64 } { ptr @.str.4741, i64 3, i64 0 }, ptr %a622 %t623 = call i32 @finch_str_eq(ptr %a621, ptr %a622) %t624 = icmp ne i32 %t623, 0 - br label %logic.from7374 -logic.from7374: - br i1 %t624, label %logic.rhs7375, label %logic.end7376 -logic.rhs7375: + br label %logic.from7378 +logic.from7378: + br i1 %t624, label %logic.rhs7379, label %logic.end7380 +logic.rhs7379: %t625 = load %S.ast.Type, ptr %a23 %t626 = call i1 @finch.gen.isInt(%S.ast.Type %t625) - br label %logic.rend7377 -logic.rend7377: - br label %logic.end7376 -logic.end7376: - %t627 = phi i1 [ false, %logic.from7374 ], [ %t626, %logic.rend7377 ] - br i1 %t627, label %then7378, label %endif7380 -then7378: + br label %logic.rend7381 +logic.rend7381: + br label %logic.end7380 +logic.end7380: + %t627 = phi i1 [ false, %logic.from7378 ], [ %t626, %logic.rend7381 ] + br i1 %t627, label %then7382, label %endif7384 +then7382: %t628 = load ptr, ptr %a1 %t629 = load ptr, ptr %a1 %t630 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 @@ -74418,26 +74444,26 @@ then7378: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t653 -endif7380: +endif7384: %t654 = load %S.ast.Type, ptr %a3 %t655 = call i1 @finch.gen.isInt(%S.ast.Type %t654) - br label %logic.from7381 -logic.from7381: - br i1 %t655, label %logic.rhs7382, label %logic.end7383 -logic.rhs7382: + br label %logic.from7385 +logic.from7385: + br i1 %t655, label %logic.rhs7386, label %logic.end7387 +logic.rhs7386: %t656 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t657 = load { ptr, i64, i64 }, ptr %t656 store { ptr, i64, i64 } %t657, ptr %a658 store { ptr, i64, i64 } { ptr @.str.4745, i64 3, i64 0 }, ptr %a659 %t660 = call i32 @finch_str_eq(ptr %a658, ptr %a659) %t661 = icmp ne i32 %t660, 0 - br label %logic.rend7384 -logic.rend7384: - br label %logic.end7383 -logic.end7383: - %t662 = phi i1 [ false, %logic.from7381 ], [ %t661, %logic.rend7384 ] - br i1 %t662, label %then7385, label %endif7387 -then7385: + br label %logic.rend7388 +logic.rend7388: + br label %logic.end7387 +logic.end7387: + %t662 = phi i1 [ false, %logic.from7385 ], [ %t661, %logic.rend7388 ] + br i1 %t662, label %then7389, label %endif7391 +then7389: %t663 = load ptr, ptr %a1 %t664 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 %t665 = load { ptr, i64, i64 }, ptr %t664 @@ -74474,56 +74500,56 @@ then7385: call void @finch.drop.S_ast_Type(ptr %a23) call void @finch.drop.S_gen_Val(ptr %a17) ret %S.gen.Val %t691 -endif7387: +endif7391: %t692 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 %t693 = load { ptr, i64, i64 }, ptr %t692 store { ptr, i64, i64 } %t693, ptr %a694 store { ptr, i64, i64 } { ptr @.str.4748, i64 3, i64 0 }, ptr %a695 %t696 = call i32 @finch_str_eq(ptr %a694, ptr %a695) %t697 = icmp ne i32 %t696, 0 - br label %logic.from7388 -logic.from7388: - br i1 %t697, label %logic.rhs7389, label %logic.end7390 -logic.rhs7389: + br label %logic.from7392 +logic.from7392: + br i1 %t697, label %logic.rhs7393, label %logic.end7394 +logic.rhs7393: %t698 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 %t699 = load { ptr, i64, i64 }, ptr %t698 store { ptr, i64, i64 } %t699, ptr %a700 store { ptr, i64, i64 } { ptr @.str.4749, i64 3, i64 0 }, ptr %a701 %t702 = call i32 @finch_str_eq(ptr %a700, ptr %a701) %t703 = icmp ne i32 %t702, 0 - br label %logic.rend7391 -logic.rend7391: - br label %logic.end7390 -logic.end7390: - %t704 = phi i1 [ false, %logic.from7388 ], [ %t703, %logic.rend7391 ] - br i1 %t704, label %then7392, label %endif7394 -then7392: + br label %logic.rend7395 +logic.rend7395: + br label %logic.end7394 +logic.end7394: + %t704 = phi i1 [ false, %logic.from7392 ], [ %t703, %logic.rend7395 ] + br i1 %t704, label %then7396, label %endif7398 +then7396: %t705 = load ptr, ptr %a1 %t706 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t707 = load { ptr, i64, i64 }, ptr %t706 %t708 = extractvalue { ptr, i64, i64 } %t707, 1 %t709 = icmp uge i64 0, %t708 - br i1 %t709, label %range7395, label %inrange7396 -range7395: + br i1 %t709, label %range7399, label %inrange7400 +range7399: call void @finch_panic_index(ptr @.str.4750, i64 4192, i64 0, i64 %t708) unreachable -inrange7396: +inrange7400: %t710 = extractvalue { ptr, i64, i64 } %t707, 0 %t711 = getelementptr inbounds %S.ast.Node, ptr %t710, i64 0 %t712 = load %S.ast.Node, ptr %t711 call void @finch.gen.fail(ptr %t705, %S.ast.Node %t712, { ptr, i64, i64 } { ptr @.str.4751, i64 70, i64 0 }) - br label %endif7394 -endif7394: + br label %endif7398 +endif7398: %t713 = load ptr, ptr %a1 %t714 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t715 = load { ptr, i64, i64 }, ptr %t714 %t716 = extractvalue { ptr, i64, i64 } %t715, 1 %t717 = icmp uge i64 0, %t716 - br i1 %t717, label %range7397, label %inrange7398 -range7397: + br i1 %t717, label %range7401, label %inrange7402 +range7401: call void @finch_panic_index(ptr @.str.4752, i64 4194, i64 0, i64 %t716) unreachable -inrange7398: +inrange7402: %t718 = extractvalue { ptr, i64, i64 } %t715, 0 %t719 = getelementptr inbounds %S.ast.Node, ptr %t718, i64 0 %t720 = load %S.ast.Node, ptr %t719 @@ -74583,15 +74609,15 @@ entry: store { ptr, i64, i64 } { ptr @.str.4755, i64 6, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br i1 %t8, label %then7399, label %endif7401 -then7399: + br i1 %t8, label %then7403, label %endif7405 +then7403: %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic7402, label %ok7403 -panic7402: + br i1 %t10, label %panic7406, label %ok7407 +panic7406: call void @finch_panic(ptr @.str.4756, i64 4227, ptr @.str.4757) unreachable -ok7403: +ok7407: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 16 %t12 = load ptr, ptr %a1 %t13 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -74602,25 +74628,25 @@ ok7403: %t18 = load { ptr, i64, i64 }, ptr %t11 %t19 = extractvalue { ptr, i64, i64 } %t18, 1 %t20 = icmp uge i64 %t17, %t19 - br i1 %t20, label %range7404, label %inrange7405 -range7404: + br i1 %t20, label %range7408, label %inrange7409 +range7408: call void @finch_panic_index(ptr @.str.4758, i64 4227, i64 %t17, i64 %t19) unreachable -inrange7405: +inrange7409: %t21 = extractvalue { ptr, i64, i64 } %t18, 0 %t22 = getelementptr inbounds %S.gen.StructDef, ptr %t21, i64 %t17 %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i32 0, i32 9 %t24 = load i64, ptr %t23 ret i64 %t24 -endif7401: +endif7405: %t25 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t26 = load { ptr, i64, i64 }, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 store { ptr, i64, i64 } { ptr @.str.4759, i64 5, i64 0 }, ptr %a28 %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) %t30 = icmp ne i32 %t29, 0 - br i1 %t30, label %then7406, label %endif7408 -then7406: + br i1 %t30, label %then7410, label %endif7412 +then7410: %t31 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t32 = load i64, ptr %t31 %t33 = load ptr, ptr %a1 @@ -74628,73 +74654,73 @@ then7406: %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 0, %t36 - br i1 %t37, label %range7409, label %inrange7410 -range7409: + br i1 %t37, label %range7413, label %inrange7414 +range7413: call void @finch_panic_index(ptr @.str.4760, i64 4230, i64 0, i64 %t36) unreachable -inrange7410: +inrange7414: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds %S.ast.Type, ptr %t38, i64 0 %t40 = load %S.ast.Type, ptr %t39 %t41 = call i64 @finch.gen.sizeBytes(ptr %t33, %S.ast.Type %t40) %t42 = mul i64 %t32, %t41 ret i64 %t42 -endif7408: +endif7412: %t43 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t44 = load { ptr, i64, i64 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 store { ptr, i64, i64 } { ptr @.str.4761, i64 3, i64 0 }, ptr %a46 %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) %t48 = icmp ne i32 %t47, 0 - br label %logic.from7411 -logic.from7411: - br i1 %t48, label %logic.end7413, label %logic.rhs7412 -logic.rhs7412: + br label %logic.from7415 +logic.from7415: + br i1 %t48, label %logic.end7417, label %logic.rhs7416 +logic.rhs7416: %t49 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t50 = load { ptr, i64, i64 }, ptr %t49 store { ptr, i64, i64 } %t50, ptr %a51 store { ptr, i64, i64 } { ptr @.str.4762, i64 3, i64 0 }, ptr %a52 %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) %t54 = icmp ne i32 %t53, 0 - br label %logic.rend7414 -logic.rend7414: - br label %logic.end7413 -logic.end7413: - %t55 = phi i1 [ true, %logic.from7411 ], [ %t54, %logic.rend7414 ] - br i1 %t55, label %then7415, label %endif7417 -then7415: + br label %logic.rend7418 +logic.rend7418: + br label %logic.end7417 +logic.end7417: + %t55 = phi i1 [ true, %logic.from7415 ], [ %t54, %logic.rend7418 ] + br i1 %t55, label %then7419, label %endif7421 +then7419: ret i64 8 -endif7417: +endif7421: %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t57 = load { ptr, i64, i64 }, ptr %t56 store { ptr, i64, i64 } %t57, ptr %a58 store { ptr, i64, i64 } { ptr @.str.4763, i64 5, i64 0 }, ptr %a59 %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) %t61 = icmp ne i32 %t60, 0 - br i1 %t61, label %then7418, label %endif7420 -then7418: + br i1 %t61, label %then7422, label %endif7424 +then7422: ret i64 8 -endif7420: +endif7424: %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t63 = load { ptr, i64, i64 }, ptr %t62 store { ptr, i64, i64 } %t63, ptr %a64 store { ptr, i64, i64 } { ptr @.str.4764, i64 3, i64 0 }, ptr %a65 %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) %t67 = icmp ne i32 %t66, 0 - br i1 %t67, label %then7421, label %endif7423 -then7421: + br i1 %t67, label %then7425, label %endif7427 +then7425: ret i64 4 -endif7423: +endif7427: %t68 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } { ptr @.str.4765, i64 4, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 - br i1 %t73, label %then7424, label %endif7426 -then7424: + br i1 %t73, label %then7428, label %endif7430 +then7428: ret i64 1 -endif7426: +endif7430: %t74 = load %S.ast.Type, ptr %a2 %t75 = call i64 @finch.gen.bitsOf(%S.ast.Type %t74) %t76 = sdiv i64 %t75, 8 @@ -74742,15 +74768,15 @@ entry: store { ptr, i64, i64 } { ptr @.str.4766, i64 6, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp ne i32 %t9, 0 - br i1 %t10, label %then7427, label %else7428 -then7427: + br i1 %t10, label %then7431, label %else7432 +then7431: %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic7430, label %ok7431 -panic7430: + br i1 %t12, label %panic7434, label %ok7435 +panic7434: call void @finch_panic(ptr @.str.4767, i64 4251, ptr @.str.4768) unreachable -ok7431: +ok7435: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 16 %t14 = load ptr, ptr %a1 %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -74761,11 +74787,11 @@ ok7431: %t20 = load { ptr, i64, i64 }, ptr %t13 %t21 = extractvalue { ptr, i64, i64 } %t20, 1 %t22 = icmp uge i64 %t19, %t21 - br i1 %t22, label %range7432, label %inrange7433 -range7432: + br i1 %t22, label %range7436, label %inrange7437 +range7436: call void @finch_panic_index(ptr @.str.4769, i64 4251, i64 %t19, i64 %t21) unreachable -inrange7433: +inrange7437: %t23 = extractvalue { ptr, i64, i64 } %t20, 0 %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i64 %t19 %t25 = load %S.gen.StructDef, ptr %t24 @@ -74777,23 +74803,23 @@ inrange7433: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 %t32 = load i64, ptr %t31 store i64 0, ptr %a33 - br label %for.cond7434 -for.cond7434: + br label %for.cond7438 +for.cond7438: %t34 = load i64, ptr %a33 %t35 = icmp slt i64 %t34, %t32 - br i1 %t35, label %for.body7435, label %for.end7437 -for.body7435: + br i1 %t35, label %for.body7439, label %for.end7441 +for.body7439: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 %t38 = load i64, ptr %a33 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range7438, label %inrange7439 -range7438: + br i1 %t41, label %range7442, label %inrange7443 +range7442: call void @finch_panic_index(ptr @.str.4770, i64 4253, i64 %t38, i64 %t40) unreachable -inrange7439: +inrange7443: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Type, ptr %t42, i64 %t38 %t44 = load %S.ast.Type, ptr %t43 @@ -74803,11 +74829,11 @@ inrange7439: %t48 = load { ptr, i64, i64 }, ptr %t46 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range7440, label %inrange7441 -range7440: + br i1 %t50, label %range7444, label %inrange7445 +range7444: call void @finch_panic_index(ptr @.str.4771, i64 4253, i64 %t47, i64 %t49) unreachable -inrange7441: +inrange7445: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i64, ptr %t51, i64 %t47 %t53 = load i64, ptr %t52 @@ -74815,14 +74841,14 @@ inrange7441: %t55 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t36, %S.ast.Type %t44, i64 %t54) store { ptr, i64, i64 } %t55, ptr %a56 store i64 0, ptr %a57 - br label %each.cond7442 -each.cond7442: + br label %each.cond7446 +each.cond7446: %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a56, i32 0, i32 1 %t59 = load i64, ptr %t58 %t60 = load i64, ptr %a57 %t61 = icmp slt i64 %t60, %t59 - br i1 %t61, label %each.body7443, label %each.end7445 -each.body7443: + br i1 %t61, label %each.body7447, label %each.end7449 +each.body7447: %t62 = load ptr, ptr %a56 %t63 = getelementptr inbounds %S.gen.Leaf, ptr %t62, i64 %t60 %t64 = load %S.gen.Leaf, ptr %t63 @@ -74836,42 +74862,42 @@ each.body7443: %t71 = getelementptr inbounds %S.gen.Leaf, ptr %t70, i64 %t68 store %S.gen.Leaf %t67, ptr %t71 store i64 %t69, ptr %t66 - br label %each.step7444 -each.step7444: + br label %each.step7448 +each.step7448: %t72 = load i64, ptr %a57 %t73 = add i64 %t72, 1 store i64 %t73, ptr %a57 - br label %each.cond7442 -each.end7445: + br label %each.cond7446 +each.end7449: call void @finch.drop.arr_S_gen_Leaf(ptr %a56) - br label %for.step7436 -for.step7436: + br label %for.step7440 +for.step7440: %t74 = load i64, ptr %a33 %t75 = add i64 %t74, 1 store i64 %t75, ptr %a33 - br label %for.cond7434 -for.end7437: + br label %for.cond7438 +for.end7441: call void @finch.drop.S_gen_StructDef(ptr %a29) - br label %endif7429 -else7428: + br label %endif7433 +else7432: %t76 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t77 = load { ptr, i64, i64 }, ptr %t76 store { ptr, i64, i64 } %t77, ptr %a78 store { ptr, i64, i64 } { ptr @.str.4772, i64 5, i64 0 }, ptr %a79 %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) %t81 = icmp ne i32 %t80, 0 - br i1 %t81, label %then7446, label %else7447 -then7446: + br i1 %t81, label %then7450, label %else7451 +then7450: %t82 = load ptr, ptr %a1 %t83 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t84 = load { ptr, i64, i64 }, ptr %t83 %t85 = extractvalue { ptr, i64, i64 } %t84, 1 %t86 = icmp uge i64 0, %t85 - br i1 %t86, label %range7449, label %inrange7450 -range7449: + br i1 %t86, label %range7453, label %inrange7454 +range7453: call void @finch_panic_index(ptr @.str.4773, i64 4258, i64 0, i64 %t85) unreachable -inrange7450: +inrange7454: %t87 = extractvalue { ptr, i64, i64 } %t84, 0 %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i64 0 %t89 = load %S.ast.Type, ptr %t88 @@ -74880,22 +74906,22 @@ inrange7450: %t92 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 %t93 = load i64, ptr %t92 store i64 0, ptr %a94 - br label %for.cond7451 -for.cond7451: + br label %for.cond7455 +for.cond7455: %t95 = load i64, ptr %a94 %t96 = icmp slt i64 %t95, %t93 - br i1 %t96, label %for.body7452, label %for.end7454 -for.body7452: + br i1 %t96, label %for.body7456, label %for.end7458 +for.body7456: %t97 = load ptr, ptr %a1 %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 %t99 = load { ptr, i64, i64 }, ptr %t98 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 0, %t100 - br i1 %t101, label %range7455, label %inrange7456 -range7455: + br i1 %t101, label %range7459, label %inrange7460 +range7459: call void @finch_panic_index(ptr @.str.4774, i64 4260, i64 0, i64 %t100) unreachable -inrange7456: +inrange7460: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 %t104 = load %S.ast.Type, ptr %t103 @@ -74907,14 +74933,14 @@ inrange7456: %t110 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t97, %S.ast.Type %t104, i64 %t109) store { ptr, i64, i64 } %t110, ptr %a111 store i64 0, ptr %a112 - br label %each.cond7457 -each.cond7457: + br label %each.cond7461 +each.cond7461: %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 %t114 = load i64, ptr %t113 %t115 = load i64, ptr %a112 %t116 = icmp slt i64 %t115, %t114 - br i1 %t116, label %each.body7458, label %each.end7460 -each.body7458: + br i1 %t116, label %each.body7462, label %each.end7464 +each.body7462: %t117 = load ptr, ptr %a111 %t118 = getelementptr inbounds %S.gen.Leaf, ptr %t117, i64 %t115 %t119 = load %S.gen.Leaf, ptr %t118 @@ -74928,23 +74954,23 @@ each.body7458: %t126 = getelementptr inbounds %S.gen.Leaf, ptr %t125, i64 %t123 store %S.gen.Leaf %t122, ptr %t126 store i64 %t124, ptr %t121 - br label %each.step7459 -each.step7459: + br label %each.step7463 +each.step7463: %t127 = load i64, ptr %a112 %t128 = add i64 %t127, 1 store i64 %t128, ptr %a112 - br label %each.cond7457 -each.end7460: + br label %each.cond7461 +each.end7464: call void @finch.drop.arr_S_gen_Leaf(ptr %a111) - br label %for.step7453 -for.step7453: + br label %for.step7457 +for.step7457: %t129 = load i64, ptr %a94 %t130 = add i64 %t129, 1 store i64 %t130, ptr %a94 - br label %for.cond7451 -for.end7454: - br label %endif7448 -else7447: + br label %for.cond7455 +for.end7458: + br label %endif7452 +else7451: %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t132 = load i64, ptr %a3 %t133 = insertvalue %S.gen.Leaf zeroinitializer, i64 %t132, 0 @@ -74969,10 +74995,10 @@ else7447: %t151 = getelementptr inbounds %S.gen.Leaf, ptr %t150, i64 %t148 store %S.gen.Leaf %t147, ptr %t151 store i64 %t149, ptr %t131 - br label %endif7448 -endif7448: - br label %endif7429 -endif7429: + br label %endif7452 +endif7452: + br label %endif7433 +endif7433: %t152 = load { ptr, i64, i64 }, ptr %a4 ret { ptr, i64, i64 } %t152 } @@ -75071,28 +75097,28 @@ entry: %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 - br label %logic.from7461 -logic.from7461: - br i1 %t17, label %logic.rhs7462, label %logic.end7463 -logic.rhs7462: + br label %logic.from7465 +logic.from7465: + br i1 %t17, label %logic.rhs7466, label %logic.end7467 +logic.rhs7466: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp sle i64 %t19, 4 - br label %logic.rend7464 -logic.rend7464: - br label %logic.end7463 -logic.end7463: - %t21 = phi i1 [ false, %logic.from7461 ], [ %t20, %logic.rend7464 ] + br label %logic.rend7468 +logic.rend7468: + br label %logic.end7467 +logic.end7467: + %t21 = phi i1 [ false, %logic.from7465 ], [ %t20, %logic.rend7468 ] store i1 %t21, ptr %a22 store i64 0, ptr %a23 - br label %each.cond7465 -each.cond7465: + br label %each.cond7469 +each.cond7469: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load i64, ptr %a23 %t27 = icmp slt i64 %t26, %t25 - br i1 %t27, label %each.body7466, label %each.end7468 -each.body7466: + br i1 %t27, label %each.body7470, label %each.end7472 +each.body7470: %t28 = load ptr, ptr %a14 %t29 = getelementptr inbounds %S.gen.Leaf, ptr %t28, i64 %t26 %t30 = load %S.gen.Leaf, ptr %t29 @@ -75100,66 +75126,66 @@ each.body7466: %t32 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 2 %t33 = load i1, ptr %t32 %t34 = xor i1 %t33, true - br label %logic.from7469 -logic.from7469: - br i1 %t34, label %logic.end7471, label %logic.rhs7470 -logic.rhs7470: + br label %logic.from7473 +logic.from7473: + br i1 %t34, label %logic.end7475, label %logic.rhs7474 +logic.rhs7474: %t35 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 3 %t36 = load i1, ptr %t35 %t37 = load { ptr, i64, i64 }, ptr %a14 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 0, %t38 - br i1 %t39, label %range7472, label %inrange7473 -range7472: + br i1 %t39, label %range7476, label %inrange7477 +range7476: call void @finch_panic_index(ptr @.str.4776, i64 4277, i64 0, i64 %t38) unreachable -inrange7473: +inrange7477: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.gen.Leaf, ptr %t40, i64 0 %t42 = getelementptr inbounds %S.gen.Leaf, ptr %t41, i32 0, i32 3 %t43 = load i1, ptr %t42 %t44 = icmp ne i1 %t36, %t43 - br label %logic.rend7474 -logic.rend7474: - br label %logic.end7471 -logic.end7471: - %t45 = phi i1 [ true, %logic.from7469 ], [ %t44, %logic.rend7474 ] - br i1 %t45, label %then7475, label %endif7477 -then7475: + br label %logic.rend7478 +logic.rend7478: + br label %logic.end7475 +logic.end7475: + %t45 = phi i1 [ true, %logic.from7473 ], [ %t44, %logic.rend7478 ] + br i1 %t45, label %then7479, label %endif7481 +then7479: store i1 false, ptr %a22 - br label %endif7477 -endif7477: - br label %each.step7467 -each.step7467: + br label %endif7481 +endif7481: + br label %each.step7471 +each.step7471: %t46 = load i64, ptr %a23 %t47 = add i64 %t46, 1 store i64 %t47, ptr %a23 - br label %each.cond7465 -each.end7468: + br label %each.cond7469 +each.end7472: %t48 = load i1, ptr %a22 - br i1 %t48, label %then7478, label %endif7480 -then7478: + br i1 %t48, label %then7482, label %endif7484 +then7482: store { ptr, i64, i64 } { ptr @.str.4777, i64 5, i64 0 }, ptr %a49 %t50 = load { ptr, i64, i64 }, ptr %a14 %t51 = extractvalue { ptr, i64, i64 } %t50, 1 %t52 = icmp uge i64 0, %t51 - br i1 %t52, label %range7481, label %inrange7482 -range7481: + br i1 %t52, label %range7485, label %inrange7486 +range7485: call void @finch_panic_index(ptr @.str.4778, i64 4283, i64 0, i64 %t51) unreachable -inrange7482: +inrange7486: %t53 = extractvalue { ptr, i64, i64 } %t50, 0 %t54 = getelementptr inbounds %S.gen.Leaf, ptr %t53, i64 0 %t55 = getelementptr inbounds %S.gen.Leaf, ptr %t54, i32 0, i32 3 %t56 = load i1, ptr %t55 - br i1 %t56, label %then7483, label %endif7485 -then7483: + br i1 %t56, label %then7487, label %endif7489 +then7487: %t57 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } { ptr @.str.4779, i64 6, i64 0 }, ptr %a49 store { ptr, i64, i64 } %t57, ptr %a58 call void @finch_str_drop(ptr %a58) - br label %endif7485 -endif7485: + br label %endif7489 +endif7489: %t59 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 %t60 = load { ptr, i64, i64 }, ptr %t59 store { ptr, i64, i64 } { ptr @.str.4780, i64 6, i64 0 }, ptr %t59 @@ -75205,14 +75231,14 @@ endif7485: store i64 %t90, ptr %t63 store { ptr, i64, i64 } zeroinitializer, ptr %a93 store i64 0, ptr %a94 - br label %each.cond7486 -each.cond7486: + br label %each.cond7490 +each.cond7490: %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t96 = load i64, ptr %t95 %t97 = load i64, ptr %a94 %t98 = icmp slt i64 %t97, %t96 - br i1 %t98, label %each.body7487, label %each.end7489 -each.body7487: + br i1 %t98, label %each.body7491, label %each.end7493 +each.body7491: %t99 = load ptr, ptr %a14 %t100 = getelementptr inbounds %S.gen.Leaf, ptr %t99, i64 %t97 %t101 = load %S.gen.Leaf, ptr %t100 @@ -75229,13 +75255,13 @@ each.body7487: %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i64 %t108 store { ptr, i64, i64 } %t107, ptr %t111 store i64 %t109, ptr %t103 - br label %each.step7488 -each.step7488: + br label %each.step7492 +each.step7492: %t112 = load i64, ptr %a94 %t113 = add i64 %t112, 1 store i64 %t113, ptr %a94 - br label %each.cond7486 -each.end7489: + br label %each.cond7490 +each.end7493: %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4785, i64 2, i64 0 }, ptr %a115 call void @finch_str_join(ptr %a116, ptr %a93, ptr %a115) @@ -75262,11 +75288,11 @@ each.end7489: call void @finch_str_drop(ptr %a49) call void @finch.drop.arr_S_gen_Leaf(ptr %a14) ret %S.gen.Abi %t131 -endif7480: +endif7484: %t132 = load i64, ptr %a4 %t133 = icmp sgt i64 %t132, 16 - br i1 %t133, label %then7490, label %endif7492 -then7490: + br i1 %t133, label %then7494, label %endif7496 +then7494: %t134 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 %t135 = load { ptr, i64, i64 }, ptr %t134 store { ptr, i64, i64 } { ptr @.str.4787, i64 8, i64 0 }, ptr %t134 @@ -75275,7 +75301,7 @@ then7490: %t137 = load %S.gen.Abi, ptr %a10 call void @finch.drop.arr_S_gen_Leaf(ptr %a14) ret %S.gen.Abi %t137 -endif7492: +endif7496: %t138 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 %t139 = load { ptr, i64, i64 }, ptr %t138 store { ptr, i64, i64 } { ptr @.str.4788, i64 6, i64 0 }, ptr %t138 @@ -75283,8 +75309,8 @@ endif7492: call void @finch_str_drop(ptr %a140) %t141 = load i64, ptr %a5 %t142 = icmp sge i64 %t141, 16 - br i1 %t142, label %then7493, label %else7494 -then7493: + br i1 %t142, label %then7497, label %else7498 +then7497: %t143 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 %t145 = load i64, ptr %t144 @@ -75299,12 +75325,12 @@ then7493: store { ptr, i64, i64 } { ptr @.str.4790, i64 4, i64 0 }, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 call void @finch_str_drop(ptr %a151) - br label %endif7495 -else7494: + br label %endif7499 +else7498: %t152 = load i64, ptr %a4 %t153 = icmp sle i64 %t152, 8 - br i1 %t153, label %then7496, label %else7497 -then7496: + br i1 %t153, label %then7500, label %else7501 +then7500: %t154 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 %t156 = load i64, ptr %t155 @@ -75329,8 +75355,8 @@ then7496: store { ptr, i64, i64 } %t168, ptr %t169 store { ptr, i64, i64 } %t170, ptr %a171 call void @finch_str_drop(ptr %a171) - br label %endif7498 -else7497: + br label %endif7502 +else7501: %t172 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i32 0, i32 1 %t174 = load i64, ptr %t173 @@ -75345,10 +75371,10 @@ else7497: store { ptr, i64, i64 } { ptr @.str.4794, i64 9, i64 0 }, ptr %t178 store { ptr, i64, i64 } %t179, ptr %a180 call void @finch_str_drop(ptr %a180) - br label %endif7498 -endif7498: - br label %endif7495 -endif7495: + br label %endif7502 +endif7502: + br label %endif7499 +endif7499: %t181 = load %S.gen.Abi, ptr %a10 call void @finch.drop.arr_S_gen_Leaf(ptr %a14) ret %S.gen.Abi %t181 @@ -75429,18 +75455,18 @@ entry: store { ptr, i64, i64 } { ptr @.str.4796, i64 6, i64 0 }, ptr %a8 %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) %t10 = icmp eq i32 %t9, 0 - br i1 %t10, label %then7499, label %endif7501 -then7499: + br i1 %t10, label %then7503, label %endif7505 +then7503: %t11 = load %S.gen.Abi, ptr %a4 ret %S.gen.Abi %t11 -endif7501: +endif7505: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic7502, label %ok7503 -panic7502: + br i1 %t13, label %panic7506, label %ok7507 +panic7506: call void @finch_panic(ptr @.str.4797, i64 4318, ptr @.str.4798) unreachable -ok7503: +ok7507: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 @@ -75451,11 +75477,11 @@ ok7503: %t21 = load { ptr, i64, i64 }, ptr %t14 %t22 = extractvalue { ptr, i64, i64 } %t21, 1 %t23 = icmp uge i64 %t20, %t22 - br i1 %t23, label %range7504, label %inrange7505 -range7504: + br i1 %t23, label %range7508, label %inrange7509 +range7508: call void @finch_panic_index(ptr @.str.4799, i64 4318, i64 %t20, i64 %t22) unreachable -inrange7505: +inrange7509: %t24 = extractvalue { ptr, i64, i64 } %t21, 0 %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 %t26 = load %S.gen.StructDef, ptr %t25 @@ -75471,26 +75497,26 @@ inrange7505: %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 %t36 = load i64, ptr %t35 %t37 = icmp sgt i64 %t36, 8 - br i1 %t37, label %then7506, label %endif7508 -then7506: + br i1 %t37, label %then7510, label %endif7512 +then7510: %t38 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 %t39 = load i64, ptr %t38 %t40 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 store i64 %t39, ptr %t40 - br label %endif7508 -endif7508: + br label %endif7512 +endif7512: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic7509, label %ok7510 -panic7509: + br i1 %t42, label %panic7513, label %ok7514 +panic7513: call void @finch_panic(ptr @.str.4800, i64 4324, ptr @.str.4801) unreachable -ok7510: +ok7514: %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 31 %t44 = getelementptr inbounds %S.platform.Target, ptr %t43, i32 0, i32 4 %t45 = load i1, ptr %t44 - br i1 %t45, label %then7511, label %endif7513 -then7511: + br i1 %t45, label %then7515, label %endif7517 +then7515: %t46 = load ptr, ptr %a1 %t47 = load %S.ast.Type, ptr %a2 %t48 = load %S.gen.Abi, ptr %a4 @@ -75501,56 +75527,56 @@ then7511: call void @finch.drop.S_gen_StructDef(ptr %a30) call void @finch.drop.S_gen_Abi(ptr %a4) ret %S.gen.Abi %t52 -endif7513: +endif7517: %t53 = load ptr, ptr %a1 %t54 = icmp eq ptr %t53, null - br i1 %t54, label %panic7514, label %ok7515 -panic7514: + br i1 %t54, label %panic7518, label %ok7519 +panic7518: call void @finch_panic(ptr @.str.4802, i64 4327, ptr @.str.4803) unreachable -ok7515: +ok7519: %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 31 %t56 = getelementptr inbounds %S.platform.Target, ptr %t55, i32 0, i32 1 %t57 = load i1, ptr %t56 - br i1 %t57, label %then7516, label %endif7518 -then7516: + br i1 %t57, label %then7520, label %endif7522 +then7520: %t58 = load i64, ptr %a33 %t59 = icmp eq i64 %t58, 1 - br label %logic.from7519 -logic.from7519: - br i1 %t59, label %logic.end7521, label %logic.rhs7520 -logic.rhs7520: - %t60 = load i64, ptr %a33 - %t61 = icmp eq i64 %t60, 2 - br label %logic.rend7522 -logic.rend7522: - br label %logic.end7521 -logic.end7521: - %t62 = phi i1 [ true, %logic.from7519 ], [ %t61, %logic.rend7522 ] br label %logic.from7523 logic.from7523: - br i1 %t62, label %logic.end7525, label %logic.rhs7524 + br i1 %t59, label %logic.end7525, label %logic.rhs7524 logic.rhs7524: - %t63 = load i64, ptr %a33 - %t64 = icmp eq i64 %t63, 4 + %t60 = load i64, ptr %a33 + %t61 = icmp eq i64 %t60, 2 br label %logic.rend7526 logic.rend7526: br label %logic.end7525 logic.end7525: - %t65 = phi i1 [ true, %logic.from7523 ], [ %t64, %logic.rend7526 ] + %t62 = phi i1 [ true, %logic.from7523 ], [ %t61, %logic.rend7526 ] br label %logic.from7527 logic.from7527: - br i1 %t65, label %logic.end7529, label %logic.rhs7528 + br i1 %t62, label %logic.end7529, label %logic.rhs7528 logic.rhs7528: - %t66 = load i64, ptr %a33 - %t67 = icmp eq i64 %t66, 8 + %t63 = load i64, ptr %a33 + %t64 = icmp eq i64 %t63, 4 br label %logic.rend7530 logic.rend7530: br label %logic.end7529 logic.end7529: - %t68 = phi i1 [ true, %logic.from7527 ], [ %t67, %logic.rend7530 ] - br i1 %t68, label %then7531, label %else7532 -then7531: + %t65 = phi i1 [ true, %logic.from7527 ], [ %t64, %logic.rend7530 ] + br label %logic.from7531 +logic.from7531: + br i1 %t65, label %logic.end7533, label %logic.rhs7532 +logic.rhs7532: + %t66 = load i64, ptr %a33 + %t67 = icmp eq i64 %t66, 8 + br label %logic.rend7534 +logic.rend7534: + br label %logic.end7533 +logic.end7533: + %t68 = phi i1 [ true, %logic.from7531 ], [ %t67, %logic.rend7534 ] + br i1 %t68, label %then7535, label %else7536 +then7535: %t69 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t70 = load { ptr, i64, i64 }, ptr %t69 store { ptr, i64, i64 } { ptr @.str.4804, i64 6, i64 0 }, ptr %t69 @@ -75579,11 +75605,11 @@ then7531: %t88 = load { ptr, i64, i64 }, ptr %t87 %t89 = extractvalue { ptr, i64, i64 } %t88, 1 %t90 = icmp uge i64 0, %t89 - br i1 %t90, label %range7534, label %inrange7535 -range7534: + br i1 %t90, label %range7538, label %inrange7539 +range7538: call void @finch_panic_index(ptr @.str.4806, i64 4333, i64 0, i64 %t89) unreachable -inrange7535: +inrange7539: %t91 = extractvalue { ptr, i64, i64 } %t88, 0 %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 0 %t93 = load { ptr, i64, i64 }, ptr %t92 @@ -75595,34 +75621,34 @@ inrange7535: store { ptr, i64, i64 } %t97, ptr %t94 store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_drop(ptr %a99) - br label %endif7533 -else7532: + br label %endif7537 +else7536: %t100 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t101 = load { ptr, i64, i64 }, ptr %t100 store { ptr, i64, i64 } { ptr @.str.4807, i64 8, i64 0 }, ptr %t100 store { ptr, i64, i64 } %t101, ptr %a102 call void @finch_str_drop(ptr %a102) - br label %endif7533 -endif7533: + br label %endif7537 +endif7537: %t103 = load %S.gen.Abi, ptr %a4 call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t103 -endif7518: +endif7522: %t104 = load i64, ptr %a33 %t105 = icmp sgt i64 %t104, 16 - br label %logic.from7536 -logic.from7536: - br i1 %t105, label %logic.end7538, label %logic.rhs7537 -logic.rhs7537: + br label %logic.from7540 +logic.from7540: + br i1 %t105, label %logic.end7542, label %logic.rhs7541 +logic.rhs7541: %t106 = load i64, ptr %a33 %t107 = icmp eq i64 %t106, 0 - br label %logic.rend7539 -logic.rend7539: - br label %logic.end7538 -logic.end7538: - %t108 = phi i1 [ true, %logic.from7536 ], [ %t107, %logic.rend7539 ] - br i1 %t108, label %then7540, label %endif7542 -then7540: + br label %logic.rend7543 +logic.rend7543: + br label %logic.end7542 +logic.end7542: + %t108 = phi i1 [ true, %logic.from7540 ], [ %t107, %logic.rend7543 ] + br i1 %t108, label %then7544, label %endif7546 +then7544: %t109 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t110 = load { ptr, i64, i64 }, ptr %t109 store { ptr, i64, i64 } { ptr @.str.4808, i64 6, i64 0 }, ptr %t109 @@ -75631,7 +75657,7 @@ then7540: %t112 = load %S.gen.Abi, ptr %a4 call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t112 -endif7542: +endif7546: %t113 = load ptr, ptr %a1 %t114 = load %S.ast.Type, ptr %a2 %t115 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t113, %S.ast.Type %t114, i64 0) @@ -75661,14 +75687,14 @@ endif7542: %t135 = insertvalue { ptr, i64, i64 } %t134, i64 2, 2 store { ptr, i64, i64 } %t135, ptr %a136 store i64 0, ptr %a137 - br label %each.cond7543 -each.cond7543: + br label %each.cond7547 +each.cond7547: %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %a116, i32 0, i32 1 %t139 = load i64, ptr %t138 %t140 = load i64, ptr %a137 %t141 = icmp slt i64 %t140, %t139 - br i1 %t141, label %each.body7544, label %each.end7546 -each.body7544: + br i1 %t141, label %each.body7548, label %each.end7550 +each.body7548: %t142 = load ptr, ptr %a116 %t143 = getelementptr inbounds %S.gen.Leaf, ptr %t142, i64 %t140 %t144 = load %S.gen.Leaf, ptr %t143 @@ -75678,24 +75704,24 @@ each.body7544: store i64 %t147, ptr %a148 %t149 = load i64, ptr %a148 %t150 = icmp sgt i64 %t149, 8 - br i1 %t150, label %then7547, label %endif7549 -then7547: + br i1 %t150, label %then7551, label %endif7553 +then7551: store i64 8, ptr %a148 - br label %endif7549 -endif7549: + br label %endif7553 +endif7553: %t151 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 %t152 = load i64, ptr %t151 %t153 = load i64, ptr %a148 %t154 = icmp eq i64 %t153, 0 - br i1 %t154, label %panic7550, label %ok7551 -panic7550: + br i1 %t154, label %panic7554, label %ok7555 +panic7554: call void @finch_panic(ptr @.str.4809, i64 4352, ptr @.str.4810) unreachable -ok7551: +ok7555: %t155 = srem i64 %t152, %t153 %t156 = icmp ne i64 %t155, 0 - br i1 %t156, label %then7552, label %endif7554 -then7552: + br i1 %t156, label %then7556, label %endif7558 +then7556: %t157 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 store { ptr, i64, i64 } { ptr @.str.4811, i64 6, i64 0 }, ptr %t157 @@ -75707,7 +75733,7 @@ then7552: call void @finch.drop.arr_S_gen_Leaf(ptr %a116) call void @finch.drop.S_gen_StructDef(ptr %a30) ret %S.gen.Abi %t160 -endif7554: +endif7558: %t161 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 %t162 = load i64, ptr %t161 %t163 = sdiv i64 %t162, 8 @@ -75716,82 +75742,82 @@ endif7554: %t166 = load { ptr, i64, i64 }, ptr %a128 %t167 = extractvalue { ptr, i64, i64 } %t166, 1 %t168 = icmp uge i64 %t165, %t167 - br i1 %t168, label %range7555, label %inrange7556 -range7555: + br i1 %t168, label %range7559, label %inrange7560 +range7559: call void @finch_panic_index(ptr @.str.4812, i64 4357, i64 %t165, i64 %t167) unreachable -inrange7556: +inrange7560: %t169 = extractvalue { ptr, i64, i64 } %t166, 0 %t170 = getelementptr inbounds i64, ptr %t169, i64 %t165 %t171 = load i64, ptr %t170 %t172 = icmp eq i64 %t171, 1 - br label %logic.from7557 -logic.from7557: - br i1 %t172, label %logic.end7559, label %logic.rhs7558 -logic.rhs7558: + br label %logic.from7561 +logic.from7561: + br i1 %t172, label %logic.end7563, label %logic.rhs7562 +logic.rhs7562: %t173 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 2 %t174 = load i1, ptr %t173 %t175 = xor i1 %t174, true - br label %logic.rend7560 -logic.rend7560: - br label %logic.end7559 -logic.end7559: - %t176 = phi i1 [ true, %logic.from7557 ], [ %t175, %logic.rend7560 ] - br i1 %t176, label %then7561, label %else7562 -then7561: + br label %logic.rend7564 +logic.rend7564: + br label %logic.end7563 +logic.end7563: + %t176 = phi i1 [ true, %logic.from7561 ], [ %t175, %logic.rend7564 ] + br i1 %t176, label %then7565, label %else7566 +then7565: %t177 = load i64, ptr %a164 %t178 = load { ptr, i64, i64 }, ptr %a128 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 %t177, %t179 - br i1 %t180, label %range7564, label %inrange7565 -range7564: + br i1 %t180, label %range7568, label %inrange7569 +range7568: call void @finch_panic_index(ptr @.str.4813, i64 4358, i64 %t177, i64 %t179) unreachable -inrange7565: +inrange7569: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds i64, ptr %t181, i64 %t177 store i64 1, ptr %t182 - br label %endif7563 -else7562: + br label %endif7567 +else7566: %t183 = load i64, ptr %a164 %t184 = load { ptr, i64, i64 }, ptr %a128 %t185 = extractvalue { ptr, i64, i64 } %t184, 1 %t186 = icmp uge i64 %t183, %t185 - br i1 %t186, label %range7566, label %inrange7567 -range7566: + br i1 %t186, label %range7570, label %inrange7571 +range7570: call void @finch_panic_index(ptr @.str.4814, i64 4360, i64 %t183, i64 %t185) unreachable -inrange7567: +inrange7571: %t187 = extractvalue { ptr, i64, i64 } %t184, 0 %t188 = getelementptr inbounds i64, ptr %t187, i64 %t183 store i64 2, ptr %t188 - br label %endif7563 -endif7563: + br label %endif7567 +endif7567: %t189 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 3 %t190 = load i1, ptr %t189 - br i1 %t190, label %then7568, label %endif7570 -then7568: + br i1 %t190, label %then7572, label %endif7574 +then7572: %t191 = load i64, ptr %a164 %t192 = load { ptr, i64, i64 }, ptr %a136 %t193 = extractvalue { ptr, i64, i64 } %t192, 1 %t194 = icmp uge i64 %t191, %t193 - br i1 %t194, label %range7571, label %inrange7572 -range7571: + br i1 %t194, label %range7575, label %inrange7576 +range7575: call void @finch_panic_index(ptr @.str.4815, i64 4363, i64 %t191, i64 %t193) unreachable -inrange7572: +inrange7576: %t195 = extractvalue { ptr, i64, i64 } %t192, 0 %t196 = getelementptr inbounds i1, ptr %t195, i64 %t191 store i1 true, ptr %t196 - br label %endif7570 -endif7570: - br label %each.step7545 -each.step7545: + br label %endif7574 +endif7574: + br label %each.step7549 +each.step7549: %t197 = load i64, ptr %a137 %t198 = add i64 %t197, 1 store i64 %t198, ptr %a137 - br label %each.cond7543 -each.end7546: + br label %each.cond7547 +each.end7550: %t199 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 %t200 = load { ptr, i64, i64 }, ptr %t199 store { ptr, i64, i64 } { ptr @.str.4816, i64 6, i64 0 }, ptr %t199 @@ -75799,12 +75825,12 @@ each.end7546: call void @finch_str_drop(ptr %a201) %t202 = load i64, ptr %a120 store i64 0, ptr %a203 - br label %for.cond7573 -for.cond7573: + br label %for.cond7577 +for.cond7577: %t204 = load i64, ptr %a203 %t205 = icmp slt i64 %t204, %t202 - br i1 %t205, label %for.body7574, label %for.end7576 -for.body7574: + br i1 %t205, label %for.body7578, label %for.end7580 +for.body7578: %t206 = load i64, ptr %a33 %t207 = load i64, ptr %a203 %t208 = mul i64 8, %t207 @@ -75812,40 +75838,40 @@ for.body7574: store i64 %t209, ptr %a210 %t211 = load i64, ptr %a210 %t212 = icmp sgt i64 %t211, 8 - br i1 %t212, label %then7577, label %endif7579 -then7577: + br i1 %t212, label %then7581, label %endif7583 +then7581: store i64 8, ptr %a210 - br label %endif7579 -endif7579: + br label %endif7583 +endif7583: %t213 = load i64, ptr %a203 %t214 = load { ptr, i64, i64 }, ptr %a128 %t215 = extractvalue { ptr, i64, i64 } %t214, 1 %t216 = icmp uge i64 %t213, %t215 - br i1 %t216, label %range7580, label %inrange7581 -range7580: + br i1 %t216, label %range7584, label %inrange7585 +range7584: call void @finch_panic_index(ptr @.str.4817, i64 4372, i64 %t213, i64 %t215) unreachable -inrange7581: +inrange7585: %t217 = extractvalue { ptr, i64, i64 } %t214, 0 %t218 = getelementptr inbounds i64, ptr %t217, i64 %t213 %t219 = load i64, ptr %t218 %t220 = icmp eq i64 %t219, 2 - br i1 %t220, label %then7582, label %else7583 -then7582: + br i1 %t220, label %then7586, label %else7587 +then7586: %t221 = load i64, ptr %a203 %t222 = load { ptr, i64, i64 }, ptr %a136 %t223 = extractvalue { ptr, i64, i64 } %t222, 1 %t224 = icmp uge i64 %t221, %t223 - br i1 %t224, label %range7585, label %inrange7586 -range7585: + br i1 %t224, label %range7589, label %inrange7590 +range7589: call void @finch_panic_index(ptr @.str.4818, i64 4373, i64 %t221, i64 %t223) unreachable -inrange7586: +inrange7590: %t225 = extractvalue { ptr, i64, i64 } %t222, 0 %t226 = getelementptr inbounds i1, ptr %t225, i64 %t221 %t227 = load i1, ptr %t226 - br i1 %t227, label %then7587, label %else7588 -then7587: + br i1 %t227, label %then7591, label %else7592 +then7591: %t228 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i32 0, i32 1 %t230 = load i64, ptr %t229 @@ -75855,12 +75881,12 @@ then7587: %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 %t230 store { ptr, i64, i64 } { ptr @.str.4819, i64 6, i64 0 }, ptr %t233 store i64 %t231, ptr %t229 - br label %endif7589 -else7588: + br label %endif7593 +else7592: %t234 = load i64, ptr %a210 %t235 = icmp sgt i64 %t234, 4 - br i1 %t235, label %then7590, label %else7591 -then7590: + br i1 %t235, label %then7594, label %else7595 +then7594: %t236 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1 %t238 = load i64, ptr %t237 @@ -75870,8 +75896,8 @@ then7590: %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i64 %t238 store { ptr, i64, i64 } { ptr @.str.4820, i64 11, i64 0 }, ptr %t241 store i64 %t239, ptr %t237 - br label %endif7592 -else7591: + br label %endif7596 +else7595: %t242 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 %t244 = load i64, ptr %t243 @@ -75881,12 +75907,12 @@ else7591: %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 store { ptr, i64, i64 } { ptr @.str.4821, i64 5, i64 0 }, ptr %t247 store i64 %t245, ptr %t243 - br label %endif7592 -endif7592: - br label %endif7589 -endif7589: - br label %endif7584 -else7583: + br label %endif7596 +endif7596: + br label %endif7593 +endif7593: + br label %endif7588 +else7587: %t248 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 %t250 = load i64, ptr %a210 @@ -75906,30 +75932,30 @@ else7583: %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t261, i64 %t259 store { ptr, i64, i64 } %t258, ptr %t262 store i64 %t260, ptr %t249 - br label %endif7584 -endif7584: - br label %for.step7575 -for.step7575: + br label %endif7588 +endif7588: + br label %for.step7579 +for.step7579: %t263 = load i64, ptr %a203 %t264 = add i64 %t263, 1 store i64 %t264, ptr %a203 - br label %for.cond7573 -for.end7576: + br label %for.cond7577 +for.end7580: %t265 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1 %t267 = load i64, ptr %t266 %t268 = icmp eq i64 %t267, 1 - br i1 %t268, label %then7593, label %else7594 -then7593: + br i1 %t268, label %then7597, label %else7598 +then7597: %t269 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t270 = load { ptr, i64, i64 }, ptr %t269 %t271 = extractvalue { ptr, i64, i64 } %t270, 1 %t272 = icmp uge i64 0, %t271 - br i1 %t272, label %range7596, label %inrange7597 -range7596: + br i1 %t272, label %range7600, label %inrange7601 +range7600: call void @finch_panic_index(ptr @.str.4823, i64 4385, i64 0, i64 %t271) unreachable -inrange7597: +inrange7601: %t273 = extractvalue { ptr, i64, i64 } %t270, 0 %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 0 %t275 = load { ptr, i64, i64 }, ptr %t274 @@ -75941,8 +75967,8 @@ inrange7597: store { ptr, i64, i64 } %t279, ptr %t276 store { ptr, i64, i64 } %t280, ptr %a281 call void @finch_str_drop(ptr %a281) - br label %endif7595 -else7594: + br label %endif7599 +else7598: %t282 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.4825, i64 2, i64 0 }, ptr %a284 @@ -75965,8 +75991,8 @@ else7594: store { ptr, i64, i64 } %t296, ptr %t297 store { ptr, i64, i64 } %t298, ptr %a299 call void @finch_str_drop(ptr %a299) - br label %endif7595 -endif7595: + br label %endif7599 +endif7599: %t300 = load %S.gen.Abi, ptr %a4 call void @finch.drop.arr_bool(ptr %a136) call void @finch.drop.arr_int(ptr %a128) @@ -76041,8 +76067,8 @@ entry: store { ptr, i64, i64 } { ptr @.str.4828, i64 4, i64 0 }, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp eq i32 %t20, 0 - br i1 %t21, label %then7598, label %endif7600 -then7598: + br i1 %t21, label %then7602, label %endif7604 +then7602: %t22 = load ptr, ptr %a1 %t23 = load %S.ast.Type, ptr %a2 %t24 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t22, %S.ast.Type %t23) @@ -76051,8 +76077,8 @@ then7598: store { ptr, i64, i64 } %t24, ptr %t25 store { ptr, i64, i64 } %t26, ptr %a27 call void @finch_str_drop(ptr %a27) - br label %endif7600 -endif7600: + br label %endif7604 +endif7604: %t28 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t29 = getelementptr inbounds %S.gen.Abi, ptr %t28, i32 0, i32 0 %t30 = load { ptr, i64, i64 }, ptr %t29 @@ -76060,16 +76086,16 @@ endif7600: store { ptr, i64, i64 } { ptr @.str.4829, i64 8, i64 0 }, ptr %a32 %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) %t34 = icmp ne i32 %t33, 0 - br i1 %t34, label %then7601, label %endif7603 -then7601: + br i1 %t34, label %then7605, label %endif7607 +then7605: %t35 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t36 = getelementptr inbounds %S.gen.Abi, ptr %t35, i32 0, i32 0 %t37 = load { ptr, i64, i64 }, ptr %t36 store { ptr, i64, i64 } { ptr @.str.4830, i64 6, i64 0 }, ptr %t36 store { ptr, i64, i64 } %t37, ptr %a38 call void @finch_str_drop(ptr %a38) - br label %endif7603 -endif7603: + br label %endif7607 +endif7607: %t39 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t40 = getelementptr inbounds %S.gen.Abi, ptr %t39, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 @@ -76077,8 +76103,8 @@ endif7603: store { ptr, i64, i64 } { ptr @.str.4831, i64 6, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br i1 %t45, label %then7604, label %else7605 -then7604: + br i1 %t45, label %then7608, label %else7609 +then7608: %t46 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 3 store i1 true, ptr %t46 %t47 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 @@ -76089,8 +76115,8 @@ then7604: %t50 = load i64, ptr %a5 %t51 = sub i64 %t50, 1 store i64 %t51, ptr %a5 - br label %endif7606 -else7605: + br label %endif7610 +else7609: %t52 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t53 = getelementptr inbounds %S.gen.Abi, ptr %t52, i32 0, i32 0 %t54 = load { ptr, i64, i64 }, ptr %t53 @@ -76098,8 +76124,8 @@ else7605: store { ptr, i64, i64 } { ptr @.str.4833, i64 6, i64 0 }, ptr %a56 %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) %t58 = icmp ne i32 %t57, 0 - br i1 %t58, label %then7607, label %endif7609 -then7607: + br i1 %t58, label %then7611, label %endif7613 +then7611: %t59 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 %t60 = getelementptr inbounds %S.gen.Abi, ptr %t59, i32 0, i32 2 %t61 = load { ptr, i64, i64 }, ptr %t60 @@ -76111,19 +76137,19 @@ then7607: store { ptr, i64, i64 } %t65, ptr %t62 store { ptr, i64, i64 } %t66, ptr %a67 call void @finch_str_drop(ptr %a67) - br label %endif7609 -endif7609: - br label %endif7606 -endif7606: + br label %endif7613 +endif7613: + br label %endif7610 +endif7610: store i64 0, ptr %a68 - br label %each.cond7610 -each.cond7610: + br label %each.cond7614 +each.cond7614: %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t70 = load i64, ptr %t69 %t71 = load i64, ptr %a68 %t72 = icmp slt i64 %t71, %t70 - br i1 %t72, label %each.body7611, label %each.end7613 -each.body7611: + br i1 %t72, label %each.body7615, label %each.end7617 +each.body7615: %t73 = load ptr, ptr %a3 %t74 = getelementptr inbounds %S.ast.Type, ptr %t73, i64 %t71 %t75 = load %S.ast.Type, ptr %t74 @@ -76138,20 +76164,20 @@ each.body7611: store { ptr, i64, i64 } { ptr @.str.4834, i64 6, i64 0 }, ptr %a84 %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) %t86 = icmp ne i32 %t85, 0 - br i1 %t86, label %then7614, label %else7615 -then7614: + br i1 %t86, label %then7618, label %else7619 +then7618: store i64 0, ptr %a87 store i64 0, ptr %a88 %t89 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 1 store i64 0, ptr %a90 - br label %each.cond7617 -each.cond7617: + br label %each.cond7621 +each.cond7621: %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = load i64, ptr %a90 %t94 = icmp slt i64 %t93, %t92 - br i1 %t94, label %each.body7618, label %each.end7620 -each.body7618: + br i1 %t94, label %each.body7622, label %each.end7624 +each.body7622: %t95 = load ptr, ptr %t89 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t93 %t97 = load { ptr, i64, i64 }, ptr %t96 @@ -76161,80 +76187,80 @@ each.body7618: store { ptr, i64, i64 } { ptr @.str.4836, i64 1, i64 0 }, ptr %a102 %t103 = call i32 @finch_str_starts(ptr %a100, ptr %a102) %t104 = icmp ne i32 %t103, 0 - br i1 %t104, label %then7621, label %else7622 -then7621: + br i1 %t104, label %then7625, label %else7626 +then7625: %t105 = load i64, ptr %a87 %t106 = add i64 %t105, 1 store i64 %t106, ptr %a87 - br label %endif7623 -else7622: + br label %endif7627 +else7626: %t107 = load i64, ptr %a88 %t108 = add i64 %t107, 1 store i64 %t108, ptr %a88 - br label %endif7623 -endif7623: - br label %each.step7619 -each.step7619: + br label %endif7627 +endif7627: + br label %each.step7623 +each.step7623: %t109 = load i64, ptr %a90 %t110 = add i64 %t109, 1 store i64 %t110, ptr %a90 - br label %each.cond7617 -each.end7620: + br label %each.cond7621 +each.end7624: %t111 = load ptr, ptr %a1 %t112 = icmp eq ptr %t111, null - br i1 %t112, label %panic7624, label %ok7625 -panic7624: + br i1 %t112, label %panic7628, label %ok7629 +panic7628: call void @finch_panic(ptr @.str.4837, i64 4425, ptr @.str.4838) unreachable -ok7625: +ok7629: %t113 = getelementptr inbounds %S.gen.Gen, ptr %t111, i32 0, i32 31 %t114 = getelementptr inbounds %S.platform.Target, ptr %t113, i32 0, i32 1 %t115 = load i1, ptr %t114 - br label %logic.from7626 -logic.from7626: - br i1 %t115, label %logic.end7628, label %logic.rhs7627 -logic.rhs7627: + br label %logic.from7630 +logic.from7630: + br i1 %t115, label %logic.end7632, label %logic.rhs7631 +logic.rhs7631: %t116 = load ptr, ptr %a1 %t117 = icmp eq ptr %t116, null - br i1 %t117, label %panic7629, label %ok7630 -panic7629: + br i1 %t117, label %panic7633, label %ok7634 +panic7633: call void @finch_panic(ptr @.str.4839, i64 4425, ptr @.str.4840) unreachable -ok7630: +ok7634: %t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 31 %t119 = getelementptr inbounds %S.platform.Target, ptr %t118, i32 0, i32 4 %t120 = load i1, ptr %t119 - br label %logic.rend7631 -logic.rend7631: - br label %logic.end7628 -logic.end7628: - %t121 = phi i1 [ true, %logic.from7626 ], [ %t120, %logic.rend7631 ] - br label %logic.from7632 -logic.from7632: - br i1 %t121, label %logic.end7634, label %logic.rhs7633 -logic.rhs7633: + br label %logic.rend7635 +logic.rend7635: + br label %logic.end7632 +logic.end7632: + %t121 = phi i1 [ true, %logic.from7630 ], [ %t120, %logic.rend7635 ] + br label %logic.from7636 +logic.from7636: + br i1 %t121, label %logic.end7638, label %logic.rhs7637 +logic.rhs7637: %t122 = load i64, ptr %a87 %t123 = load i64, ptr %a5 %t124 = icmp sle i64 %t122, %t123 - br label %logic.from7635 -logic.from7635: - br i1 %t124, label %logic.rhs7636, label %logic.end7637 -logic.rhs7636: + br label %logic.from7639 +logic.from7639: + br i1 %t124, label %logic.rhs7640, label %logic.end7641 +logic.rhs7640: %t125 = load i64, ptr %a88 %t126 = load i64, ptr %a6 %t127 = icmp sle i64 %t125, %t126 - br label %logic.rend7638 -logic.rend7638: - br label %logic.end7637 -logic.end7637: - %t128 = phi i1 [ false, %logic.from7635 ], [ %t127, %logic.rend7638 ] - br label %logic.rend7639 -logic.rend7639: - br label %logic.end7634 -logic.end7634: - %t129 = phi i1 [ true, %logic.from7632 ], [ %t128, %logic.rend7639 ] - br i1 %t129, label %then7640, label %else7641 -then7640: + br label %logic.rend7642 +logic.rend7642: + br label %logic.end7641 +logic.end7641: + %t128 = phi i1 [ false, %logic.from7639 ], [ %t127, %logic.rend7642 ] + br label %logic.rend7643 +logic.rend7643: + br label %logic.end7638 +logic.end7638: + %t129 = phi i1 [ true, %logic.from7636 ], [ %t128, %logic.rend7643 ] + br i1 %t129, label %then7644, label %else7645 +then7644: %t130 = load i64, ptr %a87 %t131 = load i64, ptr %a5 %t132 = sub i64 %t131, %t130 @@ -76243,43 +76269,43 @@ then7640: %t134 = load i64, ptr %a6 %t135 = sub i64 %t134, %t133 store i64 %t135, ptr %a6 - br label %endif7642 -else7641: + br label %endif7646 +else7645: %t136 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 %t137 = load { ptr, i64, i64 }, ptr %t136 store { ptr, i64, i64 } { ptr @.str.4841, i64 6, i64 0 }, ptr %t136 store { ptr, i64, i64 } %t137, ptr %a138 call void @finch_str_drop(ptr %a138) - br label %endif7642 -endif7642: - br label %endif7616 -else7615: + br label %endif7646 +endif7646: + br label %endif7620 +else7619: %t139 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 %t140 = load { ptr, i64, i64 }, ptr %t139 store { ptr, i64, i64 } %t140, ptr %a141 store { ptr, i64, i64 } { ptr @.str.4842, i64 6, i64 0 }, ptr %a142 %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) %t144 = icmp ne i32 %t143, 0 - br i1 %t144, label %then7643, label %endif7645 -then7643: + br i1 %t144, label %then7647, label %endif7649 +then7647: %t145 = load %S.ast.Type, ptr %a76 %t146 = call i1 @finch.gen.isFloat(%S.ast.Type %t145) - br i1 %t146, label %then7646, label %else7647 -then7646: + br i1 %t146, label %then7650, label %else7651 +then7650: %t147 = load i64, ptr %a6 %t148 = sub i64 %t147, 1 store i64 %t148, ptr %a6 - br label %endif7648 -else7647: + br label %endif7652 +else7651: %t149 = load i64, ptr %a5 %t150 = sub i64 %t149, 1 store i64 %t150, ptr %a5 - br label %endif7648 -endif7648: - br label %endif7645 -endif7645: - br label %endif7616 -endif7616: + br label %endif7652 +endif7652: + br label %endif7649 +endif7649: + br label %endif7620 +endif7620: %t151 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 1 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load %S.gen.Abi, ptr %a80 @@ -76294,13 +76320,13 @@ endif7616: store %S.gen.Abi %t156, ptr %t160 store i64 %t158, ptr %t152 call void @finch.drop.S_gen_Abi(ptr %a80) - br label %each.step7612 -each.step7612: + br label %each.step7616 +each.step7616: %t161 = load i64, ptr %a68 %t162 = add i64 %t161, 1 store i64 %t162, ptr %a68 - br label %each.cond7610 -each.end7613: + br label %each.cond7614 +each.end7617: %t163 = load %S.gen.Plan, ptr %a4 ret %S.gen.Plan %t163 } @@ -76382,17 +76408,17 @@ entry: store { ptr, i64, i64 } { ptr @.str.4843, i64 6, i64 0 }, ptr %a9 %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) %t11 = icmp eq i32 %t10, 0 - br i1 %t11, label %then7649, label %endif7651 -then7649: + br i1 %t11, label %then7653, label %endif7655 +then7653: ret void -endif7651: +endif7655: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic7652, label %ok7653 -panic7652: + br i1 %t13, label %panic7656, label %ok7657 +panic7656: call void @finch_panic(ptr @.str.4844, i64 4447, ptr @.str.4845) unreachable -ok7653: +ok7657: %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 3 @@ -76403,11 +76429,11 @@ ok7653: %t21 = load { ptr, i64, i64 }, ptr %t14 %t22 = extractvalue { ptr, i64, i64 } %t21, 1 %t23 = icmp uge i64 %t20, %t22 - br i1 %t23, label %range7654, label %inrange7655 -range7654: + br i1 %t23, label %range7658, label %inrange7659 +range7658: call void @finch_panic_index(ptr @.str.4846, i64 4447, i64 %t20, i64 %t22) unreachable -inrange7655: +inrange7659: %t24 = extractvalue { ptr, i64, i64 } %t21, 0 %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 %t26 = load %S.gen.StructDef, ptr %t25 @@ -76418,8 +76444,8 @@ inrange7655: %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 2 %t32 = load i1, ptr %t31 %t33 = xor i1 %t32, true - br i1 %t33, label %then7656, label %endif7658 -then7656: + br i1 %t33, label %then7660, label %endif7662 +then7660: %t34 = load ptr, ptr %a1 %t35 = load %S.ast.Node, ptr %a2 %t36 = load { ptr, i64, i64 }, ptr %a3 @@ -76465,14 +76491,14 @@ then7656: call void @finch.gen.fail(ptr %t34, %S.ast.Node %t35, { ptr, i64, i64 } %t69) store { ptr, i64, i64 } %t69, ptr %a70 call void @finch_str_drop(ptr %a70) - br label %endif7658 -endif7658: + br label %endif7662 +endif7662: %t71 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1 %t73 = load i64, ptr %t72 %t74 = icmp sgt i64 %t73, 0 - br i1 %t74, label %then7659, label %endif7661 -then7659: + br i1 %t74, label %then7663, label %endif7665 +then7663: %t75 = load ptr, ptr %a1 %t76 = load %S.ast.Node, ptr %a2 %t77 = load { ptr, i64, i64 }, ptr %a3 @@ -76526,8 +76552,8 @@ then7659: call void @finch.gen.fail(ptr %t75, %S.ast.Node %t76, { ptr, i64, i64 } %t117) store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_drop(ptr %a118) - br label %endif7661 -endif7661: + br label %endif7665 +endif7665: call void @finch.drop.S_gen_StructDef(ptr %a30) ret void } @@ -76544,51 +76570,51 @@ entry: store %S.ast.Type %p0, ptr %a1 %t2 = load %S.ast.Type, ptr %a1 %t3 = call i1 @finch.gen.isNumber(%S.ast.Type %t2) - br label %logic.from7662 -logic.from7662: - br i1 %t3, label %logic.end7664, label %logic.rhs7663 -logic.rhs7663: + br label %logic.from7666 +logic.from7666: + br i1 %t3, label %logic.end7668, label %logic.rhs7667 +logic.rhs7667: %t4 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t5 = load { ptr, i64, i64 }, ptr %t4 store { ptr, i64, i64 } %t5, ptr %a6 store { ptr, i64, i64 } { ptr @.str.4855, i64 4, i64 0 }, ptr %a7 %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) %t9 = icmp ne i32 %t8, 0 - br label %logic.rend7665 -logic.rend7665: - br label %logic.end7664 -logic.end7664: - %t10 = phi i1 [ true, %logic.from7662 ], [ %t9, %logic.rend7665 ] - br label %logic.from7666 -logic.from7666: - br i1 %t10, label %logic.end7668, label %logic.rhs7667 -logic.rhs7667: + br label %logic.rend7669 +logic.rend7669: + br label %logic.end7668 +logic.end7668: + %t10 = phi i1 [ true, %logic.from7666 ], [ %t9, %logic.rend7669 ] + br label %logic.from7670 +logic.from7670: + br i1 %t10, label %logic.end7672, label %logic.rhs7671 +logic.rhs7671: %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } { ptr @.str.4856, i64 4, i64 0 }, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br label %logic.rend7669 -logic.rend7669: - br label %logic.end7668 -logic.end7668: - %t17 = phi i1 [ true, %logic.from7666 ], [ %t16, %logic.rend7669 ] - br label %logic.from7670 -logic.from7670: - br i1 %t17, label %logic.end7672, label %logic.rhs7671 -logic.rhs7671: + br label %logic.rend7673 +logic.rend7673: + br label %logic.end7672 +logic.end7672: + %t17 = phi i1 [ true, %logic.from7670 ], [ %t16, %logic.rend7673 ] + br label %logic.from7674 +logic.from7674: + br i1 %t17, label %logic.end7676, label %logic.rhs7675 +logic.rhs7675: %t18 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 store { ptr, i64, i64 } { ptr @.str.4857, i64 3, i64 0 }, ptr %a21 %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) %t23 = icmp ne i32 %t22, 0 - br label %logic.rend7673 -logic.rend7673: - br label %logic.end7672 -logic.end7672: - %t24 = phi i1 [ true, %logic.from7670 ], [ %t23, %logic.rend7673 ] + br label %logic.rend7677 +logic.rend7677: + br label %logic.end7676 +logic.end7676: + %t24 = phi i1 [ true, %logic.from7674 ], [ %t23, %logic.rend7677 ] ret i1 %t24 } @@ -76637,71 +76663,71 @@ entry: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = icmp sgt i64 %t6, 0 - br i1 %t7, label %then7674, label %endif7676 -then7674: + br i1 %t7, label %then7678, label %endif7680 +then7678: %t8 = load ptr, ptr %a1 %t9 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.4858, i64 59, i64 0 }) - br label %endif7676 -endif7676: + br label %endif7680 +endif7680: %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 7 %t11 = load i1, ptr %t10 - br i1 %t11, label %then7677, label %endif7679 -then7677: + br i1 %t11, label %then7681, label %endif7683 +then7681: %t12 = load ptr, ptr %a1 %t13 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t12, %S.ast.Node %t13, { ptr, i64, i64 } { ptr @.str.4859, i64 74, i64 0 }) - br label %endif7679 -endif7679: + br label %endif7683 +endif7683: %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 3 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 - br i1 %t17, label %then7680, label %endif7682 -then7680: + br i1 %t17, label %then7684, label %endif7686 +then7684: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.4860, i64 29, i64 0 }) - br label %endif7682 -endif7682: + br label %endif7686 +endif7686: %t20 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load i64, ptr %t21 store i64 0, ptr %a23 - br label %for.cond7683 -for.cond7683: + br label %for.cond7687 +for.cond7687: %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, %t22 - br i1 %t25, label %for.body7684, label %for.end7686 -for.body7684: + br i1 %t25, label %for.body7688, label %for.end7690 +for.body7688: %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 %t27 = load i64, ptr %a23 %t28 = load { ptr, i64, i64 }, ptr %t26 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 - br i1 %t30, label %range7687, label %inrange7688 -range7687: + br i1 %t30, label %range7691, label %inrange7692 +range7691: call void @finch_panic_index(ptr @.str.4861, i64 4472, i64 %t27, i64 %t29) unreachable -inrange7688: +inrange7692: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 %t27 %t33 = load %S.ast.Type, ptr %t32 %t34 = call i1 @finch.gen.cPlain(%S.ast.Type %t33) %t35 = xor i1 %t34, true - br i1 %t35, label %then7689, label %endif7691 -then7689: + br i1 %t35, label %then7693, label %endif7695 +then7693: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load i64, ptr %a23 %t39 = load { ptr, i64, i64 }, ptr %t37 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range7692, label %inrange7693 -range7692: + br i1 %t41, label %range7696, label %inrange7697 +range7696: call void @finch_panic_index(ptr @.str.4862, i64 4473, i64 %t38, i64 %t40) unreachable -inrange7693: +inrange7697: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t38 %t44 = load %S.ast.Node, ptr %t43 @@ -76710,11 +76736,11 @@ inrange7693: %t47 = load { ptr, i64, i64 }, ptr %t45 %t48 = extractvalue { ptr, i64, i64 } %t47, 1 %t49 = icmp uge i64 %t46, %t48 - br i1 %t49, label %range7694, label %inrange7695 -range7694: + br i1 %t49, label %range7698, label %inrange7699 +range7698: call void @finch_panic_index(ptr @.str.4864, i64 4473, i64 %t46, i64 %t48) unreachable -inrange7695: +inrange7699: %t50 = extractvalue { ptr, i64, i64 } %t47, 0 %t51 = getelementptr inbounds %S.ast.Type, ptr %t50, i64 %t46 %t52 = load %S.ast.Type, ptr %t51 @@ -76734,15 +76760,15 @@ inrange7695: call void @finch.gen.fail(ptr %t36, %S.ast.Node %t44, { ptr, i64, i64 } %t63) store { ptr, i64, i64 } %t63, ptr %a64 call void @finch_str_drop(ptr %a64) - br label %endif7691 -endif7691: - br label %for.step7685 -for.step7685: + br label %endif7695 +endif7695: + br label %for.step7689 +for.step7689: %t65 = load i64, ptr %a23 %t66 = add i64 %t65, 1 store i64 %t66, ptr %a23 - br label %for.cond7683 -for.end7686: + br label %for.cond7687 +for.end7690: %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t68 = getelementptr inbounds %S.ast.Type, ptr %t67, i32 0, i32 0 %t69 = load { ptr, i64, i64 }, ptr %t68 @@ -76750,21 +76776,21 @@ for.end7686: store { ptr, i64, i64 } { ptr @.str.4866, i64 4, i64 0 }, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp eq i32 %t72, 0 - br label %logic.from7696 -logic.from7696: - br i1 %t73, label %logic.rhs7697, label %logic.end7698 -logic.rhs7697: + br label %logic.from7700 +logic.from7700: + br i1 %t73, label %logic.rhs7701, label %logic.end7702 +logic.rhs7701: %t74 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 %t75 = load %S.ast.Type, ptr %t74 %t76 = call i1 @finch.gen.cPlain(%S.ast.Type %t75) %t77 = xor i1 %t76, true - br label %logic.rend7699 -logic.rend7699: - br label %logic.end7698 -logic.end7698: - %t78 = phi i1 [ false, %logic.from7696 ], [ %t77, %logic.rend7699 ] - br i1 %t78, label %then7700, label %endif7702 -then7700: + br label %logic.rend7703 +logic.rend7703: + br label %logic.end7702 +logic.end7702: + %t78 = phi i1 [ false, %logic.from7700 ], [ %t77, %logic.rend7703 ] + br i1 %t78, label %then7704, label %endif7706 +then7704: %t79 = load ptr, ptr %a1 %t80 = load %S.ast.Node, ptr %a2 %t81 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 @@ -76785,35 +76811,35 @@ then7700: call void @finch.gen.fail(ptr %t79, %S.ast.Node %t80, { ptr, i64, i64 } %t93) store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) - br label %endif7702 -endif7702: + br label %endif7706 +endif7706: %t95 = load ptr, ptr %a1 %t96 = icmp eq ptr %t95, null - br i1 %t96, label %panic7703, label %ok7704 -panic7703: + br i1 %t96, label %panic7707, label %ok7708 +panic7707: call void @finch_panic(ptr @.str.4869, i64 4479, ptr @.str.4870) unreachable -ok7704: +ok7708: %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 15 store i64 0, ptr %a98 - br label %each.cond7705 -each.cond7705: + br label %each.cond7709 +each.cond7709: %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i32 0, i32 1 %t100 = load i64, ptr %t99 %t101 = load i64, ptr %a98 %t102 = icmp slt i64 %t101, %t100 - br i1 %t102, label %each.body7706, label %each.end7708 -each.body7706: + br i1 %t102, label %each.body7710, label %each.end7712 +each.body7710: %t103 = load ptr, ptr %t97 %t104 = getelementptr inbounds %S.gen.FnSig, ptr %t103, i64 %t101 %t105 = load %S.gen.FnSig, ptr %t104 store %S.gen.FnSig %t105, ptr %a106 %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 5 %t108 = load i1, ptr %t107 - br label %logic.from7709 -logic.from7709: - br i1 %t108, label %logic.rhs7710, label %logic.end7711 -logic.rhs7710: + br label %logic.from7713 +logic.from7713: + br i1 %t108, label %logic.rhs7714, label %logic.end7715 +logic.rhs7714: %t109 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 1 %t110 = load { ptr, i64, i64 }, ptr %t109 %t111 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 @@ -76822,13 +76848,13 @@ logic.rhs7710: store { ptr, i64, i64 } %t112, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br label %logic.rend7712 -logic.rend7712: - br label %logic.end7711 -logic.end7711: - %t117 = phi i1 [ false, %logic.from7709 ], [ %t116, %logic.rend7712 ] - br i1 %t117, label %then7713, label %endif7715 -then7713: + br label %logic.rend7716 +logic.rend7716: + br label %logic.end7715 +logic.end7715: + %t117 = phi i1 [ false, %logic.from7713 ], [ %t116, %logic.rend7716 ] + br i1 %t117, label %then7717, label %endif7719 +then7717: %t118 = load ptr, ptr %a1 %t119 = load %S.ast.Node, ptr %a2 %t120 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 @@ -76846,15 +76872,15 @@ then7713: call void @finch.gen.fail(ptr %t118, %S.ast.Node %t119, { ptr, i64, i64 } %t130) store { ptr, i64, i64 } %t130, ptr %a131 call void @finch_str_drop(ptr %a131) - br label %endif7715 -endif7715: - br label %each.step7707 -each.step7707: + br label %endif7719 +endif7719: + br label %each.step7711 +each.step7711: %t132 = load i64, ptr %a98 %t133 = add i64 %t132, 1 store i64 %t133, ptr %a98 - br label %each.cond7705 -each.end7708: + br label %each.cond7709 +each.end7712: ret void } @@ -77034,22 +77060,22 @@ entry: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 store i64 0, ptr %a11 - br label %for.cond7716 -for.cond7716: + br label %for.cond7720 +for.cond7720: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t10 - br i1 %t13, label %for.body7717, label %for.end7719 -for.body7717: + br i1 %t13, label %for.body7721, label %for.end7723 +for.body7721: %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 %t15 = load i64, ptr %a11 %t16 = load { ptr, i64, i64 }, ptr %t14 %t17 = extractvalue { ptr, i64, i64 } %t16, 1 %t18 = icmp uge i64 %t15, %t17 - br i1 %t18, label %range7720, label %inrange7721 -range7720: + br i1 %t18, label %range7724, label %inrange7725 +range7724: call void @finch_panic_index(ptr @.str.4873, i64 4492, i64 %t15, i64 %t17) unreachable -inrange7721: +inrange7725: %t19 = extractvalue { ptr, i64, i64 } %t16, 0 %t20 = getelementptr inbounds %S.ast.Type, ptr %t19, i64 %t15 %t21 = load %S.ast.Type, ptr %t20 @@ -77063,8 +77089,8 @@ inrange7721: store { ptr, i64, i64 } { ptr @.str.4874, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br i1 %t31, label %then7722, label %else7723 -then7722: + br i1 %t31, label %then7726, label %else7727 +then7726: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t33 = load i64, ptr %a11 call void @finch_str_from_int(ptr %a34, i64 %t33) @@ -77115,8 +77141,8 @@ then7722: %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t67 store { ptr, i64, i64 } %t66, ptr %t70 store i64 %t68, ptr %t45 - br label %endif7724 -else7723: + br label %endif7728 +else7727: %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t72 = load ptr, ptr %a1 %t73 = load %S.ast.Type, ptr %a25 @@ -77184,16 +77210,16 @@ else7723: %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 %t120 store { ptr, i64, i64 } %t119, ptr %t123 store i64 %t121, ptr %t102 - br label %endif7724 -endif7724: + br label %endif7728 +endif7728: call void @finch.drop.S_ast_Type(ptr %a25) - br label %for.step7718 -for.step7718: + br label %for.step7722 +for.step7722: %t124 = load i64, ptr %a11 %t125 = add i64 %t124, 1 store i64 %t125, ptr %a11 - br label %for.cond7716 -for.end7719: + br label %for.cond7720 +for.end7723: %t126 = load ptr, ptr %a1 %t127 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t128 = load %S.ast.Type, ptr %t127 @@ -77252,15 +77278,15 @@ for.end7719: store { ptr, i64, i64 } { ptr @.str.4888, i64 4, i64 0 }, ptr %a174 %t175 = call i32 @finch_str_eq(ptr %a173, ptr %a174) %t176 = icmp ne i32 %t175, 0 - br i1 %t176, label %then7725, label %else7726 -then7725: + br i1 %t176, label %then7729, label %else7730 +then7729: %t177 = load ptr, ptr %a1 %t178 = load { ptr, i64, i64 }, ptr %a167 call void @finch.gen.emit(ptr %t177, { ptr, i64, i64 } %t178) %t179 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t179, { ptr, i64, i64 } { ptr @.str.4889, i64 8, i64 0 }) - br label %endif7727 -else7726: + br label %endif7731 +else7730: %t180 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t181 = getelementptr inbounds %S.ast.Type, ptr %t180, i32 0, i32 0 %t182 = load { ptr, i64, i64 }, ptr %t181 @@ -77268,8 +77294,8 @@ else7726: store { ptr, i64, i64 } { ptr @.str.4890, i64 4, i64 0 }, ptr %a184 %t185 = call i32 @finch_str_eq(ptr %a183, ptr %a184) %t186 = icmp ne i32 %t185, 0 - br i1 %t186, label %then7728, label %else7729 -then7728: + br i1 %t186, label %then7732, label %else7733 +then7732: %t187 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } { ptr @.str.4891, i64 2, i64 0 }, ptr %a168 store { ptr, i64, i64 } %t187, ptr %a188 @@ -77307,8 +77333,8 @@ then7728: call void @finch.gen.emit(ptr %t191, { ptr, i64, i64 } %t212) store { ptr, i64, i64 } %t212, ptr %a213 call void @finch_str_drop(ptr %a213) - br label %endif7730 -else7729: + br label %endif7734 +else7733: %t214 = load ptr, ptr %a1 %t215 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t216 = load %S.ast.Type, ptr %t215 @@ -77351,29 +77377,29 @@ else7729: call void @finch.gen.emit(ptr %t226, { ptr, i64, i64 } %t245) store { ptr, i64, i64 } %t245, ptr %a246 call void @finch_str_drop(ptr %a246) - br label %endif7730 -endif7730: - br label %endif7727 -endif7727: + br label %endif7734 +endif7734: + br label %endif7731 +endif7731: store { ptr, i64, i64 } { ptr @.str.4898, i64 0, i64 0 }, ptr %a247 %t248 = load ptr, ptr %a1 %t249 = icmp eq ptr %t248, null - br i1 %t249, label %panic7731, label %ok7732 -panic7731: + br i1 %t249, label %panic7735, label %ok7736 +panic7735: call void @finch_panic(ptr @.str.4899, i64 4517, ptr @.str.4900) unreachable -ok7732: +ok7736: %t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 31 %t251 = getelementptr inbounds %S.platform.Target, ptr %t250, i32 0, i32 1 %t252 = load i1, ptr %t251 - br i1 %t252, label %then7733, label %endif7735 -then7733: + br i1 %t252, label %then7737, label %endif7739 +then7737: %t253 = load { ptr, i64, i64 }, ptr %a247 store { ptr, i64, i64 } { ptr @.str.4901, i64 10, i64 0 }, ptr %a247 store { ptr, i64, i64 } %t253, ptr %a254 call void @finch_str_drop(ptr %a254) - br label %endif7735 -endif7735: + br label %endif7739 +endif7739: %t255 = load ptr, ptr %a1 %t256 = load %S.gen.Saved, ptr %a7 %t257 = load { ptr, i64, i64 }, ptr %a247 @@ -77464,19 +77490,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond7858 -n.cond7858: + br label %n.cond7862 +n.cond7862: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body7859, label %n.end7860 -n.body7859: + br i1 %t6, label %n.body7863, label %n.end7864 +n.body7863: %t7 = getelementptr inbounds %S.gen.Abi, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Abi(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond7858 -n.end7860: + br label %n.cond7862 +n.end7864: call void @finch_arr_free(ptr %a) ret void } @@ -77841,21 +77867,21 @@ entry: store %S.ast.Node %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic7736, label %ok7737 -panic7736: + br i1 %t5, label %panic7740, label %ok7741 +panic7740: call void @finch_panic(ptr @.str.4908, i64 4526, ptr @.str.4909) unreachable -ok7737: +ok7741: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 %t7 = load i64, ptr %a2 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range7738, label %inrange7739 -range7738: + br i1 %t10, label %range7742, label %inrange7743 +range7742: call void @finch_panic_index(ptr @.str.4910, i64 4526, i64 %t7, i64 %t9) unreachable -inrange7739: +inrange7743: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.FnSig, ptr %t11, i64 %t7 %t13 = load %S.gen.FnSig, ptr %t12 @@ -77889,11 +77915,11 @@ inrange7739: store { ptr, i64, i64 } %t37, ptr %a38 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic7740, label %ok7741 -panic7740: + br i1 %t40, label %panic7744, label %ok7745 +panic7744: call void @finch_panic(ptr @.str.4913, i64 4528, ptr @.str.4914) unreachable -ok7741: +ok7745: %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 40 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %a38 @@ -77905,44 +77931,44 @@ ok7741: %t49 = load i64, ptr %t42 %t50 = load ptr, ptr %t41 store i64 0, ptr %a51 - br label %find.cond7742 -find.cond7742: + br label %find.cond7746 +find.cond7746: %t52 = load i64, ptr %a51 %t53 = icmp slt i64 %t52, %t49 - br i1 %t53, label %find.body7743, label %find.end7746 -find.body7743: + br i1 %t53, label %find.body7747, label %find.end7750 +find.body7747: %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 %t55 = load { ptr, i64, i64 }, ptr %t54 store { ptr, i64, i64 } %t55, ptr %a56 store { ptr, i64, i64 } %t47, ptr %a57 %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) %t59 = icmp ne i32 %t58, 0 - br i1 %t59, label %find.hit7744, label %find.next7745 -find.hit7744: + br i1 %t59, label %find.hit7748, label %find.next7749 +find.hit7748: store i64 %t52, ptr %a48 - br label %find.end7746 -find.next7745: + br label %find.end7750 +find.next7749: %t60 = add i64 %t52, 1 store i64 %t60, ptr %a51 - br label %find.cond7742 -find.end7746: + br label %find.cond7746 +find.end7750: store { ptr, i64, i64 } %t47, ptr %a61 call void @finch_str_drop(ptr %a61) %t62 = load i64, ptr %a48 %t63 = icmp sge i64 %t62, 0 - br i1 %t63, label %then7747, label %endif7749 -then7747: + br i1 %t63, label %then7751, label %endif7753 +then7751: %t64 = load { ptr, i64, i64 }, ptr %a38 call void @finch.drop.S_gen_FnSig(ptr %a17) ret { ptr, i64, i64 } %t64 -endif7749: +endif7753: %t65 = load ptr, ptr %a1 %t66 = icmp eq ptr %t65, null - br i1 %t66, label %panic7750, label %ok7751 -panic7750: + br i1 %t66, label %panic7754, label %ok7755 +panic7754: call void @finch_panic(ptr @.str.4916, i64 4531, ptr @.str.4917) unreachable -ok7751: +ok7755: %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 40 %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 %t69 = load { ptr, i64, i64 }, ptr %a38 @@ -77961,19 +77987,19 @@ ok7751: %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i32 0, i32 1 %t80 = load i64, ptr %t79 %t81 = icmp sgt i64 %t80, 0 - br label %logic.from7752 -logic.from7752: - br i1 %t81, label %logic.end7754, label %logic.rhs7753 -logic.rhs7753: + br label %logic.from7756 +logic.from7756: + br i1 %t81, label %logic.end7758, label %logic.rhs7757 +logic.rhs7757: %t82 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 9 %t83 = load i1, ptr %t82 - br label %logic.rend7755 -logic.rend7755: - br label %logic.end7754 -logic.end7754: - %t84 = phi i1 [ true, %logic.from7752 ], [ %t83, %logic.rend7755 ] - br i1 %t84, label %then7756, label %endif7758 -then7756: + br label %logic.rend7759 +logic.rend7759: + br label %logic.end7758 +logic.end7758: + %t84 = phi i1 [ true, %logic.from7756 ], [ %t83, %logic.rend7759 ] + br i1 %t84, label %then7760, label %endif7762 +then7760: %t85 = load ptr, ptr %a1 %t86 = load %S.ast.Node, ptr %a3 %t87 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 @@ -77991,90 +78017,90 @@ then7756: call void @finch.gen.fail(ptr %t85, %S.ast.Node %t86, { ptr, i64, i64 } %t97) store { ptr, i64, i64 } %t97, ptr %a98 call void @finch_str_drop(ptr %a98) - br label %endif7758 -endif7758: + br label %endif7762 +endif7762: %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 store i64 0, ptr %a100 - br label %each.cond7759 -each.cond7759: + br label %each.cond7763 +each.cond7763: %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 %t102 = load i64, ptr %t101 %t103 = load i64, ptr %a100 %t104 = icmp slt i64 %t103, %t102 - br i1 %t104, label %each.body7760, label %each.end7762 -each.body7760: + br i1 %t104, label %each.body7764, label %each.end7766 +each.body7764: %t105 = load ptr, ptr %t99 %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t103 %t107 = load %S.ast.Type, ptr %t106 store %S.ast.Type %t107, ptr %a108 %t109 = load %S.ast.Type, ptr %a108 %t110 = call i1 @finch.gen.isNumber(%S.ast.Type %t109) - br label %logic.from7763 -logic.from7763: - br i1 %t110, label %logic.end7765, label %logic.rhs7764 -logic.rhs7764: + br label %logic.from7767 +logic.from7767: + br i1 %t110, label %logic.end7769, label %logic.rhs7768 +logic.rhs7768: %t111 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t112 = load { ptr, i64, i64 }, ptr %t111 store { ptr, i64, i64 } %t112, ptr %a113 store { ptr, i64, i64 } { ptr @.str.4921, i64 4, i64 0 }, ptr %a114 %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) %t116 = icmp ne i32 %t115, 0 - br label %logic.rend7766 -logic.rend7766: - br label %logic.end7765 -logic.end7765: - %t117 = phi i1 [ true, %logic.from7763 ], [ %t116, %logic.rend7766 ] - br label %logic.from7767 -logic.from7767: - br i1 %t117, label %logic.end7769, label %logic.rhs7768 -logic.rhs7768: + br label %logic.rend7770 +logic.rend7770: + br label %logic.end7769 +logic.end7769: + %t117 = phi i1 [ true, %logic.from7767 ], [ %t116, %logic.rend7770 ] + br label %logic.from7771 +logic.from7771: + br i1 %t117, label %logic.end7773, label %logic.rhs7772 +logic.rhs7772: %t118 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t119 = load { ptr, i64, i64 }, ptr %t118 store { ptr, i64, i64 } %t119, ptr %a120 store { ptr, i64, i64 } { ptr @.str.4922, i64 4, i64 0 }, ptr %a121 %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) %t123 = icmp ne i32 %t122, 0 - br label %logic.rend7770 -logic.rend7770: - br label %logic.end7769 -logic.end7769: - %t124 = phi i1 [ true, %logic.from7767 ], [ %t123, %logic.rend7770 ] - br label %logic.from7771 -logic.from7771: - br i1 %t124, label %logic.end7773, label %logic.rhs7772 -logic.rhs7772: + br label %logic.rend7774 +logic.rend7774: + br label %logic.end7773 +logic.end7773: + %t124 = phi i1 [ true, %logic.from7771 ], [ %t123, %logic.rend7774 ] + br label %logic.from7775 +logic.from7775: + br i1 %t124, label %logic.end7777, label %logic.rhs7776 +logic.rhs7776: %t125 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t126 = load { ptr, i64, i64 }, ptr %t125 store { ptr, i64, i64 } %t126, ptr %a127 store { ptr, i64, i64 } { ptr @.str.4923, i64 3, i64 0 }, ptr %a128 %t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128) %t130 = icmp ne i32 %t129, 0 - br label %logic.rend7774 -logic.rend7774: - br label %logic.end7773 -logic.end7773: - %t131 = phi i1 [ true, %logic.from7771 ], [ %t130, %logic.rend7774 ] - br label %logic.from7775 -logic.from7775: - br i1 %t131, label %logic.end7777, label %logic.rhs7776 -logic.rhs7776: + br label %logic.rend7778 +logic.rend7778: + br label %logic.end7777 +logic.end7777: + %t131 = phi i1 [ true, %logic.from7775 ], [ %t130, %logic.rend7778 ] + br label %logic.from7779 +logic.from7779: + br i1 %t131, label %logic.end7781, label %logic.rhs7780 +logic.rhs7780: %t132 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 store { ptr, i64, i64 } { ptr @.str.4924, i64 6, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 - br label %logic.from7778 -logic.from7778: - br i1 %t137, label %logic.rhs7779, label %logic.end7780 -logic.rhs7779: + br label %logic.from7782 +logic.from7782: + br i1 %t137, label %logic.rhs7783, label %logic.end7784 +logic.rhs7783: %t138 = load ptr, ptr %a1 %t139 = icmp eq ptr %t138, null - br i1 %t139, label %panic7781, label %ok7782 -panic7781: + br i1 %t139, label %panic7785, label %ok7786 +panic7785: call void @finch_panic(ptr @.str.4925, i64 4536, ptr @.str.4926) unreachable -ok7782: +ok7786: %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 %t141 = load ptr, ptr %a1 %t142 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 3 @@ -78085,28 +78111,28 @@ ok7782: %t147 = load { ptr, i64, i64 }, ptr %t140 %t148 = extractvalue { ptr, i64, i64 } %t147, 1 %t149 = icmp uge i64 %t146, %t148 - br i1 %t149, label %range7783, label %inrange7784 -range7783: + br i1 %t149, label %range7787, label %inrange7788 +range7787: call void @finch_panic_index(ptr @.str.4927, i64 4536, i64 %t146, i64 %t148) unreachable -inrange7784: +inrange7788: %t150 = extractvalue { ptr, i64, i64 } %t147, 0 %t151 = getelementptr inbounds %S.gen.StructDef, ptr %t150, i64 %t146 %t152 = getelementptr inbounds %S.gen.StructDef, ptr %t151, i32 0, i32 2 %t153 = load i1, ptr %t152 - br label %logic.rend7785 -logic.rend7785: - br label %logic.end7780 -logic.end7780: - %t154 = phi i1 [ false, %logic.from7778 ], [ %t153, %logic.rend7785 ] - br label %logic.rend7786 -logic.rend7786: - br label %logic.end7777 -logic.end7777: - %t155 = phi i1 [ true, %logic.from7775 ], [ %t154, %logic.rend7786 ] + br label %logic.rend7789 +logic.rend7789: + br label %logic.end7784 +logic.end7784: + %t154 = phi i1 [ false, %logic.from7782 ], [ %t153, %logic.rend7789 ] + br label %logic.rend7790 +logic.rend7790: + br label %logic.end7781 +logic.end7781: + %t155 = phi i1 [ true, %logic.from7779 ], [ %t154, %logic.rend7790 ] %t156 = xor i1 %t155, true - br i1 %t156, label %then7787, label %endif7789 -then7787: + br i1 %t156, label %then7791, label %endif7793 +then7791: %t157 = load ptr, ptr %a1 %t158 = load %S.ast.Node, ptr %a3 %t159 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 @@ -78134,22 +78160,22 @@ then7787: call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t177) store { ptr, i64, i64 } %t177, ptr %a178 call void @finch_str_drop(ptr %a178) - br label %endif7789 -endif7789: - br label %each.step7761 -each.step7761: + br label %endif7793 +endif7793: + br label %each.step7765 +each.step7765: %t179 = load i64, ptr %a100 %t180 = add i64 %t179, 1 store i64 %t180, ptr %a100 - br label %each.cond7759 -each.end7762: + br label %each.cond7763 +each.end7766: %t181 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t182 = load %S.ast.Type, ptr %t181 %t183 = call i1 @finch.gen.isNumber(%S.ast.Type %t182) - br label %logic.from7790 -logic.from7790: - br i1 %t183, label %logic.end7792, label %logic.rhs7791 -logic.rhs7791: + br label %logic.from7794 +logic.from7794: + br i1 %t183, label %logic.end7796, label %logic.rhs7795 +logic.rhs7795: %t184 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t185 = getelementptr inbounds %S.ast.Type, ptr %t184, i32 0, i32 0 %t186 = load { ptr, i64, i64 }, ptr %t185 @@ -78157,15 +78183,15 @@ logic.rhs7791: store { ptr, i64, i64 } { ptr @.str.4930, i64 4, i64 0 }, ptr %a188 %t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188) %t190 = icmp ne i32 %t189, 0 - br label %logic.rend7793 -logic.rend7793: - br label %logic.end7792 -logic.end7792: - %t191 = phi i1 [ true, %logic.from7790 ], [ %t190, %logic.rend7793 ] - br label %logic.from7794 -logic.from7794: - br i1 %t191, label %logic.end7796, label %logic.rhs7795 -logic.rhs7795: + br label %logic.rend7797 +logic.rend7797: + br label %logic.end7796 +logic.end7796: + %t191 = phi i1 [ true, %logic.from7794 ], [ %t190, %logic.rend7797 ] + br label %logic.from7798 +logic.from7798: + br i1 %t191, label %logic.end7800, label %logic.rhs7799 +logic.rhs7799: %t192 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i32 0, i32 0 %t194 = load { ptr, i64, i64 }, ptr %t193 @@ -78173,15 +78199,15 @@ logic.rhs7795: store { ptr, i64, i64 } { ptr @.str.4931, i64 4, i64 0 }, ptr %a196 %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) %t198 = icmp ne i32 %t197, 0 - br label %logic.rend7797 -logic.rend7797: - br label %logic.end7796 -logic.end7796: - %t199 = phi i1 [ true, %logic.from7794 ], [ %t198, %logic.rend7797 ] - br label %logic.from7798 -logic.from7798: - br i1 %t199, label %logic.end7800, label %logic.rhs7799 -logic.rhs7799: + br label %logic.rend7801 +logic.rend7801: + br label %logic.end7800 +logic.end7800: + %t199 = phi i1 [ true, %logic.from7798 ], [ %t198, %logic.rend7801 ] + br label %logic.from7802 +logic.from7802: + br i1 %t199, label %logic.end7804, label %logic.rhs7803 +logic.rhs7803: %t200 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 %t202 = load { ptr, i64, i64 }, ptr %t201 @@ -78189,15 +78215,15 @@ logic.rhs7799: store { ptr, i64, i64 } { ptr @.str.4932, i64 3, i64 0 }, ptr %a204 %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) %t206 = icmp ne i32 %t205, 0 - br label %logic.rend7801 -logic.rend7801: - br label %logic.end7800 -logic.end7800: - %t207 = phi i1 [ true, %logic.from7798 ], [ %t206, %logic.rend7801 ] - br label %logic.from7802 -logic.from7802: - br i1 %t207, label %logic.end7804, label %logic.rhs7803 -logic.rhs7803: + br label %logic.rend7805 +logic.rend7805: + br label %logic.end7804 +logic.end7804: + %t207 = phi i1 [ true, %logic.from7802 ], [ %t206, %logic.rend7805 ] + br label %logic.from7806 +logic.from7806: + br i1 %t207, label %logic.end7808, label %logic.rhs7807 +logic.rhs7807: %t208 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t209 = getelementptr inbounds %S.ast.Type, ptr %t208, i32 0, i32 0 %t210 = load { ptr, i64, i64 }, ptr %t209 @@ -78205,15 +78231,15 @@ logic.rhs7803: store { ptr, i64, i64 } { ptr @.str.4933, i64 4, i64 0 }, ptr %a212 %t213 = call i32 @finch_str_eq(ptr %a211, ptr %a212) %t214 = icmp ne i32 %t213, 0 - br label %logic.rend7805 -logic.rend7805: - br label %logic.end7804 -logic.end7804: - %t215 = phi i1 [ true, %logic.from7802 ], [ %t214, %logic.rend7805 ] - br label %logic.from7806 -logic.from7806: - br i1 %t215, label %logic.end7808, label %logic.rhs7807 -logic.rhs7807: + br label %logic.rend7809 +logic.rend7809: + br label %logic.end7808 +logic.end7808: + %t215 = phi i1 [ true, %logic.from7806 ], [ %t214, %logic.rend7809 ] + br label %logic.from7810 +logic.from7810: + br i1 %t215, label %logic.end7812, label %logic.rhs7811 +logic.rhs7811: %t216 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t217 = getelementptr inbounds %S.ast.Type, ptr %t216, i32 0, i32 0 %t218 = load { ptr, i64, i64 }, ptr %t217 @@ -78221,17 +78247,17 @@ logic.rhs7807: store { ptr, i64, i64 } { ptr @.str.4934, i64 6, i64 0 }, ptr %a220 %t221 = call i32 @finch_str_eq(ptr %a219, ptr %a220) %t222 = icmp ne i32 %t221, 0 - br label %logic.from7809 -logic.from7809: - br i1 %t222, label %logic.rhs7810, label %logic.end7811 -logic.rhs7810: + br label %logic.from7813 +logic.from7813: + br i1 %t222, label %logic.rhs7814, label %logic.end7815 +logic.rhs7814: %t223 = load ptr, ptr %a1 %t224 = icmp eq ptr %t223, null - br i1 %t224, label %panic7812, label %ok7813 -panic7812: + br i1 %t224, label %panic7816, label %ok7817 +panic7816: call void @finch_panic(ptr @.str.4935, i64 4540, ptr @.str.4936) unreachable -ok7813: +ok7817: %t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 16 %t226 = load ptr, ptr %a1 %t227 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 @@ -78244,28 +78270,28 @@ ok7813: %t234 = load { ptr, i64, i64 }, ptr %t225 %t235 = extractvalue { ptr, i64, i64 } %t234, 1 %t236 = icmp uge i64 %t233, %t235 - br i1 %t236, label %range7814, label %inrange7815 -range7814: + br i1 %t236, label %range7818, label %inrange7819 +range7818: call void @finch_panic_index(ptr @.str.4937, i64 4540, i64 %t233, i64 %t235) unreachable -inrange7815: +inrange7819: %t237 = extractvalue { ptr, i64, i64 } %t234, 0 %t238 = getelementptr inbounds %S.gen.StructDef, ptr %t237, i64 %t233 %t239 = getelementptr inbounds %S.gen.StructDef, ptr %t238, i32 0, i32 2 %t240 = load i1, ptr %t239 - br label %logic.rend7816 -logic.rend7816: - br label %logic.end7811 -logic.end7811: - %t241 = phi i1 [ false, %logic.from7809 ], [ %t240, %logic.rend7816 ] - br label %logic.rend7817 -logic.rend7817: - br label %logic.end7808 -logic.end7808: - %t242 = phi i1 [ true, %logic.from7806 ], [ %t241, %logic.rend7817 ] + br label %logic.rend7820 +logic.rend7820: + br label %logic.end7815 +logic.end7815: + %t241 = phi i1 [ false, %logic.from7813 ], [ %t240, %logic.rend7820 ] + br label %logic.rend7821 +logic.rend7821: + br label %logic.end7812 +logic.end7812: + %t242 = phi i1 [ true, %logic.from7810 ], [ %t241, %logic.rend7821 ] %t243 = xor i1 %t242, true - br i1 %t243, label %then7818, label %endif7820 -then7818: + br i1 %t243, label %then7822, label %endif7824 +then7822: %t244 = load ptr, ptr %a1 %t245 = load %S.ast.Node, ptr %a3 %t246 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 @@ -78294,8 +78320,8 @@ then7818: call void @finch.gen.fail(ptr %t244, %S.ast.Node %t245, { ptr, i64, i64 } %t265) store { ptr, i64, i64 } %t265, ptr %a266 call void @finch_str_drop(ptr %a266) - br label %endif7820 -endif7820: + br label %endif7824 +endif7824: %t267 = load ptr, ptr %a1 %t268 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t269 = load %S.ast.Type, ptr %t268 @@ -78311,8 +78337,8 @@ endif7820: store { ptr, i64, i64 } { ptr @.str.4940, i64 0, i64 0 }, ptr %a279 %t280 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 %t281 = load i1, ptr %t280 - br i1 %t281, label %then7821, label %endif7823 -then7821: + br i1 %t281, label %then7825, label %endif7827 +then7825: %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t283 = load ptr, ptr %a1 %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 @@ -78342,29 +78368,29 @@ then7821: store { ptr, i64, i64 } %t301, ptr %a302 call void @finch_str_drop(ptr %a302) store i64 1, ptr %a278 - br label %endif7823 -endif7823: + br label %endif7827 +endif7827: store { ptr, i64, i64 } zeroinitializer, ptr %a303 %t304 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t304, i32 0, i32 1 %t306 = load i64, ptr %t305 store i64 0, ptr %a307 - br label %for.cond7824 -for.cond7824: + br label %for.cond7828 +for.cond7828: %t308 = load i64, ptr %a307 %t309 = icmp slt i64 %t308, %t306 - br i1 %t309, label %for.body7825, label %for.end7827 -for.body7825: + br i1 %t309, label %for.body7829, label %for.end7831 +for.body7829: %t310 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 %t311 = load i64, ptr %a307 %t312 = load { ptr, i64, i64 }, ptr %t310 %t313 = extractvalue { ptr, i64, i64 } %t312, 1 %t314 = icmp uge i64 %t311, %t313 - br i1 %t314, label %range7828, label %inrange7829 -range7828: + br i1 %t314, label %range7832, label %inrange7833 +range7832: call void @finch_panic_index(ptr @.str.4944, i64 4555, i64 %t311, i64 %t313) unreachable -inrange7829: +inrange7833: %t315 = extractvalue { ptr, i64, i64 } %t312, 0 %t316 = getelementptr inbounds %S.ast.Type, ptr %t315, i64 %t311 %t317 = load %S.ast.Type, ptr %t316 @@ -78377,11 +78403,11 @@ inrange7829: %t324 = load { ptr, i64, i64 }, ptr %t322 %t325 = extractvalue { ptr, i64, i64 } %t324, 1 %t326 = icmp uge i64 %t323, %t325 - br i1 %t326, label %range7830, label %inrange7831 -range7830: + br i1 %t326, label %range7834, label %inrange7835 +range7834: call void @finch_panic_index(ptr @.str.4945, i64 4556, i64 %t323, i64 %t325) unreachable -inrange7831: +inrange7835: %t327 = extractvalue { ptr, i64, i64 } %t324, 0 %t328 = getelementptr inbounds %S.gen.Abi, ptr %t327, i64 %t323 %t329 = load %S.gen.Abi, ptr %t328 @@ -78395,8 +78421,8 @@ inrange7831: store { ptr, i64, i64 } { ptr @.str.4946, i64 6, i64 0 }, ptr %a337 %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) %t339 = icmp ne i32 %t338, 0 - br i1 %t339, label %then7832, label %else7833 -then7832: + br i1 %t339, label %then7836, label %else7837 +then7836: %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t341 = load ptr, ptr %a1 %t342 = load %S.ast.Type, ptr %a321 @@ -78495,16 +78521,16 @@ then7832: %t416 = load i64, ptr %a278 %t417 = add i64 %t416, 1 store i64 %t417, ptr %a278 - br label %endif7834 -else7833: + br label %endif7838 +else7837: %t418 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 %t419 = load { ptr, i64, i64 }, ptr %t418 store { ptr, i64, i64 } %t419, ptr %a420 store { ptr, i64, i64 } { ptr @.str.4952, i64 8, i64 0 }, ptr %a421 %t422 = call i32 @finch_str_eq(ptr %a420, ptr %a421) %t423 = icmp ne i32 %t422, 0 - br i1 %t423, label %then7835, label %else7836 -then7835: + br i1 %t423, label %then7839, label %else7840 +then7839: %t424 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t425 = load i64, ptr %a278 call void @finch_str_from_int(ptr %a426, i64 %t425) @@ -78568,16 +78594,16 @@ then7835: %t471 = load i64, ptr %a278 %t472 = add i64 %t471, 1 store i64 %t472, ptr %a278 - br label %endif7837 -else7836: + br label %endif7841 +else7840: %t473 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 %t474 = load { ptr, i64, i64 }, ptr %t473 store { ptr, i64, i64 } %t474, ptr %a475 store { ptr, i64, i64 } { ptr @.str.4956, i64 6, i64 0 }, ptr %a476 %t477 = call i32 @finch_str_eq(ptr %a475, ptr %a476) %t478 = icmp ne i32 %t477, 0 - br i1 %t478, label %then7838, label %else7839 -then7838: + br i1 %t478, label %then7842, label %else7843 +then7842: %t479 = load ptr, ptr %a1 %t480 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t479, { ptr, i64, i64 } { ptr @.str.4957, i64 9, i64 0 }) store { ptr, i64, i64 } %t480, ptr %a481 @@ -78585,23 +78611,23 @@ then7838: %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 %t484 = load i64, ptr %t483 store i64 0, ptr %a485 - br label %for.cond7841 -for.cond7841: + br label %for.cond7845 +for.cond7845: %t486 = load i64, ptr %a485 %t487 = icmp slt i64 %t486, %t484 - br i1 %t487, label %for.body7842, label %for.end7844 -for.body7842: + br i1 %t487, label %for.body7846, label %for.end7848 +for.body7846: %t488 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t489 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 %t490 = load i64, ptr %a485 %t491 = load { ptr, i64, i64 }, ptr %t489 %t492 = extractvalue { ptr, i64, i64 } %t491, 1 %t493 = icmp uge i64 %t490, %t492 - br i1 %t493, label %range7845, label %inrange7846 -range7845: + br i1 %t493, label %range7849, label %inrange7850 +range7849: call void @finch_panic_index(ptr @.str.4958, i64 4568, i64 %t490, i64 %t492) unreachable -inrange7846: +inrange7850: %t494 = extractvalue { ptr, i64, i64 } %t491, 0 %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i64 %t490 %t496 = load { ptr, i64, i64 }, ptr %t495 @@ -78633,11 +78659,11 @@ inrange7846: %t517 = load { ptr, i64, i64 }, ptr %t515 %t518 = extractvalue { ptr, i64, i64 } %t517, 1 %t519 = icmp uge i64 %t516, %t518 - br i1 %t519, label %range7847, label %inrange7848 -range7847: + br i1 %t519, label %range7851, label %inrange7852 +range7851: call void @finch_panic_index(ptr @.str.4960, i64 4569, i64 %t516, i64 %t518) unreachable -inrange7848: +inrange7852: %t520 = extractvalue { ptr, i64, i64 } %t517, 0 %t521 = getelementptr inbounds { ptr, i64, i64 }, ptr %t520, i64 %t516 %t522 = load { ptr, i64, i64 }, ptr %t521 @@ -78685,13 +78711,13 @@ inrange7848: %t556 = load i64, ptr %a278 %t557 = add i64 %t556, 1 store i64 %t557, ptr %a278 - br label %for.step7843 -for.step7843: + br label %for.step7847 +for.step7847: %t558 = load i64, ptr %a485 %t559 = add i64 %t558, 1 store i64 %t559, ptr %a485 - br label %for.cond7841 -for.end7844: + br label %for.cond7845 +for.end7848: %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 %t561 = load ptr, ptr %a1 %t562 = load %S.ast.Type, ptr %a321 @@ -78726,8 +78752,8 @@ for.end7844: store { ptr, i64, i64 } %t581, ptr %t585 store i64 %t583, ptr %t560 call void @finch_str_drop(ptr %a481) - br label %endif7840 -else7839: + br label %endif7844 +else7843: %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 %t587 = load ptr, ptr %a1 %t588 = load %S.ast.Type, ptr %a321 @@ -78798,21 +78824,21 @@ else7839: %t639 = load i64, ptr %a278 %t640 = add i64 %t639, 1 store i64 %t640, ptr %a278 - br label %endif7840 -endif7840: - br label %endif7837 -endif7837: - br label %endif7834 -endif7834: + br label %endif7844 +endif7844: + br label %endif7841 +endif7841: + br label %endif7838 +endif7838: call void @finch.drop.S_gen_Abi(ptr %a333) call void @finch.drop.S_ast_Type(ptr %a321) - br label %for.step7826 -for.step7826: + br label %for.step7830 +for.step7830: %t641 = load i64, ptr %a307 %t642 = add i64 %t641, 1 store i64 %t642, ptr %a307 - br label %for.cond7824 -for.end7827: + br label %for.cond7828 +for.end7831: %t643 = load ptr, ptr %a1 %t644 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t645 = load %S.ast.Type, ptr %t644 @@ -78870,19 +78896,19 @@ for.end7827: store { ptr, i64, i64 } { ptr @.str.4973, i64 4, i64 0 }, ptr %a690 %t691 = call i32 @finch_str_eq(ptr %a689, ptr %a690) %t692 = icmp ne i32 %t691, 0 - br i1 %t692, label %then7849, label %else7850 -then7849: + br i1 %t692, label %then7853, label %else7854 +then7853: %t693 = load ptr, ptr %a1 %t694 = load { ptr, i64, i64 }, ptr %a684 call void @finch.gen.emit(ptr %t693, { ptr, i64, i64 } %t694) %t695 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t695, { ptr, i64, i64 } { ptr @.str.4974, i64 8, i64 0 }) - br label %endif7851 -else7850: + br label %endif7855 +else7854: %t696 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 %t697 = load i1, ptr %t696 - br i1 %t697, label %then7852, label %else7853 -then7852: + br i1 %t697, label %then7856, label %else7857 +then7856: %t698 = load ptr, ptr %a1 %t699 = load ptr, ptr %a1 %t700 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 @@ -78899,8 +78925,8 @@ then7852: call void @finch_str_drop(ptr %a708) %t709 = load ptr, ptr %a1 call void @finch.gen.emit(ptr %t709, { ptr, i64, i64 } { ptr @.str.4975, i64 8, i64 0 }) - br label %endif7854 -else7853: + br label %endif7858 +else7857: %t710 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 %t711 = getelementptr inbounds %S.gen.Abi, ptr %t710, i32 0, i32 0 %t712 = load { ptr, i64, i64 }, ptr %t711 @@ -78908,8 +78934,8 @@ else7853: store { ptr, i64, i64 } { ptr @.str.4976, i64 6, i64 0 }, ptr %a714 %t715 = call i32 @finch_str_eq(ptr %a713, ptr %a714) %t716 = icmp ne i32 %t715, 0 - br i1 %t716, label %then7855, label %else7856 -then7855: + br i1 %t716, label %then7859, label %else7860 +then7859: %t717 = load ptr, ptr %a1 %t718 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t717, { ptr, i64, i64 } { ptr @.str.4977, i64 9, i64 0 }) store { ptr, i64, i64 } %t718, ptr %a719 @@ -78959,8 +78985,8 @@ then7855: store { ptr, i64, i64 } %t755, ptr %a756 call void @finch_str_drop(ptr %a756) call void @finch_str_drop(ptr %a719) - br label %endif7857 -else7856: + br label %endif7861 +else7860: %t757 = load ptr, ptr %a1 %t758 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 %t759 = load %S.ast.Type, ptr %t758 @@ -79000,12 +79026,12 @@ else7856: call void @finch.gen.emit(ptr %t763, { ptr, i64, i64 } %t786) store { ptr, i64, i64 } %t786, ptr %a787 call void @finch_str_drop(ptr %a787) - br label %endif7857 -endif7857: - br label %endif7854 -endif7854: - br label %endif7851 -endif7851: + br label %endif7861 +endif7861: + br label %endif7858 +endif7858: + br label %endif7855 +endif7855: %t788 = load ptr, ptr %a1 %t789 = load %S.gen.Saved, ptr %a276 %t790 = load { ptr, i64, i64 }, ptr %a685 @@ -79180,21 +79206,21 @@ entry: store i64 %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic7861, label %ok7862 -panic7861: + br i1 %t5, label %panic7865, label %ok7866 +panic7865: call void @finch_panic(ptr @.str.4988, i64 4601, ptr @.str.4989) unreachable -ok7862: +ok7866: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 %t7 = load i64, ptr %a3 %t8 = load { ptr, i64, i64 }, ptr %t6 %t9 = extractvalue { ptr, i64, i64 } %t8, 1 %t10 = icmp uge i64 %t7, %t9 - br i1 %t10, label %range7863, label %inrange7864 -range7863: + br i1 %t10, label %range7867, label %inrange7868 +range7867: call void @finch_panic_index(ptr @.str.4990, i64 4601, i64 %t7, i64 %t9) unreachable -inrange7864: +inrange7868: %t11 = extractvalue { ptr, i64, i64 } %t8, 0 %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 %t13 = load %S.gen.EnumDef, ptr %t12 @@ -79212,11 +79238,11 @@ inrange7864: %t24 = load { ptr, i64, i64 }, ptr %t23 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 0, %t25 - br i1 %t26, label %range7865, label %inrange7866 -range7865: + br i1 %t26, label %range7869, label %inrange7870 +range7869: call void @finch_panic_index(ptr @.str.4991, i64 4603, i64 0, i64 %t25) unreachable -inrange7866: +inrange7870: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 0 %t29 = load %S.ast.Node, ptr %t28 @@ -79226,18 +79252,18 @@ inrange7866: %t33 = load %S.ast.Type, ptr %t32 %t34 = call i1 @finch.gen.isInt(%S.ast.Type %t33) %t35 = xor i1 %t34, true - br i1 %t35, label %then7867, label %endif7869 -then7867: + br i1 %t35, label %then7871, label %endif7873 +then7871: %t36 = load ptr, ptr %a1 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t38 = load { ptr, i64, i64 }, ptr %t37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 0, %t39 - br i1 %t40, label %range7870, label %inrange7871 -range7870: + br i1 %t40, label %range7874, label %inrange7875 +range7874: call void @finch_panic_index(ptr @.str.4992, i64 4605, i64 0, i64 %t39) unreachable -inrange7871: +inrange7875: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 0 %t43 = load %S.ast.Node, ptr %t42 @@ -79261,8 +79287,8 @@ inrange7871: call void @finch.gen.fail(ptr %t36, %S.ast.Node %t43, { ptr, i64, i64 } %t58) store { ptr, i64, i64 } %t58, ptr %a59 call void @finch_str_drop(ptr %a59) - br label %endif7869 -endif7869: + br label %endif7873 +endif7873: %t60 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4994, i64 4, i64 0 }, 0 %t61 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 %t62 = load { ptr, i64, i64 }, ptr %t61 @@ -79279,8 +79305,8 @@ endif7869: store %S.ast.Type %t72, ptr %a73 %t74 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 3 %t75 = load i1, ptr %t74 - br i1 %t75, label %then7872, label %endif7874 -then7872: + br i1 %t75, label %then7876, label %endif7878 +then7876: %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 %t78 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 @@ -79291,39 +79317,39 @@ then7872: %t83 = load i64, ptr %t77 %t84 = load ptr, ptr %t76 store i64 0, ptr %a85 - br label %find.cond7875 -find.cond7875: + br label %find.cond7879 +find.cond7879: %t86 = load i64, ptr %a85 %t87 = icmp slt i64 %t86, %t83 - br i1 %t87, label %find.body7876, label %find.end7879 -find.body7876: + br i1 %t87, label %find.body7880, label %find.end7883 +find.body7880: %t88 = getelementptr inbounds i64, ptr %t84, i64 %t86 %t89 = load i64, ptr %t88 %t90 = icmp eq i64 %t89, %t81 - br i1 %t90, label %find.hit7877, label %find.next7878 -find.hit7877: + br i1 %t90, label %find.hit7881, label %find.next7882 +find.hit7881: store i64 %t86, ptr %a82 - br label %find.end7879 -find.next7878: + br label %find.end7883 +find.next7882: %t91 = add i64 %t86, 1 store i64 %t91, ptr %a85 - br label %find.cond7875 -find.end7879: + br label %find.cond7879 +find.end7883: %t92 = load i64, ptr %a82 %t93 = icmp sge i64 %t92, 0 %t94 = xor i1 %t93, true - br i1 %t94, label %then7880, label %endif7882 -then7880: + br i1 %t94, label %then7884, label %endif7886 +then7884: %t95 = load ptr, ptr %a1 %t96 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t97 = load { ptr, i64, i64 }, ptr %t96 %t98 = extractvalue { ptr, i64, i64 } %t97, 1 %t99 = icmp uge i64 0, %t98 - br i1 %t99, label %range7883, label %inrange7884 -range7883: + br i1 %t99, label %range7887, label %inrange7888 +range7887: call void @finch_panic_index(ptr @.str.4996, i64 4610, i64 0, i64 %t98) unreachable -inrange7884: +inrange7888: %t100 = extractvalue { ptr, i64, i64 } %t97, 0 %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 0 %t102 = load %S.ast.Node, ptr %t101 @@ -79344,8 +79370,8 @@ inrange7884: call void @finch.gen.fail(ptr %t95, %S.ast.Node %t102, { ptr, i64, i64 } %t115) store { ptr, i64, i64 } %t115, ptr %a116 call void @finch_str_drop(ptr %a116) - br label %endif7882 -endif7882: + br label %endif7886 +endif7886: %t117 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t118 = load { ptr, i64, i64 }, ptr %t117 store { ptr, i64, i64 } %t118, ptr %a119 @@ -79361,7 +79387,7 @@ endif7882: call void @finch.drop.S_gen_Val(ptr %a31) call void @finch.drop.S_gen_EnumDef(ptr %a17) ret %S.gen.Val %t127 -endif7874: +endif7878: %t128 = load ptr, ptr %a1 %t129 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 %t130 = load { ptr, i64, i64 }, ptr %t129 @@ -79377,12 +79403,12 @@ endif7874: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 %t140 = load i64, ptr %t139 store i64 0, ptr %a141 - br label %for.cond7885 -for.cond7885: + br label %for.cond7889 +for.cond7889: %t142 = load i64, ptr %a141 %t143 = icmp slt i64 %t142, %t140 - br i1 %t143, label %for.body7886, label %for.end7888 -for.body7886: + br i1 %t143, label %for.body7890, label %for.end7892 +for.body7890: %t144 = load ptr, ptr %a1 %t145 = load { ptr, i64, i64 }, ptr %a136 store { ptr, i64, i64 } { ptr @.str.5000, i64 12, i64 0 }, ptr %a147 @@ -79400,11 +79426,11 @@ for.body7886: %t157 = load { ptr, i64, i64 }, ptr %t155 %t158 = extractvalue { ptr, i64, i64 } %t157, 1 %t159 = icmp uge i64 %t156, %t158 - br i1 %t159, label %range7889, label %inrange7890 -range7889: + br i1 %t159, label %range7893, label %inrange7894 +range7893: call void @finch_panic_index(ptr @.str.5002, i64 4617, i64 %t156, i64 %t158) unreachable -inrange7890: +inrange7894: %t160 = extractvalue { ptr, i64, i64 } %t157, 0 %t161 = getelementptr inbounds i64, ptr %t160, i64 %t156 %t162 = load i64, ptr %t161 @@ -79424,8 +79450,8 @@ inrange7890: store { ptr, i64, i64 } %t171, ptr %a173 %t174 = load i64, ptr %a141 %t175 = icmp eq i64 %t174, 0 - br i1 %t175, label %then7891, label %else7892 -then7891: + br i1 %t175, label %then7895, label %else7896 +then7895: %t176 = load { ptr, i64, i64 }, ptr %a173 store { ptr, i64, i64 } %t176, ptr %a177 call void @finch_str_copy(ptr %a178, ptr %a177) @@ -79434,8 +79460,8 @@ then7891: store { ptr, i64, i64 } %t179, ptr %a137 store { ptr, i64, i64 } %t180, ptr %a181 call void @finch_str_drop(ptr %a181) - br label %endif7893 -else7892: + br label %endif7897 +else7896: %t182 = load ptr, ptr %a1 %t183 = load { ptr, i64, i64 }, ptr %a137 store { ptr, i64, i64 } { ptr @.str.5003, i64 6, i64 0 }, ptr %a185 @@ -79462,16 +79488,16 @@ else7892: store { ptr, i64, i64 } %t199, ptr %a137 store { ptr, i64, i64 } %t201, ptr %a202 call void @finch_str_drop(ptr %a202) - br label %endif7893 -endif7893: + br label %endif7897 +endif7897: call void @finch_str_drop(ptr %a173) - br label %for.step7887 -for.step7887: + br label %for.step7891 +for.step7891: %t203 = load i64, ptr %a141 %t204 = add i64 %t203, 1 store i64 %t204, ptr %a141 - br label %for.cond7885 -for.end7888: + br label %for.cond7889 +for.end7892: %t205 = load ptr, ptr %a1 %t206 = load ptr, ptr %a1 %t207 = load { ptr, i64, i64 }, ptr %a137 @@ -79547,102 +79573,102 @@ entry: store { ptr, i64, i64 } { ptr @.str.5010, i64 4, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br label %logic.from7894 -logic.from7894: - br i1 %t8, label %logic.end7896, label %logic.rhs7895 -logic.rhs7895: + br label %logic.from7898 +logic.from7898: + br i1 %t8, label %logic.end7900, label %logic.rhs7899 +logic.rhs7899: %t9 = load %S.ast.Type, ptr %a2 %t10 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t9) - br label %logic.rend7897 -logic.rend7897: - br label %logic.end7896 -logic.end7896: - %t11 = phi i1 [ true, %logic.from7894 ], [ %t10, %logic.rend7897 ] - br i1 %t11, label %then7898, label %endif7900 -then7898: + br label %logic.rend7901 +logic.rend7901: + br label %logic.end7900 +logic.end7900: + %t11 = phi i1 [ true, %logic.from7898 ], [ %t10, %logic.rend7901 ] + br i1 %t11, label %then7902, label %endif7904 +then7902: %t12 = load %S.ast.Type, ptr %a2 %t13 = call i64 @finch.gen.bitsOf(%S.ast.Type %t12) %t14 = icmp slt i64 %t13, 32 - br i1 %t14, label %then7901, label %endif7903 -then7901: + br i1 %t14, label %then7905, label %endif7907 +then7905: ret { ptr, i64, i64 } { ptr @.str.5011, i64 8, i64 0 } -endif7903: - br label %endif7900 -endif7900: +endif7907: + br label %endif7904 +endif7904: %t15 = load %S.ast.Type, ptr %a2 %t16 = call i1 @finch.gen.isSigned(%S.ast.Type %t15) - br label %logic.from7904 -logic.from7904: - br i1 %t16, label %logic.end7906, label %logic.rhs7905 -logic.rhs7905: + br label %logic.from7908 +logic.from7908: + br i1 %t16, label %logic.end7910, label %logic.rhs7909 +logic.rhs7909: %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t18 = load { ptr, i64, i64 }, ptr %t17 store { ptr, i64, i64 } %t18, ptr %a19 store { ptr, i64, i64 } { ptr @.str.5012, i64 4, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br label %logic.from7907 -logic.from7907: - br i1 %t22, label %logic.rhs7908, label %logic.end7909 -logic.rhs7908: + br label %logic.from7911 +logic.from7911: + br i1 %t22, label %logic.rhs7912, label %logic.end7913 +logic.rhs7912: %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic7910, label %ok7911 -panic7910: + br i1 %t24, label %panic7914, label %ok7915 +panic7914: call void @finch_panic(ptr @.str.5013, i64 4637, ptr @.str.5014) unreachable -ok7911: +ok7915: %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 31 %t26 = load %S.platform.Target, ptr %t25 %t27 = call i1 @finch.platform.charIsSigned(%S.platform.Target %t26) - br label %logic.rend7912 -logic.rend7912: - br label %logic.end7909 -logic.end7909: - %t28 = phi i1 [ false, %logic.from7907 ], [ %t27, %logic.rend7912 ] - br label %logic.rend7913 -logic.rend7913: - br label %logic.end7906 -logic.end7906: - %t29 = phi i1 [ true, %logic.from7904 ], [ %t28, %logic.rend7913 ] - br label %logic.from7914 -logic.from7914: - br i1 %t29, label %logic.rhs7915, label %logic.end7916 -logic.rhs7915: + br label %logic.rend7916 +logic.rend7916: + br label %logic.end7913 +logic.end7913: + %t28 = phi i1 [ false, %logic.from7911 ], [ %t27, %logic.rend7916 ] + br label %logic.rend7917 +logic.rend7917: + br label %logic.end7910 +logic.end7910: + %t29 = phi i1 [ true, %logic.from7908 ], [ %t28, %logic.rend7917 ] + br label %logic.from7918 +logic.from7918: + br i1 %t29, label %logic.rhs7919, label %logic.end7920 +logic.rhs7919: %t30 = load %S.ast.Type, ptr %a2 %t31 = call i64 @finch.gen.bitsOf(%S.ast.Type %t30) %t32 = icmp slt i64 %t31, 32 - br label %logic.rend7917 -logic.rend7917: - br label %logic.end7916 -logic.end7916: - %t33 = phi i1 [ false, %logic.from7914 ], [ %t32, %logic.rend7917 ] - br i1 %t33, label %then7918, label %endif7920 -then7918: + br label %logic.rend7921 +logic.rend7921: + br label %logic.end7920 +logic.end7920: + %t33 = phi i1 [ false, %logic.from7918 ], [ %t32, %logic.rend7921 ] + br i1 %t33, label %then7922, label %endif7924 +then7922: ret { ptr, i64, i64 } { ptr @.str.5015, i64 8, i64 0 } -endif7920: +endif7924: %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 %t35 = load { ptr, i64, i64 }, ptr %t34 store { ptr, i64, i64 } %t35, ptr %a36 store { ptr, i64, i64 } { ptr @.str.5016, i64 4, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br label %logic.from7921 -logic.from7921: - br i1 %t39, label %logic.rhs7922, label %logic.end7923 -logic.rhs7922: + br label %logic.from7925 +logic.from7925: + br i1 %t39, label %logic.rhs7926, label %logic.end7927 +logic.rhs7926: %t40 = load %S.ast.Type, ptr %a2 %t41 = call i64 @finch.gen.bitsOf(%S.ast.Type %t40) %t42 = icmp slt i64 %t41, 32 - br label %logic.rend7924 -logic.rend7924: - br label %logic.end7923 -logic.end7923: - %t43 = phi i1 [ false, %logic.from7921 ], [ %t42, %logic.rend7924 ] - br i1 %t43, label %then7925, label %endif7927 -then7925: + br label %logic.rend7928 +logic.rend7928: + br label %logic.end7927 +logic.end7927: + %t43 = phi i1 [ false, %logic.from7925 ], [ %t42, %logic.rend7928 ] + br i1 %t43, label %then7929, label %endif7931 +then7929: ret { ptr, i64, i64 } { ptr @.str.5017, i64 8, i64 0 } -endif7927: +endif7931: ret { ptr, i64, i64 } { ptr @.str.5018, i64 0, i64 0 } } @@ -79660,10 +79686,10 @@ entry: store { ptr, i64, i64 } { ptr @.str.5019, i64 3, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br i1 %t8, label %then7928, label %endif7930 -then7928: + br i1 %t8, label %then7932, label %endif7934 +then7932: ret { ptr, i64, i64 } { ptr @.str.5020, i64 3, i64 0 } -endif7930: +endif7934: %t9 = load ptr, ptr %a1 %t10 = load %S.ast.Type, ptr %a2 %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t9, %S.ast.Type %t10) @@ -80133,26 +80159,26 @@ entry: store %S.cimport.CFunc %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic7931, label %ok7932 -panic7931: + br i1 %t5, label %panic7935, label %ok7936 +panic7935: call void @finch_panic(ptr @.str.5021, i64 4654, ptr @.str.5022) unreachable -ok7932: +ok7936: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 - br i1 %t7, label %then7933, label %endif7935 -then7933: + br i1 %t7, label %then7937, label %endif7939 +then7937: store { ptr, i64, i64 } zeroinitializer, ptr %a8 %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 store i64 0, ptr %a10 - br label %each.cond7936 -each.cond7936: + br label %each.cond7940 +each.cond7940: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 - br i1 %t14, label %each.body7937, label %each.end7939 -each.body7937: + br i1 %t14, label %each.body7941, label %each.end7943 +each.body7941: %t15 = load ptr, ptr %t9 %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 %t17 = load %S.ast.Type, ptr %t16 @@ -80167,17 +80193,17 @@ each.body7937: %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t22 store { ptr, i64, i64 } %t21, ptr %t25 store i64 %t23, ptr %t19 - br label %each.step7938 -each.step7938: + br label %each.step7942 +each.step7942: %t26 = load i64, ptr %a10 %t27 = add i64 %t26, 1 store i64 %t27, ptr %a10 - br label %each.cond7936 -each.end7939: + br label %each.cond7940 +each.end7943: %t28 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t29 = load i1, ptr %t28 - br i1 %t29, label %then7940, label %endif7942 -then7940: + br i1 %t29, label %then7944, label %endif7946 +then7944: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t31, 1 @@ -80186,8 +80212,8 @@ then7940: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } { ptr @.str.5023, i64 3, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 - br label %endif7942 -endif7942: + br label %endif7946 +endif7946: %t35 = load ptr, ptr %a1 %t36 = load %S.ast.Node, ptr %a2 %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 @@ -80260,14 +80286,14 @@ endif7942: store { ptr, i64, i64 } %t93, ptr %a94 call void @finch_str_drop(ptr %a94) call void @finch.drop.arr_str(ptr %a8) - br label %endif7935 -endif7935: + br label %endif7939 +endif7939: %t95 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 %t97 = load i64, ptr %t96 %t98 = icmp sgt i64 %t97, 0 - br i1 %t98, label %then7943, label %endif7945 -then7943: + br i1 %t98, label %then7947, label %endif7949 +then7947: %t99 = load ptr, ptr %a1 %t100 = load %S.ast.Node, ptr %a2 %t101 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -80293,23 +80319,23 @@ then7943: call void @finch.gen.fail(ptr %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t118) store { ptr, i64, i64 } %t118, ptr %a119 call void @finch_str_drop(ptr %a119) - br label %endif7945 -endif7945: + br label %endif7949 +endif7949: %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t120, i32 0, i32 1 %t122 = load i64, ptr %t121 store i64 %t122, ptr %a123 %t124 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t125 = load i1, ptr %t124 - br i1 %t125, label %then7946, label %else7947 -then7946: + br i1 %t125, label %then7950, label %else7951 +then7950: %t126 = load i64, ptr %a123 %t127 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1 %t129 = load i64, ptr %t128 %t130 = icmp slt i64 %t126, %t129 - br i1 %t130, label %then7949, label %endif7951 -then7949: + br i1 %t130, label %then7953, label %endif7955 +then7953: %t131 = load ptr, ptr %a1 %t132 = load %S.ast.Node, ptr %a2 %t133 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -80357,17 +80383,17 @@ then7949: call void @finch.gen.fail(ptr %t131, %S.ast.Node %t132, { ptr, i64, i64 } %t168) store { ptr, i64, i64 } %t168, ptr %a169 call void @finch_str_drop(ptr %a169) - br label %endif7951 -endif7951: - br label %endif7948 -else7947: + br label %endif7955 +endif7955: + br label %endif7952 +else7951: %t170 = load i64, ptr %a123 %t171 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 %t173 = load i64, ptr %t172 %t174 = icmp ne i64 %t170, %t173 - br i1 %t174, label %then7952, label %endif7954 -then7952: + br i1 %t174, label %then7956, label %endif7958 +then7956: %t175 = load ptr, ptr %a1 %t176 = load %S.ast.Node, ptr %a2 %t177 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -80415,10 +80441,10 @@ then7952: call void @finch.gen.fail(ptr %t175, %S.ast.Node %t176, { ptr, i64, i64 } %t212) store { ptr, i64, i64 } %t212, ptr %a213 call void @finch_str_drop(ptr %a213) - br label %endif7954 -endif7954: - br label %endif7948 -endif7948: + br label %endif7958 +endif7958: + br label %endif7952 +endif7952: %t214 = load ptr, ptr %a1 %t215 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 %t216 = load %S.ast.Type, ptr %t215 @@ -80434,14 +80460,14 @@ endif7948: store { ptr, i64, i64 } zeroinitializer, ptr %a225 %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 store i64 0, ptr %a227 - br label %each.cond7955 -each.cond7955: + br label %each.cond7959 +each.cond7959: %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i32 0, i32 1 %t229 = load i64, ptr %t228 %t230 = load i64, ptr %a227 %t231 = icmp slt i64 %t230, %t229 - br i1 %t231, label %each.body7956, label %each.end7958 -each.body7956: + br i1 %t231, label %each.body7960, label %each.end7962 +each.body7960: %t232 = load ptr, ptr %t226 %t233 = getelementptr inbounds %S.ast.Type, ptr %t232, i64 %t230 %t234 = load %S.ast.Type, ptr %t233 @@ -80470,13 +80496,13 @@ each.body7956: store %S.ast.Type %t250, ptr %t254 store i64 %t252, ptr %t246 call void @finch.drop.S_ast_Type(ptr %a240) - br label %each.step7957 -each.step7957: + br label %each.step7961 +each.step7961: %t255 = load i64, ptr %a227 %t256 = add i64 %t255, 1 store i64 %t256, ptr %a227 - br label %each.cond7955 -each.end7958: + br label %each.cond7959 +each.end7962: %t257 = load ptr, ptr %a1 %t258 = load %S.ast.Type, ptr %a219 %t259 = load { ptr, i64, i64 }, ptr %a225 @@ -80487,8 +80513,8 @@ each.end7958: store { ptr, i64, i64 } { ptr @.str.5041, i64 0, i64 0 }, ptr %a264 %t265 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 %t266 = load i1, ptr %t265 - br i1 %t266, label %then7959, label %endif7961 -then7959: + br i1 %t266, label %then7963, label %endif7965 +then7963: %t267 = load ptr, ptr %a1 %t268 = load ptr, ptr %a1 %t269 = load %S.ast.Type, ptr %a219 @@ -80553,16 +80579,16 @@ then7959: %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t315, i64 %t313 store { ptr, i64, i64 } %t312, ptr %t316 store i64 %t314, ptr %t293 - br label %endif7961 -endif7961: + br label %endif7965 +endif7965: store { ptr, i64, i64 } zeroinitializer, ptr %a317 %t318 = load ptr, ptr %a1 %t319 = icmp eq ptr %t318, null - br i1 %t319, label %panic7962, label %ok7963 -panic7962: + br i1 %t319, label %panic7966, label %ok7967 +panic7966: call void @finch_panic(ptr @.str.5046, i64 4693, ptr @.str.5047) unreachable -ok7963: +ok7967: %t320 = getelementptr inbounds %S.gen.Gen, ptr %t318, i32 0, i32 11 %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i32 0, i32 1 %t322 = load i64, ptr %t321 @@ -80571,28 +80597,28 @@ ok7963: %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %t324, i32 0, i32 1 %t326 = load i64, ptr %t325 store i64 0, ptr %a327 - br label %for.cond7964 -for.cond7964: + br label %for.cond7968 +for.cond7968: %t328 = load i64, ptr %a327 %t329 = icmp slt i64 %t328, %t326 - br i1 %t329, label %for.body7965, label %for.end7967 -for.body7965: + br i1 %t329, label %for.body7969, label %for.end7971 +for.body7969: %t330 = load i64, ptr %a327 %t331 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 %t333 = load i64, ptr %t332 %t334 = icmp slt i64 %t330, %t333 - br i1 %t334, label %then7968, label %endif7970 -then7968: + br i1 %t334, label %then7972, label %endif7974 +then7972: %t335 = load i64, ptr %a327 %t336 = load { ptr, i64, i64 }, ptr %a225 %t337 = extractvalue { ptr, i64, i64 } %t336, 1 %t338 = icmp uge i64 %t335, %t337 - br i1 %t338, label %range7971, label %inrange7972 -range7971: + br i1 %t338, label %range7975, label %inrange7976 +range7975: call void @finch_panic_index(ptr @.str.5048, i64 4696, i64 %t335, i64 %t337) unreachable -inrange7972: +inrange7976: %t339 = extractvalue { ptr, i64, i64 } %t336, 0 %t340 = getelementptr inbounds %S.ast.Type, ptr %t339, i64 %t335 %t341 = load %S.ast.Type, ptr %t340 @@ -80605,11 +80631,11 @@ inrange7972: %t348 = load { ptr, i64, i64 }, ptr %t346 %t349 = extractvalue { ptr, i64, i64 } %t348, 1 %t350 = icmp uge i64 %t347, %t349 - br i1 %t350, label %range7973, label %inrange7974 -range7973: + br i1 %t350, label %range7977, label %inrange7978 +range7977: call void @finch_panic_index(ptr @.str.5049, i64 4697, i64 %t347, i64 %t349) unreachable -inrange7974: +inrange7978: %t351 = extractvalue { ptr, i64, i64 } %t348, 0 %t352 = getelementptr inbounds %S.gen.Abi, ptr %t351, i64 %t347 %t353 = load %S.gen.Abi, ptr %t352 @@ -80624,11 +80650,11 @@ inrange7974: %t362 = load { ptr, i64, i64 }, ptr %t360 %t363 = extractvalue { ptr, i64, i64 } %t362, 1 %t364 = icmp uge i64 %t361, %t363 - br i1 %t364, label %range7975, label %inrange7976 -range7975: + br i1 %t364, label %range7979, label %inrange7980 +range7979: call void @finch_panic_index(ptr @.str.5050, i64 4698, i64 %t361, i64 %t363) unreachable -inrange7976: +inrange7980: %t365 = extractvalue { ptr, i64, i64 } %t362, 0 %t366 = getelementptr inbounds %S.ast.Node, ptr %t365, i64 %t361 %t367 = load %S.ast.Node, ptr %t366 @@ -80640,11 +80666,11 @@ inrange7976: %t373 = load { ptr, i64, i64 }, ptr %t371 %t374 = extractvalue { ptr, i64, i64 } %t373, 1 %t375 = icmp uge i64 %t372, %t374 - br i1 %t375, label %range7977, label %inrange7978 -range7977: + br i1 %t375, label %range7981, label %inrange7982 +range7981: call void @finch_panic_index(ptr @.str.5051, i64 4698, i64 %t372, i64 %t374) unreachable -inrange7978: +inrange7982: %t376 = extractvalue { ptr, i64, i64 } %t373, 0 %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i64 %t372 %t378 = load %S.ast.Node, ptr %t377 @@ -80699,8 +80725,8 @@ inrange7978: store { ptr, i64, i64 } { ptr @.str.5054, i64 6, i64 0 }, ptr %a418 %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) %t420 = icmp ne i32 %t419, 0 - br i1 %t420, label %then7979, label %else7980 -then7979: + br i1 %t420, label %then7983, label %else7984 +then7983: %t421 = load ptr, ptr %a1 %t422 = load ptr, ptr %a1 %t423 = load %S.ast.Type, ptr %a345 @@ -80781,16 +80807,16 @@ then7979: store i64 %t482, ptr %t469 call void @finch_str_drop(ptr %a459) call void @finch_str_drop(ptr %a427) - br label %endif7981 -else7980: + br label %endif7985 +else7984: %t485 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 %t486 = load { ptr, i64, i64 }, ptr %t485 store { ptr, i64, i64 } %t486, ptr %a487 store { ptr, i64, i64 } { ptr @.str.5058, i64 8, i64 0 }, ptr %a488 %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) %t490 = icmp ne i32 %t489, 0 - br i1 %t490, label %then7982, label %else7983 -then7982: + br i1 %t490, label %then7986, label %else7987 +then7986: %t491 = load ptr, ptr %a1 %t492 = load ptr, ptr %a1 %t493 = load %S.ast.Type, ptr %a345 @@ -80831,16 +80857,16 @@ then7982: store { ptr, i64, i64 } %t516, ptr %t520 store i64 %t518, ptr %t511 call void @finch_str_drop(ptr %a497) - br label %endif7984 -else7983: + br label %endif7988 +else7987: %t521 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 %t522 = load { ptr, i64, i64 }, ptr %t521 store { ptr, i64, i64 } %t522, ptr %a523 store { ptr, i64, i64 } { ptr @.str.5061, i64 6, i64 0 }, ptr %a524 %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) %t526 = icmp ne i32 %t525, 0 - br i1 %t526, label %then7985, label %else7986 -then7985: + br i1 %t526, label %then7989, label %else7990 +then7989: %t527 = load ptr, ptr %a1 %t528 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t527, { ptr, i64, i64 } { ptr @.str.5062, i64 9, i64 0 }) store { ptr, i64, i64 } %t528, ptr %a529 @@ -80858,23 +80884,23 @@ then7985: %t539 = getelementptr inbounds { ptr, i64, i64 }, ptr %t538, i32 0, i32 1 %t540 = load i64, ptr %t539 store i64 0, ptr %a541 - br label %for.cond7988 -for.cond7988: + br label %for.cond7992 +for.cond7992: %t542 = load i64, ptr %a541 %t543 = icmp slt i64 %t542, %t540 - br i1 %t543, label %for.body7989, label %for.end7991 -for.body7989: + br i1 %t543, label %for.body7993, label %for.end7995 +for.body7993: %t544 = load ptr, ptr %a1 %t545 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 %t546 = load i64, ptr %a541 %t547 = load { ptr, i64, i64 }, ptr %t545 %t548 = extractvalue { ptr, i64, i64 } %t547, 1 %t549 = icmp uge i64 %t546, %t548 - br i1 %t549, label %range7992, label %inrange7993 -range7992: + br i1 %t549, label %range7996, label %inrange7997 +range7996: call void @finch_panic_index(ptr @.str.5063, i64 4716, i64 %t546, i64 %t548) unreachable -inrange7993: +inrange7997: %t550 = extractvalue { ptr, i64, i64 } %t547, 0 %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %t550, i64 %t546 %t552 = load { ptr, i64, i64 }, ptr %t551 @@ -80915,11 +80941,11 @@ inrange7993: %t582 = load { ptr, i64, i64 }, ptr %t580 %t583 = extractvalue { ptr, i64, i64 } %t582, 1 %t584 = icmp uge i64 %t581, %t583 - br i1 %t584, label %range7994, label %inrange7995 -range7994: + br i1 %t584, label %range7998, label %inrange7999 +range7998: call void @finch_panic_index(ptr @.str.5066, i64 4717, i64 %t581, i64 %t583) unreachable -inrange7995: +inrange7999: %t585 = extractvalue { ptr, i64, i64 } %t582, 0 %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %t585, i64 %t581 %t587 = load { ptr, i64, i64 }, ptr %t586 @@ -80939,11 +80965,11 @@ inrange7995: %t598 = load { ptr, i64, i64 }, ptr %t596 %t599 = extractvalue { ptr, i64, i64 } %t598, 1 %t600 = icmp uge i64 %t597, %t599 - br i1 %t600, label %range7996, label %inrange7997 -range7996: + br i1 %t600, label %range8000, label %inrange8001 +range8000: call void @finch_panic_index(ptr @.str.5067, i64 4718, i64 %t597, i64 %t599) unreachable -inrange7997: +inrange8001: %t601 = extractvalue { ptr, i64, i64 } %t598, 0 %t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %t601, i64 %t597 %t603 = load { ptr, i64, i64 }, ptr %t602 @@ -80966,16 +80992,16 @@ inrange7997: store { ptr, i64, i64 } %t613, ptr %t617 store i64 %t615, ptr %t595 call void @finch_str_drop(ptr %a578) - br label %for.step7990 -for.step7990: + br label %for.step7994 +for.step7994: %t618 = load i64, ptr %a541 %t619 = add i64 %t618, 1 store i64 %t619, ptr %a541 - br label %for.cond7988 -for.end7991: + br label %for.cond7992 +for.end7995: call void @finch_str_drop(ptr %a529) - br label %endif7987 -else7986: + br label %endif7991 +else7990: %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t621 = load ptr, ptr %a1 %t622 = load %S.ast.Type, ptr %a345 @@ -81004,8 +81030,8 @@ else7986: store { ptr, i64, i64 } { ptr @.str.5069, i64 3, i64 0 }, ptr %a640 %t641 = call i32 @finch_str_eq(ptr %a639, ptr %a640) %t642 = icmp ne i32 %t641, 0 - br i1 %t642, label %then7998, label %else7999 -then7998: + br i1 %t642, label %then8002, label %else8003 +then8002: %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t644 = load ptr, ptr %a1 %t645 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 @@ -81024,8 +81050,8 @@ then7998: %t656 = getelementptr inbounds { ptr, i64, i64 }, ptr %t655, i64 %t653 store { ptr, i64, i64 } %t652, ptr %t656 store i64 %t654, ptr %t643 - br label %endif8000 -else7999: + br label %endif8004 +else8003: %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t658 = load ptr, ptr %a1 %t659 = load %S.ast.Type, ptr %a345 @@ -81062,30 +81088,30 @@ else7999: %t685 = getelementptr inbounds { ptr, i64, i64 }, ptr %t684, i64 %t682 store { ptr, i64, i64 } %t681, ptr %t685 store i64 %t683, ptr %t657 - br label %endif8000 -endif8000: - br label %endif7987 -endif7987: - br label %endif7984 -endif7984: - br label %endif7981 -endif7981: + br label %endif8004 +endif8004: + br label %endif7991 +endif7991: + br label %endif7988 +endif7988: + br label %endif7985 +endif7985: call void @finch.drop.S_gen_Val(ptr %a403) call void @finch.drop.S_gen_Abi(ptr %a357) call void @finch.drop.S_ast_Type(ptr %a345) - br label %for.step7966 -endif7970: + br label %for.step7970 +endif7974: %t686 = load ptr, ptr %a1 %t687 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t688 = load i64, ptr %a327 %t689 = load { ptr, i64, i64 }, ptr %t687 %t690 = extractvalue { ptr, i64, i64 } %t689, 1 %t691 = icmp uge i64 %t688, %t690 - br i1 %t691, label %range8001, label %inrange8002 -range8001: + br i1 %t691, label %range8005, label %inrange8006 +range8005: call void @finch_panic_index(ptr @.str.5072, i64 4731, i64 %t688, i64 %t690) unreachable -inrange8002: +inrange8006: %t692 = extractvalue { ptr, i64, i64 } %t689, 0 %t693 = getelementptr inbounds %S.ast.Node, ptr %t692, i64 %t688 %t694 = load %S.ast.Node, ptr %t693 @@ -81103,25 +81129,25 @@ inrange8002: store { ptr, i64, i64 } { ptr @.str.5073, i64 4, i64 0 }, ptr %a706 %t707 = call i32 @finch_str_eq(ptr %a705, ptr %a706) %t708 = icmp ne i32 %t707, 0 - br i1 %t708, label %then8003, label %endif8005 -then8003: + br i1 %t708, label %then8007, label %endif8009 +then8007: %t709 = load ptr, ptr %a1 %t710 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t711 = load i64, ptr %a327 %t712 = load { ptr, i64, i64 }, ptr %t710 %t713 = extractvalue { ptr, i64, i64 } %t712, 1 %t714 = icmp uge i64 %t711, %t713 - br i1 %t714, label %range8006, label %inrange8007 -range8006: + br i1 %t714, label %range8010, label %inrange8011 +range8010: call void @finch_panic_index(ptr @.str.5074, i64 4734, i64 %t711, i64 %t713) unreachable -inrange8007: +inrange8011: %t715 = extractvalue { ptr, i64, i64 } %t712, 0 %t716 = getelementptr inbounds %S.ast.Node, ptr %t715, i64 %t711 %t717 = load %S.ast.Node, ptr %t716 call void @finch.gen.fail(ptr %t709, %S.ast.Node %t717, { ptr, i64, i64 } { ptr @.str.5075, i64 23, i64 0 }) - br label %endif8005 -endif8005: + br label %endif8009 +endif8009: %t718 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 %t719 = load %S.gen.Val, ptr %a696 store %S.gen.Val %t719, ptr %a720 @@ -81143,40 +81169,40 @@ endif8005: store { ptr, i64, i64 } { ptr @.str.5076, i64 6, i64 0 }, ptr %a732 %t733 = call i32 @finch_str_eq(ptr %a731, ptr %a732) %t734 = icmp ne i32 %t733, 0 - br label %logic.from8008 -logic.from8008: - br i1 %t734, label %logic.end8010, label %logic.rhs8009 -logic.rhs8009: + br label %logic.from8012 +logic.from8012: + br i1 %t734, label %logic.end8014, label %logic.rhs8013 +logic.rhs8013: %t735 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t736 = load { ptr, i64, i64 }, ptr %t735 store { ptr, i64, i64 } %t736, ptr %a737 store { ptr, i64, i64 } { ptr @.str.5077, i64 5, i64 0 }, ptr %a738 %t739 = call i32 @finch_str_eq(ptr %a737, ptr %a738) %t740 = icmp ne i32 %t739, 0 - br label %logic.rend8011 -logic.rend8011: - br label %logic.end8010 -logic.end8010: - %t741 = phi i1 [ true, %logic.from8008 ], [ %t740, %logic.rend8011 ] - br i1 %t741, label %then8012, label %endif8014 -then8012: + br label %logic.rend8015 +logic.rend8015: + br label %logic.end8014 +logic.end8014: + %t741 = phi i1 [ true, %logic.from8012 ], [ %t740, %logic.rend8015 ] + br i1 %t741, label %then8016, label %endif8018 +then8016: %t742 = load ptr, ptr %a1 %t743 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t744 = load i64, ptr %a327 %t745 = load { ptr, i64, i64 }, ptr %t743 %t746 = extractvalue { ptr, i64, i64 } %t745, 1 %t747 = icmp uge i64 %t744, %t746 - br i1 %t747, label %range8015, label %inrange8016 -range8015: + br i1 %t747, label %range8019, label %inrange8020 +range8019: call void @finch_panic_index(ptr @.str.5078, i64 4739, i64 %t744, i64 %t746) unreachable -inrange8016: +inrange8020: %t748 = extractvalue { ptr, i64, i64 } %t745, 0 %t749 = getelementptr inbounds %S.ast.Node, ptr %t748, i64 %t744 %t750 = load %S.ast.Node, ptr %t749 call void @finch.gen.fail(ptr %t742, %S.ast.Node %t750, { ptr, i64, i64 } { ptr @.str.5079, i64 68, i64 0 }) - br label %endif8014 -endif8014: + br label %endif8018 +endif8018: %t751 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 %t752 = load { ptr, i64, i64 }, ptr %t751 store { ptr, i64, i64 } %t752, ptr %a753 @@ -81189,8 +81215,8 @@ endif8014: store { ptr, i64, i64 } { ptr @.str.5080, i64 3, i64 0 }, ptr %a760 %t761 = call i32 @finch_str_eq(ptr %a759, ptr %a760) %t762 = icmp ne i32 %t761, 0 - br i1 %t762, label %then8017, label %else8018 -then8017: + br i1 %t762, label %then8021, label %else8022 +then8021: %t763 = load ptr, ptr %a1 %t764 = load { ptr, i64, i64 }, ptr %a756 %t765 = load %S.ast.Type, ptr %a702 @@ -81207,16 +81233,16 @@ then8017: store %S.ast.Type %t771, ptr %a702 store %S.ast.Type %t772, ptr %a773 call void @finch.drop.S_ast_Type(ptr %a773) - br label %endif8019 -else8018: + br label %endif8023 +else8022: %t774 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t775 = load { ptr, i64, i64 }, ptr %t774 store { ptr, i64, i64 } %t775, ptr %a776 store { ptr, i64, i64 } { ptr @.str.5083, i64 3, i64 0 }, ptr %a777 %t778 = call i32 @finch_str_eq(ptr %a776, ptr %a777) %t779 = icmp ne i32 %t778, 0 - br i1 %t779, label %then8020, label %else8021 -then8020: + br i1 %t779, label %then8024, label %else8025 +then8024: %t780 = load ptr, ptr %a1 %t781 = load { ptr, i64, i64 }, ptr %a756 %t782 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t780, { ptr, i64, i64 } %t781) @@ -81229,16 +81255,16 @@ then8020: store %S.ast.Type %t785, ptr %a702 store %S.ast.Type %t786, ptr %a787 call void @finch.drop.S_ast_Type(ptr %a787) - br label %endif8022 -else8021: + br label %endif8026 +else8025: %t788 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t789 = load { ptr, i64, i64 }, ptr %t788 store { ptr, i64, i64 } %t789, ptr %a790 store { ptr, i64, i64 } { ptr @.str.5085, i64 4, i64 0 }, ptr %a791 %t792 = call i32 @finch_str_eq(ptr %a790, ptr %a791) %t793 = icmp ne i32 %t792, 0 - br i1 %t793, label %then8023, label %else8024 -then8023: + br i1 %t793, label %then8027, label %else8028 +then8027: %t794 = load ptr, ptr %a1 %t795 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 %t796 = load { ptr, i64, i64 }, ptr %t795 @@ -81264,39 +81290,39 @@ then8023: store %S.ast.Type %t810, ptr %a702 store %S.ast.Type %t811, ptr %a812 call void @finch.drop.S_ast_Type(ptr %a812) - br label %endif8025 -else8024: + br label %endif8029 +else8028: %t813 = load %S.ast.Type, ptr %a702 %t814 = call i1 @finch.gen.isInt(%S.ast.Type %t813) - br label %logic.from8026 -logic.from8026: - br i1 %t814, label %logic.end8028, label %logic.rhs8027 -logic.rhs8027: + br label %logic.from8030 +logic.from8030: + br i1 %t814, label %logic.end8032, label %logic.rhs8031 +logic.rhs8031: %t815 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 %t816 = load { ptr, i64, i64 }, ptr %t815 store { ptr, i64, i64 } %t816, ptr %a817 store { ptr, i64, i64 } { ptr @.str.5089, i64 4, i64 0 }, ptr %a818 %t819 = call i32 @finch_str_eq(ptr %a817, ptr %a818) %t820 = icmp ne i32 %t819, 0 - br label %logic.rend8029 -logic.rend8029: - br label %logic.end8028 -logic.end8028: - %t821 = phi i1 [ true, %logic.from8026 ], [ %t820, %logic.rend8029 ] - br label %logic.from8030 -logic.from8030: - br i1 %t821, label %logic.rhs8031, label %logic.end8032 -logic.rhs8031: - %t822 = load %S.ast.Type, ptr %a702 - %t823 = call i64 @finch.gen.bitsOf(%S.ast.Type %t822) - %t824 = icmp slt i64 %t823, 32 br label %logic.rend8033 logic.rend8033: br label %logic.end8032 logic.end8032: - %t825 = phi i1 [ false, %logic.from8030 ], [ %t824, %logic.rend8033 ] - br i1 %t825, label %then8034, label %endif8036 -then8034: + %t821 = phi i1 [ true, %logic.from8030 ], [ %t820, %logic.rend8033 ] + br label %logic.from8034 +logic.from8034: + br i1 %t821, label %logic.rhs8035, label %logic.end8036 +logic.rhs8035: + %t822 = load %S.ast.Type, ptr %a702 + %t823 = call i64 @finch.gen.bitsOf(%S.ast.Type %t822) + %t824 = icmp slt i64 %t823, 32 + br label %logic.rend8037 +logic.rend8037: + br label %logic.end8036 +logic.end8036: + %t825 = phi i1 [ false, %logic.from8034 ], [ %t824, %logic.rend8037 ] + br i1 %t825, label %then8038, label %endif8040 +then8038: %t826 = load ptr, ptr %a1 %t827 = load { ptr, i64, i64 }, ptr %a756 %t828 = load %S.ast.Type, ptr %a702 @@ -81313,14 +81339,14 @@ then8034: store %S.ast.Type %t834, ptr %a702 store %S.ast.Type %t835, ptr %a836 call void @finch.drop.S_ast_Type(ptr %a836) - br label %endif8036 -endif8036: - br label %endif8025 -endif8025: - br label %endif8022 -endif8022: - br label %endif8019 -endif8019: + br label %endif8040 +endif8040: + br label %endif8029 +endif8029: + br label %endif8026 +endif8026: + br label %endif8023 +endif8023: %t837 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 %t838 = load ptr, ptr %a1 %t839 = load %S.ast.Type, ptr %a702 @@ -81348,13 +81374,13 @@ endif8019: call void @finch_str_drop(ptr %a756) call void @finch.drop.S_ast_Type(ptr %a702) call void @finch.drop.S_gen_Val(ptr %a696) - br label %for.step7966 -for.step7966: + br label %for.step7970 +for.step7970: %t856 = load i64, ptr %a327 %t857 = add i64 %t856, 1 store i64 %t857, ptr %a327 - br label %for.cond7964 -for.end7967: + br label %for.cond7968 +for.end7971: %t858 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 2 %t859 = load { ptr, i64, i64 }, ptr %t858 store { ptr, i64, i64 } %t859, ptr %a860 @@ -81369,8 +81395,8 @@ for.end7967: store { ptr, i64, i64 } { ptr @.str.5094, i64 6, i64 0 }, ptr %a869 %t870 = call i32 @finch_str_eq(ptr %a868, ptr %a869) %t871 = icmp ne i32 %t870, 0 - br i1 %t871, label %then8037, label %endif8039 -then8037: + br i1 %t871, label %then8041, label %endif8043 +then8041: %t872 = load ptr, ptr %a1 %t873 = load %S.ast.Type, ptr %a219 %t874 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t872, %S.ast.Type %t873) @@ -81378,13 +81404,13 @@ then8037: store { ptr, i64, i64 } %t874, ptr %a864 store { ptr, i64, i64 } %t875, ptr %a876 call void @finch_str_drop(ptr %a876) - br label %endif8039 -endif8039: + br label %endif8043 +endif8043: store { ptr, i64, i64 } { ptr @.str.5095, i64 0, i64 0 }, ptr %a877 %t878 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t879 = load i1, ptr %t878 - br i1 %t879, label %then8040, label %endif8042 -then8040: + br i1 %t879, label %then8044, label %endif8046 +then8044: %t880 = load { ptr, i64, i64 }, ptr %a877 store { ptr, i64, i64 } { ptr @.str.5096, i64 5, i64 0 }, ptr %a877 store { ptr, i64, i64 } %t880, ptr %a881 @@ -81392,23 +81418,23 @@ then8040: %t882 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 %t883 = load i64, ptr %t882 %t884 = icmp eq i64 %t883, 0 - br i1 %t884, label %then8043, label %endif8045 -then8043: + br i1 %t884, label %then8047, label %endif8049 +then8047: %t885 = load { ptr, i64, i64 }, ptr %a877 store { ptr, i64, i64 } { ptr @.str.5097, i64 3, i64 0 }, ptr %a877 store { ptr, i64, i64 } %t885, ptr %a886 call void @finch_str_drop(ptr %a886) - br label %endif8045 -endif8045: - br label %endif8042 -endif8042: + br label %endif8049 +endif8049: + br label %endif8046 +endif8046: %t887 = load ptr, ptr %a1 %t888 = icmp eq ptr %t887, null - br i1 %t888, label %panic8046, label %ok8047 -panic8046: + br i1 %t888, label %panic8050, label %ok8051 +panic8050: call void @finch_panic(ptr @.str.5098, i64 4770, ptr @.str.5099) unreachable -ok8047: +ok8051: %t889 = getelementptr inbounds %S.gen.Gen, ptr %t887, i32 0, i32 40 %t890 = getelementptr inbounds { ptr, i64, i64 }, ptr %t889, i32 0, i32 1 %t891 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -81421,41 +81447,41 @@ ok8047: %t898 = load i64, ptr %t890 %t899 = load ptr, ptr %t889 store i64 0, ptr %a900 - br label %find.cond8048 -find.cond8048: + br label %find.cond8052 +find.cond8052: %t901 = load i64, ptr %a900 %t902 = icmp slt i64 %t901, %t898 - br i1 %t902, label %find.body8049, label %find.end8052 -find.body8049: + br i1 %t902, label %find.body8053, label %find.end8056 +find.body8053: %t903 = getelementptr inbounds { ptr, i64, i64 }, ptr %t899, i64 %t901 %t904 = load { ptr, i64, i64 }, ptr %t903 store { ptr, i64, i64 } %t904, ptr %a905 store { ptr, i64, i64 } %t896, ptr %a906 %t907 = call i32 @finch_str_eq(ptr %a905, ptr %a906) %t908 = icmp ne i32 %t907, 0 - br i1 %t908, label %find.hit8050, label %find.next8051 -find.hit8050: + br i1 %t908, label %find.hit8054, label %find.next8055 +find.hit8054: store i64 %t901, ptr %a897 - br label %find.end8052 -find.next8051: + br label %find.end8056 +find.next8055: %t909 = add i64 %t901, 1 store i64 %t909, ptr %a900 - br label %find.cond8048 -find.end8052: + br label %find.cond8052 +find.end8056: store { ptr, i64, i64 } %t896, ptr %a910 call void @finch_str_drop(ptr %a910) %t911 = load i64, ptr %a897 %t912 = icmp sge i64 %t911, 0 %t913 = xor i1 %t912, true - br i1 %t913, label %then8053, label %endif8055 -then8053: + br i1 %t913, label %then8057, label %endif8059 +then8057: %t914 = load ptr, ptr %a1 %t915 = icmp eq ptr %t914, null - br i1 %t915, label %panic8056, label %ok8057 -panic8056: + br i1 %t915, label %panic8060, label %ok8061 +panic8060: call void @finch_panic(ptr @.str.5101, i64 4771, ptr @.str.5102) unreachable -ok8057: +ok8061: %t916 = getelementptr inbounds %S.gen.Gen, ptr %t914, i32 0, i32 40 %t917 = getelementptr inbounds { ptr, i64, i64 }, ptr %t916, i32 0, i32 1 %t918 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 @@ -81475,15 +81501,15 @@ ok8057: %t929 = load { ptr, i64, i64 }, ptr %t928 %t930 = call i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %t929) %t931 = xor i1 %t930, true - br i1 %t931, label %then8058, label %endif8060 -then8058: + br i1 %t931, label %then8062, label %endif8064 +then8062: %t932 = load ptr, ptr %a1 %t933 = icmp eq ptr %t932, null - br i1 %t933, label %panic8061, label %ok8062 -panic8061: + br i1 %t933, label %panic8065, label %ok8066 +panic8065: call void @finch_panic(ptr @.str.5104, i64 4773, ptr @.str.5105) unreachable -ok8062: +ok8066: %t934 = getelementptr inbounds %S.gen.Gen, ptr %t932, i32 0, i32 2 %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t934, i32 0, i32 1 %t936 = load { ptr, i64, i64 }, ptr %a864 @@ -81556,15 +81582,15 @@ ok8062: %t993 = getelementptr inbounds { ptr, i64, i64 }, ptr %t992, i64 %t990 store { ptr, i64, i64 } %t989, ptr %t993 store i64 %t991, ptr %t935 - br label %endif8060 -endif8060: - br label %endif8055 -endif8055: + br label %endif8064 +endif8064: + br label %endif8059 +endif8059: store { ptr, i64, i64 } { ptr @.str.5112, i64 0, i64 0 }, ptr %a994 %t995 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 %t996 = load i1, ptr %t995 - br i1 %t996, label %then8063, label %endif8065 -then8063: + br i1 %t996, label %then8067, label %endif8069 +then8067: %t997 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 store { ptr, i64, i64 } { ptr @.str.5114, i64 2, i64 0 }, ptr %a998 call void @finch_str_join(ptr %a999, ptr %a262, ptr %a998) @@ -81592,8 +81618,8 @@ then8063: store { ptr, i64, i64 } %t1016, ptr %a994 store { ptr, i64, i64 } %t1017, ptr %a1018 call void @finch_str_drop(ptr %a1018) - br label %endif8065 -endif8065: + br label %endif8069 +endif8069: %t1019 = load { ptr, i64, i64 }, ptr %a864 store { ptr, i64, i64 } { ptr @.str.5116, i64 4, i64 0 }, ptr %a1021 store { ptr, i64, i64 } %t1019, ptr %a1022 @@ -81664,8 +81690,8 @@ endif8065: store { ptr, i64, i64 } { ptr @.str.5122, i64 4, i64 0 }, ptr %a1077 %t1078 = call i32 @finch_str_eq(ptr %a1076, ptr %a1077) %t1079 = icmp ne i32 %t1078, 0 - br i1 %t1079, label %then8066, label %endif8068 -then8066: + br i1 %t1079, label %then8070, label %endif8072 +then8070: %t1080 = load ptr, ptr %a1 %t1081 = load { ptr, i64, i64 }, ptr %a1073 call void @finch.gen.emit(ptr %t1080, { ptr, i64, i64 } %t1081) @@ -81691,11 +81717,11 @@ then8066: call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1089 -endif8068: +endif8072: %t1090 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 %t1091 = load i1, ptr %t1090 - br i1 %t1091, label %then8069, label %endif8071 -then8069: + br i1 %t1091, label %then8073, label %endif8075 +then8073: %t1092 = load ptr, ptr %a1 %t1093 = load { ptr, i64, i64 }, ptr %a1073 call void @finch.gen.emit(ptr %t1092, { ptr, i64, i64 } %t1093) @@ -81730,7 +81756,7 @@ then8069: call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1109 -endif8071: +endif8075: %t1110 = load ptr, ptr %a1 %t1111 = load { ptr, i64, i64 }, ptr %a1073 %t1112 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1110, { ptr, i64, i64 } %t1111) @@ -81746,8 +81772,8 @@ endif8071: store { ptr, i64, i64 } { ptr @.str.5123, i64 6, i64 0 }, ptr %a1121 %t1122 = call i32 @finch_str_eq(ptr %a1120, ptr %a1121) %t1123 = icmp ne i32 %t1122, 0 - br i1 %t1123, label %then8072, label %endif8074 -then8072: + br i1 %t1123, label %then8076, label %endif8078 +then8076: %t1124 = load ptr, ptr %a1 %t1125 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1124, { ptr, i64, i64 } { ptr @.str.5124, i64 9, i64 0 }) store { ptr, i64, i64 } %t1125, ptr %a1126 @@ -81787,15 +81813,15 @@ then8072: call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1145 -endif8074: +endif8078: %t1146 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 %t1147 = load { ptr, i64, i64 }, ptr %t1146 store { ptr, i64, i64 } %t1147, ptr %a1148 store { ptr, i64, i64 } { ptr @.str.5125, i64 3, i64 0 }, ptr %a1149 %t1150 = call i32 @finch_str_eq(ptr %a1148, ptr %a1149) %t1151 = icmp ne i32 %t1150, 0 - br i1 %t1151, label %then8075, label %endif8077 -then8075: + br i1 %t1151, label %then8079, label %endif8081 +then8079: %t1152 = load ptr, ptr %a1 %t1153 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1152) store { ptr, i64, i64 } %t1153, ptr %a1154 @@ -81854,7 +81880,7 @@ then8075: call void @finch.drop.arr_S_ast_Type(ptr %a225) call void @finch.drop.S_ast_Type(ptr %a219) ret %S.gen.Val %t1188 -endif8077: +endif8081: %t1189 = load { ptr, i64, i64 }, ptr %a1113 store { ptr, i64, i64 } %t1189, ptr %a1190 call void @finch_str_copy(ptr %a1191, ptr %a1190) @@ -81892,14 +81918,14 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 store i64 %p2, ptr %a3 store i64 0, ptr %a4 - br label %each.cond8078 -each.cond8078: + br label %each.cond8082 +each.cond8082: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load i64, ptr %a4 %t8 = icmp slt i64 %t7, %t6 - br i1 %t8, label %each.body8079, label %each.end8081 -each.body8079: + br i1 %t8, label %each.body8083, label %each.end8085 +each.body8083: %t9 = load ptr, ptr %a2 %t10 = getelementptr inbounds %S.gen.Val, ptr %t9, i64 %t7 %t11 = load %S.gen.Val, ptr %t10 @@ -81907,13 +81933,13 @@ each.body8079: %t13 = load ptr, ptr %a1 %t14 = load %S.gen.Val, ptr %a12 call void @finch.gen.release(ptr %t13, %S.gen.Val %t14) - br label %each.step8080 -each.step8080: + br label %each.step8084 +each.step8084: %t15 = load i64, ptr %a4 %t16 = add i64 %t15, 1 store i64 %t16, ptr %a4 - br label %each.cond8078 -each.end8081: + br label %each.cond8082 +each.end8085: %t17 = load ptr, ptr %a1 %t18 = load i64, ptr %a3 call void @finch.gen.heldEnd(ptr %t17, i64 %t18) @@ -81951,27 +81977,27 @@ entry: %t16 = load i64, ptr %t13 %t17 = load ptr, ptr %a12 store i64 0, ptr %a18 - br label %find.cond8082 -find.cond8082: + br label %find.cond8086 +find.cond8086: %t19 = load i64, ptr %a18 %t20 = icmp slt i64 %t19, %t16 - br i1 %t20, label %find.body8083, label %find.end8086 -find.body8083: + br i1 %t20, label %find.body8087, label %find.end8090 +find.body8087: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t19 %t22 = load { ptr, i64, i64 }, ptr %t21 store { ptr, i64, i64 } %t22, ptr %a23 store { ptr, i64, i64 } %t14, ptr %a24 %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) %t26 = icmp ne i32 %t25, 0 - br i1 %t26, label %find.hit8084, label %find.next8085 -find.hit8084: + br i1 %t26, label %find.hit8088, label %find.next8089 +find.hit8088: store i64 %t19, ptr %a15 - br label %find.end8086 -find.next8085: + br label %find.end8090 +find.next8089: %t27 = add i64 %t19, 1 store i64 %t27, ptr %a18 - br label %find.cond8082 -find.end8086: + br label %find.cond8086 +find.end8090: %t28 = load i64, ptr %a15 %t29 = icmp sge i64 %t28, 0 call void @finch.drop.arr_str(ptr %a12) @@ -82106,46 +82132,46 @@ entry: %t63 = load i64, ptr %t60 %t64 = load ptr, ptr %a30 store i64 0, ptr %a65 - br label %find.cond8087 -find.cond8087: + br label %find.cond8091 +find.cond8091: %t66 = load i64, ptr %a65 %t67 = icmp slt i64 %t66, %t63 - br i1 %t67, label %find.body8088, label %find.end8091 -find.body8088: + br i1 %t67, label %find.body8092, label %find.end8095 +find.body8092: %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t66 %t69 = load { ptr, i64, i64 }, ptr %t68 store { ptr, i64, i64 } %t69, ptr %a70 store { ptr, i64, i64 } %t61, ptr %a71 %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) %t73 = icmp ne i32 %t72, 0 - br i1 %t73, label %find.hit8089, label %find.next8090 -find.hit8089: + br i1 %t73, label %find.hit8093, label %find.next8094 +find.hit8093: store i64 %t66, ptr %a62 - br label %find.end8091 -find.next8090: + br label %find.end8095 +find.next8094: %t74 = add i64 %t66, 1 store i64 %t74, ptr %a65 - br label %find.cond8087 -find.end8091: + br label %find.cond8091 +find.end8095: %t75 = load i64, ptr %a62 store i64 %t75, ptr %a76 %t77 = load i64, ptr %a76 %t78 = icmp slt i64 %t77, 0 - br i1 %t78, label %then8092, label %endif8094 -then8092: + br i1 %t78, label %then8096, label %endif8098 +then8096: call void @finch.drop.arr_str(ptr %a59) call void @finch.drop.arr_str(ptr %a30) ret { ptr, i64, i64 } { ptr @.str.5183, i64 0, i64 0 } -endif8094: +endif8098: %t79 = load i64, ptr %a76 %t80 = load { ptr, i64, i64 }, ptr %a59 %t81 = extractvalue { ptr, i64, i64 } %t80, 1 %t82 = icmp uge i64 %t79, %t81 - br i1 %t82, label %range8095, label %inrange8096 -range8095: + br i1 %t82, label %range8099, label %inrange8100 +range8099: call void @finch_panic_index(ptr @.str.5185, i64 4830, i64 %t79, i64 %t81) unreachable -inrange8096: +inrange8100: %t83 = extractvalue { ptr, i64, i64 } %t80, 0 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t79 %t85 = load { ptr, i64, i64 }, ptr %t84 @@ -82183,19 +82209,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond8106 -n.cond8106: + br label %n.cond8110 +n.cond8110: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body8107, label %n.end8108 -n.body8107: + br i1 %t6, label %n.body8111, label %n.end8112 +n.body8111: %t7 = getelementptr inbounds %S.docs.Doc, ptr %t1, i64 %t5 call void @finch.drop.S_docs_Doc(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond8106 -n.end8108: + br label %n.cond8110 +n.end8112: call void @finch_arr_free(ptr %a) ret void } @@ -82863,26 +82889,26 @@ entry: store { ptr, i64, i64 } %t7, ptr %a8 %t9 = load ptr, ptr %a1 %t10 = icmp eq ptr %t9, null - br i1 %t10, label %panic8097, label %ok8098 -panic8097: + br i1 %t10, label %panic8101, label %ok8102 +panic8101: call void @finch_panic(ptr @.str.5187, i64 4835, ptr @.str.5188) unreachable -ok8098: +ok8102: %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 %t12 = load i1, ptr %t11 - br label %logic.from8099 -logic.from8099: - br i1 %t12, label %logic.rhs8100, label %logic.end8101 -logic.rhs8100: + br label %logic.from8103 +logic.from8103: + br i1 %t12, label %logic.rhs8104, label %logic.end8105 +logic.rhs8104: %t13 = load { ptr, i64, i64 }, ptr %a8 %t14 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t13) - br label %logic.rend8102 -logic.rend8102: - br label %logic.end8101 -logic.end8101: - %t15 = phi i1 [ false, %logic.from8099 ], [ %t14, %logic.rend8102 ] - br i1 %t15, label %then8103, label %endif8105 -then8103: + br label %logic.rend8106 +logic.rend8106: + br label %logic.end8105 +logic.end8105: + %t15 = phi i1 [ false, %logic.from8103 ], [ %t14, %logic.rend8106 ] + br i1 %t15, label %then8107, label %endif8109 +then8107: %t16 = call { ptr, i64, i64 } @finch.docs.builtins() %t17 = load { ptr, i64, i64 }, ptr %a8 %t18 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t16, { ptr, i64, i64 } %t17) @@ -82893,8 +82919,8 @@ then8103: %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp sgt i64 %t23, 0 - br i1 %t24, label %then8109, label %endif8111 -then8109: + br i1 %t24, label %then8113, label %endif8115 +then8113: %t25 = load ptr, ptr %a1 %t26 = load %S.ast.Node, ptr %a2 %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 @@ -82906,51 +82932,51 @@ then8109: call void @finch.gen.noteRef(ptr %t25, %S.ast.Node %t26, i64 %t28, i64 %t30, { ptr, i64, i64 } %t32, { ptr, i64, i64 } { ptr @.str.5189, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t32, ptr %a33 call void @finch_str_drop(ptr %a33) - br label %endif8111 -endif8111: + br label %endif8115 +endif8115: call void @finch.drop.S_docs_Doc(ptr %a20) - br label %endif8105 -endif8105: + br label %endif8109 +endif8109: %t34 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t34, ptr %a35 store { ptr, i64, i64 } { ptr @.str.5190, i64 5, i64 0 }, ptr %a36 %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) %t38 = icmp ne i32 %t37, 0 - br i1 %t38, label %then8112, label %endif8114 -then8112: + br i1 %t38, label %then8116, label %endif8118 +then8116: %t39 = load ptr, ptr %a1 %t40 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.5191, i64 86, i64 0 }) - br label %endif8114 -endif8114: + br label %endif8118 +endif8118: %t41 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t41, ptr %a42 store { ptr, i64, i64 } { ptr @.str.5192, i64 5, i64 0 }, ptr %a43 %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) %t45 = icmp ne i32 %t44, 0 - br i1 %t45, label %then8115, label %endif8117 -then8115: + br i1 %t45, label %then8119, label %endif8121 +then8119: %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 %t48 = load i64, ptr %t47 store i64 0, ptr %a49 - br label %for.cond8118 -for.cond8118: + br label %for.cond8122 +for.cond8122: %t50 = load i64, ptr %a49 %t51 = icmp slt i64 %t50, %t48 - br i1 %t51, label %for.body8119, label %for.end8121 -for.body8119: + br i1 %t51, label %for.body8123, label %for.end8125 +for.body8123: %t52 = load ptr, ptr %a1 %t53 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t54 = load i64, ptr %a49 %t55 = load { ptr, i64, i64 }, ptr %t53 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range8122, label %inrange8123 -range8122: + br i1 %t57, label %range8126, label %inrange8127 +range8126: call void @finch_panic_index(ptr @.str.5193, i64 4846, i64 %t54, i64 %t56) unreachable -inrange8123: +inrange8127: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 %t60 = load %S.ast.Node, ptr %t59 @@ -82963,33 +82989,33 @@ inrange8123: store { ptr, i64, i64 } { ptr @.str.5194, i64 4, i64 0 }, ptr %a67 %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) %t69 = icmp ne i32 %t68, 0 - br i1 %t69, label %then8124, label %endif8126 -then8124: + br i1 %t69, label %then8128, label %endif8130 +then8128: %t70 = load ptr, ptr %a1 %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t72 = load i64, ptr %a49 %t73 = load { ptr, i64, i64 }, ptr %t71 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 - br i1 %t75, label %range8127, label %inrange8128 -range8127: + br i1 %t75, label %range8131, label %inrange8132 +range8131: call void @finch_panic_index(ptr @.str.5195, i64 4848, i64 %t72, i64 %t74) unreachable -inrange8128: +inrange8132: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 %t72 %t78 = load %S.ast.Node, ptr %t77 call void @finch.gen.fail(ptr %t70, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5196, i64 53, i64 0 }) - br label %endif8126 -endif8126: + br label %endif8130 +endif8130: %t79 = load i64, ptr %a49 %t80 = icmp sgt i64 %t79, 0 - br i1 %t80, label %then8129, label %endif8131 -then8129: + br i1 %t80, label %then8133, label %endif8135 +then8133: %t81 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t81, { ptr, i64, i64 } { ptr @.str.5197, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5198, i64 0, i64 0 }) - br label %endif8131 -endif8131: + br label %endif8135 +endif8135: %t82 = load ptr, ptr %a1 %t83 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 0 %t84 = load { ptr, i64, i64 }, ptr %t83 @@ -83000,27 +83026,27 @@ endif8131: %t88 = load %S.gen.Val, ptr %a62 call void @finch.gen.release(ptr %t87, %S.gen.Val %t88) call void @finch.drop.S_gen_Val(ptr %a62) - br label %for.step8120 -for.step8120: + br label %for.step8124 +for.step8124: %t89 = load i64, ptr %a49 %t90 = add i64 %t89, 1 store i64 %t90, ptr %a49 - br label %for.cond8118 -for.end8121: + br label %for.cond8122 +for.end8125: %t91 = load ptr, ptr %a1 call void @finch.gen.printf(ptr %t91, { ptr, i64, i64 } { ptr @.str.5199, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5200, i64 0, i64 0 }) %t92 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5201, i64 4, i64 0 }) %t93 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t92, 1 call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t93 -endif8117: +endif8121: %t94 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t94, ptr %a95 store { ptr, i64, i64 } { ptr @.str.5202, i64 4, i64 0 }, ptr %a96 %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) %t98 = icmp ne i32 %t97, 0 - br i1 %t98, label %then8132, label %endif8134 -then8132: + br i1 %t98, label %then8136, label %endif8138 +then8136: %t99 = load ptr, ptr %a1 %t100 = load %S.ast.Node, ptr %a2 %t101 = load { ptr, i64, i64 }, ptr %a8 @@ -83029,11 +83055,11 @@ then8132: %t103 = load { ptr, i64, i64 }, ptr %t102 %t104 = extractvalue { ptr, i64, i64 } %t103, 1 %t105 = icmp uge i64 0, %t104 - br i1 %t105, label %range8135, label %inrange8136 -range8135: + br i1 %t105, label %range8139, label %inrange8140 +range8139: call void @finch_panic_index(ptr @.str.5203, i64 4861, i64 0, i64 %t104) unreachable -inrange8136: +inrange8140: %t106 = extractvalue { ptr, i64, i64 } %t103, 0 %t107 = getelementptr inbounds %S.ast.Node, ptr %t106, i64 0 %t108 = load %S.ast.Node, ptr %t107 @@ -83047,30 +83073,30 @@ inrange8136: store { ptr, i64, i64 } { ptr @.str.5204, i64 3, i64 0 }, ptr %a116 %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) %t118 = icmp ne i32 %t117, 0 - br label %logic.from8137 -logic.from8137: - br i1 %t118, label %logic.rhs8138, label %logic.end8139 -logic.rhs8138: + br label %logic.from8141 +logic.from8141: + br i1 %t118, label %logic.rhs8142, label %logic.end8143 +logic.rhs8142: %t119 = load ptr, ptr %a1 %t120 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %t120 %t122 = call i64 @finch.gen.lookup(ptr %t119, { ptr, i64, i64 } %t121) %t123 = icmp slt i64 %t122, 0 - br label %logic.rend8140 -logic.rend8140: - br label %logic.end8139 -logic.end8139: - %t124 = phi i1 [ false, %logic.from8137 ], [ %t123, %logic.rend8140 ] - br i1 %t124, label %then8141, label %endif8143 -then8141: + br label %logic.rend8144 +logic.rend8144: + br label %logic.end8143 +logic.end8143: + %t124 = phi i1 [ false, %logic.from8141 ], [ %t123, %logic.rend8144 ] + br i1 %t124, label %then8145, label %endif8147 +then8145: %t125 = load ptr, ptr %a1 %t126 = load ptr, ptr %a1 %t127 = icmp eq ptr %t126, null - br i1 %t127, label %panic8144, label %ok8145 -panic8144: + br i1 %t127, label %panic8148, label %ok8149 +panic8148: call void @finch_panic(ptr @.str.5205, i64 4863, ptr @.str.5206) unreachable -ok8145: +ok8149: %t128 = getelementptr inbounds %S.gen.Gen, ptr %t126, i32 0, i32 14 %t129 = load { ptr, i64, i64 }, ptr %t128 %t130 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 @@ -83079,8 +83105,8 @@ ok8145: store i64 %t132, ptr %a133 %t134 = load i64, ptr %a133 %t135 = icmp sge i64 %t134, 0 - br i1 %t135, label %then8146, label %endif8148 -then8146: + br i1 %t135, label %then8150, label %endif8152 +then8150: %t136 = load ptr, ptr %a1 %t137 = load i64, ptr %a133 %t138 = load %S.ast.Node, ptr %a112 @@ -83091,52 +83117,52 @@ then8146: call void @finch.drop.S_ast_Node(ptr %a112) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t142 -endif8148: - br label %endif8143 -endif8143: +endif8152: + br label %endif8147 +endif8147: %t143 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t144 = load { ptr, i64, i64 }, ptr %t143 store { ptr, i64, i64 } %t144, ptr %a145 store { ptr, i64, i64 } { ptr @.str.5208, i64 3, i64 0 }, ptr %a146 %t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146) %t148 = icmp eq i32 %t147, 0 - br label %logic.from8149 -logic.from8149: - br i1 %t148, label %logic.rhs8150, label %logic.end8151 -logic.rhs8150: + br label %logic.from8153 +logic.from8153: + br i1 %t148, label %logic.rhs8154, label %logic.end8155 +logic.rhs8154: %t149 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 store { ptr, i64, i64 } { ptr @.str.5209, i64 6, i64 0 }, ptr %a152 %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) %t154 = icmp eq i32 %t153, 0 - br label %logic.rend8152 -logic.rend8152: - br label %logic.end8151 -logic.end8151: - %t155 = phi i1 [ false, %logic.from8149 ], [ %t154, %logic.rend8152 ] - br label %logic.from8153 -logic.from8153: - br i1 %t155, label %logic.rhs8154, label %logic.end8155 -logic.rhs8154: + br label %logic.rend8156 +logic.rend8156: + br label %logic.end8155 +logic.end8155: + %t155 = phi i1 [ false, %logic.from8153 ], [ %t154, %logic.rend8156 ] + br label %logic.from8157 +logic.from8157: + br i1 %t155, label %logic.rhs8158, label %logic.end8159 +logic.rhs8158: %t156 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t157, ptr %a158 store { ptr, i64, i64 } { ptr @.str.5210, i64 5, i64 0 }, ptr %a159 %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) %t161 = icmp eq i32 %t160, 0 - br label %logic.rend8156 -logic.rend8156: - br label %logic.end8155 -logic.end8155: - %t162 = phi i1 [ false, %logic.from8153 ], [ %t161, %logic.rend8156 ] - br i1 %t162, label %then8157, label %endif8159 -then8157: + br label %logic.rend8160 +logic.rend8160: + br label %logic.end8159 +logic.end8159: + %t162 = phi i1 [ false, %logic.from8157 ], [ %t161, %logic.rend8160 ] + br i1 %t162, label %then8161, label %endif8163 +then8161: %t163 = load ptr, ptr %a1 %t164 = load %S.ast.Node, ptr %a112 call void @finch.gen.fail(ptr %t163, %S.ast.Node %t164, { ptr, i64, i64 } { ptr @.str.5211, i64 63, i64 0 }) - br label %endif8159 -endif8159: + br label %endif8163 +endif8163: %t165 = load ptr, ptr %a1 %t166 = load %S.ast.Node, ptr %a112 %t167 = call %S.gen.Place @finch.gen.place(ptr %t165, %S.ast.Node %t166, i1 true) @@ -83155,14 +83181,14 @@ endif8159: call void @finch.drop.S_ast_Node(ptr %a112) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t178 -endif8134: +endif8138: %t179 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t179, ptr %a180 store { ptr, i64, i64 } { ptr @.str.5212, i64 3, i64 0 }, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 - br i1 %t183, label %then8160, label %endif8162 -then8160: + br i1 %t183, label %then8164, label %endif8166 +then8164: %t184 = load ptr, ptr %a1 %t185 = load %S.ast.Node, ptr %a2 %t186 = load { ptr, i64, i64 }, ptr %a8 @@ -83172,11 +83198,11 @@ then8160: %t189 = load { ptr, i64, i64 }, ptr %t188 %t190 = extractvalue { ptr, i64, i64 } %t189, 1 %t191 = icmp uge i64 0, %t190 - br i1 %t191, label %range8163, label %inrange8164 -range8163: + br i1 %t191, label %range8167, label %inrange8168 +range8167: call void @finch_panic_index(ptr @.str.5213, i64 4876, i64 0, i64 %t190) unreachable -inrange8164: +inrange8168: %t192 = extractvalue { ptr, i64, i64 } %t189, 0 %t193 = getelementptr inbounds %S.ast.Node, ptr %t192, i64 0 %t194 = load %S.ast.Node, ptr %t193 @@ -83198,8 +83224,8 @@ inrange8164: store { ptr, i64, i64 } { ptr @.str.5214, i64 3, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 - br i1 %t212, label %then8165, label %else8166 -then8165: + br i1 %t212, label %then8169, label %else8170 +then8169: %t213 = load ptr, ptr %a1 %t214 = load %S.gen.Val, ptr %a196 %t215 = call { ptr, i64, i64 } @finch.gen.own(ptr %t213, %S.gen.Val %t214) @@ -83216,12 +83242,12 @@ then8165: call void @finch.drop.S_gen_Val(ptr %a196) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t223 -else8166: +else8170: %t224 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t225 = load %S.ast.Type, ptr %t224 %t226 = call i1 @finch.gen.isSigned(%S.ast.Type %t225) - br i1 %t226, label %then8168, label %else8169 -then8168: + br i1 %t226, label %then8172, label %else8173 +then8172: %t227 = load ptr, ptr %a1 %t228 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5215, i64 34, i64 0 }, ptr %a230 @@ -83260,13 +83286,13 @@ then8168: call void @finch.gen.emit(ptr %t227, { ptr, i64, i64 } %t256) store { ptr, i64, i64 } %t256, ptr %a257 call void @finch_str_drop(ptr %a257) - br label %endif8170 -else8169: + br label %endif8174 +else8173: %t258 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t259 = load %S.ast.Type, ptr %t258 %t260 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t259) - br i1 %t260, label %then8171, label %else8172 -then8171: + br i1 %t260, label %then8175, label %else8176 +then8175: %t261 = load ptr, ptr %a1 %t262 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5219, i64 35, i64 0 }, ptr %a264 @@ -83305,13 +83331,13 @@ then8171: call void @finch.gen.emit(ptr %t261, { ptr, i64, i64 } %t290) store { ptr, i64, i64 } %t290, ptr %a291 call void @finch_str_drop(ptr %a291) - br label %endif8173 -else8172: + br label %endif8177 +else8176: %t292 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t293 = load %S.ast.Type, ptr %t292 %t294 = call i1 @finch.gen.isFloat(%S.ast.Type %t293) - br i1 %t294, label %then8174, label %else8175 -then8174: + br i1 %t294, label %then8178, label %else8179 +then8178: %t295 = load ptr, ptr %a1 %t296 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5223, i64 36, i64 0 }, ptr %a298 @@ -83350,15 +83376,15 @@ then8174: call void @finch.gen.emit(ptr %t295, { ptr, i64, i64 } %t324) store { ptr, i64, i64 } %t324, ptr %a325 call void @finch_str_drop(ptr %a325) - br label %endif8176 -else8175: + br label %endif8180 +else8179: %t326 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t326, ptr %a327 store { ptr, i64, i64 } { ptr @.str.5227, i64 4, i64 0 }, ptr %a328 %t329 = call i32 @finch_str_eq(ptr %a327, ptr %a328) %t330 = icmp ne i32 %t329, 0 - br i1 %t330, label %then8177, label %else8178 -then8177: + br i1 %t330, label %then8181, label %else8182 +then8181: %t331 = load ptr, ptr %a1 %t332 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } { ptr @.str.5228, i64 35, i64 0 }, ptr %a334 @@ -83388,15 +83414,15 @@ then8177: call void @finch.gen.emit(ptr %t331, { ptr, i64, i64 } %t353) store { ptr, i64, i64 } %t353, ptr %a354 call void @finch_str_drop(ptr %a354) - br label %endif8179 -else8178: + br label %endif8183 +else8182: %t355 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t355, ptr %a356 store { ptr, i64, i64 } { ptr @.str.5231, i64 4, i64 0 }, ptr %a357 %t358 = call i32 @finch_str_eq(ptr %a356, ptr %a357) %t359 = icmp ne i32 %t358, 0 - br i1 %t359, label %then8180, label %else8181 -then8180: + br i1 %t359, label %then8184, label %else8185 +then8184: %t360 = load ptr, ptr %a1 %t361 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 %t362 = load { ptr, i64, i64 }, ptr %t361 @@ -83443,15 +83469,15 @@ then8180: store { ptr, i64, i64 } %t396, ptr %a397 call void @finch_str_drop(ptr %a397) call void @finch_str_drop(ptr %a374) - br label %endif8182 -else8181: + br label %endif8186 +else8185: %t398 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t398, ptr %a399 store { ptr, i64, i64 } { ptr @.str.5237, i64 3, i64 0 }, ptr %a400 %t401 = call i32 @finch_str_eq(ptr %a399, ptr %a400) %t402 = icmp ne i32 %t401, 0 - br i1 %t402, label %then8183, label %else8184 -then8183: + br i1 %t402, label %then8187, label %else8188 +then8187: %t403 = load ptr, ptr %a1 %t404 = load { ptr, i64, i64 }, ptr %a199 call void @finch.gen.store(ptr %t403, { ptr, i64, i64 } { ptr @.str.5238, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5239, i64 15, i64 0 }, { ptr, i64, i64 } %t404) @@ -83485,27 +83511,27 @@ then8183: store { ptr, i64, i64 } %t427, ptr %a428 call void @finch_str_drop(ptr %a428) store i1 true, ptr %a207 - br label %endif8185 -else8184: + br label %endif8189 +else8188: %t429 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t429, ptr %a430 store { ptr, i64, i64 } { ptr @.str.5243, i64 5, i64 0 }, ptr %a431 %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) %t433 = icmp ne i32 %t432, 0 - br label %logic.from8186 -logic.from8186: - br i1 %t433, label %logic.rhs8187, label %logic.end8188 -logic.rhs8187: + br label %logic.from8190 +logic.from8190: + br i1 %t433, label %logic.rhs8191, label %logic.end8192 +logic.rhs8191: %t434 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t435 = getelementptr inbounds %S.ast.Type, ptr %t434, i32 0, i32 1 %t436 = load { ptr, i64, i64 }, ptr %t435 %t437 = extractvalue { ptr, i64, i64 } %t436, 1 %t438 = icmp uge i64 0, %t437 - br i1 %t438, label %range8189, label %inrange8190 -range8189: + br i1 %t438, label %range8193, label %inrange8194 +range8193: call void @finch_panic_index(ptr @.str.5244, i64 4898, i64 0, i64 %t437) unreachable -inrange8190: +inrange8194: %t439 = extractvalue { ptr, i64, i64 } %t436, 0 %t440 = getelementptr inbounds %S.ast.Type, ptr %t439, i64 0 %t441 = getelementptr inbounds %S.ast.Type, ptr %t440, i32 0, i32 0 @@ -83514,20 +83540,20 @@ inrange8190: store { ptr, i64, i64 } { ptr @.str.5245, i64 2, i64 0 }, ptr %a444 %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) %t446 = icmp ne i32 %t445, 0 - br label %logic.from8191 -logic.from8191: - br i1 %t446, label %logic.end8193, label %logic.rhs8192 -logic.rhs8192: + br label %logic.from8195 +logic.from8195: + br i1 %t446, label %logic.end8197, label %logic.rhs8196 +logic.rhs8196: %t447 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 %t448 = getelementptr inbounds %S.ast.Type, ptr %t447, i32 0, i32 1 %t449 = load { ptr, i64, i64 }, ptr %t448 %t450 = extractvalue { ptr, i64, i64 } %t449, 1 %t451 = icmp uge i64 0, %t450 - br i1 %t451, label %range8194, label %inrange8195 -range8194: + br i1 %t451, label %range8198, label %inrange8199 +range8198: call void @finch_panic_index(ptr @.str.5246, i64 4898, i64 0, i64 %t450) unreachable -inrange8195: +inrange8199: %t452 = extractvalue { ptr, i64, i64 } %t449, 0 %t453 = getelementptr inbounds %S.ast.Type, ptr %t452, i64 0 %t454 = getelementptr inbounds %S.ast.Type, ptr %t453, i32 0, i32 0 @@ -83536,18 +83562,18 @@ inrange8195: store { ptr, i64, i64 } { ptr @.str.5247, i64 4, i64 0 }, ptr %a457 %t458 = call i32 @finch_str_eq(ptr %a456, ptr %a457) %t459 = icmp ne i32 %t458, 0 - br label %logic.rend8196 -logic.rend8196: - br label %logic.end8193 -logic.end8193: - %t460 = phi i1 [ true, %logic.from8191 ], [ %t459, %logic.rend8196 ] - br label %logic.rend8197 -logic.rend8197: - br label %logic.end8188 -logic.end8188: - %t461 = phi i1 [ false, %logic.from8186 ], [ %t460, %logic.rend8197 ] - br i1 %t461, label %then8198, label %else8199 -then8198: + br label %logic.rend8200 +logic.rend8200: + br label %logic.end8197 +logic.end8197: + %t460 = phi i1 [ true, %logic.from8195 ], [ %t459, %logic.rend8200 ] + br label %logic.rend8201 +logic.rend8201: + br label %logic.end8192 +logic.end8192: + %t461 = phi i1 [ false, %logic.from8190 ], [ %t460, %logic.rend8201 ] + br i1 %t461, label %then8202, label %else8203 +then8202: %t462 = load ptr, ptr %a1 %t463 = load { ptr, i64, i64 }, ptr %a199 call void @finch.gen.store(ptr %t462, { ptr, i64, i64 } { ptr @.str.5248, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5249, i64 15, i64 0 }, { ptr, i64, i64 } %t463) @@ -83586,85 +83612,85 @@ then8198: %t490 = load ptr, ptr %a1 %t491 = load %S.gen.Val, ptr %a196 call void @finch.gen.release(ptr %t490, %S.gen.Val %t491) - br label %endif8200 -else8199: + br label %endif8204 +else8203: %t492 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t492, ptr %a493 store { ptr, i64, i64 } { ptr @.str.5253, i64 4, i64 0 }, ptr %a494 %t495 = call i32 @finch_str_eq(ptr %a493, ptr %a494) %t496 = icmp ne i32 %t495, 0 - br label %logic.from8201 -logic.from8201: - br i1 %t496, label %logic.end8203, label %logic.rhs8202 -logic.rhs8202: + br label %logic.from8205 +logic.from8205: + br i1 %t496, label %logic.end8207, label %logic.rhs8206 +logic.rhs8206: %t497 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t497, ptr %a498 store { ptr, i64, i64 } { ptr @.str.5254, i64 4, i64 0 }, ptr %a499 %t500 = call i32 @finch_str_eq(ptr %a498, ptr %a499) %t501 = icmp ne i32 %t500, 0 - br label %logic.rend8204 -logic.rend8204: - br label %logic.end8203 -logic.end8203: - %t502 = phi i1 [ true, %logic.from8201 ], [ %t501, %logic.rend8204 ] - br label %logic.from8205 -logic.from8205: - br i1 %t502, label %logic.end8207, label %logic.rhs8206 -logic.rhs8206: + br label %logic.rend8208 +logic.rend8208: + br label %logic.end8207 +logic.end8207: + %t502 = phi i1 [ true, %logic.from8205 ], [ %t501, %logic.rend8208 ] + br label %logic.from8209 +logic.from8209: + br i1 %t502, label %logic.end8211, label %logic.rhs8210 +logic.rhs8210: %t503 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t503, ptr %a504 store { ptr, i64, i64 } { ptr @.str.5255, i64 5, i64 0 }, ptr %a505 %t506 = call i32 @finch_str_eq(ptr %a504, ptr %a505) %t507 = icmp ne i32 %t506, 0 - br label %logic.rend8208 -logic.rend8208: - br label %logic.end8207 -logic.end8207: - %t508 = phi i1 [ true, %logic.from8205 ], [ %t507, %logic.rend8208 ] - br label %logic.from8209 -logic.from8209: - br i1 %t508, label %logic.end8211, label %logic.rhs8210 -logic.rhs8210: + br label %logic.rend8212 +logic.rend8212: + br label %logic.end8211 +logic.end8211: + %t508 = phi i1 [ true, %logic.from8209 ], [ %t507, %logic.rend8212 ] + br label %logic.from8213 +logic.from8213: + br i1 %t508, label %logic.end8215, label %logic.rhs8214 +logic.rhs8214: %t509 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t509, ptr %a510 store { ptr, i64, i64 } { ptr @.str.5256, i64 3, i64 0 }, ptr %a511 %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) %t513 = icmp ne i32 %t512, 0 - br label %logic.rend8212 -logic.rend8212: - br label %logic.end8211 -logic.end8211: - %t514 = phi i1 [ true, %logic.from8209 ], [ %t513, %logic.rend8212 ] - br label %logic.from8213 -logic.from8213: - br i1 %t514, label %logic.end8215, label %logic.rhs8214 -logic.rhs8214: + br label %logic.rend8216 +logic.rend8216: + br label %logic.end8215 +logic.end8215: + %t514 = phi i1 [ true, %logic.from8213 ], [ %t513, %logic.rend8216 ] + br label %logic.from8217 +logic.from8217: + br i1 %t514, label %logic.end8219, label %logic.rhs8218 +logic.rhs8218: %t515 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t515, ptr %a516 store { ptr, i64, i64 } { ptr @.str.5257, i64 6, i64 0 }, ptr %a517 %t518 = call i32 @finch_str_eq(ptr %a516, ptr %a517) %t519 = icmp ne i32 %t518, 0 - br label %logic.rend8216 -logic.rend8216: - br label %logic.end8215 -logic.end8215: - %t520 = phi i1 [ true, %logic.from8213 ], [ %t519, %logic.rend8216 ] - br label %logic.from8217 -logic.from8217: - br i1 %t520, label %logic.end8219, label %logic.rhs8218 -logic.rhs8218: + br label %logic.rend8220 +logic.rend8220: + br label %logic.end8219 +logic.end8219: + %t520 = phi i1 [ true, %logic.from8217 ], [ %t519, %logic.rend8220 ] + br label %logic.from8221 +logic.from8221: + br i1 %t520, label %logic.end8223, label %logic.rhs8222 +logic.rhs8222: %t521 = load { ptr, i64, i64 }, ptr %a206 store { ptr, i64, i64 } %t521, ptr %a522 store { ptr, i64, i64 } { ptr @.str.5258, i64 4, i64 0 }, ptr %a523 %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) %t525 = icmp ne i32 %t524, 0 - br label %logic.rend8220 -logic.rend8220: - br label %logic.end8219 -logic.end8219: - %t526 = phi i1 [ true, %logic.from8217 ], [ %t525, %logic.rend8220 ] - br i1 %t526, label %then8221, label %else8222 -then8221: + br label %logic.rend8224 +logic.rend8224: + br label %logic.end8223 +logic.end8223: + %t526 = phi i1 [ true, %logic.from8221 ], [ %t525, %logic.rend8224 ] + br i1 %t526, label %then8225, label %else8226 +then8225: %t527 = load ptr, ptr %a1 %t528 = load { ptr, i64, i64 }, ptr %a199 call void @finch.gen.store(ptr %t527, { ptr, i64, i64 } { ptr @.str.5259, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5260, i64 15, i64 0 }, { ptr, i64, i64 } %t528) @@ -83678,18 +83704,18 @@ then8221: %t535 = load ptr, ptr %a1 %t536 = load %S.gen.Val, ptr %a196 call void @finch.gen.release(ptr %t535, %S.gen.Val %t536) - br label %endif8223 -else8222: + br label %endif8227 +else8226: %t537 = load ptr, ptr %a1 %t538 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t539 = load { ptr, i64, i64 }, ptr %t538 %t540 = extractvalue { ptr, i64, i64 } %t539, 1 %t541 = icmp uge i64 0, %t540 - br i1 %t541, label %range8224, label %inrange8225 -range8224: + br i1 %t541, label %range8228, label %inrange8229 +range8228: call void @finch_panic_index(ptr @.str.5261, i64 4908, i64 0, i64 %t540) unreachable -inrange8225: +inrange8229: %t542 = extractvalue { ptr, i64, i64 } %t539, 0 %t543 = getelementptr inbounds %S.ast.Node, ptr %t542, i64 0 %t544 = load %S.ast.Node, ptr %t543 @@ -83711,24 +83737,24 @@ inrange8225: call void @finch.gen.fail(ptr %t537, %S.ast.Node %t544, { ptr, i64, i64 } %t557) store { ptr, i64, i64 } %t557, ptr %a558 call void @finch_str_drop(ptr %a558) - br label %endif8223 -endif8223: - br label %endif8200 -endif8200: - br label %endif8185 -endif8185: - br label %endif8182 -endif8182: - br label %endif8179 -endif8179: - br label %endif8176 -endif8176: - br label %endif8173 -endif8173: - br label %endif8170 -endif8170: - br label %endif8167 -endif8167: + br label %endif8227 +endif8227: + br label %endif8204 +endif8204: + br label %endif8189 +endif8189: + br label %endif8186 +endif8186: + br label %endif8183 +endif8183: + br label %endif8180 +endif8180: + br label %endif8177 +endif8177: + br label %endif8174 +endif8174: + br label %endif8171 +endif8171: %t559 = load ptr, ptr %a1 %t560 = load { ptr, i64, i64 }, ptr %a199 %t561 = call { ptr, i64, i64 } @finch.gen.load(ptr %t559, { ptr, i64, i64 } { ptr @.str.5264, i64 17, i64 0 }, { ptr, i64, i64 } %t560) @@ -83743,15 +83769,15 @@ endif8167: call void @finch.drop.S_gen_Val(ptr %a196) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t567 -endif8162: +endif8166: %t568 = load { ptr, i64, i64 }, ptr %a8 %t569 = call { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %t568) store { ptr, i64, i64 } %t569, ptr %a570 %t571 = getelementptr inbounds { ptr, i64, i64 }, ptr %a570, i32 0, i32 1 %t572 = load i64, ptr %t571 %t573 = icmp sgt i64 %t572, 0 - br i1 %t573, label %then8226, label %endif8228 -then8226: + br i1 %t573, label %then8230, label %endif8232 +then8230: %t574 = load ptr, ptr %a1 %t575 = load %S.ast.Node, ptr %a2 %t576 = load { ptr, i64, i64 }, ptr %a570 @@ -83762,28 +83788,28 @@ then8226: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t578 -endif8228: +endif8232: %t580 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t580, ptr %a581 store { ptr, i64, i64 } { ptr @.str.5266, i64 9, i64 0 }, ptr %a582 %t583 = call i32 @finch_str_eq(ptr %a581, ptr %a582) %t584 = icmp ne i32 %t583, 0 - br label %logic.from8229 -logic.from8229: - br i1 %t584, label %logic.end8231, label %logic.rhs8230 -logic.rhs8230: + br label %logic.from8233 +logic.from8233: + br i1 %t584, label %logic.end8235, label %logic.rhs8234 +logic.rhs8234: %t585 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t585, ptr %a586 store { ptr, i64, i64 } { ptr @.str.5267, i64 11, i64 0 }, ptr %a587 %t588 = call i32 @finch_str_eq(ptr %a586, ptr %a587) %t589 = icmp ne i32 %t588, 0 - br label %logic.rend8232 -logic.rend8232: - br label %logic.end8231 -logic.end8231: - %t590 = phi i1 [ true, %logic.from8229 ], [ %t589, %logic.rend8232 ] - br i1 %t590, label %then8233, label %endif8235 -then8233: + br label %logic.rend8236 +logic.rend8236: + br label %logic.end8235 +logic.end8235: + %t590 = phi i1 [ true, %logic.from8233 ], [ %t589, %logic.rend8236 ] + br i1 %t590, label %then8237, label %endif8239 +then8237: %t591 = load ptr, ptr %a1 %t592 = load %S.ast.Node, ptr %a2 %t593 = load { ptr, i64, i64 }, ptr %a8 @@ -83793,11 +83819,11 @@ then8233: %t596 = load { ptr, i64, i64 }, ptr %t595 %t597 = extractvalue { ptr, i64, i64 } %t596, 1 %t598 = icmp uge i64 0, %t597 - br i1 %t598, label %range8236, label %inrange8237 -range8236: + br i1 %t598, label %range8240, label %inrange8241 +range8240: call void @finch_panic_index(ptr @.str.5268, i64 4918, i64 0, i64 %t597) unreachable -inrange8237: +inrange8241: %t599 = extractvalue { ptr, i64, i64 } %t596, 0 %t600 = getelementptr inbounds %S.ast.Node, ptr %t599, i64 0 %t601 = load %S.ast.Node, ptr %t600 @@ -83812,8 +83838,8 @@ inrange8237: store { ptr, i64, i64 } { ptr @.str.5270, i64 11, i64 0 }, ptr %a610 %t611 = call i32 @finch_str_eq(ptr %a609, ptr %a610) %t612 = icmp ne i32 %t611, 0 - br i1 %t612, label %then8238, label %endif8240 -then8238: + br i1 %t612, label %then8242, label %endif8244 +then8242: %t613 = load ptr, ptr %a1 %t614 = load { ptr, i64, i64 }, ptr %a607 store { ptr, i64, i64 } { ptr @.str.5271, i64 32, i64 0 }, ptr %a616 @@ -83857,17 +83883,17 @@ then8238: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t644 -endif8240: +endif8244: %t645 = load ptr, ptr %a1 %t646 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t645) store { ptr, i64, i64 } %t646, ptr %a647 %t648 = load ptr, ptr %a1 %t649 = icmp eq ptr %t648, null - br i1 %t649, label %panic8241, label %ok8242 -panic8241: + br i1 %t649, label %panic8245, label %ok8246 +panic8245: call void @finch_panic(ptr @.str.5276, i64 4926, ptr @.str.5277) unreachable -ok8242: +ok8246: %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 41 %t651 = load { ptr, i64, i64 }, ptr %t650 %t652 = load %S.ast.Node, ptr %a2 @@ -83878,8 +83904,8 @@ ok8242: %t657 = icmp ne i32 %t656, 0 store { ptr, i64, i64 } %t653, ptr %a658 call void @finch_str_drop(ptr %a658) - br i1 %t657, label %then8243, label %endif8245 -then8243: + br i1 %t657, label %then8247, label %endif8249 +then8247: %t659 = load ptr, ptr %a1 %t660 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t659, { ptr, i64, i64 } { ptr @.str.5278, i64 17, i64 0 }) store { ptr, i64, i64 } %t660, ptr %a661 @@ -83948,11 +83974,11 @@ then8243: call void @finch_str_drop(ptr %a714) %t715 = load ptr, ptr %a1 %t716 = icmp eq ptr %t715, null - br i1 %t716, label %panic8246, label %ok8247 -panic8246: + br i1 %t716, label %panic8250, label %ok8251 +panic8250: call void @finch_panic(ptr @.str.5289, i64 4931, ptr @.str.5290) unreachable -ok8247: +ok8251: %t717 = getelementptr inbounds %S.gen.Gen, ptr %t715, i32 0, i32 42 %t718 = load { ptr, i64, i64 }, ptr %t717 store { ptr, i64, i64 } %t713, ptr %t717 @@ -83963,11 +83989,11 @@ ok8247: %t722 = call { ptr, i64, i64 } @finch.gen.load(ptr %t720, { ptr, i64, i64 } { ptr @.str.5291, i64 17, i64 0 }, { ptr, i64, i64 } %t721) %t723 = load ptr, ptr %a1 %t724 = icmp eq ptr %t723, null - br i1 %t724, label %panic8248, label %ok8249 -panic8248: + br i1 %t724, label %panic8252, label %ok8253 +panic8252: call void @finch_panic(ptr @.str.5292, i64 4932, ptr @.str.5293) unreachable -ok8249: +ok8253: %t725 = getelementptr inbounds %S.gen.Gen, ptr %t723, i32 0, i32 43 %t726 = load { ptr, i64, i64 }, ptr %t725 store { ptr, i64, i64 } %t722, ptr %t725 @@ -83991,26 +84017,26 @@ ok8249: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t736 -endif8245: +endif8249: %t737 = load ptr, ptr %a1 %t738 = load ptr, ptr %a1 %t739 = icmp eq ptr %t738, null - br i1 %t739, label %panic8250, label %ok8251 -panic8250: + br i1 %t739, label %panic8254, label %ok8255 +panic8254: call void @finch_panic(ptr @.str.5296, i64 4936, ptr @.str.5297) unreachable -ok8251: +ok8255: %t740 = getelementptr inbounds %S.gen.Gen, ptr %t738, i32 0, i32 1 %t741 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t742 = load i64, ptr %t741 %t743 = load { ptr, i64, i64 }, ptr %t740 %t744 = extractvalue { ptr, i64, i64 } %t743, 1 %t745 = icmp uge i64 %t742, %t744 - br i1 %t745, label %range8252, label %inrange8253 -range8252: + br i1 %t745, label %range8256, label %inrange8257 +range8256: call void @finch_panic_index(ptr @.str.5298, i64 4936, i64 %t742, i64 %t744) unreachable -inrange8253: +inrange8257: %t746 = extractvalue { ptr, i64, i64 } %t743, 0 %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i64 %t742 %t748 = load { ptr, i64, i64 }, ptr %t747 @@ -84092,14 +84118,14 @@ inrange8253: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t808 -endif8235: +endif8239: %t809 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t809, ptr %a810 store { ptr, i64, i64 } { ptr @.str.5306, i64 10, i64 0 }, ptr %a811 %t812 = call i32 @finch_str_eq(ptr %a810, ptr %a811) %t813 = icmp ne i32 %t812, 0 - br i1 %t813, label %then8254, label %endif8256 -then8254: + br i1 %t813, label %then8258, label %endif8260 +then8258: %t814 = load ptr, ptr %a1 %t815 = load %S.ast.Node, ptr %a2 %t816 = load { ptr, i64, i64 }, ptr %a8 @@ -84109,11 +84135,11 @@ then8254: %t819 = load { ptr, i64, i64 }, ptr %t818 %t820 = extractvalue { ptr, i64, i64 } %t819, 1 %t821 = icmp uge i64 0, %t820 - br i1 %t821, label %range8257, label %inrange8258 -range8257: + br i1 %t821, label %range8261, label %inrange8262 +range8261: call void @finch_panic_index(ptr @.str.5307, i64 4943, i64 0, i64 %t820) unreachable -inrange8258: +inrange8262: %t822 = extractvalue { ptr, i64, i64 } %t819, 0 %t823 = getelementptr inbounds %S.ast.Node, ptr %t822, i64 0 %t824 = load %S.ast.Node, ptr %t823 @@ -84121,11 +84147,11 @@ inrange8258: store %S.gen.Val %t825, ptr %a826 %t827 = load ptr, ptr %a1 %t828 = icmp eq ptr %t827, null - br i1 %t828, label %panic8259, label %ok8260 -panic8259: + br i1 %t828, label %panic8263, label %ok8264 +panic8263: call void @finch_panic(ptr @.str.5309, i64 4944, ptr @.str.5310) unreachable -ok8260: +ok8264: %t829 = getelementptr inbounds %S.gen.Gen, ptr %t827, i32 0, i32 11 %t830 = getelementptr inbounds { ptr, i64, i64 }, ptr %t829, i32 0, i32 1 %t831 = load i64, ptr %t830 @@ -84138,11 +84164,11 @@ ok8260: %t837 = load { ptr, i64, i64 }, ptr %t836 %t838 = extractvalue { ptr, i64, i64 } %t837, 1 %t839 = icmp uge i64 1, %t838 - br i1 %t839, label %range8261, label %inrange8262 -range8261: + br i1 %t839, label %range8265, label %inrange8266 +range8265: call void @finch_panic_index(ptr @.str.5311, i64 4946, i64 1, i64 %t838) unreachable -inrange8262: +inrange8266: %t840 = extractvalue { ptr, i64, i64 } %t837, 0 %t841 = getelementptr inbounds %S.ast.Node, ptr %t840, i64 1 %t842 = load %S.ast.Node, ptr %t841 @@ -84161,11 +84187,11 @@ inrange8262: store { ptr, i64, i64 } %t853, ptr %a854 %t855 = load ptr, ptr %a1 %t856 = icmp eq ptr %t855, null - br i1 %t856, label %panic8263, label %ok8264 -panic8263: + br i1 %t856, label %panic8267, label %ok8268 +panic8267: call void @finch_panic(ptr @.str.5313, i64 4950, ptr @.str.5314) unreachable -ok8264: +ok8268: %t857 = getelementptr inbounds %S.gen.Gen, ptr %t855, i32 0, i32 41 %t858 = load { ptr, i64, i64 }, ptr %t857 %t859 = load %S.ast.Node, ptr %a2 @@ -84176,8 +84202,8 @@ ok8264: %t864 = icmp ne i32 %t863, 0 store { ptr, i64, i64 } %t860, ptr %a865 call void @finch_str_drop(ptr %a865) - br i1 %t864, label %then8265, label %endif8267 -then8265: + br i1 %t864, label %then8269, label %endif8271 +then8269: %t866 = load ptr, ptr %a1 %t867 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t866, { ptr, i64, i64 } { ptr @.str.5315, i64 17, i64 0 }) store { ptr, i64, i64 } %t867, ptr %a868 @@ -84243,11 +84269,11 @@ then8265: call void @finch_str_drop(ptr %a919) %t920 = load ptr, ptr %a1 %t921 = icmp eq ptr %t920, null - br i1 %t921, label %panic8268, label %ok8269 -panic8268: + br i1 %t921, label %panic8272, label %ok8273 +panic8272: call void @finch_panic(ptr @.str.5324, i64 4954, ptr @.str.5325) unreachable -ok8269: +ok8273: %t922 = getelementptr inbounds %S.gen.Gen, ptr %t920, i32 0, i32 42 %t923 = load { ptr, i64, i64 }, ptr %t922 store { ptr, i64, i64 } %t918, ptr %t922 @@ -84258,11 +84284,11 @@ ok8269: %t927 = call { ptr, i64, i64 } @finch.gen.load(ptr %t925, { ptr, i64, i64 } { ptr @.str.5326, i64 17, i64 0 }, { ptr, i64, i64 } %t926) %t928 = load ptr, ptr %a1 %t929 = icmp eq ptr %t928, null - br i1 %t929, label %panic8270, label %ok8271 -panic8270: + br i1 %t929, label %panic8274, label %ok8275 +panic8274: call void @finch_panic(ptr @.str.5327, i64 4955, ptr @.str.5328) unreachable -ok8271: +ok8275: %t930 = getelementptr inbounds %S.gen.Gen, ptr %t928, i32 0, i32 43 %t931 = load { ptr, i64, i64 }, ptr %t930 store { ptr, i64, i64 } %t927, ptr %t930 @@ -84285,7 +84311,7 @@ ok8271: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t938 -endif8267: +endif8271: %t939 = load ptr, ptr %a1 %t940 = load { ptr, i64, i64 }, ptr %a850 store { ptr, i64, i64 } { ptr @.str.5330, i64 31, i64 0 }, ptr %a942 @@ -84347,14 +84373,14 @@ endif8267: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t983 -endif8256: +endif8260: %t984 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t984, ptr %a985 store { ptr, i64, i64 } { ptr @.str.5336, i64 11, i64 0 }, ptr %a986 %t987 = call i32 @finch_str_eq(ptr %a985, ptr %a986) %t988 = icmp ne i32 %t987, 0 - br i1 %t988, label %then8272, label %endif8274 -then8272: + br i1 %t988, label %then8276, label %endif8278 +then8276: %t989 = load ptr, ptr %a1 %t990 = load %S.ast.Node, ptr %a2 %t991 = load { ptr, i64, i64 }, ptr %a8 @@ -84364,11 +84390,11 @@ then8272: %t994 = load { ptr, i64, i64 }, ptr %t993 %t995 = extractvalue { ptr, i64, i64 } %t994, 1 %t996 = icmp uge i64 0, %t995 - br i1 %t996, label %range8275, label %inrange8276 -range8275: + br i1 %t996, label %range8279, label %inrange8280 +range8279: call void @finch_panic_index(ptr @.str.5337, i64 4967, i64 0, i64 %t995) unreachable -inrange8276: +inrange8280: %t997 = extractvalue { ptr, i64, i64 } %t994, 0 %t998 = getelementptr inbounds %S.ast.Node, ptr %t997, i64 0 %t999 = load %S.ast.Node, ptr %t998 @@ -84411,11 +84437,11 @@ inrange8276: call void @finch_str_drop(ptr %a1030) %t1031 = load ptr, ptr %a1 %t1032 = icmp eq ptr %t1031, null - br i1 %t1032, label %panic8277, label %ok8278 -panic8277: + br i1 %t1032, label %panic8281, label %ok8282 +panic8281: call void @finch_panic(ptr @.str.5342, i64 4970, ptr @.str.5343) unreachable -ok8278: +ok8282: %t1033 = getelementptr inbounds %S.gen.Gen, ptr %t1031, i32 0, i32 41 %t1034 = load { ptr, i64, i64 }, ptr %t1033 %t1035 = load %S.ast.Node, ptr %a2 @@ -84426,8 +84452,8 @@ ok8278: %t1040 = icmp ne i32 %t1039, 0 store { ptr, i64, i64 } %t1036, ptr %a1041 call void @finch_str_drop(ptr %a1041) - br i1 %t1040, label %then8279, label %endif8281 -then8279: + br i1 %t1040, label %then8283, label %endif8285 +then8283: %t1042 = load ptr, ptr %a1 %t1043 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1042, { ptr, i64, i64 } { ptr @.str.5344, i64 17, i64 0 }) store { ptr, i64, i64 } %t1043, ptr %a1044 @@ -84480,11 +84506,11 @@ then8279: call void @finch_str_drop(ptr %a1084) %t1085 = load ptr, ptr %a1 %t1086 = icmp eq ptr %t1085, null - br i1 %t1086, label %panic8282, label %ok8283 -panic8282: + br i1 %t1086, label %panic8286, label %ok8287 +panic8286: call void @finch_panic(ptr @.str.5352, i64 4974, ptr @.str.5353) unreachable -ok8283: +ok8287: %t1087 = getelementptr inbounds %S.gen.Gen, ptr %t1085, i32 0, i32 42 %t1088 = load { ptr, i64, i64 }, ptr %t1087 store { ptr, i64, i64 } %t1083, ptr %t1087 @@ -84495,11 +84521,11 @@ ok8283: %t1092 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1090, { ptr, i64, i64 } { ptr @.str.5354, i64 17, i64 0 }, { ptr, i64, i64 } %t1091) %t1093 = load ptr, ptr %a1 %t1094 = icmp eq ptr %t1093, null - br i1 %t1094, label %panic8284, label %ok8285 -panic8284: + br i1 %t1094, label %panic8288, label %ok8289 +panic8288: call void @finch_panic(ptr @.str.5355, i64 4975, ptr @.str.5356) unreachable -ok8285: +ok8289: %t1095 = getelementptr inbounds %S.gen.Gen, ptr %t1093, i32 0, i32 43 %t1096 = load { ptr, i64, i64 }, ptr %t1095 store { ptr, i64, i64 } %t1092, ptr %t1095 @@ -84523,7 +84549,7 @@ ok8285: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1105 -endif8281: +endif8285: %t1106 = load ptr, ptr %a1 %t1107 = load { ptr, i64, i64 }, ptr %a1004 store { ptr, i64, i64 } { ptr @.str.5359, i64 32, i64 0 }, ptr %a1109 @@ -84573,14 +84599,14 @@ endif8281: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1141 -endif8274: +endif8278: %t1142 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1142, ptr %a1143 store { ptr, i64, i64 } { ptr @.str.5365, i64 5, i64 0 }, ptr %a1144 %t1145 = call i32 @finch_str_eq(ptr %a1143, ptr %a1144) %t1146 = icmp ne i32 %t1145, 0 - br i1 %t1146, label %then8286, label %endif8288 -then8286: + br i1 %t1146, label %then8290, label %endif8292 +then8290: %t1147 = load ptr, ptr %a1 %t1148 = load %S.ast.Node, ptr %a2 %t1149 = load { ptr, i64, i64 }, ptr %a8 @@ -84590,11 +84616,11 @@ then8286: %t1152 = load { ptr, i64, i64 }, ptr %t1151 %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 %t1154 = icmp uge i64 0, %t1153 - br i1 %t1154, label %range8289, label %inrange8290 -range8289: + br i1 %t1154, label %range8293, label %inrange8294 +range8293: call void @finch_panic_index(ptr @.str.5366, i64 4987, i64 0, i64 %t1153) unreachable -inrange8290: +inrange8294: %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 0 %t1157 = load %S.ast.Node, ptr %t1156 @@ -84673,14 +84699,14 @@ inrange8290: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1215 -endif8288: +endif8292: %t1216 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1216, ptr %a1217 store { ptr, i64, i64 } { ptr @.str.5375, i64 4, i64 0 }, ptr %a1218 %t1219 = call i32 @finch_str_eq(ptr %a1217, ptr %a1218) %t1220 = icmp ne i32 %t1219, 0 - br i1 %t1220, label %then8291, label %endif8293 -then8291: + br i1 %t1220, label %then8295, label %endif8297 +then8295: %t1221 = load ptr, ptr %a1 %t1222 = load %S.ast.Node, ptr %a2 %t1223 = load { ptr, i64, i64 }, ptr %a8 @@ -84691,11 +84717,11 @@ then8291: %t1227 = load { ptr, i64, i64 }, ptr %t1226 %t1228 = extractvalue { ptr, i64, i64 } %t1227, 1 %t1229 = icmp uge i64 0, %t1228 - br i1 %t1229, label %range8294, label %inrange8295 -range8294: + br i1 %t1229, label %range8298, label %inrange8299 +range8298: call void @finch_panic_index(ptr @.str.5376, i64 4997, i64 0, i64 %t1228) unreachable -inrange8295: +inrange8299: %t1230 = extractvalue { ptr, i64, i64 } %t1227, 0 %t1231 = getelementptr inbounds %S.ast.Node, ptr %t1230, i64 0 %t1232 = load %S.ast.Node, ptr %t1231 @@ -84705,11 +84731,11 @@ inrange8295: %t1236 = load { ptr, i64, i64 }, ptr %t1235 %t1237 = extractvalue { ptr, i64, i64 } %t1236, 1 %t1238 = icmp uge i64 0, %t1237 - br i1 %t1238, label %range8296, label %inrange8297 -range8296: + br i1 %t1238, label %range8300, label %inrange8301 +range8300: call void @finch_panic_index(ptr @.str.5378, i64 4997, i64 0, i64 %t1237) unreachable -inrange8297: +inrange8301: %t1239 = extractvalue { ptr, i64, i64 } %t1236, 0 %t1240 = getelementptr inbounds %S.ast.Node, ptr %t1239, i64 0 %t1241 = load %S.ast.Node, ptr %t1240 @@ -84762,14 +84788,14 @@ inrange8297: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1277 -endif8293: +endif8297: %t1278 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1278, ptr %a1279 store { ptr, i64, i64 } { ptr @.str.5386, i64 5, i64 0 }, ptr %a1280 %t1281 = call i32 @finch_str_eq(ptr %a1279, ptr %a1280) %t1282 = icmp ne i32 %t1281, 0 - br i1 %t1282, label %then8298, label %endif8300 -then8298: + br i1 %t1282, label %then8302, label %endif8304 +then8302: %t1283 = load ptr, ptr %a1 %t1284 = call %S.gen.Val @finch.gen.strConst(ptr %t1283, { ptr, i64, i64 } { ptr @.str.5387, i64 0, i64 0 }) store %S.gen.Val %t1284, ptr %a1285 @@ -84777,8 +84803,8 @@ then8298: %t1287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1286, i32 0, i32 1 %t1288 = load i64, ptr %t1287 %t1289 = icmp sgt i64 %t1288, 0 - br i1 %t1289, label %then8301, label %endif8303 -then8301: + br i1 %t1289, label %then8305, label %endif8307 +then8305: %t1290 = load ptr, ptr %a1 %t1291 = load %S.ast.Node, ptr %a2 %t1292 = load { ptr, i64, i64 }, ptr %a8 @@ -84788,11 +84814,11 @@ then8301: %t1295 = load { ptr, i64, i64 }, ptr %t1294 %t1296 = extractvalue { ptr, i64, i64 } %t1295, 1 %t1297 = icmp uge i64 0, %t1296 - br i1 %t1297, label %range8304, label %inrange8305 -range8304: + br i1 %t1297, label %range8308, label %inrange8309 +range8308: call void @finch_panic_index(ptr @.str.5388, i64 5007, i64 0, i64 %t1296) unreachable -inrange8305: +inrange8309: %t1298 = extractvalue { ptr, i64, i64 } %t1295, 0 %t1299 = getelementptr inbounds %S.ast.Node, ptr %t1298, i64 0 %t1300 = load %S.ast.Node, ptr %t1299 @@ -84801,8 +84827,8 @@ inrange8305: store %S.gen.Val %t1301, ptr %a1285 store %S.gen.Val %t1302, ptr %a1303 call void @finch.drop.S_gen_Val(ptr %a1303) - br label %endif8303 -endif8303: + br label %endif8307 +endif8307: %t1304 = load ptr, ptr %a1 %t1305 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1304) store { ptr, i64, i64 } %t1305, ptr %a1306 @@ -84853,14 +84879,14 @@ endif8303: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1341 -endif8300: +endif8304: %t1342 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1342, ptr %a1343 store { ptr, i64, i64 } { ptr @.str.5395, i64 3, i64 0 }, ptr %a1344 %t1345 = call i32 @finch_str_eq(ptr %a1343, ptr %a1344) %t1346 = icmp ne i32 %t1345, 0 - br i1 %t1346, label %then8306, label %endif8308 -then8306: + br i1 %t1346, label %then8310, label %endif8312 +then8310: %t1347 = load ptr, ptr %a1 %t1348 = load %S.ast.Node, ptr %a2 %t1349 = load { ptr, i64, i64 }, ptr %a8 @@ -84870,11 +84896,11 @@ then8306: %t1352 = load { ptr, i64, i64 }, ptr %t1351 %t1353 = extractvalue { ptr, i64, i64 } %t1352, 1 %t1354 = icmp uge i64 0, %t1353 - br i1 %t1354, label %range8309, label %inrange8310 -range8309: + br i1 %t1354, label %range8313, label %inrange8314 +range8313: call void @finch_panic_index(ptr @.str.5396, i64 5016, i64 0, i64 %t1353) unreachable -inrange8310: +inrange8314: %t1355 = extractvalue { ptr, i64, i64 } %t1352, 0 %t1356 = getelementptr inbounds %S.ast.Node, ptr %t1355, i64 0 %t1357 = load %S.ast.Node, ptr %t1356 @@ -84929,14 +84955,14 @@ inrange8310: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1397 -endif8308: +endif8312: %t1398 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1398, ptr %a1399 store { ptr, i64, i64 } { ptr @.str.5399, i64 4, i64 0 }, ptr %a1400 %t1401 = call i32 @finch_str_eq(ptr %a1399, ptr %a1400) %t1402 = icmp ne i32 %t1401, 0 - br i1 %t1402, label %then8311, label %endif8313 -then8311: + br i1 %t1402, label %then8315, label %endif8317 +then8315: %t1403 = load ptr, ptr %a1 %t1404 = load %S.ast.Node, ptr %a2 %t1405 = load { ptr, i64, i64 }, ptr %a8 @@ -84946,11 +84972,11 @@ then8311: %t1408 = load { ptr, i64, i64 }, ptr %t1407 %t1409 = extractvalue { ptr, i64, i64 } %t1408, 1 %t1410 = icmp uge i64 0, %t1409 - br i1 %t1410, label %range8314, label %inrange8315 -range8314: + br i1 %t1410, label %range8318, label %inrange8319 +range8318: call void @finch_panic_index(ptr @.str.5400, i64 5023, i64 0, i64 %t1409) unreachable -inrange8315: +inrange8319: %t1411 = extractvalue { ptr, i64, i64 } %t1408, 0 %t1412 = getelementptr inbounds %S.ast.Node, ptr %t1411, i64 0 %t1413 = load %S.ast.Node, ptr %t1412 @@ -84963,55 +84989,55 @@ inrange8315: store { ptr, i64, i64 } { ptr @.str.5401, i64 3, i64 0 }, ptr %a1420 %t1421 = call i32 @finch_str_eq(ptr %a1419, ptr %a1420) %t1422 = icmp eq i32 %t1421, 0 - br i1 %t1422, label %then8316, label %endif8318 -then8316: + br i1 %t1422, label %then8320, label %endif8322 +then8320: %t1423 = load ptr, ptr %a1 %t1424 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t1425 = load { ptr, i64, i64 }, ptr %t1424 %t1426 = extractvalue { ptr, i64, i64 } %t1425, 1 %t1427 = icmp uge i64 0, %t1426 - br i1 %t1427, label %range8319, label %inrange8320 -range8319: + br i1 %t1427, label %range8323, label %inrange8324 +range8323: call void @finch_panic_index(ptr @.str.5402, i64 5025, i64 0, i64 %t1426) unreachable -inrange8320: +inrange8324: %t1428 = extractvalue { ptr, i64, i64 } %t1425, 0 %t1429 = getelementptr inbounds %S.ast.Node, ptr %t1428, i64 0 %t1430 = load %S.ast.Node, ptr %t1429 call void @finch.gen.fail(ptr %t1423, %S.ast.Node %t1430, { ptr, i64, i64 } { ptr @.str.5403, i64 119, i64 0 }) - br label %endif8318 -endif8318: + br label %endif8322 +endif8322: %t1431 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 %t1432 = getelementptr inbounds %S.ast.Type, ptr %t1431, i32 0, i32 1 %t1433 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1432, i32 0, i32 1 %t1434 = load i64, ptr %t1433 %t1435 = icmp sgt i64 %t1434, 0 - br label %logic.from8321 -logic.from8321: - br i1 %t1435, label %logic.rhs8322, label %logic.end8323 -logic.rhs8322: + br label %logic.from8325 +logic.from8325: + br i1 %t1435, label %logic.rhs8326, label %logic.end8327 +logic.rhs8326: %t1436 = load ptr, ptr %a1 %t1437 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 %t1438 = getelementptr inbounds %S.ast.Type, ptr %t1437, i32 0, i32 1 %t1439 = load { ptr, i64, i64 }, ptr %t1438 %t1440 = extractvalue { ptr, i64, i64 } %t1439, 1 %t1441 = icmp uge i64 0, %t1440 - br i1 %t1441, label %range8324, label %inrange8325 -range8324: + br i1 %t1441, label %range8328, label %inrange8329 +range8328: call void @finch_panic_index(ptr @.str.5404, i64 5027, i64 0, i64 %t1440) unreachable -inrange8325: +inrange8329: %t1442 = extractvalue { ptr, i64, i64 } %t1439, 0 %t1443 = getelementptr inbounds %S.ast.Type, ptr %t1442, i64 0 %t1444 = load %S.ast.Type, ptr %t1443 %t1445 = call i1 @finch.gen.owning(ptr %t1436, %S.ast.Type %t1444) - br label %logic.rend8326 -logic.rend8326: - br label %logic.end8323 -logic.end8323: - %t1446 = phi i1 [ false, %logic.from8321 ], [ %t1445, %logic.rend8326 ] - br i1 %t1446, label %then8327, label %endif8329 -then8327: + br label %logic.rend8330 +logic.rend8330: + br label %logic.end8327 +logic.end8327: + %t1446 = phi i1 [ false, %logic.from8325 ], [ %t1445, %logic.rend8330 ] + br i1 %t1446, label %then8331, label %endif8333 +then8331: %t1447 = load ptr, ptr %a1 %t1448 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1447, { ptr, i64, i64 } { ptr @.str.5405, i64 9, i64 0 }) store { ptr, i64, i64 } %t1448, ptr %a1449 @@ -85051,11 +85077,11 @@ then8327: %t1478 = load { ptr, i64, i64 }, ptr %t1477 %t1479 = extractvalue { ptr, i64, i64 } %t1478, 1 %t1480 = icmp uge i64 0, %t1479 - br i1 %t1480, label %range8330, label %inrange8331 -range8330: + br i1 %t1480, label %range8334, label %inrange8335 +range8334: call void @finch_panic_index(ptr @.str.5409, i64 5032, i64 0, i64 %t1479) unreachable -inrange8331: +inrange8335: %t1481 = extractvalue { ptr, i64, i64 } %t1478, 0 %t1482 = getelementptr inbounds %S.ast.Type, ptr %t1481, i64 0 %t1483 = load %S.ast.Type, ptr %t1482 @@ -85068,8 +85094,8 @@ inrange8331: call void @finch.gen.label(ptr %t1486, { ptr, i64, i64 } %t1487) call void @finch_str_drop(ptr %a1452) call void @finch_str_drop(ptr %a1449) - br label %endif8329 -endif8329: + br label %endif8333 +endif8333: %t1488 = load ptr, ptr %a1 %t1489 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 %t1490 = load { ptr, i64, i64 }, ptr %t1489 @@ -85092,15 +85118,15 @@ endif8329: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1502 -endif8313: +endif8317: %t1503 = load ptr, ptr %a1 %t1504 = load ptr, ptr %a1 %t1505 = icmp eq ptr %t1504, null - br i1 %t1505, label %panic8332, label %ok8333 -panic8332: + br i1 %t1505, label %panic8336, label %ok8337 +panic8336: call void @finch_panic(ptr @.str.5413, i64 5039, ptr @.str.5414) unreachable -ok8333: +ok8337: %t1506 = getelementptr inbounds %S.gen.Gen, ptr %t1504, i32 0, i32 14 %t1507 = load { ptr, i64, i64 }, ptr %t1506 %t1508 = load { ptr, i64, i64 }, ptr %a8 @@ -85108,15 +85134,15 @@ ok8333: store i64 %t1509, ptr %a1510 %t1511 = load i64, ptr %a1510 %t1512 = icmp sge i64 %t1511, 0 - br i1 %t1512, label %then8334, label %endif8336 -then8334: + br i1 %t1512, label %then8338, label %endif8340 +then8338: %t1513 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1514 = getelementptr inbounds %S.ast.Type, ptr %t1513, i32 0, i32 1 %t1515 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1514, i32 0, i32 1 %t1516 = load i64, ptr %t1515 %t1517 = icmp sgt i64 %t1516, 0 - br i1 %t1517, label %then8337, label %endif8339 -then8337: + br i1 %t1517, label %then8341, label %endif8343 +then8341: %t1518 = load ptr, ptr %a1 %t1519 = load %S.ast.Node, ptr %a2 %t1520 = load { ptr, i64, i64 }, ptr %a8 @@ -85133,8 +85159,8 @@ then8337: call void @finch.gen.fail(ptr %t1518, %S.ast.Node %t1519, { ptr, i64, i64 } %t1529) store { ptr, i64, i64 } %t1529, ptr %a1530 call void @finch_str_drop(ptr %a1530) - br label %endif8339 -endif8339: + br label %endif8343 +endif8343: %t1531 = load ptr, ptr %a1 %t1532 = load i64, ptr %a1510 %t1533 = load %S.ast.Node, ptr %a2 @@ -85143,15 +85169,15 @@ endif8339: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1535 -endif8336: +endif8340: %t1536 = load ptr, ptr %a1 %t1537 = load ptr, ptr %a1 %t1538 = icmp eq ptr %t1537, null - br i1 %t1538, label %panic8340, label %ok8341 -panic8340: + br i1 %t1538, label %panic8344, label %ok8345 +panic8344: call void @finch_panic(ptr @.str.5419, i64 5046, ptr @.str.5420) unreachable -ok8341: +ok8345: %t1539 = getelementptr inbounds %S.gen.Gen, ptr %t1537, i32 0, i32 14 %t1540 = load { ptr, i64, i64 }, ptr %t1539 %t1541 = load { ptr, i64, i64 }, ptr %a8 @@ -85159,8 +85185,8 @@ ok8341: store i64 %t1542, ptr %a1543 %t1544 = load i64, ptr %a1543 %t1545 = icmp sge i64 %t1544, 0 - br i1 %t1545, label %then8342, label %endif8344 -then8342: + br i1 %t1545, label %then8346, label %endif8348 +then8346: %t1546 = load ptr, ptr %a1 %t1547 = load %S.ast.Node, ptr %a2 %t1548 = load i64, ptr %a1543 @@ -85169,29 +85195,29 @@ then8342: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1550 -endif8344: +endif8348: %t1551 = load ptr, ptr %a1 %t1552 = load ptr, ptr %a1 %t1553 = icmp eq ptr %t1552, null - br i1 %t1553, label %panic8345, label %ok8346 -panic8345: + br i1 %t1553, label %panic8349, label %ok8350 +panic8349: call void @finch_panic(ptr @.str.5422, i64 5050, ptr @.str.5423) unreachable -ok8346: +ok8350: %t1554 = getelementptr inbounds %S.gen.Gen, ptr %t1552, i32 0, i32 14 %t1555 = load { ptr, i64, i64 }, ptr %t1554 %t1556 = load { ptr, i64, i64 }, ptr %a8 %t1557 = call i64 @finch.gen.findTemplate(ptr %t1551, { ptr, i64, i64 } %t1555, { ptr, i64, i64 } %t1556, { ptr, i64, i64 } { ptr @.str.5424, i64 0, i64 0 }, i1 true) %t1558 = icmp sge i64 %t1557, 0 - br i1 %t1558, label %then8347, label %endif8349 -then8347: + br i1 %t1558, label %then8351, label %endif8353 +then8351: %t1559 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1560 = getelementptr inbounds %S.ast.Type, ptr %t1559, i32 0, i32 1 %t1561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1560, i32 0, i32 1 %t1562 = load i64, ptr %t1561 %t1563 = icmp eq i64 %t1562, 0 - br i1 %t1563, label %then8350, label %endif8352 -then8350: + br i1 %t1563, label %then8354, label %endif8356 +then8354: %t1564 = load ptr, ptr %a1 %t1565 = load %S.ast.Node, ptr %a2 %t1566 = load { ptr, i64, i64 }, ptr %a8 @@ -85221,20 +85247,20 @@ then8350: call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1586) store { ptr, i64, i64 } %t1586, ptr %a1587 call void @finch_str_drop(ptr %a1587) - br label %endif8352 -endif8352: + br label %endif8356 +endif8356: store { ptr, i64, i64 } zeroinitializer, ptr %a1588 %t1589 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 %t1590 = getelementptr inbounds %S.ast.Type, ptr %t1589, i32 0, i32 1 store i64 0, ptr %a1591 - br label %each.cond8353 -each.cond8353: + br label %each.cond8357 +each.cond8357: %t1592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1590, i32 0, i32 1 %t1593 = load i64, ptr %t1592 %t1594 = load i64, ptr %a1591 %t1595 = icmp slt i64 %t1594, %t1593 - br i1 %t1595, label %each.body8354, label %each.end8356 -each.body8354: + br i1 %t1595, label %each.body8358, label %each.end8360 +each.body8358: %t1596 = load ptr, ptr %t1590 %t1597 = getelementptr inbounds %S.ast.Type, ptr %t1596, i64 %t1594 %t1598 = load %S.ast.Type, ptr %t1597 @@ -85251,21 +85277,21 @@ each.body8354: %t1608 = getelementptr inbounds %S.ast.Type, ptr %t1607, i64 %t1605 store %S.ast.Type %t1604, ptr %t1608 store i64 %t1606, ptr %t1600 - br label %each.step8355 -each.step8355: + br label %each.step8359 +each.step8359: %t1609 = load i64, ptr %a1591 %t1610 = add i64 %t1609, 1 store i64 %t1610, ptr %a1591 - br label %each.cond8353 -each.end8356: + br label %each.cond8357 +each.end8360: %t1611 = load ptr, ptr %a1 %t1612 = load ptr, ptr %a1 %t1613 = icmp eq ptr %t1612, null - br i1 %t1613, label %panic8357, label %ok8358 -panic8357: + br i1 %t1613, label %panic8361, label %ok8362 +panic8361: call void @finch_panic(ptr @.str.5428, i64 5059, ptr @.str.5429) unreachable -ok8358: +ok8362: %t1614 = getelementptr inbounds %S.gen.Gen, ptr %t1612, i32 0, i32 14 %t1615 = load { ptr, i64, i64 }, ptr %t1614 %t1616 = load { ptr, i64, i64 }, ptr %a8 @@ -85291,15 +85317,15 @@ ok8358: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1633 -endif8349: +endif8353: %t1634 = load ptr, ptr %a1 %t1635 = load ptr, ptr %a1 %t1636 = icmp eq ptr %t1635, null - br i1 %t1636, label %panic8359, label %ok8360 -panic8359: + br i1 %t1636, label %panic8363, label %ok8364 +panic8363: call void @finch_panic(ptr @.str.5430, i64 5062, ptr @.str.5431) unreachable -ok8360: +ok8364: %t1637 = getelementptr inbounds %S.gen.Gen, ptr %t1635, i32 0, i32 14 %t1638 = load { ptr, i64, i64 }, ptr %t1637 %t1639 = load { ptr, i64, i64 }, ptr %a8 @@ -85307,25 +85333,25 @@ ok8360: store i64 %t1640, ptr %a1641 %t1642 = load i64, ptr %a1641 %t1643 = icmp sge i64 %t1642, 0 - br i1 %t1643, label %then8361, label %endif8363 -then8361: + br i1 %t1643, label %then8365, label %endif8367 +then8365: %t1644 = load ptr, ptr %a1 %t1645 = icmp eq ptr %t1644, null - br i1 %t1645, label %panic8364, label %ok8365 -panic8364: + br i1 %t1645, label %panic8368, label %ok8369 +panic8368: call void @finch_panic(ptr @.str.5432, i64 5064, ptr @.str.5433) unreachable -ok8365: +ok8369: %t1646 = getelementptr inbounds %S.gen.Gen, ptr %t1644, i32 0, i32 16 %t1647 = load i64, ptr %a1641 %t1648 = load { ptr, i64, i64 }, ptr %t1646 %t1649 = extractvalue { ptr, i64, i64 } %t1648, 1 %t1650 = icmp uge i64 %t1647, %t1649 - br i1 %t1650, label %range8366, label %inrange8367 -range8366: + br i1 %t1650, label %range8370, label %inrange8371 +range8370: call void @finch_panic_index(ptr @.str.5434, i64 5064, i64 %t1647, i64 %t1649) unreachable -inrange8367: +inrange8371: %t1651 = extractvalue { ptr, i64, i64 } %t1648, 0 %t1652 = getelementptr inbounds %S.gen.StructDef, ptr %t1651, i64 %t1647 %t1653 = load %S.gen.StructDef, ptr %t1652 @@ -85335,45 +85361,45 @@ inrange8367: store %S.gen.StructDef %t1656, ptr %a1657 %t1658 = load ptr, ptr %a1 %t1659 = icmp eq ptr %t1658, null - br i1 %t1659, label %panic8368, label %ok8369 -panic8368: + br i1 %t1659, label %panic8372, label %ok8373 +panic8372: call void @finch_panic(ptr @.str.5435, i64 5065, ptr @.str.5436) unreachable -ok8369: +ok8373: %t1660 = getelementptr inbounds %S.gen.Gen, ptr %t1658, i32 0, i32 28 %t1661 = load i1, ptr %t1660 - br label %logic.from8370 -logic.from8370: - br i1 %t1661, label %logic.rhs8371, label %logic.end8372 -logic.rhs8371: + br label %logic.from8374 +logic.from8374: + br i1 %t1661, label %logic.rhs8375, label %logic.end8376 +logic.rhs8375: %t1662 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 2 %t1663 = load i1, ptr %t1662 %t1664 = xor i1 %t1663, true - br label %logic.rend8373 -logic.rend8373: - br label %logic.end8372 -logic.end8372: - %t1665 = phi i1 [ false, %logic.from8370 ], [ %t1664, %logic.rend8373 ] - br i1 %t1665, label %then8374, label %endif8376 -then8374: + br label %logic.rend8377 +logic.rend8377: + br label %logic.end8376 +logic.end8376: + %t1665 = phi i1 [ false, %logic.from8374 ], [ %t1664, %logic.rend8377 ] + br i1 %t1665, label %then8378, label %endif8380 +then8378: %t1666 = load ptr, ptr %a1 %t1667 = icmp eq ptr %t1666, null - br i1 %t1667, label %panic8377, label %ok8378 -panic8377: + br i1 %t1667, label %panic8381, label %ok8382 +panic8381: call void @finch_panic(ptr @.str.5437, i64 5066, ptr @.str.5438) unreachable -ok8378: +ok8382: %t1668 = getelementptr inbounds %S.gen.Gen, ptr %t1666, i32 0, i32 0 %t1669 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 13 %t1670 = load i64, ptr %t1669 %t1671 = load { ptr, i64, i64 }, ptr %t1668 %t1672 = extractvalue { ptr, i64, i64 } %t1671, 1 %t1673 = icmp uge i64 %t1670, %t1672 - br i1 %t1673, label %range8379, label %inrange8380 -range8379: + br i1 %t1673, label %range8383, label %inrange8384 +range8383: call void @finch_panic_index(ptr @.str.5439, i64 5066, i64 %t1670, i64 %t1672) unreachable -inrange8380: +inrange8384: %t1674 = extractvalue { ptr, i64, i64 } %t1671, 0 %t1675 = getelementptr inbounds %S.ast.Program, ptr %t1674, i64 %t1670 %t1676 = getelementptr inbounds %S.ast.Program, ptr %t1675, i32 0, i32 6 @@ -85382,11 +85408,11 @@ inrange8380: %t1679 = load { ptr, i64, i64 }, ptr %t1676 %t1680 = extractvalue { ptr, i64, i64 } %t1679, 1 %t1681 = icmp uge i64 %t1678, %t1680 - br i1 %t1681, label %range8381, label %inrange8382 -range8381: + br i1 %t1681, label %range8385, label %inrange8386 +range8385: call void @finch_panic_index(ptr @.str.5440, i64 5066, i64 %t1678, i64 %t1680) unreachable -inrange8382: +inrange8386: %t1682 = extractvalue { ptr, i64, i64 } %t1679, 0 %t1683 = getelementptr inbounds %S.ast.Node, ptr %t1682, i64 %t1678 %t1684 = load %S.ast.Node, ptr %t1683 @@ -85433,22 +85459,22 @@ inrange8382: %t1721 = load { ptr, i64, i64 }, ptr %a1717 %t1722 = load ptr, ptr %a1 %t1723 = icmp eq ptr %t1722, null - br i1 %t1723, label %panic8383, label %ok8384 -panic8383: + br i1 %t1723, label %panic8387, label %ok8388 +panic8387: call void @finch_panic(ptr @.str.5445, i64 5067, ptr @.str.5446) unreachable -ok8384: +ok8388: %t1724 = getelementptr inbounds %S.gen.Gen, ptr %t1722, i32 0, i32 1 %t1725 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 13 %t1726 = load i64, ptr %t1725 %t1727 = load { ptr, i64, i64 }, ptr %t1724 %t1728 = extractvalue { ptr, i64, i64 } %t1727, 1 %t1729 = icmp uge i64 %t1726, %t1728 - br i1 %t1729, label %range8385, label %inrange8386 -range8385: + br i1 %t1729, label %range8389, label %inrange8390 +range8389: call void @finch_panic_index(ptr @.str.5447, i64 5067, i64 %t1726, i64 %t1728) unreachable -inrange8386: +inrange8390: %t1730 = extractvalue { ptr, i64, i64 } %t1727, 0 %t1731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1730, i64 %t1726 %t1732 = load { ptr, i64, i64 }, ptr %t1731 @@ -85460,8 +85486,8 @@ inrange8386: store { ptr, i64, i64 } %t1721, ptr %a1737 call void @finch_str_drop(ptr %a1737) call void @finch.drop.S_ast_Node(ptr %a1688) - br label %endif8376 -endif8376: + br label %endif8380 +endif8380: %t1738 = load ptr, ptr %a1 %t1739 = load i64, ptr %a1641 %t1740 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 @@ -85474,15 +85500,15 @@ endif8376: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1745 -endif8363: +endif8367: %t1746 = load ptr, ptr %a1 %t1747 = load ptr, ptr %a1 %t1748 = icmp eq ptr %t1747, null - br i1 %t1748, label %panic8387, label %ok8388 -panic8387: + br i1 %t1748, label %panic8391, label %ok8392 +panic8391: call void @finch_panic(ptr @.str.5448, i64 5071, ptr @.str.5449) unreachable -ok8388: +ok8392: %t1749 = getelementptr inbounds %S.gen.Gen, ptr %t1747, i32 0, i32 14 %t1750 = load { ptr, i64, i64 }, ptr %t1749 %t1751 = load { ptr, i64, i64 }, ptr %a8 @@ -85490,8 +85516,8 @@ ok8388: store i64 %t1752, ptr %a1753 %t1754 = load i64, ptr %a1753 %t1755 = icmp sge i64 %t1754, 0 - br i1 %t1755, label %then8389, label %endif8391 -then8389: + br i1 %t1755, label %then8393, label %endif8395 +then8393: %t1756 = load ptr, ptr %a1 %t1757 = load %S.ast.Node, ptr %a2 %t1758 = load i64, ptr %a1753 @@ -85499,45 +85525,45 @@ then8389: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1759 -endif8391: +endif8395: %t1760 = load ptr, ptr %a1 %t1761 = icmp eq ptr %t1760, null - br i1 %t1761, label %panic8392, label %ok8393 -panic8392: + br i1 %t1761, label %panic8396, label %ok8397 +panic8396: call void @finch_panic(ptr @.str.5450, i64 5075, ptr @.str.5451) unreachable -ok8393: +ok8397: %t1762 = getelementptr inbounds %S.gen.Gen, ptr %t1760, i32 0, i32 26 %t1763 = getelementptr inbounds %S.cimport.CImports, ptr %t1762, i32 0, i32 0 %t1764 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1764, ptr %a1765 %t1766 = call i64 @finch_map_find(ptr %t1763, ptr %a1765, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t1767 = icmp sge i64 %t1766, 0 - br i1 %t1767, label %then8394, label %endif8396 -then8394: + br i1 %t1767, label %then8398, label %endif8400 +then8398: %t1768 = load ptr, ptr %a1 %t1769 = load %S.ast.Node, ptr %a2 %t1770 = load ptr, ptr %a1 %t1771 = icmp eq ptr %t1770, null - br i1 %t1771, label %panic8397, label %ok8398 -panic8397: + br i1 %t1771, label %panic8401, label %ok8402 +panic8401: call void @finch_panic(ptr @.str.5452, i64 5076, ptr @.str.5453) unreachable -ok8398: +ok8402: %t1772 = getelementptr inbounds %S.gen.Gen, ptr %t1770, i32 0, i32 26 %t1773 = getelementptr inbounds %S.cimport.CImports, ptr %t1772, i32 0, i32 0 %t1774 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t1774, ptr %a1775 %t1776 = call i64 @finch_map_find(ptr %t1773, ptr %a1775, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t1777 = icmp slt i64 %t1776, 0 - br i1 %t1777, label %map.missing8399, label %map.found8400 -map.missing8399: + br i1 %t1777, label %map.missing8403, label %map.found8404 +map.missing8403: store { ptr, i64, i64 } zeroinitializer, ptr %a1778 store { ptr, i64, i64 } %t1774, ptr %a1779 call void @finch_buf_str(ptr %a1778, ptr %a1779, i32 1) call void @finch_map_missing(ptr @.str.5454, i64 5076, ptr %a1778) unreachable -map.found8400: +map.found8404: %t1780 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t1773, i32 0, i32 0 %t1781 = load ptr, ptr %t1780 %t1782 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1781, i64 %t1776 @@ -85547,15 +85573,15 @@ map.found8400: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1785 -endif8396: +endif8400: %t1786 = load ptr, ptr %a1 %t1787 = load { ptr, i64, i64 }, ptr %a8 %t1788 = call i64 @finch.gen.findStruct(ptr %t1786, { ptr, i64, i64 } { ptr @.str.5455, i64 1, i64 0 }, { ptr, i64, i64 } %t1787) store i64 %t1788, ptr %a1641 %t1789 = load i64, ptr %a1641 %t1790 = icmp sge i64 %t1789, 0 - br i1 %t1790, label %then8401, label %endif8403 -then8401: + br i1 %t1790, label %then8405, label %endif8407 +then8405: %t1791 = load ptr, ptr %a1 %t1792 = load i64, ptr %a1641 %t1793 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 @@ -85567,13 +85593,13 @@ then8401: call void @finch_str_drop(ptr %a570) call void @finch_str_drop(ptr %a8) ret %S.gen.Val %t1798 -endif8403: +endif8407: %t1799 = load ptr, ptr %a1 %t1800 = load { ptr, i64, i64 }, ptr %a8 %t1801 = call i64 @finch.gen.lookup(ptr %t1799, { ptr, i64, i64 } %t1800) %t1802 = icmp sge i64 %t1801, 0 - br i1 %t1802, label %then8404, label %endif8406 -then8404: + br i1 %t1802, label %then8408, label %endif8410 +then8408: %t1803 = load ptr, ptr %a1 %t1804 = load %S.ast.Node, ptr %a2 %t1805 = load { ptr, i64, i64 }, ptr %a8 @@ -85590,8 +85616,8 @@ then8404: call void @finch.gen.fail(ptr %t1803, %S.ast.Node %t1804, { ptr, i64, i64 } %t1814) store { ptr, i64, i64 } %t1814, ptr %a1815 call void @finch_str_drop(ptr %a1815) - br label %endif8406 -endif8406: + br label %endif8410 +endif8410: %t1816 = load ptr, ptr %a1 %t1817 = load %S.ast.Node, ptr %a2 %t1818 = load { ptr, i64, i64 }, ptr %a8 @@ -85685,21 +85711,21 @@ entry: store { ptr, i64, i64 } %p6, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic8407, label %ok8408 -panic8407: + br i1 %t9, label %panic8411, label %ok8412 +panic8411: call void @finch_panic(ptr @.str.5460, i64 5090, ptr @.str.5461) unreachable -ok8408: +ok8412: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 15 %t11 = load i64, ptr %a2 %t12 = load { ptr, i64, i64 }, ptr %t10 %t13 = extractvalue { ptr, i64, i64 } %t12, 1 %t14 = icmp uge i64 %t11, %t13 - br i1 %t14, label %range8409, label %inrange8410 -range8409: + br i1 %t14, label %range8413, label %inrange8414 +range8413: call void @finch_panic_index(ptr @.str.5462, i64 5090, i64 %t11, i64 %t13) unreachable -inrange8410: +inrange8414: %t15 = extractvalue { ptr, i64, i64 } %t12, 0 %t16 = getelementptr inbounds %S.gen.FnSig, ptr %t15, i64 %t11 %t17 = load %S.gen.FnSig, ptr %t16 @@ -85711,28 +85737,28 @@ inrange8410: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = icmp eq i64 %t24, 0 - br label %logic.from8411 -logic.from8411: - br i1 %t25, label %logic.rhs8412, label %logic.end8413 -logic.rhs8412: + br label %logic.from8415 +logic.from8415: + br i1 %t25, label %logic.rhs8416, label %logic.end8417 +logic.rhs8416: %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 store { ptr, i64, i64 } { ptr @.str.5463, i64 4, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br label %logic.rend8414 -logic.rend8414: - br label %logic.end8413 -logic.end8413: - %t32 = phi i1 [ false, %logic.from8411 ], [ %t31, %logic.rend8414 ] - br i1 %t32, label %then8415, label %endif8417 -then8415: + br label %logic.rend8418 +logic.rend8418: + br label %logic.end8417 +logic.end8417: + %t32 = phi i1 [ false, %logic.from8415 ], [ %t31, %logic.rend8418 ] + br i1 %t32, label %then8419, label %endif8421 +then8419: %t33 = load ptr, ptr %a1 %t34 = load %S.ast.Node, ptr %a3 call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } { ptr @.str.5464, i64 52, i64 0 }) - br label %endif8417 -endif8417: + br label %endif8421 +endif8421: %t35 = load ptr, ptr %a1 %t36 = load %S.ast.Node, ptr %a3 %t37 = load %S.gen.FnSig, ptr %a21 @@ -85750,8 +85776,8 @@ endif8417: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 %t48 = load i64, ptr %t47 %t49 = icmp sgt i64 %t48, 0 - br i1 %t49, label %then8418, label %endif8420 -then8418: + br i1 %t49, label %then8422, label %endif8424 +then8422: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t51 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } { ptr @.str.5465, i64 4, i64 0 }, ptr %a53 @@ -85765,16 +85791,16 @@ then8418: %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t56 store { ptr, i64, i64 } %t55, ptr %t59 store i64 %t57, ptr %t50 - br label %endif8420 -endif8420: + br label %endif8424 +endif8424: store { ptr, i64, i64 } zeroinitializer, ptr %a60 %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null - br i1 %t62, label %panic8421, label %ok8422 -panic8421: + br i1 %t62, label %panic8425, label %ok8426 +panic8425: call void @finch_panic(ptr @.str.5466, i64 5101, ptr @.str.5467) unreachable -ok8422: +ok8426: %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 11 %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 %t65 = load i64, ptr %t64 @@ -85783,12 +85809,12 @@ ok8422: %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 %t69 = load i64, ptr %t68 store i64 0, ptr %a70 - br label %for.cond8423 -for.cond8423: + br label %for.cond8427 +for.cond8427: %t71 = load i64, ptr %a70 %t72 = icmp slt i64 %t71, %t69 - br i1 %t72, label %for.body8424, label %for.end8426 -for.body8424: + br i1 %t72, label %for.body8428, label %for.end8430 +for.body8428: %t73 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 %t74 = load i64, ptr %a4 %t75 = load i64, ptr %a70 @@ -85796,11 +85822,11 @@ for.body8424: %t77 = load { ptr, i64, i64 }, ptr %t73 %t78 = extractvalue { ptr, i64, i64 } %t77, 1 %t79 = icmp uge i64 %t76, %t78 - br i1 %t79, label %range8427, label %inrange8428 -range8427: + br i1 %t79, label %range8431, label %inrange8432 +range8431: call void @finch_panic_index(ptr @.str.5468, i64 5103, i64 %t76, i64 %t78) unreachable -inrange8428: +inrange8432: %t80 = extractvalue { ptr, i64, i64 } %t77, 0 %t81 = getelementptr inbounds %S.ast.Node, ptr %t80, i64 %t76 %t82 = load %S.ast.Node, ptr %t81 @@ -85816,11 +85842,11 @@ inrange8428: %t92 = load { ptr, i64, i64 }, ptr %t90 %t93 = extractvalue { ptr, i64, i64 } %t92, 1 %t94 = icmp uge i64 %t91, %t93 - br i1 %t94, label %range8429, label %inrange8430 -range8429: + br i1 %t94, label %range8433, label %inrange8434 +range8433: call void @finch_panic_index(ptr @.str.5469, i64 5104, i64 %t91, i64 %t93) unreachable -inrange8430: +inrange8434: %t95 = extractvalue { ptr, i64, i64 } %t92, 0 %t96 = getelementptr inbounds %S.ast.Type, ptr %t95, i64 %t91 %t97 = load %S.ast.Type, ptr %t96 @@ -85830,11 +85856,11 @@ inrange8430: %t101 = load { ptr, i64, i64 }, ptr %t99 %t102 = extractvalue { ptr, i64, i64 } %t101, 1 %t103 = icmp uge i64 %t100, %t102 - br i1 %t103, label %range8431, label %inrange8432 -range8431: + br i1 %t103, label %range8435, label %inrange8436 +range8435: call void @finch_panic_index(ptr @.str.5470, i64 5104, i64 %t100, i64 %t102) unreachable -inrange8432: +inrange8436: %t104 = extractvalue { ptr, i64, i64 } %t101, 0 %t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 %t100 %t106 = load %S.ast.Type, ptr %t105 @@ -85844,11 +85870,11 @@ inrange8432: %t110 = load { ptr, i64, i64 }, ptr %t108 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 - br i1 %t112, label %range8433, label %inrange8434 -range8433: + br i1 %t112, label %range8437, label %inrange8438 +range8437: call void @finch_panic_index(ptr @.str.5472, i64 5104, i64 %t109, i64 %t111) unreachable -inrange8434: +inrange8438: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i64 %t109 %t115 = load { ptr, i64, i64 }, ptr %t114 @@ -85874,43 +85900,43 @@ inrange8434: %t132 = load { ptr, i64, i64 }, ptr %t130 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 %t131, %t133 - br i1 %t134, label %range8435, label %inrange8436 -range8435: + br i1 %t134, label %range8439, label %inrange8440 +range8439: call void @finch_panic_index(ptr @.str.5474, i64 5106, i64 %t131, i64 %t133) unreachable -inrange8436: +inrange8440: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i64 %t131 %t137 = load %S.ast.Type, ptr %t136 %t138 = call i1 @finch.gen.owning(ptr %t129, %S.ast.Type %t137) - br label %logic.from8437 -logic.from8437: - br i1 %t138, label %logic.rhs8438, label %logic.end8439 -logic.rhs8438: + br label %logic.from8441 +logic.from8441: + br i1 %t138, label %logic.rhs8442, label %logic.end8443 +logic.rhs8442: %t139 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 %t140 = load i1, ptr %t139 %t141 = xor i1 %t140, true - br label %logic.rend8440 -logic.rend8440: - br label %logic.end8439 -logic.end8439: - %t142 = phi i1 [ false, %logic.from8437 ], [ %t141, %logic.rend8440 ] - br label %logic.from8441 -logic.from8441: - br i1 %t142, label %logic.rhs8442, label %logic.end8443 -logic.rhs8442: - %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 - %t144 = load i64, ptr %t143 - %t145 = icmp sgt i64 %t144, 0 br label %logic.rend8444 logic.rend8444: br label %logic.end8443 logic.end8443: - %t146 = phi i1 [ false, %logic.from8441 ], [ %t145, %logic.rend8444 ] + %t142 = phi i1 [ false, %logic.from8441 ], [ %t141, %logic.rend8444 ] br label %logic.from8445 logic.from8445: - br i1 %t146, label %logic.rhs8446, label %logic.end8447 + br i1 %t142, label %logic.rhs8446, label %logic.end8447 logic.rhs8446: + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t144 = load i64, ptr %t143 + %t145 = icmp sgt i64 %t144, 0 + br label %logic.rend8448 +logic.rend8448: + br label %logic.end8447 +logic.end8447: + %t146 = phi i1 [ false, %logic.from8445 ], [ %t145, %logic.rend8448 ] + br label %logic.from8449 +logic.from8449: + br i1 %t146, label %logic.rhs8450, label %logic.end8451 +logic.rhs8450: %t147 = load %S.ast.Node, ptr %a86 %t148 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t147) %t149 = load { ptr, i64, i64 }, ptr %a7 @@ -85920,13 +85946,13 @@ logic.rhs8446: %t153 = icmp ne i32 %t152, 0 store { ptr, i64, i64 } %t148, ptr %a154 call void @finch_str_drop(ptr %a154) - br label %logic.rend8448 -logic.rend8448: - br label %logic.end8447 -logic.end8447: - %t155 = phi i1 [ false, %logic.from8445 ], [ %t153, %logic.rend8448 ] - br i1 %t155, label %then8449, label %endif8451 -then8449: + br label %logic.rend8452 +logic.rend8452: + br label %logic.end8451 +logic.end8451: + %t155 = phi i1 [ false, %logic.from8449 ], [ %t153, %logic.rend8452 ] + br i1 %t155, label %then8453, label %endif8455 +then8453: %t156 = load ptr, ptr %a1 %t157 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 %t158 = load { ptr, i64, i64 }, ptr %t157 @@ -85945,8 +85971,8 @@ then8449: store %S.gen.Val %t169, ptr %a128 store %S.gen.Val %t170, ptr %a171 call void @finch.drop.S_gen_Val(ptr %a171) - br label %endif8451 -endif8451: + br label %endif8455 +endif8455: %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t173 = load ptr, ptr %a1 %t174 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 @@ -85954,11 +85980,11 @@ endif8451: %t176 = load { ptr, i64, i64 }, ptr %t174 %t177 = extractvalue { ptr, i64, i64 } %t176, 1 %t178 = icmp uge i64 %t175, %t177 - br i1 %t178, label %range8452, label %inrange8453 -range8452: + br i1 %t178, label %range8456, label %inrange8457 +range8456: call void @finch_panic_index(ptr @.str.5475, i64 5109, i64 %t175, i64 %t177) unreachable -inrange8453: +inrange8457: %t179 = extractvalue { ptr, i64, i64 } %t176, 0 %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i64 %t175 %t181 = load %S.ast.Type, ptr %t180 @@ -85986,8 +86012,8 @@ inrange8453: store i64 %t196, ptr %t172 %t199 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 %t200 = load i1, ptr %t199 - br i1 %t200, label %then8454, label %endif8456 -then8454: + br i1 %t200, label %then8458, label %endif8460 +then8458: %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 %t202 = load %S.gen.Val, ptr %a128 store %S.gen.Val %t202, ptr %a203 @@ -86000,20 +86026,20 @@ then8454: %t209 = getelementptr inbounds %S.gen.Val, ptr %t208, i64 %t206 store %S.gen.Val %t205, ptr %t209 store i64 %t207, ptr %t201 - br label %endif8456 -endif8456: + br label %endif8460 +endif8460: %t210 = load ptr, ptr %a1 %t211 = load %S.gen.Val, ptr %a128 call void @finch.gen.hold(ptr %t210, %S.gen.Val %t211) call void @finch.drop.S_gen_Val(ptr %a128) call void @finch.drop.S_ast_Node(ptr %a86) - br label %for.step8425 -for.step8425: + br label %for.step8429 +for.step8429: %t212 = load i64, ptr %a70 %t213 = add i64 %t212, 1 store i64 %t213, ptr %a70 - br label %for.cond8423 -for.end8426: + br label %for.cond8427 +for.end8430: %t214 = load ptr, ptr %a1 %t215 = load %S.gen.FnSig, ptr %a21 %t216 = load %S.ast.Node, ptr %a3 @@ -86022,14 +86048,14 @@ for.end8426: %t219 = call %S.gen.Val @finch.gen.emitCall(ptr %t214, %S.gen.FnSig %t215, %S.ast.Node %t216, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t218) store %S.gen.Val %t219, ptr %a220 store i64 0, ptr %a221 - br label %each.cond8457 -each.cond8457: + br label %each.cond8461 +each.cond8461: %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 %t223 = load i64, ptr %t222 %t224 = load i64, ptr %a221 %t225 = icmp slt i64 %t224, %t223 - br i1 %t225, label %each.body8458, label %each.end8460 -each.body8458: + br i1 %t225, label %each.body8462, label %each.end8464 +each.body8462: %t226 = load ptr, ptr %a60 %t227 = getelementptr inbounds %S.gen.Val, ptr %t226, i64 %t224 %t228 = load %S.gen.Val, ptr %t227 @@ -86037,13 +86063,13 @@ each.body8458: %t230 = load ptr, ptr %a1 %t231 = load %S.gen.Val, ptr %a229 call void @finch.gen.release(ptr %t230, %S.gen.Val %t231) - br label %each.step8459 -each.step8459: + br label %each.step8463 +each.step8463: %t232 = load i64, ptr %a221 %t233 = add i64 %t232, 1 store i64 %t233, ptr %a221 - br label %each.cond8457 -each.end8460: + br label %each.cond8461 +each.end8464: %t234 = load ptr, ptr %a1 %t235 = load i64, ptr %a66 call void @finch.gen.heldEnd(ptr %t234, i64 %t235) @@ -86206,17 +86232,17 @@ entry: store { ptr, i64, i64 } %p4, ptr %a5 %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t7 = load i1, ptr %t6 - br label %logic.from8461 -logic.from8461: - br i1 %t7, label %logic.rhs8462, label %logic.end8463 -logic.rhs8462: + br label %logic.from8465 +logic.from8465: + br i1 %t7, label %logic.rhs8466, label %logic.end8467 +logic.rhs8466: %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic8464, label %ok8465 -panic8464: + br i1 %t9, label %panic8468, label %ok8469 +panic8468: call void @finch_panic(ptr @.str.5477, i64 5125, ptr @.str.5478) unreachable -ok8465: +ok8469: %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 41 %t11 = load { ptr, i64, i64 }, ptr %t10 %t12 = load %S.ast.Node, ptr %a3 @@ -86227,13 +86253,13 @@ ok8465: %t17 = icmp eq i32 %t16, 0 store { ptr, i64, i64 } %t13, ptr %a18 call void @finch_str_drop(ptr %a18) - br label %logic.rend8466 -logic.rend8466: - br label %logic.end8463 -logic.end8463: - %t19 = phi i1 [ false, %logic.from8461 ], [ %t17, %logic.rend8466 ] - br i1 %t19, label %then8467, label %endif8469 -then8467: + br label %logic.rend8470 +logic.rend8470: + br label %logic.end8467 +logic.end8467: + %t19 = phi i1 [ false, %logic.from8465 ], [ %t17, %logic.rend8470 ] + br i1 %t19, label %then8471, label %endif8473 +then8471: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Node, ptr %a3 %t22 = load { ptr, i64, i64 }, ptr %a5 @@ -86289,8 +86315,8 @@ then8467: call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } %t64) store { ptr, i64, i64 } %t64, ptr %a65 call void @finch_str_drop(ptr %a65) - br label %endif8469 -endif8469: + br label %endif8473 +endif8473: %t66 = load ptr, ptr %a1 %t67 = load %S.gen.FnSig, ptr %a2 %t68 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t66, %S.gen.FnSig %t67) @@ -86341,8 +86367,8 @@ endif8469: store { ptr, i64, i64 } %t105, ptr %a106 %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 %t108 = load i1, ptr %t107 - br i1 %t108, label %then8470, label %endif8472 -then8470: + br i1 %t108, label %then8474, label %endif8476 +then8474: %t109 = load ptr, ptr %a1 %t110 = load { ptr, i64, i64 }, ptr %a106 %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t109, { ptr, i64, i64 } %t110) @@ -86397,11 +86423,11 @@ then8470: call void @finch_str_drop(ptr %a153) %t154 = load ptr, ptr %a1 %t155 = icmp eq ptr %t154, null - br i1 %t155, label %panic8473, label %ok8474 -panic8473: + br i1 %t155, label %panic8477, label %ok8478 +panic8477: call void @finch_panic(ptr @.str.5494, i64 5132, ptr @.str.5495) unreachable -ok8474: +ok8478: %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 42 %t157 = load { ptr, i64, i64 }, ptr %t156 store { ptr, i64, i64 } %t152, ptr %t156 @@ -86441,11 +86467,11 @@ ok8474: call void @finch_str_drop(ptr %a185) %t186 = load ptr, ptr %a1 %t187 = icmp eq ptr %t186, null - br i1 %t187, label %panic8475, label %ok8476 -panic8475: + br i1 %t187, label %panic8479, label %ok8480 +panic8479: call void @finch_panic(ptr @.str.5499, i64 5133, ptr @.str.5500) unreachable -ok8476: +ok8480: %t188 = getelementptr inbounds %S.gen.Gen, ptr %t186, i32 0, i32 43 %t189 = load { ptr, i64, i64 }, ptr %t188 store { ptr, i64, i64 } %t184, ptr %t188 @@ -86458,8 +86484,8 @@ ok8476: store { ptr, i64, i64 } { ptr @.str.5501, i64 4, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 - br i1 %t197, label %then8477, label %endif8479 -then8477: + br i1 %t197, label %then8481, label %endif8483 +then8481: %t198 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t199 = load %S.ast.Type, ptr %t198 store %S.ast.Type %t199, ptr %a200 @@ -86470,7 +86496,7 @@ then8477: call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t203 -endif8479: +endif8483: %t204 = load ptr, ptr %a1 %t205 = load ptr, ptr %a1 %t206 = load %S.gen.FnSig, ptr %a2 @@ -86519,7 +86545,7 @@ endif8479: call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t242 -endif8472: +endif8476: %t243 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i32 0, i32 0 %t245 = load { ptr, i64, i64 }, ptr %t244 @@ -86527,8 +86553,8 @@ endif8472: store { ptr, i64, i64 } { ptr @.str.5505, i64 4, i64 0 }, ptr %a247 %t248 = call i32 @finch_str_eq(ptr %a246, ptr %a247) %t249 = icmp ne i32 %t248, 0 - br i1 %t249, label %then8480, label %endif8482 -then8480: + br i1 %t249, label %then8484, label %endif8486 +then8484: %t250 = load ptr, ptr %a1 %t251 = load { ptr, i64, i64 }, ptr %a106 call void @finch.gen.emit(ptr %t250, { ptr, i64, i64 } %t251) @@ -86540,7 +86566,7 @@ then8480: %t257 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t256, 1 call void @finch_str_drop(ptr %a106) ret %S.gen.Val %t257 -endif8482: +endif8486: %t258 = load ptr, ptr %a1 %t259 = load { ptr, i64, i64 }, ptr %a106 %t260 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t259) @@ -86762,21 +86788,21 @@ entry: store %S.ast.Node %p4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic8483, label %ok8484 -panic8483: + br i1 %t7, label %panic8487, label %ok8488 +panic8487: call void @finch_panic(ptr @.str.5506, i64 5147, ptr @.str.5507) unreachable -ok8484: +ok8488: %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 %t9 = load i64, ptr %a2 %t10 = load { ptr, i64, i64 }, ptr %t8 %t11 = extractvalue { ptr, i64, i64 } %t10, 1 %t12 = icmp uge i64 %t9, %t11 - br i1 %t12, label %range8485, label %inrange8486 -range8485: + br i1 %t12, label %range8489, label %inrange8490 +range8489: call void @finch_panic_index(ptr @.str.5508, i64 5147, i64 %t9, i64 %t11) unreachable -inrange8486: +inrange8490: %t13 = extractvalue { ptr, i64, i64 } %t10, 0 %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 %t15 = load %S.gen.StructDef, ptr %t14 @@ -86788,26 +86814,26 @@ inrange8486: %t21 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 %t22 = load i1, ptr %t21 %t23 = xor i1 %t22, true - br i1 %t23, label %then8487, label %endif8489 -then8487: + br i1 %t23, label %then8491, label %endif8493 +then8491: %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic8490, label %ok8491 -panic8490: + br i1 %t25, label %panic8494, label %ok8495 +panic8494: call void @finch_panic(ptr @.str.5509, i64 5150, ptr @.str.5510) unreachable -ok8491: +ok8495: %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 13 %t28 = load i64, ptr %t27 %t29 = load { ptr, i64, i64 }, ptr %t26 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 - br i1 %t31, label %range8492, label %inrange8493 -range8492: + br i1 %t31, label %range8496, label %inrange8497 +range8496: call void @finch_panic_index(ptr @.str.5511, i64 5150, i64 %t28, i64 %t30) unreachable -inrange8493: +inrange8497: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 @@ -86816,11 +86842,11 @@ inrange8493: %t37 = load { ptr, i64, i64 }, ptr %t34 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 %t36, %t38 - br i1 %t39, label %range8494, label %inrange8495 -range8494: + br i1 %t39, label %range8498, label %inrange8499 +range8498: call void @finch_panic_index(ptr @.str.5512, i64 5150, i64 %t36, i64 %t38) unreachable -inrange8495: +inrange8499: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 %t42 = load %S.ast.Node, ptr %t41 @@ -86831,8 +86857,8 @@ inrange8495: store %S.ast.Node %t45, ptr %a20 store %S.ast.Node %t46, ptr %a47 call void @finch.drop.S_ast_Node(ptr %a47) - br label %endif8489 -endif8489: + br label %endif8493 +endif8493: %t48 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.5513, i64 6, i64 0 }, 0 %t49 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 %t50 = load { ptr, i64, i64 }, ptr %t49 @@ -86854,40 +86880,40 @@ endif8489: %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t67 = load i64, ptr %t66 %t68 = icmp sgt i64 %t67, 0 - br label %logic.from8496 -logic.from8496: - br i1 %t68, label %logic.rhs8497, label %logic.end8498 -logic.rhs8497: + br label %logic.from8500 +logic.from8500: + br i1 %t68, label %logic.rhs8501, label %logic.end8502 +logic.rhs8501: %t69 = load { ptr, i64, i64 }, ptr %a4 %t70 = extractvalue { ptr, i64, i64 } %t69, 1 %t71 = icmp uge i64 0, %t70 - br i1 %t71, label %range8499, label %inrange8500 -range8499: + br i1 %t71, label %range8503, label %inrange8504 +range8503: call void @finch_panic_index(ptr @.str.5514, i64 5154, i64 0, i64 %t70) unreachable -inrange8500: +inrange8504: %t72 = extractvalue { ptr, i64, i64 } %t69, 0 %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i64 0 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = icmp sgt i64 %t75, 0 - br label %logic.rend8501 -logic.rend8501: - br label %logic.end8498 -logic.end8498: - %t77 = phi i1 [ false, %logic.from8496 ], [ %t76, %logic.rend8501 ] + br label %logic.rend8505 +logic.rend8505: + br label %logic.end8502 +logic.end8502: + %t77 = phi i1 [ false, %logic.from8500 ], [ %t76, %logic.rend8505 ] store i1 %t77, ptr %a78 store { ptr, i64, i64 } zeroinitializer, ptr %a79 %t80 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i32 0, i32 1 %t82 = load i64, ptr %t81 store i64 0, ptr %a83 - br label %for.cond8502 -for.cond8502: + br label %for.cond8506 +for.cond8506: %t84 = load i64, ptr %a83 %t85 = icmp slt i64 %t84, %t82 - br i1 %t85, label %for.body8503, label %for.end8505 -for.body8503: + br i1 %t85, label %for.body8507, label %for.end8509 +for.body8507: %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %a79, i32 0, i32 1 %t87 = load i64, ptr %t86 %t88 = add i64 %t87, 1 @@ -86896,31 +86922,31 @@ for.body8503: %t90 = getelementptr inbounds i64, ptr %t89, i64 %t87 store i64 -1, ptr %t90 store i64 %t88, ptr %t86 - br label %for.step8504 -for.step8504: + br label %for.step8508 +for.step8508: %t91 = load i64, ptr %a83 %t92 = add i64 %t91, 1 store i64 %t92, ptr %a83 - br label %for.cond8502 -for.end8505: + br label %for.cond8506 +for.end8509: %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t94 = load i64, ptr %t93 store i64 0, ptr %a95 - br label %for.cond8506 -for.cond8506: + br label %for.cond8510 +for.cond8510: %t96 = load i64, ptr %a95 %t97 = icmp slt i64 %t96, %t94 - br i1 %t97, label %for.body8507, label %for.end8509 -for.body8507: + br i1 %t97, label %for.body8511, label %for.end8513 +for.body8511: %t98 = load i64, ptr %a95 %t99 = load { ptr, i64, i64 }, ptr %a4 %t100 = extractvalue { ptr, i64, i64 } %t99, 1 %t101 = icmp uge i64 %t98, %t100 - br i1 %t101, label %range8510, label %inrange8511 -range8510: + br i1 %t101, label %range8514, label %inrange8515 +range8514: call void @finch_panic_index(ptr @.str.5515, i64 5160, i64 %t98, i64 %t100) unreachable -inrange8511: +inrange8515: %t102 = extractvalue { ptr, i64, i64 } %t99, 0 %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t98 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 @@ -86928,36 +86954,36 @@ inrange8511: %t106 = icmp sgt i64 %t105, 0 %t107 = load i1, ptr %a78 %t108 = icmp ne i1 %t106, %t107 - br i1 %t108, label %then8512, label %endif8514 -then8512: + br i1 %t108, label %then8516, label %endif8518 +then8516: %t109 = load ptr, ptr %a1 %t110 = load i64, ptr %a95 %t111 = load { ptr, i64, i64 }, ptr %a3 %t112 = extractvalue { ptr, i64, i64 } %t111, 1 %t113 = icmp uge i64 %t110, %t112 - br i1 %t113, label %range8515, label %inrange8516 -range8515: + br i1 %t113, label %range8519, label %inrange8520 +range8519: call void @finch_panic_index(ptr @.str.5516, i64 5161, i64 %t110, i64 %t112) unreachable -inrange8516: +inrange8520: %t114 = extractvalue { ptr, i64, i64 } %t111, 0 %t115 = getelementptr inbounds %S.ast.Node, ptr %t114, i64 %t110 %t116 = load %S.ast.Node, ptr %t115 call void @finch.gen.fail(ptr %t109, %S.ast.Node %t116, { ptr, i64, i64 } { ptr @.str.5517, i64 69, i64 0 }) - br label %endif8514 -endif8514: + br label %endif8518 +endif8518: %t117 = load i1, ptr %a78 %t118 = xor i1 %t117, true - br i1 %t118, label %then8517, label %endif8519 -then8517: + br i1 %t118, label %then8521, label %endif8523 +then8521: %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t120 = load i64, ptr %t119 %t121 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t121, i32 0, i32 1 %t123 = load i64, ptr %t122 %t124 = icmp ne i64 %t120, %t123 - br i1 %t124, label %then8520, label %endif8522 -then8520: + br i1 %t124, label %then8524, label %endif8526 +then8524: %t125 = load ptr, ptr %a1 %t126 = load %S.ast.Node, ptr %a5 %t127 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 @@ -87020,34 +87046,34 @@ then8520: call void @finch.gen.fail(ptr %t125, %S.ast.Node %t126, { ptr, i64, i64 } %t175) store { ptr, i64, i64 } %t175, ptr %a176 call void @finch_str_drop(ptr %a176) - br label %endif8522 -endif8522: + br label %endif8526 +endif8526: %t177 = load i64, ptr %a95 %t178 = load i64, ptr %a95 %t179 = load { ptr, i64, i64 }, ptr %a79 %t180 = extractvalue { ptr, i64, i64 } %t179, 1 %t181 = icmp uge i64 %t178, %t180 - br i1 %t181, label %range8523, label %inrange8524 -range8523: + br i1 %t181, label %range8527, label %inrange8528 +range8527: call void @finch_panic_index(ptr @.str.5522, i64 5167, i64 %t178, i64 %t180) unreachable -inrange8524: +inrange8528: %t182 = extractvalue { ptr, i64, i64 } %t179, 0 %t183 = getelementptr inbounds i64, ptr %t182, i64 %t178 store i64 %t177, ptr %t183 - br label %for.step8508 -endif8519: + br label %for.step8512 +endif8523: %t184 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i32 0, i32 1 %t186 = load i64, ptr %a95 %t187 = load { ptr, i64, i64 }, ptr %a4 %t188 = extractvalue { ptr, i64, i64 } %t187, 1 %t189 = icmp uge i64 %t186, %t188 - br i1 %t189, label %range8525, label %inrange8526 -range8525: + br i1 %t189, label %range8529, label %inrange8530 +range8529: call void @finch_panic_index(ptr @.str.5523, i64 5170, i64 %t186, i64 %t188) unreachable -inrange8526: +inrange8530: %t190 = extractvalue { ptr, i64, i64 } %t187, 0 %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i64 %t186 %t192 = load { ptr, i64, i64 }, ptr %t191 @@ -87055,43 +87081,43 @@ inrange8526: %t194 = load i64, ptr %t185 %t195 = load ptr, ptr %t184 store i64 0, ptr %a196 - br label %find.cond8527 -find.cond8527: + br label %find.cond8531 +find.cond8531: %t197 = load i64, ptr %a196 %t198 = icmp slt i64 %t197, %t194 - br i1 %t198, label %find.body8528, label %find.end8531 -find.body8528: + br i1 %t198, label %find.body8532, label %find.end8535 +find.body8532: %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t195, i64 %t197 %t200 = load { ptr, i64, i64 }, ptr %t199 store { ptr, i64, i64 } %t200, ptr %a201 store { ptr, i64, i64 } %t192, ptr %a202 %t203 = call i32 @finch_str_eq(ptr %a201, ptr %a202) %t204 = icmp ne i32 %t203, 0 - br i1 %t204, label %find.hit8529, label %find.next8530 -find.hit8529: + br i1 %t204, label %find.hit8533, label %find.next8534 +find.hit8533: store i64 %t197, ptr %a193 - br label %find.end8531 -find.next8530: + br label %find.end8535 +find.next8534: %t205 = add i64 %t197, 1 store i64 %t205, ptr %a196 - br label %find.cond8527 -find.end8531: + br label %find.cond8531 +find.end8535: %t206 = load i64, ptr %a193 store i64 %t206, ptr %a207 %t208 = load i64, ptr %a207 %t209 = icmp slt i64 %t208, 0 - br i1 %t209, label %then8532, label %endif8534 -then8532: + br i1 %t209, label %then8536, label %endif8538 +then8536: %t210 = load ptr, ptr %a1 %t211 = load i64, ptr %a95 %t212 = load { ptr, i64, i64 }, ptr %a3 %t213 = extractvalue { ptr, i64, i64 } %t212, 1 %t214 = icmp uge i64 %t211, %t213 - br i1 %t214, label %range8535, label %inrange8536 -range8535: + br i1 %t214, label %range8539, label %inrange8540 +range8539: call void @finch_panic_index(ptr @.str.5524, i64 5172, i64 %t211, i64 %t213) unreachable -inrange8536: +inrange8540: %t215 = extractvalue { ptr, i64, i64 } %t212, 0 %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 %t211 %t217 = load %S.ast.Node, ptr %t216 @@ -87105,11 +87131,11 @@ inrange8536: %t225 = load { ptr, i64, i64 }, ptr %a4 %t226 = extractvalue { ptr, i64, i64 } %t225, 1 %t227 = icmp uge i64 %t224, %t226 - br i1 %t227, label %range8537, label %inrange8538 -range8537: + br i1 %t227, label %range8541, label %inrange8542 +range8541: call void @finch_panic_index(ptr @.str.5526, i64 5172, i64 %t224, i64 %t226) unreachable -inrange8538: +inrange8542: %t228 = extractvalue { ptr, i64, i64 } %t225, 0 %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i64 %t224 %t230 = load { ptr, i64, i64 }, ptr %t229 @@ -87128,33 +87154,33 @@ inrange8538: call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t240) store { ptr, i64, i64 } %t240, ptr %a241 call void @finch_str_drop(ptr %a241) - br label %endif8534 -endif8534: + br label %endif8538 +endif8538: %t242 = load i64, ptr %a207 %t243 = load { ptr, i64, i64 }, ptr %a79 %t244 = extractvalue { ptr, i64, i64 } %t243, 1 %t245 = icmp uge i64 %t242, %t244 - br i1 %t245, label %range8539, label %inrange8540 -range8539: + br i1 %t245, label %range8543, label %inrange8544 +range8543: call void @finch_panic_index(ptr @.str.5528, i64 5174, i64 %t242, i64 %t244) unreachable -inrange8540: +inrange8544: %t246 = extractvalue { ptr, i64, i64 } %t243, 0 %t247 = getelementptr inbounds i64, ptr %t246, i64 %t242 %t248 = load i64, ptr %t247 %t249 = icmp sge i64 %t248, 0 - br i1 %t249, label %then8541, label %endif8543 -then8541: + br i1 %t249, label %then8545, label %endif8547 +then8545: %t250 = load ptr, ptr %a1 %t251 = load i64, ptr %a95 %t252 = load { ptr, i64, i64 }, ptr %a3 %t253 = extractvalue { ptr, i64, i64 } %t252, 1 %t254 = icmp uge i64 %t251, %t253 - br i1 %t254, label %range8544, label %inrange8545 -range8544: + br i1 %t254, label %range8548, label %inrange8549 +range8548: call void @finch_panic_index(ptr @.str.5529, i64 5175, i64 %t251, i64 %t253) unreachable -inrange8545: +inrange8549: %t255 = extractvalue { ptr, i64, i64 } %t252, 0 %t256 = getelementptr inbounds %S.ast.Node, ptr %t255, i64 %t251 %t257 = load %S.ast.Node, ptr %t256 @@ -87162,11 +87188,11 @@ inrange8545: %t259 = load { ptr, i64, i64 }, ptr %a4 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 %t258, %t260 - br i1 %t261, label %range8546, label %inrange8547 -range8546: + br i1 %t261, label %range8550, label %inrange8551 +range8550: call void @finch_panic_index(ptr @.str.5531, i64 5175, i64 %t258, i64 %t260) unreachable -inrange8547: +inrange8551: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 %t258 %t264 = load { ptr, i64, i64 }, ptr %t263 @@ -87183,36 +87209,36 @@ inrange8547: call void @finch.gen.fail(ptr %t250, %S.ast.Node %t257, { ptr, i64, i64 } %t273) store { ptr, i64, i64 } %t273, ptr %a274 call void @finch_str_drop(ptr %a274) - br label %endif8543 -endif8543: + br label %endif8547 +endif8547: %t275 = load i64, ptr %a95 %t276 = load i64, ptr %a207 %t277 = load { ptr, i64, i64 }, ptr %a79 %t278 = extractvalue { ptr, i64, i64 } %t277, 1 %t279 = icmp uge i64 %t276, %t278 - br i1 %t279, label %range8548, label %inrange8549 -range8548: + br i1 %t279, label %range8552, label %inrange8553 +range8552: call void @finch_panic_index(ptr @.str.5533, i64 5177, i64 %t276, i64 %t278) unreachable -inrange8549: +inrange8553: %t280 = extractvalue { ptr, i64, i64 } %t277, 0 %t281 = getelementptr inbounds i64, ptr %t280, i64 %t276 store i64 %t275, ptr %t281 - br label %for.step8508 -for.step8508: + br label %for.step8512 +for.step8512: %t282 = load i64, ptr %a95 %t283 = add i64 %t282, 1 store i64 %t283, ptr %a95 - br label %for.cond8506 -for.end8509: + br label %for.cond8510 +for.end8513: store { ptr, i64, i64 } { ptr @.str.5534, i64 15, i64 0 }, ptr %a284 %t285 = load ptr, ptr %a1 %t286 = icmp eq ptr %t285, null - br i1 %t286, label %panic8550, label %ok8551 -panic8550: + br i1 %t286, label %panic8554, label %ok8555 +panic8554: call void @finch_panic(ptr @.str.5535, i64 5180, ptr @.str.5536) unreachable -ok8551: +ok8555: %t287 = getelementptr inbounds %S.gen.Gen, ptr %t285, i32 0, i32 11 %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i32 0, i32 1 %t289 = load i64, ptr %t288 @@ -87221,22 +87247,22 @@ ok8551: %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i32 0, i32 1 %t293 = load i64, ptr %t292 store i64 0, ptr %a294 - br label %for.cond8552 -for.cond8552: + br label %for.cond8556 +for.cond8556: %t295 = load i64, ptr %a294 %t296 = icmp slt i64 %t295, %t293 - br i1 %t296, label %for.body8553, label %for.end8555 -for.body8553: + br i1 %t296, label %for.body8557, label %for.end8559 +for.body8557: %t297 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 12 %t298 = load i64, ptr %a294 %t299 = load { ptr, i64, i64 }, ptr %t297 %t300 = extractvalue { ptr, i64, i64 } %t299, 1 %t301 = icmp uge i64 %t298, %t300 - br i1 %t301, label %range8556, label %inrange8557 -range8556: + br i1 %t301, label %range8560, label %inrange8561 +range8560: call void @finch_panic_index(ptr @.str.5537, i64 5182, i64 %t298, i64 %t300) unreachable -inrange8557: +inrange8561: %t302 = extractvalue { ptr, i64, i64 } %t299, 0 %t303 = getelementptr inbounds %S.ast.Type, ptr %t302, i64 %t298 %t304 = load %S.ast.Type, ptr %t303 @@ -87249,39 +87275,39 @@ inrange8557: %t311 = load { ptr, i64, i64 }, ptr %a79 %t312 = extractvalue { ptr, i64, i64 } %t311, 1 %t313 = icmp uge i64 %t310, %t312 - br i1 %t313, label %range8558, label %inrange8559 -range8558: + br i1 %t313, label %range8562, label %inrange8563 +range8562: call void @finch_panic_index(ptr @.str.5538, i64 5184, i64 %t310, i64 %t312) unreachable -inrange8559: +inrange8563: %t314 = extractvalue { ptr, i64, i64 } %t311, 0 %t315 = getelementptr inbounds i64, ptr %t314, i64 %t310 %t316 = load i64, ptr %t315 %t317 = icmp sge i64 %t316, 0 - br i1 %t317, label %then8560, label %else8561 -then8560: + br i1 %t317, label %then8564, label %else8565 +then8564: %t318 = load ptr, ptr %a1 %t319 = load ptr, ptr %a1 %t320 = load i64, ptr %a294 %t321 = load { ptr, i64, i64 }, ptr %a79 %t322 = extractvalue { ptr, i64, i64 } %t321, 1 %t323 = icmp uge i64 %t320, %t322 - br i1 %t323, label %range8563, label %inrange8564 -range8563: + br i1 %t323, label %range8567, label %inrange8568 +range8567: call void @finch_panic_index(ptr @.str.5539, i64 5185, i64 %t320, i64 %t322) unreachable -inrange8564: +inrange8568: %t324 = extractvalue { ptr, i64, i64 } %t321, 0 %t325 = getelementptr inbounds i64, ptr %t324, i64 %t320 %t326 = load i64, ptr %t325 %t327 = load { ptr, i64, i64 }, ptr %a3 %t328 = extractvalue { ptr, i64, i64 } %t327, 1 %t329 = icmp uge i64 %t326, %t328 - br i1 %t329, label %range8565, label %inrange8566 -range8565: + br i1 %t329, label %range8569, label %inrange8570 +range8569: call void @finch_panic_index(ptr @.str.5540, i64 5185, i64 %t326, i64 %t328) unreachable -inrange8566: +inrange8570: %t330 = extractvalue { ptr, i64, i64 } %t327, 0 %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 %t332 = load %S.ast.Node, ptr %t331 @@ -87292,22 +87318,22 @@ inrange8566: %t337 = load { ptr, i64, i64 }, ptr %a79 %t338 = extractvalue { ptr, i64, i64 } %t337, 1 %t339 = icmp uge i64 %t336, %t338 - br i1 %t339, label %range8567, label %inrange8568 -range8567: + br i1 %t339, label %range8571, label %inrange8572 +range8571: call void @finch_panic_index(ptr @.str.5541, i64 5185, i64 %t336, i64 %t338) unreachable -inrange8568: +inrange8572: %t340 = extractvalue { ptr, i64, i64 } %t337, 0 %t341 = getelementptr inbounds i64, ptr %t340, i64 %t336 %t342 = load i64, ptr %t341 %t343 = load { ptr, i64, i64 }, ptr %a3 %t344 = extractvalue { ptr, i64, i64 } %t343, 1 %t345 = icmp uge i64 %t342, %t344 - br i1 %t345, label %range8569, label %inrange8570 -range8569: + br i1 %t345, label %range8573, label %inrange8574 +range8573: call void @finch_panic_index(ptr @.str.5542, i64 5185, i64 %t342, i64 %t344) unreachable -inrange8570: +inrange8574: %t346 = extractvalue { ptr, i64, i64 } %t343, 0 %t347 = getelementptr inbounds %S.ast.Node, ptr %t346, i64 %t342 %t348 = load %S.ast.Node, ptr %t347 @@ -87316,11 +87342,11 @@ inrange8570: %t351 = load { ptr, i64, i64 }, ptr %t349 %t352 = extractvalue { ptr, i64, i64 } %t351, 1 %t353 = icmp uge i64 %t350, %t352 - br i1 %t353, label %range8571, label %inrange8572 -range8571: + br i1 %t353, label %range8575, label %inrange8576 +range8575: call void @finch_panic_index(ptr @.str.5544, i64 5185, i64 %t350, i64 %t352) unreachable -inrange8572: +inrange8576: %t354 = extractvalue { ptr, i64, i64 } %t351, 0 %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i64 %t350 %t356 = load { ptr, i64, i64 }, ptr %t355 @@ -87343,45 +87369,45 @@ inrange8572: store %S.gen.Val %t366, ptr %a309 store %S.gen.Val %t369, ptr %a370 call void @finch.drop.S_gen_Val(ptr %a370) - br label %endif8562 -else8561: + br label %endif8566 +else8565: %t371 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 %t372 = load i1, ptr %t371 %t373 = xor i1 %t372, true - br label %logic.from8573 -logic.from8573: - br i1 %t373, label %logic.rhs8574, label %logic.end8575 -logic.rhs8574: + br label %logic.from8577 +logic.from8577: + br i1 %t373, label %logic.rhs8578, label %logic.end8579 +logic.rhs8578: %t374 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 %t375 = load i64, ptr %a294 %t376 = load { ptr, i64, i64 }, ptr %t374 %t377 = extractvalue { ptr, i64, i64 } %t376, 1 %t378 = icmp uge i64 %t375, %t377 - br i1 %t378, label %range8576, label %inrange8577 -range8576: + br i1 %t378, label %range8580, label %inrange8581 +range8580: call void @finch_panic_index(ptr @.str.5546, i64 5186, i64 %t375, i64 %t377) unreachable -inrange8577: +inrange8581: %t379 = extractvalue { ptr, i64, i64 } %t376, 0 %t380 = getelementptr inbounds %S.ast.Node, ptr %t379, i64 %t375 %t381 = getelementptr inbounds %S.ast.Node, ptr %t380, i32 0, i32 9 %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %t381, i32 0, i32 1 %t383 = load i64, ptr %t382 %t384 = icmp sgt i64 %t383, 0 - br label %logic.rend8578 -logic.rend8578: - br label %logic.end8575 -logic.end8575: - %t385 = phi i1 [ false, %logic.from8573 ], [ %t384, %logic.rend8578 ] - br i1 %t385, label %then8579, label %else8580 -then8579: + br label %logic.rend8582 +logic.rend8582: + br label %logic.end8579 +logic.end8579: + %t385 = phi i1 [ false, %logic.from8577 ], [ %t384, %logic.rend8582 ] + br i1 %t385, label %then8583, label %else8584 +then8583: %t386 = load ptr, ptr %a1 %t387 = icmp eq ptr %t386, null - br i1 %t387, label %panic8582, label %ok8583 -panic8582: + br i1 %t387, label %panic8586, label %ok8587 +panic8586: call void @finch_panic(ptr @.str.5547, i64 5188, ptr @.str.5548) unreachable -ok8583: +ok8587: %t388 = getelementptr inbounds %S.gen.Gen, ptr %t386, i32 0, i32 10 %t389 = load { ptr, i64, i64 }, ptr %t388 store { ptr, i64, i64 } %t389, ptr %a390 @@ -87390,11 +87416,11 @@ ok8583: store { ptr, i64, i64 } %t392, ptr %a393 %t394 = load ptr, ptr %a1 %t395 = icmp eq ptr %t394, null - br i1 %t395, label %panic8584, label %ok8585 -panic8584: + br i1 %t395, label %panic8588, label %ok8589 +panic8588: call void @finch_panic(ptr @.str.5549, i64 5189, ptr @.str.5550) unreachable -ok8585: +ok8589: %t396 = getelementptr inbounds %S.gen.Gen, ptr %t394, i32 0, i32 14 %t397 = load { ptr, i64, i64 }, ptr %t396 store { ptr, i64, i64 } %t397, ptr %a398 @@ -87403,11 +87429,11 @@ ok8585: store { ptr, i64, i64 } %t400, ptr %a401 %t402 = load ptr, ptr %a1 %t403 = icmp eq ptr %t402, null - br i1 %t403, label %panic8586, label %ok8587 -panic8586: + br i1 %t403, label %panic8590, label %ok8591 +panic8590: call void @finch_panic(ptr @.str.5551, i64 5190, ptr @.str.5552) unreachable -ok8587: +ok8591: %t404 = getelementptr inbounds %S.gen.Gen, ptr %t402, i32 0, i32 18 %t405 = load { ptr, i64, i64 }, ptr %t404 store { ptr, i64, i64 } %t405, ptr %a406 @@ -87416,11 +87442,11 @@ ok8587: store { ptr, i64, i64 } %t408, ptr %a409 %t410 = load ptr, ptr %a1 %t411 = icmp eq ptr %t410, null - br i1 %t411, label %panic8588, label %ok8589 -panic8588: + br i1 %t411, label %panic8592, label %ok8593 +panic8592: call void @finch_panic(ptr @.str.5553, i64 5191, ptr @.str.5554) unreachable -ok8589: +ok8593: %t412 = getelementptr inbounds %S.gen.Gen, ptr %t410, i32 0, i32 19 %t413 = load { ptr, i64, i64 }, ptr %t412 store { ptr, i64, i64 } %t413, ptr %a414 @@ -87431,11 +87457,11 @@ ok8589: %t419 = load { ptr, i64, i64 }, ptr %t418 %t420 = load ptr, ptr %a1 %t421 = icmp eq ptr %t420, null - br i1 %t421, label %panic8590, label %ok8591 -panic8590: + br i1 %t421, label %panic8594, label %ok8595 +panic8594: call void @finch_panic(ptr @.str.5555, i64 5192, ptr @.str.5556) unreachable -ok8591: +ok8595: %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 18 store { ptr, i64, i64 } %t419, ptr %a423 call void @finch.copy.arr_str(ptr %a424, ptr %a423) @@ -87448,11 +87474,11 @@ ok8591: %t429 = load { ptr, i64, i64 }, ptr %t428 %t430 = load ptr, ptr %a1 %t431 = icmp eq ptr %t430, null - br i1 %t431, label %panic8592, label %ok8593 -panic8592: + br i1 %t431, label %panic8596, label %ok8597 +panic8596: call void @finch_panic(ptr @.str.5557, i64 5193, ptr @.str.5558) unreachable -ok8593: +ok8597: %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 19 store { ptr, i64, i64 } %t429, ptr %a433 call void @finch.copy.arr_S_ast_Type(ptr %a434, ptr %a433) @@ -87465,11 +87491,11 @@ ok8593: %t439 = load { ptr, i64, i64 }, ptr %a438 %t440 = load ptr, ptr %a1 %t441 = icmp eq ptr %t440, null - br i1 %t441, label %panic8594, label %ok8595 -panic8594: + br i1 %t441, label %panic8598, label %ok8599 +panic8598: call void @finch_panic(ptr @.str.5559, i64 5195, ptr @.str.5560) unreachable -ok8595: +ok8599: %t442 = getelementptr inbounds %S.gen.Gen, ptr %t440, i32 0, i32 10 store { ptr, i64, i64 } %t439, ptr %a443 call void @finch.copy.arr_S_gen_Scope(ptr %a444, ptr %a443) @@ -87484,11 +87510,11 @@ ok8595: %t450 = load { ptr, i64, i64 }, ptr %t449 %t451 = load ptr, ptr %a1 %t452 = icmp eq ptr %t451, null - br i1 %t452, label %panic8596, label %ok8597 -panic8596: + br i1 %t452, label %panic8600, label %ok8601 +panic8600: call void @finch_panic(ptr @.str.5561, i64 5197, ptr @.str.5562) unreachable -ok8597: +ok8601: %t453 = getelementptr inbounds %S.gen.Gen, ptr %t451, i32 0, i32 14 store { ptr, i64, i64 } %t450, ptr %a454 call void @finch_str_copy(ptr %a455, ptr %a454) @@ -87504,22 +87530,22 @@ ok8597: %t463 = load { ptr, i64, i64 }, ptr %t461 %t464 = extractvalue { ptr, i64, i64 } %t463, 1 %t465 = icmp uge i64 %t462, %t464 - br i1 %t465, label %range8598, label %inrange8599 -range8598: + br i1 %t465, label %range8602, label %inrange8603 +range8602: call void @finch_panic_index(ptr @.str.5563, i64 5198, i64 %t462, i64 %t464) unreachable -inrange8599: +inrange8603: %t466 = extractvalue { ptr, i64, i64 } %t463, 0 %t467 = getelementptr inbounds %S.ast.Node, ptr %t466, i64 %t462 %t468 = getelementptr inbounds %S.ast.Node, ptr %t467, i32 0, i32 9 %t469 = load { ptr, i64, i64 }, ptr %t468 %t470 = extractvalue { ptr, i64, i64 } %t469, 1 %t471 = icmp uge i64 0, %t470 - br i1 %t471, label %range8600, label %inrange8601 -range8600: + br i1 %t471, label %range8604, label %inrange8605 +range8604: call void @finch_panic_index(ptr @.str.5564, i64 5198, i64 0, i64 %t470) unreachable -inrange8601: +inrange8605: %t472 = extractvalue { ptr, i64, i64 } %t469, 0 %t473 = getelementptr inbounds %S.ast.Node, ptr %t472, i64 0 %t474 = load %S.ast.Node, ptr %t473 @@ -87531,22 +87557,22 @@ inrange8601: %t480 = load { ptr, i64, i64 }, ptr %t478 %t481 = extractvalue { ptr, i64, i64 } %t480, 1 %t482 = icmp uge i64 %t479, %t481 - br i1 %t482, label %range8602, label %inrange8603 -range8602: + br i1 %t482, label %range8606, label %inrange8607 +range8606: call void @finch_panic_index(ptr @.str.5565, i64 5198, i64 %t479, i64 %t481) unreachable -inrange8603: +inrange8607: %t483 = extractvalue { ptr, i64, i64 } %t480, 0 %t484 = getelementptr inbounds %S.ast.Node, ptr %t483, i64 %t479 %t485 = getelementptr inbounds %S.ast.Node, ptr %t484, i32 0, i32 9 %t486 = load { ptr, i64, i64 }, ptr %t485 %t487 = extractvalue { ptr, i64, i64 } %t486, 1 %t488 = icmp uge i64 0, %t487 - br i1 %t488, label %range8604, label %inrange8605 -range8604: + br i1 %t488, label %range8608, label %inrange8609 +range8608: call void @finch_panic_index(ptr @.str.5566, i64 5198, i64 0, i64 %t487) unreachable -inrange8605: +inrange8609: %t489 = extractvalue { ptr, i64, i64 } %t486, 0 %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 %t491 = load %S.ast.Node, ptr %t490 @@ -87555,11 +87581,11 @@ inrange8605: %t494 = load { ptr, i64, i64 }, ptr %t492 %t495 = extractvalue { ptr, i64, i64 } %t494, 1 %t496 = icmp uge i64 %t493, %t495 - br i1 %t496, label %range8606, label %inrange8607 -range8606: + br i1 %t496, label %range8610, label %inrange8611 +range8610: call void @finch_panic_index(ptr @.str.5568, i64 5198, i64 %t493, i64 %t495) unreachable -inrange8607: +inrange8611: %t497 = extractvalue { ptr, i64, i64 } %t494, 0 %t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i64 %t493 %t499 = load { ptr, i64, i64 }, ptr %t498 @@ -87585,11 +87611,11 @@ inrange8607: %t514 = load { ptr, i64, i64 }, ptr %a401 %t515 = load ptr, ptr %a1 %t516 = icmp eq ptr %t515, null - br i1 %t516, label %panic8608, label %ok8609 -panic8608: + br i1 %t516, label %panic8612, label %ok8613 +panic8612: call void @finch_panic(ptr @.str.5570, i64 5199, ptr @.str.5571) unreachable -ok8609: +ok8613: %t517 = getelementptr inbounds %S.gen.Gen, ptr %t515, i32 0, i32 14 store { ptr, i64, i64 } %t514, ptr %a518 call void @finch_str_copy(ptr %a519, ptr %a518) @@ -87601,11 +87627,11 @@ ok8609: %t523 = load { ptr, i64, i64 }, ptr %a409 %t524 = load ptr, ptr %a1 %t525 = icmp eq ptr %t524, null - br i1 %t525, label %panic8610, label %ok8611 -panic8610: + br i1 %t525, label %panic8614, label %ok8615 +panic8614: call void @finch_panic(ptr @.str.5572, i64 5200, ptr @.str.5573) unreachable -ok8611: +ok8615: %t526 = getelementptr inbounds %S.gen.Gen, ptr %t524, i32 0, i32 18 store { ptr, i64, i64 } %t523, ptr %a527 call void @finch.copy.arr_str(ptr %a528, ptr %a527) @@ -87617,11 +87643,11 @@ ok8611: %t532 = load { ptr, i64, i64 }, ptr %a417 %t533 = load ptr, ptr %a1 %t534 = icmp eq ptr %t533, null - br i1 %t534, label %panic8612, label %ok8613 -panic8612: + br i1 %t534, label %panic8616, label %ok8617 +panic8616: call void @finch_panic(ptr @.str.5574, i64 5201, ptr @.str.5575) unreachable -ok8613: +ok8617: %t535 = getelementptr inbounds %S.gen.Gen, ptr %t533, i32 0, i32 19 store { ptr, i64, i64 } %t532, ptr %a536 call void @finch.copy.arr_S_ast_Type(ptr %a537, ptr %a536) @@ -87633,11 +87659,11 @@ ok8613: %t541 = load { ptr, i64, i64 }, ptr %a393 %t542 = load ptr, ptr %a1 %t543 = icmp eq ptr %t542, null - br i1 %t543, label %panic8614, label %ok8615 -panic8614: + br i1 %t543, label %panic8618, label %ok8619 +panic8618: call void @finch_panic(ptr @.str.5576, i64 5202, ptr @.str.5577) unreachable -ok8615: +ok8619: %t544 = getelementptr inbounds %S.gen.Gen, ptr %t542, i32 0, i32 10 store { ptr, i64, i64 } %t541, ptr %a545 call void @finch.copy.arr_S_gen_Scope(ptr %a546, ptr %a545) @@ -87651,14 +87677,14 @@ ok8615: call void @finch.drop.arr_str(ptr %a409) call void @finch_str_drop(ptr %a401) call void @finch.drop.arr_S_gen_Scope(ptr %a393) - br label %endif8581 -else8580: + br label %endif8585 +else8584: call void @finch.drop.S_gen_Val(ptr %a309) call void @finch.drop.S_ast_Type(ptr %a308) - br label %for.step8554 -endif8581: - br label %endif8562 -endif8562: + br label %for.step8558 +endif8585: + br label %endif8566 +endif8566: %t550 = load ptr, ptr %a1 %t551 = load %S.gen.Val, ptr %a309 %t552 = call { ptr, i64, i64 } @finch.gen.own(ptr %t550, %S.gen.Val %t551) @@ -87738,11 +87764,11 @@ endif8562: %t616 = load { ptr, i64, i64 }, ptr %t614 %t617 = extractvalue { ptr, i64, i64 } %t616, 1 %t618 = icmp uge i64 %t615, %t617 - br i1 %t618, label %range8616, label %inrange8617 -range8616: + br i1 %t618, label %range8620, label %inrange8621 +range8620: call void @finch_panic_index(ptr @.str.5583, i64 5208, i64 %t615, i64 %t617) unreachable -inrange8617: +inrange8621: %t619 = extractvalue { ptr, i64, i64 } %t616, 0 %t620 = getelementptr inbounds i64, ptr %t619, i64 %t615 %t621 = load i64, ptr %t620 @@ -87766,13 +87792,13 @@ inrange8617: call void @finch_str_drop(ptr %a553) call void @finch.drop.S_gen_Val(ptr %a309) call void @finch.drop.S_ast_Type(ptr %a308) - br label %for.step8554 -for.step8554: + br label %for.step8558 +for.step8558: %t634 = load i64, ptr %a294 %t635 = add i64 %t634, 1 store i64 %t635, ptr %a294 - br label %for.cond8552 -for.end8555: + br label %for.cond8556 +for.end8559: %t636 = load ptr, ptr %a1 %t637 = load i64, ptr %a290 call void @finch.gen.heldEnd(ptr %t636, i64 %t637) @@ -87811,18 +87837,18 @@ entry: store { ptr, i64, i64 } %p2, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic8618, label %ok8619 -panic8618: + br i1 %t5, label %panic8622, label %ok8623 +panic8622: call void @finch_panic(ptr @.str.5584, i64 5218, ptr @.str.5585) unreachable -ok8619: +ok8623: %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 %t7 = load i1, ptr %t6 %t8 = xor i1 %t7, true - br i1 %t8, label %then8620, label %endif8622 -then8620: + br i1 %t8, label %then8624, label %endif8626 +then8624: ret void -endif8622: +endif8626: %t9 = load { ptr, i64, i64 }, ptr %a3 %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t11 = load { ptr, i64, i64 }, ptr %t10 @@ -87832,8 +87858,8 @@ endif8622: %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp sgt i64 %t16, 0 - br i1 %t17, label %then8623, label %endif8625 -then8623: + br i1 %t17, label %then8627, label %endif8629 +then8627: %t18 = load ptr, ptr %a1 %t19 = load %S.ast.Node, ptr %a2 %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 @@ -87847,8 +87873,8 @@ then8623: call void @finch.gen.noteRef(ptr %t18, %S.ast.Node %t19, i64 %t22, i64 %t25, { ptr, i64, i64 } %t27, { ptr, i64, i64 } { ptr @.str.5586, i64 0, i64 0 }, i64 0, i64 0) store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_drop(ptr %a28) - br label %endif8625 -endif8625: + br label %endif8629 +endif8629: call void @finch.drop.S_docs_Doc(ptr %a13) ret void } @@ -88165,11 +88191,11 @@ entry: %t4 = load { ptr, i64, i64 }, ptr %t3 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 0, %t5 - br i1 %t6, label %range8626, label %inrange8627 -range8626: + br i1 %t6, label %range8630, label %inrange8631 +range8630: call void @finch_panic_index(ptr @.str.5587, i64 5228, i64 0, i64 %t5) unreachable -inrange8627: +inrange8631: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 %t9 = load %S.ast.Node, ptr %t8 @@ -88183,30 +88209,30 @@ inrange8627: store i64 %t16, ptr %a17 %t18 = load i64, ptr %a17 %t19 = icmp sge i64 %t18, 0 - br i1 %t19, label %then8628, label %endif8630 -then8628: + br i1 %t19, label %then8632, label %endif8634 +then8632: store { ptr, i64, i64 } zeroinitializer, ptr %a20 %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 store i64 1, ptr %a24 - br label %for.cond8631 -for.cond8631: + br label %for.cond8635 +for.cond8635: %t25 = load i64, ptr %a24 %t26 = icmp slt i64 %t25, %t23 - br i1 %t26, label %for.body8632, label %for.end8634 -for.body8632: + br i1 %t26, label %for.body8636, label %for.end8638 +for.body8636: %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t29 = load i64, ptr %a24 %t30 = load { ptr, i64, i64 }, ptr %t28 %t31 = extractvalue { ptr, i64, i64 } %t30, 1 %t32 = icmp uge i64 %t29, %t31 - br i1 %t32, label %range8635, label %inrange8636 -range8635: + br i1 %t32, label %range8639, label %inrange8640 +range8639: call void @finch_panic_index(ptr @.str.5588, i64 5233, i64 %t29, i64 %t31) unreachable -inrange8636: +inrange8640: %t33 = extractvalue { ptr, i64, i64 } %t30, 0 %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t29 %t35 = load %S.ast.Node, ptr %t34 @@ -88220,13 +88246,13 @@ inrange8636: %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 %t39 store %S.ast.Node %t38, ptr %t42 store i64 %t40, ptr %t27 - br label %for.step8633 -for.step8633: + br label %for.step8637 +for.step8637: %t43 = load i64, ptr %a24 %t44 = add i64 %t43, 1 store i64 %t44, ptr %a24 - br label %for.cond8631 -for.end8634: + br label %for.cond8635 +for.end8638: %t45 = load ptr, ptr %a1 %t46 = load i64, ptr %a17 %t47 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88237,29 +88263,29 @@ for.end8634: call void @finch.drop.arr_S_ast_Node(ptr %a20) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t51 -endif8630: +endif8634: %t52 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 %t53 = load { ptr, i64, i64 }, ptr %t52 store { ptr, i64, i64 } %t53, ptr %a54 store { ptr, i64, i64 } { ptr @.str.5589, i64 3, i64 0 }, ptr %a55 %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) %t57 = icmp ne i32 %t56, 0 - br label %logic.from8637 -logic.from8637: - br i1 %t57, label %logic.rhs8638, label %logic.end8639 -logic.rhs8638: + br label %logic.from8641 +logic.from8641: + br i1 %t57, label %logic.rhs8642, label %logic.end8643 +logic.rhs8642: %t58 = load ptr, ptr %a1 %t59 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 %t60 = load { ptr, i64, i64 }, ptr %t59 %t61 = call i64 @finch.gen.lookup(ptr %t58, { ptr, i64, i64 } %t60) %t62 = icmp slt i64 %t61, 0 - br label %logic.rend8640 -logic.rend8640: - br label %logic.end8639 -logic.end8639: - %t63 = phi i1 [ false, %logic.from8637 ], [ %t62, %logic.rend8640 ] - br i1 %t63, label %then8641, label %endif8643 -then8641: + br label %logic.rend8644 +logic.rend8644: + br label %logic.end8643 +logic.end8643: + %t63 = phi i1 [ false, %logic.from8641 ], [ %t62, %logic.rend8644 ] + br i1 %t63, label %then8645, label %endif8647 +then8645: %t64 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 %t65 = load { ptr, i64, i64 }, ptr %t64 store { ptr, i64, i64 } %t65, ptr %a66 @@ -88270,8 +88296,8 @@ then8641: %t71 = load { ptr, i64, i64 }, ptr %a69 %t72 = call i1 @finch.gen.imports(ptr %t70, { ptr, i64, i64 } %t71) %t73 = xor i1 %t72, true - br i1 %t73, label %then8644, label %endif8646 -then8644: + br i1 %t73, label %then8648, label %endif8650 +then8648: %t74 = load ptr, ptr %a1 %t75 = load %S.ast.Node, ptr %a13 %t76 = load { ptr, i64, i64 }, ptr %a69 @@ -88301,8 +88327,8 @@ then8644: call void @finch.gen.fail(ptr %t74, %S.ast.Node %t75, { ptr, i64, i64 } %t96) store { ptr, i64, i64 } %t96, ptr %a97 call void @finch_str_drop(ptr %a97) - br label %endif8646 -endif8646: + br label %endif8650 +endif8650: %t98 = load ptr, ptr %a1 %t99 = load { ptr, i64, i64 }, ptr %a69 %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88311,8 +88337,8 @@ endif8646: store i64 %t102, ptr %a103 %t104 = load i64, ptr %a103 %t105 = icmp sge i64 %t104, 0 - br i1 %t105, label %then8647, label %endif8649 -then8647: + br i1 %t105, label %then8651, label %endif8653 +then8651: %t106 = load ptr, ptr %a1 %t107 = load i64, ptr %a103 %t108 = load %S.ast.Node, ptr %a2 @@ -88335,7 +88361,7 @@ then8647: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t121 -endif8649: +endif8653: %t123 = load ptr, ptr %a1 %t124 = load { ptr, i64, i64 }, ptr %a69 %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88344,8 +88370,8 @@ endif8649: store i64 %t127, ptr %a128 %t129 = load i64, ptr %a128 %t130 = icmp sge i64 %t129, 0 - br i1 %t130, label %then8650, label %endif8652 -then8650: + br i1 %t130, label %then8654, label %endif8656 +then8654: %t131 = load ptr, ptr %a1 %t132 = load %S.ast.Node, ptr %a2 %t133 = load i64, ptr %a128 @@ -88368,7 +88394,7 @@ then8650: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t146 -endif8652: +endif8656: %t148 = load ptr, ptr %a1 %t149 = load { ptr, i64, i64 }, ptr %a69 %t150 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88377,8 +88403,8 @@ endif8652: store i64 %t152, ptr %a153 %t154 = load i64, ptr %a153 %t155 = icmp sge i64 %t154, 0 - br i1 %t155, label %then8653, label %endif8655 -then8653: + br i1 %t155, label %then8657, label %endif8659 +then8657: %t156 = load ptr, ptr %a1 %t157 = load %S.ast.Node, ptr %a2 %t158 = load i64, ptr %a153 @@ -88386,7 +88412,7 @@ then8653: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t159 -endif8655: +endif8659: %t160 = load ptr, ptr %a1 %t161 = load { ptr, i64, i64 }, ptr %a69 %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88395,30 +88421,30 @@ endif8655: store i64 %t164, ptr %a165 %t166 = load i64, ptr %a165 %t167 = icmp sge i64 %t166, 0 - br i1 %t167, label %then8656, label %endif8658 -then8656: + br i1 %t167, label %then8660, label %endif8662 +then8660: store { ptr, i64, i64 } zeroinitializer, ptr %a168 %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 %t171 = load i64, ptr %t170 store i64 1, ptr %a172 - br label %for.cond8659 -for.cond8659: + br label %for.cond8663 +for.cond8663: %t173 = load i64, ptr %a172 %t174 = icmp slt i64 %t173, %t171 - br i1 %t174, label %for.body8660, label %for.end8662 -for.body8660: + br i1 %t174, label %for.body8664, label %for.end8666 +for.body8664: %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 %t176 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t177 = load i64, ptr %a172 %t178 = load { ptr, i64, i64 }, ptr %t176 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 %t177, %t179 - br i1 %t180, label %range8663, label %inrange8664 -range8663: + br i1 %t180, label %range8667, label %inrange8668 +range8667: call void @finch_panic_index(ptr @.str.5598, i64 5258, i64 %t177, i64 %t179) unreachable -inrange8664: +inrange8668: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds %S.ast.Node, ptr %t181, i64 %t177 %t183 = load %S.ast.Node, ptr %t182 @@ -88432,13 +88458,13 @@ inrange8664: %t190 = getelementptr inbounds %S.ast.Node, ptr %t189, i64 %t187 store %S.ast.Node %t186, ptr %t190 store i64 %t188, ptr %t175 - br label %for.step8661 -for.step8661: + br label %for.step8665 +for.step8665: %t191 = load i64, ptr %a172 %t192 = add i64 %t191, 1 store i64 %t192, ptr %a172 - br label %for.cond8659 -for.end8662: + br label %for.cond8663 +for.end8666: %t193 = load ptr, ptr %a1 %t194 = load i64, ptr %a165 %t195 = load { ptr, i64, i64 }, ptr %a168 @@ -88450,7 +88476,7 @@ for.end8662: call void @finch_str_drop(ptr %a69) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t199 -endif8658: +endif8662: %t200 = load ptr, ptr %a1 %t201 = load %S.ast.Node, ptr %a2 %t202 = load { ptr, i64, i64 }, ptr %a69 @@ -88482,8 +88508,8 @@ endif8658: store { ptr, i64, i64 } %t223, ptr %a224 call void @finch_str_drop(ptr %a224) call void @finch_str_drop(ptr %a69) - br label %endif8643 -endif8643: + br label %endif8647 +endif8647: %t225 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t226 = call ptr @finch_alloc(i64 %t225) %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 0 @@ -88515,38 +88541,38 @@ endif8643: %t245 = load i64, ptr %t241 %t246 = load ptr, ptr %a238 store i64 0, ptr %a247 - br label %find.cond8665 -find.cond8665: + br label %find.cond8669 +find.cond8669: %t248 = load i64, ptr %a247 %t249 = icmp slt i64 %t248, %t245 - br i1 %t249, label %find.body8666, label %find.end8669 -find.body8666: + br i1 %t249, label %find.body8670, label %find.end8673 +find.body8670: %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t248 %t251 = load { ptr, i64, i64 }, ptr %t250 store { ptr, i64, i64 } %t251, ptr %a252 store { ptr, i64, i64 } %t243, ptr %a253 %t254 = call i32 @finch_str_eq(ptr %a252, ptr %a253) %t255 = icmp ne i32 %t254, 0 - br i1 %t255, label %find.hit8667, label %find.next8668 -find.hit8667: + br i1 %t255, label %find.hit8671, label %find.next8672 +find.hit8671: store i64 %t248, ptr %a244 - br label %find.end8669 -find.next8668: + br label %find.end8673 +find.next8672: %t256 = add i64 %t248, 1 store i64 %t256, ptr %a247 - br label %find.cond8665 -find.end8669: + br label %find.cond8669 +find.end8673: %t257 = load i64, ptr %a244 %t258 = icmp sge i64 %t257, 0 %t259 = call %S.gen.Ref @finch.gen.ref(ptr %t239, %S.ast.Node %t240, i1 %t258) store %S.gen.Ref %t259, ptr %a260 %t261 = load ptr, ptr %a1 %t262 = icmp eq ptr %t261, null - br i1 %t262, label %panic8670, label %ok8671 -panic8670: + br i1 %t262, label %panic8674, label %ok8675 +panic8674: call void @finch_panic(ptr @.str.5610, i64 5266, ptr @.str.5611) unreachable -ok8671: +ok8675: %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 11 %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 %t265 = load i64, ptr %t264 @@ -88560,8 +88586,8 @@ ok8671: store %S.ast.Type %t272, ptr %a273 %t274 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t275 = load i1, ptr %t274 - br i1 %t275, label %then8672, label %endif8674 -then8672: + br i1 %t275, label %then8676, label %endif8678 +then8676: %t276 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t277 = getelementptr inbounds %S.gen.Place, ptr %t276, i32 0, i32 1 %t278 = load %S.ast.Type, ptr %t277 @@ -88572,21 +88598,21 @@ then8672: store %S.ast.Type %t281, ptr %a273 store %S.ast.Type %t282, ptr %a283 call void @finch.drop.S_ast_Type(ptr %a283) - br label %endif8674 -endif8674: + br label %endif8678 +endif8678: %t284 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t285 = load { ptr, i64, i64 }, ptr %t284 store { ptr, i64, i64 } %t285, ptr %a286 store { ptr, i64, i64 } { ptr @.str.5612, i64 5, i64 0 }, ptr %a287 %t288 = call i32 @finch_str_eq(ptr %a286, ptr %a287) %t289 = icmp ne i32 %t288, 0 - br i1 %t289, label %then8675, label %endif8677 -then8675: + br i1 %t289, label %then8679, label %endif8681 +then8679: store { ptr, i64, i64 } { ptr @.str.5613, i64 0, i64 0 }, ptr %a290 %t291 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t292 = load i1, ptr %t291 - br i1 %t292, label %then8678, label %else8679 -then8678: + br i1 %t292, label %then8682, label %else8683 +then8682: %t293 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t294 = getelementptr inbounds %S.gen.Place, ptr %t293, i32 0, i32 0 %t295 = load { ptr, i64, i64 }, ptr %t294 @@ -88597,8 +88623,8 @@ then8678: store { ptr, i64, i64 } %t298, ptr %a290 store { ptr, i64, i64 } %t299, ptr %a300 call void @finch_str_drop(ptr %a300) - br label %endif8680 -else8679: + br label %endif8684 +else8683: %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 %t302 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t303 = load { ptr, i64, i64 }, ptr %t302 @@ -88606,31 +88632,31 @@ else8679: %t305 = load i64, ptr %t301 %t306 = load ptr, ptr %a238 store i64 0, ptr %a307 - br label %find.cond8681 -find.cond8681: + br label %find.cond8685 +find.cond8685: %t308 = load i64, ptr %a307 %t309 = icmp slt i64 %t308, %t305 - br i1 %t309, label %find.body8682, label %find.end8685 -find.body8682: + br i1 %t309, label %find.body8686, label %find.end8689 +find.body8686: %t310 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 %t308 %t311 = load { ptr, i64, i64 }, ptr %t310 store { ptr, i64, i64 } %t311, ptr %a312 store { ptr, i64, i64 } %t303, ptr %a313 %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) %t315 = icmp ne i32 %t314, 0 - br i1 %t315, label %find.hit8683, label %find.next8684 -find.hit8683: + br i1 %t315, label %find.hit8687, label %find.next8688 +find.hit8687: store i64 %t308, ptr %a304 - br label %find.end8685 -find.next8684: + br label %find.end8689 +find.next8688: %t316 = add i64 %t308, 1 store i64 %t316, ptr %a307 - br label %find.cond8681 -find.end8685: + br label %find.cond8685 +find.end8689: %t317 = load i64, ptr %a304 %t318 = icmp sge i64 %t317, 0 - br i1 %t318, label %then8686, label %endif8688 -then8686: + br i1 %t318, label %then8690, label %endif8692 +then8690: %t319 = load ptr, ptr %a1 %t320 = load %S.ast.Node, ptr %a2 %t321 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88642,8 +88668,8 @@ then8686: call void @finch.gen.fail(ptr %t319, %S.ast.Node %t320, { ptr, i64, i64 } %t326) store { ptr, i64, i64 } %t326, ptr %a327 call void @finch_str_drop(ptr %a327) - br label %endif8688 -endif8688: + br label %endif8692 +endif8692: %t328 = load ptr, ptr %a1 %t329 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t330 = load %S.gen.Val, ptr %t329 @@ -88655,16 +88681,16 @@ endif8688: %t334 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t335 = getelementptr inbounds %S.gen.Val, ptr %t334, i32 0, i32 2 %t336 = load i1, ptr %t335 - br i1 %t336, label %then8689, label %endif8691 -then8689: + br i1 %t336, label %then8693, label %endif8695 +then8693: %t337 = load ptr, ptr %a1 %t338 = load { ptr, i64, i64 }, ptr %a290 %t339 = load %S.ast.Type, ptr %a273 call void @finch.gen.holdAddr(ptr %t337, { ptr, i64, i64 } %t338, %S.ast.Type %t339) - br label %endif8691 -endif8691: - br label %endif8680 -endif8680: + br label %endif8695 +endif8695: + br label %endif8684 +endif8684: %t340 = load ptr, ptr %a1 %t341 = load %S.ast.Node, ptr %a2 %t342 = call { ptr, i64, i64 } @finch.docs.arrayMethods() @@ -88680,26 +88706,26 @@ endif8680: %t350 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t351 = load i1, ptr %t350 %t352 = xor i1 %t351, true - br label %logic.from8692 -logic.from8692: - br i1 %t352, label %logic.rhs8693, label %logic.end8694 -logic.rhs8693: + br label %logic.from8696 +logic.from8696: + br i1 %t352, label %logic.rhs8697, label %logic.end8698 +logic.rhs8697: %t353 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t354 = getelementptr inbounds %S.gen.Val, ptr %t353, i32 0, i32 2 %t355 = load i1, ptr %t354 - br label %logic.rend8695 -logic.rend8695: - br label %logic.end8694 -logic.end8694: - %t356 = phi i1 [ false, %logic.from8692 ], [ %t355, %logic.rend8695 ] - br i1 %t356, label %then8696, label %endif8698 -then8696: + br label %logic.rend8699 +logic.rend8699: + br label %logic.end8698 +logic.end8698: + %t356 = phi i1 [ false, %logic.from8696 ], [ %t355, %logic.rend8699 ] + br i1 %t356, label %then8700, label %endif8702 +then8700: %t357 = load ptr, ptr %a1 %t358 = load { ptr, i64, i64 }, ptr %a290 %t359 = load %S.ast.Type, ptr %a273 call void @finch.gen.dropAt(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359) - br label %endif8698 -endif8698: + br label %endif8702 +endif8702: %t360 = load ptr, ptr %a1 %t361 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t360, i64 %t361) @@ -88710,15 +88736,15 @@ endif8698: call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t362 -endif8677: +endif8681: %t363 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t364 = load { ptr, i64, i64 }, ptr %t363 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.5615, i64 3, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 - br i1 %t368, label %then8699, label %endif8701 -then8699: + br i1 %t368, label %then8703, label %endif8705 +then8703: %t369 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t370 = load %S.gen.Val, ptr %t369 store %S.gen.Val %t370, ptr %a371 @@ -88727,8 +88753,8 @@ then8699: store %S.gen.Val %t373, ptr %a374 %t375 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t376 = load i1, ptr %t375 - br i1 %t376, label %then8702, label %endif8704 -then8702: + br i1 %t376, label %then8706, label %endif8708 +then8706: %t377 = load ptr, ptr %a1 %t378 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t379 = getelementptr inbounds %S.gen.Place, ptr %t378, i32 0, i32 0 @@ -88744,8 +88770,8 @@ then8702: store %S.gen.Val %t387, ptr %a374 store %S.gen.Val %t388, ptr %a389 call void @finch.drop.S_gen_Val(ptr %a389) - br label %endif8704 -endif8704: + br label %endif8708 +endif8708: %t390 = load ptr, ptr %a1 %t391 = load %S.ast.Node, ptr %a2 %t392 = call { ptr, i64, i64 } @finch.docs.strMethods() @@ -88755,13 +88781,13 @@ endif8704: %t394 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t395 = load i1, ptr %t394 %t396 = xor i1 %t395, true - br i1 %t396, label %then8705, label %endif8707 -then8705: + br i1 %t396, label %then8709, label %endif8711 +then8709: %t397 = load ptr, ptr %a1 %t398 = load %S.gen.Val, ptr %a374 call void @finch.gen.hold(ptr %t397, %S.gen.Val %t398) - br label %endif8707 -endif8707: + br label %endif8711 +endif8711: %t399 = load ptr, ptr %a1 %t400 = load %S.ast.Node, ptr %a2 %t401 = load ptr, ptr %a1 @@ -88774,13 +88800,13 @@ endif8707: %t407 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t408 = load i1, ptr %t407 %t409 = xor i1 %t408, true - br i1 %t409, label %then8708, label %endif8710 -then8708: + br i1 %t409, label %then8712, label %endif8714 +then8712: %t410 = load ptr, ptr %a1 %t411 = load %S.gen.Val, ptr %a374 call void @finch.gen.release(ptr %t410, %S.gen.Val %t411) - br label %endif8710 -endif8710: + br label %endif8714 +endif8714: %t412 = load ptr, ptr %a1 %t413 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t412, i64 %t413) @@ -88791,20 +88817,20 @@ endif8710: call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t414 -endif8701: +endif8705: %t415 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t416 = load { ptr, i64, i64 }, ptr %t415 store { ptr, i64, i64 } %t416, ptr %a417 store { ptr, i64, i64 } { ptr @.str.5617, i64 3, i64 0 }, ptr %a418 %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) %t420 = icmp ne i32 %t419, 0 - br i1 %t420, label %then8711, label %endif8713 -then8711: + br i1 %t420, label %then8715, label %endif8717 +then8715: store { ptr, i64, i64 } { ptr @.str.5618, i64 0, i64 0 }, ptr %a421 %t422 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t423 = load i1, ptr %t422 - br i1 %t423, label %then8714, label %else8715 -then8714: + br i1 %t423, label %then8718, label %else8719 +then8718: %t424 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t425 = getelementptr inbounds %S.gen.Place, ptr %t424, i32 0, i32 0 %t426 = load { ptr, i64, i64 }, ptr %t425 @@ -88815,8 +88841,8 @@ then8714: store { ptr, i64, i64 } %t429, ptr %a421 store { ptr, i64, i64 } %t430, ptr %a431 call void @finch_str_drop(ptr %a431) - br label %endif8716 -else8715: + br label %endif8720 +else8719: %t432 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 %t433 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 %t434 = load { ptr, i64, i64 }, ptr %t433 @@ -88824,31 +88850,31 @@ else8715: %t436 = load i64, ptr %t432 %t437 = load ptr, ptr %a238 store i64 0, ptr %a438 - br label %find.cond8717 -find.cond8717: + br label %find.cond8721 +find.cond8721: %t439 = load i64, ptr %a438 %t440 = icmp slt i64 %t439, %t436 - br i1 %t440, label %find.body8718, label %find.end8721 -find.body8718: + br i1 %t440, label %find.body8722, label %find.end8725 +find.body8722: %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t437, i64 %t439 %t442 = load { ptr, i64, i64 }, ptr %t441 store { ptr, i64, i64 } %t442, ptr %a443 store { ptr, i64, i64 } %t434, ptr %a444 %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) %t446 = icmp ne i32 %t445, 0 - br i1 %t446, label %find.hit8719, label %find.next8720 -find.hit8719: + br i1 %t446, label %find.hit8723, label %find.next8724 +find.hit8723: store i64 %t439, ptr %a435 - br label %find.end8721 -find.next8720: + br label %find.end8725 +find.next8724: %t447 = add i64 %t439, 1 store i64 %t447, ptr %a438 - br label %find.cond8717 -find.end8721: + br label %find.cond8721 +find.end8725: %t448 = load i64, ptr %a435 %t449 = icmp sge i64 %t448, 0 - br i1 %t449, label %then8722, label %endif8724 -then8722: + br i1 %t449, label %then8726, label %endif8728 +then8726: %t450 = load ptr, ptr %a1 %t451 = load %S.ast.Node, ptr %a2 %t452 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -88860,8 +88886,8 @@ then8722: call void @finch.gen.fail(ptr %t450, %S.ast.Node %t451, { ptr, i64, i64 } %t457) store { ptr, i64, i64 } %t457, ptr %a458 call void @finch_str_drop(ptr %a458) - br label %endif8724 -endif8724: + br label %endif8728 +endif8728: %t459 = load ptr, ptr %a1 %t460 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t461 = load %S.gen.Val, ptr %t460 @@ -88873,16 +88899,16 @@ endif8724: %t465 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t466 = getelementptr inbounds %S.gen.Val, ptr %t465, i32 0, i32 2 %t467 = load i1, ptr %t466 - br i1 %t467, label %then8725, label %endif8727 -then8725: + br i1 %t467, label %then8729, label %endif8731 +then8729: %t468 = load ptr, ptr %a1 %t469 = load { ptr, i64, i64 }, ptr %a421 %t470 = load %S.ast.Type, ptr %a273 call void @finch.gen.holdAddr(ptr %t468, { ptr, i64, i64 } %t469, %S.ast.Type %t470) - br label %endif8727 -endif8727: - br label %endif8716 -endif8716: + br label %endif8731 +endif8731: + br label %endif8720 +endif8720: %t471 = load ptr, ptr %a1 %t472 = load %S.ast.Node, ptr %a2 %t473 = call { ptr, i64, i64 } @finch.docs.mapMethods() @@ -88898,26 +88924,26 @@ endif8716: %t481 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t482 = load i1, ptr %t481 %t483 = xor i1 %t482, true - br label %logic.from8728 -logic.from8728: - br i1 %t483, label %logic.rhs8729, label %logic.end8730 -logic.rhs8729: + br label %logic.from8732 +logic.from8732: + br i1 %t483, label %logic.rhs8733, label %logic.end8734 +logic.rhs8733: %t484 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t485 = getelementptr inbounds %S.gen.Val, ptr %t484, i32 0, i32 2 %t486 = load i1, ptr %t485 - br label %logic.rend8731 -logic.rend8731: - br label %logic.end8730 -logic.end8730: - %t487 = phi i1 [ false, %logic.from8728 ], [ %t486, %logic.rend8731 ] - br i1 %t487, label %then8732, label %endif8734 -then8732: + br label %logic.rend8735 +logic.rend8735: + br label %logic.end8734 +logic.end8734: + %t487 = phi i1 [ false, %logic.from8732 ], [ %t486, %logic.rend8735 ] + br i1 %t487, label %then8736, label %endif8738 +then8736: %t488 = load ptr, ptr %a1 %t489 = load { ptr, i64, i64 }, ptr %a421 %t490 = load %S.ast.Type, ptr %a273 call void @finch.gen.dropAt(ptr %t488, { ptr, i64, i64 } %t489, %S.ast.Type %t490) - br label %endif8734 -endif8734: + br label %endif8738 +endif8738: %t491 = load ptr, ptr %a1 %t492 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t491, i64 %t492) @@ -88928,7 +88954,7 @@ endif8734: call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t493 -endif8713: +endif8717: %t494 = load ptr, ptr %a1 %t495 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t494, i64 %t495) @@ -88945,32 +88971,32 @@ endif8713: store { ptr, i64, i64 } { ptr @.str.5621, i64 3, i64 0 }, ptr %a506 %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) %t508 = icmp ne i32 %t507, 0 - br label %logic.from8735 -logic.from8735: - br i1 %t508, label %logic.rhs8736, label %logic.end8737 -logic.rhs8736: + br label %logic.from8739 +logic.from8739: + br i1 %t508, label %logic.rhs8740, label %logic.end8741 +logic.rhs8740: %t509 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i32 0, i32 1 %t511 = load i64, ptr %t510 %t512 = icmp sgt i64 %t511, 0 - br label %logic.rend8738 -logic.rend8738: - br label %logic.end8737 -logic.end8737: - %t513 = phi i1 [ false, %logic.from8735 ], [ %t512, %logic.rend8738 ] - br label %logic.from8739 -logic.from8739: - br i1 %t513, label %logic.rhs8740, label %logic.end8741 -logic.rhs8740: + br label %logic.rend8742 +logic.rend8742: + br label %logic.end8741 +logic.end8741: + %t513 = phi i1 [ false, %logic.from8739 ], [ %t512, %logic.rend8742 ] + br label %logic.from8743 +logic.from8743: + br i1 %t513, label %logic.rhs8744, label %logic.end8745 +logic.rhs8744: %t514 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 %t515 = load { ptr, i64, i64 }, ptr %t514 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 0, %t516 - br i1 %t517, label %range8742, label %inrange8743 -range8742: + br i1 %t517, label %range8746, label %inrange8747 +range8746: call void @finch_panic_index(ptr @.str.5622, i64 5333, i64 0, i64 %t516) unreachable -inrange8743: +inrange8747: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 %t520 = getelementptr inbounds %S.ast.Type, ptr %t519, i32 0, i32 0 @@ -88979,13 +89005,13 @@ inrange8743: store { ptr, i64, i64 } { ptr @.str.5623, i64 6, i64 0 }, ptr %a523 %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) %t525 = icmp ne i32 %t524, 0 - br label %logic.rend8744 -logic.rend8744: - br label %logic.end8741 -logic.end8741: - %t526 = phi i1 [ false, %logic.from8739 ], [ %t525, %logic.rend8744 ] - br i1 %t526, label %then8745, label %else8746 -then8745: + br label %logic.rend8748 +logic.rend8748: + br label %logic.end8745 +logic.end8745: + %t526 = phi i1 [ false, %logic.from8743 ], [ %t525, %logic.rend8748 ] + br i1 %t526, label %then8749, label %else8750 +then8749: %t527 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t528 = getelementptr inbounds %S.gen.Val, ptr %t527, i32 0, i32 0 %t529 = load { ptr, i64, i64 }, ptr %t528 @@ -88995,8 +89021,8 @@ then8745: store { ptr, i64, i64 } %t532, ptr %a533 %t534 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t535 = load i1, ptr %t534 - br i1 %t535, label %then8748, label %endif8750 -then8748: + br i1 %t535, label %then8752, label %endif8754 +then8752: %t536 = load ptr, ptr %a1 %t537 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t538 = getelementptr inbounds %S.gen.Place, ptr %t537, i32 0, i32 0 @@ -89006,8 +89032,8 @@ then8748: store { ptr, i64, i64 } %t540, ptr %a533 store { ptr, i64, i64 } %t541, ptr %a542 call void @finch_str_drop(ptr %a542) - br label %endif8750 -endif8750: + br label %endif8754 +endif8754: %t543 = load ptr, ptr %a1 %t544 = load ptr, ptr %a1 %t545 = load { ptr, i64, i64 }, ptr %a533 @@ -89046,11 +89072,11 @@ endif8750: %t572 = load { ptr, i64, i64 }, ptr %t571 %t573 = extractvalue { ptr, i64, i64 } %t572, 1 %t574 = icmp uge i64 0, %t573 - br i1 %t574, label %range8751, label %inrange8752 -range8751: + br i1 %t574, label %range8755, label %inrange8756 +range8755: call void @finch_panic_index(ptr @.str.5629, i64 5339, i64 0, i64 %t573) unreachable -inrange8752: +inrange8756: %t575 = extractvalue { ptr, i64, i64 } %t572, 0 %t576 = getelementptr inbounds %S.ast.Type, ptr %t575, i64 0 %t577 = load %S.ast.Type, ptr %t576 @@ -89070,35 +89096,35 @@ inrange8752: store { ptr, i64, i64 } %t587, ptr %a588 call void @finch_str_drop(ptr %a588) call void @finch_str_drop(ptr %a533) - br label %endif8747 -else8746: + br label %endif8751 +else8750: %t589 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t590 = load { ptr, i64, i64 }, ptr %t589 store { ptr, i64, i64 } %t590, ptr %a591 store { ptr, i64, i64 } { ptr @.str.5630, i64 6, i64 0 }, ptr %a592 %t593 = call i32 @finch_str_eq(ptr %a591, ptr %a592) %t594 = icmp ne i32 %t593, 0 - br label %logic.from8753 -logic.from8753: - br i1 %t594, label %logic.end8755, label %logic.rhs8754 -logic.rhs8754: + br label %logic.from8757 +logic.from8757: + br i1 %t594, label %logic.end8759, label %logic.rhs8758 +logic.rhs8758: %t595 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t596 = load { ptr, i64, i64 }, ptr %t595 store { ptr, i64, i64 } %t596, ptr %a597 store { ptr, i64, i64 } { ptr @.str.5631, i64 4, i64 0 }, ptr %a598 %t599 = call i32 @finch_str_eq(ptr %a597, ptr %a598) %t600 = icmp ne i32 %t599, 0 - br label %logic.rend8756 -logic.rend8756: - br label %logic.end8755 -logic.end8755: - %t601 = phi i1 [ true, %logic.from8753 ], [ %t600, %logic.rend8756 ] - br i1 %t601, label %then8757, label %endif8759 -then8757: + br label %logic.rend8760 +logic.rend8760: + br label %logic.end8759 +logic.end8759: + %t601 = phi i1 [ true, %logic.from8757 ], [ %t600, %logic.rend8760 ] + br i1 %t601, label %then8761, label %endif8763 +then8761: %t602 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t603 = load i1, ptr %t602 - br i1 %t603, label %then8760, label %else8761 -then8760: + br i1 %t603, label %then8764, label %else8765 +then8764: %t604 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 %t605 = getelementptr inbounds %S.gen.Place, ptr %t604, i32 0, i32 0 %t606 = load { ptr, i64, i64 }, ptr %t605 @@ -89109,8 +89135,8 @@ then8760: store { ptr, i64, i64 } %t609, ptr %a501 store { ptr, i64, i64 } %t610, ptr %a611 call void @finch_str_drop(ptr %a611) - br label %endif8762 -else8761: + br label %endif8766 +else8765: %t612 = load ptr, ptr %a1 %t613 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t614 = load %S.gen.Val, ptr %t613 @@ -89120,35 +89146,35 @@ else8761: store { ptr, i64, i64 } %t616, ptr %a617 call void @finch_str_drop(ptr %a617) store i1 true, ptr %a502 - br label %endif8762 -endif8762: - br label %endif8759 -endif8759: - br label %endif8747 -endif8747: + br label %endif8766 +endif8766: + br label %endif8763 +endif8763: + br label %endif8751 +endif8751: %t618 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t619 = load { ptr, i64, i64 }, ptr %t618 store { ptr, i64, i64 } %t619, ptr %a620 store { ptr, i64, i64 } { ptr @.str.5632, i64 6, i64 0 }, ptr %a621 %t622 = call i32 @finch_str_eq(ptr %a620, ptr %a621) %t623 = icmp ne i32 %t622, 0 - br label %logic.from8763 -logic.from8763: - br i1 %t623, label %logic.end8765, label %logic.rhs8764 -logic.rhs8764: + br label %logic.from8767 +logic.from8767: + br i1 %t623, label %logic.end8769, label %logic.rhs8768 +logic.rhs8768: %t624 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t625 = load { ptr, i64, i64 }, ptr %t624 store { ptr, i64, i64 } %t625, ptr %a626 store { ptr, i64, i64 } { ptr @.str.5633, i64 4, i64 0 }, ptr %a627 %t628 = call i32 @finch_str_eq(ptr %a626, ptr %a627) %t629 = icmp ne i32 %t628, 0 - br label %logic.rend8766 -logic.rend8766: - br label %logic.end8765 -logic.end8765: - %t630 = phi i1 [ true, %logic.from8763 ], [ %t629, %logic.rend8766 ] - br i1 %t630, label %then8767, label %endif8769 -then8767: + br label %logic.rend8770 +logic.rend8770: + br label %logic.end8769 +logic.end8769: + %t630 = phi i1 [ true, %logic.from8767 ], [ %t629, %logic.rend8770 ] + br i1 %t630, label %then8771, label %endif8773 +then8771: %t631 = load ptr, ptr %a1 %t632 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t633 = load { ptr, i64, i64 }, ptr %t632 @@ -89160,23 +89186,23 @@ then8767: store i64 %t638, ptr %a639 %t640 = load i64, ptr %a639 %t641 = icmp slt i64 %t640, 0 - br label %logic.from8770 -logic.from8770: - br i1 %t641, label %logic.rhs8771, label %logic.end8772 -logic.rhs8771: + br label %logic.from8774 +logic.from8774: + br i1 %t641, label %logic.rhs8775, label %logic.end8776 +logic.rhs8775: %t642 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 %t643 = load { ptr, i64, i64 }, ptr %t642 store { ptr, i64, i64 } %t643, ptr %a644 store { ptr, i64, i64 } { ptr @.str.5634, i64 6, i64 0 }, ptr %a645 %t646 = call i32 @finch_str_eq(ptr %a644, ptr %a645) %t647 = icmp ne i32 %t646, 0 - br label %logic.rend8773 -logic.rend8773: - br label %logic.end8772 -logic.end8772: - %t648 = phi i1 [ false, %logic.from8770 ], [ %t647, %logic.rend8773 ] - br i1 %t648, label %then8774, label %endif8776 -then8774: + br label %logic.rend8777 +logic.rend8777: + br label %logic.end8776 +logic.end8776: + %t648 = phi i1 [ false, %logic.from8774 ], [ %t647, %logic.rend8777 ] + br i1 %t648, label %then8778, label %endif8780 +then8778: %t649 = load ptr, ptr %a1 %t650 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t651 = load { ptr, i64, i64 }, ptr %t650 @@ -89186,29 +89212,29 @@ then8774: store i64 %t654, ptr %a655 %t656 = load ptr, ptr %a1 %t657 = icmp eq ptr %t656, null - br i1 %t657, label %panic8777, label %ok8778 -panic8777: + br i1 %t657, label %panic8781, label %ok8782 +panic8781: call void @finch_panic(ptr @.str.5635, i64 5353, ptr @.str.5636) unreachable -ok8778: +ok8782: %t658 = getelementptr inbounds %S.gen.Gen, ptr %t656, i32 0, i32 16 %t659 = load i64, ptr %a655 %t660 = load { ptr, i64, i64 }, ptr %t658 %t661 = extractvalue { ptr, i64, i64 } %t660, 1 %t662 = icmp uge i64 %t659, %t661 - br i1 %t662, label %range8779, label %inrange8780 -range8779: + br i1 %t662, label %range8783, label %inrange8784 +range8783: call void @finch_panic_index(ptr @.str.5637, i64 5353, i64 %t659, i64 %t661) unreachable -inrange8780: +inrange8784: %t663 = extractvalue { ptr, i64, i64 } %t660, 0 %t664 = getelementptr inbounds %S.gen.StructDef, ptr %t663, i64 %t659 %t665 = getelementptr inbounds %S.gen.StructDef, ptr %t664, i32 0, i32 5 %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 %t667 = load i64, ptr %t666 %t668 = icmp sgt i64 %t667, 0 - br i1 %t668, label %then8781, label %endif8783 -then8781: + br i1 %t668, label %then8785, label %endif8787 +then8785: %t669 = load ptr, ptr %a1 %t670 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 %t671 = load { ptr, i64, i64 }, ptr %t670 @@ -89216,21 +89242,21 @@ then8781: %t673 = load { ptr, i64, i64 }, ptr %t672 %t674 = load ptr, ptr %a1 %t675 = icmp eq ptr %t674, null - br i1 %t675, label %panic8784, label %ok8785 -panic8784: + br i1 %t675, label %panic8788, label %ok8789 +panic8788: call void @finch_panic(ptr @.str.5638, i64 5354, ptr @.str.5639) unreachable -ok8785: +ok8789: %t676 = getelementptr inbounds %S.gen.Gen, ptr %t674, i32 0, i32 16 %t677 = load i64, ptr %a655 %t678 = load { ptr, i64, i64 }, ptr %t676 %t679 = extractvalue { ptr, i64, i64 } %t678, 1 %t680 = icmp uge i64 %t677, %t679 - br i1 %t680, label %range8786, label %inrange8787 -range8786: + br i1 %t680, label %range8790, label %inrange8791 +range8790: call void @finch_panic_index(ptr @.str.5640, i64 5354, i64 %t677, i64 %t679) unreachable -inrange8787: +inrange8791: %t681 = extractvalue { ptr, i64, i64 } %t678, 0 %t682 = getelementptr inbounds %S.gen.StructDef, ptr %t681, i64 %t677 %t683 = getelementptr inbounds %S.gen.StructDef, ptr %t682, i32 0, i32 5 @@ -89239,27 +89265,27 @@ inrange8787: store i64 %t685, ptr %a686 %t687 = load i64, ptr %a686 %t688 = icmp sge i64 %t687, 0 - br i1 %t688, label %then8788, label %endif8790 -then8788: + br i1 %t688, label %then8792, label %endif8794 +then8792: %t689 = load ptr, ptr %a1 %t690 = load i64, ptr %a686 %t691 = load ptr, ptr %a1 %t692 = icmp eq ptr %t691, null - br i1 %t692, label %panic8791, label %ok8792 -panic8791: + br i1 %t692, label %panic8795, label %ok8796 +panic8795: call void @finch_panic(ptr @.str.5641, i64 5356, ptr @.str.5642) unreachable -ok8792: +ok8796: %t693 = getelementptr inbounds %S.gen.Gen, ptr %t691, i32 0, i32 16 %t694 = load i64, ptr %a655 %t695 = load { ptr, i64, i64 }, ptr %t693 %t696 = extractvalue { ptr, i64, i64 } %t695, 1 %t697 = icmp uge i64 %t694, %t696 - br i1 %t697, label %range8793, label %inrange8794 -range8793: + br i1 %t697, label %range8797, label %inrange8798 +range8797: call void @finch_panic_index(ptr @.str.5643, i64 5356, i64 %t694, i64 %t696) unreachable -inrange8794: +inrange8798: %t698 = extractvalue { ptr, i64, i64 } %t695, 0 %t699 = getelementptr inbounds %S.gen.StructDef, ptr %t698, i64 %t694 %t700 = getelementptr inbounds %S.gen.StructDef, ptr %t699, i32 0, i32 7 @@ -89268,34 +89294,34 @@ inrange8794: %t703 = load %S.ast.Node, ptr %a2 %t704 = call i64 @finch.gen.instFn(ptr %t689, i64 %t690, { ptr, i64, i64 } %t701, %S.ast.Type %t702, %S.ast.Node %t703) store i64 %t704, ptr %a639 - br label %endif8790 -endif8790: - br label %endif8783 -endif8783: - br label %endif8776 -endif8776: + br label %endif8794 +endif8794: + br label %endif8787 +endif8787: + br label %endif8780 +endif8780: %t705 = load i64, ptr %a639 %t706 = icmp slt i64 %t705, 0 - br i1 %t706, label %then8795, label %endif8797 -then8795: + br i1 %t706, label %then8799, label %endif8801 +then8799: store { ptr, i64, i64 } zeroinitializer, ptr %a707 %t708 = load ptr, ptr %a1 %t709 = icmp eq ptr %t708, null - br i1 %t709, label %panic8798, label %ok8799 -panic8798: + br i1 %t709, label %panic8802, label %ok8803 +panic8802: call void @finch_panic(ptr @.str.5644, i64 5362, ptr @.str.5645) unreachable -ok8799: +ok8803: %t710 = getelementptr inbounds %S.gen.Gen, ptr %t708, i32 0, i32 15 store i64 0, ptr %a711 - br label %each.cond8800 -each.cond8800: + br label %each.cond8804 +each.cond8804: %t712 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i32 0, i32 1 %t713 = load i64, ptr %t712 %t714 = load i64, ptr %a711 %t715 = icmp slt i64 %t714, %t713 - br i1 %t715, label %each.body8801, label %each.end8803 -each.body8801: + br i1 %t715, label %each.body8805, label %each.end8807 +each.body8805: %t716 = load ptr, ptr %t710 %t717 = getelementptr inbounds %S.gen.FnSig, ptr %t716, i64 %t714 %t718 = load %S.gen.FnSig, ptr %t717 @@ -89308,10 +89334,10 @@ each.body8801: store { ptr, i64, i64 } %t723, ptr %a725 %t726 = call i32 @finch_str_eq(ptr %a724, ptr %a725) %t727 = icmp ne i32 %t726, 0 - br label %logic.from8804 -logic.from8804: - br i1 %t727, label %logic.rhs8805, label %logic.end8806 -logic.rhs8805: + br label %logic.from8808 +logic.from8808: + br i1 %t727, label %logic.rhs8809, label %logic.end8810 +logic.rhs8809: %t728 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 3 %t729 = load { ptr, i64, i64 }, ptr %t728 %t730 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 @@ -89320,13 +89346,13 @@ logic.rhs8805: store { ptr, i64, i64 } %t731, ptr %a733 %t734 = call i32 @finch_str_eq(ptr %a732, ptr %a733) %t735 = icmp ne i32 %t734, 0 - br label %logic.rend8807 -logic.rend8807: - br label %logic.end8806 -logic.end8806: - %t736 = phi i1 [ false, %logic.from8804 ], [ %t735, %logic.rend8807 ] - br i1 %t736, label %then8808, label %endif8810 -then8808: + br label %logic.rend8811 +logic.rend8811: + br label %logic.end8810 +logic.end8810: + %t736 = phi i1 [ false, %logic.from8808 ], [ %t735, %logic.rend8811 ] + br i1 %t736, label %then8812, label %endif8814 +then8812: %t737 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 %t738 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 1 %t739 = load { ptr, i64, i64 }, ptr %t738 @@ -89340,20 +89366,20 @@ then8808: %t746 = getelementptr inbounds { ptr, i64, i64 }, ptr %t745, i64 %t743 store { ptr, i64, i64 } %t742, ptr %t746 store i64 %t744, ptr %t737 - br label %endif8810 -endif8810: - br label %each.step8802 -each.step8802: + br label %endif8814 +endif8814: + br label %each.step8806 +each.step8806: %t747 = load i64, ptr %a711 %t748 = add i64 %t747, 1 store i64 %t748, ptr %a711 - br label %each.cond8800 -each.end8803: + br label %each.cond8804 +each.end8807: %t749 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 %t750 = load i64, ptr %t749 %t751 = icmp eq i64 %t750, 0 - br i1 %t751, label %then8811, label %endif8813 -then8811: + br i1 %t751, label %then8815, label %endif8817 +then8815: %t752 = load ptr, ptr %a1 %t753 = load %S.ast.Node, ptr %a2 %t754 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 @@ -89415,8 +89441,8 @@ then8811: call void @finch.gen.fail(ptr %t752, %S.ast.Node %t753, { ptr, i64, i64 } %t801) store { ptr, i64, i64 } %t801, ptr %a802 call void @finch_str_drop(ptr %a802) - br label %endif8813 -endif8813: + br label %endif8817 +endif8817: %t803 = load ptr, ptr %a1 %t804 = load %S.ast.Node, ptr %a2 %t805 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 @@ -89483,66 +89509,66 @@ endif8813: store { ptr, i64, i64 } %t855, ptr %a856 call void @finch_str_drop(ptr %a856) call void @finch.drop.arr_str(ptr %a707) - br label %endif8797 -endif8797: + br label %endif8801 +endif8801: %t857 = load ptr, ptr %a1 %t858 = icmp eq ptr %t857, null - br i1 %t858, label %panic8814, label %ok8815 -panic8814: + br i1 %t858, label %panic8818, label %ok8819 +panic8818: call void @finch_panic(ptr @.str.5657, i64 5373, ptr @.str.5658) unreachable -ok8815: +ok8819: %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 15 %t860 = load i64, ptr %a639 %t861 = load { ptr, i64, i64 }, ptr %t859 %t862 = extractvalue { ptr, i64, i64 } %t861, 1 %t863 = icmp uge i64 %t860, %t862 - br i1 %t863, label %range8816, label %inrange8817 -range8816: + br i1 %t863, label %range8820, label %inrange8821 +range8820: call void @finch_panic_index(ptr @.str.5659, i64 5373, i64 %t860, i64 %t862) unreachable -inrange8817: +inrange8821: %t864 = extractvalue { ptr, i64, i64 } %t861, 0 %t865 = getelementptr inbounds %S.gen.FnSig, ptr %t864, i64 %t860 %t866 = getelementptr inbounds %S.gen.FnSig, ptr %t865, i32 0, i32 10 %t867 = load i1, ptr %t866 - br label %logic.from8818 -logic.from8818: - br i1 %t867, label %logic.rhs8819, label %logic.end8820 -logic.rhs8819: + br label %logic.from8822 +logic.from8822: + br i1 %t867, label %logic.rhs8823, label %logic.end8824 +logic.rhs8823: %t868 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t869 = load { ptr, i64, i64 }, ptr %t868 store { ptr, i64, i64 } %t869, ptr %a870 store { ptr, i64, i64 } { ptr @.str.5660, i64 6, i64 0 }, ptr %a871 %t872 = call i32 @finch_str_eq(ptr %a870, ptr %a871) %t873 = icmp ne i32 %t872, 0 - br label %logic.from8821 -logic.from8821: - br i1 %t873, label %logic.end8823, label %logic.rhs8822 -logic.rhs8822: + br label %logic.from8825 +logic.from8825: + br i1 %t873, label %logic.end8827, label %logic.rhs8826 +logic.rhs8826: %t874 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 %t875 = load { ptr, i64, i64 }, ptr %t874 store { ptr, i64, i64 } %t875, ptr %a876 store { ptr, i64, i64 } { ptr @.str.5661, i64 4, i64 0 }, ptr %a877 %t878 = call i32 @finch_str_eq(ptr %a876, ptr %a877) %t879 = icmp ne i32 %t878, 0 - br label %logic.rend8824 -logic.rend8824: - br label %logic.end8823 -logic.end8823: - %t880 = phi i1 [ true, %logic.from8821 ], [ %t879, %logic.rend8824 ] - br label %logic.rend8825 -logic.rend8825: - br label %logic.end8820 -logic.end8820: - %t881 = phi i1 [ false, %logic.from8818 ], [ %t880, %logic.rend8825 ] - br i1 %t881, label %then8826, label %endif8828 -then8826: + br label %logic.rend8828 +logic.rend8828: + br label %logic.end8827 +logic.end8827: + %t880 = phi i1 [ true, %logic.from8825 ], [ %t879, %logic.rend8828 ] + br label %logic.rend8829 +logic.rend8829: + br label %logic.end8824 +logic.end8824: + %t881 = phi i1 [ false, %logic.from8822 ], [ %t880, %logic.rend8829 ] + br i1 %t881, label %then8830, label %endif8832 +then8830: %t882 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 %t883 = load i1, ptr %t882 %t884 = xor i1 %t883, true - br i1 %t884, label %then8829, label %endif8831 -then8829: + br i1 %t884, label %then8833, label %endif8835 +then8833: %t885 = load ptr, ptr %a1 %t886 = load %S.ast.Node, ptr %a2 %t887 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 @@ -89570,39 +89596,39 @@ then8829: call void @finch.gen.fail(ptr %t885, %S.ast.Node %t886, { ptr, i64, i64 } %t905) store { ptr, i64, i64 } %t905, ptr %a906 call void @finch_str_drop(ptr %a906) - br label %endif8831 -endif8831: + br label %endif8835 +endif8835: %t907 = load %S.ast.Node, ptr %a13 %t908 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t907) store { ptr, i64, i64 } %t908, ptr %a909 %t910 = getelementptr inbounds { ptr, i64, i64 }, ptr %a909, i32 0, i32 1 %t911 = load i64, ptr %t910 %t912 = icmp sgt i64 %t911, 0 - br i1 %t912, label %then8832, label %endif8834 -then8832: + br i1 %t912, label %then8836, label %endif8838 +then8836: %t913 = load ptr, ptr %a1 %t914 = load { ptr, i64, i64 }, ptr %a909 %t915 = call i64 @finch.gen.lookup(ptr %t913, { ptr, i64, i64 } %t914) store i64 %t915, ptr %a916 %t917 = load i64, ptr %a916 %t918 = icmp sge i64 %t917, 0 - br label %logic.from8835 -logic.from8835: - br i1 %t918, label %logic.rhs8836, label %logic.end8837 -logic.rhs8836: + br label %logic.from8839 +logic.from8839: + br i1 %t918, label %logic.rhs8840, label %logic.end8841 +logic.rhs8840: %t919 = load ptr, ptr %a1 %t920 = load i64, ptr %a916 %t921 = call %S.gen.Var @finch.gen.varAt(ptr %t919, i64 %t920) %t922 = extractvalue %S.gen.Var %t921, 3 store %S.gen.Var %t921, ptr %a923 call void @finch.drop.S_gen_Var(ptr %a923) - br label %logic.rend8838 -logic.rend8838: - br label %logic.end8837 -logic.end8837: - %t924 = phi i1 [ false, %logic.from8835 ], [ %t922, %logic.rend8838 ] - br i1 %t924, label %then8839, label %endif8841 -then8839: + br label %logic.rend8842 +logic.rend8842: + br label %logic.end8841 +logic.end8841: + %t924 = phi i1 [ false, %logic.from8839 ], [ %t922, %logic.rend8842 ] + br i1 %t924, label %then8843, label %endif8845 +then8843: %t925 = load ptr, ptr %a1 %t926 = load %S.ast.Node, ptr %a2 %t927 = load { ptr, i64, i64 }, ptr %a909 @@ -89619,34 +89645,34 @@ then8839: call void @finch.gen.fail(ptr %t925, %S.ast.Node %t926, { ptr, i64, i64 } %t936) store { ptr, i64, i64 } %t936, ptr %a937 call void @finch_str_drop(ptr %a937) - br label %endif8841 -endif8841: - br label %endif8834 -endif8834: + br label %endif8845 +endif8845: + br label %endif8838 +endif8838: call void @finch_str_drop(ptr %a909) - br label %endif8828 -endif8828: + br label %endif8832 +endif8832: %t938 = load i1, ptr %a502 - br label %logic.from8842 -logic.from8842: - br i1 %t938, label %logic.rhs8843, label %logic.end8844 -logic.rhs8843: + br label %logic.from8846 +logic.from8846: + br i1 %t938, label %logic.rhs8847, label %logic.end8848 +logic.rhs8847: %t939 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t940 = getelementptr inbounds %S.gen.Val, ptr %t939, i32 0, i32 2 %t941 = load i1, ptr %t940 - br label %logic.rend8845 -logic.rend8845: - br label %logic.end8844 -logic.end8844: - %t942 = phi i1 [ false, %logic.from8842 ], [ %t941, %logic.rend8845 ] - br i1 %t942, label %then8846, label %endif8848 -then8846: + br label %logic.rend8849 +logic.rend8849: + br label %logic.end8848 +logic.end8848: + %t942 = phi i1 [ false, %logic.from8846 ], [ %t941, %logic.rend8849 ] + br i1 %t942, label %then8850, label %endif8852 +then8850: %t943 = load ptr, ptr %a1 %t944 = load { ptr, i64, i64 }, ptr %a501 %t945 = load %S.ast.Type, ptr %a500 call void @finch.gen.holdAddr(ptr %t943, { ptr, i64, i64 } %t944, %S.ast.Type %t945) - br label %endif8848 -endif8848: + br label %endif8852 +endif8852: %t946 = load ptr, ptr %a1 %t947 = load i64, ptr %a639 %t948 = load %S.ast.Node, ptr %a2 @@ -89676,38 +89702,38 @@ endif8848: call void @finch_str_drop(ptr %a968) store %S.gen.Val %t966, ptr %a969 %t970 = load i1, ptr %a502 - br label %logic.from8849 -logic.from8849: - br i1 %t970, label %logic.rhs8850, label %logic.end8851 -logic.rhs8850: + br label %logic.from8853 +logic.from8853: + br i1 %t970, label %logic.rhs8854, label %logic.end8855 +logic.rhs8854: %t971 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 %t972 = getelementptr inbounds %S.gen.Val, ptr %t971, i32 0, i32 2 %t973 = load i1, ptr %t972 - br label %logic.rend8852 -logic.rend8852: - br label %logic.end8851 -logic.end8851: - %t974 = phi i1 [ false, %logic.from8849 ], [ %t973, %logic.rend8852 ] - br label %logic.from8853 -logic.from8853: - br i1 %t974, label %logic.rhs8854, label %logic.end8855 -logic.rhs8854: - %t975 = load ptr, ptr %a1 - %t976 = load %S.ast.Type, ptr %a500 - %t977 = call i1 @finch.gen.owning(ptr %t975, %S.ast.Type %t976) br label %logic.rend8856 logic.rend8856: br label %logic.end8855 logic.end8855: - %t978 = phi i1 [ false, %logic.from8853 ], [ %t977, %logic.rend8856 ] - br i1 %t978, label %then8857, label %endif8859 -then8857: + %t974 = phi i1 [ false, %logic.from8853 ], [ %t973, %logic.rend8856 ] + br label %logic.from8857 +logic.from8857: + br i1 %t974, label %logic.rhs8858, label %logic.end8859 +logic.rhs8858: + %t975 = load ptr, ptr %a1 + %t976 = load %S.ast.Type, ptr %a500 + %t977 = call i1 @finch.gen.owning(ptr %t975, %S.ast.Type %t976) + br label %logic.rend8860 +logic.rend8860: + br label %logic.end8859 +logic.end8859: + %t978 = phi i1 [ false, %logic.from8857 ], [ %t977, %logic.rend8860 ] + br i1 %t978, label %then8861, label %endif8863 +then8861: %t979 = load ptr, ptr %a1 %t980 = load { ptr, i64, i64 }, ptr %a501 %t981 = load %S.ast.Type, ptr %a500 call void @finch.gen.dropAt(ptr %t979, { ptr, i64, i64 } %t980, %S.ast.Type %t981) - br label %endif8859 -endif8859: + br label %endif8863 +endif8863: %t982 = load ptr, ptr %a1 %t983 = load i64, ptr %a266 call void @finch.gen.heldEnd(ptr %t982, i64 %t983) @@ -89719,7 +89745,7 @@ endif8859: call void @finch.drop.arr_str(ptr %a238) call void @finch.drop.S_ast_Node(ptr %a13) ret %S.gen.Val %t984 -endif8769: +endif8773: %t985 = load ptr, ptr %a1 %t986 = load %S.ast.Node, ptr %a2 %t987 = load %S.ast.Type, ptr %a273 @@ -90495,11 +90521,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range8860, label %inrange8861 -range8860: + br i1 %t8, label %range8864, label %inrange8865 +range8864: call void @finch_panic_index(ptr @.str.5668, i64 5404, i64 0, i64 %t7) unreachable -inrange8861: +inrange8865: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 %t11 = load %S.ast.Type, ptr %t10 @@ -90538,8 +90564,8 @@ inrange8861: store { ptr, i64, i64 } { ptr @.str.5671, i64 4, i64 0 }, ptr %a42 %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) %t44 = icmp ne i32 %t43, 0 - br i1 %t44, label %then8862, label %endif8864 -then8862: + br i1 %t44, label %then8866, label %endif8868 +then8866: %t45 = load ptr, ptr %a1 %t46 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t45, %S.ast.Node %t46, i64 1) @@ -90550,11 +90576,11 @@ then8862: %t51 = load { ptr, i64, i64 }, ptr %t50 %t52 = extractvalue { ptr, i64, i64 } %t51, 1 %t53 = icmp uge i64 1, %t52 - br i1 %t53, label %range8865, label %inrange8866 -range8865: + br i1 %t53, label %range8869, label %inrange8870 +range8869: call void @finch_panic_index(ptr @.str.5672, i64 5410, i64 1, i64 %t52) unreachable -inrange8866: +inrange8870: %t54 = extractvalue { ptr, i64, i64 } %t51, 0 %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 1 %t56 = load %S.ast.Node, ptr %t55 @@ -90565,11 +90591,11 @@ inrange8866: %t61 = load { ptr, i64, i64 }, ptr %t60 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 1, %t62 - br i1 %t63, label %range8867, label %inrange8868 -range8867: + br i1 %t63, label %range8871, label %inrange8872 +range8871: call void @finch_panic_index(ptr @.str.5673, i64 5410, i64 1, i64 %t62) unreachable -inrange8868: +inrange8872: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 1 %t66 = load %S.ast.Node, ptr %t65 @@ -90705,14 +90731,14 @@ inrange8868: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t169 -endif8864: +endif8868: %t170 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t170, ptr %a171 store { ptr, i64, i64 } { ptr @.str.5688, i64 3, i64 0 }, ptr %a172 %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) %t174 = icmp ne i32 %t173, 0 - br i1 %t174, label %then8869, label %endif8871 -then8869: + br i1 %t174, label %then8873, label %endif8875 +then8873: %t175 = load ptr, ptr %a1 %t176 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t175, %S.ast.Node %t176, i64 0) @@ -90828,14 +90854,14 @@ then8869: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t266 -endif8871: +endif8875: %t267 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t267, ptr %a268 store { ptr, i64, i64 } { ptr @.str.5700, i64 5, i64 0 }, ptr %a269 %t270 = call i32 @finch_str_eq(ptr %a268, ptr %a269) %t271 = icmp ne i32 %t270, 0 - br i1 %t271, label %then8872, label %endif8874 -then8872: + br i1 %t271, label %then8876, label %endif8878 +then8876: %t272 = load ptr, ptr %a1 %t273 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t272, %S.ast.Node %t273, i64 0) @@ -90853,28 +90879,28 @@ then8872: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t280 -endif8874: +endif8878: %t281 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t281, ptr %a282 store { ptr, i64, i64 } { ptr @.str.5705, i64 4, i64 0 }, ptr %a283 %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) %t285 = icmp ne i32 %t284, 0 - br label %logic.from8875 -logic.from8875: - br i1 %t285, label %logic.end8877, label %logic.rhs8876 -logic.rhs8876: + br label %logic.from8879 +logic.from8879: + br i1 %t285, label %logic.end8881, label %logic.rhs8880 +logic.rhs8880: %t286 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t286, ptr %a287 store { ptr, i64, i64 } { ptr @.str.5706, i64 8, i64 0 }, ptr %a288 %t289 = call i32 @finch_str_eq(ptr %a287, ptr %a288) %t290 = icmp ne i32 %t289, 0 - br label %logic.rend8878 -logic.rend8878: - br label %logic.end8877 -logic.end8877: - %t291 = phi i1 [ true, %logic.from8875 ], [ %t290, %logic.rend8878 ] - br i1 %t291, label %then8879, label %endif8881 -then8879: + br label %logic.rend8882 +logic.rend8882: + br label %logic.end8881 +logic.end8881: + %t291 = phi i1 [ true, %logic.from8879 ], [ %t290, %logic.rend8882 ] + br i1 %t291, label %then8883, label %endif8885 +then8883: %t292 = load ptr, ptr %a1 %t293 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t292, %S.ast.Node %t293, i64 1) @@ -90884,11 +90910,11 @@ then8879: %t297 = load { ptr, i64, i64 }, ptr %t296 %t298 = extractvalue { ptr, i64, i64 } %t297, 1 %t299 = icmp uge i64 1, %t298 - br i1 %t299, label %range8882, label %inrange8883 -range8882: + br i1 %t299, label %range8886, label %inrange8887 +range8886: call void @finch_panic_index(ptr @.str.5707, i64 5437, i64 1, i64 %t298) unreachable -inrange8883: +inrange8887: %t300 = extractvalue { ptr, i64, i64 } %t297, 0 %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i64 1 %t302 = load %S.ast.Node, ptr %t301 @@ -90899,11 +90925,11 @@ inrange8883: %t307 = load { ptr, i64, i64 }, ptr %t306 %t308 = extractvalue { ptr, i64, i64 } %t307, 1 %t309 = icmp uge i64 1, %t308 - br i1 %t309, label %range8884, label %inrange8885 -range8884: + br i1 %t309, label %range8888, label %inrange8889 +range8888: call void @finch_panic_index(ptr @.str.5708, i64 5437, i64 1, i64 %t308) unreachable -inrange8885: +inrange8889: %t310 = extractvalue { ptr, i64, i64 } %t307, 0 %t311 = getelementptr inbounds %S.ast.Node, ptr %t310, i64 1 %t312 = load %S.ast.Node, ptr %t311 @@ -91115,8 +91141,8 @@ inrange8885: store { ptr, i64, i64 } { ptr @.str.5735, i64 4, i64 0 }, ptr %a488 %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) %t490 = icmp ne i32 %t489, 0 - br i1 %t490, label %then8886, label %endif8888 -then8886: + br i1 %t490, label %then8890, label %endif8892 +then8890: %t491 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } %t491, ptr %a492 call void @finch_str_copy(ptr %a493, ptr %a492) @@ -91144,7 +91170,7 @@ then8886: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t497 -endif8888: +endif8892: %t498 = load ptr, ptr %a1 %t499 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } { ptr @.str.5737, i64 13, i64 0 }, ptr %a501 @@ -91183,14 +91209,14 @@ endif8888: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t513 -endif8881: +endif8885: %t514 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t514, ptr %a515 store { ptr, i64, i64 } { ptr @.str.5740, i64 4, i64 0 }, ptr %a516 %t517 = call i32 @finch_str_eq(ptr %a515, ptr %a516) %t518 = icmp ne i32 %t517, 0 - br i1 %t518, label %then8889, label %endif8891 -then8889: + br i1 %t518, label %then8893, label %endif8895 +then8893: %t519 = load ptr, ptr %a1 %t520 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t519, %S.ast.Node %t520, i64 1) @@ -91200,23 +91226,23 @@ then8889: store { ptr, i64, i64 } { ptr @.str.5741, i64 3, i64 0 }, ptr %a524 %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) %t526 = icmp eq i32 %t525, 0 - br i1 %t526, label %then8892, label %endif8894 -then8892: + br i1 %t526, label %then8896, label %endif8898 +then8896: %t527 = load ptr, ptr %a1 %t528 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t527, %S.ast.Node %t528, { ptr, i64, i64 } { ptr @.str.5742, i64 31, i64 0 }) - br label %endif8894 -endif8894: + br label %endif8898 +endif8898: %t529 = load ptr, ptr %a1 %t530 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 %t531 = load { ptr, i64, i64 }, ptr %t530 %t532 = extractvalue { ptr, i64, i64 } %t531, 1 %t533 = icmp uge i64 1, %t532 - br i1 %t533, label %range8895, label %inrange8896 -range8895: + br i1 %t533, label %range8899, label %inrange8900 +range8899: call void @finch_panic_index(ptr @.str.5743, i64 5477, i64 1, i64 %t532) unreachable -inrange8896: +inrange8900: %t534 = extractvalue { ptr, i64, i64 } %t531, 0 %t535 = getelementptr inbounds %S.ast.Node, ptr %t534, i64 1 %t536 = load %S.ast.Node, ptr %t535 @@ -91288,14 +91314,14 @@ inrange8896: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t588 -endif8891: +endif8895: %t589 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t589, ptr %a590 store { ptr, i64, i64 } { ptr @.str.5751, i64 6, i64 0 }, ptr %a591 %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) %t593 = icmp ne i32 %t592, 0 - br i1 %t593, label %then8897, label %endif8899 -then8897: + br i1 %t593, label %then8901, label %endif8903 +then8901: %t594 = load ptr, ptr %a1 %t595 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t594, %S.ast.Node %t595, i64 2) @@ -91305,11 +91331,11 @@ then8897: %t599 = load { ptr, i64, i64 }, ptr %t598 %t600 = extractvalue { ptr, i64, i64 } %t599, 1 %t601 = icmp uge i64 1, %t600 - br i1 %t601, label %range8900, label %inrange8901 -range8900: + br i1 %t601, label %range8904, label %inrange8905 +range8904: call void @finch_panic_index(ptr @.str.5752, i64 5486, i64 1, i64 %t600) unreachable -inrange8901: +inrange8905: %t602 = extractvalue { ptr, i64, i64 } %t599, 0 %t603 = getelementptr inbounds %S.ast.Node, ptr %t602, i64 1 %t604 = load %S.ast.Node, ptr %t603 @@ -91319,11 +91345,11 @@ inrange8901: %t608 = load { ptr, i64, i64 }, ptr %t607 %t609 = extractvalue { ptr, i64, i64 } %t608, 1 %t610 = icmp uge i64 1, %t609 - br i1 %t610, label %range8902, label %inrange8903 -range8902: + br i1 %t610, label %range8906, label %inrange8907 +range8906: call void @finch_panic_index(ptr @.str.5754, i64 5486, i64 1, i64 %t609) unreachable -inrange8903: +inrange8907: %t611 = extractvalue { ptr, i64, i64 } %t608, 0 %t612 = getelementptr inbounds %S.ast.Node, ptr %t611, i64 1 %t613 = load %S.ast.Node, ptr %t612 @@ -91346,11 +91372,11 @@ inrange8903: %t627 = load { ptr, i64, i64 }, ptr %t626 %t628 = extractvalue { ptr, i64, i64 } %t627, 1 %t629 = icmp uge i64 2, %t628 - br i1 %t629, label %range8904, label %inrange8905 -range8904: + br i1 %t629, label %range8908, label %inrange8909 +range8908: call void @finch_panic_index(ptr @.str.5756, i64 5487, i64 2, i64 %t628) unreachable -inrange8905: +inrange8909: %t630 = extractvalue { ptr, i64, i64 } %t627, 0 %t631 = getelementptr inbounds %S.ast.Node, ptr %t630, i64 2 %t632 = load %S.ast.Node, ptr %t631 @@ -91361,11 +91387,11 @@ inrange8905: %t637 = load { ptr, i64, i64 }, ptr %t636 %t638 = extractvalue { ptr, i64, i64 } %t637, 1 %t639 = icmp uge i64 2, %t638 - br i1 %t639, label %range8906, label %inrange8907 -range8906: + br i1 %t639, label %range8910, label %inrange8911 +range8910: call void @finch_panic_index(ptr @.str.5757, i64 5487, i64 2, i64 %t638) unreachable -inrange8907: +inrange8911: %t640 = extractvalue { ptr, i64, i64 } %t637, 0 %t641 = getelementptr inbounds %S.ast.Node, ptr %t640, i64 2 %t642 = load %S.ast.Node, ptr %t641 @@ -91379,22 +91405,22 @@ inrange8907: %t648 = load ptr, ptr %a1 %t649 = load ptr, ptr %a1 %t650 = icmp eq ptr %t649, null - br i1 %t650, label %panic8908, label %ok8909 -panic8908: + br i1 %t650, label %panic8912, label %ok8913 +panic8912: call void @finch_panic(ptr @.str.5759, i64 5488, ptr @.str.5760) unreachable -ok8909: +ok8913: %t651 = getelementptr inbounds %S.gen.Gen, ptr %t649, i32 0, i32 1 %t652 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t653 = load i64, ptr %t652 %t654 = load { ptr, i64, i64 }, ptr %t651 %t655 = extractvalue { ptr, i64, i64 } %t654, 1 %t656 = icmp uge i64 %t653, %t655 - br i1 %t656, label %range8910, label %inrange8911 -range8910: + br i1 %t656, label %range8914, label %inrange8915 +range8914: call void @finch_panic_index(ptr @.str.5761, i64 5488, i64 %t653, i64 %t655) unreachable -inrange8911: +inrange8915: %t657 = extractvalue { ptr, i64, i64 } %t654, 0 %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i64 %t653 %t659 = load { ptr, i64, i64 }, ptr %t658 @@ -91532,14 +91558,14 @@ inrange8911: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t764 -endif8899: +endif8903: %t765 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t765, ptr %a766 store { ptr, i64, i64 } { ptr @.str.5773, i64 6, i64 0 }, ptr %a767 %t768 = call i32 @finch_str_eq(ptr %a766, ptr %a767) %t769 = icmp ne i32 %t768, 0 - br i1 %t769, label %then8912, label %endif8914 -then8912: + br i1 %t769, label %then8916, label %endif8918 +then8916: %t770 = load ptr, ptr %a1 %t771 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t770, %S.ast.Node %t771, i64 1) @@ -91549,11 +91575,11 @@ then8912: %t775 = load { ptr, i64, i64 }, ptr %t774 %t776 = extractvalue { ptr, i64, i64 } %t775, 1 %t777 = icmp uge i64 1, %t776 - br i1 %t777, label %range8915, label %inrange8916 -range8915: + br i1 %t777, label %range8919, label %inrange8920 +range8919: call void @finch_panic_index(ptr @.str.5774, i64 5496, i64 1, i64 %t776) unreachable -inrange8916: +inrange8920: %t778 = extractvalue { ptr, i64, i64 } %t775, 0 %t779 = getelementptr inbounds %S.ast.Node, ptr %t778, i64 1 %t780 = load %S.ast.Node, ptr %t779 @@ -91563,11 +91589,11 @@ inrange8916: %t784 = load { ptr, i64, i64 }, ptr %t783 %t785 = extractvalue { ptr, i64, i64 } %t784, 1 %t786 = icmp uge i64 1, %t785 - br i1 %t786, label %range8917, label %inrange8918 -range8917: + br i1 %t786, label %range8921, label %inrange8922 +range8921: call void @finch_panic_index(ptr @.str.5776, i64 5496, i64 1, i64 %t785) unreachable -inrange8918: +inrange8922: %t787 = extractvalue { ptr, i64, i64 } %t784, 0 %t788 = getelementptr inbounds %S.ast.Node, ptr %t787, i64 1 %t789 = load %S.ast.Node, ptr %t788 @@ -91704,14 +91730,14 @@ inrange8918: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t895 -endif8914: +endif8918: %t896 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t896, ptr %a897 store { ptr, i64, i64 } { ptr @.str.5787, i64 6, i64 0 }, ptr %a898 %t899 = call i32 @finch_str_eq(ptr %a897, ptr %a898) %t900 = icmp ne i32 %t899, 0 - br i1 %t900, label %then8919, label %endif8921 -then8919: + br i1 %t900, label %then8923, label %endif8925 +then8923: %t901 = load ptr, ptr %a1 %t902 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t901, %S.ast.Node %t902, i64 1) @@ -91721,11 +91747,11 @@ then8919: %t906 = load { ptr, i64, i64 }, ptr %t905 %t907 = extractvalue { ptr, i64, i64 } %t906, 1 %t908 = icmp uge i64 1, %t907 - br i1 %t908, label %range8922, label %inrange8923 -range8922: + br i1 %t908, label %range8926, label %inrange8927 +range8926: call void @finch_panic_index(ptr @.str.5788, i64 5505, i64 1, i64 %t907) unreachable -inrange8923: +inrange8927: %t909 = extractvalue { ptr, i64, i64 } %t906, 0 %t910 = getelementptr inbounds %S.ast.Node, ptr %t909, i64 1 %t911 = load %S.ast.Node, ptr %t910 @@ -91735,11 +91761,11 @@ inrange8923: %t915 = load { ptr, i64, i64 }, ptr %t914 %t916 = extractvalue { ptr, i64, i64 } %t915, 1 %t917 = icmp uge i64 1, %t916 - br i1 %t917, label %range8924, label %inrange8925 -range8924: + br i1 %t917, label %range8928, label %inrange8929 +range8928: call void @finch_panic_index(ptr @.str.5790, i64 5505, i64 1, i64 %t916) unreachable -inrange8925: +inrange8929: %t918 = extractvalue { ptr, i64, i64 } %t915, 0 %t919 = getelementptr inbounds %S.ast.Node, ptr %t918, i64 1 %t920 = load %S.ast.Node, ptr %t919 @@ -91813,14 +91839,14 @@ inrange8925: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t972 -endif8921: +endif8925: %t973 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t973, ptr %a974 store { ptr, i64, i64 } { ptr @.str.5797, i64 7, i64 0 }, ptr %a975 %t976 = call i32 @finch_str_eq(ptr %a974, ptr %a975) %t977 = icmp ne i32 %t976, 0 - br i1 %t977, label %then8926, label %endif8928 -then8926: + br i1 %t977, label %then8930, label %endif8932 +then8930: %t978 = load ptr, ptr %a1 %t979 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t978, %S.ast.Node %t979, i64 0) @@ -91880,11 +91906,11 @@ then8926: %t1028 = load { ptr, i64, i64 }, ptr %a1005 %t1029 = extractvalue { ptr, i64, i64 } %t1028, 1 %t1030 = icmp uge i64 3, %t1029 - br i1 %t1030, label %range8929, label %inrange8930 -range8929: + br i1 %t1030, label %range8933, label %inrange8934 +range8933: call void @finch_panic_index(ptr @.str.5805, i64 5516, i64 3, i64 %t1029) unreachable -inrange8930: +inrange8934: %t1031 = extractvalue { ptr, i64, i64 } %t1028, 0 %t1032 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1031, i64 3 %t1033 = load { ptr, i64, i64 }, ptr %t1032 @@ -91929,11 +91955,11 @@ inrange8930: %t1066 = load { ptr, i64, i64 }, ptr %a1005 %t1067 = extractvalue { ptr, i64, i64 } %t1066, 1 %t1068 = icmp uge i64 3, %t1067 - br i1 %t1068, label %range8931, label %inrange8932 -range8931: + br i1 %t1068, label %range8935, label %inrange8936 +range8935: call void @finch_panic_index(ptr @.str.5810, i64 5517, i64 3, i64 %t1067) unreachable -inrange8932: +inrange8936: %t1069 = extractvalue { ptr, i64, i64 } %t1066, 0 %t1070 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1069, i64 3 %t1071 = load { ptr, i64, i64 }, ptr %t1070 @@ -92022,14 +92048,14 @@ inrange8932: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t1132 -endif8928: +endif8932: %t1133 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t1133, ptr %a1134 store { ptr, i64, i64 } { ptr @.str.5815, i64 5, i64 0 }, ptr %a1135 %t1136 = call i32 @finch_str_eq(ptr %a1134, ptr %a1135) %t1137 = icmp ne i32 %t1136, 0 - br i1 %t1137, label %then8933, label %endif8935 -then8933: + br i1 %t1137, label %then8937, label %endif8939 +then8937: %t1138 = load ptr, ptr %a1 %t1139 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t1138, %S.ast.Node %t1139, i64 2) @@ -92039,11 +92065,11 @@ then8933: %t1143 = load { ptr, i64, i64 }, ptr %t1142 %t1144 = extractvalue { ptr, i64, i64 } %t1143, 1 %t1145 = icmp uge i64 1, %t1144 - br i1 %t1145, label %range8936, label %inrange8937 -range8936: + br i1 %t1145, label %range8940, label %inrange8941 +range8940: call void @finch_panic_index(ptr @.str.5816, i64 5528, i64 1, i64 %t1144) unreachable -inrange8937: +inrange8941: %t1146 = extractvalue { ptr, i64, i64 } %t1143, 0 %t1147 = getelementptr inbounds %S.ast.Node, ptr %t1146, i64 1 %t1148 = load %S.ast.Node, ptr %t1147 @@ -92053,11 +92079,11 @@ inrange8937: %t1152 = load { ptr, i64, i64 }, ptr %t1151 %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 %t1154 = icmp uge i64 1, %t1153 - br i1 %t1154, label %range8938, label %inrange8939 -range8938: + br i1 %t1154, label %range8942, label %inrange8943 +range8942: call void @finch_panic_index(ptr @.str.5818, i64 5528, i64 1, i64 %t1153) unreachable -inrange8939: +inrange8943: %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 1 %t1157 = load %S.ast.Node, ptr %t1156 @@ -92079,11 +92105,11 @@ inrange8939: %t1170 = load { ptr, i64, i64 }, ptr %t1169 %t1171 = extractvalue { ptr, i64, i64 } %t1170, 1 %t1172 = icmp uge i64 2, %t1171 - br i1 %t1172, label %range8940, label %inrange8941 -range8940: + br i1 %t1172, label %range8944, label %inrange8945 +range8944: call void @finch_panic_index(ptr @.str.5820, i64 5529, i64 2, i64 %t1171) unreachable -inrange8941: +inrange8945: %t1173 = extractvalue { ptr, i64, i64 } %t1170, 0 %t1174 = getelementptr inbounds %S.ast.Node, ptr %t1173, i64 2 %t1175 = load %S.ast.Node, ptr %t1174 @@ -92093,11 +92119,11 @@ inrange8941: %t1179 = load { ptr, i64, i64 }, ptr %t1178 %t1180 = extractvalue { ptr, i64, i64 } %t1179, 1 %t1181 = icmp uge i64 2, %t1180 - br i1 %t1181, label %range8942, label %inrange8943 -range8942: + br i1 %t1181, label %range8946, label %inrange8947 +range8946: call void @finch_panic_index(ptr @.str.5822, i64 5529, i64 2, i64 %t1180) unreachable -inrange8943: +inrange8947: %t1182 = extractvalue { ptr, i64, i64 } %t1179, 0 %t1183 = getelementptr inbounds %S.ast.Node, ptr %t1182, i64 2 %t1184 = load %S.ast.Node, ptr %t1183 @@ -92340,11 +92366,11 @@ inrange8943: %t1387 = load { ptr, i64, i64 }, ptr %a1364 %t1388 = extractvalue { ptr, i64, i64 } %t1387, 1 %t1389 = icmp uge i64 3, %t1388 - br i1 %t1389, label %range8944, label %inrange8945 -range8944: + br i1 %t1389, label %range8948, label %inrange8949 +range8948: call void @finch_panic_index(ptr @.str.5848, i64 5541, i64 3, i64 %t1388) unreachable -inrange8945: +inrange8949: %t1390 = extractvalue { ptr, i64, i64 } %t1387, 0 %t1391 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1390, i64 3 %t1392 = load { ptr, i64, i64 }, ptr %t1391 @@ -92398,11 +92424,11 @@ inrange8945: %t1434 = load { ptr, i64, i64 }, ptr %a1364 %t1435 = extractvalue { ptr, i64, i64 } %t1434, 1 %t1436 = icmp uge i64 3, %t1435 - br i1 %t1436, label %range8946, label %inrange8947 -range8946: + br i1 %t1436, label %range8950, label %inrange8951 +range8950: call void @finch_panic_index(ptr @.str.5854, i64 5542, i64 3, i64 %t1435) unreachable -inrange8947: +inrange8951: %t1437 = extractvalue { ptr, i64, i64 } %t1434, 0 %t1438 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1437, i64 3 %t1439 = load { ptr, i64, i64 }, ptr %t1438 @@ -92463,14 +92489,14 @@ inrange8947: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t1471 -endif8935: +endif8939: %t1472 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t1472, ptr %a1473 store { ptr, i64, i64 } { ptr @.str.5856, i64 4, i64 0 }, ptr %a1474 %t1475 = call i32 @finch_str_eq(ptr %a1473, ptr %a1474) %t1476 = icmp ne i32 %t1475, 0 - br i1 %t1476, label %then8948, label %endif8950 -then8948: + br i1 %t1476, label %then8952, label %endif8954 +then8952: %t1477 = load ptr, ptr %a1 %t1478 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t1477, %S.ast.Node %t1478, i64 0) @@ -92483,41 +92509,41 @@ then8948: %t1485 = load %S.ast.Type, ptr %a15 %t1486 = call i1 @finch.gen.isNumber(%S.ast.Type %t1485) %t1487 = xor i1 %t1486, true - br label %logic.from8951 -logic.from8951: - br i1 %t1487, label %logic.rhs8952, label %logic.end8953 -logic.rhs8952: + br label %logic.from8955 +logic.from8955: + br i1 %t1487, label %logic.rhs8956, label %logic.end8957 +logic.rhs8956: %t1488 = load { ptr, i64, i64 }, ptr %a1484 store { ptr, i64, i64 } %t1488, ptr %a1489 store { ptr, i64, i64 } { ptr @.str.5857, i64 4, i64 0 }, ptr %a1490 %t1491 = call i32 @finch_str_eq(ptr %a1489, ptr %a1490) %t1492 = icmp eq i32 %t1491, 0 - br label %logic.rend8954 -logic.rend8954: - br label %logic.end8953 -logic.end8953: - %t1493 = phi i1 [ false, %logic.from8951 ], [ %t1492, %logic.rend8954 ] - br label %logic.from8955 -logic.from8955: - br i1 %t1493, label %logic.rhs8956, label %logic.end8957 -logic.rhs8956: + br label %logic.rend8958 +logic.rend8958: + br label %logic.end8957 +logic.end8957: + %t1493 = phi i1 [ false, %logic.from8955 ], [ %t1492, %logic.rend8958 ] + br label %logic.from8959 +logic.from8959: + br i1 %t1493, label %logic.rhs8960, label %logic.end8961 +logic.rhs8960: %t1494 = load { ptr, i64, i64 }, ptr %a1484 store { ptr, i64, i64 } %t1494, ptr %a1495 store { ptr, i64, i64 } { ptr @.str.5858, i64 3, i64 0 }, ptr %a1496 %t1497 = call i32 @finch_str_eq(ptr %a1495, ptr %a1496) %t1498 = icmp eq i32 %t1497, 0 - br label %logic.rend8958 -logic.rend8958: - br label %logic.end8957 -logic.end8957: - %t1499 = phi i1 [ false, %logic.from8955 ], [ %t1498, %logic.rend8958 ] - br i1 %t1499, label %then8959, label %endif8961 -then8959: + br label %logic.rend8962 +logic.rend8962: + br label %logic.end8961 +logic.end8961: + %t1499 = phi i1 [ false, %logic.from8959 ], [ %t1498, %logic.rend8962 ] + br i1 %t1499, label %then8963, label %endif8965 +then8963: %t1500 = load ptr, ptr %a1 %t1501 = load %S.ast.Node, ptr %a2 call void @finch.gen.fail(ptr %t1500, %S.ast.Node %t1501, { ptr, i64, i64 } { ptr @.str.5859, i64 47, i64 0 }) - br label %endif8961 -endif8961: + br label %endif8965 +endif8965: %t1502 = load ptr, ptr %a1 %t1503 = load %S.ast.Type, ptr %a15 %t1504 = call { ptr, i64, i64 } @finch.gen.cmpFn(ptr %t1502, %S.ast.Type %t1503) @@ -92599,7 +92625,7 @@ endif8961: call void @finch_str_drop(ptr %a19) call void @finch.drop.S_ast_Type(ptr %a15) ret %S.gen.Val %t1563 -endif8950: +endif8954: %t1564 = load ptr, ptr %a1 %t1565 = load %S.ast.Node, ptr %a2 %t1566 = load { ptr, i64, i64 }, ptr %a25 @@ -92756,11 +92782,11 @@ entry: %t6 = load { ptr, i64, i64 }, ptr %t5 %t7 = extractvalue { ptr, i64, i64 } %t6, 1 %t8 = icmp uge i64 0, %t7 - br i1 %t8, label %range8962, label %inrange8963 -range8962: + br i1 %t8, label %range8966, label %inrange8967 +range8966: call void @finch_panic_index(ptr @.str.5870, i64 5565, i64 0, i64 %t7) unreachable -inrange8963: +inrange8967: %t9 = extractvalue { ptr, i64, i64 } %t6, 0 %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 %t11 = load %S.ast.Type, ptr %t10 @@ -92772,11 +92798,11 @@ inrange8963: %t17 = load %S.ast.Type, ptr %a15 %t18 = call i1 @finch.gen.owning(ptr %t16, %S.ast.Type %t17) %t19 = xor i1 %t18, true - br i1 %t19, label %then8964, label %endif8966 -then8964: + br i1 %t19, label %then8968, label %endif8970 +then8968: call void @finch.drop.S_ast_Type(ptr %a15) ret void -endif8966: +endif8970: %t20 = load ptr, ptr %a1 %t21 = load %S.ast.Type, ptr %a15 %t22 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t20, %S.ast.Type %t21) @@ -92970,11 +92996,11 @@ endif8966: %t185 = load { ptr, i64, i64 }, ptr %a151 %t186 = extractvalue { ptr, i64, i64 } %t185, 1 %t187 = icmp uge i64 3, %t186 - br i1 %t187, label %range8967, label %inrange8968 -range8967: + br i1 %t187, label %range8971, label %inrange8972 +range8971: call void @finch_panic_index(ptr @.str.5891, i64 5576, i64 3, i64 %t186) unreachable -inrange8968: +inrange8972: %t188 = extractvalue { ptr, i64, i64 } %t185, 0 %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i64 3 %t190 = load { ptr, i64, i64 }, ptr %t189 @@ -93206,27 +93232,27 @@ entry: store { ptr, i64, i64 } %t9, ptr %a10 %t11 = load ptr, ptr %a1 %t12 = icmp eq ptr %t11, null - br i1 %t12, label %panic8969, label %ok8970 -panic8969: + br i1 %t12, label %panic8973, label %ok8974 +panic8973: call void @finch_panic(ptr @.str.5893, i64 5584, ptr @.str.5894) unreachable -ok8970: +ok8974: %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 %t14 = load { ptr, i64, i64 }, ptr %t13 %t15 = load { ptr, i64, i64 }, ptr %a10 %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) - br i1 %t16, label %then8971, label %endif8973 -then8971: + br i1 %t16, label %then8975, label %endif8977 +then8975: %t17 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t17 -endif8973: +endif8977: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic8974, label %ok8975 -panic8974: + br i1 %t19, label %panic8978, label %ok8979 +panic8978: call void @finch_panic(ptr @.str.5895, i64 5587, ptr @.str.5896) unreachable -ok8975: +ok8979: %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a10 @@ -93250,8 +93276,8 @@ ok8975: store { ptr, i64, i64 } { ptr @.str.5898, i64 3, i64 0 }, ptr %a37 %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) %t39 = icmp ne i32 %t38, 0 - br i1 %t39, label %then8976, label %else8977 -then8976: + br i1 %t39, label %then8980, label %else8981 +then8980: %t40 = load ptr, ptr %a1 %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t40, { ptr, i64, i64 } { ptr @.str.5899, i64 39, i64 0 }) store { ptr, i64, i64 } %t41, ptr %a42 @@ -93275,8 +93301,8 @@ then8976: store { ptr, i64, i64 } %t56, ptr %a57 call void @finch_str_drop(ptr %a57) call void @finch_str_drop(ptr %a42) - br label %endif8978 -else8977: + br label %endif8982 +else8981: %t58 = load ptr, ptr %a1 %t59 = load %S.ast.Type, ptr %a2 %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) @@ -93293,8 +93319,8 @@ else8977: store { ptr, i64, i64 } { ptr @.str.5905, i64 0, i64 0 }, ptr %a71 %t72 = load %S.ast.Type, ptr %a2 %t73 = call i1 @finch.gen.isFloat(%S.ast.Type %t72) - br i1 %t73, label %then8979, label %else8980 -then8979: + br i1 %t73, label %then8983, label %else8984 +then8983: %t74 = load ptr, ptr %a1 %t75 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } { ptr @.str.5906, i64 9, i64 0 }, ptr %a77 @@ -93373,8 +93399,8 @@ then8979: store { ptr, i64, i64 } %t134, ptr %a71 store { ptr, i64, i64 } %t136, ptr %a137 call void @finch_str_drop(ptr %a137) - br label %endif8981 -else8980: + br label %endif8985 +else8984: %t138 = load ptr, ptr %a1 %t139 = load %S.ast.Type, ptr %a2 %t140 = call i1 @finch.gen.isSigned(%S.ast.Type %t139) @@ -93487,8 +93513,8 @@ else8980: store { ptr, i64, i64 } %t226, ptr %a71 store { ptr, i64, i64 } %t228, ptr %a229 call void @finch_str_drop(ptr %a229) - br label %endif8981 -endif8981: + br label %endif8985 +endif8985: %t230 = load ptr, ptr %a1 %t231 = load ptr, ptr %a1 %t232 = load { ptr, i64, i64 }, ptr %a71 @@ -93552,8 +93578,8 @@ endif8981: call void @finch_str_drop(ptr %a69) call void @finch_str_drop(ptr %a65) call void @finch_str_drop(ptr %a61) - br label %endif8978 -endif8978: + br label %endif8982 +endif8982: %t277 = load ptr, ptr %a1 %t278 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } { ptr @.str.5928, i64 8, i64 0 }, ptr %a280 @@ -93934,22 +93960,22 @@ entry: %t13 = load ptr, ptr %a1 %t14 = load ptr, ptr %a1 %t15 = icmp eq ptr %t14, null - br i1 %t15, label %panic8982, label %ok8983 -panic8982: + br i1 %t15, label %panic8986, label %ok8987 +panic8986: call void @finch_panic(ptr @.str.5931, i64 5616, ptr @.str.5932) unreachable -ok8983: +ok8987: %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 1 %t17 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t16 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range8984, label %inrange8985 -range8984: + br i1 %t21, label %range8988, label %inrange8989 +range8988: call void @finch_panic_index(ptr @.str.5933, i64 5616, i64 %t18, i64 %t20) unreachable -inrange8985: +inrange8989: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 %t24 = load { ptr, i64, i64 }, ptr %t23 @@ -93960,8 +93986,8 @@ inrange8985: store { ptr, i64, i64 } { ptr @.str.5934, i64 3, i64 0 }, ptr %a29 %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) %t31 = icmp ne i32 %t30, 0 - br i1 %t31, label %then8986, label %endif8988 -then8986: + br i1 %t31, label %then8990, label %endif8992 +then8990: %t32 = load ptr, ptr %a1 %t33 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t32, %S.ast.Node %t33, i64 2) @@ -93971,11 +93997,11 @@ then8986: %t37 = load { ptr, i64, i64 }, ptr %t36 %t38 = extractvalue { ptr, i64, i64 } %t37, 1 %t39 = icmp uge i64 1, %t38 - br i1 %t39, label %range8989, label %inrange8990 -range8989: + br i1 %t39, label %range8993, label %inrange8994 +range8993: call void @finch_panic_index(ptr @.str.5935, i64 5619, i64 1, i64 %t38) unreachable -inrange8990: +inrange8994: %t40 = extractvalue { ptr, i64, i64 } %t37, 0 %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 %t42 = load %S.ast.Node, ptr %t41 @@ -93985,11 +94011,11 @@ inrange8990: %t46 = load { ptr, i64, i64 }, ptr %t45 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 1, %t47 - br i1 %t48, label %range8991, label %inrange8992 -range8991: + br i1 %t48, label %range8995, label %inrange8996 +range8995: call void @finch_panic_index(ptr @.str.5937, i64 5619, i64 1, i64 %t47) unreachable -inrange8992: +inrange8996: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 %t51 = load %S.ast.Node, ptr %t50 @@ -94011,11 +94037,11 @@ inrange8992: %t64 = load { ptr, i64, i64 }, ptr %t63 %t65 = extractvalue { ptr, i64, i64 } %t64, 1 %t66 = icmp uge i64 2, %t65 - br i1 %t66, label %range8993, label %inrange8994 -range8993: + br i1 %t66, label %range8997, label %inrange8998 +range8997: call void @finch_panic_index(ptr @.str.5939, i64 5620, i64 2, i64 %t65) unreachable -inrange8994: +inrange8998: %t67 = extractvalue { ptr, i64, i64 } %t64, 0 %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 2 %t69 = load %S.ast.Node, ptr %t68 @@ -94025,11 +94051,11 @@ inrange8994: %t73 = load { ptr, i64, i64 }, ptr %t72 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 2, %t74 - br i1 %t75, label %range8995, label %inrange8996 -range8995: + br i1 %t75, label %range8999, label %inrange9000 +range8999: call void @finch_panic_index(ptr @.str.5941, i64 5620, i64 2, i64 %t74) unreachable -inrange8996: +inrange9000: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 2 %t78 = load %S.ast.Node, ptr %t77 @@ -94143,56 +94169,56 @@ inrange8996: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t165 -endif8988: +endif8992: %t166 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t166, ptr %a167 store { ptr, i64, i64 } { ptr @.str.5952, i64 4, i64 0 }, ptr %a168 %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) %t170 = icmp ne i32 %t169, 0 - br label %logic.from8997 -logic.from8997: - br i1 %t170, label %logic.end8999, label %logic.rhs8998 -logic.rhs8998: + br label %logic.from9001 +logic.from9001: + br i1 %t170, label %logic.end9003, label %logic.rhs9002 +logic.rhs9002: %t171 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t171, ptr %a172 store { ptr, i64, i64 } { ptr @.str.5953, i64 8, i64 0 }, ptr %a173 %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) %t175 = icmp ne i32 %t174, 0 - br label %logic.rend9000 -logic.rend9000: - br label %logic.end8999 -logic.end8999: - %t176 = phi i1 [ true, %logic.from8997 ], [ %t175, %logic.rend9000 ] - br label %logic.from9001 -logic.from9001: - br i1 %t176, label %logic.end9003, label %logic.rhs9002 -logic.rhs9002: + br label %logic.rend9004 +logic.rend9004: + br label %logic.end9003 +logic.end9003: + %t176 = phi i1 [ true, %logic.from9001 ], [ %t175, %logic.rend9004 ] + br label %logic.from9005 +logic.from9005: + br i1 %t176, label %logic.end9007, label %logic.rhs9006 +logic.rhs9006: %t177 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t177, ptr %a178 store { ptr, i64, i64 } { ptr @.str.5954, i64 11, i64 0 }, ptr %a179 %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) %t181 = icmp ne i32 %t180, 0 - br label %logic.rend9004 -logic.rend9004: - br label %logic.end9003 -logic.end9003: - %t182 = phi i1 [ true, %logic.from9001 ], [ %t181, %logic.rend9004 ] - br label %logic.from9005 -logic.from9005: - br i1 %t182, label %logic.end9007, label %logic.rhs9006 -logic.rhs9006: + br label %logic.rend9008 +logic.rend9008: + br label %logic.end9007 +logic.end9007: + %t182 = phi i1 [ true, %logic.from9005 ], [ %t181, %logic.rend9008 ] + br label %logic.from9009 +logic.from9009: + br i1 %t182, label %logic.end9011, label %logic.rhs9010 +logic.rhs9010: %t183 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t183, ptr %a184 store { ptr, i64, i64 } { ptr @.str.5955, i64 9, i64 0 }, ptr %a185 %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) %t187 = icmp ne i32 %t186, 0 - br label %logic.rend9008 -logic.rend9008: - br label %logic.end9007 -logic.end9007: - %t188 = phi i1 [ true, %logic.from9005 ], [ %t187, %logic.rend9008 ] - br i1 %t188, label %then9009, label %endif9011 -then9009: + br label %logic.rend9012 +logic.rend9012: + br label %logic.end9011 +logic.end9011: + %t188 = phi i1 [ true, %logic.from9009 ], [ %t187, %logic.rend9012 ] + br i1 %t188, label %then9013, label %endif9015 +then9013: %t189 = load ptr, ptr %a1 %t190 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t189, %S.ast.Node %t190, i64 1) @@ -94201,11 +94227,11 @@ then9009: %t193 = load { ptr, i64, i64 }, ptr %t192 %t194 = extractvalue { ptr, i64, i64 } %t193, 1 %t195 = icmp uge i64 1, %t194 - br i1 %t195, label %range9012, label %inrange9013 -range9012: + br i1 %t195, label %range9016, label %inrange9017 +range9016: call void @finch_panic_index(ptr @.str.5956, i64 5626, i64 1, i64 %t194) unreachable -inrange9013: +inrange9017: %t196 = extractvalue { ptr, i64, i64 } %t193, 0 %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 1 %t198 = load %S.ast.Node, ptr %t197 @@ -94220,8 +94246,8 @@ inrange9013: store { ptr, i64, i64 } { ptr @.str.5958, i64 4, i64 0 }, ptr %a207 %t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207) %t209 = icmp ne i32 %t208, 0 - br i1 %t209, label %then9014, label %endif9016 -then9014: + br i1 %t209, label %then9018, label %endif9020 +then9018: %t210 = load ptr, ptr %a1 %t211 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5959, i64 29, i64 0 }, ptr %a213 @@ -94268,14 +94294,14 @@ then9014: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t243 -endif9016: +endif9020: %t244 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t244, ptr %a245 store { ptr, i64, i64 } { ptr @.str.5963, i64 8, i64 0 }, ptr %a246 %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) %t248 = icmp ne i32 %t247, 0 - br i1 %t248, label %then9017, label %endif9019 -then9017: + br i1 %t248, label %then9021, label %endif9023 +then9021: %t249 = load ptr, ptr %a1 %t250 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } { ptr @.str.5964, i64 29, i64 0 }, ptr %a252 @@ -94339,21 +94365,21 @@ then9017: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t296 -endif9019: +endif9023: store { ptr, i64, i64 } { ptr @.str.5970, i64 17, i64 0 }, ptr %a297 %t298 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t298, ptr %a299 store { ptr, i64, i64 } { ptr @.str.5971, i64 9, i64 0 }, ptr %a300 %t301 = call i32 @finch_str_eq(ptr %a299, ptr %a300) %t302 = icmp ne i32 %t301, 0 - br i1 %t302, label %then9020, label %endif9022 -then9020: + br i1 %t302, label %then9024, label %endif9026 +then9024: %t303 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } { ptr @.str.5972, i64 15, i64 0 }, ptr %a297 store { ptr, i64, i64 } %t303, ptr %a304 call void @finch_str_drop(ptr %a304) - br label %endif9022 -endif9022: + br label %endif9026 +endif9026: %t305 = load ptr, ptr %a1 %t306 = load { ptr, i64, i64 }, ptr %a297 store { ptr, i64, i64 } { ptr @.str.5973, i64 9, i64 0 }, ptr %a308 @@ -94431,42 +94457,42 @@ endif9022: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t363 -endif9011: +endif9015: %t364 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t364, ptr %a365 store { ptr, i64, i64 } { ptr @.str.5980, i64 4, i64 0 }, ptr %a366 %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) %t368 = icmp ne i32 %t367, 0 - br label %logic.from9023 -logic.from9023: - br i1 %t368, label %logic.end9025, label %logic.rhs9024 -logic.rhs9024: + br label %logic.from9027 +logic.from9027: + br i1 %t368, label %logic.end9029, label %logic.rhs9028 +logic.rhs9028: %t369 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t369, ptr %a370 store { ptr, i64, i64 } { ptr @.str.5981, i64 5, i64 0 }, ptr %a371 %t372 = call i32 @finch_str_eq(ptr %a370, ptr %a371) %t373 = icmp ne i32 %t372, 0 - br label %logic.rend9026 -logic.rend9026: - br label %logic.end9025 -logic.end9025: - %t374 = phi i1 [ true, %logic.from9023 ], [ %t373, %logic.rend9026 ] - br label %logic.from9027 -logic.from9027: - br i1 %t374, label %logic.end9029, label %logic.rhs9028 -logic.rhs9028: + br label %logic.rend9030 +logic.rend9030: + br label %logic.end9029 +logic.end9029: + %t374 = phi i1 [ true, %logic.from9027 ], [ %t373, %logic.rend9030 ] + br label %logic.from9031 +logic.from9031: + br i1 %t374, label %logic.end9033, label %logic.rhs9032 +logic.rhs9032: %t375 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t375, ptr %a376 store { ptr, i64, i64 } { ptr @.str.5982, i64 5, i64 0 }, ptr %a377 %t378 = call i32 @finch_str_eq(ptr %a376, ptr %a377) %t379 = icmp ne i32 %t378, 0 - br label %logic.rend9030 -logic.rend9030: - br label %logic.end9029 -logic.end9029: - %t380 = phi i1 [ true, %logic.from9027 ], [ %t379, %logic.rend9030 ] - br i1 %t380, label %then9031, label %endif9033 -then9031: + br label %logic.rend9034 +logic.rend9034: + br label %logic.end9033 +logic.end9033: + %t380 = phi i1 [ true, %logic.from9031 ], [ %t379, %logic.rend9034 ] + br i1 %t380, label %then9035, label %endif9037 +then9035: %t381 = load ptr, ptr %a1 %t382 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t381, %S.ast.Node %t382, i64 0) @@ -94522,14 +94548,14 @@ then9031: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t423 -endif9033: +endif9037: %t424 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t424, ptr %a425 store { ptr, i64, i64 } { ptr @.str.5989, i64 7, i64 0 }, ptr %a426 %t427 = call i32 @finch_str_eq(ptr %a425, ptr %a426) %t428 = icmp ne i32 %t427, 0 - br i1 %t428, label %then9034, label %endif9036 -then9034: + br i1 %t428, label %then9038, label %endif9040 +then9038: %t429 = load ptr, ptr %a1 %t430 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t429, %S.ast.Node %t430, i64 2) @@ -94538,11 +94564,11 @@ then9034: %t433 = load { ptr, i64, i64 }, ptr %t432 %t434 = extractvalue { ptr, i64, i64 } %t433, 1 %t435 = icmp uge i64 1, %t434 - br i1 %t435, label %range9037, label %inrange9038 -range9037: + br i1 %t435, label %range9041, label %inrange9042 +range9041: call void @finch_panic_index(ptr @.str.5990, i64 5655, i64 1, i64 %t434) unreachable -inrange9038: +inrange9042: %t436 = extractvalue { ptr, i64, i64 } %t433, 0 %t437 = getelementptr inbounds %S.ast.Node, ptr %t436, i64 1 %t438 = load %S.ast.Node, ptr %t437 @@ -94550,11 +94576,11 @@ inrange9038: store %S.gen.Val %t439, ptr %a440 %t441 = load ptr, ptr %a1 %t442 = icmp eq ptr %t441, null - br i1 %t442, label %panic9039, label %ok9040 -panic9039: + br i1 %t442, label %panic9043, label %ok9044 +panic9043: call void @finch_panic(ptr @.str.5992, i64 5656, ptr @.str.5993) unreachable -ok9040: +ok9044: %t443 = getelementptr inbounds %S.gen.Gen, ptr %t441, i32 0, i32 11 %t444 = getelementptr inbounds { ptr, i64, i64 }, ptr %t443, i32 0, i32 1 %t445 = load i64, ptr %t444 @@ -94567,11 +94593,11 @@ ok9040: %t451 = load { ptr, i64, i64 }, ptr %t450 %t452 = extractvalue { ptr, i64, i64 } %t451, 1 %t453 = icmp uge i64 2, %t452 - br i1 %t453, label %range9041, label %inrange9042 -range9041: + br i1 %t453, label %range9045, label %inrange9046 +range9045: call void @finch_panic_index(ptr @.str.5994, i64 5658, i64 2, i64 %t452) unreachable -inrange9042: +inrange9046: %t454 = extractvalue { ptr, i64, i64 } %t451, 0 %t455 = getelementptr inbounds %S.ast.Node, ptr %t454, i64 2 %t456 = load %S.ast.Node, ptr %t455 @@ -94663,14 +94689,14 @@ inrange9042: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t524 -endif9036: +endif9040: %t525 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t525, ptr %a526 store { ptr, i64, i64 } { ptr @.str.6003, i64 5, i64 0 }, ptr %a527 %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) %t529 = icmp ne i32 %t528, 0 - br i1 %t529, label %then9043, label %endif9045 -then9043: + br i1 %t529, label %then9047, label %endif9049 +then9047: %t530 = load ptr, ptr %a1 %t531 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t530, %S.ast.Node %t531, i64 1) @@ -94679,11 +94705,11 @@ then9043: %t534 = load { ptr, i64, i64 }, ptr %t533 %t535 = extractvalue { ptr, i64, i64 } %t534, 1 %t536 = icmp uge i64 1, %t535 - br i1 %t536, label %range9046, label %inrange9047 -range9046: + br i1 %t536, label %range9050, label %inrange9051 +range9050: call void @finch_panic_index(ptr @.str.6004, i64 5669, i64 1, i64 %t535) unreachable -inrange9047: +inrange9051: %t537 = extractvalue { ptr, i64, i64 } %t534, 0 %t538 = getelementptr inbounds %S.ast.Node, ptr %t537, i64 1 %t539 = load %S.ast.Node, ptr %t538 @@ -94757,14 +94783,14 @@ inrange9047: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t593 -endif9045: +endif9049: %t594 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t594, ptr %a595 store { ptr, i64, i64 } { ptr @.str.6012, i64 6, i64 0 }, ptr %a596 %t597 = call i32 @finch_str_eq(ptr %a595, ptr %a596) %t598 = icmp ne i32 %t597, 0 - br i1 %t598, label %then9048, label %endif9050 -then9048: + br i1 %t598, label %then9052, label %endif9054 +then9052: %t599 = load ptr, ptr %a1 %t600 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t599, %S.ast.Node %t600, i64 1) @@ -94774,11 +94800,11 @@ then9048: %t604 = load { ptr, i64, i64 }, ptr %t603 %t605 = extractvalue { ptr, i64, i64 } %t604, 1 %t606 = icmp uge i64 1, %t605 - br i1 %t606, label %range9051, label %inrange9052 -range9051: + br i1 %t606, label %range9055, label %inrange9056 +range9055: call void @finch_panic_index(ptr @.str.6013, i64 5678, i64 1, i64 %t605) unreachable -inrange9052: +inrange9056: %t607 = extractvalue { ptr, i64, i64 } %t604, 0 %t608 = getelementptr inbounds %S.ast.Node, ptr %t607, i64 1 %t609 = load %S.ast.Node, ptr %t608 @@ -94788,11 +94814,11 @@ inrange9052: %t613 = load { ptr, i64, i64 }, ptr %t612 %t614 = extractvalue { ptr, i64, i64 } %t613, 1 %t615 = icmp uge i64 1, %t614 - br i1 %t615, label %range9053, label %inrange9054 -range9053: + br i1 %t615, label %range9057, label %inrange9058 +range9057: call void @finch_panic_index(ptr @.str.6015, i64 5678, i64 1, i64 %t614) unreachable -inrange9054: +inrange9058: %t616 = extractvalue { ptr, i64, i64 } %t613, 0 %t617 = getelementptr inbounds %S.ast.Node, ptr %t616, i64 1 %t618 = load %S.ast.Node, ptr %t617 @@ -94861,14 +94887,14 @@ inrange9054: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t668 -endif9050: +endif9054: %t669 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t669, ptr %a670 store { ptr, i64, i64 } { ptr @.str.6023, i64 5, i64 0 }, ptr %a671 %t672 = call i32 @finch_str_eq(ptr %a670, ptr %a671) %t673 = icmp ne i32 %t672, 0 - br i1 %t673, label %then9055, label %endif9057 -then9055: + br i1 %t673, label %then9059, label %endif9061 +then9059: %t674 = load ptr, ptr %a1 %t675 = load %S.ast.Node, ptr %a2 call void @finch.gen.need(ptr %t674, %S.ast.Node %t675, i64 0) @@ -94918,7 +94944,7 @@ then9055: call void @finch_str_drop(ptr %a12) call void @finch_str_drop(ptr %a9) ret %S.gen.Val %t710 -endif9057: +endif9061: %t711 = load ptr, ptr %a1 %t712 = load %S.ast.Node, ptr %a2 %t713 = load { ptr, i64, i64 }, ptr %a9 @@ -95122,228 +95148,247 @@ define internal { ptr, i64, i64 } @finch.gen.assemble(ptr %p0) { entry: %a1 = alloca ptr, align 16 %a2 = alloca { ptr, i64, i64 }, align 16 - %a9 = alloca { ptr, i64, i64 }, align 16 - %a10 = alloca { ptr, i64, i64 }, align 16 - %a11 = alloca { ptr, i64, i64 }, align 16 - %a18 = alloca { ptr, i64, i64 }, align 16 - %a19 = alloca { ptr, i64, i64 }, align 16 - %a20 = alloca { ptr, i64, i64 }, align 16 - %a21 = alloca { ptr, i64, i64 }, align 16 - %a23 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 %a24 = alloca { ptr, i64, i64 }, align 16 %a25 = alloca { ptr, i64, i64 }, align 16 %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 %a35 = alloca { ptr, i64, i64 }, align 16 - %a36 = alloca { ptr, i64, i64 }, align 16 - %a38 = alloca { ptr, i64, i64 }, align 16 - %a39 = alloca { ptr, i64, i64 }, align 16 - %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 - %a43 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 %a44 = alloca { ptr, i64, i64 }, align 16 %a45 = alloca { ptr, i64, i64 }, align 16 %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 %a49 = alloca { ptr, i64, i64 }, align 16 %a50 = alloca { ptr, i64, i64 }, align 16 %a51 = alloca { ptr, i64, i64 }, align 16 %a52 = alloca { ptr, i64, i64 }, align 16 - %a53 = alloca { ptr, i64, i64 }, align 16 %a55 = alloca { ptr, i64, i64 }, align 16 %a56 = alloca { ptr, i64, i64 }, align 16 %a57 = alloca { ptr, i64, i64 }, align 16 %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 - %a68 = alloca { ptr, i64, i64 }, align 16 - %a69 = alloca { ptr, i64, i64 }, align 16 - %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 %a78 = alloca { ptr, i64, i64 }, align 16 - %a79 = alloca { ptr, i64, i64 }, align 16 - %a81 = alloca { ptr, i64, i64 }, align 16 - %a82 = alloca { ptr, i64, i64 }, align 16 - %a83 = alloca { ptr, i64, i64 }, align 16 %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 - %a94 = alloca { ptr, i64, i64 }, align 16 - %a95 = alloca { ptr, i64, i64 }, align 16 %a99 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 - %a102 = alloca { ptr, i64, i64 }, align 16 - %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 store ptr %p0, ptr %a1 store { ptr, i64, i64 } { ptr @.str.6107, i64 52, i64 0 }, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic9058, label %ok9059 -panic9058: + br i1 %t4, label %panic9062, label %ok9063 +panic9062: call void @finch_panic(ptr @.str.6108, i64 5776, ptr @.str.6109) unreachable -ok9059: +ok9063: %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 31 %t6 = getelementptr inbounds %S.platform.Target, ptr %t5, i32 0, i32 5 %t7 = load i1, ptr %t6 - br i1 %t7, label %then9060, label %endif9062 -then9060: - %t8 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t8, ptr %a10 - store { ptr, i64, i64 } { ptr @.str.6110, i64 17, i64 0 }, ptr %a11 - call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) - %t12 = load { ptr, i64, i64 }, ptr %a9 - %t13 = load ptr, ptr %a1 - %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic9063, label %ok9064 -panic9063: - call void @finch_panic(ptr @.str.6111, i64 5777, ptr @.str.6112) - unreachable -ok9064: - %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 31 - %t16 = getelementptr inbounds %S.platform.Target, ptr %t15, i32 0, i32 0 - %t17 = load { ptr, i64, i64 }, ptr %t16 - store { ptr, i64, i64 } %t12, ptr %a19 - store { ptr, i64, i64 } %t17, ptr %a20 - call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) - store { ptr, i64, i64 } %t12, ptr %a21 - call void @finch_str_drop(ptr %a21) - %t22 = load { ptr, i64, i64 }, ptr %a18 - store { ptr, i64, i64 } %t22, ptr %a24 - store { ptr, i64, i64 } { ptr @.str.6113, i64 3, i64 0 }, ptr %a25 - call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) - store { ptr, i64, i64 } %t22, ptr %a26 - call void @finch_str_drop(ptr %a26) - %t27 = load { ptr, i64, i64 }, ptr %a23 - %t28 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t27, ptr %a2 - store { ptr, i64, i64 } %t28, ptr %a29 - call void @finch_str_drop(ptr %a29) - br label %endif9062 -endif9062: - %t30 = load { ptr, i64, i64 }, ptr %a2 - %t31 = load ptr, ptr %a1 - %t32 = icmp eq ptr %t31, null - br i1 %t32, label %panic9065, label %ok9066 -panic9065: - call void @finch_panic(ptr @.str.6114, i64 5779, ptr @.str.6115) - unreachable -ok9066: - %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 2 - %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6116, i64 1, i64 0 }, ptr %a35 - call void @finch_str_join(ptr %a36, ptr %t33, ptr %a35) - %t37 = load { ptr, i64, i64 }, ptr %a36 - store { ptr, i64, i64 } %t30, ptr %a39 - store { ptr, i64, i64 } %t37, ptr %a40 - call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) - store { ptr, i64, i64 } %t37, ptr %a41 - call void @finch_str_drop(ptr %a41) - %t42 = load { ptr, i64, i64 }, ptr %a38 - store { ptr, i64, i64 } %t42, ptr %a44 - store { ptr, i64, i64 } { ptr @.str.6117, i64 2, i64 0 }, ptr %a45 - call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) - store { ptr, i64, i64 } %t42, ptr %a46 - call void @finch_str_drop(ptr %a46) - %t47 = load { ptr, i64, i64 }, ptr %a43 - %t48 = call { ptr, i64, i64 } @finch.gen.runtimeDecls() - store { ptr, i64, i64 } %t47, ptr %a50 - store { ptr, i64, i64 } %t48, ptr %a51 - call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) - store { ptr, i64, i64 } %t47, ptr %a52 - call void @finch_str_drop(ptr %a52) - store { ptr, i64, i64 } %t48, ptr %a53 - call void @finch_str_drop(ptr %a53) - %t54 = load { ptr, i64, i64 }, ptr %a49 - store { ptr, i64, i64 } %t54, ptr %a56 - store { ptr, i64, i64 } { ptr @.str.6118, i64 1, i64 0 }, ptr %a57 - call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) - store { ptr, i64, i64 } %t54, ptr %a58 - call void @finch_str_drop(ptr %a58) - %t59 = load { ptr, i64, i64 }, ptr %a55 - %t60 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t59, ptr %a2 - store { ptr, i64, i64 } %t60, ptr %a61 - call void @finch_str_drop(ptr %a61) - %t62 = load ptr, ptr %a1 - %t63 = icmp eq ptr %t62, null - br i1 %t63, label %panic9067, label %ok9068 + br label %logic.from9064 +logic.from9064: + br i1 %t7, label %logic.end9066, label %logic.rhs9065 +logic.rhs9065: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic9067, label %ok9068 panic9067: - call void @finch_panic(ptr @.str.6119, i64 5780, ptr @.str.6120) + call void @finch_panic(ptr @.str.6110, i64 5776, ptr @.str.6111) unreachable ok9068: - %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 30 - %t65 = load i1, ptr %t64 - br i1 %t65, label %then9069, label %endif9071 -then9069: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 31 + %t11 = getelementptr inbounds %S.platform.Target, ptr %t10, i32 0, i32 1 + %t12 = load i1, ptr %t11 + br label %logic.rend9069 +logic.rend9069: + br label %logic.end9066 +logic.end9066: + %t13 = phi i1 [ true, %logic.from9064 ], [ %t12, %logic.rend9069 ] + br i1 %t13, label %then9070, label %endif9072 +then9070: + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6112, i64 17, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic9073, label %ok9074 +panic9073: + call void @finch_panic(ptr @.str.6113, i64 5777, ptr @.str.6114) + unreachable +ok9074: + %t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 31 + %t22 = getelementptr inbounds %S.platform.Target, ptr %t21, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t18, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t18, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6115, i64 3, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a2 + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_str_drop(ptr %a35) + br label %endif9072 +endif9072: + %t36 = load { ptr, i64, i64 }, ptr %a2 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic9075, label %ok9076 +panic9075: + call void @finch_panic(ptr @.str.6116, i64 5779, ptr @.str.6117) + unreachable +ok9076: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 2 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6118, i64 1, i64 0 }, ptr %a41 + call void @finch_str_join(ptr %a42, ptr %t39, ptr %a41) + %t43 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t36, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6119, i64 2, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = call { ptr, i64, i64 } @finch.gen.runtimeDecls() + store { ptr, i64, i64 } %t53, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t53, ptr %a58 + call void @finch_str_drop(ptr %a58) + store { ptr, i64, i64 } %t54, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.6120, i64 1, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 %t66 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t66, ptr %a68 - store { ptr, i64, i64 } { ptr @.str.6121, i64 62, i64 0 }, ptr %a69 - call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) - %t70 = load { ptr, i64, i64 }, ptr %a67 - %t71 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t70, ptr %a2 - store { ptr, i64, i64 } %t71, ptr %a72 - call void @finch_str_drop(ptr %a72) - br label %endif9071 -endif9071: - %t73 = load { ptr, i64, i64 }, ptr %a2 - %t74 = load ptr, ptr %a1 - %t75 = icmp eq ptr %t74, null - br i1 %t75, label %panic9072, label %ok9073 -panic9072: - call void @finch_panic(ptr @.str.6122, i64 5783, ptr @.str.6123) + store { ptr, i64, i64 } %t65, ptr %a2 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic9077, label %ok9078 +panic9077: + call void @finch_panic(ptr @.str.6121, i64 5780, ptr @.str.6122) unreachable -ok9073: - %t76 = getelementptr inbounds %S.gen.Gen, ptr %t74, i32 0, i32 3 - %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6124, i64 1, i64 0 }, ptr %a78 - call void @finch_str_join(ptr %a79, ptr %t76, ptr %a78) - %t80 = load { ptr, i64, i64 }, ptr %a79 - store { ptr, i64, i64 } %t73, ptr %a82 - store { ptr, i64, i64 } %t80, ptr %a83 - call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) - store { ptr, i64, i64 } %t80, ptr %a84 - call void @finch_str_drop(ptr %a84) - %t85 = load { ptr, i64, i64 }, ptr %a81 - %t86 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t85, ptr %a2 - store { ptr, i64, i64 } %t86, ptr %a87 - call void @finch_str_drop(ptr %a87) - %t88 = load ptr, ptr %a1 - %t89 = icmp eq ptr %t88, null - br i1 %t89, label %panic9074, label %ok9075 -panic9074: - call void @finch_panic(ptr @.str.6125, i64 5784, ptr @.str.6126) +ok9078: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 30 + %t71 = load i1, ptr %t70 + br i1 %t71, label %then9079, label %endif9081 +then9079: + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6123, i64 62, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a73 + %t77 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a2 + store { ptr, i64, i64 } %t77, ptr %a78 + call void @finch_str_drop(ptr %a78) + br label %endif9081 +endif9081: + %t79 = load { ptr, i64, i64 }, ptr %a2 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic9082, label %ok9083 +panic9082: + call void @finch_panic(ptr @.str.6124, i64 5783, ptr @.str.6125) unreachable -ok9075: - %t90 = getelementptr inbounds %S.gen.Gen, ptr %t88, i32 0, i32 30 - %t91 = load i1, ptr %t90 - br i1 %t91, label %then9076, label %endif9078 -then9076: +ok9083: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 3 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6126, i64 1, i64 0 }, ptr %a84 + call void @finch_str_join(ptr %a85, ptr %t82, ptr %a84) + %t86 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t79, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t86, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 %t92 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t92, ptr %a94 - store { ptr, i64, i64 } { ptr @.str.6127, i64 1, i64 0 }, ptr %a95 - call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) - %t96 = load { ptr, i64, i64 }, ptr %a93 - %t97 = load ptr, ptr %a1 - %t98 = call { ptr, i64, i64 } @finch.gen.dbgModule(ptr %t97) - store { ptr, i64, i64 } %t96, ptr %a100 - store { ptr, i64, i64 } %t98, ptr %a101 + store { ptr, i64, i64 } %t91, ptr %a2 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic9084, label %ok9085 +panic9084: + call void @finch_panic(ptr @.str.6127, i64 5784, ptr @.str.6128) + unreachable +ok9085: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 30 + %t97 = load i1, ptr %t96 + br i1 %t97, label %then9086, label %endif9088 +then9086: + %t98 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6129, i64 1, i64 0 }, ptr %a101 call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) - store { ptr, i64, i64 } %t96, ptr %a102 - call void @finch_str_drop(ptr %a102) - store { ptr, i64, i64 } %t98, ptr %a103 - call void @finch_str_drop(ptr %a103) - %t104 = load { ptr, i64, i64 }, ptr %a99 - %t105 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } %t104, ptr %a2 - store { ptr, i64, i64 } %t105, ptr %a106 - call void @finch_str_drop(ptr %a106) - br label %endif9078 -endif9078: - %t107 = load { ptr, i64, i64 }, ptr %a2 - ret { ptr, i64, i64 } %t107 + %t102 = load { ptr, i64, i64 }, ptr %a99 + %t103 = load ptr, ptr %a1 + %t104 = call { ptr, i64, i64 } @finch.gen.dbgModule(ptr %t103) + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a105 + %t111 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t110, ptr %a2 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + br label %endif9088 +endif9088: + %t113 = load { ptr, i64, i64 }, ptr %a2 + ret { ptr, i64, i64 } %t113 } define internal void @finch.copy.arr_S_ast_Program(ptr %dst, ptr %src) { @@ -95355,20 +95400,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond9079 -n.cond9079: + br label %n.cond9089 +n.cond9089: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body9080, label %n.end9081 -n.body9080: + br i1 %t7, label %n.body9090, label %n.end9091 +n.body9090: %t8 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.ast.Program, ptr %t2, i64 %t6 call void @finch.copy.S_ast_Program(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond9079 -n.end9081: + br label %n.cond9089 +n.end9091: ret void } @@ -95402,12 +95447,12 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond9082 -n.cond9082: + br label %n.cond9092 +n.cond9092: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9083, label %n.end9084 -n.body9083: + br i1 %t5, label %n.body9093, label %n.end9094 +n.body9093: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 @@ -95417,94 +95462,14 @@ n.body9083: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 - br i1 %t14, label %entry.live9085, label %entry.next9086 -entry.live9085: + br i1 %t14, label %entry.live9095, label %entry.next9096 +entry.live9095: %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 1 %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 2 %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 call void @finch.copy.S_cimport_CFunc(ptr %t17, ptr %t18) - br label %entry.next9086 -entry.next9086: - %t19 = load i64, ptr %a3 - %t20 = add i64 %t19, 1 - store i64 %t20, ptr %a3 - br label %n.cond9082 -n.end9084: - ret void -} - -define internal void @finch.copy.map_str_S_cimport_CConst(ptr %dst, ptr %src) { -entry: - %a3 = alloca i64, align 16 - call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64)) - %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 - %t2 = load i64, ptr %t1 - store i64 0, ptr %a3 - br label %n.cond9087 -n.cond9087: - %t4 = load i64, ptr %a3 - %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9088, label %n.end9089 -n.body9088: - %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 - %t7 = load ptr, ptr %t6 - %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 - %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 - %t10 = load ptr, ptr %t9 - %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t10, i64 %t4 - %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 - %t13 = load i64, ptr %t12 - %t14 = icmp ne i64 %t13, 0 - br i1 %t14, label %entry.live9090, label %entry.next9091 -entry.live9090: - %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 1 - %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 - call void @finch_str_copy(ptr %t15, ptr %t16) - %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 2 - %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 - call void @finch.copy.S_cimport_CConst(ptr %t17, ptr %t18) - br label %entry.next9091 -entry.next9091: - %t19 = load i64, ptr %a3 - %t20 = add i64 %t19, 1 - store i64 %t20, ptr %a3 - br label %n.cond9087 -n.end9089: - ret void -} - -define internal void @finch.copy.map_str_S_ast_Type(ptr %dst, ptr %src) { -entry: - %a3 = alloca i64, align 16 - call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64)) - %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 - %t2 = load i64, ptr %t1 - store i64 0, ptr %a3 - br label %n.cond9092 -n.cond9092: - %t4 = load i64, ptr %a3 - %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9093, label %n.end9094 -n.body9093: - %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 - %t7 = load ptr, ptr %t6 - %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 - %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 - %t10 = load ptr, ptr %t9 - %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t10, i64 %t4 - %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 - %t13 = load i64, ptr %t12 - %t14 = icmp ne i64 %t13, 0 - br i1 %t14, label %entry.live9095, label %entry.next9096 -entry.live9095: - %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 1 - %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 - call void @finch_str_copy(ptr %t15, ptr %t16) - %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 2 - %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 - call void @finch.copy.S_ast_Type(ptr %t17, ptr %t18) br label %entry.next9096 entry.next9096: %t19 = load i64, ptr %a3 @@ -95515,10 +95480,10 @@ n.end9094: ret void } -define internal void @finch.copy.map_str_S_cimport_CStruct(ptr %dst, ptr %src) { +define internal void @finch.copy.map_str_S_cimport_CConst(ptr %dst, ptr %src) { entry: %a3 = alloca i64, align 16 - call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64)) + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64)) %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 @@ -95530,21 +95495,21 @@ n.cond9097: n.body9098: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 %t7 = load ptr, ptr %t6 - %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 %t10 = load ptr, ptr %t9 - %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t10, i64 %t4 - %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 %t13 = load i64, ptr %t12 %t14 = icmp ne i64 %t13, 0 br i1 %t14, label %entry.live9100, label %entry.next9101 entry.live9100: - %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 1 - %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 call void @finch_str_copy(ptr %t15, ptr %t16) - %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 2 - %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 - call void @finch.copy.S_cimport_CStruct(ptr %t17, ptr %t18) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CConst(ptr %t17, ptr %t18) br label %entry.next9101 entry.next9101: %t19 = load i64, ptr %a3 @@ -95555,6 +95520,86 @@ n.end9099: ret void } +define internal void @finch.copy.map_str_S_ast_Type(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9102 +n.cond9102: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9103, label %n.end9104 +n.body9103: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9105, label %entry.next9106 +entry.live9105: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_ast_Type(ptr %t17, ptr %t18) + br label %entry.next9106 +entry.next9106: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9102 +n.end9104: + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CStruct(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9107 +n.cond9107: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9108, label %n.end9109 +n.body9108: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9110, label %entry.next9111 +entry.live9110: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CStruct(ptr %t17, ptr %t18) + br label %entry.next9111 +entry.next9111: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9107 +n.end9109: + ret void +} + define internal void @finch.copy.S_cimport_CImports(ptr %dst, ptr %src) { entry: @@ -95585,19 +95630,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9170 -n.cond9170: + br label %n.cond9180 +n.cond9180: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9171, label %n.end9172 -n.body9171: + br i1 %t6, label %n.body9181, label %n.end9182 +n.body9181: %t7 = getelementptr inbounds %S.gen.Pending, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Pending(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9170 -n.end9172: + br label %n.cond9180 +n.end9182: call void @finch_arr_free(ptr %a) ret void } @@ -95609,19 +95654,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9173 -n.cond9173: + br label %n.cond9183 +n.cond9183: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9174, label %n.end9175 -n.body9174: + br i1 %t6, label %n.body9184, label %n.end9185 +n.body9184: %t7 = getelementptr inbounds %S.gen.Loop, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Loop(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9173 -n.end9175: + br label %n.cond9183 +n.end9185: call void @finch_arr_free(ptr %a) ret void } @@ -95633,19 +95678,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9176 -n.cond9176: + br label %n.cond9186 +n.cond9186: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9177, label %n.end9178 -n.body9177: + br i1 %t6, label %n.body9187, label %n.end9188 +n.body9187: %t7 = getelementptr inbounds %S.gen.FnSig, ptr %t1, i64 %t5 call void @finch.drop.S_gen_FnSig(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9176 -n.end9178: + br label %n.cond9186 +n.end9188: call void @finch_arr_free(ptr %a) ret void } @@ -95657,19 +95702,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9179 -n.cond9179: + br label %n.cond9189 +n.cond9189: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9180, label %n.end9181 -n.body9180: + br i1 %t6, label %n.body9190, label %n.end9191 +n.body9190: %t7 = getelementptr inbounds %S.gen.StructDef, ptr %t1, i64 %t5 call void @finch.drop.S_gen_StructDef(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9179 -n.end9181: + br label %n.cond9189 +n.end9191: call void @finch_arr_free(ptr %a) ret void } @@ -95681,19 +95726,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9182 -n.cond9182: + br label %n.cond9192 +n.cond9192: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9183, label %n.end9184 -n.body9183: + br i1 %t6, label %n.body9193, label %n.end9194 +n.body9193: %t7 = getelementptr inbounds %S.gen.Template, ptr %t1, i64 %t5 call void @finch.drop.S_gen_Template(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9182 -n.end9184: + br label %n.cond9192 +n.end9194: call void @finch_arr_free(ptr %a) ret void } @@ -95705,19 +95750,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9185 -n.cond9185: + br label %n.cond9195 +n.cond9195: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9186, label %n.end9187 -n.body9186: + br i1 %t6, label %n.body9196, label %n.end9197 +n.body9196: %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %t1, i64 %t5 call void @finch.drop.S_gen_EnumDef(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9185 -n.end9187: + br label %n.cond9195 +n.end9197: call void @finch_arr_free(ptr %a) ret void } @@ -95729,19 +95774,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond9188 -n.cond9188: + br label %n.cond9198 +n.cond9198: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body9189, label %n.end9190 -n.body9189: + br i1 %t6, label %n.body9199, label %n.end9200 +n.body9199: %t7 = getelementptr inbounds %S.gen.SumDef, ptr %t1, i64 %t5 call void @finch.drop.S_gen_SumDef(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond9188 -n.end9190: + br label %n.cond9198 +n.end9200: call void @finch_arr_free(ptr %a) ret void } @@ -95752,30 +95797,30 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond9191 -n.cond9191: + br label %n.cond9201 +n.cond9201: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9192, label %n.end9193 -n.body9192: + br i1 %t5, label %n.body9202, label %n.end9203 +n.body9202: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live9194, label %entry.next9195 -entry.live9194: + br i1 %t11, label %entry.live9204, label %entry.next9205 +entry.live9204: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 2 - br label %entry.next9195 -entry.next9195: + br label %entry.next9205 +entry.next9205: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond9191 -n.end9193: + br label %n.cond9201 +n.end9203: call void @finch_map_free(ptr %a) ret void } @@ -96085,22 +96130,22 @@ entry: store ptr %a45, ptr %a46 %t47 = load ptr, ptr %a46 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic9102, label %ok9103 -panic9102: - call void @finch_panic(ptr @.str.6128, i64 5794, ptr @.str.6129) + br i1 %t48, label %panic9112, label %ok9113 +panic9112: + call void @finch_panic(ptr @.str.6130, i64 5794, ptr @.str.6131) unreachable -ok9103: +ok9113: %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 30 %t50 = load i1, ptr %t49 - br i1 %t50, label %then9104, label %endif9106 -then9104: + br i1 %t50, label %then9114, label %endif9116 +then9114: %t51 = load ptr, ptr %a46 %t52 = icmp eq ptr %t51, null - br i1 %t52, label %panic9107, label %ok9108 -panic9107: - call void @finch_panic(ptr @.str.6130, i64 5796, ptr @.str.6131) + br i1 %t52, label %panic9117, label %ok9118 +panic9117: + call void @finch_panic(ptr @.str.6132, i64 5796, ptr @.str.6133) unreachable -ok9108: +ok9118: %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 33 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 %t55 = load i64, ptr %t54 @@ -96108,15 +96153,15 @@ ok9108: call void @finch_arr_reserve(ptr %t53, i64 %t56, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t57 = load ptr, ptr %t53 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i64 %t55 - store { ptr, i64, i64 } { ptr @.str.6132, i64 0, i64 0 }, ptr %t58 + store { ptr, i64, i64 } { ptr @.str.6134, i64 0, i64 0 }, ptr %t58 store i64 %t56, ptr %t54 %t59 = load ptr, ptr %a46 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic9109, label %ok9110 -panic9109: - call void @finch_panic(ptr @.str.6133, i64 5797, ptr @.str.6134) + br i1 %t60, label %panic9119, label %ok9120 +panic9119: + call void @finch_panic(ptr @.str.6135, i64 5797, ptr @.str.6136) unreachable -ok9110: +ok9120: %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 33 %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1 %t63 = load i64, ptr %t62 @@ -96124,15 +96169,15 @@ ok9110: call void @finch_arr_reserve(ptr %t61, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t65 = load ptr, ptr %t61 %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 - store { ptr, i64, i64 } { ptr @.str.6135, i64 33, i64 0 }, ptr %t66 + store { ptr, i64, i64 } { ptr @.str.6137, i64 33, i64 0 }, ptr %t66 store i64 %t64, ptr %t62 %t67 = load ptr, ptr %a46 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic9111, label %ok9112 -panic9111: - call void @finch_panic(ptr @.str.6136, i64 5798, ptr @.str.6137) + br i1 %t68, label %panic9121, label %ok9122 +panic9121: + call void @finch_panic(ptr @.str.6138, i64 5798, ptr @.str.6139) unreachable -ok9112: +ok9122: %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 33 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 %t71 = load i64, ptr %t70 @@ -96140,49 +96185,49 @@ ok9112: call void @finch_arr_reserve(ptr %t69, i64 %t72, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t73 = load ptr, ptr %t69 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t71 - store { ptr, i64, i64 } { ptr @.str.6138, i64 38, i64 0 }, ptr %t74 + store { ptr, i64, i64 } { ptr @.str.6140, i64 38, i64 0 }, ptr %t74 store i64 %t72, ptr %t70 store i64 0, ptr %a75 - br label %each.cond9113 -each.cond9113: + br label %each.cond9123 +each.cond9123: %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t77 = load i64, ptr %t76 %t78 = load i64, ptr %a75 %t79 = icmp slt i64 %t78, %t77 - br i1 %t79, label %each.body9114, label %each.end9116 -each.body9114: + br i1 %t79, label %each.body9124, label %each.end9126 +each.body9124: %t80 = load ptr, ptr %a2 %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i64 %t78 %t82 = load { ptr, i64, i64 }, ptr %t81 store { ptr, i64, i64 } %t82, ptr %a83 %t84 = load ptr, ptr %a46 %t85 = icmp eq ptr %t84, null - br i1 %t85, label %panic9117, label %ok9118 -panic9117: - call void @finch_panic(ptr @.str.6139, i64 5800, ptr @.str.6140) + br i1 %t85, label %panic9127, label %ok9128 +panic9127: + call void @finch_panic(ptr @.str.6141, i64 5800, ptr @.str.6142) unreachable -ok9118: +ok9128: %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 35 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 %t88 = load ptr, ptr %a46 %t89 = load { ptr, i64, i64 }, ptr %a83 - store { ptr, i64, i64 } { ptr @.str.6141, i64 19, i64 0 }, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.6143, i64 19, i64 0 }, ptr %a91 store { ptr, i64, i64 } %t89, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) %t93 = load { ptr, i64, i64 }, ptr %a90 store { ptr, i64, i64 } %t93, ptr %a95 - store { ptr, i64, i64 } { ptr @.str.6142, i64 15, i64 0 }, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.6144, i64 15, i64 0 }, ptr %a96 call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) store { ptr, i64, i64 } %t93, ptr %a97 call void @finch_str_drop(ptr %a97) %t98 = load { ptr, i64, i64 }, ptr %a94 %t99 = load ptr, ptr %a46 %t100 = icmp eq ptr %t99, null - br i1 %t100, label %panic9119, label %ok9120 -panic9119: - call void @finch_panic(ptr @.str.6143, i64 5800, ptr @.str.6144) + br i1 %t100, label %panic9129, label %ok9130 +panic9129: + call void @finch_panic(ptr @.str.6145, i64 5800, ptr @.str.6146) unreachable -ok9120: +ok9130: %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 32 %t102 = load { ptr, i64, i64 }, ptr %t101 store { ptr, i64, i64 } %t98, ptr %a104 @@ -96192,7 +96237,7 @@ ok9120: call void @finch_str_drop(ptr %a106) %t107 = load { ptr, i64, i64 }, ptr %a103 store { ptr, i64, i64 } %t107, ptr %a109 - store { ptr, i64, i64 } { ptr @.str.6145, i64 2, i64 0 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.6147, i64 2, i64 0 }, ptr %a110 call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) store { ptr, i64, i64 } %t107, ptr %a111 call void @finch_str_drop(ptr %a111) @@ -96207,108 +96252,108 @@ ok9120: %t118 = getelementptr inbounds i64, ptr %t117, i64 %t115 store i64 %t113, ptr %t118 store i64 %t116, ptr %t87 - br label %each.step9115 -each.step9115: + br label %each.step9125 +each.step9125: %t119 = load i64, ptr %a75 %t120 = add i64 %t119, 1 store i64 %t120, ptr %a75 - br label %each.cond9113 -each.end9116: + br label %each.cond9123 +each.end9126: %t121 = load ptr, ptr %a46 %t122 = icmp eq ptr %t121, null - br i1 %t122, label %panic9121, label %ok9122 -panic9121: - call void @finch_panic(ptr @.str.6147, i64 5802, ptr @.str.6148) + br i1 %t122, label %panic9131, label %ok9132 +panic9131: + call void @finch_panic(ptr @.str.6149, i64 5802, ptr @.str.6150) unreachable -ok9122: +ok9132: %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 35 %t124 = load { ptr, i64, i64 }, ptr %t123 %t125 = extractvalue { ptr, i64, i64 } %t124, 1 %t126 = icmp uge i64 0, %t125 - br i1 %t126, label %range9123, label %inrange9124 -range9123: - call void @finch_panic_index(ptr @.str.6149, i64 5802, i64 0, i64 %t125) + br i1 %t126, label %range9133, label %inrange9134 +range9133: + call void @finch_panic_index(ptr @.str.6151, i64 5802, i64 0, i64 %t125) unreachable -inrange9124: +inrange9134: %t127 = extractvalue { ptr, i64, i64 } %t124, 0 %t128 = getelementptr inbounds i64, ptr %t127, i64 0 %t129 = load i64, ptr %t128 call void @finch_str_from_int(ptr %a130, i64 %t129) %t131 = load { ptr, i64, i64 }, ptr %a130 - store { ptr, i64, i64 } { ptr @.str.6146, i64 52, i64 0 }, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.6148, i64 52, i64 0 }, ptr %a133 store { ptr, i64, i64 } %t131, ptr %a134 call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) store { ptr, i64, i64 } %t131, ptr %a135 call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t136, ptr %a138 - store { ptr, i64, i64 } { ptr @.str.6150, i64 84, i64 0 }, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.6152, i64 84, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) %t141 = load { ptr, i64, i64 }, ptr %a137 %t142 = load ptr, ptr %a46 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic9125, label %ok9126 -panic9125: - call void @finch_panic(ptr @.str.6151, i64 5802, ptr @.str.6152) + br i1 %t143, label %panic9135, label %ok9136 +panic9135: + call void @finch_panic(ptr @.str.6153, i64 5802, ptr @.str.6154) unreachable -ok9126: +ok9136: %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 33 %t145 = load { ptr, i64, i64 }, ptr %t144 %t146 = extractvalue { ptr, i64, i64 } %t145, 1 %t147 = icmp uge i64 0, %t146 - br i1 %t147, label %range9127, label %inrange9128 -range9127: - call void @finch_panic_index(ptr @.str.6153, i64 5802, i64 0, i64 %t146) + br i1 %t147, label %range9137, label %inrange9138 +range9137: + call void @finch_panic_index(ptr @.str.6155, i64 5802, i64 0, i64 %t146) unreachable -inrange9128: +inrange9138: %t148 = extractvalue { ptr, i64, i64 } %t145, 0 %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i64 0 %t150 = load { ptr, i64, i64 }, ptr %t149 store { ptr, i64, i64 } %t141, ptr %t149 store { ptr, i64, i64 } %t150, ptr %a151 call void @finch_str_drop(ptr %a151) - br label %endif9106 -endif9106: + br label %endif9116 +endif9116: %t152 = load ptr, ptr %a46 call void @finch.gen.declare(ptr %t152) %t153 = load ptr, ptr %a46 - %t154 = call i64 @finch.gen.findFn(ptr %t153, { ptr, i64, i64 } { ptr @.str.6154, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6155, i64 4, i64 0 }) + %t154 = call i64 @finch.gen.findFn(ptr %t153, { ptr, i64, i64 } { ptr @.str.6156, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6157, i64 4, i64 0 }) store i64 %t154, ptr %a155 %t156 = load i1, ptr %a7 - br i1 %t156, label %then9129, label %else9130 -then9129: + br i1 %t156, label %then9139, label %else9140 +then9139: %t157 = load i64, ptr %a155 %t158 = icmp sge i64 %t157, 0 - br i1 %t158, label %then9132, label %endif9134 -then9132: + br i1 %t158, label %then9142, label %endif9144 +then9142: %t159 = load ptr, ptr %a46 %t160 = load ptr, ptr %a46 %t161 = icmp eq ptr %t160, null - br i1 %t161, label %panic9135, label %ok9136 -panic9135: - call void @finch_panic(ptr @.str.6156, i64 5808, ptr @.str.6157) + br i1 %t161, label %panic9145, label %ok9146 +panic9145: + call void @finch_panic(ptr @.str.6158, i64 5808, ptr @.str.6159) unreachable -ok9136: +ok9146: %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 0 %t163 = load ptr, ptr %a46 %t164 = icmp eq ptr %t163, null - br i1 %t164, label %panic9137, label %ok9138 -panic9137: - call void @finch_panic(ptr @.str.6158, i64 5808, ptr @.str.6159) + br i1 %t164, label %panic9147, label %ok9148 +panic9147: + call void @finch_panic(ptr @.str.6160, i64 5808, ptr @.str.6161) unreachable -ok9138: +ok9148: %t165 = getelementptr inbounds %S.gen.Gen, ptr %t163, i32 0, i32 15 %t166 = load i64, ptr %a155 %t167 = load { ptr, i64, i64 }, ptr %t165 %t168 = extractvalue { ptr, i64, i64 } %t167, 1 %t169 = icmp uge i64 %t166, %t168 - br i1 %t169, label %range9139, label %inrange9140 -range9139: - call void @finch_panic_index(ptr @.str.6160, i64 5808, i64 %t166, i64 %t168) + br i1 %t169, label %range9149, label %inrange9150 +range9149: + call void @finch_panic_index(ptr @.str.6162, i64 5808, i64 %t166, i64 %t168) unreachable -inrange9140: +inrange9150: %t170 = extractvalue { ptr, i64, i64 } %t167, 0 %t171 = getelementptr inbounds %S.gen.FnSig, ptr %t170, i64 %t166 %t172 = getelementptr inbounds %S.gen.FnSig, ptr %t171, i32 0, i32 16 @@ -96316,31 +96361,31 @@ inrange9140: %t174 = load { ptr, i64, i64 }, ptr %t162 %t175 = extractvalue { ptr, i64, i64 } %t174, 1 %t176 = icmp uge i64 %t173, %t175 - br i1 %t176, label %range9141, label %inrange9142 -range9141: - call void @finch_panic_index(ptr @.str.6161, i64 5808, i64 %t173, i64 %t175) + br i1 %t176, label %range9151, label %inrange9152 +range9151: + call void @finch_panic_index(ptr @.str.6163, i64 5808, i64 %t173, i64 %t175) unreachable -inrange9142: +inrange9152: %t177 = extractvalue { ptr, i64, i64 } %t174, 0 %t178 = getelementptr inbounds %S.ast.Program, ptr %t177, i64 %t173 %t179 = getelementptr inbounds %S.ast.Program, ptr %t178, i32 0, i32 8 %t180 = load ptr, ptr %a46 %t181 = icmp eq ptr %t180, null - br i1 %t181, label %panic9143, label %ok9144 -panic9143: - call void @finch_panic(ptr @.str.6162, i64 5808, ptr @.str.6163) + br i1 %t181, label %panic9153, label %ok9154 +panic9153: + call void @finch_panic(ptr @.str.6164, i64 5808, ptr @.str.6165) unreachable -ok9144: +ok9154: %t182 = getelementptr inbounds %S.gen.Gen, ptr %t180, i32 0, i32 15 %t183 = load i64, ptr %a155 %t184 = load { ptr, i64, i64 }, ptr %t182 %t185 = extractvalue { ptr, i64, i64 } %t184, 1 %t186 = icmp uge i64 %t183, %t185 - br i1 %t186, label %range9145, label %inrange9146 -range9145: - call void @finch_panic_index(ptr @.str.6164, i64 5808, i64 %t183, i64 %t185) + br i1 %t186, label %range9155, label %inrange9156 +range9155: + call void @finch_panic_index(ptr @.str.6166, i64 5808, i64 %t183, i64 %t185) unreachable -inrange9146: +inrange9156: %t187 = extractvalue { ptr, i64, i64 } %t184, 0 %t188 = getelementptr inbounds %S.gen.FnSig, ptr %t187, i64 %t183 %t189 = getelementptr inbounds %S.gen.FnSig, ptr %t188, i32 0, i32 17 @@ -96348,106 +96393,106 @@ inrange9146: %t191 = load { ptr, i64, i64 }, ptr %t179 %t192 = extractvalue { ptr, i64, i64 } %t191, 1 %t193 = icmp uge i64 %t190, %t192 - br i1 %t193, label %range9147, label %inrange9148 -range9147: - call void @finch_panic_index(ptr @.str.6165, i64 5808, i64 %t190, i64 %t192) + br i1 %t193, label %range9157, label %inrange9158 +range9157: + call void @finch_panic_index(ptr @.str.6167, i64 5808, i64 %t190, i64 %t192) unreachable -inrange9148: +inrange9158: %t194 = extractvalue { ptr, i64, i64 } %t191, 0 %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t190 %t196 = load %S.ast.Node, ptr %t195 - call void @finch.gen.fail(ptr %t159, %S.ast.Node %t196, { ptr, i64, i64 } { ptr @.str.6166, i64 82, i64 0 }) - br label %endif9134 -endif9134: - br label %endif9131 -else9130: + call void @finch.gen.fail(ptr %t159, %S.ast.Node %t196, { ptr, i64, i64 } { ptr @.str.6168, i64 82, i64 0 }) + br label %endif9144 +endif9144: + br label %endif9141 +else9140: %t197 = load i64, ptr %a155 %t198 = icmp slt i64 %t197, 0 - br i1 %t198, label %then9149, label %endif9151 -then9149: + br i1 %t198, label %then9159, label %endif9161 +then9159: %t199 = load { ptr, i64, i64 }, ptr %a2 %t200 = extractvalue { ptr, i64, i64 } %t199, 1 %t201 = icmp uge i64 0, %t200 - br i1 %t201, label %range9152, label %inrange9153 -range9152: - call void @finch_panic_index(ptr @.str.6167, i64 5811, i64 0, i64 %t200) + br i1 %t201, label %range9162, label %inrange9163 +range9162: + call void @finch_panic_index(ptr @.str.6169, i64 5811, i64 0, i64 %t200) unreachable -inrange9153: +inrange9163: %t202 = extractvalue { ptr, i64, i64 } %t199, 0 %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 0 %t204 = load { ptr, i64, i64 }, ptr %t203 store { ptr, i64, i64 } %t204, ptr %a206 - store { ptr, i64, i64 } { ptr @.str.6168, i64 64, i64 0 }, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.6170, i64 64, i64 0 }, ptr %a207 call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207) %t208 = load { ptr, i64, i64 }, ptr %a205 %t209 = extractvalue { ptr, i64, i64 } %t208, 1 %t210 = trunc i64 %t209 to i32 %t211 = extractvalue { ptr, i64, i64 } %t208, 0 %t212 = icmp eq ptr %t211, null - %t213 = select i1 %t212, ptr @.str.6169, ptr %t211 - %t214 = call i32 (ptr, ...) @printf(ptr @.str.6170, i32 %t210, ptr %t213) + %t213 = select i1 %t212, ptr @.str.6171, ptr %t211 + %t214 = call i32 (ptr, ...) @printf(ptr @.str.6172, i32 %t210, ptr %t213) store { ptr, i64, i64 } %t208, ptr %a215 call void @finch_str_drop(ptr %a215) - %t216 = call i32 (ptr, ...) @printf(ptr @.str.6171) + %t216 = call i32 (ptr, ...) @printf(ptr @.str.6173) %t217 = trunc i64 1 to i32 %t218 = call i32 @fflush(ptr null) call void @exit(i32 %t217) - br label %endif9151 -endif9151: - br label %endif9131 -endif9131: + br label %endif9161 +endif9161: + br label %endif9141 +endif9141: store i64 0, ptr %a219 - br label %while.cond9154 -while.cond9154: + br label %while.cond9164 +while.cond9164: %t220 = load i64, ptr %a219 %t221 = load ptr, ptr %a46 %t222 = icmp eq ptr %t221, null - br i1 %t222, label %panic9157, label %ok9158 -panic9157: - call void @finch_panic(ptr @.str.6172, i64 5816, ptr @.str.6173) + br i1 %t222, label %panic9167, label %ok9168 +panic9167: + call void @finch_panic(ptr @.str.6174, i64 5816, ptr @.str.6175) unreachable -ok9158: +ok9168: %t223 = getelementptr inbounds %S.gen.Gen, ptr %t221, i32 0, i32 15 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 %t225 = load i64, ptr %t224 %t226 = icmp slt i64 %t220, %t225 - br i1 %t226, label %while.body9155, label %while.end9156 -while.body9155: + br i1 %t226, label %while.body9165, label %while.end9166 +while.body9165: %t227 = load ptr, ptr %a46 %t228 = load i64, ptr %a219 call void @finch.gen.define(ptr %t227, i64 %t228) %t229 = load i64, ptr %a219 %t230 = add i64 %t229, 1 store i64 %t230, ptr %a219 - br label %while.cond9154 -while.end9156: + br label %while.cond9164 +while.end9166: %t231 = load ptr, ptr %a46 %t232 = icmp eq ptr %t231, null - br i1 %t232, label %panic9159, label %ok9160 -panic9159: - call void @finch_panic(ptr @.str.6174, i64 5820, ptr @.str.6175) + br i1 %t232, label %panic9169, label %ok9170 +panic9169: + call void @finch_panic(ptr @.str.6176, i64 5820, ptr @.str.6177) unreachable -ok9160: +ok9170: %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 28 %t234 = load i1, ptr %t233 - br i1 %t234, label %then9161, label %endif9163 -then9161: + br i1 %t234, label %then9171, label %endif9173 +then9171: %t235 = load ptr, ptr %a46 %t236 = icmp eq ptr %t235, null - br i1 %t236, label %panic9164, label %ok9165 -panic9164: - call void @finch_panic(ptr @.str.6176, i64 5821, ptr @.str.6177) + br i1 %t236, label %panic9174, label %ok9175 +panic9174: + call void @finch_panic(ptr @.str.6178, i64 5821, ptr @.str.6179) unreachable -ok9165: +ok9175: %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 0 %t238 = load { ptr, i64, i64 }, ptr %t237 %t239 = extractvalue { ptr, i64, i64 } %t238, 1 %t240 = icmp uge i64 0, %t239 - br i1 %t240, label %range9166, label %inrange9167 -range9166: - call void @finch_panic_index(ptr @.str.6178, i64 5821, i64 0, i64 %t239) + br i1 %t240, label %range9176, label %inrange9177 +range9176: + call void @finch_panic_index(ptr @.str.6180, i64 5821, i64 0, i64 %t239) unreachable -inrange9167: +inrange9177: %t241 = extractvalue { ptr, i64, i64 } %t238, 0 %t242 = getelementptr inbounds %S.ast.Program, ptr %t241, i64 0 %t243 = getelementptr inbounds %S.ast.Program, ptr %t242, i32 0, i32 2 @@ -96461,97 +96506,97 @@ inrange9167: call void @finch.gen.indexAll(ptr %t249, { ptr, i64, i64 } %t250) %t251 = load ptr, ptr %a46 %t252 = icmp eq ptr %t251, null - br i1 %t252, label %panic9168, label %ok9169 -panic9168: - call void @finch_panic(ptr @.str.6179, i64 5823, ptr @.str.6180) + br i1 %t252, label %panic9178, label %ok9179 +panic9178: + call void @finch_panic(ptr @.str.6181, i64 5823, ptr @.str.6182) unreachable -ok9169: +ok9179: %t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 29 %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6181, i64 1, i64 0 }, ptr %a255 + store { ptr, i64, i64 } { ptr @.str.6183, i64 1, i64 0 }, ptr %a255 call void @finch_str_join(ptr %a256, ptr %t253, ptr %a255) %t257 = load { ptr, i64, i64 }, ptr %a256 call void @finch.drop.arr_str(ptr %a248) call void @finch.drop.S_gen_Gen(ptr %a45) ret { ptr, i64, i64 } %t257 -endif9163: +endif9173: %t258 = load ptr, ptr %a46 %t259 = icmp eq ptr %t258, null - br i1 %t259, label %panic9196, label %ok9197 -panic9196: - call void @finch_panic(ptr @.str.6182, i64 5825, ptr @.str.6183) + br i1 %t259, label %panic9206, label %ok9207 +panic9206: + call void @finch_panic(ptr @.str.6184, i64 5825, ptr @.str.6185) unreachable -ok9197: +ok9207: %t260 = getelementptr inbounds %S.gen.Gen, ptr %t258, i32 0, i32 15 store i64 0, ptr %a261 - br label %each.cond9198 -each.cond9198: + br label %each.cond9208 +each.cond9208: %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 %t263 = load i64, ptr %t262 %t264 = load i64, ptr %a261 %t265 = icmp slt i64 %t264, %t263 - br i1 %t265, label %each.body9199, label %each.end9201 -each.body9199: + br i1 %t265, label %each.body9209, label %each.end9211 +each.body9209: %t266 = load ptr, ptr %t260 %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i64 %t264 %t268 = load %S.gen.FnSig, ptr %t267 store %S.gen.FnSig %t268, ptr %a269 %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a269, i32 0, i32 5 %t271 = load i1, ptr %t270 - br i1 %t271, label %then9202, label %endif9204 -then9202: + br i1 %t271, label %then9212, label %endif9214 +then9212: %t272 = load ptr, ptr %a46 %t273 = load %S.gen.FnSig, ptr %a269 %t274 = call { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %t272, %S.gen.FnSig %t273) store { ptr, i64, i64 } %t274, ptr %a275 call void @finch_str_drop(ptr %a275) - br label %endif9204 -endif9204: - br label %each.step9200 -each.step9200: + br label %endif9214 +endif9214: + br label %each.step9210 +each.step9210: %t276 = load i64, ptr %a261 %t277 = add i64 %t276, 1 store i64 %t277, ptr %a261 - br label %each.cond9198 -each.end9201: + br label %each.cond9208 +each.end9211: %t278 = load i1, ptr %a7 - br i1 %t278, label %then9205, label %endif9207 -then9205: - store { ptr, i64, i64 } { ptr @.str.6184, i64 0, i64 0 }, ptr %a279 + br i1 %t278, label %then9215, label %endif9217 +then9215: + store { ptr, i64, i64 } { ptr @.str.6186, i64 0, i64 0 }, ptr %a279 %t280 = load ptr, ptr %a46 %t281 = icmp eq ptr %t280, null - br i1 %t281, label %panic9208, label %ok9209 -panic9208: - call void @finch_panic(ptr @.str.6185, i64 5833, ptr @.str.6186) + br i1 %t281, label %panic9218, label %ok9219 +panic9218: + call void @finch_panic(ptr @.str.6187, i64 5833, ptr @.str.6188) unreachable -ok9209: +ok9219: %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 31 %t283 = getelementptr inbounds %S.platform.Target, ptr %t282, i32 0, i32 1 %t284 = load i1, ptr %t283 - br i1 %t284, label %then9210, label %endif9212 -then9210: + br i1 %t284, label %then9220, label %endif9222 +then9220: %t285 = load { ptr, i64, i64 }, ptr %a279 - store { ptr, i64, i64 } { ptr @.str.6187, i64 10, i64 0 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6189, i64 10, i64 0 }, ptr %a279 store { ptr, i64, i64 } %t285, ptr %a286 call void @finch_str_drop(ptr %a286) - br label %endif9212 -endif9212: + br label %endif9222 +endif9222: %t287 = load ptr, ptr %a46 %t288 = icmp eq ptr %t287, null - br i1 %t288, label %panic9213, label %ok9214 -panic9213: - call void @finch_panic(ptr @.str.6188, i64 5836, ptr @.str.6189) + br i1 %t288, label %panic9223, label %ok9224 +panic9223: + call void @finch_panic(ptr @.str.6190, i64 5836, ptr @.str.6191) unreachable -ok9214: +ok9224: %t289 = getelementptr inbounds %S.gen.Gen, ptr %t287, i32 0, i32 3 %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 %t291 = load { ptr, i64, i64 }, ptr %a279 - store { ptr, i64, i64 } { ptr @.str.6190, i64 6, i64 0 }, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.6192, i64 6, i64 0 }, ptr %a293 store { ptr, i64, i64 } %t291, ptr %a294 call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) %t295 = load { ptr, i64, i64 }, ptr %a292 store { ptr, i64, i64 } %t295, ptr %a297 - store { ptr, i64, i64 } { ptr @.str.6191, i64 107, i64 0 }, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.6193, i64 107, i64 0 }, ptr %a298 call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) store { ptr, i64, i64 } %t295, ptr %a299 call void @finch_str_drop(ptr %a299) @@ -96568,24 +96613,24 @@ ok9214: call void @finch_str_drop(ptr %a279) call void @finch.drop.S_gen_Gen(ptr %a45) ret { ptr, i64, i64 } %t306 -endif9207: +endif9217: %t307 = load ptr, ptr %a46 %t308 = icmp eq ptr %t307, null - br i1 %t308, label %panic9215, label %ok9216 -panic9215: - call void @finch_panic(ptr @.str.6192, i64 5840, ptr @.str.6193) + br i1 %t308, label %panic9225, label %ok9226 +panic9225: + call void @finch_panic(ptr @.str.6194, i64 5840, ptr @.str.6195) unreachable -ok9216: +ok9226: %t309 = getelementptr inbounds %S.gen.Gen, ptr %t307, i32 0, i32 15 %t310 = load i64, ptr %a155 %t311 = load { ptr, i64, i64 }, ptr %t309 %t312 = extractvalue { ptr, i64, i64 } %t311, 1 %t313 = icmp uge i64 %t310, %t312 - br i1 %t313, label %range9217, label %inrange9218 -range9217: - call void @finch_panic_index(ptr @.str.6194, i64 5840, i64 %t310, i64 %t312) + br i1 %t313, label %range9227, label %inrange9228 +range9227: + call void @finch_panic_index(ptr @.str.6196, i64 5840, i64 %t310, i64 %t312) unreachable -inrange9218: +inrange9228: %t314 = extractvalue { ptr, i64, i64 } %t311, 0 %t315 = getelementptr inbounds %S.gen.FnSig, ptr %t314, i64 %t310 %t316 = load %S.gen.FnSig, ptr %t315 @@ -96596,14 +96641,14 @@ inrange9218: %t321 = load ptr, ptr %a46 %t322 = load %S.gen.FnSig, ptr %a320 %t323 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t321, %S.gen.FnSig %t322) - store { ptr, i64, i64 } { ptr @.str.6195, i64 5, i64 0 }, ptr %a325 + store { ptr, i64, i64 } { ptr @.str.6197, i64 5, i64 0 }, ptr %a325 store { ptr, i64, i64 } %t323, ptr %a326 call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) store { ptr, i64, i64 } %t323, ptr %a327 call void @finch_str_drop(ptr %a327) %t328 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } %t328, ptr %a330 - store { ptr, i64, i64 } { ptr @.str.6196, i64 1, i64 0 }, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.6198, i64 1, i64 0 }, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) store { ptr, i64, i64 } %t328, ptr %a332 call void @finch_str_drop(ptr %a332) @@ -96617,50 +96662,50 @@ inrange9218: call void @finch_str_drop(ptr %a339) %t340 = load { ptr, i64, i64 }, ptr %a336 store { ptr, i64, i64 } %t340, ptr %a342 - store { ptr, i64, i64 } { ptr @.str.6197, i64 1, i64 0 }, ptr %a343 + store { ptr, i64, i64 } { ptr @.str.6199, i64 1, i64 0 }, ptr %a343 call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) store { ptr, i64, i64 } %t340, ptr %a344 call void @finch_str_drop(ptr %a344) %t345 = load { ptr, i64, i64 }, ptr %a341 store { ptr, i64, i64 } %t345, ptr %a346 - store { ptr, i64, i64 } { ptr @.str.6198, i64 0, i64 0 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6200, i64 0, i64 0 }, ptr %a347 %t348 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 13 %t349 = getelementptr inbounds { ptr, i64, i64 }, ptr %t348, i32 0, i32 1 %t350 = load i64, ptr %t349 %t351 = icmp eq i64 %t350, 1 - br i1 %t351, label %then9219, label %endif9221 -then9219: + br i1 %t351, label %then9229, label %endif9231 +then9229: %t352 = load { ptr, i64, i64 }, ptr %a347 - store { ptr, i64, i64 } { ptr @.str.6199, i64 133, i64 0 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6201, i64 133, i64 0 }, ptr %a347 store { ptr, i64, i64 } %t352, ptr %a353 call void @finch_str_drop(ptr %a353) %t354 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t354, ptr %a356 - store { ptr, i64, i64 } { ptr @.str.6200, i64 20, i64 0 }, ptr %a357 + store { ptr, i64, i64 } { ptr @.str.6202, i64 20, i64 0 }, ptr %a357 call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) %t358 = load { ptr, i64, i64 }, ptr %a355 %t359 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t358, ptr %a346 store { ptr, i64, i64 } %t359, ptr %a360 call void @finch_str_drop(ptr %a360) - br label %endif9221 -endif9221: + br label %endif9231 +endif9231: %t361 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t361, ptr %a363 - store { ptr, i64, i64 } { ptr @.str.6201, i64 1, i64 0 }, ptr %a364 + store { ptr, i64, i64 } { ptr @.str.6203, i64 1, i64 0 }, ptr %a364 call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) %t365 = load { ptr, i64, i64 }, ptr %a362 %t366 = load { ptr, i64, i64 }, ptr %a346 store { ptr, i64, i64 } %t365, ptr %a346 store { ptr, i64, i64 } %t366, ptr %a367 call void @finch_str_drop(ptr %a367) - store { ptr, i64, i64 } { ptr @.str.6202, i64 12, i64 0 }, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.6204, i64 12, i64 0 }, ptr %a368 %t369 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 9 %t370 = load i1, ptr %t369 - br i1 %t370, label %then9222, label %else9223 -then9222: + br i1 %t370, label %then9232, label %else9233 +then9232: %t371 = load { ptr, i64, i64 }, ptr %a346 - store { ptr, i64, i64 } { ptr @.str.6203, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.6205, i64 5, i64 0 }, ptr %a373 store { ptr, i64, i64 } %t371, ptr %a374 call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) %t375 = load { ptr, i64, i64 }, ptr %a372 @@ -96670,7 +96715,7 @@ then9222: call void @finch_str_drop(ptr %a377) %t378 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t378, ptr %a380 - store { ptr, i64, i64 } { ptr @.str.6204, i64 2, i64 0 }, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.6206, i64 2, i64 0 }, ptr %a381 call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) %t382 = load { ptr, i64, i64 }, ptr %a379 %t383 = load { ptr, i64, i64 }, ptr %a346 @@ -96681,7 +96726,7 @@ then9222: call void @finch_str_drop(ptr %a387) %t388 = load { ptr, i64, i64 }, ptr %a384 store { ptr, i64, i64 } %t388, ptr %a390 - store { ptr, i64, i64 } { ptr @.str.6205, i64 1, i64 0 }, ptr %a391 + store { ptr, i64, i64 } { ptr @.str.6207, i64 1, i64 0 }, ptr %a391 call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) store { ptr, i64, i64 } %t388, ptr %a392 call void @finch_str_drop(ptr %a392) @@ -96691,7 +96736,7 @@ then9222: store { ptr, i64, i64 } %t394, ptr %a395 call void @finch_str_drop(ptr %a395) %t396 = load { ptr, i64, i64 }, ptr %a346 - store { ptr, i64, i64 } { ptr @.str.6206, i64 0, i64 0 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6208, i64 0, i64 0 }, ptr %a346 store { ptr, i64, i64 } %t396, ptr %a397 call void @finch_str_drop(ptr %a397) %t398 = load ptr, ptr %a46 @@ -96700,7 +96745,7 @@ then9222: store { ptr, i64, i64 } %t400, ptr %a401 %t402 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t402, ptr %a404 - store { ptr, i64, i64 } { ptr @.str.6207, i64 21, i64 0 }, ptr %a405 + store { ptr, i64, i64 } { ptr @.str.6209, i64 21, i64 0 }, ptr %a405 call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) %t406 = load { ptr, i64, i64 }, ptr %a403 %t407 = load { ptr, i64, i64 }, ptr %a401 @@ -96711,7 +96756,7 @@ then9222: call void @finch_str_drop(ptr %a411) %t412 = load { ptr, i64, i64 }, ptr %a408 store { ptr, i64, i64 } %t412, ptr %a414 - store { ptr, i64, i64 } { ptr @.str.6208, i64 62, i64 0 }, ptr %a415 + store { ptr, i64, i64 } { ptr @.str.6210, i64 62, i64 0 }, ptr %a415 call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) store { ptr, i64, i64 } %t412, ptr %a416 call void @finch_str_drop(ptr %a416) @@ -96722,7 +96767,7 @@ then9222: call void @finch_str_drop(ptr %a419) %t420 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t420, ptr %a422 - store { ptr, i64, i64 } { ptr @.str.6209, i64 20, i64 0 }, ptr %a423 + store { ptr, i64, i64 } { ptr @.str.6211, i64 20, i64 0 }, ptr %a423 call void @finch_str_concat(ptr %a421, ptr %a422, ptr %a423) %t424 = load { ptr, i64, i64 }, ptr %a421 %t425 = load { ptr, i64, i64 }, ptr %a401 @@ -96733,7 +96778,7 @@ then9222: call void @finch_str_drop(ptr %a429) %t430 = load { ptr, i64, i64 }, ptr %a426 store { ptr, i64, i64 } %t430, ptr %a432 - store { ptr, i64, i64 } { ptr @.str.6210, i64 78, i64 0 }, ptr %a433 + store { ptr, i64, i64 } { ptr @.str.6212, i64 78, i64 0 }, ptr %a433 call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) store { ptr, i64, i64 } %t430, ptr %a434 call void @finch_str_drop(ptr %a434) @@ -96744,7 +96789,7 @@ then9222: call void @finch_str_drop(ptr %a437) %t438 = load { ptr, i64, i64 }, ptr %a347 store { ptr, i64, i64 } %t438, ptr %a440 - store { ptr, i64, i64 } { ptr @.str.6211, i64 62, i64 0 }, ptr %a441 + store { ptr, i64, i64 } { ptr @.str.6213, i64 62, i64 0 }, ptr %a441 call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) %t442 = load { ptr, i64, i64 }, ptr %a439 %t443 = load { ptr, i64, i64 }, ptr %a347 @@ -96755,18 +96800,18 @@ then9222: %t446 = getelementptr inbounds %S.ast.Type, ptr %t445, i32 0, i32 0 %t447 = load { ptr, i64, i64 }, ptr %t446 store { ptr, i64, i64 } %t447, ptr %a448 - store { ptr, i64, i64 } { ptr @.str.6212, i64 3, i64 0 }, ptr %a449 + store { ptr, i64, i64 } { ptr @.str.6214, i64 3, i64 0 }, ptr %a449 %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) %t451 = icmp ne i32 %t450, 0 - br i1 %t451, label %then9225, label %endif9227 -then9225: + br i1 %t451, label %then9235, label %endif9237 +then9235: %t452 = load { ptr, i64, i64 }, ptr %a401 - store { ptr, i64, i64 } { ptr @.str.6213, i64 20, i64 0 }, ptr %a454 + store { ptr, i64, i64 } { ptr @.str.6215, i64 20, i64 0 }, ptr %a454 store { ptr, i64, i64 } %t452, ptr %a455 call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) %t456 = load { ptr, i64, i64 }, ptr %a453 store { ptr, i64, i64 } %t456, ptr %a458 - store { ptr, i64, i64 } { ptr @.str.6214, i64 53, i64 0 }, ptr %a459 + store { ptr, i64, i64 } { ptr @.str.6216, i64 53, i64 0 }, ptr %a459 call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459) store { ptr, i64, i64 } %t456, ptr %a460 call void @finch_str_drop(ptr %a460) @@ -96775,22 +96820,22 @@ then9225: store { ptr, i64, i64 } %t461, ptr %a368 store { ptr, i64, i64 } %t462, ptr %a463 call void @finch_str_drop(ptr %a463) - br label %endif9227 -endif9227: + br label %endif9237 +endif9237: call void @finch_str_drop(ptr %a401) - br label %endif9224 -else9223: + br label %endif9234 +else9233: %t464 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 %t465 = getelementptr inbounds %S.ast.Type, ptr %t464, i32 0, i32 0 %t466 = load { ptr, i64, i64 }, ptr %t465 store { ptr, i64, i64 } %t466, ptr %a467 - store { ptr, i64, i64 } { ptr @.str.6215, i64 3, i64 0 }, ptr %a468 + store { ptr, i64, i64 } { ptr @.str.6217, i64 3, i64 0 }, ptr %a468 %t469 = call i32 @finch_str_eq(ptr %a467, ptr %a468) %t470 = icmp ne i32 %t469, 0 - br i1 %t470, label %then9228, label %endif9230 -then9228: + br i1 %t470, label %then9238, label %endif9240 +then9238: %t471 = load { ptr, i64, i64 }, ptr %a346 - store { ptr, i64, i64 } { ptr @.str.6216, i64 5, i64 0 }, ptr %a473 + store { ptr, i64, i64 } { ptr @.str.6218, i64 5, i64 0 }, ptr %a473 store { ptr, i64, i64 } %t471, ptr %a474 call void @finch_str_concat(ptr %a472, ptr %a473, ptr %a474) %t475 = load { ptr, i64, i64 }, ptr %a472 @@ -96799,29 +96844,29 @@ then9228: store { ptr, i64, i64 } %t476, ptr %a477 call void @finch_str_drop(ptr %a477) %t478 = load { ptr, i64, i64 }, ptr %a368 - store { ptr, i64, i64 } { ptr @.str.6217, i64 46, i64 0 }, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.6219, i64 46, i64 0 }, ptr %a368 store { ptr, i64, i64 } %t478, ptr %a479 call void @finch_str_drop(ptr %a479) - br label %endif9230 -endif9230: - br label %endif9224 -endif9224: + br label %endif9240 +endif9240: + br label %endif9234 +endif9234: %t480 = load ptr, ptr %a46 %t481 = icmp eq ptr %t480, null - br i1 %t481, label %panic9231, label %ok9232 -panic9231: - call void @finch_panic(ptr @.str.6218, i64 5865, ptr @.str.6219) + br i1 %t481, label %panic9241, label %ok9242 +panic9241: + call void @finch_panic(ptr @.str.6220, i64 5865, ptr @.str.6221) unreachable -ok9232: +ok9242: %t482 = getelementptr inbounds %S.gen.Gen, ptr %t480, i32 0, i32 3 %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 %t484 = load { ptr, i64, i64 }, ptr %a347 - store { ptr, i64, i64 } { ptr @.str.6220, i64 48, i64 0 }, ptr %a486 + store { ptr, i64, i64 } { ptr @.str.6222, i64 48, i64 0 }, ptr %a486 store { ptr, i64, i64 } %t484, ptr %a487 call void @finch_str_concat(ptr %a485, ptr %a486, ptr %a487) %t488 = load { ptr, i64, i64 }, ptr %a485 store { ptr, i64, i64 } %t488, ptr %a490 - store { ptr, i64, i64 } { ptr @.str.6221, i64 2, i64 0 }, ptr %a491 + store { ptr, i64, i64 } { ptr @.str.6223, i64 2, i64 0 }, ptr %a491 call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491) store { ptr, i64, i64 } %t488, ptr %a492 call void @finch_str_drop(ptr %a492) @@ -96834,7 +96879,7 @@ ok9232: call void @finch_str_drop(ptr %a498) %t499 = load { ptr, i64, i64 }, ptr %a495 store { ptr, i64, i64 } %t499, ptr %a501 - store { ptr, i64, i64 } { ptr @.str.6222, i64 1, i64 0 }, ptr %a502 + store { ptr, i64, i64 } { ptr @.str.6224, i64 1, i64 0 }, ptr %a502 call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) store { ptr, i64, i64 } %t499, ptr %a503 call void @finch_str_drop(ptr %a503) @@ -96847,7 +96892,7 @@ ok9232: call void @finch_str_drop(ptr %a509) %t510 = load { ptr, i64, i64 }, ptr %a506 store { ptr, i64, i64 } %t510, ptr %a512 - store { ptr, i64, i64 } { ptr @.str.6223, i64 2, i64 0 }, ptr %a513 + store { ptr, i64, i64 } { ptr @.str.6225, i64 2, i64 0 }, ptr %a513 call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) store { ptr, i64, i64 } %t510, ptr %a514 call void @finch_str_drop(ptr %a514) @@ -96904,24 +96949,24 @@ entry: define internal { ptr, i64, i64 } @finch.docs.builtins() { entry: - %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6224, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6225, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6226, i64 78, i64 0 }) - %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6227, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6228, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.6229, i64 77, i64 0 }) - %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6230, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6231, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6232, i64 121, i64 0 }) - %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6233, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6234, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.6235, i64 83, i64 0 }) - %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6236, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6237, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6238, i64 29, i64 0 }) - %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6239, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6240, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6241, i64 73, i64 0 }) - %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6242, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6243, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6244, i64 98, i64 0 }) - %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6245, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6246, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.6247, i64 66, i64 0 }) - %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6248, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6249, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6250, i64 48, i64 0 }) - %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6251, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6252, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6253, i64 77, i64 0 }) - %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6254, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6255, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6256, i64 66, i64 0 }) - %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6257, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6258, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6259, i64 73, i64 0 }) - %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6260, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6261, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6262, i64 61, i64 0 }) - %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6263, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6264, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6265, i64 130, i64 0 }) - %t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6266, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6267, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6268, i64 75, i64 0 }) - %t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6269, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6270, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6271, i64 29, i64 0 }) - %t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6272, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6273, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6274, i64 26, i64 0 }) - %t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6275, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6276, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6277, i64 88, i64 0 }) + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6226, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6227, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6228, i64 78, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6229, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6230, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.6231, i64 77, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6232, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6233, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6234, i64 121, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6235, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6236, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.6237, i64 83, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6238, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6239, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6240, i64 29, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6241, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6242, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6243, i64 73, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6244, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6245, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6246, i64 98, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6247, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6248, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.6249, i64 66, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6250, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6251, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6252, i64 48, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6253, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6254, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6255, i64 77, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6256, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6257, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6258, i64 66, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6259, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6260, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6261, i64 73, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6262, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6263, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6264, i64 61, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6265, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6266, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6267, i64 130, i64 0 }) + %t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6268, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6269, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6270, i64 75, i64 0 }) + %t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6271, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6272, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6273, i64 29, i64 0 }) + %t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6274, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6275, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6276, i64 26, i64 0 }) + %t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6277, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6278, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6279, i64 88, i64 0 }) %t19 = mul i64 18, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t20 = call ptr @finch_alloc(i64 %t19) %t21 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 0 @@ -96969,20 +97014,20 @@ entry: define internal { ptr, i64, i64 } @finch.docs.arrayMethods() { entry: - %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6278, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6279, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6280, i64 23, i64 0 }) - %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6281, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6282, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6283, i64 40, i64 0 }) - %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6284, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6285, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6286, i64 18, i64 0 }) - %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6287, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6288, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6289, i64 43, i64 0 }) - %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6290, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6291, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6292, i64 38, i64 0 }) - %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6293, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6294, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6295, i64 37, i64 0 }) - %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6296, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6297, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6298, i64 19, i64 0 }) - %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6299, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6300, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6301, i64 46, i64 0 }) - %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6302, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6303, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6304, i64 22, i64 0 }) - %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6305, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6306, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6307, i64 18, i64 0 }) - %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6308, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6309, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6310, i64 37, i64 0 }) - %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6311, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6312, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6313, i64 18, i64 0 }) - %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6314, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6315, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6316, i64 45, i64 0 }) - %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6317, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6318, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6319, i64 47, i64 0 }) + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6280, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6281, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6282, i64 23, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6283, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6284, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6285, i64 40, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6286, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6287, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6288, i64 18, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6289, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6290, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6291, i64 43, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6292, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6293, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6294, i64 38, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6295, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6296, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6297, i64 37, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6298, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6299, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6300, i64 19, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6301, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6302, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6303, i64 46, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6304, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6305, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6306, i64 22, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6307, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6308, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6309, i64 18, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6310, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6311, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6312, i64 37, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6313, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6314, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6315, i64 18, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6316, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6317, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6318, i64 45, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6319, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6320, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6321, i64 47, i64 0 }) %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 @@ -97022,20 +97067,20 @@ entry: define internal { ptr, i64, i64 } @finch.docs.strMethods() { entry: - %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6320, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6321, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6322, i64 20, i64 0 }) - %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6323, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6325, i64 59, i64 0 }) - %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6326, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6327, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.6328, i64 29, i64 0 }) - %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6329, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6330, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6331, i64 22, i64 0 }) - %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6332, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6333, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6334, i64 24, i64 0 }) - %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6335, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6337, i64 27, i64 0 }) - %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6338, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6339, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6340, i64 25, i64 0 }) - %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6341, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6342, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6343, i64 62, i64 0 }) - %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6344, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6345, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6346, i64 41, i64 0 }) - %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6347, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6348, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6349, i64 24, i64 0 }) - %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6350, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6351, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6352, i64 24, i64 0 }) - %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6353, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6354, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6355, i64 26, i64 0 }) - %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6356, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6357, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6358, i64 17, i64 0 }) - %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6359, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6360, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6361, i64 22, i64 0 }) + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6322, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6323, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 20, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6325, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6326, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6327, i64 59, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6328, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6329, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.6330, i64 29, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6331, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6332, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6333, i64 22, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6334, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6335, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 24, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6337, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6338, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6339, i64 27, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6340, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6341, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6342, i64 25, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6343, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6344, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6345, i64 62, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6346, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6347, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6348, i64 41, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6349, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6350, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6351, i64 24, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6352, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6353, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6354, i64 24, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6355, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6356, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6357, i64 26, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6358, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6359, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6360, i64 17, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6361, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6362, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6363, i64 22, i64 0 }) %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t16 = call ptr @finch_alloc(i64 %t15) %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 @@ -97075,13 +97120,13 @@ entry: define internal { ptr, i64, i64 } @finch.docs.mapMethods() { entry: - %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6362, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6363, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6364, i64 19, i64 0 }) - %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6365, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6366, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6367, i64 22, i64 0 }) - %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6368, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6369, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6370, i64 53, i64 0 }) - %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6371, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6372, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6373, i64 52, i64 0 }) - %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6374, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6375, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6376, i64 19, i64 0 }) - %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6377, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6378, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6379, i64 39, i64 0 }) - %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6380, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6381, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6382, i64 47, i64 0 }) + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6364, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6365, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6366, i64 19, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6367, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6368, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6369, i64 22, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6370, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6371, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6372, i64 53, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6373, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6374, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6375, i64 52, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6376, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6377, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6378, i64 19, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6379, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6380, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6381, i64 39, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6382, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6383, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6384, i64 47, i64 0 }) %t8 = mul i64 7, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) %t9 = call ptr @finch_alloc(i64 %t8) %t10 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 0 @@ -97110,49 +97155,49 @@ entry: %t1 = mul i64 22, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 - store { ptr, i64, i64 } { ptr @.str.6383, i64 2, i64 0 }, ptr %t3 + store { ptr, i64, i64 } { ptr @.str.6385, i64 2, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 - store { ptr, i64, i64 } { ptr @.str.6384, i64 6, i64 0 }, ptr %t4 + store { ptr, i64, i64 } { ptr @.str.6386, i64 6, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 - store { ptr, i64, i64 } { ptr @.str.6385, i64 2, i64 0 }, ptr %t5 + store { ptr, i64, i64 } { ptr @.str.6387, i64 2, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 - store { ptr, i64, i64 } { ptr @.str.6386, i64 4, i64 0 }, ptr %t6 + store { ptr, i64, i64 } { ptr @.str.6388, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 - store { ptr, i64, i64 } { ptr @.str.6387, i64 5, i64 0 }, ptr %t7 + store { ptr, i64, i64 } { ptr @.str.6389, i64 5, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 - store { ptr, i64, i64 } { ptr @.str.6388, i64 3, i64 0 }, ptr %t8 + store { ptr, i64, i64 } { ptr @.str.6390, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 - store { ptr, i64, i64 } { ptr @.str.6389, i64 2, i64 0 }, ptr %t9 + store { ptr, i64, i64 } { ptr @.str.6391, i64 2, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 - store { ptr, i64, i64 } { ptr @.str.6390, i64 5, i64 0 }, ptr %t10 + store { ptr, i64, i64 } { ptr @.str.6392, i64 5, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 - store { ptr, i64, i64 } { ptr @.str.6391, i64 8, i64 0 }, ptr %t11 + store { ptr, i64, i64 } { ptr @.str.6393, i64 8, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 - store { ptr, i64, i64 } { ptr @.str.6392, i64 4, i64 0 }, ptr %t12 + store { ptr, i64, i64 } { ptr @.str.6394, i64 4, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 - store { ptr, i64, i64 } { ptr @.str.6393, i64 5, i64 0 }, ptr %t13 + store { ptr, i64, i64 } { ptr @.str.6395, i64 5, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 - store { ptr, i64, i64 } { ptr @.str.6394, i64 4, i64 0 }, ptr %t14 + store { ptr, i64, i64 } { ptr @.str.6396, i64 4, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 - store { ptr, i64, i64 } { ptr @.str.6395, i64 6, i64 0 }, ptr %t15 + store { ptr, i64, i64 } { ptr @.str.6397, i64 6, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 - store { ptr, i64, i64 } { ptr @.str.6396, i64 4, i64 0 }, ptr %t16 + store { ptr, i64, i64 } { ptr @.str.6398, i64 4, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 - store { ptr, i64, i64 } { ptr @.str.6397, i64 6, i64 0 }, ptr %t17 + store { ptr, i64, i64 } { ptr @.str.6399, i64 6, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 - store { ptr, i64, i64 } { ptr @.str.6398, i64 4, i64 0 }, ptr %t18 + store { ptr, i64, i64 } { ptr @.str.6400, i64 4, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 - store { ptr, i64, i64 } { ptr @.str.6399, i64 5, i64 0 }, ptr %t19 + store { ptr, i64, i64 } { ptr @.str.6401, i64 5, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 - store { ptr, i64, i64 } { ptr @.str.6400, i64 6, i64 0 }, ptr %t20 + store { ptr, i64, i64 } { ptr @.str.6402, i64 6, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 - store { ptr, i64, i64 } { ptr @.str.6401, i64 5, i64 0 }, ptr %t21 + store { ptr, i64, i64 } { ptr @.str.6403, i64 5, i64 0 }, ptr %t21 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 - store { ptr, i64, i64 } { ptr @.str.6402, i64 2, i64 0 }, ptr %t22 + store { ptr, i64, i64 } { ptr @.str.6404, i64 2, i64 0 }, ptr %t22 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 - store { ptr, i64, i64 } { ptr @.str.6403, i64 3, i64 0 }, ptr %t23 + store { ptr, i64, i64 } { ptr @.str.6405, i64 3, i64 0 }, ptr %t23 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 - store { ptr, i64, i64 } { ptr @.str.6404, i64 4, i64 0 }, ptr %t24 + store { ptr, i64, i64 } { ptr @.str.6406, i64 4, i64 0 }, ptr %t24 %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t26 = insertvalue { ptr, i64, i64 } %t25, i64 22, 1 %t27 = insertvalue { ptr, i64, i64 } %t26, i64 22, 2 @@ -97165,39 +97210,39 @@ entry: %t1 = mul i64 17, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t2 = call ptr @finch_alloc(i64 %t1) %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 - store { ptr, i64, i64 } { ptr @.str.6405, i64 3, i64 0 }, ptr %t3 + store { ptr, i64, i64 } { ptr @.str.6407, i64 3, i64 0 }, ptr %t3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 - store { ptr, i64, i64 } { ptr @.str.6406, i64 5, i64 0 }, ptr %t4 + store { ptr, i64, i64 } { ptr @.str.6408, i64 5, i64 0 }, ptr %t4 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 - store { ptr, i64, i64 } { ptr @.str.6407, i64 4, i64 0 }, ptr %t5 + store { ptr, i64, i64 } { ptr @.str.6409, i64 4, i64 0 }, ptr %t5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 - store { ptr, i64, i64 } { ptr @.str.6408, i64 4, i64 0 }, ptr %t6 + store { ptr, i64, i64 } { ptr @.str.6410, i64 4, i64 0 }, ptr %t6 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 - store { ptr, i64, i64 } { ptr @.str.6409, i64 3, i64 0 }, ptr %t7 + store { ptr, i64, i64 } { ptr @.str.6411, i64 3, i64 0 }, ptr %t7 %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 - store { ptr, i64, i64 } { ptr @.str.6410, i64 3, i64 0 }, ptr %t8 + store { ptr, i64, i64 } { ptr @.str.6412, i64 3, i64 0 }, ptr %t8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 - store { ptr, i64, i64 } { ptr @.str.6411, i64 3, i64 0 }, ptr %t9 + store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %t9 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 - store { ptr, i64, i64 } { ptr @.str.6412, i64 2, i64 0 }, ptr %t10 + store { ptr, i64, i64 } { ptr @.str.6414, i64 2, i64 0 }, ptr %t10 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 - store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %t11 + store { ptr, i64, i64 } { ptr @.str.6415, i64 3, i64 0 }, ptr %t11 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 - store { ptr, i64, i64 } { ptr @.str.6414, i64 3, i64 0 }, ptr %t12 + store { ptr, i64, i64 } { ptr @.str.6416, i64 3, i64 0 }, ptr %t12 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 - store { ptr, i64, i64 } { ptr @.str.6415, i64 3, i64 0 }, ptr %t13 + store { ptr, i64, i64 } { ptr @.str.6417, i64 3, i64 0 }, ptr %t13 %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 - store { ptr, i64, i64 } { ptr @.str.6416, i64 2, i64 0 }, ptr %t14 + store { ptr, i64, i64 } { ptr @.str.6418, i64 2, i64 0 }, ptr %t14 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 - store { ptr, i64, i64 } { ptr @.str.6417, i64 3, i64 0 }, ptr %t15 + store { ptr, i64, i64 } { ptr @.str.6419, i64 3, i64 0 }, ptr %t15 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 - store { ptr, i64, i64 } { ptr @.str.6418, i64 3, i64 0 }, ptr %t16 + store { ptr, i64, i64 } { ptr @.str.6420, i64 3, i64 0 }, ptr %t16 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 - store { ptr, i64, i64 } { ptr @.str.6419, i64 3, i64 0 }, ptr %t17 + store { ptr, i64, i64 } { ptr @.str.6421, i64 3, i64 0 }, ptr %t17 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 - store { ptr, i64, i64 } { ptr @.str.6420, i64 3, i64 0 }, ptr %t18 + store { ptr, i64, i64 } { ptr @.str.6422, i64 3, i64 0 }, ptr %t18 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 - store { ptr, i64, i64 } { ptr @.str.6421, i64 3, i64 0 }, ptr %t19 + store { ptr, i64, i64 } { ptr @.str.6423, i64 3, i64 0 }, ptr %t19 %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 %t21 = insertvalue { ptr, i64, i64 } %t20, i64 17, 1 %t22 = insertvalue { ptr, i64, i64 } %t21, i64 17, 2 @@ -97234,14 +97279,14 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 - br label %each.cond9233 -each.cond9233: + br label %each.cond9243 +each.cond9243: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body9234, label %each.end9236 -each.body9234: + br i1 %t7, label %each.body9244, label %each.end9246 +each.body9244: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 %t10 = load %S.docs.Doc, ptr %t9 @@ -97253,21 +97298,21 @@ each.body9234: store { ptr, i64, i64 } %t14, ptr %a16 %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br i1 %t18, label %then9237, label %endif9239 -then9237: + br i1 %t18, label %then9247, label %endif9249 +then9247: %t19 = load %S.docs.Doc, ptr %a11 store %S.docs.Doc %t19, ptr %a20 call void @finch.copy.S_docs_Doc(ptr %a21, ptr %a20) %t22 = load %S.docs.Doc, ptr %a21 ret %S.docs.Doc %t22 -endif9239: - br label %each.step9235 -each.step9235: +endif9249: + br label %each.step9245 +each.step9245: %t23 = load i64, ptr %a3 %t24 = add i64 %t23, 1 store i64 %t24, ptr %a3 - br label %each.cond9233 -each.end9236: + br label %each.cond9243 +each.end9246: ret %S.docs.Doc zeroinitializer } @@ -97288,12 +97333,12 @@ entry: store %S.docs.Doc %p0, ptr %a1 %t2 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 1 %t3 = load { ptr, i64, i64 }, ptr %t2 - store { ptr, i64, i64 } { ptr @.str.6422, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6424, i64 9, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t7, ptr %a9 - store { ptr, i64, i64 } { ptr @.str.6423, i64 5, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.6425, i64 5, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) @@ -97383,7 +97428,7 @@ entry: %a11 = alloca %S.ast.Type, align 16 store %S.ast.Type %p0, ptr %a1 store i64 %p1, ptr %a2 - %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6424, i64 5, i64 0 }, 0 + %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6426, i64 5, i64 0 }, 0 %t4 = load i64, ptr %a2 %t5 = insertvalue %S.ast.Type %t3, i64 %t4, 4 store %S.ast.Type %t5, ptr %a6 @@ -97504,7 +97549,7 @@ entry: store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t3, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.6425, i64 15, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6427, i64 15, i64 0 }, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 call void @finch_str_drop(ptr %a7) @@ -97521,7 +97566,7 @@ entry: call void @finch_str_drop(ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t17, ptr %a19 - store { ptr, i64, i64 } { ptr @.str.6426, i64 4, i64 0 }, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.6428, i64 4, i64 0 }, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t17, ptr %a21 call void @finch_str_drop(ptr %a21) @@ -97529,7 +97574,7 @@ entry: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t24, ptr %a26 - store { ptr, i64, i64 } { ptr @.str.6427, i64 13, i64 0 }, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.6429, i64 13, i64 0 }, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) @@ -97546,7 +97591,7 @@ entry: call void @finch_str_drop(ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a33 store { ptr, i64, i64 } %t38, ptr %a40 - store { ptr, i64, i64 } { ptr @.str.6428, i64 2, i64 0 }, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.6430, i64 2, i64 0 }, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) store { ptr, i64, i64 } %t38, ptr %a42 call void @finch_str_drop(ptr %a42) @@ -97554,12 +97599,12 @@ entry: store { ptr, i64, i64 } %t43, ptr %a44 %t45 = load { ptr, i64, i64 }, ptr %a44 store { ptr, i64, i64 } %t45, ptr %a46 - store { ptr, i64, i64 } { ptr @.str.6429, i64 0, i64 0 }, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.6431, i64 0, i64 0 }, ptr %a47 %t48 = call i32 @finch_write_file(ptr %a46, ptr %a47) %t49 = icmp ne i32 %t48, 0 %t50 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t50, ptr %a52 - store { ptr, i64, i64 } { ptr @.str.6430, i64 12, i64 0 }, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.6432, i64 12, i64 0 }, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a51 %t55 = load { ptr, i64, i64 }, ptr %a44 @@ -97573,7 +97618,7 @@ entry: call void @finch_str_drop(ptr %a61) %t62 = load { ptr, i64, i64 }, ptr %a57 store { ptr, i64, i64 } %t62, ptr %a64 - store { ptr, i64, i64 } { ptr @.str.6431, i64 4, i64 0 }, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.6433, i64 4, i64 0 }, ptr %a65 call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) store { ptr, i64, i64 } %t62, ptr %a66 call void @finch_str_drop(ptr %a66) @@ -97589,7 +97634,7 @@ entry: call void @finch_str_drop(ptr %a74) %t75 = load { ptr, i64, i64 }, ptr %a70 store { ptr, i64, i64 } %t75, ptr %a77 - store { ptr, i64, i64 } { ptr @.str.6432, i64 3, i64 0 }, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.6434, i64 3, i64 0 }, ptr %a78 call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) store { ptr, i64, i64 } %t75, ptr %a79 call void @finch_str_drop(ptr %a79) @@ -97613,34 +97658,34 @@ entry: %t93 = call i32 @finch_file_exists(ptr %a92) %t94 = icmp ne i32 %t93, 0 %t95 = xor i1 %t94, true - br i1 %t95, label %then9240, label %endif9242 -then9240: + br i1 %t95, label %then9250, label %endif9252 +then9250: %t96 = load { ptr, i64, i64 }, ptr %a2 call void @finch_str_drop(ptr %a44) call void @finch_str_drop(ptr %a23) ret { ptr, i64, i64 } %t96 -endif9242: +endif9252: store i1 false, ptr %a97 %t98 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t98, ptr %a99 - call void @finch_read_file(ptr %a100, ptr %a99, ptr @.str.6433, i64 114) + call void @finch_read_file(ptr %a100, ptr %a99, ptr @.str.6435, i64 114) %t101 = load { ptr, i64, i64 }, ptr %a100 store { ptr, i64, i64 } %t101, ptr %a102 - store { ptr, i64, i64 } { ptr @.str.6435, i64 1, i64 0 }, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.6437, i64 1, i64 0 }, ptr %a104 call void @finch_str_split(ptr %a105, ptr %a102, ptr %a104) %t106 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t101, ptr %a107 call void @finch_str_drop(ptr %a107) store { ptr, i64, i64 } %t106, ptr %a108 store i64 0, ptr %a109 - br label %each.cond9243 -each.cond9243: + br label %each.cond9253 +each.cond9253: %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %a108, i32 0, i32 1 %t111 = load i64, ptr %t110 %t112 = load i64, ptr %a109 %t113 = icmp slt i64 %t112, %t111 - br i1 %t113, label %each.body9244, label %each.end9246 -each.body9244: + br i1 %t113, label %each.body9254, label %each.end9256 +each.body9254: %t114 = load ptr, ptr %a108 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 %t112 %t116 = load { ptr, i64, i64 }, ptr %t115 @@ -97652,60 +97697,60 @@ each.body9244: store { ptr, i64, i64 } %t121, ptr %a122 %t123 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t123, ptr %a124 - store { ptr, i64, i64 } { ptr @.str.6438, i64 34, i64 0 }, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.6440, i64 34, i64 0 }, ptr %a126 %t127 = call i32 @finch_str_starts(ptr %a124, ptr %a126) %t128 = icmp ne i32 %t127, 0 - br i1 %t128, label %then9247, label %endif9249 -then9247: + br i1 %t128, label %then9257, label %endif9259 +then9257: store i1 true, ptr %a97 call void @finch_str_drop(ptr %a122) - br label %each.step9245 -endif9249: + br label %each.step9255 +endif9259: %t129 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t129, ptr %a130 - store { ptr, i64, i64 } { ptr @.str.6440, i64 19, i64 0 }, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.6442, i64 19, i64 0 }, ptr %a132 %t133 = call i32 @finch_str_starts(ptr %a130, ptr %a132) %t134 = icmp ne i32 %t133, 0 - br i1 %t134, label %then9250, label %endif9252 -then9250: + br i1 %t134, label %then9260, label %endif9262 +then9260: call void @finch_str_drop(ptr %a122) - br label %each.end9246 -endif9252: + br label %each.end9256 +endif9262: %t135 = load i1, ptr %a97 %t136 = xor i1 %t135, true - br label %logic.from9253 -logic.from9253: - br i1 %t136, label %logic.end9255, label %logic.rhs9254 -logic.rhs9254: + br label %logic.from9263 +logic.from9263: + br i1 %t136, label %logic.end9265, label %logic.rhs9264 +logic.rhs9264: %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 %t138 = load i64, ptr %t137 %t139 = icmp eq i64 %t138, 0 - br label %logic.rend9256 -logic.rend9256: - br label %logic.end9255 -logic.end9255: - %t140 = phi i1 [ true, %logic.from9253 ], [ %t139, %logic.rend9256 ] - br i1 %t140, label %then9257, label %endif9259 -then9257: + br label %logic.rend9266 +logic.rend9266: + br label %logic.end9265 +logic.end9265: + %t140 = phi i1 [ true, %logic.from9263 ], [ %t139, %logic.rend9266 ] + br i1 %t140, label %then9267, label %endif9269 +then9267: call void @finch_str_drop(ptr %a122) - br label %each.step9245 -endif9259: + br label %each.step9255 +endif9269: %t141 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t141, ptr %a142 - store { ptr, i64, i64 } { ptr @.str.6442, i64 22, i64 0 }, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.6444, i64 22, i64 0 }, ptr %a144 %t145 = call i32 @finch_str_ends(ptr %a142, ptr %a144) %t146 = icmp ne i32 %t145, 0 - br i1 %t146, label %then9260, label %else9261 -then9260: + br i1 %t146, label %then9270, label %else9271 +then9270: %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t148 = load { ptr, i64, i64 }, ptr %a122 store { ptr, i64, i64 } %t148, ptr %a149 %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 %t152 = load i64, ptr %t151 %t153 = sub i64 %t152, 22 - call void @finch_str_sub(ptr %a150, ptr %a149, i64 0, i64 %t153, ptr @.str.6444, i64 128) + call void @finch_str_sub(ptr %a150, ptr %a149, i64 0, i64 %t153, ptr @.str.6446, i64 128) %t154 = load { ptr, i64, i64 }, ptr %a150 - store { ptr, i64, i64 } { ptr @.str.6443, i64 11, i64 0 }, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.6445, i64 11, i64 0 }, ptr %a156 store { ptr, i64, i64 } %t154, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) store { ptr, i64, i64 } %t154, ptr %a158 @@ -97718,11 +97763,11 @@ then9260: %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i64 %t160 store { ptr, i64, i64 } %t159, ptr %t163 store i64 %t161, ptr %t147 - br label %endif9262 -else9261: + br label %endif9272 +else9271: %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t165 = load { ptr, i64, i64 }, ptr %a122 - store { ptr, i64, i64 } { ptr @.str.6445, i64 8, i64 0 }, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.6447, i64 8, i64 0 }, ptr %a167 store { ptr, i64, i64 } %t165, ptr %a168 call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) %t169 = load { ptr, i64, i64 }, ptr %a166 @@ -97733,16 +97778,16 @@ else9261: %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i64 %t170 store { ptr, i64, i64 } %t169, ptr %t173 store i64 %t171, ptr %t164 - br label %endif9262 -endif9262: + br label %endif9272 +endif9272: call void @finch_str_drop(ptr %a122) - br label %each.step9245 -each.step9245: + br label %each.step9255 +each.step9255: %t174 = load i64, ptr %a109 %t175 = add i64 %t174, 1 store i64 %t175, ptr %a109 - br label %each.cond9243 -each.end9246: + br label %each.cond9253 +each.end9256: call void @finch.drop.arr_str(ptr %a108) %t176 = load { ptr, i64, i64 }, ptr %a23 call void @finch.host.remove({ ptr, i64, i64 } %t176) @@ -97801,38 +97846,38 @@ entry: store { ptr, i64, i64 } %t13, ptr %a14 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic9263, label %ok9264 -panic9263: - call void @finch_panic(ptr @.str.6446, i64 143, ptr @.str.6447) + br i1 %t16, label %panic9273, label %ok9274 +panic9273: + call void @finch_panic(ptr @.str.6448, i64 143, ptr @.str.6449) unreachable -ok9264: +ok9274: %t17 = getelementptr inbounds %S.cimport.Importer, ptr %t15, i32 0, i32 3 %t18 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t18, ptr %a19 %t20 = call i64 @finch_map_find(ptr %t17, ptr %a19, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t21 = icmp sge i64 %t20, 0 - br i1 %t21, label %then9265, label %endif9267 -then9265: + br i1 %t21, label %then9275, label %endif9277 +then9275: %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic9268, label %ok9269 -panic9268: - call void @finch_panic(ptr @.str.6448, i64 144, ptr @.str.6449) + br i1 %t23, label %panic9278, label %ok9279 +panic9278: + call void @finch_panic(ptr @.str.6450, i64 144, ptr @.str.6451) unreachable -ok9269: +ok9279: %t24 = getelementptr inbounds %S.cimport.Importer, ptr %t22, i32 0, i32 3 %t25 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = call i64 @finch_map_find(ptr %t24, ptr %a26, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t28 = icmp slt i64 %t27, 0 - br i1 %t28, label %map.missing9270, label %map.found9271 -map.missing9270: + br i1 %t28, label %map.missing9280, label %map.found9281 +map.missing9280: store { ptr, i64, i64 } zeroinitializer, ptr %a29 store { ptr, i64, i64 } %t25, ptr %a30 call void @finch_buf_str(ptr %a29, ptr %a30, i32 1) - call void @finch_map_missing(ptr @.str.6450, i64 144, ptr %a29) + call void @finch_map_missing(ptr @.str.6452, i64 144, ptr %a29) unreachable -map.found9271: +map.found9281: %t31 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t24, i32 0, i32 0 %t32 = load ptr, ptr %t31 %t33 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t32, i64 %t27 @@ -97843,7 +97888,7 @@ map.found9271: %t38 = load { ptr, i64, i64 }, ptr %a37 call void @finch_str_drop(ptr %a14) ret { ptr, i64, i64 } %t38 -endif9267: +endif9277: %t39 = load %S.C.CXCursor, ptr %a7 store %S.C.CXCursor %t39, ptr %a40 %t41 = call { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8 %a40) @@ -97854,45 +97899,45 @@ endif9267: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = icmp eq i64 %t47, 0 - br label %logic.from9272 -logic.from9272: - br i1 %t48, label %logic.end9274, label %logic.rhs9273 -logic.rhs9273: + br label %logic.from9282 +logic.from9282: + br i1 %t48, label %logic.end9284, label %logic.rhs9283 +logic.rhs9283: %t49 = load { ptr, i64, i64 }, ptr %a45 store { ptr, i64, i64 } %t49, ptr %a50 - store { ptr, i64, i64 } { ptr @.str.6452, i64 1, i64 0 }, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6454, i64 1, i64 0 }, ptr %a52 %t53 = call i64 @finch_str_find(ptr %a50, ptr %a52) %t54 = icmp sge i64 %t53, 0 - br label %logic.rend9275 -logic.rend9275: - br label %logic.end9274 -logic.end9274: - %t55 = phi i1 [ true, %logic.from9272 ], [ %t54, %logic.rend9275 ] - br i1 %t55, label %then9276, label %endif9278 -then9276: + br label %logic.rend9285 +logic.rend9285: + br label %logic.end9284 +logic.end9284: + %t55 = phi i1 [ true, %logic.from9282 ], [ %t54, %logic.rend9285 ] + br i1 %t55, label %then9286, label %endif9288 +then9286: %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null - br i1 %t57, label %panic9279, label %ok9280 -panic9279: - call void @finch_panic(ptr @.str.6453, i64 148, ptr @.str.6454) + br i1 %t57, label %panic9289, label %ok9290 +panic9289: + call void @finch_panic(ptr @.str.6455, i64 148, ptr @.str.6456) unreachable -ok9280: +ok9290: %t58 = getelementptr inbounds %S.cimport.Importer, ptr %t56, i32 0, i32 5 %t59 = load i64, ptr %t58 %t60 = add i64 %t59, 1 store i64 %t60, ptr %t58 %t61 = load ptr, ptr %a1 %t62 = icmp eq ptr %t61, null - br i1 %t62, label %panic9281, label %ok9282 -panic9281: - call void @finch_panic(ptr @.str.6456, i64 149, ptr @.str.6457) + br i1 %t62, label %panic9291, label %ok9292 +panic9291: + call void @finch_panic(ptr @.str.6458, i64 149, ptr @.str.6459) unreachable -ok9282: +ok9292: %t63 = getelementptr inbounds %S.cimport.Importer, ptr %t61, i32 0, i32 5 %t64 = load i64, ptr %t63 call void @finch_str_from_int(ptr %a65, i64 %t64) %t66 = load { ptr, i64, i64 }, ptr %a65 - store { ptr, i64, i64 } { ptr @.str.6455, i64 12, i64 0 }, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.6457, i64 12, i64 0 }, ptr %a68 store { ptr, i64, i64 } %t66, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 @@ -97902,16 +97947,16 @@ ok9282: store { ptr, i64, i64 } %t71, ptr %a45 store { ptr, i64, i64 } %t72, ptr %a73 call void @finch_str_drop(ptr %a73) - br label %endif9278 -endif9278: + br label %endif9288 +endif9288: %t74 = load { ptr, i64, i64 }, ptr %a45 %t75 = load ptr, ptr %a1 %t76 = icmp eq ptr %t75, null - br i1 %t76, label %panic9283, label %ok9284 -panic9283: - call void @finch_panic(ptr @.str.6458, i64 151, ptr @.str.6459) + br i1 %t76, label %panic9293, label %ok9294 +panic9293: + call void @finch_panic(ptr @.str.6460, i64 151, ptr @.str.6461) unreachable -ok9284: +ok9294: %t77 = getelementptr inbounds %S.cimport.Importer, ptr %t75, i32 0, i32 3 %t78 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t78, ptr %a79 @@ -97922,14 +97967,14 @@ ok9284: %t84 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i64 %t81 %t85 = load i32, ptr %a80 %t86 = icmp ne i32 %t85, 0 - br i1 %t86, label %map.new9285, label %map.have9286 -map.new9285: + br i1 %t86, label %map.new9295, label %map.have9296 +map.new9295: %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 1 call void @finch_str_copy(ptr %t87, ptr %a79) %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t88 - br label %map.have9286 -map.have9286: + br label %map.have9296 +map.have9296: %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 store { ptr, i64, i64 } %t74, ptr %a90 call void @finch_str_copy(ptr %a91, ptr %a90) @@ -98012,63 +98057,63 @@ entry: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = load ptr, ptr %a1 %t25 = icmp eq ptr %t24, null - br i1 %t25, label %panic9287, label %ok9288 -panic9287: - call void @finch_panic(ptr @.str.6460, i64 161, ptr @.str.6461) + br i1 %t25, label %panic9297, label %ok9298 +panic9297: + call void @finch_panic(ptr @.str.6462, i64 161, ptr @.str.6463) unreachable -ok9288: +ok9298: %t26 = getelementptr inbounds %S.cimport.Importer, ptr %t24, i32 0, i32 0 %t27 = getelementptr inbounds %S.cimport.CImports, ptr %t26, i32 0, i32 3 %t28 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t28, ptr %a29 %t30 = call i64 @finch_map_find(ptr %t27, ptr %a29, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t31 = icmp sge i64 %t30, 0 - br label %logic.from9289 -logic.from9289: - br i1 %t31, label %logic.end9291, label %logic.rhs9290 -logic.rhs9290: + br label %logic.from9299 +logic.from9299: + br i1 %t31, label %logic.end9301, label %logic.rhs9300 +logic.rhs9300: %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic9292, label %ok9293 -panic9292: - call void @finch_panic(ptr @.str.6462, i64 161, ptr @.str.6463) + br i1 %t33, label %panic9302, label %ok9303 +panic9302: + call void @finch_panic(ptr @.str.6464, i64 161, ptr @.str.6465) unreachable -ok9293: +ok9303: %t34 = getelementptr inbounds %S.cimport.Importer, ptr %t32, i32 0, i32 4 %t35 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t35, ptr %a36 %t37 = call i64 @finch_map_find(ptr %t34, ptr %a36, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t38 = icmp sge i64 %t37, 0 - br label %logic.rend9294 -logic.rend9294: - br label %logic.end9291 -logic.end9291: - %t39 = phi i1 [ true, %logic.from9289 ], [ %t38, %logic.rend9294 ] - br i1 %t39, label %then9295, label %endif9297 -then9295: + br label %logic.rend9304 +logic.rend9304: + br label %logic.end9301 +logic.end9301: + %t39 = phi i1 [ true, %logic.from9299 ], [ %t38, %logic.rend9304 ] + br i1 %t39, label %then9305, label %endif9307 +then9305: %t40 = load { ptr, i64, i64 }, ptr %a23 call void @finch_str_drop(ptr %a19) ret { ptr, i64, i64 } %t40 -endif9297: +endif9307: %t41 = load %S.C.CXType, ptr %a7 store %S.C.CXType %t41, ptr %a42 %t43 = call i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8 %a42) store i64 %t43, ptr %a44 %t45 = load i64, ptr %a44 %t46 = icmp slt i64 %t45, 0 - br i1 %t46, label %then9298, label %endif9300 -then9298: + br i1 %t46, label %then9308, label %endif9310 +then9308: call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a19) - ret { ptr, i64, i64 } { ptr @.str.6464, i64 0, i64 0 } -endif9300: + ret { ptr, i64, i64 } { ptr @.str.6466, i64 0, i64 0 } +endif9310: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic9301, label %ok9302 -panic9301: - call void @finch_panic(ptr @.str.6465, i64 168, ptr @.str.6466) + br i1 %t48, label %panic9311, label %ok9312 +panic9311: + call void @finch_panic(ptr @.str.6467, i64 168, ptr @.str.6468) unreachable -ok9302: +ok9312: %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 4 %t50 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t50, ptr %a51 @@ -98079,14 +98124,14 @@ ok9302: %t56 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t55, i64 %t53 %t57 = load i32, ptr %a52 %t58 = icmp ne i32 %t57, 0 - br i1 %t58, label %map.new9303, label %map.have9304 -map.new9303: + br i1 %t58, label %map.new9313, label %map.have9314 +map.new9313: %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 1 call void @finch_str_copy(ptr %t59, ptr %a51) %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 store i1 false, ptr %t60 - br label %map.have9304 -map.have9304: + br label %map.have9314 +map.have9314: %t61 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 store i1 true, ptr %t61 %t62 = load { ptr, i64, i64 }, ptr %a23 @@ -98105,15 +98150,15 @@ map.have9304: store %S.C.CXCursor %t74, ptr %a75 %t76 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a75) %t77 = icmp eq i32 %t76, 3 - br i1 %t77, label %then9305, label %endif9307 -then9305: + br i1 %t77, label %then9315, label %endif9317 +then9315: %t78 = getelementptr inbounds %S.cimport.CStruct, ptr %a73, i32 0, i32 4 %t79 = load { ptr, i64, i64 }, ptr %t78 - store { ptr, i64, i64 } { ptr @.str.6467, i64 12, i64 0 }, ptr %t78 + store { ptr, i64, i64 } { ptr @.str.6469, i64 12, i64 0 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif9307 -endif9307: + br label %endif9317 +endif9317: %t81 = load ptr, ptr %a1 %t82 = insertvalue %S.cimport.FieldCtx zeroinitializer, ptr %t81, 0 %t83 = insertvalue %S.cimport.FieldCtx %t82, ptr %a73, 1 @@ -98123,18 +98168,18 @@ endif9307: %t87 = call i32 @clang_Type_visitFields(ptr byval(%S.C.CXType) align 8 %a86, ptr @finch.c.cimport.visitField, ptr %a84) %t88 = load ptr, ptr %a1 %t89 = icmp eq ptr %t88, null - br i1 %t89, label %panic9308, label %ok9309 -panic9308: - call void @finch_panic(ptr @.str.6468, i64 176, ptr @.str.6469) + br i1 %t89, label %panic9318, label %ok9319 +panic9318: + call void @finch_panic(ptr @.str.6470, i64 176, ptr @.str.6471) unreachable -ok9309: +ok9319: %t90 = getelementptr inbounds %S.cimport.Importer, ptr %t88, i32 0, i32 4 %t91 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t91, ptr %a92 %t93 = call i64 @finch_map_find(ptr %t90, ptr %a92, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t94 = icmp sge i64 %t93, 0 - br i1 %t94, label %remove.hit9310, label %remove.end9311 -remove.hit9310: + br i1 %t94, label %remove.hit9320, label %remove.end9321 +remove.hit9320: %t95 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t90, i32 0, i32 0 %t96 = load ptr, ptr %t95 %t97 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t96, i64 %t93 @@ -98142,16 +98187,16 @@ remove.hit9310: call void @finch_str_drop(ptr %t98) %t99 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t97, i32 0, i32 2 call void @finch_map_remove_at(ptr %t90, i64 %t93, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64)) - br label %remove.end9311 -remove.end9311: + br label %remove.end9321 +remove.end9321: %t100 = load %S.cimport.CStruct, ptr %a73 %t101 = load ptr, ptr %a1 %t102 = icmp eq ptr %t101, null - br i1 %t102, label %panic9312, label %ok9313 -panic9312: - call void @finch_panic(ptr @.str.6470, i64 177, ptr @.str.6471) + br i1 %t102, label %panic9322, label %ok9323 +panic9322: + call void @finch_panic(ptr @.str.6472, i64 177, ptr @.str.6473) unreachable -ok9313: +ok9323: %t103 = getelementptr inbounds %S.cimport.Importer, ptr %t101, i32 0, i32 0 %t104 = getelementptr inbounds %S.cimport.CImports, ptr %t103, i32 0, i32 3 %t105 = load { ptr, i64, i64 }, ptr %a23 @@ -98163,14 +98208,14 @@ ok9313: %t111 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t110, i64 %t108 %t112 = load i32, ptr %a107 %t113 = icmp ne i32 %t112, 0 - br i1 %t113, label %map.new9314, label %map.have9315 -map.new9314: + br i1 %t113, label %map.new9324, label %map.have9325 +map.new9324: %t114 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 1 call void @finch_str_copy(ptr %t114, ptr %a106) %t115 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 store %S.cimport.CStruct zeroinitializer, ptr %t115 - br label %map.have9315 -map.have9315: + br label %map.have9325 +map.have9325: %t116 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 store %S.cimport.CStruct %t100, ptr %a117 call void @finch.copy.S_cimport_CStruct(ptr %a118, ptr %a117) @@ -98181,11 +98226,11 @@ map.have9315: call void @finch.drop.S_cimport_CStruct(ptr %a121) %t122 = load ptr, ptr %a1 %t123 = icmp eq ptr %t122, null - br i1 %t123, label %panic9316, label %ok9317 -panic9316: - call void @finch_panic(ptr @.str.6472, i64 178, ptr @.str.6473) + br i1 %t123, label %panic9326, label %ok9327 +panic9326: + call void @finch_panic(ptr @.str.6474, i64 178, ptr @.str.6475) unreachable -ok9317: +ok9327: %t124 = getelementptr inbounds %S.cimport.Importer, ptr %t122, i32 0, i32 0 %t125 = getelementptr inbounds %S.cimport.CImports, ptr %t124, i32 0, i32 4 %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t125, i32 0, i32 1 @@ -98283,39 +98328,39 @@ entry: store %S.C.CXCursor %t34, ptr %a35 %t36 = call i32 @clang_Cursor_isBitField(ptr byval(%S.C.CXCursor) align 8 %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %then9318, label %else9319 -then9318: + br i1 %t37, label %then9328, label %else9329 +then9328: %t38 = load ptr, ptr %a4 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic9321, label %ok9322 -panic9321: - call void @finch_panic(ptr @.str.6475, i64 195, ptr @.str.6476) + br i1 %t39, label %panic9331, label %ok9332 +panic9331: + call void @finch_panic(ptr @.str.6477, i64 195, ptr @.str.6478) unreachable -ok9322: +ok9332: %t40 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t38, i32 0, i32 1 %t41 = load ptr, ptr %t40 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic9323, label %ok9324 -panic9323: - call void @finch_panic(ptr @.str.6477, i64 195, ptr @.str.6478) + br i1 %t42, label %panic9333, label %ok9334 +panic9333: + call void @finch_panic(ptr @.str.6479, i64 195, ptr @.str.6480) unreachable -ok9324: +ok9334: %t43 = getelementptr inbounds %S.cimport.CStruct, ptr %t41, i32 0, i32 4 %t44 = load { ptr, i64, i64 }, ptr %t43 - store { ptr, i64, i64 } { ptr @.str.6474, i64 14, i64 0 }, ptr %t43 + store { ptr, i64, i64 } { ptr @.str.6476, i64 14, i64 0 }, ptr %t43 store { ptr, i64, i64 } %t44, ptr %a45 call void @finch_str_drop(ptr %a45) %t46 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t46 - br label %endif9320 -else9319: + br label %endif9330 +else9329: %t47 = getelementptr inbounds %S.C.CXType, ptr %a20, i32 0, i32 0 %t48 = load i32, ptr %t47 %t49 = icmp eq i32 %t48, 105 - br label %logic.from9325 -logic.from9325: - br i1 %t49, label %logic.rhs9326, label %logic.end9327 -logic.rhs9326: + br label %logic.from9335 +logic.from9335: + br i1 %t49, label %logic.rhs9336, label %logic.end9337 +logic.rhs9336: %t51 = load %S.C.CXType, ptr %a20 store %S.C.CXType %t51, ptr %a52 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a50, ptr byval(%S.C.CXType) align 8 %a52) @@ -98323,24 +98368,24 @@ logic.rhs9326: store %S.C.CXCursor %t53, ptr %a54 %t55 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a54) %t56 = icmp eq i32 %t55, 3 - br label %logic.rend9328 -logic.rend9328: - br label %logic.end9327 -logic.end9327: - %t57 = phi i1 [ false, %logic.from9325 ], [ %t56, %logic.rend9328 ] - br i1 %t57, label %then9329, label %else9330 -then9329: + br label %logic.rend9338 +logic.rend9338: + br label %logic.end9337 +logic.end9337: + %t57 = phi i1 [ false, %logic.from9335 ], [ %t56, %logic.rend9338 ] + br i1 %t57, label %then9339, label %else9340 +then9339: %t58 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t58 - br label %endif9331 -else9330: + br label %endif9341 +else9340: %t59 = load ptr, ptr %a4 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic9332, label %ok9333 -panic9332: - call void @finch_panic(ptr @.str.6479, i64 200, ptr @.str.6480) + br i1 %t60, label %panic9342, label %ok9343 +panic9342: + call void @finch_panic(ptr @.str.6481, i64 200, ptr @.str.6482) unreachable -ok9333: +ok9343: %t61 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t59, i32 0, i32 0 %t62 = load ptr, ptr %t61 %t63 = load %S.C.CXType, ptr %a20 @@ -98348,8 +98393,8 @@ ok9333: store %S.cimport.Mapped %t64, ptr %a65 %t66 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 2 %t67 = load i1, ptr %t66 - br i1 %t67, label %then9334, label %else9335 -then9334: + br i1 %t67, label %then9344, label %else9345 +then9344: %t68 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 0 %t69 = load %S.ast.Type, ptr %t68 %t70 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 1 @@ -98360,65 +98405,65 @@ then9334: store %S.ast.Type %t73, ptr %t70 store %S.ast.Type %t74, ptr %a75 call void @finch.drop.S_ast_Type(ptr %a75) - br label %endif9336 -else9335: + br label %endif9346 +else9345: %t76 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t76 - br label %endif9336 -endif9336: + br label %endif9346 +endif9346: call void @finch.drop.S_cimport_Mapped(ptr %a65) - br label %endif9331 -endif9331: - br label %endif9320 -endif9320: + br label %endif9341 +endif9341: + br label %endif9330 +endif9330: %t77 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 %t78 = load i1, ptr %t77 - br i1 %t78, label %then9337, label %endif9339 -then9337: + br i1 %t78, label %then9347, label %endif9349 +then9347: %t79 = load ptr, ptr %a4 %t80 = icmp eq ptr %t79, null - br i1 %t80, label %panic9340, label %ok9341 -panic9340: - call void @finch_panic(ptr @.str.6481, i64 208, ptr @.str.6482) + br i1 %t80, label %panic9350, label %ok9351 +panic9350: + call void @finch_panic(ptr @.str.6483, i64 208, ptr @.str.6484) unreachable -ok9341: +ok9351: %t81 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t79, i32 0, i32 1 %t82 = load ptr, ptr %t81 %t83 = icmp eq ptr %t82, null - br i1 %t83, label %panic9342, label %ok9343 -panic9342: - call void @finch_panic(ptr @.str.6483, i64 208, ptr @.str.6484) + br i1 %t83, label %panic9352, label %ok9353 +panic9352: + call void @finch_panic(ptr @.str.6485, i64 208, ptr @.str.6486) unreachable -ok9343: +ok9353: %t84 = getelementptr inbounds %S.cimport.CStruct, ptr %t82, i32 0, i32 5 store i1 true, ptr %t84 - br label %endif9339 -endif9339: + br label %endif9349 +endif9349: %t85 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 0 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 %t87 = load i64, ptr %t86 %t88 = icmp eq i64 %t87, 0 - br i1 %t88, label %then9344, label %endif9346 -then9344: + br i1 %t88, label %then9354, label %endif9356 +then9354: %t89 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 store i1 true, ptr %t89 - br label %endif9346 -endif9346: + br label %endif9356 +endif9356: %t90 = load ptr, ptr %a4 %t91 = icmp eq ptr %t90, null - br i1 %t91, label %panic9347, label %ok9348 -panic9347: - call void @finch_panic(ptr @.str.6485, i64 213, ptr @.str.6486) + br i1 %t91, label %panic9357, label %ok9358 +panic9357: + call void @finch_panic(ptr @.str.6487, i64 213, ptr @.str.6488) unreachable -ok9348: +ok9358: %t92 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t90, i32 0, i32 1 %t93 = load ptr, ptr %t92 %t94 = icmp eq ptr %t93, null - br i1 %t94, label %panic9349, label %ok9350 -panic9349: - call void @finch_panic(ptr @.str.6487, i64 213, ptr @.str.6488) + br i1 %t94, label %panic9359, label %ok9360 +panic9359: + call void @finch_panic(ptr @.str.6489, i64 213, ptr @.str.6490) unreachable -ok9350: +ok9360: %t95 = getelementptr inbounds %S.cimport.CStruct, ptr %t93, i32 0, i32 1 %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 %t97 = load %S.cimport.CField, ptr %a12 @@ -98462,92 +98507,92 @@ entry: store i1 %p1, ptr %a2 %t3 = load i64, ptr %a1 %t4 = icmp eq i64 %t3, 1 - br i1 %t4, label %then9351, label %endif9353 -then9351: + br i1 %t4, label %then9361, label %endif9363 +then9361: %t5 = load i1, ptr %a2 - br i1 %t5, label %then9354, label %endif9356 -then9354: - %t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6489, i64 2, i64 0 }) + br i1 %t5, label %then9364, label %endif9366 +then9364: + %t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6491, i64 2, i64 0 }) %t7 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t6) store %S.ast.Type %t6, ptr %a8 call void @finch.drop.S_ast_Type(ptr %a8) ret %S.cimport.Mapped %t7 -endif9356: - %t9 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6490, i64 2, i64 0 }) +endif9366: + %t9 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6492, i64 2, i64 0 }) %t10 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t9) store %S.ast.Type %t9, ptr %a11 call void @finch.drop.S_ast_Type(ptr %a11) ret %S.cimport.Mapped %t10 -endif9353: +endif9363: %t12 = load i64, ptr %a1 %t13 = icmp eq i64 %t12, 2 - br i1 %t13, label %then9357, label %endif9359 -then9357: + br i1 %t13, label %then9367, label %endif9369 +then9367: %t14 = load i1, ptr %a2 - br i1 %t14, label %then9360, label %endif9362 -then9360: - %t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6491, i64 3, i64 0 }) + br i1 %t14, label %then9370, label %endif9372 +then9370: + %t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6493, i64 3, i64 0 }) %t16 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t15) store %S.ast.Type %t15, ptr %a17 call void @finch.drop.S_ast_Type(ptr %a17) ret %S.cimport.Mapped %t16 -endif9362: - %t18 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6492, i64 3, i64 0 }) +endif9372: + %t18 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6494, i64 3, i64 0 }) %t19 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t18) store %S.ast.Type %t18, ptr %a20 call void @finch.drop.S_ast_Type(ptr %a20) ret %S.cimport.Mapped %t19 -endif9359: +endif9369: %t21 = load i64, ptr %a1 %t22 = icmp eq i64 %t21, 4 - br i1 %t22, label %then9363, label %endif9365 -then9363: + br i1 %t22, label %then9373, label %endif9375 +then9373: %t23 = load i1, ptr %a2 - br i1 %t23, label %then9366, label %endif9368 -then9366: - %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6493, i64 3, i64 0 }) + br i1 %t23, label %then9376, label %endif9378 +then9376: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6495, i64 3, i64 0 }) %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) store %S.ast.Type %t24, ptr %a26 call void @finch.drop.S_ast_Type(ptr %a26) ret %S.cimport.Mapped %t25 -endif9368: - %t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6494, i64 3, i64 0 }) +endif9378: + %t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }) %t28 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t27) store %S.ast.Type %t27, ptr %a29 call void @finch.drop.S_ast_Type(ptr %a29) ret %S.cimport.Mapped %t28 -endif9365: +endif9375: %t30 = load i64, ptr %a1 %t31 = icmp eq i64 %t30, 8 - br i1 %t31, label %then9369, label %endif9371 -then9369: + br i1 %t31, label %then9379, label %endif9381 +then9379: %t32 = load i1, ptr %a2 - br i1 %t32, label %then9372, label %endif9374 -then9372: - %t33 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6495, i64 3, i64 0 }) + br i1 %t32, label %then9382, label %endif9384 +then9382: + %t33 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6497, i64 3, i64 0 }) %t34 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t33) store %S.ast.Type %t33, ptr %a35 call void @finch.drop.S_ast_Type(ptr %a35) ret %S.cimport.Mapped %t34 -endif9374: - %t36 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }) +endif9384: + %t36 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6498, i64 3, i64 0 }) %t37 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t36) store %S.ast.Type %t36, ptr %a38 call void @finch.drop.S_ast_Type(ptr %a38) ret %S.cimport.Mapped %t37 -endif9371: +endif9381: %t39 = load i64, ptr %a1 %t40 = mul i64 %t39, 8 call void @finch_str_from_int(ptr %a41, i64 %t40) %t42 = load { ptr, i64, i64 }, ptr %a41 - store { ptr, i64, i64 } { ptr @.str.6497, i64 7, i64 0 }, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.6499, i64 7, i64 0 }, ptr %a44 store { ptr, i64, i64 } %t42, ptr %a45 call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) store { ptr, i64, i64 } %t42, ptr %a46 call void @finch_str_drop(ptr %a46) %t47 = load { ptr, i64, i64 }, ptr %a43 store { ptr, i64, i64 } %t47, ptr %a49 - store { ptr, i64, i64 } { ptr @.str.6498, i64 11, i64 0 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6500, i64 11, i64 0 }, ptr %a50 call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) store { ptr, i64, i64 } %t47, ptr %a51 call void @finch_str_drop(ptr %a51) @@ -98631,181 +98676,181 @@ entry: store i32 %t15, ptr %a16 %t17 = load i32, ptr %a16 %t18 = icmp eq i32 %t17, 2 - br i1 %t18, label %then9375, label %endif9377 -then9375: - %t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6499, i64 4, i64 0 }) + br i1 %t18, label %then9385, label %endif9387 +then9385: + %t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6501, i64 4, i64 0 }) %t20 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t19) store %S.ast.Type %t19, ptr %a21 call void @finch.drop.S_ast_Type(ptr %a21) ret %S.cimport.Mapped %t20 -endif9377: +endif9387: %t22 = load i32, ptr %a16 %t23 = icmp eq i32 %t22, 3 - br i1 %t23, label %then9378, label %endif9380 -then9378: - %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6500, i64 4, i64 0 }) + br i1 %t23, label %then9388, label %endif9390 +then9388: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6502, i64 4, i64 0 }) %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) store %S.ast.Type %t24, ptr %a26 call void @finch.drop.S_ast_Type(ptr %a26) ret %S.cimport.Mapped %t25 -endif9380: +endif9390: %t27 = load i32, ptr %a16 %t28 = icmp eq i32 %t27, 13 - br label %logic.from9381 -logic.from9381: - br i1 %t28, label %logic.end9383, label %logic.rhs9382 -logic.rhs9382: + br label %logic.from9391 +logic.from9391: + br i1 %t28, label %logic.end9393, label %logic.rhs9392 +logic.rhs9392: %t29 = load i32, ptr %a16 %t30 = icmp eq i32 %t29, 4 - br label %logic.rend9384 -logic.rend9384: - br label %logic.end9383 -logic.end9383: - %t31 = phi i1 [ true, %logic.from9381 ], [ %t30, %logic.rend9384 ] - br i1 %t31, label %then9385, label %endif9387 -then9385: - %t32 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6501, i64 4, i64 0 }) + br label %logic.rend9394 +logic.rend9394: + br label %logic.end9393 +logic.end9393: + %t31 = phi i1 [ true, %logic.from9391 ], [ %t30, %logic.rend9394 ] + br i1 %t31, label %then9395, label %endif9397 +then9395: + %t32 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6503, i64 4, i64 0 }) %t33 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t32) store %S.ast.Type %t32, ptr %a34 call void @finch.drop.S_ast_Type(ptr %a34) ret %S.cimport.Mapped %t33 -endif9387: +endif9397: %t35 = load i32, ptr %a16 %t36 = icmp eq i32 %t35, 14 - br label %logic.from9388 -logic.from9388: - br i1 %t36, label %logic.end9390, label %logic.rhs9389 -logic.rhs9389: + br label %logic.from9398 +logic.from9398: + br i1 %t36, label %logic.end9400, label %logic.rhs9399 +logic.rhs9399: %t37 = load i32, ptr %a16 %t38 = icmp eq i32 %t37, 16 - br label %logic.rend9391 -logic.rend9391: - br label %logic.end9390 -logic.end9390: - %t39 = phi i1 [ true, %logic.from9388 ], [ %t38, %logic.rend9391 ] - br label %logic.from9392 -logic.from9392: - br i1 %t39, label %logic.end9394, label %logic.rhs9393 -logic.rhs9393: + br label %logic.rend9401 +logic.rend9401: + br label %logic.end9400 +logic.end9400: + %t39 = phi i1 [ true, %logic.from9398 ], [ %t38, %logic.rend9401 ] + br label %logic.from9402 +logic.from9402: + br i1 %t39, label %logic.end9404, label %logic.rhs9403 +logic.rhs9403: %t40 = load i32, ptr %a16 %t41 = icmp eq i32 %t40, 17 - br label %logic.rend9395 -logic.rend9395: - br label %logic.end9394 -logic.end9394: - %t42 = phi i1 [ true, %logic.from9392 ], [ %t41, %logic.rend9395 ] - br label %logic.from9396 -logic.from9396: - br i1 %t42, label %logic.end9398, label %logic.rhs9397 -logic.rhs9397: + br label %logic.rend9405 +logic.rend9405: + br label %logic.end9404 +logic.end9404: + %t42 = phi i1 [ true, %logic.from9402 ], [ %t41, %logic.rend9405 ] + br label %logic.from9406 +logic.from9406: + br i1 %t42, label %logic.end9408, label %logic.rhs9407 +logic.rhs9407: %t43 = load i32, ptr %a16 %t44 = icmp eq i32 %t43, 18 - br label %logic.rend9399 -logic.rend9399: - br label %logic.end9398 -logic.end9398: - %t45 = phi i1 [ true, %logic.from9396 ], [ %t44, %logic.rend9399 ] - br label %logic.from9400 -logic.from9400: - br i1 %t45, label %logic.end9402, label %logic.rhs9401 -logic.rhs9401: + br label %logic.rend9409 +logic.rend9409: + br label %logic.end9408 +logic.end9408: + %t45 = phi i1 [ true, %logic.from9406 ], [ %t44, %logic.rend9409 ] + br label %logic.from9410 +logic.from9410: + br i1 %t45, label %logic.end9412, label %logic.rhs9411 +logic.rhs9411: %t46 = load i32, ptr %a16 %t47 = icmp eq i32 %t46, 19 - br label %logic.rend9403 -logic.rend9403: - br label %logic.end9402 -logic.end9402: - %t48 = phi i1 [ true, %logic.from9400 ], [ %t47, %logic.rend9403 ] - br i1 %t48, label %then9404, label %endif9406 -then9404: + br label %logic.rend9413 +logic.rend9413: + br label %logic.end9412 +logic.end9412: + %t48 = phi i1 [ true, %logic.from9410 ], [ %t47, %logic.rend9413 ] + br i1 %t48, label %then9414, label %endif9416 +then9414: %t49 = load i64, ptr %a13 %t50 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t49, i1 true) ret %S.cimport.Mapped %t50 -endif9406: +endif9416: %t51 = load i32, ptr %a16 %t52 = icmp eq i32 %t51, 5 - br label %logic.from9407 -logic.from9407: - br i1 %t52, label %logic.end9409, label %logic.rhs9408 -logic.rhs9408: + br label %logic.from9417 +logic.from9417: + br i1 %t52, label %logic.end9419, label %logic.rhs9418 +logic.rhs9418: %t53 = load i32, ptr %a16 %t54 = icmp eq i32 %t53, 8 - br label %logic.rend9410 -logic.rend9410: - br label %logic.end9409 -logic.end9409: - %t55 = phi i1 [ true, %logic.from9407 ], [ %t54, %logic.rend9410 ] - br label %logic.from9411 -logic.from9411: - br i1 %t55, label %logic.end9413, label %logic.rhs9412 -logic.rhs9412: + br label %logic.rend9420 +logic.rend9420: + br label %logic.end9419 +logic.end9419: + %t55 = phi i1 [ true, %logic.from9417 ], [ %t54, %logic.rend9420 ] + br label %logic.from9421 +logic.from9421: + br i1 %t55, label %logic.end9423, label %logic.rhs9422 +logic.rhs9422: %t56 = load i32, ptr %a16 %t57 = icmp eq i32 %t56, 9 - br label %logic.rend9414 -logic.rend9414: - br label %logic.end9413 -logic.end9413: - %t58 = phi i1 [ true, %logic.from9411 ], [ %t57, %logic.rend9414 ] - br label %logic.from9415 -logic.from9415: - br i1 %t58, label %logic.end9417, label %logic.rhs9416 -logic.rhs9416: + br label %logic.rend9424 +logic.rend9424: + br label %logic.end9423 +logic.end9423: + %t58 = phi i1 [ true, %logic.from9421 ], [ %t57, %logic.rend9424 ] + br label %logic.from9425 +logic.from9425: + br i1 %t58, label %logic.end9427, label %logic.rhs9426 +logic.rhs9426: %t59 = load i32, ptr %a16 %t60 = icmp eq i32 %t59, 10 - br label %logic.rend9418 -logic.rend9418: - br label %logic.end9417 -logic.end9417: - %t61 = phi i1 [ true, %logic.from9415 ], [ %t60, %logic.rend9418 ] - br label %logic.from9419 -logic.from9419: - br i1 %t61, label %logic.end9421, label %logic.rhs9420 -logic.rhs9420: + br label %logic.rend9428 +logic.rend9428: + br label %logic.end9427 +logic.end9427: + %t61 = phi i1 [ true, %logic.from9425 ], [ %t60, %logic.rend9428 ] + br label %logic.from9429 +logic.from9429: + br i1 %t61, label %logic.end9431, label %logic.rhs9430 +logic.rhs9430: %t62 = load i32, ptr %a16 %t63 = icmp eq i32 %t62, 11 - br label %logic.rend9422 -logic.rend9422: - br label %logic.end9421 -logic.end9421: - %t64 = phi i1 [ true, %logic.from9419 ], [ %t63, %logic.rend9422 ] - br i1 %t64, label %then9423, label %endif9425 -then9423: + br label %logic.rend9432 +logic.rend9432: + br label %logic.end9431 +logic.end9431: + %t64 = phi i1 [ true, %logic.from9429 ], [ %t63, %logic.rend9432 ] + br i1 %t64, label %then9433, label %endif9435 +then9433: %t65 = load i64, ptr %a13 %t66 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t65, i1 false) ret %S.cimport.Mapped %t66 -endif9425: +endif9435: %t67 = load i32, ptr %a16 %t68 = icmp eq i32 %t67, 106 - br i1 %t68, label %then9426, label %endif9428 -then9426: + br i1 %t68, label %then9436, label %endif9438 +then9436: %t69 = load i64, ptr %a13 %t70 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t69, i1 true) ret %S.cimport.Mapped %t70 -endif9428: +endif9438: %t71 = load i32, ptr %a16 %t72 = icmp eq i32 %t71, 21 - br i1 %t72, label %then9429, label %endif9431 -then9429: - %t73 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6502, i64 3, i64 0 }) + br i1 %t72, label %then9439, label %endif9441 +then9439: + %t73 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6504, i64 3, i64 0 }) %t74 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t73) store %S.ast.Type %t73, ptr %a75 call void @finch.drop.S_ast_Type(ptr %a75) ret %S.cimport.Mapped %t74 -endif9431: +endif9441: %t76 = load i32, ptr %a16 %t77 = icmp eq i32 %t76, 22 - br i1 %t77, label %then9432, label %endif9434 -then9432: - %t78 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6503, i64 5, i64 0 }) + br i1 %t77, label %then9442, label %endif9444 +then9442: + %t78 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6505, i64 5, i64 0 }) %t79 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t78) store %S.ast.Type %t78, ptr %a80 call void @finch.drop.S_ast_Type(ptr %a80) ret %S.cimport.Mapped %t79 -endif9434: +endif9444: %t81 = load i32, ptr %a16 %t82 = icmp eq i32 %t81, 101 - br i1 %t82, label %then9435, label %endif9437 -then9435: + br i1 %t82, label %then9445, label %endif9447 +then9445: %t85 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t85, ptr %a86 call void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16 %a84, ptr byval(%S.C.CXType) align 8 %a86) @@ -98817,90 +98862,90 @@ then9435: %t91 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t92 = load i32, ptr %t91 %t93 = icmp eq i32 %t92, 13 - br label %logic.from9438 -logic.from9438: - br i1 %t93, label %logic.end9440, label %logic.rhs9439 -logic.rhs9439: + br label %logic.from9448 +logic.from9448: + br i1 %t93, label %logic.end9450, label %logic.rhs9449 +logic.rhs9449: %t94 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t95 = load i32, ptr %t94 %t96 = icmp eq i32 %t95, 4 - br label %logic.rend9441 -logic.rend9441: - br label %logic.end9440 -logic.end9440: - %t97 = phi i1 [ true, %logic.from9438 ], [ %t96, %logic.rend9441 ] - br label %logic.from9442 -logic.from9442: - br i1 %t97, label %logic.rhs9443, label %logic.end9444 -logic.rhs9443: + br label %logic.rend9451 +logic.rend9451: + br label %logic.end9450 +logic.end9450: + %t97 = phi i1 [ true, %logic.from9448 ], [ %t96, %logic.rend9451 ] + br label %logic.from9452 +logic.from9452: + br i1 %t97, label %logic.rhs9453, label %logic.end9454 +logic.rhs9453: %t98 = load i1, ptr %a3 - br label %logic.rend9445 -logic.rend9445: - br label %logic.end9444 -logic.end9444: - %t99 = phi i1 [ false, %logic.from9442 ], [ %t98, %logic.rend9445 ] - br i1 %t99, label %then9446, label %endif9448 -then9446: + br label %logic.rend9455 +logic.rend9455: + br label %logic.end9454 +logic.end9454: + %t99 = phi i1 [ false, %logic.from9452 ], [ %t98, %logic.rend9455 ] + br i1 %t99, label %then9456, label %endif9458 +then9456: %t100 = load i1, ptr %a4 %t101 = xor i1 %t100, true - br label %logic.from9449 -logic.from9449: - br i1 %t101, label %logic.end9451, label %logic.rhs9450 -logic.rhs9450: + br label %logic.from9459 +logic.from9459: + br i1 %t101, label %logic.end9461, label %logic.rhs9460 +logic.rhs9460: %t102 = load %S.C.CXType, ptr %a90 store %S.C.CXType %t102, ptr %a103 %t104 = call i32 @clang_isConstQualifiedType(ptr byval(%S.C.CXType) align 8 %a103) %t105 = icmp ne i32 %t104, 0 - br label %logic.rend9452 -logic.rend9452: - br label %logic.end9451 -logic.end9451: - %t106 = phi i1 [ true, %logic.from9449 ], [ %t105, %logic.rend9452 ] - br i1 %t106, label %then9453, label %endif9455 -then9453: - %t107 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6504, i64 3, i64 0 }) + br label %logic.rend9462 +logic.rend9462: + br label %logic.end9461 +logic.end9461: + %t106 = phi i1 [ true, %logic.from9459 ], [ %t105, %logic.rend9462 ] + br i1 %t106, label %then9463, label %endif9465 +then9463: + %t107 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6506, i64 3, i64 0 }) %t108 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t107) store %S.ast.Type %t107, ptr %a109 call void @finch.drop.S_ast_Type(ptr %a109) ret %S.cimport.Mapped %t108 -endif9455: - br label %endif9448 -endif9448: +endif9465: + br label %endif9458 +endif9458: %t110 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t111 = load i32, ptr %t110 %t112 = icmp eq i32 %t111, 2 - br label %logic.from9456 -logic.from9456: - br i1 %t112, label %logic.end9458, label %logic.rhs9457 -logic.rhs9457: + br label %logic.from9466 +logic.from9466: + br i1 %t112, label %logic.end9468, label %logic.rhs9467 +logic.rhs9467: %t113 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t114 = load i32, ptr %t113 %t115 = icmp eq i32 %t114, 111 - br label %logic.rend9459 -logic.rend9459: - br label %logic.end9458 -logic.end9458: - %t116 = phi i1 [ true, %logic.from9456 ], [ %t115, %logic.rend9459 ] - br label %logic.from9460 -logic.from9460: - br i1 %t116, label %logic.end9462, label %logic.rhs9461 -logic.rhs9461: + br label %logic.rend9469 +logic.rend9469: + br label %logic.end9468 +logic.end9468: + %t116 = phi i1 [ true, %logic.from9466 ], [ %t115, %logic.rend9469 ] + br label %logic.from9470 +logic.from9470: + br i1 %t116, label %logic.end9472, label %logic.rhs9471 +logic.rhs9471: %t117 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 %t118 = load i32, ptr %t117 %t119 = icmp eq i32 %t118, 110 - br label %logic.rend9463 -logic.rend9463: - br label %logic.end9462 -logic.end9462: - %t120 = phi i1 [ true, %logic.from9460 ], [ %t119, %logic.rend9463 ] - br i1 %t120, label %then9464, label %endif9466 -then9464: - %t121 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6505, i64 3, i64 0 }) + br label %logic.rend9473 +logic.rend9473: + br label %logic.end9472 +logic.end9472: + %t120 = phi i1 [ true, %logic.from9470 ], [ %t119, %logic.rend9473 ] + br i1 %t120, label %then9474, label %endif9476 +then9474: + %t121 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6507, i64 3, i64 0 }) %t122 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t121) store %S.ast.Type %t121, ptr %a123 call void @finch.drop.S_ast_Type(ptr %a123) ret %S.cimport.Mapped %t122 -endif9466: +endif9476: %t124 = load ptr, ptr %a1 %t125 = load %S.C.CXType, ptr %a90 %t126 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t124, %S.C.CXType %t125, i1 false, i1 false) @@ -98908,47 +98953,47 @@ endif9466: %t128 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 2 %t129 = load i1, ptr %t128 %t130 = xor i1 %t129, true - br label %logic.from9467 -logic.from9467: - br i1 %t130, label %logic.end9469, label %logic.rhs9468 -logic.rhs9468: + br label %logic.from9477 +logic.from9477: + br i1 %t130, label %logic.end9479, label %logic.rhs9478 +logic.rhs9478: %t131 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 %t133 = load { ptr, i64, i64 }, ptr %t132 store { ptr, i64, i64 } %t133, ptr %a134 - store { ptr, i64, i64 } { ptr @.str.6506, i64 4, i64 0 }, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.6508, i64 4, i64 0 }, ptr %a135 %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) %t137 = icmp ne i32 %t136, 0 - br label %logic.rend9470 -logic.rend9470: - br label %logic.end9469 -logic.end9469: - %t138 = phi i1 [ true, %logic.from9467 ], [ %t137, %logic.rend9470 ] - br label %logic.from9471 -logic.from9471: - br i1 %t138, label %logic.end9473, label %logic.rhs9472 -logic.rhs9472: + br label %logic.rend9480 +logic.rend9480: + br label %logic.end9479 +logic.end9479: + %t138 = phi i1 [ true, %logic.from9477 ], [ %t137, %logic.rend9480 ] + br label %logic.from9481 +logic.from9481: + br i1 %t138, label %logic.end9483, label %logic.rhs9482 +logic.rhs9482: %t139 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 %t140 = getelementptr inbounds %S.ast.Type, ptr %t139, i32 0, i32 0 %t141 = load { ptr, i64, i64 }, ptr %t140 store { ptr, i64, i64 } %t141, ptr %a142 - store { ptr, i64, i64 } { ptr @.str.6507, i64 5, i64 0 }, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.6509, i64 5, i64 0 }, ptr %a143 %t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143) %t145 = icmp ne i32 %t144, 0 - br label %logic.rend9474 -logic.rend9474: - br label %logic.end9473 -logic.end9473: - %t146 = phi i1 [ true, %logic.from9471 ], [ %t145, %logic.rend9474 ] - br i1 %t146, label %then9475, label %endif9477 -then9475: - %t147 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6508, i64 3, i64 0 }) + br label %logic.rend9484 +logic.rend9484: + br label %logic.end9483 +logic.end9483: + %t146 = phi i1 [ true, %logic.from9481 ], [ %t145, %logic.rend9484 ] + br i1 %t146, label %then9485, label %endif9487 +then9485: + %t147 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6510, i64 3, i64 0 }) %t148 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t147) store %S.ast.Type %t147, ptr %a149 call void @finch.drop.S_ast_Type(ptr %a149) call void @finch.drop.S_cimport_Mapped(ptr %a127) ret %S.cimport.Mapped %t148 -endif9477: +endif9487: %t150 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 %t151 = load %S.ast.Type, ptr %t150 %t152 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t151) @@ -98957,11 +99002,11 @@ endif9477: call void @finch.drop.S_ast_Type(ptr %a154) call void @finch.drop.S_cimport_Mapped(ptr %a127) ret %S.cimport.Mapped %t153 -endif9437: +endif9447: %t155 = load i32, ptr %a16 %t156 = icmp eq i32 %t155, 105 - br i1 %t156, label %then9478, label %endif9480 -then9478: + br i1 %t156, label %then9488, label %endif9490 +then9488: %t158 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t158, ptr %a159 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a157, ptr byval(%S.C.CXType) align 8 %a159) @@ -98969,11 +99014,11 @@ then9478: store %S.C.CXCursor %t160, ptr %a161 %t162 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a161) %t163 = icmp eq i32 %t162, 3 - br i1 %t163, label %then9481, label %endif9483 -then9481: - %t164 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6509, i64 23, i64 0 }) + br i1 %t163, label %then9491, label %endif9493 +then9491: + %t164 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6511, i64 23, i64 0 }) ret %S.cimport.Mapped %t164 -endif9483: +endif9493: %t165 = load ptr, ptr %a1 %t166 = load %S.C.CXType, ptr %a9 %t167 = call { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %t165, %S.C.CXType %t166) @@ -98981,29 +99026,29 @@ endif9483: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = icmp eq i64 %t170, 0 - br i1 %t171, label %then9484, label %endif9486 -then9484: - %t172 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6510, i64 36, i64 0 }) + br i1 %t171, label %then9494, label %endif9496 +then9494: + %t172 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6512, i64 36, i64 0 }) call void @finch_str_drop(ptr %a168) ret %S.cimport.Mapped %t172 -endif9486: - %t173 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6511, i64 5, i64 0 }, 0 +endif9496: + %t173 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6513, i64 5, i64 0 }, 0 %t174 = load { ptr, i64, i64 }, ptr %a168 store { ptr, i64, i64 } %t174, ptr %a175 call void @finch_str_copy(ptr %a176, ptr %a175) %t177 = load { ptr, i64, i64 }, ptr %a176 %t178 = insertvalue %S.ast.Type %t173, { ptr, i64, i64 } %t177, 2 - %t179 = insertvalue %S.ast.Type %t178, { ptr, i64, i64 } { ptr @.str.6512, i64 1, i64 0 }, 3 + %t179 = insertvalue %S.ast.Type %t178, { ptr, i64, i64 } { ptr @.str.6514, i64 1, i64 0 }, 3 %t180 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t179) store %S.ast.Type %t179, ptr %a181 call void @finch.drop.S_ast_Type(ptr %a181) call void @finch_str_drop(ptr %a168) ret %S.cimport.Mapped %t180 -endif9480: +endif9490: %t182 = load i32, ptr %a16 %t183 = icmp eq i32 %t182, 112 - br i1 %t183, label %then9487, label %endif9489 -then9487: + br i1 %t183, label %then9497, label %endif9499 +then9497: %t184 = load ptr, ptr %a1 %t186 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t186, ptr %a187 @@ -99014,11 +99059,11 @@ then9487: %t191 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 2 %t192 = load i1, ptr %t191 %t193 = xor i1 %t192, true - br i1 %t193, label %then9490, label %endif9492 -then9490: + br i1 %t193, label %then9500, label %endif9502 +then9500: %t194 = load %S.cimport.Mapped, ptr %a190 ret %S.cimport.Mapped %t194 -endif9492: +endif9502: %t195 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 0 %t196 = load %S.ast.Type, ptr %t195 %t197 = load %S.C.CXType, ptr %a9 @@ -99030,28 +99075,28 @@ endif9492: call void @finch.drop.S_ast_Type(ptr %a202) call void @finch.drop.S_cimport_Mapped(ptr %a190) ret %S.cimport.Mapped %t201 -endif9489: +endif9499: %t203 = load i32, ptr %a16 %t204 = icmp eq i32 %t203, 23 - br i1 %t204, label %then9493, label %endif9495 -then9493: - %t205 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6513, i64 16, i64 0 }) + br i1 %t204, label %then9503, label %endif9505 +then9503: + %t205 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6515, i64 16, i64 0 }) ret %S.cimport.Mapped %t205 -endif9495: +endif9505: %t206 = load %S.C.CXType, ptr %a9 store %S.C.CXType %t206, ptr %a207 %t208 = call { i64, i64 } @clang_getTypeSpelling(ptr byval(%S.C.CXType) align 8 %a207) store { i64, i64 } %t208, ptr %a209 %t210 = load %S.C.CXString, ptr %a209 %t211 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t210) - store { ptr, i64, i64 } { ptr @.str.6514, i64 17, i64 0 }, ptr %a213 + store { ptr, i64, i64 } { ptr @.str.6516, i64 17, i64 0 }, ptr %a213 store { ptr, i64, i64 } %t211, ptr %a214 call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) store { ptr, i64, i64 } %t211, ptr %a215 call void @finch_str_drop(ptr %a215) %t216 = load { ptr, i64, i64 }, ptr %a212 store { ptr, i64, i64 } %t216, ptr %a218 - store { ptr, i64, i64 } { ptr @.str.6515, i64 1, i64 0 }, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.6517, i64 1, i64 0 }, ptr %a219 call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) store { ptr, i64, i64 } %t216, ptr %a220 call void @finch_str_drop(ptr %a220) @@ -99100,99 +99145,99 @@ entry: store i64 10, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t8, ptr %a9 - store { ptr, i64, i64 } { ptr @.str.6517, i64 2, i64 0 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.6519, i64 2, i64 0 }, ptr %a11 %t12 = call i32 @finch_str_starts(ptr %a9, ptr %a11) %t13 = icmp ne i32 %t12, 0 - br label %logic.from9496 -logic.from9496: - br i1 %t13, label %logic.end9498, label %logic.rhs9497 -logic.rhs9497: + br label %logic.from9506 +logic.from9506: + br i1 %t13, label %logic.end9508, label %logic.rhs9507 +logic.rhs9507: %t14 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t14, ptr %a15 - store { ptr, i64, i64 } { ptr @.str.6519, i64 2, i64 0 }, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6521, i64 2, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br label %logic.rend9499 -logic.rend9499: - br label %logic.end9498 -logic.end9498: - %t20 = phi i1 [ true, %logic.from9496 ], [ %t19, %logic.rend9499 ] - br i1 %t20, label %then9500, label %else9501 -then9500: + br label %logic.rend9509 +logic.rend9509: + br label %logic.end9508 +logic.end9508: + %t20 = phi i1 [ true, %logic.from9506 ], [ %t19, %logic.rend9509 ] + br i1 %t20, label %then9510, label %else9511 +then9510: store i64 16, ptr %a7 %t21 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t25 = load i64, ptr %t24 - call void @finch_str_sub(ptr %a23, ptr %a22, i64 2, i64 %t25, ptr @.str.6520, i64 331) + call void @finch_str_sub(ptr %a23, ptr %a22, i64 2, i64 %t25, ptr @.str.6522, i64 331) %t26 = load { ptr, i64, i64 }, ptr %a23 %t27 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t26, ptr %a6 store { ptr, i64, i64 } %t27, ptr %a28 call void @finch_str_drop(ptr %a28) - br label %endif9502 -else9501: + br label %endif9512 +else9511: %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = icmp sgt i64 %t30, 1 - br label %logic.from9503 -logic.from9503: - br i1 %t31, label %logic.rhs9504, label %logic.end9505 -logic.rhs9504: + br label %logic.from9513 +logic.from9513: + br i1 %t31, label %logic.rhs9514, label %logic.end9515 +logic.rhs9514: %t32 = load { ptr, i64, i64 }, ptr %a6 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 0, %t33 - br i1 %t34, label %range9506, label %inrange9507 -range9506: - call void @finch_panic_index(ptr @.str.6521, i64 332, i64 0, i64 %t33) + br i1 %t34, label %range9516, label %inrange9517 +range9516: + call void @finch_panic_index(ptr @.str.6523, i64 332, i64 0, i64 %t33) unreachable -inrange9507: +inrange9517: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds i8, ptr %t35, i64 0 %t37 = load i8, ptr %t36 %t38 = icmp eq i8 %t37, 48 - br label %logic.rend9508 -logic.rend9508: - br label %logic.end9505 -logic.end9505: - %t39 = phi i1 [ false, %logic.from9503 ], [ %t38, %logic.rend9508 ] - br i1 %t39, label %then9509, label %endif9511 -then9509: + br label %logic.rend9518 +logic.rend9518: + br label %logic.end9515 +logic.end9515: + %t39 = phi i1 [ false, %logic.from9513 ], [ %t38, %logic.rend9518 ] + br i1 %t39, label %then9519, label %endif9521 +then9519: store i64 8, ptr %a7 %t40 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t40, ptr %a41 %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t44 = load i64, ptr %t43 - call void @finch_str_sub(ptr %a42, ptr %a41, i64 1, i64 %t44, ptr @.str.6522, i64 334) + call void @finch_str_sub(ptr %a42, ptr %a41, i64 1, i64 %t44, ptr @.str.6524, i64 334) %t45 = load { ptr, i64, i64 }, ptr %a42 %t46 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t45, ptr %a6 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %endif9511 -endif9511: - br label %endif9502 -endif9502: + br label %endif9521 +endif9521: + br label %endif9512 +endif9512: store i64 0, ptr %a48 store i1 false, ptr %a49 store i64 0, ptr %a50 - br label %while.cond9512 -while.cond9512: + br label %while.cond9522 +while.cond9522: %t51 = load i64, ptr %a50 %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t53 = load i64, ptr %t52 %t54 = icmp slt i64 %t51, %t53 - br i1 %t54, label %while.body9513, label %while.end9514 -while.body9513: + br i1 %t54, label %while.body9523, label %while.end9524 +while.body9523: %t55 = load i64, ptr %a50 %t56 = load { ptr, i64, i64 }, ptr %a6 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 %t55, %t57 - br i1 %t58, label %range9515, label %inrange9516 -range9515: - call void @finch_panic_index(ptr @.str.6523, i64 340, i64 %t55, i64 %t57) + br i1 %t58, label %range9525, label %inrange9526 +range9525: + call void @finch_panic_index(ptr @.str.6525, i64 340, i64 %t55, i64 %t57) unreachable -inrange9516: +inrange9526: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds i8, ptr %t59, i64 %t55 %t61 = load i8, ptr %t60 @@ -99200,83 +99245,83 @@ inrange9516: store i64 99, ptr %a63 %t64 = load i8, ptr %a62 %t65 = icmp uge i8 %t64, 48 - br label %logic.from9517 -logic.from9517: - br i1 %t65, label %logic.rhs9518, label %logic.end9519 -logic.rhs9518: + br label %logic.from9527 +logic.from9527: + br i1 %t65, label %logic.rhs9528, label %logic.end9529 +logic.rhs9528: %t66 = load i8, ptr %a62 %t67 = icmp ule i8 %t66, 57 - br label %logic.rend9520 -logic.rend9520: - br label %logic.end9519 -logic.end9519: - %t68 = phi i1 [ false, %logic.from9517 ], [ %t67, %logic.rend9520 ] - br i1 %t68, label %then9521, label %else9522 -then9521: + br label %logic.rend9530 +logic.rend9530: + br label %logic.end9529 +logic.end9529: + %t68 = phi i1 [ false, %logic.from9527 ], [ %t67, %logic.rend9530 ] + br i1 %t68, label %then9531, label %else9532 +then9531: %t69 = load i8, ptr %a62 %t70 = zext i8 %t69 to i64 %t71 = zext i8 48 to i64 %t72 = sub i64 %t70, %t71 store i64 %t72, ptr %a63 - br label %endif9523 -else9522: + br label %endif9533 +else9532: %t73 = load i8, ptr %a62 %t74 = icmp uge i8 %t73, 97 - br label %logic.from9524 -logic.from9524: - br i1 %t74, label %logic.rhs9525, label %logic.end9526 -logic.rhs9525: + br label %logic.from9534 +logic.from9534: + br i1 %t74, label %logic.rhs9535, label %logic.end9536 +logic.rhs9535: %t75 = load i8, ptr %a62 %t76 = icmp ule i8 %t75, 102 - br label %logic.rend9527 -logic.rend9527: - br label %logic.end9526 -logic.end9526: - %t77 = phi i1 [ false, %logic.from9524 ], [ %t76, %logic.rend9527 ] - br i1 %t77, label %then9528, label %else9529 -then9528: + br label %logic.rend9537 +logic.rend9537: + br label %logic.end9536 +logic.end9536: + %t77 = phi i1 [ false, %logic.from9534 ], [ %t76, %logic.rend9537 ] + br i1 %t77, label %then9538, label %else9539 +then9538: %t78 = load i8, ptr %a62 %t79 = zext i8 %t78 to i64 %t80 = zext i8 97 to i64 %t81 = sub i64 %t79, %t80 %t82 = add i64 %t81, 10 store i64 %t82, ptr %a63 - br label %endif9530 -else9529: + br label %endif9540 +else9539: %t83 = load i8, ptr %a62 %t84 = icmp uge i8 %t83, 65 - br label %logic.from9531 -logic.from9531: - br i1 %t84, label %logic.rhs9532, label %logic.end9533 -logic.rhs9532: + br label %logic.from9541 +logic.from9541: + br i1 %t84, label %logic.rhs9542, label %logic.end9543 +logic.rhs9542: %t85 = load i8, ptr %a62 %t86 = icmp ule i8 %t85, 70 - br label %logic.rend9534 -logic.rend9534: - br label %logic.end9533 -logic.end9533: - %t87 = phi i1 [ false, %logic.from9531 ], [ %t86, %logic.rend9534 ] - br i1 %t87, label %then9535, label %endif9537 -then9535: + br label %logic.rend9544 +logic.rend9544: + br label %logic.end9543 +logic.end9543: + %t87 = phi i1 [ false, %logic.from9541 ], [ %t86, %logic.rend9544 ] + br i1 %t87, label %then9545, label %endif9547 +then9545: %t88 = load i8, ptr %a62 %t89 = zext i8 %t88 to i64 %t90 = zext i8 65 to i64 %t91 = sub i64 %t89, %t90 %t92 = add i64 %t91, 10 store i64 %t92, ptr %a63 - br label %endif9537 -endif9537: - br label %endif9530 -endif9530: - br label %endif9523 -endif9523: + br label %endif9547 +endif9547: + br label %endif9540 +endif9540: + br label %endif9533 +endif9533: %t93 = load i64, ptr %a63 %t94 = load i64, ptr %a7 %t95 = icmp sge i64 %t93, %t94 - br i1 %t95, label %then9538, label %endif9540 -then9538: - br label %while.end9514 -endif9540: + br i1 %t95, label %then9548, label %endif9550 +then9548: + br label %while.end9524 +endif9550: %t96 = load i64, ptr %a48 %t97 = load i64, ptr %a7 %t98 = mul i64 %t96, %t97 @@ -99287,26 +99332,26 @@ endif9540: %t101 = load i64, ptr %a50 %t102 = add i64 %t101, 1 store i64 %t102, ptr %a50 - br label %while.cond9512 -while.end9514: - br label %while.cond9541 -while.cond9541: + br label %while.cond9522 +while.end9524: + br label %while.cond9551 +while.cond9551: %t103 = load i64, ptr %a50 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t105 = load i64, ptr %t104 %t106 = icmp slt i64 %t103, %t105 - br i1 %t106, label %while.body9542, label %while.end9543 -while.body9542: - store { ptr, i64, i64 } { ptr @.str.6524, i64 4, i64 0 }, ptr %a107 + br i1 %t106, label %while.body9552, label %while.end9553 +while.body9552: + store { ptr, i64, i64 } { ptr @.str.6526, i64 4, i64 0 }, ptr %a107 %t109 = load i64, ptr %a50 %t110 = load { ptr, i64, i64 }, ptr %a6 %t111 = extractvalue { ptr, i64, i64 } %t110, 1 %t112 = icmp uge i64 %t109, %t111 - br i1 %t112, label %range9544, label %inrange9545 -range9544: - call void @finch_panic_index(ptr @.str.6526, i64 358, i64 %t109, i64 %t111) + br i1 %t112, label %range9554, label %inrange9555 +range9554: + call void @finch_panic_index(ptr @.str.6528, i64 358, i64 %t109, i64 %t111) unreachable -inrange9545: +inrange9555: %t113 = extractvalue { ptr, i64, i64 } %t110, 0 %t114 = getelementptr inbounds i8, ptr %t113, i64 %t109 %t115 = load i8, ptr %t114 @@ -99318,34 +99363,34 @@ inrange9545: store { ptr, i64, i64 } %t117, ptr %a121 call void @finch_str_drop(ptr %a121) %t122 = xor i1 %t120, true - br i1 %t122, label %then9546, label %endif9548 -then9546: + br i1 %t122, label %then9556, label %endif9558 +then9556: call void @finch_str_drop(ptr %a6) ret %S.cimport.Number zeroinitializer -endif9548: +endif9558: %t123 = load i64, ptr %a50 %t124 = add i64 %t123, 1 store i64 %t124, ptr %a50 - br label %while.cond9541 -while.end9543: + br label %while.cond9551 +while.end9553: %t125 = load i1, ptr %a49 %t126 = xor i1 %t125, true - br label %logic.from9549 -logic.from9549: - br i1 %t126, label %logic.rhs9550, label %logic.end9551 -logic.rhs9550: + br label %logic.from9559 +logic.from9559: + br i1 %t126, label %logic.rhs9560, label %logic.end9561 +logic.rhs9560: %t127 = load i64, ptr %a7 %t128 = icmp ne i64 %t127, 8 - br label %logic.rend9552 -logic.rend9552: - br label %logic.end9551 -logic.end9551: - %t129 = phi i1 [ false, %logic.from9549 ], [ %t128, %logic.rend9552 ] - br i1 %t129, label %then9553, label %endif9555 -then9553: + br label %logic.rend9562 +logic.rend9562: + br label %logic.end9561 +logic.end9561: + %t129 = phi i1 [ false, %logic.from9559 ], [ %t128, %logic.rend9562 ] + br i1 %t129, label %then9563, label %endif9565 +then9563: call void @finch_str_drop(ptr %a6) ret %S.cimport.Number zeroinitializer -endif9555: +endif9565: %t130 = load i64, ptr %a48 %t131 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t130, 1 %t132 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t131, 0 @@ -99419,11 +99464,11 @@ entry: store i32 0, ptr %a4 %t5 = load ptr, ptr %a1 %t6 = icmp eq ptr %t5, null - br i1 %t6, label %panic9556, label %ok9557 -panic9556: - call void @finch_panic(ptr @.str.6527, i64 373, ptr @.str.6528) + br i1 %t6, label %panic9566, label %ok9567 +panic9566: + call void @finch_panic(ptr @.str.6529, i64 373, ptr @.str.6530) unreachable -ok9557: +ok9567: %t7 = getelementptr inbounds %S.cimport.Importer, ptr %t5, i32 0, i32 1 %t8 = load ptr, ptr %t7 %t10 = load %S.C.CXCursor, ptr %a2 @@ -99436,12 +99481,12 @@ ok9557: %t15 = load i32, ptr %a4 %t16 = zext i32 %t15 to i64 store i64 1, ptr %a17 - br label %for.cond9558 -for.cond9558: + br label %for.cond9568 +for.cond9568: %t18 = load i64, ptr %a17 %t19 = icmp slt i64 %t18, %t16 - br i1 %t19, label %for.body9559, label %for.end9561 -for.body9559: + br i1 %t19, label %for.body9569, label %for.end9571 +for.body9569: %t20 = load i64, ptr %a17 %t21 = load ptr, ptr %a3 %t22 = getelementptr inbounds %S.C.CXToken, ptr %t21, i64 %t20 @@ -99449,18 +99494,18 @@ for.body9559: store %S.C.CXToken %t23, ptr %a24 %t25 = call i32 @clang_getTokenKind(ptr byval(%S.C.CXToken) align 8 %a24) %t26 = icmp eq i32 %t25, 4 - br i1 %t26, label %then9562, label %endif9564 -then9562: - br label %for.step9560 -endif9564: + br i1 %t26, label %then9572, label %endif9574 +then9572: + br label %for.step9570 +endif9574: %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic9565, label %ok9566 -panic9565: - call void @finch_panic(ptr @.str.6529, i64 379, ptr @.str.6530) + br i1 %t29, label %panic9575, label %ok9576 +panic9575: + call void @finch_panic(ptr @.str.6531, i64 379, ptr @.str.6532) unreachable -ok9566: +ok9576: %t30 = getelementptr inbounds %S.cimport.Importer, ptr %t28, i32 0, i32 1 %t31 = load ptr, ptr %t30 %t32 = load i64, ptr %a17 @@ -99479,91 +99524,91 @@ ok9566: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t27 - br label %for.step9560 -for.step9560: + br label %for.step9570 +for.step9570: %t45 = load i64, ptr %a17 %t46 = add i64 %t45, 1 store i64 %t46, ptr %a17 - br label %for.cond9558 -for.end9561: + br label %for.cond9568 +for.end9571: %t47 = load ptr, ptr %a1 %t48 = icmp eq ptr %t47, null - br i1 %t48, label %panic9567, label %ok9568 -panic9567: - call void @finch_panic(ptr @.str.6531, i64 381, ptr @.str.6532) + br i1 %t48, label %panic9577, label %ok9578 +panic9577: + call void @finch_panic(ptr @.str.6533, i64 381, ptr @.str.6534) unreachable -ok9568: +ok9578: %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 1 %t50 = load ptr, ptr %t49 %t51 = load ptr, ptr %a3 %t52 = load i32, ptr %a4 call void @clang_disposeTokens(ptr %t50, ptr %t51, i32 %t52) - br label %while.cond9569 -while.cond9569: + br label %while.cond9579 +while.cond9579: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t54 = load i64, ptr %t53 %t55 = icmp sge i64 %t54, 2 - br label %logic.from9572 -logic.from9572: - br i1 %t55, label %logic.rhs9573, label %logic.end9574 -logic.rhs9573: + br label %logic.from9582 +logic.from9582: + br i1 %t55, label %logic.rhs9583, label %logic.end9584 +logic.rhs9583: %t56 = load { ptr, i64, i64 }, ptr %a14 %t57 = extractvalue { ptr, i64, i64 } %t56, 1 %t58 = icmp uge i64 0, %t57 - br i1 %t58, label %range9575, label %inrange9576 -range9575: - call void @finch_panic_index(ptr @.str.6533, i64 383, i64 0, i64 %t57) + br i1 %t58, label %range9585, label %inrange9586 +range9585: + call void @finch_panic_index(ptr @.str.6535, i64 383, i64 0, i64 %t57) unreachable -inrange9576: +inrange9586: %t59 = extractvalue { ptr, i64, i64 } %t56, 0 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 0 %t61 = load { ptr, i64, i64 }, ptr %t60 store { ptr, i64, i64 } %t61, ptr %a62 - store { ptr, i64, i64 } { ptr @.str.6534, i64 1, i64 0 }, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6536, i64 1, i64 0 }, ptr %a63 %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) %t65 = icmp ne i32 %t64, 0 - br label %logic.rend9577 -logic.rend9577: - br label %logic.end9574 -logic.end9574: - %t66 = phi i1 [ false, %logic.from9572 ], [ %t65, %logic.rend9577 ] - br label %logic.from9578 -logic.from9578: - br i1 %t66, label %logic.rhs9579, label %logic.end9580 -logic.rhs9579: + br label %logic.rend9587 +logic.rend9587: + br label %logic.end9584 +logic.end9584: + %t66 = phi i1 [ false, %logic.from9582 ], [ %t65, %logic.rend9587 ] + br label %logic.from9588 +logic.from9588: + br i1 %t66, label %logic.rhs9589, label %logic.end9590 +logic.rhs9589: %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t68 = load i64, ptr %t67 %t69 = sub i64 %t68, 1 %t70 = load { ptr, i64, i64 }, ptr %a14 %t71 = extractvalue { ptr, i64, i64 } %t70, 1 %t72 = icmp uge i64 %t69, %t71 - br i1 %t72, label %range9581, label %inrange9582 -range9581: - call void @finch_panic_index(ptr @.str.6535, i64 383, i64 %t69, i64 %t71) + br i1 %t72, label %range9591, label %inrange9592 +range9591: + call void @finch_panic_index(ptr @.str.6537, i64 383, i64 %t69, i64 %t71) unreachable -inrange9582: +inrange9592: %t73 = extractvalue { ptr, i64, i64 } %t70, 0 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t69 %t75 = load { ptr, i64, i64 }, ptr %t74 store { ptr, i64, i64 } %t75, ptr %a76 - store { ptr, i64, i64 } { ptr @.str.6536, i64 1, i64 0 }, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.6538, i64 1, i64 0 }, ptr %a77 %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) %t79 = icmp ne i32 %t78, 0 - br label %logic.rend9583 -logic.rend9583: - br label %logic.end9580 -logic.end9580: - %t80 = phi i1 [ false, %logic.from9578 ], [ %t79, %logic.rend9583 ] - br i1 %t80, label %while.body9570, label %while.end9571 -while.body9570: + br label %logic.rend9593 +logic.rend9593: + br label %logic.end9590 +logic.end9590: + %t80 = phi i1 [ false, %logic.from9588 ], [ %t79, %logic.rend9593 ] + br i1 %t80, label %while.body9580, label %while.end9581 +while.body9580: %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t82 = load i64, ptr %t81 %t83 = icmp uge i64 0, %t82 - br i1 %t83, label %range9584, label %inrange9585 -range9584: - call void @finch_panic_index(ptr @.str.6537, i64 384, i64 0, i64 %t82) + br i1 %t83, label %range9594, label %inrange9595 +range9594: + call void @finch_panic_index(ptr @.str.6539, i64 384, i64 0, i64 %t82) unreachable -inrange9585: +inrange9595: %t84 = load ptr, ptr %a14 %t85 = getelementptr inbounds { ptr, i64, i64 }, ptr %t84, i64 0 %t86 = load { ptr, i64, i64 }, ptr %t85 @@ -99573,11 +99618,11 @@ inrange9585: %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t89 = load i64, ptr %t88 %t90 = icmp eq i64 %t89, 0 - br i1 %t90, label %panic9586, label %ok9587 -panic9586: - call void @finch_panic(ptr @.str.6538, i64 385, ptr @.str.6539) + br i1 %t90, label %panic9596, label %ok9597 +panic9596: + call void @finch_panic(ptr @.str.6540, i64 385, ptr @.str.6541) unreachable -ok9587: +ok9597: %t91 = sub i64 %t89, 1 %t92 = load ptr, ptr %a14 %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t91 @@ -99585,71 +99630,71 @@ ok9587: store i64 %t91, ptr %t88 store { ptr, i64, i64 } %t94, ptr %a95 call void @finch_str_drop(ptr %a95) - br label %while.cond9569 -while.end9571: + br label %while.cond9579 +while.end9581: store i1 false, ptr %a96 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t98 = load i64, ptr %t97 %t99 = icmp eq i64 %t98, 2 - br label %logic.from9588 -logic.from9588: - br i1 %t99, label %logic.rhs9589, label %logic.end9590 -logic.rhs9589: + br label %logic.from9598 +logic.from9598: + br i1 %t99, label %logic.rhs9599, label %logic.end9600 +logic.rhs9599: %t100 = load { ptr, i64, i64 }, ptr %a14 %t101 = extractvalue { ptr, i64, i64 } %t100, 1 %t102 = icmp uge i64 0, %t101 - br i1 %t102, label %range9591, label %inrange9592 -range9591: - call void @finch_panic_index(ptr @.str.6540, i64 388, i64 0, i64 %t101) + br i1 %t102, label %range9601, label %inrange9602 +range9601: + call void @finch_panic_index(ptr @.str.6542, i64 388, i64 0, i64 %t101) unreachable -inrange9592: +inrange9602: %t103 = extractvalue { ptr, i64, i64 } %t100, 0 %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 0 %t105 = load { ptr, i64, i64 }, ptr %t104 store { ptr, i64, i64 } %t105, ptr %a106 - store { ptr, i64, i64 } { ptr @.str.6541, i64 1, i64 0 }, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.6543, i64 1, i64 0 }, ptr %a107 %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) %t109 = icmp ne i32 %t108, 0 - br label %logic.rend9593 -logic.rend9593: - br label %logic.end9590 -logic.end9590: - %t110 = phi i1 [ false, %logic.from9588 ], [ %t109, %logic.rend9593 ] - br i1 %t110, label %then9594, label %endif9596 -then9594: + br label %logic.rend9603 +logic.rend9603: + br label %logic.end9600 +logic.end9600: + %t110 = phi i1 [ false, %logic.from9598 ], [ %t109, %logic.rend9603 ] + br i1 %t110, label %then9604, label %endif9606 +then9604: store i1 true, ptr %a96 %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t112 = load i64, ptr %t111 %t113 = icmp uge i64 0, %t112 - br i1 %t113, label %range9597, label %inrange9598 -range9597: - call void @finch_panic_index(ptr @.str.6542, i64 390, i64 0, i64 %t112) + br i1 %t113, label %range9607, label %inrange9608 +range9607: + call void @finch_panic_index(ptr @.str.6544, i64 390, i64 0, i64 %t112) unreachable -inrange9598: +inrange9608: %t114 = load ptr, ptr %a14 %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 0 %t116 = load { ptr, i64, i64 }, ptr %t115 call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) store { ptr, i64, i64 } %t116, ptr %a117 call void @finch_str_drop(ptr %a117) - br label %endif9596 -endif9596: + br label %endif9606 +endif9606: %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 %t119 = load i64, ptr %t118 %t120 = icmp ne i64 %t119, 1 - br i1 %t120, label %then9599, label %endif9601 -then9599: + br i1 %t120, label %then9609, label %endif9611 +then9609: call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number zeroinitializer -endif9601: +endif9611: %t121 = load { ptr, i64, i64 }, ptr %a14 %t122 = extractvalue { ptr, i64, i64 } %t121, 1 %t123 = icmp uge i64 0, %t122 - br i1 %t123, label %range9602, label %inrange9603 -range9602: - call void @finch_panic_index(ptr @.str.6543, i64 395, i64 0, i64 %t122) + br i1 %t123, label %range9612, label %inrange9613 +range9612: + call void @finch_panic_index(ptr @.str.6545, i64 395, i64 0, i64 %t122) unreachable -inrange9603: +inrange9613: %t124 = extractvalue { ptr, i64, i64 } %t121, 0 %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 0 %t126 = load { ptr, i64, i64 }, ptr %t125 @@ -99660,154 +99705,154 @@ inrange9603: %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a130, i32 0, i32 1 %t132 = load i64, ptr %t131 %t133 = icmp eq i64 %t132, 0 - br label %logic.from9604 -logic.from9604: - br i1 %t133, label %logic.end9606, label %logic.rhs9605 -logic.rhs9605: + br label %logic.from9614 +logic.from9614: + br i1 %t133, label %logic.end9616, label %logic.rhs9615 +logic.rhs9615: %t134 = load { ptr, i64, i64 }, ptr %a130 %t135 = extractvalue { ptr, i64, i64 } %t134, 1 %t136 = icmp uge i64 0, %t135 - br i1 %t136, label %range9607, label %inrange9608 -range9607: - call void @finch_panic_index(ptr @.str.6544, i64 396, i64 0, i64 %t135) + br i1 %t136, label %range9617, label %inrange9618 +range9617: + call void @finch_panic_index(ptr @.str.6546, i64 396, i64 0, i64 %t135) unreachable -inrange9608: +inrange9618: %t137 = extractvalue { ptr, i64, i64 } %t134, 0 %t138 = getelementptr inbounds i8, ptr %t137, i64 0 %t139 = load i8, ptr %t138 %t140 = icmp uge i8 %t139, 48 - br label %logic.from9609 -logic.from9609: - br i1 %t140, label %logic.rhs9610, label %logic.end9611 -logic.rhs9610: + br label %logic.from9619 +logic.from9619: + br i1 %t140, label %logic.rhs9620, label %logic.end9621 +logic.rhs9620: %t141 = load { ptr, i64, i64 }, ptr %a130 %t142 = extractvalue { ptr, i64, i64 } %t141, 1 %t143 = icmp uge i64 0, %t142 - br i1 %t143, label %range9612, label %inrange9613 -range9612: - call void @finch_panic_index(ptr @.str.6545, i64 396, i64 0, i64 %t142) + br i1 %t143, label %range9622, label %inrange9623 +range9622: + call void @finch_panic_index(ptr @.str.6547, i64 396, i64 0, i64 %t142) unreachable -inrange9613: +inrange9623: %t144 = extractvalue { ptr, i64, i64 } %t141, 0 %t145 = getelementptr inbounds i8, ptr %t144, i64 0 %t146 = load i8, ptr %t145 %t147 = icmp ule i8 %t146, 57 - br label %logic.rend9614 -logic.rend9614: - br label %logic.end9611 -logic.end9611: - %t148 = phi i1 [ false, %logic.from9609 ], [ %t147, %logic.rend9614 ] - br label %logic.from9615 -logic.from9615: - br i1 %t148, label %logic.end9617, label %logic.rhs9616 -logic.rhs9616: + br label %logic.rend9624 +logic.rend9624: + br label %logic.end9621 +logic.end9621: + %t148 = phi i1 [ false, %logic.from9619 ], [ %t147, %logic.rend9624 ] + br label %logic.from9625 +logic.from9625: + br i1 %t148, label %logic.end9627, label %logic.rhs9626 +logic.rhs9626: %t149 = load { ptr, i64, i64 }, ptr %a130 %t150 = extractvalue { ptr, i64, i64 } %t149, 1 %t151 = icmp uge i64 0, %t150 - br i1 %t151, label %range9618, label %inrange9619 -range9618: - call void @finch_panic_index(ptr @.str.6546, i64 396, i64 0, i64 %t150) + br i1 %t151, label %range9628, label %inrange9629 +range9628: + call void @finch_panic_index(ptr @.str.6548, i64 396, i64 0, i64 %t150) unreachable -inrange9619: +inrange9629: %t152 = extractvalue { ptr, i64, i64 } %t149, 0 %t153 = getelementptr inbounds i8, ptr %t152, i64 0 %t154 = load i8, ptr %t153 %t155 = icmp eq i8 %t154, 46 - br label %logic.rend9620 -logic.rend9620: - br label %logic.end9617 -logic.end9617: - %t156 = phi i1 [ true, %logic.from9615 ], [ %t155, %logic.rend9620 ] + br label %logic.rend9630 +logic.rend9630: + br label %logic.end9627 +logic.end9627: + %t156 = phi i1 [ true, %logic.from9625 ], [ %t155, %logic.rend9630 ] %t157 = xor i1 %t156, true - br label %logic.rend9621 -logic.rend9621: - br label %logic.end9606 -logic.end9606: - %t158 = phi i1 [ true, %logic.from9604 ], [ %t157, %logic.rend9621 ] - br i1 %t158, label %then9622, label %endif9624 -then9622: + br label %logic.rend9631 +logic.rend9631: + br label %logic.end9616 +logic.end9616: + %t158 = phi i1 [ true, %logic.from9614 ], [ %t157, %logic.rend9631 ] + br i1 %t158, label %then9632, label %endif9634 +then9632: call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number zeroinitializer -endif9624: +endif9634: %t159 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t159, ptr %a160 - store { ptr, i64, i64 } { ptr @.str.6548, i64 1, i64 0 }, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6550, i64 1, i64 0 }, ptr %a162 %t163 = call i64 @finch_str_find(ptr %a160, ptr %a162) %t164 = icmp sge i64 %t163, 0 - br label %logic.from9625 -logic.from9625: - br i1 %t164, label %logic.end9627, label %logic.rhs9626 -logic.rhs9626: + br label %logic.from9635 +logic.from9635: + br i1 %t164, label %logic.end9637, label %logic.rhs9636 +logic.rhs9636: %t165 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t165, ptr %a166 - store { ptr, i64, i64 } { ptr @.str.6550, i64 1, i64 0 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.6552, i64 1, i64 0 }, ptr %a168 %t169 = call i64 @finch_str_find(ptr %a166, ptr %a168) %t170 = icmp sge i64 %t169, 0 - br label %logic.rend9628 -logic.rend9628: - br label %logic.end9627 -logic.end9627: - %t171 = phi i1 [ true, %logic.from9625 ], [ %t170, %logic.rend9628 ] - br label %logic.from9629 -logic.from9629: - br i1 %t171, label %logic.end9631, label %logic.rhs9630 -logic.rhs9630: + br label %logic.rend9638 +logic.rend9638: + br label %logic.end9637 +logic.end9637: + %t171 = phi i1 [ true, %logic.from9635 ], [ %t170, %logic.rend9638 ] + br label %logic.from9639 +logic.from9639: + br i1 %t171, label %logic.end9641, label %logic.rhs9640 +logic.rhs9640: %t172 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t172, ptr %a173 - store { ptr, i64, i64 } { ptr @.str.6552, i64 1, i64 0 }, ptr %a175 + store { ptr, i64, i64 } { ptr @.str.6554, i64 1, i64 0 }, ptr %a175 %t176 = call i64 @finch_str_find(ptr %a173, ptr %a175) %t177 = icmp sge i64 %t176, 0 - br label %logic.rend9632 -logic.rend9632: - br label %logic.end9631 -logic.end9631: - %t178 = phi i1 [ true, %logic.from9629 ], [ %t177, %logic.rend9632 ] - br label %logic.from9633 -logic.from9633: - br i1 %t178, label %logic.rhs9634, label %logic.end9635 -logic.rhs9634: + br label %logic.rend9642 +logic.rend9642: + br label %logic.end9641 +logic.end9641: + %t178 = phi i1 [ true, %logic.from9639 ], [ %t177, %logic.rend9642 ] + br label %logic.from9643 +logic.from9643: + br i1 %t178, label %logic.rhs9644, label %logic.end9645 +logic.rhs9644: %t179 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t179, ptr %a180 - store { ptr, i64, i64 } { ptr @.str.6554, i64 2, i64 0 }, ptr %a182 + store { ptr, i64, i64 } { ptr @.str.6556, i64 2, i64 0 }, ptr %a182 %t183 = call i32 @finch_str_starts(ptr %a180, ptr %a182) %t184 = icmp ne i32 %t183, 0 %t185 = xor i1 %t184, true - br label %logic.rend9636 -logic.rend9636: - br label %logic.end9635 -logic.end9635: - %t186 = phi i1 [ false, %logic.from9633 ], [ %t185, %logic.rend9636 ] + br label %logic.rend9646 +logic.rend9646: + br label %logic.end9645 +logic.end9645: + %t186 = phi i1 [ false, %logic.from9643 ], [ %t185, %logic.rend9646 ] store i1 %t186, ptr %a187 %t188 = load i1, ptr %a187 - br i1 %t188, label %then9637, label %endif9639 -then9637: + br i1 %t188, label %then9647, label %endif9649 +then9647: %t189 = load { ptr, i64, i64 }, ptr %a130 store { ptr, i64, i64 } %t189, ptr %a190 call void @finch_str_copy(ptr %a191, ptr %a190) %t192 = load { ptr, i64, i64 }, ptr %a191 store { ptr, i64, i64 } %t192, ptr %a193 - br label %while.cond9640 -while.cond9640: + br label %while.cond9650 +while.cond9650: %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 %t195 = load i64, ptr %t194 %t196 = icmp sgt i64 %t195, 0 - br label %logic.from9643 -logic.from9643: - br i1 %t196, label %logic.rhs9644, label %logic.end9645 -logic.rhs9644: - store { ptr, i64, i64 } { ptr @.str.6555, i64 4, i64 0 }, ptr %a197 + br label %logic.from9653 +logic.from9653: + br i1 %t196, label %logic.rhs9654, label %logic.end9655 +logic.rhs9654: + store { ptr, i64, i64 } { ptr @.str.6557, i64 4, i64 0 }, ptr %a197 %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 %t200 = load i64, ptr %t199 %t201 = sub i64 %t200, 1 %t202 = load { ptr, i64, i64 }, ptr %a193 %t203 = extractvalue { ptr, i64, i64 } %t202, 1 %t204 = icmp uge i64 %t201, %t203 - br i1 %t204, label %range9646, label %inrange9647 -range9646: - call void @finch_panic_index(ptr @.str.6557, i64 402, i64 %t201, i64 %t203) + br i1 %t204, label %range9656, label %inrange9657 +range9656: + call void @finch_panic_index(ptr @.str.6559, i64 402, i64 %t201, i64 %t203) unreachable -inrange9647: +inrange9657: %t205 = extractvalue { ptr, i64, i64 } %t202, 0 %t206 = getelementptr inbounds i8, ptr %t205, i64 %t201 %t207 = load i8, ptr %t206 @@ -99818,26 +99863,26 @@ inrange9647: %t212 = icmp sge i64 %t211, 0 store { ptr, i64, i64 } %t209, ptr %a213 call void @finch_str_drop(ptr %a213) - br label %logic.rend9648 -logic.rend9648: - br label %logic.end9645 -logic.end9645: - %t214 = phi i1 [ false, %logic.from9643 ], [ %t212, %logic.rend9648 ] - br i1 %t214, label %while.body9641, label %while.end9642 -while.body9641: + br label %logic.rend9658 +logic.rend9658: + br label %logic.end9655 +logic.end9655: + %t214 = phi i1 [ false, %logic.from9653 ], [ %t212, %logic.rend9658 ] + br i1 %t214, label %while.body9651, label %while.end9652 +while.body9651: %t215 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t215, ptr %a216 %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 %t219 = load i64, ptr %t218 %t220 = sub i64 %t219, 1 - call void @finch_str_sub(ptr %a217, ptr %a216, i64 0, i64 %t220, ptr @.str.6558, i64 403) + call void @finch_str_sub(ptr %a217, ptr %a216, i64 0, i64 %t220, ptr @.str.6560, i64 403) %t221 = load { ptr, i64, i64 }, ptr %a217 %t222 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } %t221, ptr %a193 store { ptr, i64, i64 } %t222, ptr %a223 call void @finch_str_drop(ptr %a223) - br label %while.cond9640 -while.end9642: + br label %while.cond9650 +while.end9652: %t224 = load { ptr, i64, i64 }, ptr %a193 store { ptr, i64, i64 } zeroinitializer, ptr %a225 store double 0.0, ptr %a226 @@ -99846,24 +99891,24 @@ while.end9642: %t229 = icmp eq i32 %t228, 0 %t230 = load { ptr, i64, i64 }, ptr %a225 %t231 = load double, ptr %a226 - br i1 %t229, label %or.failed9649, label %or.ok9650 -or.failed9649: + br i1 %t229, label %or.failed9659, label %or.ok9660 +or.failed9659: store { ptr, i64, i64 } %t230, ptr %a232 call void @finch_str_drop(ptr %a232) call void @finch_str_drop(ptr %a193) call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number zeroinitializer -or.ok9650: +or.ok9660: store double %t231, ptr %a233 %t234 = load i1, ptr %a96 - br i1 %t234, label %then9651, label %endif9653 -then9651: + br i1 %t234, label %then9661, label %endif9663 +then9661: %t235 = load double, ptr %a233 %t236 = fsub double 0.0, %t235 store double %t236, ptr %a233 - br label %endif9653 -endif9653: + br label %endif9663 +endif9663: %t237 = insertvalue %S.cimport.CConst zeroinitializer, i1 true, 0 %t238 = load double, ptr %a233 %t239 = insertvalue %S.cimport.CConst %t237, double %t238, 2 @@ -99878,24 +99923,24 @@ endif9653: call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) ret %S.cimport.Number %t246 -endif9639: +endif9649: %t247 = load { ptr, i64, i64 }, ptr %a130 %t248 = call %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %t247) store %S.cimport.Number %t248, ptr %a249 %t250 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 1 %t251 = load i1, ptr %t250 - br label %logic.from9654 -logic.from9654: - br i1 %t251, label %logic.rhs9655, label %logic.end9656 -logic.rhs9655: + br label %logic.from9664 +logic.from9664: + br i1 %t251, label %logic.rhs9665, label %logic.end9666 +logic.rhs9665: %t252 = load i1, ptr %a96 - br label %logic.rend9657 -logic.rend9657: - br label %logic.end9656 -logic.end9656: - %t253 = phi i1 [ false, %logic.from9654 ], [ %t252, %logic.rend9657 ] - br i1 %t253, label %then9658, label %endif9660 -then9658: + br label %logic.rend9667 +logic.rend9667: + br label %logic.end9666 +logic.end9666: + %t253 = phi i1 [ false, %logic.from9664 ], [ %t252, %logic.rend9667 ] + br i1 %t253, label %then9668, label %endif9670 +then9668: %t254 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 %t255 = getelementptr inbounds %S.cimport.CConst, ptr %t254, i32 0, i32 1 %t256 = load i64, ptr %t255 @@ -99903,8 +99948,8 @@ then9658: %t258 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 %t259 = getelementptr inbounds %S.cimport.CConst, ptr %t258, i32 0, i32 1 store i64 %t257, ptr %t259 - br label %endif9660 -endif9660: + br label %endif9670 +endif9670: %t260 = load %S.cimport.Number, ptr %a249 call void @finch_str_drop(ptr %a130) call void @finch.drop.arr_str(ptr %a14) @@ -100079,8 +100124,8 @@ entry: store i32 %t12, ptr %a13 %t14 = load i32, ptr %a13 %t15 = icmp eq i32 %t14, 20 - br i1 %t15, label %then9661, label %else9662 -then9661: + br i1 %t15, label %then9671, label %else9672 +then9671: %t18 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t18, ptr %a19 call void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16 %a17, ptr byval(%S.C.CXCursor) align 8 %a19) @@ -100092,8 +100137,8 @@ then9661: %t24 = getelementptr inbounds %S.C.CXType, ptr %a23, i32 0, i32 0 %t25 = load i32, ptr %t24 %t26 = icmp eq i32 %t25, 105 - br i1 %t26, label %then9664, label %endif9666 -then9664: + br i1 %t26, label %then9674, label %endif9676 +then9674: %t28 = load %S.C.CXType, ptr %a23 store %S.C.CXType %t28, ptr %a29 call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a27, ptr byval(%S.C.CXType) align 8 %a29) @@ -100106,49 +100151,49 @@ then9664: store { ptr, i64, i64 } %t35, ptr %a36 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null - br i1 %t38, label %panic9667, label %ok9668 -panic9667: - call void @finch_panic(ptr @.str.6559, i64 437, ptr @.str.6560) + br i1 %t38, label %panic9677, label %ok9678 +panic9677: + call void @finch_panic(ptr @.str.6561, i64 437, ptr @.str.6562) unreachable -ok9668: +ok9678: %t39 = getelementptr inbounds %S.cimport.Importer, ptr %t37, i32 0, i32 3 %t40 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t40, ptr %a41 %t42 = call i64 @finch_map_find(ptr %t39, ptr %a41, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t43 = icmp sge i64 %t42, 0 - br label %logic.from9669 -logic.from9669: - br i1 %t43, label %logic.rhs9670, label %logic.end9671 -logic.rhs9670: + br label %logic.from9679 +logic.from9679: + br i1 %t43, label %logic.rhs9680, label %logic.end9681 +logic.rhs9680: %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic9672, label %ok9673 -panic9672: - call void @finch_panic(ptr @.str.6561, i64 437, ptr @.str.6562) + br i1 %t45, label %panic9682, label %ok9683 +panic9682: + call void @finch_panic(ptr @.str.6563, i64 437, ptr @.str.6564) unreachable -ok9673: +ok9683: %t46 = getelementptr inbounds %S.cimport.Importer, ptr %t44, i32 0, i32 0 %t47 = getelementptr inbounds %S.cimport.CImports, ptr %t46, i32 0, i32 3 %t48 = load ptr, ptr %a1 %t49 = icmp eq ptr %t48, null - br i1 %t49, label %panic9674, label %ok9675 -panic9674: - call void @finch_panic(ptr @.str.6563, i64 437, ptr @.str.6564) + br i1 %t49, label %panic9684, label %ok9685 +panic9684: + call void @finch_panic(ptr @.str.6565, i64 437, ptr @.str.6566) unreachable -ok9675: +ok9685: %t50 = getelementptr inbounds %S.cimport.Importer, ptr %t48, i32 0, i32 3 %t51 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t51, ptr %a52 %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t54 = icmp slt i64 %t53, 0 - br i1 %t54, label %map.missing9676, label %map.found9677 -map.missing9676: + br i1 %t54, label %map.missing9686, label %map.found9687 +map.missing9686: store { ptr, i64, i64 } zeroinitializer, ptr %a55 store { ptr, i64, i64 } %t51, ptr %a56 call void @finch_buf_str(ptr %a55, ptr %a56, i32 1) - call void @finch_map_missing(ptr @.str.6565, i64 437, ptr %a55) + call void @finch_map_missing(ptr @.str.6567, i64 437, ptr %a55) unreachable -map.found9677: +map.found9687: %t57 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t50, i32 0, i32 0 %t58 = load ptr, ptr %t57 %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t58, i64 %t53 @@ -100157,25 +100202,25 @@ map.found9677: store { ptr, i64, i64 } %t61, ptr %a62 %t63 = call i64 @finch_map_find(ptr %t47, ptr %a62, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t64 = icmp sge i64 %t63, 0 - br label %logic.rend9678 -logic.rend9678: - br label %logic.end9671 -logic.end9671: - %t65 = phi i1 [ false, %logic.from9669 ], [ %t64, %logic.rend9678 ] + br label %logic.rend9688 +logic.rend9688: + br label %logic.end9681 +logic.end9681: + %t65 = phi i1 [ false, %logic.from9679 ], [ %t64, %logic.rend9688 ] store i1 %t65, ptr %a66 %t67 = load i1, ptr %a66 %t68 = xor i1 %t67, true - br label %logic.from9679 -logic.from9679: - br i1 %t68, label %logic.rhs9680, label %logic.end9681 -logic.rhs9680: + br label %logic.from9689 +logic.from9689: + br i1 %t68, label %logic.rhs9690, label %logic.end9691 +logic.rhs9690: %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null - br i1 %t70, label %panic9682, label %ok9683 -panic9682: - call void @finch_panic(ptr @.str.6566, i64 438, ptr @.str.6567) + br i1 %t70, label %panic9692, label %ok9693 +panic9692: + call void @finch_panic(ptr @.str.6568, i64 438, ptr @.str.6569) unreachable -ok9683: +ok9693: %t71 = getelementptr inbounds %S.cimport.Importer, ptr %t69, i32 0, i32 0 %t72 = getelementptr inbounds %S.cimport.CImports, ptr %t71, i32 0, i32 3 %t73 = load { ptr, i64, i64 }, ptr %a9 @@ -100183,21 +100228,21 @@ ok9683: %t75 = call i64 @finch_map_find(ptr %t72, ptr %a74, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t76 = icmp sge i64 %t75, 0 %t77 = xor i1 %t76, true - br label %logic.rend9684 -logic.rend9684: - br label %logic.end9681 -logic.end9681: - %t78 = phi i1 [ false, %logic.from9679 ], [ %t77, %logic.rend9684 ] - br i1 %t78, label %then9685, label %endif9687 -then9685: + br label %logic.rend9694 +logic.rend9694: + br label %logic.end9691 +logic.end9691: + %t78 = phi i1 [ false, %logic.from9689 ], [ %t77, %logic.rend9694 ] + br i1 %t78, label %then9695, label %endif9697 +then9695: %t79 = load { ptr, i64, i64 }, ptr %a9 %t80 = load ptr, ptr %a1 %t81 = icmp eq ptr %t80, null - br i1 %t81, label %panic9688, label %ok9689 -panic9688: - call void @finch_panic(ptr @.str.6568, i64 439, ptr @.str.6569) + br i1 %t81, label %panic9698, label %ok9699 +panic9698: + call void @finch_panic(ptr @.str.6570, i64 439, ptr @.str.6571) unreachable -ok9689: +ok9699: %t82 = getelementptr inbounds %S.cimport.Importer, ptr %t80, i32 0, i32 3 %t83 = load { ptr, i64, i64 }, ptr %a36 store { ptr, i64, i64 } %t83, ptr %a84 @@ -100208,14 +100253,14 @@ ok9689: %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t88, i64 %t86 %t90 = load i32, ptr %a85 %t91 = icmp ne i32 %t90, 0 - br i1 %t91, label %map.new9690, label %map.have9691 -map.new9690: + br i1 %t91, label %map.new9700, label %map.have9701 +map.new9700: %t92 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 1 call void @finch_str_copy(ptr %t92, ptr %a84) %t93 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t93 - br label %map.have9691 -map.have9691: + br label %map.have9701 +map.have9701: %t94 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 store { ptr, i64, i64 } %t79, ptr %a95 call void @finch_str_copy(ptr %a96, ptr %a95) @@ -100224,35 +100269,35 @@ map.have9691: store { ptr, i64, i64 } %t97, ptr %t94 store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_drop(ptr %a99) - br label %endif9687 -endif9687: + br label %endif9697 +endif9697: call void @finch_str_drop(ptr %a36) - br label %endif9666 -endif9666: - br label %endif9663 -else9662: + br label %endif9676 +endif9676: + br label %endif9673 +else9672: %t100 = load i32, ptr %a13 %t101 = icmp eq i32 %t100, 8 - br i1 %t101, label %then9692, label %else9693 -then9692: + br i1 %t101, label %then9702, label %else9703 +then9702: %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null - br i1 %t103, label %panic9695, label %ok9696 -panic9695: - call void @finch_panic(ptr @.str.6570, i64 443, ptr @.str.6571) + br i1 %t103, label %panic9705, label %ok9706 +panic9705: + call void @finch_panic(ptr @.str.6572, i64 443, ptr @.str.6573) unreachable -ok9696: +ok9706: %t104 = getelementptr inbounds %S.cimport.Importer, ptr %t102, i32 0, i32 0 %t105 = getelementptr inbounds %S.cimport.CImports, ptr %t104, i32 0, i32 0 %t106 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t106, ptr %a107 %t108 = call i64 @finch_map_find(ptr %t105, ptr %a107, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t109 = icmp sge i64 %t108, 0 - br i1 %t109, label %then9697, label %endif9699 -then9697: + br i1 %t109, label %then9707, label %endif9709 +then9707: call void @finch_str_drop(ptr %a9) ret void -endif9699: +endif9709: %t110 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t110, ptr %a111 call void @finch_str_copy(ptr %a112, ptr %a111) @@ -100260,11 +100305,11 @@ endif9699: %t114 = insertvalue %S.cimport.CFunc zeroinitializer, { ptr, i64, i64 } %t113, 0 %t115 = load ptr, ptr %a1 %t116 = icmp eq ptr %t115, null - br i1 %t116, label %panic9700, label %ok9701 -panic9700: - call void @finch_panic(ptr @.str.6572, i64 446, ptr @.str.6573) + br i1 %t116, label %panic9710, label %ok9711 +panic9710: + call void @finch_panic(ptr @.str.6574, i64 446, ptr @.str.6575) unreachable -ok9701: +ok9711: %t117 = getelementptr inbounds %S.cimport.Importer, ptr %t115, i32 0, i32 2 %t118 = load { ptr, i64, i64 }, ptr %t117 store { ptr, i64, i64 } %t118, ptr %a119 @@ -100276,21 +100321,21 @@ ok9701: store %S.C.CXCursor %t124, ptr %a125 %t126 = call i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8 %a125) %t127 = icmp eq i32 %t126, 3 - br i1 %t127, label %then9702, label %endif9704 -then9702: + br i1 %t127, label %then9712, label %endif9714 +then9712: %t128 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 %t129 = load { ptr, i64, i64 }, ptr %t128 - store { ptr, i64, i64 } { ptr @.str.6574, i64 62, i64 0 }, ptr %t128 + store { ptr, i64, i64 } { ptr @.str.6576, i64 62, i64 0 }, ptr %t128 store { ptr, i64, i64 } %t129, ptr %a130 call void @finch_str_drop(ptr %a130) %t131 = load %S.cimport.CFunc, ptr %a123 %t132 = load ptr, ptr %a1 %t133 = icmp eq ptr %t132, null - br i1 %t133, label %panic9705, label %ok9706 -panic9705: - call void @finch_panic(ptr @.str.6575, i64 449, ptr @.str.6576) + br i1 %t133, label %panic9715, label %ok9716 +panic9715: + call void @finch_panic(ptr @.str.6577, i64 449, ptr @.str.6578) unreachable -ok9706: +ok9716: %t134 = getelementptr inbounds %S.cimport.Importer, ptr %t132, i32 0, i32 0 %t135 = getelementptr inbounds %S.cimport.CImports, ptr %t134, i32 0, i32 0 %t136 = load { ptr, i64, i64 }, ptr %a9 @@ -100302,14 +100347,14 @@ ok9706: %t142 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t141, i64 %t139 %t143 = load i32, ptr %a138 %t144 = icmp ne i32 %t143, 0 - br i1 %t144, label %map.new9707, label %map.have9708 -map.new9707: + br i1 %t144, label %map.new9717, label %map.have9718 +map.new9717: %t145 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 1 call void @finch_str_copy(ptr %t145, ptr %a137) %t146 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t146 - br label %map.have9708 -map.have9708: + br label %map.have9718 +map.have9718: %t147 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 store %S.cimport.CFunc %t131, ptr %a148 call void @finch.copy.S_cimport_CFunc(ptr %a149, ptr %a148) @@ -100321,7 +100366,7 @@ map.have9708: call void @finch.drop.S_cimport_CFunc(ptr %a123) call void @finch_str_drop(ptr %a9) ret void -endif9704: +endif9714: %t155 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t155, ptr %a156 call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a154, ptr byval(%S.C.CXCursor) align 8 %a156) @@ -100333,21 +100378,21 @@ endif9704: %t161 = getelementptr inbounds %S.C.CXType, ptr %a160, i32 0, i32 0 %t162 = load i32, ptr %t161 %t163 = icmp eq i32 %t162, 110 - br i1 %t163, label %then9709, label %endif9711 -then9709: + br i1 %t163, label %then9719, label %endif9721 +then9719: %t164 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 %t165 = load { ptr, i64, i64 }, ptr %t164 - store { ptr, i64, i64 } { ptr @.str.6577, i64 42, i64 0 }, ptr %t164 + store { ptr, i64, i64 } { ptr @.str.6579, i64 42, i64 0 }, ptr %t164 store { ptr, i64, i64 } %t165, ptr %a166 call void @finch_str_drop(ptr %a166) %t167 = load %S.cimport.CFunc, ptr %a123 %t168 = load ptr, ptr %a1 %t169 = icmp eq ptr %t168, null - br i1 %t169, label %panic9712, label %ok9713 -panic9712: - call void @finch_panic(ptr @.str.6578, i64 455, ptr @.str.6579) + br i1 %t169, label %panic9722, label %ok9723 +panic9722: + call void @finch_panic(ptr @.str.6580, i64 455, ptr @.str.6581) unreachable -ok9713: +ok9723: %t170 = getelementptr inbounds %S.cimport.Importer, ptr %t168, i32 0, i32 0 %t171 = getelementptr inbounds %S.cimport.CImports, ptr %t170, i32 0, i32 0 %t172 = load { ptr, i64, i64 }, ptr %a9 @@ -100359,14 +100404,14 @@ ok9713: %t178 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t177, i64 %t175 %t179 = load i32, ptr %a174 %t180 = icmp ne i32 %t179, 0 - br i1 %t180, label %map.new9714, label %map.have9715 -map.new9714: + br i1 %t180, label %map.new9724, label %map.have9725 +map.new9724: %t181 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 1 call void @finch_str_copy(ptr %t181, ptr %a173) %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t182 - br label %map.have9715 -map.have9715: + br label %map.have9725 +map.have9725: %t183 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 store %S.cimport.CFunc %t167, ptr %a184 call void @finch.copy.S_cimport_CFunc(ptr %a185, ptr %a184) @@ -100378,7 +100423,7 @@ map.have9715: call void @finch.drop.S_cimport_CFunc(ptr %a123) call void @finch_str_drop(ptr %a9) ret void -endif9711: +endif9721: %t189 = load ptr, ptr %a1 %t191 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t191, ptr %a192 @@ -100388,8 +100433,8 @@ endif9711: store %S.cimport.Mapped %t194, ptr %a195 %t196 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 2 %t197 = load i1, ptr %t196 - br i1 %t197, label %then9716, label %else9717 -then9716: + br i1 %t197, label %then9726, label %else9727 +then9726: %t198 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 0 %t199 = load %S.ast.Type, ptr %t198 %t200 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 2 @@ -100400,8 +100445,8 @@ then9716: store %S.ast.Type %t203, ptr %t200 store %S.ast.Type %t204, ptr %a205 call void @finch.drop.S_ast_Type(ptr %a205) - br label %endif9718 -else9717: + br label %endif9728 +else9727: %t206 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 1 %t207 = load { ptr, i64, i64 }, ptr %t206 %t208 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 @@ -100412,8 +100457,8 @@ else9717: store { ptr, i64, i64 } %t211, ptr %t208 store { ptr, i64, i64 } %t212, ptr %a213 call void @finch_str_drop(ptr %a213) - br label %endif9718 -endif9718: + br label %endif9728 +endif9728: %t214 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t214, ptr %a215 %t216 = call i32 @clang_getNumArgTypes(ptr byval(%S.C.CXType) align 8 %a215) @@ -100421,20 +100466,20 @@ endif9718: store i64 %t217, ptr %a218 %t219 = load i64, ptr %a218 store i64 0, ptr %a220 - br label %for.cond9719 -for.cond9719: + br label %for.cond9729 +for.cond9729: %t221 = load i64, ptr %a220 %t222 = icmp slt i64 %t221, %t219 - br i1 %t222, label %for.body9720, label %for.end9722 -for.body9720: + br i1 %t222, label %for.body9730, label %for.end9732 +for.body9730: %t223 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 %t225 = load i64, ptr %t224 %t226 = icmp sgt i64 %t225, 0 - br i1 %t226, label %then9723, label %endif9725 -then9723: - br label %for.end9722 -endif9725: + br i1 %t226, label %then9733, label %endif9735 +then9733: + br label %for.end9732 +endif9735: %t227 = load ptr, ptr %a1 %t229 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t229, ptr %a230 @@ -100446,8 +100491,8 @@ endif9725: store %S.cimport.Mapped %t234, ptr %a235 %t236 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 2 %t237 = load i1, ptr %t236 - br i1 %t237, label %then9726, label %else9727 -then9726: + br i1 %t237, label %then9736, label %else9737 +then9736: %t238 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 3 %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i32 0, i32 1 %t240 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 0 @@ -100462,8 +100507,8 @@ then9726: %t248 = getelementptr inbounds %S.ast.Type, ptr %t247, i64 %t245 store %S.ast.Type %t244, ptr %t248 store i64 %t246, ptr %t239 - br label %endif9728 -else9727: + br label %endif9738 +else9737: %t249 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 1 %t250 = load { ptr, i64, i64 }, ptr %t249 %t251 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 @@ -100474,16 +100519,16 @@ else9727: store { ptr, i64, i64 } %t254, ptr %t251 store { ptr, i64, i64 } %t255, ptr %a256 call void @finch_str_drop(ptr %a256) - br label %endif9728 -endif9728: + br label %endif9738 +endif9738: call void @finch.drop.S_cimport_Mapped(ptr %a235) - br label %for.step9721 -for.step9721: + br label %for.step9731 +for.step9731: %t257 = load i64, ptr %a220 %t258 = add i64 %t257, 1 store i64 %t258, ptr %a220 - br label %for.cond9719 -for.end9722: + br label %for.cond9729 +for.end9732: %t259 = load %S.C.CXType, ptr %a160 store %S.C.CXType %t259, ptr %a260 %t261 = call i32 @clang_isFunctionTypeVariadic(ptr byval(%S.C.CXType) align 8 %a260) @@ -100493,11 +100538,11 @@ for.end9722: %t264 = load %S.cimport.CFunc, ptr %a123 %t265 = load ptr, ptr %a1 %t266 = icmp eq ptr %t265, null - br i1 %t266, label %panic9729, label %ok9730 -panic9729: - call void @finch_panic(ptr @.str.6580, i64 477, ptr @.str.6581) + br i1 %t266, label %panic9739, label %ok9740 +panic9739: + call void @finch_panic(ptr @.str.6582, i64 477, ptr @.str.6583) unreachable -ok9730: +ok9740: %t267 = getelementptr inbounds %S.cimport.Importer, ptr %t265, i32 0, i32 0 %t268 = getelementptr inbounds %S.cimport.CImports, ptr %t267, i32 0, i32 0 %t269 = load { ptr, i64, i64 }, ptr %a9 @@ -100509,14 +100554,14 @@ ok9730: %t275 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t274, i64 %t272 %t276 = load i32, ptr %a271 %t277 = icmp ne i32 %t276, 0 - br i1 %t277, label %map.new9731, label %map.have9732 -map.new9731: + br i1 %t277, label %map.new9741, label %map.have9742 +map.new9741: %t278 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 1 call void @finch_str_copy(ptr %t278, ptr %a270) %t279 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 store %S.cimport.CFunc zeroinitializer, ptr %t279 - br label %map.have9732 -map.have9732: + br label %map.have9742 +map.have9742: %t280 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 store %S.cimport.CFunc %t264, ptr %a281 call void @finch.copy.S_cimport_CFunc(ptr %a282, ptr %a281) @@ -100527,43 +100572,43 @@ map.have9732: call void @finch.drop.S_cimport_CFunc(ptr %a285) call void @finch.drop.S_cimport_Mapped(ptr %a195) call void @finch.drop.S_cimport_CFunc(ptr %a123) - br label %endif9694 -else9693: + br label %endif9704 +else9703: %t286 = load i32, ptr %a13 %t287 = icmp eq i32 %t286, 9 - br i1 %t287, label %then9733, label %else9734 -then9733: + br i1 %t287, label %then9743, label %else9744 +then9743: %t288 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t288, ptr %a289 %t290 = call i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8 %a289) %t291 = icmp ne i32 %t290, 2 - br label %logic.from9736 -logic.from9736: - br i1 %t291, label %logic.end9738, label %logic.rhs9737 -logic.rhs9737: + br label %logic.from9746 +logic.from9746: + br i1 %t291, label %logic.end9748, label %logic.rhs9747 +logic.rhs9747: %t292 = load ptr, ptr %a1 %t293 = icmp eq ptr %t292, null - br i1 %t293, label %panic9739, label %ok9740 -panic9739: - call void @finch_panic(ptr @.str.6582, i64 479, ptr @.str.6583) + br i1 %t293, label %panic9749, label %ok9750 +panic9749: + call void @finch_panic(ptr @.str.6584, i64 479, ptr @.str.6585) unreachable -ok9740: +ok9750: %t294 = getelementptr inbounds %S.cimport.Importer, ptr %t292, i32 0, i32 0 %t295 = getelementptr inbounds %S.cimport.CImports, ptr %t294, i32 0, i32 2 %t296 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t296, ptr %a297 %t298 = call i64 @finch_map_find(ptr %t295, ptr %a297, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t299 = icmp sge i64 %t298, 0 - br label %logic.rend9741 -logic.rend9741: - br label %logic.end9738 -logic.end9738: - %t300 = phi i1 [ true, %logic.from9736 ], [ %t299, %logic.rend9741 ] - br i1 %t300, label %then9742, label %endif9744 -then9742: + br label %logic.rend9751 +logic.rend9751: + br label %logic.end9748 +logic.end9748: + %t300 = phi i1 [ true, %logic.from9746 ], [ %t299, %logic.rend9751 ] + br i1 %t300, label %then9752, label %endif9754 +then9752: call void @finch_str_drop(ptr %a9) ret void -endif9744: +endif9754: %t301 = load ptr, ptr %a1 %t303 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t303, ptr %a304 @@ -100573,17 +100618,17 @@ endif9744: store %S.cimport.Mapped %t306, ptr %a307 %t308 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 2 %t309 = load i1, ptr %t308 - br i1 %t309, label %then9745, label %endif9747 -then9745: + br i1 %t309, label %then9755, label %endif9757 +then9755: %t310 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 0 %t311 = load %S.ast.Type, ptr %t310 %t312 = load ptr, ptr %a1 %t313 = icmp eq ptr %t312, null - br i1 %t313, label %panic9748, label %ok9749 -panic9748: - call void @finch_panic(ptr @.str.6584, i64 484, ptr @.str.6585) + br i1 %t313, label %panic9758, label %ok9759 +panic9758: + call void @finch_panic(ptr @.str.6586, i64 484, ptr @.str.6587) unreachable -ok9749: +ok9759: %t314 = getelementptr inbounds %S.cimport.Importer, ptr %t312, i32 0, i32 0 %t315 = getelementptr inbounds %S.cimport.CImports, ptr %t314, i32 0, i32 2 %t316 = load { ptr, i64, i64 }, ptr %a9 @@ -100595,14 +100640,14 @@ ok9749: %t322 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t321, i64 %t319 %t323 = load i32, ptr %a318 %t324 = icmp ne i32 %t323, 0 - br i1 %t324, label %map.new9750, label %map.have9751 -map.new9750: + br i1 %t324, label %map.new9760, label %map.have9761 +map.new9760: %t325 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 1 call void @finch_str_copy(ptr %t325, ptr %a317) %t326 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 store %S.ast.Type zeroinitializer, ptr %t326 - br label %map.have9751 -map.have9751: + br label %map.have9761 +map.have9761: %t327 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 store %S.ast.Type %t311, ptr %a328 call void @finch.copy.S_ast_Type(ptr %a329, ptr %a328) @@ -100611,48 +100656,48 @@ map.have9751: store %S.ast.Type %t330, ptr %t327 store %S.ast.Type %t331, ptr %a332 call void @finch.drop.S_ast_Type(ptr %a332) - br label %endif9747 -endif9747: + br label %endif9757 +endif9757: call void @finch.drop.S_cimport_Mapped(ptr %a307) - br label %endif9735 -else9734: + br label %endif9745 +else9744: %t333 = load i32, ptr %a13 %t334 = icmp eq i32 %t333, 2 - br i1 %t334, label %then9752, label %else9753 -then9752: + br i1 %t334, label %then9762, label %else9763 +then9762: %t335 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t335, ptr %a336 %t337 = call i32 @clang_isCursorDefinition(ptr byval(%S.C.CXCursor) align 8 %a336) %t338 = icmp ne i32 %t337, 0 - br label %logic.from9755 -logic.from9755: - br i1 %t338, label %logic.rhs9756, label %logic.end9757 -logic.rhs9756: + br label %logic.from9765 +logic.from9765: + br i1 %t338, label %logic.rhs9766, label %logic.end9767 +logic.rhs9766: %t339 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t340 = load i64, ptr %t339 %t341 = icmp sgt i64 %t340, 0 - br label %logic.rend9758 -logic.rend9758: - br label %logic.end9757 -logic.end9757: - %t342 = phi i1 [ false, %logic.from9755 ], [ %t341, %logic.rend9758 ] - br label %logic.from9759 -logic.from9759: - br i1 %t342, label %logic.rhs9760, label %logic.end9761 -logic.rhs9760: + br label %logic.rend9768 +logic.rend9768: + br label %logic.end9767 +logic.end9767: + %t342 = phi i1 [ false, %logic.from9765 ], [ %t341, %logic.rend9768 ] + br label %logic.from9769 +logic.from9769: + br i1 %t342, label %logic.rhs9770, label %logic.end9771 +logic.rhs9770: %t343 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t343, ptr %a344 - store { ptr, i64, i64 } { ptr @.str.6587, i64 1, i64 0 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6589, i64 1, i64 0 }, ptr %a346 %t347 = call i64 @finch_str_find(ptr %a344, ptr %a346) %t348 = icmp sge i64 %t347, 0 %t349 = xor i1 %t348, true - br label %logic.rend9762 -logic.rend9762: - br label %logic.end9761 -logic.end9761: - %t350 = phi i1 [ false, %logic.from9759 ], [ %t349, %logic.rend9762 ] - br i1 %t350, label %then9763, label %endif9765 -then9763: + br label %logic.rend9772 +logic.rend9772: + br label %logic.end9771 +logic.end9771: + %t350 = phi i1 [ false, %logic.from9769 ], [ %t349, %logic.rend9772 ] + br i1 %t350, label %then9773, label %endif9775 +then9773: %t351 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t351, ptr %a352 %t353 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a352) @@ -100662,27 +100707,27 @@ then9763: store { ptr, i64, i64 } %t356, ptr %a357 %t358 = load ptr, ptr %a1 %t359 = icmp eq ptr %t358, null - br i1 %t359, label %panic9766, label %ok9767 -panic9766: - call void @finch_panic(ptr @.str.6588, i64 489, ptr @.str.6589) + br i1 %t359, label %panic9776, label %ok9777 +panic9776: + call void @finch_panic(ptr @.str.6590, i64 489, ptr @.str.6591) unreachable -ok9767: +ok9777: %t360 = getelementptr inbounds %S.cimport.Importer, ptr %t358, i32 0, i32 3 %t361 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t361, ptr %a362 %t363 = call i64 @finch_map_find(ptr %t360, ptr %a362, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t364 = icmp sge i64 %t363, 0 %t365 = xor i1 %t364, true - br i1 %t365, label %then9768, label %endif9770 -then9768: + br i1 %t365, label %then9778, label %endif9780 +then9778: %t366 = load { ptr, i64, i64 }, ptr %a9 %t367 = load ptr, ptr %a1 %t368 = icmp eq ptr %t367, null - br i1 %t368, label %panic9771, label %ok9772 -panic9771: - call void @finch_panic(ptr @.str.6590, i64 490, ptr @.str.6591) + br i1 %t368, label %panic9781, label %ok9782 +panic9781: + call void @finch_panic(ptr @.str.6592, i64 490, ptr @.str.6593) unreachable -ok9772: +ok9782: %t369 = getelementptr inbounds %S.cimport.Importer, ptr %t367, i32 0, i32 3 %t370 = load { ptr, i64, i64 }, ptr %a357 store { ptr, i64, i64 } %t370, ptr %a371 @@ -100693,14 +100738,14 @@ ok9772: %t376 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t375, i64 %t373 %t377 = load i32, ptr %a372 %t378 = icmp ne i32 %t377, 0 - br i1 %t378, label %map.new9773, label %map.have9774 -map.new9773: + br i1 %t378, label %map.new9783, label %map.have9784 +map.new9783: %t379 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 1 call void @finch_str_copy(ptr %t379, ptr %a371) %t380 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t380 - br label %map.have9774 -map.have9774: + br label %map.have9784 +map.have9784: %t381 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 store { ptr, i64, i64 } %t366, ptr %a382 call void @finch_str_copy(ptr %a383, ptr %a382) @@ -100709,34 +100754,34 @@ map.have9774: store { ptr, i64, i64 } %t384, ptr %t381 store { ptr, i64, i64 } %t385, ptr %a386 call void @finch_str_drop(ptr %a386) - br label %endif9770 -endif9770: + br label %endif9780 +endif9780: call void @finch_str_drop(ptr %a357) - br label %endif9765 -endif9765: - br label %endif9754 -else9753: + br label %endif9775 +endif9775: + br label %endif9764 +else9763: %t387 = load i32, ptr %a13 %t388 = icmp eq i32 %t387, 5 - br i1 %t388, label %then9775, label %else9776 -then9775: + br i1 %t388, label %then9785, label %else9786 +then9785: %t389 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t389, ptr %a390 %t391 = load ptr, ptr %a1 %t392 = call i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8 %a390, ptr @finch.c.cimport.visitTop, ptr %t391) - br label %endif9777 -else9776: + br label %endif9787 +else9786: %t393 = load i32, ptr %a13 %t394 = icmp eq i32 %t393, 7 - br i1 %t394, label %then9778, label %else9779 -then9778: + br i1 %t394, label %then9788, label %else9789 +then9788: %t395 = load ptr, ptr %a1 %t396 = icmp eq ptr %t395, null - br i1 %t396, label %panic9781, label %ok9782 -panic9781: - call void @finch_panic(ptr @.str.6592, i64 496, ptr @.str.6593) + br i1 %t396, label %panic9791, label %ok9792 +panic9791: + call void @finch_panic(ptr @.str.6594, i64 496, ptr @.str.6595) unreachable -ok9782: +ok9792: %t397 = getelementptr inbounds %S.cimport.Importer, ptr %t395, i32 0, i32 0 %t398 = getelementptr inbounds %S.cimport.CImports, ptr %t397, i32 0, i32 1 %t399 = load { ptr, i64, i64 }, ptr %a9 @@ -100744,19 +100789,19 @@ ok9782: %t401 = call i64 @finch_map_find(ptr %t398, ptr %a400, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t402 = icmp sge i64 %t401, 0 %t403 = xor i1 %t402, true - br i1 %t403, label %then9783, label %endif9785 -then9783: + br i1 %t403, label %then9793, label %endif9795 +then9793: %t404 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t404, ptr %a405 %t406 = call i64 @clang_getEnumConstantDeclValue(ptr byval(%S.C.CXCursor) align 8 %a405) %t407 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t406, 1 %t408 = load ptr, ptr %a1 %t409 = icmp eq ptr %t408, null - br i1 %t409, label %panic9786, label %ok9787 -panic9786: - call void @finch_panic(ptr @.str.6594, i64 497, ptr @.str.6595) + br i1 %t409, label %panic9796, label %ok9797 +panic9796: + call void @finch_panic(ptr @.str.6596, i64 497, ptr @.str.6597) unreachable -ok9787: +ok9797: %t410 = getelementptr inbounds %S.cimport.Importer, ptr %t408, i32 0, i32 0 %t411 = getelementptr inbounds %S.cimport.CImports, ptr %t410, i32 0, i32 1 %t412 = load { ptr, i64, i64 }, ptr %a9 @@ -100768,66 +100813,66 @@ ok9787: %t418 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t417, i64 %t415 %t419 = load i32, ptr %a414 %t420 = icmp ne i32 %t419, 0 - br i1 %t420, label %map.new9788, label %map.have9789 -map.new9788: + br i1 %t420, label %map.new9798, label %map.have9799 +map.new9798: %t421 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 1 call void @finch_str_copy(ptr %t421, ptr %a413) %t422 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 store %S.cimport.CConst zeroinitializer, ptr %t422 - br label %map.have9789 -map.have9789: + br label %map.have9799 +map.have9799: %t423 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 %t424 = load %S.cimport.CConst, ptr %t423 store %S.cimport.CConst %t407, ptr %t423 store %S.cimport.CConst %t424, ptr %a425 call void @finch.drop.S_cimport_CConst(ptr %a425) - br label %endif9785 -endif9785: - br label %endif9780 -else9779: + br label %endif9795 +endif9795: + br label %endif9790 +else9789: %t426 = load i32, ptr %a13 %t427 = icmp eq i32 %t426, 501 - br i1 %t427, label %then9790, label %endif9792 -then9790: + br i1 %t427, label %then9800, label %endif9802 +then9800: %t428 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t428, ptr %a429 %t430 = call i32 @clang_Cursor_isMacroBuiltin(ptr byval(%S.C.CXCursor) align 8 %a429) %t431 = icmp ne i32 %t430, 0 - br label %logic.from9793 -logic.from9793: - br i1 %t431, label %logic.end9795, label %logic.rhs9794 -logic.rhs9794: + br label %logic.from9803 +logic.from9803: + br i1 %t431, label %logic.end9805, label %logic.rhs9804 +logic.rhs9804: %t432 = load %S.C.CXCursor, ptr %a2 store %S.C.CXCursor %t432, ptr %a433 %t434 = call i32 @clang_Cursor_isMacroFunctionLike(ptr byval(%S.C.CXCursor) align 8 %a433) %t435 = icmp ne i32 %t434, 0 - br label %logic.rend9796 -logic.rend9796: - br label %logic.end9795 -logic.end9795: - %t436 = phi i1 [ true, %logic.from9793 ], [ %t435, %logic.rend9796 ] - br i1 %t436, label %then9797, label %endif9799 -then9797: + br label %logic.rend9806 +logic.rend9806: + br label %logic.end9805 +logic.end9805: + %t436 = phi i1 [ true, %logic.from9803 ], [ %t435, %logic.rend9806 ] + br i1 %t436, label %then9807, label %endif9809 +then9807: call void @finch_str_drop(ptr %a9) ret void -endif9799: +endif9809: %t437 = load ptr, ptr %a1 %t438 = load %S.C.CXCursor, ptr %a2 %t439 = call %S.cimport.Number @finch.cimport.macroValue(ptr %t437, %S.C.CXCursor %t438) store %S.cimport.Number %t439, ptr %a440 %t441 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 1 %t442 = load i1, ptr %t441 - br label %logic.from9800 -logic.from9800: - br i1 %t442, label %logic.rhs9801, label %logic.end9802 -logic.rhs9801: + br label %logic.from9810 +logic.from9810: + br i1 %t442, label %logic.rhs9811, label %logic.end9812 +logic.rhs9811: %t443 = load ptr, ptr %a1 %t444 = icmp eq ptr %t443, null - br i1 %t444, label %panic9803, label %ok9804 -panic9803: - call void @finch_panic(ptr @.str.6596, i64 504, ptr @.str.6597) + br i1 %t444, label %panic9813, label %ok9814 +panic9813: + call void @finch_panic(ptr @.str.6598, i64 504, ptr @.str.6599) unreachable -ok9804: +ok9814: %t445 = getelementptr inbounds %S.cimport.Importer, ptr %t443, i32 0, i32 0 %t446 = getelementptr inbounds %S.cimport.CImports, ptr %t445, i32 0, i32 1 %t447 = load { ptr, i64, i64 }, ptr %a9 @@ -100835,22 +100880,22 @@ ok9804: %t449 = call i64 @finch_map_find(ptr %t446, ptr %a448, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t450 = icmp sge i64 %t449, 0 %t451 = xor i1 %t450, true - br label %logic.rend9805 -logic.rend9805: - br label %logic.end9802 -logic.end9802: - %t452 = phi i1 [ false, %logic.from9800 ], [ %t451, %logic.rend9805 ] - br i1 %t452, label %then9806, label %endif9808 -then9806: + br label %logic.rend9815 +logic.rend9815: + br label %logic.end9812 +logic.end9812: + %t452 = phi i1 [ false, %logic.from9810 ], [ %t451, %logic.rend9815 ] + br i1 %t452, label %then9816, label %endif9818 +then9816: %t453 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 0 %t454 = load %S.cimport.CConst, ptr %t453 %t455 = load ptr, ptr %a1 %t456 = icmp eq ptr %t455, null - br i1 %t456, label %panic9809, label %ok9810 -panic9809: - call void @finch_panic(ptr @.str.6598, i64 505, ptr @.str.6599) + br i1 %t456, label %panic9819, label %ok9820 +panic9819: + call void @finch_panic(ptr @.str.6600, i64 505, ptr @.str.6601) unreachable -ok9810: +ok9820: %t457 = getelementptr inbounds %S.cimport.Importer, ptr %t455, i32 0, i32 0 %t458 = getelementptr inbounds %S.cimport.CImports, ptr %t457, i32 0, i32 1 %t459 = load { ptr, i64, i64 }, ptr %a9 @@ -100862,14 +100907,14 @@ ok9810: %t465 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t464, i64 %t462 %t466 = load i32, ptr %a461 %t467 = icmp ne i32 %t466, 0 - br i1 %t467, label %map.new9811, label %map.have9812 -map.new9811: + br i1 %t467, label %map.new9821, label %map.have9822 +map.new9821: %t468 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 1 call void @finch_str_copy(ptr %t468, ptr %a460) %t469 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 store %S.cimport.CConst zeroinitializer, ptr %t469 - br label %map.have9812 -map.have9812: + br label %map.have9822 +map.have9822: %t470 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 store %S.cimport.CConst %t454, ptr %a471 call void @finch.copy.S_cimport_CConst(ptr %a472, ptr %a471) @@ -100878,23 +100923,23 @@ map.have9812: store %S.cimport.CConst %t473, ptr %t470 store %S.cimport.CConst %t474, ptr %a475 call void @finch.drop.S_cimport_CConst(ptr %a475) - br label %endif9808 -endif9808: + br label %endif9818 +endif9818: call void @finch.drop.S_cimport_Number(ptr %a440) - br label %endif9792 -endif9792: - br label %endif9780 -endif9780: - br label %endif9777 -endif9777: - br label %endif9754 -endif9754: - br label %endif9735 -endif9735: - br label %endif9694 -endif9694: - br label %endif9663 -endif9663: + br label %endif9802 +endif9802: + br label %endif9790 +endif9790: + br label %endif9787 +endif9787: + br label %endif9764 +endif9764: + br label %endif9745 +endif9745: + br label %endif9704 +endif9704: + br label %endif9673 +endif9673: call void @finch_str_drop(ptr %a9) ret void } @@ -100905,31 +100950,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond9816 -n.cond9816: + br label %n.cond9826 +n.cond9826: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9817, label %n.end9818 -n.body9817: + br i1 %t5, label %n.body9827, label %n.end9828 +n.body9827: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live9819, label %entry.next9820 -entry.live9819: + br i1 %t11, label %entry.live9829, label %entry.next9830 +entry.live9829: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 2 call void @finch_str_drop(ptr %t13) - br label %entry.next9820 -entry.next9820: + br label %entry.next9830 +entry.next9830: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond9816 -n.end9818: + br label %n.cond9826 +n.end9828: call void @finch_map_free(ptr %a) ret void } @@ -100940,30 +100985,30 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond9821 -n.cond9821: + br label %n.cond9831 +n.cond9831: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body9822, label %n.end9823 -n.body9822: + br i1 %t5, label %n.body9832, label %n.end9833 +n.body9832: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live9824, label %entry.next9825 -entry.live9824: + br i1 %t11, label %entry.live9834, label %entry.next9835 +entry.live9834: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 2 - br label %entry.next9825 -entry.next9825: + br label %entry.next9835 +entry.next9835: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond9821 -n.end9823: + br label %n.cond9831 +n.end9833: call void @finch_map_free(ptr %a) ret void } @@ -101026,92 +101071,92 @@ entry: %a131 = alloca { ptr, i64, i64 }, align 16 %a132 = alloca { ptr, i64, i64 }, align 16 %a134 = alloca { ptr, i64, i64 }, align 16 - %a147 = alloca %S.C.CXUnsavedFile, align 16 - %a148 = alloca ptr, align 16 - %a150 = alloca i64, align 16 - %a163 = alloca i32, align 16 - %a171 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca %S.C.CXUnsavedFile, align 16 + %a138 = alloca ptr, align 16 + %a140 = alloca i64, align 16 + %a153 = alloca i32, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 %a173 = alloca { ptr, i64, i64 }, align 16 - %a177 = alloca { ptr, i64, i64 }, align 16 - %a178 = alloca { ptr, i64, i64 }, align 16 - %a179 = alloca { ptr, i64, i64 }, align 16 - %a180 = alloca { ptr, i64, i64 }, align 16 - %a182 = alloca { ptr, i64, i64 }, align 16 - %a183 = alloca { ptr, i64, i64 }, align 16 - %a184 = alloca { ptr, i64, i64 }, align 16 - %a185 = alloca { ptr, i64, i64 }, align 16 - %a191 = alloca i64, align 16 - %a193 = alloca i64, align 16 - %a200 = alloca ptr, align 16 - %a206 = alloca [32 x i8], align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca i64, align 16 + %a183 = alloca i64, align 16 + %a190 = alloca ptr, align 16 + %a196 = alloca [32 x i8], align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 %a212 = alloca { ptr, i64, i64 }, align 16 - %a213 = alloca { ptr, i64, i64 }, align 16 - %a214 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 %a218 = alloca { ptr, i64, i64 }, align 16 - %a219 = alloca { ptr, i64, i64 }, align 16 - %a221 = alloca { ptr, i64, i64 }, align 16 - %a222 = alloca { ptr, i64, i64 }, align 16 - %a226 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 - %a230 = alloca { ptr, i64, i64 }, align 16 %a233 = alloca { ptr, i64, i64 }, align 16 - %a237 = alloca { ptr, i64, i64 }, align 16 - %a238 = alloca { ptr, i64, i64 }, align 16 - %a243 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 %a244 = alloca { ptr, i64, i64 }, align 16 %a245 = alloca { ptr, i64, i64 }, align 16 - %a249 = alloca { ptr, i64, i64 }, align 16 - %a250 = alloca { ptr, i64, i64 }, align 16 - %a251 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 %a254 = alloca { ptr, i64, i64 }, align 16 - %a255 = alloca { ptr, i64, i64 }, align 16 - %a256 = alloca { ptr, i64, i64 }, align 16 %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 %a263 = alloca { ptr, i64, i64 }, align 16 %a264 = alloca { ptr, i64, i64 }, align 16 - %a267 = alloca { ptr, i64, i64 }, align 16 - %a268 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 %a269 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 %a272 = alloca { ptr, i64, i64 }, align 16 - %a273 = alloca { ptr, i64, i64 }, align 16 %a274 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 - %a279 = alloca { ptr, i64, i64 }, align 16 - %a280 = alloca { ptr, i64, i64 }, align 16 - %a281 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 %a284 = alloca { ptr, i64, i64 }, align 16 - %a285 = alloca { ptr, i64, i64 }, align 16 - %a286 = alloca { ptr, i64, i64 }, align 16 - %a287 = alloca { ptr, i64, i64 }, align 16 - %a292 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 %a293 = alloca { ptr, i64, i64 }, align 16 %a294 = alloca { ptr, i64, i64 }, align 16 - %a298 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 %a299 = alloca { ptr, i64, i64 }, align 16 %a300 = alloca { ptr, i64, i64 }, align 16 %a301 = alloca { ptr, i64, i64 }, align 16 - %a303 = alloca { ptr, i64, i64 }, align 16 - %a304 = alloca { ptr, i64, i64 }, align 16 - %a305 = alloca { ptr, i64, i64 }, align 16 - %a306 = alloca { ptr, i64, i64 }, align 16 - %a309 = alloca { ptr, i64, i64 }, align 16 - %a310 = alloca { ptr, i64, i64 }, align 16 - %a311 = alloca { ptr, i64, i64 }, align 16 - %a312 = alloca { ptr, i64, i64 }, align 16 - %a323 = alloca { ptr, i64, i64 }, align 16 - %a324 = alloca { ptr, i64, i64 }, align 16 - %a327 = alloca { ptr, i64, i64 }, align 16 - %a328 = alloca %S.C.CXCursor, align 16 - %a331 = alloca %S.C.CXCursor, align 16 - %a339 = alloca %S.cimport.CImports, align 16 - %a340 = alloca %S.cimport.CImports, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca %S.C.CXCursor, align 16 + %a321 = alloca %S.C.CXCursor, align 16 + %a329 = alloca %S.cimport.CImports, align 16 + %a330 = alloca %S.cimport.CImports, align 16 store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 @@ -101121,8 +101166,8 @@ entry: %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = icmp eq i64 %t8, 0 - br i1 %t9, label %then9813, label %endif9815 -then9813: + br i1 %t9, label %then9823, label %endif9825 +then9823: %t10 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 %t11 = load %S.cimport.CImports, ptr %t10 store %S.cimport.CImports %t11, ptr %a12 @@ -101132,15 +101177,15 @@ then9813: %t15 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t16 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t15, %S.cimport.CImports %t14, 1 ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t16 -endif9815: +endif9825: %t17 = mul i64 3, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t18 = call ptr @finch_alloc(i64 %t17) %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 0 - store { ptr, i64, i64 } { ptr @.str.6600, i64 2, i64 0 }, ptr %t19 + store { ptr, i64, i64 } { ptr @.str.6602, i64 2, i64 0 }, ptr %t19 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 - store { ptr, i64, i64 } { ptr @.str.6601, i64 1, i64 0 }, ptr %t20 + store { ptr, i64, i64 } { ptr @.str.6603, i64 1, i64 0 }, ptr %t20 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 2 - store { ptr, i64, i64 } { ptr @.str.6602, i64 10, i64 0 }, ptr %t21 + store { ptr, i64, i64 } { ptr @.str.6604, i64 10, i64 0 }, ptr %t21 %t22 = insertvalue { ptr, i64, i64 } undef, ptr %t18, 0 %t23 = insertvalue { ptr, i64, i64 } %t22, i64 3, 1 %t24 = insertvalue { ptr, i64, i64 } %t23, i64 3, 2 @@ -101148,11 +101193,11 @@ endif9815: %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = icmp sgt i64 %t27, 0 - br i1 %t28, label %then9826, label %endif9828 -then9826: + br i1 %t28, label %then9836, label %endif9838 +then9836: %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t30 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6603, i64 9, i64 0 }, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.6605, i64 9, i64 0 }, ptr %a32 store { ptr, i64, i64 } %t30, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) %t34 = load { ptr, i64, i64 }, ptr %a31 @@ -101163,37 +101208,37 @@ then9826: %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t35 store { ptr, i64, i64 } %t34, ptr %t38 store i64 %t36, ptr %t29 - br label %endif9828 -endif9828: + br label %endif9838 +endif9838: %t39 = load i1, ptr %a4 - br i1 %t39, label %then9829, label %endif9831 -then9829: + br i1 %t39, label %then9839, label %endif9841 +then9839: %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t41 = load i64, ptr %t40 %t42 = add i64 %t41, 1 call void @finch_arr_reserve(ptr %a25, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t43 = load ptr, ptr %a25 %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 - store { ptr, i64, i64 } { ptr @.str.6604, i64 19, i64 0 }, ptr %t44 + store { ptr, i64, i64 } { ptr @.str.6606, i64 19, i64 0 }, ptr %t44 store i64 %t42, ptr %t40 - br label %endif9831 -endif9831: + br label %endif9841 +endif9841: store i64 0, ptr %a45 - br label %each.cond9832 -each.cond9832: + br label %each.cond9842 +each.cond9842: %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load i64, ptr %a45 %t49 = icmp slt i64 %t48, %t47 - br i1 %t49, label %each.body9833, label %each.end9835 -each.body9833: + br i1 %t49, label %each.body9843, label %each.end9845 +each.body9843: %t50 = load ptr, ptr %a2 %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 %t52 = load { ptr, i64, i64 }, ptr %t51 store { ptr, i64, i64 } %t52, ptr %a53 %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t55 = load { ptr, i64, i64 }, ptr %a53 - store { ptr, i64, i64 } { ptr @.str.6605, i64 2, i64 0 }, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.6607, i64 2, i64 0 }, ptr %a57 store { ptr, i64, i64 } %t55, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) %t59 = load { ptr, i64, i64 }, ptr %a56 @@ -101204,25 +101249,25 @@ each.body9833: %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 %t60 store { ptr, i64, i64 } %t59, ptr %t63 store i64 %t61, ptr %t54 - br label %each.step9834 -each.step9834: + br label %each.step9844 +each.step9844: %t64 = load i64, ptr %a45 %t65 = add i64 %t64, 1 store i64 %t65, ptr %a45 - br label %each.cond9832 -each.end9835: + br label %each.cond9842 +each.end9845: %t66 = load { ptr, i64, i64 }, ptr %a5 %t67 = call { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %t66) store { ptr, i64, i64 } %t67, ptr %a68 store i64 0, ptr %a69 - br label %each.cond9836 -each.cond9836: + br label %each.cond9846 +each.cond9846: %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a68, i32 0, i32 1 %t71 = load i64, ptr %t70 %t72 = load i64, ptr %a69 %t73 = icmp slt i64 %t72, %t71 - br i1 %t73, label %each.body9837, label %each.end9839 -each.body9837: + br i1 %t73, label %each.body9847, label %each.end9849 +each.body9847: %t74 = load ptr, ptr %a68 %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 %t72 %t76 = load { ptr, i64, i64 }, ptr %t75 @@ -101239,40 +101284,40 @@ each.body9837: %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 store { ptr, i64, i64 } %t82, ptr %t86 store i64 %t84, ptr %t78 - br label %each.step9838 -each.step9838: + br label %each.step9848 +each.step9848: %t87 = load i64, ptr %a69 %t88 = add i64 %t87, 1 store i64 %t88, ptr %a69 - br label %each.cond9836 -each.end9839: + br label %each.cond9846 +each.end9849: call void @finch.drop.arr_str(ptr %a68) store { ptr, i64, i64 } zeroinitializer, ptr %a89 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 %t91 = load i64, ptr %t90 store i64 0, ptr %a92 - br label %for.cond9840 -for.cond9840: + br label %for.cond9850 +for.cond9850: %t93 = load i64, ptr %a92 %t94 = icmp slt i64 %t93, %t91 - br i1 %t94, label %for.body9841, label %for.end9843 -for.body9841: + br i1 %t94, label %for.body9851, label %for.end9853 +for.body9851: %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 %t96 = load i64, ptr %a92 %t97 = load { ptr, i64, i64 }, ptr %a25 %t98 = extractvalue { ptr, i64, i64 } %t97, 1 %t99 = icmp uge i64 %t96, %t98 - br i1 %t99, label %range9844, label %inrange9845 -range9844: - call void @finch_panic_index(ptr @.str.6606, i64 532, i64 %t96, i64 %t98) + br i1 %t99, label %range9854, label %inrange9855 +range9854: + call void @finch_panic_index(ptr @.str.6608, i64 532, i64 %t96, i64 %t98) unreachable -inrange9845: +inrange9855: %t100 = extractvalue { ptr, i64, i64 } %t97, 0 %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t96 %t102 = load { ptr, i64, i64 }, ptr %t101 %t103 = extractvalue { ptr, i64, i64 } %t102, 0 %t104 = icmp eq ptr %t103, null - %t105 = select i1 %t104, ptr @.str.6607, ptr %t103 + %t105 = select i1 %t104, ptr @.str.6609, ptr %t103 %t106 = load i64, ptr %t95 %t107 = add i64 %t106, 1 call void @finch_arr_reserve(ptr %a89, i64 %t107, i64 ptrtoint (ptr getelementptr (ptr, ptr null, i32 1) to i64)) @@ -101280,331 +101325,343 @@ inrange9845: %t109 = getelementptr inbounds ptr, ptr %t108, i64 %t106 store ptr %t105, ptr %t109 store i64 %t107, ptr %t95 - br label %for.step9842 -for.step9842: + br label %for.step9852 +for.step9852: %t110 = load i64, ptr %a92 %t111 = add i64 %t110, 1 store i64 %t111, ptr %a92 - br label %for.cond9840 -for.end9843: + br label %for.cond9850 +for.end9853: %t112 = call ptr @clang_createIndex(i32 0, i32 0) store ptr %t112, ptr %a113 store i64 0, ptr %a114 - br label %each.cond9846 -each.cond9846: + br label %each.cond9856 +each.cond9856: %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = load i64, ptr %a114 %t118 = icmp slt i64 %t117, %t116 - br i1 %t118, label %each.body9847, label %each.end9849 -each.body9847: + br i1 %t118, label %each.body9857, label %each.end9859 +each.body9857: %t119 = load ptr, ptr %a1 %t120 = getelementptr inbounds %S.cimport.Header, ptr %t119, i64 %t117 %t121 = load %S.cimport.Header, ptr %t120 store %S.cimport.Header %t121, ptr %a122 %t123 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 %t124 = load { ptr, i64, i64 }, ptr %t123 - store { ptr, i64, i64 } { ptr @.str.6608, i64 10, i64 0 }, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.6610, i64 10, i64 0 }, ptr %a126 store { ptr, i64, i64 } %t124, ptr %a127 call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) %t128 = load { ptr, i64, i64 }, ptr %a125 store { ptr, i64, i64 } %t128, ptr %a130 - store { ptr, i64, i64 } { ptr @.str.6609, i64 2, i64 0 }, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.6611, i64 2, i64 0 }, ptr %a131 call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) store { ptr, i64, i64 } %t128, ptr %a132 call void @finch_str_drop(ptr %a132) %t133 = load { ptr, i64, i64 }, ptr %a129 store { ptr, i64, i64 } %t133, ptr %a134 - %t135 = extractvalue { ptr, i64, i64 } { ptr @.str.6610, i64 14, i64 0 }, 0 - %t136 = icmp eq ptr %t135, null - %t137 = select i1 %t136, ptr @.str.6611, ptr %t135 - %t138 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t137, 0 - %t139 = load { ptr, i64, i64 }, ptr %a134 - %t140 = extractvalue { ptr, i64, i64 } %t139, 0 - %t141 = icmp eq ptr %t140, null - %t142 = select i1 %t141, ptr @.str.6612, ptr %t140 - %t143 = insertvalue %S.C.CXUnsavedFile %t138, ptr %t142, 1 - %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %a134, i32 0, i32 1 - %t145 = load i64, ptr %t144 - %t146 = insertvalue %S.C.CXUnsavedFile %t143, i64 %t145, 2 - store %S.C.CXUnsavedFile %t146, ptr %a147 - store ptr null, ptr %a148 - %t149 = or i64 1, 64 - store i64 %t149, ptr %a150 - %t151 = load ptr, ptr %a113 - %t152 = extractvalue { ptr, i64, i64 } { ptr @.str.6613, i64 14, i64 0 }, 0 - %t153 = icmp eq ptr %t152, null - %t154 = select i1 %t153, ptr @.str.6614, ptr %t152 - %t155 = load { ptr, i64, i64 }, ptr %a89 - %t156 = extractvalue { ptr, i64, i64 } %t155, 0 - %t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 - %t158 = load i64, ptr %t157 - %t159 = trunc i64 %t158 to i32 - %t160 = load i64, ptr %a150 - %t161 = trunc i64 %t160 to i32 - %t162 = call i32 @clang_parseTranslationUnit2(ptr %t151, ptr %t154, ptr %t156, i32 %t159, ptr %a147, i32 1, i32 %t161, ptr %a148) - store i32 %t162, ptr %a163 - %t164 = load i32, ptr %a163 - %t165 = icmp ne i32 %t164, 0 - br label %logic.from9850 -logic.from9850: - br i1 %t165, label %logic.end9852, label %logic.rhs9851 -logic.rhs9851: - %t166 = load ptr, ptr %a148 - %t167 = icmp eq ptr %t166, null - br label %logic.rend9853 -logic.rend9853: - br label %logic.end9852 -logic.end9852: - %t168 = phi i1 [ true, %logic.from9850 ], [ %t167, %logic.rend9853 ] - br i1 %t168, label %then9854, label %endif9856 -then9854: - %t169 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 - %t170 = load { ptr, i64, i64 }, ptr %t169 - store { ptr, i64, i64 } %t170, ptr %a172 - store { ptr, i64, i64 } { ptr @.str.6615, i64 33, i64 0 }, ptr %a173 - call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) - %t174 = load { ptr, i64, i64 }, ptr %a171 - %t175 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t176 = load { ptr, i64, i64 }, ptr %t175 - store { ptr, i64, i64 } %t174, ptr %a178 - store { ptr, i64, i64 } %t176, ptr %a179 - call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) - store { ptr, i64, i64 } %t174, ptr %a180 - call void @finch_str_drop(ptr %a180) - %t181 = load { ptr, i64, i64 }, ptr %a177 - store { ptr, i64, i64 } %t181, ptr %a183 - store { ptr, i64, i64 } { ptr @.str.6616, i64 1, i64 0 }, ptr %a184 - call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) - store { ptr, i64, i64 } %t181, ptr %a185 - call void @finch_str_drop(ptr %a185) - %t186 = load { ptr, i64, i64 }, ptr %a182 - call void @finch_str_drop(ptr %a134) - call void @finch.drop.arr_ptr(ptr %a89) - call void @finch.drop.arr_str(ptr %a25) - call void @finch.drop.S_cimport_Importer(ptr %a6) - %t187 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t186, 2 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t187 -endif9856: - %t188 = load ptr, ptr %a148 - %t189 = call i32 @clang_getNumDiagnostics(ptr %t188) - %t190 = zext i32 %t189 to i64 - store i64 %t190, ptr %a191 - %t192 = load i64, ptr %a191 - store i64 0, ptr %a193 - br label %for.cond9857 -for.cond9857: - %t194 = load i64, ptr %a193 - %t195 = icmp slt i64 %t194, %t192 - br i1 %t195, label %for.body9858, label %for.end9860 -for.body9858: - %t196 = load ptr, ptr %a148 - %t197 = load i64, ptr %a193 - %t198 = trunc i64 %t197 to i32 - %t199 = call ptr @clang_getDiagnostic(ptr %t196, i32 %t198) - store ptr %t199, ptr %a200 - %t201 = load ptr, ptr %a200 - %t202 = call i32 @clang_getDiagnosticSeverity(ptr %t201) - %t203 = icmp sge i32 %t202, 3 - br i1 %t203, label %then9861, label %endif9863 -then9861: - %t204 = load ptr, ptr %a200 - %t205 = call { i64, i64 } @clang_getDiagnosticSpelling(ptr %t204) - store { i64, i64 } %t205, ptr %a206 - %t207 = load %S.C.CXString, ptr %a206 - %t208 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t207) - store { ptr, i64, i64 } %t208, ptr %a209 - %t210 = load ptr, ptr %a200 - call void @clang_disposeDiagnostic(ptr %t210) - %t211 = load { ptr, i64, i64 }, ptr %a209 - store { ptr, i64, i64 } %t211, ptr %a212 - store { ptr, i64, i64 } { ptr @.str.6618, i64 14, i64 0 }, ptr %a214 - %t215 = call i64 @finch_str_find(ptr %a212, ptr %a214) - %t216 = icmp sge i64 %t215, 0 - br i1 %t216, label %then9864, label %endif9866 + %t135 = load { ptr, i64, i64 }, ptr %a134 + %t136 = call %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } { ptr @.str.6612, i64 14, i64 0 }, { ptr, i64, i64 } %t135) + store %S.C.CXUnsavedFile %t136, ptr %a137 + store ptr null, ptr %a138 + %t139 = or i64 1, 64 + store i64 %t139, ptr %a140 + %t141 = load ptr, ptr %a113 + %t142 = extractvalue { ptr, i64, i64 } { ptr @.str.6613, i64 14, i64 0 }, 0 + %t143 = icmp eq ptr %t142, null + %t144 = select i1 %t143, ptr @.str.6614, ptr %t142 + %t145 = load { ptr, i64, i64 }, ptr %a89 + %t146 = extractvalue { ptr, i64, i64 } %t145, 0 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 + %t148 = load i64, ptr %t147 + %t149 = trunc i64 %t148 to i32 + %t150 = load i64, ptr %a140 + %t151 = trunc i64 %t150 to i32 + %t152 = call i32 @clang_parseTranslationUnit2(ptr %t141, ptr %t144, ptr %t146, i32 %t149, ptr %a137, i32 1, i32 %t151, ptr %a138) + store i32 %t152, ptr %a153 + %t154 = load i32, ptr %a153 + %t155 = icmp ne i32 %t154, 0 + br label %logic.from9860 +logic.from9860: + br i1 %t155, label %logic.end9862, label %logic.rhs9861 +logic.rhs9861: + %t156 = load ptr, ptr %a138 + %t157 = icmp eq ptr %t156, null + br label %logic.rend9863 +logic.rend9863: + br label %logic.end9862 +logic.end9862: + %t158 = phi i1 [ true, %logic.from9860 ], [ %t157, %logic.rend9863 ] + br i1 %t158, label %then9864, label %endif9866 then9864: - %t217 = load { ptr, i64, i64 }, ptr %a209 - store { ptr, i64, i64 } %t217, ptr %a218 - %t220 = load { ptr, i64, i64 }, ptr %a209 - store { ptr, i64, i64 } %t220, ptr %a221 - %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %a209, i32 0, i32 1 - %t224 = load i64, ptr %t223 - call void @finch_str_sub(ptr %a222, ptr %a221, i64 1, i64 %t224, ptr @.str.6620, i64 552) - %t225 = load { ptr, i64, i64 }, ptr %a222 - store { ptr, i64, i64 } %t225, ptr %a226 - store { ptr, i64, i64 } { ptr @.str.6622, i64 1, i64 0 }, ptr %a228 - %t229 = call i64 @finch_str_find(ptr %a226, ptr %a228) - store { ptr, i64, i64 } %t225, ptr %a230 - call void @finch_str_drop(ptr %a230) - %t231 = add i64 %t229, 1 - call void @finch_str_sub(ptr %a219, ptr %a218, i64 1, i64 %t231, ptr @.str.6619, i64 552) - %t232 = load { ptr, i64, i64 }, ptr %a219 - store { ptr, i64, i64 } %t232, ptr %a233 - %t234 = load { ptr, i64, i64 }, ptr %a233 - %t235 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t236 = load { ptr, i64, i64 }, ptr %t235 - store { ptr, i64, i64 } %t234, ptr %a237 - store { ptr, i64, i64 } %t236, ptr %a238 - %t239 = call i32 @finch_str_eq(ptr %a237, ptr %a238) - %t240 = icmp ne i32 %t239, 0 - br i1 %t240, label %then9867, label %endif9869 -then9867: - %t241 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 - %t242 = load { ptr, i64, i64 }, ptr %t241 - store { ptr, i64, i64 } %t242, ptr %a244 - store { ptr, i64, i64 } { ptr @.str.6623, i64 34, i64 0 }, ptr %a245 - call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) - %t246 = load { ptr, i64, i64 }, ptr %a243 - %t247 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t248 = load { ptr, i64, i64 }, ptr %t247 - store { ptr, i64, i64 } %t246, ptr %a250 - store { ptr, i64, i64 } %t248, ptr %a251 - call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) - store { ptr, i64, i64 } %t246, ptr %a252 - call void @finch_str_drop(ptr %a252) - %t253 = load { ptr, i64, i64 }, ptr %a249 - store { ptr, i64, i64 } %t253, ptr %a255 - store { ptr, i64, i64 } { ptr @.str.6624, i64 1, i64 0 }, ptr %a256 - call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) - store { ptr, i64, i64 } %t253, ptr %a257 - call void @finch_str_drop(ptr %a257) - %t258 = load { ptr, i64, i64 }, ptr %a254 - call void @finch_str_drop(ptr %a233) - call void @finch_str_drop(ptr %a209) + %t159 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6615, i64 33, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t166 = load { ptr, i64, i64 }, ptr %t165 + store { ptr, i64, i64 } %t164, ptr %a168 + store { ptr, i64, i64 } %t166, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t164, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t171, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.6616, i64 1, i64 0 }, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t171, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a172 call void @finch_str_drop(ptr %a134) call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) - %t259 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t258, 2 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t259 -endif9869: - %t260 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 - %t261 = load { ptr, i64, i64 }, ptr %t260 - store { ptr, i64, i64 } %t261, ptr %a263 - store { ptr, i64, i64 } { ptr @.str.6625, i64 34, i64 0 }, ptr %a264 - call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) - %t265 = load { ptr, i64, i64 }, ptr %a262 - %t266 = load { ptr, i64, i64 }, ptr %a233 - store { ptr, i64, i64 } %t265, ptr %a268 - store { ptr, i64, i64 } %t266, ptr %a269 - call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) - store { ptr, i64, i64 } %t265, ptr %a270 - call void @finch_str_drop(ptr %a270) - %t271 = load { ptr, i64, i64 }, ptr %a267 - store { ptr, i64, i64 } %t271, ptr %a273 - store { ptr, i64, i64 } { ptr @.str.6626, i64 10, i64 0 }, ptr %a274 - call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274) - store { ptr, i64, i64 } %t271, ptr %a275 - call void @finch_str_drop(ptr %a275) - %t276 = load { ptr, i64, i64 }, ptr %a272 - %t277 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t278 = load { ptr, i64, i64 }, ptr %t277 - store { ptr, i64, i64 } %t276, ptr %a280 - store { ptr, i64, i64 } %t278, ptr %a281 - call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) - store { ptr, i64, i64 } %t276, ptr %a282 - call void @finch_str_drop(ptr %a282) - %t283 = load { ptr, i64, i64 }, ptr %a279 - store { ptr, i64, i64 } %t283, ptr %a285 - store { ptr, i64, i64 } { ptr @.str.6627, i64 60, i64 0 }, ptr %a286 - call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) - store { ptr, i64, i64 } %t283, ptr %a287 - call void @finch_str_drop(ptr %a287) - %t288 = load { ptr, i64, i64 }, ptr %a284 - call void @finch_str_drop(ptr %a233) - call void @finch_str_drop(ptr %a209) - call void @finch_str_drop(ptr %a134) - call void @finch.drop.arr_ptr(ptr %a89) - call void @finch.drop.arr_str(ptr %a25) - call void @finch.drop.S_cimport_Importer(ptr %a6) - %t289 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t288, 2 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t289 + %t177 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t176, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t177 endif9866: - %t290 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 - %t291 = load { ptr, i64, i64 }, ptr %t290 - store { ptr, i64, i64 } %t291, ptr %a293 - store { ptr, i64, i64 } { ptr @.str.6628, i64 19, i64 0 }, ptr %a294 - call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) - %t295 = load { ptr, i64, i64 }, ptr %a292 - %t296 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t297 = load { ptr, i64, i64 }, ptr %t296 - store { ptr, i64, i64 } %t295, ptr %a299 + %t178 = load ptr, ptr %a138 + %t179 = call i32 @clang_getNumDiagnostics(ptr %t178) + %t180 = zext i32 %t179 to i64 + store i64 %t180, ptr %a181 + %t182 = load i64, ptr %a181 + store i64 0, ptr %a183 + br label %for.cond9867 +for.cond9867: + %t184 = load i64, ptr %a183 + %t185 = icmp slt i64 %t184, %t182 + br i1 %t185, label %for.body9868, label %for.end9870 +for.body9868: + %t186 = load ptr, ptr %a138 + %t187 = load i64, ptr %a183 + %t188 = trunc i64 %t187 to i32 + %t189 = call ptr @clang_getDiagnostic(ptr %t186, i32 %t188) + store ptr %t189, ptr %a190 + %t191 = load ptr, ptr %a190 + %t192 = call i32 @clang_getDiagnosticSeverity(ptr %t191) + %t193 = icmp sge i32 %t192, 3 + br i1 %t193, label %then9871, label %endif9873 +then9871: + %t194 = load ptr, ptr %a190 + %t195 = call { i64, i64 } @clang_getDiagnosticSpelling(ptr %t194) + store { i64, i64 } %t195, ptr %a196 + %t197 = load %S.C.CXString, ptr %a196 + %t198 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t197) + store { ptr, i64, i64 } %t198, ptr %a199 + %t200 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t200) + %t201 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t201, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.6618, i64 14, i64 0 }, ptr %a204 + %t205 = call i64 @finch_str_find(ptr %a202, ptr %a204) + %t206 = icmp sge i64 %t205, 0 + br i1 %t206, label %then9874, label %endif9876 +then9874: + %t207 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t207, ptr %a208 + %t210 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t210, ptr %a211 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a199, i32 0, i32 1 + %t214 = load i64, ptr %t213 + call void @finch_str_sub(ptr %a212, ptr %a211, i64 1, i64 %t214, ptr @.str.6620, i64 552) + %t215 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t215, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.6622, i64 1, i64 0 }, ptr %a218 + %t219 = call i64 @finch_str_find(ptr %a216, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = add i64 %t219, 1 + call void @finch_str_sub(ptr %a209, ptr %a208, i64 1, i64 %t221, ptr @.str.6619, i64 552) + %t222 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t222, ptr %a223 + %t224 = load { ptr, i64, i64 }, ptr %a223 + %t225 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t226 = load { ptr, i64, i64 }, ptr %t225 + store { ptr, i64, i64 } %t224, ptr %a227 + store { ptr, i64, i64 } %t226, ptr %a228 + %t229 = call i32 @finch_str_eq(ptr %a227, ptr %a228) + %t230 = icmp ne i32 %t229, 0 + br i1 %t230, label %then9877, label %endif9879 +then9877: + %t231 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t232 = load { ptr, i64, i64 }, ptr %t231 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.6623, i64 34, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a233 + %t237 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + store { ptr, i64, i64 } %t236, ptr %a240 + store { ptr, i64, i64 } %t238, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t236, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + store { ptr, i64, i64 } %t243, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.6624, i64 1, i64 0 }, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t243, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + call void @finch_str_drop(ptr %a223) + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t249 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t248, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t249 +endif9879: + %t250 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t251 = load { ptr, i64, i64 }, ptr %t250 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.6625, i64 34, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + %t255 = load { ptr, i64, i64 }, ptr %a252 + %t256 = load { ptr, i64, i64 }, ptr %a223 + store { ptr, i64, i64 } %t255, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t261, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.6626, i64 10, i64 0 }, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t261, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + %t267 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t266, ptr %a270 + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t266, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + store { ptr, i64, i64 } %t273, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.6627, i64 60, i64 0 }, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + call void @finch_str_drop(ptr %a223) + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t279 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t278, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t279 +endif9876: + %t280 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a283 + store { ptr, i64, i64 } { ptr @.str.6628, i64 19, i64 0 }, ptr %a284 + call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a282 + %t286 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t285, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t285, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t292, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.6629, i64 16, i64 0 }, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t292, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a293 + %t298 = load { ptr, i64, i64 }, ptr %a199 store { ptr, i64, i64 } %t297, ptr %a300 - call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) - store { ptr, i64, i64 } %t295, ptr %a301 - call void @finch_str_drop(ptr %a301) - %t302 = load { ptr, i64, i64 }, ptr %a298 - store { ptr, i64, i64 } %t302, ptr %a304 - store { ptr, i64, i64 } { ptr @.str.6629, i64 16, i64 0 }, ptr %a305 - call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) - store { ptr, i64, i64 } %t302, ptr %a306 - call void @finch_str_drop(ptr %a306) - %t307 = load { ptr, i64, i64 }, ptr %a303 - %t308 = load { ptr, i64, i64 }, ptr %a209 - store { ptr, i64, i64 } %t307, ptr %a310 - store { ptr, i64, i64 } %t308, ptr %a311 - call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311) - store { ptr, i64, i64 } %t307, ptr %a312 - call void @finch_str_drop(ptr %a312) - %t313 = load { ptr, i64, i64 }, ptr %a309 - call void @finch_str_drop(ptr %a209) + store { ptr, i64, i64 } %t298, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t297, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + call void @finch_str_drop(ptr %a199) call void @finch_str_drop(ptr %a134) call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) - %t314 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t313, 2 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t314 -endif9863: - %t315 = load ptr, ptr %a200 - call void @clang_disposeDiagnostic(ptr %t315) - br label %for.step9859 -for.step9859: - %t316 = load i64, ptr %a193 - %t317 = add i64 %t316, 1 - store i64 %t317, ptr %a193 - br label %for.cond9857 -for.end9860: - %t318 = load ptr, ptr %a148 - %t319 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1 - store ptr %t318, ptr %t319 - %t320 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 - %t321 = load { ptr, i64, i64 }, ptr %t320 - %t322 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2 - store { ptr, i64, i64 } %t321, ptr %a323 - call void @finch_str_copy(ptr %a324, ptr %a323) - %t325 = load { ptr, i64, i64 }, ptr %a324 - %t326 = load { ptr, i64, i64 }, ptr %t322 - store { ptr, i64, i64 } %t325, ptr %t322 - store { ptr, i64, i64 } %t326, ptr %a327 - call void @finch_str_drop(ptr %a327) - %t329 = load ptr, ptr %a148 - call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a328, ptr %t329) - %t330 = load %S.C.CXCursor, ptr %a328 - store %S.C.CXCursor %t330, ptr %a331 - %t332 = call i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8 %a331, ptr @finch.c.cimport.visitTop, ptr %a6) - %t333 = load ptr, ptr %a148 - call void @clang_disposeTranslationUnit(ptr %t333) + %t304 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t303, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t304 +endif9873: + %t305 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t305) + br label %for.step9869 +for.step9869: + %t306 = load i64, ptr %a183 + %t307 = add i64 %t306, 1 + store i64 %t307, ptr %a183 + br label %for.cond9867 +for.end9870: + %t308 = load ptr, ptr %a138 + %t309 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1 + store ptr %t308, ptr %t309 + %t310 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t311 = load { ptr, i64, i64 }, ptr %t310 + %t312 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2 + store { ptr, i64, i64 } %t311, ptr %a313 + call void @finch_str_copy(ptr %a314, ptr %a313) + %t315 = load { ptr, i64, i64 }, ptr %a314 + %t316 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t315, ptr %t312 + store { ptr, i64, i64 } %t316, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t319 = load ptr, ptr %a138 + call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a318, ptr %t319) + %t320 = load %S.C.CXCursor, ptr %a318 + store %S.C.CXCursor %t320, ptr %a321 + %t322 = call i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8 %a321, ptr @finch.c.cimport.visitTop, ptr %a6) + %t323 = load ptr, ptr %a138 + call void @clang_disposeTranslationUnit(ptr %t323) call void @finch_str_drop(ptr %a134) - br label %each.step9848 -each.step9848: - %t334 = load i64, ptr %a114 - %t335 = add i64 %t334, 1 - store i64 %t335, ptr %a114 - br label %each.cond9846 -each.end9849: - %t336 = load ptr, ptr %a113 - call void @clang_disposeIndex(ptr %t336) - %t337 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 - %t338 = load %S.cimport.CImports, ptr %t337 - store %S.cimport.CImports %t338, ptr %a339 - call void @finch.copy.S_cimport_CImports(ptr %a340, ptr %a339) - %t341 = load %S.cimport.CImports, ptr %a340 + br label %each.step9858 +each.step9858: + %t324 = load i64, ptr %a114 + %t325 = add i64 %t324, 1 + store i64 %t325, ptr %a114 + br label %each.cond9856 +each.end9859: + %t326 = load ptr, ptr %a113 + call void @clang_disposeIndex(ptr %t326) + %t327 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 + %t328 = load %S.cimport.CImports, ptr %t327 + store %S.cimport.CImports %t328, ptr %a329 + call void @finch.copy.S_cimport_CImports(ptr %a330, ptr %a329) + %t331 = load %S.cimport.CImports, ptr %a330 call void @finch.drop.arr_ptr(ptr %a89) call void @finch.drop.arr_str(ptr %a25) call void @finch.drop.S_cimport_Importer(ptr %a6) - %t342 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 - %t343 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t342, %S.cimport.CImports %t341, 1 - ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t343 + %t332 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t333 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t332, %S.cimport.CImports %t331, 1 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t333 +} + +define internal %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + %t4 = extractvalue { ptr, i64, i64 } %t3, 0 + %t5 = icmp eq ptr %t4, null + %t6 = select i1 %t5, ptr @.str.6630, ptr %t4 + %t7 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = extractvalue { ptr, i64, i64 } %t8, 0 + %t10 = icmp eq ptr %t9, null + %t11 = select i1 %t10, ptr @.str.6631, ptr %t9 + %t12 = insertvalue %S.C.CXUnsavedFile %t7, ptr %t11, 1 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = insertvalue %S.C.CXUnsavedFile %t12, i64 %t14, 2 + ret %S.C.CXUnsavedFile %t15 } define internal { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %p0) { @@ -101625,18 +101682,18 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6632, i64 1, i64 0 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.6633, i64 4, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6634, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6635, i64 4, i64 0 }, ptr %a6 call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.6630, i64 1, i64 0 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6632, i64 1, i64 0 }, ptr %a9 store { ptr, i64, i64 } %t7, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t12, ptr %a14 - store { ptr, i64, i64 } { ptr @.str.6634, i64 1, i64 0 }, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6636, i64 1, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) store { ptr, i64, i64 } %t12, ptr %a16 call void @finch_str_drop(ptr %a16) @@ -101661,7 +101718,7 @@ entry: define internal { ptr, i64, i64 } @finch.host.nullDevice() { entry: - ret { ptr, i64, i64 } { ptr @.str.6635, i64 9, i64 0 } + ret { ptr, i64, i64 } { ptr @.str.6637, i64 9, i64 0 } } define internal { ptr, i64, i64 } @finch.host.tempDir() { @@ -101675,9 +101732,9 @@ entry: %a17 = alloca { ptr, i64, i64 }, align 16 %a21 = alloca { ptr, i64, i64 }, align 16 %a22 = alloca { ptr, i64, i64 }, align 16 - %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6636, i64 6, i64 0 }, 0 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6638, i64 6, i64 0 }, 0 %t2 = icmp eq ptr %t1, null - %t3 = select i1 %t2, ptr @.str.6637, ptr %t1 + %t3 = select i1 %t2, ptr @.str.6639, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) @@ -101689,36 +101746,36 @@ entry: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 - br i1 %t13, label %then9870, label %endif9872 -then9870: + br i1 %t13, label %then9880, label %endif9882 +then9880: %t14 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t14, ptr %a15 - store { ptr, i64, i64 } { ptr @.str.6639, i64 1, i64 0 }, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6641, i64 1, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_ends(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %then9873, label %endif9875 -then9873: + br i1 %t19, label %then9883, label %endif9885 +then9883: %t20 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t20, ptr %a21 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = sub i64 %t24, 1 - call void @finch_str_sub(ptr %a22, ptr %a21, i64 0, i64 %t25, ptr @.str.6640, i64 25) + call void @finch_str_sub(ptr %a22, ptr %a21, i64 0, i64 %t25, ptr @.str.6642, i64 31) %t26 = load { ptr, i64, i64 }, ptr %a22 call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t26 -endif9875: +endif9885: %t27 = load { ptr, i64, i64 }, ptr %a10 ret { ptr, i64, i64 } %t27 -endif9872: +endif9882: call void @finch_str_drop(ptr %a10) - ret { ptr, i64, i64 } { ptr @.str.6641, i64 4, i64 0 } + ret { ptr, i64, i64 } { ptr @.str.6643, i64 4, i64 0 } } define internal { ptr, i64, i64 } @finch.host.pathSeparator() { entry: - ret { ptr, i64, i64 } { ptr @.str.6642, i64 1, i64 0 } + ret { ptr, i64, i64 } { ptr @.str.6644, i64 1, i64 0 } } define internal i64 @finch.host.pid() { @@ -101734,9 +101791,9 @@ entry: %a5 = alloca { ptr, i64, i64 }, align 16 %a7 = alloca { ptr, i64, i64 }, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 - %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6643, i64 3, i64 0 }, 0 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6645, i64 3, i64 0 }, 0 %t2 = icmp eq ptr %t1, null - %t3 = select i1 %t2, ptr @.str.6644, ptr %t1 + %t3 = select i1 %t2, ptr @.str.6646, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) @@ -101767,9 +101824,9 @@ entry: %a39 = alloca { ptr, i64, i64 }, align 16 %a40 = alloca { ptr, i64, i64 }, align 16 %a41 = alloca { ptr, i64, i64 }, align 16 - %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6645, i64 14, i64 0 }, 0 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6647, i64 14, i64 0 }, 0 %t2 = icmp eq ptr %t1, null - %t3 = select i1 %t2, ptr @.str.6646, ptr %t1 + %t3 = select i1 %t2, ptr @.str.6648, ptr %t1 %t4 = call ptr @getenv(ptr %t3) store { ptr, i64, i64 } zeroinitializer, ptr %a5 call void @finch_str_from_c(ptr %a5, ptr %t4) @@ -101781,19 +101838,19 @@ entry: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = icmp sgt i64 %t12, 0 - br i1 %t13, label %then9876, label %endif9878 -then9876: + br i1 %t13, label %then9886, label %endif9888 +then9886: %t14 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t14, ptr %a16 - store { ptr, i64, i64 } { ptr @.str.6647, i64 6, i64 0 }, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6649, i64 6, i64 0 }, ptr %a17 call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) %t18 = load { ptr, i64, i64 }, ptr %a15 call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t18 -endif9878: - %t19 = extractvalue { ptr, i64, i64 } { ptr @.str.6648, i64 4, i64 0 }, 0 +endif9888: + %t19 = extractvalue { ptr, i64, i64 } { ptr @.str.6650, i64 4, i64 0 }, 0 %t20 = icmp eq ptr %t19, null - %t21 = select i1 %t20, ptr @.str.6649, ptr %t19 + %t21 = select i1 %t20, ptr @.str.6651, ptr %t19 %t22 = call ptr @getenv(ptr %t21) store { ptr, i64, i64 } zeroinitializer, ptr %a23 call void @finch_str_from_c(ptr %a23, ptr %t22) @@ -101805,20 +101862,20 @@ endif9878: %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = icmp sgt i64 %t30, 0 - br i1 %t31, label %then9879, label %endif9881 -then9879: + br i1 %t31, label %then9889, label %endif9891 +then9889: %t32 = load { ptr, i64, i64 }, ptr %a28 store { ptr, i64, i64 } %t32, ptr %a34 - store { ptr, i64, i64 } { ptr @.str.6650, i64 13, i64 0 }, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.6652, i64 13, i64 0 }, ptr %a35 call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) %t36 = load { ptr, i64, i64 }, ptr %a33 call void @finch_str_drop(ptr %a28) call void @finch_str_drop(ptr %a10) ret { ptr, i64, i64 } %t36 -endif9881: +endif9891: %t37 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t37, ptr %a39 - store { ptr, i64, i64 } { ptr @.str.6651, i64 12, i64 0 }, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.6653, i64 12, i64 0 }, ptr %a40 call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) store { ptr, i64, i64 } %t37, ptr %a41 call void @finch_str_drop(ptr %a41) @@ -101847,7 +101904,7 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) - store { ptr, i64, i64 } { ptr @.str.6652, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6654, i64 9, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 @@ -101890,7 +101947,7 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) - store { ptr, i64, i64 } { ptr @.str.6653, i64 7, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6655, i64 7, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t3, ptr %a6 call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) store { ptr, i64, i64 } %t3, ptr %a7 @@ -101929,14 +101986,14 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 %t4 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t3) - store { ptr, i64, i64 } { ptr @.str.6654, i64 3, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6656, i64 3, i64 0 }, ptr %a6 store { ptr, i64, i64 } %t4, ptr %a7 call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) store { ptr, i64, i64 } %t4, ptr %a8 call void @finch_str_drop(ptr %a8) %t9 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t9, ptr %a11 - store { ptr, i64, i64 } { ptr @.str.6655, i64 1, i64 0 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.6657, i64 1, i64 0 }, ptr %a12 call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) store { ptr, i64, i64 } %t9, ptr %a13 call void @finch_str_drop(ptr %a13) @@ -101979,7 +102036,7 @@ entry: call void @finch_str_trim(ptr %a4, ptr %a3) %t5 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t5, ptr %a6 - store { ptr, i64, i64 } { ptr @.str.6658, i64 1, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6660, i64 1, i64 0 }, ptr %a8 call void @finch_str_split(ptr %a9, ptr %a6, ptr %a8) %t10 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t5, ptr %a11 @@ -101988,11 +102045,11 @@ entry: %t13 = load { ptr, i64, i64 }, ptr %a12 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 0, %t14 - br i1 %t15, label %range9882, label %inrange9883 -range9882: - call void @finch_panic_index(ptr @.str.6659, i64 21, i64 0, i64 %t14) + br i1 %t15, label %range9892, label %inrange9893 +range9892: + call void @finch_panic_index(ptr @.str.6661, i64 21, i64 0, i64 %t14) unreachable -inrange9883: +inrange9893: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 %t18 = load { ptr, i64, i64 }, ptr %t17 @@ -102044,7 +102101,7 @@ entry: %a60 = alloca { ptr, i64, i64 }, align 16 %t1 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t1, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6661, i64 14, i64 0 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6663, i64 14, i64 0 }, ptr %a4 call void @finch_str_concat(ptr %a2, ptr %a3, ptr %a4) store { ptr, i64, i64 } %t1, ptr %a5 call void @finch_str_drop(ptr %a5) @@ -102061,7 +102118,7 @@ entry: call void @finch_str_drop(ptr %a14) %t15 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t15, ptr %a17 - store { ptr, i64, i64 } { ptr @.str.6662, i64 4, i64 0 }, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.6664, i64 4, i64 0 }, ptr %a18 call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) store { ptr, i64, i64 } %t15, ptr %a19 call void @finch_str_drop(ptr %a19) @@ -102069,14 +102126,14 @@ entry: store { ptr, i64, i64 } %t20, ptr %a21 %t22 = load { ptr, i64, i64 }, ptr %a21 %t23 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t22) - store { ptr, i64, i64 } { ptr @.str.6663, i64 21, i64 0 }, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.6665, i64 21, i64 0 }, ptr %a25 store { ptr, i64, i64 } %t23, ptr %a26 call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) store { ptr, i64, i64 } %t23, ptr %a27 call void @finch_str_drop(ptr %a27) %t28 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t28, ptr %a30 - store { ptr, i64, i64 } { ptr @.str.6664, i64 4, i64 0 }, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.6666, i64 4, i64 0 }, ptr %a31 call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) store { ptr, i64, i64 } %t28, ptr %a32 call void @finch_str_drop(ptr %a32) @@ -102101,17 +102158,17 @@ entry: %t48 = icmp eq i32 %t47, 0 %t49 = load { ptr, i64, i64 }, ptr %a46 %t50 = load { ptr, i64, i64 }, ptr %a45 - br i1 %t48, label %or.failed9884, label %or.ok9885 -or.failed9884: + br i1 %t48, label %or.failed9894, label %or.ok9895 +or.failed9894: store { ptr, i64, i64 } %t49, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %or.bend9886 -or.bend9886: - br label %or.end9887 -or.ok9885: - br label %or.end9887 -or.end9887: - %t52 = phi { ptr, i64, i64 } [ { ptr @.str.6665, i64 0, i64 0 }, %or.bend9886 ], [ %t50, %or.ok9885 ] + br label %or.bend9896 +or.bend9896: + br label %or.end9897 +or.ok9895: + br label %or.end9897 +or.end9897: + %t52 = phi { ptr, i64, i64 } [ { ptr @.str.6667, i64 0, i64 0 }, %or.bend9896 ], [ %t50, %or.ok9895 ] store { ptr, i64, i64 } %t52, ptr %a53 %t54 = load { ptr, i64, i64 }, ptr %a21 call void @finch.host.remove({ ptr, i64, i64 } %t54) @@ -102123,12 +102180,12 @@ or.end9887: store { ptr, i64, i64 } %t58, ptr %a60 call void @finch_str_drop(ptr %a60) %t61 = icmp eq i64 %t59, 0 - br i1 %t61, label %then9888, label %endif9890 -then9888: + br i1 %t61, label %then9898, label %endif9900 +then9898: call void @finch_str_drop(ptr %a53) call void @finch_str_drop(ptr %a21) - ret { ptr, i64, i64 } { ptr @.str.6667, i64 24, i64 0 } -endif9890: + ret { ptr, i64, i64 } { ptr @.str.6669, i64 24, i64 0 } +endif9900: %t62 = load { ptr, i64, i64 }, ptr %a53 %t63 = call { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %t62) call void @finch_str_drop(ptr %a53) @@ -102171,73 +102228,86 @@ entry: %a72 = alloca { ptr, i64, i64 }, align 16 %a74 = alloca { ptr, i64, i64 }, align 16 %a75 = alloca { ptr, i64, i64 }, align 16 - %a78 = alloca %S.platform.Target, align 16 - %a80 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 %a81 = alloca { ptr, i64, i64 }, align 16 %a82 = alloca { ptr, i64, i64 }, align 16 - %a86 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca %S.platform.Target, align 16 %a87 = alloca { ptr, i64, i64 }, align 16 %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 %a93 = alloca { ptr, i64, i64 }, align 16 %a94 = alloca { ptr, i64, i64 }, align 16 %a95 = alloca { ptr, i64, i64 }, align 16 %a100 = alloca { ptr, i64, i64 }, align 16 %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 - %a110 = alloca { ptr, i64, i64 }, align 16 %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 - %a121 = alloca { ptr, i64, i64 }, align 16 %a122 = alloca { ptr, i64, i64 }, align 16 %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 %a128 = alloca { ptr, i64, i64 }, align 16 %a129 = alloca { ptr, i64, i64 }, align 16 %a130 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 %a137 = alloca { ptr, i64, i64 }, align 16 - %a138 = alloca { ptr, i64, i64 }, align 16 - %a142 = alloca { ptr, i64, i64 }, align 16 %a143 = alloca { ptr, i64, i64 }, align 16 %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 - %a152 = alloca { ptr, i64, i64 }, align 16 - %a156 = alloca { ptr, i64, i64 }, align 16 %a157 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 - %a162 = alloca i1, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 %a165 = alloca { ptr, i64, i64 }, align 16 - %a166 = alloca { ptr, i64, i64 }, align 16 - %a170 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca i1, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 - %a176 = alloca i1, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca i1, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 %a192 = alloca { ptr, i64, i64 }, align 16 - %a197 = alloca { ptr, i64, i64 }, align 16 - %a202 = alloca { ptr, i64, i64 }, align 16 - %a204 = alloca { ptr, i64, i64 }, align 16 - %a205 = alloca { ptr, i64, i64 }, align 16 - %a207 = alloca { ptr, i64, i64 }, align 16 - %a213 = alloca { ptr, i64, i64 }, align 16 - %a214 = alloca { ptr, i64, i64 }, align 16 - %a217 = alloca { ptr, i64, i64 }, align 16 - %a225 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca i1, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 %a237 = alloca { ptr, i64, i64 }, align 16 - %a241 = alloca { ptr, i64, i64 }, align 16 - %a242 = alloca { ptr, i64, i64 }, align 16 %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 %a247 = alloca { ptr, i64, i64 }, align 16 - %a249 = alloca { ptr, i64, i64 }, align 16 - %a250 = alloca { ptr, i64, i64 }, align 16 - %a253 = alloca { ptr, i64, i64 }, align 16 - %a256 = alloca { ptr, i64, i64 }, align 16 - %a259 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 %a267 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 %t2 = call { ptr, i64, i64 } @finch.platform.hostTriple() store { ptr, i64, i64 } %t2, ptr %a3 @@ -102249,8 +102319,8 @@ entry: %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp eq i64 %t10, 0 - br i1 %t11, label %then9891, label %else9892 -then9891: + br i1 %t11, label %then9901, label %else9902 +then9901: %t12 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_copy(ptr %a14, ptr %a13) @@ -102259,522 +102329,571 @@ then9891: store { ptr, i64, i64 } %t15, ptr %a8 store { ptr, i64, i64 } %t16, ptr %a17 call void @finch_str_drop(ptr %a17) - br label %endif9893 -else9892: + br label %endif9903 +else9902: %t18 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t18, ptr %a19 - store { ptr, i64, i64 } { ptr @.str.6668, i64 7, i64 0 }, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.6670, i64 7, i64 0 }, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br i1 %t22, label %then9894, label %else9895 -then9894: + br i1 %t22, label %then9904, label %else9905 +then9904: %t23 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6669, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6671, i64 18, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t23, ptr %a24 call void @finch_str_drop(ptr %a24) - br label %endif9896 -else9895: + br label %endif9906 +else9905: %t25 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t25, ptr %a26 - store { ptr, i64, i64 } { ptr @.str.6670, i64 5, i64 0 }, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.6672, i64 5, i64 0 }, ptr %a27 %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) %t29 = icmp ne i32 %t28, 0 - br i1 %t29, label %then9897, label %else9898 -then9897: + br i1 %t29, label %then9907, label %else9908 +then9907: %t30 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6671, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6673, i64 24, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t30, ptr %a31 call void @finch_str_drop(ptr %a31) - br label %endif9899 -else9898: + br label %endif9909 +else9908: %t32 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t32, ptr %a33 - store { ptr, i64, i64 } { ptr @.str.6672, i64 5, i64 0 }, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.6674, i64 5, i64 0 }, ptr %a34 %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) %t36 = icmp ne i32 %t35, 0 - br label %logic.from9900 -logic.from9900: - br i1 %t36, label %logic.end9902, label %logic.rhs9901 -logic.rhs9901: + br label %logic.from9910 +logic.from9910: + br i1 %t36, label %logic.end9912, label %logic.rhs9911 +logic.rhs9911: %t37 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t37, ptr %a38 - store { ptr, i64, i64 } { ptr @.str.6673, i64 7, i64 0 }, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.6675, i64 7, i64 0 }, ptr %a39 %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) %t41 = icmp ne i32 %t40, 0 - br label %logic.rend9903 -logic.rend9903: - br label %logic.end9902 -logic.end9902: - %t42 = phi i1 [ true, %logic.from9900 ], [ %t41, %logic.rend9903 ] - br label %logic.from9904 -logic.from9904: - br i1 %t42, label %logic.end9906, label %logic.rhs9905 -logic.rhs9905: - %t43 = load { ptr, i64, i64 }, ptr %a1 - store { ptr, i64, i64 } %t43, ptr %a44 - store { ptr, i64, i64 } { ptr @.str.6674, i64 11, i64 0 }, ptr %a45 - %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) - %t47 = icmp ne i32 %t46, 0 - br label %logic.rend9907 -logic.rend9907: - br label %logic.end9906 -logic.end9906: - %t48 = phi i1 [ true, %logic.from9904 ], [ %t47, %logic.rend9907 ] - br i1 %t48, label %then9908, label %else9909 -then9908: - %t49 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6675, i64 25, i64 0 }, ptr %a8 - store { ptr, i64, i64 } %t49, ptr %a50 - call void @finch_str_drop(ptr %a50) - br label %endif9910 -else9909: - %t51 = load { ptr, i64, i64 }, ptr %a1 - store { ptr, i64, i64 } %t51, ptr %a52 - store { ptr, i64, i64 } { ptr @.str.6676, i64 5, i64 0 }, ptr %a53 - %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) - %t55 = icmp ne i32 %t54, 0 - br i1 %t55, label %then9911, label %endif9913 -then9911: - %t56 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t56, ptr %a57 - store { ptr, i64, i64 } { ptr @.str.6678, i64 7, i64 0 }, ptr %a59 - %t60 = call i32 @finch_str_starts(ptr %a57, ptr %a59) - %t61 = icmp ne i32 %t60, 0 + br label %logic.rend9913 +logic.rend9913: + br label %logic.end9912 +logic.end9912: + %t42 = phi i1 [ true, %logic.from9910 ], [ %t41, %logic.rend9913 ] br label %logic.from9914 logic.from9914: - br i1 %t61, label %logic.end9916, label %logic.rhs9915 + br i1 %t42, label %logic.end9916, label %logic.rhs9915 logic.rhs9915: - %t62 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t62, ptr %a63 - store { ptr, i64, i64 } { ptr @.str.6680, i64 5, i64 0 }, ptr %a65 - %t66 = call i32 @finch_str_starts(ptr %a63, ptr %a65) - %t67 = icmp ne i32 %t66, 0 + %t43 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.6676, i64 11, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp ne i32 %t46, 0 br label %logic.rend9917 logic.rend9917: br label %logic.end9916 logic.end9916: - %t68 = phi i1 [ true, %logic.from9914 ], [ %t67, %logic.rend9917 ] - br i1 %t68, label %then9918, label %else9919 + %t48 = phi i1 [ true, %logic.from9914 ], [ %t47, %logic.rend9917 ] + br i1 %t48, label %then9918, label %else9919 then9918: - %t69 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6681, i64 24, i64 0 }, ptr %a8 - store { ptr, i64, i64 } %t69, ptr %a70 - call void @finch_str_drop(ptr %a70) + %t49 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6677, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t49, ptr %a50 + call void @finch_str_drop(ptr %a50) br label %endif9920 else9919: + %t51 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t51, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6678, i64 5, i64 0 }, ptr %a53 + %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) + %t55 = icmp ne i32 %t54, 0 + br i1 %t55, label %then9921, label %endif9923 +then9921: + %t56 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.6680, i64 7, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_starts(ptr %a57, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.from9924 +logic.from9924: + br i1 %t61, label %logic.end9926, label %logic.rhs9925 +logic.rhs9925: + %t62 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6682, i64 5, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_starts(ptr %a63, ptr %a65) + %t67 = icmp ne i32 %t66, 0 + br label %logic.rend9927 +logic.rend9927: + br label %logic.end9926 +logic.end9926: + %t68 = phi i1 [ true, %logic.from9924 ], [ %t67, %logic.rend9927 ] + br i1 %t68, label %then9928, label %else9929 +then9928: + %t69 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6683, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_drop(ptr %a70) + br label %endif9930 +else9929: %t71 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6682, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6684, i64 25, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t71, ptr %a72 call void @finch_str_drop(ptr %a72) + br label %endif9930 +endif9930: + br label %endif9923 +endif9923: br label %endif9920 endif9920: - br label %endif9913 -endif9913: - br label %endif9910 -endif9910: - br label %endif9899 -endif9899: - br label %endif9896 -endif9896: - br label %endif9893 -endif9893: + br label %endif9909 +endif9909: + br label %endif9906 +endif9906: + br label %endif9903 +endif9903: %t73 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t73, ptr %a74 - call void @finch_str_copy(ptr %a75, ptr %a74) - %t76 = load { ptr, i64, i64 }, ptr %a75 - %t77 = insertvalue %S.platform.Target zeroinitializer, { ptr, i64, i64 } %t76, 0 - store %S.platform.Target %t77, ptr %a78 - %t79 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t79, ptr %a80 - store { ptr, i64, i64 } { ptr @.str.6684, i64 7, i64 0 }, ptr %a82 - %t83 = call i64 @finch_str_find(ptr %a80, ptr %a82) - %t84 = icmp sge i64 %t83, 0 - br label %logic.from9921 -logic.from9921: - br i1 %t84, label %logic.end9923, label %logic.rhs9922 -logic.rhs9922: - %t85 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t85, ptr %a86 - store { ptr, i64, i64 } { ptr @.str.6686, i64 5, i64 0 }, ptr %a88 - %t89 = call i64 @finch_str_find(ptr %a86, ptr %a88) - %t90 = icmp sge i64 %t89, 0 - br label %logic.rend9924 -logic.rend9924: - br label %logic.end9923 -logic.end9923: - %t91 = phi i1 [ true, %logic.from9921 ], [ %t90, %logic.rend9924 ] - br label %logic.from9925 -logic.from9925: - br i1 %t91, label %logic.end9927, label %logic.rhs9926 -logic.rhs9926: + store { ptr, i64, i64 } { ptr @.str.6685, i64 22, i64 0 }, ptr %a75 + %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + br i1 %t77, label %then9931, label %endif9933 +then9931: + %t78 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6686, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif9933 +endif9933: + %t80 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t80, ptr %a81 + call void @finch_str_copy(ptr %a82, ptr %a81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = insertvalue %S.platform.Target zeroinitializer, { ptr, i64, i64 } %t83, 0 + store %S.platform.Target %t84, ptr %a85 + %t86 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.6688, i64 7, i64 0 }, ptr %a89 + %t90 = call i64 @finch_str_find(ptr %a87, ptr %a89) + %t91 = icmp sge i64 %t90, 0 + br label %logic.from9934 +logic.from9934: + br i1 %t91, label %logic.end9936, label %logic.rhs9935 +logic.rhs9935: %t92 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t92, ptr %a93 - store { ptr, i64, i64 } { ptr @.str.6688, i64 4, i64 0 }, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.6690, i64 5, i64 0 }, ptr %a95 %t96 = call i64 @finch_str_find(ptr %a93, ptr %a95) %t97 = icmp sge i64 %t96, 0 - br label %logic.rend9928 -logic.rend9928: - br label %logic.end9927 -logic.end9927: - %t98 = phi i1 [ true, %logic.from9925 ], [ %t97, %logic.rend9928 ] - br label %logic.from9929 -logic.from9929: - br i1 %t98, label %logic.end9931, label %logic.rhs9930 -logic.rhs9930: + br label %logic.rend9937 +logic.rend9937: + br label %logic.end9936 +logic.end9936: + %t98 = phi i1 [ true, %logic.from9934 ], [ %t97, %logic.rend9937 ] + br label %logic.from9938 +logic.from9938: + br i1 %t98, label %logic.end9940, label %logic.rhs9939 +logic.rhs9939: %t99 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t99, ptr %a100 - store { ptr, i64, i64 } { ptr @.str.6690, i64 5, i64 0 }, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.6692, i64 4, i64 0 }, ptr %a102 %t103 = call i64 @finch_str_find(ptr %a100, ptr %a102) %t104 = icmp sge i64 %t103, 0 - br label %logic.rend9932 -logic.rend9932: - br label %logic.end9931 -logic.end9931: - %t105 = phi i1 [ true, %logic.from9929 ], [ %t104, %logic.rend9932 ] - %t106 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - store i1 %t105, ptr %t106 - %t107 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t107, ptr %a108 - store { ptr, i64, i64 } { ptr @.str.6692, i64 4, i64 0 }, ptr %a110 - %t111 = call i64 @finch_str_find(ptr %a108, ptr %a110) - %t112 = icmp sge i64 %t111, 0 - %t113 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 2 + br label %logic.rend9941 +logic.rend9941: + br label %logic.end9940 +logic.end9940: + %t105 = phi i1 [ true, %logic.from9938 ], [ %t104, %logic.rend9941 ] + br label %logic.from9942 +logic.from9942: + br i1 %t105, label %logic.end9944, label %logic.rhs9943 +logic.rhs9943: + %t106 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.6694, i64 5, i64 0 }, ptr %a109 + %t110 = call i64 @finch_str_find(ptr %a107, ptr %a109) + %t111 = icmp sge i64 %t110, 0 + br label %logic.rend9945 +logic.rend9945: + br label %logic.end9944 +logic.end9944: + %t112 = phi i1 [ true, %logic.from9942 ], [ %t111, %logic.rend9945 ] + %t113 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 store i1 %t112, ptr %t113 %t114 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t114, ptr %a115 - store { ptr, i64, i64 } { ptr @.str.6694, i64 5, i64 0 }, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.6696, i64 4, i64 0 }, ptr %a117 %t118 = call i64 @finch_str_find(ptr %a115, ptr %a117) %t119 = icmp sge i64 %t118, 0 - br label %logic.from9933 -logic.from9933: - br i1 %t119, label %logic.end9935, label %logic.rhs9934 -logic.rhs9934: - %t120 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t120, ptr %a121 - store { ptr, i64, i64 } { ptr @.str.6696, i64 6, i64 0 }, ptr %a123 - %t124 = call i64 @finch_str_find(ptr %a121, ptr %a123) - %t125 = icmp sge i64 %t124, 0 - br label %logic.rend9936 -logic.rend9936: - br label %logic.end9935 -logic.end9935: - %t126 = phi i1 [ true, %logic.from9933 ], [ %t125, %logic.rend9936 ] - br label %logic.from9937 -logic.from9937: - br i1 %t126, label %logic.end9939, label %logic.rhs9938 -logic.rhs9938: + %t120 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 2 + store i1 %t119, ptr %t120 + %t121 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.6698, i64 5, i64 0 }, ptr %a124 + %t125 = call i64 @finch_str_find(ptr %a122, ptr %a124) + %t126 = icmp sge i64 %t125, 0 + br label %logic.from9946 +logic.from9946: + br i1 %t126, label %logic.end9948, label %logic.rhs9947 +logic.rhs9947: %t127 = load { ptr, i64, i64 }, ptr %a8 store { ptr, i64, i64 } %t127, ptr %a128 - store { ptr, i64, i64 } { ptr @.str.6698, i64 5, i64 0 }, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6700, i64 6, i64 0 }, ptr %a130 %t131 = call i64 @finch_str_find(ptr %a128, ptr %a130) %t132 = icmp sge i64 %t131, 0 - br label %logic.rend9940 -logic.rend9940: - br label %logic.end9939 -logic.end9939: - %t133 = phi i1 [ true, %logic.from9937 ], [ %t132, %logic.rend9940 ] - %t134 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 3 - store i1 %t133, ptr %t134 - %t135 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t135, ptr %a136 - store { ptr, i64, i64 } { ptr @.str.6700, i64 7, i64 0 }, ptr %a138 - %t139 = call i32 @finch_str_starts(ptr %a136, ptr %a138) - %t140 = icmp ne i32 %t139, 0 - br label %logic.from9941 -logic.from9941: - br i1 %t140, label %logic.end9943, label %logic.rhs9942 -logic.rhs9942: - %t141 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } %t141, ptr %a142 - store { ptr, i64, i64 } { ptr @.str.6702, i64 5, i64 0 }, ptr %a144 - %t145 = call i32 @finch_str_starts(ptr %a142, ptr %a144) - %t146 = icmp ne i32 %t145, 0 - br label %logic.rend9944 -logic.rend9944: - br label %logic.end9943 -logic.end9943: - %t147 = phi i1 [ true, %logic.from9941 ], [ %t146, %logic.rend9944 ] - %t148 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 4 - store i1 %t147, ptr %t148 - %t149 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t149, ptr %a150 - store { ptr, i64, i64 } { ptr @.str.6704, i64 7, i64 0 }, ptr %a152 - %t153 = call i32 @finch_str_starts(ptr %a150, ptr %a152) - %t154 = icmp ne i32 %t153, 0 - br label %logic.from9945 -logic.from9945: - br i1 %t154, label %logic.end9947, label %logic.rhs9946 -logic.rhs9946: - %t155 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t155, ptr %a156 - store { ptr, i64, i64 } { ptr @.str.6706, i64 5, i64 0 }, ptr %a158 - %t159 = call i32 @finch_str_starts(ptr %a156, ptr %a158) - %t160 = icmp ne i32 %t159, 0 - br label %logic.rend9948 -logic.rend9948: - br label %logic.end9947 -logic.end9947: - %t161 = phi i1 [ true, %logic.from9945 ], [ %t160, %logic.rend9948 ] - store i1 %t161, ptr %a162 - %t163 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t163, ptr %a164 - store { ptr, i64, i64 } { ptr @.str.6708, i64 5, i64 0 }, ptr %a166 - %t167 = call i64 @finch_str_find(ptr %a164, ptr %a166) - %t168 = icmp sge i64 %t167, 0 - br label %logic.from9949 -logic.from9949: - br i1 %t168, label %logic.end9951, label %logic.rhs9950 -logic.rhs9950: - %t169 = load { ptr, i64, i64 }, ptr %a3 - store { ptr, i64, i64 } %t169, ptr %a170 - store { ptr, i64, i64 } { ptr @.str.6710, i64 6, i64 0 }, ptr %a172 - %t173 = call i64 @finch_str_find(ptr %a170, ptr %a172) - %t174 = icmp sge i64 %t173, 0 - br label %logic.rend9952 -logic.rend9952: - br label %logic.end9951 -logic.end9951: - %t175 = phi i1 [ true, %logic.from9949 ], [ %t174, %logic.rend9952 ] - store i1 %t175, ptr %a176 - %t177 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - %t178 = load i1, ptr %t177 - br label %logic.from9953 -logic.from9953: - br i1 %t178, label %logic.end9955, label %logic.rhs9954 -logic.rhs9954: - %t179 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 3 - %t180 = load i1, ptr %t179 - %t181 = load i1, ptr %a176 - %t182 = icmp ne i1 %t180, %t181 - br label %logic.rend9956 -logic.rend9956: - br label %logic.end9955 -logic.end9955: - %t183 = phi i1 [ true, %logic.from9953 ], [ %t182, %logic.rend9956 ] - br label %logic.from9957 -logic.from9957: - br i1 %t183, label %logic.end9959, label %logic.rhs9958 -logic.rhs9958: - %t184 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 4 - %t185 = load i1, ptr %t184 - %t186 = load i1, ptr %a162 - %t187 = icmp ne i1 %t185, %t186 - br label %logic.rend9960 -logic.rend9960: - br label %logic.end9959 -logic.end9959: - %t188 = phi i1 [ true, %logic.from9957 ], [ %t187, %logic.rend9960 ] - %t189 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - store i1 %t188, ptr %t189 - %t190 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 6 - %t191 = load { ptr, i64, i64 }, ptr %t190 - store { ptr, i64, i64 } { ptr @.str.6711, i64 0, i64 0 }, ptr %t190 - store { ptr, i64, i64 } %t191, ptr %a192 - call void @finch_str_drop(ptr %a192) - %t193 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - %t194 = load i1, ptr %t193 - br i1 %t194, label %then9961, label %endif9963 -then9961: - %t195 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 6 - %t196 = load { ptr, i64, i64 }, ptr %t195 - store { ptr, i64, i64 } { ptr @.str.6712, i64 4, i64 0 }, ptr %t195 - store { ptr, i64, i64 } %t196, ptr %a197 - call void @finch_str_drop(ptr %a197) - br label %endif9963 -endif9963: - %t198 = extractvalue { ptr, i64, i64 } { ptr @.str.6713, i64 8, i64 0 }, 0 - %t199 = icmp eq ptr %t198, null - %t200 = select i1 %t199, ptr @.str.6714, ptr %t198 - %t201 = call ptr @getenv(ptr %t200) - store { ptr, i64, i64 } zeroinitializer, ptr %a202 - call void @finch_str_from_c(ptr %a202, ptr %t201) - %t203 = load { ptr, i64, i64 }, ptr %a202 - store { ptr, i64, i64 } %t203, ptr %a204 - call void @finch_str_copy(ptr %a205, ptr %a204) - %t206 = load { ptr, i64, i64 }, ptr %a205 - store { ptr, i64, i64 } %t206, ptr %a207 - %t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %a207, i32 0, i32 1 - %t209 = load i64, ptr %t208 - %t210 = icmp sgt i64 %t209, 0 - br i1 %t210, label %then9964, label %else9965 -then9964: - %t211 = load { ptr, i64, i64 }, ptr %a207 - %t212 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - store { ptr, i64, i64 } %t211, ptr %a213 - call void @finch_str_copy(ptr %a214, ptr %a213) - %t215 = load { ptr, i64, i64 }, ptr %a214 - %t216 = load { ptr, i64, i64 }, ptr %t212 - store { ptr, i64, i64 } %t215, ptr %t212 - store { ptr, i64, i64 } %t216, ptr %a217 - call void @finch_str_drop(ptr %a217) - br label %endif9966 -else9965: - %t218 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - %t219 = load i1, ptr %t218 - br label %logic.from9967 -logic.from9967: - br i1 %t219, label %logic.rhs9968, label %logic.end9969 -logic.rhs9968: - %t220 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - %t221 = load i1, ptr %t220 - br label %logic.rend9970 -logic.rend9970: - br label %logic.end9969 -logic.end9969: - %t222 = phi i1 [ false, %logic.from9967 ], [ %t221, %logic.rend9970 ] - br i1 %t222, label %then9971, label %else9972 -then9971: - %t223 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t224 = load { ptr, i64, i64 }, ptr %t223 - store { ptr, i64, i64 } { ptr @.str.6715, i64 22, i64 0 }, ptr %t223 - store { ptr, i64, i64 } %t224, ptr %a225 - call void @finch_str_drop(ptr %a225) - br label %endif9973 -else9972: - %t226 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - %t227 = load i1, ptr %t226 + br label %logic.rend9949 +logic.rend9949: + br label %logic.end9948 +logic.end9948: + %t133 = phi i1 [ true, %logic.from9946 ], [ %t132, %logic.rend9949 ] + br label %logic.from9950 +logic.from9950: + br i1 %t133, label %logic.end9952, label %logic.rhs9951 +logic.rhs9951: + %t134 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t134, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.6702, i64 5, i64 0 }, ptr %a137 + %t138 = call i64 @finch_str_find(ptr %a135, ptr %a137) + %t139 = icmp sge i64 %t138, 0 + br label %logic.rend9953 +logic.rend9953: + br label %logic.end9952 +logic.end9952: + %t140 = phi i1 [ true, %logic.from9950 ], [ %t139, %logic.rend9953 ] + %t141 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + store i1 %t140, ptr %t141 + %t142 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.6704, i64 7, i64 0 }, ptr %a145 + %t146 = call i32 @finch_str_starts(ptr %a143, ptr %a145) + %t147 = icmp ne i32 %t146, 0 + br label %logic.from9954 +logic.from9954: + br i1 %t147, label %logic.end9956, label %logic.rhs9955 +logic.rhs9955: + %t148 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.6706, i64 5, i64 0 }, ptr %a151 + %t152 = call i32 @finch_str_starts(ptr %a149, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + br label %logic.rend9957 +logic.rend9957: + br label %logic.end9956 +logic.end9956: + %t154 = phi i1 [ true, %logic.from9954 ], [ %t153, %logic.rend9957 ] + %t155 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + store i1 %t154, ptr %t155 + %t156 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t156, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.6708, i64 7, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_starts(ptr %a157, ptr %a159) + %t161 = icmp ne i32 %t160, 0 + br label %logic.from9958 +logic.from9958: + br i1 %t161, label %logic.end9960, label %logic.rhs9959 +logic.rhs9959: + %t162 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t162, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.6710, i64 5, i64 0 }, ptr %a165 + %t166 = call i32 @finch_str_starts(ptr %a163, ptr %a165) + %t167 = icmp ne i32 %t166, 0 + br label %logic.rend9961 +logic.rend9961: + br label %logic.end9960 +logic.end9960: + %t168 = phi i1 [ true, %logic.from9958 ], [ %t167, %logic.rend9961 ] + store i1 %t168, ptr %a169 + %t170 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.6712, i64 5, i64 0 }, ptr %a173 + %t174 = call i64 @finch_str_find(ptr %a171, ptr %a173) + %t175 = icmp sge i64 %t174, 0 + br label %logic.from9962 +logic.from9962: + br i1 %t175, label %logic.end9964, label %logic.rhs9963 +logic.rhs9963: + %t176 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.6714, i64 6, i64 0 }, ptr %a179 + %t180 = call i64 @finch_str_find(ptr %a177, ptr %a179) + %t181 = icmp sge i64 %t180, 0 + br label %logic.rend9965 +logic.rend9965: + br label %logic.end9964 +logic.end9964: + %t182 = phi i1 [ true, %logic.from9962 ], [ %t181, %logic.rend9965 ] + store i1 %t182, ptr %a183 + %t184 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } { ptr @.str.6716, i64 7, i64 0 }, ptr %a187 + %t188 = call i64 @finch_str_find(ptr %a185, ptr %a187) + %t189 = icmp sge i64 %t188, 0 + br label %logic.from9966 +logic.from9966: + br i1 %t189, label %logic.end9968, label %logic.rhs9967 +logic.rhs9967: + %t190 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t190, ptr %a191 + store { ptr, i64, i64 } { ptr @.str.6718, i64 5, i64 0 }, ptr %a193 + %t194 = call i64 @finch_str_find(ptr %a191, ptr %a193) + %t195 = icmp sge i64 %t194, 0 + br label %logic.rend9969 +logic.rend9969: + br label %logic.end9968 +logic.end9968: + %t196 = phi i1 [ true, %logic.from9966 ], [ %t195, %logic.rend9969 ] + br label %logic.from9970 +logic.from9970: + br i1 %t196, label %logic.end9972, label %logic.rhs9971 +logic.rhs9971: + %t197 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t197, ptr %a198 + store { ptr, i64, i64 } { ptr @.str.6720, i64 4, i64 0 }, ptr %a200 + %t201 = call i64 @finch_str_find(ptr %a198, ptr %a200) + %t202 = icmp sge i64 %t201, 0 + br label %logic.rend9973 +logic.rend9973: + br label %logic.end9972 +logic.end9972: + %t203 = phi i1 [ true, %logic.from9970 ], [ %t202, %logic.rend9973 ] + store i1 %t203, ptr %a204 + %t205 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t206 = load i1, ptr %t205 + %t207 = load i1, ptr %a204 + %t208 = icmp ne i1 %t206, %t207 br label %logic.from9974 logic.from9974: - br i1 %t227, label %logic.rhs9975, label %logic.end9976 + br i1 %t208, label %logic.end9976, label %logic.rhs9975 logic.rhs9975: - %t228 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 4 - %t229 = load i1, ptr %t228 + %t209 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t210 = load i1, ptr %t209 + %t211 = load i1, ptr %a183 + %t212 = icmp ne i1 %t210, %t211 br label %logic.rend9977 logic.rend9977: br label %logic.end9976 logic.end9976: - %t230 = phi i1 [ false, %logic.from9974 ], [ %t229, %logic.rend9977 ] + %t213 = phi i1 [ true, %logic.from9974 ], [ %t212, %logic.rend9977 ] br label %logic.from9978 logic.from9978: - br i1 %t230, label %logic.rhs9979, label %logic.end9980 + br i1 %t213, label %logic.end9980, label %logic.rhs9979 logic.rhs9979: - %t231 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 3 - %t232 = load i1, ptr %t231 - %t233 = xor i1 %t232, true + %t214 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t215 = load i1, ptr %t214 + %t216 = load i1, ptr %a169 + %t217 = icmp ne i1 %t215, %t216 br label %logic.rend9981 logic.rend9981: br label %logic.end9980 logic.end9980: - %t234 = phi i1 [ false, %logic.from9978 ], [ %t233, %logic.rend9981 ] - br i1 %t234, label %then9982, label %else9983 + %t218 = phi i1 [ true, %logic.from9978 ], [ %t217, %logic.rend9981 ] + %t219 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + store i1 %t218, ptr %t219 + %t220 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t221 = load { ptr, i64, i64 }, ptr %t220 + store { ptr, i64, i64 } { ptr @.str.6721, i64 0, i64 0 }, ptr %t220 + store { ptr, i64, i64 } %t221, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t224 = load i1, ptr %t223 + br i1 %t224, label %then9982, label %endif9984 then9982: - %t235 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t236 = load { ptr, i64, i64 }, ptr %t235 - store { ptr, i64, i64 } { ptr @.str.6716, i64 21, i64 0 }, ptr %t235 - store { ptr, i64, i64 } %t236, ptr %a237 - call void @finch_str_drop(ptr %a237) + %t225 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t226 = load { ptr, i64, i64 }, ptr %t225 + store { ptr, i64, i64 } { ptr @.str.6722, i64 4, i64 0 }, ptr %t225 + store { ptr, i64, i64 } %t226, ptr %a227 + call void @finch_str_drop(ptr %a227) br label %endif9984 -else9983: - %t238 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - %t239 = load i1, ptr %t238 - br i1 %t239, label %then9985, label %else9986 +endif9984: + %t228 = extractvalue { ptr, i64, i64 } { ptr @.str.6723, i64 8, i64 0 }, 0 + %t229 = icmp eq ptr %t228, null + %t230 = select i1 %t229, ptr @.str.6724, ptr %t228 + %t231 = call ptr @getenv(ptr %t230) + store { ptr, i64, i64 } zeroinitializer, ptr %a232 + call void @finch_str_from_c(ptr %a232, ptr %t231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t233, ptr %a234 + call void @finch_str_copy(ptr %a235, ptr %a234) + %t236 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t236, ptr %a237 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %a237, i32 0, i32 1 + %t239 = load i64, ptr %t238 + %t240 = icmp sgt i64 %t239, 0 + br i1 %t240, label %then9985, label %else9986 then9985: - %t240 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6717, i64 15, i64 0 }, ptr %a242 - store { ptr, i64, i64 } %t240, ptr %a243 - call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) - %t244 = load { ptr, i64, i64 }, ptr %a241 - %t245 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t246 = load { ptr, i64, i64 }, ptr %t245 - store { ptr, i64, i64 } %t244, ptr %t245 + %t241 = load { ptr, i64, i64 }, ptr %a237 + %t242 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + store { ptr, i64, i64 } %t241, ptr %a243 + call void @finch_str_copy(ptr %a244, ptr %a243) + %t245 = load { ptr, i64, i64 }, ptr %a244 + %t246 = load { ptr, i64, i64 }, ptr %t242 + store { ptr, i64, i64 } %t245, ptr %t242 store { ptr, i64, i64 } %t246, ptr %a247 call void @finch_str_drop(ptr %a247) br label %endif9987 else9986: - %t248 = call { ptr, i64, i64 } @finch.host.pathSeparator() - store { ptr, i64, i64 } %t248, ptr %a249 - store { ptr, i64, i64 } { ptr @.str.6718, i64 1, i64 0 }, ptr %a250 - %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) - %t252 = icmp ne i32 %t251, 0 - store { ptr, i64, i64 } %t248, ptr %a253 - call void @finch_str_drop(ptr %a253) - br i1 %t252, label %then9988, label %else9989 -then9988: - %t254 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t255 = load { ptr, i64, i64 }, ptr %t254 - store { ptr, i64, i64 } { ptr @.str.6719, i64 5, i64 0 }, ptr %t254 - store { ptr, i64, i64 } %t255, ptr %a256 - call void @finch_str_drop(ptr %a256) - br label %endif9990 -else9989: - %t257 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 7 - %t258 = load { ptr, i64, i64 }, ptr %t257 - store { ptr, i64, i64 } { ptr @.str.6720, i64 2, i64 0 }, ptr %t257 - store { ptr, i64, i64 } %t258, ptr %a259 - call void @finch_str_drop(ptr %a259) - br label %endif9990 -endif9990: - br label %endif9987 -endif9987: - br label %endif9984 -endif9984: - br label %endif9973 -endif9973: - br label %endif9966 -endif9966: - %t260 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 - %t261 = load i1, ptr %t260 - br label %logic.from9991 -logic.from9991: - br i1 %t261, label %logic.rhs9992, label %logic.end9993 -logic.rhs9992: - %t262 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 1 - %t263 = load i1, ptr %t262 - br label %logic.rend9994 -logic.rend9994: - br label %logic.end9993 -logic.end9993: - %t264 = phi i1 [ false, %logic.from9991 ], [ %t263, %logic.rend9994 ] - br i1 %t264, label %then9995, label %else9996 -then9995: - %t265 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 8 + %t248 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t249 = load i1, ptr %t248 + br label %logic.from9988 +logic.from9988: + br i1 %t249, label %logic.rhs9989, label %logic.end9990 +logic.rhs9989: + %t250 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t251 = load i1, ptr %t250 + br label %logic.rend9991 +logic.rend9991: + br label %logic.end9990 +logic.end9990: + %t252 = phi i1 [ false, %logic.from9988 ], [ %t251, %logic.rend9991 ] + br i1 %t252, label %then9992, label %else9993 +then9992: + %t253 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t254 = load { ptr, i64, i64 }, ptr %t253 + store { ptr, i64, i64 } { ptr @.str.6725, i64 22, i64 0 }, ptr %t253 + store { ptr, i64, i64 } %t254, ptr %a255 + call void @finch_str_drop(ptr %a255) + br label %endif9994 +else9993: + %t256 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t257 = load i1, ptr %t256 + br label %logic.from9995 +logic.from9995: + br i1 %t257, label %logic.rhs9996, label %logic.end9997 +logic.rhs9996: + %t258 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t259 = load i1, ptr %t258 + br label %logic.rend9998 +logic.rend9998: + br label %logic.end9997 +logic.end9997: + %t260 = phi i1 [ false, %logic.from9995 ], [ %t259, %logic.rend9998 ] + br label %logic.from9999 +logic.from9999: + br i1 %t260, label %logic.rhs10000, label %logic.end10001 +logic.rhs10000: + %t261 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t262 = load i1, ptr %t261 + %t263 = xor i1 %t262, true + br label %logic.rend10002 +logic.rend10002: + br label %logic.end10001 +logic.end10001: + %t264 = phi i1 [ false, %logic.from9999 ], [ %t263, %logic.rend10002 ] + br i1 %t264, label %then10003, label %else10004 +then10003: + %t265 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 %t266 = load { ptr, i64, i64 }, ptr %t265 - store { ptr, i64, i64 } { ptr @.str.6721, i64 5, i64 0 }, ptr %t265 + store { ptr, i64, i64 } { ptr @.str.6726, i64 21, i64 0 }, ptr %t265 store { ptr, i64, i64 } %t266, ptr %a267 call void @finch_str_drop(ptr %a267) - br label %endif9997 -else9996: - %t268 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 5 + br label %endif10005 +else10004: + %t268 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 %t269 = load i1, ptr %t268 - br label %logic.from9998 -logic.from9998: - br i1 %t269, label %logic.rhs9999, label %logic.end10000 -logic.rhs9999: - %t270 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 4 - %t271 = load i1, ptr %t270 - br label %logic.rend10001 -logic.rend10001: - br label %logic.end10000 -logic.end10000: - %t272 = phi i1 [ false, %logic.from9998 ], [ %t271, %logic.rend10001 ] - br label %logic.from10002 -logic.from10002: - br i1 %t272, label %logic.rhs10003, label %logic.end10004 -logic.rhs10003: - %t273 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 3 - %t274 = load i1, ptr %t273 - %t275 = xor i1 %t274, true - br label %logic.rend10005 -logic.rend10005: - br label %logic.end10004 -logic.end10004: - %t276 = phi i1 [ false, %logic.from10002 ], [ %t275, %logic.rend10005 ] - br i1 %t276, label %then10006, label %endif10008 + br i1 %t269, label %then10006, label %else10007 then10006: - %t277 = getelementptr inbounds %S.platform.Target, ptr %a78, i32 0, i32 8 - %t278 = load { ptr, i64, i64 }, ptr %t277 - store { ptr, i64, i64 } { ptr @.str.6722, i64 13, i64 0 }, ptr %t277 + %t270 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6727, i64 15, i64 0 }, ptr %a272 + store { ptr, i64, i64 } %t270, ptr %a273 + call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a271 + %t275 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t276 = load { ptr, i64, i64 }, ptr %t275 + store { ptr, i64, i64 } %t274, ptr %t275 + store { ptr, i64, i64 } %t276, ptr %a277 + call void @finch_str_drop(ptr %a277) + br label %endif10008 +else10007: + %t278 = call { ptr, i64, i64 } @finch.host.pathSeparator() store { ptr, i64, i64 } %t278, ptr %a279 - call void @finch_str_drop(ptr %a279) + store { ptr, i64, i64 } { ptr @.str.6728, i64 1, i64 0 }, ptr %a280 + %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) + %t282 = icmp ne i32 %t281, 0 + store { ptr, i64, i64 } %t278, ptr %a283 + call void @finch_str_drop(ptr %a283) + br i1 %t282, label %then10009, label %else10010 +then10009: + %t284 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } { ptr @.str.6729, i64 5, i64 0 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + br label %endif10011 +else10010: + %t287 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t288 = load { ptr, i64, i64 }, ptr %t287 + store { ptr, i64, i64 } { ptr @.str.6730, i64 2, i64 0 }, ptr %t287 + store { ptr, i64, i64 } %t288, ptr %a289 + call void @finch_str_drop(ptr %a289) + br label %endif10011 +endif10011: br label %endif10008 endif10008: - br label %endif9997 -endif9997: - %t280 = load %S.platform.Target, ptr %a78 - call void @finch_str_drop(ptr %a207) + br label %endif10005 +endif10005: + br label %endif9994 +endif9994: + br label %endif9987 +endif9987: + %t290 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t291 = load i1, ptr %t290 + br label %logic.from10012 +logic.from10012: + br i1 %t291, label %logic.rhs10013, label %logic.end10014 +logic.rhs10013: + %t292 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t293 = load i1, ptr %t292 + br label %logic.rend10015 +logic.rend10015: + br label %logic.end10014 +logic.end10014: + %t294 = phi i1 [ false, %logic.from10012 ], [ %t293, %logic.rend10015 ] + br i1 %t294, label %then10016, label %else10017 +then10016: + %t295 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } { ptr @.str.6731, i64 5, i64 0 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_drop(ptr %a297) + br label %endif10018 +else10017: + %t298 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t299 = load i1, ptr %t298 + br label %logic.from10019 +logic.from10019: + br i1 %t299, label %logic.rhs10020, label %logic.end10021 +logic.rhs10020: + %t300 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t301 = load i1, ptr %t300 + br label %logic.rend10022 +logic.rend10022: + br label %logic.end10021 +logic.end10021: + %t302 = phi i1 [ false, %logic.from10019 ], [ %t301, %logic.rend10022 ] + br label %logic.from10023 +logic.from10023: + br i1 %t302, label %logic.rhs10024, label %logic.end10025 +logic.rhs10024: + %t303 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t304 = load i1, ptr %t303 + %t305 = xor i1 %t304, true + br label %logic.rend10026 +logic.rend10026: + br label %logic.end10025 +logic.end10025: + %t306 = phi i1 [ false, %logic.from10023 ], [ %t305, %logic.rend10026 ] + br i1 %t306, label %then10027, label %endif10029 +then10027: + %t307 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t308 = load { ptr, i64, i64 }, ptr %t307 + store { ptr, i64, i64 } { ptr @.str.6732, i64 13, i64 0 }, ptr %t307 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10029 +endif10029: + br label %endif10018 +endif10018: + %t310 = load %S.platform.Target, ptr %a85 + call void @finch_str_drop(ptr %a237) call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a3) - ret %S.platform.Target %t280 + ret %S.platform.Target %t310 } define internal i1 @finch.platform.charIsSigned(%S.platform.Target %p0) { @@ -102784,28 +102903,28 @@ entry: %t2 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 4 %t3 = load i1, ptr %t2 %t4 = xor i1 %t3, true - br label %logic.from10009 -logic.from10009: - br i1 %t4, label %logic.end10011, label %logic.rhs10010 -logic.rhs10010: + br label %logic.from10030 +logic.from10030: + br i1 %t4, label %logic.end10032, label %logic.rhs10031 +logic.rhs10031: %t5 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 3 %t6 = load i1, ptr %t5 - br label %logic.rend10012 -logic.rend10012: - br label %logic.end10011 -logic.end10011: - %t7 = phi i1 [ true, %logic.from10009 ], [ %t6, %logic.rend10012 ] - br label %logic.from10013 -logic.from10013: - br i1 %t7, label %logic.end10015, label %logic.rhs10014 -logic.rhs10014: + br label %logic.rend10033 +logic.rend10033: + br label %logic.end10032 +logic.end10032: + %t7 = phi i1 [ true, %logic.from10030 ], [ %t6, %logic.rend10033 ] + br label %logic.from10034 +logic.from10034: + br i1 %t7, label %logic.end10036, label %logic.rhs10035 +logic.rhs10035: %t8 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 1 %t9 = load i1, ptr %t8 - br label %logic.rend10016 -logic.rend10016: - br label %logic.end10015 -logic.end10015: - %t10 = phi i1 [ true, %logic.from10013 ], [ %t9, %logic.rend10016 ] + br label %logic.rend10037 +logic.rend10037: + br label %logic.end10036 +logic.end10036: + %t10 = phi i1 [ true, %logic.from10034 ], [ %t9, %logic.rend10037 ] ret i1 %t10 } @@ -102824,14 +102943,14 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 store i32 2166136261, ptr %a2 store i64 0, ptr %a3 - br label %each.cond10017 -each.cond10017: + br label %each.cond10038 +each.cond10038: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body10018, label %each.end10020 -each.body10018: + br i1 %t7, label %each.body10039, label %each.end10041 +each.body10039: %t8 = load ptr, ptr %a1 %t9 = getelementptr inbounds i8, ptr %t8, i64 %t6 %t10 = load i8, ptr %t9 @@ -102842,22 +102961,22 @@ each.body10018: %t15 = xor i32 %t12, %t14 %t16 = mul i32 %t15, 16777619 store i32 %t16, ptr %a2 - br label %each.step10019 -each.step10019: + br label %each.step10040 +each.step10040: %t17 = load i64, ptr %a3 %t18 = add i64 %t17, 1 store i64 %t18, ptr %a3 - br label %each.cond10017 -each.end10020: - store { ptr, i64, i64 } { ptr @.str.6723, i64 16, i64 0 }, ptr %a19 + br label %each.cond10038 +each.end10041: + store { ptr, i64, i64 } { ptr @.str.6733, i64 16, i64 0 }, ptr %a19 store { ptr, i64, i64 } zeroinitializer, ptr %a20 store i64 0, ptr %a21 - br label %for.cond10021 -for.cond10021: + br label %for.cond10042 +for.cond10042: %t22 = load i64, ptr %a21 %t23 = icmp slt i64 %t22, 8 - br i1 %t23, label %for.body10022, label %for.end10024 -for.body10022: + br i1 %t23, label %for.body10043, label %for.end10045 +for.body10043: %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 %t25 = load i32, ptr %a2 %t26 = load i64, ptr %a21 @@ -102870,11 +102989,11 @@ for.body10022: %t33 = load { ptr, i64, i64 }, ptr %a19 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range10025, label %inrange10026 -range10025: - call void @finch_panic_index(ptr @.str.6724, i64 16, i64 %t32, i64 %t34) + br i1 %t35, label %range10046, label %inrange10047 +range10046: + call void @finch_panic_index(ptr @.str.6734, i64 16, i64 %t32, i64 %t34) unreachable -inrange10026: +inrange10047: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 @@ -102887,15 +103006,15 @@ inrange10026: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 store { ptr, i64, i64 } %t40, ptr %t44 store i64 %t42, ptr %t24 - br label %for.step10023 -for.step10023: + br label %for.step10044 +for.step10044: %t45 = load i64, ptr %a21 %t46 = add i64 %t45, 1 store i64 %t46, ptr %a21 - br label %for.cond10021 -for.end10024: + br label %for.cond10042 +for.end10045: %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6725, i64 0, i64 0 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.6735, i64 0, i64 0 }, ptr %a48 call void @finch_str_join(ptr %a49, ptr %a20, ptr %a48) %t50 = load { ptr, i64, i64 }, ptr %a49 call void @finch.drop.arr_str(ptr %a20) @@ -102982,37 +103101,37 @@ entry: store %S.platform.Target %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.6727, i64 10, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6737, i64 10, i64 0 }, ptr %a6 %t7 = call i32 @finch_str_ends(ptr %a4, ptr %a6) %t8 = icmp ne i32 %t7, 0 - br i1 %t8, label %then10027, label %endif10029 -then10027: + br i1 %t8, label %then10048, label %endif10050 +then10048: %t9 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t9, ptr %a10 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = sub i64 %t13, 10 - call void @finch_str_sub(ptr %a11, ptr %a10, i64 0, i64 %t14, ptr @.str.6729, i64 28) + call void @finch_str_sub(ptr %a11, ptr %a10, i64 0, i64 %t14, ptr @.str.6739, i64 28) %t15 = load { ptr, i64, i64 }, ptr %a11 %t16 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t15) store { ptr, i64, i64 } %t15, ptr %a17 call void @finch_str_drop(ptr %a17) - store { ptr, i64, i64 } { ptr @.str.6728, i64 11, i64 0 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6738, i64 11, i64 0 }, ptr %a19 store { ptr, i64, i64 } %t16, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t16, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a18 ret { ptr, i64, i64 } %t22 -endif10029: +endif10050: %t23 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t24 = load i1, ptr %t23 %t25 = xor i1 %t24, true - br i1 %t25, label %then10030, label %endif10032 -then10030: + br i1 %t25, label %then10051, label %endif10053 +then10051: %t26 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t26, ptr %a28 - store { ptr, i64, i64 } { ptr @.str.6730, i64 17, i64 0 }, ptr %a29 + store { ptr, i64, i64 } { ptr @.str.6740, i64 17, i64 0 }, ptr %a29 call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) store { ptr, i64, i64 } %t26, ptr %a30 call void @finch_str_drop(ptr %a30) @@ -103029,7 +103148,7 @@ then10030: call void @finch_str_drop(ptr %a39) %t40 = load { ptr, i64, i64 }, ptr %a35 store { ptr, i64, i64 } %t40, ptr %a42 - store { ptr, i64, i64 } { ptr @.str.6731, i64 4, i64 0 }, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.6741, i64 4, i64 0 }, ptr %a43 call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) @@ -103037,14 +103156,14 @@ then10030: store { ptr, i64, i64 } %t45, ptr %a46 %t47 = load { ptr, i64, i64 }, ptr %a1 %t48 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t47) - store { ptr, i64, i64 } { ptr @.str.6732, i64 18, i64 0 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6742, i64 18, i64 0 }, ptr %a50 store { ptr, i64, i64 } %t48, ptr %a51 call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) store { ptr, i64, i64 } %t48, ptr %a52 call void @finch_str_drop(ptr %a52) %t53 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t53, ptr %a55 - store { ptr, i64, i64 } { ptr @.str.6733, i64 3, i64 0 }, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.6743, i64 3, i64 0 }, ptr %a56 call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) store { ptr, i64, i64 } %t53, ptr %a57 call void @finch_str_drop(ptr %a57) @@ -103060,7 +103179,7 @@ then10030: call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a61 store { ptr, i64, i64 } %t66, ptr %a68 - store { ptr, i64, i64 } { ptr @.str.6734, i64 4, i64 0 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.6744, i64 4, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) @@ -103080,21 +103199,21 @@ then10030: store i64 %t79, ptr %a81 %t82 = load i64, ptr %a81 %t83 = icmp eq i64 %t82, 0 - br label %logic.from10033 -logic.from10033: - br i1 %t83, label %logic.rhs10034, label %logic.end10035 -logic.rhs10034: + br label %logic.from10054 +logic.from10054: + br i1 %t83, label %logic.rhs10055, label %logic.end10056 +logic.rhs10055: %t84 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t84, ptr %a85 %t86 = call i32 @finch_file_exists(ptr %a85) %t87 = icmp ne i32 %t86, 0 - br label %logic.rend10036 -logic.rend10036: - br label %logic.end10035 -logic.end10035: - %t88 = phi i1 [ false, %logic.from10033 ], [ %t87, %logic.rend10036 ] - br i1 %t88, label %then10037, label %endif10039 -then10037: + br label %logic.rend10057 +logic.rend10057: + br label %logic.end10056 +logic.end10056: + %t88 = phi i1 [ false, %logic.from10054 ], [ %t87, %logic.rend10057 ] + br i1 %t88, label %then10058, label %endif10060 +then10058: %t89 = load { ptr, i64, i64 }, ptr %a46 store { ptr, i64, i64 } %t89, ptr %a90 store { ptr, i64, i64 } zeroinitializer, ptr %a91 @@ -103103,17 +103222,17 @@ then10037: %t94 = icmp eq i32 %t93, 0 %t95 = load { ptr, i64, i64 }, ptr %a92 %t96 = load { ptr, i64, i64 }, ptr %a91 - br i1 %t94, label %or.failed10040, label %or.ok10041 -or.failed10040: + br i1 %t94, label %or.failed10061, label %or.ok10062 +or.failed10061: store { ptr, i64, i64 } %t95, ptr %a97 call void @finch_str_drop(ptr %a97) - br label %or.bend10042 -or.bend10042: - br label %or.end10043 -or.ok10041: - br label %or.end10043 -or.end10043: - %t98 = phi { ptr, i64, i64 } [ { ptr @.str.6735, i64 0, i64 0 }, %or.bend10042 ], [ %t96, %or.ok10041 ] + br label %or.bend10063 +or.bend10063: + br label %or.end10064 +or.ok10062: + br label %or.end10064 +or.end10064: + %t98 = phi { ptr, i64, i64 } [ { ptr @.str.6745, i64 0, i64 0 }, %or.bend10063 ], [ %t96, %or.ok10062 ] store { ptr, i64, i64 } %t98, ptr %a99 call void @finch_str_trim(ptr %a100, ptr %a99) %t101 = load { ptr, i64, i64 }, ptr %a100 @@ -103125,20 +103244,20 @@ or.end10043: %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %a103, i32 0, i32 1 %t106 = load i64, ptr %t105 %t107 = icmp sgt i64 %t106, 0 - br i1 %t107, label %then10044, label %endif10046 -then10044: + br i1 %t107, label %then10065, label %endif10067 +then10065: %t108 = load { ptr, i64, i64 }, ptr %a103 call void @finch_str_drop(ptr %a46) ret { ptr, i64, i64 } %t108 -endif10046: +endif10067: call void @finch_str_drop(ptr %a103) - br label %endif10039 -endif10039: + br label %endif10060 +endif10060: call void @finch_str_drop(ptr %a46) - br label %endif10032 -endif10032: + br label %endif10053 +endif10053: %t109 = load { ptr, i64, i64 }, ptr %a1 - store { ptr, i64, i64 } { ptr @.str.6737, i64 2, i64 0 }, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.6747, i64 2, i64 0 }, ptr %a111 store { ptr, i64, i64 } %t109, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 @@ -103182,22 +103301,22 @@ entry: store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6739, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.6749, i64 1, i64 0 }, ptr %a10 %t11 = call i64 @finch_str_find(ptr %a8, ptr %a10) store i64 %t11, ptr %a12 - br label %while.cond10047 -while.cond10047: + br label %while.cond10068 +while.cond10068: %t13 = load i64, ptr %a12 %t14 = icmp sge i64 %t13, 0 - br i1 %t14, label %while.body10048, label %while.end10049 -while.body10048: + br i1 %t14, label %while.body10069, label %while.end10070 +while.body10069: %t15 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t15, ptr %a16 %t18 = load i64, ptr %a12 %t19 = add i64 %t18, 1 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t21 = load i64, ptr %t20 - call void @finch_str_sub(ptr %a17, ptr %a16, i64 %t19, i64 %t21, ptr @.str.6740, i64 49) + call void @finch_str_sub(ptr %a17, ptr %a16, i64 %t19, i64 %t21, ptr @.str.6750, i64 49) %t22 = load { ptr, i64, i64 }, ptr %a17 %t23 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t22, ptr %a6 @@ -103205,126 +103324,126 @@ while.body10048: call void @finch_str_drop(ptr %a24) %t25 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t25, ptr %a26 - store { ptr, i64, i64 } { ptr @.str.6742, i64 1, i64 0 }, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.6752, i64 1, i64 0 }, ptr %a28 %t29 = call i64 @finch_str_find(ptr %a26, ptr %a28) store i64 %t29, ptr %a12 - br label %while.cond10047 -while.end10049: + br label %while.cond10068 +while.end10070: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t31 = load i64, ptr %t30 store i64 %t31, ptr %a32 %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t34 = load i64, ptr %t33 store i64 0, ptr %a35 - br label %for.cond10050 -for.cond10050: + br label %for.cond10071 +for.cond10071: %t36 = load i64, ptr %a35 %t37 = icmp slt i64 %t36, %t34 - br i1 %t37, label %for.body10051, label %for.end10053 -for.body10051: + br i1 %t37, label %for.body10072, label %for.end10074 +for.body10072: %t38 = load i64, ptr %a35 %t39 = load { ptr, i64, i64 }, ptr %a6 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range10054, label %inrange10055 -range10054: - call void @finch_panic_index(ptr @.str.6743, i64 54, i64 %t38, i64 %t40) + br i1 %t41, label %range10075, label %inrange10076 +range10075: + call void @finch_panic_index(ptr @.str.6753, i64 54, i64 %t38, i64 %t40) unreachable -inrange10055: +inrange10076: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 %t44 = load i8, ptr %t43 %t45 = icmp eq i8 %t44, 46 - br i1 %t45, label %then10056, label %endif10058 -then10056: + br i1 %t45, label %then10077, label %endif10079 +then10077: %t46 = load i64, ptr %a35 store i64 %t46, ptr %a32 - br label %endif10058 -endif10058: - br label %for.step10052 -for.step10052: + br label %endif10079 +endif10079: + br label %for.step10073 +for.step10073: %t47 = load i64, ptr %a35 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a35 - br label %for.cond10050 -for.end10053: + br label %for.cond10071 +for.end10074: %t49 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t49, ptr %a50 %t52 = load i64, ptr %a32 - call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6744, i64 58) + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6754, i64 58) %t53 = load { ptr, i64, i64 }, ptr %a51 %t54 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t53, ptr %a6 store { ptr, i64, i64 } %t54, ptr %a55 call void @finch_str_drop(ptr %a55) - br label %while.cond10059 -while.cond10059: + br label %while.cond10080 +while.cond10080: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t57 = load i64, ptr %t56 %t58 = icmp sgt i64 %t57, 0 - br label %logic.from10062 -logic.from10062: - br i1 %t58, label %logic.rhs10063, label %logic.end10064 -logic.rhs10063: + br label %logic.from10083 +logic.from10083: + br i1 %t58, label %logic.rhs10084, label %logic.end10085 +logic.rhs10084: %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t60 = load i64, ptr %t59 %t61 = sub i64 %t60, 1 %t62 = load { ptr, i64, i64 }, ptr %a6 %t63 = extractvalue { ptr, i64, i64 } %t62, 1 %t64 = icmp uge i64 %t61, %t63 - br i1 %t64, label %range10065, label %inrange10066 -range10065: - call void @finch_panic_index(ptr @.str.6745, i64 59, i64 %t61, i64 %t63) + br i1 %t64, label %range10086, label %inrange10087 +range10086: + call void @finch_panic_index(ptr @.str.6755, i64 59, i64 %t61, i64 %t63) unreachable -inrange10066: +inrange10087: %t65 = extractvalue { ptr, i64, i64 } %t62, 0 %t66 = getelementptr inbounds i8, ptr %t65, i64 %t61 %t67 = load i8, ptr %t66 %t68 = icmp uge i8 %t67, 48 - br label %logic.rend10067 -logic.rend10067: - br label %logic.end10064 -logic.end10064: - %t69 = phi i1 [ false, %logic.from10062 ], [ %t68, %logic.rend10067 ] - br label %logic.from10068 -logic.from10068: - br i1 %t69, label %logic.rhs10069, label %logic.end10070 -logic.rhs10069: + br label %logic.rend10088 +logic.rend10088: + br label %logic.end10085 +logic.end10085: + %t69 = phi i1 [ false, %logic.from10083 ], [ %t68, %logic.rend10088 ] + br label %logic.from10089 +logic.from10089: + br i1 %t69, label %logic.rhs10090, label %logic.end10091 +logic.rhs10090: %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t71 = load i64, ptr %t70 %t72 = sub i64 %t71, 1 %t73 = load { ptr, i64, i64 }, ptr %a6 %t74 = extractvalue { ptr, i64, i64 } %t73, 1 %t75 = icmp uge i64 %t72, %t74 - br i1 %t75, label %range10071, label %inrange10072 -range10071: - call void @finch_panic_index(ptr @.str.6746, i64 59, i64 %t72, i64 %t74) + br i1 %t75, label %range10092, label %inrange10093 +range10092: + call void @finch_panic_index(ptr @.str.6756, i64 59, i64 %t72, i64 %t74) unreachable -inrange10072: +inrange10093: %t76 = extractvalue { ptr, i64, i64 } %t73, 0 %t77 = getelementptr inbounds i8, ptr %t76, i64 %t72 %t78 = load i8, ptr %t77 %t79 = icmp ule i8 %t78, 57 - br label %logic.rend10073 -logic.rend10073: - br label %logic.end10070 -logic.end10070: - %t80 = phi i1 [ false, %logic.from10068 ], [ %t79, %logic.rend10073 ] - br i1 %t80, label %while.body10060, label %while.end10061 -while.body10060: + br label %logic.rend10094 +logic.rend10094: + br label %logic.end10091 +logic.end10091: + %t80 = phi i1 [ false, %logic.from10089 ], [ %t79, %logic.rend10094 ] + br i1 %t80, label %while.body10081, label %while.end10082 +while.body10081: %t81 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t81, ptr %a82 %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t85 = load i64, ptr %t84 %t86 = sub i64 %t85, 1 - call void @finch_str_sub(ptr %a83, ptr %a82, i64 0, i64 %t86, ptr @.str.6747, i64 60) + call void @finch_str_sub(ptr %a83, ptr %a82, i64 0, i64 %t86, ptr @.str.6757, i64 60) %t87 = load { ptr, i64, i64 }, ptr %a83 %t88 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t87, ptr %a6 store { ptr, i64, i64 } %t88, ptr %a89 call void @finch_str_drop(ptr %a89) - br label %while.cond10059 -while.end10061: + br label %while.cond10080 +while.end10082: %t90 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t90, ptr %a91 call void @finch_str_lower(ptr %a92, ptr %a91) @@ -103346,10 +103465,10 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t3 = load i64, ptr %t2 %t4 = icmp sgt i64 %t3, 0 - br label %logic.from10074 -logic.from10074: - br i1 %t4, label %logic.rhs10075, label %logic.end10076 -logic.rhs10075: + br label %logic.from10095 +logic.from10095: + br i1 %t4, label %logic.rhs10096, label %logic.end10097 +logic.rhs10096: %t5 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a1 @@ -103357,37 +103476,37 @@ logic.rhs10075: %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 - br label %find.cond10077 -find.cond10077: + br label %find.cond10098 +find.cond10098: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 - br i1 %t13, label %find.body10078, label %find.end10081 -find.body10078: + br i1 %t13, label %find.body10099, label %find.end10102 +find.body10099: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %find.hit10079, label %find.next10080 -find.hit10079: + br i1 %t19, label %find.hit10100, label %find.next10101 +find.hit10100: store i64 %t12, ptr %a8 - br label %find.end10081 -find.next10080: + br label %find.end10102 +find.next10101: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 - br label %find.cond10077 -find.end10081: + br label %find.cond10098 +find.end10102: %t21 = load i64, ptr %a8 %t22 = icmp sge i64 %t21, 0 %t23 = xor i1 %t22, true - br label %logic.rend10082 -logic.rend10082: - br label %logic.end10076 -logic.end10076: - %t24 = phi i1 [ false, %logic.from10074 ], [ %t23, %logic.rend10082 ] - br i1 %t24, label %then10083, label %endif10085 -then10083: + br label %logic.rend10103 +logic.rend10103: + br label %logic.end10097 +logic.end10097: + %t24 = phi i1 [ false, %logic.from10095 ], [ %t23, %logic.rend10103 ] + br i1 %t24, label %then10104, label %endif10106 +then10104: %t25 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 %t27 = load { ptr, i64, i64 }, ptr %a1 @@ -103401,8 +103520,8 @@ then10083: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 store { ptr, i64, i64 } %t30, ptr %t34 store i64 %t32, ptr %t26 - br label %endif10085 -endif10085: + br label %endif10106 +endif10106: ret void } @@ -103437,10 +103556,10 @@ entry: store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 - br i1 %t12, label %then10086, label %endif10088 -then10086: - ret { ptr, i64, i64 } { ptr @.str.6750, i64 0, i64 0 } -endif10088: + br i1 %t12, label %then10107, label %endif10109 +then10107: + ret { ptr, i64, i64 } { ptr @.str.6760, i64 0, i64 0 } +endif10109: %t13 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t13, ptr %a14 %t16 = load i64, ptr %a10 @@ -103449,31 +103568,31 @@ endif10088: %t19 = add i64 %t16, %t18 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t21 = load i64, ptr %t20 - call void @finch_str_sub(ptr %a15, ptr %a14, i64 %t19, i64 %t21, ptr @.str.6751, i64 81) + call void @finch_str_sub(ptr %a15, ptr %a14, i64 %t19, i64 %t21, ptr @.str.6761, i64 81) %t22 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t22, ptr %a23 store i64 0, ptr %a24 - br label %while.cond10089 -while.cond10089: + br label %while.cond10110 +while.cond10110: %t25 = load i64, ptr %a24 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 %t27 = load i64, ptr %t26 %t28 = icmp slt i64 %t25, %t27 - br label %logic.from10092 -logic.from10092: - br i1 %t28, label %logic.rhs10093, label %logic.end10094 -logic.rhs10093: + br label %logic.from10113 +logic.from10113: + br i1 %t28, label %logic.rhs10114, label %logic.end10115 +logic.rhs10114: %t29 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t29, ptr %a30 %t32 = load i64, ptr %a24 %t33 = load { ptr, i64, i64 }, ptr %a23 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range10095, label %inrange10096 -range10095: - call void @finch_panic_index(ptr @.str.6753, i64 83, i64 %t32, i64 %t34) + br i1 %t35, label %range10116, label %inrange10117 +range10116: + call void @finch_panic_index(ptr @.str.6763, i64 83, i64 %t32, i64 %t34) unreachable -inrange10096: +inrange10117: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 @@ -103485,22 +103604,22 @@ inrange10096: store { ptr, i64, i64 } %t40, ptr %a44 call void @finch_str_drop(ptr %a44) %t45 = xor i1 %t43, true - br label %logic.rend10097 -logic.rend10097: - br label %logic.end10094 -logic.end10094: - %t46 = phi i1 [ false, %logic.from10092 ], [ %t45, %logic.rend10097 ] - br i1 %t46, label %while.body10090, label %while.end10091 -while.body10090: + br label %logic.rend10118 +logic.rend10118: + br label %logic.end10115 +logic.end10115: + %t46 = phi i1 [ false, %logic.from10113 ], [ %t45, %logic.rend10118 ] + br i1 %t46, label %while.body10111, label %while.end10112 +while.body10111: %t47 = load i64, ptr %a24 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a24 - br label %while.cond10089 -while.end10091: + br label %while.cond10110 +while.end10112: %t49 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t49, ptr %a50 %t52 = load i64, ptr %a24 - call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6754, i64 86) + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6764, i64 86) %t53 = load { ptr, i64, i64 }, ptr %a51 call void @finch_str_drop(ptr %a23) ret { ptr, i64, i64 } %t53 @@ -103521,19 +103640,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10201 -n.cond10201: + br label %n.cond10222 +n.cond10222: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10202, label %n.end10203 -n.body10202: + br i1 %t6, label %n.body10223, label %n.end10224 +n.body10223: %t7 = getelementptr inbounds %S.linker.Names, ptr %t1, i64 %t5 call void @finch.drop.S_linker_Names(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10201 -n.end10203: + br label %n.cond10222 +n.end10224: call void @finch_arr_free(ptr %a) ret void } @@ -103712,19 +103831,19 @@ entry: store %S.linker.Names zeroinitializer, ptr %a5 %t6 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t6, ptr %a7 - store { ptr, i64, i64 } { ptr @.str.6756, i64 1, i64 0 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6766, i64 1, i64 0 }, ptr %a9 call void @finch_str_split(ptr %a10, ptr %a7, ptr %a9) %t11 = load { ptr, i64, i64 }, ptr %a10 store { ptr, i64, i64 } %t11, ptr %a12 store i64 0, ptr %a13 - br label %each.cond10098 -each.cond10098: + br label %each.cond10119 +each.cond10119: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = load i64, ptr %a13 %t17 = icmp slt i64 %t16, %t15 - br i1 %t17, label %each.body10099, label %each.end10101 -each.body10099: + br i1 %t17, label %each.body10120, label %each.end10122 +each.body10120: %t18 = load ptr, ptr %a12 %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 %t20 = load { ptr, i64, i64 }, ptr %t19 @@ -103736,113 +103855,113 @@ each.body10099: store { ptr, i64, i64 } %t25, ptr %a26 %t27 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t27, ptr %a28 - store { ptr, i64, i64 } { ptr @.str.6759, i64 24, i64 0 }, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6769, i64 24, i64 0 }, ptr %a30 %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) %t32 = icmp sge i64 %t31, 0 - br i1 %t32, label %then10102, label %else10103 -then10102: + br i1 %t32, label %then10123, label %else10124 +then10123: %t33 = load { ptr, i64, i64 }, ptr %a26 - %t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6760, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6761, i64 1, i64 0 }) + %t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6770, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6771, i64 1, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t34) store { ptr, i64, i64 } %t34, ptr %a35 call void @finch_str_drop(ptr %a35) - br label %endif10104 -else10103: + br label %endif10125 +else10124: %t36 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t36, ptr %a37 - store { ptr, i64, i64 } { ptr @.str.6763, i64 18, i64 0 }, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.6773, i64 18, i64 0 }, ptr %a39 %t40 = call i64 @finch_str_find(ptr %a37, ptr %a39) %t41 = icmp sge i64 %t40, 0 - br i1 %t41, label %then10105, label %else10106 -then10105: + br i1 %t41, label %then10126, label %else10127 +then10126: %t42 = load { ptr, i64, i64 }, ptr %a26 - %t43 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t42, { ptr, i64, i64 } { ptr @.str.6764, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6765, i64 2, i64 0 }) + %t43 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t42, { ptr, i64, i64 } { ptr @.str.6774, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6775, i64 2, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t43) store { ptr, i64, i64 } %t43, ptr %a44 call void @finch_str_drop(ptr %a44) - br label %endif10107 -else10106: + br label %endif10128 +else10127: %t45 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t45, ptr %a46 - store { ptr, i64, i64 } { ptr @.str.6767, i64 27, i64 0 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.6777, i64 27, i64 0 }, ptr %a48 %t49 = call i64 @finch_str_find(ptr %a46, ptr %a48) %t50 = icmp sge i64 %t49, 0 - br i1 %t50, label %then10108, label %else10109 -then10108: + br i1 %t50, label %then10129, label %else10130 +then10129: %t51 = load { ptr, i64, i64 }, ptr %a26 - %t52 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t51, { ptr, i64, i64 } { ptr @.str.6768, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6769, i64 3, i64 0 }) + %t52 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t51, { ptr, i64, i64 } { ptr @.str.6778, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6779, i64 3, i64 0 }) call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t52) store { ptr, i64, i64 } %t52, ptr %a53 call void @finch_str_drop(ptr %a53) - br label %endif10110 -else10109: + br label %endif10131 +else10130: %t54 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t54, ptr %a55 - store { ptr, i64, i64 } { ptr @.str.6771, i64 14, i64 0 }, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.6781, i64 14, i64 0 }, ptr %a57 %t58 = call i64 @finch_str_find(ptr %a55, ptr %a57) %t59 = icmp sge i64 %t58, 0 - br i1 %t59, label %then10111, label %else10112 -then10111: + br i1 %t59, label %then10132, label %else10133 +then10132: %t60 = load { ptr, i64, i64 }, ptr %a26 - %t61 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t60, { ptr, i64, i64 } { ptr @.str.6772, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6773, i64 4, i64 0 }) + %t61 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t60, { ptr, i64, i64 } { ptr @.str.6782, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6783, i64 4, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t61) store { ptr, i64, i64 } %t61, ptr %a62 call void @finch_str_drop(ptr %a62) - br label %endif10113 -else10112: + br label %endif10134 +else10133: %t63 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t63, ptr %a64 - store { ptr, i64, i64 } { ptr @.str.6775, i64 24, i64 0 }, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.6785, i64 24, i64 0 }, ptr %a66 %t67 = call i64 @finch_str_find(ptr %a64, ptr %a66) %t68 = icmp sge i64 %t67, 0 - br i1 %t68, label %then10114, label %else10115 -then10114: + br i1 %t68, label %then10135, label %else10136 +then10135: %t69 = load { ptr, i64, i64 }, ptr %a26 - %t70 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t69, { ptr, i64, i64 } { ptr @.str.6776, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6777, i64 4, i64 0 }) + %t70 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t69, { ptr, i64, i64 } { ptr @.str.6786, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6787, i64 4, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t70) store { ptr, i64, i64 } %t70, ptr %a71 call void @finch_str_drop(ptr %a71) - br label %endif10116 -else10115: + br label %endif10137 +else10136: %t72 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t72, ptr %a73 - store { ptr, i64, i64 } { ptr @.str.6779, i64 13, i64 0 }, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.6789, i64 13, i64 0 }, ptr %a75 %t76 = call i64 @finch_str_find(ptr %a73, ptr %a75) %t77 = icmp sge i64 %t76, 0 - br i1 %t77, label %then10117, label %else10118 -then10117: + br i1 %t77, label %then10138, label %else10139 +then10138: %t78 = load { ptr, i64, i64 }, ptr %a26 - %t79 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.6780, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6781, i64 1, i64 0 }) + %t79 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.6790, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6791, i64 1, i64 0 }) call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t79) store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif10119 -else10118: + br label %endif10140 +else10139: %t81 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t81, ptr %a82 - store { ptr, i64, i64 } { ptr @.str.6783, i64 11, i64 0 }, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.6793, i64 11, i64 0 }, ptr %a84 %t85 = call i64 @finch_str_find(ptr %a82, ptr %a84) %t86 = icmp sge i64 %t85, 0 - br label %logic.from10120 -logic.from10120: - br i1 %t86, label %logic.rhs10121, label %logic.end10122 -logic.rhs10121: + br label %logic.from10141 +logic.from10141: + br i1 %t86, label %logic.rhs10142, label %logic.end10143 +logic.rhs10142: %t87 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t87, ptr %a88 - store { ptr, i64, i64 } { ptr @.str.6785, i64 9, i64 0 }, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.6795, i64 9, i64 0 }, ptr %a90 %t91 = call i64 @finch_str_find(ptr %a88, ptr %a90) %t92 = icmp sge i64 %t91, 0 - br label %logic.rend10123 -logic.rend10123: - br label %logic.end10122 -logic.end10122: - %t93 = phi i1 [ false, %logic.from10120 ], [ %t92, %logic.rend10123 ] - br i1 %t93, label %then10124, label %else10125 -then10124: + br label %logic.rend10144 +logic.rend10144: + br label %logic.end10143 +logic.end10143: + %t93 = phi i1 [ false, %logic.from10141 ], [ %t92, %logic.rend10144 ] + br i1 %t93, label %then10145, label %else10146 +then10145: %t94 = load { ptr, i64, i64 }, ptr %a26 - %t95 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t94, { ptr, i64, i64 } { ptr @.str.6786, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6787, i64 1, i64 0 }) + %t95 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t94, { ptr, i64, i64 } { ptr @.str.6796, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6797, i64 1, i64 0 }) store { ptr, i64, i64 } %t95, ptr %a97 - store { ptr, i64, i64 } { ptr @.str.6788, i64 10, i64 0 }, ptr %a98 + store { ptr, i64, i64 } { ptr @.str.6798, i64 10, i64 0 }, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) store { ptr, i64, i64 } %t95, ptr %a99 call void @finch_str_drop(ptr %a99) @@ -103850,154 +103969,154 @@ then10124: call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t100) store { ptr, i64, i64 } %t100, ptr %a101 call void @finch_str_drop(ptr %a101) - br label %endif10126 -else10125: + br label %endif10147 +else10146: %t102 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t102, ptr %a103 - store { ptr, i64, i64 } { ptr @.str.6790, i64 1, i64 0 }, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.6800, i64 1, i64 0 }, ptr %a105 %t106 = call i32 @finch_str_starts(ptr %a103, ptr %a105) %t107 = icmp ne i32 %t106, 0 - br label %logic.from10127 -logic.from10127: - br i1 %t107, label %logic.rhs10128, label %logic.end10129 -logic.rhs10128: + br label %logic.from10148 +logic.from10148: + br i1 %t107, label %logic.rhs10149, label %logic.end10150 +logic.rhs10149: %t108 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t108, ptr %a109 - store { ptr, i64, i64 } { ptr @.str.6792, i64 19, i64 0 }, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.6802, i64 19, i64 0 }, ptr %a111 %t112 = call i64 @finch_str_find(ptr %a109, ptr %a111) %t113 = icmp sge i64 %t112, 0 - br label %logic.rend10130 -logic.rend10130: - br label %logic.end10129 -logic.end10129: - %t114 = phi i1 [ false, %logic.from10127 ], [ %t113, %logic.rend10130 ] - br i1 %t114, label %then10131, label %endif10133 -then10131: + br label %logic.rend10151 +logic.rend10151: + br label %logic.end10150 +logic.end10150: + %t114 = phi i1 [ false, %logic.from10148 ], [ %t113, %logic.rend10151 ] + br i1 %t114, label %then10152, label %endif10154 +then10152: %t115 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t115, ptr %a116 %t118 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t118, ptr %a119 - store { ptr, i64, i64 } { ptr @.str.6795, i64 19, i64 0 }, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.6805, i64 19, i64 0 }, ptr %a121 %t122 = call i64 @finch_str_find(ptr %a119, ptr %a121) - call void @finch_str_sub(ptr %a117, ptr %a116, i64 1, i64 %t122, ptr @.str.6793, i64 111) + call void @finch_str_sub(ptr %a117, ptr %a116, i64 1, i64 %t122, ptr @.str.6803, i64 111) %t123 = load { ptr, i64, i64 }, ptr %a117 store { ptr, i64, i64 } %t123, ptr %a124 %t125 = getelementptr inbounds %S.platform.Target, ptr %a3, i32 0, i32 3 %t126 = load i1, ptr %t125 - br label %logic.from10134 -logic.from10134: - br i1 %t126, label %logic.rhs10135, label %logic.end10136 -logic.rhs10135: + br label %logic.from10155 +logic.from10155: + br i1 %t126, label %logic.rhs10156, label %logic.end10157 +logic.rhs10156: %t127 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t127, ptr %a128 - store { ptr, i64, i64 } { ptr @.str.6797, i64 1, i64 0 }, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6807, i64 1, i64 0 }, ptr %a130 %t131 = call i32 @finch_str_starts(ptr %a128, ptr %a130) %t132 = icmp ne i32 %t131, 0 - br label %logic.rend10137 -logic.rend10137: - br label %logic.end10136 -logic.end10136: - %t133 = phi i1 [ false, %logic.from10134 ], [ %t132, %logic.rend10137 ] - br i1 %t133, label %then10138, label %endif10140 -then10138: + br label %logic.rend10158 +logic.rend10158: + br label %logic.end10157 +logic.end10157: + %t133 = phi i1 [ false, %logic.from10155 ], [ %t132, %logic.rend10158 ] + br i1 %t133, label %then10159, label %endif10161 +then10159: %t134 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t134, ptr %a135 %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1 %t138 = load i64, ptr %t137 - call void @finch_str_sub(ptr %a136, ptr %a135, i64 1, i64 %t138, ptr @.str.6798, i64 113) + call void @finch_str_sub(ptr %a136, ptr %a135, i64 1, i64 %t138, ptr @.str.6808, i64 113) %t139 = load { ptr, i64, i64 }, ptr %a136 %t140 = load { ptr, i64, i64 }, ptr %a124 store { ptr, i64, i64 } %t139, ptr %a124 store { ptr, i64, i64 } %t140, ptr %a141 call void @finch_str_drop(ptr %a141) - br label %endif10140 -endif10140: + br label %endif10161 +endif10161: %t142 = load { ptr, i64, i64 }, ptr %a124 call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t142) call void @finch_str_drop(ptr %a124) - br label %endif10133 -endif10133: - br label %endif10126 -endif10126: - br label %endif10119 -endif10119: - br label %endif10116 -endif10116: - br label %endif10113 -endif10113: - br label %endif10110 -endif10110: - br label %endif10107 -endif10107: - br label %endif10104 -endif10104: + br label %endif10154 +endif10154: + br label %endif10147 +endif10147: + br label %endif10140 +endif10140: + br label %endif10137 +endif10137: + br label %endif10134 +endif10134: + br label %endif10131 +endif10131: + br label %endif10128 +endif10128: + br label %endif10125 +endif10125: call void @finch_str_drop(ptr %a26) - br label %each.step10100 -each.step10100: + br label %each.step10121 +each.step10121: %t143 = load i64, ptr %a13 %t144 = add i64 %t143, 1 store i64 %t144, ptr %a13 - br label %each.cond10098 -each.end10101: + br label %each.cond10119 +each.end10122: call void @finch.drop.arr_str(ptr %a12) %t145 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1 %t147 = load i64, ptr %t146 %t148 = icmp eq i64 %t147, 0 - br label %logic.from10141 -logic.from10141: - br i1 %t148, label %logic.rhs10142, label %logic.end10143 -logic.rhs10142: + br label %logic.from10162 +logic.from10162: + br i1 %t148, label %logic.rhs10163, label %logic.end10164 +logic.rhs10163: %t149 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t149, i32 0, i32 1 %t151 = load i64, ptr %t150 %t152 = icmp eq i64 %t151, 0 - br label %logic.rend10144 -logic.rend10144: - br label %logic.end10143 -logic.end10143: - %t153 = phi i1 [ false, %logic.from10141 ], [ %t152, %logic.rend10144 ] - br i1 %t153, label %then10145, label %endif10147 -then10145: + br label %logic.rend10165 +logic.rend10165: + br label %logic.end10164 +logic.end10164: + %t153 = phi i1 [ false, %logic.from10162 ], [ %t152, %logic.rend10165 ] + br i1 %t153, label %then10166, label %endif10168 +then10166: %t154 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t154, ptr %a156 - store { ptr, i64, i64 } { ptr @.str.6799, i64 21, i64 0 }, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.6809, i64 21, i64 0 }, ptr %a157 call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 %t159 = extractvalue { ptr, i64, i64 } %t158, 1 %t160 = trunc i64 %t159 to i32 %t161 = extractvalue { ptr, i64, i64 } %t158, 0 %t162 = icmp eq ptr %t161, null - %t163 = select i1 %t162, ptr @.str.6800, ptr %t161 - %t164 = call i32 (ptr, ...) @printf(ptr @.str.6801, i32 %t160, ptr %t163) + %t163 = select i1 %t162, ptr @.str.6810, ptr %t161 + %t164 = call i32 (ptr, ...) @printf(ptr @.str.6811, i32 %t160, ptr %t163) store { ptr, i64, i64 } %t158, ptr %a165 call void @finch_str_drop(ptr %a165) - %t166 = call i32 (ptr, ...) @printf(ptr @.str.6802) + %t166 = call i32 (ptr, ...) @printf(ptr @.str.6812) call void @finch.drop.S_linker_Names(ptr %a5) call void @finch.drop.S_linker_Names(ptr %a4) ret i64 1 -endif10147: +endif10168: %t167 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 store i64 0, ptr %a168 - br label %each.cond10148 -each.cond10148: + br label %each.cond10169 +each.cond10169: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = load i64, ptr %a168 %t172 = icmp slt i64 %t171, %t170 - br i1 %t172, label %each.body10149, label %each.end10151 -each.body10149: + br i1 %t172, label %each.body10170, label %each.end10172 +each.body10170: %t173 = load ptr, ptr %t167 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 %t171 %t175 = load { ptr, i64, i64 }, ptr %t174 store { ptr, i64, i64 } %t175, ptr %a176 %t177 = load { ptr, i64, i64 }, ptr %a176 - store { ptr, i64, i64 } { ptr @.str.6803, i64 20, i64 0 }, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.6813, i64 20, i64 0 }, ptr %a179 store { ptr, i64, i64 } %t177, ptr %a180 call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) %t181 = load { ptr, i64, i64 }, ptr %a178 store { ptr, i64, i64 } %t181, ptr %a183 - store { ptr, i64, i64 } { ptr @.str.6804, i64 62, i64 0 }, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.6814, i64 62, i64 0 }, ptr %a184 call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) store { ptr, i64, i64 } %t181, ptr %a185 call void @finch_str_drop(ptr %a185) @@ -104006,55 +104125,55 @@ each.body10149: %t188 = trunc i64 %t187 to i32 %t189 = extractvalue { ptr, i64, i64 } %t186, 0 %t190 = icmp eq ptr %t189, null - %t191 = select i1 %t190, ptr @.str.6805, ptr %t189 - %t192 = call i32 (ptr, ...) @printf(ptr @.str.6806, i32 %t188, ptr %t191) + %t191 = select i1 %t190, ptr @.str.6815, ptr %t189 + %t192 = call i32 (ptr, ...) @printf(ptr @.str.6816, i32 %t188, ptr %t191) store { ptr, i64, i64 } %t186, ptr %a193 call void @finch_str_drop(ptr %a193) - %t194 = call i32 (ptr, ...) @printf(ptr @.str.6807) - br label %each.step10150 -each.step10150: + %t194 = call i32 (ptr, ...) @printf(ptr @.str.6817) + br label %each.step10171 +each.step10171: %t195 = load i64, ptr %a168 %t196 = add i64 %t195, 1 store i64 %t196, ptr %a168 - br label %each.cond10148 -each.end10151: + br label %each.cond10169 +each.end10172: store { ptr, i64, i64 } zeroinitializer, ptr %a197 store { ptr, i64, i64 } zeroinitializer, ptr %a198 %t199 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 store i64 0, ptr %a200 - br label %each.cond10152 -each.cond10152: + br label %each.cond10173 +each.cond10173: %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i32 0, i32 1 %t202 = load i64, ptr %t201 %t203 = load i64, ptr %a200 %t204 = icmp slt i64 %t203, %t202 - br i1 %t204, label %each.body10153, label %each.end10155 -each.body10153: + br i1 %t204, label %each.body10174, label %each.end10176 +each.body10174: %t205 = load ptr, ptr %t199 %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i64 %t203 %t207 = load { ptr, i64, i64 }, ptr %t206 store { ptr, i64, i64 } %t207, ptr %a208 - store { ptr, i64, i64 } { ptr @.str.6808, i64 0, i64 0 }, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.6818, i64 0, i64 0 }, ptr %a209 %t210 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 %t211 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t211, ptr %a212 %t213 = call i64 @finch_map_find(ptr %t210, ptr %a212, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t214 = icmp sge i64 %t213, 0 - br i1 %t214, label %then10156, label %endif10158 -then10156: + br i1 %t214, label %then10177, label %endif10179 +then10177: %t215 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 %t216 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t216, ptr %a217 %t218 = call i64 @finch_map_find(ptr %t215, ptr %a217, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t219 = icmp slt i64 %t218, 0 - br i1 %t219, label %map.missing10159, label %map.found10160 -map.missing10159: + br i1 %t219, label %map.missing10180, label %map.found10181 +map.missing10180: store { ptr, i64, i64 } zeroinitializer, ptr %a220 store { ptr, i64, i64 } %t216, ptr %a221 call void @finch_buf_str(ptr %a220, ptr %a221, i32 1) - call void @finch_map_missing(ptr @.str.6809, i64 131, ptr %a220) + call void @finch_map_missing(ptr @.str.6819, i64 131, ptr %a220) unreachable -map.found10160: +map.found10181: %t222 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t215, i32 0, i32 0 %t223 = load ptr, ptr %t222 %t224 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t223, i64 %t218 @@ -104068,41 +104187,41 @@ map.found10160: store { ptr, i64, i64 } %t230, ptr %a209 store { ptr, i64, i64 } %t231, ptr %a232 call void @finch_str_drop(ptr %a232) - br label %endif10158 -endif10158: + br label %endif10179 +endif10179: %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t234 = load { ptr, i64, i64 }, ptr %a209 store i64 -1, ptr %a235 %t236 = load i64, ptr %t233 %t237 = load ptr, ptr %a197 store i64 0, ptr %a238 - br label %find.cond10161 -find.cond10161: + br label %find.cond10182 +find.cond10182: %t239 = load i64, ptr %a238 %t240 = icmp slt i64 %t239, %t236 - br i1 %t240, label %find.body10162, label %find.end10165 -find.body10162: + br i1 %t240, label %find.body10183, label %find.end10186 +find.body10183: %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t239 %t242 = load { ptr, i64, i64 }, ptr %t241 store { ptr, i64, i64 } %t242, ptr %a243 store { ptr, i64, i64 } %t234, ptr %a244 %t245 = call i32 @finch_str_eq(ptr %a243, ptr %a244) %t246 = icmp ne i32 %t245, 0 - br i1 %t246, label %find.hit10163, label %find.next10164 -find.hit10163: + br i1 %t246, label %find.hit10184, label %find.next10185 +find.hit10184: store i64 %t239, ptr %a235 - br label %find.end10165 -find.next10164: + br label %find.end10186 +find.next10185: %t247 = add i64 %t239, 1 store i64 %t247, ptr %a238 - br label %find.cond10161 -find.end10165: + br label %find.cond10182 +find.end10186: %t248 = load i64, ptr %a235 store i64 %t248, ptr %a249 %t250 = load i64, ptr %a249 %t251 = icmp slt i64 %t250, 0 - br i1 %t251, label %then10166, label %endif10168 -then10166: + br i1 %t251, label %then10187, label %endif10189 +then10187: %t252 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t253 = load { ptr, i64, i64 }, ptr %a209 store { ptr, i64, i64 } %t253, ptr %a254 @@ -104127,47 +104246,47 @@ then10166: %t267 = load i64, ptr %t266 %t268 = sub i64 %t267, 1 store i64 %t268, ptr %a249 - br label %endif10168 -endif10168: + br label %endif10189 +endif10189: %t269 = load i64, ptr %a249 %t270 = load { ptr, i64, i64 }, ptr %a198 %t271 = extractvalue { ptr, i64, i64 } %t270, 1 %t272 = icmp uge i64 %t269, %t271 - br i1 %t272, label %range10169, label %inrange10170 -range10169: - call void @finch_panic_index(ptr @.str.6810, i64 139, i64 %t269, i64 %t271) + br i1 %t272, label %range10190, label %inrange10191 +range10190: + call void @finch_panic_index(ptr @.str.6820, i64 139, i64 %t269, i64 %t271) unreachable -inrange10170: +inrange10191: %t273 = extractvalue { ptr, i64, i64 } %t270, 0 %t274 = getelementptr inbounds %S.linker.Names, ptr %t273, i64 %t269 %t275 = load { ptr, i64, i64 }, ptr %a208 call void @finch.linker.Names.add(ptr %t274, { ptr, i64, i64 } %t275) call void @finch_str_drop(ptr %a209) - br label %each.step10154 -each.step10154: + br label %each.step10175 +each.step10175: %t276 = load i64, ptr %a200 %t277 = add i64 %t276, 1 store i64 %t277, ptr %a200 - br label %each.cond10152 -each.end10155: + br label %each.cond10173 +each.end10176: %t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 %t279 = load i64, ptr %t278 store i64 0, ptr %a280 - br label %for.cond10171 -for.cond10171: + br label %for.cond10192 +for.cond10192: %t281 = load i64, ptr %a280 %t282 = icmp slt i64 %t281, %t279 - br i1 %t282, label %for.body10172, label %for.end10174 -for.body10172: + br i1 %t282, label %for.body10193, label %for.end10195 +for.body10193: %t283 = load i64, ptr %a280 %t284 = load { ptr, i64, i64 }, ptr %a198 %t285 = extractvalue { ptr, i64, i64 } %t284, 1 %t286 = icmp uge i64 %t283, %t285 - br i1 %t286, label %range10175, label %inrange10176 -range10175: - call void @finch_panic_index(ptr @.str.6811, i64 142, i64 %t283, i64 %t285) + br i1 %t286, label %range10196, label %inrange10197 +range10196: + call void @finch_panic_index(ptr @.str.6821, i64 142, i64 %t283, i64 %t285) unreachable -inrange10176: +inrange10197: %t287 = extractvalue { ptr, i64, i64 } %t284, 0 %t288 = getelementptr inbounds %S.linker.Names, ptr %t287, i64 %t283 %t289 = getelementptr inbounds %S.linker.Names, ptr %t288, i32 0, i32 0 @@ -104180,26 +104299,26 @@ inrange10176: %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t297 = load i64, ptr %t296 store i64 0, ptr %a298 - br label %for.cond10177 -for.cond10177: + br label %for.cond10198 +for.cond10198: %t299 = load i64, ptr %a298 %t300 = icmp slt i64 %t299, %t297 - br i1 %t300, label %for.body10178, label %for.end10180 -for.body10178: + br i1 %t300, label %for.body10199, label %for.end10201 +for.body10199: %t301 = load i64, ptr %a298 %t302 = icmp slt i64 %t301, 3 - br i1 %t302, label %then10181, label %endif10183 -then10181: + br i1 %t302, label %then10202, label %endif10204 +then10202: %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 %t304 = load i64, ptr %a298 %t305 = load { ptr, i64, i64 }, ptr %a294 %t306 = extractvalue { ptr, i64, i64 } %t305, 1 %t307 = icmp uge i64 %t304, %t306 - br i1 %t307, label %range10184, label %inrange10185 -range10184: - call void @finch_panic_index(ptr @.str.6812, i64 146, i64 %t304, i64 %t306) + br i1 %t307, label %range10205, label %inrange10206 +range10205: + call void @finch_panic_index(ptr @.str.6822, i64 146, i64 %t304, i64 %t306) unreachable -inrange10185: +inrange10206: %t308 = extractvalue { ptr, i64, i64 } %t305, 0 %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t304 %t310 = load { ptr, i64, i64 }, ptr %t309 @@ -104213,28 +104332,28 @@ inrange10185: %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i64 %t314 store { ptr, i64, i64 } %t313, ptr %t317 store i64 %t315, ptr %t303 - br label %endif10183 -endif10183: - br label %for.step10179 -for.step10179: + br label %endif10204 +endif10204: + br label %for.step10200 +for.step10200: %t318 = load i64, ptr %a298 %t319 = add i64 %t318, 1 store i64 %t319, ptr %a298 - br label %for.cond10177 -for.end10180: + br label %for.cond10198 +for.end10201: %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6813, i64 2, i64 0 }, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.6823, i64 2, i64 0 }, ptr %a321 call void @finch_str_join(ptr %a322, ptr %a295, ptr %a321) %t323 = load { ptr, i64, i64 }, ptr %a322 store { ptr, i64, i64 } %t323, ptr %a324 %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t326 = load i64, ptr %t325 %t327 = icmp sgt i64 %t326, 3 - br i1 %t327, label %then10186, label %endif10188 -then10186: + br i1 %t327, label %then10207, label %endif10209 +then10207: %t328 = load { ptr, i64, i64 }, ptr %a324 store { ptr, i64, i64 } %t328, ptr %a330 - store { ptr, i64, i64 } { ptr @.str.6814, i64 5, i64 0 }, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.6824, i64 5, i64 0 }, ptr %a331 call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) %t332 = load { ptr, i64, i64 }, ptr %a329 %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 @@ -104251,7 +104370,7 @@ then10186: call void @finch_str_drop(ptr %a342) %t343 = load { ptr, i64, i64 }, ptr %a338 store { ptr, i64, i64 } %t343, ptr %a345 - store { ptr, i64, i64 } { ptr @.str.6815, i64 5, i64 0 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6825, i64 5, i64 0 }, ptr %a346 call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) store { ptr, i64, i64 } %t343, ptr %a347 call void @finch_str_drop(ptr %a347) @@ -104260,26 +104379,26 @@ then10186: store { ptr, i64, i64 } %t348, ptr %a324 store { ptr, i64, i64 } %t349, ptr %a350 call void @finch_str_drop(ptr %a350) - br label %endif10188 -endif10188: + br label %endif10209 +endif10209: %t351 = load i64, ptr %a280 %t352 = load { ptr, i64, i64 }, ptr %a197 %t353 = extractvalue { ptr, i64, i64 } %t352, 1 %t354 = icmp uge i64 %t351, %t353 - br i1 %t354, label %range10189, label %inrange10190 -range10189: - call void @finch_panic_index(ptr @.str.6816, i64 153, i64 %t351, i64 %t353) + br i1 %t354, label %range10210, label %inrange10211 +range10210: + call void @finch_panic_index(ptr @.str.6826, i64 153, i64 %t351, i64 %t353) unreachable -inrange10190: +inrange10211: %t355 = extractvalue { ptr, i64, i64 } %t352, 0 %t356 = getelementptr inbounds { ptr, i64, i64 }, ptr %t355, i64 %t351 %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 %t358 = load i64, ptr %t357 %t359 = icmp eq i64 %t358, 0 - br i1 %t359, label %then10191, label %endif10193 -then10191: + br i1 %t359, label %then10212, label %endif10214 +then10212: %t360 = load { ptr, i64, i64 }, ptr %a324 - store { ptr, i64, i64 } { ptr @.str.6817, i64 25, i64 0 }, ptr %a362 + store { ptr, i64, i64 } { ptr @.str.6827, i64 25, i64 0 }, ptr %a362 store { ptr, i64, i64 } %t360, ptr %a363 call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) %t364 = load { ptr, i64, i64 }, ptr %a361 @@ -104287,35 +104406,35 @@ then10191: %t366 = trunc i64 %t365 to i32 %t367 = extractvalue { ptr, i64, i64 } %t364, 0 %t368 = icmp eq ptr %t367, null - %t369 = select i1 %t368, ptr @.str.6818, ptr %t367 - %t370 = call i32 (ptr, ...) @printf(ptr @.str.6819, i32 %t366, ptr %t369) + %t369 = select i1 %t368, ptr @.str.6828, ptr %t367 + %t370 = call i32 (ptr, ...) @printf(ptr @.str.6829, i32 %t366, ptr %t369) store { ptr, i64, i64 } %t364, ptr %a371 call void @finch_str_drop(ptr %a371) - %t372 = call i32 (ptr, ...) @printf(ptr @.str.6820) + %t372 = call i32 (ptr, ...) @printf(ptr @.str.6830) call void @finch_str_drop(ptr %a324) call void @finch.drop.arr_str(ptr %a295) call void @finch.drop.arr_str(ptr %a294) - br label %for.step10173 -endif10193: - store { ptr, i64, i64 } { ptr @.str.6821, i64 4, i64 0 }, ptr %a373 + br label %for.step10194 +endif10214: + store { ptr, i64, i64 } { ptr @.str.6831, i64 4, i64 0 }, ptr %a373 %t374 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 %t375 = load i64, ptr %t374 %t376 = icmp eq i64 %t375, 1 - br i1 %t376, label %then10194, label %endif10196 -then10194: + br i1 %t376, label %then10215, label %endif10217 +then10215: %t377 = load { ptr, i64, i64 }, ptr %a373 - store { ptr, i64, i64 } { ptr @.str.6822, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.6832, i64 5, i64 0 }, ptr %a373 store { ptr, i64, i64 } %t377, ptr %a378 call void @finch_str_drop(ptr %a378) - br label %endif10196 -endif10196: + br label %endif10217 +endif10217: %t379 = load { ptr, i64, i64 }, ptr %a324 - store { ptr, i64, i64 } { ptr @.str.6823, i64 7, i64 0 }, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.6833, i64 7, i64 0 }, ptr %a381 store { ptr, i64, i64 } %t379, ptr %a382 call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) %t383 = load { ptr, i64, i64 }, ptr %a380 store { ptr, i64, i64 } %t383, ptr %a385 - store { ptr, i64, i64 } { ptr @.str.6824, i64 1, i64 0 }, ptr %a386 + store { ptr, i64, i64 } { ptr @.str.6834, i64 1, i64 0 }, ptr %a386 call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) store { ptr, i64, i64 } %t383, ptr %a387 call void @finch_str_drop(ptr %a387) @@ -104328,7 +104447,7 @@ endif10196: call void @finch_str_drop(ptr %a393) %t394 = load { ptr, i64, i64 }, ptr %a390 store { ptr, i64, i64 } %t394, ptr %a396 - store { ptr, i64, i64 } { ptr @.str.6825, i64 7, i64 0 }, ptr %a397 + store { ptr, i64, i64 } { ptr @.str.6835, i64 7, i64 0 }, ptr %a397 call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) store { ptr, i64, i64 } %t394, ptr %a398 call void @finch_str_drop(ptr %a398) @@ -104337,11 +104456,11 @@ endif10196: %t401 = load { ptr, i64, i64 }, ptr %a197 %t402 = extractvalue { ptr, i64, i64 } %t401, 1 %t403 = icmp uge i64 %t400, %t402 - br i1 %t403, label %range10197, label %inrange10198 -range10197: - call void @finch_panic_index(ptr @.str.6826, i64 161, i64 %t400, i64 %t402) + br i1 %t403, label %range10218, label %inrange10219 +range10218: + call void @finch_panic_index(ptr @.str.6836, i64 161, i64 %t400, i64 %t402) unreachable -inrange10198: +inrange10219: %t404 = extractvalue { ptr, i64, i64 } %t401, 0 %t405 = getelementptr inbounds { ptr, i64, i64 }, ptr %t404, i64 %t400 %t406 = load { ptr, i64, i64 }, ptr %t405 @@ -104352,7 +104471,7 @@ inrange10198: call void @finch_str_drop(ptr %a410) %t411 = load { ptr, i64, i64 }, ptr %a407 store { ptr, i64, i64 } %t411, ptr %a413 - store { ptr, i64, i64 } { ptr @.str.6827, i64 31, i64 0 }, ptr %a414 + store { ptr, i64, i64 } { ptr @.str.6837, i64 31, i64 0 }, ptr %a414 call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) store { ptr, i64, i64 } %t411, ptr %a415 call void @finch_str_drop(ptr %a415) @@ -104361,53 +104480,53 @@ inrange10198: %t418 = trunc i64 %t417 to i32 %t419 = extractvalue { ptr, i64, i64 } %t416, 0 %t420 = icmp eq ptr %t419, null - %t421 = select i1 %t420, ptr @.str.6828, ptr %t419 - %t422 = call i32 (ptr, ...) @printf(ptr @.str.6829, i32 %t418, ptr %t421) + %t421 = select i1 %t420, ptr @.str.6838, ptr %t419 + %t422 = call i32 (ptr, ...) @printf(ptr @.str.6839, i32 %t418, ptr %t421) store { ptr, i64, i64 } %t416, ptr %a423 call void @finch_str_drop(ptr %a423) - %t424 = call i32 (ptr, ...) @printf(ptr @.str.6830) - %t425 = extractvalue { ptr, i64, i64 } { ptr @.str.6831, i64 74, i64 0 }, 1 + %t424 = call i32 (ptr, ...) @printf(ptr @.str.6840) + %t425 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 1 %t426 = trunc i64 %t425 to i32 - %t427 = extractvalue { ptr, i64, i64 } { ptr @.str.6831, i64 74, i64 0 }, 0 + %t427 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 0 %t428 = icmp eq ptr %t427, null - %t429 = select i1 %t428, ptr @.str.6832, ptr %t427 - %t430 = call i32 (ptr, ...) @printf(ptr @.str.6833, i32 %t426, ptr %t429) - %t431 = call i32 (ptr, ...) @printf(ptr @.str.6834) - %t432 = extractvalue { ptr, i64, i64 } { ptr @.str.6835, i64 66, i64 0 }, 1 + %t429 = select i1 %t428, ptr @.str.6842, ptr %t427 + %t430 = call i32 (ptr, ...) @printf(ptr @.str.6843, i32 %t426, ptr %t429) + %t431 = call i32 (ptr, ...) @printf(ptr @.str.6844) + %t432 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 1 %t433 = trunc i64 %t432 to i32 - %t434 = extractvalue { ptr, i64, i64 } { ptr @.str.6835, i64 66, i64 0 }, 0 + %t434 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 0 %t435 = icmp eq ptr %t434, null - %t436 = select i1 %t435, ptr @.str.6836, ptr %t434 - %t437 = call i32 (ptr, ...) @printf(ptr @.str.6837, i32 %t433, ptr %t436) - %t438 = call i32 (ptr, ...) @printf(ptr @.str.6838) - %t439 = extractvalue { ptr, i64, i64 } { ptr @.str.6839, i64 0, i64 0 }, 1 + %t436 = select i1 %t435, ptr @.str.6846, ptr %t434 + %t437 = call i32 (ptr, ...) @printf(ptr @.str.6847, i32 %t433, ptr %t436) + %t438 = call i32 (ptr, ...) @printf(ptr @.str.6848) + %t439 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 1 %t440 = trunc i64 %t439 to i32 - %t441 = extractvalue { ptr, i64, i64 } { ptr @.str.6839, i64 0, i64 0 }, 0 + %t441 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 0 %t442 = icmp eq ptr %t441, null - %t443 = select i1 %t442, ptr @.str.6840, ptr %t441 - %t444 = call i32 (ptr, ...) @printf(ptr @.str.6841, i32 %t440, ptr %t443) - %t445 = call i32 (ptr, ...) @printf(ptr @.str.6842) + %t443 = select i1 %t442, ptr @.str.6850, ptr %t441 + %t444 = call i32 (ptr, ...) @printf(ptr @.str.6851, i32 %t440, ptr %t443) + %t445 = call i32 (ptr, ...) @printf(ptr @.str.6852) %t446 = load i64, ptr %a280 %t447 = load { ptr, i64, i64 }, ptr %a197 %t448 = extractvalue { ptr, i64, i64 } %t447, 1 %t449 = icmp uge i64 %t446, %t448 - br i1 %t449, label %range10199, label %inrange10200 -range10199: - call void @finch_panic_index(ptr @.str.6844, i64 165, i64 %t446, i64 %t448) + br i1 %t449, label %range10220, label %inrange10221 +range10220: + call void @finch_panic_index(ptr @.str.6854, i64 165, i64 %t446, i64 %t448) unreachable -inrange10200: +inrange10221: %t450 = extractvalue { ptr, i64, i64 } %t447, 0 %t451 = getelementptr inbounds { ptr, i64, i64 }, ptr %t450, i64 %t446 %t452 = load { ptr, i64, i64 }, ptr %t451 %t453 = call { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %t452) - store { ptr, i64, i64 } { ptr @.str.6843, i64 12, i64 0 }, ptr %a455 + store { ptr, i64, i64 } { ptr @.str.6853, i64 12, i64 0 }, ptr %a455 store { ptr, i64, i64 } %t453, ptr %a456 call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) store { ptr, i64, i64 } %t453, ptr %a457 call void @finch_str_drop(ptr %a457) %t458 = load { ptr, i64, i64 }, ptr %a454 store { ptr, i64, i64 } %t458, ptr %a460 - store { ptr, i64, i64 } { ptr @.str.6845, i64 1, i64 0 }, ptr %a461 + store { ptr, i64, i64 } { ptr @.str.6855, i64 1, i64 0 }, ptr %a461 call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) store { ptr, i64, i64 } %t458, ptr %a462 call void @finch_str_drop(ptr %a462) @@ -104416,29 +104535,29 @@ inrange10200: %t465 = trunc i64 %t464 to i32 %t466 = extractvalue { ptr, i64, i64 } %t463, 0 %t467 = icmp eq ptr %t466, null - %t468 = select i1 %t467, ptr @.str.6846, ptr %t466 - %t469 = call i32 (ptr, ...) @printf(ptr @.str.6847, i32 %t465, ptr %t468) + %t468 = select i1 %t467, ptr @.str.6856, ptr %t466 + %t469 = call i32 (ptr, ...) @printf(ptr @.str.6857, i32 %t465, ptr %t468) store { ptr, i64, i64 } %t463, ptr %a470 call void @finch_str_drop(ptr %a470) - %t471 = call i32 (ptr, ...) @printf(ptr @.str.6848) - %t472 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 1 + %t471 = call i32 (ptr, ...) @printf(ptr @.str.6858) + %t472 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 1 %t473 = trunc i64 %t472 to i32 - %t474 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 0 + %t474 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 0 %t475 = icmp eq ptr %t474, null - %t476 = select i1 %t475, ptr @.str.6850, ptr %t474 - %t477 = call i32 (ptr, ...) @printf(ptr @.str.6851, i32 %t473, ptr %t476) - %t478 = call i32 (ptr, ...) @printf(ptr @.str.6852) + %t476 = select i1 %t475, ptr @.str.6860, ptr %t474 + %t477 = call i32 (ptr, ...) @printf(ptr @.str.6861, i32 %t473, ptr %t476) + %t478 = call i32 (ptr, ...) @printf(ptr @.str.6862) call void @finch_str_drop(ptr %a373) call void @finch_str_drop(ptr %a324) call void @finch.drop.arr_str(ptr %a295) call void @finch.drop.arr_str(ptr %a294) - br label %for.step10173 -for.step10173: + br label %for.step10194 +for.step10194: %t479 = load i64, ptr %a280 %t480 = add i64 %t479, 1 store i64 %t480, ptr %a280 - br label %for.cond10171 -for.end10174: + br label %for.cond10192 +for.end10195: call void @finch.drop.arr_S_linker_Names(ptr %a198) call void @finch.drop.arr_str(ptr %a197) call void @finch.drop.S_linker_Names(ptr %a5) @@ -104565,17 +104684,17 @@ entry: %t9 = icmp eq i32 %t8, 0 %t10 = load { ptr, i64, i64 }, ptr %a7 %t11 = load { ptr, i64, i64 }, ptr %a6 - br i1 %t9, label %try.failed10204, label %try.ok10205 -try.failed10204: + br i1 %t9, label %try.failed10225, label %try.ok10226 +try.failed10225: %t12 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t10, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t12 -try.ok10205: +try.ok10226: store { ptr, i64, i64 } %t11, ptr %a13 %t14 = call { ptr, i64, i64 } @finch.host.cacheDir() store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t16, ptr %a18 - store { ptr, i64, i64 } { ptr @.str.6853, i64 4, i64 0 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6863, i64 4, i64 0 }, ptr %a19 call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) %t20 = load { ptr, i64, i64 }, ptr %a17 %t21 = load { ptr, i64, i64 }, ptr %a13 @@ -104593,7 +104712,7 @@ try.ok10205: call void @finch_str_drop(ptr %a32) %t33 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t33, ptr %a35 - store { ptr, i64, i64 } { ptr @.str.6854, i64 3, i64 0 }, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.6864, i64 3, i64 0 }, ptr %a36 call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) store { ptr, i64, i64 } %t33, ptr %a37 call void @finch_str_drop(ptr %a37) @@ -104610,7 +104729,7 @@ try.ok10205: call void @finch_str_drop(ptr %a45) %t46 = load { ptr, i64, i64 }, ptr %a41 store { ptr, i64, i64 } %t46, ptr %a48 - store { ptr, i64, i64 } { ptr @.str.6855, i64 2, i64 0 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.6865, i64 2, i64 0 }, ptr %a49 call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) store { ptr, i64, i64 } %t46, ptr %a50 call void @finch_str_drop(ptr %a50) @@ -104620,20 +104739,20 @@ try.ok10205: store { ptr, i64, i64 } %t53, ptr %a54 %t55 = call i32 @finch_file_exists(ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %then10206, label %endif10208 -then10206: + br i1 %t56, label %then10227, label %endif10229 +then10227: %t57 = load { ptr, i64, i64 }, ptr %a52 call void @finch_str_drop(ptr %a15) call void @finch_str_drop(ptr %a13) %t58 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t59 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t58, { ptr, i64, i64 } %t57, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t59 -endif10208: +endif10229: %t60 = load { ptr, i64, i64 }, ptr %a15 call void @finch.host.makeDirs({ ptr, i64, i64 } %t60) %t61 = load { ptr, i64, i64 }, ptr %a52 store { ptr, i64, i64 } %t61, ptr %a63 - store { ptr, i64, i64 } { ptr @.str.6856, i64 5, i64 0 }, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.6866, i64 5, i64 0 }, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) %t65 = load { ptr, i64, i64 }, ptr %a62 %t66 = call i64 @finch.host.pid() @@ -104648,26 +104767,26 @@ endif10208: call void @finch_str_drop(ptr %a73) %t74 = load { ptr, i64, i64 }, ptr %a69 store { ptr, i64, i64 } %t74, ptr %a75 - store { ptr, i64, i64 } { ptr @.str.6857, i64 6, i64 0 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.6867, i64 6, i64 0 }, ptr %a76 %t77 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 %t78 = load i1, ptr %t77 - br i1 %t78, label %then10209, label %endif10211 -then10209: + br i1 %t78, label %then10230, label %endif10232 +then10230: %t79 = load { ptr, i64, i64 }, ptr %a76 - store { ptr, i64, i64 } { ptr @.str.6858, i64 0, i64 0 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.6868, i64 0, i64 0 }, ptr %a76 store { ptr, i64, i64 } %t79, ptr %a80 call void @finch_str_drop(ptr %a80) - br label %endif10211 -endif10211: + br label %endif10232 +endif10232: %t81 = load { ptr, i64, i64 }, ptr %a75 store { ptr, i64, i64 } %t81, ptr %a83 - store { ptr, i64, i64 } { ptr @.str.6859, i64 4, i64 0 }, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.6869, i64 4, i64 0 }, ptr %a84 call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) %t85 = load { ptr, i64, i64 }, ptr %a82 store { ptr, i64, i64 } %t85, ptr %a86 %t87 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t87, ptr %a89 - store { ptr, i64, i64 } { ptr @.str.6860, i64 4, i64 0 }, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.6870, i64 4, i64 0 }, ptr %a90 call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) %t91 = load { ptr, i64, i64 }, ptr %a88 %t92 = load { ptr, i64, i64 }, ptr %a76 @@ -104678,7 +104797,7 @@ endif10211: call void @finch_str_drop(ptr %a96) %t97 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t97, ptr %a99 - store { ptr, i64, i64 } { ptr @.str.6861, i64 4, i64 0 }, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6871, i64 4, i64 0 }, ptr %a100 call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) store { ptr, i64, i64 } %t97, ptr %a101 call void @finch_str_drop(ptr %a101) @@ -104694,7 +104813,7 @@ endif10211: call void @finch_str_drop(ptr %a109) %t110 = load { ptr, i64, i64 }, ptr %a105 store { ptr, i64, i64 } %t110, ptr %a112 - store { ptr, i64, i64 } { ptr @.str.6862, i64 4, i64 0 }, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.6872, i64 4, i64 0 }, ptr %a113 call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) store { ptr, i64, i64 } %t110, ptr %a114 call void @finch_str_drop(ptr %a114) @@ -104710,7 +104829,7 @@ endif10211: call void @finch_str_drop(ptr %a122) %t123 = load { ptr, i64, i64 }, ptr %a118 store { ptr, i64, i64 } %t123, ptr %a125 - store { ptr, i64, i64 } { ptr @.str.6863, i64 3, i64 0 }, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.6873, i64 3, i64 0 }, ptr %a126 call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) store { ptr, i64, i64 } %t123, ptr %a127 call void @finch_str_drop(ptr %a127) @@ -104726,7 +104845,7 @@ endif10211: call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a131 store { ptr, i64, i64 } %t136, ptr %a138 - store { ptr, i64, i64 } { ptr @.str.6864, i64 5, i64 0 }, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.6874, i64 5, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) @@ -104737,8 +104856,8 @@ endif10211: store i64 %t142, ptr %a144 %t145 = load i64, ptr %a144 %t146 = icmp ne i64 %t145, 0 - br i1 %t146, label %then10212, label %endif10214 -then10212: + br i1 %t146, label %then10233, label %endif10235 +then10233: %t147 = load { ptr, i64, i64 }, ptr %a86 store { ptr, i64, i64 } %t147, ptr %a148 store { ptr, i64, i64 } zeroinitializer, ptr %a149 @@ -104747,17 +104866,17 @@ then10212: %t152 = icmp eq i32 %t151, 0 %t153 = load { ptr, i64, i64 }, ptr %a150 %t154 = load { ptr, i64, i64 }, ptr %a149 - br i1 %t152, label %or.failed10215, label %or.ok10216 -or.failed10215: + br i1 %t152, label %or.failed10236, label %or.ok10237 +or.failed10236: store { ptr, i64, i64 } %t153, ptr %a155 call void @finch_str_drop(ptr %a155) - br label %or.bend10217 -or.bend10217: - br label %or.end10218 -or.ok10216: - br label %or.end10218 -or.end10218: - %t156 = phi { ptr, i64, i64 } [ { ptr @.str.6865, i64 0, i64 0 }, %or.bend10217 ], [ %t154, %or.ok10216 ] + br label %or.bend10238 +or.bend10238: + br label %or.end10239 +or.ok10237: + br label %or.end10239 +or.end10239: + %t156 = phi { ptr, i64, i64 } [ { ptr @.str.6875, i64 0, i64 0 }, %or.bend10238 ], [ %t154, %or.ok10237 ] store { ptr, i64, i64 } %t156, ptr %a157 %t158 = load { ptr, i64, i64 }, ptr %a75 call void @finch.host.remove({ ptr, i64, i64 } %t158) @@ -104765,7 +104884,7 @@ or.end10218: call void @finch.host.remove({ ptr, i64, i64 } %t159) %t160 = load { ptr, i64, i64 }, ptr %a157 store { ptr, i64, i64 } %t160, ptr %a162 - store { ptr, i64, i64 } { ptr @.str.6866, i64 46, i64 0 }, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.6876, i64 46, i64 0 }, ptr %a163 call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) %t164 = load { ptr, i64, i64 }, ptr %a161 %t165 = load { ptr, i64, i64 }, ptr %a3 @@ -104776,7 +104895,7 @@ or.end10218: call void @finch_str_drop(ptr %a169) %t170 = load { ptr, i64, i64 }, ptr %a166 store { ptr, i64, i64 } %t170, ptr %a172 - store { ptr, i64, i64 } { ptr @.str.6867, i64 30, i64 0 }, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.6877, i64 30, i64 0 }, ptr %a173 call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) store { ptr, i64, i64 } %t170, ptr %a174 call void @finch_str_drop(ptr %a174) @@ -104790,7 +104909,7 @@ or.end10218: call void @finch_str_drop(ptr %a13) %t176 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t175, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t176 -endif10214: +endif10235: %t177 = load { ptr, i64, i64 }, ptr %a86 call void @finch.host.remove({ ptr, i64, i64 } %t177) %t178 = load { ptr, i64, i64 }, ptr %a75 @@ -104841,251 +104960,261 @@ entry: %a88 = alloca { ptr, i64, i64 }, align 16 %a89 = alloca { ptr, i64, i64 }, align 16 %a92 = alloca { ptr, i64, i64 }, align 16 - %a97 = alloca { ptr, i64, i64 }, align 16 - %a98 = alloca { ptr, i64, i64 }, align 16 - %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 %a102 = alloca { ptr, i64, i64 }, align 16 %a105 = alloca { ptr, i64, i64 }, align 16 - %a106 = alloca { ptr, i64, i64 }, align 16 - %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 %a112 = alloca { ptr, i64, i64 }, align 16 - %a113 = alloca { ptr, i64, i64 }, align 16 - %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 %a116 = alloca { ptr, i64, i64 }, align 16 %a117 = alloca { ptr, i64, i64 }, align 16 - %a118 = alloca { ptr, i64, i64 }, align 16 %a119 = alloca { ptr, i64, i64 }, align 16 - %a123 = alloca { ptr, i64, i64 }, align 16 - %a124 = alloca { ptr, i64, i64 }, align 16 - %a125 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 %a126 = alloca { ptr, i64, i64 }, align 16 - %a130 = alloca { ptr, i64, i64 }, align 16 - %a131 = alloca { ptr, i64, i64 }, align 16 - %a132 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 %a135 = alloca { ptr, i64, i64 }, align 16 %a136 = alloca { ptr, i64, i64 }, align 16 - %a137 = alloca { ptr, i64, i64 }, align 16 %a138 = alloca { ptr, i64, i64 }, align 16 - %a142 = alloca { ptr, i64, i64 }, align 16 - %a143 = alloca { ptr, i64, i64 }, align 16 - %a144 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 %a145 = alloca { ptr, i64, i64 }, align 16 %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 %a148 = alloca { ptr, i64, i64 }, align 16 %a149 = alloca { ptr, i64, i64 }, align 16 - %a150 = alloca { ptr, i64, i64 }, align 16 %a151 = alloca { ptr, i64, i64 }, align 16 - %a155 = alloca { ptr, i64, i64 }, align 16 - %a156 = alloca { ptr, i64, i64 }, align 16 - %a157 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 %a158 = alloca { ptr, i64, i64 }, align 16 %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 %a161 = alloca { ptr, i64, i64 }, align 16 %a162 = alloca { ptr, i64, i64 }, align 16 - %a163 = alloca { ptr, i64, i64 }, align 16 %a164 = alloca { ptr, i64, i64 }, align 16 - %a168 = alloca { ptr, i64, i64 }, align 16 - %a169 = alloca { ptr, i64, i64 }, align 16 - %a170 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 %a171 = alloca { ptr, i64, i64 }, align 16 %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 %a174 = alloca { ptr, i64, i64 }, align 16 %a175 = alloca { ptr, i64, i64 }, align 16 - %a176 = alloca { ptr, i64, i64 }, align 16 %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 %a180 = alloca { ptr, i64, i64 }, align 16 - %a181 = alloca i64, align 16 - %a186 = alloca { ptr, i64, i64 }, align 16 - %a187 = alloca { ptr, i64, i64 }, align 16 - %a188 = alloca { ptr, i64, i64 }, align 16 - %a193 = alloca { ptr, i64, i64 }, align 16 - %a201 = alloca { ptr, i64, i64 }, align 16 - %a213 = alloca { ptr, i64, i64 }, align 16 - %a214 = alloca { ptr, i64, i64 }, align 16 - %a215 = alloca { ptr, i64, i64 }, align 16 - %a219 = alloca { ptr, i64, i64 }, align 16 - %a220 = alloca { ptr, i64, i64 }, align 16 - %a221 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca i64, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 %a222 = alloca { ptr, i64, i64 }, align 16 %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 %a225 = alloca { ptr, i64, i64 }, align 16 %a226 = alloca { ptr, i64, i64 }, align 16 - %a227 = alloca { ptr, i64, i64 }, align 16 %a228 = alloca { ptr, i64, i64 }, align 16 - %a232 = alloca { ptr, i64, i64 }, align 16 - %a233 = alloca { ptr, i64, i64 }, align 16 - %a234 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 %a235 = alloca { ptr, i64, i64 }, align 16 %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 %a238 = alloca { ptr, i64, i64 }, align 16 %a239 = alloca { ptr, i64, i64 }, align 16 - %a240 = alloca { ptr, i64, i64 }, align 16 %a241 = alloca { ptr, i64, i64 }, align 16 - %a246 = alloca { ptr, i64, i64 }, align 16 - %a247 = alloca { ptr, i64, i64 }, align 16 - %a248 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 %a249 = alloca { ptr, i64, i64 }, align 16 %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 %a252 = alloca { ptr, i64, i64 }, align 16 - %a257 = alloca { ptr, i64, i64 }, align 16 - %a258 = alloca { ptr, i64, i64 }, align 16 - %a259 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 %a262 = alloca { ptr, i64, i64 }, align 16 - %a268 = alloca { ptr, i64, i64 }, align 16 - %a269 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 %a270 = alloca { ptr, i64, i64 }, align 16 - %a273 = alloca { ptr, i64, i64 }, align 16 %a275 = alloca { ptr, i64, i64 }, align 16 %a276 = alloca { ptr, i64, i64 }, align 16 %a277 = alloca { ptr, i64, i64 }, align 16 - %a280 = alloca { ptr, i64, i64 }, align 16 - %a281 = alloca { ptr, i64, i64 }, align 16 - %a283 = alloca i64, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 %a291 = alloca { ptr, i64, i64 }, align 16 - %a293 = alloca { ptr, i64, i64 }, align 16 - %a294 = alloca { ptr, i64, i64 }, align 16 - %a295 = alloca { ptr, i64, i64 }, align 16 - %a300 = alloca { ptr, i64, i64 }, align 16 - %a301 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 %a302 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 %a306 = alloca { ptr, i64, i64 }, align 16 - %a308 = alloca { ptr, i64, i64 }, align 16 %a309 = alloca { ptr, i64, i64 }, align 16 %a310 = alloca { ptr, i64, i64 }, align 16 - %a311 = alloca { ptr, i64, i64 }, align 16 - %a312 = alloca { ptr, i64, i64 }, align 16 - %a314 = alloca { ptr, i64, i64 }, align 16 - %a315 = alloca { ptr, i64, i64 }, align 16 - %a316 = alloca { ptr, i64, i64 }, align 16 - %a317 = alloca { ptr, i64, i64 }, align 16 - %a319 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca i64, align 16 %a320 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 %a324 = alloca { ptr, i64, i64 }, align 16 - %a326 = alloca { ptr, i64, i64 }, align 16 - %a327 = alloca { ptr, i64, i64 }, align 16 - %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 %a331 = alloca { ptr, i64, i64 }, align 16 - %a332 = alloca { ptr, i64, i64 }, align 16 - %a333 = alloca { ptr, i64, i64 }, align 16 - %a334 = alloca { ptr, i64, i64 }, align 16 - %a336 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 %a337 = alloca { ptr, i64, i64 }, align 16 %a338 = alloca { ptr, i64, i64 }, align 16 %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 %a343 = alloca { ptr, i64, i64 }, align 16 %a344 = alloca { ptr, i64, i64 }, align 16 %a345 = alloca { ptr, i64, i64 }, align 16 %a346 = alloca { ptr, i64, i64 }, align 16 - %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 %a349 = alloca { ptr, i64, i64 }, align 16 - %a350 = alloca { ptr, i64, i64 }, align 16 - %a351 = alloca { ptr, i64, i64 }, align 16 - %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 %a356 = alloca { ptr, i64, i64 }, align 16 %a357 = alloca { ptr, i64, i64 }, align 16 - %a358 = alloca { ptr, i64, i64 }, align 16 - %a359 = alloca { ptr, i64, i64 }, align 16 %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 %a362 = alloca { ptr, i64, i64 }, align 16 %a363 = alloca { ptr, i64, i64 }, align 16 - %a364 = alloca { ptr, i64, i64 }, align 16 %a365 = alloca { ptr, i64, i64 }, align 16 - %a369 = alloca { ptr, i64, i64 }, align 16 - %a370 = alloca { ptr, i64, i64 }, align 16 - %a371 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 %a372 = alloca { ptr, i64, i64 }, align 16 %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 %a375 = alloca { ptr, i64, i64 }, align 16 %a376 = alloca { ptr, i64, i64 }, align 16 - %a377 = alloca { ptr, i64, i64 }, align 16 %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 %a381 = alloca { ptr, i64, i64 }, align 16 - %a382 = alloca i64, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 %a386 = alloca { ptr, i64, i64 }, align 16 %a387 = alloca { ptr, i64, i64 }, align 16 %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 %a393 = alloca { ptr, i64, i64 }, align 16 - %a395 = alloca { ptr, i64, i64 }, align 16 - %a396 = alloca { ptr, i64, i64 }, align 16 - %a397 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 %a401 = alloca { ptr, i64, i64 }, align 16 %a402 = alloca { ptr, i64, i64 }, align 16 - %a403 = alloca { ptr, i64, i64 }, align 16 %a404 = alloca { ptr, i64, i64 }, align 16 - %a412 = alloca { ptr, i64, i64 }, align 16 - %a419 = alloca { ptr, i64, i64 }, align 16 - %a420 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca i64, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 %a427 = alloca { ptr, i64, i64 }, align 16 - %a428 = alloca { ptr, i64, i64 }, align 16 - %a429 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 %a433 = alloca { ptr, i64, i64 }, align 16 - %a434 = alloca { ptr, i64, i64 }, align 16 - %a435 = alloca { ptr, i64, i64 }, align 16 - %a436 = alloca { ptr, i64, i64 }, align 16 - %a437 = alloca { ptr, i64, i64 }, align 16 - %a440 = alloca { ptr, i64, i64 }, align 16 - %a442 = alloca { ptr, i64, i64 }, align 16 - %a443 = alloca { ptr, i64, i64 }, align 16 - %a444 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 %a448 = alloca { ptr, i64, i64 }, align 16 %a449 = alloca { ptr, i64, i64 }, align 16 - %a450 = alloca { ptr, i64, i64 }, align 16 - %a455 = alloca { ptr, i64, i64 }, align 16 %a456 = alloca { ptr, i64, i64 }, align 16 %a457 = alloca { ptr, i64, i64 }, align 16 - %a461 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 %a462 = alloca { ptr, i64, i64 }, align 16 %a463 = alloca { ptr, i64, i64 }, align 16 %a464 = alloca { ptr, i64, i64 }, align 16 %a465 = alloca { ptr, i64, i64 }, align 16 - %a468 = alloca { ptr, i64, i64 }, align 16 - %a470 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 %a471 = alloca { ptr, i64, i64 }, align 16 %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 %a477 = alloca { ptr, i64, i64 }, align 16 %a478 = alloca { ptr, i64, i64 }, align 16 %a479 = alloca { ptr, i64, i64 }, align 16 - %a480 = alloca { ptr, i64, i64 }, align 16 - %a481 = alloca { ptr, i64, i64 }, align 16 %a484 = alloca { ptr, i64, i64 }, align 16 - %a488 = alloca { ptr, i64, i64 }, align 16 - %a489 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 %a494 = alloca { ptr, i64, i64 }, align 16 - %a495 = alloca { ptr, i64, i64 }, align 16 - %a496 = alloca { ptr, i64, i64 }, align 16 %a497 = alloca { ptr, i64, i64 }, align 16 - %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 %a500 = alloca { ptr, i64, i64 }, align 16 %a501 = alloca { ptr, i64, i64 }, align 16 - %a502 = alloca { ptr, i64, i64 }, align 16 - %a503 = alloca { ptr, i64, i64 }, align 16 %a506 = alloca { ptr, i64, i64 }, align 16 - %a507 = alloca i64, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 %a509 = alloca { ptr, i64, i64 }, align 16 %a510 = alloca { ptr, i64, i64 }, align 16 - %a511 = alloca { ptr, i64, i64 }, align 16 - %a516 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 %a518 = alloca { ptr, i64, i64 }, align 16 - %a521 = alloca i64, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 %a529 = alloca { ptr, i64, i64 }, align 16 - %a536 = alloca { ptr, i64, i64 }, align 16 - %a537 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca i64, align 16 %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 %a540 = alloca { ptr, i64, i64 }, align 16 - %a541 = alloca { ptr, i64, i64 }, align 16 - %a542 = alloca { ptr, i64, i64 }, align 16 - %a543 = alloca { ptr, i64, i64 }, align 16 - %a551 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca i64, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 store %S.linker.Build %p0, ptr %a1 store %S.platform.Target %p1, ptr %a2 store %S.cimport.CImports %p2, ptr %a3 - %t4 = extractvalue { ptr, i64, i64 } { ptr @.str.6868, i64 11, i64 0 }, 0 + %t4 = extractvalue { ptr, i64, i64 } { ptr @.str.6878, i64 11, i64 0 }, 0 %t5 = icmp eq ptr %t4, null - %t6 = select i1 %t5, ptr @.str.6869, ptr %t4 + %t6 = select i1 %t5, ptr @.str.6879, ptr %t4 %t7 = call ptr @getenv(ptr %t6) store { ptr, i64, i64 } zeroinitializer, ptr %a8 call void @finch_str_from_c(ptr %a8, ptr %t7) @@ -105097,14 +105226,14 @@ entry: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp eq i64 %t15, 0 - br i1 %t16, label %then10219, label %endif10221 -then10219: + br i1 %t16, label %then10240, label %endif10242 +then10240: %t17 = load { ptr, i64, i64 }, ptr %a13 - store { ptr, i64, i64 } { ptr @.str.6870, i64 5, i64 0 }, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.6880, i64 5, i64 0 }, ptr %a13 store { ptr, i64, i64 } %t17, ptr %a18 call void @finch_str_drop(ptr %a18) - br label %endif10221 -endif10221: + br label %endif10242 +endif10242: %t19 = load { ptr, i64, i64 }, ptr %a13 store { ptr, i64, i64 } %t19, ptr %a20 call void @finch_str_copy(ptr %a21, ptr %a20) @@ -105112,8 +105241,8 @@ endif10221: store { ptr, i64, i64 } %t22, ptr %a23 %t24 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t25 = load i1, ptr %t24 - br i1 %t25, label %then10222, label %else10223 -then10222: + br i1 %t25, label %then10243, label %else10244 +then10243: %t26 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 7 %t27 = load { ptr, i64, i64 }, ptr %t26 store { ptr, i64, i64 } %t27, ptr %a28 @@ -105123,22 +105252,22 @@ then10222: store { ptr, i64, i64 } %t30, ptr %a23 store { ptr, i64, i64 } %t31, ptr %a32 call void @finch_str_drop(ptr %a32) - br label %endif10224 -else10223: - %t33 = extractvalue { ptr, i64, i64 } { ptr @.str.6871, i64 8, i64 0 }, 0 + br label %endif10245 +else10244: + %t33 = extractvalue { ptr, i64, i64 } { ptr @.str.6881, i64 8, i64 0 }, 0 %t34 = icmp eq ptr %t33, null - %t35 = select i1 %t34, ptr @.str.6872, ptr %t33 + %t35 = select i1 %t34, ptr @.str.6882, ptr %t33 %t36 = call ptr @getenv(ptr %t35) store { ptr, i64, i64 } zeroinitializer, ptr %a37 call void @finch_str_from_c(ptr %a37, ptr %t36) %t38 = load { ptr, i64, i64 }, ptr %a37 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp sgt i64 %t39, 0 - br i1 %t40, label %then10225, label %endif10227 -then10225: - %t41 = extractvalue { ptr, i64, i64 } { ptr @.str.6873, i64 8, i64 0 }, 0 + br i1 %t40, label %then10246, label %endif10248 +then10246: + %t41 = extractvalue { ptr, i64, i64 } { ptr @.str.6883, i64 8, i64 0 }, 0 %t42 = icmp eq ptr %t41, null - %t43 = select i1 %t42, ptr @.str.6874, ptr %t41 + %t43 = select i1 %t42, ptr @.str.6884, ptr %t41 %t44 = call ptr @getenv(ptr %t43) store { ptr, i64, i64 } zeroinitializer, ptr %a45 call void @finch_str_from_c(ptr %a45, ptr %t44) @@ -105150,10 +105279,10 @@ then10225: store { ptr, i64, i64 } %t49, ptr %a23 store { ptr, i64, i64 } %t50, ptr %a51 call void @finch_str_drop(ptr %a51) - br label %endif10227 -endif10227: - br label %endif10224 -endif10224: + br label %endif10248 +endif10248: + br label %endif10245 +endif10245: %t52 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 2 %t53 = load { ptr, i64, i64 }, ptr %t52 %t54 = load %S.platform.Target, ptr %a2 @@ -105163,34 +105292,34 @@ endif10224: %t58 = xor i1 %t57, true %t59 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 2 %t60 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 1 - br i1 %t58, label %or.failed10228, label %or.ok10229 -or.failed10228: + br i1 %t58, label %or.failed10249, label %or.ok10250 +or.failed10249: store { ptr, i64, i64 } %t59, ptr %a61 %t62 = load { ptr, i64, i64 }, ptr %a61 %t63 = extractvalue { ptr, i64, i64 } %t62, 1 %t64 = trunc i64 %t63 to i32 %t65 = extractvalue { ptr, i64, i64 } %t62, 0 %t66 = icmp eq ptr %t65, null - %t67 = select i1 %t66, ptr @.str.6875, ptr %t65 - %t68 = call i32 (ptr, ...) @printf(ptr @.str.6876, i32 %t64, ptr %t67) - %t69 = call i32 (ptr, ...) @printf(ptr @.str.6877) + %t67 = select i1 %t66, ptr @.str.6885, ptr %t65 + %t68 = call i32 (ptr, ...) @printf(ptr @.str.6886, i32 %t64, ptr %t67) + %t69 = call i32 (ptr, ...) @printf(ptr @.str.6887) call void @finch_str_drop(ptr %a61) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 -or.ok10229: +or.ok10250: store { ptr, i64, i64 } %t60, ptr %a70 %t71 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t72 = load { ptr, i64, i64 }, ptr %t71 store { ptr, i64, i64 } %t72, ptr %a74 - store { ptr, i64, i64 } { ptr @.str.6878, i64 3, i64 0 }, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.6888, i64 3, i64 0 }, ptr %a75 call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) %t76 = load { ptr, i64, i64 }, ptr %a73 store { ptr, i64, i64 } %t76, ptr %a77 %t78 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 %t79 = load { ptr, i64, i64 }, ptr %t78 store { ptr, i64, i64 } %t79, ptr %a81 - store { ptr, i64, i64 } { ptr @.str.6879, i64 2, i64 0 }, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.6889, i64 2, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) %t83 = load { ptr, i64, i64 }, ptr %a80 store { ptr, i64, i64 } %t83, ptr %a84 @@ -105201,162 +105330,173 @@ or.ok10229: store { ptr, i64, i64 } %t87, ptr %a89 %t90 = call i32 @finch_write_file(ptr %a88, ptr %a89) %t91 = icmp ne i32 %t90, 0 - store { ptr, i64, i64 } { ptr @.str.6880, i64 0, i64 0 }, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.6890, i64 0, i64 0 }, ptr %a92 %t93 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 %t94 = load i1, ptr %t93 - br i1 %t94, label %then10230, label %endif10232 -then10230: - %t95 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 - %t96 = load { ptr, i64, i64 }, ptr %t95 - store { ptr, i64, i64 } { ptr @.str.6881, i64 10, i64 0 }, ptr %a98 - store { ptr, i64, i64 } %t96, ptr %a99 - call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) - %t100 = load { ptr, i64, i64 }, ptr %a97 - %t101 = load { ptr, i64, i64 }, ptr %a92 - store { ptr, i64, i64 } %t100, ptr %a92 - store { ptr, i64, i64 } %t101, ptr %a102 - call void @finch_str_drop(ptr %a102) - br label %endif10232 -endif10232: - %t103 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 - %t104 = load { ptr, i64, i64 }, ptr %t103 - store { ptr, i64, i64 } %t104, ptr %a106 - store { ptr, i64, i64 } { ptr @.str.6882, i64 4, i64 0 }, ptr %a107 - call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) - %t108 = load { ptr, i64, i64 }, ptr %a105 - store { ptr, i64, i64 } %t108, ptr %a109 - %t110 = load { ptr, i64, i64 }, ptr %a13 - %t111 = load { ptr, i64, i64 }, ptr %a92 - store { ptr, i64, i64 } %t110, ptr %a113 - store { ptr, i64, i64 } %t111, ptr %a114 - call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) - %t115 = load { ptr, i64, i64 }, ptr %a112 - store { ptr, i64, i64 } %t115, ptr %a117 - store { ptr, i64, i64 } { ptr @.str.6883, i64 1, i64 0 }, ptr %a118 - call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) - store { ptr, i64, i64 } %t115, ptr %a119 - call void @finch_str_drop(ptr %a119) - %t120 = load { ptr, i64, i64 }, ptr %a116 - %t121 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3 - %t122 = load { ptr, i64, i64 }, ptr %t121 - store { ptr, i64, i64 } %t120, ptr %a124 - store { ptr, i64, i64 } %t122, ptr %a125 - call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) - store { ptr, i64, i64 } %t120, ptr %a126 - call void @finch_str_drop(ptr %a126) - %t127 = load { ptr, i64, i64 }, ptr %a123 - %t128 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4 - %t129 = load { ptr, i64, i64 }, ptr %t128 - store { ptr, i64, i64 } %t127, ptr %a131 - store { ptr, i64, i64 } %t129, ptr %a132 - call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) - store { ptr, i64, i64 } %t127, ptr %a133 - call void @finch_str_drop(ptr %a133) - %t134 = load { ptr, i64, i64 }, ptr %a130 - store { ptr, i64, i64 } %t134, ptr %a136 - store { ptr, i64, i64 } { ptr @.str.6884, i64 7, i64 0 }, ptr %a137 - call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) - store { ptr, i64, i64 } %t134, ptr %a138 - call void @finch_str_drop(ptr %a138) - %t139 = load { ptr, i64, i64 }, ptr %a135 - %t140 = load { ptr, i64, i64 }, ptr %a77 - %t141 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t140) - store { ptr, i64, i64 } %t139, ptr %a143 - store { ptr, i64, i64 } %t141, ptr %a144 - call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) - store { ptr, i64, i64 } %t139, ptr %a145 - call void @finch_str_drop(ptr %a145) - store { ptr, i64, i64 } %t141, ptr %a146 - call void @finch_str_drop(ptr %a146) - %t147 = load { ptr, i64, i64 }, ptr %a142 - store { ptr, i64, i64 } %t147, ptr %a149 - store { ptr, i64, i64 } { ptr @.str.6885, i64 4, i64 0 }, ptr %a150 - call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) - store { ptr, i64, i64 } %t147, ptr %a151 - call void @finch_str_drop(ptr %a151) - %t152 = load { ptr, i64, i64 }, ptr %a148 - %t153 = load { ptr, i64, i64 }, ptr %a84 - %t154 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t153) - store { ptr, i64, i64 } %t152, ptr %a156 - store { ptr, i64, i64 } %t154, ptr %a157 - call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) - store { ptr, i64, i64 } %t152, ptr %a158 - call void @finch_str_drop(ptr %a158) - store { ptr, i64, i64 } %t154, ptr %a159 - call void @finch_str_drop(ptr %a159) - %t160 = load { ptr, i64, i64 }, ptr %a155 - store { ptr, i64, i64 } %t160, ptr %a162 - store { ptr, i64, i64 } { ptr @.str.6886, i64 3, i64 0 }, ptr %a163 - call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) - store { ptr, i64, i64 } %t160, ptr %a164 - call void @finch_str_drop(ptr %a164) - %t165 = load { ptr, i64, i64 }, ptr %a161 - %t166 = load { ptr, i64, i64 }, ptr %a109 - %t167 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t166) - store { ptr, i64, i64 } %t165, ptr %a169 - store { ptr, i64, i64 } %t167, ptr %a170 - call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) - store { ptr, i64, i64 } %t165, ptr %a171 - call void @finch_str_drop(ptr %a171) - store { ptr, i64, i64 } %t167, ptr %a172 - call void @finch_str_drop(ptr %a172) - %t173 = load { ptr, i64, i64 }, ptr %a168 - store { ptr, i64, i64 } %t173, ptr %a175 - store { ptr, i64, i64 } { ptr @.str.6887, i64 5, i64 0 }, ptr %a176 - call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) - store { ptr, i64, i64 } %t173, ptr %a177 - call void @finch_str_drop(ptr %a177) - %t178 = load { ptr, i64, i64 }, ptr %a174 - %t179 = call i64 @finch.host.run({ ptr, i64, i64 } %t178) - store { ptr, i64, i64 } %t178, ptr %a180 + br label %logic.from10251 +logic.from10251: + br i1 %t94, label %logic.end10253, label %logic.rhs10252 +logic.rhs10252: + %t95 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t96 = load i1, ptr %t95 + br label %logic.rend10254 +logic.rend10254: + br label %logic.end10253 +logic.end10253: + %t97 = phi i1 [ true, %logic.from10251 ], [ %t96, %logic.rend10254 ] + br i1 %t97, label %then10255, label %endif10257 +then10255: + %t98 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 + %t99 = load { ptr, i64, i64 }, ptr %t98 + store { ptr, i64, i64 } { ptr @.str.6891, i64 10, i64 0 }, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a100 + %t104 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t103, ptr %a92 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + br label %endif10257 +endif10257: + %t106 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6892, i64 4, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load { ptr, i64, i64 }, ptr %a13 + %t114 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t113, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.6893, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3 + %t125 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t123, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t123, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4 + %t132 = load { ptr, i64, i64 }, ptr %t131 + store { ptr, i64, i64 } %t130, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t130, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.6894, i64 7, i64 0 }, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t137, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + %t143 = load { ptr, i64, i64 }, ptr %a77 + %t144 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t143) + store { ptr, i64, i64 } %t142, ptr %a146 + store { ptr, i64, i64 } %t144, ptr %a147 + call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) + store { ptr, i64, i64 } %t142, ptr %a148 + call void @finch_str_drop(ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.6895, i64 4, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load { ptr, i64, i64 }, ptr %a84 + %t157 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t156) + store { ptr, i64, i64 } %t155, ptr %a159 + store { ptr, i64, i64 } %t157, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t155, ptr %a161 + call void @finch_str_drop(ptr %a161) + store { ptr, i64, i64 } %t157, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a158 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.6896, i64 3, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = load { ptr, i64, i64 }, ptr %a112 + %t170 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t169) + store { ptr, i64, i64 } %t168, ptr %a172 + store { ptr, i64, i64 } %t170, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t168, ptr %a174 + call void @finch_str_drop(ptr %a174) + store { ptr, i64, i64 } %t170, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } %t176, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.6897, i64 5, i64 0 }, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t176, ptr %a180 call void @finch_str_drop(ptr %a180) - store i64 %t179, ptr %a181 - %t182 = load { ptr, i64, i64 }, ptr %a77 - call void @finch.host.remove({ ptr, i64, i64 } %t182) - %t183 = load i64, ptr %a181 - %t184 = icmp ne i64 %t183, 0 - br i1 %t184, label %then10233, label %endif10235 -then10233: - %t185 = load { ptr, i64, i64 }, ptr %a109 - store { ptr, i64, i64 } %t185, ptr %a186 - store { ptr, i64, i64 } zeroinitializer, ptr %a187 - store { ptr, i64, i64 } zeroinitializer, ptr %a188 - %t189 = call i32 @finch_try_read_file(ptr %a187, ptr %a186, ptr %a188) - %t190 = icmp eq i32 %t189, 0 - %t191 = load { ptr, i64, i64 }, ptr %a188 - %t192 = load { ptr, i64, i64 }, ptr %a187 - br i1 %t190, label %or.failed10236, label %or.ok10237 -or.failed10236: - store { ptr, i64, i64 } %t191, ptr %a193 - call void @finch_str_drop(ptr %a193) - br label %or.bend10238 -or.bend10238: - br label %or.end10239 -or.ok10237: - br label %or.end10239 -or.end10239: - %t194 = phi { ptr, i64, i64 } [ { ptr @.str.6888, i64 0, i64 0 }, %or.bend10238 ], [ %t192, %or.ok10237 ] - %t195 = extractvalue { ptr, i64, i64 } %t194, 1 - %t196 = trunc i64 %t195 to i32 - %t197 = extractvalue { ptr, i64, i64 } %t194, 0 - %t198 = icmp eq ptr %t197, null - %t199 = select i1 %t198, ptr @.str.6889, ptr %t197 - %t200 = call i32 (ptr, ...) @printf(ptr @.str.6890, i32 %t196, ptr %t199) - store { ptr, i64, i64 } %t194, ptr %a201 - call void @finch_str_drop(ptr %a201) - %t202 = call i32 (ptr, ...) @printf(ptr @.str.6891) - %t203 = extractvalue { ptr, i64, i64 } { ptr @.str.6892, i64 46, i64 0 }, 1 - %t204 = trunc i64 %t203 to i32 - %t205 = extractvalue { ptr, i64, i64 } { ptr @.str.6892, i64 46, i64 0 }, 0 - %t206 = icmp eq ptr %t205, null - %t207 = select i1 %t206, ptr @.str.6893, ptr %t205 - %t208 = call i32 (ptr, ...) @printf(ptr @.str.6894, i32 %t204, ptr %t207) - %t209 = call i32 (ptr, ...) @printf(ptr @.str.6895) - %t210 = load { ptr, i64, i64 }, ptr %a84 - call void @finch.host.remove({ ptr, i64, i64 } %t210) - %t211 = load { ptr, i64, i64 }, ptr %a109 - call void @finch.host.remove({ ptr, i64, i64 } %t211) - call void @finch_str_drop(ptr %a109) + %t181 = load { ptr, i64, i64 }, ptr %a177 + %t182 = call i64 @finch.host.run({ ptr, i64, i64 } %t181) + store { ptr, i64, i64 } %t181, ptr %a183 + call void @finch_str_drop(ptr %a183) + store i64 %t182, ptr %a184 + %t185 = load { ptr, i64, i64 }, ptr %a77 + call void @finch.host.remove({ ptr, i64, i64 } %t185) + %t186 = load i64, ptr %a184 + %t187 = icmp ne i64 %t186, 0 + br i1 %t187, label %then10258, label %endif10260 +then10258: + %t188 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t188, ptr %a189 + store { ptr, i64, i64 } zeroinitializer, ptr %a190 + store { ptr, i64, i64 } zeroinitializer, ptr %a191 + %t192 = call i32 @finch_try_read_file(ptr %a190, ptr %a189, ptr %a191) + %t193 = icmp eq i32 %t192, 0 + %t194 = load { ptr, i64, i64 }, ptr %a191 + %t195 = load { ptr, i64, i64 }, ptr %a190 + br i1 %t193, label %or.failed10261, label %or.ok10262 +or.failed10261: + store { ptr, i64, i64 } %t194, ptr %a196 + call void @finch_str_drop(ptr %a196) + br label %or.bend10263 +or.bend10263: + br label %or.end10264 +or.ok10262: + br label %or.end10264 +or.end10264: + %t197 = phi { ptr, i64, i64 } [ { ptr @.str.6898, i64 0, i64 0 }, %or.bend10263 ], [ %t195, %or.ok10262 ] + %t198 = extractvalue { ptr, i64, i64 } %t197, 1 + %t199 = trunc i64 %t198 to i32 + %t200 = extractvalue { ptr, i64, i64 } %t197, 0 + %t201 = icmp eq ptr %t200, null + %t202 = select i1 %t201, ptr @.str.6899, ptr %t200 + %t203 = call i32 (ptr, ...) @printf(ptr @.str.6900, i32 %t199, ptr %t202) + store { ptr, i64, i64 } %t197, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = call i32 (ptr, ...) @printf(ptr @.str.6901) + %t206 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 1 + %t207 = trunc i64 %t206 to i32 + %t208 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 0 + %t209 = icmp eq ptr %t208, null + %t210 = select i1 %t209, ptr @.str.6903, ptr %t208 + %t211 = call i32 (ptr, ...) @printf(ptr @.str.6904, i32 %t207, ptr %t210) + %t212 = call i32 (ptr, ...) @printf(ptr @.str.6905) + %t213 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t213) + %t214 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t214) + call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) @@ -105364,503 +105504,323 @@ or.end10239: call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 -endif10235: - %t212 = load { ptr, i64, i64 }, ptr %a23 - store { ptr, i64, i64 } %t212, ptr %a214 - store { ptr, i64, i64 } { ptr @.str.6896, i64 1, i64 0 }, ptr %a215 - call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) - %t216 = load { ptr, i64, i64 }, ptr %a213 - %t217 = load { ptr, i64, i64 }, ptr %a84 - %t218 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t217) - store { ptr, i64, i64 } %t216, ptr %a220 - store { ptr, i64, i64 } %t218, ptr %a221 - call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) - store { ptr, i64, i64 } %t216, ptr %a222 - call void @finch_str_drop(ptr %a222) - store { ptr, i64, i64 } %t218, ptr %a223 - call void @finch_str_drop(ptr %a223) - %t224 = load { ptr, i64, i64 }, ptr %a219 - store { ptr, i64, i64 } %t224, ptr %a226 - store { ptr, i64, i64 } { ptr @.str.6897, i64 1, i64 0 }, ptr %a227 - call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) - store { ptr, i64, i64 } %t224, ptr %a228 - call void @finch_str_drop(ptr %a228) - %t229 = load { ptr, i64, i64 }, ptr %a225 - %t230 = load { ptr, i64, i64 }, ptr %a70 - %t231 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t230) - store { ptr, i64, i64 } %t229, ptr %a233 - store { ptr, i64, i64 } %t231, ptr %a234 - call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) - store { ptr, i64, i64 } %t229, ptr %a235 - call void @finch_str_drop(ptr %a235) - store { ptr, i64, i64 } %t231, ptr %a236 - call void @finch_str_drop(ptr %a236) - %t237 = load { ptr, i64, i64 }, ptr %a232 - store { ptr, i64, i64 } %t237, ptr %a239 - store { ptr, i64, i64 } { ptr @.str.6898, i64 4, i64 0 }, ptr %a240 - call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240) - store { ptr, i64, i64 } %t237, ptr %a241 - call void @finch_str_drop(ptr %a241) - %t242 = load { ptr, i64, i64 }, ptr %a238 - %t243 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 - %t244 = load { ptr, i64, i64 }, ptr %t243 - %t245 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t244) - store { ptr, i64, i64 } %t242, ptr %a247 - store { ptr, i64, i64 } %t245, ptr %a248 - call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) - store { ptr, i64, i64 } %t242, ptr %a249 - call void @finch_str_drop(ptr %a249) +endif10260: + %t215 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.6906, i64 1, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + %t219 = load { ptr, i64, i64 }, ptr %a216 + %t220 = load { ptr, i64, i64 }, ptr %a84 + %t221 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t220) + store { ptr, i64, i64 } %t219, ptr %a223 + store { ptr, i64, i64 } %t221, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t219, ptr %a225 + call void @finch_str_drop(ptr %a225) + store { ptr, i64, i64 } %t221, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a222 + store { ptr, i64, i64 } %t227, ptr %a229 + store { ptr, i64, i64 } { ptr @.str.6907, i64 1, i64 0 }, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + store { ptr, i64, i64 } %t227, ptr %a231 + call void @finch_str_drop(ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a228 + %t233 = load { ptr, i64, i64 }, ptr %a70 + %t234 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t233) + store { ptr, i64, i64 } %t232, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t232, ptr %a238 + call void @finch_str_drop(ptr %a238) + store { ptr, i64, i64 } %t234, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t240, ptr %a242 + store { ptr, i64, i64 } { ptr @.str.6908, i64 4, i64 0 }, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t240, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + %t246 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t247 = load { ptr, i64, i64 }, ptr %t246 + %t248 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t247) store { ptr, i64, i64 } %t245, ptr %a250 - call void @finch_str_drop(ptr %a250) - %t251 = load { ptr, i64, i64 }, ptr %a246 - store { ptr, i64, i64 } %t251, ptr %a252 - %t253 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2 - %t254 = load i1, ptr %t253 - %t255 = xor i1 %t254, true - br i1 %t255, label %then10240, label %endif10242 -then10240: - %t256 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t256, ptr %a258 - store { ptr, i64, i64 } { ptr @.str.6899, i64 4, i64 0 }, ptr %a259 - call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) - %t260 = load { ptr, i64, i64 }, ptr %a257 - %t261 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t260, ptr %a252 - store { ptr, i64, i64 } %t261, ptr %a262 - call void @finch_str_drop(ptr %a262) - br label %endif10242 -endif10242: - %t263 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5 - %t264 = load i1, ptr %t263 - br i1 %t264, label %then10243, label %endif10245 -then10243: - %t265 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3 - %t266 = load i1, ptr %t265 - br i1 %t266, label %then10246, label %else10247 -then10246: - %t267 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t267, ptr %a269 - store { ptr, i64, i64 } { ptr @.str.6900, i64 12, i64 0 }, ptr %a270 - call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) - %t271 = load { ptr, i64, i64 }, ptr %a268 - %t272 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t271, ptr %a252 - store { ptr, i64, i64 } %t272, ptr %a273 - call void @finch_str_drop(ptr %a273) - br label %endif10248 -else10247: - %t274 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t245, ptr %a252 + call void @finch_str_drop(ptr %a252) + store { ptr, i64, i64 } %t248, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a249 + store { ptr, i64, i64 } %t254, ptr %a255 + %t256 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2 + %t257 = load i1, ptr %t256 + %t258 = xor i1 %t257, true + br i1 %t258, label %then10265, label %endif10267 +then10265: + %t259 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.6909, i64 4, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a260 + %t264 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t263, ptr %a255 + store { ptr, i64, i64 } %t264, ptr %a265 + call void @finch_str_drop(ptr %a265) + br label %endif10267 +endif10267: + %t266 = extractvalue { ptr, i64, i64 } { ptr @.str.6910, i64 13, i64 0 }, 0 + %t267 = icmp eq ptr %t266, null + %t268 = select i1 %t267, ptr @.str.6911, ptr %t266 + %t269 = call ptr @getenv(ptr %t268) + store { ptr, i64, i64 } zeroinitializer, ptr %a270 + call void @finch_str_from_c(ptr %a270, ptr %t269) + %t271 = load { ptr, i64, i64 }, ptr %a270 + %t272 = extractvalue { ptr, i64, i64 } %t271, 1 + %t273 = icmp sgt i64 %t272, 0 + br i1 %t273, label %then10268, label %endif10270 +then10268: + %t274 = load { ptr, i64, i64 }, ptr %a255 store { ptr, i64, i64 } %t274, ptr %a276 - store { ptr, i64, i64 } { ptr @.str.6901, i64 8, i64 0 }, ptr %a277 + store { ptr, i64, i64 } { ptr @.str.6912, i64 1, i64 0 }, ptr %a277 call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) %t278 = load { ptr, i64, i64 }, ptr %a275 - %t279 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t278, ptr %a252 - store { ptr, i64, i64 } %t279, ptr %a280 - call void @finch_str_drop(ptr %a280) - br label %endif10248 -endif10248: - br label %endif10245 -endif10245: - store { ptr, i64, i64 } zeroinitializer, ptr %a281 - %t282 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6 - store i64 0, ptr %a283 - br label %each.cond10249 -each.cond10249: - %t284 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 - %t285 = load i64, ptr %t284 - %t286 = load i64, ptr %a283 - %t287 = icmp slt i64 %t286, %t285 - br i1 %t287, label %each.body10250, label %each.end10252 -each.body10250: - %t288 = load ptr, ptr %t282 - %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i64 %t286 - %t290 = load { ptr, i64, i64 }, ptr %t289 + %t279 = extractvalue { ptr, i64, i64 } { ptr @.str.6913, i64 13, i64 0 }, 0 + %t280 = icmp eq ptr %t279, null + %t281 = select i1 %t280, ptr @.str.6914, ptr %t279 + %t282 = call ptr @getenv(ptr %t281) + store { ptr, i64, i64 } zeroinitializer, ptr %a283 + call void @finch_str_from_c(ptr %a283, ptr %t282) + %t284 = load { ptr, i64, i64 }, ptr %a283 + store { ptr, i64, i64 } %t278, ptr %a286 + store { ptr, i64, i64 } %t284, ptr %a287 + call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287) + store { ptr, i64, i64 } %t278, ptr %a288 + call void @finch_str_drop(ptr %a288) + %t289 = load { ptr, i64, i64 }, ptr %a285 + %t290 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t289, ptr %a255 store { ptr, i64, i64 } %t290, ptr %a291 - %t292 = load { ptr, i64, i64 }, ptr %a291 - store { ptr, i64, i64 } %t292, ptr %a293 - store { ptr, i64, i64 } { ptr @.str.6903, i64 2, i64 0 }, ptr %a295 - %t296 = call i32 @finch_str_ends(ptr %a293, ptr %a295) - %t297 = icmp ne i32 %t296, 0 - br i1 %t297, label %then10253, label %else10254 -then10253: - %t298 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 - %t299 = load { ptr, i64, i64 }, ptr %t298 - store { ptr, i64, i64 } %t299, ptr %a301 - store { ptr, i64, i64 } { ptr @.str.6904, i64 1, i64 0 }, ptr %a302 - call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) - %t303 = load { ptr, i64, i64 }, ptr %a300 - %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %a281, i32 0, i32 1 - %t305 = load i64, ptr %t304 - call void @finch_str_from_int(ptr %a306, i64 %t305) - %t307 = load { ptr, i64, i64 }, ptr %a306 - store { ptr, i64, i64 } %t303, ptr %a309 - store { ptr, i64, i64 } %t307, ptr %a310 - call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) - store { ptr, i64, i64 } %t303, ptr %a311 - call void @finch_str_drop(ptr %a311) - store { ptr, i64, i64 } %t307, ptr %a312 - call void @finch_str_drop(ptr %a312) - %t313 = load { ptr, i64, i64 }, ptr %a308 - store { ptr, i64, i64 } %t313, ptr %a315 - store { ptr, i64, i64 } { ptr @.str.6905, i64 2, i64 0 }, ptr %a316 - call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) - store { ptr, i64, i64 } %t313, ptr %a317 - call void @finch_str_drop(ptr %a317) - %t318 = load { ptr, i64, i64 }, ptr %a314 - store { ptr, i64, i64 } %t318, ptr %a319 - store { ptr, i64, i64 } { ptr @.str.6906, i64 6, i64 0 }, ptr %a320 - %t321 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 - %t322 = load i1, ptr %t321 - br i1 %t322, label %then10256, label %endif10258 -then10256: - %t323 = load { ptr, i64, i64 }, ptr %a320 - store { ptr, i64, i64 } { ptr @.str.6907, i64 0, i64 0 }, ptr %a320 - store { ptr, i64, i64 } %t323, ptr %a324 - call void @finch_str_drop(ptr %a324) - br label %endif10258 -endif10258: - %t325 = load { ptr, i64, i64 }, ptr %a23 - store { ptr, i64, i64 } %t325, ptr %a327 - store { ptr, i64, i64 } { ptr @.str.6908, i64 4, i64 0 }, ptr %a328 - call void @finch_str_concat(ptr %a326, ptr %a327, ptr %a328) - %t329 = load { ptr, i64, i64 }, ptr %a326 - %t330 = load { ptr, i64, i64 }, ptr %a320 - store { ptr, i64, i64 } %t329, ptr %a332 - store { ptr, i64, i64 } %t330, ptr %a333 - call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333) - store { ptr, i64, i64 } %t329, ptr %a334 - call void @finch_str_drop(ptr %a334) - %t335 = load { ptr, i64, i64 }, ptr %a331 - store { ptr, i64, i64 } %t335, ptr %a337 - store { ptr, i64, i64 } { ptr @.str.6909, i64 4, i64 0 }, ptr %a338 - call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) - store { ptr, i64, i64 } %t335, ptr %a339 - call void @finch_str_drop(ptr %a339) - %t340 = load { ptr, i64, i64 }, ptr %a336 - %t341 = load { ptr, i64, i64 }, ptr %a291 - %t342 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t341) - store { ptr, i64, i64 } %t340, ptr %a344 - store { ptr, i64, i64 } %t342, ptr %a345 - call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) - store { ptr, i64, i64 } %t340, ptr %a346 - call void @finch_str_drop(ptr %a346) - store { ptr, i64, i64 } %t342, ptr %a347 - call void @finch_str_drop(ptr %a347) - %t348 = load { ptr, i64, i64 }, ptr %a343 - store { ptr, i64, i64 } %t348, ptr %a350 - store { ptr, i64, i64 } { ptr @.str.6910, i64 4, i64 0 }, ptr %a351 - call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) - store { ptr, i64, i64 } %t348, ptr %a352 - call void @finch_str_drop(ptr %a352) - %t353 = load { ptr, i64, i64 }, ptr %a349 - %t354 = load { ptr, i64, i64 }, ptr %a319 - %t355 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t354) - store { ptr, i64, i64 } %t353, ptr %a357 - store { ptr, i64, i64 } %t355, ptr %a358 - call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358) - store { ptr, i64, i64 } %t353, ptr %a359 - call void @finch_str_drop(ptr %a359) - store { ptr, i64, i64 } %t355, ptr %a360 - call void @finch_str_drop(ptr %a360) - %t361 = load { ptr, i64, i64 }, ptr %a356 - store { ptr, i64, i64 } %t361, ptr %a363 - store { ptr, i64, i64 } { ptr @.str.6911, i64 3, i64 0 }, ptr %a364 - call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) - store { ptr, i64, i64 } %t361, ptr %a365 - call void @finch_str_drop(ptr %a365) - %t366 = load { ptr, i64, i64 }, ptr %a362 - %t367 = load { ptr, i64, i64 }, ptr %a109 - %t368 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t367) - store { ptr, i64, i64 } %t366, ptr %a370 - store { ptr, i64, i64 } %t368, ptr %a371 - call void @finch_str_concat(ptr %a369, ptr %a370, ptr %a371) - store { ptr, i64, i64 } %t366, ptr %a372 - call void @finch_str_drop(ptr %a372) - store { ptr, i64, i64 } %t368, ptr %a373 - call void @finch_str_drop(ptr %a373) - %t374 = load { ptr, i64, i64 }, ptr %a369 - store { ptr, i64, i64 } %t374, ptr %a376 - store { ptr, i64, i64 } { ptr @.str.6912, i64 5, i64 0 }, ptr %a377 - call void @finch_str_concat(ptr %a375, ptr %a376, ptr %a377) - store { ptr, i64, i64 } %t374, ptr %a378 - call void @finch_str_drop(ptr %a378) - %t379 = load { ptr, i64, i64 }, ptr %a375 - %t380 = call i64 @finch.host.run({ ptr, i64, i64 } %t379) - store { ptr, i64, i64 } %t379, ptr %a381 - call void @finch_str_drop(ptr %a381) - store i64 %t380, ptr %a382 - %t383 = load i64, ptr %a382 - %t384 = icmp ne i64 %t383, 0 - br i1 %t384, label %then10259, label %endif10261 -then10259: - %t385 = load { ptr, i64, i64 }, ptr %a109 - store { ptr, i64, i64 } %t385, ptr %a386 - store { ptr, i64, i64 } zeroinitializer, ptr %a387 - store { ptr, i64, i64 } zeroinitializer, ptr %a388 - %t389 = call i32 @finch_try_read_file(ptr %a387, ptr %a386, ptr %a388) - %t390 = icmp eq i32 %t389, 0 - %t391 = load { ptr, i64, i64 }, ptr %a388 - %t392 = load { ptr, i64, i64 }, ptr %a387 - br i1 %t390, label %or.failed10262, label %or.ok10263 -or.failed10262: - store { ptr, i64, i64 } %t391, ptr %a393 - call void @finch_str_drop(ptr %a393) - br label %or.bend10264 -or.bend10264: - br label %or.end10265 -or.ok10263: - br label %or.end10265 -or.end10265: - %t394 = phi { ptr, i64, i64 } [ { ptr @.str.6913, i64 0, i64 0 }, %or.bend10264 ], [ %t392, %or.ok10263 ] - store { ptr, i64, i64 } %t394, ptr %a396 - store { ptr, i64, i64 } { ptr @.str.6914, i64 24, i64 0 }, ptr %a397 - call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) - store { ptr, i64, i64 } %t394, ptr %a398 - call void @finch_str_drop(ptr %a398) - %t399 = load { ptr, i64, i64 }, ptr %a395 - %t400 = load { ptr, i64, i64 }, ptr %a291 - store { ptr, i64, i64 } %t399, ptr %a402 - store { ptr, i64, i64 } %t400, ptr %a403 - call void @finch_str_concat(ptr %a401, ptr %a402, ptr %a403) - store { ptr, i64, i64 } %t399, ptr %a404 - call void @finch_str_drop(ptr %a404) - %t405 = load { ptr, i64, i64 }, ptr %a401 - %t406 = extractvalue { ptr, i64, i64 } %t405, 1 - %t407 = trunc i64 %t406 to i32 - %t408 = extractvalue { ptr, i64, i64 } %t405, 0 - %t409 = icmp eq ptr %t408, null - %t410 = select i1 %t409, ptr @.str.6915, ptr %t408 - %t411 = call i32 (ptr, ...) @printf(ptr @.str.6916, i32 %t407, ptr %t410) - store { ptr, i64, i64 } %t405, ptr %a412 - call void @finch_str_drop(ptr %a412) - %t413 = call i32 (ptr, ...) @printf(ptr @.str.6917) - %t414 = load { ptr, i64, i64 }, ptr %a84 - call void @finch.host.remove({ ptr, i64, i64 } %t414) - %t415 = load { ptr, i64, i64 }, ptr %a109 - call void @finch.host.remove({ ptr, i64, i64 } %t415) - %t416 = load { ptr, i64, i64 }, ptr %a319 - call void @finch.host.remove({ ptr, i64, i64 } %t416) - call void @finch_str_drop(ptr %a320) - call void @finch_str_drop(ptr %a319) - call void @finch.drop.arr_str(ptr %a281) - call void @finch_str_drop(ptr %a252) - call void @finch_str_drop(ptr %a109) - call void @finch_str_drop(ptr %a92) - call void @finch_str_drop(ptr %a84) - call void @finch_str_drop(ptr %a77) - call void @finch_str_drop(ptr %a70) - call void @finch_str_drop(ptr %a23) - call void @finch_str_drop(ptr %a13) - ret i64 1 -endif10261: - %t417 = getelementptr inbounds { ptr, i64, i64 }, ptr %a281, i32 0, i32 1 - %t418 = load { ptr, i64, i64 }, ptr %a319 - store { ptr, i64, i64 } %t418, ptr %a419 - call void @finch_str_copy(ptr %a420, ptr %a419) - %t421 = load { ptr, i64, i64 }, ptr %a420 - %t422 = load i64, ptr %t417 - %t423 = add i64 %t422, 1 - call void @finch_arr_reserve(ptr %a281, i64 %t423, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) - %t424 = load ptr, ptr %a281 - %t425 = getelementptr inbounds { ptr, i64, i64 }, ptr %t424, i64 %t422 - store { ptr, i64, i64 } %t421, ptr %t425 - store i64 %t423, ptr %t417 - %t426 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t426, ptr %a428 - store { ptr, i64, i64 } { ptr @.str.6918, i64 1, i64 0 }, ptr %a429 - call void @finch_str_concat(ptr %a427, ptr %a428, ptr %a429) - %t430 = load { ptr, i64, i64 }, ptr %a427 - %t431 = load { ptr, i64, i64 }, ptr %a319 - %t432 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t431) - store { ptr, i64, i64 } %t430, ptr %a434 - store { ptr, i64, i64 } %t432, ptr %a435 - call void @finch_str_concat(ptr %a433, ptr %a434, ptr %a435) - store { ptr, i64, i64 } %t430, ptr %a436 - call void @finch_str_drop(ptr %a436) - store { ptr, i64, i64 } %t432, ptr %a437 - call void @finch_str_drop(ptr %a437) - %t438 = load { ptr, i64, i64 }, ptr %a433 - %t439 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t438, ptr %a252 - store { ptr, i64, i64 } %t439, ptr %a440 - call void @finch_str_drop(ptr %a440) - call void @finch_str_drop(ptr %a320) - call void @finch_str_drop(ptr %a319) - br label %endif10255 -else10254: - %t441 = load { ptr, i64, i64 }, ptr %a291 - store { ptr, i64, i64 } %t441, ptr %a442 - store { ptr, i64, i64 } { ptr @.str.6920, i64 2, i64 0 }, ptr %a444 - %t445 = call i32 @finch_str_ends(ptr %a442, ptr %a444) - %t446 = icmp ne i32 %t445, 0 - br label %logic.from10266 -logic.from10266: - br i1 %t446, label %logic.end10268, label %logic.rhs10267 -logic.rhs10267: - %t447 = load { ptr, i64, i64 }, ptr %a291 - store { ptr, i64, i64 } %t447, ptr %a448 - store { ptr, i64, i64 } { ptr @.str.6922, i64 2, i64 0 }, ptr %a450 - %t451 = call i32 @finch_str_ends(ptr %a448, ptr %a450) - %t452 = icmp ne i32 %t451, 0 - br label %logic.rend10269 -logic.rend10269: - br label %logic.end10268 -logic.end10268: - %t453 = phi i1 [ true, %logic.from10266 ], [ %t452, %logic.rend10269 ] - br i1 %t453, label %then10270, label %else10271 -then10270: - %t454 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t454, ptr %a456 - store { ptr, i64, i64 } { ptr @.str.6923, i64 1, i64 0 }, ptr %a457 - call void @finch_str_concat(ptr %a455, ptr %a456, ptr %a457) - %t458 = load { ptr, i64, i64 }, ptr %a455 - %t459 = load { ptr, i64, i64 }, ptr %a291 - %t460 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t459) - store { ptr, i64, i64 } %t458, ptr %a462 - store { ptr, i64, i64 } %t460, ptr %a463 - call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) - store { ptr, i64, i64 } %t458, ptr %a464 - call void @finch_str_drop(ptr %a464) - store { ptr, i64, i64 } %t460, ptr %a465 - call void @finch_str_drop(ptr %a465) - %t466 = load { ptr, i64, i64 }, ptr %a461 - %t467 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t466, ptr %a252 - store { ptr, i64, i64 } %t467, ptr %a468 - call void @finch_str_drop(ptr %a468) - br label %endif10272 -else10271: - %t469 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t469, ptr %a471 - store { ptr, i64, i64 } { ptr @.str.6924, i64 1, i64 0 }, ptr %a472 - call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) - %t473 = load { ptr, i64, i64 }, ptr %a470 - %t474 = load { ptr, i64, i64 }, ptr %a291 - %t475 = load %S.platform.Target, ptr %a2 - %t476 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t474, %S.platform.Target %t475) - store { ptr, i64, i64 } %t473, ptr %a478 - store { ptr, i64, i64 } %t476, ptr %a479 - call void @finch_str_concat(ptr %a477, ptr %a478, ptr %a479) - store { ptr, i64, i64 } %t473, ptr %a480 - call void @finch_str_drop(ptr %a480) - store { ptr, i64, i64 } %t476, ptr %a481 - call void @finch_str_drop(ptr %a481) - %t482 = load { ptr, i64, i64 }, ptr %a477 - %t483 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t482, ptr %a252 - store { ptr, i64, i64 } %t483, ptr %a484 - call void @finch_str_drop(ptr %a484) - br label %endif10272 -endif10272: - br label %endif10255 -endif10255: - br label %each.step10251 -each.step10251: - %t485 = load i64, ptr %a283 - %t486 = add i64 %t485, 1 - store i64 %t486, ptr %a283 - br label %each.cond10249 -each.end10252: - %t487 = load { ptr, i64, i64 }, ptr %a252 - store { ptr, i64, i64 } %t487, ptr %a489 - store { ptr, i64, i64 } { ptr @.str.6925, i64 3, i64 0 }, ptr %a490 - call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) - %t491 = load { ptr, i64, i64 }, ptr %a488 - %t492 = load { ptr, i64, i64 }, ptr %a109 - %t493 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t492) - store { ptr, i64, i64 } %t491, ptr %a495 - store { ptr, i64, i64 } %t493, ptr %a496 - call void @finch_str_concat(ptr %a494, ptr %a495, ptr %a496) - store { ptr, i64, i64 } %t491, ptr %a497 - call void @finch_str_drop(ptr %a497) - store { ptr, i64, i64 } %t493, ptr %a498 - call void @finch_str_drop(ptr %a498) - %t499 = load { ptr, i64, i64 }, ptr %a494 - store { ptr, i64, i64 } %t499, ptr %a501 - store { ptr, i64, i64 } { ptr @.str.6926, i64 5, i64 0 }, ptr %a502 - call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) - store { ptr, i64, i64 } %t499, ptr %a503 - call void @finch_str_drop(ptr %a503) - %t504 = load { ptr, i64, i64 }, ptr %a500 - %t505 = call i64 @finch.host.run({ ptr, i64, i64 } %t504) - store { ptr, i64, i64 } %t504, ptr %a506 - call void @finch_str_drop(ptr %a506) - store i64 %t505, ptr %a507 - %t508 = load { ptr, i64, i64 }, ptr %a109 - store { ptr, i64, i64 } %t508, ptr %a509 - store { ptr, i64, i64 } zeroinitializer, ptr %a510 - store { ptr, i64, i64 } zeroinitializer, ptr %a511 - %t512 = call i32 @finch_try_read_file(ptr %a510, ptr %a509, ptr %a511) - %t513 = icmp eq i32 %t512, 0 - %t514 = load { ptr, i64, i64 }, ptr %a511 - %t515 = load { ptr, i64, i64 }, ptr %a510 - br i1 %t513, label %or.failed10273, label %or.ok10274 -or.failed10273: - store { ptr, i64, i64 } %t514, ptr %a516 - call void @finch_str_drop(ptr %a516) - br label %or.bend10275 -or.bend10275: - br label %or.end10276 -or.ok10274: - br label %or.end10276 -or.end10276: - %t517 = phi { ptr, i64, i64 } [ { ptr @.str.6927, i64 0, i64 0 }, %or.bend10275 ], [ %t515, %or.ok10274 ] - store { ptr, i64, i64 } %t517, ptr %a518 - %t519 = load { ptr, i64, i64 }, ptr %a84 - call void @finch.host.remove({ ptr, i64, i64 } %t519) - %t520 = load { ptr, i64, i64 }, ptr %a109 - call void @finch.host.remove({ ptr, i64, i64 } %t520) - store i64 0, ptr %a521 + call void @finch_str_drop(ptr %a291) + br label %endif10270 +endif10270: + %t292 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5 + %t293 = load i1, ptr %t292 + br i1 %t293, label %then10271, label %endif10273 +then10271: + %t294 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3 + %t295 = load i1, ptr %t294 + br i1 %t295, label %then10274, label %else10275 +then10274: + %t296 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.6915, i64 12, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + %t301 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t300, ptr %a255 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + br label %endif10276 +else10275: + %t303 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t303, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.6916, i64 8, i64 0 }, ptr %a306 + call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a304 + %t308 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t307, ptr %a255 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10276 +endif10276: + br label %endif10273 +endif10273: + store { ptr, i64, i64 } zeroinitializer, ptr %a310 + %t311 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6 + store i64 0, ptr %a312 br label %each.cond10277 each.cond10277: - %t522 = getelementptr inbounds { ptr, i64, i64 }, ptr %a281, i32 0, i32 1 - %t523 = load i64, ptr %t522 - %t524 = load i64, ptr %a521 - %t525 = icmp slt i64 %t524, %t523 - br i1 %t525, label %each.body10278, label %each.end10280 + %t313 = getelementptr inbounds { ptr, i64, i64 }, ptr %t311, i32 0, i32 1 + %t314 = load i64, ptr %t313 + %t315 = load i64, ptr %a312 + %t316 = icmp slt i64 %t315, %t314 + br i1 %t316, label %each.body10278, label %each.end10280 each.body10278: - %t526 = load ptr, ptr %a281 - %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t524 - %t528 = load { ptr, i64, i64 }, ptr %t527 - store { ptr, i64, i64 } %t528, ptr %a529 - %t530 = load { ptr, i64, i64 }, ptr %a529 - call void @finch.host.remove({ ptr, i64, i64 } %t530) - br label %each.step10279 -each.step10279: - %t531 = load i64, ptr %a521 - %t532 = add i64 %t531, 1 - store i64 %t532, ptr %a521 - br label %each.cond10277 -each.end10280: - %t533 = load i64, ptr %a507 - %t534 = icmp eq i64 %t533, 127 - br i1 %t534, label %then10281, label %endif10283 + %t317 = load ptr, ptr %t311 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i64 %t315 + %t319 = load { ptr, i64, i64 }, ptr %t318 + store { ptr, i64, i64 } %t319, ptr %a320 + %t321 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t321, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.6918, i64 2, i64 0 }, ptr %a324 + %t325 = call i32 @finch_str_ends(ptr %a322, ptr %a324) + %t326 = icmp ne i32 %t325, 0 + br i1 %t326, label %then10281, label %else10282 then10281: - %t535 = load { ptr, i64, i64 }, ptr %a23 - store { ptr, i64, i64 } { ptr @.str.6928, i64 42, i64 0 }, ptr %a537 - store { ptr, i64, i64 } %t535, ptr %a538 - call void @finch_str_concat(ptr %a536, ptr %a537, ptr %a538) - %t539 = load { ptr, i64, i64 }, ptr %a536 - store { ptr, i64, i64 } %t539, ptr %a541 - store { ptr, i64, i64 } { ptr @.str.6929, i64 32, i64 0 }, ptr %a542 - call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) - store { ptr, i64, i64 } %t539, ptr %a543 - call void @finch_str_drop(ptr %a543) - %t544 = load { ptr, i64, i64 }, ptr %a540 - %t545 = extractvalue { ptr, i64, i64 } %t544, 1 - %t546 = trunc i64 %t545 to i32 - %t547 = extractvalue { ptr, i64, i64 } %t544, 0 - %t548 = icmp eq ptr %t547, null - %t549 = select i1 %t548, ptr @.str.6930, ptr %t547 - %t550 = call i32 (ptr, ...) @printf(ptr @.str.6931, i32 %t546, ptr %t549) - store { ptr, i64, i64 } %t544, ptr %a551 - call void @finch_str_drop(ptr %a551) - %t552 = call i32 (ptr, ...) @printf(ptr @.str.6932) - call void @finch_str_drop(ptr %a518) - call void @finch.drop.arr_str(ptr %a281) - call void @finch_str_drop(ptr %a252) - call void @finch_str_drop(ptr %a109) + %t327 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t328 = load { ptr, i64, i64 }, ptr %t327 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6919, i64 1, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a329 + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t334 = load i64, ptr %t333 + call void @finch_str_from_int(ptr %a335, i64 %t334) + %t336 = load { ptr, i64, i64 }, ptr %a335 + store { ptr, i64, i64 } %t332, ptr %a338 + store { ptr, i64, i64 } %t336, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t332, ptr %a340 + call void @finch_str_drop(ptr %a340) + store { ptr, i64, i64 } %t336, ptr %a341 + call void @finch_str_drop(ptr %a341) + %t342 = load { ptr, i64, i64 }, ptr %a337 + store { ptr, i64, i64 } %t342, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.6920, i64 2, i64 0 }, ptr %a345 + call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) + store { ptr, i64, i64 } %t342, ptr %a346 + call void @finch_str_drop(ptr %a346) + %t347 = load { ptr, i64, i64 }, ptr %a343 + store { ptr, i64, i64 } %t347, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.6921, i64 6, i64 0 }, ptr %a349 + %t350 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t351 = load i1, ptr %t350 + br i1 %t351, label %then10284, label %endif10286 +then10284: + %t352 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } { ptr @.str.6922, i64 0, i64 0 }, ptr %a349 + store { ptr, i64, i64 } %t352, ptr %a353 + call void @finch_str_drop(ptr %a353) + br label %endif10286 +endif10286: + %t354 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t354, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.6923, i64 4, i64 0 }, ptr %a357 + call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a355 + %t359 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } %t358, ptr %a361 + store { ptr, i64, i64 } %t359, ptr %a362 + call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) + store { ptr, i64, i64 } %t358, ptr %a363 + call void @finch_str_drop(ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a360 + store { ptr, i64, i64 } %t364, ptr %a366 + store { ptr, i64, i64 } { ptr @.str.6924, i64 4, i64 0 }, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t364, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a365 + %t370 = load { ptr, i64, i64 }, ptr %a320 + %t371 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t370) + store { ptr, i64, i64 } %t369, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t369, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t371, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a372 + store { ptr, i64, i64 } %t377, ptr %a379 + store { ptr, i64, i64 } { ptr @.str.6925, i64 4, i64 0 }, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + %t383 = load { ptr, i64, i64 }, ptr %a348 + %t384 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t383) + store { ptr, i64, i64 } %t382, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + store { ptr, i64, i64 } %t382, ptr %a388 + call void @finch_str_drop(ptr %a388) + store { ptr, i64, i64 } %t384, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t390, ptr %a392 + store { ptr, i64, i64 } { ptr @.str.6926, i64 3, i64 0 }, ptr %a393 + call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) + store { ptr, i64, i64 } %t390, ptr %a394 + call void @finch_str_drop(ptr %a394) + %t395 = load { ptr, i64, i64 }, ptr %a391 + %t396 = load { ptr, i64, i64 }, ptr %a112 + %t397 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t396) + store { ptr, i64, i64 } %t395, ptr %a399 + store { ptr, i64, i64 } %t397, ptr %a400 + call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) + store { ptr, i64, i64 } %t395, ptr %a401 + call void @finch_str_drop(ptr %a401) + store { ptr, i64, i64 } %t397, ptr %a402 + call void @finch_str_drop(ptr %a402) + %t403 = load { ptr, i64, i64 }, ptr %a398 + store { ptr, i64, i64 } %t403, ptr %a405 + store { ptr, i64, i64 } { ptr @.str.6927, i64 5, i64 0 }, ptr %a406 + call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406) + store { ptr, i64, i64 } %t403, ptr %a407 + call void @finch_str_drop(ptr %a407) + %t408 = load { ptr, i64, i64 }, ptr %a404 + %t409 = call i64 @finch.host.run({ ptr, i64, i64 } %t408) + store { ptr, i64, i64 } %t408, ptr %a410 + call void @finch_str_drop(ptr %a410) + store i64 %t409, ptr %a411 + %t412 = load i64, ptr %a411 + %t413 = icmp ne i64 %t412, 0 + br i1 %t413, label %then10287, label %endif10289 +then10287: + %t414 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t414, ptr %a415 + store { ptr, i64, i64 } zeroinitializer, ptr %a416 + store { ptr, i64, i64 } zeroinitializer, ptr %a417 + %t418 = call i32 @finch_try_read_file(ptr %a416, ptr %a415, ptr %a417) + %t419 = icmp eq i32 %t418, 0 + %t420 = load { ptr, i64, i64 }, ptr %a417 + %t421 = load { ptr, i64, i64 }, ptr %a416 + br i1 %t419, label %or.failed10290, label %or.ok10291 +or.failed10290: + store { ptr, i64, i64 } %t420, ptr %a422 + call void @finch_str_drop(ptr %a422) + br label %or.bend10292 +or.bend10292: + br label %or.end10293 +or.ok10291: + br label %or.end10293 +or.end10293: + %t423 = phi { ptr, i64, i64 } [ { ptr @.str.6928, i64 0, i64 0 }, %or.bend10292 ], [ %t421, %or.ok10291 ] + store { ptr, i64, i64 } %t423, ptr %a425 + store { ptr, i64, i64 } { ptr @.str.6929, i64 24, i64 0 }, ptr %a426 + call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) + store { ptr, i64, i64 } %t423, ptr %a427 + call void @finch_str_drop(ptr %a427) + %t428 = load { ptr, i64, i64 }, ptr %a424 + %t429 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t428, ptr %a431 + store { ptr, i64, i64 } %t429, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t428, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = extractvalue { ptr, i64, i64 } %t434, 1 + %t436 = trunc i64 %t435 to i32 + %t437 = extractvalue { ptr, i64, i64 } %t434, 0 + %t438 = icmp eq ptr %t437, null + %t439 = select i1 %t438, ptr @.str.6930, ptr %t437 + %t440 = call i32 (ptr, ...) @printf(ptr @.str.6931, i32 %t436, ptr %t439) + store { ptr, i64, i64 } %t434, ptr %a441 + call void @finch_str_drop(ptr %a441) + %t442 = call i32 (ptr, ...) @printf(ptr @.str.6932) + %t443 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t443) + %t444 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t444) + %t445 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.host.remove({ ptr, i64, i64 } %t445) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) @@ -105868,46 +105828,261 @@ then10281: call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) ret i64 1 +endif10289: + %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t447 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t447, ptr %a448 + call void @finch_str_copy(ptr %a449, ptr %a448) + %t450 = load { ptr, i64, i64 }, ptr %a449 + %t451 = load i64, ptr %t446 + %t452 = add i64 %t451, 1 + call void @finch_arr_reserve(ptr %a310, i64 %t452, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t453 = load ptr, ptr %a310 + %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t451 + store { ptr, i64, i64 } %t450, ptr %t454 + store i64 %t452, ptr %t446 + %t455 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t455, ptr %a457 + store { ptr, i64, i64 } { ptr @.str.6933, i64 1, i64 0 }, ptr %a458 + call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) + %t459 = load { ptr, i64, i64 }, ptr %a456 + %t460 = load { ptr, i64, i64 }, ptr %a348 + %t461 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t460) + store { ptr, i64, i64 } %t459, ptr %a463 + store { ptr, i64, i64 } %t461, ptr %a464 + call void @finch_str_concat(ptr %a462, ptr %a463, ptr %a464) + store { ptr, i64, i64 } %t459, ptr %a465 + call void @finch_str_drop(ptr %a465) + store { ptr, i64, i64 } %t461, ptr %a466 + call void @finch_str_drop(ptr %a466) + %t467 = load { ptr, i64, i64 }, ptr %a462 + %t468 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t467, ptr %a255 + store { ptr, i64, i64 } %t468, ptr %a469 + call void @finch_str_drop(ptr %a469) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + br label %endif10283 +else10282: + %t470 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t470, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.6935, i64 2, i64 0 }, ptr %a473 + %t474 = call i32 @finch_str_ends(ptr %a471, ptr %a473) + %t475 = icmp ne i32 %t474, 0 + br label %logic.from10294 +logic.from10294: + br i1 %t475, label %logic.end10296, label %logic.rhs10295 +logic.rhs10295: + %t476 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t476, ptr %a477 + store { ptr, i64, i64 } { ptr @.str.6937, i64 2, i64 0 }, ptr %a479 + %t480 = call i32 @finch_str_ends(ptr %a477, ptr %a479) + %t481 = icmp ne i32 %t480, 0 + br label %logic.rend10297 +logic.rend10297: + br label %logic.end10296 +logic.end10296: + %t482 = phi i1 [ true, %logic.from10294 ], [ %t481, %logic.rend10297 ] + br i1 %t482, label %then10298, label %else10299 +then10298: + %t483 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t483, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.6938, i64 1, i64 0 }, ptr %a486 + call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) + %t487 = load { ptr, i64, i64 }, ptr %a484 + %t488 = load { ptr, i64, i64 }, ptr %a320 + %t489 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t488) + store { ptr, i64, i64 } %t487, ptr %a491 + store { ptr, i64, i64 } %t489, ptr %a492 + call void @finch_str_concat(ptr %a490, ptr %a491, ptr %a492) + store { ptr, i64, i64 } %t487, ptr %a493 + call void @finch_str_drop(ptr %a493) + store { ptr, i64, i64 } %t489, ptr %a494 + call void @finch_str_drop(ptr %a494) + %t495 = load { ptr, i64, i64 }, ptr %a490 + %t496 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t495, ptr %a255 + store { ptr, i64, i64 } %t496, ptr %a497 + call void @finch_str_drop(ptr %a497) + br label %endif10300 +else10299: + %t498 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t498, ptr %a500 + store { ptr, i64, i64 } { ptr @.str.6939, i64 1, i64 0 }, ptr %a501 + call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) + %t502 = load { ptr, i64, i64 }, ptr %a499 + %t503 = load { ptr, i64, i64 }, ptr %a320 + %t504 = load %S.platform.Target, ptr %a2 + %t505 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t503, %S.platform.Target %t504) + store { ptr, i64, i64 } %t502, ptr %a507 + store { ptr, i64, i64 } %t505, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t502, ptr %a509 + call void @finch_str_drop(ptr %a509) + store { ptr, i64, i64 } %t505, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a506 + %t512 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t511, ptr %a255 + store { ptr, i64, i64 } %t512, ptr %a513 + call void @finch_str_drop(ptr %a513) + br label %endif10300 +endif10300: + br label %endif10283 endif10283: - %t553 = load i64, ptr %a507 - %t554 = icmp ne i64 %t553, 0 - br i1 %t554, label %then10284, label %endif10286 -then10284: - %t555 = load { ptr, i64, i64 }, ptr %a518 - %t556 = load %S.cimport.CImports, ptr %a3 - %t557 = load %S.platform.Target, ptr %a2 - %t558 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t555, %S.cimport.CImports %t556, %S.platform.Target %t557) - call void @finch_str_drop(ptr %a518) - call void @finch.drop.arr_str(ptr %a281) - call void @finch_str_drop(ptr %a252) - call void @finch_str_drop(ptr %a109) + br label %each.step10279 +each.step10279: + %t514 = load i64, ptr %a312 + %t515 = add i64 %t514, 1 + store i64 %t515, ptr %a312 + br label %each.cond10277 +each.end10280: + %t516 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t516, ptr %a518 + store { ptr, i64, i64 } { ptr @.str.6940, i64 3, i64 0 }, ptr %a519 + call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519) + %t520 = load { ptr, i64, i64 }, ptr %a517 + %t521 = load { ptr, i64, i64 }, ptr %a112 + %t522 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t521) + store { ptr, i64, i64 } %t520, ptr %a524 + store { ptr, i64, i64 } %t522, ptr %a525 + call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) + store { ptr, i64, i64 } %t520, ptr %a526 + call void @finch_str_drop(ptr %a526) + store { ptr, i64, i64 } %t522, ptr %a527 + call void @finch_str_drop(ptr %a527) + %t528 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t528, ptr %a530 + store { ptr, i64, i64 } { ptr @.str.6941, i64 5, i64 0 }, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + %t534 = call i64 @finch.host.run({ ptr, i64, i64 } %t533) + store { ptr, i64, i64 } %t533, ptr %a535 + call void @finch_str_drop(ptr %a535) + store i64 %t534, ptr %a536 + %t537 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t537, ptr %a538 + store { ptr, i64, i64 } zeroinitializer, ptr %a539 + store { ptr, i64, i64 } zeroinitializer, ptr %a540 + %t541 = call i32 @finch_try_read_file(ptr %a539, ptr %a538, ptr %a540) + %t542 = icmp eq i32 %t541, 0 + %t543 = load { ptr, i64, i64 }, ptr %a540 + %t544 = load { ptr, i64, i64 }, ptr %a539 + br i1 %t542, label %or.failed10301, label %or.ok10302 +or.failed10301: + store { ptr, i64, i64 } %t543, ptr %a545 + call void @finch_str_drop(ptr %a545) + br label %or.bend10303 +or.bend10303: + br label %or.end10304 +or.ok10302: + br label %or.end10304 +or.end10304: + %t546 = phi { ptr, i64, i64 } [ { ptr @.str.6942, i64 0, i64 0 }, %or.bend10303 ], [ %t544, %or.ok10302 ] + store { ptr, i64, i64 } %t546, ptr %a547 + %t548 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t548) + %t549 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t549) + store i64 0, ptr %a550 + br label %each.cond10305 +each.cond10305: + %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t552 = load i64, ptr %t551 + %t553 = load i64, ptr %a550 + %t554 = icmp slt i64 %t553, %t552 + br i1 %t554, label %each.body10306, label %each.end10308 +each.body10306: + %t555 = load ptr, ptr %a310 + %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t555, i64 %t553 + %t557 = load { ptr, i64, i64 }, ptr %t556 + store { ptr, i64, i64 } %t557, ptr %a558 + %t559 = load { ptr, i64, i64 }, ptr %a558 + call void @finch.host.remove({ ptr, i64, i64 } %t559) + br label %each.step10307 +each.step10307: + %t560 = load i64, ptr %a550 + %t561 = add i64 %t560, 1 + store i64 %t561, ptr %a550 + br label %each.cond10305 +each.end10308: + %t562 = load i64, ptr %a536 + %t563 = icmp eq i64 %t562, 127 + br i1 %t563, label %then10309, label %endif10311 +then10309: + %t564 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.6943, i64 42, i64 0 }, ptr %a566 + store { ptr, i64, i64 } %t564, ptr %a567 + call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) + %t568 = load { ptr, i64, i64 }, ptr %a565 + store { ptr, i64, i64 } %t568, ptr %a570 + store { ptr, i64, i64 } { ptr @.str.6944, i64 32, i64 0 }, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + store { ptr, i64, i64 } %t568, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a569 + %t574 = extractvalue { ptr, i64, i64 } %t573, 1 + %t575 = trunc i64 %t574 to i32 + %t576 = extractvalue { ptr, i64, i64 } %t573, 0 + %t577 = icmp eq ptr %t576, null + %t578 = select i1 %t577, ptr @.str.6945, ptr %t576 + %t579 = call i32 (ptr, ...) @printf(ptr @.str.6946, i32 %t575, ptr %t578) + store { ptr, i64, i64 } %t573, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = call i32 (ptr, ...) @printf(ptr @.str.6947) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) call void @finch_str_drop(ptr %a70) call void @finch_str_drop(ptr %a23) call void @finch_str_drop(ptr %a13) - ret i64 %t558 -endif10286: - %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %a518, i32 0, i32 1 - %t560 = load i64, ptr %t559 - %t561 = icmp sgt i64 %t560, 0 - br i1 %t561, label %then10287, label %endif10289 -then10287: - %t562 = load { ptr, i64, i64 }, ptr %a518 - %t563 = extractvalue { ptr, i64, i64 } %t562, 1 - %t564 = trunc i64 %t563 to i32 - %t565 = extractvalue { ptr, i64, i64 } %t562, 0 - %t566 = icmp eq ptr %t565, null - %t567 = select i1 %t566, ptr @.str.6933, ptr %t565 - %t568 = call i32 (ptr, ...) @printf(ptr @.str.6934, i32 %t564, ptr %t567) - %t569 = call i32 (ptr, ...) @printf(ptr @.str.6935) - br label %endif10289 -endif10289: - call void @finch_str_drop(ptr %a518) - call void @finch.drop.arr_str(ptr %a281) - call void @finch_str_drop(ptr %a252) - call void @finch_str_drop(ptr %a109) + ret i64 1 +endif10311: + %t582 = load i64, ptr %a536 + %t583 = icmp ne i64 %t582, 0 + br i1 %t583, label %then10312, label %endif10314 +then10312: + %t584 = load { ptr, i64, i64 }, ptr %a547 + %t585 = load %S.cimport.CImports, ptr %a3 + %t586 = load %S.platform.Target, ptr %a2 + %t587 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t584, %S.cimport.CImports %t585, %S.platform.Target %t586) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 %t587 +endif10314: + %t588 = getelementptr inbounds { ptr, i64, i64 }, ptr %a547, i32 0, i32 1 + %t589 = load i64, ptr %t588 + %t590 = icmp sgt i64 %t589, 0 + br i1 %t590, label %then10315, label %endif10317 +then10315: + %t591 = load { ptr, i64, i64 }, ptr %a547 + %t592 = extractvalue { ptr, i64, i64 } %t591, 1 + %t593 = trunc i64 %t592 to i32 + %t594 = extractvalue { ptr, i64, i64 } %t591, 0 + %t595 = icmp eq ptr %t594, null + %t596 = select i1 %t595, ptr @.str.6948, ptr %t594 + %t597 = call i32 (ptr, ...) @printf(ptr @.str.6949, i32 %t593, ptr %t596) + %t598 = call i32 (ptr, ...) @printf(ptr @.str.6950) + br label %endif10317 +endif10317: + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) call void @finch_str_drop(ptr %a92) call void @finch_str_drop(ptr %a84) call void @finch_str_drop(ptr %a77) @@ -105923,69 +106098,69 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 - br label %logic.from10290 -logic.from10290: - br i1 %t3, label %logic.rhs10291, label %logic.end10292 -logic.rhs10291: + br label %logic.from10318 +logic.from10318: + br i1 %t3, label %logic.rhs10319, label %logic.end10320 +logic.rhs10319: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 - br label %logic.rend10293 -logic.rend10293: - br label %logic.end10292 -logic.end10292: - %t6 = phi i1 [ false, %logic.from10290 ], [ %t5, %logic.rend10293 ] - br i1 %t6, label %then10294, label %endif10296 -then10294: + br label %logic.rend10321 +logic.rend10321: + br label %logic.end10320 +logic.end10320: + %t6 = phi i1 [ false, %logic.from10318 ], [ %t5, %logic.rend10321 ] + br i1 %t6, label %then10322, label %endif10324 +then10322: %t7 = load i8, ptr %a1 %t8 = zext i8 %t7 to i64 %t9 = zext i8 48 to i64 %t10 = sub i64 %t8, %t9 ret i64 %t10 -endif10296: +endif10324: %t11 = load i8, ptr %a1 %t12 = icmp uge i8 %t11, 97 - br label %logic.from10297 -logic.from10297: - br i1 %t12, label %logic.rhs10298, label %logic.end10299 -logic.rhs10298: + br label %logic.from10325 +logic.from10325: + br i1 %t12, label %logic.rhs10326, label %logic.end10327 +logic.rhs10326: %t13 = load i8, ptr %a1 %t14 = icmp ule i8 %t13, 102 - br label %logic.rend10300 -logic.rend10300: - br label %logic.end10299 -logic.end10299: - %t15 = phi i1 [ false, %logic.from10297 ], [ %t14, %logic.rend10300 ] - br i1 %t15, label %then10301, label %endif10303 -then10301: + br label %logic.rend10328 +logic.rend10328: + br label %logic.end10327 +logic.end10327: + %t15 = phi i1 [ false, %logic.from10325 ], [ %t14, %logic.rend10328 ] + br i1 %t15, label %then10329, label %endif10331 +then10329: %t16 = load i8, ptr %a1 %t17 = zext i8 %t16 to i64 %t18 = zext i8 97 to i64 %t19 = sub i64 %t17, %t18 %t20 = add i64 %t19, 10 ret i64 %t20 -endif10303: +endif10331: %t21 = load i8, ptr %a1 %t22 = icmp uge i8 %t21, 65 - br label %logic.from10304 -logic.from10304: - br i1 %t22, label %logic.rhs10305, label %logic.end10306 -logic.rhs10305: + br label %logic.from10332 +logic.from10332: + br i1 %t22, label %logic.rhs10333, label %logic.end10334 +logic.rhs10333: %t23 = load i8, ptr %a1 %t24 = icmp ule i8 %t23, 70 - br label %logic.rend10307 -logic.rend10307: - br label %logic.end10306 -logic.end10306: - %t25 = phi i1 [ false, %logic.from10304 ], [ %t24, %logic.rend10307 ] - br i1 %t25, label %then10308, label %endif10310 -then10308: + br label %logic.rend10335 +logic.rend10335: + br label %logic.end10334 +logic.end10334: + %t25 = phi i1 [ false, %logic.from10332 ], [ %t24, %logic.rend10335 ] + br i1 %t25, label %then10336, label %endif10338 +then10336: %t26 = load i8, ptr %a1 %t27 = zext i8 %t26 to i64 %t28 = zext i8 65 to i64 %t29 = sub i64 %t27, %t28 %t30 = add i64 %t29, 10 ret i64 %t30 -endif10310: +endif10338: ret i64 -1 } @@ -106020,122 +106195,122 @@ entry: store { ptr, i64, i64 } %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t7, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.6937, i64 7, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.6952, i64 7, i64 0 }, ptr %a10 %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) %t12 = icmp ne i32 %t11, 0 - br i1 %t12, label %then10311, label %endif10313 -then10311: + br i1 %t12, label %then10339, label %endif10341 +then10339: %t13 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t13, ptr %a14 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t17 = load i64, ptr %t16 - call void @finch_str_sub(ptr %a15, ptr %a14, i64 7, i64 %t17, ptr @.str.6938, i64 114) + call void @finch_str_sub(ptr %a15, ptr %a14, i64 7, i64 %t17, ptr @.str.6953, i64 114) %t18 = load { ptr, i64, i64 }, ptr %a15 %t19 = load { ptr, i64, i64 }, ptr %a6 store { ptr, i64, i64 } %t18, ptr %a6 store { ptr, i64, i64 } %t19, ptr %a20 call void @finch_str_drop(ptr %a20) - br label %endif10313 -endif10313: + br label %endif10341 +endif10341: store { ptr, i64, i64 } zeroinitializer, ptr %a21 store i64 0, ptr %a22 - br label %while.cond10314 -while.cond10314: + br label %while.cond10342 +while.cond10342: %t23 = load i64, ptr %a22 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = icmp slt i64 %t23, %t25 - br i1 %t26, label %while.body10315, label %while.end10316 -while.body10315: + br i1 %t26, label %while.body10343, label %while.end10344 +while.body10343: %t27 = load i64, ptr %a22 %t28 = load { ptr, i64, i64 }, ptr %a6 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 - br i1 %t30, label %range10317, label %inrange10318 -range10317: - call void @finch_panic_index(ptr @.str.6939, i64 119, i64 %t27, i64 %t29) + br i1 %t30, label %range10345, label %inrange10346 +range10345: + call void @finch_panic_index(ptr @.str.6954, i64 119, i64 %t27, i64 %t29) unreachable -inrange10318: +inrange10346: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds i8, ptr %t31, i64 %t27 %t33 = load i8, ptr %t32 %t34 = icmp eq i8 %t33, 37 - br label %logic.from10319 -logic.from10319: - br i1 %t34, label %logic.rhs10320, label %logic.end10321 -logic.rhs10320: + br label %logic.from10347 +logic.from10347: + br i1 %t34, label %logic.rhs10348, label %logic.end10349 +logic.rhs10348: %t35 = load i64, ptr %a22 %t36 = add i64 %t35, 2 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = add i64 %t38, 0 %t40 = icmp slt i64 %t36, %t39 - br label %logic.rend10322 -logic.rend10322: - br label %logic.end10321 -logic.end10321: - %t41 = phi i1 [ false, %logic.from10319 ], [ %t40, %logic.rend10322 ] - br label %logic.from10323 -logic.from10323: - br i1 %t41, label %logic.rhs10324, label %logic.end10325 -logic.rhs10324: + br label %logic.rend10350 +logic.rend10350: + br label %logic.end10349 +logic.end10349: + %t41 = phi i1 [ false, %logic.from10347 ], [ %t40, %logic.rend10350 ] + br label %logic.from10351 +logic.from10351: + br i1 %t41, label %logic.rhs10352, label %logic.end10353 +logic.rhs10352: %t42 = load i64, ptr %a22 %t43 = add i64 %t42, 1 %t44 = load { ptr, i64, i64 }, ptr %a6 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 %t43, %t45 - br i1 %t46, label %range10326, label %inrange10327 -range10326: - call void @finch_panic_index(ptr @.str.6940, i64 119, i64 %t43, i64 %t45) + br i1 %t46, label %range10354, label %inrange10355 +range10354: + call void @finch_panic_index(ptr @.str.6955, i64 119, i64 %t43, i64 %t45) unreachable -inrange10327: +inrange10355: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 %t49 = load i8, ptr %t48 %t50 = call i64 @finch.lsp.hexval(i8 %t49) %t51 = icmp sge i64 %t50, 0 - br label %logic.rend10328 -logic.rend10328: - br label %logic.end10325 -logic.end10325: - %t52 = phi i1 [ false, %logic.from10323 ], [ %t51, %logic.rend10328 ] - br label %logic.from10329 -logic.from10329: - br i1 %t52, label %logic.rhs10330, label %logic.end10331 -logic.rhs10330: + br label %logic.rend10356 +logic.rend10356: + br label %logic.end10353 +logic.end10353: + %t52 = phi i1 [ false, %logic.from10351 ], [ %t51, %logic.rend10356 ] + br label %logic.from10357 +logic.from10357: + br i1 %t52, label %logic.rhs10358, label %logic.end10359 +logic.rhs10358: %t53 = load i64, ptr %a22 %t54 = add i64 %t53, 2 %t55 = load { ptr, i64, i64 }, ptr %a6 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range10332, label %inrange10333 -range10332: - call void @finch_panic_index(ptr @.str.6941, i64 119, i64 %t54, i64 %t56) + br i1 %t57, label %range10360, label %inrange10361 +range10360: + call void @finch_panic_index(ptr @.str.6956, i64 119, i64 %t54, i64 %t56) unreachable -inrange10333: +inrange10361: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 %t60 = load i8, ptr %t59 %t61 = call i64 @finch.lsp.hexval(i8 %t60) %t62 = icmp sge i64 %t61, 0 - br label %logic.rend10334 -logic.rend10334: - br label %logic.end10331 -logic.end10331: - %t63 = phi i1 [ false, %logic.from10329 ], [ %t62, %logic.rend10334 ] - br i1 %t63, label %then10335, label %else10336 -then10335: + br label %logic.rend10362 +logic.rend10362: + br label %logic.end10359 +logic.end10359: + %t63 = phi i1 [ false, %logic.from10357 ], [ %t62, %logic.rend10362 ] + br i1 %t63, label %then10363, label %else10364 +then10363: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t65 = load i64, ptr %a22 %t66 = add i64 %t65, 1 %t67 = load { ptr, i64, i64 }, ptr %a6 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 %t66, %t68 - br i1 %t69, label %range10338, label %inrange10339 -range10338: - call void @finch_panic_index(ptr @.str.6942, i64 120, i64 %t66, i64 %t68) + br i1 %t69, label %range10366, label %inrange10367 +range10366: + call void @finch_panic_index(ptr @.str.6957, i64 120, i64 %t66, i64 %t68) unreachable -inrange10339: +inrange10367: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds i8, ptr %t70, i64 %t66 %t72 = load i8, ptr %t71 @@ -106146,11 +106321,11 @@ inrange10339: %t77 = load { ptr, i64, i64 }, ptr %a6 %t78 = extractvalue { ptr, i64, i64 } %t77, 1 %t79 = icmp uge i64 %t76, %t78 - br i1 %t79, label %range10340, label %inrange10341 -range10340: - call void @finch_panic_index(ptr @.str.6943, i64 120, i64 %t76, i64 %t78) + br i1 %t79, label %range10368, label %inrange10369 +range10368: + call void @finch_panic_index(ptr @.str.6958, i64 120, i64 %t76, i64 %t78) unreachable -inrange10341: +inrange10369: %t80 = extractvalue { ptr, i64, i64 } %t77, 0 %t81 = getelementptr inbounds i8, ptr %t80, i64 %t76 %t82 = load i8, ptr %t81 @@ -106167,18 +106342,18 @@ inrange10341: %t90 = load i64, ptr %a22 %t91 = add i64 %t90, 3 store i64 %t91, ptr %a22 - br label %endif10337 -else10336: + br label %endif10365 +else10364: %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 %t93 = load i64, ptr %a22 %t94 = load { ptr, i64, i64 }, ptr %a6 %t95 = extractvalue { ptr, i64, i64 } %t94, 1 %t96 = icmp uge i64 %t93, %t95 - br i1 %t96, label %range10342, label %inrange10343 -range10342: - call void @finch_panic_index(ptr @.str.6944, i64 123, i64 %t93, i64 %t95) + br i1 %t96, label %range10370, label %inrange10371 +range10370: + call void @finch_panic_index(ptr @.str.6959, i64 123, i64 %t93, i64 %t95) unreachable -inrange10343: +inrange10371: %t97 = extractvalue { ptr, i64, i64 } %t94, 0 %t98 = getelementptr inbounds i8, ptr %t97, i64 %t93 %t99 = load i8, ptr %t98 @@ -106192,10 +106367,10 @@ inrange10343: %t104 = load i64, ptr %a22 %t105 = add i64 %t104, 1 store i64 %t105, ptr %a22 - br label %endif10337 -endif10337: - br label %while.cond10314 -while.end10316: + br label %endif10365 +endif10365: + br label %while.cond10342 +while.end10344: %t106 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } zeroinitializer, ptr %a107 store { ptr, i64, i64 } %t106, ptr %a108 @@ -106234,24 +106409,24 @@ entry: %a97 = alloca { ptr, i64, i64 }, align 16 %a98 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } %p0, ptr %a1 - store { ptr, i64, i64 } { ptr @.str.6945, i64 16, i64 0 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.6960, i64 16, i64 0 }, ptr %a2 %t3 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t4 = call ptr @finch_alloc(i64 %t3) %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 - store { ptr, i64, i64 } { ptr @.str.6946, i64 7, i64 0 }, ptr %t5 + store { ptr, i64, i64 } { ptr @.str.6961, i64 7, i64 0 }, ptr %t5 %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 1 %t8 = insertvalue { ptr, i64, i64 } %t7, i64 1, 2 store { ptr, i64, i64 } %t8, ptr %a9 store i64 0, ptr %a10 - br label %each.cond10344 -each.cond10344: + br label %each.cond10372 +each.cond10372: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 - br i1 %t14, label %each.body10345, label %each.end10347 -each.body10345: + br i1 %t14, label %each.body10373, label %each.end10375 +each.body10373: %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds i8, ptr %t15, i64 %t13 %t17 = load i8, ptr %t16 @@ -106261,66 +106436,66 @@ each.body10345: store i64 %t20, ptr %a21 %t22 = load i8, ptr %a18 %t23 = icmp uge i8 %t22, 97 - br label %logic.from10348 -logic.from10348: - br i1 %t23, label %logic.rhs10349, label %logic.end10350 -logic.rhs10349: + br label %logic.from10376 +logic.from10376: + br i1 %t23, label %logic.rhs10377, label %logic.end10378 +logic.rhs10377: %t24 = load i8, ptr %a18 %t25 = icmp ule i8 %t24, 122 - br label %logic.rend10351 -logic.rend10351: - br label %logic.end10350 -logic.end10350: - %t26 = phi i1 [ false, %logic.from10348 ], [ %t25, %logic.rend10351 ] - br label %logic.from10352 -logic.from10352: - br i1 %t26, label %logic.end10354, label %logic.rhs10353 -logic.rhs10353: + br label %logic.rend10379 +logic.rend10379: + br label %logic.end10378 +logic.end10378: + %t26 = phi i1 [ false, %logic.from10376 ], [ %t25, %logic.rend10379 ] + br label %logic.from10380 +logic.from10380: + br i1 %t26, label %logic.end10382, label %logic.rhs10381 +logic.rhs10381: %t27 = load i8, ptr %a18 %t28 = icmp uge i8 %t27, 65 - br label %logic.from10355 -logic.from10355: - br i1 %t28, label %logic.rhs10356, label %logic.end10357 -logic.rhs10356: + br label %logic.from10383 +logic.from10383: + br i1 %t28, label %logic.rhs10384, label %logic.end10385 +logic.rhs10384: %t29 = load i8, ptr %a18 %t30 = icmp ule i8 %t29, 90 - br label %logic.rend10358 -logic.rend10358: - br label %logic.end10357 -logic.end10357: - %t31 = phi i1 [ false, %logic.from10355 ], [ %t30, %logic.rend10358 ] - br label %logic.rend10359 -logic.rend10359: - br label %logic.end10354 -logic.end10354: - %t32 = phi i1 [ true, %logic.from10352 ], [ %t31, %logic.rend10359 ] - br label %logic.from10360 -logic.from10360: - br i1 %t32, label %logic.end10362, label %logic.rhs10361 -logic.rhs10361: + br label %logic.rend10386 +logic.rend10386: + br label %logic.end10385 +logic.end10385: + %t31 = phi i1 [ false, %logic.from10383 ], [ %t30, %logic.rend10386 ] + br label %logic.rend10387 +logic.rend10387: + br label %logic.end10382 +logic.end10382: + %t32 = phi i1 [ true, %logic.from10380 ], [ %t31, %logic.rend10387 ] + br label %logic.from10388 +logic.from10388: + br i1 %t32, label %logic.end10390, label %logic.rhs10389 +logic.rhs10389: %t33 = load i8, ptr %a18 %t34 = icmp uge i8 %t33, 48 - br label %logic.from10363 -logic.from10363: - br i1 %t34, label %logic.rhs10364, label %logic.end10365 -logic.rhs10364: + br label %logic.from10391 +logic.from10391: + br i1 %t34, label %logic.rhs10392, label %logic.end10393 +logic.rhs10392: %t35 = load i8, ptr %a18 %t36 = icmp ule i8 %t35, 57 - br label %logic.rend10366 -logic.rend10366: - br label %logic.end10365 -logic.end10365: - %t37 = phi i1 [ false, %logic.from10363 ], [ %t36, %logic.rend10366 ] - br label %logic.rend10367 -logic.rend10367: - br label %logic.end10362 -logic.end10362: - %t38 = phi i1 [ true, %logic.from10360 ], [ %t37, %logic.rend10367 ] - br label %logic.from10368 -logic.from10368: - br i1 %t38, label %logic.end10370, label %logic.rhs10369 -logic.rhs10369: - store { ptr, i64, i64 } { ptr @.str.6947, i64 5, i64 0 }, ptr %a39 + br label %logic.rend10394 +logic.rend10394: + br label %logic.end10393 +logic.end10393: + %t37 = phi i1 [ false, %logic.from10391 ], [ %t36, %logic.rend10394 ] + br label %logic.rend10395 +logic.rend10395: + br label %logic.end10390 +logic.end10390: + %t38 = phi i1 [ true, %logic.from10388 ], [ %t37, %logic.rend10395 ] + br label %logic.from10396 +logic.from10396: + br i1 %t38, label %logic.end10398, label %logic.rhs10397 +logic.rhs10397: + store { ptr, i64, i64 } { ptr @.str.6962, i64 5, i64 0 }, ptr %a39 %t41 = load i8, ptr %a18 call void @finch_str_from_char(ptr %a42, i8 signext %t41) %t43 = load { ptr, i64, i64 }, ptr %a42 @@ -106329,13 +106504,13 @@ logic.rhs10369: %t46 = icmp sge i64 %t45, 0 store { ptr, i64, i64 } %t43, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %logic.rend10371 -logic.rend10371: - br label %logic.end10370 -logic.end10370: - %t48 = phi i1 [ true, %logic.from10368 ], [ %t46, %logic.rend10371 ] - br i1 %t48, label %then10372, label %else10373 -then10372: + br label %logic.rend10399 +logic.rend10399: + br label %logic.end10398 +logic.end10398: + %t48 = phi i1 [ true, %logic.from10396 ], [ %t46, %logic.rend10399 ] + br i1 %t48, label %then10400, label %else10401 +then10400: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t50 = load i8, ptr %a18 call void @finch_str_from_char(ptr %a51, i8 signext %t50) @@ -106347,8 +106522,8 @@ then10372: %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i64 %t53 store { ptr, i64, i64 } %t52, ptr %t56 store i64 %t54, ptr %t49 - br label %endif10374 -else10373: + br label %endif10402 +else10401: %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t58 = load i64, ptr %a21 %t59 = sdiv i64 %t58, 16 @@ -106356,17 +106531,17 @@ else10373: %t61 = load { ptr, i64, i64 }, ptr %a2 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 %t60, %t62 - br i1 %t63, label %range10375, label %inrange10376 -range10375: - call void @finch_panic_index(ptr @.str.6950, i64 138, i64 %t60, i64 %t62) + br i1 %t63, label %range10403, label %inrange10404 +range10403: + call void @finch_panic_index(ptr @.str.6965, i64 138, i64 %t60, i64 %t62) unreachable -inrange10376: +inrange10404: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 %t66 = load i8, ptr %t65 call void @finch_str_from_char(ptr %a67, i8 signext %t66) %t68 = load { ptr, i64, i64 }, ptr %a67 - store { ptr, i64, i64 } { ptr @.str.6949, i64 1, i64 0 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.6964, i64 1, i64 0 }, ptr %a70 store { ptr, i64, i64 } %t68, ptr %a71 call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) store { ptr, i64, i64 } %t68, ptr %a72 @@ -106377,11 +106552,11 @@ inrange10376: %t76 = load { ptr, i64, i64 }, ptr %a2 %t77 = extractvalue { ptr, i64, i64 } %t76, 1 %t78 = icmp uge i64 %t75, %t77 - br i1 %t78, label %range10377, label %inrange10378 -range10377: - call void @finch_panic_index(ptr @.str.6951, i64 138, i64 %t75, i64 %t77) + br i1 %t78, label %range10405, label %inrange10406 +range10405: + call void @finch_panic_index(ptr @.str.6966, i64 138, i64 %t75, i64 %t77) unreachable -inrange10378: +inrange10406: %t79 = extractvalue { ptr, i64, i64 } %t76, 0 %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 %t81 = load i8, ptr %t80 @@ -106402,17 +106577,17 @@ inrange10378: %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t90 store { ptr, i64, i64 } %t89, ptr %t93 store i64 %t91, ptr %t57 - br label %endif10374 -endif10374: - br label %each.step10346 -each.step10346: + br label %endif10402 +endif10402: + br label %each.step10374 +each.step10374: %t94 = load i64, ptr %a10 %t95 = add i64 %t94, 1 store i64 %t95, ptr %a10 - br label %each.cond10344 -each.end10347: + br label %each.cond10372 +each.end10375: %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6952, i64 0, i64 0 }, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.6967, i64 0, i64 0 }, ptr %a97 call void @finch_str_join(ptr %a98, ptr %a9, ptr %a97) %t99 = load { ptr, i64, i64 }, ptr %a98 call void @finch.drop.arr_str(ptr %a9) @@ -106432,80 +106607,80 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a2 store i64 0, ptr %a3 - br label %while.cond10379 -while.cond10379: + br label %while.cond10407 +while.cond10407: %t4 = load i64, ptr %a3 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = icmp slt i64 %t4, %t6 - br i1 %t7, label %while.body10380, label %while.end10381 -while.body10380: + br i1 %t7, label %while.body10408, label %while.end10409 +while.body10408: %t8 = load i64, ptr %a3 %t9 = load { ptr, i64, i64 }, ptr %a1 %t10 = extractvalue { ptr, i64, i64 } %t9, 1 %t11 = icmp uge i64 %t8, %t10 - br i1 %t11, label %range10382, label %inrange10383 -range10382: - call void @finch_panic_index(ptr @.str.6953, i64 149, i64 %t8, i64 %t10) + br i1 %t11, label %range10410, label %inrange10411 +range10410: + call void @finch_panic_index(ptr @.str.6968, i64 149, i64 %t8, i64 %t10) unreachable -inrange10383: +inrange10411: %t12 = extractvalue { ptr, i64, i64 } %t9, 0 %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 %t14 = load i8, ptr %t13 %t15 = icmp eq i8 %t14, 92 - br label %logic.from10384 -logic.from10384: - br i1 %t15, label %logic.rhs10385, label %logic.end10386 -logic.rhs10385: + br label %logic.from10412 +logic.from10412: + br i1 %t15, label %logic.rhs10413, label %logic.end10414 +logic.rhs10413: %t16 = load i64, ptr %a3 %t17 = add i64 %t16, 1 %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp slt i64 %t17, %t19 - br label %logic.rend10387 -logic.rend10387: - br label %logic.end10386 -logic.end10386: - %t21 = phi i1 [ false, %logic.from10384 ], [ %t20, %logic.rend10387 ] - br i1 %t21, label %then10388, label %else10389 -then10388: + br label %logic.rend10415 +logic.rend10415: + br label %logic.end10414 +logic.end10414: + %t21 = phi i1 [ false, %logic.from10412 ], [ %t20, %logic.rend10415 ] + br i1 %t21, label %then10416, label %else10417 +then10416: %t22 = load i64, ptr %a3 %t23 = add i64 %t22, 1 %t24 = load { ptr, i64, i64 }, ptr %a1 %t25 = extractvalue { ptr, i64, i64 } %t24, 1 %t26 = icmp uge i64 %t23, %t25 - br i1 %t26, label %range10391, label %inrange10392 -range10391: - call void @finch_panic_index(ptr @.str.6954, i64 150, i64 %t23, i64 %t25) + br i1 %t26, label %range10419, label %inrange10420 +range10419: + call void @finch_panic_index(ptr @.str.6969, i64 150, i64 %t23, i64 %t25) unreachable -inrange10392: +inrange10420: %t27 = extractvalue { ptr, i64, i64 } %t24, 0 %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 %t29 = load i8, ptr %t28 %t30 = icmp eq i8 %t29, 110 - br i1 %t30, label %then10393, label %else10394 -then10393: + br i1 %t30, label %then10421, label %else10422 +then10421: %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = add i64 %t32, 1 call void @finch_arr_reserve(ptr %a2, i64 %t33, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t34 = load ptr, ptr %a2 %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i64 %t32 - store { ptr, i64, i64 } { ptr @.str.6955, i64 1, i64 0 }, ptr %t35 + store { ptr, i64, i64 } { ptr @.str.6970, i64 1, i64 0 }, ptr %t35 store i64 %t33, ptr %t31 - br label %endif10395 -else10394: + br label %endif10423 +else10422: %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t37 = load i64, ptr %a3 %t38 = add i64 %t37, 1 %t39 = load { ptr, i64, i64 }, ptr %a1 %t40 = extractvalue { ptr, i64, i64 } %t39, 1 %t41 = icmp uge i64 %t38, %t40 - br i1 %t41, label %range10396, label %inrange10397 -range10396: - call void @finch_panic_index(ptr @.str.6956, i64 153, i64 %t38, i64 %t40) + br i1 %t41, label %range10424, label %inrange10425 +range10424: + call void @finch_panic_index(ptr @.str.6971, i64 153, i64 %t38, i64 %t40) unreachable -inrange10397: +inrange10425: %t42 = extractvalue { ptr, i64, i64 } %t39, 0 %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 %t44 = load i8, ptr %t43 @@ -106518,23 +106693,23 @@ inrange10397: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t36 - br label %endif10395 -endif10395: + br label %endif10423 +endif10423: %t51 = load i64, ptr %a3 %t52 = add i64 %t51, 2 store i64 %t52, ptr %a3 - br label %endif10390 -else10389: + br label %endif10418 +else10417: %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t54 = load i64, ptr %a3 %t55 = load { ptr, i64, i64 }, ptr %a1 %t56 = extractvalue { ptr, i64, i64 } %t55, 1 %t57 = icmp uge i64 %t54, %t56 - br i1 %t57, label %range10398, label %inrange10399 -range10398: - call void @finch_panic_index(ptr @.str.6957, i64 157, i64 %t54, i64 %t56) + br i1 %t57, label %range10426, label %inrange10427 +range10426: + call void @finch_panic_index(ptr @.str.6972, i64 157, i64 %t54, i64 %t56) unreachable -inrange10399: +inrange10427: %t58 = extractvalue { ptr, i64, i64 } %t55, 0 %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 %t60 = load i8, ptr %t59 @@ -106550,12 +106725,12 @@ inrange10399: %t67 = load i64, ptr %a3 %t68 = add i64 %t67, 1 store i64 %t68, ptr %a3 - br label %endif10390 -endif10390: - br label %while.cond10379 -while.end10381: + br label %endif10418 +endif10418: + br label %while.cond10407 +while.end10409: %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6958, i64 0, i64 0 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.6973, i64 0, i64 0 }, ptr %a70 call void @finch_str_join(ptr %a71, ptr %a2, ptr %a70) %t72 = load { ptr, i64, i64 }, ptr %a71 call void @finch.drop.arr_str(ptr %a2) @@ -106577,37 +106752,37 @@ entry: store i64 %p1, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.6960, i64 1, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6975, i64 1, i64 0 }, ptr %a6 call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 %t10 = load i64, ptr %a2 %t11 = icmp sge i64 %t10, 1 - br label %logic.from10400 -logic.from10400: - br i1 %t11, label %logic.rhs10401, label %logic.end10402 -logic.rhs10401: + br label %logic.from10428 +logic.from10428: + br i1 %t11, label %logic.rhs10429, label %logic.end10430 +logic.rhs10429: %t12 = load i64, ptr %a2 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sle i64 %t12, %t14 - br label %logic.rend10403 -logic.rend10403: - br label %logic.end10402 -logic.end10402: - %t16 = phi i1 [ false, %logic.from10400 ], [ %t15, %logic.rend10403 ] - br i1 %t16, label %then10404, label %endif10406 -then10404: + br label %logic.rend10431 +logic.rend10431: + br label %logic.end10430 +logic.end10430: + %t16 = phi i1 [ false, %logic.from10428 ], [ %t15, %logic.rend10431 ] + br i1 %t16, label %then10432, label %endif10434 +then10432: %t17 = load i64, ptr %a2 %t18 = sub i64 %t17, 1 %t19 = load { ptr, i64, i64 }, ptr %a9 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range10407, label %inrange10408 -range10407: - call void @finch_panic_index(ptr @.str.6961, i64 167, i64 %t18, i64 %t20) + br i1 %t21, label %range10435, label %inrange10436 +range10435: + call void @finch_panic_index(ptr @.str.6976, i64 167, i64 %t18, i64 %t20) unreachable -inrange10408: +inrange10436: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 %t24 = load { ptr, i64, i64 }, ptr %t23 @@ -106616,9 +106791,9 @@ inrange10408: %t27 = load { ptr, i64, i64 }, ptr %a26 call void @finch.drop.arr_str(ptr %a9) ret { ptr, i64, i64 } %t27 -endif10406: +endif10434: call void @finch.drop.arr_str(ptr %a9) - ret { ptr, i64, i64 } { ptr @.str.6962, i64 0, i64 0 } + ret { ptr, i64, i64 } { ptr @.str.6977, i64 0, i64 0 } } define internal { ptr, i64, i64 } @finch.lsp.readLine() { @@ -106635,25 +106810,25 @@ entry: %a28 = alloca { ptr, i64, i64 }, align 16 %a34 = alloca { ptr, i64, i64 }, align 16 store { ptr, i64, i64 } zeroinitializer, ptr %a1 - br label %while.cond10409 -while.cond10409: - br label %while.body10410 -while.body10410: + br label %while.cond10437 +while.cond10437: + br label %while.body10438 +while.body10438: %t2 = call i32 @getchar() store i32 %t2, ptr %a3 %t4 = load i32, ptr %a3 %t5 = icmp slt i32 %t4, 0 - br i1 %t5, label %then10412, label %endif10414 -then10412: + br i1 %t5, label %then10440, label %endif10442 +then10440: call void @finch.drop.arr_u8(ptr %a1) - ret { ptr, i64, i64 } { ptr @.str.6963, i64 0, i64 0 } -endif10414: + ret { ptr, i64, i64 } { ptr @.str.6978, i64 0, i64 0 } +endif10442: %t6 = load i32, ptr %a3 %t7 = icmp eq i32 %t6, 10 - br i1 %t7, label %then10415, label %endif10417 -then10415: - br label %while.end10411 -endif10417: + br i1 %t7, label %then10443, label %endif10445 +then10443: + br label %while.end10439 +endif10445: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t9 = load i32, ptr %a3 %t10 = trunc i32 %t9 to i8 @@ -106664,8 +106839,8 @@ endif10417: %t14 = getelementptr inbounds i8, ptr %t13, i64 %t11 store i8 %t10, ptr %t14 store i64 %t12, ptr %t8 - br label %while.cond10409 -while.end10411: + br label %while.cond10437 +while.end10439: %t15 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } zeroinitializer, ptr %a16 store { ptr, i64, i64 } %t15, ptr %a17 @@ -106674,24 +106849,24 @@ while.end10411: store { ptr, i64, i64 } %t18, ptr %a19 %t20 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t20, ptr %a21 - store { ptr, i64, i64 } { ptr @.str.6965, i64 1, i64 0 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.6980, i64 1, i64 0 }, ptr %a23 %t24 = call i32 @finch_str_ends(ptr %a21, ptr %a23) %t25 = icmp ne i32 %t24, 0 - br i1 %t25, label %then10418, label %endif10420 -then10418: + br i1 %t25, label %then10446, label %endif10448 +then10446: %t26 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t26, ptr %a27 %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 %t30 = load i64, ptr %t29 %t31 = sub i64 %t30, 1 - call void @finch_str_sub(ptr %a28, ptr %a27, i64 0, i64 %t31, ptr @.str.6966, i64 188) + call void @finch_str_sub(ptr %a28, ptr %a27, i64 0, i64 %t31, ptr @.str.6981, i64 188) %t32 = load { ptr, i64, i64 }, ptr %a28 %t33 = load { ptr, i64, i64 }, ptr %a19 store { ptr, i64, i64 } %t32, ptr %a19 store { ptr, i64, i64 } %t33, ptr %a34 call void @finch_str_drop(ptr %a34) - br label %endif10420 -endif10420: + br label %endif10448 +endif10448: %t35 = load { ptr, i64, i64 }, ptr %a19 call void @finch.drop.arr_u8(ptr %a1) ret { ptr, i64, i64 } %t35 @@ -106721,48 +106896,48 @@ entry: %a60 = alloca { ptr, i64, i64 }, align 16 %a67 = alloca { ptr, i64, i64 }, align 16 store i64 0, ptr %a1 - br label %while.cond10421 -while.cond10421: - br label %while.body10422 -while.body10422: + br label %while.cond10449 +while.cond10449: + br label %while.body10450 +while.body10450: %t2 = call { ptr, i64, i64 } @finch.lsp.readLine() store { ptr, i64, i64 } %t2, ptr %a3 %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = icmp eq i64 %t5, 0 - br i1 %t6, label %then10424, label %endif10426 -then10424: + br i1 %t6, label %then10452, label %endif10454 +then10452: %t7 = load i64, ptr %a1 %t8 = icmp sgt i64 %t7, 0 - br i1 %t8, label %then10427, label %endif10429 -then10427: + br i1 %t8, label %then10455, label %endif10457 +then10455: call void @finch_str_drop(ptr %a3) - br label %while.end10423 -endif10429: + br label %while.end10451 +endif10457: %t9 = load ptr, ptr @stdin %t10 = call i32 @feof(ptr %t9) %t11 = icmp ne i32 %t10, 0 - br i1 %t11, label %then10430, label %endif10432 -then10430: + br i1 %t11, label %then10458, label %endif10460 +then10458: call void @finch_str_drop(ptr %a3) - %t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6967, i64 32, i64 0 }, 2 + %t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6982, i64 32, i64 0 }, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t12 -endif10432: +endif10460: call void @finch_str_drop(ptr %a3) - br label %while.cond10421 -endif10426: + br label %while.cond10449 +endif10454: %t13 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t13, ptr %a14 - store { ptr, i64, i64 } { ptr @.str.6969, i64 15, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6984, i64 15, i64 0 }, ptr %a16 %t17 = call i32 @finch_str_starts(ptr %a14, ptr %a16) %t18 = icmp ne i32 %t17, 0 - br i1 %t18, label %then10433, label %endif10435 -then10433: + br i1 %t18, label %then10461, label %endif10463 +then10461: %t19 = load { ptr, i64, i64 }, ptr %a3 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t23 = load i64, ptr %t22 - call void @finch_str_sub(ptr %a21, ptr %a20, i64 15, i64 %t23, ptr @.str.6970, i64 208) + call void @finch_str_sub(ptr %a21, ptr %a20, i64 15, i64 %t23, ptr @.str.6985, i64 208) %t24 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t24, ptr %a25 call void @finch_str_trim(ptr %a26, ptr %a25) @@ -106778,42 +106953,42 @@ then10433: store { ptr, i64, i64 } %t27, ptr %a35 call void @finch_str_drop(ptr %a35) %t36 = load i64, ptr %a30 - br i1 %t33, label %or.failed10436, label %or.ok10437 -or.failed10436: + br i1 %t33, label %or.failed10464, label %or.ok10465 +or.failed10464: store { ptr, i64, i64 } %t34, ptr %a37 call void @finch_str_drop(ptr %a37) - br label %or.bend10438 -or.bend10438: - br label %or.end10439 -or.ok10437: - br label %or.end10439 -or.end10439: - %t38 = phi i64 [ 0, %or.bend10438 ], [ %t36, %or.ok10437 ] + br label %or.bend10466 +or.bend10466: + br label %or.end10467 +or.ok10465: + br label %or.end10467 +or.end10467: + %t38 = phi i64 [ 0, %or.bend10466 ], [ %t36, %or.ok10465 ] store i64 %t38, ptr %a1 - br label %endif10435 -endif10435: + br label %endif10463 +endif10463: call void @finch_str_drop(ptr %a3) - br label %while.cond10421 -while.end10423: + br label %while.cond10449 +while.end10451: store { ptr, i64, i64 } zeroinitializer, ptr %a39 %t40 = load i64, ptr %a1 store i64 0, ptr %a41 - br label %for.cond10440 -for.cond10440: + br label %for.cond10468 +for.cond10468: %t42 = load i64, ptr %a41 %t43 = icmp slt i64 %t42, %t40 - br i1 %t43, label %for.body10441, label %for.end10443 -for.body10441: + br i1 %t43, label %for.body10469, label %for.end10471 +for.body10469: %t44 = call i32 @getchar() store i32 %t44, ptr %a45 %t46 = load i32, ptr %a45 %t47 = icmp slt i32 %t46, 0 - br i1 %t47, label %then10444, label %endif10446 -then10444: + br i1 %t47, label %then10472, label %endif10474 +then10472: call void @finch.drop.arr_u8(ptr %a39) - %t48 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6972, i64 25, i64 0 }, 2 + %t48 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6987, i64 25, i64 0 }, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t48 -endif10446: +endif10474: %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a39, i32 0, i32 1 %t50 = load i32, ptr %a45 %t51 = trunc i32 %t50 to i8 @@ -106824,13 +106999,13 @@ endif10446: %t55 = getelementptr inbounds i8, ptr %t54, i64 %t52 store i8 %t51, ptr %t55 store i64 %t53, ptr %t49 - br label %for.step10442 -for.step10442: + br label %for.step10470 +for.step10470: %t56 = load i64, ptr %a41 %t57 = add i64 %t56, 1 store i64 %t57, ptr %a41 - br label %for.cond10440 -for.end10443: + br label %for.cond10468 +for.end10471: %t58 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } zeroinitializer, ptr %a59 store { ptr, i64, i64 } %t58, ptr %a60 @@ -106843,12 +107018,12 @@ for.end10443: %t66 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 1 store { ptr, i64, i64 } %t61, ptr %a67 call void @finch_str_drop(ptr %a67) - br i1 %t64, label %try.failed10447, label %try.ok10448 -try.failed10447: + br i1 %t64, label %try.failed10475, label %try.ok10476 +try.failed10475: call void @finch.drop.arr_u8(ptr %a39) %t68 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t65, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t68 -try.ok10448: +try.ok10476: call void @finch.drop.arr_u8(ptr %a39) %t69 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t70 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t69, %S.json.Json %t66, 1 @@ -106881,14 +107056,14 @@ entry: %t6 = load i64, ptr %t5 call void @finch_str_from_int(ptr %a7, i64 %t6) %t8 = load { ptr, i64, i64 }, ptr %a7 - store { ptr, i64, i64 } { ptr @.str.6973, i64 16, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.6988, i64 16, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) store { ptr, i64, i64 } %t8, ptr %a12 call void @finch_str_drop(ptr %a12) %t13 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t13, ptr %a15 - store { ptr, i64, i64 } { ptr @.str.6974, i64 4, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6989, i64 4, i64 0 }, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) store { ptr, i64, i64 } %t13, ptr %a17 call void @finch_str_drop(ptr %a17) @@ -106904,7 +107079,7 @@ entry: %t27 = load { ptr, i64, i64 }, ptr %a26 %t28 = extractvalue { ptr, i64, i64 } %t27, 0 %t29 = icmp eq ptr %t28, null - %t30 = select i1 %t29, ptr @.str.6975, ptr %t28 + %t30 = select i1 %t29, ptr @.str.6990, ptr %t28 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load ptr, ptr @stdout @@ -106924,19 +107099,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10449 -n.cond10449: + br label %n.cond10477 +n.cond10477: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10450, label %n.end10451 -n.body10450: + br i1 %t6, label %n.body10478, label %n.end10479 +n.body10478: %t7 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t5 call void @finch.drop.S_json_Json(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10449 -n.end10451: + br label %n.cond10477 +n.end10479: call void @finch_arr_free(ptr %a) ret void } @@ -106963,14 +107138,14 @@ entry: store %S.json.Json %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 - %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6977, i64 3, i64 0 }) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6976, i64 7, i64 0 }, %S.json.Json %t5) + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6992, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6991, i64 7, i64 0 }, %S.json.Json %t5) store %S.json.Json %t5, ptr %a6 call void @finch.drop.S_json_Json(ptr %a6) %t7 = load %S.json.Json, ptr %a1 - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6978, i64 2, i64 0 }, %S.json.Json %t7) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6993, i64 2, i64 0 }, %S.json.Json %t7) %t8 = load %S.json.Json, ptr %a2 - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6979, i64 6, i64 0 }, %S.json.Json %t8) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6994, i64 6, i64 0 }, %S.json.Json %t8) %t9 = load %S.json.Json, ptr %a4 call void @finch.lsp.send(%S.json.Json %t9) call void @finch.drop.S_json_Json(ptr %a4) @@ -106988,17 +107163,17 @@ entry: store %S.json.Json %p1, ptr %a2 %t3 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t3, ptr %a4 - %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6981, i64 3, i64 0 }) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6980, i64 7, i64 0 }, %S.json.Json %t5) + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6996, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6995, i64 7, i64 0 }, %S.json.Json %t5) store %S.json.Json %t5, ptr %a6 call void @finch.drop.S_json_Json(ptr %a6) %t7 = load { ptr, i64, i64 }, ptr %a1 %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6982, i64 6, i64 0 }, %S.json.Json %t8) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6997, i64 6, i64 0 }, %S.json.Json %t8) store %S.json.Json %t8, ptr %a9 call void @finch.drop.S_json_Json(ptr %a9) %t10 = load %S.json.Json, ptr %a2 - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6983, i64 6, i64 0 }, %S.json.Json %t10) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6998, i64 6, i64 0 }, %S.json.Json %t10) %t11 = load %S.json.Json, ptr %a4 call void @finch.lsp.send(%S.json.Json %t11) call void @finch.drop.S_json_Json(ptr %a4) @@ -107028,12 +107203,12 @@ entry: store %S.json.Json %t3, ptr %a4 %t5 = load i64, ptr %a1 %t6 = call %S.json.Json @finch.lsp.num(i64 %t5) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6984, i64 4, i64 0 }, %S.json.Json %t6) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6999, i64 4, i64 0 }, %S.json.Json %t6) store %S.json.Json %t6, ptr %a7 call void @finch.drop.S_json_Json(ptr %a7) %t8 = load i64, ptr %a2 %t9 = call %S.json.Json @finch.lsp.num(i64 %t8) - call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6985, i64 9, i64 0 }, %S.json.Json %t9) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7000, i64 9, i64 0 }, %S.json.Json %t9) store %S.json.Json %t9, ptr %a10 call void @finch.drop.S_json_Json(ptr %a10) %t11 = load %S.json.Json, ptr %a4 @@ -107056,13 +107231,13 @@ entry: %t6 = load i64, ptr %a1 %t7 = load i64, ptr %a2 %t8 = call %S.json.Json @finch.lsp.position(i64 %t6, i64 %t7) - call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.6986, i64 5, i64 0 }, %S.json.Json %t8) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7001, i64 5, i64 0 }, %S.json.Json %t8) store %S.json.Json %t8, ptr %a9 call void @finch.drop.S_json_Json(ptr %a9) %t10 = load i64, ptr %a1 %t11 = load i64, ptr %a3 %t12 = call %S.json.Json @finch.lsp.position(i64 %t10, i64 %t11) - call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.6987, i64 3, i64 0 }, %S.json.Json %t12) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7002, i64 3, i64 0 }, %S.json.Json %t12) store %S.json.Json %t12, ptr %a13 call void @finch.drop.S_json_Json(ptr %a13) %t14 = load %S.json.Json, ptr %a5 @@ -107079,7 +107254,7 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6989, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7004, i64 1, i64 0 }, ptr %a5 call void @finch_str_split(ptr %a6, ptr %a3, ptr %a5) %t7 = load { ptr, i64, i64 }, ptr %a6 ret { ptr, i64, i64 } %t7 @@ -107101,17 +107276,17 @@ entry: %t7 = icmp eq i32 %t6, 0 %t8 = load { ptr, i64, i64 }, ptr %a3 %t9 = load i64, ptr %a4 - br i1 %t7, label %or.failed10452, label %or.ok10453 -or.failed10452: + br i1 %t7, label %or.failed10480, label %or.ok10481 +or.failed10480: store { ptr, i64, i64 } %t8, ptr %a10 call void @finch_str_drop(ptr %a10) - br label %or.bend10454 -or.bend10454: - br label %or.end10455 -or.ok10453: - br label %or.end10455 -or.end10455: - %t11 = phi i64 [ 0, %or.bend10454 ], [ %t9, %or.ok10453 ] + br label %or.bend10482 +or.bend10482: + br label %or.end10483 +or.ok10481: + br label %or.end10483 +or.end10483: + %t11 = phi i64 [ 0, %or.bend10482 ], [ %t9, %or.ok10481 ] ret i64 %t11 } @@ -107146,19 +107321,19 @@ entry: store { ptr, i64, i64 } %p0, ptr %a1 %t2 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t2, ptr %a3 - store { ptr, i64, i64 } { ptr @.str.6991, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7006, i64 9, i64 0 }, ptr %a5 %t6 = call i64 @finch_str_find(ptr %a3, ptr %a5) store i64 %t6, ptr %a7 %t8 = load i64, ptr %a7 %t9 = icmp slt i64 %t8, 0 - br i1 %t9, label %then10456, label %endif10458 -then10456: + br i1 %t9, label %then10484, label %endif10486 +then10484: ret %S.lsp.Diag zeroinitializer -endif10458: +endif10486: %t10 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t10, ptr %a11 %t13 = load i64, ptr %a7 - call void @finch_str_sub(ptr %a12, ptr %a11, i64 0, i64 %t13, ptr @.str.6992, i64 280) + call void @finch_str_sub(ptr %a12, ptr %a11, i64 0, i64 %t13, ptr @.str.7007, i64 280) %t14 = load { ptr, i64, i64 }, ptr %a12 store { ptr, i64, i64 } %t14, ptr %a15 %t16 = load { ptr, i64, i64 }, ptr %a1 @@ -107167,36 +107342,36 @@ endif10458: %t20 = add i64 %t19, 9 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t22 = load i64, ptr %t21 - call void @finch_str_sub(ptr %a18, ptr %a17, i64 %t20, i64 %t22, ptr @.str.6993, i64 281) + call void @finch_str_sub(ptr %a18, ptr %a17, i64 %t20, i64 %t22, ptr @.str.7008, i64 281) %t23 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t23, ptr %a24 %t25 = load { ptr, i64, i64 }, ptr %a15 store { ptr, i64, i64 } %t25, ptr %a26 - store { ptr, i64, i64 } { ptr @.str.6995, i64 1, i64 0 }, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.7010, i64 1, i64 0 }, ptr %a28 call void @finch_str_split(ptr %a29, ptr %a26, ptr %a28) %t30 = load { ptr, i64, i64 }, ptr %a29 store { ptr, i64, i64 } %t30, ptr %a31 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = icmp slt i64 %t33, 3 - br i1 %t34, label %then10459, label %endif10461 -then10459: + br i1 %t34, label %then10487, label %endif10489 +then10487: call void @finch.drop.arr_str(ptr %a31) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a15) ret %S.lsp.Diag zeroinitializer -endif10461: +endif10489: %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 %t36 = load i64, ptr %t35 %t37 = sub i64 %t36, 1 %t38 = load { ptr, i64, i64 }, ptr %a31 %t39 = extractvalue { ptr, i64, i64 } %t38, 1 %t40 = icmp uge i64 %t37, %t39 - br i1 %t40, label %range10462, label %inrange10463 -range10462: - call void @finch_panic_index(ptr @.str.6996, i64 287, i64 %t37, i64 %t39) + br i1 %t40, label %range10490, label %inrange10491 +range10490: + call void @finch_panic_index(ptr @.str.7011, i64 287, i64 %t37, i64 %t39) unreachable -inrange10463: +inrange10491: %t41 = extractvalue { ptr, i64, i64 } %t38, 0 %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t37 %t43 = load { ptr, i64, i64 }, ptr %t42 @@ -107208,11 +107383,11 @@ inrange10463: %t49 = load { ptr, i64, i64 }, ptr %a31 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 %t48, %t50 - br i1 %t51, label %range10464, label %inrange10465 -range10464: - call void @finch_panic_index(ptr @.str.6997, i64 288, i64 %t48, i64 %t50) + br i1 %t51, label %range10492, label %inrange10493 +range10492: + call void @finch_panic_index(ptr @.str.7012, i64 288, i64 %t48, i64 %t50) unreachable -inrange10465: +inrange10493: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t48 %t54 = load { ptr, i64, i64 }, ptr %t53 @@ -107223,22 +107398,22 @@ inrange10465: %t59 = load i64, ptr %t58 %t60 = sub i64 %t59, 2 store i64 0, ptr %a61 - br label %for.cond10466 -for.cond10466: + br label %for.cond10494 +for.cond10494: %t62 = load i64, ptr %a61 %t63 = icmp slt i64 %t62, %t60 - br i1 %t63, label %for.body10467, label %for.end10469 -for.body10467: + br i1 %t63, label %for.body10495, label %for.end10497 +for.body10495: %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 %t65 = load i64, ptr %a61 %t66 = load { ptr, i64, i64 }, ptr %a31 %t67 = extractvalue { ptr, i64, i64 } %t66, 1 %t68 = icmp uge i64 %t65, %t67 - br i1 %t68, label %range10470, label %inrange10471 -range10470: - call void @finch_panic_index(ptr @.str.6998, i64 291, i64 %t65, i64 %t67) + br i1 %t68, label %range10498, label %inrange10499 +range10498: + call void @finch_panic_index(ptr @.str.7013, i64 291, i64 %t65, i64 %t67) unreachable -inrange10471: +inrange10499: %t69 = extractvalue { ptr, i64, i64 } %t66, 0 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t65 %t71 = load { ptr, i64, i64 }, ptr %t70 @@ -107252,16 +107427,16 @@ inrange10471: %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i64 %t75 store { ptr, i64, i64 } %t74, ptr %t78 store i64 %t76, ptr %t64 - br label %for.step10468 -for.step10468: + br label %for.step10496 +for.step10496: %t79 = load i64, ptr %a61 %t80 = add i64 %t79, 1 store i64 %t80, ptr %a61 - br label %for.cond10466 -for.end10469: + br label %for.cond10494 +for.end10497: %t81 = insertvalue %S.lsp.Diag zeroinitializer, i1 true, 0 %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.6999, i64 1, i64 0 }, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.7014, i64 1, i64 0 }, ptr %a83 call void @finch_str_join(ptr %a84, ptr %a57, ptr %a83) %t85 = load { ptr, i64, i64 }, ptr %a84 %t86 = insertvalue %S.lsp.Diag %t81, { ptr, i64, i64 } %t85, 1 @@ -107375,41 +107550,41 @@ entry: store %S.lsp.Analysis zeroinitializer, ptr %a2 %t3 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t3, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.7001, i64 1, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7016, i64 1, i64 0 }, ptr %a6 call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t8, ptr %a9 store i64 0, ptr %a10 - br label %each.cond10472 -each.cond10472: + br label %each.cond10500 +each.cond10500: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t12 = load i64, ptr %t11 %t13 = load i64, ptr %a10 %t14 = icmp slt i64 %t13, %t12 - br i1 %t14, label %each.body10473, label %each.end10475 -each.body10473: + br i1 %t14, label %each.body10501, label %each.end10503 +each.body10501: %t15 = load ptr, ptr %a9 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 %t17 = load { ptr, i64, i64 }, ptr %t16 store { ptr, i64, i64 } %t17, ptr %a18 %t19 = load { ptr, i64, i64 }, ptr %a18 store { ptr, i64, i64 } %t19, ptr %a20 - store { ptr, i64, i64 } { ptr @.str.7003, i64 1, i64 0 }, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.7018, i64 1, i64 0 }, ptr %a22 %t23 = call i32 @finch_str_starts(ptr %a20, ptr %a22) %t24 = icmp ne i32 %t23, 0 - br i1 %t24, label %then10476, label %else10477 -then10476: + br i1 %t24, label %then10504, label %else10505 +then10504: %t25 = load { ptr, i64, i64 }, ptr %a18 %t26 = call { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %t25) store { ptr, i64, i64 } %t26, ptr %a27 %t28 = load { ptr, i64, i64 }, ptr %a27 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 0, %t29 - br i1 %t30, label %range10479, label %inrange10480 -range10479: - call void @finch_panic_index(ptr @.str.7004, i64 301, i64 0, i64 %t29) + br i1 %t30, label %range10507, label %inrange10508 +range10507: + call void @finch_panic_index(ptr @.str.7019, i64 301, i64 0, i64 %t29) unreachable -inrange10480: +inrange10508: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i64 0 %t33 = load { ptr, i64, i64 }, ptr %t32 @@ -107419,33 +107594,33 @@ inrange10480: store { ptr, i64, i64 } %t36, ptr %a37 %t38 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t38, ptr %a39 - store { ptr, i64, i64 } { ptr @.str.7005, i64 2, i64 0 }, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.7020, i64 2, i64 0 }, ptr %a40 %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) %t42 = icmp ne i32 %t41, 0 - br label %logic.from10481 -logic.from10481: - br i1 %t42, label %logic.rhs10482, label %logic.end10483 -logic.rhs10482: + br label %logic.from10509 +logic.from10509: + br i1 %t42, label %logic.rhs10510, label %logic.end10511 +logic.rhs10510: %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t44 = load i64, ptr %t43 %t45 = icmp sge i64 %t44, 9 - br label %logic.rend10484 -logic.rend10484: - br label %logic.end10483 -logic.end10483: - %t46 = phi i1 [ false, %logic.from10481 ], [ %t45, %logic.rend10484 ] - br i1 %t46, label %then10485, label %else10486 -then10485: + br label %logic.rend10512 +logic.rend10512: + br label %logic.end10511 +logic.end10511: + %t46 = phi i1 [ false, %logic.from10509 ], [ %t45, %logic.rend10512 ] + br i1 %t46, label %then10513, label %else10514 +then10513: %t47 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 0 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1 %t49 = load { ptr, i64, i64 }, ptr %a27 %t50 = extractvalue { ptr, i64, i64 } %t49, 1 %t51 = icmp uge i64 1, %t50 - br i1 %t51, label %range10488, label %inrange10489 -range10488: - call void @finch_panic_index(ptr @.str.7006, i64 303, i64 1, i64 %t50) + br i1 %t51, label %range10516, label %inrange10517 +range10516: + call void @finch_panic_index(ptr @.str.7021, i64 303, i64 1, i64 %t50) unreachable -inrange10489: +inrange10517: %t52 = extractvalue { ptr, i64, i64 } %t49, 0 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 1 %t54 = load { ptr, i64, i64 }, ptr %t53 @@ -107456,11 +107631,11 @@ inrange10489: %t59 = load { ptr, i64, i64 }, ptr %a27 %t60 = extractvalue { ptr, i64, i64 } %t59, 1 %t61 = icmp uge i64 2, %t60 - br i1 %t61, label %range10490, label %inrange10491 -range10490: - call void @finch_panic_index(ptr @.str.7007, i64 303, i64 2, i64 %t60) + br i1 %t61, label %range10518, label %inrange10519 +range10518: + call void @finch_panic_index(ptr @.str.7022, i64 303, i64 2, i64 %t60) unreachable -inrange10491: +inrange10519: %t62 = extractvalue { ptr, i64, i64 } %t59, 0 %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 2 %t64 = load { ptr, i64, i64 }, ptr %t63 @@ -107469,11 +107644,11 @@ inrange10491: %t67 = load { ptr, i64, i64 }, ptr %a27 %t68 = extractvalue { ptr, i64, i64 } %t67, 1 %t69 = icmp uge i64 3, %t68 - br i1 %t69, label %range10492, label %inrange10493 -range10492: - call void @finch_panic_index(ptr @.str.7008, i64 303, i64 3, i64 %t68) + br i1 %t69, label %range10520, label %inrange10521 +range10520: + call void @finch_panic_index(ptr @.str.7023, i64 303, i64 3, i64 %t68) unreachable -inrange10493: +inrange10521: %t70 = extractvalue { ptr, i64, i64 } %t67, 0 %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 3 %t72 = load { ptr, i64, i64 }, ptr %t71 @@ -107482,11 +107657,11 @@ inrange10493: %t75 = load { ptr, i64, i64 }, ptr %a27 %t76 = extractvalue { ptr, i64, i64 } %t75, 1 %t77 = icmp uge i64 4, %t76 - br i1 %t77, label %range10494, label %inrange10495 -range10494: - call void @finch_panic_index(ptr @.str.7009, i64 303, i64 4, i64 %t76) + br i1 %t77, label %range10522, label %inrange10523 +range10522: + call void @finch_panic_index(ptr @.str.7024, i64 303, i64 4, i64 %t76) unreachable -inrange10495: +inrange10523: %t78 = extractvalue { ptr, i64, i64 } %t75, 0 %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 4 %t80 = load { ptr, i64, i64 }, ptr %t79 @@ -107495,11 +107670,11 @@ inrange10495: %t83 = load { ptr, i64, i64 }, ptr %a27 %t84 = extractvalue { ptr, i64, i64 } %t83, 1 %t85 = icmp uge i64 5, %t84 - br i1 %t85, label %range10496, label %inrange10497 -range10496: - call void @finch_panic_index(ptr @.str.7010, i64 303, i64 5, i64 %t84) + br i1 %t85, label %range10524, label %inrange10525 +range10524: + call void @finch_panic_index(ptr @.str.7025, i64 303, i64 5, i64 %t84) unreachable -inrange10497: +inrange10525: %t86 = extractvalue { ptr, i64, i64 } %t83, 0 %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 5 %t88 = load { ptr, i64, i64 }, ptr %t87 @@ -107510,11 +107685,11 @@ inrange10497: %t93 = load { ptr, i64, i64 }, ptr %a27 %t94 = extractvalue { ptr, i64, i64 } %t93, 1 %t95 = icmp uge i64 6, %t94 - br i1 %t95, label %range10498, label %inrange10499 -range10498: - call void @finch_panic_index(ptr @.str.7011, i64 303, i64 6, i64 %t94) + br i1 %t95, label %range10526, label %inrange10527 +range10526: + call void @finch_panic_index(ptr @.str.7026, i64 303, i64 6, i64 %t94) unreachable -inrange10499: +inrange10527: %t96 = extractvalue { ptr, i64, i64 } %t93, 0 %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 6 %t98 = load { ptr, i64, i64 }, ptr %t97 @@ -107523,11 +107698,11 @@ inrange10499: %t101 = load { ptr, i64, i64 }, ptr %a27 %t102 = extractvalue { ptr, i64, i64 } %t101, 1 %t103 = icmp uge i64 7, %t102 - br i1 %t103, label %range10500, label %inrange10501 -range10500: - call void @finch_panic_index(ptr @.str.7012, i64 303, i64 7, i64 %t102) + br i1 %t103, label %range10528, label %inrange10529 +range10528: + call void @finch_panic_index(ptr @.str.7027, i64 303, i64 7, i64 %t102) unreachable -inrange10501: +inrange10529: %t104 = extractvalue { ptr, i64, i64 } %t101, 0 %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 7 %t106 = load { ptr, i64, i64 }, ptr %t105 @@ -107536,11 +107711,11 @@ inrange10501: %t109 = load { ptr, i64, i64 }, ptr %a27 %t110 = extractvalue { ptr, i64, i64 } %t109, 1 %t111 = icmp uge i64 8, %t110 - br i1 %t111, label %range10502, label %inrange10503 -range10502: - call void @finch_panic_index(ptr @.str.7013, i64 303, i64 8, i64 %t110) + br i1 %t111, label %range10530, label %inrange10531 +range10530: + call void @finch_panic_index(ptr @.str.7028, i64 303, i64 8, i64 %t110) unreachable -inrange10503: +inrange10531: %t112 = extractvalue { ptr, i64, i64 } %t109, 0 %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 8 %t114 = load { ptr, i64, i64 }, ptr %t113 @@ -107553,37 +107728,37 @@ inrange10503: %t120 = getelementptr inbounds %S.lsp.Ref, ptr %t119, i64 %t117 store %S.lsp.Ref %t116, ptr %t120 store i64 %t118, ptr %t48 - br label %endif10487 -else10486: + br label %endif10515 +else10514: %t121 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t121, ptr %a122 - store { ptr, i64, i64 } { ptr @.str.7014, i64 2, i64 0 }, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.7029, i64 2, i64 0 }, ptr %a123 %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) %t125 = icmp ne i32 %t124, 0 - br label %logic.from10504 -logic.from10504: - br i1 %t125, label %logic.rhs10505, label %logic.end10506 -logic.rhs10505: + br label %logic.from10532 +logic.from10532: + br i1 %t125, label %logic.rhs10533, label %logic.end10534 +logic.rhs10533: %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t127 = load i64, ptr %t126 %t128 = icmp sge i64 %t127, 9 - br label %logic.rend10507 -logic.rend10507: - br label %logic.end10506 -logic.end10506: - %t129 = phi i1 [ false, %logic.from10504 ], [ %t128, %logic.rend10507 ] - br i1 %t129, label %then10508, label %else10509 -then10508: + br label %logic.rend10535 +logic.rend10535: + br label %logic.end10534 +logic.end10534: + %t129 = phi i1 [ false, %logic.from10532 ], [ %t128, %logic.rend10535 ] + br i1 %t129, label %then10536, label %else10537 +then10536: %t130 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 1 %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 %t132 = load { ptr, i64, i64 }, ptr %a27 %t133 = extractvalue { ptr, i64, i64 } %t132, 1 %t134 = icmp uge i64 1, %t133 - br i1 %t134, label %range10511, label %inrange10512 -range10511: - call void @finch_panic_index(ptr @.str.7015, i64 305, i64 1, i64 %t133) + br i1 %t134, label %range10539, label %inrange10540 +range10539: + call void @finch_panic_index(ptr @.str.7030, i64 305, i64 1, i64 %t133) unreachable -inrange10512: +inrange10540: %t135 = extractvalue { ptr, i64, i64 } %t132, 0 %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i64 1 %t137 = load { ptr, i64, i64 }, ptr %t136 @@ -107594,11 +107769,11 @@ inrange10512: %t142 = load { ptr, i64, i64 }, ptr %a27 %t143 = extractvalue { ptr, i64, i64 } %t142, 1 %t144 = icmp uge i64 2, %t143 - br i1 %t144, label %range10513, label %inrange10514 -range10513: - call void @finch_panic_index(ptr @.str.7016, i64 305, i64 2, i64 %t143) + br i1 %t144, label %range10541, label %inrange10542 +range10541: + call void @finch_panic_index(ptr @.str.7031, i64 305, i64 2, i64 %t143) unreachable -inrange10514: +inrange10542: %t145 = extractvalue { ptr, i64, i64 } %t142, 0 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 2 %t147 = load { ptr, i64, i64 }, ptr %t146 @@ -107609,11 +107784,11 @@ inrange10514: %t152 = load { ptr, i64, i64 }, ptr %a27 %t153 = extractvalue { ptr, i64, i64 } %t152, 1 %t154 = icmp uge i64 3, %t153 - br i1 %t154, label %range10515, label %inrange10516 -range10515: - call void @finch_panic_index(ptr @.str.7017, i64 305, i64 3, i64 %t153) + br i1 %t154, label %range10543, label %inrange10544 +range10543: + call void @finch_panic_index(ptr @.str.7032, i64 305, i64 3, i64 %t153) unreachable -inrange10516: +inrange10544: %t155 = extractvalue { ptr, i64, i64 } %t152, 0 %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i64 3 %t157 = load { ptr, i64, i64 }, ptr %t156 @@ -107624,11 +107799,11 @@ inrange10516: %t162 = load { ptr, i64, i64 }, ptr %a27 %t163 = extractvalue { ptr, i64, i64 } %t162, 1 %t164 = icmp uge i64 4, %t163 - br i1 %t164, label %range10517, label %inrange10518 -range10517: - call void @finch_panic_index(ptr @.str.7018, i64 305, i64 4, i64 %t163) + br i1 %t164, label %range10545, label %inrange10546 +range10545: + call void @finch_panic_index(ptr @.str.7033, i64 305, i64 4, i64 %t163) unreachable -inrange10518: +inrange10546: %t165 = extractvalue { ptr, i64, i64 } %t162, 0 %t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %t165, i64 4 %t167 = load { ptr, i64, i64 }, ptr %t166 @@ -107637,11 +107812,11 @@ inrange10518: %t170 = load { ptr, i64, i64 }, ptr %a27 %t171 = extractvalue { ptr, i64, i64 } %t170, 1 %t172 = icmp uge i64 5, %t171 - br i1 %t172, label %range10519, label %inrange10520 -range10519: - call void @finch_panic_index(ptr @.str.7019, i64 305, i64 5, i64 %t171) + br i1 %t172, label %range10547, label %inrange10548 +range10547: + call void @finch_panic_index(ptr @.str.7034, i64 305, i64 5, i64 %t171) unreachable -inrange10520: +inrange10548: %t173 = extractvalue { ptr, i64, i64 } %t170, 0 %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 5 %t175 = load { ptr, i64, i64 }, ptr %t174 @@ -107650,11 +107825,11 @@ inrange10520: %t178 = load { ptr, i64, i64 }, ptr %a27 %t179 = extractvalue { ptr, i64, i64 } %t178, 1 %t180 = icmp uge i64 6, %t179 - br i1 %t180, label %range10521, label %inrange10522 -range10521: - call void @finch_panic_index(ptr @.str.7020, i64 305, i64 6, i64 %t179) + br i1 %t180, label %range10549, label %inrange10550 +range10549: + call void @finch_panic_index(ptr @.str.7035, i64 305, i64 6, i64 %t179) unreachable -inrange10522: +inrange10550: %t181 = extractvalue { ptr, i64, i64 } %t178, 0 %t182 = getelementptr inbounds { ptr, i64, i64 }, ptr %t181, i64 6 %t183 = load { ptr, i64, i64 }, ptr %t182 @@ -107665,11 +107840,11 @@ inrange10522: %t188 = load { ptr, i64, i64 }, ptr %a27 %t189 = extractvalue { ptr, i64, i64 } %t188, 1 %t190 = icmp uge i64 7, %t189 - br i1 %t190, label %range10523, label %inrange10524 -range10523: - call void @finch_panic_index(ptr @.str.7021, i64 305, i64 7, i64 %t189) + br i1 %t190, label %range10551, label %inrange10552 +range10551: + call void @finch_panic_index(ptr @.str.7036, i64 305, i64 7, i64 %t189) unreachable -inrange10524: +inrange10552: %t191 = extractvalue { ptr, i64, i64 } %t188, 0 %t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %t191, i64 7 %t193 = load { ptr, i64, i64 }, ptr %t192 @@ -107678,11 +107853,11 @@ inrange10524: %t196 = load { ptr, i64, i64 }, ptr %a27 %t197 = extractvalue { ptr, i64, i64 } %t196, 1 %t198 = icmp uge i64 8, %t197 - br i1 %t198, label %range10525, label %inrange10526 -range10525: - call void @finch_panic_index(ptr @.str.7022, i64 305, i64 8, i64 %t197) + br i1 %t198, label %range10553, label %inrange10554 +range10553: + call void @finch_panic_index(ptr @.str.7037, i64 305, i64 8, i64 %t197) unreachable -inrange10526: +inrange10554: %t199 = extractvalue { ptr, i64, i64 } %t196, 0 %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 8 %t201 = load { ptr, i64, i64 }, ptr %t200 @@ -107695,37 +107870,37 @@ inrange10526: %t207 = getelementptr inbounds %S.lsp.VarRec, ptr %t206, i64 %t204 store %S.lsp.VarRec %t203, ptr %t207 store i64 %t205, ptr %t131 - br label %endif10510 -else10509: + br label %endif10538 +else10537: %t208 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t208, ptr %a209 - store { ptr, i64, i64 } { ptr @.str.7023, i64 2, i64 0 }, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.7038, i64 2, i64 0 }, ptr %a210 %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) %t212 = icmp ne i32 %t211, 0 - br label %logic.from10527 -logic.from10527: - br i1 %t212, label %logic.rhs10528, label %logic.end10529 -logic.rhs10528: + br label %logic.from10555 +logic.from10555: + br i1 %t212, label %logic.rhs10556, label %logic.end10557 +logic.rhs10556: %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t214 = load i64, ptr %t213 %t215 = icmp sge i64 %t214, 10 - br label %logic.rend10530 -logic.rend10530: - br label %logic.end10529 -logic.end10529: - %t216 = phi i1 [ false, %logic.from10527 ], [ %t215, %logic.rend10530 ] - br i1 %t216, label %then10531, label %else10532 -then10531: + br label %logic.rend10558 +logic.rend10558: + br label %logic.end10557 +logic.end10557: + %t216 = phi i1 [ false, %logic.from10555 ], [ %t215, %logic.rend10558 ] + br i1 %t216, label %then10559, label %else10560 +then10559: %t217 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 2 %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %t217, i32 0, i32 1 %t219 = load { ptr, i64, i64 }, ptr %a27 %t220 = extractvalue { ptr, i64, i64 } %t219, 1 %t221 = icmp uge i64 1, %t220 - br i1 %t221, label %range10534, label %inrange10535 -range10534: - call void @finch_panic_index(ptr @.str.7024, i64 307, i64 1, i64 %t220) + br i1 %t221, label %range10562, label %inrange10563 +range10562: + call void @finch_panic_index(ptr @.str.7039, i64 307, i64 1, i64 %t220) unreachable -inrange10535: +inrange10563: %t222 = extractvalue { ptr, i64, i64 } %t219, 0 %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i64 1 %t224 = load { ptr, i64, i64 }, ptr %t223 @@ -107736,11 +107911,11 @@ inrange10535: %t229 = load { ptr, i64, i64 }, ptr %a27 %t230 = extractvalue { ptr, i64, i64 } %t229, 1 %t231 = icmp uge i64 2, %t230 - br i1 %t231, label %range10536, label %inrange10537 -range10536: - call void @finch_panic_index(ptr @.str.7025, i64 307, i64 2, i64 %t230) + br i1 %t231, label %range10564, label %inrange10565 +range10564: + call void @finch_panic_index(ptr @.str.7040, i64 307, i64 2, i64 %t230) unreachable -inrange10537: +inrange10565: %t232 = extractvalue { ptr, i64, i64 } %t229, 0 %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 2 %t234 = load { ptr, i64, i64 }, ptr %t233 @@ -107751,11 +107926,11 @@ inrange10537: %t239 = load { ptr, i64, i64 }, ptr %a27 %t240 = extractvalue { ptr, i64, i64 } %t239, 1 %t241 = icmp uge i64 3, %t240 - br i1 %t241, label %range10538, label %inrange10539 -range10538: - call void @finch_panic_index(ptr @.str.7026, i64 307, i64 3, i64 %t240) + br i1 %t241, label %range10566, label %inrange10567 +range10566: + call void @finch_panic_index(ptr @.str.7041, i64 307, i64 3, i64 %t240) unreachable -inrange10539: +inrange10567: %t242 = extractvalue { ptr, i64, i64 } %t239, 0 %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 3 %t244 = load { ptr, i64, i64 }, ptr %t243 @@ -107766,11 +107941,11 @@ inrange10539: %t249 = load { ptr, i64, i64 }, ptr %a27 %t250 = extractvalue { ptr, i64, i64 } %t249, 1 %t251 = icmp uge i64 4, %t250 - br i1 %t251, label %range10540, label %inrange10541 -range10540: - call void @finch_panic_index(ptr @.str.7027, i64 307, i64 4, i64 %t250) + br i1 %t251, label %range10568, label %inrange10569 +range10568: + call void @finch_panic_index(ptr @.str.7042, i64 307, i64 4, i64 %t250) unreachable -inrange10541: +inrange10569: %t252 = extractvalue { ptr, i64, i64 } %t249, 0 %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i64 4 %t254 = load { ptr, i64, i64 }, ptr %t253 @@ -107781,11 +107956,11 @@ inrange10541: %t259 = load { ptr, i64, i64 }, ptr %a27 %t260 = extractvalue { ptr, i64, i64 } %t259, 1 %t261 = icmp uge i64 5, %t260 - br i1 %t261, label %range10542, label %inrange10543 -range10542: - call void @finch_panic_index(ptr @.str.7028, i64 307, i64 5, i64 %t260) + br i1 %t261, label %range10570, label %inrange10571 +range10570: + call void @finch_panic_index(ptr @.str.7043, i64 307, i64 5, i64 %t260) unreachable -inrange10543: +inrange10571: %t262 = extractvalue { ptr, i64, i64 } %t259, 0 %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 5 %t264 = load { ptr, i64, i64 }, ptr %t263 @@ -107794,11 +107969,11 @@ inrange10543: %t267 = load { ptr, i64, i64 }, ptr %a27 %t268 = extractvalue { ptr, i64, i64 } %t267, 1 %t269 = icmp uge i64 6, %t268 - br i1 %t269, label %range10544, label %inrange10545 -range10544: - call void @finch_panic_index(ptr @.str.7029, i64 307, i64 6, i64 %t268) + br i1 %t269, label %range10572, label %inrange10573 +range10572: + call void @finch_panic_index(ptr @.str.7044, i64 307, i64 6, i64 %t268) unreachable -inrange10545: +inrange10573: %t270 = extractvalue { ptr, i64, i64 } %t267, 0 %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i64 6 %t272 = load { ptr, i64, i64 }, ptr %t271 @@ -107807,11 +107982,11 @@ inrange10545: %t275 = load { ptr, i64, i64 }, ptr %a27 %t276 = extractvalue { ptr, i64, i64 } %t275, 1 %t277 = icmp uge i64 7, %t276 - br i1 %t277, label %range10546, label %inrange10547 -range10546: - call void @finch_panic_index(ptr @.str.7030, i64 307, i64 7, i64 %t276) + br i1 %t277, label %range10574, label %inrange10575 +range10574: + call void @finch_panic_index(ptr @.str.7045, i64 307, i64 7, i64 %t276) unreachable -inrange10547: +inrange10575: %t278 = extractvalue { ptr, i64, i64 } %t275, 0 %t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i64 7 %t280 = load { ptr, i64, i64 }, ptr %t279 @@ -107820,11 +107995,11 @@ inrange10547: %t283 = load { ptr, i64, i64 }, ptr %a27 %t284 = extractvalue { ptr, i64, i64 } %t283, 1 %t285 = icmp uge i64 8, %t284 - br i1 %t285, label %range10548, label %inrange10549 -range10548: - call void @finch_panic_index(ptr @.str.7031, i64 307, i64 8, i64 %t284) + br i1 %t285, label %range10576, label %inrange10577 +range10576: + call void @finch_panic_index(ptr @.str.7046, i64 307, i64 8, i64 %t284) unreachable -inrange10549: +inrange10577: %t286 = extractvalue { ptr, i64, i64 } %t283, 0 %t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t286, i64 8 %t288 = load { ptr, i64, i64 }, ptr %t287 @@ -107833,16 +108008,16 @@ inrange10549: %t291 = load { ptr, i64, i64 }, ptr %a27 %t292 = extractvalue { ptr, i64, i64 } %t291, 1 %t293 = icmp uge i64 9, %t292 - br i1 %t293, label %range10550, label %inrange10551 -range10550: - call void @finch_panic_index(ptr @.str.7032, i64 307, i64 9, i64 %t292) + br i1 %t293, label %range10578, label %inrange10579 +range10578: + call void @finch_panic_index(ptr @.str.7047, i64 307, i64 9, i64 %t292) unreachable -inrange10551: +inrange10579: %t294 = extractvalue { ptr, i64, i64 } %t291, 0 %t295 = getelementptr inbounds { ptr, i64, i64 }, ptr %t294, i64 9 %t296 = load { ptr, i64, i64 }, ptr %t295 store { ptr, i64, i64 } %t296, ptr %a297 - store { ptr, i64, i64 } { ptr @.str.7034, i64 1, i64 0 }, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.7049, i64 1, i64 0 }, ptr %a299 call void @finch_str_split(ptr %a300, ptr %a297, ptr %a299) %t301 = load { ptr, i64, i64 }, ptr %a300 %t302 = insertvalue %S.lsp.FnRec %t290, { ptr, i64, i64 } %t301, 8 @@ -107853,37 +108028,37 @@ inrange10551: %t306 = getelementptr inbounds %S.lsp.FnRec, ptr %t305, i64 %t303 store %S.lsp.FnRec %t302, ptr %t306 store i64 %t304, ptr %t218 - br label %endif10533 -else10532: + br label %endif10561 +else10560: %t307 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t307, ptr %a308 - store { ptr, i64, i64 } { ptr @.str.7035, i64 2, i64 0 }, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.7050, i64 2, i64 0 }, ptr %a309 %t310 = call i32 @finch_str_eq(ptr %a308, ptr %a309) %t311 = icmp ne i32 %t310, 0 - br label %logic.from10552 -logic.from10552: - br i1 %t311, label %logic.rhs10553, label %logic.end10554 -logic.rhs10553: + br label %logic.from10580 +logic.from10580: + br i1 %t311, label %logic.rhs10581, label %logic.end10582 +logic.rhs10581: %t312 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t313 = load i64, ptr %t312 %t314 = icmp sge i64 %t313, 6 - br label %logic.rend10555 -logic.rend10555: - br label %logic.end10554 -logic.end10554: - %t315 = phi i1 [ false, %logic.from10552 ], [ %t314, %logic.rend10555 ] - br i1 %t315, label %then10556, label %else10557 -then10556: + br label %logic.rend10583 +logic.rend10583: + br label %logic.end10582 +logic.end10582: + %t315 = phi i1 [ false, %logic.from10580 ], [ %t314, %logic.rend10583 ] + br i1 %t315, label %then10584, label %else10585 +then10584: %t316 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i32 0, i32 1 %t318 = load { ptr, i64, i64 }, ptr %a27 %t319 = extractvalue { ptr, i64, i64 } %t318, 1 %t320 = icmp uge i64 1, %t319 - br i1 %t320, label %range10559, label %inrange10560 -range10559: - call void @finch_panic_index(ptr @.str.7036, i64 309, i64 1, i64 %t319) + br i1 %t320, label %range10587, label %inrange10588 +range10587: + call void @finch_panic_index(ptr @.str.7051, i64 309, i64 1, i64 %t319) unreachable -inrange10560: +inrange10588: %t321 = extractvalue { ptr, i64, i64 } %t318, 0 %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i64 1 %t323 = load { ptr, i64, i64 }, ptr %t322 @@ -107894,11 +108069,11 @@ inrange10560: %t328 = load { ptr, i64, i64 }, ptr %a27 %t329 = extractvalue { ptr, i64, i64 } %t328, 1 %t330 = icmp uge i64 2, %t329 - br i1 %t330, label %range10561, label %inrange10562 -range10561: - call void @finch_panic_index(ptr @.str.7037, i64 309, i64 2, i64 %t329) + br i1 %t330, label %range10589, label %inrange10590 +range10589: + call void @finch_panic_index(ptr @.str.7052, i64 309, i64 2, i64 %t329) unreachable -inrange10562: +inrange10590: %t331 = extractvalue { ptr, i64, i64 } %t328, 0 %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i64 2 %t333 = load { ptr, i64, i64 }, ptr %t332 @@ -107909,11 +108084,11 @@ inrange10562: %t338 = load { ptr, i64, i64 }, ptr %a27 %t339 = extractvalue { ptr, i64, i64 } %t338, 1 %t340 = icmp uge i64 3, %t339 - br i1 %t340, label %range10563, label %inrange10564 -range10563: - call void @finch_panic_index(ptr @.str.7038, i64 309, i64 3, i64 %t339) + br i1 %t340, label %range10591, label %inrange10592 +range10591: + call void @finch_panic_index(ptr @.str.7053, i64 309, i64 3, i64 %t339) unreachable -inrange10564: +inrange10592: %t341 = extractvalue { ptr, i64, i64 } %t338, 0 %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 3 %t343 = load { ptr, i64, i64 }, ptr %t342 @@ -107924,11 +108099,11 @@ inrange10564: %t348 = load { ptr, i64, i64 }, ptr %a27 %t349 = extractvalue { ptr, i64, i64 } %t348, 1 %t350 = icmp uge i64 4, %t349 - br i1 %t350, label %range10565, label %inrange10566 -range10565: - call void @finch_panic_index(ptr @.str.7039, i64 309, i64 4, i64 %t349) + br i1 %t350, label %range10593, label %inrange10594 +range10593: + call void @finch_panic_index(ptr @.str.7054, i64 309, i64 4, i64 %t349) unreachable -inrange10566: +inrange10594: %t351 = extractvalue { ptr, i64, i64 } %t348, 0 %t352 = getelementptr inbounds { ptr, i64, i64 }, ptr %t351, i64 4 %t353 = load { ptr, i64, i64 }, ptr %t352 @@ -107937,11 +108112,11 @@ inrange10566: %t356 = load { ptr, i64, i64 }, ptr %a27 %t357 = extractvalue { ptr, i64, i64 } %t356, 1 %t358 = icmp uge i64 5, %t357 - br i1 %t358, label %range10567, label %inrange10568 -range10567: - call void @finch_panic_index(ptr @.str.7040, i64 309, i64 5, i64 %t357) + br i1 %t358, label %range10595, label %inrange10596 +range10595: + call void @finch_panic_index(ptr @.str.7055, i64 309, i64 5, i64 %t357) unreachable -inrange10568: +inrange10596: %t359 = extractvalue { ptr, i64, i64 } %t356, 0 %t360 = getelementptr inbounds { ptr, i64, i64 }, ptr %t359, i64 5 %t361 = load { ptr, i64, i64 }, ptr %t360 @@ -107954,40 +108129,40 @@ inrange10568: %t367 = getelementptr inbounds %S.lsp.StructRec, ptr %t366, i64 %t364 store %S.lsp.StructRec %t363, ptr %t367 store i64 %t365, ptr %t317 - br label %endif10558 -else10557: + br label %endif10586 +else10585: %t368 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t368, ptr %a369 - store { ptr, i64, i64 } { ptr @.str.7041, i64 3, i64 0 }, ptr %a370 + store { ptr, i64, i64 } { ptr @.str.7056, i64 3, i64 0 }, ptr %a370 %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) %t372 = icmp ne i32 %t371, 0 - br label %logic.from10569 -logic.from10569: - br i1 %t372, label %logic.rhs10570, label %logic.end10571 -logic.rhs10570: + br label %logic.from10597 +logic.from10597: + br i1 %t372, label %logic.rhs10598, label %logic.end10599 +logic.rhs10598: %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t374 = load i64, ptr %t373 %t375 = icmp sge i64 %t374, 5 - br label %logic.rend10572 -logic.rend10572: - br label %logic.end10571 -logic.end10571: - %t376 = phi i1 [ false, %logic.from10569 ], [ %t375, %logic.rend10572 ] - br label %logic.from10573 -logic.from10573: - br i1 %t376, label %logic.rhs10574, label %logic.end10575 -logic.rhs10574: + br label %logic.rend10600 +logic.rend10600: + br label %logic.end10599 +logic.end10599: + %t376 = phi i1 [ false, %logic.from10597 ], [ %t375, %logic.rend10600 ] + br label %logic.from10601 +logic.from10601: + br i1 %t376, label %logic.rhs10602, label %logic.end10603 +logic.rhs10602: %t377 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %t377, i32 0, i32 1 %t379 = load i64, ptr %t378 %t380 = icmp sgt i64 %t379, 0 - br label %logic.rend10576 -logic.rend10576: - br label %logic.end10575 -logic.end10575: - %t381 = phi i1 [ false, %logic.from10573 ], [ %t380, %logic.rend10576 ] - br i1 %t381, label %then10577, label %else10578 -then10577: + br label %logic.rend10604 +logic.rend10604: + br label %logic.end10603 +logic.end10603: + %t381 = phi i1 [ false, %logic.from10601 ], [ %t380, %logic.rend10604 ] + br i1 %t381, label %then10605, label %else10606 +then10605: %t382 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %t382, i32 0, i32 1 %t384 = load i64, ptr %t383 @@ -107998,11 +108173,11 @@ then10577: %t389 = load { ptr, i64, i64 }, ptr %t387 %t390 = extractvalue { ptr, i64, i64 } %t389, 1 %t391 = icmp uge i64 %t388, %t390 - br i1 %t391, label %range10580, label %inrange10581 -range10580: - call void @finch_panic_index(ptr @.str.7042, i64 312, i64 %t388, i64 %t390) + br i1 %t391, label %range10608, label %inrange10609 +range10608: + call void @finch_panic_index(ptr @.str.7057, i64 312, i64 %t388, i64 %t390) unreachable -inrange10581: +inrange10609: %t392 = extractvalue { ptr, i64, i64 } %t389, 0 %t393 = getelementptr inbounds %S.lsp.StructRec, ptr %t392, i64 %t388 %t394 = getelementptr inbounds %S.lsp.StructRec, ptr %t393, i32 0, i32 5 @@ -108010,11 +108185,11 @@ inrange10581: %t396 = load { ptr, i64, i64 }, ptr %a27 %t397 = extractvalue { ptr, i64, i64 } %t396, 1 %t398 = icmp uge i64 3, %t397 - br i1 %t398, label %range10582, label %inrange10583 -range10582: - call void @finch_panic_index(ptr @.str.7043, i64 312, i64 3, i64 %t397) + br i1 %t398, label %range10610, label %inrange10611 +range10610: + call void @finch_panic_index(ptr @.str.7058, i64 312, i64 3, i64 %t397) unreachable -inrange10583: +inrange10611: %t399 = extractvalue { ptr, i64, i64 } %t396, 0 %t400 = getelementptr inbounds { ptr, i64, i64 }, ptr %t399, i64 3 %t401 = load { ptr, i64, i64 }, ptr %t400 @@ -108033,11 +108208,11 @@ inrange10583: %t411 = load { ptr, i64, i64 }, ptr %t409 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 %t410, %t412 - br i1 %t413, label %range10584, label %inrange10585 -range10584: - call void @finch_panic_index(ptr @.str.7044, i64 313, i64 %t410, i64 %t412) + br i1 %t413, label %range10612, label %inrange10613 +range10612: + call void @finch_panic_index(ptr @.str.7059, i64 313, i64 %t410, i64 %t412) unreachable -inrange10585: +inrange10613: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds %S.lsp.StructRec, ptr %t414, i64 %t410 %t416 = getelementptr inbounds %S.lsp.StructRec, ptr %t415, i32 0, i32 6 @@ -108045,11 +108220,11 @@ inrange10585: %t418 = load { ptr, i64, i64 }, ptr %a27 %t419 = extractvalue { ptr, i64, i64 } %t418, 1 %t420 = icmp uge i64 4, %t419 - br i1 %t420, label %range10586, label %inrange10587 -range10586: - call void @finch_panic_index(ptr @.str.7045, i64 313, i64 4, i64 %t419) + br i1 %t420, label %range10614, label %inrange10615 +range10614: + call void @finch_panic_index(ptr @.str.7060, i64 313, i64 4, i64 %t419) unreachable -inrange10587: +inrange10615: %t421 = extractvalue { ptr, i64, i64 } %t418, 0 %t422 = getelementptr inbounds { ptr, i64, i64 }, ptr %t421, i64 4 %t423 = load { ptr, i64, i64 }, ptr %t422 @@ -108063,37 +108238,37 @@ inrange10587: %t430 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i64 %t427 store { ptr, i64, i64 } %t426, ptr %t430 store i64 %t428, ptr %t417 - br label %endif10579 -else10578: + br label %endif10607 +else10606: %t431 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t431, ptr %a432 - store { ptr, i64, i64 } { ptr @.str.7046, i64 2, i64 0 }, ptr %a433 + store { ptr, i64, i64 } { ptr @.str.7061, i64 2, i64 0 }, ptr %a433 %t434 = call i32 @finch_str_eq(ptr %a432, ptr %a433) %t435 = icmp ne i32 %t434, 0 - br label %logic.from10588 -logic.from10588: - br i1 %t435, label %logic.rhs10589, label %logic.end10590 -logic.rhs10589: + br label %logic.from10616 +logic.from10616: + br i1 %t435, label %logic.rhs10617, label %logic.end10618 +logic.rhs10617: %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t437 = load i64, ptr %t436 %t438 = icmp sge i64 %t437, 7 - br label %logic.rend10591 -logic.rend10591: - br label %logic.end10590 -logic.end10590: - %t439 = phi i1 [ false, %logic.from10588 ], [ %t438, %logic.rend10591 ] - br i1 %t439, label %then10592, label %else10593 -then10592: + br label %logic.rend10619 +logic.rend10619: + br label %logic.end10618 +logic.end10618: + %t439 = phi i1 [ false, %logic.from10616 ], [ %t438, %logic.rend10619 ] + br i1 %t439, label %then10620, label %else10621 +then10620: %t440 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 4 %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t440, i32 0, i32 1 %t442 = load { ptr, i64, i64 }, ptr %a27 %t443 = extractvalue { ptr, i64, i64 } %t442, 1 %t444 = icmp uge i64 1, %t443 - br i1 %t444, label %range10595, label %inrange10596 -range10595: - call void @finch_panic_index(ptr @.str.7047, i64 315, i64 1, i64 %t443) + br i1 %t444, label %range10623, label %inrange10624 +range10623: + call void @finch_panic_index(ptr @.str.7062, i64 315, i64 1, i64 %t443) unreachable -inrange10596: +inrange10624: %t445 = extractvalue { ptr, i64, i64 } %t442, 0 %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i64 1 %t447 = load { ptr, i64, i64 }, ptr %t446 @@ -108104,11 +108279,11 @@ inrange10596: %t452 = load { ptr, i64, i64 }, ptr %a27 %t453 = extractvalue { ptr, i64, i64 } %t452, 1 %t454 = icmp uge i64 2, %t453 - br i1 %t454, label %range10597, label %inrange10598 -range10597: - call void @finch_panic_index(ptr @.str.7048, i64 315, i64 2, i64 %t453) + br i1 %t454, label %range10625, label %inrange10626 +range10625: + call void @finch_panic_index(ptr @.str.7063, i64 315, i64 2, i64 %t453) unreachable -inrange10598: +inrange10626: %t455 = extractvalue { ptr, i64, i64 } %t452, 0 %t456 = getelementptr inbounds { ptr, i64, i64 }, ptr %t455, i64 2 %t457 = load { ptr, i64, i64 }, ptr %t456 @@ -108119,11 +108294,11 @@ inrange10598: %t462 = load { ptr, i64, i64 }, ptr %a27 %t463 = extractvalue { ptr, i64, i64 } %t462, 1 %t464 = icmp uge i64 3, %t463 - br i1 %t464, label %range10599, label %inrange10600 -range10599: - call void @finch_panic_index(ptr @.str.7049, i64 315, i64 3, i64 %t463) + br i1 %t464, label %range10627, label %inrange10628 +range10627: + call void @finch_panic_index(ptr @.str.7064, i64 315, i64 3, i64 %t463) unreachable -inrange10600: +inrange10628: %t465 = extractvalue { ptr, i64, i64 } %t462, 0 %t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 3 %t467 = load { ptr, i64, i64 }, ptr %t466 @@ -108134,11 +108309,11 @@ inrange10600: %t472 = load { ptr, i64, i64 }, ptr %a27 %t473 = extractvalue { ptr, i64, i64 } %t472, 1 %t474 = icmp uge i64 4, %t473 - br i1 %t474, label %range10601, label %inrange10602 -range10601: - call void @finch_panic_index(ptr @.str.7050, i64 315, i64 4, i64 %t473) + br i1 %t474, label %range10629, label %inrange10630 +range10629: + call void @finch_panic_index(ptr @.str.7065, i64 315, i64 4, i64 %t473) unreachable -inrange10602: +inrange10630: %t475 = extractvalue { ptr, i64, i64 } %t472, 0 %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 4 %t477 = load { ptr, i64, i64 }, ptr %t476 @@ -108147,11 +108322,11 @@ inrange10602: %t480 = load { ptr, i64, i64 }, ptr %a27 %t481 = extractvalue { ptr, i64, i64 } %t480, 1 %t482 = icmp uge i64 5, %t481 - br i1 %t482, label %range10603, label %inrange10604 -range10603: - call void @finch_panic_index(ptr @.str.7051, i64 315, i64 5, i64 %t481) + br i1 %t482, label %range10631, label %inrange10632 +range10631: + call void @finch_panic_index(ptr @.str.7066, i64 315, i64 5, i64 %t481) unreachable -inrange10604: +inrange10632: %t483 = extractvalue { ptr, i64, i64 } %t480, 0 %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 5 %t485 = load { ptr, i64, i64 }, ptr %t484 @@ -108160,16 +108335,16 @@ inrange10604: %t488 = load { ptr, i64, i64 }, ptr %a27 %t489 = extractvalue { ptr, i64, i64 } %t488, 1 %t490 = icmp uge i64 6, %t489 - br i1 %t490, label %range10605, label %inrange10606 -range10605: - call void @finch_panic_index(ptr @.str.7052, i64 315, i64 6, i64 %t489) + br i1 %t490, label %range10633, label %inrange10634 +range10633: + call void @finch_panic_index(ptr @.str.7067, i64 315, i64 6, i64 %t489) unreachable -inrange10606: +inrange10634: %t491 = extractvalue { ptr, i64, i64 } %t488, 0 %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 6 %t493 = load { ptr, i64, i64 }, ptr %t492 store { ptr, i64, i64 } %t493, ptr %a494 - store { ptr, i64, i64 } { ptr @.str.7054, i64 1, i64 0 }, ptr %a496 + store { ptr, i64, i64 } { ptr @.str.7069, i64 1, i64 0 }, ptr %a496 call void @finch_str_split(ptr %a497, ptr %a494, ptr %a496) %t498 = load { ptr, i64, i64 }, ptr %a497 %t499 = insertvalue %S.lsp.EnumRec %t487, { ptr, i64, i64 } %t498, 5 @@ -108180,37 +108355,37 @@ inrange10606: %t503 = getelementptr inbounds %S.lsp.EnumRec, ptr %t502, i64 %t500 store %S.lsp.EnumRec %t499, ptr %t503 store i64 %t501, ptr %t441 - br label %endif10594 -else10593: + br label %endif10622 +else10621: %t504 = load { ptr, i64, i64 }, ptr %a37 store { ptr, i64, i64 } %t504, ptr %a505 - store { ptr, i64, i64 } { ptr @.str.7055, i64 2, i64 0 }, ptr %a506 + store { ptr, i64, i64 } { ptr @.str.7070, i64 2, i64 0 }, ptr %a506 %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) %t508 = icmp ne i32 %t507, 0 - br label %logic.from10607 -logic.from10607: - br i1 %t508, label %logic.rhs10608, label %logic.end10609 -logic.rhs10608: + br label %logic.from10635 +logic.from10635: + br i1 %t508, label %logic.rhs10636, label %logic.end10637 +logic.rhs10636: %t509 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 %t510 = load i64, ptr %t509 %t511 = icmp sge i64 %t510, 2 - br label %logic.rend10610 -logic.rend10610: - br label %logic.end10609 -logic.end10609: - %t512 = phi i1 [ false, %logic.from10607 ], [ %t511, %logic.rend10610 ] - br i1 %t512, label %then10611, label %endif10613 -then10611: + br label %logic.rend10638 +logic.rend10638: + br label %logic.end10637 +logic.end10637: + %t512 = phi i1 [ false, %logic.from10635 ], [ %t511, %logic.rend10638 ] + br i1 %t512, label %then10639, label %endif10641 +then10639: %t513 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 5 %t514 = getelementptr inbounds { ptr, i64, i64 }, ptr %t513, i32 0, i32 1 %t515 = load { ptr, i64, i64 }, ptr %a27 %t516 = extractvalue { ptr, i64, i64 } %t515, 1 %t517 = icmp uge i64 1, %t516 - br i1 %t517, label %range10614, label %inrange10615 -range10614: - call void @finch_panic_index(ptr @.str.7056, i64 317, i64 1, i64 %t516) + br i1 %t517, label %range10642, label %inrange10643 +range10642: + call void @finch_panic_index(ptr @.str.7071, i64 317, i64 1, i64 %t516) unreachable -inrange10615: +inrange10643: %t518 = extractvalue { ptr, i64, i64 } %t515, 0 %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 1 %t520 = load { ptr, i64, i64 }, ptr %t519 @@ -108224,30 +108399,30 @@ inrange10615: %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t524 store { ptr, i64, i64 } %t523, ptr %t527 store i64 %t525, ptr %t514 - br label %endif10613 -endif10613: - br label %endif10594 -endif10594: - br label %endif10579 -endif10579: - br label %endif10558 -endif10558: - br label %endif10533 -endif10533: - br label %endif10510 -endif10510: - br label %endif10487 -endif10487: + br label %endif10641 +endif10641: + br label %endif10622 +endif10622: + br label %endif10607 +endif10607: + br label %endif10586 +endif10586: + br label %endif10561 +endif10561: + br label %endif10538 +endif10538: + br label %endif10515 +endif10515: call void @finch_str_drop(ptr %a37) call void @finch.drop.arr_str(ptr %a27) - br label %endif10478 -else10477: + br label %endif10506 +else10505: %t528 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t529 = getelementptr inbounds %S.lsp.Diag, ptr %t528, i32 0, i32 0 %t530 = load i1, ptr %t529 %t531 = xor i1 %t530, true - br i1 %t531, label %then10616, label %endif10618 -then10616: + br i1 %t531, label %then10644, label %endif10646 +then10644: %t532 = load { ptr, i64, i64 }, ptr %a18 %t533 = call %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %t532) %t534 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 @@ -108255,17 +108430,17 @@ then10616: store %S.lsp.Diag %t533, ptr %t534 store %S.lsp.Diag %t535, ptr %a536 call void @finch.drop.S_lsp_Diag(ptr %a536) - br label %endif10618 -endif10618: - br label %endif10478 -endif10478: - br label %each.step10474 -each.step10474: + br label %endif10646 +endif10646: + br label %endif10506 +endif10506: + br label %each.step10502 +each.step10502: %t537 = load i64, ptr %a10 %t538 = add i64 %t537, 1 store i64 %t538, ptr %a10 - br label %each.cond10472 -each.end10475: + br label %each.cond10500 +each.end10503: call void @finch.drop.arr_str(ptr %a9) %t539 = load %S.lsp.Analysis, ptr %a2 ret %S.lsp.Analysis %t539 @@ -108297,20 +108472,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10639 -n.cond10639: + br label %n.cond10667 +n.cond10667: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10640, label %n.end10641 -n.body10640: + br i1 %t7, label %n.body10668, label %n.end10669 +n.body10668: %t8 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.Ref, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_Ref(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10639 -n.end10641: + br label %n.cond10667 +n.end10669: ret void } @@ -108343,20 +108518,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10642 -n.cond10642: + br label %n.cond10670 +n.cond10670: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10643, label %n.end10644 -n.body10643: + br i1 %t7, label %n.body10671, label %n.end10672 +n.body10671: %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_VarRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10642 -n.end10644: + br label %n.cond10670 +n.end10672: ret void } @@ -108395,20 +108570,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10645 -n.cond10645: + br label %n.cond10673 +n.cond10673: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10646, label %n.end10647 -n.body10646: + br i1 %t7, label %n.body10674, label %n.end10675 +n.body10674: %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_FnRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10645 -n.end10647: + br label %n.cond10673 +n.end10675: ret void } @@ -108444,20 +108619,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10648 -n.cond10648: + br label %n.cond10676 +n.cond10676: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10649, label %n.end10650 -n.body10649: + br i1 %t7, label %n.body10677, label %n.end10678 +n.body10677: %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_StructRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10648 -n.end10650: + br label %n.cond10676 +n.end10678: ret void } @@ -108490,20 +108665,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond10651 -n.cond10651: + br label %n.cond10679 +n.cond10679: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body10652, label %n.end10653 -n.body10652: + br i1 %t7, label %n.body10680, label %n.end10681 +n.body10680: %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %t2, i64 %t6 call void @finch.copy.S_lsp_EnumRec(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond10651 -n.end10653: + br label %n.cond10679 +n.end10681: ret void } @@ -108569,19 +108744,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10654 -n.cond10654: + br label %n.cond10682 +n.cond10682: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10655, label %n.end10656 -n.body10655: + br i1 %t6, label %n.body10683, label %n.end10684 +n.body10683: %t7 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_Ref(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10654 -n.end10656: + br label %n.cond10682 +n.end10684: call void @finch_arr_free(ptr %a) ret void } @@ -108607,19 +108782,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10657 -n.cond10657: + br label %n.cond10685 +n.cond10685: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10658, label %n.end10659 -n.body10658: + br i1 %t6, label %n.body10686, label %n.end10687 +n.body10686: %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_VarRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10657 -n.end10659: + br label %n.cond10685 +n.end10687: call void @finch_arr_free(ptr %a) ret void } @@ -108649,19 +108824,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10660 -n.cond10660: + br label %n.cond10688 +n.cond10688: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10661, label %n.end10662 -n.body10661: + br i1 %t6, label %n.body10689, label %n.end10690 +n.body10689: %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_FnRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10660 -n.end10662: + br label %n.cond10688 +n.end10690: call void @finch_arr_free(ptr %a) ret void } @@ -108689,19 +108864,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10663 -n.cond10663: + br label %n.cond10691 +n.cond10691: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10664, label %n.end10665 -n.body10664: + br i1 %t6, label %n.body10692, label %n.end10693 +n.body10692: %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_StructRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10663 -n.end10665: + br label %n.cond10691 +n.end10693: call void @finch_arr_free(ptr %a) ret void } @@ -108727,19 +108902,19 @@ entry: %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 %t3 = load i64, ptr %t2 store i64 0, ptr %a4 - br label %n.cond10666 -n.cond10666: + br label %n.cond10694 +n.cond10694: %t5 = load i64, ptr %a4 %t6 = icmp slt i64 %t5, %t3 - br i1 %t6, label %n.body10667, label %n.end10668 -n.body10667: + br i1 %t6, label %n.body10695, label %n.end10696 +n.body10695: %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t5 call void @finch.drop.S_lsp_EnumRec(ptr %t7) %t8 = load i64, ptr %a4 %t9 = add i64 %t8, 1 store i64 %t9, ptr %a4 - br label %n.cond10666 -n.end10668: + br label %n.cond10694 +n.end10696: call void @finch_arr_free(ptr %a) ret void } @@ -108884,7 +109059,7 @@ entry: %t2 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t3 = load { ptr, i64, i64 }, ptr %t2 call void @finch.host.makeDirs({ ptr, i64, i64 } %t3) - store { ptr, i64, i64 } { ptr @.str.7057, i64 0, i64 0 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.7072, i64 0, i64 0 }, ptr %a4 store i64 0, ptr %a5 %t6 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %a7 @@ -108896,44 +109071,44 @@ entry: %t12 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 2 %t13 = load i64, ptr %t12 store i64 0, ptr %a14 - br label %n.cond10619 -n.cond10619: + br label %n.cond10647 +n.cond10647: %t15 = load i64, ptr %a14 %t16 = icmp slt i64 %t15, %t13 - br i1 %t16, label %n.body10620, label %n.end10621 -n.body10620: + br i1 %t16, label %n.body10648, label %n.end10649 +n.body10648: %t17 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 %t18 = load ptr, ptr %t17 %t19 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t18, i64 %t15 %t20 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 0 %t21 = load i64, ptr %t20 %t22 = icmp ne i64 %t21, 0 - br i1 %t22, label %entry.live10622, label %entry.next10623 -entry.live10622: + br i1 %t22, label %entry.live10650, label %entry.next10651 +entry.live10650: %t23 = load i64, ptr %a11 %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t23 %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 1 call void @finch_str_copy(ptr %t24, ptr %t25) %t26 = add i64 %t23, 1 store i64 %t26, ptr %a11 - br label %entry.next10623 -entry.next10623: + br label %entry.next10651 +entry.next10651: %t27 = load i64, ptr %a14 %t28 = add i64 %t27, 1 store i64 %t28, ptr %a14 - br label %n.cond10619 -n.end10621: + br label %n.cond10647 +n.end10649: %t29 = load { ptr, i64, i64 }, ptr %a7 store { ptr, i64, i64 } %t29, ptr %a30 store i64 0, ptr %a31 - br label %each.cond10624 -each.cond10624: + br label %each.cond10652 +each.cond10652: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 %t33 = load i64, ptr %t32 %t34 = load i64, ptr %a31 %t35 = icmp slt i64 %t34, %t33 - br i1 %t35, label %each.body10625, label %each.end10627 -each.body10625: + br i1 %t35, label %each.body10653, label %each.end10655 +each.body10653: %t36 = load ptr, ptr %a30 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i64 %t34 %t38 = load { ptr, i64, i64 }, ptr %t37 @@ -108941,7 +109116,7 @@ each.body10625: %t40 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t41 = load { ptr, i64, i64 }, ptr %t40 store { ptr, i64, i64 } %t41, ptr %a43 - store { ptr, i64, i64 } { ptr @.str.7058, i64 4, i64 0 }, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.7073, i64 4, i64 0 }, ptr %a44 call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) %t45 = load { ptr, i64, i64 }, ptr %a42 %t46 = load i64, ptr %a5 @@ -108956,7 +109131,7 @@ each.body10625: call void @finch_str_drop(ptr %a53) %t54 = load { ptr, i64, i64 }, ptr %a49 store { ptr, i64, i64 } %t54, ptr %a56 - store { ptr, i64, i64 } { ptr @.str.7059, i64 4, i64 0 }, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.7074, i64 4, i64 0 }, ptr %a57 call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) store { ptr, i64, i64 } %t54, ptr %a58 call void @finch_str_drop(ptr %a58) @@ -108968,14 +109143,14 @@ each.body10625: store { ptr, i64, i64 } %t63, ptr %a64 %t65 = call i64 @finch_map_find(ptr %t62, ptr %a64, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t66 = icmp slt i64 %t65, 0 - br i1 %t66, label %map.missing10628, label %map.found10629 -map.missing10628: + br i1 %t66, label %map.missing10656, label %map.found10657 +map.missing10656: store { ptr, i64, i64 } zeroinitializer, ptr %a67 store { ptr, i64, i64 } %t63, ptr %a68 call void @finch_buf_str(ptr %a67, ptr %a68, i32 1) - call void @finch_map_missing(ptr @.str.7060, i64 333, ptr %a67) + call void @finch_map_missing(ptr @.str.7075, i64 333, ptr %a67) unreachable -map.found10629: +map.found10657: %t69 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t62, i32 0, i32 0 %t70 = load ptr, ptr %t69 %t71 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t70, i64 %t65 @@ -108987,12 +109162,12 @@ map.found10629: %t77 = icmp ne i32 %t76, 0 %t78 = load { ptr, i64, i64 }, ptr %a4 store { ptr, i64, i64 } %t78, ptr %a80 - store { ptr, i64, i64 } { ptr @.str.7061, i64 11, i64 0 }, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.7076, i64 11, i64 0 }, ptr %a81 call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) %t82 = load { ptr, i64, i64 }, ptr %a79 %t83 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t83, ptr %a85 - store { ptr, i64, i64 } { ptr @.str.7062, i64 1, i64 0 }, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.7077, i64 1, i64 0 }, ptr %a86 call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) %t87 = load { ptr, i64, i64 }, ptr %a84 %t88 = load { ptr, i64, i64 }, ptr %a60 @@ -109021,18 +109196,18 @@ map.found10629: %t105 = add i64 %t104, 1 store i64 %t105, ptr %a5 call void @finch_str_drop(ptr %a60) - br label %each.step10626 -each.step10626: + br label %each.step10654 +each.step10654: %t106 = load i64, ptr %a31 %t107 = add i64 %t106, 1 store i64 %t107, ptr %a31 - br label %each.cond10624 -each.end10627: + br label %each.cond10652 +each.end10655: call void @finch.drop.arr_str(ptr %a30) %t108 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 %t109 = load { ptr, i64, i64 }, ptr %t108 store { ptr, i64, i64 } %t109, ptr %a111 - store { ptr, i64, i64 } { ptr @.str.7063, i64 8, i64 0 }, ptr %a112 + store { ptr, i64, i64 } { ptr @.str.7078, i64 8, i64 0 }, ptr %a112 call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) %t113 = load { ptr, i64, i64 }, ptr %a110 store { ptr, i64, i64 } %t113, ptr %a114 @@ -109040,7 +109215,7 @@ each.end10627: %t116 = load { ptr, i64, i64 }, ptr %t115 %t117 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t116) store { ptr, i64, i64 } %t117, ptr %a119 - store { ptr, i64, i64 } { ptr @.str.7064, i64 7, i64 0 }, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.7079, i64 7, i64 0 }, ptr %a120 call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) store { ptr, i64, i64 } %t117, ptr %a121 call void @finch_str_drop(ptr %a121) @@ -109063,7 +109238,7 @@ each.end10627: call void @finch_str_drop(ptr %a135) %t136 = load { ptr, i64, i64 }, ptr %a132 store { ptr, i64, i64 } %t136, ptr %a138 - store { ptr, i64, i64 } { ptr @.str.7065, i64 3, i64 0 }, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.7080, i64 3, i64 0 }, ptr %a139 call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) store { ptr, i64, i64 } %t136, ptr %a140 call void @finch_str_drop(ptr %a140) @@ -109079,7 +109254,7 @@ each.end10627: call void @finch_str_drop(ptr %a148) %t149 = load { ptr, i64, i64 }, ptr %a144 store { ptr, i64, i64 } %t149, ptr %a151 - store { ptr, i64, i64 } { ptr @.str.7066, i64 5, i64 0 }, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.7081, i64 5, i64 0 }, ptr %a152 call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) store { ptr, i64, i64 } %t149, ptr %a153 call void @finch_str_drop(ptr %a153) @@ -109095,17 +109270,17 @@ each.end10627: %t162 = icmp eq i32 %t161, 0 %t163 = load { ptr, i64, i64 }, ptr %a160 %t164 = load { ptr, i64, i64 }, ptr %a159 - br i1 %t162, label %or.failed10630, label %or.ok10631 -or.failed10630: + br i1 %t162, label %or.failed10658, label %or.ok10659 +or.failed10658: store { ptr, i64, i64 } %t163, ptr %a165 call void @finch_str_drop(ptr %a165) - br label %or.bend10632 -or.bend10632: - br label %or.end10633 -or.ok10631: - br label %or.end10633 -or.end10633: - %t166 = phi { ptr, i64, i64 } [ { ptr @.str.7067, i64 0, i64 0 }, %or.bend10632 ], [ %t164, %or.ok10631 ] + br label %or.bend10660 +or.bend10660: + br label %or.end10661 +or.ok10659: + br label %or.end10661 +or.end10661: + %t166 = phi { ptr, i64, i64 } [ { ptr @.str.7082, i64 0, i64 0 }, %or.bend10660 ], [ %t164, %or.ok10659 ] %t167 = call %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %t166) store { ptr, i64, i64 } %t166, ptr %a168 call void @finch_str_drop(ptr %a168) @@ -109114,8 +109289,8 @@ or.end10633: %t171 = getelementptr inbounds %S.lsp.Diag, ptr %t170, i32 0, i32 0 %t172 = load i1, ptr %t171 %t173 = xor i1 %t172, true - br i1 %t173, label %then10634, label %else10635 -then10634: + br i1 %t173, label %then10662, label %else10663 +then10662: %t174 = load %S.lsp.Analysis, ptr %a169 %t175 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t176 = load { ptr, i64, i64 }, ptr %a1 @@ -109127,14 +109302,14 @@ then10634: %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t181, i64 %t179 %t183 = load i32, ptr %a178 %t184 = icmp ne i32 %t183, 0 - br i1 %t184, label %map.new10637, label %map.have10638 -map.new10637: + br i1 %t184, label %map.new10665, label %map.have10666 +map.new10665: %t185 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 1 call void @finch_str_copy(ptr %t185, ptr %a177) %t186 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 store %S.lsp.Analysis zeroinitializer, ptr %t186 - br label %map.have10638 -map.have10638: + br label %map.have10666 +map.have10666: %t187 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 store %S.lsp.Analysis %t174, ptr %a188 call void @finch.copy.S_lsp_Analysis(ptr %a189, ptr %a188) @@ -109143,28 +109318,28 @@ map.have10638: store %S.lsp.Analysis %t190, ptr %t187 store %S.lsp.Analysis %t191, ptr %a192 call void @finch.drop.S_lsp_Analysis(ptr %a192) - br label %endif10636 -else10635: + br label %endif10664 +else10663: %t193 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t194 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t194, ptr %a195 %t196 = call i64 @finch_map_find(ptr %t193, ptr %a195, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t197 = icmp sge i64 %t196, 0 - br i1 %t197, label %then10669, label %endif10671 -then10669: + br i1 %t197, label %then10697, label %endif10699 +then10697: %t198 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t199 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t199, ptr %a200 %t201 = call i64 @finch_map_find(ptr %t198, ptr %a200, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t202 = icmp slt i64 %t201, 0 - br i1 %t202, label %map.missing10672, label %map.found10673 -map.missing10672: + br i1 %t202, label %map.missing10700, label %map.found10701 +map.missing10700: store { ptr, i64, i64 } zeroinitializer, ptr %a203 store { ptr, i64, i64 } %t199, ptr %a204 call void @finch_buf_str(ptr %a203, ptr %a204, i32 1) - call void @finch_map_missing(ptr @.str.7068, i64 344, ptr %a203) + call void @finch_map_missing(ptr @.str.7083, i64 344, ptr %a203) unreachable -map.found10673: +map.found10701: %t205 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t198, i32 0, i32 0 %t206 = load ptr, ptr %t205 %t207 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t206, i64 %t201 @@ -109218,8 +109393,8 @@ map.found10673: %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i32 0, i32 1 %t248 = load i64, ptr %t247 %t249 = icmp eq i64 %t248, 0 - br i1 %t249, label %then10674, label %endif10676 -then10674: + br i1 %t249, label %then10702, label %endif10704 +then10702: %t250 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 5 %t251 = load { ptr, i64, i64 }, ptr %t250 %t252 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 @@ -109230,13 +109405,13 @@ then10674: store { ptr, i64, i64 } %t255, ptr %t252 store { ptr, i64, i64 } %t256, ptr %a257 call void @finch.drop.arr_str(ptr %a257) - br label %endif10676 -endif10676: + br label %endif10704 +endif10704: call void @finch.drop.S_lsp_Analysis(ptr %a213) - br label %endif10671 -endif10671: - br label %endif10636 -endif10636: + br label %endif10699 +endif10699: + br label %endif10664 +endif10664: %t258 = load %S.lsp.Analysis, ptr %a169 %t259 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t260 = load { ptr, i64, i64 }, ptr %a1 @@ -109248,14 +109423,14 @@ endif10636: %t266 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t265, i64 %t263 %t267 = load i32, ptr %a262 %t268 = icmp ne i32 %t267, 0 - br i1 %t268, label %map.new10677, label %map.have10678 -map.new10677: + br i1 %t268, label %map.new10705, label %map.have10706 +map.new10705: %t269 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 1 call void @finch_str_copy(ptr %t269, ptr %a261) %t270 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 store %S.lsp.Analysis zeroinitializer, ptr %t270 - br label %map.have10678 -map.have10678: + br label %map.have10706 +map.have10706: %t271 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 store %S.lsp.Analysis %t258, ptr %a272 call void @finch.copy.S_lsp_Analysis(ptr %a273, ptr %a272) @@ -109325,14 +109500,14 @@ entry: store { ptr, i64, i64 } %t12, ptr %a13 %t14 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 store i64 0, ptr %a15 - br label %each.cond10679 -each.cond10679: + br label %each.cond10707 +each.cond10707: %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t17 = load i64, ptr %t16 %t18 = load i64, ptr %a15 %t19 = icmp slt i64 %t18, %t17 - br i1 %t19, label %each.body10680, label %each.end10682 -each.body10680: + br i1 %t19, label %each.body10708, label %each.end10710 +each.body10708: %t20 = load ptr, ptr %t14 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 %t22 = load { ptr, i64, i64 }, ptr %t21 @@ -109343,32 +109518,32 @@ each.body10680: %t27 = load i64, ptr %t24 %t28 = load ptr, ptr %a13 store i64 0, ptr %a29 - br label %find.cond10683 -find.cond10683: + br label %find.cond10711 +find.cond10711: %t30 = load i64, ptr %a29 %t31 = icmp slt i64 %t30, %t27 - br i1 %t31, label %find.body10684, label %find.end10687 -find.body10684: + br i1 %t31, label %find.body10712, label %find.end10715 +find.body10712: %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 %t33 = load { ptr, i64, i64 }, ptr %t32 store { ptr, i64, i64 } %t33, ptr %a34 store { ptr, i64, i64 } %t25, ptr %a35 %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) %t37 = icmp ne i32 %t36, 0 - br i1 %t37, label %find.hit10685, label %find.next10686 -find.hit10685: + br i1 %t37, label %find.hit10713, label %find.next10714 +find.hit10713: store i64 %t30, ptr %a26 - br label %find.end10687 -find.next10686: + br label %find.end10715 +find.next10714: %t38 = add i64 %t30, 1 store i64 %t38, ptr %a29 - br label %find.cond10683 -find.end10687: + br label %find.cond10711 +find.end10715: %t39 = load i64, ptr %a26 %t40 = icmp sge i64 %t39, 0 %t41 = xor i1 %t40, true - br i1 %t41, label %then10688, label %endif10690 -then10688: + br i1 %t41, label %then10716, label %endif10718 +then10716: %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t43 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t43, ptr %a44 @@ -109381,25 +109556,25 @@ then10688: %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 store { ptr, i64, i64 } %t46, ptr %t50 store i64 %t48, ptr %t42 - br label %endif10690 -endif10690: - br label %each.step10681 -each.step10681: + br label %endif10718 +endif10718: + br label %each.step10709 +each.step10709: %t51 = load i64, ptr %a15 %t52 = add i64 %t51, 1 store i64 %t52, ptr %a15 - br label %each.cond10679 -each.end10682: + br label %each.cond10707 +each.end10710: store { ptr, i64, i64 } zeroinitializer, ptr %a53 store i64 0, ptr %a54 - br label %each.cond10691 -each.cond10691: + br label %each.cond10719 +each.cond10719: %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 %t56 = load i64, ptr %t55 %t57 = load i64, ptr %a54 %t58 = icmp slt i64 %t57, %t56 - br i1 %t58, label %each.body10692, label %each.end10694 -each.body10692: + br i1 %t58, label %each.body10720, label %each.end10722 +each.body10720: %t59 = load ptr, ptr %a13 %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 %t57 %t61 = load { ptr, i64, i64 }, ptr %t60 @@ -109409,10 +109584,10 @@ each.body10692: %t65 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t66 = getelementptr inbounds %S.lsp.Diag, ptr %t65, i32 0, i32 0 %t67 = load i1, ptr %t66 - br label %logic.from10695 -logic.from10695: - br i1 %t67, label %logic.rhs10696, label %logic.end10697 -logic.rhs10696: + br label %logic.from10723 +logic.from10723: + br i1 %t67, label %logic.rhs10724, label %logic.end10725 +logic.rhs10724: %t68 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t69 = getelementptr inbounds %S.lsp.Diag, ptr %t68, i32 0, i32 1 %t70 = load { ptr, i64, i64 }, ptr %t69 @@ -109421,13 +109596,13 @@ logic.rhs10696: store { ptr, i64, i64 } %t71, ptr %a73 %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) %t75 = icmp ne i32 %t74, 0 - br label %logic.rend10698 -logic.rend10698: - br label %logic.end10697 -logic.end10697: - %t76 = phi i1 [ false, %logic.from10695 ], [ %t75, %logic.rend10698 ] - br i1 %t76, label %then10699, label %endif10701 -then10699: + br label %logic.rend10726 +logic.rend10726: + br label %logic.end10725 +logic.end10725: + %t76 = phi i1 [ false, %logic.from10723 ], [ %t75, %logic.rend10726 ] + br i1 %t76, label %then10727, label %endif10729 +then10727: %t77 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t78 = getelementptr inbounds %S.lsp.Diag, ptr %t77, i32 0, i32 2 %t79 = load i64, ptr %t78 @@ -109435,11 +109610,11 @@ then10699: store i64 %t80, ptr %a81 %t82 = load i64, ptr %a81 %t83 = icmp slt i64 %t82, 0 - br i1 %t83, label %then10702, label %endif10704 -then10702: + br i1 %t83, label %then10730, label %endif10732 +then10730: store i64 0, ptr %a81 - br label %endif10704 -endif10704: + br label %endif10732 +endif10732: %t84 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t85 = getelementptr inbounds %S.lsp.Diag, ptr %t84, i32 0, i32 3 %t86 = load i64, ptr %t85 @@ -109447,11 +109622,11 @@ endif10704: store i64 %t87, ptr %a88 %t89 = load i64, ptr %a88 %t90 = icmp slt i64 %t89, 0 - br i1 %t90, label %then10705, label %endif10707 -then10705: + br i1 %t90, label %then10733, label %endif10735 +then10733: store i64 0, ptr %a88 - br label %endif10707 -endif10707: + br label %endif10735 +endif10735: %t91 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t91, ptr %a92 %t93 = load i64, ptr %a81 @@ -109459,22 +109634,22 @@ endif10707: %t95 = load i64, ptr %a88 %t96 = add i64 %t95, 1 %t97 = call %S.json.Json @finch.lsp.range(i64 %t93, i64 %t94, i64 %t96) - call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7069, i64 5, i64 0 }, %S.json.Json %t97) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7084, i64 5, i64 0 }, %S.json.Json %t97) store %S.json.Json %t97, ptr %a98 call void @finch.drop.S_json_Json(ptr %a98) %t99 = call %S.json.Json @finch.lsp.num(i64 1) - call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7070, i64 8, i64 0 }, %S.json.Json %t99) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7085, i64 8, i64 0 }, %S.json.Json %t99) store %S.json.Json %t99, ptr %a100 call void @finch.drop.S_json_Json(ptr %a100) - %t101 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7072, i64 5, i64 0 }) - call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7071, i64 6, i64 0 }, %S.json.Json %t101) + %t101 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7087, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7086, i64 6, i64 0 }, %S.json.Json %t101) store %S.json.Json %t101, ptr %a102 call void @finch.drop.S_json_Json(ptr %a102) %t103 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 %t104 = getelementptr inbounds %S.lsp.Diag, ptr %t103, i32 0, i32 4 %t105 = load { ptr, i64, i64 }, ptr %t104 %t106 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t105) - call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7073, i64 7, i64 0 }, %S.json.Json %t106) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7088, i64 7, i64 0 }, %S.json.Json %t106) store %S.json.Json %t106, ptr %a107 call void @finch.drop.S_json_Json(ptr %a107) %t108 = load %S.json.Json, ptr %a92 @@ -109492,8 +109667,8 @@ endif10707: store { ptr, i64, i64 } %t113, ptr %t117 store i64 %t115, ptr %t109 call void @finch.drop.S_json_Json(ptr %a92) - br label %endif10701 -endif10701: + br label %endif10729 +endif10729: %t118 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t118, ptr %a119 %t120 = load { ptr, i64, i64 }, ptr %a62 @@ -109501,22 +109676,22 @@ endif10701: %t122 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t121) store { ptr, i64, i64 } %t121, ptr %a123 call void @finch_str_drop(ptr %a123) - call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7074, i64 3, i64 0 }, %S.json.Json %t122) + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7089, i64 3, i64 0 }, %S.json.Json %t122) store %S.json.Json %t122, ptr %a124 call void @finch.drop.S_json_Json(ptr %a124) %t125 = load %S.json.Json, ptr %a64 - call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7075, i64 11, i64 0 }, %S.json.Json %t125) + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7090, i64 11, i64 0 }, %S.json.Json %t125) %t126 = load %S.json.Json, ptr %a119 - call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7076, i64 31, i64 0 }, %S.json.Json %t126) + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7091, i64 31, i64 0 }, %S.json.Json %t126) call void @finch.drop.S_json_Json(ptr %a119) call void @finch.drop.S_json_Json(ptr %a64) - br label %each.step10693 -each.step10693: + br label %each.step10721 +each.step10721: %t127 = load i64, ptr %a54 %t128 = add i64 %t127, 1 store i64 %t128, ptr %a54 - br label %each.cond10691 -each.end10694: + br label %each.cond10719 +each.end10722: %t129 = load { ptr, i64, i64 }, ptr %a53 %t130 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 store { ptr, i64, i64 } %t129, ptr %a131 @@ -109551,22 +109726,22 @@ entry: %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 - br label %for.cond10708 -for.cond10708: + br label %for.cond10736 +for.cond10736: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 - br i1 %t10, label %for.body10709, label %for.end10711 -for.body10709: + br i1 %t10, label %for.body10737, label %for.end10739 +for.body10737: %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t12 = load i64, ptr %a8 %t13 = load { ptr, i64, i64 }, ptr %t11 %t14 = extractvalue { ptr, i64, i64 } %t13, 1 %t15 = icmp uge i64 %t12, %t14 - br i1 %t15, label %range10712, label %inrange10713 -range10712: - call void @finch_panic_index(ptr @.str.7077, i64 397, i64 %t12, i64 %t14) + br i1 %t15, label %range10740, label %inrange10741 +range10740: + call void @finch_panic_index(ptr @.str.7092, i64 397, i64 %t12, i64 %t14) unreachable -inrange10713: +inrange10741: %t16 = extractvalue { ptr, i64, i64 } %t13, 0 %t17 = getelementptr inbounds %S.lsp.Ref, ptr %t16, i64 %t12 %t18 = load %S.lsp.Ref, ptr %t17 @@ -109578,23 +109753,23 @@ inrange10713: %t24 = load i64, ptr %t23 %t25 = load i64, ptr %a3 %t26 = icmp eq i64 %t24, %t25 - br label %logic.from10714 -logic.from10714: - br i1 %t26, label %logic.rhs10715, label %logic.end10716 -logic.rhs10715: + br label %logic.from10742 +logic.from10742: + br i1 %t26, label %logic.rhs10743, label %logic.end10744 +logic.rhs10743: %t27 = load i64, ptr %a4 %t28 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 %t29 = load i64, ptr %t28 %t30 = icmp sge i64 %t27, %t29 - br label %logic.rend10717 -logic.rend10717: - br label %logic.end10716 -logic.end10716: - %t31 = phi i1 [ false, %logic.from10714 ], [ %t30, %logic.rend10717 ] - br label %logic.from10718 -logic.from10718: - br i1 %t31, label %logic.rhs10719, label %logic.end10720 -logic.rhs10719: + br label %logic.rend10745 +logic.rend10745: + br label %logic.end10744 +logic.end10744: + %t31 = phi i1 [ false, %logic.from10742 ], [ %t30, %logic.rend10745 ] + br label %logic.from10746 +logic.from10746: + br i1 %t31, label %logic.rhs10747, label %logic.end10748 +logic.rhs10747: %t32 = load i64, ptr %a4 %t33 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 %t34 = load i64, ptr %t33 @@ -109602,15 +109777,15 @@ logic.rhs10719: %t36 = load i64, ptr %t35 %t37 = add i64 %t34, %t36 %t38 = icmp sle i64 %t32, %t37 - br label %logic.rend10721 -logic.rend10721: - br label %logic.end10720 -logic.end10720: - %t39 = phi i1 [ false, %logic.from10718 ], [ %t38, %logic.rend10721 ] - br label %logic.from10722 -logic.from10722: - br i1 %t39, label %logic.rhs10723, label %logic.end10724 -logic.rhs10723: + br label %logic.rend10749 +logic.rend10749: + br label %logic.end10748 +logic.end10748: + %t39 = phi i1 [ false, %logic.from10746 ], [ %t38, %logic.rend10749 ] + br label %logic.from10750 +logic.from10750: + br i1 %t39, label %logic.rhs10751, label %logic.end10752 +logic.rhs10751: %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 0 %t41 = load { ptr, i64, i64 }, ptr %t40 %t42 = load { ptr, i64, i64 }, ptr %a2 @@ -109618,25 +109793,25 @@ logic.rhs10723: store { ptr, i64, i64 } %t42, ptr %a44 %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) %t46 = icmp ne i32 %t45, 0 - br label %logic.rend10725 -logic.rend10725: - br label %logic.end10724 -logic.end10724: - %t47 = phi i1 [ false, %logic.from10722 ], [ %t46, %logic.rend10725 ] - br i1 %t47, label %then10726, label %endif10728 -then10726: + br label %logic.rend10753 +logic.rend10753: + br label %logic.end10752 +logic.end10752: + %t47 = phi i1 [ false, %logic.from10750 ], [ %t46, %logic.rend10753 ] + br i1 %t47, label %then10754, label %endif10756 +then10754: %t48 = load i64, ptr %a8 call void @finch.drop.S_lsp_Ref(ptr %a22) ret i64 %t48 -endif10728: +endif10756: call void @finch.drop.S_lsp_Ref(ptr %a22) - br label %for.step10710 -for.step10710: + br label %for.step10738 +for.step10738: %t49 = load i64, ptr %a8 %t50 = add i64 %t49, 1 store i64 %t50, ptr %a8 - br label %for.cond10708 -for.end10711: + br label %for.cond10736 +for.end10739: ret i64 -1 } @@ -109663,15 +109838,15 @@ entry: store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 - br i1 %t12, label %then10729, label %endif10731 -then10729: + br i1 %t12, label %then10757, label %endif10759 +then10757: %t13 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t13 -endif10731: +endif10759: %t14 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t14, ptr %a15 - %t16 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7079, i64 8, i64 0 }) - call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7078, i64 4, i64 0 }, %S.json.Json %t16) + %t16 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7094, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7093, i64 4, i64 0 }, %S.json.Json %t16) store %S.json.Json %t16, ptr %a17 call void @finch.drop.S_json_Json(ptr %a17) %t18 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 @@ -109679,23 +109854,23 @@ endif10731: %t20 = load { ptr, i64, i64 }, ptr %t18 %t21 = extractvalue { ptr, i64, i64 } %t20, 1 %t22 = icmp uge i64 %t19, %t21 - br i1 %t22, label %range10732, label %inrange10733 -range10732: - call void @finch_panic_index(ptr @.str.7081, i64 412, i64 %t19, i64 %t21) + br i1 %t22, label %range10760, label %inrange10761 +range10760: + call void @finch_panic_index(ptr @.str.7096, i64 412, i64 %t19, i64 %t21) unreachable -inrange10733: +inrange10761: %t23 = extractvalue { ptr, i64, i64 } %t20, 0 %t24 = getelementptr inbounds %S.lsp.Ref, ptr %t23, i64 %t19 %t25 = getelementptr inbounds %S.lsp.Ref, ptr %t24, i32 0, i32 7 %t26 = load { ptr, i64, i64 }, ptr %t25 %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) - call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7080, i64 5, i64 0 }, %S.json.Json %t27) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7095, i64 5, i64 0 }, %S.json.Json %t27) store %S.json.Json %t27, ptr %a28 call void @finch.drop.S_json_Json(ptr %a28) %t29 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t29, ptr %a30 %t31 = load %S.json.Json, ptr %a15 - call void @finch.json.Json.set(ptr %a30, { ptr, i64, i64 } { ptr @.str.7082, i64 8, i64 0 }, %S.json.Json %t31) + call void @finch.json.Json.set(ptr %a30, { ptr, i64, i64 } { ptr @.str.7097, i64 8, i64 0 }, %S.json.Json %t31) %t32 = load %S.json.Json, ptr %a30 call void @finch.drop.S_json_Json(ptr %a15) ret %S.json.Json %t32 @@ -109727,46 +109902,46 @@ entry: store i64 %t9, ptr %a10 %t11 = load i64, ptr %a10 %t12 = icmp slt i64 %t11, 0 - br label %logic.from10734 -logic.from10734: - br i1 %t12, label %logic.end10736, label %logic.rhs10735 -logic.rhs10735: + br label %logic.from10762 +logic.from10762: + br i1 %t12, label %logic.end10764, label %logic.rhs10763 +logic.rhs10763: %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t14 = load i64, ptr %a10 %t15 = load { ptr, i64, i64 }, ptr %t13 %t16 = extractvalue { ptr, i64, i64 } %t15, 1 %t17 = icmp uge i64 %t14, %t16 - br i1 %t17, label %range10737, label %inrange10738 -range10737: - call void @finch_panic_index(ptr @.str.7083, i64 420, i64 %t14, i64 %t16) + br i1 %t17, label %range10765, label %inrange10766 +range10765: + call void @finch_panic_index(ptr @.str.7098, i64 420, i64 %t14, i64 %t16) unreachable -inrange10738: +inrange10766: %t18 = extractvalue { ptr, i64, i64 } %t15, 0 %t19 = getelementptr inbounds %S.lsp.Ref, ptr %t18, i64 %t14 %t20 = getelementptr inbounds %S.lsp.Ref, ptr %t19, i32 0, i32 4 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = icmp eq i64 %t22, 0 - br label %logic.rend10739 -logic.rend10739: - br label %logic.end10736 -logic.end10736: - %t24 = phi i1 [ true, %logic.from10734 ], [ %t23, %logic.rend10739 ] - br i1 %t24, label %then10740, label %endif10742 -then10740: + br label %logic.rend10767 +logic.rend10767: + br label %logic.end10764 +logic.end10764: + %t24 = phi i1 [ true, %logic.from10762 ], [ %t23, %logic.rend10767 ] + br i1 %t24, label %then10768, label %endif10770 +then10768: %t25 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t25 -endif10742: +endif10770: %t26 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 %t27 = load i64, ptr %a10 %t28 = load { ptr, i64, i64 }, ptr %t26 %t29 = extractvalue { ptr, i64, i64 } %t28, 1 %t30 = icmp uge i64 %t27, %t29 - br i1 %t30, label %range10743, label %inrange10744 -range10743: - call void @finch_panic_index(ptr @.str.7084, i64 423, i64 %t27, i64 %t29) + br i1 %t30, label %range10771, label %inrange10772 +range10771: + call void @finch_panic_index(ptr @.str.7099, i64 423, i64 %t27, i64 %t29) unreachable -inrange10744: +inrange10772: %t31 = extractvalue { ptr, i64, i64 } %t28, 0 %t32 = getelementptr inbounds %S.lsp.Ref, ptr %t31, i64 %t27 %t33 = load %S.lsp.Ref, ptr %t32 @@ -109782,7 +109957,7 @@ inrange10744: %t43 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t42) store { ptr, i64, i64 } %t42, ptr %a44 call void @finch_str_drop(ptr %a44) - call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7085, i64 3, i64 0 }, %S.json.Json %t43) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7100, i64 3, i64 0 }, %S.json.Json %t43) store %S.json.Json %t43, ptr %a45 call void @finch.drop.S_json_Json(ptr %a45) %t46 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 5 @@ -109795,7 +109970,7 @@ inrange10744: %t53 = load i64, ptr %t52 %t54 = sub i64 %t53, 1 %t55 = call %S.json.Json @finch.lsp.range(i64 %t48, i64 %t51, i64 %t54) - call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7086, i64 5, i64 0 }, %S.json.Json %t55) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7101, i64 5, i64 0 }, %S.json.Json %t55) store %S.json.Json %t55, ptr %a56 call void @finch.drop.S_json_Json(ptr %a56) %t57 = load %S.json.Json, ptr %a39 @@ -109841,14 +110016,14 @@ entry: store %S.json.Json %t3, ptr %a4 %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a6 - br label %each.cond10745 -each.cond10745: + br label %each.cond10773 +each.cond10773: %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t8 = load i64, ptr %t7 %t9 = load i64, ptr %a6 %t10 = icmp slt i64 %t9, %t8 - br i1 %t10, label %each.body10746, label %each.end10748 -each.body10746: + br i1 %t10, label %each.body10774, label %each.end10776 +each.body10774: %t11 = load ptr, ptr %t5 %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %t11, i64 %t9 %t13 = load %S.lsp.FnRec, ptr %t12 @@ -109860,10 +110035,10 @@ each.body10746: store { ptr, i64, i64 } %t17, ptr %a19 %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) %t21 = icmp eq i32 %t20, 0 - br i1 %t21, label %then10749, label %endif10751 -then10749: - br label %each.step10747 -endif10751: + br i1 %t21, label %then10777, label %endif10779 +then10777: + br label %each.step10775 +endif10779: store i64 12, ptr %a22 %t23 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 %t24 = load { ptr, i64, i64 }, ptr %t23 @@ -109875,13 +110050,13 @@ endif10751: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = icmp sgt i64 %t31, 0 - br i1 %t32, label %then10752, label %endif10754 -then10752: + br i1 %t32, label %then10780, label %endif10782 +then10780: store i64 6, ptr %a22 %t33 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 %t34 = load { ptr, i64, i64 }, ptr %t33 store { ptr, i64, i64 } %t34, ptr %a36 - store { ptr, i64, i64 } { ptr @.str.7087, i64 1, i64 0 }, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.7102, i64 1, i64 0 }, ptr %a37 call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) %t38 = load { ptr, i64, i64 }, ptr %a35 %t39 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 @@ -109896,8 +110071,8 @@ then10752: store { ptr, i64, i64 } %t45, ptr %a28 store { ptr, i64, i64 } %t46, ptr %a47 call void @finch_str_drop(ptr %a47) - br label %endif10754 -endif10754: + br label %endif10782 +endif10782: %t48 = load { ptr, i64, i64 }, ptr %a28 %t49 = load i64, ptr %a22 %t50 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 4 @@ -109911,23 +110086,23 @@ endif10754: store %S.json.Json %t56, ptr %a57 call void @finch.drop.S_json_Json(ptr %a57) call void @finch_str_drop(ptr %a28) - br label %each.step10747 -each.step10747: + br label %each.step10775 +each.step10775: %t58 = load i64, ptr %a6 %t59 = add i64 %t58, 1 store i64 %t59, ptr %a6 - br label %each.cond10745 -each.end10748: + br label %each.cond10773 +each.end10776: %t60 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a61 - br label %each.cond10755 -each.cond10755: + br label %each.cond10783 +each.cond10783: %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 %t63 = load i64, ptr %t62 %t64 = load i64, ptr %a61 %t65 = icmp slt i64 %t64, %t63 - br i1 %t65, label %each.body10756, label %each.end10758 -each.body10756: + br i1 %t65, label %each.body10784, label %each.end10786 +each.body10784: %t66 = load ptr, ptr %t60 %t67 = getelementptr inbounds %S.lsp.StructRec, ptr %t66, i64 %t64 %t68 = load %S.lsp.StructRec, ptr %t67 @@ -109939,8 +110114,8 @@ each.body10756: store { ptr, i64, i64 } %t72, ptr %a74 %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) %t76 = icmp ne i32 %t75, 0 - br i1 %t76, label %then10759, label %endif10761 -then10759: + br i1 %t76, label %then10787, label %endif10789 +then10787: %t77 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 1 %t78 = load { ptr, i64, i64 }, ptr %t77 %t79 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 @@ -109958,25 +110133,25 @@ then10759: call void @finch.json.Json.push(ptr %a4, %S.json.Json %t90) store %S.json.Json %t90, ptr %a91 call void @finch.drop.S_json_Json(ptr %a91) - br label %endif10761 -endif10761: - br label %each.step10757 -each.step10757: + br label %endif10789 +endif10789: + br label %each.step10785 +each.step10785: %t92 = load i64, ptr %a61 %t93 = add i64 %t92, 1 store i64 %t93, ptr %a61 - br label %each.cond10755 -each.end10758: + br label %each.cond10783 +each.end10786: %t94 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a95 - br label %each.cond10762 -each.cond10762: + br label %each.cond10790 +each.cond10790: %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 %t97 = load i64, ptr %t96 %t98 = load i64, ptr %a95 %t99 = icmp slt i64 %t98, %t97 - br i1 %t99, label %each.body10763, label %each.end10765 -each.body10763: + br i1 %t99, label %each.body10791, label %each.end10793 +each.body10791: %t100 = load ptr, ptr %t94 %t101 = getelementptr inbounds %S.lsp.EnumRec, ptr %t100, i64 %t98 %t102 = load %S.lsp.EnumRec, ptr %t101 @@ -109988,8 +110163,8 @@ each.body10763: store { ptr, i64, i64 } %t106, ptr %a108 %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) %t110 = icmp ne i32 %t109, 0 - br i1 %t110, label %then10766, label %endif10768 -then10766: + br i1 %t110, label %then10794, label %endif10796 +then10794: %t111 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 1 %t112 = load { ptr, i64, i64 }, ptr %t111 %t113 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 @@ -110007,15 +110182,15 @@ then10766: call void @finch.json.Json.push(ptr %a4, %S.json.Json %t124) store %S.json.Json %t124, ptr %a125 call void @finch.drop.S_json_Json(ptr %a125) - br label %endif10768 -endif10768: - br label %each.step10764 -each.step10764: + br label %endif10796 +endif10796: + br label %each.step10792 +each.step10792: %t126 = load i64, ptr %a95 %t127 = add i64 %t126, 1 store i64 %t127, ptr %a95 - br label %each.cond10762 -each.end10765: + br label %each.cond10790 +each.end10793: %t128 = load %S.json.Json, ptr %a4 ret %S.json.Json %t128 } @@ -110043,12 +110218,12 @@ entry: store %S.json.Json %t6, ptr %a7 %t8 = load { ptr, i64, i64 }, ptr %a1 %t9 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t8) - call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7088, i64 4, i64 0 }, %S.json.Json %t9) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7103, i64 4, i64 0 }, %S.json.Json %t9) store %S.json.Json %t9, ptr %a10 call void @finch.drop.S_json_Json(ptr %a10) %t11 = load i64, ptr %a2 %t12 = call %S.json.Json @finch.lsp.num(i64 %t11) - call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7089, i64 4, i64 0 }, %S.json.Json %t12) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7104, i64 4, i64 0 }, %S.json.Json %t12) store %S.json.Json %t12, ptr %a13 call void @finch.drop.S_json_Json(ptr %a13) %t14 = call %S.json.Json @finch.json.new_object() @@ -110056,16 +110231,16 @@ entry: %t16 = load i64, ptr %a3 %t17 = sub i64 %t16, 1 %t18 = call %S.json.Json @finch.lsp.position(i64 %t17, i64 0) - call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7090, i64 5, i64 0 }, %S.json.Json %t18) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7105, i64 5, i64 0 }, %S.json.Json %t18) store %S.json.Json %t18, ptr %a19 call void @finch.drop.S_json_Json(ptr %a19) %t20 = load i64, ptr %a5 %t21 = call %S.json.Json @finch.lsp.position(i64 %t20, i64 0) - call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7091, i64 3, i64 0 }, %S.json.Json %t21) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7106, i64 3, i64 0 }, %S.json.Json %t21) store %S.json.Json %t21, ptr %a22 call void @finch.drop.S_json_Json(ptr %a22) %t23 = load %S.json.Json, ptr %a15 - call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7092, i64 5, i64 0 }, %S.json.Json %t23) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7107, i64 5, i64 0 }, %S.json.Json %t23) %t24 = load i64, ptr %a3 %t25 = sub i64 %t24, 1 %t26 = load i64, ptr %a4 @@ -110073,7 +110248,7 @@ entry: %t28 = load i64, ptr %a4 %t29 = sub i64 %t28, 1 %t30 = call %S.json.Json @finch.lsp.range(i64 %t25, i64 %t27, i64 %t29) - call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7093, i64 14, i64 0 }, %S.json.Json %t30) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7108, i64 14, i64 0 }, %S.json.Json %t30) store %S.json.Json %t30, ptr %a31 call void @finch.drop.S_json_Json(ptr %a31) %t32 = load %S.json.Json, ptr %a7 @@ -110102,47 +110277,47 @@ entry: store %S.json.Json %t5, ptr %a6 %t7 = load { ptr, i64, i64 }, ptr %a1 %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) - call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7094, i64 5, i64 0 }, %S.json.Json %t8) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7109, i64 5, i64 0 }, %S.json.Json %t8) store %S.json.Json %t8, ptr %a9 call void @finch.drop.S_json_Json(ptr %a9) %t10 = load i64, ptr %a2 %t11 = call %S.json.Json @finch.lsp.num(i64 %t10) - call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7095, i64 4, i64 0 }, %S.json.Json %t11) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7110, i64 4, i64 0 }, %S.json.Json %t11) store %S.json.Json %t11, ptr %a12 call void @finch.drop.S_json_Json(ptr %a12) %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sgt i64 %t14, 0 - br i1 %t15, label %then10769, label %endif10771 -then10769: + br i1 %t15, label %then10797, label %endif10799 +then10797: %t16 = load { ptr, i64, i64 }, ptr %a3 %t17 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t16) - call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7096, i64 6, i64 0 }, %S.json.Json %t17) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7111, i64 6, i64 0 }, %S.json.Json %t17) store %S.json.Json %t17, ptr %a18 call void @finch.drop.S_json_Json(ptr %a18) - br label %endif10771 -endif10771: + br label %endif10799 +endif10799: %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 %t20 = load i64, ptr %t19 %t21 = icmp sgt i64 %t20, 0 - br i1 %t21, label %then10772, label %endif10774 -then10772: + br i1 %t21, label %then10800, label %endif10802 +then10800: %t22 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t22, ptr %a23 - %t24 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7098, i64 8, i64 0 }) - call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7097, i64 4, i64 0 }, %S.json.Json %t24) + %t24 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7113, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7112, i64 4, i64 0 }, %S.json.Json %t24) store %S.json.Json %t24, ptr %a25 call void @finch.drop.S_json_Json(ptr %a25) %t26 = load { ptr, i64, i64 }, ptr %a4 %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) - call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7099, i64 5, i64 0 }, %S.json.Json %t27) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7114, i64 5, i64 0 }, %S.json.Json %t27) store %S.json.Json %t27, ptr %a28 call void @finch.drop.S_json_Json(ptr %a28) %t29 = load %S.json.Json, ptr %a23 - call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7100, i64 13, i64 0 }, %S.json.Json %t29) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7115, i64 13, i64 0 }, %S.json.Json %t29) call void @finch.drop.S_json_Json(ptr %a23) - br label %endif10774 -endif10774: + br label %endif10802 +endif10802: %t30 = load %S.json.Json, ptr %a6 ret %S.json.Json %t30 } @@ -110153,72 +110328,72 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 97 - br label %logic.from10775 -logic.from10775: - br i1 %t3, label %logic.rhs10776, label %logic.end10777 -logic.rhs10776: + br label %logic.from10803 +logic.from10803: + br i1 %t3, label %logic.rhs10804, label %logic.end10805 +logic.rhs10804: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 122 - br label %logic.rend10778 -logic.rend10778: - br label %logic.end10777 -logic.end10777: - %t6 = phi i1 [ false, %logic.from10775 ], [ %t5, %logic.rend10778 ] - br label %logic.from10779 -logic.from10779: - br i1 %t6, label %logic.end10781, label %logic.rhs10780 -logic.rhs10780: + br label %logic.rend10806 +logic.rend10806: + br label %logic.end10805 +logic.end10805: + %t6 = phi i1 [ false, %logic.from10803 ], [ %t5, %logic.rend10806 ] + br label %logic.from10807 +logic.from10807: + br i1 %t6, label %logic.end10809, label %logic.rhs10808 +logic.rhs10808: %t7 = load i8, ptr %a1 %t8 = icmp uge i8 %t7, 65 - br label %logic.from10782 -logic.from10782: - br i1 %t8, label %logic.rhs10783, label %logic.end10784 -logic.rhs10783: + br label %logic.from10810 +logic.from10810: + br i1 %t8, label %logic.rhs10811, label %logic.end10812 +logic.rhs10811: %t9 = load i8, ptr %a1 %t10 = icmp ule i8 %t9, 90 - br label %logic.rend10785 -logic.rend10785: - br label %logic.end10784 -logic.end10784: - %t11 = phi i1 [ false, %logic.from10782 ], [ %t10, %logic.rend10785 ] - br label %logic.rend10786 -logic.rend10786: - br label %logic.end10781 -logic.end10781: - %t12 = phi i1 [ true, %logic.from10779 ], [ %t11, %logic.rend10786 ] - br label %logic.from10787 -logic.from10787: - br i1 %t12, label %logic.end10789, label %logic.rhs10788 -logic.rhs10788: + br label %logic.rend10813 +logic.rend10813: + br label %logic.end10812 +logic.end10812: + %t11 = phi i1 [ false, %logic.from10810 ], [ %t10, %logic.rend10813 ] + br label %logic.rend10814 +logic.rend10814: + br label %logic.end10809 +logic.end10809: + %t12 = phi i1 [ true, %logic.from10807 ], [ %t11, %logic.rend10814 ] + br label %logic.from10815 +logic.from10815: + br i1 %t12, label %logic.end10817, label %logic.rhs10816 +logic.rhs10816: %t13 = load i8, ptr %a1 %t14 = icmp uge i8 %t13, 48 - br label %logic.from10790 -logic.from10790: - br i1 %t14, label %logic.rhs10791, label %logic.end10792 -logic.rhs10791: + br label %logic.from10818 +logic.from10818: + br i1 %t14, label %logic.rhs10819, label %logic.end10820 +logic.rhs10819: %t15 = load i8, ptr %a1 %t16 = icmp ule i8 %t15, 57 - br label %logic.rend10793 -logic.rend10793: - br label %logic.end10792 -logic.end10792: - %t17 = phi i1 [ false, %logic.from10790 ], [ %t16, %logic.rend10793 ] - br label %logic.rend10794 -logic.rend10794: - br label %logic.end10789 -logic.end10789: - %t18 = phi i1 [ true, %logic.from10787 ], [ %t17, %logic.rend10794 ] - br label %logic.from10795 -logic.from10795: - br i1 %t18, label %logic.end10797, label %logic.rhs10796 -logic.rhs10796: + br label %logic.rend10821 +logic.rend10821: + br label %logic.end10820 +logic.end10820: + %t17 = phi i1 [ false, %logic.from10818 ], [ %t16, %logic.rend10821 ] + br label %logic.rend10822 +logic.rend10822: + br label %logic.end10817 +logic.end10817: + %t18 = phi i1 [ true, %logic.from10815 ], [ %t17, %logic.rend10822 ] + br label %logic.from10823 +logic.from10823: + br i1 %t18, label %logic.end10825, label %logic.rhs10824 +logic.rhs10824: %t19 = load i8, ptr %a1 %t20 = icmp eq i8 %t19, 95 - br label %logic.rend10798 -logic.rend10798: - br label %logic.end10797 -logic.end10797: - %t21 = phi i1 [ true, %logic.from10795 ], [ %t20, %logic.rend10798 ] + br label %logic.rend10826 +logic.rend10826: + br label %logic.end10825 +logic.end10825: + %t21 = phi i1 [ true, %logic.from10823 ], [ %t20, %logic.rend10826 ] ret i1 %t21 } @@ -110236,14 +110411,14 @@ entry: store ptr %p0, ptr %a1 store { ptr, i64, i64 } %p1, ptr %a2 store i64 0, ptr %a3 - br label %each.cond10799 -each.cond10799: + br label %each.cond10827 +each.cond10827: %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load i64, ptr %a3 %t7 = icmp slt i64 %t6, %t5 - br i1 %t7, label %each.body10800, label %each.end10802 -each.body10800: + br i1 %t7, label %each.body10828, label %each.end10830 +each.body10828: %t8 = load ptr, ptr %a2 %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 %t10 = load %S.docs.Doc, ptr %t9 @@ -110252,21 +110427,21 @@ each.body10800: %t13 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 %t14 = load { ptr, i64, i64 }, ptr %t13 store { ptr, i64, i64 } %t14, ptr %a15 - store { ptr, i64, i64 } { ptr @.str.7102, i64 1, i64 0 }, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.7117, i64 1, i64 0 }, ptr %a17 %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %then10803, label %endif10805 -then10803: + br i1 %t19, label %then10831, label %endif10833 +then10831: store i64 5, ptr %a12 - br label %endif10805 -endif10805: + br label %endif10833 +endif10833: %t20 = load ptr, ptr %a1 %t21 = icmp eq ptr %t20, null - br i1 %t21, label %panic10806, label %ok10807 -panic10806: - call void @finch_panic(ptr @.str.7103, i64 497, ptr @.str.7104) + br i1 %t21, label %panic10834, label %ok10835 +panic10834: + call void @finch_panic(ptr @.str.7118, i64 497, ptr @.str.7119) unreachable -ok10807: +ok10835: %t22 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 %t23 = load { ptr, i64, i64 }, ptr %t22 %t24 = load i64, ptr %a12 @@ -110278,13 +110453,13 @@ ok10807: call void @finch.json.Json.push(ptr %t20, %S.json.Json %t29) store %S.json.Json %t29, ptr %a30 call void @finch.drop.S_json_Json(ptr %a30) - br label %each.step10801 -each.step10801: + br label %each.step10829 +each.step10829: %t31 = load i64, ptr %a3 %t32 = add i64 %t31, 1 store i64 %t32, ptr %a3 - br label %each.cond10799 -each.end10802: + br label %each.cond10827 +each.end10830: ret void } @@ -110311,14 +110486,14 @@ entry: store %S.lsp.VarRec zeroinitializer, ptr %a5 %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 store i64 0, ptr %a7 - br label %each.cond10808 -each.cond10808: + br label %each.cond10836 +each.cond10836: %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load i64, ptr %a7 %t11 = icmp slt i64 %t10, %t9 - br i1 %t11, label %each.body10809, label %each.end10811 -each.body10809: + br i1 %t11, label %each.body10837, label %each.end10839 +each.body10837: %t12 = load ptr, ptr %t6 %t13 = getelementptr inbounds %S.lsp.VarRec, ptr %t12, i64 %t10 %t14 = load %S.lsp.VarRec, ptr %t13 @@ -110330,37 +110505,37 @@ each.body10809: store { ptr, i64, i64 } %t18, ptr %a20 %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) %t22 = icmp ne i32 %t21, 0 - br label %logic.from10812 -logic.from10812: - br i1 %t22, label %logic.rhs10813, label %logic.end10814 -logic.rhs10813: + br label %logic.from10840 +logic.from10840: + br i1 %t22, label %logic.rhs10841, label %logic.end10842 +logic.rhs10841: %t23 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 3 %t24 = load i64, ptr %t23 %t25 = load i64, ptr %a4 %t26 = icmp sle i64 %t24, %t25 - br label %logic.rend10815 -logic.rend10815: - br label %logic.end10814 -logic.end10814: - %t27 = phi i1 [ false, %logic.from10812 ], [ %t26, %logic.rend10815 ] - br label %logic.from10816 -logic.from10816: - br i1 %t27, label %logic.rhs10817, label %logic.end10818 -logic.rhs10817: + br label %logic.rend10843 +logic.rend10843: + br label %logic.end10842 +logic.end10842: + %t27 = phi i1 [ false, %logic.from10840 ], [ %t26, %logic.rend10843 ] + br label %logic.from10844 +logic.from10844: + br i1 %t27, label %logic.rhs10845, label %logic.end10846 +logic.rhs10845: %t28 = load i64, ptr %a4 %t29 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 7 %t30 = load i64, ptr %t29 %t31 = add i64 %t30, 1 %t32 = icmp sle i64 %t28, %t31 - br label %logic.rend10819 -logic.rend10819: - br label %logic.end10818 -logic.end10818: - %t33 = phi i1 [ false, %logic.from10816 ], [ %t32, %logic.rend10819 ] - br label %logic.from10820 -logic.from10820: - br i1 %t33, label %logic.rhs10821, label %logic.end10822 -logic.rhs10821: + br label %logic.rend10847 +logic.rend10847: + br label %logic.end10846 +logic.end10846: + %t33 = phi i1 [ false, %logic.from10844 ], [ %t32, %logic.rend10847 ] + br label %logic.from10848 +logic.from10848: + br i1 %t33, label %logic.rhs10849, label %logic.end10850 +logic.rhs10849: %t34 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 5 %t35 = load { ptr, i64, i64 }, ptr %t34 %t36 = load { ptr, i64, i64 }, ptr %a2 @@ -110368,13 +110543,13 @@ logic.rhs10821: store { ptr, i64, i64 } %t36, ptr %a38 %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) %t40 = icmp ne i32 %t39, 0 - br label %logic.rend10823 -logic.rend10823: - br label %logic.end10822 -logic.end10822: - %t41 = phi i1 [ false, %logic.from10820 ], [ %t40, %logic.rend10823 ] - br i1 %t41, label %then10824, label %endif10826 -then10824: + br label %logic.rend10851 +logic.rend10851: + br label %logic.end10850 +logic.end10850: + %t41 = phi i1 [ false, %logic.from10848 ], [ %t40, %logic.rend10851 ] + br i1 %t41, label %then10852, label %endif10854 +then10852: %t42 = load %S.lsp.VarRec, ptr %a15 store %S.lsp.VarRec %t42, ptr %a43 call void @finch.copy.S_lsp_VarRec(ptr %a44, ptr %a43) @@ -110383,15 +110558,15 @@ then10824: store %S.lsp.VarRec %t45, ptr %a5 store %S.lsp.VarRec %t46, ptr %a47 call void @finch.drop.S_lsp_VarRec(ptr %a47) - br label %endif10826 -endif10826: - br label %each.step10810 -each.step10810: + br label %endif10854 +endif10854: + br label %each.step10838 +each.step10838: %t48 = load i64, ptr %a7 %t49 = add i64 %t48, 1 store i64 %t49, ptr %a7 - br label %each.cond10808 -each.end10811: + br label %each.cond10836 +each.end10839: %t50 = load %S.lsp.VarRec, ptr %a5 ret %S.lsp.VarRec %t50 } @@ -110586,198 +110761,198 @@ entry: %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t17 = load i64, ptr %t16 %t18 = icmp sgt i64 %t15, %t17 - br i1 %t18, label %then10827, label %endif10829 -then10827: + br i1 %t18, label %then10855, label %endif10857 +then10855: %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 %t20 = load i64, ptr %t19 store i64 %t20, ptr %a14 - br label %endif10829 -endif10829: + br label %endif10857 +endif10857: %t21 = load { ptr, i64, i64 }, ptr %a11 store { ptr, i64, i64 } %t21, ptr %a22 %t24 = load i64, ptr %a14 - call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.7105, i64 519) + call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.7120, i64 519) %t25 = load { ptr, i64, i64 }, ptr %a23 store { ptr, i64, i64 } %t25, ptr %a26 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 %t28 = load i64, ptr %t27 store i64 %t28, ptr %a29 - br label %while.cond10830 -while.cond10830: + br label %while.cond10858 +while.cond10858: %t30 = load i64, ptr %a29 %t31 = icmp sgt i64 %t30, 0 - br label %logic.from10833 -logic.from10833: - br i1 %t31, label %logic.rhs10834, label %logic.end10835 -logic.rhs10834: + br label %logic.from10861 +logic.from10861: + br i1 %t31, label %logic.rhs10862, label %logic.end10863 +logic.rhs10862: %t32 = load i64, ptr %a29 %t33 = sub i64 %t32, 1 %t34 = load { ptr, i64, i64 }, ptr %a26 %t35 = extractvalue { ptr, i64, i64 } %t34, 1 %t36 = icmp uge i64 %t33, %t35 - br i1 %t36, label %range10836, label %inrange10837 -range10836: - call void @finch_panic_index(ptr @.str.7106, i64 522, i64 %t33, i64 %t35) + br i1 %t36, label %range10864, label %inrange10865 +range10864: + call void @finch_panic_index(ptr @.str.7121, i64 522, i64 %t33, i64 %t35) unreachable -inrange10837: +inrange10865: %t37 = extractvalue { ptr, i64, i64 } %t34, 0 %t38 = getelementptr inbounds i8, ptr %t37, i64 %t33 %t39 = load i8, ptr %t38 %t40 = call i1 @finch.lsp.isWordChar(i8 %t39) - br label %logic.rend10838 -logic.rend10838: - br label %logic.end10835 -logic.end10835: - %t41 = phi i1 [ false, %logic.from10833 ], [ %t40, %logic.rend10838 ] - br i1 %t41, label %while.body10831, label %while.end10832 -while.body10831: + br label %logic.rend10866 +logic.rend10866: + br label %logic.end10863 +logic.end10863: + %t41 = phi i1 [ false, %logic.from10861 ], [ %t40, %logic.rend10866 ] + br i1 %t41, label %while.body10859, label %while.end10860 +while.body10859: %t42 = load i64, ptr %a29 %t43 = sub i64 %t42, 1 store i64 %t43, ptr %a29 - br label %while.cond10830 -while.end10832: + br label %while.cond10858 +while.end10860: %t44 = load i64, ptr %a29 %t45 = icmp sgt i64 %t44, 0 - br label %logic.from10839 -logic.from10839: - br i1 %t45, label %logic.rhs10840, label %logic.end10841 -logic.rhs10840: + br label %logic.from10867 +logic.from10867: + br i1 %t45, label %logic.rhs10868, label %logic.end10869 +logic.rhs10868: %t46 = load i64, ptr %a29 %t47 = sub i64 %t46, 1 %t48 = load { ptr, i64, i64 }, ptr %a26 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range10842, label %inrange10843 -range10842: - call void @finch_panic_index(ptr @.str.7107, i64 525, i64 %t47, i64 %t49) + br i1 %t50, label %range10870, label %inrange10871 +range10870: + call void @finch_panic_index(ptr @.str.7122, i64 525, i64 %t47, i64 %t49) unreachable -inrange10843: +inrange10871: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 %t53 = load i8, ptr %t52 %t54 = icmp eq i8 %t53, 46 - br label %logic.rend10844 -logic.rend10844: - br label %logic.end10841 -logic.end10841: - %t55 = phi i1 [ false, %logic.from10839 ], [ %t54, %logic.rend10844 ] + br label %logic.rend10872 +logic.rend10872: + br label %logic.end10869 +logic.end10869: + %t55 = phi i1 [ false, %logic.from10867 ], [ %t54, %logic.rend10872 ] store i1 %t55, ptr %a56 %t57 = load i1, ptr %a56 - br i1 %t57, label %then10845, label %endif10847 -then10845: + br i1 %t57, label %then10873, label %endif10875 +then10873: %t58 = load i64, ptr %a29 %t59 = sub i64 %t58, 1 store i64 %t59, ptr %a60 - br label %while.cond10848 -while.cond10848: + br label %while.cond10876 +while.cond10876: %t61 = load i64, ptr %a60 %t62 = icmp sgt i64 %t61, 0 - br label %logic.from10851 -logic.from10851: - br i1 %t62, label %logic.rhs10852, label %logic.end10853 -logic.rhs10852: + br label %logic.from10879 +logic.from10879: + br i1 %t62, label %logic.rhs10880, label %logic.end10881 +logic.rhs10880: %t63 = load i64, ptr %a60 %t64 = sub i64 %t63, 1 %t65 = load { ptr, i64, i64 }, ptr %a26 %t66 = extractvalue { ptr, i64, i64 } %t65, 1 %t67 = icmp uge i64 %t64, %t66 - br i1 %t67, label %range10854, label %inrange10855 -range10854: - call void @finch_panic_index(ptr @.str.7108, i64 528, i64 %t64, i64 %t66) + br i1 %t67, label %range10882, label %inrange10883 +range10882: + call void @finch_panic_index(ptr @.str.7123, i64 528, i64 %t64, i64 %t66) unreachable -inrange10855: +inrange10883: %t68 = extractvalue { ptr, i64, i64 } %t65, 0 %t69 = getelementptr inbounds i8, ptr %t68, i64 %t64 %t70 = load i8, ptr %t69 %t71 = call i1 @finch.lsp.isWordChar(i8 %t70) - br label %logic.from10856 -logic.from10856: - br i1 %t71, label %logic.end10858, label %logic.rhs10857 -logic.rhs10857: + br label %logic.from10884 +logic.from10884: + br i1 %t71, label %logic.end10886, label %logic.rhs10885 +logic.rhs10885: %t72 = load i64, ptr %a60 %t73 = sub i64 %t72, 1 %t74 = load { ptr, i64, i64 }, ptr %a26 %t75 = extractvalue { ptr, i64, i64 } %t74, 1 %t76 = icmp uge i64 %t73, %t75 - br i1 %t76, label %range10859, label %inrange10860 -range10859: - call void @finch_panic_index(ptr @.str.7109, i64 528, i64 %t73, i64 %t75) + br i1 %t76, label %range10887, label %inrange10888 +range10887: + call void @finch_panic_index(ptr @.str.7124, i64 528, i64 %t73, i64 %t75) unreachable -inrange10860: +inrange10888: %t77 = extractvalue { ptr, i64, i64 } %t74, 0 %t78 = getelementptr inbounds i8, ptr %t77, i64 %t73 %t79 = load i8, ptr %t78 %t80 = icmp eq i8 %t79, 91 - br label %logic.rend10861 -logic.rend10861: - br label %logic.end10858 -logic.end10858: - %t81 = phi i1 [ true, %logic.from10856 ], [ %t80, %logic.rend10861 ] - br label %logic.from10862 -logic.from10862: - br i1 %t81, label %logic.end10864, label %logic.rhs10863 -logic.rhs10863: + br label %logic.rend10889 +logic.rend10889: + br label %logic.end10886 +logic.end10886: + %t81 = phi i1 [ true, %logic.from10884 ], [ %t80, %logic.rend10889 ] + br label %logic.from10890 +logic.from10890: + br i1 %t81, label %logic.end10892, label %logic.rhs10891 +logic.rhs10891: %t82 = load i64, ptr %a60 %t83 = sub i64 %t82, 1 %t84 = load { ptr, i64, i64 }, ptr %a26 %t85 = extractvalue { ptr, i64, i64 } %t84, 1 %t86 = icmp uge i64 %t83, %t85 - br i1 %t86, label %range10865, label %inrange10866 -range10865: - call void @finch_panic_index(ptr @.str.7110, i64 528, i64 %t83, i64 %t85) + br i1 %t86, label %range10893, label %inrange10894 +range10893: + call void @finch_panic_index(ptr @.str.7125, i64 528, i64 %t83, i64 %t85) unreachable -inrange10866: +inrange10894: %t87 = extractvalue { ptr, i64, i64 } %t84, 0 %t88 = getelementptr inbounds i8, ptr %t87, i64 %t83 %t89 = load i8, ptr %t88 %t90 = icmp eq i8 %t89, 93 - br label %logic.rend10867 -logic.rend10867: - br label %logic.end10864 -logic.end10864: - %t91 = phi i1 [ true, %logic.from10862 ], [ %t90, %logic.rend10867 ] - br label %logic.rend10868 -logic.rend10868: - br label %logic.end10853 -logic.end10853: - %t92 = phi i1 [ false, %logic.from10851 ], [ %t91, %logic.rend10868 ] - br i1 %t92, label %while.body10849, label %while.end10850 -while.body10849: + br label %logic.rend10895 +logic.rend10895: + br label %logic.end10892 +logic.end10892: + %t91 = phi i1 [ true, %logic.from10890 ], [ %t90, %logic.rend10895 ] + br label %logic.rend10896 +logic.rend10896: + br label %logic.end10881 +logic.end10881: + %t92 = phi i1 [ false, %logic.from10879 ], [ %t91, %logic.rend10896 ] + br i1 %t92, label %while.body10877, label %while.end10878 +while.body10877: %t93 = load i64, ptr %a60 %t94 = sub i64 %t93, 1 store i64 %t94, ptr %a60 - br label %while.cond10848 -while.end10850: + br label %while.cond10876 +while.end10878: %t95 = load { ptr, i64, i64 }, ptr %a26 store { ptr, i64, i64 } %t95, ptr %a96 %t98 = load i64, ptr %a60 %t99 = load i64, ptr %a29 %t100 = sub i64 %t99, 1 - call void @finch_str_sub(ptr %a97, ptr %a96, i64 %t98, i64 %t100, ptr @.str.7111, i64 531) + call void @finch_str_sub(ptr %a97, ptr %a96, i64 %t98, i64 %t100, ptr @.str.7126, i64 531) %t101 = load { ptr, i64, i64 }, ptr %a97 store { ptr, i64, i64 } %t101, ptr %a102 store i1 false, ptr %a103 %t104 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t104, ptr %a105 - store { ptr, i64, i64 } { ptr @.str.7113, i64 1, i64 0 }, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.7128, i64 1, i64 0 }, ptr %a107 %t108 = call i64 @finch_str_find(ptr %a105, ptr %a107) store i64 %t108, ptr %a109 %t110 = load i64, ptr %a109 %t111 = icmp sge i64 %t110, 0 - br i1 %t111, label %then10869, label %endif10871 -then10869: + br i1 %t111, label %then10897, label %endif10899 +then10897: %t112 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t112, ptr %a113 %t115 = load i64, ptr %a109 - call void @finch_str_sub(ptr %a114, ptr %a113, i64 0, i64 %t115, ptr @.str.7114, i64 535) + call void @finch_str_sub(ptr %a114, ptr %a113, i64 0, i64 %t115, ptr @.str.7129, i64 535) %t116 = load { ptr, i64, i64 }, ptr %a114 %t117 = load { ptr, i64, i64 }, ptr %a102 store { ptr, i64, i64 } %t116, ptr %a102 store { ptr, i64, i64 } %t117, ptr %a118 call void @finch_str_drop(ptr %a118) store i1 true, ptr %a103 - br label %endif10871 -endif10871: + br label %endif10899 +endif10899: %t119 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %a102 @@ -110785,41 +110960,41 @@ endif10871: %t123 = load i64, ptr %t120 %t124 = load ptr, ptr %t119 store i64 0, ptr %a125 - br label %find.cond10872 -find.cond10872: + br label %find.cond10900 +find.cond10900: %t126 = load i64, ptr %a125 %t127 = icmp slt i64 %t126, %t123 - br i1 %t127, label %find.body10873, label %find.end10876 -find.body10873: + br i1 %t127, label %find.body10901, label %find.end10904 +find.body10901: %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 %t126 %t129 = load { ptr, i64, i64 }, ptr %t128 store { ptr, i64, i64 } %t129, ptr %a130 store { ptr, i64, i64 } %t121, ptr %a131 %t132 = call i32 @finch_str_eq(ptr %a130, ptr %a131) %t133 = icmp ne i32 %t132, 0 - br i1 %t133, label %find.hit10874, label %find.next10875 -find.hit10874: + br i1 %t133, label %find.hit10902, label %find.next10903 +find.hit10902: store i64 %t126, ptr %a122 - br label %find.end10876 -find.next10875: + br label %find.end10904 +find.next10903: %t134 = add i64 %t126, 1 store i64 %t134, ptr %a125 - br label %find.cond10872 -find.end10876: + br label %find.cond10900 +find.end10904: %t135 = load i64, ptr %a122 %t136 = icmp sge i64 %t135, 0 - br i1 %t136, label %then10877, label %endif10879 -then10877: + br i1 %t136, label %then10905, label %endif10907 +then10905: %t137 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a138 - br label %each.cond10880 -each.cond10880: + br label %each.cond10908 +each.cond10908: %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 %t140 = load i64, ptr %t139 %t141 = load i64, ptr %a138 %t142 = icmp slt i64 %t141, %t140 - br i1 %t142, label %each.body10881, label %each.end10883 -each.body10881: + br i1 %t142, label %each.body10909, label %each.end10911 +each.body10909: %t143 = load ptr, ptr %t137 %t144 = getelementptr inbounds %S.lsp.FnRec, ptr %t143, i64 %t141 %t145 = load %S.lsp.FnRec, ptr %t144 @@ -110831,48 +111006,48 @@ each.body10881: store { ptr, i64, i64 } %t149, ptr %a151 %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) %t153 = icmp ne i32 %t152, 0 - br label %logic.from10884 -logic.from10884: - br i1 %t153, label %logic.rhs10885, label %logic.end10886 -logic.rhs10885: + br label %logic.from10912 +logic.from10912: + br i1 %t153, label %logic.rhs10913, label %logic.end10914 +logic.rhs10913: %t154 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 2 %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 %t156 = load i64, ptr %t155 %t157 = icmp eq i64 %t156, 0 - br label %logic.rend10887 -logic.rend10887: - br label %logic.end10886 -logic.end10886: - %t158 = phi i1 [ false, %logic.from10884 ], [ %t157, %logic.rend10887 ] - br i1 %t158, label %then10888, label %endif10890 -then10888: + br label %logic.rend10915 +logic.rend10915: + br label %logic.end10914 +logic.end10914: + %t158 = phi i1 [ false, %logic.from10912 ], [ %t157, %logic.rend10915 ] + br i1 %t158, label %then10916, label %endif10918 +then10916: %t159 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 1 %t160 = load { ptr, i64, i64 }, ptr %t159 %t161 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 7 %t162 = load { ptr, i64, i64 }, ptr %t161 - %t163 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t160, i64 3, { ptr, i64, i64 } %t162, { ptr, i64, i64 } { ptr @.str.7115, i64 0, i64 0 }) + %t163 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t160, i64 3, { ptr, i64, i64 } %t162, { ptr, i64, i64 } { ptr @.str.7130, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t163) store %S.json.Json %t163, ptr %a164 call void @finch.drop.S_json_Json(ptr %a164) - br label %endif10890 -endif10890: - br label %each.step10882 -each.step10882: + br label %endif10918 +endif10918: + br label %each.step10910 +each.step10910: %t165 = load i64, ptr %a138 %t166 = add i64 %t165, 1 store i64 %t166, ptr %a138 - br label %each.cond10880 -each.end10883: + br label %each.cond10908 +each.end10911: %t167 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a168 - br label %each.cond10891 -each.cond10891: + br label %each.cond10919 +each.cond10919: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 %t170 = load i64, ptr %t169 %t171 = load i64, ptr %a168 %t172 = icmp slt i64 %t171, %t170 - br i1 %t172, label %each.body10892, label %each.end10894 -each.body10892: + br i1 %t172, label %each.body10920, label %each.end10922 +each.body10920: %t173 = load ptr, ptr %t167 %t174 = getelementptr inbounds %S.lsp.StructRec, ptr %t173, i64 %t171 %t175 = load %S.lsp.StructRec, ptr %t174 @@ -110884,41 +111059,41 @@ each.body10892: store { ptr, i64, i64 } %t179, ptr %a181 %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) %t183 = icmp ne i32 %t182, 0 - br i1 %t183, label %then10895, label %endif10897 -then10895: + br i1 %t183, label %then10923, label %endif10925 +then10923: %t184 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 %t185 = load { ptr, i64, i64 }, ptr %t184 %t186 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 %t187 = load { ptr, i64, i64 }, ptr %t186 - store { ptr, i64, i64 } { ptr @.str.7116, i64 7, i64 0 }, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.7131, i64 7, i64 0 }, ptr %a189 store { ptr, i64, i64 } %t187, ptr %a190 call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) %t191 = load { ptr, i64, i64 }, ptr %a188 - %t192 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t185, i64 22, { ptr, i64, i64 } %t191, { ptr, i64, i64 } { ptr @.str.7117, i64 0, i64 0 }) + %t192 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t185, i64 22, { ptr, i64, i64 } %t191, { ptr, i64, i64 } { ptr @.str.7132, i64 0, i64 0 }) store { ptr, i64, i64 } %t191, ptr %a193 call void @finch_str_drop(ptr %a193) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t192) store %S.json.Json %t192, ptr %a194 call void @finch.drop.S_json_Json(ptr %a194) - br label %endif10897 -endif10897: - br label %each.step10893 -each.step10893: + br label %endif10925 +endif10925: + br label %each.step10921 +each.step10921: %t195 = load i64, ptr %a168 %t196 = add i64 %t195, 1 store i64 %t196, ptr %a168 - br label %each.cond10891 -each.end10894: + br label %each.cond10919 +each.end10922: %t197 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a198 - br label %each.cond10898 -each.cond10898: + br label %each.cond10926 +each.cond10926: %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 %t200 = load i64, ptr %t199 %t201 = load i64, ptr %a198 %t202 = icmp slt i64 %t201, %t200 - br i1 %t202, label %each.body10899, label %each.end10901 -each.body10899: + br i1 %t202, label %each.body10927, label %each.end10929 +each.body10927: %t203 = load ptr, ptr %t197 %t204 = getelementptr inbounds %S.lsp.EnumRec, ptr %t203, i64 %t201 %t205 = load %S.lsp.EnumRec, ptr %t204 @@ -110930,31 +111105,31 @@ each.body10899: store { ptr, i64, i64 } %t209, ptr %a211 %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) %t213 = icmp ne i32 %t212, 0 - br i1 %t213, label %then10902, label %endif10904 -then10902: + br i1 %t213, label %then10930, label %endif10932 +then10930: %t214 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 %t215 = load { ptr, i64, i64 }, ptr %t214 %t216 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 %t217 = load { ptr, i64, i64 }, ptr %t216 - store { ptr, i64, i64 } { ptr @.str.7118, i64 5, i64 0 }, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.7133, i64 5, i64 0 }, ptr %a219 store { ptr, i64, i64 } %t217, ptr %a220 call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) %t221 = load { ptr, i64, i64 }, ptr %a218 - %t222 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t215, i64 13, { ptr, i64, i64 } %t221, { ptr, i64, i64 } { ptr @.str.7119, i64 0, i64 0 }) + %t222 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t215, i64 13, { ptr, i64, i64 } %t221, { ptr, i64, i64 } { ptr @.str.7134, i64 0, i64 0 }) store { ptr, i64, i64 } %t221, ptr %a223 call void @finch_str_drop(ptr %a223) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t222) store %S.json.Json %t222, ptr %a224 call void @finch.drop.S_json_Json(ptr %a224) - br label %endif10904 -endif10904: - br label %each.step10900 -each.step10900: + br label %endif10932 +endif10932: + br label %each.step10928 +each.step10928: %t225 = load i64, ptr %a198 %t226 = add i64 %t225, 1 store i64 %t226, ptr %a198 - br label %each.cond10898 -each.end10901: + br label %each.cond10926 +each.end10929: %t227 = load %S.json.Json, ptr %a7 %t228 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t227) call void @finch_str_drop(ptr %a102) @@ -110962,17 +111137,17 @@ each.end10901: call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t228 -endif10879: +endif10907: %t229 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a230 - br label %each.cond10905 -each.cond10905: + br label %each.cond10933 +each.cond10933: %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 %t232 = load i64, ptr %t231 %t233 = load i64, ptr %a230 %t234 = icmp slt i64 %t233, %t232 - br i1 %t234, label %each.body10906, label %each.end10908 -each.body10906: + br i1 %t234, label %each.body10934, label %each.end10936 +each.body10934: %t235 = load ptr, ptr %t229 %t236 = getelementptr inbounds %S.lsp.EnumRec, ptr %t235, i64 %t233 %t237 = load %S.lsp.EnumRec, ptr %t236 @@ -110984,10 +111159,10 @@ each.body10906: store { ptr, i64, i64 } %t241, ptr %a243 %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) %t245 = icmp ne i32 %t244, 0 - br label %logic.from10909 -logic.from10909: - br i1 %t245, label %logic.rhs10910, label %logic.end10911 -logic.rhs10910: + br label %logic.from10937 +logic.from10937: + br i1 %t245, label %logic.rhs10938, label %logic.end10939 +logic.rhs10938: %t246 = load %S.lsp.Analysis, ptr %a1 %t247 = load { ptr, i64, i64 }, ptr %a3 %t248 = load { ptr, i64, i64 }, ptr %a102 @@ -111003,23 +111178,23 @@ logic.rhs10910: store { ptr, i64, i64 } %t254, ptr %a257 call void @finch_str_drop(ptr %a257) %t258 = icmp eq i64 %t256, 0 - br label %logic.rend10912 -logic.rend10912: - br label %logic.end10911 -logic.end10911: - %t259 = phi i1 [ false, %logic.from10909 ], [ %t258, %logic.rend10912 ] - br i1 %t259, label %then10913, label %endif10915 -then10913: + br label %logic.rend10940 +logic.rend10940: + br label %logic.end10939 +logic.end10939: + %t259 = phi i1 [ false, %logic.from10937 ], [ %t258, %logic.rend10940 ] + br i1 %t259, label %then10941, label %endif10943 +then10941: %t260 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 5 store i64 0, ptr %a261 - br label %each.cond10916 -each.cond10916: + br label %each.cond10944 +each.cond10944: %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 %t263 = load i64, ptr %t262 %t264 = load i64, ptr %a261 %t265 = icmp slt i64 %t264, %t263 - br i1 %t265, label %each.body10917, label %each.end10919 -each.body10917: + br i1 %t265, label %each.body10945, label %each.end10947 +each.body10945: %t266 = load ptr, ptr %t260 %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t266, i64 %t264 %t268 = load { ptr, i64, i64 }, ptr %t267 @@ -111028,7 +111203,7 @@ each.body10917: %t271 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 %t272 = load { ptr, i64, i64 }, ptr %t271 store { ptr, i64, i64 } %t272, ptr %a274 - store { ptr, i64, i64 } { ptr @.str.7120, i64 1, i64 0 }, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.7135, i64 1, i64 0 }, ptr %a275 call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) %t276 = load { ptr, i64, i64 }, ptr %a273 %t277 = load { ptr, i64, i64 }, ptr %a269 @@ -111038,19 +111213,19 @@ each.body10917: store { ptr, i64, i64 } %t276, ptr %a281 call void @finch_str_drop(ptr %a281) %t282 = load { ptr, i64, i64 }, ptr %a278 - %t283 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t270, i64 20, { ptr, i64, i64 } %t282, { ptr, i64, i64 } { ptr @.str.7121, i64 0, i64 0 }) + %t283 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t270, i64 20, { ptr, i64, i64 } %t282, { ptr, i64, i64 } { ptr @.str.7136, i64 0, i64 0 }) store { ptr, i64, i64 } %t282, ptr %a284 call void @finch_str_drop(ptr %a284) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t283) store %S.json.Json %t283, ptr %a285 call void @finch.drop.S_json_Json(ptr %a285) - br label %each.step10918 -each.step10918: + br label %each.step10946 +each.step10946: %t286 = load i64, ptr %a261 %t287 = add i64 %t286, 1 store i64 %t287, ptr %a261 - br label %each.cond10916 -each.end10919: + br label %each.cond10944 +each.end10947: %t288 = load %S.json.Json, ptr %a7 %t289 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t288) call void @finch_str_drop(ptr %a102) @@ -111058,14 +111233,14 @@ each.end10919: call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t289 -endif10915: - br label %each.step10907 -each.step10907: +endif10943: + br label %each.step10935 +each.step10935: %t290 = load i64, ptr %a230 %t291 = add i64 %t290, 1 store i64 %t291, ptr %a230 - br label %each.cond10905 -each.end10908: + br label %each.cond10933 +each.end10936: %t292 = load %S.lsp.Analysis, ptr %a1 %t293 = load { ptr, i64, i64 }, ptr %a3 %t294 = load { ptr, i64, i64 }, ptr %a102 @@ -111079,132 +111254,132 @@ each.end10908: call void @finch.drop.S_lsp_VarRec(ptr %a301) store { ptr, i64, i64 } %t300, ptr %a302 %t303 = load i1, ptr %a103 - br label %logic.from10920 -logic.from10920: - br i1 %t303, label %logic.rhs10921, label %logic.end10922 -logic.rhs10921: + br label %logic.from10948 +logic.from10948: + br i1 %t303, label %logic.rhs10949, label %logic.end10950 +logic.rhs10949: %t304 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t304, ptr %a305 - store { ptr, i64, i64 } { ptr @.str.7123, i64 2, i64 0 }, ptr %a307 + store { ptr, i64, i64 } { ptr @.str.7138, i64 2, i64 0 }, ptr %a307 %t308 = call i32 @finch_str_starts(ptr %a305, ptr %a307) %t309 = icmp ne i32 %t308, 0 - br label %logic.rend10923 -logic.rend10923: - br label %logic.end10922 -logic.end10922: - %t310 = phi i1 [ false, %logic.from10920 ], [ %t309, %logic.rend10923 ] - br i1 %t310, label %then10924, label %else10925 -then10924: + br label %logic.rend10951 +logic.rend10951: + br label %logic.end10950 +logic.end10950: + %t310 = phi i1 [ false, %logic.from10948 ], [ %t309, %logic.rend10951 ] + br i1 %t310, label %then10952, label %else10953 +then10952: %t311 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t311, ptr %a312 %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 %t315 = load i64, ptr %t314 - call void @finch_str_sub(ptr %a313, ptr %a312, i64 2, i64 %t315, ptr @.str.7124, i64 569) + call void @finch_str_sub(ptr %a313, ptr %a312, i64 2, i64 %t315, ptr @.str.7139, i64 569) %t316 = load { ptr, i64, i64 }, ptr %a313 %t317 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t316, ptr %a302 store { ptr, i64, i64 } %t317, ptr %a318 call void @finch_str_drop(ptr %a318) - br label %endif10926 -else10925: + br label %endif10954 +else10953: %t319 = load i1, ptr %a103 - br label %logic.from10927 -logic.from10927: - br i1 %t319, label %logic.rhs10928, label %logic.end10929 -logic.rhs10928: + br label %logic.from10955 +logic.from10955: + br i1 %t319, label %logic.rhs10956, label %logic.end10957 +logic.rhs10956: %t320 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t320, ptr %a321 - store { ptr, i64, i64 } { ptr @.str.7125, i64 3, i64 0 }, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.7140, i64 3, i64 0 }, ptr %a322 %t323 = call i32 @finch_str_eq(ptr %a321, ptr %a322) %t324 = icmp ne i32 %t323, 0 - br label %logic.rend10930 -logic.rend10930: - br label %logic.end10929 -logic.end10929: - %t325 = phi i1 [ false, %logic.from10927 ], [ %t324, %logic.rend10930 ] - br i1 %t325, label %then10931, label %endif10933 -then10931: + br label %logic.rend10958 +logic.rend10958: + br label %logic.end10957 +logic.end10957: + %t325 = phi i1 [ false, %logic.from10955 ], [ %t324, %logic.rend10958 ] + br i1 %t325, label %then10959, label %endif10961 +then10959: %t326 = load { ptr, i64, i64 }, ptr %a302 - store { ptr, i64, i64 } { ptr @.str.7126, i64 4, i64 0 }, ptr %a302 + store { ptr, i64, i64 } { ptr @.str.7141, i64 4, i64 0 }, ptr %a302 store { ptr, i64, i64 } %t326, ptr %a327 call void @finch_str_drop(ptr %a327) - br label %endif10933 -endif10933: - br label %endif10926 -endif10926: + br label %endif10961 +endif10961: + br label %endif10954 +endif10954: %t328 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t328, ptr %a329 - store { ptr, i64, i64 } { ptr @.str.7128, i64 4, i64 0 }, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.7143, i64 4, i64 0 }, ptr %a331 %t332 = call i32 @finch_str_starts(ptr %a329, ptr %a331) %t333 = icmp ne i32 %t332, 0 - br label %logic.from10934 -logic.from10934: - br i1 %t333, label %logic.rhs10935, label %logic.end10936 -logic.rhs10935: + br label %logic.from10962 +logic.from10962: + br i1 %t333, label %logic.rhs10963, label %logic.end10964 +logic.rhs10963: %t334 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t334, ptr %a335 - store { ptr, i64, i64 } { ptr @.str.7130, i64 1, i64 0 }, ptr %a337 + store { ptr, i64, i64 } { ptr @.str.7145, i64 1, i64 0 }, ptr %a337 %t338 = call i32 @finch_str_ends(ptr %a335, ptr %a337) %t339 = icmp ne i32 %t338, 0 - br label %logic.rend10937 -logic.rend10937: - br label %logic.end10936 -logic.end10936: - %t340 = phi i1 [ false, %logic.from10934 ], [ %t339, %logic.rend10937 ] - br i1 %t340, label %then10938, label %endif10940 -then10938: + br label %logic.rend10965 +logic.rend10965: + br label %logic.end10964 +logic.end10964: + %t340 = phi i1 [ false, %logic.from10962 ], [ %t339, %logic.rend10965 ] + br i1 %t340, label %then10966, label %endif10968 +then10966: %t341 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t341, ptr %a342 %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 %t345 = load i64, ptr %t344 %t346 = sub i64 %t345, 1 - call void @finch_str_sub(ptr %a343, ptr %a342, i64 4, i64 %t346, ptr @.str.7131, i64 574) + call void @finch_str_sub(ptr %a343, ptr %a342, i64 4, i64 %t346, ptr @.str.7146, i64 574) %t347 = load { ptr, i64, i64 }, ptr %a343 %t348 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t347, ptr %a302 store { ptr, i64, i64 } %t348, ptr %a349 call void @finch_str_drop(ptr %a349) - br label %endif10940 -endif10940: + br label %endif10968 +endif10968: %t350 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t350, ptr %a351 - store { ptr, i64, i64 } { ptr @.str.7133, i64 2, i64 0 }, ptr %a353 + store { ptr, i64, i64 } { ptr @.str.7148, i64 2, i64 0 }, ptr %a353 %t354 = call i32 @finch_str_starts(ptr %a351, ptr %a353) %t355 = icmp ne i32 %t354, 0 - br i1 %t355, label %then10941, label %else10942 -then10941: + br i1 %t355, label %then10969, label %else10970 +then10969: %t356 = call { ptr, i64, i64 } @finch.docs.arrayMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t356) store { ptr, i64, i64 } %t356, ptr %a357 call void @finch.drop.arr_S_docs_Doc(ptr %a357) - br label %endif10943 -else10942: + br label %endif10971 +else10970: %t358 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t358, ptr %a359 - store { ptr, i64, i64 } { ptr @.str.7134, i64 3, i64 0 }, ptr %a360 + store { ptr, i64, i64 } { ptr @.str.7149, i64 3, i64 0 }, ptr %a360 %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) %t362 = icmp ne i32 %t361, 0 - br i1 %t362, label %then10944, label %else10945 -then10944: + br i1 %t362, label %then10972, label %else10973 +then10972: %t363 = call { ptr, i64, i64 } @finch.docs.strMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t363) store { ptr, i64, i64 } %t363, ptr %a364 call void @finch.drop.arr_S_docs_Doc(ptr %a364) - br label %endif10946 -else10945: + br label %endif10974 +else10973: %t365 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t365, ptr %a366 - store { ptr, i64, i64 } { ptr @.str.7136, i64 4, i64 0 }, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.7151, i64 4, i64 0 }, ptr %a368 %t369 = call i32 @finch_str_starts(ptr %a366, ptr %a368) %t370 = icmp ne i32 %t369, 0 - br i1 %t370, label %then10947, label %else10948 -then10947: + br i1 %t370, label %then10975, label %else10976 +then10975: %t371 = call { ptr, i64, i64 } @finch.docs.mapMethods() call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t371) store { ptr, i64, i64 } %t371, ptr %a372 call void @finch.drop.arr_S_docs_Doc(ptr %a372) - br label %endif10949 -else10948: + br label %endif10977 +else10976: %t373 = load { ptr, i64, i64 }, ptr %a302 store { ptr, i64, i64 } %t373, ptr %a374 call void @finch_str_copy(ptr %a375, ptr %a374) @@ -111212,14 +111387,14 @@ else10948: store { ptr, i64, i64 } %t376, ptr %a377 %t378 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a379 - br label %each.cond10950 -each.cond10950: + br label %each.cond10978 +each.cond10978: %t380 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 %t381 = load i64, ptr %t380 %t382 = load i64, ptr %a379 %t383 = icmp slt i64 %t382, %t381 - br i1 %t383, label %each.body10951, label %each.end10953 -each.body10951: + br i1 %t383, label %each.body10979, label %each.end10981 +each.body10979: %t384 = load ptr, ptr %t378 %t385 = getelementptr inbounds %S.lsp.StructRec, ptr %t384, i64 %t382 %t386 = load %S.lsp.StructRec, ptr %t385 @@ -111231,28 +111406,28 @@ each.body10951: store { ptr, i64, i64 } %t390, ptr %a392 %t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392) %t394 = icmp ne i32 %t393, 0 - br i1 %t394, label %then10954, label %endif10956 -then10954: + br i1 %t394, label %then10982, label %endif10984 +then10982: %t395 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 %t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %t395, i32 0, i32 1 %t397 = load i64, ptr %t396 store i64 0, ptr %a398 - br label %for.cond10957 -for.cond10957: + br label %for.cond10985 +for.cond10985: %t399 = load i64, ptr %a398 %t400 = icmp slt i64 %t399, %t397 - br i1 %t400, label %for.body10958, label %for.end10960 -for.body10958: + br i1 %t400, label %for.body10986, label %for.end10988 +for.body10986: %t401 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 %t402 = load i64, ptr %a398 %t403 = load { ptr, i64, i64 }, ptr %t401 %t404 = extractvalue { ptr, i64, i64 } %t403, 1 %t405 = icmp uge i64 %t402, %t404 - br i1 %t405, label %range10961, label %inrange10962 -range10961: - call void @finch_panic_index(ptr @.str.7137, i64 587, i64 %t402, i64 %t404) + br i1 %t405, label %range10989, label %inrange10990 +range10989: + call void @finch_panic_index(ptr @.str.7152, i64 587, i64 %t402, i64 %t404) unreachable -inrange10962: +inrange10990: %t406 = extractvalue { ptr, i64, i64 } %t403, 0 %t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i64 %t402 %t408 = load { ptr, i64, i64 }, ptr %t407 @@ -111261,44 +111436,44 @@ inrange10962: %t411 = load { ptr, i64, i64 }, ptr %t409 %t412 = extractvalue { ptr, i64, i64 } %t411, 1 %t413 = icmp uge i64 %t410, %t412 - br i1 %t413, label %range10963, label %inrange10964 -range10963: - call void @finch_panic_index(ptr @.str.7138, i64 587, i64 %t410, i64 %t412) + br i1 %t413, label %range10991, label %inrange10992 +range10991: + call void @finch_panic_index(ptr @.str.7153, i64 587, i64 %t410, i64 %t412) unreachable -inrange10964: +inrange10992: %t414 = extractvalue { ptr, i64, i64 } %t411, 0 %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t410 %t416 = load { ptr, i64, i64 }, ptr %t415 - %t417 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t408, i64 5, { ptr, i64, i64 } %t416, { ptr, i64, i64 } { ptr @.str.7139, i64 0, i64 0 }) + %t417 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t408, i64 5, { ptr, i64, i64 } %t416, { ptr, i64, i64 } { ptr @.str.7154, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t417) store %S.json.Json %t417, ptr %a418 call void @finch.drop.S_json_Json(ptr %a418) - br label %for.step10959 -for.step10959: + br label %for.step10987 +for.step10987: %t419 = load i64, ptr %a398 %t420 = add i64 %t419, 1 store i64 %t420, ptr %a398 - br label %for.cond10957 -for.end10960: - br label %endif10956 -endif10956: - br label %each.step10952 -each.step10952: + br label %for.cond10985 +for.end10988: + br label %endif10984 +endif10984: + br label %each.step10980 +each.step10980: %t421 = load i64, ptr %a379 %t422 = add i64 %t421, 1 store i64 %t422, ptr %a379 - br label %each.cond10950 -each.end10953: + br label %each.cond10978 +each.end10981: %t423 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a424 - br label %each.cond10965 -each.cond10965: + br label %each.cond10993 +each.cond10993: %t425 = getelementptr inbounds { ptr, i64, i64 }, ptr %t423, i32 0, i32 1 %t426 = load i64, ptr %t425 %t427 = load i64, ptr %a424 %t428 = icmp slt i64 %t427, %t426 - br i1 %t428, label %each.body10966, label %each.end10968 -each.body10966: + br i1 %t428, label %each.body10994, label %each.end10996 +each.body10994: %t429 = load ptr, ptr %t423 %t430 = getelementptr inbounds %S.lsp.FnRec, ptr %t429, i64 %t427 %t431 = load %S.lsp.FnRec, ptr %t430 @@ -111310,32 +111485,32 @@ each.body10966: store { ptr, i64, i64 } %t435, ptr %a437 %t438 = call i32 @finch_str_eq(ptr %a436, ptr %a437) %t439 = icmp ne i32 %t438, 0 - br i1 %t439, label %then10969, label %endif10971 -then10969: + br i1 %t439, label %then10997, label %endif10999 +then10997: %t440 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 1 %t441 = load { ptr, i64, i64 }, ptr %t440 %t442 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 7 %t443 = load { ptr, i64, i64 }, ptr %t442 - %t444 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t441, i64 2, { ptr, i64, i64 } %t443, { ptr, i64, i64 } { ptr @.str.7140, i64 0, i64 0 }) + %t444 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t441, i64 2, { ptr, i64, i64 } %t443, { ptr, i64, i64 } { ptr @.str.7155, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t444) store %S.json.Json %t444, ptr %a445 call void @finch.drop.S_json_Json(ptr %a445) - br label %endif10971 -endif10971: - br label %each.step10967 -each.step10967: + br label %endif10999 +endif10999: + br label %each.step10995 +each.step10995: %t446 = load i64, ptr %a424 %t447 = add i64 %t446, 1 store i64 %t447, ptr %a424 - br label %each.cond10965 -each.end10968: + br label %each.cond10993 +each.end10996: call void @finch_str_drop(ptr %a377) - br label %endif10949 -endif10949: - br label %endif10946 -endif10946: - br label %endif10943 -endif10943: + br label %endif10977 +endif10977: + br label %endif10974 +endif10974: + br label %endif10971 +endif10971: %t448 = load %S.json.Json, ptr %a7 %t449 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t448) call void @finch_str_drop(ptr %a302) @@ -111344,18 +111519,18 @@ endif10943: call void @finch_str_drop(ptr %a11) call void @finch.drop.S_json_Json(ptr %a7) ret %S.json.Json %t449 -endif10847: +endif10875: store %S.lsp.Names zeroinitializer, ptr %a450 %t451 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 store i64 0, ptr %a452 - br label %each.cond10972 -each.cond10972: + br label %each.cond11000 +each.cond11000: %t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %t451, i32 0, i32 1 %t454 = load i64, ptr %t453 %t455 = load i64, ptr %a452 %t456 = icmp slt i64 %t455, %t454 - br i1 %t456, label %each.body10973, label %each.end10975 -each.body10973: + br i1 %t456, label %each.body11001, label %each.end11003 +each.body11001: %t457 = load ptr, ptr %t451 %t458 = getelementptr inbounds %S.lsp.VarRec, ptr %t457, i64 %t455 %t459 = load %S.lsp.VarRec, ptr %t458 @@ -111364,24 +111539,24 @@ each.body10973: %t462 = load i64, ptr %t461 %t463 = load i64, ptr %a4 %t464 = icmp sle i64 %t462, %t463 - br label %logic.from10976 -logic.from10976: - br i1 %t464, label %logic.rhs10977, label %logic.end10978 -logic.rhs10977: + br label %logic.from11004 +logic.from11004: + br i1 %t464, label %logic.rhs11005, label %logic.end11006 +logic.rhs11005: %t465 = load i64, ptr %a4 %t466 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 7 %t467 = load i64, ptr %t466 %t468 = add i64 %t467, 1 %t469 = icmp sle i64 %t465, %t468 - br label %logic.rend10979 -logic.rend10979: - br label %logic.end10978 -logic.end10978: - %t470 = phi i1 [ false, %logic.from10976 ], [ %t469, %logic.rend10979 ] - br label %logic.from10980 -logic.from10980: - br i1 %t470, label %logic.rhs10981, label %logic.end10982 -logic.rhs10981: + br label %logic.rend11007 +logic.rend11007: + br label %logic.end11006 +logic.end11006: + %t470 = phi i1 [ false, %logic.from11004 ], [ %t469, %logic.rend11007 ] + br label %logic.from11008 +logic.from11008: + br i1 %t470, label %logic.rhs11009, label %logic.end11010 +logic.rhs11009: %t471 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 5 %t472 = load { ptr, i64, i64 }, ptr %t471 %t473 = load { ptr, i64, i64 }, ptr %a3 @@ -111389,52 +111564,52 @@ logic.rhs10981: store { ptr, i64, i64 } %t473, ptr %a475 %t476 = call i32 @finch_str_eq(ptr %a474, ptr %a475) %t477 = icmp ne i32 %t476, 0 - br label %logic.rend10983 -logic.rend10983: - br label %logic.end10982 -logic.end10982: - %t478 = phi i1 [ false, %logic.from10980 ], [ %t477, %logic.rend10983 ] - br label %logic.from10984 -logic.from10984: - br i1 %t478, label %logic.rhs10985, label %logic.end10986 -logic.rhs10985: + br label %logic.rend11011 +logic.rend11011: + br label %logic.end11010 +logic.end11010: + %t478 = phi i1 [ false, %logic.from11008 ], [ %t477, %logic.rend11011 ] + br label %logic.from11012 +logic.from11012: + br i1 %t478, label %logic.rhs11013, label %logic.end11014 +logic.rhs11013: %t479 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 %t480 = load { ptr, i64, i64 }, ptr %t479 %t481 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t480) - br label %logic.rend10987 -logic.rend10987: - br label %logic.end10986 -logic.end10986: - %t482 = phi i1 [ false, %logic.from10984 ], [ %t481, %logic.rend10987 ] - br i1 %t482, label %then10988, label %endif10990 -then10988: + br label %logic.rend11015 +logic.rend11015: + br label %logic.end11014 +logic.end11014: + %t482 = phi i1 [ false, %logic.from11012 ], [ %t481, %logic.rend11015 ] + br i1 %t482, label %then11016, label %endif11018 +then11016: %t483 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 %t484 = load { ptr, i64, i64 }, ptr %t483 %t485 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 1 %t486 = load { ptr, i64, i64 }, ptr %t485 - %t487 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t484, i64 6, { ptr, i64, i64 } %t486, { ptr, i64, i64 } { ptr @.str.7141, i64 0, i64 0 }) + %t487 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t484, i64 6, { ptr, i64, i64 } %t486, { ptr, i64, i64 } { ptr @.str.7156, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t487) store %S.json.Json %t487, ptr %a488 call void @finch.drop.S_json_Json(ptr %a488) - br label %endif10990 -endif10990: - br label %each.step10974 -each.step10974: + br label %endif11018 +endif11018: + br label %each.step11002 +each.step11002: %t489 = load i64, ptr %a452 %t490 = add i64 %t489, 1 store i64 %t490, ptr %a452 - br label %each.cond10972 -each.end10975: + br label %each.cond11000 +each.end11003: %t491 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a492 - br label %each.cond10991 -each.cond10991: + br label %each.cond11019 +each.cond11019: %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i32 0, i32 1 %t494 = load i64, ptr %t493 %t495 = load i64, ptr %a492 %t496 = icmp slt i64 %t495, %t494 - br i1 %t496, label %each.body10992, label %each.end10994 -each.body10992: + br i1 %t496, label %each.body11020, label %each.end11022 +each.body11020: %t497 = load ptr, ptr %t491 %t498 = getelementptr inbounds %S.lsp.FnRec, ptr %t497, i64 %t495 %t499 = load %S.lsp.FnRec, ptr %t498 @@ -111443,62 +111618,62 @@ each.body10992: %t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t501, i32 0, i32 1 %t503 = load i64, ptr %t502 %t504 = icmp eq i64 %t503, 0 - br label %logic.from10995 -logic.from10995: - br i1 %t504, label %logic.rhs10996, label %logic.end10997 -logic.rhs10996: + br label %logic.from11023 +logic.from11023: + br i1 %t504, label %logic.rhs11024, label %logic.end11025 +logic.rhs11024: %t505 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 0 %t506 = load { ptr, i64, i64 }, ptr %t505 store { ptr, i64, i64 } %t506, ptr %a507 - store { ptr, i64, i64 } { ptr @.str.7142, i64 0, i64 0 }, ptr %a508 + store { ptr, i64, i64 } { ptr @.str.7157, i64 0, i64 0 }, ptr %a508 %t509 = call i32 @finch_str_eq(ptr %a507, ptr %a508) %t510 = icmp ne i32 %t509, 0 - br label %logic.rend10998 -logic.rend10998: - br label %logic.end10997 -logic.end10997: - %t511 = phi i1 [ false, %logic.from10995 ], [ %t510, %logic.rend10998 ] - br label %logic.from10999 -logic.from10999: - br i1 %t511, label %logic.rhs11000, label %logic.end11001 -logic.rhs11000: + br label %logic.rend11026 +logic.rend11026: + br label %logic.end11025 +logic.end11025: + %t511 = phi i1 [ false, %logic.from11023 ], [ %t510, %logic.rend11026 ] + br label %logic.from11027 +logic.from11027: + br i1 %t511, label %logic.rhs11028, label %logic.end11029 +logic.rhs11028: %t512 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 %t513 = load { ptr, i64, i64 }, ptr %t512 %t514 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t513) - br label %logic.rend11002 -logic.rend11002: - br label %logic.end11001 -logic.end11001: - %t515 = phi i1 [ false, %logic.from10999 ], [ %t514, %logic.rend11002 ] - br i1 %t515, label %then11003, label %endif11005 -then11003: + br label %logic.rend11030 +logic.rend11030: + br label %logic.end11029 +logic.end11029: + %t515 = phi i1 [ false, %logic.from11027 ], [ %t514, %logic.rend11030 ] + br i1 %t515, label %then11031, label %endif11033 +then11031: %t516 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 %t517 = load { ptr, i64, i64 }, ptr %t516 %t518 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 7 %t519 = load { ptr, i64, i64 }, ptr %t518 - %t520 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t517, i64 3, { ptr, i64, i64 } %t519, { ptr, i64, i64 } { ptr @.str.7143, i64 0, i64 0 }) + %t520 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t517, i64 3, { ptr, i64, i64 } %t519, { ptr, i64, i64 } { ptr @.str.7158, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t520) store %S.json.Json %t520, ptr %a521 call void @finch.drop.S_json_Json(ptr %a521) - br label %endif11005 -endif11005: - br label %each.step10993 -each.step10993: + br label %endif11033 +endif11033: + br label %each.step11021 +each.step11021: %t522 = load i64, ptr %a492 %t523 = add i64 %t522, 1 store i64 %t523, ptr %a492 - br label %each.cond10991 -each.end10994: + br label %each.cond11019 +each.end11022: %t524 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 store i64 0, ptr %a525 - br label %each.cond11006 -each.cond11006: + br label %each.cond11034 +each.cond11034: %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t524, i32 0, i32 1 %t527 = load i64, ptr %t526 %t528 = load i64, ptr %a525 %t529 = icmp slt i64 %t528, %t527 - br i1 %t529, label %each.body11007, label %each.end11009 -each.body11007: + br i1 %t529, label %each.body11035, label %each.end11037 +each.body11035: %t530 = load ptr, ptr %t524 %t531 = getelementptr inbounds %S.lsp.StructRec, ptr %t530, i64 %t528 %t532 = load %S.lsp.StructRec, ptr %t531 @@ -111506,56 +111681,56 @@ each.body11007: %t534 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 0 %t535 = load { ptr, i64, i64 }, ptr %t534 store { ptr, i64, i64 } %t535, ptr %a536 - store { ptr, i64, i64 } { ptr @.str.7144, i64 0, i64 0 }, ptr %a537 + store { ptr, i64, i64 } { ptr @.str.7159, i64 0, i64 0 }, ptr %a537 %t538 = call i32 @finch_str_eq(ptr %a536, ptr %a537) %t539 = icmp ne i32 %t538, 0 - br label %logic.from11010 -logic.from11010: - br i1 %t539, label %logic.rhs11011, label %logic.end11012 -logic.rhs11011: + br label %logic.from11038 +logic.from11038: + br i1 %t539, label %logic.rhs11039, label %logic.end11040 +logic.rhs11039: %t540 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 %t541 = load { ptr, i64, i64 }, ptr %t540 %t542 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t541) - br label %logic.rend11013 -logic.rend11013: - br label %logic.end11012 -logic.end11012: - %t543 = phi i1 [ false, %logic.from11010 ], [ %t542, %logic.rend11013 ] - br i1 %t543, label %then11014, label %endif11016 -then11014: + br label %logic.rend11041 +logic.rend11041: + br label %logic.end11040 +logic.end11040: + %t543 = phi i1 [ false, %logic.from11038 ], [ %t542, %logic.rend11041 ] + br i1 %t543, label %then11042, label %endif11044 +then11042: %t544 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 %t545 = load { ptr, i64, i64 }, ptr %t544 %t546 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 %t547 = load { ptr, i64, i64 }, ptr %t546 - store { ptr, i64, i64 } { ptr @.str.7145, i64 7, i64 0 }, ptr %a549 + store { ptr, i64, i64 } { ptr @.str.7160, i64 7, i64 0 }, ptr %a549 store { ptr, i64, i64 } %t547, ptr %a550 call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) %t551 = load { ptr, i64, i64 }, ptr %a548 - %t552 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t545, i64 22, { ptr, i64, i64 } %t551, { ptr, i64, i64 } { ptr @.str.7146, i64 0, i64 0 }) + %t552 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t545, i64 22, { ptr, i64, i64 } %t551, { ptr, i64, i64 } { ptr @.str.7161, i64 0, i64 0 }) store { ptr, i64, i64 } %t551, ptr %a553 call void @finch_str_drop(ptr %a553) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t552) store %S.json.Json %t552, ptr %a554 call void @finch.drop.S_json_Json(ptr %a554) - br label %endif11016 -endif11016: - br label %each.step11008 -each.step11008: + br label %endif11044 +endif11044: + br label %each.step11036 +each.step11036: %t555 = load i64, ptr %a525 %t556 = add i64 %t555, 1 store i64 %t556, ptr %a525 - br label %each.cond11006 -each.end11009: + br label %each.cond11034 +each.end11037: %t557 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 store i64 0, ptr %a558 - br label %each.cond11017 -each.cond11017: + br label %each.cond11045 +each.cond11045: %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i32 0, i32 1 %t560 = load i64, ptr %t559 %t561 = load i64, ptr %a558 %t562 = icmp slt i64 %t561, %t560 - br i1 %t562, label %each.body11018, label %each.end11020 -each.body11018: + br i1 %t562, label %each.body11046, label %each.end11048 +each.body11046: %t563 = load ptr, ptr %t557 %t564 = getelementptr inbounds %S.lsp.EnumRec, ptr %t563, i64 %t561 %t565 = load %S.lsp.EnumRec, ptr %t564 @@ -111563,89 +111738,89 @@ each.body11018: %t567 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 0 %t568 = load { ptr, i64, i64 }, ptr %t567 store { ptr, i64, i64 } %t568, ptr %a569 - store { ptr, i64, i64 } { ptr @.str.7147, i64 0, i64 0 }, ptr %a570 + store { ptr, i64, i64 } { ptr @.str.7162, i64 0, i64 0 }, ptr %a570 %t571 = call i32 @finch_str_eq(ptr %a569, ptr %a570) %t572 = icmp ne i32 %t571, 0 - br label %logic.from11021 -logic.from11021: - br i1 %t572, label %logic.rhs11022, label %logic.end11023 -logic.rhs11022: + br label %logic.from11049 +logic.from11049: + br i1 %t572, label %logic.rhs11050, label %logic.end11051 +logic.rhs11050: %t573 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 %t574 = load { ptr, i64, i64 }, ptr %t573 %t575 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t574) - br label %logic.rend11024 -logic.rend11024: - br label %logic.end11023 -logic.end11023: - %t576 = phi i1 [ false, %logic.from11021 ], [ %t575, %logic.rend11024 ] - br i1 %t576, label %then11025, label %endif11027 -then11025: + br label %logic.rend11052 +logic.rend11052: + br label %logic.end11051 +logic.end11051: + %t576 = phi i1 [ false, %logic.from11049 ], [ %t575, %logic.rend11052 ] + br i1 %t576, label %then11053, label %endif11055 +then11053: %t577 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 %t578 = load { ptr, i64, i64 }, ptr %t577 %t579 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 %t580 = load { ptr, i64, i64 }, ptr %t579 - store { ptr, i64, i64 } { ptr @.str.7148, i64 5, i64 0 }, ptr %a582 + store { ptr, i64, i64 } { ptr @.str.7163, i64 5, i64 0 }, ptr %a582 store { ptr, i64, i64 } %t580, ptr %a583 call void @finch_str_concat(ptr %a581, ptr %a582, ptr %a583) %t584 = load { ptr, i64, i64 }, ptr %a581 - %t585 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t578, i64 13, { ptr, i64, i64 } %t584, { ptr, i64, i64 } { ptr @.str.7149, i64 0, i64 0 }) + %t585 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t578, i64 13, { ptr, i64, i64 } %t584, { ptr, i64, i64 } { ptr @.str.7164, i64 0, i64 0 }) store { ptr, i64, i64 } %t584, ptr %a586 call void @finch_str_drop(ptr %a586) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t585) store %S.json.Json %t585, ptr %a587 call void @finch.drop.S_json_Json(ptr %a587) - br label %endif11027 -endif11027: - br label %each.step11019 -each.step11019: + br label %endif11055 +endif11055: + br label %each.step11047 +each.step11047: %t588 = load i64, ptr %a558 %t589 = add i64 %t588, 1 store i64 %t589, ptr %a558 - br label %each.cond11017 -each.end11020: + br label %each.cond11045 +each.end11048: %t590 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 store i64 0, ptr %a591 - br label %each.cond11028 -each.cond11028: + br label %each.cond11056 +each.cond11056: %t592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t590, i32 0, i32 1 %t593 = load i64, ptr %t592 %t594 = load i64, ptr %a591 %t595 = icmp slt i64 %t594, %t593 - br i1 %t595, label %each.body11029, label %each.end11031 -each.body11029: + br i1 %t595, label %each.body11057, label %each.end11059 +each.body11057: %t596 = load ptr, ptr %t590 %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 %t598 = load { ptr, i64, i64 }, ptr %t597 store { ptr, i64, i64 } %t598, ptr %a599 %t600 = load { ptr, i64, i64 }, ptr %a599 %t601 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t600) - br i1 %t601, label %then11032, label %endif11034 -then11032: + br i1 %t601, label %then11060, label %endif11062 +then11060: %t602 = load { ptr, i64, i64 }, ptr %a599 - %t603 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t602, i64 9, { ptr, i64, i64 } { ptr @.str.7150, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.7151, i64 0, i64 0 }) + %t603 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t602, i64 9, { ptr, i64, i64 } { ptr @.str.7165, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.7166, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t603) store %S.json.Json %t603, ptr %a604 call void @finch.drop.S_json_Json(ptr %a604) - br label %endif11034 -endif11034: - br label %each.step11030 -each.step11030: + br label %endif11062 +endif11062: + br label %each.step11058 +each.step11058: %t605 = load i64, ptr %a591 %t606 = add i64 %t605, 1 store i64 %t606, ptr %a591 - br label %each.cond11028 -each.end11031: + br label %each.cond11056 +each.end11059: %t607 = call { ptr, i64, i64 } @finch.docs.builtins() store { ptr, i64, i64 } %t607, ptr %a608 store i64 0, ptr %a609 - br label %each.cond11035 -each.cond11035: + br label %each.cond11063 +each.cond11063: %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a608, i32 0, i32 1 %t611 = load i64, ptr %t610 %t612 = load i64, ptr %a609 %t613 = icmp slt i64 %t612, %t611 - br i1 %t613, label %each.body11036, label %each.end11038 -each.body11036: + br i1 %t613, label %each.body11064, label %each.end11066 +each.body11064: %t614 = load ptr, ptr %a608 %t615 = getelementptr inbounds %S.docs.Doc, ptr %t614, i64 %t612 %t616 = load %S.docs.Doc, ptr %t615 @@ -111653,8 +111828,8 @@ each.body11036: %t618 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 %t619 = load { ptr, i64, i64 }, ptr %t618 %t620 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t619) - br i1 %t620, label %then11039, label %endif11041 -then11039: + br i1 %t620, label %then11067, label %endif11069 +then11067: %t621 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 %t622 = load { ptr, i64, i64 }, ptr %t621 %t623 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 1 @@ -111665,83 +111840,83 @@ then11039: call void @finch.json.Json.push(ptr %a7, %S.json.Json %t627) store %S.json.Json %t627, ptr %a628 call void @finch.drop.S_json_Json(ptr %a628) - br label %endif11041 -endif11041: - br label %each.step11037 -each.step11037: + br label %endif11069 +endif11069: + br label %each.step11065 +each.step11065: %t629 = load i64, ptr %a609 %t630 = add i64 %t629, 1 store i64 %t630, ptr %a609 - br label %each.cond11035 -each.end11038: + br label %each.cond11063 +each.end11066: call void @finch.drop.arr_S_docs_Doc(ptr %a608) %t631 = call { ptr, i64, i64 } @finch.docs.keywords() store { ptr, i64, i64 } %t631, ptr %a632 store i64 0, ptr %a633 - br label %each.cond11042 -each.cond11042: + br label %each.cond11070 +each.cond11070: %t634 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 %t635 = load i64, ptr %t634 %t636 = load i64, ptr %a633 %t637 = icmp slt i64 %t636, %t635 - br i1 %t637, label %each.body11043, label %each.end11045 -each.body11043: + br i1 %t637, label %each.body11071, label %each.end11073 +each.body11071: %t638 = load ptr, ptr %a632 %t639 = getelementptr inbounds { ptr, i64, i64 }, ptr %t638, i64 %t636 %t640 = load { ptr, i64, i64 }, ptr %t639 store { ptr, i64, i64 } %t640, ptr %a641 %t642 = load { ptr, i64, i64 }, ptr %a641 %t643 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t642) - br i1 %t643, label %then11046, label %endif11048 -then11046: + br i1 %t643, label %then11074, label %endif11076 +then11074: %t644 = load { ptr, i64, i64 }, ptr %a641 - %t645 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t644, i64 14, { ptr, i64, i64 } { ptr @.str.7152, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7153, i64 0, i64 0 }) + %t645 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t644, i64 14, { ptr, i64, i64 } { ptr @.str.7167, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7168, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t645) store %S.json.Json %t645, ptr %a646 call void @finch.drop.S_json_Json(ptr %a646) - br label %endif11048 -endif11048: - br label %each.step11044 -each.step11044: + br label %endif11076 +endif11076: + br label %each.step11072 +each.step11072: %t647 = load i64, ptr %a633 %t648 = add i64 %t647, 1 store i64 %t648, ptr %a633 - br label %each.cond11042 -each.end11045: + br label %each.cond11070 +each.end11073: call void @finch.drop.arr_str(ptr %a632) %t649 = call { ptr, i64, i64 } @finch.docs.typeNames() store { ptr, i64, i64 } %t649, ptr %a650 store i64 0, ptr %a651 - br label %each.cond11049 -each.cond11049: + br label %each.cond11077 +each.cond11077: %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %a650, i32 0, i32 1 %t653 = load i64, ptr %t652 %t654 = load i64, ptr %a651 %t655 = icmp slt i64 %t654, %t653 - br i1 %t655, label %each.body11050, label %each.end11052 -each.body11050: + br i1 %t655, label %each.body11078, label %each.end11080 +each.body11078: %t656 = load ptr, ptr %a650 %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %t656, i64 %t654 %t658 = load { ptr, i64, i64 }, ptr %t657 store { ptr, i64, i64 } %t658, ptr %a659 %t660 = load { ptr, i64, i64 }, ptr %a659 %t661 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t660) - br i1 %t661, label %then11053, label %endif11055 -then11053: + br i1 %t661, label %then11081, label %endif11083 +then11081: %t662 = load { ptr, i64, i64 }, ptr %a659 - %t663 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t662, i64 25, { ptr, i64, i64 } { ptr @.str.7154, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7155, i64 0, i64 0 }) + %t663 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t662, i64 25, { ptr, i64, i64 } { ptr @.str.7169, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7170, i64 0, i64 0 }) call void @finch.json.Json.push(ptr %a7, %S.json.Json %t663) store %S.json.Json %t663, ptr %a664 call void @finch.drop.S_json_Json(ptr %a664) - br label %endif11055 -endif11055: - br label %each.step11051 -each.step11051: + br label %endif11083 +endif11083: + br label %each.step11079 +each.step11079: %t665 = load i64, ptr %a651 %t666 = add i64 %t665, 1 store i64 %t666, ptr %a651 - br label %each.cond11049 -each.end11052: + br label %each.cond11077 +each.end11080: call void @finch.drop.arr_str(ptr %a650) %t667 = load %S.json.Json, ptr %a7 %t668 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t667) @@ -111769,33 +111944,33 @@ entry: %t6 = load i64, ptr %t3 %t7 = load ptr, ptr %t2 store i64 0, ptr %a8 - br label %find.cond11056 -find.cond11056: + br label %find.cond11084 +find.cond11084: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t6 - br i1 %t10, label %find.body11057, label %find.end11060 -find.body11057: + br i1 %t10, label %find.body11085, label %find.end11088 +find.body11085: %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 %t12 = load { ptr, i64, i64 }, ptr %t11 store { ptr, i64, i64 } %t12, ptr %a13 store { ptr, i64, i64 } %t4, ptr %a14 %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) %t16 = icmp ne i32 %t15, 0 - br i1 %t16, label %find.hit11058, label %find.next11059 -find.hit11058: + br i1 %t16, label %find.hit11086, label %find.next11087 +find.hit11086: store i64 %t9, ptr %a5 - br label %find.end11060 -find.next11059: + br label %find.end11088 +find.next11087: %t17 = add i64 %t9, 1 store i64 %t17, ptr %a8 - br label %find.cond11056 -find.end11060: + br label %find.cond11084 +find.end11088: %t18 = load i64, ptr %a5 %t19 = icmp sge i64 %t18, 0 - br i1 %t19, label %then11061, label %endif11063 -then11061: + br i1 %t19, label %then11089, label %endif11091 +then11089: ret i1 false -endif11063: +endif11091: %t20 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 %t22 = load { ptr, i64, i64 }, ptr %a1 @@ -111821,11 +111996,11 @@ entry: %t2 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t2, ptr %a3 %t4 = call %S.json.Json @finch.json.new_bool(i1 false) - call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7156, i64 12, i64 0 }, %S.json.Json %t4) + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7171, i64 12, i64 0 }, %S.json.Json %t4) store %S.json.Json %t4, ptr %a5 call void @finch.drop.S_json_Json(ptr %a5) %t6 = load %S.json.Json, ptr %a1 - call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7157, i64 5, i64 0 }, %S.json.Json %t6) + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7172, i64 5, i64 0 }, %S.json.Json %t6) %t7 = load %S.json.Json, ptr %a3 ret %S.json.Json %t7 } @@ -111915,17 +112090,17 @@ entry: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t15 = load i64, ptr %t14 %t16 = icmp sgt i64 %t13, %t15 - br i1 %t16, label %then11064, label %endif11066 -then11064: + br i1 %t16, label %then11092, label %endif11094 +then11092: %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 %t18 = load i64, ptr %t17 store i64 %t18, ptr %a12 - br label %endif11066 -endif11066: + br label %endif11094 +endif11094: %t19 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = load i64, ptr %a12 - call void @finch_str_sub(ptr %a21, ptr %a20, i64 0, i64 %t22, ptr @.str.7158, i64 671) + call void @finch_str_sub(ptr %a21, ptr %a20, i64 0, i64 %t22, ptr @.str.7173, i64 671) %t23 = load { ptr, i64, i64 }, ptr %a21 store { ptr, i64, i64 } %t23, ptr %a24 store i64 0, ptr %a25 @@ -111935,246 +112110,246 @@ endif11066: %t29 = load i64, ptr %t28 %t30 = sub i64 %t29, 1 store i64 %t30, ptr %a31 - br label %while.cond11067 -while.cond11067: + br label %while.cond11095 +while.cond11095: %t32 = load i64, ptr %a31 %t33 = icmp sge i64 %t32, 0 - br i1 %t33, label %while.body11068, label %while.end11069 -while.body11068: + br i1 %t33, label %while.body11096, label %while.end11097 +while.body11096: %t34 = load i64, ptr %a31 %t35 = load { ptr, i64, i64 }, ptr %a24 %t36 = extractvalue { ptr, i64, i64 } %t35, 1 %t37 = icmp uge i64 %t34, %t36 - br i1 %t37, label %range11070, label %inrange11071 -range11070: - call void @finch_panic_index(ptr @.str.7159, i64 678, i64 %t34, i64 %t36) + br i1 %t37, label %range11098, label %inrange11099 +range11098: + call void @finch_panic_index(ptr @.str.7174, i64 678, i64 %t34, i64 %t36) unreachable -inrange11071: +inrange11099: %t38 = extractvalue { ptr, i64, i64 } %t35, 0 %t39 = getelementptr inbounds i8, ptr %t38, i64 %t34 %t40 = load i8, ptr %t39 store i8 %t40, ptr %a41 %t42 = load i8, ptr %a41 %t43 = icmp eq i8 %t42, 41 - br label %logic.from11072 -logic.from11072: - br i1 %t43, label %logic.end11074, label %logic.rhs11073 -logic.rhs11073: + br label %logic.from11100 +logic.from11100: + br i1 %t43, label %logic.end11102, label %logic.rhs11101 +logic.rhs11101: %t44 = load i8, ptr %a41 %t45 = icmp eq i8 %t44, 93 - br label %logic.rend11075 -logic.rend11075: - br label %logic.end11074 -logic.end11074: - %t46 = phi i1 [ true, %logic.from11072 ], [ %t45, %logic.rend11075 ] - br i1 %t46, label %then11076, label %else11077 -then11076: + br label %logic.rend11103 +logic.rend11103: + br label %logic.end11102 +logic.end11102: + %t46 = phi i1 [ true, %logic.from11100 ], [ %t45, %logic.rend11103 ] + br i1 %t46, label %then11104, label %else11105 +then11104: %t47 = load i64, ptr %a25 %t48 = add i64 %t47, 1 store i64 %t48, ptr %a25 - br label %endif11078 -else11077: + br label %endif11106 +else11105: %t49 = load i8, ptr %a41 %t50 = icmp eq i8 %t49, 40 - br label %logic.from11079 -logic.from11079: - br i1 %t50, label %logic.end11081, label %logic.rhs11080 -logic.rhs11080: + br label %logic.from11107 +logic.from11107: + br i1 %t50, label %logic.end11109, label %logic.rhs11108 +logic.rhs11108: %t51 = load i8, ptr %a41 %t52 = icmp eq i8 %t51, 91 - br label %logic.rend11082 -logic.rend11082: - br label %logic.end11081 -logic.end11081: - %t53 = phi i1 [ true, %logic.from11079 ], [ %t52, %logic.rend11082 ] - br i1 %t53, label %then11083, label %else11084 -then11083: + br label %logic.rend11110 +logic.rend11110: + br label %logic.end11109 +logic.end11109: + %t53 = phi i1 [ true, %logic.from11107 ], [ %t52, %logic.rend11110 ] + br i1 %t53, label %then11111, label %else11112 +then11111: %t54 = load i64, ptr %a25 %t55 = icmp eq i64 %t54, 0 - br i1 %t55, label %then11086, label %else11087 -then11086: + br i1 %t55, label %then11114, label %else11115 +then11114: %t56 = load i8, ptr %a41 %t57 = icmp eq i8 %t56, 40 - br i1 %t57, label %then11089, label %endif11091 -then11089: + br i1 %t57, label %then11117, label %endif11119 +then11117: %t58 = load i64, ptr %a31 store i64 %t58, ptr %a27 - br label %while.end11069 -endif11091: - br label %endif11088 -else11087: + br label %while.end11097 +endif11119: + br label %endif11116 +else11115: %t59 = load i64, ptr %a25 %t60 = sub i64 %t59, 1 store i64 %t60, ptr %a25 - br label %endif11088 -endif11088: - br label %endif11085 -else11084: + br label %endif11116 +endif11116: + br label %endif11113 +else11112: %t61 = load i8, ptr %a41 %t62 = icmp eq i8 %t61, 44 - br label %logic.from11092 -logic.from11092: - br i1 %t62, label %logic.rhs11093, label %logic.end11094 -logic.rhs11093: + br label %logic.from11120 +logic.from11120: + br i1 %t62, label %logic.rhs11121, label %logic.end11122 +logic.rhs11121: %t63 = load i64, ptr %a25 %t64 = icmp eq i64 %t63, 0 - br label %logic.rend11095 -logic.rend11095: - br label %logic.end11094 -logic.end11094: - %t65 = phi i1 [ false, %logic.from11092 ], [ %t64, %logic.rend11095 ] - br i1 %t65, label %then11096, label %endif11098 -then11096: + br label %logic.rend11123 +logic.rend11123: + br label %logic.end11122 +logic.end11122: + %t65 = phi i1 [ false, %logic.from11120 ], [ %t64, %logic.rend11123 ] + br i1 %t65, label %then11124, label %endif11126 +then11124: %t66 = load i64, ptr %a26 %t67 = add i64 %t66, 1 store i64 %t67, ptr %a26 - br label %endif11098 -endif11098: - br label %endif11085 -endif11085: - br label %endif11078 -endif11078: + br label %endif11126 +endif11126: + br label %endif11113 +endif11113: + br label %endif11106 +endif11106: %t68 = load i64, ptr %a31 %t69 = sub i64 %t68, 1 store i64 %t69, ptr %a31 - br label %while.cond11067 -while.end11069: + br label %while.cond11095 +while.end11097: %t70 = load i64, ptr %a27 %t71 = icmp slt i64 %t70, 0 - br i1 %t71, label %then11099, label %endif11101 -then11099: + br i1 %t71, label %then11127, label %endif11129 +then11127: %t72 = call %S.json.Json @finch.json.new_null() call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t72 -endif11101: +endif11129: %t73 = load i64, ptr %a27 store i64 %t73, ptr %a74 %t75 = load i64, ptr %a74 store i64 %t75, ptr %a76 - br label %while.cond11102 -while.cond11102: + br label %while.cond11130 +while.cond11130: %t77 = load i64, ptr %a76 %t78 = icmp sgt i64 %t77, 0 - br label %logic.from11105 -logic.from11105: - br i1 %t78, label %logic.rhs11106, label %logic.end11107 -logic.rhs11106: + br label %logic.from11133 +logic.from11133: + br i1 %t78, label %logic.rhs11134, label %logic.end11135 +logic.rhs11134: %t79 = load i64, ptr %a76 %t80 = sub i64 %t79, 1 %t81 = load { ptr, i64, i64 }, ptr %a24 %t82 = extractvalue { ptr, i64, i64 } %t81, 1 %t83 = icmp uge i64 %t80, %t82 - br i1 %t83, label %range11108, label %inrange11109 -range11108: - call void @finch_panic_index(ptr @.str.7160, i64 700, i64 %t80, i64 %t82) + br i1 %t83, label %range11136, label %inrange11137 +range11136: + call void @finch_panic_index(ptr @.str.7175, i64 700, i64 %t80, i64 %t82) unreachable -inrange11109: +inrange11137: %t84 = extractvalue { ptr, i64, i64 } %t81, 0 %t85 = getelementptr inbounds i8, ptr %t84, i64 %t80 %t86 = load i8, ptr %t85 %t87 = call i1 @finch.lsp.isWordChar(i8 %t86) - br label %logic.rend11110 -logic.rend11110: - br label %logic.end11107 -logic.end11107: - %t88 = phi i1 [ false, %logic.from11105 ], [ %t87, %logic.rend11110 ] - br i1 %t88, label %while.body11103, label %while.end11104 -while.body11103: + br label %logic.rend11138 +logic.rend11138: + br label %logic.end11135 +logic.end11135: + %t88 = phi i1 [ false, %logic.from11133 ], [ %t87, %logic.rend11138 ] + br i1 %t88, label %while.body11131, label %while.end11132 +while.body11131: %t89 = load i64, ptr %a76 %t90 = sub i64 %t89, 1 store i64 %t90, ptr %a76 - br label %while.cond11102 -while.end11104: + br label %while.cond11130 +while.end11132: %t91 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t91, ptr %a92 %t94 = load i64, ptr %a76 %t95 = load i64, ptr %a74 - call void @finch_str_sub(ptr %a93, ptr %a92, i64 %t94, i64 %t95, ptr @.str.7161, i64 703) + call void @finch_str_sub(ptr %a93, ptr %a92, i64 %t94, i64 %t95, ptr @.str.7176, i64 703) %t96 = load { ptr, i64, i64 }, ptr %a93 store { ptr, i64, i64 } %t96, ptr %a97 %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1 %t99 = load i64, ptr %t98 %t100 = icmp eq i64 %t99, 0 - br i1 %t100, label %then11111, label %endif11113 -then11111: + br i1 %t100, label %then11139, label %endif11141 +then11139: %t101 = call %S.json.Json @finch.json.new_null() call void @finch_str_drop(ptr %a97) call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t101 -endif11113: - store { ptr, i64, i64 } { ptr @.str.7162, i64 0, i64 0 }, ptr %a102 +endif11141: + store { ptr, i64, i64 } { ptr @.str.7177, i64 0, i64 0 }, ptr %a102 %t103 = load i64, ptr %a76 %t104 = icmp sgt i64 %t103, 0 - br label %logic.from11114 -logic.from11114: - br i1 %t104, label %logic.rhs11115, label %logic.end11116 -logic.rhs11115: + br label %logic.from11142 +logic.from11142: + br i1 %t104, label %logic.rhs11143, label %logic.end11144 +logic.rhs11143: %t105 = load i64, ptr %a76 %t106 = sub i64 %t105, 1 %t107 = load { ptr, i64, i64 }, ptr %a24 %t108 = extractvalue { ptr, i64, i64 } %t107, 1 %t109 = icmp uge i64 %t106, %t108 - br i1 %t109, label %range11117, label %inrange11118 -range11117: - call void @finch_panic_index(ptr @.str.7163, i64 708, i64 %t106, i64 %t108) + br i1 %t109, label %range11145, label %inrange11146 +range11145: + call void @finch_panic_index(ptr @.str.7178, i64 708, i64 %t106, i64 %t108) unreachable -inrange11118: +inrange11146: %t110 = extractvalue { ptr, i64, i64 } %t107, 0 %t111 = getelementptr inbounds i8, ptr %t110, i64 %t106 %t112 = load i8, ptr %t111 %t113 = icmp eq i8 %t112, 46 - br label %logic.rend11119 -logic.rend11119: - br label %logic.end11116 -logic.end11116: - %t114 = phi i1 [ false, %logic.from11114 ], [ %t113, %logic.rend11119 ] - br i1 %t114, label %then11120, label %endif11122 -then11120: + br label %logic.rend11147 +logic.rend11147: + br label %logic.end11144 +logic.end11144: + %t114 = phi i1 [ false, %logic.from11142 ], [ %t113, %logic.rend11147 ] + br i1 %t114, label %then11148, label %endif11150 +then11148: %t115 = load i64, ptr %a76 %t116 = sub i64 %t115, 1 store i64 %t116, ptr %a117 - br label %while.cond11123 -while.cond11123: + br label %while.cond11151 +while.cond11151: %t118 = load i64, ptr %a117 %t119 = icmp sgt i64 %t118, 0 - br label %logic.from11126 -logic.from11126: - br i1 %t119, label %logic.rhs11127, label %logic.end11128 -logic.rhs11127: + br label %logic.from11154 +logic.from11154: + br i1 %t119, label %logic.rhs11155, label %logic.end11156 +logic.rhs11155: %t120 = load i64, ptr %a117 %t121 = sub i64 %t120, 1 %t122 = load { ptr, i64, i64 }, ptr %a24 %t123 = extractvalue { ptr, i64, i64 } %t122, 1 %t124 = icmp uge i64 %t121, %t123 - br i1 %t124, label %range11129, label %inrange11130 -range11129: - call void @finch_panic_index(ptr @.str.7164, i64 711, i64 %t121, i64 %t123) + br i1 %t124, label %range11157, label %inrange11158 +range11157: + call void @finch_panic_index(ptr @.str.7179, i64 711, i64 %t121, i64 %t123) unreachable -inrange11130: +inrange11158: %t125 = extractvalue { ptr, i64, i64 } %t122, 0 %t126 = getelementptr inbounds i8, ptr %t125, i64 %t121 %t127 = load i8, ptr %t126 %t128 = call i1 @finch.lsp.isWordChar(i8 %t127) - br label %logic.rend11131 -logic.rend11131: - br label %logic.end11128 -logic.end11128: - %t129 = phi i1 [ false, %logic.from11126 ], [ %t128, %logic.rend11131 ] - br i1 %t129, label %while.body11124, label %while.end11125 -while.body11124: + br label %logic.rend11159 +logic.rend11159: + br label %logic.end11156 +logic.end11156: + %t129 = phi i1 [ false, %logic.from11154 ], [ %t128, %logic.rend11159 ] + br i1 %t129, label %while.body11152, label %while.end11153 +while.body11152: %t130 = load i64, ptr %a117 %t131 = sub i64 %t130, 1 store i64 %t131, ptr %a117 - br label %while.cond11123 -while.end11125: + br label %while.cond11151 +while.end11153: %t132 = load { ptr, i64, i64 }, ptr %a24 store { ptr, i64, i64 } %t132, ptr %a133 %t135 = load i64, ptr %a117 %t136 = load i64, ptr %a76 %t137 = sub i64 %t136, 1 - call void @finch_str_sub(ptr %a134, ptr %a133, i64 %t135, i64 %t137, ptr @.str.7165, i64 714) + call void @finch_str_sub(ptr %a134, ptr %a133, i64 %t135, i64 %t137, ptr @.str.7180, i64 714) %t138 = load { ptr, i64, i64 }, ptr %a134 store { ptr, i64, i64 } %t138, ptr %a139 %t140 = load %S.lsp.Analysis, ptr %a1 @@ -112191,38 +112366,38 @@ while.end11125: store { ptr, i64, i64 } %t148, ptr %a150 %t151 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t151, ptr %a152 - store { ptr, i64, i64 } { ptr @.str.7167, i64 4, i64 0 }, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.7182, i64 4, i64 0 }, ptr %a154 %t155 = call i32 @finch_str_starts(ptr %a152, ptr %a154) %t156 = icmp ne i32 %t155, 0 - br label %logic.from11132 -logic.from11132: - br i1 %t156, label %logic.rhs11133, label %logic.end11134 -logic.rhs11133: + br label %logic.from11160 +logic.from11160: + br i1 %t156, label %logic.rhs11161, label %logic.end11162 +logic.rhs11161: %t157 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t157, ptr %a158 - store { ptr, i64, i64 } { ptr @.str.7169, i64 1, i64 0 }, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.7184, i64 1, i64 0 }, ptr %a160 %t161 = call i32 @finch_str_ends(ptr %a158, ptr %a160) %t162 = icmp ne i32 %t161, 0 - br label %logic.rend11135 -logic.rend11135: - br label %logic.end11134 -logic.end11134: - %t163 = phi i1 [ false, %logic.from11132 ], [ %t162, %logic.rend11135 ] - br i1 %t163, label %then11136, label %endif11138 -then11136: + br label %logic.rend11163 +logic.rend11163: + br label %logic.end11162 +logic.end11162: + %t163 = phi i1 [ false, %logic.from11160 ], [ %t162, %logic.rend11163 ] + br i1 %t163, label %then11164, label %endif11166 +then11164: %t164 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t164, ptr %a165 %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %a150, i32 0, i32 1 %t168 = load i64, ptr %t167 %t169 = sub i64 %t168, 1 - call void @finch_str_sub(ptr %a166, ptr %a165, i64 4, i64 %t169, ptr @.str.7170, i64 717) + call void @finch_str_sub(ptr %a166, ptr %a165, i64 4, i64 %t169, ptr @.str.7185, i64 717) %t170 = load { ptr, i64, i64 }, ptr %a166 %t171 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t170, ptr %a150 store { ptr, i64, i64 } %t171, ptr %a172 call void @finch_str_drop(ptr %a172) - br label %endif11138 -endif11138: + br label %endif11166 +endif11166: %t173 = load { ptr, i64, i64 }, ptr %a150 store { ptr, i64, i64 } %t173, ptr %a174 call void @finch_str_copy(ptr %a175, ptr %a174) @@ -112233,18 +112408,18 @@ endif11138: call void @finch_str_drop(ptr %a178) call void @finch_str_drop(ptr %a150) call void @finch_str_drop(ptr %a139) - br label %endif11122 -endif11122: + br label %endif11150 +endif11150: %t179 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 store i64 0, ptr %a180 - br label %each.cond11139 -each.cond11139: + br label %each.cond11167 +each.cond11167: %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 %t182 = load i64, ptr %t181 %t183 = load i64, ptr %a180 %t184 = icmp slt i64 %t183, %t182 - br i1 %t184, label %each.body11140, label %each.end11142 -each.body11140: + br i1 %t184, label %each.body11168, label %each.end11170 +each.body11168: %t185 = load ptr, ptr %t179 %t186 = getelementptr inbounds %S.lsp.FnRec, ptr %t185, i64 %t183 %t187 = load %S.lsp.FnRec, ptr %t186 @@ -112256,10 +112431,10 @@ each.body11140: store { ptr, i64, i64 } %t191, ptr %a193 %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) %t195 = icmp ne i32 %t194, 0 - br label %logic.from11143 -logic.from11143: - br i1 %t195, label %logic.rhs11144, label %logic.end11145 -logic.rhs11144: + br label %logic.from11171 +logic.from11171: + br i1 %t195, label %logic.rhs11172, label %logic.end11173 +logic.rhs11172: %t196 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 2 %t197 = load { ptr, i64, i64 }, ptr %t196 %t198 = load { ptr, i64, i64 }, ptr %a102 @@ -112267,33 +112442,33 @@ logic.rhs11144: store { ptr, i64, i64 } %t198, ptr %a200 %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) %t202 = icmp ne i32 %t201, 0 - br label %logic.rend11146 -logic.rend11146: - br label %logic.end11145 -logic.end11145: - %t203 = phi i1 [ false, %logic.from11143 ], [ %t202, %logic.rend11146 ] - br i1 %t203, label %then11147, label %endif11149 -then11147: + br label %logic.rend11174 +logic.rend11174: + br label %logic.end11173 +logic.end11173: + %t203 = phi i1 [ false, %logic.from11171 ], [ %t202, %logic.rend11174 ] + br i1 %t203, label %then11175, label %endif11177 +then11175: %t204 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t204, ptr %a205 %t206 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 7 %t207 = load { ptr, i64, i64 }, ptr %t206 %t208 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t207) - call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7171, i64 5, i64 0 }, %S.json.Json %t208) + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7186, i64 5, i64 0 }, %S.json.Json %t208) store %S.json.Json %t208, ptr %a209 call void @finch.drop.S_json_Json(ptr %a209) %t210 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t210, ptr %a211 %t212 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 8 store i64 0, ptr %a213 - br label %each.cond11150 -each.cond11150: + br label %each.cond11178 +each.cond11178: %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 %t215 = load i64, ptr %t214 %t216 = load i64, ptr %a213 %t217 = icmp slt i64 %t216, %t215 - br i1 %t217, label %each.body11151, label %each.end11153 -each.body11151: + br i1 %t217, label %each.body11179, label %each.end11181 +each.body11179: %t218 = load ptr, ptr %t212 %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t216 %t220 = load { ptr, i64, i64 }, ptr %t219 @@ -112301,29 +112476,29 @@ each.body11151: %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a221, i32 0, i32 1 %t223 = load i64, ptr %t222 %t224 = icmp sgt i64 %t223, 0 - br i1 %t224, label %then11154, label %endif11156 -then11154: + br i1 %t224, label %then11182, label %endif11184 +then11182: %t225 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t225, ptr %a226 %t227 = load { ptr, i64, i64 }, ptr %a221 %t228 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t227) - call void @finch.json.Json.set(ptr %a226, { ptr, i64, i64 } { ptr @.str.7172, i64 5, i64 0 }, %S.json.Json %t228) + call void @finch.json.Json.set(ptr %a226, { ptr, i64, i64 } { ptr @.str.7187, i64 5, i64 0 }, %S.json.Json %t228) store %S.json.Json %t228, ptr %a229 call void @finch.drop.S_json_Json(ptr %a229) %t230 = load %S.json.Json, ptr %a226 call void @finch.json.Json.push(ptr %a211, %S.json.Json %t230) call void @finch.drop.S_json_Json(ptr %a226) - br label %endif11156 -endif11156: - br label %each.step11152 -each.step11152: + br label %endif11184 +endif11184: + br label %each.step11180 +each.step11180: %t231 = load i64, ptr %a213 %t232 = add i64 %t231, 1 store i64 %t232, ptr %a213 - br label %each.cond11150 -each.end11153: + br label %each.cond11178 +each.end11181: %t233 = load %S.json.Json, ptr %a211 - call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7173, i64 10, i64 0 }, %S.json.Json %t233) + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7188, i64 10, i64 0 }, %S.json.Json %t233) %t234 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t234, ptr %a235 %t236 = load %S.json.Json, ptr %a205 @@ -112331,14 +112506,14 @@ each.end11153: %t237 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t237, ptr %a238 %t239 = load %S.json.Json, ptr %a235 - call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7174, i64 10, i64 0 }, %S.json.Json %t239) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7189, i64 10, i64 0 }, %S.json.Json %t239) %t240 = call %S.json.Json @finch.lsp.num(i64 0) - call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7175, i64 15, i64 0 }, %S.json.Json %t240) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7190, i64 15, i64 0 }, %S.json.Json %t240) store %S.json.Json %t240, ptr %a241 call void @finch.drop.S_json_Json(ptr %a241) %t242 = load i64, ptr %a26 %t243 = call %S.json.Json @finch.lsp.num(i64 %t242) - call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7176, i64 15, i64 0 }, %S.json.Json %t243) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7191, i64 15, i64 0 }, %S.json.Json %t243) store %S.json.Json %t243, ptr %a244 call void @finch.drop.S_json_Json(ptr %a244) %t245 = load %S.json.Json, ptr %a238 @@ -112350,14 +112525,14 @@ each.end11153: call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t245 -endif11149: - br label %each.step11141 -each.step11141: +endif11177: + br label %each.step11169 +each.step11169: %t246 = load i64, ptr %a180 %t247 = add i64 %t246, 1 store i64 %t247, ptr %a180 - br label %each.cond11139 -each.end11142: + br label %each.cond11167 +each.end11170: %t248 = call { ptr, i64, i64 } @finch.docs.builtins() %t249 = load { ptr, i64, i64 }, ptr %a97 %t250 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t248, { ptr, i64, i64 } %t249) @@ -112368,20 +112543,20 @@ each.end11142: %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 %t255 = load i64, ptr %t254 %t256 = icmp sgt i64 %t255, 0 - br i1 %t256, label %then11157, label %endif11159 -then11157: + br i1 %t256, label %then11185, label %endif11187 +then11185: %t257 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t257, ptr %a258 %t259 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 1 %t260 = load { ptr, i64, i64 }, ptr %t259 %t261 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t260) - call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7177, i64 5, i64 0 }, %S.json.Json %t261) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7192, i64 5, i64 0 }, %S.json.Json %t261) store %S.json.Json %t261, ptr %a262 call void @finch.drop.S_json_Json(ptr %a262) %t263 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 2 %t264 = load { ptr, i64, i64 }, ptr %t263 %t265 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t264) - call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7178, i64 13, i64 0 }, %S.json.Json %t265) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7193, i64 13, i64 0 }, %S.json.Json %t265) store %S.json.Json %t265, ptr %a266 call void @finch.drop.S_json_Json(ptr %a266) %t267 = call %S.json.Json @finch.json.new_list() @@ -112391,14 +112566,14 @@ then11157: %t270 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t270, ptr %a271 %t272 = load %S.json.Json, ptr %a268 - call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7179, i64 10, i64 0 }, %S.json.Json %t272) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7194, i64 10, i64 0 }, %S.json.Json %t272) %t273 = call %S.json.Json @finch.lsp.num(i64 0) - call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7180, i64 15, i64 0 }, %S.json.Json %t273) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7195, i64 15, i64 0 }, %S.json.Json %t273) store %S.json.Json %t273, ptr %a274 call void @finch.drop.S_json_Json(ptr %a274) %t275 = load i64, ptr %a26 %t276 = call %S.json.Json @finch.lsp.num(i64 %t275) - call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7181, i64 15, i64 0 }, %S.json.Json %t276) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7196, i64 15, i64 0 }, %S.json.Json %t276) store %S.json.Json %t276, ptr %a277 call void @finch.drop.S_json_Json(ptr %a277) %t278 = load %S.json.Json, ptr %a271 @@ -112410,7 +112585,7 @@ then11157: call void @finch_str_drop(ptr %a24) call void @finch_str_drop(ptr %a9) ret %S.json.Json %t278 -endif11159: +endif11187: %t279 = call %S.json.Json @finch.json.new_null() call void @finch.drop.S_docs_Doc(ptr %a252) call void @finch_str_drop(ptr %a102) @@ -112426,12 +112601,12 @@ entry: %a3 = alloca %S.json.Json, align 16 %a5 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 - %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7182, i64 12, i64 0 }) + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7197, i64 12, i64 0 }) store %S.json.Json %t2, ptr %a3 - %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7183, i64 4, i64 0 }) + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7198, i64 4, i64 0 }) call void @finch.drop.S_json_Json(ptr %a3) store %S.json.Json %t4, ptr %a5 - %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7184, i64 0, i64 0 }) + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7199, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a5) ret { ptr, i64, i64 } %t6 } @@ -112443,12 +112618,12 @@ entry: %a5 = alloca %S.json.Json, align 16 %a8 = alloca { ptr, i64, i64 }, align 16 store %S.json.Json %p0, ptr %a1 - %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7185, i64 12, i64 0 }) + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7200, i64 12, i64 0 }) store %S.json.Json %t2, ptr %a3 - %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7186, i64 3, i64 0 }) + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7201, i64 3, i64 0 }) call void @finch.drop.S_json_Json(ptr %a3) store %S.json.Json %t4, ptr %a5 - %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7187, i64 0, i64 0 }) + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7202, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a5) %t7 = call { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %t6) store { ptr, i64, i64 } %t6, ptr %a8 @@ -112562,80 +112737,80 @@ entry: %a322 = alloca %S.json.Json, align 16 %a328 = alloca %S.json.Json, align 16 store %S.json.Json %p0, ptr %a1 - %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7188, i64 6, i64 0 }) + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7203, i64 6, i64 0 }) store %S.json.Json %t2, ptr %a3 - %t4 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a3, { ptr, i64, i64 } { ptr @.str.7189, i64 0, i64 0 }) + %t4 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a3, { ptr, i64, i64 } { ptr @.str.7204, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a3) store { ptr, i64, i64 } %t4, ptr %a5 - %t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7190, i64 6, i64 0 }) + %t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7205, i64 6, i64 0 }) store %S.json.Json %t6, ptr %a7 - %t8 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7191, i64 2, i64 0 }) + %t8 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7206, i64 2, i64 0 }) store %S.json.Json %t8, ptr %a9 %t10 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t10, ptr %a11 - store { ptr, i64, i64 } { ptr @.str.7192, i64 10, i64 0 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.7207, i64 10, i64 0 }, ptr %a12 %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) %t14 = icmp ne i32 %t13, 0 - br i1 %t14, label %match.arm11161, label %match.next11162 -match.arm11161: + br i1 %t14, label %match.arm11189, label %match.next11190 +match.arm11189: %t15 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t15, ptr %a16 %t17 = call %S.json.Json @finch.lsp.num(i64 1) - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7193, i64 16, i64 0 }, %S.json.Json %t17) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7208, i64 16, i64 0 }, %S.json.Json %t17) store %S.json.Json %t17, ptr %a18 call void @finch.drop.S_json_Json(ptr %a18) %t19 = call %S.json.Json @finch.json.new_bool(i1 true) - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7194, i64 13, i64 0 }, %S.json.Json %t19) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7209, i64 13, i64 0 }, %S.json.Json %t19) store %S.json.Json %t19, ptr %a20 call void @finch.drop.S_json_Json(ptr %a20) %t21 = call %S.json.Json @finch.json.new_bool(i1 true) - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7195, i64 18, i64 0 }, %S.json.Json %t21) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7210, i64 18, i64 0 }, %S.json.Json %t21) store %S.json.Json %t21, ptr %a22 call void @finch.drop.S_json_Json(ptr %a22) %t23 = call %S.json.Json @finch.json.new_bool(i1 true) - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7196, i64 22, i64 0 }, %S.json.Json %t23) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7211, i64 22, i64 0 }, %S.json.Json %t23) store %S.json.Json %t23, ptr %a24 call void @finch.drop.S_json_Json(ptr %a24) %t25 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t25, ptr %a26 %t27 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t27, ptr %a28 - %t29 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7197, i64 1, i64 0 }) + %t29 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7212, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a28, %S.json.Json %t29) store %S.json.Json %t29, ptr %a30 call void @finch.drop.S_json_Json(ptr %a30) %t31 = load %S.json.Json, ptr %a28 - call void @finch.json.Json.set(ptr %a26, { ptr, i64, i64 } { ptr @.str.7198, i64 17, i64 0 }, %S.json.Json %t31) + call void @finch.json.Json.set(ptr %a26, { ptr, i64, i64 } { ptr @.str.7213, i64 17, i64 0 }, %S.json.Json %t31) %t32 = load %S.json.Json, ptr %a26 - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7199, i64 18, i64 0 }, %S.json.Json %t32) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7214, i64 18, i64 0 }, %S.json.Json %t32) %t33 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t33, ptr %a34 %t35 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t35, ptr %a36 - %t37 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7200, i64 1, i64 0 }) + %t37 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7215, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a36, %S.json.Json %t37) store %S.json.Json %t37, ptr %a38 call void @finch.drop.S_json_Json(ptr %a38) - %t39 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7201, i64 1, i64 0 }) + %t39 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7216, i64 1, i64 0 }) call void @finch.json.Json.push(ptr %a36, %S.json.Json %t39) store %S.json.Json %t39, ptr %a40 call void @finch.drop.S_json_Json(ptr %a40) %t41 = load %S.json.Json, ptr %a36 - call void @finch.json.Json.set(ptr %a34, { ptr, i64, i64 } { ptr @.str.7202, i64 17, i64 0 }, %S.json.Json %t41) + call void @finch.json.Json.set(ptr %a34, { ptr, i64, i64 } { ptr @.str.7217, i64 17, i64 0 }, %S.json.Json %t41) %t42 = load %S.json.Json, ptr %a34 - call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7203, i64 21, i64 0 }, %S.json.Json %t42) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7218, i64 21, i64 0 }, %S.json.Json %t42) %t43 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t43, ptr %a44 %t45 = load %S.json.Json, ptr %a16 - call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7204, i64 12, i64 0 }, %S.json.Json %t45) + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7219, i64 12, i64 0 }, %S.json.Json %t45) %t46 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t46, ptr %a47 - %t48 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7206, i64 5, i64 0 }) - call void @finch.json.Json.set(ptr %a47, { ptr, i64, i64 } { ptr @.str.7205, i64 4, i64 0 }, %S.json.Json %t48) + %t48 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7221, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a47, { ptr, i64, i64 } { ptr @.str.7220, i64 4, i64 0 }, %S.json.Json %t48) store %S.json.Json %t48, ptr %a49 call void @finch.drop.S_json_Json(ptr %a49) %t50 = load %S.json.Json, ptr %a47 - call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7207, i64 10, i64 0 }, %S.json.Json %t50) + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7222, i64 10, i64 0 }, %S.json.Json %t50) %t51 = load %S.json.Json, ptr %a9 %t52 = load %S.json.Json, ptr %a44 call void @finch.lsp.reply(%S.json.Json %t51, %S.json.Json %t52) @@ -112646,14 +112821,14 @@ match.arm11161: call void @finch.drop.S_json_Json(ptr %a28) call void @finch.drop.S_json_Json(ptr %a26) call void @finch.drop.S_json_Json(ptr %a16) - br label %match.end11160 -match.next11162: + br label %match.end11188 +match.next11190: store { ptr, i64, i64 } %t10, ptr %a53 - store { ptr, i64, i64 } { ptr @.str.7208, i64 8, i64 0 }, ptr %a54 + store { ptr, i64, i64 } { ptr @.str.7223, i64 8, i64 0 }, ptr %a54 %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) %t56 = icmp ne i32 %t55, 0 - br i1 %t56, label %match.arm11163, label %match.next11164 -match.arm11163: + br i1 %t56, label %match.arm11191, label %match.next11192 +match.arm11191: %t57 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 6 store i1 true, ptr %t57 %t58 = load %S.json.Json, ptr %a9 @@ -112661,25 +112836,25 @@ match.arm11163: call void @finch.lsp.reply(%S.json.Json %t58, %S.json.Json %t59) store %S.json.Json %t59, ptr %a60 call void @finch.drop.S_json_Json(ptr %a60) - br label %match.end11160 -match.next11164: + br label %match.end11188 +match.next11192: store { ptr, i64, i64 } %t10, ptr %a61 - store { ptr, i64, i64 } { ptr @.str.7209, i64 4, i64 0 }, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.7224, i64 4, i64 0 }, ptr %a62 %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) %t64 = icmp ne i32 %t63, 0 - br i1 %t64, label %match.arm11165, label %match.next11166 -match.arm11165: + br i1 %t64, label %match.arm11193, label %match.next11194 +match.arm11193: %t65 = trunc i64 0 to i32 %t66 = call i32 @fflush(ptr null) call void @exit(i32 %t65) - br label %match.end11160 -match.next11166: + br label %match.end11188 +match.next11194: store { ptr, i64, i64 } %t10, ptr %a67 - store { ptr, i64, i64 } { ptr @.str.7210, i64 20, i64 0 }, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.7225, i64 20, i64 0 }, ptr %a68 %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) %t70 = icmp ne i32 %t69, 0 - br i1 %t70, label %match.arm11167, label %match.next11168 -match.arm11167: + br i1 %t70, label %match.arm11195, label %match.next11196 +match.arm11195: %t71 = load %S.json.Json, ptr %a7 %t72 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t71) store { ptr, i64, i64 } %t72, ptr %a73 @@ -112695,14 +112870,14 @@ match.arm11167: %t83 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t82, i64 %t80 %t84 = load i32, ptr %a79 %t85 = icmp ne i32 %t84, 0 - br i1 %t85, label %map.new11169, label %map.have11170 -map.new11169: + br i1 %t85, label %map.new11197, label %map.have11198 +map.new11197: %t86 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 1 call void @finch_str_copy(ptr %t86, ptr %a78) %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t87 - br label %map.have11170 -map.have11170: + br label %map.have11198 +map.have11198: %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 %t89 = load { ptr, i64, i64 }, ptr %t88 store { ptr, i64, i64 } %t75, ptr %t88 @@ -112711,31 +112886,31 @@ map.have11170: %t91 = load { ptr, i64, i64 }, ptr %a73 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t91) call void @finch_str_drop(ptr %a73) - br label %match.end11160 -match.next11168: + br label %match.end11188 +match.next11196: store { ptr, i64, i64 } %t10, ptr %a92 - store { ptr, i64, i64 } { ptr @.str.7211, i64 22, i64 0 }, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.7226, i64 22, i64 0 }, ptr %a93 %t94 = call i32 @finch_str_eq(ptr %a92, ptr %a93) %t95 = icmp ne i32 %t94, 0 - br i1 %t95, label %match.arm11171, label %match.next11172 -match.arm11171: + br i1 %t95, label %match.arm11199, label %match.next11200 +match.arm11199: %t96 = load %S.json.Json, ptr %a7 %t97 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t96) store { ptr, i64, i64 } %t97, ptr %a98 - %t99 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7212, i64 14, i64 0 }) + %t99 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7227, i64 14, i64 0 }) store %S.json.Json %t99, ptr %a100 %t101 = call i64 @finch.json.Json.len(ptr %a100) %t102 = icmp sgt i64 %t101, 0 - br i1 %t102, label %then11173, label %endif11175 -then11173: + br i1 %t102, label %then11201, label %endif11203 +then11201: %t103 = call i64 @finch.json.Json.len(ptr %a100) %t104 = sub i64 %t103, 1 %t105 = call %S.json.Json @finch.json.Json.at(ptr %a100, i64 %t104) store %S.json.Json %t105, ptr %a106 - %t107 = call %S.json.Json @finch.json.Json.get(ptr %a106, { ptr, i64, i64 } { ptr @.str.7213, i64 4, i64 0 }) + %t107 = call %S.json.Json @finch.json.Json.get(ptr %a106, { ptr, i64, i64 } { ptr @.str.7228, i64 4, i64 0 }) call void @finch.drop.S_json_Json(ptr %a106) store %S.json.Json %t107, ptr %a108 - %t109 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a108, { ptr, i64, i64 } { ptr @.str.7214, i64 0, i64 0 }) + %t109 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a108, { ptr, i64, i64 } { ptr @.str.7229, i64 0, i64 0 }) call void @finch.drop.S_json_Json(ptr %a108) %t110 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t111 = load { ptr, i64, i64 }, ptr %a98 @@ -112747,14 +112922,14 @@ then11173: %t117 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t116, i64 %t114 %t118 = load i32, ptr %a113 %t119 = icmp ne i32 %t118, 0 - br i1 %t119, label %map.new11176, label %map.have11177 -map.new11176: + br i1 %t119, label %map.new11204, label %map.have11205 +map.new11204: %t120 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 1 call void @finch_str_copy(ptr %t120, ptr %a112) %t121 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 store { ptr, i64, i64 } zeroinitializer, ptr %t121 - br label %map.have11177 -map.have11177: + br label %map.have11205 +map.have11205: %t122 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 %t123 = load { ptr, i64, i64 }, ptr %t122 store { ptr, i64, i64 } %t109, ptr %t122 @@ -112762,18 +112937,18 @@ map.have11177: call void @finch_str_drop(ptr %a124) %t125 = load { ptr, i64, i64 }, ptr %a98 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t125) - br label %endif11175 -endif11175: + br label %endif11203 +endif11203: call void @finch.drop.S_json_Json(ptr %a100) call void @finch_str_drop(ptr %a98) - br label %match.end11160 -match.next11172: + br label %match.end11188 +match.next11200: store { ptr, i64, i64 } %t10, ptr %a126 - store { ptr, i64, i64 } { ptr @.str.7215, i64 20, i64 0 }, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.7230, i64 20, i64 0 }, ptr %a127 %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) %t129 = icmp ne i32 %t128, 0 - br i1 %t129, label %match.arm11178, label %match.next11179 -match.arm11178: + br i1 %t129, label %match.arm11206, label %match.next11207 +match.arm11206: %t130 = load %S.json.Json, ptr %a7 %t131 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t130) store { ptr, i64, i64 } %t131, ptr %a132 @@ -112782,21 +112957,21 @@ match.arm11178: store { ptr, i64, i64 } %t134, ptr %a135 %t136 = call i64 @finch_map_find(ptr %t133, ptr %a135, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t137 = icmp sge i64 %t136, 0 - br i1 %t137, label %then11180, label %endif11182 -then11180: + br i1 %t137, label %then11208, label %endif11210 +then11208: %t138 = load { ptr, i64, i64 }, ptr %a132 call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t138) - br label %endif11182 -endif11182: + br label %endif11210 +endif11210: call void @finch_str_drop(ptr %a132) - br label %match.end11160 -match.next11179: + br label %match.end11188 +match.next11207: store { ptr, i64, i64 } %t10, ptr %a139 - store { ptr, i64, i64 } { ptr @.str.7216, i64 21, i64 0 }, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.7231, i64 21, i64 0 }, ptr %a140 %t141 = call i32 @finch_str_eq(ptr %a139, ptr %a140) %t142 = icmp ne i32 %t141, 0 - br i1 %t142, label %match.arm11183, label %match.next11184 -match.arm11183: + br i1 %t142, label %match.arm11211, label %match.next11212 +match.arm11211: %t143 = load %S.json.Json, ptr %a7 %t144 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t143) store { ptr, i64, i64 } %t144, ptr %a145 @@ -112805,8 +112980,8 @@ match.arm11183: store { ptr, i64, i64 } %t147, ptr %a148 %t149 = call i64 @finch_map_find(ptr %t146, ptr %a148, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t150 = icmp sge i64 %t149, 0 - br i1 %t150, label %remove.hit11185, label %remove.end11186 -remove.hit11185: + br i1 %t150, label %remove.hit11213, label %remove.end11214 +remove.hit11213: %t151 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t146, i32 0, i32 0 %t152 = load ptr, ptr %t151 %t153 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t152, i64 %t149 @@ -112815,15 +112990,15 @@ remove.hit11185: %t155 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 2 call void @finch_str_drop(ptr %t155) call void @finch_map_remove_at(ptr %t146, i64 %t149, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64)) - br label %remove.end11186 -remove.end11186: + br label %remove.end11214 +remove.end11214: %t156 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t157 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t157, ptr %a158 %t159 = call i64 @finch_map_find(ptr %t156, ptr %a158, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t160 = icmp sge i64 %t159, 0 - br i1 %t160, label %remove.hit11187, label %remove.end11188 -remove.hit11187: + br i1 %t160, label %remove.hit11215, label %remove.end11216 +remove.hit11215: %t161 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t156, i32 0, i32 0 %t162 = load ptr, ptr %t161 %t163 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t162, i64 %t159 @@ -112832,15 +113007,15 @@ remove.hit11187: %t165 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 2 call void @finch.drop.S_lsp_Analysis(ptr %t165) call void @finch_map_remove_at(ptr %t156, i64 %t159, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) - br label %remove.end11188 -remove.end11188: + br label %remove.end11216 +remove.end11216: %t166 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 %t167 = load { ptr, i64, i64 }, ptr %a145 store { ptr, i64, i64 } %t167, ptr %a168 %t169 = call i64 @finch_map_find(ptr %t166, ptr %a168, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t170 = icmp sge i64 %t169, 0 - br i1 %t170, label %remove.hit11189, label %remove.end11190 -remove.hit11189: + br i1 %t170, label %remove.hit11217, label %remove.end11218 +remove.hit11217: %t171 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t166, i32 0, i32 0 %t172 = load ptr, ptr %t171 %t173 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t172, i64 %t169 @@ -112849,8 +113024,8 @@ remove.hit11189: %t175 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 2 call void @finch.drop.S_lsp_Analysis(ptr %t175) call void @finch_map_remove_at(ptr %t166, i64 %t169, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) - br label %remove.end11190 -remove.end11190: + br label %remove.end11218 +remove.end11218: %t176 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t176, ptr %a177 %t178 = load { ptr, i64, i64 }, ptr %a145 @@ -112858,64 +113033,64 @@ remove.end11190: %t180 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t179) store { ptr, i64, i64 } %t179, ptr %a181 call void @finch_str_drop(ptr %a181) - call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7217, i64 3, i64 0 }, %S.json.Json %t180) + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7232, i64 3, i64 0 }, %S.json.Json %t180) store %S.json.Json %t180, ptr %a182 call void @finch.drop.S_json_Json(ptr %a182) %t183 = call %S.json.Json @finch.json.new_list() - call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7218, i64 11, i64 0 }, %S.json.Json %t183) + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7233, i64 11, i64 0 }, %S.json.Json %t183) store %S.json.Json %t183, ptr %a184 call void @finch.drop.S_json_Json(ptr %a184) %t185 = load %S.json.Json, ptr %a177 - call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7219, i64 31, i64 0 }, %S.json.Json %t185) + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7234, i64 31, i64 0 }, %S.json.Json %t185) call void @finch.drop.S_json_Json(ptr %a177) call void @finch_str_drop(ptr %a145) - br label %match.end11160 -match.next11184: + br label %match.end11188 +match.next11212: store { ptr, i64, i64 } %t10, ptr %a186 - store { ptr, i64, i64 } { ptr @.str.7220, i64 18, i64 0 }, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.7235, i64 18, i64 0 }, ptr %a187 %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) %t189 = icmp ne i32 %t188, 0 - br i1 %t189, label %match.arm11191, label %match.or11193 -match.or11193: + br i1 %t189, label %match.arm11219, label %match.or11221 +match.or11221: store { ptr, i64, i64 } %t10, ptr %a190 - store { ptr, i64, i64 } { ptr @.str.7221, i64 23, i64 0 }, ptr %a191 + store { ptr, i64, i64 } { ptr @.str.7236, i64 23, i64 0 }, ptr %a191 %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) %t193 = icmp ne i32 %t192, 0 - br i1 %t193, label %match.arm11191, label %match.or11194 -match.or11194: + br i1 %t193, label %match.arm11219, label %match.or11222 +match.or11222: store { ptr, i64, i64 } %t10, ptr %a194 - store { ptr, i64, i64 } { ptr @.str.7222, i64 23, i64 0 }, ptr %a195 + store { ptr, i64, i64 } { ptr @.str.7237, i64 23, i64 0 }, ptr %a195 %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) %t197 = icmp ne i32 %t196, 0 - br i1 %t197, label %match.arm11191, label %match.or11195 -match.or11195: + br i1 %t197, label %match.arm11219, label %match.or11223 +match.or11223: store { ptr, i64, i64 } %t10, ptr %a198 - store { ptr, i64, i64 } { ptr @.str.7223, i64 27, i64 0 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.7238, i64 27, i64 0 }, ptr %a199 %t200 = call i32 @finch_str_eq(ptr %a198, ptr %a199) %t201 = icmp ne i32 %t200, 0 - br i1 %t201, label %match.arm11191, label %match.or11196 -match.or11196: + br i1 %t201, label %match.arm11219, label %match.or11224 +match.or11224: store { ptr, i64, i64 } %t10, ptr %a202 - store { ptr, i64, i64 } { ptr @.str.7224, i64 26, i64 0 }, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.7239, i64 26, i64 0 }, ptr %a203 %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) %t205 = icmp ne i32 %t204, 0 - br i1 %t205, label %match.arm11191, label %match.next11192 -match.arm11191: + br i1 %t205, label %match.arm11219, label %match.next11220 +match.arm11219: %t206 = load %S.json.Json, ptr %a7 %t207 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t206) store { ptr, i64, i64 } %t207, ptr %a208 - %t209 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7225, i64 8, i64 0 }) + %t209 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7240, i64 8, i64 0 }) store %S.json.Json %t209, ptr %a210 - %t211 = call %S.json.Json @finch.json.Json.get(ptr %a210, { ptr, i64, i64 } { ptr @.str.7226, i64 4, i64 0 }) + %t211 = call %S.json.Json @finch.json.Json.get(ptr %a210, { ptr, i64, i64 } { ptr @.str.7241, i64 4, i64 0 }) call void @finch.drop.S_json_Json(ptr %a210) store %S.json.Json %t211, ptr %a212 %t213 = call i64 @finch.json.Json.int_or(ptr %a212, i64 0) call void @finch.drop.S_json_Json(ptr %a212) %t214 = add i64 %t213, 1 store i64 %t214, ptr %a215 - %t216 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7227, i64 8, i64 0 }) + %t216 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7242, i64 8, i64 0 }) store %S.json.Json %t216, ptr %a217 - %t218 = call %S.json.Json @finch.json.Json.get(ptr %a217, { ptr, i64, i64 } { ptr @.str.7228, i64 9, i64 0 }) + %t218 = call %S.json.Json @finch.json.Json.get(ptr %a217, { ptr, i64, i64 } { ptr @.str.7243, i64 9, i64 0 }) call void @finch.drop.S_json_Json(ptr %a217) store %S.json.Json %t218, ptr %a219 %t220 = call i64 @finch.json.Json.int_or(ptr %a219, i64 0) @@ -112928,8 +113103,8 @@ match.arm11191: %t226 = call i64 @finch_map_find(ptr %t223, ptr %a225, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t227 = icmp sge i64 %t226, 0 %t228 = xor i1 %t227, true - br i1 %t228, label %then11197, label %endif11199 -then11197: + br i1 %t228, label %then11225, label %endif11227 +then11225: %t229 = load %S.json.Json, ptr %a9 %t230 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t229, %S.json.Json %t230) @@ -112940,20 +113115,20 @@ then11197: call void @finch.drop.S_json_Json(ptr %a7) call void @finch_str_drop(ptr %a5) ret void -endif11199: +endif11227: %t232 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 %t233 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t233, ptr %a234 %t235 = call i64 @finch_map_find(ptr %t232, ptr %a234, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t236 = icmp slt i64 %t235, 0 - br i1 %t236, label %map.missing11200, label %map.found11201 -map.missing11200: + br i1 %t236, label %map.missing11228, label %map.found11229 +map.missing11228: store { ptr, i64, i64 } zeroinitializer, ptr %a237 store { ptr, i64, i64 } %t233, ptr %a238 call void @finch_buf_str(ptr %a237, ptr %a238, i32 1) - call void @finch_map_missing(ptr @.str.7229, i64 842, ptr %a237) + call void @finch_map_missing(ptr @.str.7244, i64 842, ptr %a237) unreachable -map.found11201: +map.found11229: %t239 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t232, i32 0, i32 0 %t240 = load ptr, ptr %t239 %t241 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t240, i64 %t235 @@ -112963,27 +113138,27 @@ map.found11201: call void @finch.copy.S_lsp_Analysis(ptr %a245, ptr %a244) %t246 = load %S.lsp.Analysis, ptr %a245 store %S.lsp.Analysis %t246, ptr %a247 - store { ptr, i64, i64 } { ptr @.str.7230, i64 0, i64 0 }, ptr %a248 + store { ptr, i64, i64 } { ptr @.str.7245, i64 0, i64 0 }, ptr %a248 %t249 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t250 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t250, ptr %a251 %t252 = call i64 @finch_map_find(ptr %t249, ptr %a251, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t253 = icmp sge i64 %t252, 0 - br i1 %t253, label %then11202, label %endif11204 -then11202: + br i1 %t253, label %then11230, label %endif11232 +then11230: %t254 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 %t255 = load { ptr, i64, i64 }, ptr %a208 store { ptr, i64, i64 } %t255, ptr %a256 %t257 = call i64 @finch_map_find(ptr %t254, ptr %a256, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) %t258 = icmp slt i64 %t257, 0 - br i1 %t258, label %map.missing11205, label %map.found11206 -map.missing11205: + br i1 %t258, label %map.missing11233, label %map.found11234 +map.missing11233: store { ptr, i64, i64 } zeroinitializer, ptr %a259 store { ptr, i64, i64 } %t255, ptr %a260 call void @finch_buf_str(ptr %a259, ptr %a260, i32 1) - call void @finch_map_missing(ptr @.str.7231, i64 845, ptr %a259) + call void @finch_map_missing(ptr @.str.7246, i64 845, ptr %a259) unreachable -map.found11206: +map.found11234: %t261 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t254, i32 0, i32 0 %t262 = load ptr, ptr %t261 %t263 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t262, i64 %t257 @@ -112996,15 +113171,15 @@ map.found11206: store { ptr, i64, i64 } %t268, ptr %a248 store { ptr, i64, i64 } %t269, ptr %a270 call void @finch_str_drop(ptr %a270) - br label %endif11204 -endif11204: + br label %endif11232 +endif11232: %t271 = load { ptr, i64, i64 }, ptr %a5 store { ptr, i64, i64 } %t271, ptr %a272 - store { ptr, i64, i64 } { ptr @.str.7232, i64 18, i64 0 }, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.7247, i64 18, i64 0 }, ptr %a273 %t274 = call i32 @finch_str_eq(ptr %a272, ptr %a273) %t275 = icmp ne i32 %t274, 0 - br i1 %t275, label %match.arm11208, label %match.next11209 -match.arm11208: + br i1 %t275, label %match.arm11236, label %match.next11237 +match.arm11236: %t276 = load %S.json.Json, ptr %a9 %t277 = load %S.lsp.Analysis, ptr %a247 %t278 = load { ptr, i64, i64 }, ptr %a208 @@ -113014,14 +113189,14 @@ match.arm11208: call void @finch.lsp.reply(%S.json.Json %t276, %S.json.Json %t281) store %S.json.Json %t281, ptr %a282 call void @finch.drop.S_json_Json(ptr %a282) - br label %match.end11207 -match.next11209: + br label %match.end11235 +match.next11237: store { ptr, i64, i64 } %t271, ptr %a283 - store { ptr, i64, i64 } { ptr @.str.7233, i64 23, i64 0 }, ptr %a284 + store { ptr, i64, i64 } { ptr @.str.7248, i64 23, i64 0 }, ptr %a284 %t285 = call i32 @finch_str_eq(ptr %a283, ptr %a284) %t286 = icmp ne i32 %t285, 0 - br i1 %t286, label %match.arm11210, label %match.next11211 -match.arm11210: + br i1 %t286, label %match.arm11238, label %match.next11239 +match.arm11238: %t287 = load %S.json.Json, ptr %a9 %t288 = load %S.lsp.Analysis, ptr %a247 %t289 = load { ptr, i64, i64 }, ptr %a208 @@ -113031,14 +113206,14 @@ match.arm11210: call void @finch.lsp.reply(%S.json.Json %t287, %S.json.Json %t292) store %S.json.Json %t292, ptr %a293 call void @finch.drop.S_json_Json(ptr %a293) - br label %match.end11207 -match.next11211: + br label %match.end11235 +match.next11239: store { ptr, i64, i64 } %t271, ptr %a294 - store { ptr, i64, i64 } { ptr @.str.7234, i64 23, i64 0 }, ptr %a295 + store { ptr, i64, i64 } { ptr @.str.7249, i64 23, i64 0 }, ptr %a295 %t296 = call i32 @finch_str_eq(ptr %a294, ptr %a295) %t297 = icmp ne i32 %t296, 0 - br i1 %t297, label %match.arm11212, label %match.next11213 -match.arm11212: + br i1 %t297, label %match.arm11240, label %match.next11241 +match.arm11240: %t298 = load %S.json.Json, ptr %a9 %t299 = load %S.lsp.Analysis, ptr %a247 %t300 = load { ptr, i64, i64 }, ptr %a248 @@ -113049,14 +113224,14 @@ match.arm11212: call void @finch.lsp.reply(%S.json.Json %t298, %S.json.Json %t304) store %S.json.Json %t304, ptr %a305 call void @finch.drop.S_json_Json(ptr %a305) - br label %match.end11207 -match.next11213: + br label %match.end11235 +match.next11241: store { ptr, i64, i64 } %t271, ptr %a306 - store { ptr, i64, i64 } { ptr @.str.7235, i64 27, i64 0 }, ptr %a307 + store { ptr, i64, i64 } { ptr @.str.7250, i64 27, i64 0 }, ptr %a307 %t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307) %t309 = icmp ne i32 %t308, 0 - br i1 %t309, label %match.arm11214, label %match.next11215 -match.arm11214: + br i1 %t309, label %match.arm11242, label %match.next11243 +match.arm11242: %t310 = load %S.json.Json, ptr %a9 %t311 = load %S.lsp.Analysis, ptr %a247 %t312 = load { ptr, i64, i64 }, ptr %a208 @@ -113064,10 +113239,10 @@ match.arm11214: call void @finch.lsp.reply(%S.json.Json %t310, %S.json.Json %t313) store %S.json.Json %t313, ptr %a314 call void @finch.drop.S_json_Json(ptr %a314) - br label %match.end11207 -match.next11215: - br label %match.arm11216 -match.arm11216: + br label %match.end11235 +match.next11243: + br label %match.arm11244 +match.arm11244: %t315 = load %S.json.Json, ptr %a9 %t316 = load %S.lsp.Analysis, ptr %a247 %t317 = load { ptr, i64, i64 }, ptr %a248 @@ -113078,29 +113253,29 @@ match.arm11216: call void @finch.lsp.reply(%S.json.Json %t315, %S.json.Json %t321) store %S.json.Json %t321, ptr %a322 call void @finch.drop.S_json_Json(ptr %a322) - br label %match.end11207 -match.end11207: + br label %match.end11235 +match.end11235: call void @finch_str_drop(ptr %a248) call void @finch.drop.S_lsp_Analysis(ptr %a247) call void @finch_str_drop(ptr %a208) - br label %match.end11160 -match.next11192: - br label %match.arm11218 -match.arm11218: + br label %match.end11188 +match.next11220: + br label %match.arm11246 +match.arm11246: %t323 = getelementptr inbounds %S.json.Json, ptr %a9, i32 0, i32 0 %t324 = load i32, ptr %t323 %t325 = icmp ne i32 %t324, 0 - br i1 %t325, label %then11220, label %endif11222 -then11220: + br i1 %t325, label %then11248, label %endif11250 +then11248: %t326 = load %S.json.Json, ptr %a9 %t327 = call %S.json.Json @finch.json.new_null() call void @finch.lsp.reply(%S.json.Json %t326, %S.json.Json %t327) store %S.json.Json %t327, ptr %a328 call void @finch.drop.S_json_Json(ptr %a328) - br label %endif11222 -endif11222: - br label %match.end11160 -match.end11160: + br label %endif11250 +endif11250: + br label %match.end11188 +match.end11188: call void @finch.drop.S_json_Json(ptr %a9) call void @finch.drop.S_json_Json(ptr %a7) call void @finch_str_drop(ptr %a5) @@ -113113,31 +113288,31 @@ entry: %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 %t2 = load i64, ptr %t1 store i64 0, ptr %a3 - br label %n.cond11228 -n.cond11228: + br label %n.cond11256 +n.cond11256: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, %t2 - br i1 %t5, label %n.body11229, label %n.end11230 -n.body11229: + br i1 %t5, label %n.body11257, label %n.end11258 +n.body11257: %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 %t7 = load ptr, ptr %t6 %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t7, i64 %t4 %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 0 %t10 = load i64, ptr %t9 %t11 = icmp ne i64 %t10, 0 - br i1 %t11, label %entry.live11231, label %entry.next11232 -entry.live11231: + br i1 %t11, label %entry.live11259, label %entry.next11260 +entry.live11259: %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 1 call void @finch_str_drop(ptr %t12) %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 2 call void @finch.drop.S_lsp_Analysis(ptr %t13) - br label %entry.next11232 -entry.next11232: + br label %entry.next11260 +entry.next11260: %t14 = load i64, ptr %a3 %t15 = add i64 %t14, 1 store i64 %t15, ptr %a3 - br label %n.cond11228 -n.end11230: + br label %n.cond11256 +n.end11258: call void @finch_map_free(ptr %a) ret void } @@ -113187,7 +113362,7 @@ entry: %t6 = insertvalue %S.lsp.Server zeroinitializer, { ptr, i64, i64 } %t5, 0 %t7 = call { ptr, i64, i64 } @finch.host.tempDir() store { ptr, i64, i64 } %t7, ptr %a9 - store { ptr, i64, i64 } { ptr @.str.7236, i64 11, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.7251, i64 11, i64 0 }, ptr %a10 call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) store { ptr, i64, i64 } %t7, ptr %a11 call void @finch_str_drop(ptr %a11) @@ -113205,27 +113380,27 @@ entry: %t21 = load { ptr, i64, i64 }, ptr %a16 %t22 = insertvalue %S.lsp.Server %t6, { ptr, i64, i64 } %t21, 1 store %S.lsp.Server %t22, ptr %a23 - br label %while.cond11223 -while.cond11223: - br label %while.body11224 -while.body11224: + br label %while.cond11251 +while.cond11251: + br label %while.body11252 +while.body11252: %t24 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() %t25 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 0 %t26 = xor i1 %t25, true %t27 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 2 %t28 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 1 - br i1 %t26, label %or.failed11226, label %or.ok11227 -or.failed11226: + br i1 %t26, label %or.failed11254, label %or.ok11255 +or.failed11254: store { ptr, i64, i64 } %t27, ptr %a29 call void @finch_str_drop(ptr %a29) - br label %while.end11225 -or.ok11227: + br label %while.end11253 +or.ok11255: store %S.json.Json %t28, ptr %a30 %t31 = load %S.json.Json, ptr %a30 call void @finch.lsp.Server.answer(ptr %a23, %S.json.Json %t31) call void @finch.drop.S_json_Json(ptr %a30) - br label %while.cond11223 -while.end11225: + br label %while.cond11251 +while.end11253: %t32 = getelementptr inbounds %S.lsp.Server, ptr %a23, i32 0, i32 1 %t33 = load { ptr, i64, i64 }, ptr %t32 call void @finch.host.removeTree({ ptr, i64, i64 } %t33) @@ -113304,35 +113479,35 @@ entry: %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t2 = load i32, ptr %t1 %t3 = icmp eq i32 %t2, 4 - br i1 %t3, label %match.arm11234, label %match.or11236 -match.or11236: + br i1 %t3, label %match.arm11262, label %match.or11264 +match.or11264: %t4 = icmp eq i32 %t2, 5 - br i1 %t4, label %match.arm11234, label %match.next11235 -match.arm11234: + br i1 %t4, label %match.arm11262, label %match.next11263 +match.arm11262: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 - br label %match.from11237 -match.from11237: - br label %match.end11233 -match.next11235: + br label %match.from11265 +match.from11265: + br label %match.end11261 +match.next11263: %t8 = icmp eq i32 %t2, 3 - br i1 %t8, label %match.arm11238, label %match.next11239 -match.arm11238: + br i1 %t8, label %match.arm11266, label %match.next11267 +match.arm11266: %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 - br label %match.from11240 -match.from11240: - br label %match.end11233 -match.next11239: - br label %match.arm11241 -match.arm11241: - br label %match.from11243 -match.from11243: - br label %match.end11233 -match.end11233: - %t12 = phi i64 [ %t7, %match.from11237 ], [ %t11, %match.from11240 ], [ 0, %match.from11243 ] + br label %match.from11268 +match.from11268: + br label %match.end11261 +match.next11267: + br label %match.arm11269 +match.arm11269: + br label %match.from11271 +match.from11271: + br label %match.end11261 +match.end11261: + %t12 = phi i64 [ %t7, %match.from11265 ], [ %t11, %match.from11268 ], [ 0, %match.from11271 ] ret i64 %t12 } @@ -113347,10 +113522,10 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 5 - br label %logic.from11244 -logic.from11244: - br i1 %t4, label %logic.rhs11245, label %logic.end11246 -logic.rhs11245: + br label %logic.from11272 +logic.from11272: + br i1 %t4, label %logic.rhs11273, label %logic.end11274 +logic.rhs11273: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load { ptr, i64, i64 }, ptr %a1 @@ -113358,34 +113533,34 @@ logic.rhs11245: %t9 = load i64, ptr %t6 %t10 = load ptr, ptr %t5 store i64 0, ptr %a11 - br label %find.cond11247 -find.cond11247: + br label %find.cond11275 +find.cond11275: %t12 = load i64, ptr %a11 %t13 = icmp slt i64 %t12, %t9 - br i1 %t13, label %find.body11248, label %find.end11251 -find.body11248: + br i1 %t13, label %find.body11276, label %find.end11279 +find.body11276: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 %t15 = load { ptr, i64, i64 }, ptr %t14 store { ptr, i64, i64 } %t15, ptr %a16 store { ptr, i64, i64 } %t7, ptr %a17 %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) %t19 = icmp ne i32 %t18, 0 - br i1 %t19, label %find.hit11249, label %find.next11250 -find.hit11249: + br i1 %t19, label %find.hit11277, label %find.next11278 +find.hit11277: store i64 %t12, ptr %a8 - br label %find.end11251 -find.next11250: + br label %find.end11279 +find.next11278: %t20 = add i64 %t12, 1 store i64 %t20, ptr %a11 - br label %find.cond11247 -find.end11251: + br label %find.cond11275 +find.end11279: %t21 = load i64, ptr %a8 %t22 = icmp sge i64 %t21, 0 - br label %logic.rend11252 -logic.rend11252: - br label %logic.end11246 -logic.end11246: - %t23 = phi i1 [ false, %logic.from11244 ], [ %t22, %logic.rend11252 ] + br label %logic.rend11280 +logic.rend11280: + br label %logic.end11274 +logic.end11274: + %t23 = phi i1 [ false, %logic.from11272 ], [ %t22, %logic.rend11280 ] ret i1 %t23 } @@ -113398,20 +113573,20 @@ entry: %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 %t4 = load i64, ptr %t3 store i64 0, ptr %a5 - br label %n.cond11266 -n.cond11266: + br label %n.cond11294 +n.cond11294: %t6 = load i64, ptr %a5 %t7 = icmp slt i64 %t6, %t4 - br i1 %t7, label %n.body11267, label %n.end11268 -n.body11267: + br i1 %t7, label %n.body11295, label %n.end11296 +n.body11295: %t8 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t6 %t9 = getelementptr inbounds %S.json.Json, ptr %t2, i64 %t6 call void @finch.copy.S_json_Json(ptr %t8, ptr %t9) %t10 = load i64, ptr %a5 %t11 = add i64 %t10, 1 store i64 %t11, ptr %a5 - br label %n.cond11266 -n.end11268: + br label %n.cond11294 +n.end11296: ret void } @@ -113446,11 +113621,11 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp ne i32 %t3, 5 - br i1 %t4, label %then11253, label %endif11255 -then11253: + br i1 %t4, label %then11281, label %endif11283 +then11281: %t5 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t5 -endif11255: +endif11283: %t6 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 %t8 = load { ptr, i64, i64 }, ptr %a1 @@ -113458,46 +113633,46 @@ endif11255: %t10 = load i64, ptr %t7 %t11 = load ptr, ptr %t6 store i64 0, ptr %a12 - br label %find.cond11256 -find.cond11256: + br label %find.cond11284 +find.cond11284: %t13 = load i64, ptr %a12 %t14 = icmp slt i64 %t13, %t10 - br i1 %t14, label %find.body11257, label %find.end11260 -find.body11257: + br i1 %t14, label %find.body11285, label %find.end11288 +find.body11285: %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i64 %t13 %t16 = load { ptr, i64, i64 }, ptr %t15 store { ptr, i64, i64 } %t16, ptr %a17 store { ptr, i64, i64 } %t8, ptr %a18 %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) %t20 = icmp ne i32 %t19, 0 - br i1 %t20, label %find.hit11258, label %find.next11259 -find.hit11258: + br i1 %t20, label %find.hit11286, label %find.next11287 +find.hit11286: store i64 %t13, ptr %a9 - br label %find.end11260 -find.next11259: + br label %find.end11288 +find.next11287: %t21 = add i64 %t13, 1 store i64 %t21, ptr %a12 - br label %find.cond11256 -find.end11260: + br label %find.cond11284 +find.end11288: %t22 = load i64, ptr %a9 store i64 %t22, ptr %a23 %t24 = load i64, ptr %a23 %t25 = icmp slt i64 %t24, 0 - br i1 %t25, label %then11261, label %endif11263 -then11261: + br i1 %t25, label %then11289, label %endif11291 +then11289: %t26 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t26 -endif11263: +endif11291: %t27 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t28 = load i64, ptr %a23 %t29 = load { ptr, i64, i64 }, ptr %t27 %t30 = extractvalue { ptr, i64, i64 } %t29, 1 %t31 = icmp uge i64 %t28, %t30 - br i1 %t31, label %range11264, label %inrange11265 -range11264: - call void @finch_panic_index(ptr @.str.7237, i64 84, i64 %t28, i64 %t30) + br i1 %t31, label %range11292, label %inrange11293 +range11292: + call void @finch_panic_index(ptr @.str.7252, i64 84, i64 %t28, i64 %t30) unreachable -inrange11265: +inrange11293: %t32 = extractvalue { ptr, i64, i64 } %t29, 0 %t33 = getelementptr inbounds %S.json.Json, ptr %t32, i64 %t28 %t34 = load %S.json.Json, ptr %t33 @@ -113516,46 +113691,46 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp ne i32 %t3, 4 - br label %logic.from11269 -logic.from11269: - br i1 %t4, label %logic.end11271, label %logic.rhs11270 -logic.rhs11270: + br label %logic.from11297 +logic.from11297: + br i1 %t4, label %logic.end11299, label %logic.rhs11298 +logic.rhs11298: %t5 = load i64, ptr %a1 %t6 = icmp slt i64 %t5, 0 - br label %logic.rend11272 -logic.rend11272: - br label %logic.end11271 -logic.end11271: - %t7 = phi i1 [ true, %logic.from11269 ], [ %t6, %logic.rend11272 ] - br label %logic.from11273 -logic.from11273: - br i1 %t7, label %logic.end11275, label %logic.rhs11274 -logic.rhs11274: + br label %logic.rend11300 +logic.rend11300: + br label %logic.end11299 +logic.end11299: + %t7 = phi i1 [ true, %logic.from11297 ], [ %t6, %logic.rend11300 ] + br label %logic.from11301 +logic.from11301: + br i1 %t7, label %logic.end11303, label %logic.rhs11302 +logic.rhs11302: %t8 = load i64, ptr %a1 %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = icmp sge i64 %t8, %t11 - br label %logic.rend11276 -logic.rend11276: - br label %logic.end11275 -logic.end11275: - %t13 = phi i1 [ true, %logic.from11273 ], [ %t12, %logic.rend11276 ] - br i1 %t13, label %then11277, label %endif11279 -then11277: + br label %logic.rend11304 +logic.rend11304: + br label %logic.end11303 +logic.end11303: + %t13 = phi i1 [ true, %logic.from11301 ], [ %t12, %logic.rend11304 ] + br i1 %t13, label %then11305, label %endif11307 +then11305: %t14 = call %S.json.Json @finch.json.new_null() ret %S.json.Json %t14 -endif11279: +endif11307: %t15 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t16 = load i64, ptr %a1 %t17 = load { ptr, i64, i64 }, ptr %t15 %t18 = extractvalue { ptr, i64, i64 } %t17, 1 %t19 = icmp uge i64 %t16, %t18 - br i1 %t19, label %range11280, label %inrange11281 -range11280: - call void @finch_panic_index(ptr @.str.7238, i64 92, i64 %t16, i64 %t18) + br i1 %t19, label %range11308, label %inrange11309 +range11308: + call void @finch_panic_index(ptr @.str.7253, i64 92, i64 %t16, i64 %t18) unreachable -inrange11281: +inrange11309: %t20 = extractvalue { ptr, i64, i64 } %t17, 0 %t21 = getelementptr inbounds %S.json.Json, ptr %t20, i64 %t16 %t22 = load %S.json.Json, ptr %t21 @@ -113576,15 +113751,15 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 3 - br i1 %t4, label %then11282, label %endif11284 -then11282: + br i1 %t4, label %then11310, label %endif11312 +then11310: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 %t6 = load { ptr, i64, i64 }, ptr %t5 store { ptr, i64, i64 } %t6, ptr %a7 call void @finch_str_copy(ptr %a8, ptr %a7) %t9 = load { ptr, i64, i64 }, ptr %a8 ret { ptr, i64, i64 } %t9 -endif11284: +endif11312: %t10 = load { ptr, i64, i64 }, ptr %a1 store { ptr, i64, i64 } %t10, ptr %a11 call void @finch_str_copy(ptr %a12, ptr %a11) @@ -113599,12 +113774,12 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 2 - br i1 %t4, label %then11285, label %endif11287 -then11285: + br i1 %t4, label %then11313, label %endif11315 +then11313: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 %t6 = load double, ptr %t5 ret double %t6 -endif11287: +endif11315: %t7 = load double, ptr %a1 ret double %t7 } @@ -113616,13 +113791,13 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 2 - br i1 %t4, label %then11288, label %endif11290 -then11288: + br i1 %t4, label %then11316, label %endif11318 +then11316: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 %t6 = load double, ptr %t5 %t7 = fptosi double %t6 to i64 ret i64 %t7 -endif11290: +endif11318: %t8 = load i64, ptr %a1 ret i64 %t8 } @@ -113634,12 +113809,12 @@ entry: %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 %t3 = load i32, ptr %t2 %t4 = icmp eq i32 %t3, 1 - br i1 %t4, label %then11291, label %endif11293 -then11291: + br i1 %t4, label %then11319, label %endif11321 +then11319: %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 1 %t6 = load i1, ptr %t5 ret i1 %t6 -endif11293: +endif11321: %t7 = load i1, ptr %a1 ret i1 %t7 } @@ -113703,44 +113878,44 @@ entry: %t7 = load i64, ptr %t4 %t8 = load ptr, ptr %t3 store i64 0, ptr %a9 - br label %find.cond11294 -find.cond11294: + br label %find.cond11322 +find.cond11322: %t10 = load i64, ptr %a9 %t11 = icmp slt i64 %t10, %t7 - br i1 %t11, label %find.body11295, label %find.end11298 -find.body11295: + br i1 %t11, label %find.body11323, label %find.end11326 +find.body11323: %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t10 %t13 = load { ptr, i64, i64 }, ptr %t12 store { ptr, i64, i64 } %t13, ptr %a14 store { ptr, i64, i64 } %t5, ptr %a15 %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) %t17 = icmp ne i32 %t16, 0 - br i1 %t17, label %find.hit11296, label %find.next11297 -find.hit11296: + br i1 %t17, label %find.hit11324, label %find.next11325 +find.hit11324: store i64 %t10, ptr %a6 - br label %find.end11298 -find.next11297: + br label %find.end11326 +find.next11325: %t18 = add i64 %t10, 1 store i64 %t18, ptr %a9 - br label %find.cond11294 -find.end11298: + br label %find.cond11322 +find.end11326: %t19 = load i64, ptr %a6 store i64 %t19, ptr %a20 %t21 = load i64, ptr %a20 %t22 = icmp sge i64 %t21, 0 - br i1 %t22, label %then11299, label %endif11301 -then11299: + br i1 %t22, label %then11327, label %endif11329 +then11327: %t23 = load %S.json.Json, ptr %a2 %t24 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 %t25 = load i64, ptr %a20 %t26 = load { ptr, i64, i64 }, ptr %t24 %t27 = extractvalue { ptr, i64, i64 } %t26, 1 %t28 = icmp uge i64 %t25, %t27 - br i1 %t28, label %range11302, label %inrange11303 -range11302: - call void @finch_panic_index(ptr @.str.7239, i64 140, i64 %t25, i64 %t27) + br i1 %t28, label %range11330, label %inrange11331 +range11330: + call void @finch_panic_index(ptr @.str.7254, i64 140, i64 %t25, i64 %t27) unreachable -inrange11303: +inrange11331: %t29 = extractvalue { ptr, i64, i64 } %t26, 0 %t30 = getelementptr inbounds %S.json.Json, ptr %t29, i64 %t25 store %S.json.Json %t23, ptr %a31 @@ -113751,7 +113926,7 @@ inrange11303: store %S.json.Json %t34, ptr %a35 call void @finch.drop.S_json_Json(ptr %a35) ret void -endif11301: +endif11329: %t36 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 %t38 = load { ptr, i64, i64 }, ptr %a1 @@ -113804,20 +113979,20 @@ entry: %t2 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) %t3 = call ptr @finch_alloc(i64 %t2) %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 - store { ptr, i64, i64 } { ptr @.str.7240, i64 1, i64 0 }, ptr %t4 + store { ptr, i64, i64 } { ptr @.str.7255, i64 1, i64 0 }, ptr %t4 %t5 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 %t6 = insertvalue { ptr, i64, i64 } %t5, i64 1, 1 %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 2 store { ptr, i64, i64 } %t7, ptr %a8 store i64 0, ptr %a9 - br label %each.cond11304 -each.cond11304: + br label %each.cond11332 +each.cond11332: %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = load i64, ptr %a9 %t13 = icmp slt i64 %t12, %t11 - br i1 %t13, label %each.body11305, label %each.end11307 -each.body11305: + br i1 %t13, label %each.body11333, label %each.end11335 +each.body11333: %t14 = load ptr, ptr %a1 %t15 = getelementptr inbounds i8, ptr %t14, i64 %t12 %t16 = load i8, ptr %t15 @@ -113827,83 +114002,83 @@ each.body11305: store i64 %t19, ptr %a20 %t21 = load i8, ptr %a17 %t22 = icmp eq i8 %t21, 34 - br i1 %t22, label %then11308, label %else11309 -then11308: + br i1 %t22, label %then11336, label %else11337 +then11336: %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t24 = load i64, ptr %t23 %t25 = add i64 %t24, 1 call void @finch_arr_reserve(ptr %a8, i64 %t25, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t26 = load ptr, ptr %a8 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t24 - store { ptr, i64, i64 } { ptr @.str.7241, i64 2, i64 0 }, ptr %t27 + store { ptr, i64, i64 } { ptr @.str.7256, i64 2, i64 0 }, ptr %t27 store i64 %t25, ptr %t23 - br label %endif11310 -else11309: + br label %endif11338 +else11337: %t28 = load i8, ptr %a17 %t29 = icmp eq i8 %t28, 92 - br i1 %t29, label %then11311, label %else11312 -then11311: + br i1 %t29, label %then11339, label %else11340 +then11339: %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t31, 1 call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %a8 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 - store { ptr, i64, i64 } { ptr @.str.7242, i64 2, i64 0 }, ptr %t34 + store { ptr, i64, i64 } { ptr @.str.7257, i64 2, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 - br label %endif11313 -else11312: + br label %endif11341 +else11340: %t35 = load i8, ptr %a17 %t36 = icmp eq i8 %t35, 10 - br i1 %t36, label %then11314, label %else11315 -then11314: + br i1 %t36, label %then11342, label %else11343 +then11342: %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t38 = load i64, ptr %t37 %t39 = add i64 %t38, 1 call void @finch_arr_reserve(ptr %a8, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a8 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 - store { ptr, i64, i64 } { ptr @.str.7243, i64 2, i64 0 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.7258, i64 2, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 - br label %endif11316 -else11315: + br label %endif11344 +else11343: %t42 = load i8, ptr %a17 %t43 = icmp eq i8 %t42, 13 - br i1 %t43, label %then11317, label %else11318 -then11317: + br i1 %t43, label %then11345, label %else11346 +then11345: %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = add i64 %t45, 1 call void @finch_arr_reserve(ptr %a8, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t47 = load ptr, ptr %a8 %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 - store { ptr, i64, i64 } { ptr @.str.7244, i64 2, i64 0 }, ptr %t48 + store { ptr, i64, i64 } { ptr @.str.7259, i64 2, i64 0 }, ptr %t48 store i64 %t46, ptr %t44 - br label %endif11319 -else11318: + br label %endif11347 +else11346: %t49 = load i8, ptr %a17 %t50 = icmp eq i8 %t49, 9 - br i1 %t50, label %then11320, label %else11321 -then11320: + br i1 %t50, label %then11348, label %else11349 +then11348: %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t52 = load i64, ptr %t51 %t53 = add i64 %t52, 1 call void @finch_arr_reserve(ptr %a8, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t54 = load ptr, ptr %a8 %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 - store { ptr, i64, i64 } { ptr @.str.7245, i64 2, i64 0 }, ptr %t55 + store { ptr, i64, i64 } { ptr @.str.7260, i64 2, i64 0 }, ptr %t55 store i64 %t53, ptr %t51 - br label %endif11322 -else11321: + br label %endif11350 +else11349: %t56 = load i64, ptr %a20 %t57 = icmp slt i64 %t56, 32 - br i1 %t57, label %then11323, label %else11324 -then11323: + br i1 %t57, label %then11351, label %else11352 +then11351: %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t59 = load i64, ptr %a20 %t60 = sdiv i64 %t59, 16 %t61 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t60) - store { ptr, i64, i64 } { ptr @.str.7246, i64 4, i64 0 }, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.7261, i64 4, i64 0 }, ptr %a63 store { ptr, i64, i64 } %t61, ptr %a64 call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) store { ptr, i64, i64 } %t61, ptr %a65 @@ -113927,8 +114102,8 @@ then11323: %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 %t76 store { ptr, i64, i64 } %t75, ptr %t79 store i64 %t77, ptr %t58 - br label %endif11325 -else11324: + br label %endif11353 +else11352: %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t81 = load i8, ptr %a17 call void @finch_str_from_char(ptr %a82, i8 signext %t81) @@ -113940,35 +114115,35 @@ else11324: %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 %t84 store { ptr, i64, i64 } %t83, ptr %t87 store i64 %t85, ptr %t80 - br label %endif11325 -endif11325: - br label %endif11322 -endif11322: - br label %endif11319 -endif11319: - br label %endif11316 -endif11316: - br label %endif11313 -endif11313: - br label %endif11310 -endif11310: - br label %each.step11306 -each.step11306: + br label %endif11353 +endif11353: + br label %endif11350 +endif11350: + br label %endif11347 +endif11347: + br label %endif11344 +endif11344: + br label %endif11341 +endif11341: + br label %endif11338 +endif11338: + br label %each.step11334 +each.step11334: %t88 = load i64, ptr %a9 %t89 = add i64 %t88, 1 store i64 %t89, ptr %a9 - br label %each.cond11304 -each.end11307: + br label %each.cond11332 +each.end11335: %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 %t91 = load i64, ptr %t90 %t92 = add i64 %t91, 1 call void @finch_arr_reserve(ptr %a8, i64 %t92, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t93 = load ptr, ptr %a8 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91 - store { ptr, i64, i64 } { ptr @.str.7247, i64 1, i64 0 }, ptr %t94 + store { ptr, i64, i64 } { ptr @.str.7262, i64 1, i64 0 }, ptr %t94 store i64 %t92, ptr %t90 %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.7248, i64 0, i64 0 }, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.7263, i64 0, i64 0 }, ptr %a96 call void @finch_str_join(ptr %a97, ptr %a8, ptr %a96) %t98 = load { ptr, i64, i64 }, ptr %a97 call void @finch.drop.arr_str(ptr %a8) @@ -113981,16 +114156,16 @@ entry: %a2 = alloca { ptr, i64, i64 }, align 16 %a10 = alloca { ptr, i64, i64 }, align 16 store i64 %p0, ptr %a1 - store { ptr, i64, i64 } { ptr @.str.7249, i64 16, i64 0 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.7264, i64 16, i64 0 }, ptr %a2 %t3 = load i64, ptr %a1 %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = extractvalue { ptr, i64, i64 } %t4, 1 %t6 = icmp uge i64 %t3, %t5 - br i1 %t6, label %range11326, label %inrange11327 -range11326: - call void @finch_panic_index(ptr @.str.7250, i64 175, i64 %t3, i64 %t5) + br i1 %t6, label %range11354, label %inrange11355 +range11354: + call void @finch_panic_index(ptr @.str.7265, i64 175, i64 %t3, i64 %t5) unreachable -inrange11327: +inrange11355: %t7 = extractvalue { ptr, i64, i64 } %t4, 0 %t8 = getelementptr inbounds i8, ptr %t7, i64 %t3 %t9 = load i8, ptr %t8 @@ -114011,37 +114186,37 @@ entry: %t4 = fptosi double %t3 to i64 %t5 = sitofp i64 %t4 to double %t6 = fcmp oeq double %t2, %t5 - br label %logic.from11328 -logic.from11328: - br i1 %t6, label %logic.rhs11329, label %logic.end11330 -logic.rhs11329: + br label %logic.from11356 +logic.from11356: + br i1 %t6, label %logic.rhs11357, label %logic.end11358 +logic.rhs11357: %t7 = load double, ptr %a1 %t8 = fneg double 1000000000000000.0 %t9 = fcmp ogt double %t7, %t8 - br label %logic.rend11331 -logic.rend11331: - br label %logic.end11330 -logic.end11330: - %t10 = phi i1 [ false, %logic.from11328 ], [ %t9, %logic.rend11331 ] - br label %logic.from11332 -logic.from11332: - br i1 %t10, label %logic.rhs11333, label %logic.end11334 -logic.rhs11333: + br label %logic.rend11359 +logic.rend11359: + br label %logic.end11358 +logic.end11358: + %t10 = phi i1 [ false, %logic.from11356 ], [ %t9, %logic.rend11359 ] + br label %logic.from11360 +logic.from11360: + br i1 %t10, label %logic.rhs11361, label %logic.end11362 +logic.rhs11361: %t11 = load double, ptr %a1 %t12 = fcmp olt double %t11, 1000000000000000.0 - br label %logic.rend11335 -logic.rend11335: - br label %logic.end11334 -logic.end11334: - %t13 = phi i1 [ false, %logic.from11332 ], [ %t12, %logic.rend11335 ] - br i1 %t13, label %then11336, label %endif11338 -then11336: + br label %logic.rend11363 +logic.rend11363: + br label %logic.end11362 +logic.end11362: + %t13 = phi i1 [ false, %logic.from11360 ], [ %t12, %logic.rend11363 ] + br i1 %t13, label %then11364, label %endif11366 +then11364: %t14 = load double, ptr %a1 %t15 = fptosi double %t14 to i64 call void @finch_str_from_int(ptr %a16, i64 %t15) %t17 = load { ptr, i64, i64 }, ptr %a16 ret { ptr, i64, i64 } %t17 -endif11338: +endif11366: %t18 = load double, ptr %a1 call void @finch_str_from_float(ptr %a19, double %t18) %t20 = load { ptr, i64, i64 }, ptr %a19 @@ -114110,17 +114285,17 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 store { ptr, i64, i64 } %p2, ptr %a3 store ptr %p3, ptr %a4 - store { ptr, i64, i64 } { ptr @.str.7251, i64 0, i64 0 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.7252, i64 0, i64 0 }, ptr %a6 - store { ptr, i64, i64 } { ptr @.str.7253, i64 1, i64 0 }, ptr %a7 - store { ptr, i64, i64 } { ptr @.str.7254, i64 1, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.7266, i64 0, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7267, i64 0, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7268, i64 1, i64 0 }, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.7269, i64 1, i64 0 }, ptr %a8 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp sgt i64 %t10, 0 - br i1 %t11, label %then11339, label %endif11341 -then11339: + br i1 %t11, label %then11367, label %endif11369 +then11367: %t12 = load { ptr, i64, i64 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.7255, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7270, i64 1, i64 0 }, ptr %a5 store { ptr, i64, i64 } %t12, ptr %a13 call void @finch_str_drop(ptr %a13) %t14 = load { ptr, i64, i64 }, ptr %a3 @@ -114134,23 +114309,23 @@ then11339: store { ptr, i64, i64 } %t20, ptr %a21 call void @finch_str_drop(ptr %a21) %t22 = load { ptr, i64, i64 }, ptr %a8 - store { ptr, i64, i64 } { ptr @.str.7256, i64 2, i64 0 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.7271, i64 2, i64 0 }, ptr %a8 store { ptr, i64, i64 } %t22, ptr %a23 call void @finch_str_drop(ptr %a23) - br label %endif11341 -endif11341: + br label %endif11369 +endif11369: %t24 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 0 %t25 = load i32, ptr %t24 %t26 = icmp eq i32 %t25, 0 - br i1 %t26, label %match.arm11343, label %match.next11344 -match.arm11343: + br i1 %t26, label %match.arm11371, label %match.next11372 +match.arm11371: %t27 = load ptr, ptr %a4 %t28 = icmp eq ptr %t27, null - br i1 %t28, label %panic11345, label %ok11346 -panic11345: - call void @finch_panic(ptr @.str.7257, i64 200, ptr @.str.7258) + br i1 %t28, label %panic11373, label %ok11374 +panic11373: + call void @finch_panic(ptr @.str.7272, i64 200, ptr @.str.7273) unreachable -ok11346: +ok11374: %t29 = getelementptr inbounds %S.json.Writer, ptr %t27, i32 0, i32 0 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 %t31 = load i64, ptr %t30 @@ -114158,24 +114333,24 @@ ok11346: call void @finch_arr_reserve(ptr %t29, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t33 = load ptr, ptr %t29 %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 - store { ptr, i64, i64 } { ptr @.str.7259, i64 4, i64 0 }, ptr %t34 + store { ptr, i64, i64 } { ptr @.str.7274, i64 4, i64 0 }, ptr %t34 store i64 %t32, ptr %t30 - br label %match.end11342 -match.next11344: + br label %match.end11370 +match.next11372: %t35 = icmp eq i32 %t25, 1 - br i1 %t35, label %match.arm11347, label %match.next11348 -match.arm11347: + br i1 %t35, label %match.arm11375, label %match.next11376 +match.arm11375: %t36 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 1 %t37 = load i1, ptr %t36 - br i1 %t37, label %then11349, label %else11350 -then11349: + br i1 %t37, label %then11377, label %else11378 +then11377: %t38 = load ptr, ptr %a4 %t39 = icmp eq ptr %t38, null - br i1 %t39, label %panic11352, label %ok11353 -panic11352: - call void @finch_panic(ptr @.str.7260, i64 203, ptr @.str.7261) + br i1 %t39, label %panic11380, label %ok11381 +panic11380: + call void @finch_panic(ptr @.str.7275, i64 203, ptr @.str.7276) unreachable -ok11353: +ok11381: %t40 = getelementptr inbounds %S.json.Writer, ptr %t38, i32 0, i32 0 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 %t42 = load i64, ptr %t41 @@ -114183,17 +114358,17 @@ ok11353: call void @finch_arr_reserve(ptr %t40, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t44 = load ptr, ptr %t40 %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 - store { ptr, i64, i64 } { ptr @.str.7262, i64 4, i64 0 }, ptr %t45 + store { ptr, i64, i64 } { ptr @.str.7277, i64 4, i64 0 }, ptr %t45 store i64 %t43, ptr %t41 - br label %endif11351 -else11350: + br label %endif11379 +else11378: %t46 = load ptr, ptr %a4 %t47 = icmp eq ptr %t46, null - br i1 %t47, label %panic11354, label %ok11355 -panic11354: - call void @finch_panic(ptr @.str.7263, i64 205, ptr @.str.7264) + br i1 %t47, label %panic11382, label %ok11383 +panic11382: + call void @finch_panic(ptr @.str.7278, i64 205, ptr @.str.7279) unreachable -ok11355: +ok11383: %t48 = getelementptr inbounds %S.json.Writer, ptr %t46, i32 0, i32 0 %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 %t50 = load i64, ptr %t49 @@ -114201,22 +114376,22 @@ ok11355: call void @finch_arr_reserve(ptr %t48, i64 %t51, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t52 = load ptr, ptr %t48 %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t50 - store { ptr, i64, i64 } { ptr @.str.7265, i64 5, i64 0 }, ptr %t53 + store { ptr, i64, i64 } { ptr @.str.7280, i64 5, i64 0 }, ptr %t53 store i64 %t51, ptr %t49 - br label %endif11351 -endif11351: - br label %match.end11342 -match.next11348: + br label %endif11379 +endif11379: + br label %match.end11370 +match.next11376: %t54 = icmp eq i32 %t25, 2 - br i1 %t54, label %match.arm11356, label %match.next11357 -match.arm11356: + br i1 %t54, label %match.arm11384, label %match.next11385 +match.arm11384: %t55 = load ptr, ptr %a4 %t56 = icmp eq ptr %t55, null - br i1 %t56, label %panic11358, label %ok11359 -panic11358: - call void @finch_panic(ptr @.str.7266, i64 208, ptr @.str.7267) + br i1 %t56, label %panic11386, label %ok11387 +panic11386: + call void @finch_panic(ptr @.str.7281, i64 208, ptr @.str.7282) unreachable -ok11359: +ok11387: %t57 = getelementptr inbounds %S.json.Writer, ptr %t55, i32 0, i32 0 %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 %t59 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 2 @@ -114229,18 +114404,18 @@ ok11359: %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62 store { ptr, i64, i64 } %t61, ptr %t65 store i64 %t63, ptr %t58 - br label %match.end11342 -match.next11357: + br label %match.end11370 +match.next11385: %t66 = icmp eq i32 %t25, 3 - br i1 %t66, label %match.arm11360, label %match.next11361 -match.arm11360: + br i1 %t66, label %match.arm11388, label %match.next11389 +match.arm11388: %t67 = load ptr, ptr %a4 %t68 = icmp eq ptr %t67, null - br i1 %t68, label %panic11362, label %ok11363 -panic11362: - call void @finch_panic(ptr @.str.7268, i64 209, ptr @.str.7269) + br i1 %t68, label %panic11390, label %ok11391 +panic11390: + call void @finch_panic(ptr @.str.7283, i64 209, ptr @.str.7284) unreachable -ok11363: +ok11391: %t69 = getelementptr inbounds %S.json.Writer, ptr %t67, i32 0, i32 0 %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 %t71 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 3 @@ -114253,24 +114428,24 @@ ok11363: %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 store { ptr, i64, i64 } %t73, ptr %t77 store i64 %t75, ptr %t70 - br label %match.end11342 -match.next11361: + br label %match.end11370 +match.next11389: %t78 = icmp eq i32 %t25, 4 - br i1 %t78, label %match.arm11364, label %match.next11365 -match.arm11364: + br i1 %t78, label %match.arm11392, label %match.next11393 +match.arm11392: %t79 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 %t81 = load i64, ptr %t80 %t82 = icmp eq i64 %t81, 0 - br i1 %t82, label %then11366, label %endif11368 -then11366: + br i1 %t82, label %then11394, label %endif11396 +then11394: %t83 = load ptr, ptr %a4 %t84 = icmp eq ptr %t83, null - br i1 %t84, label %panic11369, label %ok11370 -panic11369: - call void @finch_panic(ptr @.str.7270, i64 212, ptr @.str.7271) + br i1 %t84, label %panic11397, label %ok11398 +panic11397: + call void @finch_panic(ptr @.str.7285, i64 212, ptr @.str.7286) unreachable -ok11370: +ok11398: %t85 = getelementptr inbounds %S.json.Writer, ptr %t83, i32 0, i32 0 %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 %t87 = load i64, ptr %t86 @@ -114278,25 +114453,25 @@ ok11370: call void @finch_arr_reserve(ptr %t85, i64 %t88, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t89 = load ptr, ptr %t85 %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i64 %t87 - store { ptr, i64, i64 } { ptr @.str.7272, i64 2, i64 0 }, ptr %t90 + store { ptr, i64, i64 } { ptr @.str.7287, i64 2, i64 0 }, ptr %t90 store i64 %t88, ptr %t86 call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a7) call void @finch_str_drop(ptr %a6) call void @finch_str_drop(ptr %a5) ret void -endif11368: +endif11396: %t91 = load ptr, ptr %a4 %t92 = icmp eq ptr %t91, null - br i1 %t92, label %panic11371, label %ok11372 -panic11371: - call void @finch_panic(ptr @.str.7273, i64 215, ptr @.str.7274) + br i1 %t92, label %panic11399, label %ok11400 +panic11399: + call void @finch_panic(ptr @.str.7288, i64 215, ptr @.str.7289) unreachable -ok11372: +ok11400: %t93 = getelementptr inbounds %S.json.Writer, ptr %t91, i32 0, i32 0 %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 %t95 = load { ptr, i64, i64 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.7275, i64 1, i64 0 }, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.7290, i64 1, i64 0 }, ptr %a97 store { ptr, i64, i64 } %t95, ptr %a98 call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) %t99 = load { ptr, i64, i64 }, ptr %a96 @@ -114309,14 +114484,14 @@ ok11372: store i64 %t101, ptr %t94 %t104 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 store i64 0, ptr %a105 - br label %each.cond11373 -each.cond11373: + br label %each.cond11401 +each.cond11401: %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = load i64, ptr %a105 %t109 = icmp slt i64 %t108, %t107 - br i1 %t109, label %each.body11374, label %each.end11376 -each.body11374: + br i1 %t109, label %each.body11402, label %each.end11404 +each.body11402: %t110 = load ptr, ptr %t104 %t111 = getelementptr inbounds %S.json.Json, ptr %t110, i64 %t108 %t112 = load %S.json.Json, ptr %t111 @@ -114324,15 +114499,15 @@ each.body11374: store %S.json.Json %t112, ptr %a114 %t115 = load i64, ptr %a113 %t116 = icmp sgt i64 %t115, 0 - br i1 %t116, label %then11377, label %endif11379 -then11377: + br i1 %t116, label %then11405, label %endif11407 +then11405: %t117 = load ptr, ptr %a4 %t118 = icmp eq ptr %t117, null - br i1 %t118, label %panic11380, label %ok11381 -panic11380: - call void @finch_panic(ptr @.str.7276, i64 218, ptr @.str.7277) + br i1 %t118, label %panic11408, label %ok11409 +panic11408: + call void @finch_panic(ptr @.str.7291, i64 218, ptr @.str.7292) unreachable -ok11381: +ok11409: %t119 = getelementptr inbounds %S.json.Writer, ptr %t117, i32 0, i32 0 %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 %t121 = load { ptr, i64, i64 }, ptr %a7 @@ -114348,15 +114523,15 @@ ok11381: %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i64 %t127 store { ptr, i64, i64 } %t126, ptr %t130 store i64 %t128, ptr %t120 - br label %endif11379 -endif11379: + br label %endif11407 +endif11407: %t131 = load ptr, ptr %a4 %t132 = icmp eq ptr %t131, null - br i1 %t132, label %panic11382, label %ok11383 -panic11382: - call void @finch_panic(ptr @.str.7278, i64 220, ptr @.str.7279) + br i1 %t132, label %panic11410, label %ok11411 +panic11410: + call void @finch_panic(ptr @.str.7293, i64 220, ptr @.str.7294) unreachable -ok11383: +ok11411: %t133 = getelementptr inbounds %S.json.Writer, ptr %t131, i32 0, i32 0 %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 %t135 = load { ptr, i64, i64 }, ptr %a6 @@ -114375,20 +114550,20 @@ ok11383: %t145 = load { ptr, i64, i64 }, ptr %a6 %t146 = load ptr, ptr %a4 call void @finch.json.write(%S.json.Json %t143, { ptr, i64, i64 } %t144, { ptr, i64, i64 } %t145, ptr %t146) - br label %each.step11375 -each.step11375: + br label %each.step11403 +each.step11403: %t147 = load i64, ptr %a105 %t148 = add i64 %t147, 1 store i64 %t148, ptr %a105 - br label %each.cond11373 -each.end11376: + br label %each.cond11401 +each.end11404: %t149 = load ptr, ptr %a4 %t150 = icmp eq ptr %t149, null - br i1 %t150, label %panic11384, label %ok11385 -panic11384: - call void @finch_panic(ptr @.str.7280, i64 223, ptr @.str.7281) + br i1 %t150, label %panic11412, label %ok11413 +panic11412: + call void @finch_panic(ptr @.str.7295, i64 223, ptr @.str.7296) unreachable -ok11385: +ok11413: %t151 = getelementptr inbounds %S.json.Writer, ptr %t149, i32 0, i32 0 %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 %t153 = load { ptr, i64, i64 }, ptr %a5 @@ -114398,7 +114573,7 @@ ok11385: call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) %t158 = load { ptr, i64, i64 }, ptr %a155 store { ptr, i64, i64 } %t158, ptr %a160 - store { ptr, i64, i64 } { ptr @.str.7282, i64 1, i64 0 }, ptr %a161 + store { ptr, i64, i64 } { ptr @.str.7297, i64 1, i64 0 }, ptr %a161 call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) store { ptr, i64, i64 } %t158, ptr %a162 call void @finch_str_drop(ptr %a162) @@ -114410,24 +114585,24 @@ ok11385: %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i64 %t164 store { ptr, i64, i64 } %t163, ptr %t167 store i64 %t165, ptr %t152 - br label %match.end11342 -match.next11365: + br label %match.end11370 +match.next11393: %t168 = icmp eq i32 %t25, 5 - br i1 %t168, label %match.arm11386, label %match.next11387 -match.arm11386: + br i1 %t168, label %match.arm11414, label %match.next11415 +match.arm11414: %t169 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 %t171 = load i64, ptr %t170 %t172 = icmp eq i64 %t171, 0 - br i1 %t172, label %then11388, label %endif11390 -then11388: + br i1 %t172, label %then11416, label %endif11418 +then11416: %t173 = load ptr, ptr %a4 %t174 = icmp eq ptr %t173, null - br i1 %t174, label %panic11391, label %ok11392 -panic11391: - call void @finch_panic(ptr @.str.7283, i64 227, ptr @.str.7284) + br i1 %t174, label %panic11419, label %ok11420 +panic11419: + call void @finch_panic(ptr @.str.7298, i64 227, ptr @.str.7299) unreachable -ok11392: +ok11420: %t175 = getelementptr inbounds %S.json.Writer, ptr %t173, i32 0, i32 0 %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i32 0, i32 1 %t177 = load i64, ptr %t176 @@ -114435,25 +114610,25 @@ ok11392: call void @finch_arr_reserve(ptr %t175, i64 %t178, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t179 = load ptr, ptr %t175 %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t177 - store { ptr, i64, i64 } { ptr @.str.7285, i64 2, i64 0 }, ptr %t180 + store { ptr, i64, i64 } { ptr @.str.7300, i64 2, i64 0 }, ptr %t180 store i64 %t178, ptr %t176 call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a7) call void @finch_str_drop(ptr %a6) call void @finch_str_drop(ptr %a5) ret void -endif11390: +endif11418: %t181 = load ptr, ptr %a4 %t182 = icmp eq ptr %t181, null - br i1 %t182, label %panic11393, label %ok11394 -panic11393: - call void @finch_panic(ptr @.str.7286, i64 230, ptr @.str.7287) + br i1 %t182, label %panic11421, label %ok11422 +panic11421: + call void @finch_panic(ptr @.str.7301, i64 230, ptr @.str.7302) unreachable -ok11394: +ok11422: %t183 = getelementptr inbounds %S.json.Writer, ptr %t181, i32 0, i32 0 %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 %t185 = load { ptr, i64, i64 }, ptr %a5 - store { ptr, i64, i64 } { ptr @.str.7288, i64 1, i64 0 }, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.7303, i64 1, i64 0 }, ptr %a187 store { ptr, i64, i64 } %t185, ptr %a188 call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) %t189 = load { ptr, i64, i64 }, ptr %a186 @@ -114466,14 +114641,14 @@ ok11394: store i64 %t191, ptr %t184 %t194 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 store i64 0, ptr %a195 - br label %each.cond11395 -each.cond11395: + br label %each.cond11423 +each.cond11423: %t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 %t197 = load i64, ptr %t196 %t198 = load i64, ptr %a195 %t199 = icmp slt i64 %t198, %t197 - br i1 %t199, label %each.body11396, label %each.end11398 -each.body11396: + br i1 %t199, label %each.body11424, label %each.end11426 +each.body11424: %t200 = load ptr, ptr %t194 %t201 = getelementptr inbounds %S.json.Json, ptr %t200, i64 %t198 %t202 = load %S.json.Json, ptr %t201 @@ -114481,15 +114656,15 @@ each.body11396: store %S.json.Json %t202, ptr %a204 %t205 = load i64, ptr %a203 %t206 = icmp sgt i64 %t205, 0 - br i1 %t206, label %then11399, label %endif11401 -then11399: + br i1 %t206, label %then11427, label %endif11429 +then11427: %t207 = load ptr, ptr %a4 %t208 = icmp eq ptr %t207, null - br i1 %t208, label %panic11402, label %ok11403 -panic11402: - call void @finch_panic(ptr @.str.7289, i64 233, ptr @.str.7290) + br i1 %t208, label %panic11430, label %ok11431 +panic11430: + call void @finch_panic(ptr @.str.7304, i64 233, ptr @.str.7305) unreachable -ok11403: +ok11431: %t209 = getelementptr inbounds %S.json.Writer, ptr %t207, i32 0, i32 0 %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 %t211 = load { ptr, i64, i64 }, ptr %a7 @@ -114505,15 +114680,15 @@ ok11403: %t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %t219, i64 %t217 store { ptr, i64, i64 } %t216, ptr %t220 store i64 %t218, ptr %t210 - br label %endif11401 -endif11401: + br label %endif11429 +endif11429: %t221 = load ptr, ptr %a4 %t222 = icmp eq ptr %t221, null - br i1 %t222, label %panic11404, label %ok11405 -panic11404: - call void @finch_panic(ptr @.str.7291, i64 235, ptr @.str.7292) + br i1 %t222, label %panic11432, label %ok11433 +panic11432: + call void @finch_panic(ptr @.str.7306, i64 235, ptr @.str.7307) unreachable -ok11405: +ok11433: %t223 = getelementptr inbounds %S.json.Writer, ptr %t221, i32 0, i32 0 %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 %t225 = load { ptr, i64, i64 }, ptr %a6 @@ -114522,11 +114697,11 @@ ok11405: %t228 = load { ptr, i64, i64 }, ptr %t226 %t229 = extractvalue { ptr, i64, i64 } %t228, 1 %t230 = icmp uge i64 %t227, %t229 - br i1 %t230, label %range11406, label %inrange11407 -range11406: - call void @finch_panic_index(ptr @.str.7293, i64 235, i64 %t227, i64 %t229) + br i1 %t230, label %range11434, label %inrange11435 +range11434: + call void @finch_panic_index(ptr @.str.7308, i64 235, i64 %t227, i64 %t229) unreachable -inrange11407: +inrange11435: %t231 = extractvalue { ptr, i64, i64 } %t228, 0 %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i64 %t227 %t233 = load { ptr, i64, i64 }, ptr %t232 @@ -114556,20 +114731,20 @@ inrange11407: %t252 = load { ptr, i64, i64 }, ptr %a6 %t253 = load ptr, ptr %a4 call void @finch.json.write(%S.json.Json %t250, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252, ptr %t253) - br label %each.step11397 -each.step11397: + br label %each.step11425 +each.step11425: %t254 = load i64, ptr %a195 %t255 = add i64 %t254, 1 store i64 %t255, ptr %a195 - br label %each.cond11395 -each.end11398: + br label %each.cond11423 +each.end11426: %t256 = load ptr, ptr %a4 %t257 = icmp eq ptr %t256, null - br i1 %t257, label %panic11408, label %ok11409 -panic11408: - call void @finch_panic(ptr @.str.7294, i64 238, ptr @.str.7295) + br i1 %t257, label %panic11436, label %ok11437 +panic11436: + call void @finch_panic(ptr @.str.7309, i64 238, ptr @.str.7310) unreachable -ok11409: +ok11437: %t258 = getelementptr inbounds %S.json.Writer, ptr %t256, i32 0, i32 0 %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 %t260 = load { ptr, i64, i64 }, ptr %a5 @@ -114579,7 +114754,7 @@ ok11409: call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) %t265 = load { ptr, i64, i64 }, ptr %a262 store { ptr, i64, i64 } %t265, ptr %a267 - store { ptr, i64, i64 } { ptr @.str.7296, i64 1, i64 0 }, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.7311, i64 1, i64 0 }, ptr %a268 call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) store { ptr, i64, i64 } %t265, ptr %a269 call void @finch_str_drop(ptr %a269) @@ -114591,15 +114766,15 @@ ok11409: %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 store { ptr, i64, i64 } %t270, ptr %t274 store i64 %t272, ptr %t259 - br label %match.end11342 -match.next11387: - br i1 true, label %panic11410, label %ok11411 -panic11410: - call void @finch_panic(ptr @.str.7297, i64 199, ptr @.str.7298) + br label %match.end11370 +match.next11415: + br i1 true, label %panic11438, label %ok11439 +panic11438: + call void @finch_panic(ptr @.str.7312, i64 199, ptr @.str.7313) unreachable -ok11411: +ok11439: unreachable -match.end11342: +match.end11370: call void @finch_str_drop(ptr %a8) call void @finch_str_drop(ptr %a7) call void @finch_str_drop(ptr %a6) @@ -114624,10 +114799,10 @@ entry: store %S.json.Json %p0, ptr %a1 store %S.json.Writer zeroinitializer, ptr %a2 %t3 = load %S.json.Json, ptr %a1 - call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7299, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7300, i64 0, i64 0 }, ptr %a2) + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7314, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7315, i64 0, i64 0 }, ptr %a2) %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.7301, i64 0, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7316, i64 0, i64 0 }, ptr %a6 call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 call void @finch.drop.S_json_Writer(ptr %a2) @@ -114643,10 +114818,10 @@ entry: store %S.json.Json %p0, ptr %a1 store %S.json.Writer zeroinitializer, ptr %a2 %t3 = load %S.json.Json, ptr %a1 - call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7302, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.7303, i64 0, i64 0 }, ptr %a2) + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7317, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.7318, i64 0, i64 0 }, ptr %a2) %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.7304, i64 0, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7319, i64 0, i64 0 }, ptr %a6 call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) %t8 = load { ptr, i64, i64 }, ptr %a7 call void @finch.drop.S_json_Writer(ptr %a2) @@ -114679,93 +114854,93 @@ entry: store i64 1, ptr %a3 %t4 = load ptr, ptr %a1 %t5 = icmp eq ptr %t4, null - br i1 %t5, label %panic11412, label %ok11413 -panic11412: - call void @finch_panic(ptr @.str.7305, i64 268, ptr @.str.7306) + br i1 %t5, label %panic11440, label %ok11441 +panic11440: + call void @finch_panic(ptr @.str.7320, i64 268, ptr @.str.7321) unreachable -ok11413: +ok11441: %t6 = getelementptr inbounds %S.json.Reader, ptr %t4, i32 0, i32 1 %t7 = load i64, ptr %t6 store i64 0, ptr %a8 - br label %for.cond11414 -for.cond11414: + br label %for.cond11442 +for.cond11442: %t9 = load i64, ptr %a8 %t10 = icmp slt i64 %t9, %t7 - br i1 %t10, label %for.body11415, label %for.end11417 -for.body11415: + br i1 %t10, label %for.body11443, label %for.end11445 +for.body11443: %t11 = load i64, ptr %a8 %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic11418, label %ok11419 -panic11418: - call void @finch_panic(ptr @.str.7307, i64 269, ptr @.str.7308) + br i1 %t13, label %panic11446, label %ok11447 +panic11446: + call void @finch_panic(ptr @.str.7322, i64 269, ptr @.str.7323) unreachable -ok11419: +ok11447: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = icmp slt i64 %t11, %t16 - br label %logic.from11420 -logic.from11420: - br i1 %t17, label %logic.rhs11421, label %logic.end11422 -logic.rhs11421: + br label %logic.from11448 +logic.from11448: + br i1 %t17, label %logic.rhs11449, label %logic.end11450 +logic.rhs11449: %t18 = load ptr, ptr %a1 %t19 = icmp eq ptr %t18, null - br i1 %t19, label %panic11423, label %ok11424 -panic11423: - call void @finch_panic(ptr @.str.7309, i64 269, ptr @.str.7310) + br i1 %t19, label %panic11451, label %ok11452 +panic11451: + call void @finch_panic(ptr @.str.7324, i64 269, ptr @.str.7325) unreachable -ok11424: +ok11452: %t20 = getelementptr inbounds %S.json.Reader, ptr %t18, i32 0, i32 0 %t21 = load i64, ptr %a8 %t22 = load { ptr, i64, i64 }, ptr %t20 %t23 = extractvalue { ptr, i64, i64 } %t22, 1 %t24 = icmp uge i64 %t21, %t23 - br i1 %t24, label %range11425, label %inrange11426 -range11425: - call void @finch_panic_index(ptr @.str.7311, i64 269, i64 %t21, i64 %t23) + br i1 %t24, label %range11453, label %inrange11454 +range11453: + call void @finch_panic_index(ptr @.str.7326, i64 269, i64 %t21, i64 %t23) unreachable -inrange11426: +inrange11454: %t25 = extractvalue { ptr, i64, i64 } %t22, 0 %t26 = getelementptr inbounds i8, ptr %t25, i64 %t21 %t27 = load i8, ptr %t26 %t28 = icmp eq i8 %t27, 10 - br label %logic.rend11427 -logic.rend11427: - br label %logic.end11422 -logic.end11422: - %t29 = phi i1 [ false, %logic.from11420 ], [ %t28, %logic.rend11427 ] - br i1 %t29, label %then11428, label %else11429 -then11428: + br label %logic.rend11455 +logic.rend11455: + br label %logic.end11450 +logic.end11450: + %t29 = phi i1 [ false, %logic.from11448 ], [ %t28, %logic.rend11455 ] + br i1 %t29, label %then11456, label %else11457 +then11456: %t30 = load i64, ptr %a2 %t31 = add i64 %t30, 1 store i64 %t31, ptr %a2 store i64 1, ptr %a3 - br label %endif11430 -else11429: + br label %endif11458 +else11457: %t32 = load i64, ptr %a3 %t33 = add i64 %t32, 1 store i64 %t33, ptr %a3 - br label %endif11430 -endif11430: - br label %for.step11416 -for.step11416: + br label %endif11458 +endif11458: + br label %for.step11444 +for.step11444: %t34 = load i64, ptr %a8 %t35 = add i64 %t34, 1 store i64 %t35, ptr %a8 - br label %for.cond11414 -for.end11417: + br label %for.cond11442 +for.end11445: %t36 = load i64, ptr %a2 call void @finch_str_from_int(ptr %a37, i64 %t36) %t38 = load { ptr, i64, i64 }, ptr %a37 - store { ptr, i64, i64 } { ptr @.str.7312, i64 5, i64 0 }, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.7327, i64 5, i64 0 }, ptr %a40 store { ptr, i64, i64 } %t38, ptr %a41 call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) store { ptr, i64, i64 } %t38, ptr %a42 call void @finch_str_drop(ptr %a42) %t43 = load { ptr, i64, i64 }, ptr %a39 store { ptr, i64, i64 } %t43, ptr %a45 - store { ptr, i64, i64 } { ptr @.str.7313, i64 9, i64 0 }, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.7328, i64 9, i64 0 }, ptr %a46 call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) store { ptr, i64, i64 } %t43, ptr %a47 call void @finch_str_drop(ptr %a47) @@ -114790,56 +114965,56 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic11431, label %ok11432 -panic11431: - call void @finch_panic(ptr @.str.7314, i64 280, ptr @.str.7315) + br i1 %t3, label %panic11459, label %ok11460 +panic11459: + call void @finch_panic(ptr @.str.7329, i64 280, ptr @.str.7330) unreachable -ok11432: +ok11460: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic11433, label %ok11434 -panic11433: - call void @finch_panic(ptr @.str.7316, i64 280, ptr @.str.7317) + br i1 %t7, label %panic11461, label %ok11462 +panic11461: + call void @finch_panic(ptr @.str.7331, i64 280, ptr @.str.7332) unreachable -ok11434: +ok11462: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp slt i64 %t5, %t10 - br i1 %t11, label %then11435, label %endif11437 -then11435: + br i1 %t11, label %then11463, label %endif11465 +then11463: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic11438, label %ok11439 -panic11438: - call void @finch_panic(ptr @.str.7318, i64 281, ptr @.str.7319) + br i1 %t13, label %panic11466, label %ok11467 +panic11466: + call void @finch_panic(ptr @.str.7333, i64 281, ptr @.str.7334) unreachable -ok11439: +ok11467: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic11440, label %ok11441 -panic11440: - call void @finch_panic(ptr @.str.7320, i64 281, ptr @.str.7321) + br i1 %t16, label %panic11468, label %ok11469 +panic11468: + call void @finch_panic(ptr @.str.7335, i64 281, ptr @.str.7336) unreachable -ok11441: +ok11469: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t14 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range11442, label %inrange11443 -range11442: - call void @finch_panic_index(ptr @.str.7322, i64 281, i64 %t18, i64 %t20) + br i1 %t21, label %range11470, label %inrange11471 +range11470: + call void @finch_panic_index(ptr @.str.7337, i64 281, i64 %t18, i64 %t20) unreachable -inrange11443: +inrange11471: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 %t24 = load i8, ptr %t23 ret i8 %t24 -endif11437: +endif11465: %t25 = trunc i64 0 to i8 ret i8 %t25 } @@ -114848,195 +115023,195 @@ define internal void @finch.json.skip_space(ptr %p0) { entry: %a1 = alloca ptr, align 16 store ptr %p0, ptr %a1 - br label %while.cond11444 -while.cond11444: + br label %while.cond11472 +while.cond11472: %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic11447, label %ok11448 -panic11447: - call void @finch_panic(ptr @.str.7323, i64 287, ptr @.str.7324) + br i1 %t3, label %panic11475, label %ok11476 +panic11475: + call void @finch_panic(ptr @.str.7338, i64 287, ptr @.str.7339) unreachable -ok11448: +ok11476: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic11449, label %ok11450 -panic11449: - call void @finch_panic(ptr @.str.7325, i64 287, ptr @.str.7326) + br i1 %t7, label %panic11477, label %ok11478 +panic11477: + call void @finch_panic(ptr @.str.7340, i64 287, ptr @.str.7341) unreachable -ok11450: +ok11478: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 %t10 = load i64, ptr %t9 %t11 = icmp slt i64 %t5, %t10 - br label %logic.from11451 -logic.from11451: - br i1 %t11, label %logic.rhs11452, label %logic.end11453 -logic.rhs11452: + br label %logic.from11479 +logic.from11479: + br i1 %t11, label %logic.rhs11480, label %logic.end11481 +logic.rhs11480: %t12 = load ptr, ptr %a1 %t13 = icmp eq ptr %t12, null - br i1 %t13, label %panic11454, label %ok11455 -panic11454: - call void @finch_panic(ptr @.str.7327, i64 287, ptr @.str.7328) + br i1 %t13, label %panic11482, label %ok11483 +panic11482: + call void @finch_panic(ptr @.str.7342, i64 287, ptr @.str.7343) unreachable -ok11455: +ok11483: %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic11456, label %ok11457 -panic11456: - call void @finch_panic(ptr @.str.7329, i64 287, ptr @.str.7330) + br i1 %t16, label %panic11484, label %ok11485 +panic11484: + call void @finch_panic(ptr @.str.7344, i64 287, ptr @.str.7345) unreachable -ok11457: +ok11485: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load { ptr, i64, i64 }, ptr %t14 %t20 = extractvalue { ptr, i64, i64 } %t19, 1 %t21 = icmp uge i64 %t18, %t20 - br i1 %t21, label %range11458, label %inrange11459 -range11458: - call void @finch_panic_index(ptr @.str.7331, i64 287, i64 %t18, i64 %t20) + br i1 %t21, label %range11486, label %inrange11487 +range11486: + call void @finch_panic_index(ptr @.str.7346, i64 287, i64 %t18, i64 %t20) unreachable -inrange11459: +inrange11487: %t22 = extractvalue { ptr, i64, i64 } %t19, 0 %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 %t24 = load i8, ptr %t23 %t25 = icmp eq i8 %t24, 32 - br label %logic.from11460 -logic.from11460: - br i1 %t25, label %logic.end11462, label %logic.rhs11461 -logic.rhs11461: + br label %logic.from11488 +logic.from11488: + br i1 %t25, label %logic.end11490, label %logic.rhs11489 +logic.rhs11489: %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic11463, label %ok11464 -panic11463: - call void @finch_panic(ptr @.str.7332, i64 287, ptr @.str.7333) + br i1 %t27, label %panic11491, label %ok11492 +panic11491: + call void @finch_panic(ptr @.str.7347, i64 287, ptr @.str.7348) unreachable -ok11464: +ok11492: %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 0 %t29 = load ptr, ptr %a1 %t30 = icmp eq ptr %t29, null - br i1 %t30, label %panic11465, label %ok11466 -panic11465: - call void @finch_panic(ptr @.str.7334, i64 287, ptr @.str.7335) + br i1 %t30, label %panic11493, label %ok11494 +panic11493: + call void @finch_panic(ptr @.str.7349, i64 287, ptr @.str.7350) unreachable -ok11466: +ok11494: %t31 = getelementptr inbounds %S.json.Reader, ptr %t29, i32 0, i32 1 %t32 = load i64, ptr %t31 %t33 = load { ptr, i64, i64 }, ptr %t28 %t34 = extractvalue { ptr, i64, i64 } %t33, 1 %t35 = icmp uge i64 %t32, %t34 - br i1 %t35, label %range11467, label %inrange11468 -range11467: - call void @finch_panic_index(ptr @.str.7336, i64 287, i64 %t32, i64 %t34) + br i1 %t35, label %range11495, label %inrange11496 +range11495: + call void @finch_panic_index(ptr @.str.7351, i64 287, i64 %t32, i64 %t34) unreachable -inrange11468: +inrange11496: %t36 = extractvalue { ptr, i64, i64 } %t33, 0 %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 %t38 = load i8, ptr %t37 %t39 = icmp eq i8 %t38, 10 - br label %logic.rend11469 -logic.rend11469: - br label %logic.end11462 -logic.end11462: - %t40 = phi i1 [ true, %logic.from11460 ], [ %t39, %logic.rend11469 ] - br label %logic.from11470 -logic.from11470: - br i1 %t40, label %logic.end11472, label %logic.rhs11471 -logic.rhs11471: + br label %logic.rend11497 +logic.rend11497: + br label %logic.end11490 +logic.end11490: + %t40 = phi i1 [ true, %logic.from11488 ], [ %t39, %logic.rend11497 ] + br label %logic.from11498 +logic.from11498: + br i1 %t40, label %logic.end11500, label %logic.rhs11499 +logic.rhs11499: %t41 = load ptr, ptr %a1 %t42 = icmp eq ptr %t41, null - br i1 %t42, label %panic11473, label %ok11474 -panic11473: - call void @finch_panic(ptr @.str.7337, i64 287, ptr @.str.7338) + br i1 %t42, label %panic11501, label %ok11502 +panic11501: + call void @finch_panic(ptr @.str.7352, i64 287, ptr @.str.7353) unreachable -ok11474: +ok11502: %t43 = getelementptr inbounds %S.json.Reader, ptr %t41, i32 0, i32 0 %t44 = load ptr, ptr %a1 %t45 = icmp eq ptr %t44, null - br i1 %t45, label %panic11475, label %ok11476 -panic11475: - call void @finch_panic(ptr @.str.7339, i64 287, ptr @.str.7340) + br i1 %t45, label %panic11503, label %ok11504 +panic11503: + call void @finch_panic(ptr @.str.7354, i64 287, ptr @.str.7355) unreachable -ok11476: +ok11504: %t46 = getelementptr inbounds %S.json.Reader, ptr %t44, i32 0, i32 1 %t47 = load i64, ptr %t46 %t48 = load { ptr, i64, i64 }, ptr %t43 %t49 = extractvalue { ptr, i64, i64 } %t48, 1 %t50 = icmp uge i64 %t47, %t49 - br i1 %t50, label %range11477, label %inrange11478 -range11477: - call void @finch_panic_index(ptr @.str.7341, i64 287, i64 %t47, i64 %t49) + br i1 %t50, label %range11505, label %inrange11506 +range11505: + call void @finch_panic_index(ptr @.str.7356, i64 287, i64 %t47, i64 %t49) unreachable -inrange11478: +inrange11506: %t51 = extractvalue { ptr, i64, i64 } %t48, 0 %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 %t53 = load i8, ptr %t52 %t54 = icmp eq i8 %t53, 9 - br label %logic.rend11479 -logic.rend11479: - br label %logic.end11472 -logic.end11472: - %t55 = phi i1 [ true, %logic.from11470 ], [ %t54, %logic.rend11479 ] - br label %logic.from11480 -logic.from11480: - br i1 %t55, label %logic.end11482, label %logic.rhs11481 -logic.rhs11481: + br label %logic.rend11507 +logic.rend11507: + br label %logic.end11500 +logic.end11500: + %t55 = phi i1 [ true, %logic.from11498 ], [ %t54, %logic.rend11507 ] + br label %logic.from11508 +logic.from11508: + br i1 %t55, label %logic.end11510, label %logic.rhs11509 +logic.rhs11509: %t56 = load ptr, ptr %a1 %t57 = icmp eq ptr %t56, null - br i1 %t57, label %panic11483, label %ok11484 -panic11483: - call void @finch_panic(ptr @.str.7342, i64 287, ptr @.str.7343) + br i1 %t57, label %panic11511, label %ok11512 +panic11511: + call void @finch_panic(ptr @.str.7357, i64 287, ptr @.str.7358) unreachable -ok11484: +ok11512: %t58 = getelementptr inbounds %S.json.Reader, ptr %t56, i32 0, i32 0 %t59 = load ptr, ptr %a1 %t60 = icmp eq ptr %t59, null - br i1 %t60, label %panic11485, label %ok11486 -panic11485: - call void @finch_panic(ptr @.str.7344, i64 287, ptr @.str.7345) + br i1 %t60, label %panic11513, label %ok11514 +panic11513: + call void @finch_panic(ptr @.str.7359, i64 287, ptr @.str.7360) unreachable -ok11486: +ok11514: %t61 = getelementptr inbounds %S.json.Reader, ptr %t59, i32 0, i32 1 %t62 = load i64, ptr %t61 %t63 = load { ptr, i64, i64 }, ptr %t58 %t64 = extractvalue { ptr, i64, i64 } %t63, 1 %t65 = icmp uge i64 %t62, %t64 - br i1 %t65, label %range11487, label %inrange11488 -range11487: - call void @finch_panic_index(ptr @.str.7346, i64 287, i64 %t62, i64 %t64) + br i1 %t65, label %range11515, label %inrange11516 +range11515: + call void @finch_panic_index(ptr @.str.7361, i64 287, i64 %t62, i64 %t64) unreachable -inrange11488: +inrange11516: %t66 = extractvalue { ptr, i64, i64 } %t63, 0 %t67 = getelementptr inbounds i8, ptr %t66, i64 %t62 %t68 = load i8, ptr %t67 %t69 = icmp eq i8 %t68, 13 - br label %logic.rend11489 -logic.rend11489: - br label %logic.end11482 -logic.end11482: - %t70 = phi i1 [ true, %logic.from11480 ], [ %t69, %logic.rend11489 ] - br label %logic.rend11490 -logic.rend11490: - br label %logic.end11453 -logic.end11453: - %t71 = phi i1 [ false, %logic.from11451 ], [ %t70, %logic.rend11490 ] - br i1 %t71, label %while.body11445, label %while.end11446 -while.body11445: + br label %logic.rend11517 +logic.rend11517: + br label %logic.end11510 +logic.end11510: + %t70 = phi i1 [ true, %logic.from11508 ], [ %t69, %logic.rend11517 ] + br label %logic.rend11518 +logic.rend11518: + br label %logic.end11481 +logic.end11481: + %t71 = phi i1 [ false, %logic.from11479 ], [ %t70, %logic.rend11518 ] + br i1 %t71, label %while.body11473, label %while.end11474 +while.body11473: %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null - br i1 %t73, label %panic11491, label %ok11492 -panic11491: - call void @finch_panic(ptr @.str.7347, i64 288, ptr @.str.7348) + br i1 %t73, label %panic11519, label %ok11520 +panic11519: + call void @finch_panic(ptr @.str.7362, i64 288, ptr @.str.7363) unreachable -ok11492: +ok11520: %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = add i64 %t75, 1 store i64 %t76, ptr %t74 - br label %while.cond11444 -while.end11446: + br label %while.cond11472 +while.end11474: ret void } @@ -115090,33 +115265,33 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic11493, label %ok11494 -panic11493: - call void @finch_panic(ptr @.str.7349, i64 293, ptr @.str.7350) + br i1 %t4, label %panic11521, label %ok11522 +panic11521: + call void @finch_panic(ptr @.str.7364, i64 293, ptr @.str.7365) unreachable -ok11494: +ok11522: %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 1 %t6 = load i64, ptr %t5 %t7 = load ptr, ptr %a1 %t8 = icmp eq ptr %t7, null - br i1 %t8, label %panic11495, label %ok11496 -panic11495: - call void @finch_panic(ptr @.str.7351, i64 293, ptr @.str.7352) + br i1 %t8, label %panic11523, label %ok11524 +panic11523: + call void @finch_panic(ptr @.str.7366, i64 293, ptr @.str.7367) unreachable -ok11496: +ok11524: %t9 = getelementptr inbounds %S.json.Reader, ptr %t7, i32 0, i32 0 %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = icmp sge i64 %t6, %t11 - br i1 %t12, label %then11497, label %endif11499 -then11497: + br i1 %t12, label %then11525, label %endif11527 +then11525: %t13 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } { ptr @.str.7353, i64 26, i64 0 }, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.7368, i64 26, i64 0 }, ptr %a15 store { ptr, i64, i64 } %t13, ptr %a16 call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) %t17 = load { ptr, i64, i64 }, ptr %a14 store { ptr, i64, i64 } %t17, ptr %a19 - store { ptr, i64, i64 } { ptr @.str.7354, i64 12, i64 0 }, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.7369, i64 12, i64 0 }, ptr %a20 call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) store { ptr, i64, i64 } %t17, ptr %a21 call void @finch_str_drop(ptr %a21) @@ -115132,51 +115307,51 @@ then11497: call void @finch_str_drop(ptr %a29) %t30 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t30, ptr %a32 - store { ptr, i64, i64 } { ptr @.str.7355, i64 1, i64 0 }, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.7370, i64 1, i64 0 }, ptr %a33 call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) store { ptr, i64, i64 } %t30, ptr %a34 call void @finch_str_drop(ptr %a34) %t35 = load { ptr, i64, i64 }, ptr %a31 ret { ptr, i64, i64 } %t35 -endif11499: +endif11527: %t36 = load ptr, ptr %a1 %t37 = icmp eq ptr %t36, null - br i1 %t37, label %panic11500, label %ok11501 -panic11500: - call void @finch_panic(ptr @.str.7357, i64 296, ptr @.str.7358) + br i1 %t37, label %panic11528, label %ok11529 +panic11528: + call void @finch_panic(ptr @.str.7372, i64 296, ptr @.str.7373) unreachable -ok11501: +ok11529: %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic11502, label %ok11503 -panic11502: - call void @finch_panic(ptr @.str.7359, i64 296, ptr @.str.7360) + br i1 %t40, label %panic11530, label %ok11531 +panic11530: + call void @finch_panic(ptr @.str.7374, i64 296, ptr @.str.7375) unreachable -ok11503: +ok11531: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = load { ptr, i64, i64 }, ptr %t38 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 %t42, %t44 - br i1 %t45, label %range11504, label %inrange11505 -range11504: - call void @finch_panic_index(ptr @.str.7361, i64 296, i64 %t42, i64 %t44) + br i1 %t45, label %range11532, label %inrange11533 +range11532: + call void @finch_panic_index(ptr @.str.7376, i64 296, i64 %t42, i64 %t44) unreachable -inrange11505: +inrange11533: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 %t48 = load i8, ptr %t47 call void @finch_str_from_char(ptr %a49, i8 signext %t48) %t50 = load { ptr, i64, i64 }, ptr %a49 - store { ptr, i64, i64 } { ptr @.str.7356, i64 13, i64 0 }, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.7371, i64 13, i64 0 }, ptr %a52 store { ptr, i64, i64 } %t50, ptr %a53 call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) store { ptr, i64, i64 } %t50, ptr %a54 call void @finch_str_drop(ptr %a54) %t55 = load { ptr, i64, i64 }, ptr %a51 store { ptr, i64, i64 } %t55, ptr %a57 - store { ptr, i64, i64 } { ptr @.str.7362, i64 8, i64 0 }, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.7377, i64 8, i64 0 }, ptr %a58 call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) store { ptr, i64, i64 } %t55, ptr %a59 call void @finch_str_drop(ptr %a59) @@ -115189,7 +115364,7 @@ inrange11505: call void @finch_str_drop(ptr %a65) %t66 = load { ptr, i64, i64 }, ptr %a62 store { ptr, i64, i64 } %t66, ptr %a68 - store { ptr, i64, i64 } { ptr @.str.7363, i64 12, i64 0 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.7378, i64 12, i64 0 }, ptr %a69 call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) store { ptr, i64, i64 } %t66, ptr %a70 call void @finch_str_drop(ptr %a70) @@ -115205,7 +115380,7 @@ inrange11505: call void @finch_str_drop(ptr %a78) %t79 = load { ptr, i64, i64 }, ptr %a74 store { ptr, i64, i64 } %t79, ptr %a81 - store { ptr, i64, i64 } { ptr @.str.7364, i64 1, i64 0 }, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.7379, i64 1, i64 0 }, ptr %a82 call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) store { ptr, i64, i64 } %t79, ptr %a83 call void @finch_str_drop(ptr %a83) @@ -115226,63 +115401,63 @@ entry: store { ptr, i64, i64 } %p1, ptr %a2 %t3 = load ptr, ptr %a1 %t4 = icmp eq ptr %t3, null - br i1 %t4, label %panic11506, label %ok11507 -panic11506: - call void @finch_panic(ptr @.str.7365, i64 301, ptr @.str.7366) + br i1 %t4, label %panic11534, label %ok11535 +panic11534: + call void @finch_panic(ptr @.str.7380, i64 301, ptr @.str.7381) unreachable -ok11507: +ok11535: %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 0 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 %t7 = load i64, ptr %t6 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic11508, label %ok11509 -panic11508: - call void @finch_panic(ptr @.str.7367, i64 301, ptr @.str.7368) + br i1 %t9, label %panic11536, label %ok11537 +panic11536: + call void @finch_panic(ptr @.str.7382, i64 301, ptr @.str.7383) unreachable -ok11509: +ok11537: %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 %t11 = load i64, ptr %t10 %t12 = sub i64 %t7, %t11 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t12, %t14 - br label %logic.from11510 -logic.from11510: - br i1 %t15, label %logic.rhs11511, label %logic.end11512 -logic.rhs11511: + br label %logic.from11538 +logic.from11538: + br i1 %t15, label %logic.rhs11539, label %logic.end11540 +logic.rhs11539: %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic11513, label %ok11514 -panic11513: - call void @finch_panic(ptr @.str.7369, i64 301, ptr @.str.7370) + br i1 %t17, label %panic11541, label %ok11542 +panic11541: + call void @finch_panic(ptr @.str.7384, i64 301, ptr @.str.7385) unreachable -ok11514: +ok11542: %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 %t19 = load { ptr, i64, i64 }, ptr %t18 store { ptr, i64, i64 } %t19, ptr %a20 %t22 = load ptr, ptr %a1 %t23 = icmp eq ptr %t22, null - br i1 %t23, label %panic11515, label %ok11516 -panic11515: - call void @finch_panic(ptr @.str.7372, i64 301, ptr @.str.7373) + br i1 %t23, label %panic11543, label %ok11544 +panic11543: + call void @finch_panic(ptr @.str.7387, i64 301, ptr @.str.7388) unreachable -ok11516: +ok11544: %t24 = getelementptr inbounds %S.json.Reader, ptr %t22, i32 0, i32 1 %t25 = load i64, ptr %t24 %t26 = load ptr, ptr %a1 %t27 = icmp eq ptr %t26, null - br i1 %t27, label %panic11517, label %ok11518 -panic11517: - call void @finch_panic(ptr @.str.7374, i64 301, ptr @.str.7375) + br i1 %t27, label %panic11545, label %ok11546 +panic11545: + call void @finch_panic(ptr @.str.7389, i64 301, ptr @.str.7390) unreachable -ok11518: +ok11546: %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 1 %t29 = load i64, ptr %t28 %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = add i64 %t29, %t31 - call void @finch_str_sub(ptr %a21, ptr %a20, i64 %t25, i64 %t32, ptr @.str.7371, i64 301) + call void @finch_str_sub(ptr %a21, ptr %a20, i64 %t25, i64 %t32, ptr @.str.7386, i64 301) %t33 = load { ptr, i64, i64 }, ptr %a21 %t34 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } %t33, ptr %a35 @@ -115291,11 +115466,11 @@ ok11518: %t38 = icmp ne i32 %t37, 0 store { ptr, i64, i64 } %t33, ptr %a39 call void @finch_str_drop(ptr %a39) - br label %logic.rend11519 -logic.rend11519: - br label %logic.end11512 -logic.end11512: - %t40 = phi i1 [ false, %logic.from11510 ], [ %t38, %logic.rend11519 ] + br label %logic.rend11547 +logic.rend11547: + br label %logic.end11540 +logic.end11540: + %t40 = phi i1 [ false, %logic.from11538 ], [ %t38, %logic.rend11547 ] ret i1 %t40 } @@ -115317,16 +115492,16 @@ entry: %t4 = load { ptr, i64, i64 }, ptr %a2 %t5 = call i1 @finch.json.comes(ptr %t3, { ptr, i64, i64 } %t4) %t6 = xor i1 %t5, true - br i1 %t6, label %then11520, label %endif11522 -then11520: + br i1 %t6, label %then11548, label %endif11550 +then11548: %t7 = load ptr, ptr %a1 %t8 = load { ptr, i64, i64 }, ptr %a2 - store { ptr, i64, i64 } { ptr @.str.7376, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.7391, i64 1, i64 0 }, ptr %a10 store { ptr, i64, i64 } %t8, ptr %a11 call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) %t12 = load { ptr, i64, i64 }, ptr %a9 store { ptr, i64, i64 } %t12, ptr %a14 - store { ptr, i64, i64 } { ptr @.str.7377, i64 1, i64 0 }, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.7392, i64 1, i64 0 }, ptr %a15 call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) store { ptr, i64, i64 } %t12, ptr %a16 call void @finch_str_drop(ptr %a16) @@ -115336,16 +115511,16 @@ then11520: call void @finch_str_drop(ptr %a19) %t20 = insertvalue { i1, i8, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t18, 2 ret { i1, i8, { ptr, i64, i64 } } %t20 -endif11522: +endif11550: %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic11523, label %ok11524 -panic11523: - call void @finch_panic(ptr @.str.7378, i64 308, ptr @.str.7379) + br i1 %t24, label %panic11551, label %ok11552 +panic11551: + call void @finch_panic(ptr @.str.7393, i64 308, ptr @.str.7394) unreachable -ok11524: +ok11552: %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = add i64 %t26, %t22 @@ -115359,69 +115534,69 @@ entry: store i8 %p0, ptr %a1 %t2 = load i8, ptr %a1 %t3 = icmp uge i8 %t2, 48 - br label %logic.from11525 -logic.from11525: - br i1 %t3, label %logic.rhs11526, label %logic.end11527 -logic.rhs11526: + br label %logic.from11553 +logic.from11553: + br i1 %t3, label %logic.rhs11554, label %logic.end11555 +logic.rhs11554: %t4 = load i8, ptr %a1 %t5 = icmp ule i8 %t4, 57 - br label %logic.rend11528 -logic.rend11528: - br label %logic.end11527 -logic.end11527: - %t6 = phi i1 [ false, %logic.from11525 ], [ %t5, %logic.rend11528 ] - br i1 %t6, label %then11529, label %endif11531 -then11529: + br label %logic.rend11556 +logic.rend11556: + br label %logic.end11555 +logic.end11555: + %t6 = phi i1 [ false, %logic.from11553 ], [ %t5, %logic.rend11556 ] + br i1 %t6, label %then11557, label %endif11559 +then11557: %t7 = load i8, ptr %a1 %t8 = zext i8 %t7 to i64 %t9 = zext i8 48 to i64 %t10 = sub i64 %t8, %t9 ret i64 %t10 -endif11531: +endif11559: %t11 = load i8, ptr %a1 %t12 = icmp uge i8 %t11, 97 - br label %logic.from11532 -logic.from11532: - br i1 %t12, label %logic.rhs11533, label %logic.end11534 -logic.rhs11533: + br label %logic.from11560 +logic.from11560: + br i1 %t12, label %logic.rhs11561, label %logic.end11562 +logic.rhs11561: %t13 = load i8, ptr %a1 %t14 = icmp ule i8 %t13, 102 - br label %logic.rend11535 -logic.rend11535: - br label %logic.end11534 -logic.end11534: - %t15 = phi i1 [ false, %logic.from11532 ], [ %t14, %logic.rend11535 ] - br i1 %t15, label %then11536, label %endif11538 -then11536: + br label %logic.rend11563 +logic.rend11563: + br label %logic.end11562 +logic.end11562: + %t15 = phi i1 [ false, %logic.from11560 ], [ %t14, %logic.rend11563 ] + br i1 %t15, label %then11564, label %endif11566 +then11564: %t16 = load i8, ptr %a1 %t17 = zext i8 %t16 to i64 %t18 = zext i8 97 to i64 %t19 = sub i64 %t17, %t18 %t20 = add i64 %t19, 10 ret i64 %t20 -endif11538: +endif11566: %t21 = load i8, ptr %a1 %t22 = icmp uge i8 %t21, 65 - br label %logic.from11539 -logic.from11539: - br i1 %t22, label %logic.rhs11540, label %logic.end11541 -logic.rhs11540: + br label %logic.from11567 +logic.from11567: + br i1 %t22, label %logic.rhs11568, label %logic.end11569 +logic.rhs11568: %t23 = load i8, ptr %a1 %t24 = icmp ule i8 %t23, 70 - br label %logic.rend11542 -logic.rend11542: - br label %logic.end11541 -logic.end11541: - %t25 = phi i1 [ false, %logic.from11539 ], [ %t24, %logic.rend11542 ] - br i1 %t25, label %then11543, label %endif11545 -then11543: + br label %logic.rend11570 +logic.rend11570: + br label %logic.end11569 +logic.end11569: + %t25 = phi i1 [ false, %logic.from11567 ], [ %t24, %logic.rend11570 ] + br i1 %t25, label %then11571, label %endif11573 +then11571: %t26 = load i8, ptr %a1 %t27 = zext i8 %t26 to i64 %t28 = zext i8 65 to i64 %t29 = sub i64 %t27, %t28 %t30 = add i64 %t29, 10 ret i64 %t30 -endif11545: +endif11573: ret i64 -1 } @@ -115435,8 +115610,8 @@ entry: store { ptr, i64, i64 } zeroinitializer, ptr %a2 %t3 = load i64, ptr %a1 %t4 = icmp slt i64 %t3, 128 - br i1 %t4, label %then11546, label %else11547 -then11546: + br i1 %t4, label %then11574, label %else11575 +then11574: %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t6 = load i64, ptr %a1 %t7 = trunc i64 %t6 to i8 @@ -115447,12 +115622,12 @@ then11546: %t11 = getelementptr inbounds i8, ptr %t10, i64 %t8 store i8 %t7, ptr %t11 store i64 %t9, ptr %t5 - br label %endif11548 -else11547: + br label %endif11576 +else11575: %t12 = load i64, ptr %a1 %t13 = icmp slt i64 %t12, 2048 - br i1 %t13, label %then11549, label %else11550 -then11549: + br i1 %t13, label %then11577, label %else11578 +then11577: %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t15 = load i64, ptr %a1 %t16 = sdiv i64 %t15, 64 @@ -115477,12 +115652,12 @@ then11549: %t31 = getelementptr inbounds i8, ptr %t30, i64 %t28 store i8 %t27, ptr %t31 store i64 %t29, ptr %t23 - br label %endif11551 -else11550: + br label %endif11579 +else11578: %t32 = load i64, ptr %a1 %t33 = icmp slt i64 %t32, 65536 - br i1 %t33, label %then11552, label %else11553 -then11552: + br i1 %t33, label %then11580, label %else11581 +then11580: %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t35 = load i64, ptr %a1 %t36 = sdiv i64 %t35, 4096 @@ -115520,8 +115695,8 @@ then11552: %t61 = getelementptr inbounds i8, ptr %t60, i64 %t58 store i8 %t57, ptr %t61 store i64 %t59, ptr %t53 - br label %endif11554 -else11553: + br label %endif11582 +else11581: %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 %t63 = load i64, ptr %a1 %t64 = sdiv i64 %t63, 262144 @@ -115572,12 +115747,12 @@ else11553: %t99 = getelementptr inbounds i8, ptr %t98, i64 %t96 store i8 %t95, ptr %t99 store i64 %t97, ptr %t91 - br label %endif11554 -endif11554: - br label %endif11551 -endif11551: - br label %endif11548 -endif11548: + br label %endif11582 +endif11582: + br label %endif11579 +endif11579: + br label %endif11576 +endif11576: %t100 = load { ptr, i64, i64 }, ptr %a2 store { ptr, i64, i64 } zeroinitializer, ptr %a101 store { ptr, i64, i64 } %t100, ptr %a102 @@ -115595,105 +115770,105 @@ entry: store ptr %p0, ptr %a1 store i64 0, ptr %a2 store i64 0, ptr %a3 - br label %for.cond11555 -for.cond11555: + br label %for.cond11583 +for.cond11583: %t4 = load i64, ptr %a3 %t5 = icmp slt i64 %t4, 4 - br i1 %t5, label %for.body11556, label %for.end11558 -for.body11556: + br i1 %t5, label %for.body11584, label %for.end11586 +for.body11584: %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic11559, label %ok11560 -panic11559: - call void @finch_panic(ptr @.str.7380, i64 348, ptr @.str.7381) + br i1 %t7, label %panic11587, label %ok11588 +panic11587: + call void @finch_panic(ptr @.str.7395, i64 348, ptr @.str.7396) unreachable -ok11560: +ok11588: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic11561, label %ok11562 -panic11561: - call void @finch_panic(ptr @.str.7382, i64 348, ptr @.str.7383) + br i1 %t11, label %panic11589, label %ok11590 +panic11589: + call void @finch_panic(ptr @.str.7397, i64 348, ptr @.str.7398) unreachable -ok11562: +ok11590: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t9, %t14 - br label %logic.from11563 -logic.from11563: - br i1 %t15, label %logic.end11565, label %logic.rhs11564 -logic.rhs11564: + br label %logic.from11591 +logic.from11591: + br i1 %t15, label %logic.end11593, label %logic.rhs11592 +logic.rhs11592: %t16 = load ptr, ptr %a1 %t17 = icmp eq ptr %t16, null - br i1 %t17, label %panic11566, label %ok11567 -panic11566: - call void @finch_panic(ptr @.str.7384, i64 348, ptr @.str.7385) + br i1 %t17, label %panic11594, label %ok11595 +panic11594: + call void @finch_panic(ptr @.str.7399, i64 348, ptr @.str.7400) unreachable -ok11567: +ok11595: %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null - br i1 %t20, label %panic11568, label %ok11569 -panic11568: - call void @finch_panic(ptr @.str.7386, i64 348, ptr @.str.7387) + br i1 %t20, label %panic11596, label %ok11597 +panic11596: + call void @finch_panic(ptr @.str.7401, i64 348, ptr @.str.7402) unreachable -ok11569: +ok11597: %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 1 %t22 = load i64, ptr %t21 %t23 = load { ptr, i64, i64 }, ptr %t18 %t24 = extractvalue { ptr, i64, i64 } %t23, 1 %t25 = icmp uge i64 %t22, %t24 - br i1 %t25, label %range11570, label %inrange11571 -range11570: - call void @finch_panic_index(ptr @.str.7388, i64 348, i64 %t22, i64 %t24) + br i1 %t25, label %range11598, label %inrange11599 +range11598: + call void @finch_panic_index(ptr @.str.7403, i64 348, i64 %t22, i64 %t24) unreachable -inrange11571: +inrange11599: %t26 = extractvalue { ptr, i64, i64 } %t23, 0 %t27 = getelementptr inbounds i8, ptr %t26, i64 %t22 %t28 = load i8, ptr %t27 %t29 = call i64 @finch.json.hex_value(i8 %t28) %t30 = icmp slt i64 %t29, 0 - br label %logic.rend11572 -logic.rend11572: - br label %logic.end11565 -logic.end11565: - %t31 = phi i1 [ true, %logic.from11563 ], [ %t30, %logic.rend11572 ] - br i1 %t31, label %then11573, label %endif11575 -then11573: + br label %logic.rend11600 +logic.rend11600: + br label %logic.end11593 +logic.end11593: + %t31 = phi i1 [ true, %logic.from11591 ], [ %t30, %logic.rend11600 ] + br i1 %t31, label %then11601, label %endif11603 +then11601: %t32 = load ptr, ptr %a1 - %t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.7389, i64 19, i64 0 }) + %t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.7404, i64 19, i64 0 }) %t34 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t33, 2 ret { i1, i64, { ptr, i64, i64 } } %t34 -endif11575: +endif11603: %t35 = load i64, ptr %a2 %t36 = mul i64 %t35, 16 %t37 = load ptr, ptr %a1 %t38 = icmp eq ptr %t37, null - br i1 %t38, label %panic11576, label %ok11577 -panic11576: - call void @finch_panic(ptr @.str.7390, i64 351, ptr @.str.7391) + br i1 %t38, label %panic11604, label %ok11605 +panic11604: + call void @finch_panic(ptr @.str.7405, i64 351, ptr @.str.7406) unreachable -ok11577: +ok11605: %t39 = getelementptr inbounds %S.json.Reader, ptr %t37, i32 0, i32 0 %t40 = load ptr, ptr %a1 %t41 = icmp eq ptr %t40, null - br i1 %t41, label %panic11578, label %ok11579 -panic11578: - call void @finch_panic(ptr @.str.7392, i64 351, ptr @.str.7393) + br i1 %t41, label %panic11606, label %ok11607 +panic11606: + call void @finch_panic(ptr @.str.7407, i64 351, ptr @.str.7408) unreachable -ok11579: +ok11607: %t42 = getelementptr inbounds %S.json.Reader, ptr %t40, i32 0, i32 1 %t43 = load i64, ptr %t42 %t44 = load { ptr, i64, i64 }, ptr %t39 %t45 = extractvalue { ptr, i64, i64 } %t44, 1 %t46 = icmp uge i64 %t43, %t45 - br i1 %t46, label %range11580, label %inrange11581 -range11580: - call void @finch_panic_index(ptr @.str.7394, i64 351, i64 %t43, i64 %t45) + br i1 %t46, label %range11608, label %inrange11609 +range11608: + call void @finch_panic_index(ptr @.str.7409, i64 351, i64 %t43, i64 %t45) unreachable -inrange11581: +inrange11609: %t47 = extractvalue { ptr, i64, i64 } %t44, 0 %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 %t49 = load i8, ptr %t48 @@ -115702,22 +115877,22 @@ inrange11581: store i64 %t51, ptr %a2 %t52 = load ptr, ptr %a1 %t53 = icmp eq ptr %t52, null - br i1 %t53, label %panic11582, label %ok11583 -panic11582: - call void @finch_panic(ptr @.str.7395, i64 352, ptr @.str.7396) + br i1 %t53, label %panic11610, label %ok11611 +panic11610: + call void @finch_panic(ptr @.str.7410, i64 352, ptr @.str.7411) unreachable -ok11583: +ok11611: %t54 = getelementptr inbounds %S.json.Reader, ptr %t52, i32 0, i32 1 %t55 = load i64, ptr %t54 %t56 = add i64 %t55, 1 store i64 %t56, ptr %t54 - br label %for.step11557 -for.step11557: + br label %for.step11585 +for.step11585: %t57 = load i64, ptr %a3 %t58 = add i64 %t57, 1 store i64 %t58, ptr %a3 - br label %for.cond11555 -for.end11558: + br label %for.cond11583 +for.end11586: %t59 = load i64, ptr %a2 %t60 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t61 = insertvalue { i1, i64, { ptr, i64, i64 } } %t60, i64 %t59, 1 @@ -115777,11 +115952,11 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic11584, label %ok11585 -panic11584: - call void @finch_panic(ptr @.str.7397, i64 358, ptr @.str.7398) + br i1 %t3, label %panic11612, label %ok11613 +panic11612: + call void @finch_panic(ptr @.str.7412, i64 358, ptr @.str.7413) unreachable -ok11585: +ok11613: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 %t6 = add i64 %t5, 1 @@ -115789,50 +115964,50 @@ ok11585: store { ptr, i64, i64 } zeroinitializer, ptr %a7 %t8 = load ptr, ptr %a1 %t9 = icmp eq ptr %t8, null - br i1 %t9, label %panic11586, label %ok11587 -panic11586: - call void @finch_panic(ptr @.str.7399, i64 360, ptr @.str.7400) + br i1 %t9, label %panic11614, label %ok11615 +panic11614: + call void @finch_panic(ptr @.str.7414, i64 360, ptr @.str.7415) unreachable -ok11587: +ok11615: %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 %t11 = load i64, ptr %t10 store i64 %t11, ptr %a12 - br label %while.cond11588 -while.cond11588: - br label %while.body11589 -while.body11589: + br label %while.cond11616 +while.cond11616: + br label %while.body11617 +while.body11617: %t13 = load ptr, ptr %a1 %t14 = icmp eq ptr %t13, null - br i1 %t14, label %panic11591, label %ok11592 -panic11591: - call void @finch_panic(ptr @.str.7401, i64 362, ptr @.str.7402) + br i1 %t14, label %panic11619, label %ok11620 +panic11619: + call void @finch_panic(ptr @.str.7416, i64 362, ptr @.str.7417) unreachable -ok11592: +ok11620: %t15 = getelementptr inbounds %S.json.Reader, ptr %t13, i32 0, i32 1 %t16 = load i64, ptr %t15 %t17 = load ptr, ptr %a1 %t18 = icmp eq ptr %t17, null - br i1 %t18, label %panic11593, label %ok11594 -panic11593: - call void @finch_panic(ptr @.str.7403, i64 362, ptr @.str.7404) + br i1 %t18, label %panic11621, label %ok11622 +panic11621: + call void @finch_panic(ptr @.str.7418, i64 362, ptr @.str.7419) unreachable -ok11594: +ok11622: %t19 = getelementptr inbounds %S.json.Reader, ptr %t17, i32 0, i32 0 %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 %t21 = load i64, ptr %t20 %t22 = icmp sge i64 %t16, %t21 - br i1 %t22, label %then11595, label %endif11597 -then11595: + br i1 %t22, label %then11623, label %endif11625 +then11623: %t23 = load ptr, ptr %a1 %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) - store { ptr, i64, i64 } { ptr @.str.7405, i64 30, i64 0 }, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.7420, i64 30, i64 0 }, ptr %a26 store { ptr, i64, i64 } %t24, ptr %a27 call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) store { ptr, i64, i64 } %t24, ptr %a28 call void @finch_str_drop(ptr %a28) %t29 = load { ptr, i64, i64 }, ptr %a25 store { ptr, i64, i64 } %t29, ptr %a31 - store { ptr, i64, i64 } { ptr @.str.7406, i64 1, i64 0 }, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.7421, i64 1, i64 0 }, ptr %a32 call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) store { ptr, i64, i64 } %t29, ptr %a33 call void @finch_str_drop(ptr %a33) @@ -115840,62 +116015,62 @@ then11595: call void @finch.drop.arr_str(ptr %a7) %t35 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t34, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t35 -endif11597: +endif11625: %t36 = load ptr, ptr %a1 %t37 = icmp eq ptr %t36, null - br i1 %t37, label %panic11598, label %ok11599 -panic11598: - call void @finch_panic(ptr @.str.7407, i64 365, ptr @.str.7408) + br i1 %t37, label %panic11626, label %ok11627 +panic11626: + call void @finch_panic(ptr @.str.7422, i64 365, ptr @.str.7423) unreachable -ok11599: +ok11627: %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic11600, label %ok11601 -panic11600: - call void @finch_panic(ptr @.str.7409, i64 365, ptr @.str.7410) + br i1 %t40, label %panic11628, label %ok11629 +panic11628: + call void @finch_panic(ptr @.str.7424, i64 365, ptr @.str.7425) unreachable -ok11601: +ok11629: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 %t42 = load i64, ptr %t41 %t43 = load { ptr, i64, i64 }, ptr %t38 %t44 = extractvalue { ptr, i64, i64 } %t43, 1 %t45 = icmp uge i64 %t42, %t44 - br i1 %t45, label %range11602, label %inrange11603 -range11602: - call void @finch_panic_index(ptr @.str.7411, i64 365, i64 %t42, i64 %t44) + br i1 %t45, label %range11630, label %inrange11631 +range11630: + call void @finch_panic_index(ptr @.str.7426, i64 365, i64 %t42, i64 %t44) unreachable -inrange11603: +inrange11631: %t46 = extractvalue { ptr, i64, i64 } %t43, 0 %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 %t48 = load i8, ptr %t47 store i8 %t48, ptr %a49 %t50 = load i8, ptr %a49 %t51 = icmp eq i8 %t50, 34 - br i1 %t51, label %then11604, label %endif11606 -then11604: + br i1 %t51, label %then11632, label %endif11634 +then11632: %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t53 = load ptr, ptr %a1 %t54 = icmp eq ptr %t53, null - br i1 %t54, label %panic11607, label %ok11608 -panic11607: - call void @finch_panic(ptr @.str.7412, i64 367, ptr @.str.7413) + br i1 %t54, label %panic11635, label %ok11636 +panic11635: + call void @finch_panic(ptr @.str.7427, i64 367, ptr @.str.7428) unreachable -ok11608: +ok11636: %t55 = getelementptr inbounds %S.json.Reader, ptr %t53, i32 0, i32 0 %t56 = load { ptr, i64, i64 }, ptr %t55 store { ptr, i64, i64 } %t56, ptr %a57 %t59 = load i64, ptr %a12 %t60 = load ptr, ptr %a1 %t61 = icmp eq ptr %t60, null - br i1 %t61, label %panic11609, label %ok11610 -panic11609: - call void @finch_panic(ptr @.str.7415, i64 367, ptr @.str.7416) + br i1 %t61, label %panic11637, label %ok11638 +panic11637: + call void @finch_panic(ptr @.str.7430, i64 367, ptr @.str.7431) unreachable -ok11610: +ok11638: %t62 = getelementptr inbounds %S.json.Reader, ptr %t60, i32 0, i32 1 %t63 = load i64, ptr %t62 - call void @finch_str_sub(ptr %a58, ptr %a57, i64 %t59, i64 %t63, ptr @.str.7414, i64 367) + call void @finch_str_sub(ptr %a58, ptr %a57, i64 %t59, i64 %t63, ptr @.str.7429, i64 367) %t64 = load { ptr, i64, i64 }, ptr %a58 %t65 = load i64, ptr %t52 %t66 = add i64 %t65, 1 @@ -115906,39 +116081,39 @@ ok11610: store i64 %t66, ptr %t52 %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null - br i1 %t70, label %panic11611, label %ok11612 -panic11611: - call void @finch_panic(ptr @.str.7417, i64 368, ptr @.str.7418) + br i1 %t70, label %panic11639, label %ok11640 +panic11639: + call void @finch_panic(ptr @.str.7432, i64 368, ptr @.str.7433) unreachable -ok11612: +ok11640: %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 1 %t72 = load i64, ptr %t71 %t73 = add i64 %t72, 1 store i64 %t73, ptr %t71 %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 - store { ptr, i64, i64 } { ptr @.str.7419, i64 0, i64 0 }, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.7434, i64 0, i64 0 }, ptr %a75 call void @finch_str_join(ptr %a76, ptr %a7, ptr %a75) %t77 = load { ptr, i64, i64 }, ptr %a76 call void @finch.drop.arr_str(ptr %a7) %t78 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t79 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t78, { ptr, i64, i64 } %t77, 1 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t79 -endif11606: +endif11634: %t80 = load i8, ptr %a49 %t81 = zext i8 %t80 to i64 %t82 = icmp slt i64 %t81, 32 - br i1 %t82, label %then11613, label %endif11615 -then11613: + br i1 %t82, label %then11641, label %endif11643 +then11641: %t83 = load ptr, ptr %a1 %t84 = call { ptr, i64, i64 } @finch.json.where(ptr %t83) - store { ptr, i64, i64 } { ptr @.str.7420, i64 55, i64 0 }, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.7435, i64 55, i64 0 }, ptr %a86 store { ptr, i64, i64 } %t84, ptr %a87 call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) store { ptr, i64, i64 } %t84, ptr %a88 call void @finch_str_drop(ptr %a88) %t89 = load { ptr, i64, i64 }, ptr %a85 store { ptr, i64, i64 } %t89, ptr %a91 - store { ptr, i64, i64 } { ptr @.str.7421, i64 1, i64 0 }, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.7436, i64 1, i64 0 }, ptr %a92 call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) store { ptr, i64, i64 } %t89, ptr %a93 call void @finch_str_drop(ptr %a93) @@ -115946,46 +116121,46 @@ then11613: call void @finch.drop.arr_str(ptr %a7) %t95 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t94, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t95 -endif11615: +endif11643: %t96 = load i8, ptr %a49 %t97 = icmp ne i8 %t96, 92 - br i1 %t97, label %then11616, label %endif11618 -then11616: + br i1 %t97, label %then11644, label %endif11646 +then11644: %t98 = load ptr, ptr %a1 %t99 = icmp eq ptr %t98, null - br i1 %t99, label %panic11619, label %ok11620 -panic11619: - call void @finch_panic(ptr @.str.7422, i64 375, ptr @.str.7423) + br i1 %t99, label %panic11647, label %ok11648 +panic11647: + call void @finch_panic(ptr @.str.7437, i64 375, ptr @.str.7438) unreachable -ok11620: +ok11648: %t100 = getelementptr inbounds %S.json.Reader, ptr %t98, i32 0, i32 1 %t101 = load i64, ptr %t100 %t102 = add i64 %t101, 1 store i64 %t102, ptr %t100 - br label %while.cond11588 -endif11618: + br label %while.cond11616 +endif11646: %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null - br i1 %t105, label %panic11621, label %ok11622 -panic11621: - call void @finch_panic(ptr @.str.7424, i64 378, ptr @.str.7425) + br i1 %t105, label %panic11649, label %ok11650 +panic11649: + call void @finch_panic(ptr @.str.7439, i64 378, ptr @.str.7440) unreachable -ok11622: +ok11650: %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 0 %t107 = load { ptr, i64, i64 }, ptr %t106 store { ptr, i64, i64 } %t107, ptr %a108 %t110 = load i64, ptr %a12 %t111 = load ptr, ptr %a1 %t112 = icmp eq ptr %t111, null - br i1 %t112, label %panic11623, label %ok11624 -panic11623: - call void @finch_panic(ptr @.str.7427, i64 378, ptr @.str.7428) + br i1 %t112, label %panic11651, label %ok11652 +panic11651: + call void @finch_panic(ptr @.str.7442, i64 378, ptr @.str.7443) unreachable -ok11624: +ok11652: %t113 = getelementptr inbounds %S.json.Reader, ptr %t111, i32 0, i32 1 %t114 = load i64, ptr %t113 - call void @finch_str_sub(ptr %a109, ptr %a108, i64 %t110, i64 %t114, ptr @.str.7426, i64 378) + call void @finch_str_sub(ptr %a109, ptr %a108, i64 %t110, i64 %t114, ptr @.str.7441, i64 378) %t115 = load { ptr, i64, i64 }, ptr %a109 %t116 = load i64, ptr %t103 %t117 = add i64 %t116, 1 @@ -115996,11 +116171,11 @@ ok11624: store i64 %t117, ptr %t103 %t120 = load ptr, ptr %a1 %t121 = icmp eq ptr %t120, null - br i1 %t121, label %panic11625, label %ok11626 -panic11625: - call void @finch_panic(ptr @.str.7429, i64 379, ptr @.str.7430) + br i1 %t121, label %panic11653, label %ok11654 +panic11653: + call void @finch_panic(ptr @.str.7444, i64 379, ptr @.str.7445) unreachable -ok11626: +ok11654: %t122 = getelementptr inbounds %S.json.Reader, ptr %t120, i32 0, i32 1 %t123 = load i64, ptr %t122 %t124 = add i64 %t123, 1 @@ -116010,61 +116185,61 @@ ok11626: store i8 %t126, ptr %a127 %t128 = load ptr, ptr %a1 %t129 = icmp eq ptr %t128, null - br i1 %t129, label %panic11627, label %ok11628 -panic11627: - call void @finch_panic(ptr @.str.7431, i64 381, ptr @.str.7432) + br i1 %t129, label %panic11655, label %ok11656 +panic11655: + call void @finch_panic(ptr @.str.7446, i64 381, ptr @.str.7447) unreachable -ok11628: +ok11656: %t130 = getelementptr inbounds %S.json.Reader, ptr %t128, i32 0, i32 1 %t131 = load i64, ptr %t130 %t132 = add i64 %t131, 1 store i64 %t132, ptr %t130 %t133 = load i8, ptr %a127 %t134 = icmp eq i8 %t133, 110 - br i1 %t134, label %then11629, label %else11630 -then11629: + br i1 %t134, label %then11657, label %else11658 +then11657: %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t136 = load i64, ptr %t135 %t137 = add i64 %t136, 1 call void @finch_arr_reserve(ptr %a7, i64 %t137, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t138 = load ptr, ptr %a7 %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i64 %t136 - store { ptr, i64, i64 } { ptr @.str.7433, i64 1, i64 0 }, ptr %t139 + store { ptr, i64, i64 } { ptr @.str.7448, i64 1, i64 0 }, ptr %t139 store i64 %t137, ptr %t135 - br label %endif11631 -else11630: + br label %endif11659 +else11658: %t140 = load i8, ptr %a127 %t141 = icmp eq i8 %t140, 116 - br i1 %t141, label %then11632, label %else11633 -then11632: + br i1 %t141, label %then11660, label %else11661 +then11660: %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t143 = load i64, ptr %t142 %t144 = add i64 %t143, 1 call void @finch_arr_reserve(ptr %a7, i64 %t144, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t145 = load ptr, ptr %a7 %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 %t143 - store { ptr, i64, i64 } { ptr @.str.7434, i64 1, i64 0 }, ptr %t146 + store { ptr, i64, i64 } { ptr @.str.7449, i64 1, i64 0 }, ptr %t146 store i64 %t144, ptr %t142 - br label %endif11634 -else11633: + br label %endif11662 +else11661: %t147 = load i8, ptr %a127 %t148 = icmp eq i8 %t147, 114 - br i1 %t148, label %then11635, label %else11636 -then11635: + br i1 %t148, label %then11663, label %else11664 +then11663: %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t150 = load i64, ptr %t149 %t151 = add i64 %t150, 1 call void @finch_arr_reserve(ptr %a7, i64 %t151, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t152 = load ptr, ptr %a7 %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i64 %t150 - store { ptr, i64, i64 } { ptr @.str.7435, i64 1, i64 0 }, ptr %t153 + store { ptr, i64, i64 } { ptr @.str.7450, i64 1, i64 0 }, ptr %t153 store i64 %t151, ptr %t149 - br label %endif11637 -else11636: + br label %endif11665 +else11664: %t154 = load i8, ptr %a127 %t155 = icmp eq i8 %t154, 98 - br i1 %t155, label %then11638, label %else11639 -then11638: + br i1 %t155, label %then11666, label %else11667 +then11666: %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t157 = call { ptr, i64, i64 } @finch.json.utf8(i64 8) %t158 = load i64, ptr %t156 @@ -116074,12 +116249,12 @@ then11638: %t161 = getelementptr inbounds { ptr, i64, i64 }, ptr %t160, i64 %t158 store { ptr, i64, i64 } %t157, ptr %t161 store i64 %t159, ptr %t156 - br label %endif11640 -else11639: + br label %endif11668 +else11667: %t162 = load i8, ptr %a127 %t163 = icmp eq i8 %t162, 102 - br i1 %t163, label %then11641, label %else11642 -then11641: + br i1 %t163, label %then11669, label %else11670 +then11669: %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t165 = call { ptr, i64, i64 } @finch.json.utf8(i64 12) %t166 = load i64, ptr %t164 @@ -116089,34 +116264,34 @@ then11641: %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t168, i64 %t166 store { ptr, i64, i64 } %t165, ptr %t169 store i64 %t167, ptr %t164 - br label %endif11643 -else11642: + br label %endif11671 +else11670: %t170 = load i8, ptr %a127 %t171 = icmp eq i8 %t170, 34 - br label %logic.from11644 -logic.from11644: - br i1 %t171, label %logic.end11646, label %logic.rhs11645 -logic.rhs11645: + br label %logic.from11672 +logic.from11672: + br i1 %t171, label %logic.end11674, label %logic.rhs11673 +logic.rhs11673: %t172 = load i8, ptr %a127 %t173 = icmp eq i8 %t172, 92 - br label %logic.rend11647 -logic.rend11647: - br label %logic.end11646 -logic.end11646: - %t174 = phi i1 [ true, %logic.from11644 ], [ %t173, %logic.rend11647 ] - br label %logic.from11648 -logic.from11648: - br i1 %t174, label %logic.end11650, label %logic.rhs11649 -logic.rhs11649: + br label %logic.rend11675 +logic.rend11675: + br label %logic.end11674 +logic.end11674: + %t174 = phi i1 [ true, %logic.from11672 ], [ %t173, %logic.rend11675 ] + br label %logic.from11676 +logic.from11676: + br i1 %t174, label %logic.end11678, label %logic.rhs11677 +logic.rhs11677: %t175 = load i8, ptr %a127 %t176 = icmp eq i8 %t175, 47 - br label %logic.rend11651 -logic.rend11651: - br label %logic.end11650 -logic.end11650: - %t177 = phi i1 [ true, %logic.from11648 ], [ %t176, %logic.rend11651 ] - br i1 %t177, label %then11652, label %else11653 -then11652: + br label %logic.rend11679 +logic.rend11679: + br label %logic.end11678 +logic.end11678: + %t177 = phi i1 [ true, %logic.from11676 ], [ %t176, %logic.rend11679 ] + br i1 %t177, label %then11680, label %else11681 +then11680: %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t179 = load i8, ptr %a127 call void @finch_str_from_char(ptr %a180, i8 signext %t179) @@ -116128,58 +116303,58 @@ then11652: %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 store { ptr, i64, i64 } %t181, ptr %t185 store i64 %t183, ptr %t178 - br label %endif11654 -else11653: + br label %endif11682 +else11681: %t186 = load i8, ptr %a127 %t187 = icmp eq i8 %t186, 117 - br i1 %t187, label %then11655, label %else11656 -then11655: + br i1 %t187, label %then11683, label %else11684 +then11683: %t188 = load ptr, ptr %a1 %t189 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t188) %t190 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 0 %t191 = xor i1 %t190, true %t192 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 2 %t193 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 1 - br i1 %t191, label %try.failed11658, label %try.ok11659 -try.failed11658: + br i1 %t191, label %try.failed11686, label %try.ok11687 +try.failed11686: call void @finch.drop.arr_str(ptr %a7) %t194 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t192, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t194 -try.ok11659: +try.ok11687: store i64 %t193, ptr %a195 %t196 = load i64, ptr %a195 %t197 = icmp sge i64 %t196, 55296 - br label %logic.from11660 -logic.from11660: - br i1 %t197, label %logic.rhs11661, label %logic.end11662 -logic.rhs11661: + br label %logic.from11688 +logic.from11688: + br i1 %t197, label %logic.rhs11689, label %logic.end11690 +logic.rhs11689: %t198 = load i64, ptr %a195 %t199 = icmp slt i64 %t198, 56320 - br label %logic.rend11663 -logic.rend11663: - br label %logic.end11662 -logic.end11662: - %t200 = phi i1 [ false, %logic.from11660 ], [ %t199, %logic.rend11663 ] - br label %logic.from11664 -logic.from11664: - br i1 %t200, label %logic.rhs11665, label %logic.end11666 -logic.rhs11665: + br label %logic.rend11691 +logic.rend11691: + br label %logic.end11690 +logic.end11690: + %t200 = phi i1 [ false, %logic.from11688 ], [ %t199, %logic.rend11691 ] + br label %logic.from11692 +logic.from11692: + br i1 %t200, label %logic.rhs11693, label %logic.end11694 +logic.rhs11693: %t201 = load ptr, ptr %a1 - %t202 = call i1 @finch.json.comes(ptr %t201, { ptr, i64, i64 } { ptr @.str.7436, i64 2, i64 0 }) - br label %logic.rend11667 -logic.rend11667: - br label %logic.end11666 -logic.end11666: - %t203 = phi i1 [ false, %logic.from11664 ], [ %t202, %logic.rend11667 ] - br i1 %t203, label %then11668, label %endif11670 -then11668: + %t202 = call i1 @finch.json.comes(ptr %t201, { ptr, i64, i64 } { ptr @.str.7451, i64 2, i64 0 }) + br label %logic.rend11695 +logic.rend11695: + br label %logic.end11694 +logic.end11694: + %t203 = phi i1 [ false, %logic.from11692 ], [ %t202, %logic.rend11695 ] + br i1 %t203, label %then11696, label %endif11698 +then11696: %t204 = load ptr, ptr %a1 %t205 = icmp eq ptr %t204, null - br i1 %t205, label %panic11671, label %ok11672 -panic11671: - call void @finch_panic(ptr @.str.7437, i64 398, ptr @.str.7438) + br i1 %t205, label %panic11699, label %ok11700 +panic11699: + call void @finch_panic(ptr @.str.7452, i64 398, ptr @.str.7453) unreachable -ok11672: +ok11700: %t206 = getelementptr inbounds %S.json.Reader, ptr %t204, i32 0, i32 1 %t207 = load i64, ptr %t206 %t208 = add i64 %t207, 2 @@ -116190,12 +116365,12 @@ ok11672: %t212 = xor i1 %t211, true %t213 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 2 %t214 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 1 - br i1 %t212, label %try.failed11673, label %try.ok11674 -try.failed11673: + br i1 %t212, label %try.failed11701, label %try.ok11702 +try.failed11701: call void @finch.drop.arr_str(ptr %a7) %t215 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t213, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t215 -try.ok11674: +try.ok11702: store i64 %t214, ptr %a216 %t217 = load i64, ptr %a195 %t218 = sub i64 %t217, 55296 @@ -116205,8 +116380,8 @@ try.ok11674: %t222 = sub i64 %t221, 56320 %t223 = add i64 %t220, %t222 store i64 %t223, ptr %a195 - br label %endif11670 -endif11670: + br label %endif11698 +endif11698: %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 %t225 = load i64, ptr %a195 %t226 = call { ptr, i64, i64 } @finch.json.utf8(i64 %t225) @@ -116217,19 +116392,19 @@ endif11670: %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i64 %t227 store { ptr, i64, i64 } %t226, ptr %t230 store i64 %t228, ptr %t224 - br label %endif11657 -else11656: + br label %endif11685 +else11684: %t231 = load i8, ptr %a127 call void @finch_str_from_char(ptr %a232, i8 signext %t231) %t233 = load { ptr, i64, i64 }, ptr %a232 - store { ptr, i64, i64 } { ptr @.str.7439, i64 22, i64 0 }, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.7454, i64 22, i64 0 }, ptr %a235 store { ptr, i64, i64 } %t233, ptr %a236 call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) store { ptr, i64, i64 } %t233, ptr %a237 call void @finch_str_drop(ptr %a237) %t238 = load { ptr, i64, i64 }, ptr %a234 store { ptr, i64, i64 } %t238, ptr %a240 - store { ptr, i64, i64 } { ptr @.str.7440, i64 12, i64 0 }, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.7455, i64 12, i64 0 }, ptr %a241 call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) store { ptr, i64, i64 } %t238, ptr %a242 call void @finch_str_drop(ptr %a242) @@ -116245,7 +116420,7 @@ else11656: call void @finch_str_drop(ptr %a250) %t251 = load { ptr, i64, i64 }, ptr %a246 store { ptr, i64, i64 } %t251, ptr %a253 - store { ptr, i64, i64 } { ptr @.str.7441, i64 1, i64 0 }, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.7456, i64 1, i64 0 }, ptr %a254 call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) store { ptr, i64, i64 } %t251, ptr %a255 call void @finch_str_drop(ptr %a255) @@ -116253,30 +116428,30 @@ else11656: call void @finch.drop.arr_str(ptr %a7) %t257 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t256, 2 ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t257 -endif11657: - br label %endif11654 -endif11654: - br label %endif11643 -endif11643: - br label %endif11640 -endif11640: - br label %endif11637 -endif11637: - br label %endif11634 -endif11634: - br label %endif11631 -endif11631: +endif11685: + br label %endif11682 +endif11682: + br label %endif11671 +endif11671: + br label %endif11668 +endif11668: + br label %endif11665 +endif11665: + br label %endif11662 +endif11662: + br label %endif11659 +endif11659: %t258 = load ptr, ptr %a1 %t259 = icmp eq ptr %t258, null - br i1 %t259, label %panic11675, label %ok11676 -panic11675: - call void @finch_panic(ptr @.str.7442, i64 406, ptr @.str.7443) + br i1 %t259, label %panic11703, label %ok11704 +panic11703: + call void @finch_panic(ptr @.str.7457, i64 406, ptr @.str.7458) unreachable -ok11676: +ok11704: %t260 = getelementptr inbounds %S.json.Reader, ptr %t258, i32 0, i32 1 %t261 = load i64, ptr %t260 store i64 %t261, ptr %a12 - br label %while.cond11588 + br label %while.cond11616 } define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %p0) { @@ -116294,356 +116469,356 @@ entry: store ptr %p0, ptr %a1 %t2 = load ptr, ptr %a1 %t3 = icmp eq ptr %t2, null - br i1 %t3, label %panic11677, label %ok11678 -panic11677: - call void @finch_panic(ptr @.str.7444, i64 411, ptr @.str.7445) + br i1 %t3, label %panic11705, label %ok11706 +panic11705: + call void @finch_panic(ptr @.str.7459, i64 411, ptr @.str.7460) unreachable -ok11678: +ok11706: %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 %t5 = load i64, ptr %t4 store i64 %t5, ptr %a6 %t7 = load ptr, ptr %a1 %t8 = call i8 @finch.json.peek(ptr %t7) %t9 = icmp eq i8 %t8, 45 - br i1 %t9, label %then11679, label %endif11681 -then11679: + br i1 %t9, label %then11707, label %endif11709 +then11707: %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic11682, label %ok11683 -panic11682: - call void @finch_panic(ptr @.str.7446, i64 413, ptr @.str.7447) + br i1 %t11, label %panic11710, label %ok11711 +panic11710: + call void @finch_panic(ptr @.str.7461, i64 413, ptr @.str.7462) unreachable -ok11683: +ok11711: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 1 %t13 = load i64, ptr %t12 %t14 = add i64 %t13, 1 store i64 %t14, ptr %t12 - br label %endif11681 -endif11681: - br label %while.cond11684 -while.cond11684: + br label %endif11709 +endif11709: + br label %while.cond11712 +while.cond11712: %t15 = load ptr, ptr %a1 %t16 = icmp eq ptr %t15, null - br i1 %t16, label %panic11687, label %ok11688 -panic11687: - call void @finch_panic(ptr @.str.7448, i64 415, ptr @.str.7449) + br i1 %t16, label %panic11715, label %ok11716 +panic11715: + call void @finch_panic(ptr @.str.7463, i64 415, ptr @.str.7464) unreachable -ok11688: +ok11716: %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 %t18 = load i64, ptr %t17 %t19 = load ptr, ptr %a1 %t20 = icmp eq ptr %t19, null - br i1 %t20, label %panic11689, label %ok11690 -panic11689: - call void @finch_panic(ptr @.str.7450, i64 415, ptr @.str.7451) + br i1 %t20, label %panic11717, label %ok11718 +panic11717: + call void @finch_panic(ptr @.str.7465, i64 415, ptr @.str.7466) unreachable -ok11690: +ok11718: %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 0 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 %t23 = load i64, ptr %t22 %t24 = icmp slt i64 %t18, %t23 - br label %logic.from11691 -logic.from11691: - br i1 %t24, label %logic.rhs11692, label %logic.end11693 -logic.rhs11692: + br label %logic.from11719 +logic.from11719: + br i1 %t24, label %logic.rhs11720, label %logic.end11721 +logic.rhs11720: %t25 = load ptr, ptr %a1 %t26 = icmp eq ptr %t25, null - br i1 %t26, label %panic11694, label %ok11695 -panic11694: - call void @finch_panic(ptr @.str.7452, i64 415, ptr @.str.7453) + br i1 %t26, label %panic11722, label %ok11723 +panic11722: + call void @finch_panic(ptr @.str.7467, i64 415, ptr @.str.7468) unreachable -ok11695: +ok11723: %t27 = getelementptr inbounds %S.json.Reader, ptr %t25, i32 0, i32 0 %t28 = load ptr, ptr %a1 %t29 = icmp eq ptr %t28, null - br i1 %t29, label %panic11696, label %ok11697 -panic11696: - call void @finch_panic(ptr @.str.7454, i64 415, ptr @.str.7455) + br i1 %t29, label %panic11724, label %ok11725 +panic11724: + call void @finch_panic(ptr @.str.7469, i64 415, ptr @.str.7470) unreachable -ok11697: +ok11725: %t30 = getelementptr inbounds %S.json.Reader, ptr %t28, i32 0, i32 1 %t31 = load i64, ptr %t30 %t32 = load { ptr, i64, i64 }, ptr %t27 %t33 = extractvalue { ptr, i64, i64 } %t32, 1 %t34 = icmp uge i64 %t31, %t33 - br i1 %t34, label %range11698, label %inrange11699 -range11698: - call void @finch_panic_index(ptr @.str.7456, i64 415, i64 %t31, i64 %t33) + br i1 %t34, label %range11726, label %inrange11727 +range11726: + call void @finch_panic_index(ptr @.str.7471, i64 415, i64 %t31, i64 %t33) unreachable -inrange11699: +inrange11727: %t35 = extractvalue { ptr, i64, i64 } %t32, 0 %t36 = getelementptr inbounds i8, ptr %t35, i64 %t31 %t37 = load i8, ptr %t36 %t38 = icmp uge i8 %t37, 48 - br label %logic.from11700 -logic.from11700: - br i1 %t38, label %logic.rhs11701, label %logic.end11702 -logic.rhs11701: + br label %logic.from11728 +logic.from11728: + br i1 %t38, label %logic.rhs11729, label %logic.end11730 +logic.rhs11729: %t39 = load ptr, ptr %a1 %t40 = icmp eq ptr %t39, null - br i1 %t40, label %panic11703, label %ok11704 -panic11703: - call void @finch_panic(ptr @.str.7457, i64 415, ptr @.str.7458) + br i1 %t40, label %panic11731, label %ok11732 +panic11731: + call void @finch_panic(ptr @.str.7472, i64 415, ptr @.str.7473) unreachable -ok11704: +ok11732: %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 0 %t42 = load ptr, ptr %a1 %t43 = icmp eq ptr %t42, null - br i1 %t43, label %panic11705, label %ok11706 -panic11705: - call void @finch_panic(ptr @.str.7459, i64 415, ptr @.str.7460) + br i1 %t43, label %panic11733, label %ok11734 +panic11733: + call void @finch_panic(ptr @.str.7474, i64 415, ptr @.str.7475) unreachable -ok11706: +ok11734: %t44 = getelementptr inbounds %S.json.Reader, ptr %t42, i32 0, i32 1 %t45 = load i64, ptr %t44 %t46 = load { ptr, i64, i64 }, ptr %t41 %t47 = extractvalue { ptr, i64, i64 } %t46, 1 %t48 = icmp uge i64 %t45, %t47 - br i1 %t48, label %range11707, label %inrange11708 -range11707: - call void @finch_panic_index(ptr @.str.7461, i64 415, i64 %t45, i64 %t47) + br i1 %t48, label %range11735, label %inrange11736 +range11735: + call void @finch_panic_index(ptr @.str.7476, i64 415, i64 %t45, i64 %t47) unreachable -inrange11708: +inrange11736: %t49 = extractvalue { ptr, i64, i64 } %t46, 0 %t50 = getelementptr inbounds i8, ptr %t49, i64 %t45 %t51 = load i8, ptr %t50 %t52 = icmp ule i8 %t51, 57 - br label %logic.rend11709 -logic.rend11709: - br label %logic.end11702 -logic.end11702: - %t53 = phi i1 [ false, %logic.from11700 ], [ %t52, %logic.rend11709 ] - br label %logic.from11710 -logic.from11710: - br i1 %t53, label %logic.end11712, label %logic.rhs11711 -logic.rhs11711: + br label %logic.rend11737 +logic.rend11737: + br label %logic.end11730 +logic.end11730: + %t53 = phi i1 [ false, %logic.from11728 ], [ %t52, %logic.rend11737 ] + br label %logic.from11738 +logic.from11738: + br i1 %t53, label %logic.end11740, label %logic.rhs11739 +logic.rhs11739: %t54 = load ptr, ptr %a1 %t55 = icmp eq ptr %t54, null - br i1 %t55, label %panic11713, label %ok11714 -panic11713: - call void @finch_panic(ptr @.str.7462, i64 415, ptr @.str.7463) + br i1 %t55, label %panic11741, label %ok11742 +panic11741: + call void @finch_panic(ptr @.str.7477, i64 415, ptr @.str.7478) unreachable -ok11714: +ok11742: %t56 = getelementptr inbounds %S.json.Reader, ptr %t54, i32 0, i32 0 %t57 = load ptr, ptr %a1 %t58 = icmp eq ptr %t57, null - br i1 %t58, label %panic11715, label %ok11716 -panic11715: - call void @finch_panic(ptr @.str.7464, i64 415, ptr @.str.7465) + br i1 %t58, label %panic11743, label %ok11744 +panic11743: + call void @finch_panic(ptr @.str.7479, i64 415, ptr @.str.7480) unreachable -ok11716: +ok11744: %t59 = getelementptr inbounds %S.json.Reader, ptr %t57, i32 0, i32 1 %t60 = load i64, ptr %t59 %t61 = load { ptr, i64, i64 }, ptr %t56 %t62 = extractvalue { ptr, i64, i64 } %t61, 1 %t63 = icmp uge i64 %t60, %t62 - br i1 %t63, label %range11717, label %inrange11718 -range11717: - call void @finch_panic_index(ptr @.str.7466, i64 415, i64 %t60, i64 %t62) + br i1 %t63, label %range11745, label %inrange11746 +range11745: + call void @finch_panic_index(ptr @.str.7481, i64 415, i64 %t60, i64 %t62) unreachable -inrange11718: +inrange11746: %t64 = extractvalue { ptr, i64, i64 } %t61, 0 %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 %t66 = load i8, ptr %t65 %t67 = icmp eq i8 %t66, 46 - br label %logic.rend11719 -logic.rend11719: - br label %logic.end11712 -logic.end11712: - %t68 = phi i1 [ true, %logic.from11710 ], [ %t67, %logic.rend11719 ] - br label %logic.from11720 -logic.from11720: - br i1 %t68, label %logic.end11722, label %logic.rhs11721 -logic.rhs11721: + br label %logic.rend11747 +logic.rend11747: + br label %logic.end11740 +logic.end11740: + %t68 = phi i1 [ true, %logic.from11738 ], [ %t67, %logic.rend11747 ] + br label %logic.from11748 +logic.from11748: + br i1 %t68, label %logic.end11750, label %logic.rhs11749 +logic.rhs11749: %t69 = load ptr, ptr %a1 %t70 = icmp eq ptr %t69, null - br i1 %t70, label %panic11723, label %ok11724 -panic11723: - call void @finch_panic(ptr @.str.7467, i64 415, ptr @.str.7468) + br i1 %t70, label %panic11751, label %ok11752 +panic11751: + call void @finch_panic(ptr @.str.7482, i64 415, ptr @.str.7483) unreachable -ok11724: +ok11752: %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 0 %t72 = load ptr, ptr %a1 %t73 = icmp eq ptr %t72, null - br i1 %t73, label %panic11725, label %ok11726 -panic11725: - call void @finch_panic(ptr @.str.7469, i64 415, ptr @.str.7470) + br i1 %t73, label %panic11753, label %ok11754 +panic11753: + call void @finch_panic(ptr @.str.7484, i64 415, ptr @.str.7485) unreachable -ok11726: +ok11754: %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 %t75 = load i64, ptr %t74 %t76 = load { ptr, i64, i64 }, ptr %t71 %t77 = extractvalue { ptr, i64, i64 } %t76, 1 %t78 = icmp uge i64 %t75, %t77 - br i1 %t78, label %range11727, label %inrange11728 -range11727: - call void @finch_panic_index(ptr @.str.7471, i64 415, i64 %t75, i64 %t77) + br i1 %t78, label %range11755, label %inrange11756 +range11755: + call void @finch_panic_index(ptr @.str.7486, i64 415, i64 %t75, i64 %t77) unreachable -inrange11728: +inrange11756: %t79 = extractvalue { ptr, i64, i64 } %t76, 0 %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 %t81 = load i8, ptr %t80 %t82 = icmp eq i8 %t81, 101 - br label %logic.rend11729 -logic.rend11729: - br label %logic.end11722 -logic.end11722: - %t83 = phi i1 [ true, %logic.from11720 ], [ %t82, %logic.rend11729 ] - br label %logic.from11730 -logic.from11730: - br i1 %t83, label %logic.end11732, label %logic.rhs11731 -logic.rhs11731: + br label %logic.rend11757 +logic.rend11757: + br label %logic.end11750 +logic.end11750: + %t83 = phi i1 [ true, %logic.from11748 ], [ %t82, %logic.rend11757 ] + br label %logic.from11758 +logic.from11758: + br i1 %t83, label %logic.end11760, label %logic.rhs11759 +logic.rhs11759: %t84 = load ptr, ptr %a1 %t85 = icmp eq ptr %t84, null - br i1 %t85, label %panic11733, label %ok11734 -panic11733: - call void @finch_panic(ptr @.str.7472, i64 415, ptr @.str.7473) + br i1 %t85, label %panic11761, label %ok11762 +panic11761: + call void @finch_panic(ptr @.str.7487, i64 415, ptr @.str.7488) unreachable -ok11734: +ok11762: %t86 = getelementptr inbounds %S.json.Reader, ptr %t84, i32 0, i32 0 %t87 = load ptr, ptr %a1 %t88 = icmp eq ptr %t87, null - br i1 %t88, label %panic11735, label %ok11736 -panic11735: - call void @finch_panic(ptr @.str.7474, i64 415, ptr @.str.7475) + br i1 %t88, label %panic11763, label %ok11764 +panic11763: + call void @finch_panic(ptr @.str.7489, i64 415, ptr @.str.7490) unreachable -ok11736: +ok11764: %t89 = getelementptr inbounds %S.json.Reader, ptr %t87, i32 0, i32 1 %t90 = load i64, ptr %t89 %t91 = load { ptr, i64, i64 }, ptr %t86 %t92 = extractvalue { ptr, i64, i64 } %t91, 1 %t93 = icmp uge i64 %t90, %t92 - br i1 %t93, label %range11737, label %inrange11738 -range11737: - call void @finch_panic_index(ptr @.str.7476, i64 415, i64 %t90, i64 %t92) + br i1 %t93, label %range11765, label %inrange11766 +range11765: + call void @finch_panic_index(ptr @.str.7491, i64 415, i64 %t90, i64 %t92) unreachable -inrange11738: +inrange11766: %t94 = extractvalue { ptr, i64, i64 } %t91, 0 %t95 = getelementptr inbounds i8, ptr %t94, i64 %t90 %t96 = load i8, ptr %t95 %t97 = icmp eq i8 %t96, 69 - br label %logic.rend11739 -logic.rend11739: - br label %logic.end11732 -logic.end11732: - %t98 = phi i1 [ true, %logic.from11730 ], [ %t97, %logic.rend11739 ] - br label %logic.from11740 -logic.from11740: - br i1 %t98, label %logic.end11742, label %logic.rhs11741 -logic.rhs11741: + br label %logic.rend11767 +logic.rend11767: + br label %logic.end11760 +logic.end11760: + %t98 = phi i1 [ true, %logic.from11758 ], [ %t97, %logic.rend11767 ] + br label %logic.from11768 +logic.from11768: + br i1 %t98, label %logic.end11770, label %logic.rhs11769 +logic.rhs11769: %t99 = load ptr, ptr %a1 %t100 = icmp eq ptr %t99, null - br i1 %t100, label %panic11743, label %ok11744 -panic11743: - call void @finch_panic(ptr @.str.7477, i64 415, ptr @.str.7478) + br i1 %t100, label %panic11771, label %ok11772 +panic11771: + call void @finch_panic(ptr @.str.7492, i64 415, ptr @.str.7493) unreachable -ok11744: +ok11772: %t101 = getelementptr inbounds %S.json.Reader, ptr %t99, i32 0, i32 0 %t102 = load ptr, ptr %a1 %t103 = icmp eq ptr %t102, null - br i1 %t103, label %panic11745, label %ok11746 -panic11745: - call void @finch_panic(ptr @.str.7479, i64 415, ptr @.str.7480) + br i1 %t103, label %panic11773, label %ok11774 +panic11773: + call void @finch_panic(ptr @.str.7494, i64 415, ptr @.str.7495) unreachable -ok11746: +ok11774: %t104 = getelementptr inbounds %S.json.Reader, ptr %t102, i32 0, i32 1 %t105 = load i64, ptr %t104 %t106 = load { ptr, i64, i64 }, ptr %t101 %t107 = extractvalue { ptr, i64, i64 } %t106, 1 %t108 = icmp uge i64 %t105, %t107 - br i1 %t108, label %range11747, label %inrange11748 -range11747: - call void @finch_panic_index(ptr @.str.7481, i64 415, i64 %t105, i64 %t107) + br i1 %t108, label %range11775, label %inrange11776 +range11775: + call void @finch_panic_index(ptr @.str.7496, i64 415, i64 %t105, i64 %t107) unreachable -inrange11748: +inrange11776: %t109 = extractvalue { ptr, i64, i64 } %t106, 0 %t110 = getelementptr inbounds i8, ptr %t109, i64 %t105 %t111 = load i8, ptr %t110 %t112 = icmp eq i8 %t111, 43 - br label %logic.rend11749 -logic.rend11749: - br label %logic.end11742 -logic.end11742: - %t113 = phi i1 [ true, %logic.from11740 ], [ %t112, %logic.rend11749 ] - br label %logic.from11750 -logic.from11750: - br i1 %t113, label %logic.end11752, label %logic.rhs11751 -logic.rhs11751: + br label %logic.rend11777 +logic.rend11777: + br label %logic.end11770 +logic.end11770: + %t113 = phi i1 [ true, %logic.from11768 ], [ %t112, %logic.rend11777 ] + br label %logic.from11778 +logic.from11778: + br i1 %t113, label %logic.end11780, label %logic.rhs11779 +logic.rhs11779: %t114 = load ptr, ptr %a1 %t115 = icmp eq ptr %t114, null - br i1 %t115, label %panic11753, label %ok11754 -panic11753: - call void @finch_panic(ptr @.str.7482, i64 415, ptr @.str.7483) + br i1 %t115, label %panic11781, label %ok11782 +panic11781: + call void @finch_panic(ptr @.str.7497, i64 415, ptr @.str.7498) unreachable -ok11754: +ok11782: %t116 = getelementptr inbounds %S.json.Reader, ptr %t114, i32 0, i32 0 %t117 = load ptr, ptr %a1 %t118 = icmp eq ptr %t117, null - br i1 %t118, label %panic11755, label %ok11756 -panic11755: - call void @finch_panic(ptr @.str.7484, i64 415, ptr @.str.7485) + br i1 %t118, label %panic11783, label %ok11784 +panic11783: + call void @finch_panic(ptr @.str.7499, i64 415, ptr @.str.7500) unreachable -ok11756: +ok11784: %t119 = getelementptr inbounds %S.json.Reader, ptr %t117, i32 0, i32 1 %t120 = load i64, ptr %t119 %t121 = load { ptr, i64, i64 }, ptr %t116 %t122 = extractvalue { ptr, i64, i64 } %t121, 1 %t123 = icmp uge i64 %t120, %t122 - br i1 %t123, label %range11757, label %inrange11758 -range11757: - call void @finch_panic_index(ptr @.str.7486, i64 415, i64 %t120, i64 %t122) + br i1 %t123, label %range11785, label %inrange11786 +range11785: + call void @finch_panic_index(ptr @.str.7501, i64 415, i64 %t120, i64 %t122) unreachable -inrange11758: +inrange11786: %t124 = extractvalue { ptr, i64, i64 } %t121, 0 %t125 = getelementptr inbounds i8, ptr %t124, i64 %t120 %t126 = load i8, ptr %t125 %t127 = icmp eq i8 %t126, 45 - br label %logic.rend11759 -logic.rend11759: - br label %logic.end11752 -logic.end11752: - %t128 = phi i1 [ true, %logic.from11750 ], [ %t127, %logic.rend11759 ] - br label %logic.rend11760 -logic.rend11760: - br label %logic.end11693 -logic.end11693: - %t129 = phi i1 [ false, %logic.from11691 ], [ %t128, %logic.rend11760 ] - br i1 %t129, label %while.body11685, label %while.end11686 -while.body11685: + br label %logic.rend11787 +logic.rend11787: + br label %logic.end11780 +logic.end11780: + %t128 = phi i1 [ true, %logic.from11778 ], [ %t127, %logic.rend11787 ] + br label %logic.rend11788 +logic.rend11788: + br label %logic.end11721 +logic.end11721: + %t129 = phi i1 [ false, %logic.from11719 ], [ %t128, %logic.rend11788 ] + br i1 %t129, label %while.body11713, label %while.end11714 +while.body11713: %t130 = load ptr, ptr %a1 %t131 = icmp eq ptr %t130, null - br i1 %t131, label %panic11761, label %ok11762 -panic11761: - call void @finch_panic(ptr @.str.7487, i64 416, ptr @.str.7488) + br i1 %t131, label %panic11789, label %ok11790 +panic11789: + call void @finch_panic(ptr @.str.7502, i64 416, ptr @.str.7503) unreachable -ok11762: +ok11790: %t132 = getelementptr inbounds %S.json.Reader, ptr %t130, i32 0, i32 1 %t133 = load i64, ptr %t132 %t134 = add i64 %t133, 1 store i64 %t134, ptr %t132 - br label %while.cond11684 -while.end11686: + br label %while.cond11712 +while.end11714: %t135 = load ptr, ptr %a1 %t136 = icmp eq ptr %t135, null - br i1 %t136, label %panic11763, label %ok11764 -panic11763: - call void @finch_panic(ptr @.str.7489, i64 418, ptr @.str.7490) + br i1 %t136, label %panic11791, label %ok11792 +panic11791: + call void @finch_panic(ptr @.str.7504, i64 418, ptr @.str.7505) unreachable -ok11764: +ok11792: %t137 = getelementptr inbounds %S.json.Reader, ptr %t135, i32 0, i32 0 %t138 = load { ptr, i64, i64 }, ptr %t137 store { ptr, i64, i64 } %t138, ptr %a139 %t141 = load i64, ptr %a6 %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic11765, label %ok11766 -panic11765: - call void @finch_panic(ptr @.str.7492, i64 418, ptr @.str.7493) + br i1 %t143, label %panic11793, label %ok11794 +panic11793: + call void @finch_panic(ptr @.str.7507, i64 418, ptr @.str.7508) unreachable -ok11766: +ok11794: %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 %t145 = load i64, ptr %t144 - call void @finch_str_sub(ptr %a140, ptr %a139, i64 %t141, i64 %t145, ptr @.str.7491, i64 418) + call void @finch_str_sub(ptr %a140, ptr %a139, i64 %t141, i64 %t145, ptr @.str.7506, i64 418) %t146 = load { ptr, i64, i64 }, ptr %a140 store { ptr, i64, i64 } zeroinitializer, ptr %a147 store double 0.0, ptr %a148 @@ -116654,25 +116829,25 @@ ok11766: store { ptr, i64, i64 } %t146, ptr %a153 call void @finch_str_drop(ptr %a153) %t154 = load double, ptr %a148 - br i1 %t151, label %or.failed11767, label %or.ok11768 -or.failed11767: + br i1 %t151, label %or.failed11795, label %or.ok11796 +or.failed11795: store { ptr, i64, i64 } %t152, ptr %a155 %t156 = load i64, ptr %a6 %t157 = load ptr, ptr %a1 %t158 = icmp eq ptr %t157, null - br i1 %t158, label %panic11769, label %ok11770 -panic11769: - call void @finch_panic(ptr @.str.7494, i64 419, ptr @.str.7495) + br i1 %t158, label %panic11797, label %ok11798 +panic11797: + call void @finch_panic(ptr @.str.7509, i64 419, ptr @.str.7510) unreachable -ok11770: +ok11798: %t159 = getelementptr inbounds %S.json.Reader, ptr %t157, i32 0, i32 1 store i64 %t156, ptr %t159 %t160 = load ptr, ptr %a1 - %t161 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t160, { ptr, i64, i64 } { ptr @.str.7496, i64 8, i64 0 }) + %t161 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t160, { ptr, i64, i64 } { ptr @.str.7511, i64 8, i64 0 }) call void @finch_str_drop(ptr %a155) %t162 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t161, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t162 -or.ok11768: +or.ok11796: store double %t154, ptr %a163 %t164 = load double, ptr %a163 %t165 = call %S.json.Json @finch.json.new_number(double %t164) @@ -116699,44 +116874,44 @@ entry: store i8 %t4, ptr %a5 %t6 = load ptr, ptr %a1 %t7 = icmp eq ptr %t6, null - br i1 %t7, label %panic11771, label %ok11772 -panic11771: - call void @finch_panic(ptr @.str.7497, i64 428, ptr @.str.7498) + br i1 %t7, label %panic11799, label %ok11800 +panic11799: + call void @finch_panic(ptr @.str.7512, i64 428, ptr @.str.7513) unreachable -ok11772: +ok11800: %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 %t9 = load i64, ptr %t8 %t10 = load ptr, ptr %a1 %t11 = icmp eq ptr %t10, null - br i1 %t11, label %panic11773, label %ok11774 -panic11773: - call void @finch_panic(ptr @.str.7499, i64 428, ptr @.str.7500) + br i1 %t11, label %panic11801, label %ok11802 +panic11801: + call void @finch_panic(ptr @.str.7514, i64 428, ptr @.str.7515) unreachable -ok11774: +ok11802: %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 %t14 = load i64, ptr %t13 %t15 = icmp sge i64 %t9, %t14 - br i1 %t15, label %then11775, label %endif11777 -then11775: + br i1 %t15, label %then11803, label %endif11805 +then11803: %t16 = load ptr, ptr %a1 - %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7501, i64 7, i64 0 }) + %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7516, i64 7, i64 0 }) %t18 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t17, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t18 -endif11777: +endif11805: %t19 = load i8, ptr %a5 %t20 = icmp eq i8 %t19, 123 - br i1 %t20, label %then11778, label %endif11780 -then11778: + br i1 %t20, label %then11806, label %endif11808 +then11806: %t21 = call %S.json.Json @finch.json.new_object() store %S.json.Json %t21, ptr %a22 %t23 = load ptr, ptr %a1 %t24 = icmp eq ptr %t23, null - br i1 %t24, label %panic11781, label %ok11782 -panic11781: - call void @finch_panic(ptr @.str.7502, i64 433, ptr @.str.7503) + br i1 %t24, label %panic11809, label %ok11810 +panic11809: + call void @finch_panic(ptr @.str.7517, i64 433, ptr @.str.7518) unreachable -ok11782: +ok11810: %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 %t26 = load i64, ptr %t25 %t27 = add i64 %t26, 1 @@ -116746,15 +116921,15 @@ ok11782: %t29 = load ptr, ptr %a1 %t30 = call i8 @finch.json.peek(ptr %t29) %t31 = icmp eq i8 %t30, 125 - br i1 %t31, label %then11783, label %endif11785 -then11783: + br i1 %t31, label %then11811, label %endif11813 +then11811: %t32 = load ptr, ptr %a1 %t33 = icmp eq ptr %t32, null - br i1 %t33, label %panic11786, label %ok11787 -panic11786: - call void @finch_panic(ptr @.str.7504, i64 436, ptr @.str.7505) + br i1 %t33, label %panic11814, label %ok11815 +panic11814: + call void @finch_panic(ptr @.str.7519, i64 436, ptr @.str.7520) unreachable -ok11787: +ok11815: %t34 = getelementptr inbounds %S.json.Reader, ptr %t32, i32 0, i32 1 %t35 = load i64, ptr %t34 %t36 = add i64 %t35, 1 @@ -116763,58 +116938,58 @@ ok11787: %t38 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t39 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t38, %S.json.Json %t37, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t39 -endif11785: - br label %while.cond11788 -while.cond11788: - br label %while.body11789 -while.body11789: +endif11813: + br label %while.cond11816 +while.cond11816: + br label %while.body11817 +while.body11817: %t40 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t40) %t41 = load ptr, ptr %a1 %t42 = call i8 @finch.json.peek(ptr %t41) %t43 = icmp ne i8 %t42, 34 - br i1 %t43, label %then11791, label %endif11793 -then11791: + br i1 %t43, label %then11819, label %endif11821 +then11819: %t44 = load ptr, ptr %a1 - %t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7506, i64 15, i64 0 }) + %t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7521, i64 15, i64 0 }) call void @finch.drop.S_json_Json(ptr %a22) %t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t45, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46 -endif11793: +endif11821: %t47 = load ptr, ptr %a1 %t48 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t47) %t49 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 0 %t50 = xor i1 %t49, true %t51 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 2 %t52 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 1 - br i1 %t50, label %try.failed11794, label %try.ok11795 -try.failed11794: + br i1 %t50, label %try.failed11822, label %try.ok11823 +try.failed11822: call void @finch.drop.S_json_Json(ptr %a22) %t53 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t51, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t53 -try.ok11795: +try.ok11823: store { ptr, i64, i64 } %t52, ptr %a54 %t55 = load ptr, ptr %a1 call void @finch.json.skip_space(ptr %t55) %t56 = load ptr, ptr %a1 %t57 = call i8 @finch.json.peek(ptr %t56) %t58 = icmp ne i8 %t57, 58 - br i1 %t58, label %then11796, label %endif11798 -then11796: + br i1 %t58, label %then11824, label %endif11826 +then11824: %t59 = load ptr, ptr %a1 - %t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7507, i64 3, i64 0 }) + %t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7522, i64 3, i64 0 }) call void @finch_str_drop(ptr %a54) call void @finch.drop.S_json_Json(ptr %a22) %t61 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t60, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t61 -endif11798: +endif11826: %t62 = load ptr, ptr %a1 %t63 = icmp eq ptr %t62, null - br i1 %t63, label %panic11799, label %ok11800 -panic11799: - call void @finch_panic(ptr @.str.7508, i64 449, ptr @.str.7509) + br i1 %t63, label %panic11827, label %ok11828 +panic11827: + call void @finch_panic(ptr @.str.7523, i64 449, ptr @.str.7524) unreachable -ok11800: +ok11828: %t64 = getelementptr inbounds %S.json.Reader, ptr %t62, i32 0, i32 1 %t65 = load i64, ptr %t64 %t66 = add i64 %t65, 1 @@ -116825,13 +117000,13 @@ ok11800: %t70 = xor i1 %t69, true %t71 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 2 %t72 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 1 - br i1 %t70, label %try.failed11801, label %try.ok11802 -try.failed11801: + br i1 %t70, label %try.failed11829, label %try.ok11830 +try.failed11829: call void @finch_str_drop(ptr %a54) call void @finch.drop.S_json_Json(ptr %a22) %t73 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t71, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t73 -try.ok11802: +try.ok11830: store %S.json.Json %t72, ptr %a74 %t75 = load { ptr, i64, i64 }, ptr %a54 %t76 = load %S.json.Json, ptr %a74 @@ -116841,35 +117016,35 @@ try.ok11802: %t78 = load ptr, ptr %a1 %t79 = call i8 @finch.json.peek(ptr %t78) %t80 = icmp eq i8 %t79, 44 - br i1 %t80, label %then11803, label %endif11805 -then11803: + br i1 %t80, label %then11831, label %endif11833 +then11831: %t81 = load ptr, ptr %a1 %t82 = icmp eq ptr %t81, null - br i1 %t82, label %panic11806, label %ok11807 -panic11806: - call void @finch_panic(ptr @.str.7510, i64 454, ptr @.str.7511) + br i1 %t82, label %panic11834, label %ok11835 +panic11834: + call void @finch_panic(ptr @.str.7525, i64 454, ptr @.str.7526) unreachable -ok11807: +ok11835: %t83 = getelementptr inbounds %S.json.Reader, ptr %t81, i32 0, i32 1 %t84 = load i64, ptr %t83 %t85 = add i64 %t84, 1 store i64 %t85, ptr %t83 call void @finch.drop.S_json_Json(ptr %a74) call void @finch_str_drop(ptr %a54) - br label %while.cond11788 -endif11805: + br label %while.cond11816 +endif11833: %t86 = load ptr, ptr %a1 %t87 = call i8 @finch.json.peek(ptr %t86) %t88 = icmp eq i8 %t87, 125 - br i1 %t88, label %then11808, label %endif11810 -then11808: + br i1 %t88, label %then11836, label %endif11838 +then11836: %t89 = load ptr, ptr %a1 %t90 = icmp eq ptr %t89, null - br i1 %t90, label %panic11811, label %ok11812 -panic11811: - call void @finch_panic(ptr @.str.7512, i64 458, ptr @.str.7513) + br i1 %t90, label %panic11839, label %ok11840 +panic11839: + call void @finch_panic(ptr @.str.7527, i64 458, ptr @.str.7528) unreachable -ok11812: +ok11840: %t91 = getelementptr inbounds %S.json.Reader, ptr %t89, i32 0, i32 1 %t92 = load i64, ptr %t91 %t93 = add i64 %t92, 1 @@ -116880,28 +117055,28 @@ ok11812: %t95 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t96 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t95, %S.json.Json %t94, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t96 -endif11810: +endif11838: %t97 = load ptr, ptr %a1 - %t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7514, i64 10, i64 0 }) + %t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7529, i64 10, i64 0 }) call void @finch.drop.S_json_Json(ptr %a74) call void @finch_str_drop(ptr %a54) call void @finch.drop.S_json_Json(ptr %a22) %t99 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t98, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t99 -endif11780: +endif11808: %t100 = load i8, ptr %a5 %t101 = icmp eq i8 %t100, 91 - br i1 %t101, label %then11813, label %endif11815 -then11813: + br i1 %t101, label %then11841, label %endif11843 +then11841: %t102 = call %S.json.Json @finch.json.new_list() store %S.json.Json %t102, ptr %a103 %t104 = load ptr, ptr %a1 %t105 = icmp eq ptr %t104, null - br i1 %t105, label %panic11816, label %ok11817 -panic11816: - call void @finch_panic(ptr @.str.7515, i64 466, ptr @.str.7516) + br i1 %t105, label %panic11844, label %ok11845 +panic11844: + call void @finch_panic(ptr @.str.7530, i64 466, ptr @.str.7531) unreachable -ok11817: +ok11845: %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 1 %t107 = load i64, ptr %t106 %t108 = add i64 %t107, 1 @@ -116911,15 +117086,15 @@ ok11817: %t110 = load ptr, ptr %a1 %t111 = call i8 @finch.json.peek(ptr %t110) %t112 = icmp eq i8 %t111, 93 - br i1 %t112, label %then11818, label %endif11820 -then11818: + br i1 %t112, label %then11846, label %endif11848 +then11846: %t113 = load ptr, ptr %a1 %t114 = icmp eq ptr %t113, null - br i1 %t114, label %panic11821, label %ok11822 -panic11821: - call void @finch_panic(ptr @.str.7517, i64 469, ptr @.str.7518) + br i1 %t114, label %panic11849, label %ok11850 +panic11849: + call void @finch_panic(ptr @.str.7532, i64 469, ptr @.str.7533) unreachable -ok11822: +ok11850: %t115 = getelementptr inbounds %S.json.Reader, ptr %t113, i32 0, i32 1 %t116 = load i64, ptr %t115 %t117 = add i64 %t116, 1 @@ -116928,23 +117103,23 @@ ok11822: %t119 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t120 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t119, %S.json.Json %t118, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t120 -endif11820: - br label %while.cond11823 -while.cond11823: - br label %while.body11824 -while.body11824: +endif11848: + br label %while.cond11851 +while.cond11851: + br label %while.body11852 +while.body11852: %t121 = load ptr, ptr %a1 %t122 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t121) %t123 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 0 %t124 = xor i1 %t123, true %t125 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 2 %t126 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 1 - br i1 %t124, label %try.failed11826, label %try.ok11827 -try.failed11826: + br i1 %t124, label %try.failed11854, label %try.ok11855 +try.failed11854: call void @finch.drop.S_json_Json(ptr %a103) %t127 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t125, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t127 -try.ok11827: +try.ok11855: store %S.json.Json %t126, ptr %a128 %t129 = load %S.json.Json, ptr %a128 call void @finch.json.Json.push(ptr %a103, %S.json.Json %t129) @@ -116953,34 +117128,34 @@ try.ok11827: %t131 = load ptr, ptr %a1 %t132 = call i8 @finch.json.peek(ptr %t131) %t133 = icmp eq i8 %t132, 44 - br i1 %t133, label %then11828, label %endif11830 -then11828: + br i1 %t133, label %then11856, label %endif11858 +then11856: %t134 = load ptr, ptr %a1 %t135 = icmp eq ptr %t134, null - br i1 %t135, label %panic11831, label %ok11832 -panic11831: - call void @finch_panic(ptr @.str.7519, i64 477, ptr @.str.7520) + br i1 %t135, label %panic11859, label %ok11860 +panic11859: + call void @finch_panic(ptr @.str.7534, i64 477, ptr @.str.7535) unreachable -ok11832: +ok11860: %t136 = getelementptr inbounds %S.json.Reader, ptr %t134, i32 0, i32 1 %t137 = load i64, ptr %t136 %t138 = add i64 %t137, 1 store i64 %t138, ptr %t136 call void @finch.drop.S_json_Json(ptr %a128) - br label %while.cond11823 -endif11830: + br label %while.cond11851 +endif11858: %t139 = load ptr, ptr %a1 %t140 = call i8 @finch.json.peek(ptr %t139) %t141 = icmp eq i8 %t140, 93 - br i1 %t141, label %then11833, label %endif11835 -then11833: + br i1 %t141, label %then11861, label %endif11863 +then11861: %t142 = load ptr, ptr %a1 %t143 = icmp eq ptr %t142, null - br i1 %t143, label %panic11836, label %ok11837 -panic11836: - call void @finch_panic(ptr @.str.7521, i64 481, ptr @.str.7522) + br i1 %t143, label %panic11864, label %ok11865 +panic11864: + call void @finch_panic(ptr @.str.7536, i64 481, ptr @.str.7537) unreachable -ok11837: +ok11865: %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 %t145 = load i64, ptr %t144 %t146 = add i64 %t145, 1 @@ -116990,29 +117165,29 @@ ok11837: %t148 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t149 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t148, %S.json.Json %t147, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t149 -endif11835: +endif11863: %t150 = load ptr, ptr %a1 - %t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7523, i64 10, i64 0 }) + %t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7538, i64 10, i64 0 }) call void @finch.drop.S_json_Json(ptr %a128) call void @finch.drop.S_json_Json(ptr %a103) %t152 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t151, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t152 -endif11815: +endif11843: %t153 = load i8, ptr %a5 %t154 = icmp eq i8 %t153, 34 - br i1 %t154, label %then11838, label %endif11840 -then11838: + br i1 %t154, label %then11866, label %endif11868 +then11866: %t155 = load ptr, ptr %a1 %t156 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t155) %t157 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 0 %t158 = xor i1 %t157, true %t159 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 2 %t160 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 1 - br i1 %t158, label %try.failed11841, label %try.ok11842 -try.failed11841: + br i1 %t158, label %try.failed11869, label %try.ok11870 +try.failed11869: %t161 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t159, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t161 -try.ok11842: +try.ok11870: store { ptr, i64, i64 } %t160, ptr %a162 %t163 = load { ptr, i64, i64 }, ptr %a162 %t164 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t163) @@ -117020,107 +117195,107 @@ try.ok11842: %t165 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t165, %S.json.Json %t164, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t166 -endif11840: +endif11868: %t167 = load i8, ptr %a5 %t168 = icmp eq i8 %t167, 116 - br i1 %t168, label %then11843, label %endif11845 -then11843: + br i1 %t168, label %then11871, label %endif11873 +then11871: %t169 = load ptr, ptr %a1 - %t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7524, i64 4, i64 0 }) + %t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7539, i64 4, i64 0 }) %t171 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 0 %t172 = xor i1 %t171, true %t173 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 2 - br i1 %t172, label %try.failed11846, label %try.ok11847 -try.failed11846: + br i1 %t172, label %try.failed11874, label %try.ok11875 +try.failed11874: %t174 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t173, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t174 -try.ok11847: +try.ok11875: %t175 = call %S.json.Json @finch.json.new_bool(i1 true) %t176 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t177 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t176, %S.json.Json %t175, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t177 -endif11845: +endif11873: %t178 = load i8, ptr %a5 %t179 = icmp eq i8 %t178, 102 - br i1 %t179, label %then11848, label %endif11850 -then11848: + br i1 %t179, label %then11876, label %endif11878 +then11876: %t180 = load ptr, ptr %a1 - %t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7525, i64 5, i64 0 }) + %t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7540, i64 5, i64 0 }) %t182 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 0 %t183 = xor i1 %t182, true %t184 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 2 - br i1 %t183, label %try.failed11851, label %try.ok11852 -try.failed11851: + br i1 %t183, label %try.failed11879, label %try.ok11880 +try.failed11879: %t185 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t184, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t185 -try.ok11852: +try.ok11880: %t186 = call %S.json.Json @finch.json.new_bool(i1 false) %t187 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t188 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t187, %S.json.Json %t186, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t188 -endif11850: +endif11878: %t189 = load i8, ptr %a5 %t190 = icmp eq i8 %t189, 110 - br i1 %t190, label %then11853, label %endif11855 -then11853: + br i1 %t190, label %then11881, label %endif11883 +then11881: %t191 = load ptr, ptr %a1 - %t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7526, i64 4, i64 0 }) + %t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7541, i64 4, i64 0 }) %t193 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 0 %t194 = xor i1 %t193, true %t195 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 2 - br i1 %t194, label %try.failed11856, label %try.ok11857 -try.failed11856: + br i1 %t194, label %try.failed11884, label %try.ok11885 +try.failed11884: %t196 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t195, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t196 -try.ok11857: +try.ok11885: %t197 = call %S.json.Json @finch.json.new_null() %t198 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t199 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t198, %S.json.Json %t197, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t199 -endif11855: +endif11883: %t200 = load i8, ptr %a5 %t201 = icmp eq i8 %t200, 45 - br label %logic.from11858 -logic.from11858: - br i1 %t201, label %logic.end11860, label %logic.rhs11859 -logic.rhs11859: + br label %logic.from11886 +logic.from11886: + br i1 %t201, label %logic.end11888, label %logic.rhs11887 +logic.rhs11887: %t202 = load i8, ptr %a5 %t203 = icmp uge i8 %t202, 48 - br label %logic.from11861 -logic.from11861: - br i1 %t203, label %logic.rhs11862, label %logic.end11863 -logic.rhs11862: + br label %logic.from11889 +logic.from11889: + br i1 %t203, label %logic.rhs11890, label %logic.end11891 +logic.rhs11890: %t204 = load i8, ptr %a5 %t205 = icmp ule i8 %t204, 57 - br label %logic.rend11864 -logic.rend11864: - br label %logic.end11863 -logic.end11863: - %t206 = phi i1 [ false, %logic.from11861 ], [ %t205, %logic.rend11864 ] - br label %logic.rend11865 -logic.rend11865: - br label %logic.end11860 -logic.end11860: - %t207 = phi i1 [ true, %logic.from11858 ], [ %t206, %logic.rend11865 ] - br i1 %t207, label %then11866, label %endif11868 -then11866: + br label %logic.rend11892 +logic.rend11892: + br label %logic.end11891 +logic.end11891: + %t206 = phi i1 [ false, %logic.from11889 ], [ %t205, %logic.rend11892 ] + br label %logic.rend11893 +logic.rend11893: + br label %logic.end11888 +logic.end11888: + %t207 = phi i1 [ true, %logic.from11886 ], [ %t206, %logic.rend11893 ] + br i1 %t207, label %then11894, label %endif11896 +then11894: %t208 = load ptr, ptr %a1 %t209 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %t208) %t210 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 0 %t211 = xor i1 %t210, true %t212 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 2 %t213 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 1 - br i1 %t211, label %try.failed11869, label %try.ok11870 -try.failed11869: + br i1 %t211, label %try.failed11897, label %try.ok11898 +try.failed11897: %t214 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t212, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t214 -try.ok11870: +try.ok11898: %t215 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 %t216 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t215, %S.json.Json %t213, 1 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t216 -endif11868: +endif11896: %t217 = load ptr, ptr %a1 - %t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7527, i64 7, i64 0 }) + %t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7542, i64 7, i64 0 }) %t219 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t218, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t219 } @@ -117152,12 +117327,12 @@ entry: %t10 = xor i1 %t9, true %t11 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 2 %t12 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 1 - br i1 %t10, label %try.failed11871, label %try.ok11872 -try.failed11871: + br i1 %t10, label %try.failed11899, label %try.ok11900 +try.failed11899: call void @finch.drop.S_json_Reader(ptr %a7) %t13 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t11, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t13 -try.ok11872: +try.ok11900: store %S.json.Json %t12, ptr %a14 call void @finch.json.skip_space(ptr %a7) %t15 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 1 @@ -117166,14 +117341,14 @@ try.ok11872: %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 %t19 = load i64, ptr %t18 %t20 = icmp slt i64 %t16, %t19 - br i1 %t20, label %then11873, label %endif11875 -then11873: - %t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7528, i64 19, i64 0 }) + br i1 %t20, label %then11901, label %endif11903 +then11901: + %t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7543, i64 19, i64 0 }) call void @finch.drop.S_json_Json(ptr %a14) call void @finch.drop.S_json_Reader(ptr %a7) %t22 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t21, 2 ret { i1, %S.json.Json, { ptr, i64, i64 } } %t22 -endif11875: +endif11903: %t23 = load %S.json.Json, ptr %a14 call void @finch.drop.S_json_Reader(ptr %a7) %t24 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 @@ -117191,7 +117366,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t5 = load ptr, ptr %a1 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 - store { ptr, i64, i64 } { ptr @.str.7529, i64 18, i64 0 }, ptr %t6 + store { ptr, i64, i64 } { ptr @.str.7544, i64 18, i64 0 }, ptr %t6 store i64 %t4, ptr %t2 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 @@ -117199,7 +117374,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 - store { ptr, i64, i64 } { ptr @.str.7530, i64 12, i64 0 }, ptr %t11 + store { ptr, i64, i64 } { ptr @.str.7545, i64 12, i64 0 }, ptr %t11 store i64 %t9, ptr %t7 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 @@ -117207,7 +117382,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 - store { ptr, i64, i64 } { ptr @.str.7531, i64 12, i64 0 }, ptr %t16 + store { ptr, i64, i64 } { ptr @.str.7546, i64 12, i64 0 }, ptr %t16 store i64 %t14, ptr %t12 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t18 = load i64, ptr %t17 @@ -117215,7 +117390,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 - store { ptr, i64, i64 } { ptr @.str.7532, i64 12, i64 0 }, ptr %t21 + store { ptr, i64, i64 } { ptr @.str.7547, i64 12, i64 0 }, ptr %t21 store i64 %t19, ptr %t17 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t23 = load i64, ptr %t22 @@ -117223,7 +117398,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t25 = load ptr, ptr %a1 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 - store { ptr, i64, i64 } { ptr @.str.7533, i64 20, i64 0 }, ptr %t26 + store { ptr, i64, i64 } { ptr @.str.7548, i64 20, i64 0 }, ptr %t26 store i64 %t24, ptr %t22 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t28 = load i64, ptr %t27 @@ -117231,7 +117406,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %a1 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 - store { ptr, i64, i64 } { ptr @.str.7534, i64 12, i64 0 }, ptr %t31 + store { ptr, i64, i64 } { ptr @.str.7549, i64 12, i64 0 }, ptr %t31 store i64 %t29, ptr %t27 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t33 = load i64, ptr %t32 @@ -117239,7 +117414,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 - store { ptr, i64, i64 } { ptr @.str.7535, i64 20, i64 0 }, ptr %t36 + store { ptr, i64, i64 } { ptr @.str.7550, i64 20, i64 0 }, ptr %t36 store i64 %t34, ptr %t32 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t38 = load i64, ptr %t37 @@ -117247,7 +117422,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a1 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 - store { ptr, i64, i64 } { ptr @.str.7536, i64 15, i64 0 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.7551, i64 15, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 %t42 = load { ptr, i64, i64 }, ptr %a1 ret { ptr, i64, i64 } %t42 @@ -117263,7 +117438,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t5 = load ptr, ptr %a1 %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 - store { ptr, i64, i64 } { ptr @.str.7537, i64 24981, i64 0 }, ptr %t6 + store { ptr, i64, i64 } { ptr @.str.7552, i64 24981, i64 0 }, ptr %t6 store i64 %t4, ptr %t2 %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t8 = load i64, ptr %t7 @@ -117271,7 +117446,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t10 = load ptr, ptr %a1 %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 - store { ptr, i64, i64 } { ptr @.str.7538, i64 12884, i64 0 }, ptr %t11 + store { ptr, i64, i64 } { ptr @.str.7553, i64 12884, i64 0 }, ptr %t11 store i64 %t9, ptr %t7 %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t13 = load i64, ptr %t12 @@ -117279,7 +117454,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t15 = load ptr, ptr %a1 %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 - store { ptr, i64, i64 } { ptr @.str.7539, i64 2846, i64 0 }, ptr %t16 + store { ptr, i64, i64 } { ptr @.str.7554, i64 2846, i64 0 }, ptr %t16 store i64 %t14, ptr %t12 %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t18 = load i64, ptr %t17 @@ -117287,7 +117462,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t20 = load ptr, ptr %a1 %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 - store { ptr, i64, i64 } { ptr @.str.7540, i64 1406, i64 0 }, ptr %t21 + store { ptr, i64, i64 } { ptr @.str.7555, i64 1406, i64 0 }, ptr %t21 store i64 %t19, ptr %t17 %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t23 = load i64, ptr %t22 @@ -117295,7 +117470,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t25 = load ptr, ptr %a1 %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 - store { ptr, i64, i64 } { ptr @.str.7541, i64 995, i64 0 }, ptr %t26 + store { ptr, i64, i64 } { ptr @.str.7556, i64 995, i64 0 }, ptr %t26 store i64 %t24, ptr %t22 %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t28 = load i64, ptr %t27 @@ -117303,7 +117478,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t30 = load ptr, ptr %a1 %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 - store { ptr, i64, i64 } { ptr @.str.7542, i64 2539, i64 0 }, ptr %t31 + store { ptr, i64, i64 } { ptr @.str.7557, i64 2539, i64 0 }, ptr %t31 store i64 %t29, ptr %t27 %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t33 = load i64, ptr %t32 @@ -117311,7 +117486,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t35 = load ptr, ptr %a1 %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 - store { ptr, i64, i64 } { ptr @.str.7543, i64 1792, i64 0 }, ptr %t36 + store { ptr, i64, i64 } { ptr @.str.7558, i64 1792, i64 0 }, ptr %t36 store i64 %t34, ptr %t32 %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 %t38 = load i64, ptr %t37 @@ -117319,7 +117494,7 @@ entry: call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) %t40 = load ptr, ptr %a1 %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 - store { ptr, i64, i64 } { ptr @.str.7544, i64 365, i64 0 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.7559, i64 365, i64 0 }, ptr %t41 store i64 %t39, ptr %t37 %t42 = load { ptr, i64, i64 }, ptr %a1 ret { ptr, i64, i64 } %t42 diff --git a/bootstrap/macos-arm64.ll b/bootstrap/macos-arm64.ll new file mode 100644 index 0000000..f3ca512 --- /dev/null +++ b/bootstrap/macos-arm64.ll @@ -0,0 +1,117504 @@ +; generated by the Finch compiler written in Finch + +target triple = "arm64-apple-macosx11.0.0" + +%S.main.Loader = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.lexer.Token = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1 } +%S.lexer.Lexer = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } +%S.ast.Type = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } +%S.ast.Node = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64 } +%S.ast.Program = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.parser.Parser = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 } } +%S.gen.Var = type { { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, i64, i1, i1, { ptr, i64, i64 }, i64, i64 } +%S.platform.Target = type { { ptr, i64, i64 }, i1, i1, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Options = type { i1, i1, i1, { ptr, i64, i64 }, %S.platform.Target } +%S.gen.Template = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1, i1 } +%S.gen.Binds = type { { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.EnumDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Cleanup = type { i1, i64 } +%S.gen.SumDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.SumPat = type { i64, { ptr, i64, i64 } } +%S.gen.Scope = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Pending = type { { ptr, i64, i64 }, %S.ast.Type, i1 } +%S.gen.Loop = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64 } +%S.gen.FnSig = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64 } +%S.gen.StructDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } +%S.gen.Val = type { { ptr, i64, i64 }, %S.ast.Type, i1, i1 } +%S.gen.Place = type { { ptr, i64, i64 }, %S.ast.Type } +%S.gen.Ref = type { i1, %S.gen.Place, %S.gen.Val } +%S.cimport.CImports = type { { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Gen = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.gen.FnSig, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, %S.cimport.CImports, i1, i1, { ptr, i64, i64 }, i1, %S.platform.Target, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i64, i64 } +%S.gen.Saved = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i1, i64 } +%S.gen.SizeAlign = type { i64, i64 } +%S.gen.Fallible = type { %S.gen.Val, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Abi = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } +%S.gen.Leaf = type { i64, i64, i1, i1 } +%S.gen.Plan = type { %S.gen.Abi, { ptr, i64, i64 }, { ptr, i64, i64 }, i1 } +%S.docs.Doc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.cimport.CFunc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } +%S.cimport.CConst = type { i1, i64, double, { ptr, i64, i64 } } +%S.cimport.CField = type { { ptr, i64, i64 }, %S.ast.Type, i64, i64, i64, i1 } +%S.cimport.CStruct = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i1 } +%S.cimport.Header = type { { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.cimport.Mapped = type { %S.ast.Type, { ptr, i64, i64 }, i1 } +%S.cimport.Importer = type { %S.cimport.CImports, ptr, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, i64 } +%S.cimport.FieldCtx = type { ptr, ptr } +%S.cimport.Number = type { %S.cimport.CConst, i1 } +%S.linker.Names = type { { ptr, i64, i64 } } +%S.linker.Build = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } +%S.lsp.Ref = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } +%S.lsp.VarRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i64, i64 } +%S.lsp.FnRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.lsp.StructRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.lsp.EnumRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } +%S.lsp.Diag = type { i1, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } +%S.lsp.Analysis = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.lsp.Diag } +%S.lsp.Server = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i1 } +%S.lsp.Names = type { { ptr, i64, i64 } } +%S.json.Json = type { i32, i1, double, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.json.Writer = type { { ptr, i64, i64 } } +%S.json.Reader = type { { ptr, i64, i64 }, i64 } +%S.C.rlimit = type { i64, i64 } +%S.C.timeval = type { i64, i32, [4 x i8] } +%S.C.rusage = type { %S.C.timeval, %S.C.timeval, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 } +%S.C.siginfo_t = type { i32, i32, i32, i32, i32, i32, ptr, [8 x i8], i64, [7 x i64] } +%S.C.div_t = type { i32, i32 } +%S.C.ldiv_t = type { i64, i64 } +%S.C.lldiv_t = type { i64, i64 } +%S.C.CXString = type { ptr, i32, [4 x i8] } +%S.C.CXStringSet = type { ptr, i32, [4 x i8] } +%S.C.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i8], i64, ptr } +%S.C.timespec = type { i64, i64 } +%S.C.CXFileUniqueID = type { [3 x i64] } +%S.C.CXSourceLocation = type { [2 x ptr], i32, [4 x i8] } +%S.C.CXSourceRange = type { [2 x ptr], i32, i32 } +%S.C.CXSourceRangeList = type { i32, [4 x i8], ptr } +%S.C.CXIndexOptions = type { i32, i8, i8, [2 x i8], ptr, ptr } +%S.C.CXUnsavedFile = type { ptr, ptr, i64 } +%S.C.CXTUResourceUsageEntry = type { i32, [4 x i8], i64 } +%S.C.CXTUResourceUsage = type { ptr, i32, [4 x i8], ptr } +%S.C.CXCursor = type { i32, i32, [3 x ptr] } +%S.C.CXVersion = type { i32, i32, i32 } +%S.C.CXPlatformAvailability = type { %S.C.CXString, %S.C.CXVersion, %S.C.CXVersion, %S.C.CXVersion, i32, %S.C.CXString } +%S.C.CXType = type { i32, [4 x i8], [2 x ptr] } +%S.C.CXToken = type { [4 x i32], ptr } +%S.C.CXCompletionResult = type { i32, [4 x i8], ptr } +%S.C.CXCodeCompleteResults = type { ptr, i32, [4 x i8] } +%S.C.CXCursorAndRangeVisitor = type { ptr, ptr } +%S.C.CXIdxLoc = type { [2 x ptr], i32, [4 x i8] } +%S.C.CXIdxAttrInfo = type { i32, [4 x i8], %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxEntityInfo = type { i32, i32, i32, [4 x i8], ptr, ptr, %S.C.CXCursor, ptr, i32, [4 x i8] } +%S.C.CXIdxContainerInfo = type { %S.C.CXCursor } +%S.C.CXIdxDeclInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr, ptr, i32, i32, i32, [4 x i8], ptr, i32, [4 x i8], ptr, i32, i32 } +%S.C.CXIdxObjCContainerDeclInfo = type { ptr, i32, [4 x i8] } +%S.C.CXIdxBaseClassInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxObjCProtocolRefInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxObjCProtocolRefListInfo = type { ptr, i32, [4 x i8] } +%S.C.CXIdxObjCInterfaceDeclInfo = type { ptr, ptr, ptr } +%S.C.CXIdxObjCCategoryDeclInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr } +%S.C.CXIdxObjCPropertyDeclInfo = type { ptr, ptr, ptr } +%S.C.CXIdxIBOutletCollectionAttrInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxCXXClassDeclInfo = type { ptr, ptr, i32, [4 x i8] } +%S.C.IndexerCallbacks = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } +%S.C.fd_set = type { [32 x i32] } +%S.C.accessx_descriptor = type { i32, i32, [2 x i32] } +%S.C.__sbuf = type { ptr, i32, [4 x i8] } +%S.C.FILE = type { ptr, i32, i32, i16, i16, [4 x i8], %S.C.__sbuf, i32, [4 x i8], ptr, ptr, ptr, ptr, ptr, %S.C.__sbuf, ptr, i32, [3 x i8], [1 x i8], %S.C.__sbuf, i32, [4 x i8], i64 } +@.str.1 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.2 = private unnamed_addr constant [2 x i8] c".\00" +@.str.3 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.4 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.5 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.7 = private unnamed_addr constant [3 x i8] c"./\00" +@.str.8 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.9 = private unnamed_addr constant [2 x i8] c".\00" +@.str.10 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.11 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.12 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" +@.str.13 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.14 = private unnamed_addr constant [37 x i8] c"used .overlayFiles on a null pointer\00" +@.str.15 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.16 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.17 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.18 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.19 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.20 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.21 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.22 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.23 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.24 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.25 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.26 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.27 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.28 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.29 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.30 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.31 = private unnamed_addr constant [30 x i8] c"used .paths on a null pointer\00" +@.str.32 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.33 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.34 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.35 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.36 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.37 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.38 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.39 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.40 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.41 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.42 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.43 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.44 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.45 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.46 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.47 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.48 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.49 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.50 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.51 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.52 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.53 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.54 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.55 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.56 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.57 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.58 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.59 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.60 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.61 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.62 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.63 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.64 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.65 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.66 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.67 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.68 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.69 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.70 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.71 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" +@.str.72 = private unnamed_addr constant [31 x i8] c"error: can't find the module '\00" +@.str.73 = private unnamed_addr constant [15 x i8] c"' (looked for \00" +@.str.74 = private unnamed_addr constant [2 x i8] c")\00" +@.str.75 = private unnamed_addr constant [1 x i8] c"\00" +@.str.76 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.77 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.78 = private unnamed_addr constant [20 x i8] c"error: can't open '\00" +@.str.79 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.80 = private unnamed_addr constant [1 x i8] c"\00" +@.str.81 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.82 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.83 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.84 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.85 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.86 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.87 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.88 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.89 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.90 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" +@.str.91 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.92 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" +@.str.93 = private unnamed_addr constant [42 x i8] c"Finch -- the compiler is written in Finch\00" +@.str.94 = private unnamed_addr constant [1 x i8] c"\00" +@.str.95 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.96 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.97 = private unnamed_addr constant [7 x i8] c"usage:\00" +@.str.98 = private unnamed_addr constant [1 x i8] c"\00" +@.str.99 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.100 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.101 = private unnamed_addr constant [61 x i8] c" finch run [args...] build and run a program\00" +@.str.102 = private unnamed_addr constant [1 x i8] c"\00" +@.str.103 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.104 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.105 = private unnamed_addr constant [53 x i8] c" finch build [-o name] build a program\00" +@.str.106 = private unnamed_addr constant [1 x i8] c"\00" +@.str.107 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.108 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.109 = private unnamed_addr constant [55 x i8] c" finch ir print the LLVM IR\00" +@.str.110 = private unnamed_addr constant [1 x i8] c"\00" +@.str.111 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.112 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.113 = private unnamed_addr constant [54 x i8] c" finch version show the version\00" +@.str.114 = private unnamed_addr constant [1 x i8] c"\00" +@.str.115 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.116 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.117 = private unnamed_addr constant [91 x i8] c" finch lsp the language server, for editors (VS Code, Kate, ...)\00" +@.str.118 = private unnamed_addr constant [1 x i8] c"\00" +@.str.119 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.120 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.121 = private unnamed_addr constant [9 x i8] c"options:\00" +@.str.122 = private unnamed_addr constant [1 x i8] c"\00" +@.str.123 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.124 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.125 = private unnamed_addr constant [54 x i8] c" -O0 no optimization (faster to build)\00" +@.str.126 = private unnamed_addr constant [1 x i8] c"\00" +@.str.127 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.128 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.129 = private unnamed_addr constant [77 x i8] c" -l link a library (the same as link \22lib\22 in the program)\00" +@.str.130 = private unnamed_addr constant [1 x i8] c"\00" +@.str.131 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.132 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.133 = private unnamed_addr constant [58 x i8] c" -I look for imported C headers there too\00" +@.str.134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.135 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.136 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.137 = private unnamed_addr constant [67 x i8] c" -g debug info (for gdb and lldb; use -O0 with it)\00" +@.str.138 = private unnamed_addr constant [1 x i8] c"\00" +@.str.139 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.140 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.141 = private unnamed_addr constant [102 x i8] c" --target build for another system: windows, linux, arm64 (Linux), macos, or an LLVM triple\00" +@.str.142 = private unnamed_addr constant [1 x i8] c"\00" +@.str.143 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.144 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.145 = private unnamed_addr constant [8 x i8] c"/files-\00" +@.str.146 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.147 = private unnamed_addr constant [6 x i8] c"/done\00" +@.str.148 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.149 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.150 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.151 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.152 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.153 = private unnamed_addr constant [6 x i8] c"/done\00" +@.str.154 = private unnamed_addr constant [1 x i8] c"\00" +@.str.155 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.156 = private unnamed_addr constant [8 x i8] c"version\00" +@.str.157 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.158 = private unnamed_addr constant [10 x i8] c"--version\00" +@.str.159 = private unnamed_addr constant [47 x i8] c"Finch 2.4.0 (the compiler is written in Finch)\00" +@.str.160 = private unnamed_addr constant [1 x i8] c"\00" +@.str.161 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.162 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.163 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.164 = private unnamed_addr constant [4 x i8] c"lsp\00" +@.str.165 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.166 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.167 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.168 = private unnamed_addr constant [6 x i8] c"build\00" +@.str.169 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.170 = private unnamed_addr constant [3 x i8] c"ir\00" +@.str.171 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.172 = private unnamed_addr constant [1 x i8] c"\00" +@.str.173 = private unnamed_addr constant [4 x i8] c"-O2\00" +@.str.174 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.175 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.176 = private unnamed_addr constant [3 x i8] c"-o\00" +@.str.177 = private unnamed_addr constant [6 x i8] c"build\00" +@.str.178 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.179 = private unnamed_addr constant [9 x i8] c"--shared\00" +@.str.180 = private unnamed_addr constant [6 x i8] c"build\00" +@.str.181 = private unnamed_addr constant [4 x i8] c"-O0\00" +@.str.182 = private unnamed_addr constant [4 x i8] c"-O0\00" +@.str.183 = private unnamed_addr constant [3 x i8] c"-l\00" +@.str.184 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.185 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.186 = private unnamed_addr constant [3 x i8] c"-l\00" +@.str.187 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.188 = private unnamed_addr constant [3 x i8] c"-I\00" +@.str.189 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.190 = private unnamed_addr constant [10 x i8] c"--overlay\00" +@.str.191 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.192 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.193 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.194 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.195 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.196 = private unnamed_addr constant [3 x i8] c"-g\00" +@.str.197 = private unnamed_addr constant [9 x i8] c"--target\00" +@.str.198 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.199 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.200 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.201 = private unnamed_addr constant [12 x i8] c"/finch_run_\00" +@.str.202 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.203 = private unnamed_addr constant [5 x i8] c".dll\00" +@.str.204 = private unnamed_addr constant [4 x i8] c"lib\00" +@.str.205 = private unnamed_addr constant [7 x i8] c".dylib\00" +@.str.206 = private unnamed_addr constant [4 x i8] c"lib\00" +@.str.207 = private unnamed_addr constant [4 x i8] c".so\00" +@.str.208 = private unnamed_addr constant [6 x i8] c"linux\00" +@.str.209 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.210 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.211 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.212 = private unnamed_addr constant [8 x i8] c"/../std\00" +@.str.213 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.214 = private unnamed_addr constant [5 x i8] c"/std\00" +@.str.215 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.216 = private unnamed_addr constant [20 x i8] c"/../share/finch/std\00" +@.str.217 = private unnamed_addr constant [4 x i8] c"std\00" +@.str.218 = private unnamed_addr constant [10 x i8] c"/path.fch\00" +@.str.219 = private unnamed_addr constant [5 x i8] c"/std\00" +@.str.220 = private unnamed_addr constant [11 x i8] c"FINCH_PATH\00" +@.str.221 = private unnamed_addr constant [1 x i8] c"\00" +declare ptr @getenv(ptr) +@.str.222 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.223 = private unnamed_addr constant [1 x i8] c"\00" +@.str.224 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.225 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.226 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.227 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.228 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.229 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.230 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.231 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.232 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.233 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.234 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.235 = private unnamed_addr constant [1 x i8] c"\00" +@.str.236 = private unnamed_addr constant [1 x i8] c"\00" +@.str.237 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.238 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.239 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.240 = private unnamed_addr constant [3 x i8] c"ir\00" +@.str.241 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.242 = private unnamed_addr constant [1 x i8] c"\00" +@.str.243 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.244 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.245 = private unnamed_addr constant [9 x i8] c"FINCH_RT\00" +@.str.246 = private unnamed_addr constant [1 x i8] c"\00" +@.str.247 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.248 = private unnamed_addr constant [23 x i8] c"/../runtime/finch_rt.c\00" +@.str.249 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.250 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00" +@.str.251 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.252 = private unnamed_addr constant [35 x i8] c"/../share/finch/runtime/finch_rt.c\00" +@.str.253 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.254 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.255 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00" +@.str.256 = private unnamed_addr constant [1 x i8] c"\00" +@.str.257 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.258 = private unnamed_addr constant [4 x i8] c" -g\00" +@.str.259 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.260 = private unnamed_addr constant [2 x i8] c" \00" +@.str.261 = private unnamed_addr constant [2 x i8] c" \00" +@.str.262 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.263 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.264 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.265 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.266 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.267 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.268 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.269 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.270 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.271 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.272 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.273 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.274 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.275 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.276 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.277 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.278 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.279 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.280 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.281 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.282 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.283 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.284 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" +@.str.285 = private unnamed_addr constant [2 x i8] c":\00" +@.str.286 = private unnamed_addr constant [2 x i8] c":\00" +@.str.287 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.288 = private unnamed_addr constant [1 x i8] c"\00" +@.str.289 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.290 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.291 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.292 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.293 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.294 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.295 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.296 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.297 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.298 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.299 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.300 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.301 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.302 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.303 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.304 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.305 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.306 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.307 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.308 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.309 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.310 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" +@.str.311 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.312 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.313 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.314 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.315 = private unnamed_addr constant [3 x i8] c"->\00" +@.str.316 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.317 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.318 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.319 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.320 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.321 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.322 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.323 = private unnamed_addr constant [3 x i8] c"||\00" +@.str.324 = private unnamed_addr constant [3 x i8] c"..\00" +@.str.325 = private unnamed_addr constant [3 x i8] c":=\00" +@.str.326 = private unnamed_addr constant [3 x i8] c"+=\00" +@.str.327 = private unnamed_addr constant [3 x i8] c"-=\00" +@.str.328 = private unnamed_addr constant [3 x i8] c"*=\00" +@.str.329 = private unnamed_addr constant [3 x i8] c"/=\00" +@.str.330 = private unnamed_addr constant [3 x i8] c"%=\00" +@.str.331 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.332 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.333 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.334 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.335 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.336 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.337 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.338 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.339 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.340 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.341 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.342 = private unnamed_addr constant [23 x i8] c"(){}[],.:+-*/%&|^~<>=!\00" +@.str.343 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.344 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.345 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.346 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.347 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.348 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.349 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.350 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.351 = private unnamed_addr constant [1 x i8] c"\00" +@.str.352 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.353 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.354 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.355 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.356 = private unnamed_addr constant [17 x i8] c"unknown escape \5C\00" +@.str.357 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.358 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.359 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.360 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.361 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.362 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.363 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.364 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.365 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.366 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.367 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.368 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.369 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.370 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.371 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.372 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.373 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.374 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.375 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.376 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.377 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.378 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.379 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.380 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.381 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.382 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.383 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.384 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.385 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.386 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.387 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.388 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.389 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.390 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.391 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.392 = private unnamed_addr constant [37 x i8] c"comment is never closed (missing */)\00" +@.str.393 = private unnamed_addr constant [1 x i8] c"\00" +@.str.394 = private unnamed_addr constant [1 x i8] c"\00" +@.str.395 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.396 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.397 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.398 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.399 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.400 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" +@.str.401 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.402 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" +@.str.403 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.404 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.405 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.406 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.407 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.408 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.409 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.410 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.411 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.412 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.413 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.414 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.415 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.416 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.417 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.418 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.419 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.420 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.421 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.422 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.423 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.424 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.425 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.426 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.427 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.428 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.429 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.430 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.431 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.432 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.434 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.435 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.436 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.437 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.438 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.439 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.440 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.441 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.442 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.443 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.444 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.445 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.446 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.448 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.449 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.450 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.451 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.452 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.453 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.454 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.455 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.456 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.457 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.458 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.459 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.460 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.461 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.463 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.464 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.465 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.466 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.467 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.468 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.469 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.470 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.471 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.472 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.473 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.474 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.475 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.476 = private unnamed_addr constant [1 x i8] c"\00" +@.str.477 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.478 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.479 = private unnamed_addr constant [35 x i8] c"string is never closed (missing \22)\00" +@.str.480 = private unnamed_addr constant [33 x i8] c"char is never closed (missing ')\00" +@.str.481 = private unnamed_addr constant [1 x i8] c"\00" +@.str.482 = private unnamed_addr constant [45 x i8] c"a char holds exactly one character, like 'a'\00" +@.str.483 = private unnamed_addr constant [1 x i8] c"\00" +@.str.484 = private unnamed_addr constant [75 x i8] c" (names use only a-z, A-Z, 0-9 and _; other letters only go inside \22text\22)\00" +@.str.485 = private unnamed_addr constant [23 x i8] c"unexpected character '\00" +@.str.486 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.487 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.488 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.489 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.490 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.491 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.492 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.493 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.494 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.495 = private unnamed_addr constant [1 x i8] c"\00" +@.str.496 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.497 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.498 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.499 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.500 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.501 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.502 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.503 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.504 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.505 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.506 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.507 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.508 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.509 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.510 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.511 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.512 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.513 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.514 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.515 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.516 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.517 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.518 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.519 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.520 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.521 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.522 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.523 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.524 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.525 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.526 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.527 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.528 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.529 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.530 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.531 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.532 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.533 = private unnamed_addr constant [2 x i8] c".\00" +@.str.534 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.535 = private unnamed_addr constant [8 x i8] c"nothing\00" +@.str.536 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.537 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" +@.str.538 = private unnamed_addr constant [2 x i8] c":\00" +@.str.539 = private unnamed_addr constant [2 x i8] c":\00" +@.str.540 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.541 = private unnamed_addr constant [1 x i8] c"\00" +@.str.542 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.543 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.544 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.545 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.546 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.547 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.548 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.549 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.550 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.551 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.552 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.553 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.554 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.555 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.556 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.557 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.558 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.559 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.560 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.561 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.562 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.563 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.564 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.565 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.566 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.567 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.568 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.569 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.570 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.571 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.572 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.573 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.574 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.575 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.576 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.577 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.578 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.579 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.580 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.581 = private unnamed_addr constant [12 x i8] c"end of file\00" +@.str.582 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.583 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.584 = private unnamed_addr constant [9 x i8] c"a number\00" +@.str.585 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.586 = private unnamed_addr constant [9 x i8] c"a string\00" +@.str.587 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.588 = private unnamed_addr constant [7 x i8] c"a char\00" +@.str.589 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.590 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.591 = private unnamed_addr constant [10 x i8] c"expected \00" +@.str.592 = private unnamed_addr constant [9 x i8] c", found \00" +@.str.593 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.594 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.595 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.596 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.597 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.598 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.599 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.600 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.601 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.602 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.603 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.604 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.605 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.606 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" +@.str.607 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.608 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.609 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.610 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.611 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.612 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.613 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.614 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.615 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.616 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.617 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.618 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.619 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.620 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.621 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.622 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.623 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.624 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.625 = private unnamed_addr constant [37 x i8] c"']' (an array type looks like []int)\00" +@.str.626 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.627 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.628 = private unnamed_addr constant [57 x i8] c" (expected a type like int, str, []int or a struct name)\00" +@.str.629 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.630 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.631 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.632 = private unnamed_addr constant [40 x i8] c"']' (a map type looks like map[str]int)\00" +@.str.633 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.634 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.635 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.636 = private unnamed_addr constant [4 x i8] c"']'\00" +@.str.637 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.638 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.639 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.640 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.641 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.642 = private unnamed_addr constant [2 x i8] c".\00" +@.str.643 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.644 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.645 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.646 = private unnamed_addr constant [2 x i8] c",\00" +@.str.647 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.648 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" +@.str.649 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.650 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.651 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.652 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.653 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.654 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.655 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.656 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.657 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.658 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.659 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.660 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.661 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.662 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.663 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.664 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.665 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.666 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.667 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.668 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.669 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.670 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.671 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.672 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.673 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.674 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.675 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.676 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.677 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.678 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.679 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.680 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.681 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.682 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.683 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.684 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.685 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.686 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.687 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.688 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.689 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.690 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.691 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.692 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.693 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.694 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.695 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.696 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.697 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.698 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.699 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.700 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.701 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.702 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.703 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.704 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.705 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.706 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.707 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.708 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.709 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.710 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.711 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.712 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.713 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.714 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.715 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.716 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.717 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.718 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.719 = private unnamed_addr constant [2 x i8] c".\00" +@.str.720 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.721 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.722 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.723 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.724 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.725 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.726 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.727 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.728 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.729 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.730 = private unnamed_addr constant [38 x i8] c" (put each statement on its own line)\00" +@.str.731 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.732 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.733 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.734 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.735 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" +@.str.736 = private unnamed_addr constant [2 x i8] c":\00" +@.str.737 = private unnamed_addr constant [2 x i8] c":\00" +@.str.738 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.739 = private unnamed_addr constant [52 x i8] c"expected a module name or a C header after 'import'\00" +@.str.740 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.741 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.742 = private unnamed_addr constant [43 x i8] c"a library name in quotes, like link \22glfw\22\00" +@.str.743 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.744 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.745 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.746 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.747 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.748 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.749 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.750 = private unnamed_addr constant [4 x i8] c"lib\00" +@.str.751 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.752 = private unnamed_addr constant [4 x i8] c".so\00" +@.str.753 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.754 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.755 = private unnamed_addr constant [66 x i8] c"write just the library's name: for libglfw.so that's link \22glfw\22\00" +@.str.756 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.757 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.758 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.759 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.760 = private unnamed_addr constant [7 x i8] c"'enum'\00" +@.str.761 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.762 = private unnamed_addr constant [13 x i8] c"an enum name\00" +@.str.763 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.764 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.765 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.766 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.767 = private unnamed_addr constant [38 x i8] c"an enum is never closed (missing '}')\00" +@.str.768 = private unnamed_addr constant [8 x i8] c"variant\00" +@.str.769 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.770 = private unnamed_addr constant [25 x i8] c"a variant name, like Red\00" +@.str.771 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.772 = private unnamed_addr constant [2 x i8] c")\00" +@.str.773 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.774 = private unnamed_addr constant [2 x i8] c",\00" +@.str.775 = private unnamed_addr constant [2 x i8] c")\00" +@.str.776 = private unnamed_addr constant [36 x i8] c"')' after the values of the variant\00" +@.str.777 = private unnamed_addr constant [13 x i8] c"the variant \00" +@.str.778 = private unnamed_addr constant [28 x i8] c" has empty () : write just \00" +@.str.779 = private unnamed_addr constant [21 x i8] c" if it holds nothing\00" +@.str.780 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.781 = private unnamed_addr constant [53 x i8] c"a variant can't have both values inside and a number\00" +@.str.782 = private unnamed_addr constant [1 x i8] c"\00" +@.str.783 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.784 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.785 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.786 = private unnamed_addr constant [31 x i8] c"a whole number, like Ok = 200\00" +@.str.787 = private unnamed_addr constant [2 x i8] c",\00" +@.str.788 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.789 = private unnamed_addr constant [17 x i8] c" has no variants\00" +@.str.790 = private unnamed_addr constant [55 x i8] c"an enum whose variants hold values can't number them (\00" +@.str.791 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.792 = private unnamed_addr constant [2 x i8] c")\00" +@.str.793 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.794 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.795 = private unnamed_addr constant [4 x i8] c"tag\00" +@.str.796 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.797 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.798 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.799 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.800 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.801 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.802 = private unnamed_addr constant [8 x i8] c"'match'\00" +@.str.803 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.804 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.805 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.806 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.807 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.808 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.809 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.810 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.811 = private unnamed_addr constant [38 x i8] c"a match is never closed (missing '}')\00" +@.str.812 = private unnamed_addr constant [4 x i8] c"arm\00" +@.str.813 = private unnamed_addr constant [9 x i8] c"patterns\00" +@.str.814 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.815 = private unnamed_addr constant [2 x i8] c",\00" +@.str.816 = private unnamed_addr constant [3 x i8] c"->\00" +@.str.817 = private unnamed_addr constant [58 x i8] c"'->' after the value to match, like Red -> print(\22red\22)\00" +@.str.818 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.819 = private unnamed_addr constant [2 x i8] c",\00" +@.str.820 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.821 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.822 = private unnamed_addr constant [31 x i8] c"a match needs at least one arm\00" +@.str.823 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.824 = private unnamed_addr constant [4 x i8] c"'['\00" +@.str.825 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.826 = private unnamed_addr constant [30 x i8] c"a type parameter name, like T\00" +@.str.827 = private unnamed_addr constant [2 x i8] c",\00" +@.str.828 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.829 = private unnamed_addr constant [30 x i8] c"']' after the type parameters\00" +@.str.830 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.831 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.832 = private unnamed_addr constant [9 x i8] c"'struct'\00" +@.str.833 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.834 = private unnamed_addr constant [14 x i8] c"a struct name\00" +@.str.835 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.836 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.837 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.838 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.839 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.840 = private unnamed_addr constant [39 x i8] c"a struct is never closed (missing '}')\00" +@.str.841 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.842 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.843 = private unnamed_addr constant [29 x i8] c" (a field looks like: int x)\00" +@.str.844 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.845 = private unnamed_addr constant [13 x i8] c"a field name\00" +@.str.846 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.847 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.848 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.849 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.850 = private unnamed_addr constant [69 x i8] c"functions start with 'fn', like: fn add(int a, int b) -> int { ... }\00" +@.str.851 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.852 = private unnamed_addr constant [27 x i8] c"'fn', 'struct' or 'import'\00" +@.str.853 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.854 = private unnamed_addr constant [16 x i8] c"a function name\00" +@.str.855 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.856 = private unnamed_addr constant [2 x i8] c".\00" +@.str.857 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.858 = private unnamed_addr constant [14 x i8] c"a method name\00" +@.str.859 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.860 = private unnamed_addr constant [4 x i8] c"'('\00" +@.str.861 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.862 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.863 = private unnamed_addr constant [2 x i8] c")\00" +@.str.864 = private unnamed_addr constant [6 x i8] c"param\00" +@.str.865 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.866 = private unnamed_addr constant [17 x i8] c"a parameter name\00" +@.str.867 = private unnamed_addr constant [2 x i8] c",\00" +@.str.868 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.869 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.870 = private unnamed_addr constant [2 x i8] c")\00" +@.str.871 = private unnamed_addr constant [4 x i8] c"')'\00" +@.str.872 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.873 = private unnamed_addr constant [3 x i8] c"->\00" +@.str.874 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.875 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.876 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.877 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.878 = private unnamed_addr constant [62 x i8] c" (after '->' comes a type, or ! for a function that can fail)\00" +@.str.879 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.880 = private unnamed_addr constant [6 x i8] c"block\00" +@.str.881 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.882 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.883 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.884 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.885 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.886 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.887 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.888 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.889 = private unnamed_addr constant [36 x i8] c"a '{' is never closed (missing '}')\00" +@.str.890 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.891 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.892 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.893 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.894 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.895 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.896 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.897 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.898 = private unnamed_addr constant [21 x i8] c"a loop variable name\00" +@.str.899 = private unnamed_addr constant [2 x i8] c",\00" +@.str.900 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.901 = private unnamed_addr constant [28 x i8] c"a second loop variable name\00" +@.str.902 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.903 = private unnamed_addr constant [5 x i8] c"'in'\00" +@.str.904 = private unnamed_addr constant [3 x i8] c"..\00" +@.str.905 = private unnamed_addr constant [56 x i8] c"a range of numbers has one loop variable: for i in 0..n\00" +@.str.906 = private unnamed_addr constant [5 x i8] c"each\00" +@.str.907 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.908 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.909 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.910 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.911 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.912 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.913 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.914 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.915 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.916 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.917 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" +@.str.918 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.919 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.920 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.921 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.922 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.923 = private unnamed_addr constant [49 x i8] c"' can't be used here in the self-hosted compiler\00" +@.str.924 = private unnamed_addr constant [5 x i8] c"decl\00" +@.str.925 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.926 = private unnamed_addr constant [16 x i8] c"a variable name\00" +@.str.927 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.928 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.929 = private unnamed_addr constant [3 x i8] c":=\00" +@.str.930 = private unnamed_addr constant [5 x i8] c"decl\00" +@.str.931 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.932 = private unnamed_addr constant [3 x i8] c"+=\00" +@.str.933 = private unnamed_addr constant [3 x i8] c"-=\00" +@.str.934 = private unnamed_addr constant [3 x i8] c"*=\00" +@.str.935 = private unnamed_addr constant [3 x i8] c"/=\00" +@.str.936 = private unnamed_addr constant [3 x i8] c"%=\00" +@.str.937 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.938 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.939 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.940 = private unnamed_addr constant [67 x i8] c"only a variable, a field, an element or p.value can be assigned to\00" +@.str.941 = private unnamed_addr constant [7 x i8] c"assign\00" +@.str.942 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.943 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" +@.str.944 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.945 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.946 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.947 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.948 = private unnamed_addr constant [38 x i8] c"this value is computed but never used\00" +@.str.949 = private unnamed_addr constant [5 x i8] c"expr\00" +@.str.950 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.951 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" +@.str.952 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.953 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.954 = private unnamed_addr constant [5 x i8] c"'if'\00" +@.str.955 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.956 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.957 = private unnamed_addr constant [3 x i8] c"||\00" +@.str.958 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.959 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.960 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.961 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.962 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.963 = private unnamed_addr constant [2 x i8] c">\00" +@.str.964 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.965 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.966 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.967 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.968 = private unnamed_addr constant [2 x i8] c"^\00" +@.str.969 = private unnamed_addr constant [2 x i8] c"*\00" +@.str.970 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.971 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.972 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.973 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.974 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.975 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.976 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.977 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.978 = private unnamed_addr constant [7 x i8] c"binary\00" +@.str.979 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.980 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.981 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.982 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.983 = private unnamed_addr constant [2 x i8] c"~\00" +@.str.984 = private unnamed_addr constant [6 x i8] c"unary\00" +@.str.985 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.986 = private unnamed_addr constant [4 x i8] c"'('\00" +@.str.987 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.988 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.989 = private unnamed_addr constant [2 x i8] c")\00" +@.str.990 = private unnamed_addr constant [2 x i8] c")\00" +@.str.991 = private unnamed_addr constant [1 x i8] c"\00" +@.str.992 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.993 = private unnamed_addr constant [2 x i8] c":\00" +@.str.994 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.995 = private unnamed_addr constant [30 x i8] c"used .names on a null pointer\00" +@.str.996 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.997 = private unnamed_addr constant [29 x i8] c"used .kids on a null pointer\00" +@.str.998 = private unnamed_addr constant [2 x i8] c",\00" +@.str.999 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1000 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1001 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1002 = private unnamed_addr constant [4 x i8] c"')'\00" +@.str.1003 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1004 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.1005 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.1006 = private unnamed_addr constant [17 x i8] c"a name after '.'\00" +@.str.1007 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1008 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.1009 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1010 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.1011 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1012 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1013 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1014 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1015 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1016 = private unnamed_addr constant [4 x i8] c"']'\00" +@.str.1017 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1018 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1019 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1020 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1021 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.1022 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1023 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.1024 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1025 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1026 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1027 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1028 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1029 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1030 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1031 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1032 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1033 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1034 = private unnamed_addr constant [4 x i8] c"')'\00" +@.str.1035 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.1036 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1037 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1038 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1039 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1040 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1041 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1042 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1043 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1044 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1045 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1046 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1047 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1048 = private unnamed_addr constant [42 x i8] c"':' (a map entry looks like \22key\22: value)\00" +@.str.1049 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1050 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1051 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1052 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1053 = private unnamed_addr constant [4 x i8] c"']'\00" +@.str.1054 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.1055 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1056 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1057 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.1058 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1059 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.1060 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1061 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.1062 = private unnamed_addr constant [6 x i8] c"targs\00" +@.str.1063 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1064 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1065 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" +@.str.1066 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.1067 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1068 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.1069 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.1070 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.1071 = private unnamed_addr constant [20 x i8] c" (expected a value)\00" +@.str.1072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1073 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.1074 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" +@.str.1075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1076 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1077 = private unnamed_addr constant [3 x i8] c"\5Cn\00" +@.str.1078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1079 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1080 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1082 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.1083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1084 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1085 = private unnamed_addr constant [4 x i8] c"@R\09\00" +@.str.1086 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1087 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1089 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1090 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1091 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1092 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1093 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1094 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1095 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1097 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1099 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1100 = private unnamed_addr constant [4 x i8] c"fn \00" +@.str.1101 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1102 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1103 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1104 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1105 = private unnamed_addr constant [6 x i8] c" -> !\00" +@.str.1106 = private unnamed_addr constant [5 x i8] c" -> \00" +@.str.1107 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.1108 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1109 = private unnamed_addr constant [5 x i8] c" -> \00" +@.str.1110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1111 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.1112 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.1113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1114 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1117 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.1118 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.1119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1120 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1123 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1124 = private unnamed_addr constant [4 x i8] c"@I\09\00" +@.str.1125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1126 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.1127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1128 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1132 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1134 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1135 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1136 = private unnamed_addr constant [4 x i8] c"@F\09\00" +@.str.1137 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1138 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1139 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1141 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1143 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1144 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1145 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1146 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1147 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1148 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.1149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1150 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.1151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1152 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1154 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1156 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1157 = private unnamed_addr constant [4 x i8] c"@F\09\00" +@.str.1158 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1159 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1160 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1162 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1164 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1165 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1166 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1167 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1168 = private unnamed_addr constant [4 x i8] c"fn \00" +@.str.1169 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1170 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1171 = private unnamed_addr constant [7 x i8] c"](...)\00" +@.str.1172 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1174 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1176 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1180 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1181 = private unnamed_addr constant [4 x i8] c"@S\09\00" +@.str.1182 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1183 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1185 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1186 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1187 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1188 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1189 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1190 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1191 = private unnamed_addr constant [5 x i8] c"@SF\09\00" +@.str.1192 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1193 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1195 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1197 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1198 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1199 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1200 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1201 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1202 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1203 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1204 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1205 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1206 = private unnamed_addr constant [4 x i8] c"@E\09\00" +@.str.1207 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1208 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1210 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1211 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1213 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1215 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1216 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1217 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1219 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.1220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1221 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1222 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1223 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1224 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1225 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1226 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.1227 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1229 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1230 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1231 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1232 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1233 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.1234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1235 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.1236 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1237 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.1238 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1240 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1242 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.1243 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1244 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1245 = private unnamed_addr constant [3 x i8] c" \00" +@.str.1246 = private unnamed_addr constant [9 x i8] c", !dbg !\00" +@.str.1247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1248 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1249 = private unnamed_addr constant [3 x i8] c" \00" +@.str.1250 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1251 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1252 = private unnamed_addr constant [3 x i8] c"%t\00" +@.str.1253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1254 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1256 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" +@.str.1257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1258 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" +@.str.1259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1260 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1261 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1263 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1265 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1266 = private unnamed_addr constant [11 x i8] c"br label %\00" +@.str.1267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1268 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1269 = private unnamed_addr constant [7 x i8] c"br i1 \00" +@.str.1270 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1271 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1273 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1275 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1276 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1278 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1279 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1280 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1281 = private unnamed_addr constant [3 x i8] c" \00" +@.str.1282 = private unnamed_addr constant [11 x i8] c" = alloca \00" +@.str.1283 = private unnamed_addr constant [11 x i8] c", align 16\00" +@.str.1284 = private unnamed_addr constant [9 x i8] c" = load \00" +@.str.1285 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1286 = private unnamed_addr constant [7 x i8] c"store \00" +@.str.1287 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1288 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1289 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.1290 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1291 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.1292 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.1293 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1294 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.1295 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.1296 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.1297 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.1298 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1299 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.1300 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1301 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1302 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.1303 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.1304 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.1305 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.1306 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1307 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.1308 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.1309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1311 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1313 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1315 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1316 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1318 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1319 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1321 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1322 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1323 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1324 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1326 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1327 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1329 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1331 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1332 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1333 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1335 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1337 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1338 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1339 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1340 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1342 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.1343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1344 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1345 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1346 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1347 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1348 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1349 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1350 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1351 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1352 = private unnamed_addr constant [64 x i8] c"a map key must be a whole number, a char, a bool or a str, not \00" +@.str.1353 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1354 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1355 = private unnamed_addr constant [42 x i8] c"a map value can't have the type 'nothing'\00" +@.str.1356 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.1357 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.1358 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1359 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1360 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1361 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.1362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1363 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.1364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1365 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.1366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1367 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.1368 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1369 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1370 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.1371 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1372 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" +@.str.1373 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1374 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1375 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1376 = private unnamed_addr constant [29 x i8] c"there is no C struct named '\00" +@.str.1377 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1378 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1379 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1381 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.1382 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1383 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" +@.str.1384 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1385 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1386 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1387 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1388 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1389 = private unnamed_addr constant [25 x i8] c"there is no type named '\00" +@.str.1390 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1391 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1392 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1393 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1394 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1395 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1396 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1397 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1399 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1400 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1401 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1402 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1403 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1404 = private unnamed_addr constant [5 x i8] c"main\00" +@.str.1405 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1406 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1407 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1408 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.1409 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1410 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.1411 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.1412 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1413 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1414 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1415 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.1416 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1417 = private unnamed_addr constant [38 x i8] c"{ ptr, i64, i64, i64, ptr, i64, i64 }\00" +@.str.1418 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.1419 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1420 = private unnamed_addr constant [4 x i8] c" x \00" +@.str.1421 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1422 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1423 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1424 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1425 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1426 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1427 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1428 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1429 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1430 = private unnamed_addr constant [4 x i8] c"%S.\00" +@.str.1431 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1432 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.1433 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1434 = private unnamed_addr constant [7 x i8] c"{ i1, \00" +@.str.1435 = private unnamed_addr constant [22 x i8] c", { ptr, i64, i64 } }\00" +@.str.1436 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1437 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1438 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1439 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1440 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1441 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.1442 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1443 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1444 = private unnamed_addr constant [4 x i8] c"0.0\00" +@.str.1445 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1446 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1447 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1448 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.1449 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" +@.str.1450 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" +@.str.1451 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1452 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1453 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1454 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1455 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1456 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1458 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1459 = private unnamed_addr constant [5 x i8] c"arr_\00" +@.str.1460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1461 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1462 = private unnamed_addr constant [5 x i8] c"map_\00" +@.str.1463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1464 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.1465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1466 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1467 = private unnamed_addr constant [3 x i8] c"E_\00" +@.str.1468 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.1469 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1470 = private unnamed_addr constant [3 x i8] c"S_\00" +@.str.1471 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.1472 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" +@.str.1473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1476 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" +@.str.1477 = private unnamed_addr constant [7 x i8] c"@.str.\00" +@.str.1478 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1479 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" +@.str.1480 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.1481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1482 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.1483 = private unnamed_addr constant [35 x i8] c" = private unnamed_addr constant [\00" +@.str.1484 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" +@.str.1485 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1486 = private unnamed_addr constant [5 x i8] c"\5C00\22\00" +@.str.1487 = private unnamed_addr constant [7 x i8] c"{ ptr \00" +@.str.1488 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1489 = private unnamed_addr constant [10 x i8] c", i64 0 }\00" +@.str.1490 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1491 = private unnamed_addr constant [6 x i8] c"panic\00" +@.str.1492 = private unnamed_addr constant [3 x i8] c"ok\00" +@.str.1493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1494 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1496 = private unnamed_addr constant [28 x i8] c"call void @finch_panic(ptr \00" +@.str.1497 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1498 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1499 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1500 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.1501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1502 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1503 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.1504 = private unnamed_addr constant [8 x i8] c"inrange\00" +@.str.1505 = private unnamed_addr constant [14 x i8] c"icmp uge i64 \00" +@.str.1506 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1508 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1510 = private unnamed_addr constant [34 x i8] c"call void @finch_panic_index(ptr \00" +@.str.1511 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1512 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1513 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1514 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1515 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.1516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1517 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1519 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1521 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1523 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1525 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1527 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1529 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1530 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1531 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1532 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1533 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1535 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1537 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1539 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.1540 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" +@.str.1541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1542 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1543 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1544 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1546 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1547 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1548 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" +@.str.1549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1550 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1552 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1554 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1556 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1558 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1559 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1560 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1561 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.1562 = private unnamed_addr constant [7 x i8] c"n.cond\00" +@.str.1563 = private unnamed_addr constant [7 x i8] c"n.body\00" +@.str.1564 = private unnamed_addr constant [6 x i8] c"n.end\00" +@.str.1565 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1566 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.1567 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1568 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1570 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1571 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.1572 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.1573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1574 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1575 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1576 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1577 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" +@.str.1578 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1579 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1580 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1581 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1582 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1583 = private unnamed_addr constant [11 x i8] c"call void \00" +@.str.1584 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.1585 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1586 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1587 = private unnamed_addr constant [13 x i8] c"@finch.copy.\00" +@.str.1588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1589 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1591 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1592 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1593 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1594 = private unnamed_addr constant [56 x i8] c"call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 \00" +@.str.1595 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1596 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1597 = private unnamed_addr constant [5 x i8] c"%dst\00" +@.str.1598 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1599 = private unnamed_addr constant [5 x i8] c"%src\00" +@.str.1600 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1601 = private unnamed_addr constant [65 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1\00" +@.str.1602 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1603 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1604 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1606 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1607 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1608 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1610 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1611 = private unnamed_addr constant [56 x i8] c"call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 \00" +@.str.1612 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1615 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1616 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1617 = private unnamed_addr constant [25 x i8] c", ptr %src, i32 0, i32 2\00" +@.str.1618 = private unnamed_addr constant [5 x i8] c"%src\00" +@.str.1619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1620 = private unnamed_addr constant [5 x i8] c"%dst\00" +@.str.1621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1622 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.1623 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.1624 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.1625 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1626 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1627 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1628 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" +@.str.1629 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1630 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1633 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1634 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1635 = private unnamed_addr constant [5 x i8] c"%src\00" +@.str.1636 = private unnamed_addr constant [5 x i8] c"%dst\00" +@.str.1637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1638 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1639 = private unnamed_addr constant [24 x i8] c", ptr %dst, i32 0, i32 \00" +@.str.1640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1641 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1642 = private unnamed_addr constant [24 x i8] c", ptr %src, i32 0, i32 \00" +@.str.1643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1644 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1645 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.1646 = private unnamed_addr constant [22 x i8] c"define internal void \00" +@.str.1647 = private unnamed_addr constant [21 x i8] c"(ptr %dst, ptr %src)\00" +@.str.1648 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1649 = private unnamed_addr constant [31 x i8] c"call void @finch_str_drop(ptr \00" +@.str.1650 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1651 = private unnamed_addr constant [11 x i8] c"call void \00" +@.str.1652 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.1653 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1654 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1655 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.1656 = private unnamed_addr constant [13 x i8] c"@finch.drop.\00" +@.str.1657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1658 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1660 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1661 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1662 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1663 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1664 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1665 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1666 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00" +@.str.1667 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1668 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1669 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1670 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1671 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_free(ptr %a)\00" +@.str.1672 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1674 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1675 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1676 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1677 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00" +@.str.1678 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1679 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1680 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.1681 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.1682 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.1683 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1684 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1685 = private unnamed_addr constant [34 x i8] c"call void @finch_map_free(ptr %a)\00" +@.str.1686 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1687 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1690 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1691 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1694 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.1695 = private unnamed_addr constant [22 x i8] c"define internal void \00" +@.str.1696 = private unnamed_addr constant [9 x i8] c"(ptr %a)\00" +@.str.1697 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1698 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1699 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1700 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1702 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1703 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1704 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1705 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1707 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1709 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1710 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1711 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.1712 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1713 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1714 = private unnamed_addr constant [36 x i8] c" = call i32 (ptr, ...) @printf(ptr \00" +@.str.1715 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1716 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.1717 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1718 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.1719 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.1720 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1721 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.1722 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1723 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1724 = private unnamed_addr constant [5 x i8] c"%lld\00" +@.str.1725 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1726 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1727 = private unnamed_addr constant [5 x i8] c"%llu\00" +@.str.1728 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1729 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.1730 = private unnamed_addr constant [3 x i8] c"%g\00" +@.str.1731 = private unnamed_addr constant [8 x i8] c"double \00" +@.str.1732 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1733 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1734 = private unnamed_addr constant [9 x i8] c"sext i8 \00" +@.str.1735 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.1736 = private unnamed_addr constant [5 x i8] c"'%c'\00" +@.str.1737 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1738 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.1739 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1740 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1741 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.1742 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1743 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.1744 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1745 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1746 = private unnamed_addr constant [3 x i8] c"%s\00" +@.str.1747 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.1748 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1749 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.1750 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.1751 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.1752 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.1753 = private unnamed_addr constant [7 x i8] c"\22%.*s\22\00" +@.str.1754 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1755 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1756 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.1757 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1758 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1759 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1760 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.1761 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.1762 = private unnamed_addr constant [9 x i8] c"ptr.null\00" +@.str.1763 = private unnamed_addr constant [9 x i8] c"ptr.addr\00" +@.str.1764 = private unnamed_addr constant [9 x i8] c"ptr.done\00" +@.str.1765 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1766 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1767 = private unnamed_addr constant [7 x i8] c"0x%llx\00" +@.str.1768 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1769 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str.1770 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str.1771 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1772 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1773 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1774 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.1775 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.1776 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.1777 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_print(ptr \00" +@.str.1778 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1779 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_add(ptr \00" +@.str.1780 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1781 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1782 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1783 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.1784 = private unnamed_addr constant [2 x i8] c"1\00" +@.str.1785 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_int(ptr \00" +@.str.1786 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1787 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1788 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1789 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_uint(ptr \00" +@.str.1790 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1791 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.1792 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1793 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_float(ptr \00" +@.str.1794 = private unnamed_addr constant [10 x i8] c", double \00" +@.str.1795 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1796 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1797 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1798 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_char(ptr \00" +@.str.1799 = private unnamed_addr constant [6 x i8] c", i8 \00" +@.str.1800 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.1801 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1802 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1803 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_bool(ptr \00" +@.str.1804 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.1805 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.1806 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.1807 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1808 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1809 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_str(ptr \00" +@.str.1810 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1811 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.1812 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1813 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1814 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1815 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_ptr(ptr \00" +@.str.1816 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1817 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1818 = private unnamed_addr constant [11 x i8] c"call void \00" +@.str.1819 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.1820 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1821 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1822 = private unnamed_addr constant [15 x i8] c"@finch.format.\00" +@.str.1823 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1824 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1825 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1826 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1827 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1829 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1830 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1831 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1832 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00" +@.str.1833 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1834 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1835 = private unnamed_addr constant [4 x i8] c"sep\00" +@.str.1836 = private unnamed_addr constant [5 x i8] c"item\00" +@.str.1837 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" +@.str.1838 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1839 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1840 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1841 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1842 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1843 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1844 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1846 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1847 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1848 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1849 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1850 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1851 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1853 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1854 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1855 = private unnamed_addr constant [11 x i8] c"enum.other\00" +@.str.1856 = private unnamed_addr constant [10 x i8] c"enum.done\00" +@.str.1857 = private unnamed_addr constant [7 x i8] c"enum.v\00" +@.str.1858 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1860 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1862 = private unnamed_addr constant [12 x i8] c"switch i32 \00" +@.str.1863 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1864 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.1865 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1866 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.1867 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1868 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1870 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1871 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1872 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1873 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1874 = private unnamed_addr constant [40 x i8] c"call void @finch_buf_int(ptr %buf, i64 \00" +@.str.1875 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str.1876 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str.1877 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1878 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1879 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1880 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1881 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1882 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1883 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.1884 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1885 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.1886 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1887 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1888 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00" +@.str.1889 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1891 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.1892 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.1893 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.1894 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1895 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1896 = private unnamed_addr constant [4 x i8] c"sep\00" +@.str.1897 = private unnamed_addr constant [5 x i8] c"item\00" +@.str.1898 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1899 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1900 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1901 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1902 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1903 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1904 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1905 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1906 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1907 = private unnamed_addr constant [3 x i8] c": \00" +@.str.1908 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1909 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1911 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1912 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.1913 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1915 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1918 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1919 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1920 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1921 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1922 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1923 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1924 = private unnamed_addr constant [10 x i8] c"sum.other\00" +@.str.1925 = private unnamed_addr constant [9 x i8] c"sum.done\00" +@.str.1926 = private unnamed_addr constant [6 x i8] c"sum.v\00" +@.str.1927 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1928 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1929 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1930 = private unnamed_addr constant [12 x i8] c"switch i64 \00" +@.str.1931 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1932 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.1933 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1934 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.1935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1936 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1938 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1940 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1941 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1942 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1943 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1944 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1945 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1946 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1947 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1948 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1949 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1950 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1951 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1953 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1954 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1955 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1956 = private unnamed_addr constant [4 x i8] c"(?)\00" +@.str.1957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1958 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1960 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1961 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1962 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1963 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1964 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1966 = private unnamed_addr constant [3 x i8] c": \00" +@.str.1967 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1968 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1970 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1971 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1973 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1974 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1975 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.1976 = private unnamed_addr constant [22 x i8] c"define internal void \00" +@.str.1977 = private unnamed_addr constant [19 x i8] c"(ptr %buf, ptr %a)\00" +@.str.1978 = private unnamed_addr constant [7 x i8] c"trunc \00" +@.str.1979 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1980 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1981 = private unnamed_addr constant [6 x i8] c"sext \00" +@.str.1982 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1983 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1984 = private unnamed_addr constant [6 x i8] c"zext \00" +@.str.1985 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1986 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1987 = private unnamed_addr constant [7 x i8] c"fpext \00" +@.str.1988 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1989 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1990 = private unnamed_addr constant [9 x i8] c"fptrunc \00" +@.str.1991 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1992 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1993 = private unnamed_addr constant [8 x i8] c"sitofp \00" +@.str.1994 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1995 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1996 = private unnamed_addr constant [8 x i8] c"uitofp \00" +@.str.1997 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1998 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1999 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2000 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2001 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2002 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2003 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2004 = private unnamed_addr constant [12 x i8] c"the number \00" +@.str.2005 = private unnamed_addr constant [17 x i8] c" doesn't fit in \00" +@.str.2006 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2007 = private unnamed_addr constant [3 x i8] c".0\00" +@.str.2008 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2009 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2010 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2011 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2012 = private unnamed_addr constant [10 x i8] c" must be \00" +@.str.2013 = private unnamed_addr constant [15 x i8] c", but this is \00" +@.str.2014 = private unnamed_addr constant [7 x i8] c" (use \00" +@.str.2015 = private unnamed_addr constant [17 x i8] c"(...) to convert\00" +@.str.2016 = private unnamed_addr constant [27 x i8] c", it cuts off the fraction\00" +@.str.2017 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2018 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2019 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2020 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2021 = private unnamed_addr constant [35 x i8] c" (turn it into text with str(...))\00" +@.str.2022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2023 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2025 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2027 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2028 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2030 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2032 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2034 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2036 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2037 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2038 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2040 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2042 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2044 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2046 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2048 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2051 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2054 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2057 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2059 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2060 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2062 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2064 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2065 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2067 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.2068 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.2069 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2070 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2071 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2072 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2073 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2074 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.2075 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.2076 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.2077 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.2078 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.2079 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.2080 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.2081 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.2082 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2083 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.2084 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.2085 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.2086 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.2087 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.2088 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.2089 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.2090 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.2091 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.2092 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2093 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.2094 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.2095 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.2096 = private unnamed_addr constant [19 x i8] c"a variable named '\00" +@.str.2097 = private unnamed_addr constant [22 x i8] c"' already exists here\00" +@.str.2098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2099 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2100 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2101 = private unnamed_addr constant [36 x i8] c"' is already the name of a function\00" +@.str.2102 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2103 = private unnamed_addr constant [39 x i8] c"' is a built-in name, pick another one\00" +@.str.2104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2105 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2107 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2109 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2110 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2112 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2113 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2114 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2116 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.2117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2118 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.2119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2120 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2121 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.2122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2123 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.2124 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.2125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2126 = private unnamed_addr constant [2 x i8] c"$\00" +@.str.2127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2128 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2130 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.2131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2133 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.2134 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2136 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.2137 = private unnamed_addr constant [4 x i8] c"@V\09\00" +@.str.2138 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2139 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2141 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.2142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2143 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2144 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2145 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2146 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2147 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.2148 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2149 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2150 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2151 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.2152 = private unnamed_addr constant [2 x i8] c" \00" +@.str.2153 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.2154 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2156 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2157 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2158 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.2159 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2160 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2162 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2164 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.2165 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2166 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2168 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2169 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2170 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2173 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2177 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2179 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2181 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2183 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2186 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2187 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2189 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.2190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2191 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2192 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2195 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.2196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2197 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2198 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2199 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2200 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2201 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2202 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.2203 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.2204 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.2205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2206 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2207 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.2208 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.2209 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.2210 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.2211 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.2212 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.2213 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.2214 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.2215 = private unnamed_addr constant [7 x i8] c"assign\00" +@.str.2216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2217 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.2218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2219 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" +@.str.2220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2221 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.2222 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.2223 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2224 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2225 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2227 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2229 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2230 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2231 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2232 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2233 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2235 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2236 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2238 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2239 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2240 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2241 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2242 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2243 = private unnamed_addr constant [13 x i8] c"the struct '\00" +@.str.2244 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2245 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2246 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2248 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2249 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2250 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2251 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2252 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2254 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2256 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2258 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2259 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2260 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2261 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2264 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2265 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2266 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2268 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2269 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2270 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2271 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2272 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2273 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2274 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2275 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.2276 = private unnamed_addr constant [18 x i8] c" has the variant \00" +@.str.2277 = private unnamed_addr constant [7 x i8] c" twice\00" +@.str.2278 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2279 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.2280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2281 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2283 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2284 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2285 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2286 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2287 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2288 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2289 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.2290 = private unnamed_addr constant [18 x i8] c" has the variant \00" +@.str.2291 = private unnamed_addr constant [7 x i8] c" twice\00" +@.str.2292 = private unnamed_addr constant [17 x i8] c"two variants of \00" +@.str.2293 = private unnamed_addr constant [18 x i8] c" have the number \00" +@.str.2294 = private unnamed_addr constant [21 x i8] c" (give each its own)\00" +@.str.2295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2296 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.2297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2298 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.2299 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2300 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2301 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2302 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2303 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.2304 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2306 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2307 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2308 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2310 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2313 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2315 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2316 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2318 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2319 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2321 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2322 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2323 = private unnamed_addr constant [11 x i8] c"function '\00" +@.str.2324 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2326 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2327 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2328 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" +@.str.2329 = private unnamed_addr constant [54 x i8] c"' here (a method goes in the same file as its struct)\00" +@.str.2330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2331 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2332 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2333 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2335 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2337 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2338 = private unnamed_addr constant [12 x i8] c"the method \00" +@.str.2339 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2340 = private unnamed_addr constant [18 x i8] c" is defined twice\00" +@.str.2341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2342 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2343 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2344 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2345 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2346 = private unnamed_addr constant [27 x i8] c"there is no struct named '\00" +@.str.2347 = private unnamed_addr constant [77 x i8] c"' here (a method goes in the same file as its struct, or on a struct from C)\00" +@.str.2348 = private unnamed_addr constant [12 x i8] c"the method \00" +@.str.2349 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2350 = private unnamed_addr constant [18 x i8] c" is defined twice\00" +@.str.2351 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2352 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2353 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2354 = private unnamed_addr constant [12 x i8] c"the struct \00" +@.str.2355 = private unnamed_addr constant [29 x i8] c" already has a field named '\00" +@.str.2356 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2358 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2359 = private unnamed_addr constant [11 x i8] c"function '\00" +@.str.2360 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2361 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2362 = private unnamed_addr constant [44 x i8] c"' is a built-in function, pick another name\00" +@.str.2363 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2364 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2365 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2367 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2368 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2369 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2370 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2371 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2372 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2373 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2375 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.2376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2377 = private unnamed_addr constant [23 x i8] c"'self' is already the \00" +@.str.2378 = private unnamed_addr constant [25 x i8] c" the method is called on\00" +@.str.2379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2381 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2382 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2383 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2385 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2387 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2389 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2390 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2392 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2393 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2395 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2396 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2397 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2399 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2401 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2402 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.2403 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2405 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2407 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2408 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" +@.str.2409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2410 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2412 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2413 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2414 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2415 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2417 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2418 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2421 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.2422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2424 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2427 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" +@.str.2428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2429 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2431 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2433 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2436 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2437 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2441 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2442 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2444 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2445 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2446 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2449 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2450 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2451 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2452 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2453 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2455 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2456 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2458 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2459 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2460 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2461 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2462 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" +@.str.2463 = private unnamed_addr constant [29 x i8] c"' (a struct written struct \00" +@.str.2464 = private unnamed_addr constant [35 x i8] c"[T] { ... } takes type arguments)\00" +@.str.2465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2466 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2467 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2468 = private unnamed_addr constant [8 x i8] c" takes \00" +@.str.2469 = private unnamed_addr constant [25 x i8] c" type argument(s), like \00" +@.str.2470 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2471 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2472 = private unnamed_addr constant [12 x i8] c"], but got \00" +@.str.2473 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2474 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.2475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2476 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2477 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2478 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2479 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2480 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2481 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2482 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2483 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2484 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.2485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2486 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2487 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2489 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2490 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2491 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2492 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2493 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2494 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2496 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2498 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2500 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2502 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2504 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2506 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2508 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2509 = private unnamed_addr constant [18 x i8] c" (while building \00" +@.str.2510 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2512 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2517 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2519 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2521 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2523 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2525 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2527 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2529 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2530 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.2531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2532 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" +@.str.2533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2535 = private unnamed_addr constant [30 x i8] c"used .types on a null pointer\00" +@.str.2536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2538 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" +@.str.2539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2540 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2541 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2542 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.2543 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2544 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2545 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2546 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2547 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2548 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2550 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2551 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.2552 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2554 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2556 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2558 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2559 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2560 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2562 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2565 = private unnamed_addr constant [8 x i8] c" takes \00" +@.str.2566 = private unnamed_addr constant [28 x i8] c" type argument(s), but got \00" +@.str.2567 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2568 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2569 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2570 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2571 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2572 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.2573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2574 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2575 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2577 = private unnamed_addr constant [30 x i8] c"this has no type to work out \00" +@.str.2578 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2579 = private unnamed_addr constant [6 x i8] c" from\00" +@.str.2580 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2581 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2582 = private unnamed_addr constant [17 x i8] c"can't tell what \00" +@.str.2583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2584 = private unnamed_addr constant [25 x i8] c" is here; write it out: \00" +@.str.2585 = private unnamed_addr constant [11 x i8] c"[int](...)\00" +@.str.2586 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2588 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2591 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2593 = private unnamed_addr constant [11 x i8] c"argument '\00" +@.str.2594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2595 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2596 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2597 = private unnamed_addr constant [2 x i8] c" \00" +@.str.2598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2599 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.2600 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2601 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2602 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2603 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2605 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2606 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2607 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2608 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2609 = private unnamed_addr constant [7 x i8] c" x i8]\00" +@.str.2610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2611 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2612 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2614 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2615 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2616 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2617 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2620 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2622 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2623 = private unnamed_addr constant [7 x i8] c" x i8]\00" +@.str.2624 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2625 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2626 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2627 = private unnamed_addr constant [50 x i8] c"has fields Finch can't see (unions or bit fields)\00" +@.str.2628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2629 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2630 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2632 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2633 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2634 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2635 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2636 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2638 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2639 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2641 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.2642 = private unnamed_addr constant [6 x i8] c"%S.C.\00" +@.str.2643 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str.2644 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2645 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.2646 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2647 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2648 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2649 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2650 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2651 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2652 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2653 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2654 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2655 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2656 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2658 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2660 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2661 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2662 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2663 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2664 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2665 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2666 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2667 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2668 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2670 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2671 = private unnamed_addr constant [18 x i8] c" (while building \00" +@.str.2672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2673 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2674 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2675 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2676 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2677 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2678 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2679 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2680 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2681 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2682 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2683 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2684 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2685 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2686 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2687 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2690 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2691 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2694 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2695 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2696 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2697 = private unnamed_addr constant [12 x i8] c"the struct \00" +@.str.2698 = private unnamed_addr constant [27 x i8] c" contains itself; use ptr[\00" +@.str.2699 = private unnamed_addr constant [8 x i8] c"] or []\00" +@.str.2700 = private unnamed_addr constant [16 x i8] c" for that field\00" +@.str.2701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2702 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2703 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2705 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2707 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2710 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2711 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2712 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2713 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2714 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2715 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2716 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2717 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2718 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2719 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2720 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2721 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2722 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2724 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2725 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2726 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2727 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2728 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2729 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2730 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2731 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2732 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2733 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.2734 = private unnamed_addr constant [4 x i8] c"%S.\00" +@.str.2735 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2736 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2737 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2738 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2739 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2740 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2742 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str.2743 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2744 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.2745 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2746 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2747 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2748 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2749 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2750 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2752 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.2753 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2754 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2755 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.2756 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.2757 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.2758 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.2759 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.2760 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.2761 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2762 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.2763 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2764 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2765 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2766 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.2767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2768 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2770 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2772 = private unnamed_addr constant [43 x i8] c"!DIDerivedType(tag: DW_TAG_member, name: \22\00" +@.str.2773 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" +@.str.2774 = private unnamed_addr constant [10 x i8] c", file: !\00" +@.str.2775 = private unnamed_addr constant [9 x i8] c", line: \00" +@.str.2776 = private unnamed_addr constant [13 x i8] c", baseType: \00" +@.str.2777 = private unnamed_addr constant [9 x i8] c", size: \00" +@.str.2778 = private unnamed_addr constant [11 x i8] c", offset: \00" +@.str.2779 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2780 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" +@.str.2781 = private unnamed_addr constant [10 x i8] c"\22, size: \00" +@.str.2782 = private unnamed_addr constant [13 x i8] c", encoding: \00" +@.str.2783 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2784 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2785 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2786 = private unnamed_addr constant [3 x i8] c"T:\00" +@.str.2787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2788 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2790 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2791 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2792 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2793 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.2794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2795 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2796 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2797 = private unnamed_addr constant [15 x i8] c"DW_ATE_boolean\00" +@.str.2798 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2799 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2800 = private unnamed_addr constant [19 x i8] c"DW_ATE_signed_char\00" +@.str.2801 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2802 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2803 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" +@.str.2804 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2805 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2806 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" +@.str.2807 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2808 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2809 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" +@.str.2810 = private unnamed_addr constant [16 x i8] c"DW_ATE_unsigned\00" +@.str.2811 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" +@.str.2812 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.2813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2814 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.2815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2816 = private unnamed_addr constant [22 x i8] c"!DIEnumerator(name: \22\00" +@.str.2817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2818 = private unnamed_addr constant [11 x i8] c"\22, value: \00" +@.str.2819 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2820 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2821 = private unnamed_addr constant [55 x i8] c"!DICompositeType(tag: DW_TAG_enumeration_type, name: \22\00" +@.str.2822 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2823 = private unnamed_addr constant [25 x i8] c", size: 32, elements: !{\00" +@.str.2824 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2825 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2826 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2828 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2829 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2831 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" +@.str.2832 = private unnamed_addr constant [12 x i8] c", size: 64)\00" +@.str.2833 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2834 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2836 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.2837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2838 = private unnamed_addr constant [20 x i8] c"!DISubrange(count: \00" +@.str.2839 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2840 = private unnamed_addr constant [52 x i8] c"!DICompositeType(tag: DW_TAG_array_type, baseType: \00" +@.str.2841 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2842 = private unnamed_addr constant [9 x i8] c", size: \00" +@.str.2843 = private unnamed_addr constant [16 x i8] c", elements: !{!\00" +@.str.2844 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2846 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2847 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2848 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2849 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2850 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2851 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2853 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" +@.str.2854 = private unnamed_addr constant [12 x i8] c", size: 64)\00" +@.str.2855 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2856 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2857 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.2858 = private unnamed_addr constant [4 x i8] c"cap\00" +@.str.2859 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" +@.str.2860 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2861 = private unnamed_addr constant [38 x i8] c", size: 192, align: 64, elements: !{!\00" +@.str.2862 = private unnamed_addr constant [4 x i8] c", !\00" +@.str.2863 = private unnamed_addr constant [4 x i8] c", !\00" +@.str.2864 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2865 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2866 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2867 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2868 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2869 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2870 = private unnamed_addr constant [67 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)\00" +@.str.2871 = private unnamed_addr constant [8 x i8] c"entries\00" +@.str.2872 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.2873 = private unnamed_addr constant [5 x i8] c"used\00" +@.str.2874 = private unnamed_addr constant [4 x i8] c"cap\00" +@.str.2875 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.2876 = private unnamed_addr constant [5 x i8] c"icap\00" +@.str.2877 = private unnamed_addr constant [5 x i8] c"adds\00" +@.str.2878 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2879 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2880 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" +@.str.2881 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2882 = private unnamed_addr constant [37 x i8] c", size: 448, align: 64, elements: !{\00" +@.str.2883 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2884 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2886 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2887 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2888 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2889 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2890 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2892 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2893 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2894 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2896 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2897 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" +@.str.2898 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2899 = private unnamed_addr constant [9 x i8] c", size: \00" +@.str.2900 = private unnamed_addr constant [25 x i8] c", align: 8, elements: !{\00" +@.str.2901 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2902 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2904 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2905 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2906 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" +@.str.2907 = private unnamed_addr constant [40 x i8] c"\22, size: 64, encoding: DW_ATE_unsigned)\00" +@.str.2908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2909 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2912 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2913 = private unnamed_addr constant [3 x i8] c"L:\00" +@.str.2914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2915 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.2916 = private unnamed_addr constant [2 x i8] c":\00" +@.str.2917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2918 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.2919 = private unnamed_addr constant [2 x i8] c":\00" +@.str.2920 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2921 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2923 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2924 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2925 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2926 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2927 = private unnamed_addr constant [19 x i8] c"!DILocation(line: \00" +@.str.2928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2929 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.2930 = private unnamed_addr constant [11 x i8] c", column: \00" +@.str.2931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2932 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.2933 = private unnamed_addr constant [11 x i8] c", scope: !\00" +@.str.2934 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2935 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2936 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2938 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2940 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.2941 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2942 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2943 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.2944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2945 = private unnamed_addr constant [28 x i8] c"!DISubroutineType(types: !{\00" +@.str.2946 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2947 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2948 = private unnamed_addr constant [31 x i8] c"distinct !DISubprogram(name: \22\00" +@.str.2949 = private unnamed_addr constant [18 x i8] c"\22, linkageName: \22\00" +@.str.2950 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2951 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" +@.str.2952 = private unnamed_addr constant [10 x i8] c", file: !\00" +@.str.2953 = private unnamed_addr constant [9 x i8] c", line: \00" +@.str.2954 = private unnamed_addr constant [10 x i8] c", type: !\00" +@.str.2955 = private unnamed_addr constant [14 x i8] c", scopeLine: \00" +@.str.2956 = private unnamed_addr constant [88 x i8] c", flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagLocalToUnit, unit: !0)\00" +@.str.2957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2958 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.2959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2960 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2961 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2962 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2963 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.2964 = private unnamed_addr constant [8 x i8] c", arg: \00" +@.str.2965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2966 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.2967 = private unnamed_addr constant [25 x i8] c"!DILocalVariable(name: \22\00" +@.str.2968 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" +@.str.2969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2970 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2971 = private unnamed_addr constant [10 x i8] c", file: !\00" +@.str.2972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2973 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.2974 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2975 = private unnamed_addr constant [9 x i8] c", line: \00" +@.str.2976 = private unnamed_addr constant [10 x i8] c", type: !\00" +@.str.2977 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2978 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2979 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.2980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2981 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.2982 = private unnamed_addr constant [42 x i8] c"call void @llvm.dbg.declare(metadata ptr \00" +@.str.2983 = private unnamed_addr constant [13 x i8] c", metadata !\00" +@.str.2984 = private unnamed_addr constant [28 x i8] c", metadata !DIExpression())\00" +@.str.2985 = private unnamed_addr constant [21 x i8] c"!llvm.dbg.cu = !{!0}\00" +@.str.2986 = private unnamed_addr constant [31 x i8] c"!llvm.module.flags = !{!1, !2}\00" +@.str.2987 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2988 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2989 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2990 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.2991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2992 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2993 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2994 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.2995 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.2996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2997 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2998 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2999 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3000 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3001 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3002 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3003 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3004 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.3005 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3006 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3007 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3008 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.3009 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3010 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3011 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3012 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.3013 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3014 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3015 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.3016 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3017 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3018 = private unnamed_addr constant [18 x i8] c" (while building \00" +@.str.3019 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3020 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3021 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3023 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.3024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3025 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.3026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3027 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3028 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3030 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3032 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3033 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.3034 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3035 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.3036 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3037 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.3038 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3039 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3040 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3041 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.3042 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3043 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.3044 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3045 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.3046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3047 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.3048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3049 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.3050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3051 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.3052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3053 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.3054 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3055 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3057 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3059 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3060 = private unnamed_addr constant [10 x i8] c"ptr %self\00" +@.str.3061 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3062 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3063 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3064 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3066 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3068 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3070 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3072 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.3073 = private unnamed_addr constant [6 x i8] c"%self\00" +@.str.3074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3075 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.3076 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.3077 = private unnamed_addr constant [6 x i8] c"%self\00" +@.str.3078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3079 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3080 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3081 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3082 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3083 = private unnamed_addr constant [4 x i8] c" %p\00" +@.str.3084 = private unnamed_addr constant [3 x i8] c"%p\00" +@.str.3085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3086 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3087 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3089 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.3090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3091 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3092 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3093 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.3094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3095 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3096 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3099 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3100 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3102 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.3103 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3105 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3107 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3108 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3109 = private unnamed_addr constant [11 x i8] c"function '\00" +@.str.3110 = private unnamed_addr constant [39 x i8] c"' can reach its end without returning \00" +@.str.3111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3112 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3114 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3115 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3117 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3118 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" +@.str.3119 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.3120 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3121 = private unnamed_addr constant [8 x i8] c" !dbg !\00" +@.str.3122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3123 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.3124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.3126 = private unnamed_addr constant [17 x i8] c"define internal \00" +@.str.3127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3128 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3129 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3131 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3132 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.3133 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3134 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3135 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" +@.str.3136 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3137 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.3138 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.3139 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.3140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3141 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.3142 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.3143 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" +@.str.3144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3145 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3146 = private unnamed_addr constant [67 x i8] c"this code can never run (it comes after return, break or continue)\00" +@.str.3147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3148 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.3149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3150 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.3151 = private unnamed_addr constant [6 x i8] c"block\00" +@.str.3152 = private unnamed_addr constant [5 x i8] c"decl\00" +@.str.3153 = private unnamed_addr constant [7 x i8] c"assign\00" +@.str.3154 = private unnamed_addr constant [5 x i8] c"expr\00" +@.str.3155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3156 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.3157 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3159 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.3160 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.3161 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.3162 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.3163 = private unnamed_addr constant [5 x i8] c"each\00" +@.str.3164 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.3165 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.3166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3167 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3168 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" +@.str.3169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3170 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3172 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3175 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3178 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3182 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3185 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.3186 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.3187 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.3188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3189 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3190 = private unnamed_addr constant [28 x i8] c" can't be used inside defer\00" +@.str.3191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3192 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3193 = private unnamed_addr constant [32 x i8] c" can only be used inside a loop\00" +@.str.3194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3195 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3197 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3198 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3199 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.3200 = private unnamed_addr constant [19 x i8] c"unknown statement \00" +@.str.3201 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3202 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3204 = private unnamed_addr constant [47 x i8] c"this gives back nothing, so it can't be stored\00" +@.str.3205 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3206 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3207 = private unnamed_addr constant [35 x i8] c"null needs a type, like: ptr[int] \00" +@.str.3208 = private unnamed_addr constant [8 x i8] c" = null\00" +@.str.3209 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3210 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3211 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3212 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3213 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3215 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.3216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3217 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3218 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.3219 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3221 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3222 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3223 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" +@.str.3224 = private unnamed_addr constant [19 x i8] c"' (create it with \00" +@.str.3225 = private unnamed_addr constant [9 x i8] c" := ...)\00" +@.str.3226 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" +@.str.3227 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" +@.str.3228 = private unnamed_addr constant [10 x i8] c"the value\00" +@.str.3229 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3230 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3231 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3232 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.3233 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3234 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3235 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3236 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3238 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3240 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3242 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3243 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3244 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3245 = private unnamed_addr constant [12 x i8] c"a condition\00" +@.str.3246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3247 = private unnamed_addr constant [5 x i8] c"then\00" +@.str.3248 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.3249 = private unnamed_addr constant [6 x i8] c"endif\00" +@.str.3250 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3251 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3252 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3254 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3255 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3256 = private unnamed_addr constant [11 x i8] c"while.cond\00" +@.str.3257 = private unnamed_addr constant [11 x i8] c"while.body\00" +@.str.3258 = private unnamed_addr constant [10 x i8] c"while.end\00" +@.str.3259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3260 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3262 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.3263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3265 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3266 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3267 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3269 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3270 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3271 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3273 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3275 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3276 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.3277 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.3278 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.3279 = private unnamed_addr constant [5 x i8] c"each\00" +@.str.3280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3281 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3283 = private unnamed_addr constant [21 x i8] c"the start of a range\00" +@.str.3284 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3285 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3286 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3287 = private unnamed_addr constant [19 x i8] c"the end of a range\00" +@.str.3288 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3289 = private unnamed_addr constant [9 x i8] c"for.cond\00" +@.str.3290 = private unnamed_addr constant [9 x i8] c"for.body\00" +@.str.3291 = private unnamed_addr constant [9 x i8] c"for.step\00" +@.str.3292 = private unnamed_addr constant [8 x i8] c"for.end\00" +@.str.3293 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3294 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3295 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3296 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3297 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3299 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3301 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3302 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3303 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3304 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3306 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3307 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3308 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3309 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3310 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3313 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3315 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3316 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3317 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3318 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3319 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3320 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3321 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3322 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" +@.str.3323 = private unnamed_addr constant [9 x i8] c"map.cond\00" +@.str.3324 = private unnamed_addr constant [10 x i8] c"map.check\00" +@.str.3325 = private unnamed_addr constant [9 x i8] c"map.body\00" +@.str.3326 = private unnamed_addr constant [9 x i8] c"map.step\00" +@.str.3327 = private unnamed_addr constant [8 x i8] c"map.end\00" +@.str.3328 = private unnamed_addr constant [12 x i8] c"map.changed\00" +@.str.3329 = private unnamed_addr constant [9 x i8] c"map.same\00" +@.str.3330 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3331 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3332 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3333 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" +@.str.3334 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.3335 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3336 = private unnamed_addr constant [34 x i8] c"call void @finch_map_changed(ptr \00" +@.str.3337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3338 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.3339 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3340 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3341 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3342 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3344 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3345 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3346 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3347 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3348 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3349 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" +@.str.3350 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3351 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3352 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3353 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.3354 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3356 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3358 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3360 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3363 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3365 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3366 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3367 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3368 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3369 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3370 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3371 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3372 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3373 = private unnamed_addr constant [6 x i8] c"$list\00" +@.str.3374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3375 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.3376 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3377 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3378 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3380 = private unnamed_addr constant [56 x i8] c"for ... in needs an array, a str or a map, but this is \00" +@.str.3381 = private unnamed_addr constant [37 x i8] c" (for a range of numbers write 0..n)\00" +@.str.3382 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.3383 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3387 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3388 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3389 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3390 = private unnamed_addr constant [10 x i8] c"each.cond\00" +@.str.3391 = private unnamed_addr constant [10 x i8] c"each.body\00" +@.str.3392 = private unnamed_addr constant [10 x i8] c"each.step\00" +@.str.3393 = private unnamed_addr constant [9 x i8] c"each.end\00" +@.str.3394 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3395 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" +@.str.3396 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.3397 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3398 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3399 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3400 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.3401 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3402 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3403 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3405 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3407 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3409 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3410 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3412 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3413 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3414 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3415 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3416 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3417 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3418 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3419 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3421 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3422 = private unnamed_addr constant [34 x i8] c"return can't be used inside defer\00" +@.str.3423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3424 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.3425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3426 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.3427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3429 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3430 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3431 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3432 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3433 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3435 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3436 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3437 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3439 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3440 = private unnamed_addr constant [65 x i8] c"' can't fail, so it can't return an error (make it fallible: -> \00" +@.str.3441 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3442 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.3443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3444 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3446 = private unnamed_addr constant [18 x i8] c"the error message\00" +@.str.3447 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3449 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3450 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3451 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3453 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3454 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" +@.str.3455 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.3456 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3457 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3458 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3459 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3460 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3461 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3462 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3464 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3465 = private unnamed_addr constant [47 x i8] c"' doesn't return a value (it has no '-> type')\00" +@.str.3466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3467 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3468 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3469 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3470 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3471 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" +@.str.3472 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.3473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3474 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3475 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3477 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3478 = private unnamed_addr constant [15 x i8] c"' must return \00" +@.str.3479 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3480 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3482 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3483 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3484 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3485 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3486 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3487 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3489 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3490 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3491 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3494 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.3495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3496 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3498 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3500 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.3501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3502 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3506 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3508 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3512 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3517 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3519 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3521 = private unnamed_addr constant [19 x i8] c"the returned value\00" +@.str.3522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3523 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3524 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3526 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3527 = private unnamed_addr constant [29 x i8] c" zeroinitializer, i1 true, 0\00" +@.str.3528 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3530 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3531 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3532 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3534 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3535 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3536 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3537 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3539 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3540 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3541 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3543 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3544 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3546 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3547 = private unnamed_addr constant [8 x i8] c"{ i64, \00" +@.str.3548 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3549 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3550 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3551 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.3552 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" +@.str.3553 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" +@.str.3554 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.3555 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3556 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3557 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" +@.str.3558 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3559 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3560 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3561 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3562 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3563 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str.3564 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3566 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3567 = private unnamed_addr constant [2 x i8] c"1\00" +@.str.3568 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.3569 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3570 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3571 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3573 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.3574 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_find(\00" +@.str.3575 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3576 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3577 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.3578 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.3579 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3580 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_slot(\00" +@.str.3581 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3582 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3583 = private unnamed_addr constant [8 x i8] c"map.new\00" +@.str.3584 = private unnamed_addr constant [9 x i8] c"map.have\00" +@.str.3585 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.3586 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.3587 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3591 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3593 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3595 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3596 = private unnamed_addr constant [8 x i8] c"the key\00" +@.str.3597 = private unnamed_addr constant [45 x i8] c"this is a temporary map, it can't be changed\00" +@.str.3598 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3599 = private unnamed_addr constant [12 x i8] c"map.missing\00" +@.str.3600 = private unnamed_addr constant [10 x i8] c"map.found\00" +@.str.3601 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3602 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3603 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3604 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3605 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.3606 = private unnamed_addr constant [34 x i8] c"call void @finch_map_missing(ptr \00" +@.str.3607 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3608 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.3609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3610 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3611 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3612 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3613 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3615 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3616 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3617 = private unnamed_addr constant [53 x i8] c"an empty [:] needs a type, like: map[str]int m = [:]\00" +@.str.3618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3619 = private unnamed_addr constant [6 x i8] c"unary\00" +@.str.3620 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.3621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3622 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3623 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3624 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3625 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3626 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3627 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3629 = private unnamed_addr constant [36 x i8] c"a map key needs a value with a type\00" +@.str.3630 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3631 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3633 = private unnamed_addr constant [38 x i8] c"a map value needs a value with a type\00" +@.str.3634 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3635 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.3636 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3637 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3639 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3642 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3644 = private unnamed_addr constant [22 x i8] c"every key of this map\00" +@.str.3645 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3646 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3647 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3648 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3649 = private unnamed_addr constant [24 x i8] c"every value of this map\00" +@.str.3650 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3651 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3652 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3653 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3654 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.3655 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.3656 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.3657 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.3658 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3660 = private unnamed_addr constant [8 x i8] c"the key\00" +@.str.3661 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" +@.str.3662 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3663 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.3664 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3665 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.3666 = private unnamed_addr constant [11 x i8] c"remove.hit\00" +@.str.3667 = private unnamed_addr constant [11 x i8] c"remove.end\00" +@.str.3668 = private unnamed_addr constant [36 x i8] c"call void @finch_map_remove_at(ptr \00" +@.str.3669 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3670 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3671 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3672 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3673 = private unnamed_addr constant [10 x i8] c"get.found\00" +@.str.3674 = private unnamed_addr constant [12 x i8] c"get.missing\00" +@.str.3675 = private unnamed_addr constant [9 x i8] c"get.fend\00" +@.str.3676 = private unnamed_addr constant [9 x i8] c"get.mend\00" +@.str.3677 = private unnamed_addr constant [8 x i8] c"get.end\00" +@.str.3678 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3679 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3680 = private unnamed_addr constant [12 x i8] c"the default\00" +@.str.3681 = private unnamed_addr constant [5 x i8] c"phi \00" +@.str.3682 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.3683 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3684 = private unnamed_addr constant [7 x i8] c" ], [ \00" +@.str.3685 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3686 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.3687 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.3688 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3689 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3690 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3691 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" +@.str.3692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3693 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.3694 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.3695 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.3696 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3697 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3698 = private unnamed_addr constant [32 x i8] c"call void @finch_map_clear(ptr \00" +@.str.3699 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3700 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3701 = private unnamed_addr constant [5 x i8] c"keys\00" +@.str.3702 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.3703 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.3704 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3705 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3706 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.3707 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3708 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3709 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3710 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.3711 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" +@.str.3712 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3713 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3714 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3715 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.3716 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3717 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3718 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3719 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3720 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3721 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3722 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" +@.str.3723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3724 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.3725 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.3726 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.3727 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3728 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3729 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3730 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3731 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3732 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3733 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3734 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3735 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3736 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3737 = private unnamed_addr constant [22 x i8] c"a map has no method '\00" +@.str.3738 = private unnamed_addr constant [50 x i8] c"' (it has: has, get, remove, clear, keys, values)\00" +@.str.3739 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3740 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3742 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.3743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3744 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3745 = private unnamed_addr constant [23 x i8] c"' is not a variant of \00" +@.str.3746 = private unnamed_addr constant [11 x i8] c" (it has: \00" +@.str.3747 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3748 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3749 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3750 = private unnamed_addr constant [13 x i8] c"this pattern\00" +@.str.3751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3752 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3753 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3755 = private unnamed_addr constant [31 x i8] c"there is nothing to match here\00" +@.str.3756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3757 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3758 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3759 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3760 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.3761 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3762 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3763 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3764 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.3765 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3766 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3767 = private unnamed_addr constant [10 x i8] c"match.end\00" +@.str.3768 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3770 = private unnamed_addr constant [73 x i8] c"this arm can never be used: 'else' already takes everything that is left\00" +@.str.3771 = private unnamed_addr constant [10 x i8] c"match.arm\00" +@.str.3772 = private unnamed_addr constant [11 x i8] c"match.next\00" +@.str.3773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3774 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3775 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3777 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00" +@.str.3778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3779 = private unnamed_addr constant [53 x i8] c"an arm with several variants can't name their values\00" +@.str.3780 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.3781 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3782 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3783 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3784 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3785 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00" +@.str.3786 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.3787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3788 = private unnamed_addr constant [9 x i8] c"match.or\00" +@.str.3789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3790 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.3791 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3792 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3793 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.3794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3795 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.3796 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3798 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3799 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.3800 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3801 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3803 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3804 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3806 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3807 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3808 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3809 = private unnamed_addr constant [53 x i8] c"an arm of a match that gives a value has to give one\00" +@.str.3810 = private unnamed_addr constant [58 x i8] c"this arm (the arms of a match have to give the same type)\00" +@.str.3811 = private unnamed_addr constant [11 x i8] c"match.from\00" +@.str.3812 = private unnamed_addr constant [6 x i8] c"block\00" +@.str.3813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3814 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3816 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.3817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3819 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.3820 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3821 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3822 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00" +@.str.3823 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3824 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00" +@.str.3825 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3826 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3827 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.3828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3829 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3831 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00" +@.str.3832 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3833 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00" +@.str.3834 = private unnamed_addr constant [12 x i8] c"a match on \00" +@.str.3835 = private unnamed_addr constant [55 x i8] c" needs an 'else' arm for everything that is not listed\00" +@.str.3836 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.3837 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" +@.str.3838 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3840 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3841 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3842 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3843 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3844 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3845 = private unnamed_addr constant [5 x i8] c"phi \00" +@.str.3846 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3847 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3848 = private unnamed_addr constant [3 x i8] c"[ \00" +@.str.3849 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3850 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3851 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3852 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.3853 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3854 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.3855 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.3856 = private unnamed_addr constant [81 x i8] c"only a function call can fail; 'or' and 'try' go after one, like int(text) or 0\00" +@.str.3857 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3858 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.3859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3860 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3862 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3863 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3864 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.3865 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3866 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3867 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3868 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3870 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3871 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3872 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3873 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3874 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3875 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3876 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.3877 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3878 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3879 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3880 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3881 = private unnamed_addr constant [51 x i8] c"this call can't fail, so it needs no 'or' or 'try'\00" +@.str.3882 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3883 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3884 = private unnamed_addr constant [31 x i8] c"try can't be used inside defer\00" +@.str.3885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3886 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3887 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3888 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3889 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3890 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3892 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3893 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3894 = private unnamed_addr constant [30 x i8] c"try passes the error on, so '\00" +@.str.3895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3896 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3897 = private unnamed_addr constant [32 x i8] c"' must be able to fail too (-> \00" +@.str.3898 = private unnamed_addr constant [56 x i8] c"); or handle it here: ... or / ... or { ... }\00" +@.str.3899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3900 = private unnamed_addr constant [11 x i8] c"try.failed\00" +@.str.3901 = private unnamed_addr constant [7 x i8] c"try.ok\00" +@.str.3902 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3904 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3905 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3906 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3907 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3908 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3909 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" +@.str.3910 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.3911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3912 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3914 = private unnamed_addr constant [10 x i8] c"or.failed\00" +@.str.3915 = private unnamed_addr constant [6 x i8] c"or.ok\00" +@.str.3916 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.3917 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3918 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3919 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3920 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3921 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3923 = private unnamed_addr constant [143 x i8] c"this block must leave with return, break, continue or exit(...): after a failure there is no value to go on with (or give one: ... or )\00" +@.str.3924 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3925 = private unnamed_addr constant [7 x i8] c"or.end\00" +@.str.3926 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3927 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3929 = private unnamed_addr constant [99 x i8] c"this call gives back no value, so there is nothing to replace; handle the failure with or { ... }\00" +@.str.3930 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.3931 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3932 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3934 = private unnamed_addr constant [21 x i8] c"the value after 'or'\00" +@.str.3935 = private unnamed_addr constant [8 x i8] c"or.bend\00" +@.str.3936 = private unnamed_addr constant [7 x i8] c"or.end\00" +@.str.3937 = private unnamed_addr constant [5 x i8] c"phi \00" +@.str.3938 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.3939 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3940 = private unnamed_addr constant [7 x i8] c" ], [ \00" +@.str.3941 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3942 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.3943 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3944 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3945 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3946 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3947 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.3948 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3949 = private unnamed_addr constant [3 x i8] c"0X\00" +@.str.3950 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3951 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3953 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3954 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3955 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3956 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3957 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3958 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.3959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3960 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.3961 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3962 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3963 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3964 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3965 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3966 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.3967 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.3968 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.3969 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.3970 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.3971 = private unnamed_addr constant [6 x i8] c"unary\00" +@.str.3972 = private unnamed_addr constant [7 x i8] c"binary\00" +@.str.3973 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.3974 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.3975 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3976 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3977 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3978 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3979 = private unnamed_addr constant [20 x i8] c"unknown expression \00" +@.str.3980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3981 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3982 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3983 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3984 = private unnamed_addr constant [20 x i8] c"the value after '!'\00" +@.str.3985 = private unnamed_addr constant [8 x i8] c"xor i1 \00" +@.str.3986 = private unnamed_addr constant [7 x i8] c", true\00" +@.str.3987 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3988 = private unnamed_addr constant [2 x i8] c"~\00" +@.str.3989 = private unnamed_addr constant [46 x i8] c"'~' flips the bits of a whole number, not of \00" +@.str.3990 = private unnamed_addr constant [5 x i8] c"xor \00" +@.str.3991 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3992 = private unnamed_addr constant [5 x i8] c", -1\00" +@.str.3993 = private unnamed_addr constant [35 x i8] c" can't be negative (it's unsigned)\00" +@.str.3994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3995 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.3996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3997 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.3998 = private unnamed_addr constant [5 x i8] c"sub \00" +@.str.3999 = private unnamed_addr constant [5 x i8] c" 0, \00" +@.str.4000 = private unnamed_addr constant [6 x i8] c"fneg \00" +@.str.4001 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4002 = private unnamed_addr constant [27 x i8] c"can't put '-' in front of \00" +@.str.4003 = private unnamed_addr constant [12 x i8] c"can't use '\00" +@.str.4004 = private unnamed_addr constant [6 x i8] c"' on \00" +@.str.4005 = private unnamed_addr constant [6 x i8] c" and \00" +@.str.4006 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4007 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4008 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4009 = private unnamed_addr constant [49 x i8] c" (turn the other side into text first: str(...))\00" +@.str.4010 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4011 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.4012 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4013 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4014 = private unnamed_addr constant [27 x i8] c" (for true/false use '&&')\00" +@.str.4015 = private unnamed_addr constant [27 x i8] c" (for true/false use '||')\00" +@.str.4016 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4017 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.4018 = private unnamed_addr constant [2 x i8] c"^\00" +@.str.4019 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.4020 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.4021 = private unnamed_addr constant [44 x i8] c" (bit operators work on whole numbers only)\00" +@.str.4022 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4023 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4024 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4025 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4026 = private unnamed_addr constant [32 x i8] c" (compare the parts one by one)\00" +@.str.4027 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4028 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4030 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4032 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4034 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4036 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4037 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4038 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4040 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4042 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4044 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4046 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4048 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4050 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4051 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4052 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4054 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4056 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4057 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4058 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4059 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4060 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4062 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4064 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4066 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4068 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4070 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4072 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4074 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4076 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4077 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4078 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4079 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4080 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4082 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4084 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4086 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4087 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4088 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4089 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4090 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4091 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4092 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4093 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4094 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4095 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4096 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4098 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4099 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4100 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4102 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4103 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4105 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4107 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4109 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4111 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4112 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4113 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4114 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4116 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4118 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4120 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4122 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4123 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4125 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4126 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4127 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4128 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4129 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4131 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4133 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4134 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4136 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4137 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4138 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4139 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4140 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4142 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4143 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4144 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4145 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4146 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4147 = private unnamed_addr constant [33 x i8] c"call void @finch_str_concat(ptr \00" +@.str.4148 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4149 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4150 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4151 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4152 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4153 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4154 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.4155 = private unnamed_addr constant [2 x i8] c"*\00" +@.str.4156 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.4157 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4158 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4159 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.4160 = private unnamed_addr constant [2 x i8] c"^\00" +@.str.4161 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.4162 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.4163 = private unnamed_addr constant [4 x i8] c"add\00" +@.str.4164 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.4165 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str.4166 = private unnamed_addr constant [5 x i8] c"sdiv\00" +@.str.4167 = private unnamed_addr constant [5 x i8] c"srem\00" +@.str.4168 = private unnamed_addr constant [4 x i8] c"and\00" +@.str.4169 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.4170 = private unnamed_addr constant [4 x i8] c"xor\00" +@.str.4171 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str.4172 = private unnamed_addr constant [5 x i8] c"ashr\00" +@.str.4173 = private unnamed_addr constant [4 x i8] c"add\00" +@.str.4174 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.4175 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str.4176 = private unnamed_addr constant [5 x i8] c"udiv\00" +@.str.4177 = private unnamed_addr constant [5 x i8] c"urem\00" +@.str.4178 = private unnamed_addr constant [4 x i8] c"and\00" +@.str.4179 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.4180 = private unnamed_addr constant [4 x i8] c"xor\00" +@.str.4181 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str.4182 = private unnamed_addr constant [5 x i8] c"lshr\00" +@.str.4183 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.4184 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4185 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4186 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.4187 = private unnamed_addr constant [9 x i8] c"icmp eq \00" +@.str.4188 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4189 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4190 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.4191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4192 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4193 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4194 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4195 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4196 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.4197 = private unnamed_addr constant [2 x i8] c"*\00" +@.str.4198 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.4199 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4200 = private unnamed_addr constant [5 x i8] c"fadd\00" +@.str.4201 = private unnamed_addr constant [5 x i8] c"fsub\00" +@.str.4202 = private unnamed_addr constant [5 x i8] c"fmul\00" +@.str.4203 = private unnamed_addr constant [5 x i8] c"fdiv\00" +@.str.4204 = private unnamed_addr constant [5 x i8] c"frem\00" +@.str.4205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4206 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4207 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4208 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4209 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4210 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4211 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4212 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4213 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4214 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4215 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4216 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4217 = private unnamed_addr constant [60 x i8] c"a str is never null; to check for empty text use s.len == 0\00" +@.str.4218 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4219 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4220 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4221 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4222 = private unnamed_addr constant [6 x i8] c" ptr \00" +@.str.4223 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4224 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4225 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4226 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4227 = private unnamed_addr constant [28 x i8] c"call i32 @finch_str_eq(ptr \00" +@.str.4228 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4229 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4230 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4231 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4232 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4233 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4234 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str.4235 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4236 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4237 = private unnamed_addr constant [29 x i8] c"call i64 @finch_str_cmp(ptr \00" +@.str.4238 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4239 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4240 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4241 = private unnamed_addr constant [6 x i8] c" i64 \00" +@.str.4242 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4243 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4244 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4245 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4246 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.4247 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.4248 = private unnamed_addr constant [2 x i8] c">\00" +@.str.4249 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.4250 = private unnamed_addr constant [4 x i8] c"oeq\00" +@.str.4251 = private unnamed_addr constant [4 x i8] c"une\00" +@.str.4252 = private unnamed_addr constant [4 x i8] c"olt\00" +@.str.4253 = private unnamed_addr constant [4 x i8] c"ole\00" +@.str.4254 = private unnamed_addr constant [4 x i8] c"ogt\00" +@.str.4255 = private unnamed_addr constant [4 x i8] c"oge\00" +@.str.4256 = private unnamed_addr constant [6 x i8] c"fcmp \00" +@.str.4257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4258 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4259 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4260 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4261 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4262 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4263 = private unnamed_addr constant [116 x i8] c"enums can only be compared with == and != (to go through them in order, give the variants numbers and use int(...))\00" +@.str.4264 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4265 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4266 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4267 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4268 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str.4269 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4270 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4271 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4272 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4273 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4274 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4275 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4276 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4277 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4278 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4279 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4280 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4281 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.4282 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.4283 = private unnamed_addr constant [2 x i8] c">\00" +@.str.4284 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.4285 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4286 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4287 = private unnamed_addr constant [4 x i8] c"ult\00" +@.str.4288 = private unnamed_addr constant [4 x i8] c"ule\00" +@.str.4289 = private unnamed_addr constant [4 x i8] c"ugt\00" +@.str.4290 = private unnamed_addr constant [4 x i8] c"uge\00" +@.str.4291 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4292 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4293 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str.4294 = private unnamed_addr constant [4 x i8] c"sle\00" +@.str.4295 = private unnamed_addr constant [4 x i8] c"sgt\00" +@.str.4296 = private unnamed_addr constant [4 x i8] c"sge\00" +@.str.4297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4298 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.4299 = private unnamed_addr constant [3 x i8] c"||\00" +@.str.4300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4301 = private unnamed_addr constant [11 x i8] c"logic.from\00" +@.str.4302 = private unnamed_addr constant [10 x i8] c"logic.rhs\00" +@.str.4303 = private unnamed_addr constant [10 x i8] c"logic.end\00" +@.str.4304 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.4305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4306 = private unnamed_addr constant [11 x i8] c"logic.rend\00" +@.str.4307 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.4308 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.4309 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.4310 = private unnamed_addr constant [10 x i8] c"phi i1 [ \00" +@.str.4311 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.4312 = private unnamed_addr constant [7 x i8] c" ], [ \00" +@.str.4313 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.4314 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.4315 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4316 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4318 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.4319 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4320 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4321 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4322 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.4323 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.4324 = private unnamed_addr constant [2 x i8] c">\00" +@.str.4325 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.4326 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4327 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4329 = private unnamed_addr constant [48 x i8] c"an empty [] needs a type, like: []int nums = []\00" +@.str.4330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4331 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.4332 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4333 = private unnamed_addr constant [28 x i8] c"every element of this array\00" +@.str.4334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4335 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4336 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str.4337 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4338 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" +@.str.4339 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4340 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4341 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4342 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4344 = private unnamed_addr constant [42 x i8] c"insertvalue { ptr, i64, i64 } undef, ptr \00" +@.str.4345 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4346 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" +@.str.4347 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4348 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.4349 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" +@.str.4350 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4351 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.4352 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4353 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" +@.str.4354 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4355 = private unnamed_addr constant [61 x i8] c"this is a temporary value, it can't be changed or pointed to\00" +@.str.4356 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4358 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4360 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4362 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4363 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4365 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4367 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4368 = private unnamed_addr constant [8 x i8] c"fprintf\00" +@.str.4369 = private unnamed_addr constant [6 x i8] c"stdin\00" +@.str.4370 = private unnamed_addr constant [7 x i8] c"stdout\00" +@.str.4371 = private unnamed_addr constant [7 x i8] c"stderr\00" +@.str.4372 = private unnamed_addr constant [2 x i8] c"2\00" +@.str.4373 = private unnamed_addr constant [6 x i8] c"stdin\00" +@.str.4374 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4375 = private unnamed_addr constant [7 x i8] c"stdout\00" +@.str.4376 = private unnamed_addr constant [2 x i8] c"1\00" +@.str.4377 = private unnamed_addr constant [32 x i8] c"call ptr @finch_std_stream(i32 \00" +@.str.4378 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4379 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4381 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4382 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4383 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4386 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4387 = private unnamed_addr constant [3 x i8] c"g:\00" +@.str.4388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4389 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4390 = private unnamed_addr constant [3 x i8] c"g:\00" +@.str.4391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4392 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.4393 = private unnamed_addr constant [2 x i8] c"@\00" +@.str.4394 = private unnamed_addr constant [20 x i8] c" = external global \00" +@.str.4395 = private unnamed_addr constant [2 x i8] c"@\00" +@.str.4396 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4397 = private unnamed_addr constant [44 x i8] c"' is a module; use something from it, like \00" +@.str.4398 = private unnamed_addr constant [11 x i8] c".name(...)\00" +@.str.4399 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" +@.str.4400 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4401 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4402 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4403 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4404 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4405 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.4406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4407 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4408 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4410 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4412 = private unnamed_addr constant [2 x i8] c"e\00" +@.str.4413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4414 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.4415 = private unnamed_addr constant [3 x i8] c".0\00" +@.str.4416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4417 = private unnamed_addr constant [3 x i8] c".0\00" +@.str.4418 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4419 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4421 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.4422 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4424 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4428 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4429 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4430 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.4431 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4433 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4436 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4437 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4438 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4440 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.4441 = private unnamed_addr constant [18 x i8] c" has no variant '\00" +@.str.4442 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.4443 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4444 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4446 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4449 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4450 = private unnamed_addr constant [23 x i8] c" holds nothing: write \00" +@.str.4451 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4452 = private unnamed_addr constant [8 x i8] c" holds \00" +@.str.4453 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4454 = private unnamed_addr constant [20 x i8] c" value(s), but got \00" +@.str.4455 = private unnamed_addr constant [3 x i8] c": \00" +@.str.4456 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4457 = private unnamed_addr constant [6 x i8] c"(...)\00" +@.str.4458 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4459 = private unnamed_addr constant [4 x i8] c"tag\00" +@.str.4460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4461 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.4462 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4463 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4464 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4465 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4467 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4469 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4470 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4471 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.4472 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4474 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.4475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4477 = private unnamed_addr constant [34 x i8] c"this pattern is not a variant of \00" +@.str.4478 = private unnamed_addr constant [11 x i8] c" (it has: \00" +@.str.4479 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4480 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4482 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4483 = private unnamed_addr constant [28 x i8] c" holds nothing: write just \00" +@.str.4484 = private unnamed_addr constant [8 x i8] c" holds \00" +@.str.4485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4486 = private unnamed_addr constant [28 x i8] c" value(s): name them, like \00" +@.str.4487 = private unnamed_addr constant [28 x i8] c"(x), or use _ to ignore one\00" +@.str.4488 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4489 = private unnamed_addr constant [51 x i8] c"write a name to hold the value (or _ to ignore it)\00" +@.str.4490 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4491 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.4492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4493 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.4494 = private unnamed_addr constant [18 x i8] c" has no variant '\00" +@.str.4495 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.4496 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4497 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4498 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4499 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4500 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.4501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4502 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4503 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4505 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4507 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00" +@.str.4508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4509 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4512 = private unnamed_addr constant [8 x i8] c" holds \00" +@.str.4513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4514 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4517 = private unnamed_addr constant [12 x i8] c" value(s): \00" +@.str.4518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4519 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4521 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4522 = private unnamed_addr constant [6 x i8] c"(...)\00" +@.str.4523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4524 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00" +@.str.4525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4526 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4527 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4528 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" +@.str.4529 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.4530 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.4531 = private unnamed_addr constant [7 x i8] c"used .\00" +@.str.4532 = private unnamed_addr constant [19 x i8] c" on a null pointer\00" +@.str.4533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4534 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4535 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4536 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4538 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.4539 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.4540 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4541 = private unnamed_addr constant [3 x i8] c"a \00" +@.str.4542 = private unnamed_addr constant [44 x i8] c" only has '.value' (the thing it points to)\00" +@.str.4543 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4544 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4545 = private unnamed_addr constant [27 x i8] c" can't be changed directly\00" +@.str.4546 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.4547 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4548 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4549 = private unnamed_addr constant [35 x i8] c"an array has .len and .ptr, not '.\00" +@.str.4550 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4551 = private unnamed_addr constant [49 x i8] c".ptr of a temporary value would point to nothing\00" +@.str.4552 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4553 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4554 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4555 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4556 = private unnamed_addr constant [31 x i8] c".ptr can't be changed directly\00" +@.str.4557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4558 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4559 = private unnamed_addr constant [54 x i8] c".ptr of a temporary value would point to freed memory\00" +@.str.4560 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4561 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4562 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.4563 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4565 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4566 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4567 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.4568 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.4569 = private unnamed_addr constant [38 x i8] c"an array, map or str has .len, not '.\00" +@.str.4570 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4571 = private unnamed_addr constant [49 x i8] c".len can't be changed directly (use push or pop)\00" +@.str.4572 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4573 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4574 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.4575 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4576 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4577 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.4578 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4579 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.4580 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4581 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4582 = private unnamed_addr constant [22 x i8] c" has no fields (no '.\00" +@.str.4583 = private unnamed_addr constant [3 x i8] c"')\00" +@.str.4584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4585 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4586 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4587 = private unnamed_addr constant [12 x i8] c"the struct \00" +@.str.4588 = private unnamed_addr constant [16 x i8] c" has no field '\00" +@.str.4589 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.4590 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4591 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4593 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4594 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4595 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4596 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4597 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4598 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4599 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str.4600 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4601 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.4602 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4603 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4606 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4607 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.4608 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.4609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4610 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4611 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4612 = private unnamed_addr constant [9 x i8] c"an index\00" +@.str.4613 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4614 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4615 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4616 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4617 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00" +@.str.4618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4619 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4620 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" +@.str.4621 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4623 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4624 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4625 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4626 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4627 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4628 = private unnamed_addr constant [47 x i8] c"[ ] works on arrays, str and pointers, not on \00" +@.str.4629 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4630 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4632 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4633 = private unnamed_addr constant [45 x i8] c"this is a temporary str, it can't be changed\00" +@.str.4634 = private unnamed_addr constant [30 x i8] c"call void @finch_str_own(ptr \00" +@.str.4635 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4636 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4637 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.4638 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.4639 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.4640 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4641 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4642 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4643 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4644 = private unnamed_addr constant [18 x i8] c"named arguments (\00" +@.str.4645 = private unnamed_addr constant [37 x i8] c": ...) are only for creating structs\00" +@.str.4646 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4647 = private unnamed_addr constant [9 x i8] c"' takes \00" +@.str.4648 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" +@.str.4649 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4650 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4651 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4652 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4653 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.4654 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4655 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4656 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4657 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4658 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4659 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.4660 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.4661 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.4662 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.4663 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.4664 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.4665 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.4666 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4667 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4668 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4670 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4671 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4672 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.4673 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4674 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4675 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.4676 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4677 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4678 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4679 = private unnamed_addr constant [33 x i8] c"call i32 @finch_str_try_int(ptr \00" +@.str.4680 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4681 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4682 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4683 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.4684 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4685 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4686 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.4687 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4689 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.4690 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4691 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4692 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4693 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4694 = private unnamed_addr constant [4 x i8] c"0.0\00" +@.str.4695 = private unnamed_addr constant [35 x i8] c"call i32 @finch_str_try_float(ptr \00" +@.str.4696 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4697 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4698 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4699 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.4700 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4702 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.4703 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4705 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.4706 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4707 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4708 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4710 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.4711 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4712 = private unnamed_addr constant [32 x i8] c"call i64 @finch_str_to_int(ptr \00" +@.str.4713 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4714 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4715 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4716 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4717 = private unnamed_addr constant [37 x i8] c"call double @finch_str_to_float(ptr \00" +@.str.4718 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4719 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4720 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4721 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4722 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4723 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.4724 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4725 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4726 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4727 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.4728 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.4729 = private unnamed_addr constant [7 x i8] c"fptoui\00" +@.str.4730 = private unnamed_addr constant [7 x i8] c"fptosi\00" +@.str.4731 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4732 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4733 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.4734 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4735 = private unnamed_addr constant [9 x i8] c"icmp ne \00" +@.str.4736 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4737 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4738 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4739 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4740 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4741 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4742 = private unnamed_addr constant [14 x i8] c"inttoptr i64 \00" +@.str.4743 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.4744 = private unnamed_addr constant [8 x i8] c" to ptr\00" +@.str.4745 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4746 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str.4747 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.4748 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4749 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4750 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4751 = private unnamed_addr constant [71 x i8] c"use .ptr to get a str's address (it is only valid while the str lives)\00" +@.str.4752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4753 = private unnamed_addr constant [12 x i8] c"can't turn \00" +@.str.4754 = private unnamed_addr constant [7 x i8] c" into \00" +@.str.4755 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4757 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4758 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4759 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4760 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4761 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4762 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4763 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4764 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4765 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4766 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4768 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4772 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4775 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4777 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4779 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4780 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4781 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.4782 = private unnamed_addr constant [4 x i8] c" x \00" +@.str.4783 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.4784 = private unnamed_addr constant [3 x i8] c"{ \00" +@.str.4785 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4786 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.4787 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4788 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4789 = private unnamed_addr constant [5 x i8] c"i128\00" +@.str.4790 = private unnamed_addr constant [5 x i8] c"i128\00" +@.str.4791 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4792 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4793 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" +@.str.4794 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" +@.str.4795 = private unnamed_addr constant [7 x i8] c"direct\00" +@.str.4796 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4798 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4799 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4800 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4801 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4803 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4804 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4805 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4806 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4807 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4808 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4809 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4810 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.4811 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4812 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4814 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4816 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4819 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4820 = private unnamed_addr constant [12 x i8] c"<2 x float>\00" +@.str.4821 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4822 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4823 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4824 = private unnamed_addr constant [3 x i8] c"{ \00" +@.str.4825 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4826 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.4827 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4828 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4829 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4830 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4831 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4832 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4833 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4834 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4836 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4838 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4840 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4841 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4842 = private unnamed_addr constant [7 x i8] c"direct\00" +@.str.4843 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4844 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4845 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4846 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4847 = private unnamed_addr constant [17 x i8] c"the C function '\00" +@.str.4848 = private unnamed_addr constant [3 x i8] c"' \00" +@.str.4849 = private unnamed_addr constant [19 x i8] c" the Finch struct \00" +@.str.4850 = private unnamed_addr constant [21 x i8] c", which C can't take\00" +@.str.4851 = private unnamed_addr constant [17 x i8] c"the C function '\00" +@.str.4852 = private unnamed_addr constant [3 x i8] c"' \00" +@.str.4853 = private unnamed_addr constant [13 x i8] c" the struct \00" +@.str.4854 = private unnamed_addr constant [41 x i8] c" by value, which Finch can't do yet: it \00" +@.str.4855 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4856 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4857 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4858 = private unnamed_addr constant [60 x i8] c"methods can't be exported (export a plain fn that calls it)\00" +@.str.4859 = private unnamed_addr constant [75 x i8] c"an export fn can't fail (C has no errors as values): handle them inside it\00" +@.str.4860 = private unnamed_addr constant [30 x i8] c"an export fn can't be generic\00" +@.str.4861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4862 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4863 = private unnamed_addr constant [67 x i8] c"an export fn takes numbers, bool, char and pointers only (this is \00" +@.str.4864 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4865 = private unnamed_addr constant [51 x i8] c"; pass text as ptr[char] and make it a str inside)\00" +@.str.4866 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4867 = private unnamed_addr constant [70 x i8] c"an export fn returns nothing, a number, bool, char or a pointer (not \00" +@.str.4868 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4870 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.4871 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4872 = private unnamed_addr constant [39 x i8] c"' is exported twice (from two modules)\00" +@.str.4873 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4874 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4875 = private unnamed_addr constant [14 x i8] c"i8 zeroext %e\00" +@.str.4876 = private unnamed_addr constant [4 x i8] c"i1 \00" +@.str.4877 = private unnamed_addr constant [14 x i8] c"icmp ne i8 %e\00" +@.str.4878 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4879 = private unnamed_addr constant [4 x i8] c" %e\00" +@.str.4880 = private unnamed_addr constant [4 x i8] c" %e\00" +@.str.4881 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.4882 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4883 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4884 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4885 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4886 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4887 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4888 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4889 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.4890 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4891 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.4892 = private unnamed_addr constant [9 x i8] c" zeroext\00" +@.str.4893 = private unnamed_addr constant [8 x i8] c"ret i8 \00" +@.str.4894 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.4895 = private unnamed_addr constant [7 x i8] c" to i8\00" +@.str.4896 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.4897 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4898 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4900 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4901 = private unnamed_addr constant [11 x i8] c" dllexport\00" +@.str.4902 = private unnamed_addr constant [7 x i8] c"define\00" +@.str.4903 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4904 = private unnamed_addr constant [3 x i8] c" @\00" +@.str.4905 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4906 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4907 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4909 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.4910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4911 = private unnamed_addr constant [10 x i8] c"@finch.c.\00" +@.str.4912 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4914 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4915 = private unnamed_addr constant [3 x i8] c"t:\00" +@.str.4916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4917 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4918 = private unnamed_addr constant [3 x i8] c"t:\00" +@.str.4919 = private unnamed_addr constant [6 x i8] c"addr(\00" +@.str.4920 = private unnamed_addr constant [82 x i8] c") gives C a function pointer, so it can't be a method or a function that can fail\00" +@.str.4921 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4922 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4923 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4924 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4925 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4926 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4927 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4928 = private unnamed_addr constant [6 x i8] c"addr(\00" +@.str.4929 = private unnamed_addr constant [96 x i8] c") gives C a function pointer, so its parameters must be C types (numbers, ptr, C structs), not \00" +@.str.4930 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4931 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4932 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4933 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4934 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4936 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4938 = private unnamed_addr constant [6 x i8] c"addr(\00" +@.str.4939 = private unnamed_addr constant [39 x i8] c"): a function given to C can't return \00" +@.str.4940 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4941 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" +@.str.4942 = private unnamed_addr constant [15 x i8] c") align 16 %c0\00" +@.str.4943 = private unnamed_addr constant [4 x i8] c"%c0\00" +@.str.4944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4945 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4946 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4947 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" +@.str.4948 = private unnamed_addr constant [9 x i8] c") align \00" +@.str.4949 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4950 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4951 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.4952 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4953 = private unnamed_addr constant [7 x i8] c"ptr %c\00" +@.str.4954 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4955 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.4956 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4957 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.4958 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4959 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4960 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4961 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.4962 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str.4963 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4964 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4965 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4966 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4967 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.4968 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4969 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4970 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4971 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4972 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4973 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4974 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.4975 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.4976 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4977 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.4978 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.4979 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4980 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.4981 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4982 = private unnamed_addr constant [16 x i8] c"define internal\00" +@.str.4983 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4984 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4985 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4986 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4987 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4988 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4989 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.4990 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4992 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4993 = private unnamed_addr constant [55 x i8] c"(...) turns a whole number into the enum, but this is \00" +@.str.4994 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4995 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4997 = private unnamed_addr constant [38 x i8] c" is not the number of any variant of \00" +@.str.4998 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4999 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5000 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.5001 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5002 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5003 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str.5004 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5005 = private unnamed_addr constant [8 x i8] c"xor i1 \00" +@.str.5006 = private unnamed_addr constant [7 x i8] c", true\00" +@.str.5007 = private unnamed_addr constant [33 x i8] c"this number is not a variant of \00" +@.str.5008 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.5009 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5010 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5011 = private unnamed_addr constant [9 x i8] c" zeroext\00" +@.str.5012 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5014 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.5015 = private unnamed_addr constant [9 x i8] c" signext\00" +@.str.5016 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5017 = private unnamed_addr constant [9 x i8] c" zeroext\00" +@.str.5018 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5019 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5020 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5021 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5022 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5023 = private unnamed_addr constant [4 x i8] c"...\00" +@.str.5024 = private unnamed_addr constant [18 x i8] c"C function from `\00" +@.str.5025 = private unnamed_addr constant [8 x i8] c"`\0A```c\0A\00" +@.str.5026 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5027 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5028 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5029 = private unnamed_addr constant [6 x i8] c")\0A```\00" +@.str.5030 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5031 = private unnamed_addr constant [17 x i8] c"the C function '\00" +@.str.5032 = private unnamed_addr constant [36 x i8] c"' can't be used from Finch yet: it \00" +@.str.5033 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5034 = private unnamed_addr constant [18 x i8] c"' takes at least \00" +@.str.5035 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" +@.str.5036 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5037 = private unnamed_addr constant [9 x i8] c"' takes \00" +@.str.5038 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" +@.str.5039 = private unnamed_addr constant [8 x i8] c"returns\00" +@.str.5040 = private unnamed_addr constant [6 x i8] c"takes\00" +@.str.5041 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5042 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" +@.str.5043 = private unnamed_addr constant [11 x i8] c") align 16\00" +@.str.5044 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" +@.str.5045 = private unnamed_addr constant [12 x i8] c") align 16 \00" +@.str.5046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5047 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5051 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5052 = private unnamed_addr constant [10 x i8] c"argument \00" +@.str.5053 = private unnamed_addr constant [5 x i8] c" of \00" +@.str.5054 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.5055 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" +@.str.5056 = private unnamed_addr constant [9 x i8] c") align \00" +@.str.5057 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5058 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.5059 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5060 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.5061 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.5062 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.5063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5064 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str.5065 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5068 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5069 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5070 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.5071 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5073 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5075 = private unnamed_addr constant [24 x i8] c"this gives back nothing\00" +@.str.5076 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5077 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5079 = private unnamed_addr constant [69 x i8] c"structs and arrays can't be passed to the '...' part of a C function\00" +@.str.5080 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.5081 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.5082 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.5083 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5084 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5085 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5086 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5087 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5088 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.5089 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5090 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.5091 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.5092 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5093 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5094 = private unnamed_addr constant [7 x i8] c"direct\00" +@.str.5095 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5096 = private unnamed_addr constant [6 x i8] c", ...\00" +@.str.5097 = private unnamed_addr constant [4 x i8] c"...\00" +@.str.5098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5099 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.5100 = private unnamed_addr constant [3 x i8] c"f:\00" +@.str.5101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5102 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.5103 = private unnamed_addr constant [3 x i8] c"f:\00" +@.str.5104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5105 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.5106 = private unnamed_addr constant [8 x i8] c"declare\00" +@.str.5107 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5108 = private unnamed_addr constant [3 x i8] c" @\00" +@.str.5109 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5110 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5111 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5112 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5113 = private unnamed_addr constant [3 x i8] c" (\00" +@.str.5114 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5115 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5116 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.5117 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5118 = private unnamed_addr constant [3 x i8] c" @\00" +@.str.5119 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5120 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5121 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5122 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5123 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.5124 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.5125 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5126 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5127 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5128 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" +@.str.5129 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5130 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5131 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5132 = private unnamed_addr constant [7 x i8] c"printf\00" +@.str.5133 = private unnamed_addr constant [7 x i8] c"fflush\00" +@.str.5134 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.5135 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.5136 = private unnamed_addr constant [6 x i8] c"qsort\00" +@.str.5137 = private unnamed_addr constant [7 x i8] c"printf\00" +@.str.5138 = private unnamed_addr constant [5 x i8] c"puts\00" +@.str.5139 = private unnamed_addr constant [8 x i8] c"putchar\00" +@.str.5140 = private unnamed_addr constant [6 x i8] c"scanf\00" +@.str.5141 = private unnamed_addr constant [6 x i8] c"fopen\00" +@.str.5142 = private unnamed_addr constant [8 x i8] c"getchar\00" +@.str.5143 = private unnamed_addr constant [5 x i8] c"sqrt\00" +@.str.5144 = private unnamed_addr constant [4 x i8] c"pow\00" +@.str.5145 = private unnamed_addr constant [4 x i8] c"sin\00" +@.str.5146 = private unnamed_addr constant [4 x i8] c"cos\00" +@.str.5147 = private unnamed_addr constant [6 x i8] c"floor\00" +@.str.5148 = private unnamed_addr constant [5 x i8] c"fabs\00" +@.str.5149 = private unnamed_addr constant [7 x i8] c"malloc\00" +@.str.5150 = private unnamed_addr constant [5 x i8] c"rand\00" +@.str.5151 = private unnamed_addr constant [6 x i8] c"srand\00" +@.str.5152 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str.5153 = private unnamed_addr constant [5 x i8] c"atoi\00" +@.str.5154 = private unnamed_addr constant [7 x i8] c"strlen\00" +@.str.5155 = private unnamed_addr constant [7 x i8] c"strcpy\00" +@.str.5156 = private unnamed_addr constant [7 x i8] c"memcpy\00" +@.str.5157 = private unnamed_addr constant [5 x i8] c"time\00" +@.str.5158 = private unnamed_addr constant [6 x i8] c"sleep\00" +@.str.5159 = private unnamed_addr constant [7 x i8] c"usleep\00" +@.str.5160 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5161 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5162 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5163 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5164 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5165 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5166 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5167 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5168 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5169 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5170 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5171 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5172 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5173 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5174 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5175 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5176 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5177 = private unnamed_addr constant [9 x i8] c"string.h\00" +@.str.5178 = private unnamed_addr constant [9 x i8] c"string.h\00" +@.str.5179 = private unnamed_addr constant [9 x i8] c"string.h\00" +@.str.5180 = private unnamed_addr constant [7 x i8] c"time.h\00" +@.str.5181 = private unnamed_addr constant [9 x i8] c"unistd.h\00" +@.str.5182 = private unnamed_addr constant [9 x i8] c"unistd.h\00" +@.str.5183 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5184 = private unnamed_addr constant [29 x i8] c" (it's from C: add import \22\00" +@.str.5185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5186 = private unnamed_addr constant [15 x i8] c"\22 at the top)\00" +@.str.5187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5188 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5189 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5190 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.5191 = private unnamed_addr constant [87 x i8] c"error(...) makes an error to return from a function that can fail: return error(\22...\22)\00" +@.str.5192 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.5193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5194 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5195 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5196 = private unnamed_addr constant [54 x i8] c"this gives back nothing, so there is nothing to print\00" +@.str.5197 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5198 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5199 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.5200 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5201 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5202 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.5203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5204 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.5205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5206 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5207 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5208 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.5209 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.5210 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.5211 = private unnamed_addr constant [64 x i8] c"addr(...) needs a variable, a field or an element, like addr(x)\00" +@.str.5212 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5213 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5214 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5215 = private unnamed_addr constant [35 x i8] c"call void @finch_str_from_int(ptr \00" +@.str.5216 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5217 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5218 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5219 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_uint(ptr \00" +@.str.5220 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5221 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.5222 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5223 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_float(ptr \00" +@.str.5224 = private unnamed_addr constant [10 x i8] c", double \00" +@.str.5225 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.5226 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5227 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5228 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_char(ptr \00" +@.str.5229 = private unnamed_addr constant [14 x i8] c", i8 signext \00" +@.str.5230 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5231 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5232 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5233 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5234 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_bool(ptr \00" +@.str.5235 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.5236 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5237 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5238 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5239 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5240 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" +@.str.5241 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5242 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5243 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5245 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.5246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5247 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5248 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5249 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5250 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_bytes(ptr \00" +@.str.5251 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5252 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5253 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5254 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5255 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5256 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.5257 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5258 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5259 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5260 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5262 = private unnamed_addr constant [12 x i8] c"can't turn \00" +@.str.5263 = private unnamed_addr constant [10 x i8] c" into str\00" +@.str.5264 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5265 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5266 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.5267 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.5268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5269 = private unnamed_addr constant [14 x i8] c"the file name\00" +@.str.5270 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.5271 = private unnamed_addr constant [33 x i8] c"call i32 @finch_file_exists(ptr \00" +@.str.5272 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5273 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5274 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5275 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5276 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5277 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5278 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5279 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5280 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5281 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5282 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5283 = private unnamed_addr constant [35 x i8] c"call i32 @finch_try_read_file(ptr \00" +@.str.5284 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5285 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5286 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5287 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.5288 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5290 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5291 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5292 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5293 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5294 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5295 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5296 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5297 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5299 = private unnamed_addr constant [32 x i8] c"call void @finch_read_file(ptr \00" +@.str.5300 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5301 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5302 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5303 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5304 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5305 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5306 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.5307 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5308 = private unnamed_addr constant [14 x i8] c"the file name\00" +@.str.5309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5310 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5312 = private unnamed_addr constant [9 x i8] c"the text\00" +@.str.5313 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5314 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5315 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5316 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5317 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5318 = private unnamed_addr constant [36 x i8] c"call i32 @finch_try_write_file(ptr \00" +@.str.5319 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5320 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5321 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5322 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.5323 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5324 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5325 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5326 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5327 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5328 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5329 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5330 = private unnamed_addr constant [32 x i8] c"call i32 @finch_write_file(ptr \00" +@.str.5331 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5332 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5333 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5334 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5335 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5336 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.5337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5338 = private unnamed_addr constant [14 x i8] c"the file name\00" +@.str.5339 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" +@.str.5340 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5341 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5342 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5343 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5344 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5345 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5346 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5347 = private unnamed_addr constant [37 x i8] c"call i32 @finch_try_delete_file(ptr \00" +@.str.5348 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5349 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5350 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.5351 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5352 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5353 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5354 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5356 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5357 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5358 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5359 = private unnamed_addr constant [33 x i8] c"call i32 @finch_delete_file(ptr \00" +@.str.5360 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5361 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5362 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5363 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5364 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5365 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.5366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5367 = private unnamed_addr constant [12 x i8] c"the command\00" +@.str.5368 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" +@.str.5369 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5370 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5371 = private unnamed_addr constant [27 x i8] c"call i64 @finch_shell(ptr \00" +@.str.5372 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5373 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5374 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5375 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.5376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5377 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5378 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5379 = private unnamed_addr constant [14 x i8] c"the exit code\00" +@.str.5380 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.5381 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5382 = private unnamed_addr constant [27 x i8] c"call i32 @fflush(ptr null)\00" +@.str.5383 = private unnamed_addr constant [21 x i8] c"call void @exit(i32 \00" +@.str.5384 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5385 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5386 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.5387 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5389 = private unnamed_addr constant [13 x i8] c"the question\00" +@.str.5390 = private unnamed_addr constant [28 x i8] c"call void @finch_input(ptr \00" +@.str.5391 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5392 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5393 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5394 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5395 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.5396 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5397 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" +@.str.5398 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5399 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.5400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5401 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5402 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5403 = private unnamed_addr constant [120 x i8] c"free(...) is only for pointers from new(...) or C; arrays, str and structs are freed by Finch at the end of their block\00" +@.str.5404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5405 = private unnamed_addr constant [10 x i8] c"free.drop\00" +@.str.5406 = private unnamed_addr constant [10 x i8] c"free.done\00" +@.str.5407 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.5408 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.5409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5410 = private unnamed_addr constant [21 x i8] c"call void @free(ptr \00" +@.str.5411 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5412 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5414 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5415 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5416 = private unnamed_addr constant [48 x i8] c"' is not generic, so it takes no type arguments\00" +@.str.5417 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5418 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5420 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5421 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5423 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5424 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5425 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5426 = private unnamed_addr constant [43 x i8] c"' is generic, so say which type it holds: \00" +@.str.5427 = private unnamed_addr constant [11 x i8] c"[int](...)\00" +@.str.5428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5429 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5431 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5433 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5436 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5437 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5438 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.5439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5441 = private unnamed_addr constant [17 x i8] c"```finch\0Astruct \00" +@.str.5442 = private unnamed_addr constant [4 x i8] c" { \00" +@.str.5443 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5444 = private unnamed_addr constant [7 x i8] c" }\0A```\00" +@.str.5445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5446 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5449 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5450 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5451 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.5452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5453 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.5454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5455 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.5456 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5457 = private unnamed_addr constant [32 x i8] c"' is a variable, not a function\00" +@.str.5458 = private unnamed_addr constant [29 x i8] c"there is no function named '\00" +@.str.5459 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5461 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.5462 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5463 = private unnamed_addr constant [5 x i8] c"main\00" +@.str.5464 = private unnamed_addr constant [53 x i8] c"main can't be called, it is where the program starts\00" +@.str.5465 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.5466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5467 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5469 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5470 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5471 = private unnamed_addr constant [11 x i8] c"argument '\00" +@.str.5472 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5473 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5476 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5477 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5478 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5479 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5480 = private unnamed_addr constant [40 x i8] c"' can fail, so say what happens then: \00" +@.str.5481 = private unnamed_addr constant [20 x i8] c"(...) or , \00" +@.str.5482 = private unnamed_addr constant [28 x i8] c"(...) or { ... }, or try \00" +@.str.5483 = private unnamed_addr constant [6 x i8] c"(...)\00" +@.str.5484 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.5485 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5486 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5487 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5488 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5489 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.5490 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5491 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5492 = private unnamed_addr constant [8 x i8] c"xor i1 \00" +@.str.5493 = private unnamed_addr constant [7 x i8] c", true\00" +@.str.5494 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5495 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5496 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.5497 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5498 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.5499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5500 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5501 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5502 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.5503 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5504 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5505 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5507 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5510 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.5511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5513 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5517 = private unnamed_addr constant [70 x i8] c"give either all fields by name (x: 1, y: 2) or none (1, 2), not a mix\00" +@.str.5518 = private unnamed_addr constant [6 x i8] c" has \00" +@.str.5519 = private unnamed_addr constant [18 x i8] c" fields, but got \00" +@.str.5520 = private unnamed_addr constant [24 x i8] c" values (or name them: \00" +@.str.5521 = private unnamed_addr constant [16 x i8] c"(field: value))\00" +@.str.5522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5525 = private unnamed_addr constant [16 x i8] c" has no field '\00" +@.str.5526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5527 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5530 = private unnamed_addr constant [12 x i8] c"the field '\00" +@.str.5531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5532 = private unnamed_addr constant [17 x i8] c"' is given twice\00" +@.str.5533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5534 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5535 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5536 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5543 = private unnamed_addr constant [12 x i8] c"the field '\00" +@.str.5544 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5545 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5546 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5547 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5548 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.5549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5550 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5552 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.5553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5554 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.5555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5556 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.5557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5558 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.5559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5560 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.5561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5562 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5566 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5567 = private unnamed_addr constant [17 x i8] c"the default of '\00" +@.str.5568 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5569 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5570 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5571 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5573 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.5574 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5575 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.5576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5577 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.5578 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.5579 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5580 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5581 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5582 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5585 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5586 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5589 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.5590 = private unnamed_addr constant [39 x i8] c"there is no variable or module named '\00" +@.str.5591 = private unnamed_addr constant [33 x i8] c"' (to use a module, add import \00" +@.str.5592 = private unnamed_addr constant [14 x i8] c" at the top)\00" +@.str.5593 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5594 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5595 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5596 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5597 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5599 = private unnamed_addr constant [13 x i8] c"the module '\00" +@.str.5600 = private unnamed_addr constant [36 x i8] c"' has no function or struct named '\00" +@.str.5601 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5602 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.5603 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.5604 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.5605 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.5606 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.5607 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.5608 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.5609 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.5610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5611 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5612 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5613 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5614 = private unnamed_addr constant [64 x i8] c"() would change a temporary array; store it in a variable first\00" +@.str.5615 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5616 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5617 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.5618 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5619 = private unnamed_addr constant [62 x i8] c"() would change a temporary map; store it in a variable first\00" +@.str.5620 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5621 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5623 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5624 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5625 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.5626 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.5627 = private unnamed_addr constant [9 x i8] c"called .\00" +@.str.5628 = private unnamed_addr constant [21 x i8] c"() on a null pointer\00" +@.str.5629 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5630 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5631 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5632 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5633 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5634 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5635 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5636 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5639 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5642 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5644 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5645 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.5646 = private unnamed_addr constant [5 x i8] c"the \00" +@.str.5647 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5648 = private unnamed_addr constant [35 x i8] c" has no methods; add one with fn \00" +@.str.5649 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5650 = private unnamed_addr constant [14 x i8] c"(...) { ... }\00" +@.str.5651 = private unnamed_addr constant [5 x i8] c"the \00" +@.str.5652 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5653 = private unnamed_addr constant [17 x i8] c" has no method '\00" +@.str.5654 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.5655 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5656 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5658 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.5659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5660 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5661 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5662 = private unnamed_addr constant [29 x i8] c"() would change a temporary \00" +@.str.5663 = private unnamed_addr constant [31 x i8] c"; store it in a variable first\00" +@.str.5664 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" +@.str.5665 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" +@.str.5666 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5667 = private unnamed_addr constant [16 x i8] c" has no methods\00" +@.str.5668 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5669 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" +@.str.5670 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.5671 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.5672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5674 = private unnamed_addr constant [12 x i8] c"the element\00" +@.str.5675 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5676 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5677 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5678 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_reserve(ptr \00" +@.str.5679 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5680 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5681 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5682 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5683 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5684 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5685 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5686 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5687 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5688 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.5689 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5690 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.5691 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5692 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.5693 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5694 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5695 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5696 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5697 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5698 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5699 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5700 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.5701 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.5702 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5703 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.5704 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5705 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5706 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.5707 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5709 = private unnamed_addr constant [22 x i8] c"the value to look for\00" +@.str.5710 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5711 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5712 = private unnamed_addr constant [3 x i8] c"-1\00" +@.str.5713 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5714 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5715 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5716 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5717 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.5718 = private unnamed_addr constant [10 x i8] c"find.cond\00" +@.str.5719 = private unnamed_addr constant [10 x i8] c"find.body\00" +@.str.5720 = private unnamed_addr constant [9 x i8] c"find.hit\00" +@.str.5721 = private unnamed_addr constant [10 x i8] c"find.next\00" +@.str.5722 = private unnamed_addr constant [9 x i8] c"find.end\00" +@.str.5723 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5724 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5725 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5726 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5727 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5728 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5729 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.5730 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5731 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5732 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5733 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5734 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5735 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5736 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5737 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" +@.str.5738 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5739 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5740 = private unnamed_addr constant [5 x i8] c"join\00" +@.str.5741 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5742 = private unnamed_addr constant [32 x i8] c"join() works on an array of str\00" +@.str.5743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5744 = private unnamed_addr constant [14 x i8] c"the separator\00" +@.str.5745 = private unnamed_addr constant [31 x i8] c"call void @finch_str_join(ptr \00" +@.str.5746 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5747 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5748 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5749 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5750 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5751 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.5752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5753 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5755 = private unnamed_addr constant [13 x i8] c"the position\00" +@.str.5756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5757 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5758 = private unnamed_addr constant [12 x i8] c"the element\00" +@.str.5759 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5760 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5761 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5762 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_insert_gap(ptr \00" +@.str.5763 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5764 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5765 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5766 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5767 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5768 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5769 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5770 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5771 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5772 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5773 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.5774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5775 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5777 = private unnamed_addr constant [13 x i8] c"the position\00" +@.str.5778 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5779 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5780 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5781 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5782 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5783 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_remove_gap(ptr \00" +@.str.5784 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5785 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5786 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5787 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.5788 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5789 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5790 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5791 = private unnamed_addr constant [15 x i8] c"the new length\00" +@.str.5792 = private unnamed_addr constant [33 x i8] c"call void @finch_arr_resize(ptr \00" +@.str.5793 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5794 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5795 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5796 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5797 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.5798 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5799 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5800 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" +@.str.5801 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.5802 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5803 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5804 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5806 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5807 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5808 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5809 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5810 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5811 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5812 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5813 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5814 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5815 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str.5816 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5817 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5819 = private unnamed_addr constant [10 x i8] c"the start\00" +@.str.5820 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5821 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5822 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5823 = private unnamed_addr constant [8 x i8] c"the end\00" +@.str.5824 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5825 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5826 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5827 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" +@.str.5828 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5829 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" +@.str.5830 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5831 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str.5832 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str.5833 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5834 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5835 = private unnamed_addr constant [34 x i8] c"slice(start, end) is out of range\00" +@.str.5836 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5837 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5838 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5839 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" +@.str.5840 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5841 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5842 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5843 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5844 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5845 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5846 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5847 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5848 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5849 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5850 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5851 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5852 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5853 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5854 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5855 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5856 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.5857 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5858 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5859 = private unnamed_addr constant [48 x i8] c"sort() works on arrays of numbers, chars or str\00" +@.str.5860 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5861 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5862 = private unnamed_addr constant [22 x i8] c"call void @qsort(ptr \00" +@.str.5863 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5864 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5865 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5866 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5867 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5868 = private unnamed_addr constant [25 x i8] c"an array has no method '\00" +@.str.5869 = private unnamed_addr constant [97 x i8] c"' (it has: push, pop, insert, remove, clear, resize, find, contains, join, slice, reverse, sort)\00" +@.str.5870 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5871 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5872 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" +@.str.5873 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.5874 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5875 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5876 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5877 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5878 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5879 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.5880 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5881 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.5882 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00" +@.str.5883 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5884 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5885 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5886 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5887 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5888 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5889 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5890 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5892 = private unnamed_addr constant [12 x i8] c"@finch.cmp.\00" +@.str.5893 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5894 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.5895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5896 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.5897 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5898 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5899 = private unnamed_addr constant [40 x i8] c"call i64 @finch_str_cmp(ptr %x, ptr %y)\00" +@.str.5900 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.5901 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5902 = private unnamed_addr constant [3 x i8] c"%x\00" +@.str.5903 = private unnamed_addr constant [3 x i8] c"%y\00" +@.str.5904 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5905 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5906 = private unnamed_addr constant [10 x i8] c"fcmp olt \00" +@.str.5907 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5908 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5909 = private unnamed_addr constant [10 x i8] c"fcmp ogt \00" +@.str.5910 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5911 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5912 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.5913 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.5914 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5915 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5916 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5917 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.5918 = private unnamed_addr constant [2 x i8] c">\00" +@.str.5919 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5920 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5921 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5922 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str.5923 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5924 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5925 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5926 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5927 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5928 = private unnamed_addr constant [9 x i8] c"ret i32 \00" +@.str.5929 = private unnamed_addr constant [21 x i8] c"define internal i32 \00" +@.str.5930 = private unnamed_addr constant [17 x i8] c"(ptr %x, ptr %y)\00" +@.str.5931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5932 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5934 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.5935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5936 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5938 = private unnamed_addr constant [10 x i8] c"the start\00" +@.str.5939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5940 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5941 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5942 = private unnamed_addr constant [8 x i8] c"the end\00" +@.str.5943 = private unnamed_addr constant [30 x i8] c"call void @finch_str_sub(ptr \00" +@.str.5944 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5945 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5946 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5947 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5948 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5949 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5950 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5951 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5952 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5953 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.5954 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str.5955 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.5956 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5957 = private unnamed_addr constant [21 x i8] c"the text to look for\00" +@.str.5958 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5959 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" +@.str.5960 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5961 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5962 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5963 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.5964 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" +@.str.5965 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5966 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5967 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" +@.str.5968 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5969 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5970 = private unnamed_addr constant [18 x i8] c"@finch_str_starts\00" +@.str.5971 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.5972 = private unnamed_addr constant [16 x i8] c"@finch_str_ends\00" +@.str.5973 = private unnamed_addr constant [10 x i8] c"call i32 \00" +@.str.5974 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.5975 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5976 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5977 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5978 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5979 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5980 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str.5981 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str.5982 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str.5983 = private unnamed_addr constant [22 x i8] c"call void @finch_str_\00" +@.str.5984 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.5985 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5986 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5987 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5988 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5989 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str.5990 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5991 = private unnamed_addr constant [20 x i8] c"the text to replace\00" +@.str.5992 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5993 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5995 = private unnamed_addr constant [13 x i8] c"the new text\00" +@.str.5996 = private unnamed_addr constant [34 x i8] c"call void @finch_str_replace(ptr \00" +@.str.5997 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5998 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5999 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6000 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6001 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6002 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6003 = private unnamed_addr constant [6 x i8] c"split\00" +@.str.6004 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6005 = private unnamed_addr constant [14 x i8] c"the separator\00" +@.str.6006 = private unnamed_addr constant [32 x i8] c"call void @finch_str_split(ptr \00" +@.str.6007 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6008 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6009 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6010 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6011 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6012 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str.6013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6014 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6015 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6016 = private unnamed_addr constant [10 x i8] c"the count\00" +@.str.6017 = private unnamed_addr constant [33 x i8] c"call void @finch_str_repeat(ptr \00" +@.str.6018 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6019 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.6020 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6021 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6022 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6023 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str.6024 = private unnamed_addr constant [37 x i8] c"call void @finch_bytes_from_str(ptr \00" +@.str.6025 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6026 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6027 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6028 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6029 = private unnamed_addr constant [22 x i8] c"a str has no method '\00" +@.str.6030 = private unnamed_addr constant [107 x i8] c"' (it has: sub, find, contains, starts_with, ends_with, split, trim, upper, lower, replace, repeat, bytes)\00" +@.str.6031 = private unnamed_addr constant [55 x i8] c"declare void @finch_panic(ptr, i64, ptr) noreturn cold\00" +@.str.6032 = private unnamed_addr constant [66 x i8] c"declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold\00" +@.str.6033 = private unnamed_addr constant [30 x i8] c"declare ptr @finch_alloc(i64)\00" +@.str.6034 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_copy(ptr, ptr)\00" +@.str.6035 = private unnamed_addr constant [34 x i8] c"declare void @finch_str_drop(ptr)\00" +@.str.6036 = private unnamed_addr constant [34 x i8] c"declare void @finch_arr_free(ptr)\00" +@.str.6037 = private unnamed_addr constant [34 x i8] c"declare void @finch_map_free(ptr)\00" +@.str.6038 = private unnamed_addr constant [33 x i8] c"declare void @finch_str_own(ptr)\00" +@.str.6039 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_concat(ptr, ptr, ptr)\00" +@.str.6040 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_str_eq(ptr, ptr)\00" +@.str.6041 = private unnamed_addr constant [37 x i8] c"declare i64 @finch_str_cmp(ptr, ptr)\00" +@.str.6042 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_add(ptr, ptr, i64)\00" +@.str.6043 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_int(ptr, i64)\00" +@.str.6044 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_uint(ptr, i64)\00" +@.str.6045 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_float(ptr, double)\00" +@.str.6046 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_bool(ptr, i32)\00" +@.str.6047 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_ptr(ptr, ptr)\00" +@.str.6048 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_char(ptr, i8, i32)\00" +@.str.6049 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_str(ptr, ptr, i32)\00" +@.str.6050 = private unnamed_addr constant [35 x i8] c"declare void @finch_buf_print(ptr)\00" +@.str.6051 = private unnamed_addr constant [43 x i8] c"declare void @finch_str_from_int(ptr, i64)\00" +@.str.6052 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_uint(ptr, i64)\00" +@.str.6053 = private unnamed_addr constant [48 x i8] c"declare void @finch_str_from_float(ptr, double)\00" +@.str.6054 = private unnamed_addr constant [51 x i8] c"declare void @finch_str_from_char(ptr, i8 signext)\00" +@.str.6055 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_bool(ptr, i32)\00" +@.str.6056 = private unnamed_addr constant [45 x i8] c"declare i64 @finch_str_to_int(ptr, ptr, i64)\00" +@.str.6057 = private unnamed_addr constant [50 x i8] c"declare double @finch_str_to_float(ptr, ptr, i64)\00" +@.str.6058 = private unnamed_addr constant [58 x i8] c"declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64)\00" +@.str.6059 = private unnamed_addr constant [38 x i8] c"declare i64 @finch_str_find(ptr, ptr)\00" +@.str.6060 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_str_starts(ptr, ptr)\00" +@.str.6061 = private unnamed_addr constant [38 x i8] c"declare i32 @finch_str_ends(ptr, ptr)\00" +@.str.6062 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_trim(ptr, ptr)\00" +@.str.6063 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_upper(ptr, ptr)\00" +@.str.6064 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_lower(ptr, ptr)\00" +@.str.6065 = private unnamed_addr constant [52 x i8] c"declare void @finch_str_replace(ptr, ptr, ptr, ptr)\00" +@.str.6066 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_split(ptr, ptr, ptr)\00" +@.str.6067 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_join(ptr, ptr, ptr)\00" +@.str.6068 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_repeat(ptr, ptr, i64)\00" +@.str.6069 = private unnamed_addr constant [45 x i8] c"declare void @finch_bytes_from_str(ptr, ptr)\00" +@.str.6070 = private unnamed_addr constant [53 x i8] c"declare i64 @finch_map_find(ptr, ptr, i64, i64, i32)\00" +@.str.6071 = private unnamed_addr constant [58 x i8] c"declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr)\00" +@.str.6072 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_remove_at(ptr, i64, i64)\00" +@.str.6073 = private unnamed_addr constant [35 x i8] c"declare void @finch_map_clear(ptr)\00" +@.str.6074 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_clone_raw(ptr, ptr, i64)\00" +@.str.6075 = private unnamed_addr constant [61 x i8] c"declare void @finch_map_missing(ptr, i64, ptr) noreturn cold\00" +@.str.6076 = private unnamed_addr constant [56 x i8] c"declare void @finch_map_changed(ptr, i64) noreturn cold\00" +@.str.6077 = private unnamed_addr constant [47 x i8] c"declare void @finch_arr_reserve(ptr, i64, i64)\00" +@.str.6078 = private unnamed_addr constant [49 x i8] c"declare void @finch_arr_clone_raw(ptr, ptr, i64)\00" +@.str.6079 = private unnamed_addr constant [44 x i8] c"declare void @finch_arr_make(ptr, i64, i64)\00" +@.str.6080 = private unnamed_addr constant [46 x i8] c"declare void @finch_arr_resize(ptr, i64, i64)\00" +@.str.6081 = private unnamed_addr constant [60 x i8] c"declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64)\00" +@.str.6082 = private unnamed_addr constant [50 x i8] c"declare void @finch_arr_remove_gap(ptr, i64, i64)\00" +@.str.6083 = private unnamed_addr constant [40 x i8] c"declare void @qsort(ptr, i64, i64, ptr)\00" +@.str.6084 = private unnamed_addr constant [40 x i8] c"declare void @finch_args(ptr, i32, ptr)\00" +@.str.6085 = private unnamed_addr constant [36 x i8] c"declare void @finch_input(ptr, ptr)\00" +@.str.6086 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_file_exists(ptr)\00" +@.str.6087 = private unnamed_addr constant [46 x i8] c"declare i32 @finch_str_try_int(ptr, ptr, ptr)\00" +@.str.6088 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_str_try_float(ptr, ptr, ptr)\00" +@.str.6089 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_try_read_file(ptr, ptr, ptr)\00" +@.str.6090 = private unnamed_addr constant [49 x i8] c"declare i32 @finch_try_write_file(ptr, ptr, ptr)\00" +@.str.6091 = private unnamed_addr constant [45 x i8] c"declare i32 @finch_try_delete_file(ptr, ptr)\00" +@.str.6092 = private unnamed_addr constant [38 x i8] c"declare void @finch_report_error(ptr)\00" +@.str.6093 = private unnamed_addr constant [50 x i8] c"declare void @finch_read_file(ptr, ptr, ptr, i64)\00" +@.str.6094 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_write_file(ptr, ptr)\00" +@.str.6095 = private unnamed_addr constant [30 x i8] c"declare i64 @finch_shell(ptr)\00" +@.str.6096 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_delete_file(ptr)\00" +@.str.6097 = private unnamed_addr constant [30 x i8] c"declare i32 @printf(ptr, ...)\00" +@.str.6098 = private unnamed_addr constant [25 x i8] c"declare i32 @fflush(ptr)\00" +@.str.6099 = private unnamed_addr constant [41 x i8] c"declare void @finch_str_from_c(ptr, ptr)\00" +@.str.6100 = private unnamed_addr constant [34 x i8] c"declare void @finch_on_fatal(ptr)\00" +@.str.6101 = private unnamed_addr constant [35 x i8] c"declare ptr @finch_std_stream(i32)\00" +@.str.6102 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_from_bytes(ptr, ptr)\00" +@.str.6103 = private unnamed_addr constant [33 x i8] c"declare void @exit(i32) noreturn\00" +@.str.6104 = private unnamed_addr constant [24 x i8] c"declare void @free(ptr)\00" +@.str.6105 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6106 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6107 = private unnamed_addr constant [53 x i8] c"; generated by the Finch compiler written in Finch\0A\0A\00" +@.str.6108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6109 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6111 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6112 = private unnamed_addr constant [18 x i8] c"target triple = \22\00" +@.str.6113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6114 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6115 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00" +@.str.6116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6117 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.6118 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6119 = private unnamed_addr constant [3 x i8] c"\0A\0A\00" +@.str.6120 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6122 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6123 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00" +@.str.6124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6126 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6128 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6129 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6131 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6133 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6136 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6137 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00" +@.str.6138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6139 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6140 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00" +@.str.6141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6142 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6143 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00" +@.str.6144 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00" +@.str.6145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6146 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00" +@.str.6147 = private unnamed_addr constant [3 x i8] c"\22)\00" +@.str.6148 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00" +@.str.6149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6150 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6152 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00" +@.str.6153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6154 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6156 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6157 = private unnamed_addr constant [5 x i8] c"main\00" +@.str.6158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6159 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6161 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6165 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6168 = private unnamed_addr constant [83 x i8] c"a library (--shared) has no main: the program that loads it calls its 'export fn's\00" +@.str.6169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6170 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00" +@.str.6171 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6172 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6173 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6175 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6177 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.6178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6179 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6182 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.6183 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6185 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6186 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6188 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6189 = private unnamed_addr constant [11 x i8] c" dllexport\00" +@.str.6190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6191 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6192 = private unnamed_addr constant [7 x i8] c"define\00" +@.str.6193 = private unnamed_addr constant [108 x i8] c" void @finch_module_on_fatal(ptr %handler) {\0Aentry:\0A call void @finch_on_fatal(ptr %handler)\0A ret void\0A}\0A\00" +@.str.6194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6195 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6197 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.6198 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6199 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6200 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6201 = private unnamed_addr constant [134 x i8] c" %args = alloca { ptr, i64, i64 }\0A call void @finch_args(ptr %args, i32 %argc, ptr %argv)\0A %a = load { ptr, i64, i64 }, ptr %args\0A\00" +@.str.6202 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00" +@.str.6203 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6204 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" +@.str.6205 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6206 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6207 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6208 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6209 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00" +@.str.6210 = private unnamed_addr constant [63 x i8] c" %r, 0\0A br i1 %ok, label %main.ok, label %main.bad\0Amain.bad:\0A\00" +@.str.6211 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00" +@.str.6212 = private unnamed_addr constant [79 x i8] c" %r, 2\0A %mp = alloca { ptr, i64, i64 }\0A store { ptr, i64, i64 } %m, ptr %mp\0A\00" +@.str.6213 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00" +@.str.6214 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6215 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00" +@.str.6216 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00" +@.str.6217 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6218 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6219 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00" +@.str.6220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6221 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6222 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str.6223 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6224 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6225 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str.6226 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.6227 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00" +@.str.6228 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00" +@.str.6229 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.6230 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00" +@.str.6231 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00" +@.str.6232 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.6233 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00" +@.str.6234 = private unnamed_addr constant [122 x i8] c"The whole file as text. Stops the program if it can't be read, unless handled: read_file(p) or { ... }, try read_file(p).\00" +@.str.6235 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.6236 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00" +@.str.6237 = private unnamed_addr constant [84 x i8] c"Writes (replaces) the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6238 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.6239 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00" +@.str.6240 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00" +@.str.6241 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.6242 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00" +@.str.6243 = private unnamed_addr constant [74 x i8] c"Deletes the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6244 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.6245 = private unnamed_addr constant [19 x i8] c"error(str message)\00" +@.str.6246 = private unnamed_addr constant [99 x i8] c"The failure a fallible function returns: return error(\22...\22). The caller handles it with or / try.\00" +@.str.6247 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.6248 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00" +@.str.6249 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00" +@.str.6250 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.6251 = private unnamed_addr constant [15 x i8] c"exit(int code)\00" +@.str.6252 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00" +@.str.6253 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.6254 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00" +@.str.6255 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00" +@.str.6256 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.6257 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00" +@.str.6258 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00" +@.str.6259 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.6260 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00" +@.str.6261 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00" +@.str.6262 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6263 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00" +@.str.6264 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00" +@.str.6265 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6266 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00" +@.str.6267 = private unnamed_addr constant [131 x i8] c"Converts to a whole number: cuts off fractions, parses text (stops the program if it isn't a number, unless handled: int(s) or 0).\00" +@.str.6268 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6269 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00" +@.str.6270 = private unnamed_addr constant [76 x i8] c"Converts to a decimal number; parses text (int(s) or 0.0 handles bad text).\00" +@.str.6271 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6272 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00" +@.str.6273 = private unnamed_addr constant [30 x i8] c"The character with this code.\00" +@.str.6274 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6275 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00" +@.str.6276 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00" +@.str.6277 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6278 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00" +@.str.6279 = private unnamed_addr constant [89 x i8] c"An untyped pointer: from a typed pointer, or from a number (an address or offset for C).\00" +@.str.6280 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6281 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6282 = private unnamed_addr constant [24 x i8] c"The number of elements.\00" +@.str.6283 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6284 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00" +@.str.6285 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00" +@.str.6286 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.6287 = private unnamed_addr constant [10 x i8] c"push(T x)\00" +@.str.6288 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00" +@.str.6289 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.6290 = private unnamed_addr constant [11 x i8] c"pop() -> T\00" +@.str.6291 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00" +@.str.6292 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.6293 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00" +@.str.6294 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00" +@.str.6295 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6296 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00" +@.str.6297 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00" +@.str.6298 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6299 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6300 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6301 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.6302 = private unnamed_addr constant [14 x i8] c"resize(int n)\00" +@.str.6303 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00" +@.str.6304 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6305 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00" +@.str.6306 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00" +@.str.6307 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6308 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00" +@.str.6309 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00" +@.str.6310 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.6311 = private unnamed_addr constant [7 x i8] c"sort()\00" +@.str.6312 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00" +@.str.6313 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.6314 = private unnamed_addr constant [10 x i8] c"reverse()\00" +@.str.6315 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00" +@.str.6316 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str.6317 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00" +@.str.6318 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00" +@.str.6319 = private unnamed_addr constant [5 x i8] c"join\00" +@.str.6320 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00" +@.str.6321 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00" +@.str.6322 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6323 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6324 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00" +@.str.6325 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6326 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00" +@.str.6327 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00" +@.str.6328 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.6329 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00" +@.str.6330 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00" +@.str.6331 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6332 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00" +@.str.6333 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00" +@.str.6334 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6335 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00" +@.str.6336 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00" +@.str.6337 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str.6338 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00" +@.str.6339 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00" +@.str.6340 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.6341 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00" +@.str.6342 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00" +@.str.6343 = private unnamed_addr constant [6 x i8] c"split\00" +@.str.6344 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00" +@.str.6345 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00" +@.str.6346 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str.6347 = private unnamed_addr constant [14 x i8] c"trim() -> str\00" +@.str.6348 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00" +@.str.6349 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str.6350 = private unnamed_addr constant [15 x i8] c"upper() -> str\00" +@.str.6351 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00" +@.str.6352 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str.6353 = private unnamed_addr constant [15 x i8] c"lower() -> str\00" +@.str.6354 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00" +@.str.6355 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str.6356 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00" +@.str.6357 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00" +@.str.6358 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str.6359 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00" +@.str.6360 = private unnamed_addr constant [18 x i8] c"The text n times.\00" +@.str.6361 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str.6362 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00" +@.str.6363 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00" +@.str.6364 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6365 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6366 = private unnamed_addr constant [20 x i8] c"The number of keys.\00" +@.str.6367 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.6368 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00" +@.str.6369 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00" +@.str.6370 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.6371 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00" +@.str.6372 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00" +@.str.6373 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6374 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00" +@.str.6375 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00" +@.str.6376 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6377 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6378 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6379 = private unnamed_addr constant [5 x i8] c"keys\00" +@.str.6380 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00" +@.str.6381 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00" +@.str.6382 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.6383 = private unnamed_addr constant [16 x i8] c"values() -> []V\00" +@.str.6384 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00" +@.str.6385 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.6386 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.6387 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.6388 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.6389 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.6390 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.6391 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.6392 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.6393 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.6394 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.6395 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.6396 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.6397 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.6398 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.6399 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.6400 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.6401 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.6402 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.6403 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.6404 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.6405 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.6406 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.6407 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6408 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6409 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6410 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6411 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6412 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6413 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.6414 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6415 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6416 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6417 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.6418 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6419 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6420 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6421 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6422 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6423 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.6424 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.6425 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00" +declare ptr @clang_getCString([2 x i64]) +declare void @clang_disposeString([2 x i64]) +@.str.6426 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6427 = private unnamed_addr constant [16 x i8] c"/finch_cc_dirs_\00" +@.str.6428 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6429 = private unnamed_addr constant [14 x i8] c"/finch_empty_\00" +@.str.6430 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6431 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6432 = private unnamed_addr constant [13 x i8] c" -E -v -x c \00" +@.str.6433 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6434 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6435 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6436 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6437 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6438 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6439 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6440 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00" +@.str.6441 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6442 = private unnamed_addr constant [20 x i8] c"End of search list.\00" +@.str.6443 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6444 = private unnamed_addr constant [23 x i8] c" (framework directory)\00" +@.str.6445 = private unnamed_addr constant [12 x i8] c"-iframework\00" +@.str.6446 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6447 = private unnamed_addr constant [9 x i8] c"-isystem\00" +declare void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16, ptr) +declare [2 x i64] @clang_getCursorUSR(ptr) +@.str.6448 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6449 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6450 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6451 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6452 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +declare [2 x i64] @clang_getCursorSpelling(ptr) +@.str.6453 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6454 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6455 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6456 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6457 = private unnamed_addr constant [13 x i8] c"anon_struct_\00" +@.str.6458 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6459 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6460 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6461 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16, ptr) +@.str.6462 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6463 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6464 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6465 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +declare i64 @clang_Type_getSizeOf(ptr) +@.str.6466 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6467 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6468 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +declare i64 @clang_Type_getAlignOf(ptr) +declare i32 @clang_getCursorKind(ptr) +@.str.6469 = private unnamed_addr constant [13 x i8] c"is a C union\00" +declare i32 @clang_Type_visitFields(ptr, ptr, ptr) +@.str.6470 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6471 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +@.str.6472 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6473 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6474 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6475 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare void @clang_getCursorType(ptr sret(%S.C.CXType) align 16, ptr) +declare i64 @clang_Cursor_getOffsetOfField(ptr) +declare i32 @clang_Cursor_isBitField(ptr) +@.str.6476 = private unnamed_addr constant [15 x i8] c"has bit fields\00" +@.str.6477 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6478 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6479 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6480 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00" +@.str.6481 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6482 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00" +@.str.6483 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6484 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6485 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6486 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00" +@.str.6487 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6488 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6489 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6490 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00" +@.str.6491 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6492 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6493 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6494 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6495 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6496 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6497 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6498 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6499 = private unnamed_addr constant [8 x i8] c"uses a \00" +@.str.6500 = private unnamed_addr constant [12 x i8] c"-bit number\00" +@.str.6501 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6502 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6503 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6504 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6505 = private unnamed_addr constant [6 x i8] c"float\00" +declare void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16, ptr) +declare i32 @clang_isConstQualifiedType(ptr) +@.str.6506 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6507 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6508 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6509 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6510 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6511 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00" +@.str.6512 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00" +@.str.6513 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.6514 = private unnamed_addr constant [2 x i8] c"C\00" +declare void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16, ptr) +declare i64 @clang_getArraySize(ptr) +@.str.6515 = private unnamed_addr constant [17 x i8] c"uses long double\00" +@.str.6516 = private unnamed_addr constant [18 x i8] c"uses the C type '\00" +declare [2 x i64] @clang_getTypeSpelling(ptr) +@.str.6517 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6518 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6519 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6520 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6521 = private unnamed_addr constant [3 x i8] c"0X\00" +@.str.6522 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6523 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6524 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6525 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6526 = private unnamed_addr constant [5 x i8] c"uUlL\00" +@.str.6527 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6528 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6529 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6530 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16, ptr) +declare void @clang_tokenize(ptr, ptr, ptr, ptr) +declare i32 @clang_getTokenKind(ptr) +@.str.6531 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6532 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare [2 x i64] @clang_getTokenSpelling(ptr, ptr) +@.str.6533 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6534 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare void @clang_disposeTokens(ptr, ptr, i32) +@.str.6535 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6536 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6537 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6538 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6539 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6540 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6541 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.6542 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6543 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.6544 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6545 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6546 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6547 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6548 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6549 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6550 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6551 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6552 = private unnamed_addr constant [2 x i8] c"e\00" +@.str.6553 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6554 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.6555 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6556 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6557 = private unnamed_addr constant [5 x i8] c"fFlL\00" +@.str.6558 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6559 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6560 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +declare void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16, ptr) +@.str.6561 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6562 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6563 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6564 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6565 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6566 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6567 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6568 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6569 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6570 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6571 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6572 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6573 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6574 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6575 = private unnamed_addr constant [31 x i8] c"used .header on a null pointer\00" +declare i32 @clang_Cursor_getStorageClass(ptr) +@.str.6576 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00" +@.str.6577 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6578 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6579 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00" +@.str.6580 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6581 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare void @clang_getResultType(ptr sret(%S.C.CXType) align 16, ptr) +declare i32 @clang_getNumArgTypes(ptr) +declare void @clang_getArgType(ptr sret(%S.C.CXType) align 16, ptr, i32) +declare i32 @clang_isFunctionTypeVariadic(ptr) +@.str.6582 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6583 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6584 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6585 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6586 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6587 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_isCursorDefinition(ptr) +@.str.6588 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6589 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6590 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6591 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6592 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6593 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare i32 @clang_visitChildren(ptr, ptr, ptr) +@.str.6594 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6595 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i64 @clang_getEnumConstantDeclValue(ptr) +@.str.6596 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6597 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_Cursor_isMacroBuiltin(ptr) +declare i32 @clang_Cursor_isMacroFunctionLike(ptr) +@.str.6598 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6599 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6600 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6601 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6602 = private unnamed_addr constant [3 x i8] c"-x\00" +@.str.6603 = private unnamed_addr constant [2 x i8] c"c\00" +@.str.6604 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00" +@.str.6605 = private unnamed_addr constant [10 x i8] c"--target=\00" +@.str.6606 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00" +@.str.6607 = private unnamed_addr constant [3 x i8] c"-I\00" +@.str.6608 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6609 = private unnamed_addr constant [1 x i8] c"\00" +declare ptr @clang_createIndex(i32, i32) +@.str.6610 = private unnamed_addr constant [11 x i8] c"#include \22\00" +@.str.6611 = private unnamed_addr constant [3 x i8] c"\22\0A\00" +@.str.6612 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" +@.str.6613 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" +@.str.6614 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @clang_parseTranslationUnit2(ptr, ptr, ptr, i32, ptr, i32, i32, ptr) +@.str.6615 = private unnamed_addr constant [34 x i8] c": error: couldn't read C header '\00" +@.str.6616 = private unnamed_addr constant [2 x i8] c"'\00" +declare i32 @clang_getNumDiagnostics(ptr) +declare ptr @clang_getDiagnostic(ptr, i32) +declare i32 @clang_getDiagnosticSeverity(ptr) +declare [2 x i64] @clang_getDiagnosticSpelling(ptr) +declare void @clang_disposeDiagnostic(ptr) +@.str.6617 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6618 = private unnamed_addr constant [15 x i8] c"file not found\00" +@.str.6619 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6620 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6621 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6622 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6623 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" +@.str.6624 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6625 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" +@.str.6626 = private unnamed_addr constant [11 x i8] c"', which '\00" +@.str.6627 = private unnamed_addr constant [61 x i8] c"' includes (is its library's development package installed?)\00" +@.str.6628 = private unnamed_addr constant [20 x i8] c": error: C header '\00" +@.str.6629 = private unnamed_addr constant [17 x i8] c"' has an error: \00" +declare void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16, ptr) +declare void @clang_disposeTranslationUnit(ptr) +declare void @clang_disposeIndex(ptr) +@.str.6630 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6631 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6632 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6633 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6634 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6635 = private unnamed_addr constant [5 x i8] c"'\5C''\00" +@.str.6636 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6637 = private unnamed_addr constant [10 x i8] c"/dev/null\00" +@.str.6638 = private unnamed_addr constant [7 x i8] c"TMPDIR\00" +@.str.6639 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6640 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6641 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6642 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6643 = private unnamed_addr constant [5 x i8] c"/tmp\00" +@.str.6644 = private unnamed_addr constant [2 x i8] c":\00" +declare i32 @getpid() +@.str.6645 = private unnamed_addr constant [4 x i8] c"PWD\00" +@.str.6646 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6647 = private unnamed_addr constant [15 x i8] c"XDG_CACHE_HOME\00" +@.str.6648 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6649 = private unnamed_addr constant [7 x i8] c"/finch\00" +@.str.6650 = private unnamed_addr constant [5 x i8] c"HOME\00" +@.str.6651 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6652 = private unnamed_addr constant [14 x i8] c"/.cache/finch\00" +@.str.6653 = private unnamed_addr constant [13 x i8] c"/finch-cache\00" +@.str.6654 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" +@.str.6655 = private unnamed_addr constant [8 x i8] c"rm -rf \00" +@.str.6656 = private unnamed_addr constant [4 x i8] c"mv \00" +@.str.6657 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6658 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6659 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6660 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6661 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6662 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6663 = private unnamed_addr constant [15 x i8] c"/finch_triple_\00" +@.str.6664 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6665 = private unnamed_addr constant [22 x i8] c"clang -dumpmachine > \00" +@.str.6666 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6667 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6668 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6669 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6670 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6671 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" +@.str.6672 = private unnamed_addr constant [6 x i8] c"linux\00" +@.str.6673 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6674 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6675 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6676 = private unnamed_addr constant [12 x i8] c"linux-arm64\00" +@.str.6677 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00" +@.str.6678 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.6679 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6680 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6681 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6682 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6683 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00" +@.str.6684 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00" +@.str.6685 = private unnamed_addr constant [23 x i8] c"x86_64-w64-windows-gnu\00" +@.str.6686 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" +@.str.6687 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6688 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6689 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6690 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6691 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6692 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6693 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6694 = private unnamed_addr constant [6 x i8] c"win32\00" +@.str.6695 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6696 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6697 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6698 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6699 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6700 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6701 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6702 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.6703 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6704 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6705 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6706 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6707 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6708 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6709 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6710 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6711 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6712 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6713 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6714 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6715 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6716 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6717 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6718 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6719 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6720 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6721 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6722 = private unnamed_addr constant [5 x i8] c".exe\00" +@.str.6723 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6724 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6725 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00" +@.str.6726 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00" +@.str.6727 = private unnamed_addr constant [16 x i8] c"clang --target=\00" +@.str.6728 = private unnamed_addr constant [2 x i8] c";\00" +@.str.6729 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6730 = private unnamed_addr constant [3 x i8] c"cc\00" +@.str.6731 = private unnamed_addr constant [6 x i8] c"wine \00" +@.str.6732 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00" +@.str.6733 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.6734 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6735 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6736 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6737 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6738 = private unnamed_addr constant [12 x i8] c"-framework \00" +@.str.6739 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6740 = private unnamed_addr constant [18 x i8] c"/finch_pkg_flags_\00" +@.str.6741 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6742 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00" +@.str.6743 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6744 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6745 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6746 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6747 = private unnamed_addr constant [3 x i8] c"-l\00" +@.str.6748 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6749 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6750 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6751 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6752 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6753 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6754 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6755 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6756 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6757 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6758 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6759 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6760 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6761 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6762 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6763 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6764 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6765 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6766 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6767 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6768 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6769 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6770 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6771 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6772 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6773 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6774 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6775 = private unnamed_addr constant [3 x i8] c" \0A\00" +@.str.6776 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6777 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6778 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6779 = private unnamed_addr constant [4 x i8] c" \0A\0D\00" +@.str.6780 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6781 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6782 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6783 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" +@.str.6784 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6785 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6786 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6787 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" +@.str.6788 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6789 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6790 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6791 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6792 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6793 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6794 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6795 = private unnamed_addr constant [10 x i8] c"not found\00" +@.str.6796 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6797 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6798 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6799 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6800 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6801 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6802 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6803 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6804 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6805 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6806 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6807 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.6808 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6809 = private unnamed_addr constant [22 x i8] c"error: linking failed\00" +@.str.6810 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6811 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6812 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6813 = private unnamed_addr constant [21 x i8] c"error: the library '\00" +@.str.6814 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00" +@.str.6815 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6816 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6817 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6818 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6819 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6820 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6821 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6822 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6823 = private unnamed_addr constant [3 x i8] c", \00" +@.str.6824 = private unnamed_addr constant [6 x i8] c" and \00" +@.str.6825 = private unnamed_addr constant [6 x i8] c" more\00" +@.str.6826 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6827 = private unnamed_addr constant [26 x i8] c"error: no code found for \00" +@.str.6828 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6829 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6830 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6831 = private unnamed_addr constant [5 x i8] c"come\00" +@.str.6832 = private unnamed_addr constant [6 x i8] c"comes\00" +@.str.6833 = private unnamed_addr constant [8 x i8] c"error: \00" +@.str.6834 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6835 = private unnamed_addr constant [8 x i8] c" from \22\00" +@.str.6836 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6837 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00" +@.str.6838 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6839 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6840 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6841 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00" +@.str.6842 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6843 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6844 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6845 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00" +@.str.6846 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6847 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6848 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6849 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6850 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6851 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6852 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6853 = private unnamed_addr constant [13 x i8] c" link \22\00" +@.str.6854 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6855 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6856 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6857 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6858 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6859 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6860 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6861 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6862 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6863 = private unnamed_addr constant [5 x i8] c"/rt-\00" +@.str.6864 = private unnamed_addr constant [4 x i8] c"2.5\00" +@.str.6865 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6866 = private unnamed_addr constant [6 x i8] c".part\00" +@.str.6867 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6868 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6869 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6870 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6871 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6872 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6873 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6874 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6875 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6876 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00" +@.str.6877 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00" +@.str.6878 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00" +@.str.6879 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6880 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6881 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6882 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6883 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6884 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6885 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6886 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6887 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6888 = private unnamed_addr constant [4 x i8] c".ll\00" +@.str.6889 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6890 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6891 = private unnamed_addr constant [11 x i8] c" --target=\00" +@.str.6892 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6893 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6894 = private unnamed_addr constant [8 x i8] c" -w -c \00" +@.str.6895 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6896 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6897 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6898 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6899 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6900 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6901 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6902 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00" +@.str.6903 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6904 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6905 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6906 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6907 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6908 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6909 = private unnamed_addr constant [5 x i8] c" -lm\00" +@.str.6910 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6911 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6912 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6913 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6914 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6915 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00" +@.str.6916 = private unnamed_addr constant [9 x i8] c" -shared\00" +@.str.6917 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6918 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6919 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6920 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6921 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6922 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6923 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6924 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6925 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6926 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6927 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6928 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6929 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00" +@.str.6930 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6931 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6932 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6933 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6934 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6935 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6936 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6937 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.6938 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6939 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6940 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6941 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6942 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6943 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00" +@.str.6944 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00" +@.str.6945 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6946 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6947 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6948 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6949 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6950 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6951 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6952 = private unnamed_addr constant [8 x i8] c"file://\00" +@.str.6953 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6954 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6955 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6956 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6957 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6958 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6959 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6960 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" +@.str.6961 = private unnamed_addr constant [8 x i8] c"file://\00" +@.str.6962 = private unnamed_addr constant [6 x i8] c"/-_.~\00" +@.str.6963 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6964 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.6965 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6966 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6967 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6968 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6969 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6970 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6971 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6972 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6973 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6974 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6975 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6976 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6977 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @getchar() +@.str.6978 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6979 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6980 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.6981 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +declare i32 @feof(ptr) +@.str.6982 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00" +@.str.6983 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6984 = private unnamed_addr constant [16 x i8] c"Content-Length:\00" +@.str.6985 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6986 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6987 = private unnamed_addr constant [26 x i8] c"the message was cut short\00" +@.str.6988 = private unnamed_addr constant [17 x i8] c"Content-Length: \00" +@.str.6989 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00" +@.str.6990 = private unnamed_addr constant [1 x i8] c"\00" +declare i64 @fwrite(ptr, i64, i64, ptr) +@.str.6991 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.6992 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.6993 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.6994 = private unnamed_addr constant [7 x i8] c"result\00" +@.str.6995 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.6996 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.6997 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.6998 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.6999 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7000 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7001 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7002 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7003 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7004 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7005 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7006 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.7007 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7008 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7009 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7010 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7011 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7012 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7013 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7014 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7015 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7016 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7017 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7018 = private unnamed_addr constant [2 x i8] c"@\00" +@.str.7019 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7020 = private unnamed_addr constant [3 x i8] c"@R\00" +@.str.7021 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7022 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7023 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7024 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7025 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7026 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7027 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7028 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7029 = private unnamed_addr constant [3 x i8] c"@V\00" +@.str.7030 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7031 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7032 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7033 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7034 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7035 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7036 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7037 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7038 = private unnamed_addr constant [3 x i8] c"@F\00" +@.str.7039 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7040 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7041 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7042 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7043 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7044 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7045 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7046 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7047 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7048 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7049 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.7050 = private unnamed_addr constant [3 x i8] c"@S\00" +@.str.7051 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7052 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7053 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7054 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7055 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7056 = private unnamed_addr constant [4 x i8] c"@SF\00" +@.str.7057 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7058 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7059 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7060 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7061 = private unnamed_addr constant [3 x i8] c"@E\00" +@.str.7062 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7063 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7064 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7065 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7066 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7067 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7068 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7069 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7070 = private unnamed_addr constant [3 x i8] c"@I\00" +@.str.7071 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7072 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7073 = private unnamed_addr constant [5 x i8] c"/doc\00" +@.str.7074 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.7075 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7076 = private unnamed_addr constant [12 x i8] c" --overlay \00" +@.str.7077 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.7078 = private unnamed_addr constant [9 x i8] c"/out.txt\00" +@.str.7079 = private unnamed_addr constant [8 x i8] c" index \00" +@.str.7080 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.7081 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.7082 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7083 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7084 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7085 = private unnamed_addr constant [9 x i8] c"severity\00" +@.str.7086 = private unnamed_addr constant [7 x i8] c"source\00" +@.str.7087 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7088 = private unnamed_addr constant [8 x i8] c"message\00" +@.str.7089 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7090 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7091 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7092 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7093 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7094 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7095 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7096 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7097 = private unnamed_addr constant [9 x i8] c"contents\00" +@.str.7098 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7099 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7100 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7101 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7102 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7103 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7104 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7105 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7106 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7107 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7108 = private unnamed_addr constant [15 x i8] c"selectionRange\00" +@.str.7109 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7110 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7111 = private unnamed_addr constant [7 x i8] c"detail\00" +@.str.7112 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7113 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7114 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7115 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7116 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7117 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7118 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7119 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00" +@.str.7120 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7121 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7122 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7123 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7124 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7125 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7126 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7127 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7128 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.7129 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7130 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7131 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7132 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7133 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7135 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7136 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7137 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7138 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7139 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7140 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7141 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.7142 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7143 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7144 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7145 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7146 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7147 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7148 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7149 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7150 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7151 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.7152 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7153 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7154 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7155 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7156 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7157 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7158 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7159 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7160 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7161 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7162 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7163 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7164 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7165 = private unnamed_addr constant [7 x i8] c"module\00" +@.str.7166 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7167 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7168 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7169 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7170 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7171 = private unnamed_addr constant [13 x i8] c"isIncomplete\00" +@.str.7172 = private unnamed_addr constant [6 x i8] c"items\00" +@.str.7173 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7174 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7175 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7176 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7177 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7178 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7179 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7180 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7181 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7182 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7183 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7184 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7185 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7186 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7187 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7188 = private unnamed_addr constant [11 x i8] c"parameters\00" +@.str.7189 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7190 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7191 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7192 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7193 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7194 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7195 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7196 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7197 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7198 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7199 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7200 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7201 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7202 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7203 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.7204 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7205 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.7206 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.7207 = private unnamed_addr constant [11 x i8] c"initialize\00" +@.str.7208 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00" +@.str.7209 = private unnamed_addr constant [14 x i8] c"hoverProvider\00" +@.str.7210 = private unnamed_addr constant [19 x i8] c"definitionProvider\00" +@.str.7211 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00" +@.str.7212 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7213 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7214 = private unnamed_addr constant [19 x i8] c"completionProvider\00" +@.str.7215 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.7216 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7217 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7218 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00" +@.str.7219 = private unnamed_addr constant [13 x i8] c"capabilities\00" +@.str.7220 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7221 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7222 = private unnamed_addr constant [11 x i8] c"serverInfo\00" +@.str.7223 = private unnamed_addr constant [9 x i8] c"shutdown\00" +@.str.7224 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.7225 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00" +@.str.7226 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00" +@.str.7227 = private unnamed_addr constant [15 x i8] c"contentChanges\00" +@.str.7228 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7229 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7230 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00" +@.str.7231 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00" +@.str.7232 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7233 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7234 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7235 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7236 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7237 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7238 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7239 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00" +@.str.7240 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7241 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7242 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7243 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7244 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7245 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7246 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7247 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7248 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7249 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7250 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7251 = private unnamed_addr constant [12 x i8] c"/finch_lsp_\00" +@.str.7252 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7253 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7254 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7255 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7256 = private unnamed_addr constant [3 x i8] c"\5C\22\00" +@.str.7257 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" +@.str.7258 = private unnamed_addr constant [3 x i8] c"\5Cn\00" +@.str.7259 = private unnamed_addr constant [3 x i8] c"\5Cr\00" +@.str.7260 = private unnamed_addr constant [3 x i8] c"\5Ct\00" +@.str.7261 = private unnamed_addr constant [5 x i8] c"\5Cu00\00" +@.str.7262 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7263 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7264 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.7265 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7266 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7267 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7268 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7269 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7270 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7271 = private unnamed_addr constant [3 x i8] c": \00" +@.str.7272 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7273 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7274 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7275 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7276 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7277 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.7278 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7279 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7280 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7281 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7282 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7283 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7284 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7285 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7286 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7287 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7288 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7289 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7290 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.7291 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7292 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7293 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7294 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7295 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7296 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7297 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7298 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7299 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7300 = private unnamed_addr constant [3 x i8] c"{}\00" +@.str.7301 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7302 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7303 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.7304 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7305 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7306 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7307 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7308 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7309 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7310 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7311 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.7312 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7313 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" +@.str.7314 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7315 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7316 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7317 = private unnamed_addr constant [3 x i8] c" \00" +@.str.7318 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7319 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7320 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7321 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7322 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7323 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7324 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7325 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7326 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7327 = private unnamed_addr constant [6 x i8] c"line \00" +@.str.7328 = private unnamed_addr constant [10 x i8] c", column \00" +@.str.7329 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7330 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7331 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7332 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7333 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7334 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7335 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7336 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7337 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7338 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7339 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7340 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7341 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7342 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7343 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7344 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7345 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7346 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7347 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7348 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7349 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7350 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7351 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7352 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7353 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7354 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7355 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7356 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7357 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7358 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7359 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7360 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7361 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7362 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7363 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7364 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7365 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7366 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7367 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7368 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00" +@.str.7369 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7370 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7371 = private unnamed_addr constant [14 x i8] c"json: found '\00" +@.str.7372 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7373 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7374 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7375 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7376 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7377 = private unnamed_addr constant [9 x i8] c"' where \00" +@.str.7378 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7379 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7380 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7381 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7382 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7383 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7384 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7385 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7386 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7387 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7388 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7389 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7390 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7391 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7392 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7393 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7394 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7395 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7396 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7397 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7398 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7399 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7400 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7401 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7402 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7403 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7404 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00" +@.str.7405 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7406 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7407 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7408 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7409 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7410 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7411 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7412 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7413 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7414 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7415 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7416 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7417 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7418 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7419 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7420 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00" +@.str.7421 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7422 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7423 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7424 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7425 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7426 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7427 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7428 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7429 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7430 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7431 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7432 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7434 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7435 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00" +@.str.7436 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7437 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7438 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7439 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7440 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7441 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7442 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7443 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7444 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7445 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7446 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7448 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7449 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7450 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.7451 = private unnamed_addr constant [3 x i8] c"\5Cu\00" +@.str.7452 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7453 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7454 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00" +@.str.7455 = private unnamed_addr constant [13 x i8] c" in a text (\00" +@.str.7456 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7457 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7458 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7459 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7460 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7461 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7463 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7464 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7465 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7466 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7467 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7468 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7469 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7470 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7471 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7472 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7473 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7474 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7475 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7476 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7477 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7478 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7479 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7480 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7481 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7482 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7483 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7484 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7485 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7486 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7487 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7488 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7489 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7490 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7491 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7492 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7493 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7494 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7495 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7496 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7497 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7498 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7499 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7500 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7501 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7502 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7503 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7504 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7505 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7506 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7507 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7508 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7509 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7510 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7511 = private unnamed_addr constant [9 x i8] c"a number\00" +@.str.7512 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7513 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7514 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7515 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7516 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7517 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7518 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7519 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7520 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7521 = private unnamed_addr constant [16 x i8] c"a key in quotes\00" +@.str.7522 = private unnamed_addr constant [4 x i8] c"':'\00" +@.str.7523 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7524 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7525 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7526 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7527 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7528 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7529 = private unnamed_addr constant [11 x i8] c"',' or '}'\00" +@.str.7530 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7531 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7532 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7533 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7534 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7535 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7536 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7537 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7538 = private unnamed_addr constant [11 x i8] c"',' or ']'\00" +@.str.7539 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.7540 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7541 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7542 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7543 = private unnamed_addr constant [20 x i8] c"the end of the text\00" +@.str.7544 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.7545 = private unnamed_addr constant [13 x i8] c"std/json.fch\00" +@.str.7546 = private unnamed_addr constant [13 x i8] c"std/path.fch\00" +@.str.7547 = private unnamed_addr constant [13 x i8] c"std/proc.fch\00" +@.str.7548 = private unnamed_addr constant [21 x i8] c"std/proc_windows.fch\00" +@.str.7549 = private unnamed_addr constant [13 x i8] c"std/time.fch\00" +@.str.7550 = private unnamed_addr constant [21 x i8] c"std/time_windows.fch\00" +@.str.7551 = private unnamed_addr constant [16 x i8] c"std/finch_win.h\00" +@.str.7552 = private unnamed_addr constant [24982 x i8] c"// The Finch runtime: string and array helpers, input, files and runtime errors.\0A// It is embedded in the compiler, compiled once into a cache folder, and linked\0A// statically into every Finch program. Everything here is plain C with no state.\0A//\0A// Layout shared with the compiler (src/codegen.cpp):\0A// str = { char *ptr; int64 len; int64 cap } ptr is always NUL-terminated\0A// cap > 0 : heap memory owned by the value (cap bytes allocated)\0A// cap == 0 : a string literal, valid forever, never written to\0A// cap == -1: borrowed from C, must be copied before it is kept\0A// []T = { T *ptr; int64 len; int64 cap } owns ptr when cap > 0\0A// map[K]V: see \22maps\22 below\0A\0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#ifndef _WIN32\0A#include \0A#endif\0A\0Atypedef struct {\0A char *ptr;\0A int64_t len;\0A int64_t cap;\0A} FStr;\0A\0Atypedef struct {\0A void *ptr;\0A int64_t len;\0A int64_t cap;\0A} FArr;\0A\0Astatic char empty[1] = \22\22;\0A\0A// ---------- runtime errors ----------\0A\0A// A program that loads Finch libraries (finch build --shared) can take runtime errors over\0A// instead of the process exiting: finch_module_on_fatal(handler) in each library. The handler\0A// gets the message and must not return (longjmp out, or exit itself).\0Astatic void (*fatal_hook)(const char *msg);\0Avoid finch_on_fatal(void (*hook)(const char *msg)) { fatal_hook = hook; }\0A\0Astatic __attribute__((noreturn)) void fatal(const char *msg) {\0A if (fatal_hook) fatal_hook(msg);\0A fflush(stdout);\0A fprintf(stderr, \22%s\5Cn\22, msg);\0A exit(1);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic(const char *file, int64_t line, const char *msg) {\0A char full[1024];\0A snprintf(full, sizeof full, \22%s:%lld: runtime error: %s\22, file, (long long)line, msg);\0A fflush(stdout);\0A fatal(full);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic_index(const char *file, int64_t line, int64_t i, int64_t len) {\0A char msg[128];\0A snprintf(msg, sizeof msg, \22index %lld is out of range (the length is %lld)\22, (long long)i, (long long)len);\0A finch_panic(file, line, msg);\0A}\0A\0Astatic void *must(void *p) {\0A if (!p) {\0A fflush(stdout);\0A fatal(\22runtime error: out of memory\22);\0A }\0A return p;\0A}\0A\0Avoid *finch_alloc(int64_t n) { return must(malloc(n ? (size_t)n : 1)); }\0Avoid *finch_zalloc(int64_t n) { return must(calloc(1, n ? (size_t)n : 1)); }\0A\0A// ---------- strings ----------\0A\0Astatic void str_heap(FStr *out, const char *p, int64_t len) {\0A char *m = finch_alloc(len + 1);\0A if (len) memcpy(m, p, (size_t)len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void str_static(FStr *out, const char *lit) {\0A out->ptr = (char *)lit;\0A out->len = (int64_t)strlen(lit);\0A out->cap = 0;\0A}\0A\0A// A copy that can be kept: literals are shared, everything else is duplicated.\0Avoid finch_str_copy(FStr *out, const FStr *s) {\0A if (s->cap == 0) *out = *s;\0A else str_heap(out, s->ptr, s->len);\0A}\0A\0A// Make `s` writable (before s[i] = c).\0Avoid finch_str_own(FStr *s) {\0A if (s->cap > 0) return;\0A FStr t;\0A str_heap(&t, s->ptr, s->len);\0A *s = t;\0A}\0A\0Avoid finch_str_drop(FStr *s) {\0A if (s->cap > 0) free(s->ptr);\0A}\0A\0Avoid finch_str_from_c(FStr *out, const char *p) {\0A if (!p) {\0A str_static(out, empty);\0A return;\0A }\0A out->ptr = (char *)p;\0A out->len = (int64_t)strlen(p);\0A out->cap = -1;\0A}\0A\0Avoid finch_str_concat(FStr *out, const FStr *a, const FStr *b) {\0A int64_t len = a->len + b->len;\0A char *m = finch_alloc(len + 1);\0A memcpy(m, a->ptr, (size_t)a->len);\0A memcpy(m + a->len, b->ptr, (size_t)b->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Aint finch_str_eq(const FStr *a, const FStr *b) {\0A return a->len == b->len && memcmp(a->ptr, b->ptr, (size_t)a->len) == 0;\0A}\0A\0Aint64_t finch_str_cmp(const FStr *a, const FStr *b) {\0A int64_t n = a->len < b->len ? a->len : b->len;\0A int c = memcmp(a->ptr, b->ptr, (size_t)n);\0A if (c) return c < 0 ? -1 : 1;\0A return a->len < b->len ? -1 : a->len > b->len;\0A}\0A\0Avoid finch_str_from_int(FStr *out, int64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%lld\22, (long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_uint(FStr *out, uint64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%llu\22, (unsigned long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_float(FStr *out, double v) {\0A char buf[64];\0A int n = snprintf(buf, sizeof buf, \22%g\22, v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_char(FStr *out, char c) { str_heap(out, &c, 1); }\0A\0Avoid finch_str_from_bool(FStr *out, int b) { str_static(out, b ? \22true\22 : \22false\22); }\0A\0Astatic void number_error(char *msg, size_t size, const FStr *s, const char *kind) {\0A snprintf(msg, size, \22can't turn \5C\22%.*s\5C\22 into %s\22, (int)(s->len > 100 ? 100 : s->len), s->ptr ? s->ptr : \22\22, kind);\0A}\0A\0Astatic int parse_int(const FStr *s, int64_t *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A errno = 0;\0A long long v = strtoll(p, &end, 10);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end || errno == ERANGE);\0A}\0A\0Astatic int parse_float(const FStr *s, double *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A double v = strtod(p, &end);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end);\0A}\0A\0Aint64_t finch_str_to_int(const FStr *s, const char *file, int64_t line) {\0A int64_t v;\0A if (!parse_int(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0Adouble finch_str_to_float(const FStr *s, const char *file, int64_t line) {\0A double v;\0A if (!parse_float(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0A// ---------- errors as values: int(s) or 0, try read_file(p) ... ----------\0A// Each gives back 1 on success; on failure 0, with the message in *err.\0A\0Astatic void set_error(FStr *err, const char *msg) { str_heap(err, msg, (int64_t)strlen(msg)); }\0A\0Aint finch_str_try_int(const FStr *s, int64_t *out, FStr *err) {\0A if (parse_int(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Aint finch_str_try_float(const FStr *s, double *out, FStr *err) {\0A if (parse_float(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Astatic void file_error(FStr *err, const char *what, const FStr *path) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't %s the file \5C\22%.*s\5C\22: %s\22, what, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr ? path->ptr : \22\22, strerror(errno));\0A set_error(err, msg);\0A}\0A\0A// when `fn main() -> !` fails\0Avoid finch_report_error(const FStr *msg) {\0A fflush(stdout);\0A fprintf(stderr, \22error: %.*s\5Cn\22, (int)msg->len, msg->ptr ? msg->ptr : \22\22);\0A}\0A\0Avoid finch_str_sub(FStr *out, const FStr *s, int64_t start, int64_t end, const char *file, int64_t line) {\0A if (start < 0 || end > s->len || start > end) {\0A char msg[160];\0A snprintf(msg, sizeof msg, \22sub(%lld, %lld) is out of range (the length is %lld)\22, (long long)start,\0A (long long)end, (long long)s->len);\0A finch_panic(file, line, msg);\0A }\0A str_heap(out, s->ptr + start, end - start);\0A}\0A\0Aint64_t finch_str_find(const FStr *s, const FStr *t) {\0A if (t->len == 0) return 0;\0A for (int64_t i = 0; i + t->len <= s->len; i++)\0A if (s->ptr[i] == t->ptr[0] && memcmp(s->ptr + i, t->ptr, (size_t)t->len) == 0) return i;\0A return -1;\0A}\0A\0Aint finch_str_starts(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Aint finch_str_ends(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr + s->len - t->len, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Avoid finch_str_trim(FStr *out, const FStr *s) {\0A int64_t a = 0, b = s->len;\0A while (a < b && isspace((unsigned char)s->ptr[a])) a++;\0A while (b > a && isspace((unsigned char)s->ptr[b - 1])) b--;\0A str_heap(out, s->ptr + a, b - a);\0A}\0A\0Avoid finch_str_upper(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)toupper((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_lower(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)tolower((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_replace(FStr *out, const FStr *s, const FStr *from, const FStr *to) {\0A if (from->len == 0) {\0A str_heap(out, s->ptr, s->len);\0A return;\0A }\0A int64_t count = 0;\0A for (int64_t i = 0; i + from->len <= s->len;) {\0A if (memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A count++;\0A i += from->len;\0A } else {\0A i++;\0A }\0A }\0A int64_t len = s->len + count * (to->len - from->len);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < s->len;) {\0A if (i + from->len <= s->len && memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A memcpy(w, to->ptr, (size_t)to->len);\0A w += to->len;\0A i += from->len;\0A } else {\0A *w++ = s->ptr[i++];\0A }\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len);\0A\0A// \22a,b,,c\22.split(\22,\22) -> [\22a\22, \22b\22, \22\22, \22c\22]; split(\22\22) gives single characters.\0Avoid finch_str_split(FArr *out, const FStr *s, const FStr *sep) {\0A out->ptr = NULL;\0A out->len = out->cap = 0;\0A if (sep->len == 0) {\0A for (int64_t i = 0; i < s->len; i++) arr_push_str(out, s->ptr + i, 1);\0A return;\0A }\0A int64_t start = 0;\0A for (int64_t i = 0; i + sep->len <= s->len;) {\0A if (memcmp(s->ptr + i, sep->ptr, (size_t)sep->len) == 0) {\0A arr_push_str(out, s->ptr + start, i - start);\0A i += sep->len;\0A start = i;\0A } else {\0A i++;\0A }\0A }\0A arr_push_str(out, s->ptr + start, s->len - start);\0A}\0A\0Avoid finch_str_join(FStr *out, const FArr *parts, const FStr *sep) {\0A const FStr *p = parts->ptr;\0A int64_t len = 0;\0A for (int64_t i = 0; i < parts->len; i++) len += p[i].len + (i ? sep->len : 0);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < parts->len; i++) {\0A if (i) {\0A memcpy(w, sep->ptr, (size_t)sep->len);\0A w += sep->len;\0A }\0A memcpy(w, p[i].ptr, (size_t)p[i].len);\0A w += p[i].len;\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_repeat(FStr *out, const FStr *s, int64_t n) {\0A if (n < 0) n = 0;\0A int64_t len = s->len * n;\0A char *m = finch_alloc(len + 1);\0A for (int64_t i = 0; i < n; i++) memcpy(m + i * s->len, s->ptr, (size_t)s->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_from_bytes(FStr *out, const FArr *bytes) { str_heap(out, bytes->ptr, bytes->len); }\0A\0A// ---------- building text: print(x) and str(x) of arrays, maps and structs ----------\0A// A buffer starts as an empty str and grows on the heap.\0A\0Avoid finch_buf_add(FStr *b, const char *p, int64_t n) {\0A if (b->len + n + 1 > b->cap) {\0A int64_t cap = b->cap > 0 ? b->cap * 2 : 32;\0A while (cap < b->len + n + 1) cap *= 2;\0A b->ptr = must(realloc(b->cap > 0 ? b->ptr : NULL, (size_t)cap));\0A b->cap = cap;\0A }\0A if (n) memcpy(b->ptr + b->len, p, (size_t)n);\0A b->len += n;\0A b->ptr[b->len] = 0;\0A}\0A\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) __attribute__((format(printf, 2, 3)));\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) {\0A char t[64];\0A va_list ap;\0A va_start(ap, fmt);\0A int n = vsnprintf(t, sizeof t, fmt, ap);\0A va_end(ap);\0A finch_buf_add(b, t, n);\0A}\0A\0Avoid finch_buf_int(FStr *b, int64_t v) { buf_fmt(b, \22%lld\22, (long long)v); }\0Avoid finch_buf_uint(FStr *b, uint64_t v) { buf_fmt(b, \22%llu\22, (unsigned long long)v); }\0Avoid finch_buf_float(FStr *b, double v) { buf_fmt(b, \22%g\22, v); }\0Avoid finch_buf_bool(FStr *b, int v) { finch_buf_add(b, v ? \22true\22 : \22false\22, v ? 4 : 5); }\0Avoid finch_buf_ptr(FStr *b, const void *p) {\0A if (p) buf_fmt(b, \220x%llx\22, (unsigned long long)(uintptr_t)p);\0A else finch_buf_add(b, \22null\22, 4);\0A}\0A\0Avoid finch_buf_char(FStr *b, char c, int quoted) {\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A finch_buf_add(b, &c, 1);\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A}\0A\0Avoid finch_buf_str(FStr *b, const FStr *s, int quoted) {\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A finch_buf_add(b, s->ptr, s->len);\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A}\0A\0A// print the buffer and free it\0Avoid finch_buf_print(FStr *b) {\0A if (b->len) fwrite(b->ptr, 1, (size_t)b->len, stdout);\0A if (b->cap > 0) free(b->ptr);\0A}\0A\0A// ---------- arrays ----------\0A\0Avoid finch_arr_reserve(FArr *a, int64_t need, int64_t es) {\0A if (need <= a->cap) return;\0A int64_t cap = a->cap * 2;\0A if (cap < 4) cap = 4;\0A if (cap < need) cap = need;\0A a->ptr = must(realloc(a->cap > 0 ? a->ptr : NULL, (size_t)(cap * es)));\0A a->cap = cap;\0A}\0A\0Avoid finch_arr_make(FArr *out, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A out->ptr = len ? finch_zalloc(len * es) : NULL;\0A out->len = len;\0A out->cap = len;\0A}\0A\0A// grow or shrink to `len`; new elements are zero\0Avoid finch_arr_resize(FArr *a, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A finch_arr_reserve(a, len, es);\0A if (len > a->len) memset((char *)a->ptr + a->len * es, 0, (size_t)((len - a->len) * es));\0A a->len = len;\0A}\0A\0A// a byte-for-byte copy of the elements (the compiler deep-copies owning elements afterwards)\0Avoid finch_arr_clone_raw(FArr *out, const FArr *a, int64_t es) {\0A out->len = a->len;\0A out->cap = a->len;\0A out->ptr = a->len ? finch_alloc(a->len * es) : NULL;\0A if (a->len) memcpy(out->ptr, a->ptr, (size_t)(a->len * es));\0A}\0A\0Avoid finch_arr_free(FArr *a) {\0A if (a->cap > 0) free(a->ptr);\0A}\0A\0A// open a hole at i (0 <= i <= len), len grows by one\0Avoid finch_arr_insert_gap(FArr *a, int64_t i, int64_t es, const char *file, int64_t line) {\0A if (i < 0 || i > a->len) finch_panic_index(file, line, i, a->len);\0A finch_arr_reserve(a, a->len + 1, es);\0A char *p = a->ptr;\0A memmove(p + (i + 1) * es, p + i * es, (size_t)((a->len - i) * es));\0A a->len++;\0A}\0A\0A// close the hole at i (the element was already moved out), len shrinks by one\0Avoid finch_arr_remove_gap(FArr *a, int64_t i, int64_t es) {\0A char *p = a->ptr;\0A memmove(p + i * es, p + (i + 1) * es, (size_t)((a->len - i - 1) * es));\0A a->len--;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len) {\0A finch_arr_reserve(a, a->len + 1, (int64_t)sizeof(FStr));\0A str_heap((FStr *)a->ptr + a->len, p, len);\0A a->len++;\0A}\0A\0Avoid finch_bytes_from_str(FArr *out, const FStr *s) {\0A out->len = out->cap = s->len;\0A out->ptr = s->len ? finch_alloc(s->len) : NULL;\0A if (s->len) memcpy(out->ptr, s->ptr, (size_t)s->len);\0A}\0A\0A// ---------- program arguments, input and files ----------\0A\0Avoid finch_args(FArr *out, int argc, char **argv) {\0A out->len = out->cap = argc;\0A out->ptr = finch_alloc((int64_t)sizeof(FStr) * (argc ? argc : 1));\0A for (int i = 0; i < argc; i++) str_heap((FStr *)out->ptr + i, argv[i], (int64_t)strlen(argv[i]));\0A}\0A\0A// input(\22Name? \22) prints the prompt and reads one line, without the newline.\0Avoid finch_input(FStr *out, const FStr *prompt) {\0A if (prompt->len) fwrite(prompt->ptr, 1, (size_t)prompt->len, stdout);\0A fflush(stdout);\0A // read one line of any length (getline isn't available everywhere)\0A size_t size = 128, n = 0;\0A char *line = finch_alloc((int64_t)size);\0A int c, got = 0;\0A while ((c = fgetc(stdin)) != EOF) {\0A got = 1;\0A if (c == '\5Cn') break;\0A if (n + 1 >= size) line = must(realloc(line, size *= 2));\0A line[n++] = (char)c;\0A }\0A if (!got) {\0A free(line);\0A str_static(out, empty);\0A return;\0A }\0A while (n > 0 && line[n - 1] == '\5Cr') n--;\0A line[n] = 0;\0A out->ptr = line;\0A out->len = (int64_t)n;\0A out->cap = (int64_t)size;\0A}\0A\0Aint finch_file_exists(const FStr *path) {\0A FILE *f = fopen(path->ptr, \22rb\22);\0A if (f) fclose(f);\0A return f != NULL;\0A}\0A\0Aint finch_try_read_file(FStr *out, const FStr *path, FStr *err) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A file_error(err, \22read\22, path);\0A return 0;\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A return 1;\0A}\0A\0Avoid finch_read_file(FStr *out, const FStr *path, const char *file, int64_t line) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't read the file \5C\22%.*s\5C\22: %s\22, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr, strerror(errno));\0A finch_panic(file, line, msg);\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A}\0A\0A// shell(\22ls -l\22): run a command, give back its exit code\0Aint64_t finch_shell(const FStr *cmd) {\0A fflush(stdout);\0A int status = system(cmd->ptr ? cmd->ptr : \22\22);\0A#ifdef _WIN32\0A return status; // Windows gives the exit code directly\0A#else\0A if (status == -1) return -1;\0A if (WIFEXITED(status)) return WEXITSTATUS(status);\0A return 128 + (WIFSIGNALED(status) ? WTERMSIG(status) : 0);\0A#endif\0A}\0A\0Aint finch_delete_file(const FStr *path) { return remove(path->ptr ? path->ptr : \22\22) == 0; }\0A\0Aint finch_try_delete_file(const FStr *path, FStr *err) {\0A if (remove(path->ptr ? path->ptr : \22\22) == 0) return 1;\0A file_error(err, \22delete\22, path);\0A return 0;\0A}\0A\0A// stdin/stdout/stderr are macros on some systems (Windows), so Finch asks for them here\0Avoid *finch_std_stream(int i) { return i == 0 ? (void *)stdin : i == 1 ? (void *)stdout : (void *)stderr; }\0A\0Aint finch_write_file(const FStr *path, const FStr *text) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22wb\22);\0A if (!f) return 0;\0A size_t put = text->len ? fwrite(text->ptr, 1, (size_t)text->len, f) : 0;\0A return fclose(f) == 0 && put == (size_t)text->len;\0A}\0A\0Aint finch_try_write_file(const FStr *path, const FStr *text, FStr *err) {\0A errno = 0;\0A if (finch_write_file(path, text)) return 1;\0A if (!errno) errno = EIO;\0A file_error(err, \22write\22, path);\0A return 0;\0A}\0A\0A// ---------- maps ----------\0A// map[K]V = { entries; len; used; cap; index; icap; adds }\0A// entries: `used` slots of es bytes, each { uint64 hash; K key; V value }, in insertion order.\0A// A removed entry keeps its slot (hash 0) until the next resize packs the slots.\0A// index: icap slots (a power of two, at least 2 * cap): -1 empty, -2 removed, else an entry number.\0A// adds: how many keys were ever added; a `for` over the map stops with an error if it changes.\0A// The compiler stores, copies and drops keys and values; the runtime only finds and places entries.\0A// Keys are compared byte for byte (numbers, chars, bools) or as text (kstr).\0A\0Atypedef struct {\0A char *entries;\0A int64_t len, used, cap;\0A int64_t *index;\0A int64_t icap;\0A int64_t adds;\0A} FMap;\0A\0Astatic uint64_t map_hash(const void *key, int64_t ks, int kstr) {\0A const unsigned char *p;\0A size_t n;\0A if (kstr) {\0A const FStr *s = key;\0A p = (const unsigned char *)s->ptr;\0A n = (size_t)s->len;\0A } else {\0A p = key;\0A n = (size_t)ks;\0A }\0A uint64_t h = 1469598103934665603ULL; // FNV-1a, then mixed so the low bits spread well\0A for (size_t i = 0; i < n; i++) {\0A h ^= p[i];\0A h *= 1099511628211ULL;\0A }\0A h ^= h >> 31;\0A h *= 0xbf58476d1ce4e5b9ULL;\0A h ^= h >> 29;\0A return h | 1; // 0 marks a removed entry\0A}\0A\0Astatic int map_key_eq(const char *a, const void *b, int64_t ks, int kstr) {\0A if (!kstr) return memcmp(a, b, (size_t)ks) == 0;\0A const FStr *x = (const FStr *)a, *y = b;\0A return x->len == y->len && (x->len == 0 || memcmp(x->ptr, y->ptr, (size_t)x->len) == 0);\0A}\0A\0Astatic void map_reindex(FMap *m, int64_t es) {\0A if (m->len != m->used) { // pack the slots of removed entries away\0A int64_t j = 0;\0A for (int64_t i = 0; i < m->used; i++) {\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == 0) continue;\0A if (i != j) memmove(m->entries + j * es, e, (size_t)es);\0A j++;\0A }\0A m->used = j;\0A }\0A int64_t icap = 16;\0A while (icap < m->cap * 2) icap *= 2;\0A free(m->index);\0A m->index = finch_alloc(icap * (int64_t)sizeof(int64_t));\0A memset(m->index, 0xff, (size_t)icap * sizeof(int64_t));\0A m->icap = icap;\0A for (int64_t i = 0; i < m->used; i++) {\0A uint64_t h = *(uint64_t *)(m->entries + i * es);\0A int64_t s = (int64_t)(h & (uint64_t)(icap - 1));\0A while (m->index[s] != -1) s = (s + 1) & (icap - 1);\0A m->index[s] = i;\0A }\0A}\0A\0A// the entry number of `key`, or -1\0Aint64_t finch_map_find(const FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr) {\0A if (m->len == 0) return -1;\0A uint64_t h = map_hash(key, ks, kstr);\0A for (int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));; s = (s + 1) & (m->icap - 1)) {\0A int64_t i = m->index[s];\0A if (i == -1) return -1;\0A if (i < 0) continue;\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == h && map_key_eq(e + 8, key, ks, kstr)) return i;\0A }\0A}\0A\0A// The entry for `key`. A new one is zeroed except its hash (*added = 1); the compiler then stores the key.\0Aint64_t finch_map_slot(FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr, int32_t *added) {\0A int64_t i = finch_map_find(m, key, es, ks, kstr);\0A *added = i < 0;\0A if (i >= 0) return i;\0A if (m->used == m->cap) {\0A if (m->len * 4 < m->cap * 3) { // many removed slots: pack them instead of growing\0A map_reindex(m, es);\0A } else {\0A m->cap = m->cap ? m->cap * 2 : 8;\0A m->entries = must(realloc(m->entries, (size_t)(m->cap * es)));\0A map_reindex(m, es);\0A }\0A }\0A uint64_t h = map_hash(key, ks, kstr);\0A i = m->used++;\0A char *e = m->entries + i * es;\0A memset(e, 0, (size_t)es);\0A *(uint64_t *)e = h;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] >= 0) s = (s + 1) & (m->icap - 1);\0A m->index[s] = i;\0A m->len++;\0A m->adds++;\0A return i;\0A}\0A\0A// Forget entry i (its key and value were already dropped by the compiler).\0Avoid finch_map_remove_at(FMap *m, int64_t i, int64_t es) {\0A char *e = m->entries + i * es;\0A uint64_t h = *(uint64_t *)e;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] != i) s = (s + 1) & (m->icap - 1);\0A m->index[s] = -2;\0A *(uint64_t *)e = 0;\0A if (--m->len == 0) {\0A m->used = 0;\0A memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A }\0A}\0A\0Avoid finch_map_clear(FMap *m) {\0A m->len = m->used = 0;\0A if (m->index) memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0Avoid finch_map_free(FMap *m) {\0A free(m->entries);\0A free(m->index);\0A}\0A\0A// A copy of the slots and the index; the compiler then copies the keys and values that own memory.\0Avoid finch_map_clone_raw(FMap *out, const FMap *m, int64_t es) {\0A *out = *m;\0A if (!m->cap) return;\0A out->entries = finch_alloc(m->cap * es);\0A memcpy(out->entries, m->entries, (size_t)(m->used * es));\0A out->index = finch_alloc(m->icap * (int64_t)sizeof(int64_t));\0A memcpy(out->index, m->index, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_changed(const char *file, int64_t line) {\0A finch_panic(file, line, \22a key was added to the map while looping over it (collect the new keys, and add them after the loop)\22);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_missing(const char *file, int64_t line, const FStr *key) {\0A char msg[200];\0A snprintf(msg, sizeof msg, \22the key %.*s is not in the map (check with .has(key), or use .get(key, default))\22,\0A (int)(key->len > 100 ? 100 : key->len), key->ptr ? key->ptr : \22\22);\0A finch_panic(file, line, msg);\0A}\0A\00" +@.str.7553 = private unnamed_addr constant [12885 x i8] c"// JSON: read it, build it, write it.\0A//\0A// import json\0A//\0A// doc := try json.parse(\22{\5C\22name\5C\22: \5C\22Finch\5C\22, \5C\22tags\5C\22: [\5C\22fast\5C\22, \5C\22small\5C\22], \5C\22stars\5C\22: 5}\22)\0A// print(doc.get(\22name\22).str_or(\22\22)) Finch\0A// print(doc.get(\22tags\22).at(1).str_or(\22\22)) small\0A// print(doc.get(\22stars\22).int_or(0)) 5\0A// print(doc.get(\22missing\22).is_null()) true (a missing key is null, so chains never fail)\0A//\0A// out := json.new_object()\0A// out.set(\22ok\22, json.new_bool(true))\0A// list := json.new_list()\0A// list.push(json.new_number(1.5))\0A// out.set(\22values\22, list)\0A// print(json.stringify(out)) {\22ok\22:true,\22values\22:[1.5]}\0A// print(json.pretty(out)) the same, over several lines\0A\0Aenum Kind { Null, Bool, Number, Text, List, Object }\0A\0A// One JSON value. `kind` says which of the other fields it uses: flag for Bool, num for Number,\0A// text for Text, items for List, and items with keys (the same length, in the same order) for Object.\0Astruct Json {\0A Kind kind\0A bool flag\0A float num\0A str text\0A []Json items\0A []str keys\0A}\0A\0Afn new_null() -> Json {\0A return Json(kind: Kind.Null)\0A}\0A\0Afn new_bool(bool b) -> Json {\0A return Json(kind: Kind.Bool, flag: b)\0A}\0A\0Afn new_number(float n) -> Json {\0A return Json(kind: Kind.Number, num: n)\0A}\0A\0Afn new_text(str s) -> Json {\0A return Json(kind: Kind.Text, text: s)\0A}\0A\0Afn new_list() -> Json {\0A return Json(kind: Kind.List)\0A}\0A\0Afn new_object() -> Json {\0A return Json(kind: Kind.Object)\0A}\0A\0A// ---------- looking inside ----------\0A\0Afn Json.is_null() -> bool {\0A return self.kind == Kind.Null\0A}\0A\0A// the number of elements of a list, of keys of an object, of bytes of a text; 0 for the rest\0Afn Json.len() -> int {\0A return match self.kind {\0A List, Object -> self.items.len\0A Text -> self.text.len\0A else -> 0\0A }\0A}\0A\0Afn Json.has(str key) -> bool {\0A return self.kind == Kind.Object && self.keys.contains(key)\0A}\0A\0A// the value of a key of an object; null if there is none (or this is not an object)\0Afn Json.get(str key) -> Json {\0A if self.kind != Kind.Object {\0A return new_null()\0A }\0A i := self.keys.find(key)\0A if i < 0 {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the element of a list; null if there is none\0Afn Json.at(int i) -> Json {\0A if self.kind != Kind.List || i < 0 || i >= self.items.len {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the value if it is of that kind, else what was given\0Afn Json.str_or(str fallback) -> str {\0A if self.kind == Kind.Text {\0A return self.text\0A }\0A return fallback\0A}\0A\0Afn Json.float_or(float fallback) -> float {\0A if self.kind == Kind.Number {\0A return self.num\0A }\0A return fallback\0A}\0A\0Afn Json.int_or(int fallback) -> int {\0A if self.kind == Kind.Number {\0A return int(self.num)\0A }\0A return fallback\0A}\0A\0Afn Json.bool_or(bool fallback) -> bool {\0A if self.kind == Kind.Bool {\0A return self.flag\0A }\0A return fallback\0A}\0A\0A// the keys of an object, in the order they were written\0Afn Json.names() -> []str {\0A return self.keys\0A}\0A\0A// ---------- building ----------\0A\0A// add to the end of a list\0Afn Json.push(Json v) {\0A self.items.push(v)\0A}\0A\0A// give a key a value in an object; a key that is already there is replaced\0Afn Json.set(str key, Json v) {\0A i := self.keys.find(key)\0A if i >= 0 {\0A self.items[i] = v\0A return\0A }\0A self.keys.push(key)\0A self.items.push(v)\0A}\0A\0A// ---------- writing ----------\0A\0Afn quote(str s) -> str {\0A []str parts = [\22\5C\22\22]\0A for c in s {\0A n := int(c)\0A if c == '\22' {\0A parts.push(\22\5C\5C\5C\22\22)\0A } else if c == '\5C\5C' {\0A parts.push(\22\5C\5C\5C\5C\22)\0A } else if c == '\5Cn' {\0A parts.push(\22\5C\5Cn\22)\0A } else if c == '\5Cr' {\0A parts.push(\22\5C\5Cr\22)\0A } else if c == '\5Ct' {\0A parts.push(\22\5C\5Ct\22)\0A } else if n < 32 {\0A parts.push(\22\5C\5Cu00\22 + hexdigit(n / 16) + hexdigit(n % 16))\0A } else {\0A parts.push(str(c))\0A }\0A }\0A parts.push(\22\5C\22\22)\0A return parts.join(\22\22)\0A}\0A\0Afn hexdigit(int n) -> str {\0A digits := \220123456789abcdef\22\0A return str(digits[n])\0A}\0A\0Afn number_text(float n) -> str {\0A if n == float(int(n)) && n > -1000000000000000.0 && n < 1000000000000000.0 {\0A return str(int(n))\0A }\0A return str(n)\0A}\0A\0Astruct Writer {\0A []str out\0A}\0A\0Afn write(Json j, str indent, str pad, ptr[Writer] w) {\0A nl := \22\22\0A inner := \22\22\0A sep := \22,\22\0A colon := \22:\22\0A if indent.len > 0 {\0A nl = \22\5Cn\22\0A inner = pad + indent\0A colon = \22: \22\0A }\0A match j.kind {\0A Null -> w.out.push(\22null\22)\0A Bool -> {\0A if j.flag {\0A w.out.push(\22true\22)\0A } else {\0A w.out.push(\22false\22)\0A }\0A }\0A Number -> w.out.push(number_text(j.num))\0A Text -> w.out.push(quote(j.text))\0A List -> {\0A if j.items.len == 0 {\0A w.out.push(\22[]\22)\0A return\0A }\0A w.out.push(\22[\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22]\22)\0A }\0A Object -> {\0A if j.items.len == 0 {\0A w.out.push(\22{}\22)\0A return\0A }\0A w.out.push(\22{\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner + quote(j.keys[i]) + colon)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22}\22)\0A }\0A }\0A}\0A\0A// the value as text on one line\0Afn stringify(Json j) -> str {\0A w := Writer()\0A write(j, \22\22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// the value as text over several lines, indented by two spaces\0Afn pretty(Json j) -> str {\0A w := Writer()\0A write(j, \22 \22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// ---------- reading ----------\0A\0Astruct Reader {\0A str src\0A int i\0A}\0A\0A// the line and column of a position, for a message\0Afn where(ptr[Reader] r) -> str {\0A line := 1\0A col := 1\0A for k in 0..r.i {\0A if k < r.src.len && r.src[k] == '\5Cn' {\0A line += 1\0A col = 1\0A } else {\0A col += 1\0A }\0A }\0A return \22line \22 + str(line) + \22, column \22 + str(col)\0A}\0A\0Afn peek(ptr[Reader] r) -> char {\0A if r.i < r.src.len {\0A return r.src[r.i]\0A }\0A return char(0)\0A}\0A\0Afn skip_space(ptr[Reader] r) {\0A while r.i < r.src.len && (r.src[r.i] == ' ' || r.src[r.i] == '\5Cn' || r.src[r.i] == '\5Ct' || r.src[r.i] == '\5Cr') {\0A r.i += 1\0A }\0A}\0A\0Afn unexpected(ptr[Reader] r, str wanted) -> str {\0A if r.i >= r.src.len {\0A return \22json: the text ends where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A }\0A return \22json: found '\22 + str(r.src[r.i]) + \22' where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A}\0A\0A// does `word` come next?\0Afn comes(ptr[Reader] r, str word) -> bool {\0A return r.src.len - r.i >= word.len && r.src.sub(r.i, r.i + word.len) == word\0A}\0A\0Afn expect_word(ptr[Reader] r, str word) -> ! {\0A if !comes(r, word) {\0A return error(unexpected(r, \22'\22 + word + \22'\22))\0A }\0A r.i += word.len\0A}\0A\0Afn hex_value(char c) -> int {\0A if c >= '0' && c <= '9' {\0A return int(c) - int('0')\0A }\0A if c >= 'a' && c <= 'f' {\0A return int(c) - int('a') + 10\0A }\0A if c >= 'A' && c <= 'F' {\0A return int(c) - int('A') + 10\0A }\0A return -1\0A}\0A\0A// a code point as UTF-8\0Afn utf8(int cp) -> str {\0A []u8 b\0A if cp < 128 {\0A b.push(u8(cp))\0A } else if cp < 2048 {\0A b.push(u8(192 + cp / 64))\0A b.push(u8(128 + cp % 64))\0A } else if cp < 65536 {\0A b.push(u8(224 + cp / 4096))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A } else {\0A b.push(u8(240 + cp / 262144))\0A b.push(u8(128 + (cp / 4096) % 64))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A }\0A return str(b)\0A}\0A\0Afn read_hex4(ptr[Reader] r) -> int! {\0A n := 0\0A for k in 0..4 {\0A if r.i >= r.src.len || hex_value(r.src[r.i]) < 0 {\0A return error(unexpected(r, \22a hexadecimal digit\22))\0A }\0A n = n * 16 + hex_value(r.src[r.i])\0A r.i += 1\0A }\0A return n\0A}\0A\0Afn read_string(ptr[Reader] r) -> str! {\0A r.i += 1 // the opening quote\0A []str parts\0A start := r.i\0A while true {\0A if r.i >= r.src.len {\0A return error(\22json: a text is never closed (\22 + where(r) + \22)\22)\0A }\0A c := r.src[r.i]\0A if c == '\22' {\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A return parts.join(\22\22)\0A }\0A if int(c) < 32 {\0A return error(\22json: a line break or control character inside a text (\22 + where(r) + \22)\22)\0A }\0A if c != '\5C\5C' {\0A r.i += 1\0A continue\0A }\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A e := peek(r)\0A r.i += 1\0A if e == 'n' {\0A parts.push(\22\5Cn\22)\0A } else if e == 't' {\0A parts.push(\22\5Ct\22)\0A } else if e == 'r' {\0A parts.push(\22\5Cr\22)\0A } else if e == 'b' {\0A parts.push(utf8(8))\0A } else if e == 'f' {\0A parts.push(utf8(12))\0A } else if e == '\22' || e == '\5C\5C' || e == '/' {\0A parts.push(str(e))\0A } else if e == 'u' {\0A cp := try read_hex4(r)\0A // a pair of \F0\9F\98\80 stands for one character above U+FFFF\0A if cp >= 55296 && cp < 56320 && comes(r, \22\5C\5Cu\22) {\0A r.i += 2\0A low := try read_hex4(r)\0A cp = 65536 + (cp - 55296) * 1024 + (low - 56320)\0A }\0A parts.push(utf8(cp))\0A } else {\0A return error(\22json: unknown escape \5C\5C\22 + str(e) + \22 in a text (\22 + where(r) + \22)\22)\0A }\0A start = r.i\0A }\0A}\0A\0Afn read_number(ptr[Reader] r) -> Json! {\0A start := r.i\0A if peek(r) == '-' {\0A r.i += 1\0A }\0A while r.i < r.src.len && ((r.src[r.i] >= '0' && r.src[r.i] <= '9') || r.src[r.i] == '.' || r.src[r.i] == 'e' || r.src[r.i] == 'E' || r.src[r.i] == '+' || r.src[r.i] == '-') {\0A r.i += 1\0A }\0A n := float(r.src.sub(start, r.i)) or {\0A r.i = start\0A return error(unexpected(r, \22a number\22))\0A }\0A return new_number(n)\0A}\0A\0Afn read_value(ptr[Reader] r) -> Json! {\0A skip_space(r)\0A c := peek(r)\0A if r.i >= r.src.len {\0A return error(unexpected(r, \22a value\22))\0A }\0A if c == '{' {\0A obj := new_object()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A while true {\0A skip_space(r)\0A if peek(r) != '\22' {\0A return error(unexpected(r, \22a key in quotes\22))\0A }\0A key := try read_string(r)\0A skip_space(r)\0A if peek(r) != ':' {\0A return error(unexpected(r, \22':'\22))\0A }\0A r.i += 1\0A v := try read_value(r)\0A obj.set(key, v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A return error(unexpected(r, \22',' or '}'\22))\0A }\0A }\0A if c == '[' {\0A list := new_list()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A while true {\0A v := try read_value(r)\0A list.push(v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A return error(unexpected(r, \22',' or ']'\22))\0A }\0A }\0A if c == '\22' {\0A s := try read_string(r)\0A return new_text(s)\0A }\0A if c == 't' {\0A try expect_word(r, \22true\22)\0A return new_bool(true)\0A }\0A if c == 'f' {\0A try expect_word(r, \22false\22)\0A return new_bool(false)\0A }\0A if c == 'n' {\0A try expect_word(r, \22null\22)\0A return new_null()\0A }\0A if c == '-' || (c >= '0' && c <= '9') {\0A return try read_number(r)\0A }\0A return error(unexpected(r, \22a value\22))\0A}\0A\0A// the JSON in `text`; an error with the line and column where it went wrong\0Afn parse(str text) -> Json! {\0A r := Reader(src: text)\0A v := try read_value(addr(r))\0A skip_space(addr(r))\0A if r.i < r.src.len {\0A return error(unexpected(addr(r), \22the end of the text\22))\0A }\0A return v\0A}\0A\00" +@.str.7554 = private unnamed_addr constant [2847 x i8] c"// Paths, as text. Elements are separated by \22/\22.\0A//\0A// import path\0A// path.join(\22a\22, \22b.txt\22) a/b.txt\0A// path.base(\22/tmp/x/a.tar.gz\22) a.tar.gz path.stem(...) a.tar path.ext(...) .gz\0A// path.dir(\22/tmp/x/a.txt\22) /tmp/x\0A// path.clean(\22a//b/../c/./d\22) a/c/d\0A\0A// a and b with one separator between; an absolute b replaces a\0Afn join(str a, str b) -> str {\0A if a.len == 0 {\0A return b\0A }\0A if b.len == 0 {\0A return a\0A }\0A if b[0] == '/' {\0A return b\0A }\0A if a[a.len - 1] == '/' {\0A return a + b\0A }\0A return a + \22/\22 + b\0A}\0A\0Afn is_abs(str p) -> bool {\0A return p.len > 0 && p[0] == '/'\0A}\0A\0A// the last element: \22a/b.txt\22 -> \22b.txt\22, \22a/b/\22 -> \22b\22, \22\22 -> \22.\22, \22/\22 -> \22/\22\0Afn base(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A if end == 1 && p[0] == '/' {\0A return \22/\22\0A }\0A start := end\0A while start > 0 && p[start - 1] != '/' {\0A start -= 1\0A }\0A return p.sub(start, end)\0A}\0A\0A// everything before the last element: \22a/b.txt\22 -> \22a\22, \22b.txt\22 -> \22.\22, \22/b\22 -> \22/\22\0Afn dir(str p) -> str {\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A i := end\0A while i > 0 && p[i - 1] != '/' {\0A i -= 1\0A }\0A if i == 0 {\0A return \22.\22\0A }\0A while i > 1 && p[i - 1] == '/' {\0A i -= 1\0A }\0A return p.sub(0, i)\0A}\0A\0A// the part of the last element from its last dot: \22a.tar.gz\22 -> \22.gz\22; \22\22 when there is none\0Afn ext(str p) -> str {\0A b := base(p)\0A i := b.len\0A while i > 0 && b[i - 1] != '.' {\0A i -= 1\0A }\0A if i <= 1 { // no dot, or a name that only starts with one (.bashrc)\0A return \22\22\0A }\0A return b.sub(i - 1, b.len)\0A}\0A\0A// the last element without its extension\0Afn stem(str p) -> str {\0A b := base(p)\0A e := ext(p)\0A return b.sub(0, b.len - e.len)\0A}\0A\0A// the elements of a path: \22/a/b/c\22 -> [\22a\22, \22b\22, \22c\22]\0Afn parts(str p) -> []str {\0A []str out\0A for piece in p.split(\22/\22) {\0A if piece.len > 0 {\0A out.push(piece)\0A }\0A }\0A return out\0A}\0A\0A// the shortest path with the same meaning: no \22//\22, no \22.\22, and \22..\22 resolved where it can be\0Afn clean(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A abs := is_abs(p)\0A []str out\0A for piece in parts(p) {\0A if piece == \22.\22 {\0A continue\0A }\0A if piece == \22..\22 {\0A if out.len > 0 && out[out.len - 1] != \22..\22 {\0A out.pop()\0A } else if !abs {\0A out.push(\22..\22)\0A }\0A continue\0A }\0A out.push(piece)\0A }\0A joined := out.join(\22/\22)\0A if abs {\0A return \22/\22 + joined\0A }\0A if joined.len == 0 {\0A return \22.\22\0A }\0A return joined\0A}\0A\00" +@.str.7555 = private unnamed_addr constant [1407 x i8] c"// Programs: run a command, read what it printed, look at the environment.\0A//\0A// import proc\0A// code := proc.run(\22make\22) the exit code; what the command prints goes to the screen\0A// text := try proc.output(\22git describe\22) what the command printed; an error if it failed\0A// proc.env(\22HOME\22, \22/\22) an environment variable, or the second value if it is not set\0Aimport \22stdlib.h\22\0Aimport \22unistd.h\22\0Aimport \22time.h\22\0A\0A// run a command; its output goes to the screen. Gives its exit code.\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0A// run a command and give what it printed. Fails, with its output as the message, if it exits with an error.\0Afn output(str command) -> str! {\0A tmp := \22/tmp/finch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(\22(\22 + command + \22) > '\22 + tmp + \22' 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0A// the folder the program is running in\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7556 = private unnamed_addr constant [996 x i8] c"// Programs, for Windows. The same functions as proc.fch (that file is for Linux and macOS).\0Aimport \22stdlib.h\22\0Aimport \22process.h\22\0Aimport \22direct.h\22\0Aimport \22time.h\22\0A\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0Afn output(str command) -> str! {\0A tmp := proc_env(\22TEMP\22, \22.\22) + \22\5C\5Cfinch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(command + \22 > \5C\22\22 + tmp + \22\5C\22 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn proc_env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn env(str name, str fallback) -> str {\0A return proc_env(name, fallback)\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7557 = private unnamed_addr constant [2540 x i8] c"// Time: the clock, sleeping, and dates.\0A//\0A// import time\0A// start := time.millis() milliseconds from a clock that only goes forward (to measure with)\0A// time.sleep(250) wait a quarter of a second\0A// time.now() seconds since 1970-01-01 00:00 UTC\0A// d := time.date(time.now()) the parts: d.year, d.month, d.day, d.hour, d.minute, d.second\0A// time.format(time.now(), \22%Y-%m-%d %H:%M\22) as text, in the computer's time zone\0Aimport \22time.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0A// seconds since 1970-01-01 00:00 UTC\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward: for measuring how long something took\0Afn millis() -> int {\0A timespec ts\0A clock_gettime(CLOCK_MONOTONIC, addr(ts))\0A return int(ts.tv_sec) * 1000 + int(ts.tv_nsec) / 1000000\0A}\0A\0Afn sleep(int ms) {\0A timespec ts\0A ts.tv_sec = ms / 1000\0A ts.tv_nsec = (ms % 1000) * 1000000\0A nanosleep(addr(ts), null)\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0A// the date and time of a moment, in UTC\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A gmtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// the date and time of a moment, in the computer's time zone\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// a moment as text, in the computer's time zone: %Y year, %m month, %d day, %H hour, %M minute, %S second\0A// (the rest of C's strftime works too: %A weekday name, %B month name, ...)\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0A// the number of days in a month (month is 1 to 12)\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7558 = private unnamed_addr constant [1793 x i8] c"// Time, for Windows. The same functions as time.fch (that file is for Linux and macOS).\0Aimport \22time.h\22\0Aimport \22finch_win.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward (the performance counter: GetTickCount64 ticks every 15 ms)\0Afn millis() -> int {\0A i64 count = 0\0A i64 freq = 1\0A QueryPerformanceFrequency(addr(freq))\0A QueryPerformanceCounter(addr(count))\0A return int(count / freq) * 1000 + int(count % freq) * 1000 / int(freq)\0A}\0A\0Afn sleep(int ms) {\0A Sleep(u32(ms))\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _gmtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7559 = private unnamed_addr constant [366 x i8] c"/* The Windows functions std/time_windows.fch needs. Declared here, not by including :\0A libclang can't parse that header with MinGW's intrinsics. Both are in kernel32. */\0Aunsigned long long GetTickCount64(void);\0Avoid Sleep(unsigned long milliseconds);\0Aint QueryPerformanceCounter(long long *count);\0Aint QueryPerformanceFrequency(long long *frequency);\0A\00" + +declare void @finch_panic(ptr, i64, ptr) noreturn cold +declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold +declare ptr @finch_alloc(i64) +declare void @finch_str_copy(ptr, ptr) +declare void @finch_str_drop(ptr) +declare void @finch_arr_free(ptr) +declare void @finch_map_free(ptr) +declare void @finch_str_own(ptr) +declare void @finch_str_concat(ptr, ptr, ptr) +declare i32 @finch_str_eq(ptr, ptr) +declare i64 @finch_str_cmp(ptr, ptr) +declare void @finch_buf_add(ptr, ptr, i64) +declare void @finch_buf_int(ptr, i64) +declare void @finch_buf_uint(ptr, i64) +declare void @finch_buf_float(ptr, double) +declare void @finch_buf_bool(ptr, i32) +declare void @finch_buf_ptr(ptr, ptr) +declare void @finch_buf_char(ptr, i8, i32) +declare void @finch_buf_str(ptr, ptr, i32) +declare void @finch_buf_print(ptr) +declare void @finch_str_from_int(ptr, i64) +declare void @finch_str_from_uint(ptr, i64) +declare void @finch_str_from_float(ptr, double) +declare void @finch_str_from_char(ptr, i8 signext) +declare void @finch_str_from_bool(ptr, i32) +declare i64 @finch_str_to_int(ptr, ptr, i64) +declare double @finch_str_to_float(ptr, ptr, i64) +declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64) +declare i64 @finch_str_find(ptr, ptr) +declare i32 @finch_str_starts(ptr, ptr) +declare i32 @finch_str_ends(ptr, ptr) +declare void @finch_str_trim(ptr, ptr) +declare void @finch_str_upper(ptr, ptr) +declare void @finch_str_lower(ptr, ptr) +declare void @finch_str_replace(ptr, ptr, ptr, ptr) +declare void @finch_str_split(ptr, ptr, ptr) +declare void @finch_str_join(ptr, ptr, ptr) +declare void @finch_str_repeat(ptr, ptr, i64) +declare void @finch_bytes_from_str(ptr, ptr) +declare i64 @finch_map_find(ptr, ptr, i64, i64, i32) +declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr) +declare void @finch_map_remove_at(ptr, i64, i64) +declare void @finch_map_clear(ptr) +declare void @finch_map_clone_raw(ptr, ptr, i64) +declare void @finch_map_missing(ptr, i64, ptr) noreturn cold +declare void @finch_map_changed(ptr, i64) noreturn cold +declare void @finch_arr_reserve(ptr, i64, i64) +declare void @finch_arr_clone_raw(ptr, ptr, i64) +declare void @finch_arr_make(ptr, i64, i64) +declare void @finch_arr_resize(ptr, i64, i64) +declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64) +declare void @finch_arr_remove_gap(ptr, i64, i64) +declare void @qsort(ptr, i64, i64, ptr) +declare void @finch_args(ptr, i32, ptr) +declare void @finch_input(ptr, ptr) +declare i32 @finch_file_exists(ptr) +declare i32 @finch_str_try_int(ptr, ptr, ptr) +declare i32 @finch_str_try_float(ptr, ptr, ptr) +declare i32 @finch_try_read_file(ptr, ptr, ptr) +declare i32 @finch_try_write_file(ptr, ptr, ptr) +declare i32 @finch_try_delete_file(ptr, ptr) +declare void @finch_report_error(ptr) +declare void @finch_read_file(ptr, ptr, ptr, i64) +declare i32 @finch_write_file(ptr, ptr) +declare i64 @finch_shell(ptr) +declare i32 @finch_delete_file(ptr) +declare i32 @printf(ptr, ...) +declare i32 @fflush(ptr) +declare void @finch_str_from_c(ptr, ptr) +declare void @finch_on_fatal(ptr) +declare ptr @finch_std_stream(i32) +declare void @finch_str_from_bytes(ptr, ptr) +declare void @exit(i32) noreturn +declare void @free(ptr) + +define internal { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = sub i64 %t3, 1 + store i64 %t4, ptr %a5 + br label %while.cond1 +while.cond1: + %t6 = load i64, ptr %a5 + %t7 = icmp sge i64 %t6, 0 + br label %logic.from4 +logic.from4: + br i1 %t7, label %logic.rhs5, label %logic.end6 +logic.rhs5: + %t8 = load i64, ptr %a5 + %t9 = load { ptr, i64, i64 }, ptr %a1 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range7, label %inrange8 +range7: + call void @finch_panic_index(ptr @.str.1, i64 22, i64 %t8, i64 %t10) + unreachable +inrange8: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 + %t14 = load i8, ptr %t13 + %t15 = icmp ne i8 %t14, 47 + br label %logic.rend9 +logic.rend9: + br label %logic.end6 +logic.end6: + %t16 = phi i1 [ false, %logic.from4 ], [ %t15, %logic.rend9 ] + br i1 %t16, label %while.body2, label %while.end3 +while.body2: + %t17 = load i64, ptr %a5 + %t18 = sub i64 %t17, 1 + store i64 %t18, ptr %a5 + br label %while.cond1 +while.end3: + %t19 = load i64, ptr %a5 + %t20 = icmp slt i64 %t19, 0 + br i1 %t20, label %then10, label %endif12 +then10: + ret { ptr, i64, i64 } { ptr @.str.2, i64 1, i64 0 } +endif12: + %t21 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t21, ptr %a22 + %t24 = load i64, ptr %a5 + call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.3, i64 28) + %t25 = load { ptr, i64, i64 }, ptr %a23 + ret { ptr, i64, i64 } %t25 +} + +define internal { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca i64, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + %t5 = load { ptr, i64, i64 }, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t5) + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + store { ptr, i64, i64 } %t6, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = add i64 %t7, 1 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t11 = load i64, ptr %t10 + call void @finch_str_sub(ptr %a4, ptr %a3, i64 %t9, i64 %t11, ptr @.str.4, i64 32) + %t12 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load { ptr, i64, i64 }, ptr %a1 + %t15 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t14) + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.5, i64 1, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + br label %logic.from13 +logic.from13: + br i1 %t19, label %logic.rhs14, label %logic.end15 +logic.rhs14: + %t21 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.7, i64 2, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_starts(ptr %a22, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + %t27 = xor i1 %t26, true + br label %logic.rend16 +logic.rend16: + br label %logic.end15 +logic.end15: + %t28 = phi i1 [ false, %logic.from13 ], [ %t27, %logic.rend16 ] + br i1 %t28, label %then17, label %endif19 +then17: + %t29 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_copy(ptr %a31, ptr %a30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + %t33 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t32, ptr %a13 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_drop(ptr %a34) + br label %endif19 +endif19: + %t35 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.9, i64 1, i64 0 }, ptr %a38 + %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) + store i64 %t39, ptr %a40 + %t41 = load i64, ptr %a40 + %t42 = icmp sgt i64 %t41, 0 + br i1 %t42, label %then20, label %endif22 +then20: + %t43 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t43, ptr %a44 + %t46 = load i64, ptr %a40 + call void @finch_str_sub(ptr %a45, ptr %a44, i64 0, i64 %t46, ptr @.str.10, i64 38) + %t47 = load { ptr, i64, i64 }, ptr %a45 + call void @finch_str_drop(ptr %a13) + ret { ptr, i64, i64 } %t47 +endif22: + %t48 = load { ptr, i64, i64 }, ptr %a13 + ret { ptr, i64, i64 } %t48 +} + +define internal { ptr, i64, i64 } @finch.main.textOfFile(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i64, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic23, label %ok24 +panic23: + call void @finch_panic(ptr @.str.11, i64 55, ptr @.str.12) + unreachable +ok24: + %t5 = getelementptr inbounds %S.main.Loader, ptr %t3, i32 0, i32 6 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a8 + %t9 = load i64, ptr %t6 + %t10 = load ptr, ptr %t5 + store i64 0, ptr %a11 + br label %find.cond25 +find.cond25: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t9 + br i1 %t13, label %find.body26, label %find.end29 +find.body26: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } %t7, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %find.hit27, label %find.next28 +find.hit27: + store i64 %t12, ptr %a8 + br label %find.end29 +find.next28: + %t20 = add i64 %t12, 1 + store i64 %t20, ptr %a11 + br label %find.cond25 +find.end29: + %t21 = load i64, ptr %a8 + store i64 %t21, ptr %a22 + %t23 = load i64, ptr %a22 + %t24 = icmp sge i64 %t23, 0 + br i1 %t24, label %then30, label %endif32 +then30: + %t25 = load ptr, ptr %a1 + %t26 = icmp eq ptr %t25, null + br i1 %t26, label %panic33, label %ok34 +panic33: + call void @finch_panic(ptr @.str.13, i64 57, ptr @.str.14) + unreachable +ok34: + %t27 = getelementptr inbounds %S.main.Loader, ptr %t25, i32 0, i32 7 + %t28 = load i64, ptr %a22 + %t29 = load { ptr, i64, i64 }, ptr %t27 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range35, label %inrange36 +range35: + call void @finch_panic_index(ptr @.str.15, i64 57, i64 %t28, i64 %t30) + unreachable +inrange36: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 %t28 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_read_file(ptr %a36, ptr %a35, ptr @.str.16, i64 57) + %t37 = load { ptr, i64, i64 }, ptr %a36 + ret { ptr, i64, i64 } %t37 +endif32: + %t38 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_read_file(ptr %a40, ptr %a39, ptr @.str.17, i64 59) + %t41 = load { ptr, i64, i64 }, ptr %a40 + ret { ptr, i64, i64 } %t41 +} + +define internal { ptr, i64, i64 } @finch.main.findModule(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca i64, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t4) + store { ptr, i64, i64 } %t5, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.18, i64 1, i64 0 }, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t5, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + %t11 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t10, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t10, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.19, i64 4, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t21, ptr %a22 + %t23 = load { ptr, i64, i64 }, ptr %a2 + %t24 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t23) + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.20, i64 1, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t29, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.21, i64 1, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic37, label %ok38 +panic37: + call void @finch_panic(ptr @.str.22, i64 67, ptr @.str.23) + unreachable +ok38: + %t43 = getelementptr inbounds %S.main.Loader, ptr %t41, i32 0, i32 3 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t40, ptr %a46 + store { ptr, i64, i64 } %t44, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + store { ptr, i64, i64 } %t40, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.24, i64 4, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t54, ptr %a55 + %t56 = call i32 @finch_file_exists(ptr %a55) + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = icmp ne i32 %t56, 0 + br i1 %t58, label %then39, label %endif41 +then39: + %t59 = load { ptr, i64, i64 }, ptr %a2 + %t60 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t59) + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.25, i64 1, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t65, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t65, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.26, i64 1, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + %t77 = load ptr, ptr %a1 + %t78 = icmp eq ptr %t77, null + br i1 %t78, label %panic42, label %ok43 +panic42: + call void @finch_panic(ptr @.str.27, i64 68, ptr @.str.28) + unreachable +ok43: + %t79 = getelementptr inbounds %S.main.Loader, ptr %t77, i32 0, i32 3 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t76, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t76, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.29, i64 4, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t90 +endif41: + %t91 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i32 @finch_file_exists(ptr %a92) + %t94 = icmp ne i32 %t93, 0 + br i1 %t94, label %then44, label %endif46 +then44: + %t95 = load { ptr, i64, i64 }, ptr %a22 + ret { ptr, i64, i64 } %t95 +endif46: + %t96 = load ptr, ptr %a1 + %t97 = icmp eq ptr %t96, null + br i1 %t97, label %panic47, label %ok48 +panic47: + call void @finch_panic(ptr @.str.30, i64 73, ptr @.str.31) + unreachable +ok48: + %t98 = getelementptr inbounds %S.main.Loader, ptr %t96, i32 0, i32 5 + store i64 0, ptr %a99 + br label %each.cond49 +each.cond49: + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 + %t101 = load i64, ptr %t100 + %t102 = load i64, ptr %a99 + %t103 = icmp slt i64 %t102, %t101 + br i1 %t103, label %each.body50, label %each.end52 +each.body50: + %t104 = load ptr, ptr %t98 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 %t102 + %t106 = load { ptr, i64, i64 }, ptr %t105 + store { ptr, i64, i64 } %t106, ptr %a107 + %t108 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t108, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.32, i64 1, i64 0 }, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a109 + %t113 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t112, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t112, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a114 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.33, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = load ptr, ptr %a1 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic53, label %ok54 +panic53: + call void @finch_panic(ptr @.str.34, i64 74, ptr @.str.35) + unreachable +ok54: + %t126 = getelementptr inbounds %S.main.Loader, ptr %t124, i32 0, i32 3 + %t127 = load { ptr, i64, i64 }, ptr %t126 + store { ptr, i64, i64 } %t123, ptr %a129 + store { ptr, i64, i64 } %t127, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t123, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t132, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.36, i64 4, i64 0 }, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a138 + %t139 = call i32 @finch_file_exists(ptr %a138) + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = icmp ne i32 %t139, 0 + br i1 %t141, label %then55, label %endif57 +then55: + %t142 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t142, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.37, i64 1, i64 0 }, ptr %a145 + call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a143 + %t147 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t146, ptr %a149 + store { ptr, i64, i64 } %t147, ptr %a150 + call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) + store { ptr, i64, i64 } %t146, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a148 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.38, i64 1, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic58, label %ok59 +panic58: + call void @finch_panic(ptr @.str.39, i64 75, ptr @.str.40) + unreachable +ok59: + %t160 = getelementptr inbounds %S.main.Loader, ptr %t158, i32 0, i32 3 + %t161 = load { ptr, i64, i64 }, ptr %t160 + store { ptr, i64, i64 } %t157, ptr %a163 + store { ptr, i64, i64 } %t161, ptr %a164 + call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) + store { ptr, i64, i64 } %t157, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t166, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.41, i64 4, i64 0 }, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t166, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t171 +endif57: + %t172 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t172, ptr %a174 + store { ptr, i64, i64 } { ptr @.str.42, i64 1, i64 0 }, ptr %a175 + call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a173 + %t177 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t176, ptr %a179 + store { ptr, i64, i64 } %t177, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + store { ptr, i64, i64 } %t176, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.43, i64 4, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + store { ptr, i64, i64 } %t187, ptr %a188 + %t189 = call i32 @finch_file_exists(ptr %a188) + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = icmp ne i32 %t189, 0 + br i1 %t191, label %then60, label %endif62 +then60: + %t192 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.44, i64 1, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + %t196 = load { ptr, i64, i64 }, ptr %a193 + %t197 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t196, ptr %a199 + store { ptr, i64, i64 } %t197, ptr %a200 + call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) + store { ptr, i64, i64 } %t196, ptr %a201 + call void @finch_str_drop(ptr %a201) + %t202 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t202, ptr %a204 + store { ptr, i64, i64 } { ptr @.str.45, i64 4, i64 0 }, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t207 +endif62: + br label %each.step51 +each.step51: + %t208 = load i64, ptr %a99 + %t209 = add i64 %t208, 1 + store i64 %t209, ptr %a99 + br label %each.cond49 +each.end52: + %t210 = load ptr, ptr %a1 + %t211 = icmp eq ptr %t210, null + br i1 %t211, label %panic63, label %ok64 +panic63: + call void @finch_panic(ptr @.str.46, i64 81, ptr @.str.47) + unreachable +ok64: + %t212 = getelementptr inbounds %S.main.Loader, ptr %t210, i32 0, i32 4 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 + %t214 = load i64, ptr %t213 + %t215 = icmp sgt i64 %t214, 0 + br i1 %t215, label %then65, label %endif67 +then65: + %t216 = load ptr, ptr %a1 + %t217 = icmp eq ptr %t216, null + br i1 %t217, label %panic68, label %ok69 +panic68: + call void @finch_panic(ptr @.str.48, i64 82, ptr @.str.49) + unreachable +ok69: + %t218 = getelementptr inbounds %S.main.Loader, ptr %t216, i32 0, i32 4 + %t219 = load { ptr, i64, i64 }, ptr %t218 + store { ptr, i64, i64 } %t219, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.50, i64 1, i64 0 }, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a220 + %t224 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t223, ptr %a226 + store { ptr, i64, i64 } %t224, ptr %a227 + call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) + store { ptr, i64, i64 } %t223, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = load { ptr, i64, i64 }, ptr %a225 + store { ptr, i64, i64 } %t229, ptr %a231 + store { ptr, i64, i64 } { ptr @.str.51, i64 1, i64 0 }, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + store { ptr, i64, i64 } %t229, ptr %a233 + call void @finch_str_drop(ptr %a233) + %t234 = load { ptr, i64, i64 }, ptr %a230 + %t235 = load ptr, ptr %a1 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic70, label %ok71 +panic70: + call void @finch_panic(ptr @.str.52, i64 82, ptr @.str.53) + unreachable +ok71: + %t237 = getelementptr inbounds %S.main.Loader, ptr %t235, i32 0, i32 3 + %t238 = load { ptr, i64, i64 }, ptr %t237 + store { ptr, i64, i64 } %t234, ptr %a240 + store { ptr, i64, i64 } %t238, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t234, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + store { ptr, i64, i64 } %t243, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.54, i64 4, i64 0 }, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t243, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + store { ptr, i64, i64 } %t248, ptr %a249 + %t250 = call i32 @finch_file_exists(ptr %a249) + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_drop(ptr %a251) + %t252 = icmp ne i32 %t250, 0 + br i1 %t252, label %then72, label %endif74 +then72: + %t253 = load ptr, ptr %a1 + %t254 = icmp eq ptr %t253, null + br i1 %t254, label %panic75, label %ok76 +panic75: + call void @finch_panic(ptr @.str.55, i64 83, ptr @.str.56) + unreachable +ok76: + %t255 = getelementptr inbounds %S.main.Loader, ptr %t253, i32 0, i32 4 + %t256 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t256, ptr %a258 + store { ptr, i64, i64 } { ptr @.str.57, i64 1, i64 0 }, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + %t260 = load { ptr, i64, i64 }, ptr %a257 + %t261 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t260, ptr %a263 + store { ptr, i64, i64 } %t261, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t260, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + store { ptr, i64, i64 } %t266, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.58, i64 1, i64 0 }, ptr %a269 + call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) + store { ptr, i64, i64 } %t266, ptr %a270 + call void @finch_str_drop(ptr %a270) + %t271 = load { ptr, i64, i64 }, ptr %a267 + %t272 = load ptr, ptr %a1 + %t273 = icmp eq ptr %t272, null + br i1 %t273, label %panic77, label %ok78 +panic77: + call void @finch_panic(ptr @.str.59, i64 83, ptr @.str.60) + unreachable +ok78: + %t274 = getelementptr inbounds %S.main.Loader, ptr %t272, i32 0, i32 3 + %t275 = load { ptr, i64, i64 }, ptr %t274 + store { ptr, i64, i64 } %t271, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + store { ptr, i64, i64 } %t271, ptr %a279 + call void @finch_str_drop(ptr %a279) + %t280 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.61, i64 4, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t280, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t285 +endif74: + %t286 = load ptr, ptr %a1 + %t287 = icmp eq ptr %t286, null + br i1 %t287, label %panic79, label %ok80 +panic79: + call void @finch_panic(ptr @.str.62, i64 85, ptr @.str.63) + unreachable +ok80: + %t288 = getelementptr inbounds %S.main.Loader, ptr %t286, i32 0, i32 4 + %t289 = load { ptr, i64, i64 }, ptr %t288 + store { ptr, i64, i64 } %t289, ptr %a291 + store { ptr, i64, i64 } { ptr @.str.64, i64 1, i64 0 }, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + %t293 = load { ptr, i64, i64 }, ptr %a290 + %t294 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t293, ptr %a296 + store { ptr, i64, i64 } %t294, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + store { ptr, i64, i64 } %t293, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a295 + store { ptr, i64, i64 } %t299, ptr %a301 + store { ptr, i64, i64 } { ptr @.str.65, i64 4, i64 0 }, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t299, ptr %a303 + call void @finch_str_drop(ptr %a303) + %t304 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } %t304, ptr %a305 + %t306 = call i32 @finch_file_exists(ptr %a305) + store { ptr, i64, i64 } %t304, ptr %a307 + call void @finch_str_drop(ptr %a307) + %t308 = icmp ne i32 %t306, 0 + br i1 %t308, label %then81, label %endif83 +then81: + %t309 = load ptr, ptr %a1 + %t310 = icmp eq ptr %t309, null + br i1 %t310, label %panic84, label %ok85 +panic84: + call void @finch_panic(ptr @.str.66, i64 86, ptr @.str.67) + unreachable +ok85: + %t311 = getelementptr inbounds %S.main.Loader, ptr %t309, i32 0, i32 4 + %t312 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t312, ptr %a314 + store { ptr, i64, i64 } { ptr @.str.68, i64 1, i64 0 }, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + %t316 = load { ptr, i64, i64 }, ptr %a313 + %t317 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t316, ptr %a319 + store { ptr, i64, i64 } %t317, ptr %a320 + call void @finch_str_concat(ptr %a318, ptr %a319, ptr %a320) + store { ptr, i64, i64 } %t316, ptr %a321 + call void @finch_str_drop(ptr %a321) + %t322 = load { ptr, i64, i64 }, ptr %a318 + store { ptr, i64, i64 } %t322, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.69, i64 4, i64 0 }, ptr %a325 + call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) + store { ptr, i64, i64 } %t322, ptr %a326 + call void @finch_str_drop(ptr %a326) + %t327 = load { ptr, i64, i64 }, ptr %a323 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t327 +endif83: + br label %endif67 +endif67: + %t328 = load { ptr, i64, i64 }, ptr %a22 + ret { ptr, i64, i64 } %t328 +} + +define internal void @finch.drop.S_lexer_Token(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lexer.Token, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lexer.Token, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal void @finch.drop.arr_S_lexer_Token(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond107 +n.cond107: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body108, label %n.end109 +n.body108: + %t7 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t5 + call void @finch.drop.S_lexer_Token(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond107 +n.end109: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.copy.arr_str(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond110 +n.cond110: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body111, label %n.end112 +n.body111: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 %t6 + call void @finch_str_copy(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond110 +n.end112: + ret void +} + +define internal void @finch.copy.arr_S_ast_Type(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond118 +n.cond118: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body119, label %n.end120 +n.body119: + %t8 = getelementptr inbounds %S.ast.Type, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.ast.Type, ptr %t2, i64 %t6 + call void @finch.copy.S_ast_Type(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond118 +n.end120: + ret void +} + +define internal void @finch.copy.S_ast_Type(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.ast.Type, ptr %src + store %S.ast.Type %t1, ptr %dst + %t2 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_ast_Type(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.S_ast_Node(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.ast.Node, ptr %src + store %S.ast.Node %t1, ptr %dst + %t2 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 5 + call void @finch.copy.S_ast_Type(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 9 + %t15 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 9 + call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 10 + %t17 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 10 + call void @finch.copy.arr_str(ptr %t16, ptr %t17) + ret void +} + +define internal void @finch.copy.arr_S_ast_Node(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond115 +n.cond115: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body116, label %n.end117 +n.body116: + %t8 = getelementptr inbounds %S.ast.Node, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.ast.Node, ptr %t2, i64 %t6 + call void @finch.copy.S_ast_Node(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond115 +n.end117: + ret void +} + +define internal void @finch.copy.S_ast_Program(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.ast.Program, ptr %src + store %S.ast.Program %t1, ptr %dst + %t2 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 6 + %t15 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 7 + %t17 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 7 + call void @finch.copy.arr_S_ast_Node(ptr %t16, ptr %t17) + %t18 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 8 + %t19 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 8 + call void @finch.copy.arr_S_ast_Node(ptr %t18, ptr %t19) + ret void +} + +define internal void @finch.drop.arr_str(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond137 +n.cond137: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body138, label %n.end139 +n.body138: + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1, i64 %t5 + call void @finch_str_drop(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond137 +n.end139: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_ast_Type(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond143 +n.cond143: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body144, label %n.end145 +n.body144: + %t7 = getelementptr inbounds %S.ast.Type, ptr %t1, i64 %t5 + call void @finch.drop.S_ast_Type(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond143 +n.end145: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_ast_Type(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_ast_Type(ptr %t2) + %t3 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.drop.S_ast_Node(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 5 + call void @finch.drop.S_ast_Type(ptr %t6) + %t7 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 9 + call void @finch.drop.arr_S_ast_Node(ptr %t7) + %t8 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 10 + call void @finch.drop.arr_str(ptr %t8) + ret void +} + +define internal void @finch.drop.arr_S_ast_Node(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond140 +n.cond140: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body141, label %n.end142 +n.body141: + %t7 = getelementptr inbounds %S.ast.Node, ptr %t1, i64 %t5 + call void @finch.drop.S_ast_Node(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond140 +n.end142: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_ast_Program(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_str(ptr %t5) + %t6 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_S_ast_Node(ptr %t7) + %t8 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_S_ast_Node(ptr %t8) + %t9 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 8 + call void @finch.drop.arr_S_ast_Node(ptr %t9) + ret void +} + +define internal void @finch.main.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca i64, align 16 + %a17 = alloca i64, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca i64, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca %S.ast.Program, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca %S.ast.Program, align 16 + %a139 = alloca %S.ast.Program, align 16 + %a145 = alloca i64, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca i64, align 16 + %a162 = alloca i64, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = call i32 @finch_file_exists(ptr %a5) + %t7 = icmp ne i32 %t6, 0 + %t8 = xor i1 %t7, true + br label %logic.from86 +logic.from86: + br i1 %t8, label %logic.rhs87, label %logic.end88 +logic.rhs87: + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic89, label %ok90 +panic89: + call void @finch_panic(ptr @.str.70, i64 93, ptr @.str.71) + unreachable +ok90: + %t11 = getelementptr inbounds %S.main.Loader, ptr %t9, i32 0, i32 6 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a14 + %t15 = load i64, ptr %t12 + %t16 = load ptr, ptr %t11 + store i64 0, ptr %a17 + br label %find.cond91 +find.cond91: + %t18 = load i64, ptr %a17 + %t19 = icmp slt i64 %t18, %t15 + br i1 %t19, label %find.body92, label %find.end95 +find.body92: + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 %t18 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } %t13, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br i1 %t25, label %find.hit93, label %find.next94 +find.hit93: + store i64 %t18, ptr %a14 + br label %find.end95 +find.next94: + %t26 = add i64 %t18, 1 + store i64 %t26, ptr %a17 + br label %find.cond91 +find.end95: + %t27 = load i64, ptr %a14 + %t28 = icmp sge i64 %t27, 0 + %t29 = xor i1 %t28, true + br label %logic.rend96 +logic.rend96: + br label %logic.end88 +logic.end88: + %t30 = phi i1 [ false, %logic.from86 ], [ %t29, %logic.rend96 ] + br i1 %t30, label %then97, label %endif99 +then97: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = icmp sgt i64 %t32, 0 + br i1 %t33, label %then100, label %else101 +then100: + %t34 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.72, i64 30, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.73, i64 14, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + %t44 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t43, ptr %a46 + store { ptr, i64, i64 } %t44, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + store { ptr, i64, i64 } %t43, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.74, i64 1, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + %t55 = extractvalue { ptr, i64, i64 } %t54, 1 + %t56 = trunc i64 %t55 to i32 + %t57 = extractvalue { ptr, i64, i64 } %t54, 0 + %t58 = icmp eq ptr %t57, null + %t59 = select i1 %t58, ptr @.str.75, ptr %t57 + %t60 = call i32 (ptr, ...) @printf(ptr @.str.76, i32 %t56, ptr %t59) + store { ptr, i64, i64 } %t54, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = call i32 (ptr, ...) @printf(ptr @.str.77) + br label %endif102 +else101: + %t63 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.78, i64 19, i64 0 }, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t67, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.79, i64 1, i64 0 }, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + %t73 = extractvalue { ptr, i64, i64 } %t72, 1 + %t74 = trunc i64 %t73 to i32 + %t75 = extractvalue { ptr, i64, i64 } %t72, 0 + %t76 = icmp eq ptr %t75, null + %t77 = select i1 %t76, ptr @.str.80, ptr %t75 + %t78 = call i32 (ptr, ...) @printf(ptr @.str.81, i32 %t74, ptr %t77) + store { ptr, i64, i64 } %t72, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = call i32 (ptr, ...) @printf(ptr @.str.82) + br label %endif102 +endif102: + %t81 = trunc i64 1 to i32 + %t82 = call i32 @fflush(ptr null) + call void @exit(i32 %t81) + br label %endif99 +endif99: + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a2 + %t85 = call { ptr, i64, i64 } @finch.main.textOfFile(ptr %t83, { ptr, i64, i64 } %t84) + store { ptr, i64, i64 } %t85, ptr %a86 + %t87 = load ptr, ptr %a1 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic103, label %ok104 +panic103: + call void @finch_panic(ptr @.str.83, i64 102, ptr @.str.84) + unreachable +ok104: + %t89 = getelementptr inbounds %S.main.Loader, ptr %t87, i32 0, i32 1 + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 + %t91 = load i64, ptr %t90 + store i64 %t91, ptr %a92 + %t93 = load ptr, ptr %a1 + %t94 = icmp eq ptr %t93, null + br i1 %t94, label %panic105, label %ok106 +panic105: + call void @finch_panic(ptr @.str.85, i64 103, ptr @.str.86) + unreachable +ok106: + %t95 = getelementptr inbounds %S.main.Loader, ptr %t93, i32 0, i32 1 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 + %t97 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t97, ptr %a98 + call void @finch_str_copy(ptr %a99, ptr %a98) + %t100 = load { ptr, i64, i64 }, ptr %a99 + %t101 = load i64, ptr %t96 + %t102 = add i64 %t101, 1 + call void @finch_arr_reserve(ptr %t95, i64 %t102, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t103 = load ptr, ptr %t95 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 %t101 + store { ptr, i64, i64 } %t100, ptr %t104 + store i64 %t102, ptr %t96 + %t105 = load { ptr, i64, i64 }, ptr %a86 + %t106 = load { ptr, i64, i64 }, ptr %a2 + %t107 = call { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %t105, { ptr, i64, i64 } %t106) + %t108 = load i64, ptr %a92 + %t109 = load { ptr, i64, i64 }, ptr %a2 + %t110 = call %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %t107, i64 %t108, { ptr, i64, i64 } %t109) + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch.drop.arr_S_lexer_Token(ptr %a111) + store %S.ast.Program %t110, ptr %a112 + %t113 = load { ptr, i64, i64 }, ptr %a3 + %t114 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 0 + store { ptr, i64, i64 } %t113, ptr %a115 + call void @finch_str_copy(ptr %a116, ptr %a115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + %t118 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } %t117, ptr %t114 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a2 + %t121 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 1 + store { ptr, i64, i64 } %t120, ptr %a122 + call void @finch_str_copy(ptr %a123, ptr %a122) + %t124 = load { ptr, i64, i64 }, ptr %a123 + %t125 = load { ptr, i64, i64 }, ptr %t121 + store { ptr, i64, i64 } %t124, ptr %t121 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a129 + call void @finch.copy.arr_str(ptr %a130, ptr %a129) + %t131 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t131, ptr %a132 + %t133 = load ptr, ptr %a1 + %t134 = icmp eq ptr %t133, null + br i1 %t134, label %panic113, label %ok114 +panic113: + call void @finch_panic(ptr @.str.87, i64 108, ptr @.str.88) + unreachable +ok114: + %t135 = getelementptr inbounds %S.main.Loader, ptr %t133, i32 0, i32 0 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 + %t137 = load %S.ast.Program, ptr %a112 + store %S.ast.Program %t137, ptr %a138 + call void @finch.copy.S_ast_Program(ptr %a139, ptr %a138) + %t140 = load %S.ast.Program, ptr %a139 + %t141 = load i64, ptr %t136 + %t142 = add i64 %t141, 1 + call void @finch_arr_reserve(ptr %t135, i64 %t142, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) + %t143 = load ptr, ptr %t135 + %t144 = getelementptr inbounds %S.ast.Program, ptr %t143, i64 %t141 + store %S.ast.Program %t140, ptr %t144 + store i64 %t142, ptr %t136 + store i64 0, ptr %a145 + br label %each.cond121 +each.cond121: + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + %t147 = load i64, ptr %t146 + %t148 = load i64, ptr %a145 + %t149 = icmp slt i64 %t148, %t147 + br i1 %t149, label %each.body122, label %each.end124 +each.body122: + %t150 = load ptr, ptr %a132 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t148 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t152, ptr %a153 + %t154 = load ptr, ptr %a1 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic125, label %ok126 +panic125: + call void @finch_panic(ptr @.str.89, i64 110, ptr @.str.90) + unreachable +ok126: + %t156 = getelementptr inbounds %S.main.Loader, ptr %t154, i32 0, i32 2 + %t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i32 0, i32 1 + %t158 = load { ptr, i64, i64 }, ptr %a153 + store i64 -1, ptr %a159 + %t160 = load i64, ptr %t157 + %t161 = load ptr, ptr %t156 + store i64 0, ptr %a162 + br label %find.cond127 +find.cond127: + %t163 = load i64, ptr %a162 + %t164 = icmp slt i64 %t163, %t160 + br i1 %t164, label %find.body128, label %find.end131 +find.body128: + %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i64 %t163 + %t166 = load { ptr, i64, i64 }, ptr %t165 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } %t158, ptr %a168 + %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) + %t170 = icmp ne i32 %t169, 0 + br i1 %t170, label %find.hit129, label %find.next130 +find.hit129: + store i64 %t163, ptr %a159 + br label %find.end131 +find.next130: + %t171 = add i64 %t163, 1 + store i64 %t171, ptr %a162 + br label %find.cond127 +find.end131: + %t172 = load i64, ptr %a159 + %t173 = icmp sge i64 %t172, 0 + %t174 = xor i1 %t173, true + br i1 %t174, label %then132, label %endif134 +then132: + %t175 = load ptr, ptr %a1 + %t176 = icmp eq ptr %t175, null + br i1 %t176, label %panic135, label %ok136 +panic135: + call void @finch_panic(ptr @.str.91, i64 111, ptr @.str.92) + unreachable +ok136: + %t177 = getelementptr inbounds %S.main.Loader, ptr %t175, i32 0, i32 2 + %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 + %t179 = load { ptr, i64, i64 }, ptr %a153 + store { ptr, i64, i64 } %t179, ptr %a180 + call void @finch_str_copy(ptr %a181, ptr %a180) + %t182 = load { ptr, i64, i64 }, ptr %a181 + %t183 = load i64, ptr %t178 + %t184 = add i64 %t183, 1 + call void @finch_arr_reserve(ptr %t177, i64 %t184, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t185 = load ptr, ptr %t177 + %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i64 %t183 + store { ptr, i64, i64 } %t182, ptr %t186 + store i64 %t184, ptr %t178 + %t187 = load ptr, ptr %a1 + %t188 = load ptr, ptr %a1 + %t189 = load { ptr, i64, i64 }, ptr %a2 + %t190 = load { ptr, i64, i64 }, ptr %a153 + %t191 = call { ptr, i64, i64 } @finch.main.findModule(ptr %t188, { ptr, i64, i64 } %t189, { ptr, i64, i64 } %t190) + %t192 = load { ptr, i64, i64 }, ptr %a153 + call void @finch.main.load(ptr %t187, { ptr, i64, i64 } %t191, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t191, ptr %a193 + call void @finch_str_drop(ptr %a193) + br label %endif134 +endif134: + br label %each.step123 +each.step123: + %t194 = load i64, ptr %a145 + %t195 = add i64 %t194, 1 + store i64 %t195, ptr %a145 + br label %each.cond121 +each.end124: + call void @finch.drop.arr_str(ptr %a132) + call void @finch.drop.S_ast_Program(ptr %a112) + call void @finch_str_drop(ptr %a86) + ret void +} + +define internal void @finch.main.usage() { +entry: + + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 1 + %t2 = trunc i64 %t1 to i32 + %t3 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 0 + %t4 = icmp eq ptr %t3, null + %t5 = select i1 %t4, ptr @.str.94, ptr %t3 + %t6 = call i32 (ptr, ...) @printf(ptr @.str.95, i32 %t2, ptr %t5) + %t7 = call i32 (ptr, ...) @printf(ptr @.str.96) + %t8 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 1 + %t9 = trunc i64 %t8 to i32 + %t10 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 0 + %t11 = icmp eq ptr %t10, null + %t12 = select i1 %t11, ptr @.str.98, ptr %t10 + %t13 = call i32 (ptr, ...) @printf(ptr @.str.99, i32 %t9, ptr %t12) + %t14 = call i32 (ptr, ...) @printf(ptr @.str.100) + %t15 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 1 + %t16 = trunc i64 %t15 to i32 + %t17 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 0 + %t18 = icmp eq ptr %t17, null + %t19 = select i1 %t18, ptr @.str.102, ptr %t17 + %t20 = call i32 (ptr, ...) @printf(ptr @.str.103, i32 %t16, ptr %t19) + %t21 = call i32 (ptr, ...) @printf(ptr @.str.104) + %t22 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 1 + %t23 = trunc i64 %t22 to i32 + %t24 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 0 + %t25 = icmp eq ptr %t24, null + %t26 = select i1 %t25, ptr @.str.106, ptr %t24 + %t27 = call i32 (ptr, ...) @printf(ptr @.str.107, i32 %t23, ptr %t26) + %t28 = call i32 (ptr, ...) @printf(ptr @.str.108) + %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 1 + %t30 = trunc i64 %t29 to i32 + %t31 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 0 + %t32 = icmp eq ptr %t31, null + %t33 = select i1 %t32, ptr @.str.110, ptr %t31 + %t34 = call i32 (ptr, ...) @printf(ptr @.str.111, i32 %t30, ptr %t33) + %t35 = call i32 (ptr, ...) @printf(ptr @.str.112) + %t36 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 1 + %t37 = trunc i64 %t36 to i32 + %t38 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 0 + %t39 = icmp eq ptr %t38, null + %t40 = select i1 %t39, ptr @.str.114, ptr %t38 + %t41 = call i32 (ptr, ...) @printf(ptr @.str.115, i32 %t37, ptr %t40) + %t42 = call i32 (ptr, ...) @printf(ptr @.str.116) + %t43 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 1 + %t44 = trunc i64 %t43 to i32 + %t45 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 0 + %t46 = icmp eq ptr %t45, null + %t47 = select i1 %t46, ptr @.str.118, ptr %t45 + %t48 = call i32 (ptr, ...) @printf(ptr @.str.119, i32 %t44, ptr %t47) + %t49 = call i32 (ptr, ...) @printf(ptr @.str.120) + %t50 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 1 + %t51 = trunc i64 %t50 to i32 + %t52 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 0 + %t53 = icmp eq ptr %t52, null + %t54 = select i1 %t53, ptr @.str.122, ptr %t52 + %t55 = call i32 (ptr, ...) @printf(ptr @.str.123, i32 %t51, ptr %t54) + %t56 = call i32 (ptr, ...) @printf(ptr @.str.124) + %t57 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 1 + %t58 = trunc i64 %t57 to i32 + %t59 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 0 + %t60 = icmp eq ptr %t59, null + %t61 = select i1 %t60, ptr @.str.126, ptr %t59 + %t62 = call i32 (ptr, ...) @printf(ptr @.str.127, i32 %t58, ptr %t61) + %t63 = call i32 (ptr, ...) @printf(ptr @.str.128) + %t64 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 1 + %t65 = trunc i64 %t64 to i32 + %t66 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 0 + %t67 = icmp eq ptr %t66, null + %t68 = select i1 %t67, ptr @.str.130, ptr %t66 + %t69 = call i32 (ptr, ...) @printf(ptr @.str.131, i32 %t65, ptr %t68) + %t70 = call i32 (ptr, ...) @printf(ptr @.str.132) + %t71 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 1 + %t72 = trunc i64 %t71 to i32 + %t73 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 0 + %t74 = icmp eq ptr %t73, null + %t75 = select i1 %t74, ptr @.str.134, ptr %t73 + %t76 = call i32 (ptr, ...) @printf(ptr @.str.135, i32 %t72, ptr %t75) + %t77 = call i32 (ptr, ...) @printf(ptr @.str.136) + %t78 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 1 + %t79 = trunc i64 %t78 to i32 + %t80 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 0 + %t81 = icmp eq ptr %t80, null + %t82 = select i1 %t81, ptr @.str.138, ptr %t80 + %t83 = call i32 (ptr, ...) @printf(ptr @.str.139, i32 %t79, ptr %t82) + %t84 = call i32 (ptr, ...) @printf(ptr @.str.140) + %t85 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 1 + %t86 = trunc i64 %t85 to i32 + %t87 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 0 + %t88 = icmp eq ptr %t87, null + %t89 = select i1 %t88, ptr @.str.142, ptr %t87 + %t90 = call i32 (ptr, ...) @printf(ptr @.str.143, i32 %t86, ptr %t89) + %t91 = call i32 (ptr, ...) @printf(ptr @.str.144) + %t92 = trunc i64 1 to i32 + %t93 = call i32 @fflush(ptr null) + call void @exit(i32 %t92) + ret void +} + +define internal { ptr, i64, i64 } @finch.main.unpack() { +entry: + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca i64, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %t1 = call { ptr, i64, i64 } @finch.embedded.names() + store { ptr, i64, i64 } %t1, ptr %a2 + %t3 = call { ptr, i64, i64 } @finch.host.cacheDir() + store { ptr, i64, i64 } %t3, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.145, i64 7, i64 0 }, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + %t9 = call { ptr, i64, i64 } @finch.embedded.texts() + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.146, i64 1, i64 0 }, ptr %a12 + call void @finch_str_join(ptr %a13, ptr %a10, ptr %a12) + %t14 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.drop.arr_str(ptr %a10) + %t15 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t14) + store { ptr, i64, i64 } %t14, ptr %a16 + call void @finch_str_drop(ptr %a16) + store { ptr, i64, i64 } %t8, ptr %a18 + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t8, ptr %a20 + call void @finch_str_drop(ptr %a20) + store { ptr, i64, i64 } %t15, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.147, i64 5, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t28, ptr %a29 + %t30 = call i32 @finch_file_exists(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = icmp ne i32 %t30, 0 + br i1 %t32, label %then146, label %endif148 +then146: + %t33 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t33 +endif148: + %t34 = call { ptr, i64, i64 } @finch.embedded.texts() + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t37 = load i64, ptr %t36 + store i64 0, ptr %a38 + br label %for.cond149 +for.cond149: + %t39 = load i64, ptr %a38 + %t40 = icmp slt i64 %t39, %t37 + br i1 %t40, label %for.body150, label %for.end152 +for.body150: + %t41 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.148, i64 1, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a42 + %t46 = load i64, ptr %a38 + %t47 = load { ptr, i64, i64 }, ptr %a2 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = icmp uge i64 %t46, %t48 + br i1 %t49, label %range153, label %inrange154 +range153: + call void @finch_panic_index(ptr @.str.149, i64 144, i64 %t46, i64 %t48) + unreachable +inrange154: + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t46 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t45, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t45, ptr %a56 + call void @finch_str_drop(ptr %a56) + %t57 = load { ptr, i64, i64 }, ptr %a53 + %t58 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t57) + store { ptr, i64, i64 } %t57, ptr %a59 + call void @finch_str_drop(ptr %a59) + call void @finch.host.makeDirs({ ptr, i64, i64 } %t58) + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.150, i64 1, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a62 + %t66 = load i64, ptr %a38 + %t67 = load { ptr, i64, i64 }, ptr %a2 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 %t66, %t68 + br i1 %t69, label %range155, label %inrange156 +range155: + call void @finch_panic_index(ptr @.str.151, i64 145, i64 %t66, i64 %t68) + unreachable +inrange156: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 %t66 + %t72 = load { ptr, i64, i64 }, ptr %t71 + store { ptr, i64, i64 } %t65, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t65, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = load i64, ptr %a38 + %t79 = load { ptr, i64, i64 }, ptr %a35 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range157, label %inrange158 +range157: + call void @finch_panic_index(ptr @.str.152, i64 145, i64 %t78, i64 %t80) + unreachable +inrange158: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i64 %t78 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } %t77, ptr %a85 + store { ptr, i64, i64 } %t84, ptr %a86 + %t87 = call i32 @finch_write_file(ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t77, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = icmp ne i32 %t87, 0 + br label %for.step151 +for.step151: + %t90 = load i64, ptr %a38 + %t91 = add i64 %t90, 1 + store i64 %t91, ptr %a38 + br label %for.cond149 +for.end152: + %t92 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.153, i64 5, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.154, i64 0, i64 0 }, ptr %a98 + %t99 = call i32 @finch_write_file(ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t96, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = icmp ne i32 %t99, 0 + %t102 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.arr_str(ptr %a35) + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t102 +} + +define internal void @finch.drop.S_cimport_Header(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Header, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.Header, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal void @finch.drop.arr_S_cimport_Header(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond403 +n.cond403: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body404, label %n.end405 +n.body404: + %t7 = getelementptr inbounds %S.cimport.Header, ptr %t1, i64 %t5 + call void @finch.drop.S_cimport_Header(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond403 +n.end405: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_ast_Program(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond406 +n.cond406: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body407, label %n.end408 +n.body407: + %t7 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t5 + call void @finch.drop.S_ast_Program(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond406 +n.end408: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_main_Loader(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_ast_Program(ptr %t1) + %t2 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + %t3 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t7) + %t8 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_str(ptr %t8) + ret void +} + +define internal void @finch.drop.S_platform_Target(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 6 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 8 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.copy.S_platform_Target(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.platform.Target, ptr %src + store %S.platform.Target %t1, ptr %dst + %t2 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 6 + %t5 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 6 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 7 + %t7 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 8 + %t9 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 8 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.drop.S_gen_Options(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Options, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Options, ptr %a, i32 0, i32 4 + call void @finch.drop.S_platform_Target(ptr %t2) + ret void +} + +define internal void @finch.drop.S_cimport_CFunc(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 2 + call void @finch.drop.S_ast_Type(ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_S_ast_Type(ptr %t4) + %t5 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 5 + call void @finch_str_drop(ptr %t5) + ret void +} + +define internal void @finch.drop.map_str_S_cimport_CFunc(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond416 +n.cond416: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body417, label %n.end418 +n.body417: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live419, label %entry.next420 +entry.live419: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_cimport_CFunc(ptr %t13) + br label %entry.next420 +entry.next420: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond416 +n.end418: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CConst(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CConst, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t1) + ret void +} + +define internal void @finch.drop.map_str_S_cimport_CConst(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond421 +n.cond421: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body422, label %n.end423 +n.body422: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live424, label %entry.next425 +entry.live424: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_cimport_CConst(ptr %t13) + br label %entry.next425 +entry.next425: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond421 +n.end423: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.map_str_S_ast_Type(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond426 +n.cond426: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body427, label %n.end428 +n.body427: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live429, label %entry.next430 +entry.live429: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_ast_Type(ptr %t13) + br label %entry.next430 +entry.next430: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond426 +n.end428: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CField(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CField, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CField, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal void @finch.drop.arr_S_cimport_CField(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond436 +n.cond436: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body437, label %n.end438 +n.body437: + %t7 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t5 + call void @finch.drop.S_cimport_CField(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond436 +n.end438: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CStruct(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_cimport_CField(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal void @finch.drop.map_str_S_cimport_CStruct(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond431 +n.cond431: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body432, label %n.end433 +n.body432: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live434, label %entry.next435 +entry.live434: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_cimport_CStruct(ptr %t13) + br label %entry.next435 +entry.next435: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond431 +n.end433: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CImports(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 0 + call void @finch.drop.map_str_S_cimport_CFunc(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 1 + call void @finch.drop.map_str_S_cimport_CConst(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 2 + call void @finch.drop.map_str_S_ast_Type(ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 3 + call void @finch.drop.map_str_S_cimport_CStruct(ptr %t4) + %t5 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_str(ptr %t5) + ret void +} + +define internal void @finch.drop.S_linker_Build(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t6) + ret void +} + +define internal i64 @finch.main.main({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca i1, align 16 + %a105 = alloca i1, align 16 + %a106 = alloca i1, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca i64, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca %S.platform.Target, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a450 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca %S.main.Loader, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca i64, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca i64, align 16 + %a615 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a645 = alloca i64, align 16 + %a653 = alloca %S.ast.Program, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca i64, align 16 + %a663 = alloca i64, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca i64, align 16 + %a700 = alloca i64, align 16 + %a703 = alloca i64, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca i64, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a780 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a803 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca %S.cimport.CImports, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a866 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca %S.platform.Target, align 16 + %a876 = alloca %S.platform.Target, align 16 + %a880 = alloca %S.gen.Options, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a907 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a921 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca { ptr, i64, i64 }, align 16 + %a923 = alloca { ptr, i64, i64 }, align 16 + %a924 = alloca { ptr, i64, i64 }, align 16 + %a927 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a940 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a978 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a984 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a986 = alloca { ptr, i64, i64 }, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a993 = alloca { ptr, i64, i64 }, align 16 + %a996 = alloca { ptr, i64, i64 }, align 16 + %a997 = alloca { ptr, i64, i64 }, align 16 + %a998 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1003 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca %S.linker.Build, align 16 + %a1040 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1045 = alloca i64, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 + %a1069 = alloca { ptr, i64, i64 }, align 16 + %a1070 = alloca { ptr, i64, i64 }, align 16 + %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 + %a1075 = alloca { ptr, i64, i64 }, align 16 + %a1078 = alloca { ptr, i64, i64 }, align 16 + %a1079 = alloca { ptr, i64, i64 }, align 16 + %a1081 = alloca { ptr, i64, i64 }, align 16 + %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1085 = alloca { ptr, i64, i64 }, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca i64, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = icmp eq i64 %t3, 2 + br label %logic.from159 +logic.from159: + br i1 %t4, label %logic.rhs160, label %logic.end161 +logic.rhs160: + %t5 = load { ptr, i64, i64 }, ptr %a1 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 1, %t6 + br i1 %t7, label %range162, label %inrange163 +range162: + call void @finch_panic_index(ptr @.str.155, i64 152, i64 1, i64 %t6) + unreachable +inrange163: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 1 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.156, i64 7, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br label %logic.from164 +logic.from164: + br i1 %t14, label %logic.end166, label %logic.rhs165 +logic.rhs165: + %t15 = load { ptr, i64, i64 }, ptr %a1 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 1, %t16 + br i1 %t17, label %range167, label %inrange168 +range167: + call void @finch_panic_index(ptr @.str.157, i64 152, i64 1, i64 %t16) + unreachable +inrange168: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.158, i64 9, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br label %logic.rend169 +logic.rend169: + br label %logic.end166 +logic.end166: + %t25 = phi i1 [ true, %logic.from164 ], [ %t24, %logic.rend169 ] + br label %logic.rend170 +logic.rend170: + br label %logic.end161 +logic.end161: + %t26 = phi i1 [ false, %logic.from159 ], [ %t25, %logic.rend170 ] + br i1 %t26, label %then171, label %endif173 +then171: + %t27 = extractvalue { ptr, i64, i64 } { ptr @.str.159, i64 46, i64 0 }, 1 + %t28 = trunc i64 %t27 to i32 + %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.159, i64 46, i64 0 }, 0 + %t30 = icmp eq ptr %t29, null + %t31 = select i1 %t30, ptr @.str.160, ptr %t29 + %t32 = call i32 (ptr, ...) @printf(ptr @.str.161, i32 %t28, ptr %t31) + %t33 = call i32 (ptr, ...) @printf(ptr @.str.162) + ret i64 0 +endif173: + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t35 = load i64, ptr %t34 + %t36 = icmp eq i64 %t35, 2 + br label %logic.from174 +logic.from174: + br i1 %t36, label %logic.rhs175, label %logic.end176 +logic.rhs175: + %t37 = load { ptr, i64, i64 }, ptr %a1 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 1, %t38 + br i1 %t39, label %range177, label %inrange178 +range177: + call void @finch_panic_index(ptr @.str.163, i64 156, i64 1, i64 %t38) + unreachable +inrange178: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t42, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.164, i64 3, i64 0 }, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend179 +logic.rend179: + br label %logic.end176 +logic.end176: + %t47 = phi i1 [ false, %logic.from174 ], [ %t46, %logic.rend179 ] + br i1 %t47, label %then180, label %endif182 +then180: + %t48 = load { ptr, i64, i64 }, ptr %a1 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 0, %t49 + br i1 %t50, label %range183, label %inrange184 +range183: + call void @finch_panic_index(ptr @.str.165, i64 157, i64 0, i64 %t49) + unreachable +inrange184: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 0 + %t53 = load { ptr, i64, i64 }, ptr %t52 + %t54 = call i64 @finch.lsp.run({ ptr, i64, i64 } %t53) + ret i64 %t54 +endif182: + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = icmp slt i64 %t56, 3 + br i1 %t57, label %then185, label %endif187 +then185: + call void @finch.main.usage() + br label %endif187 +endif187: + %t58 = load { ptr, i64, i64 }, ptr %a1 + %t59 = extractvalue { ptr, i64, i64 } %t58, 1 + %t60 = icmp uge i64 1, %t59 + br i1 %t60, label %range188, label %inrange189 +range188: + call void @finch_panic_index(ptr @.str.166, i64 162, i64 1, i64 %t59) + unreachable +inrange189: + %t61 = extractvalue { ptr, i64, i64 } %t58, 0 + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i64 1 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_copy(ptr %a65, ptr %a64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t66, ptr %a67 + %t68 = load { ptr, i64, i64 }, ptr %a1 + %t69 = extractvalue { ptr, i64, i64 } %t68, 1 + %t70 = icmp uge i64 2, %t69 + br i1 %t70, label %range190, label %inrange191 +range190: + call void @finch_panic_index(ptr @.str.167, i64 163, i64 2, i64 %t69) + unreachable +inrange191: + %t71 = extractvalue { ptr, i64, i64 } %t68, 0 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 2 + %t73 = load { ptr, i64, i64 }, ptr %t72 + store { ptr, i64, i64 } %t73, ptr %a74 + call void @finch_str_copy(ptr %a75, ptr %a74) + %t76 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t76, ptr %a77 + %t78 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t78, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.168, i64 5, i64 0 }, ptr %a80 + %t81 = call i32 @finch_str_eq(ptr %a79, ptr %a80) + %t82 = icmp eq i32 %t81, 0 + br label %logic.from192 +logic.from192: + br i1 %t82, label %logic.rhs193, label %logic.end194 +logic.rhs193: + %t83 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t83, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.169, i64 3, i64 0 }, ptr %a85 + %t86 = call i32 @finch_str_eq(ptr %a84, ptr %a85) + %t87 = icmp eq i32 %t86, 0 + br label %logic.rend195 +logic.rend195: + br label %logic.end194 +logic.end194: + %t88 = phi i1 [ false, %logic.from192 ], [ %t87, %logic.rend195 ] + br label %logic.from196 +logic.from196: + br i1 %t88, label %logic.rhs197, label %logic.end198 +logic.rhs197: + %t89 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t89, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.170, i64 2, i64 0 }, ptr %a91 + %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) + %t93 = icmp eq i32 %t92, 0 + br label %logic.rend199 +logic.rend199: + br label %logic.end198 +logic.end198: + %t94 = phi i1 [ false, %logic.from196 ], [ %t93, %logic.rend199 ] + br label %logic.from200 +logic.from200: + br i1 %t94, label %logic.rhs201, label %logic.end202 +logic.rhs201: + %t95 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.171, i64 5, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp eq i32 %t98, 0 + br label %logic.rend203 +logic.rend203: + br label %logic.end202 +logic.end202: + %t100 = phi i1 [ false, %logic.from200 ], [ %t99, %logic.rend203 ] + br i1 %t100, label %then204, label %endif206 +then204: + call void @finch.main.usage() + br label %endif206 +endif206: + %t101 = load { ptr, i64, i64 }, ptr %a77 + %t102 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t102, ptr %a103 + store i1 false, ptr %a104 + store i1 false, ptr %a105 + store i1 false, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.172, i64 0, i64 0 }, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.173, i64 3, i64 0 }, ptr %a108 + store { ptr, i64, i64 } zeroinitializer, ptr %a109 + store { ptr, i64, i64 } zeroinitializer, ptr %a110 + store { ptr, i64, i64 } zeroinitializer, ptr %a111 + store { ptr, i64, i64 } zeroinitializer, ptr %a112 + store { ptr, i64, i64 } zeroinitializer, ptr %a113 + store i64 3, ptr %a114 + br label %while.cond207 +while.cond207: + %t115 = load i64, ptr %a114 + %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t117 = load i64, ptr %t116 + %t118 = icmp slt i64 %t115, %t117 + br i1 %t118, label %while.body208, label %while.end209 +while.body208: + %t119 = load i64, ptr %a114 + %t120 = load { ptr, i64, i64 }, ptr %a1 + %t121 = extractvalue { ptr, i64, i64 } %t120, 1 + %t122 = icmp uge i64 %t119, %t121 + br i1 %t122, label %range210, label %inrange211 +range210: + call void @finch_panic_index(ptr @.str.174, i64 180, i64 %t119, i64 %t121) + unreachable +inrange211: + %t123 = extractvalue { ptr, i64, i64 } %t120, 0 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 %t119 + %t125 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t128, ptr %a129 + %t130 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t130, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.175, i64 3, i64 0 }, ptr %a132 + %t133 = call i32 @finch_str_eq(ptr %a131, ptr %a132) + %t134 = icmp ne i32 %t133, 0 + br label %logic.from212 +logic.from212: + br i1 %t134, label %logic.rhs213, label %logic.end214 +logic.rhs213: + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = icmp sgt i64 %t136, 0 + br label %logic.rend215 +logic.rend215: + br label %logic.end214 +logic.end214: + %t138 = phi i1 [ false, %logic.from212 ], [ %t137, %logic.rend215 ] + br i1 %t138, label %then216, label %else217 +then216: + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t140 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t140, ptr %a141 + call void @finch_str_copy(ptr %a142, ptr %a141) + %t143 = load { ptr, i64, i64 }, ptr %a142 + %t144 = load i64, ptr %t139 + %t145 = add i64 %t144, 1 + call void @finch_arr_reserve(ptr %a113, i64 %t145, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t146 = load ptr, ptr %a113 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t144 + store { ptr, i64, i64 } %t143, ptr %t147 + store i64 %t145, ptr %t139 + br label %endif218 +else217: + %t148 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.176, i64 2, i64 0 }, ptr %a150 + %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) + %t152 = icmp ne i32 %t151, 0 + br label %logic.from219 +logic.from219: + br i1 %t152, label %logic.rhs220, label %logic.end221 +logic.rhs220: + %t153 = load i64, ptr %a114 + %t154 = add i64 %t153, 1 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t156 = load i64, ptr %t155 + %t157 = icmp slt i64 %t154, %t156 + br label %logic.rend222 +logic.rend222: + br label %logic.end221 +logic.end221: + %t158 = phi i1 [ false, %logic.from219 ], [ %t157, %logic.rend222 ] + br label %logic.from223 +logic.from223: + br i1 %t158, label %logic.rhs224, label %logic.end225 +logic.rhs224: + %t159 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.177, i64 5, i64 0 }, ptr %a161 + %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) + %t163 = icmp ne i32 %t162, 0 + br label %logic.rend226 +logic.rend226: + br label %logic.end225 +logic.end225: + %t164 = phi i1 [ false, %logic.from223 ], [ %t163, %logic.rend226 ] + br i1 %t164, label %then227, label %else228 +then227: + %t165 = load i64, ptr %a114 + %t166 = add i64 %t165, 1 + %t167 = load { ptr, i64, i64 }, ptr %a1 + %t168 = extractvalue { ptr, i64, i64 } %t167, 1 + %t169 = icmp uge i64 %t166, %t168 + br i1 %t169, label %range230, label %inrange231 +range230: + call void @finch_panic_index(ptr @.str.178, i64 184, i64 %t166, i64 %t168) + unreachable +inrange231: + %t170 = extractvalue { ptr, i64, i64 } %t167, 0 + %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i64 %t166 + %t172 = load { ptr, i64, i64 }, ptr %t171 + store { ptr, i64, i64 } %t172, ptr %a173 + call void @finch_str_copy(ptr %a174, ptr %a173) + %t175 = load { ptr, i64, i64 }, ptr %a174 + %t176 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t175, ptr %a103 + store { ptr, i64, i64 } %t176, ptr %a177 + call void @finch_str_drop(ptr %a177) + store i1 true, ptr %a104 + %t178 = load i64, ptr %a114 + %t179 = add i64 %t178, 1 + store i64 %t179, ptr %a114 + br label %endif229 +else228: + %t180 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t180, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.179, i64 8, i64 0 }, ptr %a182 + %t183 = call i32 @finch_str_eq(ptr %a181, ptr %a182) + %t184 = icmp ne i32 %t183, 0 + br label %logic.from232 +logic.from232: + br i1 %t184, label %logic.rhs233, label %logic.end234 +logic.rhs233: + %t185 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t185, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.180, i64 5, i64 0 }, ptr %a187 + %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) + %t189 = icmp ne i32 %t188, 0 + br label %logic.rend235 +logic.rend235: + br label %logic.end234 +logic.end234: + %t190 = phi i1 [ false, %logic.from232 ], [ %t189, %logic.rend235 ] + br i1 %t190, label %then236, label %else237 +then236: + store i1 true, ptr %a105 + br label %endif238 +else237: + %t191 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t191, ptr %a192 + store { ptr, i64, i64 } { ptr @.str.181, i64 3, i64 0 }, ptr %a193 + %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) + %t195 = icmp ne i32 %t194, 0 + br i1 %t195, label %then239, label %else240 +then239: + %t196 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.182, i64 3, i64 0 }, ptr %a108 + store { ptr, i64, i64 } %t196, ptr %a197 + call void @finch_str_drop(ptr %a197) + br label %endif241 +else240: + %t198 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t198, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.183, i64 2, i64 0 }, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp ne i32 %t201, 0 + br label %logic.from242 +logic.from242: + br i1 %t202, label %logic.rhs243, label %logic.end244 +logic.rhs243: + %t203 = load i64, ptr %a114 + %t204 = add i64 %t203, 1 + %t205 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t206 = load i64, ptr %t205 + %t207 = icmp slt i64 %t204, %t206 + br label %logic.rend245 +logic.rend245: + br label %logic.end244 +logic.end244: + %t208 = phi i1 [ false, %logic.from242 ], [ %t207, %logic.rend245 ] + br i1 %t208, label %then246, label %else247 +then246: + %t209 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 + %t210 = load i64, ptr %a114 + %t211 = add i64 %t210, 1 + %t212 = load { ptr, i64, i64 }, ptr %a1 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 %t211, %t213 + br i1 %t214, label %range249, label %inrange250 +range249: + call void @finch_panic_index(ptr @.str.184, i64 192, i64 %t211, i64 %t213) + unreachable +inrange250: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds { ptr, i64, i64 }, ptr %t215, i64 %t211 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t217, ptr %a218 + call void @finch_str_copy(ptr %a219, ptr %a218) + %t220 = load { ptr, i64, i64 }, ptr %a219 + %t221 = load i64, ptr %t209 + %t222 = add i64 %t221, 1 + call void @finch_arr_reserve(ptr %a109, i64 %t222, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t223 = load ptr, ptr %a109 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i64 %t221 + store { ptr, i64, i64 } %t220, ptr %t224 + store i64 %t222, ptr %t209 + %t225 = load i64, ptr %a114 + %t226 = add i64 %t225, 1 + store i64 %t226, ptr %a114 + br label %endif248 +else247: + %t227 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t227, ptr %a228 + store { ptr, i64, i64 } { ptr @.str.186, i64 2, i64 0 }, ptr %a230 + %t231 = call i32 @finch_str_starts(ptr %a228, ptr %a230) + %t232 = icmp ne i32 %t231, 0 + br label %logic.from251 +logic.from251: + br i1 %t232, label %logic.rhs252, label %logic.end253 +logic.rhs252: + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t234 = load i64, ptr %t233 + %t235 = icmp sgt i64 %t234, 2 + br label %logic.rend254 +logic.rend254: + br label %logic.end253 +logic.end253: + %t236 = phi i1 [ false, %logic.from251 ], [ %t235, %logic.rend254 ] + br i1 %t236, label %then255, label %else256 +then255: + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 + %t238 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t238, ptr %a239 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t242 = load i64, ptr %t241 + call void @finch_str_sub(ptr %a240, ptr %a239, i64 2, i64 %t242, ptr @.str.187, i64 195) + %t243 = load { ptr, i64, i64 }, ptr %a240 + %t244 = load i64, ptr %t237 + %t245 = add i64 %t244, 1 + call void @finch_arr_reserve(ptr %a109, i64 %t245, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t246 = load ptr, ptr %a109 + %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 + store { ptr, i64, i64 } %t243, ptr %t247 + store i64 %t245, ptr %t237 + br label %endif257 +else256: + %t248 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t248, ptr %a249 + store { ptr, i64, i64 } { ptr @.str.188, i64 2, i64 0 }, ptr %a250 + %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) + %t252 = icmp ne i32 %t251, 0 + br label %logic.from258 +logic.from258: + br i1 %t252, label %logic.rhs259, label %logic.end260 +logic.rhs259: + %t253 = load i64, ptr %a114 + %t254 = add i64 %t253, 1 + %t255 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t256 = load i64, ptr %t255 + %t257 = icmp slt i64 %t254, %t256 + br label %logic.rend261 +logic.rend261: + br label %logic.end260 +logic.end260: + %t258 = phi i1 [ false, %logic.from258 ], [ %t257, %logic.rend261 ] + br i1 %t258, label %then262, label %else263 +then262: + %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %a110, i32 0, i32 1 + %t260 = load i64, ptr %a114 + %t261 = add i64 %t260, 1 + %t262 = load { ptr, i64, i64 }, ptr %a1 + %t263 = extractvalue { ptr, i64, i64 } %t262, 1 + %t264 = icmp uge i64 %t261, %t263 + br i1 %t264, label %range265, label %inrange266 +range265: + call void @finch_panic_index(ptr @.str.189, i64 197, i64 %t261, i64 %t263) + unreachable +inrange266: + %t265 = extractvalue { ptr, i64, i64 } %t262, 0 + %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 %t261 + %t267 = load { ptr, i64, i64 }, ptr %t266 + store { ptr, i64, i64 } %t267, ptr %a268 + call void @finch_str_copy(ptr %a269, ptr %a268) + %t270 = load { ptr, i64, i64 }, ptr %a269 + %t271 = load i64, ptr %t259 + %t272 = add i64 %t271, 1 + call void @finch_arr_reserve(ptr %a110, i64 %t272, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t273 = load ptr, ptr %a110 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 + store { ptr, i64, i64 } %t270, ptr %t274 + store i64 %t272, ptr %t259 + %t275 = load i64, ptr %a114 + %t276 = add i64 %t275, 1 + store i64 %t276, ptr %a114 + br label %endif264 +else263: + %t277 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t277, ptr %a278 + store { ptr, i64, i64 } { ptr @.str.190, i64 9, i64 0 }, ptr %a279 + %t280 = call i32 @finch_str_eq(ptr %a278, ptr %a279) + %t281 = icmp ne i32 %t280, 0 + br label %logic.from267 +logic.from267: + br i1 %t281, label %logic.rhs268, label %logic.end269 +logic.rhs268: + %t282 = load i64, ptr %a114 + %t283 = add i64 %t282, 1 + %t284 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t285 = load i64, ptr %t284 + %t286 = icmp slt i64 %t283, %t285 + br label %logic.rend270 +logic.rend270: + br label %logic.end269 +logic.end269: + %t287 = phi i1 [ false, %logic.from267 ], [ %t286, %logic.rend270 ] + br i1 %t287, label %then271, label %else272 +then271: + %t288 = load i64, ptr %a114 + %t289 = add i64 %t288, 1 + %t290 = load { ptr, i64, i64 }, ptr %a1 + %t291 = extractvalue { ptr, i64, i64 } %t290, 1 + %t292 = icmp uge i64 %t289, %t291 + br i1 %t292, label %range274, label %inrange275 +range274: + call void @finch_panic_index(ptr @.str.191, i64 200, i64 %t289, i64 %t291) + unreachable +inrange275: + %t293 = extractvalue { ptr, i64, i64 } %t290, 0 + %t294 = getelementptr inbounds { ptr, i64, i64 }, ptr %t293, i64 %t289 + %t295 = load { ptr, i64, i64 }, ptr %t294 + store { ptr, i64, i64 } %t295, ptr %a296 + store { ptr, i64, i64 } { ptr @.str.193, i64 1, i64 0 }, ptr %a298 + call void @finch_str_split(ptr %a299, ptr %a296, ptr %a298) + %t300 = load { ptr, i64, i64 }, ptr %a299 + store { ptr, i64, i64 } %t300, ptr %a301 + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 + %t303 = load { ptr, i64, i64 }, ptr %a301 + %t304 = extractvalue { ptr, i64, i64 } %t303, 1 + %t305 = icmp uge i64 0, %t304 + br i1 %t305, label %range276, label %inrange277 +range276: + call void @finch_panic_index(ptr @.str.194, i64 201, i64 0, i64 %t304) + unreachable +inrange277: + %t306 = extractvalue { ptr, i64, i64 } %t303, 0 + %t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 0 + %t308 = load { ptr, i64, i64 }, ptr %t307 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_copy(ptr %a310, ptr %a309) + %t311 = load { ptr, i64, i64 }, ptr %a310 + %t312 = load i64, ptr %t302 + %t313 = add i64 %t312, 1 + call void @finch_arr_reserve(ptr %a111, i64 %t313, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t314 = load ptr, ptr %a111 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 %t312 + store { ptr, i64, i64 } %t311, ptr %t315 + store i64 %t313, ptr %t302 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %a112, i32 0, i32 1 + %t317 = load { ptr, i64, i64 }, ptr %a301 + %t318 = extractvalue { ptr, i64, i64 } %t317, 1 + %t319 = icmp uge i64 1, %t318 + br i1 %t319, label %range278, label %inrange279 +range278: + call void @finch_panic_index(ptr @.str.195, i64 202, i64 1, i64 %t318) + unreachable +inrange279: + %t320 = extractvalue { ptr, i64, i64 } %t317, 0 + %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i64 1 + %t322 = load { ptr, i64, i64 }, ptr %t321 + store { ptr, i64, i64 } %t322, ptr %a323 + call void @finch_str_copy(ptr %a324, ptr %a323) + %t325 = load { ptr, i64, i64 }, ptr %a324 + %t326 = load i64, ptr %t316 + %t327 = add i64 %t326, 1 + call void @finch_arr_reserve(ptr %a112, i64 %t327, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t328 = load ptr, ptr %a112 + %t329 = getelementptr inbounds { ptr, i64, i64 }, ptr %t328, i64 %t326 + store { ptr, i64, i64 } %t325, ptr %t329 + store i64 %t327, ptr %t316 + %t330 = load i64, ptr %a114 + %t331 = add i64 %t330, 1 + store i64 %t331, ptr %a114 + call void @finch.drop.arr_str(ptr %a301) + br label %endif273 +else272: + %t332 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t332, ptr %a333 + store { ptr, i64, i64 } { ptr @.str.196, i64 2, i64 0 }, ptr %a334 + %t335 = call i32 @finch_str_eq(ptr %a333, ptr %a334) + %t336 = icmp ne i32 %t335, 0 + br i1 %t336, label %then280, label %else281 +then280: + store i1 true, ptr %a106 + br label %endif282 +else281: + %t337 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t337, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.197, i64 8, i64 0 }, ptr %a339 + %t340 = call i32 @finch_str_eq(ptr %a338, ptr %a339) + %t341 = icmp ne i32 %t340, 0 + br label %logic.from283 +logic.from283: + br i1 %t341, label %logic.rhs284, label %logic.end285 +logic.rhs284: + %t342 = load i64, ptr %a114 + %t343 = add i64 %t342, 1 + %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t345 = load i64, ptr %t344 + %t346 = icmp slt i64 %t343, %t345 + br label %logic.rend286 +logic.rend286: + br label %logic.end285 +logic.end285: + %t347 = phi i1 [ false, %logic.from283 ], [ %t346, %logic.rend286 ] + br i1 %t347, label %then287, label %else288 +then287: + %t348 = load i64, ptr %a114 + %t349 = add i64 %t348, 1 + %t350 = load { ptr, i64, i64 }, ptr %a1 + %t351 = extractvalue { ptr, i64, i64 } %t350, 1 + %t352 = icmp uge i64 %t349, %t351 + br i1 %t352, label %range290, label %inrange291 +range290: + call void @finch_panic_index(ptr @.str.198, i64 207, i64 %t349, i64 %t351) + unreachable +inrange291: + %t353 = extractvalue { ptr, i64, i64 } %t350, 0 + %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i64 %t349 + %t355 = load { ptr, i64, i64 }, ptr %t354 + store { ptr, i64, i64 } %t355, ptr %a356 + call void @finch_str_copy(ptr %a357, ptr %a356) + %t358 = load { ptr, i64, i64 }, ptr %a357 + %t359 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t358, ptr %a107 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + %t361 = load i64, ptr %a114 + %t362 = add i64 %t361, 1 + store i64 %t362, ptr %a114 + br label %endif289 +else288: + %t363 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t363, ptr %a364 + store { ptr, i64, i64 } { ptr @.str.199, i64 3, i64 0 }, ptr %a365 + %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) + %t367 = icmp ne i32 %t366, 0 + br i1 %t367, label %then292, label %else293 +then292: + %t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t369 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t369, ptr %a370 + call void @finch_str_copy(ptr %a371, ptr %a370) + %t372 = load { ptr, i64, i64 }, ptr %a371 + %t373 = load i64, ptr %t368 + %t374 = add i64 %t373, 1 + call void @finch_arr_reserve(ptr %a113, i64 %t374, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t375 = load ptr, ptr %a113 + %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t373 + store { ptr, i64, i64 } %t372, ptr %t376 + store i64 %t374, ptr %t368 + br label %endif294 +else293: + call void @finch.main.usage() + br label %endif294 +endif294: + br label %endif289 +endif289: + br label %endif282 +endif282: + br label %endif273 +endif273: + br label %endif264 +endif264: + br label %endif257 +endif257: + br label %endif248 +endif248: + br label %endif241 +endif241: + br label %endif238 +endif238: + br label %endif229 +endif229: + br label %endif218 +endif218: + %t377 = load i64, ptr %a114 + %t378 = add i64 %t377, 1 + store i64 %t378, ptr %a114 + call void @finch_str_drop(ptr %a129) + br label %while.cond207 +while.end209: + %t379 = load { ptr, i64, i64 }, ptr %a107 + %t380 = call %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %t379) + store %S.platform.Target %t380, ptr %a381 + %t382 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t382, ptr %a383 + store { ptr, i64, i64 } { ptr @.str.200, i64 3, i64 0 }, ptr %a384 + %t385 = call i32 @finch_str_eq(ptr %a383, ptr %a384) + %t386 = icmp ne i32 %t385, 0 + br i1 %t386, label %then295, label %else296 +then295: + %t387 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t387, ptr %a389 + store { ptr, i64, i64 } { ptr @.str.201, i64 11, i64 0 }, ptr %a390 + call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) + store { ptr, i64, i64 } %t387, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a388 + %t393 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a394, i64 %t393) + %t395 = load { ptr, i64, i64 }, ptr %a394 + store { ptr, i64, i64 } %t392, ptr %a397 + store { ptr, i64, i64 } %t395, ptr %a398 + call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) + store { ptr, i64, i64 } %t392, ptr %a399 + call void @finch_str_drop(ptr %a399) + store { ptr, i64, i64 } %t395, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = load { ptr, i64, i64 }, ptr %a396 + store { ptr, i64, i64 } %t401, ptr %a403 + store { ptr, i64, i64 } { ptr @.str.202, i64 1, i64 0 }, ptr %a404 + call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) + store { ptr, i64, i64 } %t401, ptr %a405 + call void @finch_str_drop(ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a402 + %t407 = load { ptr, i64, i64 }, ptr %a77 + %t408 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t407) + store { ptr, i64, i64 } %t406, ptr %a410 + store { ptr, i64, i64 } %t408, ptr %a411 + call void @finch_str_concat(ptr %a409, ptr %a410, ptr %a411) + store { ptr, i64, i64 } %t406, ptr %a412 + call void @finch_str_drop(ptr %a412) + store { ptr, i64, i64 } %t408, ptr %a413 + call void @finch_str_drop(ptr %a413) + %t414 = load { ptr, i64, i64 }, ptr %a409 + %t415 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 6 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t414, ptr %a418 + store { ptr, i64, i64 } %t416, ptr %a419 + call void @finch_str_concat(ptr %a417, ptr %a418, ptr %a419) + store { ptr, i64, i64 } %t414, ptr %a420 + call void @finch_str_drop(ptr %a420) + %t421 = load { ptr, i64, i64 }, ptr %a417 + %t422 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t421, ptr %a103 + store { ptr, i64, i64 } %t422, ptr %a423 + call void @finch_str_drop(ptr %a423) + br label %endif297 +else296: + %t424 = load i1, ptr %a105 + br label %logic.from298 +logic.from298: + br i1 %t424, label %logic.rhs299, label %logic.end300 +logic.rhs299: + %t425 = load i1, ptr %a104 + %t426 = xor i1 %t425, true + br label %logic.rend301 +logic.rend301: + br label %logic.end300 +logic.end300: + %t427 = phi i1 [ false, %logic.from298 ], [ %t426, %logic.rend301 ] + br i1 %t427, label %then302, label %else303 +then302: + %t428 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t429 = load i1, ptr %t428 + br i1 %t429, label %then305, label %else306 +then305: + %t430 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t430, ptr %a432 + store { ptr, i64, i64 } { ptr @.str.203, i64 4, i64 0 }, ptr %a433 + call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a431 + %t435 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t434, ptr %a103 + store { ptr, i64, i64 } %t435, ptr %a436 + call void @finch_str_drop(ptr %a436) + br label %endif307 +else306: + %t437 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 3 + %t438 = load i1, ptr %t437 + br i1 %t438, label %then308, label %else309 +then308: + %t439 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.204, i64 3, i64 0 }, ptr %a441 + store { ptr, i64, i64 } %t439, ptr %a442 + call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442) + %t443 = load { ptr, i64, i64 }, ptr %a440 + store { ptr, i64, i64 } %t443, ptr %a445 + store { ptr, i64, i64 } { ptr @.str.205, i64 6, i64 0 }, ptr %a446 + call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) + store { ptr, i64, i64 } %t443, ptr %a447 + call void @finch_str_drop(ptr %a447) + %t448 = load { ptr, i64, i64 }, ptr %a444 + %t449 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t448, ptr %a103 + store { ptr, i64, i64 } %t449, ptr %a450 + call void @finch_str_drop(ptr %a450) + br label %endif310 +else309: + %t451 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.206, i64 3, i64 0 }, ptr %a453 + store { ptr, i64, i64 } %t451, ptr %a454 + call void @finch_str_concat(ptr %a452, ptr %a453, ptr %a454) + %t455 = load { ptr, i64, i64 }, ptr %a452 + store { ptr, i64, i64 } %t455, ptr %a457 + store { ptr, i64, i64 } { ptr @.str.207, i64 3, i64 0 }, ptr %a458 + call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) + store { ptr, i64, i64 } %t455, ptr %a459 + call void @finch_str_drop(ptr %a459) + %t460 = load { ptr, i64, i64 }, ptr %a456 + %t461 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t460, ptr %a103 + store { ptr, i64, i64 } %t461, ptr %a462 + call void @finch_str_drop(ptr %a462) + br label %endif310 +endif310: + br label %endif307 +endif307: + br label %endif304 +else303: + %t463 = load i1, ptr %a104 + %t464 = xor i1 %t463, true + br i1 %t464, label %then311, label %endif313 +then311: + %t465 = load { ptr, i64, i64 }, ptr %a103 + %t466 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 6 + %t467 = load { ptr, i64, i64 }, ptr %t466 + store { ptr, i64, i64 } %t465, ptr %a469 + store { ptr, i64, i64 } %t467, ptr %a470 + call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) + %t471 = load { ptr, i64, i64 }, ptr %a468 + %t472 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t471, ptr %a103 + store { ptr, i64, i64 } %t472, ptr %a473 + call void @finch_str_drop(ptr %a473) + br label %endif313 +endif313: + br label %endif304 +endif304: + br label %endif297 +endif297: + store %S.main.Loader zeroinitializer, ptr %a474 + %t475 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 + %t476 = load { ptr, i64, i64 }, ptr %t475 + store { ptr, i64, i64 } { ptr @.str.208, i64 5, i64 0 }, ptr %t475 + store { ptr, i64, i64 } %t476, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t479 = load i1, ptr %t478 + br i1 %t479, label %then314, label %else315 +then314: + %t480 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 + %t481 = load { ptr, i64, i64 }, ptr %t480 + store { ptr, i64, i64 } { ptr @.str.209, i64 7, i64 0 }, ptr %t480 + store { ptr, i64, i64 } %t481, ptr %a482 + call void @finch_str_drop(ptr %a482) + br label %endif316 +else315: + %t483 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 3 + %t484 = load i1, ptr %t483 + br i1 %t484, label %then317, label %endif319 +then317: + %t485 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 + %t486 = load { ptr, i64, i64 }, ptr %t485 + store { ptr, i64, i64 } { ptr @.str.210, i64 5, i64 0 }, ptr %t485 + store { ptr, i64, i64 } %t486, ptr %a487 + call void @finch_str_drop(ptr %a487) + br label %endif319 +endif319: + br label %endif316 +endif316: + %t488 = load { ptr, i64, i64 }, ptr %a1 + %t489 = extractvalue { ptr, i64, i64 } %t488, 1 + %t490 = icmp uge i64 0, %t489 + br i1 %t490, label %range320, label %inrange321 +range320: + call void @finch_panic_index(ptr @.str.211, i64 238, i64 0, i64 %t489) + unreachable +inrange321: + %t491 = extractvalue { ptr, i64, i64 } %t488, 0 + %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 0 + %t493 = load { ptr, i64, i64 }, ptr %t492 + %t494 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t493) + store { ptr, i64, i64 } %t494, ptr %a496 + store { ptr, i64, i64 } { ptr @.str.212, i64 7, i64 0 }, ptr %a497 + call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497) + store { ptr, i64, i64 } %t494, ptr %a498 + call void @finch_str_drop(ptr %a498) + %t499 = load { ptr, i64, i64 }, ptr %a495 + %t500 = load { ptr, i64, i64 }, ptr %a1 + %t501 = extractvalue { ptr, i64, i64 } %t500, 1 + %t502 = icmp uge i64 0, %t501 + br i1 %t502, label %range322, label %inrange323 +range322: + call void @finch_panic_index(ptr @.str.213, i64 238, i64 0, i64 %t501) + unreachable +inrange323: + %t503 = extractvalue { ptr, i64, i64 } %t500, 0 + %t504 = getelementptr inbounds { ptr, i64, i64 }, ptr %t503, i64 0 + %t505 = load { ptr, i64, i64 }, ptr %t504 + %t506 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t505) + store { ptr, i64, i64 } %t506, ptr %a508 + store { ptr, i64, i64 } { ptr @.str.214, i64 4, i64 0 }, ptr %a509 + call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) + store { ptr, i64, i64 } %t506, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a507 + %t512 = load { ptr, i64, i64 }, ptr %a1 + %t513 = extractvalue { ptr, i64, i64 } %t512, 1 + %t514 = icmp uge i64 0, %t513 + br i1 %t514, label %range324, label %inrange325 +range324: + call void @finch_panic_index(ptr @.str.215, i64 238, i64 0, i64 %t513) + unreachable +inrange325: + %t515 = extractvalue { ptr, i64, i64 } %t512, 0 + %t516 = getelementptr inbounds { ptr, i64, i64 }, ptr %t515, i64 0 + %t517 = load { ptr, i64, i64 }, ptr %t516 + %t518 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t517) + store { ptr, i64, i64 } %t518, ptr %a520 + store { ptr, i64, i64 } { ptr @.str.216, i64 19, i64 0 }, ptr %a521 + call void @finch_str_concat(ptr %a519, ptr %a520, ptr %a521) + store { ptr, i64, i64 } %t518, ptr %a522 + call void @finch_str_drop(ptr %a522) + %t523 = load { ptr, i64, i64 }, ptr %a519 + %t524 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t525 = call ptr @finch_alloc(i64 %t524) + %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 0 + store { ptr, i64, i64 } %t499, ptr %t526 + %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 1 + store { ptr, i64, i64 } %t511, ptr %t527 + %t528 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 2 + store { ptr, i64, i64 } %t523, ptr %t528 + %t529 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 3 + store { ptr, i64, i64 } { ptr @.str.217, i64 3, i64 0 }, ptr %t529 + %t530 = insertvalue { ptr, i64, i64 } undef, ptr %t525, 0 + %t531 = insertvalue { ptr, i64, i64 } %t530, i64 4, 1 + %t532 = insertvalue { ptr, i64, i64 } %t531, i64 4, 2 + store { ptr, i64, i64 } %t532, ptr %a533 + store i64 0, ptr %a534 + br label %each.cond326 +each.cond326: + %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %a533, i32 0, i32 1 + %t536 = load i64, ptr %t535 + %t537 = load i64, ptr %a534 + %t538 = icmp slt i64 %t537, %t536 + br i1 %t538, label %each.body327, label %each.end329 +each.body327: + %t539 = load ptr, ptr %a533 + %t540 = getelementptr inbounds { ptr, i64, i64 }, ptr %t539, i64 %t537 + %t541 = load { ptr, i64, i64 }, ptr %t540 + store { ptr, i64, i64 } %t541, ptr %a542 + %t543 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + %t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %t543, i32 0, i32 1 + %t545 = load i64, ptr %t544 + %t546 = icmp eq i64 %t545, 0 + br label %logic.from330 +logic.from330: + br i1 %t546, label %logic.rhs331, label %logic.end332 +logic.rhs331: + %t547 = load { ptr, i64, i64 }, ptr %a542 + store { ptr, i64, i64 } %t547, ptr %a549 + store { ptr, i64, i64 } { ptr @.str.218, i64 9, i64 0 }, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t551, ptr %a552 + %t553 = call i32 @finch_file_exists(ptr %a552) + store { ptr, i64, i64 } %t551, ptr %a554 + call void @finch_str_drop(ptr %a554) + %t555 = icmp ne i32 %t553, 0 + br label %logic.rend333 +logic.rend333: + br label %logic.end332 +logic.end332: + %t556 = phi i1 [ false, %logic.from330 ], [ %t555, %logic.rend333 ] + br i1 %t556, label %then334, label %endif336 +then334: + %t557 = load { ptr, i64, i64 }, ptr %a542 + %t558 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + store { ptr, i64, i64 } %t557, ptr %a559 + call void @finch_str_copy(ptr %a560, ptr %a559) + %t561 = load { ptr, i64, i64 }, ptr %a560 + %t562 = load { ptr, i64, i64 }, ptr %t558 + store { ptr, i64, i64 } %t561, ptr %t558 + store { ptr, i64, i64 } %t562, ptr %a563 + call void @finch_str_drop(ptr %a563) + br label %endif336 +endif336: + br label %each.step328 +each.step328: + %t564 = load i64, ptr %a534 + %t565 = add i64 %t564, 1 + store i64 %t565, ptr %a534 + br label %each.cond326 +each.end329: + call void @finch.drop.arr_str(ptr %a533) + %t566 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + %t567 = getelementptr inbounds { ptr, i64, i64 }, ptr %t566, i32 0, i32 1 + %t568 = load i64, ptr %t567 + %t569 = icmp eq i64 %t568, 0 + br i1 %t569, label %then337, label %endif339 +then337: + %t570 = call { ptr, i64, i64 } @finch.main.unpack() + store { ptr, i64, i64 } %t570, ptr %a572 + store { ptr, i64, i64 } { ptr @.str.219, i64 4, i64 0 }, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + store { ptr, i64, i64 } %t570, ptr %a574 + call void @finch_str_drop(ptr %a574) + %t575 = load { ptr, i64, i64 }, ptr %a571 + %t576 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + %t577 = load { ptr, i64, i64 }, ptr %t576 + store { ptr, i64, i64 } %t575, ptr %t576 + store { ptr, i64, i64 } %t577, ptr %a578 + call void @finch_str_drop(ptr %a578) + br label %endif339 +endif339: + %t579 = load { ptr, i64, i64 }, ptr %a111 + %t580 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 6 + store { ptr, i64, i64 } %t579, ptr %a581 + call void @finch.copy.arr_str(ptr %a582, ptr %a581) + %t583 = load { ptr, i64, i64 }, ptr %a582 + %t584 = load { ptr, i64, i64 }, ptr %t580 + store { ptr, i64, i64 } %t583, ptr %t580 + store { ptr, i64, i64 } %t584, ptr %a585 + call void @finch.drop.arr_str(ptr %a585) + %t586 = load { ptr, i64, i64 }, ptr %a112 + %t587 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 7 + store { ptr, i64, i64 } %t586, ptr %a588 + call void @finch.copy.arr_str(ptr %a589, ptr %a588) + %t590 = load { ptr, i64, i64 }, ptr %a589 + %t591 = load { ptr, i64, i64 }, ptr %t587 + store { ptr, i64, i64 } %t590, ptr %t587 + store { ptr, i64, i64 } %t591, ptr %a592 + call void @finch.drop.arr_str(ptr %a592) + %t593 = extractvalue { ptr, i64, i64 } { ptr @.str.220, i64 10, i64 0 }, 0 + %t594 = icmp eq ptr %t593, null + %t595 = select i1 %t594, ptr @.str.221, ptr %t593 + %t596 = call ptr @getenv(ptr %t595) + store { ptr, i64, i64 } zeroinitializer, ptr %a597 + call void @finch_str_from_c(ptr %a597, ptr %t596) + %t598 = load { ptr, i64, i64 }, ptr %a597 + store { ptr, i64, i64 } %t598, ptr %a599 + %t601 = call { ptr, i64, i64 } @finch.host.pathSeparator() + store { ptr, i64, i64 } %t601, ptr %a602 + call void @finch_str_split(ptr %a603, ptr %a599, ptr %a602) + store { ptr, i64, i64 } %t601, ptr %a604 + call void @finch_str_drop(ptr %a604) + %t605 = load { ptr, i64, i64 }, ptr %a603 + store { ptr, i64, i64 } %t605, ptr %a606 + store i64 0, ptr %a607 + br label %each.cond340 +each.cond340: + %t608 = getelementptr inbounds { ptr, i64, i64 }, ptr %a606, i32 0, i32 1 + %t609 = load i64, ptr %t608 + %t610 = load i64, ptr %a607 + %t611 = icmp slt i64 %t610, %t609 + br i1 %t611, label %each.body341, label %each.end343 +each.body341: + %t612 = load ptr, ptr %a606 + %t613 = getelementptr inbounds { ptr, i64, i64 }, ptr %t612, i64 %t610 + %t614 = load { ptr, i64, i64 }, ptr %t613 + store { ptr, i64, i64 } %t614, ptr %a615 + %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %a615, i32 0, i32 1 + %t617 = load i64, ptr %t616 + %t618 = icmp sgt i64 %t617, 0 + br i1 %t618, label %then344, label %endif346 +then344: + %t619 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 5 + %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %t619, i32 0, i32 1 + %t621 = load { ptr, i64, i64 }, ptr %a615 + store { ptr, i64, i64 } %t621, ptr %a622 + call void @finch_str_copy(ptr %a623, ptr %a622) + %t624 = load { ptr, i64, i64 }, ptr %a623 + %t625 = load i64, ptr %t620 + %t626 = add i64 %t625, 1 + call void @finch_arr_reserve(ptr %t619, i64 %t626, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t627 = load ptr, ptr %t619 + %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 + store { ptr, i64, i64 } %t624, ptr %t628 + store i64 %t626, ptr %t620 + br label %endif346 +endif346: + br label %each.step342 +each.step342: + %t629 = load i64, ptr %a607 + %t630 = add i64 %t629, 1 + store i64 %t630, ptr %a607 + br label %each.cond340 +each.end343: + call void @finch.drop.arr_str(ptr %a606) + %t631 = load { ptr, i64, i64 }, ptr %a77 + call void @finch.main.load(ptr %a474, { ptr, i64, i64 } %t631, { ptr, i64, i64 } { ptr @.str.223, i64 0, i64 0 }) + store { ptr, i64, i64 } zeroinitializer, ptr %a632 + store { ptr, i64, i64 } zeroinitializer, ptr %a633 + %t634 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t634, ptr %a635 + call void @finch.copy.arr_str(ptr %a636, ptr %a635) + %t637 = load { ptr, i64, i64 }, ptr %a636 + store { ptr, i64, i64 } %t637, ptr %a638 + %t639 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t639, ptr %a640 + call void @finch.copy.arr_str(ptr %a641, ptr %a640) + %t642 = load { ptr, i64, i64 }, ptr %a641 + store { ptr, i64, i64 } %t642, ptr %a643 + %t644 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 + store i64 0, ptr %a645 + br label %each.cond347 +each.cond347: + %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t644, i32 0, i32 1 + %t647 = load i64, ptr %t646 + %t648 = load i64, ptr %a645 + %t649 = icmp slt i64 %t648, %t647 + br i1 %t649, label %each.body348, label %each.end350 +each.body348: + %t650 = load ptr, ptr %t644 + %t651 = getelementptr inbounds %S.ast.Program, ptr %t650, i64 %t648 + %t652 = load %S.ast.Program, ptr %t651 + store %S.ast.Program %t652, ptr %a653 + %t654 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 1 + %t655 = load { ptr, i64, i64 }, ptr %t654 + %t656 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t655) + store { ptr, i64, i64 } %t656, ptr %a657 + %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %a638, i32 0, i32 1 + %t659 = load { ptr, i64, i64 }, ptr %a657 + store i64 -1, ptr %a660 + %t661 = load i64, ptr %t658 + %t662 = load ptr, ptr %a638 + store i64 0, ptr %a663 + br label %find.cond351 +find.cond351: + %t664 = load i64, ptr %a663 + %t665 = icmp slt i64 %t664, %t661 + br i1 %t665, label %find.body352, label %find.end355 +find.body352: + %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t662, i64 %t664 + %t667 = load { ptr, i64, i64 }, ptr %t666 + store { ptr, i64, i64 } %t667, ptr %a668 + store { ptr, i64, i64 } %t659, ptr %a669 + %t670 = call i32 @finch_str_eq(ptr %a668, ptr %a669) + %t671 = icmp ne i32 %t670, 0 + br i1 %t671, label %find.hit353, label %find.next354 +find.hit353: + store i64 %t664, ptr %a660 + br label %find.end355 +find.next354: + %t672 = add i64 %t664, 1 + store i64 %t672, ptr %a663 + br label %find.cond351 +find.end355: + %t673 = load i64, ptr %a660 + %t674 = icmp sge i64 %t673, 0 + %t675 = xor i1 %t674, true + br i1 %t675, label %then356, label %endif358 +then356: + %t676 = getelementptr inbounds { ptr, i64, i64 }, ptr %a638, i32 0, i32 1 + %t677 = load { ptr, i64, i64 }, ptr %a657 + store { ptr, i64, i64 } %t677, ptr %a678 + call void @finch_str_copy(ptr %a679, ptr %a678) + %t680 = load { ptr, i64, i64 }, ptr %a679 + %t681 = load i64, ptr %t676 + %t682 = add i64 %t681, 1 + call void @finch_arr_reserve(ptr %a638, i64 %t682, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t683 = load ptr, ptr %a638 + %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 + store { ptr, i64, i64 } %t680, ptr %t684 + store i64 %t682, ptr %t676 + br label %endif358 +endif358: + %t685 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t686 = getelementptr inbounds { ptr, i64, i64 }, ptr %t685, i32 0, i32 1 + %t687 = load i64, ptr %t686 + store i64 0, ptr %a688 + br label %for.cond359 +for.cond359: + %t689 = load i64, ptr %a688 + %t690 = icmp slt i64 %t689, %t687 + br i1 %t690, label %for.body360, label %for.end362 +for.body360: + %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %a633, i32 0, i32 1 + %t692 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t693 = load i64, ptr %a688 + %t694 = load { ptr, i64, i64 }, ptr %t692 + %t695 = extractvalue { ptr, i64, i64 } %t694, 1 + %t696 = icmp uge i64 %t693, %t695 + br i1 %t696, label %range363, label %inrange364 +range363: + call void @finch_panic_index(ptr @.str.224, i64 266, i64 %t693, i64 %t695) + unreachable +inrange364: + %t697 = extractvalue { ptr, i64, i64 } %t694, 0 + %t698 = getelementptr inbounds { ptr, i64, i64 }, ptr %t697, i64 %t693 + %t699 = load { ptr, i64, i64 }, ptr %t698 + store i64 -1, ptr %a700 + %t701 = load i64, ptr %t691 + %t702 = load ptr, ptr %a633 + store i64 0, ptr %a703 + br label %find.cond365 +find.cond365: + %t704 = load i64, ptr %a703 + %t705 = icmp slt i64 %t704, %t701 + br i1 %t705, label %find.body366, label %find.end369 +find.body366: + %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 + %t707 = load { ptr, i64, i64 }, ptr %t706 + store { ptr, i64, i64 } %t707, ptr %a708 + store { ptr, i64, i64 } %t699, ptr %a709 + %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) + %t711 = icmp ne i32 %t710, 0 + br i1 %t711, label %find.hit367, label %find.next368 +find.hit367: + store i64 %t704, ptr %a700 + br label %find.end369 +find.next368: + %t712 = add i64 %t704, 1 + store i64 %t712, ptr %a703 + br label %find.cond365 +find.end369: + %t713 = load i64, ptr %a700 + %t714 = icmp sge i64 %t713, 0 + %t715 = xor i1 %t714, true + br i1 %t715, label %then370, label %endif372 +then370: + %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a633, i32 0, i32 1 + %t717 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t718 = load i64, ptr %a688 + %t719 = load { ptr, i64, i64 }, ptr %t717 + %t720 = extractvalue { ptr, i64, i64 } %t719, 1 + %t721 = icmp uge i64 %t718, %t720 + br i1 %t721, label %range373, label %inrange374 +range373: + call void @finch_panic_index(ptr @.str.225, i64 267, i64 %t718, i64 %t720) + unreachable +inrange374: + %t722 = extractvalue { ptr, i64, i64 } %t719, 0 + %t723 = getelementptr inbounds { ptr, i64, i64 }, ptr %t722, i64 %t718 + %t724 = load { ptr, i64, i64 }, ptr %t723 + store { ptr, i64, i64 } %t724, ptr %a725 + call void @finch_str_copy(ptr %a726, ptr %a725) + %t727 = load { ptr, i64, i64 }, ptr %a726 + %t728 = load i64, ptr %t716 + %t729 = add i64 %t728, 1 + call void @finch_arr_reserve(ptr %a633, i64 %t729, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t730 = load ptr, ptr %a633 + %t731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t730, i64 %t728 + store { ptr, i64, i64 } %t727, ptr %t731 + store i64 %t729, ptr %t716 + %t732 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 + %t733 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t734 = load i64, ptr %a688 + %t735 = load { ptr, i64, i64 }, ptr %t733 + %t736 = extractvalue { ptr, i64, i64 } %t735, 1 + %t737 = icmp uge i64 %t734, %t736 + br i1 %t737, label %range375, label %inrange376 +range375: + call void @finch_panic_index(ptr @.str.226, i64 268, i64 %t734, i64 %t736) + unreachable +inrange376: + %t738 = extractvalue { ptr, i64, i64 } %t735, 0 + %t739 = getelementptr inbounds { ptr, i64, i64 }, ptr %t738, i64 %t734 + %t740 = load { ptr, i64, i64 }, ptr %t739 + store { ptr, i64, i64 } %t740, ptr %a741 + call void @finch_str_copy(ptr %a742, ptr %a741) + %t743 = load { ptr, i64, i64 }, ptr %a742 + %t744 = insertvalue %S.cimport.Header zeroinitializer, { ptr, i64, i64 } %t743, 0 + %t745 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 4 + %t746 = load i64, ptr %a688 + %t747 = load { ptr, i64, i64 }, ptr %t745 + %t748 = extractvalue { ptr, i64, i64 } %t747, 1 + %t749 = icmp uge i64 %t746, %t748 + br i1 %t749, label %range377, label %inrange378 +range377: + call void @finch_panic_index(ptr @.str.227, i64 268, i64 %t746, i64 %t748) + unreachable +inrange378: + %t750 = extractvalue { ptr, i64, i64 } %t747, 0 + %t751 = getelementptr inbounds { ptr, i64, i64 }, ptr %t750, i64 %t746 + %t752 = load { ptr, i64, i64 }, ptr %t751 + store { ptr, i64, i64 } %t752, ptr %a753 + call void @finch_str_copy(ptr %a754, ptr %a753) + %t755 = load { ptr, i64, i64 }, ptr %a754 + %t756 = insertvalue %S.cimport.Header %t744, { ptr, i64, i64 } %t755, 1 + %t757 = load i64, ptr %t732 + %t758 = add i64 %t757, 1 + call void @finch_arr_reserve(ptr %a632, i64 %t758, i64 ptrtoint (ptr getelementptr (%S.cimport.Header, ptr null, i32 1) to i64)) + %t759 = load ptr, ptr %a632 + %t760 = getelementptr inbounds %S.cimport.Header, ptr %t759, i64 %t757 + store %S.cimport.Header %t756, ptr %t760 + store i64 %t758, ptr %t732 + br label %endif372 +endif372: + br label %for.step361 +for.step361: + %t761 = load i64, ptr %a688 + %t762 = add i64 %t761, 1 + store i64 %t762, ptr %a688 + br label %for.cond359 +for.end362: + %t763 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 5 + store i64 0, ptr %a764 + br label %each.cond379 +each.cond379: + %t765 = getelementptr inbounds { ptr, i64, i64 }, ptr %t763, i32 0, i32 1 + %t766 = load i64, ptr %t765 + %t767 = load i64, ptr %a764 + %t768 = icmp slt i64 %t767, %t766 + br i1 %t768, label %each.body380, label %each.end382 +each.body380: + %t769 = load ptr, ptr %t763 + %t770 = getelementptr inbounds { ptr, i64, i64 }, ptr %t769, i64 %t767 + %t771 = load { ptr, i64, i64 }, ptr %t770 + store { ptr, i64, i64 } %t771, ptr %a772 + %t773 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t773, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.229, i64 2, i64 0 }, ptr %a776 + %t777 = call i32 @finch_str_ends(ptr %a774, ptr %a776) + %t778 = icmp ne i32 %t777, 0 + br label %logic.from383 +logic.from383: + br i1 %t778, label %logic.end385, label %logic.rhs384 +logic.rhs384: + %t779 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t779, ptr %a780 + store { ptr, i64, i64 } { ptr @.str.231, i64 2, i64 0 }, ptr %a782 + %t783 = call i32 @finch_str_ends(ptr %a780, ptr %a782) + %t784 = icmp ne i32 %t783, 0 + br label %logic.rend386 +logic.rend386: + br label %logic.end385 +logic.end385: + %t785 = phi i1 [ true, %logic.from383 ], [ %t784, %logic.rend386 ] + br label %logic.from387 +logic.from387: + br i1 %t785, label %logic.end389, label %logic.rhs388 +logic.rhs388: + %t786 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t786, ptr %a787 + store { ptr, i64, i64 } { ptr @.str.233, i64 2, i64 0 }, ptr %a789 + %t790 = call i32 @finch_str_ends(ptr %a787, ptr %a789) + %t791 = icmp ne i32 %t790, 0 + br label %logic.rend390 +logic.rend390: + br label %logic.end389 +logic.end389: + %t792 = phi i1 [ true, %logic.from387 ], [ %t791, %logic.rend390 ] + br i1 %t792, label %then391, label %else392 +then391: + %t793 = getelementptr inbounds { ptr, i64, i64 }, ptr %a643, i32 0, i32 1 + %t794 = load { ptr, i64, i64 }, ptr %a657 + store { ptr, i64, i64 } %t794, ptr %a796 + store { ptr, i64, i64 } { ptr @.str.234, i64 1, i64 0 }, ptr %a797 + call void @finch_str_concat(ptr %a795, ptr %a796, ptr %a797) + %t798 = load { ptr, i64, i64 }, ptr %a795 + %t799 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t798, ptr %a801 + store { ptr, i64, i64 } %t799, ptr %a802 + call void @finch_str_concat(ptr %a800, ptr %a801, ptr %a802) + store { ptr, i64, i64 } %t798, ptr %a803 + call void @finch_str_drop(ptr %a803) + %t804 = load { ptr, i64, i64 }, ptr %a800 + %t805 = load i64, ptr %t793 + %t806 = add i64 %t805, 1 + call void @finch_arr_reserve(ptr %a643, i64 %t806, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t807 = load ptr, ptr %a643 + %t808 = getelementptr inbounds { ptr, i64, i64 }, ptr %t807, i64 %t805 + store { ptr, i64, i64 } %t804, ptr %t808 + store i64 %t806, ptr %t793 + br label %endif393 +else392: + %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a643, i32 0, i32 1 + %t810 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t810, ptr %a811 + call void @finch_str_copy(ptr %a812, ptr %a811) + %t813 = load { ptr, i64, i64 }, ptr %a812 + %t814 = load i64, ptr %t809 + %t815 = add i64 %t814, 1 + call void @finch_arr_reserve(ptr %a643, i64 %t815, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t816 = load ptr, ptr %a643 + %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t814 + store { ptr, i64, i64 } %t813, ptr %t817 + store i64 %t815, ptr %t809 + br label %endif393 +endif393: + br label %each.step381 +each.step381: + %t818 = load i64, ptr %a764 + %t819 = add i64 %t818, 1 + store i64 %t819, ptr %a764 + br label %each.cond379 +each.end382: + call void @finch_str_drop(ptr %a657) + br label %each.step349 +each.step349: + %t820 = load i64, ptr %a645 + %t821 = add i64 %t820, 1 + store i64 %t821, ptr %a645 + br label %each.cond347 +each.end350: + store { ptr, i64, i64 } { ptr @.str.235, i64 0, i64 0 }, ptr %a822 + %t823 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 5 + %t824 = load i1, ptr %t823 + br label %logic.from394 +logic.from394: + br i1 %t824, label %logic.end396, label %logic.rhs395 +logic.rhs395: + %t825 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t826 = load i1, ptr %t825 + br label %logic.rend397 +logic.rend397: + br label %logic.end396 +logic.end396: + %t827 = phi i1 [ true, %logic.from394 ], [ %t826, %logic.rend397 ] + br i1 %t827, label %then398, label %endif400 +then398: + %t828 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 0 + %t829 = load { ptr, i64, i64 }, ptr %t828 + store { ptr, i64, i64 } %t829, ptr %a830 + call void @finch_str_copy(ptr %a831, ptr %a830) + %t832 = load { ptr, i64, i64 }, ptr %a831 + %t833 = load { ptr, i64, i64 }, ptr %a822 + store { ptr, i64, i64 } %t832, ptr %a822 + store { ptr, i64, i64 } %t833, ptr %a834 + call void @finch_str_drop(ptr %a834) + br label %endif400 +endif400: + %t835 = load { ptr, i64, i64 }, ptr %a632 + %t836 = load { ptr, i64, i64 }, ptr %a638 + %t837 = load { ptr, i64, i64 }, ptr %a822 + %t838 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t839 = load i1, ptr %t838 + %t840 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 7 + %t841 = load { ptr, i64, i64 }, ptr %t840 + %t842 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t835, { ptr, i64, i64 } %t836, { ptr, i64, i64 } %t837, i1 %t839, { ptr, i64, i64 } %t841) + %t843 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 0 + %t844 = xor i1 %t843, true + %t845 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 2 + %t846 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 1 + br i1 %t844, label %or.failed401, label %or.ok402 +or.failed401: + store { ptr, i64, i64 } %t845, ptr %a847 + %t848 = load { ptr, i64, i64 }, ptr %a847 + %t849 = extractvalue { ptr, i64, i64 } %t848, 1 + %t850 = trunc i64 %t849 to i32 + %t851 = extractvalue { ptr, i64, i64 } %t848, 0 + %t852 = icmp eq ptr %t851, null + %t853 = select i1 %t852, ptr @.str.236, ptr %t851 + %t854 = call i32 (ptr, ...) @printf(ptr @.str.237, i32 %t850, ptr %t853) + %t855 = call i32 (ptr, ...) @printf(ptr @.str.238) + call void @finch_str_drop(ptr %a847) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 1 +or.ok402: + store %S.cimport.CImports %t846, ptr %a856 + %t857 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 + %t858 = load { ptr, i64, i64 }, ptr %t857 + %t859 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 1 + %t860 = load { ptr, i64, i64 }, ptr %t859 + %t861 = load %S.cimport.CImports, ptr %a856 + %t862 = load i1, ptr %a105 + %t863 = insertvalue %S.gen.Options zeroinitializer, i1 %t862, 0 + %t864 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t864, ptr %a865 + store { ptr, i64, i64 } { ptr @.str.239, i64 5, i64 0 }, ptr %a866 + %t867 = call i32 @finch_str_eq(ptr %a865, ptr %a866) + %t868 = icmp ne i32 %t867, 0 + %t869 = insertvalue %S.gen.Options %t863, i1 %t868, 1 + %t870 = load i1, ptr %a106 + %t871 = insertvalue %S.gen.Options %t869, i1 %t870, 2 + %t872 = call { ptr, i64, i64 } @finch.host.cwd() + %t873 = insertvalue %S.gen.Options %t871, { ptr, i64, i64 } %t872, 3 + %t874 = load %S.platform.Target, ptr %a381 + store %S.platform.Target %t874, ptr %a875 + call void @finch.copy.S_platform_Target(ptr %a876, ptr %a875) + %t877 = load %S.platform.Target, ptr %a876 + %t878 = insertvalue %S.gen.Options %t873, %S.platform.Target %t877, 4 + %t879 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t858, { ptr, i64, i64 } %t860, %S.cimport.CImports %t861, %S.gen.Options %t878) + store %S.gen.Options %t878, ptr %a880 + call void @finch.drop.S_gen_Options(ptr %a880) + store { ptr, i64, i64 } %t879, ptr %a881 + %t882 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t882, ptr %a883 + store { ptr, i64, i64 } { ptr @.str.240, i64 2, i64 0 }, ptr %a884 + %t885 = call i32 @finch_str_eq(ptr %a883, ptr %a884) + %t886 = icmp ne i32 %t885, 0 + br label %logic.from409 +logic.from409: + br i1 %t886, label %logic.end411, label %logic.rhs410 +logic.rhs410: + %t887 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t887, ptr %a888 + store { ptr, i64, i64 } { ptr @.str.241, i64 5, i64 0 }, ptr %a889 + %t890 = call i32 @finch_str_eq(ptr %a888, ptr %a889) + %t891 = icmp ne i32 %t890, 0 + br label %logic.rend412 +logic.rend412: + br label %logic.end411 +logic.end411: + %t892 = phi i1 [ true, %logic.from409 ], [ %t891, %logic.rend412 ] + br i1 %t892, label %then413, label %endif415 +then413: + %t893 = load { ptr, i64, i64 }, ptr %a881 + %t894 = extractvalue { ptr, i64, i64 } %t893, 1 + %t895 = trunc i64 %t894 to i32 + %t896 = extractvalue { ptr, i64, i64 } %t893, 0 + %t897 = icmp eq ptr %t896, null + %t898 = select i1 %t897, ptr @.str.242, ptr %t896 + %t899 = call i32 (ptr, ...) @printf(ptr @.str.243, i32 %t895, ptr %t898) + %t900 = call i32 (ptr, ...) @printf(ptr @.str.244) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 0 +endif415: + %t901 = extractvalue { ptr, i64, i64 } { ptr @.str.245, i64 8, i64 0 }, 0 + %t902 = icmp eq ptr %t901, null + %t903 = select i1 %t902, ptr @.str.246, ptr %t901 + %t904 = call ptr @getenv(ptr %t903) + store { ptr, i64, i64 } zeroinitializer, ptr %a905 + call void @finch_str_from_c(ptr %a905, ptr %t904) + %t906 = load { ptr, i64, i64 }, ptr %a905 + store { ptr, i64, i64 } %t906, ptr %a907 + call void @finch_str_copy(ptr %a908, ptr %a907) + %t909 = load { ptr, i64, i64 }, ptr %a908 + store { ptr, i64, i64 } %t909, ptr %a910 + %t911 = getelementptr inbounds { ptr, i64, i64 }, ptr %a910, i32 0, i32 1 + %t912 = load i64, ptr %t911 + %t913 = icmp eq i64 %t912, 0 + br i1 %t913, label %then439, label %endif441 +then439: + %t914 = load { ptr, i64, i64 }, ptr %a1 + %t915 = extractvalue { ptr, i64, i64 } %t914, 1 + %t916 = icmp uge i64 0, %t915 + br i1 %t916, label %range442, label %inrange443 +range442: + call void @finch_panic_index(ptr @.str.247, i64 296, i64 0, i64 %t915) + unreachable +inrange443: + %t917 = extractvalue { ptr, i64, i64 } %t914, 0 + %t918 = getelementptr inbounds { ptr, i64, i64 }, ptr %t917, i64 0 + %t919 = load { ptr, i64, i64 }, ptr %t918 + %t920 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t919) + store { ptr, i64, i64 } %t920, ptr %a922 + store { ptr, i64, i64 } { ptr @.str.248, i64 22, i64 0 }, ptr %a923 + call void @finch_str_concat(ptr %a921, ptr %a922, ptr %a923) + store { ptr, i64, i64 } %t920, ptr %a924 + call void @finch_str_drop(ptr %a924) + %t925 = load { ptr, i64, i64 }, ptr %a921 + %t926 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t925, ptr %a910 + store { ptr, i64, i64 } %t926, ptr %a927 + call void @finch_str_drop(ptr %a927) + br label %endif441 +endif441: + %t928 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t928, ptr %a929 + %t930 = call i32 @finch_file_exists(ptr %a929) + %t931 = icmp ne i32 %t930, 0 + %t932 = xor i1 %t931, true + br i1 %t932, label %then444, label %endif446 +then444: + %t933 = load { ptr, i64, i64 }, ptr %a1 + %t934 = extractvalue { ptr, i64, i64 } %t933, 1 + %t935 = icmp uge i64 0, %t934 + br i1 %t935, label %range447, label %inrange448 +range447: + call void @finch_panic_index(ptr @.str.249, i64 299, i64 0, i64 %t934) + unreachable +inrange448: + %t936 = extractvalue { ptr, i64, i64 } %t933, 0 + %t937 = getelementptr inbounds { ptr, i64, i64 }, ptr %t936, i64 0 + %t938 = load { ptr, i64, i64 }, ptr %t937 + %t939 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t938) + store { ptr, i64, i64 } %t939, ptr %a941 + store { ptr, i64, i64 } { ptr @.str.250, i64 19, i64 0 }, ptr %a942 + call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) + store { ptr, i64, i64 } %t939, ptr %a943 + call void @finch_str_drop(ptr %a943) + %t944 = load { ptr, i64, i64 }, ptr %a940 + %t945 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t944, ptr %a910 + store { ptr, i64, i64 } %t945, ptr %a946 + call void @finch_str_drop(ptr %a946) + br label %endif446 +endif446: + %t947 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t947, ptr %a948 + %t949 = call i32 @finch_file_exists(ptr %a948) + %t950 = icmp ne i32 %t949, 0 + %t951 = xor i1 %t950, true + br i1 %t951, label %then449, label %endif451 +then449: + %t952 = load { ptr, i64, i64 }, ptr %a1 + %t953 = extractvalue { ptr, i64, i64 } %t952, 1 + %t954 = icmp uge i64 0, %t953 + br i1 %t954, label %range452, label %inrange453 +range452: + call void @finch_panic_index(ptr @.str.251, i64 302, i64 0, i64 %t953) + unreachable +inrange453: + %t955 = extractvalue { ptr, i64, i64 } %t952, 0 + %t956 = getelementptr inbounds { ptr, i64, i64 }, ptr %t955, i64 0 + %t957 = load { ptr, i64, i64 }, ptr %t956 + %t958 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t957) + store { ptr, i64, i64 } %t958, ptr %a960 + store { ptr, i64, i64 } { ptr @.str.252, i64 34, i64 0 }, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t958, ptr %a962 + call void @finch_str_drop(ptr %a962) + %t963 = load { ptr, i64, i64 }, ptr %a959 + %t964 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t963, ptr %a910 + store { ptr, i64, i64 } %t964, ptr %a965 + call void @finch_str_drop(ptr %a965) + br label %endif451 +endif451: + %t966 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t966, ptr %a967 + %t968 = call i32 @finch_file_exists(ptr %a967) + %t969 = icmp ne i32 %t968, 0 + %t970 = xor i1 %t969, true + br label %logic.from454 +logic.from454: + br i1 %t970, label %logic.rhs455, label %logic.end456 +logic.rhs455: + store { ptr, i64, i64 } { ptr @.str.253, i64 18, i64 0 }, ptr %a971 + %t972 = call i32 @finch_file_exists(ptr %a971) + %t973 = icmp ne i32 %t972, 0 + br label %logic.rend457 +logic.rend457: + br label %logic.end456 +logic.end456: + %t974 = phi i1 [ false, %logic.from454 ], [ %t973, %logic.rend457 ] + br i1 %t974, label %then458, label %endif460 +then458: + %t975 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } { ptr @.str.254, i64 18, i64 0 }, ptr %a910 + store { ptr, i64, i64 } %t975, ptr %a976 + call void @finch_str_drop(ptr %a976) + br label %endif460 +endif460: + %t977 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t977, ptr %a978 + %t979 = call i32 @finch_file_exists(ptr %a978) + %t980 = icmp ne i32 %t979, 0 + %t981 = xor i1 %t980, true + br i1 %t981, label %then461, label %endif463 +then461: + %t982 = call { ptr, i64, i64 } @finch.main.unpack() + store { ptr, i64, i64 } %t982, ptr %a984 + store { ptr, i64, i64 } { ptr @.str.255, i64 19, i64 0 }, ptr %a985 + call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) + store { ptr, i64, i64 } %t982, ptr %a986 + call void @finch_str_drop(ptr %a986) + %t987 = load { ptr, i64, i64 }, ptr %a983 + %t988 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t987, ptr %a910 + store { ptr, i64, i64 } %t988, ptr %a989 + call void @finch_str_drop(ptr %a989) + br label %endif463 +endif463: + store { ptr, i64, i64 } { ptr @.str.256, i64 0, i64 0 }, ptr %a990 + %t991 = load i1, ptr %a105 + br i1 %t991, label %then464, label %endif466 +then464: + %t992 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } { ptr @.str.257, i64 6, i64 0 }, ptr %a990 + store { ptr, i64, i64 } %t992, ptr %a993 + call void @finch_str_drop(ptr %a993) + br label %endif466 +endif466: + %t994 = load i1, ptr %a106 + br i1 %t994, label %then467, label %endif469 +then467: + %t995 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t995, ptr %a997 + store { ptr, i64, i64 } { ptr @.str.258, i64 3, i64 0 }, ptr %a998 + call void @finch_str_concat(ptr %a996, ptr %a997, ptr %a998) + %t999 = load { ptr, i64, i64 }, ptr %a996 + %t1000 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t999, ptr %a990 + store { ptr, i64, i64 } %t1000, ptr %a1001 + call void @finch_str_drop(ptr %a1001) + br label %endif469 +endif469: + %t1002 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t1002, ptr %a1003 + call void @finch_str_copy(ptr %a1004, ptr %a1003) + %t1005 = load { ptr, i64, i64 }, ptr %a1004 + %t1006 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t1005, 0 + %t1007 = load { ptr, i64, i64 }, ptr %a881 + store { ptr, i64, i64 } %t1007, ptr %a1008 + call void @finch_str_copy(ptr %a1009, ptr %a1008) + %t1010 = load { ptr, i64, i64 }, ptr %a1009 + %t1011 = insertvalue %S.linker.Build %t1006, { ptr, i64, i64 } %t1010, 1 + %t1012 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t1012, ptr %a1013 + call void @finch_str_copy(ptr %a1014, ptr %a1013) + %t1015 = load { ptr, i64, i64 }, ptr %a1014 + %t1016 = insertvalue %S.linker.Build %t1011, { ptr, i64, i64 } %t1015, 2 + %t1017 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t1017, ptr %a1018 + call void @finch_str_copy(ptr %a1019, ptr %a1018) + %t1020 = load { ptr, i64, i64 }, ptr %a1019 + %t1021 = insertvalue %S.linker.Build %t1016, { ptr, i64, i64 } %t1020, 3 + %t1022 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t1022, ptr %a1023 + call void @finch_str_copy(ptr %a1024, ptr %a1023) + %t1025 = load { ptr, i64, i64 }, ptr %a1024 + %t1026 = insertvalue %S.linker.Build %t1021, { ptr, i64, i64 } %t1025, 4 + %t1027 = load i1, ptr %a105 + %t1028 = insertvalue %S.linker.Build %t1026, i1 %t1027, 5 + %t1029 = load { ptr, i64, i64 }, ptr %a643 + store { ptr, i64, i64 } %t1029, ptr %a1030 + call void @finch.copy.arr_str(ptr %a1031, ptr %a1030) + %t1032 = load { ptr, i64, i64 }, ptr %a1031 + %t1033 = insertvalue %S.linker.Build %t1028, { ptr, i64, i64 } %t1032, 6 + %t1034 = load %S.platform.Target, ptr %a381 + %t1035 = load %S.cimport.CImports, ptr %a856 + %t1036 = call i64 @finch.linker.build(%S.linker.Build %t1033, %S.platform.Target %t1034, %S.cimport.CImports %t1035) + store %S.linker.Build %t1033, ptr %a1037 + call void @finch.drop.S_linker_Build(ptr %a1037) + %t1038 = icmp ne i64 %t1036, 0 + br i1 %t1038, label %then470, label %endif472 +then470: + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 1 +endif472: + %t1039 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t1039, ptr %a1040 + store { ptr, i64, i64 } { ptr @.str.259, i64 3, i64 0 }, ptr %a1041 + %t1042 = call i32 @finch_str_eq(ptr %a1040, ptr %a1041) + %t1043 = icmp ne i32 %t1042, 0 + br i1 %t1043, label %then473, label %endif475 +then473: + store { ptr, i64, i64 } zeroinitializer, ptr %a1044 + store i64 0, ptr %a1045 + br label %each.cond476 +each.cond476: + %t1046 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t1047 = load i64, ptr %t1046 + %t1048 = load i64, ptr %a1045 + %t1049 = icmp slt i64 %t1048, %t1047 + br i1 %t1049, label %each.body477, label %each.end479 +each.body477: + %t1050 = load ptr, ptr %a113 + %t1051 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1050, i64 %t1048 + %t1052 = load { ptr, i64, i64 }, ptr %t1051 + store { ptr, i64, i64 } %t1052, ptr %a1053 + %t1054 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + %t1055 = load { ptr, i64, i64 }, ptr %a1053 + %t1056 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1055) + %t1057 = load i64, ptr %t1054 + %t1058 = add i64 %t1057, 1 + call void @finch_arr_reserve(ptr %a1044, i64 %t1058, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1059 = load ptr, ptr %a1044 + %t1060 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1059, i64 %t1057 + store { ptr, i64, i64 } %t1056, ptr %t1060 + store i64 %t1058, ptr %t1054 + br label %each.step478 +each.step478: + %t1061 = load i64, ptr %a1045 + %t1062 = add i64 %t1061, 1 + store i64 %t1062, ptr %a1045 + br label %each.cond476 +each.end479: + %t1063 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 8 + %t1064 = load { ptr, i64, i64 }, ptr %t1063 + %t1065 = load { ptr, i64, i64 }, ptr %a103 + %t1066 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1065) + store { ptr, i64, i64 } %t1064, ptr %a1068 + store { ptr, i64, i64 } %t1066, ptr %a1069 + call void @finch_str_concat(ptr %a1067, ptr %a1068, ptr %a1069) + store { ptr, i64, i64 } %t1066, ptr %a1070 + call void @finch_str_drop(ptr %a1070) + %t1071 = load { ptr, i64, i64 }, ptr %a1067 + store { ptr, i64, i64 } %t1071, ptr %a1073 + store { ptr, i64, i64 } { ptr @.str.260, i64 1, i64 0 }, ptr %a1074 + call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) + store { ptr, i64, i64 } %t1071, ptr %a1075 + call void @finch_str_drop(ptr %a1075) + %t1076 = load { ptr, i64, i64 }, ptr %a1072 + %t1077 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.261, i64 1, i64 0 }, ptr %a1078 + call void @finch_str_join(ptr %a1079, ptr %a1044, ptr %a1078) + %t1080 = load { ptr, i64, i64 }, ptr %a1079 + store { ptr, i64, i64 } %t1076, ptr %a1082 + store { ptr, i64, i64 } %t1080, ptr %a1083 + call void @finch_str_concat(ptr %a1081, ptr %a1082, ptr %a1083) + store { ptr, i64, i64 } %t1076, ptr %a1084 + call void @finch_str_drop(ptr %a1084) + store { ptr, i64, i64 } %t1080, ptr %a1085 + call void @finch_str_drop(ptr %a1085) + %t1086 = load { ptr, i64, i64 }, ptr %a1081 + %t1087 = call i64 @finch.host.run({ ptr, i64, i64 } %t1086) + store { ptr, i64, i64 } %t1086, ptr %a1088 + call void @finch_str_drop(ptr %a1088) + store i64 %t1087, ptr %a1089 + %t1090 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.host.remove({ ptr, i64, i64 } %t1090) + %t1091 = load i64, ptr %a1089 + call void @finch.drop.arr_str(ptr %a1044) + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 %t1091 +endif475: + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 0 +} + +define internal i1 @finch.lexer.isAlpha(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 97 + br label %logic.from480 +logic.from480: + br i1 %t3, label %logic.rhs481, label %logic.end482 +logic.rhs481: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 122 + br label %logic.rend483 +logic.rend483: + br label %logic.end482 +logic.end482: + %t6 = phi i1 [ false, %logic.from480 ], [ %t5, %logic.rend483 ] + br label %logic.from484 +logic.from484: + br i1 %t6, label %logic.end486, label %logic.rhs485 +logic.rhs485: + %t7 = load i8, ptr %a1 + %t8 = icmp uge i8 %t7, 65 + br label %logic.from487 +logic.from487: + br i1 %t8, label %logic.rhs488, label %logic.end489 +logic.rhs488: + %t9 = load i8, ptr %a1 + %t10 = icmp ule i8 %t9, 90 + br label %logic.rend490 +logic.rend490: + br label %logic.end489 +logic.end489: + %t11 = phi i1 [ false, %logic.from487 ], [ %t10, %logic.rend490 ] + br label %logic.rend491 +logic.rend491: + br label %logic.end486 +logic.end486: + %t12 = phi i1 [ true, %logic.from484 ], [ %t11, %logic.rend491 ] + br label %logic.from492 +logic.from492: + br i1 %t12, label %logic.end494, label %logic.rhs493 +logic.rhs493: + %t13 = load i8, ptr %a1 + %t14 = icmp eq i8 %t13, 95 + br label %logic.rend495 +logic.rend495: + br label %logic.end494 +logic.end494: + %t15 = phi i1 [ true, %logic.from492 ], [ %t14, %logic.rend495 ] + ret i1 %t15 +} + +define internal i1 @finch.lexer.isDigit(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 48 + br label %logic.from496 +logic.from496: + br i1 %t3, label %logic.rhs497, label %logic.end498 +logic.rhs497: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 57 + br label %logic.rend499 +logic.rend499: + br label %logic.end498 +logic.end498: + %t6 = phi i1 [ false, %logic.from496 ], [ %t5, %logic.rend499 ] + ret i1 %t6 +} + +define internal i1 @finch.lexer.isHex(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = call i1 @finch.lexer.isDigit(i8 %t2) + br label %logic.from500 +logic.from500: + br i1 %t3, label %logic.end502, label %logic.rhs501 +logic.rhs501: + %t4 = load i8, ptr %a1 + %t5 = icmp uge i8 %t4, 97 + br label %logic.from503 +logic.from503: + br i1 %t5, label %logic.rhs504, label %logic.end505 +logic.rhs504: + %t6 = load i8, ptr %a1 + %t7 = icmp ule i8 %t6, 102 + br label %logic.rend506 +logic.rend506: + br label %logic.end505 +logic.end505: + %t8 = phi i1 [ false, %logic.from503 ], [ %t7, %logic.rend506 ] + br label %logic.rend507 +logic.rend507: + br label %logic.end502 +logic.end502: + %t9 = phi i1 [ true, %logic.from500 ], [ %t8, %logic.rend507 ] + br label %logic.from508 +logic.from508: + br i1 %t9, label %logic.end510, label %logic.rhs509 +logic.rhs509: + %t10 = load i8, ptr %a1 + %t11 = icmp uge i8 %t10, 65 + br label %logic.from511 +logic.from511: + br i1 %t11, label %logic.rhs512, label %logic.end513 +logic.rhs512: + %t12 = load i8, ptr %a1 + %t13 = icmp ule i8 %t12, 70 + br label %logic.rend514 +logic.rend514: + br label %logic.end513 +logic.end513: + %t14 = phi i1 [ false, %logic.from511 ], [ %t13, %logic.rend514 ] + br label %logic.rend515 +logic.rend515: + br label %logic.end510 +logic.end510: + %t15 = phi i1 [ true, %logic.from508 ], [ %t14, %logic.rend515 ] + ret i1 %t15 +} + +define internal i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca i64, align 16 + %a34 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 21, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.262, i64 2, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.263, i64 6, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.264, i64 2, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.265, i64 4, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.266, i64 5, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.267, i64 3, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.268, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.269, i64 5, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.270, i64 8, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.271, i64 4, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.272, i64 5, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.273, i64 4, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.274, i64 6, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.275, i64 4, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.276, i64 6, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.277, i64 5, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 + store { ptr, i64, i64 } { ptr @.str.278, i64 2, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 + store { ptr, i64, i64 } { ptr @.str.279, i64 3, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 + store { ptr, i64, i64 } { ptr @.str.280, i64 4, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 + store { ptr, i64, i64 } { ptr @.str.281, i64 5, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 + store { ptr, i64, i64 } { ptr @.str.282, i64 6, i64 0 }, ptr %t24 + %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t26 = insertvalue { ptr, i64, i64 } %t25, i64 21, 1 + %t27 = insertvalue { ptr, i64, i64 } %t26, i64 21, 2 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 + %t30 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a31 + %t32 = load i64, ptr %t29 + %t33 = load ptr, ptr %a28 + store i64 0, ptr %a34 + br label %find.cond516 +find.cond516: + %t35 = load i64, ptr %a34 + %t36 = icmp slt i64 %t35, %t32 + br i1 %t36, label %find.body517, label %find.end520 +find.body517: + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t35 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + store { ptr, i64, i64 } %t30, ptr %a40 + %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br i1 %t42, label %find.hit518, label %find.next519 +find.hit518: + store i64 %t35, ptr %a31 + br label %find.end520 +find.next519: + %t43 = add i64 %t35, 1 + store i64 %t43, ptr %a34 + br label %find.cond516 +find.end520: + %t44 = load i64, ptr %a31 + %t45 = icmp sge i64 %t44, 0 + call void @finch.drop.arr_str(ptr %a28) + ret i1 %t45 +} + +define internal void @finch.lexer.fail(ptr %p0, i64 %p1, i64 %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store i64 %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic521, label %ok522 +panic521: + call void @finch_panic(ptr @.str.283, i64 41, ptr @.str.284) + unreachable +ok522: + %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %t7 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.285, i64 1, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + %t13 = load i64, ptr %a2 + call void @finch_str_from_int(ptr %a14, i64 %t13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.286, i64 1, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a28, i64 %t27) + %t29 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t26, ptr %a33 + call void @finch_str_drop(ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.287, i64 9, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t40, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t40, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = trunc i64 %t47 to i32 + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = icmp eq ptr %t49, null + %t51 = select i1 %t50, ptr @.str.288, ptr %t49 + %t52 = call i32 (ptr, ...) @printf(ptr @.str.289, i32 %t48, ptr %t51) + store { ptr, i64, i64 } %t46, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = call i32 (ptr, ...) @printf(ptr @.str.290) + %t55 = trunc i64 1 to i32 + %t56 = call i32 @fflush(ptr null) + call void @exit(i32 %t55) + ret void +} + +define internal i8 @finch.lexer.peek(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic523, label %ok524 +panic523: + call void @finch_panic(ptr @.str.291, i64 46, ptr @.str.292) + unreachable +ok524: + %t5 = getelementptr inbounds %S.lexer.Lexer, ptr %t3, i32 0, i32 2 + %t6 = load i64, ptr %t5 + %t7 = load i64, ptr %a2 + %t8 = add i64 %t6, %t7 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic525, label %ok526 +panic525: + call void @finch_panic(ptr @.str.293, i64 46, ptr @.str.294) + unreachable +ok526: + %t11 = getelementptr inbounds %S.lexer.Lexer, ptr %t9, i32 0, i32 0 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = icmp slt i64 %t8, %t13 + br i1 %t14, label %then527, label %endif529 +then527: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic530, label %ok531 +panic530: + call void @finch_panic(ptr @.str.295, i64 47, ptr @.str.296) + unreachable +ok531: + %t17 = getelementptr inbounds %S.lexer.Lexer, ptr %t15, i32 0, i32 0 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic532, label %ok533 +panic532: + call void @finch_panic(ptr @.str.297, i64 47, ptr @.str.298) + unreachable +ok533: + %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 2 + %t21 = load i64, ptr %t20 + %t22 = load i64, ptr %a2 + %t23 = add i64 %t21, %t22 + %t24 = load { ptr, i64, i64 }, ptr %t17 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range534, label %inrange535 +range534: + call void @finch_panic_index(ptr @.str.299, i64 47, i64 %t23, i64 %t25) + unreachable +inrange535: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 + %t29 = load i8, ptr %t28 + ret i8 %t29 +endif529: + %t30 = trunc i64 0 to i8 + ret i8 %t30 +} + +define internal void @finch.lexer.advance(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a15 = alloca i8, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic536, label %ok537 +panic536: + call void @finch_panic(ptr @.str.300, i64 53, ptr @.str.301) + unreachable +ok537: + %t4 = getelementptr inbounds %S.lexer.Lexer, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic538, label %ok539 +panic538: + call void @finch_panic(ptr @.str.302, i64 53, ptr @.str.303) + unreachable +ok539: + %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 2 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range540, label %inrange541 +range540: + call void @finch_panic_index(ptr @.str.304, i64 53, i64 %t8, i64 %t10) + unreachable +inrange541: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 + %t14 = load i8, ptr %t13 + store i8 %t14, ptr %a15 + %t16 = load i8, ptr %a15 + %t17 = icmp eq i8 %t16, 10 + br i1 %t17, label %then542, label %else543 +then542: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic545, label %ok546 +panic545: + call void @finch_panic(ptr @.str.305, i64 55, ptr @.str.306) + unreachable +ok546: + %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 3 + %t21 = load i64, ptr %t20 + %t22 = add i64 %t21, 1 + store i64 %t22, ptr %t20 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic547, label %ok548 +panic547: + call void @finch_panic(ptr @.str.307, i64 56, ptr @.str.308) + unreachable +ok548: + %t25 = getelementptr inbounds %S.lexer.Lexer, ptr %t23, i32 0, i32 4 + store i64 1, ptr %t25 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic549, label %ok550 +panic549: + call void @finch_panic(ptr @.str.309, i64 57, ptr @.str.310) + unreachable +ok550: + %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 5 + store i1 true, ptr %t28 + br label %endif544 +else543: + %t29 = load i8, ptr %a15 + %t30 = zext i8 %t29 to i64 + %t31 = and i64 %t30, 192 + %t32 = icmp ne i64 %t31, 128 + br i1 %t32, label %then551, label %endif553 +then551: + %t33 = load ptr, ptr %a1 + %t34 = icmp eq ptr %t33, null + br i1 %t34, label %panic554, label %ok555 +panic554: + call void @finch_panic(ptr @.str.311, i64 59, ptr @.str.312) + unreachable +ok555: + %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 4 + %t36 = load i64, ptr %t35 + %t37 = add i64 %t36, 1 + store i64 %t37, ptr %t35 + br label %endif553 +endif553: + br label %endif544 +endif544: + %t38 = load ptr, ptr %a1 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic556, label %ok557 +panic556: + call void @finch_panic(ptr @.str.313, i64 61, ptr @.str.314) + unreachable +ok557: + %t40 = getelementptr inbounds %S.lexer.Lexer, ptr %t38, i32 0, i32 2 + %t41 = load i64, ptr %t40 + %t42 = add i64 %t41, 1 + store i64 %t42, ptr %t40 + ret void +} + +define internal { ptr, i64, i64 } @finch.lexer.operator(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca i64, align 16 + %a57 = alloca i64, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.315, i64 2, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.316, i64 2, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.317, i64 2, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.318, i64 2, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.319, i64 2, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.320, i64 2, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.321, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.322, i64 2, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.323, i64 2, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.324, i64 2, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.325, i64 2, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.326, i64 2, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.327, i64 2, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.328, i64 2, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.329, i64 2, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.330, i64 2, i64 0 }, ptr %t19 + %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 + %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic558, label %ok559 +panic558: + call void @finch_panic(ptr @.str.331, i64 67, ptr @.str.332) + unreachable +ok559: + %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 2 + %t27 = load i64, ptr %t26 + %t28 = add i64 %t27, 1 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic560, label %ok561 +panic560: + call void @finch_panic(ptr @.str.333, i64 67, ptr @.str.334) + unreachable +ok561: + %t31 = getelementptr inbounds %S.lexer.Lexer, ptr %t29, i32 0, i32 0 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = icmp slt i64 %t28, %t33 + br i1 %t34, label %then562, label %endif564 +then562: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic565, label %ok566 +panic565: + call void @finch_panic(ptr @.str.335, i64 68, ptr @.str.336) + unreachable +ok566: + %t37 = getelementptr inbounds %S.lexer.Lexer, ptr %t35, i32 0, i32 0 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic567, label %ok568 +panic567: + call void @finch_panic(ptr @.str.338, i64 68, ptr @.str.339) + unreachable +ok568: + %t43 = getelementptr inbounds %S.lexer.Lexer, ptr %t41, i32 0, i32 2 + %t44 = load i64, ptr %t43 + %t45 = load ptr, ptr %a1 + %t46 = icmp eq ptr %t45, null + br i1 %t46, label %panic569, label %ok570 +panic569: + call void @finch_panic(ptr @.str.340, i64 68, ptr @.str.341) + unreachable +ok570: + %t47 = getelementptr inbounds %S.lexer.Lexer, ptr %t45, i32 0, i32 2 + %t48 = load i64, ptr %t47 + %t49 = add i64 %t48, 2 + call void @finch_str_sub(ptr %a40, ptr %a39, i64 %t44, i64 %t49, ptr @.str.337, i64 68) + %t50 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 + %t53 = load { ptr, i64, i64 }, ptr %a51 + store i64 -1, ptr %a54 + %t55 = load i64, ptr %t52 + %t56 = load ptr, ptr %a23 + store i64 0, ptr %a57 + br label %find.cond571 +find.cond571: + %t58 = load i64, ptr %a57 + %t59 = icmp slt i64 %t58, %t55 + br i1 %t59, label %find.body572, label %find.end575 +find.body572: + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i64 %t58 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + store { ptr, i64, i64 } %t53, ptr %a63 + %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) + %t65 = icmp ne i32 %t64, 0 + br i1 %t65, label %find.hit573, label %find.next574 +find.hit573: + store i64 %t58, ptr %a54 + br label %find.end575 +find.next574: + %t66 = add i64 %t58, 1 + store i64 %t66, ptr %a57 + br label %find.cond571 +find.end575: + %t67 = load i64, ptr %a54 + %t68 = icmp sge i64 %t67, 0 + br i1 %t68, label %then576, label %endif578 +then576: + %t69 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.drop.arr_str(ptr %a23) + ret { ptr, i64, i64 } %t69 +endif578: + call void @finch_str_drop(ptr %a51) + br label %endif564 +endif564: + store { ptr, i64, i64 } { ptr @.str.342, i64 22, i64 0 }, ptr %a70 + %t71 = load ptr, ptr %a1 + %t72 = icmp eq ptr %t71, null + br i1 %t72, label %panic579, label %ok580 +panic579: + call void @finch_panic(ptr @.str.343, i64 74, ptr @.str.344) + unreachable +ok580: + %t73 = getelementptr inbounds %S.lexer.Lexer, ptr %t71, i32 0, i32 0 + %t74 = load { ptr, i64, i64 }, ptr %t73 + store { ptr, i64, i64 } %t74, ptr %a75 + %t77 = load ptr, ptr %a1 + %t78 = icmp eq ptr %t77, null + br i1 %t78, label %panic581, label %ok582 +panic581: + call void @finch_panic(ptr @.str.346, i64 74, ptr @.str.347) + unreachable +ok582: + %t79 = getelementptr inbounds %S.lexer.Lexer, ptr %t77, i32 0, i32 2 + %t80 = load i64, ptr %t79 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic583, label %ok584 +panic583: + call void @finch_panic(ptr @.str.348, i64 74, ptr @.str.349) + unreachable +ok584: + %t83 = getelementptr inbounds %S.lexer.Lexer, ptr %t81, i32 0, i32 2 + %t84 = load i64, ptr %t83 + %t85 = add i64 %t84, 1 + call void @finch_str_sub(ptr %a76, ptr %a75, i64 %t80, i64 %t85, ptr @.str.345, i64 74) + %t86 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t86, ptr %a87 + %t88 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t88, ptr %a89 + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i64 @finch_str_find(ptr %a89, ptr %a92) + %t94 = icmp sge i64 %t93, 0 + br i1 %t94, label %then585, label %endif587 +then585: + %t95 = load { ptr, i64, i64 }, ptr %a87 + call void @finch_str_drop(ptr %a70) + call void @finch.drop.arr_str(ptr %a23) + ret { ptr, i64, i64 } %t95 +endif587: + call void @finch_str_drop(ptr %a87) + call void @finch_str_drop(ptr %a70) + call void @finch.drop.arr_str(ptr %a23) + ret { ptr, i64, i64 } { ptr @.str.351, i64 0, i64 0 } +} + +define internal i8 @finch.lexer.escape(ptr %p0, i8 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i8, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i8 %p1, ptr %a2 + %t3 = load i8, ptr %a2 + %t4 = icmp eq i8 %t3, 110 + br i1 %t4, label %then588, label %endif590 +then588: + ret i8 10 +endif590: + %t5 = load i8, ptr %a2 + %t6 = icmp eq i8 %t5, 116 + br i1 %t6, label %then591, label %endif593 +then591: + ret i8 9 +endif593: + %t7 = load i8, ptr %a2 + %t8 = icmp eq i8 %t7, 114 + br i1 %t8, label %then594, label %endif596 +then594: + ret i8 13 +endif596: + %t9 = load i8, ptr %a2 + %t10 = icmp eq i8 %t9, 48 + br i1 %t10, label %then597, label %endif599 +then597: + %t11 = trunc i64 0 to i8 + ret i8 %t11 +endif599: + %t12 = load i8, ptr %a2 + %t13 = icmp eq i8 %t12, 92 + br label %logic.from600 +logic.from600: + br i1 %t13, label %logic.end602, label %logic.rhs601 +logic.rhs601: + %t14 = load i8, ptr %a2 + %t15 = icmp eq i8 %t14, 34 + br label %logic.rend603 +logic.rend603: + br label %logic.end602 +logic.end602: + %t16 = phi i1 [ true, %logic.from600 ], [ %t15, %logic.rend603 ] + br label %logic.from604 +logic.from604: + br i1 %t16, label %logic.end606, label %logic.rhs605 +logic.rhs605: + %t17 = load i8, ptr %a2 + %t18 = icmp eq i8 %t17, 39 + br label %logic.rend607 +logic.rend607: + br label %logic.end606 +logic.end606: + %t19 = phi i1 [ true, %logic.from604 ], [ %t18, %logic.rend607 ] + br i1 %t19, label %then608, label %endif610 +then608: + %t20 = load i8, ptr %a2 + ret i8 %t20 +endif610: + %t21 = load ptr, ptr %a1 + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic611, label %ok612 +panic611: + call void @finch_panic(ptr @.str.352, i64 97, ptr @.str.353) + unreachable +ok612: + %t24 = getelementptr inbounds %S.lexer.Lexer, ptr %t22, i32 0, i32 3 + %t25 = load i64, ptr %t24 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic613, label %ok614 +panic613: + call void @finch_panic(ptr @.str.354, i64 97, ptr @.str.355) + unreachable +ok614: + %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 4 + %t29 = load i64, ptr %t28 + %t30 = sub i64 %t29, 1 + %t31 = load i8, ptr %a2 + call void @finch_str_from_char(ptr %a32, i8 signext %t31) + %t33 = load { ptr, i64, i64 }, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.356, i64 16, i64 0 }, ptr %a35 + store { ptr, i64, i64 } %t33, ptr %a36 + call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a34 + call void @finch.lexer.fail(ptr %t21, i64 %t25, i64 %t30, { ptr, i64, i64 } %t38) + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load i8, ptr %a2 + ret i8 %t40 +} + +define internal void @finch.copy.S_lexer_Token(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lexer.Token, ptr %src + store %S.lexer.Token %t1, ptr %dst + %t2 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.drop.S_lexer_Lexer(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lexer.Lexer, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lexer.Lexer, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca %S.lexer.Lexer, align 16 + %a18 = alloca ptr, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca i8, align 16 + %a98 = alloca i64, align 16 + %a103 = alloca i64, align 16 + %a169 = alloca %S.lexer.Token, align 16 + %a177 = alloca i64, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca i8, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca i8, align 16 + %a471 = alloca i8, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca i64, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca i64, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca %S.lexer.Token, align 16 + %a593 = alloca %S.lexer.Token, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + %t7 = insertvalue %S.lexer.Lexer zeroinitializer, { ptr, i64, i64 } %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch_str_copy(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + %t12 = insertvalue %S.lexer.Lexer %t7, { ptr, i64, i64 } %t11, 1 + %t13 = insertvalue %S.lexer.Lexer %t12, i64 0, 2 + %t14 = insertvalue %S.lexer.Lexer %t13, i64 1, 3 + %t15 = insertvalue %S.lexer.Lexer %t14, i64 1, 4 + %t16 = insertvalue %S.lexer.Lexer %t15, i1 true, 5 + store %S.lexer.Lexer %t16, ptr %a17 + store ptr %a17, ptr %a18 + store { ptr, i64, i64 } zeroinitializer, ptr %a19 + br label %while.cond615 +while.cond615: + %t20 = load ptr, ptr %a18 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic618, label %ok619 +panic618: + call void @finch_panic(ptr @.str.357, i64 105, ptr @.str.358) + unreachable +ok619: + %t22 = getelementptr inbounds %S.lexer.Lexer, ptr %t20, i32 0, i32 2 + %t23 = load i64, ptr %t22 + %t24 = load ptr, ptr %a18 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic620, label %ok621 +panic620: + call void @finch_panic(ptr @.str.359, i64 105, ptr @.str.360) + unreachable +ok621: + %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = icmp slt i64 %t23, %t28 + br i1 %t29, label %while.body616, label %while.end617 +while.body616: + %t30 = load ptr, ptr %a18 + %t31 = icmp eq ptr %t30, null + br i1 %t31, label %panic622, label %ok623 +panic622: + call void @finch_panic(ptr @.str.361, i64 106, ptr @.str.362) + unreachable +ok623: + %t32 = getelementptr inbounds %S.lexer.Lexer, ptr %t30, i32 0, i32 0 + %t33 = load ptr, ptr %a18 + %t34 = icmp eq ptr %t33, null + br i1 %t34, label %panic624, label %ok625 +panic624: + call void @finch_panic(ptr @.str.363, i64 106, ptr @.str.364) + unreachable +ok625: + %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 2 + %t36 = load i64, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %t32 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range626, label %inrange627 +range626: + call void @finch_panic_index(ptr @.str.365, i64 106, i64 %t36, i64 %t38) + unreachable +inrange627: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds i8, ptr %t40, i64 %t36 + %t42 = load i8, ptr %t41 + store i8 %t42, ptr %a43 + %t44 = load i8, ptr %a43 + %t45 = icmp eq i8 %t44, 32 + br label %logic.from628 +logic.from628: + br i1 %t45, label %logic.end630, label %logic.rhs629 +logic.rhs629: + %t46 = load i8, ptr %a43 + %t47 = icmp eq i8 %t46, 9 + br label %logic.rend631 +logic.rend631: + br label %logic.end630 +logic.end630: + %t48 = phi i1 [ true, %logic.from628 ], [ %t47, %logic.rend631 ] + br label %logic.from632 +logic.from632: + br i1 %t48, label %logic.end634, label %logic.rhs633 +logic.rhs633: + %t49 = load i8, ptr %a43 + %t50 = icmp eq i8 %t49, 10 + br label %logic.rend635 +logic.rend635: + br label %logic.end634 +logic.end634: + %t51 = phi i1 [ true, %logic.from632 ], [ %t50, %logic.rend635 ] + br label %logic.from636 +logic.from636: + br i1 %t51, label %logic.end638, label %logic.rhs637 +logic.rhs637: + %t52 = load i8, ptr %a43 + %t53 = icmp eq i8 %t52, 13 + br label %logic.rend639 +logic.rend639: + br label %logic.end638 +logic.end638: + %t54 = phi i1 [ true, %logic.from636 ], [ %t53, %logic.rend639 ] + br i1 %t54, label %then640, label %endif642 +then640: + %t55 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t55) + br label %while.cond615 +endif642: + %t56 = load i8, ptr %a43 + %t57 = icmp eq i8 %t56, 47 + br label %logic.from643 +logic.from643: + br i1 %t57, label %logic.rhs644, label %logic.end645 +logic.rhs644: + %t58 = load ptr, ptr %a18 + %t59 = call i8 @finch.lexer.peek(ptr %t58, i64 1) + %t60 = icmp eq i8 %t59, 47 + br label %logic.rend646 +logic.rend646: + br label %logic.end645 +logic.end645: + %t61 = phi i1 [ false, %logic.from643 ], [ %t60, %logic.rend646 ] + br i1 %t61, label %then647, label %endif649 +then647: + br label %while.cond650 +while.cond650: + %t62 = load ptr, ptr %a18 + %t63 = icmp eq ptr %t62, null + br i1 %t63, label %panic653, label %ok654 +panic653: + call void @finch_panic(ptr @.str.366, i64 112, ptr @.str.367) + unreachable +ok654: + %t64 = getelementptr inbounds %S.lexer.Lexer, ptr %t62, i32 0, i32 2 + %t65 = load i64, ptr %t64 + %t66 = load ptr, ptr %a18 + %t67 = icmp eq ptr %t66, null + br i1 %t67, label %panic655, label %ok656 +panic655: + call void @finch_panic(ptr @.str.368, i64 112, ptr @.str.369) + unreachable +ok656: + %t68 = getelementptr inbounds %S.lexer.Lexer, ptr %t66, i32 0, i32 0 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = icmp slt i64 %t65, %t70 + br label %logic.from657 +logic.from657: + br i1 %t71, label %logic.rhs658, label %logic.end659 +logic.rhs658: + %t72 = load ptr, ptr %a18 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic660, label %ok661 +panic660: + call void @finch_panic(ptr @.str.370, i64 112, ptr @.str.371) + unreachable +ok661: + %t74 = getelementptr inbounds %S.lexer.Lexer, ptr %t72, i32 0, i32 0 + %t75 = load ptr, ptr %a18 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic662, label %ok663 +panic662: + call void @finch_panic(ptr @.str.372, i64 112, ptr @.str.373) + unreachable +ok663: + %t77 = getelementptr inbounds %S.lexer.Lexer, ptr %t75, i32 0, i32 2 + %t78 = load i64, ptr %t77 + %t79 = load { ptr, i64, i64 }, ptr %t74 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range664, label %inrange665 +range664: + call void @finch_panic_index(ptr @.str.374, i64 112, i64 %t78, i64 %t80) + unreachable +inrange665: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds i8, ptr %t82, i64 %t78 + %t84 = load i8, ptr %t83 + %t85 = icmp ne i8 %t84, 10 + br label %logic.rend666 +logic.rend666: + br label %logic.end659 +logic.end659: + %t86 = phi i1 [ false, %logic.from657 ], [ %t85, %logic.rend666 ] + br i1 %t86, label %while.body651, label %while.end652 +while.body651: + %t87 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t87) + br label %while.cond650 +while.end652: + br label %while.cond615 +endif649: + %t88 = load i8, ptr %a43 + %t89 = icmp eq i8 %t88, 47 + br label %logic.from667 +logic.from667: + br i1 %t89, label %logic.rhs668, label %logic.end669 +logic.rhs668: + %t90 = load ptr, ptr %a18 + %t91 = call i8 @finch.lexer.peek(ptr %t90, i64 1) + %t92 = icmp eq i8 %t91, 42 + br label %logic.rend670 +logic.rend670: + br label %logic.end669 +logic.end669: + %t93 = phi i1 [ false, %logic.from667 ], [ %t92, %logic.rend670 ] + br i1 %t93, label %then671, label %endif673 +then671: + %t94 = load ptr, ptr %a18 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic674, label %ok675 +panic674: + call void @finch_panic(ptr @.str.375, i64 118, ptr @.str.376) + unreachable +ok675: + %t96 = getelementptr inbounds %S.lexer.Lexer, ptr %t94, i32 0, i32 3 + %t97 = load i64, ptr %t96 + store i64 %t97, ptr %a98 + %t99 = load ptr, ptr %a18 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic676, label %ok677 +panic676: + call void @finch_panic(ptr @.str.377, i64 119, ptr @.str.378) + unreachable +ok677: + %t101 = getelementptr inbounds %S.lexer.Lexer, ptr %t99, i32 0, i32 4 + %t102 = load i64, ptr %t101 + store i64 %t102, ptr %a103 + %t104 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t104) + %t105 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t105) + br label %while.cond678 +while.cond678: + %t106 = load ptr, ptr %a18 + %t107 = icmp eq ptr %t106, null + br i1 %t107, label %panic681, label %ok682 +panic681: + call void @finch_panic(ptr @.str.379, i64 122, ptr @.str.380) + unreachable +ok682: + %t108 = getelementptr inbounds %S.lexer.Lexer, ptr %t106, i32 0, i32 2 + %t109 = load i64, ptr %t108 + %t110 = load ptr, ptr %a18 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic683, label %ok684 +panic683: + call void @finch_panic(ptr @.str.381, i64 122, ptr @.str.382) + unreachable +ok684: + %t112 = getelementptr inbounds %S.lexer.Lexer, ptr %t110, i32 0, i32 0 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = icmp slt i64 %t109, %t114 + br label %logic.from685 +logic.from685: + br i1 %t115, label %logic.rhs686, label %logic.end687 +logic.rhs686: + %t116 = load ptr, ptr %a18 + %t117 = icmp eq ptr %t116, null + br i1 %t117, label %panic688, label %ok689 +panic688: + call void @finch_panic(ptr @.str.383, i64 122, ptr @.str.384) + unreachable +ok689: + %t118 = getelementptr inbounds %S.lexer.Lexer, ptr %t116, i32 0, i32 0 + %t119 = load ptr, ptr %a18 + %t120 = icmp eq ptr %t119, null + br i1 %t120, label %panic690, label %ok691 +panic690: + call void @finch_panic(ptr @.str.385, i64 122, ptr @.str.386) + unreachable +ok691: + %t121 = getelementptr inbounds %S.lexer.Lexer, ptr %t119, i32 0, i32 2 + %t122 = load i64, ptr %t121 + %t123 = load { ptr, i64, i64 }, ptr %t118 + %t124 = extractvalue { ptr, i64, i64 } %t123, 1 + %t125 = icmp uge i64 %t122, %t124 + br i1 %t125, label %range692, label %inrange693 +range692: + call void @finch_panic_index(ptr @.str.387, i64 122, i64 %t122, i64 %t124) + unreachable +inrange693: + %t126 = extractvalue { ptr, i64, i64 } %t123, 0 + %t127 = getelementptr inbounds i8, ptr %t126, i64 %t122 + %t128 = load i8, ptr %t127 + %t129 = icmp eq i8 %t128, 42 + br label %logic.from694 +logic.from694: + br i1 %t129, label %logic.rhs695, label %logic.end696 +logic.rhs695: + %t130 = load ptr, ptr %a18 + %t131 = call i8 @finch.lexer.peek(ptr %t130, i64 1) + %t132 = icmp eq i8 %t131, 47 + br label %logic.rend697 +logic.rend697: + br label %logic.end696 +logic.end696: + %t133 = phi i1 [ false, %logic.from694 ], [ %t132, %logic.rend697 ] + %t134 = xor i1 %t133, true + br label %logic.rend698 +logic.rend698: + br label %logic.end687 +logic.end687: + %t135 = phi i1 [ false, %logic.from685 ], [ %t134, %logic.rend698 ] + br i1 %t135, label %while.body679, label %while.end680 +while.body679: + %t136 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t136) + br label %while.cond678 +while.end680: + %t137 = load ptr, ptr %a18 + %t138 = icmp eq ptr %t137, null + br i1 %t138, label %panic699, label %ok700 +panic699: + call void @finch_panic(ptr @.str.388, i64 125, ptr @.str.389) + unreachable +ok700: + %t139 = getelementptr inbounds %S.lexer.Lexer, ptr %t137, i32 0, i32 2 + %t140 = load i64, ptr %t139 + %t141 = load ptr, ptr %a18 + %t142 = icmp eq ptr %t141, null + br i1 %t142, label %panic701, label %ok702 +panic701: + call void @finch_panic(ptr @.str.390, i64 125, ptr @.str.391) + unreachable +ok702: + %t143 = getelementptr inbounds %S.lexer.Lexer, ptr %t141, i32 0, i32 0 + %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 + %t145 = load i64, ptr %t144 + %t146 = icmp sge i64 %t140, %t145 + br i1 %t146, label %then703, label %endif705 +then703: + %t147 = load ptr, ptr %a18 + %t148 = load i64, ptr %a98 + %t149 = load i64, ptr %a103 + call void @finch.lexer.fail(ptr %t147, i64 %t148, i64 %t149, { ptr, i64, i64 } { ptr @.str.392, i64 36, i64 0 }) + br label %endif705 +endif705: + %t150 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t150) + %t151 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t151) + br label %while.cond615 +endif673: + %t152 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.393, i64 0, i64 0 }, 0 + %t153 = insertvalue %S.lexer.Token %t152, { ptr, i64, i64 } { ptr @.str.394, i64 0, i64 0 }, 1 + %t154 = load ptr, ptr %a18 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic706, label %ok707 +panic706: + call void @finch_panic(ptr @.str.395, i64 133, ptr @.str.396) + unreachable +ok707: + %t156 = getelementptr inbounds %S.lexer.Lexer, ptr %t154, i32 0, i32 3 + %t157 = load i64, ptr %t156 + %t158 = insertvalue %S.lexer.Token %t153, i64 %t157, 2 + %t159 = load ptr, ptr %a18 + %t160 = icmp eq ptr %t159, null + br i1 %t160, label %panic708, label %ok709 +panic708: + call void @finch_panic(ptr @.str.397, i64 133, ptr @.str.398) + unreachable +ok709: + %t161 = getelementptr inbounds %S.lexer.Lexer, ptr %t159, i32 0, i32 4 + %t162 = load i64, ptr %t161 + %t163 = insertvalue %S.lexer.Token %t158, i64 %t162, 3 + %t164 = load ptr, ptr %a18 + %t165 = icmp eq ptr %t164, null + br i1 %t165, label %panic710, label %ok711 +panic710: + call void @finch_panic(ptr @.str.399, i64 133, ptr @.str.400) + unreachable +ok711: + %t166 = getelementptr inbounds %S.lexer.Lexer, ptr %t164, i32 0, i32 5 + %t167 = load i1, ptr %t166 + %t168 = insertvalue %S.lexer.Token %t163, i1 %t167, 4 + store %S.lexer.Token %t168, ptr %a169 + %t170 = load ptr, ptr %a18 + %t171 = icmp eq ptr %t170, null + br i1 %t171, label %panic712, label %ok713 +panic712: + call void @finch_panic(ptr @.str.401, i64 134, ptr @.str.402) + unreachable +ok713: + %t172 = getelementptr inbounds %S.lexer.Lexer, ptr %t170, i32 0, i32 5 + store i1 false, ptr %t172 + %t173 = load ptr, ptr %a18 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic714, label %ok715 +panic714: + call void @finch_panic(ptr @.str.403, i64 135, ptr @.str.404) + unreachable +ok715: + %t175 = getelementptr inbounds %S.lexer.Lexer, ptr %t173, i32 0, i32 2 + %t176 = load i64, ptr %t175 + store i64 %t176, ptr %a177 + %t178 = load i8, ptr %a43 + %t179 = call i1 @finch.lexer.isAlpha(i8 %t178) + br i1 %t179, label %then716, label %else717 +then716: + br label %while.cond719 +while.cond719: + %t180 = load ptr, ptr %a18 + %t181 = icmp eq ptr %t180, null + br i1 %t181, label %panic722, label %ok723 +panic722: + call void @finch_panic(ptr @.str.405, i64 137, ptr @.str.406) + unreachable +ok723: + %t182 = getelementptr inbounds %S.lexer.Lexer, ptr %t180, i32 0, i32 2 + %t183 = load i64, ptr %t182 + %t184 = load ptr, ptr %a18 + %t185 = icmp eq ptr %t184, null + br i1 %t185, label %panic724, label %ok725 +panic724: + call void @finch_panic(ptr @.str.407, i64 137, ptr @.str.408) + unreachable +ok725: + %t186 = getelementptr inbounds %S.lexer.Lexer, ptr %t184, i32 0, i32 0 + %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1 + %t188 = load i64, ptr %t187 + %t189 = icmp slt i64 %t183, %t188 + br label %logic.from726 +logic.from726: + br i1 %t189, label %logic.rhs727, label %logic.end728 +logic.rhs727: + %t190 = load ptr, ptr %a18 + %t191 = icmp eq ptr %t190, null + br i1 %t191, label %panic729, label %ok730 +panic729: + call void @finch_panic(ptr @.str.409, i64 137, ptr @.str.410) + unreachable +ok730: + %t192 = getelementptr inbounds %S.lexer.Lexer, ptr %t190, i32 0, i32 0 + %t193 = load ptr, ptr %a18 + %t194 = icmp eq ptr %t193, null + br i1 %t194, label %panic731, label %ok732 +panic731: + call void @finch_panic(ptr @.str.411, i64 137, ptr @.str.412) + unreachable +ok732: + %t195 = getelementptr inbounds %S.lexer.Lexer, ptr %t193, i32 0, i32 2 + %t196 = load i64, ptr %t195 + %t197 = load { ptr, i64, i64 }, ptr %t192 + %t198 = extractvalue { ptr, i64, i64 } %t197, 1 + %t199 = icmp uge i64 %t196, %t198 + br i1 %t199, label %range733, label %inrange734 +range733: + call void @finch_panic_index(ptr @.str.413, i64 137, i64 %t196, i64 %t198) + unreachable +inrange734: + %t200 = extractvalue { ptr, i64, i64 } %t197, 0 + %t201 = getelementptr inbounds i8, ptr %t200, i64 %t196 + %t202 = load i8, ptr %t201 + %t203 = call i1 @finch.lexer.isAlpha(i8 %t202) + br label %logic.from735 +logic.from735: + br i1 %t203, label %logic.end737, label %logic.rhs736 +logic.rhs736: + %t204 = load ptr, ptr %a18 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic738, label %ok739 +panic738: + call void @finch_panic(ptr @.str.414, i64 137, ptr @.str.415) + unreachable +ok739: + %t206 = getelementptr inbounds %S.lexer.Lexer, ptr %t204, i32 0, i32 0 + %t207 = load ptr, ptr %a18 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic740, label %ok741 +panic740: + call void @finch_panic(ptr @.str.416, i64 137, ptr @.str.417) + unreachable +ok741: + %t209 = getelementptr inbounds %S.lexer.Lexer, ptr %t207, i32 0, i32 2 + %t210 = load i64, ptr %t209 + %t211 = load { ptr, i64, i64 }, ptr %t206 + %t212 = extractvalue { ptr, i64, i64 } %t211, 1 + %t213 = icmp uge i64 %t210, %t212 + br i1 %t213, label %range742, label %inrange743 +range742: + call void @finch_panic_index(ptr @.str.418, i64 137, i64 %t210, i64 %t212) + unreachable +inrange743: + %t214 = extractvalue { ptr, i64, i64 } %t211, 0 + %t215 = getelementptr inbounds i8, ptr %t214, i64 %t210 + %t216 = load i8, ptr %t215 + %t217 = call i1 @finch.lexer.isDigit(i8 %t216) + br label %logic.rend744 +logic.rend744: + br label %logic.end737 +logic.end737: + %t218 = phi i1 [ true, %logic.from735 ], [ %t217, %logic.rend744 ] + br label %logic.rend745 +logic.rend745: + br label %logic.end728 +logic.end728: + %t219 = phi i1 [ false, %logic.from726 ], [ %t218, %logic.rend745 ] + br i1 %t219, label %while.body720, label %while.end721 +while.body720: + %t220 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t220) + br label %while.cond719 +while.end721: + %t221 = load ptr, ptr %a18 + %t222 = icmp eq ptr %t221, null + br i1 %t222, label %panic746, label %ok747 +panic746: + call void @finch_panic(ptr @.str.419, i64 140, ptr @.str.420) + unreachable +ok747: + %t223 = getelementptr inbounds %S.lexer.Lexer, ptr %t221, i32 0, i32 0 + %t224 = load { ptr, i64, i64 }, ptr %t223 + store { ptr, i64, i64 } %t224, ptr %a225 + %t227 = load i64, ptr %a177 + %t228 = load ptr, ptr %a18 + %t229 = icmp eq ptr %t228, null + br i1 %t229, label %panic748, label %ok749 +panic748: + call void @finch_panic(ptr @.str.422, i64 140, ptr @.str.423) + unreachable +ok749: + %t230 = getelementptr inbounds %S.lexer.Lexer, ptr %t228, i32 0, i32 2 + %t231 = load i64, ptr %t230 + call void @finch_str_sub(ptr %a226, ptr %a225, i64 %t227, i64 %t231, ptr @.str.421, i64 140) + %t232 = load { ptr, i64, i64 }, ptr %a226 + %t233 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t234 = load { ptr, i64, i64 }, ptr %t233 + store { ptr, i64, i64 } %t232, ptr %t233 + store { ptr, i64, i64 } %t234, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t237 = load { ptr, i64, i64 }, ptr %t236 + store { ptr, i64, i64 } { ptr @.str.424, i64 5, i64 0 }, ptr %t236 + store { ptr, i64, i64 } %t237, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = call i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %t240) + br i1 %t241, label %then750, label %endif752 +then750: + %t242 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t243 = load { ptr, i64, i64 }, ptr %t242 + %t244 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + store { ptr, i64, i64 } %t243, ptr %a245 + call void @finch_str_copy(ptr %a246, ptr %a245) + %t247 = load { ptr, i64, i64 }, ptr %a246 + %t248 = load { ptr, i64, i64 }, ptr %t244 + store { ptr, i64, i64 } %t247, ptr %t244 + store { ptr, i64, i64 } %t248, ptr %a249 + call void @finch_str_drop(ptr %a249) + br label %endif752 +endif752: + br label %endif718 +else717: + %t250 = load i8, ptr %a43 + %t251 = call i1 @finch.lexer.isDigit(i8 %t250) + br i1 %t251, label %then753, label %else754 +then753: + %t252 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } { ptr @.str.425, i64 3, i64 0 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_drop(ptr %a254) + %t255 = load i8, ptr %a43 + %t256 = icmp eq i8 %t255, 48 + br label %logic.from756 +logic.from756: + br i1 %t256, label %logic.rhs757, label %logic.end758 +logic.rhs757: + %t257 = load ptr, ptr %a18 + %t258 = call i8 @finch.lexer.peek(ptr %t257, i64 1) + %t259 = icmp eq i8 %t258, 120 + br label %logic.from759 +logic.from759: + br i1 %t259, label %logic.end761, label %logic.rhs760 +logic.rhs760: + %t260 = load ptr, ptr %a18 + %t261 = call i8 @finch.lexer.peek(ptr %t260, i64 1) + %t262 = icmp eq i8 %t261, 88 + br label %logic.rend762 +logic.rend762: + br label %logic.end761 +logic.end761: + %t263 = phi i1 [ true, %logic.from759 ], [ %t262, %logic.rend762 ] + br label %logic.rend763 +logic.rend763: + br label %logic.end758 +logic.end758: + %t264 = phi i1 [ false, %logic.from756 ], [ %t263, %logic.rend763 ] + br i1 %t264, label %then764, label %else765 +then764: + %t265 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t265) + %t266 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t266) + br label %while.cond767 +while.cond767: + %t267 = load ptr, ptr %a18 + %t268 = icmp eq ptr %t267, null + br i1 %t268, label %panic770, label %ok771 +panic770: + call void @finch_panic(ptr @.str.426, i64 150, ptr @.str.427) + unreachable +ok771: + %t269 = getelementptr inbounds %S.lexer.Lexer, ptr %t267, i32 0, i32 2 + %t270 = load i64, ptr %t269 + %t271 = load ptr, ptr %a18 + %t272 = icmp eq ptr %t271, null + br i1 %t272, label %panic772, label %ok773 +panic772: + call void @finch_panic(ptr @.str.428, i64 150, ptr @.str.429) + unreachable +ok773: + %t273 = getelementptr inbounds %S.lexer.Lexer, ptr %t271, i32 0, i32 0 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 + %t275 = load i64, ptr %t274 + %t276 = icmp slt i64 %t270, %t275 + br label %logic.from774 +logic.from774: + br i1 %t276, label %logic.rhs775, label %logic.end776 +logic.rhs775: + %t277 = load ptr, ptr %a18 + %t278 = icmp eq ptr %t277, null + br i1 %t278, label %panic777, label %ok778 +panic777: + call void @finch_panic(ptr @.str.430, i64 150, ptr @.str.431) + unreachable +ok778: + %t279 = getelementptr inbounds %S.lexer.Lexer, ptr %t277, i32 0, i32 0 + %t280 = load ptr, ptr %a18 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic779, label %ok780 +panic779: + call void @finch_panic(ptr @.str.432, i64 150, ptr @.str.433) + unreachable +ok780: + %t282 = getelementptr inbounds %S.lexer.Lexer, ptr %t280, i32 0, i32 2 + %t283 = load i64, ptr %t282 + %t284 = load { ptr, i64, i64 }, ptr %t279 + %t285 = extractvalue { ptr, i64, i64 } %t284, 1 + %t286 = icmp uge i64 %t283, %t285 + br i1 %t286, label %range781, label %inrange782 +range781: + call void @finch_panic_index(ptr @.str.434, i64 150, i64 %t283, i64 %t285) + unreachable +inrange782: + %t287 = extractvalue { ptr, i64, i64 } %t284, 0 + %t288 = getelementptr inbounds i8, ptr %t287, i64 %t283 + %t289 = load i8, ptr %t288 + %t290 = call i1 @finch.lexer.isHex(i8 %t289) + br label %logic.from783 +logic.from783: + br i1 %t290, label %logic.end785, label %logic.rhs784 +logic.rhs784: + %t291 = load ptr, ptr %a18 + %t292 = icmp eq ptr %t291, null + br i1 %t292, label %panic786, label %ok787 +panic786: + call void @finch_panic(ptr @.str.435, i64 150, ptr @.str.436) + unreachable +ok787: + %t293 = getelementptr inbounds %S.lexer.Lexer, ptr %t291, i32 0, i32 0 + %t294 = load ptr, ptr %a18 + %t295 = icmp eq ptr %t294, null + br i1 %t295, label %panic788, label %ok789 +panic788: + call void @finch_panic(ptr @.str.437, i64 150, ptr @.str.438) + unreachable +ok789: + %t296 = getelementptr inbounds %S.lexer.Lexer, ptr %t294, i32 0, i32 2 + %t297 = load i64, ptr %t296 + %t298 = load { ptr, i64, i64 }, ptr %t293 + %t299 = extractvalue { ptr, i64, i64 } %t298, 1 + %t300 = icmp uge i64 %t297, %t299 + br i1 %t300, label %range790, label %inrange791 +range790: + call void @finch_panic_index(ptr @.str.439, i64 150, i64 %t297, i64 %t299) + unreachable +inrange791: + %t301 = extractvalue { ptr, i64, i64 } %t298, 0 + %t302 = getelementptr inbounds i8, ptr %t301, i64 %t297 + %t303 = load i8, ptr %t302 + %t304 = icmp eq i8 %t303, 95 + br label %logic.rend792 +logic.rend792: + br label %logic.end785 +logic.end785: + %t305 = phi i1 [ true, %logic.from783 ], [ %t304, %logic.rend792 ] + br label %logic.rend793 +logic.rend793: + br label %logic.end776 +logic.end776: + %t306 = phi i1 [ false, %logic.from774 ], [ %t305, %logic.rend793 ] + br i1 %t306, label %while.body768, label %while.end769 +while.body768: + %t307 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t307) + br label %while.cond767 +while.end769: + br label %endif766 +else765: + br label %while.cond794 +while.cond794: + %t308 = load ptr, ptr %a18 + %t309 = icmp eq ptr %t308, null + br i1 %t309, label %panic797, label %ok798 +panic797: + call void @finch_panic(ptr @.str.440, i64 154, ptr @.str.441) + unreachable +ok798: + %t310 = getelementptr inbounds %S.lexer.Lexer, ptr %t308, i32 0, i32 2 + %t311 = load i64, ptr %t310 + %t312 = load ptr, ptr %a18 + %t313 = icmp eq ptr %t312, null + br i1 %t313, label %panic799, label %ok800 +panic799: + call void @finch_panic(ptr @.str.442, i64 154, ptr @.str.443) + unreachable +ok800: + %t314 = getelementptr inbounds %S.lexer.Lexer, ptr %t312, i32 0, i32 0 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 + %t316 = load i64, ptr %t315 + %t317 = icmp slt i64 %t311, %t316 + br label %logic.from801 +logic.from801: + br i1 %t317, label %logic.rhs802, label %logic.end803 +logic.rhs802: + %t318 = load ptr, ptr %a18 + %t319 = icmp eq ptr %t318, null + br i1 %t319, label %panic804, label %ok805 +panic804: + call void @finch_panic(ptr @.str.444, i64 154, ptr @.str.445) + unreachable +ok805: + %t320 = getelementptr inbounds %S.lexer.Lexer, ptr %t318, i32 0, i32 0 + %t321 = load ptr, ptr %a18 + %t322 = icmp eq ptr %t321, null + br i1 %t322, label %panic806, label %ok807 +panic806: + call void @finch_panic(ptr @.str.446, i64 154, ptr @.str.447) + unreachable +ok807: + %t323 = getelementptr inbounds %S.lexer.Lexer, ptr %t321, i32 0, i32 2 + %t324 = load i64, ptr %t323 + %t325 = load { ptr, i64, i64 }, ptr %t320 + %t326 = extractvalue { ptr, i64, i64 } %t325, 1 + %t327 = icmp uge i64 %t324, %t326 + br i1 %t327, label %range808, label %inrange809 +range808: + call void @finch_panic_index(ptr @.str.448, i64 154, i64 %t324, i64 %t326) + unreachable +inrange809: + %t328 = extractvalue { ptr, i64, i64 } %t325, 0 + %t329 = getelementptr inbounds i8, ptr %t328, i64 %t324 + %t330 = load i8, ptr %t329 + %t331 = call i1 @finch.lexer.isDigit(i8 %t330) + br label %logic.from810 +logic.from810: + br i1 %t331, label %logic.end812, label %logic.rhs811 +logic.rhs811: + %t332 = load ptr, ptr %a18 + %t333 = icmp eq ptr %t332, null + br i1 %t333, label %panic813, label %ok814 +panic813: + call void @finch_panic(ptr @.str.449, i64 154, ptr @.str.450) + unreachable +ok814: + %t334 = getelementptr inbounds %S.lexer.Lexer, ptr %t332, i32 0, i32 0 + %t335 = load ptr, ptr %a18 + %t336 = icmp eq ptr %t335, null + br i1 %t336, label %panic815, label %ok816 +panic815: + call void @finch_panic(ptr @.str.451, i64 154, ptr @.str.452) + unreachable +ok816: + %t337 = getelementptr inbounds %S.lexer.Lexer, ptr %t335, i32 0, i32 2 + %t338 = load i64, ptr %t337 + %t339 = load { ptr, i64, i64 }, ptr %t334 + %t340 = extractvalue { ptr, i64, i64 } %t339, 1 + %t341 = icmp uge i64 %t338, %t340 + br i1 %t341, label %range817, label %inrange818 +range817: + call void @finch_panic_index(ptr @.str.453, i64 154, i64 %t338, i64 %t340) + unreachable +inrange818: + %t342 = extractvalue { ptr, i64, i64 } %t339, 0 + %t343 = getelementptr inbounds i8, ptr %t342, i64 %t338 + %t344 = load i8, ptr %t343 + %t345 = icmp eq i8 %t344, 95 + br label %logic.rend819 +logic.rend819: + br label %logic.end812 +logic.end812: + %t346 = phi i1 [ true, %logic.from810 ], [ %t345, %logic.rend819 ] + br label %logic.rend820 +logic.rend820: + br label %logic.end803 +logic.end803: + %t347 = phi i1 [ false, %logic.from801 ], [ %t346, %logic.rend820 ] + br i1 %t347, label %while.body795, label %while.end796 +while.body795: + %t348 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t348) + br label %while.cond794 +while.end796: + %t349 = load ptr, ptr %a18 + %t350 = call i8 @finch.lexer.peek(ptr %t349, i64 0) + %t351 = icmp eq i8 %t350, 46 + br label %logic.from821 +logic.from821: + br i1 %t351, label %logic.rhs822, label %logic.end823 +logic.rhs822: + %t352 = load ptr, ptr %a18 + %t353 = call i8 @finch.lexer.peek(ptr %t352, i64 1) + %t354 = call i1 @finch.lexer.isDigit(i8 %t353) + br label %logic.rend824 +logic.rend824: + br label %logic.end823 +logic.end823: + %t355 = phi i1 [ false, %logic.from821 ], [ %t354, %logic.rend824 ] + br i1 %t355, label %then825, label %endif827 +then825: + %t356 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t357 = load { ptr, i64, i64 }, ptr %t356 + store { ptr, i64, i64 } { ptr @.str.454, i64 5, i64 0 }, ptr %t356 + store { ptr, i64, i64 } %t357, ptr %a358 + call void @finch_str_drop(ptr %a358) + %t359 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t359) + br label %while.cond828 +while.cond828: + %t360 = load ptr, ptr %a18 + %t361 = icmp eq ptr %t360, null + br i1 %t361, label %panic831, label %ok832 +panic831: + call void @finch_panic(ptr @.str.455, i64 160, ptr @.str.456) + unreachable +ok832: + %t362 = getelementptr inbounds %S.lexer.Lexer, ptr %t360, i32 0, i32 2 + %t363 = load i64, ptr %t362 + %t364 = load ptr, ptr %a18 + %t365 = icmp eq ptr %t364, null + br i1 %t365, label %panic833, label %ok834 +panic833: + call void @finch_panic(ptr @.str.457, i64 160, ptr @.str.458) + unreachable +ok834: + %t366 = getelementptr inbounds %S.lexer.Lexer, ptr %t364, i32 0, i32 0 + %t367 = getelementptr inbounds { ptr, i64, i64 }, ptr %t366, i32 0, i32 1 + %t368 = load i64, ptr %t367 + %t369 = icmp slt i64 %t363, %t368 + br label %logic.from835 +logic.from835: + br i1 %t369, label %logic.rhs836, label %logic.end837 +logic.rhs836: + %t370 = load ptr, ptr %a18 + %t371 = icmp eq ptr %t370, null + br i1 %t371, label %panic838, label %ok839 +panic838: + call void @finch_panic(ptr @.str.459, i64 160, ptr @.str.460) + unreachable +ok839: + %t372 = getelementptr inbounds %S.lexer.Lexer, ptr %t370, i32 0, i32 0 + %t373 = load ptr, ptr %a18 + %t374 = icmp eq ptr %t373, null + br i1 %t374, label %panic840, label %ok841 +panic840: + call void @finch_panic(ptr @.str.461, i64 160, ptr @.str.462) + unreachable +ok841: + %t375 = getelementptr inbounds %S.lexer.Lexer, ptr %t373, i32 0, i32 2 + %t376 = load i64, ptr %t375 + %t377 = load { ptr, i64, i64 }, ptr %t372 + %t378 = extractvalue { ptr, i64, i64 } %t377, 1 + %t379 = icmp uge i64 %t376, %t378 + br i1 %t379, label %range842, label %inrange843 +range842: + call void @finch_panic_index(ptr @.str.463, i64 160, i64 %t376, i64 %t378) + unreachable +inrange843: + %t380 = extractvalue { ptr, i64, i64 } %t377, 0 + %t381 = getelementptr inbounds i8, ptr %t380, i64 %t376 + %t382 = load i8, ptr %t381 + %t383 = call i1 @finch.lexer.isDigit(i8 %t382) + br label %logic.from844 +logic.from844: + br i1 %t383, label %logic.end846, label %logic.rhs845 +logic.rhs845: + %t384 = load ptr, ptr %a18 + %t385 = icmp eq ptr %t384, null + br i1 %t385, label %panic847, label %ok848 +panic847: + call void @finch_panic(ptr @.str.464, i64 160, ptr @.str.465) + unreachable +ok848: + %t386 = getelementptr inbounds %S.lexer.Lexer, ptr %t384, i32 0, i32 0 + %t387 = load ptr, ptr %a18 + %t388 = icmp eq ptr %t387, null + br i1 %t388, label %panic849, label %ok850 +panic849: + call void @finch_panic(ptr @.str.466, i64 160, ptr @.str.467) + unreachable +ok850: + %t389 = getelementptr inbounds %S.lexer.Lexer, ptr %t387, i32 0, i32 2 + %t390 = load i64, ptr %t389 + %t391 = load { ptr, i64, i64 }, ptr %t386 + %t392 = extractvalue { ptr, i64, i64 } %t391, 1 + %t393 = icmp uge i64 %t390, %t392 + br i1 %t393, label %range851, label %inrange852 +range851: + call void @finch_panic_index(ptr @.str.468, i64 160, i64 %t390, i64 %t392) + unreachable +inrange852: + %t394 = extractvalue { ptr, i64, i64 } %t391, 0 + %t395 = getelementptr inbounds i8, ptr %t394, i64 %t390 + %t396 = load i8, ptr %t395 + %t397 = icmp eq i8 %t396, 95 + br label %logic.rend853 +logic.rend853: + br label %logic.end846 +logic.end846: + %t398 = phi i1 [ true, %logic.from844 ], [ %t397, %logic.rend853 ] + br label %logic.rend854 +logic.rend854: + br label %logic.end837 +logic.end837: + %t399 = phi i1 [ false, %logic.from835 ], [ %t398, %logic.rend854 ] + br i1 %t399, label %while.body829, label %while.end830 +while.body829: + %t400 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t400) + br label %while.cond828 +while.end830: + br label %endif827 +endif827: + br label %endif766 +endif766: + %t401 = load ptr, ptr %a18 + %t402 = icmp eq ptr %t401, null + br i1 %t402, label %panic855, label %ok856 +panic855: + call void @finch_panic(ptr @.str.469, i64 165, ptr @.str.470) + unreachable +ok856: + %t403 = getelementptr inbounds %S.lexer.Lexer, ptr %t401, i32 0, i32 0 + %t404 = load { ptr, i64, i64 }, ptr %t403 + store { ptr, i64, i64 } %t404, ptr %a405 + %t407 = load i64, ptr %a177 + %t408 = load ptr, ptr %a18 + %t409 = icmp eq ptr %t408, null + br i1 %t409, label %panic857, label %ok858 +panic857: + call void @finch_panic(ptr @.str.472, i64 165, ptr @.str.473) + unreachable +ok858: + %t410 = getelementptr inbounds %S.lexer.Lexer, ptr %t408, i32 0, i32 2 + %t411 = load i64, ptr %t410 + call void @finch_str_sub(ptr %a406, ptr %a405, i64 %t407, i64 %t411, ptr @.str.471, i64 165) + %t412 = load { ptr, i64, i64 }, ptr %a406 + store { ptr, i64, i64 } %t412, ptr %a413 + store { ptr, i64, i64 } { ptr @.str.475, i64 1, i64 0 }, ptr %a415 + store { ptr, i64, i64 } { ptr @.str.476, i64 0, i64 0 }, ptr %a416 + call void @finch_str_replace(ptr %a414, ptr %a413, ptr %a415, ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a414 + store { ptr, i64, i64 } %t412, ptr %a418 + call void @finch_str_drop(ptr %a418) + %t419 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t420 = load { ptr, i64, i64 }, ptr %t419 + store { ptr, i64, i64 } %t417, ptr %t419 + store { ptr, i64, i64 } %t420, ptr %a421 + call void @finch_str_drop(ptr %a421) + br label %endif755 +else754: + %t422 = load i8, ptr %a43 + %t423 = icmp eq i8 %t422, 34 + br label %logic.from859 +logic.from859: + br i1 %t423, label %logic.end861, label %logic.rhs860 +logic.rhs860: + %t424 = load i8, ptr %a43 + %t425 = icmp eq i8 %t424, 39 + br label %logic.rend862 +logic.rend862: + br label %logic.end861 +logic.end861: + %t426 = phi i1 [ true, %logic.from859 ], [ %t425, %logic.rend862 ] + br i1 %t426, label %then863, label %else864 +then863: + %t427 = load i8, ptr %a43 + store i8 %t427, ptr %a428 + %t429 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t430 = load { ptr, i64, i64 }, ptr %t429 + store { ptr, i64, i64 } { ptr @.str.477, i64 6, i64 0 }, ptr %t429 + store { ptr, i64, i64 } %t430, ptr %a431 + call void @finch_str_drop(ptr %a431) + %t432 = load i8, ptr %a428 + %t433 = icmp eq i8 %t432, 39 + br i1 %t433, label %then866, label %endif868 +then866: + %t434 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t435 = load { ptr, i64, i64 }, ptr %t434 + store { ptr, i64, i64 } { ptr @.str.478, i64 4, i64 0 }, ptr %t434 + store { ptr, i64, i64 } %t435, ptr %a436 + call void @finch_str_drop(ptr %a436) + br label %endif868 +endif868: + %t437 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t437) + store { ptr, i64, i64 } zeroinitializer, ptr %a438 + br label %while.cond869 +while.cond869: + %t439 = load ptr, ptr %a18 + %t440 = call i8 @finch.lexer.peek(ptr %t439, i64 0) + %t441 = load i8, ptr %a428 + %t442 = icmp ne i8 %t440, %t441 + br i1 %t442, label %while.body870, label %while.end871 +while.body870: + %t443 = load ptr, ptr %a18 + %t444 = call i8 @finch.lexer.peek(ptr %t443, i64 0) + %t445 = trunc i64 0 to i8 + %t446 = icmp eq i8 %t444, %t445 + br label %logic.from872 +logic.from872: + br i1 %t446, label %logic.end874, label %logic.rhs873 +logic.rhs873: + %t447 = load ptr, ptr %a18 + %t448 = call i8 @finch.lexer.peek(ptr %t447, i64 0) + %t449 = icmp eq i8 %t448, 10 + br label %logic.rend875 +logic.rend875: + br label %logic.end874 +logic.end874: + %t450 = phi i1 [ true, %logic.from872 ], [ %t449, %logic.rend875 ] + br i1 %t450, label %then876, label %endif878 +then876: + %t451 = load i8, ptr %a428 + %t452 = icmp eq i8 %t451, 34 + br i1 %t452, label %then879, label %endif881 +then879: + %t453 = load ptr, ptr %a18 + %t454 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t455 = load i64, ptr %t454 + %t456 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t457 = load i64, ptr %t456 + call void @finch.lexer.fail(ptr %t453, i64 %t455, i64 %t457, { ptr, i64, i64 } { ptr @.str.479, i64 34, i64 0 }) + br label %endif881 +endif881: + %t458 = load ptr, ptr %a18 + %t459 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t460 = load i64, ptr %t459 + %t461 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t462 = load i64, ptr %t461 + call void @finch.lexer.fail(ptr %t458, i64 %t460, i64 %t462, { ptr, i64, i64 } { ptr @.str.480, i64 32, i64 0 }) + br label %endif878 +endif878: + %t463 = load ptr, ptr %a18 + %t464 = call i8 @finch.lexer.peek(ptr %t463, i64 0) + store i8 %t464, ptr %a465 + %t466 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t466) + %t467 = load i8, ptr %a465 + %t468 = icmp eq i8 %t467, 92 + br i1 %t468, label %then882, label %endif884 +then882: + %t469 = load ptr, ptr %a18 + %t470 = call i8 @finch.lexer.peek(ptr %t469, i64 0) + store i8 %t470, ptr %a471 + %t472 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t472) + %t473 = load ptr, ptr %a18 + %t474 = load i8, ptr %a471 + %t475 = call i8 @finch.lexer.escape(ptr %t473, i8 %t474) + store i8 %t475, ptr %a465 + br label %endif884 +endif884: + %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 + %t477 = load i8, ptr %a465 + call void @finch_str_from_char(ptr %a478, i8 signext %t477) + %t479 = load { ptr, i64, i64 }, ptr %a478 + %t480 = load i64, ptr %t476 + %t481 = add i64 %t480, 1 + call void @finch_arr_reserve(ptr %a438, i64 %t481, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t482 = load ptr, ptr %a438 + %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i64 %t480 + store { ptr, i64, i64 } %t479, ptr %t483 + store i64 %t481, ptr %t476 + br label %while.cond869 +while.end871: + %t484 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t484) + %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.481, i64 0, i64 0 }, ptr %a486 + call void @finch_str_join(ptr %a487, ptr %a438, ptr %a486) + %t488 = load { ptr, i64, i64 }, ptr %a487 + %t489 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t490 = load { ptr, i64, i64 }, ptr %t489 + store { ptr, i64, i64 } %t488, ptr %t489 + store { ptr, i64, i64 } %t490, ptr %a491 + call void @finch_str_drop(ptr %a491) + %t492 = load i8, ptr %a428 + %t493 = icmp eq i8 %t492, 39 + br label %logic.from885 +logic.from885: + br i1 %t493, label %logic.rhs886, label %logic.end887 +logic.rhs886: + %t494 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i32 0, i32 1 + %t496 = load i64, ptr %t495 + %t497 = icmp ne i64 %t496, 1 + br label %logic.rend888 +logic.rend888: + br label %logic.end887 +logic.end887: + %t498 = phi i1 [ false, %logic.from885 ], [ %t497, %logic.rend888 ] + br i1 %t498, label %then889, label %endif891 +then889: + %t499 = load ptr, ptr %a18 + %t500 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t501 = load i64, ptr %t500 + %t502 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t503 = load i64, ptr %t502 + call void @finch.lexer.fail(ptr %t499, i64 %t501, i64 %t503, { ptr, i64, i64 } { ptr @.str.482, i64 44, i64 0 }) + br label %endif891 +endif891: + call void @finch.drop.arr_str(ptr %a438) + br label %endif865 +else864: + %t504 = load ptr, ptr %a18 + %t505 = call { ptr, i64, i64 } @finch.lexer.operator(ptr %t504) + store { ptr, i64, i64 } %t505, ptr %a506 + %t507 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 + %t508 = load i64, ptr %t507 + %t509 = icmp eq i64 %t508, 0 + br i1 %t509, label %then892, label %endif894 +then892: + store i64 1, ptr %a510 + %t511 = load i8, ptr %a43 + %t512 = zext i8 %t511 to i64 + %t513 = and i64 %t512, 224 + %t514 = icmp eq i64 %t513, 192 + br i1 %t514, label %then895, label %else896 +then895: + store i64 2, ptr %a510 + br label %endif897 +else896: + %t515 = load i8, ptr %a43 + %t516 = zext i8 %t515 to i64 + %t517 = and i64 %t516, 240 + %t518 = icmp eq i64 %t517, 224 + br i1 %t518, label %then898, label %else899 +then898: + store i64 3, ptr %a510 + br label %endif900 +else899: + %t519 = load i8, ptr %a43 + %t520 = zext i8 %t519 to i64 + %t521 = and i64 %t520, 248 + %t522 = icmp eq i64 %t521, 240 + br i1 %t522, label %then901, label %endif903 +then901: + store i64 4, ptr %a510 + br label %endif903 +endif903: + br label %endif900 +endif900: + br label %endif897 +endif897: + store { ptr, i64, i64 } { ptr @.str.483, i64 0, i64 0 }, ptr %a523 + %t524 = load i8, ptr %a43 + %t525 = zext i8 %t524 to i64 + %t526 = icmp sge i64 %t525, 128 + br i1 %t526, label %then904, label %endif906 +then904: + %t527 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.484, i64 74, i64 0 }, ptr %a523 + store { ptr, i64, i64 } %t527, ptr %a528 + call void @finch_str_drop(ptr %a528) + br label %endif906 +endif906: + %t529 = load ptr, ptr %a18 + %t530 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t531 = load i64, ptr %t530 + %t532 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t533 = load i64, ptr %t532 + %t534 = load ptr, ptr %a18 + %t535 = icmp eq ptr %t534, null + br i1 %t535, label %panic907, label %ok908 +panic907: + call void @finch_panic(ptr @.str.486, i64 211, ptr @.str.487) + unreachable +ok908: + %t536 = getelementptr inbounds %S.lexer.Lexer, ptr %t534, i32 0, i32 0 + %t537 = load { ptr, i64, i64 }, ptr %t536 + store { ptr, i64, i64 } %t537, ptr %a538 + %t540 = load ptr, ptr %a18 + %t541 = icmp eq ptr %t540, null + br i1 %t541, label %panic909, label %ok910 +panic909: + call void @finch_panic(ptr @.str.489, i64 211, ptr @.str.490) + unreachable +ok910: + %t542 = getelementptr inbounds %S.lexer.Lexer, ptr %t540, i32 0, i32 2 + %t543 = load i64, ptr %t542 + %t544 = load ptr, ptr %a18 + %t545 = icmp eq ptr %t544, null + br i1 %t545, label %panic911, label %ok912 +panic911: + call void @finch_panic(ptr @.str.491, i64 211, ptr @.str.492) + unreachable +ok912: + %t546 = getelementptr inbounds %S.lexer.Lexer, ptr %t544, i32 0, i32 2 + %t547 = load i64, ptr %t546 + %t548 = load i64, ptr %a510 + %t549 = add i64 %t547, %t548 + call void @finch_str_sub(ptr %a539, ptr %a538, i64 %t543, i64 %t549, ptr @.str.488, i64 211) + %t550 = load { ptr, i64, i64 }, ptr %a539 + store { ptr, i64, i64 } { ptr @.str.485, i64 22, i64 0 }, ptr %a552 + store { ptr, i64, i64 } %t550, ptr %a553 + call void @finch_str_concat(ptr %a551, ptr %a552, ptr %a553) + store { ptr, i64, i64 } %t550, ptr %a554 + call void @finch_str_drop(ptr %a554) + %t555 = load { ptr, i64, i64 }, ptr %a551 + store { ptr, i64, i64 } %t555, ptr %a557 + store { ptr, i64, i64 } { ptr @.str.493, i64 1, i64 0 }, ptr %a558 + call void @finch_str_concat(ptr %a556, ptr %a557, ptr %a558) + store { ptr, i64, i64 } %t555, ptr %a559 + call void @finch_str_drop(ptr %a559) + %t560 = load { ptr, i64, i64 }, ptr %a556 + %t561 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t560, ptr %a563 + store { ptr, i64, i64 } %t561, ptr %a564 + call void @finch_str_concat(ptr %a562, ptr %a563, ptr %a564) + store { ptr, i64, i64 } %t560, ptr %a565 + call void @finch_str_drop(ptr %a565) + %t566 = load { ptr, i64, i64 }, ptr %a562 + call void @finch.lexer.fail(ptr %t529, i64 %t531, i64 %t533, { ptr, i64, i64 } %t566) + store { ptr, i64, i64 } %t566, ptr %a567 + call void @finch_str_drop(ptr %a567) + call void @finch_str_drop(ptr %a523) + br label %endif894 +endif894: + %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 + %t569 = load i64, ptr %t568 + store i64 0, ptr %a570 + br label %for.cond913 +for.cond913: + %t571 = load i64, ptr %a570 + %t572 = icmp slt i64 %t571, %t569 + br i1 %t572, label %for.body914, label %for.end916 +for.body914: + %t573 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t573) + br label %for.step915 +for.step915: + %t574 = load i64, ptr %a570 + %t575 = add i64 %t574, 1 + store i64 %t575, ptr %a570 + br label %for.cond913 +for.end916: + %t576 = load { ptr, i64, i64 }, ptr %a506 + %t577 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + store { ptr, i64, i64 } %t576, ptr %a578 + call void @finch_str_copy(ptr %a579, ptr %a578) + %t580 = load { ptr, i64, i64 }, ptr %a579 + %t581 = load { ptr, i64, i64 }, ptr %t577 + store { ptr, i64, i64 } %t580, ptr %t577 + store { ptr, i64, i64 } %t581, ptr %a582 + call void @finch_str_drop(ptr %a582) + %t583 = load { ptr, i64, i64 }, ptr %a506 + %t584 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + store { ptr, i64, i64 } %t583, ptr %a585 + call void @finch_str_copy(ptr %a586, ptr %a585) + %t587 = load { ptr, i64, i64 }, ptr %a586 + %t588 = load { ptr, i64, i64 }, ptr %t584 + store { ptr, i64, i64 } %t587, ptr %t584 + store { ptr, i64, i64 } %t588, ptr %a589 + call void @finch_str_drop(ptr %a589) + call void @finch_str_drop(ptr %a506) + br label %endif865 +endif865: + br label %endif755 +endif755: + br label %endif718 +endif718: + %t590 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t591 = load %S.lexer.Token, ptr %a169 + store %S.lexer.Token %t591, ptr %a592 + call void @finch.copy.S_lexer_Token(ptr %a593, ptr %a592) + %t594 = load %S.lexer.Token, ptr %a593 + %t595 = load i64, ptr %t590 + %t596 = add i64 %t595, 1 + call void @finch_arr_reserve(ptr %a19, i64 %t596, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) + %t597 = load ptr, ptr %a19 + %t598 = getelementptr inbounds %S.lexer.Token, ptr %t597, i64 %t595 + store %S.lexer.Token %t594, ptr %t598 + store i64 %t596, ptr %t590 + call void @finch.drop.S_lexer_Token(ptr %a169) + br label %while.cond615 +while.end617: + %t599 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t600 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.494, i64 3, i64 0 }, 0 + %t601 = insertvalue %S.lexer.Token %t600, { ptr, i64, i64 } { ptr @.str.495, i64 0, i64 0 }, 1 + %t602 = load ptr, ptr %a18 + %t603 = icmp eq ptr %t602, null + br i1 %t603, label %panic917, label %ok918 +panic917: + call void @finch_panic(ptr @.str.496, i64 221, ptr @.str.497) + unreachable +ok918: + %t604 = getelementptr inbounds %S.lexer.Lexer, ptr %t602, i32 0, i32 3 + %t605 = load i64, ptr %t604 + %t606 = insertvalue %S.lexer.Token %t601, i64 %t605, 2 + %t607 = load ptr, ptr %a18 + %t608 = icmp eq ptr %t607, null + br i1 %t608, label %panic919, label %ok920 +panic919: + call void @finch_panic(ptr @.str.498, i64 221, ptr @.str.499) + unreachable +ok920: + %t609 = getelementptr inbounds %S.lexer.Lexer, ptr %t607, i32 0, i32 4 + %t610 = load i64, ptr %t609 + %t611 = insertvalue %S.lexer.Token %t606, i64 %t610, 3 + %t612 = insertvalue %S.lexer.Token %t611, i1 true, 4 + %t613 = load i64, ptr %t599 + %t614 = add i64 %t613, 1 + call void @finch_arr_reserve(ptr %a19, i64 %t614, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) + %t615 = load ptr, ptr %a19 + %t616 = getelementptr inbounds %S.lexer.Token, ptr %t615, i64 %t613 + store %S.lexer.Token %t612, ptr %t616 + store i64 %t614, ptr %t599 + %t617 = load { ptr, i64, i64 }, ptr %a19 + call void @finch.drop.S_lexer_Lexer(ptr %a17) + ret { ptr, i64, i64 } %t617 +} + +define internal %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t5, 0 + ret %S.ast.Type %t6 +} + +define internal %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a7 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.500, i64 5, i64 0 }, 0 + store %S.ast.Type %t2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t6, ptr %a7 + call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) + %t9 = load %S.ast.Type, ptr %a8 + %t10 = load i64, ptr %t5 + %t11 = add i64 %t10, 1 + call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t12 = load ptr, ptr %t4 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 + store %S.ast.Type %t9, ptr %t13 + store i64 %t11, ptr %t5 + %t14 = load %S.ast.Type, ptr %a3 + ret %S.ast.Type %t14 +} + +define internal %S.ast.Type @finch.ast.mapOf(%S.ast.Type %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a9 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a19 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.501, i64 3, i64 0 }, 0 + store %S.ast.Type %t3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t7, ptr %a8 + call void @finch.copy.S_ast_Type(ptr %a9, ptr %a8) + %t10 = load %S.ast.Type, ptr %a9 + %t11 = load i64, ptr %t6 + %t12 = add i64 %t11, 1 + call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t13 = load ptr, ptr %t5 + %t14 = getelementptr inbounds %S.ast.Type, ptr %t13, i64 %t11 + store %S.ast.Type %t10, ptr %t14 + store i64 %t12, ptr %t6 + %t15 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %a2 + store %S.ast.Type %t17, ptr %a18 + call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) + %t20 = load %S.ast.Type, ptr %a19 + %t21 = load i64, ptr %t16 + %t22 = add i64 %t21, 1 + call void @finch_arr_reserve(ptr %t15, i64 %t22, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t23 = load ptr, ptr %t15 + %t24 = getelementptr inbounds %S.ast.Type, ptr %t23, i64 %t21 + store %S.ast.Type %t20, ptr %t24 + store i64 %t22, ptr %t16 + %t25 = load %S.ast.Type, ptr %a4 + ret %S.ast.Type %t25 +} + +define internal %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a7 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.502, i64 3, i64 0 }, 0 + store %S.ast.Type %t2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t6, ptr %a7 + call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) + %t9 = load %S.ast.Type, ptr %a8 + %t10 = load i64, ptr %t5 + %t11 = add i64 %t10, 1 + call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t12 = load ptr, ptr %t4 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 + store %S.ast.Type %t9, ptr %t13 + store i64 %t11, ptr %t5 + %t14 = load %S.ast.Type, ptr %a3 + ret %S.ast.Type %t14 +} + +define internal i1 @finch.ast.same(%S.ast.Type %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca i64, align 16 + store %S.ast.Type %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t4, ptr %a7 + store { ptr, i64, i64 } %t6, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp eq i32 %t9, 0 + br i1 %t10, label %then921, label %endif923 +then921: + ret i1 false +endif923: + %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.503, i64 6, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from924 +logic.from924: + br i1 %t16, label %logic.end926, label %logic.rhs925 +logic.rhs925: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.504, i64 5, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.rend927 +logic.rend927: + br label %logic.end926 +logic.end926: + %t23 = phi i1 [ true, %logic.from924 ], [ %t22, %logic.rend927 ] + br label %logic.from928 +logic.from928: + br i1 %t23, label %logic.end930, label %logic.rhs929 +logic.rhs929: + %t24 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t25 = load { ptr, i64, i64 }, ptr %t24 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.505, i64 4, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend931 +logic.rend931: + br label %logic.end930 +logic.end930: + %t30 = phi i1 [ true, %logic.from928 ], [ %t29, %logic.rend931 ] + br i1 %t30, label %then932, label %endif934 +then932: + %t31 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t32 = load { ptr, i64, i64 }, ptr %t31 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t32, ptr %a35 + store { ptr, i64, i64 } %t34, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.from935 +logic.from935: + br i1 %t38, label %logic.rhs936, label %logic.end937 +logic.rhs936: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t40, ptr %a43 + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend938 +logic.rend938: + br label %logic.end937 +logic.end937: + %t47 = phi i1 [ false, %logic.from935 ], [ %t46, %logic.rend938 ] + ret i1 %t47 +endif934: + %t48 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t49 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.506, i64 5, i64 0 }, ptr %a51 + %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) + %t53 = icmp ne i32 %t52, 0 + br label %logic.from939 +logic.from939: + br i1 %t53, label %logic.rhs940, label %logic.end941 +logic.rhs940: + %t54 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 + %t55 = load i64, ptr %t54 + %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t57 = load i64, ptr %t56 + %t58 = icmp ne i64 %t55, %t57 + br label %logic.rend942 +logic.rend942: + br label %logic.end941 +logic.end941: + %t59 = phi i1 [ false, %logic.from939 ], [ %t58, %logic.rend942 ] + br i1 %t59, label %then943, label %endif945 +then943: + ret i1 false +endif945: + %t60 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.507, i64 5, i64 0 }, ptr %a63 + %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) + %t65 = icmp ne i32 %t64, 0 + br label %logic.from946 +logic.from946: + br i1 %t65, label %logic.end948, label %logic.rhs947 +logic.rhs947: + %t66 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t67 = load { ptr, i64, i64 }, ptr %t66 + store { ptr, i64, i64 } %t67, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.508, i64 3, i64 0 }, ptr %a69 + %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) + %t71 = icmp ne i32 %t70, 0 + br label %logic.rend949 +logic.rend949: + br label %logic.end948 +logic.end948: + %t72 = phi i1 [ true, %logic.from946 ], [ %t71, %logic.rend949 ] + br label %logic.from950 +logic.from950: + br i1 %t72, label %logic.end952, label %logic.rhs951 +logic.rhs951: + %t73 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t74 = load { ptr, i64, i64 }, ptr %t73 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.509, i64 3, i64 0 }, ptr %a76 + %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) + %t78 = icmp ne i32 %t77, 0 + br label %logic.rend953 +logic.rend953: + br label %logic.end952 +logic.end952: + %t79 = phi i1 [ true, %logic.from950 ], [ %t78, %logic.rend953 ] + br label %logic.from954 +logic.from954: + br i1 %t79, label %logic.end956, label %logic.rhs955 +logic.rhs955: + %t80 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t81 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.510, i64 5, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.rend957 +logic.rend957: + br label %logic.end956 +logic.end956: + %t86 = phi i1 [ true, %logic.from954 ], [ %t85, %logic.rend957 ] + br i1 %t86, label %then958, label %endif960 +then958: + %t87 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 + %t89 = load i64, ptr %t88 + %t90 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1 + %t92 = load i64, ptr %t91 + %t93 = icmp ne i64 %t89, %t92 + br i1 %t93, label %then961, label %endif963 +then961: + ret i1 false +endif963: + %t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load i64, ptr %t95 + store i64 0, ptr %a97 + br label %for.cond964 +for.cond964: + %t98 = load i64, ptr %a97 + %t99 = icmp slt i64 %t98, %t96 + br i1 %t99, label %for.body965, label %for.end967 +for.body965: + %t100 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t101 = load i64, ptr %a97 + %t102 = load { ptr, i64, i64 }, ptr %t100 + %t103 = extractvalue { ptr, i64, i64 } %t102, 1 + %t104 = icmp uge i64 %t101, %t103 + br i1 %t104, label %range968, label %inrange969 +range968: + call void @finch_panic_index(ptr @.str.511, i64 54, i64 %t101, i64 %t103) + unreachable +inrange969: + %t105 = extractvalue { ptr, i64, i64 } %t102, 0 + %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t101 + %t107 = load %S.ast.Type, ptr %t106 + %t108 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t109 = load i64, ptr %a97 + %t110 = load { ptr, i64, i64 }, ptr %t108 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range970, label %inrange971 +range970: + call void @finch_panic_index(ptr @.str.512, i64 54, i64 %t109, i64 %t111) + unreachable +inrange971: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds %S.ast.Type, ptr %t113, i64 %t109 + %t115 = load %S.ast.Type, ptr %t114 + %t116 = call i1 @finch.ast.same(%S.ast.Type %t107, %S.ast.Type %t115) + %t117 = xor i1 %t116, true + br i1 %t117, label %then972, label %endif974 +then972: + ret i1 false +endif974: + br label %for.step966 +for.step966: + %t118 = load i64, ptr %a97 + %t119 = add i64 %t118, 1 + store i64 %t119, ptr %a97 + br label %for.cond964 +for.end967: + ret i1 true +endif960: + ret i1 true +} + +define internal { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.513, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then975, label %endif977 +then975: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 0, %t10 + br i1 %t11, label %range978, label %inrange979 +range978: + call void @finch_panic_index(ptr @.str.515, i64 65, i64 0, i64 %t10) + unreachable +inrange979: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 + %t14 = load %S.ast.Type, ptr %t13 + %t15 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t14) + store { ptr, i64, i64 } { ptr @.str.514, i64 2, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t20 +endif977: + %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.516, i64 5, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then980, label %endif982 +then980: + %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 + %t28 = load i64, ptr %t27 + call void @finch_str_from_int(ptr %a29, i64 %t28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } { ptr @.str.517, i64 1, i64 0 }, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.518, i64 1, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + %t43 = extractvalue { ptr, i64, i64 } %t42, 1 + %t44 = icmp uge i64 0, %t43 + br i1 %t44, label %range983, label %inrange984 +range983: + call void @finch_panic_index(ptr @.str.519, i64 68, i64 0, i64 %t43) + unreachable +inrange984: + %t45 = extractvalue { ptr, i64, i64 } %t42, 0 + %t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0 + %t47 = load %S.ast.Type, ptr %t46 + %t48 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t47) + store { ptr, i64, i64 } %t40, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t40, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + ret { ptr, i64, i64 } %t54 +endif982: + %t55 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t56 = load { ptr, i64, i64 }, ptr %t55 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.520, i64 3, i64 0 }, ptr %a58 + %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) + %t60 = icmp ne i32 %t59, 0 + br i1 %t60, label %then985, label %endif987 +then985: + %t61 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = extractvalue { ptr, i64, i64 } %t62, 1 + %t64 = icmp uge i64 0, %t63 + br i1 %t64, label %range988, label %inrange989 +range988: + call void @finch_panic_index(ptr @.str.522, i64 71, i64 0, i64 %t63) + unreachable +inrange989: + %t65 = extractvalue { ptr, i64, i64 } %t62, 0 + %t66 = getelementptr inbounds %S.ast.Type, ptr %t65, i64 0 + %t67 = load %S.ast.Type, ptr %t66 + %t68 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t67) + store { ptr, i64, i64 } { ptr @.str.521, i64 4, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.523, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t80 = load { ptr, i64, i64 }, ptr %t79 + %t81 = extractvalue { ptr, i64, i64 } %t80, 1 + %t82 = icmp uge i64 1, %t81 + br i1 %t82, label %range990, label %inrange991 +range990: + call void @finch_panic_index(ptr @.str.524, i64 71, i64 1, i64 %t81) + unreachable +inrange991: + %t83 = extractvalue { ptr, i64, i64 } %t80, 0 + %t84 = getelementptr inbounds %S.ast.Type, ptr %t83, i64 1 + %t85 = load %S.ast.Type, ptr %t84 + %t86 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t85) + store { ptr, i64, i64 } %t78, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t78, ptr %a90 + call void @finch_str_drop(ptr %a90) + store { ptr, i64, i64 } %t86, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a87 + ret { ptr, i64, i64 } %t92 +endif987: + %t93 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t94 = load { ptr, i64, i64 }, ptr %t93 + store { ptr, i64, i64 } %t94, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.525, i64 3, i64 0 }, ptr %a96 + %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) + %t98 = icmp ne i32 %t97, 0 + br i1 %t98, label %then992, label %endif994 +then992: + %t99 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 + %t101 = load i64, ptr %t100 + %t102 = icmp eq i64 %t101, 0 + br i1 %t102, label %then995, label %endif997 +then995: + ret { ptr, i64, i64 } { ptr @.str.526, i64 3, i64 0 } +endif997: + %t103 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t104 = load { ptr, i64, i64 }, ptr %t103 + %t105 = extractvalue { ptr, i64, i64 } %t104, 1 + %t106 = icmp uge i64 0, %t105 + br i1 %t106, label %range998, label %inrange999 +range998: + call void @finch_panic_index(ptr @.str.528, i64 77, i64 0, i64 %t105) + unreachable +inrange999: + %t107 = extractvalue { ptr, i64, i64 } %t104, 0 + %t108 = getelementptr inbounds %S.ast.Type, ptr %t107, i64 0 + %t109 = load %S.ast.Type, ptr %t108 + %t110 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t109) + store { ptr, i64, i64 } { ptr @.str.527, i64 4, i64 0 }, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t110, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + store { ptr, i64, i64 } %t115, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.529, i64 1, i64 0 }, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t115, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a116 + ret { ptr, i64, i64 } %t120 +endif994: + %t121 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t122 = load { ptr, i64, i64 }, ptr %t121 + store { ptr, i64, i64 } %t122, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.530, i64 6, i64 0 }, ptr %a124 + %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) + %t126 = icmp ne i32 %t125, 0 + br label %logic.from1000 +logic.from1000: + br i1 %t126, label %logic.end1002, label %logic.rhs1001 +logic.rhs1001: + %t127 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a129 + store { ptr, i64, i64 } { ptr @.str.531, i64 5, i64 0 }, ptr %a130 + %t131 = call i32 @finch_str_eq(ptr %a129, ptr %a130) + %t132 = icmp ne i32 %t131, 0 + br label %logic.rend1003 +logic.rend1003: + br label %logic.end1002 +logic.end1002: + %t133 = phi i1 [ true, %logic.from1000 ], [ %t132, %logic.rend1003 ] + br label %logic.from1004 +logic.from1004: + br i1 %t133, label %logic.end1006, label %logic.rhs1005 +logic.rhs1005: + %t134 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t135 = load { ptr, i64, i64 }, ptr %t134 + store { ptr, i64, i64 } %t135, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.532, i64 4, i64 0 }, ptr %a137 + %t138 = call i32 @finch_str_eq(ptr %a136, ptr %a137) + %t139 = icmp ne i32 %t138, 0 + br label %logic.rend1007 +logic.rend1007: + br label %logic.end1006 +logic.end1006: + %t140 = phi i1 [ true, %logic.from1004 ], [ %t139, %logic.rend1007 ] + br i1 %t140, label %then1008, label %endif1010 +then1008: + %t141 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 + %t143 = load i64, ptr %t142 + %t144 = icmp sgt i64 %t143, 0 + br i1 %t144, label %then1011, label %endif1013 +then1011: + %t145 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t146 = load { ptr, i64, i64 }, ptr %t145 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.533, i64 1, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a147 + %t151 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t150, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t150, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + ret { ptr, i64, i64 } %t157 +endif1013: + %t158 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t159, ptr %a160 + call void @finch_str_copy(ptr %a161, ptr %a160) + %t162 = load { ptr, i64, i64 }, ptr %a161 + ret { ptr, i64, i64 } %t162 +endif1010: + %t163 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t164 = load { ptr, i64, i64 }, ptr %t163 + store { ptr, i64, i64 } %t164, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.534, i64 4, i64 0 }, ptr %a166 + %t167 = call i32 @finch_str_eq(ptr %a165, ptr %a166) + %t168 = icmp ne i32 %t167, 0 + br i1 %t168, label %then1014, label %endif1016 +then1014: + ret { ptr, i64, i64 } { ptr @.str.535, i64 7, i64 0 } +endif1016: + %t169 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t170 = load { ptr, i64, i64 }, ptr %t169 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_copy(ptr %a172, ptr %a171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + ret { ptr, i64, i64 } %t173 +} + +define internal void @finch.parser.fail(ptr %p0, %S.lexer.Token %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.lexer.Token, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.lexer.Token %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic1017, label %ok1018 +panic1017: + call void @finch_panic(ptr @.str.536, i64 14, ptr @.str.537) + unreachable +ok1018: + %t6 = getelementptr inbounds %S.parser.Parser, ptr %t4, i32 0, i32 4 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.538, i64 1, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + %t12 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 2 + %t13 = load i64, ptr %t12 + call void @finch_str_from_int(ptr %a14, i64 %t13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t11, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t11, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.539, i64 1, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 3 + %t28 = load i64, ptr %t27 + call void @finch_str_from_int(ptr %a29, i64 %t28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t26, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t26, ptr %a34 + call void @finch_str_drop(ptr %a34) + store { ptr, i64, i64 } %t30, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t36, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.540, i64 9, i64 0 }, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t36, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + %t42 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t41, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a43 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = trunc i64 %t48 to i32 + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = icmp eq ptr %t50, null + %t52 = select i1 %t51, ptr @.str.541, ptr %t50 + %t53 = call i32 (ptr, ...) @printf(ptr @.str.542, i32 %t49, ptr %t52) + store { ptr, i64, i64 } %t47, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = call i32 (ptr, ...) @printf(ptr @.str.543) + %t56 = trunc i64 1 to i32 + %t57 = call i32 @fflush(ptr null) + call void @exit(i32 %t56) + ret void +} + +define internal %S.lexer.Token @finch.parser.cur(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a15 = alloca %S.lexer.Token, align 16 + %a16 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1019, label %ok1020 +panic1019: + call void @finch_panic(ptr @.str.544, i64 19, ptr @.str.545) + unreachable +ok1020: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic1021, label %ok1022 +panic1021: + call void @finch_panic(ptr @.str.546, i64 19, ptr @.str.547) + unreachable +ok1022: + %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range1023, label %inrange1024 +range1023: + call void @finch_panic_index(ptr @.str.548, i64 19, i64 %t8, i64 %t10) + unreachable +inrange1024: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 + %t14 = load %S.lexer.Token, ptr %t13 + store %S.lexer.Token %t14, ptr %a15 + call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) + %t17 = load %S.lexer.Token, ptr %a16 + ret %S.lexer.Token %t17 +} + +define internal { ptr, i64, i64 } @finch.parser.curKind(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1025, label %ok1026 +panic1025: + call void @finch_panic(ptr @.str.549, i64 23, ptr @.str.550) + unreachable +ok1026: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic1027, label %ok1028 +panic1027: + call void @finch_panic(ptr @.str.551, i64 23, ptr @.str.552) + unreachable +ok1028: + %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range1029, label %inrange1030 +range1029: + call void @finch_panic_index(ptr @.str.553, i64 23, i64 %t8, i64 %t10) + unreachable +inrange1030: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 + %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i32 0, i32 0 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + call void @finch_str_copy(ptr %a17, ptr %a16) + %t18 = load { ptr, i64, i64 }, ptr %a17 + ret { ptr, i64, i64 } %t18 +} + +define internal { ptr, i64, i64 } @finch.parser.peekKind(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a9 = alloca i64, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic1031, label %ok1032 +panic1031: + call void @finch_panic(ptr @.str.554, i64 27, ptr @.str.555) + unreachable +ok1032: + %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = load i64, ptr %a2 + %t8 = add i64 %t6, %t7 + store i64 %t8, ptr %a9 + %t10 = load i64, ptr %a9 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic1033, label %ok1034 +panic1033: + call void @finch_panic(ptr @.str.556, i64 28, ptr @.str.557) + unreachable +ok1034: + %t13 = getelementptr inbounds %S.parser.Parser, ptr %t11, i32 0, i32 0 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = icmp sge i64 %t10, %t15 + br i1 %t16, label %then1035, label %endif1037 +then1035: + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic1038, label %ok1039 +panic1038: + call void @finch_panic(ptr @.str.558, i64 29, ptr @.str.559) + unreachable +ok1039: + %t19 = getelementptr inbounds %S.parser.Parser, ptr %t17, i32 0, i32 0 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load i64, ptr %t20 + %t22 = sub i64 %t21, 1 + store i64 %t22, ptr %a9 + br label %endif1037 +endif1037: + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic1040, label %ok1041 +panic1040: + call void @finch_panic(ptr @.str.560, i64 31, ptr @.str.561) + unreachable +ok1041: + %t25 = getelementptr inbounds %S.parser.Parser, ptr %t23, i32 0, i32 0 + %t26 = load i64, ptr %a9 + %t27 = load { ptr, i64, i64 }, ptr %t25 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 %t26, %t28 + br i1 %t29, label %range1042, label %inrange1043 +range1042: + call void @finch_panic_index(ptr @.str.562, i64 31, i64 %t26, i64 %t28) + unreachable +inrange1043: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds %S.lexer.Token, ptr %t30, i64 %t26 + %t32 = getelementptr inbounds %S.lexer.Token, ptr %t31, i32 0, i32 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_copy(ptr %a35, ptr %a34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + ret { ptr, i64, i64 } %t36 +} + +define internal i1 @finch.parser.at(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic1044, label %ok1045 +panic1044: + call void @finch_panic(ptr @.str.563, i64 35, ptr @.str.564) + unreachable +ok1045: + %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1046, label %ok1047 +panic1046: + call void @finch_panic(ptr @.str.565, i64 35, ptr @.str.566) + unreachable +ok1047: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load { ptr, i64, i64 }, ptr %t5 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range1048, label %inrange1049 +range1048: + call void @finch_panic_index(ptr @.str.567, i64 35, i64 %t9, i64 %t11) + unreachable +inrange1049: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 + %t15 = getelementptr inbounds %S.lexer.Token, ptr %t14, i32 0, i32 0 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } %t17, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + ret i1 %t21 +} + +define internal %S.lexer.Token @finch.parser.next(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a15 = alloca %S.lexer.Token, align 16 + %a16 = alloca %S.lexer.Token, align 16 + %a18 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1050, label %ok1051 +panic1050: + call void @finch_panic(ptr @.str.568, i64 39, ptr @.str.569) + unreachable +ok1051: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic1052, label %ok1053 +panic1052: + call void @finch_panic(ptr @.str.570, i64 39, ptr @.str.571) + unreachable +ok1053: + %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range1054, label %inrange1055 +range1054: + call void @finch_panic_index(ptr @.str.572, i64 39, i64 %t8, i64 %t10) + unreachable +inrange1055: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 + %t14 = load %S.lexer.Token, ptr %t13 + store %S.lexer.Token %t14, ptr %a15 + call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) + %t17 = load %S.lexer.Token, ptr %a16 + store %S.lexer.Token %t17, ptr %a18 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic1056, label %ok1057 +panic1056: + call void @finch_panic(ptr @.str.573, i64 40, ptr @.str.574) + unreachable +ok1057: + %t21 = getelementptr inbounds %S.parser.Parser, ptr %t19, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = add i64 %t22, 1 + store i64 %t23, ptr %t21 + %t24 = load %S.lexer.Token, ptr %a18 + ret %S.lexer.Token %t24 +} + +define internal i1 @finch.parser.accept(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } %t4) + br i1 %t5, label %then1058, label %endif1060 +then1058: + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1061, label %ok1062 +panic1061: + call void @finch_panic(ptr @.str.575, i64 46, ptr @.str.576) + unreachable +ok1062: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = add i64 %t9, 1 + store i64 %t10, ptr %t8 + ret i1 true +endif1060: + ret i1 false +} + +define internal { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %p0) { +entry: + %a1 = alloca %S.lexer.Token, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + store %S.lexer.Token %p0, ptr %a1 + %t2 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.577, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then1063, label %endif1065 +then1063: + %t8 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } { ptr @.str.578, i64 1, i64 0 }, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.579, i64 1, i64 0 }, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + ret { ptr, i64, i64 } %t18 +endif1065: + %t19 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.580, i64 3, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br i1 %t24, label %then1066, label %endif1068 +then1066: + ret { ptr, i64, i64 } { ptr @.str.581, i64 11, i64 0 } +endif1068: + %t25 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.582, i64 3, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br label %logic.from1069 +logic.from1069: + br i1 %t30, label %logic.end1071, label %logic.rhs1070 +logic.rhs1070: + %t31 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.583, i64 5, i64 0 }, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br label %logic.rend1072 +logic.rend1072: + br label %logic.end1071 +logic.end1071: + %t37 = phi i1 [ true, %logic.from1069 ], [ %t36, %logic.rend1072 ] + br i1 %t37, label %then1073, label %endif1075 +then1073: + ret { ptr, i64, i64 } { ptr @.str.584, i64 8, i64 0 } +endif1075: + %t38 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t39 = load { ptr, i64, i64 }, ptr %t38 + store { ptr, i64, i64 } %t39, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.585, i64 6, i64 0 }, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br i1 %t43, label %then1076, label %endif1078 +then1076: + ret { ptr, i64, i64 } { ptr @.str.586, i64 8, i64 0 } +endif1078: + %t44 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.587, i64 4, i64 0 }, ptr %a47 + %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + br i1 %t49, label %then1079, label %endif1081 +then1079: + ret { ptr, i64, i64 } { ptr @.str.588, i64 6, i64 0 } +endif1081: + %t50 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t51 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } { ptr @.str.589, i64 1, i64 0 }, ptr %a53 + store { ptr, i64, i64 } %t51, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.590, i64 1, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + ret { ptr, i64, i64 } %t60 +} + +define internal %S.lexer.Token @finch.parser.expect(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca %S.lexer.Token, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca %S.lexer.Token, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load { ptr, i64, i64 }, ptr %a2 + %t6 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } %t5) + %t7 = xor i1 %t6, true + br i1 %t7, label %then1082, label %endif1084 +then1082: + %t8 = load ptr, ptr %a1 + %t9 = load ptr, ptr %a1 + %t10 = call %S.lexer.Token @finch.parser.cur(ptr %t9) + %t11 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.591, i64 9, i64 0 }, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.592, i64 8, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + %t21 = load ptr, ptr %a1 + %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) + %t23 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t22) + store %S.lexer.Token %t22, ptr %a24 + call void @finch.drop.S_lexer_Token(ptr %a24) + store { ptr, i64, i64 } %t20, ptr %a26 + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t20, ptr %a28 + call void @finch_str_drop(ptr %a28) + store { ptr, i64, i64 } %t23, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.parser.fail(ptr %t8, %S.lexer.Token %t10, { ptr, i64, i64 } %t30) + store %S.lexer.Token %t10, ptr %a31 + call void @finch.drop.S_lexer_Token(ptr %a31) + store { ptr, i64, i64 } %t30, ptr %a32 + call void @finch_str_drop(ptr %a32) + br label %endif1084 +endif1084: + %t33 = load ptr, ptr %a1 + %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) + ret %S.lexer.Token %t34 +} + +define internal i1 @finch.parser.sameLine(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1085, label %ok1086 +panic1085: + call void @finch_panic(ptr @.str.593, i64 79, ptr @.str.594) + unreachable +ok1086: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 2 + %t5 = load i64, ptr %t4 + %t6 = icmp sgt i64 %t5, 0 + br label %logic.from1087 +logic.from1087: + br i1 %t6, label %logic.end1089, label %logic.rhs1088 +logic.rhs1088: + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic1090, label %ok1091 +panic1090: + call void @finch_panic(ptr @.str.595, i64 79, ptr @.str.596) + unreachable +ok1091: + %t9 = getelementptr inbounds %S.parser.Parser, ptr %t7, i32 0, i32 0 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic1092, label %ok1093 +panic1092: + call void @finch_panic(ptr @.str.597, i64 79, ptr @.str.598) + unreachable +ok1093: + %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = load { ptr, i64, i64 }, ptr %t9 + %t15 = extractvalue { ptr, i64, i64 } %t14, 1 + %t16 = icmp uge i64 %t13, %t15 + br i1 %t16, label %range1094, label %inrange1095 +range1094: + call void @finch_panic_index(ptr @.str.599, i64 79, i64 %t13, i64 %t15) + unreachable +inrange1095: + %t17 = extractvalue { ptr, i64, i64 } %t14, 0 + %t18 = getelementptr inbounds %S.lexer.Token, ptr %t17, i64 %t13 + %t19 = getelementptr inbounds %S.lexer.Token, ptr %t18, i32 0, i32 4 + %t20 = load i1, ptr %t19 + %t21 = xor i1 %t20, true + br label %logic.rend1096 +logic.rend1096: + br label %logic.end1089 +logic.end1089: + %t22 = phi i1 [ true, %logic.from1087 ], [ %t21, %logic.rend1096 ] + ret i1 %t22 +} + +define internal %S.ast.Node @finch.parser.node(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.lexer.Token, align 16 + %a17 = alloca %S.lexer.Token, align 16 + %a19 = alloca %S.lexer.Token, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic1097, label %ok1098 +panic1097: + call void @finch_panic(ptr @.str.600, i64 83, ptr @.str.601) + unreachable +ok1098: + %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1099, label %ok1100 +panic1099: + call void @finch_panic(ptr @.str.602, i64 83, ptr @.str.603) + unreachable +ok1100: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load { ptr, i64, i64 }, ptr %t5 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range1101, label %inrange1102 +range1101: + call void @finch_panic_index(ptr @.str.604, i64 83, i64 %t9, i64 %t11) + unreachable +inrange1102: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 + %t15 = load %S.lexer.Token, ptr %t14 + store %S.lexer.Token %t15, ptr %a16 + call void @finch.copy.S_lexer_Token(ptr %a17, ptr %a16) + %t18 = load %S.lexer.Token, ptr %a17 + store %S.lexer.Token %t18, ptr %a19 + %t20 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t20, ptr %a21 + call void @finch_str_copy(ptr %a22, ptr %a21) + %t23 = load { ptr, i64, i64 }, ptr %a22 + %t24 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } %t23, 0 + %t25 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 2 + %t26 = load i64, ptr %t25 + %t27 = insertvalue %S.ast.Node %t24, i64 %t26, 11 + %t28 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 3 + %t29 = load i64, ptr %t28 + %t30 = insertvalue %S.ast.Node %t27, i64 %t29, 12 + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic1103, label %ok1104 +panic1103: + call void @finch_panic(ptr @.str.605, i64 84, ptr @.str.606) + unreachable +ok1104: + %t33 = getelementptr inbounds %S.parser.Parser, ptr %t31, i32 0, i32 3 + %t34 = load i64, ptr %t33 + %t35 = insertvalue %S.ast.Node %t30, i64 %t34, 13 + call void @finch.drop.S_lexer_Token(ptr %a19) + ret %S.ast.Node %t35 +} + +define internal i1 @finch.parser.isTypeName({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca i64, align 16 + %a29 = alloca i64, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.607, i64 3, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.608, i64 5, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.609, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.610, i64 4, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.611, i64 3, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.612, i64 3, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.613, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.614, i64 3, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.615, i64 3, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.616, i64 3, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.617, i64 2, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.618, i64 3, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.619, i64 3, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.620, i64 3, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.621, i64 3, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.622, i64 3, i64 0 }, ptr %t19 + %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 + %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 + %t25 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a26 + %t27 = load i64, ptr %t24 + %t28 = load ptr, ptr %a23 + store i64 0, ptr %a29 + br label %find.cond1105 +find.cond1105: + %t30 = load i64, ptr %a29 + %t31 = icmp slt i64 %t30, %t27 + br i1 %t31, label %find.body1106, label %find.end1109 +find.body1106: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } %t25, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %find.hit1107, label %find.next1108 +find.hit1107: + store i64 %t30, ptr %a26 + br label %find.end1109 +find.next1108: + %t38 = add i64 %t30, 1 + store i64 %t38, ptr %a29 + br label %find.cond1105 +find.end1109: + %t39 = load i64, ptr %a26 + %t40 = icmp sge i64 %t39, 0 + call void @finch.drop.arr_str(ptr %a23) + ret i1 %t40 +} + +define internal %S.ast.Type @finch.parser.parseType(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca %S.lexer.Token, align 16 + %a10 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.lexer.Token, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca %S.lexer.Token, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca %S.lexer.Token, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca %S.lexer.Token, align 16 + %a54 = alloca %S.ast.Type, align 16 + %a57 = alloca %S.lexer.Token, align 16 + %a62 = alloca %S.ast.Type, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca %S.ast.Type, align 16 + %a77 = alloca %S.ast.Type, align 16 + %a80 = alloca %S.lexer.Token, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca %S.lexer.Token, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca %S.lexer.Token, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca %S.lexer.Token, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca %S.lexer.Token, align 16 + %a165 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.accept(ptr %t2, { ptr, i64, i64 } { ptr @.str.623, i64 1, i64 0 }) + br i1 %t3, label %then1110, label %endif1112 +then1110: + %t4 = load ptr, ptr %a1 + %t5 = call %S.lexer.Token @finch.parser.expect(ptr %t4, { ptr, i64, i64 } { ptr @.str.624, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.625, i64 36, i64 0 }) + store %S.lexer.Token %t5, ptr %a6 + call void @finch.drop.S_lexer_Token(ptr %a6) + %t7 = load ptr, ptr %a1 + %t8 = call %S.ast.Type @finch.parser.parseType(ptr %t7) + %t9 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t8) + store %S.ast.Type %t8, ptr %a10 + call void @finch.drop.S_ast_Type(ptr %a10) + ret %S.ast.Type %t9 +endif1112: + %t11 = load ptr, ptr %a1 + %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.626, i64 5, i64 0 }) + %t13 = xor i1 %t12, true + br i1 %t13, label %then1113, label %endif1115 +then1113: + %t14 = load ptr, ptr %a1 + %t15 = load ptr, ptr %a1 + %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) + %t17 = load ptr, ptr %a1 + %t18 = call %S.lexer.Token @finch.parser.cur(ptr %t17) + %t19 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t18) + store %S.lexer.Token %t18, ptr %a20 + call void @finch.drop.S_lexer_Token(ptr %a20) + store { ptr, i64, i64 } { ptr @.str.627, i64 11, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t19, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.628, i64 56, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + call void @finch.parser.fail(ptr %t14, %S.lexer.Token %t16, { ptr, i64, i64 } %t30) + store %S.lexer.Token %t16, ptr %a31 + call void @finch.drop.S_lexer_Token(ptr %a31) + store { ptr, i64, i64 } %t30, ptr %a32 + call void @finch_str_drop(ptr %a32) + br label %endif1115 +endif1115: + %t33 = load ptr, ptr %a1 + %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) + %t35 = extractvalue %S.lexer.Token %t34, 1 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + store %S.lexer.Token %t34, ptr %a39 + call void @finch.drop.S_lexer_Token(ptr %a39) + store { ptr, i64, i64 } %t38, ptr %a40 + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.629, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.from1116 +logic.from1116: + br i1 %t45, label %logic.rhs1117, label %logic.end1118 +logic.rhs1117: + %t46 = load ptr, ptr %a1 + %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.630, i64 1, i64 0 }) + br label %logic.rend1119 +logic.rend1119: + br label %logic.end1118 +logic.end1118: + %t48 = phi i1 [ false, %logic.from1116 ], [ %t47, %logic.rend1119 ] + br i1 %t48, label %then1120, label %endif1122 +then1120: + %t49 = load ptr, ptr %a1 + %t50 = call %S.lexer.Token @finch.parser.next(ptr %t49) + store %S.lexer.Token %t50, ptr %a51 + call void @finch.drop.S_lexer_Token(ptr %a51) + %t52 = load ptr, ptr %a1 + %t53 = call %S.ast.Type @finch.parser.parseType(ptr %t52) + store %S.ast.Type %t53, ptr %a54 + %t55 = load ptr, ptr %a1 + %t56 = call %S.lexer.Token @finch.parser.expect(ptr %t55, { ptr, i64, i64 } { ptr @.str.631, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.632, i64 39, i64 0 }) + store %S.lexer.Token %t56, ptr %a57 + call void @finch.drop.S_lexer_Token(ptr %a57) + %t58 = load %S.ast.Type, ptr %a54 + %t59 = load ptr, ptr %a1 + %t60 = call %S.ast.Type @finch.parser.parseType(ptr %t59) + %t61 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t58, %S.ast.Type %t60) + store %S.ast.Type %t60, ptr %a62 + call void @finch.drop.S_ast_Type(ptr %a62) + call void @finch.drop.S_ast_Type(ptr %a54) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t61 +endif1122: + %t63 = load { ptr, i64, i64 }, ptr %a40 + %t64 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t63) + br i1 %t64, label %then1123, label %endif1125 +then1123: + %t65 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t65, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.633, i64 3, i64 0 }, ptr %a67 + %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) + %t69 = icmp ne i32 %t68, 0 + br label %logic.from1126 +logic.from1126: + br i1 %t69, label %logic.rhs1127, label %logic.end1128 +logic.rhs1127: + %t70 = load ptr, ptr %a1 + %t71 = call i1 @finch.parser.accept(ptr %t70, { ptr, i64, i64 } { ptr @.str.634, i64 1, i64 0 }) + br label %logic.rend1129 +logic.rend1129: + br label %logic.end1128 +logic.end1128: + %t72 = phi i1 [ false, %logic.from1126 ], [ %t71, %logic.rend1129 ] + br i1 %t72, label %then1130, label %endif1132 +then1130: + %t73 = load ptr, ptr %a1 + %t74 = call %S.ast.Type @finch.parser.parseType(ptr %t73) + %t75 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t74) + store %S.ast.Type %t74, ptr %a76 + call void @finch.drop.S_ast_Type(ptr %a76) + store %S.ast.Type %t75, ptr %a77 + %t78 = load ptr, ptr %a1 + %t79 = call %S.lexer.Token @finch.parser.expect(ptr %t78, { ptr, i64, i64 } { ptr @.str.635, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.636, i64 3, i64 0 }) + store %S.lexer.Token %t79, ptr %a80 + call void @finch.drop.S_lexer_Token(ptr %a80) + %t81 = load %S.ast.Type, ptr %a77 + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t81 +endif1132: + %t82 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t82, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.637, i64 3, i64 0 }, ptr %a84 + %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) + %t86 = icmp ne i32 %t85, 0 + br i1 %t86, label %then1133, label %endif1135 +then1133: + %t87 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.638, i64 3, i64 0 }) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t87 +endif1135: + %t88 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t88, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.639, i64 3, i64 0 }, ptr %a90 + %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then1136, label %endif1138 +then1136: + %t93 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.640, i64 5, i64 0 }) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t93 +endif1138: + %t94 = load { ptr, i64, i64 }, ptr %a40 + %t95 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t94) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t95 +endif1125: + %t96 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.641, i64 5, i64 0 }, 0 + %t97 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t97, ptr %a98 + call void @finch_str_copy(ptr %a99, ptr %a98) + %t100 = load { ptr, i64, i64 }, ptr %a99 + %t101 = insertvalue %S.ast.Type %t96, { ptr, i64, i64 } %t100, 2 + store %S.ast.Type %t101, ptr %a102 + %t103 = load ptr, ptr %a1 + %t104 = call i1 @finch.parser.at(ptr %t103, { ptr, i64, i64 } { ptr @.str.642, i64 1, i64 0 }) + br label %logic.from1139 +logic.from1139: + br i1 %t104, label %logic.rhs1140, label %logic.end1141 +logic.rhs1140: + %t105 = load ptr, ptr %a1 + %t106 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t105, i64 1) + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.643, i64 5, i64 0 }, ptr %a108 + %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) + %t110 = icmp ne i32 %t109, 0 + store { ptr, i64, i64 } %t106, ptr %a111 + call void @finch_str_drop(ptr %a111) + br label %logic.rend1142 +logic.rend1142: + br label %logic.end1141 +logic.end1141: + %t112 = phi i1 [ false, %logic.from1139 ], [ %t110, %logic.rend1142 ] + br i1 %t112, label %then1143, label %endif1145 +then1143: + %t113 = load ptr, ptr %a1 + %t114 = call %S.lexer.Token @finch.parser.next(ptr %t113) + store %S.lexer.Token %t114, ptr %a115 + call void @finch.drop.S_lexer_Token(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a40 + %t117 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 3 + store { ptr, i64, i64 } %t116, ptr %a118 + call void @finch_str_copy(ptr %a119, ptr %a118) + %t120 = load { ptr, i64, i64 }, ptr %a119 + %t121 = load { ptr, i64, i64 }, ptr %t117 + store { ptr, i64, i64 } %t120, ptr %t117 + store { ptr, i64, i64 } %t121, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load ptr, ptr %a1 + %t124 = call %S.lexer.Token @finch.parser.next(ptr %t123) + %t125 = extractvalue %S.lexer.Token %t124, 1 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + store %S.lexer.Token %t124, ptr %a129 + call void @finch.drop.S_lexer_Token(ptr %a129) + %t130 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 2 + %t131 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t128, ptr %t130 + store { ptr, i64, i64 } %t131, ptr %a132 + call void @finch_str_drop(ptr %a132) + br label %endif1145 +endif1145: + %t133 = load ptr, ptr %a1 + %t134 = call i1 @finch.parser.at(ptr %t133, { ptr, i64, i64 } { ptr @.str.644, i64 1, i64 0 }) + br label %logic.from1146 +logic.from1146: + br i1 %t134, label %logic.rhs1147, label %logic.end1148 +logic.rhs1147: + %t135 = load ptr, ptr %a1 + %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) + %t137 = extractvalue %S.lexer.Token %t136, 4 + store %S.lexer.Token %t136, ptr %a138 + call void @finch.drop.S_lexer_Token(ptr %a138) + %t139 = xor i1 %t137, true + br label %logic.rend1149 +logic.rend1149: + br label %logic.end1148 +logic.end1148: + %t140 = phi i1 [ false, %logic.from1146 ], [ %t139, %logic.rend1149 ] + br label %logic.from1150 +logic.from1150: + br i1 %t140, label %logic.rhs1151, label %logic.end1152 +logic.rhs1151: + %t141 = load ptr, ptr %a1 + %t142 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t141, i64 1) + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.645, i64 1, i64 0 }, ptr %a144 + %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) + %t146 = icmp eq i32 %t145, 0 + store { ptr, i64, i64 } %t142, ptr %a147 + call void @finch_str_drop(ptr %a147) + br label %logic.rend1153 +logic.rend1153: + br label %logic.end1152 +logic.end1152: + %t148 = phi i1 [ false, %logic.from1150 ], [ %t146, %logic.rend1153 ] + br i1 %t148, label %then1154, label %endif1156 +then1154: + %t149 = load ptr, ptr %a1 + %t150 = call %S.lexer.Token @finch.parser.next(ptr %t149) + store %S.lexer.Token %t150, ptr %a151 + call void @finch.drop.S_lexer_Token(ptr %a151) + br label %while.cond1157 +while.cond1157: + br label %while.body1158 +while.body1158: + %t152 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 1 + %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i32 0, i32 1 + %t154 = load ptr, ptr %a1 + %t155 = call %S.ast.Type @finch.parser.parseType(ptr %t154) + %t156 = load i64, ptr %t153 + %t157 = add i64 %t156, 1 + call void @finch_arr_reserve(ptr %t152, i64 %t157, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t158 = load ptr, ptr %t152 + %t159 = getelementptr inbounds %S.ast.Type, ptr %t158, i64 %t156 + store %S.ast.Type %t155, ptr %t159 + store i64 %t157, ptr %t153 + %t160 = load ptr, ptr %a1 + %t161 = call i1 @finch.parser.accept(ptr %t160, { ptr, i64, i64 } { ptr @.str.646, i64 1, i64 0 }) + %t162 = xor i1 %t161, true + br i1 %t162, label %then1160, label %endif1162 +then1160: + br label %while.end1159 +endif1162: + br label %while.cond1157 +while.end1159: + %t163 = load ptr, ptr %a1 + %t164 = call %S.lexer.Token @finch.parser.expect(ptr %t163, { ptr, i64, i64 } { ptr @.str.647, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.648, i64 28, i64 0 }) + store %S.lexer.Token %t164, ptr %a165 + call void @finch.drop.S_lexer_Token(ptr %a165) + br label %endif1156 +endif1156: + %t166 = load %S.ast.Type, ptr %a102 + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t166 +} + +define internal i1 @finch.parser.genericDeclAhead(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca i64, align 16 + %a27 = alloca i64, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.649, i64 5, i64 0 }) + %t4 = xor i1 %t3, true + br label %logic.from1163 +logic.from1163: + br i1 %t4, label %logic.end1165, label %logic.rhs1164 +logic.rhs1164: + %t5 = load ptr, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t5, i64 1) + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.650, i64 1, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp eq i32 %t9, 0 + store { ptr, i64, i64 } %t6, ptr %a11 + call void @finch_str_drop(ptr %a11) + br label %logic.rend1166 +logic.rend1166: + br label %logic.end1165 +logic.end1165: + %t12 = phi i1 [ true, %logic.from1163 ], [ %t10, %logic.rend1166 ] + br label %logic.from1167 +logic.from1167: + br i1 %t12, label %logic.end1169, label %logic.rhs1168 +logic.rhs1168: + %t13 = load ptr, ptr %a1 + %t14 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t13, i64 2) + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.651, i64 1, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + store { ptr, i64, i64 } %t14, ptr %a19 + call void @finch_str_drop(ptr %a19) + br label %logic.rend1170 +logic.rend1170: + br label %logic.end1169 +logic.end1169: + %t20 = phi i1 [ true, %logic.from1167 ], [ %t18, %logic.rend1170 ] + br i1 %t20, label %then1171, label %endif1173 +then1171: + ret i1 false +endif1173: + store i64 0, ptr %a21 + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic1174, label %ok1175 +panic1174: + call void @finch_panic(ptr @.str.652, i64 148, ptr @.str.653) + unreachable +ok1175: + %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = add i64 %t25, 1 + store i64 %t26, ptr %a27 + br label %while.cond1176 +while.cond1176: + %t28 = load i64, ptr %a27 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic1179, label %ok1180 +panic1179: + call void @finch_panic(ptr @.str.654, i64 149, ptr @.str.655) + unreachable +ok1180: + %t31 = getelementptr inbounds %S.parser.Parser, ptr %t29, i32 0, i32 0 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = icmp slt i64 %t28, %t33 + br i1 %t34, label %while.body1177, label %while.end1178 +while.body1177: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic1181, label %ok1182 +panic1181: + call void @finch_panic(ptr @.str.656, i64 150, ptr @.str.657) + unreachable +ok1182: + %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 0 + %t38 = load i64, ptr %a27 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range1183, label %inrange1184 +range1183: + call void @finch_panic_index(ptr @.str.658, i64 150, i64 %t38, i64 %t40) + unreachable +inrange1184: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.lexer.Token, ptr %t42, i64 %t38 + %t44 = getelementptr inbounds %S.lexer.Token, ptr %t43, i32 0, i32 0 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch_str_copy(ptr %a47, ptr %a46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t48, ptr %a49 + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.659, i64 1, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then1185, label %else1186 +then1185: + %t55 = load i64, ptr %a21 + %t56 = add i64 %t55, 1 + store i64 %t56, ptr %a21 + br label %endif1187 +else1186: + %t57 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.660, i64 1, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br i1 %t61, label %then1188, label %else1189 +then1188: + %t62 = load i64, ptr %a21 + %t63 = sub i64 %t62, 1 + store i64 %t63, ptr %a21 + %t64 = load i64, ptr %a21 + %t65 = icmp eq i64 %t64, 0 + br i1 %t65, label %then1191, label %endif1193 +then1191: + %t66 = load i64, ptr %a27 + %t67 = add i64 %t66, 1 + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic1194, label %ok1195 +panic1194: + call void @finch_panic(ptr @.str.661, i64 156, ptr @.str.662) + unreachable +ok1195: + %t70 = getelementptr inbounds %S.parser.Parser, ptr %t68, i32 0, i32 0 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 + %t72 = load i64, ptr %t71 + %t73 = icmp slt i64 %t67, %t72 + br label %logic.from1196 +logic.from1196: + br i1 %t73, label %logic.rhs1197, label %logic.end1198 +logic.rhs1197: + %t74 = load ptr, ptr %a1 + %t75 = icmp eq ptr %t74, null + br i1 %t75, label %panic1199, label %ok1200 +panic1199: + call void @finch_panic(ptr @.str.663, i64 156, ptr @.str.664) + unreachable +ok1200: + %t76 = getelementptr inbounds %S.parser.Parser, ptr %t74, i32 0, i32 0 + %t77 = load i64, ptr %a27 + %t78 = add i64 %t77, 1 + %t79 = load { ptr, i64, i64 }, ptr %t76 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range1201, label %inrange1202 +range1201: + call void @finch_panic_index(ptr @.str.665, i64 156, i64 %t78, i64 %t80) + unreachable +inrange1202: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds %S.lexer.Token, ptr %t82, i64 %t78 + %t84 = getelementptr inbounds %S.lexer.Token, ptr %t83, i32 0, i32 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.666, i64 5, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + br label %logic.rend1203 +logic.rend1203: + br label %logic.end1198 +logic.end1198: + %t90 = phi i1 [ false, %logic.from1196 ], [ %t89, %logic.rend1203 ] + br label %logic.from1204 +logic.from1204: + br i1 %t90, label %logic.rhs1205, label %logic.end1206 +logic.rhs1205: + %t91 = load ptr, ptr %a1 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic1207, label %ok1208 +panic1207: + call void @finch_panic(ptr @.str.667, i64 156, ptr @.str.668) + unreachable +ok1208: + %t93 = getelementptr inbounds %S.parser.Parser, ptr %t91, i32 0, i32 0 + %t94 = load i64, ptr %a27 + %t95 = add i64 %t94, 1 + %t96 = load { ptr, i64, i64 }, ptr %t93 + %t97 = extractvalue { ptr, i64, i64 } %t96, 1 + %t98 = icmp uge i64 %t95, %t97 + br i1 %t98, label %range1209, label %inrange1210 +range1209: + call void @finch_panic_index(ptr @.str.669, i64 156, i64 %t95, i64 %t97) + unreachable +inrange1210: + %t99 = extractvalue { ptr, i64, i64 } %t96, 0 + %t100 = getelementptr inbounds %S.lexer.Token, ptr %t99, i64 %t95 + %t101 = getelementptr inbounds %S.lexer.Token, ptr %t100, i32 0, i32 4 + %t102 = load i1, ptr %t101 + %t103 = xor i1 %t102, true + br label %logic.rend1211 +logic.rend1211: + br label %logic.end1206 +logic.end1206: + %t104 = phi i1 [ false, %logic.from1204 ], [ %t103, %logic.rend1211 ] + call void @finch_str_drop(ptr %a49) + ret i1 %t104 +endif1193: + br label %endif1190 +else1189: + %t105 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t105, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.670, i64 3, i64 0 }, ptr %a107 + %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) + %t109 = icmp ne i32 %t108, 0 + br label %logic.from1212 +logic.from1212: + br i1 %t109, label %logic.end1214, label %logic.rhs1213 +logic.rhs1213: + %t110 = load ptr, ptr %a1 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic1215, label %ok1216 +panic1215: + call void @finch_panic(ptr @.str.671, i64 158, ptr @.str.672) + unreachable +ok1216: + %t112 = getelementptr inbounds %S.parser.Parser, ptr %t110, i32 0, i32 0 + %t113 = load i64, ptr %a27 + %t114 = load { ptr, i64, i64 }, ptr %t112 + %t115 = extractvalue { ptr, i64, i64 } %t114, 1 + %t116 = icmp uge i64 %t113, %t115 + br i1 %t116, label %range1217, label %inrange1218 +range1217: + call void @finch_panic_index(ptr @.str.673, i64 158, i64 %t113, i64 %t115) + unreachable +inrange1218: + %t117 = extractvalue { ptr, i64, i64 } %t114, 0 + %t118 = getelementptr inbounds %S.lexer.Token, ptr %t117, i64 %t113 + %t119 = getelementptr inbounds %S.lexer.Token, ptr %t118, i32 0, i32 4 + %t120 = load i1, ptr %t119 + br label %logic.from1219 +logic.from1219: + br i1 %t120, label %logic.rhs1220, label %logic.end1221 +logic.rhs1220: + %t121 = load i64, ptr %a21 + %t122 = icmp eq i64 %t121, 0 + br label %logic.rend1222 +logic.rend1222: + br label %logic.end1221 +logic.end1221: + %t123 = phi i1 [ false, %logic.from1219 ], [ %t122, %logic.rend1222 ] + br label %logic.rend1223 +logic.rend1223: + br label %logic.end1214 +logic.end1214: + %t124 = phi i1 [ true, %logic.from1212 ], [ %t123, %logic.rend1223 ] + br i1 %t124, label %then1224, label %endif1226 +then1224: + call void @finch_str_drop(ptr %a49) + ret i1 false +endif1226: + br label %endif1190 +endif1190: + br label %endif1187 +endif1187: + %t125 = load i64, ptr %a27 + %t126 = add i64 %t125, 1 + store i64 %t126, ptr %a27 + call void @finch_str_drop(ptr %a49) + br label %while.cond1176 +while.end1178: + ret i1 false +} + +define internal i1 @finch.parser.genericCallAheadFrom(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a9 = alloca i1, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1227, label %ok1228 +panic1227: + call void @finch_panic(ptr @.str.674, i64 168, ptr @.str.675) + unreachable +ok1228: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = sub i64 %t5, 1 + store i64 %t6, ptr %t4 + %t7 = load ptr, ptr %a1 + %t8 = call i1 @finch.parser.genericCallAhead(ptr %t7) + store i1 %t8, ptr %a9 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic1229, label %ok1230 +panic1229: + call void @finch_panic(ptr @.str.676, i64 170, ptr @.str.677) + unreachable +ok1230: + %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + store i64 %t14, ptr %t12 + %t15 = load i1, ptr %a9 + ret i1 %t15 +} + +define internal i1 @finch.parser.genericCallAhead(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca i64, align 16 + %a39 = alloca i64, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t2, i64 1) + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.678, i64 1, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp eq i32 %t6, 0 + store { ptr, i64, i64 } %t3, ptr %a8 + call void @finch_str_drop(ptr %a8) + br label %logic.from1231 +logic.from1231: + br i1 %t7, label %logic.end1233, label %logic.rhs1232 +logic.rhs1232: + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic1234, label %ok1235 +panic1234: + call void @finch_panic(ptr @.str.679, i64 176, ptr @.str.680) + unreachable +ok1235: + %t11 = getelementptr inbounds %S.parser.Parser, ptr %t9, i32 0, i32 0 + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic1236, label %ok1237 +panic1236: + call void @finch_panic(ptr @.str.681, i64 176, ptr @.str.682) + unreachable +ok1237: + %t14 = getelementptr inbounds %S.parser.Parser, ptr %t12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = add i64 %t15, 1 + %t17 = load { ptr, i64, i64 }, ptr %t11 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range1238, label %inrange1239 +range1238: + call void @finch_panic_index(ptr @.str.683, i64 176, i64 %t16, i64 %t18) + unreachable +inrange1239: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.lexer.Token, ptr %t20, i64 %t16 + %t22 = getelementptr inbounds %S.lexer.Token, ptr %t21, i32 0, i32 4 + %t23 = load i1, ptr %t22 + br label %logic.rend1240 +logic.rend1240: + br label %logic.end1233 +logic.end1233: + %t24 = phi i1 [ true, %logic.from1231 ], [ %t23, %logic.rend1240 ] + br label %logic.from1241 +logic.from1241: + br i1 %t24, label %logic.end1243, label %logic.rhs1242 +logic.rhs1242: + %t25 = load ptr, ptr %a1 + %t26 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t25, i64 2) + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.684, i64 1, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + br label %logic.rend1244 +logic.rend1244: + br label %logic.end1243 +logic.end1243: + %t32 = phi i1 [ true, %logic.from1241 ], [ %t30, %logic.rend1244 ] + br i1 %t32, label %then1245, label %endif1247 +then1245: + ret i1 false +endif1247: + store i64 0, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic1248, label %ok1249 +panic1248: + call void @finch_panic(ptr @.str.685, i64 180, ptr @.str.686) + unreachable +ok1249: + %t36 = getelementptr inbounds %S.parser.Parser, ptr %t34, i32 0, i32 1 + %t37 = load i64, ptr %t36 + %t38 = add i64 %t37, 1 + store i64 %t38, ptr %a39 + br label %while.cond1250 +while.cond1250: + %t40 = load i64, ptr %a39 + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic1253, label %ok1254 +panic1253: + call void @finch_panic(ptr @.str.687, i64 181, ptr @.str.688) + unreachable +ok1254: + %t43 = getelementptr inbounds %S.parser.Parser, ptr %t41, i32 0, i32 0 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = icmp slt i64 %t40, %t45 + br i1 %t46, label %while.body1251, label %while.end1252 +while.body1251: + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic1255, label %ok1256 +panic1255: + call void @finch_panic(ptr @.str.689, i64 182, ptr @.str.690) + unreachable +ok1256: + %t49 = getelementptr inbounds %S.parser.Parser, ptr %t47, i32 0, i32 0 + %t50 = load i64, ptr %a39 + %t51 = load { ptr, i64, i64 }, ptr %t49 + %t52 = extractvalue { ptr, i64, i64 } %t51, 1 + %t53 = icmp uge i64 %t50, %t52 + br i1 %t53, label %range1257, label %inrange1258 +range1257: + call void @finch_panic_index(ptr @.str.691, i64 182, i64 %t50, i64 %t52) + unreachable +inrange1258: + %t54 = extractvalue { ptr, i64, i64 } %t51, 0 + %t55 = getelementptr inbounds %S.lexer.Token, ptr %t54, i64 %t50 + %t56 = getelementptr inbounds %S.lexer.Token, ptr %t55, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch_str_copy(ptr %a59, ptr %a58) + %t60 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t60, ptr %a61 + %t62 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.692, i64 1, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br i1 %t66, label %then1259, label %else1260 +then1259: + %t67 = load i64, ptr %a33 + %t68 = add i64 %t67, 1 + store i64 %t68, ptr %a33 + br label %endif1261 +else1260: + %t69 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.693, i64 1, i64 0 }, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %then1262, label %else1263 +then1262: + %t74 = load i64, ptr %a33 + %t75 = sub i64 %t74, 1 + store i64 %t75, ptr %a33 + %t76 = load i64, ptr %a33 + %t77 = icmp eq i64 %t76, 0 + br i1 %t77, label %then1265, label %endif1267 +then1265: + %t78 = load i64, ptr %a39 + %t79 = add i64 %t78, 1 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic1268, label %ok1269 +panic1268: + call void @finch_panic(ptr @.str.694, i64 188, ptr @.str.695) + unreachable +ok1269: + %t82 = getelementptr inbounds %S.parser.Parser, ptr %t80, i32 0, i32 0 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 + %t84 = load i64, ptr %t83 + %t85 = icmp slt i64 %t79, %t84 + br label %logic.from1270 +logic.from1270: + br i1 %t85, label %logic.rhs1271, label %logic.end1272 +logic.rhs1271: + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic1273, label %ok1274 +panic1273: + call void @finch_panic(ptr @.str.696, i64 188, ptr @.str.697) + unreachable +ok1274: + %t88 = getelementptr inbounds %S.parser.Parser, ptr %t86, i32 0, i32 0 + %t89 = load i64, ptr %a39 + %t90 = add i64 %t89, 1 + %t91 = load { ptr, i64, i64 }, ptr %t88 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 %t90, %t92 + br i1 %t93, label %range1275, label %inrange1276 +range1275: + call void @finch_panic_index(ptr @.str.698, i64 188, i64 %t90, i64 %t92) + unreachable +inrange1276: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds %S.lexer.Token, ptr %t94, i64 %t90 + %t96 = getelementptr inbounds %S.lexer.Token, ptr %t95, i32 0, i32 0 + %t97 = load { ptr, i64, i64 }, ptr %t96 + store { ptr, i64, i64 } %t97, ptr %a98 + store { ptr, i64, i64 } { ptr @.str.699, i64 1, i64 0 }, ptr %a99 + %t100 = call i32 @finch_str_eq(ptr %a98, ptr %a99) + %t101 = icmp ne i32 %t100, 0 + br label %logic.rend1277 +logic.rend1277: + br label %logic.end1272 +logic.end1272: + %t102 = phi i1 [ false, %logic.from1270 ], [ %t101, %logic.rend1277 ] + br label %logic.from1278 +logic.from1278: + br i1 %t102, label %logic.rhs1279, label %logic.end1280 +logic.rhs1279: + %t103 = load ptr, ptr %a1 + %t104 = icmp eq ptr %t103, null + br i1 %t104, label %panic1281, label %ok1282 +panic1281: + call void @finch_panic(ptr @.str.700, i64 188, ptr @.str.701) + unreachable +ok1282: + %t105 = getelementptr inbounds %S.parser.Parser, ptr %t103, i32 0, i32 0 + %t106 = load i64, ptr %a39 + %t107 = add i64 %t106, 1 + %t108 = load { ptr, i64, i64 }, ptr %t105 + %t109 = extractvalue { ptr, i64, i64 } %t108, 1 + %t110 = icmp uge i64 %t107, %t109 + br i1 %t110, label %range1283, label %inrange1284 +range1283: + call void @finch_panic_index(ptr @.str.702, i64 188, i64 %t107, i64 %t109) + unreachable +inrange1284: + %t111 = extractvalue { ptr, i64, i64 } %t108, 0 + %t112 = getelementptr inbounds %S.lexer.Token, ptr %t111, i64 %t107 + %t113 = getelementptr inbounds %S.lexer.Token, ptr %t112, i32 0, i32 4 + %t114 = load i1, ptr %t113 + %t115 = xor i1 %t114, true + br label %logic.rend1285 +logic.rend1285: + br label %logic.end1280 +logic.end1280: + %t116 = phi i1 [ false, %logic.from1278 ], [ %t115, %logic.rend1285 ] + call void @finch_str_drop(ptr %a61) + ret i1 %t116 +endif1267: + br label %endif1264 +else1263: + %t117 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t117, ptr %a118 + store { ptr, i64, i64 } { ptr @.str.703, i64 3, i64 0 }, ptr %a119 + %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) + %t121 = icmp ne i32 %t120, 0 + br label %logic.from1286 +logic.from1286: + br i1 %t121, label %logic.end1288, label %logic.rhs1287 +logic.rhs1287: + %t122 = load ptr, ptr %a1 + %t123 = icmp eq ptr %t122, null + br i1 %t123, label %panic1289, label %ok1290 +panic1289: + call void @finch_panic(ptr @.str.704, i64 190, ptr @.str.705) + unreachable +ok1290: + %t124 = getelementptr inbounds %S.parser.Parser, ptr %t122, i32 0, i32 0 + %t125 = load i64, ptr %a39 + %t126 = load { ptr, i64, i64 }, ptr %t124 + %t127 = extractvalue { ptr, i64, i64 } %t126, 1 + %t128 = icmp uge i64 %t125, %t127 + br i1 %t128, label %range1291, label %inrange1292 +range1291: + call void @finch_panic_index(ptr @.str.706, i64 190, i64 %t125, i64 %t127) + unreachable +inrange1292: + %t129 = extractvalue { ptr, i64, i64 } %t126, 0 + %t130 = getelementptr inbounds %S.lexer.Token, ptr %t129, i64 %t125 + %t131 = getelementptr inbounds %S.lexer.Token, ptr %t130, i32 0, i32 4 + %t132 = load i1, ptr %t131 + br label %logic.rend1293 +logic.rend1293: + br label %logic.end1288 +logic.end1288: + %t133 = phi i1 [ true, %logic.from1286 ], [ %t132, %logic.rend1293 ] + br i1 %t133, label %then1294, label %endif1296 +then1294: + call void @finch_str_drop(ptr %a61) + ret i1 false +endif1296: + br label %endif1264 +endif1264: + br label %endif1261 +endif1261: + %t134 = load i64, ptr %a39 + %t135 = add i64 %t134, 1 + store i64 %t135, ptr %a39 + call void @finch_str_drop(ptr %a61) + br label %while.cond1250 +while.end1252: + ret i1 false +} + +define internal i1 @finch.parser.atDeclaration(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.lexer.Token, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca %S.lexer.Token, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.genericDeclAhead(ptr %t2) + br i1 %t3, label %then1297, label %endif1299 +then1297: + ret i1 true +endif1299: + %t4 = load ptr, ptr %a1 + %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.707, i64 1, i64 0 }) + br i1 %t5, label %then1300, label %endif1302 +then1300: + %t6 = load ptr, ptr %a1 + %t7 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t6, i64 1) + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.708, i64 1, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + store { ptr, i64, i64 } %t7, ptr %a12 + call void @finch_str_drop(ptr %a12) + ret i1 %t11 +endif1302: + %t13 = load ptr, ptr %a1 + %t14 = call i1 @finch.parser.at(ptr %t13, { ptr, i64, i64 } { ptr @.str.709, i64 5, i64 0 }) + %t15 = xor i1 %t14, true + br i1 %t15, label %then1303, label %endif1305 +then1303: + ret i1 false +endif1305: + %t16 = load ptr, ptr %a1 + %t17 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t16, i64 1) + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.710, i64 5, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br i1 %t23, label %then1306, label %endif1308 +then1306: + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic1309, label %ok1310 +panic1309: + call void @finch_panic(ptr @.str.711, i64 210, ptr @.str.712) + unreachable +ok1310: + %t26 = getelementptr inbounds %S.parser.Parser, ptr %t24, i32 0, i32 0 + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic1311, label %ok1312 +panic1311: + call void @finch_panic(ptr @.str.713, i64 210, ptr @.str.714) + unreachable +ok1312: + %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = add i64 %t30, 1 + %t32 = load { ptr, i64, i64 }, ptr %t26 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range1313, label %inrange1314 +range1313: + call void @finch_panic_index(ptr @.str.715, i64 210, i64 %t31, i64 %t33) + unreachable +inrange1314: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.lexer.Token, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.lexer.Token, ptr %t36, i32 0, i32 4 + %t38 = load i1, ptr %t37 + %t39 = xor i1 %t38, true + call void @finch_str_drop(ptr %a18) + ret i1 %t39 +endif1308: + %t40 = load ptr, ptr %a1 + %t41 = call %S.lexer.Token @finch.parser.cur(ptr %t40) + %t42 = extractvalue %S.lexer.Token %t41, 1 + store { ptr, i64, i64 } %t42, ptr %a43 + call void @finch_str_copy(ptr %a44, ptr %a43) + %t45 = load { ptr, i64, i64 }, ptr %a44 + store %S.lexer.Token %t41, ptr %a46 + call void @finch.drop.S_lexer_Token(ptr %a46) + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.716, i64 3, i64 0 }, ptr %a48 + %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) + %t50 = icmp ne i32 %t49, 0 + store { ptr, i64, i64 } %t45, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %logic.from1315 +logic.from1315: + br i1 %t50, label %logic.end1317, label %logic.rhs1316 +logic.rhs1316: + %t52 = load ptr, ptr %a1 + %t53 = call %S.lexer.Token @finch.parser.cur(ptr %t52) + %t54 = extractvalue %S.lexer.Token %t53, 1 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_copy(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + store %S.lexer.Token %t53, ptr %a58 + call void @finch.drop.S_lexer_Token(ptr %a58) + store { ptr, i64, i64 } %t57, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.717, i64 3, i64 0 }, ptr %a60 + %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) + %t62 = icmp ne i32 %t61, 0 + store { ptr, i64, i64 } %t57, ptr %a63 + call void @finch_str_drop(ptr %a63) + br label %logic.rend1318 +logic.rend1318: + br label %logic.end1317 +logic.end1317: + %t64 = phi i1 [ true, %logic.from1315 ], [ %t62, %logic.rend1318 ] + br label %logic.from1319 +logic.from1319: + br i1 %t64, label %logic.rhs1320, label %logic.end1321 +logic.rhs1320: + %t65 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t65, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.718, i64 1, i64 0 }, ptr %a67 + %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) + %t69 = icmp ne i32 %t68, 0 + br label %logic.rend1322 +logic.rend1322: + br label %logic.end1321 +logic.end1321: + %t70 = phi i1 [ false, %logic.from1319 ], [ %t69, %logic.rend1322 ] + br i1 %t70, label %then1323, label %endif1325 +then1323: + call void @finch_str_drop(ptr %a18) + ret i1 true +endif1325: + %t71 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t71, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.719, i64 1, i64 0 }, ptr %a73 + %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) + %t75 = icmp ne i32 %t74, 0 + br label %logic.from1326 +logic.from1326: + br i1 %t75, label %logic.rhs1327, label %logic.end1328 +logic.rhs1327: + %t76 = load ptr, ptr %a1 + %t77 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t76, i64 2) + store { ptr, i64, i64 } %t77, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.720, i64 5, i64 0 }, ptr %a79 + %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) + %t81 = icmp ne i32 %t80, 0 + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + br label %logic.rend1329 +logic.rend1329: + br label %logic.end1328 +logic.end1328: + %t83 = phi i1 [ false, %logic.from1326 ], [ %t81, %logic.rend1329 ] + br label %logic.from1330 +logic.from1330: + br i1 %t83, label %logic.rhs1331, label %logic.end1332 +logic.rhs1331: + %t84 = load ptr, ptr %a1 + %t85 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t84, i64 3) + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.721, i64 5, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + br label %logic.rend1333 +logic.rend1333: + br label %logic.end1332 +logic.end1332: + %t91 = phi i1 [ false, %logic.from1330 ], [ %t89, %logic.rend1333 ] + br label %logic.from1334 +logic.from1334: + br i1 %t91, label %logic.rhs1335, label %logic.end1336 +logic.rhs1335: + %t92 = load ptr, ptr %a1 + %t93 = icmp eq ptr %t92, null + br i1 %t93, label %panic1337, label %ok1338 +panic1337: + call void @finch_panic(ptr @.str.722, i64 215, ptr @.str.723) + unreachable +ok1338: + %t94 = getelementptr inbounds %S.parser.Parser, ptr %t92, i32 0, i32 0 + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic1339, label %ok1340 +panic1339: + call void @finch_panic(ptr @.str.724, i64 215, ptr @.str.725) + unreachable +ok1340: + %t97 = getelementptr inbounds %S.parser.Parser, ptr %t95, i32 0, i32 1 + %t98 = load i64, ptr %t97 + %t99 = add i64 %t98, 3 + %t100 = load { ptr, i64, i64 }, ptr %t94 + %t101 = extractvalue { ptr, i64, i64 } %t100, 1 + %t102 = icmp uge i64 %t99, %t101 + br i1 %t102, label %range1341, label %inrange1342 +range1341: + call void @finch_panic_index(ptr @.str.726, i64 215, i64 %t99, i64 %t101) + unreachable +inrange1342: + %t103 = extractvalue { ptr, i64, i64 } %t100, 0 + %t104 = getelementptr inbounds %S.lexer.Token, ptr %t103, i64 %t99 + %t105 = getelementptr inbounds %S.lexer.Token, ptr %t104, i32 0, i32 4 + %t106 = load i1, ptr %t105 + %t107 = xor i1 %t106, true + br label %logic.rend1343 +logic.rend1343: + br label %logic.end1336 +logic.end1336: + %t108 = phi i1 [ false, %logic.from1334 ], [ %t107, %logic.rend1343 ] + call void @finch_str_drop(ptr %a18) + ret i1 %t108 +} + +define internal void @finch.parser.endOfStatement(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a10 = alloca %S.lexer.Token, align 16 + %a18 = alloca %S.lexer.Token, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca %S.lexer.Token, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.727, i64 1, i64 0 }) + br label %logic.from1344 +logic.from1344: + br i1 %t3, label %logic.end1346, label %logic.rhs1345 +logic.rhs1345: + %t4 = load ptr, ptr %a1 + %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.728, i64 3, i64 0 }) + br label %logic.rend1347 +logic.rend1347: + br label %logic.end1346 +logic.end1346: + %t6 = phi i1 [ true, %logic.from1344 ], [ %t5, %logic.rend1347 ] + br label %logic.from1348 +logic.from1348: + br i1 %t6, label %logic.end1350, label %logic.rhs1349 +logic.rhs1349: + %t7 = load ptr, ptr %a1 + %t8 = call %S.lexer.Token @finch.parser.cur(ptr %t7) + %t9 = extractvalue %S.lexer.Token %t8, 4 + store %S.lexer.Token %t8, ptr %a10 + call void @finch.drop.S_lexer_Token(ptr %a10) + br label %logic.rend1351 +logic.rend1351: + br label %logic.end1350 +logic.end1350: + %t11 = phi i1 [ true, %logic.from1348 ], [ %t9, %logic.rend1351 ] + br i1 %t11, label %then1352, label %endif1354 +then1352: + ret void +endif1354: + %t12 = load ptr, ptr %a1 + %t13 = load ptr, ptr %a1 + %t14 = call %S.lexer.Token @finch.parser.cur(ptr %t13) + %t15 = load ptr, ptr %a1 + %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) + %t17 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t16) + store %S.lexer.Token %t16, ptr %a18 + call void @finch.drop.S_lexer_Token(ptr %a18) + store { ptr, i64, i64 } { ptr @.str.729, i64 11, i64 0 }, ptr %a20 + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t17, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.730, i64 37, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + call void @finch.parser.fail(ptr %t12, %S.lexer.Token %t14, { ptr, i64, i64 } %t28) + store %S.lexer.Token %t14, ptr %a29 + call void @finch.drop.S_lexer_Token(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a30 + call void @finch_str_drop(ptr %a30) + ret void +} + +define internal %S.ast.Program @finch.parser.parseProgram(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Program, align 16 + %a10 = alloca %S.lexer.Token, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca %S.lexer.Token, align 16 + %a87 = alloca %S.lexer.Token, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca %S.lexer.Token, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca i1, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca %S.ast.Node, align 16 + %a170 = alloca %S.ast.Node, align 16 + %a171 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Program zeroinitializer, ptr %a2 + br label %while.cond1355 +while.cond1355: + %t3 = load ptr, ptr %a1 + %t4 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } { ptr @.str.731, i64 3, i64 0 }) + %t5 = xor i1 %t4, true + br i1 %t5, label %while.body1356, label %while.end1357 +while.body1356: + %t6 = load ptr, ptr %a1 + %t7 = call i1 @finch.parser.at(ptr %t6, { ptr, i64, i64 } { ptr @.str.732, i64 6, i64 0 }) + br i1 %t7, label %then1358, label %else1359 +then1358: + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.next(ptr %t8) + store %S.lexer.Token %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.733, i64 6, i64 0 }) + br i1 %t12, label %then1361, label %else1362 +then1361: + %t13 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 4 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic1364, label %ok1365 +panic1364: + call void @finch_panic(ptr @.str.734, i64 233, ptr @.str.735) + unreachable +ok1365: + %t17 = getelementptr inbounds %S.parser.Parser, ptr %t15, i32 0, i32 4 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.736, i64 1, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a19 + %t23 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 2 + %t24 = load i64, ptr %t23 + call void @finch_str_from_int(ptr %a25, i64 %t24) + %t26 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t22, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t22, ptr %a30 + call void @finch_str_drop(ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.737, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 3 + %t39 = load i64, ptr %t38 + call void @finch_str_from_int(ptr %a40, i64 %t39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t37, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t37, ptr %a45 + call void @finch_str_drop(ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a42 + %t48 = load i64, ptr %t14 + %t49 = add i64 %t48, 1 + call void @finch_arr_reserve(ptr %t13, i64 %t49, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t50 = load ptr, ptr %t13 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 + store { ptr, i64, i64 } %t47, ptr %t51 + store i64 %t49, ptr %t14 + %t52 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 3 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 + %t54 = load ptr, ptr %a1 + %t55 = call %S.lexer.Token @finch.parser.next(ptr %t54) + %t56 = extractvalue %S.lexer.Token %t55, 1 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_copy(ptr %a58, ptr %a57) + %t59 = load { ptr, i64, i64 }, ptr %a58 + store %S.lexer.Token %t55, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + %t61 = load i64, ptr %t53 + %t62 = add i64 %t61, 1 + call void @finch_arr_reserve(ptr %t52, i64 %t62, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t63 = load ptr, ptr %t52 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i64 %t61 + store { ptr, i64, i64 } %t59, ptr %t64 + store i64 %t62, ptr %t53 + br label %endif1363 +else1362: + %t65 = load ptr, ptr %a1 + %t66 = call i1 @finch.parser.at(ptr %t65, { ptr, i64, i64 } { ptr @.str.738, i64 5, i64 0 }) + %t67 = xor i1 %t66, true + br i1 %t67, label %then1366, label %endif1368 +then1366: + %t68 = load ptr, ptr %a1 + %t69 = load %S.lexer.Token, ptr %a10 + call void @finch.parser.fail(ptr %t68, %S.lexer.Token %t69, { ptr, i64, i64 } { ptr @.str.739, i64 51, i64 0 }) + br label %endif1368 +endif1368: + %t70 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 2 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 + %t72 = load ptr, ptr %a1 + %t73 = call %S.lexer.Token @finch.parser.next(ptr %t72) + %t74 = extractvalue %S.lexer.Token %t73, 1 + store { ptr, i64, i64 } %t74, ptr %a75 + call void @finch_str_copy(ptr %a76, ptr %a75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + store %S.lexer.Token %t73, ptr %a78 + call void @finch.drop.S_lexer_Token(ptr %a78) + %t79 = load i64, ptr %t71 + %t80 = add i64 %t79, 1 + call void @finch_arr_reserve(ptr %t70, i64 %t80, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t81 = load ptr, ptr %t70 + %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i64 %t79 + store { ptr, i64, i64 } %t77, ptr %t82 + store i64 %t80, ptr %t71 + br label %endif1363 +endif1363: + call void @finch.drop.S_lexer_Token(ptr %a10) + br label %endif1360 +else1359: + %t83 = load ptr, ptr %a1 + %t84 = call i1 @finch.parser.at(ptr %t83, { ptr, i64, i64 } { ptr @.str.740, i64 4, i64 0 }) + br i1 %t84, label %then1369, label %else1370 +then1369: + %t85 = load ptr, ptr %a1 + %t86 = call %S.lexer.Token @finch.parser.next(ptr %t85) + store %S.lexer.Token %t86, ptr %a87 + %t88 = load ptr, ptr %a1 + %t89 = call %S.lexer.Token @finch.parser.expect(ptr %t88, { ptr, i64, i64 } { ptr @.str.741, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.742, i64 42, i64 0 }) + %t90 = extractvalue %S.lexer.Token %t89, 1 + store { ptr, i64, i64 } %t90, ptr %a91 + call void @finch_str_copy(ptr %a92, ptr %a91) + %t93 = load { ptr, i64, i64 }, ptr %a92 + store %S.lexer.Token %t89, ptr %a94 + call void @finch.drop.S_lexer_Token(ptr %a94) + store { ptr, i64, i64 } %t93, ptr %a95 + %t96 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.744, i64 2, i64 0 }, ptr %a99 + %t100 = call i32 @finch_str_ends(ptr %a97, ptr %a99) + %t101 = icmp ne i32 %t100, 0 + br label %logic.from1372 +logic.from1372: + br i1 %t101, label %logic.end1374, label %logic.rhs1373 +logic.rhs1373: + %t102 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.746, i64 2, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_ends(ptr %a103, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br label %logic.rend1375 +logic.rend1375: + br label %logic.end1374 +logic.end1374: + %t108 = phi i1 [ true, %logic.from1372 ], [ %t107, %logic.rend1375 ] + br label %logic.from1376 +logic.from1376: + br i1 %t108, label %logic.end1378, label %logic.rhs1377 +logic.rhs1377: + %t109 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t109, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.748, i64 2, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_ends(ptr %a110, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br label %logic.rend1379 +logic.rend1379: + br label %logic.end1378 +logic.end1378: + %t115 = phi i1 [ true, %logic.from1376 ], [ %t114, %logic.rend1379 ] + store i1 %t115, ptr %a116 + %t117 = load i1, ptr %a116 + %t118 = xor i1 %t117, true + br label %logic.from1380 +logic.from1380: + br i1 %t118, label %logic.rhs1381, label %logic.end1382 +logic.rhs1381: + %t119 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t119, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.750, i64 3, i64 0 }, ptr %a122 + %t123 = call i32 @finch_str_starts(ptr %a120, ptr %a122) + %t124 = icmp ne i32 %t123, 0 + br label %logic.from1383 +logic.from1383: + br i1 %t124, label %logic.end1385, label %logic.rhs1384 +logic.rhs1384: + %t125 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t125, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.752, i64 3, i64 0 }, ptr %a128 + %t129 = call i64 @finch_str_find(ptr %a126, ptr %a128) + %t130 = icmp sge i64 %t129, 0 + br label %logic.rend1386 +logic.rend1386: + br label %logic.end1385 +logic.end1385: + %t131 = phi i1 [ true, %logic.from1383 ], [ %t130, %logic.rend1386 ] + br label %logic.from1387 +logic.from1387: + br i1 %t131, label %logic.end1389, label %logic.rhs1388 +logic.rhs1388: + %t132 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t132, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.754, i64 1, i64 0 }, ptr %a135 + %t136 = call i64 @finch_str_find(ptr %a133, ptr %a135) + %t137 = icmp sge i64 %t136, 0 + br label %logic.rend1390 +logic.rend1390: + br label %logic.end1389 +logic.end1389: + %t138 = phi i1 [ true, %logic.from1387 ], [ %t137, %logic.rend1390 ] + br label %logic.rend1391 +logic.rend1391: + br label %logic.end1382 +logic.end1382: + %t139 = phi i1 [ false, %logic.from1380 ], [ %t138, %logic.rend1391 ] + br i1 %t139, label %then1392, label %endif1394 +then1392: + %t140 = load ptr, ptr %a1 + %t141 = load %S.lexer.Token, ptr %a87 + call void @finch.parser.fail(ptr %t140, %S.lexer.Token %t141, { ptr, i64, i64 } { ptr @.str.755, i64 65, i64 0 }) + br label %endif1394 +endif1394: + %t142 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 5 + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i32 0, i32 1 + %t144 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t144, ptr %a145 + call void @finch_str_copy(ptr %a146, ptr %a145) + %t147 = load { ptr, i64, i64 }, ptr %a146 + %t148 = load i64, ptr %t143 + %t149 = add i64 %t148, 1 + call void @finch_arr_reserve(ptr %t142, i64 %t149, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t150 = load ptr, ptr %t142 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t148 + store { ptr, i64, i64 } %t147, ptr %t151 + store i64 %t149, ptr %t143 + call void @finch_str_drop(ptr %a95) + call void @finch.drop.S_lexer_Token(ptr %a87) + br label %endif1371 +else1370: + %t152 = load ptr, ptr %a1 + %t153 = call i1 @finch.parser.at(ptr %t152, { ptr, i64, i64 } { ptr @.str.756, i64 6, i64 0 }) + br i1 %t153, label %then1395, label %else1396 +then1395: + %t154 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 + %t156 = load ptr, ptr %a1 + %t157 = call %S.ast.Node @finch.parser.parseStruct(ptr %t156) + %t158 = load i64, ptr %t155 + %t159 = add i64 %t158, 1 + call void @finch_arr_reserve(ptr %t154, i64 %t159, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t160 = load ptr, ptr %t154 + %t161 = getelementptr inbounds %S.ast.Node, ptr %t160, i64 %t158 + store %S.ast.Node %t157, ptr %t161 + store i64 %t159, ptr %t155 + br label %endif1397 +else1396: + %t162 = load ptr, ptr %a1 + %t163 = call i1 @finch.parser.at(ptr %t162, { ptr, i64, i64 } { ptr @.str.757, i64 4, i64 0 }) + br i1 %t163, label %then1398, label %else1399 +then1398: + %t164 = load ptr, ptr %a1 + %t165 = call %S.ast.Node @finch.parser.parseEnum(ptr %t164) + store %S.ast.Node %t165, ptr %a166 + %t167 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 7 + %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t169 = load %S.ast.Node, ptr %a166 + store %S.ast.Node %t169, ptr %a170 + call void @finch.copy.S_ast_Node(ptr %a171, ptr %a170) + %t172 = load %S.ast.Node, ptr %a171 + %t173 = load i64, ptr %t168 + %t174 = add i64 %t173, 1 + call void @finch_arr_reserve(ptr %t167, i64 %t174, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t175 = load ptr, ptr %t167 + %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t173 + store %S.ast.Node %t172, ptr %t176 + store i64 %t174, ptr %t168 + %t177 = getelementptr inbounds %S.ast.Node, ptr %a166, i32 0, i32 6 + %t178 = load i1, ptr %t177 + br i1 %t178, label %then1401, label %endif1403 +then1401: + %t179 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 + %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 + %t181 = load %S.ast.Node, ptr %a166 + %t182 = call %S.ast.Node @finch.parser.sumStruct(%S.ast.Node %t181) + %t183 = load i64, ptr %t180 + %t184 = add i64 %t183, 1 + call void @finch_arr_reserve(ptr %t179, i64 %t184, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t185 = load ptr, ptr %t179 + %t186 = getelementptr inbounds %S.ast.Node, ptr %t185, i64 %t183 + store %S.ast.Node %t182, ptr %t186 + store i64 %t184, ptr %t180 + br label %endif1403 +endif1403: + call void @finch.drop.S_ast_Node(ptr %a166) + br label %endif1400 +else1399: + %t187 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 8 + %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 + %t189 = load ptr, ptr %a1 + %t190 = call %S.ast.Node @finch.parser.parseFn(ptr %t189) + %t191 = load i64, ptr %t188 + %t192 = add i64 %t191, 1 + call void @finch_arr_reserve(ptr %t187, i64 %t192, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t193 = load ptr, ptr %t187 + %t194 = getelementptr inbounds %S.ast.Node, ptr %t193, i64 %t191 + store %S.ast.Node %t190, ptr %t194 + store i64 %t192, ptr %t188 + br label %endif1400 +endif1400: + br label %endif1397 +endif1397: + br label %endif1371 +endif1371: + br label %endif1360 +endif1360: + br label %while.cond1355 +while.end1357: + %t195 = load %S.ast.Program, ptr %a2 + ret %S.ast.Program %t195 +} + +define internal %S.ast.Node @finch.parser.parseEnum(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca %S.lexer.Token, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca %S.lexer.Token, align 16 + %a29 = alloca %S.lexer.Token, align 16 + %a32 = alloca %S.ast.Node, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca %S.lexer.Token, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca %S.ast.Node, align 16 + %a56 = alloca %S.ast.Type, align 16 + %a60 = alloca %S.ast.Node, align 16 + %a61 = alloca %S.ast.Node, align 16 + %a72 = alloca %S.lexer.Token, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca %S.lexer.Token, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca %S.lexer.Token, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca %S.lexer.Token, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca %S.ast.Node, align 16 + %a138 = alloca %S.ast.Node, align 16 + %a150 = alloca %S.lexer.Token, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca %S.lexer.Token, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca i64, align 16 + %a182 = alloca %S.ast.Node, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca %S.lexer.Token, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.758, i64 4, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.759, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.760, i64 6, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.761, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.762, i64 12, i64 0 }) + %t10 = extractvalue %S.lexer.Token %t9, 1 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store %S.lexer.Token %t9, ptr %a14 + call void @finch.drop.S_lexer_Token(ptr %a14) + %t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t13, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load ptr, ptr %a1 + %t19 = call %S.lexer.Token @finch.parser.expect(ptr %t18, { ptr, i64, i64 } { ptr @.str.763, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.764, i64 3, i64 0 }) + store %S.lexer.Token %t19, ptr %a20 + call void @finch.drop.S_lexer_Token(ptr %a20) + br label %while.cond1404 +while.cond1404: + %t21 = load ptr, ptr %a1 + %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.765, i64 1, i64 0 }) + %t23 = xor i1 %t22, true + br i1 %t23, label %while.body1405, label %while.end1406 +while.body1405: + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.766, i64 3, i64 0 }) + br i1 %t25, label %then1407, label %endif1409 +then1407: + %t26 = load ptr, ptr %a1 + %t27 = load ptr, ptr %a1 + %t28 = call %S.lexer.Token @finch.parser.cur(ptr %t27) + call void @finch.parser.fail(ptr %t26, %S.lexer.Token %t28, { ptr, i64, i64 } { ptr @.str.767, i64 37, i64 0 }) + store %S.lexer.Token %t28, ptr %a29 + call void @finch.drop.S_lexer_Token(ptr %a29) + br label %endif1409 +endif1409: + %t30 = load ptr, ptr %a1 + %t31 = call %S.ast.Node @finch.parser.node(ptr %t30, { ptr, i64, i64 } { ptr @.str.768, i64 7, i64 0 }) + store %S.ast.Node %t31, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = call %S.lexer.Token @finch.parser.expect(ptr %t33, { ptr, i64, i64 } { ptr @.str.769, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.770, i64 24, i64 0 }) + %t35 = extractvalue %S.lexer.Token %t34, 1 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + store %S.lexer.Token %t34, ptr %a39 + call void @finch.drop.S_lexer_Token(ptr %a39) + %t40 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t38, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load ptr, ptr %a1 + %t44 = call i1 @finch.parser.accept(ptr %t43, { ptr, i64, i64 } { ptr @.str.771, i64 1, i64 0 }) + br i1 %t44, label %then1410, label %endif1412 +then1410: + %t45 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 + store i1 true, ptr %t45 + br label %while.cond1413 +while.cond1413: + %t46 = load ptr, ptr %a1 + %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.772, i64 1, i64 0 }) + %t48 = xor i1 %t47, true + br i1 %t48, label %while.body1414, label %while.end1415 +while.body1414: + %t49 = load ptr, ptr %a1 + %t50 = call %S.ast.Node @finch.parser.node(ptr %t49, { ptr, i64, i64 } { ptr @.str.773, i64 5, i64 0 }) + store %S.ast.Node %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = call %S.ast.Type @finch.parser.parseType(ptr %t52) + %t54 = getelementptr inbounds %S.ast.Node, ptr %a51, i32 0, i32 5 + %t55 = load %S.ast.Type, ptr %t54 + store %S.ast.Type %t53, ptr %t54 + store %S.ast.Type %t55, ptr %a56 + call void @finch.drop.S_ast_Type(ptr %a56) + %t57 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 9 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 + %t59 = load %S.ast.Node, ptr %a51 + store %S.ast.Node %t59, ptr %a60 + call void @finch.copy.S_ast_Node(ptr %a61, ptr %a60) + %t62 = load %S.ast.Node, ptr %a61 + %t63 = load i64, ptr %t58 + %t64 = add i64 %t63, 1 + call void @finch_arr_reserve(ptr %t57, i64 %t64, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t65 = load ptr, ptr %t57 + %t66 = getelementptr inbounds %S.ast.Node, ptr %t65, i64 %t63 + store %S.ast.Node %t62, ptr %t66 + store i64 %t64, ptr %t58 + %t67 = load ptr, ptr %a1 + %t68 = call i1 @finch.parser.accept(ptr %t67, { ptr, i64, i64 } { ptr @.str.774, i64 1, i64 0 }) + %t69 = xor i1 %t68, true + br i1 %t69, label %then1416, label %endif1418 +then1416: + call void @finch.drop.S_ast_Node(ptr %a51) + br label %while.end1415 +endif1418: + call void @finch.drop.S_ast_Node(ptr %a51) + br label %while.cond1413 +while.end1415: + %t70 = load ptr, ptr %a1 + %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.775, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.776, i64 35, i64 0 }) + store %S.lexer.Token %t71, ptr %a72 + call void @finch.drop.S_lexer_Token(ptr %a72) + %t73 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 9 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = icmp eq i64 %t75, 0 + br i1 %t76, label %then1419, label %endif1421 +then1419: + %t77 = load ptr, ptr %a1 + %t78 = load ptr, ptr %a1 + %t79 = call %S.lexer.Token @finch.parser.cur(ptr %t78) + %t80 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 + %t81 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } { ptr @.str.777, i64 12, i64 0 }, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.778, i64 27, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 + %t92 = load { ptr, i64, i64 }, ptr %t91 + store { ptr, i64, i64 } %t90, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t90, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.779, i64 20, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + call void @finch.parser.fail(ptr %t77, %S.lexer.Token %t79, { ptr, i64, i64 } %t102) + store %S.lexer.Token %t79, ptr %a103 + call void @finch.drop.S_lexer_Token(ptr %a103) + store { ptr, i64, i64 } %t102, ptr %a104 + call void @finch_str_drop(ptr %a104) + br label %endif1421 +endif1421: + br label %endif1412 +endif1412: + %t105 = load ptr, ptr %a1 + %t106 = call i1 @finch.parser.accept(ptr %t105, { ptr, i64, i64 } { ptr @.str.780, i64 1, i64 0 }) + br i1 %t106, label %then1422, label %endif1424 +then1422: + %t107 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 + %t108 = load i1, ptr %t107 + br i1 %t108, label %then1425, label %endif1427 +then1425: + %t109 = load ptr, ptr %a1 + %t110 = load ptr, ptr %a1 + %t111 = call %S.lexer.Token @finch.parser.cur(ptr %t110) + call void @finch.parser.fail(ptr %t109, %S.lexer.Token %t111, { ptr, i64, i64 } { ptr @.str.781, i64 52, i64 0 }) + store %S.lexer.Token %t111, ptr %a112 + call void @finch.drop.S_lexer_Token(ptr %a112) + br label %endif1427 +endif1427: + store { ptr, i64, i64 } { ptr @.str.782, i64 0, i64 0 }, ptr %a113 + %t114 = load ptr, ptr %a1 + %t115 = call i1 @finch.parser.accept(ptr %t114, { ptr, i64, i64 } { ptr @.str.783, i64 1, i64 0 }) + br i1 %t115, label %then1428, label %endif1430 +then1428: + %t116 = load { ptr, i64, i64 }, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.784, i64 1, i64 0 }, ptr %a113 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + br label %endif1430 +endif1430: + %t118 = load { ptr, i64, i64 }, ptr %a113 + %t119 = load ptr, ptr %a1 + %t120 = call %S.lexer.Token @finch.parser.expect(ptr %t119, { ptr, i64, i64 } { ptr @.str.785, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.786, i64 30, i64 0 }) + %t121 = extractvalue %S.lexer.Token %t120, 1 + store { ptr, i64, i64 } %t121, ptr %a122 + call void @finch_str_copy(ptr %a123, ptr %a122) + %t124 = load { ptr, i64, i64 }, ptr %a123 + store %S.lexer.Token %t120, ptr %a125 + call void @finch.drop.S_lexer_Token(ptr %a125) + store { ptr, i64, i64 } %t118, ptr %a127 + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 4 + %t132 = load { ptr, i64, i64 }, ptr %t131 + store { ptr, i64, i64 } %t130, ptr %t131 + store { ptr, i64, i64 } %t132, ptr %a133 + call void @finch_str_drop(ptr %a133) + call void @finch_str_drop(ptr %a113) + br label %endif1424 +endif1424: + %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 + %t136 = load %S.ast.Node, ptr %a32 + store %S.ast.Node %t136, ptr %a137 + call void @finch.copy.S_ast_Node(ptr %a138, ptr %a137) + %t139 = load %S.ast.Node, ptr %a138 + %t140 = load i64, ptr %t135 + %t141 = add i64 %t140, 1 + call void @finch_arr_reserve(ptr %t134, i64 %t141, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t142 = load ptr, ptr %t134 + %t143 = getelementptr inbounds %S.ast.Node, ptr %t142, i64 %t140 + store %S.ast.Node %t139, ptr %t143 + store i64 %t141, ptr %t135 + %t144 = load ptr, ptr %a1 + %t145 = call i1 @finch.parser.accept(ptr %t144, { ptr, i64, i64 } { ptr @.str.787, i64 1, i64 0 }) + %t146 = xor i1 %t145, true + br i1 %t146, label %then1431, label %endif1433 +then1431: + %t147 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t147) + br label %endif1433 +endif1433: + call void @finch.drop.S_ast_Node(ptr %a32) + br label %while.cond1404 +while.end1406: + %t148 = load ptr, ptr %a1 + %t149 = call %S.lexer.Token @finch.parser.next(ptr %t148) + store %S.lexer.Token %t149, ptr %a150 + call void @finch.drop.S_lexer_Token(ptr %a150) + %t151 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load i64, ptr %t152 + %t154 = icmp eq i64 %t153, 0 + br i1 %t154, label %then1434, label %endif1436 +then1434: + %t155 = load ptr, ptr %a1 + %t156 = load ptr, ptr %a1 + %t157 = call %S.lexer.Token @finch.parser.cur(ptr %t156) + %t158 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } { ptr @.str.788, i64 9, i64 0 }, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.789, i64 16, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + call void @finch.parser.fail(ptr %t155, %S.lexer.Token %t157, { ptr, i64, i64 } %t168) + store %S.lexer.Token %t157, ptr %a169 + call void @finch.drop.S_lexer_Token(ptr %a169) + store { ptr, i64, i64 } %t168, ptr %a170 + call void @finch_str_drop(ptr %a170) + br label %endif1436 +endif1436: + %t171 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 + %t172 = load i1, ptr %t171 + br i1 %t172, label %then1437, label %endif1439 +then1437: + %t173 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + store i64 0, ptr %a174 + br label %each.cond1440 +each.cond1440: + %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 + %t176 = load i64, ptr %t175 + %t177 = load i64, ptr %a174 + %t178 = icmp slt i64 %t177, %t176 + br i1 %t178, label %each.body1441, label %each.end1443 +each.body1441: + %t179 = load ptr, ptr %t173 + %t180 = getelementptr inbounds %S.ast.Node, ptr %t179, i64 %t177 + %t181 = load %S.ast.Node, ptr %t180 + store %S.ast.Node %t181, ptr %a182 + %t183 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 4 + %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 + %t185 = load i64, ptr %t184 + %t186 = icmp sgt i64 %t185, 0 + br i1 %t186, label %then1444, label %endif1446 +then1444: + %t187 = load ptr, ptr %a1 + %t188 = load ptr, ptr %a1 + %t189 = call %S.lexer.Token @finch.parser.cur(ptr %t188) + %t190 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 1 + %t191 = load { ptr, i64, i64 }, ptr %t190 + store { ptr, i64, i64 } { ptr @.str.790, i64 54, i64 0 }, ptr %a193 + store { ptr, i64, i64 } %t191, ptr %a194 + call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } %t195, ptr %a197 + store { ptr, i64, i64 } { ptr @.str.791, i64 3, i64 0 }, ptr %a198 + call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) + store { ptr, i64, i64 } %t195, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a196 + %t201 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 4 + %t202 = load { ptr, i64, i64 }, ptr %t201 + store { ptr, i64, i64 } %t200, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t200, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t207, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.792, i64 1, i64 0 }, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + store { ptr, i64, i64 } %t207, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a208 + call void @finch.parser.fail(ptr %t187, %S.lexer.Token %t189, { ptr, i64, i64 } %t212) + store %S.lexer.Token %t189, ptr %a213 + call void @finch.drop.S_lexer_Token(ptr %a213) + store { ptr, i64, i64 } %t212, ptr %a214 + call void @finch_str_drop(ptr %a214) + br label %endif1446 +endif1446: + br label %each.step1442 +each.step1442: + %t215 = load i64, ptr %a174 + %t216 = add i64 %t215, 1 + store i64 %t216, ptr %a174 + br label %each.cond1440 +each.end1443: + br label %endif1439 +endif1439: + %t217 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t217 +} + +define internal %S.ast.Node @finch.parser.sumStruct(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.ast.Node, align 16 + %a30 = alloca %S.ast.Node, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a38 = alloca %S.ast.Node, align 16 + %a39 = alloca %S.ast.Node, align 16 + %a46 = alloca i64, align 16 + %a54 = alloca %S.ast.Node, align 16 + %a58 = alloca i64, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca %S.ast.Node, align 16 + %a98 = alloca %S.ast.Type, align 16 + %a99 = alloca %S.ast.Type, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a106 = alloca %S.ast.Node, align 16 + %a107 = alloca %S.ast.Node, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.793, i64 6, i64 0 }, 0 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + %t8 = insertvalue %S.ast.Node %t2, { ptr, i64, i64 } %t7, 1 + %t9 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 + %t10 = load i64, ptr %t9 + %t11 = insertvalue %S.ast.Node %t8, i64 %t10, 11 + %t12 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 + %t13 = load i64, ptr %t12 + %t14 = insertvalue %S.ast.Node %t11, i64 %t13, 12 + %t15 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 + %t16 = load i64, ptr %t15 + %t17 = insertvalue %S.ast.Node %t14, i64 %t16, 13 + store %S.ast.Node %t17, ptr %a18 + %t19 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.794, i64 5, i64 0 }, 0 + %t20 = insertvalue %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.795, i64 3, i64 0 }, 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 + %t22 = load i64, ptr %t21 + %t23 = insertvalue %S.ast.Node %t20, i64 %t22, 11 + %t24 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 + %t25 = load i64, ptr %t24 + %t26 = insertvalue %S.ast.Node %t23, i64 %t25, 12 + %t27 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 + %t28 = load i64, ptr %t27 + %t29 = insertvalue %S.ast.Node %t26, i64 %t28, 13 + store %S.ast.Node %t29, ptr %a30 + %t31 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.796, i64 3, i64 0 }) + %t32 = getelementptr inbounds %S.ast.Node, ptr %a30, i32 0, i32 5 + %t33 = load %S.ast.Type, ptr %t32 + store %S.ast.Type %t31, ptr %t32 + store %S.ast.Type %t33, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + %t35 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i32 0, i32 1 + %t37 = load %S.ast.Node, ptr %a30 + store %S.ast.Node %t37, ptr %a38 + call void @finch.copy.S_ast_Node(ptr %a39, ptr %a38) + %t40 = load %S.ast.Node, ptr %a39 + %t41 = load i64, ptr %t36 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %t35, i64 %t42, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %t35 + %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 + store %S.ast.Node %t40, ptr %t44 + store i64 %t42, ptr %t36 + %t45 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 + store i64 0, ptr %a46 + br label %each.cond1447 +each.cond1447: + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 + %t48 = load i64, ptr %t47 + %t49 = load i64, ptr %a46 + %t50 = icmp slt i64 %t49, %t48 + br i1 %t50, label %each.body1448, label %each.end1450 +each.body1448: + %t51 = load ptr, ptr %t45 + %t52 = getelementptr inbounds %S.ast.Node, ptr %t51, i64 %t49 + %t53 = load %S.ast.Node, ptr %t52 + store %S.ast.Node %t53, ptr %a54 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 9 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 + %t57 = load i64, ptr %t56 + store i64 0, ptr %a58 + br label %for.cond1451 +for.cond1451: + %t59 = load i64, ptr %a58 + %t60 = icmp slt i64 %t59, %t57 + br i1 %t60, label %for.body1452, label %for.end1454 +for.body1452: + %t61 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.797, i64 5, i64 0 }, 0 + %t62 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 1 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.798, i64 1, i64 0 }, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a64 + %t68 = load i64, ptr %a58 + call void @finch_str_from_int(ptr %a69, i64 %t68) + %t70 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t67, ptr %a74 + call void @finch_str_drop(ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a71 + %t77 = insertvalue %S.ast.Node %t61, { ptr, i64, i64 } %t76, 1 + %t78 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 11 + %t79 = load i64, ptr %t78 + %t80 = insertvalue %S.ast.Node %t77, i64 %t79, 11 + %t81 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 12 + %t82 = load i64, ptr %t81 + %t83 = insertvalue %S.ast.Node %t80, i64 %t82, 12 + %t84 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 13 + %t85 = load i64, ptr %t84 + %t86 = insertvalue %S.ast.Node %t83, i64 %t85, 13 + store %S.ast.Node %t86, ptr %a87 + %t88 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 9 + %t89 = load i64, ptr %a58 + %t90 = load { ptr, i64, i64 }, ptr %t88 + %t91 = extractvalue { ptr, i64, i64 } %t90, 1 + %t92 = icmp uge i64 %t89, %t91 + br i1 %t92, label %range1455, label %inrange1456 +range1455: + call void @finch_panic_index(ptr @.str.799, i64 333, i64 %t89, i64 %t91) + unreachable +inrange1456: + %t93 = extractvalue { ptr, i64, i64 } %t90, 0 + %t94 = getelementptr inbounds %S.ast.Node, ptr %t93, i64 %t89 + %t95 = getelementptr inbounds %S.ast.Node, ptr %t94, i32 0, i32 5 + %t96 = load %S.ast.Type, ptr %t95 + %t97 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 5 + store %S.ast.Type %t96, ptr %a98 + call void @finch.copy.S_ast_Type(ptr %a99, ptr %a98) + %t100 = load %S.ast.Type, ptr %a99 + %t101 = load %S.ast.Type, ptr %t97 + store %S.ast.Type %t100, ptr %t97 + store %S.ast.Type %t101, ptr %a102 + call void @finch.drop.S_ast_Type(ptr %a102) + %t103 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 + %t105 = load %S.ast.Node, ptr %a87 + store %S.ast.Node %t105, ptr %a106 + call void @finch.copy.S_ast_Node(ptr %a107, ptr %a106) + %t108 = load %S.ast.Node, ptr %a107 + %t109 = load i64, ptr %t104 + %t110 = add i64 %t109, 1 + call void @finch_arr_reserve(ptr %t103, i64 %t110, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t111 = load ptr, ptr %t103 + %t112 = getelementptr inbounds %S.ast.Node, ptr %t111, i64 %t109 + store %S.ast.Node %t108, ptr %t112 + store i64 %t110, ptr %t104 + call void @finch.drop.S_ast_Node(ptr %a87) + br label %for.step1453 +for.step1453: + %t113 = load i64, ptr %a58 + %t114 = add i64 %t113, 1 + store i64 %t114, ptr %a58 + br label %for.cond1451 +for.end1454: + br label %each.step1449 +each.step1449: + %t115 = load i64, ptr %a46 + %t116 = add i64 %t115, 1 + store i64 %t116, ptr %a46 + br label %each.cond1447 +each.end1450: + %t117 = load %S.ast.Node, ptr %a18 + call void @finch.drop.S_ast_Node(ptr %a30) + ret %S.ast.Node %t117 +} + +define internal %S.ast.Node @finch.parser.parseMatch(ptr %p0, i1 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i1, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.lexer.Token, align 16 + %a21 = alloca %S.lexer.Token, align 16 + %a26 = alloca i64, align 16 + %a38 = alloca %S.lexer.Token, align 16 + %a41 = alloca %S.ast.Node, align 16 + %a44 = alloca %S.ast.Node, align 16 + %a62 = alloca %S.ast.Node, align 16 + %a63 = alloca %S.ast.Node, align 16 + %a71 = alloca %S.lexer.Token, align 16 + %a105 = alloca %S.ast.Node, align 16 + %a106 = alloca %S.ast.Node, align 16 + %a122 = alloca %S.lexer.Token, align 16 + %a130 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + store i1 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call %S.ast.Node @finch.parser.node(ptr %t3, { ptr, i64, i64 } { ptr @.str.800, i64 5, i64 0 }) + store %S.ast.Node %t4, ptr %a5 + %t6 = load i1, ptr %a2 + %t7 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 6 + store i1 %t6, ptr %t7 + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.801, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.802, i64 7, i64 0 }) + store %S.lexer.Token %t9, ptr %a10 + call void @finch.drop.S_lexer_Token(ptr %a10) + %t11 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 + %t13 = load ptr, ptr %a1 + %t14 = call %S.ast.Node @finch.parser.parseExpr(ptr %t13) + %t15 = load i64, ptr %t12 + %t16 = add i64 %t15, 1 + call void @finch_arr_reserve(ptr %t11, i64 %t16, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t17 = load ptr, ptr %t11 + %t18 = getelementptr inbounds %S.ast.Node, ptr %t17, i64 %t15 + store %S.ast.Node %t14, ptr %t18 + store i64 %t16, ptr %t12 + %t19 = load ptr, ptr %a1 + %t20 = call %S.lexer.Token @finch.parser.expect(ptr %t19, { ptr, i64, i64 } { ptr @.str.803, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.804, i64 3, i64 0 }) + store %S.lexer.Token %t20, ptr %a21 + call void @finch.drop.S_lexer_Token(ptr %a21) + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic1457, label %ok1458 +panic1457: + call void @finch_panic(ptr @.str.805, i64 348, ptr @.str.806) + unreachable +ok1458: + %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 2 + %t25 = load i64, ptr %t24 + store i64 %t25, ptr %a26 + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic1459, label %ok1460 +panic1459: + call void @finch_panic(ptr @.str.807, i64 349, ptr @.str.808) + unreachable +ok1460: + %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 2 + store i64 0, ptr %t29 + br label %while.cond1461 +while.cond1461: + %t30 = load ptr, ptr %a1 + %t31 = call i1 @finch.parser.at(ptr %t30, { ptr, i64, i64 } { ptr @.str.809, i64 1, i64 0 }) + %t32 = xor i1 %t31, true + br i1 %t32, label %while.body1462, label %while.end1463 +while.body1462: + %t33 = load ptr, ptr %a1 + %t34 = call i1 @finch.parser.at(ptr %t33, { ptr, i64, i64 } { ptr @.str.810, i64 3, i64 0 }) + br i1 %t34, label %then1464, label %endif1466 +then1464: + %t35 = load ptr, ptr %a1 + %t36 = load ptr, ptr %a1 + %t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36) + call void @finch.parser.fail(ptr %t35, %S.lexer.Token %t37, { ptr, i64, i64 } { ptr @.str.811, i64 37, i64 0 }) + store %S.lexer.Token %t37, ptr %a38 + call void @finch.drop.S_lexer_Token(ptr %a38) + br label %endif1466 +endif1466: + %t39 = load ptr, ptr %a1 + %t40 = call %S.ast.Node @finch.parser.node(ptr %t39, { ptr, i64, i64 } { ptr @.str.812, i64 3, i64 0 }) + store %S.ast.Node %t40, ptr %a41 + %t42 = load ptr, ptr %a1 + %t43 = call %S.ast.Node @finch.parser.node(ptr %t42, { ptr, i64, i64 } { ptr @.str.813, i64 8, i64 0 }) + store %S.ast.Node %t43, ptr %a44 + %t45 = load ptr, ptr %a1 + %t46 = call i1 @finch.parser.accept(ptr %t45, { ptr, i64, i64 } { ptr @.str.814, i64 4, i64 0 }) + br i1 %t46, label %then1467, label %else1468 +then1467: + %t47 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 6 + store i1 true, ptr %t47 + br label %endif1469 +else1468: + br label %while.cond1470 +while.cond1470: + br label %while.body1471 +while.body1471: + %t48 = getelementptr inbounds %S.ast.Node, ptr %a44, i32 0, i32 9 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 + %t50 = load ptr, ptr %a1 + %t51 = call %S.ast.Node @finch.parser.parseExpr(ptr %t50) + %t52 = load i64, ptr %t49 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %t48, i64 %t53, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %t48 + %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 %t52 + store %S.ast.Node %t51, ptr %t55 + store i64 %t53, ptr %t49 + %t56 = load ptr, ptr %a1 + %t57 = call i1 @finch.parser.accept(ptr %t56, { ptr, i64, i64 } { ptr @.str.815, i64 1, i64 0 }) + %t58 = xor i1 %t57, true + br i1 %t58, label %then1473, label %endif1475 +then1473: + br label %while.end1472 +endif1475: + br label %while.cond1470 +while.end1472: + br label %endif1469 +endif1469: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i32 0, i32 1 + %t61 = load %S.ast.Node, ptr %a44 + store %S.ast.Node %t61, ptr %a62 + call void @finch.copy.S_ast_Node(ptr %a63, ptr %a62) + %t64 = load %S.ast.Node, ptr %a63 + %t65 = load i64, ptr %t60 + %t66 = add i64 %t65, 1 + call void @finch_arr_reserve(ptr %t59, i64 %t66, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t67 = load ptr, ptr %t59 + %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 %t65 + store %S.ast.Node %t64, ptr %t68 + store i64 %t66, ptr %t60 + %t69 = load ptr, ptr %a1 + %t70 = call %S.lexer.Token @finch.parser.expect(ptr %t69, { ptr, i64, i64 } { ptr @.str.816, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.817, i64 57, i64 0 }) + store %S.lexer.Token %t70, ptr %a71 + call void @finch.drop.S_lexer_Token(ptr %a71) + %t72 = load ptr, ptr %a1 + %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.818, i64 1, i64 0 }) + br label %logic.from1476 +logic.from1476: + br i1 %t73, label %logic.rhs1477, label %logic.end1478 +logic.rhs1477: + %t74 = load i1, ptr %a2 + %t75 = xor i1 %t74, true + br label %logic.rend1479 +logic.rend1479: + br label %logic.end1478 +logic.end1478: + %t76 = phi i1 [ false, %logic.from1476 ], [ %t75, %logic.rend1479 ] + br i1 %t76, label %then1480, label %else1481 +then1480: + %t77 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 + %t79 = load ptr, ptr %a1 + %t80 = call %S.ast.Node @finch.parser.parseBlock(ptr %t79) + %t81 = load i64, ptr %t78 + %t82 = add i64 %t81, 1 + call void @finch_arr_reserve(ptr %t77, i64 %t82, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t83 = load ptr, ptr %t77 + %t84 = getelementptr inbounds %S.ast.Node, ptr %t83, i64 %t81 + store %S.ast.Node %t80, ptr %t84 + store i64 %t82, ptr %t78 + br label %endif1482 +else1481: + %t85 = load i1, ptr %a2 + br i1 %t85, label %then1483, label %else1484 +then1483: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load ptr, ptr %a1 + %t89 = call %S.ast.Node @finch.parser.parseExpr(ptr %t88) + %t90 = load i64, ptr %t87 + %t91 = add i64 %t90, 1 + call void @finch_arr_reserve(ptr %t86, i64 %t91, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t92 = load ptr, ptr %t86 + %t93 = getelementptr inbounds %S.ast.Node, ptr %t92, i64 %t90 + store %S.ast.Node %t89, ptr %t93 + store i64 %t91, ptr %t87 + br label %endif1485 +else1484: + %t94 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load ptr, ptr %a1 + %t97 = call %S.ast.Node @finch.parser.parseStatement(ptr %t96) + %t98 = load i64, ptr %t95 + %t99 = add i64 %t98, 1 + call void @finch_arr_reserve(ptr %t94, i64 %t99, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t100 = load ptr, ptr %t94 + %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 + store %S.ast.Node %t97, ptr %t101 + store i64 %t99, ptr %t95 + br label %endif1485 +endif1485: + br label %endif1482 +endif1482: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i32 0, i32 1 + %t104 = load %S.ast.Node, ptr %a41 + store %S.ast.Node %t104, ptr %a105 + call void @finch.copy.S_ast_Node(ptr %a106, ptr %a105) + %t107 = load %S.ast.Node, ptr %a106 + %t108 = load i64, ptr %t103 + %t109 = add i64 %t108, 1 + call void @finch_arr_reserve(ptr %t102, i64 %t109, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t110 = load ptr, ptr %t102 + %t111 = getelementptr inbounds %S.ast.Node, ptr %t110, i64 %t108 + store %S.ast.Node %t107, ptr %t111 + store i64 %t109, ptr %t103 + %t112 = load ptr, ptr %a1 + %t113 = call i1 @finch.parser.accept(ptr %t112, { ptr, i64, i64 } { ptr @.str.819, i64 1, i64 0 }) + %t114 = xor i1 %t113, true + br i1 %t114, label %then1486, label %endif1488 +then1486: + %t115 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t115) + br label %endif1488 +endif1488: + call void @finch.drop.S_ast_Node(ptr %a44) + call void @finch.drop.S_ast_Node(ptr %a41) + br label %while.cond1461 +while.end1463: + %t116 = load i64, ptr %a26 + %t117 = load ptr, ptr %a1 + %t118 = icmp eq ptr %t117, null + br i1 %t118, label %panic1489, label %ok1490 +panic1489: + call void @finch_panic(ptr @.str.820, i64 380, ptr @.str.821) + unreachable +ok1490: + %t119 = getelementptr inbounds %S.parser.Parser, ptr %t117, i32 0, i32 2 + store i64 %t116, ptr %t119 + %t120 = load ptr, ptr %a1 + %t121 = call %S.lexer.Token @finch.parser.next(ptr %t120) + store %S.lexer.Token %t121, ptr %a122 + call void @finch.drop.S_lexer_Token(ptr %a122) + %t123 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i32 0, i32 1 + %t125 = load i64, ptr %t124 + %t126 = icmp eq i64 %t125, 1 + br i1 %t126, label %then1491, label %endif1493 +then1491: + %t127 = load ptr, ptr %a1 + %t128 = load ptr, ptr %a1 + %t129 = call %S.lexer.Token @finch.parser.cur(ptr %t128) + call void @finch.parser.fail(ptr %t127, %S.lexer.Token %t129, { ptr, i64, i64 } { ptr @.str.822, i64 30, i64 0 }) + store %S.lexer.Token %t129, ptr %a130 + call void @finch.drop.S_lexer_Token(ptr %a130) + br label %endif1493 +endif1493: + %t131 = load %S.ast.Node, ptr %a5 + ret %S.ast.Node %t131 +} + +define internal { ptr, i64, i64 } @finch.parser.parseTParams(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.lexer.Token, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca %S.lexer.Token, align 16 + %a23 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.823, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.824, i64 3, i64 0 }) + store %S.lexer.Token %t4, ptr %a5 + call void @finch.drop.S_lexer_Token(ptr %a5) + br label %while.cond1494 +while.cond1494: + br label %while.body1495 +while.body1495: + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t7 = load ptr, ptr %a1 + %t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.825, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.826, i64 29, i64 0 }) + %t9 = extractvalue %S.lexer.Token %t8, 1 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store %S.lexer.Token %t8, ptr %a13 + call void @finch.drop.S_lexer_Token(ptr %a13) + %t14 = load i64, ptr %t6 + %t15 = add i64 %t14, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t15, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t16 = load ptr, ptr %a2 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 %t14 + store { ptr, i64, i64 } %t12, ptr %t17 + store i64 %t15, ptr %t6 + %t18 = load ptr, ptr %a1 + %t19 = call i1 @finch.parser.accept(ptr %t18, { ptr, i64, i64 } { ptr @.str.827, i64 1, i64 0 }) + %t20 = xor i1 %t19, true + br i1 %t20, label %then1497, label %endif1499 +then1497: + br label %while.end1496 +endif1499: + br label %while.cond1494 +while.end1496: + %t21 = load ptr, ptr %a1 + %t22 = call %S.lexer.Token @finch.parser.expect(ptr %t21, { ptr, i64, i64 } { ptr @.str.828, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.829, i64 29, i64 0 }) + store %S.lexer.Token %t22, ptr %a23 + call void @finch.drop.S_lexer_Token(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a2 + ret { ptr, i64, i64 } %t24 +} + +define internal %S.ast.Node @finch.parser.parseStruct(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca %S.lexer.Token, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca %S.lexer.Token, align 16 + %a36 = alloca %S.lexer.Token, align 16 + %a39 = alloca %S.ast.Node, align 16 + %a49 = alloca %S.lexer.Token, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca %S.ast.Type, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca %S.lexer.Token, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca %S.ast.Node, align 16 + %a91 = alloca %S.ast.Node, align 16 + %a100 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.830, i64 6, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.831, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.832, i64 8, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.833, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.834, i64 13, i64 0 }) + %t10 = extractvalue %S.lexer.Token %t9, 1 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store %S.lexer.Token %t9, ptr %a14 + call void @finch.drop.S_lexer_Token(ptr %a14) + %t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t13, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load ptr, ptr %a1 + %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.835, i64 1, i64 0 }) + br i1 %t19, label %then1500, label %endif1502 +then1500: + %t20 = load ptr, ptr %a1 + %t21 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t20) + %t22 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t21, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch.drop.arr_str(ptr %a24) + br label %endif1502 +endif1502: + %t25 = load ptr, ptr %a1 + %t26 = call %S.lexer.Token @finch.parser.expect(ptr %t25, { ptr, i64, i64 } { ptr @.str.836, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.837, i64 3, i64 0 }) + store %S.lexer.Token %t26, ptr %a27 + call void @finch.drop.S_lexer_Token(ptr %a27) + br label %while.cond1503 +while.cond1503: + %t28 = load ptr, ptr %a1 + %t29 = call i1 @finch.parser.at(ptr %t28, { ptr, i64, i64 } { ptr @.str.838, i64 1, i64 0 }) + %t30 = xor i1 %t29, true + br i1 %t30, label %while.body1504, label %while.end1505 +while.body1504: + %t31 = load ptr, ptr %a1 + %t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.839, i64 3, i64 0 }) + br i1 %t32, label %then1506, label %endif1508 +then1506: + %t33 = load ptr, ptr %a1 + %t34 = load ptr, ptr %a1 + %t35 = call %S.lexer.Token @finch.parser.cur(ptr %t34) + call void @finch.parser.fail(ptr %t33, %S.lexer.Token %t35, { ptr, i64, i64 } { ptr @.str.840, i64 38, i64 0 }) + store %S.lexer.Token %t35, ptr %a36 + call void @finch.drop.S_lexer_Token(ptr %a36) + br label %endif1508 +endif1508: + %t37 = load ptr, ptr %a1 + %t38 = call %S.ast.Node @finch.parser.node(ptr %t37, { ptr, i64, i64 } { ptr @.str.841, i64 5, i64 0 }) + store %S.ast.Node %t38, ptr %a39 + %t40 = load ptr, ptr %a1 + %t41 = call i1 @finch.parser.atDeclaration(ptr %t40) + %t42 = xor i1 %t41, true + br i1 %t42, label %then1509, label %endif1511 +then1509: + %t43 = load ptr, ptr %a1 + %t44 = load ptr, ptr %a1 + %t45 = call %S.lexer.Token @finch.parser.cur(ptr %t44) + %t46 = load ptr, ptr %a1 + %t47 = call %S.lexer.Token @finch.parser.cur(ptr %t46) + %t48 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t47) + store %S.lexer.Token %t47, ptr %a49 + call void @finch.drop.S_lexer_Token(ptr %a49) + store { ptr, i64, i64 } { ptr @.str.842, i64 11, i64 0 }, ptr %a51 + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.843, i64 28, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + call void @finch.parser.fail(ptr %t43, %S.lexer.Token %t45, { ptr, i64, i64 } %t59) + store %S.lexer.Token %t45, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + store { ptr, i64, i64 } %t59, ptr %a61 + call void @finch_str_drop(ptr %a61) + br label %endif1511 +endif1511: + %t62 = load ptr, ptr %a1 + %t63 = call %S.ast.Type @finch.parser.parseType(ptr %t62) + %t64 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 5 + %t65 = load %S.ast.Type, ptr %t64 + store %S.ast.Type %t63, ptr %t64 + store %S.ast.Type %t65, ptr %a66 + call void @finch.drop.S_ast_Type(ptr %a66) + %t67 = load ptr, ptr %a1 + %t68 = call %S.lexer.Token @finch.parser.expect(ptr %t67, { ptr, i64, i64 } { ptr @.str.844, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.845, i64 12, i64 0 }) + %t69 = extractvalue %S.lexer.Token %t68, 1 + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_copy(ptr %a71, ptr %a70) + %t72 = load { ptr, i64, i64 }, ptr %a71 + store %S.lexer.Token %t68, ptr %a73 + call void @finch.drop.S_lexer_Token(ptr %a73) + %t74 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + store { ptr, i64, i64 } %t72, ptr %t74 + store { ptr, i64, i64 } %t75, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load ptr, ptr %a1 + %t78 = call i1 @finch.parser.accept(ptr %t77, { ptr, i64, i64 } { ptr @.str.846, i64 1, i64 0 }) + br i1 %t78, label %then1512, label %endif1514 +then1512: + %t79 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 9 + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 + %t81 = load ptr, ptr %a1 + %t82 = call %S.ast.Node @finch.parser.parseExpr(ptr %t81) + %t83 = load i64, ptr %t80 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %t79, i64 %t84, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %t79 + %t86 = getelementptr inbounds %S.ast.Node, ptr %t85, i64 %t83 + store %S.ast.Node %t82, ptr %t86 + store i64 %t84, ptr %t80 + br label %endif1514 +endif1514: + %t87 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 + %t89 = load %S.ast.Node, ptr %a39 + store %S.ast.Node %t89, ptr %a90 + call void @finch.copy.S_ast_Node(ptr %a91, ptr %a90) + %t92 = load %S.ast.Node, ptr %a91 + %t93 = load i64, ptr %t88 + %t94 = add i64 %t93, 1 + call void @finch_arr_reserve(ptr %t87, i64 %t94, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t95 = load ptr, ptr %t87 + %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 %t93 + store %S.ast.Node %t92, ptr %t96 + store i64 %t94, ptr %t88 + %t97 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t97) + call void @finch.drop.S_ast_Node(ptr %a39) + br label %while.cond1503 +while.end1505: + %t98 = load ptr, ptr %a1 + %t99 = call %S.lexer.Token @finch.parser.next(ptr %t98) + store %S.lexer.Token %t99, ptr %a100 + call void @finch.drop.S_lexer_Token(ptr %a100) + %t101 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t101 +} + +define internal %S.ast.Node @finch.parser.parseFn(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.lexer.Token, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca %S.lexer.Token, align 16 + %a26 = alloca %S.lexer.Token, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca %S.lexer.Token, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca %S.lexer.Token, align 16 + %a77 = alloca %S.ast.Node, align 16 + %a82 = alloca %S.ast.Type, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca %S.lexer.Token, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca %S.ast.Node, align 16 + %a97 = alloca %S.ast.Node, align 16 + %a113 = alloca %S.lexer.Token, align 16 + %a117 = alloca %S.ast.Type, align 16 + %a127 = alloca %S.ast.Type, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca %S.lexer.Token, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca %S.lexer.Token, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.847, i64 2, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call i1 @finch.parser.accept(ptr %t5, { ptr, i64, i64 } { ptr @.str.848, i64 6, i64 0 }) + %t7 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 8 + store i1 %t6, ptr %t7 + %t8 = load ptr, ptr %a1 + %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.849, i64 5, i64 0 }) + br label %logic.from1515 +logic.from1515: + br i1 %t9, label %logic.rhs1516, label %logic.end1517 +logic.rhs1516: + %t10 = load ptr, ptr %a1 + %t11 = call %S.lexer.Token @finch.parser.cur(ptr %t10) + %t12 = extractvalue %S.lexer.Token %t11, 1 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store %S.lexer.Token %t11, ptr %a16 + call void @finch.drop.S_lexer_Token(ptr %a16) + %t17 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_drop(ptr %a18) + br label %logic.rend1518 +logic.rend1518: + br label %logic.end1517 +logic.end1517: + %t19 = phi i1 [ false, %logic.from1515 ], [ %t17, %logic.rend1518 ] + br i1 %t19, label %then1519, label %endif1521 +then1519: + %t20 = load ptr, ptr %a1 + %t21 = load ptr, ptr %a1 + %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) + call void @finch.parser.fail(ptr %t20, %S.lexer.Token %t22, { ptr, i64, i64 } { ptr @.str.850, i64 68, i64 0 }) + store %S.lexer.Token %t22, ptr %a23 + call void @finch.drop.S_lexer_Token(ptr %a23) + br label %endif1521 +endif1521: + %t24 = load ptr, ptr %a1 + %t25 = call %S.lexer.Token @finch.parser.expect(ptr %t24, { ptr, i64, i64 } { ptr @.str.851, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.852, i64 26, i64 0 }) + store %S.lexer.Token %t25, ptr %a26 + call void @finch.drop.S_lexer_Token(ptr %a26) + %t27 = load ptr, ptr %a1 + %t28 = call %S.lexer.Token @finch.parser.expect(ptr %t27, { ptr, i64, i64 } { ptr @.str.853, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.854, i64 15, i64 0 }) + %t29 = extractvalue %S.lexer.Token %t28, 1 + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_copy(ptr %a31, ptr %a30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store %S.lexer.Token %t28, ptr %a33 + call void @finch.drop.S_lexer_Token(ptr %a33) + %t34 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t32, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load ptr, ptr %a1 + %t38 = call i1 @finch.parser.at(ptr %t37, { ptr, i64, i64 } { ptr @.str.855, i64 1, i64 0 }) + br i1 %t38, label %then1522, label %endif1524 +then1522: + %t39 = load ptr, ptr %a1 + %t40 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t39) + %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t40, ptr %t41 + store { ptr, i64, i64 } %t42, ptr %a43 + call void @finch.drop.arr_str(ptr %a43) + br label %endif1524 +endif1524: + %t44 = load ptr, ptr %a1 + %t45 = call i1 @finch.parser.accept(ptr %t44, { ptr, i64, i64 } { ptr @.str.856, i64 1, i64 0 }) + br i1 %t45, label %then1525, label %endif1527 +then1525: + %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + %t48 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t47, ptr %a49 + call void @finch_str_copy(ptr %a50, ptr %a49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + %t52 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t51, ptr %t48 + store { ptr, i64, i64 } %t52, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load ptr, ptr %a1 + %t55 = call %S.lexer.Token @finch.parser.expect(ptr %t54, { ptr, i64, i64 } { ptr @.str.857, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.858, i64 13, i64 0 }) + %t56 = extractvalue %S.lexer.Token %t55, 1 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_copy(ptr %a58, ptr %a57) + %t59 = load { ptr, i64, i64 }, ptr %a58 + store %S.lexer.Token %t55, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + %t61 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t59, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_drop(ptr %a63) + br label %endif1527 +endif1527: + %t64 = load ptr, ptr %a1 + %t65 = call %S.lexer.Token @finch.parser.expect(ptr %t64, { ptr, i64, i64 } { ptr @.str.859, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.860, i64 3, i64 0 }) + store %S.lexer.Token %t65, ptr %a66 + call void @finch.drop.S_lexer_Token(ptr %a66) + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic1528, label %ok1529 +panic1528: + call void @finch_panic(ptr @.str.861, i64 446, ptr @.str.862) + unreachable +ok1529: + %t69 = getelementptr inbounds %S.parser.Parser, ptr %t67, i32 0, i32 2 + %t70 = load i64, ptr %t69 + %t71 = add i64 %t70, 1 + store i64 %t71, ptr %t69 + %t72 = load ptr, ptr %a1 + %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.863, i64 1, i64 0 }) + %t74 = xor i1 %t73, true + br i1 %t74, label %then1530, label %endif1532 +then1530: + br label %while.cond1533 +while.cond1533: + br label %while.body1534 +while.body1534: + %t75 = load ptr, ptr %a1 + %t76 = call %S.ast.Node @finch.parser.node(ptr %t75, { ptr, i64, i64 } { ptr @.str.864, i64 5, i64 0 }) + store %S.ast.Node %t76, ptr %a77 + %t78 = load ptr, ptr %a1 + %t79 = call %S.ast.Type @finch.parser.parseType(ptr %t78) + %t80 = getelementptr inbounds %S.ast.Node, ptr %a77, i32 0, i32 5 + %t81 = load %S.ast.Type, ptr %t80 + store %S.ast.Type %t79, ptr %t80 + store %S.ast.Type %t81, ptr %a82 + call void @finch.drop.S_ast_Type(ptr %a82) + %t83 = load ptr, ptr %a1 + %t84 = call %S.lexer.Token @finch.parser.expect(ptr %t83, { ptr, i64, i64 } { ptr @.str.865, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.866, i64 16, i64 0 }) + %t85 = extractvalue %S.lexer.Token %t84, 1 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_copy(ptr %a87, ptr %a86) + %t88 = load { ptr, i64, i64 }, ptr %a87 + store %S.lexer.Token %t84, ptr %a89 + call void @finch.drop.S_lexer_Token(ptr %a89) + %t90 = getelementptr inbounds %S.ast.Node, ptr %a77, i32 0, i32 1 + %t91 = load { ptr, i64, i64 }, ptr %t90 + store { ptr, i64, i64 } %t88, ptr %t90 + store { ptr, i64, i64 } %t91, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 + %t95 = load %S.ast.Node, ptr %a77 + store %S.ast.Node %t95, ptr %a96 + call void @finch.copy.S_ast_Node(ptr %a97, ptr %a96) + %t98 = load %S.ast.Node, ptr %a97 + %t99 = load i64, ptr %t94 + %t100 = add i64 %t99, 1 + call void @finch_arr_reserve(ptr %t93, i64 %t100, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t101 = load ptr, ptr %t93 + %t102 = getelementptr inbounds %S.ast.Node, ptr %t101, i64 %t99 + store %S.ast.Node %t98, ptr %t102 + store i64 %t100, ptr %t94 + %t103 = load ptr, ptr %a1 + %t104 = call i1 @finch.parser.accept(ptr %t103, { ptr, i64, i64 } { ptr @.str.867, i64 1, i64 0 }) + %t105 = xor i1 %t104, true + br i1 %t105, label %then1536, label %endif1538 +then1536: + call void @finch.drop.S_ast_Node(ptr %a77) + br label %while.end1535 +endif1538: + call void @finch.drop.S_ast_Node(ptr %a77) + br label %while.cond1533 +while.end1535: + br label %endif1532 +endif1532: + %t106 = load ptr, ptr %a1 + %t107 = icmp eq ptr %t106, null + br i1 %t107, label %panic1539, label %ok1540 +panic1539: + call void @finch_panic(ptr @.str.868, i64 458, ptr @.str.869) + unreachable +ok1540: + %t108 = getelementptr inbounds %S.parser.Parser, ptr %t106, i32 0, i32 2 + %t109 = load i64, ptr %t108 + %t110 = sub i64 %t109, 1 + store i64 %t110, ptr %t108 + %t111 = load ptr, ptr %a1 + %t112 = call %S.lexer.Token @finch.parser.expect(ptr %t111, { ptr, i64, i64 } { ptr @.str.870, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.871, i64 3, i64 0 }) + store %S.lexer.Token %t112, ptr %a113 + call void @finch.drop.S_lexer_Token(ptr %a113) + %t114 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.872, i64 4, i64 0 }) + %t115 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 + %t116 = load %S.ast.Type, ptr %t115 + store %S.ast.Type %t114, ptr %t115 + store %S.ast.Type %t116, ptr %a117 + call void @finch.drop.S_ast_Type(ptr %a117) + %t118 = load ptr, ptr %a1 + %t119 = call i1 @finch.parser.accept(ptr %t118, { ptr, i64, i64 } { ptr @.str.873, i64 2, i64 0 }) + br i1 %t119, label %then1541, label %endif1543 +then1541: + %t120 = load ptr, ptr %a1 + %t121 = call i1 @finch.parser.at(ptr %t120, { ptr, i64, i64 } { ptr @.str.874, i64 1, i64 0 }) + %t122 = xor i1 %t121, true + br i1 %t122, label %then1544, label %endif1546 +then1544: + %t123 = load ptr, ptr %a1 + %t124 = call %S.ast.Type @finch.parser.parseType(ptr %t123) + %t125 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 + %t126 = load %S.ast.Type, ptr %t125 + store %S.ast.Type %t124, ptr %t125 + store %S.ast.Type %t126, ptr %a127 + call void @finch.drop.S_ast_Type(ptr %a127) + br label %endif1546 +endif1546: + %t128 = load ptr, ptr %a1 + %t129 = call i1 @finch.parser.accept(ptr %t128, { ptr, i64, i64 } { ptr @.str.875, i64 1, i64 0 }) + %t130 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 + store i1 %t129, ptr %t130 + %t131 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 + %t132 = load i1, ptr %t131 + %t133 = xor i1 %t132, true + br label %logic.from1547 +logic.from1547: + br i1 %t133, label %logic.rhs1548, label %logic.end1549 +logic.rhs1548: + %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 + %t135 = getelementptr inbounds %S.ast.Type, ptr %t134, i32 0, i32 0 + %t136 = load { ptr, i64, i64 }, ptr %t135 + store { ptr, i64, i64 } %t136, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.876, i64 4, i64 0 }, ptr %a138 + %t139 = call i32 @finch_str_eq(ptr %a137, ptr %a138) + %t140 = icmp ne i32 %t139, 0 + br label %logic.rend1550 +logic.rend1550: + br label %logic.end1549 +logic.end1549: + %t141 = phi i1 [ false, %logic.from1547 ], [ %t140, %logic.rend1550 ] + br i1 %t141, label %then1551, label %endif1553 +then1551: + %t142 = load ptr, ptr %a1 + %t143 = load ptr, ptr %a1 + %t144 = call %S.lexer.Token @finch.parser.cur(ptr %t143) + %t145 = load ptr, ptr %a1 + %t146 = call %S.lexer.Token @finch.parser.cur(ptr %t145) + %t147 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t146) + store %S.lexer.Token %t146, ptr %a148 + call void @finch.drop.S_lexer_Token(ptr %a148) + store { ptr, i64, i64 } { ptr @.str.877, i64 11, i64 0 }, ptr %a150 + store { ptr, i64, i64 } %t147, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + store { ptr, i64, i64 } %t147, ptr %a152 + call void @finch_str_drop(ptr %a152) + %t153 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t153, ptr %a155 + store { ptr, i64, i64 } { ptr @.str.878, i64 61, i64 0 }, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + store { ptr, i64, i64 } %t153, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a154 + call void @finch.parser.fail(ptr %t142, %S.lexer.Token %t144, { ptr, i64, i64 } %t158) + store %S.lexer.Token %t144, ptr %a159 + call void @finch.drop.S_lexer_Token(ptr %a159) + store { ptr, i64, i64 } %t158, ptr %a160 + call void @finch_str_drop(ptr %a160) + br label %endif1553 +endif1553: + br label %endif1543 +endif1543: + %t161 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i32 0, i32 1 + %t163 = load ptr, ptr %a1 + %t164 = call %S.ast.Node @finch.parser.parseBlock(ptr %t163) + %t165 = load i64, ptr %t162 + %t166 = add i64 %t165, 1 + call void @finch_arr_reserve(ptr %t161, i64 %t166, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t167 = load ptr, ptr %t161 + %t168 = getelementptr inbounds %S.ast.Node, ptr %t167, i64 %t165 + store %S.ast.Node %t164, ptr %t168 + store i64 %t166, ptr %t162 + %t169 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t170 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 + %t172 = load i64, ptr %t171 + %t173 = sub i64 %t172, 1 + %t174 = load { ptr, i64, i64 }, ptr %t169 + %t175 = extractvalue { ptr, i64, i64 } %t174, 1 + %t176 = icmp uge i64 %t173, %t175 + br i1 %t176, label %range1554, label %inrange1555 +range1554: + call void @finch_panic_index(ptr @.str.879, i64 471, i64 %t173, i64 %t175) + unreachable +inrange1555: + %t177 = extractvalue { ptr, i64, i64 } %t174, 0 + %t178 = getelementptr inbounds %S.ast.Node, ptr %t177, i64 %t173 + %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i32 0, i32 14 + %t180 = load i64, ptr %t179 + %t181 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 + store i64 %t180, ptr %t181 + %t182 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t182 +} + +define internal %S.ast.Node @finch.parser.parseBlock(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + %a12 = alloca i64, align 16 + %a24 = alloca %S.lexer.Token, align 16 + %a41 = alloca %S.lexer.Token, align 16 + %a45 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.880, i64 5, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.881, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.882, i64 3, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic1556, label %ok1557 +panic1556: + call void @finch_panic(ptr @.str.883, i64 480, ptr @.str.884) + unreachable +ok1557: + %t10 = getelementptr inbounds %S.parser.Parser, ptr %t8, i32 0, i32 2 + %t11 = load i64, ptr %t10 + store i64 %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic1558, label %ok1559 +panic1558: + call void @finch_panic(ptr @.str.885, i64 481, ptr @.str.886) + unreachable +ok1559: + %t15 = getelementptr inbounds %S.parser.Parser, ptr %t13, i32 0, i32 2 + store i64 0, ptr %t15 + br label %while.cond1560 +while.cond1560: + %t16 = load ptr, ptr %a1 + %t17 = call i1 @finch.parser.at(ptr %t16, { ptr, i64, i64 } { ptr @.str.887, i64 1, i64 0 }) + %t18 = xor i1 %t17, true + br i1 %t18, label %while.body1561, label %while.end1562 +while.body1561: + %t19 = load ptr, ptr %a1 + %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.888, i64 3, i64 0 }) + br i1 %t20, label %then1563, label %endif1565 +then1563: + %t21 = load ptr, ptr %a1 + %t22 = load ptr, ptr %a1 + %t23 = call %S.lexer.Token @finch.parser.cur(ptr %t22) + call void @finch.parser.fail(ptr %t21, %S.lexer.Token %t23, { ptr, i64, i64 } { ptr @.str.889, i64 35, i64 0 }) + store %S.lexer.Token %t23, ptr %a24 + call void @finch.drop.S_lexer_Token(ptr %a24) + br label %endif1565 +endif1565: + %t25 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 + %t27 = load ptr, ptr %a1 + %t28 = call %S.ast.Node @finch.parser.parseStatement(ptr %t27) + %t29 = load i64, ptr %t26 + %t30 = add i64 %t29, 1 + call void @finch_arr_reserve(ptr %t25, i64 %t30, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t31 = load ptr, ptr %t25 + %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 %t29 + store %S.ast.Node %t28, ptr %t32 + store i64 %t30, ptr %t26 + %t33 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t33) + br label %while.cond1560 +while.end1562: + %t34 = load i64, ptr %a12 + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic1566, label %ok1567 +panic1566: + call void @finch_panic(ptr @.str.890, i64 489, ptr @.str.891) + unreachable +ok1567: + %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 2 + store i64 %t34, ptr %t37 + %t38 = load ptr, ptr %a1 + %t39 = call %S.lexer.Token @finch.parser.cur(ptr %t38) + %t40 = extractvalue %S.lexer.Token %t39, 2 + store %S.lexer.Token %t39, ptr %a41 + call void @finch.drop.S_lexer_Token(ptr %a41) + %t42 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 + store i64 %t40, ptr %t42 + %t43 = load ptr, ptr %a1 + %t44 = call %S.lexer.Token @finch.parser.next(ptr %t43) + store %S.lexer.Token %t44, ptr %a45 + call void @finch.drop.S_lexer_Token(ptr %a45) + %t46 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t46 +} + +define internal %S.ast.Node @finch.parser.parseStatement(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Node, align 16 + %a22 = alloca %S.lexer.Token, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca %S.ast.Node, align 16 + %a50 = alloca %S.lexer.Token, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca %S.lexer.Token, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca %S.lexer.Token, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca %S.lexer.Token, align 16 + %a93 = alloca %S.lexer.Token, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.ast.Node, align 16 + %a131 = alloca %S.lexer.Token, align 16 + %a138 = alloca %S.lexer.Token, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca %S.ast.Node, align 16 + %a167 = alloca %S.lexer.Token, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca %S.ast.Node, align 16 + %a186 = alloca %S.lexer.Token, align 16 + %a192 = alloca %S.lexer.Token, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca %S.lexer.Token, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca %S.ast.Node, align 16 + %a250 = alloca %S.ast.Type, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca %S.lexer.Token, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca %S.ast.Node, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca %S.lexer.Token, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca %S.lexer.Token, align 16 + %a309 = alloca %S.lexer.Token, align 16 + %a312 = alloca %S.ast.Node, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca i64, align 16 + %a331 = alloca i64, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca %S.ast.Node, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca %S.lexer.Token, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca %S.ast.Node, align 16 + %a396 = alloca %S.ast.Node, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca %S.ast.Node, align 16 + %a456 = alloca %S.ast.Node, align 16 + %a457 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t2) + store { ptr, i64, i64 } %t3, ptr %a4 + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.892, i64 2, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then1568, label %endif1570 +then1568: + %t10 = load ptr, ptr %a1 + %t11 = call %S.ast.Node @finch.parser.parseIf(ptr %t10) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t11 +endif1570: + %t12 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.893, i64 5, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %then1571, label %endif1573 +then1571: + %t17 = load ptr, ptr %a1 + %t18 = call %S.ast.Node @finch.parser.node(ptr %t17, { ptr, i64, i64 } { ptr @.str.894, i64 5, i64 0 }) + store %S.ast.Node %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = call %S.lexer.Token @finch.parser.next(ptr %t20) + store %S.lexer.Token %t21, ptr %a22 + call void @finch.drop.S_lexer_Token(ptr %a22) + %t23 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 + %t25 = load ptr, ptr %a1 + %t26 = call %S.ast.Node @finch.parser.parseExpr(ptr %t25) + %t27 = load i64, ptr %t24 + %t28 = add i64 %t27, 1 + call void @finch_arr_reserve(ptr %t23, i64 %t28, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t29 = load ptr, ptr %t23 + %t30 = getelementptr inbounds %S.ast.Node, ptr %t29, i64 %t27 + store %S.ast.Node %t26, ptr %t30 + store i64 %t28, ptr %t24 + %t31 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t33 = load ptr, ptr %a1 + %t34 = call %S.ast.Node @finch.parser.parseBlock(ptr %t33) + %t35 = load i64, ptr %t32 + %t36 = add i64 %t35, 1 + call void @finch_arr_reserve(ptr %t31, i64 %t36, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t37 = load ptr, ptr %t31 + %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t35 + store %S.ast.Node %t34, ptr %t38 + store i64 %t36, ptr %t32 + %t39 = load %S.ast.Node, ptr %a19 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t39 +endif1573: + %t40 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.895, i64 3, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then1574, label %endif1576 +then1574: + %t45 = load ptr, ptr %a1 + %t46 = call %S.ast.Node @finch.parser.node(ptr %t45, { ptr, i64, i64 } { ptr @.str.896, i64 3, i64 0 }) + store %S.ast.Node %t46, ptr %a47 + %t48 = load ptr, ptr %a1 + %t49 = call %S.lexer.Token @finch.parser.next(ptr %t48) + store %S.lexer.Token %t49, ptr %a50 + call void @finch.drop.S_lexer_Token(ptr %a50) + %t51 = load ptr, ptr %a1 + %t52 = call %S.lexer.Token @finch.parser.expect(ptr %t51, { ptr, i64, i64 } { ptr @.str.897, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.898, i64 20, i64 0 }) + %t53 = extractvalue %S.lexer.Token %t52, 1 + store { ptr, i64, i64 } %t53, ptr %a54 + call void @finch_str_copy(ptr %a55, ptr %a54) + %t56 = load { ptr, i64, i64 }, ptr %a55 + store %S.lexer.Token %t52, ptr %a57 + call void @finch.drop.S_lexer_Token(ptr %a57) + %t58 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 1 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } %t56, ptr %t58 + store { ptr, i64, i64 } %t59, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load ptr, ptr %a1 + %t62 = call i1 @finch.parser.accept(ptr %t61, { ptr, i64, i64 } { ptr @.str.899, i64 1, i64 0 }) + br i1 %t62, label %then1577, label %endif1579 +then1577: + %t63 = load ptr, ptr %a1 + %t64 = call %S.lexer.Token @finch.parser.expect(ptr %t63, { ptr, i64, i64 } { ptr @.str.900, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.901, i64 27, i64 0 }) + %t65 = extractvalue %S.lexer.Token %t64, 1 + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_copy(ptr %a67, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store %S.lexer.Token %t64, ptr %a69 + call void @finch.drop.S_lexer_Token(ptr %a69) + %t70 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 + %t71 = load { ptr, i64, i64 }, ptr %t70 + store { ptr, i64, i64 } %t68, ptr %t70 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_drop(ptr %a72) + br label %endif1579 +endif1579: + %t73 = load ptr, ptr %a1 + %t74 = call %S.lexer.Token @finch.parser.expect(ptr %t73, { ptr, i64, i64 } { ptr @.str.902, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.903, i64 4, i64 0 }) + store %S.lexer.Token %t74, ptr %a75 + call void @finch.drop.S_lexer_Token(ptr %a75) + %t76 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = load ptr, ptr %a1 + %t79 = call %S.ast.Node @finch.parser.parseExpr(ptr %t78) + %t80 = load i64, ptr %t77 + %t81 = add i64 %t80, 1 + call void @finch_arr_reserve(ptr %t76, i64 %t81, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t82 = load ptr, ptr %t76 + %t83 = getelementptr inbounds %S.ast.Node, ptr %t82, i64 %t80 + store %S.ast.Node %t79, ptr %t83 + store i64 %t81, ptr %t77 + %t84 = load ptr, ptr %a1 + %t85 = call i1 @finch.parser.accept(ptr %t84, { ptr, i64, i64 } { ptr @.str.904, i64 2, i64 0 }) + br i1 %t85, label %then1580, label %else1581 +then1580: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load i64, ptr %t87 + %t89 = icmp sgt i64 %t88, 0 + br i1 %t89, label %then1583, label %endif1585 +then1583: + %t90 = load ptr, ptr %a1 + %t91 = load ptr, ptr %a1 + %t92 = call %S.lexer.Token @finch.parser.cur(ptr %t91) + call void @finch.parser.fail(ptr %t90, %S.lexer.Token %t92, { ptr, i64, i64 } { ptr @.str.905, i64 55, i64 0 }) + store %S.lexer.Token %t92, ptr %a93 + call void @finch.drop.S_lexer_Token(ptr %a93) + br label %endif1585 +endif1585: + %t94 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load ptr, ptr %a1 + %t97 = call %S.ast.Node @finch.parser.parseExpr(ptr %t96) + %t98 = load i64, ptr %t95 + %t99 = add i64 %t98, 1 + call void @finch_arr_reserve(ptr %t94, i64 %t99, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t100 = load ptr, ptr %t94 + %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 + store %S.ast.Node %t97, ptr %t101 + store i64 %t99, ptr %t95 + br label %endif1582 +else1581: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 0 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } { ptr @.str.906, i64 4, i64 0 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch_str_drop(ptr %a104) + br label %endif1582 +endif1582: + %t105 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t105, i32 0, i32 1 + %t107 = load ptr, ptr %a1 + %t108 = call %S.ast.Node @finch.parser.parseBlock(ptr %t107) + %t109 = load i64, ptr %t106 + %t110 = add i64 %t109, 1 + call void @finch_arr_reserve(ptr %t105, i64 %t110, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t111 = load ptr, ptr %t105 + %t112 = getelementptr inbounds %S.ast.Node, ptr %t111, i64 %t109 + store %S.ast.Node %t108, ptr %t112 + store i64 %t110, ptr %t106 + %t113 = load %S.ast.Node, ptr %a47 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t113 +endif1576: + %t114 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.907, i64 5, i64 0 }, ptr %a116 + %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) + %t118 = icmp ne i32 %t117, 0 + br i1 %t118, label %then1586, label %endif1588 +then1586: + %t119 = load ptr, ptr %a1 + %t120 = call %S.ast.Node @finch.parser.parseMatch(ptr %t119, i1 false) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t120 +endif1588: + %t121 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.908, i64 6, i64 0 }, ptr %a123 + %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) + %t125 = icmp ne i32 %t124, 0 + br i1 %t125, label %then1589, label %endif1591 +then1589: + %t126 = load ptr, ptr %a1 + %t127 = call %S.ast.Node @finch.parser.node(ptr %t126, { ptr, i64, i64 } { ptr @.str.909, i64 6, i64 0 }) + store %S.ast.Node %t127, ptr %a128 + %t129 = load ptr, ptr %a1 + %t130 = call %S.lexer.Token @finch.parser.next(ptr %t129) + store %S.lexer.Token %t130, ptr %a131 + call void @finch.drop.S_lexer_Token(ptr %a131) + %t132 = load ptr, ptr %a1 + %t133 = call i1 @finch.parser.at(ptr %t132, { ptr, i64, i64 } { ptr @.str.910, i64 1, i64 0 }) + %t134 = xor i1 %t133, true + br label %logic.from1592 +logic.from1592: + br i1 %t134, label %logic.rhs1593, label %logic.end1594 +logic.rhs1593: + %t135 = load ptr, ptr %a1 + %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) + %t137 = extractvalue %S.lexer.Token %t136, 4 + store %S.lexer.Token %t136, ptr %a138 + call void @finch.drop.S_lexer_Token(ptr %a138) + %t139 = xor i1 %t137, true + br label %logic.rend1595 +logic.rend1595: + br label %logic.end1594 +logic.end1594: + %t140 = phi i1 [ false, %logic.from1592 ], [ %t139, %logic.rend1595 ] + br i1 %t140, label %then1596, label %endif1598 +then1596: + %t141 = getelementptr inbounds %S.ast.Node, ptr %a128, i32 0, i32 9 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 + %t143 = load ptr, ptr %a1 + %t144 = call %S.ast.Node @finch.parser.parseExpr(ptr %t143) + %t145 = load i64, ptr %t142 + %t146 = add i64 %t145, 1 + call void @finch_arr_reserve(ptr %t141, i64 %t146, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t147 = load ptr, ptr %t141 + %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 %t145 + store %S.ast.Node %t144, ptr %t148 + store i64 %t146, ptr %t142 + br label %endif1598 +endif1598: + %t149 = load %S.ast.Node, ptr %a128 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t149 +endif1591: + %t150 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t150, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.911, i64 5, i64 0 }, ptr %a152 + %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) + %t154 = icmp ne i32 %t153, 0 + br label %logic.from1599 +logic.from1599: + br i1 %t154, label %logic.end1601, label %logic.rhs1600 +logic.rhs1600: + %t155 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t155, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.912, i64 8, i64 0 }, ptr %a157 + %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) + %t159 = icmp ne i32 %t158, 0 + br label %logic.rend1602 +logic.rend1602: + br label %logic.end1601 +logic.end1601: + %t160 = phi i1 [ true, %logic.from1599 ], [ %t159, %logic.rend1602 ] + br i1 %t160, label %then1603, label %endif1605 +then1603: + %t161 = load ptr, ptr %a1 + %t162 = load { ptr, i64, i64 }, ptr %a4 + %t163 = call %S.ast.Node @finch.parser.node(ptr %t161, { ptr, i64, i64 } %t162) + store %S.ast.Node %t163, ptr %a164 + %t165 = load ptr, ptr %a1 + %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) + store %S.lexer.Token %t166, ptr %a167 + call void @finch.drop.S_lexer_Token(ptr %a167) + %t168 = load %S.ast.Node, ptr %a164 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t168 +endif1605: + %t169 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t169, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.913, i64 1, i64 0 }, ptr %a171 + %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) + %t173 = icmp ne i32 %t172, 0 + br i1 %t173, label %then1606, label %endif1608 +then1606: + %t174 = load ptr, ptr %a1 + %t175 = call %S.ast.Node @finch.parser.parseBlock(ptr %t174) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t175 +endif1608: + %t176 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.914, i64 5, i64 0 }, ptr %a178 + %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %then1609, label %endif1611 +then1609: + %t181 = load ptr, ptr %a1 + %t182 = call %S.ast.Node @finch.parser.node(ptr %t181, { ptr, i64, i64 } { ptr @.str.915, i64 5, i64 0 }) + store %S.ast.Node %t182, ptr %a183 + %t184 = load ptr, ptr %a1 + %t185 = call %S.lexer.Token @finch.parser.next(ptr %t184) + store %S.lexer.Token %t185, ptr %a186 + call void @finch.drop.S_lexer_Token(ptr %a186) + %t187 = load ptr, ptr %a1 + %t188 = call i1 @finch.parser.at(ptr %t187, { ptr, i64, i64 } { ptr @.str.916, i64 5, i64 0 }) + br i1 %t188, label %then1612, label %endif1614 +then1612: + %t189 = load ptr, ptr %a1 + %t190 = load ptr, ptr %a1 + %t191 = call %S.lexer.Token @finch.parser.cur(ptr %t190) + call void @finch.parser.fail(ptr %t189, %S.lexer.Token %t191, { ptr, i64, i64 } { ptr @.str.917, i64 33, i64 0 }) + store %S.lexer.Token %t191, ptr %a192 + call void @finch.drop.S_lexer_Token(ptr %a192) + br label %endif1614 +endif1614: + %t193 = getelementptr inbounds %S.ast.Node, ptr %a183, i32 0, i32 9 + %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t193, i32 0, i32 1 + %t195 = load ptr, ptr %a1 + %t196 = call %S.ast.Node @finch.parser.parseStatement(ptr %t195) + %t197 = load i64, ptr %t194 + %t198 = add i64 %t197, 1 + call void @finch_arr_reserve(ptr %t193, i64 %t198, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t199 = load ptr, ptr %t193 + %t200 = getelementptr inbounds %S.ast.Node, ptr %t199, i64 %t197 + store %S.ast.Node %t196, ptr %t200 + store i64 %t198, ptr %t194 + %t201 = load %S.ast.Node, ptr %a183 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t201 +endif1611: + %t202 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t202, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.918, i64 2, i64 0 }, ptr %a204 + %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) + %t206 = icmp ne i32 %t205, 0 + br label %logic.from1615 +logic.from1615: + br i1 %t206, label %logic.end1617, label %logic.rhs1616 +logic.rhs1616: + %t207 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t207, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.919, i64 6, i64 0 }, ptr %a209 + %t210 = call i32 @finch_str_eq(ptr %a208, ptr %a209) + %t211 = icmp ne i32 %t210, 0 + br label %logic.rend1618 +logic.rend1618: + br label %logic.end1617 +logic.end1617: + %t212 = phi i1 [ true, %logic.from1615 ], [ %t211, %logic.rend1618 ] + br label %logic.from1619 +logic.from1619: + br i1 %t212, label %logic.end1621, label %logic.rhs1620 +logic.rhs1620: + %t213 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t213, ptr %a214 + store { ptr, i64, i64 } { ptr @.str.920, i64 6, i64 0 }, ptr %a215 + %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) + %t217 = icmp ne i32 %t216, 0 + br label %logic.rend1622 +logic.rend1622: + br label %logic.end1621 +logic.end1621: + %t218 = phi i1 [ true, %logic.from1619 ], [ %t217, %logic.rend1622 ] + br label %logic.from1623 +logic.from1623: + br i1 %t218, label %logic.end1625, label %logic.rhs1624 +logic.rhs1624: + %t219 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t219, ptr %a220 + store { ptr, i64, i64 } { ptr @.str.921, i64 4, i64 0 }, ptr %a221 + %t222 = call i32 @finch_str_eq(ptr %a220, ptr %a221) + %t223 = icmp ne i32 %t222, 0 + br label %logic.rend1626 +logic.rend1626: + br label %logic.end1625 +logic.end1625: + %t224 = phi i1 [ true, %logic.from1623 ], [ %t223, %logic.rend1626 ] + br i1 %t224, label %then1627, label %endif1629 +then1627: + %t225 = load ptr, ptr %a1 + %t226 = load ptr, ptr %a1 + %t227 = call %S.lexer.Token @finch.parser.cur(ptr %t226) + %t228 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.922, i64 1, i64 0 }, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.923, i64 48, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + store { ptr, i64, i64 } %t232, ptr %a236 + call void @finch_str_drop(ptr %a236) + %t237 = load { ptr, i64, i64 }, ptr %a233 + call void @finch.parser.fail(ptr %t225, %S.lexer.Token %t227, { ptr, i64, i64 } %t237) + store %S.lexer.Token %t227, ptr %a238 + call void @finch.drop.S_lexer_Token(ptr %a238) + store { ptr, i64, i64 } %t237, ptr %a239 + call void @finch_str_drop(ptr %a239) + br label %endif1629 +endif1629: + %t240 = load ptr, ptr %a1 + %t241 = call i1 @finch.parser.atDeclaration(ptr %t240) + br i1 %t241, label %then1630, label %endif1632 +then1630: + %t242 = load ptr, ptr %a1 + %t243 = call %S.ast.Node @finch.parser.node(ptr %t242, { ptr, i64, i64 } { ptr @.str.924, i64 4, i64 0 }) + store %S.ast.Node %t243, ptr %a244 + %t245 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 6 + store i1 true, ptr %t245 + %t246 = load ptr, ptr %a1 + %t247 = call %S.ast.Type @finch.parser.parseType(ptr %t246) + %t248 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 5 + %t249 = load %S.ast.Type, ptr %t248 + store %S.ast.Type %t247, ptr %t248 + store %S.ast.Type %t249, ptr %a250 + call void @finch.drop.S_ast_Type(ptr %a250) + %t251 = load ptr, ptr %a1 + %t252 = call %S.lexer.Token @finch.parser.expect(ptr %t251, { ptr, i64, i64 } { ptr @.str.925, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.926, i64 15, i64 0 }) + %t253 = extractvalue %S.lexer.Token %t252, 1 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_copy(ptr %a255, ptr %a254) + %t256 = load { ptr, i64, i64 }, ptr %a255 + store %S.lexer.Token %t252, ptr %a257 + call void @finch.drop.S_lexer_Token(ptr %a257) + %t258 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 1 + %t259 = load { ptr, i64, i64 }, ptr %t258 + store { ptr, i64, i64 } %t256, ptr %t258 + store { ptr, i64, i64 } %t259, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load ptr, ptr %a1 + %t262 = call i1 @finch.parser.accept(ptr %t261, { ptr, i64, i64 } { ptr @.str.927, i64 1, i64 0 }) + br i1 %t262, label %then1633, label %endif1635 +then1633: + %t263 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 9 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + %t265 = load ptr, ptr %a1 + %t266 = call %S.ast.Node @finch.parser.parseExpr(ptr %t265) + %t267 = load i64, ptr %t264 + %t268 = add i64 %t267, 1 + call void @finch_arr_reserve(ptr %t263, i64 %t268, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t269 = load ptr, ptr %t263 + %t270 = getelementptr inbounds %S.ast.Node, ptr %t269, i64 %t267 + store %S.ast.Node %t266, ptr %t270 + store i64 %t268, ptr %t264 + br label %endif1635 +endif1635: + %t271 = load %S.ast.Node, ptr %a244 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t271 +endif1632: + %t272 = load ptr, ptr %a1 + %t273 = call i1 @finch.parser.at(ptr %t272, { ptr, i64, i64 } { ptr @.str.928, i64 5, i64 0 }) + br label %logic.from1636 +logic.from1636: + br i1 %t273, label %logic.rhs1637, label %logic.end1638 +logic.rhs1637: + %t274 = load ptr, ptr %a1 + %t275 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t274, i64 1) + store { ptr, i64, i64 } %t275, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.929, i64 2, i64 0 }, ptr %a277 + %t278 = call i32 @finch_str_eq(ptr %a276, ptr %a277) + %t279 = icmp ne i32 %t278, 0 + store { ptr, i64, i64 } %t275, ptr %a280 + call void @finch_str_drop(ptr %a280) + br label %logic.rend1639 +logic.rend1639: + br label %logic.end1638 +logic.end1638: + %t281 = phi i1 [ false, %logic.from1636 ], [ %t279, %logic.rend1639 ] + br i1 %t281, label %then1640, label %endif1642 +then1640: + %t282 = load ptr, ptr %a1 + %t283 = call %S.ast.Node @finch.parser.node(ptr %t282, { ptr, i64, i64 } { ptr @.str.930, i64 4, i64 0 }) + store %S.ast.Node %t283, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = call %S.lexer.Token @finch.parser.next(ptr %t285) + %t287 = extractvalue %S.lexer.Token %t286, 1 + store { ptr, i64, i64 } %t287, ptr %a288 + call void @finch_str_copy(ptr %a289, ptr %a288) + %t290 = load { ptr, i64, i64 }, ptr %a289 + store %S.lexer.Token %t286, ptr %a291 + call void @finch.drop.S_lexer_Token(ptr %a291) + %t292 = getelementptr inbounds %S.ast.Node, ptr %a284, i32 0, i32 1 + %t293 = load { ptr, i64, i64 }, ptr %t292 + store { ptr, i64, i64 } %t290, ptr %t292 + store { ptr, i64, i64 } %t293, ptr %a294 + call void @finch_str_drop(ptr %a294) + %t295 = load ptr, ptr %a1 + %t296 = call %S.lexer.Token @finch.parser.next(ptr %t295) + store %S.lexer.Token %t296, ptr %a297 + call void @finch.drop.S_lexer_Token(ptr %a297) + %t298 = getelementptr inbounds %S.ast.Node, ptr %a284, i32 0, i32 9 + %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i32 0, i32 1 + %t300 = load ptr, ptr %a1 + %t301 = call %S.ast.Node @finch.parser.parseExpr(ptr %t300) + %t302 = load i64, ptr %t299 + %t303 = add i64 %t302, 1 + call void @finch_arr_reserve(ptr %t298, i64 %t303, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t304 = load ptr, ptr %t298 + %t305 = getelementptr inbounds %S.ast.Node, ptr %t304, i64 %t302 + store %S.ast.Node %t301, ptr %t305 + store i64 %t303, ptr %t299 + %t306 = load %S.ast.Node, ptr %a284 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t306 +endif1642: + %t307 = load ptr, ptr %a1 + %t308 = call %S.lexer.Token @finch.parser.cur(ptr %t307) + store %S.lexer.Token %t308, ptr %a309 + %t310 = load ptr, ptr %a1 + %t311 = call %S.ast.Node @finch.parser.parseExpr(ptr %t310) + store %S.ast.Node %t311, ptr %a312 + %t313 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t314 = call ptr @finch_alloc(i64 %t313) + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 0 + store { ptr, i64, i64 } { ptr @.str.931, i64 1, i64 0 }, ptr %t315 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 1 + store { ptr, i64, i64 } { ptr @.str.932, i64 2, i64 0 }, ptr %t316 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 2 + store { ptr, i64, i64 } { ptr @.str.933, i64 2, i64 0 }, ptr %t317 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 3 + store { ptr, i64, i64 } { ptr @.str.934, i64 2, i64 0 }, ptr %t318 + %t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 4 + store { ptr, i64, i64 } { ptr @.str.935, i64 2, i64 0 }, ptr %t319 + %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 5 + store { ptr, i64, i64 } { ptr @.str.936, i64 2, i64 0 }, ptr %t320 + %t321 = insertvalue { ptr, i64, i64 } undef, ptr %t314, 0 + %t322 = insertvalue { ptr, i64, i64 } %t321, i64 6, 1 + %t323 = insertvalue { ptr, i64, i64 } %t322, i64 6, 2 + store { ptr, i64, i64 } %t323, ptr %a324 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a324, i32 0, i32 1 + %t326 = load ptr, ptr %a1 + %t327 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t326) + store i64 -1, ptr %a328 + %t329 = load i64, ptr %t325 + %t330 = load ptr, ptr %a324 + store i64 0, ptr %a331 + br label %find.cond1643 +find.cond1643: + %t332 = load i64, ptr %a331 + %t333 = icmp slt i64 %t332, %t329 + br i1 %t333, label %find.body1644, label %find.end1647 +find.body1644: + %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t330, i64 %t332 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t335, ptr %a336 + store { ptr, i64, i64 } %t327, ptr %a337 + %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) + %t339 = icmp ne i32 %t338, 0 + br i1 %t339, label %find.hit1645, label %find.next1646 +find.hit1645: + store i64 %t332, ptr %a328 + br label %find.end1647 +find.next1646: + %t340 = add i64 %t332, 1 + store i64 %t340, ptr %a331 + br label %find.cond1643 +find.end1647: + store { ptr, i64, i64 } %t327, ptr %a341 + call void @finch_str_drop(ptr %a341) + %t342 = load i64, ptr %a328 + %t343 = icmp sge i64 %t342, 0 + br label %logic.from1648 +logic.from1648: + br i1 %t343, label %logic.rhs1649, label %logic.end1650 +logic.rhs1649: + %t344 = load ptr, ptr %a1 + %t345 = call i1 @finch.parser.sameLine(ptr %t344) + br label %logic.rend1651 +logic.rend1651: + br label %logic.end1650 +logic.end1650: + %t346 = phi i1 [ false, %logic.from1648 ], [ %t345, %logic.rend1651 ] + br i1 %t346, label %then1652, label %endif1654 +then1652: + %t347 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t348 = load { ptr, i64, i64 }, ptr %t347 + store { ptr, i64, i64 } %t348, ptr %a349 + store { ptr, i64, i64 } { ptr @.str.937, i64 3, i64 0 }, ptr %a350 + %t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350) + %t352 = icmp eq i32 %t351, 0 + br label %logic.from1655 +logic.from1655: + br i1 %t352, label %logic.rhs1656, label %logic.end1657 +logic.rhs1656: + %t353 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t354 = load { ptr, i64, i64 }, ptr %t353 + store { ptr, i64, i64 } %t354, ptr %a355 + store { ptr, i64, i64 } { ptr @.str.938, i64 6, i64 0 }, ptr %a356 + %t357 = call i32 @finch_str_eq(ptr %a355, ptr %a356) + %t358 = icmp eq i32 %t357, 0 + br label %logic.rend1658 +logic.rend1658: + br label %logic.end1657 +logic.end1657: + %t359 = phi i1 [ false, %logic.from1655 ], [ %t358, %logic.rend1658 ] + br label %logic.from1659 +logic.from1659: + br i1 %t359, label %logic.rhs1660, label %logic.end1661 +logic.rhs1660: + %t360 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t361 = load { ptr, i64, i64 }, ptr %t360 + store { ptr, i64, i64 } %t361, ptr %a362 + store { ptr, i64, i64 } { ptr @.str.939, i64 5, i64 0 }, ptr %a363 + %t364 = call i32 @finch_str_eq(ptr %a362, ptr %a363) + %t365 = icmp eq i32 %t364, 0 + br label %logic.rend1662 +logic.rend1662: + br label %logic.end1661 +logic.end1661: + %t366 = phi i1 [ false, %logic.from1659 ], [ %t365, %logic.rend1662 ] + br i1 %t366, label %then1663, label %endif1665 +then1663: + %t367 = load ptr, ptr %a1 + %t368 = load %S.lexer.Token, ptr %a309 + call void @finch.parser.fail(ptr %t367, %S.lexer.Token %t368, { ptr, i64, i64 } { ptr @.str.940, i64 66, i64 0 }) + br label %endif1665 +endif1665: + %t369 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.941, i64 6, i64 0 }, 0 + %t370 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 + %t371 = load i64, ptr %t370 + %t372 = insertvalue %S.ast.Node %t369, i64 %t371, 11 + %t373 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 3 + %t374 = load i64, ptr %t373 + %t375 = insertvalue %S.ast.Node %t372, i64 %t374, 12 + %t376 = load ptr, ptr %a1 + %t377 = icmp eq ptr %t376, null + br i1 %t377, label %panic1666, label %ok1667 +panic1666: + call void @finch_panic(ptr @.str.942, i64 584, ptr @.str.943) + unreachable +ok1667: + %t378 = getelementptr inbounds %S.parser.Parser, ptr %t376, i32 0, i32 3 + %t379 = load i64, ptr %t378 + %t380 = insertvalue %S.ast.Node %t375, i64 %t379, 13 + store %S.ast.Node %t380, ptr %a381 + %t382 = load ptr, ptr %a1 + %t383 = call %S.lexer.Token @finch.parser.next(ptr %t382) + %t384 = extractvalue %S.lexer.Token %t383, 0 + store { ptr, i64, i64 } %t384, ptr %a385 + call void @finch_str_copy(ptr %a386, ptr %a385) + %t387 = load { ptr, i64, i64 }, ptr %a386 + store %S.lexer.Token %t383, ptr %a388 + call void @finch.drop.S_lexer_Token(ptr %a388) + %t389 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 1 + %t390 = load { ptr, i64, i64 }, ptr %t389 + store { ptr, i64, i64 } %t387, ptr %t389 + store { ptr, i64, i64 } %t390, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 9 + %t393 = getelementptr inbounds { ptr, i64, i64 }, ptr %t392, i32 0, i32 1 + %t394 = load %S.ast.Node, ptr %a312 + store %S.ast.Node %t394, ptr %a395 + call void @finch.copy.S_ast_Node(ptr %a396, ptr %a395) + %t397 = load %S.ast.Node, ptr %a396 + %t398 = load i64, ptr %t393 + %t399 = add i64 %t398, 1 + call void @finch_arr_reserve(ptr %t392, i64 %t399, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t400 = load ptr, ptr %t392 + %t401 = getelementptr inbounds %S.ast.Node, ptr %t400, i64 %t398 + store %S.ast.Node %t397, ptr %t401 + store i64 %t399, ptr %t393 + %t402 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 9 + %t403 = getelementptr inbounds { ptr, i64, i64 }, ptr %t402, i32 0, i32 1 + %t404 = load ptr, ptr %a1 + %t405 = call %S.ast.Node @finch.parser.parseExpr(ptr %t404) + %t406 = load i64, ptr %t403 + %t407 = add i64 %t406, 1 + call void @finch_arr_reserve(ptr %t402, i64 %t407, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t408 = load ptr, ptr %t402 + %t409 = getelementptr inbounds %S.ast.Node, ptr %t408, i64 %t406 + store %S.ast.Node %t405, ptr %t409 + store i64 %t407, ptr %t403 + %t410 = load %S.ast.Node, ptr %a381 + call void @finch.drop.arr_str(ptr %a324) + call void @finch.drop.S_ast_Node(ptr %a312) + call void @finch.drop.S_lexer_Token(ptr %a309) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t410 +endif1654: + %t411 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t412 = load { ptr, i64, i64 }, ptr %t411 + store { ptr, i64, i64 } %t412, ptr %a413 + store { ptr, i64, i64 } { ptr @.str.944, i64 4, i64 0 }, ptr %a414 + %t415 = call i32 @finch_str_eq(ptr %a413, ptr %a414) + %t416 = icmp eq i32 %t415, 0 + br label %logic.from1668 +logic.from1668: + br i1 %t416, label %logic.rhs1669, label %logic.end1670 +logic.rhs1669: + %t417 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t418 = load { ptr, i64, i64 }, ptr %t417 + store { ptr, i64, i64 } %t418, ptr %a419 + store { ptr, i64, i64 } { ptr @.str.945, i64 6, i64 0 }, ptr %a420 + %t421 = call i32 @finch_str_eq(ptr %a419, ptr %a420) + %t422 = icmp eq i32 %t421, 0 + br label %logic.rend1671 +logic.rend1671: + br label %logic.end1670 +logic.end1670: + %t423 = phi i1 [ false, %logic.from1668 ], [ %t422, %logic.rend1671 ] + br label %logic.from1672 +logic.from1672: + br i1 %t423, label %logic.rhs1673, label %logic.end1674 +logic.rhs1673: + %t424 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t425 = load { ptr, i64, i64 }, ptr %t424 + store { ptr, i64, i64 } %t425, ptr %a426 + store { ptr, i64, i64 } { ptr @.str.946, i64 3, i64 0 }, ptr %a427 + %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) + %t429 = icmp eq i32 %t428, 0 + br label %logic.rend1675 +logic.rend1675: + br label %logic.end1674 +logic.end1674: + %t430 = phi i1 [ false, %logic.from1672 ], [ %t429, %logic.rend1675 ] + br label %logic.from1676 +logic.from1676: + br i1 %t430, label %logic.rhs1677, label %logic.end1678 +logic.rhs1677: + %t431 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t432 = load { ptr, i64, i64 }, ptr %t431 + store { ptr, i64, i64 } %t432, ptr %a433 + store { ptr, i64, i64 } { ptr @.str.947, i64 2, i64 0 }, ptr %a434 + %t435 = call i32 @finch_str_eq(ptr %a433, ptr %a434) + %t436 = icmp eq i32 %t435, 0 + br label %logic.rend1679 +logic.rend1679: + br label %logic.end1678 +logic.end1678: + %t437 = phi i1 [ false, %logic.from1676 ], [ %t436, %logic.rend1679 ] + br i1 %t437, label %then1680, label %endif1682 +then1680: + %t438 = load ptr, ptr %a1 + %t439 = load %S.lexer.Token, ptr %a309 + call void @finch.parser.fail(ptr %t438, %S.lexer.Token %t439, { ptr, i64, i64 } { ptr @.str.948, i64 37, i64 0 }) + br label %endif1682 +endif1682: + %t440 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.949, i64 4, i64 0 }, 0 + %t441 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 + %t442 = load i64, ptr %t441 + %t443 = insertvalue %S.ast.Node %t440, i64 %t442, 11 + %t444 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 3 + %t445 = load i64, ptr %t444 + %t446 = insertvalue %S.ast.Node %t443, i64 %t445, 12 + %t447 = load ptr, ptr %a1 + %t448 = icmp eq ptr %t447, null + br i1 %t448, label %panic1683, label %ok1684 +panic1683: + call void @finch_panic(ptr @.str.950, i64 593, ptr @.str.951) + unreachable +ok1684: + %t449 = getelementptr inbounds %S.parser.Parser, ptr %t447, i32 0, i32 3 + %t450 = load i64, ptr %t449 + %t451 = insertvalue %S.ast.Node %t446, i64 %t450, 13 + store %S.ast.Node %t451, ptr %a452 + %t453 = getelementptr inbounds %S.ast.Node, ptr %a452, i32 0, i32 9 + %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i32 0, i32 1 + %t455 = load %S.ast.Node, ptr %a312 + store %S.ast.Node %t455, ptr %a456 + call void @finch.copy.S_ast_Node(ptr %a457, ptr %a456) + %t458 = load %S.ast.Node, ptr %a457 + %t459 = load i64, ptr %t454 + %t460 = add i64 %t459, 1 + call void @finch_arr_reserve(ptr %t453, i64 %t460, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t461 = load ptr, ptr %t453 + %t462 = getelementptr inbounds %S.ast.Node, ptr %t461, i64 %t459 + store %S.ast.Node %t458, ptr %t462 + store i64 %t460, ptr %t454 + %t463 = load %S.ast.Node, ptr %a452 + call void @finch.drop.arr_str(ptr %a324) + call void @finch.drop.S_ast_Node(ptr %a312) + call void @finch.drop.S_lexer_Token(ptr %a309) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t463 +} + +define internal %S.ast.Node @finch.parser.parseIf(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.952, i64 2, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.953, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.954, i64 4, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load ptr, ptr %a1 + %t11 = call %S.ast.Node @finch.parser.parseExpr(ptr %t10) + %t12 = load i64, ptr %t9 + %t13 = add i64 %t12, 1 + call void @finch_arr_reserve(ptr %t8, i64 %t13, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t14 = load ptr, ptr %t8 + %t15 = getelementptr inbounds %S.ast.Node, ptr %t14, i64 %t12 + store %S.ast.Node %t11, ptr %t15 + store i64 %t13, ptr %t9 + %t16 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 + %t18 = load ptr, ptr %a1 + %t19 = call %S.ast.Node @finch.parser.parseBlock(ptr %t18) + %t20 = load i64, ptr %t17 + %t21 = add i64 %t20, 1 + call void @finch_arr_reserve(ptr %t16, i64 %t21, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t22 = load ptr, ptr %t16 + %t23 = getelementptr inbounds %S.ast.Node, ptr %t22, i64 %t20 + store %S.ast.Node %t19, ptr %t23 + store i64 %t21, ptr %t17 + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.accept(ptr %t24, { ptr, i64, i64 } { ptr @.str.955, i64 4, i64 0 }) + br i1 %t25, label %then1685, label %endif1687 +then1685: + %t26 = load ptr, ptr %a1 + %t27 = call i1 @finch.parser.at(ptr %t26, { ptr, i64, i64 } { ptr @.str.956, i64 2, i64 0 }) + br i1 %t27, label %then1688, label %else1689 +then1688: + %t28 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 + %t30 = load ptr, ptr %a1 + %t31 = call %S.ast.Node @finch.parser.parseIf(ptr %t30) + %t32 = load i64, ptr %t29 + %t33 = add i64 %t32, 1 + call void @finch_arr_reserve(ptr %t28, i64 %t33, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t34 = load ptr, ptr %t28 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 + store %S.ast.Node %t31, ptr %t35 + store i64 %t33, ptr %t29 + br label %endif1690 +else1689: + %t36 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 + %t38 = load ptr, ptr %a1 + %t39 = call %S.ast.Node @finch.parser.parseBlock(ptr %t38) + %t40 = load i64, ptr %t37 + %t41 = add i64 %t40, 1 + call void @finch_arr_reserve(ptr %t36, i64 %t41, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t42 = load ptr, ptr %t36 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 + store %S.ast.Node %t39, ptr %t43 + store i64 %t41, ptr %t37 + br label %endif1690 +endif1690: + br label %endif1687 +endif1687: + %t44 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t44 +} + +define internal i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.957, i64 2, i64 0 }, ptr %a4 + %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) + %t6 = icmp ne i32 %t5, 0 + br i1 %t6, label %then1691, label %endif1693 +then1691: + ret i64 1 +endif1693: + %t7 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.958, i64 2, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then1694, label %endif1696 +then1694: + ret i64 2 +endif1696: + %t12 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.959, i64 2, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from1697 +logic.from1697: + br i1 %t16, label %logic.end1699, label %logic.rhs1698 +logic.rhs1698: + %t17 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.960, i64 2, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + br label %logic.rend1700 +logic.rend1700: + br label %logic.end1699 +logic.end1699: + %t22 = phi i1 [ true, %logic.from1697 ], [ %t21, %logic.rend1700 ] + br label %logic.from1701 +logic.from1701: + br i1 %t22, label %logic.end1703, label %logic.rhs1702 +logic.rhs1702: + %t23 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.961, i64 1, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.rend1704 +logic.rend1704: + br label %logic.end1703 +logic.end1703: + %t28 = phi i1 [ true, %logic.from1701 ], [ %t27, %logic.rend1704 ] + br label %logic.from1705 +logic.from1705: + br i1 %t28, label %logic.end1707, label %logic.rhs1706 +logic.rhs1706: + %t29 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.962, i64 2, i64 0 }, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br label %logic.rend1708 +logic.rend1708: + br label %logic.end1707 +logic.end1707: + %t34 = phi i1 [ true, %logic.from1705 ], [ %t33, %logic.rend1708 ] + br label %logic.from1709 +logic.from1709: + br i1 %t34, label %logic.end1711, label %logic.rhs1710 +logic.rhs1710: + %t35 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.963, i64 1, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.rend1712 +logic.rend1712: + br label %logic.end1711 +logic.end1711: + %t40 = phi i1 [ true, %logic.from1709 ], [ %t39, %logic.rend1712 ] + br label %logic.from1713 +logic.from1713: + br i1 %t40, label %logic.end1715, label %logic.rhs1714 +logic.rhs1714: + %t41 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.964, i64 2, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.rend1716 +logic.rend1716: + br label %logic.end1715 +logic.end1715: + %t46 = phi i1 [ true, %logic.from1713 ], [ %t45, %logic.rend1716 ] + br i1 %t46, label %then1717, label %endif1719 +then1717: + ret i64 3 +endif1719: + %t47 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t47, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.965, i64 1, i64 0 }, ptr %a49 + %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) + %t51 = icmp ne i32 %t50, 0 + br label %logic.from1720 +logic.from1720: + br i1 %t51, label %logic.end1722, label %logic.rhs1721 +logic.rhs1721: + %t52 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.966, i64 1, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br label %logic.rend1723 +logic.rend1723: + br label %logic.end1722 +logic.end1722: + %t57 = phi i1 [ true, %logic.from1720 ], [ %t56, %logic.rend1723 ] + br label %logic.from1724 +logic.from1724: + br i1 %t57, label %logic.end1726, label %logic.rhs1725 +logic.rhs1725: + %t58 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t58, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.967, i64 1, i64 0 }, ptr %a60 + %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) + %t62 = icmp ne i32 %t61, 0 + br label %logic.rend1727 +logic.rend1727: + br label %logic.end1726 +logic.end1726: + %t63 = phi i1 [ true, %logic.from1724 ], [ %t62, %logic.rend1727 ] + br label %logic.from1728 +logic.from1728: + br i1 %t63, label %logic.end1730, label %logic.rhs1729 +logic.rhs1729: + %t64 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.968, i64 1, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp ne i32 %t67, 0 + br label %logic.rend1731 +logic.rend1731: + br label %logic.end1730 +logic.end1730: + %t69 = phi i1 [ true, %logic.from1728 ], [ %t68, %logic.rend1731 ] + br i1 %t69, label %then1732, label %endif1734 +then1732: + ret i64 4 +endif1734: + %t70 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t70, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.969, i64 1, i64 0 }, ptr %a72 + %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) + %t74 = icmp ne i32 %t73, 0 + br label %logic.from1735 +logic.from1735: + br i1 %t74, label %logic.end1737, label %logic.rhs1736 +logic.rhs1736: + %t75 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t75, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.970, i64 1, i64 0 }, ptr %a77 + %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) + %t79 = icmp ne i32 %t78, 0 + br label %logic.rend1738 +logic.rend1738: + br label %logic.end1737 +logic.end1737: + %t80 = phi i1 [ true, %logic.from1735 ], [ %t79, %logic.rend1738 ] + br label %logic.from1739 +logic.from1739: + br i1 %t80, label %logic.end1741, label %logic.rhs1740 +logic.rhs1740: + %t81 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.971, i64 1, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.rend1742 +logic.rend1742: + br label %logic.end1741 +logic.end1741: + %t86 = phi i1 [ true, %logic.from1739 ], [ %t85, %logic.rend1742 ] + br label %logic.from1743 +logic.from1743: + br i1 %t86, label %logic.end1745, label %logic.rhs1744 +logic.rhs1744: + %t87 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t87, ptr %a88 + store { ptr, i64, i64 } { ptr @.str.972, i64 2, i64 0 }, ptr %a89 + %t90 = call i32 @finch_str_eq(ptr %a88, ptr %a89) + %t91 = icmp ne i32 %t90, 0 + br label %logic.rend1746 +logic.rend1746: + br label %logic.end1745 +logic.end1745: + %t92 = phi i1 [ true, %logic.from1743 ], [ %t91, %logic.rend1746 ] + br label %logic.from1747 +logic.from1747: + br i1 %t92, label %logic.end1749, label %logic.rhs1748 +logic.rhs1748: + %t93 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t93, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.973, i64 2, i64 0 }, ptr %a95 + %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) + %t97 = icmp ne i32 %t96, 0 + br label %logic.rend1750 +logic.rend1750: + br label %logic.end1749 +logic.end1749: + %t98 = phi i1 [ true, %logic.from1747 ], [ %t97, %logic.rend1750 ] + br label %logic.from1751 +logic.from1751: + br i1 %t98, label %logic.end1753, label %logic.rhs1752 +logic.rhs1752: + %t99 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t99, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.974, i64 1, i64 0 }, ptr %a101 + %t102 = call i32 @finch_str_eq(ptr %a100, ptr %a101) + %t103 = icmp ne i32 %t102, 0 + br label %logic.rend1754 +logic.rend1754: + br label %logic.end1753 +logic.end1753: + %t104 = phi i1 [ true, %logic.from1751 ], [ %t103, %logic.rend1754 ] + br i1 %t104, label %then1755, label %endif1757 +then1755: + ret i64 5 +endif1757: + ret i64 0 +} + +define internal %S.ast.Node @finch.parser.parseExpr(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a15 = alloca %S.ast.Node, align 16 + %a18 = alloca %S.lexer.Token, align 16 + %a22 = alloca %S.ast.Node, align 16 + %a23 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.parseBinary(ptr %t2, i64 1) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call i1 @finch.parser.sameLine(ptr %t5) + %t7 = xor i1 %t6, true + br label %logic.from1758 +logic.from1758: + br i1 %t7, label %logic.end1760, label %logic.rhs1759 +logic.rhs1759: + %t8 = load ptr, ptr %a1 + %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.975, i64 2, i64 0 }) + %t10 = xor i1 %t9, true + br label %logic.rend1761 +logic.rend1761: + br label %logic.end1760 +logic.end1760: + %t11 = phi i1 [ true, %logic.from1758 ], [ %t10, %logic.rend1761 ] + br i1 %t11, label %then1762, label %endif1764 +then1762: + %t12 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t12 +endif1764: + %t13 = load ptr, ptr %a1 + %t14 = call %S.ast.Node @finch.parser.node(ptr %t13, { ptr, i64, i64 } { ptr @.str.976, i64 2, i64 0 }) + store %S.ast.Node %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = call %S.lexer.Token @finch.parser.next(ptr %t16) + store %S.lexer.Token %t17, ptr %a18 + call void @finch.drop.S_lexer_Token(ptr %a18) + %t19 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t21, ptr %a22 + call void @finch.copy.S_ast_Node(ptr %a23, ptr %a22) + %t24 = load %S.ast.Node, ptr %a23 + %t25 = load i64, ptr %t20 + %t26 = add i64 %t25, 1 + call void @finch_arr_reserve(ptr %t19, i64 %t26, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t27 = load ptr, ptr %t19 + %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 %t25 + store %S.ast.Node %t24, ptr %t28 + store i64 %t26, ptr %t20 + %t29 = load ptr, ptr %a1 + %t30 = call i1 @finch.parser.at(ptr %t29, { ptr, i64, i64 } { ptr @.str.977, i64 1, i64 0 }) + br i1 %t30, label %then1765, label %else1766 +then1765: + %t31 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 6 + store i1 true, ptr %t31 + %t32 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i32 0, i32 1 + %t34 = load ptr, ptr %a1 + %t35 = call %S.ast.Node @finch.parser.parseBlock(ptr %t34) + %t36 = load i64, ptr %t33 + %t37 = add i64 %t36, 1 + call void @finch_arr_reserve(ptr %t32, i64 %t37, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t38 = load ptr, ptr %t32 + %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 %t36 + store %S.ast.Node %t35, ptr %t39 + store i64 %t37, ptr %t33 + br label %endif1767 +else1766: + %t40 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load ptr, ptr %a1 + %t43 = call %S.ast.Node @finch.parser.parseExpr(ptr %t42) + %t44 = load i64, ptr %t41 + %t45 = add i64 %t44, 1 + call void @finch_arr_reserve(ptr %t40, i64 %t45, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t46 = load ptr, ptr %t40 + %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 + store %S.ast.Node %t43, ptr %t47 + store i64 %t45, ptr %t41 + br label %endif1767 +endif1767: + %t48 = load %S.ast.Node, ptr %a15 + call void @finch.drop.S_ast_Node(ptr %a4) + ret %S.ast.Node %t48 +} + +define internal %S.ast.Node @finch.parser.parseBinary(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca %S.ast.Node, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.lexer.Token, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca %S.ast.Node, align 16 + %a38 = alloca %S.ast.Node, align 16 + %a55 = alloca %S.ast.Node, align 16 + %a56 = alloca %S.ast.Node, align 16 + %a59 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load i64, ptr %a2 + %t4 = icmp sgt i64 %t3, 5 + br i1 %t4, label %then1768, label %endif1770 +then1768: + %t5 = load ptr, ptr %a1 + %t6 = call %S.ast.Node @finch.parser.parseUnary(ptr %t5) + ret %S.ast.Node %t6 +endif1770: + %t7 = load ptr, ptr %a1 + %t8 = load i64, ptr %a2 + %t9 = add i64 %t8, 1 + %t10 = call %S.ast.Node @finch.parser.parseBinary(ptr %t7, i64 %t9) + store %S.ast.Node %t10, ptr %a11 + br label %while.cond1771 +while.cond1771: + %t12 = load ptr, ptr %a1 + %t13 = call i1 @finch.parser.sameLine(ptr %t12) + br label %logic.from1774 +logic.from1774: + br i1 %t13, label %logic.rhs1775, label %logic.end1776 +logic.rhs1775: + %t14 = load ptr, ptr %a1 + %t15 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t14) + %t16 = call i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load i64, ptr %a2 + %t19 = icmp eq i64 %t16, %t18 + br label %logic.rend1777 +logic.rend1777: + br label %logic.end1776 +logic.end1776: + %t20 = phi i1 [ false, %logic.from1774 ], [ %t19, %logic.rend1777 ] + br i1 %t20, label %while.body1772, label %while.end1773 +while.body1772: + %t21 = load ptr, ptr %a1 + %t22 = call %S.ast.Node @finch.parser.node(ptr %t21, { ptr, i64, i64 } { ptr @.str.978, i64 6, i64 0 }) + store %S.ast.Node %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = call %S.lexer.Token @finch.parser.next(ptr %t24) + %t26 = extractvalue %S.lexer.Token %t25, 0 + store { ptr, i64, i64 } %t26, ptr %a27 + call void @finch_str_copy(ptr %a28, ptr %a27) + %t29 = load { ptr, i64, i64 }, ptr %a28 + store %S.lexer.Token %t25, ptr %a30 + call void @finch.drop.S_lexer_Token(ptr %a30) + %t31 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t29, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 9 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 + %t36 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t36, ptr %a37 + call void @finch.copy.S_ast_Node(ptr %a38, ptr %a37) + %t39 = load %S.ast.Node, ptr %a38 + %t40 = load i64, ptr %t35 + %t41 = add i64 %t40, 1 + call void @finch_arr_reserve(ptr %t34, i64 %t41, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t42 = load ptr, ptr %t34 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 + store %S.ast.Node %t39, ptr %t43 + store i64 %t41, ptr %t35 + %t44 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 9 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 + %t46 = load ptr, ptr %a1 + %t47 = load i64, ptr %a2 + %t48 = add i64 %t47, 1 + %t49 = call %S.ast.Node @finch.parser.parseBinary(ptr %t46, i64 %t48) + %t50 = load i64, ptr %t45 + %t51 = add i64 %t50, 1 + call void @finch_arr_reserve(ptr %t44, i64 %t51, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t52 = load ptr, ptr %t44 + %t53 = getelementptr inbounds %S.ast.Node, ptr %t52, i64 %t50 + store %S.ast.Node %t49, ptr %t53 + store i64 %t51, ptr %t45 + %t54 = load %S.ast.Node, ptr %a23 + store %S.ast.Node %t54, ptr %a55 + call void @finch.copy.S_ast_Node(ptr %a56, ptr %a55) + %t57 = load %S.ast.Node, ptr %a56 + %t58 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t57, ptr %a11 + store %S.ast.Node %t58, ptr %a59 + call void @finch.drop.S_ast_Node(ptr %a59) + call void @finch.drop.S_ast_Node(ptr %a23) + br label %while.cond1771 +while.end1773: + %t60 = load %S.ast.Node, ptr %a11 + ret %S.ast.Node %t60 +} + +define internal %S.ast.Node @finch.parser.parseUnary(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca %S.ast.Node, align 16 + %a9 = alloca %S.lexer.Token, align 16 + %a29 = alloca %S.ast.Node, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca %S.lexer.Token, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.979, i64 3, i64 0 }) + br i1 %t3, label %then1778, label %endif1780 +then1778: + %t4 = load ptr, ptr %a1 + %t5 = call %S.ast.Node @finch.parser.node(ptr %t4, { ptr, i64, i64 } { ptr @.str.980, i64 3, i64 0 }) + store %S.ast.Node %t5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = call %S.lexer.Token @finch.parser.next(ptr %t7) + store %S.lexer.Token %t8, ptr %a9 + call void @finch.drop.S_lexer_Token(ptr %a9) + %t10 = getelementptr inbounds %S.ast.Node, ptr %a6, i32 0, i32 9 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load ptr, ptr %a1 + %t13 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t12) + %t14 = load i64, ptr %t11 + %t15 = add i64 %t14, 1 + call void @finch_arr_reserve(ptr %t10, i64 %t15, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t16 = load ptr, ptr %t10 + %t17 = getelementptr inbounds %S.ast.Node, ptr %t16, i64 %t14 + store %S.ast.Node %t13, ptr %t17 + store i64 %t15, ptr %t11 + %t18 = load %S.ast.Node, ptr %a6 + ret %S.ast.Node %t18 +endif1780: + %t19 = load ptr, ptr %a1 + %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.981, i64 1, i64 0 }) + br label %logic.from1781 +logic.from1781: + br i1 %t20, label %logic.end1783, label %logic.rhs1782 +logic.rhs1782: + %t21 = load ptr, ptr %a1 + %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 }) + br label %logic.rend1784 +logic.rend1784: + br label %logic.end1783 +logic.end1783: + %t23 = phi i1 [ true, %logic.from1781 ], [ %t22, %logic.rend1784 ] + br label %logic.from1785 +logic.from1785: + br i1 %t23, label %logic.end1787, label %logic.rhs1786 +logic.rhs1786: + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.983, i64 1, i64 0 }) + br label %logic.rend1788 +logic.rend1788: + br label %logic.end1787 +logic.end1787: + %t26 = phi i1 [ true, %logic.from1785 ], [ %t25, %logic.rend1788 ] + br i1 %t26, label %then1789, label %endif1791 +then1789: + %t27 = load ptr, ptr %a1 + %t28 = call %S.ast.Node @finch.parser.node(ptr %t27, { ptr, i64, i64 } { ptr @.str.984, i64 5, i64 0 }) + store %S.ast.Node %t28, ptr %a29 + %t30 = load ptr, ptr %a1 + %t31 = call %S.lexer.Token @finch.parser.next(ptr %t30) + %t32 = extractvalue %S.lexer.Token %t31, 0 + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_copy(ptr %a34, ptr %a33) + %t35 = load { ptr, i64, i64 }, ptr %a34 + store %S.lexer.Token %t31, ptr %a36 + call void @finch.drop.S_lexer_Token(ptr %a36) + %t37 = getelementptr inbounds %S.ast.Node, ptr %a29, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t35, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = getelementptr inbounds %S.ast.Node, ptr %a29, i32 0, i32 9 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load ptr, ptr %a1 + %t43 = call %S.ast.Node @finch.parser.parseUnary(ptr %t42) + %t44 = load i64, ptr %t41 + %t45 = add i64 %t44, 1 + call void @finch_arr_reserve(ptr %t40, i64 %t45, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t46 = load ptr, ptr %t40 + %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 + store %S.ast.Node %t43, ptr %t47 + store i64 %t45, ptr %t41 + %t48 = load %S.ast.Node, ptr %a29 + ret %S.ast.Node %t48 +endif1791: + %t49 = load ptr, ptr %a1 + %t50 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t49) + ret %S.ast.Node %t50 +} + +define internal void @finch.parser.parseArgs(ptr %p0, ptr %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca ptr, align 16 + %a5 = alloca %S.lexer.Token, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.lexer.Token, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca %S.lexer.Token, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + store ptr %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.985, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.986, i64 3, i64 0 }) + store %S.lexer.Token %t4, ptr %a5 + call void @finch.drop.S_lexer_Token(ptr %a5) + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1792, label %ok1793 +panic1792: + call void @finch_panic(ptr @.str.987, i64 686, ptr @.str.988) + unreachable +ok1793: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 2 + %t9 = load i64, ptr %t8 + %t10 = add i64 %t9, 1 + store i64 %t10, ptr %t8 + %t11 = load ptr, ptr %a1 + %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.989, i64 1, i64 0 }) + %t13 = xor i1 %t12, true + br i1 %t13, label %then1794, label %endif1796 +then1794: + br label %while.cond1797 +while.cond1797: + %t14 = load ptr, ptr %a1 + %t15 = call i1 @finch.parser.at(ptr %t14, { ptr, i64, i64 } { ptr @.str.990, i64 1, i64 0 }) + %t16 = xor i1 %t15, true + br i1 %t16, label %while.body1798, label %while.end1799 +while.body1798: + store { ptr, i64, i64 } { ptr @.str.991, i64 0, i64 0 }, ptr %a17 + %t18 = load ptr, ptr %a1 + %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.992, i64 5, i64 0 }) + br label %logic.from1800 +logic.from1800: + br i1 %t19, label %logic.rhs1801, label %logic.end1802 +logic.rhs1801: + %t20 = load ptr, ptr %a1 + %t21 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t20, i64 1) + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.993, i64 1, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + store { ptr, i64, i64 } %t21, ptr %a26 + call void @finch_str_drop(ptr %a26) + br label %logic.rend1803 +logic.rend1803: + br label %logic.end1802 +logic.end1802: + %t27 = phi i1 [ false, %logic.from1800 ], [ %t25, %logic.rend1803 ] + br i1 %t27, label %then1804, label %endif1806 +then1804: + %t28 = load ptr, ptr %a1 + %t29 = call %S.lexer.Token @finch.parser.next(ptr %t28) + %t30 = extractvalue %S.lexer.Token %t29, 1 + store { ptr, i64, i64 } %t30, ptr %a31 + call void @finch_str_copy(ptr %a32, ptr %a31) + %t33 = load { ptr, i64, i64 }, ptr %a32 + store %S.lexer.Token %t29, ptr %a34 + call void @finch.drop.S_lexer_Token(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t33, ptr %a17 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load ptr, ptr %a1 + %t38 = call %S.lexer.Token @finch.parser.next(ptr %t37) + store %S.lexer.Token %t38, ptr %a39 + call void @finch.drop.S_lexer_Token(ptr %a39) + br label %endif1806 +endif1806: + %t40 = load ptr, ptr %a2 + %t41 = icmp eq ptr %t40, null + br i1 %t41, label %panic1807, label %ok1808 +panic1807: + call void @finch_panic(ptr @.str.994, i64 694, ptr @.str.995) + unreachable +ok1808: + %t42 = getelementptr inbounds %S.ast.Node, ptr %t40, i32 0, i32 10 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 + %t44 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_copy(ptr %a46, ptr %a45) + %t47 = load { ptr, i64, i64 }, ptr %a46 + %t48 = load i64, ptr %t43 + %t49 = add i64 %t48, 1 + call void @finch_arr_reserve(ptr %t42, i64 %t49, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t50 = load ptr, ptr %t42 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 + store { ptr, i64, i64 } %t47, ptr %t51 + store i64 %t49, ptr %t43 + %t52 = load ptr, ptr %a2 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic1809, label %ok1810 +panic1809: + call void @finch_panic(ptr @.str.996, i64 695, ptr @.str.997) + unreachable +ok1810: + %t54 = getelementptr inbounds %S.ast.Node, ptr %t52, i32 0, i32 9 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 + %t56 = load ptr, ptr %a1 + %t57 = call %S.ast.Node @finch.parser.parseExpr(ptr %t56) + %t58 = load i64, ptr %t55 + %t59 = add i64 %t58, 1 + call void @finch_arr_reserve(ptr %t54, i64 %t59, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t60 = load ptr, ptr %t54 + %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i64 %t58 + store %S.ast.Node %t57, ptr %t61 + store i64 %t59, ptr %t55 + %t62 = load ptr, ptr %a1 + %t63 = call i1 @finch.parser.accept(ptr %t62, { ptr, i64, i64 } { ptr @.str.998, i64 1, i64 0 }) + %t64 = xor i1 %t63, true + br i1 %t64, label %then1811, label %endif1813 +then1811: + call void @finch_str_drop(ptr %a17) + br label %while.end1799 +endif1813: + call void @finch_str_drop(ptr %a17) + br label %while.cond1797 +while.end1799: + br label %endif1796 +endif1796: + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic1814, label %ok1815 +panic1814: + call void @finch_panic(ptr @.str.999, i64 701, ptr @.str.1000) + unreachable +ok1815: + %t67 = getelementptr inbounds %S.parser.Parser, ptr %t65, i32 0, i32 2 + %t68 = load i64, ptr %t67 + %t69 = sub i64 %t68, 1 + store i64 %t69, ptr %t67 + %t70 = load ptr, ptr %a1 + %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.1001, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1002, i64 3, i64 0 }) + store %S.lexer.Token %t71, ptr %a72 + call void @finch.drop.S_lexer_Token(ptr %a72) + ret void +} + +define internal %S.ast.Node @finch.parser.parsePostfix(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a14 = alloca %S.lexer.Token, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca %S.lexer.Token, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca %S.ast.Node, align 16 + %a29 = alloca %S.ast.Node, align 16 + %a40 = alloca %S.lexer.Token, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca %S.ast.Node, align 16 + %a49 = alloca %S.ast.Node, align 16 + %a52 = alloca %S.ast.Node, align 16 + %a57 = alloca %S.ast.Node, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a69 = alloca %S.ast.Node, align 16 + %a70 = alloca %S.ast.Node, align 16 + %a91 = alloca %S.lexer.Token, align 16 + %a93 = alloca %S.ast.Node, align 16 + %a94 = alloca %S.ast.Node, align 16 + %a97 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.parsePrimary(ptr %t2) + store %S.ast.Node %t3, ptr %a4 + br label %while.cond1816 +while.cond1816: + %t5 = load ptr, ptr %a1 + %t6 = call i1 @finch.parser.sameLine(ptr %t5) + br i1 %t6, label %while.body1817, label %while.end1818 +while.body1817: + %t7 = load ptr, ptr %a1 + %t8 = call i1 @finch.parser.at(ptr %t7, { ptr, i64, i64 } { ptr @.str.1003, i64 1, i64 0 }) + br i1 %t8, label %then1819, label %else1820 +then1819: + %t9 = load ptr, ptr %a1 + %t10 = call %S.ast.Node @finch.parser.node(ptr %t9, { ptr, i64, i64 } { ptr @.str.1004, i64 6, i64 0 }) + store %S.ast.Node %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = call %S.lexer.Token @finch.parser.next(ptr %t12) + store %S.lexer.Token %t13, ptr %a14 + call void @finch.drop.S_lexer_Token(ptr %a14) + %t15 = load ptr, ptr %a1 + %t16 = call %S.lexer.Token @finch.parser.expect(ptr %t15, { ptr, i64, i64 } { ptr @.str.1005, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.1006, i64 16, i64 0 }) + %t17 = extractvalue %S.lexer.Token %t16, 1 + store { ptr, i64, i64 } %t17, ptr %a18 + call void @finch_str_copy(ptr %a19, ptr %a18) + %t20 = load { ptr, i64, i64 }, ptr %a19 + store %S.lexer.Token %t16, ptr %a21 + call void @finch.drop.S_lexer_Token(ptr %a21) + %t22 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 1 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t20, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 9 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 + %t27 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t27, ptr %a28 + call void @finch.copy.S_ast_Node(ptr %a29, ptr %a28) + %t30 = load %S.ast.Node, ptr %a29 + %t31 = load i64, ptr %t26 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %t25, i64 %t32, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %t25 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t31 + store %S.ast.Node %t30, ptr %t34 + store i64 %t32, ptr %t26 + %t35 = load ptr, ptr %a1 + %t36 = call i1 @finch.parser.at(ptr %t35, { ptr, i64, i64 } { ptr @.str.1007, i64 1, i64 0 }) + br label %logic.from1822 +logic.from1822: + br i1 %t36, label %logic.rhs1823, label %logic.end1824 +logic.rhs1823: + %t37 = load ptr, ptr %a1 + %t38 = call %S.lexer.Token @finch.parser.cur(ptr %t37) + %t39 = extractvalue %S.lexer.Token %t38, 4 + store %S.lexer.Token %t38, ptr %a40 + call void @finch.drop.S_lexer_Token(ptr %a40) + %t41 = xor i1 %t39, true + br label %logic.rend1825 +logic.rend1825: + br label %logic.end1824 +logic.end1824: + %t42 = phi i1 [ false, %logic.from1822 ], [ %t41, %logic.rend1825 ] + br i1 %t42, label %then1826, label %endif1828 +then1826: + %t43 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 0 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } { ptr @.str.1008, i64 6, i64 0 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load ptr, ptr %a1 + call void @finch.parser.parseArgs(ptr %t46, ptr %a11) + br label %endif1828 +endif1828: + %t47 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t47, ptr %a48 + call void @finch.copy.S_ast_Node(ptr %a49, ptr %a48) + %t50 = load %S.ast.Node, ptr %a49 + %t51 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t50, ptr %a4 + store %S.ast.Node %t51, ptr %a52 + call void @finch.drop.S_ast_Node(ptr %a52) + call void @finch.drop.S_ast_Node(ptr %a11) + br label %endif1821 +else1820: + %t53 = load ptr, ptr %a1 + %t54 = call i1 @finch.parser.at(ptr %t53, { ptr, i64, i64 } { ptr @.str.1009, i64 1, i64 0 }) + br i1 %t54, label %then1829, label %else1830 +then1829: + %t55 = load ptr, ptr %a1 + %t56 = call %S.ast.Node @finch.parser.node(ptr %t55, { ptr, i64, i64 } { ptr @.str.1010, i64 5, i64 0 }) + store %S.ast.Node %t56, ptr %a57 + %t58 = load ptr, ptr %a1 + %t59 = call %S.lexer.Token @finch.parser.next(ptr %t58) + store %S.lexer.Token %t59, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic1832, label %ok1833 +panic1832: + call void @finch_panic(ptr @.str.1011, i64 721, ptr @.str.1012) + unreachable +ok1833: + %t63 = getelementptr inbounds %S.parser.Parser, ptr %t61, i32 0, i32 2 + %t64 = load i64, ptr %t63 + %t65 = add i64 %t64, 1 + store i64 %t65, ptr %t63 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a57, i32 0, i32 9 + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i32 0, i32 1 + %t68 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t68, ptr %a69 + call void @finch.copy.S_ast_Node(ptr %a70, ptr %a69) + %t71 = load %S.ast.Node, ptr %a70 + %t72 = load i64, ptr %t67 + %t73 = add i64 %t72, 1 + call void @finch_arr_reserve(ptr %t66, i64 %t73, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t74 = load ptr, ptr %t66 + %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 %t72 + store %S.ast.Node %t71, ptr %t75 + store i64 %t73, ptr %t67 + %t76 = getelementptr inbounds %S.ast.Node, ptr %a57, i32 0, i32 9 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = load ptr, ptr %a1 + %t79 = call %S.ast.Node @finch.parser.parseExpr(ptr %t78) + %t80 = load i64, ptr %t77 + %t81 = add i64 %t80, 1 + call void @finch_arr_reserve(ptr %t76, i64 %t81, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t82 = load ptr, ptr %t76 + %t83 = getelementptr inbounds %S.ast.Node, ptr %t82, i64 %t80 + store %S.ast.Node %t79, ptr %t83 + store i64 %t81, ptr %t77 + %t84 = load ptr, ptr %a1 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic1834, label %ok1835 +panic1834: + call void @finch_panic(ptr @.str.1013, i64 724, ptr @.str.1014) + unreachable +ok1835: + %t86 = getelementptr inbounds %S.parser.Parser, ptr %t84, i32 0, i32 2 + %t87 = load i64, ptr %t86 + %t88 = sub i64 %t87, 1 + store i64 %t88, ptr %t86 + %t89 = load ptr, ptr %a1 + %t90 = call %S.lexer.Token @finch.parser.expect(ptr %t89, { ptr, i64, i64 } { ptr @.str.1015, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1016, i64 3, i64 0 }) + store %S.lexer.Token %t90, ptr %a91 + call void @finch.drop.S_lexer_Token(ptr %a91) + %t92 = load %S.ast.Node, ptr %a57 + store %S.ast.Node %t92, ptr %a93 + call void @finch.copy.S_ast_Node(ptr %a94, ptr %a93) + %t95 = load %S.ast.Node, ptr %a94 + %t96 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t95, ptr %a4 + store %S.ast.Node %t96, ptr %a97 + call void @finch.drop.S_ast_Node(ptr %a97) + call void @finch.drop.S_ast_Node(ptr %a57) + br label %endif1831 +else1830: + %t98 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t98 +endif1831: + br label %endif1821 +endif1821: + br label %while.cond1816 +while.end1818: + %t99 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t99 +} + +define internal %S.ast.Node @finch.parser.parsePrimary(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.lexer.Token, align 16 + %a7 = alloca %S.ast.Node, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca %S.lexer.Token, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca %S.lexer.Token, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca %S.lexer.Token, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.lexer.Token, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca %S.lexer.Token, align 16 + %a122 = alloca %S.ast.Node, align 16 + %a130 = alloca %S.lexer.Token, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca %S.lexer.Token, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca %S.lexer.Token, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca %S.lexer.Token, align 16 + %a219 = alloca %S.lexer.Token, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca %S.lexer.Token, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca %S.lexer.Token, align 16 + %a268 = alloca %S.ast.Type, align 16 + %a283 = alloca %S.lexer.Token, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca %S.lexer.Token, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.lexer.Token @finch.parser.cur(ptr %t2) + store %S.lexer.Token %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.ast.Node @finch.parser.node(ptr %t5, { ptr, i64, i64 } { ptr @.str.1017, i64 0, i64 0 }) + store %S.ast.Node %t6, ptr %a7 + %t8 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.1018, i64 3, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.from1836 +logic.from1836: + br i1 %t18, label %logic.end1838, label %logic.rhs1837 +logic.rhs1837: + %t19 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1019, i64 5, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend1839 +logic.rend1839: + br label %logic.end1838 +logic.end1838: + %t24 = phi i1 [ true, %logic.from1836 ], [ %t23, %logic.rend1839 ] + br label %logic.from1840 +logic.from1840: + br i1 %t24, label %logic.end1842, label %logic.rhs1841 +logic.rhs1841: + %t25 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.1020, i64 4, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend1843 +logic.rend1843: + br label %logic.end1842 +logic.end1842: + %t30 = phi i1 [ true, %logic.from1840 ], [ %t29, %logic.rend1843 ] + br i1 %t30, label %then1844, label %endif1846 +then1844: + %t31 = load ptr, ptr %a1 + %t32 = call %S.lexer.Token @finch.parser.next(ptr %t31) + store %S.lexer.Token %t32, ptr %a33 + call void @finch.drop.S_lexer_Token(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a13 + %t35 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + store { ptr, i64, i64 } %t34, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + %t39 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t38, ptr %t35 + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 + store { ptr, i64, i64 } %t42, ptr %a44 + call void @finch_str_copy(ptr %a45, ptr %a44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + %t47 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t46, ptr %t43 + store { ptr, i64, i64 } %t47, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t49 +endif1846: + %t50 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.1021, i64 6, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then1847, label %endif1849 +then1847: + %t55 = load ptr, ptr %a1 + %t56 = call %S.lexer.Token @finch.parser.next(ptr %t55) + store %S.lexer.Token %t56, ptr %a57 + call void @finch.drop.S_lexer_Token(ptr %a57) + %t58 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } { ptr @.str.1022, i64 3, i64 0 }, ptr %t58 + store { ptr, i64, i64 } %t59, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 + store { ptr, i64, i64 } %t62, ptr %a64 + call void @finch_str_copy(ptr %a65, ptr %a64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + %t67 = load { ptr, i64, i64 }, ptr %t63 + store { ptr, i64, i64 } %t66, ptr %t63 + store { ptr, i64, i64 } %t67, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t69 +endif1849: + %t70 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t70, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.1023, i64 4, i64 0 }, ptr %a72 + %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) + %t74 = icmp ne i32 %t73, 0 + br label %logic.from1850 +logic.from1850: + br i1 %t74, label %logic.end1852, label %logic.rhs1851 +logic.rhs1851: + %t75 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t75, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.1024, i64 5, i64 0 }, ptr %a77 + %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) + %t79 = icmp ne i32 %t78, 0 + br label %logic.rend1853 +logic.rend1853: + br label %logic.end1852 +logic.end1852: + %t80 = phi i1 [ true, %logic.from1850 ], [ %t79, %logic.rend1853 ] + br i1 %t80, label %then1854, label %endif1856 +then1854: + %t81 = load ptr, ptr %a1 + %t82 = call %S.lexer.Token @finch.parser.next(ptr %t81) + store %S.lexer.Token %t82, ptr %a83 + call void @finch.drop.S_lexer_Token(ptr %a83) + %t84 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } { ptr @.str.1025, i64 4, i64 0 }, ptr %t84 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a13 + %t88 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 + store { ptr, i64, i64 } %t87, ptr %a89 + call void @finch_str_copy(ptr %a90, ptr %a89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t91, ptr %t88 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t94 +endif1856: + %t95 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.1026, i64 4, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then1857, label %endif1859 +then1857: + %t100 = load ptr, ptr %a1 + %t101 = call %S.lexer.Token @finch.parser.next(ptr %t100) + store %S.lexer.Token %t101, ptr %a102 + call void @finch.drop.S_lexer_Token(ptr %a102) + %t103 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } { ptr @.str.1027, i64 4, i64 0 }, ptr %t103 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t106 +endif1859: + %t107 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t107, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.1028, i64 1, i64 0 }, ptr %a109 + %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) + %t111 = icmp ne i32 %t110, 0 + br i1 %t111, label %then1860, label %endif1862 +then1860: + %t112 = load ptr, ptr %a1 + %t113 = call %S.lexer.Token @finch.parser.next(ptr %t112) + store %S.lexer.Token %t113, ptr %a114 + call void @finch.drop.S_lexer_Token(ptr %a114) + %t115 = load ptr, ptr %a1 + %t116 = icmp eq ptr %t115, null + br i1 %t116, label %panic1863, label %ok1864 +panic1863: + call void @finch_panic(ptr @.str.1029, i64 763, ptr @.str.1030) + unreachable +ok1864: + %t117 = getelementptr inbounds %S.parser.Parser, ptr %t115, i32 0, i32 2 + %t118 = load i64, ptr %t117 + %t119 = add i64 %t118, 1 + store i64 %t119, ptr %t117 + %t120 = load ptr, ptr %a1 + %t121 = call %S.ast.Node @finch.parser.parseExpr(ptr %t120) + store %S.ast.Node %t121, ptr %a122 + %t123 = load ptr, ptr %a1 + %t124 = icmp eq ptr %t123, null + br i1 %t124, label %panic1865, label %ok1866 +panic1865: + call void @finch_panic(ptr @.str.1031, i64 765, ptr @.str.1032) + unreachable +ok1866: + %t125 = getelementptr inbounds %S.parser.Parser, ptr %t123, i32 0, i32 2 + %t126 = load i64, ptr %t125 + %t127 = sub i64 %t126, 1 + store i64 %t127, ptr %t125 + %t128 = load ptr, ptr %a1 + %t129 = call %S.lexer.Token @finch.parser.expect(ptr %t128, { ptr, i64, i64 } { ptr @.str.1033, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1034, i64 3, i64 0 }) + store %S.lexer.Token %t129, ptr %a130 + call void @finch.drop.S_lexer_Token(ptr %a130) + %t131 = load %S.ast.Node, ptr %a122 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_ast_Node(ptr %a7) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t131 +endif1862: + %t132 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t132, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.1035, i64 5, i64 0 }, ptr %a134 + %t135 = call i32 @finch_str_eq(ptr %a133, ptr %a134) + %t136 = icmp ne i32 %t135, 0 + br i1 %t136, label %then1867, label %endif1869 +then1867: + %t137 = load ptr, ptr %a1 + %t138 = call %S.ast.Node @finch.parser.parseMatch(ptr %t137, i1 true) + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_ast_Node(ptr %a7) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t138 +endif1869: + %t139 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t139, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.1036, i64 1, i64 0 }, ptr %a141 + %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) + %t143 = icmp ne i32 %t142, 0 + br i1 %t143, label %then1870, label %endif1872 +then1870: + %t144 = load ptr, ptr %a1 + %t145 = call %S.lexer.Token @finch.parser.next(ptr %t144) + store %S.lexer.Token %t145, ptr %a146 + call void @finch.drop.S_lexer_Token(ptr %a146) + %t147 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t148 = load { ptr, i64, i64 }, ptr %t147 + store { ptr, i64, i64 } { ptr @.str.1037, i64 5, i64 0 }, ptr %t147 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load ptr, ptr %a1 + %t151 = icmp eq ptr %t150, null + br i1 %t151, label %panic1873, label %ok1874 +panic1873: + call void @finch_panic(ptr @.str.1038, i64 775, ptr @.str.1039) + unreachable +ok1874: + %t152 = getelementptr inbounds %S.parser.Parser, ptr %t150, i32 0, i32 2 + %t153 = load i64, ptr %t152 + %t154 = add i64 %t153, 1 + store i64 %t154, ptr %t152 + %t155 = load ptr, ptr %a1 + %t156 = call i1 @finch.parser.at(ptr %t155, { ptr, i64, i64 } { ptr @.str.1040, i64 1, i64 0 }) + br label %logic.from1875 +logic.from1875: + br i1 %t156, label %logic.rhs1876, label %logic.end1877 +logic.rhs1876: + %t157 = load ptr, ptr %a1 + %t158 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t157, i64 1) + store { ptr, i64, i64 } %t158, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.1041, i64 1, i64 0 }, ptr %a160 + %t161 = call i32 @finch_str_eq(ptr %a159, ptr %a160) + %t162 = icmp ne i32 %t161, 0 + store { ptr, i64, i64 } %t158, ptr %a163 + call void @finch_str_drop(ptr %a163) + br label %logic.rend1878 +logic.rend1878: + br label %logic.end1877 +logic.end1877: + %t164 = phi i1 [ false, %logic.from1875 ], [ %t162, %logic.rend1878 ] + br i1 %t164, label %then1879, label %endif1881 +then1879: + %t165 = load ptr, ptr %a1 + %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) + store %S.lexer.Token %t166, ptr %a167 + call void @finch.drop.S_lexer_Token(ptr %a167) + %t168 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t169 = load { ptr, i64, i64 }, ptr %t168 + store { ptr, i64, i64 } { ptr @.str.1042, i64 3, i64 0 }, ptr %t168 + store { ptr, i64, i64 } %t169, ptr %a170 + call void @finch_str_drop(ptr %a170) + br label %endif1881 +endif1881: + br label %while.cond1882 +while.cond1882: + %t171 = load ptr, ptr %a1 + %t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.1043, i64 1, i64 0 }) + %t173 = xor i1 %t172, true + br i1 %t173, label %while.body1883, label %while.end1884 +while.body1883: + %t174 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 + %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1 + %t176 = load ptr, ptr %a1 + %t177 = call %S.ast.Node @finch.parser.parseExpr(ptr %t176) + %t178 = load i64, ptr %t175 + %t179 = add i64 %t178, 1 + call void @finch_arr_reserve(ptr %t174, i64 %t179, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t180 = load ptr, ptr %t174 + %t181 = getelementptr inbounds %S.ast.Node, ptr %t180, i64 %t178 + store %S.ast.Node %t177, ptr %t181 + store i64 %t179, ptr %t175 + %t182 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 + %t184 = load i64, ptr %t183 + %t185 = icmp eq i64 %t184, 1 + br label %logic.from1885 +logic.from1885: + br i1 %t185, label %logic.rhs1886, label %logic.end1887 +logic.rhs1886: + %t186 = load ptr, ptr %a1 + %t187 = call i1 @finch.parser.at(ptr %t186, { ptr, i64, i64 } { ptr @.str.1044, i64 1, i64 0 }) + br label %logic.rend1888 +logic.rend1888: + br label %logic.end1887 +logic.end1887: + %t188 = phi i1 [ false, %logic.from1885 ], [ %t187, %logic.rend1888 ] + br i1 %t188, label %then1889, label %endif1891 +then1889: + %t189 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t190 = load { ptr, i64, i64 }, ptr %t189 + store { ptr, i64, i64 } { ptr @.str.1045, i64 3, i64 0 }, ptr %t189 + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_drop(ptr %a191) + br label %endif1891 +endif1891: + %t192 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + store { ptr, i64, i64 } %t193, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.1046, i64 3, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br i1 %t197, label %then1892, label %endif1894 +then1892: + %t198 = load ptr, ptr %a1 + %t199 = call %S.lexer.Token @finch.parser.expect(ptr %t198, { ptr, i64, i64 } { ptr @.str.1047, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1048, i64 41, i64 0 }) + store %S.lexer.Token %t199, ptr %a200 + call void @finch.drop.S_lexer_Token(ptr %a200) + %t201 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 + %t203 = load ptr, ptr %a1 + %t204 = call %S.ast.Node @finch.parser.parseExpr(ptr %t203) + %t205 = load i64, ptr %t202 + %t206 = add i64 %t205, 1 + call void @finch_arr_reserve(ptr %t201, i64 %t206, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t207 = load ptr, ptr %t201 + %t208 = getelementptr inbounds %S.ast.Node, ptr %t207, i64 %t205 + store %S.ast.Node %t204, ptr %t208 + store i64 %t206, ptr %t202 + br label %endif1894 +endif1894: + %t209 = load ptr, ptr %a1 + %t210 = call i1 @finch.parser.accept(ptr %t209, { ptr, i64, i64 } { ptr @.str.1049, i64 1, i64 0 }) + %t211 = xor i1 %t210, true + br i1 %t211, label %then1895, label %endif1897 +then1895: + br label %while.end1884 +endif1897: + br label %while.cond1882 +while.end1884: + %t212 = load ptr, ptr %a1 + %t213 = icmp eq ptr %t212, null + br i1 %t213, label %panic1898, label %ok1899 +panic1898: + call void @finch_panic(ptr @.str.1050, i64 793, ptr @.str.1051) + unreachable +ok1899: + %t214 = getelementptr inbounds %S.parser.Parser, ptr %t212, i32 0, i32 2 + %t215 = load i64, ptr %t214 + %t216 = sub i64 %t215, 1 + store i64 %t216, ptr %t214 + %t217 = load ptr, ptr %a1 + %t218 = call %S.lexer.Token @finch.parser.expect(ptr %t217, { ptr, i64, i64 } { ptr @.str.1052, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1053, i64 3, i64 0 }) + store %S.lexer.Token %t218, ptr %a219 + call void @finch.drop.S_lexer_Token(ptr %a219) + %t220 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t220 +endif1872: + %t221 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t221, ptr %a222 + store { ptr, i64, i64 } { ptr @.str.1054, i64 5, i64 0 }, ptr %a223 + %t224 = call i32 @finch_str_eq(ptr %a222, ptr %a223) + %t225 = icmp ne i32 %t224, 0 + br i1 %t225, label %then1900, label %endif1902 +then1900: + %t226 = load ptr, ptr %a1 + %t227 = call %S.lexer.Token @finch.parser.next(ptr %t226) + store %S.lexer.Token %t227, ptr %a228 + call void @finch.drop.S_lexer_Token(ptr %a228) + %t229 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 + %t230 = load { ptr, i64, i64 }, ptr %t229 + %t231 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 1 + store { ptr, i64, i64 } %t230, ptr %a232 + call void @finch_str_copy(ptr %a233, ptr %a232) + %t234 = load { ptr, i64, i64 }, ptr %a233 + %t235 = load { ptr, i64, i64 }, ptr %t231 + store { ptr, i64, i64 } %t234, ptr %t231 + store { ptr, i64, i64 } %t235, ptr %a236 + call void @finch_str_drop(ptr %a236) + %t237 = load ptr, ptr %a1 + %t238 = call i1 @finch.parser.at(ptr %t237, { ptr, i64, i64 } { ptr @.str.1055, i64 1, i64 0 }) + br label %logic.from1903 +logic.from1903: + br i1 %t238, label %logic.rhs1904, label %logic.end1905 +logic.rhs1904: + %t239 = load ptr, ptr %a1 + %t240 = icmp eq ptr %t239, null + br i1 %t240, label %panic1906, label %ok1907 +panic1906: + call void @finch_panic(ptr @.str.1056, i64 800, ptr @.str.1057) + unreachable +ok1907: + %t241 = getelementptr inbounds %S.parser.Parser, ptr %t239, i32 0, i32 0 + %t242 = load ptr, ptr %a1 + %t243 = icmp eq ptr %t242, null + br i1 %t243, label %panic1908, label %ok1909 +panic1908: + call void @finch_panic(ptr @.str.1058, i64 800, ptr @.str.1059) + unreachable +ok1909: + %t244 = getelementptr inbounds %S.parser.Parser, ptr %t242, i32 0, i32 1 + %t245 = load i64, ptr %t244 + %t246 = sub i64 %t245, 1 + %t247 = load { ptr, i64, i64 }, ptr %t241 + %t248 = extractvalue { ptr, i64, i64 } %t247, 1 + %t249 = icmp uge i64 %t246, %t248 + br i1 %t249, label %range1910, label %inrange1911 +range1910: + call void @finch_panic_index(ptr @.str.1060, i64 800, i64 %t246, i64 %t248) + unreachable +inrange1911: + %t250 = extractvalue { ptr, i64, i64 } %t247, 0 + %t251 = getelementptr inbounds %S.lexer.Token, ptr %t250, i64 %t246 + %t252 = getelementptr inbounds %S.lexer.Token, ptr %t251, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.1061, i64 5, i64 0 }, ptr %a255 + %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) + %t257 = icmp ne i32 %t256, 0 + br label %logic.rend1912 +logic.rend1912: + br label %logic.end1905 +logic.end1905: + %t258 = phi i1 [ false, %logic.from1903 ], [ %t257, %logic.rend1912 ] + br label %logic.from1913 +logic.from1913: + br i1 %t258, label %logic.rhs1914, label %logic.end1915 +logic.rhs1914: + %t259 = load ptr, ptr %a1 + %t260 = call i1 @finch.parser.genericCallAheadFrom(ptr %t259) + br label %logic.rend1916 +logic.rend1916: + br label %logic.end1915 +logic.end1915: + %t261 = phi i1 [ false, %logic.from1913 ], [ %t260, %logic.rend1916 ] + br i1 %t261, label %then1917, label %endif1919 +then1917: + %t262 = load ptr, ptr %a1 + %t263 = call %S.lexer.Token @finch.parser.next(ptr %t262) + store %S.lexer.Token %t263, ptr %a264 + call void @finch.drop.S_lexer_Token(ptr %a264) + %t265 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1062, i64 5, i64 0 }, 0 + %t266 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 + %t267 = load %S.ast.Type, ptr %t266 + store %S.ast.Type %t265, ptr %t266 + store %S.ast.Type %t267, ptr %a268 + call void @finch.drop.S_ast_Type(ptr %a268) + br label %while.cond1920 +while.cond1920: + br label %while.body1921 +while.body1921: + %t269 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 + %t270 = getelementptr inbounds %S.ast.Type, ptr %t269, i32 0, i32 1 + %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i32 0, i32 1 + %t272 = load ptr, ptr %a1 + %t273 = call %S.ast.Type @finch.parser.parseType(ptr %t272) + %t274 = load i64, ptr %t271 + %t275 = add i64 %t274, 1 + call void @finch_arr_reserve(ptr %t270, i64 %t275, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t276 = load ptr, ptr %t270 + %t277 = getelementptr inbounds %S.ast.Type, ptr %t276, i64 %t274 + store %S.ast.Type %t273, ptr %t277 + store i64 %t275, ptr %t271 + %t278 = load ptr, ptr %a1 + %t279 = call i1 @finch.parser.accept(ptr %t278, { ptr, i64, i64 } { ptr @.str.1063, i64 1, i64 0 }) + %t280 = xor i1 %t279, true + br i1 %t280, label %then1923, label %endif1925 +then1923: + br label %while.end1922 +endif1925: + br label %while.cond1920 +while.end1922: + %t281 = load ptr, ptr %a1 + %t282 = call %S.lexer.Token @finch.parser.expect(ptr %t281, { ptr, i64, i64 } { ptr @.str.1064, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1065, i64 28, i64 0 }) + store %S.lexer.Token %t282, ptr %a283 + call void @finch.drop.S_lexer_Token(ptr %a283) + %t284 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } { ptr @.str.1066, i64 4, i64 0 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + %t287 = load ptr, ptr %a1 + call void @finch.parser.parseArgs(ptr %t287, ptr %a7) + %t288 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t288 +endif1919: + %t289 = load ptr, ptr %a1 + %t290 = call i1 @finch.parser.at(ptr %t289, { ptr, i64, i64 } { ptr @.str.1067, i64 1, i64 0 }) + br label %logic.from1926 +logic.from1926: + br i1 %t290, label %logic.rhs1927, label %logic.end1928 +logic.rhs1927: + %t291 = load ptr, ptr %a1 + %t292 = call %S.lexer.Token @finch.parser.cur(ptr %t291) + %t293 = extractvalue %S.lexer.Token %t292, 4 + store %S.lexer.Token %t292, ptr %a294 + call void @finch.drop.S_lexer_Token(ptr %a294) + %t295 = xor i1 %t293, true + br label %logic.rend1929 +logic.rend1929: + br label %logic.end1928 +logic.end1928: + %t296 = phi i1 [ false, %logic.from1926 ], [ %t295, %logic.rend1929 ] + br i1 %t296, label %then1930, label %endif1932 +then1930: + %t297 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t298 = load { ptr, i64, i64 }, ptr %t297 + store { ptr, i64, i64 } { ptr @.str.1068, i64 4, i64 0 }, ptr %t297 + store { ptr, i64, i64 } %t298, ptr %a299 + call void @finch_str_drop(ptr %a299) + %t300 = load ptr, ptr %a1 + call void @finch.parser.parseArgs(ptr %t300, ptr %a7) + %t301 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t301 +endif1932: + %t302 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t303 = load { ptr, i64, i64 }, ptr %t302 + store { ptr, i64, i64 } { ptr @.str.1069, i64 3, i64 0 }, ptr %t302 + store { ptr, i64, i64 } %t303, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t305 +endif1902: + %t306 = load ptr, ptr %a1 + %t307 = load %S.lexer.Token, ptr %a4 + %t308 = load %S.lexer.Token, ptr %a4 + %t309 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t308) + store { ptr, i64, i64 } { ptr @.str.1070, i64 11, i64 0 }, ptr %a311 + store { ptr, i64, i64 } %t309, ptr %a312 + call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312) + store { ptr, i64, i64 } %t309, ptr %a313 + call void @finch_str_drop(ptr %a313) + %t314 = load { ptr, i64, i64 }, ptr %a310 + store { ptr, i64, i64 } %t314, ptr %a316 + store { ptr, i64, i64 } { ptr @.str.1071, i64 19, i64 0 }, ptr %a317 + call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) + store { ptr, i64, i64 } %t314, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a315 + call void @finch.parser.fail(ptr %t306, %S.lexer.Token %t307, { ptr, i64, i64 } %t319) + store { ptr, i64, i64 } %t319, ptr %a320 + call void @finch_str_drop(ptr %a320) + %t321 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t321 +} + +define internal void @finch.copy.arr_S_lexer_Token(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond1933 +n.cond1933: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body1934, label %n.end1935 +n.body1934: + %t8 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lexer.Token, ptr %t2, i64 %t6 + call void @finch.copy.S_lexer_Token(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond1933 +n.end1935: + ret void +} + +define internal void @finch.drop.S_parser_Parser(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.parser.Parser, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_lexer_Token(ptr %t1) + %t2 = getelementptr inbounds %S.parser.Parser, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.parser.Parser, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch.copy.arr_S_lexer_Token(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + %t8 = insertvalue %S.parser.Parser zeroinitializer, { ptr, i64, i64 } %t7, 0 + %t9 = insertvalue %S.parser.Parser %t8, i64 0, 1 + %t10 = insertvalue %S.parser.Parser %t9, i64 0, 2 + %t11 = load i64, ptr %a2 + %t12 = insertvalue %S.parser.Parser %t10, i64 %t11, 3 + %t13 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_copy(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.parser.Parser %t12, { ptr, i64, i64 } %t16, 4 + store %S.parser.Parser %t17, ptr %a18 + %t19 = call %S.ast.Program @finch.parser.parseProgram(ptr %a18) + call void @finch.drop.S_parser_Parser(ptr %a18) + ret %S.ast.Program %t19 +} + +define internal { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1073, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1074, i64 2, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.1076, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1077, i64 2, i64 0 }, ptr %a11 + call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a13 + call void @finch_str_drop(ptr %a13) + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1079, i64 1, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.1080, i64 1, i64 0 }, ptr %a17 + call void @finch_str_replace(ptr %a15, ptr %a14, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t18 +} + +define internal void @finch.gen.noteRef(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, i64 %p6, i64 %p7) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store { ptr, i64, i64 } %p5, ptr %a6 + store i64 %p6, ptr %a7 + store i64 %p7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic1936, label %ok1937 +panic1936: + call void @finch_panic(ptr @.str.1081, i64 232, ptr @.str.1082) + unreachable +ok1937: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 + %t12 = load i1, ptr %t11 + %t13 = xor i1 %t12, true + br i1 %t13, label %then1938, label %endif1940 +then1938: + ret void +endif1940: + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic1941, label %ok1942 +panic1941: + call void @finch_panic(ptr @.str.1083, i64 235, ptr @.str.1084) + unreachable +ok1942: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 29 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic1943, label %ok1944 +panic1943: + call void @finch_panic(ptr @.str.1086, i64 235, ptr @.str.1087) + unreachable +ok1944: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t22 = load i64, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %t20 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 %t22, %t24 + br i1 %t25, label %range1945, label %inrange1946 +range1945: + call void @finch_panic_index(ptr @.str.1088, i64 235, i64 %t22, i64 %t24) + unreachable +inrange1946: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 + %t28 = load { ptr, i64, i64 }, ptr %t27 + store { ptr, i64, i64 } { ptr @.str.1085, i64 3, i64 0 }, ptr %a30 + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.1089, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t39 = load i64, ptr %t38 + call void @finch_str_from_int(ptr %a40, i64 %t39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t37, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t37, ptr %a45 + call void @finch_str_drop(ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.1090, i64 1, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a54, i64 %t53) + %t55 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a57 + store { ptr, i64, i64 } %t55, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t52, ptr %a59 + call void @finch_str_drop(ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.1091, i64 1, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a68, i64 %t67) + %t69 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t66, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t69, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t75, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.1092, i64 1, i64 0 }, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t80, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t80, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t86, ptr %a88 + store { ptr, i64, i64 } { ptr @.str.1093, i64 1, i64 0 }, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t86, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + %t92 = load i64, ptr %a7 + call void @finch_str_from_int(ptr %a93, i64 %t92) + %t94 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a96 + store { ptr, i64, i64 } %t94, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t91, ptr %a98 + call void @finch_str_drop(ptr %a98) + store { ptr, i64, i64 } %t94, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.1094, i64 1, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + store { ptr, i64, i64 } %t100, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a101 + %t106 = load i64, ptr %a8 + call void @finch_str_from_int(ptr %a107, i64 %t106) + %t108 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t105, ptr %a110 + store { ptr, i64, i64 } %t108, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t105, ptr %a112 + call void @finch_str_drop(ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.1095, i64 1, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load { ptr, i64, i64 }, ptr %a5 + %t121 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t120) + store { ptr, i64, i64 } %t119, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t119, ptr %a125 + call void @finch_str_drop(ptr %a125) + store { ptr, i64, i64 } %t121, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a122 + %t128 = load i64, ptr %t17 + %t129 = add i64 %t128, 1 + call void @finch_arr_reserve(ptr %t16, i64 %t129, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t130 = load ptr, ptr %t16 + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i64 %t128 + store { ptr, i64, i64 } %t127, ptr %t131 + store i64 %t129, ptr %t17 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %p0) { +entry: + %a1 = alloca %S.gen.FnSig, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca i64, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + store %S.gen.FnSig %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 + %t5 = load i64, ptr %t4 + store i64 0, ptr %a6 + br label %for.cond1947 +for.cond1947: + %t7 = load i64, ptr %a6 + %t8 = icmp slt i64 %t7, %t5 + br i1 %t8, label %for.body1948, label %for.end1950 +for.body1948: + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 + %t11 = load i64, ptr %a6 + %t12 = load { ptr, i64, i64 }, ptr %t10 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range1951, label %inrange1952 +range1951: + call void @finch_panic_index(ptr @.str.1096, i64 242, i64 %t11, i64 %t13) + unreachable +inrange1952: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t11 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t17) + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1097, i64 1, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 14 + %t25 = load i64, ptr %a6 + %t26 = load { ptr, i64, i64 }, ptr %t24 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 %t25, %t27 + br i1 %t28, label %range1953, label %inrange1954 +range1953: + call void @finch_panic_index(ptr @.str.1098, i64 242, i64 %t25, i64 %t27) + unreachable +inrange1954: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t25 + %t31 = load { ptr, i64, i64 }, ptr %t30 + store { ptr, i64, i64 } %t23, ptr %a33 + store { ptr, i64, i64 } %t31, ptr %a34 + call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) + store { ptr, i64, i64 } %t23, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a32 + %t37 = load i64, ptr %t9 + %t38 = add i64 %t37, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t38, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t39 = load ptr, ptr %a2 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t37 + store { ptr, i64, i64 } %t36, ptr %t40 + store i64 %t38, ptr %t9 + br label %for.step1949 +for.step1949: + %t41 = load i64, ptr %a6 + %t42 = add i64 %t41, 1 + store i64 %t42, ptr %a6 + br label %for.cond1947 +for.end1950: + %t43 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_copy(ptr %a46, ptr %a45) + %t47 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t47, ptr %a48 + %t49 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 + %t51 = load i64, ptr %t50 + %t52 = icmp sgt i64 %t51, 0 + br i1 %t52, label %then1955, label %endif1957 +then1955: + %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.1099, i64 1, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a55 + %t59 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t58, ptr %a62 + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t58, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t65, ptr %a48 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + br label %endif1957 +endif1957: + %t68 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.1100, i64 3, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1101, i64 1, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1102, i64 2, i64 0 }, ptr %a79 + call void @finch_str_join(ptr %a80, ptr %a2, ptr %a79) + %t81 = load { ptr, i64, i64 }, ptr %a80 + store { ptr, i64, i64 } %t77, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t77, ptr %a85 + call void @finch_str_drop(ptr %a85) + store { ptr, i64, i64 } %t81, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t87, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.1103, i64 1, i64 0 }, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t87, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t92, ptr %a93 + %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 9 + %t95 = load i1, ptr %t94 + br i1 %t95, label %then1958, label %else1959 +then1958: + %t96 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t97 = getelementptr inbounds %S.ast.Type, ptr %t96, i32 0, i32 0 + %t98 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t98, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.1104, i64 4, i64 0 }, ptr %a100 + %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) + %t102 = icmp ne i32 %t101, 0 + br i1 %t102, label %then1961, label %else1962 +then1961: + %t103 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.1105, i64 5, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a104 + %t108 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t107, ptr %a93 + store { ptr, i64, i64 } %t108, ptr %a109 + call void @finch_str_drop(ptr %a109) + br label %endif1963 +else1962: + %t110 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t110, ptr %a112 + store { ptr, i64, i64 } { ptr @.str.1106, i64 4, i64 0 }, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a111 + %t115 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t116 = load %S.ast.Type, ptr %t115 + %t117 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t116) + store { ptr, i64, i64 } %t114, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t114, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t117, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.1107, i64 1, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t128, ptr %a93 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + br label %endif1963 +endif1963: + br label %endif1960 +else1959: + %t131 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.1108, i64 4, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp eq i32 %t136, 0 + br i1 %t137, label %then1964, label %endif1966 +then1964: + %t138 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t138, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.1109, i64 4, i64 0 }, ptr %a141 + call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a139 + %t143 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t144 = load %S.ast.Type, ptr %t143 + %t145 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t144) + store { ptr, i64, i64 } %t142, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + store { ptr, i64, i64 } %t142, ptr %a149 + call void @finch_str_drop(ptr %a149) + store { ptr, i64, i64 } %t145, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a146 + %t152 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t151, ptr %a93 + store { ptr, i64, i64 } %t152, ptr %a153 + call void @finch_str_drop(ptr %a153) + br label %endif1966 +endif1966: + br label %endif1960 +endif1960: + %t154 = load { ptr, i64, i64 }, ptr %a93 + call void @finch_str_drop(ptr %a48) + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t154 +} + +define internal void @finch.gen.noteCall(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.FnSig, align 16 + %a11 = alloca i64, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca %S.ast.Node, align 16 + %a41 = alloca %S.ast.Node, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.FnSig %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic1967, label %ok1968 +panic1967: + call void @finch_panic(ptr @.str.1110, i64 263, ptr @.str.1111) + unreachable +ok1968: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + %t8 = xor i1 %t7, true + br i1 %t8, label %then1969, label %endif1971 +then1969: + ret void +endif1971: + %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t10 = load i64, ptr %t9 + store i64 %t10, ptr %a11 + %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1112, i64 6, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br i1 %t17, label %then1972, label %endif1974 +then1972: + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t19 = load i64, ptr %t18 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a11 + br label %endif1974 +endif1974: + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic1975, label %ok1976 +panic1975: + call void @finch_panic(ptr @.str.1113, i64 270, ptr @.str.1114) + unreachable +ok1976: + %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 0 + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 16 + %t25 = load i64, ptr %t24 + %t26 = load { ptr, i64, i64 }, ptr %t23 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 %t25, %t27 + br i1 %t28, label %range1977, label %inrange1978 +range1977: + call void @finch_panic_index(ptr @.str.1115, i64 270, i64 %t25, i64 %t27) + unreachable +inrange1978: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i64 %t25 + %t31 = getelementptr inbounds %S.ast.Program, ptr %t30, i32 0, i32 8 + %t32 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 17 + %t33 = load i64, ptr %t32 + %t34 = load { ptr, i64, i64 }, ptr %t31 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 %t33, %t35 + br i1 %t36, label %range1979, label %inrange1980 +range1979: + call void @finch_panic_index(ptr @.str.1116, i64 270, i64 %t33, i64 %t35) + unreachable +inrange1980: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 + %t39 = load %S.ast.Node, ptr %t38 + store %S.ast.Node %t39, ptr %a40 + call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) + %t42 = load %S.ast.Node, ptr %a41 + store %S.ast.Node %t42, ptr %a43 + %t44 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch_str_copy(ptr %a47, ptr %a46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t48, ptr %a49 + %t50 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 7 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = icmp sgt i64 %t52, 0 + br label %logic.from1981 +logic.from1981: + br i1 %t53, label %logic.rhs1982, label %logic.end1983 +logic.rhs1982: + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 2 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = icmp eq i64 %t56, 0 + br label %logic.rend1984 +logic.rend1984: + br label %logic.end1983 +logic.end1983: + %t58 = phi i1 [ false, %logic.from1981 ], [ %t57, %logic.rend1984 ] + br i1 %t58, label %then1985, label %endif1987 +then1985: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + call void @finch_str_copy(ptr %a62, ptr %a61) + %t63 = load { ptr, i64, i64 }, ptr %a62 + %t64 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t63, ptr %a49 + store { ptr, i64, i64 } %t64, ptr %a65 + call void @finch_str_drop(ptr %a65) + br label %endif1987 +endif1987: + %t66 = load ptr, ptr %a1 + %t67 = load %S.ast.Node, ptr %a2 + %t68 = load i64, ptr %a11 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a49, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = load %S.gen.FnSig, ptr %a3 + %t72 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t71) + store { ptr, i64, i64 } { ptr @.str.1117, i64 9, i64 0 }, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.1118, i64 4, i64 0 }, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load ptr, ptr %a1 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic1988, label %ok1989 +panic1988: + call void @finch_panic(ptr @.str.1119, i64 275, ptr @.str.1120) + unreachable +ok1989: + %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 1 + %t86 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 13 + %t87 = load i64, ptr %t86 + %t88 = load { ptr, i64, i64 }, ptr %t85 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 %t87, %t89 + br i1 %t90, label %range1990, label %inrange1991 +range1990: + call void @finch_panic_index(ptr @.str.1121, i64 275, i64 %t87, i64 %t89) + unreachable +inrange1991: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t87 + %t93 = load { ptr, i64, i64 }, ptr %t92 + %t94 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 11 + %t95 = load i64, ptr %t94 + %t96 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 12 + %t97 = load i64, ptr %t96 + %t98 = add i64 %t97, 3 + call void @finch.gen.noteRef(ptr %t66, %S.ast.Node %t67, i64 %t68, i64 %t70, { ptr, i64, i64 } %t82, { ptr, i64, i64 } %t93, i64 %t95, i64 %t98) + store { ptr, i64, i64 } %t82, ptr %a99 + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a49) + call void @finch.drop.S_ast_Node(ptr %a43) + ret void +} + +define internal void @finch.copy.arr_bool(ptr %dst, ptr %src) { +entry: + + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + ret void +} + +define internal void @finch.copy.S_gen_FnSig(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.FnSig, ptr %src + store %S.gen.FnSig %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 6 + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 7 + %t13 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 7 + call void @finch.copy.arr_S_ast_Type(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 8 + %t15 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 8 + call void @finch_str_copy(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 11 + %t17 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 11 + call void @finch_str_copy(ptr %t16, ptr %t17) + %t18 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 12 + %t19 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 12 + call void @finch.copy.S_ast_Type(ptr %t18, ptr %t19) + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 13 + %t21 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 13 + call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 14 + %t23 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 14 + call void @finch.copy.arr_str(ptr %t22, ptr %t23) + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 15 + %t25 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 15 + call void @finch.copy.arr_bool(ptr %t24, ptr %t25) + ret void +} + +define internal void @finch.drop.arr_bool(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_FnSig(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t5) + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_S_ast_Type(ptr %t6) + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 8 + call void @finch_str_drop(ptr %t7) + %t8 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 11 + call void @finch_str_drop(ptr %t8) + %t9 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 12 + call void @finch.drop.S_ast_Type(ptr %t9) + %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 13 + call void @finch.drop.arr_S_ast_Type(ptr %t10) + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 14 + call void @finch.drop.arr_str(ptr %t11) + %t12 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 15 + call void @finch.drop.arr_bool(ptr %t12) + ret void +} + +define internal void @finch.copy.S_gen_Template(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Template, ptr %src + store %S.gen.Template %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.drop.S_gen_Template(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + ret void +} + +define internal void @finch.copy.arr_int(ptr %dst, ptr %src) { +entry: + + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + ret void +} + +define internal void @finch.copy.S_gen_StructDef(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.StructDef, ptr %src + store %S.gen.StructDef %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 3 + %t7 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_int(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 4 + %t9 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_int(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 5 + %t11 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 5 + call void @finch_str_copy(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 6 + %t13 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 7 + %t15 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 7 + call void @finch.copy.arr_S_ast_Type(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 8 + %t17 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 8 + call void @finch_str_copy(ptr %t16, ptr %t17) + %t18 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 11 + %t19 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 11 + call void @finch.copy.arr_str(ptr %t18, ptr %t19) + %t20 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 12 + %t21 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 12 + call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) + ret void +} + +define internal void @finch.drop.arr_int(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_StructDef(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_int(ptr %t3) + %t4 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_int(ptr %t4) + %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 5 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_S_ast_Type(ptr %t7) + %t8 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 8 + call void @finch_str_drop(ptr %t8) + %t9 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 11 + call void @finch.drop.arr_str(ptr %t9) + %t10 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 12 + call void @finch.drop.arr_S_ast_Type(ptr %t10) + ret void +} + +define internal void @finch.gen.indexAll(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca i64, align 16 + %a38 = alloca %S.gen.FnSig, align 16 + %a39 = alloca %S.gen.FnSig, align 16 + %a41 = alloca %S.gen.FnSig, align 16 + %a61 = alloca %S.ast.Node, align 16 + %a62 = alloca %S.ast.Node, align 16 + %a64 = alloca %S.ast.Node, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca i64, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca i64, align 16 + %a257 = alloca %S.gen.Template, align 16 + %a258 = alloca %S.gen.Template, align 16 + %a260 = alloca %S.gen.Template, align 16 + %a282 = alloca %S.ast.Node, align 16 + %a283 = alloca %S.ast.Node, align 16 + %a285 = alloca %S.ast.Node, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca i64, align 16 + %a448 = alloca %S.gen.StructDef, align 16 + %a449 = alloca %S.gen.StructDef, align 16 + %a451 = alloca %S.gen.StructDef, align 16 + %a478 = alloca %S.ast.Node, align 16 + %a479 = alloca %S.ast.Node, align 16 + %a481 = alloca %S.ast.Node, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a543 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca i64, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca i64, align 16 + %a651 = alloca i64, align 16 + %a659 = alloca %S.ast.Node, align 16 + %a660 = alloca %S.ast.Node, align 16 + %a662 = alloca %S.ast.Node, align 16 + %a663 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca i64, align 16 + %a674 = alloca %S.ast.Node, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a712 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a743 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a746 = alloca { ptr, i64, i64 }, align 16 + %a747 = alloca { ptr, i64, i64 }, align 16 + %a748 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a763 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a778 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond1992 +each.cond1992: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body1993, label %each.end1995 +each.body1993: + %t8 = load ptr, ptr %a2 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t6 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic1996, label %ok1997 +panic1996: + call void @finch_panic(ptr @.str.1122, i64 281, ptr @.str.1123) + unreachable +ok1997: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 29 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1124, i64 3, i64 0 }, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a17 + %t21 = load i64, ptr %t15 + %t22 = add i64 %t21, 1 + call void @finch_arr_reserve(ptr %t14, i64 %t22, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t23 = load ptr, ptr %t14 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i64 %t21 + store { ptr, i64, i64 } %t20, ptr %t24 + store i64 %t22, ptr %t15 + br label %each.step1994 +each.step1994: + %t25 = load i64, ptr %a3 + %t26 = add i64 %t25, 1 + store i64 %t26, ptr %a3 + br label %each.cond1992 +each.end1995: + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic1998, label %ok1999 +panic1998: + call void @finch_panic(ptr @.str.1125, i64 283, ptr @.str.1126) + unreachable +ok1999: + %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 15 + store i64 0, ptr %a30 + br label %each.cond2000 +each.cond2000: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = load i64, ptr %a30 + %t34 = icmp slt i64 %t33, %t32 + br i1 %t34, label %each.body2001, label %each.end2003 +each.body2001: + %t35 = load ptr, ptr %t29 + %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t33 + %t37 = load %S.gen.FnSig, ptr %t36 + store %S.gen.FnSig %t37, ptr %a38 + call void @finch.copy.S_gen_FnSig(ptr %a39, ptr %a38) + %t40 = load %S.gen.FnSig, ptr %a39 + store %S.gen.FnSig %t40, ptr %a41 + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic2004, label %ok2005 +panic2004: + call void @finch_panic(ptr @.str.1127, i64 284, ptr @.str.1128) + unreachable +ok2005: + %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 0 + %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 16 + %t46 = load i64, ptr %t45 + %t47 = load { ptr, i64, i64 }, ptr %t44 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = icmp uge i64 %t46, %t48 + br i1 %t49, label %range2006, label %inrange2007 +range2006: + call void @finch_panic_index(ptr @.str.1129, i64 284, i64 %t46, i64 %t48) + unreachable +inrange2007: + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = getelementptr inbounds %S.ast.Program, ptr %t50, i64 %t46 + %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i32 0, i32 8 + %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 17 + %t54 = load i64, ptr %t53 + %t55 = load { ptr, i64, i64 }, ptr %t52 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range2008, label %inrange2009 +range2008: + call void @finch_panic_index(ptr @.str.1130, i64 284, i64 %t54, i64 %t56) + unreachable +inrange2009: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 + %t60 = load %S.ast.Node, ptr %t59 + store %S.ast.Node %t60, ptr %a61 + call void @finch.copy.S_ast_Node(ptr %a62, ptr %a61) + %t63 = load %S.ast.Node, ptr %a62 + store %S.ast.Node %t63, ptr %a64 + %t65 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 7 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 + %t67 = load i64, ptr %t66 + %t68 = icmp sgt i64 %t67, 0 + br i1 %t68, label %then2010, label %endif2012 +then2010: + call void @finch.drop.S_ast_Node(ptr %a64) + call void @finch.drop.S_gen_FnSig(ptr %a41) + br label %each.step2002 +endif2012: + store { ptr, i64, i64 } zeroinitializer, ptr %a69 + %t70 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 + %t72 = load i64, ptr %t71 + store i64 0, ptr %a73 + br label %for.cond2013 +for.cond2013: + %t74 = load i64, ptr %a73 + %t75 = icmp slt i64 %t74, %t72 + br i1 %t75, label %for.body2014, label %for.end2016 +for.body2014: + %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 + %t77 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 + %t78 = load i64, ptr %a73 + %t79 = load { ptr, i64, i64 }, ptr %t77 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range2017, label %inrange2018 +range2017: + call void @finch_panic_index(ptr @.str.1131, i64 290, i64 %t78, i64 %t80) + unreachable +inrange2018: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds %S.ast.Type, ptr %t82, i64 %t78 + %t84 = load %S.ast.Type, ptr %t83 + %t85 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t84) + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1132, i64 1, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 14 + %t92 = load i64, ptr %a73 + %t93 = load { ptr, i64, i64 }, ptr %t91 + %t94 = extractvalue { ptr, i64, i64 } %t93, 1 + %t95 = icmp uge i64 %t92, %t94 + br i1 %t95, label %range2019, label %inrange2020 +range2019: + call void @finch_panic_index(ptr @.str.1133, i64 290, i64 %t92, i64 %t94) + unreachable +inrange2020: + %t96 = extractvalue { ptr, i64, i64 } %t93, 0 + %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 %t92 + %t98 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t90, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t90, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + %t104 = load i64, ptr %t76 + %t105 = add i64 %t104, 1 + call void @finch_arr_reserve(ptr %a69, i64 %t105, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t106 = load ptr, ptr %a69 + %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 %t104 + store { ptr, i64, i64 } %t103, ptr %t107 + store i64 %t105, ptr %t76 + br label %for.step2015 +for.step2015: + %t108 = load i64, ptr %a73 + %t109 = add i64 %t108, 1 + store i64 %t109, ptr %a73 + br label %for.cond2013 +for.end2016: + %t110 = load ptr, ptr %a1 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic2021, label %ok2022 +panic2021: + call void @finch_panic(ptr @.str.1134, i64 292, ptr @.str.1135) + unreachable +ok2022: + %t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 29 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 + %t114 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 0 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } { ptr @.str.1136, i64 3, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.1137, i64 1, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 1 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t124, ptr %a128 + store { ptr, i64, i64 } %t126, ptr %a129 + call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) + store { ptr, i64, i64 } %t124, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t131, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.1138, i64 1, i64 0 }, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + %t137 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 2 + %t138 = load { ptr, i64, i64 }, ptr %t137 + store { ptr, i64, i64 } %t136, ptr %a140 + store { ptr, i64, i64 } %t138, ptr %a141 + call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) + store { ptr, i64, i64 } %t136, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a139 + store { ptr, i64, i64 } %t143, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.1139, i64 1, i64 0 }, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + store { ptr, i64, i64 } %t143, ptr %a147 + call void @finch_str_drop(ptr %a147) + %t148 = load { ptr, i64, i64 }, ptr %a144 + %t149 = load ptr, ptr %a1 + %t150 = icmp eq ptr %t149, null + br i1 %t150, label %panic2023, label %ok2024 +panic2023: + call void @finch_panic(ptr @.str.1140, i64 292, ptr @.str.1141) + unreachable +ok2024: + %t151 = getelementptr inbounds %S.gen.Gen, ptr %t149, i32 0, i32 1 + %t152 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 13 + %t153 = load i64, ptr %t152 + %t154 = load { ptr, i64, i64 }, ptr %t151 + %t155 = extractvalue { ptr, i64, i64 } %t154, 1 + %t156 = icmp uge i64 %t153, %t155 + br i1 %t156, label %range2025, label %inrange2026 +range2025: + call void @finch_panic_index(ptr @.str.1142, i64 292, i64 %t153, i64 %t155) + unreachable +inrange2026: + %t157 = extractvalue { ptr, i64, i64 } %t154, 0 + %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t157, i64 %t153 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t148, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + store { ptr, i64, i64 } %t148, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t164, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.1143, i64 1, i64 0 }, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t164, ptr %a168 + call void @finch_str_drop(ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a165 + %t170 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 11 + %t171 = load i64, ptr %t170 + call void @finch_str_from_int(ptr %a172, i64 %t171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + store { ptr, i64, i64 } %t169, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t169, ptr %a177 + call void @finch_str_drop(ptr %a177) + store { ptr, i64, i64 } %t173, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.1144, i64 1, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + store { ptr, i64, i64 } %t179, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a180 + %t185 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 12 + %t186 = load i64, ptr %t185 + call void @finch_str_from_int(ptr %a187, i64 %t186) + %t188 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t184, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t184, ptr %a192 + call void @finch_str_drop(ptr %a192) + store { ptr, i64, i64 } %t188, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = load { ptr, i64, i64 }, ptr %a189 + store { ptr, i64, i64 } %t194, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.1145, i64 1, i64 0 }, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t194, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + %t200 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 14 + %t201 = load i64, ptr %t200 + call void @finch_str_from_int(ptr %a202, i64 %t201) + %t203 = load { ptr, i64, i64 }, ptr %a202 + store { ptr, i64, i64 } %t199, ptr %a205 + store { ptr, i64, i64 } %t203, ptr %a206 + call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) + store { ptr, i64, i64 } %t199, ptr %a207 + call void @finch_str_drop(ptr %a207) + store { ptr, i64, i64 } %t203, ptr %a208 + call void @finch_str_drop(ptr %a208) + %t209 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t209, ptr %a211 + store { ptr, i64, i64 } { ptr @.str.1146, i64 1, i64 0 }, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t209, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + %t215 = load %S.gen.FnSig, ptr %a41 + %t216 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t215) + %t217 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t216) + store { ptr, i64, i64 } %t216, ptr %a218 + call void @finch_str_drop(ptr %a218) + store { ptr, i64, i64 } %t214, ptr %a220 + store { ptr, i64, i64 } %t217, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t214, ptr %a222 + call void @finch_str_drop(ptr %a222) + store { ptr, i64, i64 } %t217, ptr %a223 + call void @finch_str_drop(ptr %a223) + %t224 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t224, ptr %a226 + store { ptr, i64, i64 } { ptr @.str.1147, i64 1, i64 0 }, ptr %a227 + call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) + store { ptr, i64, i64 } %t224, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = load { ptr, i64, i64 }, ptr %a225 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1148, i64 1, i64 0 }, ptr %a231 + call void @finch_str_join(ptr %a232, ptr %a69, ptr %a231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t229, ptr %a235 + store { ptr, i64, i64 } %t233, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t229, ptr %a237 + call void @finch_str_drop(ptr %a237) + store { ptr, i64, i64 } %t233, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a234 + %t240 = load i64, ptr %t113 + %t241 = add i64 %t240, 1 + call void @finch_arr_reserve(ptr %t112, i64 %t241, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t242 = load ptr, ptr %t112 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 %t240 + store { ptr, i64, i64 } %t239, ptr %t243 + store i64 %t241, ptr %t113 + call void @finch.drop.arr_str(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a64) + call void @finch.drop.S_gen_FnSig(ptr %a41) + br label %each.step2002 +each.step2002: + %t244 = load i64, ptr %a30 + %t245 = add i64 %t244, 1 + store i64 %t245, ptr %a30 + br label %each.cond2000 +each.end2003: + %t246 = load ptr, ptr %a1 + %t247 = icmp eq ptr %t246, null + br i1 %t247, label %panic2027, label %ok2028 +panic2027: + call void @finch_panic(ptr @.str.1149, i64 294, ptr @.str.1150) + unreachable +ok2028: + %t248 = getelementptr inbounds %S.gen.Gen, ptr %t246, i32 0, i32 17 + store i64 0, ptr %a249 + br label %each.cond2029 +each.cond2029: + %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 + %t251 = load i64, ptr %t250 + %t252 = load i64, ptr %a249 + %t253 = icmp slt i64 %t252, %t251 + br i1 %t253, label %each.body2030, label %each.end2032 +each.body2030: + %t254 = load ptr, ptr %t248 + %t255 = getelementptr inbounds %S.gen.Template, ptr %t254, i64 %t252 + %t256 = load %S.gen.Template, ptr %t255 + store %S.gen.Template %t256, ptr %a257 + call void @finch.copy.S_gen_Template(ptr %a258, ptr %a257) + %t259 = load %S.gen.Template, ptr %a258 + store %S.gen.Template %t259, ptr %a260 + %t261 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 6 + %t262 = load i1, ptr %t261 + br i1 %t262, label %then2033, label %endif2035 +then2033: + call void @finch.drop.S_gen_Template(ptr %a260) + br label %each.step2031 +endif2035: + %t263 = load ptr, ptr %a1 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic2036, label %ok2037 +panic2036: + call void @finch_panic(ptr @.str.1151, i64 298, ptr @.str.1152) + unreachable +ok2037: + %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 0 + %t266 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 4 + %t267 = load i64, ptr %t266 + %t268 = load { ptr, i64, i64 }, ptr %t265 + %t269 = extractvalue { ptr, i64, i64 } %t268, 1 + %t270 = icmp uge i64 %t267, %t269 + br i1 %t270, label %range2038, label %inrange2039 +range2038: + call void @finch_panic_index(ptr @.str.1153, i64 298, i64 %t267, i64 %t269) + unreachable +inrange2039: + %t271 = extractvalue { ptr, i64, i64 } %t268, 0 + %t272 = getelementptr inbounds %S.ast.Program, ptr %t271, i64 %t267 + %t273 = getelementptr inbounds %S.ast.Program, ptr %t272, i32 0, i32 8 + %t274 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 5 + %t275 = load i64, ptr %t274 + %t276 = load { ptr, i64, i64 }, ptr %t273 + %t277 = extractvalue { ptr, i64, i64 } %t276, 1 + %t278 = icmp uge i64 %t275, %t277 + br i1 %t278, label %range2040, label %inrange2041 +range2040: + call void @finch_panic_index(ptr @.str.1154, i64 298, i64 %t275, i64 %t277) + unreachable +inrange2041: + %t279 = extractvalue { ptr, i64, i64 } %t276, 0 + %t280 = getelementptr inbounds %S.ast.Node, ptr %t279, i64 %t275 + %t281 = load %S.ast.Node, ptr %t280 + store %S.ast.Node %t281, ptr %a282 + call void @finch.copy.S_ast_Node(ptr %a283, ptr %a282) + %t284 = load %S.ast.Node, ptr %a283 + store %S.ast.Node %t284, ptr %a285 + %t286 = load ptr, ptr %a1 + %t287 = icmp eq ptr %t286, null + br i1 %t287, label %panic2042, label %ok2043 +panic2042: + call void @finch_panic(ptr @.str.1155, i64 299, ptr @.str.1156) + unreachable +ok2043: + %t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 29 + %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i32 0, i32 1 + %t290 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 0 + %t291 = load { ptr, i64, i64 }, ptr %t290 + store { ptr, i64, i64 } { ptr @.str.1157, i64 3, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t295, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.1158, i64 1, i64 0 }, ptr %a298 + call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) + store { ptr, i64, i64 } %t295, ptr %a299 + call void @finch_str_drop(ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a296 + %t301 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 1 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store { ptr, i64, i64 } %t300, ptr %a304 + store { ptr, i64, i64 } %t302, ptr %a305 + call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) + store { ptr, i64, i64 } %t300, ptr %a306 + call void @finch_str_drop(ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a303 + store { ptr, i64, i64 } %t307, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.1159, i64 1, i64 0 }, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t307, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = load { ptr, i64, i64 }, ptr %a308 + %t313 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 2 + %t314 = load { ptr, i64, i64 }, ptr %t313 + store { ptr, i64, i64 } %t312, ptr %a316 + store { ptr, i64, i64 } %t314, ptr %a317 + call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) + store { ptr, i64, i64 } %t312, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a315 + store { ptr, i64, i64 } %t319, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.1160, i64 1, i64 0 }, ptr %a322 + call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) + store { ptr, i64, i64 } %t319, ptr %a323 + call void @finch_str_drop(ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a320 + %t325 = load ptr, ptr %a1 + %t326 = icmp eq ptr %t325, null + br i1 %t326, label %panic2044, label %ok2045 +panic2044: + call void @finch_panic(ptr @.str.1161, i64 299, ptr @.str.1162) + unreachable +ok2045: + %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 1 + %t328 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 13 + %t329 = load i64, ptr %t328 + %t330 = load { ptr, i64, i64 }, ptr %t327 + %t331 = extractvalue { ptr, i64, i64 } %t330, 1 + %t332 = icmp uge i64 %t329, %t331 + br i1 %t332, label %range2046, label %inrange2047 +range2046: + call void @finch_panic_index(ptr @.str.1163, i64 299, i64 %t329, i64 %t331) + unreachable +inrange2047: + %t333 = extractvalue { ptr, i64, i64 } %t330, 0 + %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i64 %t329 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t324, ptr %a337 + store { ptr, i64, i64 } %t335, ptr %a338 + call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) + store { ptr, i64, i64 } %t324, ptr %a339 + call void @finch_str_drop(ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t340, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.1164, i64 1, i64 0 }, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t340, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load { ptr, i64, i64 }, ptr %a341 + %t346 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 11 + %t347 = load i64, ptr %t346 + call void @finch_str_from_int(ptr %a348, i64 %t347) + %t349 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t345, ptr %a351 + store { ptr, i64, i64 } %t349, ptr %a352 + call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) + store { ptr, i64, i64 } %t345, ptr %a353 + call void @finch_str_drop(ptr %a353) + store { ptr, i64, i64 } %t349, ptr %a354 + call void @finch_str_drop(ptr %a354) + %t355 = load { ptr, i64, i64 }, ptr %a350 + store { ptr, i64, i64 } %t355, ptr %a357 + store { ptr, i64, i64 } { ptr @.str.1165, i64 1, i64 0 }, ptr %a358 + call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358) + store { ptr, i64, i64 } %t355, ptr %a359 + call void @finch_str_drop(ptr %a359) + %t360 = load { ptr, i64, i64 }, ptr %a356 + %t361 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 12 + %t362 = load i64, ptr %t361 + call void @finch_str_from_int(ptr %a363, i64 %t362) + %t364 = load { ptr, i64, i64 }, ptr %a363 + store { ptr, i64, i64 } %t360, ptr %a366 + store { ptr, i64, i64 } %t364, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t360, ptr %a368 + call void @finch_str_drop(ptr %a368) + store { ptr, i64, i64 } %t364, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = load { ptr, i64, i64 }, ptr %a365 + store { ptr, i64, i64 } %t370, ptr %a372 + store { ptr, i64, i64 } { ptr @.str.1166, i64 1, i64 0 }, ptr %a373 + call void @finch_str_concat(ptr %a371, ptr %a372, ptr %a373) + store { ptr, i64, i64 } %t370, ptr %a374 + call void @finch_str_drop(ptr %a374) + %t375 = load { ptr, i64, i64 }, ptr %a371 + %t376 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 14 + %t377 = load i64, ptr %t376 + call void @finch_str_from_int(ptr %a378, i64 %t377) + %t379 = load { ptr, i64, i64 }, ptr %a378 + store { ptr, i64, i64 } %t375, ptr %a381 + store { ptr, i64, i64 } %t379, ptr %a382 + call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) + store { ptr, i64, i64 } %t375, ptr %a383 + call void @finch_str_drop(ptr %a383) + store { ptr, i64, i64 } %t379, ptr %a384 + call void @finch_str_drop(ptr %a384) + %t385 = load { ptr, i64, i64 }, ptr %a380 + store { ptr, i64, i64 } %t385, ptr %a387 + store { ptr, i64, i64 } { ptr @.str.1167, i64 1, i64 0 }, ptr %a388 + call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) + store { ptr, i64, i64 } %t385, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a386 + %t391 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 1 + %t392 = load { ptr, i64, i64 }, ptr %t391 + store { ptr, i64, i64 } { ptr @.str.1168, i64 3, i64 0 }, ptr %a394 + store { ptr, i64, i64 } %t392, ptr %a395 + call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) + %t396 = load { ptr, i64, i64 }, ptr %a393 + store { ptr, i64, i64 } %t396, ptr %a398 + store { ptr, i64, i64 } { ptr @.str.1169, i64 1, i64 0 }, ptr %a399 + call void @finch_str_concat(ptr %a397, ptr %a398, ptr %a399) + store { ptr, i64, i64 } %t396, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = load { ptr, i64, i64 }, ptr %a397 + %t402 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 3 + %t403 = getelementptr inbounds { ptr, i64, i64 }, ptr %t402, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1170, i64 2, i64 0 }, ptr %a404 + call void @finch_str_join(ptr %a405, ptr %t402, ptr %a404) + %t406 = load { ptr, i64, i64 }, ptr %a405 + store { ptr, i64, i64 } %t401, ptr %a408 + store { ptr, i64, i64 } %t406, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + store { ptr, i64, i64 } %t401, ptr %a410 + call void @finch_str_drop(ptr %a410) + store { ptr, i64, i64 } %t406, ptr %a411 + call void @finch_str_drop(ptr %a411) + %t412 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t412, ptr %a414 + store { ptr, i64, i64 } { ptr @.str.1171, i64 6, i64 0 }, ptr %a415 + call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) + store { ptr, i64, i64 } %t412, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a413 + %t418 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t417) + store { ptr, i64, i64 } %t417, ptr %a419 + call void @finch_str_drop(ptr %a419) + store { ptr, i64, i64 } %t390, ptr %a421 + store { ptr, i64, i64 } %t418, ptr %a422 + call void @finch_str_concat(ptr %a420, ptr %a421, ptr %a422) + store { ptr, i64, i64 } %t390, ptr %a423 + call void @finch_str_drop(ptr %a423) + store { ptr, i64, i64 } %t418, ptr %a424 + call void @finch_str_drop(ptr %a424) + %t425 = load { ptr, i64, i64 }, ptr %a420 + store { ptr, i64, i64 } %t425, ptr %a427 + store { ptr, i64, i64 } { ptr @.str.1172, i64 1, i64 0 }, ptr %a428 + call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) + store { ptr, i64, i64 } %t425, ptr %a429 + call void @finch_str_drop(ptr %a429) + %t430 = load { ptr, i64, i64 }, ptr %a426 + %t431 = load i64, ptr %t289 + %t432 = add i64 %t431, 1 + call void @finch_arr_reserve(ptr %t288, i64 %t432, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t433 = load ptr, ptr %t288 + %t434 = getelementptr inbounds { ptr, i64, i64 }, ptr %t433, i64 %t431 + store { ptr, i64, i64 } %t430, ptr %t434 + store i64 %t432, ptr %t289 + call void @finch.drop.S_ast_Node(ptr %a285) + call void @finch.drop.S_gen_Template(ptr %a260) + br label %each.step2031 +each.step2031: + %t435 = load i64, ptr %a249 + %t436 = add i64 %t435, 1 + store i64 %t436, ptr %a249 + br label %each.cond2029 +each.end2032: + %t437 = load ptr, ptr %a1 + %t438 = icmp eq ptr %t437, null + br i1 %t438, label %panic2048, label %ok2049 +panic2048: + call void @finch_panic(ptr @.str.1173, i64 301, ptr @.str.1174) + unreachable +ok2049: + %t439 = getelementptr inbounds %S.gen.Gen, ptr %t437, i32 0, i32 16 + store i64 0, ptr %a440 + br label %each.cond2050 +each.cond2050: + %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 + %t442 = load i64, ptr %t441 + %t443 = load i64, ptr %a440 + %t444 = icmp slt i64 %t443, %t442 + br i1 %t444, label %each.body2051, label %each.end2053 +each.body2051: + %t445 = load ptr, ptr %t439 + %t446 = getelementptr inbounds %S.gen.StructDef, ptr %t445, i64 %t443 + %t447 = load %S.gen.StructDef, ptr %t446 + store %S.gen.StructDef %t447, ptr %a448 + call void @finch.copy.S_gen_StructDef(ptr %a449, ptr %a448) + %t450 = load %S.gen.StructDef, ptr %a449 + store %S.gen.StructDef %t450, ptr %a451 + %t452 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 2 + %t453 = load i1, ptr %t452 + br label %logic.from2054 +logic.from2054: + br i1 %t453, label %logic.end2056, label %logic.rhs2055 +logic.rhs2055: + %t454 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 5 + %t455 = getelementptr inbounds { ptr, i64, i64 }, ptr %t454, i32 0, i32 1 + %t456 = load i64, ptr %t455 + %t457 = icmp sgt i64 %t456, 0 + br label %logic.rend2057 +logic.rend2057: + br label %logic.end2056 +logic.end2056: + %t458 = phi i1 [ true, %logic.from2054 ], [ %t457, %logic.rend2057 ] + br i1 %t458, label %then2058, label %endif2060 +then2058: + call void @finch.drop.S_gen_StructDef(ptr %a451) + br label %each.step2052 +endif2060: + %t459 = load ptr, ptr %a1 + %t460 = icmp eq ptr %t459, null + br i1 %t460, label %panic2061, label %ok2062 +panic2061: + call void @finch_panic(ptr @.str.1175, i64 305, ptr @.str.1176) + unreachable +ok2062: + %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 0 + %t462 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 13 + %t463 = load i64, ptr %t462 + %t464 = load { ptr, i64, i64 }, ptr %t461 + %t465 = extractvalue { ptr, i64, i64 } %t464, 1 + %t466 = icmp uge i64 %t463, %t465 + br i1 %t466, label %range2063, label %inrange2064 +range2063: + call void @finch_panic_index(ptr @.str.1177, i64 305, i64 %t463, i64 %t465) + unreachable +inrange2064: + %t467 = extractvalue { ptr, i64, i64 } %t464, 0 + %t468 = getelementptr inbounds %S.ast.Program, ptr %t467, i64 %t463 + %t469 = getelementptr inbounds %S.ast.Program, ptr %t468, i32 0, i32 6 + %t470 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 14 + %t471 = load i64, ptr %t470 + %t472 = load { ptr, i64, i64 }, ptr %t469 + %t473 = extractvalue { ptr, i64, i64 } %t472, 1 + %t474 = icmp uge i64 %t471, %t473 + br i1 %t474, label %range2065, label %inrange2066 +range2065: + call void @finch_panic_index(ptr @.str.1178, i64 305, i64 %t471, i64 %t473) + unreachable +inrange2066: + %t475 = extractvalue { ptr, i64, i64 } %t472, 0 + %t476 = getelementptr inbounds %S.ast.Node, ptr %t475, i64 %t471 + %t477 = load %S.ast.Node, ptr %t476 + store %S.ast.Node %t477, ptr %a478 + call void @finch.copy.S_ast_Node(ptr %a479, ptr %a478) + %t480 = load %S.ast.Node, ptr %a479 + store %S.ast.Node %t480, ptr %a481 + %t482 = load ptr, ptr %a1 + %t483 = icmp eq ptr %t482, null + br i1 %t483, label %panic2067, label %ok2068 +panic2067: + call void @finch_panic(ptr @.str.1179, i64 306, ptr @.str.1180) + unreachable +ok2068: + %t484 = getelementptr inbounds %S.gen.Gen, ptr %t482, i32 0, i32 29 + %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %t484, i32 0, i32 1 + %t486 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 + %t487 = load { ptr, i64, i64 }, ptr %t486 + store { ptr, i64, i64 } { ptr @.str.1181, i64 3, i64 0 }, ptr %a489 + store { ptr, i64, i64 } %t487, ptr %a490 + call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) + %t491 = load { ptr, i64, i64 }, ptr %a488 + store { ptr, i64, i64 } %t491, ptr %a493 + store { ptr, i64, i64 } { ptr @.str.1182, i64 1, i64 0 }, ptr %a494 + call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) + store { ptr, i64, i64 } %t491, ptr %a495 + call void @finch_str_drop(ptr %a495) + %t496 = load { ptr, i64, i64 }, ptr %a492 + %t497 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 1 + %t498 = load { ptr, i64, i64 }, ptr %t497 + store { ptr, i64, i64 } %t496, ptr %a500 + store { ptr, i64, i64 } %t498, ptr %a501 + call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) + store { ptr, i64, i64 } %t496, ptr %a502 + call void @finch_str_drop(ptr %a502) + %t503 = load { ptr, i64, i64 }, ptr %a499 + store { ptr, i64, i64 } %t503, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.1183, i64 1, i64 0 }, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t503, ptr %a507 + call void @finch_str_drop(ptr %a507) + %t508 = load { ptr, i64, i64 }, ptr %a504 + %t509 = load ptr, ptr %a1 + %t510 = icmp eq ptr %t509, null + br i1 %t510, label %panic2069, label %ok2070 +panic2069: + call void @finch_panic(ptr @.str.1184, i64 306, ptr @.str.1185) + unreachable +ok2070: + %t511 = getelementptr inbounds %S.gen.Gen, ptr %t509, i32 0, i32 1 + %t512 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 13 + %t513 = load i64, ptr %t512 + %t514 = load { ptr, i64, i64 }, ptr %t511 + %t515 = extractvalue { ptr, i64, i64 } %t514, 1 + %t516 = icmp uge i64 %t513, %t515 + br i1 %t516, label %range2071, label %inrange2072 +range2071: + call void @finch_panic_index(ptr @.str.1186, i64 306, i64 %t513, i64 %t515) + unreachable +inrange2072: + %t517 = extractvalue { ptr, i64, i64 } %t514, 0 + %t518 = getelementptr inbounds { ptr, i64, i64 }, ptr %t517, i64 %t513 + %t519 = load { ptr, i64, i64 }, ptr %t518 + store { ptr, i64, i64 } %t508, ptr %a521 + store { ptr, i64, i64 } %t519, ptr %a522 + call void @finch_str_concat(ptr %a520, ptr %a521, ptr %a522) + store { ptr, i64, i64 } %t508, ptr %a523 + call void @finch_str_drop(ptr %a523) + %t524 = load { ptr, i64, i64 }, ptr %a520 + store { ptr, i64, i64 } %t524, ptr %a526 + store { ptr, i64, i64 } { ptr @.str.1187, i64 1, i64 0 }, ptr %a527 + call void @finch_str_concat(ptr %a525, ptr %a526, ptr %a527) + store { ptr, i64, i64 } %t524, ptr %a528 + call void @finch_str_drop(ptr %a528) + %t529 = load { ptr, i64, i64 }, ptr %a525 + %t530 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 11 + %t531 = load i64, ptr %t530 + call void @finch_str_from_int(ptr %a532, i64 %t531) + %t533 = load { ptr, i64, i64 }, ptr %a532 + store { ptr, i64, i64 } %t529, ptr %a535 + store { ptr, i64, i64 } %t533, ptr %a536 + call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536) + store { ptr, i64, i64 } %t529, ptr %a537 + call void @finch_str_drop(ptr %a537) + store { ptr, i64, i64 } %t533, ptr %a538 + call void @finch_str_drop(ptr %a538) + %t539 = load { ptr, i64, i64 }, ptr %a534 + store { ptr, i64, i64 } %t539, ptr %a541 + store { ptr, i64, i64 } { ptr @.str.1188, i64 1, i64 0 }, ptr %a542 + call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) + store { ptr, i64, i64 } %t539, ptr %a543 + call void @finch_str_drop(ptr %a543) + %t544 = load { ptr, i64, i64 }, ptr %a540 + %t545 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 12 + %t546 = load i64, ptr %t545 + call void @finch_str_from_int(ptr %a547, i64 %t546) + %t548 = load { ptr, i64, i64 }, ptr %a547 + store { ptr, i64, i64 } %t544, ptr %a550 + store { ptr, i64, i64 } %t548, ptr %a551 + call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551) + store { ptr, i64, i64 } %t544, ptr %a552 + call void @finch_str_drop(ptr %a552) + store { ptr, i64, i64 } %t548, ptr %a553 + call void @finch_str_drop(ptr %a553) + %t554 = load { ptr, i64, i64 }, ptr %a549 + %t555 = load i64, ptr %t485 + %t556 = add i64 %t555, 1 + call void @finch_arr_reserve(ptr %t484, i64 %t556, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t557 = load ptr, ptr %t484 + %t558 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i64 %t555 + store { ptr, i64, i64 } %t554, ptr %t558 + store i64 %t556, ptr %t485 + %t559 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 11 + %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 + %t561 = load i64, ptr %t560 + store i64 0, ptr %a562 + br label %for.cond2073 +for.cond2073: + %t563 = load i64, ptr %a562 + %t564 = icmp slt i64 %t563, %t561 + br i1 %t564, label %for.body2074, label %for.end2076 +for.body2074: + %t565 = load ptr, ptr %a1 + %t566 = icmp eq ptr %t565, null + br i1 %t566, label %panic2077, label %ok2078 +panic2077: + call void @finch_panic(ptr @.str.1189, i64 308, ptr @.str.1190) + unreachable +ok2078: + %t567 = getelementptr inbounds %S.gen.Gen, ptr %t565, i32 0, i32 29 + %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %t567, i32 0, i32 1 + %t569 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 + %t570 = load { ptr, i64, i64 }, ptr %t569 + store { ptr, i64, i64 } { ptr @.str.1191, i64 4, i64 0 }, ptr %a572 + store { ptr, i64, i64 } %t570, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + %t574 = load { ptr, i64, i64 }, ptr %a571 + store { ptr, i64, i64 } %t574, ptr %a576 + store { ptr, i64, i64 } { ptr @.str.1192, i64 1, i64 0 }, ptr %a577 + call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577) + store { ptr, i64, i64 } %t574, ptr %a578 + call void @finch_str_drop(ptr %a578) + %t579 = load { ptr, i64, i64 }, ptr %a575 + %t580 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 1 + %t581 = load { ptr, i64, i64 }, ptr %t580 + store { ptr, i64, i64 } %t579, ptr %a583 + store { ptr, i64, i64 } %t581, ptr %a584 + call void @finch_str_concat(ptr %a582, ptr %a583, ptr %a584) + store { ptr, i64, i64 } %t579, ptr %a585 + call void @finch_str_drop(ptr %a585) + %t586 = load { ptr, i64, i64 }, ptr %a582 + store { ptr, i64, i64 } %t586, ptr %a588 + store { ptr, i64, i64 } { ptr @.str.1193, i64 1, i64 0 }, ptr %a589 + call void @finch_str_concat(ptr %a587, ptr %a588, ptr %a589) + store { ptr, i64, i64 } %t586, ptr %a590 + call void @finch_str_drop(ptr %a590) + %t591 = load { ptr, i64, i64 }, ptr %a587 + %t592 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 11 + %t593 = load i64, ptr %a562 + %t594 = load { ptr, i64, i64 }, ptr %t592 + %t595 = extractvalue { ptr, i64, i64 } %t594, 1 + %t596 = icmp uge i64 %t593, %t595 + br i1 %t596, label %range2079, label %inrange2080 +range2079: + call void @finch_panic_index(ptr @.str.1194, i64 308, i64 %t593, i64 %t595) + unreachable +inrange2080: + %t597 = extractvalue { ptr, i64, i64 } %t594, 0 + %t598 = getelementptr inbounds { ptr, i64, i64 }, ptr %t597, i64 %t593 + %t599 = load { ptr, i64, i64 }, ptr %t598 + store { ptr, i64, i64 } %t591, ptr %a601 + store { ptr, i64, i64 } %t599, ptr %a602 + call void @finch_str_concat(ptr %a600, ptr %a601, ptr %a602) + store { ptr, i64, i64 } %t591, ptr %a603 + call void @finch_str_drop(ptr %a603) + %t604 = load { ptr, i64, i64 }, ptr %a600 + store { ptr, i64, i64 } %t604, ptr %a606 + store { ptr, i64, i64 } { ptr @.str.1195, i64 1, i64 0 }, ptr %a607 + call void @finch_str_concat(ptr %a605, ptr %a606, ptr %a607) + store { ptr, i64, i64 } %t604, ptr %a608 + call void @finch_str_drop(ptr %a608) + %t609 = load { ptr, i64, i64 }, ptr %a605 + %t610 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 12 + %t611 = load i64, ptr %a562 + %t612 = load { ptr, i64, i64 }, ptr %t610 + %t613 = extractvalue { ptr, i64, i64 } %t612, 1 + %t614 = icmp uge i64 %t611, %t613 + br i1 %t614, label %range2081, label %inrange2082 +range2081: + call void @finch_panic_index(ptr @.str.1196, i64 308, i64 %t611, i64 %t613) + unreachable +inrange2082: + %t615 = extractvalue { ptr, i64, i64 } %t612, 0 + %t616 = getelementptr inbounds %S.ast.Type, ptr %t615, i64 %t611 + %t617 = load %S.ast.Type, ptr %t616 + %t618 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t617) + store { ptr, i64, i64 } %t609, ptr %a620 + store { ptr, i64, i64 } %t618, ptr %a621 + call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) + store { ptr, i64, i64 } %t609, ptr %a622 + call void @finch_str_drop(ptr %a622) + store { ptr, i64, i64 } %t618, ptr %a623 + call void @finch_str_drop(ptr %a623) + %t624 = load { ptr, i64, i64 }, ptr %a619 + %t625 = load i64, ptr %t568 + %t626 = add i64 %t625, 1 + call void @finch_arr_reserve(ptr %t567, i64 %t626, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t627 = load ptr, ptr %t567 + %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 + store { ptr, i64, i64 } %t624, ptr %t628 + store i64 %t626, ptr %t568 + br label %for.step2075 +for.step2075: + %t629 = load i64, ptr %a562 + %t630 = add i64 %t629, 1 + store i64 %t630, ptr %a562 + br label %for.cond2073 +for.end2076: + call void @finch.drop.S_ast_Node(ptr %a481) + call void @finch.drop.S_gen_StructDef(ptr %a451) + br label %each.step2052 +each.step2052: + %t631 = load i64, ptr %a440 + %t632 = add i64 %t631, 1 + store i64 %t632, ptr %a440 + br label %each.cond2050 +each.end2053: + %t633 = load ptr, ptr %a1 + %t634 = icmp eq ptr %t633, null + br i1 %t634, label %panic2083, label %ok2084 +panic2083: + call void @finch_panic(ptr @.str.1197, i64 311, ptr @.str.1198) + unreachable +ok2084: + %t635 = getelementptr inbounds %S.gen.Gen, ptr %t633, i32 0, i32 0 + %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i32 0, i32 1 + %t637 = load i64, ptr %t636 + store i64 0, ptr %a638 + br label %for.cond2085 +for.cond2085: + %t639 = load i64, ptr %a638 + %t640 = icmp slt i64 %t639, %t637 + br i1 %t640, label %for.body2086, label %for.end2088 +for.body2086: + %t641 = load ptr, ptr %a1 + %t642 = icmp eq ptr %t641, null + br i1 %t642, label %panic2089, label %ok2090 +panic2089: + call void @finch_panic(ptr @.str.1199, i64 312, ptr @.str.1200) + unreachable +ok2090: + %t643 = getelementptr inbounds %S.gen.Gen, ptr %t641, i32 0, i32 0 + %t644 = load i64, ptr %a638 + %t645 = load { ptr, i64, i64 }, ptr %t643 + %t646 = extractvalue { ptr, i64, i64 } %t645, 1 + %t647 = icmp uge i64 %t644, %t646 + br i1 %t647, label %range2091, label %inrange2092 +range2091: + call void @finch_panic_index(ptr @.str.1201, i64 312, i64 %t644, i64 %t646) + unreachable +inrange2092: + %t648 = extractvalue { ptr, i64, i64 } %t645, 0 + %t649 = getelementptr inbounds %S.ast.Program, ptr %t648, i64 %t644 + %t650 = getelementptr inbounds %S.ast.Program, ptr %t649, i32 0, i32 7 + store i64 0, ptr %a651 + br label %each.cond2093 +each.cond2093: + %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %t650, i32 0, i32 1 + %t653 = load i64, ptr %t652 + %t654 = load i64, ptr %a651 + %t655 = icmp slt i64 %t654, %t653 + br i1 %t655, label %each.body2094, label %each.end2096 +each.body2094: + %t656 = load ptr, ptr %t650 + %t657 = getelementptr inbounds %S.ast.Node, ptr %t656, i64 %t654 + %t658 = load %S.ast.Node, ptr %t657 + store %S.ast.Node %t658, ptr %a659 + call void @finch.copy.S_ast_Node(ptr %a660, ptr %a659) + %t661 = load %S.ast.Node, ptr %a660 + store %S.ast.Node %t661, ptr %a662 + store { ptr, i64, i64 } { ptr @.str.1202, i64 0, i64 0 }, ptr %a663 + store { ptr, i64, i64 } zeroinitializer, ptr %a664 + %t665 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 9 + store i64 0, ptr %a666 + br label %each.cond2097 +each.cond2097: + %t667 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 + %t668 = load i64, ptr %t667 + %t669 = load i64, ptr %a666 + %t670 = icmp slt i64 %t669, %t668 + br i1 %t670, label %each.body2098, label %each.end2100 +each.body2098: + %t671 = load ptr, ptr %t665 + %t672 = getelementptr inbounds %S.ast.Node, ptr %t671, i64 %t669 + %t673 = load %S.ast.Node, ptr %t672 + store %S.ast.Node %t673, ptr %a674 + %t675 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 + %t676 = getelementptr inbounds %S.ast.Node, ptr %a674, i32 0, i32 1 + %t677 = load { ptr, i64, i64 }, ptr %t676 + store { ptr, i64, i64 } %t677, ptr %a678 + call void @finch_str_copy(ptr %a679, ptr %a678) + %t680 = load { ptr, i64, i64 }, ptr %a679 + %t681 = load i64, ptr %t675 + %t682 = add i64 %t681, 1 + call void @finch_arr_reserve(ptr %a664, i64 %t682, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t683 = load ptr, ptr %a664 + %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 + store { ptr, i64, i64 } %t680, ptr %t684 + store i64 %t682, ptr %t675 + br label %each.step2099 +each.step2099: + %t685 = load i64, ptr %a666 + %t686 = add i64 %t685, 1 + store i64 %t686, ptr %a666 + br label %each.cond2097 +each.end2100: + %t687 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1203, i64 1, i64 0 }, ptr %a688 + call void @finch_str_join(ptr %a689, ptr %a664, ptr %a688) + %t690 = load { ptr, i64, i64 }, ptr %a689 + %t691 = load { ptr, i64, i64 }, ptr %a663 + store { ptr, i64, i64 } %t690, ptr %a663 + store { ptr, i64, i64 } %t691, ptr %a692 + call void @finch_str_drop(ptr %a692) + %t693 = load ptr, ptr %a1 + %t694 = icmp eq ptr %t693, null + br i1 %t694, label %panic2101, label %ok2102 +panic2101: + call void @finch_panic(ptr @.str.1204, i64 319, ptr @.str.1205) + unreachable +ok2102: + %t695 = getelementptr inbounds %S.gen.Gen, ptr %t693, i32 0, i32 29 + %t696 = getelementptr inbounds { ptr, i64, i64 }, ptr %t695, i32 0, i32 1 + %t697 = load ptr, ptr %a1 + %t698 = icmp eq ptr %t697, null + br i1 %t698, label %panic2103, label %ok2104 +panic2103: + call void @finch_panic(ptr @.str.1207, i64 319, ptr @.str.1208) + unreachable +ok2104: + %t699 = getelementptr inbounds %S.gen.Gen, ptr %t697, i32 0, i32 0 + %t700 = load i64, ptr %a638 + %t701 = load { ptr, i64, i64 }, ptr %t699 + %t702 = extractvalue { ptr, i64, i64 } %t701, 1 + %t703 = icmp uge i64 %t700, %t702 + br i1 %t703, label %range2105, label %inrange2106 +range2105: + call void @finch_panic_index(ptr @.str.1209, i64 319, i64 %t700, i64 %t702) + unreachable +inrange2106: + %t704 = extractvalue { ptr, i64, i64 } %t701, 0 + %t705 = getelementptr inbounds %S.ast.Program, ptr %t704, i64 %t700 + %t706 = getelementptr inbounds %S.ast.Program, ptr %t705, i32 0, i32 0 + %t707 = load { ptr, i64, i64 }, ptr %t706 + store { ptr, i64, i64 } { ptr @.str.1206, i64 3, i64 0 }, ptr %a709 + store { ptr, i64, i64 } %t707, ptr %a710 + call void @finch_str_concat(ptr %a708, ptr %a709, ptr %a710) + %t711 = load { ptr, i64, i64 }, ptr %a708 + store { ptr, i64, i64 } %t711, ptr %a713 + store { ptr, i64, i64 } { ptr @.str.1210, i64 1, i64 0 }, ptr %a714 + call void @finch_str_concat(ptr %a712, ptr %a713, ptr %a714) + store { ptr, i64, i64 } %t711, ptr %a715 + call void @finch_str_drop(ptr %a715) + %t716 = load { ptr, i64, i64 }, ptr %a712 + %t717 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 1 + %t718 = load { ptr, i64, i64 }, ptr %t717 + store { ptr, i64, i64 } %t716, ptr %a720 + store { ptr, i64, i64 } %t718, ptr %a721 + call void @finch_str_concat(ptr %a719, ptr %a720, ptr %a721) + store { ptr, i64, i64 } %t716, ptr %a722 + call void @finch_str_drop(ptr %a722) + %t723 = load { ptr, i64, i64 }, ptr %a719 + store { ptr, i64, i64 } %t723, ptr %a725 + store { ptr, i64, i64 } { ptr @.str.1211, i64 1, i64 0 }, ptr %a726 + call void @finch_str_concat(ptr %a724, ptr %a725, ptr %a726) + store { ptr, i64, i64 } %t723, ptr %a727 + call void @finch_str_drop(ptr %a727) + %t728 = load { ptr, i64, i64 }, ptr %a724 + %t729 = load ptr, ptr %a1 + %t730 = icmp eq ptr %t729, null + br i1 %t730, label %panic2107, label %ok2108 +panic2107: + call void @finch_panic(ptr @.str.1212, i64 319, ptr @.str.1213) + unreachable +ok2108: + %t731 = getelementptr inbounds %S.gen.Gen, ptr %t729, i32 0, i32 1 + %t732 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 13 + %t733 = load i64, ptr %t732 + %t734 = load { ptr, i64, i64 }, ptr %t731 + %t735 = extractvalue { ptr, i64, i64 } %t734, 1 + %t736 = icmp uge i64 %t733, %t735 + br i1 %t736, label %range2109, label %inrange2110 +range2109: + call void @finch_panic_index(ptr @.str.1214, i64 319, i64 %t733, i64 %t735) + unreachable +inrange2110: + %t737 = extractvalue { ptr, i64, i64 } %t734, 0 + %t738 = getelementptr inbounds { ptr, i64, i64 }, ptr %t737, i64 %t733 + %t739 = load { ptr, i64, i64 }, ptr %t738 + store { ptr, i64, i64 } %t728, ptr %a741 + store { ptr, i64, i64 } %t739, ptr %a742 + call void @finch_str_concat(ptr %a740, ptr %a741, ptr %a742) + store { ptr, i64, i64 } %t728, ptr %a743 + call void @finch_str_drop(ptr %a743) + %t744 = load { ptr, i64, i64 }, ptr %a740 + store { ptr, i64, i64 } %t744, ptr %a746 + store { ptr, i64, i64 } { ptr @.str.1215, i64 1, i64 0 }, ptr %a747 + call void @finch_str_concat(ptr %a745, ptr %a746, ptr %a747) + store { ptr, i64, i64 } %t744, ptr %a748 + call void @finch_str_drop(ptr %a748) + %t749 = load { ptr, i64, i64 }, ptr %a745 + %t750 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 11 + %t751 = load i64, ptr %t750 + call void @finch_str_from_int(ptr %a752, i64 %t751) + %t753 = load { ptr, i64, i64 }, ptr %a752 + store { ptr, i64, i64 } %t749, ptr %a755 + store { ptr, i64, i64 } %t753, ptr %a756 + call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) + store { ptr, i64, i64 } %t749, ptr %a757 + call void @finch_str_drop(ptr %a757) + store { ptr, i64, i64 } %t753, ptr %a758 + call void @finch_str_drop(ptr %a758) + %t759 = load { ptr, i64, i64 }, ptr %a754 + store { ptr, i64, i64 } %t759, ptr %a761 + store { ptr, i64, i64 } { ptr @.str.1216, i64 1, i64 0 }, ptr %a762 + call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) + store { ptr, i64, i64 } %t759, ptr %a763 + call void @finch_str_drop(ptr %a763) + %t764 = load { ptr, i64, i64 }, ptr %a760 + %t765 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 12 + %t766 = load i64, ptr %t765 + call void @finch_str_from_int(ptr %a767, i64 %t766) + %t768 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t764, ptr %a770 + store { ptr, i64, i64 } %t768, ptr %a771 + call void @finch_str_concat(ptr %a769, ptr %a770, ptr %a771) + store { ptr, i64, i64 } %t764, ptr %a772 + call void @finch_str_drop(ptr %a772) + store { ptr, i64, i64 } %t768, ptr %a773 + call void @finch_str_drop(ptr %a773) + %t774 = load { ptr, i64, i64 }, ptr %a769 + store { ptr, i64, i64 } %t774, ptr %a776 + store { ptr, i64, i64 } { ptr @.str.1217, i64 1, i64 0 }, ptr %a777 + call void @finch_str_concat(ptr %a775, ptr %a776, ptr %a777) + store { ptr, i64, i64 } %t774, ptr %a778 + call void @finch_str_drop(ptr %a778) + %t779 = load { ptr, i64, i64 }, ptr %a775 + %t780 = load { ptr, i64, i64 }, ptr %a663 + store { ptr, i64, i64 } %t779, ptr %a782 + store { ptr, i64, i64 } %t780, ptr %a783 + call void @finch_str_concat(ptr %a781, ptr %a782, ptr %a783) + store { ptr, i64, i64 } %t779, ptr %a784 + call void @finch_str_drop(ptr %a784) + %t785 = load { ptr, i64, i64 }, ptr %a781 + %t786 = load i64, ptr %t696 + %t787 = add i64 %t786, 1 + call void @finch_arr_reserve(ptr %t695, i64 %t787, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t788 = load ptr, ptr %t695 + %t789 = getelementptr inbounds { ptr, i64, i64 }, ptr %t788, i64 %t786 + store { ptr, i64, i64 } %t785, ptr %t789 + store i64 %t787, ptr %t696 + call void @finch.drop.arr_str(ptr %a664) + call void @finch_str_drop(ptr %a663) + call void @finch.drop.S_ast_Node(ptr %a662) + br label %each.step2095 +each.step2095: + %t790 = load i64, ptr %a651 + %t791 = add i64 %t790, 1 + store i64 %t791, ptr %a651 + br label %each.cond2093 +each.end2096: + br label %for.step2087 +for.step2087: + %t792 = load i64, ptr %a638 + %t793 = add i64 %t792, 1 + store i64 %t793, ptr %a638 + br label %for.cond2085 +for.end2088: + ret void +} + +define internal void @finch.gen.fail(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2111, label %ok2112 +panic2111: + call void @finch_panic(ptr @.str.1218, i64 325, ptr @.str.1219) + unreachable +ok2112: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + br label %logic.from2113 +logic.from2113: + br i1 %t7, label %logic.rhs2114, label %logic.end2115 +logic.rhs2114: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic2116, label %ok2117 +panic2116: + call void @finch_panic(ptr @.str.1220, i64 325, ptr @.str.1221) + unreachable +ok2117: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 29 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br label %logic.rend2118 +logic.rend2118: + br label %logic.end2115 +logic.end2115: + %t14 = phi i1 [ false, %logic.from2113 ], [ %t13, %logic.rend2118 ] + br i1 %t14, label %then2119, label %endif2121 +then2119: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic2122, label %ok2123 +panic2122: + call void @finch_panic(ptr @.str.1222, i64 326, ptr @.str.1223) + unreachable +ok2123: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 29 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1224, i64 1, i64 0 }, ptr %a19 + call void @finch_str_join(ptr %a20, ptr %t17, ptr %a19) + %t21 = load { ptr, i64, i64 }, ptr %a20 + %t22 = extractvalue { ptr, i64, i64 } %t21, 1 + %t23 = trunc i64 %t22 to i32 + %t24 = extractvalue { ptr, i64, i64 } %t21, 0 + %t25 = icmp eq ptr %t24, null + %t26 = select i1 %t25, ptr @.str.1225, ptr %t24 + %t27 = call i32 (ptr, ...) @printf(ptr @.str.1226, i32 %t23, ptr %t26) + store { ptr, i64, i64 } %t21, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = call i32 (ptr, ...) @printf(ptr @.str.1227) + br label %endif2121 +endif2121: + %t30 = load ptr, ptr %a1 + %t31 = icmp eq ptr %t30, null + br i1 %t31, label %panic2124, label %ok2125 +panic2124: + call void @finch_panic(ptr @.str.1228, i64 328, ptr @.str.1229) + unreachable +ok2125: + %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 1 + %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t34 = load i64, ptr %t33 + %t35 = load { ptr, i64, i64 }, ptr %t32 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 %t34, %t36 + br i1 %t37, label %range2126, label %inrange2127 +range2126: + call void @finch_panic_index(ptr @.str.1230, i64 328, i64 %t34, i64 %t36) + unreachable +inrange2127: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t34 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1231, i64 1, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a41 + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t46 = load i64, ptr %t45 + call void @finch_str_from_int(ptr %a47, i64 %t46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t44, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t44, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.1232, i64 1, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t61 = load i64, ptr %t60 + call void @finch_str_from_int(ptr %a62, i64 %t61) + %t63 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t59, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t59, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.1233, i64 9, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t74, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t74, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic2128, label %ok2129 +panic2128: + call void @finch_panic(ptr @.str.1234, i64 328, ptr @.str.1235) + unreachable +ok2129: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 20 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } %t80, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t80, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + %t90 = extractvalue { ptr, i64, i64 } %t89, 1 + %t91 = trunc i64 %t90 to i32 + %t92 = extractvalue { ptr, i64, i64 } %t89, 0 + %t93 = icmp eq ptr %t92, null + %t94 = select i1 %t93, ptr @.str.1236, ptr %t92 + %t95 = call i32 (ptr, ...) @printf(ptr @.str.1237, i32 %t91, ptr %t94) + store { ptr, i64, i64 } %t89, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = call i32 (ptr, ...) @printf(ptr @.str.1238) + %t98 = trunc i64 1 to i32 + %t99 = call i32 @fflush(ptr null) + call void @exit(i32 %t98) + ret void +} + +define internal void @finch.gen.emit(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2130, label %ok2131 +panic2130: + call void @finch_panic(ptr @.str.1239, i64 334, ptr @.str.1240) + unreachable +ok2131: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 36 + %t6 = load i64, ptr %t5 + %t7 = icmp sge i64 %t6, 0 + br label %logic.from2132 +logic.from2132: + br i1 %t7, label %logic.rhs2133, label %logic.end2134 +logic.rhs2133: + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1242, i64 5, i64 0 }, ptr %a11 + %t12 = call i64 @finch_str_find(ptr %a9, ptr %a11) + %t13 = icmp sge i64 %t12, 0 + br label %logic.rend2135 +logic.rend2135: + br label %logic.end2134 +logic.end2134: + %t14 = phi i1 [ false, %logic.from2132 ], [ %t13, %logic.rend2135 ] + br i1 %t14, label %then2136, label %endif2138 +then2136: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic2139, label %ok2140 +panic2139: + call void @finch_panic(ptr @.str.1243, i64 335, ptr @.str.1244) + unreachable +ok2140: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 4 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1245, i64 2, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1246, i64 8, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + %t29 = load ptr, ptr %a1 + %t30 = call i64 @finch.gen.dbgLocation(ptr %t29) + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t28, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t28, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + %t39 = load i64, ptr %t18 + %t40 = add i64 %t39, 1 + call void @finch_arr_reserve(ptr %t17, i64 %t40, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t41 = load ptr, ptr %t17 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t39 + store { ptr, i64, i64 } %t38, ptr %t42 + store i64 %t40, ptr %t18 + ret void +endif2138: + %t43 = load ptr, ptr %a1 + %t44 = icmp eq ptr %t43, null + br i1 %t44, label %panic2141, label %ok2142 +panic2141: + call void @finch_panic(ptr @.str.1247, i64 338, ptr @.str.1248) + unreachable +ok2142: + %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 4 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1249, i64 2, i64 0 }, ptr %a49 + store { ptr, i64, i64 } %t47, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a48 + %t52 = load i64, ptr %t46 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %t45, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %t45 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 + store { ptr, i64, i64 } %t51, ptr %t55 + store i64 %t53, ptr %t46 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.tmpName(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic2143, label %ok2144 +panic2143: + call void @finch_panic(ptr @.str.1250, i64 342, ptr @.str.1251) + unreachable +ok2144: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 6 + %t5 = load i64, ptr %t4 + %t6 = add i64 %t5, 1 + store i64 %t6, ptr %t4 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic2145, label %ok2146 +panic2145: + call void @finch_panic(ptr @.str.1253, i64 343, ptr @.str.1254) + unreachable +ok2146: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 6 + %t10 = load i64, ptr %t9 + call void @finch_str_from_int(ptr %a11, i64 %t10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1252, i64 2, i64 0 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + ret { ptr, i64, i64 } %t17 +} + +define internal { ptr, i64, i64 } @finch.gen.newLabel(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2147, label %ok2148 +panic2147: + call void @finch_panic(ptr @.str.1255, i64 347, ptr @.str.1256) + unreachable +ok2148: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 7 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + store i64 %t7, ptr %t5 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic2149, label %ok2150 +panic2149: + call void @finch_panic(ptr @.str.1257, i64 348, ptr @.str.1258) + unreachable +ok2150: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 7 + %t12 = load i64, ptr %t11 + call void @finch_str_from_int(ptr %a13, i64 %t12) + %t14 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t8, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + ret { ptr, i64, i64 } %t19 +} + +define internal void @finch.gen.label(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2151, label %ok2152 +panic2151: + call void @finch_panic(ptr @.str.1259, i64 352, ptr @.str.1260) + unreachable +ok2152: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 4 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1261, i64 1, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + %t12 = load i64, ptr %t6 + %t13 = add i64 %t12, 1 + call void @finch_arr_reserve(ptr %t5, i64 %t13, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t14 = load ptr, ptr %t5 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t12 + store { ptr, i64, i64 } %t11, ptr %t15 + store i64 %t13, ptr %t6 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic2153, label %ok2154 +panic2153: + call void @finch_panic(ptr @.str.1262, i64 353, ptr @.str.1263) + unreachable +ok2154: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 + store i1 false, ptr %t18 + ret void +} + +define internal void @finch.gen.br(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2155, label %ok2156 +panic2155: + call void @finch_panic(ptr @.str.1264, i64 357, ptr @.str.1265) + unreachable +ok2156: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 9 + %t6 = load i1, ptr %t5 + %t7 = xor i1 %t6, true + br i1 %t7, label %then2157, label %endif2159 +then2157: + %t8 = load ptr, ptr %a1 + %t9 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1266, i64 10, i64 0 }, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.emit(ptr %t8, { ptr, i64, i64 } %t13) + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic2160, label %ok2161 +panic2160: + call void @finch_panic(ptr @.str.1267, i64 359, ptr @.str.1268) + unreachable +ok2161: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 9 + store i1 true, ptr %t17 + br label %endif2159 +endif2159: + ret void +} + +define internal void @finch.gen.condBr(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1269, i64 6, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1270, i64 9, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t15, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1271, i64 9, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t26, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a28 + call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic2162, label %ok2163 +panic2162: + call void @finch_panic(ptr @.str.1272, i64 365, ptr @.str.1273) + unreachable +ok2163: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 9 + store i1 true, ptr %t36 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.alloca(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2164, label %ok2165 +panic2164: + call void @finch_panic(ptr @.str.1274, i64 369, ptr @.str.1275) + unreachable +ok2165: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 6 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + store i64 %t7, ptr %t5 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic2166, label %ok2167 +panic2166: + call void @finch_panic(ptr @.str.1277, i64 370, ptr @.str.1278) + unreachable +ok2167: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 6 + %t11 = load i64, ptr %t10 + call void @finch_str_from_int(ptr %a12, i64 %t11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1276, i64 2, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic2168, label %ok2169 +panic2168: + call void @finch_panic(ptr @.str.1279, i64 371, ptr @.str.1280) + unreachable +ok2169: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 5 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.1281, i64 2, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1282, i64 10, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1283, i64 10, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load i64, ptr %t23 + %t46 = add i64 %t45, 1 + call void @finch_arr_reserve(ptr %t22, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t47 = load ptr, ptr %t22 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 + store { ptr, i64, i64 } %t44, ptr %t48 + store i64 %t46, ptr %t23 + %t49 = load { ptr, i64, i64 }, ptr %a19 + ret { ptr, i64, i64 } %t49 +} + +define internal { ptr, i64, i64 } @finch.gen.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t4) + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1284, i64 8, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t12, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t12, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1285, i64 6, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + %t24 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t23, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t23, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.emit(ptr %t7, { ptr, i64, i64 } %t29) + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a6 + ret { ptr, i64, i64 } %t31 +} + +define internal void @finch.gen.store(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1286, i64 6, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1287, i64 1, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t15, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1288, i64 6, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t26, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a28 + call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.spill(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t6 = load %S.ast.Type, ptr %t5 + %t7 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t4, %S.ast.Type %t6) + %t8 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } %t7) + store { ptr, i64, i64 } %t7, ptr %a9 + call void @finch_str_drop(ptr %a9) + store { ptr, i64, i64 } %t8, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load ptr, ptr %a1 + %t13 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t14 = load %S.ast.Type, ptr %t13 + %t15 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t12, %S.ast.Type %t14) + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.store(ptr %t11, { ptr, i64, i64 } %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t20 +} + +define internal { ptr, i64, i64 } @finch.gen.op(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t3) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1289, i64 3, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t11, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t11, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.gen.emit(ptr %t6, { ptr, i64, i64 } %t17) + store { ptr, i64, i64 } %t17, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a5 + ret { ptr, i64, i64 } %t19 +} + +define internal i1 @finch.gen.has({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a5 + %t6 = load i64, ptr %t3 + %t7 = load ptr, ptr %a1 + store i64 0, ptr %a8 + br label %find.cond2170 +find.cond2170: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t6 + br i1 %t10, label %find.body2171, label %find.end2174 +find.body2171: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } %t4, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %find.hit2172, label %find.next2173 +find.hit2172: + store i64 %t9, ptr %a5 + br label %find.end2174 +find.next2173: + %t17 = add i64 %t9, 1 + store i64 %t17, ptr %a8 + br label %find.cond2170 +find.end2174: + %t18 = load i64, ptr %a5 + %t19 = icmp sge i64 %t18, 0 + ret i1 %t19 +} + +define internal %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t2) + ret %S.ast.Type %t3 +} + +define internal i1 @finch.gen.isSigned(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1290, i64 3, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br label %logic.from2175 +logic.from2175: + br i1 %t12, label %logic.end2177, label %logic.rhs2176 +logic.rhs2176: + %t13 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1291, i64 2, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br label %logic.rend2178 +logic.rend2178: + br label %logic.end2177 +logic.end2177: + %t18 = phi i1 [ true, %logic.from2175 ], [ %t17, %logic.rend2178 ] + br label %logic.from2179 +logic.from2179: + br i1 %t18, label %logic.end2181, label %logic.rhs2180 +logic.rhs2180: + %t19 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1292, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend2182 +logic.rend2182: + br label %logic.end2181 +logic.end2181: + %t24 = phi i1 [ true, %logic.from2179 ], [ %t23, %logic.rend2182 ] + br label %logic.from2183 +logic.from2183: + br i1 %t24, label %logic.end2185, label %logic.rhs2184 +logic.rhs2184: + %t25 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.1293, i64 3, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend2186 +logic.rend2186: + br label %logic.end2185 +logic.end2185: + %t30 = phi i1 [ true, %logic.from2183 ], [ %t29, %logic.rend2186 ] + call void @finch_str_drop(ptr %a7) + ret i1 %t30 +} + +define internal i1 @finch.gen.isUnsigned(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1294, i64 2, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br label %logic.from2187 +logic.from2187: + br i1 %t12, label %logic.end2189, label %logic.rhs2188 +logic.rhs2188: + %t13 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1295, i64 3, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br label %logic.rend2190 +logic.rend2190: + br label %logic.end2189 +logic.end2189: + %t18 = phi i1 [ true, %logic.from2187 ], [ %t17, %logic.rend2190 ] + br label %logic.from2191 +logic.from2191: + br i1 %t18, label %logic.end2193, label %logic.rhs2192 +logic.rhs2192: + %t19 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1296, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend2194 +logic.rend2194: + br label %logic.end2193 +logic.end2193: + %t24 = phi i1 [ true, %logic.from2191 ], [ %t23, %logic.rend2194 ] + br label %logic.from2195 +logic.from2195: + br i1 %t24, label %logic.end2197, label %logic.rhs2196 +logic.rhs2196: + %t25 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.1297, i64 3, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend2198 +logic.rend2198: + br label %logic.end2197 +logic.end2197: + %t30 = phi i1 [ true, %logic.from2195 ], [ %t29, %logic.rend2198 ] + call void @finch_str_drop(ptr %a7) + ret i1 %t30 +} + +define internal i1 @finch.gen.isInt(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + %t3 = call i1 @finch.gen.isSigned(%S.ast.Type %t2) + br label %logic.from2199 +logic.from2199: + br i1 %t3, label %logic.end2201, label %logic.rhs2200 +logic.rhs2200: + %t4 = load %S.ast.Type, ptr %a1 + %t5 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t4) + br label %logic.rend2202 +logic.rend2202: + br label %logic.end2201 +logic.end2201: + %t6 = phi i1 [ true, %logic.from2199 ], [ %t5, %logic.rend2202 ] + ret i1 %t6 +} + +define internal i1 @finch.gen.isFloat(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.1298, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br label %logic.from2203 +logic.from2203: + br i1 %t7, label %logic.end2205, label %logic.rhs2204 +logic.rhs2204: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1299, i64 3, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.rend2206 +logic.rend2206: + br label %logic.end2205 +logic.end2205: + %t14 = phi i1 [ true, %logic.from2203 ], [ %t13, %logic.rend2206 ] + ret i1 %t14 +} + +define internal i1 @finch.gen.isNumber(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + %t3 = call i1 @finch.gen.isInt(%S.ast.Type %t2) + br label %logic.from2207 +logic.from2207: + br i1 %t3, label %logic.end2209, label %logic.rhs2208 +logic.rhs2208: + %t4 = load %S.ast.Type, ptr %a1 + %t5 = call i1 @finch.gen.isFloat(%S.ast.Type %t4) + br label %logic.rend2210 +logic.rend2210: + br label %logic.end2209 +logic.end2209: + %t6 = phi i1 [ true, %logic.from2207 ], [ %t5, %logic.rend2210 ] + ret i1 %t6 +} + +define internal i64 @finch.gen.bitsOf(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1300, i64 4, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then2211, label %endif2213 +then2211: + call void @finch_str_drop(ptr %a7) + ret i64 1 +endif2213: + %t13 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1301, i64 4, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br label %logic.from2214 +logic.from2214: + br i1 %t17, label %logic.end2216, label %logic.rhs2215 +logic.rhs2215: + %t18 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.1302, i64 2, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.rend2217 +logic.rend2217: + br label %logic.end2216 +logic.end2216: + %t23 = phi i1 [ true, %logic.from2214 ], [ %t22, %logic.rend2217 ] + br label %logic.from2218 +logic.from2218: + br i1 %t23, label %logic.end2220, label %logic.rhs2219 +logic.rhs2219: + %t24 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1303, i64 2, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.rend2221 +logic.rend2221: + br label %logic.end2220 +logic.end2220: + %t29 = phi i1 [ true, %logic.from2218 ], [ %t28, %logic.rend2221 ] + br i1 %t29, label %then2222, label %endif2224 +then2222: + call void @finch_str_drop(ptr %a7) + ret i64 8 +endif2224: + %t30 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t30, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.1304, i64 3, i64 0 }, ptr %a32 + %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) + %t34 = icmp ne i32 %t33, 0 + br label %logic.from2225 +logic.from2225: + br i1 %t34, label %logic.end2227, label %logic.rhs2226 +logic.rhs2226: + %t35 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.1305, i64 3, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.rend2228 +logic.rend2228: + br label %logic.end2227 +logic.end2227: + %t40 = phi i1 [ true, %logic.from2225 ], [ %t39, %logic.rend2228 ] + br i1 %t40, label %then2229, label %endif2231 +then2229: + call void @finch_str_drop(ptr %a7) + ret i64 16 +endif2231: + %t41 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1306, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.from2232 +logic.from2232: + br i1 %t45, label %logic.end2234, label %logic.rhs2233 +logic.rhs2233: + %t46 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t46, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.1307, i64 3, i64 0 }, ptr %a48 + %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) + %t50 = icmp ne i32 %t49, 0 + br label %logic.rend2235 +logic.rend2235: + br label %logic.end2234 +logic.end2234: + %t51 = phi i1 [ true, %logic.from2232 ], [ %t50, %logic.rend2235 ] + br label %logic.from2236 +logic.from2236: + br i1 %t51, label %logic.end2238, label %logic.rhs2237 +logic.rhs2237: + %t52 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.1308, i64 3, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br label %logic.rend2239 +logic.rend2239: + br label %logic.end2238 +logic.end2238: + %t57 = phi i1 [ true, %logic.from2236 ], [ %t56, %logic.rend2239 ] + br i1 %t57, label %then2240, label %endif2242 +then2240: + call void @finch_str_drop(ptr %a7) + ret i64 32 +endif2242: + call void @finch_str_drop(ptr %a7) + ret i64 64 +} + +define internal i1 @finch.gen.widens(%S.ast.Type %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a1 + %t4 = call i1 @finch.gen.isInt(%S.ast.Type %t3) + %t5 = xor i1 %t4, true + br label %logic.from2243 +logic.from2243: + br i1 %t5, label %logic.end2245, label %logic.rhs2244 +logic.rhs2244: + %t6 = load %S.ast.Type, ptr %a2 + %t7 = call i1 @finch.gen.isInt(%S.ast.Type %t6) + %t8 = xor i1 %t7, true + br label %logic.rend2246 +logic.rend2246: + br label %logic.end2245 +logic.end2245: + %t9 = phi i1 [ true, %logic.from2243 ], [ %t8, %logic.rend2246 ] + br i1 %t9, label %then2247, label %endif2249 +then2247: + ret i1 false +endif2249: + %t10 = load %S.ast.Type, ptr %a1 + %t11 = call i1 @finch.gen.isSigned(%S.ast.Type %t10) + br label %logic.from2250 +logic.from2250: + br i1 %t11, label %logic.rhs2251, label %logic.end2252 +logic.rhs2251: + %t12 = load %S.ast.Type, ptr %a2 + %t13 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t12) + br label %logic.rend2253 +logic.rend2253: + br label %logic.end2252 +logic.end2252: + %t14 = phi i1 [ false, %logic.from2250 ], [ %t13, %logic.rend2253 ] + br i1 %t14, label %then2254, label %endif2256 +then2254: + ret i1 false +endif2256: + %t15 = load %S.ast.Type, ptr %a2 + %t16 = call i64 @finch.gen.bitsOf(%S.ast.Type %t15) + %t17 = load %S.ast.Type, ptr %a1 + %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) + %t19 = icmp sgt i64 %t16, %t18 + ret i1 %t19 +} + +define internal i1 @finch.gen.fits({ ptr, i64, i64 } %p0, %S.ast.Type %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a13 = alloca i64, align 16 + %a31 = alloca i64, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load %S.ast.Type, ptr %a3 + %t5 = call i1 @finch.gen.isInt(%S.ast.Type %t4) + %t6 = xor i1 %t5, true + br i1 %t6, label %then2257, label %endif2259 +then2257: + ret i1 false +endif2259: + %t7 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = call i64 @finch_str_to_int(ptr %a8, ptr @.str.1309, i64 464) + store i64 %t9, ptr %a10 + %t11 = load %S.ast.Type, ptr %a3 + %t12 = call i64 @finch.gen.bitsOf(%S.ast.Type %t11) + store i64 %t12, ptr %a13 + %t14 = load i64, ptr %a10 + %t15 = icmp slt i64 %t14, 0 + br i1 %t15, label %then2260, label %endif2262 +then2260: + %t16 = load %S.ast.Type, ptr %a3 + %t17 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t16) + br i1 %t17, label %then2263, label %endif2265 +then2263: + ret i1 false +endif2265: + %t18 = load i64, ptr %a13 + %t19 = icmp eq i64 %t18, 64 + br i1 %t19, label %then2266, label %endif2268 +then2266: + ret i1 true +endif2268: + %t20 = load i64, ptr %a10 + %t21 = load i64, ptr %a13 + %t22 = sub i64 %t21, 1 + %t23 = shl i64 1, %t22 + %t24 = sub i64 0, %t23 + %t25 = icmp sge i64 %t20, %t24 + ret i1 %t25 +endif2262: + %t26 = load i64, ptr %a13 + %t27 = icmp eq i64 %t26, 64 + br i1 %t27, label %then2269, label %endif2271 +then2269: + ret i1 true +endif2271: + %t28 = load i64, ptr %a13 + %t29 = shl i64 1, %t28 + %t30 = sub i64 %t29, 1 + store i64 %t30, ptr %a31 + %t32 = load %S.ast.Type, ptr %a3 + %t33 = call i1 @finch.gen.isSigned(%S.ast.Type %t32) + br i1 %t33, label %then2272, label %endif2274 +then2272: + %t34 = load i64, ptr %a13 + %t35 = sub i64 %t34, 1 + %t36 = shl i64 1, %t35 + %t37 = sub i64 %t36, 1 + store i64 %t37, ptr %a31 + br label %endif2274 +endif2274: + %t38 = load i64, ptr %a10 + %t39 = load i64, ptr %a31 + %t40 = icmp sle i64 %t38, %t39 + ret i1 %t40 +} + +define internal i64 @finch.gen.findStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2275, label %ok2276 +panic2275: + call void @finch_panic(ptr @.str.1310, i64 486, ptr @.str.1311) + unreachable +ok2276: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 16 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond2277 +for.cond2277: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body2278, label %for.end2280 +for.body2278: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic2281, label %ok2282 +panic2281: + call void @finch_panic(ptr @.str.1312, i64 487, ptr @.str.1313) + unreachable +ok2282: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range2283, label %inrange2284 +range2283: + call void @finch_panic_index(ptr @.str.1314, i64 487, i64 %t15, i64 %t17) + unreachable +inrange2284: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.StructDef, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.StructDef, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from2285 +logic.from2285: + br i1 %t27, label %logic.rhs2286, label %logic.end2287 +logic.rhs2286: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2288, label %ok2289 +panic2288: + call void @finch_panic(ptr @.str.1315, i64 487, ptr @.str.1316) + unreachable +ok2289: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range2290, label %inrange2291 +range2290: + call void @finch_panic_index(ptr @.str.1317, i64 487, i64 %t31, i64 %t33) + unreachable +inrange2291: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend2292 +logic.rend2292: + br label %logic.end2287 +logic.end2287: + %t44 = phi i1 [ false, %logic.from2285 ], [ %t43, %logic.rend2292 ] + br i1 %t44, label %then2293, label %endif2295 +then2293: + %t45 = load i64, ptr %a9 + ret i64 %t45 +endif2295: + br label %for.step2279 +for.step2279: + %t46 = load i64, ptr %a9 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a9 + br label %for.cond2277 +for.end2280: + ret i64 -1 +} + +define internal i64 @finch.gen.findEnum(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2296, label %ok2297 +panic2296: + call void @finch_panic(ptr @.str.1318, i64 495, ptr @.str.1319) + unreachable +ok2297: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond2298 +for.cond2298: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body2299, label %for.end2301 +for.body2299: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic2302, label %ok2303 +panic2302: + call void @finch_panic(ptr @.str.1320, i64 496, ptr @.str.1321) + unreachable +ok2303: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 21 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range2304, label %inrange2305 +range2304: + call void @finch_panic_index(ptr @.str.1322, i64 496, i64 %t15, i64 %t17) + unreachable +inrange2305: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.EnumDef, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from2306 +logic.from2306: + br i1 %t27, label %logic.rhs2307, label %logic.end2308 +logic.rhs2307: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2309, label %ok2310 +panic2309: + call void @finch_panic(ptr @.str.1323, i64 496, ptr @.str.1324) + unreachable +ok2310: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 21 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range2311, label %inrange2312 +range2311: + call void @finch_panic_index(ptr @.str.1325, i64 496, i64 %t31, i64 %t33) + unreachable +inrange2312: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.EnumDef, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend2313 +logic.rend2313: + br label %logic.end2308 +logic.end2308: + %t44 = phi i1 [ false, %logic.from2306 ], [ %t43, %logic.rend2313 ] + br i1 %t44, label %then2314, label %endif2316 +then2314: + %t45 = load i64, ptr %a9 + ret i64 %t45 +endif2316: + br label %for.step2300 +for.step2300: + %t46 = load i64, ptr %a9 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a9 + br label %for.cond2298 +for.end2301: + ret i64 -1 +} + +define internal i64 @finch.gen.findSum(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2317, label %ok2318 +panic2317: + call void @finch_panic(ptr @.str.1326, i64 504, ptr @.str.1327) + unreachable +ok2318: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond2319 +for.cond2319: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body2320, label %for.end2322 +for.body2320: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic2323, label %ok2324 +panic2323: + call void @finch_panic(ptr @.str.1328, i64 505, ptr @.str.1329) + unreachable +ok2324: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 22 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range2325, label %inrange2326 +range2325: + call void @finch_panic_index(ptr @.str.1330, i64 505, i64 %t15, i64 %t17) + unreachable +inrange2326: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.SumDef, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.SumDef, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from2327 +logic.from2327: + br i1 %t27, label %logic.rhs2328, label %logic.end2329 +logic.rhs2328: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2330, label %ok2331 +panic2330: + call void @finch_panic(ptr @.str.1331, i64 505, ptr @.str.1332) + unreachable +ok2331: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 22 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range2332, label %inrange2333 +range2332: + call void @finch_panic_index(ptr @.str.1333, i64 505, i64 %t31, i64 %t33) + unreachable +inrange2333: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.SumDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.SumDef, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend2334 +logic.rend2334: + br label %logic.end2329 +logic.end2329: + %t44 = phi i1 [ false, %logic.from2327 ], [ %t43, %logic.rend2334 ] + br i1 %t44, label %then2335, label %endif2337 +then2335: + %t45 = load i64, ptr %a9 + ret i64 %t45 +endif2337: + br label %for.step2321 +for.step2321: + %t46 = load i64, ptr %a9 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a9 + br label %for.cond2319 +for.end2322: + ret i64 -1 +} + +define internal i64 @finch.gen.progOf(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2338, label %ok2339 +panic2338: + call void @finch_panic(ptr @.str.1334, i64 513, ptr @.str.1335) + unreachable +ok2339: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond2340 +for.cond2340: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body2341, label %for.end2343 +for.body2341: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2344, label %ok2345 +panic2344: + call void @finch_panic(ptr @.str.1336, i64 514, ptr @.str.1337) + unreachable +ok2345: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 0 + %t14 = load i64, ptr %a8 + %t15 = load { ptr, i64, i64 }, ptr %t13 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 %t14, %t16 + br i1 %t17, label %range2346, label %inrange2347 +range2346: + call void @finch_panic_index(ptr @.str.1338, i64 514, i64 %t14, i64 %t16) + unreachable +inrange2347: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i64 %t14 + %t20 = getelementptr inbounds %S.ast.Program, ptr %t19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } %t22, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then2348, label %endif2350 +then2348: + %t27 = load i64, ptr %a8 + ret i64 %t27 +endif2350: + br label %for.step2342 +for.step2342: + %t28 = load i64, ptr %a8 + %t29 = add i64 %t28, 1 + store i64 %t29, ptr %a8 + br label %for.cond2340 +for.end2343: + ret i64 -1 +} + +define internal i1 @finch.gen.imports(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca i64, align 16 + %a23 = alloca i64, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2351, label %ok2352 +panic2351: + call void @finch_panic(ptr @.str.1339, i64 522, ptr @.str.1340) + unreachable +ok2352: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic2353, label %ok2354 +panic2353: + call void @finch_panic(ptr @.str.1341, i64 522, ptr @.str.1342) + unreachable +ok2354: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 14 + %t10 = load { ptr, i64, i64 }, ptr %t9 + %t11 = call i64 @finch.gen.progOf(ptr %t6, { ptr, i64, i64 } %t10) + %t12 = load { ptr, i64, i64 }, ptr %t5 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range2355, label %inrange2356 +range2355: + call void @finch_panic_index(ptr @.str.1343, i64 522, i64 %t11, i64 %t13) + unreachable +inrange2356: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Program, ptr %t15, i64 %t11 + %t17 = getelementptr inbounds %S.ast.Program, ptr %t16, i32 0, i32 2 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a20 + %t21 = load i64, ptr %t18 + %t22 = load ptr, ptr %t17 + store i64 0, ptr %a23 + br label %find.cond2357 +find.cond2357: + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, %t21 + br i1 %t25, label %find.body2358, label %find.end2361 +find.body2358: + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t24 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } %t19, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %find.hit2359, label %find.next2360 +find.hit2359: + store i64 %t24, ptr %a20 + br label %find.end2361 +find.next2360: + %t32 = add i64 %t24, 1 + store i64 %t32, ptr %a23 + br label %find.cond2357 +find.end2361: + %t33 = load i64, ptr %a20 + %t34 = icmp sge i64 %t33, 0 + ret i1 %t34 +} + +define internal %S.ast.Type @finch.gen.resolve(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca %S.ast.Type, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca %S.ast.Type, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca %S.ast.Type, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca %S.ast.Type, align 16 + %a142 = alloca %S.ast.Type, align 16 + %a155 = alloca %S.ast.Type, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca %S.ast.Type, align 16 + %a164 = alloca %S.ast.Type, align 16 + %a181 = alloca i64, align 16 + %a184 = alloca i64, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca i64, align 16 + %a209 = alloca i64, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca %S.ast.Type, align 16 + %a227 = alloca %S.ast.Type, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca i64, align 16 + %a243 = alloca %S.ast.Type, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.1344, i64 5, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then2362, label %endif2364 +then2362: + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 0, %t13 + br i1 %t14, label %range2365, label %inrange2366 +range2365: + call void @finch_panic_index(ptr @.str.1345, i64 527, i64 0, i64 %t13) + unreachable +inrange2366: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = load %S.ast.Node, ptr %a3 + %t19 = call %S.ast.Type @finch.gen.resolve(ptr %t10, %S.ast.Type %t17, %S.ast.Node %t18) + %t20 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t19) + store %S.ast.Type %t19, ptr %a21 + call void @finch.drop.S_ast_Type(ptr %a21) + ret %S.ast.Type %t20 +endif2364: + %t22 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1346, i64 3, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then2367, label %endif2369 +then2367: + %t28 = load ptr, ptr %a1 + %t29 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 0, %t31 + br i1 %t32, label %range2370, label %inrange2371 +range2370: + call void @finch_panic_index(ptr @.str.1347, i64 530, i64 0, i64 %t31) + unreachable +inrange2371: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Type, ptr %t33, i64 0 + %t35 = load %S.ast.Type, ptr %t34 + %t36 = load %S.ast.Node, ptr %a3 + %t37 = call %S.ast.Type @finch.gen.resolve(ptr %t28, %S.ast.Type %t35, %S.ast.Node %t36) + store %S.ast.Type %t37, ptr %a38 + %t39 = load %S.ast.Type, ptr %a38 + %t40 = call i1 @finch.gen.isInt(%S.ast.Type %t39) + %t41 = xor i1 %t40, true + br label %logic.from2372 +logic.from2372: + br i1 %t41, label %logic.rhs2373, label %logic.end2374 +logic.rhs2373: + %t42 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.1348, i64 4, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp eq i32 %t46, 0 + br label %logic.rend2375 +logic.rend2375: + br label %logic.end2374 +logic.end2374: + %t48 = phi i1 [ false, %logic.from2372 ], [ %t47, %logic.rend2375 ] + br label %logic.from2376 +logic.from2376: + br i1 %t48, label %logic.rhs2377, label %logic.end2378 +logic.rhs2377: + %t49 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.1349, i64 4, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp eq i32 %t53, 0 + br label %logic.rend2379 +logic.rend2379: + br label %logic.end2378 +logic.end2378: + %t55 = phi i1 [ false, %logic.from2376 ], [ %t54, %logic.rend2379 ] + br label %logic.from2380 +logic.from2380: + br i1 %t55, label %logic.rhs2381, label %logic.end2382 +logic.rhs2381: + %t56 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.1350, i64 3, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp eq i32 %t60, 0 + br label %logic.rend2383 +logic.rend2383: + br label %logic.end2382 +logic.end2382: + %t62 = phi i1 [ false, %logic.from2380 ], [ %t61, %logic.rend2383 ] + br label %logic.from2384 +logic.from2384: + br i1 %t62, label %logic.rhs2385, label %logic.end2386 +logic.rhs2385: + %t63 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t64 = load { ptr, i64, i64 }, ptr %t63 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.1351, i64 4, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp eq i32 %t67, 0 + br label %logic.rend2387 +logic.rend2387: + br label %logic.end2386 +logic.end2386: + %t69 = phi i1 [ false, %logic.from2384 ], [ %t68, %logic.rend2387 ] + br i1 %t69, label %then2388, label %endif2390 +then2388: + %t70 = load ptr, ptr %a1 + %t71 = load %S.ast.Node, ptr %a3 + %t72 = load %S.ast.Type, ptr %a38 + %t73 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t72) + store { ptr, i64, i64 } { ptr @.str.1352, i64 63, i64 0 }, ptr %a75 + store { ptr, i64, i64 } %t73, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif2390 +endif2390: + %t80 = load ptr, ptr %a1 + %t81 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t82 = load { ptr, i64, i64 }, ptr %t81 + %t83 = extractvalue { ptr, i64, i64 } %t82, 1 + %t84 = icmp uge i64 1, %t83 + br i1 %t84, label %range2391, label %inrange2392 +range2391: + call void @finch_panic_index(ptr @.str.1353, i64 534, i64 1, i64 %t83) + unreachable +inrange2392: + %t85 = extractvalue { ptr, i64, i64 } %t82, 0 + %t86 = getelementptr inbounds %S.ast.Type, ptr %t85, i64 1 + %t87 = load %S.ast.Type, ptr %t86 + %t88 = load %S.ast.Node, ptr %a3 + %t89 = call %S.ast.Type @finch.gen.resolve(ptr %t80, %S.ast.Type %t87, %S.ast.Node %t88) + store %S.ast.Type %t89, ptr %a90 + %t91 = getelementptr inbounds %S.ast.Type, ptr %a90, i32 0, i32 0 + %t92 = load { ptr, i64, i64 }, ptr %t91 + store { ptr, i64, i64 } %t92, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.1354, i64 4, i64 0 }, ptr %a94 + %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) + %t96 = icmp ne i32 %t95, 0 + br i1 %t96, label %then2393, label %endif2395 +then2393: + %t97 = load ptr, ptr %a1 + %t98 = load %S.ast.Node, ptr %a3 + call void @finch.gen.fail(ptr %t97, %S.ast.Node %t98, { ptr, i64, i64 } { ptr @.str.1355, i64 41, i64 0 }) + br label %endif2395 +endif2395: + %t99 = load %S.ast.Type, ptr %a38 + %t100 = load %S.ast.Type, ptr %a90 + %t101 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t99, %S.ast.Type %t100) + call void @finch.drop.S_ast_Type(ptr %a90) + call void @finch.drop.S_ast_Type(ptr %a38) + ret %S.ast.Type %t101 +endif2369: + %t102 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.1356, i64 5, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br i1 %t107, label %then2396, label %endif2398 +then2396: + %t108 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1357, i64 5, i64 0 }, 0 + %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t110 = load i64, ptr %t109 + %t111 = insertvalue %S.ast.Type %t108, i64 %t110, 4 + store %S.ast.Type %t111, ptr %a112 + %t113 = getelementptr inbounds %S.ast.Type, ptr %a112, i32 0, i32 1 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i32 0, i32 1 + %t115 = load ptr, ptr %a1 + %t116 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t117 = load { ptr, i64, i64 }, ptr %t116 + %t118 = extractvalue { ptr, i64, i64 } %t117, 1 + %t119 = icmp uge i64 0, %t118 + br i1 %t119, label %range2399, label %inrange2400 +range2399: + call void @finch_panic_index(ptr @.str.1358, i64 542, i64 0, i64 %t118) + unreachable +inrange2400: + %t120 = extractvalue { ptr, i64, i64 } %t117, 0 + %t121 = getelementptr inbounds %S.ast.Type, ptr %t120, i64 0 + %t122 = load %S.ast.Type, ptr %t121 + %t123 = load %S.ast.Node, ptr %a3 + %t124 = call %S.ast.Type @finch.gen.resolve(ptr %t115, %S.ast.Type %t122, %S.ast.Node %t123) + %t125 = load i64, ptr %t114 + %t126 = add i64 %t125, 1 + call void @finch_arr_reserve(ptr %t113, i64 %t126, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t127 = load ptr, ptr %t113 + %t128 = getelementptr inbounds %S.ast.Type, ptr %t127, i64 %t125 + store %S.ast.Type %t124, ptr %t128 + store i64 %t126, ptr %t114 + %t129 = load %S.ast.Type, ptr %a112 + ret %S.ast.Type %t129 +endif2398: + %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t131 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t131, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.1359, i64 3, i64 0 }, ptr %a133 + %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) + %t135 = icmp ne i32 %t134, 0 + br i1 %t135, label %then2401, label %endif2403 +then2401: + %t136 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 + %t138 = load i64, ptr %t137 + %t139 = icmp eq i64 %t138, 0 + br i1 %t139, label %then2404, label %endif2406 +then2404: + %t140 = load %S.ast.Type, ptr %a2 + store %S.ast.Type %t140, ptr %a141 + call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) + %t143 = load %S.ast.Type, ptr %a142 + ret %S.ast.Type %t143 +endif2406: + %t144 = load ptr, ptr %a1 + %t145 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t146 = load { ptr, i64, i64 }, ptr %t145 + %t147 = extractvalue { ptr, i64, i64 } %t146, 1 + %t148 = icmp uge i64 0, %t147 + br i1 %t148, label %range2407, label %inrange2408 +range2407: + call void @finch_panic_index(ptr @.str.1360, i64 549, i64 0, i64 %t147) + unreachable +inrange2408: + %t149 = extractvalue { ptr, i64, i64 } %t146, 0 + %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 0 + %t151 = load %S.ast.Type, ptr %t150 + %t152 = load %S.ast.Node, ptr %a3 + %t153 = call %S.ast.Type @finch.gen.resolve(ptr %t144, %S.ast.Type %t151, %S.ast.Node %t152) + %t154 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t153) + store %S.ast.Type %t153, ptr %a155 + call void @finch.drop.S_ast_Type(ptr %a155) + ret %S.ast.Type %t154 +endif2403: + %t156 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.1361, i64 5, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) + %t161 = icmp eq i32 %t160, 0 + br i1 %t161, label %then2409, label %endif2411 +then2409: + %t162 = load %S.ast.Type, ptr %a2 + store %S.ast.Type %t162, ptr %a163 + call void @finch.copy.S_ast_Type(ptr %a164, ptr %a163) + %t165 = load %S.ast.Type, ptr %a164 + ret %S.ast.Type %t165 +endif2411: + %t166 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i32 0, i32 1 + %t168 = load i64, ptr %t167 + %t169 = icmp eq i64 %t168, 0 + br label %logic.from2412 +logic.from2412: + br i1 %t169, label %logic.rhs2413, label %logic.end2414 +logic.rhs2413: + %t170 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 + %t172 = load i64, ptr %t171 + %t173 = icmp eq i64 %t172, 0 + br label %logic.rend2415 +logic.rend2415: + br label %logic.end2414 +logic.end2414: + %t174 = phi i1 [ false, %logic.from2412 ], [ %t173, %logic.rend2415 ] + br label %logic.from2416 +logic.from2416: + br i1 %t174, label %logic.rhs2417, label %logic.end2418 +logic.rhs2417: + %t175 = load ptr, ptr %a1 + %t176 = icmp eq ptr %t175, null + br i1 %t176, label %panic2419, label %ok2420 +panic2419: + call void @finch_panic(ptr @.str.1362, i64 555, ptr @.str.1363) + unreachable +ok2420: + %t177 = getelementptr inbounds %S.gen.Gen, ptr %t175, i32 0, i32 18 + %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 + %t179 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t180 = load { ptr, i64, i64 }, ptr %t179 + store i64 -1, ptr %a181 + %t182 = load i64, ptr %t178 + %t183 = load ptr, ptr %t177 + store i64 0, ptr %a184 + br label %find.cond2421 +find.cond2421: + %t185 = load i64, ptr %a184 + %t186 = icmp slt i64 %t185, %t182 + br i1 %t186, label %find.body2422, label %find.end2425 +find.body2422: + %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i64 %t185 + %t188 = load { ptr, i64, i64 }, ptr %t187 + store { ptr, i64, i64 } %t188, ptr %a189 + store { ptr, i64, i64 } %t180, ptr %a190 + %t191 = call i32 @finch_str_eq(ptr %a189, ptr %a190) + %t192 = icmp ne i32 %t191, 0 + br i1 %t192, label %find.hit2423, label %find.next2424 +find.hit2423: + store i64 %t185, ptr %a181 + br label %find.end2425 +find.next2424: + %t193 = add i64 %t185, 1 + store i64 %t193, ptr %a184 + br label %find.cond2421 +find.end2425: + %t194 = load i64, ptr %a181 + %t195 = icmp sge i64 %t194, 0 + br label %logic.rend2426 +logic.rend2426: + br label %logic.end2418 +logic.end2418: + %t196 = phi i1 [ false, %logic.from2416 ], [ %t195, %logic.rend2426 ] + br i1 %t196, label %then2427, label %endif2429 +then2427: + %t197 = load ptr, ptr %a1 + %t198 = icmp eq ptr %t197, null + br i1 %t198, label %panic2430, label %ok2431 +panic2430: + call void @finch_panic(ptr @.str.1364, i64 556, ptr @.str.1365) + unreachable +ok2431: + %t199 = getelementptr inbounds %S.gen.Gen, ptr %t197, i32 0, i32 19 + %t200 = load ptr, ptr %a1 + %t201 = icmp eq ptr %t200, null + br i1 %t201, label %panic2432, label %ok2433 +panic2432: + call void @finch_panic(ptr @.str.1366, i64 556, ptr @.str.1367) + unreachable +ok2433: + %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 18 + %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i32 0, i32 1 + %t204 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t205 = load { ptr, i64, i64 }, ptr %t204 + store i64 -1, ptr %a206 + %t207 = load i64, ptr %t203 + %t208 = load ptr, ptr %t202 + store i64 0, ptr %a209 + br label %find.cond2434 +find.cond2434: + %t210 = load i64, ptr %a209 + %t211 = icmp slt i64 %t210, %t207 + br i1 %t211, label %find.body2435, label %find.end2438 +find.body2435: + %t212 = getelementptr inbounds { ptr, i64, i64 }, ptr %t208, i64 %t210 + %t213 = load { ptr, i64, i64 }, ptr %t212 + store { ptr, i64, i64 } %t213, ptr %a214 + store { ptr, i64, i64 } %t205, ptr %a215 + %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) + %t217 = icmp ne i32 %t216, 0 + br i1 %t217, label %find.hit2436, label %find.next2437 +find.hit2436: + store i64 %t210, ptr %a206 + br label %find.end2438 +find.next2437: + %t218 = add i64 %t210, 1 + store i64 %t218, ptr %a209 + br label %find.cond2434 +find.end2438: + %t219 = load i64, ptr %a206 + %t220 = load { ptr, i64, i64 }, ptr %t199 + %t221 = extractvalue { ptr, i64, i64 } %t220, 1 + %t222 = icmp uge i64 %t219, %t221 + br i1 %t222, label %range2439, label %inrange2440 +range2439: + call void @finch_panic_index(ptr @.str.1368, i64 556, i64 %t219, i64 %t221) + unreachable +inrange2440: + %t223 = extractvalue { ptr, i64, i64 } %t220, 0 + %t224 = getelementptr inbounds %S.ast.Type, ptr %t223, i64 %t219 + %t225 = load %S.ast.Type, ptr %t224 + store %S.ast.Type %t225, ptr %a226 + call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) + %t228 = load %S.ast.Type, ptr %a227 + ret %S.ast.Type %t228 +endif2429: + %t229 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 + %t231 = load i64, ptr %t230 + %t232 = icmp sgt i64 %t231, 0 + br i1 %t232, label %then2441, label %endif2443 +then2441: + store { ptr, i64, i64 } zeroinitializer, ptr %a233 + %t234 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + store i64 0, ptr %a235 + br label %each.cond2444 +each.cond2444: + %t236 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 + %t237 = load i64, ptr %t236 + %t238 = load i64, ptr %a235 + %t239 = icmp slt i64 %t238, %t237 + br i1 %t239, label %each.body2445, label %each.end2447 +each.body2445: + %t240 = load ptr, ptr %t234 + %t241 = getelementptr inbounds %S.ast.Type, ptr %t240, i64 %t238 + %t242 = load %S.ast.Type, ptr %t241 + store %S.ast.Type %t242, ptr %a243 + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a233, i32 0, i32 1 + %t245 = load ptr, ptr %a1 + %t246 = load %S.ast.Type, ptr %a243 + %t247 = load %S.ast.Node, ptr %a3 + %t248 = call %S.ast.Type @finch.gen.resolve(ptr %t245, %S.ast.Type %t246, %S.ast.Node %t247) + %t249 = load i64, ptr %t244 + %t250 = add i64 %t249, 1 + call void @finch_arr_reserve(ptr %a233, i64 %t250, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t251 = load ptr, ptr %a233 + %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i64 %t249 + store %S.ast.Type %t248, ptr %t252 + store i64 %t250, ptr %t244 + br label %each.step2446 +each.step2446: + %t253 = load i64, ptr %a235 + %t254 = add i64 %t253, 1 + store i64 %t254, ptr %a235 + br label %each.cond2444 +each.end2447: + %t255 = load ptr, ptr %a1 + %t256 = icmp eq ptr %t255, null + br i1 %t256, label %panic2448, label %ok2449 +panic2448: + call void @finch_panic(ptr @.str.1369, i64 564, ptr @.str.1370) + unreachable +ok2449: + %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 14 + %t258 = load { ptr, i64, i64 }, ptr %t257 + store { ptr, i64, i64 } %t258, ptr %a259 + call void @finch_str_copy(ptr %a260, ptr %a259) + %t261 = load { ptr, i64, i64 }, ptr %a260 + store { ptr, i64, i64 } %t261, ptr %a262 + %t263 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + %t265 = load i64, ptr %t264 + %t266 = icmp sgt i64 %t265, 0 + br i1 %t266, label %then2450, label %endif2452 +then2450: + %t267 = load ptr, ptr %a1 + %t268 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t269 = load { ptr, i64, i64 }, ptr %t268 + %t270 = call i1 @finch.gen.imports(ptr %t267, { ptr, i64, i64 } %t269) + %t271 = xor i1 %t270, true + br i1 %t271, label %then2453, label %endif2455 +then2453: + %t272 = load ptr, ptr %a1 + %t273 = load %S.ast.Node, ptr %a3 + %t274 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t275 = load { ptr, i64, i64 }, ptr %t274 + store { ptr, i64, i64 } { ptr @.str.1371, i64 1, i64 0 }, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t279, ptr %a281 + store { ptr, i64, i64 } { ptr @.str.1372, i64 36, i64 0 }, ptr %a282 + call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) + store { ptr, i64, i64 } %t279, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a280 + %t285 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t286 = load { ptr, i64, i64 }, ptr %t285 + store { ptr, i64, i64 } %t284, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t284, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.1373, i64 1, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + call void @finch.gen.fail(ptr %t272, %S.ast.Node %t273, { ptr, i64, i64 } %t296) + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_drop(ptr %a297) + br label %endif2455 +endif2455: + %t298 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t299 = load { ptr, i64, i64 }, ptr %t298 + store { ptr, i64, i64 } %t299, ptr %a300 + call void @finch_str_copy(ptr %a301, ptr %a300) + %t302 = load { ptr, i64, i64 }, ptr %a301 + %t303 = load { ptr, i64, i64 }, ptr %a262 + store { ptr, i64, i64 } %t302, ptr %a262 + store { ptr, i64, i64 } %t303, ptr %a304 + call void @finch_str_drop(ptr %a304) + br label %endif2452 +endif2452: + %t305 = load ptr, ptr %a1 + %t306 = load { ptr, i64, i64 }, ptr %a262 + %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t308 = load { ptr, i64, i64 }, ptr %t307 + %t309 = load { ptr, i64, i64 }, ptr %a233 + %t310 = load %S.ast.Node, ptr %a3 + %t311 = call %S.ast.Type @finch.gen.instStruct(ptr %t305, { ptr, i64, i64 } %t306, { ptr, i64, i64 } %t308, { ptr, i64, i64 } %t309, %S.ast.Node %t310) + call void @finch_str_drop(ptr %a262) + call void @finch.drop.arr_S_ast_Type(ptr %a233) + ret %S.ast.Type %t311 +endif2443: + %t312 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t313 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t313, ptr %a314 + store { ptr, i64, i64 } { ptr @.str.1374, i64 1, i64 0 }, ptr %a315 + %t316 = call i32 @finch_str_eq(ptr %a314, ptr %a315) + %t317 = icmp ne i32 %t316, 0 + br i1 %t317, label %then2456, label %endif2458 +then2456: + %t318 = load ptr, ptr %a1 + %t319 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t320 = load { ptr, i64, i64 }, ptr %t319 + %t321 = call i64 @finch.gen.findStruct(ptr %t318, { ptr, i64, i64 } { ptr @.str.1375, i64 1, i64 0 }, { ptr, i64, i64 } %t320) + %t322 = icmp slt i64 %t321, 0 + br i1 %t322, label %then2459, label %endif2461 +then2459: + %t323 = load ptr, ptr %a1 + %t324 = load %S.ast.Node, ptr %a3 + %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t326 = load { ptr, i64, i64 }, ptr %t325 + store { ptr, i64, i64 } { ptr @.str.1376, i64 28, i64 0 }, ptr %a328 + store { ptr, i64, i64 } %t326, ptr %a329 + call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) + %t330 = load { ptr, i64, i64 }, ptr %a327 + store { ptr, i64, i64 } %t330, ptr %a332 + store { ptr, i64, i64 } { ptr @.str.1377, i64 1, i64 0 }, ptr %a333 + call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333) + store { ptr, i64, i64 } %t330, ptr %a334 + call void @finch_str_drop(ptr %a334) + %t335 = load { ptr, i64, i64 }, ptr %a331 + call void @finch.gen.fail(ptr %t323, %S.ast.Node %t324, { ptr, i64, i64 } %t335) + store { ptr, i64, i64 } %t335, ptr %a336 + call void @finch_str_drop(ptr %a336) + br label %endif2461 +endif2461: + %t337 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1378, i64 6, i64 0 }, 0 + %t338 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t339 = load { ptr, i64, i64 }, ptr %t338 + store { ptr, i64, i64 } %t339, ptr %a340 + call void @finch_str_copy(ptr %a341, ptr %a340) + %t342 = load { ptr, i64, i64 }, ptr %a341 + %t343 = insertvalue %S.ast.Type %t337, { ptr, i64, i64 } %t342, 2 + %t344 = insertvalue %S.ast.Type %t343, { ptr, i64, i64 } { ptr @.str.1379, i64 1, i64 0 }, 3 + ret %S.ast.Type %t344 +endif2458: + %t345 = load ptr, ptr %a1 + %t346 = icmp eq ptr %t345, null + br i1 %t346, label %panic2462, label %ok2463 +panic2462: + call void @finch_panic(ptr @.str.1380, i64 579, ptr @.str.1381) + unreachable +ok2463: + %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 14 + %t348 = load { ptr, i64, i64 }, ptr %t347 + store { ptr, i64, i64 } %t348, ptr %a349 + call void @finch_str_copy(ptr %a350, ptr %a349) + %t351 = load { ptr, i64, i64 }, ptr %a350 + store { ptr, i64, i64 } %t351, ptr %a352 + %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i32 0, i32 1 + %t355 = load i64, ptr %t354 + %t356 = icmp sgt i64 %t355, 0 + br i1 %t356, label %then2464, label %endif2466 +then2464: + %t357 = load ptr, ptr %a1 + %t358 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t359 = load { ptr, i64, i64 }, ptr %t358 + %t360 = call i1 @finch.gen.imports(ptr %t357, { ptr, i64, i64 } %t359) + %t361 = xor i1 %t360, true + br i1 %t361, label %then2467, label %endif2469 +then2467: + %t362 = load ptr, ptr %a1 + %t363 = load %S.ast.Node, ptr %a3 + %t364 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t365 = load { ptr, i64, i64 }, ptr %t364 + store { ptr, i64, i64 } { ptr @.str.1382, i64 1, i64 0 }, ptr %a367 + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a366 + store { ptr, i64, i64 } %t369, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1383, i64 36, i64 0 }, ptr %a372 + call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) + store { ptr, i64, i64 } %t369, ptr %a373 + call void @finch_str_drop(ptr %a373) + %t374 = load { ptr, i64, i64 }, ptr %a370 + %t375 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t376 = load { ptr, i64, i64 }, ptr %t375 + store { ptr, i64, i64 } %t374, ptr %a378 + store { ptr, i64, i64 } %t376, ptr %a379 + call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) + store { ptr, i64, i64 } %t374, ptr %a380 + call void @finch_str_drop(ptr %a380) + %t381 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t381, ptr %a383 + store { ptr, i64, i64 } { ptr @.str.1384, i64 1, i64 0 }, ptr %a384 + call void @finch_str_concat(ptr %a382, ptr %a383, ptr %a384) + store { ptr, i64, i64 } %t381, ptr %a385 + call void @finch_str_drop(ptr %a385) + %t386 = load { ptr, i64, i64 }, ptr %a382 + call void @finch.gen.fail(ptr %t362, %S.ast.Node %t363, { ptr, i64, i64 } %t386) + store { ptr, i64, i64 } %t386, ptr %a387 + call void @finch_str_drop(ptr %a387) + br label %endif2469 +endif2469: + %t388 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t389 = load { ptr, i64, i64 }, ptr %t388 + store { ptr, i64, i64 } %t389, ptr %a390 + call void @finch_str_copy(ptr %a391, ptr %a390) + %t392 = load { ptr, i64, i64 }, ptr %a391 + %t393 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t392, ptr %a352 + store { ptr, i64, i64 } %t393, ptr %a394 + call void @finch_str_drop(ptr %a394) + br label %endif2466 +endif2466: + %t395 = load ptr, ptr %a1 + %t396 = load { ptr, i64, i64 }, ptr %a352 + %t397 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t398 = load { ptr, i64, i64 }, ptr %t397 + %t399 = call i64 @finch.gen.findEnum(ptr %t395, { ptr, i64, i64 } %t396, { ptr, i64, i64 } %t398) + %t400 = icmp sge i64 %t399, 0 + br i1 %t400, label %then2470, label %endif2472 +then2470: + %t401 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1385, i64 4, i64 0 }, 0 + %t402 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t403 = load { ptr, i64, i64 }, ptr %t402 + store { ptr, i64, i64 } %t403, ptr %a404 + call void @finch_str_copy(ptr %a405, ptr %a404) + %t406 = load { ptr, i64, i64 }, ptr %a405 + %t407 = insertvalue %S.ast.Type %t401, { ptr, i64, i64 } %t406, 2 + %t408 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t408, ptr %a409 + call void @finch_str_copy(ptr %a410, ptr %a409) + %t411 = load { ptr, i64, i64 }, ptr %a410 + %t412 = insertvalue %S.ast.Type %t407, { ptr, i64, i64 } %t411, 3 + call void @finch_str_drop(ptr %a352) + ret %S.ast.Type %t412 +endif2472: + %t413 = load ptr, ptr %a1 + %t414 = load { ptr, i64, i64 }, ptr %a352 + %t415 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t416 = load { ptr, i64, i64 }, ptr %t415 + %t417 = call i64 @finch.gen.findStruct(ptr %t413, { ptr, i64, i64 } %t414, { ptr, i64, i64 } %t416) + %t418 = icmp slt i64 %t417, 0 + br i1 %t418, label %then2473, label %endif2475 +then2473: + %t419 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t420 = getelementptr inbounds { ptr, i64, i64 }, ptr %t419, i32 0, i32 1 + %t421 = load i64, ptr %t420 + %t422 = icmp eq i64 %t421, 0 + br label %logic.from2476 +logic.from2476: + br i1 %t422, label %logic.rhs2477, label %logic.end2478 +logic.rhs2477: + %t423 = load ptr, ptr %a1 + %t424 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t425 = load { ptr, i64, i64 }, ptr %t424 + %t426 = call i64 @finch.gen.findStruct(ptr %t423, { ptr, i64, i64 } { ptr @.str.1386, i64 1, i64 0 }, { ptr, i64, i64 } %t425) + %t427 = icmp sge i64 %t426, 0 + br label %logic.rend2479 +logic.rend2479: + br label %logic.end2478 +logic.end2478: + %t428 = phi i1 [ false, %logic.from2476 ], [ %t427, %logic.rend2479 ] + br i1 %t428, label %then2480, label %endif2482 +then2480: + %t429 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1387, i64 6, i64 0 }, 0 + %t430 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t431 = load { ptr, i64, i64 }, ptr %t430 + store { ptr, i64, i64 } %t431, ptr %a432 + call void @finch_str_copy(ptr %a433, ptr %a432) + %t434 = load { ptr, i64, i64 }, ptr %a433 + %t435 = insertvalue %S.ast.Type %t429, { ptr, i64, i64 } %t434, 2 + %t436 = insertvalue %S.ast.Type %t435, { ptr, i64, i64 } { ptr @.str.1388, i64 1, i64 0 }, 3 + call void @finch_str_drop(ptr %a352) + ret %S.ast.Type %t436 +endif2482: + %t437 = load ptr, ptr %a1 + %t438 = load %S.ast.Node, ptr %a3 + %t439 = load %S.ast.Type, ptr %a2 + %t440 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t439) + store { ptr, i64, i64 } { ptr @.str.1389, i64 24, i64 0 }, ptr %a442 + store { ptr, i64, i64 } %t440, ptr %a443 + call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443) + store { ptr, i64, i64 } %t440, ptr %a444 + call void @finch_str_drop(ptr %a444) + %t445 = load { ptr, i64, i64 }, ptr %a441 + store { ptr, i64, i64 } %t445, ptr %a447 + store { ptr, i64, i64 } { ptr @.str.1390, i64 1, i64 0 }, ptr %a448 + call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448) + store { ptr, i64, i64 } %t445, ptr %a449 + call void @finch_str_drop(ptr %a449) + %t450 = load { ptr, i64, i64 }, ptr %a446 + call void @finch.gen.fail(ptr %t437, %S.ast.Node %t438, { ptr, i64, i64 } %t450) + store { ptr, i64, i64 } %t450, ptr %a451 + call void @finch_str_drop(ptr %a451) + br label %endif2475 +endif2475: + %t452 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1391, i64 6, i64 0 }, 0 + %t453 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t454 = load { ptr, i64, i64 }, ptr %t453 + store { ptr, i64, i64 } %t454, ptr %a455 + call void @finch_str_copy(ptr %a456, ptr %a455) + %t457 = load { ptr, i64, i64 }, ptr %a456 + %t458 = insertvalue %S.ast.Type %t452, { ptr, i64, i64 } %t457, 2 + %t459 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t459, ptr %a460 + call void @finch_str_copy(ptr %a461, ptr %a460) + %t462 = load { ptr, i64, i64 }, ptr %a461 + %t463 = insertvalue %S.ast.Type %t458, { ptr, i64, i64 } %t462, 3 + call void @finch_str_drop(ptr %a352) + ret %S.ast.Type %t463 +} + +define internal { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1393, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1394, i64 1, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.1396, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1397, i64 0, i64 0 }, ptr %a11 + call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a13 + call void @finch_str_drop(ptr %a13) + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1399, i64 1, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.1400, i64 1, i64 0 }, ptr %a17 + call void @finch_str_replace(ptr %a15, ptr %a14, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1402, i64 1, i64 0 }, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.1403, i64 0, i64 0 }, ptr %a23 + call void @finch_str_replace(ptr %a21, ptr %a20, ptr %a22, ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t18, ptr %a25 + call void @finch_str_drop(ptr %a25) + ret { ptr, i64, i64 } %t24 +} + +define internal { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = icmp eq i64 %t3, 0 + br i1 %t4, label %then2483, label %endif2485 +then2483: + ret { ptr, i64, i64 } { ptr @.str.1404, i64 4, i64 0 } +endif2485: + %t5 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t5, ptr %a6 + call void @finch_str_copy(ptr %a7, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + ret { ptr, i64, i64 } %t8 +} + +define internal { ptr, i64, i64 } @finch.gen.llty(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1405, i64 4, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then2486, label %endif2488 +then2486: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1406, i64 2, i64 0 } +endif2488: + %t14 = load %S.ast.Type, ptr %a2 + %t15 = call i1 @finch.gen.isInt(%S.ast.Type %t14) + br label %logic.from2489 +logic.from2489: + br i1 %t15, label %logic.end2491, label %logic.rhs2490 +logic.rhs2490: + %t16 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1407, i64 4, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.rend2492 +logic.rend2492: + br label %logic.end2491 +logic.end2491: + %t21 = phi i1 [ true, %logic.from2489 ], [ %t20, %logic.rend2492 ] + br i1 %t21, label %then2493, label %endif2495 +then2493: + %t22 = load %S.ast.Type, ptr %a2 + %t23 = call i64 @finch.gen.bitsOf(%S.ast.Type %t22) + call void @finch_str_from_int(ptr %a24, i64 %t23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1408, i64 1, i64 0 }, ptr %a27 + store { ptr, i64, i64 } %t25, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t30 +endif2495: + %t31 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t31, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.1409, i64 5, i64 0 }, ptr %a33 + %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) + %t35 = icmp ne i32 %t34, 0 + br i1 %t35, label %then2496, label %endif2498 +then2496: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1410, i64 6, i64 0 } +endif2498: + %t36 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.1411, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br i1 %t40, label %then2499, label %endif2501 +then2499: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1412, i64 5, i64 0 } +endif2501: + %t41 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1413, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.from2502 +logic.from2502: + br i1 %t45, label %logic.end2504, label %logic.rhs2503 +logic.rhs2503: + %t46 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t46, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.1414, i64 5, i64 0 }, ptr %a48 + %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) + %t50 = icmp ne i32 %t49, 0 + br label %logic.rend2505 +logic.rend2505: + br label %logic.end2504 +logic.end2504: + %t51 = phi i1 [ true, %logic.from2502 ], [ %t50, %logic.rend2505 ] + br i1 %t51, label %then2506, label %endif2508 +then2506: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1415, i64 17, i64 0 } +endif2508: + %t52 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.1416, i64 3, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then2509, label %endif2511 +then2509: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1417, i64 37, i64 0 } +endif2511: + %t57 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.1418, i64 5, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br i1 %t61, label %then2512, label %endif2514 +then2512: + %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t63 = load i64, ptr %t62 + call void @finch_str_from_int(ptr %a64, i64 %t63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.1419, i64 1, i64 0 }, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t65, ptr %a69 + call void @finch_str_drop(ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.1420, i64 3, i64 0 }, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t70, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + %t76 = load ptr, ptr %a1 + %t77 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t78 = load { ptr, i64, i64 }, ptr %t77 + %t79 = extractvalue { ptr, i64, i64 } %t78, 1 + %t80 = icmp uge i64 0, %t79 + br i1 %t80, label %range2515, label %inrange2516 +range2515: + call void @finch_panic_index(ptr @.str.1421, i64 632, i64 0, i64 %t79) + unreachable +inrange2516: + %t81 = extractvalue { ptr, i64, i64 } %t78, 0 + %t82 = getelementptr inbounds %S.ast.Type, ptr %t81, i64 0 + %t83 = load %S.ast.Type, ptr %t82 + %t84 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t76, %S.ast.Type %t83) + store { ptr, i64, i64 } %t75, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t75, ptr %a88 + call void @finch_str_drop(ptr %a88) + store { ptr, i64, i64 } %t84, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t90, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.1422, i64 1, i64 0 }, ptr %a93 + call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) + store { ptr, i64, i64 } %t90, ptr %a94 + call void @finch_str_drop(ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a91 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t95 +endif2514: + %t96 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.1423, i64 4, i64 0 }, ptr %a98 + %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) + %t100 = icmp ne i32 %t99, 0 + br i1 %t100, label %then2517, label %endif2519 +then2517: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1424, i64 3, i64 0 } +endif2519: + %t101 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t101, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.1425, i64 3, i64 0 }, ptr %a103 + %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) + %t105 = icmp ne i32 %t104, 0 + br label %logic.from2520 +logic.from2520: + br i1 %t105, label %logic.end2522, label %logic.rhs2521 +logic.rhs2521: + %t106 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.1426, i64 4, i64 0 }, ptr %a108 + %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) + %t110 = icmp ne i32 %t109, 0 + br label %logic.rend2523 +logic.rend2523: + br label %logic.end2522 +logic.end2522: + %t111 = phi i1 [ true, %logic.from2520 ], [ %t110, %logic.rend2523 ] + br i1 %t111, label %then2524, label %endif2526 +then2524: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1427, i64 3, i64 0 } +endif2526: + %t112 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.1428, i64 4, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br i1 %t116, label %then2527, label %endif2529 +then2527: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1429, i64 4, i64 0 } +endif2529: + %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t118) + store { ptr, i64, i64 } { ptr @.str.1430, i64 3, i64 0 }, ptr %a121 + store { ptr, i64, i64 } %t119, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t124, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.1431, i64 1, i64 0 }, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load { ptr, i64, i64 }, ptr %a125 + %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t131 = load { ptr, i64, i64 }, ptr %t130 + %t132 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t131) + store { ptr, i64, i64 } %t129, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t129, ptr %a136 + call void @finch_str_drop(ptr %a136) + store { ptr, i64, i64 } %t132, ptr %a137 + call void @finch_str_drop(ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a133 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t138 +} + +define internal { ptr, i64, i64 } @finch.gen.retTy(ptr %p0, %S.gen.FnSig %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.FnSig, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.FnSig %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 + %t4 = load i1, ptr %t3 + %t5 = xor i1 %t4, true + br i1 %t5, label %then2530, label %endif2532 +then2530: + %t6 = load ptr, ptr %a1 + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t8 = load %S.ast.Type, ptr %t7 + %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t6, %S.ast.Type %t8) + ret { ptr, i64, i64 } %t9 +endif2532: + store { ptr, i64, i64 } { ptr @.str.1432, i64 2, i64 0 }, ptr %a10 + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1433, i64 4, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp eq i32 %t16, 0 + br i1 %t17, label %then2533, label %endif2535 +then2533: + %t18 = load ptr, ptr %a1 + %t19 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t20 = load %S.ast.Type, ptr %t19 + %t21 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t18, %S.ast.Type %t20) + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t21, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_drop(ptr %a23) + br label %endif2535 +endif2535: + %t24 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1434, i64 6, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1435, i64 21, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1436, i64 1, i64 0 }, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 + %t9 = load i64, ptr %t8 + call void @finch_str_from_int(ptr %a10, i64 %t9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t7, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t7, ptr %a15 + call void @finch_str_drop(ptr %a15) + store { ptr, i64, i64 } %t11, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.1437, i64 1, i64 0 }, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + %t23 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 + %t24 = load i64, ptr %t23 + call void @finch_str_from_int(ptr %a25, i64 %t24) + %t26 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t22, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t22, ptr %a30 + call void @finch_str_drop(ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.1438, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 + %t39 = load i64, ptr %t38 + call void @finch_str_from_int(ptr %a40, i64 %t39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t37, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t37, ptr %a45 + call void @finch_str_drop(ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a42 + ret { ptr, i64, i64 } %t47 +} + +define internal { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load %S.ast.Type, ptr %a1 + %t9 = call i1 @finch.gen.isInt(%S.ast.Type %t8) + br label %logic.from2536 +logic.from2536: + br i1 %t9, label %logic.end2538, label %logic.rhs2537 +logic.rhs2537: + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1439, i64 4, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br label %logic.rend2539 +logic.rend2539: + br label %logic.end2538 +logic.end2538: + %t15 = phi i1 [ true, %logic.from2536 ], [ %t14, %logic.rend2539 ] + br label %logic.from2540 +logic.from2540: + br i1 %t15, label %logic.end2542, label %logic.rhs2541 +logic.rhs2541: + %t16 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1440, i64 4, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.rend2543 +logic.rend2543: + br label %logic.end2542 +logic.end2542: + %t21 = phi i1 [ true, %logic.from2540 ], [ %t20, %logic.rend2543 ] + br i1 %t21, label %then2544, label %endif2546 +then2544: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1441, i64 1, i64 0 } +endif2546: + %t22 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1442, i64 4, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then2547, label %endif2549 +then2547: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1443, i64 5, i64 0 } +endif2549: + %t27 = load %S.ast.Type, ptr %a1 + %t28 = call i1 @finch.gen.isFloat(%S.ast.Type %t27) + br i1 %t28, label %then2550, label %endif2552 +then2550: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1444, i64 3, i64 0 } +endif2552: + %t29 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1445, i64 3, i64 0 }, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br label %logic.from2553 +logic.from2553: + br i1 %t33, label %logic.end2555, label %logic.rhs2554 +logic.rhs2554: + %t34 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1446, i64 4, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.rend2556 +logic.rend2556: + br label %logic.end2555 +logic.end2555: + %t39 = phi i1 [ true, %logic.from2553 ], [ %t38, %logic.rend2556 ] + br i1 %t39, label %then2557, label %endif2559 +then2557: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1447, i64 4, i64 0 } +endif2559: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1448, i64 15, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.gen.sizeOf(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load %S.ast.Type, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t4) + store { ptr, i64, i64 } { ptr @.str.1449, i64 29, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t5, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t5, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1450, i64 26, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + ret { ptr, i64, i64 } %t15 +} + +define internal i1 @finch.gen.owning(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1451, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from2560 +logic.from2560: + br i1 %t8, label %logic.end2562, label %logic.rhs2561 +logic.rhs2561: + %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1452, i64 5, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br label %logic.rend2563 +logic.rend2563: + br label %logic.end2562 +logic.end2562: + %t15 = phi i1 [ true, %logic.from2560 ], [ %t14, %logic.rend2563 ] + br label %logic.from2564 +logic.from2564: + br i1 %t15, label %logic.end2566, label %logic.rhs2565 +logic.rhs2565: + %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.1453, i64 3, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + br label %logic.rend2567 +logic.rend2567: + br label %logic.end2566 +logic.end2566: + %t22 = phi i1 [ true, %logic.from2564 ], [ %t21, %logic.rend2567 ] + br i1 %t22, label %then2568, label %endif2570 +then2568: + ret i1 true +endif2570: + %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1454, i64 6, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br i1 %t28, label %then2571, label %endif2573 +then2571: + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic2574, label %ok2575 +panic2574: + call void @finch_panic(ptr @.str.1455, i64 690, ptr @.str.1456) + unreachable +ok2575: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 16 + %t32 = load ptr, ptr %a1 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t34 = load { ptr, i64, i64 }, ptr %t33 + %t35 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t36 = load { ptr, i64, i64 }, ptr %t35 + %t37 = call i64 @finch.gen.findStruct(ptr %t32, { ptr, i64, i64 } %t34, { ptr, i64, i64 } %t36) + %t38 = load { ptr, i64, i64 }, ptr %t31 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 %t37, %t39 + br i1 %t40, label %range2576, label %inrange2577 +range2576: + call void @finch_panic_index(ptr @.str.1457, i64 690, i64 %t37, i64 %t39) + unreachable +inrange2577: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds %S.gen.StructDef, ptr %t41, i64 %t37 + %t43 = getelementptr inbounds %S.gen.StructDef, ptr %t42, i32 0, i32 16 + %t44 = load i1, ptr %t43 + ret i1 %t44 +endif2573: + ret i1 false +} + +define internal { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.1458, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then2578, label %endif2580 +then2578: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 0, %t10 + br i1 %t11, label %range2581, label %inrange2582 +range2581: + call void @finch_panic_index(ptr @.str.1460, i64 697, i64 0, i64 %t10) + unreachable +inrange2582: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 + %t14 = load %S.ast.Type, ptr %t13 + %t15 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t14) + store { ptr, i64, i64 } { ptr @.str.1459, i64 4, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t20 +endif2580: + %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1461, i64 3, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then2583, label %endif2585 +then2583: + %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 0, %t29 + br i1 %t30, label %range2586, label %inrange2587 +range2586: + call void @finch_panic_index(ptr @.str.1463, i64 700, i64 0, i64 %t29) + unreachable +inrange2587: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 0 + %t33 = load %S.ast.Type, ptr %t32 + %t34 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t33) + store { ptr, i64, i64 } { ptr @.str.1462, i64 4, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1464, i64 1, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range2588, label %inrange2589 +range2588: + call void @finch_panic_index(ptr @.str.1465, i64 700, i64 1, i64 %t47) + unreachable +inrange2589: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Type, ptr %t49, i64 1 + %t51 = load %S.ast.Type, ptr %t50 + %t52 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t51) + store { ptr, i64, i64 } %t44, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t44, ptr %a56 + call void @finch_str_drop(ptr %a56) + store { ptr, i64, i64 } %t52, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a53 + ret { ptr, i64, i64 } %t58 +endif2585: + %t59 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.1466, i64 4, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br i1 %t64, label %then2590, label %endif2592 +then2590: + %t65 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t66 = load { ptr, i64, i64 }, ptr %t65 + %t67 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t66) + store { ptr, i64, i64 } { ptr @.str.1467, i64 2, i64 0 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1468, i64 1, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t77, ptr %a81 + store { ptr, i64, i64 } %t79, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t77, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + ret { ptr, i64, i64 } %t84 +endif2592: + %t85 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1469, i64 6, i64 0 }, ptr %a88 + %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) + %t90 = icmp ne i32 %t89, 0 + br i1 %t90, label %then2593, label %endif2595 +then2593: + %t91 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t92 = load { ptr, i64, i64 }, ptr %t91 + %t93 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t92) + store { ptr, i64, i64 } { ptr @.str.1470, i64 2, i64 0 }, ptr %a95 + store { ptr, i64, i64 } %t93, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.1471, i64 1, i64 0 }, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + %t104 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t105 = load { ptr, i64, i64 }, ptr %t104 + %t106 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t105) + store { ptr, i64, i64 } %t103, ptr %a108 + store { ptr, i64, i64 } %t106, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t103, ptr %a110 + call void @finch_str_drop(ptr %a110) + store { ptr, i64, i64 } %t106, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a107 + ret { ptr, i64, i64 } %t112 +endif2595: + %t113 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t114 = load { ptr, i64, i64 }, ptr %t113 + store { ptr, i64, i64 } %t114, ptr %a115 + call void @finch_str_copy(ptr %a116, ptr %a115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + ret { ptr, i64, i64 } %t117 +} + +define internal { ptr, i64, i64 } @finch.gen.hex(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.1472, i64 16, i64 0 }, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = sdiv i64 %t3, 16 + %t5 = load { ptr, i64, i64 }, ptr %a2 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 %t4, %t6 + br i1 %t7, label %range2596, label %inrange2597 +range2596: + call void @finch_panic_index(ptr @.str.1473, i64 715, i64 %t4, i64 %t6) + unreachable +inrange2597: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds i8, ptr %t8, i64 %t4 + %t10 = load i8, ptr %t9 + call void @finch_str_from_char(ptr %a11, i8 signext %t10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + %t13 = load i64, ptr %a1 + %t14 = srem i64 %t13, 16 + %t15 = load { ptr, i64, i64 }, ptr %a2 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 %t14, %t16 + br i1 %t17, label %range2598, label %inrange2599 +range2598: + call void @finch_panic_index(ptr @.str.1474, i64 715, i64 %t14, i64 %t16) + unreachable +inrange2599: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds i8, ptr %t18, i64 %t14 + %t20 = load i8, ptr %t19 + call void @finch_str_from_char(ptr %a21, i8 signext %t20) + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t12, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t12, ptr %a26 + call void @finch_str_drop(ptr %a26) + store { ptr, i64, i64 } %t22, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a23 + call void @finch_str_drop(ptr %a2) + ret { ptr, i64, i64 } %t28 +} + +define internal { ptr, i64, i64 } @finch.gen.strGlobal(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca i64, align 16 + %a29 = alloca i8, align 16 + %a32 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2600, label %ok2601 +panic2600: + call void @finch_panic(ptr @.str.1475, i64 719, ptr @.str.1476) + unreachable +ok2601: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 8 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + store i64 %t7, ptr %t5 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic2602, label %ok2603 +panic2602: + call void @finch_panic(ptr @.str.1478, i64 720, ptr @.str.1479) + unreachable +ok2603: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 8 + %t11 = load i64, ptr %t10 + call void @finch_str_from_int(ptr %a12, i64 %t11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1477, i64 6, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } zeroinitializer, ptr %a20 + store i64 0, ptr %a21 + br label %each.cond2604 +each.cond2604: + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = load i64, ptr %a21 + %t25 = icmp slt i64 %t24, %t23 + br i1 %t25, label %each.body2605, label %each.end2607 +each.body2605: + %t26 = load ptr, ptr %a2 + %t27 = getelementptr inbounds i8, ptr %t26, i64 %t24 + %t28 = load i8, ptr %t27 + store i8 %t28, ptr %a29 + %t30 = load i8, ptr %a29 + %t31 = zext i8 %t30 to i64 + store i64 %t31, ptr %a32 + %t33 = load i64, ptr %a32 + %t34 = icmp slt i64 %t33, 0 + br i1 %t34, label %then2608, label %endif2610 +then2608: + %t35 = load i64, ptr %a32 + %t36 = add i64 %t35, 256 + store i64 %t36, ptr %a32 + br label %endif2610 +endif2610: + %t37 = load i64, ptr %a32 + %t38 = icmp sge i64 %t37, 32 + br label %logic.from2611 +logic.from2611: + br i1 %t38, label %logic.rhs2612, label %logic.end2613 +logic.rhs2612: + %t39 = load i64, ptr %a32 + %t40 = icmp slt i64 %t39, 127 + br label %logic.rend2614 +logic.rend2614: + br label %logic.end2613 +logic.end2613: + %t41 = phi i1 [ false, %logic.from2611 ], [ %t40, %logic.rend2614 ] + br label %logic.from2615 +logic.from2615: + br i1 %t41, label %logic.rhs2616, label %logic.end2617 +logic.rhs2616: + %t42 = load i8, ptr %a29 + %t43 = icmp ne i8 %t42, 34 + br label %logic.rend2618 +logic.rend2618: + br label %logic.end2617 +logic.end2617: + %t44 = phi i1 [ false, %logic.from2615 ], [ %t43, %logic.rend2618 ] + br label %logic.from2619 +logic.from2619: + br i1 %t44, label %logic.rhs2620, label %logic.end2621 +logic.rhs2620: + %t45 = load i8, ptr %a29 + %t46 = icmp ne i8 %t45, 92 + br label %logic.rend2622 +logic.rend2622: + br label %logic.end2621 +logic.end2621: + %t47 = phi i1 [ false, %logic.from2619 ], [ %t46, %logic.rend2622 ] + br i1 %t47, label %then2623, label %else2624 +then2623: + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t49 = load i8, ptr %a29 + call void @finch_str_from_char(ptr %a50, i8 signext %t49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + %t52 = load i64, ptr %t48 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %a20 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 + store { ptr, i64, i64 } %t51, ptr %t55 + store i64 %t53, ptr %t48 + br label %endif2625 +else2624: + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t57 = load i64, ptr %a32 + %t58 = call { ptr, i64, i64 } @finch.gen.hex(i64 %t57) + store { ptr, i64, i64 } { ptr @.str.1480, i64 1, i64 0 }, ptr %a60 + store { ptr, i64, i64 } %t58, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + %t64 = load i64, ptr %t56 + %t65 = add i64 %t64, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t65, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t66 = load ptr, ptr %a20 + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i64 %t64 + store { ptr, i64, i64 } %t63, ptr %t67 + store i64 %t65, ptr %t56 + br label %endif2625 +endif2625: + br label %each.step2606 +each.step2606: + %t68 = load i64, ptr %a21 + %t69 = add i64 %t68, 1 + store i64 %t69, ptr %a21 + br label %each.cond2604 +each.end2607: + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic2626, label %ok2627 +panic2626: + call void @finch_panic(ptr @.str.1481, i64 733, ptr @.str.1482) + unreachable +ok2627: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 2 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 + %t74 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.1483, i64 34, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a75 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t80 = load i64, ptr %t79 + %t81 = add i64 %t80, 1 + call void @finch_str_from_int(ptr %a82, i64 %t81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t78, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t78, ptr %a87 + call void @finch_str_drop(ptr %a87) + store { ptr, i64, i64 } %t83, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a84 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.1484, i64 9, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1485, i64 0, i64 0 }, ptr %a96 + call void @finch_str_join(ptr %a97, ptr %a20, ptr %a96) + %t98 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t94, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t94, ptr %a102 + call void @finch_str_drop(ptr %a102) + store { ptr, i64, i64 } %t98, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.1486, i64 4, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = load i64, ptr %t73 + %t111 = add i64 %t110, 1 + call void @finch_arr_reserve(ptr %t72, i64 %t111, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t112 = load ptr, ptr %t72 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 %t110 + store { ptr, i64, i64 } %t109, ptr %t113 + store i64 %t111, ptr %t73 + %t114 = load { ptr, i64, i64 }, ptr %a19 + call void @finch.drop.arr_str(ptr %a20) + ret { ptr, i64, i64 } %t114 +} + +define internal %S.gen.Val @finch.gen.strConst(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t3, { ptr, i64, i64 } %t4) + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.1487, i64 6, i64 0 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t11, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.1488, i64 6, i64 0 }, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t11, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a12 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t18 = load i64, ptr %t17 + call void @finch_str_from_int(ptr %a19, i64 %t18) + %t20 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t16, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t16, ptr %a24 + call void @finch_str_drop(ptr %a24) + store { ptr, i64, i64 } %t20, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.1489, i64 9, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t31, 0 + %t33 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1490, i64 3, i64 0 }) + %t34 = insertvalue %S.gen.Val %t32, %S.ast.Type %t33, 1 + %t35 = insertvalue %S.gen.Val %t34, i1 true, 2 + call void @finch_str_drop(ptr %a6) + ret %S.gen.Val %t35 +} + +define internal void @finch.gen.panicIf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1491, i64 5, i64 0 }) + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1492, i64 2, i64 0 }) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load { ptr, i64, i64 }, ptr %a2 + %t13 = load { ptr, i64, i64 }, ptr %a7 + %t14 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.condBr(ptr %t11, { ptr, i64, i64 } %t12, { ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14) + %t15 = load ptr, ptr %a1 + %t16 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.gen.label(ptr %t15, { ptr, i64, i64 } %t16) + %t17 = load ptr, ptr %a1 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2628, label %ok2629 +panic2628: + call void @finch_panic(ptr @.str.1493, i64 749, ptr @.str.1494) + unreachable +ok2629: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 + %t22 = load i64, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %t20 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 %t22, %t24 + br i1 %t25, label %range2630, label %inrange2631 +range2630: + call void @finch_panic_index(ptr @.str.1495, i64 749, i64 %t22, i64 %t24) + unreachable +inrange2631: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t17, { ptr, i64, i64 } %t28) + store { ptr, i64, i64 } %t29, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = load { ptr, i64, i64 }, ptr %a3 + %t33 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t31, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t33, ptr %a34 + %t35 = load ptr, ptr %a1 + %t36 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1496, i64 27, i64 0 }, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1497, i64 6, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 + %t47 = load i64, ptr %t46 + call void @finch_str_from_int(ptr %a48, i64 %t47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t45, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t45, ptr %a53 + call void @finch_str_drop(ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.1498, i64 6, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } %t60, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1499, i64 1, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + call void @finch.gen.emit(ptr %t35, { ptr, i64, i64 } %t71) + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t73, { ptr, i64, i64 } { ptr @.str.1500, i64 11, i64 0 }) + %t74 = load ptr, ptr %a1 + %t75 = icmp eq ptr %t74, null + br i1 %t75, label %panic2632, label %ok2633 +panic2632: + call void @finch_panic(ptr @.str.1501, i64 753, ptr @.str.1502) + unreachable +ok2633: + %t76 = getelementptr inbounds %S.gen.Gen, ptr %t74, i32 0, i32 9 + store i1 true, ptr %t76 + %t77 = load ptr, ptr %a1 + %t78 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.label(ptr %t77, { ptr, i64, i64 } %t78) + call void @finch_str_drop(ptr %a34) + call void @finch_str_drop(ptr %a30) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a7) + ret void +} + +define internal void @finch.gen.boundsCheck(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1503, i64 5, i64 0 }) + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1504, i64 7, i64 0 }) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1505, i64 13, i64 0 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.1506, i64 2, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + %t22 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t21, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t21, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a23 + %t28 = call { ptr, i64, i64 } @finch.gen.op(ptr %t11, { ptr, i64, i64 } %t27) + store { ptr, i64, i64 } %t27, ptr %a29 + call void @finch_str_drop(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = load { ptr, i64, i64 }, ptr %a30 + %t33 = load { ptr, i64, i64 }, ptr %a7 + %t34 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.condBr(ptr %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33, { ptr, i64, i64 } %t34) + %t35 = load ptr, ptr %a1 + %t36 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.gen.label(ptr %t35, { ptr, i64, i64 } %t36) + %t37 = load ptr, ptr %a1 + %t38 = load ptr, ptr %a1 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic2634, label %ok2635 +panic2634: + call void @finch_panic(ptr @.str.1507, i64 763, ptr @.str.1508) + unreachable +ok2635: + %t40 = getelementptr inbounds %S.gen.Gen, ptr %t38, i32 0, i32 1 + %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 + %t42 = load i64, ptr %t41 + %t43 = load { ptr, i64, i64 }, ptr %t40 + %t44 = extractvalue { ptr, i64, i64 } %t43, 1 + %t45 = icmp uge i64 %t42, %t44 + br i1 %t45, label %range2636, label %inrange2637 +range2636: + call void @finch_panic_index(ptr @.str.1509, i64 763, i64 %t42, i64 %t44) + unreachable +inrange2637: + %t46 = extractvalue { ptr, i64, i64 } %t43, 0 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t42 + %t48 = load { ptr, i64, i64 }, ptr %t47 + %t49 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t37, { ptr, i64, i64 } %t48) + store { ptr, i64, i64 } %t49, ptr %a50 + %t51 = load ptr, ptr %a1 + %t52 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.1510, i64 33, i64 0 }, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.1511, i64 6, i64 0 }, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t56, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 + %t63 = load i64, ptr %t62 + call void @finch_str_from_int(ptr %a64, i64 %t63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t61, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t61, ptr %a69 + call void @finch_str_drop(ptr %a69) + store { ptr, i64, i64 } %t65, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.1512, i64 6, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + %t77 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t76, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t82, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.1513, i64 6, i64 0 }, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t82, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a83 + %t88 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t87, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t87, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.1514, i64 1, i64 0 }, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + call void @finch.gen.emit(ptr %t51, { ptr, i64, i64 } %t98) + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t100, { ptr, i64, i64 } { ptr @.str.1515, i64 11, i64 0 }) + %t101 = load ptr, ptr %a1 + %t102 = icmp eq ptr %t101, null + br i1 %t102, label %panic2638, label %ok2639 +panic2638: + call void @finch_panic(ptr @.str.1516, i64 766, ptr @.str.1517) + unreachable +ok2639: + %t103 = getelementptr inbounds %S.gen.Gen, ptr %t101, i32 0, i32 9 + store i1 true, ptr %t103 + %t104 = load ptr, ptr %a1 + %t105 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.label(ptr %t104, { ptr, i64, i64 } %t105) + call void @finch_str_drop(ptr %a50) + call void @finch_str_drop(ptr %a30) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a7) + ret void +} + +define internal %S.gen.Saved @finch.gen.beginHelper(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca %S.gen.Saved, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic2640, label %ok2641 +panic2640: + call void @finch_panic(ptr @.str.1518, i64 781, ptr @.str.1519) + unreachable +ok2641: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 4 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + call void @finch.copy.arr_str(ptr %a7, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + %t9 = insertvalue %S.gen.Saved zeroinitializer, { ptr, i64, i64 } %t8, 0 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic2642, label %ok2643 +panic2642: + call void @finch_panic(ptr @.str.1520, i64 781, ptr @.str.1521) + unreachable +ok2643: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 5 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch.copy.arr_str(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.gen.Saved %t9, { ptr, i64, i64 } %t16, 1 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2644, label %ok2645 +panic2644: + call void @finch_panic(ptr @.str.1522, i64 781, ptr @.str.1523) + unreachable +ok2645: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 6 + %t21 = load i64, ptr %t20 + %t22 = insertvalue %S.gen.Saved %t17, i64 %t21, 2 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic2646, label %ok2647 +panic2646: + call void @finch_panic(ptr @.str.1524, i64 781, ptr @.str.1525) + unreachable +ok2647: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 9 + %t26 = load i1, ptr %t25 + %t27 = insertvalue %S.gen.Saved %t22, i1 %t26, 3 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2648, label %ok2649 +panic2648: + call void @finch_panic(ptr @.str.1526, i64 781, ptr @.str.1527) + unreachable +ok2649: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 36 + %t31 = load i64, ptr %t30 + %t32 = insertvalue %S.gen.Saved %t27, i64 %t31, 4 + store %S.gen.Saved %t32, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic2650, label %ok2651 +panic2650: + call void @finch_panic(ptr @.str.1528, i64 782, ptr @.str.1529) + unreachable +ok2651: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 36 + store i64 -1, ptr %t36 + store { ptr, i64, i64 } zeroinitializer, ptr %a37 + %t38 = load { ptr, i64, i64 }, ptr %a37 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic2652, label %ok2653 +panic2652: + call void @finch_panic(ptr @.str.1530, i64 784, ptr @.str.1531) + unreachable +ok2653: + %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 4 + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch.copy.arr_str(ptr %a43, ptr %a42) + %t44 = load { ptr, i64, i64 }, ptr %a43 + %t45 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t44, ptr %t41 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch.drop.arr_str(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a37 + %t48 = load ptr, ptr %a1 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic2654, label %ok2655 +panic2654: + call void @finch_panic(ptr @.str.1532, i64 785, ptr @.str.1533) + unreachable +ok2655: + %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 5 + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch.copy.arr_str(ptr %a52, ptr %a51) + %t53 = load { ptr, i64, i64 }, ptr %a52 + %t54 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } %t53, ptr %t50 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch.drop.arr_str(ptr %a55) + %t56 = load ptr, ptr %a1 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic2656, label %ok2657 +panic2656: + call void @finch_panic(ptr @.str.1534, i64 786, ptr @.str.1535) + unreachable +ok2657: + %t58 = getelementptr inbounds %S.gen.Gen, ptr %t56, i32 0, i32 6 + store i64 0, ptr %t58 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic2658, label %ok2659 +panic2658: + call void @finch_panic(ptr @.str.1536, i64 787, ptr @.str.1537) + unreachable +ok2659: + %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 9 + store i1 false, ptr %t61 + %t62 = load %S.gen.Saved, ptr %a33 + call void @finch.drop.arr_str(ptr %a37) + ret %S.gen.Saved %t62 +} + +define internal void @finch.gen.endHelper(ptr %p0, %S.gen.Saved %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Saved, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Saved %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2660, label %ok2661 +panic2660: + call void @finch_panic(ptr @.str.1538, i64 792, ptr @.str.1539) + unreachable +ok2661: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 3 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1540, i64 10, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic2662, label %ok2663 +panic2662: + call void @finch_panic(ptr @.str.1541, i64 792, ptr @.str.1542) + unreachable +ok2663: + %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 5 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1543, i64 1, i64 0 }, ptr %a17 + call void @finch_str_join(ptr %a18, ptr %t15, ptr %a17) + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t12, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t12, ptr %a23 + call void @finch_str_drop(ptr %a23) + store { ptr, i64, i64 } %t19, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.1544, i64 1, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic2664, label %ok2665 +panic2664: + call void @finch_panic(ptr @.str.1545, i64 792, ptr @.str.1546) + unreachable +ok2665: + %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 4 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1547, i64 1, i64 0 }, ptr %a35 + call void @finch_str_join(ptr %a36, ptr %t33, ptr %a35) + %t37 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t30, ptr %a39 + store { ptr, i64, i64 } %t37, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t30, ptr %a41 + call void @finch_str_drop(ptr %a41) + store { ptr, i64, i64 } %t37, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } %t43, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.1548, i64 3, i64 0 }, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + %t49 = load i64, ptr %t7 + %t50 = add i64 %t49, 1 + call void @finch_arr_reserve(ptr %t6, i64 %t50, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t51 = load ptr, ptr %t6 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 %t49 + store { ptr, i64, i64 } %t48, ptr %t52 + store i64 %t50, ptr %t7 + %t53 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 0 + %t54 = load { ptr, i64, i64 }, ptr %t53 + %t55 = load ptr, ptr %a1 + %t56 = icmp eq ptr %t55, null + br i1 %t56, label %panic2666, label %ok2667 +panic2666: + call void @finch_panic(ptr @.str.1549, i64 793, ptr @.str.1550) + unreachable +ok2667: + %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 4 + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch.copy.arr_str(ptr %a59, ptr %a58) + %t60 = load { ptr, i64, i64 }, ptr %a59 + %t61 = load { ptr, i64, i64 }, ptr %t57 + store { ptr, i64, i64 } %t60, ptr %t57 + store { ptr, i64, i64 } %t61, ptr %a62 + call void @finch.drop.arr_str(ptr %a62) + %t63 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 1 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic2668, label %ok2669 +panic2668: + call void @finch_panic(ptr @.str.1551, i64 794, ptr @.str.1552) + unreachable +ok2669: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 5 + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch.copy.arr_str(ptr %a69, ptr %a68) + %t70 = load { ptr, i64, i64 }, ptr %a69 + %t71 = load { ptr, i64, i64 }, ptr %t67 + store { ptr, i64, i64 } %t70, ptr %t67 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch.drop.arr_str(ptr %a72) + %t73 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 2 + %t74 = load i64, ptr %t73 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic2670, label %ok2671 +panic2670: + call void @finch_panic(ptr @.str.1553, i64 795, ptr @.str.1554) + unreachable +ok2671: + %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 6 + store i64 %t74, ptr %t77 + %t78 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 3 + %t79 = load i1, ptr %t78 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic2672, label %ok2673 +panic2672: + call void @finch_panic(ptr @.str.1555, i64 796, ptr @.str.1556) + unreachable +ok2673: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 9 + store i1 %t79, ptr %t82 + %t83 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 4 + %t84 = load i64, ptr %t83 + %t85 = load ptr, ptr %a1 + %t86 = icmp eq ptr %t85, null + br i1 %t86, label %panic2674, label %ok2675 +panic2674: + call void @finch_panic(ptr @.str.1557, i64 797, ptr @.str.1558) + unreachable +ok2675: + %t87 = getelementptr inbounds %S.gen.Gen, ptr %t85, i32 0, i32 36 + store i64 %t84, ptr %t87 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.loopStart(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } { ptr @.str.1559, i64 3, i64 0 }) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.store(ptr %t6, { ptr, i64, i64 } { ptr @.str.1560, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1561, i64 1, i64 0 }, { ptr, i64, i64 } %t7) + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1562, i64 6, i64 0 }) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t11, { ptr, i64, i64 } { ptr @.str.1563, i64 6, i64 0 }) + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t14, { ptr, i64, i64 } { ptr @.str.1564, i64 5, i64 0 }) + store { ptr, i64, i64 } %t15, ptr %a16 + %t17 = load ptr, ptr %a1 + %t18 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.br(ptr %t17, { ptr, i64, i64 } %t18) + %t19 = load ptr, ptr %a1 + %t20 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.label(ptr %t19, { ptr, i64, i64 } %t20) + %t21 = load ptr, ptr %a1 + %t22 = load { ptr, i64, i64 }, ptr %a5 + %t23 = call { ptr, i64, i64 } @finch.gen.load(ptr %t21, { ptr, i64, i64 } { ptr @.str.1565, i64 3, i64 0 }, { ptr, i64, i64 } %t22) + store { ptr, i64, i64 } %t23, ptr %a24 + %t25 = load ptr, ptr %a1 + %t26 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1566, i64 13, i64 0 }, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.1567, i64 2, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + %t36 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t35, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t35, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + %t42 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t41) + store { ptr, i64, i64 } %t41, ptr %a43 + call void @finch_str_drop(ptr %a43) + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = load ptr, ptr %a1 + %t46 = load { ptr, i64, i64 }, ptr %a44 + %t47 = load { ptr, i64, i64 }, ptr %a13 + %t48 = load { ptr, i64, i64 }, ptr %a16 + call void @finch.gen.condBr(ptr %t45, { ptr, i64, i64 } %t46, { ptr, i64, i64 } %t47, { ptr, i64, i64 } %t48) + %t49 = load ptr, ptr %a1 + %t50 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.gen.label(ptr %t49, { ptr, i64, i64 } %t50) + %t51 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t51, ptr %a52 + call void @finch_str_copy(ptr %a53, ptr %a52) + %t54 = load { ptr, i64, i64 }, ptr %a53 + %t55 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_copy(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + %t59 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t59, ptr %a60 + call void @finch_str_copy(ptr %a61, ptr %a60) + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_copy(ptr %a65, ptr %a64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + %t67 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t68 = call ptr @finch_alloc(i64 %t67) + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 0 + store { ptr, i64, i64 } %t54, ptr %t69 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 1 + store { ptr, i64, i64 } %t58, ptr %t70 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 2 + store { ptr, i64, i64 } %t62, ptr %t71 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 3 + store { ptr, i64, i64 } %t66, ptr %t72 + %t73 = insertvalue { ptr, i64, i64 } undef, ptr %t68, 0 + %t74 = insertvalue { ptr, i64, i64 } %t73, i64 4, 1 + %t75 = insertvalue { ptr, i64, i64 } %t74, i64 4, 2 + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a16) + call void @finch_str_drop(ptr %a13) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a5) + ret { ptr, i64, i64 } %t75 +} + +define internal void @finch.gen.loopEnd(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 0, %t5 + br i1 %t6, label %range2676, label %inrange2677 +range2676: + call void @finch_panic_index(ptr @.str.1569, i64 817, i64 0, i64 %t5) + unreachable +inrange2677: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + %t10 = call { ptr, i64, i64 } @finch.gen.load(ptr %t3, { ptr, i64, i64 } { ptr @.str.1568, i64 3, i64 0 }, { ptr, i64, i64 } %t9) + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = load ptr, ptr %a1 + %t14 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1571, i64 8, i64 0 }, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1572, i64 3, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + %t24 = call { ptr, i64, i64 } @finch.gen.op(ptr %t13, { ptr, i64, i64 } %t23) + store { ptr, i64, i64 } %t23, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a2 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 0, %t27 + br i1 %t28, label %range2678, label %inrange2679 +range2678: + call void @finch_panic_index(ptr @.str.1573, i64 818, i64 0, i64 %t27) + unreachable +inrange2679: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 + %t31 = load { ptr, i64, i64 }, ptr %t30 + call void @finch.gen.store(ptr %t12, { ptr, i64, i64 } { ptr @.str.1570, i64 3, i64 0 }, { ptr, i64, i64 } %t24, { ptr, i64, i64 } %t31) + store { ptr, i64, i64 } %t24, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load ptr, ptr %a1 + %t34 = load { ptr, i64, i64 }, ptr %a2 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 1, %t35 + br i1 %t36, label %range2680, label %inrange2681 +range2680: + call void @finch_panic_index(ptr @.str.1574, i64 819, i64 1, i64 %t35) + unreachable +inrange2681: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 1 + %t39 = load { ptr, i64, i64 }, ptr %t38 + call void @finch.gen.br(ptr %t33, { ptr, i64, i64 } %t39) + %t40 = load ptr, ptr %a1 + %t41 = load { ptr, i64, i64 }, ptr %a2 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 2, %t42 + br i1 %t43, label %range2682, label %inrange2683 +range2682: + call void @finch_panic_index(ptr @.str.1575, i64 820, i64 2, i64 %t42) + unreachable +inrange2683: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 2 + %t46 = load { ptr, i64, i64 }, ptr %t45 + call void @finch.gen.label(ptr %t40, { ptr, i64, i64 } %t46) + call void @finch_str_drop(ptr %a11) + ret void +} + +define internal void @finch.gen.copyAt(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.1576, i64 3, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp ne i32 %t9, 0 + br i1 %t10, label %then2684, label %else2685 +then2684: + %t11 = load ptr, ptr %a1 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1577, i64 30, i64 0 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.1578, i64 6, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + %t22 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t21, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t21, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t27, ptr %a29 + store { ptr, i64, i64 } { ptr @.str.1579, i64 1, i64 0 }, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t27, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a28 + call void @finch.gen.emit(ptr %t11, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + br label %endif2686 +else2685: + %t34 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.1580, i64 5, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.from2687 +logic.from2687: + br i1 %t39, label %logic.end2689, label %logic.rhs2688 +logic.rhs2688: + %t40 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1581, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.rend2690 +logic.rend2690: + br label %logic.end2689 +logic.end2689: + %t46 = phi i1 [ true, %logic.from2687 ], [ %t45, %logic.rend2690 ] + br label %logic.from2691 +logic.from2691: + br i1 %t46, label %logic.end2693, label %logic.rhs2692 +logic.rhs2692: + %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t48 = load { ptr, i64, i64 }, ptr %t47 + store { ptr, i64, i64 } %t48, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.1582, i64 6, i64 0 }, ptr %a50 + %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) + %t52 = icmp ne i32 %t51, 0 + br label %logic.from2694 +logic.from2694: + br i1 %t52, label %logic.rhs2695, label %logic.end2696 +logic.rhs2695: + %t53 = load ptr, ptr %a1 + %t54 = load %S.ast.Type, ptr %a4 + %t55 = call i1 @finch.gen.owning(ptr %t53, %S.ast.Type %t54) + br label %logic.rend2697 +logic.rend2697: + br label %logic.end2696 +logic.end2696: + %t56 = phi i1 [ false, %logic.from2694 ], [ %t55, %logic.rend2697 ] + br label %logic.rend2698 +logic.rend2698: + br label %logic.end2693 +logic.end2693: + %t57 = phi i1 [ true, %logic.from2691 ], [ %t56, %logic.rend2698 ] + br i1 %t57, label %then2699, label %else2700 +then2699: + %t58 = load ptr, ptr %a1 + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Type, ptr %a4 + %t61 = call { ptr, i64, i64 } @finch.gen.copyFn(ptr %t59, %S.ast.Type %t60) + store { ptr, i64, i64 } { ptr @.str.1583, i64 10, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1584, i64 5, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t71, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.1585, i64 6, i64 0 }, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t82, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t82, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.1586, i64 1, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + call void @finch.gen.emit(ptr %t58, { ptr, i64, i64 } %t93) + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + br label %endif2701 +else2700: + %t95 = load ptr, ptr %a1 + %t96 = load ptr, ptr %a1 + %t97 = load %S.ast.Type, ptr %a4 + %t98 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t97) + %t99 = load ptr, ptr %a1 + %t100 = load ptr, ptr %a1 + %t101 = load %S.ast.Type, ptr %a4 + %t102 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t100, %S.ast.Type %t101) + %t103 = load { ptr, i64, i64 }, ptr %a3 + %t104 = call { ptr, i64, i64 } @finch.gen.load(ptr %t99, { ptr, i64, i64 } %t102, { ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a2 + call void @finch.gen.store(ptr %t95, { ptr, i64, i64 } %t98, { ptr, i64, i64 } %t104, { ptr, i64, i64 } %t106) + store { ptr, i64, i64 } %t98, ptr %a107 + call void @finch_str_drop(ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + br label %endif2701 +endif2701: + br label %endif2686 +endif2686: + ret void +} + +define internal void @finch.drop.S_gen_Saved(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Saved, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Saved, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.copyFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.ast.Type, align 16 + %a47 = alloca %S.ast.Type, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca %S.gen.StructDef, align 16 + %a365 = alloca %S.gen.StructDef, align 16 + %a367 = alloca %S.gen.StructDef, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca i64, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.1587, i64 12, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2702, label %ok2703 +panic2702: + call void @finch_panic(ptr @.str.1588, i64 835, ptr @.str.1589) + unreachable +ok2703: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then2704, label %endif2706 +then2704: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif2706: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2707, label %ok2708 +panic2707: + call void @finch_panic(ptr @.str.1590, i64 838, ptr @.str.1591) + unreachable +ok2708: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1592, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then2709, label %else2710 +then2709: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range2712, label %inrange2713 +range2712: + call void @finch_panic_index(ptr @.str.1593, i64 841, i64 0, i64 %t41) + unreachable +inrange2713: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 + %t45 = load %S.ast.Type, ptr %t44 + store %S.ast.Type %t45, ptr %a46 + call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) + %t48 = load %S.ast.Type, ptr %a47 + store %S.ast.Type %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = load ptr, ptr %a1 + %t52 = load %S.ast.Type, ptr %a49 + %t53 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t51, %S.ast.Type %t52) + store { ptr, i64, i64 } { ptr @.str.1594, i64 55, i64 0 }, ptr %a55 + store { ptr, i64, i64 } %t53, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t53, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t58, ptr %a60 + store { ptr, i64, i64 } { ptr @.str.1595, i64 1, i64 0 }, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + call void @finch.gen.emit(ptr %t50, { ptr, i64, i64 } %t63) + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load ptr, ptr %a1 + %t66 = load %S.ast.Type, ptr %a49 + %t67 = call i1 @finch.gen.owning(ptr %t65, %S.ast.Type %t66) + br i1 %t67, label %then2714, label %endif2716 +then2714: + %t68 = load ptr, ptr %a1 + %t69 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.1596, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1597, i64 4, i64 0 }) + store { ptr, i64, i64 } %t69, ptr %a70 + %t71 = load ptr, ptr %a1 + %t72 = call { ptr, i64, i64 } @finch.gen.load(ptr %t71, { ptr, i64, i64 } { ptr @.str.1598, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1599, i64 4, i64 0 }) + store { ptr, i64, i64 } %t72, ptr %a73 + %t74 = load ptr, ptr %a1 + %t75 = load ptr, ptr %a1 + %t76 = call { ptr, i64, i64 } @finch.gen.op(ptr %t75, { ptr, i64, i64 } { ptr @.str.1601, i64 64, i64 0 }) + %t77 = call { ptr, i64, i64 } @finch.gen.load(ptr %t74, { ptr, i64, i64 } { ptr @.str.1600, i64 3, i64 0 }, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a78 + call void @finch_str_drop(ptr %a78) + store { ptr, i64, i64 } %t77, ptr %a79 + %t80 = load ptr, ptr %a1 + %t81 = load { ptr, i64, i64 }, ptr %a79 + %t82 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t80, { ptr, i64, i64 } %t81) + store { ptr, i64, i64 } %t82, ptr %a83 + %t84 = load ptr, ptr %a1 + %t85 = load ptr, ptr %a1 + %t86 = load %S.ast.Type, ptr %a49 + %t87 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t85, %S.ast.Type %t86) + store { ptr, i64, i64 } { ptr @.str.1602, i64 23, i64 0 }, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t87, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.1603, i64 6, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t97, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.1604, i64 6, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load { ptr, i64, i64 }, ptr %a83 + %t110 = extractvalue { ptr, i64, i64 } %t109, 1 + %t111 = icmp uge i64 3, %t110 + br i1 %t111, label %range2717, label %inrange2718 +range2717: + call void @finch_panic_index(ptr @.str.1605, i64 848, i64 3, i64 %t110) + unreachable +inrange2718: + %t112 = extractvalue { ptr, i64, i64 } %t109, 0 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 3 + %t114 = load { ptr, i64, i64 }, ptr %t113 + store { ptr, i64, i64 } %t108, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t108, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = call { ptr, i64, i64 } @finch.gen.op(ptr %t84, { ptr, i64, i64 } %t119) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t120, ptr %a122 + %t123 = load ptr, ptr %a1 + %t124 = load ptr, ptr %a1 + %t125 = load %S.ast.Type, ptr %a49 + %t126 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t124, %S.ast.Type %t125) + store { ptr, i64, i64 } { ptr @.str.1606, i64 23, i64 0 }, ptr %a128 + store { ptr, i64, i64 } %t126, ptr %a129 + call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) + store { ptr, i64, i64 } %t126, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t131, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.1607, i64 6, i64 0 }, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + %t137 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t136, ptr %a139 + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t136, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + store { ptr, i64, i64 } %t142, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.1608, i64 6, i64 0 }, ptr %a145 + call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) + store { ptr, i64, i64 } %t142, ptr %a146 + call void @finch_str_drop(ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a143 + %t148 = load { ptr, i64, i64 }, ptr %a83 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 3, %t149 + br i1 %t150, label %range2719, label %inrange2720 +range2719: + call void @finch_panic_index(ptr @.str.1609, i64 849, i64 3, i64 %t149) + unreachable +inrange2720: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 3 + %t153 = load { ptr, i64, i64 }, ptr %t152 + store { ptr, i64, i64 } %t147, ptr %a155 + store { ptr, i64, i64 } %t153, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + store { ptr, i64, i64 } %t147, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a154 + %t159 = call { ptr, i64, i64 } @finch.gen.op(ptr %t123, { ptr, i64, i64 } %t158) + store { ptr, i64, i64 } %t158, ptr %a160 + call void @finch_str_drop(ptr %a160) + store { ptr, i64, i64 } %t159, ptr %a161 + %t162 = load ptr, ptr %a1 + %t163 = load { ptr, i64, i64 }, ptr %a122 + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = load %S.ast.Type, ptr %a49 + call void @finch.gen.copyAt(ptr %t162, { ptr, i64, i64 } %t163, { ptr, i64, i64 } %t164, %S.ast.Type %t165) + %t166 = load ptr, ptr %a1 + %t167 = load { ptr, i64, i64 }, ptr %a83 + call void @finch.gen.loopEnd(ptr %t166, { ptr, i64, i64 } %t167) + call void @finch_str_drop(ptr %a161) + call void @finch_str_drop(ptr %a122) + call void @finch.drop.arr_str(ptr %a83) + call void @finch_str_drop(ptr %a79) + call void @finch_str_drop(ptr %a73) + call void @finch_str_drop(ptr %a70) + br label %endif2716 +endif2716: + call void @finch.drop.S_ast_Type(ptr %a49) + br label %endif2711 +else2710: + %t168 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t169 = load { ptr, i64, i64 }, ptr %t168 + store { ptr, i64, i64 } %t169, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.1610, i64 3, i64 0 }, ptr %a171 + %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) + %t173 = icmp ne i32 %t172, 0 + br i1 %t173, label %then2721, label %else2722 +then2721: + %t174 = load ptr, ptr %a1 + %t175 = load ptr, ptr %a1 + %t176 = load %S.ast.Type, ptr %a2 + %t177 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t175, %S.ast.Type %t176) + store { ptr, i64, i64 } { ptr @.str.1611, i64 55, i64 0 }, ptr %a179 + store { ptr, i64, i64 } %t177, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + store { ptr, i64, i64 } %t177, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.1612, i64 1, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + call void @finch.gen.emit(ptr %t174, { ptr, i64, i64 } %t187) + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch_str_drop(ptr %a188) + %t189 = load ptr, ptr %a1 + %t190 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t191 = load { ptr, i64, i64 }, ptr %t190 + %t192 = extractvalue { ptr, i64, i64 } %t191, 1 + %t193 = icmp uge i64 0, %t192 + br i1 %t193, label %range2724, label %inrange2725 +range2724: + call void @finch_panic_index(ptr @.str.1613, i64 855, i64 0, i64 %t192) + unreachable +inrange2725: + %t194 = extractvalue { ptr, i64, i64 } %t191, 0 + %t195 = getelementptr inbounds %S.ast.Type, ptr %t194, i64 0 + %t196 = load %S.ast.Type, ptr %t195 + %t197 = call i1 @finch.gen.owning(ptr %t189, %S.ast.Type %t196) + br label %logic.from2726 +logic.from2726: + br i1 %t197, label %logic.end2728, label %logic.rhs2727 +logic.rhs2727: + %t198 = load ptr, ptr %a1 + %t199 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t200 = load { ptr, i64, i64 }, ptr %t199 + %t201 = extractvalue { ptr, i64, i64 } %t200, 1 + %t202 = icmp uge i64 1, %t201 + br i1 %t202, label %range2729, label %inrange2730 +range2729: + call void @finch_panic_index(ptr @.str.1614, i64 855, i64 1, i64 %t201) + unreachable +inrange2730: + %t203 = extractvalue { ptr, i64, i64 } %t200, 0 + %t204 = getelementptr inbounds %S.ast.Type, ptr %t203, i64 1 + %t205 = load %S.ast.Type, ptr %t204 + %t206 = call i1 @finch.gen.owning(ptr %t198, %S.ast.Type %t205) + br label %logic.rend2731 +logic.rend2731: + br label %logic.end2728 +logic.end2728: + %t207 = phi i1 [ true, %logic.from2726 ], [ %t206, %logic.rend2731 ] + br i1 %t207, label %then2732, label %endif2734 +then2732: + %t208 = load ptr, ptr %a1 + %t209 = load ptr, ptr %a1 + %t210 = load ptr, ptr %a1 + %t211 = load %S.ast.Type, ptr %a2 + %t212 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t210, %S.ast.Type %t211) + store { ptr, i64, i64 } { ptr @.str.1616, i64 23, i64 0 }, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t212, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + store { ptr, i64, i64 } %t217, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.1617, i64 24, i64 0 }, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t217, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + %t223 = call { ptr, i64, i64 } @finch.gen.op(ptr %t209, { ptr, i64, i64 } %t222) + store { ptr, i64, i64 } %t222, ptr %a224 + call void @finch_str_drop(ptr %a224) + %t225 = call { ptr, i64, i64 } @finch.gen.load(ptr %t208, { ptr, i64, i64 } { ptr @.str.1615, i64 3, i64 0 }, { ptr, i64, i64 } %t223) + store { ptr, i64, i64 } %t223, ptr %a226 + call void @finch_str_drop(ptr %a226) + store { ptr, i64, i64 } %t225, ptr %a227 + %t228 = load ptr, ptr %a1 + %t229 = load { ptr, i64, i64 }, ptr %a227 + %t230 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t228, { ptr, i64, i64 } %t229) + store { ptr, i64, i64 } %t230, ptr %a231 + %t232 = load ptr, ptr %a1 + %t233 = load %S.ast.Type, ptr %a2 + %t234 = load { ptr, i64, i64 }, ptr %a231 + %t235 = extractvalue { ptr, i64, i64 } %t234, 1 + %t236 = icmp uge i64 3, %t235 + br i1 %t236, label %range2735, label %inrange2736 +range2735: + call void @finch_panic_index(ptr @.str.1619, i64 859, i64 3, i64 %t235) + unreachable +inrange2736: + %t237 = extractvalue { ptr, i64, i64 } %t234, 0 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 3 + %t239 = load { ptr, i64, i64 }, ptr %t238 + %t240 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t232, { ptr, i64, i64 } { ptr @.str.1618, i64 4, i64 0 }, %S.ast.Type %t233, { ptr, i64, i64 } %t239) + store { ptr, i64, i64 } %t240, ptr %a241 + %t242 = load ptr, ptr %a1 + %t243 = load %S.ast.Type, ptr %a2 + %t244 = load { ptr, i64, i64 }, ptr %a231 + %t245 = extractvalue { ptr, i64, i64 } %t244, 1 + %t246 = icmp uge i64 3, %t245 + br i1 %t246, label %range2737, label %inrange2738 +range2737: + call void @finch_panic_index(ptr @.str.1621, i64 860, i64 3, i64 %t245) + unreachable +inrange2738: + %t247 = extractvalue { ptr, i64, i64 } %t244, 0 + %t248 = getelementptr inbounds { ptr, i64, i64 }, ptr %t247, i64 3 + %t249 = load { ptr, i64, i64 }, ptr %t248 + %t250 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t242, { ptr, i64, i64 } { ptr @.str.1620, i64 4, i64 0 }, %S.ast.Type %t243, { ptr, i64, i64 } %t249) + store { ptr, i64, i64 } %t250, ptr %a251 + %t252 = load ptr, ptr %a1 + %t253 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t252, { ptr, i64, i64 } { ptr @.str.1622, i64 10, i64 0 }) + store { ptr, i64, i64 } %t253, ptr %a254 + %t255 = load ptr, ptr %a1 + %t256 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t255, { ptr, i64, i64 } { ptr @.str.1623, i64 10, i64 0 }) + store { ptr, i64, i64 } %t256, ptr %a257 + %t258 = load ptr, ptr %a1 + %t259 = load ptr, ptr %a1 + %t260 = load ptr, ptr %a1 + %t261 = load ptr, ptr %a1 + %t262 = load ptr, ptr %a1 + %t263 = load %S.ast.Type, ptr %a2 + %t264 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t262, %S.ast.Type %t263) + store { ptr, i64, i64 } { ptr @.str.1626, i64 23, i64 0 }, ptr %a266 + store { ptr, i64, i64 } %t264, ptr %a267 + call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) + store { ptr, i64, i64 } %t264, ptr %a268 + call void @finch_str_drop(ptr %a268) + %t269 = load { ptr, i64, i64 }, ptr %a265 + store { ptr, i64, i64 } %t269, ptr %a271 + store { ptr, i64, i64 } { ptr @.str.1627, i64 6, i64 0 }, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t269, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + %t275 = load { ptr, i64, i64 }, ptr %a241 + store { ptr, i64, i64 } %t274, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + store { ptr, i64, i64 } %t274, ptr %a279 + call void @finch_str_drop(ptr %a279) + %t280 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.1628, i64 14, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t280, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + %t286 = call { ptr, i64, i64 } @finch.gen.op(ptr %t261, { ptr, i64, i64 } %t285) + store { ptr, i64, i64 } %t285, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = call { ptr, i64, i64 } @finch.gen.load(ptr %t260, { ptr, i64, i64 } { ptr @.str.1625, i64 3, i64 0 }, { ptr, i64, i64 } %t286) + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_drop(ptr %a289) + store { ptr, i64, i64 } { ptr @.str.1624, i64 12, i64 0 }, ptr %a291 + store { ptr, i64, i64 } %t288, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + store { ptr, i64, i64 } %t288, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t294, ptr %a296 + store { ptr, i64, i64 } { ptr @.str.1629, i64 3, i64 0 }, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + store { ptr, i64, i64 } %t294, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a295 + %t300 = call { ptr, i64, i64 } @finch.gen.op(ptr %t259, { ptr, i64, i64 } %t299) + store { ptr, i64, i64 } %t299, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a254 + %t303 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.condBr(ptr %t258, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t302, { ptr, i64, i64 } %t303) + store { ptr, i64, i64 } %t300, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load ptr, ptr %a1 + %t306 = load { ptr, i64, i64 }, ptr %a254 + call void @finch.gen.label(ptr %t305, { ptr, i64, i64 } %t306) + %t307 = load ptr, ptr %a1 + %t308 = load ptr, ptr %a1 + %t309 = load { ptr, i64, i64 }, ptr %a251 + %t310 = load %S.ast.Type, ptr %a2 + %t311 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t308, { ptr, i64, i64 } %t309, %S.ast.Type %t310, i64 1) + %t312 = load ptr, ptr %a1 + %t313 = load { ptr, i64, i64 }, ptr %a241 + %t314 = load %S.ast.Type, ptr %a2 + %t315 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t312, { ptr, i64, i64 } %t313, %S.ast.Type %t314, i64 1) + %t316 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t317 = load { ptr, i64, i64 }, ptr %t316 + %t318 = extractvalue { ptr, i64, i64 } %t317, 1 + %t319 = icmp uge i64 0, %t318 + br i1 %t319, label %range2739, label %inrange2740 +range2739: + call void @finch_panic_index(ptr @.str.1630, i64 865, i64 0, i64 %t318) + unreachable +inrange2740: + %t320 = extractvalue { ptr, i64, i64 } %t317, 0 + %t321 = getelementptr inbounds %S.ast.Type, ptr %t320, i64 0 + %t322 = load %S.ast.Type, ptr %t321 + call void @finch.gen.copyAt(ptr %t307, { ptr, i64, i64 } %t311, { ptr, i64, i64 } %t315, %S.ast.Type %t322) + store { ptr, i64, i64 } %t311, ptr %a323 + call void @finch_str_drop(ptr %a323) + store { ptr, i64, i64 } %t315, ptr %a324 + call void @finch_str_drop(ptr %a324) + %t325 = load ptr, ptr %a1 + %t326 = load ptr, ptr %a1 + %t327 = load { ptr, i64, i64 }, ptr %a251 + %t328 = load %S.ast.Type, ptr %a2 + %t329 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t326, { ptr, i64, i64 } %t327, %S.ast.Type %t328, i64 2) + %t330 = load ptr, ptr %a1 + %t331 = load { ptr, i64, i64 }, ptr %a241 + %t332 = load %S.ast.Type, ptr %a2 + %t333 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t330, { ptr, i64, i64 } %t331, %S.ast.Type %t332, i64 2) + %t334 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t335 = load { ptr, i64, i64 }, ptr %t334 + %t336 = extractvalue { ptr, i64, i64 } %t335, 1 + %t337 = icmp uge i64 1, %t336 + br i1 %t337, label %range2741, label %inrange2742 +range2741: + call void @finch_panic_index(ptr @.str.1631, i64 866, i64 1, i64 %t336) + unreachable +inrange2742: + %t338 = extractvalue { ptr, i64, i64 } %t335, 0 + %t339 = getelementptr inbounds %S.ast.Type, ptr %t338, i64 1 + %t340 = load %S.ast.Type, ptr %t339 + call void @finch.gen.copyAt(ptr %t325, { ptr, i64, i64 } %t329, { ptr, i64, i64 } %t333, %S.ast.Type %t340) + store { ptr, i64, i64 } %t329, ptr %a341 + call void @finch_str_drop(ptr %a341) + store { ptr, i64, i64 } %t333, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load ptr, ptr %a1 + %t344 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.br(ptr %t343, { ptr, i64, i64 } %t344) + %t345 = load ptr, ptr %a1 + %t346 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.label(ptr %t345, { ptr, i64, i64 } %t346) + %t347 = load ptr, ptr %a1 + %t348 = load { ptr, i64, i64 }, ptr %a231 + call void @finch.gen.loopEnd(ptr %t347, { ptr, i64, i64 } %t348) + call void @finch_str_drop(ptr %a257) + call void @finch_str_drop(ptr %a254) + call void @finch_str_drop(ptr %a251) + call void @finch_str_drop(ptr %a241) + call void @finch.drop.arr_str(ptr %a231) + call void @finch_str_drop(ptr %a227) + br label %endif2734 +endif2734: + br label %endif2723 +else2722: + %t349 = load ptr, ptr %a1 + %t350 = icmp eq ptr %t349, null + br i1 %t350, label %panic2743, label %ok2744 +panic2743: + call void @finch_panic(ptr @.str.1632, i64 872, ptr @.str.1633) + unreachable +ok2744: + %t351 = getelementptr inbounds %S.gen.Gen, ptr %t349, i32 0, i32 16 + %t352 = load ptr, ptr %a1 + %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t354 = load { ptr, i64, i64 }, ptr %t353 + %t355 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t356 = load { ptr, i64, i64 }, ptr %t355 + %t357 = call i64 @finch.gen.findStruct(ptr %t352, { ptr, i64, i64 } %t354, { ptr, i64, i64 } %t356) + %t358 = load { ptr, i64, i64 }, ptr %t351 + %t359 = extractvalue { ptr, i64, i64 } %t358, 1 + %t360 = icmp uge i64 %t357, %t359 + br i1 %t360, label %range2745, label %inrange2746 +range2745: + call void @finch_panic_index(ptr @.str.1634, i64 872, i64 %t357, i64 %t359) + unreachable +inrange2746: + %t361 = extractvalue { ptr, i64, i64 } %t358, 0 + %t362 = getelementptr inbounds %S.gen.StructDef, ptr %t361, i64 %t357 + %t363 = load %S.gen.StructDef, ptr %t362 + store %S.gen.StructDef %t363, ptr %a364 + call void @finch.copy.S_gen_StructDef(ptr %a365, ptr %a364) + %t366 = load %S.gen.StructDef, ptr %a365 + store %S.gen.StructDef %t366, ptr %a367 + %t368 = load ptr, ptr %a1 + %t369 = load %S.ast.Type, ptr %a2 + %t370 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t368, %S.ast.Type %t369) + store { ptr, i64, i64 } %t370, ptr %a371 + %t372 = load ptr, ptr %a1 + %t373 = load { ptr, i64, i64 }, ptr %a371 + %t374 = load ptr, ptr %a1 + %t375 = load { ptr, i64, i64 }, ptr %a371 + %t376 = call { ptr, i64, i64 } @finch.gen.load(ptr %t374, { ptr, i64, i64 } %t375, { ptr, i64, i64 } { ptr @.str.1635, i64 4, i64 0 }) + call void @finch.gen.store(ptr %t372, { ptr, i64, i64 } %t373, { ptr, i64, i64 } %t376, { ptr, i64, i64 } { ptr @.str.1636, i64 4, i64 0 }) + store { ptr, i64, i64 } %t376, ptr %a377 + call void @finch_str_drop(ptr %a377) + %t378 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 + %t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 + %t380 = load i64, ptr %t379 + store i64 0, ptr %a381 + br label %for.cond2747 +for.cond2747: + %t382 = load i64, ptr %a381 + %t383 = icmp slt i64 %t382, %t380 + br i1 %t383, label %for.body2748, label %for.end2750 +for.body2748: + %t384 = load ptr, ptr %a1 + %t385 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 + %t386 = load i64, ptr %a381 + %t387 = load { ptr, i64, i64 }, ptr %t385 + %t388 = extractvalue { ptr, i64, i64 } %t387, 1 + %t389 = icmp uge i64 %t386, %t388 + br i1 %t389, label %range2751, label %inrange2752 +range2751: + call void @finch_panic_index(ptr @.str.1637, i64 876, i64 %t386, i64 %t388) + unreachable +inrange2752: + %t390 = extractvalue { ptr, i64, i64 } %t387, 0 + %t391 = getelementptr inbounds %S.ast.Type, ptr %t390, i64 %t386 + %t392 = load %S.ast.Type, ptr %t391 + %t393 = call i1 @finch.gen.owning(ptr %t384, %S.ast.Type %t392) + br i1 %t393, label %then2753, label %endif2755 +then2753: + %t394 = load ptr, ptr %a1 + %t395 = load { ptr, i64, i64 }, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1638, i64 23, i64 0 }, ptr %a397 + store { ptr, i64, i64 } %t395, ptr %a398 + call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a396 + store { ptr, i64, i64 } %t399, ptr %a401 + store { ptr, i64, i64 } { ptr @.str.1639, i64 23, i64 0 }, ptr %a402 + call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) + store { ptr, i64, i64 } %t399, ptr %a403 + call void @finch_str_drop(ptr %a403) + %t404 = load { ptr, i64, i64 }, ptr %a400 + %t405 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 3 + %t406 = load i64, ptr %a381 + %t407 = load { ptr, i64, i64 }, ptr %t405 + %t408 = extractvalue { ptr, i64, i64 } %t407, 1 + %t409 = icmp uge i64 %t406, %t408 + br i1 %t409, label %range2756, label %inrange2757 +range2756: + call void @finch_panic_index(ptr @.str.1640, i64 877, i64 %t406, i64 %t408) + unreachable +inrange2757: + %t410 = extractvalue { ptr, i64, i64 } %t407, 0 + %t411 = getelementptr inbounds i64, ptr %t410, i64 %t406 + %t412 = load i64, ptr %t411 + call void @finch_str_from_int(ptr %a413, i64 %t412) + %t414 = load { ptr, i64, i64 }, ptr %a413 + store { ptr, i64, i64 } %t404, ptr %a416 + store { ptr, i64, i64 } %t414, ptr %a417 + call void @finch_str_concat(ptr %a415, ptr %a416, ptr %a417) + store { ptr, i64, i64 } %t404, ptr %a418 + call void @finch_str_drop(ptr %a418) + store { ptr, i64, i64 } %t414, ptr %a419 + call void @finch_str_drop(ptr %a419) + %t420 = load { ptr, i64, i64 }, ptr %a415 + %t421 = call { ptr, i64, i64 } @finch.gen.op(ptr %t394, { ptr, i64, i64 } %t420) + store { ptr, i64, i64 } %t420, ptr %a422 + call void @finch_str_drop(ptr %a422) + store { ptr, i64, i64 } %t421, ptr %a423 + %t424 = load ptr, ptr %a1 + %t425 = load { ptr, i64, i64 }, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1641, i64 23, i64 0 }, ptr %a427 + store { ptr, i64, i64 } %t425, ptr %a428 + call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) + %t429 = load { ptr, i64, i64 }, ptr %a426 + store { ptr, i64, i64 } %t429, ptr %a431 + store { ptr, i64, i64 } { ptr @.str.1642, i64 23, i64 0 }, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 3 + %t436 = load i64, ptr %a381 + %t437 = load { ptr, i64, i64 }, ptr %t435 + %t438 = extractvalue { ptr, i64, i64 } %t437, 1 + %t439 = icmp uge i64 %t436, %t438 + br i1 %t439, label %range2758, label %inrange2759 +range2758: + call void @finch_panic_index(ptr @.str.1643, i64 878, i64 %t436, i64 %t438) + unreachable +inrange2759: + %t440 = extractvalue { ptr, i64, i64 } %t437, 0 + %t441 = getelementptr inbounds i64, ptr %t440, i64 %t436 + %t442 = load i64, ptr %t441 + call void @finch_str_from_int(ptr %a443, i64 %t442) + %t444 = load { ptr, i64, i64 }, ptr %a443 + store { ptr, i64, i64 } %t434, ptr %a446 + store { ptr, i64, i64 } %t444, ptr %a447 + call void @finch_str_concat(ptr %a445, ptr %a446, ptr %a447) + store { ptr, i64, i64 } %t434, ptr %a448 + call void @finch_str_drop(ptr %a448) + store { ptr, i64, i64 } %t444, ptr %a449 + call void @finch_str_drop(ptr %a449) + %t450 = load { ptr, i64, i64 }, ptr %a445 + %t451 = call { ptr, i64, i64 } @finch.gen.op(ptr %t424, { ptr, i64, i64 } %t450) + store { ptr, i64, i64 } %t450, ptr %a452 + call void @finch_str_drop(ptr %a452) + store { ptr, i64, i64 } %t451, ptr %a453 + %t454 = load ptr, ptr %a1 + %t455 = load { ptr, i64, i64 }, ptr %a423 + %t456 = load { ptr, i64, i64 }, ptr %a453 + %t457 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 + %t458 = load i64, ptr %a381 + %t459 = load { ptr, i64, i64 }, ptr %t457 + %t460 = extractvalue { ptr, i64, i64 } %t459, 1 + %t461 = icmp uge i64 %t458, %t460 + br i1 %t461, label %range2760, label %inrange2761 +range2760: + call void @finch_panic_index(ptr @.str.1644, i64 879, i64 %t458, i64 %t460) + unreachable +inrange2761: + %t462 = extractvalue { ptr, i64, i64 } %t459, 0 + %t463 = getelementptr inbounds %S.ast.Type, ptr %t462, i64 %t458 + %t464 = load %S.ast.Type, ptr %t463 + call void @finch.gen.copyAt(ptr %t454, { ptr, i64, i64 } %t455, { ptr, i64, i64 } %t456, %S.ast.Type %t464) + call void @finch_str_drop(ptr %a453) + call void @finch_str_drop(ptr %a423) + br label %endif2755 +endif2755: + br label %for.step2749 +for.step2749: + %t465 = load i64, ptr %a381 + %t466 = add i64 %t465, 1 + store i64 %t466, ptr %a381 + br label %for.cond2747 +for.end2750: + call void @finch_str_drop(ptr %a371) + call void @finch.drop.S_gen_StructDef(ptr %a367) + br label %endif2723 +endif2723: + br label %endif2711 +endif2711: + %t467 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t467, { ptr, i64, i64 } { ptr @.str.1645, i64 8, i64 0 }) + %t468 = load ptr, ptr %a1 + %t469 = load %S.gen.Saved, ptr %a32 + %t470 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1646, i64 21, i64 0 }, ptr %a472 + store { ptr, i64, i64 } %t470, ptr %a473 + call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a471 + store { ptr, i64, i64 } %t474, ptr %a476 + store { ptr, i64, i64 } { ptr @.str.1647, i64 20, i64 0 }, ptr %a477 + call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) + store { ptr, i64, i64 } %t474, ptr %a478 + call void @finch_str_drop(ptr %a478) + %t479 = load { ptr, i64, i64 }, ptr %a475 + call void @finch.gen.endHelper(ptr %t468, %S.gen.Saved %t469, { ptr, i64, i64 } %t479) + store { ptr, i64, i64 } %t479, ptr %a480 + call void @finch_str_drop(ptr %a480) + %t481 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t481 +} + +define internal void @finch.drop.S_gen_Val(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Val, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Val, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.copyValue(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a24 = alloca %S.gen.Val, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + %t7 = xor i1 %t6, true + br i1 %t7, label %then2762, label %endif2764 +then2762: + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch_str_copy(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t11 +endif2764: + %t12 = load ptr, ptr %a1 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_copy(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t16, 0 + %t18 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t18, ptr %a19 + call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) + %t21 = load %S.ast.Type, ptr %a20 + %t22 = insertvalue %S.gen.Val %t17, %S.ast.Type %t21, 1 + %t23 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t12, %S.gen.Val %t22) + store %S.gen.Val %t22, ptr %a24 + call void @finch.drop.S_gen_Val(ptr %a24) + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = load ptr, ptr %a1 + %t28 = load %S.ast.Type, ptr %a3 + %t29 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t27, %S.ast.Type %t28) + %t30 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t26, { ptr, i64, i64 } %t29) + store { ptr, i64, i64 } %t29, ptr %a31 + call void @finch_str_drop(ptr %a31) + store { ptr, i64, i64 } %t30, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = load { ptr, i64, i64 }, ptr %a32 + %t35 = load { ptr, i64, i64 }, ptr %a25 + %t36 = load %S.ast.Type, ptr %a3 + call void @finch.gen.copyAt(ptr %t33, { ptr, i64, i64 } %t34, { ptr, i64, i64 } %t35, %S.ast.Type %t36) + %t37 = load ptr, ptr %a1 + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Type, ptr %a3 + %t40 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t38, %S.ast.Type %t39) + %t41 = load { ptr, i64, i64 }, ptr %a32 + %t42 = call { ptr, i64, i64 } @finch.gen.load(ptr %t37, { ptr, i64, i64 } %t40, { ptr, i64, i64 } %t41) + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_drop(ptr %a43) + call void @finch_str_drop(ptr %a32) + call void @finch_str_drop(ptr %a25) + ret { ptr, i64, i64 } %t42 +} + +define internal void @finch.gen.dropAt(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + %t7 = xor i1 %t6, true + br i1 %t7, label %then2765, label %endif2767 +then2765: + ret void +endif2767: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1648, i64 3, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then2768, label %else2769 +then2768: + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1649, i64 30, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.1650, i64 1, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + call void @finch.gen.emit(ptr %t14, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_drop(ptr %a25) + br label %endif2770 +else2769: + %t26 = load ptr, ptr %a1 + %t27 = load ptr, ptr %a1 + %t28 = load %S.ast.Type, ptr %a3 + %t29 = call { ptr, i64, i64 } @finch.gen.dropFn(ptr %t27, %S.ast.Type %t28) + store { ptr, i64, i64 } { ptr @.str.1651, i64 10, i64 0 }, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } %t34, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.1652, i64 5, i64 0 }, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + %t40 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t39, ptr %a42 + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t39, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.1653, i64 1, i64 0 }, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t45, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + call void @finch.gen.emit(ptr %t26, { ptr, i64, i64 } %t50) + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %endif2770 +endif2770: + ret void +} + +define internal void @finch.gen.dropValue(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca %S.ast.Type, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.gen.Val, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + br i1 %t6, label %then2771, label %endif2773 +then2771: + %t7 = load ptr, ptr %a1 + %t8 = load ptr, ptr %a1 + %t9 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + %t13 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t12, 0 + %t14 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t14, ptr %a15 + call void @finch.copy.S_ast_Type(ptr %a16, ptr %a15) + %t17 = load %S.ast.Type, ptr %a16 + %t18 = insertvalue %S.gen.Val %t13, %S.ast.Type %t17, 1 + %t19 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t8, %S.gen.Val %t18) + store %S.gen.Val %t18, ptr %a20 + call void @finch.drop.S_gen_Val(ptr %a20) + %t21 = load %S.ast.Type, ptr %a3 + call void @finch.gen.dropAt(ptr %t7, { ptr, i64, i64 } %t19, %S.ast.Type %t21) + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_drop(ptr %a22) + br label %endif2773 +endif2773: + ret void +} + +define internal void @finch.gen.release(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 + %t4 = load i1, ptr %t3 + br label %logic.from2774 +logic.from2774: + br i1 %t4, label %logic.rhs2775, label %logic.end2776 +logic.rhs2775: + %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = icmp sgt i64 %t7, 0 + br label %logic.rend2777 +logic.rend2777: + br label %logic.end2776 +logic.end2776: + %t9 = phi i1 [ false, %logic.from2774 ], [ %t8, %logic.rend2777 ] + br label %logic.from2778 +logic.from2778: + br i1 %t9, label %logic.rhs2779, label %logic.end2780 +logic.rhs2779: + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true + br label %logic.rend2781 +logic.rend2781: + br label %logic.end2780 +logic.end2780: + %t14 = phi i1 [ false, %logic.from2778 ], [ %t13, %logic.rend2781 ] + br label %logic.from2782 +logic.from2782: + br i1 %t14, label %logic.rhs2783, label %logic.end2784 +logic.rhs2783: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2785 +logic.rend2785: + br label %logic.end2784 +logic.end2784: + %t19 = phi i1 [ false, %logic.from2782 ], [ %t18, %logic.rend2785 ] + br i1 %t19, label %then2786, label %endif2788 +then2786: + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t24 = load %S.ast.Type, ptr %t23 + call void @finch.gen.dropValue(ptr %t20, { ptr, i64, i64 } %t22, %S.ast.Type %t24) + br label %endif2788 +endif2788: + ret void +} + +define internal i1 @finch.gen.isConstant({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1655, i64 1, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_starts(ptr %a3, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + %t8 = xor i1 %t7, true + ret i1 %t8 +} + +define internal { ptr, i64, i64 } @finch.gen.dropFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.ast.Type, align 16 + %a47 = alloca %S.ast.Type, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.ast.Type, align 16 + %a127 = alloca %S.ast.Type, align 16 + %a135 = alloca %S.ast.Type, align 16 + %a136 = alloca %S.ast.Type, align 16 + %a138 = alloca %S.ast.Type, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca %S.gen.StructDef, align 16 + %a249 = alloca %S.gen.StructDef, align 16 + %a251 = alloca %S.gen.StructDef, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca i64, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.1656, i64 12, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2789, label %ok2790 +panic2789: + call void @finch_panic(ptr @.str.1657, i64 930, ptr @.str.1658) + unreachable +ok2790: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then2791, label %endif2793 +then2791: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif2793: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2794, label %ok2795 +panic2794: + call void @finch_panic(ptr @.str.1659, i64 933, ptr @.str.1660) + unreachable +ok2795: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1661, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then2796, label %else2797 +then2796: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range2799, label %inrange2800 +range2799: + call void @finch_panic_index(ptr @.str.1662, i64 936, i64 0, i64 %t41) + unreachable +inrange2800: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 + %t45 = load %S.ast.Type, ptr %t44 + store %S.ast.Type %t45, ptr %a46 + call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) + %t48 = load %S.ast.Type, ptr %a47 + store %S.ast.Type %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = load %S.ast.Type, ptr %a49 + %t52 = call i1 @finch.gen.owning(ptr %t50, %S.ast.Type %t51) + br i1 %t52, label %then2801, label %endif2803 +then2801: + %t53 = load ptr, ptr %a1 + %t54 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1663, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1664, i64 2, i64 0 }) + store { ptr, i64, i64 } %t54, ptr %a55 + %t56 = load ptr, ptr %a1 + %t57 = load ptr, ptr %a1 + %t58 = call { ptr, i64, i64 } @finch.gen.op(ptr %t57, { ptr, i64, i64 } { ptr @.str.1666, i64 62, i64 0 }) + %t59 = call { ptr, i64, i64 } @finch.gen.load(ptr %t56, { ptr, i64, i64 } { ptr @.str.1665, i64 3, i64 0 }, { ptr, i64, i64 } %t58) + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_drop(ptr %a60) + store { ptr, i64, i64 } %t59, ptr %a61 + %t62 = load ptr, ptr %a1 + %t63 = load { ptr, i64, i64 }, ptr %a61 + %t64 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t62, { ptr, i64, i64 } %t63) + store { ptr, i64, i64 } %t64, ptr %a65 + %t66 = load ptr, ptr %a1 + %t67 = load ptr, ptr %a1 + %t68 = load %S.ast.Type, ptr %a49 + %t69 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t67, %S.ast.Type %t68) + store { ptr, i64, i64 } { ptr @.str.1667, i64 23, i64 0 }, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.1668, i64 6, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + %t80 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t79, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t79, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1669, i64 6, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = load { ptr, i64, i64 }, ptr %a65 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 3, %t92 + br i1 %t93, label %range2804, label %inrange2805 +range2804: + call void @finch_panic_index(ptr @.str.1670, i64 941, i64 3, i64 %t92) + unreachable +inrange2805: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 3 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t90, ptr %a98 + store { ptr, i64, i64 } %t96, ptr %a99 + call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) + store { ptr, i64, i64 } %t90, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a97 + %t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t66, { ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t101, ptr %a103 + call void @finch_str_drop(ptr %a103) + store { ptr, i64, i64 } %t102, ptr %a104 + %t105 = load ptr, ptr %a1 + %t106 = load { ptr, i64, i64 }, ptr %a104 + %t107 = load %S.ast.Type, ptr %a49 + call void @finch.gen.dropAt(ptr %t105, { ptr, i64, i64 } %t106, %S.ast.Type %t107) + %t108 = load ptr, ptr %a1 + %t109 = load { ptr, i64, i64 }, ptr %a65 + call void @finch.gen.loopEnd(ptr %t108, { ptr, i64, i64 } %t109) + call void @finch_str_drop(ptr %a104) + call void @finch.drop.arr_str(ptr %a65) + call void @finch_str_drop(ptr %a61) + call void @finch_str_drop(ptr %a55) + br label %endif2803 +endif2803: + %t110 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t110, { ptr, i64, i64 } { ptr @.str.1671, i64 33, i64 0 }) + call void @finch.drop.S_ast_Type(ptr %a49) + br label %endif2798 +else2797: + %t111 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.1672, i64 3, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br i1 %t116, label %then2806, label %else2807 +then2806: + %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = extractvalue { ptr, i64, i64 } %t118, 1 + %t120 = icmp uge i64 0, %t119 + br i1 %t120, label %range2809, label %inrange2810 +range2809: + call void @finch_panic_index(ptr @.str.1673, i64 947, i64 0, i64 %t119) + unreachable +inrange2810: + %t121 = extractvalue { ptr, i64, i64 } %t118, 0 + %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 0 + %t123 = load %S.ast.Type, ptr %t122 + store %S.ast.Type %t123, ptr %a124 + call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) + %t126 = load %S.ast.Type, ptr %a125 + store %S.ast.Type %t126, ptr %a127 + %t128 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t129 = load { ptr, i64, i64 }, ptr %t128 + %t130 = extractvalue { ptr, i64, i64 } %t129, 1 + %t131 = icmp uge i64 1, %t130 + br i1 %t131, label %range2811, label %inrange2812 +range2811: + call void @finch_panic_index(ptr @.str.1674, i64 948, i64 1, i64 %t130) + unreachable +inrange2812: + %t132 = extractvalue { ptr, i64, i64 } %t129, 0 + %t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i64 1 + %t134 = load %S.ast.Type, ptr %t133 + store %S.ast.Type %t134, ptr %a135 + call void @finch.copy.S_ast_Type(ptr %a136, ptr %a135) + %t137 = load %S.ast.Type, ptr %a136 + store %S.ast.Type %t137, ptr %a138 + %t139 = load ptr, ptr %a1 + %t140 = load %S.ast.Type, ptr %a127 + %t141 = call i1 @finch.gen.owning(ptr %t139, %S.ast.Type %t140) + br label %logic.from2813 +logic.from2813: + br i1 %t141, label %logic.end2815, label %logic.rhs2814 +logic.rhs2814: + %t142 = load ptr, ptr %a1 + %t143 = load %S.ast.Type, ptr %a138 + %t144 = call i1 @finch.gen.owning(ptr %t142, %S.ast.Type %t143) + br label %logic.rend2816 +logic.rend2816: + br label %logic.end2815 +logic.end2815: + %t145 = phi i1 [ true, %logic.from2813 ], [ %t144, %logic.rend2816 ] + br i1 %t145, label %then2817, label %endif2819 +then2817: + %t146 = load ptr, ptr %a1 + %t147 = load ptr, ptr %a1 + %t148 = load ptr, ptr %a1 + %t149 = load %S.ast.Type, ptr %a2 + %t150 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t148, %S.ast.Type %t149) + store { ptr, i64, i64 } { ptr @.str.1676, i64 23, i64 0 }, ptr %a152 + store { ptr, i64, i64 } %t150, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + store { ptr, i64, i64 } %t155, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.1677, i64 22, i64 0 }, ptr %a158 + call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) + store { ptr, i64, i64 } %t155, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load { ptr, i64, i64 }, ptr %a156 + %t161 = call { ptr, i64, i64 } @finch.gen.op(ptr %t147, { ptr, i64, i64 } %t160) + store { ptr, i64, i64 } %t160, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = call { ptr, i64, i64 } @finch.gen.load(ptr %t146, { ptr, i64, i64 } { ptr @.str.1675, i64 3, i64 0 }, { ptr, i64, i64 } %t161) + store { ptr, i64, i64 } %t161, ptr %a164 + call void @finch_str_drop(ptr %a164) + store { ptr, i64, i64 } %t163, ptr %a165 + %t166 = load ptr, ptr %a1 + %t167 = load { ptr, i64, i64 }, ptr %a165 + %t168 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t166, { ptr, i64, i64 } %t167) + store { ptr, i64, i64 } %t168, ptr %a169 + %t170 = load ptr, ptr %a1 + %t171 = load %S.ast.Type, ptr %a2 + %t172 = load { ptr, i64, i64 }, ptr %a169 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 3, %t173 + br i1 %t174, label %range2820, label %inrange2821 +range2820: + call void @finch_panic_index(ptr @.str.1679, i64 952, i64 3, i64 %t173) + unreachable +inrange2821: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i64 3 + %t177 = load { ptr, i64, i64 }, ptr %t176 + %t178 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t170, { ptr, i64, i64 } { ptr @.str.1678, i64 2, i64 0 }, %S.ast.Type %t171, { ptr, i64, i64 } %t177) + store { ptr, i64, i64 } %t178, ptr %a179 + %t180 = load ptr, ptr %a1 + %t181 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t180, { ptr, i64, i64 } { ptr @.str.1680, i64 10, i64 0 }) + store { ptr, i64, i64 } %t181, ptr %a182 + %t183 = load ptr, ptr %a1 + %t184 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t183, { ptr, i64, i64 } { ptr @.str.1681, i64 10, i64 0 }) + store { ptr, i64, i64 } %t184, ptr %a185 + %t186 = load ptr, ptr %a1 + %t187 = load ptr, ptr %a1 + %t188 = load ptr, ptr %a1 + %t189 = load ptr, ptr %a1 + %t190 = load { ptr, i64, i64 }, ptr %a179 + %t191 = load %S.ast.Type, ptr %a2 + %t192 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t189, { ptr, i64, i64 } %t190, %S.ast.Type %t191, i64 0) + %t193 = call { ptr, i64, i64 } @finch.gen.load(ptr %t188, { ptr, i64, i64 } { ptr @.str.1683, i64 3, i64 0 }, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a194 + call void @finch_str_drop(ptr %a194) + store { ptr, i64, i64 } { ptr @.str.1682, i64 12, i64 0 }, ptr %a196 + store { ptr, i64, i64 } %t193, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t193, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + store { ptr, i64, i64 } %t199, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.1684, i64 3, i64 0 }, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t199, ptr %a203 + call void @finch_str_drop(ptr %a203) + %t204 = load { ptr, i64, i64 }, ptr %a200 + %t205 = call { ptr, i64, i64 } @finch.gen.op(ptr %t187, { ptr, i64, i64 } %t204) + store { ptr, i64, i64 } %t204, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a182 + %t208 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.condBr(ptr %t186, { ptr, i64, i64 } %t205, { ptr, i64, i64 } %t207, { ptr, i64, i64 } %t208) + store { ptr, i64, i64 } %t205, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load ptr, ptr %a1 + %t211 = load { ptr, i64, i64 }, ptr %a182 + call void @finch.gen.label(ptr %t210, { ptr, i64, i64 } %t211) + %t212 = load ptr, ptr %a1 + %t213 = load ptr, ptr %a1 + %t214 = load { ptr, i64, i64 }, ptr %a179 + %t215 = load %S.ast.Type, ptr %a2 + %t216 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t213, { ptr, i64, i64 } %t214, %S.ast.Type %t215, i64 1) + %t217 = load %S.ast.Type, ptr %a127 + call void @finch.gen.dropAt(ptr %t212, { ptr, i64, i64 } %t216, %S.ast.Type %t217) + store { ptr, i64, i64 } %t216, ptr %a218 + call void @finch_str_drop(ptr %a218) + %t219 = load ptr, ptr %a1 + %t220 = load ptr, ptr %a1 + %t221 = load { ptr, i64, i64 }, ptr %a179 + %t222 = load %S.ast.Type, ptr %a2 + %t223 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t220, { ptr, i64, i64 } %t221, %S.ast.Type %t222, i64 2) + %t224 = load %S.ast.Type, ptr %a138 + call void @finch.gen.dropAt(ptr %t219, { ptr, i64, i64 } %t223, %S.ast.Type %t224) + store { ptr, i64, i64 } %t223, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load ptr, ptr %a1 + %t227 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.br(ptr %t226, { ptr, i64, i64 } %t227) + %t228 = load ptr, ptr %a1 + %t229 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.label(ptr %t228, { ptr, i64, i64 } %t229) + %t230 = load ptr, ptr %a1 + %t231 = load { ptr, i64, i64 }, ptr %a169 + call void @finch.gen.loopEnd(ptr %t230, { ptr, i64, i64 } %t231) + call void @finch_str_drop(ptr %a185) + call void @finch_str_drop(ptr %a182) + call void @finch_str_drop(ptr %a179) + call void @finch.drop.arr_str(ptr %a169) + call void @finch_str_drop(ptr %a165) + br label %endif2819 +endif2819: + %t232 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t232, { ptr, i64, i64 } { ptr @.str.1685, i64 33, i64 0 }) + call void @finch.drop.S_ast_Type(ptr %a138) + call void @finch.drop.S_ast_Type(ptr %a127) + br label %endif2808 +else2807: + %t233 = load ptr, ptr %a1 + %t234 = icmp eq ptr %t233, null + br i1 %t234, label %panic2822, label %ok2823 +panic2822: + call void @finch_panic(ptr @.str.1686, i64 965, ptr @.str.1687) + unreachable +ok2823: + %t235 = getelementptr inbounds %S.gen.Gen, ptr %t233, i32 0, i32 16 + %t236 = load ptr, ptr %a1 + %t237 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = call i64 @finch.gen.findStruct(ptr %t236, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t240) + %t242 = load { ptr, i64, i64 }, ptr %t235 + %t243 = extractvalue { ptr, i64, i64 } %t242, 1 + %t244 = icmp uge i64 %t241, %t243 + br i1 %t244, label %range2824, label %inrange2825 +range2824: + call void @finch_panic_index(ptr @.str.1688, i64 965, i64 %t241, i64 %t243) + unreachable +inrange2825: + %t245 = extractvalue { ptr, i64, i64 } %t242, 0 + %t246 = getelementptr inbounds %S.gen.StructDef, ptr %t245, i64 %t241 + %t247 = load %S.gen.StructDef, ptr %t246 + store %S.gen.StructDef %t247, ptr %a248 + call void @finch.copy.S_gen_StructDef(ptr %a249, ptr %a248) + %t250 = load %S.gen.StructDef, ptr %a249 + store %S.gen.StructDef %t250, ptr %a251 + %t252 = load ptr, ptr %a1 + %t253 = load %S.ast.Type, ptr %a2 + %t254 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t252, %S.ast.Type %t253) + store { ptr, i64, i64 } %t254, ptr %a255 + %t256 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 + %t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t256, i32 0, i32 1 + %t258 = load i64, ptr %t257 + store i64 0, ptr %a259 + br label %for.cond2826 +for.cond2826: + %t260 = load i64, ptr %a259 + %t261 = icmp slt i64 %t260, %t258 + br i1 %t261, label %for.body2827, label %for.end2829 +for.body2827: + %t262 = load ptr, ptr %a1 + %t263 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 + %t264 = load i64, ptr %a259 + %t265 = load { ptr, i64, i64 }, ptr %t263 + %t266 = extractvalue { ptr, i64, i64 } %t265, 1 + %t267 = icmp uge i64 %t264, %t266 + br i1 %t267, label %range2830, label %inrange2831 +range2830: + call void @finch_panic_index(ptr @.str.1689, i64 968, i64 %t264, i64 %t266) + unreachable +inrange2831: + %t268 = extractvalue { ptr, i64, i64 } %t265, 0 + %t269 = getelementptr inbounds %S.ast.Type, ptr %t268, i64 %t264 + %t270 = load %S.ast.Type, ptr %t269 + %t271 = call i1 @finch.gen.owning(ptr %t262, %S.ast.Type %t270) + br i1 %t271, label %then2832, label %endif2834 +then2832: + %t272 = load ptr, ptr %a1 + %t273 = load ptr, ptr %a1 + %t274 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } { ptr @.str.1690, i64 23, i64 0 }, ptr %a276 + store { ptr, i64, i64 } %t274, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a275 + store { ptr, i64, i64 } %t278, ptr %a280 + store { ptr, i64, i64 } { ptr @.str.1691, i64 21, i64 0 }, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + %t284 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 3 + %t285 = load i64, ptr %a259 + %t286 = load { ptr, i64, i64 }, ptr %t284 + %t287 = extractvalue { ptr, i64, i64 } %t286, 1 + %t288 = icmp uge i64 %t285, %t287 + br i1 %t288, label %range2835, label %inrange2836 +range2835: + call void @finch_panic_index(ptr @.str.1692, i64 969, i64 %t285, i64 %t287) + unreachable +inrange2836: + %t289 = extractvalue { ptr, i64, i64 } %t286, 0 + %t290 = getelementptr inbounds i64, ptr %t289, i64 %t285 + %t291 = load i64, ptr %t290 + call void @finch_str_from_int(ptr %a292, i64 %t291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t283, ptr %a295 + store { ptr, i64, i64 } %t293, ptr %a296 + call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) + store { ptr, i64, i64 } %t283, ptr %a297 + call void @finch_str_drop(ptr %a297) + store { ptr, i64, i64 } %t293, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a294 + %t300 = call { ptr, i64, i64 } @finch.gen.op(ptr %t273, { ptr, i64, i64 } %t299) + store { ptr, i64, i64 } %t299, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 + %t303 = load i64, ptr %a259 + %t304 = load { ptr, i64, i64 }, ptr %t302 + %t305 = extractvalue { ptr, i64, i64 } %t304, 1 + %t306 = icmp uge i64 %t303, %t305 + br i1 %t306, label %range2837, label %inrange2838 +range2837: + call void @finch_panic_index(ptr @.str.1693, i64 969, i64 %t303, i64 %t305) + unreachable +inrange2838: + %t307 = extractvalue { ptr, i64, i64 } %t304, 0 + %t308 = getelementptr inbounds %S.ast.Type, ptr %t307, i64 %t303 + %t309 = load %S.ast.Type, ptr %t308 + call void @finch.gen.dropAt(ptr %t272, { ptr, i64, i64 } %t300, %S.ast.Type %t309) + store { ptr, i64, i64 } %t300, ptr %a310 + call void @finch_str_drop(ptr %a310) + br label %endif2834 +endif2834: + br label %for.step2828 +for.step2828: + %t311 = load i64, ptr %a259 + %t312 = add i64 %t311, 1 + store i64 %t312, ptr %a259 + br label %for.cond2826 +for.end2829: + call void @finch_str_drop(ptr %a255) + call void @finch.drop.S_gen_StructDef(ptr %a251) + br label %endif2808 +endif2808: + br label %endif2798 +endif2798: + %t313 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t313, { ptr, i64, i64 } { ptr @.str.1694, i64 8, i64 0 }) + %t314 = load ptr, ptr %a1 + %t315 = load %S.gen.Saved, ptr %a32 + %t316 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1695, i64 21, i64 0 }, ptr %a318 + store { ptr, i64, i64 } %t316, ptr %a319 + call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a317 + store { ptr, i64, i64 } %t320, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.1696, i64 8, i64 0 }, ptr %a323 + call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) + store { ptr, i64, i64 } %t320, ptr %a324 + call void @finch_str_drop(ptr %a324) + %t325 = load { ptr, i64, i64 }, ptr %a321 + call void @finch.gen.endHelper(ptr %t314, %S.gen.Saved %t315, { ptr, i64, i64 } %t325) + store { ptr, i64, i64 } %t325, ptr %a326 + call void @finch_str_drop(ptr %a326) + %t327 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t327 +} + +define internal void @finch.gen.hold(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.ast.Type, align 16 + %a33 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 + %t4 = load i1, ptr %t3 + br label %logic.from2839 +logic.from2839: + br i1 %t4, label %logic.rhs2840, label %logic.end2841 +logic.rhs2840: + %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = icmp sgt i64 %t7, 0 + br label %logic.rend2842 +logic.rend2842: + br label %logic.end2841 +logic.end2841: + %t9 = phi i1 [ false, %logic.from2839 ], [ %t8, %logic.rend2842 ] + br label %logic.from2843 +logic.from2843: + br i1 %t9, label %logic.rhs2844, label %logic.end2845 +logic.rhs2844: + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true + br label %logic.rend2846 +logic.rend2846: + br label %logic.end2845 +logic.end2845: + %t14 = phi i1 [ false, %logic.from2843 ], [ %t13, %logic.rend2846 ] + br label %logic.from2847 +logic.from2847: + br i1 %t14, label %logic.rhs2848, label %logic.end2849 +logic.rhs2848: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2850 +logic.rend2850: + br label %logic.end2849 +logic.end2849: + %t19 = phi i1 [ false, %logic.from2847 ], [ %t18, %logic.rend2850 ] + br i1 %t19, label %then2851, label %endif2853 +then2851: + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic2854, label %ok2855 +panic2854: + call void @finch_panic(ptr @.str.1697, i64 982, ptr @.str.1698) + unreachable +ok2855: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 11 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t25 = load { ptr, i64, i64 }, ptr %t24 + store { ptr, i64, i64 } %t25, ptr %a26 + call void @finch_str_copy(ptr %a27, ptr %a26) + %t28 = load { ptr, i64, i64 }, ptr %a27 + %t29 = insertvalue %S.gen.Pending zeroinitializer, { ptr, i64, i64 } %t28, 0 + %t30 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t31 = load %S.ast.Type, ptr %t30 + store %S.ast.Type %t31, ptr %a32 + call void @finch.copy.S_ast_Type(ptr %a33, ptr %a32) + %t34 = load %S.ast.Type, ptr %a33 + %t35 = insertvalue %S.gen.Pending %t29, %S.ast.Type %t34, 1 + %t36 = insertvalue %S.gen.Pending %t35, i1 false, 2 + %t37 = load i64, ptr %t23 + %t38 = add i64 %t37, 1 + call void @finch_arr_reserve(ptr %t22, i64 %t38, i64 ptrtoint (ptr getelementptr (%S.gen.Pending, ptr null, i32 1) to i64)) + %t39 = load ptr, ptr %t22 + %t40 = getelementptr inbounds %S.gen.Pending, ptr %t39, i64 %t37 + store %S.gen.Pending %t36, ptr %t40 + store i64 %t38, ptr %t23 + br label %endif2853 +endif2853: + ret void +} + +define internal void @finch.gen.holdAddr(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + br i1 %t6, label %then2856, label %endif2858 +then2856: + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic2859, label %ok2860 +panic2859: + call void @finch_panic(ptr @.str.1699, i64 988, ptr @.str.1700) + unreachable +ok2860: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 11 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t11, ptr %a12 + call void @finch_str_copy(ptr %a13, ptr %a12) + %t14 = load { ptr, i64, i64 }, ptr %a13 + %t15 = insertvalue %S.gen.Pending zeroinitializer, { ptr, i64, i64 } %t14, 0 + %t16 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t16, ptr %a17 + call void @finch.copy.S_ast_Type(ptr %a18, ptr %a17) + %t19 = load %S.ast.Type, ptr %a18 + %t20 = insertvalue %S.gen.Pending %t15, %S.ast.Type %t19, 1 + %t21 = insertvalue %S.gen.Pending %t20, i1 true, 2 + %t22 = load i64, ptr %t10 + %t23 = add i64 %t22, 1 + call void @finch_arr_reserve(ptr %t9, i64 %t23, i64 ptrtoint (ptr getelementptr (%S.gen.Pending, ptr null, i32 1) to i64)) + %t24 = load ptr, ptr %t9 + %t25 = getelementptr inbounds %S.gen.Pending, ptr %t24, i64 %t22 + store %S.gen.Pending %t21, ptr %t25 + store i64 %t23, ptr %t10 + br label %endif2858 +endif2858: + ret void +} + +define internal void @finch.copy.S_gen_Pending(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Pending, ptr %src + store %S.gen.Pending %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Pending, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Pending, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Pending, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Pending, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.drop.S_gen_Pending(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Pending, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Pending, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal void @finch.gen.dropPending(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a24 = alloca %S.gen.Pending, align 16 + %a25 = alloca %S.gen.Pending, align 16 + %a27 = alloca %S.gen.Pending, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2861, label %ok2862 +panic2861: + call void @finch_panic(ptr @.str.1701, i64 994, ptr @.str.1702) + unreachable +ok2862: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 %t7, ptr %a8 + br label %while.cond2863 +while.cond2863: + %t9 = load i64, ptr %a8 + %t10 = load i64, ptr %a2 + %t11 = icmp sgt i64 %t9, %t10 + br i1 %t11, label %while.body2864, label %while.end2865 +while.body2864: + %t12 = load i64, ptr %a8 + %t13 = sub i64 %t12, 1 + store i64 %t13, ptr %a8 + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic2866, label %ok2867 +panic2866: + call void @finch_panic(ptr @.str.1703, i64 997, ptr @.str.1704) + unreachable +ok2867: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 11 + %t17 = load i64, ptr %a8 + %t18 = load { ptr, i64, i64 }, ptr %t16 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 %t17, %t19 + br i1 %t20, label %range2868, label %inrange2869 +range2868: + call void @finch_panic_index(ptr @.str.1705, i64 997, i64 %t17, i64 %t19) + unreachable +inrange2869: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.gen.Pending, ptr %t21, i64 %t17 + %t23 = load %S.gen.Pending, ptr %t22 + store %S.gen.Pending %t23, ptr %a24 + call void @finch.copy.S_gen_Pending(ptr %a25, ptr %a24) + %t26 = load %S.gen.Pending, ptr %a25 + store %S.gen.Pending %t26, ptr %a27 + %t28 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 2 + %t29 = load i1, ptr %t28 + br i1 %t29, label %then2870, label %else2871 +then2870: + %t30 = load ptr, ptr %a1 + %t31 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 + %t32 = load { ptr, i64, i64 }, ptr %t31 + %t33 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 + %t34 = load %S.ast.Type, ptr %t33 + call void @finch.gen.dropAt(ptr %t30, { ptr, i64, i64 } %t32, %S.ast.Type %t34) + br label %endif2872 +else2871: + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 + %t39 = load %S.ast.Type, ptr %t38 + call void @finch.gen.dropValue(ptr %t35, { ptr, i64, i64 } %t37, %S.ast.Type %t39) + br label %endif2872 +endif2872: + call void @finch.drop.S_gen_Pending(ptr %a27) + br label %while.cond2863 +while.end2865: + ret void +} + +define internal void @finch.gen.heldEnd(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a20 = alloca %S.gen.Pending, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + br label %while.cond2873 +while.cond2873: + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2876, label %ok2877 +panic2876: + call void @finch_panic(ptr @.str.1706, i64 1008, ptr @.str.1707) + unreachable +ok2877: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = load i64, ptr %a2 + %t9 = icmp sgt i64 %t7, %t8 + br i1 %t9, label %while.body2874, label %while.end2875 +while.body2874: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic2878, label %ok2879 +panic2878: + call void @finch_panic(ptr @.str.1708, i64 1009, ptr @.str.1709) + unreachable +ok2879: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 11 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp eq i64 %t14, 0 + br i1 %t15, label %panic2880, label %ok2881 +panic2880: + call void @finch_panic(ptr @.str.1710, i64 1009, ptr @.str.1711) + unreachable +ok2881: + %t16 = sub i64 %t14, 1 + %t17 = load ptr, ptr %t12 + %t18 = getelementptr inbounds %S.gen.Pending, ptr %t17, i64 %t16 + %t19 = load %S.gen.Pending, ptr %t18 + store i64 %t16, ptr %t13 + store %S.gen.Pending %t19, ptr %a20 + call void @finch.drop.S_gen_Pending(ptr %a20) + br label %while.cond2873 +while.end2875: + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.own(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t5 = load %S.ast.Type, ptr %t4 + %t6 = call i1 @finch.gen.owning(ptr %t3, %S.ast.Type %t5) + %t7 = xor i1 %t6, true + br label %logic.from2882 +logic.from2882: + br i1 %t7, label %logic.end2884, label %logic.rhs2883 +logic.rhs2883: + %t8 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 + %t9 = load i1, ptr %t8 + br label %logic.rend2885 +logic.rend2885: + br label %logic.end2884 +logic.end2884: + %t10 = phi i1 [ true, %logic.from2882 ], [ %t9, %logic.rend2885 ] + br i1 %t10, label %then2886, label %endif2888 +then2886: + %t11 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + ret { ptr, i64, i64 } %t15 +endif2888: + %t16 = load ptr, ptr %a1 + %t17 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t20 = load %S.ast.Type, ptr %t19 + %t21 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t16, { ptr, i64, i64 } %t18, %S.ast.Type %t20) + ret { ptr, i64, i64 } %t21 +} + +define internal void @finch.gen.printf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load { ptr, i64, i64 }, ptr %a2 + %t6 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t4, { ptr, i64, i64 } %t5) + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t8) + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1712, i64 0, i64 0 }, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = icmp sgt i64 %t13, 0 + br i1 %t14, label %then2889, label %endif2891 +then2889: + %t15 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1713, i64 2, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + %t20 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t19, ptr %a11 + store { ptr, i64, i64 } %t20, ptr %a21 + call void @finch_str_drop(ptr %a21) + br label %endif2891 +endif2891: + %t22 = load ptr, ptr %a1 + %t23 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1714, i64 35, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a24 + %t28 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t27, ptr %a30 + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t27, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t33, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1715, i64 1, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + call void @finch.gen.emit(ptr %t22, { ptr, i64, i64 } %t44) + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_drop(ptr %a45) + call void @finch_str_drop(ptr %a11) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a7) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.cstr(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1716, i64 31, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1717, i64 3, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a9 + %t14 = call { ptr, i64, i64 } @finch.gen.op(ptr %t3, { ptr, i64, i64 } %t13) + store { ptr, i64, i64 } %t13, ptr %a15 + call void @finch_str_drop(ptr %a15) + store { ptr, i64, i64 } %t14, ptr %a16 + %t17 = load ptr, ptr %a1 + %t18 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.1718, i64 12, i64 0 }, ptr %a20 + store { ptr, i64, i64 } %t18, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1719, i64 6, i64 0 }, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t22, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a23 + %t28 = call { ptr, i64, i64 } @finch.gen.op(ptr %t17, { ptr, i64, i64 } %t27) + store { ptr, i64, i64 } %t27, ptr %a29 + call void @finch_str_drop(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t31, { ptr, i64, i64 } { ptr @.str.1720, i64 0, i64 0 }) + store { ptr, i64, i64 } %t32, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1721, i64 10, i64 0 }, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1722, i64 6, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t44, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t44, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.1723, i64 6, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t55, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t34, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t61, ptr %a63 + call void @finch_str_drop(ptr %a63) + call void @finch_str_drop(ptr %a33) + call void @finch_str_drop(ptr %a30) + call void @finch_str_drop(ptr %a16) + ret { ptr, i64, i64 } %t62 +} + +define internal void @finch.gen.emitPrint(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i1 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca i1, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store i1 %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load %S.ast.Type, ptr %a3 + %t12 = call i1 @finch.gen.isSigned(%S.ast.Type %t11) + br i1 %t12, label %then2892, label %else2893 +then2892: + %t13 = load ptr, ptr %a1 + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a2 + %t16 = load %S.ast.Type, ptr %a3 + %t17 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1726, i64 3, i64 0 }) + %t18 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t14, { ptr, i64, i64 } %t15, %S.ast.Type %t16, %S.ast.Type %t17) + store %S.ast.Type %t17, ptr %a19 + call void @finch.drop.S_ast_Type(ptr %a19) + store { ptr, i64, i64 } { ptr @.str.1725, i64 4, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + call void @finch.gen.printf(ptr %t13, { ptr, i64, i64 } { ptr @.str.1724, i64 4, i64 0 }, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_drop(ptr %a25) + br label %endif2894 +else2893: + %t26 = load %S.ast.Type, ptr %a3 + %t27 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t26) + br i1 %t27, label %then2895, label %else2896 +then2895: + %t28 = load ptr, ptr %a1 + %t29 = load ptr, ptr %a1 + %t30 = load { ptr, i64, i64 }, ptr %a2 + %t31 = load %S.ast.Type, ptr %a3 + %t32 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1729, i64 3, i64 0 }) + %t33 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t29, { ptr, i64, i64 } %t30, %S.ast.Type %t31, %S.ast.Type %t32) + store %S.ast.Type %t32, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + store { ptr, i64, i64 } { ptr @.str.1728, i64 4, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + call void @finch.gen.printf(ptr %t28, { ptr, i64, i64 } { ptr @.str.1727, i64 4, i64 0 }, { ptr, i64, i64 } %t39) + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch_str_drop(ptr %a40) + br label %endif2897 +else2896: + %t41 = load %S.ast.Type, ptr %a3 + %t42 = call i1 @finch.gen.isFloat(%S.ast.Type %t41) + br i1 %t42, label %then2898, label %else2899 +then2898: + %t43 = load ptr, ptr %a1 + %t44 = load ptr, ptr %a1 + %t45 = load { ptr, i64, i64 }, ptr %a2 + %t46 = load %S.ast.Type, ptr %a3 + %t47 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1732, i64 5, i64 0 }) + %t48 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t44, { ptr, i64, i64 } %t45, %S.ast.Type %t46, %S.ast.Type %t47) + store %S.ast.Type %t47, ptr %a49 + call void @finch.drop.S_ast_Type(ptr %a49) + store { ptr, i64, i64 } { ptr @.str.1731, i64 7, i64 0 }, ptr %a51 + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + call void @finch.gen.printf(ptr %t43, { ptr, i64, i64 } { ptr @.str.1730, i64 2, i64 0 }, { ptr, i64, i64 } %t54) + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_drop(ptr %a55) + br label %endif2900 +else2899: + %t56 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.1733, i64 4, i64 0 }, ptr %a58 + %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) + %t60 = icmp ne i32 %t59, 0 + br i1 %t60, label %then2901, label %else2902 +then2901: + %t61 = load ptr, ptr %a1 + %t62 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1734, i64 8, i64 0 }, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1735, i64 7, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = call { ptr, i64, i64 } @finch.gen.op(ptr %t61, { ptr, i64, i64 } %t71) + store { ptr, i64, i64 } %t71, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t72, ptr %a74 + %t75 = load i1, ptr %a4 + br i1 %t75, label %then2904, label %else2905 +then2904: + %t76 = load ptr, ptr %a1 + %t77 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1737, i64 4, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a78 + call void @finch.gen.printf(ptr %t76, { ptr, i64, i64 } { ptr @.str.1736, i64 4, i64 0 }, { ptr, i64, i64 } %t81) + store { ptr, i64, i64 } %t81, ptr %a82 + call void @finch_str_drop(ptr %a82) + br label %endif2906 +else2905: + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1739, i64 4, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a85 + call void @finch.gen.printf(ptr %t83, { ptr, i64, i64 } { ptr @.str.1738, i64 2, i64 0 }, { ptr, i64, i64 } %t88) + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_drop(ptr %a89) + br label %endif2906 +endif2906: + call void @finch_str_drop(ptr %a74) + br label %endif2903 +else2902: + %t90 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t90, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.1740, i64 4, i64 0 }, ptr %a92 + %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) + %t94 = icmp ne i32 %t93, 0 + br i1 %t94, label %then2907, label %else2908 +then2907: + %t95 = load ptr, ptr %a1 + %t96 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t95, { ptr, i64, i64 } { ptr @.str.1741, i64 4, i64 0 }) + store { ptr, i64, i64 } %t96, ptr %a97 + %t98 = load ptr, ptr %a1 + %t99 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t98, { ptr, i64, i64 } { ptr @.str.1742, i64 5, i64 0 }) + store { ptr, i64, i64 } %t99, ptr %a100 + %t101 = load ptr, ptr %a1 + %t102 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1743, i64 10, i64 0 }, ptr %a104 + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.1744, i64 6, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t111, ptr %a114 + store { ptr, i64, i64 } %t112, ptr %a115 + call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) + store { ptr, i64, i64 } %t111, ptr %a116 + call void @finch_str_drop(ptr %a116) + %t117 = load { ptr, i64, i64 }, ptr %a113 + store { ptr, i64, i64 } %t117, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.1745, i64 6, i64 0 }, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + %t123 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t122, ptr %a125 + store { ptr, i64, i64 } %t123, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t122, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t101, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t128, ptr %a130 + call void @finch_str_drop(ptr %a130) + store { ptr, i64, i64 } %t129, ptr %a131 + %t132 = load ptr, ptr %a1 + %t133 = load { ptr, i64, i64 }, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.1747, i64 4, i64 0 }, ptr %a135 + store { ptr, i64, i64 } %t133, ptr %a136 + call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a134 + call void @finch.gen.printf(ptr %t132, { ptr, i64, i64 } { ptr @.str.1746, i64 2, i64 0 }, { ptr, i64, i64 } %t137) + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_drop(ptr %a138) + call void @finch_str_drop(ptr %a131) + call void @finch_str_drop(ptr %a100) + call void @finch_str_drop(ptr %a97) + br label %endif2909 +else2908: + %t139 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t139, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.1748, i64 3, i64 0 }, ptr %a141 + %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) + %t143 = icmp ne i32 %t142, 0 + br i1 %t143, label %then2910, label %else2911 +then2910: + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1749, i64 31, i64 0 }, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + %t149 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t149, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.1750, i64 3, i64 0 }, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + store { ptr, i64, i64 } %t149, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a150 + %t155 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t154) + store { ptr, i64, i64 } %t154, ptr %a156 + call void @finch_str_drop(ptr %a156) + store { ptr, i64, i64 } %t155, ptr %a157 + %t158 = load ptr, ptr %a1 + %t159 = load { ptr, i64, i64 }, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.1751, i64 10, i64 0 }, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.1752, i64 7, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = call { ptr, i64, i64 } @finch.gen.op(ptr %t158, { ptr, i64, i64 } %t168) + store { ptr, i64, i64 } %t168, ptr %a170 + call void @finch_str_drop(ptr %a170) + store { ptr, i64, i64 } %t169, ptr %a171 + %t172 = load ptr, ptr %a1 + %t173 = load { ptr, i64, i64 }, ptr %a2 + %t174 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t172, { ptr, i64, i64 } %t173) + store { ptr, i64, i64 } %t174, ptr %a175 + %t176 = load i1, ptr %a4 + br i1 %t176, label %then2913, label %else2914 +then2913: + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.1754, i64 4, i64 0 }, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.1755, i64 6, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = load { ptr, i64, i64 }, ptr %a175 + store { ptr, i64, i64 } %t187, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t187, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load { ptr, i64, i64 }, ptr %a189 + call void @finch.gen.printf(ptr %t177, { ptr, i64, i64 } { ptr @.str.1753, i64 6, i64 0 }, { ptr, i64, i64 } %t193) + store { ptr, i64, i64 } %t193, ptr %a194 + call void @finch_str_drop(ptr %a194) + br label %endif2915 +else2914: + %t195 = load ptr, ptr %a1 + %t196 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.1757, i64 4, i64 0 }, ptr %a198 + store { ptr, i64, i64 } %t196, ptr %a199 + call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a197 + store { ptr, i64, i64 } %t200, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.1758, i64 6, i64 0 }, ptr %a203 + call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) + store { ptr, i64, i64 } %t200, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a201 + %t206 = load { ptr, i64, i64 }, ptr %a175 + store { ptr, i64, i64 } %t205, ptr %a208 + store { ptr, i64, i64 } %t206, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t205, ptr %a210 + call void @finch_str_drop(ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a207 + call void @finch.gen.printf(ptr %t195, { ptr, i64, i64 } { ptr @.str.1756, i64 4, i64 0 }, { ptr, i64, i64 } %t211) + store { ptr, i64, i64 } %t211, ptr %a212 + call void @finch_str_drop(ptr %a212) + br label %endif2915 +endif2915: + call void @finch_str_drop(ptr %a175) + call void @finch_str_drop(ptr %a171) + call void @finch_str_drop(ptr %a157) + br label %endif2912 +else2911: + %t213 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t213, ptr %a214 + store { ptr, i64, i64 } { ptr @.str.1759, i64 3, i64 0 }, ptr %a215 + %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) + %t217 = icmp ne i32 %t216, 0 + br i1 %t217, label %then2916, label %else2917 +then2916: + %t218 = load ptr, ptr %a1 + %t219 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1760, i64 12, i64 0 }, ptr %a221 + store { ptr, i64, i64 } %t219, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a220 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.1761, i64 6, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t218, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t228, ptr %a230 + call void @finch_str_drop(ptr %a230) + store { ptr, i64, i64 } %t229, ptr %a231 + %t232 = load ptr, ptr %a1 + %t233 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t232, { ptr, i64, i64 } { ptr @.str.1762, i64 8, i64 0 }) + store { ptr, i64, i64 } %t233, ptr %a234 + %t235 = load ptr, ptr %a1 + %t236 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t235, { ptr, i64, i64 } { ptr @.str.1763, i64 8, i64 0 }) + store { ptr, i64, i64 } %t236, ptr %a237 + %t238 = load ptr, ptr %a1 + %t239 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t238, { ptr, i64, i64 } { ptr @.str.1764, i64 8, i64 0 }) + store { ptr, i64, i64 } %t239, ptr %a240 + %t241 = load ptr, ptr %a1 + %t242 = load { ptr, i64, i64 }, ptr %a231 + %t243 = load { ptr, i64, i64 }, ptr %a234 + %t244 = load { ptr, i64, i64 }, ptr %a237 + call void @finch.gen.condBr(ptr %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t244) + %t245 = load ptr, ptr %a1 + %t246 = load { ptr, i64, i64 }, ptr %a234 + call void @finch.gen.label(ptr %t245, { ptr, i64, i64 } %t246) + %t247 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t247, { ptr, i64, i64 } { ptr @.str.1765, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1766, i64 0, i64 0 }) + %t248 = load ptr, ptr %a1 + %t249 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.br(ptr %t248, { ptr, i64, i64 } %t249) + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a237 + call void @finch.gen.label(ptr %t250, { ptr, i64, i64 } %t251) + %t252 = load ptr, ptr %a1 + %t253 = load ptr, ptr %a1 + %t254 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1769, i64 13, i64 0 }, ptr %a256 + store { ptr, i64, i64 } %t254, ptr %a257 + call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) + %t258 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t258, ptr %a260 + store { ptr, i64, i64 } { ptr @.str.1770, i64 7, i64 0 }, ptr %a261 + call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) + store { ptr, i64, i64 } %t258, ptr %a262 + call void @finch_str_drop(ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a259 + %t264 = call { ptr, i64, i64 } @finch.gen.op(ptr %t253, { ptr, i64, i64 } %t263) + store { ptr, i64, i64 } %t263, ptr %a265 + call void @finch_str_drop(ptr %a265) + store { ptr, i64, i64 } { ptr @.str.1768, i64 4, i64 0 }, ptr %a267 + store { ptr, i64, i64 } %t264, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t264, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + call void @finch.gen.printf(ptr %t252, { ptr, i64, i64 } { ptr @.str.1767, i64 6, i64 0 }, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load ptr, ptr %a1 + %t273 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.br(ptr %t272, { ptr, i64, i64 } %t273) + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.label(ptr %t274, { ptr, i64, i64 } %t275) + call void @finch_str_drop(ptr %a240) + call void @finch_str_drop(ptr %a237) + call void @finch_str_drop(ptr %a234) + call void @finch_str_drop(ptr %a231) + br label %endif2918 +else2917: + %t276 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t276, ptr %a277 + store { ptr, i64, i64 } { ptr @.str.1771, i64 4, i64 0 }, ptr %a278 + %t279 = call i32 @finch_str_eq(ptr %a277, ptr %a278) + %t280 = icmp ne i32 %t279, 0 + br i1 %t280, label %then2919, label %else2920 +then2919: + %t281 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t281, { ptr, i64, i64 } { ptr @.str.1772, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1773, i64 0, i64 0 }) + br label %endif2921 +else2920: + %t282 = load ptr, ptr %a1 + %t283 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t282, { ptr, i64, i64 } { ptr @.str.1774, i64 17, i64 0 }) + store { ptr, i64, i64 } %t283, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = load { ptr, i64, i64 }, ptr %a284 + call void @finch.gen.store(ptr %t285, { ptr, i64, i64 } { ptr @.str.1775, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.1776, i64 15, i64 0 }, { ptr, i64, i64 } %t286) + %t287 = load ptr, ptr %a1 + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = load { ptr, i64, i64 }, ptr %a2 + %t290 = load %S.ast.Type, ptr %a3 + %t291 = load i1, ptr %a4 + call void @finch.gen.emitFormat(ptr %t287, { ptr, i64, i64 } %t288, { ptr, i64, i64 } %t289, %S.ast.Type %t290, i1 %t291) + %t292 = load ptr, ptr %a1 + %t293 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } { ptr @.str.1777, i64 31, i64 0 }, ptr %a295 + store { ptr, i64, i64 } %t293, ptr %a296 + call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a294 + store { ptr, i64, i64 } %t297, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.1778, i64 1, i64 0 }, ptr %a300 + call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) + store { ptr, i64, i64 } %t297, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a298 + call void @finch.gen.emit(ptr %t292, { ptr, i64, i64 } %t302) + store { ptr, i64, i64 } %t302, ptr %a303 + call void @finch_str_drop(ptr %a303) + call void @finch_str_drop(ptr %a284) + br label %endif2921 +endif2921: + br label %endif2918 +endif2918: + br label %endif2912 +endif2912: + br label %endif2909 +endif2909: + br label %endif2903 +endif2903: + br label %endif2900 +endif2900: + br label %endif2897 +endif2897: + br label %endif2894 +endif2894: + call void @finch_str_drop(ptr %a10) + ret void +} + +define internal void @finch.gen.bufText(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1779, i64 29, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t5, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t9, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1780, i64 6, i64 0 }, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t9, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a10 + %t15 = load ptr, ptr %a1 + %t16 = load { ptr, i64, i64 }, ptr %a3 + %t17 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t15, { ptr, i64, i64 } %t16) + store { ptr, i64, i64 } %t14, ptr %a19 + store { ptr, i64, i64 } %t17, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t14, ptr %a21 + call void @finch_str_drop(ptr %a21) + store { ptr, i64, i64 } %t17, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1781, i64 6, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t30 = load i64, ptr %t29 + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t28, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t28, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.1782, i64 1, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.emit(ptr %t4, { ptr, i64, i64 } %t43) + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_drop(ptr %a44) + ret void +} + +define internal void @finch.gen.emitFormat(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca i1, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca %S.ast.Type, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca %S.ast.Type, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca %S.ast.Type, align 16 + %a213 = alloca %S.ast.Type, align 16 + %a217 = alloca %S.gen.Val, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca %S.ast.Type, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a312 = alloca %S.gen.Val, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + call void @finch_str_copy(ptr %a9, ptr %a8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1783, i64 1, i64 0 }, ptr %a12 + %t13 = load i1, ptr %a5 + br i1 %t13, label %then2922, label %endif2924 +then2922: + %t14 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1784, i64 1, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_drop(ptr %a15) + br label %endif2924 +endif2924: + %t16 = load %S.ast.Type, ptr %a4 + %t17 = call i1 @finch.gen.isSigned(%S.ast.Type %t16) + br i1 %t17, label %then2925, label %else2926 +then2925: + %t18 = load ptr, ptr %a1 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1785, i64 29, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1786, i64 6, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + %t29 = load ptr, ptr %a1 + %t30 = load { ptr, i64, i64 }, ptr %a3 + %t31 = load %S.ast.Type, ptr %a4 + %t32 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1787, i64 3, i64 0 }) + %t33 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t29, { ptr, i64, i64 } %t30, %S.ast.Type %t31, %S.ast.Type %t32) + store %S.ast.Type %t32, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + store { ptr, i64, i64 } %t28, ptr %a36 + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t28, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t33, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1788, i64 1, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + call void @finch.gen.emit(ptr %t18, { ptr, i64, i64 } %t45) + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch_str_drop(ptr %a46) + br label %endif2927 +else2926: + %t47 = load %S.ast.Type, ptr %a4 + %t48 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t47) + br i1 %t48, label %then2928, label %else2929 +then2928: + %t49 = load ptr, ptr %a1 + %t50 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1789, i64 30, i64 0 }, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.1790, i64 6, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + %t60 = load ptr, ptr %a1 + %t61 = load { ptr, i64, i64 }, ptr %a3 + %t62 = load %S.ast.Type, ptr %a4 + %t63 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1791, i64 3, i64 0 }) + %t64 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t60, { ptr, i64, i64 } %t61, %S.ast.Type %t62, %S.ast.Type %t63) + store %S.ast.Type %t63, ptr %a65 + call void @finch.drop.S_ast_Type(ptr %a65) + store { ptr, i64, i64 } %t59, ptr %a67 + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t59, ptr %a69 + call void @finch_str_drop(ptr %a69) + store { ptr, i64, i64 } %t64, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.1792, i64 1, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.emit(ptr %t49, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a77 + call void @finch_str_drop(ptr %a77) + br label %endif2930 +else2929: + %t78 = load %S.ast.Type, ptr %a4 + %t79 = call i1 @finch.gen.isFloat(%S.ast.Type %t78) + br i1 %t79, label %then2931, label %else2932 +then2931: + %t80 = load ptr, ptr %a1 + %t81 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1793, i64 31, i64 0 }, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1794, i64 9, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = load ptr, ptr %a1 + %t92 = load { ptr, i64, i64 }, ptr %a3 + %t93 = load %S.ast.Type, ptr %a4 + %t94 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1795, i64 5, i64 0 }) + %t95 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t91, { ptr, i64, i64 } %t92, %S.ast.Type %t93, %S.ast.Type %t94) + store %S.ast.Type %t94, ptr %a96 + call void @finch.drop.S_ast_Type(ptr %a96) + store { ptr, i64, i64 } %t90, ptr %a98 + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) + store { ptr, i64, i64 } %t90, ptr %a100 + call void @finch_str_drop(ptr %a100) + store { ptr, i64, i64 } %t95, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t102, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.1796, i64 1, i64 0 }, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + store { ptr, i64, i64 } %t102, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.gen.emit(ptr %t80, { ptr, i64, i64 } %t107) + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_drop(ptr %a108) + br label %endif2933 +else2932: + %t109 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t109, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.1797, i64 4, i64 0 }, ptr %a111 + %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) + %t113 = icmp ne i32 %t112, 0 + br i1 %t113, label %then2934, label %else2935 +then2934: + %t114 = load ptr, ptr %a1 + %t115 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1798, i64 30, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.1799, i64 5, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t124, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + store { ptr, i64, i64 } %t130, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.1800, i64 6, i64 0 }, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t130, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + %t136 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t135, ptr %a138 + store { ptr, i64, i64 } %t136, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t135, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t141, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.1801, i64 1, i64 0 }, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + call void @finch.gen.emit(ptr %t114, { ptr, i64, i64 } %t146) + store { ptr, i64, i64 } %t146, ptr %a147 + call void @finch_str_drop(ptr %a147) + br label %endif2936 +else2935: + %t148 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.1802, i64 4, i64 0 }, ptr %a150 + %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) + %t152 = icmp ne i32 %t151, 0 + br i1 %t152, label %then2937, label %else2938 +then2937: + %t153 = load ptr, ptr %a1 + %t154 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1803, i64 30, i64 0 }, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t158, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.1804, i64 6, i64 0 }, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t158, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a159 + %t164 = load ptr, ptr %a1 + %t165 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1805, i64 8, i64 0 }, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t169, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.1806, i64 7, i64 0 }, ptr %a172 + call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) + store { ptr, i64, i64 } %t169, ptr %a173 + call void @finch_str_drop(ptr %a173) + %t174 = load { ptr, i64, i64 }, ptr %a170 + %t175 = call { ptr, i64, i64 } @finch.gen.op(ptr %t164, { ptr, i64, i64 } %t174) + store { ptr, i64, i64 } %t174, ptr %a176 + call void @finch_str_drop(ptr %a176) + store { ptr, i64, i64 } %t163, ptr %a178 + store { ptr, i64, i64 } %t175, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t163, ptr %a180 + call void @finch_str_drop(ptr %a180) + store { ptr, i64, i64 } %t175, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a177 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.1807, i64 1, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + call void @finch.gen.emit(ptr %t153, { ptr, i64, i64 } %t187) + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch_str_drop(ptr %a188) + br label %endif2939 +else2938: + %t189 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t189, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.1808, i64 3, i64 0 }, ptr %a191 + %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) + %t193 = icmp ne i32 %t192, 0 + br i1 %t193, label %then2940, label %else2941 +then2940: + %t194 = load ptr, ptr %a1 + %t195 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1809, i64 29, i64 0 }, ptr %a197 + store { ptr, i64, i64 } %t195, ptr %a198 + call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } %t199, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.1810, i64 6, i64 0 }, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t199, ptr %a203 + call void @finch_str_drop(ptr %a203) + %t204 = load { ptr, i64, i64 }, ptr %a200 + %t205 = load ptr, ptr %a1 + %t206 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t206, ptr %a207 + call void @finch_str_copy(ptr %a208, ptr %a207) + %t209 = load { ptr, i64, i64 }, ptr %a208 + %t210 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t209, 0 + %t211 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t211, ptr %a212 + call void @finch.copy.S_ast_Type(ptr %a213, ptr %a212) + %t214 = load %S.ast.Type, ptr %a213 + %t215 = insertvalue %S.gen.Val %t210, %S.ast.Type %t214, 1 + %t216 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t205, %S.gen.Val %t215) + store %S.gen.Val %t215, ptr %a217 + call void @finch.drop.S_gen_Val(ptr %a217) + store { ptr, i64, i64 } %t204, ptr %a219 + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t204, ptr %a221 + call void @finch_str_drop(ptr %a221) + store { ptr, i64, i64 } %t216, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.1811, i64 6, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t228, ptr %a231 + store { ptr, i64, i64 } %t229, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + store { ptr, i64, i64 } %t228, ptr %a233 + call void @finch_str_drop(ptr %a233) + %t234 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t234, ptr %a236 + store { ptr, i64, i64 } { ptr @.str.1812, i64 1, i64 0 }, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t234, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a235 + call void @finch.gen.emit(ptr %t194, { ptr, i64, i64 } %t239) + store { ptr, i64, i64 } %t239, ptr %a240 + call void @finch_str_drop(ptr %a240) + br label %endif2942 +else2941: + %t241 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t241, ptr %a242 + store { ptr, i64, i64 } { ptr @.str.1813, i64 3, i64 0 }, ptr %a243 + %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) + %t245 = icmp ne i32 %t244, 0 + br label %logic.from2943 +logic.from2943: + br i1 %t245, label %logic.end2945, label %logic.rhs2944 +logic.rhs2944: + %t246 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t246, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.1814, i64 4, i64 0 }, ptr %a248 + %t249 = call i32 @finch_str_eq(ptr %a247, ptr %a248) + %t250 = icmp ne i32 %t249, 0 + br label %logic.rend2946 +logic.rend2946: + br label %logic.end2945 +logic.end2945: + %t251 = phi i1 [ true, %logic.from2943 ], [ %t250, %logic.rend2946 ] + br i1 %t251, label %then2947, label %else2948 +then2947: + %t252 = load ptr, ptr %a1 + %t253 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1815, i64 29, i64 0 }, ptr %a255 + store { ptr, i64, i64 } %t253, ptr %a256 + call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) + %t257 = load { ptr, i64, i64 }, ptr %a254 + store { ptr, i64, i64 } %t257, ptr %a259 + store { ptr, i64, i64 } { ptr @.str.1816, i64 6, i64 0 }, ptr %a260 + call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) + store { ptr, i64, i64 } %t257, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a258 + %t263 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t262, ptr %a265 + store { ptr, i64, i64 } %t263, ptr %a266 + call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) + store { ptr, i64, i64 } %t262, ptr %a267 + call void @finch_str_drop(ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t268, ptr %a270 + store { ptr, i64, i64 } { ptr @.str.1817, i64 1, i64 0 }, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t268, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + call void @finch.gen.emit(ptr %t252, { ptr, i64, i64 } %t273) + store { ptr, i64, i64 } %t273, ptr %a274 + call void @finch_str_drop(ptr %a274) + br label %endif2949 +else2948: + %t275 = load ptr, ptr %a1 + %t276 = load ptr, ptr %a1 + %t277 = load %S.ast.Type, ptr %a4 + %t278 = call { ptr, i64, i64 } @finch.gen.formatFn(ptr %t276, %S.ast.Type %t277) + store { ptr, i64, i64 } { ptr @.str.1818, i64 10, i64 0 }, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t283, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.1819, i64 5, i64 0 }, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t288, ptr %a291 + store { ptr, i64, i64 } %t289, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + store { ptr, i64, i64 } %t288, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t294, ptr %a296 + store { ptr, i64, i64 } { ptr @.str.1820, i64 6, i64 0 }, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + store { ptr, i64, i64 } %t294, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a295 + %t300 = load ptr, ptr %a1 + %t301 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_copy(ptr %a303, ptr %a302) + %t304 = load { ptr, i64, i64 }, ptr %a303 + %t305 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0 + %t306 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t306, ptr %a307 + call void @finch.copy.S_ast_Type(ptr %a308, ptr %a307) + %t309 = load %S.ast.Type, ptr %a308 + %t310 = insertvalue %S.gen.Val %t305, %S.ast.Type %t309, 1 + %t311 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t300, %S.gen.Val %t310) + store %S.gen.Val %t310, ptr %a312 + call void @finch.drop.S_gen_Val(ptr %a312) + store { ptr, i64, i64 } %t299, ptr %a314 + store { ptr, i64, i64 } %t311, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + store { ptr, i64, i64 } %t299, ptr %a316 + call void @finch_str_drop(ptr %a316) + store { ptr, i64, i64 } %t311, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load { ptr, i64, i64 }, ptr %a313 + store { ptr, i64, i64 } %t318, ptr %a320 + store { ptr, i64, i64 } { ptr @.str.1821, i64 1, i64 0 }, ptr %a321 + call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) + store { ptr, i64, i64 } %t318, ptr %a322 + call void @finch_str_drop(ptr %a322) + %t323 = load { ptr, i64, i64 }, ptr %a319 + call void @finch.gen.emit(ptr %t275, { ptr, i64, i64 } %t323) + store { ptr, i64, i64 } %t323, ptr %a324 + call void @finch_str_drop(ptr %a324) + br label %endif2949 +endif2949: + br label %endif2942 +endif2942: + br label %endif2939 +endif2939: + br label %endif2936 +endif2936: + br label %endif2933 +endif2933: + br label %endif2930 +endif2930: + br label %endif2927 +endif2927: + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a11) + ret void +} + +define internal void @finch.copy.S_gen_EnumDef(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.EnumDef, ptr %src + store %S.gen.EnumDef %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_int(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.drop.S_gen_EnumDef(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_int(ptr %t4) + ret void +} + +define internal void @finch.copy.S_gen_SumDef(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.SumDef, ptr %src + store %S.gen.SumDef %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_int(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_int(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_S_ast_Node(ptr %t12, ptr %t13) + ret void +} + +define internal void @finch.drop.S_gen_SumDef(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_int(ptr %t4) + %t5 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_int(ptr %t5) + %t6 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_S_ast_Node(ptr %t6) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.formatFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.ast.Type, align 16 + %a47 = alloca %S.ast.Type, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca %S.gen.EnumDef, align 16 + %a174 = alloca %S.gen.EnumDef, align 16 + %a176 = alloca %S.gen.EnumDef, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca i64, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca i64, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca %S.gen.SumDef, align 16 + %a538 = alloca %S.gen.SumDef, align 16 + %a540 = alloca %S.gen.SumDef, align 16 + %a556 = alloca %S.gen.StructDef, align 16 + %a557 = alloca %S.gen.StructDef, align 16 + %a559 = alloca %S.gen.StructDef, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca i64, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a653 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a656 = alloca { ptr, i64, i64 }, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a663 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a684 = alloca { ptr, i64, i64 }, align 16 + %a686 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca i64, align 16 + %a731 = alloca i64, align 16 + %a747 = alloca i64, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca %S.gen.StructDef, align 16 + %a839 = alloca %S.gen.StructDef, align 16 + %a841 = alloca %S.gen.StructDef, align 16 + %a845 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a850 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a853 = alloca { ptr, i64, i64 }, align 16 + %a857 = alloca i64, align 16 + %a860 = alloca { ptr, i64, i64 }, align 16 + %a864 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a880 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a882 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a887 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a891 = alloca { ptr, i64, i64 }, align 16 + %a892 = alloca { ptr, i64, i64 }, align 16 + %a893 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a904 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a907 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a914 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a950 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a955 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.1822, i64 14, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2950, label %ok2951 +panic2950: + call void @finch_panic(ptr @.str.1823, i64 1126, ptr @.str.1824) + unreachable +ok2951: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then2952, label %endif2954 +then2952: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif2954: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2955, label %ok2956 +panic2955: + call void @finch_panic(ptr @.str.1825, i64 1129, ptr @.str.1826) + unreachable +ok2956: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1827, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then2957, label %else2958 +then2957: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range2960, label %inrange2961 +range2960: + call void @finch_panic_index(ptr @.str.1828, i64 1132, i64 0, i64 %t41) + unreachable +inrange2961: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 + %t45 = load %S.ast.Type, ptr %t44 + store %S.ast.Type %t45, ptr %a46 + call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) + %t48 = load %S.ast.Type, ptr %a47 + store %S.ast.Type %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = call { ptr, i64, i64 } @finch.gen.load(ptr %t50, { ptr, i64, i64 } { ptr @.str.1829, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1830, i64 2, i64 0 }) + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = load ptr, ptr %a1 + %t54 = load ptr, ptr %a1 + %t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t54, { ptr, i64, i64 } { ptr @.str.1832, i64 62, i64 0 }) + %t56 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1831, i64 3, i64 0 }, { ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t55, ptr %a57 + call void @finch_str_drop(ptr %a57) + store { ptr, i64, i64 } %t56, ptr %a58 + %t59 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t59, { ptr, i64, i64 } { ptr @.str.1833, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1834, i64 1, i64 0 }) + %t60 = load ptr, ptr %a1 + %t61 = load { ptr, i64, i64 }, ptr %a58 + %t62 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t60, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t62, ptr %a63 + %t64 = load ptr, ptr %a1 + %t65 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t64, { ptr, i64, i64 } { ptr @.str.1835, i64 3, i64 0 }) + store { ptr, i64, i64 } %t65, ptr %a66 + %t67 = load ptr, ptr %a1 + %t68 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t67, { ptr, i64, i64 } { ptr @.str.1836, i64 4, i64 0 }) + store { ptr, i64, i64 } %t68, ptr %a69 + %t70 = load ptr, ptr %a1 + %t71 = load { ptr, i64, i64 }, ptr %a63 + %t72 = extractvalue { ptr, i64, i64 } %t71, 1 + %t73 = icmp uge i64 3, %t72 + br i1 %t73, label %range2962, label %inrange2963 +range2962: + call void @finch_panic_index(ptr @.str.1838, i64 1139, i64 3, i64 %t72) + unreachable +inrange2963: + %t74 = extractvalue { ptr, i64, i64 } %t71, 0 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 3 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } { ptr @.str.1837, i64 13, i64 0 }, ptr %a78 + store { ptr, i64, i64 } %t76, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.1839, i64 3, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = call { ptr, i64, i64 } @finch.gen.op(ptr %t70, { ptr, i64, i64 } %t85) + store { ptr, i64, i64 } %t85, ptr %a87 + call void @finch_str_drop(ptr %a87) + store { ptr, i64, i64 } %t86, ptr %a88 + %t89 = load ptr, ptr %a1 + %t90 = load { ptr, i64, i64 }, ptr %a88 + %t91 = load { ptr, i64, i64 }, ptr %a66 + %t92 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.condBr(ptr %t89, { ptr, i64, i64 } %t90, { ptr, i64, i64 } %t91, { ptr, i64, i64 } %t92) + %t93 = load ptr, ptr %a1 + %t94 = load { ptr, i64, i64 }, ptr %a66 + call void @finch.gen.label(ptr %t93, { ptr, i64, i64 } %t94) + %t95 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t95, { ptr, i64, i64 } { ptr @.str.1840, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1841, i64 2, i64 0 }) + %t96 = load ptr, ptr %a1 + %t97 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.br(ptr %t96, { ptr, i64, i64 } %t97) + %t98 = load ptr, ptr %a1 + %t99 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.label(ptr %t98, { ptr, i64, i64 } %t99) + %t100 = load ptr, ptr %a1 + %t101 = load ptr, ptr %a1 + %t102 = load %S.ast.Type, ptr %a49 + %t103 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t101, %S.ast.Type %t102) + store { ptr, i64, i64 } { ptr @.str.1842, i64 23, i64 0 }, ptr %a105 + store { ptr, i64, i64 } %t103, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + store { ptr, i64, i64 } %t108, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.1843, i64 6, i64 0 }, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t108, ptr %a112 + call void @finch_str_drop(ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a109 + %t114 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t113, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t113, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.1844, i64 6, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = load { ptr, i64, i64 }, ptr %a63 + %t126 = extractvalue { ptr, i64, i64 } %t125, 1 + %t127 = icmp uge i64 3, %t126 + br i1 %t127, label %range2964, label %inrange2965 +range2964: + call void @finch_panic_index(ptr @.str.1845, i64 1145, i64 3, i64 %t126) + unreachable +inrange2965: + %t128 = extractvalue { ptr, i64, i64 } %t125, 0 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i64 3 + %t130 = load { ptr, i64, i64 }, ptr %t129 + store { ptr, i64, i64 } %t124, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t124, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + %t136 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t135) + store { ptr, i64, i64 } %t135, ptr %a137 + call void @finch_str_drop(ptr %a137) + store { ptr, i64, i64 } %t136, ptr %a138 + %t139 = load ptr, ptr %a1 + %t140 = load ptr, ptr %a1 + %t141 = load ptr, ptr %a1 + %t142 = load %S.ast.Type, ptr %a49 + %t143 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t141, %S.ast.Type %t142) + %t144 = load { ptr, i64, i64 }, ptr %a138 + %t145 = call { ptr, i64, i64 } @finch.gen.load(ptr %t140, { ptr, i64, i64 } %t143, { ptr, i64, i64 } %t144) + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_drop(ptr %a146) + %t147 = load %S.ast.Type, ptr %a49 + call void @finch.gen.emitFormat(ptr %t139, { ptr, i64, i64 } { ptr @.str.1846, i64 4, i64 0 }, { ptr, i64, i64 } %t145, %S.ast.Type %t147, i1 true) + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_drop(ptr %a148) + %t149 = load ptr, ptr %a1 + %t150 = load { ptr, i64, i64 }, ptr %a63 + call void @finch.gen.loopEnd(ptr %t149, { ptr, i64, i64 } %t150) + %t151 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t151, { ptr, i64, i64 } { ptr @.str.1847, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1848, i64 1, i64 0 }) + call void @finch_str_drop(ptr %a138) + call void @finch_str_drop(ptr %a88) + call void @finch_str_drop(ptr %a69) + call void @finch_str_drop(ptr %a66) + call void @finch.drop.arr_str(ptr %a63) + call void @finch_str_drop(ptr %a58) + call void @finch_str_drop(ptr %a52) + call void @finch.drop.S_ast_Type(ptr %a49) + br label %endif2959 +else2958: + %t152 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t153 = load { ptr, i64, i64 }, ptr %t152 + store { ptr, i64, i64 } %t153, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.1849, i64 4, i64 0 }, ptr %a155 + %t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155) + %t157 = icmp ne i32 %t156, 0 + br i1 %t157, label %then2966, label %else2967 +then2966: + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic2969, label %ok2970 +panic2969: + call void @finch_panic(ptr @.str.1850, i64 1151, ptr @.str.1851) + unreachable +ok2970: + %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 21 + %t161 = load ptr, ptr %a1 + %t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t165 = load { ptr, i64, i64 }, ptr %t164 + %t166 = call i64 @finch.gen.findEnum(ptr %t161, { ptr, i64, i64 } %t163, { ptr, i64, i64 } %t165) + %t167 = load { ptr, i64, i64 }, ptr %t160 + %t168 = extractvalue { ptr, i64, i64 } %t167, 1 + %t169 = icmp uge i64 %t166, %t168 + br i1 %t169, label %range2971, label %inrange2972 +range2971: + call void @finch_panic_index(ptr @.str.1852, i64 1151, i64 %t166, i64 %t168) + unreachable +inrange2972: + %t170 = extractvalue { ptr, i64, i64 } %t167, 0 + %t171 = getelementptr inbounds %S.gen.EnumDef, ptr %t170, i64 %t166 + %t172 = load %S.gen.EnumDef, ptr %t171 + store %S.gen.EnumDef %t172, ptr %a173 + call void @finch.copy.S_gen_EnumDef(ptr %a174, ptr %a173) + %t175 = load %S.gen.EnumDef, ptr %a174 + store %S.gen.EnumDef %t175, ptr %a176 + %t177 = load ptr, ptr %a1 + %t178 = call { ptr, i64, i64 } @finch.gen.load(ptr %t177, { ptr, i64, i64 } { ptr @.str.1853, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1854, i64 2, i64 0 }) + store { ptr, i64, i64 } %t178, ptr %a179 + %t180 = load ptr, ptr %a1 + %t181 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t180, { ptr, i64, i64 } { ptr @.str.1855, i64 10, i64 0 }) + store { ptr, i64, i64 } %t181, ptr %a182 + %t183 = load ptr, ptr %a1 + %t184 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t183, { ptr, i64, i64 } { ptr @.str.1856, i64 9, i64 0 }) + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } zeroinitializer, ptr %a186 + store { ptr, i64, i64 } zeroinitializer, ptr %a187 + %t188 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 + %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 + %t190 = load i64, ptr %t189 + store i64 0, ptr %a191 + br label %for.cond2973 +for.cond2973: + %t192 = load i64, ptr %a191 + %t193 = icmp slt i64 %t192, %t190 + br i1 %t193, label %for.body2974, label %for.end2976 +for.body2974: + %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a187, i32 0, i32 1 + %t195 = load ptr, ptr %a1 + %t196 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t195, { ptr, i64, i64 } { ptr @.str.1857, i64 6, i64 0 }) + %t197 = load i64, ptr %t194 + %t198 = add i64 %t197, 1 + call void @finch_arr_reserve(ptr %a187, i64 %t198, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t199 = load ptr, ptr %a187 + %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 %t197 + store { ptr, i64, i64 } %t196, ptr %t200 + store i64 %t198, ptr %t194 + %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a186, i32 0, i32 1 + %t202 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 3 + %t203 = load i64, ptr %a191 + %t204 = load { ptr, i64, i64 }, ptr %t202 + %t205 = extractvalue { ptr, i64, i64 } %t204, 1 + %t206 = icmp uge i64 %t203, %t205 + br i1 %t206, label %range2977, label %inrange2978 +range2977: + call void @finch_panic_index(ptr @.str.1859, i64 1159, i64 %t203, i64 %t205) + unreachable +inrange2978: + %t207 = extractvalue { ptr, i64, i64 } %t204, 0 + %t208 = getelementptr inbounds i64, ptr %t207, i64 %t203 + %t209 = load i64, ptr %t208 + call void @finch_str_from_int(ptr %a210, i64 %t209) + %t211 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.1858, i64 4, i64 0 }, ptr %a213 + store { ptr, i64, i64 } %t211, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + store { ptr, i64, i64 } %t211, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t216, ptr %a218 + store { ptr, i64, i64 } { ptr @.str.1860, i64 9, i64 0 }, ptr %a219 + call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a217 + %t222 = load i64, ptr %a191 + %t223 = load { ptr, i64, i64 }, ptr %a187 + %t224 = extractvalue { ptr, i64, i64 } %t223, 1 + %t225 = icmp uge i64 %t222, %t224 + br i1 %t225, label %range2979, label %inrange2980 +range2979: + call void @finch_panic_index(ptr @.str.1861, i64 1159, i64 %t222, i64 %t224) + unreachable +inrange2980: + %t226 = extractvalue { ptr, i64, i64 } %t223, 0 + %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 %t222 + %t228 = load { ptr, i64, i64 }, ptr %t227 + store { ptr, i64, i64 } %t221, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t221, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + %t234 = load i64, ptr %t201 + %t235 = add i64 %t234, 1 + call void @finch_arr_reserve(ptr %a186, i64 %t235, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t236 = load ptr, ptr %a186 + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i64 %t234 + store { ptr, i64, i64 } %t233, ptr %t237 + store i64 %t235, ptr %t201 + br label %for.step2975 +for.step2975: + %t238 = load i64, ptr %a191 + %t239 = add i64 %t238, 1 + store i64 %t239, ptr %a191 + br label %for.cond2973 +for.end2976: + %t240 = load ptr, ptr %a1 + %t241 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.1862, i64 11, i64 0 }, ptr %a243 + store { ptr, i64, i64 } %t241, ptr %a244 + call void @finch_str_concat(ptr %a242, ptr %a243, ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a242 + store { ptr, i64, i64 } %t245, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.1863, i64 9, i64 0 }, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t245, ptr %a249 + call void @finch_str_drop(ptr %a249) + %t250 = load { ptr, i64, i64 }, ptr %a246 + %t251 = load { ptr, i64, i64 }, ptr %a182 + store { ptr, i64, i64 } %t250, ptr %a253 + store { ptr, i64, i64 } %t251, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t250, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t256, ptr %a258 + store { ptr, i64, i64 } { ptr @.str.1864, i64 3, i64 0 }, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t256, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %a186, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1865, i64 1, i64 0 }, ptr %a263 + call void @finch_str_join(ptr %a264, ptr %a186, ptr %a263) + %t265 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t261, ptr %a267 + store { ptr, i64, i64 } %t265, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t261, ptr %a269 + call void @finch_str_drop(ptr %a269) + store { ptr, i64, i64 } %t265, ptr %a270 + call void @finch_str_drop(ptr %a270) + %t271 = load { ptr, i64, i64 }, ptr %a266 + store { ptr, i64, i64 } %t271, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.1866, i64 2, i64 0 }, ptr %a274 + call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274) + store { ptr, i64, i64 } %t271, ptr %a275 + call void @finch_str_drop(ptr %a275) + %t276 = load { ptr, i64, i64 }, ptr %a272 + call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t276) + store { ptr, i64, i64 } %t276, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load ptr, ptr %a1 + %t279 = icmp eq ptr %t278, null + br i1 %t279, label %panic2981, label %ok2982 +panic2981: + call void @finch_panic(ptr @.str.1867, i64 1162, ptr @.str.1868) + unreachable +ok2982: + %t280 = getelementptr inbounds %S.gen.Gen, ptr %t278, i32 0, i32 9 + store i1 true, ptr %t280 + %t281 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 + %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %t281, i32 0, i32 1 + %t283 = load i64, ptr %t282 + store i64 0, ptr %a284 + br label %for.cond2983 +for.cond2983: + %t285 = load i64, ptr %a284 + %t286 = icmp slt i64 %t285, %t283 + br i1 %t286, label %for.body2984, label %for.end2986 +for.body2984: + %t287 = load ptr, ptr %a1 + %t288 = load i64, ptr %a284 + %t289 = load { ptr, i64, i64 }, ptr %a187 + %t290 = extractvalue { ptr, i64, i64 } %t289, 1 + %t291 = icmp uge i64 %t288, %t290 + br i1 %t291, label %range2987, label %inrange2988 +range2987: + call void @finch_panic_index(ptr @.str.1869, i64 1164, i64 %t288, i64 %t290) + unreachable +inrange2988: + %t292 = extractvalue { ptr, i64, i64 } %t289, 0 + %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %t292, i64 %t288 + %t294 = load { ptr, i64, i64 }, ptr %t293 + call void @finch.gen.label(ptr %t287, { ptr, i64, i64 } %t294) + %t295 = load ptr, ptr %a1 + %t296 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 + %t297 = load i64, ptr %a284 + %t298 = load { ptr, i64, i64 }, ptr %t296 + %t299 = extractvalue { ptr, i64, i64 } %t298, 1 + %t300 = icmp uge i64 %t297, %t299 + br i1 %t300, label %range2989, label %inrange2990 +range2989: + call void @finch_panic_index(ptr @.str.1871, i64 1165, i64 %t297, i64 %t299) + unreachable +inrange2990: + %t301 = extractvalue { ptr, i64, i64 } %t298, 0 + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 %t297 + %t303 = load { ptr, i64, i64 }, ptr %t302 + call void @finch.gen.bufText(ptr %t295, { ptr, i64, i64 } { ptr @.str.1870, i64 4, i64 0 }, { ptr, i64, i64 } %t303) + %t304 = load ptr, ptr %a1 + %t305 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.br(ptr %t304, { ptr, i64, i64 } %t305) + br label %for.step2985 +for.step2985: + %t306 = load i64, ptr %a284 + %t307 = add i64 %t306, 1 + store i64 %t307, ptr %a284 + br label %for.cond2983 +for.end2986: + %t308 = load ptr, ptr %a1 + %t309 = load { ptr, i64, i64 }, ptr %a182 + call void @finch.gen.label(ptr %t308, { ptr, i64, i64 } %t309) + %t310 = load ptr, ptr %a1 + %t311 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 1 + %t312 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t312, ptr %a314 + store { ptr, i64, i64 } { ptr @.str.1873, i64 1, i64 0 }, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + %t316 = load { ptr, i64, i64 }, ptr %a313 + call void @finch.gen.bufText(ptr %t310, { ptr, i64, i64 } { ptr @.str.1872, i64 4, i64 0 }, { ptr, i64, i64 } %t316) + store { ptr, i64, i64 } %t316, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load ptr, ptr %a1 + %t319 = load ptr, ptr %a1 + %t320 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.1875, i64 9, i64 0 }, ptr %a322 + store { ptr, i64, i64 } %t320, ptr %a323 + call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a321 + store { ptr, i64, i64 } %t324, ptr %a326 + store { ptr, i64, i64 } { ptr @.str.1876, i64 7, i64 0 }, ptr %a327 + call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) + store { ptr, i64, i64 } %t324, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a325 + %t330 = call { ptr, i64, i64 } @finch.gen.op(ptr %t319, { ptr, i64, i64 } %t329) + store { ptr, i64, i64 } %t329, ptr %a331 + call void @finch_str_drop(ptr %a331) + store { ptr, i64, i64 } { ptr @.str.1874, i64 39, i64 0 }, ptr %a333 + store { ptr, i64, i64 } %t330, ptr %a334 + call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) + store { ptr, i64, i64 } %t330, ptr %a335 + call void @finch_str_drop(ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a332 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.1877, i64 1, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t336, ptr %a340 + call void @finch_str_drop(ptr %a340) + %t341 = load { ptr, i64, i64 }, ptr %a337 + call void @finch.gen.emit(ptr %t318, { ptr, i64, i64 } %t341) + store { ptr, i64, i64 } %t341, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t343, { ptr, i64, i64 } { ptr @.str.1878, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1879, i64 1, i64 0 }) + %t344 = load ptr, ptr %a1 + %t345 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.br(ptr %t344, { ptr, i64, i64 } %t345) + %t346 = load ptr, ptr %a1 + %t347 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.label(ptr %t346, { ptr, i64, i64 } %t347) + call void @finch.drop.arr_str(ptr %a187) + call void @finch.drop.arr_str(ptr %a186) + call void @finch_str_drop(ptr %a185) + call void @finch_str_drop(ptr %a182) + call void @finch_str_drop(ptr %a179) + call void @finch.drop.S_gen_EnumDef(ptr %a176) + br label %endif2968 +else2967: + %t348 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t349 = load { ptr, i64, i64 }, ptr %t348 + store { ptr, i64, i64 } %t349, ptr %a350 + store { ptr, i64, i64 } { ptr @.str.1880, i64 3, i64 0 }, ptr %a351 + %t352 = call i32 @finch_str_eq(ptr %a350, ptr %a351) + %t353 = icmp ne i32 %t352, 0 + br i1 %t353, label %then2991, label %else2992 +then2991: + %t354 = load ptr, ptr %a1 + %t355 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t354, { ptr, i64, i64 } { ptr @.str.1881, i64 2, i64 0 }) + store { ptr, i64, i64 } %t355, ptr %a356 + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a356 + call void @finch.gen.store(ptr %t357, { ptr, i64, i64 } { ptr @.str.1882, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1883, i64 4, i64 0 }, { ptr, i64, i64 } %t358) + %t359 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t359, { ptr, i64, i64 } { ptr @.str.1884, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1885, i64 1, i64 0 }) + %t360 = load ptr, ptr %a1 + %t361 = load ptr, ptr %a1 + %t362 = load ptr, ptr %a1 + %t363 = load %S.ast.Type, ptr %a2 + %t364 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t362, %S.ast.Type %t363) + store { ptr, i64, i64 } { ptr @.str.1887, i64 23, i64 0 }, ptr %a366 + store { ptr, i64, i64 } %t364, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t364, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a365 + store { ptr, i64, i64 } %t369, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1888, i64 22, i64 0 }, ptr %a372 + call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) + store { ptr, i64, i64 } %t369, ptr %a373 + call void @finch_str_drop(ptr %a373) + %t374 = load { ptr, i64, i64 }, ptr %a370 + %t375 = call { ptr, i64, i64 } @finch.gen.op(ptr %t361, { ptr, i64, i64 } %t374) + store { ptr, i64, i64 } %t374, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = call { ptr, i64, i64 } @finch.gen.load(ptr %t360, { ptr, i64, i64 } { ptr @.str.1886, i64 3, i64 0 }, { ptr, i64, i64 } %t375) + store { ptr, i64, i64 } %t375, ptr %a378 + call void @finch_str_drop(ptr %a378) + store { ptr, i64, i64 } %t377, ptr %a379 + %t380 = load ptr, ptr %a1 + %t381 = load { ptr, i64, i64 }, ptr %a379 + %t382 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t380, { ptr, i64, i64 } %t381) + store { ptr, i64, i64 } %t382, ptr %a383 + %t384 = load ptr, ptr %a1 + %t385 = load %S.ast.Type, ptr %a2 + %t386 = load { ptr, i64, i64 }, ptr %a383 + %t387 = extractvalue { ptr, i64, i64 } %t386, 1 + %t388 = icmp uge i64 3, %t387 + br i1 %t388, label %range2994, label %inrange2995 +range2994: + call void @finch_panic_index(ptr @.str.1890, i64 1181, i64 3, i64 %t387) + unreachable +inrange2995: + %t389 = extractvalue { ptr, i64, i64 } %t386, 0 + %t390 = getelementptr inbounds { ptr, i64, i64 }, ptr %t389, i64 3 + %t391 = load { ptr, i64, i64 }, ptr %t390 + %t392 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t384, { ptr, i64, i64 } { ptr @.str.1889, i64 2, i64 0 }, %S.ast.Type %t385, { ptr, i64, i64 } %t391) + store { ptr, i64, i64 } %t392, ptr %a393 + %t394 = load ptr, ptr %a1 + %t395 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t394, { ptr, i64, i64 } { ptr @.str.1891, i64 10, i64 0 }) + store { ptr, i64, i64 } %t395, ptr %a396 + %t397 = load ptr, ptr %a1 + %t398 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t397, { ptr, i64, i64 } { ptr @.str.1892, i64 10, i64 0 }) + store { ptr, i64, i64 } %t398, ptr %a399 + %t400 = load ptr, ptr %a1 + %t401 = load ptr, ptr %a1 + %t402 = load ptr, ptr %a1 + %t403 = load ptr, ptr %a1 + %t404 = load { ptr, i64, i64 }, ptr %a393 + %t405 = load %S.ast.Type, ptr %a2 + %t406 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t403, { ptr, i64, i64 } %t404, %S.ast.Type %t405, i64 0) + %t407 = call { ptr, i64, i64 } @finch.gen.load(ptr %t402, { ptr, i64, i64 } { ptr @.str.1894, i64 3, i64 0 }, { ptr, i64, i64 } %t406) + store { ptr, i64, i64 } %t406, ptr %a408 + call void @finch_str_drop(ptr %a408) + store { ptr, i64, i64 } { ptr @.str.1893, i64 12, i64 0 }, ptr %a410 + store { ptr, i64, i64 } %t407, ptr %a411 + call void @finch_str_concat(ptr %a409, ptr %a410, ptr %a411) + store { ptr, i64, i64 } %t407, ptr %a412 + call void @finch_str_drop(ptr %a412) + %t413 = load { ptr, i64, i64 }, ptr %a409 + store { ptr, i64, i64 } %t413, ptr %a415 + store { ptr, i64, i64 } { ptr @.str.1895, i64 3, i64 0 }, ptr %a416 + call void @finch_str_concat(ptr %a414, ptr %a415, ptr %a416) + store { ptr, i64, i64 } %t413, ptr %a417 + call void @finch_str_drop(ptr %a417) + %t418 = load { ptr, i64, i64 }, ptr %a414 + %t419 = call { ptr, i64, i64 } @finch.gen.op(ptr %t401, { ptr, i64, i64 } %t418) + store { ptr, i64, i64 } %t418, ptr %a420 + call void @finch_str_drop(ptr %a420) + %t421 = load { ptr, i64, i64 }, ptr %a396 + %t422 = load { ptr, i64, i64 }, ptr %a399 + call void @finch.gen.condBr(ptr %t400, { ptr, i64, i64 } %t419, { ptr, i64, i64 } %t421, { ptr, i64, i64 } %t422) + store { ptr, i64, i64 } %t419, ptr %a423 + call void @finch_str_drop(ptr %a423) + %t424 = load ptr, ptr %a1 + %t425 = load { ptr, i64, i64 }, ptr %a396 + call void @finch.gen.label(ptr %t424, { ptr, i64, i64 } %t425) + %t426 = load ptr, ptr %a1 + %t427 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t426, { ptr, i64, i64 } { ptr @.str.1896, i64 3, i64 0 }) + store { ptr, i64, i64 } %t427, ptr %a428 + %t429 = load ptr, ptr %a1 + %t430 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t429, { ptr, i64, i64 } { ptr @.str.1897, i64 4, i64 0 }) + store { ptr, i64, i64 } %t430, ptr %a431 + %t432 = load ptr, ptr %a1 + %t433 = load ptr, ptr %a1 + %t434 = load { ptr, i64, i64 }, ptr %a356 + %t435 = call { ptr, i64, i64 } @finch.gen.load(ptr %t433, { ptr, i64, i64 } { ptr @.str.1898, i64 2, i64 0 }, { ptr, i64, i64 } %t434) + %t436 = load { ptr, i64, i64 }, ptr %a431 + %t437 = load { ptr, i64, i64 }, ptr %a428 + call void @finch.gen.condBr(ptr %t432, { ptr, i64, i64 } %t435, { ptr, i64, i64 } %t436, { ptr, i64, i64 } %t437) + store { ptr, i64, i64 } %t435, ptr %a438 + call void @finch_str_drop(ptr %a438) + %t439 = load ptr, ptr %a1 + %t440 = load { ptr, i64, i64 }, ptr %a428 + call void @finch.gen.label(ptr %t439, { ptr, i64, i64 } %t440) + %t441 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t441, { ptr, i64, i64 } { ptr @.str.1899, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1900, i64 2, i64 0 }) + %t442 = load ptr, ptr %a1 + %t443 = load { ptr, i64, i64 }, ptr %a431 + call void @finch.gen.br(ptr %t442, { ptr, i64, i64 } %t443) + %t444 = load ptr, ptr %a1 + %t445 = load { ptr, i64, i64 }, ptr %a431 + call void @finch.gen.label(ptr %t444, { ptr, i64, i64 } %t445) + %t446 = load ptr, ptr %a1 + %t447 = load { ptr, i64, i64 }, ptr %a356 + call void @finch.gen.store(ptr %t446, { ptr, i64, i64 } { ptr @.str.1901, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1902, i64 5, i64 0 }, { ptr, i64, i64 } %t447) + %t448 = load ptr, ptr %a1 + %t449 = load ptr, ptr %a1 + %t450 = load ptr, ptr %a1 + %t451 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t452 = load { ptr, i64, i64 }, ptr %t451 + %t453 = extractvalue { ptr, i64, i64 } %t452, 1 + %t454 = icmp uge i64 0, %t453 + br i1 %t454, label %range2996, label %inrange2997 +range2996: + call void @finch_panic_index(ptr @.str.1904, i64 1194, i64 0, i64 %t453) + unreachable +inrange2997: + %t455 = extractvalue { ptr, i64, i64 } %t452, 0 + %t456 = getelementptr inbounds %S.ast.Type, ptr %t455, i64 0 + %t457 = load %S.ast.Type, ptr %t456 + %t458 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t450, %S.ast.Type %t457) + %t459 = load ptr, ptr %a1 + %t460 = load { ptr, i64, i64 }, ptr %a393 + %t461 = load %S.ast.Type, ptr %a2 + %t462 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t459, { ptr, i64, i64 } %t460, %S.ast.Type %t461, i64 1) + %t463 = call { ptr, i64, i64 } @finch.gen.load(ptr %t449, { ptr, i64, i64 } %t458, { ptr, i64, i64 } %t462) + store { ptr, i64, i64 } %t458, ptr %a464 + call void @finch_str_drop(ptr %a464) + store { ptr, i64, i64 } %t462, ptr %a465 + call void @finch_str_drop(ptr %a465) + %t466 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t467 = load { ptr, i64, i64 }, ptr %t466 + %t468 = extractvalue { ptr, i64, i64 } %t467, 1 + %t469 = icmp uge i64 0, %t468 + br i1 %t469, label %range2998, label %inrange2999 +range2998: + call void @finch_panic_index(ptr @.str.1905, i64 1194, i64 0, i64 %t468) + unreachable +inrange2999: + %t470 = extractvalue { ptr, i64, i64 } %t467, 0 + %t471 = getelementptr inbounds %S.ast.Type, ptr %t470, i64 0 + %t472 = load %S.ast.Type, ptr %t471 + call void @finch.gen.emitFormat(ptr %t448, { ptr, i64, i64 } { ptr @.str.1903, i64 4, i64 0 }, { ptr, i64, i64 } %t463, %S.ast.Type %t472, i1 true) + store { ptr, i64, i64 } %t463, ptr %a473 + call void @finch_str_drop(ptr %a473) + %t474 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t474, { ptr, i64, i64 } { ptr @.str.1906, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1907, i64 2, i64 0 }) + %t475 = load ptr, ptr %a1 + %t476 = load ptr, ptr %a1 + %t477 = load ptr, ptr %a1 + %t478 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t479 = load { ptr, i64, i64 }, ptr %t478 + %t480 = extractvalue { ptr, i64, i64 } %t479, 1 + %t481 = icmp uge i64 1, %t480 + br i1 %t481, label %range3000, label %inrange3001 +range3000: + call void @finch_panic_index(ptr @.str.1909, i64 1196, i64 1, i64 %t480) + unreachable +inrange3001: + %t482 = extractvalue { ptr, i64, i64 } %t479, 0 + %t483 = getelementptr inbounds %S.ast.Type, ptr %t482, i64 1 + %t484 = load %S.ast.Type, ptr %t483 + %t485 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t477, %S.ast.Type %t484) + %t486 = load ptr, ptr %a1 + %t487 = load { ptr, i64, i64 }, ptr %a393 + %t488 = load %S.ast.Type, ptr %a2 + %t489 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t486, { ptr, i64, i64 } %t487, %S.ast.Type %t488, i64 2) + %t490 = call { ptr, i64, i64 } @finch.gen.load(ptr %t476, { ptr, i64, i64 } %t485, { ptr, i64, i64 } %t489) + store { ptr, i64, i64 } %t485, ptr %a491 + call void @finch_str_drop(ptr %a491) + store { ptr, i64, i64 } %t489, ptr %a492 + call void @finch_str_drop(ptr %a492) + %t493 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t494 = load { ptr, i64, i64 }, ptr %t493 + %t495 = extractvalue { ptr, i64, i64 } %t494, 1 + %t496 = icmp uge i64 1, %t495 + br i1 %t496, label %range3002, label %inrange3003 +range3002: + call void @finch_panic_index(ptr @.str.1910, i64 1196, i64 1, i64 %t495) + unreachable +inrange3003: + %t497 = extractvalue { ptr, i64, i64 } %t494, 0 + %t498 = getelementptr inbounds %S.ast.Type, ptr %t497, i64 1 + %t499 = load %S.ast.Type, ptr %t498 + call void @finch.gen.emitFormat(ptr %t475, { ptr, i64, i64 } { ptr @.str.1908, i64 4, i64 0 }, { ptr, i64, i64 } %t490, %S.ast.Type %t499, i1 true) + store { ptr, i64, i64 } %t490, ptr %a500 + call void @finch_str_drop(ptr %a500) + %t501 = load ptr, ptr %a1 + %t502 = load { ptr, i64, i64 }, ptr %a399 + call void @finch.gen.br(ptr %t501, { ptr, i64, i64 } %t502) + %t503 = load ptr, ptr %a1 + %t504 = load { ptr, i64, i64 }, ptr %a399 + call void @finch.gen.label(ptr %t503, { ptr, i64, i64 } %t504) + %t505 = load ptr, ptr %a1 + %t506 = load { ptr, i64, i64 }, ptr %a383 + call void @finch.gen.loopEnd(ptr %t505, { ptr, i64, i64 } %t506) + %t507 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t507, { ptr, i64, i64 } { ptr @.str.1911, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1912, i64 1, i64 0 }) + call void @finch_str_drop(ptr %a431) + call void @finch_str_drop(ptr %a428) + call void @finch_str_drop(ptr %a399) + call void @finch_str_drop(ptr %a396) + call void @finch_str_drop(ptr %a393) + call void @finch.drop.arr_str(ptr %a383) + call void @finch_str_drop(ptr %a379) + call void @finch_str_drop(ptr %a356) + br label %endif2993 +else2992: + %t508 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t509 = load { ptr, i64, i64 }, ptr %t508 + store { ptr, i64, i64 } %t509, ptr %a510 + store { ptr, i64, i64 } { ptr @.str.1913, i64 6, i64 0 }, ptr %a511 + %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) + %t513 = icmp ne i32 %t512, 0 + br label %logic.from3004 +logic.from3004: + br i1 %t513, label %logic.rhs3005, label %logic.end3006 +logic.rhs3005: + %t514 = load ptr, ptr %a1 + %t515 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t516 = load { ptr, i64, i64 }, ptr %t515 + %t517 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t518 = load { ptr, i64, i64 }, ptr %t517 + %t519 = call i64 @finch.gen.findSum(ptr %t514, { ptr, i64, i64 } %t516, { ptr, i64, i64 } %t518) + %t520 = icmp sge i64 %t519, 0 + br label %logic.rend3007 +logic.rend3007: + br label %logic.end3006 +logic.end3006: + %t521 = phi i1 [ false, %logic.from3004 ], [ %t520, %logic.rend3007 ] + br i1 %t521, label %then3008, label %else3009 +then3008: + %t522 = load ptr, ptr %a1 + %t523 = icmp eq ptr %t522, null + br i1 %t523, label %panic3011, label %ok3012 +panic3011: + call void @finch_panic(ptr @.str.1914, i64 1203, ptr @.str.1915) + unreachable +ok3012: + %t524 = getelementptr inbounds %S.gen.Gen, ptr %t522, i32 0, i32 22 + %t525 = load ptr, ptr %a1 + %t526 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t527 = load { ptr, i64, i64 }, ptr %t526 + %t528 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t529 = load { ptr, i64, i64 }, ptr %t528 + %t530 = call i64 @finch.gen.findSum(ptr %t525, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t529) + %t531 = load { ptr, i64, i64 }, ptr %t524 + %t532 = extractvalue { ptr, i64, i64 } %t531, 1 + %t533 = icmp uge i64 %t530, %t532 + br i1 %t533, label %range3013, label %inrange3014 +range3013: + call void @finch_panic_index(ptr @.str.1916, i64 1203, i64 %t530, i64 %t532) + unreachable +inrange3014: + %t534 = extractvalue { ptr, i64, i64 } %t531, 0 + %t535 = getelementptr inbounds %S.gen.SumDef, ptr %t534, i64 %t530 + %t536 = load %S.gen.SumDef, ptr %t535 + store %S.gen.SumDef %t536, ptr %a537 + call void @finch.copy.S_gen_SumDef(ptr %a538, ptr %a537) + %t539 = load %S.gen.SumDef, ptr %a538 + store %S.gen.SumDef %t539, ptr %a540 + %t541 = load ptr, ptr %a1 + %t542 = icmp eq ptr %t541, null + br i1 %t542, label %panic3015, label %ok3016 +panic3015: + call void @finch_panic(ptr @.str.1917, i64 1204, ptr @.str.1918) + unreachable +ok3016: + %t543 = getelementptr inbounds %S.gen.Gen, ptr %t541, i32 0, i32 16 + %t544 = load ptr, ptr %a1 + %t545 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t546 = load { ptr, i64, i64 }, ptr %t545 + %t547 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t548 = load { ptr, i64, i64 }, ptr %t547 + %t549 = call i64 @finch.gen.findStruct(ptr %t544, { ptr, i64, i64 } %t546, { ptr, i64, i64 } %t548) + %t550 = load { ptr, i64, i64 }, ptr %t543 + %t551 = extractvalue { ptr, i64, i64 } %t550, 1 + %t552 = icmp uge i64 %t549, %t551 + br i1 %t552, label %range3017, label %inrange3018 +range3017: + call void @finch_panic_index(ptr @.str.1919, i64 1204, i64 %t549, i64 %t551) + unreachable +inrange3018: + %t553 = extractvalue { ptr, i64, i64 } %t550, 0 + %t554 = getelementptr inbounds %S.gen.StructDef, ptr %t553, i64 %t549 + %t555 = load %S.gen.StructDef, ptr %t554 + store %S.gen.StructDef %t555, ptr %a556 + call void @finch.copy.S_gen_StructDef(ptr %a557, ptr %a556) + %t558 = load %S.gen.StructDef, ptr %a557 + store %S.gen.StructDef %t558, ptr %a559 + %t560 = load ptr, ptr %a1 + %t561 = load %S.ast.Type, ptr %a2 + %t562 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t560, %S.ast.Type %t561) + store { ptr, i64, i64 } %t562, ptr %a563 + %t564 = load ptr, ptr %a1 + %t565 = load ptr, ptr %a1 + %t566 = load { ptr, i64, i64 }, ptr %a563 + store { ptr, i64, i64 } { ptr @.str.1921, i64 23, i64 0 }, ptr %a568 + store { ptr, i64, i64 } %t566, ptr %a569 + call void @finch_str_concat(ptr %a567, ptr %a568, ptr %a569) + %t570 = load { ptr, i64, i64 }, ptr %a567 + store { ptr, i64, i64 } %t570, ptr %a572 + store { ptr, i64, i64 } { ptr @.str.1922, i64 21, i64 0 }, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + store { ptr, i64, i64 } %t570, ptr %a574 + call void @finch_str_drop(ptr %a574) + %t575 = load { ptr, i64, i64 }, ptr %a571 + %t576 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 3 + %t577 = load { ptr, i64, i64 }, ptr %t576 + %t578 = extractvalue { ptr, i64, i64 } %t577, 1 + %t579 = icmp uge i64 0, %t578 + br i1 %t579, label %range3019, label %inrange3020 +range3019: + call void @finch_panic_index(ptr @.str.1923, i64 1206, i64 0, i64 %t578) + unreachable +inrange3020: + %t580 = extractvalue { ptr, i64, i64 } %t577, 0 + %t581 = getelementptr inbounds i64, ptr %t580, i64 0 + %t582 = load i64, ptr %t581 + call void @finch_str_from_int(ptr %a583, i64 %t582) + %t584 = load { ptr, i64, i64 }, ptr %a583 + store { ptr, i64, i64 } %t575, ptr %a586 + store { ptr, i64, i64 } %t584, ptr %a587 + call void @finch_str_concat(ptr %a585, ptr %a586, ptr %a587) + store { ptr, i64, i64 } %t575, ptr %a588 + call void @finch_str_drop(ptr %a588) + store { ptr, i64, i64 } %t584, ptr %a589 + call void @finch_str_drop(ptr %a589) + %t590 = load { ptr, i64, i64 }, ptr %a585 + %t591 = call { ptr, i64, i64 } @finch.gen.op(ptr %t565, { ptr, i64, i64 } %t590) + store { ptr, i64, i64 } %t590, ptr %a592 + call void @finch_str_drop(ptr %a592) + %t593 = call { ptr, i64, i64 } @finch.gen.load(ptr %t564, { ptr, i64, i64 } { ptr @.str.1920, i64 3, i64 0 }, { ptr, i64, i64 } %t591) + store { ptr, i64, i64 } %t591, ptr %a594 + call void @finch_str_drop(ptr %a594) + store { ptr, i64, i64 } %t593, ptr %a595 + %t596 = load ptr, ptr %a1 + %t597 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t596, { ptr, i64, i64 } { ptr @.str.1924, i64 9, i64 0 }) + store { ptr, i64, i64 } %t597, ptr %a598 + %t599 = load ptr, ptr %a1 + %t600 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t599, { ptr, i64, i64 } { ptr @.str.1925, i64 8, i64 0 }) + store { ptr, i64, i64 } %t600, ptr %a601 + store { ptr, i64, i64 } zeroinitializer, ptr %a602 + store { ptr, i64, i64 } zeroinitializer, ptr %a603 + %t604 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 + %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i32 0, i32 1 + %t606 = load i64, ptr %t605 + store i64 0, ptr %a607 + br label %for.cond3021 +for.cond3021: + %t608 = load i64, ptr %a607 + %t609 = icmp slt i64 %t608, %t606 + br i1 %t609, label %for.body3022, label %for.end3024 +for.body3022: + %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a603, i32 0, i32 1 + %t611 = load ptr, ptr %a1 + %t612 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t611, { ptr, i64, i64 } { ptr @.str.1926, i64 5, i64 0 }) + %t613 = load i64, ptr %t610 + %t614 = add i64 %t613, 1 + call void @finch_arr_reserve(ptr %a603, i64 %t614, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t615 = load ptr, ptr %a603 + %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %t615, i64 %t613 + store { ptr, i64, i64 } %t612, ptr %t616 + store i64 %t614, ptr %t610 + %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %a602, i32 0, i32 1 + %t618 = load i64, ptr %a607 + call void @finch_str_from_int(ptr %a619, i64 %t618) + %t620 = load { ptr, i64, i64 }, ptr %a619 + store { ptr, i64, i64 } { ptr @.str.1927, i64 4, i64 0 }, ptr %a622 + store { ptr, i64, i64 } %t620, ptr %a623 + call void @finch_str_concat(ptr %a621, ptr %a622, ptr %a623) + store { ptr, i64, i64 } %t620, ptr %a624 + call void @finch_str_drop(ptr %a624) + %t625 = load { ptr, i64, i64 }, ptr %a621 + store { ptr, i64, i64 } %t625, ptr %a627 + store { ptr, i64, i64 } { ptr @.str.1928, i64 9, i64 0 }, ptr %a628 + call void @finch_str_concat(ptr %a626, ptr %a627, ptr %a628) + store { ptr, i64, i64 } %t625, ptr %a629 + call void @finch_str_drop(ptr %a629) + %t630 = load { ptr, i64, i64 }, ptr %a626 + %t631 = load i64, ptr %a607 + %t632 = load { ptr, i64, i64 }, ptr %a603 + %t633 = extractvalue { ptr, i64, i64 } %t632, 1 + %t634 = icmp uge i64 %t631, %t633 + br i1 %t634, label %range3025, label %inrange3026 +range3025: + call void @finch_panic_index(ptr @.str.1929, i64 1213, i64 %t631, i64 %t633) + unreachable +inrange3026: + %t635 = extractvalue { ptr, i64, i64 } %t632, 0 + %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t631 + %t637 = load { ptr, i64, i64 }, ptr %t636 + store { ptr, i64, i64 } %t630, ptr %a639 + store { ptr, i64, i64 } %t637, ptr %a640 + call void @finch_str_concat(ptr %a638, ptr %a639, ptr %a640) + store { ptr, i64, i64 } %t630, ptr %a641 + call void @finch_str_drop(ptr %a641) + %t642 = load { ptr, i64, i64 }, ptr %a638 + %t643 = load i64, ptr %t617 + %t644 = add i64 %t643, 1 + call void @finch_arr_reserve(ptr %a602, i64 %t644, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t645 = load ptr, ptr %a602 + %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t645, i64 %t643 + store { ptr, i64, i64 } %t642, ptr %t646 + store i64 %t644, ptr %t617 + br label %for.step3023 +for.step3023: + %t647 = load i64, ptr %a607 + %t648 = add i64 %t647, 1 + store i64 %t648, ptr %a607 + br label %for.cond3021 +for.end3024: + %t649 = load ptr, ptr %a1 + %t650 = load { ptr, i64, i64 }, ptr %a595 + store { ptr, i64, i64 } { ptr @.str.1930, i64 11, i64 0 }, ptr %a652 + store { ptr, i64, i64 } %t650, ptr %a653 + call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) + %t654 = load { ptr, i64, i64 }, ptr %a651 + store { ptr, i64, i64 } %t654, ptr %a656 + store { ptr, i64, i64 } { ptr @.str.1931, i64 9, i64 0 }, ptr %a657 + call void @finch_str_concat(ptr %a655, ptr %a656, ptr %a657) + store { ptr, i64, i64 } %t654, ptr %a658 + call void @finch_str_drop(ptr %a658) + %t659 = load { ptr, i64, i64 }, ptr %a655 + %t660 = load { ptr, i64, i64 }, ptr %a598 + store { ptr, i64, i64 } %t659, ptr %a662 + store { ptr, i64, i64 } %t660, ptr %a663 + call void @finch_str_concat(ptr %a661, ptr %a662, ptr %a663) + store { ptr, i64, i64 } %t659, ptr %a664 + call void @finch_str_drop(ptr %a664) + %t665 = load { ptr, i64, i64 }, ptr %a661 + store { ptr, i64, i64 } %t665, ptr %a667 + store { ptr, i64, i64 } { ptr @.str.1932, i64 3, i64 0 }, ptr %a668 + call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) + store { ptr, i64, i64 } %t665, ptr %a669 + call void @finch_str_drop(ptr %a669) + %t670 = load { ptr, i64, i64 }, ptr %a666 + %t671 = getelementptr inbounds { ptr, i64, i64 }, ptr %a602, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1933, i64 1, i64 0 }, ptr %a672 + call void @finch_str_join(ptr %a673, ptr %a602, ptr %a672) + %t674 = load { ptr, i64, i64 }, ptr %a673 + store { ptr, i64, i64 } %t670, ptr %a676 + store { ptr, i64, i64 } %t674, ptr %a677 + call void @finch_str_concat(ptr %a675, ptr %a676, ptr %a677) + store { ptr, i64, i64 } %t670, ptr %a678 + call void @finch_str_drop(ptr %a678) + store { ptr, i64, i64 } %t674, ptr %a679 + call void @finch_str_drop(ptr %a679) + %t680 = load { ptr, i64, i64 }, ptr %a675 + store { ptr, i64, i64 } %t680, ptr %a682 + store { ptr, i64, i64 } { ptr @.str.1934, i64 2, i64 0 }, ptr %a683 + call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) + store { ptr, i64, i64 } %t680, ptr %a684 + call void @finch_str_drop(ptr %a684) + %t685 = load { ptr, i64, i64 }, ptr %a681 + call void @finch.gen.emit(ptr %t649, { ptr, i64, i64 } %t685) + store { ptr, i64, i64 } %t685, ptr %a686 + call void @finch_str_drop(ptr %a686) + %t687 = load ptr, ptr %a1 + %t688 = icmp eq ptr %t687, null + br i1 %t688, label %panic3027, label %ok3028 +panic3027: + call void @finch_panic(ptr @.str.1935, i64 1216, ptr @.str.1936) + unreachable +ok3028: + %t689 = getelementptr inbounds %S.gen.Gen, ptr %t687, i32 0, i32 9 + store i1 true, ptr %t689 + %t690 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 + %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %t690, i32 0, i32 1 + %t692 = load i64, ptr %t691 + store i64 0, ptr %a693 + br label %for.cond3029 +for.cond3029: + %t694 = load i64, ptr %a693 + %t695 = icmp slt i64 %t694, %t692 + br i1 %t695, label %for.body3030, label %for.end3032 +for.body3030: + %t696 = load ptr, ptr %a1 + %t697 = load i64, ptr %a693 + %t698 = load { ptr, i64, i64 }, ptr %a603 + %t699 = extractvalue { ptr, i64, i64 } %t698, 1 + %t700 = icmp uge i64 %t697, %t699 + br i1 %t700, label %range3033, label %inrange3034 +range3033: + call void @finch_panic_index(ptr @.str.1937, i64 1218, i64 %t697, i64 %t699) + unreachable +inrange3034: + %t701 = extractvalue { ptr, i64, i64 } %t698, 0 + %t702 = getelementptr inbounds { ptr, i64, i64 }, ptr %t701, i64 %t697 + %t703 = load { ptr, i64, i64 }, ptr %t702 + call void @finch.gen.label(ptr %t696, { ptr, i64, i64 } %t703) + %t704 = load ptr, ptr %a1 + %t705 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 + %t706 = load i64, ptr %a693 + %t707 = load { ptr, i64, i64 }, ptr %t705 + %t708 = extractvalue { ptr, i64, i64 } %t707, 1 + %t709 = icmp uge i64 %t706, %t708 + br i1 %t709, label %range3035, label %inrange3036 +range3035: + call void @finch_panic_index(ptr @.str.1939, i64 1219, i64 %t706, i64 %t708) + unreachable +inrange3036: + %t710 = extractvalue { ptr, i64, i64 } %t707, 0 + %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i64 %t706 + %t712 = load { ptr, i64, i64 }, ptr %t711 + call void @finch.gen.bufText(ptr %t704, { ptr, i64, i64 } { ptr @.str.1938, i64 4, i64 0 }, { ptr, i64, i64 } %t712) + %t713 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 + %t714 = load i64, ptr %a693 + %t715 = load { ptr, i64, i64 }, ptr %t713 + %t716 = extractvalue { ptr, i64, i64 } %t715, 1 + %t717 = icmp uge i64 %t714, %t716 + br i1 %t717, label %range3037, label %inrange3038 +range3037: + call void @finch_panic_index(ptr @.str.1940, i64 1220, i64 %t714, i64 %t716) + unreachable +inrange3038: + %t718 = extractvalue { ptr, i64, i64 } %t715, 0 + %t719 = getelementptr inbounds i64, ptr %t718, i64 %t714 + %t720 = load i64, ptr %t719 + %t721 = icmp sgt i64 %t720, 0 + br i1 %t721, label %then3039, label %endif3041 +then3039: + %t722 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t722, { ptr, i64, i64 } { ptr @.str.1941, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1942, i64 1, i64 0 }) + %t723 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 + %t724 = load i64, ptr %a693 + %t725 = load { ptr, i64, i64 }, ptr %t723 + %t726 = extractvalue { ptr, i64, i64 } %t725, 1 + %t727 = icmp uge i64 %t724, %t726 + br i1 %t727, label %range3042, label %inrange3043 +range3042: + call void @finch_panic_index(ptr @.str.1943, i64 1222, i64 %t724, i64 %t726) + unreachable +inrange3043: + %t728 = extractvalue { ptr, i64, i64 } %t725, 0 + %t729 = getelementptr inbounds i64, ptr %t728, i64 %t724 + %t730 = load i64, ptr %t729 + store i64 0, ptr %a731 + br label %for.cond3044 +for.cond3044: + %t732 = load i64, ptr %a731 + %t733 = icmp slt i64 %t732, %t730 + br i1 %t733, label %for.body3045, label %for.end3047 +for.body3045: + %t734 = load i64, ptr %a731 + %t735 = icmp sgt i64 %t734, 0 + br i1 %t735, label %then3048, label %endif3050 +then3048: + %t736 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t736, { ptr, i64, i64 } { ptr @.str.1944, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1945, i64 2, i64 0 }) + br label %endif3050 +endif3050: + %t737 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 4 + %t738 = load i64, ptr %a693 + %t739 = load { ptr, i64, i64 }, ptr %t737 + %t740 = extractvalue { ptr, i64, i64 } %t739, 1 + %t741 = icmp uge i64 %t738, %t740 + br i1 %t741, label %range3051, label %inrange3052 +range3051: + call void @finch_panic_index(ptr @.str.1946, i64 1226, i64 %t738, i64 %t740) + unreachable +inrange3052: + %t742 = extractvalue { ptr, i64, i64 } %t739, 0 + %t743 = getelementptr inbounds i64, ptr %t742, i64 %t738 + %t744 = load i64, ptr %t743 + %t745 = load i64, ptr %a731 + %t746 = add i64 %t744, %t745 + store i64 %t746, ptr %a747 + %t748 = load ptr, ptr %a1 + %t749 = load { ptr, i64, i64 }, ptr %a563 + store { ptr, i64, i64 } { ptr @.str.1947, i64 23, i64 0 }, ptr %a751 + store { ptr, i64, i64 } %t749, ptr %a752 + call void @finch_str_concat(ptr %a750, ptr %a751, ptr %a752) + %t753 = load { ptr, i64, i64 }, ptr %a750 + store { ptr, i64, i64 } %t753, ptr %a755 + store { ptr, i64, i64 } { ptr @.str.1948, i64 21, i64 0 }, ptr %a756 + call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) + store { ptr, i64, i64 } %t753, ptr %a757 + call void @finch_str_drop(ptr %a757) + %t758 = load { ptr, i64, i64 }, ptr %a754 + %t759 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 3 + %t760 = load i64, ptr %a747 + %t761 = load { ptr, i64, i64 }, ptr %t759 + %t762 = extractvalue { ptr, i64, i64 } %t761, 1 + %t763 = icmp uge i64 %t760, %t762 + br i1 %t763, label %range3053, label %inrange3054 +range3053: + call void @finch_panic_index(ptr @.str.1949, i64 1227, i64 %t760, i64 %t762) + unreachable +inrange3054: + %t764 = extractvalue { ptr, i64, i64 } %t761, 0 + %t765 = getelementptr inbounds i64, ptr %t764, i64 %t760 + %t766 = load i64, ptr %t765 + call void @finch_str_from_int(ptr %a767, i64 %t766) + %t768 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t758, ptr %a770 + store { ptr, i64, i64 } %t768, ptr %a771 + call void @finch_str_concat(ptr %a769, ptr %a770, ptr %a771) + store { ptr, i64, i64 } %t758, ptr %a772 + call void @finch_str_drop(ptr %a772) + store { ptr, i64, i64 } %t768, ptr %a773 + call void @finch_str_drop(ptr %a773) + %t774 = load { ptr, i64, i64 }, ptr %a769 + %t775 = call { ptr, i64, i64 } @finch.gen.op(ptr %t748, { ptr, i64, i64 } %t774) + store { ptr, i64, i64 } %t774, ptr %a776 + call void @finch_str_drop(ptr %a776) + store { ptr, i64, i64 } %t775, ptr %a777 + %t778 = load ptr, ptr %a1 + %t779 = load ptr, ptr %a1 + %t780 = load ptr, ptr %a1 + %t781 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 12 + %t782 = load i64, ptr %a747 + %t783 = load { ptr, i64, i64 }, ptr %t781 + %t784 = extractvalue { ptr, i64, i64 } %t783, 1 + %t785 = icmp uge i64 %t782, %t784 + br i1 %t785, label %range3055, label %inrange3056 +range3055: + call void @finch_panic_index(ptr @.str.1951, i64 1228, i64 %t782, i64 %t784) + unreachable +inrange3056: + %t786 = extractvalue { ptr, i64, i64 } %t783, 0 + %t787 = getelementptr inbounds %S.ast.Type, ptr %t786, i64 %t782 + %t788 = load %S.ast.Type, ptr %t787 + %t789 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t780, %S.ast.Type %t788) + %t790 = load { ptr, i64, i64 }, ptr %a777 + %t791 = call { ptr, i64, i64 } @finch.gen.load(ptr %t779, { ptr, i64, i64 } %t789, { ptr, i64, i64 } %t790) + store { ptr, i64, i64 } %t789, ptr %a792 + call void @finch_str_drop(ptr %a792) + %t793 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 12 + %t794 = load i64, ptr %a747 + %t795 = load { ptr, i64, i64 }, ptr %t793 + %t796 = extractvalue { ptr, i64, i64 } %t795, 1 + %t797 = icmp uge i64 %t794, %t796 + br i1 %t797, label %range3057, label %inrange3058 +range3057: + call void @finch_panic_index(ptr @.str.1952, i64 1228, i64 %t794, i64 %t796) + unreachable +inrange3058: + %t798 = extractvalue { ptr, i64, i64 } %t795, 0 + %t799 = getelementptr inbounds %S.ast.Type, ptr %t798, i64 %t794 + %t800 = load %S.ast.Type, ptr %t799 + call void @finch.gen.emitFormat(ptr %t778, { ptr, i64, i64 } { ptr @.str.1950, i64 4, i64 0 }, { ptr, i64, i64 } %t791, %S.ast.Type %t800, i1 true) + store { ptr, i64, i64 } %t791, ptr %a801 + call void @finch_str_drop(ptr %a801) + call void @finch_str_drop(ptr %a777) + br label %for.step3046 +for.step3046: + %t802 = load i64, ptr %a731 + %t803 = add i64 %t802, 1 + store i64 %t803, ptr %a731 + br label %for.cond3044 +for.end3047: + %t804 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t804, { ptr, i64, i64 } { ptr @.str.1953, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1954, i64 1, i64 0 }) + br label %endif3041 +endif3041: + %t805 = load ptr, ptr %a1 + %t806 = load { ptr, i64, i64 }, ptr %a601 + call void @finch.gen.br(ptr %t805, { ptr, i64, i64 } %t806) + br label %for.step3031 +for.step3031: + %t807 = load i64, ptr %a693 + %t808 = add i64 %t807, 1 + store i64 %t808, ptr %a693 + br label %for.cond3029 +for.end3032: + %t809 = load ptr, ptr %a1 + %t810 = load { ptr, i64, i64 }, ptr %a598 + call void @finch.gen.label(ptr %t809, { ptr, i64, i64 } %t810) + %t811 = load ptr, ptr %a1 + %t812 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 1 + %t813 = load { ptr, i64, i64 }, ptr %t812 + store { ptr, i64, i64 } %t813, ptr %a815 + store { ptr, i64, i64 } { ptr @.str.1956, i64 3, i64 0 }, ptr %a816 + call void @finch_str_concat(ptr %a814, ptr %a815, ptr %a816) + %t817 = load { ptr, i64, i64 }, ptr %a814 + call void @finch.gen.bufText(ptr %t811, { ptr, i64, i64 } { ptr @.str.1955, i64 4, i64 0 }, { ptr, i64, i64 } %t817) + store { ptr, i64, i64 } %t817, ptr %a818 + call void @finch_str_drop(ptr %a818) + %t819 = load ptr, ptr %a1 + %t820 = load { ptr, i64, i64 }, ptr %a601 + call void @finch.gen.br(ptr %t819, { ptr, i64, i64 } %t820) + %t821 = load ptr, ptr %a1 + %t822 = load { ptr, i64, i64 }, ptr %a601 + call void @finch.gen.label(ptr %t821, { ptr, i64, i64 } %t822) + call void @finch.drop.arr_str(ptr %a603) + call void @finch.drop.arr_str(ptr %a602) + call void @finch_str_drop(ptr %a601) + call void @finch_str_drop(ptr %a598) + call void @finch_str_drop(ptr %a595) + call void @finch_str_drop(ptr %a563) + call void @finch.drop.S_gen_StructDef(ptr %a559) + call void @finch.drop.S_gen_SumDef(ptr %a540) + br label %endif3010 +else3009: + %t823 = load ptr, ptr %a1 + %t824 = icmp eq ptr %t823, null + br i1 %t824, label %panic3059, label %ok3060 +panic3059: + call void @finch_panic(ptr @.str.1957, i64 1239, ptr @.str.1958) + unreachable +ok3060: + %t825 = getelementptr inbounds %S.gen.Gen, ptr %t823, i32 0, i32 16 + %t826 = load ptr, ptr %a1 + %t827 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t828 = load { ptr, i64, i64 }, ptr %t827 + %t829 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t830 = load { ptr, i64, i64 }, ptr %t829 + %t831 = call i64 @finch.gen.findStruct(ptr %t826, { ptr, i64, i64 } %t828, { ptr, i64, i64 } %t830) + %t832 = load { ptr, i64, i64 }, ptr %t825 + %t833 = extractvalue { ptr, i64, i64 } %t832, 1 + %t834 = icmp uge i64 %t831, %t833 + br i1 %t834, label %range3061, label %inrange3062 +range3061: + call void @finch_panic_index(ptr @.str.1959, i64 1239, i64 %t831, i64 %t833) + unreachable +inrange3062: + %t835 = extractvalue { ptr, i64, i64 } %t832, 0 + %t836 = getelementptr inbounds %S.gen.StructDef, ptr %t835, i64 %t831 + %t837 = load %S.gen.StructDef, ptr %t836 + store %S.gen.StructDef %t837, ptr %a838 + call void @finch.copy.S_gen_StructDef(ptr %a839, ptr %a838) + %t840 = load %S.gen.StructDef, ptr %a839 + store %S.gen.StructDef %t840, ptr %a841 + %t842 = load ptr, ptr %a1 + %t843 = load %S.ast.Type, ptr %a2 + %t844 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t842, %S.ast.Type %t843) + store { ptr, i64, i64 } %t844, ptr %a845 + %t846 = load ptr, ptr %a1 + %t847 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 1 + %t848 = load { ptr, i64, i64 }, ptr %t847 + store { ptr, i64, i64 } %t848, ptr %a850 + store { ptr, i64, i64 } { ptr @.str.1961, i64 1, i64 0 }, ptr %a851 + call void @finch_str_concat(ptr %a849, ptr %a850, ptr %a851) + %t852 = load { ptr, i64, i64 }, ptr %a849 + call void @finch.gen.bufText(ptr %t846, { ptr, i64, i64 } { ptr @.str.1960, i64 4, i64 0 }, { ptr, i64, i64 } %t852) + store { ptr, i64, i64 } %t852, ptr %a853 + call void @finch_str_drop(ptr %a853) + %t854 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 + %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i32 0, i32 1 + %t856 = load i64, ptr %t855 + store i64 0, ptr %a857 + br label %for.cond3063 +for.cond3063: + %t858 = load i64, ptr %a857 + %t859 = icmp slt i64 %t858, %t856 + br i1 %t859, label %for.body3064, label %for.end3066 +for.body3064: + store { ptr, i64, i64 } { ptr @.str.1962, i64 2, i64 0 }, ptr %a860 + %t861 = load i64, ptr %a857 + %t862 = icmp eq i64 %t861, 0 + br i1 %t862, label %then3067, label %endif3069 +then3067: + %t863 = load { ptr, i64, i64 }, ptr %a860 + store { ptr, i64, i64 } { ptr @.str.1963, i64 0, i64 0 }, ptr %a860 + store { ptr, i64, i64 } %t863, ptr %a864 + call void @finch_str_drop(ptr %a864) + br label %endif3069 +endif3069: + %t865 = load ptr, ptr %a1 + %t866 = load { ptr, i64, i64 }, ptr %a860 + %t867 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 11 + %t868 = load i64, ptr %a857 + %t869 = load { ptr, i64, i64 }, ptr %t867 + %t870 = extractvalue { ptr, i64, i64 } %t869, 1 + %t871 = icmp uge i64 %t868, %t870 + br i1 %t871, label %range3070, label %inrange3071 +range3070: + call void @finch_panic_index(ptr @.str.1965, i64 1247, i64 %t868, i64 %t870) + unreachable +inrange3071: + %t872 = extractvalue { ptr, i64, i64 } %t869, 0 + %t873 = getelementptr inbounds { ptr, i64, i64 }, ptr %t872, i64 %t868 + %t874 = load { ptr, i64, i64 }, ptr %t873 + store { ptr, i64, i64 } %t866, ptr %a876 + store { ptr, i64, i64 } %t874, ptr %a877 + call void @finch_str_concat(ptr %a875, ptr %a876, ptr %a877) + %t878 = load { ptr, i64, i64 }, ptr %a875 + store { ptr, i64, i64 } %t878, ptr %a880 + store { ptr, i64, i64 } { ptr @.str.1966, i64 2, i64 0 }, ptr %a881 + call void @finch_str_concat(ptr %a879, ptr %a880, ptr %a881) + store { ptr, i64, i64 } %t878, ptr %a882 + call void @finch_str_drop(ptr %a882) + %t883 = load { ptr, i64, i64 }, ptr %a879 + call void @finch.gen.bufText(ptr %t865, { ptr, i64, i64 } { ptr @.str.1964, i64 4, i64 0 }, { ptr, i64, i64 } %t883) + store { ptr, i64, i64 } %t883, ptr %a884 + call void @finch_str_drop(ptr %a884) + %t885 = load ptr, ptr %a1 + %t886 = load { ptr, i64, i64 }, ptr %a845 + store { ptr, i64, i64 } { ptr @.str.1967, i64 23, i64 0 }, ptr %a888 + store { ptr, i64, i64 } %t886, ptr %a889 + call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889) + %t890 = load { ptr, i64, i64 }, ptr %a887 + store { ptr, i64, i64 } %t890, ptr %a892 + store { ptr, i64, i64 } { ptr @.str.1968, i64 21, i64 0 }, ptr %a893 + call void @finch_str_concat(ptr %a891, ptr %a892, ptr %a893) + store { ptr, i64, i64 } %t890, ptr %a894 + call void @finch_str_drop(ptr %a894) + %t895 = load { ptr, i64, i64 }, ptr %a891 + %t896 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 3 + %t897 = load i64, ptr %a857 + %t898 = load { ptr, i64, i64 }, ptr %t896 + %t899 = extractvalue { ptr, i64, i64 } %t898, 1 + %t900 = icmp uge i64 %t897, %t899 + br i1 %t900, label %range3072, label %inrange3073 +range3072: + call void @finch_panic_index(ptr @.str.1969, i64 1248, i64 %t897, i64 %t899) + unreachable +inrange3073: + %t901 = extractvalue { ptr, i64, i64 } %t898, 0 + %t902 = getelementptr inbounds i64, ptr %t901, i64 %t897 + %t903 = load i64, ptr %t902 + call void @finch_str_from_int(ptr %a904, i64 %t903) + %t905 = load { ptr, i64, i64 }, ptr %a904 + store { ptr, i64, i64 } %t895, ptr %a907 + store { ptr, i64, i64 } %t905, ptr %a908 + call void @finch_str_concat(ptr %a906, ptr %a907, ptr %a908) + store { ptr, i64, i64 } %t895, ptr %a909 + call void @finch_str_drop(ptr %a909) + store { ptr, i64, i64 } %t905, ptr %a910 + call void @finch_str_drop(ptr %a910) + %t911 = load { ptr, i64, i64 }, ptr %a906 + %t912 = call { ptr, i64, i64 } @finch.gen.op(ptr %t885, { ptr, i64, i64 } %t911) + store { ptr, i64, i64 } %t911, ptr %a913 + call void @finch_str_drop(ptr %a913) + store { ptr, i64, i64 } %t912, ptr %a914 + %t915 = load ptr, ptr %a1 + %t916 = load ptr, ptr %a1 + %t917 = load ptr, ptr %a1 + %t918 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 + %t919 = load i64, ptr %a857 + %t920 = load { ptr, i64, i64 }, ptr %t918 + %t921 = extractvalue { ptr, i64, i64 } %t920, 1 + %t922 = icmp uge i64 %t919, %t921 + br i1 %t922, label %range3074, label %inrange3075 +range3074: + call void @finch_panic_index(ptr @.str.1971, i64 1249, i64 %t919, i64 %t921) + unreachable +inrange3075: + %t923 = extractvalue { ptr, i64, i64 } %t920, 0 + %t924 = getelementptr inbounds %S.ast.Type, ptr %t923, i64 %t919 + %t925 = load %S.ast.Type, ptr %t924 + %t926 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t917, %S.ast.Type %t925) + %t927 = load { ptr, i64, i64 }, ptr %a914 + %t928 = call { ptr, i64, i64 } @finch.gen.load(ptr %t916, { ptr, i64, i64 } %t926, { ptr, i64, i64 } %t927) + store { ptr, i64, i64 } %t926, ptr %a929 + call void @finch_str_drop(ptr %a929) + %t930 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 + %t931 = load i64, ptr %a857 + %t932 = load { ptr, i64, i64 }, ptr %t930 + %t933 = extractvalue { ptr, i64, i64 } %t932, 1 + %t934 = icmp uge i64 %t931, %t933 + br i1 %t934, label %range3076, label %inrange3077 +range3076: + call void @finch_panic_index(ptr @.str.1972, i64 1249, i64 %t931, i64 %t933) + unreachable +inrange3077: + %t935 = extractvalue { ptr, i64, i64 } %t932, 0 + %t936 = getelementptr inbounds %S.ast.Type, ptr %t935, i64 %t931 + %t937 = load %S.ast.Type, ptr %t936 + call void @finch.gen.emitFormat(ptr %t915, { ptr, i64, i64 } { ptr @.str.1970, i64 4, i64 0 }, { ptr, i64, i64 } %t928, %S.ast.Type %t937, i1 true) + store { ptr, i64, i64 } %t928, ptr %a938 + call void @finch_str_drop(ptr %a938) + call void @finch_str_drop(ptr %a914) + call void @finch_str_drop(ptr %a860) + br label %for.step3065 +for.step3065: + %t939 = load i64, ptr %a857 + %t940 = add i64 %t939, 1 + store i64 %t940, ptr %a857 + br label %for.cond3063 +for.end3066: + %t941 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t941, { ptr, i64, i64 } { ptr @.str.1973, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1974, i64 1, i64 0 }) + call void @finch_str_drop(ptr %a845) + call void @finch.drop.S_gen_StructDef(ptr %a841) + br label %endif3010 +endif3010: + br label %endif2993 +endif2993: + br label %endif2968 +endif2968: + br label %endif2959 +endif2959: + %t942 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t942, { ptr, i64, i64 } { ptr @.str.1975, i64 8, i64 0 }) + %t943 = load ptr, ptr %a1 + %t944 = load %S.gen.Saved, ptr %a32 + %t945 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1976, i64 21, i64 0 }, ptr %a947 + store { ptr, i64, i64 } %t945, ptr %a948 + call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948) + %t949 = load { ptr, i64, i64 }, ptr %a946 + store { ptr, i64, i64 } %t949, ptr %a951 + store { ptr, i64, i64 } { ptr @.str.1977, i64 18, i64 0 }, ptr %a952 + call void @finch_str_concat(ptr %a950, ptr %a951, ptr %a952) + store { ptr, i64, i64 } %t949, ptr %a953 + call void @finch_str_drop(ptr %a953) + %t954 = load { ptr, i64, i64 }, ptr %a950 + call void @finch.gen.endHelper(ptr %t943, %S.gen.Saved %t944, { ptr, i64, i64 } %t954) + store { ptr, i64, i64 } %t954, ptr %a955 + call void @finch_str_drop(ptr %a955) + %t956 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t956 +} + +define internal { ptr, i64, i64 } @finch.gen.intCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a7 = alloca i64, align 16 + %a10 = alloca i64, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i64 @finch.gen.bitsOf(%S.ast.Type %t5) + store i64 %t6, ptr %a7 + %t8 = load %S.ast.Type, ptr %a4 + %t9 = call i64 @finch.gen.bitsOf(%S.ast.Type %t8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a7 + %t12 = load i64, ptr %a10 + %t13 = icmp eq i64 %t11, %t12 + br i1 %t13, label %then3078, label %endif3080 +then3078: + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_copy(ptr %a16, ptr %a15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t17 +endif3080: + %t18 = load i64, ptr %a10 + %t19 = load i64, ptr %a7 + %t20 = icmp slt i64 %t18, %t19 + br i1 %t20, label %then3081, label %endif3083 +then3081: + %t21 = load ptr, ptr %a1 + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Type, ptr %a3 + %t24 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t22, %S.ast.Type %t23) + store { ptr, i64, i64 } { ptr @.str.1978, i64 6, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.1979, i64 1, i64 0 }, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + %t35 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t34, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1980, i64 4, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = load ptr, ptr %a1 + %t47 = load %S.ast.Type, ptr %a4 + %t48 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t46, %S.ast.Type %t47) + store { ptr, i64, i64 } %t45, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t45, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + %t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t21, { ptr, i64, i64 } %t54) + store { ptr, i64, i64 } %t54, ptr %a56 + call void @finch_str_drop(ptr %a56) + ret { ptr, i64, i64 } %t55 +endif3083: + %t57 = load %S.ast.Type, ptr %a3 + %t58 = call i1 @finch.gen.isSigned(%S.ast.Type %t57) + br i1 %t58, label %then3084, label %endif3086 +then3084: + %t59 = load ptr, ptr %a1 + %t60 = load ptr, ptr %a1 + %t61 = load %S.ast.Type, ptr %a3 + %t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t60, %S.ast.Type %t61) + store { ptr, i64, i64 } { ptr @.str.1981, i64 5, i64 0 }, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t67, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.1982, i64 1, i64 0 }, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + %t73 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t72, ptr %a75 + store { ptr, i64, i64 } %t73, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t72, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } %t78, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.1983, i64 4, i64 0 }, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + store { ptr, i64, i64 } %t78, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a79 + %t84 = load ptr, ptr %a1 + %t85 = load %S.ast.Type, ptr %a4 + %t86 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t84, %S.ast.Type %t85) + store { ptr, i64, i64 } %t83, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t83, ptr %a90 + call void @finch_str_drop(ptr %a90) + store { ptr, i64, i64 } %t86, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a87 + %t93 = call { ptr, i64, i64 } @finch.gen.op(ptr %t59, { ptr, i64, i64 } %t92) + store { ptr, i64, i64 } %t92, ptr %a94 + call void @finch_str_drop(ptr %a94) + ret { ptr, i64, i64 } %t93 +endif3086: + %t95 = load ptr, ptr %a1 + %t96 = load ptr, ptr %a1 + %t97 = load %S.ast.Type, ptr %a3 + %t98 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t97) + store { ptr, i64, i64 } { ptr @.str.1984, i64 5, i64 0 }, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.1985, i64 1, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t108, ptr %a111 + store { ptr, i64, i64 } %t109, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.1986, i64 4, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load ptr, ptr %a1 + %t121 = load %S.ast.Type, ptr %a4 + %t122 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t120, %S.ast.Type %t121) + store { ptr, i64, i64 } %t119, ptr %a124 + store { ptr, i64, i64 } %t122, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + store { ptr, i64, i64 } %t119, ptr %a126 + call void @finch_str_drop(ptr %a126) + store { ptr, i64, i64 } %t122, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a123 + %t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t95, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t128, ptr %a130 + call void @finch_str_drop(ptr %a130) + ret { ptr, i64, i64 } %t129 +} + +define internal { ptr, i64, i64 } @finch.gen.floatCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t8 = load { ptr, i64, i64 }, ptr %t7 + store { ptr, i64, i64 } %t6, ptr %a9 + store { ptr, i64, i64 } %t8, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then3087, label %endif3089 +then3087: + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_copy(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + ret { ptr, i64, i64 } %t16 +endif3089: + %t17 = load %S.ast.Type, ptr %a4 + %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) + %t19 = load %S.ast.Type, ptr %a3 + %t20 = call i64 @finch.gen.bitsOf(%S.ast.Type %t19) + %t21 = icmp sgt i64 %t18, %t20 + br i1 %t21, label %then3090, label %endif3092 +then3090: + %t22 = load ptr, ptr %a1 + %t23 = load ptr, ptr %a1 + %t24 = load %S.ast.Type, ptr %a3 + %t25 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t23, %S.ast.Type %t24) + store { ptr, i64, i64 } { ptr @.str.1987, i64 6, i64 0 }, ptr %a27 + store { ptr, i64, i64 } %t25, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.1988, i64 1, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + %t36 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t35, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t35, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.1989, i64 4, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t41, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = load ptr, ptr %a1 + %t48 = load %S.ast.Type, ptr %a4 + %t49 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t47, %S.ast.Type %t48) + store { ptr, i64, i64 } %t46, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t46, ptr %a53 + call void @finch_str_drop(ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a50 + %t56 = call { ptr, i64, i64 } @finch.gen.op(ptr %t22, { ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t55, ptr %a57 + call void @finch_str_drop(ptr %a57) + ret { ptr, i64, i64 } %t56 +endif3092: + %t58 = load ptr, ptr %a1 + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Type, ptr %a3 + %t61 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t59, %S.ast.Type %t60) + store { ptr, i64, i64 } { ptr @.str.1990, i64 8, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1991, i64 1, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t71, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.1992, i64 4, i64 0 }, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load ptr, ptr %a1 + %t84 = load %S.ast.Type, ptr %a4 + %t85 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t83, %S.ast.Type %t84) + store { ptr, i64, i64 } %t82, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t82, ptr %a89 + call void @finch_str_drop(ptr %a89) + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a86 + %t92 = call { ptr, i64, i64 } @finch.gen.op(ptr %t58, { ptr, i64, i64 } %t91) + store { ptr, i64, i64 } %t91, ptr %a93 + call void @finch_str_drop(ptr %a93) + ret { ptr, i64, i64 } %t92 +} + +define internal { ptr, i64, i64 } @finch.gen.intToFloat(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.isSigned(%S.ast.Type %t5) + br i1 %t6, label %then3093, label %endif3095 +then3093: + %t7 = load ptr, ptr %a1 + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Type, ptr %a3 + %t10 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t8, %S.ast.Type %t9) + store { ptr, i64, i64 } { ptr @.str.1993, i64 7, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t10, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1994, i64 1, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + %t21 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t20, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t20, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.1995, i64 4, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load ptr, ptr %a1 + %t33 = load %S.ast.Type, ptr %a4 + %t34 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t32, %S.ast.Type %t33) + store { ptr, i64, i64 } %t31, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t31, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t7, { ptr, i64, i64 } %t40) + store { ptr, i64, i64 } %t40, ptr %a42 + call void @finch_str_drop(ptr %a42) + ret { ptr, i64, i64 } %t41 +endif3095: + %t43 = load ptr, ptr %a1 + %t44 = load ptr, ptr %a1 + %t45 = load %S.ast.Type, ptr %a3 + %t46 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t44, %S.ast.Type %t45) + store { ptr, i64, i64 } { ptr @.str.1996, i64 7, i64 0 }, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.1997, i64 1, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + %t57 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t56, ptr %a59 + store { ptr, i64, i64 } %t57, ptr %a60 + call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) + store { ptr, i64, i64 } %t56, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load { ptr, i64, i64 }, ptr %a58 + store { ptr, i64, i64 } %t62, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.1998, i64 4, i64 0 }, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + %t68 = load ptr, ptr %a1 + %t69 = load %S.ast.Type, ptr %a4 + %t70 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t68, %S.ast.Type %t69) + store { ptr, i64, i64 } %t67, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t67, ptr %a74 + call void @finch_str_drop(ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a71 + %t77 = call { ptr, i64, i64 } @finch.gen.op(ptr %t43, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a78 + call void @finch_str_drop(ptr %a78) + ret { ptr, i64, i64 } %t77 +} + +define internal void @finch.copy.S_gen_Val(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Val, ptr %src + store %S.gen.Val %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal %S.gen.Val @finch.gen.coerce(ptr %p0, %S.gen.Val %p1, %S.ast.Type %p2, %S.ast.Node %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca %S.gen.Val, align 16 + %a12 = alloca %S.gen.Val, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a31 = alloca %S.ast.Type, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca %S.ast.Type, align 16 + %a67 = alloca %S.ast.Type, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca %S.ast.Type, align 16 + %a93 = alloca %S.ast.Type, align 16 + %a110 = alloca %S.ast.Type, align 16 + %a111 = alloca %S.ast.Type, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca %S.ast.Type, align 16 + %a162 = alloca %S.ast.Type, align 16 + %a175 = alloca %S.ast.Type, align 16 + %a176 = alloca %S.ast.Type, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca %S.ast.Type, align 16 + %a203 = alloca %S.ast.Type, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca %S.ast.Type, align 16 + %a233 = alloca %S.ast.Type, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca %S.gen.Val, align 16 + %a348 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %t6 + %t8 = load %S.ast.Type, ptr %a3 + %t9 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t8) + br i1 %t9, label %then3096, label %endif3098 +then3096: + %t10 = load %S.gen.Val, ptr %a2 + store %S.gen.Val %t10, ptr %a11 + call void @finch.copy.S_gen_Val(ptr %a12, ptr %a11) + %t13 = load %S.gen.Val, ptr %a12 + ret %S.gen.Val %t13 +endif3098: + %t14 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t15 = getelementptr inbounds %S.ast.Type, ptr %t14, i32 0, i32 0 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1999, i64 4, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.from3099 +logic.from3099: + br i1 %t20, label %logic.rhs3100, label %logic.end3101 +logic.rhs3100: + %t21 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.2000, i64 3, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br label %logic.rend3102 +logic.rend3102: + br label %logic.end3101 +logic.end3101: + %t27 = phi i1 [ false, %logic.from3099 ], [ %t26, %logic.rend3102 ] + br i1 %t27, label %then3103, label %endif3105 +then3103: + %t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.2001, i64 4, i64 0 }, 0 + %t29 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t29, ptr %a30 + call void @finch.copy.S_ast_Type(ptr %a31, ptr %a30) + %t32 = load %S.ast.Type, ptr %a31 + %t33 = insertvalue %S.gen.Val %t28, %S.ast.Type %t32, 1 + ret %S.gen.Val %t33 +endif3105: + %t34 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t35 = getelementptr inbounds %S.ast.Type, ptr %t34, i32 0, i32 0 + %t36 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.2002, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.from3106 +logic.from3106: + br i1 %t40, label %logic.rhs3107, label %logic.end3108 +logic.rhs3107: + %t41 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t42, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.2003, i64 3, i64 0 }, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend3109 +logic.rend3109: + br label %logic.end3108 +logic.end3108: + %t47 = phi i1 [ false, %logic.from3106 ], [ %t46, %logic.rend3109 ] + br label %logic.from3110 +logic.from3110: + br i1 %t47, label %logic.rhs3111, label %logic.end3112 +logic.rhs3111: + %t48 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t49 = getelementptr inbounds %S.ast.Type, ptr %t48, i32 0, i32 1 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 + %t51 = load i64, ptr %t50 + %t52 = icmp eq i64 %t51, 0 + br label %logic.from3113 +logic.from3113: + br i1 %t52, label %logic.end3115, label %logic.rhs3114 +logic.rhs3114: + %t53 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = icmp eq i64 %t55, 0 + br label %logic.rend3116 +logic.rend3116: + br label %logic.end3115 +logic.end3115: + %t57 = phi i1 [ true, %logic.from3113 ], [ %t56, %logic.rend3116 ] + br label %logic.rend3117 +logic.rend3117: + br label %logic.end3112 +logic.end3112: + %t58 = phi i1 [ false, %logic.from3110 ], [ %t57, %logic.rend3117 ] + br i1 %t58, label %then3118, label %endif3120 +then3118: + %t59 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + call void @finch_str_copy(ptr %a62, ptr %a61) + %t63 = load { ptr, i64, i64 }, ptr %a62 + %t64 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t63, 0 + %t65 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t65, ptr %a66 + call void @finch.copy.S_ast_Type(ptr %a67, ptr %a66) + %t68 = load %S.ast.Type, ptr %a67 + %t69 = insertvalue %S.gen.Val %t64, %S.ast.Type %t68, 1 + ret %S.gen.Val %t69 +endif3120: + %t70 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t71 = load %S.ast.Type, ptr %t70 + %t72 = call i1 @finch.gen.isInt(%S.ast.Type %t71) + br label %logic.from3121 +logic.from3121: + br i1 %t72, label %logic.rhs3122, label %logic.end3123 +logic.rhs3122: + %t73 = load %S.ast.Type, ptr %a3 + %t74 = call i1 @finch.gen.isInt(%S.ast.Type %t73) + br label %logic.rend3124 +logic.rend3124: + br label %logic.end3123 +logic.end3123: + %t75 = phi i1 [ false, %logic.from3121 ], [ %t74, %logic.rend3124 ] + br i1 %t75, label %then3125, label %endif3127 +then3125: + %t76 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t77 = load i1, ptr %t76 + br label %logic.from3128 +logic.from3128: + br i1 %t77, label %logic.rhs3129, label %logic.end3130 +logic.rhs3129: + %t78 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + %t80 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t81 = load %S.ast.Type, ptr %t80 + %t82 = load %S.ast.Type, ptr %a3 + %t83 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t79, %S.ast.Type %t81, %S.ast.Type %t82) + br label %logic.rend3131 +logic.rend3131: + br label %logic.end3130 +logic.end3130: + %t84 = phi i1 [ false, %logic.from3128 ], [ %t83, %logic.rend3131 ] + br i1 %t84, label %then3132, label %endif3134 +then3132: + %t85 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t86, ptr %a87 + call void @finch_str_copy(ptr %a88, ptr %a87) + %t89 = load { ptr, i64, i64 }, ptr %a88 + %t90 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t89, 0 + %t91 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t91, ptr %a92 + call void @finch.copy.S_ast_Type(ptr %a93, ptr %a92) + %t94 = load %S.ast.Type, ptr %a93 + %t95 = insertvalue %S.gen.Val %t90, %S.ast.Type %t94, 1 + %t96 = insertvalue %S.gen.Val %t95, i1 true, 3 + ret %S.gen.Val %t96 +endif3134: + %t97 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t98 = load %S.ast.Type, ptr %t97 + %t99 = load %S.ast.Type, ptr %a3 + %t100 = call i1 @finch.gen.widens(%S.ast.Type %t98, %S.ast.Type %t99) + br i1 %t100, label %then3135, label %endif3137 +then3135: + %t101 = load ptr, ptr %a1 + %t102 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t103 = load { ptr, i64, i64 }, ptr %t102 + %t104 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t105 = load %S.ast.Type, ptr %t104 + %t106 = load %S.ast.Type, ptr %a3 + %t107 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t101, { ptr, i64, i64 } %t103, %S.ast.Type %t105, %S.ast.Type %t106) + %t108 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t107, 0 + %t109 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t109, ptr %a110 + call void @finch.copy.S_ast_Type(ptr %a111, ptr %a110) + %t112 = load %S.ast.Type, ptr %a111 + %t113 = insertvalue %S.gen.Val %t108, %S.ast.Type %t112, 1 + ret %S.gen.Val %t113 +endif3137: + %t114 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t115 = load i1, ptr %t114 + br i1 %t115, label %then3138, label %endif3140 +then3138: + %t116 = load ptr, ptr %a1 + %t117 = load %S.ast.Node, ptr %a4 + %t118 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t119 = load { ptr, i64, i64 }, ptr %t118 + store { ptr, i64, i64 } { ptr @.str.2004, i64 11, i64 0 }, ptr %a121 + store { ptr, i64, i64 } %t119, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.2005, i64 16, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = load %S.ast.Type, ptr %a3 + %t130 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t129) + store { ptr, i64, i64 } %t128, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t128, ptr %a134 + call void @finch_str_drop(ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a131 + call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } %t136) + store { ptr, i64, i64 } %t136, ptr %a137 + call void @finch_str_drop(ptr %a137) + br label %endif3140 +endif3140: + br label %endif3127 +endif3127: + %t138 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t139 = load %S.ast.Type, ptr %t138 + %t140 = call i1 @finch.gen.isInt(%S.ast.Type %t139) + br label %logic.from3141 +logic.from3141: + br i1 %t140, label %logic.rhs3142, label %logic.end3143 +logic.rhs3142: + %t141 = load %S.ast.Type, ptr %a3 + %t142 = call i1 @finch.gen.isFloat(%S.ast.Type %t141) + br label %logic.rend3144 +logic.rend3144: + br label %logic.end3143 +logic.end3143: + %t143 = phi i1 [ false, %logic.from3141 ], [ %t142, %logic.rend3144 ] + br i1 %t143, label %then3145, label %endif3147 +then3145: + %t144 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t145 = load i1, ptr %t144 + br label %logic.from3148 +logic.from3148: + br i1 %t145, label %logic.rhs3149, label %logic.end3150 +logic.rhs3149: + %t146 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t147 = load { ptr, i64, i64 }, ptr %t146 + store { ptr, i64, i64 } %t147, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.2006, i64 5, i64 0 }, ptr %a149 + %t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149) + %t151 = icmp ne i32 %t150, 0 + br label %logic.rend3151 +logic.rend3151: + br label %logic.end3150 +logic.end3150: + %t152 = phi i1 [ false, %logic.from3148 ], [ %t151, %logic.rend3151 ] + br i1 %t152, label %then3152, label %endif3154 +then3152: + %t153 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t154 = load { ptr, i64, i64 }, ptr %t153 + store { ptr, i64, i64 } %t154, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.2007, i64 2, i64 0 }, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + %t159 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t158, 0 + %t160 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t160, ptr %a161 + call void @finch.copy.S_ast_Type(ptr %a162, ptr %a161) + %t163 = load %S.ast.Type, ptr %a162 + %t164 = insertvalue %S.gen.Val %t159, %S.ast.Type %t163, 1 + %t165 = insertvalue %S.gen.Val %t164, i1 true, 3 + ret %S.gen.Val %t165 +endif3154: + %t166 = load ptr, ptr %a1 + %t167 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t168 = load { ptr, i64, i64 }, ptr %t167 + %t169 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t170 = load %S.ast.Type, ptr %t169 + %t171 = load %S.ast.Type, ptr %a3 + %t172 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t166, { ptr, i64, i64 } %t168, %S.ast.Type %t170, %S.ast.Type %t171) + %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 + %t174 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t174, ptr %a175 + call void @finch.copy.S_ast_Type(ptr %a176, ptr %a175) + %t177 = load %S.ast.Type, ptr %a176 + %t178 = insertvalue %S.gen.Val %t173, %S.ast.Type %t177, 1 + ret %S.gen.Val %t178 +endif3147: + %t179 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i32 0, i32 0 + %t181 = load { ptr, i64, i64 }, ptr %t180 + store { ptr, i64, i64 } %t181, ptr %a182 + store { ptr, i64, i64 } { ptr @.str.2008, i64 3, i64 0 }, ptr %a183 + %t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183) + %t185 = icmp ne i32 %t184, 0 + br label %logic.from3155 +logic.from3155: + br i1 %t185, label %logic.rhs3156, label %logic.end3157 +logic.rhs3156: + %t186 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t187 = load { ptr, i64, i64 }, ptr %t186 + store { ptr, i64, i64 } %t187, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.2009, i64 5, i64 0 }, ptr %a189 + %t190 = call i32 @finch_str_eq(ptr %a188, ptr %a189) + %t191 = icmp ne i32 %t190, 0 + br label %logic.rend3158 +logic.rend3158: + br label %logic.end3157 +logic.end3157: + %t192 = phi i1 [ false, %logic.from3155 ], [ %t191, %logic.rend3158 ] + br i1 %t192, label %then3159, label %endif3161 +then3159: + %t193 = load ptr, ptr %a1 + %t194 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t195 = load { ptr, i64, i64 }, ptr %t194 + %t196 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t197 = load %S.ast.Type, ptr %t196 + %t198 = load %S.ast.Type, ptr %a3 + %t199 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t193, { ptr, i64, i64 } %t195, %S.ast.Type %t197, %S.ast.Type %t198) + %t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t199, 0 + %t201 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t201, ptr %a202 + call void @finch.copy.S_ast_Type(ptr %a203, ptr %a202) + %t204 = load %S.ast.Type, ptr %a203 + %t205 = insertvalue %S.gen.Val %t200, %S.ast.Type %t204, 1 + ret %S.gen.Val %t205 +endif3161: + %t206 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t207 = getelementptr inbounds %S.ast.Type, ptr %t206, i32 0, i32 0 + %t208 = load { ptr, i64, i64 }, ptr %t207 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.2010, i64 5, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br label %logic.from3162 +logic.from3162: + br i1 %t212, label %logic.rhs3163, label %logic.end3164 +logic.rhs3163: + %t213 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t214 = load { ptr, i64, i64 }, ptr %t213 + store { ptr, i64, i64 } %t214, ptr %a215 + store { ptr, i64, i64 } { ptr @.str.2011, i64 3, i64 0 }, ptr %a216 + %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) + %t218 = icmp ne i32 %t217, 0 + br label %logic.rend3165 +logic.rend3165: + br label %logic.end3164 +logic.end3164: + %t219 = phi i1 [ false, %logic.from3162 ], [ %t218, %logic.rend3165 ] + br label %logic.from3166 +logic.from3166: + br i1 %t219, label %logic.rhs3167, label %logic.end3168 +logic.rhs3167: + %t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t221 = load i1, ptr %t220 + br label %logic.rend3169 +logic.rend3169: + br label %logic.end3168 +logic.end3168: + %t222 = phi i1 [ false, %logic.from3166 ], [ %t221, %logic.rend3169 ] + br i1 %t222, label %then3170, label %endif3172 +then3170: + %t223 = load ptr, ptr %a1 + %t224 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t225 = load { ptr, i64, i64 }, ptr %t224 + %t226 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t227 = load %S.ast.Type, ptr %t226 + %t228 = load %S.ast.Type, ptr %a3 + %t229 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t223, { ptr, i64, i64 } %t225, %S.ast.Type %t227, %S.ast.Type %t228) + %t230 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t229, 0 + %t231 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t231, ptr %a232 + call void @finch.copy.S_ast_Type(ptr %a233, ptr %a232) + %t234 = load %S.ast.Type, ptr %a233 + %t235 = insertvalue %S.gen.Val %t230, %S.ast.Type %t234, 1 + ret %S.gen.Val %t235 +endif3172: + %t236 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t236, ptr %a238 + store { ptr, i64, i64 } { ptr @.str.2012, i64 9, i64 0 }, ptr %a239 + call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a237 + %t241 = load %S.ast.Type, ptr %a3 + %t242 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t241) + store { ptr, i64, i64 } %t240, ptr %a244 + store { ptr, i64, i64 } %t242, ptr %a245 + call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) + store { ptr, i64, i64 } %t240, ptr %a246 + call void @finch_str_drop(ptr %a246) + store { ptr, i64, i64 } %t242, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a243 + store { ptr, i64, i64 } %t248, ptr %a250 + store { ptr, i64, i64 } { ptr @.str.2013, i64 14, i64 0 }, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t248, ptr %a252 + call void @finch_str_drop(ptr %a252) + %t253 = load { ptr, i64, i64 }, ptr %a249 + %t254 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t255 = load %S.ast.Type, ptr %t254 + %t256 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t255) + store { ptr, i64, i64 } %t253, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t253, ptr %a260 + call void @finch_str_drop(ptr %a260) + store { ptr, i64, i64 } %t256, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t262, ptr %a263 + %t264 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t265 = load %S.ast.Type, ptr %t264 + %t266 = call i1 @finch.gen.isNumber(%S.ast.Type %t265) + br label %logic.from3173 +logic.from3173: + br i1 %t266, label %logic.rhs3174, label %logic.end3175 +logic.rhs3174: + %t267 = load %S.ast.Type, ptr %a3 + %t268 = call i1 @finch.gen.isNumber(%S.ast.Type %t267) + br label %logic.rend3176 +logic.rend3176: + br label %logic.end3175 +logic.end3175: + %t269 = phi i1 [ false, %logic.from3173 ], [ %t268, %logic.rend3176 ] + br i1 %t269, label %then3177, label %endif3179 +then3177: + %t270 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t270, ptr %a272 + store { ptr, i64, i64 } { ptr @.str.2014, i64 6, i64 0 }, ptr %a273 + call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a271 + %t275 = load %S.ast.Type, ptr %a3 + %t276 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t275) + store { ptr, i64, i64 } %t274, ptr %a278 + store { ptr, i64, i64 } %t276, ptr %a279 + call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) + store { ptr, i64, i64 } %t274, ptr %a280 + call void @finch_str_drop(ptr %a280) + store { ptr, i64, i64 } %t276, ptr %a281 + call void @finch_str_drop(ptr %a281) + %t282 = load { ptr, i64, i64 }, ptr %a277 + store { ptr, i64, i64 } %t282, ptr %a284 + store { ptr, i64, i64 } { ptr @.str.2015, i64 16, i64 0 }, ptr %a285 + call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285) + store { ptr, i64, i64 } %t282, ptr %a286 + call void @finch_str_drop(ptr %a286) + %t287 = load { ptr, i64, i64 }, ptr %a283 + %t288 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t287, ptr %a263 + store { ptr, i64, i64 } %t288, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t291 = load %S.ast.Type, ptr %t290 + %t292 = call i1 @finch.gen.isFloat(%S.ast.Type %t291) + br label %logic.from3180 +logic.from3180: + br i1 %t292, label %logic.rhs3181, label %logic.end3182 +logic.rhs3181: + %t293 = load %S.ast.Type, ptr %a3 + %t294 = call i1 @finch.gen.isInt(%S.ast.Type %t293) + br label %logic.rend3183 +logic.rend3183: + br label %logic.end3182 +logic.end3182: + %t295 = phi i1 [ false, %logic.from3180 ], [ %t294, %logic.rend3183 ] + br i1 %t295, label %then3184, label %endif3186 +then3184: + %t296 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.2016, i64 26, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + %t301 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t300, ptr %a263 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + br label %endif3186 +endif3186: + %t303 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t303, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.2017, i64 1, i64 0 }, ptr %a306 + call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a304 + %t308 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t307, ptr %a263 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif3179 +endif3179: + %t310 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t311 = load { ptr, i64, i64 }, ptr %t310 + store { ptr, i64, i64 } %t311, ptr %a312 + store { ptr, i64, i64 } { ptr @.str.2018, i64 3, i64 0 }, ptr %a313 + %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) + %t315 = icmp ne i32 %t314, 0 + br label %logic.from3187 +logic.from3187: + br i1 %t315, label %logic.rhs3188, label %logic.end3189 +logic.rhs3188: + %t316 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t317 = load %S.ast.Type, ptr %t316 + %t318 = call i1 @finch.gen.isNumber(%S.ast.Type %t317) + br label %logic.from3190 +logic.from3190: + br i1 %t318, label %logic.end3192, label %logic.rhs3191 +logic.rhs3191: + %t319 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t320 = getelementptr inbounds %S.ast.Type, ptr %t319, i32 0, i32 0 + %t321 = load { ptr, i64, i64 }, ptr %t320 + store { ptr, i64, i64 } %t321, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.2019, i64 4, i64 0 }, ptr %a323 + %t324 = call i32 @finch_str_eq(ptr %a322, ptr %a323) + %t325 = icmp ne i32 %t324, 0 + br label %logic.rend3193 +logic.rend3193: + br label %logic.end3192 +logic.end3192: + %t326 = phi i1 [ true, %logic.from3190 ], [ %t325, %logic.rend3193 ] + br label %logic.from3194 +logic.from3194: + br i1 %t326, label %logic.end3196, label %logic.rhs3195 +logic.rhs3195: + %t327 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t328 = getelementptr inbounds %S.ast.Type, ptr %t327, i32 0, i32 0 + %t329 = load { ptr, i64, i64 }, ptr %t328 + store { ptr, i64, i64 } %t329, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.2020, i64 4, i64 0 }, ptr %a331 + %t332 = call i32 @finch_str_eq(ptr %a330, ptr %a331) + %t333 = icmp ne i32 %t332, 0 + br label %logic.rend3197 +logic.rend3197: + br label %logic.end3196 +logic.end3196: + %t334 = phi i1 [ true, %logic.from3194 ], [ %t333, %logic.rend3197 ] + br label %logic.rend3198 +logic.rend3198: + br label %logic.end3189 +logic.end3189: + %t335 = phi i1 [ false, %logic.from3187 ], [ %t334, %logic.rend3198 ] + br i1 %t335, label %then3199, label %endif3201 +then3199: + %t336 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.2021, i64 34, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a337 + %t341 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t340, ptr %a263 + store { ptr, i64, i64 } %t341, ptr %a342 + call void @finch_str_drop(ptr %a342) + br label %endif3201 +endif3201: + %t343 = load ptr, ptr %a1 + %t344 = load %S.ast.Node, ptr %a4 + %t345 = load { ptr, i64, i64 }, ptr %a263 + call void @finch.gen.fail(ptr %t343, %S.ast.Node %t344, { ptr, i64, i64 } %t345) + %t346 = load %S.gen.Val, ptr %a2 + store %S.gen.Val %t346, ptr %a347 + call void @finch.copy.S_gen_Val(ptr %a348, ptr %a347) + %t349 = load %S.gen.Val, ptr %a348 + call void @finch_str_drop(ptr %a263) + ret %S.gen.Val %t349 +} + +define internal i64 @finch.gen.lookup(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a19 = alloca i64, align 16 + %a32 = alloca i64, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3202, label %ok3203 +panic3202: + call void @finch_panic(ptr @.str.2022, i64 1346, ptr @.str.2023) + unreachable +ok3203: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond3204 +for.cond3204: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body3205, label %for.end3207 +for.body3205: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic3208, label %ok3209 +panic3208: + call void @finch_panic(ptr @.str.2024, i64 1347, ptr @.str.2025) + unreachable +ok3209: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 10 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = sub i64 %t15, 1 + %t17 = load i64, ptr %a8 + %t18 = sub i64 %t16, %t17 + store i64 %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic3210, label %ok3211 +panic3210: + call void @finch_panic(ptr @.str.2026, i64 1348, ptr @.str.2027) + unreachable +ok3211: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 + %t23 = load i64, ptr %a19 + %t24 = load { ptr, i64, i64 }, ptr %t22 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range3212, label %inrange3213 +range3212: + call void @finch_panic_index(ptr @.str.2028, i64 1348, i64 %t23, i64 %t25) + unreachable +inrange3213: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 + %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t31 = load i64, ptr %t30 + store i64 0, ptr %a32 + br label %for.cond3214 +for.cond3214: + %t33 = load i64, ptr %a32 + %t34 = icmp slt i64 %t33, %t31 + br i1 %t34, label %for.body3215, label %for.end3217 +for.body3215: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic3218, label %ok3219 +panic3218: + call void @finch_panic(ptr @.str.2029, i64 1349, ptr @.str.2030) + unreachable +ok3219: + %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 10 + %t38 = load i64, ptr %a19 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range3220, label %inrange3221 +range3220: + call void @finch_panic_index(ptr @.str.2031, i64 1349, i64 %t38, i64 %t40) + unreachable +inrange3221: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.gen.Scope, ptr %t42, i64 %t38 + %t44 = getelementptr inbounds %S.gen.Scope, ptr %t43, i32 0, i32 0 + %t45 = load i64, ptr %a32 + %t46 = load { ptr, i64, i64 }, ptr %t44 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 %t45, %t47 + br i1 %t48, label %range3222, label %inrange3223 +range3222: + call void @finch_panic_index(ptr @.str.2032, i64 1349, i64 %t45, i64 %t47) + unreachable +inrange3223: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.gen.Var, ptr %t49, i64 %t45 + %t51 = getelementptr inbounds %S.gen.Var, ptr %t50, i32 0, i32 0 + %t52 = load { ptr, i64, i64 }, ptr %t51 + %t53 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t52, ptr %a54 + store { ptr, i64, i64 } %t53, ptr %a55 + %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) + %t57 = icmp ne i32 %t56, 0 + br i1 %t57, label %then3224, label %endif3226 +then3224: + %t58 = load ptr, ptr %a1 + %t59 = icmp eq ptr %t58, null + br i1 %t59, label %panic3227, label %ok3228 +panic3227: + call void @finch_panic(ptr @.str.2033, i64 1350, ptr @.str.2034) + unreachable +ok3228: + %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 44 + %t61 = load i1, ptr %t60 + br label %logic.from3229 +logic.from3229: + br i1 %t61, label %logic.rhs3230, label %logic.end3231 +logic.rhs3230: + %t62 = load ptr, ptr %a1 + %t63 = icmp eq ptr %t62, null + br i1 %t63, label %panic3232, label %ok3233 +panic3232: + call void @finch_panic(ptr @.str.2035, i64 1350, ptr @.str.2036) + unreachable +ok3233: + %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 10 + %t65 = load i64, ptr %a19 + %t66 = load { ptr, i64, i64 }, ptr %t64 + %t67 = extractvalue { ptr, i64, i64 } %t66, 1 + %t68 = icmp uge i64 %t65, %t67 + br i1 %t68, label %range3234, label %inrange3235 +range3234: + call void @finch_panic_index(ptr @.str.2037, i64 1350, i64 %t65, i64 %t67) + unreachable +inrange3235: + %t69 = extractvalue { ptr, i64, i64 } %t66, 0 + %t70 = getelementptr inbounds %S.gen.Scope, ptr %t69, i64 %t65 + %t71 = getelementptr inbounds %S.gen.Scope, ptr %t70, i32 0, i32 0 + %t72 = load i64, ptr %a32 + %t73 = load { ptr, i64, i64 }, ptr %t71 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 %t72, %t74 + br i1 %t75, label %range3236, label %inrange3237 +range3236: + call void @finch_panic_index(ptr @.str.2038, i64 1350, i64 %t72, i64 %t74) + unreachable +inrange3237: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.gen.Var, ptr %t76, i64 %t72 + %t78 = getelementptr inbounds %S.gen.Var, ptr %t77, i32 0, i32 4 + %t79 = load i64, ptr %t78 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic3238, label %ok3239 +panic3238: + call void @finch_panic(ptr @.str.2039, i64 1350, ptr @.str.2040) + unreachable +ok3239: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 45 + %t83 = load i64, ptr %t82 + %t84 = icmp sge i64 %t79, %t83 + br label %logic.rend3240 +logic.rend3240: + br label %logic.end3231 +logic.end3231: + %t85 = phi i1 [ false, %logic.from3229 ], [ %t84, %logic.rend3240 ] + br i1 %t85, label %then3241, label %endif3243 +then3241: + br label %for.step3216 +endif3243: + %t86 = load i64, ptr %a19 + %t87 = mul i64 %t86, 100000 + %t88 = load i64, ptr %a32 + %t89 = add i64 %t87, %t88 + ret i64 %t89 +endif3226: + br label %for.step3216 +for.step3216: + %t90 = load i64, ptr %a32 + %t91 = add i64 %t90, 1 + store i64 %t91, ptr %a32 + br label %for.cond3214 +for.end3217: + br label %for.step3206 +for.step3206: + %t92 = load i64, ptr %a8 + %t93 = add i64 %t92, 1 + store i64 %t93, ptr %a8 + br label %for.cond3204 +for.end3207: + ret i64 -1 +} + +define internal void @finch.copy.S_gen_Var(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Var, ptr %src + store %S.gen.Var %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 7 + %t9 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal %S.gen.Var @finch.gen.varAt(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a22 = alloca %S.gen.Var, align 16 + %a23 = alloca %S.gen.Var, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3244, label %ok3245 +panic3244: + call void @finch_panic(ptr @.str.2041, i64 1361, ptr @.str.2042) + unreachable +ok3245: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = load i64, ptr %a2 + %t7 = sdiv i64 %t6, 100000 + %t8 = load { ptr, i64, i64 }, ptr %t5 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range3246, label %inrange3247 +range3246: + call void @finch_panic_index(ptr @.str.2043, i64 1361, i64 %t7, i64 %t9) + unreachable +inrange3247: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i64 %t7 + %t13 = getelementptr inbounds %S.gen.Scope, ptr %t12, i32 0, i32 0 + %t14 = load i64, ptr %a2 + %t15 = srem i64 %t14, 100000 + %t16 = load { ptr, i64, i64 }, ptr %t13 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range3248, label %inrange3249 +range3248: + call void @finch_panic_index(ptr @.str.2044, i64 1361, i64 %t15, i64 %t17) + unreachable +inrange3249: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.Var, ptr %t19, i64 %t15 + %t21 = load %S.gen.Var, ptr %t20 + store %S.gen.Var %t21, ptr %a22 + call void @finch.copy.S_gen_Var(ptr %a23, ptr %a22) + %t24 = load %S.gen.Var, ptr %a23 + ret %S.gen.Var %t24 +} + +define internal i64 @finch.gen.findFn(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic3250, label %ok3251 +panic3250: + call void @finch_panic(ptr @.str.2045, i64 1365, ptr @.str.2046) + unreachable +ok3251: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond3252 +for.cond3252: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body3253, label %for.end3255 +for.body3253: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic3256, label %ok3257 +panic3256: + call void @finch_panic(ptr @.str.2047, i64 1366, ptr @.str.2048) + unreachable +ok3257: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 15 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range3258, label %inrange3259 +range3258: + call void @finch_panic_index(ptr @.str.2049, i64 1366, i64 %t15, i64 %t17) + unreachable +inrange3259: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from3260 +logic.from3260: + br i1 %t27, label %logic.rhs3261, label %logic.end3262 +logic.rhs3261: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic3263, label %ok3264 +panic3263: + call void @finch_panic(ptr @.str.2050, i64 1366, ptr @.str.2051) + unreachable +ok3264: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 15 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range3265, label %inrange3266 +range3265: + call void @finch_panic_index(ptr @.str.2052, i64 1366, i64 %t31, i64 %t33) + unreachable +inrange3266: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend3267 +logic.rend3267: + br label %logic.end3262 +logic.end3262: + %t44 = phi i1 [ false, %logic.from3260 ], [ %t43, %logic.rend3267 ] + br label %logic.from3268 +logic.from3268: + br i1 %t44, label %logic.rhs3269, label %logic.end3270 +logic.rhs3269: + %t45 = load ptr, ptr %a1 + %t46 = icmp eq ptr %t45, null + br i1 %t46, label %panic3271, label %ok3272 +panic3271: + call void @finch_panic(ptr @.str.2053, i64 1366, ptr @.str.2054) + unreachable +ok3272: + %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 15 + %t48 = load i64, ptr %a9 + %t49 = load { ptr, i64, i64 }, ptr %t47 + %t50 = extractvalue { ptr, i64, i64 } %t49, 1 + %t51 = icmp uge i64 %t48, %t50 + br i1 %t51, label %range3273, label %inrange3274 +range3273: + call void @finch_panic_index(ptr @.str.2055, i64 1366, i64 %t48, i64 %t50) + unreachable +inrange3274: + %t52 = extractvalue { ptr, i64, i64 } %t49, 0 + %t53 = getelementptr inbounds %S.gen.FnSig, ptr %t52, i64 %t48 + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 2 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = icmp eq i64 %t56, 0 + br label %logic.rend3275 +logic.rend3275: + br label %logic.end3270 +logic.end3270: + %t58 = phi i1 [ false, %logic.from3268 ], [ %t57, %logic.rend3275 ] + br i1 %t58, label %then3276, label %endif3278 +then3276: + %t59 = load i64, ptr %a9 + ret i64 %t59 +endif3278: + br label %for.step3254 +for.step3254: + %t60 = load i64, ptr %a9 + %t61 = add i64 %t60, 1 + store i64 %t61, ptr %a9 + br label %for.cond3252 +for.end3255: + ret i64 -1 +} + +define internal i64 @finch.gen.findMethod(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic3279, label %ok3280 +panic3279: + call void @finch_panic(ptr @.str.2056, i64 1374, ptr @.str.2057) + unreachable +ok3280: + %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 15 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 + %t9 = load i64, ptr %t8 + store i64 0, ptr %a10 + br label %for.cond3281 +for.cond3281: + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, %t9 + br i1 %t12, label %for.body3282, label %for.end3284 +for.body3282: + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic3285, label %ok3286 +panic3285: + call void @finch_panic(ptr @.str.2058, i64 1375, ptr @.str.2059) + unreachable +ok3286: + %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 15 + %t16 = load i64, ptr %a10 + %t17 = load { ptr, i64, i64 }, ptr %t15 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range3287, label %inrange3288 +range3287: + call void @finch_panic_index(ptr @.str.2060, i64 1375, i64 %t16, i64 %t18) + unreachable +inrange3288: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i64 %t16 + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %t21, i32 0, i32 3 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } %t24, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.from3289 +logic.from3289: + br i1 %t28, label %logic.rhs3290, label %logic.end3291 +logic.rhs3290: + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic3292, label %ok3293 +panic3292: + call void @finch_panic(ptr @.str.2061, i64 1375, ptr @.str.2062) + unreachable +ok3293: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 15 + %t32 = load i64, ptr %a10 + %t33 = load { ptr, i64, i64 }, ptr %t31 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range3294, label %inrange3295 +range3294: + call void @finch_panic_index(ptr @.str.2063, i64 1375, i64 %t32, i64 %t34) + unreachable +inrange3295: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i64 %t32 + %t38 = getelementptr inbounds %S.gen.FnSig, ptr %t37, i32 0, i32 2 + %t39 = load { ptr, i64, i64 }, ptr %t38 + %t40 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } %t40, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br label %logic.rend3296 +logic.rend3296: + br label %logic.end3291 +logic.end3291: + %t45 = phi i1 [ false, %logic.from3289 ], [ %t44, %logic.rend3296 ] + br label %logic.from3297 +logic.from3297: + br i1 %t45, label %logic.rhs3298, label %logic.end3299 +logic.rhs3298: + %t46 = load ptr, ptr %a1 + %t47 = icmp eq ptr %t46, null + br i1 %t47, label %panic3300, label %ok3301 +panic3300: + call void @finch_panic(ptr @.str.2064, i64 1375, ptr @.str.2065) + unreachable +ok3301: + %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 15 + %t49 = load i64, ptr %a10 + %t50 = load { ptr, i64, i64 }, ptr %t48 + %t51 = extractvalue { ptr, i64, i64 } %t50, 1 + %t52 = icmp uge i64 %t49, %t51 + br i1 %t52, label %range3302, label %inrange3303 +range3302: + call void @finch_panic_index(ptr @.str.2066, i64 1375, i64 %t49, i64 %t51) + unreachable +inrange3303: + %t53 = extractvalue { ptr, i64, i64 } %t50, 0 + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i64 %t49 + %t55 = getelementptr inbounds %S.gen.FnSig, ptr %t54, i32 0, i32 1 + %t56 = load { ptr, i64, i64 }, ptr %t55 + %t57 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } %t57, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.rend3304 +logic.rend3304: + br label %logic.end3299 +logic.end3299: + %t62 = phi i1 [ false, %logic.from3297 ], [ %t61, %logic.rend3304 ] + br i1 %t62, label %then3305, label %endif3307 +then3305: + %t63 = load i64, ptr %a10 + ret i64 %t63 +endif3307: + br label %for.step3283 +for.step3283: + %t64 = load i64, ptr %a10 + %t65 = add i64 %t64, 1 + store i64 %t65, ptr %a10 + br label %for.cond3281 +for.end3284: + ret i64 -1 +} + +define internal i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca i64, align 16 + %a41 = alloca i64, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 28, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.2067, i64 5, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.2068, i64 4, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.2069, i64 3, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.2070, i64 3, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.2071, i64 4, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.2072, i64 5, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.2073, i64 4, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.2074, i64 9, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.2075, i64 10, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.2076, i64 11, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.2077, i64 5, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.2078, i64 4, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.2079, i64 5, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.2080, i64 3, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.2081, i64 4, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.2082, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 + store { ptr, i64, i64 } { ptr @.str.2083, i64 11, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 + store { ptr, i64, i64 } { ptr @.str.2084, i64 2, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 + store { ptr, i64, i64 } { ptr @.str.2085, i64 3, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 + store { ptr, i64, i64 } { ptr @.str.2086, i64 3, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 + store { ptr, i64, i64 } { ptr @.str.2087, i64 3, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 + store { ptr, i64, i64 } { ptr @.str.2088, i64 2, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 + store { ptr, i64, i64 } { ptr @.str.2089, i64 3, i64 0 }, ptr %t26 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 23 + store { ptr, i64, i64 } { ptr @.str.2090, i64 3, i64 0 }, ptr %t27 + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 24 + store { ptr, i64, i64 } { ptr @.str.2091, i64 3, i64 0 }, ptr %t28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 25 + store { ptr, i64, i64 } { ptr @.str.2092, i64 3, i64 0 }, ptr %t29 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 26 + store { ptr, i64, i64 } { ptr @.str.2093, i64 3, i64 0 }, ptr %t30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 27 + store { ptr, i64, i64 } { ptr @.str.2094, i64 5, i64 0 }, ptr %t31 + %t32 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t33 = insertvalue { ptr, i64, i64 } %t32, i64 28, 1 + %t34 = insertvalue { ptr, i64, i64 } %t33, i64 28, 2 + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a35, i32 0, i32 1 + %t37 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a38 + %t39 = load i64, ptr %t36 + %t40 = load ptr, ptr %a35 + store i64 0, ptr %a41 + br label %find.cond3308 +find.cond3308: + %t42 = load i64, ptr %a41 + %t43 = icmp slt i64 %t42, %t39 + br i1 %t43, label %find.body3309, label %find.end3312 +find.body3309: + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t42 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } %t37, ptr %a47 + %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + br i1 %t49, label %find.hit3310, label %find.next3311 +find.hit3310: + store i64 %t42, ptr %a38 + br label %find.end3312 +find.next3311: + %t50 = add i64 %t42, 1 + store i64 %t50, ptr %a41 + br label %find.cond3308 +find.end3312: + %t51 = load i64, ptr %a38 + %t52 = icmp sge i64 %t51, 0 + call void @finch.drop.arr_str(ptr %a35) + ret i1 %t52 +} + +define internal { ptr, i64, i64 } @finch.gen.addVar(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4, i1 %p5, i1 %p6) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca i1, align 16 + %a7 = alloca i1, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca i64, align 16 + %a93 = alloca i1, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca %S.ast.Type, align 16 + %a142 = alloca %S.ast.Type, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca %S.ast.Node, align 16 + %a238 = alloca %S.ast.Node, align 16 + %a240 = alloca %S.ast.Node, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store i1 %p5, ptr %a6 + store i1 %p6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = load { ptr, i64, i64 }, ptr %a3 + %t10 = call i64 @finch.gen.lookup(ptr %t8, { ptr, i64, i64 } %t9) + %t11 = icmp sge i64 %t10, 0 + br label %logic.from3313 +logic.from3313: + br i1 %t11, label %logic.rhs3314, label %logic.end3315 +logic.rhs3314: + %t12 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.2095, i64 3, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp eq i32 %t15, 0 + br label %logic.rend3316 +logic.rend3316: + br label %logic.end3315 +logic.end3315: + %t17 = phi i1 [ false, %logic.from3313 ], [ %t16, %logic.rend3316 ] + br i1 %t17, label %then3317, label %endif3319 +then3317: + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + %t20 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2096, i64 18, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.2097, i64 21, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } %t29) + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_drop(ptr %a30) + br label %endif3319 +endif3319: + %t31 = load ptr, ptr %a1 + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic3320, label %ok3321 +panic3320: + call void @finch_panic(ptr @.str.2098, i64 1393, ptr @.str.2099) + unreachable +ok3321: + %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 14 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = load { ptr, i64, i64 }, ptr %a3 + %t37 = call i64 @finch.gen.findFn(ptr %t31, { ptr, i64, i64 } %t35, { ptr, i64, i64 } %t36) + %t38 = icmp sge i64 %t37, 0 + br i1 %t38, label %then3322, label %endif3324 +then3322: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a2 + %t41 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2100, i64 1, i64 0 }, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.2101, i64 35, i64 0 }, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t45, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t50) + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %endif3324 +endif3324: + %t52 = load { ptr, i64, i64 }, ptr %a3 + %t53 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t52) + br i1 %t53, label %then3325, label %endif3327 +then3325: + %t54 = load ptr, ptr %a1 + %t55 = load %S.ast.Node, ptr %a2 + %t56 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2102, i64 1, i64 0 }, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.2103, i64 38, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } %t65) + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_drop(ptr %a66) + br label %endif3327 +endif3327: + %t67 = load ptr, ptr %a1 + %t68 = load ptr, ptr %a1 + %t69 = load %S.ast.Type, ptr %a4 + %t70 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t68, %S.ast.Type %t69) + %t71 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t67, { ptr, i64, i64 } %t70) + store { ptr, i64, i64 } %t70, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t71, ptr %a73 + %t74 = load ptr, ptr %a1 + %t75 = load ptr, ptr %a1 + %t76 = load %S.ast.Type, ptr %a4 + %t77 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t75, %S.ast.Type %t76) + %t78 = load { ptr, i64, i64 }, ptr %a5 + %t79 = load { ptr, i64, i64 }, ptr %a73 + call void @finch.gen.store(ptr %t74, { ptr, i64, i64 } %t77, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t79) + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_drop(ptr %a80) + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic3328, label %ok3329 +panic3328: + call void @finch_panic(ptr @.str.2104, i64 1401, ptr @.str.2105) + unreachable +ok3329: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 10 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 + %t85 = load i64, ptr %t84 + %t86 = sub i64 %t85, 1 + store i64 %t86, ptr %a87 + %t88 = load i1, ptr %a7 + br label %logic.from3330 +logic.from3330: + br i1 %t88, label %logic.rhs3331, label %logic.end3332 +logic.rhs3331: + %t89 = load ptr, ptr %a1 + %t90 = load %S.ast.Type, ptr %a4 + %t91 = call i1 @finch.gen.owning(ptr %t89, %S.ast.Type %t90) + br label %logic.rend3333 +logic.rend3333: + br label %logic.end3332 +logic.end3332: + %t92 = phi i1 [ false, %logic.from3330 ], [ %t91, %logic.rend3333 ] + store i1 %t92, ptr %a93 + %t94 = load i1, ptr %a93 + br i1 %t94, label %then3334, label %endif3336 +then3334: + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic3337, label %ok3338 +panic3337: + call void @finch_panic(ptr @.str.2106, i64 1404, ptr @.str.2107) + unreachable +ok3338: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 10 + %t98 = load i64, ptr %a87 + %t99 = load { ptr, i64, i64 }, ptr %t97 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 %t98, %t100 + br i1 %t101, label %range3339, label %inrange3340 +range3339: + call void @finch_panic_index(ptr @.str.2108, i64 1404, i64 %t98, i64 %t100) + unreachable +inrange3340: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.gen.Scope, ptr %t102, i64 %t98 + %t104 = getelementptr inbounds %S.gen.Scope, ptr %t103, i32 0, i32 3 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t106 = insertvalue %S.gen.Cleanup zeroinitializer, i1 false, 0 + %t107 = load ptr, ptr %a1 + %t108 = icmp eq ptr %t107, null + br i1 %t108, label %panic3341, label %ok3342 +panic3341: + call void @finch_panic(ptr @.str.2109, i64 1404, ptr @.str.2110) + unreachable +ok3342: + %t109 = getelementptr inbounds %S.gen.Gen, ptr %t107, i32 0, i32 10 + %t110 = load i64, ptr %a87 + %t111 = load { ptr, i64, i64 }, ptr %t109 + %t112 = extractvalue { ptr, i64, i64 } %t111, 1 + %t113 = icmp uge i64 %t110, %t112 + br i1 %t113, label %range3343, label %inrange3344 +range3343: + call void @finch_panic_index(ptr @.str.2111, i64 1404, i64 %t110, i64 %t112) + unreachable +inrange3344: + %t114 = extractvalue { ptr, i64, i64 } %t111, 0 + %t115 = getelementptr inbounds %S.gen.Scope, ptr %t114, i64 %t110 + %t116 = getelementptr inbounds %S.gen.Scope, ptr %t115, i32 0, i32 0 + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t116, i32 0, i32 1 + %t118 = load i64, ptr %t117 + %t119 = insertvalue %S.gen.Cleanup %t106, i64 %t118, 1 + %t120 = load i64, ptr %t105 + %t121 = add i64 %t120, 1 + call void @finch_arr_reserve(ptr %t104, i64 %t121, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) + %t122 = load ptr, ptr %t104 + %t123 = getelementptr inbounds %S.gen.Cleanup, ptr %t122, i64 %t120 + store %S.gen.Cleanup %t119, ptr %t123 + store i64 %t121, ptr %t105 + br label %endif3336 +endif3336: + %t124 = load ptr, ptr %a1 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic3345, label %ok3346 +panic3345: + call void @finch_panic(ptr @.str.2112, i64 1406, ptr @.str.2113) + unreachable +ok3346: + %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 10 + %t127 = load i64, ptr %a87 + %t128 = load { ptr, i64, i64 }, ptr %t126 + %t129 = extractvalue { ptr, i64, i64 } %t128, 1 + %t130 = icmp uge i64 %t127, %t129 + br i1 %t130, label %range3347, label %inrange3348 +range3347: + call void @finch_panic_index(ptr @.str.2114, i64 1406, i64 %t127, i64 %t129) + unreachable +inrange3348: + %t131 = extractvalue { ptr, i64, i64 } %t128, 0 + %t132 = getelementptr inbounds %S.gen.Scope, ptr %t131, i64 %t127 + %t133 = getelementptr inbounds %S.gen.Scope, ptr %t132, i32 0, i32 0 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_copy(ptr %a137, ptr %a136) + %t138 = load { ptr, i64, i64 }, ptr %a137 + %t139 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } %t138, 0 + %t140 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t140, ptr %a141 + call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) + %t143 = load %S.ast.Type, ptr %a142 + %t144 = insertvalue %S.gen.Var %t139, %S.ast.Type %t143, 1 + %t145 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t145, ptr %a146 + call void @finch_str_copy(ptr %a147, ptr %a146) + %t148 = load { ptr, i64, i64 }, ptr %a147 + %t149 = insertvalue %S.gen.Var %t144, { ptr, i64, i64 } %t148, 2 + %t150 = load i1, ptr %a6 + %t151 = insertvalue %S.gen.Var %t149, i1 %t150, 3 + %t152 = load ptr, ptr %a1 + %t153 = icmp eq ptr %t152, null + br i1 %t153, label %panic3349, label %ok3350 +panic3349: + call void @finch_panic(ptr @.str.2115, i64 1406, ptr @.str.2116) + unreachable +ok3350: + %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 25 + %t155 = load i64, ptr %t154 + %t156 = insertvalue %S.gen.Var %t151, i64 %t155, 4 + %t157 = load i1, ptr %a93 + %t158 = insertvalue %S.gen.Var %t156, i1 %t157, 5 + %t159 = load ptr, ptr %a1 + %t160 = icmp eq ptr %t159, null + br i1 %t160, label %panic3351, label %ok3352 +panic3351: + call void @finch_panic(ptr @.str.2117, i64 1406, ptr @.str.2118) + unreachable +ok3352: + %t161 = getelementptr inbounds %S.gen.Gen, ptr %t159, i32 0, i32 1 + %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t163 = load i64, ptr %t162 + %t164 = load { ptr, i64, i64 }, ptr %t161 + %t165 = extractvalue { ptr, i64, i64 } %t164, 1 + %t166 = icmp uge i64 %t163, %t165 + br i1 %t166, label %range3353, label %inrange3354 +range3353: + call void @finch_panic_index(ptr @.str.2119, i64 1406, i64 %t163, i64 %t165) + unreachable +inrange3354: + %t167 = extractvalue { ptr, i64, i64 } %t164, 0 + %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i64 %t163 + %t169 = load { ptr, i64, i64 }, ptr %t168 + store { ptr, i64, i64 } %t169, ptr %a170 + call void @finch_str_copy(ptr %a171, ptr %a170) + %t172 = load { ptr, i64, i64 }, ptr %a171 + %t173 = insertvalue %S.gen.Var %t158, { ptr, i64, i64 } %t172, 7 + %t174 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t175 = load i64, ptr %t174 + %t176 = insertvalue %S.gen.Var %t173, i64 %t175, 8 + %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t178 = load i64, ptr %t177 + %t179 = insertvalue %S.gen.Var %t176, i64 %t178, 9 + %t180 = load i64, ptr %t134 + %t181 = add i64 %t180, 1 + call void @finch_arr_reserve(ptr %t133, i64 %t181, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) + %t182 = load ptr, ptr %t133 + %t183 = getelementptr inbounds %S.gen.Var, ptr %t182, i64 %t180 + store %S.gen.Var %t179, ptr %t183 + store i64 %t181, ptr %t134 + %t184 = load ptr, ptr %a1 + %t185 = icmp eq ptr %t184, null + br i1 %t185, label %panic3355, label %ok3356 +panic3355: + call void @finch_panic(ptr @.str.2120, i64 1407, ptr @.str.2121) + unreachable +ok3356: + %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 25 + %t187 = load i64, ptr %t186 + %t188 = add i64 %t187, 1 + store i64 %t188, ptr %t186 + %t189 = load ptr, ptr %a1 + %t190 = load %S.ast.Node, ptr %a2 + %t191 = load { ptr, i64, i64 }, ptr %a3 + %t192 = load %S.ast.Type, ptr %a4 + %t193 = load { ptr, i64, i64 }, ptr %a73 + call void @finch.gen.dbgVariable(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t191, %S.ast.Type %t192, { ptr, i64, i64 } %t193) + %t194 = load ptr, ptr %a1 + %t195 = icmp eq ptr %t194, null + br i1 %t195, label %panic3357, label %ok3358 +panic3357: + call void @finch_panic(ptr @.str.2122, i64 1409, ptr @.str.2123) + unreachable +ok3358: + %t196 = getelementptr inbounds %S.gen.Gen, ptr %t194, i32 0, i32 28 + %t197 = load i1, ptr %t196 + br label %logic.from3359 +logic.from3359: + br i1 %t197, label %logic.rhs3360, label %logic.end3361 +logic.rhs3360: + %t198 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t198, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.2124, i64 3, i64 0 }, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp eq i32 %t201, 0 + br label %logic.rend3362 +logic.rend3362: + br label %logic.end3361 +logic.end3361: + %t203 = phi i1 [ false, %logic.from3359 ], [ %t202, %logic.rend3362 ] + br label %logic.from3363 +logic.from3363: + br i1 %t203, label %logic.rhs3364, label %logic.end3365 +logic.rhs3364: + %t204 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t204, ptr %a205 + store { ptr, i64, i64 } { ptr @.str.2126, i64 1, i64 0 }, ptr %a207 + %t208 = call i32 @finch_str_starts(ptr %a205, ptr %a207) + %t209 = icmp ne i32 %t208, 0 + %t210 = xor i1 %t209, true + br label %logic.rend3366 +logic.rend3366: + br label %logic.end3365 +logic.end3365: + %t211 = phi i1 [ false, %logic.from3363 ], [ %t210, %logic.rend3366 ] + br i1 %t211, label %then3367, label %endif3369 +then3367: + %t212 = load ptr, ptr %a1 + %t213 = icmp eq ptr %t212, null + br i1 %t213, label %panic3370, label %ok3371 +panic3370: + call void @finch_panic(ptr @.str.2127, i64 1410, ptr @.str.2128) + unreachable +ok3371: + %t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 0 + %t215 = load ptr, ptr %a1 + %t216 = icmp eq ptr %t215, null + br i1 %t216, label %panic3372, label %ok3373 +panic3372: + call void @finch_panic(ptr @.str.2129, i64 1410, ptr @.str.2130) + unreachable +ok3373: + %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 13 + %t218 = getelementptr inbounds %S.gen.FnSig, ptr %t217, i32 0, i32 16 + %t219 = load i64, ptr %t218 + %t220 = load { ptr, i64, i64 }, ptr %t214 + %t221 = extractvalue { ptr, i64, i64 } %t220, 1 + %t222 = icmp uge i64 %t219, %t221 + br i1 %t222, label %range3374, label %inrange3375 +range3374: + call void @finch_panic_index(ptr @.str.2131, i64 1410, i64 %t219, i64 %t221) + unreachable +inrange3375: + %t223 = extractvalue { ptr, i64, i64 } %t220, 0 + %t224 = getelementptr inbounds %S.ast.Program, ptr %t223, i64 %t219 + %t225 = getelementptr inbounds %S.ast.Program, ptr %t224, i32 0, i32 8 + %t226 = load ptr, ptr %a1 + %t227 = icmp eq ptr %t226, null + br i1 %t227, label %panic3376, label %ok3377 +panic3376: + call void @finch_panic(ptr @.str.2132, i64 1410, ptr @.str.2133) + unreachable +ok3377: + %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 13 + %t229 = getelementptr inbounds %S.gen.FnSig, ptr %t228, i32 0, i32 17 + %t230 = load i64, ptr %t229 + %t231 = load { ptr, i64, i64 }, ptr %t225 + %t232 = extractvalue { ptr, i64, i64 } %t231, 1 + %t233 = icmp uge i64 %t230, %t232 + br i1 %t233, label %range3378, label %inrange3379 +range3378: + call void @finch_panic_index(ptr @.str.2134, i64 1410, i64 %t230, i64 %t232) + unreachable +inrange3379: + %t234 = extractvalue { ptr, i64, i64 } %t231, 0 + %t235 = getelementptr inbounds %S.ast.Node, ptr %t234, i64 %t230 + %t236 = load %S.ast.Node, ptr %t235 + store %S.ast.Node %t236, ptr %a237 + call void @finch.copy.S_ast_Node(ptr %a238, ptr %a237) + %t239 = load %S.ast.Node, ptr %a238 + store %S.ast.Node %t239, ptr %a240 + %t241 = load ptr, ptr %a1 + %t242 = icmp eq ptr %t241, null + br i1 %t242, label %panic3380, label %ok3381 +panic3380: + call void @finch_panic(ptr @.str.2135, i64 1411, ptr @.str.2136) + unreachable +ok3381: + %t243 = getelementptr inbounds %S.gen.Gen, ptr %t241, i32 0, i32 29 + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 + %t245 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2137, i64 3, i64 0 }, ptr %a247 + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + %t249 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t249, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.2138, i64 1, i64 0 }, ptr %a252 + call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) + store { ptr, i64, i64 } %t249, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a250 + %t255 = load %S.ast.Type, ptr %a4 + %t256 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t255) + store { ptr, i64, i64 } %t254, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t254, ptr %a260 + call void @finch_str_drop(ptr %a260) + store { ptr, i64, i64 } %t256, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t262, ptr %a264 + store { ptr, i64, i64 } { ptr @.str.2139, i64 1, i64 0 }, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + store { ptr, i64, i64 } %t262, ptr %a266 + call void @finch_str_drop(ptr %a266) + %t267 = load { ptr, i64, i64 }, ptr %a263 + %t268 = load ptr, ptr %a1 + %t269 = icmp eq ptr %t268, null + br i1 %t269, label %panic3382, label %ok3383 +panic3382: + call void @finch_panic(ptr @.str.2140, i64 1411, ptr @.str.2141) + unreachable +ok3383: + %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 1 + %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t272 = load i64, ptr %t271 + %t273 = load { ptr, i64, i64 }, ptr %t270 + %t274 = extractvalue { ptr, i64, i64 } %t273, 1 + %t275 = icmp uge i64 %t272, %t274 + br i1 %t275, label %range3384, label %inrange3385 +range3384: + call void @finch_panic_index(ptr @.str.2142, i64 1411, i64 %t272, i64 %t274) + unreachable +inrange3385: + %t276 = extractvalue { ptr, i64, i64 } %t273, 0 + %t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t276, i64 %t272 + %t278 = load { ptr, i64, i64 }, ptr %t277 + store { ptr, i64, i64 } %t267, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t267, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t283, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.2143, i64 1, i64 0 }, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t290 = load i64, ptr %t289 + call void @finch_str_from_int(ptr %a291, i64 %t290) + %t292 = load { ptr, i64, i64 }, ptr %a291 + store { ptr, i64, i64 } %t288, ptr %a294 + store { ptr, i64, i64 } %t292, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t288, ptr %a296 + call void @finch_str_drop(ptr %a296) + store { ptr, i64, i64 } %t292, ptr %a297 + call void @finch_str_drop(ptr %a297) + %t298 = load { ptr, i64, i64 }, ptr %a293 + store { ptr, i64, i64 } %t298, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.2144, i64 1, i64 0 }, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t298, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + %t304 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t305 = load i64, ptr %t304 + call void @finch_str_from_int(ptr %a306, i64 %t305) + %t307 = load { ptr, i64, i64 }, ptr %a306 + store { ptr, i64, i64 } %t303, ptr %a309 + store { ptr, i64, i64 } %t307, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t303, ptr %a311 + call void @finch_str_drop(ptr %a311) + store { ptr, i64, i64 } %t307, ptr %a312 + call void @finch_str_drop(ptr %a312) + %t313 = load { ptr, i64, i64 }, ptr %a308 + store { ptr, i64, i64 } %t313, ptr %a315 + store { ptr, i64, i64 } { ptr @.str.2145, i64 1, i64 0 }, ptr %a316 + call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) + store { ptr, i64, i64 } %t313, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load { ptr, i64, i64 }, ptr %a314 + %t319 = load ptr, ptr %a1 + %t320 = icmp eq ptr %t319, null + br i1 %t320, label %panic3386, label %ok3387 +panic3386: + call void @finch_panic(ptr @.str.2146, i64 1411, ptr @.str.2147) + unreachable +ok3387: + %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 1 + %t322 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 13 + %t323 = load i64, ptr %t322 + %t324 = load { ptr, i64, i64 }, ptr %t321 + %t325 = extractvalue { ptr, i64, i64 } %t324, 1 + %t326 = icmp uge i64 %t323, %t325 + br i1 %t326, label %range3388, label %inrange3389 +range3388: + call void @finch_panic_index(ptr @.str.2148, i64 1411, i64 %t323, i64 %t325) + unreachable +inrange3389: + %t327 = extractvalue { ptr, i64, i64 } %t324, 0 + %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i64 %t323 + %t329 = load { ptr, i64, i64 }, ptr %t328 + store { ptr, i64, i64 } %t318, ptr %a331 + store { ptr, i64, i64 } %t329, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + store { ptr, i64, i64 } %t318, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = load { ptr, i64, i64 }, ptr %a330 + store { ptr, i64, i64 } %t334, ptr %a336 + store { ptr, i64, i64 } { ptr @.str.2149, i64 1, i64 0 }, ptr %a337 + call void @finch_str_concat(ptr %a335, ptr %a336, ptr %a337) + store { ptr, i64, i64 } %t334, ptr %a338 + call void @finch_str_drop(ptr %a338) + %t339 = load { ptr, i64, i64 }, ptr %a335 + %t340 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 11 + %t341 = load i64, ptr %t340 + call void @finch_str_from_int(ptr %a342, i64 %t341) + %t343 = load { ptr, i64, i64 }, ptr %a342 + store { ptr, i64, i64 } %t339, ptr %a345 + store { ptr, i64, i64 } %t343, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t339, ptr %a347 + call void @finch_str_drop(ptr %a347) + store { ptr, i64, i64 } %t343, ptr %a348 + call void @finch_str_drop(ptr %a348) + %t349 = load { ptr, i64, i64 }, ptr %a344 + store { ptr, i64, i64 } %t349, ptr %a351 + store { ptr, i64, i64 } { ptr @.str.2150, i64 1, i64 0 }, ptr %a352 + call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) + store { ptr, i64, i64 } %t349, ptr %a353 + call void @finch_str_drop(ptr %a353) + %t354 = load { ptr, i64, i64 }, ptr %a350 + %t355 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 14 + %t356 = load i64, ptr %t355 + call void @finch_str_from_int(ptr %a357, i64 %t356) + %t358 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t354, ptr %a360 + store { ptr, i64, i64 } %t358, ptr %a361 + call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) + store { ptr, i64, i64 } %t354, ptr %a362 + call void @finch_str_drop(ptr %a362) + store { ptr, i64, i64 } %t358, ptr %a363 + call void @finch_str_drop(ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a359 + %t365 = load i64, ptr %t244 + %t366 = add i64 %t365, 1 + call void @finch_arr_reserve(ptr %t243, i64 %t366, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t367 = load ptr, ptr %t243 + %t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %t367, i64 %t365 + store { ptr, i64, i64 } %t364, ptr %t368 + store i64 %t366, ptr %t244 + %t369 = load ptr, ptr %a1 + %t370 = load %S.ast.Node, ptr %a2 + %t371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t372 = load i64, ptr %t371 + %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t374 = load i64, ptr %t373 + %t375 = load %S.ast.Type, ptr %a4 + %t376 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t375) + store { ptr, i64, i64 } { ptr @.str.2151, i64 9, i64 0 }, ptr %a378 + store { ptr, i64, i64 } %t376, ptr %a379 + call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) + store { ptr, i64, i64 } %t376, ptr %a380 + call void @finch_str_drop(ptr %a380) + %t381 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t381, ptr %a383 + store { ptr, i64, i64 } { ptr @.str.2152, i64 1, i64 0 }, ptr %a384 + call void @finch_str_concat(ptr %a382, ptr %a383, ptr %a384) + store { ptr, i64, i64 } %t381, ptr %a385 + call void @finch_str_drop(ptr %a385) + %t386 = load { ptr, i64, i64 }, ptr %a382 + %t387 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t386, ptr %a389 + store { ptr, i64, i64 } %t387, ptr %a390 + call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) + store { ptr, i64, i64 } %t386, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a388 + store { ptr, i64, i64 } %t392, ptr %a394 + store { ptr, i64, i64 } { ptr @.str.2153, i64 4, i64 0 }, ptr %a395 + call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) + store { ptr, i64, i64 } %t392, ptr %a396 + call void @finch_str_drop(ptr %a396) + %t397 = load { ptr, i64, i64 }, ptr %a393 + call void @finch.gen.noteRef(ptr %t369, %S.ast.Node %t370, i64 %t372, i64 %t374, { ptr, i64, i64 } %t397, { ptr, i64, i64 } { ptr @.str.2154, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t397, ptr %a398 + call void @finch_str_drop(ptr %a398) + call void @finch.drop.S_ast_Node(ptr %a240) + br label %endif3369 +endif3369: + %t399 = load { ptr, i64, i64 }, ptr %a73 + ret { ptr, i64, i64 } %t399 +} + +define internal void @finch.gen.pushScope(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic3390, label %ok3391 +panic3390: + call void @finch_panic(ptr @.str.2155, i64 1418, ptr @.str.2156) + unreachable +ok3391: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 10 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + call void @finch_arr_reserve(ptr %t4, i64 %t7, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) + %t8 = load ptr, ptr %t4 + %t9 = getelementptr inbounds %S.gen.Scope, ptr %t8, i64 %t6 + store %S.gen.Scope zeroinitializer, ptr %t9 + store i64 %t7, ptr %t5 + ret void +} + +define internal void @finch.drop.S_gen_Var(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_S_gen_Var(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond3403 +n.cond3403: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body3404, label %n.end3405 +n.body3404: + %t7 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Var(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond3403 +n.end3405: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_Cleanup(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Scope(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_gen_Var(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_ast_Node(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_int(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_S_gen_Cleanup(ptr %t4) + ret void +} + +define internal void @finch.gen.popScope(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a24 = alloca %S.gen.Scope, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic3392, label %ok3393 +panic3392: + call void @finch_panic(ptr @.str.2157, i64 1424, ptr @.str.2158) + unreachable +ok3393: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 9 + %t5 = load i1, ptr %t4 + %t6 = xor i1 %t5, true + br i1 %t6, label %then3394, label %endif3396 +then3394: + %t7 = load ptr, ptr %a1 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic3397, label %ok3398 +panic3397: + call void @finch_panic(ptr @.str.2159, i64 1425, ptr @.str.2160) + unreachable +ok3398: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = sub i64 %t12, 1 + call void @finch.gen.runCleanups(ptr %t7, i64 %t13) + br label %endif3396 +endif3396: + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic3399, label %ok3400 +panic3399: + call void @finch_panic(ptr @.str.2161, i64 1427, ptr @.str.2162) + unreachable +ok3400: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 10 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = icmp eq i64 %t18, 0 + br i1 %t19, label %panic3401, label %ok3402 +panic3401: + call void @finch_panic(ptr @.str.2163, i64 1427, ptr @.str.2164) + unreachable +ok3402: + %t20 = sub i64 %t18, 1 + %t21 = load ptr, ptr %t16 + %t22 = getelementptr inbounds %S.gen.Scope, ptr %t21, i64 %t20 + %t23 = load %S.gen.Scope, ptr %t22 + store i64 %t20, ptr %t17 + store %S.gen.Scope %t23, ptr %a24 + call void @finch.drop.S_gen_Scope(ptr %a24) + ret void +} + +define internal void @finch.gen.runCleanups(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a15 = alloca i64, align 16 + %a37 = alloca %S.gen.Cleanup, align 16 + %a59 = alloca %S.gen.Var, align 16 + %a60 = alloca %S.gen.Var, align 16 + %a62 = alloca %S.gen.Var, align 16 + %a75 = alloca i1, align 16 + %a80 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3406, label %ok3407 +panic3406: + call void @finch_panic(ptr @.str.2165, i64 1432, ptr @.str.2166) + unreachable +ok3407: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = load i64, ptr %a2 + %t7 = load { ptr, i64, i64 }, ptr %t5 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 %t6, %t8 + br i1 %t9, label %range3408, label %inrange3409 +range3408: + call void @finch_panic_index(ptr @.str.2167, i64 1432, i64 %t6, i64 %t8) + unreachable +inrange3409: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.gen.Scope, ptr %t10, i64 %t6 + %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i32 0, i32 3 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + store i64 %t14, ptr %a15 + br label %while.cond3410 +while.cond3410: + %t16 = load i64, ptr %a15 + %t17 = icmp sgt i64 %t16, 0 + br i1 %t17, label %while.body3411, label %while.end3412 +while.body3411: + %t18 = load i64, ptr %a15 + %t19 = sub i64 %t18, 1 + store i64 %t19, ptr %a15 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic3413, label %ok3414 +panic3413: + call void @finch_panic(ptr @.str.2168, i64 1435, ptr @.str.2169) + unreachable +ok3414: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 + %t23 = load i64, ptr %a2 + %t24 = load { ptr, i64, i64 }, ptr %t22 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range3415, label %inrange3416 +range3415: + call void @finch_panic_index(ptr @.str.2170, i64 1435, i64 %t23, i64 %t25) + unreachable +inrange3416: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 + %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 3 + %t30 = load i64, ptr %a15 + %t31 = load { ptr, i64, i64 }, ptr %t29 + %t32 = extractvalue { ptr, i64, i64 } %t31, 1 + %t33 = icmp uge i64 %t30, %t32 + br i1 %t33, label %range3417, label %inrange3418 +range3417: + call void @finch_panic_index(ptr @.str.2171, i64 1435, i64 %t30, i64 %t32) + unreachable +inrange3418: + %t34 = extractvalue { ptr, i64, i64 } %t31, 0 + %t35 = getelementptr inbounds %S.gen.Cleanup, ptr %t34, i64 %t30 + %t36 = load %S.gen.Cleanup, ptr %t35 + store %S.gen.Cleanup %t36, ptr %a37 + %t38 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 0 + %t39 = load i1, ptr %t38 + %t40 = xor i1 %t39, true + br i1 %t40, label %then3419, label %endif3421 +then3419: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic3422, label %ok3423 +panic3422: + call void @finch_panic(ptr @.str.2172, i64 1437, ptr @.str.2173) + unreachable +ok3423: + %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 10 + %t44 = load i64, ptr %a2 + %t45 = load { ptr, i64, i64 }, ptr %t43 + %t46 = extractvalue { ptr, i64, i64 } %t45, 1 + %t47 = icmp uge i64 %t44, %t46 + br i1 %t47, label %range3424, label %inrange3425 +range3424: + call void @finch_panic_index(ptr @.str.2174, i64 1437, i64 %t44, i64 %t46) + unreachable +inrange3425: + %t48 = extractvalue { ptr, i64, i64 } %t45, 0 + %t49 = getelementptr inbounds %S.gen.Scope, ptr %t48, i64 %t44 + %t50 = getelementptr inbounds %S.gen.Scope, ptr %t49, i32 0, i32 0 + %t51 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = load { ptr, i64, i64 }, ptr %t50 + %t54 = extractvalue { ptr, i64, i64 } %t53, 1 + %t55 = icmp uge i64 %t52, %t54 + br i1 %t55, label %range3426, label %inrange3427 +range3426: + call void @finch_panic_index(ptr @.str.2175, i64 1437, i64 %t52, i64 %t54) + unreachable +inrange3427: + %t56 = extractvalue { ptr, i64, i64 } %t53, 0 + %t57 = getelementptr inbounds %S.gen.Var, ptr %t56, i64 %t52 + %t58 = load %S.gen.Var, ptr %t57 + store %S.gen.Var %t58, ptr %a59 + call void @finch.copy.S_gen_Var(ptr %a60, ptr %a59) + %t61 = load %S.gen.Var, ptr %a60 + store %S.gen.Var %t61, ptr %a62 + %t63 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 6 + %t64 = load i1, ptr %t63 + %t65 = xor i1 %t64, true + br i1 %t65, label %then3428, label %endif3430 +then3428: + %t66 = load ptr, ptr %a1 + %t67 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 2 + %t68 = load { ptr, i64, i64 }, ptr %t67 + %t69 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 1 + %t70 = load %S.ast.Type, ptr %t69 + call void @finch.gen.dropAt(ptr %t66, { ptr, i64, i64 } %t68, %S.ast.Type %t70) + br label %endif3430 +endif3430: + call void @finch.drop.S_gen_Var(ptr %a62) + br label %while.cond3410 +endif3421: + %t71 = load ptr, ptr %a1 + %t72 = icmp eq ptr %t71, null + br i1 %t72, label %panic3431, label %ok3432 +panic3431: + call void @finch_panic(ptr @.str.2176, i64 1443, ptr @.str.2177) + unreachable +ok3432: + %t73 = getelementptr inbounds %S.gen.Gen, ptr %t71, i32 0, i32 44 + %t74 = load i1, ptr %t73 + store i1 %t74, ptr %a75 + %t76 = load ptr, ptr %a1 + %t77 = icmp eq ptr %t76, null + br i1 %t77, label %panic3433, label %ok3434 +panic3433: + call void @finch_panic(ptr @.str.2178, i64 1444, ptr @.str.2179) + unreachable +ok3434: + %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 45 + %t79 = load i64, ptr %t78 + store i64 %t79, ptr %a80 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic3435, label %ok3436 +panic3435: + call void @finch_panic(ptr @.str.2180, i64 1445, ptr @.str.2181) + unreachable +ok3436: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 44 + store i1 true, ptr %t83 + %t84 = load ptr, ptr %a1 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic3437, label %ok3438 +panic3437: + call void @finch_panic(ptr @.str.2182, i64 1446, ptr @.str.2183) + unreachable +ok3438: + %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 10 + %t87 = load i64, ptr %a2 + %t88 = load { ptr, i64, i64 }, ptr %t86 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 %t87, %t89 + br i1 %t90, label %range3439, label %inrange3440 +range3439: + call void @finch_panic_index(ptr @.str.2184, i64 1446, i64 %t87, i64 %t89) + unreachable +inrange3440: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds %S.gen.Scope, ptr %t91, i64 %t87 + %t93 = getelementptr inbounds %S.gen.Scope, ptr %t92, i32 0, i32 2 + %t94 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 + %t95 = load i64, ptr %t94 + %t96 = load { ptr, i64, i64 }, ptr %t93 + %t97 = extractvalue { ptr, i64, i64 } %t96, 1 + %t98 = icmp uge i64 %t95, %t97 + br i1 %t98, label %range3441, label %inrange3442 +range3441: + call void @finch_panic_index(ptr @.str.2185, i64 1446, i64 %t95, i64 %t97) + unreachable +inrange3442: + %t99 = extractvalue { ptr, i64, i64 } %t96, 0 + %t100 = getelementptr inbounds i64, ptr %t99, i64 %t95 + %t101 = load i64, ptr %t100 + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic3443, label %ok3444 +panic3443: + call void @finch_panic(ptr @.str.2186, i64 1446, ptr @.str.2187) + unreachable +ok3444: + %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 45 + store i64 %t101, ptr %t104 + %t105 = load ptr, ptr %a1 + %t106 = icmp eq ptr %t105, null + br i1 %t106, label %panic3445, label %ok3446 +panic3445: + call void @finch_panic(ptr @.str.2188, i64 1447, ptr @.str.2189) + unreachable +ok3446: + %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 46 + %t108 = load i64, ptr %t107 + %t109 = add i64 %t108, 1 + store i64 %t109, ptr %t107 + %t110 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t110) + %t111 = load ptr, ptr %a1 + %t112 = load ptr, ptr %a1 + %t113 = icmp eq ptr %t112, null + br i1 %t113, label %panic3447, label %ok3448 +panic3447: + call void @finch_panic(ptr @.str.2190, i64 1449, ptr @.str.2191) + unreachable +ok3448: + %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 10 + %t115 = load i64, ptr %a2 + %t116 = load { ptr, i64, i64 }, ptr %t114 + %t117 = extractvalue { ptr, i64, i64 } %t116, 1 + %t118 = icmp uge i64 %t115, %t117 + br i1 %t118, label %range3449, label %inrange3450 +range3449: + call void @finch_panic_index(ptr @.str.2192, i64 1449, i64 %t115, i64 %t117) + unreachable +inrange3450: + %t119 = extractvalue { ptr, i64, i64 } %t116, 0 + %t120 = getelementptr inbounds %S.gen.Scope, ptr %t119, i64 %t115 + %t121 = getelementptr inbounds %S.gen.Scope, ptr %t120, i32 0, i32 1 + %t122 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 + %t123 = load i64, ptr %t122 + %t124 = load { ptr, i64, i64 }, ptr %t121 + %t125 = extractvalue { ptr, i64, i64 } %t124, 1 + %t126 = icmp uge i64 %t123, %t125 + br i1 %t126, label %range3451, label %inrange3452 +range3451: + call void @finch_panic_index(ptr @.str.2193, i64 1449, i64 %t123, i64 %t125) + unreachable +inrange3452: + %t127 = extractvalue { ptr, i64, i64 } %t124, 0 + %t128 = getelementptr inbounds %S.ast.Node, ptr %t127, i64 %t123 + %t129 = load %S.ast.Node, ptr %t128 + call void @finch.gen.stmt(ptr %t111, %S.ast.Node %t129) + %t130 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t130) + %t131 = load ptr, ptr %a1 + %t132 = icmp eq ptr %t131, null + br i1 %t132, label %panic3453, label %ok3454 +panic3453: + call void @finch_panic(ptr @.str.2194, i64 1451, ptr @.str.2195) + unreachable +ok3454: + %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 46 + %t134 = load i64, ptr %t133 + %t135 = sub i64 %t134, 1 + store i64 %t135, ptr %t133 + %t136 = load i1, ptr %a75 + %t137 = load ptr, ptr %a1 + %t138 = icmp eq ptr %t137, null + br i1 %t138, label %panic3455, label %ok3456 +panic3455: + call void @finch_panic(ptr @.str.2196, i64 1452, ptr @.str.2197) + unreachable +ok3456: + %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 44 + store i1 %t136, ptr %t139 + %t140 = load i64, ptr %a80 + %t141 = load ptr, ptr %a1 + %t142 = icmp eq ptr %t141, null + br i1 %t142, label %panic3457, label %ok3458 +panic3457: + call void @finch_panic(ptr @.str.2198, i64 1453, ptr @.str.2199) + unreachable +ok3458: + %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 45 + store i64 %t140, ptr %t143 + br label %while.cond3410 +while.end3412: + ret void +} + +define internal void @finch.gen.unwind(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a8 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3459, label %ok3460 +panic3459: + call void @finch_panic(ptr @.str.2200, i64 1459, ptr @.str.2201) + unreachable +ok3460: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 %t7, ptr %a8 + br label %while.cond3461 +while.cond3461: + %t9 = load i64, ptr %a8 + %t10 = load i64, ptr %a2 + %t11 = icmp sgt i64 %t9, %t10 + br i1 %t11, label %while.body3462, label %while.end3463 +while.body3462: + %t12 = load i64, ptr %a8 + %t13 = sub i64 %t12, 1 + store i64 %t13, ptr %a8 + %t14 = load ptr, ptr %a1 + %t15 = load i64, ptr %a8 + call void @finch.gen.runCleanups(ptr %t14, i64 %t15) + br label %while.cond3461 +while.end3463: + ret void +} + +define internal void @finch.gen.endScope(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.2202, i64 3, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then3464, label %endif3466 +then3464: + %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + ret { ptr, i64, i64 } %t12 +endif3466: + %t13 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.2203, i64 6, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.from3467 +logic.from3467: + br i1 %t18, label %logic.end3469, label %logic.rhs3468 +logic.rhs3468: + %t19 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.2204, i64 5, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br label %logic.rend3470 +logic.rend3470: + br label %logic.end3469 +logic.end3469: + %t25 = phi i1 [ true, %logic.from3467 ], [ %t24, %logic.rend3470 ] + br i1 %t25, label %then3471, label %endif3473 +then3471: + %t26 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 + %t27 = load { ptr, i64, i64 }, ptr %t26 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 0, %t28 + br i1 %t29, label %range3474, label %inrange3475 +range3474: + call void @finch_panic_index(ptr @.str.2205, i64 1477, i64 0, i64 %t28) + unreachable +inrange3475: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds %S.ast.Node, ptr %t30, i64 0 + %t32 = load %S.ast.Node, ptr %t31 + %t33 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t32) + ret { ptr, i64, i64 } %t33 +endif3473: + ret { ptr, i64, i64 } { ptr @.str.2206, i64 0, i64 0 } +} + +define internal i1 @finch.gen.mutates(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i64, align 16 + %a51 = alloca i64, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca i64, align 16 + %a72 = alloca i64, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca i64, align 16 + %a143 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t5 = call ptr @finch_alloc(i64 %t4) + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 0 + store { ptr, i64, i64 } { ptr @.str.2207, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 1 + store { ptr, i64, i64 } { ptr @.str.2208, i64 3, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 2 + store { ptr, i64, i64 } { ptr @.str.2209, i64 6, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 3 + store { ptr, i64, i64 } { ptr @.str.2210, i64 6, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 4 + store { ptr, i64, i64 } { ptr @.str.2211, i64 5, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 5 + store { ptr, i64, i64 } { ptr @.str.2212, i64 6, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 6 + store { ptr, i64, i64 } { ptr @.str.2213, i64 4, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 7 + store { ptr, i64, i64 } { ptr @.str.2214, i64 7, i64 0 }, ptr %t13 + %t14 = insertvalue { ptr, i64, i64 } undef, ptr %t5, 0 + %t15 = insertvalue { ptr, i64, i64 } %t14, i64 8, 1 + %t16 = insertvalue { ptr, i64, i64 } %t15, i64 8, 2 + store { ptr, i64, i64 } %t16, ptr %a17 + %t18 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.2215, i64 6, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.from3476 +logic.from3476: + br i1 %t23, label %logic.rhs3477, label %logic.end3478 +logic.rhs3477: + %t24 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t25 = load { ptr, i64, i64 }, ptr %t24 + %t26 = extractvalue { ptr, i64, i64 } %t25, 1 + %t27 = icmp uge i64 0, %t26 + br i1 %t27, label %range3479, label %inrange3480 +range3479: + call void @finch_panic_index(ptr @.str.2216, i64 1484, i64 0, i64 %t26) + unreachable +inrange3480: + %t28 = extractvalue { ptr, i64, i64 } %t25, 0 + %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 + %t30 = load %S.ast.Node, ptr %t29 + %t31 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t30) + %t32 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t31, ptr %a33 + store { ptr, i64, i64 } %t32, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + store { ptr, i64, i64 } %t31, ptr %a37 + call void @finch_str_drop(ptr %a37) + br label %logic.rend3481 +logic.rend3481: + br label %logic.end3478 +logic.end3478: + %t38 = phi i1 [ false, %logic.from3476 ], [ %t36, %logic.rend3481 ] + br i1 %t38, label %then3482, label %endif3484 +then3482: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3484: + %t39 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.2217, i64 6, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br label %logic.from3485 +logic.from3485: + br i1 %t44, label %logic.rhs3486, label %logic.end3487 +logic.rhs3486: + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a17, i32 0, i32 1 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store i64 -1, ptr %a48 + %t49 = load i64, ptr %t45 + %t50 = load ptr, ptr %a17 + store i64 0, ptr %a51 + br label %find.cond3488 +find.cond3488: + %t52 = load i64, ptr %a51 + %t53 = icmp slt i64 %t52, %t49 + br i1 %t53, label %find.body3489, label %find.end3492 +find.body3489: + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 + %t55 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t55, ptr %a56 + store { ptr, i64, i64 } %t47, ptr %a57 + %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) + %t59 = icmp ne i32 %t58, 0 + br i1 %t59, label %find.hit3490, label %find.next3491 +find.hit3490: + store i64 %t52, ptr %a48 + br label %find.end3492 +find.next3491: + %t60 = add i64 %t52, 1 + store i64 %t60, ptr %a51 + br label %find.cond3488 +find.end3492: + %t61 = load i64, ptr %a48 + %t62 = icmp sge i64 %t61, 0 + br label %logic.from3493 +logic.from3493: + br i1 %t62, label %logic.end3495, label %logic.rhs3494 +logic.rhs3494: + %t63 = load ptr, ptr %a1 + %t64 = icmp eq ptr %t63, null + br i1 %t64, label %panic3496, label %ok3497 +panic3496: + call void @finch_panic(ptr @.str.2218, i64 1490, ptr @.str.2219) + unreachable +ok3497: + %t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 24 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 + %t67 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 + %t68 = load { ptr, i64, i64 }, ptr %t67 + store i64 -1, ptr %a69 + %t70 = load i64, ptr %t66 + %t71 = load ptr, ptr %t65 + store i64 0, ptr %a72 + br label %find.cond3498 +find.cond3498: + %t73 = load i64, ptr %a72 + %t74 = icmp slt i64 %t73, %t70 + br i1 %t74, label %find.body3499, label %find.end3502 +find.body3499: + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 %t73 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } %t76, ptr %a77 + store { ptr, i64, i64 } %t68, ptr %a78 + %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) + %t80 = icmp ne i32 %t79, 0 + br i1 %t80, label %find.hit3500, label %find.next3501 +find.hit3500: + store i64 %t73, ptr %a69 + br label %find.end3502 +find.next3501: + %t81 = add i64 %t73, 1 + store i64 %t81, ptr %a72 + br label %find.cond3498 +find.end3502: + %t82 = load i64, ptr %a69 + %t83 = icmp sge i64 %t82, 0 + br label %logic.rend3503 +logic.rend3503: + br label %logic.end3495 +logic.end3495: + %t84 = phi i1 [ true, %logic.from3493 ], [ %t83, %logic.rend3503 ] + br label %logic.rend3504 +logic.rend3504: + br label %logic.end3487 +logic.end3487: + %t85 = phi i1 [ false, %logic.from3485 ], [ %t84, %logic.rend3504 ] + br label %logic.from3505 +logic.from3505: + br i1 %t85, label %logic.rhs3506, label %logic.end3507 +logic.rhs3506: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t87 = load { ptr, i64, i64 }, ptr %t86 + %t88 = extractvalue { ptr, i64, i64 } %t87, 1 + %t89 = icmp uge i64 0, %t88 + br i1 %t89, label %range3508, label %inrange3509 +range3508: + call void @finch_panic_index(ptr @.str.2220, i64 1490, i64 0, i64 %t88) + unreachable +inrange3509: + %t90 = extractvalue { ptr, i64, i64 } %t87, 0 + %t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 0 + %t92 = load %S.ast.Node, ptr %t91 + %t93 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t92) + %t94 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } %t94, ptr %a96 + %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) + %t98 = icmp ne i32 %t97, 0 + store { ptr, i64, i64 } %t93, ptr %a99 + call void @finch_str_drop(ptr %a99) + br label %logic.rend3510 +logic.rend3510: + br label %logic.end3507 +logic.end3507: + %t100 = phi i1 [ false, %logic.from3505 ], [ %t98, %logic.rend3510 ] + br i1 %t100, label %then3511, label %endif3513 +then3511: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3513: + %t101 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.2221, i64 4, i64 0 }, ptr %a104 + %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) + %t106 = icmp ne i32 %t105, 0 + br label %logic.from3514 +logic.from3514: + br i1 %t106, label %logic.rhs3515, label %logic.end3516 +logic.rhs3515: + %t107 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 + %t108 = load { ptr, i64, i64 }, ptr %t107 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2222, i64 4, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br label %logic.rend3517 +logic.rend3517: + br label %logic.end3516 +logic.end3516: + %t113 = phi i1 [ false, %logic.from3514 ], [ %t112, %logic.rend3517 ] + br label %logic.from3518 +logic.from3518: + br i1 %t113, label %logic.rhs3519, label %logic.end3520 +logic.rhs3519: + %t114 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp eq i64 %t116, 1 + br label %logic.rend3521 +logic.rend3521: + br label %logic.end3520 +logic.end3520: + %t118 = phi i1 [ false, %logic.from3518 ], [ %t117, %logic.rend3521 ] + br label %logic.from3522 +logic.from3522: + br i1 %t118, label %logic.rhs3523, label %logic.end3524 +logic.rhs3523: + %t119 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t120 = load { ptr, i64, i64 }, ptr %t119 + %t121 = extractvalue { ptr, i64, i64 } %t120, 1 + %t122 = icmp uge i64 0, %t121 + br i1 %t122, label %range3525, label %inrange3526 +range3525: + call void @finch_panic_index(ptr @.str.2223, i64 1493, i64 0, i64 %t121) + unreachable +inrange3526: + %t123 = extractvalue { ptr, i64, i64 } %t120, 0 + %t124 = getelementptr inbounds %S.ast.Node, ptr %t123, i64 0 + %t125 = load %S.ast.Node, ptr %t124 + %t126 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t125) + %t127 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t126, ptr %a128 + store { ptr, i64, i64 } %t127, ptr %a129 + %t130 = call i32 @finch_str_eq(ptr %a128, ptr %a129) + %t131 = icmp ne i32 %t130, 0 + store { ptr, i64, i64 } %t126, ptr %a132 + call void @finch_str_drop(ptr %a132) + br label %logic.rend3527 +logic.rend3527: + br label %logic.end3524 +logic.end3524: + %t133 = phi i1 [ false, %logic.from3522 ], [ %t131, %logic.rend3527 ] + br i1 %t133, label %then3528, label %endif3530 +then3528: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3530: + %t134 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + store i64 0, ptr %a135 + br label %each.cond3531 +each.cond3531: + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 + %t137 = load i64, ptr %t136 + %t138 = load i64, ptr %a135 + %t139 = icmp slt i64 %t138, %t137 + br i1 %t139, label %each.body3532, label %each.end3534 +each.body3532: + %t140 = load ptr, ptr %t134 + %t141 = getelementptr inbounds %S.ast.Node, ptr %t140, i64 %t138 + %t142 = load %S.ast.Node, ptr %t141 + store %S.ast.Node %t142, ptr %a143 + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a2 + %t146 = load %S.ast.Node, ptr %a143 + %t147 = call i1 @finch.gen.mutates(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Node %t146) + br i1 %t147, label %then3535, label %endif3537 +then3535: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3537: + br label %each.step3533 +each.step3533: + %t148 = load i64, ptr %a135 + %t149 = add i64 %t148, 1 + store i64 %t149, ptr %a135 + br label %each.cond3531 +each.end3534: + call void @finch.drop.arr_str(ptr %a17) + ret i1 false +} + +define internal void @finch.gen.declare(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a7 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca i64, align 16 + %a61 = alloca %S.ast.Node, align 16 + %a62 = alloca %S.ast.Node, align 16 + %a64 = alloca %S.ast.Node, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca i64, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca i64, align 16 + %a224 = alloca %S.ast.Node, align 16 + %a225 = alloca %S.ast.Node, align 16 + %a227 = alloca %S.ast.Node, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca %S.gen.SumDef, align 16 + %a278 = alloca i64, align 16 + %a280 = alloca i64, align 16 + %a288 = alloca %S.ast.Node, align 16 + %a293 = alloca i64, align 16 + %a296 = alloca i64, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca %S.gen.SumDef, align 16 + %a374 = alloca %S.gen.SumDef, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca %S.gen.EnumDef, align 16 + %a428 = alloca i64, align 16 + %a430 = alloca i64, align 16 + %a438 = alloca %S.ast.Node, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca i64, align 16 + %a454 = alloca i64, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca i64, align 16 + %a498 = alloca i64, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca %S.gen.EnumDef, align 16 + %a563 = alloca %S.gen.EnumDef, align 16 + %a579 = alloca i64, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca i64, align 16 + %a629 = alloca i64, align 16 + %a646 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a663 = alloca i64, align 16 + %a683 = alloca %S.ast.Node, align 16 + %a684 = alloca %S.ast.Node, align 16 + %a686 = alloca %S.ast.Node, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a712 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a743 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca i1, align 16 + %a817 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a823 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca i64, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a878 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a896 = alloca { ptr, i64, i64 }, align 16 + %a898 = alloca { ptr, i64, i64 }, align 16 + %a899 = alloca { ptr, i64, i64 }, align 16 + %a900 = alloca { ptr, i64, i64 }, align 16 + %a901 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a907 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a911 = alloca { ptr, i64, i64 }, align 16 + %a912 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a915 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca i64, align 16 + %a932 = alloca i64, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a949 = alloca { ptr, i64, i64 }, align 16 + %a950 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a955 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a964 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a966 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a969 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a984 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a987 = alloca { ptr, i64, i64 }, align 16 + %a988 = alloca { ptr, i64, i64 }, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a992 = alloca { ptr, i64, i64 }, align 16 + %a1000 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1002 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1005 = alloca { ptr, i64, i64 }, align 16 + %a1006 = alloca { ptr, i64, i64 }, align 16 + %a1007 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1015 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1027 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1032 = alloca { ptr, i64, i64 }, align 16 + %a1047 = alloca %S.gen.FnSig, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1054 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1058 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1060 = alloca { ptr, i64, i64 }, align 16 + %a1061 = alloca { ptr, i64, i64 }, align 16 + %a1065 = alloca { ptr, i64, i64 }, align 16 + %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 + %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1085 = alloca { ptr, i64, i64 }, align 16 + %a1087 = alloca { ptr, i64, i64 }, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca { ptr, i64, i64 }, align 16 + %a1090 = alloca { ptr, i64, i64 }, align 16 + %a1094 = alloca { ptr, i64, i64 }, align 16 + %a1095 = alloca { ptr, i64, i64 }, align 16 + %a1096 = alloca { ptr, i64, i64 }, align 16 + %a1097 = alloca { ptr, i64, i64 }, align 16 + %a1099 = alloca { ptr, i64, i64 }, align 16 + %a1100 = alloca { ptr, i64, i64 }, align 16 + %a1101 = alloca { ptr, i64, i64 }, align 16 + %a1102 = alloca { ptr, i64, i64 }, align 16 + %a1106 = alloca { ptr, i64, i64 }, align 16 + %a1107 = alloca { ptr, i64, i64 }, align 16 + %a1108 = alloca { ptr, i64, i64 }, align 16 + %a1109 = alloca { ptr, i64, i64 }, align 16 + %a1113 = alloca { ptr, i64, i64 }, align 16 + %a1121 = alloca %S.ast.Type, align 16 + %a1126 = alloca i64, align 16 + %a1138 = alloca { ptr, i64, i64 }, align 16 + %a1139 = alloca { ptr, i64, i64 }, align 16 + %a1158 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca { ptr, i64, i64 }, align 16 + %a1160 = alloca { ptr, i64, i64 }, align 16 + %a1162 = alloca { ptr, i64, i64 }, align 16 + %a1163 = alloca { ptr, i64, i64 }, align 16 + %a1164 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca { ptr, i64, i64 }, align 16 + %a1167 = alloca { ptr, i64, i64 }, align 16 + %a1204 = alloca { ptr, i64, i64 }, align 16 + %a1205 = alloca { ptr, i64, i64 }, align 16 + %a1223 = alloca %S.gen.FnSig, align 16 + %a1224 = alloca %S.gen.FnSig, align 16 + %a1234 = alloca i1, align 16 + %a1241 = alloca i64, align 16 + %a1307 = alloca %S.ast.Node, align 16 + %a1308 = alloca %S.ast.Node, align 16 + %a1310 = alloca %S.ast.Node, align 16 + %a1349 = alloca { ptr, i64, i64 }, align 16 + %a1350 = alloca { ptr, i64, i64 }, align 16 + %a1363 = alloca i64, align 16 + %a1376 = alloca %S.gen.Template, align 16 + %a1377 = alloca %S.gen.Template, align 16 + %a1379 = alloca %S.gen.Template, align 16 + %a1407 = alloca %S.ast.Node, align 16 + %a1408 = alloca %S.ast.Node, align 16 + %a1410 = alloca %S.ast.Node, align 16 + %a1440 = alloca { ptr, i64, i64 }, align 16 + %a1441 = alloca { ptr, i64, i64 }, align 16 + %a1454 = alloca i64, align 16 + %a1494 = alloca %S.ast.Node, align 16 + %a1495 = alloca %S.ast.Node, align 16 + %a1497 = alloca %S.ast.Node, align 16 + %a1509 = alloca %S.ast.Node, align 16 + %a1510 = alloca %S.ast.Node, align 16 + %a1512 = alloca %S.ast.Node, align 16 + %a1525 = alloca i64, align 16 + %a1545 = alloca %S.ast.Type, align 16 + %a1546 = alloca %S.ast.Type, align 16 + %a1548 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic3538, label %ok3539 +panic3538: + call void @finch_panic(ptr @.str.2224, i64 1507, ptr @.str.2225) + unreachable +ok3539: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 0 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + store i64 0, ptr %a7 + br label %for.cond3540 +for.cond3540: + %t8 = load i64, ptr %a7 + %t9 = icmp slt i64 %t8, %t6 + br i1 %t9, label %for.body3541, label %for.end3543 +for.body3541: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic3544, label %ok3545 +panic3544: + call void @finch_panic(ptr @.str.2226, i64 1508, ptr @.str.2227) + unreachable +ok3545: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 0 + %t13 = load i64, ptr %a7 + %t14 = load { ptr, i64, i64 }, ptr %t12 + %t15 = extractvalue { ptr, i64, i64 } %t14, 1 + %t16 = icmp uge i64 %t13, %t15 + br i1 %t16, label %range3546, label %inrange3547 +range3546: + call void @finch_panic_index(ptr @.str.2228, i64 1508, i64 %t13, i64 %t15) + unreachable +inrange3547: + %t17 = extractvalue { ptr, i64, i64 } %t14, 0 + %t18 = getelementptr inbounds %S.ast.Program, ptr %t17, i64 %t13 + %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i32 0, i32 0 + %t20 = load { ptr, i64, i64 }, ptr %t19 + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic3548, label %ok3549 +panic3548: + call void @finch_panic(ptr @.str.2229, i64 1508, ptr @.str.2230) + unreachable +ok3549: + %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 14 + store { ptr, i64, i64 } %t20, ptr %a24 + call void @finch_str_copy(ptr %a25, ptr %a24) + %t26 = load { ptr, i64, i64 }, ptr %a25 + %t27 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t26, ptr %t23 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic3550, label %ok3551 +panic3550: + call void @finch_panic(ptr @.str.2231, i64 1509, ptr @.str.2232) + unreachable +ok3551: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 0 + %t32 = load i64, ptr %a7 + %t33 = load { ptr, i64, i64 }, ptr %t31 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range3552, label %inrange3553 +range3552: + call void @finch_panic_index(ptr @.str.2233, i64 1509, i64 %t32, i64 %t34) + unreachable +inrange3553: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.ast.Program, ptr %t36, i64 %t32 + %t38 = getelementptr inbounds %S.ast.Program, ptr %t37, i32 0, i32 6 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i32 0, i32 1 + %t40 = load i64, ptr %t39 + store i64 0, ptr %a41 + br label %for.cond3554 +for.cond3554: + %t42 = load i64, ptr %a41 + %t43 = icmp slt i64 %t42, %t40 + br i1 %t43, label %for.body3555, label %for.end3557 +for.body3555: + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic3558, label %ok3559 +panic3558: + call void @finch_panic(ptr @.str.2234, i64 1510, ptr @.str.2235) + unreachable +ok3559: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 0 + %t47 = load i64, ptr %a7 + %t48 = load { ptr, i64, i64 }, ptr %t46 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range3560, label %inrange3561 +range3560: + call void @finch_panic_index(ptr @.str.2236, i64 1510, i64 %t47, i64 %t49) + unreachable +inrange3561: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i64 %t47 + %t53 = getelementptr inbounds %S.ast.Program, ptr %t52, i32 0, i32 6 + %t54 = load i64, ptr %a41 + %t55 = load { ptr, i64, i64 }, ptr %t53 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range3562, label %inrange3563 +range3562: + call void @finch_panic_index(ptr @.str.2237, i64 1510, i64 %t54, i64 %t56) + unreachable +inrange3563: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 + %t60 = load %S.ast.Node, ptr %t59 + store %S.ast.Node %t60, ptr %a61 + call void @finch.copy.S_ast_Node(ptr %a62, ptr %a61) + %t63 = load %S.ast.Node, ptr %a62 + store %S.ast.Node %t63, ptr %a64 + %t65 = load ptr, ptr %a1 + %t66 = load ptr, ptr %a1 + %t67 = icmp eq ptr %t66, null + br i1 %t67, label %panic3564, label %ok3565 +panic3564: + call void @finch_panic(ptr @.str.2238, i64 1511, ptr @.str.2239) + unreachable +ok3565: + %t68 = getelementptr inbounds %S.gen.Gen, ptr %t66, i32 0, i32 14 + %t69 = load { ptr, i64, i64 }, ptr %t68 + %t70 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t71 = load { ptr, i64, i64 }, ptr %t70 + %t72 = call i64 @finch.gen.findStruct(ptr %t65, { ptr, i64, i64 } %t69, { ptr, i64, i64 } %t71) + %t73 = icmp sge i64 %t72, 0 + br label %logic.from3566 +logic.from3566: + br i1 %t73, label %logic.end3568, label %logic.rhs3567 +logic.rhs3567: + %t74 = load ptr, ptr %a1 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic3569, label %ok3570 +panic3569: + call void @finch_panic(ptr @.str.2240, i64 1511, ptr @.str.2241) + unreachable +ok3570: + %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 14 + %t78 = load { ptr, i64, i64 }, ptr %t77 + %t79 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t80 = load { ptr, i64, i64 }, ptr %t79 + %t81 = call i64 @finch.gen.findTemplate(ptr %t74, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t80, { ptr, i64, i64 } { ptr @.str.2242, i64 0, i64 0 }, i1 true) + %t82 = icmp sge i64 %t81, 0 + br label %logic.rend3571 +logic.rend3571: + br label %logic.end3568 +logic.end3568: + %t83 = phi i1 [ true, %logic.from3566 ], [ %t82, %logic.rend3571 ] + br i1 %t83, label %then3572, label %endif3574 +then3572: + %t84 = load ptr, ptr %a1 + %t85 = load %S.ast.Node, ptr %a64 + %t86 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } { ptr @.str.2243, i64 12, i64 0 }, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.2244, i64 18, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + call void @finch.gen.fail(ptr %t84, %S.ast.Node %t85, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %endif3574 +endif3574: + %t98 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 + %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 + %t100 = load i64, ptr %t99 + %t101 = icmp sgt i64 %t100, 0 + br i1 %t101, label %then3575, label %endif3577 +then3575: + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic3578, label %ok3579 +panic3578: + call void @finch_panic(ptr @.str.2245, i64 1516, ptr @.str.2246) + unreachable +ok3579: + %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 17 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t106 = load ptr, ptr %a1 + %t107 = icmp eq ptr %t106, null + br i1 %t107, label %panic3580, label %ok3581 +panic3580: + call void @finch_panic(ptr @.str.2247, i64 1516, ptr @.str.2248) + unreachable +ok3581: + %t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 14 + %t109 = load { ptr, i64, i64 }, ptr %t108 + store { ptr, i64, i64 } %t109, ptr %a110 + call void @finch_str_copy(ptr %a111, ptr %a110) + %t112 = load { ptr, i64, i64 }, ptr %a111 + %t113 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t112, 0 + %t114 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } %t115, ptr %a116 + call void @finch_str_copy(ptr %a117, ptr %a116) + %t118 = load { ptr, i64, i64 }, ptr %a117 + %t119 = insertvalue %S.gen.Template %t113, { ptr, i64, i64 } %t118, 1 + %t120 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 + %t121 = load { ptr, i64, i64 }, ptr %t120 + store { ptr, i64, i64 } %t121, ptr %a122 + call void @finch.copy.arr_str(ptr %a123, ptr %a122) + %t124 = load { ptr, i64, i64 }, ptr %a123 + %t125 = insertvalue %S.gen.Template %t119, { ptr, i64, i64 } %t124, 3 + %t126 = load i64, ptr %a7 + %t127 = insertvalue %S.gen.Template %t125, i64 %t126, 4 + %t128 = load i64, ptr %a41 + %t129 = insertvalue %S.gen.Template %t127, i64 %t128, 5 + %t130 = insertvalue %S.gen.Template %t129, i1 true, 6 + %t131 = load i64, ptr %t105 + %t132 = add i64 %t131, 1 + call void @finch_arr_reserve(ptr %t104, i64 %t132, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) + %t133 = load ptr, ptr %t104 + %t134 = getelementptr inbounds %S.gen.Template, ptr %t133, i64 %t131 + store %S.gen.Template %t130, ptr %t134 + store i64 %t132, ptr %t105 + call void @finch.drop.S_ast_Node(ptr %a64) + br label %for.step3556 +endif3577: + %t135 = load ptr, ptr %a1 + %t136 = icmp eq ptr %t135, null + br i1 %t136, label %panic3582, label %ok3583 +panic3582: + call void @finch_panic(ptr @.str.2249, i64 1519, ptr @.str.2250) + unreachable +ok3583: + %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 16 + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 + %t139 = load ptr, ptr %a1 + %t140 = icmp eq ptr %t139, null + br i1 %t140, label %panic3584, label %ok3585 +panic3584: + call void @finch_panic(ptr @.str.2251, i64 1519, ptr @.str.2252) + unreachable +ok3585: + %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 14 + %t142 = load { ptr, i64, i64 }, ptr %t141 + store { ptr, i64, i64 } %t142, ptr %a143 + call void @finch_str_copy(ptr %a144, ptr %a143) + %t145 = load { ptr, i64, i64 }, ptr %a144 + %t146 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t145, 0 + %t147 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t148 = load { ptr, i64, i64 }, ptr %t147 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch_str_copy(ptr %a150, ptr %a149) + %t151 = load { ptr, i64, i64 }, ptr %a150 + %t152 = insertvalue %S.gen.StructDef %t146, { ptr, i64, i64 } %t151, 1 + %t153 = load i64, ptr %a7 + %t154 = insertvalue %S.gen.StructDef %t152, i64 %t153, 13 + %t155 = load i64, ptr %a41 + %t156 = insertvalue %S.gen.StructDef %t154, i64 %t155, 14 + %t157 = load i64, ptr %t138 + %t158 = add i64 %t157, 1 + call void @finch_arr_reserve(ptr %t137, i64 %t158, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) + %t159 = load ptr, ptr %t137 + %t160 = getelementptr inbounds %S.gen.StructDef, ptr %t159, i64 %t157 + store %S.gen.StructDef %t156, ptr %t160 + store i64 %t158, ptr %t138 + call void @finch.drop.S_ast_Node(ptr %a64) + br label %for.step3556 +for.step3556: + %t161 = load i64, ptr %a41 + %t162 = add i64 %t161, 1 + store i64 %t162, ptr %a41 + br label %for.cond3554 +for.end3557: + br label %for.step3542 +for.step3542: + %t163 = load i64, ptr %a7 + %t164 = add i64 %t163, 1 + store i64 %t164, ptr %a7 + br label %for.cond3540 +for.end3543: + %t165 = load ptr, ptr %a1 + %t166 = icmp eq ptr %t165, null + br i1 %t166, label %panic3586, label %ok3587 +panic3586: + call void @finch_panic(ptr @.str.2253, i64 1522, ptr @.str.2254) + unreachable +ok3587: + %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 0 + %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t169 = load i64, ptr %t168 + store i64 0, ptr %a170 + br label %for.cond3588 +for.cond3588: + %t171 = load i64, ptr %a170 + %t172 = icmp slt i64 %t171, %t169 + br i1 %t172, label %for.body3589, label %for.end3591 +for.body3589: + %t173 = load ptr, ptr %a1 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic3592, label %ok3593 +panic3592: + call void @finch_panic(ptr @.str.2255, i64 1523, ptr @.str.2256) + unreachable +ok3593: + %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 0 + %t176 = load i64, ptr %a170 + %t177 = load { ptr, i64, i64 }, ptr %t175 + %t178 = extractvalue { ptr, i64, i64 } %t177, 1 + %t179 = icmp uge i64 %t176, %t178 + br i1 %t179, label %range3594, label %inrange3595 +range3594: + call void @finch_panic_index(ptr @.str.2257, i64 1523, i64 %t176, i64 %t178) + unreachable +inrange3595: + %t180 = extractvalue { ptr, i64, i64 } %t177, 0 + %t181 = getelementptr inbounds %S.ast.Program, ptr %t180, i64 %t176 + %t182 = getelementptr inbounds %S.ast.Program, ptr %t181, i32 0, i32 0 + %t183 = load { ptr, i64, i64 }, ptr %t182 + %t184 = load ptr, ptr %a1 + %t185 = icmp eq ptr %t184, null + br i1 %t185, label %panic3596, label %ok3597 +panic3596: + call void @finch_panic(ptr @.str.2258, i64 1523, ptr @.str.2259) + unreachable +ok3597: + %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 14 + store { ptr, i64, i64 } %t183, ptr %a187 + call void @finch_str_copy(ptr %a188, ptr %a187) + %t189 = load { ptr, i64, i64 }, ptr %a188 + %t190 = load { ptr, i64, i64 }, ptr %t186 + store { ptr, i64, i64 } %t189, ptr %t186 + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load ptr, ptr %a1 + %t193 = icmp eq ptr %t192, null + br i1 %t193, label %panic3598, label %ok3599 +panic3598: + call void @finch_panic(ptr @.str.2260, i64 1524, ptr @.str.2261) + unreachable +ok3599: + %t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 0 + %t195 = load i64, ptr %a170 + %t196 = load { ptr, i64, i64 }, ptr %t194 + %t197 = extractvalue { ptr, i64, i64 } %t196, 1 + %t198 = icmp uge i64 %t195, %t197 + br i1 %t198, label %range3600, label %inrange3601 +range3600: + call void @finch_panic_index(ptr @.str.2262, i64 1524, i64 %t195, i64 %t197) + unreachable +inrange3601: + %t199 = extractvalue { ptr, i64, i64 } %t196, 0 + %t200 = getelementptr inbounds %S.ast.Program, ptr %t199, i64 %t195 + %t201 = getelementptr inbounds %S.ast.Program, ptr %t200, i32 0, i32 7 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 + %t203 = load i64, ptr %t202 + store i64 0, ptr %a204 + br label %for.cond3602 +for.cond3602: + %t205 = load i64, ptr %a204 + %t206 = icmp slt i64 %t205, %t203 + br i1 %t206, label %for.body3603, label %for.end3605 +for.body3603: + %t207 = load ptr, ptr %a1 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic3606, label %ok3607 +panic3606: + call void @finch_panic(ptr @.str.2263, i64 1525, ptr @.str.2264) + unreachable +ok3607: + %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 0 + %t210 = load i64, ptr %a170 + %t211 = load { ptr, i64, i64 }, ptr %t209 + %t212 = extractvalue { ptr, i64, i64 } %t211, 1 + %t213 = icmp uge i64 %t210, %t212 + br i1 %t213, label %range3608, label %inrange3609 +range3608: + call void @finch_panic_index(ptr @.str.2265, i64 1525, i64 %t210, i64 %t212) + unreachable +inrange3609: + %t214 = extractvalue { ptr, i64, i64 } %t211, 0 + %t215 = getelementptr inbounds %S.ast.Program, ptr %t214, i64 %t210 + %t216 = getelementptr inbounds %S.ast.Program, ptr %t215, i32 0, i32 7 + %t217 = load i64, ptr %a204 + %t218 = load { ptr, i64, i64 }, ptr %t216 + %t219 = extractvalue { ptr, i64, i64 } %t218, 1 + %t220 = icmp uge i64 %t217, %t219 + br i1 %t220, label %range3610, label %inrange3611 +range3610: + call void @finch_panic_index(ptr @.str.2266, i64 1525, i64 %t217, i64 %t219) + unreachable +inrange3611: + %t221 = extractvalue { ptr, i64, i64 } %t218, 0 + %t222 = getelementptr inbounds %S.ast.Node, ptr %t221, i64 %t217 + %t223 = load %S.ast.Node, ptr %t222 + store %S.ast.Node %t223, ptr %a224 + call void @finch.copy.S_ast_Node(ptr %a225, ptr %a224) + %t226 = load %S.ast.Node, ptr %a225 + store %S.ast.Node %t226, ptr %a227 + %t228 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 6 + %t229 = load i1, ptr %t228 + br i1 %t229, label %then3612, label %endif3614 +then3612: + %t230 = load ptr, ptr %a1 + %t231 = load ptr, ptr %a1 + %t232 = icmp eq ptr %t231, null + br i1 %t232, label %panic3615, label %ok3616 +panic3615: + call void @finch_panic(ptr @.str.2267, i64 1527, ptr @.str.2268) + unreachable +ok3616: + %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 14 + %t234 = load { ptr, i64, i64 }, ptr %t233 + %t235 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t236 = load { ptr, i64, i64 }, ptr %t235 + %t237 = call i64 @finch.gen.findEnum(ptr %t230, { ptr, i64, i64 } %t234, { ptr, i64, i64 } %t236) + %t238 = icmp sge i64 %t237, 0 + br label %logic.from3617 +logic.from3617: + br i1 %t238, label %logic.end3619, label %logic.rhs3618 +logic.rhs3618: + %t239 = load ptr, ptr %a1 + %t240 = load ptr, ptr %a1 + %t241 = icmp eq ptr %t240, null + br i1 %t241, label %panic3620, label %ok3621 +panic3620: + call void @finch_panic(ptr @.str.2269, i64 1527, ptr @.str.2270) + unreachable +ok3621: + %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 14 + %t243 = load { ptr, i64, i64 }, ptr %t242 + %t244 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t245 = load { ptr, i64, i64 }, ptr %t244 + %t246 = call i64 @finch.gen.findSum(ptr %t239, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t245) + %t247 = icmp sge i64 %t246, 0 + br label %logic.rend3622 +logic.rend3622: + br label %logic.end3619 +logic.end3619: + %t248 = phi i1 [ true, %logic.from3617 ], [ %t247, %logic.rend3622 ] + br i1 %t248, label %then3623, label %endif3625 +then3623: + %t249 = load ptr, ptr %a1 + %t250 = load %S.ast.Node, ptr %a227 + %t251 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t252 = load { ptr, i64, i64 }, ptr %t251 + store { ptr, i64, i64 } { ptr @.str.2271, i64 1, i64 0 }, ptr %a254 + store { ptr, i64, i64 } %t252, ptr %a255 + call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a253 + store { ptr, i64, i64 } %t256, ptr %a258 + store { ptr, i64, i64 } { ptr @.str.2272, i64 18, i64 0 }, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t256, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.fail(ptr %t249, %S.ast.Node %t250, { ptr, i64, i64 } %t261) + store { ptr, i64, i64 } %t261, ptr %a262 + call void @finch_str_drop(ptr %a262) + br label %endif3625 +endif3625: + %t263 = load ptr, ptr %a1 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic3626, label %ok3627 +panic3626: + call void @finch_panic(ptr @.str.2273, i64 1530, ptr @.str.2274) + unreachable +ok3627: + %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 14 + %t266 = load { ptr, i64, i64 }, ptr %t265 + store { ptr, i64, i64 } %t266, ptr %a267 + call void @finch_str_copy(ptr %a268, ptr %a267) + %t269 = load { ptr, i64, i64 }, ptr %a268 + %t270 = insertvalue %S.gen.SumDef zeroinitializer, { ptr, i64, i64 } %t269, 0 + %t271 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } %t272, ptr %a273 + call void @finch_str_copy(ptr %a274, ptr %a273) + %t275 = load { ptr, i64, i64 }, ptr %a274 + %t276 = insertvalue %S.gen.SumDef %t270, { ptr, i64, i64 } %t275, 1 + store %S.gen.SumDef %t276, ptr %a277 + store i64 1, ptr %a278 + %t279 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 + store i64 0, ptr %a280 + br label %each.cond3628 +each.cond3628: + %t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %t279, i32 0, i32 1 + %t282 = load i64, ptr %t281 + %t283 = load i64, ptr %a280 + %t284 = icmp slt i64 %t283, %t282 + br i1 %t284, label %each.body3629, label %each.end3631 +each.body3629: + %t285 = load ptr, ptr %t279 + %t286 = getelementptr inbounds %S.ast.Node, ptr %t285, i64 %t283 + %t287 = load %S.ast.Node, ptr %t286 + store %S.ast.Node %t287, ptr %a288 + %t289 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 + %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 + %t291 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 + %t292 = load { ptr, i64, i64 }, ptr %t291 + store i64 -1, ptr %a293 + %t294 = load i64, ptr %t290 + %t295 = load ptr, ptr %t289 + store i64 0, ptr %a296 + br label %find.cond3632 +find.cond3632: + %t297 = load i64, ptr %a296 + %t298 = icmp slt i64 %t297, %t294 + br i1 %t298, label %find.body3633, label %find.end3636 +find.body3633: + %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t295, i64 %t297 + %t300 = load { ptr, i64, i64 }, ptr %t299 + store { ptr, i64, i64 } %t300, ptr %a301 + store { ptr, i64, i64 } %t292, ptr %a302 + %t303 = call i32 @finch_str_eq(ptr %a301, ptr %a302) + %t304 = icmp ne i32 %t303, 0 + br i1 %t304, label %find.hit3634, label %find.next3635 +find.hit3634: + store i64 %t297, ptr %a293 + br label %find.end3636 +find.next3635: + %t305 = add i64 %t297, 1 + store i64 %t305, ptr %a296 + br label %find.cond3632 +find.end3636: + %t306 = load i64, ptr %a293 + %t307 = icmp sge i64 %t306, 0 + br i1 %t307, label %then3637, label %endif3639 +then3637: + %t308 = load ptr, ptr %a1 + %t309 = load %S.ast.Node, ptr %a288 + %t310 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t311 = load { ptr, i64, i64 }, ptr %t310 + store { ptr, i64, i64 } { ptr @.str.2275, i64 9, i64 0 }, ptr %a313 + store { ptr, i64, i64 } %t311, ptr %a314 + call void @finch_str_concat(ptr %a312, ptr %a313, ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a312 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.2276, i64 17, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + %t321 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 + %t322 = load { ptr, i64, i64 }, ptr %t321 + store { ptr, i64, i64 } %t320, ptr %a324 + store { ptr, i64, i64 } %t322, ptr %a325 + call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) + store { ptr, i64, i64 } %t320, ptr %a326 + call void @finch_str_drop(ptr %a326) + %t327 = load { ptr, i64, i64 }, ptr %a323 + store { ptr, i64, i64 } %t327, ptr %a329 + store { ptr, i64, i64 } { ptr @.str.2277, i64 6, i64 0 }, ptr %a330 + call void @finch_str_concat(ptr %a328, ptr %a329, ptr %a330) + store { ptr, i64, i64 } %t327, ptr %a331 + call void @finch_str_drop(ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a328 + call void @finch.gen.fail(ptr %t308, %S.ast.Node %t309, { ptr, i64, i64 } %t332) + store { ptr, i64, i64 } %t332, ptr %a333 + call void @finch_str_drop(ptr %a333) + br label %endif3639 +endif3639: + %t334 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 + %t335 = getelementptr inbounds { ptr, i64, i64 }, ptr %t334, i32 0, i32 1 + %t336 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 + %t337 = load { ptr, i64, i64 }, ptr %t336 + store { ptr, i64, i64 } %t337, ptr %a338 + call void @finch_str_copy(ptr %a339, ptr %a338) + %t340 = load { ptr, i64, i64 }, ptr %a339 + %t341 = load i64, ptr %t335 + %t342 = add i64 %t341, 1 + call void @finch_arr_reserve(ptr %t334, i64 %t342, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t343 = load ptr, ptr %t334 + %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %t343, i64 %t341 + store { ptr, i64, i64 } %t340, ptr %t344 + store i64 %t342, ptr %t335 + %t345 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 3 + %t346 = getelementptr inbounds { ptr, i64, i64 }, ptr %t345, i32 0, i32 1 + %t347 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 9 + %t348 = getelementptr inbounds { ptr, i64, i64 }, ptr %t347, i32 0, i32 1 + %t349 = load i64, ptr %t348 + %t350 = load i64, ptr %t346 + %t351 = add i64 %t350, 1 + call void @finch_arr_reserve(ptr %t345, i64 %t351, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t352 = load ptr, ptr %t345 + %t353 = getelementptr inbounds i64, ptr %t352, i64 %t350 + store i64 %t349, ptr %t353 + store i64 %t351, ptr %t346 + %t354 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 4 + %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i32 0, i32 1 + %t356 = load i64, ptr %a278 + %t357 = load i64, ptr %t355 + %t358 = add i64 %t357, 1 + call void @finch_arr_reserve(ptr %t354, i64 %t358, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t359 = load ptr, ptr %t354 + %t360 = getelementptr inbounds i64, ptr %t359, i64 %t357 + store i64 %t356, ptr %t360 + store i64 %t358, ptr %t355 + %t361 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 9 + %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %t361, i32 0, i32 1 + %t363 = load i64, ptr %t362 + %t364 = load i64, ptr %a278 + %t365 = add i64 %t364, %t363 + store i64 %t365, ptr %a278 + br label %each.step3630 +each.step3630: + %t366 = load i64, ptr %a280 + %t367 = add i64 %t366, 1 + store i64 %t367, ptr %a280 + br label %each.cond3628 +each.end3631: + %t368 = load ptr, ptr %a1 + %t369 = icmp eq ptr %t368, null + br i1 %t369, label %panic3640, label %ok3641 +panic3640: + call void @finch_panic(ptr @.str.2278, i64 1541, ptr @.str.2279) + unreachable +ok3641: + %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 22 + %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 + %t372 = load %S.gen.SumDef, ptr %a277 + store %S.gen.SumDef %t372, ptr %a373 + call void @finch.copy.S_gen_SumDef(ptr %a374, ptr %a373) + %t375 = load %S.gen.SumDef, ptr %a374 + %t376 = load i64, ptr %t371 + %t377 = add i64 %t376, 1 + call void @finch_arr_reserve(ptr %t370, i64 %t377, i64 ptrtoint (ptr getelementptr (%S.gen.SumDef, ptr null, i32 1) to i64)) + %t378 = load ptr, ptr %t370 + %t379 = getelementptr inbounds %S.gen.SumDef, ptr %t378, i64 %t376 + store %S.gen.SumDef %t375, ptr %t379 + store i64 %t377, ptr %t371 + call void @finch.drop.S_gen_SumDef(ptr %a277) + call void @finch.drop.S_ast_Node(ptr %a227) + br label %for.step3604 +endif3614: + %t380 = load ptr, ptr %a1 + %t381 = load ptr, ptr %a1 + %t382 = icmp eq ptr %t381, null + br i1 %t382, label %panic3642, label %ok3643 +panic3642: + call void @finch_panic(ptr @.str.2280, i64 1544, ptr @.str.2281) + unreachable +ok3643: + %t383 = getelementptr inbounds %S.gen.Gen, ptr %t381, i32 0, i32 14 + %t384 = load { ptr, i64, i64 }, ptr %t383 + %t385 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t386 = load { ptr, i64, i64 }, ptr %t385 + %t387 = call i64 @finch.gen.findEnum(ptr %t380, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t386) + %t388 = icmp sge i64 %t387, 0 + br label %logic.from3644 +logic.from3644: + br i1 %t388, label %logic.end3646, label %logic.rhs3645 +logic.rhs3645: + %t389 = load ptr, ptr %a1 + %t390 = load ptr, ptr %a1 + %t391 = icmp eq ptr %t390, null + br i1 %t391, label %panic3647, label %ok3648 +panic3647: + call void @finch_panic(ptr @.str.2282, i64 1544, ptr @.str.2283) + unreachable +ok3648: + %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 14 + %t393 = load { ptr, i64, i64 }, ptr %t392 + %t394 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t395 = load { ptr, i64, i64 }, ptr %t394 + %t396 = call i64 @finch.gen.findStruct(ptr %t389, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t395) + %t397 = icmp sge i64 %t396, 0 + br label %logic.rend3649 +logic.rend3649: + br label %logic.end3646 +logic.end3646: + %t398 = phi i1 [ true, %logic.from3644 ], [ %t397, %logic.rend3649 ] + br i1 %t398, label %then3650, label %endif3652 +then3650: + %t399 = load ptr, ptr %a1 + %t400 = load %S.ast.Node, ptr %a227 + %t401 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t402 = load { ptr, i64, i64 }, ptr %t401 + store { ptr, i64, i64 } { ptr @.str.2284, i64 1, i64 0 }, ptr %a404 + store { ptr, i64, i64 } %t402, ptr %a405 + call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a403 + store { ptr, i64, i64 } %t406, ptr %a408 + store { ptr, i64, i64 } { ptr @.str.2285, i64 18, i64 0 }, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + store { ptr, i64, i64 } %t406, ptr %a410 + call void @finch_str_drop(ptr %a410) + %t411 = load { ptr, i64, i64 }, ptr %a407 + call void @finch.gen.fail(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t411) + store { ptr, i64, i64 } %t411, ptr %a412 + call void @finch_str_drop(ptr %a412) + br label %endif3652 +endif3652: + %t413 = load ptr, ptr %a1 + %t414 = icmp eq ptr %t413, null + br i1 %t414, label %panic3653, label %ok3654 +panic3653: + call void @finch_panic(ptr @.str.2286, i64 1547, ptr @.str.2287) + unreachable +ok3654: + %t415 = getelementptr inbounds %S.gen.Gen, ptr %t413, i32 0, i32 14 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t416, ptr %a417 + call void @finch_str_copy(ptr %a418, ptr %a417) + %t419 = load { ptr, i64, i64 }, ptr %a418 + %t420 = insertvalue %S.gen.EnumDef zeroinitializer, { ptr, i64, i64 } %t419, 0 + %t421 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t422 = load { ptr, i64, i64 }, ptr %t421 + store { ptr, i64, i64 } %t422, ptr %a423 + call void @finch_str_copy(ptr %a424, ptr %a423) + %t425 = load { ptr, i64, i64 }, ptr %a424 + %t426 = insertvalue %S.gen.EnumDef %t420, { ptr, i64, i64 } %t425, 1 + store %S.gen.EnumDef %t426, ptr %a427 + store i64 0, ptr %a428 + %t429 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 + store i64 0, ptr %a430 + br label %each.cond3655 +each.cond3655: + %t431 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i32 0, i32 1 + %t432 = load i64, ptr %t431 + %t433 = load i64, ptr %a430 + %t434 = icmp slt i64 %t433, %t432 + br i1 %t434, label %each.body3656, label %each.end3658 +each.body3656: + %t435 = load ptr, ptr %t429 + %t436 = getelementptr inbounds %S.ast.Node, ptr %t435, i64 %t433 + %t437 = load %S.ast.Node, ptr %t436 + store %S.ast.Node %t437, ptr %a438 + %t439 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 + %t440 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 + %t441 = load i64, ptr %t440 + %t442 = icmp sgt i64 %t441, 0 + br i1 %t442, label %then3659, label %endif3661 +then3659: + %t443 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 + %t444 = load { ptr, i64, i64 }, ptr %t443 + store { ptr, i64, i64 } %t444, ptr %a445 + %t446 = call i64 @finch_str_to_int(ptr %a445, ptr @.str.2288, i64 1551) + store i64 %t446, ptr %a428 + br label %endif3661 +endif3661: + %t447 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 + %t448 = getelementptr inbounds { ptr, i64, i64 }, ptr %t447, i32 0, i32 1 + %t449 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 + %t450 = load { ptr, i64, i64 }, ptr %t449 + store i64 -1, ptr %a451 + %t452 = load i64, ptr %t448 + %t453 = load ptr, ptr %t447 + store i64 0, ptr %a454 + br label %find.cond3662 +find.cond3662: + %t455 = load i64, ptr %a454 + %t456 = icmp slt i64 %t455, %t452 + br i1 %t456, label %find.body3663, label %find.end3666 +find.body3663: + %t457 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t455 + %t458 = load { ptr, i64, i64 }, ptr %t457 + store { ptr, i64, i64 } %t458, ptr %a459 + store { ptr, i64, i64 } %t450, ptr %a460 + %t461 = call i32 @finch_str_eq(ptr %a459, ptr %a460) + %t462 = icmp ne i32 %t461, 0 + br i1 %t462, label %find.hit3664, label %find.next3665 +find.hit3664: + store i64 %t455, ptr %a451 + br label %find.end3666 +find.next3665: + %t463 = add i64 %t455, 1 + store i64 %t463, ptr %a454 + br label %find.cond3662 +find.end3666: + %t464 = load i64, ptr %a451 + %t465 = icmp sge i64 %t464, 0 + br i1 %t465, label %then3667, label %endif3669 +then3667: + %t466 = load ptr, ptr %a1 + %t467 = load %S.ast.Node, ptr %a438 + %t468 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t469 = load { ptr, i64, i64 }, ptr %t468 + store { ptr, i64, i64 } { ptr @.str.2289, i64 9, i64 0 }, ptr %a471 + store { ptr, i64, i64 } %t469, ptr %a472 + call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) + %t473 = load { ptr, i64, i64 }, ptr %a470 + store { ptr, i64, i64 } %t473, ptr %a475 + store { ptr, i64, i64 } { ptr @.str.2290, i64 17, i64 0 }, ptr %a476 + call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) + store { ptr, i64, i64 } %t473, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = load { ptr, i64, i64 }, ptr %a474 + %t479 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 + %t480 = load { ptr, i64, i64 }, ptr %t479 + store { ptr, i64, i64 } %t478, ptr %a482 + store { ptr, i64, i64 } %t480, ptr %a483 + call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) + store { ptr, i64, i64 } %t478, ptr %a484 + call void @finch_str_drop(ptr %a484) + %t485 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t485, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.2291, i64 6, i64 0 }, ptr %a488 + call void @finch_str_concat(ptr %a486, ptr %a487, ptr %a488) + store { ptr, i64, i64 } %t485, ptr %a489 + call void @finch_str_drop(ptr %a489) + %t490 = load { ptr, i64, i64 }, ptr %a486 + call void @finch.gen.fail(ptr %t466, %S.ast.Node %t467, { ptr, i64, i64 } %t490) + store { ptr, i64, i64 } %t490, ptr %a491 + call void @finch_str_drop(ptr %a491) + br label %endif3669 +endif3669: + %t492 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 + %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t492, i32 0, i32 1 + %t494 = load i64, ptr %a428 + store i64 -1, ptr %a495 + %t496 = load i64, ptr %t493 + %t497 = load ptr, ptr %t492 + store i64 0, ptr %a498 + br label %find.cond3670 +find.cond3670: + %t499 = load i64, ptr %a498 + %t500 = icmp slt i64 %t499, %t496 + br i1 %t500, label %find.body3671, label %find.end3674 +find.body3671: + %t501 = getelementptr inbounds i64, ptr %t497, i64 %t499 + %t502 = load i64, ptr %t501 + %t503 = icmp eq i64 %t502, %t494 + br i1 %t503, label %find.hit3672, label %find.next3673 +find.hit3672: + store i64 %t499, ptr %a495 + br label %find.end3674 +find.next3673: + %t504 = add i64 %t499, 1 + store i64 %t504, ptr %a498 + br label %find.cond3670 +find.end3674: + %t505 = load i64, ptr %a495 + %t506 = icmp sge i64 %t505, 0 + br i1 %t506, label %then3675, label %endif3677 +then3675: + %t507 = load ptr, ptr %a1 + %t508 = load %S.ast.Node, ptr %a438 + %t509 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t510 = load { ptr, i64, i64 }, ptr %t509 + store { ptr, i64, i64 } { ptr @.str.2292, i64 16, i64 0 }, ptr %a512 + store { ptr, i64, i64 } %t510, ptr %a513 + call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) + %t514 = load { ptr, i64, i64 }, ptr %a511 + store { ptr, i64, i64 } %t514, ptr %a516 + store { ptr, i64, i64 } { ptr @.str.2293, i64 17, i64 0 }, ptr %a517 + call void @finch_str_concat(ptr %a515, ptr %a516, ptr %a517) + store { ptr, i64, i64 } %t514, ptr %a518 + call void @finch_str_drop(ptr %a518) + %t519 = load { ptr, i64, i64 }, ptr %a515 + %t520 = load i64, ptr %a428 + call void @finch_str_from_int(ptr %a521, i64 %t520) + %t522 = load { ptr, i64, i64 }, ptr %a521 + store { ptr, i64, i64 } %t519, ptr %a524 + store { ptr, i64, i64 } %t522, ptr %a525 + call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) + store { ptr, i64, i64 } %t519, ptr %a526 + call void @finch_str_drop(ptr %a526) + store { ptr, i64, i64 } %t522, ptr %a527 + call void @finch_str_drop(ptr %a527) + %t528 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t528, ptr %a530 + store { ptr, i64, i64 } { ptr @.str.2294, i64 20, i64 0 }, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + call void @finch.gen.fail(ptr %t507, %S.ast.Node %t508, { ptr, i64, i64 } %t533) + store { ptr, i64, i64 } %t533, ptr %a534 + call void @finch_str_drop(ptr %a534) + br label %endif3677 +endif3677: + %t535 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 + %t536 = getelementptr inbounds { ptr, i64, i64 }, ptr %t535, i32 0, i32 1 + %t537 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 + %t538 = load { ptr, i64, i64 }, ptr %t537 + store { ptr, i64, i64 } %t538, ptr %a539 + call void @finch_str_copy(ptr %a540, ptr %a539) + %t541 = load { ptr, i64, i64 }, ptr %a540 + %t542 = load i64, ptr %t536 + %t543 = add i64 %t542, 1 + call void @finch_arr_reserve(ptr %t535, i64 %t543, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t544 = load ptr, ptr %t535 + %t545 = getelementptr inbounds { ptr, i64, i64 }, ptr %t544, i64 %t542 + store { ptr, i64, i64 } %t541, ptr %t545 + store i64 %t543, ptr %t536 + %t546 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 + %t547 = getelementptr inbounds { ptr, i64, i64 }, ptr %t546, i32 0, i32 1 + %t548 = load i64, ptr %a428 + %t549 = load i64, ptr %t547 + %t550 = add i64 %t549, 1 + call void @finch_arr_reserve(ptr %t546, i64 %t550, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t551 = load ptr, ptr %t546 + %t552 = getelementptr inbounds i64, ptr %t551, i64 %t549 + store i64 %t548, ptr %t552 + store i64 %t550, ptr %t547 + %t553 = load i64, ptr %a428 + %t554 = add i64 %t553, 1 + store i64 %t554, ptr %a428 + br label %each.step3657 +each.step3657: + %t555 = load i64, ptr %a430 + %t556 = add i64 %t555, 1 + store i64 %t556, ptr %a430 + br label %each.cond3655 +each.end3658: + %t557 = load ptr, ptr %a1 + %t558 = icmp eq ptr %t557, null + br i1 %t558, label %panic3678, label %ok3679 +panic3678: + call void @finch_panic(ptr @.str.2295, i64 1563, ptr @.str.2296) + unreachable +ok3679: + %t559 = getelementptr inbounds %S.gen.Gen, ptr %t557, i32 0, i32 21 + %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 + %t561 = load %S.gen.EnumDef, ptr %a427 + store %S.gen.EnumDef %t561, ptr %a562 + call void @finch.copy.S_gen_EnumDef(ptr %a563, ptr %a562) + %t564 = load %S.gen.EnumDef, ptr %a563 + %t565 = load i64, ptr %t560 + %t566 = add i64 %t565, 1 + call void @finch_arr_reserve(ptr %t559, i64 %t566, i64 ptrtoint (ptr getelementptr (%S.gen.EnumDef, ptr null, i32 1) to i64)) + %t567 = load ptr, ptr %t559 + %t568 = getelementptr inbounds %S.gen.EnumDef, ptr %t567, i64 %t565 + store %S.gen.EnumDef %t564, ptr %t568 + store i64 %t566, ptr %t560 + call void @finch.drop.S_gen_EnumDef(ptr %a427) + call void @finch.drop.S_ast_Node(ptr %a227) + br label %for.step3604 +for.step3604: + %t569 = load i64, ptr %a204 + %t570 = add i64 %t569, 1 + store i64 %t570, ptr %a204 + br label %for.cond3602 +for.end3605: + br label %for.step3590 +for.step3590: + %t571 = load i64, ptr %a170 + %t572 = add i64 %t571, 1 + store i64 %t572, ptr %a170 + br label %for.cond3588 +for.end3591: + %t573 = load ptr, ptr %a1 + %t574 = icmp eq ptr %t573, null + br i1 %t574, label %panic3680, label %ok3681 +panic3680: + call void @finch_panic(ptr @.str.2297, i64 1566, ptr @.str.2298) + unreachable +ok3681: + %t575 = getelementptr inbounds %S.gen.Gen, ptr %t573, i32 0, i32 26 + %t576 = getelementptr inbounds %S.cimport.CImports, ptr %t575, i32 0, i32 4 + %t577 = getelementptr inbounds { ptr, i64, i64 }, ptr %t576, i32 0, i32 1 + %t578 = load i64, ptr %t577 + store i64 0, ptr %a579 + br label %for.cond3682 +for.cond3682: + %t580 = load i64, ptr %a579 + %t581 = icmp slt i64 %t580, %t578 + br i1 %t581, label %for.body3683, label %for.end3685 +for.body3683: + %t582 = load ptr, ptr %a1 + %t583 = icmp eq ptr %t582, null + br i1 %t583, label %panic3686, label %ok3687 +panic3686: + call void @finch_panic(ptr @.str.2299, i64 1567, ptr @.str.2300) + unreachable +ok3687: + %t584 = getelementptr inbounds %S.gen.Gen, ptr %t582, i32 0, i32 16 + %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i32 0, i32 1 + %t586 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } { ptr @.str.2301, i64 1, i64 0 }, 0 + %t587 = load ptr, ptr %a1 + %t588 = icmp eq ptr %t587, null + br i1 %t588, label %panic3688, label %ok3689 +panic3688: + call void @finch_panic(ptr @.str.2302, i64 1567, ptr @.str.2303) + unreachable +ok3689: + %t589 = getelementptr inbounds %S.gen.Gen, ptr %t587, i32 0, i32 26 + %t590 = getelementptr inbounds %S.cimport.CImports, ptr %t589, i32 0, i32 4 + %t591 = load i64, ptr %a579 + %t592 = load { ptr, i64, i64 }, ptr %t590 + %t593 = extractvalue { ptr, i64, i64 } %t592, 1 + %t594 = icmp uge i64 %t591, %t593 + br i1 %t594, label %range3690, label %inrange3691 +range3690: + call void @finch_panic_index(ptr @.str.2304, i64 1567, i64 %t591, i64 %t593) + unreachable +inrange3691: + %t595 = extractvalue { ptr, i64, i64 } %t592, 0 + %t596 = getelementptr inbounds { ptr, i64, i64 }, ptr %t595, i64 %t591 + %t597 = load { ptr, i64, i64 }, ptr %t596 + store { ptr, i64, i64 } %t597, ptr %a598 + call void @finch_str_copy(ptr %a599, ptr %a598) + %t600 = load { ptr, i64, i64 }, ptr %a599 + %t601 = insertvalue %S.gen.StructDef %t586, { ptr, i64, i64 } %t600, 1 + %t602 = insertvalue %S.gen.StructDef %t601, i1 true, 2 + %t603 = insertvalue %S.gen.StructDef %t602, i64 -1, 13 + %t604 = load i64, ptr %a579 + %t605 = insertvalue %S.gen.StructDef %t603, i64 %t604, 14 + %t606 = load i64, ptr %t585 + %t607 = add i64 %t606, 1 + call void @finch_arr_reserve(ptr %t584, i64 %t607, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) + %t608 = load ptr, ptr %t584 + %t609 = getelementptr inbounds %S.gen.StructDef, ptr %t608, i64 %t606 + store %S.gen.StructDef %t605, ptr %t609 + store i64 %t607, ptr %t585 + br label %for.step3684 +for.step3684: + %t610 = load i64, ptr %a579 + %t611 = add i64 %t610, 1 + store i64 %t611, ptr %a579 + br label %for.cond3682 +for.end3685: + %t612 = load ptr, ptr %a1 + %t613 = icmp eq ptr %t612, null + br i1 %t613, label %panic3692, label %ok3693 +panic3692: + call void @finch_panic(ptr @.str.2305, i64 1569, ptr @.str.2306) + unreachable +ok3693: + %t614 = getelementptr inbounds %S.gen.Gen, ptr %t612, i32 0, i32 16 + %t615 = getelementptr inbounds { ptr, i64, i64 }, ptr %t614, i32 0, i32 1 + %t616 = load i64, ptr %t615 + store i64 0, ptr %a617 + br label %for.cond3694 +for.cond3694: + %t618 = load i64, ptr %a617 + %t619 = icmp slt i64 %t618, %t616 + br i1 %t619, label %for.body3695, label %for.end3697 +for.body3695: + %t620 = load ptr, ptr %a1 + %t621 = load i64, ptr %a617 + call void @finch.gen.resolveStruct(ptr %t620, i64 %t621) + br label %for.step3696 +for.step3696: + %t622 = load i64, ptr %a617 + %t623 = add i64 %t622, 1 + store i64 %t623, ptr %a617 + br label %for.cond3694 +for.end3697: + %t624 = load ptr, ptr %a1 + %t625 = icmp eq ptr %t624, null + br i1 %t625, label %panic3698, label %ok3699 +panic3698: + call void @finch_panic(ptr @.str.2307, i64 1572, ptr @.str.2308) + unreachable +ok3699: + %t626 = getelementptr inbounds %S.gen.Gen, ptr %t624, i32 0, i32 0 + %t627 = getelementptr inbounds { ptr, i64, i64 }, ptr %t626, i32 0, i32 1 + %t628 = load i64, ptr %t627 + store i64 0, ptr %a629 + br label %for.cond3700 +for.cond3700: + %t630 = load i64, ptr %a629 + %t631 = icmp slt i64 %t630, %t628 + br i1 %t631, label %for.body3701, label %for.end3703 +for.body3701: + %t632 = load ptr, ptr %a1 + %t633 = icmp eq ptr %t632, null + br i1 %t633, label %panic3704, label %ok3705 +panic3704: + call void @finch_panic(ptr @.str.2309, i64 1573, ptr @.str.2310) + unreachable +ok3705: + %t634 = getelementptr inbounds %S.gen.Gen, ptr %t632, i32 0, i32 0 + %t635 = load i64, ptr %a629 + %t636 = load { ptr, i64, i64 }, ptr %t634 + %t637 = extractvalue { ptr, i64, i64 } %t636, 1 + %t638 = icmp uge i64 %t635, %t637 + br i1 %t638, label %range3706, label %inrange3707 +range3706: + call void @finch_panic_index(ptr @.str.2311, i64 1573, i64 %t635, i64 %t637) + unreachable +inrange3707: + %t639 = extractvalue { ptr, i64, i64 } %t636, 0 + %t640 = getelementptr inbounds %S.ast.Program, ptr %t639, i64 %t635 + %t641 = getelementptr inbounds %S.ast.Program, ptr %t640, i32 0, i32 0 + %t642 = load { ptr, i64, i64 }, ptr %t641 + %t643 = load ptr, ptr %a1 + %t644 = icmp eq ptr %t643, null + br i1 %t644, label %panic3708, label %ok3709 +panic3708: + call void @finch_panic(ptr @.str.2312, i64 1573, ptr @.str.2313) + unreachable +ok3709: + %t645 = getelementptr inbounds %S.gen.Gen, ptr %t643, i32 0, i32 14 + store { ptr, i64, i64 } %t642, ptr %a646 + call void @finch_str_copy(ptr %a647, ptr %a646) + %t648 = load { ptr, i64, i64 }, ptr %a647 + %t649 = load { ptr, i64, i64 }, ptr %t645 + store { ptr, i64, i64 } %t648, ptr %t645 + store { ptr, i64, i64 } %t649, ptr %a650 + call void @finch_str_drop(ptr %a650) + %t651 = load ptr, ptr %a1 + %t652 = icmp eq ptr %t651, null + br i1 %t652, label %panic3710, label %ok3711 +panic3710: + call void @finch_panic(ptr @.str.2314, i64 1574, ptr @.str.2315) + unreachable +ok3711: + %t653 = getelementptr inbounds %S.gen.Gen, ptr %t651, i32 0, i32 0 + %t654 = load i64, ptr %a629 + %t655 = load { ptr, i64, i64 }, ptr %t653 + %t656 = extractvalue { ptr, i64, i64 } %t655, 1 + %t657 = icmp uge i64 %t654, %t656 + br i1 %t657, label %range3712, label %inrange3713 +range3712: + call void @finch_panic_index(ptr @.str.2316, i64 1574, i64 %t654, i64 %t656) + unreachable +inrange3713: + %t658 = extractvalue { ptr, i64, i64 } %t655, 0 + %t659 = getelementptr inbounds %S.ast.Program, ptr %t658, i64 %t654 + %t660 = getelementptr inbounds %S.ast.Program, ptr %t659, i32 0, i32 8 + %t661 = getelementptr inbounds { ptr, i64, i64 }, ptr %t660, i32 0, i32 1 + %t662 = load i64, ptr %t661 + store i64 0, ptr %a663 + br label %for.cond3714 +for.cond3714: + %t664 = load i64, ptr %a663 + %t665 = icmp slt i64 %t664, %t662 + br i1 %t665, label %for.body3715, label %for.end3717 +for.body3715: + %t666 = load ptr, ptr %a1 + %t667 = icmp eq ptr %t666, null + br i1 %t667, label %panic3718, label %ok3719 +panic3718: + call void @finch_panic(ptr @.str.2317, i64 1575, ptr @.str.2318) + unreachable +ok3719: + %t668 = getelementptr inbounds %S.gen.Gen, ptr %t666, i32 0, i32 0 + %t669 = load i64, ptr %a629 + %t670 = load { ptr, i64, i64 }, ptr %t668 + %t671 = extractvalue { ptr, i64, i64 } %t670, 1 + %t672 = icmp uge i64 %t669, %t671 + br i1 %t672, label %range3720, label %inrange3721 +range3720: + call void @finch_panic_index(ptr @.str.2319, i64 1575, i64 %t669, i64 %t671) + unreachable +inrange3721: + %t673 = extractvalue { ptr, i64, i64 } %t670, 0 + %t674 = getelementptr inbounds %S.ast.Program, ptr %t673, i64 %t669 + %t675 = getelementptr inbounds %S.ast.Program, ptr %t674, i32 0, i32 8 + %t676 = load i64, ptr %a663 + %t677 = load { ptr, i64, i64 }, ptr %t675 + %t678 = extractvalue { ptr, i64, i64 } %t677, 1 + %t679 = icmp uge i64 %t676, %t678 + br i1 %t679, label %range3722, label %inrange3723 +range3722: + call void @finch_panic_index(ptr @.str.2320, i64 1575, i64 %t676, i64 %t678) + unreachable +inrange3723: + %t680 = extractvalue { ptr, i64, i64 } %t677, 0 + %t681 = getelementptr inbounds %S.ast.Node, ptr %t680, i64 %t676 + %t682 = load %S.ast.Node, ptr %t681 + store %S.ast.Node %t682, ptr %a683 + call void @finch.copy.S_ast_Node(ptr %a684, ptr %a683) + %t685 = load %S.ast.Node, ptr %a684 + store %S.ast.Node %t685, ptr %a686 + %t687 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 3 + %t688 = getelementptr inbounds { ptr, i64, i64 }, ptr %t687, i32 0, i32 1 + %t689 = load i64, ptr %t688 + %t690 = icmp sgt i64 %t689, 0 + br i1 %t690, label %then3724, label %endif3726 +then3724: + %t691 = load ptr, ptr %a1 + %t692 = load ptr, ptr %a1 + %t693 = icmp eq ptr %t692, null + br i1 %t693, label %panic3727, label %ok3728 +panic3727: + call void @finch_panic(ptr @.str.2321, i64 1578, ptr @.str.2322) + unreachable +ok3728: + %t694 = getelementptr inbounds %S.gen.Gen, ptr %t692, i32 0, i32 14 + %t695 = load { ptr, i64, i64 }, ptr %t694 + %t696 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t697 = load { ptr, i64, i64 }, ptr %t696 + %t698 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t699 = load { ptr, i64, i64 }, ptr %t698 + %t700 = call i64 @finch.gen.findTemplate(ptr %t691, { ptr, i64, i64 } %t695, { ptr, i64, i64 } %t697, { ptr, i64, i64 } %t699, i1 false) + %t701 = icmp sge i64 %t700, 0 + br i1 %t701, label %then3729, label %endif3731 +then3729: + %t702 = load ptr, ptr %a1 + %t703 = load %S.ast.Node, ptr %a686 + %t704 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t705 = load { ptr, i64, i64 }, ptr %t704 + store { ptr, i64, i64 } { ptr @.str.2323, i64 10, i64 0 }, ptr %a707 + store { ptr, i64, i64 } %t705, ptr %a708 + call void @finch_str_concat(ptr %a706, ptr %a707, ptr %a708) + %t709 = load { ptr, i64, i64 }, ptr %a706 + store { ptr, i64, i64 } %t709, ptr %a711 + store { ptr, i64, i64 } { ptr @.str.2324, i64 18, i64 0 }, ptr %a712 + call void @finch_str_concat(ptr %a710, ptr %a711, ptr %a712) + store { ptr, i64, i64 } %t709, ptr %a713 + call void @finch_str_drop(ptr %a713) + %t714 = load { ptr, i64, i64 }, ptr %a710 + call void @finch.gen.fail(ptr %t702, %S.ast.Node %t703, { ptr, i64, i64 } %t714) + store { ptr, i64, i64 } %t714, ptr %a715 + call void @finch_str_drop(ptr %a715) + br label %endif3731 +endif3731: + %t716 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t717 = getelementptr inbounds { ptr, i64, i64 }, ptr %t716, i32 0, i32 1 + %t718 = load i64, ptr %t717 + %t719 = icmp sgt i64 %t718, 0 + br label %logic.from3732 +logic.from3732: + br i1 %t719, label %logic.rhs3733, label %logic.end3734 +logic.rhs3733: + %t720 = load ptr, ptr %a1 + %t721 = load ptr, ptr %a1 + %t722 = icmp eq ptr %t721, null + br i1 %t722, label %panic3735, label %ok3736 +panic3735: + call void @finch_panic(ptr @.str.2325, i64 1581, ptr @.str.2326) + unreachable +ok3736: + %t723 = getelementptr inbounds %S.gen.Gen, ptr %t721, i32 0, i32 14 + %t724 = load { ptr, i64, i64 }, ptr %t723 + %t725 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t726 = load { ptr, i64, i64 }, ptr %t725 + %t727 = call i64 @finch.gen.findTemplate(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t726, { ptr, i64, i64 } { ptr @.str.2327, i64 0, i64 0 }, i1 true) + %t728 = icmp slt i64 %t727, 0 + br label %logic.rend3737 +logic.rend3737: + br label %logic.end3734 +logic.end3734: + %t729 = phi i1 [ false, %logic.from3732 ], [ %t728, %logic.rend3737 ] + br i1 %t729, label %then3738, label %endif3740 +then3738: + %t730 = load ptr, ptr %a1 + %t731 = load %S.ast.Node, ptr %a686 + %t732 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t733 = load { ptr, i64, i64 }, ptr %t732 + store { ptr, i64, i64 } { ptr @.str.2328, i64 34, i64 0 }, ptr %a735 + store { ptr, i64, i64 } %t733, ptr %a736 + call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) + %t737 = load { ptr, i64, i64 }, ptr %a734 + store { ptr, i64, i64 } %t737, ptr %a739 + store { ptr, i64, i64 } { ptr @.str.2329, i64 53, i64 0 }, ptr %a740 + call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) + store { ptr, i64, i64 } %t737, ptr %a741 + call void @finch_str_drop(ptr %a741) + %t742 = load { ptr, i64, i64 }, ptr %a738 + call void @finch.gen.fail(ptr %t730, %S.ast.Node %t731, { ptr, i64, i64 } %t742) + store { ptr, i64, i64 } %t742, ptr %a743 + call void @finch_str_drop(ptr %a743) + br label %endif3740 +endif3740: + %t744 = load ptr, ptr %a1 + %t745 = icmp eq ptr %t744, null + br i1 %t745, label %panic3741, label %ok3742 +panic3741: + call void @finch_panic(ptr @.str.2330, i64 1584, ptr @.str.2331) + unreachable +ok3742: + %t746 = getelementptr inbounds %S.gen.Gen, ptr %t744, i32 0, i32 17 + %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i32 0, i32 1 + %t748 = load ptr, ptr %a1 + %t749 = icmp eq ptr %t748, null + br i1 %t749, label %panic3743, label %ok3744 +panic3743: + call void @finch_panic(ptr @.str.2332, i64 1584, ptr @.str.2333) + unreachable +ok3744: + %t750 = getelementptr inbounds %S.gen.Gen, ptr %t748, i32 0, i32 14 + %t751 = load { ptr, i64, i64 }, ptr %t750 + store { ptr, i64, i64 } %t751, ptr %a752 + call void @finch_str_copy(ptr %a753, ptr %a752) + %t754 = load { ptr, i64, i64 }, ptr %a753 + %t755 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t754, 0 + %t756 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t757 = load { ptr, i64, i64 }, ptr %t756 + store { ptr, i64, i64 } %t757, ptr %a758 + call void @finch_str_copy(ptr %a759, ptr %a758) + %t760 = load { ptr, i64, i64 }, ptr %a759 + %t761 = insertvalue %S.gen.Template %t755, { ptr, i64, i64 } %t760, 1 + %t762 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t763 = load { ptr, i64, i64 }, ptr %t762 + store { ptr, i64, i64 } %t763, ptr %a764 + call void @finch_str_copy(ptr %a765, ptr %a764) + %t766 = load { ptr, i64, i64 }, ptr %a765 + %t767 = insertvalue %S.gen.Template %t761, { ptr, i64, i64 } %t766, 2 + %t768 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 3 + %t769 = load { ptr, i64, i64 }, ptr %t768 + store { ptr, i64, i64 } %t769, ptr %a770 + call void @finch.copy.arr_str(ptr %a771, ptr %a770) + %t772 = load { ptr, i64, i64 }, ptr %a771 + %t773 = insertvalue %S.gen.Template %t767, { ptr, i64, i64 } %t772, 3 + %t774 = load i64, ptr %a629 + %t775 = insertvalue %S.gen.Template %t773, i64 %t774, 4 + %t776 = load i64, ptr %a663 + %t777 = insertvalue %S.gen.Template %t775, i64 %t776, 5 + %t778 = load i64, ptr %t747 + %t779 = add i64 %t778, 1 + call void @finch_arr_reserve(ptr %t746, i64 %t779, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) + %t780 = load ptr, ptr %t746 + %t781 = getelementptr inbounds %S.gen.Template, ptr %t780, i64 %t778 + store %S.gen.Template %t777, ptr %t781 + store i64 %t779, ptr %t747 + call void @finch.drop.S_ast_Node(ptr %a686) + br label %for.step3716 +endif3726: + %t782 = load ptr, ptr %a1 + %t783 = icmp eq ptr %t782, null + br i1 %t783, label %panic3745, label %ok3746 +panic3745: + call void @finch_panic(ptr @.str.2334, i64 1587, ptr @.str.2335) + unreachable +ok3746: + %t784 = getelementptr inbounds %S.gen.Gen, ptr %t782, i32 0, i32 14 + %t785 = load { ptr, i64, i64 }, ptr %t784 + store { ptr, i64, i64 } %t785, ptr %a786 + call void @finch_str_copy(ptr %a787, ptr %a786) + %t788 = load { ptr, i64, i64 }, ptr %a787 + store { ptr, i64, i64 } %t788, ptr %a789 + store i1 false, ptr %a790 + %t791 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t792 = getelementptr inbounds { ptr, i64, i64 }, ptr %t791, i32 0, i32 1 + %t793 = load i64, ptr %t792 + %t794 = icmp sgt i64 %t793, 0 + br label %logic.from3747 +logic.from3747: + br i1 %t794, label %logic.rhs3748, label %logic.end3749 +logic.rhs3748: + %t795 = load ptr, ptr %a1 + %t796 = load ptr, ptr %a1 + %t797 = icmp eq ptr %t796, null + br i1 %t797, label %panic3750, label %ok3751 +panic3750: + call void @finch_panic(ptr @.str.2336, i64 1589, ptr @.str.2337) + unreachable +ok3751: + %t798 = getelementptr inbounds %S.gen.Gen, ptr %t796, i32 0, i32 14 + %t799 = load { ptr, i64, i64 }, ptr %t798 + %t800 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t801 = load { ptr, i64, i64 }, ptr %t800 + %t802 = call i64 @finch.gen.findEnum(ptr %t795, { ptr, i64, i64 } %t799, { ptr, i64, i64 } %t801) + %t803 = icmp sge i64 %t802, 0 + br label %logic.rend3752 +logic.rend3752: + br label %logic.end3749 +logic.end3749: + %t804 = phi i1 [ false, %logic.from3747 ], [ %t803, %logic.rend3752 ] + br i1 %t804, label %then3753, label %else3754 +then3753: + store i1 true, ptr %a790 + %t805 = load ptr, ptr %a1 + %t806 = load { ptr, i64, i64 }, ptr %a789 + %t807 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t808 = load { ptr, i64, i64 }, ptr %t807 + %t809 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t810 = load { ptr, i64, i64 }, ptr %t809 + %t811 = call i64 @finch.gen.findMethod(ptr %t805, { ptr, i64, i64 } %t806, { ptr, i64, i64 } %t808, { ptr, i64, i64 } %t810) + %t812 = icmp sge i64 %t811, 0 + br i1 %t812, label %then3756, label %endif3758 +then3756: + %t813 = load ptr, ptr %a1 + %t814 = load %S.ast.Node, ptr %a686 + %t815 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t816 = load { ptr, i64, i64 }, ptr %t815 + store { ptr, i64, i64 } { ptr @.str.2338, i64 11, i64 0 }, ptr %a818 + store { ptr, i64, i64 } %t816, ptr %a819 + call void @finch_str_concat(ptr %a817, ptr %a818, ptr %a819) + %t820 = load { ptr, i64, i64 }, ptr %a817 + store { ptr, i64, i64 } %t820, ptr %a822 + store { ptr, i64, i64 } { ptr @.str.2339, i64 1, i64 0 }, ptr %a823 + call void @finch_str_concat(ptr %a821, ptr %a822, ptr %a823) + store { ptr, i64, i64 } %t820, ptr %a824 + call void @finch_str_drop(ptr %a824) + %t825 = load { ptr, i64, i64 }, ptr %a821 + %t826 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t827 = load { ptr, i64, i64 }, ptr %t826 + store { ptr, i64, i64 } %t825, ptr %a829 + store { ptr, i64, i64 } %t827, ptr %a830 + call void @finch_str_concat(ptr %a828, ptr %a829, ptr %a830) + store { ptr, i64, i64 } %t825, ptr %a831 + call void @finch_str_drop(ptr %a831) + %t832 = load { ptr, i64, i64 }, ptr %a828 + store { ptr, i64, i64 } %t832, ptr %a834 + store { ptr, i64, i64 } { ptr @.str.2340, i64 17, i64 0 }, ptr %a835 + call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) + store { ptr, i64, i64 } %t832, ptr %a836 + call void @finch_str_drop(ptr %a836) + %t837 = load { ptr, i64, i64 }, ptr %a833 + call void @finch.gen.fail(ptr %t813, %S.ast.Node %t814, { ptr, i64, i64 } %t837) + store { ptr, i64, i64 } %t837, ptr %a838 + call void @finch_str_drop(ptr %a838) + br label %endif3758 +endif3758: + br label %endif3755 +else3754: + %t839 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t840 = getelementptr inbounds { ptr, i64, i64 }, ptr %t839, i32 0, i32 1 + %t841 = load i64, ptr %t840 + %t842 = icmp sgt i64 %t841, 0 + br i1 %t842, label %then3759, label %else3760 +then3759: + %t843 = load ptr, ptr %a1 + %t844 = load ptr, ptr %a1 + %t845 = icmp eq ptr %t844, null + br i1 %t845, label %panic3762, label %ok3763 +panic3762: + call void @finch_panic(ptr @.str.2341, i64 1595, ptr @.str.2342) + unreachable +ok3763: + %t846 = getelementptr inbounds %S.gen.Gen, ptr %t844, i32 0, i32 14 + %t847 = load { ptr, i64, i64 }, ptr %t846 + %t848 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t849 = load { ptr, i64, i64 }, ptr %t848 + %t850 = call i64 @finch.gen.findStruct(ptr %t843, { ptr, i64, i64 } %t847, { ptr, i64, i64 } %t849) + store i64 %t850, ptr %a851 + %t852 = load i64, ptr %a851 + %t853 = icmp slt i64 %t852, 0 + br label %logic.from3764 +logic.from3764: + br i1 %t853, label %logic.rhs3765, label %logic.end3766 +logic.rhs3765: + %t854 = load ptr, ptr %a1 + %t855 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t856 = load { ptr, i64, i64 }, ptr %t855 + %t857 = call i64 @finch.gen.findStruct(ptr %t854, { ptr, i64, i64 } { ptr @.str.2343, i64 1, i64 0 }, { ptr, i64, i64 } %t856) + %t858 = icmp sge i64 %t857, 0 + br label %logic.rend3767 +logic.rend3767: + br label %logic.end3766 +logic.end3766: + %t859 = phi i1 [ false, %logic.from3764 ], [ %t858, %logic.rend3767 ] + br i1 %t859, label %then3768, label %endif3770 +then3768: + %t860 = load ptr, ptr %a1 + %t861 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t862 = load { ptr, i64, i64 }, ptr %t861 + %t863 = call i64 @finch.gen.findStruct(ptr %t860, { ptr, i64, i64 } { ptr @.str.2344, i64 1, i64 0 }, { ptr, i64, i64 } %t862) + store i64 %t863, ptr %a851 + %t864 = load { ptr, i64, i64 }, ptr %a789 + store { ptr, i64, i64 } { ptr @.str.2345, i64 1, i64 0 }, ptr %a789 + store { ptr, i64, i64 } %t864, ptr %a865 + call void @finch_str_drop(ptr %a865) + br label %endif3770 +endif3770: + %t866 = load i64, ptr %a851 + %t867 = icmp slt i64 %t866, 0 + br i1 %t867, label %then3771, label %endif3773 +then3771: + %t868 = load ptr, ptr %a1 + %t869 = load %S.ast.Node, ptr %a686 + %t870 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t871 = load { ptr, i64, i64 }, ptr %t870 + store { ptr, i64, i64 } { ptr @.str.2346, i64 26, i64 0 }, ptr %a873 + store { ptr, i64, i64 } %t871, ptr %a874 + call void @finch_str_concat(ptr %a872, ptr %a873, ptr %a874) + %t875 = load { ptr, i64, i64 }, ptr %a872 + store { ptr, i64, i64 } %t875, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.2347, i64 76, i64 0 }, ptr %a878 + call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878) + store { ptr, i64, i64 } %t875, ptr %a879 + call void @finch_str_drop(ptr %a879) + %t880 = load { ptr, i64, i64 }, ptr %a876 + call void @finch.gen.fail(ptr %t868, %S.ast.Node %t869, { ptr, i64, i64 } %t880) + store { ptr, i64, i64 } %t880, ptr %a881 + call void @finch_str_drop(ptr %a881) + br label %endif3773 +endif3773: + %t882 = load ptr, ptr %a1 + %t883 = load { ptr, i64, i64 }, ptr %a789 + %t884 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t885 = load { ptr, i64, i64 }, ptr %t884 + %t886 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t887 = load { ptr, i64, i64 }, ptr %t886 + %t888 = call i64 @finch.gen.findMethod(ptr %t882, { ptr, i64, i64 } %t883, { ptr, i64, i64 } %t885, { ptr, i64, i64 } %t887) + %t889 = icmp sge i64 %t888, 0 + br i1 %t889, label %then3774, label %endif3776 +then3774: + %t890 = load ptr, ptr %a1 + %t891 = load %S.ast.Node, ptr %a686 + %t892 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t893 = load { ptr, i64, i64 }, ptr %t892 + store { ptr, i64, i64 } { ptr @.str.2348, i64 11, i64 0 }, ptr %a895 + store { ptr, i64, i64 } %t893, ptr %a896 + call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) + %t897 = load { ptr, i64, i64 }, ptr %a894 + store { ptr, i64, i64 } %t897, ptr %a899 + store { ptr, i64, i64 } { ptr @.str.2349, i64 1, i64 0 }, ptr %a900 + call void @finch_str_concat(ptr %a898, ptr %a899, ptr %a900) + store { ptr, i64, i64 } %t897, ptr %a901 + call void @finch_str_drop(ptr %a901) + %t902 = load { ptr, i64, i64 }, ptr %a898 + %t903 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t904 = load { ptr, i64, i64 }, ptr %t903 + store { ptr, i64, i64 } %t902, ptr %a906 + store { ptr, i64, i64 } %t904, ptr %a907 + call void @finch_str_concat(ptr %a905, ptr %a906, ptr %a907) + store { ptr, i64, i64 } %t902, ptr %a908 + call void @finch_str_drop(ptr %a908) + %t909 = load { ptr, i64, i64 }, ptr %a905 + store { ptr, i64, i64 } %t909, ptr %a911 + store { ptr, i64, i64 } { ptr @.str.2350, i64 17, i64 0 }, ptr %a912 + call void @finch_str_concat(ptr %a910, ptr %a911, ptr %a912) + store { ptr, i64, i64 } %t909, ptr %a913 + call void @finch_str_drop(ptr %a913) + %t914 = load { ptr, i64, i64 }, ptr %a910 + call void @finch.gen.fail(ptr %t890, %S.ast.Node %t891, { ptr, i64, i64 } %t914) + store { ptr, i64, i64 } %t914, ptr %a915 + call void @finch_str_drop(ptr %a915) + br label %endif3776 +endif3776: + %t916 = load ptr, ptr %a1 + %t917 = icmp eq ptr %t916, null + br i1 %t917, label %panic3777, label %ok3778 +panic3777: + call void @finch_panic(ptr @.str.2351, i64 1606, ptr @.str.2352) + unreachable +ok3778: + %t918 = getelementptr inbounds %S.gen.Gen, ptr %t916, i32 0, i32 16 + %t919 = load i64, ptr %a851 + %t920 = load { ptr, i64, i64 }, ptr %t918 + %t921 = extractvalue { ptr, i64, i64 } %t920, 1 + %t922 = icmp uge i64 %t919, %t921 + br i1 %t922, label %range3779, label %inrange3780 +range3779: + call void @finch_panic_index(ptr @.str.2353, i64 1606, i64 %t919, i64 %t921) + unreachable +inrange3780: + %t923 = extractvalue { ptr, i64, i64 } %t920, 0 + %t924 = getelementptr inbounds %S.gen.StructDef, ptr %t923, i64 %t919 + %t925 = getelementptr inbounds %S.gen.StructDef, ptr %t924, i32 0, i32 11 + %t926 = getelementptr inbounds { ptr, i64, i64 }, ptr %t925, i32 0, i32 1 + %t927 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t928 = load { ptr, i64, i64 }, ptr %t927 + store i64 -1, ptr %a929 + %t930 = load i64, ptr %t926 + %t931 = load ptr, ptr %t925 + store i64 0, ptr %a932 + br label %find.cond3781 +find.cond3781: + %t933 = load i64, ptr %a932 + %t934 = icmp slt i64 %t933, %t930 + br i1 %t934, label %find.body3782, label %find.end3785 +find.body3782: + %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t931, i64 %t933 + %t936 = load { ptr, i64, i64 }, ptr %t935 + store { ptr, i64, i64 } %t936, ptr %a937 + store { ptr, i64, i64 } %t928, ptr %a938 + %t939 = call i32 @finch_str_eq(ptr %a937, ptr %a938) + %t940 = icmp ne i32 %t939, 0 + br i1 %t940, label %find.hit3783, label %find.next3784 +find.hit3783: + store i64 %t933, ptr %a929 + br label %find.end3785 +find.next3784: + %t941 = add i64 %t933, 1 + store i64 %t941, ptr %a932 + br label %find.cond3781 +find.end3785: + %t942 = load i64, ptr %a929 + %t943 = icmp sge i64 %t942, 0 + br i1 %t943, label %then3786, label %endif3788 +then3786: + %t944 = load ptr, ptr %a1 + %t945 = load %S.ast.Node, ptr %a686 + %t946 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t947 = load { ptr, i64, i64 }, ptr %t946 + store { ptr, i64, i64 } { ptr @.str.2354, i64 11, i64 0 }, ptr %a949 + store { ptr, i64, i64 } %t947, ptr %a950 + call void @finch_str_concat(ptr %a948, ptr %a949, ptr %a950) + %t951 = load { ptr, i64, i64 }, ptr %a948 + store { ptr, i64, i64 } %t951, ptr %a953 + store { ptr, i64, i64 } { ptr @.str.2355, i64 28, i64 0 }, ptr %a954 + call void @finch_str_concat(ptr %a952, ptr %a953, ptr %a954) + store { ptr, i64, i64 } %t951, ptr %a955 + call void @finch_str_drop(ptr %a955) + %t956 = load { ptr, i64, i64 }, ptr %a952 + %t957 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t958 = load { ptr, i64, i64 }, ptr %t957 + store { ptr, i64, i64 } %t956, ptr %a960 + store { ptr, i64, i64 } %t958, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t956, ptr %a962 + call void @finch_str_drop(ptr %a962) + %t963 = load { ptr, i64, i64 }, ptr %a959 + store { ptr, i64, i64 } %t963, ptr %a965 + store { ptr, i64, i64 } { ptr @.str.2356, i64 1, i64 0 }, ptr %a966 + call void @finch_str_concat(ptr %a964, ptr %a965, ptr %a966) + store { ptr, i64, i64 } %t963, ptr %a967 + call void @finch_str_drop(ptr %a967) + %t968 = load { ptr, i64, i64 }, ptr %a964 + call void @finch.gen.fail(ptr %t944, %S.ast.Node %t945, { ptr, i64, i64 } %t968) + store { ptr, i64, i64 } %t968, ptr %a969 + call void @finch_str_drop(ptr %a969) + br label %endif3788 +endif3788: + br label %endif3761 +else3760: + %t970 = load ptr, ptr %a1 + %t971 = load ptr, ptr %a1 + %t972 = icmp eq ptr %t971, null + br i1 %t972, label %panic3789, label %ok3790 +panic3789: + call void @finch_panic(ptr @.str.2357, i64 1610, ptr @.str.2358) + unreachable +ok3790: + %t973 = getelementptr inbounds %S.gen.Gen, ptr %t971, i32 0, i32 14 + %t974 = load { ptr, i64, i64 }, ptr %t973 + %t975 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t976 = load { ptr, i64, i64 }, ptr %t975 + %t977 = call i64 @finch.gen.findFn(ptr %t970, { ptr, i64, i64 } %t974, { ptr, i64, i64 } %t976) + %t978 = icmp sge i64 %t977, 0 + br i1 %t978, label %then3791, label %endif3793 +then3791: + %t979 = load ptr, ptr %a1 + %t980 = load %S.ast.Node, ptr %a686 + %t981 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t982 = load { ptr, i64, i64 }, ptr %t981 + store { ptr, i64, i64 } { ptr @.str.2359, i64 10, i64 0 }, ptr %a984 + store { ptr, i64, i64 } %t982, ptr %a985 + call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) + %t986 = load { ptr, i64, i64 }, ptr %a983 + store { ptr, i64, i64 } %t986, ptr %a988 + store { ptr, i64, i64 } { ptr @.str.2360, i64 18, i64 0 }, ptr %a989 + call void @finch_str_concat(ptr %a987, ptr %a988, ptr %a989) + store { ptr, i64, i64 } %t986, ptr %a990 + call void @finch_str_drop(ptr %a990) + %t991 = load { ptr, i64, i64 }, ptr %a987 + call void @finch.gen.fail(ptr %t979, %S.ast.Node %t980, { ptr, i64, i64 } %t991) + store { ptr, i64, i64 } %t991, ptr %a992 + call void @finch_str_drop(ptr %a992) + br label %endif3793 +endif3793: + %t993 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t994 = load { ptr, i64, i64 }, ptr %t993 + %t995 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t994) + br i1 %t995, label %then3794, label %endif3796 +then3794: + %t996 = load ptr, ptr %a1 + %t997 = load %S.ast.Node, ptr %a686 + %t998 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t999 = load { ptr, i64, i64 }, ptr %t998 + store { ptr, i64, i64 } { ptr @.str.2361, i64 1, i64 0 }, ptr %a1001 + store { ptr, i64, i64 } %t999, ptr %a1002 + call void @finch_str_concat(ptr %a1000, ptr %a1001, ptr %a1002) + %t1003 = load { ptr, i64, i64 }, ptr %a1000 + store { ptr, i64, i64 } %t1003, ptr %a1005 + store { ptr, i64, i64 } { ptr @.str.2362, i64 43, i64 0 }, ptr %a1006 + call void @finch_str_concat(ptr %a1004, ptr %a1005, ptr %a1006) + store { ptr, i64, i64 } %t1003, ptr %a1007 + call void @finch_str_drop(ptr %a1007) + %t1008 = load { ptr, i64, i64 }, ptr %a1004 + call void @finch.gen.fail(ptr %t996, %S.ast.Node %t997, { ptr, i64, i64 } %t1008) + store { ptr, i64, i64 } %t1008, ptr %a1009 + call void @finch_str_drop(ptr %a1009) + br label %endif3796 +endif3796: + br label %endif3761 +endif3761: + br label %endif3755 +endif3755: + %t1010 = load ptr, ptr %a1 + %t1011 = icmp eq ptr %t1010, null + br i1 %t1011, label %panic3797, label %ok3798 +panic3797: + call void @finch_panic(ptr @.str.2363, i64 1617, ptr @.str.2364) + unreachable +ok3798: + %t1012 = getelementptr inbounds %S.gen.Gen, ptr %t1010, i32 0, i32 14 + %t1013 = load { ptr, i64, i64 }, ptr %t1012 + store { ptr, i64, i64 } %t1013, ptr %a1014 + call void @finch_str_copy(ptr %a1015, ptr %a1014) + %t1016 = load { ptr, i64, i64 }, ptr %a1015 + %t1017 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t1016, 0 + %t1018 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t1019 = load { ptr, i64, i64 }, ptr %t1018 + store { ptr, i64, i64 } %t1019, ptr %a1020 + call void @finch_str_copy(ptr %a1021, ptr %a1020) + %t1022 = load { ptr, i64, i64 }, ptr %a1021 + %t1023 = insertvalue %S.gen.FnSig %t1017, { ptr, i64, i64 } %t1022, 1 + %t1024 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1025 = load { ptr, i64, i64 }, ptr %t1024 + store { ptr, i64, i64 } %t1025, ptr %a1026 + call void @finch_str_copy(ptr %a1027, ptr %a1026) + %t1028 = load { ptr, i64, i64 }, ptr %a1027 + %t1029 = insertvalue %S.gen.FnSig %t1023, { ptr, i64, i64 } %t1028, 2 + %t1030 = load { ptr, i64, i64 }, ptr %a789 + store { ptr, i64, i64 } %t1030, ptr %a1031 + call void @finch_str_copy(ptr %a1032, ptr %a1031) + %t1033 = load { ptr, i64, i64 }, ptr %a1032 + %t1034 = insertvalue %S.gen.FnSig %t1029, { ptr, i64, i64 } %t1033, 3 + %t1035 = load i1, ptr %a790 + %t1036 = insertvalue %S.gen.FnSig %t1034, i1 %t1035, 4 + %t1037 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 + %t1038 = load i1, ptr %t1037 + %t1039 = insertvalue %S.gen.FnSig %t1036, i1 %t1038, 5 + %t1040 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 7 + %t1041 = load i1, ptr %t1040 + %t1042 = insertvalue %S.gen.FnSig %t1039, i1 %t1041, 9 + %t1043 = load i64, ptr %a629 + %t1044 = insertvalue %S.gen.FnSig %t1042, i64 %t1043, 16 + %t1045 = load i64, ptr %a663 + %t1046 = insertvalue %S.gen.FnSig %t1044, i64 %t1045, 17 + store %S.gen.FnSig %t1046, ptr %a1047 + %t1048 = load ptr, ptr %a1 + %t1049 = icmp eq ptr %t1048, null + br i1 %t1049, label %panic3799, label %ok3800 +panic3799: + call void @finch_panic(ptr @.str.2366, i64 1618, ptr @.str.2367) + unreachable +ok3800: + %t1050 = getelementptr inbounds %S.gen.Gen, ptr %t1048, i32 0, i32 14 + %t1051 = load { ptr, i64, i64 }, ptr %t1050 + %t1052 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1051) + store { ptr, i64, i64 } { ptr @.str.2365, i64 7, i64 0 }, ptr %a1054 + store { ptr, i64, i64 } %t1052, ptr %a1055 + call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) + store { ptr, i64, i64 } %t1052, ptr %a1056 + call void @finch_str_drop(ptr %a1056) + %t1057 = load { ptr, i64, i64 }, ptr %a1053 + store { ptr, i64, i64 } %t1057, ptr %a1059 + store { ptr, i64, i64 } { ptr @.str.2368, i64 1, i64 0 }, ptr %a1060 + call void @finch_str_concat(ptr %a1058, ptr %a1059, ptr %a1060) + store { ptr, i64, i64 } %t1057, ptr %a1061 + call void @finch_str_drop(ptr %a1061) + %t1062 = load { ptr, i64, i64 }, ptr %a1058 + %t1063 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t1064 = load { ptr, i64, i64 }, ptr %t1063 + store { ptr, i64, i64 } %t1062, ptr %a1066 + store { ptr, i64, i64 } %t1064, ptr %a1067 + call void @finch_str_concat(ptr %a1065, ptr %a1066, ptr %a1067) + store { ptr, i64, i64 } %t1062, ptr %a1068 + call void @finch_str_drop(ptr %a1068) + %t1069 = load { ptr, i64, i64 }, ptr %a1065 + %t1070 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 11 + %t1071 = load { ptr, i64, i64 }, ptr %t1070 + store { ptr, i64, i64 } %t1069, ptr %t1070 + store { ptr, i64, i64 } %t1071, ptr %a1072 + call void @finch_str_drop(ptr %a1072) + %t1073 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1074 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1073, i32 0, i32 1 + %t1075 = load i64, ptr %t1074 + %t1076 = icmp sgt i64 %t1075, 0 + br i1 %t1076, label %then3801, label %endif3803 +then3801: + %t1077 = load ptr, ptr %a1 + %t1078 = icmp eq ptr %t1077, null + br i1 %t1078, label %panic3804, label %ok3805 +panic3804: + call void @finch_panic(ptr @.str.2370, i64 1620, ptr @.str.2371) + unreachable +ok3805: + %t1079 = getelementptr inbounds %S.gen.Gen, ptr %t1077, i32 0, i32 14 + %t1080 = load { ptr, i64, i64 }, ptr %t1079 + %t1081 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1080) + store { ptr, i64, i64 } { ptr @.str.2369, i64 7, i64 0 }, ptr %a1083 + store { ptr, i64, i64 } %t1081, ptr %a1084 + call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084) + store { ptr, i64, i64 } %t1081, ptr %a1085 + call void @finch_str_drop(ptr %a1085) + %t1086 = load { ptr, i64, i64 }, ptr %a1082 + store { ptr, i64, i64 } %t1086, ptr %a1088 + store { ptr, i64, i64 } { ptr @.str.2372, i64 1, i64 0 }, ptr %a1089 + call void @finch_str_concat(ptr %a1087, ptr %a1088, ptr %a1089) + store { ptr, i64, i64 } %t1086, ptr %a1090 + call void @finch_str_drop(ptr %a1090) + %t1091 = load { ptr, i64, i64 }, ptr %a1087 + %t1092 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1093 = load { ptr, i64, i64 }, ptr %t1092 + store { ptr, i64, i64 } %t1091, ptr %a1095 + store { ptr, i64, i64 } %t1093, ptr %a1096 + call void @finch_str_concat(ptr %a1094, ptr %a1095, ptr %a1096) + store { ptr, i64, i64 } %t1091, ptr %a1097 + call void @finch_str_drop(ptr %a1097) + %t1098 = load { ptr, i64, i64 }, ptr %a1094 + store { ptr, i64, i64 } %t1098, ptr %a1100 + store { ptr, i64, i64 } { ptr @.str.2373, i64 1, i64 0 }, ptr %a1101 + call void @finch_str_concat(ptr %a1099, ptr %a1100, ptr %a1101) + store { ptr, i64, i64 } %t1098, ptr %a1102 + call void @finch_str_drop(ptr %a1102) + %t1103 = load { ptr, i64, i64 }, ptr %a1099 + %t1104 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t1105 = load { ptr, i64, i64 }, ptr %t1104 + store { ptr, i64, i64 } %t1103, ptr %a1107 + store { ptr, i64, i64 } %t1105, ptr %a1108 + call void @finch_str_concat(ptr %a1106, ptr %a1107, ptr %a1108) + store { ptr, i64, i64 } %t1103, ptr %a1109 + call void @finch_str_drop(ptr %a1109) + %t1110 = load { ptr, i64, i64 }, ptr %a1106 + %t1111 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 11 + %t1112 = load { ptr, i64, i64 }, ptr %t1111 + store { ptr, i64, i64 } %t1110, ptr %t1111 + store { ptr, i64, i64 } %t1112, ptr %a1113 + call void @finch_str_drop(ptr %a1113) + br label %endif3803 +endif3803: + %t1114 = load ptr, ptr %a1 + %t1115 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 5 + %t1116 = load %S.ast.Type, ptr %t1115 + %t1117 = load %S.ast.Node, ptr %a686 + %t1118 = call %S.ast.Type @finch.gen.resolve(ptr %t1114, %S.ast.Type %t1116, %S.ast.Node %t1117) + %t1119 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 12 + %t1120 = load %S.ast.Type, ptr %t1119 + store %S.ast.Type %t1118, ptr %t1119 + store %S.ast.Type %t1120, ptr %a1121 + call void @finch.drop.S_ast_Type(ptr %a1121) + %t1122 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1122, i32 0, i32 1 + %t1124 = load i64, ptr %t1123 + %t1125 = sub i64 %t1124, 1 + store i64 0, ptr %a1126 + br label %for.cond3806 +for.cond3806: + %t1127 = load i64, ptr %a1126 + %t1128 = icmp slt i64 %t1127, %t1125 + br i1 %t1128, label %for.body3807, label %for.end3809 +for.body3807: + %t1129 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1130 = load i64, ptr %a1126 + %t1131 = load { ptr, i64, i64 }, ptr %t1129 + %t1132 = extractvalue { ptr, i64, i64 } %t1131, 1 + %t1133 = icmp uge i64 %t1130, %t1132 + br i1 %t1133, label %range3810, label %inrange3811 +range3810: + call void @finch_panic_index(ptr @.str.2374, i64 1624, i64 %t1130, i64 %t1132) + unreachable +inrange3811: + %t1134 = extractvalue { ptr, i64, i64 } %t1131, 0 + %t1135 = getelementptr inbounds %S.ast.Node, ptr %t1134, i64 %t1130 + %t1136 = getelementptr inbounds %S.ast.Node, ptr %t1135, i32 0, i32 1 + %t1137 = load { ptr, i64, i64 }, ptr %t1136 + store { ptr, i64, i64 } %t1137, ptr %a1138 + store { ptr, i64, i64 } { ptr @.str.2375, i64 4, i64 0 }, ptr %a1139 + %t1140 = call i32 @finch_str_eq(ptr %a1138, ptr %a1139) + %t1141 = icmp ne i32 %t1140, 0 + br label %logic.from3812 +logic.from3812: + br i1 %t1141, label %logic.rhs3813, label %logic.end3814 +logic.rhs3813: + %t1142 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1142, i32 0, i32 1 + %t1144 = load i64, ptr %t1143 + %t1145 = icmp sgt i64 %t1144, 0 + br label %logic.rend3815 +logic.rend3815: + br label %logic.end3814 +logic.end3814: + %t1146 = phi i1 [ false, %logic.from3812 ], [ %t1145, %logic.rend3815 ] + br i1 %t1146, label %then3816, label %endif3818 +then3816: + %t1147 = load ptr, ptr %a1 + %t1148 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1149 = load i64, ptr %a1126 + %t1150 = load { ptr, i64, i64 }, ptr %t1148 + %t1151 = extractvalue { ptr, i64, i64 } %t1150, 1 + %t1152 = icmp uge i64 %t1149, %t1151 + br i1 %t1152, label %range3819, label %inrange3820 +range3819: + call void @finch_panic_index(ptr @.str.2376, i64 1625, i64 %t1149, i64 %t1151) + unreachable +inrange3820: + %t1153 = extractvalue { ptr, i64, i64 } %t1150, 0 + %t1154 = getelementptr inbounds %S.ast.Node, ptr %t1153, i64 %t1149 + %t1155 = load %S.ast.Node, ptr %t1154 + %t1156 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1157 = load { ptr, i64, i64 }, ptr %t1156 + store { ptr, i64, i64 } { ptr @.str.2377, i64 22, i64 0 }, ptr %a1159 + store { ptr, i64, i64 } %t1157, ptr %a1160 + call void @finch_str_concat(ptr %a1158, ptr %a1159, ptr %a1160) + %t1161 = load { ptr, i64, i64 }, ptr %a1158 + store { ptr, i64, i64 } %t1161, ptr %a1163 + store { ptr, i64, i64 } { ptr @.str.2378, i64 24, i64 0 }, ptr %a1164 + call void @finch_str_concat(ptr %a1162, ptr %a1163, ptr %a1164) + store { ptr, i64, i64 } %t1161, ptr %a1165 + call void @finch_str_drop(ptr %a1165) + %t1166 = load { ptr, i64, i64 }, ptr %a1162 + call void @finch.gen.fail(ptr %t1147, %S.ast.Node %t1155, { ptr, i64, i64 } %t1166) + store { ptr, i64, i64 } %t1166, ptr %a1167 + call void @finch_str_drop(ptr %a1167) + br label %endif3818 +endif3818: + %t1168 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 13 + %t1169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1168, i32 0, i32 1 + %t1170 = load ptr, ptr %a1 + %t1171 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1172 = load i64, ptr %a1126 + %t1173 = load { ptr, i64, i64 }, ptr %t1171 + %t1174 = extractvalue { ptr, i64, i64 } %t1173, 1 + %t1175 = icmp uge i64 %t1172, %t1174 + br i1 %t1175, label %range3821, label %inrange3822 +range3821: + call void @finch_panic_index(ptr @.str.2379, i64 1627, i64 %t1172, i64 %t1174) + unreachable +inrange3822: + %t1176 = extractvalue { ptr, i64, i64 } %t1173, 0 + %t1177 = getelementptr inbounds %S.ast.Node, ptr %t1176, i64 %t1172 + %t1178 = getelementptr inbounds %S.ast.Node, ptr %t1177, i32 0, i32 5 + %t1179 = load %S.ast.Type, ptr %t1178 + %t1180 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1181 = load i64, ptr %a1126 + %t1182 = load { ptr, i64, i64 }, ptr %t1180 + %t1183 = extractvalue { ptr, i64, i64 } %t1182, 1 + %t1184 = icmp uge i64 %t1181, %t1183 + br i1 %t1184, label %range3823, label %inrange3824 +range3823: + call void @finch_panic_index(ptr @.str.2380, i64 1627, i64 %t1181, i64 %t1183) + unreachable +inrange3824: + %t1185 = extractvalue { ptr, i64, i64 } %t1182, 0 + %t1186 = getelementptr inbounds %S.ast.Node, ptr %t1185, i64 %t1181 + %t1187 = load %S.ast.Node, ptr %t1186 + %t1188 = call %S.ast.Type @finch.gen.resolve(ptr %t1170, %S.ast.Type %t1179, %S.ast.Node %t1187) + %t1189 = load i64, ptr %t1169 + %t1190 = add i64 %t1189, 1 + call void @finch_arr_reserve(ptr %t1168, i64 %t1190, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t1191 = load ptr, ptr %t1168 + %t1192 = getelementptr inbounds %S.ast.Type, ptr %t1191, i64 %t1189 + store %S.ast.Type %t1188, ptr %t1192 + store i64 %t1190, ptr %t1169 + %t1193 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 14 + %t1194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1193, i32 0, i32 1 + %t1195 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1196 = load i64, ptr %a1126 + %t1197 = load { ptr, i64, i64 }, ptr %t1195 + %t1198 = extractvalue { ptr, i64, i64 } %t1197, 1 + %t1199 = icmp uge i64 %t1196, %t1198 + br i1 %t1199, label %range3825, label %inrange3826 +range3825: + call void @finch_panic_index(ptr @.str.2381, i64 1628, i64 %t1196, i64 %t1198) + unreachable +inrange3826: + %t1200 = extractvalue { ptr, i64, i64 } %t1197, 0 + %t1201 = getelementptr inbounds %S.ast.Node, ptr %t1200, i64 %t1196 + %t1202 = getelementptr inbounds %S.ast.Node, ptr %t1201, i32 0, i32 1 + %t1203 = load { ptr, i64, i64 }, ptr %t1202 + store { ptr, i64, i64 } %t1203, ptr %a1204 + call void @finch_str_copy(ptr %a1205, ptr %a1204) + %t1206 = load { ptr, i64, i64 }, ptr %a1205 + %t1207 = load i64, ptr %t1194 + %t1208 = add i64 %t1207, 1 + call void @finch_arr_reserve(ptr %t1193, i64 %t1208, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1209 = load ptr, ptr %t1193 + %t1210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1209, i64 %t1207 + store { ptr, i64, i64 } %t1206, ptr %t1210 + store i64 %t1208, ptr %t1194 + br label %for.step3808 +for.step3808: + %t1211 = load i64, ptr %a1126 + %t1212 = add i64 %t1211, 1 + store i64 %t1212, ptr %a1126 + br label %for.cond3806 +for.end3809: + %t1213 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 + %t1214 = load i1, ptr %t1213 + br i1 %t1214, label %then3827, label %endif3829 +then3827: + %t1215 = load ptr, ptr %a1 + %t1216 = load %S.ast.Node, ptr %a686 + %t1217 = load %S.gen.FnSig, ptr %a1047 + call void @finch.gen.checkExport(ptr %t1215, %S.ast.Node %t1216, %S.gen.FnSig %t1217) + br label %endif3829 +endif3829: + %t1218 = load ptr, ptr %a1 + %t1219 = icmp eq ptr %t1218, null + br i1 %t1219, label %panic3830, label %ok3831 +panic3830: + call void @finch_panic(ptr @.str.2382, i64 1633, ptr @.str.2383) + unreachable +ok3831: + %t1220 = getelementptr inbounds %S.gen.Gen, ptr %t1218, i32 0, i32 15 + %t1221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1220, i32 0, i32 1 + %t1222 = load %S.gen.FnSig, ptr %a1047 + store %S.gen.FnSig %t1222, ptr %a1223 + call void @finch.copy.S_gen_FnSig(ptr %a1224, ptr %a1223) + %t1225 = load %S.gen.FnSig, ptr %a1224 + %t1226 = load i64, ptr %t1221 + %t1227 = add i64 %t1226, 1 + call void @finch_arr_reserve(ptr %t1220, i64 %t1227, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) + %t1228 = load ptr, ptr %t1220 + %t1229 = getelementptr inbounds %S.gen.FnSig, ptr %t1228, i64 %t1226 + store %S.gen.FnSig %t1225, ptr %t1229 + store i64 %t1227, ptr %t1221 + call void @finch.drop.S_gen_FnSig(ptr %a1047) + call void @finch_str_drop(ptr %a789) + call void @finch.drop.S_ast_Node(ptr %a686) + br label %for.step3716 +for.step3716: + %t1230 = load i64, ptr %a663 + %t1231 = add i64 %t1230, 1 + store i64 %t1231, ptr %a663 + br label %for.cond3714 +for.end3717: + br label %for.step3702 +for.step3702: + %t1232 = load i64, ptr %a629 + %t1233 = add i64 %t1232, 1 + store i64 %t1233, ptr %a629 + br label %for.cond3700 +for.end3703: + store i1 true, ptr %a1234 + br label %while.cond3832 +while.cond3832: + %t1235 = load i1, ptr %a1234 + br i1 %t1235, label %while.body3833, label %while.end3834 +while.body3833: + store i1 false, ptr %a1234 + %t1236 = load ptr, ptr %a1 + %t1237 = icmp eq ptr %t1236, null + br i1 %t1237, label %panic3835, label %ok3836 +panic3835: + call void @finch_panic(ptr @.str.2384, i64 1641, ptr @.str.2385) + unreachable +ok3836: + %t1238 = getelementptr inbounds %S.gen.Gen, ptr %t1236, i32 0, i32 15 + %t1239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1238, i32 0, i32 1 + %t1240 = load i64, ptr %t1239 + store i64 0, ptr %a1241 + br label %for.cond3837 +for.cond3837: + %t1242 = load i64, ptr %a1241 + %t1243 = icmp slt i64 %t1242, %t1240 + br i1 %t1243, label %for.body3838, label %for.end3840 +for.body3838: + %t1244 = load ptr, ptr %a1 + %t1245 = icmp eq ptr %t1244, null + br i1 %t1245, label %panic3841, label %ok3842 +panic3841: + call void @finch_panic(ptr @.str.2386, i64 1642, ptr @.str.2387) + unreachable +ok3842: + %t1246 = getelementptr inbounds %S.gen.Gen, ptr %t1244, i32 0, i32 15 + %t1247 = load i64, ptr %a1241 + %t1248 = load { ptr, i64, i64 }, ptr %t1246 + %t1249 = extractvalue { ptr, i64, i64 } %t1248, 1 + %t1250 = icmp uge i64 %t1247, %t1249 + br i1 %t1250, label %range3843, label %inrange3844 +range3843: + call void @finch_panic_index(ptr @.str.2388, i64 1642, i64 %t1247, i64 %t1249) + unreachable +inrange3844: + %t1251 = extractvalue { ptr, i64, i64 } %t1248, 0 + %t1252 = getelementptr inbounds %S.gen.FnSig, ptr %t1251, i64 %t1247 + %t1253 = getelementptr inbounds %S.gen.FnSig, ptr %t1252, i32 0, i32 2 + %t1254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1253, i32 0, i32 1 + %t1255 = load i64, ptr %t1254 + %t1256 = icmp sgt i64 %t1255, 0 + br label %logic.from3845 +logic.from3845: + br i1 %t1256, label %logic.rhs3846, label %logic.end3847 +logic.rhs3846: + %t1257 = load ptr, ptr %a1 + %t1258 = icmp eq ptr %t1257, null + br i1 %t1258, label %panic3848, label %ok3849 +panic3848: + call void @finch_panic(ptr @.str.2389, i64 1642, ptr @.str.2390) + unreachable +ok3849: + %t1259 = getelementptr inbounds %S.gen.Gen, ptr %t1257, i32 0, i32 15 + %t1260 = load i64, ptr %a1241 + %t1261 = load { ptr, i64, i64 }, ptr %t1259 + %t1262 = extractvalue { ptr, i64, i64 } %t1261, 1 + %t1263 = icmp uge i64 %t1260, %t1262 + br i1 %t1263, label %range3850, label %inrange3851 +range3850: + call void @finch_panic_index(ptr @.str.2391, i64 1642, i64 %t1260, i64 %t1262) + unreachable +inrange3851: + %t1264 = extractvalue { ptr, i64, i64 } %t1261, 0 + %t1265 = getelementptr inbounds %S.gen.FnSig, ptr %t1264, i64 %t1260 + %t1266 = getelementptr inbounds %S.gen.FnSig, ptr %t1265, i32 0, i32 10 + %t1267 = load i1, ptr %t1266 + %t1268 = xor i1 %t1267, true + br label %logic.rend3852 +logic.rend3852: + br label %logic.end3847 +logic.end3847: + %t1269 = phi i1 [ false, %logic.from3845 ], [ %t1268, %logic.rend3852 ] + br i1 %t1269, label %then3853, label %endif3855 +then3853: + %t1270 = load ptr, ptr %a1 + %t1271 = icmp eq ptr %t1270, null + br i1 %t1271, label %panic3856, label %ok3857 +panic3856: + call void @finch_panic(ptr @.str.2392, i64 1643, ptr @.str.2393) + unreachable +ok3857: + %t1272 = getelementptr inbounds %S.gen.Gen, ptr %t1270, i32 0, i32 0 + %t1273 = load ptr, ptr %a1 + %t1274 = icmp eq ptr %t1273, null + br i1 %t1274, label %panic3858, label %ok3859 +panic3858: + call void @finch_panic(ptr @.str.2394, i64 1643, ptr @.str.2395) + unreachable +ok3859: + %t1275 = getelementptr inbounds %S.gen.Gen, ptr %t1273, i32 0, i32 15 + %t1276 = load i64, ptr %a1241 + %t1277 = load { ptr, i64, i64 }, ptr %t1275 + %t1278 = extractvalue { ptr, i64, i64 } %t1277, 1 + %t1279 = icmp uge i64 %t1276, %t1278 + br i1 %t1279, label %range3860, label %inrange3861 +range3860: + call void @finch_panic_index(ptr @.str.2396, i64 1643, i64 %t1276, i64 %t1278) + unreachable +inrange3861: + %t1280 = extractvalue { ptr, i64, i64 } %t1277, 0 + %t1281 = getelementptr inbounds %S.gen.FnSig, ptr %t1280, i64 %t1276 + %t1282 = getelementptr inbounds %S.gen.FnSig, ptr %t1281, i32 0, i32 16 + %t1283 = load i64, ptr %t1282 + %t1284 = load { ptr, i64, i64 }, ptr %t1272 + %t1285 = extractvalue { ptr, i64, i64 } %t1284, 1 + %t1286 = icmp uge i64 %t1283, %t1285 + br i1 %t1286, label %range3862, label %inrange3863 +range3862: + call void @finch_panic_index(ptr @.str.2397, i64 1643, i64 %t1283, i64 %t1285) + unreachable +inrange3863: + %t1287 = extractvalue { ptr, i64, i64 } %t1284, 0 + %t1288 = getelementptr inbounds %S.ast.Program, ptr %t1287, i64 %t1283 + %t1289 = getelementptr inbounds %S.ast.Program, ptr %t1288, i32 0, i32 8 + %t1290 = load ptr, ptr %a1 + %t1291 = icmp eq ptr %t1290, null + br i1 %t1291, label %panic3864, label %ok3865 +panic3864: + call void @finch_panic(ptr @.str.2398, i64 1643, ptr @.str.2399) + unreachable +ok3865: + %t1292 = getelementptr inbounds %S.gen.Gen, ptr %t1290, i32 0, i32 15 + %t1293 = load i64, ptr %a1241 + %t1294 = load { ptr, i64, i64 }, ptr %t1292 + %t1295 = extractvalue { ptr, i64, i64 } %t1294, 1 + %t1296 = icmp uge i64 %t1293, %t1295 + br i1 %t1296, label %range3866, label %inrange3867 +range3866: + call void @finch_panic_index(ptr @.str.2400, i64 1643, i64 %t1293, i64 %t1295) + unreachable +inrange3867: + %t1297 = extractvalue { ptr, i64, i64 } %t1294, 0 + %t1298 = getelementptr inbounds %S.gen.FnSig, ptr %t1297, i64 %t1293 + %t1299 = getelementptr inbounds %S.gen.FnSig, ptr %t1298, i32 0, i32 17 + %t1300 = load i64, ptr %t1299 + %t1301 = load { ptr, i64, i64 }, ptr %t1289 + %t1302 = extractvalue { ptr, i64, i64 } %t1301, 1 + %t1303 = icmp uge i64 %t1300, %t1302 + br i1 %t1303, label %range3868, label %inrange3869 +range3868: + call void @finch_panic_index(ptr @.str.2401, i64 1643, i64 %t1300, i64 %t1302) + unreachable +inrange3869: + %t1304 = extractvalue { ptr, i64, i64 } %t1301, 0 + %t1305 = getelementptr inbounds %S.ast.Node, ptr %t1304, i64 %t1300 + %t1306 = load %S.ast.Node, ptr %t1305 + store %S.ast.Node %t1306, ptr %a1307 + call void @finch.copy.S_ast_Node(ptr %a1308, ptr %a1307) + %t1309 = load %S.ast.Node, ptr %a1308 + store %S.ast.Node %t1309, ptr %a1310 + %t1311 = load ptr, ptr %a1 + %t1312 = getelementptr inbounds %S.ast.Node, ptr %a1310, i32 0, i32 9 + %t1313 = getelementptr inbounds %S.ast.Node, ptr %a1310, i32 0, i32 9 + %t1314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1313, i32 0, i32 1 + %t1315 = load i64, ptr %t1314 + %t1316 = sub i64 %t1315, 1 + %t1317 = load { ptr, i64, i64 }, ptr %t1312 + %t1318 = extractvalue { ptr, i64, i64 } %t1317, 1 + %t1319 = icmp uge i64 %t1316, %t1318 + br i1 %t1319, label %range3870, label %inrange3871 +range3870: + call void @finch_panic_index(ptr @.str.2403, i64 1644, i64 %t1316, i64 %t1318) + unreachable +inrange3871: + %t1320 = extractvalue { ptr, i64, i64 } %t1317, 0 + %t1321 = getelementptr inbounds %S.ast.Node, ptr %t1320, i64 %t1316 + %t1322 = load %S.ast.Node, ptr %t1321 + %t1323 = call i1 @finch.gen.mutates(ptr %t1311, { ptr, i64, i64 } { ptr @.str.2402, i64 4, i64 0 }, %S.ast.Node %t1322) + br i1 %t1323, label %then3872, label %endif3874 +then3872: + %t1324 = load ptr, ptr %a1 + %t1325 = icmp eq ptr %t1324, null + br i1 %t1325, label %panic3875, label %ok3876 +panic3875: + call void @finch_panic(ptr @.str.2404, i64 1645, ptr @.str.2405) + unreachable +ok3876: + %t1326 = getelementptr inbounds %S.gen.Gen, ptr %t1324, i32 0, i32 15 + %t1327 = load i64, ptr %a1241 + %t1328 = load { ptr, i64, i64 }, ptr %t1326 + %t1329 = extractvalue { ptr, i64, i64 } %t1328, 1 + %t1330 = icmp uge i64 %t1327, %t1329 + br i1 %t1330, label %range3877, label %inrange3878 +range3877: + call void @finch_panic_index(ptr @.str.2406, i64 1645, i64 %t1327, i64 %t1329) + unreachable +inrange3878: + %t1331 = extractvalue { ptr, i64, i64 } %t1328, 0 + %t1332 = getelementptr inbounds %S.gen.FnSig, ptr %t1331, i64 %t1327 + %t1333 = getelementptr inbounds %S.gen.FnSig, ptr %t1332, i32 0, i32 10 + store i1 true, ptr %t1333 + %t1334 = load ptr, ptr %a1 + %t1335 = icmp eq ptr %t1334, null + br i1 %t1335, label %panic3879, label %ok3880 +panic3879: + call void @finch_panic(ptr @.str.2407, i64 1646, ptr @.str.2408) + unreachable +ok3880: + %t1336 = getelementptr inbounds %S.gen.Gen, ptr %t1334, i32 0, i32 24 + %t1337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1336, i32 0, i32 1 + %t1338 = load ptr, ptr %a1 + %t1339 = icmp eq ptr %t1338, null + br i1 %t1339, label %panic3881, label %ok3882 +panic3881: + call void @finch_panic(ptr @.str.2409, i64 1646, ptr @.str.2410) + unreachable +ok3882: + %t1340 = getelementptr inbounds %S.gen.Gen, ptr %t1338, i32 0, i32 15 + %t1341 = load i64, ptr %a1241 + %t1342 = load { ptr, i64, i64 }, ptr %t1340 + %t1343 = extractvalue { ptr, i64, i64 } %t1342, 1 + %t1344 = icmp uge i64 %t1341, %t1343 + br i1 %t1344, label %range3883, label %inrange3884 +range3883: + call void @finch_panic_index(ptr @.str.2411, i64 1646, i64 %t1341, i64 %t1343) + unreachable +inrange3884: + %t1345 = extractvalue { ptr, i64, i64 } %t1342, 0 + %t1346 = getelementptr inbounds %S.gen.FnSig, ptr %t1345, i64 %t1341 + %t1347 = getelementptr inbounds %S.gen.FnSig, ptr %t1346, i32 0, i32 1 + %t1348 = load { ptr, i64, i64 }, ptr %t1347 + store { ptr, i64, i64 } %t1348, ptr %a1349 + call void @finch_str_copy(ptr %a1350, ptr %a1349) + %t1351 = load { ptr, i64, i64 }, ptr %a1350 + %t1352 = load i64, ptr %t1337 + %t1353 = add i64 %t1352, 1 + call void @finch_arr_reserve(ptr %t1336, i64 %t1353, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1354 = load ptr, ptr %t1336 + %t1355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1354, i64 %t1352 + store { ptr, i64, i64 } %t1351, ptr %t1355 + store i64 %t1353, ptr %t1337 + store i1 true, ptr %a1234 + br label %endif3874 +endif3874: + call void @finch.drop.S_ast_Node(ptr %a1310) + br label %endif3855 +endif3855: + br label %for.step3839 +for.step3839: + %t1356 = load i64, ptr %a1241 + %t1357 = add i64 %t1356, 1 + store i64 %t1357, ptr %a1241 + br label %for.cond3837 +for.end3840: + %t1358 = load ptr, ptr %a1 + %t1359 = icmp eq ptr %t1358, null + br i1 %t1359, label %panic3885, label %ok3886 +panic3885: + call void @finch_panic(ptr @.str.2412, i64 1651, ptr @.str.2413) + unreachable +ok3886: + %t1360 = getelementptr inbounds %S.gen.Gen, ptr %t1358, i32 0, i32 17 + %t1361 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1360, i32 0, i32 1 + %t1362 = load i64, ptr %t1361 + store i64 0, ptr %a1363 + br label %for.cond3887 +for.cond3887: + %t1364 = load i64, ptr %a1363 + %t1365 = icmp slt i64 %t1364, %t1362 + br i1 %t1365, label %for.body3888, label %for.end3890 +for.body3888: + %t1366 = load ptr, ptr %a1 + %t1367 = icmp eq ptr %t1366, null + br i1 %t1367, label %panic3891, label %ok3892 +panic3891: + call void @finch_panic(ptr @.str.2414, i64 1652, ptr @.str.2415) + unreachable +ok3892: + %t1368 = getelementptr inbounds %S.gen.Gen, ptr %t1366, i32 0, i32 17 + %t1369 = load i64, ptr %a1363 + %t1370 = load { ptr, i64, i64 }, ptr %t1368 + %t1371 = extractvalue { ptr, i64, i64 } %t1370, 1 + %t1372 = icmp uge i64 %t1369, %t1371 + br i1 %t1372, label %range3893, label %inrange3894 +range3893: + call void @finch_panic_index(ptr @.str.2416, i64 1652, i64 %t1369, i64 %t1371) + unreachable +inrange3894: + %t1373 = extractvalue { ptr, i64, i64 } %t1370, 0 + %t1374 = getelementptr inbounds %S.gen.Template, ptr %t1373, i64 %t1369 + %t1375 = load %S.gen.Template, ptr %t1374 + store %S.gen.Template %t1375, ptr %a1376 + call void @finch.copy.S_gen_Template(ptr %a1377, ptr %a1376) + %t1378 = load %S.gen.Template, ptr %a1377 + store %S.gen.Template %t1378, ptr %a1379 + %t1380 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 2 + %t1381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1380, i32 0, i32 1 + %t1382 = load i64, ptr %t1381 + %t1383 = icmp sgt i64 %t1382, 0 + br label %logic.from3895 +logic.from3895: + br i1 %t1383, label %logic.rhs3896, label %logic.end3897 +logic.rhs3896: + %t1384 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 7 + %t1385 = load i1, ptr %t1384 + %t1386 = xor i1 %t1385, true + br label %logic.rend3898 +logic.rend3898: + br label %logic.end3897 +logic.end3897: + %t1387 = phi i1 [ false, %logic.from3895 ], [ %t1386, %logic.rend3898 ] + br i1 %t1387, label %then3899, label %endif3901 +then3899: + %t1388 = load ptr, ptr %a1 + %t1389 = icmp eq ptr %t1388, null + br i1 %t1389, label %panic3902, label %ok3903 +panic3902: + call void @finch_panic(ptr @.str.2417, i64 1654, ptr @.str.2418) + unreachable +ok3903: + %t1390 = getelementptr inbounds %S.gen.Gen, ptr %t1388, i32 0, i32 0 + %t1391 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 4 + %t1392 = load i64, ptr %t1391 + %t1393 = load { ptr, i64, i64 }, ptr %t1390 + %t1394 = extractvalue { ptr, i64, i64 } %t1393, 1 + %t1395 = icmp uge i64 %t1392, %t1394 + br i1 %t1395, label %range3904, label %inrange3905 +range3904: + call void @finch_panic_index(ptr @.str.2419, i64 1654, i64 %t1392, i64 %t1394) + unreachable +inrange3905: + %t1396 = extractvalue { ptr, i64, i64 } %t1393, 0 + %t1397 = getelementptr inbounds %S.ast.Program, ptr %t1396, i64 %t1392 + %t1398 = getelementptr inbounds %S.ast.Program, ptr %t1397, i32 0, i32 8 + %t1399 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 5 + %t1400 = load i64, ptr %t1399 + %t1401 = load { ptr, i64, i64 }, ptr %t1398 + %t1402 = extractvalue { ptr, i64, i64 } %t1401, 1 + %t1403 = icmp uge i64 %t1400, %t1402 + br i1 %t1403, label %range3906, label %inrange3907 +range3906: + call void @finch_panic_index(ptr @.str.2420, i64 1654, i64 %t1400, i64 %t1402) + unreachable +inrange3907: + %t1404 = extractvalue { ptr, i64, i64 } %t1401, 0 + %t1405 = getelementptr inbounds %S.ast.Node, ptr %t1404, i64 %t1400 + %t1406 = load %S.ast.Node, ptr %t1405 + store %S.ast.Node %t1406, ptr %a1407 + call void @finch.copy.S_ast_Node(ptr %a1408, ptr %a1407) + %t1409 = load %S.ast.Node, ptr %a1408 + store %S.ast.Node %t1409, ptr %a1410 + %t1411 = load ptr, ptr %a1 + %t1412 = getelementptr inbounds %S.ast.Node, ptr %a1410, i32 0, i32 9 + %t1413 = getelementptr inbounds %S.ast.Node, ptr %a1410, i32 0, i32 9 + %t1414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1413, i32 0, i32 1 + %t1415 = load i64, ptr %t1414 + %t1416 = sub i64 %t1415, 1 + %t1417 = load { ptr, i64, i64 }, ptr %t1412 + %t1418 = extractvalue { ptr, i64, i64 } %t1417, 1 + %t1419 = icmp uge i64 %t1416, %t1418 + br i1 %t1419, label %range3908, label %inrange3909 +range3908: + call void @finch_panic_index(ptr @.str.2422, i64 1655, i64 %t1416, i64 %t1418) + unreachable +inrange3909: + %t1420 = extractvalue { ptr, i64, i64 } %t1417, 0 + %t1421 = getelementptr inbounds %S.ast.Node, ptr %t1420, i64 %t1416 + %t1422 = load %S.ast.Node, ptr %t1421 + %t1423 = call i1 @finch.gen.mutates(ptr %t1411, { ptr, i64, i64 } { ptr @.str.2421, i64 4, i64 0 }, %S.ast.Node %t1422) + br i1 %t1423, label %then3910, label %endif3912 +then3910: + %t1424 = load ptr, ptr %a1 + %t1425 = icmp eq ptr %t1424, null + br i1 %t1425, label %panic3913, label %ok3914 +panic3913: + call void @finch_panic(ptr @.str.2423, i64 1656, ptr @.str.2424) + unreachable +ok3914: + %t1426 = getelementptr inbounds %S.gen.Gen, ptr %t1424, i32 0, i32 17 + %t1427 = load i64, ptr %a1363 + %t1428 = load { ptr, i64, i64 }, ptr %t1426 + %t1429 = extractvalue { ptr, i64, i64 } %t1428, 1 + %t1430 = icmp uge i64 %t1427, %t1429 + br i1 %t1430, label %range3915, label %inrange3916 +range3915: + call void @finch_panic_index(ptr @.str.2425, i64 1656, i64 %t1427, i64 %t1429) + unreachable +inrange3916: + %t1431 = extractvalue { ptr, i64, i64 } %t1428, 0 + %t1432 = getelementptr inbounds %S.gen.Template, ptr %t1431, i64 %t1427 + %t1433 = getelementptr inbounds %S.gen.Template, ptr %t1432, i32 0, i32 7 + store i1 true, ptr %t1433 + %t1434 = load ptr, ptr %a1 + %t1435 = icmp eq ptr %t1434, null + br i1 %t1435, label %panic3917, label %ok3918 +panic3917: + call void @finch_panic(ptr @.str.2426, i64 1657, ptr @.str.2427) + unreachable +ok3918: + %t1436 = getelementptr inbounds %S.gen.Gen, ptr %t1434, i32 0, i32 24 + %t1437 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1436, i32 0, i32 1 + %t1438 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 1 + %t1439 = load { ptr, i64, i64 }, ptr %t1438 + store { ptr, i64, i64 } %t1439, ptr %a1440 + call void @finch_str_copy(ptr %a1441, ptr %a1440) + %t1442 = load { ptr, i64, i64 }, ptr %a1441 + %t1443 = load i64, ptr %t1437 + %t1444 = add i64 %t1443, 1 + call void @finch_arr_reserve(ptr %t1436, i64 %t1444, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1445 = load ptr, ptr %t1436 + %t1446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1445, i64 %t1443 + store { ptr, i64, i64 } %t1442, ptr %t1446 + store i64 %t1444, ptr %t1437 + store i1 true, ptr %a1234 + br label %endif3912 +endif3912: + call void @finch.drop.S_ast_Node(ptr %a1410) + br label %endif3901 +endif3901: + call void @finch.drop.S_gen_Template(ptr %a1379) + br label %for.step3889 +for.step3889: + %t1447 = load i64, ptr %a1363 + %t1448 = add i64 %t1447, 1 + store i64 %t1448, ptr %a1363 + br label %for.cond3887 +for.end3890: + br label %while.cond3832 +while.end3834: + %t1449 = load ptr, ptr %a1 + %t1450 = icmp eq ptr %t1449, null + br i1 %t1450, label %panic3919, label %ok3920 +panic3919: + call void @finch_panic(ptr @.str.2428, i64 1664, ptr @.str.2429) + unreachable +ok3920: + %t1451 = getelementptr inbounds %S.gen.Gen, ptr %t1449, i32 0, i32 15 + %t1452 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1451, i32 0, i32 1 + %t1453 = load i64, ptr %t1452 + store i64 0, ptr %a1454 + br label %for.cond3921 +for.cond3921: + %t1455 = load i64, ptr %a1454 + %t1456 = icmp slt i64 %t1455, %t1453 + br i1 %t1456, label %for.body3922, label %for.end3924 +for.body3922: + %t1457 = load ptr, ptr %a1 + %t1458 = icmp eq ptr %t1457, null + br i1 %t1458, label %panic3925, label %ok3926 +panic3925: + call void @finch_panic(ptr @.str.2430, i64 1665, ptr @.str.2431) + unreachable +ok3926: + %t1459 = getelementptr inbounds %S.gen.Gen, ptr %t1457, i32 0, i32 0 + %t1460 = load ptr, ptr %a1 + %t1461 = icmp eq ptr %t1460, null + br i1 %t1461, label %panic3927, label %ok3928 +panic3927: + call void @finch_panic(ptr @.str.2432, i64 1665, ptr @.str.2433) + unreachable +ok3928: + %t1462 = getelementptr inbounds %S.gen.Gen, ptr %t1460, i32 0, i32 15 + %t1463 = load i64, ptr %a1454 + %t1464 = load { ptr, i64, i64 }, ptr %t1462 + %t1465 = extractvalue { ptr, i64, i64 } %t1464, 1 + %t1466 = icmp uge i64 %t1463, %t1465 + br i1 %t1466, label %range3929, label %inrange3930 +range3929: + call void @finch_panic_index(ptr @.str.2434, i64 1665, i64 %t1463, i64 %t1465) + unreachable +inrange3930: + %t1467 = extractvalue { ptr, i64, i64 } %t1464, 0 + %t1468 = getelementptr inbounds %S.gen.FnSig, ptr %t1467, i64 %t1463 + %t1469 = getelementptr inbounds %S.gen.FnSig, ptr %t1468, i32 0, i32 16 + %t1470 = load i64, ptr %t1469 + %t1471 = load { ptr, i64, i64 }, ptr %t1459 + %t1472 = extractvalue { ptr, i64, i64 } %t1471, 1 + %t1473 = icmp uge i64 %t1470, %t1472 + br i1 %t1473, label %range3931, label %inrange3932 +range3931: + call void @finch_panic_index(ptr @.str.2435, i64 1665, i64 %t1470, i64 %t1472) + unreachable +inrange3932: + %t1474 = extractvalue { ptr, i64, i64 } %t1471, 0 + %t1475 = getelementptr inbounds %S.ast.Program, ptr %t1474, i64 %t1470 + %t1476 = getelementptr inbounds %S.ast.Program, ptr %t1475, i32 0, i32 8 + %t1477 = load ptr, ptr %a1 + %t1478 = icmp eq ptr %t1477, null + br i1 %t1478, label %panic3933, label %ok3934 +panic3933: + call void @finch_panic(ptr @.str.2436, i64 1665, ptr @.str.2437) + unreachable +ok3934: + %t1479 = getelementptr inbounds %S.gen.Gen, ptr %t1477, i32 0, i32 15 + %t1480 = load i64, ptr %a1454 + %t1481 = load { ptr, i64, i64 }, ptr %t1479 + %t1482 = extractvalue { ptr, i64, i64 } %t1481, 1 + %t1483 = icmp uge i64 %t1480, %t1482 + br i1 %t1483, label %range3935, label %inrange3936 +range3935: + call void @finch_panic_index(ptr @.str.2438, i64 1665, i64 %t1480, i64 %t1482) + unreachable +inrange3936: + %t1484 = extractvalue { ptr, i64, i64 } %t1481, 0 + %t1485 = getelementptr inbounds %S.gen.FnSig, ptr %t1484, i64 %t1480 + %t1486 = getelementptr inbounds %S.gen.FnSig, ptr %t1485, i32 0, i32 17 + %t1487 = load i64, ptr %t1486 + %t1488 = load { ptr, i64, i64 }, ptr %t1476 + %t1489 = extractvalue { ptr, i64, i64 } %t1488, 1 + %t1490 = icmp uge i64 %t1487, %t1489 + br i1 %t1490, label %range3937, label %inrange3938 +range3937: + call void @finch_panic_index(ptr @.str.2439, i64 1665, i64 %t1487, i64 %t1489) + unreachable +inrange3938: + %t1491 = extractvalue { ptr, i64, i64 } %t1488, 0 + %t1492 = getelementptr inbounds %S.ast.Node, ptr %t1491, i64 %t1487 + %t1493 = load %S.ast.Node, ptr %t1492 + store %S.ast.Node %t1493, ptr %a1494 + call void @finch.copy.S_ast_Node(ptr %a1495, ptr %a1494) + %t1496 = load %S.ast.Node, ptr %a1495 + store %S.ast.Node %t1496, ptr %a1497 + %t1498 = getelementptr inbounds %S.ast.Node, ptr %a1497, i32 0, i32 9 + %t1499 = getelementptr inbounds %S.ast.Node, ptr %a1497, i32 0, i32 9 + %t1500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1499, i32 0, i32 1 + %t1501 = load i64, ptr %t1500 + %t1502 = sub i64 %t1501, 1 + %t1503 = load { ptr, i64, i64 }, ptr %t1498 + %t1504 = extractvalue { ptr, i64, i64 } %t1503, 1 + %t1505 = icmp uge i64 %t1502, %t1504 + br i1 %t1505, label %range3939, label %inrange3940 +range3939: + call void @finch_panic_index(ptr @.str.2440, i64 1666, i64 %t1502, i64 %t1504) + unreachable +inrange3940: + %t1506 = extractvalue { ptr, i64, i64 } %t1503, 0 + %t1507 = getelementptr inbounds %S.ast.Node, ptr %t1506, i64 %t1502 + %t1508 = load %S.ast.Node, ptr %t1507 + store %S.ast.Node %t1508, ptr %a1509 + call void @finch.copy.S_ast_Node(ptr %a1510, ptr %a1509) + %t1511 = load %S.ast.Node, ptr %a1510 + store %S.ast.Node %t1511, ptr %a1512 + %t1513 = load ptr, ptr %a1 + %t1514 = icmp eq ptr %t1513, null + br i1 %t1514, label %panic3941, label %ok3942 +panic3941: + call void @finch_panic(ptr @.str.2441, i64 1667, ptr @.str.2442) + unreachable +ok3942: + %t1515 = getelementptr inbounds %S.gen.Gen, ptr %t1513, i32 0, i32 15 + %t1516 = load i64, ptr %a1454 + %t1517 = load { ptr, i64, i64 }, ptr %t1515 + %t1518 = extractvalue { ptr, i64, i64 } %t1517, 1 + %t1519 = icmp uge i64 %t1516, %t1518 + br i1 %t1519, label %range3943, label %inrange3944 +range3943: + call void @finch_panic_index(ptr @.str.2443, i64 1667, i64 %t1516, i64 %t1518) + unreachable +inrange3944: + %t1520 = extractvalue { ptr, i64, i64 } %t1517, 0 + %t1521 = getelementptr inbounds %S.gen.FnSig, ptr %t1520, i64 %t1516 + %t1522 = getelementptr inbounds %S.gen.FnSig, ptr %t1521, i32 0, i32 13 + %t1523 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1522, i32 0, i32 1 + %t1524 = load i64, ptr %t1523 + store i64 0, ptr %a1525 + br label %for.cond3945 +for.cond3945: + %t1526 = load i64, ptr %a1525 + %t1527 = icmp slt i64 %t1526, %t1524 + br i1 %t1527, label %for.body3946, label %for.end3948 +for.body3946: + %t1528 = load ptr, ptr %a1 + %t1529 = icmp eq ptr %t1528, null + br i1 %t1529, label %panic3949, label %ok3950 +panic3949: + call void @finch_panic(ptr @.str.2444, i64 1668, ptr @.str.2445) + unreachable +ok3950: + %t1530 = getelementptr inbounds %S.gen.Gen, ptr %t1528, i32 0, i32 15 + %t1531 = load i64, ptr %a1454 + %t1532 = load { ptr, i64, i64 }, ptr %t1530 + %t1533 = extractvalue { ptr, i64, i64 } %t1532, 1 + %t1534 = icmp uge i64 %t1531, %t1533 + br i1 %t1534, label %range3951, label %inrange3952 +range3951: + call void @finch_panic_index(ptr @.str.2446, i64 1668, i64 %t1531, i64 %t1533) + unreachable +inrange3952: + %t1535 = extractvalue { ptr, i64, i64 } %t1532, 0 + %t1536 = getelementptr inbounds %S.gen.FnSig, ptr %t1535, i64 %t1531 + %t1537 = getelementptr inbounds %S.gen.FnSig, ptr %t1536, i32 0, i32 13 + %t1538 = load i64, ptr %a1525 + %t1539 = load { ptr, i64, i64 }, ptr %t1537 + %t1540 = extractvalue { ptr, i64, i64 } %t1539, 1 + %t1541 = icmp uge i64 %t1538, %t1540 + br i1 %t1541, label %range3953, label %inrange3954 +range3953: + call void @finch_panic_index(ptr @.str.2447, i64 1668, i64 %t1538, i64 %t1540) + unreachable +inrange3954: + %t1542 = extractvalue { ptr, i64, i64 } %t1539, 0 + %t1543 = getelementptr inbounds %S.ast.Type, ptr %t1542, i64 %t1538 + %t1544 = load %S.ast.Type, ptr %t1543 + store %S.ast.Type %t1544, ptr %a1545 + call void @finch.copy.S_ast_Type(ptr %a1546, ptr %a1545) + %t1547 = load %S.ast.Type, ptr %a1546 + store %S.ast.Type %t1547, ptr %a1548 + %t1549 = load ptr, ptr %a1 + %t1550 = icmp eq ptr %t1549, null + br i1 %t1550, label %panic3955, label %ok3956 +panic3955: + call void @finch_panic(ptr @.str.2448, i64 1669, ptr @.str.2449) + unreachable +ok3956: + %t1551 = getelementptr inbounds %S.gen.Gen, ptr %t1549, i32 0, i32 15 + %t1552 = load i64, ptr %a1454 + %t1553 = load { ptr, i64, i64 }, ptr %t1551 + %t1554 = extractvalue { ptr, i64, i64 } %t1553, 1 + %t1555 = icmp uge i64 %t1552, %t1554 + br i1 %t1555, label %range3957, label %inrange3958 +range3957: + call void @finch_panic_index(ptr @.str.2450, i64 1669, i64 %t1552, i64 %t1554) + unreachable +inrange3958: + %t1556 = extractvalue { ptr, i64, i64 } %t1553, 0 + %t1557 = getelementptr inbounds %S.gen.FnSig, ptr %t1556, i64 %t1552 + %t1558 = getelementptr inbounds %S.gen.FnSig, ptr %t1557, i32 0, i32 15 + %t1559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1558, i32 0, i32 1 + %t1560 = load ptr, ptr %a1 + %t1561 = load %S.ast.Type, ptr %a1548 + %t1562 = call i1 @finch.gen.owning(ptr %t1560, %S.ast.Type %t1561) + br label %logic.from3959 +logic.from3959: + br i1 %t1562, label %logic.rhs3960, label %logic.end3961 +logic.rhs3960: + %t1563 = load ptr, ptr %a1 + %t1564 = load ptr, ptr %a1 + %t1565 = icmp eq ptr %t1564, null + br i1 %t1565, label %panic3962, label %ok3963 +panic3962: + call void @finch_panic(ptr @.str.2451, i64 1669, ptr @.str.2452) + unreachable +ok3963: + %t1566 = getelementptr inbounds %S.gen.Gen, ptr %t1564, i32 0, i32 15 + %t1567 = load i64, ptr %a1454 + %t1568 = load { ptr, i64, i64 }, ptr %t1566 + %t1569 = extractvalue { ptr, i64, i64 } %t1568, 1 + %t1570 = icmp uge i64 %t1567, %t1569 + br i1 %t1570, label %range3964, label %inrange3965 +range3964: + call void @finch_panic_index(ptr @.str.2453, i64 1669, i64 %t1567, i64 %t1569) + unreachable +inrange3965: + %t1571 = extractvalue { ptr, i64, i64 } %t1568, 0 + %t1572 = getelementptr inbounds %S.gen.FnSig, ptr %t1571, i64 %t1567 + %t1573 = getelementptr inbounds %S.gen.FnSig, ptr %t1572, i32 0, i32 14 + %t1574 = load i64, ptr %a1525 + %t1575 = load { ptr, i64, i64 }, ptr %t1573 + %t1576 = extractvalue { ptr, i64, i64 } %t1575, 1 + %t1577 = icmp uge i64 %t1574, %t1576 + br i1 %t1577, label %range3966, label %inrange3967 +range3966: + call void @finch_panic_index(ptr @.str.2454, i64 1669, i64 %t1574, i64 %t1576) + unreachable +inrange3967: + %t1578 = extractvalue { ptr, i64, i64 } %t1575, 0 + %t1579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1578, i64 %t1574 + %t1580 = load { ptr, i64, i64 }, ptr %t1579 + %t1581 = load %S.ast.Node, ptr %a1512 + %t1582 = call i1 @finch.gen.mutates(ptr %t1563, { ptr, i64, i64 } %t1580, %S.ast.Node %t1581) + %t1583 = xor i1 %t1582, true + br label %logic.rend3968 +logic.rend3968: + br label %logic.end3961 +logic.end3961: + %t1584 = phi i1 [ false, %logic.from3959 ], [ %t1583, %logic.rend3968 ] + %t1585 = load i64, ptr %t1559 + %t1586 = add i64 %t1585, 1 + call void @finch_arr_reserve(ptr %t1558, i64 %t1586, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + %t1587 = load ptr, ptr %t1558 + %t1588 = getelementptr inbounds i1, ptr %t1587, i64 %t1585 + store i1 %t1584, ptr %t1588 + store i64 %t1586, ptr %t1559 + call void @finch.drop.S_ast_Type(ptr %a1548) + br label %for.step3947 +for.step3947: + %t1589 = load i64, ptr %a1525 + %t1590 = add i64 %t1589, 1 + store i64 %t1590, ptr %a1525 + br label %for.cond3945 +for.end3948: + call void @finch.drop.S_ast_Node(ptr %a1512) + call void @finch.drop.S_ast_Node(ptr %a1497) + br label %for.step3923 +for.step3923: + %t1591 = load i64, ptr %a1454 + %t1592 = add i64 %t1591, 1 + store i64 %t1592, ptr %a1454 + br label %for.cond3921 +for.end3924: + ret void +} + +define internal i64 @finch.gen.findTemplate(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i1, align 16 + %a11 = alloca i64, align 16 + %a24 = alloca %S.gen.Template, align 16 + %a25 = alloca %S.gen.Template, align 16 + %a27 = alloca %S.gen.Template, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic3969, label %ok3970 +panic3969: + call void @finch_panic(ptr @.str.2455, i64 1675, ptr @.str.2456) + unreachable +ok3970: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + store i64 0, ptr %a11 + br label %for.cond3971 +for.cond3971: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t10 + br i1 %t13, label %for.body3972, label %for.end3974 +for.body3972: + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic3975, label %ok3976 +panic3975: + call void @finch_panic(ptr @.str.2457, i64 1676, ptr @.str.2458) + unreachable +ok3976: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 17 + %t17 = load i64, ptr %a11 + %t18 = load { ptr, i64, i64 }, ptr %t16 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 %t17, %t19 + br i1 %t20, label %range3977, label %inrange3978 +range3977: + call void @finch_panic_index(ptr @.str.2459, i64 1676, i64 %t17, i64 %t19) + unreachable +inrange3978: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.gen.Template, ptr %t21, i64 %t17 + %t23 = load %S.gen.Template, ptr %t22 + store %S.gen.Template %t23, ptr %a24 + call void @finch.copy.S_gen_Template(ptr %a25, ptr %a24) + %t26 = load %S.gen.Template, ptr %a25 + store %S.gen.Template %t26, ptr %a27 + %t28 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 0 + %t29 = load { ptr, i64, i64 }, ptr %t28 + %t30 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } %t30, ptr %a32 + %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) + %t34 = icmp ne i32 %t33, 0 + br label %logic.from3979 +logic.from3979: + br i1 %t34, label %logic.rhs3980, label %logic.end3981 +logic.rhs3980: + %t35 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 1 + %t36 = load { ptr, i64, i64 }, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t36, ptr %a38 + store { ptr, i64, i64 } %t37, ptr %a39 + %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) + %t41 = icmp ne i32 %t40, 0 + br label %logic.rend3982 +logic.rend3982: + br label %logic.end3981 +logic.end3981: + %t42 = phi i1 [ false, %logic.from3979 ], [ %t41, %logic.rend3982 ] + br label %logic.from3983 +logic.from3983: + br i1 %t42, label %logic.rhs3984, label %logic.end3985 +logic.rhs3984: + %t43 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 2 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t44, ptr %a46 + store { ptr, i64, i64 } %t45, ptr %a47 + %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + br label %logic.rend3986 +logic.rend3986: + br label %logic.end3985 +logic.end3985: + %t50 = phi i1 [ false, %logic.from3983 ], [ %t49, %logic.rend3986 ] + br label %logic.from3987 +logic.from3987: + br i1 %t50, label %logic.rhs3988, label %logic.end3989 +logic.rhs3988: + %t51 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 6 + %t52 = load i1, ptr %t51 + %t53 = load i1, ptr %a5 + %t54 = icmp eq i1 %t52, %t53 + br label %logic.rend3990 +logic.rend3990: + br label %logic.end3989 +logic.end3989: + %t55 = phi i1 [ false, %logic.from3987 ], [ %t54, %logic.rend3990 ] + br i1 %t55, label %then3991, label %endif3993 +then3991: + %t56 = load i64, ptr %a11 + call void @finch.drop.S_gen_Template(ptr %a27) + ret i64 %t56 +endif3993: + call void @finch.drop.S_gen_Template(ptr %a27) + br label %for.step3973 +for.step3973: + %t57 = load i64, ptr %a11 + %t58 = add i64 %t57, 1 + store i64 %t58, ptr %a11 + br label %for.cond3971 +for.end3974: + ret i64 -1 +} + +define internal { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond3994 +each.cond3994: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body3995, label %each.end3997 +each.body3995: + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 %t6 + %t10 = load %S.ast.Type, ptr %t9 + store %S.ast.Type %t10, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t13 = load %S.ast.Type, ptr %a11 + %t14 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t13) + %t15 = load i64, ptr %t12 + %t16 = add i64 %t15, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t16, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t17 = load ptr, ptr %a2 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t15 + store { ptr, i64, i64 } %t14, ptr %t18 + store i64 %t16, ptr %t12 + br label %each.step3996 +each.step3996: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %each.cond3994 +each.end3997: + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2460, i64 2, i64 0 }, ptr %a22 + call void @finch_str_join(ptr %a23, ptr %a2, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t24 +} + +define internal %S.ast.Type @finch.gen.instStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a10 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca %S.gen.Template, align 16 + %a48 = alloca %S.gen.Template, align 16 + %a50 = alloca %S.gen.Template, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + %t8 = load { ptr, i64, i64 }, ptr %a3 + %t9 = call i64 @finch.gen.findTemplate(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, { ptr, i64, i64 } { ptr @.str.2461, i64 0, i64 0 }, i1 true) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br i1 %t12, label %then3998, label %endif4000 +then3998: + %t13 = load ptr, ptr %a1 + %t14 = load %S.ast.Node, ptr %a5 + %t15 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2462, i64 34, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.2463, i64 28, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + %t25 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t24, ptr %a27 + store { ptr, i64, i64 } %t25, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t24, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.2464, i64 34, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + call void @finch.gen.fail(ptr %t13, %S.ast.Node %t14, { ptr, i64, i64 } %t35) + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_drop(ptr %a36) + br label %endif4000 +endif4000: + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic4001, label %ok4002 +panic4001: + call void @finch_panic(ptr @.str.2465, i64 1698, ptr @.str.2466) + unreachable +ok4002: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 17 + %t40 = load i64, ptr %a10 + %t41 = load { ptr, i64, i64 }, ptr %t39 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 %t40, %t42 + br i1 %t43, label %range4003, label %inrange4004 +range4003: + call void @finch_panic_index(ptr @.str.2467, i64 1698, i64 %t40, i64 %t42) + unreachable +inrange4004: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds %S.gen.Template, ptr %t44, i64 %t40 + %t46 = load %S.gen.Template, ptr %t45 + store %S.gen.Template %t46, ptr %a47 + call void @finch.copy.S_gen_Template(ptr %a48, ptr %a47) + %t49 = load %S.gen.Template, ptr %a48 + store %S.gen.Template %t49, ptr %a50 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = icmp ne i64 %t52, %t55 + br i1 %t56, label %then4005, label %endif4007 +then4005: + %t57 = load ptr, ptr %a1 + %t58 = load %S.ast.Node, ptr %a5 + %t59 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t59, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.2468, i64 7, i64 0 }, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a60 + %t64 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 + %t66 = load i64, ptr %t65 + call void @finch_str_from_int(ptr %a67, i64 %t66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t63, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t63, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t68, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.2469, i64 24, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + %t80 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t79, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t79, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.2470, i64 1, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2471, i64 2, i64 0 }, ptr %a93 + call void @finch_str_join(ptr %a94, ptr %t91, ptr %a93) + %t95 = load { ptr, i64, i64 }, ptr %a94 + store { ptr, i64, i64 } %t90, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t90, ptr %a99 + call void @finch_str_drop(ptr %a99) + store { ptr, i64, i64 } %t95, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t101, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.2472, i64 11, i64 0 }, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t101, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t108 = load i64, ptr %t107 + call void @finch_str_from_int(ptr %a109, i64 %t108) + %t110 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t106, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t106, ptr %a114 + call void @finch_str_drop(ptr %a114) + store { ptr, i64, i64 } %t110, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.fail(ptr %t57, %S.ast.Node %t58, { ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + br label %endif4007 +endif4007: + %t118 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.2473, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a119 + %t123 = load { ptr, i64, i64 }, ptr %a4 + %t124 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t123) + store { ptr, i64, i64 } %t122, ptr %a126 + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t122, ptr %a128 + call void @finch_str_drop(ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a125 + store { ptr, i64, i64 } %t130, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.2474, i64 1, i64 0 }, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t130, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + store { ptr, i64, i64 } %t135, ptr %a136 + %t137 = load ptr, ptr %a1 + %t138 = load { ptr, i64, i64 }, ptr %a2 + %t139 = load { ptr, i64, i64 }, ptr %a136 + %t140 = call i64 @finch.gen.findStruct(ptr %t137, { ptr, i64, i64 } %t138, { ptr, i64, i64 } %t139) + %t141 = icmp slt i64 %t140, 0 + br i1 %t141, label %then4008, label %endif4010 +then4008: + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic4011, label %ok4012 +panic4011: + call void @finch_panic(ptr @.str.2475, i64 1704, ptr @.str.2476) + unreachable +ok4012: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 16 + %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 + %t146 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t146, ptr %a147 + call void @finch_str_copy(ptr %a148, ptr %a147) + %t149 = load { ptr, i64, i64 }, ptr %a148 + %t150 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t149, 0 + %t151 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t151, ptr %a152 + call void @finch_str_copy(ptr %a153, ptr %a152) + %t154 = load { ptr, i64, i64 }, ptr %a153 + %t155 = insertvalue %S.gen.StructDef %t150, { ptr, i64, i64 } %t154, 1 + %t156 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t156, ptr %a157 + call void @finch_str_copy(ptr %a158, ptr %a157) + %t159 = load { ptr, i64, i64 }, ptr %a158 + %t160 = insertvalue %S.gen.StructDef %t155, { ptr, i64, i64 } %t159, 5 + %t161 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t162 = load { ptr, i64, i64 }, ptr %t161 + store { ptr, i64, i64 } %t162, ptr %a163 + call void @finch.copy.arr_str(ptr %a164, ptr %a163) + %t165 = load { ptr, i64, i64 }, ptr %a164 + %t166 = insertvalue %S.gen.StructDef %t160, { ptr, i64, i64 } %t165, 6 + %t167 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t167, ptr %a168 + call void @finch.copy.arr_S_ast_Type(ptr %a169, ptr %a168) + %t170 = load { ptr, i64, i64 }, ptr %a169 + %t171 = insertvalue %S.gen.StructDef %t166, { ptr, i64, i64 } %t170, 7 + %t172 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 4 + %t173 = load i64, ptr %t172 + %t174 = insertvalue %S.gen.StructDef %t171, i64 %t173, 13 + %t175 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 5 + %t176 = load i64, ptr %t175 + %t177 = insertvalue %S.gen.StructDef %t174, i64 %t176, 14 + %t178 = load i64, ptr %t145 + %t179 = add i64 %t178, 1 + call void @finch_arr_reserve(ptr %t144, i64 %t179, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) + %t180 = load ptr, ptr %t144 + %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t178 + store %S.gen.StructDef %t177, ptr %t181 + store i64 %t179, ptr %t145 + %t182 = load ptr, ptr %a1 + %t183 = load ptr, ptr %a1 + %t184 = icmp eq ptr %t183, null + br i1 %t184, label %panic4013, label %ok4014 +panic4013: + call void @finch_panic(ptr @.str.2477, i64 1705, ptr @.str.2478) + unreachable +ok4014: + %t185 = getelementptr inbounds %S.gen.Gen, ptr %t183, i32 0, i32 16 + %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i32 0, i32 1 + %t187 = load i64, ptr %t186 + %t188 = sub i64 %t187, 1 + call void @finch.gen.resolveStruct(ptr %t182, i64 %t188) + br label %endif4010 +endif4010: + %t189 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.2479, i64 6, i64 0 }, 0 + %t190 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_copy(ptr %a192, ptr %a191) + %t193 = load { ptr, i64, i64 }, ptr %a192 + %t194 = insertvalue %S.ast.Type %t189, { ptr, i64, i64 } %t193, 2 + %t195 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t195, ptr %a196 + call void @finch_str_copy(ptr %a197, ptr %a196) + %t198 = load { ptr, i64, i64 }, ptr %a197 + %t199 = insertvalue %S.ast.Type %t194, { ptr, i64, i64 } %t198, 3 + call void @finch_str_drop(ptr %a136) + call void @finch.drop.S_gen_Template(ptr %a50) + ret %S.ast.Type %t199 +} + +define internal i64 @finch.gen.instFn(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a16 = alloca %S.gen.Template, align 16 + %a17 = alloca %S.gen.Template, align 16 + %a19 = alloca %S.gen.Template, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca i64, align 16 + %a61 = alloca i64, align 16 + %a84 = alloca %S.ast.Node, align 16 + %a85 = alloca %S.ast.Node, align 16 + %a87 = alloca %S.ast.Node, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca %S.gen.FnSig, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca %S.ast.Type, align 16 + %a327 = alloca %S.ast.Node, align 16 + %a328 = alloca %S.ast.Node, align 16 + %a330 = alloca %S.ast.Node, align 16 + %a335 = alloca i64, align 16 + %a357 = alloca %S.ast.Type, align 16 + %a361 = alloca %S.ast.Type, align 16 + %a362 = alloca %S.ast.Type, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca %S.gen.FnSig, align 16 + %a453 = alloca %S.gen.FnSig, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4015, label %ok4016 +panic4015: + call void @finch_panic(ptr @.str.2480, i64 1712, ptr @.str.2481) + unreachable +ok4016: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range4017, label %inrange4018 +range4017: + call void @finch_panic_index(ptr @.str.2482, i64 1712, i64 %t9, i64 %t11) + unreachable +inrange4018: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 + %t15 = load %S.gen.Template, ptr %t14 + store %S.gen.Template %t15, ptr %a16 + call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) + %t18 = load %S.gen.Template, ptr %a17 + store %S.gen.Template %t18, ptr %a19 + %t20 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.2483, i64 1, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a22 + %t26 = load { ptr, i64, i64 }, ptr %a3 + %t27 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t26) + store { ptr, i64, i64 } %t25, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t25, ptr %a31 + call void @finch_str_drop(ptr %a31) + store { ptr, i64, i64 } %t27, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t33, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.2484, i64 1, i64 0 }, ptr %a36 + call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = icmp sgt i64 %t42, 0 + br i1 %t43, label %then4019, label %else4020 +then4019: + %t44 = load ptr, ptr %a1 + %t45 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t48 = load { ptr, i64, i64 }, ptr %t47 + %t49 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + %t51 = call i64 @finch.gen.findMethod(ptr %t44, { ptr, i64, i64 } %t46, { ptr, i64, i64 } %t48, { ptr, i64, i64 } %t50) + store i64 %t51, ptr %a52 + %t53 = load i64, ptr %a52 + %t54 = icmp sge i64 %t53, 0 + br i1 %t54, label %then4022, label %endif4024 +then4022: + %t55 = load i64, ptr %a52 + call void @finch_str_drop(ptr %a39) + call void @finch.drop.S_gen_Template(ptr %a19) + ret i64 %t55 +endif4024: + br label %endif4021 +else4020: + %t56 = load ptr, ptr %a1 + %t57 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t58 = load { ptr, i64, i64 }, ptr %t57 + %t59 = load { ptr, i64, i64 }, ptr %a39 + %t60 = call i64 @finch.gen.findFn(ptr %t56, { ptr, i64, i64 } %t58, { ptr, i64, i64 } %t59) + store i64 %t60, ptr %a61 + %t62 = load i64, ptr %a61 + %t63 = icmp sge i64 %t62, 0 + br i1 %t63, label %then4025, label %endif4027 +then4025: + %t64 = load i64, ptr %a61 + call void @finch_str_drop(ptr %a39) + call void @finch.drop.S_gen_Template(ptr %a19) + ret i64 %t64 +endif4027: + br label %endif4021 +endif4021: + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic4028, label %ok4029 +panic4028: + call void @finch_panic(ptr @.str.2485, i64 1725, ptr @.str.2486) + unreachable +ok4029: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 0 + %t68 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 + %t69 = load i64, ptr %t68 + %t70 = load { ptr, i64, i64 }, ptr %t67 + %t71 = extractvalue { ptr, i64, i64 } %t70, 1 + %t72 = icmp uge i64 %t69, %t71 + br i1 %t72, label %range4030, label %inrange4031 +range4030: + call void @finch_panic_index(ptr @.str.2487, i64 1725, i64 %t69, i64 %t71) + unreachable +inrange4031: + %t73 = extractvalue { ptr, i64, i64 } %t70, 0 + %t74 = getelementptr inbounds %S.ast.Program, ptr %t73, i64 %t69 + %t75 = getelementptr inbounds %S.ast.Program, ptr %t74, i32 0, i32 8 + %t76 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 + %t77 = load i64, ptr %t76 + %t78 = load { ptr, i64, i64 }, ptr %t75 + %t79 = extractvalue { ptr, i64, i64 } %t78, 1 + %t80 = icmp uge i64 %t77, %t79 + br i1 %t80, label %range4032, label %inrange4033 +range4032: + call void @finch_panic_index(ptr @.str.2488, i64 1725, i64 %t77, i64 %t79) + unreachable +inrange4033: + %t81 = extractvalue { ptr, i64, i64 } %t78, 0 + %t82 = getelementptr inbounds %S.ast.Node, ptr %t81, i64 %t77 + %t83 = load %S.ast.Node, ptr %t82 + store %S.ast.Node %t83, ptr %a84 + call void @finch.copy.S_ast_Node(ptr %a85, ptr %a84) + %t86 = load %S.ast.Node, ptr %a85 + store %S.ast.Node %t86, ptr %a87 + %t88 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + call void @finch_str_copy(ptr %a91, ptr %a90) + %t92 = load { ptr, i64, i64 }, ptr %a91 + %t93 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t92, 0 + %t94 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t94, ptr %a95 + call void @finch_str_copy(ptr %a96, ptr %a95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + %t98 = insertvalue %S.gen.FnSig %t93, { ptr, i64, i64 } %t97, 1 + %t99 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t100 = load { ptr, i64, i64 }, ptr %t99 + store { ptr, i64, i64 } %t100, ptr %a101 + call void @finch_str_copy(ptr %a102, ptr %a101) + %t103 = load { ptr, i64, i64 }, ptr %a102 + %t104 = insertvalue %S.gen.FnSig %t98, { ptr, i64, i64 } %t103, 3 + %t105 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t106 = load { ptr, i64, i64 }, ptr %t105 + store { ptr, i64, i64 } %t106, ptr %a107 + call void @finch.copy.arr_str(ptr %a108, ptr %a107) + %t109 = load { ptr, i64, i64 }, ptr %a108 + %t110 = insertvalue %S.gen.FnSig %t104, { ptr, i64, i64 } %t109, 6 + %t111 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch.copy.arr_S_ast_Type(ptr %a113, ptr %a112) + %t114 = load { ptr, i64, i64 }, ptr %a113 + %t115 = insertvalue %S.gen.FnSig %t110, { ptr, i64, i64 } %t114, 7 + %t116 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_copy(ptr %a118, ptr %a117) + %t119 = load { ptr, i64, i64 }, ptr %a118 + %t120 = insertvalue %S.gen.FnSig %t115, { ptr, i64, i64 } %t119, 8 + %t121 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 7 + %t122 = load i1, ptr %t121 + %t123 = insertvalue %S.gen.FnSig %t120, i1 %t122, 9 + %t124 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 7 + %t125 = load i1, ptr %t124 + %t126 = insertvalue %S.gen.FnSig %t123, i1 %t125, 10 + %t127 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 + %t128 = load i64, ptr %t127 + %t129 = insertvalue %S.gen.FnSig %t126, i64 %t128, 16 + %t130 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 + %t131 = load i64, ptr %t130 + %t132 = insertvalue %S.gen.FnSig %t129, i64 %t131, 17 + store %S.gen.FnSig %t132, ptr %a133 + %t134 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t135 = load { ptr, i64, i64 }, ptr %t134 + %t136 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t135) + store { ptr, i64, i64 } { ptr @.str.2489, i64 7, i64 0 }, ptr %a138 + store { ptr, i64, i64 } %t136, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t141, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.2490, i64 1, i64 0 }, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + %t147 = load { ptr, i64, i64 }, ptr %a39 + %t148 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t147) + store { ptr, i64, i64 } %t146, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + store { ptr, i64, i64 } %t146, ptr %a152 + call void @finch_str_drop(ptr %a152) + store { ptr, i64, i64 } %t148, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a149 + %t155 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 11 + %t156 = load { ptr, i64, i64 }, ptr %t155 + store { ptr, i64, i64 } %t154, ptr %t155 + store { ptr, i64, i64 } %t156, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 + %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i32 0, i32 1 + %t160 = load i64, ptr %t159 + %t161 = icmp sgt i64 %t160, 0 + br i1 %t161, label %then4034, label %endif4036 +then4034: + %t162 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 1 + store { ptr, i64, i64 } %t163, ptr %a165 + call void @finch_str_copy(ptr %a166, ptr %a165) + %t167 = load { ptr, i64, i64 }, ptr %a166 + %t168 = load { ptr, i64, i64 }, ptr %t164 + store { ptr, i64, i64 } %t167, ptr %t164 + store { ptr, i64, i64 } %t168, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t171 = load { ptr, i64, i64 }, ptr %t170 + %t172 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 2 + store { ptr, i64, i64 } %t171, ptr %a173 + call void @finch_str_copy(ptr %a174, ptr %a173) + %t175 = load { ptr, i64, i64 }, ptr %a174 + %t176 = load { ptr, i64, i64 }, ptr %t172 + store { ptr, i64, i64 } %t175, ptr %t172 + store { ptr, i64, i64 } %t176, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t179 = load { ptr, i64, i64 }, ptr %t178 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.2491, i64 1, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a180 + %t184 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t185 = load { ptr, i64, i64 }, ptr %t184 + store { ptr, i64, i64 } %t183, ptr %a187 + store { ptr, i64, i64 } %t185, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t183, ptr %a189 + call void @finch_str_drop(ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a186 + %t191 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 8 + %t192 = load { ptr, i64, i64 }, ptr %t191 + store { ptr, i64, i64 } %t190, ptr %t191 + store { ptr, i64, i64 } %t192, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t195 = load { ptr, i64, i64 }, ptr %t194 + %t196 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t195) + store { ptr, i64, i64 } { ptr @.str.2492, i64 7, i64 0 }, ptr %a198 + store { ptr, i64, i64 } %t196, ptr %a199 + call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) + store { ptr, i64, i64 } %t196, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load { ptr, i64, i64 }, ptr %a197 + store { ptr, i64, i64 } %t201, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.2493, i64 1, i64 0 }, ptr %a204 + call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204) + store { ptr, i64, i64 } %t201, ptr %a205 + call void @finch_str_drop(ptr %a205) + %t206 = load { ptr, i64, i64 }, ptr %a202 + %t207 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t208 = load { ptr, i64, i64 }, ptr %t207 + %t209 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t208) + store { ptr, i64, i64 } %t206, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t206, ptr %a213 + call void @finch_str_drop(ptr %a213) + store { ptr, i64, i64 } %t209, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.2494, i64 1, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load { ptr, i64, i64 }, ptr %a216 + %t221 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t222 = load { ptr, i64, i64 }, ptr %t221 + store { ptr, i64, i64 } %t220, ptr %a224 + store { ptr, i64, i64 } %t222, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t220, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 11 + %t229 = load { ptr, i64, i64 }, ptr %t228 + store { ptr, i64, i64 } %t227, ptr %t228 + store { ptr, i64, i64 } %t229, ptr %a230 + call void @finch_str_drop(ptr %a230) + br label %endif4036 +endif4036: + %t231 = load ptr, ptr %a1 + %t232 = icmp eq ptr %t231, null + br i1 %t232, label %panic4037, label %ok4038 +panic4037: + call void @finch_panic(ptr @.str.2495, i64 1734, ptr @.str.2496) + unreachable +ok4038: + %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 18 + %t234 = load { ptr, i64, i64 }, ptr %t233 + store { ptr, i64, i64 } %t234, ptr %a235 + call void @finch.copy.arr_str(ptr %a236, ptr %a235) + %t237 = load { ptr, i64, i64 }, ptr %a236 + store { ptr, i64, i64 } %t237, ptr %a238 + %t239 = load ptr, ptr %a1 + %t240 = icmp eq ptr %t239, null + br i1 %t240, label %panic4039, label %ok4040 +panic4039: + call void @finch_panic(ptr @.str.2497, i64 1735, ptr @.str.2498) + unreachable +ok4040: + %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 19 + %t242 = load { ptr, i64, i64 }, ptr %t241 + store { ptr, i64, i64 } %t242, ptr %a243 + call void @finch.copy.arr_S_ast_Type(ptr %a244, ptr %a243) + %t245 = load { ptr, i64, i64 }, ptr %a244 + store { ptr, i64, i64 } %t245, ptr %a246 + %t247 = load ptr, ptr %a1 + %t248 = icmp eq ptr %t247, null + br i1 %t248, label %panic4041, label %ok4042 +panic4041: + call void @finch_panic(ptr @.str.2499, i64 1736, ptr @.str.2500) + unreachable +ok4042: + %t249 = getelementptr inbounds %S.gen.Gen, ptr %t247, i32 0, i32 14 + %t250 = load { ptr, i64, i64 }, ptr %t249 + store { ptr, i64, i64 } %t250, ptr %a251 + call void @finch_str_copy(ptr %a252, ptr %a251) + %t253 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t253, ptr %a254 + %t255 = load ptr, ptr %a1 + %t256 = icmp eq ptr %t255, null + br i1 %t256, label %panic4043, label %ok4044 +panic4043: + call void @finch_panic(ptr @.str.2501, i64 1737, ptr @.str.2502) + unreachable +ok4044: + %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 20 + %t258 = load { ptr, i64, i64 }, ptr %t257 + store { ptr, i64, i64 } %t258, ptr %a259 + call void @finch_str_copy(ptr %a260, ptr %a259) + %t261 = load { ptr, i64, i64 }, ptr %a260 + store { ptr, i64, i64 } %t261, ptr %a262 + %t263 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = load ptr, ptr %a1 + %t266 = icmp eq ptr %t265, null + br i1 %t266, label %panic4045, label %ok4046 +panic4045: + call void @finch_panic(ptr @.str.2503, i64 1738, ptr @.str.2504) + unreachable +ok4046: + %t267 = getelementptr inbounds %S.gen.Gen, ptr %t265, i32 0, i32 18 + store { ptr, i64, i64 } %t264, ptr %a268 + call void @finch.copy.arr_str(ptr %a269, ptr %a268) + %t270 = load { ptr, i64, i64 }, ptr %a269 + %t271 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t270, ptr %t267 + store { ptr, i64, i64 } %t271, ptr %a272 + call void @finch.drop.arr_str(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a3 + %t274 = load ptr, ptr %a1 + %t275 = icmp eq ptr %t274, null + br i1 %t275, label %panic4047, label %ok4048 +panic4047: + call void @finch_panic(ptr @.str.2505, i64 1739, ptr @.str.2506) + unreachable +ok4048: + %t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 19 + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch.copy.arr_S_ast_Type(ptr %a278, ptr %a277) + %t279 = load { ptr, i64, i64 }, ptr %a278 + %t280 = load { ptr, i64, i64 }, ptr %t276 + store { ptr, i64, i64 } %t279, ptr %t276 + store { ptr, i64, i64 } %t280, ptr %a281 + call void @finch.drop.arr_S_ast_Type(ptr %a281) + %t282 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t283 = load { ptr, i64, i64 }, ptr %t282 + %t284 = load ptr, ptr %a1 + %t285 = icmp eq ptr %t284, null + br i1 %t285, label %panic4049, label %ok4050 +panic4049: + call void @finch_panic(ptr @.str.2507, i64 1740, ptr @.str.2508) + unreachable +ok4050: + %t286 = getelementptr inbounds %S.gen.Gen, ptr %t284, i32 0, i32 14 + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_copy(ptr %a288, ptr %a287) + %t289 = load { ptr, i64, i64 }, ptr %a288 + %t290 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t289, ptr %t286 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 8 + %t293 = load { ptr, i64, i64 }, ptr %t292 + store { ptr, i64, i64 } { ptr @.str.2509, i64 17, i64 0 }, ptr %a295 + store { ptr, i64, i64 } %t293, ptr %a296 + call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a294 + store { ptr, i64, i64 } %t297, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.2510, i64 1, i64 0 }, ptr %a300 + call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) + store { ptr, i64, i64 } %t297, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a298 + %t303 = load ptr, ptr %a1 + %t304 = icmp eq ptr %t303, null + br i1 %t304, label %panic4051, label %ok4052 +panic4051: + call void @finch_panic(ptr @.str.2511, i64 1741, ptr @.str.2512) + unreachable +ok4052: + %t305 = getelementptr inbounds %S.gen.Gen, ptr %t303, i32 0, i32 20 + %t306 = load { ptr, i64, i64 }, ptr %t305 + store { ptr, i64, i64 } %t302, ptr %t305 + store { ptr, i64, i64 } %t306, ptr %a307 + call void @finch_str_drop(ptr %a307) + %t308 = load ptr, ptr %a1 + %t309 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 5 + %t310 = load %S.ast.Type, ptr %t309 + %t311 = load %S.ast.Node, ptr %a87 + %t312 = call %S.ast.Type @finch.gen.resolve(ptr %t308, %S.ast.Type %t310, %S.ast.Node %t311) + %t313 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 12 + %t314 = load %S.ast.Type, ptr %t313 + store %S.ast.Type %t312, ptr %t313 + store %S.ast.Type %t314, ptr %a315 + call void @finch.drop.S_ast_Type(ptr %a315) + %t316 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t317 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 + %t319 = load i64, ptr %t318 + %t320 = sub i64 %t319, 1 + %t321 = load { ptr, i64, i64 }, ptr %t316 + %t322 = extractvalue { ptr, i64, i64 } %t321, 1 + %t323 = icmp uge i64 %t320, %t322 + br i1 %t323, label %range4053, label %inrange4054 +range4053: + call void @finch_panic_index(ptr @.str.2513, i64 1743, i64 %t320, i64 %t322) + unreachable +inrange4054: + %t324 = extractvalue { ptr, i64, i64 } %t321, 0 + %t325 = getelementptr inbounds %S.ast.Node, ptr %t324, i64 %t320 + %t326 = load %S.ast.Node, ptr %t325 + store %S.ast.Node %t326, ptr %a327 + call void @finch.copy.S_ast_Node(ptr %a328, ptr %a327) + %t329 = load %S.ast.Node, ptr %a328 + store %S.ast.Node %t329, ptr %a330 + %t331 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 + %t333 = load i64, ptr %t332 + %t334 = sub i64 %t333, 1 + store i64 0, ptr %a335 + br label %for.cond4055 +for.cond4055: + %t336 = load i64, ptr %a335 + %t337 = icmp slt i64 %t336, %t334 + br i1 %t337, label %for.body4056, label %for.end4058 +for.body4056: + %t338 = load ptr, ptr %a1 + %t339 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t340 = load i64, ptr %a335 + %t341 = load { ptr, i64, i64 }, ptr %t339 + %t342 = extractvalue { ptr, i64, i64 } %t341, 1 + %t343 = icmp uge i64 %t340, %t342 + br i1 %t343, label %range4059, label %inrange4060 +range4059: + call void @finch_panic_index(ptr @.str.2514, i64 1745, i64 %t340, i64 %t342) + unreachable +inrange4060: + %t344 = extractvalue { ptr, i64, i64 } %t341, 0 + %t345 = getelementptr inbounds %S.ast.Node, ptr %t344, i64 %t340 + %t346 = getelementptr inbounds %S.ast.Node, ptr %t345, i32 0, i32 5 + %t347 = load %S.ast.Type, ptr %t346 + %t348 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t349 = load i64, ptr %a335 + %t350 = load { ptr, i64, i64 }, ptr %t348 + %t351 = extractvalue { ptr, i64, i64 } %t350, 1 + %t352 = icmp uge i64 %t349, %t351 + br i1 %t352, label %range4061, label %inrange4062 +range4061: + call void @finch_panic_index(ptr @.str.2515, i64 1745, i64 %t349, i64 %t351) + unreachable +inrange4062: + %t353 = extractvalue { ptr, i64, i64 } %t350, 0 + %t354 = getelementptr inbounds %S.ast.Node, ptr %t353, i64 %t349 + %t355 = load %S.ast.Node, ptr %t354 + %t356 = call %S.ast.Type @finch.gen.resolve(ptr %t338, %S.ast.Type %t347, %S.ast.Node %t355) + store %S.ast.Type %t356, ptr %a357 + %t358 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 13 + %t359 = getelementptr inbounds { ptr, i64, i64 }, ptr %t358, i32 0, i32 1 + %t360 = load %S.ast.Type, ptr %a357 + store %S.ast.Type %t360, ptr %a361 + call void @finch.copy.S_ast_Type(ptr %a362, ptr %a361) + %t363 = load %S.ast.Type, ptr %a362 + %t364 = load i64, ptr %t359 + %t365 = add i64 %t364, 1 + call void @finch_arr_reserve(ptr %t358, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t366 = load ptr, ptr %t358 + %t367 = getelementptr inbounds %S.ast.Type, ptr %t366, i64 %t364 + store %S.ast.Type %t363, ptr %t367 + store i64 %t365, ptr %t359 + %t368 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 14 + %t369 = getelementptr inbounds { ptr, i64, i64 }, ptr %t368, i32 0, i32 1 + %t370 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t371 = load i64, ptr %a335 + %t372 = load { ptr, i64, i64 }, ptr %t370 + %t373 = extractvalue { ptr, i64, i64 } %t372, 1 + %t374 = icmp uge i64 %t371, %t373 + br i1 %t374, label %range4063, label %inrange4064 +range4063: + call void @finch_panic_index(ptr @.str.2516, i64 1747, i64 %t371, i64 %t373) + unreachable +inrange4064: + %t375 = extractvalue { ptr, i64, i64 } %t372, 0 + %t376 = getelementptr inbounds %S.ast.Node, ptr %t375, i64 %t371 + %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i32 0, i32 1 + %t378 = load { ptr, i64, i64 }, ptr %t377 + store { ptr, i64, i64 } %t378, ptr %a379 + call void @finch_str_copy(ptr %a380, ptr %a379) + %t381 = load { ptr, i64, i64 }, ptr %a380 + %t382 = load i64, ptr %t369 + %t383 = add i64 %t382, 1 + call void @finch_arr_reserve(ptr %t368, i64 %t383, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t384 = load ptr, ptr %t368 + %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t382 + store { ptr, i64, i64 } %t381, ptr %t385 + store i64 %t383, ptr %t369 + %t386 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 15 + %t387 = getelementptr inbounds { ptr, i64, i64 }, ptr %t386, i32 0, i32 1 + %t388 = load ptr, ptr %a1 + %t389 = load %S.ast.Type, ptr %a357 + %t390 = call i1 @finch.gen.owning(ptr %t388, %S.ast.Type %t389) + br label %logic.from4065 +logic.from4065: + br i1 %t390, label %logic.rhs4066, label %logic.end4067 +logic.rhs4066: + %t391 = load ptr, ptr %a1 + %t392 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t393 = load i64, ptr %a335 + %t394 = load { ptr, i64, i64 }, ptr %t392 + %t395 = extractvalue { ptr, i64, i64 } %t394, 1 + %t396 = icmp uge i64 %t393, %t395 + br i1 %t396, label %range4068, label %inrange4069 +range4068: + call void @finch_panic_index(ptr @.str.2517, i64 1748, i64 %t393, i64 %t395) + unreachable +inrange4069: + %t397 = extractvalue { ptr, i64, i64 } %t394, 0 + %t398 = getelementptr inbounds %S.ast.Node, ptr %t397, i64 %t393 + %t399 = getelementptr inbounds %S.ast.Node, ptr %t398, i32 0, i32 1 + %t400 = load { ptr, i64, i64 }, ptr %t399 + %t401 = load %S.ast.Node, ptr %a330 + %t402 = call i1 @finch.gen.mutates(ptr %t391, { ptr, i64, i64 } %t400, %S.ast.Node %t401) + %t403 = xor i1 %t402, true + br label %logic.rend4070 +logic.rend4070: + br label %logic.end4067 +logic.end4067: + %t404 = phi i1 [ false, %logic.from4065 ], [ %t403, %logic.rend4070 ] + %t405 = load i64, ptr %t387 + %t406 = add i64 %t405, 1 + call void @finch_arr_reserve(ptr %t386, i64 %t406, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + %t407 = load ptr, ptr %t386 + %t408 = getelementptr inbounds i1, ptr %t407, i64 %t405 + store i1 %t404, ptr %t408 + store i64 %t406, ptr %t387 + call void @finch.drop.S_ast_Type(ptr %a357) + br label %for.step4057 +for.step4057: + %t409 = load i64, ptr %a335 + %t410 = add i64 %t409, 1 + store i64 %t410, ptr %a335 + br label %for.cond4055 +for.end4058: + %t411 = load { ptr, i64, i64 }, ptr %a238 + %t412 = load ptr, ptr %a1 + %t413 = icmp eq ptr %t412, null + br i1 %t413, label %panic4071, label %ok4072 +panic4071: + call void @finch_panic(ptr @.str.2518, i64 1750, ptr @.str.2519) + unreachable +ok4072: + %t414 = getelementptr inbounds %S.gen.Gen, ptr %t412, i32 0, i32 18 + store { ptr, i64, i64 } %t411, ptr %a415 + call void @finch.copy.arr_str(ptr %a416, ptr %a415) + %t417 = load { ptr, i64, i64 }, ptr %a416 + %t418 = load { ptr, i64, i64 }, ptr %t414 + store { ptr, i64, i64 } %t417, ptr %t414 + store { ptr, i64, i64 } %t418, ptr %a419 + call void @finch.drop.arr_str(ptr %a419) + %t420 = load { ptr, i64, i64 }, ptr %a246 + %t421 = load ptr, ptr %a1 + %t422 = icmp eq ptr %t421, null + br i1 %t422, label %panic4073, label %ok4074 +panic4073: + call void @finch_panic(ptr @.str.2520, i64 1751, ptr @.str.2521) + unreachable +ok4074: + %t423 = getelementptr inbounds %S.gen.Gen, ptr %t421, i32 0, i32 19 + store { ptr, i64, i64 } %t420, ptr %a424 + call void @finch.copy.arr_S_ast_Type(ptr %a425, ptr %a424) + %t426 = load { ptr, i64, i64 }, ptr %a425 + %t427 = load { ptr, i64, i64 }, ptr %t423 + store { ptr, i64, i64 } %t426, ptr %t423 + store { ptr, i64, i64 } %t427, ptr %a428 + call void @finch.drop.arr_S_ast_Type(ptr %a428) + %t429 = load { ptr, i64, i64 }, ptr %a254 + %t430 = load ptr, ptr %a1 + %t431 = icmp eq ptr %t430, null + br i1 %t431, label %panic4075, label %ok4076 +panic4075: + call void @finch_panic(ptr @.str.2522, i64 1752, ptr @.str.2523) + unreachable +ok4076: + %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 14 + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch_str_copy(ptr %a434, ptr %a433) + %t435 = load { ptr, i64, i64 }, ptr %a434 + %t436 = load { ptr, i64, i64 }, ptr %t432 + store { ptr, i64, i64 } %t435, ptr %t432 + store { ptr, i64, i64 } %t436, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a262 + %t439 = load ptr, ptr %a1 + %t440 = icmp eq ptr %t439, null + br i1 %t440, label %panic4077, label %ok4078 +panic4077: + call void @finch_panic(ptr @.str.2524, i64 1753, ptr @.str.2525) + unreachable +ok4078: + %t441 = getelementptr inbounds %S.gen.Gen, ptr %t439, i32 0, i32 20 + store { ptr, i64, i64 } %t438, ptr %a442 + call void @finch_str_copy(ptr %a443, ptr %a442) + %t444 = load { ptr, i64, i64 }, ptr %a443 + %t445 = load { ptr, i64, i64 }, ptr %t441 + store { ptr, i64, i64 } %t444, ptr %t441 + store { ptr, i64, i64 } %t445, ptr %a446 + call void @finch_str_drop(ptr %a446) + %t447 = load ptr, ptr %a1 + %t448 = icmp eq ptr %t447, null + br i1 %t448, label %panic4079, label %ok4080 +panic4079: + call void @finch_panic(ptr @.str.2526, i64 1754, ptr @.str.2527) + unreachable +ok4080: + %t449 = getelementptr inbounds %S.gen.Gen, ptr %t447, i32 0, i32 15 + %t450 = getelementptr inbounds { ptr, i64, i64 }, ptr %t449, i32 0, i32 1 + %t451 = load %S.gen.FnSig, ptr %a133 + store %S.gen.FnSig %t451, ptr %a452 + call void @finch.copy.S_gen_FnSig(ptr %a453, ptr %a452) + %t454 = load %S.gen.FnSig, ptr %a453 + %t455 = load i64, ptr %t450 + %t456 = add i64 %t455, 1 + call void @finch_arr_reserve(ptr %t449, i64 %t456, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) + %t457 = load ptr, ptr %t449 + %t458 = getelementptr inbounds %S.gen.FnSig, ptr %t457, i64 %t455 + store %S.gen.FnSig %t454, ptr %t458 + store i64 %t456, ptr %t450 + %t459 = load ptr, ptr %a1 + %t460 = icmp eq ptr %t459, null + br i1 %t460, label %panic4081, label %ok4082 +panic4081: + call void @finch_panic(ptr @.str.2528, i64 1755, ptr @.str.2529) + unreachable +ok4082: + %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 15 + %t462 = getelementptr inbounds { ptr, i64, i64 }, ptr %t461, i32 0, i32 1 + %t463 = load i64, ptr %t462 + %t464 = sub i64 %t463, 1 + call void @finch.drop.S_ast_Node(ptr %a330) + call void @finch_str_drop(ptr %a262) + call void @finch_str_drop(ptr %a254) + call void @finch.drop.arr_S_ast_Type(ptr %a246) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_gen_FnSig(ptr %a133) + call void @finch.drop.S_ast_Node(ptr %a87) + call void @finch_str_drop(ptr %a39) + call void @finch.drop.S_gen_Template(ptr %a19) + ret i64 %t464 +} + +define internal void @finch.gen.bindType(ptr %p0, %S.ast.Type %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3, ptr %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca ptr, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca i64, align 16 + %a28 = alloca i64, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca i64, align 16 + %a47 = alloca i64, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca i64, align 16 + %a80 = alloca %S.ast.Type, align 16 + %a81 = alloca %S.ast.Type, align 16 + %a84 = alloca %S.ast.Type, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca %S.gen.StructDef, align 16 + %a231 = alloca %S.gen.StructDef, align 16 + %a233 = alloca %S.gen.StructDef, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store ptr %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.2530, i64 5, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br label %logic.from4083 +logic.from4083: + br i1 %t11, label %logic.rhs4084, label %logic.end4085 +logic.rhs4084: + %t12 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp eq i64 %t14, 0 + br label %logic.rend4086 +logic.rend4086: + br label %logic.end4085 +logic.end4085: + %t16 = phi i1 [ false, %logic.from4083 ], [ %t15, %logic.rend4086 ] + br label %logic.from4087 +logic.from4087: + br i1 %t16, label %logic.rhs4088, label %logic.end4089 +logic.rhs4088: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp eq i64 %t19, 0 + br label %logic.rend4090 +logic.rend4090: + br label %logic.end4089 +logic.end4089: + %t21 = phi i1 [ false, %logic.from4087 ], [ %t20, %logic.rend4090 ] + br label %logic.from4091 +logic.from4091: + br i1 %t21, label %logic.rhs4092, label %logic.end4093 +logic.rhs4092: + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store i64 -1, ptr %a25 + %t26 = load i64, ptr %t22 + %t27 = load ptr, ptr %a4 + store i64 0, ptr %a28 + br label %find.cond4094 +find.cond4094: + %t29 = load i64, ptr %a28 + %t30 = icmp slt i64 %t29, %t26 + br i1 %t30, label %find.body4095, label %find.end4098 +find.body4095: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 %t29 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } %t24, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br i1 %t36, label %find.hit4096, label %find.next4097 +find.hit4096: + store i64 %t29, ptr %a25 + br label %find.end4098 +find.next4097: + %t37 = add i64 %t29, 1 + store i64 %t37, ptr %a28 + br label %find.cond4094 +find.end4098: + %t38 = load i64, ptr %a25 + %t39 = icmp sge i64 %t38, 0 + br label %logic.rend4099 +logic.rend4099: + br label %logic.end4093 +logic.end4093: + %t40 = phi i1 [ false, %logic.from4091 ], [ %t39, %logic.rend4099 ] + br i1 %t40, label %then4100, label %endif4102 +then4100: + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t42 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store i64 -1, ptr %a44 + %t45 = load i64, ptr %t41 + %t46 = load ptr, ptr %a4 + store i64 0, ptr %a47 + br label %find.cond4103 +find.cond4103: + %t48 = load i64, ptr %a47 + %t49 = icmp slt i64 %t48, %t45 + br i1 %t49, label %find.body4104, label %find.end4107 +find.body4104: + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t48 + %t51 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } %t51, ptr %a52 + store { ptr, i64, i64 } %t43, ptr %a53 + %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) + %t55 = icmp ne i32 %t54, 0 + br i1 %t55, label %find.hit4105, label %find.next4106 +find.hit4105: + store i64 %t48, ptr %a44 + br label %find.end4107 +find.next4106: + %t56 = add i64 %t48, 1 + store i64 %t56, ptr %a47 + br label %find.cond4103 +find.end4107: + %t57 = load i64, ptr %a44 + store i64 %t57, ptr %a58 + %t59 = load ptr, ptr %a5 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic4108, label %ok4109 +panic4108: + call void @finch_panic(ptr @.str.2531, i64 1762, ptr @.str.2532) + unreachable +ok4109: + %t61 = getelementptr inbounds %S.gen.Binds, ptr %t59, i32 0, i32 1 + %t62 = load i64, ptr %a58 + %t63 = load { ptr, i64, i64 }, ptr %t61 + %t64 = extractvalue { ptr, i64, i64 } %t63, 1 + %t65 = icmp uge i64 %t62, %t64 + br i1 %t65, label %range4110, label %inrange4111 +range4110: + call void @finch_panic_index(ptr @.str.2533, i64 1762, i64 %t62, i64 %t64) + unreachable +inrange4111: + %t66 = extractvalue { ptr, i64, i64 } %t63, 0 + %t67 = getelementptr inbounds i1, ptr %t66, i64 %t62 + %t68 = load i1, ptr %t67 + %t69 = xor i1 %t68, true + br i1 %t69, label %then4112, label %endif4114 +then4112: + %t70 = load %S.ast.Type, ptr %a3 + %t71 = load ptr, ptr %a5 + %t72 = icmp eq ptr %t71, null + br i1 %t72, label %panic4115, label %ok4116 +panic4115: + call void @finch_panic(ptr @.str.2534, i64 1763, ptr @.str.2535) + unreachable +ok4116: + %t73 = getelementptr inbounds %S.gen.Binds, ptr %t71, i32 0, i32 0 + %t74 = load i64, ptr %a58 + %t75 = load { ptr, i64, i64 }, ptr %t73 + %t76 = extractvalue { ptr, i64, i64 } %t75, 1 + %t77 = icmp uge i64 %t74, %t76 + br i1 %t77, label %range4117, label %inrange4118 +range4117: + call void @finch_panic_index(ptr @.str.2536, i64 1763, i64 %t74, i64 %t76) + unreachable +inrange4118: + %t78 = extractvalue { ptr, i64, i64 } %t75, 0 + %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i64 %t74 + store %S.ast.Type %t70, ptr %a80 + call void @finch.copy.S_ast_Type(ptr %a81, ptr %a80) + %t82 = load %S.ast.Type, ptr %a81 + %t83 = load %S.ast.Type, ptr %t79 + store %S.ast.Type %t82, ptr %t79 + store %S.ast.Type %t83, ptr %a84 + call void @finch.drop.S_ast_Type(ptr %a84) + %t85 = load ptr, ptr %a5 + %t86 = icmp eq ptr %t85, null + br i1 %t86, label %panic4119, label %ok4120 +panic4119: + call void @finch_panic(ptr @.str.2537, i64 1764, ptr @.str.2538) + unreachable +ok4120: + %t87 = getelementptr inbounds %S.gen.Binds, ptr %t85, i32 0, i32 1 + %t88 = load i64, ptr %a58 + %t89 = load { ptr, i64, i64 }, ptr %t87 + %t90 = extractvalue { ptr, i64, i64 } %t89, 1 + %t91 = icmp uge i64 %t88, %t90 + br i1 %t91, label %range4121, label %inrange4122 +range4121: + call void @finch_panic_index(ptr @.str.2539, i64 1764, i64 %t88, i64 %t90) + unreachable +inrange4122: + %t92 = extractvalue { ptr, i64, i64 } %t89, 0 + %t93 = getelementptr inbounds i1, ptr %t92, i64 %t88 + store i1 true, ptr %t93 + br label %endif4114 +endif4114: + ret void +endif4102: + %t94 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t95 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.2540, i64 5, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br label %logic.from4123 +logic.from4123: + br i1 %t99, label %logic.end4125, label %logic.rhs4124 +logic.rhs4124: + %t100 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t101 = load { ptr, i64, i64 }, ptr %t100 + store { ptr, i64, i64 } %t101, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.2541, i64 3, i64 0 }, ptr %a103 + %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) + %t105 = icmp ne i32 %t104, 0 + br label %logic.rend4126 +logic.rend4126: + br label %logic.end4125 +logic.end4125: + %t106 = phi i1 [ true, %logic.from4123 ], [ %t105, %logic.rend4126 ] + br label %logic.from4127 +logic.from4127: + br i1 %t106, label %logic.end4129, label %logic.rhs4128 +logic.rhs4128: + %t107 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t108 = load { ptr, i64, i64 }, ptr %t107 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2542, i64 5, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br label %logic.rend4130 +logic.rend4130: + br label %logic.end4129 +logic.end4129: + %t113 = phi i1 [ true, %logic.from4127 ], [ %t112, %logic.rend4130 ] + br label %logic.from4131 +logic.from4131: + br i1 %t113, label %logic.rhs4132, label %logic.end4133 +logic.rhs4132: + %t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp sgt i64 %t116, 0 + br label %logic.rend4134 +logic.rend4134: + br label %logic.end4133 +logic.end4133: + %t118 = phi i1 [ false, %logic.from4131 ], [ %t117, %logic.rend4134 ] + br label %logic.from4135 +logic.from4135: + br i1 %t118, label %logic.rhs4136, label %logic.end4137 +logic.rhs4136: + %t119 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t120 = load { ptr, i64, i64 }, ptr %t119 + %t121 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t122 = load { ptr, i64, i64 }, ptr %t121 + store { ptr, i64, i64 } %t120, ptr %a123 + store { ptr, i64, i64 } %t122, ptr %a124 + %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) + %t126 = icmp ne i32 %t125, 0 + br label %logic.rend4138 +logic.rend4138: + br label %logic.end4137 +logic.end4137: + %t127 = phi i1 [ false, %logic.from4135 ], [ %t126, %logic.rend4138 ] + br label %logic.from4139 +logic.from4139: + br i1 %t127, label %logic.rhs4140, label %logic.end4141 +logic.rhs4140: + %t128 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 + %t130 = load i64, ptr %t129 + %t131 = icmp sgt i64 %t130, 0 + br label %logic.rend4142 +logic.rend4142: + br label %logic.end4141 +logic.end4141: + %t132 = phi i1 [ false, %logic.from4139 ], [ %t131, %logic.rend4142 ] + br i1 %t132, label %then4143, label %endif4145 +then4143: + %t133 = load ptr, ptr %a1 + %t134 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t135 = load { ptr, i64, i64 }, ptr %t134 + %t136 = extractvalue { ptr, i64, i64 } %t135, 1 + %t137 = icmp uge i64 0, %t136 + br i1 %t137, label %range4146, label %inrange4147 +range4146: + call void @finch_panic_index(ptr @.str.2543, i64 1769, i64 0, i64 %t136) + unreachable +inrange4147: + %t138 = extractvalue { ptr, i64, i64 } %t135, 0 + %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i64 0 + %t140 = load %S.ast.Type, ptr %t139 + %t141 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t142 = load { ptr, i64, i64 }, ptr %t141 + %t143 = extractvalue { ptr, i64, i64 } %t142, 1 + %t144 = icmp uge i64 0, %t143 + br i1 %t144, label %range4148, label %inrange4149 +range4148: + call void @finch_panic_index(ptr @.str.2544, i64 1769, i64 0, i64 %t143) + unreachable +inrange4149: + %t145 = extractvalue { ptr, i64, i64 } %t142, 0 + %t146 = getelementptr inbounds %S.ast.Type, ptr %t145, i64 0 + %t147 = load %S.ast.Type, ptr %t146 + %t148 = load { ptr, i64, i64 }, ptr %a4 + %t149 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t133, %S.ast.Type %t140, %S.ast.Type %t147, { ptr, i64, i64 } %t148, ptr %t149) + ret void +endif4145: + %t150 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t151 = load { ptr, i64, i64 }, ptr %t150 + store { ptr, i64, i64 } %t151, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.2545, i64 3, i64 0 }, ptr %a153 + %t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153) + %t155 = icmp ne i32 %t154, 0 + br label %logic.from4150 +logic.from4150: + br i1 %t155, label %logic.rhs4151, label %logic.end4152 +logic.rhs4151: + %t156 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.2546, i64 3, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) + %t161 = icmp ne i32 %t160, 0 + br label %logic.rend4153 +logic.rend4153: + br label %logic.end4152 +logic.end4152: + %t162 = phi i1 [ false, %logic.from4150 ], [ %t161, %logic.rend4153 ] + br i1 %t162, label %then4154, label %endif4156 +then4154: + %t163 = load ptr, ptr %a1 + %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t165 = load { ptr, i64, i64 }, ptr %t164 + %t166 = extractvalue { ptr, i64, i64 } %t165, 1 + %t167 = icmp uge i64 0, %t166 + br i1 %t167, label %range4157, label %inrange4158 +range4157: + call void @finch_panic_index(ptr @.str.2547, i64 1773, i64 0, i64 %t166) + unreachable +inrange4158: + %t168 = extractvalue { ptr, i64, i64 } %t165, 0 + %t169 = getelementptr inbounds %S.ast.Type, ptr %t168, i64 0 + %t170 = load %S.ast.Type, ptr %t169 + %t171 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t172 = load { ptr, i64, i64 }, ptr %t171 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 0, %t173 + br i1 %t174, label %range4159, label %inrange4160 +range4159: + call void @finch_panic_index(ptr @.str.2548, i64 1773, i64 0, i64 %t173) + unreachable +inrange4160: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds %S.ast.Type, ptr %t175, i64 0 + %t177 = load %S.ast.Type, ptr %t176 + %t178 = load { ptr, i64, i64 }, ptr %a4 + %t179 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t163, %S.ast.Type %t170, %S.ast.Type %t177, { ptr, i64, i64 } %t178, ptr %t179) + %t180 = load ptr, ptr %a1 + %t181 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t182 = load { ptr, i64, i64 }, ptr %t181 + %t183 = extractvalue { ptr, i64, i64 } %t182, 1 + %t184 = icmp uge i64 1, %t183 + br i1 %t184, label %range4161, label %inrange4162 +range4161: + call void @finch_panic_index(ptr @.str.2549, i64 1774, i64 1, i64 %t183) + unreachable +inrange4162: + %t185 = extractvalue { ptr, i64, i64 } %t182, 0 + %t186 = getelementptr inbounds %S.ast.Type, ptr %t185, i64 1 + %t187 = load %S.ast.Type, ptr %t186 + %t188 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t189 = load { ptr, i64, i64 }, ptr %t188 + %t190 = extractvalue { ptr, i64, i64 } %t189, 1 + %t191 = icmp uge i64 1, %t190 + br i1 %t191, label %range4163, label %inrange4164 +range4163: + call void @finch_panic_index(ptr @.str.2550, i64 1774, i64 1, i64 %t190) + unreachable +inrange4164: + %t192 = extractvalue { ptr, i64, i64 } %t189, 0 + %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i64 1 + %t194 = load %S.ast.Type, ptr %t193 + %t195 = load { ptr, i64, i64 }, ptr %a4 + %t196 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t180, %S.ast.Type %t187, %S.ast.Type %t194, { ptr, i64, i64 } %t195, ptr %t196) + ret void +endif4156: + %t197 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t198 = load { ptr, i64, i64 }, ptr %t197 + store { ptr, i64, i64 } %t198, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.2551, i64 5, i64 0 }, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp ne i32 %t201, 0 + br label %logic.from4165 +logic.from4165: + br i1 %t202, label %logic.rhs4166, label %logic.end4167 +logic.rhs4166: + %t203 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 + %t205 = load i64, ptr %t204 + %t206 = icmp sgt i64 %t205, 0 + br label %logic.rend4168 +logic.rend4168: + br label %logic.end4167 +logic.end4167: + %t207 = phi i1 [ false, %logic.from4165 ], [ %t206, %logic.rend4168 ] + br label %logic.from4169 +logic.from4169: + br i1 %t207, label %logic.rhs4170, label %logic.end4171 +logic.rhs4170: + %t208 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t209 = load { ptr, i64, i64 }, ptr %t208 + store { ptr, i64, i64 } %t209, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.2552, i64 6, i64 0 }, ptr %a211 + %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) + %t213 = icmp ne i32 %t212, 0 + br label %logic.rend4172 +logic.rend4172: + br label %logic.end4171 +logic.end4171: + %t214 = phi i1 [ false, %logic.from4169 ], [ %t213, %logic.rend4172 ] + br i1 %t214, label %then4173, label %endif4175 +then4173: + %t215 = load ptr, ptr %a1 + %t216 = icmp eq ptr %t215, null + br i1 %t216, label %panic4176, label %ok4177 +panic4176: + call void @finch_panic(ptr @.str.2553, i64 1778, ptr @.str.2554) + unreachable +ok4177: + %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 16 + %t218 = load ptr, ptr %a1 + %t219 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 + %t220 = load { ptr, i64, i64 }, ptr %t219 + %t221 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 + %t222 = load { ptr, i64, i64 }, ptr %t221 + %t223 = call i64 @finch.gen.findStruct(ptr %t218, { ptr, i64, i64 } %t220, { ptr, i64, i64 } %t222) + %t224 = load { ptr, i64, i64 }, ptr %t217 + %t225 = extractvalue { ptr, i64, i64 } %t224, 1 + %t226 = icmp uge i64 %t223, %t225 + br i1 %t226, label %range4178, label %inrange4179 +range4178: + call void @finch_panic_index(ptr @.str.2555, i64 1778, i64 %t223, i64 %t225) + unreachable +inrange4179: + %t227 = extractvalue { ptr, i64, i64 } %t224, 0 + %t228 = getelementptr inbounds %S.gen.StructDef, ptr %t227, i64 %t223 + %t229 = load %S.gen.StructDef, ptr %t228 + store %S.gen.StructDef %t229, ptr %a230 + call void @finch.copy.S_gen_StructDef(ptr %a231, ptr %a230) + %t232 = load %S.gen.StructDef, ptr %a231 + store %S.gen.StructDef %t232, ptr %a233 + %t234 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 5 + %t235 = load { ptr, i64, i64 }, ptr %t234 + %t236 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t237 = load { ptr, i64, i64 }, ptr %t236 + store { ptr, i64, i64 } %t235, ptr %a238 + store { ptr, i64, i64 } %t237, ptr %a239 + %t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239) + %t241 = icmp ne i32 %t240, 0 + br label %logic.from4180 +logic.from4180: + br i1 %t241, label %logic.rhs4181, label %logic.end4182 +logic.rhs4181: + %t242 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 + %t244 = load i64, ptr %t243 + %t245 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %t245, i32 0, i32 1 + %t247 = load i64, ptr %t246 + %t248 = icmp eq i64 %t244, %t247 + br label %logic.rend4183 +logic.rend4183: + br label %logic.end4182 +logic.end4182: + %t249 = phi i1 [ false, %logic.from4180 ], [ %t248, %logic.rend4183 ] + br i1 %t249, label %then4184, label %endif4186 +then4184: + %t250 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %t250, i32 0, i32 1 + %t252 = load i64, ptr %t251 + store i64 0, ptr %a253 + br label %for.cond4187 +for.cond4187: + %t254 = load i64, ptr %a253 + %t255 = icmp slt i64 %t254, %t252 + br i1 %t255, label %for.body4188, label %for.end4190 +for.body4188: + %t256 = load ptr, ptr %a1 + %t257 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t258 = load i64, ptr %a253 + %t259 = load { ptr, i64, i64 }, ptr %t257 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 %t258, %t260 + br i1 %t261, label %range4191, label %inrange4192 +range4191: + call void @finch_panic_index(ptr @.str.2556, i64 1781, i64 %t258, i64 %t260) + unreachable +inrange4192: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds %S.ast.Type, ptr %t262, i64 %t258 + %t264 = load %S.ast.Type, ptr %t263 + %t265 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 + %t266 = load i64, ptr %a253 + %t267 = load { ptr, i64, i64 }, ptr %t265 + %t268 = extractvalue { ptr, i64, i64 } %t267, 1 + %t269 = icmp uge i64 %t266, %t268 + br i1 %t269, label %range4193, label %inrange4194 +range4193: + call void @finch_panic_index(ptr @.str.2557, i64 1781, i64 %t266, i64 %t268) + unreachable +inrange4194: + %t270 = extractvalue { ptr, i64, i64 } %t267, 0 + %t271 = getelementptr inbounds %S.ast.Type, ptr %t270, i64 %t266 + %t272 = load %S.ast.Type, ptr %t271 + %t273 = load { ptr, i64, i64 }, ptr %a4 + %t274 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t256, %S.ast.Type %t264, %S.ast.Type %t272, { ptr, i64, i64 } %t273, ptr %t274) + br label %for.step4189 +for.step4189: + %t275 = load i64, ptr %a253 + %t276 = add i64 %t275, 1 + store i64 %t276, ptr %a253 + br label %for.cond4187 +for.end4190: + br label %endif4186 +endif4186: + call void @finch.drop.S_gen_StructDef(ptr %a233) + br label %endif4175 +endif4175: + ret void +} + +define internal void @finch.drop.arr_S_gen_Val(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond4271 +n.cond4271: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body4272, label %n.end4273 +n.body4272: + %t7 = getelementptr inbounds %S.gen.Val, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Val(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond4271 +n.end4273: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Binds(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Binds, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_ast_Type(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Binds, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_bool(ptr %t2) + ret void +} + +define internal %S.gen.Val @finch.gen.genericCall(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.gen.Template, align 16 + %a17 = alloca %S.gen.Template, align 16 + %a19 = alloca %S.gen.Template, align 16 + %a39 = alloca %S.ast.Node, align 16 + %a40 = alloca %S.ast.Node, align 16 + %a42 = alloca %S.ast.Node, align 16 + %a47 = alloca i64, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca i64, align 16 + %a113 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.ast.Type, align 16 + %a137 = alloca %S.gen.Binds, align 16 + %a141 = alloca i64, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca i64, align 16 + %a167 = alloca i64, align 16 + %a182 = alloca %S.gen.Val, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca %S.gen.Val, align 16 + %a228 = alloca %S.gen.Val, align 16 + %a255 = alloca i64, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a309 = alloca i64, align 16 + %a320 = alloca %S.gen.FnSig, align 16 + %a321 = alloca %S.gen.FnSig, align 16 + %a323 = alloca %S.gen.FnSig, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca i64, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca %S.gen.Val, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca %S.gen.Val, align 16 + %a414 = alloca i64, align 16 + %a422 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4195, label %ok4196 +panic4195: + call void @finch_panic(ptr @.str.2558, i64 1789, ptr @.str.2559) + unreachable +ok4196: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 + %t9 = load i64, ptr %a3 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range4197, label %inrange4198 +range4197: + call void @finch_panic_index(ptr @.str.2560, i64 1789, i64 %t9, i64 %t11) + unreachable +inrange4198: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 + %t15 = load %S.gen.Template, ptr %t14 + store %S.gen.Template %t15, ptr %a16 + call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) + %t18 = load %S.gen.Template, ptr %a17 + store %S.gen.Template %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic4199, label %ok4200 +panic4199: + call void @finch_panic(ptr @.str.2561, i64 1790, ptr @.str.2562) + unreachable +ok4200: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 0 + %t23 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 + %t24 = load i64, ptr %t23 + %t25 = load { ptr, i64, i64 }, ptr %t22 + %t26 = extractvalue { ptr, i64, i64 } %t25, 1 + %t27 = icmp uge i64 %t24, %t26 + br i1 %t27, label %range4201, label %inrange4202 +range4201: + call void @finch_panic_index(ptr @.str.2563, i64 1790, i64 %t24, i64 %t26) + unreachable +inrange4202: + %t28 = extractvalue { ptr, i64, i64 } %t25, 0 + %t29 = getelementptr inbounds %S.ast.Program, ptr %t28, i64 %t24 + %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i32 0, i32 8 + %t31 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 + %t32 = load i64, ptr %t31 + %t33 = load { ptr, i64, i64 }, ptr %t30 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range4203, label %inrange4204 +range4203: + call void @finch_panic_index(ptr @.str.2564, i64 1790, i64 %t32, i64 %t34) + unreachable +inrange4204: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 %t32 + %t38 = load %S.ast.Node, ptr %t37 + store %S.ast.Node %t38, ptr %a39 + call void @finch.copy.S_ast_Node(ptr %a40, ptr %a39) + %t41 = load %S.ast.Node, ptr %a40 + store %S.ast.Node %t41, ptr %a42 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = sub i64 %t45, 1 + store i64 %t46, ptr %a47 + %t48 = load ptr, ptr %a1 + %t49 = load %S.ast.Node, ptr %a2 + %t50 = load i64, ptr %a4 + %t51 = load i64, ptr %a47 + %t52 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.checkArgs(ptr %t48, %S.ast.Node %t49, i64 %t50, i64 %t51, { ptr, i64, i64 } %t52) + store { ptr, i64, i64 } zeroinitializer, ptr %a53 + %t54 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t55 = getelementptr inbounds %S.ast.Type, ptr %t54, i32 0, i32 1 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 + %t57 = load i64, ptr %t56 + %t58 = icmp sgt i64 %t57, 0 + br i1 %t58, label %then4205, label %endif4207 +then4205: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t60 = getelementptr inbounds %S.ast.Type, ptr %t59, i32 0, i32 1 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 + %t62 = load i64, ptr %t61 + %t63 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + %t65 = load i64, ptr %t64 + %t66 = icmp ne i64 %t62, %t65 + br i1 %t66, label %then4208, label %endif4210 +then4208: + %t67 = load ptr, ptr %a1 + %t68 = load %S.ast.Node, ptr %a2 + %t69 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.2565, i64 7, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a70 + %t74 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i32 0, i32 1 + %t76 = load i64, ptr %t75 + call void @finch_str_from_int(ptr %a77, i64 %t76) + %t78 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t73, ptr %a80 + store { ptr, i64, i64 } %t78, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + store { ptr, i64, i64 } %t73, ptr %a82 + call void @finch_str_drop(ptr %a82) + store { ptr, i64, i64 } %t78, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t84, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.2566, i64 27, i64 0 }, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + %t90 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i32 0, i32 1 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 + %t93 = load i64, ptr %t92 + call void @finch_str_from_int(ptr %a94, i64 %t93) + %t95 = load { ptr, i64, i64 }, ptr %a94 + store { ptr, i64, i64 } %t89, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t89, ptr %a99 + call void @finch_str_drop(ptr %a99) + store { ptr, i64, i64 } %t95, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.gen.fail(ptr %t67, %S.ast.Node %t68, { ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t101, ptr %a102 + call void @finch_str_drop(ptr %a102) + br label %endif4210 +endif4210: + %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t104 = getelementptr inbounds %S.ast.Type, ptr %t103, i32 0, i32 1 + store i64 0, ptr %a105 + br label %each.cond4211 +each.cond4211: + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t107 = load i64, ptr %t106 + %t108 = load i64, ptr %a105 + %t109 = icmp slt i64 %t108, %t107 + br i1 %t109, label %each.body4212, label %each.end4214 +each.body4212: + %t110 = load ptr, ptr %t104 + %t111 = getelementptr inbounds %S.ast.Type, ptr %t110, i64 %t108 + %t112 = load %S.ast.Type, ptr %t111 + store %S.ast.Type %t112, ptr %a113 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 + %t115 = load ptr, ptr %a1 + %t116 = load %S.ast.Type, ptr %a113 + %t117 = load %S.ast.Node, ptr %a2 + %t118 = call %S.ast.Type @finch.gen.resolve(ptr %t115, %S.ast.Type %t116, %S.ast.Node %t117) + %t119 = load i64, ptr %t114 + %t120 = add i64 %t119, 1 + call void @finch_arr_reserve(ptr %a53, i64 %t120, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t121 = load ptr, ptr %a53 + %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 %t119 + store %S.ast.Type %t118, ptr %t122 + store i64 %t120, ptr %t114 + br label %each.step4213 +each.step4213: + %t123 = load i64, ptr %a105 + %t124 = add i64 %t123, 1 + store i64 %t124, ptr %a105 + br label %each.cond4211 +each.end4214: + %t125 = load ptr, ptr %a1 + %t126 = load ptr, ptr %a1 + %t127 = load i64, ptr %a3 + %t128 = load { ptr, i64, i64 }, ptr %a53 + %t129 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2567, i64 4, i64 0 }) + %t130 = load %S.ast.Node, ptr %a2 + %t131 = call i64 @finch.gen.instFn(ptr %t126, i64 %t127, { ptr, i64, i64 } %t128, %S.ast.Type %t129, %S.ast.Node %t130) + store %S.ast.Type %t129, ptr %a132 + call void @finch.drop.S_ast_Type(ptr %a132) + %t133 = load %S.ast.Node, ptr %a2 + %t134 = load i64, ptr %a4 + %t135 = load { ptr, i64, i64 }, ptr %a5 + %t136 = call %S.gen.Val @finch.gen.callFn(ptr %t125, i64 %t131, %S.ast.Node %t133, i64 %t134, { ptr, i64, i64 } %t135, { ptr, i64, i64 } { ptr @.str.2568, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.2569, i64 0, i64 0 }) + call void @finch.drop.arr_S_ast_Type(ptr %a53) + call void @finch.drop.S_ast_Node(ptr %a42) + call void @finch.drop.S_gen_Template(ptr %a19) + ret %S.gen.Val %t136 +endif4207: + store %S.gen.Binds zeroinitializer, ptr %a137 + %t138 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 + %t140 = load i64, ptr %t139 + store i64 0, ptr %a141 + br label %for.cond4215 +for.cond4215: + %t142 = load i64, ptr %a141 + %t143 = icmp slt i64 %t142, %t140 + br i1 %t143, label %for.body4216, label %for.end4218 +for.body4216: + %t144 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 + %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 + %t146 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2570, i64 4, i64 0 }) + %t147 = load i64, ptr %t145 + %t148 = add i64 %t147, 1 + call void @finch_arr_reserve(ptr %t144, i64 %t148, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t149 = load ptr, ptr %t144 + %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 %t147 + store %S.ast.Type %t146, ptr %t150 + store i64 %t148, ptr %t145 + %t151 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load i64, ptr %t152 + %t154 = add i64 %t153, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t154, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + %t155 = load ptr, ptr %t151 + %t156 = getelementptr inbounds i1, ptr %t155, i64 %t153 + store i1 false, ptr %t156 + store i64 %t154, ptr %t152 + br label %for.step4217 +for.step4217: + %t157 = load i64, ptr %a141 + %t158 = add i64 %t157, 1 + store i64 %t158, ptr %a141 + br label %for.cond4215 +for.end4218: + store { ptr, i64, i64 } zeroinitializer, ptr %a159 + %t160 = load ptr, ptr %a1 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic4219, label %ok4220 +panic4219: + call void @finch_panic(ptr @.str.2571, i64 1809, ptr @.str.2572) + unreachable +ok4220: + %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 11 + %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1 + %t164 = load i64, ptr %t163 + store i64 %t164, ptr %a165 + %t166 = load i64, ptr %a47 + store i64 0, ptr %a167 + br label %for.cond4221 +for.cond4221: + %t168 = load i64, ptr %a167 + %t169 = icmp slt i64 %t168, %t166 + br i1 %t169, label %for.body4222, label %for.end4224 +for.body4222: + %t170 = load ptr, ptr %a1 + %t171 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t172 = load i64, ptr %a4 + %t173 = load i64, ptr %a167 + %t174 = add i64 %t172, %t173 + %t175 = load { ptr, i64, i64 }, ptr %t171 + %t176 = extractvalue { ptr, i64, i64 } %t175, 1 + %t177 = icmp uge i64 %t174, %t176 + br i1 %t177, label %range4225, label %inrange4226 +range4225: + call void @finch_panic_index(ptr @.str.2573, i64 1811, i64 %t174, i64 %t176) + unreachable +inrange4226: + %t178 = extractvalue { ptr, i64, i64 } %t175, 0 + %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i64 %t174 + %t180 = load %S.ast.Node, ptr %t179 + %t181 = call %S.gen.Val @finch.gen.expr(ptr %t170, %S.ast.Node %t180) + store %S.gen.Val %t181, ptr %a182 + %t183 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 + %t184 = getelementptr inbounds %S.ast.Type, ptr %t183, i32 0, i32 0 + %t185 = load { ptr, i64, i64 }, ptr %t184 + store { ptr, i64, i64 } %t185, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.2574, i64 4, i64 0 }, ptr %a187 + %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) + %t189 = icmp ne i32 %t188, 0 + br label %logic.from4227 +logic.from4227: + br i1 %t189, label %logic.end4229, label %logic.rhs4228 +logic.rhs4228: + %t190 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 + %t191 = getelementptr inbounds %S.ast.Type, ptr %t190, i32 0, i32 0 + %t192 = load { ptr, i64, i64 }, ptr %t191 + store { ptr, i64, i64 } %t192, ptr %a193 + store { ptr, i64, i64 } { ptr @.str.2575, i64 4, i64 0 }, ptr %a194 + %t195 = call i32 @finch_str_eq(ptr %a193, ptr %a194) + %t196 = icmp ne i32 %t195, 0 + br label %logic.rend4230 +logic.rend4230: + br label %logic.end4229 +logic.end4229: + %t197 = phi i1 [ true, %logic.from4227 ], [ %t196, %logic.rend4230 ] + br i1 %t197, label %then4231, label %endif4233 +then4231: + %t198 = load ptr, ptr %a1 + %t199 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t200 = load i64, ptr %a4 + %t201 = load i64, ptr %a167 + %t202 = add i64 %t200, %t201 + %t203 = load { ptr, i64, i64 }, ptr %t199 + %t204 = extractvalue { ptr, i64, i64 } %t203, 1 + %t205 = icmp uge i64 %t202, %t204 + br i1 %t205, label %range4234, label %inrange4235 +range4234: + call void @finch_panic_index(ptr @.str.2576, i64 1813, i64 %t202, i64 %t204) + unreachable +inrange4235: + %t206 = extractvalue { ptr, i64, i64 } %t203, 0 + %t207 = getelementptr inbounds %S.ast.Node, ptr %t206, i64 %t202 + %t208 = load %S.ast.Node, ptr %t207 + %t209 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2578, i64 2, i64 0 }, ptr %a211 + call void @finch_str_join(ptr %a212, ptr %t209, ptr %a211) + %t213 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } { ptr @.str.2577, i64 29, i64 0 }, ptr %a215 + store { ptr, i64, i64 } %t213, ptr %a216 + call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) + store { ptr, i64, i64 } %t213, ptr %a217 + call void @finch_str_drop(ptr %a217) + %t218 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t218, ptr %a220 + store { ptr, i64, i64 } { ptr @.str.2579, i64 5, i64 0 }, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t218, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.fail(ptr %t198, %S.ast.Node %t208, { ptr, i64, i64 } %t223) + store { ptr, i64, i64 } %t223, ptr %a224 + call void @finch_str_drop(ptr %a224) + br label %endif4233 +endif4233: + %t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 + %t226 = load %S.gen.Val, ptr %a182 + store %S.gen.Val %t226, ptr %a227 + call void @finch.copy.S_gen_Val(ptr %a228, ptr %a227) + %t229 = load %S.gen.Val, ptr %a228 + %t230 = load i64, ptr %t225 + %t231 = add i64 %t230, 1 + call void @finch_arr_reserve(ptr %a159, i64 %t231, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t232 = load ptr, ptr %a159 + %t233 = getelementptr inbounds %S.gen.Val, ptr %t232, i64 %t230 + store %S.gen.Val %t229, ptr %t233 + store i64 %t231, ptr %t225 + %t234 = load ptr, ptr %a1 + %t235 = load %S.gen.Val, ptr %a182 + call void @finch.gen.hold(ptr %t234, %S.gen.Val %t235) + %t236 = load ptr, ptr %a1 + %t237 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 + %t238 = load i64, ptr %a167 + %t239 = load { ptr, i64, i64 }, ptr %t237 + %t240 = extractvalue { ptr, i64, i64 } %t239, 1 + %t241 = icmp uge i64 %t238, %t240 + br i1 %t241, label %range4236, label %inrange4237 +range4236: + call void @finch_panic_index(ptr @.str.2580, i64 1817, i64 %t238, i64 %t240) + unreachable +inrange4237: + %t242 = extractvalue { ptr, i64, i64 } %t239, 0 + %t243 = getelementptr inbounds %S.ast.Node, ptr %t242, i64 %t238 + %t244 = getelementptr inbounds %S.ast.Node, ptr %t243, i32 0, i32 5 + %t245 = load %S.ast.Type, ptr %t244 + %t246 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 + %t247 = load %S.ast.Type, ptr %t246 + %t248 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t249 = load { ptr, i64, i64 }, ptr %t248 + call void @finch.gen.bindType(ptr %t236, %S.ast.Type %t245, %S.ast.Type %t247, { ptr, i64, i64 } %t249, ptr %a137) + call void @finch.drop.S_gen_Val(ptr %a182) + br label %for.step4223 +for.step4223: + %t250 = load i64, ptr %a167 + %t251 = add i64 %t250, 1 + store i64 %t251, ptr %a167 + br label %for.cond4221 +for.end4224: + %t252 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i32 0, i32 1 + %t254 = load i64, ptr %t253 + store i64 0, ptr %a255 + br label %for.cond4238 +for.cond4238: + %t256 = load i64, ptr %a255 + %t257 = icmp slt i64 %t256, %t254 + br i1 %t257, label %for.body4239, label %for.end4241 +for.body4239: + %t258 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 + %t259 = load i64, ptr %a255 + %t260 = load { ptr, i64, i64 }, ptr %t258 + %t261 = extractvalue { ptr, i64, i64 } %t260, 1 + %t262 = icmp uge i64 %t259, %t261 + br i1 %t262, label %range4242, label %inrange4243 +range4242: + call void @finch_panic_index(ptr @.str.2581, i64 1820, i64 %t259, i64 %t261) + unreachable +inrange4243: + %t263 = extractvalue { ptr, i64, i64 } %t260, 0 + %t264 = getelementptr inbounds i1, ptr %t263, i64 %t259 + %t265 = load i1, ptr %t264 + %t266 = xor i1 %t265, true + br i1 %t266, label %then4244, label %endif4246 +then4244: + %t267 = load ptr, ptr %a1 + %t268 = load %S.ast.Node, ptr %a2 + %t269 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t270 = load i64, ptr %a255 + %t271 = load { ptr, i64, i64 }, ptr %t269 + %t272 = extractvalue { ptr, i64, i64 } %t271, 1 + %t273 = icmp uge i64 %t270, %t272 + br i1 %t273, label %range4247, label %inrange4248 +range4247: + call void @finch_panic_index(ptr @.str.2583, i64 1821, i64 %t270, i64 %t272) + unreachable +inrange4248: + %t274 = extractvalue { ptr, i64, i64 } %t271, 0 + %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t274, i64 %t270 + %t276 = load { ptr, i64, i64 }, ptr %t275 + store { ptr, i64, i64 } { ptr @.str.2582, i64 16, i64 0 }, ptr %a278 + store { ptr, i64, i64 } %t276, ptr %a279 + call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) + %t280 = load { ptr, i64, i64 }, ptr %a277 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.2584, i64 24, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t280, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + %t286 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t285, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t285, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t292, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.2585, i64 10, i64 0 }, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t292, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a293 + call void @finch.gen.fail(ptr %t267, %S.ast.Node %t268, { ptr, i64, i64 } %t297) + store { ptr, i64, i64 } %t297, ptr %a298 + call void @finch_str_drop(ptr %a298) + br label %endif4246 +endif4246: + br label %for.step4240 +for.step4240: + %t299 = load i64, ptr %a255 + %t300 = add i64 %t299, 1 + store i64 %t300, ptr %a255 + br label %for.cond4238 +for.end4241: + %t301 = load ptr, ptr %a1 + %t302 = load i64, ptr %a3 + %t303 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 + %t304 = load { ptr, i64, i64 }, ptr %t303 + %t305 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2586, i64 4, i64 0 }) + %t306 = load %S.ast.Node, ptr %a2 + %t307 = call i64 @finch.gen.instFn(ptr %t301, i64 %t302, { ptr, i64, i64 } %t304, %S.ast.Type %t305, %S.ast.Node %t306) + store %S.ast.Type %t305, ptr %a308 + call void @finch.drop.S_ast_Type(ptr %a308) + store i64 %t307, ptr %a309 + %t310 = load ptr, ptr %a1 + %t311 = icmp eq ptr %t310, null + br i1 %t311, label %panic4249, label %ok4250 +panic4249: + call void @finch_panic(ptr @.str.2587, i64 1825, ptr @.str.2588) + unreachable +ok4250: + %t312 = getelementptr inbounds %S.gen.Gen, ptr %t310, i32 0, i32 15 + %t313 = load i64, ptr %a309 + %t314 = load { ptr, i64, i64 }, ptr %t312 + %t315 = extractvalue { ptr, i64, i64 } %t314, 1 + %t316 = icmp uge i64 %t313, %t315 + br i1 %t316, label %range4251, label %inrange4252 +range4251: + call void @finch_panic_index(ptr @.str.2589, i64 1825, i64 %t313, i64 %t315) + unreachable +inrange4252: + %t317 = extractvalue { ptr, i64, i64 } %t314, 0 + %t318 = getelementptr inbounds %S.gen.FnSig, ptr %t317, i64 %t313 + %t319 = load %S.gen.FnSig, ptr %t318 + store %S.gen.FnSig %t319, ptr %a320 + call void @finch.copy.S_gen_FnSig(ptr %a321, ptr %a320) + %t322 = load %S.gen.FnSig, ptr %a321 + store %S.gen.FnSig %t322, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = load %S.ast.Node, ptr %a2 + %t326 = load %S.gen.FnSig, ptr %a323 + call void @finch.gen.noteCall(ptr %t324, %S.ast.Node %t325, %S.gen.FnSig %t326) + store { ptr, i64, i64 } zeroinitializer, ptr %a327 + %t328 = load i64, ptr %a47 + store i64 0, ptr %a329 + br label %for.cond4253 +for.cond4253: + %t330 = load i64, ptr %a329 + %t331 = icmp slt i64 %t330, %t328 + br i1 %t331, label %for.body4254, label %for.end4256 +for.body4254: + %t332 = load ptr, ptr %a1 + %t333 = load i64, ptr %a329 + %t334 = load { ptr, i64, i64 }, ptr %a159 + %t335 = extractvalue { ptr, i64, i64 } %t334, 1 + %t336 = icmp uge i64 %t333, %t335 + br i1 %t336, label %range4257, label %inrange4258 +range4257: + call void @finch_panic_index(ptr @.str.2590, i64 1829, i64 %t333, i64 %t335) + unreachable +inrange4258: + %t337 = extractvalue { ptr, i64, i64 } %t334, 0 + %t338 = getelementptr inbounds %S.gen.Val, ptr %t337, i64 %t333 + %t339 = load %S.gen.Val, ptr %t338 + %t340 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 13 + %t341 = load i64, ptr %a329 + %t342 = load { ptr, i64, i64 }, ptr %t340 + %t343 = extractvalue { ptr, i64, i64 } %t342, 1 + %t344 = icmp uge i64 %t341, %t343 + br i1 %t344, label %range4259, label %inrange4260 +range4259: + call void @finch_panic_index(ptr @.str.2591, i64 1829, i64 %t341, i64 %t343) + unreachable +inrange4260: + %t345 = extractvalue { ptr, i64, i64 } %t342, 0 + %t346 = getelementptr inbounds %S.ast.Type, ptr %t345, i64 %t341 + %t347 = load %S.ast.Type, ptr %t346 + %t348 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t349 = load i64, ptr %a4 + %t350 = load i64, ptr %a329 + %t351 = add i64 %t349, %t350 + %t352 = load { ptr, i64, i64 }, ptr %t348 + %t353 = extractvalue { ptr, i64, i64 } %t352, 1 + %t354 = icmp uge i64 %t351, %t353 + br i1 %t354, label %range4261, label %inrange4262 +range4261: + call void @finch_panic_index(ptr @.str.2592, i64 1829, i64 %t351, i64 %t353) + unreachable +inrange4262: + %t355 = extractvalue { ptr, i64, i64 } %t352, 0 + %t356 = getelementptr inbounds %S.ast.Node, ptr %t355, i64 %t351 + %t357 = load %S.ast.Node, ptr %t356 + %t358 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 14 + %t359 = load i64, ptr %a329 + %t360 = load { ptr, i64, i64 }, ptr %t358 + %t361 = extractvalue { ptr, i64, i64 } %t360, 1 + %t362 = icmp uge i64 %t359, %t361 + br i1 %t362, label %range4263, label %inrange4264 +range4263: + call void @finch_panic_index(ptr @.str.2594, i64 1829, i64 %t359, i64 %t361) + unreachable +inrange4264: + %t363 = extractvalue { ptr, i64, i64 } %t360, 0 + %t364 = getelementptr inbounds { ptr, i64, i64 }, ptr %t363, i64 %t359 + %t365 = load { ptr, i64, i64 }, ptr %t364 + store { ptr, i64, i64 } { ptr @.str.2593, i64 10, i64 0 }, ptr %a367 + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a366 + store { ptr, i64, i64 } %t369, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.2595, i64 1, i64 0 }, ptr %a372 + call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) + store { ptr, i64, i64 } %t369, ptr %a373 + call void @finch_str_drop(ptr %a373) + %t374 = load { ptr, i64, i64 }, ptr %a370 + %t375 = call %S.gen.Val @finch.gen.coerce(ptr %t332, %S.gen.Val %t339, %S.ast.Type %t347, %S.ast.Node %t357, { ptr, i64, i64 } %t374) + store { ptr, i64, i64 } %t374, ptr %a376 + call void @finch_str_drop(ptr %a376) + store %S.gen.Val %t375, ptr %a377 + %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1 + %t379 = load ptr, ptr %a1 + %t380 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 13 + %t381 = load i64, ptr %a329 + %t382 = load { ptr, i64, i64 }, ptr %t380 + %t383 = extractvalue { ptr, i64, i64 } %t382, 1 + %t384 = icmp uge i64 %t381, %t383 + br i1 %t384, label %range4265, label %inrange4266 +range4265: + call void @finch_panic_index(ptr @.str.2596, i64 1830, i64 %t381, i64 %t383) + unreachable +inrange4266: + %t385 = extractvalue { ptr, i64, i64 } %t382, 0 + %t386 = getelementptr inbounds %S.ast.Type, ptr %t385, i64 %t381 + %t387 = load %S.ast.Type, ptr %t386 + %t388 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t379, %S.ast.Type %t387) + store { ptr, i64, i64 } %t388, ptr %a390 + store { ptr, i64, i64 } { ptr @.str.2597, i64 1, i64 0 }, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t388, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + %t394 = getelementptr inbounds %S.gen.Val, ptr %a377, i32 0, i32 0 + %t395 = load { ptr, i64, i64 }, ptr %t394 + store { ptr, i64, i64 } %t393, ptr %a397 + store { ptr, i64, i64 } %t395, ptr %a398 + call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) + store { ptr, i64, i64 } %t393, ptr %a399 + call void @finch_str_drop(ptr %a399) + %t400 = load { ptr, i64, i64 }, ptr %a396 + %t401 = load i64, ptr %t378 + %t402 = add i64 %t401, 1 + call void @finch_arr_reserve(ptr %a327, i64 %t402, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t403 = load ptr, ptr %a327 + %t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %t403, i64 %t401 + store { ptr, i64, i64 } %t400, ptr %t404 + store i64 %t402, ptr %t378 + call void @finch.drop.S_gen_Val(ptr %a377) + br label %for.step4255 +for.step4255: + %t405 = load i64, ptr %a329 + %t406 = add i64 %t405, 1 + store i64 %t406, ptr %a329 + br label %for.cond4253 +for.end4256: + %t407 = load ptr, ptr %a1 + %t408 = load %S.gen.FnSig, ptr %a323 + %t409 = load %S.ast.Node, ptr %a2 + %t410 = load { ptr, i64, i64 }, ptr %a327 + %t411 = load { ptr, i64, i64 }, ptr %a5 + %t412 = call %S.gen.Val @finch.gen.emitCall(ptr %t407, %S.gen.FnSig %t408, %S.ast.Node %t409, { ptr, i64, i64 } %t410, { ptr, i64, i64 } %t411) + store %S.gen.Val %t412, ptr %a413 + store i64 0, ptr %a414 + br label %each.cond4267 +each.cond4267: + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 + %t416 = load i64, ptr %t415 + %t417 = load i64, ptr %a414 + %t418 = icmp slt i64 %t417, %t416 + br i1 %t418, label %each.body4268, label %each.end4270 +each.body4268: + %t419 = load ptr, ptr %a159 + %t420 = getelementptr inbounds %S.gen.Val, ptr %t419, i64 %t417 + %t421 = load %S.gen.Val, ptr %t420 + store %S.gen.Val %t421, ptr %a422 + %t423 = load ptr, ptr %a1 + %t424 = load %S.gen.Val, ptr %a422 + call void @finch.gen.release(ptr %t423, %S.gen.Val %t424) + br label %each.step4269 +each.step4269: + %t425 = load i64, ptr %a414 + %t426 = add i64 %t425, 1 + store i64 %t426, ptr %a414 + br label %each.cond4267 +each.end4270: + %t427 = load ptr, ptr %a1 + %t428 = load i64, ptr %a165 + call void @finch.gen.heldEnd(ptr %t427, i64 %t428) + %t429 = load %S.gen.Val, ptr %a413 + call void @finch.drop.arr_str(ptr %a327) + call void @finch.drop.S_gen_FnSig(ptr %a323) + call void @finch.drop.arr_S_gen_Val(ptr %a159) + call void @finch.drop.S_gen_Binds(ptr %a137) + call void @finch.drop.arr_S_ast_Type(ptr %a53) + call void @finch.drop.S_ast_Node(ptr %a42) + call void @finch.drop.S_gen_Template(ptr %a19) + ret %S.gen.Val %t429 +} + +define internal void @finch.copy.S_cimport_CField(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CField, ptr %src + store %S.cimport.CField %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.copy.arr_S_cimport_CField(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond4282 +n.cond4282: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body4283, label %n.end4284 +n.body4283: + %t8 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.cimport.CField, ptr %t2, i64 %t6 + call void @finch.copy.S_cimport_CField(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond4282 +n.end4284: + ret void +} + +define internal void @finch.copy.S_cimport_CStruct(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CStruct, ptr %src + store %S.cimport.CStruct %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_cimport_CField(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 4 + %t7 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal void @finch.gen.resolveCStruct(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca %S.cimport.CStruct, align 16 + %a29 = alloca %S.cimport.CStruct, align 16 + %a31 = alloca %S.cimport.CStruct, align 16 + %a42 = alloca i64, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca i64, align 16 + %a53 = alloca %S.cimport.CField, align 16 + %a60 = alloca %S.ast.Type, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.ast.Type, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4274, label %ok4275 +panic4274: + call void @finch_panic(ptr @.str.2598, i64 1843, ptr @.str.2599) + unreachable +ok4275: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 26 + %t6 = getelementptr inbounds %S.cimport.CImports, ptr %t5, i32 0, i32 3 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic4276, label %ok4277 +panic4276: + call void @finch_panic(ptr @.str.2600, i64 1843, ptr @.str.2601) + unreachable +ok4277: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 16 + %t10 = load i64, ptr %a2 + %t11 = load { ptr, i64, i64 }, ptr %t9 + %t12 = extractvalue { ptr, i64, i64 } %t11, 1 + %t13 = icmp uge i64 %t10, %t12 + br i1 %t13, label %range4278, label %inrange4279 +range4278: + call void @finch_panic_index(ptr @.str.2602, i64 1843, i64 %t10, i64 %t12) + unreachable +inrange4279: + %t14 = extractvalue { ptr, i64, i64 } %t11, 0 + %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i64 %t10 + %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i32 0, i32 1 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = call i64 @finch_map_find(ptr %t6, ptr %a18, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t20 = icmp slt i64 %t19, 0 + br i1 %t20, label %map.missing4280, label %map.found4281 +map.missing4280: + store { ptr, i64, i64 } zeroinitializer, ptr %a21 + store { ptr, i64, i64 } %t17, ptr %a22 + call void @finch_buf_str(ptr %a21, ptr %a22, i32 1) + call void @finch_map_missing(ptr @.str.2603, i64 1843, ptr %a21) + unreachable +map.found4281: + %t23 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 + %t24 = load ptr, ptr %t23 + %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t24, i64 %t19 + %t26 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t25, i32 0, i32 2 + %t27 = load %S.cimport.CStruct, ptr %t26 + store %S.cimport.CStruct %t27, ptr %a28 + call void @finch.copy.S_cimport_CStruct(ptr %a29, ptr %a28) + %t30 = load %S.cimport.CStruct, ptr %a29 + store %S.cimport.CStruct %t30, ptr %a31 + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic4285, label %ok4286 +panic4285: + call void @finch_panic(ptr @.str.2604, i64 1844, ptr @.str.2605) + unreachable +ok4286: + %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 16 + %t35 = load i64, ptr %a2 + %t36 = load { ptr, i64, i64 }, ptr %t34 + %t37 = extractvalue { ptr, i64, i64 } %t36, 1 + %t38 = icmp uge i64 %t35, %t37 + br i1 %t38, label %range4287, label %inrange4288 +range4287: + call void @finch_panic_index(ptr @.str.2606, i64 1844, i64 %t35, i64 %t37) + unreachable +inrange4288: + %t39 = extractvalue { ptr, i64, i64 } %t36, 0 + %t40 = getelementptr inbounds %S.gen.StructDef, ptr %t39, i64 %t35 + %t41 = getelementptr inbounds %S.gen.StructDef, ptr %t40, i32 0, i32 15 + store i64 1, ptr %t41 + store i64 0, ptr %a42 + store { ptr, i64, i64 } zeroinitializer, ptr %a43 + %t44 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 1 + store i64 0, ptr %a45 + br label %each.cond4289 +each.cond4289: + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = load i64, ptr %a45 + %t49 = icmp slt i64 %t48, %t47 + br i1 %t49, label %each.body4290, label %each.end4292 +each.body4290: + %t50 = load ptr, ptr %t44 + %t51 = getelementptr inbounds %S.cimport.CField, ptr %t50, i64 %t48 + %t52 = load %S.cimport.CField, ptr %t51 + store %S.cimport.CField %t52, ptr %a53 + %t54 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 5 + %t55 = load i1, ptr %t54 + br i1 %t55, label %then4293, label %endif4295 +then4293: + br label %each.step4291 +endif4295: + %t56 = load ptr, ptr %a1 + %t57 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 1 + %t58 = load %S.ast.Type, ptr %t57 + %t59 = call %S.ast.Type @finch.gen.resolve(ptr %t56, %S.ast.Type %t58, %S.ast.Node zeroinitializer) + store %S.ast.Type %t59, ptr %a60 + %t61 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.2607, i64 6, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br i1 %t66, label %then4296, label %endif4298 +then4296: + %t67 = load ptr, ptr %a1 + %t68 = load ptr, ptr %a1 + %t69 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 3 + %t70 = load { ptr, i64, i64 }, ptr %t69 + %t71 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 2 + %t72 = load { ptr, i64, i64 }, ptr %t71 + %t73 = call i64 @finch.gen.findStruct(ptr %t68, { ptr, i64, i64 } %t70, { ptr, i64, i64 } %t72) + call void @finch.gen.resolveStruct(ptr %t67, i64 %t73) + br label %endif4298 +endif4298: + %t74 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t75 = load i64, ptr %t74 + %t76 = load i64, ptr %a42 + %t77 = icmp sgt i64 %t75, %t76 + br i1 %t77, label %then4299, label %endif4301 +then4299: + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t79 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t80 = load i64, ptr %t79 + %t81 = load i64, ptr %a42 + %t82 = sub i64 %t80, %t81 + call void @finch_str_from_int(ptr %a83, i64 %t82) + %t84 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.2608, i64 1, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.2609, i64 6, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + %t95 = load i64, ptr %t78 + %t96 = add i64 %t95, 1 + call void @finch_arr_reserve(ptr %a43, i64 %t96, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t97 = load ptr, ptr %a43 + %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i64 %t95 + store { ptr, i64, i64 } %t94, ptr %t98 + store i64 %t96, ptr %t78 + br label %endif4301 +endif4301: + %t99 = load ptr, ptr %a1 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic4302, label %ok4303 +panic4302: + call void @finch_panic(ptr @.str.2610, i64 1858, ptr @.str.2611) + unreachable +ok4303: + %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 16 + %t102 = load i64, ptr %a2 + %t103 = load { ptr, i64, i64 }, ptr %t101 + %t104 = extractvalue { ptr, i64, i64 } %t103, 1 + %t105 = icmp uge i64 %t102, %t104 + br i1 %t105, label %range4304, label %inrange4305 +range4304: + call void @finch_panic_index(ptr @.str.2612, i64 1858, i64 %t102, i64 %t104) + unreachable +inrange4305: + %t106 = extractvalue { ptr, i64, i64 } %t103, 0 + %t107 = getelementptr inbounds %S.gen.StructDef, ptr %t106, i64 %t102 + %t108 = getelementptr inbounds %S.gen.StructDef, ptr %t107, i32 0, i32 11 + %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t108, i32 0, i32 1 + %t110 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 0 + %t111 = load { ptr, i64, i64 }, ptr %t110 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_copy(ptr %a113, ptr %a112) + %t114 = load { ptr, i64, i64 }, ptr %a113 + %t115 = load i64, ptr %t109 + %t116 = add i64 %t115, 1 + call void @finch_arr_reserve(ptr %t108, i64 %t116, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t117 = load ptr, ptr %t108 + %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t117, i64 %t115 + store { ptr, i64, i64 } %t114, ptr %t118 + store i64 %t116, ptr %t109 + %t119 = load ptr, ptr %a1 + %t120 = icmp eq ptr %t119, null + br i1 %t120, label %panic4306, label %ok4307 +panic4306: + call void @finch_panic(ptr @.str.2613, i64 1859, ptr @.str.2614) + unreachable +ok4307: + %t121 = getelementptr inbounds %S.gen.Gen, ptr %t119, i32 0, i32 16 + %t122 = load i64, ptr %a2 + %t123 = load { ptr, i64, i64 }, ptr %t121 + %t124 = extractvalue { ptr, i64, i64 } %t123, 1 + %t125 = icmp uge i64 %t122, %t124 + br i1 %t125, label %range4308, label %inrange4309 +range4308: + call void @finch_panic_index(ptr @.str.2615, i64 1859, i64 %t122, i64 %t124) + unreachable +inrange4309: + %t126 = extractvalue { ptr, i64, i64 } %t123, 0 + %t127 = getelementptr inbounds %S.gen.StructDef, ptr %t126, i64 %t122 + %t128 = getelementptr inbounds %S.gen.StructDef, ptr %t127, i32 0, i32 12 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 + %t130 = load %S.ast.Type, ptr %a60 + store %S.ast.Type %t130, ptr %a131 + call void @finch.copy.S_ast_Type(ptr %a132, ptr %a131) + %t133 = load %S.ast.Type, ptr %a132 + %t134 = load i64, ptr %t129 + %t135 = add i64 %t134, 1 + call void @finch_arr_reserve(ptr %t128, i64 %t135, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t136 = load ptr, ptr %t128 + %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 %t134 + store %S.ast.Type %t133, ptr %t137 + store i64 %t135, ptr %t129 + %t138 = load ptr, ptr %a1 + %t139 = icmp eq ptr %t138, null + br i1 %t139, label %panic4310, label %ok4311 +panic4310: + call void @finch_panic(ptr @.str.2616, i64 1860, ptr @.str.2617) + unreachable +ok4311: + %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 + %t141 = load i64, ptr %a2 + %t142 = load { ptr, i64, i64 }, ptr %t140 + %t143 = extractvalue { ptr, i64, i64 } %t142, 1 + %t144 = icmp uge i64 %t141, %t143 + br i1 %t144, label %range4312, label %inrange4313 +range4312: + call void @finch_panic_index(ptr @.str.2618, i64 1860, i64 %t141, i64 %t143) + unreachable +inrange4313: + %t145 = extractvalue { ptr, i64, i64 } %t142, 0 + %t146 = getelementptr inbounds %S.gen.StructDef, ptr %t145, i64 %t141 + %t147 = getelementptr inbounds %S.gen.StructDef, ptr %t146, i32 0, i32 3 + %t148 = getelementptr inbounds { ptr, i64, i64 }, ptr %t147, i32 0, i32 1 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t150 = load i64, ptr %t149 + %t151 = load i64, ptr %t148 + %t152 = add i64 %t151, 1 + call void @finch_arr_reserve(ptr %t147, i64 %t152, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t153 = load ptr, ptr %t147 + %t154 = getelementptr inbounds i64, ptr %t153, i64 %t151 + store i64 %t150, ptr %t154 + store i64 %t152, ptr %t148 + %t155 = load ptr, ptr %a1 + %t156 = icmp eq ptr %t155, null + br i1 %t156, label %panic4314, label %ok4315 +panic4314: + call void @finch_panic(ptr @.str.2619, i64 1861, ptr @.str.2620) + unreachable +ok4315: + %t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 16 + %t158 = load i64, ptr %a2 + %t159 = load { ptr, i64, i64 }, ptr %t157 + %t160 = extractvalue { ptr, i64, i64 } %t159, 1 + %t161 = icmp uge i64 %t158, %t160 + br i1 %t161, label %range4316, label %inrange4317 +range4316: + call void @finch_panic_index(ptr @.str.2621, i64 1861, i64 %t158, i64 %t160) + unreachable +inrange4317: + %t162 = extractvalue { ptr, i64, i64 } %t159, 0 + %t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i64 %t158 + %t164 = getelementptr inbounds %S.gen.StructDef, ptr %t163, i32 0, i32 4 + %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i32 0, i32 1 + %t166 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t167 = load i64, ptr %t166 + %t168 = load i64, ptr %t165 + %t169 = add i64 %t168, 1 + call void @finch_arr_reserve(ptr %t164, i64 %t169, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t170 = load ptr, ptr %t164 + %t171 = getelementptr inbounds i64, ptr %t170, i64 %t168 + store i64 %t167, ptr %t171 + store i64 %t169, ptr %t165 + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t173 = load ptr, ptr %a1 + %t174 = load %S.ast.Type, ptr %a60 + %t175 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t174) + %t176 = load i64, ptr %t172 + %t177 = add i64 %t176, 1 + call void @finch_arr_reserve(ptr %a43, i64 %t177, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t178 = load ptr, ptr %a43 + %t179 = getelementptr inbounds { ptr, i64, i64 }, ptr %t178, i64 %t176 + store { ptr, i64, i64 } %t175, ptr %t179 + store i64 %t177, ptr %t172 + %t180 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t181 = load i64, ptr %t180 + %t182 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 3 + %t183 = load i64, ptr %t182 + %t184 = add i64 %t181, %t183 + store i64 %t184, ptr %a42 + call void @finch.drop.S_ast_Type(ptr %a60) + br label %each.step4291 +each.step4291: + %t185 = load i64, ptr %a45 + %t186 = add i64 %t185, 1 + store i64 %t186, ptr %a45 + br label %each.cond4289 +each.end4292: + %t187 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 + %t188 = load i64, ptr %t187 + %t189 = load i64, ptr %a42 + %t190 = icmp sgt i64 %t188, %t189 + br i1 %t190, label %then4318, label %endif4320 +then4318: + %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t192 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 + %t193 = load i64, ptr %t192 + %t194 = load i64, ptr %a42 + %t195 = sub i64 %t193, %t194 + call void @finch_str_from_int(ptr %a196, i64 %t195) + %t197 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.2622, i64 1, i64 0 }, ptr %a199 + store { ptr, i64, i64 } %t197, ptr %a200 + call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) + store { ptr, i64, i64 } %t197, ptr %a201 + call void @finch_str_drop(ptr %a201) + %t202 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t202, ptr %a204 + store { ptr, i64, i64 } { ptr @.str.2623, i64 6, i64 0 }, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + %t208 = load i64, ptr %t191 + %t209 = add i64 %t208, 1 + call void @finch_arr_reserve(ptr %a43, i64 %t209, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t210 = load ptr, ptr %a43 + %t211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t210, i64 %t208 + store { ptr, i64, i64 } %t207, ptr %t211 + store i64 %t209, ptr %t191 + br label %endif4320 +endif4320: + %t212 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 + %t213 = load { ptr, i64, i64 }, ptr %t212 + %t214 = load ptr, ptr %a1 + %t215 = icmp eq ptr %t214, null + br i1 %t215, label %panic4321, label %ok4322 +panic4321: + call void @finch_panic(ptr @.str.2624, i64 1868, ptr @.str.2625) + unreachable +ok4322: + %t216 = getelementptr inbounds %S.gen.Gen, ptr %t214, i32 0, i32 16 + %t217 = load i64, ptr %a2 + %t218 = load { ptr, i64, i64 }, ptr %t216 + %t219 = extractvalue { ptr, i64, i64 } %t218, 1 + %t220 = icmp uge i64 %t217, %t219 + br i1 %t220, label %range4323, label %inrange4324 +range4323: + call void @finch_panic_index(ptr @.str.2626, i64 1868, i64 %t217, i64 %t219) + unreachable +inrange4324: + %t221 = extractvalue { ptr, i64, i64 } %t218, 0 + %t222 = getelementptr inbounds %S.gen.StructDef, ptr %t221, i64 %t217 + %t223 = getelementptr inbounds %S.gen.StructDef, ptr %t222, i32 0, i32 8 + store { ptr, i64, i64 } %t213, ptr %a224 + call void @finch_str_copy(ptr %a225, ptr %a224) + %t226 = load { ptr, i64, i64 }, ptr %a225 + %t227 = load { ptr, i64, i64 }, ptr %t223 + store { ptr, i64, i64 } %t226, ptr %t223 + store { ptr, i64, i64 } %t227, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 5 + %t230 = load i1, ptr %t229 + br label %logic.from4325 +logic.from4325: + br i1 %t230, label %logic.rhs4326, label %logic.end4327 +logic.rhs4326: + %t231 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 + %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i32 0, i32 1 + %t233 = load i64, ptr %t232 + %t234 = icmp eq i64 %t233, 0 + br label %logic.rend4328 +logic.rend4328: + br label %logic.end4327 +logic.end4327: + %t235 = phi i1 [ false, %logic.from4325 ], [ %t234, %logic.rend4328 ] + br i1 %t235, label %then4329, label %endif4331 +then4329: + %t236 = load ptr, ptr %a1 + %t237 = icmp eq ptr %t236, null + br i1 %t237, label %panic4332, label %ok4333 +panic4332: + call void @finch_panic(ptr @.str.2628, i64 1870, ptr @.str.2629) + unreachable +ok4333: + %t238 = getelementptr inbounds %S.gen.Gen, ptr %t236, i32 0, i32 16 + %t239 = load i64, ptr %a2 + %t240 = load { ptr, i64, i64 }, ptr %t238 + %t241 = extractvalue { ptr, i64, i64 } %t240, 1 + %t242 = icmp uge i64 %t239, %t241 + br i1 %t242, label %range4334, label %inrange4335 +range4334: + call void @finch_panic_index(ptr @.str.2630, i64 1870, i64 %t239, i64 %t241) + unreachable +inrange4335: + %t243 = extractvalue { ptr, i64, i64 } %t240, 0 + %t244 = getelementptr inbounds %S.gen.StructDef, ptr %t243, i64 %t239 + %t245 = getelementptr inbounds %S.gen.StructDef, ptr %t244, i32 0, i32 8 + %t246 = load { ptr, i64, i64 }, ptr %t245 + store { ptr, i64, i64 } { ptr @.str.2627, i64 49, i64 0 }, ptr %t245 + store { ptr, i64, i64 } %t246, ptr %a247 + call void @finch_str_drop(ptr %a247) + br label %endif4331 +endif4331: + %t248 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 + %t249 = load i64, ptr %t248 + %t250 = load ptr, ptr %a1 + %t251 = icmp eq ptr %t250, null + br i1 %t251, label %panic4336, label %ok4337 +panic4336: + call void @finch_panic(ptr @.str.2631, i64 1872, ptr @.str.2632) + unreachable +ok4337: + %t252 = getelementptr inbounds %S.gen.Gen, ptr %t250, i32 0, i32 16 + %t253 = load i64, ptr %a2 + %t254 = load { ptr, i64, i64 }, ptr %t252 + %t255 = extractvalue { ptr, i64, i64 } %t254, 1 + %t256 = icmp uge i64 %t253, %t255 + br i1 %t256, label %range4338, label %inrange4339 +range4338: + call void @finch_panic_index(ptr @.str.2633, i64 1872, i64 %t253, i64 %t255) + unreachable +inrange4339: + %t257 = extractvalue { ptr, i64, i64 } %t254, 0 + %t258 = getelementptr inbounds %S.gen.StructDef, ptr %t257, i64 %t253 + %t259 = getelementptr inbounds %S.gen.StructDef, ptr %t258, i32 0, i32 9 + store i64 %t249, ptr %t259 + %t260 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 3 + %t261 = load i64, ptr %t260 + %t262 = load ptr, ptr %a1 + %t263 = icmp eq ptr %t262, null + br i1 %t263, label %panic4340, label %ok4341 +panic4340: + call void @finch_panic(ptr @.str.2634, i64 1873, ptr @.str.2635) + unreachable +ok4341: + %t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 16 + %t265 = load i64, ptr %a2 + %t266 = load { ptr, i64, i64 }, ptr %t264 + %t267 = extractvalue { ptr, i64, i64 } %t266, 1 + %t268 = icmp uge i64 %t265, %t267 + br i1 %t268, label %range4342, label %inrange4343 +range4342: + call void @finch_panic_index(ptr @.str.2636, i64 1873, i64 %t265, i64 %t267) + unreachable +inrange4343: + %t269 = extractvalue { ptr, i64, i64 } %t266, 0 + %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i64 %t265 + %t271 = getelementptr inbounds %S.gen.StructDef, ptr %t270, i32 0, i32 10 + store i64 %t261, ptr %t271 + %t272 = load ptr, ptr %a1 + %t273 = icmp eq ptr %t272, null + br i1 %t273, label %panic4344, label %ok4345 +panic4344: + call void @finch_panic(ptr @.str.2637, i64 1874, ptr @.str.2638) + unreachable +ok4345: + %t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 16 + %t275 = load i64, ptr %a2 + %t276 = load { ptr, i64, i64 }, ptr %t274 + %t277 = extractvalue { ptr, i64, i64 } %t276, 1 + %t278 = icmp uge i64 %t275, %t277 + br i1 %t278, label %range4346, label %inrange4347 +range4346: + call void @finch_panic_index(ptr @.str.2639, i64 1874, i64 %t275, i64 %t277) + unreachable +inrange4347: + %t279 = extractvalue { ptr, i64, i64 } %t276, 0 + %t280 = getelementptr inbounds %S.gen.StructDef, ptr %t279, i64 %t275 + %t281 = getelementptr inbounds %S.gen.StructDef, ptr %t280, i32 0, i32 15 + store i64 2, ptr %t281 + %t282 = load ptr, ptr %a1 + %t283 = icmp eq ptr %t282, null + br i1 %t283, label %panic4348, label %ok4349 +panic4348: + call void @finch_panic(ptr @.str.2640, i64 1875, ptr @.str.2641) + unreachable +ok4349: + %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 2 + %t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i32 0, i32 1 + %t286 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 0 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } { ptr @.str.2642, i64 5, i64 0 }, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.2643, i64 10, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2644, i64 2, i64 0 }, ptr %a298 + call void @finch_str_join(ptr %a299, ptr %a43, ptr %a298) + %t300 = load { ptr, i64, i64 }, ptr %a299 + store { ptr, i64, i64 } %t296, ptr %a302 + store { ptr, i64, i64 } %t300, ptr %a303 + call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) + store { ptr, i64, i64 } %t296, ptr %a304 + call void @finch_str_drop(ptr %a304) + store { ptr, i64, i64 } %t300, ptr %a305 + call void @finch_str_drop(ptr %a305) + %t306 = load { ptr, i64, i64 }, ptr %a301 + store { ptr, i64, i64 } %t306, ptr %a308 + store { ptr, i64, i64 } { ptr @.str.2645, i64 2, i64 0 }, ptr %a309 + call void @finch_str_concat(ptr %a307, ptr %a308, ptr %a309) + store { ptr, i64, i64 } %t306, ptr %a310 + call void @finch_str_drop(ptr %a310) + %t311 = load { ptr, i64, i64 }, ptr %a307 + %t312 = load i64, ptr %t285 + %t313 = add i64 %t312, 1 + call void @finch_arr_reserve(ptr %t284, i64 %t313, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t314 = load ptr, ptr %t284 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 %t312 + store { ptr, i64, i64 } %t311, ptr %t315 + store i64 %t313, ptr %t285 + call void @finch.drop.arr_str(ptr %a43) + call void @finch.drop.S_cimport_CStruct(ptr %a31) + ret void +} + +define internal void @finch.gen.resolveStruct(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4350, label %ok4351 +panic4350: + call void @finch_panic(ptr @.str.2646, i64 1879, ptr @.str.2647) + unreachable +ok4351: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 + %t6 = load i64, ptr %a2 + %t7 = load { ptr, i64, i64 }, ptr %t5 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 %t6, %t8 + br i1 %t9, label %range4352, label %inrange4353 +range4352: + call void @finch_panic_index(ptr @.str.2648, i64 1879, i64 %t6, i64 %t8) + unreachable +inrange4353: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.gen.StructDef, ptr %t10, i64 %t6 + %t12 = getelementptr inbounds %S.gen.StructDef, ptr %t11, i32 0, i32 15 + %t13 = load i64, ptr %t12 + %t14 = icmp eq i64 %t13, 2 + br i1 %t14, label %then4354, label %endif4356 +then4354: + ret void +endif4356: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic4357, label %ok4358 +panic4357: + call void @finch_panic(ptr @.str.2649, i64 1882, ptr @.str.2650) + unreachable +ok4358: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 16 + %t18 = load i64, ptr %a2 + %t19 = load { ptr, i64, i64 }, ptr %t17 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range4359, label %inrange4360 +range4359: + call void @finch_panic_index(ptr @.str.2651, i64 1882, i64 %t18, i64 %t20) + unreachable +inrange4360: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i64 %t18 + %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i32 0, i32 2 + %t25 = load i1, ptr %t24 + br i1 %t25, label %then4361, label %endif4363 +then4361: + %t26 = load ptr, ptr %a1 + %t27 = load i64, ptr %a2 + call void @finch.gen.resolveCStruct(ptr %t26, i64 %t27) + ret void +endif4363: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic4364, label %ok4365 +panic4364: + call void @finch_panic(ptr @.str.2652, i64 1886, ptr @.str.2653) + unreachable +ok4365: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 + %t31 = load i64, ptr %a2 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range4366, label %inrange4367 +range4366: + call void @finch_panic_index(ptr @.str.2654, i64 1886, i64 %t31, i64 %t33) + unreachable +inrange4367: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 5 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 + %t39 = load i64, ptr %t38 + %t40 = icmp eq i64 %t39, 0 + br i1 %t40, label %then4368, label %endif4370 +then4368: + %t41 = load ptr, ptr %a1 + %t42 = load i64, ptr %a2 + call void @finch.gen.resolveStructBody(ptr %t41, i64 %t42) + ret void +endif4370: + %t43 = load ptr, ptr %a1 + %t44 = icmp eq ptr %t43, null + br i1 %t44, label %panic4371, label %ok4372 +panic4371: + call void @finch_panic(ptr @.str.2655, i64 1891, ptr @.str.2656) + unreachable +ok4372: + %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 18 + %t46 = load { ptr, i64, i64 }, ptr %t45 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch.copy.arr_str(ptr %a48, ptr %a47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t49, ptr %a50 + %t51 = load ptr, ptr %a1 + %t52 = icmp eq ptr %t51, null + br i1 %t52, label %panic4373, label %ok4374 +panic4373: + call void @finch_panic(ptr @.str.2657, i64 1892, ptr @.str.2658) + unreachable +ok4374: + %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 19 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t57, ptr %a58 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic4375, label %ok4376 +panic4375: + call void @finch_panic(ptr @.str.2659, i64 1893, ptr @.str.2660) + unreachable +ok4376: + %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 20 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t65, ptr %a66 + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic4377, label %ok4378 +panic4377: + call void @finch_panic(ptr @.str.2661, i64 1894, ptr @.str.2662) + unreachable +ok4378: + %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 16 + %t70 = load i64, ptr %a2 + %t71 = load { ptr, i64, i64 }, ptr %t69 + %t72 = extractvalue { ptr, i64, i64 } %t71, 1 + %t73 = icmp uge i64 %t70, %t72 + br i1 %t73, label %range4379, label %inrange4380 +range4379: + call void @finch_panic_index(ptr @.str.2663, i64 1894, i64 %t70, i64 %t72) + unreachable +inrange4380: + %t74 = extractvalue { ptr, i64, i64 } %t71, 0 + %t75 = getelementptr inbounds %S.gen.StructDef, ptr %t74, i64 %t70 + %t76 = getelementptr inbounds %S.gen.StructDef, ptr %t75, i32 0, i32 6 + %t77 = load { ptr, i64, i64 }, ptr %t76 + %t78 = load ptr, ptr %a1 + %t79 = icmp eq ptr %t78, null + br i1 %t79, label %panic4381, label %ok4382 +panic4381: + call void @finch_panic(ptr @.str.2664, i64 1894, ptr @.str.2665) + unreachable +ok4382: + %t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 18 + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch.copy.arr_str(ptr %a82, ptr %a81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } %t83, ptr %t80 + store { ptr, i64, i64 } %t84, ptr %a85 + call void @finch.drop.arr_str(ptr %a85) + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic4383, label %ok4384 +panic4383: + call void @finch_panic(ptr @.str.2666, i64 1895, ptr @.str.2667) + unreachable +ok4384: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 16 + %t89 = load i64, ptr %a2 + %t90 = load { ptr, i64, i64 }, ptr %t88 + %t91 = extractvalue { ptr, i64, i64 } %t90, 1 + %t92 = icmp uge i64 %t89, %t91 + br i1 %t92, label %range4385, label %inrange4386 +range4385: + call void @finch_panic_index(ptr @.str.2668, i64 1895, i64 %t89, i64 %t91) + unreachable +inrange4386: + %t93 = extractvalue { ptr, i64, i64 } %t90, 0 + %t94 = getelementptr inbounds %S.gen.StructDef, ptr %t93, i64 %t89 + %t95 = getelementptr inbounds %S.gen.StructDef, ptr %t94, i32 0, i32 7 + %t96 = load { ptr, i64, i64 }, ptr %t95 + %t97 = load ptr, ptr %a1 + %t98 = icmp eq ptr %t97, null + br i1 %t98, label %panic4387, label %ok4388 +panic4387: + call void @finch_panic(ptr @.str.2669, i64 1895, ptr @.str.2670) + unreachable +ok4388: + %t99 = getelementptr inbounds %S.gen.Gen, ptr %t97, i32 0, i32 19 + store { ptr, i64, i64 } %t96, ptr %a100 + call void @finch.copy.arr_S_ast_Type(ptr %a101, ptr %a100) + %t102 = load { ptr, i64, i64 }, ptr %a101 + %t103 = load { ptr, i64, i64 }, ptr %t99 + store { ptr, i64, i64 } %t102, ptr %t99 + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch.drop.arr_S_ast_Type(ptr %a104) + %t105 = load ptr, ptr %a1 + %t106 = icmp eq ptr %t105, null + br i1 %t106, label %panic4389, label %ok4390 +panic4389: + call void @finch_panic(ptr @.str.2672, i64 1896, ptr @.str.2673) + unreachable +ok4390: + %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 16 + %t108 = load i64, ptr %a2 + %t109 = load { ptr, i64, i64 }, ptr %t107 + %t110 = extractvalue { ptr, i64, i64 } %t109, 1 + %t111 = icmp uge i64 %t108, %t110 + br i1 %t111, label %range4391, label %inrange4392 +range4391: + call void @finch_panic_index(ptr @.str.2674, i64 1896, i64 %t108, i64 %t110) + unreachable +inrange4392: + %t112 = extractvalue { ptr, i64, i64 } %t109, 0 + %t113 = getelementptr inbounds %S.gen.StructDef, ptr %t112, i64 %t108 + %t114 = getelementptr inbounds %S.gen.StructDef, ptr %t113, i32 0, i32 1 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } { ptr @.str.2671, i64 17, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.2675, i64 1, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = load ptr, ptr %a1 + %t126 = icmp eq ptr %t125, null + br i1 %t126, label %panic4393, label %ok4394 +panic4393: + call void @finch_panic(ptr @.str.2676, i64 1896, ptr @.str.2677) + unreachable +ok4394: + %t127 = getelementptr inbounds %S.gen.Gen, ptr %t125, i32 0, i32 20 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t124, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load ptr, ptr %a1 + %t131 = load i64, ptr %a2 + call void @finch.gen.resolveStructBody(ptr %t130, i64 %t131) + %t132 = load { ptr, i64, i64 }, ptr %a50 + %t133 = load ptr, ptr %a1 + %t134 = icmp eq ptr %t133, null + br i1 %t134, label %panic4395, label %ok4396 +panic4395: + call void @finch_panic(ptr @.str.2678, i64 1898, ptr @.str.2679) + unreachable +ok4396: + %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 18 + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch.copy.arr_str(ptr %a137, ptr %a136) + %t138 = load { ptr, i64, i64 }, ptr %a137 + %t139 = load { ptr, i64, i64 }, ptr %t135 + store { ptr, i64, i64 } %t138, ptr %t135 + store { ptr, i64, i64 } %t139, ptr %a140 + call void @finch.drop.arr_str(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a58 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic4397, label %ok4398 +panic4397: + call void @finch_panic(ptr @.str.2680, i64 1899, ptr @.str.2681) + unreachable +ok4398: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 19 + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch.copy.arr_S_ast_Type(ptr %a146, ptr %a145) + %t147 = load { ptr, i64, i64 }, ptr %a146 + %t148 = load { ptr, i64, i64 }, ptr %t144 + store { ptr, i64, i64 } %t147, ptr %t144 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch.drop.arr_S_ast_Type(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a66 + %t151 = load ptr, ptr %a1 + %t152 = icmp eq ptr %t151, null + br i1 %t152, label %panic4399, label %ok4400 +panic4399: + call void @finch_panic(ptr @.str.2682, i64 1900, ptr @.str.2683) + unreachable +ok4400: + %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 20 + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_copy(ptr %a155, ptr %a154) + %t156 = load { ptr, i64, i64 }, ptr %a155 + %t157 = load { ptr, i64, i64 }, ptr %t153 + store { ptr, i64, i64 } %t156, ptr %t153 + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_drop(ptr %a158) + call void @finch_str_drop(ptr %a66) + call void @finch.drop.arr_S_ast_Type(ptr %a58) + call void @finch.drop.arr_str(ptr %a50) + ret void +} + +define internal void @finch.gen.resolveStructBody(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a40 = alloca %S.ast.Node, align 16 + %a41 = alloca %S.ast.Node, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca i1, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca i64, align 16 + %a142 = alloca %S.ast.Node, align 16 + %a148 = alloca %S.ast.Type, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca %S.ast.Type, align 16 + %a222 = alloca %S.ast.Type, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4401, label %ok4402 +panic4401: + call void @finch_panic(ptr @.str.2684, i64 1904, ptr @.str.2685) + unreachable +ok4402: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4403, label %ok4404 +panic4403: + call void @finch_panic(ptr @.str.2686, i64 1904, ptr @.str.2687) + unreachable +ok4404: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range4405, label %inrange4406 +range4405: + call void @finch_panic_index(ptr @.str.2688, i64 1904, i64 %t9, i64 %t11) + unreachable +inrange4406: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 + %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i32 0, i32 13 + %t16 = load i64, ptr %t15 + %t17 = load { ptr, i64, i64 }, ptr %t5 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range4407, label %inrange4408 +range4407: + call void @finch_panic_index(ptr @.str.2689, i64 1904, i64 %t16, i64 %t18) + unreachable +inrange4408: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.ast.Program, ptr %t20, i64 %t16 + %t22 = getelementptr inbounds %S.ast.Program, ptr %t21, i32 0, i32 6 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic4409, label %ok4410 +panic4409: + call void @finch_panic(ptr @.str.2690, i64 1904, ptr @.str.2691) + unreachable +ok4410: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 16 + %t26 = load i64, ptr %a2 + %t27 = load { ptr, i64, i64 }, ptr %t25 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 %t26, %t28 + br i1 %t29, label %range4411, label %inrange4412 +range4411: + call void @finch_panic_index(ptr @.str.2692, i64 1904, i64 %t26, i64 %t28) + unreachable +inrange4412: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds %S.gen.StructDef, ptr %t30, i64 %t26 + %t32 = getelementptr inbounds %S.gen.StructDef, ptr %t31, i32 0, i32 14 + %t33 = load i64, ptr %t32 + %t34 = load { ptr, i64, i64 }, ptr %t22 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 %t33, %t35 + br i1 %t36, label %range4413, label %inrange4414 +range4413: + call void @finch_panic_index(ptr @.str.2693, i64 1904, i64 %t33, i64 %t35) + unreachable +inrange4414: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 + %t39 = load %S.ast.Node, ptr %t38 + store %S.ast.Node %t39, ptr %a40 + call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) + %t42 = load %S.ast.Node, ptr %a41 + store %S.ast.Node %t42, ptr %a43 + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic4415, label %ok4416 +panic4415: + call void @finch_panic(ptr @.str.2694, i64 1905, ptr @.str.2695) + unreachable +ok4416: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 16 + %t47 = load i64, ptr %a2 + %t48 = load { ptr, i64, i64 }, ptr %t46 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range4417, label %inrange4418 +range4417: + call void @finch_panic_index(ptr @.str.2696, i64 1905, i64 %t47, i64 %t49) + unreachable +inrange4418: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds %S.gen.StructDef, ptr %t51, i64 %t47 + %t53 = getelementptr inbounds %S.gen.StructDef, ptr %t52, i32 0, i32 15 + %t54 = load i64, ptr %t53 + %t55 = icmp eq i64 %t54, 1 + br i1 %t55, label %then4419, label %endif4421 +then4419: + %t56 = load ptr, ptr %a1 + %t57 = load %S.ast.Node, ptr %a43 + %t58 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } { ptr @.str.2697, i64 11, i64 0 }, ptr %a61 + store { ptr, i64, i64 } %t59, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t63, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.2698, i64 26, i64 0 }, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t63, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a64 + %t69 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t70 = load { ptr, i64, i64 }, ptr %t69 + store { ptr, i64, i64 } %t68, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t68, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t75, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.2699, i64 7, i64 0 }, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t80, ptr %a84 + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t80, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t87, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.2700, i64 15, i64 0 }, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t87, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t92) + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + br label %endif4421 +endif4421: + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic4422, label %ok4423 +panic4422: + call void @finch_panic(ptr @.str.2701, i64 1908, ptr @.str.2702) + unreachable +ok4423: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 16 + %t97 = load i64, ptr %a2 + %t98 = load { ptr, i64, i64 }, ptr %t96 + %t99 = extractvalue { ptr, i64, i64 } %t98, 1 + %t100 = icmp uge i64 %t97, %t99 + br i1 %t100, label %range4424, label %inrange4425 +range4424: + call void @finch_panic_index(ptr @.str.2703, i64 1908, i64 %t97, i64 %t99) + unreachable +inrange4425: + %t101 = extractvalue { ptr, i64, i64 } %t98, 0 + %t102 = getelementptr inbounds %S.gen.StructDef, ptr %t101, i64 %t97 + %t103 = getelementptr inbounds %S.gen.StructDef, ptr %t102, i32 0, i32 15 + store i64 1, ptr %t103 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic4426, label %ok4427 +panic4426: + call void @finch_panic(ptr @.str.2704, i64 1909, ptr @.str.2705) + unreachable +ok4427: + %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 14 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_copy(ptr %a109, ptr %a108) + %t110 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t110, ptr %a111 + %t112 = load ptr, ptr %a1 + %t113 = icmp eq ptr %t112, null + br i1 %t113, label %panic4428, label %ok4429 +panic4428: + call void @finch_panic(ptr @.str.2706, i64 1910, ptr @.str.2707) + unreachable +ok4429: + %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 16 + %t115 = load i64, ptr %a2 + %t116 = load { ptr, i64, i64 }, ptr %t114 + %t117 = extractvalue { ptr, i64, i64 } %t116, 1 + %t118 = icmp uge i64 %t115, %t117 + br i1 %t118, label %range4430, label %inrange4431 +range4430: + call void @finch_panic_index(ptr @.str.2708, i64 1910, i64 %t115, i64 %t117) + unreachable +inrange4431: + %t119 = extractvalue { ptr, i64, i64 } %t116, 0 + %t120 = getelementptr inbounds %S.gen.StructDef, ptr %t119, i64 %t115 + %t121 = getelementptr inbounds %S.gen.StructDef, ptr %t120, i32 0, i32 0 + %t122 = load { ptr, i64, i64 }, ptr %t121 + %t123 = load ptr, ptr %a1 + %t124 = icmp eq ptr %t123, null + br i1 %t124, label %panic4432, label %ok4433 +panic4432: + call void @finch_panic(ptr @.str.2709, i64 1910, ptr @.str.2710) + unreachable +ok4433: + %t125 = getelementptr inbounds %S.gen.Gen, ptr %t123, i32 0, i32 14 + store { ptr, i64, i64 } %t122, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + %t129 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t128, ptr %t125 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + store i1 false, ptr %a131 + store { ptr, i64, i64 } zeroinitializer, ptr %a132 + %t133 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 9 + store i64 0, ptr %a134 + br label %each.cond4434 +each.cond4434: + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = load i64, ptr %a134 + %t138 = icmp slt i64 %t137, %t136 + br i1 %t138, label %each.body4435, label %each.end4437 +each.body4435: + %t139 = load ptr, ptr %t133 + %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 %t137 + %t141 = load %S.ast.Node, ptr %t140 + store %S.ast.Node %t141, ptr %a142 + %t143 = load ptr, ptr %a1 + %t144 = getelementptr inbounds %S.ast.Node, ptr %a142, i32 0, i32 5 + %t145 = load %S.ast.Type, ptr %t144 + %t146 = load %S.ast.Node, ptr %a142 + %t147 = call %S.ast.Type @finch.gen.resolve(ptr %t143, %S.ast.Type %t145, %S.ast.Node %t146) + store %S.ast.Type %t147, ptr %a148 + %t149 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 0 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.2711, i64 6, i64 0 }, ptr %a152 + %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) + %t154 = icmp ne i32 %t153, 0 + br i1 %t154, label %then4438, label %endif4440 +then4438: + %t155 = load ptr, ptr %a1 + %t156 = load ptr, ptr %a1 + %t157 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 3 + %t158 = load { ptr, i64, i64 }, ptr %t157 + %t159 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 2 + %t160 = load { ptr, i64, i64 }, ptr %t159 + %t161 = call i64 @finch.gen.findStruct(ptr %t156, { ptr, i64, i64 } %t158, { ptr, i64, i64 } %t160) + call void @finch.gen.resolveStruct(ptr %t155, i64 %t161) + br label %endif4440 +endif4440: + %t162 = load ptr, ptr %a1 + %t163 = icmp eq ptr %t162, null + br i1 %t163, label %panic4441, label %ok4442 +panic4441: + call void @finch_panic(ptr @.str.2712, i64 1918, ptr @.str.2713) + unreachable +ok4442: + %t164 = getelementptr inbounds %S.gen.Gen, ptr %t162, i32 0, i32 16 + %t165 = load i64, ptr %a2 + %t166 = load { ptr, i64, i64 }, ptr %t164 + %t167 = extractvalue { ptr, i64, i64 } %t166, 1 + %t168 = icmp uge i64 %t165, %t167 + br i1 %t168, label %range4443, label %inrange4444 +range4443: + call void @finch_panic_index(ptr @.str.2714, i64 1918, i64 %t165, i64 %t167) + unreachable +inrange4444: + %t169 = extractvalue { ptr, i64, i64 } %t166, 0 + %t170 = getelementptr inbounds %S.gen.StructDef, ptr %t169, i64 %t165 + %t171 = getelementptr inbounds %S.gen.StructDef, ptr %t170, i32 0, i32 3 + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 + %t173 = load ptr, ptr %a1 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic4445, label %ok4446 +panic4445: + call void @finch_panic(ptr @.str.2715, i64 1918, ptr @.str.2716) + unreachable +ok4446: + %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 16 + %t176 = load i64, ptr %a2 + %t177 = load { ptr, i64, i64 }, ptr %t175 + %t178 = extractvalue { ptr, i64, i64 } %t177, 1 + %t179 = icmp uge i64 %t176, %t178 + br i1 %t179, label %range4447, label %inrange4448 +range4447: + call void @finch_panic_index(ptr @.str.2717, i64 1918, i64 %t176, i64 %t178) + unreachable +inrange4448: + %t180 = extractvalue { ptr, i64, i64 } %t177, 0 + %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t176 + %t182 = getelementptr inbounds %S.gen.StructDef, ptr %t181, i32 0, i32 11 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 + %t184 = load i64, ptr %t183 + %t185 = load i64, ptr %t172 + %t186 = add i64 %t185, 1 + call void @finch_arr_reserve(ptr %t171, i64 %t186, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t187 = load ptr, ptr %t171 + %t188 = getelementptr inbounds i64, ptr %t187, i64 %t185 + store i64 %t184, ptr %t188 + store i64 %t186, ptr %t172 + %t189 = load ptr, ptr %a1 + %t190 = icmp eq ptr %t189, null + br i1 %t190, label %panic4449, label %ok4450 +panic4449: + call void @finch_panic(ptr @.str.2718, i64 1919, ptr @.str.2719) + unreachable +ok4450: + %t191 = getelementptr inbounds %S.gen.Gen, ptr %t189, i32 0, i32 16 + %t192 = load i64, ptr %a2 + %t193 = load { ptr, i64, i64 }, ptr %t191 + %t194 = extractvalue { ptr, i64, i64 } %t193, 1 + %t195 = icmp uge i64 %t192, %t194 + br i1 %t195, label %range4451, label %inrange4452 +range4451: + call void @finch_panic_index(ptr @.str.2720, i64 1919, i64 %t192, i64 %t194) + unreachable +inrange4452: + %t196 = extractvalue { ptr, i64, i64 } %t193, 0 + %t197 = getelementptr inbounds %S.gen.StructDef, ptr %t196, i64 %t192 + %t198 = getelementptr inbounds %S.gen.StructDef, ptr %t197, i32 0, i32 11 + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t198, i32 0, i32 1 + %t200 = getelementptr inbounds %S.ast.Node, ptr %a142, i32 0, i32 1 + %t201 = load { ptr, i64, i64 }, ptr %t200 + store { ptr, i64, i64 } %t201, ptr %a202 + call void @finch_str_copy(ptr %a203, ptr %a202) + %t204 = load { ptr, i64, i64 }, ptr %a203 + %t205 = load i64, ptr %t199 + %t206 = add i64 %t205, 1 + call void @finch_arr_reserve(ptr %t198, i64 %t206, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t207 = load ptr, ptr %t198 + %t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %t207, i64 %t205 + store { ptr, i64, i64 } %t204, ptr %t208 + store i64 %t206, ptr %t199 + %t209 = load ptr, ptr %a1 + %t210 = icmp eq ptr %t209, null + br i1 %t210, label %panic4453, label %ok4454 +panic4453: + call void @finch_panic(ptr @.str.2721, i64 1920, ptr @.str.2722) + unreachable +ok4454: + %t211 = getelementptr inbounds %S.gen.Gen, ptr %t209, i32 0, i32 16 + %t212 = load i64, ptr %a2 + %t213 = load { ptr, i64, i64 }, ptr %t211 + %t214 = extractvalue { ptr, i64, i64 } %t213, 1 + %t215 = icmp uge i64 %t212, %t214 + br i1 %t215, label %range4455, label %inrange4456 +range4455: + call void @finch_panic_index(ptr @.str.2723, i64 1920, i64 %t212, i64 %t214) + unreachable +inrange4456: + %t216 = extractvalue { ptr, i64, i64 } %t213, 0 + %t217 = getelementptr inbounds %S.gen.StructDef, ptr %t216, i64 %t212 + %t218 = getelementptr inbounds %S.gen.StructDef, ptr %t217, i32 0, i32 12 + %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i32 0, i32 1 + %t220 = load %S.ast.Type, ptr %a148 + store %S.ast.Type %t220, ptr %a221 + call void @finch.copy.S_ast_Type(ptr %a222, ptr %a221) + %t223 = load %S.ast.Type, ptr %a222 + %t224 = load i64, ptr %t219 + %t225 = add i64 %t224, 1 + call void @finch_arr_reserve(ptr %t218, i64 %t225, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t226 = load ptr, ptr %t218 + %t227 = getelementptr inbounds %S.ast.Type, ptr %t226, i64 %t224 + store %S.ast.Type %t223, ptr %t227 + store i64 %t225, ptr %t219 + %t228 = load ptr, ptr %a1 + %t229 = load %S.ast.Type, ptr %a148 + %t230 = call i1 @finch.gen.owning(ptr %t228, %S.ast.Type %t229) + br i1 %t230, label %then4457, label %endif4459 +then4457: + store i1 true, ptr %a131 + br label %endif4459 +endif4459: + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + %t232 = load ptr, ptr %a1 + %t233 = load %S.ast.Type, ptr %a148 + %t234 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t232, %S.ast.Type %t233) + %t235 = load i64, ptr %t231 + %t236 = add i64 %t235, 1 + call void @finch_arr_reserve(ptr %a132, i64 %t236, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t237 = load ptr, ptr %a132 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t235 + store { ptr, i64, i64 } %t234, ptr %t238 + store i64 %t236, ptr %t231 + call void @finch.drop.S_ast_Type(ptr %a148) + br label %each.step4436 +each.step4436: + %t239 = load i64, ptr %a134 + %t240 = add i64 %t239, 1 + store i64 %t240, ptr %a134 + br label %each.cond4434 +each.end4437: + %t241 = load i1, ptr %a131 + %t242 = load ptr, ptr %a1 + %t243 = icmp eq ptr %t242, null + br i1 %t243, label %panic4460, label %ok4461 +panic4460: + call void @finch_panic(ptr @.str.2724, i64 1926, ptr @.str.2725) + unreachable +ok4461: + %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 16 + %t245 = load i64, ptr %a2 + %t246 = load { ptr, i64, i64 }, ptr %t244 + %t247 = extractvalue { ptr, i64, i64 } %t246, 1 + %t248 = icmp uge i64 %t245, %t247 + br i1 %t248, label %range4462, label %inrange4463 +range4462: + call void @finch_panic_index(ptr @.str.2726, i64 1926, i64 %t245, i64 %t247) + unreachable +inrange4463: + %t249 = extractvalue { ptr, i64, i64 } %t246, 0 + %t250 = getelementptr inbounds %S.gen.StructDef, ptr %t249, i64 %t245 + %t251 = getelementptr inbounds %S.gen.StructDef, ptr %t250, i32 0, i32 16 + store i1 %t241, ptr %t251 + %t252 = load { ptr, i64, i64 }, ptr %a111 + %t253 = load ptr, ptr %a1 + %t254 = icmp eq ptr %t253, null + br i1 %t254, label %panic4464, label %ok4465 +panic4464: + call void @finch_panic(ptr @.str.2727, i64 1927, ptr @.str.2728) + unreachable +ok4465: + %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 14 + store { ptr, i64, i64 } %t252, ptr %a256 + call void @finch_str_copy(ptr %a257, ptr %a256) + %t258 = load { ptr, i64, i64 }, ptr %a257 + %t259 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t258, ptr %t255 + store { ptr, i64, i64 } %t259, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load ptr, ptr %a1 + %t262 = icmp eq ptr %t261, null + br i1 %t262, label %panic4466, label %ok4467 +panic4466: + call void @finch_panic(ptr @.str.2729, i64 1928, ptr @.str.2730) + unreachable +ok4467: + %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 16 + %t264 = load i64, ptr %a2 + %t265 = load { ptr, i64, i64 }, ptr %t263 + %t266 = extractvalue { ptr, i64, i64 } %t265, 1 + %t267 = icmp uge i64 %t264, %t266 + br i1 %t267, label %range4468, label %inrange4469 +range4468: + call void @finch_panic_index(ptr @.str.2731, i64 1928, i64 %t264, i64 %t266) + unreachable +inrange4469: + %t268 = extractvalue { ptr, i64, i64 } %t265, 0 + %t269 = getelementptr inbounds %S.gen.StructDef, ptr %t268, i64 %t264 + %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i32 0, i32 15 + store i64 2, ptr %t270 + %t271 = load ptr, ptr %a1 + %t272 = icmp eq ptr %t271, null + br i1 %t272, label %panic4470, label %ok4471 +panic4470: + call void @finch_panic(ptr @.str.2732, i64 1929, ptr @.str.2733) + unreachable +ok4471: + %t273 = getelementptr inbounds %S.gen.Gen, ptr %t271, i32 0, i32 2 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 + %t275 = load ptr, ptr %a1 + %t276 = icmp eq ptr %t275, null + br i1 %t276, label %panic4472, label %ok4473 +panic4472: + call void @finch_panic(ptr @.str.2735, i64 1929, ptr @.str.2736) + unreachable +ok4473: + %t277 = getelementptr inbounds %S.gen.Gen, ptr %t275, i32 0, i32 16 + %t278 = load i64, ptr %a2 + %t279 = load { ptr, i64, i64 }, ptr %t277 + %t280 = extractvalue { ptr, i64, i64 } %t279, 1 + %t281 = icmp uge i64 %t278, %t280 + br i1 %t281, label %range4474, label %inrange4475 +range4474: + call void @finch_panic_index(ptr @.str.2737, i64 1929, i64 %t278, i64 %t280) + unreachable +inrange4475: + %t282 = extractvalue { ptr, i64, i64 } %t279, 0 + %t283 = getelementptr inbounds %S.gen.StructDef, ptr %t282, i64 %t278 + %t284 = getelementptr inbounds %S.gen.StructDef, ptr %t283, i32 0, i32 0 + %t285 = load { ptr, i64, i64 }, ptr %t284 + %t286 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t285) + store { ptr, i64, i64 } { ptr @.str.2734, i64 3, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t286, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.2738, i64 1, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load ptr, ptr %a1 + %t298 = icmp eq ptr %t297, null + br i1 %t298, label %panic4476, label %ok4477 +panic4476: + call void @finch_panic(ptr @.str.2739, i64 1929, ptr @.str.2740) + unreachable +ok4477: + %t299 = getelementptr inbounds %S.gen.Gen, ptr %t297, i32 0, i32 16 + %t300 = load i64, ptr %a2 + %t301 = load { ptr, i64, i64 }, ptr %t299 + %t302 = extractvalue { ptr, i64, i64 } %t301, 1 + %t303 = icmp uge i64 %t300, %t302 + br i1 %t303, label %range4478, label %inrange4479 +range4478: + call void @finch_panic_index(ptr @.str.2741, i64 1929, i64 %t300, i64 %t302) + unreachable +inrange4479: + %t304 = extractvalue { ptr, i64, i64 } %t301, 0 + %t305 = getelementptr inbounds %S.gen.StructDef, ptr %t304, i64 %t300 + %t306 = getelementptr inbounds %S.gen.StructDef, ptr %t305, i32 0, i32 1 + %t307 = load { ptr, i64, i64 }, ptr %t306 + %t308 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t307) + store { ptr, i64, i64 } %t296, ptr %a310 + store { ptr, i64, i64 } %t308, ptr %a311 + call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311) + store { ptr, i64, i64 } %t296, ptr %a312 + call void @finch_str_drop(ptr %a312) + store { ptr, i64, i64 } %t308, ptr %a313 + call void @finch_str_drop(ptr %a313) + %t314 = load { ptr, i64, i64 }, ptr %a309 + store { ptr, i64, i64 } %t314, ptr %a316 + store { ptr, i64, i64 } { ptr @.str.2742, i64 10, i64 0 }, ptr %a317 + call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) + store { ptr, i64, i64 } %t314, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a315 + %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2743, i64 2, i64 0 }, ptr %a321 + call void @finch_str_join(ptr %a322, ptr %a132, ptr %a321) + %t323 = load { ptr, i64, i64 }, ptr %a322 + store { ptr, i64, i64 } %t319, ptr %a325 + store { ptr, i64, i64 } %t323, ptr %a326 + call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) + store { ptr, i64, i64 } %t319, ptr %a327 + call void @finch_str_drop(ptr %a327) + store { ptr, i64, i64 } %t323, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t329, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.2744, i64 2, i64 0 }, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + store { ptr, i64, i64 } %t329, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = load { ptr, i64, i64 }, ptr %a330 + %t335 = load i64, ptr %t274 + %t336 = add i64 %t335, 1 + call void @finch_arr_reserve(ptr %t273, i64 %t336, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t337 = load ptr, ptr %t273 + %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t335 + store { ptr, i64, i64 } %t334, ptr %t338 + store i64 %t336, ptr %t274 + call void @finch.drop.arr_str(ptr %a132) + call void @finch_str_drop(ptr %a111) + call void @finch.drop.S_ast_Node(ptr %a43) + ret void +} + +define internal i64 @finch.gen.md(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4480, label %ok4481 +panic4480: + call void @finch_panic(ptr @.str.2745, i64 1938, ptr @.str.2746) + unreachable +ok4481: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 33 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t7, ptr %a8 + call void @finch_str_copy(ptr %a9, ptr %a8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + %t11 = load i64, ptr %t6 + %t12 = add i64 %t11, 1 + call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t13 = load ptr, ptr %t5 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 %t11 + store { ptr, i64, i64 } %t10, ptr %t14 + store i64 %t12, ptr %t6 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic4482, label %ok4483 +panic4482: + call void @finch_panic(ptr @.str.2747, i64 1939, ptr @.str.2748) + unreachable +ok4483: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 33 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = sub i64 %t19, 1 + ret i64 %t20 +} + +define internal { ptr, i64, i64 } @finch.gen.mdRef(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + %t2 = load i64, ptr %a1 + %t3 = icmp slt i64 %t2, 0 + br i1 %t3, label %then4484, label %endif4486 +then4484: + ret { ptr, i64, i64 } { ptr @.str.2749, i64 4, i64 0 } +endif4486: + %t4 = load i64, ptr %a1 + call void @finch_str_from_int(ptr %a5, i64 %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.2750, i64 1, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + store { ptr, i64, i64 } %t6, ptr %a10 + call void @finch_str_drop(ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a7 + ret { ptr, i64, i64 } %t11 +} + +define internal i64 @finch.gen.alignUp(i64 %p0, i64 %p1) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i64, align 16 + store i64 %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load i64, ptr %a2 + %t4 = icmp sle i64 %t3, 1 + br i1 %t4, label %then4487, label %endif4489 +then4487: + %t5 = load i64, ptr %a1 + ret i64 %t5 +endif4489: + %t6 = load i64, ptr %a1 + %t7 = load i64, ptr %a2 + %t8 = add i64 %t6, %t7 + %t9 = sub i64 %t8, 1 + %t10 = load i64, ptr %a2 + %t11 = icmp eq i64 %t10, 0 + br i1 %t11, label %panic4490, label %ok4491 +panic4490: + call void @finch_panic(ptr @.str.2751, i64 1958, ptr @.str.2752) + unreachable +ok4491: + %t12 = sdiv i64 %t9, %t10 + %t13 = load i64, ptr %a2 + %t14 = mul i64 %t12, %t13 + ret i64 %t14 +} + +define internal %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca %S.gen.SizeAlign, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca %S.gen.StructDef, align 16 + %a137 = alloca %S.gen.StructDef, align 16 + %a139 = alloca %S.gen.StructDef, align 16 + %a148 = alloca i64, align 16 + %a149 = alloca i64, align 16 + %a151 = alloca i64, align 16 + %a159 = alloca %S.ast.Type, align 16 + %a163 = alloca %S.gen.SizeAlign, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.2753, i64 4, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from4492 +logic.from4492: + br i1 %t13, label %logic.end4494, label %logic.rhs4493 +logic.rhs4493: + %t14 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.2754, i64 4, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.rend4495 +logic.rend4495: + br label %logic.end4494 +logic.end4494: + %t19 = phi i1 [ true, %logic.from4492 ], [ %t18, %logic.rend4495 ] + br label %logic.from4496 +logic.from4496: + br i1 %t19, label %logic.end4498, label %logic.rhs4497 +logic.rhs4497: + %t20 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.2755, i64 2, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br label %logic.rend4499 +logic.rend4499: + br label %logic.end4498 +logic.end4498: + %t25 = phi i1 [ true, %logic.from4496 ], [ %t24, %logic.rend4499 ] + br label %logic.from4500 +logic.from4500: + br i1 %t25, label %logic.end4502, label %logic.rhs4501 +logic.rhs4501: + %t26 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.2756, i64 2, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br label %logic.rend4503 +logic.rend4503: + br label %logic.end4502 +logic.end4502: + %t31 = phi i1 [ true, %logic.from4500 ], [ %t30, %logic.rend4503 ] + br i1 %t31, label %then4504, label %endif4506 +then4504: + %t32 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 1, 0 + %t33 = insertvalue %S.gen.SizeAlign %t32, i64 1, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t33 +endif4506: + %t34 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.2757, i64 3, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.from4507 +logic.from4507: + br i1 %t38, label %logic.end4509, label %logic.rhs4508 +logic.rhs4508: + %t39 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t39, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.2758, i64 3, i64 0 }, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend4510 +logic.rend4510: + br label %logic.end4509 +logic.end4509: + %t44 = phi i1 [ true, %logic.from4507 ], [ %t43, %logic.rend4510 ] + br i1 %t44, label %then4511, label %endif4513 +then4511: + %t45 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 2, 0 + %t46 = insertvalue %S.gen.SizeAlign %t45, i64 2, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t46 +endif4513: + %t47 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t47, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.2759, i64 3, i64 0 }, ptr %a49 + %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) + %t51 = icmp ne i32 %t50, 0 + br label %logic.from4514 +logic.from4514: + br i1 %t51, label %logic.end4516, label %logic.rhs4515 +logic.rhs4515: + %t52 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.2760, i64 3, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br label %logic.rend4517 +logic.rend4517: + br label %logic.end4516 +logic.end4516: + %t57 = phi i1 [ true, %logic.from4514 ], [ %t56, %logic.rend4517 ] + br label %logic.from4518 +logic.from4518: + br i1 %t57, label %logic.end4520, label %logic.rhs4519 +logic.rhs4519: + %t58 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t58, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.2761, i64 3, i64 0 }, ptr %a60 + %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) + %t62 = icmp ne i32 %t61, 0 + br label %logic.rend4521 +logic.rend4521: + br label %logic.end4520 +logic.end4520: + %t63 = phi i1 [ true, %logic.from4518 ], [ %t62, %logic.rend4521 ] + br label %logic.from4522 +logic.from4522: + br i1 %t63, label %logic.end4524, label %logic.rhs4523 +logic.rhs4523: + %t64 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.2762, i64 4, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp ne i32 %t67, 0 + br label %logic.rend4525 +logic.rend4525: + br label %logic.end4524 +logic.end4524: + %t69 = phi i1 [ true, %logic.from4522 ], [ %t68, %logic.rend4525 ] + br i1 %t69, label %then4526, label %endif4528 +then4526: + %t70 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 4, 0 + %t71 = insertvalue %S.gen.SizeAlign %t70, i64 4, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t71 +endif4528: + %t72 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t72, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.2763, i64 3, i64 0 }, ptr %a74 + %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) + %t76 = icmp ne i32 %t75, 0 + br label %logic.from4529 +logic.from4529: + br i1 %t76, label %logic.end4531, label %logic.rhs4530 +logic.rhs4530: + %t77 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t77, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.2764, i64 5, i64 0 }, ptr %a79 + %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) + %t81 = icmp ne i32 %t80, 0 + br label %logic.rend4532 +logic.rend4532: + br label %logic.end4531 +logic.end4531: + %t82 = phi i1 [ true, %logic.from4529 ], [ %t81, %logic.rend4532 ] + br i1 %t82, label %then4533, label %endif4535 +then4533: + %t83 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 24, 0 + %t84 = insertvalue %S.gen.SizeAlign %t83, i64 8, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t84 +endif4535: + %t85 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.2765, i64 3, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + br i1 %t89, label %then4536, label %endif4538 +then4536: + %t90 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 56, 0 + %t91 = insertvalue %S.gen.SizeAlign %t90, i64 8, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t91 +endif4538: + %t92 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t92, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.2766, i64 5, i64 0 }, ptr %a94 + %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) + %t96 = icmp ne i32 %t95, 0 + br i1 %t96, label %then4539, label %endif4541 +then4539: + %t97 = load ptr, ptr %a1 + %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t99 = load { ptr, i64, i64 }, ptr %t98 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 0, %t100 + br i1 %t101, label %range4542, label %inrange4543 +range4542: + call void @finch_panic_index(ptr @.str.2767, i64 1980, i64 0, i64 %t100) + unreachable +inrange4543: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 + %t104 = load %S.ast.Type, ptr %t103 + %t105 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t97, %S.ast.Type %t104) + store %S.gen.SizeAlign %t105, ptr %a106 + %t107 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 0 + %t108 = load i64, ptr %t107 + %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t110 = load i64, ptr %t109 + %t111 = mul i64 %t108, %t110 + %t112 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t111, 0 + %t113 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = insertvalue %S.gen.SizeAlign %t112, i64 %t114, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t115 +endif4541: + %t116 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t116, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.2768, i64 6, i64 0 }, ptr %a118 + %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) + %t120 = icmp ne i32 %t119, 0 + br i1 %t120, label %then4544, label %endif4546 +then4544: + %t121 = load ptr, ptr %a1 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic4547, label %ok4548 +panic4547: + call void @finch_panic(ptr @.str.2769, i64 1984, ptr @.str.2770) + unreachable +ok4548: + %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 16 + %t124 = load ptr, ptr %a1 + %t125 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t126 = load { ptr, i64, i64 }, ptr %t125 + %t127 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + %t129 = call i64 @finch.gen.findStruct(ptr %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t128) + %t130 = load { ptr, i64, i64 }, ptr %t123 + %t131 = extractvalue { ptr, i64, i64 } %t130, 1 + %t132 = icmp uge i64 %t129, %t131 + br i1 %t132, label %range4549, label %inrange4550 +range4549: + call void @finch_panic_index(ptr @.str.2771, i64 1984, i64 %t129, i64 %t131) + unreachable +inrange4550: + %t133 = extractvalue { ptr, i64, i64 } %t130, 0 + %t134 = getelementptr inbounds %S.gen.StructDef, ptr %t133, i64 %t129 + %t135 = load %S.gen.StructDef, ptr %t134 + store %S.gen.StructDef %t135, ptr %a136 + call void @finch.copy.S_gen_StructDef(ptr %a137, ptr %a136) + %t138 = load %S.gen.StructDef, ptr %a137 + store %S.gen.StructDef %t138, ptr %a139 + %t140 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 2 + %t141 = load i1, ptr %t140 + br i1 %t141, label %then4551, label %endif4553 +then4551: + %t142 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 9 + %t143 = load i64, ptr %t142 + %t144 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t143, 0 + %t145 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 10 + %t146 = load i64, ptr %t145 + %t147 = insertvalue %S.gen.SizeAlign %t144, i64 %t146, 1 + call void @finch.drop.S_gen_StructDef(ptr %a139) + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t147 +endif4553: + store i64 0, ptr %a148 + store i64 1, ptr %a149 + %t150 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 12 + store i64 0, ptr %a151 + br label %each.cond4554 +each.cond4554: + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 + %t153 = load i64, ptr %t152 + %t154 = load i64, ptr %a151 + %t155 = icmp slt i64 %t154, %t153 + br i1 %t155, label %each.body4555, label %each.end4557 +each.body4555: + %t156 = load ptr, ptr %t150 + %t157 = getelementptr inbounds %S.ast.Type, ptr %t156, i64 %t154 + %t158 = load %S.ast.Type, ptr %t157 + store %S.ast.Type %t158, ptr %a159 + %t160 = load ptr, ptr %a1 + %t161 = load %S.ast.Type, ptr %a159 + %t162 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t160, %S.ast.Type %t161) + store %S.gen.SizeAlign %t162, ptr %a163 + %t164 = load i64, ptr %a148 + %t165 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 + %t166 = load i64, ptr %t165 + %t167 = call i64 @finch.gen.alignUp(i64 %t164, i64 %t166) + %t168 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 0 + %t169 = load i64, ptr %t168 + %t170 = add i64 %t167, %t169 + store i64 %t170, ptr %a148 + %t171 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 + %t172 = load i64, ptr %t171 + %t173 = load i64, ptr %a149 + %t174 = icmp sgt i64 %t172, %t173 + br i1 %t174, label %then4558, label %endif4560 +then4558: + %t175 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 + %t176 = load i64, ptr %t175 + store i64 %t176, ptr %a149 + br label %endif4560 +endif4560: + br label %each.step4556 +each.step4556: + %t177 = load i64, ptr %a151 + %t178 = add i64 %t177, 1 + store i64 %t178, ptr %a151 + br label %each.cond4554 +each.end4557: + %t179 = load i64, ptr %a148 + %t180 = load i64, ptr %a149 + %t181 = call i64 @finch.gen.alignUp(i64 %t179, i64 %t180) + %t182 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t181, 0 + %t183 = load i64, ptr %a149 + %t184 = insertvalue %S.gen.SizeAlign %t182, i64 %t183, 1 + call void @finch.drop.S_gen_StructDef(ptr %a139) + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t184 +endif4546: + %t185 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 8, 0 + %t186 = insertvalue %S.gen.SizeAlign %t185, i64 8, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t186 +} + +define internal { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %p0, %S.gen.StructDef %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.StructDef, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca i64, align 16 + %a13 = alloca i64, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.gen.SizeAlign, align 16 + store ptr %p0, ptr %a1 + store %S.gen.StructDef %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 2 + %t4 = load i1, ptr %t3 + br i1 %t4, label %then4561, label %endif4563 +then4561: + %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 4 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch.copy.arr_int(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + ret { ptr, i64, i64 } %t9 +endif4563: + store { ptr, i64, i64 } zeroinitializer, ptr %a10 + store i64 0, ptr %a11 + %t12 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 12 + store i64 0, ptr %a13 + br label %each.cond4564 +each.cond4564: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = load i64, ptr %a13 + %t17 = icmp slt i64 %t16, %t15 + br i1 %t17, label %each.body4565, label %each.end4567 +each.body4565: + %t18 = load ptr, ptr %t12 + %t19 = getelementptr inbounds %S.ast.Type, ptr %t18, i64 %t16 + %t20 = load %S.ast.Type, ptr %t19 + store %S.ast.Type %t20, ptr %a21 + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Type, ptr %a21 + %t24 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t22, %S.ast.Type %t23) + store %S.gen.SizeAlign %t24, ptr %a25 + %t26 = load i64, ptr %a11 + %t27 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = call i64 @finch.gen.alignUp(i64 %t26, i64 %t28) + store i64 %t29, ptr %a11 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t31 = load i64, ptr %a11 + %t32 = load i64, ptr %t30 + %t33 = add i64 %t32, 1 + call void @finch_arr_reserve(ptr %a10, i64 %t33, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t34 = load ptr, ptr %a10 + %t35 = getelementptr inbounds i64, ptr %t34, i64 %t32 + store i64 %t31, ptr %t35 + store i64 %t33, ptr %t30 + %t36 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 0 + %t37 = load i64, ptr %t36 + %t38 = load i64, ptr %a11 + %t39 = add i64 %t38, %t37 + store i64 %t39, ptr %a11 + br label %each.step4566 +each.step4566: + %t40 = load i64, ptr %a13 + %t41 = add i64 %t40, 1 + store i64 %t41, ptr %a13 + br label %each.cond4564 +each.end4567: + %t42 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t42 +} + +define internal i64 @finch.gen.dbgMember(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6, i64 %p7) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a6 = alloca i64, align 16 + %a7 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + store i64 %p5, ptr %a6 + store i64 %p6, ptr %a7 + store i64 %p7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.2772, i64 42, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t10, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.2773, i64 11, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + %t20 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a21, i64 %t20) + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t19, ptr %a26 + call void @finch_str_drop(ptr %a26) + store { ptr, i64, i64 } %t22, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.2774, i64 9, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a35, i64 %t34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t33, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t33, ptr %a40 + call void @finch_str_drop(ptr %a40) + store { ptr, i64, i64 } %t36, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t42, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.2775, i64 8, i64 0 }, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + store { ptr, i64, i64 } %t42, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a43 + %t48 = load i64, ptr %a5 + call void @finch_str_from_int(ptr %a49, i64 %t48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t47, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t47, ptr %a54 + call void @finch_str_drop(ptr %a54) + store { ptr, i64, i64 } %t50, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.2776, i64 12, i64 0 }, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t56, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = load i64, ptr %a6 + %t63 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t62) + store { ptr, i64, i64 } %t61, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t61, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.2777, i64 8, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load i64, ptr %a7 + call void @finch_str_from_int(ptr %a76, i64 %t75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t74, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t74, ptr %a81 + call void @finch_str_drop(ptr %a81) + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.2778, i64 10, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + %t89 = load i64, ptr %a8 + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t88, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.2779, i64 1, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = call i64 @finch.gen.md(ptr %t9, { ptr, i64, i64 } %t102) + store { ptr, i64, i64 } %t102, ptr %a104 + call void @finch_str_drop(ptr %a104) + ret i64 %t103 +} + +define internal i64 @finch.gen.basicType(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.2780, i64 20, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.2781, i64 9, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a17, i64 %t16) + %t18 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a20 + store { ptr, i64, i64 } %t18, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t15, ptr %a22 + call void @finch_str_drop(ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.2782, i64 12, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t29, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.2783, i64 1, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = call i64 @finch.gen.md(ptr %t5, { ptr, i64, i64 } %t40) + store { ptr, i64, i64 } %t40, ptr %a42 + call void @finch_str_drop(ptr %a42) + ret i64 %t41 +} + +define internal i64 @finch.gen.diType(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i64, align 16 + %a59 = alloca i64, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.gen.EnumDef, align 16 + %a129 = alloca %S.gen.EnumDef, align 16 + %a131 = alloca %S.gen.EnumDef, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca i64, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca i32, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca i64, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca %S.gen.SizeAlign, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca i64, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca %S.ast.Type, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca %S.ast.Type, align 16 + %a414 = alloca %S.ast.Type, align 16 + %a417 = alloca %S.ast.Type, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca i64, align 16 + %a439 = alloca %S.ast.Type, align 16 + %a440 = alloca i64, align 16 + %a446 = alloca i64, align 16 + %a452 = alloca i64, align 16 + %a458 = alloca i64, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca %S.ast.Type, align 16 + %a547 = alloca i64, align 16 + %a550 = alloca i64, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca i64, align 16 + %a569 = alloca i64, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a613 = alloca { ptr, i64, i64 }, align 16 + %a614 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a634 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca %S.gen.StructDef, align 16 + %a677 = alloca %S.gen.StructDef, align 16 + %a679 = alloca %S.gen.StructDef, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a687 = alloca %S.gen.SizeAlign, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca i64, align 16 + %a705 = alloca %S.gen.SizeAlign, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a743 = alloca { ptr, i64, i64 }, align 16 + %a744 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a805 = alloca { ptr, i64, i64 }, align 16 + %a806 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a823 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a840 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca i32, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.2784, i64 4, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from4568 +logic.from4568: + br i1 %t13, label %logic.end4570, label %logic.rhs4569 +logic.rhs4569: + %t14 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.2785, i64 4, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.rend4571 +logic.rend4571: + br label %logic.end4570 +logic.end4570: + %t19 = phi i1 [ true, %logic.from4568 ], [ %t18, %logic.rend4571 ] + br i1 %t19, label %then4572, label %endif4574 +then4572: + call void @finch_str_drop(ptr %a8) + ret i64 -1 +endif4574: + %t20 = load %S.ast.Type, ptr %a2 + %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) + store { ptr, i64, i64 } { ptr @.str.2786, i64 2, i64 0 }, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a27 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic4575, label %ok4576 +panic4575: + call void @finch_panic(ptr @.str.2787, i64 2033, ptr @.str.2788) + unreachable +ok4576: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 34 + %t31 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t31, ptr %a32 + %t33 = call i64 @finch_map_find(ptr %t30, ptr %a32, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t34 = icmp sge i64 %t33, 0 + br i1 %t34, label %then4577, label %endif4579 +then4577: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic4580, label %ok4581 +panic4580: + call void @finch_panic(ptr @.str.2789, i64 2034, ptr @.str.2790) + unreachable +ok4581: + %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 34 + %t38 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = call i64 @finch_map_find(ptr %t37, ptr %a39, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t41 = icmp slt i64 %t40, 0 + br i1 %t41, label %map.missing4582, label %map.found4583 +map.missing4582: + store { ptr, i64, i64 } zeroinitializer, ptr %a42 + store { ptr, i64, i64 } %t38, ptr %a43 + call void @finch_buf_str(ptr %a42, ptr %a43, i32 1) + call void @finch_map_missing(ptr @.str.2791, i64 2034, ptr %a42) + unreachable +map.found4583: + %t44 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t37, i32 0, i32 0 + %t45 = load ptr, ptr %t44 + %t46 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t45, i64 %t40 + %t47 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t46, i32 0, i32 2 + %t48 = load i64, ptr %t47 + call void @finch_str_drop(ptr %a27) + call void @finch_str_drop(ptr %a8) + ret i64 %t48 +endif4579: + store i64 -1, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = icmp eq ptr %t50, null + br i1 %t51, label %panic4584, label %ok4585 +panic4584: + call void @finch_panic(ptr @.str.2792, i64 2037, ptr @.str.2793) + unreachable +ok4585: + %t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 35 + %t53 = load { ptr, i64, i64 }, ptr %t52 + %t54 = extractvalue { ptr, i64, i64 } %t53, 1 + %t55 = icmp uge i64 0, %t54 + br i1 %t55, label %range4586, label %inrange4587 +range4586: + call void @finch_panic_index(ptr @.str.2794, i64 2037, i64 0, i64 %t54) + unreachable +inrange4587: + %t56 = extractvalue { ptr, i64, i64 } %t53, 0 + %t57 = getelementptr inbounds i64, ptr %t56, i64 0 + %t58 = load i64, ptr %t57 + store i64 %t58, ptr %a59 + %t60 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.2795, i64 4, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br i1 %t64, label %then4588, label %else4589 +then4588: + %t65 = load ptr, ptr %a1 + %t66 = call i64 @finch.gen.basicType(ptr %t65, { ptr, i64, i64 } { ptr @.str.2796, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2797, i64 14, i64 0 }) + store i64 %t66, ptr %a49 + br label %endif4590 +else4589: + %t67 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t67, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.2798, i64 4, i64 0 }, ptr %a69 + %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) + %t71 = icmp ne i32 %t70, 0 + br i1 %t71, label %then4591, label %else4592 +then4591: + %t72 = load ptr, ptr %a1 + %t73 = call i64 @finch.gen.basicType(ptr %t72, { ptr, i64, i64 } { ptr @.str.2799, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2800, i64 18, i64 0 }) + store i64 %t73, ptr %a49 + br label %endif4593 +else4592: + %t74 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.2801, i64 3, i64 0 }, ptr %a76 + %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) + %t78 = icmp ne i32 %t77, 0 + br i1 %t78, label %then4594, label %else4595 +then4594: + %t79 = load ptr, ptr %a1 + %t80 = call i64 @finch.gen.basicType(ptr %t79, { ptr, i64, i64 } { ptr @.str.2802, i64 3, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2803, i64 13, i64 0 }) + store i64 %t80, ptr %a49 + br label %endif4596 +else4595: + %t81 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.2804, i64 5, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br i1 %t85, label %then4597, label %else4598 +then4597: + %t86 = load ptr, ptr %a1 + %t87 = call i64 @finch.gen.basicType(ptr %t86, { ptr, i64, i64 } { ptr @.str.2805, i64 5, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2806, i64 12, i64 0 }) + store i64 %t87, ptr %a49 + br label %endif4599 +else4598: + %t88 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t88, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.2807, i64 3, i64 0 }, ptr %a90 + %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then4600, label %else4601 +then4600: + %t93 = load ptr, ptr %a1 + %t94 = call i64 @finch.gen.basicType(ptr %t93, { ptr, i64, i64 } { ptr @.str.2808, i64 3, i64 0 }, i64 32, { ptr, i64, i64 } { ptr @.str.2809, i64 12, i64 0 }) + store i64 %t94, ptr %a49 + br label %endif4602 +else4601: + %t95 = load %S.ast.Type, ptr %a2 + %t96 = call i1 @finch.gen.isInt(%S.ast.Type %t95) + br i1 %t96, label %then4603, label %else4604 +then4603: + store { ptr, i64, i64 } { ptr @.str.2810, i64 15, i64 0 }, ptr %a97 + %t98 = load %S.ast.Type, ptr %a2 + %t99 = call i1 @finch.gen.isSigned(%S.ast.Type %t98) + br i1 %t99, label %then4606, label %endif4608 +then4606: + %t100 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.2811, i64 13, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t100, ptr %a101 + call void @finch_str_drop(ptr %a101) + br label %endif4608 +endif4608: + %t102 = load ptr, ptr %a1 + %t103 = load { ptr, i64, i64 }, ptr %a8 + %t104 = load %S.ast.Type, ptr %a2 + %t105 = call i64 @finch.gen.bitsOf(%S.ast.Type %t104) + %t106 = load { ptr, i64, i64 }, ptr %a97 + %t107 = call i64 @finch.gen.basicType(ptr %t102, { ptr, i64, i64 } %t103, i64 %t105, { ptr, i64, i64 } %t106) + store i64 %t107, ptr %a49 + call void @finch_str_drop(ptr %a97) + br label %endif4605 +else4604: + %t108 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2812, i64 4, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br i1 %t112, label %then4609, label %else4610 +then4609: + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic4612, label %ok4613 +panic4612: + call void @finch_panic(ptr @.str.2813, i64 2055, ptr @.str.2814) + unreachable +ok4613: + %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 21 + %t116 = load ptr, ptr %a1 + %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t120 = load { ptr, i64, i64 }, ptr %t119 + %t121 = call i64 @finch.gen.findEnum(ptr %t116, { ptr, i64, i64 } %t118, { ptr, i64, i64 } %t120) + %t122 = load { ptr, i64, i64 }, ptr %t115 + %t123 = extractvalue { ptr, i64, i64 } %t122, 1 + %t124 = icmp uge i64 %t121, %t123 + br i1 %t124, label %range4614, label %inrange4615 +range4614: + call void @finch_panic_index(ptr @.str.2815, i64 2055, i64 %t121, i64 %t123) + unreachable +inrange4615: + %t125 = extractvalue { ptr, i64, i64 } %t122, 0 + %t126 = getelementptr inbounds %S.gen.EnumDef, ptr %t125, i64 %t121 + %t127 = load %S.gen.EnumDef, ptr %t126 + store %S.gen.EnumDef %t127, ptr %a128 + call void @finch.copy.S_gen_EnumDef(ptr %a129, ptr %a128) + %t130 = load %S.gen.EnumDef, ptr %a129 + store %S.gen.EnumDef %t130, ptr %a131 + store { ptr, i64, i64 } zeroinitializer, ptr %a132 + %t133 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load i64, ptr %t134 + store i64 0, ptr %a136 + br label %for.cond4616 +for.cond4616: + %t137 = load i64, ptr %a136 + %t138 = icmp slt i64 %t137, %t135 + br i1 %t138, label %for.body4617, label %for.end4619 +for.body4617: + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + %t140 = load ptr, ptr %a1 + %t141 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 + %t142 = load i64, ptr %a136 + %t143 = load { ptr, i64, i64 }, ptr %t141 + %t144 = extractvalue { ptr, i64, i64 } %t143, 1 + %t145 = icmp uge i64 %t142, %t144 + br i1 %t145, label %range4620, label %inrange4621 +range4620: + call void @finch_panic_index(ptr @.str.2817, i64 2058, i64 %t142, i64 %t144) + unreachable +inrange4621: + %t146 = extractvalue { ptr, i64, i64 } %t143, 0 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t142 + %t148 = load { ptr, i64, i64 }, ptr %t147 + store { ptr, i64, i64 } { ptr @.str.2816, i64 21, i64 0 }, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.2818, i64 10, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + %t158 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 3 + %t159 = load i64, ptr %a136 + %t160 = load { ptr, i64, i64 }, ptr %t158 + %t161 = extractvalue { ptr, i64, i64 } %t160, 1 + %t162 = icmp uge i64 %t159, %t161 + br i1 %t162, label %range4622, label %inrange4623 +range4622: + call void @finch_panic_index(ptr @.str.2819, i64 2058, i64 %t159, i64 %t161) + unreachable +inrange4623: + %t163 = extractvalue { ptr, i64, i64 } %t160, 0 + %t164 = getelementptr inbounds i64, ptr %t163, i64 %t159 + %t165 = load i64, ptr %t164 + call void @finch_str_from_int(ptr %a166, i64 %t165) + %t167 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t157, ptr %a169 + store { ptr, i64, i64 } %t167, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t157, ptr %a171 + call void @finch_str_drop(ptr %a171) + store { ptr, i64, i64 } %t167, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t173, ptr %a175 + store { ptr, i64, i64 } { ptr @.str.2820, i64 1, i64 0 }, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t173, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + %t179 = call i64 @finch.gen.md(ptr %t140, { ptr, i64, i64 } %t178) + store { ptr, i64, i64 } %t178, ptr %a180 + call void @finch_str_drop(ptr %a180) + %t181 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t179) + %t182 = load i64, ptr %t139 + %t183 = add i64 %t182, 1 + call void @finch_arr_reserve(ptr %a132, i64 %t183, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t184 = load ptr, ptr %a132 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 + store { ptr, i64, i64 } %t181, ptr %t185 + store i64 %t183, ptr %t139 + br label %for.step4618 +for.step4618: + %t186 = load i64, ptr %a136 + %t187 = add i64 %t186, 1 + store i64 %t187, ptr %a136 + br label %for.cond4616 +for.end4619: + %t188 = load ptr, ptr %a1 + %t189 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 1 + %t190 = load { ptr, i64, i64 }, ptr %t189 + store { ptr, i64, i64 } { ptr @.str.2821, i64 54, i64 0 }, ptr %a192 + store { ptr, i64, i64 } %t190, ptr %a193 + call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) + %t194 = load { ptr, i64, i64 }, ptr %a191 + store { ptr, i64, i64 } %t194, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.2822, i64 10, i64 0 }, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t194, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + %t200 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a201, i64 %t200) + %t202 = load { ptr, i64, i64 }, ptr %a201 + store { ptr, i64, i64 } %t199, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t199, ptr %a206 + call void @finch_str_drop(ptr %a206) + store { ptr, i64, i64 } %t202, ptr %a207 + call void @finch_str_drop(ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t208, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.2823, i64 24, i64 0 }, ptr %a211 + call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211) + store { ptr, i64, i64 } %t208, ptr %a212 + call void @finch_str_drop(ptr %a212) + %t213 = load { ptr, i64, i64 }, ptr %a209 + %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2824, i64 2, i64 0 }, ptr %a215 + call void @finch_str_join(ptr %a216, ptr %a132, ptr %a215) + %t217 = load { ptr, i64, i64 }, ptr %a216 + store { ptr, i64, i64 } %t213, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t213, ptr %a221 + call void @finch_str_drop(ptr %a221) + store { ptr, i64, i64 } %t217, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.2825, i64 2, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = call i64 @finch.gen.md(ptr %t188, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t228, ptr %a230 + call void @finch_str_drop(ptr %a230) + store i64 %t229, ptr %a49 + call void @finch.drop.arr_str(ptr %a132) + call void @finch.drop.S_gen_EnumDef(ptr %a131) + br label %endif4611 +else4610: + %t231 = load ptr, ptr %a1 + %t232 = call i64 @finch.gen.md(ptr %t231, { ptr, i64, i64 } { ptr @.str.2826, i64 0, i64 0 }) + store i64 %t232, ptr %a49 + %t233 = load i64, ptr %a49 + %t234 = load ptr, ptr %a1 + %t235 = icmp eq ptr %t234, null + br i1 %t235, label %panic4624, label %ok4625 +panic4624: + call void @finch_panic(ptr @.str.2827, i64 2064, ptr @.str.2828) + unreachable +ok4625: + %t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 34 + %t237 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t237, ptr %a238 + store i32 0, ptr %a239 + %t240 = call i64 @finch_map_slot(ptr %t236, ptr %a238, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a239) + %t241 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t236, i32 0, i32 0 + %t242 = load ptr, ptr %t241 + %t243 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t242, i64 %t240 + %t244 = load i32, ptr %a239 + %t245 = icmp ne i32 %t244, 0 + br i1 %t245, label %map.new4626, label %map.have4627 +map.new4626: + %t246 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 1 + call void @finch_str_copy(ptr %t246, ptr %a238) + %t247 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 + store i64 0, ptr %t247 + br label %map.have4627 +map.have4627: + %t248 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 + store i64 %t233, ptr %t248 + %t249 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t249, ptr %a250 + store { ptr, i64, i64 } { ptr @.str.2829, i64 3, i64 0 }, ptr %a251 + %t252 = call i32 @finch_str_eq(ptr %a250, ptr %a251) + %t253 = icmp ne i32 %t252, 0 + br i1 %t253, label %then4628, label %else4629 +then4628: + store i64 -1, ptr %a254 + %t255 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %t255, i32 0, i32 1 + %t257 = load i64, ptr %t256 + %t258 = icmp sgt i64 %t257, 0 + br i1 %t258, label %then4631, label %endif4633 +then4631: + %t259 = load ptr, ptr %a1 + %t260 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t261 = load { ptr, i64, i64 }, ptr %t260 + %t262 = extractvalue { ptr, i64, i64 } %t261, 1 + %t263 = icmp uge i64 0, %t262 + br i1 %t263, label %range4634, label %inrange4635 +range4634: + call void @finch_panic_index(ptr @.str.2830, i64 2068, i64 0, i64 %t262) + unreachable +inrange4635: + %t264 = extractvalue { ptr, i64, i64 } %t261, 0 + %t265 = getelementptr inbounds %S.ast.Type, ptr %t264, i64 0 + %t266 = load %S.ast.Type, ptr %t265 + %t267 = call i64 @finch.gen.diType(ptr %t259, %S.ast.Type %t266) + store i64 %t267, ptr %a254 + br label %endif4633 +endif4633: + %t268 = load i64, ptr %a254 + %t269 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t268) + store { ptr, i64, i64 } { ptr @.str.2831, i64 51, i64 0 }, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t269, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.2832, i64 11, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + store { ptr, i64, i64 } %t274, ptr %a278 + call void @finch_str_drop(ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a275 + %t280 = load ptr, ptr %a1 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic4636, label %ok4637 +panic4636: + call void @finch_panic(ptr @.str.2833, i64 2070, ptr @.str.2834) + unreachable +ok4637: + %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 33 + %t283 = load i64, ptr %a49 + %t284 = load { ptr, i64, i64 }, ptr %t282 + %t285 = extractvalue { ptr, i64, i64 } %t284, 1 + %t286 = icmp uge i64 %t283, %t285 + br i1 %t286, label %range4638, label %inrange4639 +range4638: + call void @finch_panic_index(ptr @.str.2835, i64 2070, i64 %t283, i64 %t285) + unreachable +inrange4639: + %t287 = extractvalue { ptr, i64, i64 } %t284, 0 + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 %t283 + %t289 = load { ptr, i64, i64 }, ptr %t288 + store { ptr, i64, i64 } %t279, ptr %t288 + store { ptr, i64, i64 } %t289, ptr %a290 + call void @finch_str_drop(ptr %a290) + br label %endif4630 +else4629: + %t291 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t291, ptr %a292 + store { ptr, i64, i64 } { ptr @.str.2836, i64 5, i64 0 }, ptr %a293 + %t294 = call i32 @finch_str_eq(ptr %a292, ptr %a293) + %t295 = icmp ne i32 %t294, 0 + br i1 %t295, label %then4640, label %else4641 +then4640: + %t296 = load ptr, ptr %a1 + %t297 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t298 = load { ptr, i64, i64 }, ptr %t297 + %t299 = extractvalue { ptr, i64, i64 } %t298, 1 + %t300 = icmp uge i64 0, %t299 + br i1 %t300, label %range4643, label %inrange4644 +range4643: + call void @finch_panic_index(ptr @.str.2837, i64 2072, i64 0, i64 %t299) + unreachable +inrange4644: + %t301 = extractvalue { ptr, i64, i64 } %t298, 0 + %t302 = getelementptr inbounds %S.ast.Type, ptr %t301, i64 0 + %t303 = load %S.ast.Type, ptr %t302 + %t304 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t296, %S.ast.Type %t303) + store %S.gen.SizeAlign %t304, ptr %a305 + %t306 = load ptr, ptr %a1 + %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t308 = load i64, ptr %t307 + call void @finch_str_from_int(ptr %a309, i64 %t308) + %t310 = load { ptr, i64, i64 }, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.2838, i64 19, i64 0 }, ptr %a312 + store { ptr, i64, i64 } %t310, ptr %a313 + call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) + store { ptr, i64, i64 } %t310, ptr %a314 + call void @finch_str_drop(ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a311 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.2839, i64 1, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + %t321 = call i64 @finch.gen.md(ptr %t306, { ptr, i64, i64 } %t320) + store { ptr, i64, i64 } %t320, ptr %a322 + call void @finch_str_drop(ptr %a322) + store i64 %t321, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t326 = load { ptr, i64, i64 }, ptr %t325 + %t327 = extractvalue { ptr, i64, i64 } %t326, 1 + %t328 = icmp uge i64 0, %t327 + br i1 %t328, label %range4645, label %inrange4646 +range4645: + call void @finch_panic_index(ptr @.str.2841, i64 2074, i64 0, i64 %t327) + unreachable +inrange4646: + %t329 = extractvalue { ptr, i64, i64 } %t326, 0 + %t330 = getelementptr inbounds %S.ast.Type, ptr %t329, i64 0 + %t331 = load %S.ast.Type, ptr %t330 + %t332 = call i64 @finch.gen.diType(ptr %t324, %S.ast.Type %t331) + %t333 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t332) + store { ptr, i64, i64 } { ptr @.str.2840, i64 51, i64 0 }, ptr %a335 + store { ptr, i64, i64 } %t333, ptr %a336 + call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336) + store { ptr, i64, i64 } %t333, ptr %a337 + call void @finch_str_drop(ptr %a337) + %t338 = load { ptr, i64, i64 }, ptr %a334 + store { ptr, i64, i64 } %t338, ptr %a340 + store { ptr, i64, i64 } { ptr @.str.2842, i64 8, i64 0 }, ptr %a341 + call void @finch_str_concat(ptr %a339, ptr %a340, ptr %a341) + store { ptr, i64, i64 } %t338, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load { ptr, i64, i64 }, ptr %a339 + %t344 = getelementptr inbounds %S.gen.SizeAlign, ptr %a305, i32 0, i32 0 + %t345 = load i64, ptr %t344 + %t346 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t347 = load i64, ptr %t346 + %t348 = mul i64 %t345, %t347 + %t349 = mul i64 %t348, 8 + call void @finch_str_from_int(ptr %a350, i64 %t349) + %t351 = load { ptr, i64, i64 }, ptr %a350 + store { ptr, i64, i64 } %t343, ptr %a353 + store { ptr, i64, i64 } %t351, ptr %a354 + call void @finch_str_concat(ptr %a352, ptr %a353, ptr %a354) + store { ptr, i64, i64 } %t343, ptr %a355 + call void @finch_str_drop(ptr %a355) + store { ptr, i64, i64 } %t351, ptr %a356 + call void @finch_str_drop(ptr %a356) + %t357 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t357, ptr %a359 + store { ptr, i64, i64 } { ptr @.str.2843, i64 15, i64 0 }, ptr %a360 + call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) + store { ptr, i64, i64 } %t357, ptr %a361 + call void @finch_str_drop(ptr %a361) + %t362 = load { ptr, i64, i64 }, ptr %a358 + %t363 = load i64, ptr %a323 + call void @finch_str_from_int(ptr %a364, i64 %t363) + %t365 = load { ptr, i64, i64 }, ptr %a364 + store { ptr, i64, i64 } %t362, ptr %a367 + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + store { ptr, i64, i64 } %t362, ptr %a369 + call void @finch_str_drop(ptr %a369) + store { ptr, i64, i64 } %t365, ptr %a370 + call void @finch_str_drop(ptr %a370) + %t371 = load { ptr, i64, i64 }, ptr %a366 + store { ptr, i64, i64 } %t371, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.2844, i64 2, i64 0 }, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t371, ptr %a375 + call void @finch_str_drop(ptr %a375) + %t376 = load { ptr, i64, i64 }, ptr %a372 + %t377 = load ptr, ptr %a1 + %t378 = icmp eq ptr %t377, null + br i1 %t378, label %panic4647, label %ok4648 +panic4647: + call void @finch_panic(ptr @.str.2845, i64 2074, ptr @.str.2846) + unreachable +ok4648: + %t379 = getelementptr inbounds %S.gen.Gen, ptr %t377, i32 0, i32 33 + %t380 = load i64, ptr %a49 + %t381 = load { ptr, i64, i64 }, ptr %t379 + %t382 = extractvalue { ptr, i64, i64 } %t381, 1 + %t383 = icmp uge i64 %t380, %t382 + br i1 %t383, label %range4649, label %inrange4650 +range4649: + call void @finch_panic_index(ptr @.str.2847, i64 2074, i64 %t380, i64 %t382) + unreachable +inrange4650: + %t384 = extractvalue { ptr, i64, i64 } %t381, 0 + %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t380 + %t386 = load { ptr, i64, i64 }, ptr %t385 + store { ptr, i64, i64 } %t376, ptr %t385 + store { ptr, i64, i64 } %t386, ptr %a387 + call void @finch_str_drop(ptr %a387) + br label %endif4642 +else4641: + %t388 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t388, ptr %a389 + store { ptr, i64, i64 } { ptr @.str.2848, i64 3, i64 0 }, ptr %a390 + %t391 = call i32 @finch_str_eq(ptr %a389, ptr %a390) + %t392 = icmp ne i32 %t391, 0 + br label %logic.from4651 +logic.from4651: + br i1 %t392, label %logic.end4653, label %logic.rhs4652 +logic.rhs4652: + %t393 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t393, ptr %a394 + store { ptr, i64, i64 } { ptr @.str.2849, i64 5, i64 0 }, ptr %a395 + %t396 = call i32 @finch_str_eq(ptr %a394, ptr %a395) + %t397 = icmp ne i32 %t396, 0 + br label %logic.rend4654 +logic.rend4654: + br label %logic.end4653 +logic.end4653: + %t398 = phi i1 [ true, %logic.from4651 ], [ %t397, %logic.rend4654 ] + br i1 %t398, label %then4655, label %else4656 +then4655: + %t399 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2850, i64 4, i64 0 }) + store %S.ast.Type %t399, ptr %a400 + %t401 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t401, ptr %a402 + store { ptr, i64, i64 } { ptr @.str.2851, i64 5, i64 0 }, ptr %a403 + %t404 = call i32 @finch_str_eq(ptr %a402, ptr %a403) + %t405 = icmp ne i32 %t404, 0 + br i1 %t405, label %then4658, label %endif4660 +then4658: + %t406 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t407 = load { ptr, i64, i64 }, ptr %t406 + %t408 = extractvalue { ptr, i64, i64 } %t407, 1 + %t409 = icmp uge i64 0, %t408 + br i1 %t409, label %range4661, label %inrange4662 +range4661: + call void @finch_panic_index(ptr @.str.2852, i64 2078, i64 0, i64 %t408) + unreachable +inrange4662: + %t410 = extractvalue { ptr, i64, i64 } %t407, 0 + %t411 = getelementptr inbounds %S.ast.Type, ptr %t410, i64 0 + %t412 = load %S.ast.Type, ptr %t411 + store %S.ast.Type %t412, ptr %a413 + call void @finch.copy.S_ast_Type(ptr %a414, ptr %a413) + %t415 = load %S.ast.Type, ptr %a414 + %t416 = load %S.ast.Type, ptr %a400 + store %S.ast.Type %t415, ptr %a400 + store %S.ast.Type %t416, ptr %a417 + call void @finch.drop.S_ast_Type(ptr %a417) + br label %endif4660 +endif4660: + %t418 = load ptr, ptr %a1 + %t419 = load ptr, ptr %a1 + %t420 = load %S.ast.Type, ptr %a400 + %t421 = call i64 @finch.gen.diType(ptr %t419, %S.ast.Type %t420) + %t422 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t421) + store { ptr, i64, i64 } { ptr @.str.2853, i64 51, i64 0 }, ptr %a424 + store { ptr, i64, i64 } %t422, ptr %a425 + call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) + store { ptr, i64, i64 } %t422, ptr %a426 + call void @finch_str_drop(ptr %a426) + %t427 = load { ptr, i64, i64 }, ptr %a423 + store { ptr, i64, i64 } %t427, ptr %a429 + store { ptr, i64, i64 } { ptr @.str.2854, i64 11, i64 0 }, ptr %a430 + call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) + store { ptr, i64, i64 } %t427, ptr %a431 + call void @finch_str_drop(ptr %a431) + %t432 = load { ptr, i64, i64 }, ptr %a428 + %t433 = call i64 @finch.gen.md(ptr %t418, { ptr, i64, i64 } %t432) + store { ptr, i64, i64 } %t432, ptr %a434 + call void @finch_str_drop(ptr %a434) + store i64 %t433, ptr %a435 + %t436 = load ptr, ptr %a1 + %t437 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2855, i64 3, i64 0 }) + %t438 = call i64 @finch.gen.diType(ptr %t436, %S.ast.Type %t437) + store %S.ast.Type %t437, ptr %a439 + call void @finch.drop.S_ast_Type(ptr %a439) + store i64 %t438, ptr %a440 + %t441 = load ptr, ptr %a1 + %t442 = load i64, ptr %a49 + %t443 = load i64, ptr %a59 + %t444 = load i64, ptr %a435 + %t445 = call i64 @finch.gen.dbgMember(ptr %t441, { ptr, i64, i64 } { ptr @.str.2856, i64 3, i64 0 }, i64 %t442, i64 %t443, i64 0, i64 %t444, i64 64, i64 0) + store i64 %t445, ptr %a446 + %t447 = load ptr, ptr %a1 + %t448 = load i64, ptr %a49 + %t449 = load i64, ptr %a59 + %t450 = load i64, ptr %a440 + %t451 = call i64 @finch.gen.dbgMember(ptr %t447, { ptr, i64, i64 } { ptr @.str.2857, i64 3, i64 0 }, i64 %t448, i64 %t449, i64 0, i64 %t450, i64 64, i64 64) + store i64 %t451, ptr %a452 + %t453 = load ptr, ptr %a1 + %t454 = load i64, ptr %a49 + %t455 = load i64, ptr %a59 + %t456 = load i64, ptr %a440 + %t457 = call i64 @finch.gen.dbgMember(ptr %t453, { ptr, i64, i64 } { ptr @.str.2858, i64 3, i64 0 }, i64 %t454, i64 %t455, i64 0, i64 %t456, i64 64, i64 128) + store i64 %t457, ptr %a458 + %t459 = load %S.ast.Type, ptr %a2 + %t460 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t459) + store { ptr, i64, i64 } { ptr @.str.2859, i64 52, i64 0 }, ptr %a462 + store { ptr, i64, i64 } %t460, ptr %a463 + call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) + store { ptr, i64, i64 } %t460, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } %t465, ptr %a467 + store { ptr, i64, i64 } { ptr @.str.2860, i64 10, i64 0 }, ptr %a468 + call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) + store { ptr, i64, i64 } %t465, ptr %a469 + call void @finch_str_drop(ptr %a469) + %t470 = load { ptr, i64, i64 }, ptr %a466 + %t471 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a472, i64 %t471) + %t473 = load { ptr, i64, i64 }, ptr %a472 + store { ptr, i64, i64 } %t470, ptr %a475 + store { ptr, i64, i64 } %t473, ptr %a476 + call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) + store { ptr, i64, i64 } %t470, ptr %a477 + call void @finch_str_drop(ptr %a477) + store { ptr, i64, i64 } %t473, ptr %a478 + call void @finch_str_drop(ptr %a478) + %t479 = load { ptr, i64, i64 }, ptr %a474 + store { ptr, i64, i64 } %t479, ptr %a481 + store { ptr, i64, i64 } { ptr @.str.2861, i64 37, i64 0 }, ptr %a482 + call void @finch_str_concat(ptr %a480, ptr %a481, ptr %a482) + store { ptr, i64, i64 } %t479, ptr %a483 + call void @finch_str_drop(ptr %a483) + %t484 = load { ptr, i64, i64 }, ptr %a480 + %t485 = load i64, ptr %a446 + call void @finch_str_from_int(ptr %a486, i64 %t485) + %t487 = load { ptr, i64, i64 }, ptr %a486 + store { ptr, i64, i64 } %t484, ptr %a489 + store { ptr, i64, i64 } %t487, ptr %a490 + call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) + store { ptr, i64, i64 } %t484, ptr %a491 + call void @finch_str_drop(ptr %a491) + store { ptr, i64, i64 } %t487, ptr %a492 + call void @finch_str_drop(ptr %a492) + %t493 = load { ptr, i64, i64 }, ptr %a488 + store { ptr, i64, i64 } %t493, ptr %a495 + store { ptr, i64, i64 } { ptr @.str.2862, i64 3, i64 0 }, ptr %a496 + call void @finch_str_concat(ptr %a494, ptr %a495, ptr %a496) + store { ptr, i64, i64 } %t493, ptr %a497 + call void @finch_str_drop(ptr %a497) + %t498 = load { ptr, i64, i64 }, ptr %a494 + %t499 = load i64, ptr %a452 + call void @finch_str_from_int(ptr %a500, i64 %t499) + %t501 = load { ptr, i64, i64 }, ptr %a500 + store { ptr, i64, i64 } %t498, ptr %a503 + store { ptr, i64, i64 } %t501, ptr %a504 + call void @finch_str_concat(ptr %a502, ptr %a503, ptr %a504) + store { ptr, i64, i64 } %t498, ptr %a505 + call void @finch_str_drop(ptr %a505) + store { ptr, i64, i64 } %t501, ptr %a506 + call void @finch_str_drop(ptr %a506) + %t507 = load { ptr, i64, i64 }, ptr %a502 + store { ptr, i64, i64 } %t507, ptr %a509 + store { ptr, i64, i64 } { ptr @.str.2863, i64 3, i64 0 }, ptr %a510 + call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510) + store { ptr, i64, i64 } %t507, ptr %a511 + call void @finch_str_drop(ptr %a511) + %t512 = load { ptr, i64, i64 }, ptr %a508 + %t513 = load i64, ptr %a458 + call void @finch_str_from_int(ptr %a514, i64 %t513) + %t515 = load { ptr, i64, i64 }, ptr %a514 + store { ptr, i64, i64 } %t512, ptr %a517 + store { ptr, i64, i64 } %t515, ptr %a518 + call void @finch_str_concat(ptr %a516, ptr %a517, ptr %a518) + store { ptr, i64, i64 } %t512, ptr %a519 + call void @finch_str_drop(ptr %a519) + store { ptr, i64, i64 } %t515, ptr %a520 + call void @finch_str_drop(ptr %a520) + %t521 = load { ptr, i64, i64 }, ptr %a516 + store { ptr, i64, i64 } %t521, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.2864, i64 2, i64 0 }, ptr %a524 + call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) + store { ptr, i64, i64 } %t521, ptr %a525 + call void @finch_str_drop(ptr %a525) + %t526 = load { ptr, i64, i64 }, ptr %a522 + %t527 = load ptr, ptr %a1 + %t528 = icmp eq ptr %t527, null + br i1 %t528, label %panic4663, label %ok4664 +panic4663: + call void @finch_panic(ptr @.str.2865, i64 2085, ptr @.str.2866) + unreachable +ok4664: + %t529 = getelementptr inbounds %S.gen.Gen, ptr %t527, i32 0, i32 33 + %t530 = load i64, ptr %a49 + %t531 = load { ptr, i64, i64 }, ptr %t529 + %t532 = extractvalue { ptr, i64, i64 } %t531, 1 + %t533 = icmp uge i64 %t530, %t532 + br i1 %t533, label %range4665, label %inrange4666 +range4665: + call void @finch_panic_index(ptr @.str.2867, i64 2085, i64 %t530, i64 %t532) + unreachable +inrange4666: + %t534 = extractvalue { ptr, i64, i64 } %t531, 0 + %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %t534, i64 %t530 + %t536 = load { ptr, i64, i64 }, ptr %t535 + store { ptr, i64, i64 } %t526, ptr %t535 + store { ptr, i64, i64 } %t536, ptr %a537 + call void @finch_str_drop(ptr %a537) + call void @finch.drop.S_ast_Type(ptr %a400) + br label %endif4657 +else4656: + %t538 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t538, ptr %a539 + store { ptr, i64, i64 } { ptr @.str.2868, i64 3, i64 0 }, ptr %a540 + %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) + %t542 = icmp ne i32 %t541, 0 + br i1 %t542, label %then4667, label %else4668 +then4667: + %t543 = load ptr, ptr %a1 + %t544 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2869, i64 3, i64 0 }) + %t545 = call i64 @finch.gen.diType(ptr %t543, %S.ast.Type %t544) + store %S.ast.Type %t544, ptr %a546 + call void @finch.drop.S_ast_Type(ptr %a546) + store i64 %t545, ptr %a547 + %t548 = load ptr, ptr %a1 + %t549 = call i64 @finch.gen.md(ptr %t548, { ptr, i64, i64 } { ptr @.str.2870, i64 66, i64 0 }) + store i64 %t549, ptr %a550 + %t551 = mul i64 7, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t552 = call ptr @finch_alloc(i64 %t551) + %t553 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 0 + store { ptr, i64, i64 } { ptr @.str.2871, i64 7, i64 0 }, ptr %t553 + %t554 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 1 + store { ptr, i64, i64 } { ptr @.str.2872, i64 3, i64 0 }, ptr %t554 + %t555 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 2 + store { ptr, i64, i64 } { ptr @.str.2873, i64 4, i64 0 }, ptr %t555 + %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 3 + store { ptr, i64, i64 } { ptr @.str.2874, i64 3, i64 0 }, ptr %t556 + %t557 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 4 + store { ptr, i64, i64 } { ptr @.str.2875, i64 5, i64 0 }, ptr %t557 + %t558 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 5 + store { ptr, i64, i64 } { ptr @.str.2876, i64 4, i64 0 }, ptr %t558 + %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 6 + store { ptr, i64, i64 } { ptr @.str.2877, i64 4, i64 0 }, ptr %t559 + %t560 = insertvalue { ptr, i64, i64 } undef, ptr %t552, 0 + %t561 = insertvalue { ptr, i64, i64 } %t560, i64 7, 1 + %t562 = insertvalue { ptr, i64, i64 } %t561, i64 7, 2 + store { ptr, i64, i64 } %t562, ptr %a563 + store { ptr, i64, i64 } zeroinitializer, ptr %a564 + store i64 0, ptr %a565 + br label %for.cond4670 +for.cond4670: + %t566 = load i64, ptr %a565 + %t567 = icmp slt i64 %t566, 7 + br i1 %t567, label %for.body4671, label %for.end4673 +for.body4671: + %t568 = load i64, ptr %a547 + store i64 %t568, ptr %a569 + %t570 = load i64, ptr %a565 + %t571 = icmp eq i64 %t570, 0 + br label %logic.from4674 +logic.from4674: + br i1 %t571, label %logic.end4676, label %logic.rhs4675 +logic.rhs4675: + %t572 = load i64, ptr %a565 + %t573 = icmp eq i64 %t572, 4 + br label %logic.rend4677 +logic.rend4677: + br label %logic.end4676 +logic.end4676: + %t574 = phi i1 [ true, %logic.from4674 ], [ %t573, %logic.rend4677 ] + br i1 %t574, label %then4678, label %endif4680 +then4678: + %t575 = load i64, ptr %a550 + store i64 %t575, ptr %a569 + br label %endif4680 +endif4680: + %t576 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 + %t577 = load ptr, ptr %a1 + %t578 = load i64, ptr %a565 + %t579 = load { ptr, i64, i64 }, ptr %a563 + %t580 = extractvalue { ptr, i64, i64 } %t579, 1 + %t581 = icmp uge i64 %t578, %t580 + br i1 %t581, label %range4681, label %inrange4682 +range4681: + call void @finch_panic_index(ptr @.str.2879, i64 2096, i64 %t578, i64 %t580) + unreachable +inrange4682: + %t582 = extractvalue { ptr, i64, i64 } %t579, 0 + %t583 = getelementptr inbounds { ptr, i64, i64 }, ptr %t582, i64 %t578 + %t584 = load { ptr, i64, i64 }, ptr %t583 + %t585 = load i64, ptr %a49 + %t586 = load i64, ptr %a59 + %t587 = load i64, ptr %a569 + %t588 = load i64, ptr %a565 + %t589 = mul i64 64, %t588 + %t590 = call i64 @finch.gen.dbgMember(ptr %t577, { ptr, i64, i64 } %t584, i64 %t585, i64 %t586, i64 0, i64 %t587, i64 64, i64 %t589) + call void @finch_str_from_int(ptr %a591, i64 %t590) + %t592 = load { ptr, i64, i64 }, ptr %a591 + store { ptr, i64, i64 } { ptr @.str.2878, i64 1, i64 0 }, ptr %a594 + store { ptr, i64, i64 } %t592, ptr %a595 + call void @finch_str_concat(ptr %a593, ptr %a594, ptr %a595) + store { ptr, i64, i64 } %t592, ptr %a596 + call void @finch_str_drop(ptr %a596) + %t597 = load { ptr, i64, i64 }, ptr %a593 + %t598 = load i64, ptr %t576 + %t599 = add i64 %t598, 1 + call void @finch_arr_reserve(ptr %a564, i64 %t599, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t600 = load ptr, ptr %a564 + %t601 = getelementptr inbounds { ptr, i64, i64 }, ptr %t600, i64 %t598 + store { ptr, i64, i64 } %t597, ptr %t601 + store i64 %t599, ptr %t576 + br label %for.step4672 +for.step4672: + %t602 = load i64, ptr %a565 + %t603 = add i64 %t602, 1 + store i64 %t603, ptr %a565 + br label %for.cond4670 +for.end4673: + %t604 = load %S.ast.Type, ptr %a2 + %t605 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t604) + store { ptr, i64, i64 } { ptr @.str.2880, i64 52, i64 0 }, ptr %a607 + store { ptr, i64, i64 } %t605, ptr %a608 + call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) + store { ptr, i64, i64 } %t605, ptr %a609 + call void @finch_str_drop(ptr %a609) + %t610 = load { ptr, i64, i64 }, ptr %a606 + store { ptr, i64, i64 } %t610, ptr %a612 + store { ptr, i64, i64 } { ptr @.str.2881, i64 10, i64 0 }, ptr %a613 + call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) + store { ptr, i64, i64 } %t610, ptr %a614 + call void @finch_str_drop(ptr %a614) + %t615 = load { ptr, i64, i64 }, ptr %a611 + %t616 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a617, i64 %t616) + %t618 = load { ptr, i64, i64 }, ptr %a617 + store { ptr, i64, i64 } %t615, ptr %a620 + store { ptr, i64, i64 } %t618, ptr %a621 + call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) + store { ptr, i64, i64 } %t615, ptr %a622 + call void @finch_str_drop(ptr %a622) + store { ptr, i64, i64 } %t618, ptr %a623 + call void @finch_str_drop(ptr %a623) + %t624 = load { ptr, i64, i64 }, ptr %a619 + store { ptr, i64, i64 } %t624, ptr %a626 + store { ptr, i64, i64 } { ptr @.str.2882, i64 36, i64 0 }, ptr %a627 + call void @finch_str_concat(ptr %a625, ptr %a626, ptr %a627) + store { ptr, i64, i64 } %t624, ptr %a628 + call void @finch_str_drop(ptr %a628) + %t629 = load { ptr, i64, i64 }, ptr %a625 + %t630 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2883, i64 2, i64 0 }, ptr %a631 + call void @finch_str_join(ptr %a632, ptr %a564, ptr %a631) + %t633 = load { ptr, i64, i64 }, ptr %a632 + store { ptr, i64, i64 } %t629, ptr %a635 + store { ptr, i64, i64 } %t633, ptr %a636 + call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636) + store { ptr, i64, i64 } %t629, ptr %a637 + call void @finch_str_drop(ptr %a637) + store { ptr, i64, i64 } %t633, ptr %a638 + call void @finch_str_drop(ptr %a638) + %t639 = load { ptr, i64, i64 }, ptr %a634 + store { ptr, i64, i64 } %t639, ptr %a641 + store { ptr, i64, i64 } { ptr @.str.2884, i64 2, i64 0 }, ptr %a642 + call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) + store { ptr, i64, i64 } %t639, ptr %a643 + call void @finch_str_drop(ptr %a643) + %t644 = load { ptr, i64, i64 }, ptr %a640 + %t645 = load ptr, ptr %a1 + %t646 = icmp eq ptr %t645, null + br i1 %t646, label %panic4683, label %ok4684 +panic4683: + call void @finch_panic(ptr @.str.2885, i64 2098, ptr @.str.2886) + unreachable +ok4684: + %t647 = getelementptr inbounds %S.gen.Gen, ptr %t645, i32 0, i32 33 + %t648 = load i64, ptr %a49 + %t649 = load { ptr, i64, i64 }, ptr %t647 + %t650 = extractvalue { ptr, i64, i64 } %t649, 1 + %t651 = icmp uge i64 %t648, %t650 + br i1 %t651, label %range4685, label %inrange4686 +range4685: + call void @finch_panic_index(ptr @.str.2887, i64 2098, i64 %t648, i64 %t650) + unreachable +inrange4686: + %t652 = extractvalue { ptr, i64, i64 } %t649, 0 + %t653 = getelementptr inbounds { ptr, i64, i64 }, ptr %t652, i64 %t648 + %t654 = load { ptr, i64, i64 }, ptr %t653 + store { ptr, i64, i64 } %t644, ptr %t653 + store { ptr, i64, i64 } %t654, ptr %a655 + call void @finch_str_drop(ptr %a655) + call void @finch.drop.arr_str(ptr %a564) + call void @finch.drop.arr_str(ptr %a563) + br label %endif4669 +else4668: + %t656 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t656, ptr %a657 + store { ptr, i64, i64 } { ptr @.str.2888, i64 6, i64 0 }, ptr %a658 + %t659 = call i32 @finch_str_eq(ptr %a657, ptr %a658) + %t660 = icmp ne i32 %t659, 0 + br i1 %t660, label %then4687, label %else4688 +then4687: + %t661 = load ptr, ptr %a1 + %t662 = icmp eq ptr %t661, null + br i1 %t662, label %panic4690, label %ok4691 +panic4690: + call void @finch_panic(ptr @.str.2889, i64 2100, ptr @.str.2890) + unreachable +ok4691: + %t663 = getelementptr inbounds %S.gen.Gen, ptr %t661, i32 0, i32 16 + %t664 = load ptr, ptr %a1 + %t665 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t666 = load { ptr, i64, i64 }, ptr %t665 + %t667 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t668 = load { ptr, i64, i64 }, ptr %t667 + %t669 = call i64 @finch.gen.findStruct(ptr %t664, { ptr, i64, i64 } %t666, { ptr, i64, i64 } %t668) + %t670 = load { ptr, i64, i64 }, ptr %t663 + %t671 = extractvalue { ptr, i64, i64 } %t670, 1 + %t672 = icmp uge i64 %t669, %t671 + br i1 %t672, label %range4692, label %inrange4693 +range4692: + call void @finch_panic_index(ptr @.str.2891, i64 2100, i64 %t669, i64 %t671) + unreachable +inrange4693: + %t673 = extractvalue { ptr, i64, i64 } %t670, 0 + %t674 = getelementptr inbounds %S.gen.StructDef, ptr %t673, i64 %t669 + %t675 = load %S.gen.StructDef, ptr %t674 + store %S.gen.StructDef %t675, ptr %a676 + call void @finch.copy.S_gen_StructDef(ptr %a677, ptr %a676) + %t678 = load %S.gen.StructDef, ptr %a677 + store %S.gen.StructDef %t678, ptr %a679 + %t680 = load ptr, ptr %a1 + %t681 = load %S.gen.StructDef, ptr %a679 + %t682 = call { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %t680, %S.gen.StructDef %t681) + store { ptr, i64, i64 } %t682, ptr %a683 + %t684 = load ptr, ptr %a1 + %t685 = load %S.ast.Type, ptr %a2 + %t686 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t684, %S.ast.Type %t685) + store %S.gen.SizeAlign %t686, ptr %a687 + store { ptr, i64, i64 } zeroinitializer, ptr %a688 + %t689 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 + %t690 = getelementptr inbounds { ptr, i64, i64 }, ptr %t689, i32 0, i32 1 + %t691 = load i64, ptr %t690 + store i64 0, ptr %a692 + br label %for.cond4694 +for.cond4694: + %t693 = load i64, ptr %a692 + %t694 = icmp slt i64 %t693, %t691 + br i1 %t694, label %for.body4695, label %for.end4697 +for.body4695: + %t695 = load ptr, ptr %a1 + %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 + %t697 = load i64, ptr %a692 + %t698 = load { ptr, i64, i64 }, ptr %t696 + %t699 = extractvalue { ptr, i64, i64 } %t698, 1 + %t700 = icmp uge i64 %t697, %t699 + br i1 %t700, label %range4698, label %inrange4699 +range4698: + call void @finch_panic_index(ptr @.str.2892, i64 2105, i64 %t697, i64 %t699) + unreachable +inrange4699: + %t701 = extractvalue { ptr, i64, i64 } %t698, 0 + %t702 = getelementptr inbounds %S.ast.Type, ptr %t701, i64 %t697 + %t703 = load %S.ast.Type, ptr %t702 + %t704 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t695, %S.ast.Type %t703) + store %S.gen.SizeAlign %t704, ptr %a705 + %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %a688, i32 0, i32 1 + %t707 = load ptr, ptr %a1 + %t708 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 11 + %t709 = load i64, ptr %a692 + %t710 = load { ptr, i64, i64 }, ptr %t708 + %t711 = extractvalue { ptr, i64, i64 } %t710, 1 + %t712 = icmp uge i64 %t709, %t711 + br i1 %t712, label %range4700, label %inrange4701 +range4700: + call void @finch_panic_index(ptr @.str.2894, i64 2106, i64 %t709, i64 %t711) + unreachable +inrange4701: + %t713 = extractvalue { ptr, i64, i64 } %t710, 0 + %t714 = getelementptr inbounds { ptr, i64, i64 }, ptr %t713, i64 %t709 + %t715 = load { ptr, i64, i64 }, ptr %t714 + %t716 = load i64, ptr %a49 + %t717 = load i64, ptr %a59 + %t718 = load ptr, ptr %a1 + %t719 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 + %t720 = load i64, ptr %a692 + %t721 = load { ptr, i64, i64 }, ptr %t719 + %t722 = extractvalue { ptr, i64, i64 } %t721, 1 + %t723 = icmp uge i64 %t720, %t722 + br i1 %t723, label %range4702, label %inrange4703 +range4702: + call void @finch_panic_index(ptr @.str.2895, i64 2106, i64 %t720, i64 %t722) + unreachable +inrange4703: + %t724 = extractvalue { ptr, i64, i64 } %t721, 0 + %t725 = getelementptr inbounds %S.ast.Type, ptr %t724, i64 %t720 + %t726 = load %S.ast.Type, ptr %t725 + %t727 = call i64 @finch.gen.diType(ptr %t718, %S.ast.Type %t726) + %t728 = getelementptr inbounds %S.gen.SizeAlign, ptr %a705, i32 0, i32 0 + %t729 = load i64, ptr %t728 + %t730 = mul i64 %t729, 8 + %t731 = load i64, ptr %a692 + %t732 = load { ptr, i64, i64 }, ptr %a683 + %t733 = extractvalue { ptr, i64, i64 } %t732, 1 + %t734 = icmp uge i64 %t731, %t733 + br i1 %t734, label %range4704, label %inrange4705 +range4704: + call void @finch_panic_index(ptr @.str.2896, i64 2106, i64 %t731, i64 %t733) + unreachable +inrange4705: + %t735 = extractvalue { ptr, i64, i64 } %t732, 0 + %t736 = getelementptr inbounds i64, ptr %t735, i64 %t731 + %t737 = load i64, ptr %t736 + %t738 = mul i64 %t737, 8 + %t739 = call i64 @finch.gen.dbgMember(ptr %t707, { ptr, i64, i64 } %t715, i64 %t716, i64 %t717, i64 0, i64 %t727, i64 %t730, i64 %t738) + call void @finch_str_from_int(ptr %a740, i64 %t739) + %t741 = load { ptr, i64, i64 }, ptr %a740 + store { ptr, i64, i64 } { ptr @.str.2893, i64 1, i64 0 }, ptr %a743 + store { ptr, i64, i64 } %t741, ptr %a744 + call void @finch_str_concat(ptr %a742, ptr %a743, ptr %a744) + store { ptr, i64, i64 } %t741, ptr %a745 + call void @finch_str_drop(ptr %a745) + %t746 = load { ptr, i64, i64 }, ptr %a742 + %t747 = load i64, ptr %t706 + %t748 = add i64 %t747, 1 + call void @finch_arr_reserve(ptr %a688, i64 %t748, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t749 = load ptr, ptr %a688 + %t750 = getelementptr inbounds { ptr, i64, i64 }, ptr %t749, i64 %t747 + store { ptr, i64, i64 } %t746, ptr %t750 + store i64 %t748, ptr %t706 + br label %for.step4696 +for.step4696: + %t751 = load i64, ptr %a692 + %t752 = add i64 %t751, 1 + store i64 %t752, ptr %a692 + br label %for.cond4694 +for.end4697: + %t753 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 1 + %t754 = load { ptr, i64, i64 }, ptr %t753 + store { ptr, i64, i64 } { ptr @.str.2897, i64 52, i64 0 }, ptr %a756 + store { ptr, i64, i64 } %t754, ptr %a757 + call void @finch_str_concat(ptr %a755, ptr %a756, ptr %a757) + %t758 = load { ptr, i64, i64 }, ptr %a755 + store { ptr, i64, i64 } %t758, ptr %a760 + store { ptr, i64, i64 } { ptr @.str.2898, i64 10, i64 0 }, ptr %a761 + call void @finch_str_concat(ptr %a759, ptr %a760, ptr %a761) + store { ptr, i64, i64 } %t758, ptr %a762 + call void @finch_str_drop(ptr %a762) + %t763 = load { ptr, i64, i64 }, ptr %a759 + %t764 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a765, i64 %t764) + %t766 = load { ptr, i64, i64 }, ptr %a765 + store { ptr, i64, i64 } %t763, ptr %a768 + store { ptr, i64, i64 } %t766, ptr %a769 + call void @finch_str_concat(ptr %a767, ptr %a768, ptr %a769) + store { ptr, i64, i64 } %t763, ptr %a770 + call void @finch_str_drop(ptr %a770) + store { ptr, i64, i64 } %t766, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t772, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.2899, i64 8, i64 0 }, ptr %a775 + call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) + store { ptr, i64, i64 } %t772, ptr %a776 + call void @finch_str_drop(ptr %a776) + %t777 = load { ptr, i64, i64 }, ptr %a773 + %t778 = getelementptr inbounds %S.gen.SizeAlign, ptr %a687, i32 0, i32 0 + %t779 = load i64, ptr %t778 + %t780 = mul i64 %t779, 8 + call void @finch_str_from_int(ptr %a781, i64 %t780) + %t782 = load { ptr, i64, i64 }, ptr %a781 + store { ptr, i64, i64 } %t777, ptr %a784 + store { ptr, i64, i64 } %t782, ptr %a785 + call void @finch_str_concat(ptr %a783, ptr %a784, ptr %a785) + store { ptr, i64, i64 } %t777, ptr %a786 + call void @finch_str_drop(ptr %a786) + store { ptr, i64, i64 } %t782, ptr %a787 + call void @finch_str_drop(ptr %a787) + %t788 = load { ptr, i64, i64 }, ptr %a783 + store { ptr, i64, i64 } %t788, ptr %a790 + store { ptr, i64, i64 } { ptr @.str.2900, i64 24, i64 0 }, ptr %a791 + call void @finch_str_concat(ptr %a789, ptr %a790, ptr %a791) + store { ptr, i64, i64 } %t788, ptr %a792 + call void @finch_str_drop(ptr %a792) + %t793 = load { ptr, i64, i64 }, ptr %a789 + %t794 = getelementptr inbounds { ptr, i64, i64 }, ptr %a688, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2901, i64 2, i64 0 }, ptr %a795 + call void @finch_str_join(ptr %a796, ptr %a688, ptr %a795) + %t797 = load { ptr, i64, i64 }, ptr %a796 + store { ptr, i64, i64 } %t793, ptr %a799 + store { ptr, i64, i64 } %t797, ptr %a800 + call void @finch_str_concat(ptr %a798, ptr %a799, ptr %a800) + store { ptr, i64, i64 } %t793, ptr %a801 + call void @finch_str_drop(ptr %a801) + store { ptr, i64, i64 } %t797, ptr %a802 + call void @finch_str_drop(ptr %a802) + %t803 = load { ptr, i64, i64 }, ptr %a798 + store { ptr, i64, i64 } %t803, ptr %a805 + store { ptr, i64, i64 } { ptr @.str.2902, i64 2, i64 0 }, ptr %a806 + call void @finch_str_concat(ptr %a804, ptr %a805, ptr %a806) + store { ptr, i64, i64 } %t803, ptr %a807 + call void @finch_str_drop(ptr %a807) + %t808 = load { ptr, i64, i64 }, ptr %a804 + %t809 = load ptr, ptr %a1 + %t810 = icmp eq ptr %t809, null + br i1 %t810, label %panic4706, label %ok4707 +panic4706: + call void @finch_panic(ptr @.str.2903, i64 2108, ptr @.str.2904) + unreachable +ok4707: + %t811 = getelementptr inbounds %S.gen.Gen, ptr %t809, i32 0, i32 33 + %t812 = load i64, ptr %a49 + %t813 = load { ptr, i64, i64 }, ptr %t811 + %t814 = extractvalue { ptr, i64, i64 } %t813, 1 + %t815 = icmp uge i64 %t812, %t814 + br i1 %t815, label %range4708, label %inrange4709 +range4708: + call void @finch_panic_index(ptr @.str.2905, i64 2108, i64 %t812, i64 %t814) + unreachable +inrange4709: + %t816 = extractvalue { ptr, i64, i64 } %t813, 0 + %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t812 + %t818 = load { ptr, i64, i64 }, ptr %t817 + store { ptr, i64, i64 } %t808, ptr %t817 + store { ptr, i64, i64 } %t818, ptr %a819 + call void @finch_str_drop(ptr %a819) + call void @finch.drop.arr_str(ptr %a688) + call void @finch.drop.arr_int(ptr %a683) + call void @finch.drop.S_gen_StructDef(ptr %a679) + br label %endif4689 +else4688: + %t820 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.2906, i64 20, i64 0 }, ptr %a822 + store { ptr, i64, i64 } %t820, ptr %a823 + call void @finch_str_concat(ptr %a821, ptr %a822, ptr %a823) + %t824 = load { ptr, i64, i64 }, ptr %a821 + store { ptr, i64, i64 } %t824, ptr %a826 + store { ptr, i64, i64 } { ptr @.str.2907, i64 39, i64 0 }, ptr %a827 + call void @finch_str_concat(ptr %a825, ptr %a826, ptr %a827) + store { ptr, i64, i64 } %t824, ptr %a828 + call void @finch_str_drop(ptr %a828) + %t829 = load { ptr, i64, i64 }, ptr %a825 + %t830 = load ptr, ptr %a1 + %t831 = icmp eq ptr %t830, null + br i1 %t831, label %panic4710, label %ok4711 +panic4710: + call void @finch_panic(ptr @.str.2908, i64 2110, ptr @.str.2909) + unreachable +ok4711: + %t832 = getelementptr inbounds %S.gen.Gen, ptr %t830, i32 0, i32 33 + %t833 = load i64, ptr %a49 + %t834 = load { ptr, i64, i64 }, ptr %t832 + %t835 = extractvalue { ptr, i64, i64 } %t834, 1 + %t836 = icmp uge i64 %t833, %t835 + br i1 %t836, label %range4712, label %inrange4713 +range4712: + call void @finch_panic_index(ptr @.str.2910, i64 2110, i64 %t833, i64 %t835) + unreachable +inrange4713: + %t837 = extractvalue { ptr, i64, i64 } %t834, 0 + %t838 = getelementptr inbounds { ptr, i64, i64 }, ptr %t837, i64 %t833 + %t839 = load { ptr, i64, i64 }, ptr %t838 + store { ptr, i64, i64 } %t829, ptr %t838 + store { ptr, i64, i64 } %t839, ptr %a840 + call void @finch_str_drop(ptr %a840) + br label %endif4689 +endif4689: + br label %endif4669 +endif4669: + br label %endif4657 +endif4657: + br label %endif4642 +endif4642: + br label %endif4630 +endif4630: + %t841 = load i64, ptr %a49 + call void @finch_str_drop(ptr %a27) + call void @finch_str_drop(ptr %a8) + ret i64 %t841 +endif4611: + br label %endif4605 +endif4605: + br label %endif4602 +endif4602: + br label %endif4599 +endif4599: + br label %endif4596 +endif4596: + br label %endif4593 +endif4593: + br label %endif4590 +endif4590: + %t842 = load i64, ptr %a49 + %t843 = load ptr, ptr %a1 + %t844 = icmp eq ptr %t843, null + br i1 %t844, label %panic4714, label %ok4715 +panic4714: + call void @finch_panic(ptr @.str.2911, i64 2114, ptr @.str.2912) + unreachable +ok4715: + %t845 = getelementptr inbounds %S.gen.Gen, ptr %t843, i32 0, i32 34 + %t846 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t846, ptr %a847 + store i32 0, ptr %a848 + %t849 = call i64 @finch_map_slot(ptr %t845, ptr %a847, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a848) + %t850 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t845, i32 0, i32 0 + %t851 = load ptr, ptr %t850 + %t852 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t851, i64 %t849 + %t853 = load i32, ptr %a848 + %t854 = icmp ne i32 %t853, 0 + br i1 %t854, label %map.new4716, label %map.have4717 +map.new4716: + %t855 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 1 + call void @finch_str_copy(ptr %t855, ptr %a847) + %t856 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 + store i64 0, ptr %t856 + br label %map.have4717 +map.have4717: + %t857 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 + store i64 %t842, ptr %t857 + %t858 = load i64, ptr %a49 + call void @finch_str_drop(ptr %a27) + call void @finch_str_drop(ptr %a8) + ret i64 %t858 +} + +define internal i64 @finch.gen.dbgLocation(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca i64, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca i32, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic4718, label %ok4719 +panic4718: + call void @finch_panic(ptr @.str.2914, i64 2119, ptr @.str.2915) + unreachable +ok4719: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 37 + %t5 = load i64, ptr %t4 + call void @finch_str_from_int(ptr %a6, i64 %t5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.2913, i64 2, i64 0 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.2916, i64 1, i64 0 }, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic4720, label %ok4721 +panic4720: + call void @finch_panic(ptr @.str.2917, i64 2119, ptr @.str.2918) + unreachable +ok4721: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 38 + %t21 = load i64, ptr %t20 + call void @finch_str_from_int(ptr %a22, i64 %t21) + %t23 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t17, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t17, ptr %a27 + call void @finch_str_drop(ptr %a27) + store { ptr, i64, i64 } %t23, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.2919, i64 1, i64 0 }, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic4722, label %ok4723 +panic4722: + call void @finch_panic(ptr @.str.2920, i64 2119, ptr @.str.2921) + unreachable +ok4723: + %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 36 + %t38 = load i64, ptr %t37 + call void @finch_str_from_int(ptr %a39, i64 %t38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t34, ptr %a42 + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t34, ptr %a44 + call void @finch_str_drop(ptr %a44) + store { ptr, i64, i64 } %t40, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t46, ptr %a47 + %t48 = load ptr, ptr %a1 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic4724, label %ok4725 +panic4724: + call void @finch_panic(ptr @.str.2922, i64 2120, ptr @.str.2923) + unreachable +ok4725: + %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 34 + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t54 = icmp sge i64 %t53, 0 + br i1 %t54, label %then4726, label %endif4728 +then4726: + %t55 = load ptr, ptr %a1 + %t56 = icmp eq ptr %t55, null + br i1 %t56, label %panic4729, label %ok4730 +panic4729: + call void @finch_panic(ptr @.str.2924, i64 2121, ptr @.str.2925) + unreachable +ok4730: + %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 34 + %t58 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t58, ptr %a59 + %t60 = call i64 @finch_map_find(ptr %t57, ptr %a59, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t61 = icmp slt i64 %t60, 0 + br i1 %t61, label %map.missing4731, label %map.found4732 +map.missing4731: + store { ptr, i64, i64 } zeroinitializer, ptr %a62 + store { ptr, i64, i64 } %t58, ptr %a63 + call void @finch_buf_str(ptr %a62, ptr %a63, i32 1) + call void @finch_map_missing(ptr @.str.2926, i64 2121, ptr %a62) + unreachable +map.found4732: + %t64 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t57, i32 0, i32 0 + %t65 = load ptr, ptr %t64 + %t66 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t65, i64 %t60 + %t67 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t66, i32 0, i32 2 + %t68 = load i64, ptr %t67 + call void @finch_str_drop(ptr %a47) + ret i64 %t68 +endif4728: + %t69 = load ptr, ptr %a1 + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic4733, label %ok4734 +panic4733: + call void @finch_panic(ptr @.str.2928, i64 2123, ptr @.str.2929) + unreachable +ok4734: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 37 + %t73 = load i64, ptr %t72 + call void @finch_str_from_int(ptr %a74, i64 %t73) + %t75 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.2927, i64 18, i64 0 }, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.2930, i64 10, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic4735, label %ok4736 +panic4735: + call void @finch_panic(ptr @.str.2931, i64 2123, ptr @.str.2932) + unreachable +ok4736: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 38 + %t89 = load i64, ptr %t88 + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t85, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t85, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.2933, i64 10, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = load ptr, ptr %a1 + %t104 = icmp eq ptr %t103, null + br i1 %t104, label %panic4737, label %ok4738 +panic4737: + call void @finch_panic(ptr @.str.2934, i64 2123, ptr @.str.2935) + unreachable +ok4738: + %t105 = getelementptr inbounds %S.gen.Gen, ptr %t103, i32 0, i32 36 + %t106 = load i64, ptr %t105 + call void @finch_str_from_int(ptr %a107, i64 %t106) + %t108 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t102, ptr %a110 + store { ptr, i64, i64 } %t108, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t102, ptr %a112 + call void @finch_str_drop(ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.2936, i64 1, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = call i64 @finch.gen.md(ptr %t69, { ptr, i64, i64 } %t119) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + store i64 %t120, ptr %a122 + %t123 = load i64, ptr %a122 + %t124 = load ptr, ptr %a1 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic4739, label %ok4740 +panic4739: + call void @finch_panic(ptr @.str.2937, i64 2124, ptr @.str.2938) + unreachable +ok4740: + %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 34 + %t127 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t127, ptr %a128 + store i32 0, ptr %a129 + %t130 = call i64 @finch_map_slot(ptr %t126, ptr %a128, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a129) + %t131 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t126, i32 0, i32 0 + %t132 = load ptr, ptr %t131 + %t133 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t132, i64 %t130 + %t134 = load i32, ptr %a129 + %t135 = icmp ne i32 %t134, 0 + br i1 %t135, label %map.new4741, label %map.have4742 +map.new4741: + %t136 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 1 + call void @finch_str_copy(ptr %t136, ptr %a128) + %t137 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 + store i64 0, ptr %t137 + br label %map.have4742 +map.have4742: + %t138 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 + store i64 %t123, ptr %t138 + %t139 = load i64, ptr %a122 + call void @finch_str_drop(ptr %a47) + ret i64 %t139 +} + +define internal i64 @finch.gen.dbgSubprogram(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.gen.FnSig, align 16 + %a8 = alloca %S.gen.FnSig, align 16 + %a10 = alloca %S.gen.FnSig, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca i64, align 16 + %a40 = alloca %S.ast.Type, align 16 + %a63 = alloca i64, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca i64, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4743, label %ok4744 +panic4743: + call void @finch_panic(ptr @.str.2939, i64 2129, ptr @.str.2940) + unreachable +ok4744: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 + %t6 = load %S.gen.FnSig, ptr %t5 + store %S.gen.FnSig %t6, ptr %a7 + call void @finch.copy.S_gen_FnSig(ptr %a8, ptr %a7) + %t9 = load %S.gen.FnSig, ptr %a8 + store %S.gen.FnSig %t9, ptr %a10 + store { ptr, i64, i64 } zeroinitializer, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t13 = load ptr, ptr %a1 + %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 12 + %t15 = load %S.ast.Type, ptr %t14 + %t16 = call i64 @finch.gen.diType(ptr %t13, %S.ast.Type %t15) + %t17 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t16) + %t18 = load i64, ptr %t12 + %t19 = add i64 %t18, 1 + call void @finch_arr_reserve(ptr %a11, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t20 = load ptr, ptr %a11 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + store { ptr, i64, i64 } %t17, ptr %t21 + store i64 %t19, ptr %t12 + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 2 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = icmp sgt i64 %t24, 0 + br i1 %t25, label %then4745, label %endif4747 +then4745: + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = add i64 %t27, 1 + call void @finch_arr_reserve(ptr %a11, i64 %t28, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t29 = load ptr, ptr %a11 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t27 + store { ptr, i64, i64 } { ptr @.str.2941, i64 4, i64 0 }, ptr %t30 + store i64 %t28, ptr %t26 + br label %endif4747 +endif4747: + %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 13 + store i64 0, ptr %a32 + br label %each.cond4748 +each.cond4748: + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t34 = load i64, ptr %t33 + %t35 = load i64, ptr %a32 + %t36 = icmp slt i64 %t35, %t34 + br i1 %t36, label %each.body4749, label %each.end4751 +each.body4749: + %t37 = load ptr, ptr %t31 + %t38 = getelementptr inbounds %S.ast.Type, ptr %t37, i64 %t35 + %t39 = load %S.ast.Type, ptr %t38 + store %S.ast.Type %t39, ptr %a40 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t42 = load ptr, ptr %a1 + %t43 = load %S.ast.Type, ptr %a40 + %t44 = call i64 @finch.gen.diType(ptr %t42, %S.ast.Type %t43) + %t45 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t44) + %t46 = load i64, ptr %t41 + %t47 = add i64 %t46, 1 + call void @finch_arr_reserve(ptr %a11, i64 %t47, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t48 = load ptr, ptr %a11 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t46 + store { ptr, i64, i64 } %t45, ptr %t49 + store i64 %t47, ptr %t41 + br label %each.step4750 +each.step4750: + %t50 = load i64, ptr %a32 + %t51 = add i64 %t50, 1 + store i64 %t51, ptr %a32 + br label %each.cond4748 +each.end4751: + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic4752, label %ok4753 +panic4752: + call void @finch_panic(ptr @.str.2942, i64 2138, ptr @.str.2943) + unreachable +ok4753: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 35 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t56 = load i64, ptr %t55 + %t57 = load { ptr, i64, i64 }, ptr %t54 + %t58 = extractvalue { ptr, i64, i64 } %t57, 1 + %t59 = icmp uge i64 %t56, %t58 + br i1 %t59, label %range4754, label %inrange4755 +range4754: + call void @finch_panic_index(ptr @.str.2944, i64 2138, i64 %t56, i64 %t58) + unreachable +inrange4755: + %t60 = extractvalue { ptr, i64, i64 } %t57, 0 + %t61 = getelementptr inbounds i64, ptr %t60, i64 %t56 + %t62 = load i64, ptr %t61 + store i64 %t62, ptr %a63 + %t64 = load ptr, ptr %a1 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2946, i64 2, i64 0 }, ptr %a66 + call void @finch_str_join(ptr %a67, ptr %a11, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.2945, i64 27, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.2947, i64 2, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = call i64 @finch.gen.md(ptr %t64, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a80 + call void @finch_str_drop(ptr %a80) + store i64 %t79, ptr %a81 + %t82 = load ptr, ptr %a1 + %t83 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 1 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } { ptr @.str.2948, i64 30, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.2949, i64 17, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 + %t95 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t95, ptr %a96 + %t98 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 + %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 + %t100 = load i64, ptr %t99 + call void @finch_str_sub(ptr %a97, ptr %a96, i64 1, i64 %t100, ptr @.str.2950, i64 2140) + %t101 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t93, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t93, ptr %a105 + call void @finch_str_drop(ptr %a105) + store { ptr, i64, i64 } %t101, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2951, i64 11, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a108 + %t113 = load i64, ptr %a63 + call void @finch_str_from_int(ptr %a114, i64 %t113) + %t115 = load { ptr, i64, i64 }, ptr %a114 + store { ptr, i64, i64 } %t112, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t112, ptr %a119 + call void @finch_str_drop(ptr %a119) + store { ptr, i64, i64 } %t115, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.2952, i64 9, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = load i64, ptr %a63 + call void @finch_str_from_int(ptr %a128, i64 %t127) + %t129 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t126, ptr %a131 + store { ptr, i64, i64 } %t129, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + store { ptr, i64, i64 } %t126, ptr %a133 + call void @finch_str_drop(ptr %a133) + store { ptr, i64, i64 } %t129, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t135, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.2953, i64 8, i64 0 }, ptr %a138 + call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) + store { ptr, i64, i64 } %t135, ptr %a139 + call void @finch_str_drop(ptr %a139) + %t140 = load { ptr, i64, i64 }, ptr %a136 + %t141 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t142 = load i64, ptr %t141 + call void @finch_str_from_int(ptr %a143, i64 %t142) + %t144 = load { ptr, i64, i64 }, ptr %a143 + store { ptr, i64, i64 } %t140, ptr %a146 + store { ptr, i64, i64 } %t144, ptr %a147 + call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) + store { ptr, i64, i64 } %t140, ptr %a148 + call void @finch_str_drop(ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.2954, i64 9, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load i64, ptr %a81 + call void @finch_str_from_int(ptr %a157, i64 %t156) + %t158 = load { ptr, i64, i64 }, ptr %a157 + store { ptr, i64, i64 } %t155, ptr %a160 + store { ptr, i64, i64 } %t158, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t155, ptr %a162 + call void @finch_str_drop(ptr %a162) + store { ptr, i64, i64 } %t158, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a159 + store { ptr, i64, i64 } %t164, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.2955, i64 13, i64 0 }, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t164, ptr %a168 + call void @finch_str_drop(ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a165 + %t170 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t171 = load i64, ptr %t170 + call void @finch_str_from_int(ptr %a172, i64 %t171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + store { ptr, i64, i64 } %t169, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t169, ptr %a177 + call void @finch_str_drop(ptr %a177) + store { ptr, i64, i64 } %t173, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.2956, i64 87, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + store { ptr, i64, i64 } %t179, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a180 + %t185 = call i64 @finch.gen.md(ptr %t82, { ptr, i64, i64 } %t184) + store { ptr, i64, i64 } %t184, ptr %a186 + call void @finch_str_drop(ptr %a186) + call void @finch.drop.arr_str(ptr %a11) + call void @finch.drop.S_gen_FnSig(ptr %a10) + ret i64 %t185 +} + +define internal void @finch.gen.dbgVariable(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca i64, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4756, label %ok4757 +panic4756: + call void @finch_panic(ptr @.str.2957, i64 2144, ptr @.str.2958) + unreachable +ok4757: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 30 + %t9 = load i1, ptr %t8 + %t10 = xor i1 %t9, true + br label %logic.from4758 +logic.from4758: + br i1 %t10, label %logic.end4760, label %logic.rhs4759 +logic.rhs4759: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic4761, label %ok4762 +panic4761: + call void @finch_panic(ptr @.str.2959, i64 2144, ptr @.str.2960) + unreachable +ok4762: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 36 + %t14 = load i64, ptr %t13 + %t15 = icmp slt i64 %t14, 0 + br label %logic.rend4763 +logic.rend4763: + br label %logic.end4760 +logic.end4760: + %t16 = phi i1 [ true, %logic.from4758 ], [ %t15, %logic.rend4763 ] + br i1 %t16, label %then4764, label %endif4766 +then4764: + ret void +endif4766: + %t17 = load ptr, ptr %a1 + %t18 = load %S.ast.Type, ptr %a4 + %t19 = call i64 @finch.gen.diType(ptr %t17, %S.ast.Type %t18) + store i64 %t19, ptr %a20 + %t21 = load i64, ptr %a20 + %t22 = icmp slt i64 %t21, 0 + br i1 %t22, label %then4767, label %endif4769 +then4767: + ret void +endif4769: + store { ptr, i64, i64 } { ptr @.str.2961, i64 0, i64 0 }, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic4770, label %ok4771 +panic4770: + call void @finch_panic(ptr @.str.2962, i64 2152, ptr @.str.2963) + unreachable +ok4771: + %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 39 + %t27 = load i64, ptr %t26 + %t28 = icmp sgt i64 %t27, 0 + br i1 %t28, label %then4772, label %endif4774 +then4772: + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic4775, label %ok4776 +panic4775: + call void @finch_panic(ptr @.str.2965, i64 2153, ptr @.str.2966) + unreachable +ok4776: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 39 + %t32 = load i64, ptr %t31 + call void @finch_str_from_int(ptr %a33, i64 %t32) + %t34 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.2964, i64 7, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + %t40 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t39, ptr %a23 + store { ptr, i64, i64 } %t40, ptr %a41 + call void @finch_str_drop(ptr %a41) + br label %endif4774 +endif4774: + %t42 = load ptr, ptr %a1 + %t43 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2967, i64 24, i64 0 }, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.2968, i64 11, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = load ptr, ptr %a1 + %t54 = icmp eq ptr %t53, null + br i1 %t54, label %panic4777, label %ok4778 +panic4777: + call void @finch_panic(ptr @.str.2969, i64 2155, ptr @.str.2970) + unreachable +ok4778: + %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 36 + %t56 = load i64, ptr %t55 + call void @finch_str_from_int(ptr %a57, i64 %t56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t52, ptr %a60 + store { ptr, i64, i64 } %t58, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t52, ptr %a62 + call void @finch_str_drop(ptr %a62) + store { ptr, i64, i64 } %t58, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t64, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.2971, i64 9, i64 0 }, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic4779, label %ok4780 +panic4779: + call void @finch_panic(ptr @.str.2972, i64 2155, ptr @.str.2973) + unreachable +ok4780: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 35 + %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t74 = load i64, ptr %t73 + %t75 = load { ptr, i64, i64 }, ptr %t72 + %t76 = extractvalue { ptr, i64, i64 } %t75, 1 + %t77 = icmp uge i64 %t74, %t76 + br i1 %t77, label %range4781, label %inrange4782 +range4781: + call void @finch_panic_index(ptr @.str.2974, i64 2155, i64 %t74, i64 %t76) + unreachable +inrange4782: + %t78 = extractvalue { ptr, i64, i64 } %t75, 0 + %t79 = getelementptr inbounds i64, ptr %t78, i64 %t74 + %t80 = load i64, ptr %t79 + call void @finch_str_from_int(ptr %a81, i64 %t80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t69, ptr %a84 + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t69, ptr %a86 + call void @finch_str_drop(ptr %a86) + store { ptr, i64, i64 } %t82, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.2975, i64 8, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + %t94 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t95 = load i64, ptr %t94 + call void @finch_str_from_int(ptr %a96, i64 %t95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t93, ptr %a99 + store { ptr, i64, i64 } %t97, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t93, ptr %a101 + call void @finch_str_drop(ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.2976, i64 9, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load i64, ptr %a20 + call void @finch_str_from_int(ptr %a110, i64 %t109) + %t111 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t108, ptr %a113 + store { ptr, i64, i64 } %t111, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t108, ptr %a115 + call void @finch_str_drop(ptr %a115) + store { ptr, i64, i64 } %t111, ptr %a116 + call void @finch_str_drop(ptr %a116) + %t117 = load { ptr, i64, i64 }, ptr %a112 + %t118 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t117, ptr %a120 + store { ptr, i64, i64 } %t118, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t117, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.2977, i64 1, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = call i64 @finch.gen.md(ptr %t42, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t128, ptr %a130 + call void @finch_str_drop(ptr %a130) + store i64 %t129, ptr %a131 + %t132 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t133 = load i64, ptr %t132 + %t134 = load ptr, ptr %a1 + %t135 = icmp eq ptr %t134, null + br i1 %t135, label %panic4783, label %ok4784 +panic4783: + call void @finch_panic(ptr @.str.2978, i64 2156, ptr @.str.2979) + unreachable +ok4784: + %t136 = getelementptr inbounds %S.gen.Gen, ptr %t134, i32 0, i32 37 + store i64 %t133, ptr %t136 + %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t138 = load i64, ptr %t137 + %t139 = load ptr, ptr %a1 + %t140 = icmp eq ptr %t139, null + br i1 %t140, label %panic4785, label %ok4786 +panic4785: + call void @finch_panic(ptr @.str.2980, i64 2157, ptr @.str.2981) + unreachable +ok4786: + %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 38 + store i64 %t138, ptr %t141 + %t142 = load ptr, ptr %a1 + %t143 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.2982, i64 41, i64 0 }, ptr %a145 + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a144 + store { ptr, i64, i64 } %t147, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.2983, i64 12, i64 0 }, ptr %a150 + call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) + store { ptr, i64, i64 } %t147, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a148 + %t153 = load i64, ptr %a131 + call void @finch_str_from_int(ptr %a154, i64 %t153) + %t155 = load { ptr, i64, i64 }, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a157 + store { ptr, i64, i64 } %t155, ptr %a158 + call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) + store { ptr, i64, i64 } %t152, ptr %a159 + call void @finch_str_drop(ptr %a159) + store { ptr, i64, i64 } %t155, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a156 + store { ptr, i64, i64 } %t161, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.2984, i64 27, i64 0 }, ptr %a164 + call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) + store { ptr, i64, i64 } %t161, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = load { ptr, i64, i64 }, ptr %a162 + call void @finch.gen.emit(ptr %t142, { ptr, i64, i64 } %t166) + store { ptr, i64, i64 } %t166, ptr %a167 + call void @finch_str_drop(ptr %a167) + call void @finch_str_drop(ptr %a23) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.dbgModule(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca i64, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = mul i64 2, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.2985, i64 20, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.2986, i64 30, i64 0 }, ptr %t5 + %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 2, 1 + %t8 = insertvalue { ptr, i64, i64 } %t7, i64 2, 2 + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic4787, label %ok4788 +panic4787: + call void @finch_panic(ptr @.str.2987, i64 2164, ptr @.str.2988) + unreachable +ok4788: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 33 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + store i64 0, ptr %a15 + br label %for.cond4789 +for.cond4789: + %t16 = load i64, ptr %a15 + %t17 = icmp slt i64 %t16, %t14 + br i1 %t17, label %for.body4790, label %for.end4792 +for.body4790: + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t19 = load i64, ptr %a15 + call void @finch_str_from_int(ptr %a20, i64 %t19) + %t21 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.2989, i64 1, i64 0 }, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.2990, i64 3, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic4793, label %ok4794 +panic4793: + call void @finch_panic(ptr @.str.2991, i64 2165, ptr @.str.2992) + unreachable +ok4794: + %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 33 + %t35 = load i64, ptr %a15 + %t36 = load { ptr, i64, i64 }, ptr %t34 + %t37 = extractvalue { ptr, i64, i64 } %t36, 1 + %t38 = icmp uge i64 %t35, %t37 + br i1 %t38, label %range4795, label %inrange4796 +range4795: + call void @finch_panic_index(ptr @.str.2993, i64 2165, i64 %t35, i64 %t37) + unreachable +inrange4796: + %t39 = extractvalue { ptr, i64, i64 } %t36, 0 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t35 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t31, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t31, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = load i64, ptr %t18 + %t48 = add i64 %t47, 1 + call void @finch_arr_reserve(ptr %a9, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t49 = load ptr, ptr %a9 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 + store { ptr, i64, i64 } %t46, ptr %t50 + store i64 %t48, ptr %t18 + br label %for.step4791 +for.step4791: + %t51 = load i64, ptr %a15 + %t52 = add i64 %t51, 1 + store i64 %t52, ptr %a15 + br label %for.cond4789 +for.end4792: + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2994, i64 1, i64 0 }, ptr %a54 + call void @finch_str_join(ptr %a55, ptr %a9, ptr %a54) + %t56 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.2995, i64 1, i64 0 }, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t56, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.drop.arr_str(ptr %a9) + ret { ptr, i64, i64 } %t61 +} + +define internal void @finch.copy.arr_S_gen_Var(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond4868 +n.cond4868: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body4869, label %n.end4870 +n.body4869: + %t8 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.gen.Var, ptr %t2, i64 %t6 + call void @finch.copy.S_gen_Var(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond4868 +n.end4870: + ret void +} + +define internal void @finch.copy.arr_S_gen_Cleanup(ptr %dst, ptr %src) { +entry: + + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) + ret void +} + +define internal void @finch.copy.S_gen_Scope(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Scope, ptr %src + store %S.gen.Scope %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 0 + call void @finch.copy.arr_S_gen_Var(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_ast_Node(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_int(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_S_gen_Cleanup(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.arr_S_gen_Scope(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond4865 +n.cond4865: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body4866, label %n.end4867 +n.body4866: + %t8 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.gen.Scope, ptr %t2, i64 %t6 + call void @finch.copy.S_gen_Scope(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond4865 +n.end4867: + ret void +} + +define internal void @finch.drop.arr_S_gen_Scope(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond4871 +n.cond4871: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body4872, label %n.end4873 +n.body4872: + %t7 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Scope(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond4871 +n.end4873: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.gen.define(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a16 = alloca %S.gen.FnSig, align 16 + %a17 = alloca %S.gen.FnSig, align 16 + %a20 = alloca %S.gen.FnSig, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca %S.ast.Node, align 16 + %a117 = alloca %S.ast.Node, align 16 + %a119 = alloca %S.ast.Node, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca i64, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca %S.ast.Type, align 16 + %a247 = alloca %S.ast.Type, align 16 + %a248 = alloca %S.ast.Type, align 16 + %a270 = alloca i64, align 16 + %a284 = alloca %S.ast.Type, align 16 + %a285 = alloca %S.ast.Type, align 16 + %a287 = alloca %S.ast.Type, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a450 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a543 = alloca { ptr, i64, i64 }, align 16 + %a544 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4797, label %ok4798 +panic4797: + call void @finch_panic(ptr @.str.2996, i64 2171, ptr @.str.2997) + unreachable +ok4798: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 15 + %t6 = load i64, ptr %a2 + %t7 = load { ptr, i64, i64 }, ptr %t5 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 %t6, %t8 + br i1 %t9, label %range4799, label %inrange4800 +range4799: + call void @finch_panic_index(ptr @.str.2998, i64 2171, i64 %t6, i64 %t8) + unreachable +inrange4800: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %t10, i64 %t6 + %t12 = load %S.gen.FnSig, ptr %t11 + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic4801, label %ok4802 +panic4801: + call void @finch_panic(ptr @.str.2999, i64 2171, ptr @.str.3000) + unreachable +ok4802: + %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 13 + store %S.gen.FnSig %t12, ptr %a16 + call void @finch.copy.S_gen_FnSig(ptr %a17, ptr %a16) + %t18 = load %S.gen.FnSig, ptr %a17 + %t19 = load %S.gen.FnSig, ptr %t15 + store %S.gen.FnSig %t18, ptr %t15 + store %S.gen.FnSig %t19, ptr %a20 + call void @finch.drop.S_gen_FnSig(ptr %a20) + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic4803, label %ok4804 +panic4803: + call void @finch_panic(ptr @.str.3001, i64 2172, ptr @.str.3002) + unreachable +ok4804: + %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 13 + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %t23, i32 0, i32 0 + %t25 = load { ptr, i64, i64 }, ptr %t24 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic4805, label %ok4806 +panic4805: + call void @finch_panic(ptr @.str.3003, i64 2172, ptr @.str.3004) + unreachable +ok4806: + %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 14 + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_copy(ptr %a30, ptr %a29) + %t31 = load { ptr, i64, i64 }, ptr %a30 + %t32 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t31, ptr %t28 + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic4807, label %ok4808 +panic4807: + call void @finch_panic(ptr @.str.3005, i64 2173, ptr @.str.3006) + unreachable +ok4808: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 13 + %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 6 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic4809, label %ok4810 +panic4809: + call void @finch_panic(ptr @.str.3007, i64 2173, ptr @.str.3008) + unreachable +ok4810: + %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 18 + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch.copy.arr_str(ptr %a43, ptr %a42) + %t44 = load { ptr, i64, i64 }, ptr %a43 + %t45 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t44, ptr %t41 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch.drop.arr_str(ptr %a46) + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic4811, label %ok4812 +panic4811: + call void @finch_panic(ptr @.str.3009, i64 2174, ptr @.str.3010) + unreachable +ok4812: + %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 13 + %t50 = getelementptr inbounds %S.gen.FnSig, ptr %t49, i32 0, i32 7 + %t51 = load { ptr, i64, i64 }, ptr %t50 + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic4813, label %ok4814 +panic4813: + call void @finch_panic(ptr @.str.3011, i64 2174, ptr @.str.3012) + unreachable +ok4814: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 19 + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + %t58 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t57, ptr %t54 + store { ptr, i64, i64 } %t58, ptr %a59 + call void @finch.drop.arr_S_ast_Type(ptr %a59) + %t60 = load ptr, ptr %a1 + %t61 = icmp eq ptr %t60, null + br i1 %t61, label %panic4815, label %ok4816 +panic4815: + call void @finch_panic(ptr @.str.3014, i64 2175, ptr @.str.3015) + unreachable +ok4816: + %t62 = getelementptr inbounds %S.gen.Gen, ptr %t60, i32 0, i32 20 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } { ptr @.str.3013, i64 0, i64 0 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic4817, label %ok4818 +panic4817: + call void @finch_panic(ptr @.str.3016, i64 2176, ptr @.str.3017) + unreachable +ok4818: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 13 + %t68 = getelementptr inbounds %S.gen.FnSig, ptr %t67, i32 0, i32 7 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = icmp sgt i64 %t70, 0 + br i1 %t71, label %then4819, label %endif4821 +then4819: + %t72 = load ptr, ptr %a1 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic4822, label %ok4823 +panic4822: + call void @finch_panic(ptr @.str.3019, i64 2177, ptr @.str.3020) + unreachable +ok4823: + %t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 13 + %t75 = getelementptr inbounds %S.gen.FnSig, ptr %t74, i32 0, i32 8 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } { ptr @.str.3018, i64 17, i64 0 }, ptr %a78 + store { ptr, i64, i64 } %t76, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.3021, i64 1, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic4824, label %ok4825 +panic4824: + call void @finch_panic(ptr @.str.3022, i64 2177, ptr @.str.3023) + unreachable +ok4825: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 20 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t85, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + call void @finch_str_drop(ptr %a90) + br label %endif4821 +endif4821: + %t91 = load ptr, ptr %a1 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic4826, label %ok4827 +panic4826: + call void @finch_panic(ptr @.str.3024, i64 2179, ptr @.str.3025) + unreachable +ok4827: + %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 0 + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic4828, label %ok4829 +panic4828: + call void @finch_panic(ptr @.str.3026, i64 2179, ptr @.str.3027) + unreachable +ok4829: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 13 + %t97 = getelementptr inbounds %S.gen.FnSig, ptr %t96, i32 0, i32 16 + %t98 = load i64, ptr %t97 + %t99 = load { ptr, i64, i64 }, ptr %t93 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 %t98, %t100 + br i1 %t101, label %range4830, label %inrange4831 +range4830: + call void @finch_panic_index(ptr @.str.3028, i64 2179, i64 %t98, i64 %t100) + unreachable +inrange4831: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Program, ptr %t102, i64 %t98 + %t104 = getelementptr inbounds %S.ast.Program, ptr %t103, i32 0, i32 8 + %t105 = load ptr, ptr %a1 + %t106 = icmp eq ptr %t105, null + br i1 %t106, label %panic4832, label %ok4833 +panic4832: + call void @finch_panic(ptr @.str.3029, i64 2179, ptr @.str.3030) + unreachable +ok4833: + %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 13 + %t108 = getelementptr inbounds %S.gen.FnSig, ptr %t107, i32 0, i32 17 + %t109 = load i64, ptr %t108 + %t110 = load { ptr, i64, i64 }, ptr %t104 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range4834, label %inrange4835 +range4834: + call void @finch_panic_index(ptr @.str.3031, i64 2179, i64 %t109, i64 %t111) + unreachable +inrange4835: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds %S.ast.Node, ptr %t113, i64 %t109 + %t115 = load %S.ast.Node, ptr %t114 + store %S.ast.Node %t115, ptr %a116 + call void @finch.copy.S_ast_Node(ptr %a117, ptr %a116) + %t118 = load %S.ast.Node, ptr %a117 + store %S.ast.Node %t118, ptr %a119 + store { ptr, i64, i64 } zeroinitializer, ptr %a120 + %t121 = load { ptr, i64, i64 }, ptr %a120 + %t122 = load ptr, ptr %a1 + %t123 = icmp eq ptr %t122, null + br i1 %t123, label %panic4836, label %ok4837 +panic4836: + call void @finch_panic(ptr @.str.3032, i64 2181, ptr @.str.3033) + unreachable +ok4837: + %t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 4 + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch.copy.arr_str(ptr %a126, ptr %a125) + %t127 = load { ptr, i64, i64 }, ptr %a126 + %t128 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t127, ptr %t124 + store { ptr, i64, i64 } %t128, ptr %a129 + call void @finch.drop.arr_str(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a120 + %t131 = load ptr, ptr %a1 + %t132 = icmp eq ptr %t131, null + br i1 %t132, label %panic4838, label %ok4839 +panic4838: + call void @finch_panic(ptr @.str.3034, i64 2182, ptr @.str.3035) + unreachable +ok4839: + %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 5 + store { ptr, i64, i64 } %t130, ptr %a134 + call void @finch.copy.arr_str(ptr %a135, ptr %a134) + %t136 = load { ptr, i64, i64 }, ptr %a135 + %t137 = load { ptr, i64, i64 }, ptr %t133 + store { ptr, i64, i64 } %t136, ptr %t133 + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch.drop.arr_str(ptr %a138) + %t139 = load ptr, ptr %a1 + %t140 = icmp eq ptr %t139, null + br i1 %t140, label %panic4840, label %ok4841 +panic4840: + call void @finch_panic(ptr @.str.3036, i64 2183, ptr @.str.3037) + unreachable +ok4841: + %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 6 + store i64 0, ptr %t141 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic4842, label %ok4843 +panic4842: + call void @finch_panic(ptr @.str.3038, i64 2184, ptr @.str.3039) + unreachable +ok4843: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 9 + store i1 false, ptr %t144 + %t145 = load ptr, ptr %a1 + %t146 = icmp eq ptr %t145, null + br i1 %t146, label %panic4844, label %ok4845 +panic4844: + call void @finch_panic(ptr @.str.3040, i64 2185, ptr @.str.3041) + unreachable +ok4845: + %t147 = getelementptr inbounds %S.gen.Gen, ptr %t145, i32 0, i32 25 + store i64 0, ptr %t147 + %t148 = load ptr, ptr %a1 + %t149 = icmp eq ptr %t148, null + br i1 %t149, label %panic4846, label %ok4847 +panic4846: + call void @finch_panic(ptr @.str.3042, i64 2186, ptr @.str.3043) + unreachable +ok4847: + %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 36 + store i64 -1, ptr %t150 + store i64 -1, ptr %a151 + %t152 = load ptr, ptr %a1 + %t153 = icmp eq ptr %t152, null + br i1 %t153, label %panic4848, label %ok4849 +panic4848: + call void @finch_panic(ptr @.str.3044, i64 2188, ptr @.str.3045) + unreachable +ok4849: + %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 30 + %t155 = load i1, ptr %t154 + br i1 %t155, label %then4850, label %endif4852 +then4850: + %t156 = load ptr, ptr %a1 + %t157 = load %S.ast.Node, ptr %a119 + %t158 = call i64 @finch.gen.dbgSubprogram(ptr %t156, %S.ast.Node %t157) + store i64 %t158, ptr %a151 + %t159 = load i64, ptr %a151 + %t160 = load ptr, ptr %a1 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic4853, label %ok4854 +panic4853: + call void @finch_panic(ptr @.str.3046, i64 2190, ptr @.str.3047) + unreachable +ok4854: + %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 36 + store i64 %t159, ptr %t162 + %t163 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 11 + %t164 = load i64, ptr %t163 + %t165 = load ptr, ptr %a1 + %t166 = icmp eq ptr %t165, null + br i1 %t166, label %panic4855, label %ok4856 +panic4855: + call void @finch_panic(ptr @.str.3048, i64 2191, ptr @.str.3049) + unreachable +ok4856: + %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 37 + store i64 %t164, ptr %t167 + %t168 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 12 + %t169 = load i64, ptr %t168 + %t170 = load ptr, ptr %a1 + %t171 = icmp eq ptr %t170, null + br i1 %t171, label %panic4857, label %ok4858 +panic4857: + call void @finch_panic(ptr @.str.3050, i64 2192, ptr @.str.3051) + unreachable +ok4858: + %t172 = getelementptr inbounds %S.gen.Gen, ptr %t170, i32 0, i32 38 + store i64 %t169, ptr %t172 + br label %endif4852 +endif4852: + %t173 = load ptr, ptr %a1 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic4859, label %ok4860 +panic4859: + call void @finch_panic(ptr @.str.3052, i64 2194, ptr @.str.3053) + unreachable +ok4860: + %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 44 + store i1 false, ptr %t175 + %t176 = load ptr, ptr %a1 + %t177 = icmp eq ptr %t176, null + br i1 %t177, label %panic4861, label %ok4862 +panic4861: + call void @finch_panic(ptr @.str.3054, i64 2195, ptr @.str.3055) + unreachable +ok4862: + %t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 46 + store i64 0, ptr %t178 + store { ptr, i64, i64 } zeroinitializer, ptr %a179 + %t180 = load { ptr, i64, i64 }, ptr %a179 + %t181 = load ptr, ptr %a1 + %t182 = icmp eq ptr %t181, null + br i1 %t182, label %panic4863, label %ok4864 +panic4863: + call void @finch_panic(ptr @.str.3056, i64 2197, ptr @.str.3057) + unreachable +ok4864: + %t183 = getelementptr inbounds %S.gen.Gen, ptr %t181, i32 0, i32 10 + store { ptr, i64, i64 } %t180, ptr %a184 + call void @finch.copy.arr_S_gen_Scope(ptr %a185, ptr %a184) + %t186 = load { ptr, i64, i64 }, ptr %a185 + %t187 = load { ptr, i64, i64 }, ptr %t183 + store { ptr, i64, i64 } %t186, ptr %t183 + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch.drop.arr_S_gen_Scope(ptr %a188) + %t189 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t189) + store { ptr, i64, i64 } zeroinitializer, ptr %a190 + %t191 = load ptr, ptr %a1 + %t192 = icmp eq ptr %t191, null + br i1 %t192, label %panic4874, label %ok4875 +panic4874: + call void @finch_panic(ptr @.str.3058, i64 2200, ptr @.str.3059) + unreachable +ok4875: + %t193 = getelementptr inbounds %S.gen.Gen, ptr %t191, i32 0, i32 13 + %t194 = getelementptr inbounds %S.gen.FnSig, ptr %t193, i32 0, i32 2 + %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 + %t196 = load i64, ptr %t195 + %t197 = icmp sgt i64 %t196, 0 + br i1 %t197, label %then4876, label %endif4878 +then4876: + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 + %t199 = load i64, ptr %t198 + %t200 = add i64 %t199, 1 + call void @finch_arr_reserve(ptr %a190, i64 %t200, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t201 = load ptr, ptr %a190 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i64 %t199 + store { ptr, i64, i64 } { ptr @.str.3060, i64 9, i64 0 }, ptr %t202 + store i64 %t200, ptr %t198 + store { ptr, i64, i64 } { ptr @.str.3061, i64 6, i64 0 }, ptr %a203 + %t204 = load ptr, ptr %a1 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic4879, label %ok4880 +panic4879: + call void @finch_panic(ptr @.str.3062, i64 2204, ptr @.str.3063) + unreachable +ok4880: + %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 13 + %t207 = getelementptr inbounds %S.gen.FnSig, ptr %t206, i32 0, i32 4 + %t208 = load i1, ptr %t207 + br i1 %t208, label %then4881, label %endif4883 +then4881: + %t209 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.3064, i64 4, i64 0 }, ptr %a203 + store { ptr, i64, i64 } %t209, ptr %a210 + call void @finch_str_drop(ptr %a210) + br label %endif4883 +endif4883: + %t211 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t211, ptr %a212 + call void @finch_str_copy(ptr %a213, ptr %a212) + %t214 = load { ptr, i64, i64 }, ptr %a213 + %t215 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t214, 0 + %t216 = load ptr, ptr %a1 + %t217 = icmp eq ptr %t216, null + br i1 %t217, label %panic4884, label %ok4885 +panic4884: + call void @finch_panic(ptr @.str.3065, i64 2207, ptr @.str.3066) + unreachable +ok4885: + %t218 = getelementptr inbounds %S.gen.Gen, ptr %t216, i32 0, i32 13 + %t219 = getelementptr inbounds %S.gen.FnSig, ptr %t218, i32 0, i32 2 + %t220 = load { ptr, i64, i64 }, ptr %t219 + store { ptr, i64, i64 } %t220, ptr %a221 + call void @finch_str_copy(ptr %a222, ptr %a221) + %t223 = load { ptr, i64, i64 }, ptr %a222 + %t224 = insertvalue %S.ast.Type %t215, { ptr, i64, i64 } %t223, 2 + %t225 = load ptr, ptr %a1 + %t226 = icmp eq ptr %t225, null + br i1 %t226, label %panic4886, label %ok4887 +panic4886: + call void @finch_panic(ptr @.str.3067, i64 2207, ptr @.str.3068) + unreachable +ok4887: + %t227 = getelementptr inbounds %S.gen.Gen, ptr %t225, i32 0, i32 13 + %t228 = getelementptr inbounds %S.gen.FnSig, ptr %t227, i32 0, i32 3 + %t229 = load { ptr, i64, i64 }, ptr %t228 + store { ptr, i64, i64 } %t229, ptr %a230 + call void @finch_str_copy(ptr %a231, ptr %a230) + %t232 = load { ptr, i64, i64 }, ptr %a231 + %t233 = insertvalue %S.ast.Type %t224, { ptr, i64, i64 } %t232, 3 + store %S.ast.Type %t233, ptr %a234 + %t235 = load ptr, ptr %a1 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic4888, label %ok4889 +panic4888: + call void @finch_panic(ptr @.str.3069, i64 2208, ptr @.str.3070) + unreachable +ok4889: + %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 10 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = extractvalue { ptr, i64, i64 } %t238, 1 + %t240 = icmp uge i64 0, %t239 + br i1 %t240, label %range4890, label %inrange4891 +range4890: + call void @finch_panic_index(ptr @.str.3071, i64 2208, i64 0, i64 %t239) + unreachable +inrange4891: + %t241 = extractvalue { ptr, i64, i64 } %t238, 0 + %t242 = getelementptr inbounds %S.gen.Scope, ptr %t241, i64 0 + %t243 = getelementptr inbounds %S.gen.Scope, ptr %t242, i32 0, i32 0 + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 + %t245 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } { ptr @.str.3072, i64 4, i64 0 }, 0 + %t246 = load %S.ast.Type, ptr %a234 + store %S.ast.Type %t246, ptr %a247 + call void @finch.copy.S_ast_Type(ptr %a248, ptr %a247) + %t249 = load %S.ast.Type, ptr %a248 + %t250 = insertvalue %S.gen.Var %t245, %S.ast.Type %t249, 1 + %t251 = insertvalue %S.gen.Var %t250, { ptr, i64, i64 } { ptr @.str.3073, i64 5, i64 0 }, 2 + %t252 = insertvalue %S.gen.Var %t251, i1 false, 3 + %t253 = load i64, ptr %t244 + %t254 = add i64 %t253, 1 + call void @finch_arr_reserve(ptr %t243, i64 %t254, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) + %t255 = load ptr, ptr %t243 + %t256 = getelementptr inbounds %S.gen.Var, ptr %t255, i64 %t253 + store %S.gen.Var %t252, ptr %t256 + store i64 %t254, ptr %t244 + %t257 = load ptr, ptr %a1 + %t258 = icmp eq ptr %t257, null + br i1 %t258, label %panic4892, label %ok4893 +panic4892: + call void @finch_panic(ptr @.str.3074, i64 2209, ptr @.str.3075) + unreachable +ok4893: + %t259 = getelementptr inbounds %S.gen.Gen, ptr %t257, i32 0, i32 30 + %t260 = load i1, ptr %t259 + br i1 %t260, label %then4894, label %endif4896 +then4894: + %t261 = load ptr, ptr %a1 + %t262 = load %S.ast.Node, ptr %a119 + %t263 = load %S.ast.Type, ptr %a234 + call void @finch.gen.dbgVariable(ptr %t261, %S.ast.Node %t262, { ptr, i64, i64 } { ptr @.str.3076, i64 4, i64 0 }, %S.ast.Type %t263, { ptr, i64, i64 } { ptr @.str.3077, i64 5, i64 0 }) + br label %endif4896 +endif4896: + call void @finch.drop.S_ast_Type(ptr %a234) + call void @finch_str_drop(ptr %a203) + br label %endif4878 +endif4878: + %t264 = load ptr, ptr %a1 + %t265 = icmp eq ptr %t264, null + br i1 %t265, label %panic4897, label %ok4898 +panic4897: + call void @finch_panic(ptr @.str.3078, i64 2214, ptr @.str.3079) + unreachable +ok4898: + %t266 = getelementptr inbounds %S.gen.Gen, ptr %t264, i32 0, i32 13 + %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i32 0, i32 13 + %t268 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i32 0, i32 1 + %t269 = load i64, ptr %t268 + store i64 0, ptr %a270 + br label %for.cond4899 +for.cond4899: + %t271 = load i64, ptr %a270 + %t272 = icmp slt i64 %t271, %t269 + br i1 %t272, label %for.body4900, label %for.end4902 +for.body4900: + %t273 = load ptr, ptr %a1 + %t274 = icmp eq ptr %t273, null + br i1 %t274, label %panic4903, label %ok4904 +panic4903: + call void @finch_panic(ptr @.str.3080, i64 2215, ptr @.str.3081) + unreachable +ok4904: + %t275 = getelementptr inbounds %S.gen.Gen, ptr %t273, i32 0, i32 13 + %t276 = getelementptr inbounds %S.gen.FnSig, ptr %t275, i32 0, i32 13 + %t277 = load i64, ptr %a270 + %t278 = load { ptr, i64, i64 }, ptr %t276 + %t279 = extractvalue { ptr, i64, i64 } %t278, 1 + %t280 = icmp uge i64 %t277, %t279 + br i1 %t280, label %range4905, label %inrange4906 +range4905: + call void @finch_panic_index(ptr @.str.3082, i64 2215, i64 %t277, i64 %t279) + unreachable +inrange4906: + %t281 = extractvalue { ptr, i64, i64 } %t278, 0 + %t282 = getelementptr inbounds %S.ast.Type, ptr %t281, i64 %t277 + %t283 = load %S.ast.Type, ptr %t282 + store %S.ast.Type %t283, ptr %a284 + call void @finch.copy.S_ast_Type(ptr %a285, ptr %a284) + %t286 = load %S.ast.Type, ptr %a285 + store %S.ast.Type %t286, ptr %a287 + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 + %t289 = load ptr, ptr %a1 + %t290 = load %S.ast.Type, ptr %a287 + %t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t289, %S.ast.Type %t290) + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.3083, i64 3, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load i64, ptr %a270 + call void @finch_str_from_int(ptr %a298, i64 %t297) + %t299 = load { ptr, i64, i64 }, ptr %a298 + store { ptr, i64, i64 } %t296, ptr %a301 + store { ptr, i64, i64 } %t299, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t296, ptr %a303 + call void @finch_str_drop(ptr %a303) + store { ptr, i64, i64 } %t299, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load { ptr, i64, i64 }, ptr %a300 + %t306 = load i64, ptr %t288 + %t307 = add i64 %t306, 1 + call void @finch_arr_reserve(ptr %a190, i64 %t307, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t308 = load ptr, ptr %a190 + %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t306 + store { ptr, i64, i64 } %t305, ptr %t309 + store i64 %t307, ptr %t288 + %t310 = load i64, ptr %a270 + call void @finch_str_from_int(ptr %a311, i64 %t310) + %t312 = load { ptr, i64, i64 }, ptr %a311 + store { ptr, i64, i64 } { ptr @.str.3084, i64 2, i64 0 }, ptr %a314 + store { ptr, i64, i64 } %t312, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + store { ptr, i64, i64 } %t312, ptr %a316 + call void @finch_str_drop(ptr %a316) + %t317 = load { ptr, i64, i64 }, ptr %a313 + store { ptr, i64, i64 } %t317, ptr %a318 + %t319 = load ptr, ptr %a1 + %t320 = load %S.ast.Type, ptr %a287 + %t321 = call i1 @finch.gen.owning(ptr %t319, %S.ast.Type %t320) + br label %logic.from4907 +logic.from4907: + br i1 %t321, label %logic.rhs4908, label %logic.end4909 +logic.rhs4908: + %t322 = load ptr, ptr %a1 + %t323 = icmp eq ptr %t322, null + br i1 %t323, label %panic4910, label %ok4911 +panic4910: + call void @finch_panic(ptr @.str.3085, i64 2218, ptr @.str.3086) + unreachable +ok4911: + %t324 = getelementptr inbounds %S.gen.Gen, ptr %t322, i32 0, i32 13 + %t325 = getelementptr inbounds %S.gen.FnSig, ptr %t324, i32 0, i32 15 + %t326 = load i64, ptr %a270 + %t327 = load { ptr, i64, i64 }, ptr %t325 + %t328 = extractvalue { ptr, i64, i64 } %t327, 1 + %t329 = icmp uge i64 %t326, %t328 + br i1 %t329, label %range4912, label %inrange4913 +range4912: + call void @finch_panic_index(ptr @.str.3087, i64 2218, i64 %t326, i64 %t328) + unreachable +inrange4913: + %t330 = extractvalue { ptr, i64, i64 } %t327, 0 + %t331 = getelementptr inbounds i1, ptr %t330, i64 %t326 + %t332 = load i1, ptr %t331 + %t333 = xor i1 %t332, true + br label %logic.rend4914 +logic.rend4914: + br label %logic.end4909 +logic.end4909: + %t334 = phi i1 [ false, %logic.from4907 ], [ %t333, %logic.rend4914 ] + br i1 %t334, label %then4915, label %endif4917 +then4915: + %t335 = load ptr, ptr %a1 + %t336 = load { ptr, i64, i64 }, ptr %a318 + %t337 = load %S.ast.Type, ptr %a287 + %t338 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t335, { ptr, i64, i64 } %t336, %S.ast.Type %t337) + %t339 = load { ptr, i64, i64 }, ptr %a318 + store { ptr, i64, i64 } %t338, ptr %a318 + store { ptr, i64, i64 } %t339, ptr %a340 + call void @finch_str_drop(ptr %a340) + br label %endif4917 +endif4917: + %t341 = load i64, ptr %a270 + %t342 = add i64 %t341, 1 + %t343 = load ptr, ptr %a1 + %t344 = icmp eq ptr %t343, null + br i1 %t344, label %panic4918, label %ok4919 +panic4918: + call void @finch_panic(ptr @.str.3088, i64 2221, ptr @.str.3089) + unreachable +ok4919: + %t345 = getelementptr inbounds %S.gen.Gen, ptr %t343, i32 0, i32 39 + store i64 %t342, ptr %t345 + %t346 = load ptr, ptr %a1 + %t347 = icmp eq ptr %t346, null + br i1 %t347, label %panic4920, label %ok4921 +panic4920: + call void @finch_panic(ptr @.str.3090, i64 2222, ptr @.str.3091) + unreachable +ok4921: + %t348 = getelementptr inbounds %S.gen.Gen, ptr %t346, i32 0, i32 13 + %t349 = getelementptr inbounds %S.gen.FnSig, ptr %t348, i32 0, i32 2 + %t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i32 0, i32 1 + %t351 = load i64, ptr %t350 + %t352 = icmp sgt i64 %t351, 0 + br i1 %t352, label %then4922, label %endif4924 +then4922: + %t353 = load i64, ptr %a270 + %t354 = add i64 %t353, 2 + %t355 = load ptr, ptr %a1 + %t356 = icmp eq ptr %t355, null + br i1 %t356, label %panic4925, label %ok4926 +panic4925: + call void @finch_panic(ptr @.str.3092, i64 2223, ptr @.str.3093) + unreachable +ok4926: + %t357 = getelementptr inbounds %S.gen.Gen, ptr %t355, i32 0, i32 39 + store i64 %t354, ptr %t357 + br label %endif4924 +endif4924: + %t358 = load ptr, ptr %a1 + %t359 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 + %t360 = load i64, ptr %a270 + %t361 = load { ptr, i64, i64 }, ptr %t359 + %t362 = extractvalue { ptr, i64, i64 } %t361, 1 + %t363 = icmp uge i64 %t360, %t362 + br i1 %t363, label %range4927, label %inrange4928 +range4927: + call void @finch_panic_index(ptr @.str.3094, i64 2225, i64 %t360, i64 %t362) + unreachable +inrange4928: + %t364 = extractvalue { ptr, i64, i64 } %t361, 0 + %t365 = getelementptr inbounds %S.ast.Node, ptr %t364, i64 %t360 + %t366 = load %S.ast.Node, ptr %t365 + %t367 = load ptr, ptr %a1 + %t368 = icmp eq ptr %t367, null + br i1 %t368, label %panic4929, label %ok4930 +panic4929: + call void @finch_panic(ptr @.str.3095, i64 2225, ptr @.str.3096) + unreachable +ok4930: + %t369 = getelementptr inbounds %S.gen.Gen, ptr %t367, i32 0, i32 13 + %t370 = getelementptr inbounds %S.gen.FnSig, ptr %t369, i32 0, i32 14 + %t371 = load i64, ptr %a270 + %t372 = load { ptr, i64, i64 }, ptr %t370 + %t373 = extractvalue { ptr, i64, i64 } %t372, 1 + %t374 = icmp uge i64 %t371, %t373 + br i1 %t374, label %range4931, label %inrange4932 +range4931: + call void @finch_panic_index(ptr @.str.3097, i64 2225, i64 %t371, i64 %t373) + unreachable +inrange4932: + %t375 = extractvalue { ptr, i64, i64 } %t372, 0 + %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t371 + %t377 = load { ptr, i64, i64 }, ptr %t376 + %t378 = load %S.ast.Type, ptr %a287 + %t379 = load { ptr, i64, i64 }, ptr %a318 + %t380 = load ptr, ptr %a1 + %t381 = load %S.ast.Type, ptr %a287 + %t382 = call i1 @finch.gen.owning(ptr %t380, %S.ast.Type %t381) + br label %logic.from4933 +logic.from4933: + br i1 %t382, label %logic.rhs4934, label %logic.end4935 +logic.rhs4934: + %t383 = load ptr, ptr %a1 + %t384 = icmp eq ptr %t383, null + br i1 %t384, label %panic4936, label %ok4937 +panic4936: + call void @finch_panic(ptr @.str.3098, i64 2225, ptr @.str.3099) + unreachable +ok4937: + %t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 13 + %t386 = getelementptr inbounds %S.gen.FnSig, ptr %t385, i32 0, i32 15 + %t387 = load i64, ptr %a270 + %t388 = load { ptr, i64, i64 }, ptr %t386 + %t389 = extractvalue { ptr, i64, i64 } %t388, 1 + %t390 = icmp uge i64 %t387, %t389 + br i1 %t390, label %range4938, label %inrange4939 +range4938: + call void @finch_panic_index(ptr @.str.3100, i64 2225, i64 %t387, i64 %t389) + unreachable +inrange4939: + %t391 = extractvalue { ptr, i64, i64 } %t388, 0 + %t392 = getelementptr inbounds i1, ptr %t391, i64 %t387 + %t393 = load i1, ptr %t392 + %t394 = xor i1 %t393, true + br label %logic.rend4940 +logic.rend4940: + br label %logic.end4935 +logic.end4935: + %t395 = phi i1 [ false, %logic.from4933 ], [ %t394, %logic.rend4940 ] + %t396 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t358, %S.ast.Node %t366, { ptr, i64, i64 } %t377, %S.ast.Type %t378, { ptr, i64, i64 } %t379, i1 false, i1 %t395) + store { ptr, i64, i64 } %t396, ptr %a397 + call void @finch_str_drop(ptr %a397) + %t398 = load ptr, ptr %a1 + %t399 = icmp eq ptr %t398, null + br i1 %t399, label %panic4941, label %ok4942 +panic4941: + call void @finch_panic(ptr @.str.3101, i64 2226, ptr @.str.3102) + unreachable +ok4942: + %t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 39 + store i64 0, ptr %t400 + call void @finch_str_drop(ptr %a318) + call void @finch.drop.S_ast_Type(ptr %a287) + br label %for.step4901 +for.step4901: + %t401 = load i64, ptr %a270 + %t402 = add i64 %t401, 1 + store i64 %t402, ptr %a270 + br label %for.cond4899 +for.end4902: + %t403 = load ptr, ptr %a1 + %t404 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 + %t405 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 + %t406 = getelementptr inbounds { ptr, i64, i64 }, ptr %t405, i32 0, i32 1 + %t407 = load i64, ptr %t406 + %t408 = sub i64 %t407, 1 + %t409 = load { ptr, i64, i64 }, ptr %t404 + %t410 = extractvalue { ptr, i64, i64 } %t409, 1 + %t411 = icmp uge i64 %t408, %t410 + br i1 %t411, label %range4943, label %inrange4944 +range4943: + call void @finch_panic_index(ptr @.str.3103, i64 2228, i64 %t408, i64 %t410) + unreachable +inrange4944: + %t412 = extractvalue { ptr, i64, i64 } %t409, 0 + %t413 = getelementptr inbounds %S.ast.Node, ptr %t412, i64 %t408 + %t414 = load %S.ast.Node, ptr %t413 + call void @finch.gen.block(ptr %t403, %S.ast.Node %t414, i1 false) + %t415 = load ptr, ptr %a1 + %t416 = icmp eq ptr %t415, null + br i1 %t416, label %panic4945, label %ok4946 +panic4945: + call void @finch_panic(ptr @.str.3104, i64 2229, ptr @.str.3105) + unreachable +ok4946: + %t417 = getelementptr inbounds %S.gen.Gen, ptr %t415, i32 0, i32 9 + %t418 = load i1, ptr %t417 + %t419 = xor i1 %t418, true + br i1 %t419, label %then4947, label %endif4949 +then4947: + %t420 = load ptr, ptr %a1 + %t421 = icmp eq ptr %t420, null + br i1 %t421, label %panic4950, label %ok4951 +panic4950: + call void @finch_panic(ptr @.str.3106, i64 2230, ptr @.str.3107) + unreachable +ok4951: + %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 13 + %t423 = getelementptr inbounds %S.gen.FnSig, ptr %t422, i32 0, i32 12 + %t424 = getelementptr inbounds %S.ast.Type, ptr %t423, i32 0, i32 0 + %t425 = load { ptr, i64, i64 }, ptr %t424 + store { ptr, i64, i64 } %t425, ptr %a426 + store { ptr, i64, i64 } { ptr @.str.3108, i64 4, i64 0 }, ptr %a427 + %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) + %t429 = icmp eq i32 %t428, 0 + br i1 %t429, label %then4952, label %endif4954 +then4952: + %t430 = load ptr, ptr %a1 + %t431 = load %S.ast.Node, ptr %a119 + %t432 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 1 + %t433 = load { ptr, i64, i64 }, ptr %t432 + store { ptr, i64, i64 } { ptr @.str.3109, i64 10, i64 0 }, ptr %a435 + store { ptr, i64, i64 } %t433, ptr %a436 + call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) + %t437 = load { ptr, i64, i64 }, ptr %a434 + store { ptr, i64, i64 } %t437, ptr %a439 + store { ptr, i64, i64 } { ptr @.str.3110, i64 38, i64 0 }, ptr %a440 + call void @finch_str_concat(ptr %a438, ptr %a439, ptr %a440) + store { ptr, i64, i64 } %t437, ptr %a441 + call void @finch_str_drop(ptr %a441) + %t442 = load { ptr, i64, i64 }, ptr %a438 + %t443 = load ptr, ptr %a1 + %t444 = icmp eq ptr %t443, null + br i1 %t444, label %panic4955, label %ok4956 +panic4955: + call void @finch_panic(ptr @.str.3111, i64 2231, ptr @.str.3112) + unreachable +ok4956: + %t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 13 + %t446 = getelementptr inbounds %S.gen.FnSig, ptr %t445, i32 0, i32 12 + %t447 = load %S.ast.Type, ptr %t446 + %t448 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t447) + store { ptr, i64, i64 } %t442, ptr %a450 + store { ptr, i64, i64 } %t448, ptr %a451 + call void @finch_str_concat(ptr %a449, ptr %a450, ptr %a451) + store { ptr, i64, i64 } %t442, ptr %a452 + call void @finch_str_drop(ptr %a452) + store { ptr, i64, i64 } %t448, ptr %a453 + call void @finch_str_drop(ptr %a453) + %t454 = load { ptr, i64, i64 }, ptr %a449 + call void @finch.gen.fail(ptr %t430, %S.ast.Node %t431, { ptr, i64, i64 } %t454) + store { ptr, i64, i64 } %t454, ptr %a455 + call void @finch_str_drop(ptr %a455) + br label %endif4954 +endif4954: + %t456 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t456, i64 0) + %t457 = load ptr, ptr %a1 + %t458 = icmp eq ptr %t457, null + br i1 %t458, label %panic4957, label %ok4958 +panic4957: + call void @finch_panic(ptr @.str.3113, i64 2234, ptr @.str.3114) + unreachable +ok4958: + %t459 = getelementptr inbounds %S.gen.Gen, ptr %t457, i32 0, i32 13 + %t460 = getelementptr inbounds %S.gen.FnSig, ptr %t459, i32 0, i32 9 + %t461 = load i1, ptr %t460 + br i1 %t461, label %then4959, label %else4960 +then4959: + %t462 = load ptr, ptr %a1 + %t463 = load ptr, ptr %a1 + %t464 = load ptr, ptr %a1 + %t465 = icmp eq ptr %t464, null + br i1 %t465, label %panic4962, label %ok4963 +panic4962: + call void @finch_panic(ptr @.str.3116, i64 2235, ptr @.str.3117) + unreachable +ok4963: + %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 13 + %t467 = load %S.gen.FnSig, ptr %t466 + %t468 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t463, %S.gen.FnSig %t467) + store { ptr, i64, i64 } { ptr @.str.3115, i64 4, i64 0 }, ptr %a470 + store { ptr, i64, i64 } %t468, ptr %a471 + call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471) + store { ptr, i64, i64 } %t468, ptr %a472 + call void @finch_str_drop(ptr %a472) + %t473 = load { ptr, i64, i64 }, ptr %a469 + store { ptr, i64, i64 } %t473, ptr %a475 + store { ptr, i64, i64 } { ptr @.str.3118, i64 53, i64 0 }, ptr %a476 + call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) + store { ptr, i64, i64 } %t473, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = load { ptr, i64, i64 }, ptr %a474 + call void @finch.gen.emit(ptr %t462, { ptr, i64, i64 } %t478) + store { ptr, i64, i64 } %t478, ptr %a479 + call void @finch_str_drop(ptr %a479) + br label %endif4961 +else4960: + %t480 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t480, { ptr, i64, i64 } { ptr @.str.3119, i64 8, i64 0 }) + br label %endif4961 +endif4961: + br label %endif4949 +endif4949: + store { ptr, i64, i64 } { ptr @.str.3120, i64 0, i64 0 }, ptr %a481 + %t482 = load i64, ptr %a151 + %t483 = icmp sge i64 %t482, 0 + br i1 %t483, label %then4964, label %endif4966 +then4964: + %t484 = load i64, ptr %a151 + call void @finch_str_from_int(ptr %a485, i64 %t484) + %t486 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.3121, i64 7, i64 0 }, ptr %a488 + store { ptr, i64, i64 } %t486, ptr %a489 + call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) + store { ptr, i64, i64 } %t486, ptr %a490 + call void @finch_str_drop(ptr %a490) + %t491 = load { ptr, i64, i64 }, ptr %a487 + %t492 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t491, ptr %a481 + store { ptr, i64, i64 } %t492, ptr %a493 + call void @finch_str_drop(ptr %a493) + br label %endif4966 +endif4966: + %t494 = load ptr, ptr %a1 + %t495 = icmp eq ptr %t494, null + br i1 %t495, label %panic4967, label %ok4968 +panic4967: + call void @finch_panic(ptr @.str.3122, i64 2244, ptr @.str.3123) + unreachable +ok4968: + %t496 = getelementptr inbounds %S.gen.Gen, ptr %t494, i32 0, i32 36 + store i64 -1, ptr %t496 + %t497 = load ptr, ptr %a1 + %t498 = icmp eq ptr %t497, null + br i1 %t498, label %panic4969, label %ok4970 +panic4969: + call void @finch_panic(ptr @.str.3124, i64 2245, ptr @.str.3125) + unreachable +ok4970: + %t499 = getelementptr inbounds %S.gen.Gen, ptr %t497, i32 0, i32 3 + %t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t499, i32 0, i32 1 + %t501 = load ptr, ptr %a1 + %t502 = load ptr, ptr %a1 + %t503 = icmp eq ptr %t502, null + br i1 %t503, label %panic4971, label %ok4972 +panic4971: + call void @finch_panic(ptr @.str.3127, i64 2245, ptr @.str.3128) + unreachable +ok4972: + %t504 = getelementptr inbounds %S.gen.Gen, ptr %t502, i32 0, i32 13 + %t505 = load %S.gen.FnSig, ptr %t504 + %t506 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t501, %S.gen.FnSig %t505) + store { ptr, i64, i64 } { ptr @.str.3126, i64 16, i64 0 }, ptr %a508 + store { ptr, i64, i64 } %t506, ptr %a509 + call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) + store { ptr, i64, i64 } %t506, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a507 + store { ptr, i64, i64 } %t511, ptr %a513 + store { ptr, i64, i64 } { ptr @.str.3129, i64 1, i64 0 }, ptr %a514 + call void @finch_str_concat(ptr %a512, ptr %a513, ptr %a514) + store { ptr, i64, i64 } %t511, ptr %a515 + call void @finch_str_drop(ptr %a515) + %t516 = load { ptr, i64, i64 }, ptr %a512 + %t517 = load ptr, ptr %a1 + %t518 = icmp eq ptr %t517, null + br i1 %t518, label %panic4973, label %ok4974 +panic4973: + call void @finch_panic(ptr @.str.3130, i64 2245, ptr @.str.3131) + unreachable +ok4974: + %t519 = getelementptr inbounds %S.gen.Gen, ptr %t517, i32 0, i32 13 + %t520 = getelementptr inbounds %S.gen.FnSig, ptr %t519, i32 0, i32 11 + %t521 = load { ptr, i64, i64 }, ptr %t520 + store { ptr, i64, i64 } %t516, ptr %a523 + store { ptr, i64, i64 } %t521, ptr %a524 + call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) + store { ptr, i64, i64 } %t516, ptr %a525 + call void @finch_str_drop(ptr %a525) + %t526 = load { ptr, i64, i64 }, ptr %a522 + store { ptr, i64, i64 } %t526, ptr %a528 + store { ptr, i64, i64 } { ptr @.str.3132, i64 1, i64 0 }, ptr %a529 + call void @finch_str_concat(ptr %a527, ptr %a528, ptr %a529) + store { ptr, i64, i64 } %t526, ptr %a530 + call void @finch_str_drop(ptr %a530) + %t531 = load { ptr, i64, i64 }, ptr %a527 + %t532 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3133, i64 2, i64 0 }, ptr %a533 + call void @finch_str_join(ptr %a534, ptr %a190, ptr %a533) + %t535 = load { ptr, i64, i64 }, ptr %a534 + store { ptr, i64, i64 } %t531, ptr %a537 + store { ptr, i64, i64 } %t535, ptr %a538 + call void @finch_str_concat(ptr %a536, ptr %a537, ptr %a538) + store { ptr, i64, i64 } %t531, ptr %a539 + call void @finch_str_drop(ptr %a539) + store { ptr, i64, i64 } %t535, ptr %a540 + call void @finch_str_drop(ptr %a540) + %t541 = load { ptr, i64, i64 }, ptr %a536 + store { ptr, i64, i64 } %t541, ptr %a543 + store { ptr, i64, i64 } { ptr @.str.3134, i64 1, i64 0 }, ptr %a544 + call void @finch_str_concat(ptr %a542, ptr %a543, ptr %a544) + store { ptr, i64, i64 } %t541, ptr %a545 + call void @finch_str_drop(ptr %a545) + %t546 = load { ptr, i64, i64 }, ptr %a542 + %t547 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t546, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + store { ptr, i64, i64 } %t546, ptr %a551 + call void @finch_str_drop(ptr %a551) + %t552 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t552, ptr %a554 + store { ptr, i64, i64 } { ptr @.str.3135, i64 10, i64 0 }, ptr %a555 + call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) + store { ptr, i64, i64 } %t552, ptr %a556 + call void @finch_str_drop(ptr %a556) + %t557 = load { ptr, i64, i64 }, ptr %a553 + %t558 = load ptr, ptr %a1 + %t559 = icmp eq ptr %t558, null + br i1 %t559, label %panic4975, label %ok4976 +panic4975: + call void @finch_panic(ptr @.str.3136, i64 2246, ptr @.str.3137) + unreachable +ok4976: + %t560 = getelementptr inbounds %S.gen.Gen, ptr %t558, i32 0, i32 5 + %t561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t560, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3138, i64 1, i64 0 }, ptr %a562 + call void @finch_str_join(ptr %a563, ptr %t560, ptr %a562) + %t564 = load { ptr, i64, i64 }, ptr %a563 + store { ptr, i64, i64 } %t557, ptr %a566 + store { ptr, i64, i64 } %t564, ptr %a567 + call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) + store { ptr, i64, i64 } %t557, ptr %a568 + call void @finch_str_drop(ptr %a568) + store { ptr, i64, i64 } %t564, ptr %a569 + call void @finch_str_drop(ptr %a569) + %t570 = load { ptr, i64, i64 }, ptr %a565 + store { ptr, i64, i64 } %t570, ptr %a572 + store { ptr, i64, i64 } { ptr @.str.3139, i64 1, i64 0 }, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + store { ptr, i64, i64 } %t570, ptr %a574 + call void @finch_str_drop(ptr %a574) + %t575 = load { ptr, i64, i64 }, ptr %a571 + %t576 = load ptr, ptr %a1 + %t577 = icmp eq ptr %t576, null + br i1 %t577, label %panic4977, label %ok4978 +panic4977: + call void @finch_panic(ptr @.str.3140, i64 2246, ptr @.str.3141) + unreachable +ok4978: + %t578 = getelementptr inbounds %S.gen.Gen, ptr %t576, i32 0, i32 4 + %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t578, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3142, i64 1, i64 0 }, ptr %a580 + call void @finch_str_join(ptr %a581, ptr %t578, ptr %a580) + %t582 = load { ptr, i64, i64 }, ptr %a581 + store { ptr, i64, i64 } %t575, ptr %a584 + store { ptr, i64, i64 } %t582, ptr %a585 + call void @finch_str_concat(ptr %a583, ptr %a584, ptr %a585) + store { ptr, i64, i64 } %t575, ptr %a586 + call void @finch_str_drop(ptr %a586) + store { ptr, i64, i64 } %t582, ptr %a587 + call void @finch_str_drop(ptr %a587) + %t588 = load { ptr, i64, i64 }, ptr %a583 + store { ptr, i64, i64 } %t588, ptr %a590 + store { ptr, i64, i64 } { ptr @.str.3143, i64 3, i64 0 }, ptr %a591 + call void @finch_str_concat(ptr %a589, ptr %a590, ptr %a591) + store { ptr, i64, i64 } %t588, ptr %a592 + call void @finch_str_drop(ptr %a592) + %t593 = load { ptr, i64, i64 }, ptr %a589 + %t594 = load i64, ptr %t500 + %t595 = add i64 %t594, 1 + call void @finch_arr_reserve(ptr %t499, i64 %t595, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t596 = load ptr, ptr %t499 + %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 + store { ptr, i64, i64 } %t593, ptr %t597 + store i64 %t595, ptr %t500 + call void @finch_str_drop(ptr %a481) + call void @finch.drop.arr_str(ptr %a190) + call void @finch.drop.arr_S_gen_Scope(ptr %a179) + call void @finch.drop.arr_str(ptr %a120) + call void @finch.drop.S_ast_Node(ptr %a119) + ret void +} + +define internal void @finch.gen.block(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a7 = alloca i64, align 16 + %a15 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load i1, ptr %a3 + br i1 %t4, label %then4979, label %endif4981 +then4979: + %t5 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t5) + br label %endif4981 +endif4981: + %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + store i64 0, ptr %a7 + br label %each.cond4982 +each.cond4982: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load i64, ptr %a7 + %t11 = icmp slt i64 %t10, %t9 + br i1 %t11, label %each.body4983, label %each.end4985 +each.body4983: + %t12 = load ptr, ptr %t6 + %t13 = getelementptr inbounds %S.ast.Node, ptr %t12, i64 %t10 + %t14 = load %S.ast.Node, ptr %t13 + store %S.ast.Node %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic4986, label %ok4987 +panic4986: + call void @finch_panic(ptr @.str.3144, i64 2256, ptr @.str.3145) + unreachable +ok4987: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 + %t19 = load i1, ptr %t18 + br i1 %t19, label %then4988, label %endif4990 +then4988: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Node, ptr %a15 + call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } { ptr @.str.3146, i64 66, i64 0 }) + br label %endif4990 +endif4990: + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Node, ptr %a15 + call void @finch.gen.stmt(ptr %t22, %S.ast.Node %t23) + br label %each.step4984 +each.step4984: + %t24 = load i64, ptr %a7 + %t25 = add i64 %t24, 1 + store i64 %t25, ptr %a7 + br label %each.cond4982 +each.end4985: + %t26 = load i1, ptr %a3 + br i1 %t26, label %then4991, label %endif4993 +then4991: + %t27 = load ptr, ptr %a1 + call void @finch.gen.endScope(ptr %t27) + br label %endif4993 +endif4993: + ret void +} + +define internal void @finch.copy.S_gen_Loop(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Loop, ptr %src + store %S.gen.Loop %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.drop.S_gen_Loop(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Loop, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Loop, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal void @finch.gen.stmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca %S.gen.Val, align 16 + %a78 = alloca %S.gen.Val, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca %S.gen.Val, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca i64, align 16 + %a189 = alloca %S.ast.Node, align 16 + %a190 = alloca %S.ast.Node, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca %S.gen.Loop, align 16 + %a269 = alloca %S.gen.Loop, align 16 + %a271 = alloca %S.gen.Loop, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t4 = load i64, ptr %t3 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic4994, label %ok4995 +panic4994: + call void @finch_panic(ptr @.str.3147, i64 2267, ptr @.str.3148) + unreachable +ok4995: + %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 37 + store i64 %t4, ptr %t7 + %t8 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t9 = load i64, ptr %t8 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic4996, label %ok4997 +panic4996: + call void @finch_panic(ptr @.str.3149, i64 2268, ptr @.str.3150) + unreachable +ok4997: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 38 + store i64 %t9, ptr %t12 + %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_copy(ptr %a16, ptr %a15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.3151, i64 5, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br i1 %t23, label %then4998, label %else4999 +then4998: + %t24 = load ptr, ptr %a1 + %t25 = load %S.ast.Node, ptr %a2 + call void @finch.gen.block(ptr %t24, %S.ast.Node %t25, i1 true) + br label %endif5000 +else4999: + %t26 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.3152, i64 4, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br i1 %t30, label %then5001, label %else5002 +then5001: + %t31 = load ptr, ptr %a1 + %t32 = load %S.ast.Node, ptr %a2 + call void @finch.gen.declStmt(ptr %t31, %S.ast.Node %t32) + br label %endif5003 +else5002: + %t33 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3153, i64 6, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %then5004, label %else5005 +then5004: + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Node, ptr %a2 + call void @finch.gen.assignStmt(ptr %t38, %S.ast.Node %t39) + br label %endif5006 +else5005: + %t40 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.3154, i64 4, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then5007, label %else5008 +then5007: + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 0, %t47 + br i1 %t48, label %range5010, label %inrange5011 +range5010: + call void @finch_panic_index(ptr @.str.3155, i64 2277, i64 0, i64 %t47) + unreachable +inrange5011: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 0 + %t51 = getelementptr inbounds %S.ast.Node, ptr %t50, i32 0, i32 0 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.3156, i64 2, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then5012, label %else5013 +then5012: + %t57 = load ptr, ptr %a1 + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = extractvalue { ptr, i64, i64 } %t60, 1 + %t62 = icmp uge i64 0, %t61 + br i1 %t62, label %range5015, label %inrange5016 +range5015: + call void @finch_panic_index(ptr @.str.3157, i64 2278, i64 0, i64 %t61) + unreachable +inrange5016: + %t63 = extractvalue { ptr, i64, i64 } %t60, 0 + %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 0 + %t65 = load %S.ast.Node, ptr %t64 + %t66 = call %S.gen.Val @finch.gen.orElse(ptr %t58, %S.ast.Node %t65, i1 true) + call void @finch.gen.release(ptr %t57, %S.gen.Val %t66) + store %S.gen.Val %t66, ptr %a67 + call void @finch.drop.S_gen_Val(ptr %a67) + br label %endif5014 +else5013: + %t68 = load ptr, ptr %a1 + %t69 = load ptr, ptr %a1 + %t70 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t71 = load { ptr, i64, i64 }, ptr %t70 + %t72 = extractvalue { ptr, i64, i64 } %t71, 1 + %t73 = icmp uge i64 0, %t72 + br i1 %t73, label %range5017, label %inrange5018 +range5017: + call void @finch_panic_index(ptr @.str.3158, i64 2280, i64 0, i64 %t72) + unreachable +inrange5018: + %t74 = extractvalue { ptr, i64, i64 } %t71, 0 + %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 0 + %t76 = load %S.ast.Node, ptr %t75 + %t77 = call %S.gen.Val @finch.gen.expr(ptr %t69, %S.ast.Node %t76) + call void @finch.gen.release(ptr %t68, %S.gen.Val %t77) + store %S.gen.Val %t77, ptr %a78 + call void @finch.drop.S_gen_Val(ptr %a78) + br label %endif5014 +endif5014: + br label %endif5009 +else5008: + %t79 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t79, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.3159, i64 5, i64 0 }, ptr %a81 + %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) + %t83 = icmp ne i32 %t82, 0 + br i1 %t83, label %then5019, label %else5020 +then5019: + %t84 = load ptr, ptr %a1 + %t85 = load %S.ast.Node, ptr %a2 + %t86 = call %S.gen.Val @finch.gen.matchGen(ptr %t84, %S.ast.Node %t85, i1 false) + store %S.gen.Val %t86, ptr %a87 + call void @finch.drop.S_gen_Val(ptr %a87) + br label %endif5021 +else5020: + %t88 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t88, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.3160, i64 2, i64 0 }, ptr %a90 + %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then5022, label %else5023 +then5022: + %t93 = load ptr, ptr %a1 + %t94 = load %S.ast.Node, ptr %a2 + call void @finch.gen.ifStmt(ptr %t93, %S.ast.Node %t94) + br label %endif5024 +else5023: + %t95 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.3161, i64 5, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then5025, label %else5026 +then5025: + %t100 = load ptr, ptr %a1 + %t101 = load %S.ast.Node, ptr %a2 + call void @finch.gen.whileStmt(ptr %t100, %S.ast.Node %t101) + br label %endif5027 +else5026: + %t102 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.3162, i64 3, i64 0 }, ptr %a104 + %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) + %t106 = icmp ne i32 %t105, 0 + br i1 %t106, label %then5028, label %else5029 +then5028: + %t107 = load ptr, ptr %a1 + %t108 = load %S.ast.Node, ptr %a2 + call void @finch.gen.forStmt(ptr %t107, %S.ast.Node %t108) + br label %endif5030 +else5029: + %t109 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t109, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.3163, i64 4, i64 0 }, ptr %a111 + %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) + %t113 = icmp ne i32 %t112, 0 + br i1 %t113, label %then5031, label %else5032 +then5031: + %t114 = load ptr, ptr %a1 + %t115 = load %S.ast.Node, ptr %a2 + call void @finch.gen.eachStmt(ptr %t114, %S.ast.Node %t115) + br label %endif5033 +else5032: + %t116 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t116, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.3164, i64 6, i64 0 }, ptr %a118 + %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) + %t120 = icmp ne i32 %t119, 0 + br i1 %t120, label %then5034, label %else5035 +then5034: + %t121 = load ptr, ptr %a1 + %t122 = load %S.ast.Node, ptr %a2 + call void @finch.gen.returnStmt(ptr %t121, %S.ast.Node %t122) + br label %endif5036 +else5035: + %t123 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t123, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.3165, i64 5, i64 0 }, ptr %a125 + %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) + %t127 = icmp ne i32 %t126, 0 + br i1 %t127, label %then5037, label %else5038 +then5037: + %t128 = load ptr, ptr %a1 + %t129 = icmp eq ptr %t128, null + br i1 %t129, label %panic5040, label %ok5041 +panic5040: + call void @finch_panic(ptr @.str.3166, i64 2295, ptr @.str.3167) + unreachable +ok5041: + %t130 = getelementptr inbounds %S.gen.Gen, ptr %t128, i32 0, i32 46 + %t131 = load i64, ptr %t130 + %t132 = icmp sgt i64 %t131, 0 + br i1 %t132, label %then5042, label %endif5044 +then5042: + %t133 = load ptr, ptr %a1 + %t134 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } { ptr @.str.3168, i64 33, i64 0 }) + br label %endif5044 +endif5044: + %t135 = load ptr, ptr %a1 + %t136 = icmp eq ptr %t135, null + br i1 %t136, label %panic5045, label %ok5046 +panic5045: + call void @finch_panic(ptr @.str.3169, i64 2298, ptr @.str.3170) + unreachable +ok5046: + %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 10 + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 + %t139 = load i64, ptr %t138 + %t140 = sub i64 %t139, 1 + store i64 %t140, ptr %a141 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic5047, label %ok5048 +panic5047: + call void @finch_panic(ptr @.str.3171, i64 2299, ptr @.str.3172) + unreachable +ok5048: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 10 + %t145 = load i64, ptr %a141 + %t146 = load { ptr, i64, i64 }, ptr %t144 + %t147 = extractvalue { ptr, i64, i64 } %t146, 1 + %t148 = icmp uge i64 %t145, %t147 + br i1 %t148, label %range5049, label %inrange5050 +range5049: + call void @finch_panic_index(ptr @.str.3173, i64 2299, i64 %t145, i64 %t147) + unreachable +inrange5050: + %t149 = extractvalue { ptr, i64, i64 } %t146, 0 + %t150 = getelementptr inbounds %S.gen.Scope, ptr %t149, i64 %t145 + %t151 = getelementptr inbounds %S.gen.Scope, ptr %t150, i32 0, i32 3 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = insertvalue %S.gen.Cleanup zeroinitializer, i1 true, 0 + %t154 = load ptr, ptr %a1 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic5051, label %ok5052 +panic5051: + call void @finch_panic(ptr @.str.3174, i64 2299, ptr @.str.3175) + unreachable +ok5052: + %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 10 + %t157 = load i64, ptr %a141 + %t158 = load { ptr, i64, i64 }, ptr %t156 + %t159 = extractvalue { ptr, i64, i64 } %t158, 1 + %t160 = icmp uge i64 %t157, %t159 + br i1 %t160, label %range5053, label %inrange5054 +range5053: + call void @finch_panic_index(ptr @.str.3176, i64 2299, i64 %t157, i64 %t159) + unreachable +inrange5054: + %t161 = extractvalue { ptr, i64, i64 } %t158, 0 + %t162 = getelementptr inbounds %S.gen.Scope, ptr %t161, i64 %t157 + %t163 = getelementptr inbounds %S.gen.Scope, ptr %t162, i32 0, i32 1 + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i32 0, i32 1 + %t165 = load i64, ptr %t164 + %t166 = insertvalue %S.gen.Cleanup %t153, i64 %t165, 1 + %t167 = load i64, ptr %t152 + %t168 = add i64 %t167, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t168, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) + %t169 = load ptr, ptr %t151 + %t170 = getelementptr inbounds %S.gen.Cleanup, ptr %t169, i64 %t167 + store %S.gen.Cleanup %t166, ptr %t170 + store i64 %t168, ptr %t152 + %t171 = load ptr, ptr %a1 + %t172 = icmp eq ptr %t171, null + br i1 %t172, label %panic5055, label %ok5056 +panic5055: + call void @finch_panic(ptr @.str.3177, i64 2300, ptr @.str.3178) + unreachable +ok5056: + %t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 10 + %t174 = load i64, ptr %a141 + %t175 = load { ptr, i64, i64 }, ptr %t173 + %t176 = extractvalue { ptr, i64, i64 } %t175, 1 + %t177 = icmp uge i64 %t174, %t176 + br i1 %t177, label %range5057, label %inrange5058 +range5057: + call void @finch_panic_index(ptr @.str.3179, i64 2300, i64 %t174, i64 %t176) + unreachable +inrange5058: + %t178 = extractvalue { ptr, i64, i64 } %t175, 0 + %t179 = getelementptr inbounds %S.gen.Scope, ptr %t178, i64 %t174 + %t180 = getelementptr inbounds %S.gen.Scope, ptr %t179, i32 0, i32 1 + %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t180, i32 0, i32 1 + %t182 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t183 = load { ptr, i64, i64 }, ptr %t182 + %t184 = extractvalue { ptr, i64, i64 } %t183, 1 + %t185 = icmp uge i64 0, %t184 + br i1 %t185, label %range5059, label %inrange5060 +range5059: + call void @finch_panic_index(ptr @.str.3180, i64 2300, i64 0, i64 %t184) + unreachable +inrange5060: + %t186 = extractvalue { ptr, i64, i64 } %t183, 0 + %t187 = getelementptr inbounds %S.ast.Node, ptr %t186, i64 0 + %t188 = load %S.ast.Node, ptr %t187 + store %S.ast.Node %t188, ptr %a189 + call void @finch.copy.S_ast_Node(ptr %a190, ptr %a189) + %t191 = load %S.ast.Node, ptr %a190 + %t192 = load i64, ptr %t181 + %t193 = add i64 %t192, 1 + call void @finch_arr_reserve(ptr %t180, i64 %t193, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t194 = load ptr, ptr %t180 + %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t192 + store %S.ast.Node %t191, ptr %t195 + store i64 %t193, ptr %t181 + %t196 = load ptr, ptr %a1 + %t197 = icmp eq ptr %t196, null + br i1 %t197, label %panic5061, label %ok5062 +panic5061: + call void @finch_panic(ptr @.str.3181, i64 2301, ptr @.str.3182) + unreachable +ok5062: + %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 10 + %t199 = load i64, ptr %a141 + %t200 = load { ptr, i64, i64 }, ptr %t198 + %t201 = extractvalue { ptr, i64, i64 } %t200, 1 + %t202 = icmp uge i64 %t199, %t201 + br i1 %t202, label %range5063, label %inrange5064 +range5063: + call void @finch_panic_index(ptr @.str.3183, i64 2301, i64 %t199, i64 %t201) + unreachable +inrange5064: + %t203 = extractvalue { ptr, i64, i64 } %t200, 0 + %t204 = getelementptr inbounds %S.gen.Scope, ptr %t203, i64 %t199 + %t205 = getelementptr inbounds %S.gen.Scope, ptr %t204, i32 0, i32 2 + %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i32 0, i32 1 + %t207 = load ptr, ptr %a1 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic5065, label %ok5066 +panic5065: + call void @finch_panic(ptr @.str.3184, i64 2301, ptr @.str.3185) + unreachable +ok5066: + %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 25 + %t210 = load i64, ptr %t209 + %t211 = load i64, ptr %t206 + %t212 = add i64 %t211, 1 + call void @finch_arr_reserve(ptr %t205, i64 %t212, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t213 = load ptr, ptr %t205 + %t214 = getelementptr inbounds i64, ptr %t213, i64 %t211 + store i64 %t210, ptr %t214 + store i64 %t212, ptr %t206 + br label %endif5039 +else5038: + %t215 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t215, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.3186, i64 5, i64 0 }, ptr %a217 + %t218 = call i32 @finch_str_eq(ptr %a216, ptr %a217) + %t219 = icmp ne i32 %t218, 0 + br label %logic.from5067 +logic.from5067: + br i1 %t219, label %logic.end5069, label %logic.rhs5068 +logic.rhs5068: + %t220 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t220, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.3187, i64 8, i64 0 }, ptr %a222 + %t223 = call i32 @finch_str_eq(ptr %a221, ptr %a222) + %t224 = icmp ne i32 %t223, 0 + br label %logic.rend5070 +logic.rend5070: + br label %logic.end5069 +logic.end5069: + %t225 = phi i1 [ true, %logic.from5067 ], [ %t224, %logic.rend5070 ] + br i1 %t225, label %then5071, label %else5072 +then5071: + %t226 = load ptr, ptr %a1 + %t227 = icmp eq ptr %t226, null + br i1 %t227, label %panic5074, label %ok5075 +panic5074: + call void @finch_panic(ptr @.str.3188, i64 2303, ptr @.str.3189) + unreachable +ok5075: + %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 46 + %t229 = load i64, ptr %t228 + %t230 = icmp sgt i64 %t229, 0 + br i1 %t230, label %then5076, label %endif5078 +then5076: + %t231 = load ptr, ptr %a1 + %t232 = load %S.ast.Node, ptr %a2 + %t233 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.3190, i64 27, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + %t237 = load { ptr, i64, i64 }, ptr %a234 + call void @finch.gen.fail(ptr %t231, %S.ast.Node %t232, { ptr, i64, i64 } %t237) + store { ptr, i64, i64 } %t237, ptr %a238 + call void @finch_str_drop(ptr %a238) + br label %endif5078 +endif5078: + %t239 = load ptr, ptr %a1 + %t240 = icmp eq ptr %t239, null + br i1 %t240, label %panic5079, label %ok5080 +panic5079: + call void @finch_panic(ptr @.str.3191, i64 2306, ptr @.str.3192) + unreachable +ok5080: + %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 12 + %t242 = getelementptr inbounds { ptr, i64, i64 }, ptr %t241, i32 0, i32 1 + %t243 = load i64, ptr %t242 + %t244 = icmp eq i64 %t243, 0 + br i1 %t244, label %then5081, label %endif5083 +then5081: + %t245 = load ptr, ptr %a1 + %t246 = load %S.ast.Node, ptr %a2 + %t247 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t247, ptr %a249 + store { ptr, i64, i64 } { ptr @.str.3193, i64 31, i64 0 }, ptr %a250 + call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a248 + call void @finch.gen.fail(ptr %t245, %S.ast.Node %t246, { ptr, i64, i64 } %t251) + store { ptr, i64, i64 } %t251, ptr %a252 + call void @finch_str_drop(ptr %a252) + br label %endif5083 +endif5083: + %t253 = load ptr, ptr %a1 + %t254 = icmp eq ptr %t253, null + br i1 %t254, label %panic5084, label %ok5085 +panic5084: + call void @finch_panic(ptr @.str.3194, i64 2309, ptr @.str.3195) + unreachable +ok5085: + %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 12 + %t256 = load ptr, ptr %a1 + %t257 = icmp eq ptr %t256, null + br i1 %t257, label %panic5086, label %ok5087 +panic5086: + call void @finch_panic(ptr @.str.3196, i64 2309, ptr @.str.3197) + unreachable +ok5087: + %t258 = getelementptr inbounds %S.gen.Gen, ptr %t256, i32 0, i32 12 + %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 + %t260 = load i64, ptr %t259 + %t261 = sub i64 %t260, 1 + %t262 = load { ptr, i64, i64 }, ptr %t255 + %t263 = extractvalue { ptr, i64, i64 } %t262, 1 + %t264 = icmp uge i64 %t261, %t263 + br i1 %t264, label %range5088, label %inrange5089 +range5088: + call void @finch_panic_index(ptr @.str.3198, i64 2309, i64 %t261, i64 %t263) + unreachable +inrange5089: + %t265 = extractvalue { ptr, i64, i64 } %t262, 0 + %t266 = getelementptr inbounds %S.gen.Loop, ptr %t265, i64 %t261 + %t267 = load %S.gen.Loop, ptr %t266 + store %S.gen.Loop %t267, ptr %a268 + call void @finch.copy.S_gen_Loop(ptr %a269, ptr %a268) + %t270 = load %S.gen.Loop, ptr %a269 + store %S.gen.Loop %t270, ptr %a271 + %t272 = load ptr, ptr %a1 + %t273 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 3 + %t274 = load i64, ptr %t273 + call void @finch.gen.dropPending(ptr %t272, i64 %t274) + %t275 = load ptr, ptr %a1 + %t276 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 2 + %t277 = load i64, ptr %t276 + call void @finch.gen.unwind(ptr %t275, i64 %t277) + %t278 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t278, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.3199, i64 5, i64 0 }, ptr %a280 + %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) + %t282 = icmp ne i32 %t281, 0 + br i1 %t282, label %then5090, label %else5091 +then5090: + %t283 = load ptr, ptr %a1 + %t284 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 1 + %t285 = load { ptr, i64, i64 }, ptr %t284 + call void @finch.gen.br(ptr %t283, { ptr, i64, i64 } %t285) + br label %endif5092 +else5091: + %t286 = load ptr, ptr %a1 + %t287 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 0 + %t288 = load { ptr, i64, i64 }, ptr %t287 + call void @finch.gen.br(ptr %t286, { ptr, i64, i64 } %t288) + br label %endif5092 +endif5092: + call void @finch.drop.S_gen_Loop(ptr %a271) + br label %endif5073 +else5072: + %t289 = load ptr, ptr %a1 + %t290 = load %S.ast.Node, ptr %a2 + %t291 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.3200, i64 18, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a292 + call void @finch.gen.fail(ptr %t289, %S.ast.Node %t290, { ptr, i64, i64 } %t295) + store { ptr, i64, i64 } %t295, ptr %a296 + call void @finch_str_drop(ptr %a296) + br label %endif5073 +endif5073: + br label %endif5039 +endif5039: + br label %endif5036 +endif5036: + br label %endif5033 +endif5033: + br label %endif5030 +endif5030: + br label %endif5027 +endif5027: + br label %endif5024 +endif5024: + br label %endif5021 +endif5021: + br label %endif5009 +endif5009: + br label %endif5006 +endif5006: + br label %endif5003 +endif5003: + br label %endif5000 +endif5000: + call void @finch_str_drop(ptr %a18) + ret void +} + +define internal void @finch.gen.declStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a15 = alloca %S.gen.Val, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca %S.gen.Val, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca %S.gen.Val, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca %S.gen.Val, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 + %t4 = load i1, ptr %t3 + %t5 = xor i1 %t4, true + br i1 %t5, label %then5093, label %endif5095 +then5093: + %t6 = load ptr, ptr %a1 + %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t8 = load { ptr, i64, i64 }, ptr %t7 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 0, %t9 + br i1 %t10, label %range5096, label %inrange5097 +range5096: + call void @finch_panic_index(ptr @.str.3201, i64 2324, i64 0, i64 %t9) + unreachable +inrange5097: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.ast.Node, ptr %t11, i64 0 + %t13 = load %S.ast.Node, ptr %t12 + %t14 = call %S.gen.Val @finch.gen.expr(ptr %t6, %S.ast.Node %t13) + store %S.gen.Val %t14, ptr %a15 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 + %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.3202, i64 4, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br i1 %t22, label %then5098, label %endif5100 +then5098: + %t23 = load ptr, ptr %a1 + %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t25 = load { ptr, i64, i64 }, ptr %t24 + %t26 = extractvalue { ptr, i64, i64 } %t25, 1 + %t27 = icmp uge i64 0, %t26 + br i1 %t27, label %range5101, label %inrange5102 +range5101: + call void @finch_panic_index(ptr @.str.3203, i64 2326, i64 0, i64 %t26) + unreachable +inrange5102: + %t28 = extractvalue { ptr, i64, i64 } %t25, 0 + %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 + %t30 = load %S.ast.Node, ptr %t29 + call void @finch.gen.fail(ptr %t23, %S.ast.Node %t30, { ptr, i64, i64 } { ptr @.str.3204, i64 46, i64 0 }) + br label %endif5100 +endif5100: + %t31 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3205, i64 4, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %then5103, label %endif5105 +then5103: + %t38 = load ptr, ptr %a1 + %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range5106, label %inrange5107 +range5106: + call void @finch_panic_index(ptr @.str.3206, i64 2329, i64 0, i64 %t41) + unreachable +inrange5107: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 0 + %t45 = load %S.ast.Node, ptr %t44 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store { ptr, i64, i64 } { ptr @.str.3207, i64 34, i64 0 }, ptr %a49 + store { ptr, i64, i64 } %t47, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.3208, i64 7, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + call void @finch.gen.fail(ptr %t38, %S.ast.Node %t45, { ptr, i64, i64 } %t56) + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_drop(ptr %a57) + br label %endif5105 +endif5105: + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Node, ptr %a2 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 + %t63 = load %S.ast.Type, ptr %t62 + %t64 = load ptr, ptr %a1 + %t65 = load %S.gen.Val, ptr %a15 + %t66 = call { ptr, i64, i64 } @finch.gen.own(ptr %t64, %S.gen.Val %t65) + %t67 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t58, %S.ast.Node %t59, { ptr, i64, i64 } %t61, %S.ast.Type %t63, { ptr, i64, i64 } %t66, i1 false, i1 true) + store { ptr, i64, i64 } %t66, ptr %a68 + call void @finch_str_drop(ptr %a68) + store { ptr, i64, i64 } %t67, ptr %a69 + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_gen_Val(ptr %a15) + ret void +endif5095: + %t70 = load ptr, ptr %a1 + %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t72 = load %S.ast.Type, ptr %t71 + %t73 = load %S.ast.Node, ptr %a2 + %t74 = call %S.ast.Type @finch.gen.resolve(ptr %t70, %S.ast.Type %t72, %S.ast.Node %t73) + store %S.ast.Type %t74, ptr %a75 + %t76 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = load i64, ptr %t77 + %t79 = icmp eq i64 %t78, 0 + br i1 %t79, label %then5108, label %endif5110 +then5108: + %t80 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 0 + %t81 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.3209, i64 6, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.from5111 +logic.from5111: + br i1 %t85, label %logic.rhs5112, label %logic.end5113 +logic.rhs5112: + %t86 = load ptr, ptr %a1 + %t87 = load %S.ast.Type, ptr %a75 + %t88 = call i1 @finch.gen.hasDefaults(ptr %t86, %S.ast.Type %t87) + br label %logic.rend5114 +logic.rend5114: + br label %logic.end5113 +logic.end5113: + %t89 = phi i1 [ false, %logic.from5111 ], [ %t88, %logic.rend5114 ] + br i1 %t89, label %then5115, label %endif5117 +then5115: + store { ptr, i64, i64 } zeroinitializer, ptr %a90 + store { ptr, i64, i64 } zeroinitializer, ptr %a91 + %t92 = load ptr, ptr %a1 + %t93 = load ptr, ptr %a1 + %t94 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 3 + %t95 = load { ptr, i64, i64 }, ptr %t94 + %t96 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 2 + %t97 = load { ptr, i64, i64 }, ptr %t96 + %t98 = call i64 @finch.gen.findStruct(ptr %t93, { ptr, i64, i64 } %t95, { ptr, i64, i64 } %t97) + %t99 = load { ptr, i64, i64 }, ptr %a90 + %t100 = load { ptr, i64, i64 }, ptr %a91 + %t101 = load %S.ast.Node, ptr %a2 + %t102 = call %S.gen.Val @finch.gen.construct(ptr %t92, i64 %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t100, %S.ast.Node %t101) + store %S.gen.Val %t102, ptr %a103 + %t104 = load ptr, ptr %a1 + %t105 = load %S.ast.Node, ptr %a2 + %t106 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t107 = load { ptr, i64, i64 }, ptr %t106 + %t108 = load %S.ast.Type, ptr %a75 + %t109 = getelementptr inbounds %S.gen.Val, ptr %a103, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + %t111 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t104, %S.ast.Node %t105, { ptr, i64, i64 } %t107, %S.ast.Type %t108, { ptr, i64, i64 } %t110, i1 false, i1 true) + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + call void @finch.drop.S_gen_Val(ptr %a103) + call void @finch.drop.arr_str(ptr %a91) + call void @finch.drop.arr_S_ast_Node(ptr %a90) + call void @finch.drop.S_ast_Type(ptr %a75) + ret void +endif5117: + %t113 = load ptr, ptr %a1 + %t114 = load %S.ast.Node, ptr %a2 + %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t116 = load { ptr, i64, i64 }, ptr %t115 + %t117 = load %S.ast.Type, ptr %a75 + %t118 = load %S.ast.Type, ptr %a75 + %t119 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t118) + %t120 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t113, %S.ast.Node %t114, { ptr, i64, i64 } %t116, %S.ast.Type %t117, { ptr, i64, i64 } %t119, i1 false, i1 true) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t120, ptr %a122 + call void @finch_str_drop(ptr %a122) + call void @finch.drop.S_ast_Type(ptr %a75) + ret void +endif5110: + %t123 = load ptr, ptr %a1 + %t124 = load ptr, ptr %a1 + %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t126 = load { ptr, i64, i64 }, ptr %t125 + %t127 = extractvalue { ptr, i64, i64 } %t126, 1 + %t128 = icmp uge i64 0, %t127 + br i1 %t128, label %range5118, label %inrange5119 +range5118: + call void @finch_panic_index(ptr @.str.3210, i64 2346, i64 0, i64 %t127) + unreachable +inrange5119: + %t129 = extractvalue { ptr, i64, i64 } %t126, 0 + %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 0 + %t131 = load %S.ast.Node, ptr %t130 + %t132 = load %S.ast.Type, ptr %a75 + %t133 = call %S.gen.Val @finch.gen.exprWant(ptr %t124, %S.ast.Node %t131, %S.ast.Type %t132) + %t134 = load %S.ast.Type, ptr %a75 + %t135 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t136 = load { ptr, i64, i64 }, ptr %t135 + %t137 = extractvalue { ptr, i64, i64 } %t136, 1 + %t138 = icmp uge i64 0, %t137 + br i1 %t138, label %range5120, label %inrange5121 +range5120: + call void @finch_panic_index(ptr @.str.3211, i64 2346, i64 0, i64 %t137) + unreachable +inrange5121: + %t139 = extractvalue { ptr, i64, i64 } %t136, 0 + %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 0 + %t141 = load %S.ast.Node, ptr %t140 + %t142 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t143 = load { ptr, i64, i64 }, ptr %t142 + store { ptr, i64, i64 } { ptr @.str.3212, i64 1, i64 0 }, ptr %a145 + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a144 + store { ptr, i64, i64 } %t147, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.3213, i64 1, i64 0 }, ptr %a150 + call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) + store { ptr, i64, i64 } %t147, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a148 + %t153 = call %S.gen.Val @finch.gen.coerce(ptr %t123, %S.gen.Val %t133, %S.ast.Type %t134, %S.ast.Node %t141, { ptr, i64, i64 } %t152) + store %S.gen.Val %t133, ptr %a154 + call void @finch.drop.S_gen_Val(ptr %a154) + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_drop(ptr %a155) + store %S.gen.Val %t153, ptr %a156 + %t157 = load ptr, ptr %a1 + %t158 = load %S.ast.Node, ptr %a2 + %t159 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + %t161 = load %S.ast.Type, ptr %a75 + %t162 = load ptr, ptr %a1 + %t163 = load %S.gen.Val, ptr %a156 + %t164 = call { ptr, i64, i64 } @finch.gen.own(ptr %t162, %S.gen.Val %t163) + %t165 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t160, %S.ast.Type %t161, { ptr, i64, i64 } %t164, i1 false, i1 true) + store { ptr, i64, i64 } %t164, ptr %a166 + call void @finch_str_drop(ptr %a166) + store { ptr, i64, i64 } %t165, ptr %a167 + call void @finch_str_drop(ptr %a167) + call void @finch.drop.S_gen_Val(ptr %a156) + call void @finch.drop.S_ast_Type(ptr %a75) + ret void +} + +define internal i1 @finch.gen.hasDefaults(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.gen.StructDef, align 16 + %a19 = alloca %S.gen.StructDef, align 16 + %a21 = alloca %S.gen.StructDef, align 16 + %a43 = alloca i64, align 16 + %a51 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic5122, label %ok5123 +panic5122: + call void @finch_panic(ptr @.str.3214, i64 2351, ptr @.str.3215) + unreachable +ok5123: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 + %t6 = load ptr, ptr %a1 + %t7 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t8 = load { ptr, i64, i64 }, ptr %t7 + %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t10 = load { ptr, i64, i64 }, ptr %t9 + %t11 = call i64 @finch.gen.findStruct(ptr %t6, { ptr, i64, i64 } %t8, { ptr, i64, i64 } %t10) + %t12 = load { ptr, i64, i64 }, ptr %t5 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range5124, label %inrange5125 +range5124: + call void @finch_panic_index(ptr @.str.3216, i64 2351, i64 %t11, i64 %t13) + unreachable +inrange5125: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i64 %t11 + %t17 = load %S.gen.StructDef, ptr %t16 + store %S.gen.StructDef %t17, ptr %a18 + call void @finch.copy.S_gen_StructDef(ptr %a19, ptr %a18) + %t20 = load %S.gen.StructDef, ptr %a19 + store %S.gen.StructDef %t20, ptr %a21 + %t22 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 2 + %t23 = load i1, ptr %t22 + br i1 %t23, label %then5126, label %endif5128 +then5126: + call void @finch.drop.S_gen_StructDef(ptr %a21) + ret i1 false +endif5128: + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic5129, label %ok5130 +panic5129: + call void @finch_panic(ptr @.str.3217, i64 2355, ptr @.str.3218) + unreachable +ok5130: + %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 13 + %t28 = load i64, ptr %t27 + %t29 = load { ptr, i64, i64 }, ptr %t26 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range5131, label %inrange5132 +range5131: + call void @finch_panic_index(ptr @.str.3219, i64 2355, i64 %t28, i64 %t30) + unreachable +inrange5132: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 + %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 + %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 14 + %t36 = load i64, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %t34 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range5133, label %inrange5134 +range5133: + call void @finch_panic_index(ptr @.str.3220, i64 2355, i64 %t36, i64 %t38) + unreachable +inrange5134: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i32 0, i32 9 + store i64 0, ptr %a43 + br label %each.cond5135 +each.cond5135: + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = load i64, ptr %a43 + %t47 = icmp slt i64 %t46, %t45 + br i1 %t47, label %each.body5136, label %each.end5138 +each.body5136: + %t48 = load ptr, ptr %t42 + %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46 + %t50 = load %S.ast.Node, ptr %t49 + store %S.ast.Node %t50, ptr %a51 + %t52 = getelementptr inbounds %S.ast.Node, ptr %a51, i32 0, i32 9 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 + %t54 = load i64, ptr %t53 + %t55 = icmp sgt i64 %t54, 0 + br i1 %t55, label %then5139, label %endif5141 +then5139: + call void @finch.drop.S_gen_StructDef(ptr %a21) + ret i1 true +endif5141: + br label %each.step5137 +each.step5137: + %t56 = load i64, ptr %a43 + %t57 = add i64 %t56, 1 + store i64 %t57, ptr %a43 + br label %each.cond5135 +each.end5138: + call void @finch.drop.S_gen_StructDef(ptr %a21) + ret i1 false +} + +define internal void @finch.drop.S_gen_Place(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Place, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Place, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal void @finch.gen.assignStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.ast.Node, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca %S.ast.Node, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca i64, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca %S.gen.Var, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca %S.ast.Type, align 16 + %a105 = alloca i1, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca i64, align 16 + %a122 = alloca %S.ast.Type, align 16 + %a123 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.gen.Var, align 16 + %a127 = alloca %S.ast.Type, align 16 + %a128 = alloca %S.gen.Val, align 16 + %a141 = alloca %S.gen.Val, align 16 + %a152 = alloca %S.gen.Val, align 16 + %a158 = alloca i64, align 16 + %a164 = alloca %S.gen.Place, align 16 + %a179 = alloca %S.gen.Val, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca %S.gen.Val, align 16 + %a237 = alloca i64, align 16 + %a243 = alloca %S.gen.Place, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca %S.ast.Type, align 16 + %a257 = alloca %S.ast.Type, align 16 + %a260 = alloca %S.gen.Val, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca %S.gen.Val, align 16 + %a280 = alloca %S.gen.Val, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t4 = load { ptr, i64, i64 }, ptr %t3 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 0, %t5 + br i1 %t6, label %range5142, label %inrange5143 +range5142: + call void @finch_panic_index(ptr @.str.3221, i64 2364, i64 0, i64 %t5) + unreachable +inrange5143: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 + %t9 = load %S.ast.Node, ptr %t8 + store %S.ast.Node %t9, ptr %a10 + call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) + %t12 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t12, ptr %a13 + %t14 = load %S.ast.Node, ptr %a13 + %t15 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t14) + store { ptr, i64, i64 } %t15, ptr %a16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a16, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = icmp sgt i64 %t18, 0 + br i1 %t19, label %then5144, label %endif5146 +then5144: + %t20 = load ptr, ptr %a1 + %t21 = load { ptr, i64, i64 }, ptr %a16 + %t22 = call i64 @finch.gen.lookup(ptr %t20, { ptr, i64, i64 } %t21) + store i64 %t22, ptr %a23 + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, 0 + br label %logic.from5147 +logic.from5147: + br i1 %t25, label %logic.rhs5148, label %logic.end5149 +logic.rhs5148: + %t26 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.3222, i64 3, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend5150 +logic.rend5150: + br label %logic.end5149 +logic.end5149: + %t32 = phi i1 [ false, %logic.from5147 ], [ %t31, %logic.rend5150 ] + br i1 %t32, label %then5151, label %endif5153 +then5151: + %t33 = load ptr, ptr %a1 + %t34 = load %S.ast.Node, ptr %a2 + %t35 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3223, i64 28, i64 0 }, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.3224, i64 18, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t44, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t44, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.3225, i64 8, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_drop(ptr %a56) + br label %endif5153 +endif5153: + %t57 = load i64, ptr %a23 + %t58 = icmp sge i64 %t57, 0 + br label %logic.from5154 +logic.from5154: + br i1 %t58, label %logic.rhs5155, label %logic.end5156 +logic.rhs5155: + %t59 = load ptr, ptr %a1 + %t60 = load i64, ptr %a23 + %t61 = call %S.gen.Var @finch.gen.varAt(ptr %t59, i64 %t60) + %t62 = extractvalue %S.gen.Var %t61, 3 + store %S.gen.Var %t61, ptr %a63 + call void @finch.drop.S_gen_Var(ptr %a63) + br label %logic.rend5157 +logic.rend5157: + br label %logic.end5156 +logic.end5156: + %t64 = phi i1 [ false, %logic.from5154 ], [ %t62, %logic.rend5157 ] + br i1 %t64, label %then5158, label %endif5160 +then5158: + %t65 = load ptr, ptr %a1 + %t66 = load %S.ast.Node, ptr %a2 + %t67 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3226, i64 19, i64 0 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.3227, i64 18, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.fail(ptr %t65, %S.ast.Node %t66, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a77 + call void @finch_str_drop(ptr %a77) + br label %endif5160 +endif5160: + br label %endif5146 +endif5146: + store { ptr, i64, i64 } { ptr @.str.3228, i64 9, i64 0 }, ptr %a78 + %t79 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3229, i64 3, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %then5161, label %endif5163 +then5161: + %t85 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3230, i64 1, i64 0 }, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.3231, i64 1, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + %t95 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t94, ptr %a78 + store { ptr, i64, i64 } %t95, ptr %a96 + call void @finch_str_drop(ptr %a96) + br label %endif5163 +endif5163: + %t97 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t98 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t98, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.3232, i64 1, i64 0 }, ptr %a100 + %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) + %t102 = icmp ne i32 %t101, 0 + br i1 %t102, label %then5164, label %endif5166 +then5164: + %t103 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3233, i64 4, i64 0 }) + store %S.ast.Type %t103, ptr %a104 + store i1 false, ptr %a105 + %t106 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.3234, i64 3, i64 0 }, ptr %a109 + %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) + %t111 = icmp ne i32 %t110, 0 + br i1 %t111, label %then5167, label %endif5169 +then5167: + %t112 = load ptr, ptr %a1 + %t113 = load { ptr, i64, i64 }, ptr %a16 + %t114 = call i64 @finch.gen.lookup(ptr %t112, { ptr, i64, i64 } %t113) + store i64 %t114, ptr %a115 + %t116 = load i64, ptr %a115 + %t117 = icmp sge i64 %t116, 0 + br i1 %t117, label %then5170, label %endif5172 +then5170: + %t118 = load ptr, ptr %a1 + %t119 = load i64, ptr %a115 + %t120 = call %S.gen.Var @finch.gen.varAt(ptr %t118, i64 %t119) + %t121 = extractvalue %S.gen.Var %t120, 1 + store %S.ast.Type %t121, ptr %a122 + call void @finch.copy.S_ast_Type(ptr %a123, ptr %a122) + %t124 = load %S.ast.Type, ptr %a123 + store %S.gen.Var %t120, ptr %a125 + call void @finch.drop.S_gen_Var(ptr %a125) + %t126 = load %S.ast.Type, ptr %a104 + store %S.ast.Type %t124, ptr %a104 + store %S.ast.Type %t126, ptr %a127 + call void @finch.drop.S_ast_Type(ptr %a127) + store i1 true, ptr %a105 + br label %endif5172 +endif5172: + br label %endif5169 +endif5169: + store %S.gen.Val zeroinitializer, ptr %a128 + %t129 = load i1, ptr %a105 + br i1 %t129, label %then5173, label %else5174 +then5173: + %t130 = load ptr, ptr %a1 + %t131 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t132 = load { ptr, i64, i64 }, ptr %t131 + %t133 = extractvalue { ptr, i64, i64 } %t132, 1 + %t134 = icmp uge i64 1, %t133 + br i1 %t134, label %range5176, label %inrange5177 +range5176: + call void @finch_panic_index(ptr @.str.3235, i64 2392, i64 1, i64 %t133) + unreachable +inrange5177: + %t135 = extractvalue { ptr, i64, i64 } %t132, 0 + %t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 1 + %t137 = load %S.ast.Node, ptr %t136 + %t138 = load %S.ast.Type, ptr %a104 + %t139 = call %S.gen.Val @finch.gen.exprWant(ptr %t130, %S.ast.Node %t137, %S.ast.Type %t138) + %t140 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t139, ptr %a128 + store %S.gen.Val %t140, ptr %a141 + call void @finch.drop.S_gen_Val(ptr %a141) + br label %endif5175 +else5174: + %t142 = load ptr, ptr %a1 + %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t144 = load { ptr, i64, i64 }, ptr %t143 + %t145 = extractvalue { ptr, i64, i64 } %t144, 1 + %t146 = icmp uge i64 1, %t145 + br i1 %t146, label %range5178, label %inrange5179 +range5178: + call void @finch_panic_index(ptr @.str.3236, i64 2394, i64 1, i64 %t145) + unreachable +inrange5179: + %t147 = extractvalue { ptr, i64, i64 } %t144, 0 + %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 1 + %t149 = load %S.ast.Node, ptr %t148 + %t150 = call %S.gen.Val @finch.gen.expr(ptr %t142, %S.ast.Node %t149) + %t151 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t150, ptr %a128 + store %S.gen.Val %t151, ptr %a152 + call void @finch.drop.S_gen_Val(ptr %a152) + br label %endif5175 +endif5175: + %t153 = load ptr, ptr %a1 + %t154 = icmp eq ptr %t153, null + br i1 %t154, label %panic5180, label %ok5181 +panic5180: + call void @finch_panic(ptr @.str.3237, i64 2396, ptr @.str.3238) + unreachable +ok5181: + %t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 11 + %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i32 0, i32 1 + %t157 = load i64, ptr %t156 + store i64 %t157, ptr %a158 + %t159 = load ptr, ptr %a1 + %t160 = load %S.gen.Val, ptr %a128 + call void @finch.gen.hold(ptr %t159, %S.gen.Val %t160) + %t161 = load ptr, ptr %a1 + %t162 = load %S.ast.Node, ptr %a13 + %t163 = call %S.gen.Place @finch.gen.place(ptr %t161, %S.ast.Node %t162, i1 true) + store %S.gen.Place %t163, ptr %a164 + %t165 = load ptr, ptr %a1 + %t166 = load %S.gen.Val, ptr %a128 + %t167 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t168 = load %S.ast.Type, ptr %t167 + %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t170 = load { ptr, i64, i64 }, ptr %t169 + %t171 = extractvalue { ptr, i64, i64 } %t170, 1 + %t172 = icmp uge i64 1, %t171 + br i1 %t172, label %range5182, label %inrange5183 +range5182: + call void @finch_panic_index(ptr @.str.3239, i64 2399, i64 1, i64 %t171) + unreachable +inrange5183: + %t173 = extractvalue { ptr, i64, i64 } %t170, 0 + %t174 = getelementptr inbounds %S.ast.Node, ptr %t173, i64 1 + %t175 = load %S.ast.Node, ptr %t174 + %t176 = load { ptr, i64, i64 }, ptr %a78 + %t177 = call %S.gen.Val @finch.gen.coerce(ptr %t165, %S.gen.Val %t166, %S.ast.Type %t168, %S.ast.Node %t175, { ptr, i64, i64 } %t176) + %t178 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t177, ptr %a128 + store %S.gen.Val %t178, ptr %a179 + call void @finch.drop.S_gen_Val(ptr %a179) + %t180 = load ptr, ptr %a1 + %t181 = load %S.gen.Val, ptr %a128 + %t182 = call { ptr, i64, i64 } @finch.gen.own(ptr %t180, %S.gen.Val %t181) + store { ptr, i64, i64 } %t182, ptr %a183 + %t184 = load ptr, ptr %a1 + %t185 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t186 = load %S.ast.Type, ptr %t185 + %t187 = call i1 @finch.gen.owning(ptr %t184, %S.ast.Type %t186) + br i1 %t187, label %then5184, label %else5185 +then5184: + %t188 = load ptr, ptr %a1 + %t189 = load ptr, ptr %a1 + %t190 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t191 = load %S.ast.Type, ptr %t190 + %t192 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t189, %S.ast.Type %t191) + %t193 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 + %t194 = load { ptr, i64, i64 }, ptr %t193 + %t195 = call { ptr, i64, i64 } @finch.gen.load(ptr %t188, { ptr, i64, i64 } %t192, { ptr, i64, i64 } %t194) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + store { ptr, i64, i64 } %t195, ptr %a197 + %t198 = load ptr, ptr %a1 + %t199 = load ptr, ptr %a1 + %t200 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t201 = load %S.ast.Type, ptr %t200 + %t202 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t199, %S.ast.Type %t201) + %t203 = load { ptr, i64, i64 }, ptr %a183 + %t204 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 + %t205 = load { ptr, i64, i64 }, ptr %t204 + call void @finch.gen.store(ptr %t198, { ptr, i64, i64 } %t202, { ptr, i64, i64 } %t203, { ptr, i64, i64 } %t205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load ptr, ptr %a1 + %t208 = load { ptr, i64, i64 }, ptr %a197 + %t209 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t210 = load %S.ast.Type, ptr %t209 + call void @finch.gen.dropValue(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t210) + call void @finch_str_drop(ptr %a197) + br label %endif5186 +else5185: + %t211 = load ptr, ptr %a1 + %t212 = load ptr, ptr %a1 + %t213 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t214 = load %S.ast.Type, ptr %t213 + %t215 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t212, %S.ast.Type %t214) + %t216 = load { ptr, i64, i64 }, ptr %a183 + %t217 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 + %t218 = load { ptr, i64, i64 }, ptr %t217 + call void @finch.gen.store(ptr %t211, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + br label %endif5186 +endif5186: + %t220 = load ptr, ptr %a1 + %t221 = load i64, ptr %a158 + call void @finch.gen.heldEnd(ptr %t220, i64 %t221) + call void @finch_str_drop(ptr %a183) + call void @finch.drop.S_gen_Place(ptr %a164) + call void @finch.drop.S_gen_Val(ptr %a128) + call void @finch.drop.S_ast_Type(ptr %a104) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a16) + call void @finch.drop.S_ast_Node(ptr %a13) + ret void +endif5166: + %t222 = load ptr, ptr %a1 + %t223 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t224 = load { ptr, i64, i64 }, ptr %t223 + %t225 = extractvalue { ptr, i64, i64 } %t224, 1 + %t226 = icmp uge i64 1, %t225 + br i1 %t226, label %range5187, label %inrange5188 +range5187: + call void @finch_panic_index(ptr @.str.3240, i64 2411, i64 1, i64 %t225) + unreachable +inrange5188: + %t227 = extractvalue { ptr, i64, i64 } %t224, 0 + %t228 = getelementptr inbounds %S.ast.Node, ptr %t227, i64 1 + %t229 = load %S.ast.Node, ptr %t228 + %t230 = call %S.gen.Val @finch.gen.expr(ptr %t222, %S.ast.Node %t229) + store %S.gen.Val %t230, ptr %a231 + %t232 = load ptr, ptr %a1 + %t233 = icmp eq ptr %t232, null + br i1 %t233, label %panic5189, label %ok5190 +panic5189: + call void @finch_panic(ptr @.str.3241, i64 2412, ptr @.str.3242) + unreachable +ok5190: + %t234 = getelementptr inbounds %S.gen.Gen, ptr %t232, i32 0, i32 11 + %t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 + %t236 = load i64, ptr %t235 + store i64 %t236, ptr %a237 + %t238 = load ptr, ptr %a1 + %t239 = load %S.gen.Val, ptr %a231 + call void @finch.gen.hold(ptr %t238, %S.gen.Val %t239) + %t240 = load ptr, ptr %a1 + %t241 = load %S.ast.Node, ptr %a13 + %t242 = call %S.gen.Place @finch.gen.place(ptr %t240, %S.ast.Node %t241, i1 true) + store %S.gen.Place %t242, ptr %a243 + %t244 = load ptr, ptr %a1 + %t245 = load ptr, ptr %a1 + %t246 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t247 = load %S.ast.Type, ptr %t246 + %t248 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t245, %S.ast.Type %t247) + %t249 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 0 + %t250 = load { ptr, i64, i64 }, ptr %t249 + %t251 = call { ptr, i64, i64 } @finch.gen.load(ptr %t244, { ptr, i64, i64 } %t248, { ptr, i64, i64 } %t250) + store { ptr, i64, i64 } %t248, ptr %a252 + call void @finch_str_drop(ptr %a252) + %t253 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t251, 0 + %t254 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t255 = load %S.ast.Type, ptr %t254 + store %S.ast.Type %t255, ptr %a256 + call void @finch.copy.S_ast_Type(ptr %a257, ptr %a256) + %t258 = load %S.ast.Type, ptr %a257 + %t259 = insertvalue %S.gen.Val %t253, %S.ast.Type %t258, 1 + store %S.gen.Val %t259, ptr %a260 + %t261 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t262 = load { ptr, i64, i64 }, ptr %t261 + store { ptr, i64, i64 } %t262, ptr %a263 + call void @finch_str_sub(ptr %a264, ptr %a263, i64 0, i64 1, ptr @.str.3243, i64 2416) + %t265 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t265, ptr %a266 + %t267 = load ptr, ptr %a1 + %t268 = load ptr, ptr %a1 + %t269 = load { ptr, i64, i64 }, ptr %a266 + %t270 = load %S.gen.Val, ptr %a260 + %t271 = load %S.gen.Val, ptr %a231 + %t272 = load %S.ast.Node, ptr %a2 + %t273 = call %S.gen.Val @finch.gen.arith(ptr %t268, { ptr, i64, i64 } %t269, %S.gen.Val %t270, %S.gen.Val %t271, %S.ast.Node %t272) + %t274 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t275 = load %S.ast.Type, ptr %t274 + %t276 = load %S.ast.Node, ptr %a2 + %t277 = load { ptr, i64, i64 }, ptr %a78 + %t278 = call %S.gen.Val @finch.gen.coerce(ptr %t267, %S.gen.Val %t273, %S.ast.Type %t275, %S.ast.Node %t276, { ptr, i64, i64 } %t277) + store %S.gen.Val %t273, ptr %a279 + call void @finch.drop.S_gen_Val(ptr %a279) + store %S.gen.Val %t278, ptr %a280 + %t281 = load ptr, ptr %a1 + %t282 = load %S.gen.Val, ptr %a280 + %t283 = call { ptr, i64, i64 } @finch.gen.own(ptr %t281, %S.gen.Val %t282) + store { ptr, i64, i64 } %t283, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = load ptr, ptr %a1 + %t287 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t288 = load %S.ast.Type, ptr %t287 + %t289 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t286, %S.ast.Type %t288) + %t290 = load { ptr, i64, i64 }, ptr %a284 + %t291 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 0 + %t292 = load { ptr, i64, i64 }, ptr %t291 + call void @finch.gen.store(ptr %t285, { ptr, i64, i64 } %t289, { ptr, i64, i64 } %t290, { ptr, i64, i64 } %t292) + store { ptr, i64, i64 } %t289, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load ptr, ptr %a1 + %t295 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t296 = load %S.ast.Type, ptr %t295 + %t297 = call i1 @finch.gen.owning(ptr %t294, %S.ast.Type %t296) + br i1 %t297, label %then5191, label %endif5193 +then5191: + %t298 = load ptr, ptr %a1 + %t299 = getelementptr inbounds %S.gen.Val, ptr %a260, i32 0, i32 0 + %t300 = load { ptr, i64, i64 }, ptr %t299 + %t301 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t302 = load %S.ast.Type, ptr %t301 + call void @finch.gen.dropValue(ptr %t298, { ptr, i64, i64 } %t300, %S.ast.Type %t302) + br label %endif5193 +endif5193: + %t303 = load ptr, ptr %a1 + %t304 = load i64, ptr %a237 + call void @finch.gen.heldEnd(ptr %t303, i64 %t304) + call void @finch_str_drop(ptr %a284) + call void @finch.drop.S_gen_Val(ptr %a280) + call void @finch_str_drop(ptr %a266) + call void @finch.drop.S_gen_Val(ptr %a260) + call void @finch.drop.S_gen_Place(ptr %a243) + call void @finch.drop.S_gen_Val(ptr %a231) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a16) + call void @finch.drop.S_ast_Node(ptr %a13) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.condition(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Node, ptr %a2 + %t6 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t5) + %t7 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3244, i64 4, i64 0 }) + %t8 = load %S.ast.Node, ptr %a2 + %t9 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t6, %S.ast.Type %t7, %S.ast.Node %t8, { ptr, i64, i64 } { ptr @.str.3245, i64 11, i64 0 }) + store %S.gen.Val %t6, ptr %a10 + call void @finch.drop.S_gen_Val(ptr %a10) + store %S.ast.Type %t7, ptr %a11 + call void @finch.drop.S_ast_Type(ptr %a11) + %t12 = extractvalue %S.gen.Val %t9, 0 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store %S.gen.Val %t9, ptr %a16 + call void @finch.drop.S_gen_Val(ptr %a16) + ret { ptr, i64, i64 } %t15 +} + +define internal void @finch.gen.ifStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i1, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t5 = load { ptr, i64, i64 }, ptr %t4 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 0, %t6 + br i1 %t7, label %range5194, label %inrange5195 +range5194: + call void @finch_panic_index(ptr @.str.3246, i64 2431, i64 0, i64 %t6) + unreachable +inrange5195: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 + %t10 = load %S.ast.Node, ptr %t9 + %t11 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t3, %S.ast.Node %t10) + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t13, { ptr, i64, i64 } { ptr @.str.3247, i64 4, i64 0 }) + store { ptr, i64, i64 } %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t16, { ptr, i64, i64 } { ptr @.str.3248, i64 4, i64 0 }) + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load ptr, ptr %a1 + %t20 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t19, { ptr, i64, i64 } { ptr @.str.3249, i64 5, i64 0 }) + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = icmp sgt i64 %t24, 2 + br i1 %t25, label %then5196, label %else5197 +then5196: + %t26 = load ptr, ptr %a1 + %t27 = load { ptr, i64, i64 }, ptr %a12 + %t28 = load { ptr, i64, i64 }, ptr %a15 + %t29 = load { ptr, i64, i64 }, ptr %a18 + call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t27, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29) + br label %endif5198 +else5197: + %t30 = load ptr, ptr %a1 + %t31 = load { ptr, i64, i64 }, ptr %a12 + %t32 = load { ptr, i64, i64 }, ptr %a15 + %t33 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.condBr(ptr %t30, { ptr, i64, i64 } %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33) + br label %endif5198 +endif5198: + %t34 = load ptr, ptr %a1 + %t35 = load { ptr, i64, i64 }, ptr %a15 + call void @finch.gen.label(ptr %t34, { ptr, i64, i64 } %t35) + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 1, %t39 + br i1 %t40, label %range5199, label %inrange5200 +range5199: + call void @finch_panic_index(ptr @.str.3250, i64 2441, i64 1, i64 %t39) + unreachable +inrange5200: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 1 + %t43 = load %S.ast.Node, ptr %t42 + call void @finch.gen.block(ptr %t36, %S.ast.Node %t43, i1 true) + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic5201, label %ok5202 +panic5201: + call void @finch_panic(ptr @.str.3251, i64 2442, ptr @.str.3252) + unreachable +ok5202: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 9 + %t47 = load i1, ptr %t46 + %t48 = xor i1 %t47, true + store i1 %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.br(ptr %t50, { ptr, i64, i64 } %t51) + %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 + %t54 = load i64, ptr %t53 + %t55 = icmp sgt i64 %t54, 2 + br i1 %t55, label %then5203, label %else5204 +then5203: + %t56 = load ptr, ptr %a1 + %t57 = load { ptr, i64, i64 }, ptr %a18 + call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = extractvalue { ptr, i64, i64 } %t60, 1 + %t62 = icmp uge i64 2, %t61 + br i1 %t62, label %range5206, label %inrange5207 +range5206: + call void @finch_panic_index(ptr @.str.3253, i64 2446, i64 2, i64 %t61) + unreachable +inrange5207: + %t63 = extractvalue { ptr, i64, i64 } %t60, 0 + %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 2 + %t65 = load %S.ast.Node, ptr %t64 + call void @finch.gen.stmt(ptr %t58, %S.ast.Node %t65) + %t66 = load i1, ptr %a49 + br label %logic.from5208 +logic.from5208: + br i1 %t66, label %logic.end5210, label %logic.rhs5209 +logic.rhs5209: + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic5211, label %ok5212 +panic5211: + call void @finch_panic(ptr @.str.3254, i64 2447, ptr @.str.3255) + unreachable +ok5212: + %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 9 + %t70 = load i1, ptr %t69 + %t71 = xor i1 %t70, true + br label %logic.rend5213 +logic.rend5213: + br label %logic.end5210 +logic.end5210: + %t72 = phi i1 [ true, %logic.from5208 ], [ %t71, %logic.rend5213 ] + store i1 %t72, ptr %a49 + %t73 = load ptr, ptr %a1 + %t74 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.br(ptr %t73, { ptr, i64, i64 } %t74) + br label %endif5205 +else5204: + store i1 true, ptr %a49 + br label %endif5205 +endif5205: + %t75 = load i1, ptr %a49 + br i1 %t75, label %then5214, label %endif5216 +then5214: + %t76 = load ptr, ptr %a1 + %t77 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.label(ptr %t76, { ptr, i64, i64 } %t77) + br label %endif5216 +endif5216: + call void @finch_str_drop(ptr %a21) + call void @finch_str_drop(ptr %a18) + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a12) + ret void +} + +define internal void @finch.gen.whileStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca i1, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca i1, align 16 + %a118 = alloca %S.gen.Loop, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t3, { ptr, i64, i64 } { ptr @.str.3256, i64 10, i64 0 }) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t6, { ptr, i64, i64 } { ptr @.str.3257, i64 10, i64 0 }) + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t9, { ptr, i64, i64 } { ptr @.str.3258, i64 9, i64 0 }) + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.br(ptr %t12, { ptr, i64, i64 } %t13) + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.label(ptr %t14, { ptr, i64, i64 } %t15) + %t16 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 0, %t18 + br i1 %t19, label %range5217, label %inrange5218 +range5217: + call void @finch_panic_index(ptr @.str.3259, i64 2463, i64 0, i64 %t18) + unreachable +inrange5218: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.ast.Node, ptr %t20, i64 0 + %t22 = getelementptr inbounds %S.ast.Node, ptr %t21, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.3260, i64 4, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from5219 +logic.from5219: + br i1 %t27, label %logic.rhs5220, label %logic.end5221 +logic.rhs5220: + %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t29 = load { ptr, i64, i64 }, ptr %t28 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 0, %t30 + br i1 %t31, label %range5222, label %inrange5223 +range5222: + call void @finch_panic_index(ptr @.str.3261, i64 2463, i64 0, i64 %t30) + unreachable +inrange5223: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i64 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i32 0, i32 4 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.3262, i64 4, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.rend5224 +logic.rend5224: + br label %logic.end5221 +logic.end5221: + %t40 = phi i1 [ false, %logic.from5219 ], [ %t39, %logic.rend5224 ] + store i1 %t40, ptr %a41 + %t42 = load ptr, ptr %a1 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 0, %t45 + br i1 %t46, label %range5225, label %inrange5226 +range5225: + call void @finch_panic_index(ptr @.str.3263, i64 2464, i64 0, i64 %t45) + unreachable +inrange5226: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 + %t49 = load %S.ast.Node, ptr %t48 + %t50 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t42, %S.ast.Node %t49) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load i1, ptr %a41 + br i1 %t52, label %then5227, label %else5228 +then5227: + %t53 = load ptr, ptr %a1 + %t54 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.br(ptr %t53, { ptr, i64, i64 } %t54) + br label %endif5229 +else5228: + %t55 = load ptr, ptr %a1 + %t56 = load { ptr, i64, i64 }, ptr %a51 + %t57 = load { ptr, i64, i64 }, ptr %a8 + %t58 = load { ptr, i64, i64 }, ptr %a11 + call void @finch.gen.condBr(ptr %t55, { ptr, i64, i64 } %t56, { ptr, i64, i64 } %t57, { ptr, i64, i64 } %t58) + br label %endif5229 +endif5229: + %t59 = load ptr, ptr %a1 + %t60 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.label(ptr %t59, { ptr, i64, i64 } %t60) + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic5230, label %ok5231 +panic5230: + call void @finch_panic(ptr @.str.3264, i64 2471, ptr @.str.3265) + unreachable +ok5231: + %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 12 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + %t65 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_copy(ptr %a67, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + %t69 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t68, 0 + %t70 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_copy(ptr %a72, ptr %a71) + %t73 = load { ptr, i64, i64 }, ptr %a72 + %t74 = insertvalue %S.gen.Loop %t69, { ptr, i64, i64 } %t73, 1 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic5232, label %ok5233 +panic5232: + call void @finch_panic(ptr @.str.3266, i64 2471, ptr @.str.3267) + unreachable +ok5233: + %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 10 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 + %t79 = load i64, ptr %t78 + %t80 = insertvalue %S.gen.Loop %t74, i64 %t79, 2 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic5234, label %ok5235 +panic5234: + call void @finch_panic(ptr @.str.3268, i64 2471, ptr @.str.3269) + unreachable +ok5235: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 11 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 + %t85 = load i64, ptr %t84 + %t86 = insertvalue %S.gen.Loop %t80, i64 %t85, 3 + %t87 = load i64, ptr %t64 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %t63, i64 %t88, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %t63 + %t90 = getelementptr inbounds %S.gen.Loop, ptr %t89, i64 %t87 + store %S.gen.Loop %t86, ptr %t90 + store i64 %t88, ptr %t64 + %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t92 = load { ptr, i64, i64 }, ptr %t91 + %t93 = extractvalue { ptr, i64, i64 } %t92, 1 + %t94 = icmp uge i64 1, %t93 + br i1 %t94, label %range5236, label %inrange5237 +range5236: + call void @finch_panic_index(ptr @.str.3270, i64 2472, i64 1, i64 %t93) + unreachable +inrange5237: + %t95 = extractvalue { ptr, i64, i64 } %t92, 0 + %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 1 + %t97 = load %S.ast.Node, ptr %t96 + %t98 = call i1 @finch.gen.countBreaks(%S.ast.Node %t97) + store i1 %t98, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t102 = load { ptr, i64, i64 }, ptr %t101 + %t103 = extractvalue { ptr, i64, i64 } %t102, 1 + %t104 = icmp uge i64 1, %t103 + br i1 %t104, label %range5238, label %inrange5239 +range5238: + call void @finch_panic_index(ptr @.str.3271, i64 2473, i64 1, i64 %t103) + unreachable +inrange5239: + %t105 = extractvalue { ptr, i64, i64 } %t102, 0 + %t106 = getelementptr inbounds %S.ast.Node, ptr %t105, i64 1 + %t107 = load %S.ast.Node, ptr %t106 + call void @finch.gen.block(ptr %t100, %S.ast.Node %t107, i1 true) + %t108 = load ptr, ptr %a1 + %t109 = icmp eq ptr %t108, null + br i1 %t109, label %panic5240, label %ok5241 +panic5240: + call void @finch_panic(ptr @.str.3272, i64 2474, ptr @.str.3273) + unreachable +ok5241: + %t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 12 + %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1 + %t112 = load i64, ptr %t111 + %t113 = icmp eq i64 %t112, 0 + br i1 %t113, label %panic5242, label %ok5243 +panic5242: + call void @finch_panic(ptr @.str.3274, i64 2474, ptr @.str.3275) + unreachable +ok5243: + %t114 = sub i64 %t112, 1 + %t115 = load ptr, ptr %t110 + %t116 = getelementptr inbounds %S.gen.Loop, ptr %t115, i64 %t114 + %t117 = load %S.gen.Loop, ptr %t116 + store i64 %t114, ptr %t111 + store %S.gen.Loop %t117, ptr %a118 + call void @finch.drop.S_gen_Loop(ptr %a118) + %t119 = load ptr, ptr %a1 + %t120 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.br(ptr %t119, { ptr, i64, i64 } %t120) + %t121 = load i1, ptr %a41 + %t122 = xor i1 %t121, true + br label %logic.from5244 +logic.from5244: + br i1 %t122, label %logic.end5246, label %logic.rhs5245 +logic.rhs5245: + %t123 = load i1, ptr %a99 + br label %logic.rend5247 +logic.rend5247: + br label %logic.end5246 +logic.end5246: + %t124 = phi i1 [ true, %logic.from5244 ], [ %t123, %logic.rend5247 ] + br i1 %t124, label %then5248, label %endif5250 +then5248: + %t125 = load ptr, ptr %a1 + %t126 = load { ptr, i64, i64 }, ptr %a11 + call void @finch.gen.label(ptr %t125, { ptr, i64, i64 } %t126) + br label %endif5250 +endif5250: + call void @finch_str_drop(ptr %a51) + call void @finch_str_drop(ptr %a11) + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a5) + ret void +} + +define internal i1 @finch.gen.countBreaks(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca i64, align 16 + %a37 = alloca %S.ast.Node, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.3276, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then5251, label %endif5253 +then5251: + ret i1 true +endif5253: + %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.3277, i64 5, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from5254 +logic.from5254: + br i1 %t13, label %logic.end5256, label %logic.rhs5255 +logic.rhs5255: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3278, i64 3, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br label %logic.rend5257 +logic.rend5257: + br label %logic.end5256 +logic.end5256: + %t20 = phi i1 [ true, %logic.from5254 ], [ %t19, %logic.rend5257 ] + br label %logic.from5258 +logic.from5258: + br i1 %t20, label %logic.end5260, label %logic.rhs5259 +logic.rhs5259: + %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.3279, i64 4, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br label %logic.rend5261 +logic.rend5261: + br label %logic.end5260 +logic.end5260: + %t27 = phi i1 [ true, %logic.from5258 ], [ %t26, %logic.rend5261 ] + br i1 %t27, label %then5262, label %endif5264 +then5262: + ret i1 false +endif5264: + %t28 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 + store i64 0, ptr %a29 + br label %each.cond5265 +each.cond5265: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = load i64, ptr %a29 + %t33 = icmp slt i64 %t32, %t31 + br i1 %t33, label %each.body5266, label %each.end5268 +each.body5266: + %t34 = load ptr, ptr %t28 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 + %t36 = load %S.ast.Node, ptr %t35 + store %S.ast.Node %t36, ptr %a37 + %t38 = load %S.ast.Node, ptr %a37 + %t39 = call i1 @finch.gen.countBreaks(%S.ast.Node %t38) + br i1 %t39, label %then5269, label %endif5271 +then5269: + ret i1 true +endif5271: + br label %each.step5267 +each.step5267: + %t40 = load i64, ptr %a29 + %t41 = add i64 %t40, 1 + store i64 %t41, ptr %a29 + br label %each.cond5265 +each.end5268: + ret i1 false +} + +define internal void @finch.gen.forStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a22 = alloca %S.gen.Val, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca %S.gen.Val, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.gen.Val, align 16 + %a50 = alloca %S.ast.Type, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca %S.gen.Val, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca %S.ast.Type, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca %S.gen.Loop, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range5272, label %inrange5273 +range5272: + call void @finch_panic_index(ptr @.str.3280, i64 2498, i64 0, i64 %t7) + unreachable +inrange5273: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) + %t13 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3281, i64 3, i64 0 }) + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t15 = load { ptr, i64, i64 }, ptr %t14 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 0, %t16 + br i1 %t17, label %range5274, label %inrange5275 +range5274: + call void @finch_panic_index(ptr @.str.3282, i64 2498, i64 0, i64 %t16) + unreachable +inrange5275: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 + %t20 = load %S.ast.Node, ptr %t19 + %t21 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t12, %S.ast.Type %t13, %S.ast.Node %t20, { ptr, i64, i64 } { ptr @.str.3283, i64 20, i64 0 }) + store %S.gen.Val %t12, ptr %a22 + call void @finch.drop.S_gen_Val(ptr %a22) + store %S.ast.Type %t13, ptr %a23 + call void @finch.drop.S_ast_Type(ptr %a23) + %t24 = extractvalue %S.gen.Val %t21, 0 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store %S.gen.Val %t21, ptr %a28 + call void @finch.drop.S_gen_Val(ptr %a28) + store { ptr, i64, i64 } %t27, ptr %a29 + %t30 = load ptr, ptr %a1 + %t31 = load ptr, ptr %a1 + %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t33 = load { ptr, i64, i64 }, ptr %t32 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 1, %t34 + br i1 %t35, label %range5276, label %inrange5277 +range5276: + call void @finch_panic_index(ptr @.str.3284, i64 2499, i64 1, i64 %t34) + unreachable +inrange5277: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 1 + %t38 = load %S.ast.Node, ptr %t37 + %t39 = call %S.gen.Val @finch.gen.expr(ptr %t31, %S.ast.Node %t38) + %t40 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3285, i64 3, i64 0 }) + %t41 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t42 = load { ptr, i64, i64 }, ptr %t41 + %t43 = extractvalue { ptr, i64, i64 } %t42, 1 + %t44 = icmp uge i64 1, %t43 + br i1 %t44, label %range5278, label %inrange5279 +range5278: + call void @finch_panic_index(ptr @.str.3286, i64 2499, i64 1, i64 %t43) + unreachable +inrange5279: + %t45 = extractvalue { ptr, i64, i64 } %t42, 0 + %t46 = getelementptr inbounds %S.ast.Node, ptr %t45, i64 1 + %t47 = load %S.ast.Node, ptr %t46 + %t48 = call %S.gen.Val @finch.gen.coerce(ptr %t30, %S.gen.Val %t39, %S.ast.Type %t40, %S.ast.Node %t47, { ptr, i64, i64 } { ptr @.str.3287, i64 18, i64 0 }) + store %S.gen.Val %t39, ptr %a49 + call void @finch.drop.S_gen_Val(ptr %a49) + store %S.ast.Type %t40, ptr %a50 + call void @finch.drop.S_ast_Type(ptr %a50) + %t51 = extractvalue %S.gen.Val %t48, 0 + store { ptr, i64, i64 } %t51, ptr %a52 + call void @finch_str_copy(ptr %a53, ptr %a52) + %t54 = load { ptr, i64, i64 }, ptr %a53 + store %S.gen.Val %t48, ptr %a55 + call void @finch.drop.S_gen_Val(ptr %a55) + store { ptr, i64, i64 } %t54, ptr %a56 + %t57 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t57) + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Node, ptr %a2 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3288, i64 3, i64 0 }) + %t63 = load { ptr, i64, i64 }, ptr %a29 + %t64 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t58, %S.ast.Node %t59, { ptr, i64, i64 } %t61, %S.ast.Type %t62, { ptr, i64, i64 } %t63, i1 true, i1 false) + store %S.ast.Type %t62, ptr %a65 + call void @finch.drop.S_ast_Type(ptr %a65) + store { ptr, i64, i64 } %t64, ptr %a66 + %t67 = load ptr, ptr %a1 + %t68 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t67, { ptr, i64, i64 } { ptr @.str.3289, i64 8, i64 0 }) + store { ptr, i64, i64 } %t68, ptr %a69 + %t70 = load ptr, ptr %a1 + %t71 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t70, { ptr, i64, i64 } { ptr @.str.3290, i64 8, i64 0 }) + store { ptr, i64, i64 } %t71, ptr %a72 + %t73 = load ptr, ptr %a1 + %t74 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t73, { ptr, i64, i64 } { ptr @.str.3291, i64 8, i64 0 }) + store { ptr, i64, i64 } %t74, ptr %a75 + %t76 = load ptr, ptr %a1 + %t77 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t76, { ptr, i64, i64 } { ptr @.str.3292, i64 7, i64 0 }) + store { ptr, i64, i64 } %t77, ptr %a78 + %t79 = load ptr, ptr %a1 + %t80 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.br(ptr %t79, { ptr, i64, i64 } %t80) + %t81 = load ptr, ptr %a1 + %t82 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.label(ptr %t81, { ptr, i64, i64 } %t82) + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a66 + %t85 = call { ptr, i64, i64 } @finch.gen.load(ptr %t83, { ptr, i64, i64 } { ptr @.str.3293, i64 3, i64 0 }, { ptr, i64, i64 } %t84) + store { ptr, i64, i64 } %t85, ptr %a86 + %t87 = load ptr, ptr %a1 + %t88 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.3294, i64 13, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.3295, i64 2, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t97, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + %t104 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t103, ptr %a105 + call void @finch_str_drop(ptr %a105) + store { ptr, i64, i64 } %t104, ptr %a106 + %t107 = load ptr, ptr %a1 + %t108 = load { ptr, i64, i64 }, ptr %a106 + %t109 = load { ptr, i64, i64 }, ptr %a72 + %t110 = load { ptr, i64, i64 }, ptr %a78 + call void @finch.gen.condBr(ptr %t107, { ptr, i64, i64 } %t108, { ptr, i64, i64 } %t109, { ptr, i64, i64 } %t110) + %t111 = load ptr, ptr %a1 + %t112 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.label(ptr %t111, { ptr, i64, i64 } %t112) + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic5280, label %ok5281 +panic5280: + call void @finch_panic(ptr @.str.3296, i64 2512, ptr @.str.3297) + unreachable +ok5281: + %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 12 + %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i32 0, i32 1 + %t117 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_copy(ptr %a119, ptr %a118) + %t120 = load { ptr, i64, i64 }, ptr %a119 + %t121 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t120, 0 + %t122 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t122, ptr %a123 + call void @finch_str_copy(ptr %a124, ptr %a123) + %t125 = load { ptr, i64, i64 }, ptr %a124 + %t126 = insertvalue %S.gen.Loop %t121, { ptr, i64, i64 } %t125, 1 + %t127 = load ptr, ptr %a1 + %t128 = icmp eq ptr %t127, null + br i1 %t128, label %panic5282, label %ok5283 +panic5282: + call void @finch_panic(ptr @.str.3298, i64 2512, ptr @.str.3299) + unreachable +ok5283: + %t129 = getelementptr inbounds %S.gen.Gen, ptr %t127, i32 0, i32 10 + %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i32 0, i32 1 + %t131 = load i64, ptr %t130 + %t132 = insertvalue %S.gen.Loop %t126, i64 %t131, 2 + %t133 = load ptr, ptr %a1 + %t134 = icmp eq ptr %t133, null + br i1 %t134, label %panic5284, label %ok5285 +panic5284: + call void @finch_panic(ptr @.str.3300, i64 2512, ptr @.str.3301) + unreachable +ok5285: + %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 11 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 + %t137 = load i64, ptr %t136 + %t138 = insertvalue %S.gen.Loop %t132, i64 %t137, 3 + %t139 = load i64, ptr %t116 + %t140 = add i64 %t139, 1 + call void @finch_arr_reserve(ptr %t115, i64 %t140, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t141 = load ptr, ptr %t115 + %t142 = getelementptr inbounds %S.gen.Loop, ptr %t141, i64 %t139 + store %S.gen.Loop %t138, ptr %t142 + store i64 %t140, ptr %t116 + %t143 = load ptr, ptr %a1 + %t144 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t145 = load { ptr, i64, i64 }, ptr %t144 + %t146 = extractvalue { ptr, i64, i64 } %t145, 1 + %t147 = icmp uge i64 2, %t146 + br i1 %t147, label %range5286, label %inrange5287 +range5286: + call void @finch_panic_index(ptr @.str.3302, i64 2513, i64 2, i64 %t146) + unreachable +inrange5287: + %t148 = extractvalue { ptr, i64, i64 } %t145, 0 + %t149 = getelementptr inbounds %S.ast.Node, ptr %t148, i64 2 + %t150 = load %S.ast.Node, ptr %t149 + call void @finch.gen.block(ptr %t143, %S.ast.Node %t150, i1 true) + %t151 = load ptr, ptr %a1 + %t152 = icmp eq ptr %t151, null + br i1 %t152, label %panic5288, label %ok5289 +panic5288: + call void @finch_panic(ptr @.str.3303, i64 2514, ptr @.str.3304) + unreachable +ok5289: + %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 12 + %t154 = getelementptr inbounds { ptr, i64, i64 }, ptr %t153, i32 0, i32 1 + %t155 = load i64, ptr %t154 + %t156 = icmp eq i64 %t155, 0 + br i1 %t156, label %panic5290, label %ok5291 +panic5290: + call void @finch_panic(ptr @.str.3305, i64 2514, ptr @.str.3306) + unreachable +ok5291: + %t157 = sub i64 %t155, 1 + %t158 = load ptr, ptr %t153 + %t159 = getelementptr inbounds %S.gen.Loop, ptr %t158, i64 %t157 + %t160 = load %S.gen.Loop, ptr %t159 + store i64 %t157, ptr %t154 + store %S.gen.Loop %t160, ptr %a161 + call void @finch.drop.S_gen_Loop(ptr %a161) + %t162 = load ptr, ptr %a1 + %t163 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.gen.br(ptr %t162, { ptr, i64, i64 } %t163) + %t164 = load ptr, ptr %a1 + %t165 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.gen.label(ptr %t164, { ptr, i64, i64 } %t165) + %t166 = load ptr, ptr %a1 + %t167 = load { ptr, i64, i64 }, ptr %a66 + %t168 = call { ptr, i64, i64 } @finch.gen.load(ptr %t166, { ptr, i64, i64 } { ptr @.str.3307, i64 3, i64 0 }, { ptr, i64, i64 } %t167) + store { ptr, i64, i64 } %t168, ptr %a169 + %t170 = load ptr, ptr %a1 + %t171 = load ptr, ptr %a1 + %t172 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.3309, i64 8, i64 0 }, ptr %a174 + store { ptr, i64, i64 } %t172, ptr %a175 + call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a173 + store { ptr, i64, i64 } %t176, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.3310, i64 3, i64 0 }, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t176, ptr %a180 + call void @finch_str_drop(ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a177 + %t182 = call { ptr, i64, i64 } @finch.gen.op(ptr %t171, { ptr, i64, i64 } %t181) + store { ptr, i64, i64 } %t181, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a66 + call void @finch.gen.store(ptr %t170, { ptr, i64, i64 } { ptr @.str.3308, i64 3, i64 0 }, { ptr, i64, i64 } %t182, { ptr, i64, i64 } %t184) + store { ptr, i64, i64 } %t182, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load ptr, ptr %a1 + %t187 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.br(ptr %t186, { ptr, i64, i64 } %t187) + %t188 = load ptr, ptr %a1 + %t189 = load { ptr, i64, i64 }, ptr %a78 + call void @finch.gen.label(ptr %t188, { ptr, i64, i64 } %t189) + %t190 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t190) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a106) + call void @finch_str_drop(ptr %a86) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a72) + call void @finch_str_drop(ptr %a69) + call void @finch_str_drop(ptr %a66) + call void @finch_str_drop(ptr %a56) + call void @finch_str_drop(ptr %a29) + ret void +} + +define internal void @finch.gen.eachMap(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca i1, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a14 = alloca %S.ast.Type, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a24 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.ast.Type, align 16 + %a27 = alloca %S.ast.Type, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i1, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca %S.gen.Loop, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 0, %t8 + br i1 %t9, label %range5292, label %inrange5293 +range5292: + call void @finch_panic_index(ptr @.str.3311, i64 2526, i64 0, i64 %t8) + unreachable +inrange5293: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 + %t12 = load %S.ast.Type, ptr %t11 + store %S.ast.Type %t12, ptr %a13 + call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) + %t15 = load %S.ast.Type, ptr %a14 + store %S.ast.Type %t15, ptr %a16 + %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 1, %t19 + br i1 %t20, label %range5294, label %inrange5295 +range5294: + call void @finch_panic_index(ptr @.str.3312, i64 2527, i64 1, i64 %t19) + unreachable +inrange5295: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 + %t23 = load %S.ast.Type, ptr %t22 + store %S.ast.Type %t23, ptr %a24 + call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) + %t26 = load %S.ast.Type, ptr %a25 + store %S.ast.Type %t26, ptr %a27 + %t28 = load i1, ptr %a5 + br label %logic.from5296 +logic.from5296: + br i1 %t28, label %logic.rhs5297, label %logic.end5298 +logic.rhs5297: + %t29 = load ptr, ptr %a1 + %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t31 = load { ptr, i64, i64 }, ptr %t30 + %t32 = extractvalue { ptr, i64, i64 } %t31, 1 + %t33 = icmp uge i64 0, %t32 + br i1 %t33, label %range5299, label %inrange5300 +range5299: + call void @finch_panic_index(ptr @.str.3313, i64 2528, i64 0, i64 %t32) + unreachable +inrange5300: + %t34 = extractvalue { ptr, i64, i64 } %t31, 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 0 + %t36 = load %S.ast.Node, ptr %t35 + %t37 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t36) + %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t39 = load { ptr, i64, i64 }, ptr %t38 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 1, %t40 + br i1 %t41, label %range5301, label %inrange5302 +range5301: + call void @finch_panic_index(ptr @.str.3314, i64 2528, i64 1, i64 %t40) + unreachable +inrange5302: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 1 + %t44 = load %S.ast.Node, ptr %t43 + %t45 = call i1 @finch.gen.mutates(ptr %t29, { ptr, i64, i64 } %t37, %S.ast.Node %t44) + store { ptr, i64, i64 } %t37, ptr %a46 + call void @finch_str_drop(ptr %a46) + br label %logic.rend5303 +logic.rend5303: + br label %logic.end5298 +logic.end5298: + %t47 = phi i1 [ false, %logic.from5296 ], [ %t45, %logic.rend5303 ] + store i1 %t47, ptr %a48 + %t49 = load ptr, ptr %a1 + %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.3315, i64 3, i64 0 }) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.3316, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3317, i64 1, i64 0 }, { ptr, i64, i64 } %t53) + store { ptr, i64, i64 } { ptr @.str.3318, i64 0, i64 0 }, ptr %a54 + %t55 = load i1, ptr %a5 + br i1 %t55, label %then5304, label %endif5306 +then5304: + %t56 = load ptr, ptr %a1 + %t57 = load ptr, ptr %a1 + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Type, ptr %a4 + %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) + store { ptr, i64, i64 } { ptr @.str.3320, i64 23, i64 0 }, ptr %a62 + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t65, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.3321, i64 6, i64 0 }, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t65, ptr %a69 + call void @finch_str_drop(ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a66 + %t71 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t70, ptr %a73 + store { ptr, i64, i64 } %t71, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + store { ptr, i64, i64 } %t76, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.3322, i64 14, i64 0 }, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + store { ptr, i64, i64 } %t76, ptr %a80 + call void @finch_str_drop(ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a77 + %t82 = call { ptr, i64, i64 } @finch.gen.op(ptr %t57, { ptr, i64, i64 } %t81) + store { ptr, i64, i64 } %t81, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = call { ptr, i64, i64 } @finch.gen.load(ptr %t56, { ptr, i64, i64 } { ptr @.str.3319, i64 3, i64 0 }, { ptr, i64, i64 } %t82) + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t84, ptr %a54 + store { ptr, i64, i64 } %t86, ptr %a87 + call void @finch_str_drop(ptr %a87) + br label %endif5306 +endif5306: + %t88 = load ptr, ptr %a1 + %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3323, i64 8, i64 0 }) + store { ptr, i64, i64 } %t89, ptr %a90 + %t91 = load ptr, ptr %a1 + %t92 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t91, { ptr, i64, i64 } { ptr @.str.3324, i64 9, i64 0 }) + store { ptr, i64, i64 } %t92, ptr %a93 + %t94 = load ptr, ptr %a1 + %t95 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t94, { ptr, i64, i64 } { ptr @.str.3325, i64 8, i64 0 }) + store { ptr, i64, i64 } %t95, ptr %a96 + %t97 = load ptr, ptr %a1 + %t98 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t97, { ptr, i64, i64 } { ptr @.str.3326, i64 8, i64 0 }) + store { ptr, i64, i64 } %t98, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t100, { ptr, i64, i64 } { ptr @.str.3327, i64 7, i64 0 }) + store { ptr, i64, i64 } %t101, ptr %a102 + %t103 = load ptr, ptr %a1 + %t104 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) + %t105 = load ptr, ptr %a1 + %t106 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) + %t107 = load i1, ptr %a5 + br label %logic.from5307 +logic.from5307: + br i1 %t107, label %logic.rhs5308, label %logic.end5309 +logic.rhs5308: + %t108 = load i1, ptr %a48 + br label %logic.rend5310 +logic.rend5310: + br label %logic.end5309 +logic.end5309: + %t109 = phi i1 [ false, %logic.from5307 ], [ %t108, %logic.rend5310 ] + br i1 %t109, label %then5311, label %endif5313 +then5311: + %t110 = load ptr, ptr %a1 + %t111 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t110, { ptr, i64, i64 } { ptr @.str.3328, i64 11, i64 0 }) + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load ptr, ptr %a1 + %t114 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t113, { ptr, i64, i64 } { ptr @.str.3329, i64 8, i64 0 }) + store { ptr, i64, i64 } %t114, ptr %a115 + %t116 = load ptr, ptr %a1 + %t117 = load ptr, ptr %a1 + %t118 = load ptr, ptr %a1 + %t119 = load %S.ast.Type, ptr %a4 + %t120 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t118, %S.ast.Type %t119) + store { ptr, i64, i64 } { ptr @.str.3331, i64 23, i64 0 }, ptr %a122 + store { ptr, i64, i64 } %t120, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t120, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + store { ptr, i64, i64 } %t125, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.3332, i64 6, i64 0 }, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t125, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t130, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.3333, i64 14, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = call { ptr, i64, i64 } @finch.gen.op(ptr %t117, { ptr, i64, i64 } %t141) + store { ptr, i64, i64 } %t141, ptr %a143 + call void @finch_str_drop(ptr %a143) + %t144 = call { ptr, i64, i64 } @finch.gen.load(ptr %t116, { ptr, i64, i64 } { ptr @.str.3330, i64 3, i64 0 }, { ptr, i64, i64 } %t142) + store { ptr, i64, i64 } %t142, ptr %a145 + call void @finch_str_drop(ptr %a145) + store { ptr, i64, i64 } %t144, ptr %a146 + %t147 = load ptr, ptr %a1 + %t148 = load ptr, ptr %a1 + %t149 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } { ptr @.str.3334, i64 12, i64 0 }, ptr %a151 + store { ptr, i64, i64 } %t149, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + %t153 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t153, ptr %a155 + store { ptr, i64, i64 } { ptr @.str.3335, i64 2, i64 0 }, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + store { ptr, i64, i64 } %t153, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a154 + %t159 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t158, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + store { ptr, i64, i64 } %t158, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a160 + %t165 = call { ptr, i64, i64 } @finch.gen.op(ptr %t148, { ptr, i64, i64 } %t164) + store { ptr, i64, i64 } %t164, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a112 + %t168 = load { ptr, i64, i64 }, ptr %a115 + call void @finch.gen.condBr(ptr %t147, { ptr, i64, i64 } %t165, { ptr, i64, i64 } %t167, { ptr, i64, i64 } %t168) + store { ptr, i64, i64 } %t165, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load ptr, ptr %a1 + %t171 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.gen.label(ptr %t170, { ptr, i64, i64 } %t171) + %t172 = load ptr, ptr %a1 + %t173 = load ptr, ptr %a1 + %t174 = load ptr, ptr %a1 + %t175 = icmp eq ptr %t174, null + br i1 %t175, label %panic5314, label %ok5315 +panic5314: + call void @finch_panic(ptr @.str.3337, i64 2549, ptr @.str.3338) + unreachable +ok5315: + %t176 = getelementptr inbounds %S.gen.Gen, ptr %t174, i32 0, i32 1 + %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t178 = load i64, ptr %t177 + %t179 = load { ptr, i64, i64 }, ptr %t176 + %t180 = extractvalue { ptr, i64, i64 } %t179, 1 + %t181 = icmp uge i64 %t178, %t180 + br i1 %t181, label %range5316, label %inrange5317 +range5316: + call void @finch_panic_index(ptr @.str.3339, i64 2549, i64 %t178, i64 %t180) + unreachable +inrange5317: + %t182 = extractvalue { ptr, i64, i64 } %t179, 0 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t178 + %t184 = load { ptr, i64, i64 }, ptr %t183 + %t185 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t173, { ptr, i64, i64 } %t184) + store { ptr, i64, i64 } { ptr @.str.3336, i64 33, i64 0 }, ptr %a187 + store { ptr, i64, i64 } %t185, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t185, ptr %a189 + call void @finch_str_drop(ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a186 + store { ptr, i64, i64 } %t190, ptr %a192 + store { ptr, i64, i64 } { ptr @.str.3340, i64 6, i64 0 }, ptr %a193 + call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) + store { ptr, i64, i64 } %t190, ptr %a194 + call void @finch_str_drop(ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a191 + %t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t197 = load i64, ptr %t196 + call void @finch_str_from_int(ptr %a198, i64 %t197) + %t199 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t195, ptr %a201 + store { ptr, i64, i64 } %t199, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t195, ptr %a203 + call void @finch_str_drop(ptr %a203) + store { ptr, i64, i64 } %t199, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a200 + store { ptr, i64, i64 } %t205, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.3341, i64 1, i64 0 }, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + store { ptr, i64, i64 } %t205, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a206 + call void @finch.gen.emit(ptr %t172, { ptr, i64, i64 } %t210) + store { ptr, i64, i64 } %t210, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t212, { ptr, i64, i64 } { ptr @.str.3342, i64 11, i64 0 }) + %t213 = load ptr, ptr %a1 + %t214 = icmp eq ptr %t213, null + br i1 %t214, label %panic5318, label %ok5319 +panic5318: + call void @finch_panic(ptr @.str.3343, i64 2551, ptr @.str.3344) + unreachable +ok5319: + %t215 = getelementptr inbounds %S.gen.Gen, ptr %t213, i32 0, i32 9 + store i1 true, ptr %t215 + %t216 = load ptr, ptr %a1 + %t217 = load { ptr, i64, i64 }, ptr %a115 + call void @finch.gen.label(ptr %t216, { ptr, i64, i64 } %t217) + call void @finch_str_drop(ptr %a146) + call void @finch_str_drop(ptr %a115) + call void @finch_str_drop(ptr %a112) + br label %endif5313 +endif5313: + %t218 = load ptr, ptr %a1 + %t219 = load { ptr, i64, i64 }, ptr %a51 + %t220 = call { ptr, i64, i64 } @finch.gen.load(ptr %t218, { ptr, i64, i64 } { ptr @.str.3345, i64 3, i64 0 }, { ptr, i64, i64 } %t219) + store { ptr, i64, i64 } %t220, ptr %a221 + %t222 = load ptr, ptr %a1 + %t223 = load ptr, ptr %a1 + %t224 = load ptr, ptr %a1 + %t225 = load %S.ast.Type, ptr %a4 + %t226 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t224, %S.ast.Type %t225) + store { ptr, i64, i64 } { ptr @.str.3347, i64 23, i64 0 }, ptr %a228 + store { ptr, i64, i64 } %t226, ptr %a229 + call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) + store { ptr, i64, i64 } %t226, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a227 + store { ptr, i64, i64 } %t231, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.3348, i64 6, i64 0 }, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t231, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + %t237 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t236, ptr %a239 + store { ptr, i64, i64 } %t237, ptr %a240 + call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240) + store { ptr, i64, i64 } %t236, ptr %a241 + call void @finch_str_drop(ptr %a241) + %t242 = load { ptr, i64, i64 }, ptr %a238 + store { ptr, i64, i64 } %t242, ptr %a244 + store { ptr, i64, i64 } { ptr @.str.3349, i64 14, i64 0 }, ptr %a245 + call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) + store { ptr, i64, i64 } %t242, ptr %a246 + call void @finch_str_drop(ptr %a246) + %t247 = load { ptr, i64, i64 }, ptr %a243 + %t248 = call { ptr, i64, i64 } @finch.gen.op(ptr %t223, { ptr, i64, i64 } %t247) + store { ptr, i64, i64 } %t247, ptr %a249 + call void @finch_str_drop(ptr %a249) + %t250 = call { ptr, i64, i64 } @finch.gen.load(ptr %t222, { ptr, i64, i64 } { ptr @.str.3346, i64 3, i64 0 }, { ptr, i64, i64 } %t248) + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_drop(ptr %a251) + store { ptr, i64, i64 } %t250, ptr %a252 + %t253 = load ptr, ptr %a1 + %t254 = load ptr, ptr %a1 + %t255 = load { ptr, i64, i64 }, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.3350, i64 13, i64 0 }, ptr %a257 + store { ptr, i64, i64 } %t255, ptr %a258 + call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) + %t259 = load { ptr, i64, i64 }, ptr %a256 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.3351, i64 2, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + store { ptr, i64, i64 } %t259, ptr %a263 + call void @finch_str_drop(ptr %a263) + %t264 = load { ptr, i64, i64 }, ptr %a260 + %t265 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t264, ptr %a267 + store { ptr, i64, i64 } %t265, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t264, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + %t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t254, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a93 + %t274 = load { ptr, i64, i64 }, ptr %a102 + call void @finch.gen.condBr(ptr %t253, { ptr, i64, i64 } %t271, { ptr, i64, i64 } %t273, { ptr, i64, i64 } %t274) + store { ptr, i64, i64 } %t271, ptr %a275 + call void @finch_str_drop(ptr %a275) + %t276 = load ptr, ptr %a1 + %t277 = load { ptr, i64, i64 }, ptr %a93 + call void @finch.gen.label(ptr %t276, { ptr, i64, i64 } %t277) + %t278 = load ptr, ptr %a1 + %t279 = load { ptr, i64, i64 }, ptr %a3 + %t280 = load %S.ast.Type, ptr %a4 + %t281 = load { ptr, i64, i64 }, ptr %a221 + %t282 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t278, { ptr, i64, i64 } %t279, %S.ast.Type %t280, { ptr, i64, i64 } %t281) + store { ptr, i64, i64 } %t282, ptr %a283 + %t284 = load ptr, ptr %a1 + %t285 = load ptr, ptr %a1 + %t286 = load { ptr, i64, i64 }, ptr %a283 + %t287 = load %S.ast.Type, ptr %a4 + %t288 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t285, { ptr, i64, i64 } %t286, %S.ast.Type %t287, i64 0) + %t289 = call { ptr, i64, i64 } @finch.gen.load(ptr %t284, { ptr, i64, i64 } { ptr @.str.3352, i64 3, i64 0 }, { ptr, i64, i64 } %t288) + store { ptr, i64, i64 } %t288, ptr %a290 + call void @finch_str_drop(ptr %a290) + store { ptr, i64, i64 } %t289, ptr %a291 + %t292 = load ptr, ptr %a1 + %t293 = load ptr, ptr %a1 + %t294 = load { ptr, i64, i64 }, ptr %a291 + store { ptr, i64, i64 } { ptr @.str.3353, i64 12, i64 0 }, ptr %a296 + store { ptr, i64, i64 } %t294, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + %t298 = load { ptr, i64, i64 }, ptr %a295 + store { ptr, i64, i64 } %t298, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.3354, i64 3, i64 0 }, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t298, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + %t304 = call { ptr, i64, i64 } @finch.gen.op(ptr %t293, { ptr, i64, i64 } %t303) + store { ptr, i64, i64 } %t303, ptr %a305 + call void @finch_str_drop(ptr %a305) + %t306 = load { ptr, i64, i64 }, ptr %a99 + %t307 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.gen.condBr(ptr %t292, { ptr, i64, i64 } %t304, { ptr, i64, i64 } %t306, { ptr, i64, i64 } %t307) + store { ptr, i64, i64 } %t304, ptr %a308 + call void @finch_str_drop(ptr %a308) + %t309 = load ptr, ptr %a1 + %t310 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.gen.label(ptr %t309, { ptr, i64, i64 } %t310) + %t311 = load ptr, ptr %a1 + %t312 = icmp eq ptr %t311, null + br i1 %t312, label %panic5320, label %ok5321 +panic5320: + call void @finch_panic(ptr @.str.3355, i64 2562, ptr @.str.3356) + unreachable +ok5321: + %t313 = getelementptr inbounds %S.gen.Gen, ptr %t311, i32 0, i32 12 + %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i32 0, i32 1 + %t315 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t315, ptr %a316 + call void @finch_str_copy(ptr %a317, ptr %a316) + %t318 = load { ptr, i64, i64 }, ptr %a317 + %t319 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t318, 0 + %t320 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t320, ptr %a321 + call void @finch_str_copy(ptr %a322, ptr %a321) + %t323 = load { ptr, i64, i64 }, ptr %a322 + %t324 = insertvalue %S.gen.Loop %t319, { ptr, i64, i64 } %t323, 1 + %t325 = load ptr, ptr %a1 + %t326 = icmp eq ptr %t325, null + br i1 %t326, label %panic5322, label %ok5323 +panic5322: + call void @finch_panic(ptr @.str.3357, i64 2562, ptr @.str.3358) + unreachable +ok5323: + %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 10 + %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i32 0, i32 1 + %t329 = load i64, ptr %t328 + %t330 = insertvalue %S.gen.Loop %t324, i64 %t329, 2 + %t331 = load ptr, ptr %a1 + %t332 = icmp eq ptr %t331, null + br i1 %t332, label %panic5324, label %ok5325 +panic5324: + call void @finch_panic(ptr @.str.3359, i64 2562, ptr @.str.3360) + unreachable +ok5325: + %t333 = getelementptr inbounds %S.gen.Gen, ptr %t331, i32 0, i32 11 + %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i32 0, i32 1 + %t335 = load i64, ptr %t334 + %t336 = insertvalue %S.gen.Loop %t330, i64 %t335, 3 + %t337 = load i64, ptr %t314 + %t338 = add i64 %t337, 1 + call void @finch_arr_reserve(ptr %t313, i64 %t338, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t339 = load ptr, ptr %t313 + %t340 = getelementptr inbounds %S.gen.Loop, ptr %t339, i64 %t337 + store %S.gen.Loop %t336, ptr %t340 + store i64 %t338, ptr %t314 + %t341 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t341) + %t342 = load ptr, ptr %a1 + %t343 = load ptr, ptr %a1 + %t344 = load %S.ast.Type, ptr %a16 + %t345 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t343, %S.ast.Type %t344) + %t346 = load ptr, ptr %a1 + %t347 = load { ptr, i64, i64 }, ptr %a283 + %t348 = load %S.ast.Type, ptr %a4 + %t349 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t346, { ptr, i64, i64 } %t347, %S.ast.Type %t348, i64 1) + %t350 = call { ptr, i64, i64 } @finch.gen.load(ptr %t342, { ptr, i64, i64 } %t345, { ptr, i64, i64 } %t349) + store { ptr, i64, i64 } %t345, ptr %a351 + call void @finch_str_drop(ptr %a351) + store { ptr, i64, i64 } %t349, ptr %a352 + call void @finch_str_drop(ptr %a352) + store { ptr, i64, i64 } %t350, ptr %a353 + %t354 = load i1, ptr %a48 + br i1 %t354, label %then5326, label %endif5328 +then5326: + %t355 = load ptr, ptr %a1 + %t356 = load { ptr, i64, i64 }, ptr %a353 + %t357 = load %S.ast.Type, ptr %a16 + %t358 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t355, { ptr, i64, i64 } %t356, %S.ast.Type %t357) + %t359 = load { ptr, i64, i64 }, ptr %a353 + store { ptr, i64, i64 } %t358, ptr %a353 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + br label %endif5328 +endif5328: + %t361 = load ptr, ptr %a1 + %t362 = load %S.ast.Node, ptr %a2 + %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t364 = load { ptr, i64, i64 }, ptr %t363 + %t365 = load %S.ast.Type, ptr %a16 + %t366 = load { ptr, i64, i64 }, ptr %a353 + %t367 = load i1, ptr %a48 + %t368 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t361, %S.ast.Node %t362, { ptr, i64, i64 } %t364, %S.ast.Type %t365, { ptr, i64, i64 } %t366, i1 true, i1 %t367) + store { ptr, i64, i64 } %t368, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 + %t372 = load i64, ptr %t371 + %t373 = icmp sgt i64 %t372, 0 + br i1 %t373, label %then5329, label %endif5331 +then5329: + %t374 = load ptr, ptr %a1 + %t375 = load ptr, ptr %a1 + %t376 = load %S.ast.Type, ptr %a27 + %t377 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t375, %S.ast.Type %t376) + %t378 = load ptr, ptr %a1 + %t379 = load { ptr, i64, i64 }, ptr %a283 + %t380 = load %S.ast.Type, ptr %a4 + %t381 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t378, { ptr, i64, i64 } %t379, %S.ast.Type %t380, i64 2) + %t382 = call { ptr, i64, i64 } @finch.gen.load(ptr %t374, { ptr, i64, i64 } %t377, { ptr, i64, i64 } %t381) + store { ptr, i64, i64 } %t377, ptr %a383 + call void @finch_str_drop(ptr %a383) + store { ptr, i64, i64 } %t381, ptr %a384 + call void @finch_str_drop(ptr %a384) + store { ptr, i64, i64 } %t382, ptr %a385 + %t386 = load i1, ptr %a48 + br i1 %t386, label %then5332, label %endif5334 +then5332: + %t387 = load ptr, ptr %a1 + %t388 = load { ptr, i64, i64 }, ptr %a385 + %t389 = load %S.ast.Type, ptr %a27 + %t390 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t387, { ptr, i64, i64 } %t388, %S.ast.Type %t389) + %t391 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t390, ptr %a385 + store { ptr, i64, i64 } %t391, ptr %a392 + call void @finch_str_drop(ptr %a392) + br label %endif5334 +endif5334: + %t393 = load ptr, ptr %a1 + %t394 = load %S.ast.Node, ptr %a2 + %t395 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t396 = load { ptr, i64, i64 }, ptr %t395 + %t397 = load %S.ast.Type, ptr %a27 + %t398 = load { ptr, i64, i64 }, ptr %a385 + %t399 = load i1, ptr %a48 + %t400 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t393, %S.ast.Node %t394, { ptr, i64, i64 } %t396, %S.ast.Type %t397, { ptr, i64, i64 } %t398, i1 true, i1 %t399) + store { ptr, i64, i64 } %t400, ptr %a401 + call void @finch_str_drop(ptr %a401) + call void @finch_str_drop(ptr %a385) + br label %endif5331 +endif5331: + %t402 = load ptr, ptr %a1 + %t403 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t404 = load { ptr, i64, i64 }, ptr %t403 + %t405 = extractvalue { ptr, i64, i64 } %t404, 1 + %t406 = icmp uge i64 1, %t405 + br i1 %t406, label %range5335, label %inrange5336 +range5335: + call void @finch_panic_index(ptr @.str.3361, i64 2576, i64 1, i64 %t405) + unreachable +inrange5336: + %t407 = extractvalue { ptr, i64, i64 } %t404, 0 + %t408 = getelementptr inbounds %S.ast.Node, ptr %t407, i64 1 + %t409 = load %S.ast.Node, ptr %t408 + call void @finch.gen.block(ptr %t402, %S.ast.Node %t409, i1 true) + %t410 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t410) + %t411 = load ptr, ptr %a1 + %t412 = icmp eq ptr %t411, null + br i1 %t412, label %panic5337, label %ok5338 +panic5337: + call void @finch_panic(ptr @.str.3362, i64 2578, ptr @.str.3363) + unreachable +ok5338: + %t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 12 + %t414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t413, i32 0, i32 1 + %t415 = load i64, ptr %t414 + %t416 = icmp eq i64 %t415, 0 + br i1 %t416, label %panic5339, label %ok5340 +panic5339: + call void @finch_panic(ptr @.str.3364, i64 2578, ptr @.str.3365) + unreachable +ok5340: + %t417 = sub i64 %t415, 1 + %t418 = load ptr, ptr %t413 + %t419 = getelementptr inbounds %S.gen.Loop, ptr %t418, i64 %t417 + %t420 = load %S.gen.Loop, ptr %t419 + store i64 %t417, ptr %t414 + store %S.gen.Loop %t420, ptr %a421 + call void @finch.drop.S_gen_Loop(ptr %a421) + %t422 = load ptr, ptr %a1 + %t423 = load { ptr, i64, i64 }, ptr %a99 + call void @finch.gen.br(ptr %t422, { ptr, i64, i64 } %t423) + %t424 = load ptr, ptr %a1 + %t425 = load { ptr, i64, i64 }, ptr %a99 + call void @finch.gen.label(ptr %t424, { ptr, i64, i64 } %t425) + %t426 = load ptr, ptr %a1 + %t427 = load { ptr, i64, i64 }, ptr %a51 + %t428 = call { ptr, i64, i64 } @finch.gen.load(ptr %t426, { ptr, i64, i64 } { ptr @.str.3366, i64 3, i64 0 }, { ptr, i64, i64 } %t427) + store { ptr, i64, i64 } %t428, ptr %a429 + %t430 = load ptr, ptr %a1 + %t431 = load ptr, ptr %a1 + %t432 = load { ptr, i64, i64 }, ptr %a429 + store { ptr, i64, i64 } { ptr @.str.3368, i64 8, i64 0 }, ptr %a434 + store { ptr, i64, i64 } %t432, ptr %a435 + call void @finch_str_concat(ptr %a433, ptr %a434, ptr %a435) + %t436 = load { ptr, i64, i64 }, ptr %a433 + store { ptr, i64, i64 } %t436, ptr %a438 + store { ptr, i64, i64 } { ptr @.str.3369, i64 3, i64 0 }, ptr %a439 + call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) + store { ptr, i64, i64 } %t436, ptr %a440 + call void @finch_str_drop(ptr %a440) + %t441 = load { ptr, i64, i64 }, ptr %a437 + %t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t431, { ptr, i64, i64 } %t441) + store { ptr, i64, i64 } %t441, ptr %a443 + call void @finch_str_drop(ptr %a443) + %t444 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.store(ptr %t430, { ptr, i64, i64 } { ptr @.str.3367, i64 3, i64 0 }, { ptr, i64, i64 } %t442, { ptr, i64, i64 } %t444) + store { ptr, i64, i64 } %t442, ptr %a445 + call void @finch_str_drop(ptr %a445) + %t446 = load ptr, ptr %a1 + %t447 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t446, { ptr, i64, i64 } %t447) + %t448 = load ptr, ptr %a1 + %t449 = load { ptr, i64, i64 }, ptr %a102 + call void @finch.gen.label(ptr %t448, { ptr, i64, i64 } %t449) + call void @finch_str_drop(ptr %a429) + call void @finch_str_drop(ptr %a353) + call void @finch_str_drop(ptr %a291) + call void @finch_str_drop(ptr %a283) + call void @finch_str_drop(ptr %a252) + call void @finch_str_drop(ptr %a221) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a96) + call void @finch_str_drop(ptr %a93) + call void @finch_str_drop(ptr %a90) + call void @finch_str_drop(ptr %a54) + call void @finch_str_drop(ptr %a51) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret void +} + +define internal void @finch.drop.S_gen_Ref(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Ref, ptr %a, i32 0, i32 1 + call void @finch.drop.S_gen_Place(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Ref, ptr %a, i32 0, i32 2 + call void @finch.drop.S_gen_Val(ptr %t2) + ret void +} + +define internal void @finch.gen.eachStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a13 = alloca %S.gen.Ref, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a31 = alloca %S.ast.Type, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a38 = alloca %S.ast.Type, align 16 + %a39 = alloca %S.ast.Type, align 16 + %a42 = alloca %S.ast.Type, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca %S.ast.Type, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.ast.Type, align 16 + %a129 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.ast.Type, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca i1, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca %S.ast.Type, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca %S.gen.Loop, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t3) + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range5341, label %inrange5342 +range5341: + call void @finch_panic_index(ptr @.str.3370, i64 2589, i64 0, i64 %t7) + unreachable +inrange5342: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 false) + store %S.gen.Ref %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.3371, i64 0, i64 0 }, ptr %a14 + %t15 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3372, i64 4, i64 0 }) + store %S.ast.Type %t15, ptr %a16 + %t17 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 + %t18 = load i1, ptr %t17 + br i1 %t18, label %then5343, label %else5344 +then5343: + %t19 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 + %t20 = getelementptr inbounds %S.gen.Place, ptr %t19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + call void @finch_str_copy(ptr %a23, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + %t25 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t24, ptr %a14 + store { ptr, i64, i64 } %t25, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 + %t28 = getelementptr inbounds %S.gen.Place, ptr %t27, i32 0, i32 1 + %t29 = load %S.ast.Type, ptr %t28 + store %S.ast.Type %t29, ptr %a30 + call void @finch.copy.S_ast_Type(ptr %a31, ptr %a30) + %t32 = load %S.ast.Type, ptr %a31 + %t33 = load %S.ast.Type, ptr %a16 + store %S.ast.Type %t32, ptr %a16 + store %S.ast.Type %t33, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + br label %endif5345 +else5344: + %t35 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 + %t36 = getelementptr inbounds %S.gen.Val, ptr %t35, i32 0, i32 1 + %t37 = load %S.ast.Type, ptr %t36 + store %S.ast.Type %t37, ptr %a38 + call void @finch.copy.S_ast_Type(ptr %a39, ptr %a38) + %t40 = load %S.ast.Type, ptr %a39 + %t41 = load %S.ast.Type, ptr %a16 + store %S.ast.Type %t40, ptr %a16 + store %S.ast.Type %t41, ptr %a42 + call void @finch.drop.S_ast_Type(ptr %a42) + %t43 = load ptr, ptr %a1 + %t44 = load %S.ast.Node, ptr %a2 + %t45 = load ptr, ptr %a1 + %t46 = icmp eq ptr %t45, null + br i1 %t46, label %panic5346, label %ok5347 +panic5346: + call void @finch_panic(ptr @.str.3374, i64 2597, ptr @.str.3375) + unreachable +ok5347: + %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 25 + %t48 = load i64, ptr %t47 + call void @finch_str_from_int(ptr %a49, i64 %t48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.3373, i64 5, i64 0 }, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load %S.ast.Type, ptr %a16 + %t57 = load ptr, ptr %a1 + %t58 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 + %t59 = load %S.gen.Val, ptr %t58 + %t60 = call { ptr, i64, i64 } @finch.gen.own(ptr %t57, %S.gen.Val %t59) + %t61 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t55, %S.ast.Type %t56, { ptr, i64, i64 } %t60, i1 false, i1 true) + store { ptr, i64, i64 } %t55, ptr %a62 + call void @finch_str_drop(ptr %a62) + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t61, ptr %a14 + store { ptr, i64, i64 } %t64, ptr %a65 + call void @finch_str_drop(ptr %a65) + br label %endif5345 +endif5345: + %t66 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t67 = load { ptr, i64, i64 }, ptr %t66 + store { ptr, i64, i64 } %t67, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.3376, i64 3, i64 0 }, ptr %a69 + %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) + %t71 = icmp ne i32 %t70, 0 + br i1 %t71, label %then5348, label %endif5350 +then5348: + %t72 = load ptr, ptr %a1 + %t73 = load %S.ast.Node, ptr %a2 + %t74 = load { ptr, i64, i64 }, ptr %a14 + %t75 = load %S.ast.Type, ptr %a16 + %t76 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 + %t77 = load i1, ptr %t76 + call void @finch.gen.eachMap(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t74, %S.ast.Type %t75, i1 %t77) + %t78 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t78) + call void @finch.drop.S_ast_Type(ptr %a16) + call void @finch_str_drop(ptr %a14) + call void @finch.drop.S_gen_Ref(ptr %a13) + ret void +endif5350: + %t79 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3377, i64 5, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp eq i32 %t83, 0 + br label %logic.from5351 +logic.from5351: + br i1 %t84, label %logic.rhs5352, label %logic.end5353 +logic.rhs5352: + %t85 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.3378, i64 3, i64 0 }, ptr %a88 + %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) + %t90 = icmp eq i32 %t89, 0 + br label %logic.rend5354 +logic.rend5354: + br label %logic.end5353 +logic.end5353: + %t91 = phi i1 [ false, %logic.from5351 ], [ %t90, %logic.rend5354 ] + br i1 %t91, label %then5355, label %endif5357 +then5355: + %t92 = load ptr, ptr %a1 + %t93 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t94 = load { ptr, i64, i64 }, ptr %t93 + %t95 = extractvalue { ptr, i64, i64 } %t94, 1 + %t96 = icmp uge i64 0, %t95 + br i1 %t96, label %range5358, label %inrange5359 +range5358: + call void @finch_panic_index(ptr @.str.3379, i64 2605, i64 0, i64 %t95) + unreachable +inrange5359: + %t97 = extractvalue { ptr, i64, i64 } %t94, 0 + %t98 = getelementptr inbounds %S.ast.Node, ptr %t97, i64 0 + %t99 = load %S.ast.Node, ptr %t98 + %t100 = load %S.ast.Type, ptr %a16 + %t101 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t100) + store { ptr, i64, i64 } { ptr @.str.3380, i64 55, i64 0 }, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t101, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.3381, i64 36, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + call void @finch.gen.fail(ptr %t92, %S.ast.Node %t99, { ptr, i64, i64 } %t111) + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + br label %endif5357 +endif5357: + %t113 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3382, i64 4, i64 0 }) + store %S.ast.Type %t113, ptr %a114 + %t115 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.3383, i64 5, i64 0 }, ptr %a118 + %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) + %t120 = icmp ne i32 %t119, 0 + br i1 %t120, label %then5360, label %endif5362 +then5360: + %t121 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 1 + %t122 = load { ptr, i64, i64 }, ptr %t121 + %t123 = extractvalue { ptr, i64, i64 } %t122, 1 + %t124 = icmp uge i64 0, %t123 + br i1 %t124, label %range5363, label %inrange5364 +range5363: + call void @finch_panic_index(ptr @.str.3384, i64 2609, i64 0, i64 %t123) + unreachable +inrange5364: + %t125 = extractvalue { ptr, i64, i64 } %t122, 0 + %t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i64 0 + %t127 = load %S.ast.Type, ptr %t126 + store %S.ast.Type %t127, ptr %a128 + call void @finch.copy.S_ast_Type(ptr %a129, ptr %a128) + %t130 = load %S.ast.Type, ptr %a129 + %t131 = load %S.ast.Type, ptr %a114 + store %S.ast.Type %t130, ptr %a114 + store %S.ast.Type %t131, ptr %a132 + call void @finch.drop.S_ast_Type(ptr %a132) + br label %endif5362 +endif5362: + %t133 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 + %t134 = load i1, ptr %t133 + br label %logic.from5365 +logic.from5365: + br i1 %t134, label %logic.rhs5366, label %logic.end5367 +logic.rhs5366: + %t135 = load ptr, ptr %a1 + %t136 = load %S.ast.Type, ptr %a114 + %t137 = call i1 @finch.gen.owning(ptr %t135, %S.ast.Type %t136) + br label %logic.rend5368 +logic.rend5368: + br label %logic.end5367 +logic.end5367: + %t138 = phi i1 [ false, %logic.from5365 ], [ %t137, %logic.rend5368 ] + br label %logic.from5369 +logic.from5369: + br i1 %t138, label %logic.rhs5370, label %logic.end5371 +logic.rhs5370: + %t139 = load ptr, ptr %a1 + %t140 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t141 = load { ptr, i64, i64 }, ptr %t140 + %t142 = extractvalue { ptr, i64, i64 } %t141, 1 + %t143 = icmp uge i64 0, %t142 + br i1 %t143, label %range5372, label %inrange5373 +range5372: + call void @finch_panic_index(ptr @.str.3385, i64 2611, i64 0, i64 %t142) + unreachable +inrange5373: + %t144 = extractvalue { ptr, i64, i64 } %t141, 0 + %t145 = getelementptr inbounds %S.ast.Node, ptr %t144, i64 0 + %t146 = load %S.ast.Node, ptr %t145 + %t147 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t146) + %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t149 = load { ptr, i64, i64 }, ptr %t148 + %t150 = extractvalue { ptr, i64, i64 } %t149, 1 + %t151 = icmp uge i64 1, %t150 + br i1 %t151, label %range5374, label %inrange5375 +range5374: + call void @finch_panic_index(ptr @.str.3386, i64 2611, i64 1, i64 %t150) + unreachable +inrange5375: + %t152 = extractvalue { ptr, i64, i64 } %t149, 0 + %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 1 + %t154 = load %S.ast.Node, ptr %t153 + %t155 = call i1 @finch.gen.mutates(ptr %t139, { ptr, i64, i64 } %t147, %S.ast.Node %t154) + store { ptr, i64, i64 } %t147, ptr %a156 + call void @finch_str_drop(ptr %a156) + br label %logic.rend5376 +logic.rend5376: + br label %logic.end5371 +logic.end5371: + %t157 = phi i1 [ false, %logic.from5369 ], [ %t155, %logic.rend5376 ] + store i1 %t157, ptr %a158 + %t159 = load ptr, ptr %a1 + %t160 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t159, { ptr, i64, i64 } { ptr @.str.3387, i64 3, i64 0 }) + store { ptr, i64, i64 } %t160, ptr %a161 + %t162 = load ptr, ptr %a1 + %t163 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.store(ptr %t162, { ptr, i64, i64 } { ptr @.str.3388, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3389, i64 1, i64 0 }, { ptr, i64, i64 } %t163) + %t164 = load ptr, ptr %a1 + %t165 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t164, { ptr, i64, i64 } { ptr @.str.3390, i64 9, i64 0 }) + store { ptr, i64, i64 } %t165, ptr %a166 + %t167 = load ptr, ptr %a1 + %t168 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t167, { ptr, i64, i64 } { ptr @.str.3391, i64 9, i64 0 }) + store { ptr, i64, i64 } %t168, ptr %a169 + %t170 = load ptr, ptr %a1 + %t171 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t170, { ptr, i64, i64 } { ptr @.str.3392, i64 9, i64 0 }) + store { ptr, i64, i64 } %t171, ptr %a172 + %t173 = load ptr, ptr %a1 + %t174 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t173, { ptr, i64, i64 } { ptr @.str.3393, i64 8, i64 0 }) + store { ptr, i64, i64 } %t174, ptr %a175 + %t176 = load ptr, ptr %a1 + %t177 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t176, { ptr, i64, i64 } %t177) + %t178 = load ptr, ptr %a1 + %t179 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.label(ptr %t178, { ptr, i64, i64 } %t179) + %t180 = load ptr, ptr %a1 + %t181 = load ptr, ptr %a1 + %t182 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.3395, i64 46, i64 0 }, ptr %a184 + store { ptr, i64, i64 } %t182, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a183 + store { ptr, i64, i64 } %t186, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.3396, i64 14, i64 0 }, ptr %a189 + call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) + store { ptr, i64, i64 } %t186, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a187 + %t192 = call { ptr, i64, i64 } @finch.gen.op(ptr %t181, { ptr, i64, i64 } %t191) + store { ptr, i64, i64 } %t191, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = call { ptr, i64, i64 } @finch.gen.load(ptr %t180, { ptr, i64, i64 } { ptr @.str.3394, i64 3, i64 0 }, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a195 + call void @finch_str_drop(ptr %a195) + store { ptr, i64, i64 } %t194, ptr %a196 + %t197 = load ptr, ptr %a1 + %t198 = load { ptr, i64, i64 }, ptr %a161 + %t199 = call { ptr, i64, i64 } @finch.gen.load(ptr %t197, { ptr, i64, i64 } { ptr @.str.3397, i64 3, i64 0 }, { ptr, i64, i64 } %t198) + store { ptr, i64, i64 } %t199, ptr %a200 + %t201 = load ptr, ptr %a1 + %t202 = load { ptr, i64, i64 }, ptr %a200 + store { ptr, i64, i64 } { ptr @.str.3398, i64 13, i64 0 }, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + %t206 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t206, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.3399, i64 2, i64 0 }, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t206, ptr %a210 + call void @finch_str_drop(ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a207 + %t212 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } %t211, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t211, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + %t218 = call { ptr, i64, i64 } @finch.gen.op(ptr %t201, { ptr, i64, i64 } %t217) + store { ptr, i64, i64 } %t217, ptr %a219 + call void @finch_str_drop(ptr %a219) + store { ptr, i64, i64 } %t218, ptr %a220 + %t221 = load ptr, ptr %a1 + %t222 = load { ptr, i64, i64 }, ptr %a220 + %t223 = load { ptr, i64, i64 }, ptr %a169 + %t224 = load { ptr, i64, i64 }, ptr %a175 + call void @finch.gen.condBr(ptr %t221, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t223, { ptr, i64, i64 } %t224) + %t225 = load ptr, ptr %a1 + %t226 = load { ptr, i64, i64 }, ptr %a169 + call void @finch.gen.label(ptr %t225, { ptr, i64, i64 } %t226) + %t227 = load ptr, ptr %a1 + %t228 = load { ptr, i64, i64 }, ptr %a14 + %t229 = call { ptr, i64, i64 } @finch.gen.load(ptr %t227, { ptr, i64, i64 } { ptr @.str.3400, i64 3, i64 0 }, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t229, ptr %a230 + %t231 = load ptr, ptr %a1 + %t232 = load ptr, ptr %a1 + %t233 = load %S.ast.Type, ptr %a114 + %t234 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t232, %S.ast.Type %t233) + store { ptr, i64, i64 } { ptr @.str.3401, i64 23, i64 0 }, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t234, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t239, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.3402, i64 6, i64 0 }, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + store { ptr, i64, i64 } %t239, ptr %a243 + call void @finch_str_drop(ptr %a243) + %t244 = load { ptr, i64, i64 }, ptr %a240 + %t245 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t244, ptr %a247 + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t244, ptr %a249 + call void @finch_str_drop(ptr %a249) + %t250 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t250, ptr %a252 + store { ptr, i64, i64 } { ptr @.str.3403, i64 6, i64 0 }, ptr %a253 + call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) + store { ptr, i64, i64 } %t250, ptr %a254 + call void @finch_str_drop(ptr %a254) + %t255 = load { ptr, i64, i64 }, ptr %a251 + %t256 = load { ptr, i64, i64 }, ptr %a200 + store { ptr, i64, i64 } %t255, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + %t262 = call { ptr, i64, i64 } @finch.gen.op(ptr %t231, { ptr, i64, i64 } %t261) + store { ptr, i64, i64 } %t261, ptr %a263 + call void @finch_str_drop(ptr %a263) + store { ptr, i64, i64 } %t262, ptr %a264 + %t265 = load ptr, ptr %a1 + %t266 = load ptr, ptr %a1 + %t267 = load %S.ast.Type, ptr %a114 + %t268 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t266, %S.ast.Type %t267) + %t269 = load { ptr, i64, i64 }, ptr %a264 + %t270 = call { ptr, i64, i64 } @finch.gen.load(ptr %t265, { ptr, i64, i64 } %t268, { ptr, i64, i64 } %t269) + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_drop(ptr %a271) + store { ptr, i64, i64 } %t270, ptr %a272 + %t273 = load i1, ptr %a158 + br i1 %t273, label %then5377, label %endif5379 +then5377: + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a272 + %t276 = load %S.ast.Type, ptr %a114 + %t277 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t274, { ptr, i64, i64 } %t275, %S.ast.Type %t276) + %t278 = load { ptr, i64, i64 }, ptr %a272 + store { ptr, i64, i64 } %t277, ptr %a272 + store { ptr, i64, i64 } %t278, ptr %a279 + call void @finch_str_drop(ptr %a279) + br label %endif5379 +endif5379: + %t280 = load ptr, ptr %a1 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic5380, label %ok5381 +panic5380: + call void @finch_panic(ptr @.str.3404, i64 2631, ptr @.str.3405) + unreachable +ok5381: + %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 12 + %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 + %t284 = load { ptr, i64, i64 }, ptr %a172 + store { ptr, i64, i64 } %t284, ptr %a285 + call void @finch_str_copy(ptr %a286, ptr %a285) + %t287 = load { ptr, i64, i64 }, ptr %a286 + %t288 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t287, 0 + %t289 = load { ptr, i64, i64 }, ptr %a175 + store { ptr, i64, i64 } %t289, ptr %a290 + call void @finch_str_copy(ptr %a291, ptr %a290) + %t292 = load { ptr, i64, i64 }, ptr %a291 + %t293 = insertvalue %S.gen.Loop %t288, { ptr, i64, i64 } %t292, 1 + %t294 = load ptr, ptr %a1 + %t295 = icmp eq ptr %t294, null + br i1 %t295, label %panic5382, label %ok5383 +panic5382: + call void @finch_panic(ptr @.str.3406, i64 2631, ptr @.str.3407) + unreachable +ok5383: + %t296 = getelementptr inbounds %S.gen.Gen, ptr %t294, i32 0, i32 10 + %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i32 0, i32 1 + %t298 = load i64, ptr %t297 + %t299 = insertvalue %S.gen.Loop %t293, i64 %t298, 2 + %t300 = load ptr, ptr %a1 + %t301 = icmp eq ptr %t300, null + br i1 %t301, label %panic5384, label %ok5385 +panic5384: + call void @finch_panic(ptr @.str.3408, i64 2631, ptr @.str.3409) + unreachable +ok5385: + %t302 = getelementptr inbounds %S.gen.Gen, ptr %t300, i32 0, i32 11 + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i32 0, i32 1 + %t304 = load i64, ptr %t303 + %t305 = insertvalue %S.gen.Loop %t299, i64 %t304, 3 + %t306 = load i64, ptr %t283 + %t307 = add i64 %t306, 1 + call void @finch_arr_reserve(ptr %t282, i64 %t307, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t308 = load ptr, ptr %t282 + %t309 = getelementptr inbounds %S.gen.Loop, ptr %t308, i64 %t306 + store %S.gen.Loop %t305, ptr %t309 + store i64 %t307, ptr %t283 + %t310 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t310) + %t311 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t312 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t312, ptr %a313 + call void @finch_str_copy(ptr %a314, ptr %a313) + %t315 = load { ptr, i64, i64 }, ptr %a314 + store { ptr, i64, i64 } %t315, ptr %a316 + %t317 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 + %t319 = load i64, ptr %t318 + %t320 = icmp sgt i64 %t319, 0 + br i1 %t320, label %then5386, label %endif5388 +then5386: + %t321 = load ptr, ptr %a1 + %t322 = load %S.ast.Node, ptr %a2 + %t323 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t324 = load { ptr, i64, i64 }, ptr %t323 + %t325 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3410, i64 3, i64 0 }) + %t326 = load { ptr, i64, i64 }, ptr %a200 + %t327 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t321, %S.ast.Node %t322, { ptr, i64, i64 } %t324, %S.ast.Type %t325, { ptr, i64, i64 } %t326, i1 true, i1 false) + store %S.ast.Type %t325, ptr %a328 + call void @finch.drop.S_ast_Type(ptr %a328) + store { ptr, i64, i64 } %t327, ptr %a329 + call void @finch_str_drop(ptr %a329) + %t330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t331 = load { ptr, i64, i64 }, ptr %t330 + store { ptr, i64, i64 } %t331, ptr %a332 + call void @finch_str_copy(ptr %a333, ptr %a332) + %t334 = load { ptr, i64, i64 }, ptr %a333 + %t335 = load { ptr, i64, i64 }, ptr %a316 + store { ptr, i64, i64 } %t334, ptr %a316 + store { ptr, i64, i64 } %t335, ptr %a336 + call void @finch_str_drop(ptr %a336) + br label %endif5388 +endif5388: + %t337 = load ptr, ptr %a1 + %t338 = load %S.ast.Node, ptr %a2 + %t339 = load { ptr, i64, i64 }, ptr %a316 + %t340 = load %S.ast.Type, ptr %a114 + %t341 = load { ptr, i64, i64 }, ptr %a272 + %t342 = load i1, ptr %a158 + %t343 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t337, %S.ast.Node %t338, { ptr, i64, i64 } %t339, %S.ast.Type %t340, { ptr, i64, i64 } %t341, i1 true, i1 %t342) + store { ptr, i64, i64 } %t343, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load ptr, ptr %a1 + %t346 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t347 = load { ptr, i64, i64 }, ptr %t346 + %t348 = extractvalue { ptr, i64, i64 } %t347, 1 + %t349 = icmp uge i64 1, %t348 + br i1 %t349, label %range5389, label %inrange5390 +range5389: + call void @finch_panic_index(ptr @.str.3411, i64 2639, i64 1, i64 %t348) + unreachable +inrange5390: + %t350 = extractvalue { ptr, i64, i64 } %t347, 0 + %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 1 + %t352 = load %S.ast.Node, ptr %t351 + call void @finch.gen.block(ptr %t345, %S.ast.Node %t352, i1 true) + %t353 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t353) + %t354 = load ptr, ptr %a1 + %t355 = icmp eq ptr %t354, null + br i1 %t355, label %panic5391, label %ok5392 +panic5391: + call void @finch_panic(ptr @.str.3412, i64 2641, ptr @.str.3413) + unreachable +ok5392: + %t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 12 + %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 + %t358 = load i64, ptr %t357 + %t359 = icmp eq i64 %t358, 0 + br i1 %t359, label %panic5393, label %ok5394 +panic5393: + call void @finch_panic(ptr @.str.3414, i64 2641, ptr @.str.3415) + unreachable +ok5394: + %t360 = sub i64 %t358, 1 + %t361 = load ptr, ptr %t356 + %t362 = getelementptr inbounds %S.gen.Loop, ptr %t361, i64 %t360 + %t363 = load %S.gen.Loop, ptr %t362 + store i64 %t360, ptr %t357 + store %S.gen.Loop %t363, ptr %a364 + call void @finch.drop.S_gen_Loop(ptr %a364) + %t365 = load ptr, ptr %a1 + %t366 = load { ptr, i64, i64 }, ptr %a172 + call void @finch.gen.br(ptr %t365, { ptr, i64, i64 } %t366) + %t367 = load ptr, ptr %a1 + %t368 = load { ptr, i64, i64 }, ptr %a172 + call void @finch.gen.label(ptr %t367, { ptr, i64, i64 } %t368) + %t369 = load ptr, ptr %a1 + %t370 = load { ptr, i64, i64 }, ptr %a161 + %t371 = call { ptr, i64, i64 } @finch.gen.load(ptr %t369, { ptr, i64, i64 } { ptr @.str.3416, i64 3, i64 0 }, { ptr, i64, i64 } %t370) + store { ptr, i64, i64 } %t371, ptr %a372 + %t373 = load ptr, ptr %a1 + %t374 = load ptr, ptr %a1 + %t375 = load { ptr, i64, i64 }, ptr %a372 + store { ptr, i64, i64 } { ptr @.str.3418, i64 8, i64 0 }, ptr %a377 + store { ptr, i64, i64 } %t375, ptr %a378 + call void @finch_str_concat(ptr %a376, ptr %a377, ptr %a378) + %t379 = load { ptr, i64, i64 }, ptr %a376 + store { ptr, i64, i64 } %t379, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.3419, i64 3, i64 0 }, ptr %a382 + call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) + store { ptr, i64, i64 } %t379, ptr %a383 + call void @finch_str_drop(ptr %a383) + %t384 = load { ptr, i64, i64 }, ptr %a380 + %t385 = call { ptr, i64, i64 } @finch.gen.op(ptr %t374, { ptr, i64, i64 } %t384) + store { ptr, i64, i64 } %t384, ptr %a386 + call void @finch_str_drop(ptr %a386) + %t387 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.store(ptr %t373, { ptr, i64, i64 } { ptr @.str.3417, i64 3, i64 0 }, { ptr, i64, i64 } %t385, { ptr, i64, i64 } %t387) + store { ptr, i64, i64 } %t385, ptr %a388 + call void @finch_str_drop(ptr %a388) + %t389 = load ptr, ptr %a1 + %t390 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t389, { ptr, i64, i64 } %t390) + %t391 = load ptr, ptr %a1 + %t392 = load { ptr, i64, i64 }, ptr %a175 + call void @finch.gen.label(ptr %t391, { ptr, i64, i64 } %t392) + %t393 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t393) + call void @finch_str_drop(ptr %a372) + call void @finch_str_drop(ptr %a316) + call void @finch_str_drop(ptr %a272) + call void @finch_str_drop(ptr %a264) + call void @finch_str_drop(ptr %a230) + call void @finch_str_drop(ptr %a220) + call void @finch_str_drop(ptr %a200) + call void @finch_str_drop(ptr %a196) + call void @finch_str_drop(ptr %a175) + call void @finch_str_drop(ptr %a172) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a166) + call void @finch_str_drop(ptr %a161) + call void @finch.drop.S_ast_Type(ptr %a114) + call void @finch.drop.S_ast_Type(ptr %a16) + call void @finch_str_drop(ptr %a14) + call void @finch.drop.S_gen_Ref(ptr %a13) + ret void +} + +define internal void @finch.gen.returnStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca %S.ast.Node, align 16 + %a48 = alloca %S.ast.Node, align 16 + %a50 = alloca %S.ast.Node, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca %S.gen.Val, align 16 + %a131 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.gen.Val, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca i64, align 16 + %a329 = alloca i64, align 16 + %a342 = alloca i64, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca %S.gen.Var, align 16 + %a421 = alloca %S.gen.Var, align 16 + %a423 = alloca %S.gen.Var, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca %S.gen.Val, align 16 + %a512 = alloca %S.gen.Val, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic5395, label %ok5396 +panic5395: + call void @finch_panic(ptr @.str.3420, i64 2652, ptr @.str.3421) + unreachable +ok5396: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 + %t6 = load i64, ptr %t5 + %t7 = icmp sgt i64 %t6, 0 + br i1 %t7, label %then5397, label %endif5399 +then5397: + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3422, i64 33, i64 0 }) + br label %endif5399 +endif5399: + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br label %logic.from5400 +logic.from5400: + br i1 %t13, label %logic.rhs5401, label %logic.end5402 +logic.rhs5401: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t15 = load { ptr, i64, i64 }, ptr %t14 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 0, %t16 + br i1 %t17, label %range5403, label %inrange5404 +range5403: + call void @finch_panic_index(ptr @.str.3423, i64 2656, i64 0, i64 %t16) + unreachable +inrange5404: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 + %t20 = getelementptr inbounds %S.ast.Node, ptr %t19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.3424, i64 4, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br label %logic.rend5405 +logic.rend5405: + br label %logic.end5402 +logic.end5402: + %t26 = phi i1 [ false, %logic.from5400 ], [ %t25, %logic.rend5405 ] + br label %logic.from5406 +logic.from5406: + br i1 %t26, label %logic.rhs5407, label %logic.end5408 +logic.rhs5407: + %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 0, %t29 + br i1 %t30, label %range5409, label %inrange5410 +range5409: + call void @finch_panic_index(ptr @.str.3425, i64 2656, i64 0, i64 %t29) + unreachable +inrange5410: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 0 + %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i32 0, i32 1 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.3426, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.rend5411 +logic.rend5411: + br label %logic.end5408 +logic.end5408: + %t39 = phi i1 [ false, %logic.from5406 ], [ %t38, %logic.rend5411 ] + br i1 %t39, label %then5412, label %endif5414 +then5412: + %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 0, %t42 + br i1 %t43, label %range5415, label %inrange5416 +range5415: + call void @finch_panic_index(ptr @.str.3427, i64 2657, i64 0, i64 %t42) + unreachable +inrange5416: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 0 + %t46 = load %S.ast.Node, ptr %t45 + store %S.ast.Node %t46, ptr %a47 + call void @finch.copy.S_ast_Node(ptr %a48, ptr %a47) + %t49 = load %S.ast.Node, ptr %a48 + store %S.ast.Node %t49, ptr %a50 + %t51 = load ptr, ptr %a1 + %t52 = icmp eq ptr %t51, null + br i1 %t52, label %panic5417, label %ok5418 +panic5417: + call void @finch_panic(ptr @.str.3428, i64 2658, ptr @.str.3429) + unreachable +ok5418: + %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 13 + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 9 + %t55 = load i1, ptr %t54 + %t56 = xor i1 %t55, true + br i1 %t56, label %then5419, label %endif5421 +then5419: + store { ptr, i64, i64 } { ptr @.str.3430, i64 1, i64 0 }, ptr %a57 + %t58 = load ptr, ptr %a1 + %t59 = icmp eq ptr %t58, null + br i1 %t59, label %panic5422, label %ok5423 +panic5422: + call void @finch_panic(ptr @.str.3431, i64 2660, ptr @.str.3432) + unreachable +ok5423: + %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 13 + %t61 = getelementptr inbounds %S.gen.FnSig, ptr %t60, i32 0, i32 12 + %t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i32 0, i32 0 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.3433, i64 4, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) + %t67 = icmp eq i32 %t66, 0 + br i1 %t67, label %then5424, label %endif5426 +then5424: + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic5427, label %ok5428 +panic5427: + call void @finch_panic(ptr @.str.3434, i64 2661, ptr @.str.3435) + unreachable +ok5428: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 13 + %t71 = getelementptr inbounds %S.gen.FnSig, ptr %t70, i32 0, i32 12 + %t72 = load %S.ast.Type, ptr %t71 + %t73 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t72) + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.3436, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t78, ptr %a57 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif5426 +endif5426: + %t81 = load ptr, ptr %a1 + %t82 = load %S.ast.Node, ptr %a50 + %t83 = load ptr, ptr %a1 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic5429, label %ok5430 +panic5429: + call void @finch_panic(ptr @.str.3438, i64 2663, ptr @.str.3439) + unreachable +ok5430: + %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 13 + %t86 = getelementptr inbounds %S.gen.FnSig, ptr %t85, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } { ptr @.str.3437, i64 1, i64 0 }, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.3440, i64 64, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + %t97 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t96, ptr %a99 + store { ptr, i64, i64 } %t97, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t96, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t102, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.3441, i64 1, i64 0 }, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + store { ptr, i64, i64 } %t102, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.gen.fail(ptr %t81, %S.ast.Node %t82, { ptr, i64, i64 } %t107) + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a57) + br label %endif5421 +endif5421: + %t109 = load ptr, ptr %a1 + %t110 = load %S.ast.Node, ptr %a50 + call void @finch.gen.checkArgs(ptr %t109, %S.ast.Node %t110, i64 0, i64 1, { ptr, i64, i64 } { ptr @.str.3442, i64 5, i64 0 }) + %t111 = load ptr, ptr %a1 + %t112 = load ptr, ptr %a1 + %t113 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 + %t114 = load { ptr, i64, i64 }, ptr %t113 + %t115 = extractvalue { ptr, i64, i64 } %t114, 1 + %t116 = icmp uge i64 0, %t115 + br i1 %t116, label %range5431, label %inrange5432 +range5431: + call void @finch_panic_index(ptr @.str.3443, i64 2666, i64 0, i64 %t115) + unreachable +inrange5432: + %t117 = extractvalue { ptr, i64, i64 } %t114, 0 + %t118 = getelementptr inbounds %S.ast.Node, ptr %t117, i64 0 + %t119 = load %S.ast.Node, ptr %t118 + %t120 = call %S.gen.Val @finch.gen.expr(ptr %t112, %S.ast.Node %t119) + %t121 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3444, i64 3, i64 0 }) + %t122 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 + %t123 = load { ptr, i64, i64 }, ptr %t122 + %t124 = extractvalue { ptr, i64, i64 } %t123, 1 + %t125 = icmp uge i64 0, %t124 + br i1 %t125, label %range5433, label %inrange5434 +range5433: + call void @finch_panic_index(ptr @.str.3445, i64 2666, i64 0, i64 %t124) + unreachable +inrange5434: + %t126 = extractvalue { ptr, i64, i64 } %t123, 0 + %t127 = getelementptr inbounds %S.ast.Node, ptr %t126, i64 0 + %t128 = load %S.ast.Node, ptr %t127 + %t129 = call %S.gen.Val @finch.gen.coerce(ptr %t111, %S.gen.Val %t120, %S.ast.Type %t121, %S.ast.Node %t128, { ptr, i64, i64 } { ptr @.str.3446, i64 17, i64 0 }) + store %S.gen.Val %t120, ptr %a130 + call void @finch.drop.S_gen_Val(ptr %a130) + store %S.ast.Type %t121, ptr %a131 + call void @finch.drop.S_ast_Type(ptr %a131) + store %S.gen.Val %t129, ptr %a132 + %t133 = load ptr, ptr %a1 + %t134 = load %S.gen.Val, ptr %a132 + %t135 = call { ptr, i64, i64 } @finch.gen.own(ptr %t133, %S.gen.Val %t134) + store { ptr, i64, i64 } %t135, ptr %a136 + %t137 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t137, i64 0) + %t138 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t138, i64 0) + %t139 = load ptr, ptr %a1 + %t140 = load ptr, ptr %a1 + %t141 = load ptr, ptr %a1 + %t142 = icmp eq ptr %t141, null + br i1 %t142, label %panic5435, label %ok5436 +panic5435: + call void @finch_panic(ptr @.str.3448, i64 2670, ptr @.str.3449) + unreachable +ok5436: + %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 13 + %t144 = load %S.gen.FnSig, ptr %t143 + %t145 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t140, %S.gen.FnSig %t144) + store { ptr, i64, i64 } { ptr @.str.3447, i64 4, i64 0 }, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + store { ptr, i64, i64 } %t145, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.3450, i64 1, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load ptr, ptr %a1 + %t157 = load ptr, ptr %a1 + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic5437, label %ok5438 +panic5437: + call void @finch_panic(ptr @.str.3452, i64 2670, ptr @.str.3453) + unreachable +ok5438: + %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 13 + %t161 = load %S.gen.FnSig, ptr %t160 + %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t157, %S.gen.FnSig %t161) + store { ptr, i64, i64 } { ptr @.str.3451, i64 12, i64 0 }, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t162, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t167, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.3454, i64 36, i64 0 }, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t167, ptr %a171 + call void @finch_str_drop(ptr %a171) + %t172 = load { ptr, i64, i64 }, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t172, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t172, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.3455, i64 3, i64 0 }, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t178, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t156, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + store { ptr, i64, i64 } %t155, ptr %a187 + store { ptr, i64, i64 } %t184, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t155, ptr %a189 + call void @finch_str_drop(ptr %a189) + store { ptr, i64, i64 } %t184, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a186 + call void @finch.gen.emit(ptr %t139, { ptr, i64, i64 } %t191) + store { ptr, i64, i64 } %t191, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load ptr, ptr %a1 + %t194 = icmp eq ptr %t193, null + br i1 %t194, label %panic5439, label %ok5440 +panic5439: + call void @finch_panic(ptr @.str.3456, i64 2671, ptr @.str.3457) + unreachable +ok5440: + %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 + store i1 true, ptr %t195 + call void @finch_str_drop(ptr %a136) + call void @finch.drop.S_gen_Val(ptr %a132) + call void @finch.drop.S_ast_Node(ptr %a50) + ret void +endif5414: + %t196 = load ptr, ptr %a1 + %t197 = icmp eq ptr %t196, null + br i1 %t197, label %panic5441, label %ok5442 +panic5441: + call void @finch_panic(ptr @.str.3458, i64 2674, ptr @.str.3459) + unreachable +ok5442: + %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 13 + %t199 = getelementptr inbounds %S.gen.FnSig, ptr %t198, i32 0, i32 12 + %t200 = getelementptr inbounds %S.ast.Type, ptr %t199, i32 0, i32 0 + %t201 = load { ptr, i64, i64 }, ptr %t200 + store { ptr, i64, i64 } %t201, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.3460, i64 4, i64 0 }, ptr %a203 + %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) + %t205 = icmp ne i32 %t204, 0 + br i1 %t205, label %then5443, label %endif5445 +then5443: + %t206 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 + %t208 = load i64, ptr %t207 + %t209 = icmp sgt i64 %t208, 0 + br i1 %t209, label %then5446, label %endif5448 +then5446: + %t210 = load ptr, ptr %a1 + %t211 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t212 = load { ptr, i64, i64 }, ptr %t211 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 0, %t213 + br i1 %t214, label %range5449, label %inrange5450 +range5449: + call void @finch_panic_index(ptr @.str.3461, i64 2676, i64 0, i64 %t213) + unreachable +inrange5450: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 0 + %t217 = load %S.ast.Node, ptr %t216 + %t218 = load ptr, ptr %a1 + %t219 = icmp eq ptr %t218, null + br i1 %t219, label %panic5451, label %ok5452 +panic5451: + call void @finch_panic(ptr @.str.3463, i64 2676, ptr @.str.3464) + unreachable +ok5452: + %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 13 + %t221 = getelementptr inbounds %S.gen.FnSig, ptr %t220, i32 0, i32 1 + %t222 = load { ptr, i64, i64 }, ptr %t221 + store { ptr, i64, i64 } { ptr @.str.3462, i64 1, i64 0 }, ptr %a224 + store { ptr, i64, i64 } %t222, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + %t226 = load { ptr, i64, i64 }, ptr %a223 + store { ptr, i64, i64 } %t226, ptr %a228 + store { ptr, i64, i64 } { ptr @.str.3465, i64 46, i64 0 }, ptr %a229 + call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) + store { ptr, i64, i64 } %t226, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a227 + call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t231) + store { ptr, i64, i64 } %t231, ptr %a232 + call void @finch_str_drop(ptr %a232) + br label %endif5448 +endif5448: + %t233 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t233, i64 0) + %t234 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t234, i64 0) + %t235 = load ptr, ptr %a1 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic5453, label %ok5454 +panic5453: + call void @finch_panic(ptr @.str.3466, i64 2680, ptr @.str.3467) + unreachable +ok5454: + %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 13 + %t238 = getelementptr inbounds %S.gen.FnSig, ptr %t237, i32 0, i32 9 + %t239 = load i1, ptr %t238 + br i1 %t239, label %then5455, label %else5456 +then5455: + %t240 = load ptr, ptr %a1 + %t241 = load ptr, ptr %a1 + %t242 = load ptr, ptr %a1 + %t243 = icmp eq ptr %t242, null + br i1 %t243, label %panic5458, label %ok5459 +panic5458: + call void @finch_panic(ptr @.str.3469, i64 2681, ptr @.str.3470) + unreachable +ok5459: + %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 13 + %t245 = load %S.gen.FnSig, ptr %t244 + %t246 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t241, %S.gen.FnSig %t245) + store { ptr, i64, i64 } { ptr @.str.3468, i64 4, i64 0 }, ptr %a248 + store { ptr, i64, i64 } %t246, ptr %a249 + call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) + store { ptr, i64, i64 } %t246, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.3471, i64 53, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t256) + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch_str_drop(ptr %a257) + br label %endif5457 +else5456: + %t258 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t258, { ptr, i64, i64 } { ptr @.str.3472, i64 8, i64 0 }) + br label %endif5457 +endif5457: + %t259 = load ptr, ptr %a1 + %t260 = icmp eq ptr %t259, null + br i1 %t260, label %panic5460, label %ok5461 +panic5460: + call void @finch_panic(ptr @.str.3473, i64 2685, ptr @.str.3474) + unreachable +ok5461: + %t261 = getelementptr inbounds %S.gen.Gen, ptr %t259, i32 0, i32 9 + store i1 true, ptr %t261 + ret void +endif5445: + %t262 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i32 0, i32 1 + %t264 = load i64, ptr %t263 + %t265 = icmp eq i64 %t264, 0 + br i1 %t265, label %then5462, label %endif5464 +then5462: + %t266 = load ptr, ptr %a1 + %t267 = load %S.ast.Node, ptr %a2 + %t268 = load ptr, ptr %a1 + %t269 = icmp eq ptr %t268, null + br i1 %t269, label %panic5465, label %ok5466 +panic5465: + call void @finch_panic(ptr @.str.3476, i64 2689, ptr @.str.3477) + unreachable +ok5466: + %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 13 + %t271 = getelementptr inbounds %S.gen.FnSig, ptr %t270, i32 0, i32 1 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } { ptr @.str.3475, i64 1, i64 0 }, ptr %a274 + store { ptr, i64, i64 } %t272, ptr %a275 + call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) + %t276 = load { ptr, i64, i64 }, ptr %a273 + store { ptr, i64, i64 } %t276, ptr %a278 + store { ptr, i64, i64 } { ptr @.str.3478, i64 14, i64 0 }, ptr %a279 + call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) + store { ptr, i64, i64 } %t276, ptr %a280 + call void @finch_str_drop(ptr %a280) + %t281 = load { ptr, i64, i64 }, ptr %a277 + %t282 = load ptr, ptr %a1 + %t283 = icmp eq ptr %t282, null + br i1 %t283, label %panic5467, label %ok5468 +panic5467: + call void @finch_panic(ptr @.str.3479, i64 2689, ptr @.str.3480) + unreachable +ok5468: + %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 13 + %t285 = getelementptr inbounds %S.gen.FnSig, ptr %t284, i32 0, i32 12 + %t286 = load %S.ast.Type, ptr %t285 + %t287 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t286) + store { ptr, i64, i64 } %t281, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t281, ptr %a291 + call void @finch_str_drop(ptr %a291) + store { ptr, i64, i64 } %t287, ptr %a292 + call void @finch_str_drop(ptr %a292) + %t293 = load { ptr, i64, i64 }, ptr %a288 + call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t293) + store { ptr, i64, i64 } %t293, ptr %a294 + call void @finch_str_drop(ptr %a294) + br label %endif5464 +endif5464: + %t295 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t296 = load { ptr, i64, i64 }, ptr %t295 + %t297 = extractvalue { ptr, i64, i64 } %t296, 1 + %t298 = icmp uge i64 0, %t297 + br i1 %t298, label %range5469, label %inrange5470 +range5469: + call void @finch_panic_index(ptr @.str.3481, i64 2692, i64 0, i64 %t297) + unreachable +inrange5470: + %t299 = extractvalue { ptr, i64, i64 } %t296, 0 + %t300 = getelementptr inbounds %S.ast.Node, ptr %t299, i64 0 + %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i32 0, i32 0 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store { ptr, i64, i64 } %t302, ptr %a303 + store { ptr, i64, i64 } { ptr @.str.3482, i64 3, i64 0 }, ptr %a304 + %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) + %t306 = icmp ne i32 %t305, 0 + br i1 %t306, label %then5471, label %endif5473 +then5471: + %t307 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t308 = load { ptr, i64, i64 }, ptr %t307 + %t309 = extractvalue { ptr, i64, i64 } %t308, 1 + %t310 = icmp uge i64 0, %t309 + br i1 %t310, label %range5474, label %inrange5475 +range5474: + call void @finch_panic_index(ptr @.str.3483, i64 2693, i64 0, i64 %t309) + unreachable +inrange5475: + %t311 = extractvalue { ptr, i64, i64 } %t308, 0 + %t312 = getelementptr inbounds %S.ast.Node, ptr %t311, i64 0 + %t313 = getelementptr inbounds %S.ast.Node, ptr %t312, i32 0, i32 1 + %t314 = load { ptr, i64, i64 }, ptr %t313 + store { ptr, i64, i64 } %t314, ptr %a315 + call void @finch_str_copy(ptr %a316, ptr %a315) + %t317 = load { ptr, i64, i64 }, ptr %a316 + store { ptr, i64, i64 } %t317, ptr %a318 + %t319 = load ptr, ptr %a1 + %t320 = icmp eq ptr %t319, null + br i1 %t320, label %panic5476, label %ok5477 +panic5476: + call void @finch_panic(ptr @.str.3484, i64 2694, ptr @.str.3485) + unreachable +ok5477: + %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 10 + %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i32 0, i32 1 + %t323 = load i64, ptr %t322 + store i64 %t323, ptr %a324 + br label %while.cond5478 +while.cond5478: + %t325 = load i64, ptr %a324 + %t326 = icmp sgt i64 %t325, 0 + br i1 %t326, label %while.body5479, label %while.end5480 +while.body5479: + %t327 = load i64, ptr %a324 + %t328 = sub i64 %t327, 1 + store i64 %t328, ptr %a324 + store i64 -1, ptr %a329 + %t330 = load ptr, ptr %a1 + %t331 = icmp eq ptr %t330, null + br i1 %t331, label %panic5481, label %ok5482 +panic5481: + call void @finch_panic(ptr @.str.3486, i64 2698, ptr @.str.3487) + unreachable +ok5482: + %t332 = getelementptr inbounds %S.gen.Gen, ptr %t330, i32 0, i32 10 + %t333 = load i64, ptr %a324 + %t334 = load { ptr, i64, i64 }, ptr %t332 + %t335 = extractvalue { ptr, i64, i64 } %t334, 1 + %t336 = icmp uge i64 %t333, %t335 + br i1 %t336, label %range5483, label %inrange5484 +range5483: + call void @finch_panic_index(ptr @.str.3488, i64 2698, i64 %t333, i64 %t335) + unreachable +inrange5484: + %t337 = extractvalue { ptr, i64, i64 } %t334, 0 + %t338 = getelementptr inbounds %S.gen.Scope, ptr %t337, i64 %t333 + %t339 = getelementptr inbounds %S.gen.Scope, ptr %t338, i32 0, i32 0 + %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %t339, i32 0, i32 1 + %t341 = load i64, ptr %t340 + store i64 0, ptr %a342 + br label %for.cond5485 +for.cond5485: + %t343 = load i64, ptr %a342 + %t344 = icmp slt i64 %t343, %t341 + br i1 %t344, label %for.body5486, label %for.end5488 +for.body5486: + %t345 = load ptr, ptr %a1 + %t346 = icmp eq ptr %t345, null + br i1 %t346, label %panic5489, label %ok5490 +panic5489: + call void @finch_panic(ptr @.str.3489, i64 2699, ptr @.str.3490) + unreachable +ok5490: + %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 10 + %t348 = load i64, ptr %a324 + %t349 = load { ptr, i64, i64 }, ptr %t347 + %t350 = extractvalue { ptr, i64, i64 } %t349, 1 + %t351 = icmp uge i64 %t348, %t350 + br i1 %t351, label %range5491, label %inrange5492 +range5491: + call void @finch_panic_index(ptr @.str.3491, i64 2699, i64 %t348, i64 %t350) + unreachable +inrange5492: + %t352 = extractvalue { ptr, i64, i64 } %t349, 0 + %t353 = getelementptr inbounds %S.gen.Scope, ptr %t352, i64 %t348 + %t354 = getelementptr inbounds %S.gen.Scope, ptr %t353, i32 0, i32 0 + %t355 = load i64, ptr %a342 + %t356 = load { ptr, i64, i64 }, ptr %t354 + %t357 = extractvalue { ptr, i64, i64 } %t356, 1 + %t358 = icmp uge i64 %t355, %t357 + br i1 %t358, label %range5493, label %inrange5494 +range5493: + call void @finch_panic_index(ptr @.str.3492, i64 2699, i64 %t355, i64 %t357) + unreachable +inrange5494: + %t359 = extractvalue { ptr, i64, i64 } %t356, 0 + %t360 = getelementptr inbounds %S.gen.Var, ptr %t359, i64 %t355 + %t361 = getelementptr inbounds %S.gen.Var, ptr %t360, i32 0, i32 0 + %t362 = load { ptr, i64, i64 }, ptr %t361 + %t363 = load { ptr, i64, i64 }, ptr %a318 + store { ptr, i64, i64 } %t362, ptr %a364 + store { ptr, i64, i64 } %t363, ptr %a365 + %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) + %t367 = icmp ne i32 %t366, 0 + br label %logic.from5495 +logic.from5495: + br i1 %t367, label %logic.rhs5496, label %logic.end5497 +logic.rhs5496: + %t368 = load ptr, ptr %a1 + %t369 = icmp eq ptr %t368, null + br i1 %t369, label %panic5498, label %ok5499 +panic5498: + call void @finch_panic(ptr @.str.3493, i64 2699, ptr @.str.3494) + unreachable +ok5499: + %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 44 + %t371 = load i1, ptr %t370 + br label %logic.from5500 +logic.from5500: + br i1 %t371, label %logic.rhs5501, label %logic.end5502 +logic.rhs5501: + %t372 = load ptr, ptr %a1 + %t373 = icmp eq ptr %t372, null + br i1 %t373, label %panic5503, label %ok5504 +panic5503: + call void @finch_panic(ptr @.str.3495, i64 2699, ptr @.str.3496) + unreachable +ok5504: + %t374 = getelementptr inbounds %S.gen.Gen, ptr %t372, i32 0, i32 10 + %t375 = load i64, ptr %a324 + %t376 = load { ptr, i64, i64 }, ptr %t374 + %t377 = extractvalue { ptr, i64, i64 } %t376, 1 + %t378 = icmp uge i64 %t375, %t377 + br i1 %t378, label %range5505, label %inrange5506 +range5505: + call void @finch_panic_index(ptr @.str.3497, i64 2699, i64 %t375, i64 %t377) + unreachable +inrange5506: + %t379 = extractvalue { ptr, i64, i64 } %t376, 0 + %t380 = getelementptr inbounds %S.gen.Scope, ptr %t379, i64 %t375 + %t381 = getelementptr inbounds %S.gen.Scope, ptr %t380, i32 0, i32 0 + %t382 = load i64, ptr %a342 + %t383 = load { ptr, i64, i64 }, ptr %t381 + %t384 = extractvalue { ptr, i64, i64 } %t383, 1 + %t385 = icmp uge i64 %t382, %t384 + br i1 %t385, label %range5507, label %inrange5508 +range5507: + call void @finch_panic_index(ptr @.str.3498, i64 2699, i64 %t382, i64 %t384) + unreachable +inrange5508: + %t386 = extractvalue { ptr, i64, i64 } %t383, 0 + %t387 = getelementptr inbounds %S.gen.Var, ptr %t386, i64 %t382 + %t388 = getelementptr inbounds %S.gen.Var, ptr %t387, i32 0, i32 4 + %t389 = load i64, ptr %t388 + %t390 = load ptr, ptr %a1 + %t391 = icmp eq ptr %t390, null + br i1 %t391, label %panic5509, label %ok5510 +panic5509: + call void @finch_panic(ptr @.str.3499, i64 2699, ptr @.str.3500) + unreachable +ok5510: + %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 45 + %t393 = load i64, ptr %t392 + %t394 = icmp sge i64 %t389, %t393 + br label %logic.rend5511 +logic.rend5511: + br label %logic.end5502 +logic.end5502: + %t395 = phi i1 [ false, %logic.from5500 ], [ %t394, %logic.rend5511 ] + %t396 = xor i1 %t395, true + br label %logic.rend5512 +logic.rend5512: + br label %logic.end5497 +logic.end5497: + %t397 = phi i1 [ false, %logic.from5495 ], [ %t396, %logic.rend5512 ] + br i1 %t397, label %then5513, label %endif5515 +then5513: + %t398 = load i64, ptr %a342 + store i64 %t398, ptr %a329 + br label %endif5515 +endif5515: + br label %for.step5487 +for.step5487: + %t399 = load i64, ptr %a342 + %t400 = add i64 %t399, 1 + store i64 %t400, ptr %a342 + br label %for.cond5485 +for.end5488: + %t401 = load i64, ptr %a329 + %t402 = icmp slt i64 %t401, 0 + br i1 %t402, label %then5516, label %endif5518 +then5516: + br label %while.cond5478 +endif5518: + %t403 = load ptr, ptr %a1 + %t404 = icmp eq ptr %t403, null + br i1 %t404, label %panic5519, label %ok5520 +panic5519: + call void @finch_panic(ptr @.str.3501, i64 2706, ptr @.str.3502) + unreachable +ok5520: + %t405 = getelementptr inbounds %S.gen.Gen, ptr %t403, i32 0, i32 10 + %t406 = load i64, ptr %a324 + %t407 = load { ptr, i64, i64 }, ptr %t405 + %t408 = extractvalue { ptr, i64, i64 } %t407, 1 + %t409 = icmp uge i64 %t406, %t408 + br i1 %t409, label %range5521, label %inrange5522 +range5521: + call void @finch_panic_index(ptr @.str.3503, i64 2706, i64 %t406, i64 %t408) + unreachable +inrange5522: + %t410 = extractvalue { ptr, i64, i64 } %t407, 0 + %t411 = getelementptr inbounds %S.gen.Scope, ptr %t410, i64 %t406 + %t412 = getelementptr inbounds %S.gen.Scope, ptr %t411, i32 0, i32 0 + %t413 = load i64, ptr %a329 + %t414 = load { ptr, i64, i64 }, ptr %t412 + %t415 = extractvalue { ptr, i64, i64 } %t414, 1 + %t416 = icmp uge i64 %t413, %t415 + br i1 %t416, label %range5523, label %inrange5524 +range5523: + call void @finch_panic_index(ptr @.str.3504, i64 2706, i64 %t413, i64 %t415) + unreachable +inrange5524: + %t417 = extractvalue { ptr, i64, i64 } %t414, 0 + %t418 = getelementptr inbounds %S.gen.Var, ptr %t417, i64 %t413 + %t419 = load %S.gen.Var, ptr %t418 + store %S.gen.Var %t419, ptr %a420 + call void @finch.copy.S_gen_Var(ptr %a421, ptr %a420) + %t422 = load %S.gen.Var, ptr %a421 + store %S.gen.Var %t422, ptr %a423 + %t424 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 5 + %t425 = load i1, ptr %t424 + br label %logic.from5525 +logic.from5525: + br i1 %t425, label %logic.rhs5526, label %logic.end5527 +logic.rhs5526: + %t426 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 + %t427 = load %S.ast.Type, ptr %t426 + %t428 = load ptr, ptr %a1 + %t429 = icmp eq ptr %t428, null + br i1 %t429, label %panic5528, label %ok5529 +panic5528: + call void @finch_panic(ptr @.str.3505, i64 2707, ptr @.str.3506) + unreachable +ok5529: + %t430 = getelementptr inbounds %S.gen.Gen, ptr %t428, i32 0, i32 13 + %t431 = getelementptr inbounds %S.gen.FnSig, ptr %t430, i32 0, i32 12 + %t432 = load %S.ast.Type, ptr %t431 + %t433 = call i1 @finch.ast.same(%S.ast.Type %t427, %S.ast.Type %t432) + br label %logic.rend5530 +logic.rend5530: + br label %logic.end5527 +logic.end5527: + %t434 = phi i1 [ false, %logic.from5525 ], [ %t433, %logic.rend5530 ] + br i1 %t434, label %then5531, label %endif5533 +then5531: + %t435 = load ptr, ptr %a1 + %t436 = load ptr, ptr %a1 + %t437 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 + %t438 = load %S.ast.Type, ptr %t437 + %t439 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t436, %S.ast.Type %t438) + %t440 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 2 + %t441 = load { ptr, i64, i64 }, ptr %t440 + %t442 = call { ptr, i64, i64 } @finch.gen.load(ptr %t435, { ptr, i64, i64 } %t439, { ptr, i64, i64 } %t441) + store { ptr, i64, i64 } %t439, ptr %a443 + call void @finch_str_drop(ptr %a443) + store { ptr, i64, i64 } %t442, ptr %a444 + %t445 = load ptr, ptr %a1 + %t446 = icmp eq ptr %t445, null + br i1 %t446, label %panic5534, label %ok5535 +panic5534: + call void @finch_panic(ptr @.str.3507, i64 2709, ptr @.str.3508) + unreachable +ok5535: + %t447 = getelementptr inbounds %S.gen.Gen, ptr %t445, i32 0, i32 10 + %t448 = load i64, ptr %a324 + %t449 = load { ptr, i64, i64 }, ptr %t447 + %t450 = extractvalue { ptr, i64, i64 } %t449, 1 + %t451 = icmp uge i64 %t448, %t450 + br i1 %t451, label %range5536, label %inrange5537 +range5536: + call void @finch_panic_index(ptr @.str.3509, i64 2709, i64 %t448, i64 %t450) + unreachable +inrange5537: + %t452 = extractvalue { ptr, i64, i64 } %t449, 0 + %t453 = getelementptr inbounds %S.gen.Scope, ptr %t452, i64 %t448 + %t454 = getelementptr inbounds %S.gen.Scope, ptr %t453, i32 0, i32 0 + %t455 = load i64, ptr %a329 + %t456 = load { ptr, i64, i64 }, ptr %t454 + %t457 = extractvalue { ptr, i64, i64 } %t456, 1 + %t458 = icmp uge i64 %t455, %t457 + br i1 %t458, label %range5538, label %inrange5539 +range5538: + call void @finch_panic_index(ptr @.str.3510, i64 2709, i64 %t455, i64 %t457) + unreachable +inrange5539: + %t459 = extractvalue { ptr, i64, i64 } %t456, 0 + %t460 = getelementptr inbounds %S.gen.Var, ptr %t459, i64 %t455 + %t461 = getelementptr inbounds %S.gen.Var, ptr %t460, i32 0, i32 6 + store i1 true, ptr %t461 + %t462 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t462, i64 0) + %t463 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t463, i64 0) + %t464 = load ptr, ptr %a1 + %t465 = icmp eq ptr %t464, null + br i1 %t465, label %panic5540, label %ok5541 +panic5540: + call void @finch_panic(ptr @.str.3511, i64 2712, ptr @.str.3512) + unreachable +ok5541: + %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 10 + %t467 = load i64, ptr %a324 + %t468 = load { ptr, i64, i64 }, ptr %t466 + %t469 = extractvalue { ptr, i64, i64 } %t468, 1 + %t470 = icmp uge i64 %t467, %t469 + br i1 %t470, label %range5542, label %inrange5543 +range5542: + call void @finch_panic_index(ptr @.str.3513, i64 2712, i64 %t467, i64 %t469) + unreachable +inrange5543: + %t471 = extractvalue { ptr, i64, i64 } %t468, 0 + %t472 = getelementptr inbounds %S.gen.Scope, ptr %t471, i64 %t467 + %t473 = getelementptr inbounds %S.gen.Scope, ptr %t472, i32 0, i32 0 + %t474 = load i64, ptr %a329 + %t475 = load { ptr, i64, i64 }, ptr %t473 + %t476 = extractvalue { ptr, i64, i64 } %t475, 1 + %t477 = icmp uge i64 %t474, %t476 + br i1 %t477, label %range5544, label %inrange5545 +range5544: + call void @finch_panic_index(ptr @.str.3514, i64 2712, i64 %t474, i64 %t476) + unreachable +inrange5545: + %t478 = extractvalue { ptr, i64, i64 } %t475, 0 + %t479 = getelementptr inbounds %S.gen.Var, ptr %t478, i64 %t474 + %t480 = getelementptr inbounds %S.gen.Var, ptr %t479, i32 0, i32 6 + store i1 false, ptr %t480 + %t481 = load ptr, ptr %a1 + %t482 = load { ptr, i64, i64 }, ptr %a444 + call void @finch.gen.finishReturn(ptr %t481, { ptr, i64, i64 } %t482) + call void @finch_str_drop(ptr %a444) + call void @finch.drop.S_gen_Var(ptr %a423) + call void @finch_str_drop(ptr %a318) + ret void +endif5533: + call void @finch.drop.S_gen_Var(ptr %a423) + br label %while.end5480 +while.end5480: + call void @finch_str_drop(ptr %a318) + br label %endif5473 +endif5473: + %t483 = load ptr, ptr %a1 + %t484 = load ptr, ptr %a1 + %t485 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t486 = load { ptr, i64, i64 }, ptr %t485 + %t487 = extractvalue { ptr, i64, i64 } %t486, 1 + %t488 = icmp uge i64 0, %t487 + br i1 %t488, label %range5546, label %inrange5547 +range5546: + call void @finch_panic_index(ptr @.str.3515, i64 2719, i64 0, i64 %t487) + unreachable +inrange5547: + %t489 = extractvalue { ptr, i64, i64 } %t486, 0 + %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 + %t491 = load %S.ast.Node, ptr %t490 + %t492 = load ptr, ptr %a1 + %t493 = icmp eq ptr %t492, null + br i1 %t493, label %panic5548, label %ok5549 +panic5548: + call void @finch_panic(ptr @.str.3516, i64 2719, ptr @.str.3517) + unreachable +ok5549: + %t494 = getelementptr inbounds %S.gen.Gen, ptr %t492, i32 0, i32 13 + %t495 = getelementptr inbounds %S.gen.FnSig, ptr %t494, i32 0, i32 12 + %t496 = load %S.ast.Type, ptr %t495 + %t497 = call %S.gen.Val @finch.gen.exprWant(ptr %t484, %S.ast.Node %t491, %S.ast.Type %t496) + %t498 = load ptr, ptr %a1 + %t499 = icmp eq ptr %t498, null + br i1 %t499, label %panic5550, label %ok5551 +panic5550: + call void @finch_panic(ptr @.str.3518, i64 2719, ptr @.str.3519) + unreachable +ok5551: + %t500 = getelementptr inbounds %S.gen.Gen, ptr %t498, i32 0, i32 13 + %t501 = getelementptr inbounds %S.gen.FnSig, ptr %t500, i32 0, i32 12 + %t502 = load %S.ast.Type, ptr %t501 + %t503 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t504 = load { ptr, i64, i64 }, ptr %t503 + %t505 = extractvalue { ptr, i64, i64 } %t504, 1 + %t506 = icmp uge i64 0, %t505 + br i1 %t506, label %range5552, label %inrange5553 +range5552: + call void @finch_panic_index(ptr @.str.3520, i64 2719, i64 0, i64 %t505) + unreachable +inrange5553: + %t507 = extractvalue { ptr, i64, i64 } %t504, 0 + %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 0 + %t509 = load %S.ast.Node, ptr %t508 + %t510 = call %S.gen.Val @finch.gen.coerce(ptr %t483, %S.gen.Val %t497, %S.ast.Type %t502, %S.ast.Node %t509, { ptr, i64, i64 } { ptr @.str.3521, i64 18, i64 0 }) + store %S.gen.Val %t497, ptr %a511 + call void @finch.drop.S_gen_Val(ptr %a511) + store %S.gen.Val %t510, ptr %a512 + %t513 = load ptr, ptr %a1 + %t514 = load %S.gen.Val, ptr %a512 + %t515 = call { ptr, i64, i64 } @finch.gen.own(ptr %t513, %S.gen.Val %t514) + store { ptr, i64, i64 } %t515, ptr %a516 + %t517 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t517, i64 0) + %t518 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t518, i64 0) + %t519 = load ptr, ptr %a1 + %t520 = load { ptr, i64, i64 }, ptr %a516 + call void @finch.gen.finishReturn(ptr %t519, { ptr, i64, i64 } %t520) + call void @finch_str_drop(ptr %a516) + call void @finch.drop.S_gen_Val(ptr %a512) + ret void +} + +define internal void @finch.gen.finishReturn(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic5554, label %ok5555 +panic5554: + call void @finch_panic(ptr @.str.3522, i64 2727, ptr @.str.3523) + unreachable +ok5555: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %t5, i32 0, i32 9 + %t7 = load i1, ptr %t6 + br i1 %t7, label %then5556, label %else5557 +then5556: + %t8 = load ptr, ptr %a1 + %t9 = load ptr, ptr %a1 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic5559, label %ok5560 +panic5559: + call void @finch_panic(ptr @.str.3525, i64 2728, ptr @.str.3526) + unreachable +ok5560: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 + %t13 = load %S.gen.FnSig, ptr %t12 + %t14 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t9, %S.gen.FnSig %t13) + store { ptr, i64, i64 } { ptr @.str.3524, i64 12, i64 0 }, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.3527, i64 28, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + %t25 = call { ptr, i64, i64 } @finch.gen.op(ptr %t8, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t24, ptr %a26 + call void @finch_str_drop(ptr %a26) + store { ptr, i64, i64 } %t25, ptr %a27 + %t28 = load ptr, ptr %a1 + %t29 = load ptr, ptr %a1 + %t30 = load ptr, ptr %a1 + %t31 = icmp eq ptr %t30, null + br i1 %t31, label %panic5561, label %ok5562 +panic5561: + call void @finch_panic(ptr @.str.3529, i64 2729, ptr @.str.3530) + unreachable +ok5562: + %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 13 + %t33 = load %S.gen.FnSig, ptr %t32 + %t34 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t29, %S.gen.FnSig %t33) + store { ptr, i64, i64 } { ptr @.str.3528, i64 12, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.3531, i64 1, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t44, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t44, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.3532, i64 2, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load ptr, ptr %a1 + %t57 = load ptr, ptr %a1 + %t58 = icmp eq ptr %t57, null + br i1 %t58, label %panic5563, label %ok5564 +panic5563: + call void @finch_panic(ptr @.str.3533, i64 2729, ptr @.str.3534) + unreachable +ok5564: + %t59 = getelementptr inbounds %S.gen.Gen, ptr %t57, i32 0, i32 13 + %t60 = getelementptr inbounds %S.gen.FnSig, ptr %t59, i32 0, i32 12 + %t61 = load %S.ast.Type, ptr %t60 + %t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t56, %S.ast.Type %t61) + store { ptr, i64, i64 } %t55, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t55, ptr %a66 + call void @finch_str_drop(ptr %a66) + store { ptr, i64, i64 } %t62, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t68, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.3535, i64 1, i64 0 }, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + %t74 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t73, ptr %a76 + store { ptr, i64, i64 } %t74, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t73, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3536, i64 3, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + %t85 = call { ptr, i64, i64 } @finch.gen.op(ptr %t28, { ptr, i64, i64 } %t84) + store { ptr, i64, i64 } %t84, ptr %a86 + call void @finch_str_drop(ptr %a86) + store { ptr, i64, i64 } %t85, ptr %a87 + %t88 = load ptr, ptr %a1 + %t89 = load ptr, ptr %a1 + %t90 = load ptr, ptr %a1 + %t91 = icmp eq ptr %t90, null + br i1 %t91, label %panic5565, label %ok5566 +panic5565: + call void @finch_panic(ptr @.str.3538, i64 2730, ptr @.str.3539) + unreachable +ok5566: + %t92 = getelementptr inbounds %S.gen.Gen, ptr %t90, i32 0, i32 13 + %t93 = load %S.gen.FnSig, ptr %t92 + %t94 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t89, %S.gen.FnSig %t93) + store { ptr, i64, i64 } { ptr @.str.3537, i64 4, i64 0 }, ptr %a96 + store { ptr, i64, i64 } %t94, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t99, ptr %a101 + store { ptr, i64, i64 } { ptr @.str.3540, i64 1, i64 0 }, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t99, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + %t105 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t104, ptr %a107 + store { ptr, i64, i64 } %t105, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } %t110) + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_drop(ptr %a111) + call void @finch_str_drop(ptr %a87) + call void @finch_str_drop(ptr %a27) + br label %endif5558 +else5557: + %t112 = load ptr, ptr %a1 + %t113 = load ptr, ptr %a1 + %t114 = load ptr, ptr %a1 + %t115 = icmp eq ptr %t114, null + br i1 %t115, label %panic5567, label %ok5568 +panic5567: + call void @finch_panic(ptr @.str.3542, i64 2732, ptr @.str.3543) + unreachable +ok5568: + %t116 = getelementptr inbounds %S.gen.Gen, ptr %t114, i32 0, i32 13 + %t117 = getelementptr inbounds %S.gen.FnSig, ptr %t116, i32 0, i32 12 + %t118 = load %S.ast.Type, ptr %t117 + %t119 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t113, %S.ast.Type %t118) + store { ptr, i64, i64 } { ptr @.str.3541, i64 4, i64 0 }, ptr %a121 + store { ptr, i64, i64 } %t119, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t124, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.3544, i64 1, i64 0 }, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load { ptr, i64, i64 }, ptr %a125 + %t130 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t129, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t129, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + call void @finch.gen.emit(ptr %t112, { ptr, i64, i64 } %t135) + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_drop(ptr %a136) + br label %endif5558 +endif5558: + %t137 = load ptr, ptr %a1 + %t138 = icmp eq ptr %t137, null + br i1 %t138, label %panic5569, label %ok5570 +panic5569: + call void @finch_panic(ptr @.str.3545, i64 2734, ptr @.str.3546) + unreachable +ok5570: + %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 9 + store i1 true, ptr %t139 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.entryTy(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t5 = load { ptr, i64, i64 }, ptr %t4 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 0, %t6 + br i1 %t7, label %range5571, label %inrange5572 +range5571: + call void @finch_panic_index(ptr @.str.3548, i64 2746, i64 0, i64 %t6) + unreachable +inrange5572: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 0 + %t10 = load %S.ast.Type, ptr %t9 + %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t10) + store { ptr, i64, i64 } { ptr @.str.3547, i64 7, i64 0 }, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t11, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.3549, i64 2, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + %t22 = load ptr, ptr %a1 + %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t24 = load { ptr, i64, i64 }, ptr %t23 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 1, %t25 + br i1 %t26, label %range5573, label %inrange5574 +range5573: + call void @finch_panic_index(ptr @.str.3550, i64 2746, i64 1, i64 %t25) + unreachable +inrange5574: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.ast.Type, ptr %t27, i64 1 + %t29 = load %S.ast.Type, ptr %t28 + %t30 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t22, %S.ast.Type %t29) + store { ptr, i64, i64 } %t21, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t21, ptr %a34 + call void @finch_str_drop(ptr %a34) + store { ptr, i64, i64 } %t30, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t36, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.3551, i64 2, i64 0 }, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t36, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + ret { ptr, i64, i64 } %t41 +} + +define internal { ptr, i64, i64 } @finch.gen.entrySize(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load %S.ast.Type, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t3, %S.ast.Type %t4) + store { ptr, i64, i64 } { ptr @.str.3552, i64 29, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t5, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t5, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.3553, i64 26, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + ret { ptr, i64, i64 } %t15 +} + +define internal { ptr, i64, i64 } @finch.gen.entryAt(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load ptr, ptr %a1 + %t7 = load ptr, ptr %a1 + %t8 = load %S.ast.Type, ptr %a3 + %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t7, %S.ast.Type %t8) + store { ptr, i64, i64 } { ptr @.str.3555, i64 23, i64 0 }, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t9, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3556, i64 6, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + %t20 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t19, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t19, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.3557, i64 14, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + %t31 = call { ptr, i64, i64 } @finch.gen.op(ptr %t6, { ptr, i64, i64 } %t30) + store { ptr, i64, i64 } %t30, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = call { ptr, i64, i64 } @finch.gen.load(ptr %t5, { ptr, i64, i64 } { ptr @.str.3554, i64 3, i64 0 }, { ptr, i64, i64 } %t31) + store { ptr, i64, i64 } %t31, ptr %a34 + call void @finch_str_drop(ptr %a34) + store { ptr, i64, i64 } %t33, ptr %a35 + %t36 = load ptr, ptr %a1 + %t37 = load ptr, ptr %a1 + %t38 = load %S.ast.Type, ptr %a3 + %t39 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t37, %S.ast.Type %t38) + store { ptr, i64, i64 } { ptr @.str.3558, i64 23, i64 0 }, ptr %a41 + store { ptr, i64, i64 } %t39, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t44, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.3559, i64 6, i64 0 }, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + store { ptr, i64, i64 } %t44, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a45 + %t50 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t49, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.3560, i64 6, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t60, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = call { ptr, i64, i64 } @finch.gen.op(ptr %t36, { ptr, i64, i64 } %t66) + store { ptr, i64, i64 } %t66, ptr %a68 + call void @finch_str_drop(ptr %a68) + call void @finch_str_drop(ptr %a35) + ret { ptr, i64, i64 } %t67 +} + +define internal { ptr, i64, i64 } @finch.gen.entryField(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i64 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca i64, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load ptr, ptr %a1 + %t7 = load %S.ast.Type, ptr %a3 + %t8 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t6, %S.ast.Type %t7) + store { ptr, i64, i64 } { ptr @.str.3561, i64 23, i64 0 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.3562, i64 6, i64 0 }, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t18, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.3563, i64 13, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t29, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + %t39 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t38) + store { ptr, i64, i64 } %t38, ptr %a40 + call void @finch_str_drop(ptr %a40) + ret { ptr, i64, i64 } %t39 +} + +define internal { ptr, i64, i64 } @finch.gen.mapArgs(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.3564, i64 1, i64 0 }, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 0, %t8 + br i1 %t9, label %range5575, label %inrange5576 +range5575: + call void @finch_panic_index(ptr @.str.3565, i64 2766, i64 0, i64 %t8) + unreachable +inrange5576: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 + %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.3566, i64 3, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br i1 %t17, label %then5577, label %endif5579 +then5577: + %t18 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.3567, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t18, ptr %a19 + call void @finch_str_drop(ptr %a19) + br label %endif5579 +endif5579: + %t20 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.3568, i64 4, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.3569, i64 6, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t29, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.3570, i64 6, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load ptr, ptr %a1 + %t42 = load %S.ast.Type, ptr %a4 + %t43 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t41, %S.ast.Type %t42) + store { ptr, i64, i64 } %t40, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t40, ptr %a47 + call void @finch_str_drop(ptr %a47) + store { ptr, i64, i64 } %t43, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.3571, i64 6, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + %t55 = load ptr, ptr %a1 + %t56 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t57 = load { ptr, i64, i64 }, ptr %t56 + %t58 = extractvalue { ptr, i64, i64 } %t57, 1 + %t59 = icmp uge i64 0, %t58 + br i1 %t59, label %range5580, label %inrange5581 +range5580: + call void @finch_panic_index(ptr @.str.3572, i64 2769, i64 0, i64 %t58) + unreachable +inrange5581: + %t60 = extractvalue { ptr, i64, i64 } %t57, 0 + %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i64 0 + %t62 = load %S.ast.Type, ptr %t61 + %t63 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t55, %S.ast.Type %t62) + store { ptr, i64, i64 } %t54, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t54, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.3573, i64 6, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t74, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t74, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + call void @finch_str_drop(ptr %a5) + ret { ptr, i64, i64 } %t80 +} + +define internal { ptr, i64, i64 } @finch.gen.mapFind(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + %t8 = load { ptr, i64, i64 }, ptr %a3 + %t9 = load %S.ast.Type, ptr %a4 + %t10 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, %S.ast.Type %t9) + store { ptr, i64, i64 } { ptr @.str.3574, i64 25, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t10, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.3575, i64 1, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + %t21 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t20) + store { ptr, i64, i64 } %t20, ptr %a22 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t21 +} + +define internal { ptr, i64, i64 } @finch.gen.defaultVal(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.3576, i64 6, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.from5582 +logic.from5582: + br i1 %t9, label %logic.rhs5583, label %logic.end5584 +logic.rhs5583: + %t10 = load ptr, ptr %a1 + %t11 = load %S.ast.Type, ptr %a2 + %t12 = call i1 @finch.gen.hasDefaults(ptr %t10, %S.ast.Type %t11) + br label %logic.rend5585 +logic.rend5585: + br label %logic.end5584 +logic.end5584: + %t13 = phi i1 [ false, %logic.from5582 ], [ %t12, %logic.rend5585 ] + br i1 %t13, label %then5586, label %endif5588 +then5586: + store { ptr, i64, i64 } zeroinitializer, ptr %a14 + store { ptr, i64, i64 } zeroinitializer, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = load ptr, ptr %a1 + %t18 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = call i64 @finch.gen.findStruct(ptr %t17, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) + %t23 = load { ptr, i64, i64 }, ptr %a14 + %t24 = load { ptr, i64, i64 }, ptr %a15 + %t25 = load %S.ast.Node, ptr %a3 + %t26 = call %S.gen.Val @finch.gen.construct(ptr %t16, i64 %t22, { ptr, i64, i64 } %t23, { ptr, i64, i64 } %t24, %S.ast.Node %t25) + %t27 = extractvalue %S.gen.Val %t26, 0 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_copy(ptr %a29, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store %S.gen.Val %t26, ptr %a31 + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.arr_str(ptr %a15) + call void @finch.drop.arr_S_ast_Node(ptr %a14) + ret { ptr, i64, i64 } %t30 +endif5588: + %t32 = load %S.ast.Type, ptr %a2 + %t33 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t32) + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.gen.mapSlot(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.gen.Val %p3, i1 %p4, %S.ast.Node %p5) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a5 = alloca i1, align 16 + %a6 = alloca %S.ast.Node, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.ast.Type, align 16 + %a130 = alloca %S.gen.Val, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.gen.Val %p3, ptr %a4 + store i1 %p4, ptr %a5 + store %S.ast.Node %p5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = load %S.gen.Val, ptr %a4 + %t9 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t7, %S.gen.Val %t8) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t11, { ptr, i64, i64 } { ptr @.str.3577, i64 3, i64 0 }) + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.gen.store(ptr %t14, { ptr, i64, i64 } { ptr @.str.3578, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3579, i64 1, i64 0 }, { ptr, i64, i64 } %t15) + %t16 = load ptr, ptr %a1 + %t17 = load ptr, ptr %a1 + %t18 = load { ptr, i64, i64 }, ptr %a2 + %t19 = load { ptr, i64, i64 }, ptr %a10 + %t20 = load %S.ast.Type, ptr %a3 + %t21 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t17, { ptr, i64, i64 } %t18, { ptr, i64, i64 } %t19, %S.ast.Type %t20) + store { ptr, i64, i64 } { ptr @.str.3580, i64 25, i64 0 }, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.3581, i64 6, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t31, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t31, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.3582, i64 1, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + %t43 = call { ptr, i64, i64 } @finch.gen.op(ptr %t16, { ptr, i64, i64 } %t42) + store { ptr, i64, i64 } %t42, ptr %a44 + call void @finch_str_drop(ptr %a44) + store { ptr, i64, i64 } %t43, ptr %a45 + %t46 = load ptr, ptr %a1 + %t47 = load { ptr, i64, i64 }, ptr %a2 + %t48 = load %S.ast.Type, ptr %a3 + %t49 = load { ptr, i64, i64 }, ptr %a45 + %t50 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t46, { ptr, i64, i64 } %t47, %S.ast.Type %t48, { ptr, i64, i64 } %t49) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t52, { ptr, i64, i64 } { ptr @.str.3583, i64 7, i64 0 }) + store { ptr, i64, i64 } %t53, ptr %a54 + %t55 = load ptr, ptr %a1 + %t56 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t55, { ptr, i64, i64 } { ptr @.str.3584, i64 8, i64 0 }) + store { ptr, i64, i64 } %t56, ptr %a57 + %t58 = load ptr, ptr %a1 + %t59 = load ptr, ptr %a1 + %t60 = load ptr, ptr %a1 + %t61 = load { ptr, i64, i64 }, ptr %a13 + %t62 = call { ptr, i64, i64 } @finch.gen.load(ptr %t60, { ptr, i64, i64 } { ptr @.str.3586, i64 3, i64 0 }, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } { ptr @.str.3585, i64 12, i64 0 }, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t67, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.3587, i64 3, i64 0 }, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + %t73 = call { ptr, i64, i64 } @finch.gen.op(ptr %t59, { ptr, i64, i64 } %t72) + store { ptr, i64, i64 } %t72, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a54 + %t76 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.gen.condBr(ptr %t58, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load ptr, ptr %a1 + %t79 = load { ptr, i64, i64 }, ptr %a54 + call void @finch.gen.label(ptr %t78, { ptr, i64, i64 } %t79) + %t80 = load ptr, ptr %a1 + %t81 = load ptr, ptr %a1 + %t82 = load { ptr, i64, i64 }, ptr %a51 + %t83 = load %S.ast.Type, ptr %a3 + %t84 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t81, { ptr, i64, i64 } %t82, %S.ast.Type %t83, i64 1) + %t85 = load { ptr, i64, i64 }, ptr %a10 + %t86 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + %t88 = extractvalue { ptr, i64, i64 } %t87, 1 + %t89 = icmp uge i64 0, %t88 + br i1 %t89, label %range5589, label %inrange5590 +range5589: + call void @finch_panic_index(ptr @.str.3588, i64 2797, i64 0, i64 %t88) + unreachable +inrange5590: + %t90 = extractvalue { ptr, i64, i64 } %t87, 0 + %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i64 0 + %t92 = load %S.ast.Type, ptr %t91 + call void @finch.gen.copyAt(ptr %t80, { ptr, i64, i64 } %t84, { ptr, i64, i64 } %t85, %S.ast.Type %t92) + store { ptr, i64, i64 } %t84, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load i1, ptr %a5 + br i1 %t94, label %then5591, label %endif5593 +then5591: + %t95 = load ptr, ptr %a1 + %t96 = load ptr, ptr %a1 + %t97 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t98 = load { ptr, i64, i64 }, ptr %t97 + %t99 = extractvalue { ptr, i64, i64 } %t98, 1 + %t100 = icmp uge i64 1, %t99 + br i1 %t100, label %range5594, label %inrange5595 +range5594: + call void @finch_panic_index(ptr @.str.3589, i64 2799, i64 1, i64 %t99) + unreachable +inrange5595: + %t101 = extractvalue { ptr, i64, i64 } %t98, 0 + %t102 = getelementptr inbounds %S.ast.Type, ptr %t101, i64 1 + %t103 = load %S.ast.Type, ptr %t102 + %t104 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t103) + %t105 = load ptr, ptr %a1 + %t106 = load ptr, ptr %a1 + %t107 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t108 = load { ptr, i64, i64 }, ptr %t107 + %t109 = extractvalue { ptr, i64, i64 } %t108, 1 + %t110 = icmp uge i64 1, %t109 + br i1 %t110, label %range5596, label %inrange5597 +range5596: + call void @finch_panic_index(ptr @.str.3590, i64 2799, i64 1, i64 %t109) + unreachable +inrange5597: + %t111 = extractvalue { ptr, i64, i64 } %t108, 0 + %t112 = getelementptr inbounds %S.ast.Type, ptr %t111, i64 1 + %t113 = load %S.ast.Type, ptr %t112 + %t114 = load %S.ast.Node, ptr %a6 + %t115 = call { ptr, i64, i64 } @finch.gen.defaultVal(ptr %t106, %S.ast.Type %t113, %S.ast.Node %t114) + %t116 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t115, 0 + %t117 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = extractvalue { ptr, i64, i64 } %t118, 1 + %t120 = icmp uge i64 1, %t119 + br i1 %t120, label %range5598, label %inrange5599 +range5598: + call void @finch_panic_index(ptr @.str.3591, i64 2799, i64 1, i64 %t119) + unreachable +inrange5599: + %t121 = extractvalue { ptr, i64, i64 } %t118, 0 + %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 1 + %t123 = load %S.ast.Type, ptr %t122 + store %S.ast.Type %t123, ptr %a124 + call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) + %t126 = load %S.ast.Type, ptr %a125 + %t127 = insertvalue %S.gen.Val %t116, %S.ast.Type %t126, 1 + %t128 = insertvalue %S.gen.Val %t127, i1 true, 2 + %t129 = call { ptr, i64, i64 } @finch.gen.own(ptr %t105, %S.gen.Val %t128) + store %S.gen.Val %t128, ptr %a130 + call void @finch.drop.S_gen_Val(ptr %a130) + %t131 = load ptr, ptr %a1 + %t132 = load { ptr, i64, i64 }, ptr %a51 + %t133 = load %S.ast.Type, ptr %a3 + %t134 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t131, { ptr, i64, i64 } %t132, %S.ast.Type %t133, i64 2) + call void @finch.gen.store(ptr %t95, { ptr, i64, i64 } %t104, { ptr, i64, i64 } %t129, { ptr, i64, i64 } %t134) + store { ptr, i64, i64 } %t104, ptr %a135 + call void @finch_str_drop(ptr %a135) + store { ptr, i64, i64 } %t129, ptr %a136 + call void @finch_str_drop(ptr %a136) + store { ptr, i64, i64 } %t134, ptr %a137 + call void @finch_str_drop(ptr %a137) + br label %endif5593 +endif5593: + %t138 = load ptr, ptr %a1 + %t139 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.gen.br(ptr %t138, { ptr, i64, i64 } %t139) + %t140 = load ptr, ptr %a1 + %t141 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.gen.label(ptr %t140, { ptr, i64, i64 } %t141) + %t142 = load { ptr, i64, i64 }, ptr %a51 + call void @finch_str_drop(ptr %a57) + call void @finch_str_drop(ptr %a54) + call void @finch_str_drop(ptr %a45) + call void @finch_str_drop(ptr %a13) + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t142 +} + +define internal %S.gen.Ref @finch.gen.mapIndex(ptr %p0, %S.ast.Node %p1, %S.gen.Ref %p2, %S.ast.Type %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.Ref, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca i1, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a14 = alloca %S.ast.Type, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a24 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.ast.Type, align 16 + %a27 = alloca %S.ast.Type, align 16 + %a48 = alloca %S.gen.Val, align 16 + %a49 = alloca %S.gen.Val, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca %S.ast.Type, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a220 = alloca %S.ast.Type, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca %S.ast.Type, align 16 + %a239 = alloca %S.ast.Type, align 16 + %a242 = alloca %S.gen.Val, align 16 + %a256 = alloca %S.ast.Type, align 16 + %a257 = alloca %S.ast.Type, align 16 + %a262 = alloca %S.gen.Val, align 16 + %a268 = alloca %S.gen.Val, align 16 + %a269 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.Ref %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 0, %t8 + br i1 %t9, label %range5600, label %inrange5601 +range5600: + call void @finch_panic_index(ptr @.str.3592, i64 2808, i64 0, i64 %t8) + unreachable +inrange5601: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 + %t12 = load %S.ast.Type, ptr %t11 + store %S.ast.Type %t12, ptr %a13 + call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) + %t15 = load %S.ast.Type, ptr %a14 + store %S.ast.Type %t15, ptr %a16 + %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 1, %t19 + br i1 %t20, label %range5602, label %inrange5603 +range5602: + call void @finch_panic_index(ptr @.str.3593, i64 2809, i64 1, i64 %t19) + unreachable +inrange5603: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 + %t23 = load %S.ast.Type, ptr %t22 + store %S.ast.Type %t23, ptr %a24 + call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) + %t26 = load %S.ast.Type, ptr %a25 + store %S.ast.Type %t26, ptr %a27 + %t28 = load ptr, ptr %a1 + %t29 = load ptr, ptr %a1 + %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t31 = load { ptr, i64, i64 }, ptr %t30 + %t32 = extractvalue { ptr, i64, i64 } %t31, 1 + %t33 = icmp uge i64 1, %t32 + br i1 %t33, label %range5604, label %inrange5605 +range5604: + call void @finch_panic_index(ptr @.str.3594, i64 2810, i64 1, i64 %t32) + unreachable +inrange5605: + %t34 = extractvalue { ptr, i64, i64 } %t31, 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 1 + %t36 = load %S.ast.Node, ptr %t35 + %t37 = load %S.ast.Type, ptr %a16 + %t38 = call %S.gen.Val @finch.gen.exprWant(ptr %t29, %S.ast.Node %t36, %S.ast.Type %t37) + %t39 = load %S.ast.Type, ptr %a16 + %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 1, %t42 + br i1 %t43, label %range5606, label %inrange5607 +range5606: + call void @finch_panic_index(ptr @.str.3595, i64 2810, i64 1, i64 %t42) + unreachable +inrange5607: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 1 + %t46 = load %S.ast.Node, ptr %t45 + %t47 = call %S.gen.Val @finch.gen.coerce(ptr %t28, %S.gen.Val %t38, %S.ast.Type %t39, %S.ast.Node %t46, { ptr, i64, i64 } { ptr @.str.3596, i64 7, i64 0 }) + store %S.gen.Val %t38, ptr %a48 + call void @finch.drop.S_gen_Val(ptr %a48) + store %S.gen.Val %t47, ptr %a49 + %t50 = load i1, ptr %a5 + br i1 %t50, label %then5608, label %endif5610 +then5608: + %t51 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t52 = load i1, ptr %t51 + %t53 = xor i1 %t52, true + br i1 %t53, label %then5611, label %endif5613 +then5611: + %t54 = load ptr, ptr %a1 + %t55 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } { ptr @.str.3597, i64 44, i64 0 }) + br label %endif5613 +endif5613: + %t56 = load ptr, ptr %a1 + %t57 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t58 = getelementptr inbounds %S.gen.Place, ptr %t57, i32 0, i32 0 + %t59 = load { ptr, i64, i64 }, ptr %t58 + %t60 = load %S.ast.Type, ptr %a4 + %t61 = load %S.gen.Val, ptr %a49 + %t62 = load %S.ast.Node, ptr %a2 + %t63 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t56, { ptr, i64, i64 } %t59, %S.ast.Type %t60, %S.gen.Val %t61, i1 true, %S.ast.Node %t62) + store { ptr, i64, i64 } %t63, ptr %a64 + %t65 = load ptr, ptr %a1 + %t66 = load %S.gen.Val, ptr %a49 + call void @finch.gen.release(ptr %t65, %S.gen.Val %t66) + %t67 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t68 = load ptr, ptr %a1 + %t69 = load { ptr, i64, i64 }, ptr %a64 + %t70 = load %S.ast.Type, ptr %a4 + %t71 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t68, { ptr, i64, i64 } %t69, %S.ast.Type %t70, i64 2) + %t72 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t71, 0 + %t73 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t73, ptr %a74 + call void @finch.copy.S_ast_Type(ptr %a75, ptr %a74) + %t76 = load %S.ast.Type, ptr %a75 + %t77 = insertvalue %S.gen.Place %t72, %S.ast.Type %t76, 1 + %t78 = insertvalue %S.gen.Ref %t67, %S.gen.Place %t77, 1 + call void @finch_str_drop(ptr %a64) + call void @finch.drop.S_gen_Val(ptr %a49) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret %S.gen.Ref %t78 +endif5610: + store { ptr, i64, i64 } { ptr @.str.3598, i64 0, i64 0 }, ptr %a79 + %t80 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t81 = load i1, ptr %t80 + br i1 %t81, label %then5614, label %else5615 +then5614: + %t82 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t83 = getelementptr inbounds %S.gen.Place, ptr %t82, i32 0, i32 0 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } %t84, ptr %a85 + call void @finch_str_copy(ptr %a86, ptr %a85) + %t87 = load { ptr, i64, i64 }, ptr %a86 + %t88 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t87, ptr %a79 + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_drop(ptr %a89) + br label %endif5616 +else5615: + %t90 = load ptr, ptr %a1 + %t91 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t92 = load %S.gen.Val, ptr %t91 + %t93 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t90, %S.gen.Val %t92) + %t94 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t93, ptr %a79 + store { ptr, i64, i64 } %t94, ptr %a95 + call void @finch_str_drop(ptr %a95) + br label %endif5616 +endif5616: + %t96 = load ptr, ptr %a1 + %t97 = load %S.gen.Val, ptr %a49 + %t98 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t96, %S.gen.Val %t97) + store { ptr, i64, i64 } %t98, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = load { ptr, i64, i64 }, ptr %a79 + %t102 = load { ptr, i64, i64 }, ptr %a99 + %t103 = load %S.ast.Type, ptr %a4 + %t104 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t100, { ptr, i64, i64 } %t101, { ptr, i64, i64 } %t102, %S.ast.Type %t103) + store { ptr, i64, i64 } %t104, ptr %a105 + %t106 = load ptr, ptr %a1 + %t107 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t106, { ptr, i64, i64 } { ptr @.str.3599, i64 11, i64 0 }) + store { ptr, i64, i64 } %t107, ptr %a108 + %t109 = load ptr, ptr %a1 + %t110 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t109, { ptr, i64, i64 } { ptr @.str.3600, i64 9, i64 0 }) + store { ptr, i64, i64 } %t110, ptr %a111 + %t112 = load ptr, ptr %a1 + %t113 = load ptr, ptr %a1 + %t114 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.3601, i64 13, i64 0 }, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.3602, i64 3, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = call { ptr, i64, i64 } @finch.gen.op(ptr %t113, { ptr, i64, i64 } %t123) + store { ptr, i64, i64 } %t123, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a108 + %t127 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.condBr(ptr %t112, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t127) + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load ptr, ptr %a1 + %t130 = load { ptr, i64, i64 }, ptr %a108 + call void @finch.gen.label(ptr %t129, { ptr, i64, i64 } %t130) + %t131 = load ptr, ptr %a1 + %t132 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t131, { ptr, i64, i64 } { ptr @.str.3603, i64 17, i64 0 }) + store { ptr, i64, i64 } %t132, ptr %a133 + %t134 = load ptr, ptr %a1 + %t135 = load { ptr, i64, i64 }, ptr %a133 + call void @finch.gen.store(ptr %t134, { ptr, i64, i64 } { ptr @.str.3604, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3605, i64 15, i64 0 }, { ptr, i64, i64 } %t135) + %t136 = load ptr, ptr %a1 + %t137 = load { ptr, i64, i64 }, ptr %a133 + %t138 = getelementptr inbounds %S.gen.Val, ptr %a49, i32 0, i32 0 + %t139 = load { ptr, i64, i64 }, ptr %t138 + %t140 = load %S.ast.Type, ptr %a16 + call void @finch.gen.emitFormat(ptr %t136, { ptr, i64, i64 } %t137, { ptr, i64, i64 } %t139, %S.ast.Type %t140, i1 true) + %t141 = load ptr, ptr %a1 + %t142 = load ptr, ptr %a1 + %t143 = load ptr, ptr %a1 + %t144 = icmp eq ptr %t143, null + br i1 %t144, label %panic5617, label %ok5618 +panic5617: + call void @finch_panic(ptr @.str.3607, i64 2834, ptr @.str.3608) + unreachable +ok5618: + %t145 = getelementptr inbounds %S.gen.Gen, ptr %t143, i32 0, i32 1 + %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t147 = load i64, ptr %t146 + %t148 = load { ptr, i64, i64 }, ptr %t145 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 %t147, %t149 + br i1 %t150, label %range5619, label %inrange5620 +range5619: + call void @finch_panic_index(ptr @.str.3609, i64 2834, i64 %t147, i64 %t149) + unreachable +inrange5620: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 %t147 + %t153 = load { ptr, i64, i64 }, ptr %t152 + %t154 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t142, { ptr, i64, i64 } %t153) + store { ptr, i64, i64 } { ptr @.str.3606, i64 33, i64 0 }, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t154, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t159, ptr %a161 + store { ptr, i64, i64 } { ptr @.str.3610, i64 6, i64 0 }, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + store { ptr, i64, i64 } %t159, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a160 + %t165 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t166 = load i64, ptr %t165 + call void @finch_str_from_int(ptr %a167, i64 %t166) + %t168 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t164, ptr %a170 + store { ptr, i64, i64 } %t168, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t164, ptr %a172 + call void @finch_str_drop(ptr %a172) + store { ptr, i64, i64 } %t168, ptr %a173 + call void @finch_str_drop(ptr %a173) + %t174 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t174, ptr %a176 + store { ptr, i64, i64 } { ptr @.str.3611, i64 6, i64 0 }, ptr %a177 + call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) + store { ptr, i64, i64 } %t174, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a175 + %t180 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t179, ptr %a182 + store { ptr, i64, i64 } %t180, ptr %a183 + call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183) + store { ptr, i64, i64 } %t179, ptr %a184 + call void @finch_str_drop(ptr %a184) + %t185 = load { ptr, i64, i64 }, ptr %a181 + store { ptr, i64, i64 } %t185, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.3612, i64 1, i64 0 }, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t185, ptr %a189 + call void @finch_str_drop(ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a186 + call void @finch.gen.emit(ptr %t141, { ptr, i64, i64 } %t190) + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t192, { ptr, i64, i64 } { ptr @.str.3613, i64 11, i64 0 }) + %t193 = load ptr, ptr %a1 + %t194 = icmp eq ptr %t193, null + br i1 %t194, label %panic5621, label %ok5622 +panic5621: + call void @finch_panic(ptr @.str.3614, i64 2836, ptr @.str.3615) + unreachable +ok5622: + %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 + store i1 true, ptr %t195 + %t196 = load ptr, ptr %a1 + %t197 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.label(ptr %t196, { ptr, i64, i64 } %t197) + %t198 = load ptr, ptr %a1 + %t199 = load %S.gen.Val, ptr %a49 + call void @finch.gen.release(ptr %t198, %S.gen.Val %t199) + %t200 = load ptr, ptr %a1 + %t201 = load ptr, ptr %a1 + %t202 = load { ptr, i64, i64 }, ptr %a79 + %t203 = load %S.ast.Type, ptr %a4 + %t204 = load { ptr, i64, i64 }, ptr %a105 + %t205 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t201, { ptr, i64, i64 } %t202, %S.ast.Type %t203, { ptr, i64, i64 } %t204) + %t206 = load %S.ast.Type, ptr %a4 + %t207 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t200, { ptr, i64, i64 } %t205, %S.ast.Type %t206, i64 2) + store { ptr, i64, i64 } %t205, ptr %a208 + call void @finch_str_drop(ptr %a208) + store { ptr, i64, i64 } %t207, ptr %a209 + %t210 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t211 = load i1, ptr %t210 + br i1 %t211, label %then5623, label %endif5625 +then5623: + %t212 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t213 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t213, ptr %a214 + call void @finch_str_copy(ptr %a215, ptr %a214) + %t216 = load { ptr, i64, i64 }, ptr %a215 + %t217 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t216, 0 + %t218 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t218, ptr %a219 + call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) + %t221 = load %S.ast.Type, ptr %a220 + %t222 = insertvalue %S.gen.Place %t217, %S.ast.Type %t221, 1 + %t223 = insertvalue %S.gen.Ref %t212, %S.gen.Place %t222, 1 + call void @finch_str_drop(ptr %a209) + call void @finch_str_drop(ptr %a133) + call void @finch_str_drop(ptr %a111) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a105) + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a79) + call void @finch.drop.S_gen_Val(ptr %a49) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret %S.gen.Ref %t223 +endif5625: + %t224 = load ptr, ptr %a1 + %t225 = load ptr, ptr %a1 + %t226 = load %S.ast.Type, ptr %a27 + %t227 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t225, %S.ast.Type %t226) + %t228 = load { ptr, i64, i64 }, ptr %a209 + %t229 = call { ptr, i64, i64 } @finch.gen.load(ptr %t224, { ptr, i64, i64 } %t227, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t227, ptr %a230 + call void @finch_str_drop(ptr %a230) + store { ptr, i64, i64 } %t229, ptr %a231 + %t232 = load { ptr, i64, i64 }, ptr %a231 + store { ptr, i64, i64 } %t232, ptr %a233 + call void @finch_str_copy(ptr %a234, ptr %a233) + %t235 = load { ptr, i64, i64 }, ptr %a234 + %t236 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t235, 0 + %t237 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t237, ptr %a238 + call void @finch.copy.S_ast_Type(ptr %a239, ptr %a238) + %t240 = load %S.ast.Type, ptr %a239 + %t241 = insertvalue %S.gen.Val %t236, %S.ast.Type %t240, 1 + store %S.gen.Val %t241, ptr %a242 + %t243 = load ptr, ptr %a1 + %t244 = load %S.ast.Type, ptr %a27 + %t245 = call i1 @finch.gen.owning(ptr %t243, %S.ast.Type %t244) + br label %logic.from5626 +logic.from5626: + br i1 %t245, label %logic.rhs5627, label %logic.end5628 +logic.rhs5627: + %t246 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t247 = getelementptr inbounds %S.gen.Val, ptr %t246, i32 0, i32 2 + %t248 = load i1, ptr %t247 + br label %logic.rend5629 +logic.rend5629: + br label %logic.end5628 +logic.end5628: + %t249 = phi i1 [ false, %logic.from5626 ], [ %t248, %logic.rend5629 ] + br i1 %t249, label %then5630, label %endif5632 +then5630: + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a231 + %t252 = load %S.ast.Type, ptr %a27 + %t253 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t250, { ptr, i64, i64 } %t251, %S.ast.Type %t252) + %t254 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t253, 0 + %t255 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t255, ptr %a256 + call void @finch.copy.S_ast_Type(ptr %a257, ptr %a256) + %t258 = load %S.ast.Type, ptr %a257 + %t259 = insertvalue %S.gen.Val %t254, %S.ast.Type %t258, 1 + %t260 = insertvalue %S.gen.Val %t259, i1 true, 2 + %t261 = load %S.gen.Val, ptr %a242 + store %S.gen.Val %t260, ptr %a242 + store %S.gen.Val %t261, ptr %a262 + call void @finch.drop.S_gen_Val(ptr %a262) + br label %endif5632 +endif5632: + %t263 = load ptr, ptr %a1 + %t264 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t265 = load %S.gen.Val, ptr %t264 + call void @finch.gen.release(ptr %t263, %S.gen.Val %t265) + %t266 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t267 = load %S.gen.Val, ptr %a242 + store %S.gen.Val %t267, ptr %a268 + call void @finch.copy.S_gen_Val(ptr %a269, ptr %a268) + %t270 = load %S.gen.Val, ptr %a269 + %t271 = insertvalue %S.gen.Ref %t266, %S.gen.Val %t270, 2 + call void @finch.drop.S_gen_Val(ptr %a242) + call void @finch_str_drop(ptr %a231) + call void @finch_str_drop(ptr %a209) + call void @finch_str_drop(ptr %a133) + call void @finch_str_drop(ptr %a111) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a105) + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a79) + call void @finch.drop.S_gen_Val(ptr %a49) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret %S.gen.Ref %t271 +} + +define internal %S.gen.Val @finch.gen.mapLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a5 = alloca %S.ast.Type, align 16 + %a6 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a9 = alloca i1, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.gen.Val, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca i1, align 16 + %a25 = alloca i1, align 16 + %a30 = alloca i64, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a44 = alloca %S.ast.Node, align 16 + %a46 = alloca %S.ast.Node, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca %S.ast.Node, align 16 + %a68 = alloca %S.ast.Node, align 16 + %a71 = alloca %S.ast.Node, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca %S.gen.Val, align 16 + %a107 = alloca %S.gen.Val, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca %S.ast.Type, align 16 + %a157 = alloca %S.ast.Type, align 16 + %a159 = alloca %S.ast.Type, align 16 + %a165 = alloca %S.ast.Type, align 16 + %a171 = alloca %S.ast.Type, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca i64, align 16 + %a198 = alloca i64, align 16 + %a206 = alloca i64, align 16 + %a208 = alloca %S.gen.Val, align 16 + %a209 = alloca %S.gen.Val, align 16 + %a211 = alloca %S.gen.Val, align 16 + %a236 = alloca %S.gen.Val, align 16 + %a257 = alloca %S.gen.Val, align 16 + %a261 = alloca %S.gen.Val, align 16 + %a262 = alloca %S.gen.Val, align 16 + %a264 = alloca %S.gen.Val, align 16 + %a290 = alloca %S.gen.Val, align 16 + %a312 = alloca %S.gen.Val, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca %S.ast.Type, align 16 + %a369 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t4, ptr %a5 + call void @finch.copy.S_ast_Type(ptr %a6, ptr %a5) + %t7 = load %S.ast.Type, ptr %a6 + store %S.ast.Type %t7, ptr %a8 + store i1 false, ptr %a9 + store %S.gen.Val zeroinitializer, ptr %a10 + store %S.gen.Val zeroinitializer, ptr %a11 + %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.3616, i64 3, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp eq i32 %t16, 0 + br i1 %t17, label %then5633, label %endif5635 +then5633: + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 + %t20 = load i64, ptr %t19 + %t21 = icmp eq i64 %t20, 0 + br i1 %t21, label %then5636, label %endif5638 +then5636: + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t22, %S.ast.Node %t23, { ptr, i64, i64 } { ptr @.str.3617, i64 52, i64 0 }) + br label %endif5638 +endif5638: + store i1 true, ptr %a24 + store i1 false, ptr %a25 + %t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = sdiv i64 %t28, 2 + store i64 0, ptr %a30 + br label %for.cond5639 +for.cond5639: + %t31 = load i64, ptr %a30 + %t32 = icmp slt i64 %t31, %t29 + br i1 %t32, label %for.body5640, label %for.end5642 +for.body5640: + %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t34 = load i64, ptr %a30 + %t35 = mul i64 2, %t34 + %t36 = add i64 %t35, 1 + %t37 = load { ptr, i64, i64 }, ptr %t33 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range5643, label %inrange5644 +range5643: + call void @finch_panic_index(ptr @.str.3618, i64 2866, i64 %t36, i64 %t38) + unreachable +inrange5644: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 + %t42 = load %S.ast.Node, ptr %t41 + store %S.ast.Node %t42, ptr %a43 + call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) + %t45 = load %S.ast.Node, ptr %a44 + store %S.ast.Node %t45, ptr %a46 + %t47 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 + %t48 = load { ptr, i64, i64 }, ptr %t47 + store { ptr, i64, i64 } %t48, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.3619, i64 5, i64 0 }, ptr %a50 + %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) + %t52 = icmp ne i32 %t51, 0 + br label %logic.from5645 +logic.from5645: + br i1 %t52, label %logic.rhs5646, label %logic.end5647 +logic.rhs5646: + %t53 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 1 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.3620, i64 1, i64 0 }, ptr %a56 + %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) + %t58 = icmp ne i32 %t57, 0 + br label %logic.rend5648 +logic.rend5648: + br label %logic.end5647 +logic.end5647: + %t59 = phi i1 [ false, %logic.from5645 ], [ %t58, %logic.rend5648 ] + br i1 %t59, label %then5649, label %endif5651 +then5649: + %t60 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 0, %t62 + br i1 %t63, label %range5652, label %inrange5653 +range5652: + call void @finch_panic_index(ptr @.str.3621, i64 2868, i64 0, i64 %t62) + unreachable +inrange5653: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 0 + %t66 = load %S.ast.Node, ptr %t65 + store %S.ast.Node %t66, ptr %a67 + call void @finch.copy.S_ast_Node(ptr %a68, ptr %a67) + %t69 = load %S.ast.Node, ptr %a68 + %t70 = load %S.ast.Node, ptr %a46 + store %S.ast.Node %t69, ptr %a46 + store %S.ast.Node %t70, ptr %a71 + call void @finch.drop.S_ast_Node(ptr %a71) + br label %endif5651 +endif5651: + %t72 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 + %t73 = load { ptr, i64, i64 }, ptr %t72 + store { ptr, i64, i64 } %t73, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.3622, i64 5, i64 0 }, ptr %a75 + %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + br i1 %t77, label %then5654, label %else5655 +then5654: + store i1 true, ptr %a25 + br label %endif5656 +else5655: + %t78 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.3623, i64 3, i64 0 }, ptr %a81 + %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) + %t83 = icmp eq i32 %t82, 0 + br i1 %t83, label %then5657, label %endif5659 +then5657: + store i1 false, ptr %a24 + br label %endif5659 +endif5659: + br label %endif5656 +endif5656: + call void @finch.drop.S_ast_Node(ptr %a46) + br label %for.step5641 +for.step5641: + %t84 = load i64, ptr %a30 + %t85 = add i64 %t84, 1 + store i64 %t85, ptr %a30 + br label %for.cond5639 +for.end5642: + %t86 = load ptr, ptr %a1 + %t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t88 = load { ptr, i64, i64 }, ptr %t87 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 0, %t89 + br i1 %t90, label %range5660, label %inrange5661 +range5660: + call void @finch_panic_index(ptr @.str.3624, i64 2876, i64 0, i64 %t89) + unreachable +inrange5661: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds %S.ast.Node, ptr %t91, i64 0 + %t93 = load %S.ast.Node, ptr %t92 + %t94 = call %S.gen.Val @finch.gen.expr(ptr %t86, %S.ast.Node %t93) + %t95 = load %S.gen.Val, ptr %a10 + store %S.gen.Val %t94, ptr %a10 + store %S.gen.Val %t95, ptr %a96 + call void @finch.drop.S_gen_Val(ptr %a96) + %t97 = load ptr, ptr %a1 + %t98 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t99 = load { ptr, i64, i64 }, ptr %t98 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 1, %t100 + br i1 %t101, label %range5662, label %inrange5663 +range5662: + call void @finch_panic_index(ptr @.str.3625, i64 2877, i64 1, i64 %t100) + unreachable +inrange5663: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Node, ptr %t102, i64 1 + %t104 = load %S.ast.Node, ptr %t103 + %t105 = call %S.gen.Val @finch.gen.expr(ptr %t97, %S.ast.Node %t104) + %t106 = load %S.gen.Val, ptr %a11 + store %S.gen.Val %t105, ptr %a11 + store %S.gen.Val %t106, ptr %a107 + call void @finch.drop.S_gen_Val(ptr %a107) + %t108 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } %t110, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.3626, i64 4, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br label %logic.from5664 +logic.from5664: + br i1 %t114, label %logic.end5666, label %logic.rhs5665 +logic.rhs5665: + %t115 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i32 0, i32 0 + %t117 = load { ptr, i64, i64 }, ptr %t116 + store { ptr, i64, i64 } %t117, ptr %a118 + store { ptr, i64, i64 } { ptr @.str.3627, i64 4, i64 0 }, ptr %a119 + %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) + %t121 = icmp ne i32 %t120, 0 + br label %logic.rend5667 +logic.rend5667: + br label %logic.end5666 +logic.end5666: + %t122 = phi i1 [ true, %logic.from5664 ], [ %t121, %logic.rend5667 ] + br i1 %t122, label %then5668, label %endif5670 +then5668: + %t123 = load ptr, ptr %a1 + %t124 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t125 = load { ptr, i64, i64 }, ptr %t124 + %t126 = extractvalue { ptr, i64, i64 } %t125, 1 + %t127 = icmp uge i64 0, %t126 + br i1 %t127, label %range5671, label %inrange5672 +range5671: + call void @finch_panic_index(ptr @.str.3628, i64 2879, i64 0, i64 %t126) + unreachable +inrange5672: + %t128 = extractvalue { ptr, i64, i64 } %t125, 0 + %t129 = getelementptr inbounds %S.ast.Node, ptr %t128, i64 0 + %t130 = load %S.ast.Node, ptr %t129 + call void @finch.gen.fail(ptr %t123, %S.ast.Node %t130, { ptr, i64, i64 } { ptr @.str.3629, i64 35, i64 0 }) + br label %endif5670 +endif5670: + %t131 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 + %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.3630, i64 4, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp ne i32 %t136, 0 + br label %logic.from5673 +logic.from5673: + br i1 %t137, label %logic.end5675, label %logic.rhs5674 +logic.rhs5674: + %t138 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 + %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i32 0, i32 0 + %t140 = load { ptr, i64, i64 }, ptr %t139 + store { ptr, i64, i64 } %t140, ptr %a141 + store { ptr, i64, i64 } { ptr @.str.3631, i64 4, i64 0 }, ptr %a142 + %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) + %t144 = icmp ne i32 %t143, 0 + br label %logic.rend5676 +logic.rend5676: + br label %logic.end5675 +logic.end5675: + %t145 = phi i1 [ true, %logic.from5673 ], [ %t144, %logic.rend5676 ] + br i1 %t145, label %then5677, label %endif5679 +then5677: + %t146 = load ptr, ptr %a1 + %t147 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t148 = load { ptr, i64, i64 }, ptr %t147 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 1, %t149 + br i1 %t150, label %range5680, label %inrange5681 +range5680: + call void @finch_panic_index(ptr @.str.3632, i64 2882, i64 1, i64 %t149) + unreachable +inrange5681: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds %S.ast.Node, ptr %t151, i64 1 + %t153 = load %S.ast.Node, ptr %t152 + call void @finch.gen.fail(ptr %t146, %S.ast.Node %t153, { ptr, i64, i64 } { ptr @.str.3633, i64 37, i64 0 }) + br label %endif5679 +endif5679: + %t154 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 + %t155 = load %S.ast.Type, ptr %t154 + store %S.ast.Type %t155, ptr %a156 + call void @finch.copy.S_ast_Type(ptr %a157, ptr %a156) + %t158 = load %S.ast.Type, ptr %a157 + store %S.ast.Type %t158, ptr %a159 + %t160 = load i1, ptr %a24 + br label %logic.from5682 +logic.from5682: + br i1 %t160, label %logic.rhs5683, label %logic.end5684 +logic.rhs5683: + %t161 = load i1, ptr %a25 + br label %logic.rend5685 +logic.rend5685: + br label %logic.end5684 +logic.end5684: + %t162 = phi i1 [ false, %logic.from5682 ], [ %t161, %logic.rend5685 ] + br i1 %t162, label %then5686, label %endif5688 +then5686: + %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3634, i64 5, i64 0 }) + %t164 = load %S.ast.Type, ptr %a159 + store %S.ast.Type %t163, ptr %a159 + store %S.ast.Type %t164, ptr %a165 + call void @finch.drop.S_ast_Type(ptr %a165) + br label %endif5688 +endif5688: + %t166 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t167 = load %S.ast.Type, ptr %t166 + %t168 = load %S.ast.Type, ptr %a159 + %t169 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t167, %S.ast.Type %t168) + %t170 = load %S.ast.Type, ptr %a8 + store %S.ast.Type %t169, ptr %a8 + store %S.ast.Type %t170, ptr %a171 + call void @finch.drop.S_ast_Type(ptr %a171) + store i1 true, ptr %a9 + call void @finch.drop.S_ast_Type(ptr %a159) + br label %endif5635 +endif5635: + %t172 = load ptr, ptr %a1 + %t173 = load ptr, ptr %a1 + %t174 = load %S.ast.Type, ptr %a8 + %t175 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t174) + %t176 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t172, { ptr, i64, i64 } %t175) + store { ptr, i64, i64 } %t175, ptr %a177 + call void @finch_str_drop(ptr %a177) + store { ptr, i64, i64 } %t176, ptr %a178 + %t179 = load ptr, ptr %a1 + %t180 = load ptr, ptr %a1 + %t181 = load %S.ast.Type, ptr %a8 + %t182 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t180, %S.ast.Type %t181) + %t183 = load { ptr, i64, i64 }, ptr %a178 + call void @finch.gen.store(ptr %t179, { ptr, i64, i64 } %t182, { ptr, i64, i64 } { ptr @.str.3635, i64 15, i64 0 }, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t182, ptr %a184 + call void @finch_str_drop(ptr %a184) + %t185 = load ptr, ptr %a1 + %t186 = icmp eq ptr %t185, null + br i1 %t186, label %panic5689, label %ok5690 +panic5689: + call void @finch_panic(ptr @.str.3636, i64 2893, ptr @.str.3637) + unreachable +ok5690: + %t187 = getelementptr inbounds %S.gen.Gen, ptr %t185, i32 0, i32 11 + %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 + %t189 = load i64, ptr %t188 + store i64 %t189, ptr %a190 + %t191 = load ptr, ptr %a1 + %t192 = load { ptr, i64, i64 }, ptr %a178 + %t193 = load %S.ast.Type, ptr %a8 + call void @finch.gen.holdAddr(ptr %t191, { ptr, i64, i64 } %t192, %S.ast.Type %t193) + %t194 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 + %t196 = load i64, ptr %t195 + %t197 = sdiv i64 %t196, 2 + store i64 0, ptr %a198 + br label %for.cond5691 +for.cond5691: + %t199 = load i64, ptr %a198 + %t200 = icmp slt i64 %t199, %t197 + br i1 %t200, label %for.body5692, label %for.end5694 +for.body5692: + %t201 = load ptr, ptr %a1 + %t202 = icmp eq ptr %t201, null + br i1 %t202, label %panic5695, label %ok5696 +panic5695: + call void @finch_panic(ptr @.str.3638, i64 2896, ptr @.str.3639) + unreachable +ok5696: + %t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 11 + %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 + %t205 = load i64, ptr %t204 + store i64 %t205, ptr %a206 + %t207 = load %S.gen.Val, ptr %a10 + store %S.gen.Val %t207, ptr %a208 + call void @finch.copy.S_gen_Val(ptr %a209, ptr %a208) + %t210 = load %S.gen.Val, ptr %a209 + store %S.gen.Val %t210, ptr %a211 + %t212 = load i64, ptr %a198 + %t213 = icmp eq i64 %t212, 0 + br label %logic.from5697 +logic.from5697: + br i1 %t213, label %logic.rhs5698, label %logic.end5699 +logic.rhs5698: + %t214 = load i1, ptr %a9 + br label %logic.rend5700 +logic.rend5700: + br label %logic.end5699 +logic.end5699: + %t215 = phi i1 [ false, %logic.from5697 ], [ %t214, %logic.rend5700 ] + %t216 = xor i1 %t215, true + br i1 %t216, label %then5701, label %endif5703 +then5701: + %t217 = load ptr, ptr %a1 + %t218 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t219 = load i64, ptr %a198 + %t220 = mul i64 2, %t219 + %t221 = load { ptr, i64, i64 }, ptr %t218 + %t222 = extractvalue { ptr, i64, i64 } %t221, 1 + %t223 = icmp uge i64 %t220, %t222 + br i1 %t223, label %range5704, label %inrange5705 +range5704: + call void @finch_panic_index(ptr @.str.3640, i64 2899, i64 %t220, i64 %t222) + unreachable +inrange5705: + %t224 = extractvalue { ptr, i64, i64 } %t221, 0 + %t225 = getelementptr inbounds %S.ast.Node, ptr %t224, i64 %t220 + %t226 = load %S.ast.Node, ptr %t225 + %t227 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t228 = load { ptr, i64, i64 }, ptr %t227 + %t229 = extractvalue { ptr, i64, i64 } %t228, 1 + %t230 = icmp uge i64 0, %t229 + br i1 %t230, label %range5706, label %inrange5707 +range5706: + call void @finch_panic_index(ptr @.str.3641, i64 2899, i64 0, i64 %t229) + unreachable +inrange5707: + %t231 = extractvalue { ptr, i64, i64 } %t228, 0 + %t232 = getelementptr inbounds %S.ast.Type, ptr %t231, i64 0 + %t233 = load %S.ast.Type, ptr %t232 + %t234 = call %S.gen.Val @finch.gen.exprWant(ptr %t217, %S.ast.Node %t226, %S.ast.Type %t233) + %t235 = load %S.gen.Val, ptr %a211 + store %S.gen.Val %t234, ptr %a211 + store %S.gen.Val %t235, ptr %a236 + call void @finch.drop.S_gen_Val(ptr %a236) + br label %endif5703 +endif5703: + %t237 = load ptr, ptr %a1 + %t238 = load %S.gen.Val, ptr %a211 + %t239 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = extractvalue { ptr, i64, i64 } %t240, 1 + %t242 = icmp uge i64 0, %t241 + br i1 %t242, label %range5708, label %inrange5709 +range5708: + call void @finch_panic_index(ptr @.str.3642, i64 2901, i64 0, i64 %t241) + unreachable +inrange5709: + %t243 = extractvalue { ptr, i64, i64 } %t240, 0 + %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i64 0 + %t245 = load %S.ast.Type, ptr %t244 + %t246 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t247 = load i64, ptr %a198 + %t248 = mul i64 2, %t247 + %t249 = load { ptr, i64, i64 }, ptr %t246 + %t250 = extractvalue { ptr, i64, i64 } %t249, 1 + %t251 = icmp uge i64 %t248, %t250 + br i1 %t251, label %range5710, label %inrange5711 +range5710: + call void @finch_panic_index(ptr @.str.3643, i64 2901, i64 %t248, i64 %t250) + unreachable +inrange5711: + %t252 = extractvalue { ptr, i64, i64 } %t249, 0 + %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 + %t254 = load %S.ast.Node, ptr %t253 + %t255 = call %S.gen.Val @finch.gen.coerce(ptr %t237, %S.gen.Val %t238, %S.ast.Type %t245, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3644, i64 21, i64 0 }) + %t256 = load %S.gen.Val, ptr %a211 + store %S.gen.Val %t255, ptr %a211 + store %S.gen.Val %t256, ptr %a257 + call void @finch.drop.S_gen_Val(ptr %a257) + %t258 = load ptr, ptr %a1 + %t259 = load %S.gen.Val, ptr %a211 + call void @finch.gen.hold(ptr %t258, %S.gen.Val %t259) + %t260 = load %S.gen.Val, ptr %a11 + store %S.gen.Val %t260, ptr %a261 + call void @finch.copy.S_gen_Val(ptr %a262, ptr %a261) + %t263 = load %S.gen.Val, ptr %a262 + store %S.gen.Val %t263, ptr %a264 + %t265 = load i64, ptr %a198 + %t266 = icmp eq i64 %t265, 0 + br label %logic.from5712 +logic.from5712: + br i1 %t266, label %logic.rhs5713, label %logic.end5714 +logic.rhs5713: + %t267 = load i1, ptr %a9 + br label %logic.rend5715 +logic.rend5715: + br label %logic.end5714 +logic.end5714: + %t268 = phi i1 [ false, %logic.from5712 ], [ %t267, %logic.rend5715 ] + %t269 = xor i1 %t268, true + br i1 %t269, label %then5716, label %endif5718 +then5716: + %t270 = load ptr, ptr %a1 + %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t272 = load i64, ptr %a198 + %t273 = mul i64 2, %t272 + %t274 = add i64 %t273, 1 + %t275 = load { ptr, i64, i64 }, ptr %t271 + %t276 = extractvalue { ptr, i64, i64 } %t275, 1 + %t277 = icmp uge i64 %t274, %t276 + br i1 %t277, label %range5719, label %inrange5720 +range5719: + call void @finch_panic_index(ptr @.str.3645, i64 2905, i64 %t274, i64 %t276) + unreachable +inrange5720: + %t278 = extractvalue { ptr, i64, i64 } %t275, 0 + %t279 = getelementptr inbounds %S.ast.Node, ptr %t278, i64 %t274 + %t280 = load %S.ast.Node, ptr %t279 + %t281 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t282 = load { ptr, i64, i64 }, ptr %t281 + %t283 = extractvalue { ptr, i64, i64 } %t282, 1 + %t284 = icmp uge i64 1, %t283 + br i1 %t284, label %range5721, label %inrange5722 +range5721: + call void @finch_panic_index(ptr @.str.3646, i64 2905, i64 1, i64 %t283) + unreachable +inrange5722: + %t285 = extractvalue { ptr, i64, i64 } %t282, 0 + %t286 = getelementptr inbounds %S.ast.Type, ptr %t285, i64 1 + %t287 = load %S.ast.Type, ptr %t286 + %t288 = call %S.gen.Val @finch.gen.exprWant(ptr %t270, %S.ast.Node %t280, %S.ast.Type %t287) + %t289 = load %S.gen.Val, ptr %a264 + store %S.gen.Val %t288, ptr %a264 + store %S.gen.Val %t289, ptr %a290 + call void @finch.drop.S_gen_Val(ptr %a290) + br label %endif5718 +endif5718: + %t291 = load ptr, ptr %a1 + %t292 = load %S.gen.Val, ptr %a264 + %t293 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t294 = load { ptr, i64, i64 }, ptr %t293 + %t295 = extractvalue { ptr, i64, i64 } %t294, 1 + %t296 = icmp uge i64 1, %t295 + br i1 %t296, label %range5723, label %inrange5724 +range5723: + call void @finch_panic_index(ptr @.str.3647, i64 2907, i64 1, i64 %t295) + unreachable +inrange5724: + %t297 = extractvalue { ptr, i64, i64 } %t294, 0 + %t298 = getelementptr inbounds %S.ast.Type, ptr %t297, i64 1 + %t299 = load %S.ast.Type, ptr %t298 + %t300 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t301 = load i64, ptr %a198 + %t302 = mul i64 2, %t301 + %t303 = add i64 %t302, 1 + %t304 = load { ptr, i64, i64 }, ptr %t300 + %t305 = extractvalue { ptr, i64, i64 } %t304, 1 + %t306 = icmp uge i64 %t303, %t305 + br i1 %t306, label %range5725, label %inrange5726 +range5725: + call void @finch_panic_index(ptr @.str.3648, i64 2907, i64 %t303, i64 %t305) + unreachable +inrange5726: + %t307 = extractvalue { ptr, i64, i64 } %t304, 0 + %t308 = getelementptr inbounds %S.ast.Node, ptr %t307, i64 %t303 + %t309 = load %S.ast.Node, ptr %t308 + %t310 = call %S.gen.Val @finch.gen.coerce(ptr %t291, %S.gen.Val %t292, %S.ast.Type %t299, %S.ast.Node %t309, { ptr, i64, i64 } { ptr @.str.3649, i64 23, i64 0 }) + %t311 = load %S.gen.Val, ptr %a264 + store %S.gen.Val %t310, ptr %a264 + store %S.gen.Val %t311, ptr %a312 + call void @finch.drop.S_gen_Val(ptr %a312) + %t313 = load ptr, ptr %a1 + %t314 = load %S.gen.Val, ptr %a264 + %t315 = call { ptr, i64, i64 } @finch.gen.own(ptr %t313, %S.gen.Val %t314) + store { ptr, i64, i64 } %t315, ptr %a316 + %t317 = load ptr, ptr %a1 + %t318 = load { ptr, i64, i64 }, ptr %a178 + %t319 = load %S.ast.Type, ptr %a8 + %t320 = load %S.gen.Val, ptr %a211 + %t321 = load %S.ast.Node, ptr %a2 + %t322 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t317, { ptr, i64, i64 } %t318, %S.ast.Type %t319, %S.gen.Val %t320, i1 false, %S.ast.Node %t321) + store { ptr, i64, i64 } %t322, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = load { ptr, i64, i64 }, ptr %a323 + %t326 = load %S.ast.Type, ptr %a8 + %t327 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t324, { ptr, i64, i64 } %t325, %S.ast.Type %t326, i64 2) + store { ptr, i64, i64 } %t327, ptr %a328 + %t329 = load ptr, ptr %a1 + %t330 = load { ptr, i64, i64 }, ptr %a328 + %t331 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t332 = load { ptr, i64, i64 }, ptr %t331 + %t333 = extractvalue { ptr, i64, i64 } %t332, 1 + %t334 = icmp uge i64 1, %t333 + br i1 %t334, label %range5727, label %inrange5728 +range5727: + call void @finch_panic_index(ptr @.str.3650, i64 2911, i64 1, i64 %t333) + unreachable +inrange5728: + %t335 = extractvalue { ptr, i64, i64 } %t332, 0 + %t336 = getelementptr inbounds %S.ast.Type, ptr %t335, i64 1 + %t337 = load %S.ast.Type, ptr %t336 + call void @finch.gen.dropAt(ptr %t329, { ptr, i64, i64 } %t330, %S.ast.Type %t337) + %t338 = load ptr, ptr %a1 + %t339 = load ptr, ptr %a1 + %t340 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t341 = load { ptr, i64, i64 }, ptr %t340 + %t342 = extractvalue { ptr, i64, i64 } %t341, 1 + %t343 = icmp uge i64 1, %t342 + br i1 %t343, label %range5729, label %inrange5730 +range5729: + call void @finch_panic_index(ptr @.str.3651, i64 2912, i64 1, i64 %t342) + unreachable +inrange5730: + %t344 = extractvalue { ptr, i64, i64 } %t341, 0 + %t345 = getelementptr inbounds %S.ast.Type, ptr %t344, i64 1 + %t346 = load %S.ast.Type, ptr %t345 + %t347 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t339, %S.ast.Type %t346) + %t348 = load { ptr, i64, i64 }, ptr %a316 + %t349 = load { ptr, i64, i64 }, ptr %a328 + call void @finch.gen.store(ptr %t338, { ptr, i64, i64 } %t347, { ptr, i64, i64 } %t348, { ptr, i64, i64 } %t349) + store { ptr, i64, i64 } %t347, ptr %a350 + call void @finch_str_drop(ptr %a350) + %t351 = load ptr, ptr %a1 + %t352 = load %S.gen.Val, ptr %a211 + call void @finch.gen.release(ptr %t351, %S.gen.Val %t352) + %t353 = load ptr, ptr %a1 + %t354 = load i64, ptr %a206 + call void @finch.gen.heldEnd(ptr %t353, i64 %t354) + call void @finch_str_drop(ptr %a328) + call void @finch_str_drop(ptr %a323) + call void @finch_str_drop(ptr %a316) + call void @finch.drop.S_gen_Val(ptr %a264) + call void @finch.drop.S_gen_Val(ptr %a211) + br label %for.step5693 +for.step5693: + %t355 = load i64, ptr %a198 + %t356 = add i64 %t355, 1 + store i64 %t356, ptr %a198 + br label %for.cond5691 +for.end5694: + %t357 = load ptr, ptr %a1 + %t358 = load i64, ptr %a190 + call void @finch.gen.heldEnd(ptr %t357, i64 %t358) + %t359 = load ptr, ptr %a1 + %t360 = load ptr, ptr %a1 + %t361 = load %S.ast.Type, ptr %a8 + %t362 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t360, %S.ast.Type %t361) + %t363 = load { ptr, i64, i64 }, ptr %a178 + %t364 = call { ptr, i64, i64 } @finch.gen.load(ptr %t359, { ptr, i64, i64 } %t362, { ptr, i64, i64 } %t363) + store { ptr, i64, i64 } %t362, ptr %a365 + call void @finch_str_drop(ptr %a365) + %t366 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t364, 0 + %t367 = load %S.ast.Type, ptr %a8 + store %S.ast.Type %t367, ptr %a368 + call void @finch.copy.S_ast_Type(ptr %a369, ptr %a368) + %t370 = load %S.ast.Type, ptr %a369 + %t371 = insertvalue %S.gen.Val %t366, %S.ast.Type %t370, 1 + %t372 = insertvalue %S.gen.Val %t371, i1 true, 2 + call void @finch_str_drop(ptr %a178) + call void @finch.drop.S_gen_Val(ptr %a11) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_ast_Type(ptr %a8) + ret %S.gen.Val %t372 +} + +define internal %S.gen.Val @finch.gen.mapMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a29 = alloca %S.ast.Type, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a32 = alloca %S.ast.Type, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca %S.gen.Val, align 16 + %a82 = alloca %S.gen.Val, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca %S.gen.Val, align 16 + %a278 = alloca %S.gen.Val, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca %S.ast.Type, align 16 + %a351 = alloca %S.ast.Type, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca i64, align 16 + %a501 = alloca %S.ast.Type, align 16 + %a502 = alloca %S.ast.Type, align 16 + %a504 = alloca %S.ast.Type, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca %S.ast.Type, align 16 + %a512 = alloca %S.ast.Type, align 16 + %a515 = alloca %S.ast.Type, align 16 + %a518 = alloca %S.ast.Type, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a543 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a613 = alloca { ptr, i64, i64 }, align 16 + %a614 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a618 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a646 = alloca { ptr, i64, i64 }, align 16 + %a649 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a663 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a699 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a702 = alloca { ptr, i64, i64 }, align 16 + %a704 = alloca { ptr, i64, i64 }, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a712 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a716 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a732 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca %S.ast.Type, align 16 + %a753 = alloca %S.ast.Type, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a766 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 0, %t13 + br i1 %t14, label %range5731, label %inrange5732 +range5731: + call void @finch_panic_index(ptr @.str.3652, i64 2922, i64 0, i64 %t13) + unreachable +inrange5732: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 + %t17 = load %S.ast.Type, ptr %t16 + store %S.ast.Type %t17, ptr %a18 + call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) + %t20 = load %S.ast.Type, ptr %a19 + store %S.ast.Type %t20, ptr %a21 + %t22 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 1, %t24 + br i1 %t25, label %range5733, label %inrange5734 +range5733: + call void @finch_panic_index(ptr @.str.3653, i64 2923, i64 1, i64 %t24) + unreachable +inrange5734: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds %S.ast.Type, ptr %t26, i64 1 + %t28 = load %S.ast.Type, ptr %t27 + store %S.ast.Type %t28, ptr %a29 + call void @finch.copy.S_ast_Type(ptr %a30, ptr %a29) + %t31 = load %S.ast.Type, ptr %a30 + store %S.ast.Type %t31, ptr %a32 + %t33 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3654, i64 3, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br label %logic.from5735 +logic.from5735: + br i1 %t37, label %logic.end5737, label %logic.rhs5736 +logic.rhs5736: + %t38 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t38, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.3655, i64 3, i64 0 }, ptr %a40 + %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br label %logic.rend5738 +logic.rend5738: + br label %logic.end5737 +logic.end5737: + %t43 = phi i1 [ true, %logic.from5735 ], [ %t42, %logic.rend5738 ] + br label %logic.from5739 +logic.from5739: + br i1 %t43, label %logic.end5741, label %logic.rhs5740 +logic.rhs5740: + %t44 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t44, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.3656, i64 6, i64 0 }, ptr %a46 + %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) + %t48 = icmp ne i32 %t47, 0 + br label %logic.rend5742 +logic.rend5742: + br label %logic.end5741 +logic.end5741: + %t49 = phi i1 [ true, %logic.from5739 ], [ %t48, %logic.rend5742 ] + br i1 %t49, label %then5743, label %endif5745 +then5743: + %t50 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.3657, i64 3, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then5746, label %else5747 +then5746: + %t55 = load ptr, ptr %a1 + %t56 = load %S.ast.Node, ptr %a2 + %t57 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t55, %S.ast.Node %t56, i64 1, i64 2, { ptr, i64, i64 } %t57) + br label %endif5748 +else5747: + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Node, ptr %a2 + %t60 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t58, %S.ast.Node %t59, i64 1, i64 1, { ptr, i64, i64 } %t60) + br label %endif5748 +endif5748: + %t61 = load ptr, ptr %a1 + %t62 = load ptr, ptr %a1 + %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = extractvalue { ptr, i64, i64 } %t64, 1 + %t66 = icmp uge i64 1, %t65 + br i1 %t66, label %range5749, label %inrange5750 +range5749: + call void @finch_panic_index(ptr @.str.3658, i64 2930, i64 1, i64 %t65) + unreachable +inrange5750: + %t67 = extractvalue { ptr, i64, i64 } %t64, 0 + %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 1 + %t69 = load %S.ast.Node, ptr %t68 + %t70 = load %S.ast.Type, ptr %a21 + %t71 = call %S.gen.Val @finch.gen.exprWant(ptr %t62, %S.ast.Node %t69, %S.ast.Type %t70) + %t72 = load %S.ast.Type, ptr %a21 + %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t74 = load { ptr, i64, i64 }, ptr %t73 + %t75 = extractvalue { ptr, i64, i64 } %t74, 1 + %t76 = icmp uge i64 1, %t75 + br i1 %t76, label %range5751, label %inrange5752 +range5751: + call void @finch_panic_index(ptr @.str.3659, i64 2930, i64 1, i64 %t75) + unreachable +inrange5752: + %t77 = extractvalue { ptr, i64, i64 } %t74, 0 + %t78 = getelementptr inbounds %S.ast.Node, ptr %t77, i64 1 + %t79 = load %S.ast.Node, ptr %t78 + %t80 = call %S.gen.Val @finch.gen.coerce(ptr %t61, %S.gen.Val %t71, %S.ast.Type %t72, %S.ast.Node %t79, { ptr, i64, i64 } { ptr @.str.3660, i64 7, i64 0 }) + store %S.gen.Val %t71, ptr %a81 + call void @finch.drop.S_gen_Val(ptr %a81) + store %S.gen.Val %t80, ptr %a82 + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a3 + %t85 = load ptr, ptr %a1 + %t86 = load %S.gen.Val, ptr %a82 + %t87 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t85, %S.gen.Val %t86) + %t88 = load %S.ast.Type, ptr %a4 + %t89 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t83, { ptr, i64, i64 } %t84, { ptr, i64, i64 } %t87, %S.ast.Type %t88) + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_drop(ptr %a90) + store { ptr, i64, i64 } %t89, ptr %a91 + %t92 = load ptr, ptr %a1 + %t93 = load %S.gen.Val, ptr %a82 + call void @finch.gen.release(ptr %t92, %S.gen.Val %t93) + %t94 = load ptr, ptr %a1 + %t95 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.3661, i64 13, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t99, ptr %a101 + store { ptr, i64, i64 } { ptr @.str.3662, i64 3, i64 0 }, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t99, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + %t105 = call { ptr, i64, i64 } @finch.gen.op(ptr %t94, { ptr, i64, i64 } %t104) + store { ptr, i64, i64 } %t104, ptr %a106 + call void @finch_str_drop(ptr %a106) + store { ptr, i64, i64 } %t105, ptr %a107 + %t108 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.3663, i64 3, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br i1 %t112, label %then5753, label %endif5755 +then5753: + %t113 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t113, ptr %a114 + call void @finch_str_copy(ptr %a115, ptr %a114) + %t116 = load { ptr, i64, i64 }, ptr %a115 + %t117 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t116, 0 + %t118 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3664, i64 4, i64 0 }) + %t119 = insertvalue %S.gen.Val %t117, %S.ast.Type %t118, 1 + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a91) + call void @finch.drop.S_gen_Val(ptr %a82) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t119 +endif5755: + %t120 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t120, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.3665, i64 6, i64 0 }, ptr %a122 + %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) + %t124 = icmp ne i32 %t123, 0 + br i1 %t124, label %then5756, label %endif5758 +then5756: + %t125 = load ptr, ptr %a1 + %t126 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t125, { ptr, i64, i64 } { ptr @.str.3666, i64 10, i64 0 }) + store { ptr, i64, i64 } %t126, ptr %a127 + %t128 = load ptr, ptr %a1 + %t129 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t128, { ptr, i64, i64 } { ptr @.str.3667, i64 10, i64 0 }) + store { ptr, i64, i64 } %t129, ptr %a130 + %t131 = load ptr, ptr %a1 + %t132 = load { ptr, i64, i64 }, ptr %a107 + %t133 = load { ptr, i64, i64 }, ptr %a127 + %t134 = load { ptr, i64, i64 }, ptr %a130 + call void @finch.gen.condBr(ptr %t131, { ptr, i64, i64 } %t132, { ptr, i64, i64 } %t133, { ptr, i64, i64 } %t134) + %t135 = load ptr, ptr %a1 + %t136 = load { ptr, i64, i64 }, ptr %a127 + call void @finch.gen.label(ptr %t135, { ptr, i64, i64 } %t136) + %t137 = load ptr, ptr %a1 + %t138 = load { ptr, i64, i64 }, ptr %a3 + %t139 = load %S.ast.Type, ptr %a4 + %t140 = load { ptr, i64, i64 }, ptr %a91 + %t141 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t137, { ptr, i64, i64 } %t138, %S.ast.Type %t139, { ptr, i64, i64 } %t140) + store { ptr, i64, i64 } %t141, ptr %a142 + %t143 = load ptr, ptr %a1 + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a142 + %t146 = load %S.ast.Type, ptr %a4 + %t147 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Type %t146, i64 1) + %t148 = load %S.ast.Type, ptr %a21 + call void @finch.gen.dropAt(ptr %t143, { ptr, i64, i64 } %t147, %S.ast.Type %t148) + store { ptr, i64, i64 } %t147, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load ptr, ptr %a1 + %t151 = load ptr, ptr %a1 + %t152 = load { ptr, i64, i64 }, ptr %a142 + %t153 = load %S.ast.Type, ptr %a4 + %t154 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t151, { ptr, i64, i64 } %t152, %S.ast.Type %t153, i64 2) + %t155 = load %S.ast.Type, ptr %a32 + call void @finch.gen.dropAt(ptr %t150, { ptr, i64, i64 } %t154, %S.ast.Type %t155) + store { ptr, i64, i64 } %t154, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load ptr, ptr %a1 + %t158 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.3668, i64 35, i64 0 }, ptr %a160 + store { ptr, i64, i64 } %t158, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + %t162 = load { ptr, i64, i64 }, ptr %a159 + store { ptr, i64, i64 } %t162, ptr %a164 + store { ptr, i64, i64 } { ptr @.str.3669, i64 6, i64 0 }, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t162, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + %t168 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } %t167, ptr %a170 + store { ptr, i64, i64 } %t168, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t167, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t173, ptr %a175 + store { ptr, i64, i64 } { ptr @.str.3670, i64 6, i64 0 }, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t173, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + %t179 = load ptr, ptr %a1 + %t180 = load %S.ast.Type, ptr %a4 + %t181 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t179, %S.ast.Type %t180) + store { ptr, i64, i64 } %t178, ptr %a183 + store { ptr, i64, i64 } %t181, ptr %a184 + call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) + store { ptr, i64, i64 } %t178, ptr %a185 + call void @finch_str_drop(ptr %a185) + store { ptr, i64, i64 } %t181, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a182 + store { ptr, i64, i64 } %t187, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.3671, i64 1, i64 0 }, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + call void @finch.gen.emit(ptr %t157, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = load ptr, ptr %a1 + %t195 = load { ptr, i64, i64 }, ptr %a130 + call void @finch.gen.br(ptr %t194, { ptr, i64, i64 } %t195) + %t196 = load ptr, ptr %a1 + %t197 = load { ptr, i64, i64 }, ptr %a130 + call void @finch.gen.label(ptr %t196, { ptr, i64, i64 } %t197) + %t198 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t198, ptr %a199 + call void @finch_str_copy(ptr %a200, ptr %a199) + %t201 = load { ptr, i64, i64 }, ptr %a200 + %t202 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t201, 0 + %t203 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3672, i64 4, i64 0 }) + %t204 = insertvalue %S.gen.Val %t202, %S.ast.Type %t203, 1 + call void @finch_str_drop(ptr %a142) + call void @finch_str_drop(ptr %a130) + call void @finch_str_drop(ptr %a127) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a91) + call void @finch.drop.S_gen_Val(ptr %a82) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t204 +endif5758: + %t205 = load ptr, ptr %a1 + %t206 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t205, { ptr, i64, i64 } { ptr @.str.3673, i64 9, i64 0 }) + store { ptr, i64, i64 } %t206, ptr %a207 + %t208 = load ptr, ptr %a1 + %t209 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t208, { ptr, i64, i64 } { ptr @.str.3674, i64 11, i64 0 }) + store { ptr, i64, i64 } %t209, ptr %a210 + %t211 = load ptr, ptr %a1 + %t212 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t211, { ptr, i64, i64 } { ptr @.str.3675, i64 8, i64 0 }) + store { ptr, i64, i64 } %t212, ptr %a213 + %t214 = load ptr, ptr %a1 + %t215 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t214, { ptr, i64, i64 } { ptr @.str.3676, i64 8, i64 0 }) + store { ptr, i64, i64 } %t215, ptr %a216 + %t217 = load ptr, ptr %a1 + %t218 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t217, { ptr, i64, i64 } { ptr @.str.3677, i64 7, i64 0 }) + store { ptr, i64, i64 } %t218, ptr %a219 + %t220 = load ptr, ptr %a1 + %t221 = load { ptr, i64, i64 }, ptr %a107 + %t222 = load { ptr, i64, i64 }, ptr %a207 + %t223 = load { ptr, i64, i64 }, ptr %a210 + call void @finch.gen.condBr(ptr %t220, { ptr, i64, i64 } %t221, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t223) + %t224 = load ptr, ptr %a1 + %t225 = load { ptr, i64, i64 }, ptr %a207 + call void @finch.gen.label(ptr %t224, { ptr, i64, i64 } %t225) + %t226 = load ptr, ptr %a1 + %t227 = load ptr, ptr %a1 + %t228 = load ptr, ptr %a1 + %t229 = load %S.ast.Type, ptr %a32 + %t230 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t228, %S.ast.Type %t229) + %t231 = load ptr, ptr %a1 + %t232 = load ptr, ptr %a1 + %t233 = load { ptr, i64, i64 }, ptr %a3 + %t234 = load %S.ast.Type, ptr %a4 + %t235 = load { ptr, i64, i64 }, ptr %a91 + %t236 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t232, { ptr, i64, i64 } %t233, %S.ast.Type %t234, { ptr, i64, i64 } %t235) + %t237 = load %S.ast.Type, ptr %a4 + %t238 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t231, { ptr, i64, i64 } %t236, %S.ast.Type %t237, i64 2) + store { ptr, i64, i64 } %t236, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = call { ptr, i64, i64 } @finch.gen.load(ptr %t227, { ptr, i64, i64 } %t230, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t230, ptr %a241 + call void @finch_str_drop(ptr %a241) + store { ptr, i64, i64 } %t238, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load %S.ast.Type, ptr %a32 + %t244 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t226, { ptr, i64, i64 } %t240, %S.ast.Type %t243) + store { ptr, i64, i64 } %t240, ptr %a245 + call void @finch_str_drop(ptr %a245) + store { ptr, i64, i64 } %t244, ptr %a246 + %t247 = load ptr, ptr %a1 + %t248 = load { ptr, i64, i64 }, ptr %a213 + call void @finch.gen.br(ptr %t247, { ptr, i64, i64 } %t248) + %t249 = load ptr, ptr %a1 + %t250 = load { ptr, i64, i64 }, ptr %a213 + call void @finch.gen.label(ptr %t249, { ptr, i64, i64 } %t250) + %t251 = load ptr, ptr %a1 + %t252 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.br(ptr %t251, { ptr, i64, i64 } %t252) + %t253 = load ptr, ptr %a1 + %t254 = load { ptr, i64, i64 }, ptr %a210 + call void @finch.gen.label(ptr %t253, { ptr, i64, i64 } %t254) + %t255 = load ptr, ptr %a1 + %t256 = load ptr, ptr %a1 + %t257 = load ptr, ptr %a1 + %t258 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t259 = load { ptr, i64, i64 }, ptr %t258 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 2, %t260 + br i1 %t261, label %range5759, label %inrange5760 +range5759: + call void @finch_panic_index(ptr @.str.3678, i64 2963, i64 2, i64 %t260) + unreachable +inrange5760: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds %S.ast.Node, ptr %t262, i64 2 + %t264 = load %S.ast.Node, ptr %t263 + %t265 = load %S.ast.Type, ptr %a32 + %t266 = call %S.gen.Val @finch.gen.exprWant(ptr %t257, %S.ast.Node %t264, %S.ast.Type %t265) + %t267 = load %S.ast.Type, ptr %a32 + %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t269 = load { ptr, i64, i64 }, ptr %t268 + %t270 = extractvalue { ptr, i64, i64 } %t269, 1 + %t271 = icmp uge i64 2, %t270 + br i1 %t271, label %range5761, label %inrange5762 +range5761: + call void @finch_panic_index(ptr @.str.3679, i64 2963, i64 2, i64 %t270) + unreachable +inrange5762: + %t272 = extractvalue { ptr, i64, i64 } %t269, 0 + %t273 = getelementptr inbounds %S.ast.Node, ptr %t272, i64 2 + %t274 = load %S.ast.Node, ptr %t273 + %t275 = call %S.gen.Val @finch.gen.coerce(ptr %t256, %S.gen.Val %t266, %S.ast.Type %t267, %S.ast.Node %t274, { ptr, i64, i64 } { ptr @.str.3680, i64 11, i64 0 }) + store %S.gen.Val %t266, ptr %a276 + call void @finch.drop.S_gen_Val(ptr %a276) + %t277 = call { ptr, i64, i64 } @finch.gen.own(ptr %t255, %S.gen.Val %t275) + store %S.gen.Val %t275, ptr %a278 + call void @finch.drop.S_gen_Val(ptr %a278) + store { ptr, i64, i64 } %t277, ptr %a279 + %t280 = load ptr, ptr %a1 + %t281 = load { ptr, i64, i64 }, ptr %a216 + call void @finch.gen.br(ptr %t280, { ptr, i64, i64 } %t281) + %t282 = load ptr, ptr %a1 + %t283 = load { ptr, i64, i64 }, ptr %a216 + call void @finch.gen.label(ptr %t282, { ptr, i64, i64 } %t283) + %t284 = load ptr, ptr %a1 + %t285 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.br(ptr %t284, { ptr, i64, i64 } %t285) + %t286 = load ptr, ptr %a1 + %t287 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.label(ptr %t286, { ptr, i64, i64 } %t287) + %t288 = load ptr, ptr %a1 + %t289 = load ptr, ptr %a1 + %t290 = load %S.ast.Type, ptr %a32 + %t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t289, %S.ast.Type %t290) + store { ptr, i64, i64 } { ptr @.str.3681, i64 4, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.3682, i64 3, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + store { ptr, i64, i64 } %t296, ptr %a300 + call void @finch_str_drop(ptr %a300) + %t301 = load { ptr, i64, i64 }, ptr %a297 + %t302 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t301, ptr %a304 + store { ptr, i64, i64 } %t302, ptr %a305 + call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) + store { ptr, i64, i64 } %t301, ptr %a306 + call void @finch_str_drop(ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a303 + store { ptr, i64, i64 } %t307, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.3683, i64 3, i64 0 }, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t307, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = load { ptr, i64, i64 }, ptr %a308 + %t313 = load { ptr, i64, i64 }, ptr %a213 + store { ptr, i64, i64 } %t312, ptr %a315 + store { ptr, i64, i64 } %t313, ptr %a316 + call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) + store { ptr, i64, i64 } %t312, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load { ptr, i64, i64 }, ptr %a314 + store { ptr, i64, i64 } %t318, ptr %a320 + store { ptr, i64, i64 } { ptr @.str.3684, i64 6, i64 0 }, ptr %a321 + call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) + store { ptr, i64, i64 } %t318, ptr %a322 + call void @finch_str_drop(ptr %a322) + %t323 = load { ptr, i64, i64 }, ptr %a319 + %t324 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t323, ptr %a326 + store { ptr, i64, i64 } %t324, ptr %a327 + call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) + store { ptr, i64, i64 } %t323, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a325 + store { ptr, i64, i64 } %t329, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.3685, i64 3, i64 0 }, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + store { ptr, i64, i64 } %t329, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = load { ptr, i64, i64 }, ptr %a330 + %t335 = load { ptr, i64, i64 }, ptr %a216 + store { ptr, i64, i64 } %t334, ptr %a337 + store { ptr, i64, i64 } %t335, ptr %a338 + call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) + store { ptr, i64, i64 } %t334, ptr %a339 + call void @finch_str_drop(ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t340, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.3686, i64 2, i64 0 }, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t340, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load { ptr, i64, i64 }, ptr %a341 + %t346 = call { ptr, i64, i64 } @finch.gen.op(ptr %t288, { ptr, i64, i64 } %t345) + store { ptr, i64, i64 } %t345, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t346, 0 + %t349 = load %S.ast.Type, ptr %a32 + store %S.ast.Type %t349, ptr %a350 + call void @finch.copy.S_ast_Type(ptr %a351, ptr %a350) + %t352 = load %S.ast.Type, ptr %a351 + %t353 = insertvalue %S.gen.Val %t348, %S.ast.Type %t352, 1 + %t354 = load ptr, ptr %a1 + %t355 = load %S.ast.Type, ptr %a32 + %t356 = call i1 @finch.gen.owning(ptr %t354, %S.ast.Type %t355) + %t357 = insertvalue %S.gen.Val %t353, i1 %t356, 2 + call void @finch_str_drop(ptr %a279) + call void @finch_str_drop(ptr %a246) + call void @finch_str_drop(ptr %a219) + call void @finch_str_drop(ptr %a216) + call void @finch_str_drop(ptr %a213) + call void @finch_str_drop(ptr %a210) + call void @finch_str_drop(ptr %a207) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a91) + call void @finch.drop.S_gen_Val(ptr %a82) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t357 +endif5745: + %t358 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t358, ptr %a359 + store { ptr, i64, i64 } { ptr @.str.3687, i64 5, i64 0 }, ptr %a360 + %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) + %t362 = icmp ne i32 %t361, 0 + br i1 %t362, label %then5763, label %endif5765 +then5763: + %t363 = load ptr, ptr %a1 + %t364 = load %S.ast.Node, ptr %a2 + %t365 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t363, %S.ast.Node %t364, i64 1, i64 0, { ptr, i64, i64 } %t365) + %t366 = load ptr, ptr %a1 + %t367 = load %S.ast.Type, ptr %a21 + %t368 = call i1 @finch.gen.owning(ptr %t366, %S.ast.Type %t367) + br label %logic.from5766 +logic.from5766: + br i1 %t368, label %logic.end5768, label %logic.rhs5767 +logic.rhs5767: + %t369 = load ptr, ptr %a1 + %t370 = load %S.ast.Type, ptr %a32 + %t371 = call i1 @finch.gen.owning(ptr %t369, %S.ast.Type %t370) + br label %logic.rend5769 +logic.rend5769: + br label %logic.end5768 +logic.end5768: + %t372 = phi i1 [ true, %logic.from5766 ], [ %t371, %logic.rend5769 ] + br i1 %t372, label %then5770, label %endif5772 +then5770: + %t373 = load ptr, ptr %a1 + %t374 = load ptr, ptr %a1 + %t375 = load ptr, ptr %a1 + %t376 = load %S.ast.Type, ptr %a4 + %t377 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t375, %S.ast.Type %t376) + store { ptr, i64, i64 } { ptr @.str.3689, i64 23, i64 0 }, ptr %a379 + store { ptr, i64, i64 } %t377, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + store { ptr, i64, i64 } %t382, ptr %a384 + store { ptr, i64, i64 } { ptr @.str.3690, i64 6, i64 0 }, ptr %a385 + call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) + store { ptr, i64, i64 } %t382, ptr %a386 + call void @finch_str_drop(ptr %a386) + %t387 = load { ptr, i64, i64 }, ptr %a383 + %t388 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t387, ptr %a390 + store { ptr, i64, i64 } %t388, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t387, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + store { ptr, i64, i64 } %t393, ptr %a395 + store { ptr, i64, i64 } { ptr @.str.3691, i64 14, i64 0 }, ptr %a396 + call void @finch_str_concat(ptr %a394, ptr %a395, ptr %a396) + store { ptr, i64, i64 } %t393, ptr %a397 + call void @finch_str_drop(ptr %a397) + %t398 = load { ptr, i64, i64 }, ptr %a394 + %t399 = call { ptr, i64, i64 } @finch.gen.op(ptr %t374, { ptr, i64, i64 } %t398) + store { ptr, i64, i64 } %t398, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = call { ptr, i64, i64 } @finch.gen.load(ptr %t373, { ptr, i64, i64 } { ptr @.str.3688, i64 3, i64 0 }, { ptr, i64, i64 } %t399) + store { ptr, i64, i64 } %t399, ptr %a402 + call void @finch_str_drop(ptr %a402) + store { ptr, i64, i64 } %t401, ptr %a403 + %t404 = load ptr, ptr %a1 + %t405 = load { ptr, i64, i64 }, ptr %a403 + %t406 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t404, { ptr, i64, i64 } %t405) + store { ptr, i64, i64 } %t406, ptr %a407 + %t408 = load ptr, ptr %a1 + %t409 = load { ptr, i64, i64 }, ptr %a3 + %t410 = load %S.ast.Type, ptr %a4 + %t411 = load { ptr, i64, i64 }, ptr %a407 + %t412 = extractvalue { ptr, i64, i64 } %t411, 1 + %t413 = icmp uge i64 3, %t412 + br i1 %t413, label %range5773, label %inrange5774 +range5773: + call void @finch_panic_index(ptr @.str.3692, i64 2975, i64 3, i64 %t412) + unreachable +inrange5774: + %t414 = extractvalue { ptr, i64, i64 } %t411, 0 + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 3 + %t416 = load { ptr, i64, i64 }, ptr %t415 + %t417 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t408, { ptr, i64, i64 } %t409, %S.ast.Type %t410, { ptr, i64, i64 } %t416) + store { ptr, i64, i64 } %t417, ptr %a418 + %t419 = load ptr, ptr %a1 + %t420 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t419, { ptr, i64, i64 } { ptr @.str.3693, i64 10, i64 0 }) + store { ptr, i64, i64 } %t420, ptr %a421 + %t422 = load ptr, ptr %a1 + %t423 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t422, { ptr, i64, i64 } { ptr @.str.3694, i64 10, i64 0 }) + store { ptr, i64, i64 } %t423, ptr %a424 + %t425 = load ptr, ptr %a1 + %t426 = load ptr, ptr %a1 + %t427 = load ptr, ptr %a1 + %t428 = load ptr, ptr %a1 + %t429 = load { ptr, i64, i64 }, ptr %a418 + %t430 = load %S.ast.Type, ptr %a4 + %t431 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t428, { ptr, i64, i64 } %t429, %S.ast.Type %t430, i64 0) + %t432 = call { ptr, i64, i64 } @finch.gen.load(ptr %t427, { ptr, i64, i64 } { ptr @.str.3696, i64 3, i64 0 }, { ptr, i64, i64 } %t431) + store { ptr, i64, i64 } %t431, ptr %a433 + call void @finch_str_drop(ptr %a433) + store { ptr, i64, i64 } { ptr @.str.3695, i64 12, i64 0 }, ptr %a435 + store { ptr, i64, i64 } %t432, ptr %a436 + call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) + store { ptr, i64, i64 } %t432, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a434 + store { ptr, i64, i64 } %t438, ptr %a440 + store { ptr, i64, i64 } { ptr @.str.3697, i64 3, i64 0 }, ptr %a441 + call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) + store { ptr, i64, i64 } %t438, ptr %a442 + call void @finch_str_drop(ptr %a442) + %t443 = load { ptr, i64, i64 }, ptr %a439 + %t444 = call { ptr, i64, i64 } @finch.gen.op(ptr %t426, { ptr, i64, i64 } %t443) + store { ptr, i64, i64 } %t443, ptr %a445 + call void @finch_str_drop(ptr %a445) + %t446 = load { ptr, i64, i64 }, ptr %a421 + %t447 = load { ptr, i64, i64 }, ptr %a424 + call void @finch.gen.condBr(ptr %t425, { ptr, i64, i64 } %t444, { ptr, i64, i64 } %t446, { ptr, i64, i64 } %t447) + store { ptr, i64, i64 } %t444, ptr %a448 + call void @finch_str_drop(ptr %a448) + %t449 = load ptr, ptr %a1 + %t450 = load { ptr, i64, i64 }, ptr %a421 + call void @finch.gen.label(ptr %t449, { ptr, i64, i64 } %t450) + %t451 = load ptr, ptr %a1 + %t452 = load ptr, ptr %a1 + %t453 = load { ptr, i64, i64 }, ptr %a418 + %t454 = load %S.ast.Type, ptr %a4 + %t455 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t452, { ptr, i64, i64 } %t453, %S.ast.Type %t454, i64 1) + %t456 = load %S.ast.Type, ptr %a21 + call void @finch.gen.dropAt(ptr %t451, { ptr, i64, i64 } %t455, %S.ast.Type %t456) + store { ptr, i64, i64 } %t455, ptr %a457 + call void @finch_str_drop(ptr %a457) + %t458 = load ptr, ptr %a1 + %t459 = load ptr, ptr %a1 + %t460 = load { ptr, i64, i64 }, ptr %a418 + %t461 = load %S.ast.Type, ptr %a4 + %t462 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t459, { ptr, i64, i64 } %t460, %S.ast.Type %t461, i64 2) + %t463 = load %S.ast.Type, ptr %a32 + call void @finch.gen.dropAt(ptr %t458, { ptr, i64, i64 } %t462, %S.ast.Type %t463) + store { ptr, i64, i64 } %t462, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = load ptr, ptr %a1 + %t466 = load { ptr, i64, i64 }, ptr %a424 + call void @finch.gen.br(ptr %t465, { ptr, i64, i64 } %t466) + %t467 = load ptr, ptr %a1 + %t468 = load { ptr, i64, i64 }, ptr %a424 + call void @finch.gen.label(ptr %t467, { ptr, i64, i64 } %t468) + %t469 = load ptr, ptr %a1 + %t470 = load { ptr, i64, i64 }, ptr %a407 + call void @finch.gen.loopEnd(ptr %t469, { ptr, i64, i64 } %t470) + call void @finch_str_drop(ptr %a424) + call void @finch_str_drop(ptr %a421) + call void @finch_str_drop(ptr %a418) + call void @finch.drop.arr_str(ptr %a407) + call void @finch_str_drop(ptr %a403) + br label %endif5772 +endif5772: + %t471 = load ptr, ptr %a1 + %t472 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.3698, i64 31, i64 0 }, ptr %a474 + store { ptr, i64, i64 } %t472, ptr %a475 + call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) + %t476 = load { ptr, i64, i64 }, ptr %a473 + store { ptr, i64, i64 } %t476, ptr %a478 + store { ptr, i64, i64 } { ptr @.str.3699, i64 1, i64 0 }, ptr %a479 + call void @finch_str_concat(ptr %a477, ptr %a478, ptr %a479) + store { ptr, i64, i64 } %t476, ptr %a480 + call void @finch_str_drop(ptr %a480) + %t481 = load { ptr, i64, i64 }, ptr %a477 + call void @finch.gen.emit(ptr %t471, { ptr, i64, i64 } %t481) + store { ptr, i64, i64 } %t481, ptr %a482 + call void @finch_str_drop(ptr %a482) + %t483 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3700, i64 4, i64 0 }) + %t484 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t483, 1 + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t484 +endif5765: + %t485 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t485, ptr %a486 + store { ptr, i64, i64 } { ptr @.str.3701, i64 4, i64 0 }, ptr %a487 + %t488 = call i32 @finch_str_eq(ptr %a486, ptr %a487) + %t489 = icmp ne i32 %t488, 0 + br label %logic.from5775 +logic.from5775: + br i1 %t489, label %logic.end5777, label %logic.rhs5776 +logic.rhs5776: + %t490 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t490, ptr %a491 + store { ptr, i64, i64 } { ptr @.str.3702, i64 6, i64 0 }, ptr %a492 + %t493 = call i32 @finch_str_eq(ptr %a491, ptr %a492) + %t494 = icmp ne i32 %t493, 0 + br label %logic.rend5778 +logic.rend5778: + br label %logic.end5777 +logic.end5777: + %t495 = phi i1 [ true, %logic.from5775 ], [ %t494, %logic.rend5778 ] + br i1 %t495, label %then5779, label %endif5781 +then5779: + %t496 = load ptr, ptr %a1 + %t497 = load %S.ast.Node, ptr %a2 + %t498 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t496, %S.ast.Node %t497, i64 1, i64 0, { ptr, i64, i64 } %t498) + store i64 1, ptr %a499 + %t500 = load %S.ast.Type, ptr %a21 + store %S.ast.Type %t500, ptr %a501 + call void @finch.copy.S_ast_Type(ptr %a502, ptr %a501) + %t503 = load %S.ast.Type, ptr %a502 + store %S.ast.Type %t503, ptr %a504 + %t505 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t505, ptr %a506 + store { ptr, i64, i64 } { ptr @.str.3703, i64 6, i64 0 }, ptr %a507 + %t508 = call i32 @finch_str_eq(ptr %a506, ptr %a507) + %t509 = icmp ne i32 %t508, 0 + br i1 %t509, label %then5782, label %endif5784 +then5782: + store i64 2, ptr %a499 + %t510 = load %S.ast.Type, ptr %a32 + store %S.ast.Type %t510, ptr %a511 + call void @finch.copy.S_ast_Type(ptr %a512, ptr %a511) + %t513 = load %S.ast.Type, ptr %a512 + %t514 = load %S.ast.Type, ptr %a504 + store %S.ast.Type %t513, ptr %a504 + store %S.ast.Type %t514, ptr %a515 + call void @finch.drop.S_ast_Type(ptr %a515) + br label %endif5784 +endif5784: + %t516 = load %S.ast.Type, ptr %a504 + %t517 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t516) + store %S.ast.Type %t517, ptr %a518 + %t519 = load ptr, ptr %a1 + %t520 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t519, { ptr, i64, i64 } { ptr @.str.3704, i64 17, i64 0 }) + store { ptr, i64, i64 } %t520, ptr %a521 + %t522 = load ptr, ptr %a1 + %t523 = load { ptr, i64, i64 }, ptr %a521 + call void @finch.gen.store(ptr %t522, { ptr, i64, i64 } { ptr @.str.3705, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3706, i64 15, i64 0 }, { ptr, i64, i64 } %t523) + %t524 = load ptr, ptr %a1 + %t525 = load ptr, ptr %a1 + %t526 = load ptr, ptr %a1 + %t527 = load %S.ast.Type, ptr %a4 + %t528 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t526, %S.ast.Type %t527) + store { ptr, i64, i64 } { ptr @.str.3708, i64 23, i64 0 }, ptr %a530 + store { ptr, i64, i64 } %t528, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + store { ptr, i64, i64 } %t533, ptr %a535 + store { ptr, i64, i64 } { ptr @.str.3709, i64 6, i64 0 }, ptr %a536 + call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536) + store { ptr, i64, i64 } %t533, ptr %a537 + call void @finch_str_drop(ptr %a537) + %t538 = load { ptr, i64, i64 }, ptr %a534 + %t539 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t538, ptr %a541 + store { ptr, i64, i64 } %t539, ptr %a542 + call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) + store { ptr, i64, i64 } %t538, ptr %a543 + call void @finch_str_drop(ptr %a543) + %t544 = load { ptr, i64, i64 }, ptr %a540 + store { ptr, i64, i64 } %t544, ptr %a546 + store { ptr, i64, i64 } { ptr @.str.3710, i64 14, i64 0 }, ptr %a547 + call void @finch_str_concat(ptr %a545, ptr %a546, ptr %a547) + store { ptr, i64, i64 } %t544, ptr %a548 + call void @finch_str_drop(ptr %a548) + %t549 = load { ptr, i64, i64 }, ptr %a545 + %t550 = call { ptr, i64, i64 } @finch.gen.op(ptr %t525, { ptr, i64, i64 } %t549) + store { ptr, i64, i64 } %t549, ptr %a551 + call void @finch_str_drop(ptr %a551) + %t552 = call { ptr, i64, i64 } @finch.gen.load(ptr %t524, { ptr, i64, i64 } { ptr @.str.3707, i64 3, i64 0 }, { ptr, i64, i64 } %t550) + store { ptr, i64, i64 } %t550, ptr %a553 + call void @finch_str_drop(ptr %a553) + store { ptr, i64, i64 } %t552, ptr %a554 + %t555 = load ptr, ptr %a1 + %t556 = load { ptr, i64, i64 }, ptr %a521 + store { ptr, i64, i64 } { ptr @.str.3711, i64 30, i64 0 }, ptr %a558 + store { ptr, i64, i64 } %t556, ptr %a559 + call void @finch_str_concat(ptr %a557, ptr %a558, ptr %a559) + %t560 = load { ptr, i64, i64 }, ptr %a557 + store { ptr, i64, i64 } %t560, ptr %a562 + store { ptr, i64, i64 } { ptr @.str.3712, i64 6, i64 0 }, ptr %a563 + call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) + store { ptr, i64, i64 } %t560, ptr %a564 + call void @finch_str_drop(ptr %a564) + %t565 = load { ptr, i64, i64 }, ptr %a561 + %t566 = load { ptr, i64, i64 }, ptr %a554 + store { ptr, i64, i64 } %t565, ptr %a568 + store { ptr, i64, i64 } %t566, ptr %a569 + call void @finch_str_concat(ptr %a567, ptr %a568, ptr %a569) + store { ptr, i64, i64 } %t565, ptr %a570 + call void @finch_str_drop(ptr %a570) + %t571 = load { ptr, i64, i64 }, ptr %a567 + store { ptr, i64, i64 } %t571, ptr %a573 + store { ptr, i64, i64 } { ptr @.str.3713, i64 6, i64 0 }, ptr %a574 + call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) + store { ptr, i64, i64 } %t571, ptr %a575 + call void @finch_str_drop(ptr %a575) + %t576 = load { ptr, i64, i64 }, ptr %a572 + %t577 = load ptr, ptr %a1 + %t578 = load %S.ast.Type, ptr %a504 + %t579 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t577, %S.ast.Type %t578) + store { ptr, i64, i64 } %t576, ptr %a581 + store { ptr, i64, i64 } %t579, ptr %a582 + call void @finch_str_concat(ptr %a580, ptr %a581, ptr %a582) + store { ptr, i64, i64 } %t576, ptr %a583 + call void @finch_str_drop(ptr %a583) + store { ptr, i64, i64 } %t579, ptr %a584 + call void @finch_str_drop(ptr %a584) + %t585 = load { ptr, i64, i64 }, ptr %a580 + store { ptr, i64, i64 } %t585, ptr %a587 + store { ptr, i64, i64 } { ptr @.str.3714, i64 1, i64 0 }, ptr %a588 + call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588) + store { ptr, i64, i64 } %t585, ptr %a589 + call void @finch_str_drop(ptr %a589) + %t590 = load { ptr, i64, i64 }, ptr %a586 + call void @finch.gen.emit(ptr %t555, { ptr, i64, i64 } %t590) + store { ptr, i64, i64 } %t590, ptr %a591 + call void @finch_str_drop(ptr %a591) + %t592 = load ptr, ptr %a1 + %t593 = load { ptr, i64, i64 }, ptr %a521 + %t594 = call { ptr, i64, i64 } @finch.gen.load(ptr %t592, { ptr, i64, i64 } { ptr @.str.3715, i64 3, i64 0 }, { ptr, i64, i64 } %t593) + store { ptr, i64, i64 } %t594, ptr %a595 + %t596 = load ptr, ptr %a1 + %t597 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t596, { ptr, i64, i64 } { ptr @.str.3716, i64 3, i64 0 }) + store { ptr, i64, i64 } %t597, ptr %a598 + %t599 = load ptr, ptr %a1 + %t600 = load { ptr, i64, i64 }, ptr %a598 + call void @finch.gen.store(ptr %t599, { ptr, i64, i64 } { ptr @.str.3717, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3718, i64 1, i64 0 }, { ptr, i64, i64 } %t600) + %t601 = load ptr, ptr %a1 + %t602 = load ptr, ptr %a1 + %t603 = load ptr, ptr %a1 + %t604 = load %S.ast.Type, ptr %a4 + %t605 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t603, %S.ast.Type %t604) + store { ptr, i64, i64 } { ptr @.str.3720, i64 23, i64 0 }, ptr %a607 + store { ptr, i64, i64 } %t605, ptr %a608 + call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) + store { ptr, i64, i64 } %t605, ptr %a609 + call void @finch_str_drop(ptr %a609) + %t610 = load { ptr, i64, i64 }, ptr %a606 + store { ptr, i64, i64 } %t610, ptr %a612 + store { ptr, i64, i64 } { ptr @.str.3721, i64 6, i64 0 }, ptr %a613 + call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) + store { ptr, i64, i64 } %t610, ptr %a614 + call void @finch_str_drop(ptr %a614) + %t615 = load { ptr, i64, i64 }, ptr %a611 + %t616 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t615, ptr %a618 + store { ptr, i64, i64 } %t616, ptr %a619 + call void @finch_str_concat(ptr %a617, ptr %a618, ptr %a619) + store { ptr, i64, i64 } %t615, ptr %a620 + call void @finch_str_drop(ptr %a620) + %t621 = load { ptr, i64, i64 }, ptr %a617 + store { ptr, i64, i64 } %t621, ptr %a623 + store { ptr, i64, i64 } { ptr @.str.3722, i64 14, i64 0 }, ptr %a624 + call void @finch_str_concat(ptr %a622, ptr %a623, ptr %a624) + store { ptr, i64, i64 } %t621, ptr %a625 + call void @finch_str_drop(ptr %a625) + %t626 = load { ptr, i64, i64 }, ptr %a622 + %t627 = call { ptr, i64, i64 } @finch.gen.op(ptr %t602, { ptr, i64, i64 } %t626) + store { ptr, i64, i64 } %t626, ptr %a628 + call void @finch_str_drop(ptr %a628) + %t629 = call { ptr, i64, i64 } @finch.gen.load(ptr %t601, { ptr, i64, i64 } { ptr @.str.3719, i64 3, i64 0 }, { ptr, i64, i64 } %t627) + store { ptr, i64, i64 } %t627, ptr %a630 + call void @finch_str_drop(ptr %a630) + store { ptr, i64, i64 } %t629, ptr %a631 + %t632 = load ptr, ptr %a1 + %t633 = load { ptr, i64, i64 }, ptr %a631 + %t634 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t632, { ptr, i64, i64 } %t633) + store { ptr, i64, i64 } %t634, ptr %a635 + %t636 = load ptr, ptr %a1 + %t637 = load { ptr, i64, i64 }, ptr %a3 + %t638 = load %S.ast.Type, ptr %a4 + %t639 = load { ptr, i64, i64 }, ptr %a635 + %t640 = extractvalue { ptr, i64, i64 } %t639, 1 + %t641 = icmp uge i64 3, %t640 + br i1 %t641, label %range5785, label %inrange5786 +range5785: + call void @finch_panic_index(ptr @.str.3723, i64 3007, i64 3, i64 %t640) + unreachable +inrange5786: + %t642 = extractvalue { ptr, i64, i64 } %t639, 0 + %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %t642, i64 3 + %t644 = load { ptr, i64, i64 }, ptr %t643 + %t645 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t636, { ptr, i64, i64 } %t637, %S.ast.Type %t638, { ptr, i64, i64 } %t644) + store { ptr, i64, i64 } %t645, ptr %a646 + %t647 = load ptr, ptr %a1 + %t648 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t647, { ptr, i64, i64 } { ptr @.str.3724, i64 10, i64 0 }) + store { ptr, i64, i64 } %t648, ptr %a649 + %t650 = load ptr, ptr %a1 + %t651 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t650, { ptr, i64, i64 } { ptr @.str.3725, i64 10, i64 0 }) + store { ptr, i64, i64 } %t651, ptr %a652 + %t653 = load ptr, ptr %a1 + %t654 = load ptr, ptr %a1 + %t655 = load ptr, ptr %a1 + %t656 = load ptr, ptr %a1 + %t657 = load { ptr, i64, i64 }, ptr %a646 + %t658 = load %S.ast.Type, ptr %a4 + %t659 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t656, { ptr, i64, i64 } %t657, %S.ast.Type %t658, i64 0) + %t660 = call { ptr, i64, i64 } @finch.gen.load(ptr %t655, { ptr, i64, i64 } { ptr @.str.3727, i64 3, i64 0 }, { ptr, i64, i64 } %t659) + store { ptr, i64, i64 } %t659, ptr %a661 + call void @finch_str_drop(ptr %a661) + store { ptr, i64, i64 } { ptr @.str.3726, i64 12, i64 0 }, ptr %a663 + store { ptr, i64, i64 } %t660, ptr %a664 + call void @finch_str_concat(ptr %a662, ptr %a663, ptr %a664) + store { ptr, i64, i64 } %t660, ptr %a665 + call void @finch_str_drop(ptr %a665) + %t666 = load { ptr, i64, i64 }, ptr %a662 + store { ptr, i64, i64 } %t666, ptr %a668 + store { ptr, i64, i64 } { ptr @.str.3728, i64 3, i64 0 }, ptr %a669 + call void @finch_str_concat(ptr %a667, ptr %a668, ptr %a669) + store { ptr, i64, i64 } %t666, ptr %a670 + call void @finch_str_drop(ptr %a670) + %t671 = load { ptr, i64, i64 }, ptr %a667 + %t672 = call { ptr, i64, i64 } @finch.gen.op(ptr %t654, { ptr, i64, i64 } %t671) + store { ptr, i64, i64 } %t671, ptr %a673 + call void @finch_str_drop(ptr %a673) + %t674 = load { ptr, i64, i64 }, ptr %a649 + %t675 = load { ptr, i64, i64 }, ptr %a652 + call void @finch.gen.condBr(ptr %t653, { ptr, i64, i64 } %t672, { ptr, i64, i64 } %t674, { ptr, i64, i64 } %t675) + store { ptr, i64, i64 } %t672, ptr %a676 + call void @finch_str_drop(ptr %a676) + %t677 = load ptr, ptr %a1 + %t678 = load { ptr, i64, i64 }, ptr %a649 + call void @finch.gen.label(ptr %t677, { ptr, i64, i64 } %t678) + %t679 = load ptr, ptr %a1 + %t680 = load { ptr, i64, i64 }, ptr %a598 + %t681 = call { ptr, i64, i64 } @finch.gen.load(ptr %t679, { ptr, i64, i64 } { ptr @.str.3729, i64 3, i64 0 }, { ptr, i64, i64 } %t680) + store { ptr, i64, i64 } %t681, ptr %a682 + %t683 = load ptr, ptr %a1 + %t684 = load ptr, ptr %a1 + %t685 = load ptr, ptr %a1 + %t686 = load %S.ast.Type, ptr %a504 + %t687 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t685, %S.ast.Type %t686) + store { ptr, i64, i64 } { ptr @.str.3730, i64 23, i64 0 }, ptr %a689 + store { ptr, i64, i64 } %t687, ptr %a690 + call void @finch_str_concat(ptr %a688, ptr %a689, ptr %a690) + store { ptr, i64, i64 } %t687, ptr %a691 + call void @finch_str_drop(ptr %a691) + %t692 = load { ptr, i64, i64 }, ptr %a688 + store { ptr, i64, i64 } %t692, ptr %a694 + store { ptr, i64, i64 } { ptr @.str.3731, i64 6, i64 0 }, ptr %a695 + call void @finch_str_concat(ptr %a693, ptr %a694, ptr %a695) + store { ptr, i64, i64 } %t692, ptr %a696 + call void @finch_str_drop(ptr %a696) + %t697 = load { ptr, i64, i64 }, ptr %a693 + %t698 = load { ptr, i64, i64 }, ptr %a595 + store { ptr, i64, i64 } %t697, ptr %a700 + store { ptr, i64, i64 } %t698, ptr %a701 + call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) + store { ptr, i64, i64 } %t697, ptr %a702 + call void @finch_str_drop(ptr %a702) + %t703 = load { ptr, i64, i64 }, ptr %a699 + store { ptr, i64, i64 } %t703, ptr %a705 + store { ptr, i64, i64 } { ptr @.str.3732, i64 6, i64 0 }, ptr %a706 + call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) + store { ptr, i64, i64 } %t703, ptr %a707 + call void @finch_str_drop(ptr %a707) + %t708 = load { ptr, i64, i64 }, ptr %a704 + %t709 = load { ptr, i64, i64 }, ptr %a682 + store { ptr, i64, i64 } %t708, ptr %a711 + store { ptr, i64, i64 } %t709, ptr %a712 + call void @finch_str_concat(ptr %a710, ptr %a711, ptr %a712) + store { ptr, i64, i64 } %t708, ptr %a713 + call void @finch_str_drop(ptr %a713) + %t714 = load { ptr, i64, i64 }, ptr %a710 + %t715 = call { ptr, i64, i64 } @finch.gen.op(ptr %t684, { ptr, i64, i64 } %t714) + store { ptr, i64, i64 } %t714, ptr %a716 + call void @finch_str_drop(ptr %a716) + %t717 = load ptr, ptr %a1 + %t718 = load { ptr, i64, i64 }, ptr %a646 + %t719 = load %S.ast.Type, ptr %a4 + %t720 = load i64, ptr %a499 + %t721 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t717, { ptr, i64, i64 } %t718, %S.ast.Type %t719, i64 %t720) + %t722 = load %S.ast.Type, ptr %a504 + call void @finch.gen.copyAt(ptr %t683, { ptr, i64, i64 } %t715, { ptr, i64, i64 } %t721, %S.ast.Type %t722) + store { ptr, i64, i64 } %t715, ptr %a723 + call void @finch_str_drop(ptr %a723) + store { ptr, i64, i64 } %t721, ptr %a724 + call void @finch_str_drop(ptr %a724) + %t725 = load ptr, ptr %a1 + %t726 = load ptr, ptr %a1 + %t727 = load { ptr, i64, i64 }, ptr %a682 + store { ptr, i64, i64 } { ptr @.str.3734, i64 8, i64 0 }, ptr %a729 + store { ptr, i64, i64 } %t727, ptr %a730 + call void @finch_str_concat(ptr %a728, ptr %a729, ptr %a730) + %t731 = load { ptr, i64, i64 }, ptr %a728 + store { ptr, i64, i64 } %t731, ptr %a733 + store { ptr, i64, i64 } { ptr @.str.3735, i64 3, i64 0 }, ptr %a734 + call void @finch_str_concat(ptr %a732, ptr %a733, ptr %a734) + store { ptr, i64, i64 } %t731, ptr %a735 + call void @finch_str_drop(ptr %a735) + %t736 = load { ptr, i64, i64 }, ptr %a732 + %t737 = call { ptr, i64, i64 } @finch.gen.op(ptr %t726, { ptr, i64, i64 } %t736) + store { ptr, i64, i64 } %t736, ptr %a738 + call void @finch_str_drop(ptr %a738) + %t739 = load { ptr, i64, i64 }, ptr %a598 + call void @finch.gen.store(ptr %t725, { ptr, i64, i64 } { ptr @.str.3733, i64 3, i64 0 }, { ptr, i64, i64 } %t737, { ptr, i64, i64 } %t739) + store { ptr, i64, i64 } %t737, ptr %a740 + call void @finch_str_drop(ptr %a740) + %t741 = load ptr, ptr %a1 + %t742 = load { ptr, i64, i64 }, ptr %a652 + call void @finch.gen.br(ptr %t741, { ptr, i64, i64 } %t742) + %t743 = load ptr, ptr %a1 + %t744 = load { ptr, i64, i64 }, ptr %a652 + call void @finch.gen.label(ptr %t743, { ptr, i64, i64 } %t744) + %t745 = load ptr, ptr %a1 + %t746 = load { ptr, i64, i64 }, ptr %a635 + call void @finch.gen.loopEnd(ptr %t745, { ptr, i64, i64 } %t746) + %t747 = load ptr, ptr %a1 + %t748 = load { ptr, i64, i64 }, ptr %a521 + %t749 = call { ptr, i64, i64 } @finch.gen.load(ptr %t747, { ptr, i64, i64 } { ptr @.str.3736, i64 17, i64 0 }, { ptr, i64, i64 } %t748) + %t750 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t749, 0 + %t751 = load %S.ast.Type, ptr %a518 + store %S.ast.Type %t751, ptr %a752 + call void @finch.copy.S_ast_Type(ptr %a753, ptr %a752) + %t754 = load %S.ast.Type, ptr %a753 + %t755 = insertvalue %S.gen.Val %t750, %S.ast.Type %t754, 1 + %t756 = insertvalue %S.gen.Val %t755, i1 true, 2 + call void @finch_str_drop(ptr %a682) + call void @finch_str_drop(ptr %a652) + call void @finch_str_drop(ptr %a649) + call void @finch_str_drop(ptr %a646) + call void @finch.drop.arr_str(ptr %a635) + call void @finch_str_drop(ptr %a631) + call void @finch_str_drop(ptr %a598) + call void @finch_str_drop(ptr %a595) + call void @finch_str_drop(ptr %a554) + call void @finch_str_drop(ptr %a521) + call void @finch.drop.S_ast_Type(ptr %a518) + call void @finch.drop.S_ast_Type(ptr %a504) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t756 +endif5781: + %t757 = load ptr, ptr %a1 + %t758 = load %S.ast.Node, ptr %a2 + %t759 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.3737, i64 21, i64 0 }, ptr %a761 + store { ptr, i64, i64 } %t759, ptr %a762 + call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) + %t763 = load { ptr, i64, i64 }, ptr %a760 + store { ptr, i64, i64 } %t763, ptr %a765 + store { ptr, i64, i64 } { ptr @.str.3738, i64 49, i64 0 }, ptr %a766 + call void @finch_str_concat(ptr %a764, ptr %a765, ptr %a766) + store { ptr, i64, i64 } %t763, ptr %a767 + call void @finch_str_drop(ptr %a767) + %t768 = load { ptr, i64, i64 }, ptr %a764 + call void @finch.gen.fail(ptr %t757, %S.ast.Node %t758, { ptr, i64, i64 } %t768) + store { ptr, i64, i64 } %t768, ptr %a769 + call void @finch_str_drop(ptr %a769) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val zeroinitializer +} + +define internal %S.gen.Val @finch.gen.patternValue(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca %S.gen.EnumDef, align 16 + %a39 = alloca %S.gen.EnumDef, align 16 + %a41 = alloca %S.gen.EnumDef, align 16 + %a46 = alloca i64, align 16 + %a49 = alloca i64, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca i64, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca %S.ast.Type, align 16 + %a118 = alloca %S.ast.Type, align 16 + %a129 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.3739, i64 4, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.from5787 +logic.from5787: + br i1 %t9, label %logic.rhs5788, label %logic.end5789 +logic.rhs5788: + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + store { ptr, i64, i64 } %t11, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.3740, i64 3, i64 0 }, ptr %a13 + %t14 = call i32 @finch_str_eq(ptr %a12, ptr %a13) + %t15 = icmp ne i32 %t14, 0 + br label %logic.rend5790 +logic.rend5790: + br label %logic.end5789 +logic.end5789: + %t16 = phi i1 [ false, %logic.from5787 ], [ %t15, %logic.rend5790 ] + br label %logic.from5791 +logic.from5791: + br i1 %t16, label %logic.rhs5792, label %logic.end5793 +logic.rhs5792: + %t17 = load ptr, ptr %a1 + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call i64 @finch.gen.lookup(ptr %t17, { ptr, i64, i64 } %t19) + %t21 = icmp slt i64 %t20, 0 + br label %logic.rend5794 +logic.rend5794: + br label %logic.end5793 +logic.end5793: + %t22 = phi i1 [ false, %logic.from5791 ], [ %t21, %logic.rend5794 ] + br i1 %t22, label %then5795, label %endif5797 +then5795: + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic5798, label %ok5799 +panic5798: + call void @finch_panic(ptr @.str.3741, i64 3029, ptr @.str.3742) + unreachable +ok5799: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 21 + %t26 = load ptr, ptr %a1 + %t27 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = call i64 @finch.gen.findEnum(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t30) + %t32 = load { ptr, i64, i64 }, ptr %t25 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range5800, label %inrange5801 +range5800: + call void @finch_panic_index(ptr @.str.3743, i64 3029, i64 %t31, i64 %t33) + unreachable +inrange5801: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 + %t37 = load %S.gen.EnumDef, ptr %t36 + store %S.gen.EnumDef %t37, ptr %a38 + call void @finch.copy.S_gen_EnumDef(ptr %a39, ptr %a38) + %t40 = load %S.gen.EnumDef, ptr %a39 + store %S.gen.EnumDef %t40, ptr %a41 + %t42 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 + %t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store i64 -1, ptr %a46 + %t47 = load i64, ptr %t43 + %t48 = load ptr, ptr %t42 + store i64 0, ptr %a49 + br label %find.cond5802 +find.cond5802: + %t50 = load i64, ptr %a49 + %t51 = icmp slt i64 %t50, %t47 + br i1 %t51, label %find.body5803, label %find.end5806 +find.body5803: + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t50 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t53, ptr %a54 + store { ptr, i64, i64 } %t45, ptr %a55 + %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) + %t57 = icmp ne i32 %t56, 0 + br i1 %t57, label %find.hit5804, label %find.next5805 +find.hit5804: + store i64 %t50, ptr %a46 + br label %find.end5806 +find.next5805: + %t58 = add i64 %t50, 1 + store i64 %t58, ptr %a49 + br label %find.cond5802 +find.end5806: + %t59 = load i64, ptr %a46 + store i64 %t59, ptr %a60 + %t61 = load i64, ptr %a60 + %t62 = icmp slt i64 %t61, 0 + br i1 %t62, label %then5807, label %endif5809 +then5807: + %t63 = load ptr, ptr %a1 + %t64 = load %S.ast.Node, ptr %a2 + %t65 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t66 = load { ptr, i64, i64 }, ptr %t65 + store { ptr, i64, i64 } { ptr @.str.3744, i64 1, i64 0 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.3745, i64 22, i64 0 }, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t70, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 1 + %t77 = load { ptr, i64, i64 }, ptr %t76 + store { ptr, i64, i64 } %t75, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t75, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t82, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.3746, i64 10, i64 0 }, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t82, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a83 + %t88 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 + %t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t88, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3747, i64 2, i64 0 }, ptr %a90 + call void @finch_str_join(ptr %a91, ptr %t88, ptr %a90) + %t92 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } %t87, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t87, ptr %a96 + call void @finch_str_drop(ptr %a96) + store { ptr, i64, i64 } %t92, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.3748, i64 1, i64 0 }, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + call void @finch.gen.fail(ptr %t63, %S.ast.Node %t64, { ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch_str_drop(ptr %a104) + br label %endif5809 +endif5809: + %t105 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 3 + %t106 = load i64, ptr %a60 + %t107 = load { ptr, i64, i64 }, ptr %t105 + %t108 = extractvalue { ptr, i64, i64 } %t107, 1 + %t109 = icmp uge i64 %t106, %t108 + br i1 %t109, label %range5810, label %inrange5811 +range5810: + call void @finch_panic_index(ptr @.str.3749, i64 3034, i64 %t106, i64 %t108) + unreachable +inrange5811: + %t110 = extractvalue { ptr, i64, i64 } %t107, 0 + %t111 = getelementptr inbounds i64, ptr %t110, i64 %t106 + %t112 = load i64, ptr %t111 + call void @finch_str_from_int(ptr %a113, i64 %t112) + %t114 = load { ptr, i64, i64 }, ptr %a113 + %t115 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t114, 0 + %t116 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t116, ptr %a117 + call void @finch.copy.S_ast_Type(ptr %a118, ptr %a117) + %t119 = load %S.ast.Type, ptr %a118 + %t120 = insertvalue %S.gen.Val %t115, %S.ast.Type %t119, 1 + call void @finch.drop.S_gen_EnumDef(ptr %a41) + ret %S.gen.Val %t120 +endif5797: + %t121 = load ptr, ptr %a1 + %t122 = load ptr, ptr %a1 + %t123 = load %S.ast.Node, ptr %a2 + %t124 = load %S.ast.Type, ptr %a3 + %t125 = call %S.gen.Val @finch.gen.exprWant(ptr %t122, %S.ast.Node %t123, %S.ast.Type %t124) + %t126 = load %S.ast.Type, ptr %a3 + %t127 = load %S.ast.Node, ptr %a2 + %t128 = call %S.gen.Val @finch.gen.coerce(ptr %t121, %S.gen.Val %t125, %S.ast.Type %t126, %S.ast.Node %t127, { ptr, i64, i64 } { ptr @.str.3750, i64 12, i64 0 }) + store %S.gen.Val %t125, ptr %a129 + call void @finch.drop.S_gen_Val(ptr %a129) + ret %S.gen.Val %t128 +} + +define internal void @finch.drop.S_gen_SumPat(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.SumPat, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_ast_Node(ptr %t1) + ret void +} + +define internal %S.gen.Val @finch.gen.matchGen(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a13 = alloca %S.gen.Val, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca i64, align 16 + %a49 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca i1, align 16 + %a128 = alloca i1, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca %S.ast.Type, align 16 + %a138 = alloca i64, align 16 + %a140 = alloca i64, align 16 + %a152 = alloca %S.ast.Node, align 16 + %a153 = alloca %S.ast.Node, align 16 + %a155 = alloca %S.ast.Node, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca i64, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca i64, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca %S.gen.SumPat, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca i64, align 16 + %a210 = alloca i64, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca %S.gen.Val, align 16 + %a303 = alloca i64, align 16 + %a306 = alloca i64, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca %S.gen.Val, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca i1, align 16 + %a404 = alloca %S.gen.StructDef, align 16 + %a405 = alloca %S.gen.StructDef, align 16 + %a407 = alloca %S.gen.StructDef, align 16 + %a410 = alloca i64, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca i64, align 16 + %a453 = alloca %S.ast.Type, align 16 + %a454 = alloca %S.ast.Type, align 16 + %a456 = alloca %S.ast.Type, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca %S.ast.Node, align 16 + %a536 = alloca %S.ast.Node, align 16 + %a538 = alloca %S.ast.Node, align 16 + %a543 = alloca %S.gen.Val, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca %S.ast.Type, align 16 + %a573 = alloca %S.ast.Type, align 16 + %a576 = alloca %S.ast.Type, align 16 + %a583 = alloca %S.gen.Val, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca i64, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca i64, align 16 + %a670 = alloca i64, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a702 = alloca { ptr, i64, i64 }, align 16 + %a703 = alloca { ptr, i64, i64 }, align 16 + %a717 = alloca { ptr, i64, i64 }, align 16 + %a718 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca %S.gen.EnumDef, align 16 + %a753 = alloca %S.gen.EnumDef, align 16 + %a755 = alloca %S.gen.EnumDef, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca i64, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca i64, align 16 + %a777 = alloca i64, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a823 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a839 = alloca { ptr, i64, i64 }, align 16 + %a840 = alloca { ptr, i64, i64 }, align 16 + %a841 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a867 = alloca { ptr, i64, i64 }, align 16 + %a868 = alloca { ptr, i64, i64 }, align 16 + %a869 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a880 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a882 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a887 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca %S.ast.Type, align 16 + %a891 = alloca %S.ast.Type, align 16 + %a898 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range5812, label %inrange5813 +range5812: + call void @finch_panic_index(ptr @.str.3751, i64 3042, i64 0, i64 %t7) + unreachable +inrange5813: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) + store %S.gen.Val %t12, ptr %a13 + %t14 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 1 + %t15 = load %S.ast.Type, ptr %t14 + store %S.ast.Type %t15, ptr %a16 + call void @finch.copy.S_ast_Type(ptr %a17, ptr %a16) + %t18 = load %S.ast.Type, ptr %a17 + store %S.ast.Type %t18, ptr %a19 + %t20 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.3752, i64 4, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br label %logic.from5814 +logic.from5814: + br i1 %t25, label %logic.end5816, label %logic.rhs5815 +logic.rhs5815: + %t26 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.3753, i64 4, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend5817 +logic.rend5817: + br label %logic.end5816 +logic.end5816: + %t32 = phi i1 [ true, %logic.from5814 ], [ %t31, %logic.rend5817 ] + br i1 %t32, label %then5818, label %endif5820 +then5818: + %t33 = load ptr, ptr %a1 + %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 0, %t36 + br i1 %t37, label %range5821, label %inrange5822 +range5821: + call void @finch_panic_index(ptr @.str.3754, i64 3045, i64 0, i64 %t36) + unreachable +inrange5822: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 0 + %t40 = load %S.ast.Node, ptr %t39 + call void @finch.gen.fail(ptr %t33, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.3755, i64 30, i64 0 }) + br label %endif5820 +endif5820: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic5823, label %ok5824 +panic5823: + call void @finch_panic(ptr @.str.3756, i64 3047, ptr @.str.3757) + unreachable +ok5824: + %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 11 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + store i64 %t45, ptr %a46 + %t47 = load ptr, ptr %a1 + %t48 = load %S.gen.Val, ptr %a13 + call void @finch.gen.hold(ptr %t47, %S.gen.Val %t48) + store i64 -1, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.3758, i64 0, i64 0 }, ptr %a50 + %t51 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.3759, i64 6, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then5825, label %endif5827 +then5825: + %t57 = load ptr, ptr %a1 + %t58 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t59 = load { ptr, i64, i64 }, ptr %t58 + %t60 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = call i64 @finch.gen.findSum(ptr %t57, { ptr, i64, i64 } %t59, { ptr, i64, i64 } %t61) + store i64 %t62, ptr %a49 + %t63 = load i64, ptr %a49 + %t64 = icmp sge i64 %t63, 0 + br i1 %t64, label %then5828, label %endif5830 +then5828: + %t65 = load ptr, ptr %a1 + %t66 = load ptr, ptr %a1 + %t67 = load %S.ast.Type, ptr %a19 + %t68 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t66, %S.ast.Type %t67) + store { ptr, i64, i64 } { ptr @.str.3760, i64 13, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.3761, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 0 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t78, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t78, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.3762, i64 2, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = load ptr, ptr %a1 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic5831, label %ok5832 +panic5831: + call void @finch_panic(ptr @.str.3763, i64 3054, ptr @.str.3764) + unreachable +ok5832: + %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 16 + %t94 = load ptr, ptr %a1 + %t95 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t96 = load { ptr, i64, i64 }, ptr %t95 + %t97 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t98 = load { ptr, i64, i64 }, ptr %t97 + %t99 = call i64 @finch.gen.findStruct(ptr %t94, { ptr, i64, i64 } %t96, { ptr, i64, i64 } %t98) + %t100 = load { ptr, i64, i64 }, ptr %t93 + %t101 = extractvalue { ptr, i64, i64 } %t100, 1 + %t102 = icmp uge i64 %t99, %t101 + br i1 %t102, label %range5833, label %inrange5834 +range5833: + call void @finch_panic_index(ptr @.str.3765, i64 3054, i64 %t99, i64 %t101) + unreachable +inrange5834: + %t103 = extractvalue { ptr, i64, i64 } %t100, 0 + %t104 = getelementptr inbounds %S.gen.StructDef, ptr %t103, i64 %t99 + %t105 = getelementptr inbounds %S.gen.StructDef, ptr %t104, i32 0, i32 3 + %t106 = load { ptr, i64, i64 }, ptr %t105 + %t107 = extractvalue { ptr, i64, i64 } %t106, 1 + %t108 = icmp uge i64 0, %t107 + br i1 %t108, label %range5835, label %inrange5836 +range5835: + call void @finch_panic_index(ptr @.str.3766, i64 3054, i64 0, i64 %t107) + unreachable +inrange5836: + %t109 = extractvalue { ptr, i64, i64 } %t106, 0 + %t110 = getelementptr inbounds i64, ptr %t109, i64 0 + %t111 = load i64, ptr %t110 + call void @finch_str_from_int(ptr %a112, i64 %t111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t90, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t90, ptr %a117 + call void @finch_str_drop(ptr %a117) + store { ptr, i64, i64 } %t113, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a114 + %t120 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t119) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t120, ptr %a50 + store { ptr, i64, i64 } %t122, ptr %a123 + call void @finch_str_drop(ptr %a123) + br label %endif5830 +endif5830: + br label %endif5827 +endif5827: + %t124 = load ptr, ptr %a1 + %t125 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t124, { ptr, i64, i64 } { ptr @.str.3767, i64 9, i64 0 }) + store { ptr, i64, i64 } %t125, ptr %a126 + store i1 false, ptr %a127 + store i1 false, ptr %a128 + store { ptr, i64, i64 } zeroinitializer, ptr %a129 + store { ptr, i64, i64 } zeroinitializer, ptr %a130 + store { ptr, i64, i64 } zeroinitializer, ptr %a131 + %t132 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3768, i64 4, i64 0 }) + store %S.ast.Type %t132, ptr %a133 + %t134 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = sub i64 %t136, 1 + store i64 %t137, ptr %a138 + %t139 = load i64, ptr %a138 + store i64 0, ptr %a140 + br label %for.cond5837 +for.cond5837: + %t141 = load i64, ptr %a140 + %t142 = icmp slt i64 %t141, %t139 + br i1 %t142, label %for.body5838, label %for.end5840 +for.body5838: + %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t144 = load i64, ptr %a140 + %t145 = add i64 1, %t144 + %t146 = load { ptr, i64, i64 }, ptr %t143 + %t147 = extractvalue { ptr, i64, i64 } %t146, 1 + %t148 = icmp uge i64 %t145, %t147 + br i1 %t148, label %range5841, label %inrange5842 +range5841: + call void @finch_panic_index(ptr @.str.3769, i64 3066, i64 %t145, i64 %t147) + unreachable +inrange5842: + %t149 = extractvalue { ptr, i64, i64 } %t146, 0 + %t150 = getelementptr inbounds %S.ast.Node, ptr %t149, i64 %t145 + %t151 = load %S.ast.Node, ptr %t150 + store %S.ast.Node %t151, ptr %a152 + call void @finch.copy.S_ast_Node(ptr %a153, ptr %a152) + %t154 = load %S.ast.Node, ptr %a153 + store %S.ast.Node %t154, ptr %a155 + %t156 = load i1, ptr %a127 + br i1 %t156, label %then5843, label %endif5845 +then5843: + %t157 = load ptr, ptr %a1 + %t158 = load %S.ast.Node, ptr %a155 + call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } { ptr @.str.3770, i64 72, i64 0 }) + br label %endif5845 +endif5845: + %t159 = load ptr, ptr %a1 + %t160 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t159, { ptr, i64, i64 } { ptr @.str.3771, i64 9, i64 0 }) + store { ptr, i64, i64 } %t160, ptr %a161 + %t162 = load ptr, ptr %a1 + %t163 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t162, { ptr, i64, i64 } { ptr @.str.3772, i64 10, i64 0 }) + store { ptr, i64, i64 } %t163, ptr %a164 + store { ptr, i64, i64 } zeroinitializer, ptr %a165 + store i64 -1, ptr %a166 + %t167 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 + %t168 = load i1, ptr %t167 + br i1 %t168, label %then5846, label %else5847 +then5846: + store i1 true, ptr %a127 + %t169 = load ptr, ptr %a1 + %t170 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.br(ptr %t169, { ptr, i64, i64 } %t170) + br label %endif5848 +else5847: + %t171 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 + %t172 = load { ptr, i64, i64 }, ptr %t171 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 0, %t173 + br i1 %t174, label %range5849, label %inrange5850 +range5849: + call void @finch_panic_index(ptr @.str.3773, i64 3078, i64 0, i64 %t173) + unreachable +inrange5850: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 0 + %t177 = getelementptr inbounds %S.ast.Node, ptr %t176, i32 0, i32 9 + %t178 = load { ptr, i64, i64 }, ptr %t177 + store { ptr, i64, i64 } %t178, ptr %a179 + call void @finch.copy.arr_S_ast_Node(ptr %a180, ptr %a179) + %t181 = load { ptr, i64, i64 }, ptr %a180 + store { ptr, i64, i64 } %t181, ptr %a182 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 + %t184 = load i64, ptr %t183 + store i64 0, ptr %a185 + br label %for.cond5851 +for.cond5851: + %t186 = load i64, ptr %a185 + %t187 = icmp slt i64 %t186, %t184 + br i1 %t187, label %for.body5852, label %for.end5854 +for.body5852: + store { ptr, i64, i64 } { ptr @.str.3774, i64 0, i64 0 }, ptr %a188 + %t189 = load i64, ptr %a49 + %t190 = icmp sge i64 %t189, 0 + br i1 %t190, label %then5855, label %else5856 +then5855: + %t191 = load ptr, ptr %a1 + %t192 = load i64, ptr %a185 + %t193 = load { ptr, i64, i64 }, ptr %a182 + %t194 = extractvalue { ptr, i64, i64 } %t193, 1 + %t195 = icmp uge i64 %t192, %t194 + br i1 %t195, label %range5858, label %inrange5859 +range5858: + call void @finch_panic_index(ptr @.str.3775, i64 3082, i64 %t192, i64 %t194) + unreachable +inrange5859: + %t196 = extractvalue { ptr, i64, i64 } %t193, 0 + %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 %t192 + %t198 = load %S.ast.Node, ptr %t197 + %t199 = load i64, ptr %a49 + %t200 = call %S.gen.SumPat @finch.gen.sumPattern(ptr %t191, %S.ast.Node %t198, i64 %t199) + store %S.gen.SumPat %t200, ptr %a201 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t203 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t204 = load i64, ptr %t203 + call void @finch_str_from_int(ptr %a205, i64 %t204) + %t206 = load { ptr, i64, i64 }, ptr %a205 + store i64 -1, ptr %a207 + %t208 = load i64, ptr %t202 + %t209 = load ptr, ptr %a129 + store i64 0, ptr %a210 + br label %find.cond5860 +find.cond5860: + %t211 = load i64, ptr %a210 + %t212 = icmp slt i64 %t211, %t208 + br i1 %t212, label %find.body5861, label %find.end5864 +find.body5861: + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i64 %t211 + %t214 = load { ptr, i64, i64 }, ptr %t213 + store { ptr, i64, i64 } %t214, ptr %a215 + store { ptr, i64, i64 } %t206, ptr %a216 + %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) + %t218 = icmp ne i32 %t217, 0 + br i1 %t218, label %find.hit5862, label %find.next5863 +find.hit5862: + store i64 %t211, ptr %a207 + br label %find.end5864 +find.next5863: + %t219 = add i64 %t211, 1 + store i64 %t219, ptr %a210 + br label %find.cond5860 +find.end5864: + store { ptr, i64, i64 } %t206, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load i64, ptr %a207 + %t222 = icmp sge i64 %t221, 0 + br i1 %t222, label %then5865, label %endif5867 +then5865: + %t223 = load ptr, ptr %a1 + %t224 = load i64, ptr %a185 + %t225 = load { ptr, i64, i64 }, ptr %a182 + %t226 = extractvalue { ptr, i64, i64 } %t225, 1 + %t227 = icmp uge i64 %t224, %t226 + br i1 %t227, label %range5868, label %inrange5869 +range5868: + call void @finch_panic_index(ptr @.str.3776, i64 3084, i64 %t224, i64 %t226) + unreachable +inrange5869: + %t228 = extractvalue { ptr, i64, i64 } %t225, 0 + %t229 = getelementptr inbounds %S.ast.Node, ptr %t228, i64 %t224 + %t230 = load %S.ast.Node, ptr %t229 + call void @finch.gen.fail(ptr %t223, %S.ast.Node %t230, { ptr, i64, i64 } { ptr @.str.3777, i64 49, i64 0 }) + br label %endif5867 +endif5867: + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t232 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t233 = load i64, ptr %t232 + call void @finch_str_from_int(ptr %a234, i64 %t233) + %t235 = load { ptr, i64, i64 }, ptr %a234 + %t236 = load i64, ptr %t231 + %t237 = add i64 %t236, 1 + call void @finch_arr_reserve(ptr %a129, i64 %t237, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t238 = load ptr, ptr %a129 + %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i64 %t236 + store { ptr, i64, i64 } %t235, ptr %t239 + store i64 %t237, ptr %t231 + %t240 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i32 0, i32 1 + %t242 = load i64, ptr %t241 + %t243 = icmp sgt i64 %t242, 0 + br i1 %t243, label %then5870, label %endif5872 +then5870: + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 + %t245 = load i64, ptr %t244 + %t246 = icmp sgt i64 %t245, 1 + br i1 %t246, label %then5873, label %endif5875 +then5873: + %t247 = load ptr, ptr %a1 + %t248 = load i64, ptr %a185 + %t249 = load { ptr, i64, i64 }, ptr %a182 + %t250 = extractvalue { ptr, i64, i64 } %t249, 1 + %t251 = icmp uge i64 %t248, %t250 + br i1 %t251, label %range5876, label %inrange5877 +range5876: + call void @finch_panic_index(ptr @.str.3778, i64 3089, i64 %t248, i64 %t250) + unreachable +inrange5877: + %t252 = extractvalue { ptr, i64, i64 } %t249, 0 + %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 + %t254 = load %S.ast.Node, ptr %t253 + call void @finch.gen.fail(ptr %t247, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3779, i64 52, i64 0 }) + br label %endif5875 +endif5875: + %t255 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 + %t256 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch.copy.arr_S_ast_Node(ptr %a258, ptr %a257) + %t259 = load { ptr, i64, i64 }, ptr %a258 + %t260 = load { ptr, i64, i64 }, ptr %a165 + store { ptr, i64, i64 } %t259, ptr %a165 + store { ptr, i64, i64 } %t260, ptr %a261 + call void @finch.drop.arr_S_ast_Node(ptr %a261) + %t262 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t263 = load i64, ptr %t262 + store i64 %t263, ptr %a166 + br label %endif5872 +endif5872: + %t264 = load ptr, ptr %a1 + %t265 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.3780, i64 12, i64 0 }, ptr %a267 + store { ptr, i64, i64 } %t265, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + %t269 = load { ptr, i64, i64 }, ptr %a266 + store { ptr, i64, i64 } %t269, ptr %a271 + store { ptr, i64, i64 } { ptr @.str.3781, i64 2, i64 0 }, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t269, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + %t275 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t276 = load i64, ptr %t275 + call void @finch_str_from_int(ptr %a277, i64 %t276) + %t278 = load { ptr, i64, i64 }, ptr %a277 + store { ptr, i64, i64 } %t274, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t274, ptr %a282 + call void @finch_str_drop(ptr %a282) + store { ptr, i64, i64 } %t278, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a279 + %t285 = call { ptr, i64, i64 } @finch.gen.op(ptr %t264, { ptr, i64, i64 } %t284) + store { ptr, i64, i64 } %t284, ptr %a286 + call void @finch_str_drop(ptr %a286) + %t287 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t285, ptr %a188 + store { ptr, i64, i64 } %t287, ptr %a288 + call void @finch_str_drop(ptr %a288) + call void @finch.drop.S_gen_SumPat(ptr %a201) + br label %endif5857 +else5856: + %t289 = load ptr, ptr %a1 + %t290 = load i64, ptr %a185 + %t291 = load { ptr, i64, i64 }, ptr %a182 + %t292 = extractvalue { ptr, i64, i64 } %t291, 1 + %t293 = icmp uge i64 %t290, %t292 + br i1 %t293, label %range5878, label %inrange5879 +range5878: + call void @finch_panic_index(ptr @.str.3782, i64 3096, i64 %t290, i64 %t292) + unreachable +inrange5879: + %t294 = extractvalue { ptr, i64, i64 } %t291, 0 + %t295 = getelementptr inbounds %S.ast.Node, ptr %t294, i64 %t290 + %t296 = load %S.ast.Node, ptr %t295 + %t297 = load %S.ast.Type, ptr %a19 + %t298 = call %S.gen.Val @finch.gen.patternValue(ptr %t289, %S.ast.Node %t296, %S.ast.Type %t297) + store %S.gen.Val %t298, ptr %a299 + %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t301 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store i64 -1, ptr %a303 + %t304 = load i64, ptr %t300 + %t305 = load ptr, ptr %a129 + store i64 0, ptr %a306 + br label %find.cond5880 +find.cond5880: + %t307 = load i64, ptr %a306 + %t308 = icmp slt i64 %t307, %t304 + br i1 %t308, label %find.body5881, label %find.end5884 +find.body5881: + %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t305, i64 %t307 + %t310 = load { ptr, i64, i64 }, ptr %t309 + store { ptr, i64, i64 } %t310, ptr %a311 + store { ptr, i64, i64 } %t302, ptr %a312 + %t313 = call i32 @finch_str_eq(ptr %a311, ptr %a312) + %t314 = icmp ne i32 %t313, 0 + br i1 %t314, label %find.hit5882, label %find.next5883 +find.hit5882: + store i64 %t307, ptr %a303 + br label %find.end5884 +find.next5883: + %t315 = add i64 %t307, 1 + store i64 %t315, ptr %a306 + br label %find.cond5880 +find.end5884: + %t316 = load i64, ptr %a303 + %t317 = icmp sge i64 %t316, 0 + br label %logic.from5885 +logic.from5885: + br i1 %t317, label %logic.rhs5886, label %logic.end5887 +logic.rhs5886: + %t318 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t319 = load { ptr, i64, i64 }, ptr %t318 + store { ptr, i64, i64 } %t319, ptr %a320 + store { ptr, i64, i64 } { ptr @.str.3783, i64 4, i64 0 }, ptr %a321 + %t322 = call i32 @finch_str_eq(ptr %a320, ptr %a321) + %t323 = icmp ne i32 %t322, 0 + br label %logic.rend5888 +logic.rend5888: + br label %logic.end5887 +logic.end5887: + %t324 = phi i1 [ false, %logic.from5885 ], [ %t323, %logic.rend5888 ] + br i1 %t324, label %then5889, label %endif5891 +then5889: + %t325 = load ptr, ptr %a1 + %t326 = load i64, ptr %a185 + %t327 = load { ptr, i64, i64 }, ptr %a182 + %t328 = extractvalue { ptr, i64, i64 } %t327, 1 + %t329 = icmp uge i64 %t326, %t328 + br i1 %t329, label %range5892, label %inrange5893 +range5892: + call void @finch_panic_index(ptr @.str.3784, i64 3098, i64 %t326, i64 %t328) + unreachable +inrange5893: + %t330 = extractvalue { ptr, i64, i64 } %t327, 0 + %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 + %t332 = load %S.ast.Node, ptr %t331 + call void @finch.gen.fail(ptr %t325, %S.ast.Node %t332, { ptr, i64, i64 } { ptr @.str.3785, i64 49, i64 0 }) + br label %endif5891 +endif5891: + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t334 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t335, ptr %a336 + call void @finch_str_copy(ptr %a337, ptr %a336) + %t338 = load { ptr, i64, i64 }, ptr %a337 + %t339 = load i64, ptr %t333 + %t340 = add i64 %t339, 1 + call void @finch_arr_reserve(ptr %a129, i64 %t340, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t341 = load ptr, ptr %a129 + %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 %t339 + store { ptr, i64, i64 } %t338, ptr %t342 + store i64 %t340, ptr %t333 + %t343 = load ptr, ptr %a1 + %t344 = load %S.gen.Val, ptr %a13 + %t345 = load %S.gen.Val, ptr %a299 + %t346 = load i64, ptr %a185 + %t347 = load { ptr, i64, i64 }, ptr %a182 + %t348 = extractvalue { ptr, i64, i64 } %t347, 1 + %t349 = icmp uge i64 %t346, %t348 + br i1 %t349, label %range5894, label %inrange5895 +range5894: + call void @finch_panic_index(ptr @.str.3787, i64 3101, i64 %t346, i64 %t348) + unreachable +inrange5895: + %t350 = extractvalue { ptr, i64, i64 } %t347, 0 + %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 %t346 + %t352 = load %S.ast.Node, ptr %t351 + %t353 = call %S.gen.Val @finch.gen.compare(ptr %t343, { ptr, i64, i64 } { ptr @.str.3786, i64 2, i64 0 }, %S.gen.Val %t344, %S.gen.Val %t345, %S.ast.Node %t352) + %t354 = extractvalue %S.gen.Val %t353, 0 + store { ptr, i64, i64 } %t354, ptr %a355 + call void @finch_str_copy(ptr %a356, ptr %a355) + %t357 = load { ptr, i64, i64 }, ptr %a356 + store %S.gen.Val %t353, ptr %a358 + call void @finch.drop.S_gen_Val(ptr %a358) + %t359 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t357, ptr %a188 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + call void @finch.drop.S_gen_Val(ptr %a299) + br label %endif5857 +endif5857: + %t361 = load i64, ptr %a185 + %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 + %t363 = load i64, ptr %t362 + %t364 = sub i64 %t363, 1 + %t365 = icmp eq i64 %t361, %t364 + br i1 %t365, label %then5896, label %else5897 +then5896: + %t366 = load ptr, ptr %a1 + %t367 = load { ptr, i64, i64 }, ptr %a188 + %t368 = load { ptr, i64, i64 }, ptr %a161 + %t369 = load { ptr, i64, i64 }, ptr %a164 + call void @finch.gen.condBr(ptr %t366, { ptr, i64, i64 } %t367, { ptr, i64, i64 } %t368, { ptr, i64, i64 } %t369) + br label %endif5898 +else5897: + %t370 = load ptr, ptr %a1 + %t371 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t370, { ptr, i64, i64 } { ptr @.str.3788, i64 8, i64 0 }) + store { ptr, i64, i64 } %t371, ptr %a372 + %t373 = load ptr, ptr %a1 + %t374 = load { ptr, i64, i64 }, ptr %a188 + %t375 = load { ptr, i64, i64 }, ptr %a161 + %t376 = load { ptr, i64, i64 }, ptr %a372 + call void @finch.gen.condBr(ptr %t373, { ptr, i64, i64 } %t374, { ptr, i64, i64 } %t375, { ptr, i64, i64 } %t376) + %t377 = load ptr, ptr %a1 + %t378 = load { ptr, i64, i64 }, ptr %a372 + call void @finch.gen.label(ptr %t377, { ptr, i64, i64 } %t378) + call void @finch_str_drop(ptr %a372) + br label %endif5898 +endif5898: + call void @finch_str_drop(ptr %a188) + br label %for.step5853 +for.step5853: + %t379 = load i64, ptr %a185 + %t380 = add i64 %t379, 1 + store i64 %t380, ptr %a185 + br label %for.cond5851 +for.end5854: + call void @finch.drop.arr_S_ast_Node(ptr %a182) + br label %endif5848 +endif5848: + %t381 = load ptr, ptr %a1 + %t382 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) + %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 + %t384 = load i64, ptr %t383 + %t385 = icmp sgt i64 %t384, 0 + store i1 %t385, ptr %a386 + %t387 = load i1, ptr %a386 + br i1 %t387, label %then5899, label %endif5901 +then5899: + %t388 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t388) + %t389 = load ptr, ptr %a1 + %t390 = icmp eq ptr %t389, null + br i1 %t390, label %panic5902, label %ok5903 +panic5902: + call void @finch_panic(ptr @.str.3789, i64 3116, ptr @.str.3790) + unreachable +ok5903: + %t391 = getelementptr inbounds %S.gen.Gen, ptr %t389, i32 0, i32 16 + %t392 = load ptr, ptr %a1 + %t393 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t394 = load { ptr, i64, i64 }, ptr %t393 + %t395 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t396 = load { ptr, i64, i64 }, ptr %t395 + %t397 = call i64 @finch.gen.findStruct(ptr %t392, { ptr, i64, i64 } %t394, { ptr, i64, i64 } %t396) + %t398 = load { ptr, i64, i64 }, ptr %t391 + %t399 = extractvalue { ptr, i64, i64 } %t398, 1 + %t400 = icmp uge i64 %t397, %t399 + br i1 %t400, label %range5904, label %inrange5905 +range5904: + call void @finch_panic_index(ptr @.str.3791, i64 3116, i64 %t397, i64 %t399) + unreachable +inrange5905: + %t401 = extractvalue { ptr, i64, i64 } %t398, 0 + %t402 = getelementptr inbounds %S.gen.StructDef, ptr %t401, i64 %t397 + %t403 = load %S.gen.StructDef, ptr %t402 + store %S.gen.StructDef %t403, ptr %a404 + call void @finch.copy.S_gen_StructDef(ptr %a405, ptr %a404) + %t406 = load %S.gen.StructDef, ptr %a405 + store %S.gen.StructDef %t406, ptr %a407 + %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 + %t409 = load i64, ptr %t408 + store i64 0, ptr %a410 + br label %for.cond5906 +for.cond5906: + %t411 = load i64, ptr %a410 + %t412 = icmp slt i64 %t411, %t409 + br i1 %t412, label %for.body5907, label %for.end5909 +for.body5907: + %t413 = load i64, ptr %a410 + %t414 = load { ptr, i64, i64 }, ptr %a165 + %t415 = extractvalue { ptr, i64, i64 } %t414, 1 + %t416 = icmp uge i64 %t413, %t415 + br i1 %t416, label %range5910, label %inrange5911 +range5910: + call void @finch_panic_index(ptr @.str.3792, i64 3118, i64 %t413, i64 %t415) + unreachable +inrange5911: + %t417 = extractvalue { ptr, i64, i64 } %t414, 0 + %t418 = getelementptr inbounds %S.ast.Node, ptr %t417, i64 %t413 + %t419 = getelementptr inbounds %S.ast.Node, ptr %t418, i32 0, i32 1 + %t420 = load { ptr, i64, i64 }, ptr %t419 + store { ptr, i64, i64 } %t420, ptr %a421 + store { ptr, i64, i64 } { ptr @.str.3793, i64 1, i64 0 }, ptr %a422 + %t423 = call i32 @finch_str_eq(ptr %a421, ptr %a422) + %t424 = icmp ne i32 %t423, 0 + br i1 %t424, label %then5912, label %endif5914 +then5912: + br label %for.step5908 +endif5914: + %t425 = load ptr, ptr %a1 + %t426 = icmp eq ptr %t425, null + br i1 %t426, label %panic5915, label %ok5916 +panic5915: + call void @finch_panic(ptr @.str.3794, i64 3121, ptr @.str.3795) + unreachable +ok5916: + %t427 = getelementptr inbounds %S.gen.Gen, ptr %t425, i32 0, i32 22 + %t428 = load i64, ptr %a49 + %t429 = load { ptr, i64, i64 }, ptr %t427 + %t430 = extractvalue { ptr, i64, i64 } %t429, 1 + %t431 = icmp uge i64 %t428, %t430 + br i1 %t431, label %range5917, label %inrange5918 +range5917: + call void @finch_panic_index(ptr @.str.3796, i64 3121, i64 %t428, i64 %t430) + unreachable +inrange5918: + %t432 = extractvalue { ptr, i64, i64 } %t429, 0 + %t433 = getelementptr inbounds %S.gen.SumDef, ptr %t432, i64 %t428 + %t434 = getelementptr inbounds %S.gen.SumDef, ptr %t433, i32 0, i32 4 + %t435 = load i64, ptr %a166 + %t436 = load { ptr, i64, i64 }, ptr %t434 + %t437 = extractvalue { ptr, i64, i64 } %t436, 1 + %t438 = icmp uge i64 %t435, %t437 + br i1 %t438, label %range5919, label %inrange5920 +range5919: + call void @finch_panic_index(ptr @.str.3797, i64 3121, i64 %t435, i64 %t437) + unreachable +inrange5920: + %t439 = extractvalue { ptr, i64, i64 } %t436, 0 + %t440 = getelementptr inbounds i64, ptr %t439, i64 %t435 + %t441 = load i64, ptr %t440 + %t442 = load i64, ptr %a410 + %t443 = add i64 %t441, %t442 + store i64 %t443, ptr %a444 + %t445 = getelementptr inbounds %S.gen.StructDef, ptr %a407, i32 0, i32 12 + %t446 = load i64, ptr %a444 + %t447 = load { ptr, i64, i64 }, ptr %t445 + %t448 = extractvalue { ptr, i64, i64 } %t447, 1 + %t449 = icmp uge i64 %t446, %t448 + br i1 %t449, label %range5921, label %inrange5922 +range5921: + call void @finch_panic_index(ptr @.str.3798, i64 3122, i64 %t446, i64 %t448) + unreachable +inrange5922: + %t450 = extractvalue { ptr, i64, i64 } %t447, 0 + %t451 = getelementptr inbounds %S.ast.Type, ptr %t450, i64 %t446 + %t452 = load %S.ast.Type, ptr %t451 + store %S.ast.Type %t452, ptr %a453 + call void @finch.copy.S_ast_Type(ptr %a454, ptr %a453) + %t455 = load %S.ast.Type, ptr %a454 + store %S.ast.Type %t455, ptr %a456 + %t457 = load ptr, ptr %a1 + %t458 = load ptr, ptr %a1 + %t459 = load %S.ast.Type, ptr %a19 + %t460 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t458, %S.ast.Type %t459) + store { ptr, i64, i64 } { ptr @.str.3799, i64 13, i64 0 }, ptr %a462 + store { ptr, i64, i64 } %t460, ptr %a463 + call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) + store { ptr, i64, i64 } %t460, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } %t465, ptr %a467 + store { ptr, i64, i64 } { ptr @.str.3800, i64 1, i64 0 }, ptr %a468 + call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) + store { ptr, i64, i64 } %t465, ptr %a469 + call void @finch_str_drop(ptr %a469) + %t470 = load { ptr, i64, i64 }, ptr %a466 + %t471 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 0 + %t472 = load { ptr, i64, i64 }, ptr %t471 + store { ptr, i64, i64 } %t470, ptr %a474 + store { ptr, i64, i64 } %t472, ptr %a475 + call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) + store { ptr, i64, i64 } %t470, ptr %a476 + call void @finch_str_drop(ptr %a476) + %t477 = load { ptr, i64, i64 }, ptr %a473 + store { ptr, i64, i64 } %t477, ptr %a479 + store { ptr, i64, i64 } { ptr @.str.3801, i64 2, i64 0 }, ptr %a480 + call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480) + store { ptr, i64, i64 } %t477, ptr %a481 + call void @finch_str_drop(ptr %a481) + %t482 = load { ptr, i64, i64 }, ptr %a478 + %t483 = getelementptr inbounds %S.gen.StructDef, ptr %a407, i32 0, i32 3 + %t484 = load i64, ptr %a444 + %t485 = load { ptr, i64, i64 }, ptr %t483 + %t486 = extractvalue { ptr, i64, i64 } %t485, 1 + %t487 = icmp uge i64 %t484, %t486 + br i1 %t487, label %range5923, label %inrange5924 +range5923: + call void @finch_panic_index(ptr @.str.3802, i64 3123, i64 %t484, i64 %t486) + unreachable +inrange5924: + %t488 = extractvalue { ptr, i64, i64 } %t485, 0 + %t489 = getelementptr inbounds i64, ptr %t488, i64 %t484 + %t490 = load i64, ptr %t489 + call void @finch_str_from_int(ptr %a491, i64 %t490) + %t492 = load { ptr, i64, i64 }, ptr %a491 + store { ptr, i64, i64 } %t482, ptr %a494 + store { ptr, i64, i64 } %t492, ptr %a495 + call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) + store { ptr, i64, i64 } %t482, ptr %a496 + call void @finch_str_drop(ptr %a496) + store { ptr, i64, i64 } %t492, ptr %a497 + call void @finch_str_drop(ptr %a497) + %t498 = load { ptr, i64, i64 }, ptr %a493 + %t499 = call { ptr, i64, i64 } @finch.gen.op(ptr %t457, { ptr, i64, i64 } %t498) + store { ptr, i64, i64 } %t498, ptr %a500 + call void @finch_str_drop(ptr %a500) + store { ptr, i64, i64 } %t499, ptr %a501 + %t502 = load ptr, ptr %a1 + %t503 = load i64, ptr %a410 + %t504 = load { ptr, i64, i64 }, ptr %a165 + %t505 = extractvalue { ptr, i64, i64 } %t504, 1 + %t506 = icmp uge i64 %t503, %t505 + br i1 %t506, label %range5925, label %inrange5926 +range5925: + call void @finch_panic_index(ptr @.str.3803, i64 3124, i64 %t503, i64 %t505) + unreachable +inrange5926: + %t507 = extractvalue { ptr, i64, i64 } %t504, 0 + %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 %t503 + %t509 = load %S.ast.Node, ptr %t508 + %t510 = load i64, ptr %a410 + %t511 = load { ptr, i64, i64 }, ptr %a165 + %t512 = extractvalue { ptr, i64, i64 } %t511, 1 + %t513 = icmp uge i64 %t510, %t512 + br i1 %t513, label %range5927, label %inrange5928 +range5927: + call void @finch_panic_index(ptr @.str.3804, i64 3124, i64 %t510, i64 %t512) + unreachable +inrange5928: + %t514 = extractvalue { ptr, i64, i64 } %t511, 0 + %t515 = getelementptr inbounds %S.ast.Node, ptr %t514, i64 %t510 + %t516 = getelementptr inbounds %S.ast.Node, ptr %t515, i32 0, i32 1 + %t517 = load { ptr, i64, i64 }, ptr %t516 + %t518 = load %S.ast.Type, ptr %a456 + %t519 = load ptr, ptr %a1 + %t520 = load { ptr, i64, i64 }, ptr %a501 + %t521 = load %S.ast.Type, ptr %a456 + %t522 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t519, { ptr, i64, i64 } %t520, %S.ast.Type %t521) + %t523 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t502, %S.ast.Node %t509, { ptr, i64, i64 } %t517, %S.ast.Type %t518, { ptr, i64, i64 } %t522, i1 true, i1 true) + store { ptr, i64, i64 } %t522, ptr %a524 + call void @finch_str_drop(ptr %a524) + store { ptr, i64, i64 } %t523, ptr %a525 + call void @finch_str_drop(ptr %a525) + call void @finch_str_drop(ptr %a501) + call void @finch.drop.S_ast_Type(ptr %a456) + br label %for.step5908 +for.step5908: + %t526 = load i64, ptr %a410 + %t527 = add i64 %t526, 1 + store i64 %t527, ptr %a410 + br label %for.cond5906 +for.end5909: + call void @finch.drop.S_gen_StructDef(ptr %a407) + br label %endif5901 +endif5901: + %t528 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 + %t529 = load { ptr, i64, i64 }, ptr %t528 + %t530 = extractvalue { ptr, i64, i64 } %t529, 1 + %t531 = icmp uge i64 1, %t530 + br i1 %t531, label %range5929, label %inrange5930 +range5929: + call void @finch_panic_index(ptr @.str.3805, i64 3127, i64 1, i64 %t530) + unreachable +inrange5930: + %t532 = extractvalue { ptr, i64, i64 } %t529, 0 + %t533 = getelementptr inbounds %S.ast.Node, ptr %t532, i64 1 + %t534 = load %S.ast.Node, ptr %t533 + store %S.ast.Node %t534, ptr %a535 + call void @finch.copy.S_ast_Node(ptr %a536, ptr %a535) + %t537 = load %S.ast.Node, ptr %a536 + store %S.ast.Node %t537, ptr %a538 + %t539 = load i1, ptr %a3 + br i1 %t539, label %then5931, label %else5932 +then5931: + %t540 = load ptr, ptr %a1 + %t541 = load %S.ast.Node, ptr %a538 + %t542 = call %S.gen.Val @finch.gen.expr(ptr %t540, %S.ast.Node %t541) + store %S.gen.Val %t542, ptr %a543 + %t544 = load i64, ptr %a140 + %t545 = icmp eq i64 %t544, 0 + br label %logic.from5934 +logic.from5934: + br i1 %t545, label %logic.end5936, label %logic.rhs5935 +logic.rhs5935: + %t546 = getelementptr inbounds %S.ast.Type, ptr %a133, i32 0, i32 0 + %t547 = load { ptr, i64, i64 }, ptr %t546 + store { ptr, i64, i64 } %t547, ptr %a548 + store { ptr, i64, i64 } { ptr @.str.3806, i64 4, i64 0 }, ptr %a549 + %t550 = call i32 @finch_str_eq(ptr %a548, ptr %a549) + %t551 = icmp ne i32 %t550, 0 + br label %logic.rend5937 +logic.rend5937: + br label %logic.end5936 +logic.end5936: + %t552 = phi i1 [ true, %logic.from5934 ], [ %t551, %logic.rend5937 ] + br i1 %t552, label %then5938, label %endif5940 +then5938: + %t553 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 + %t554 = getelementptr inbounds %S.ast.Type, ptr %t553, i32 0, i32 0 + %t555 = load { ptr, i64, i64 }, ptr %t554 + store { ptr, i64, i64 } %t555, ptr %a556 + store { ptr, i64, i64 } { ptr @.str.3807, i64 4, i64 0 }, ptr %a557 + %t558 = call i32 @finch_str_eq(ptr %a556, ptr %a557) + %t559 = icmp ne i32 %t558, 0 + br label %logic.from5941 +logic.from5941: + br i1 %t559, label %logic.end5943, label %logic.rhs5942 +logic.rhs5942: + %t560 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 + %t561 = getelementptr inbounds %S.ast.Type, ptr %t560, i32 0, i32 0 + %t562 = load { ptr, i64, i64 }, ptr %t561 + store { ptr, i64, i64 } %t562, ptr %a563 + store { ptr, i64, i64 } { ptr @.str.3808, i64 4, i64 0 }, ptr %a564 + %t565 = call i32 @finch_str_eq(ptr %a563, ptr %a564) + %t566 = icmp ne i32 %t565, 0 + br label %logic.rend5944 +logic.rend5944: + br label %logic.end5943 +logic.end5943: + %t567 = phi i1 [ true, %logic.from5941 ], [ %t566, %logic.rend5944 ] + br i1 %t567, label %then5945, label %endif5947 +then5945: + %t568 = load ptr, ptr %a1 + %t569 = load %S.ast.Node, ptr %a538 + call void @finch.gen.fail(ptr %t568, %S.ast.Node %t569, { ptr, i64, i64 } { ptr @.str.3809, i64 52, i64 0 }) + br label %endif5947 +endif5947: + %t570 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 + %t571 = load %S.ast.Type, ptr %t570 + store %S.ast.Type %t571, ptr %a572 + call void @finch.copy.S_ast_Type(ptr %a573, ptr %a572) + %t574 = load %S.ast.Type, ptr %a573 + %t575 = load %S.ast.Type, ptr %a133 + store %S.ast.Type %t574, ptr %a133 + store %S.ast.Type %t575, ptr %a576 + call void @finch.drop.S_ast_Type(ptr %a576) + br label %endif5940 +endif5940: + %t577 = load ptr, ptr %a1 + %t578 = load %S.gen.Val, ptr %a543 + %t579 = load %S.ast.Type, ptr %a133 + %t580 = load %S.ast.Node, ptr %a538 + %t581 = call %S.gen.Val @finch.gen.coerce(ptr %t577, %S.gen.Val %t578, %S.ast.Type %t579, %S.ast.Node %t580, { ptr, i64, i64 } { ptr @.str.3810, i64 57, i64 0 }) + %t582 = load %S.gen.Val, ptr %a543 + store %S.gen.Val %t581, ptr %a543 + store %S.gen.Val %t582, ptr %a583 + call void @finch.drop.S_gen_Val(ptr %a583) + %t584 = load ptr, ptr %a1 + %t585 = load %S.gen.Val, ptr %a543 + %t586 = call { ptr, i64, i64 } @finch.gen.own(ptr %t584, %S.gen.Val %t585) + store { ptr, i64, i64 } %t586, ptr %a587 + %t588 = load i1, ptr %a386 + br i1 %t588, label %then5948, label %endif5950 +then5948: + %t589 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t589) + br label %endif5950 +endif5950: + %t590 = load ptr, ptr %a1 + %t591 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t590, { ptr, i64, i64 } { ptr @.str.3811, i64 10, i64 0 }) + store { ptr, i64, i64 } %t591, ptr %a592 + %t593 = load ptr, ptr %a1 + %t594 = load { ptr, i64, i64 }, ptr %a592 + call void @finch.gen.br(ptr %t593, { ptr, i64, i64 } %t594) + %t595 = load ptr, ptr %a1 + %t596 = load { ptr, i64, i64 }, ptr %a592 + call void @finch.gen.label(ptr %t595, { ptr, i64, i64 } %t596) + %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %a130, i32 0, i32 1 + %t598 = load { ptr, i64, i64 }, ptr %a587 + store { ptr, i64, i64 } %t598, ptr %a599 + call void @finch_str_copy(ptr %a600, ptr %a599) + %t601 = load { ptr, i64, i64 }, ptr %a600 + %t602 = load i64, ptr %t597 + %t603 = add i64 %t602, 1 + call void @finch_arr_reserve(ptr %a130, i64 %t603, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t604 = load ptr, ptr %a130 + %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i64 %t602 + store { ptr, i64, i64 } %t601, ptr %t605 + store i64 %t603, ptr %t597 + %t606 = getelementptr inbounds { ptr, i64, i64 }, ptr %a131, i32 0, i32 1 + %t607 = load { ptr, i64, i64 }, ptr %a592 + store { ptr, i64, i64 } %t607, ptr %a608 + call void @finch_str_copy(ptr %a609, ptr %a608) + %t610 = load { ptr, i64, i64 }, ptr %a609 + %t611 = load i64, ptr %t606 + %t612 = add i64 %t611, 1 + call void @finch_arr_reserve(ptr %a131, i64 %t612, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t613 = load ptr, ptr %a131 + %t614 = getelementptr inbounds { ptr, i64, i64 }, ptr %t613, i64 %t611 + store { ptr, i64, i64 } %t610, ptr %t614 + store i64 %t612, ptr %t606 + %t615 = load ptr, ptr %a1 + %t616 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.br(ptr %t615, { ptr, i64, i64 } %t616) + store i1 true, ptr %a128 + call void @finch_str_drop(ptr %a592) + call void @finch_str_drop(ptr %a587) + call void @finch.drop.S_gen_Val(ptr %a543) + br label %endif5933 +else5932: + %t617 = getelementptr inbounds %S.ast.Node, ptr %a538, i32 0, i32 0 + %t618 = load { ptr, i64, i64 }, ptr %t617 + store { ptr, i64, i64 } %t618, ptr %a619 + store { ptr, i64, i64 } { ptr @.str.3812, i64 5, i64 0 }, ptr %a620 + %t621 = call i32 @finch_str_eq(ptr %a619, ptr %a620) + %t622 = icmp ne i32 %t621, 0 + br i1 %t622, label %then5951, label %else5952 +then5951: + %t623 = load ptr, ptr %a1 + %t624 = load %S.ast.Node, ptr %a538 + call void @finch.gen.block(ptr %t623, %S.ast.Node %t624, i1 true) + br label %endif5953 +else5952: + %t625 = load ptr, ptr %a1 + %t626 = load %S.ast.Node, ptr %a538 + call void @finch.gen.stmt(ptr %t625, %S.ast.Node %t626) + br label %endif5953 +endif5953: + %t627 = load ptr, ptr %a1 + %t628 = icmp eq ptr %t627, null + br i1 %t628, label %panic5954, label %ok5955 +panic5954: + call void @finch_panic(ptr @.str.3813, i64 3154, ptr @.str.3814) + unreachable +ok5955: + %t629 = getelementptr inbounds %S.gen.Gen, ptr %t627, i32 0, i32 9 + %t630 = load i1, ptr %t629 + %t631 = xor i1 %t630, true + br i1 %t631, label %then5956, label %endif5958 +then5956: + store i1 true, ptr %a128 + br label %endif5958 +endif5958: + %t632 = load i1, ptr %a386 + br i1 %t632, label %then5959, label %endif5961 +then5959: + %t633 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t633) + br label %endif5961 +endif5961: + %t634 = load ptr, ptr %a1 + %t635 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.br(ptr %t634, { ptr, i64, i64 } %t635) + br label %endif5933 +endif5933: + %t636 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 + %t637 = load i1, ptr %t636 + %t638 = xor i1 %t637, true + br i1 %t638, label %then5962, label %endif5964 +then5962: + %t639 = load ptr, ptr %a1 + %t640 = load { ptr, i64, i64 }, ptr %a164 + call void @finch.gen.label(ptr %t639, { ptr, i64, i64 } %t640) + br label %endif5964 +endif5964: + call void @finch.drop.S_ast_Node(ptr %a538) + call void @finch.drop.arr_S_ast_Node(ptr %a165) + call void @finch_str_drop(ptr %a164) + call void @finch_str_drop(ptr %a161) + call void @finch.drop.S_ast_Node(ptr %a155) + br label %for.step5839 +for.step5839: + %t641 = load i64, ptr %a140 + %t642 = add i64 %t641, 1 + store i64 %t642, ptr %a140 + br label %for.cond5837 +for.end5840: + %t643 = load i1, ptr %a127 + %t644 = xor i1 %t643, true + br i1 %t644, label %then5965, label %endif5967 +then5965: + %t645 = load i64, ptr %a49 + %t646 = icmp sge i64 %t645, 0 + br i1 %t646, label %then5968, label %else5969 +then5968: + store { ptr, i64, i64 } zeroinitializer, ptr %a647 + %t648 = load ptr, ptr %a1 + %t649 = icmp eq ptr %t648, null + br i1 %t649, label %panic5971, label %ok5972 +panic5971: + call void @finch_panic(ptr @.str.3815, i64 3169, ptr @.str.3816) + unreachable +ok5972: + %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 22 + %t651 = load i64, ptr %a49 + %t652 = load { ptr, i64, i64 }, ptr %t650 + %t653 = extractvalue { ptr, i64, i64 } %t652, 1 + %t654 = icmp uge i64 %t651, %t653 + br i1 %t654, label %range5973, label %inrange5974 +range5973: + call void @finch_panic_index(ptr @.str.3817, i64 3169, i64 %t651, i64 %t653) + unreachable +inrange5974: + %t655 = extractvalue { ptr, i64, i64 } %t652, 0 + %t656 = getelementptr inbounds %S.gen.SumDef, ptr %t655, i64 %t651 + %t657 = getelementptr inbounds %S.gen.SumDef, ptr %t656, i32 0, i32 2 + %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i32 0, i32 1 + %t659 = load i64, ptr %t658 + store i64 0, ptr %a660 + br label %for.cond5975 +for.cond5975: + %t661 = load i64, ptr %a660 + %t662 = icmp slt i64 %t661, %t659 + br i1 %t662, label %for.body5976, label %for.end5978 +for.body5976: + %t663 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t664 = load i64, ptr %a660 + call void @finch_str_from_int(ptr %a665, i64 %t664) + %t666 = load { ptr, i64, i64 }, ptr %a665 + store i64 -1, ptr %a667 + %t668 = load i64, ptr %t663 + %t669 = load ptr, ptr %a129 + store i64 0, ptr %a670 + br label %find.cond5979 +find.cond5979: + %t671 = load i64, ptr %a670 + %t672 = icmp slt i64 %t671, %t668 + br i1 %t672, label %find.body5980, label %find.end5983 +find.body5980: + %t673 = getelementptr inbounds { ptr, i64, i64 }, ptr %t669, i64 %t671 + %t674 = load { ptr, i64, i64 }, ptr %t673 + store { ptr, i64, i64 } %t674, ptr %a675 + store { ptr, i64, i64 } %t666, ptr %a676 + %t677 = call i32 @finch_str_eq(ptr %a675, ptr %a676) + %t678 = icmp ne i32 %t677, 0 + br i1 %t678, label %find.hit5981, label %find.next5982 +find.hit5981: + store i64 %t671, ptr %a667 + br label %find.end5983 +find.next5982: + %t679 = add i64 %t671, 1 + store i64 %t679, ptr %a670 + br label %find.cond5979 +find.end5983: + store { ptr, i64, i64 } %t666, ptr %a680 + call void @finch_str_drop(ptr %a680) + %t681 = load i64, ptr %a667 + %t682 = icmp sge i64 %t681, 0 + %t683 = xor i1 %t682, true + br i1 %t683, label %then5984, label %endif5986 +then5984: + %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 + %t685 = load ptr, ptr %a1 + %t686 = icmp eq ptr %t685, null + br i1 %t686, label %panic5987, label %ok5988 +panic5987: + call void @finch_panic(ptr @.str.3818, i64 3171, ptr @.str.3819) + unreachable +ok5988: + %t687 = getelementptr inbounds %S.gen.Gen, ptr %t685, i32 0, i32 22 + %t688 = load i64, ptr %a49 + %t689 = load { ptr, i64, i64 }, ptr %t687 + %t690 = extractvalue { ptr, i64, i64 } %t689, 1 + %t691 = icmp uge i64 %t688, %t690 + br i1 %t691, label %range5989, label %inrange5990 +range5989: + call void @finch_panic_index(ptr @.str.3820, i64 3171, i64 %t688, i64 %t690) + unreachable +inrange5990: + %t692 = extractvalue { ptr, i64, i64 } %t689, 0 + %t693 = getelementptr inbounds %S.gen.SumDef, ptr %t692, i64 %t688 + %t694 = getelementptr inbounds %S.gen.SumDef, ptr %t693, i32 0, i32 2 + %t695 = load i64, ptr %a660 + %t696 = load { ptr, i64, i64 }, ptr %t694 + %t697 = extractvalue { ptr, i64, i64 } %t696, 1 + %t698 = icmp uge i64 %t695, %t697 + br i1 %t698, label %range5991, label %inrange5992 +range5991: + call void @finch_panic_index(ptr @.str.3821, i64 3171, i64 %t695, i64 %t697) + unreachable +inrange5992: + %t699 = extractvalue { ptr, i64, i64 } %t696, 0 + %t700 = getelementptr inbounds { ptr, i64, i64 }, ptr %t699, i64 %t695 + %t701 = load { ptr, i64, i64 }, ptr %t700 + store { ptr, i64, i64 } %t701, ptr %a702 + call void @finch_str_copy(ptr %a703, ptr %a702) + %t704 = load { ptr, i64, i64 }, ptr %a703 + %t705 = load i64, ptr %t684 + %t706 = add i64 %t705, 1 + call void @finch_arr_reserve(ptr %a647, i64 %t706, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t707 = load ptr, ptr %a647 + %t708 = getelementptr inbounds { ptr, i64, i64 }, ptr %t707, i64 %t705 + store { ptr, i64, i64 } %t704, ptr %t708 + store i64 %t706, ptr %t684 + br label %endif5986 +endif5986: + br label %for.step5977 +for.step5977: + %t709 = load i64, ptr %a660 + %t710 = add i64 %t709, 1 + store i64 %t710, ptr %a660 + br label %for.cond5975 +for.end5978: + %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 + %t712 = load i64, ptr %t711 + %t713 = icmp sgt i64 %t712, 0 + br i1 %t713, label %then5993, label %endif5995 +then5993: + %t714 = load ptr, ptr %a1 + %t715 = load %S.ast.Node, ptr %a2 + %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3823, i64 2, i64 0 }, ptr %a717 + call void @finch_str_join(ptr %a718, ptr %a647, ptr %a717) + %t719 = load { ptr, i64, i64 }, ptr %a718 + store { ptr, i64, i64 } { ptr @.str.3822, i64 26, i64 0 }, ptr %a721 + store { ptr, i64, i64 } %t719, ptr %a722 + call void @finch_str_concat(ptr %a720, ptr %a721, ptr %a722) + store { ptr, i64, i64 } %t719, ptr %a723 + call void @finch_str_drop(ptr %a723) + %t724 = load { ptr, i64, i64 }, ptr %a720 + store { ptr, i64, i64 } %t724, ptr %a726 + store { ptr, i64, i64 } { ptr @.str.3824, i64 29, i64 0 }, ptr %a727 + call void @finch_str_concat(ptr %a725, ptr %a726, ptr %a727) + store { ptr, i64, i64 } %t724, ptr %a728 + call void @finch_str_drop(ptr %a728) + %t729 = load { ptr, i64, i64 }, ptr %a725 + call void @finch.gen.fail(ptr %t714, %S.ast.Node %t715, { ptr, i64, i64 } %t729) + store { ptr, i64, i64 } %t729, ptr %a730 + call void @finch_str_drop(ptr %a730) + br label %endif5995 +endif5995: + call void @finch.drop.arr_str(ptr %a647) + br label %endif5970 +else5969: + %t731 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t732 = load { ptr, i64, i64 }, ptr %t731 + store { ptr, i64, i64 } %t732, ptr %a733 + store { ptr, i64, i64 } { ptr @.str.3825, i64 4, i64 0 }, ptr %a734 + %t735 = call i32 @finch_str_eq(ptr %a733, ptr %a734) + %t736 = icmp ne i32 %t735, 0 + br i1 %t736, label %then5996, label %else5997 +then5996: + %t737 = load ptr, ptr %a1 + %t738 = icmp eq ptr %t737, null + br i1 %t738, label %panic5999, label %ok6000 +panic5999: + call void @finch_panic(ptr @.str.3826, i64 3178, ptr @.str.3827) + unreachable +ok6000: + %t739 = getelementptr inbounds %S.gen.Gen, ptr %t737, i32 0, i32 21 + %t740 = load ptr, ptr %a1 + %t741 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t742 = load { ptr, i64, i64 }, ptr %t741 + %t743 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t744 = load { ptr, i64, i64 }, ptr %t743 + %t745 = call i64 @finch.gen.findEnum(ptr %t740, { ptr, i64, i64 } %t742, { ptr, i64, i64 } %t744) + %t746 = load { ptr, i64, i64 }, ptr %t739 + %t747 = extractvalue { ptr, i64, i64 } %t746, 1 + %t748 = icmp uge i64 %t745, %t747 + br i1 %t748, label %range6001, label %inrange6002 +range6001: + call void @finch_panic_index(ptr @.str.3828, i64 3178, i64 %t745, i64 %t747) + unreachable +inrange6002: + %t749 = extractvalue { ptr, i64, i64 } %t746, 0 + %t750 = getelementptr inbounds %S.gen.EnumDef, ptr %t749, i64 %t745 + %t751 = load %S.gen.EnumDef, ptr %t750 + store %S.gen.EnumDef %t751, ptr %a752 + call void @finch.copy.S_gen_EnumDef(ptr %a753, ptr %a752) + %t754 = load %S.gen.EnumDef, ptr %a753 + store %S.gen.EnumDef %t754, ptr %a755 + store { ptr, i64, i64 } zeroinitializer, ptr %a756 + %t757 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 + %t758 = getelementptr inbounds { ptr, i64, i64 }, ptr %t757, i32 0, i32 1 + %t759 = load i64, ptr %t758 + store i64 0, ptr %a760 + br label %for.cond6003 +for.cond6003: + %t761 = load i64, ptr %a760 + %t762 = icmp slt i64 %t761, %t759 + br i1 %t762, label %for.body6004, label %for.end6006 +for.body6004: + %t763 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t764 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 3 + %t765 = load i64, ptr %a760 + %t766 = load { ptr, i64, i64 }, ptr %t764 + %t767 = extractvalue { ptr, i64, i64 } %t766, 1 + %t768 = icmp uge i64 %t765, %t767 + br i1 %t768, label %range6007, label %inrange6008 +range6007: + call void @finch_panic_index(ptr @.str.3829, i64 3181, i64 %t765, i64 %t767) + unreachable +inrange6008: + %t769 = extractvalue { ptr, i64, i64 } %t766, 0 + %t770 = getelementptr inbounds i64, ptr %t769, i64 %t765 + %t771 = load i64, ptr %t770 + call void @finch_str_from_int(ptr %a772, i64 %t771) + %t773 = load { ptr, i64, i64 }, ptr %a772 + store i64 -1, ptr %a774 + %t775 = load i64, ptr %t763 + %t776 = load ptr, ptr %a129 + store i64 0, ptr %a777 + br label %find.cond6009 +find.cond6009: + %t778 = load i64, ptr %a777 + %t779 = icmp slt i64 %t778, %t775 + br i1 %t779, label %find.body6010, label %find.end6013 +find.body6010: + %t780 = getelementptr inbounds { ptr, i64, i64 }, ptr %t776, i64 %t778 + %t781 = load { ptr, i64, i64 }, ptr %t780 + store { ptr, i64, i64 } %t781, ptr %a782 + store { ptr, i64, i64 } %t773, ptr %a783 + %t784 = call i32 @finch_str_eq(ptr %a782, ptr %a783) + %t785 = icmp ne i32 %t784, 0 + br i1 %t785, label %find.hit6011, label %find.next6012 +find.hit6011: + store i64 %t778, ptr %a774 + br label %find.end6013 +find.next6012: + %t786 = add i64 %t778, 1 + store i64 %t786, ptr %a777 + br label %find.cond6009 +find.end6013: + store { ptr, i64, i64 } %t773, ptr %a787 + call void @finch_str_drop(ptr %a787) + %t788 = load i64, ptr %a774 + %t789 = icmp sge i64 %t788, 0 + %t790 = xor i1 %t789, true + br i1 %t790, label %then6014, label %endif6016 +then6014: + %t791 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 + %t792 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 + %t793 = load i64, ptr %a760 + %t794 = load { ptr, i64, i64 }, ptr %t792 + %t795 = extractvalue { ptr, i64, i64 } %t794, 1 + %t796 = icmp uge i64 %t793, %t795 + br i1 %t796, label %range6017, label %inrange6018 +range6017: + call void @finch_panic_index(ptr @.str.3830, i64 3182, i64 %t793, i64 %t795) + unreachable +inrange6018: + %t797 = extractvalue { ptr, i64, i64 } %t794, 0 + %t798 = getelementptr inbounds { ptr, i64, i64 }, ptr %t797, i64 %t793 + %t799 = load { ptr, i64, i64 }, ptr %t798 + store { ptr, i64, i64 } %t799, ptr %a800 + call void @finch_str_copy(ptr %a801, ptr %a800) + %t802 = load { ptr, i64, i64 }, ptr %a801 + %t803 = load i64, ptr %t791 + %t804 = add i64 %t803, 1 + call void @finch_arr_reserve(ptr %a756, i64 %t804, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t805 = load ptr, ptr %a756 + %t806 = getelementptr inbounds { ptr, i64, i64 }, ptr %t805, i64 %t803 + store { ptr, i64, i64 } %t802, ptr %t806 + store i64 %t804, ptr %t791 + br label %endif6016 +endif6016: + br label %for.step6005 +for.step6005: + %t807 = load i64, ptr %a760 + %t808 = add i64 %t807, 1 + store i64 %t808, ptr %a760 + br label %for.cond6003 +for.end6006: + %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 + %t810 = load i64, ptr %t809 + %t811 = icmp sgt i64 %t810, 0 + br i1 %t811, label %then6019, label %endif6021 +then6019: + %t812 = load ptr, ptr %a1 + %t813 = load %S.ast.Node, ptr %a2 + %t814 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3832, i64 2, i64 0 }, ptr %a815 + call void @finch_str_join(ptr %a816, ptr %a756, ptr %a815) + %t817 = load { ptr, i64, i64 }, ptr %a816 + store { ptr, i64, i64 } { ptr @.str.3831, i64 26, i64 0 }, ptr %a819 + store { ptr, i64, i64 } %t817, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t817, ptr %a821 + call void @finch_str_drop(ptr %a821) + %t822 = load { ptr, i64, i64 }, ptr %a818 + store { ptr, i64, i64 } %t822, ptr %a824 + store { ptr, i64, i64 } { ptr @.str.3833, i64 29, i64 0 }, ptr %a825 + call void @finch_str_concat(ptr %a823, ptr %a824, ptr %a825) + store { ptr, i64, i64 } %t822, ptr %a826 + call void @finch_str_drop(ptr %a826) + %t827 = load { ptr, i64, i64 }, ptr %a823 + call void @finch.gen.fail(ptr %t812, %S.ast.Node %t813, { ptr, i64, i64 } %t827) + store { ptr, i64, i64 } %t827, ptr %a828 + call void @finch_str_drop(ptr %a828) + br label %endif6021 +endif6021: + call void @finch.drop.arr_str(ptr %a756) + call void @finch.drop.S_gen_EnumDef(ptr %a755) + br label %endif5998 +else5997: + %t829 = load ptr, ptr %a1 + %t830 = load %S.ast.Node, ptr %a2 + %t831 = load %S.ast.Type, ptr %a19 + %t832 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t831) + store { ptr, i64, i64 } { ptr @.str.3834, i64 11, i64 0 }, ptr %a834 + store { ptr, i64, i64 } %t832, ptr %a835 + call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) + store { ptr, i64, i64 } %t832, ptr %a836 + call void @finch_str_drop(ptr %a836) + %t837 = load { ptr, i64, i64 }, ptr %a833 + store { ptr, i64, i64 } %t837, ptr %a839 + store { ptr, i64, i64 } { ptr @.str.3835, i64 54, i64 0 }, ptr %a840 + call void @finch_str_concat(ptr %a838, ptr %a839, ptr %a840) + store { ptr, i64, i64 } %t837, ptr %a841 + call void @finch_str_drop(ptr %a841) + %t842 = load { ptr, i64, i64 }, ptr %a838 + call void @finch.gen.fail(ptr %t829, %S.ast.Node %t830, { ptr, i64, i64 } %t842) + store { ptr, i64, i64 } %t842, ptr %a843 + call void @finch_str_drop(ptr %a843) + br label %endif5998 +endif5998: + br label %endif5970 +endif5970: + %t844 = load ptr, ptr %a1 + %t845 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t844, { ptr, i64, i64 } { ptr @.str.3836, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.3837, i64 35, i64 0 }, %S.ast.Node %t845) + %t846 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t846, { ptr, i64, i64 } { ptr @.str.3838, i64 11, i64 0 }) + %t847 = load ptr, ptr %a1 + %t848 = icmp eq ptr %t847, null + br i1 %t848, label %panic6022, label %ok6023 +panic6022: + call void @finch_panic(ptr @.str.3839, i64 3194, ptr @.str.3840) + unreachable +ok6023: + %t849 = getelementptr inbounds %S.gen.Gen, ptr %t847, i32 0, i32 9 + store i1 true, ptr %t849 + br label %endif5967 +endif5967: + %t850 = load ptr, ptr %a1 + %t851 = load i64, ptr %a46 + call void @finch.gen.heldEnd(ptr %t850, i64 %t851) + %t852 = load ptr, ptr %a1 + %t853 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.label(ptr %t852, { ptr, i64, i64 } %t853) + %t854 = load i1, ptr %a128 + %t855 = xor i1 %t854, true + br i1 %t855, label %then6024, label %endif6026 +then6024: + %t856 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t856, { ptr, i64, i64 } { ptr @.str.3841, i64 11, i64 0 }) + %t857 = load ptr, ptr %a1 + %t858 = icmp eq ptr %t857, null + br i1 %t858, label %panic6027, label %ok6028 +panic6027: + call void @finch_panic(ptr @.str.3842, i64 3200, ptr @.str.3843) + unreachable +ok6028: + %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 9 + store i1 true, ptr %t859 + %t860 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3844, i64 4, i64 0 }) + %t861 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t860, 1 + call void @finch.drop.S_ast_Type(ptr %a133) + call void @finch.drop.arr_str(ptr %a131) + call void @finch.drop.arr_str(ptr %a130) + call void @finch.drop.arr_str(ptr %a129) + call void @finch_str_drop(ptr %a126) + call void @finch_str_drop(ptr %a50) + call void @finch.drop.S_ast_Type(ptr %a19) + call void @finch.drop.S_gen_Val(ptr %a13) + ret %S.gen.Val %t861 +endif6026: + %t862 = load i1, ptr %a3 + br i1 %t862, label %then6029, label %endif6031 +then6029: + %t863 = load ptr, ptr %a1 + %t864 = load ptr, ptr %a1 + %t865 = load %S.ast.Type, ptr %a133 + %t866 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t864, %S.ast.Type %t865) + store { ptr, i64, i64 } { ptr @.str.3845, i64 4, i64 0 }, ptr %a868 + store { ptr, i64, i64 } %t866, ptr %a869 + call void @finch_str_concat(ptr %a867, ptr %a868, ptr %a869) + store { ptr, i64, i64 } %t866, ptr %a870 + call void @finch_str_drop(ptr %a870) + %t871 = load { ptr, i64, i64 }, ptr %a867 + store { ptr, i64, i64 } %t871, ptr %a873 + store { ptr, i64, i64 } { ptr @.str.3846, i64 1, i64 0 }, ptr %a874 + call void @finch_str_concat(ptr %a872, ptr %a873, ptr %a874) + store { ptr, i64, i64 } %t871, ptr %a875 + call void @finch_str_drop(ptr %a875) + %t876 = load { ptr, i64, i64 }, ptr %a872 + %t877 = load { ptr, i64, i64 }, ptr %a130 + %t878 = load { ptr, i64, i64 }, ptr %a131 + %t879 = call { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %t877, { ptr, i64, i64 } %t878) + store { ptr, i64, i64 } %t876, ptr %a881 + store { ptr, i64, i64 } %t879, ptr %a882 + call void @finch_str_concat(ptr %a880, ptr %a881, ptr %a882) + store { ptr, i64, i64 } %t876, ptr %a883 + call void @finch_str_drop(ptr %a883) + store { ptr, i64, i64 } %t879, ptr %a884 + call void @finch_str_drop(ptr %a884) + %t885 = load { ptr, i64, i64 }, ptr %a880 + %t886 = call { ptr, i64, i64 } @finch.gen.op(ptr %t863, { ptr, i64, i64 } %t885) + store { ptr, i64, i64 } %t885, ptr %a887 + call void @finch_str_drop(ptr %a887) + %t888 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t886, 0 + %t889 = load %S.ast.Type, ptr %a133 + store %S.ast.Type %t889, ptr %a890 + call void @finch.copy.S_ast_Type(ptr %a891, ptr %a890) + %t892 = load %S.ast.Type, ptr %a891 + %t893 = insertvalue %S.gen.Val %t888, %S.ast.Type %t892, 1 + %t894 = load ptr, ptr %a1 + %t895 = load %S.ast.Type, ptr %a133 + %t896 = call i1 @finch.gen.owning(ptr %t894, %S.ast.Type %t895) + %t897 = insertvalue %S.gen.Val %t893, i1 %t896, 2 + store %S.gen.Val %t897, ptr %a898 + %t899 = load ptr, ptr %a1 + %t900 = load %S.gen.Val, ptr %a13 + call void @finch.gen.release(ptr %t899, %S.gen.Val %t900) + %t901 = load %S.gen.Val, ptr %a898 + call void @finch.drop.S_ast_Type(ptr %a133) + call void @finch.drop.arr_str(ptr %a131) + call void @finch.drop.arr_str(ptr %a130) + call void @finch.drop.arr_str(ptr %a129) + call void @finch_str_drop(ptr %a126) + call void @finch_str_drop(ptr %a50) + call void @finch.drop.S_ast_Type(ptr %a19) + call void @finch.drop.S_gen_Val(ptr %a13) + ret %S.gen.Val %t901 +endif6031: + %t902 = load ptr, ptr %a1 + %t903 = load %S.gen.Val, ptr %a13 + call void @finch.gen.release(ptr %t902, %S.gen.Val %t903) + %t904 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3847, i64 4, i64 0 }) + %t905 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t904, 1 + call void @finch.drop.S_ast_Type(ptr %a133) + call void @finch.drop.arr_str(ptr %a131) + call void @finch.drop.arr_str(ptr %a130) + call void @finch.drop.arr_str(ptr %a129) + call void @finch_str_drop(ptr %a126) + call void @finch_str_drop(ptr %a50) + call void @finch.drop.S_ast_Type(ptr %a19) + call void @finch.drop.S_gen_Val(ptr %a13) + ret %S.gen.Val %t905 +} + +define internal { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca i64, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } zeroinitializer, ptr %a3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + store i64 0, ptr %a6 + br label %for.cond6032 +for.cond6032: + %t7 = load i64, ptr %a6 + %t8 = icmp slt i64 %t7, %t5 + br i1 %t8, label %for.body6033, label %for.end6035 +for.body6033: + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t10 = load i64, ptr %a6 + %t11 = load { ptr, i64, i64 }, ptr %a1 + %t12 = extractvalue { ptr, i64, i64 } %t11, 1 + %t13 = icmp uge i64 %t10, %t12 + br i1 %t13, label %range6036, label %inrange6037 +range6036: + call void @finch_panic_index(ptr @.str.3849, i64 3215, i64 %t10, i64 %t12) + unreachable +inrange6037: + %t14 = extractvalue { ptr, i64, i64 } %t11, 0 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t10 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } { ptr @.str.3848, i64 2, i64 0 }, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t20, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.3850, i64 3, i64 0 }, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t20, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + %t26 = load i64, ptr %a6 + %t27 = load { ptr, i64, i64 }, ptr %a2 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 %t26, %t28 + br i1 %t29, label %range6038, label %inrange6039 +range6038: + call void @finch_panic_index(ptr @.str.3851, i64 3215, i64 %t26, i64 %t28) + unreachable +inrange6039: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t26 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t25, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t25, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.3852, i64 2, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + %t43 = load i64, ptr %t9 + %t44 = add i64 %t43, 1 + call void @finch_arr_reserve(ptr %a3, i64 %t44, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t45 = load ptr, ptr %a3 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43 + store { ptr, i64, i64 } %t42, ptr %t46 + store i64 %t44, ptr %t9 + br label %for.step6034 +for.step6034: + %t47 = load i64, ptr %a6 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a6 + br label %for.cond6032 +for.end6035: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3853, i64 2, i64 0 }, ptr %a50 + call void @finch_str_join(ptr %a51, ptr %a3, ptr %a50) + %t52 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.drop.arr_str(ptr %a3) + ret { ptr, i64, i64 } %t52 +} + +define internal %S.gen.Fallible @finch.gen.fallibleCall(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca %S.gen.Val, align 16 + %a64 = alloca %S.gen.Val, align 16 + %a65 = alloca %S.gen.Val, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca %S.gen.Fallible, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.3854, i64 4, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp eq i32 %t7, 0 + br label %logic.from6040 +logic.from6040: + br i1 %t8, label %logic.rhs6041, label %logic.end6042 +logic.rhs6041: + %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.3855, i64 6, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp eq i32 %t13, 0 + br label %logic.rend6043 +logic.rend6043: + br label %logic.end6042 +logic.end6042: + %t15 = phi i1 [ false, %logic.from6040 ], [ %t14, %logic.rend6043 ] + br i1 %t15, label %then6044, label %endif6046 +then6044: + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } { ptr @.str.3856, i64 80, i64 0 }) + br label %endif6046 +endif6046: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic6047, label %ok6048 +panic6047: + call void @finch_panic(ptr @.str.3857, i64 3233, ptr @.str.3858) + unreachable +ok6048: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 41 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + call void @finch_str_copy(ptr %a23, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic6049, label %ok6050 +panic6049: + call void @finch_panic(ptr @.str.3859, i64 3234, ptr @.str.3860) + unreachable +ok6050: + %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 42 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_copy(ptr %a31, ptr %a30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t32, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic6051, label %ok6052 +panic6051: + call void @finch_panic(ptr @.str.3861, i64 3235, ptr @.str.3862) + unreachable +ok6052: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 43 + %t37 = load { ptr, i64, i64 }, ptr %t36 + store { ptr, i64, i64 } %t37, ptr %a38 + call void @finch_str_copy(ptr %a39, ptr %a38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t40, ptr %a41 + %t42 = load %S.ast.Node, ptr %a2 + %t43 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t42) + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic6053, label %ok6054 +panic6053: + call void @finch_panic(ptr @.str.3863, i64 3236, ptr @.str.3864) + unreachable +ok6054: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 41 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store { ptr, i64, i64 } %t43, ptr %t46 + store { ptr, i64, i64 } %t47, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load ptr, ptr %a1 + %t50 = icmp eq ptr %t49, null + br i1 %t50, label %panic6055, label %ok6056 +panic6055: + call void @finch_panic(ptr @.str.3866, i64 3237, ptr @.str.3867) + unreachable +ok6056: + %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 42 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } { ptr @.str.3865, i64 0, i64 0 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load ptr, ptr %a1 + %t55 = icmp eq ptr %t54, null + br i1 %t55, label %panic6057, label %ok6058 +panic6057: + call void @finch_panic(ptr @.str.3869, i64 3238, ptr @.str.3870) + unreachable +ok6058: + %t56 = getelementptr inbounds %S.gen.Gen, ptr %t54, i32 0, i32 43 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } { ptr @.str.3868, i64 0, i64 0 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Node, ptr %a2 + %t61 = call %S.gen.Val @finch.gen.expr(ptr %t59, %S.ast.Node %t60) + store %S.gen.Val %t61, ptr %a62 + %t63 = load %S.gen.Val, ptr %a62 + store %S.gen.Val %t63, ptr %a64 + call void @finch.copy.S_gen_Val(ptr %a65, ptr %a64) + %t66 = load %S.gen.Val, ptr %a65 + %t67 = insertvalue %S.gen.Fallible zeroinitializer, %S.gen.Val %t66, 0 + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic6059, label %ok6060 +panic6059: + call void @finch_panic(ptr @.str.3871, i64 3240, ptr @.str.3872) + unreachable +ok6060: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 42 + %t71 = load { ptr, i64, i64 }, ptr %t70 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_copy(ptr %a73, ptr %a72) + %t74 = load { ptr, i64, i64 }, ptr %a73 + %t75 = insertvalue %S.gen.Fallible %t67, { ptr, i64, i64 } %t74, 1 + %t76 = load ptr, ptr %a1 + %t77 = icmp eq ptr %t76, null + br i1 %t77, label %panic6061, label %ok6062 +panic6061: + call void @finch_panic(ptr @.str.3873, i64 3240, ptr @.str.3874) + unreachable +ok6062: + %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 43 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_copy(ptr %a81, ptr %a80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + %t83 = insertvalue %S.gen.Fallible %t75, { ptr, i64, i64 } %t82, 2 + store %S.gen.Fallible %t83, ptr %a84 + %t85 = load { ptr, i64, i64 }, ptr %a25 + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic6063, label %ok6064 +panic6063: + call void @finch_panic(ptr @.str.3875, i64 3241, ptr @.str.3876) + unreachable +ok6064: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 41 + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_copy(ptr %a90, ptr %a89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t91, ptr %t88 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a33 + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic6065, label %ok6066 +panic6065: + call void @finch_panic(ptr @.str.3877, i64 3242, ptr @.str.3878) + unreachable +ok6066: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 42 + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_copy(ptr %a99, ptr %a98) + %t100 = load { ptr, i64, i64 }, ptr %a99 + %t101 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t100, ptr %t97 + store { ptr, i64, i64 } %t101, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a41 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic6067, label %ok6068 +panic6067: + call void @finch_panic(ptr @.str.3879, i64 3243, ptr @.str.3880) + unreachable +ok6068: + %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 43 + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_copy(ptr %a108, ptr %a107) + %t109 = load { ptr, i64, i64 }, ptr %a108 + %t110 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t109, ptr %t106 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = getelementptr inbounds %S.gen.Fallible, ptr %a84, i32 0, i32 1 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = icmp eq i64 %t114, 0 + br i1 %t115, label %then6069, label %endif6071 +then6069: + %t116 = load ptr, ptr %a1 + %t117 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } { ptr @.str.3881, i64 50, i64 0 }) + br label %endif6071 +endif6071: + %t118 = load %S.gen.Fallible, ptr %a84 + call void @finch.drop.S_gen_Val(ptr %a62) + call void @finch_str_drop(ptr %a41) + call void @finch_str_drop(ptr %a33) + call void @finch_str_drop(ptr %a25) + ret %S.gen.Fallible %t118 +} + +define internal void @finch.drop.S_gen_Fallible(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 0 + call void @finch.drop.S_gen_Val(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal %S.gen.Val @finch.gen.tryExpr(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca %S.gen.Fallible, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca %S.gen.Val, align 16 + %a156 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic6072, label %ok6073 +panic6072: + call void @finch_panic(ptr @.str.3882, i64 3252, ptr @.str.3883) + unreachable +ok6073: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 + %t6 = load i64, ptr %t5 + %t7 = icmp sgt i64 %t6, 0 + br i1 %t7, label %then6074, label %endif6076 +then6074: + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3884, i64 30, i64 0 }) + br label %endif6076 +endif6076: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic6077, label %ok6078 +panic6077: + call void @finch_panic(ptr @.str.3885, i64 3255, ptr @.str.3886) + unreachable +ok6078: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 + %t13 = getelementptr inbounds %S.gen.FnSig, ptr %t12, i32 0, i32 9 + %t14 = load i1, ptr %t13 + %t15 = xor i1 %t14, true + br i1 %t15, label %then6079, label %endif6081 +then6079: + store { ptr, i64, i64 } { ptr @.str.3887, i64 1, i64 0 }, ptr %a16 + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic6082, label %ok6083 +panic6082: + call void @finch_panic(ptr @.str.3888, i64 3257, ptr @.str.3889) + unreachable +ok6083: + %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 13 + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i32 0, i32 12 + %t21 = getelementptr inbounds %S.ast.Type, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.3890, i64 4, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp eq i32 %t25, 0 + br i1 %t26, label %then6084, label %endif6086 +then6084: + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic6087, label %ok6088 +panic6087: + call void @finch_panic(ptr @.str.3891, i64 3258, ptr @.str.3892) + unreachable +ok6088: + %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 13 + %t30 = getelementptr inbounds %S.gen.FnSig, ptr %t29, i32 0, i32 12 + %t31 = load %S.ast.Type, ptr %t30 + %t32 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t31) + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3893, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t37, ptr %a16 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_drop(ptr %a39) + br label %endif6086 +endif6086: + %t40 = load ptr, ptr %a1 + %t41 = load %S.ast.Node, ptr %a2 + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic6089, label %ok6090 +panic6089: + call void @finch_panic(ptr @.str.3895, i64 3260, ptr @.str.3896) + unreachable +ok6090: + %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 13 + %t45 = getelementptr inbounds %S.gen.FnSig, ptr %t44, i32 0, i32 1 + %t46 = load { ptr, i64, i64 }, ptr %t45 + store { ptr, i64, i64 } { ptr @.str.3894, i64 29, i64 0 }, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.3897, i64 31, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t55, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.3898, i64 55, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + call void @finch.gen.fail(ptr %t40, %S.ast.Node %t41, { ptr, i64, i64 } %t66) + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + call void @finch_str_drop(ptr %a16) + br label %endif6081 +endif6081: + %t68 = load ptr, ptr %a1 + %t69 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t70 = load { ptr, i64, i64 }, ptr %t69 + %t71 = extractvalue { ptr, i64, i64 } %t70, 1 + %t72 = icmp uge i64 0, %t71 + br i1 %t72, label %range6091, label %inrange6092 +range6091: + call void @finch_panic_index(ptr @.str.3899, i64 3262, i64 0, i64 %t71) + unreachable +inrange6092: + %t73 = extractvalue { ptr, i64, i64 } %t70, 0 + %t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 0 + %t75 = load %S.ast.Node, ptr %t74 + %t76 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t68, %S.ast.Node %t75) + store %S.gen.Fallible %t76, ptr %a77 + %t78 = load ptr, ptr %a1 + %t79 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t78, { ptr, i64, i64 } { ptr @.str.3900, i64 10, i64 0 }) + store { ptr, i64, i64 } %t79, ptr %a80 + %t81 = load ptr, ptr %a1 + %t82 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t81, { ptr, i64, i64 } { ptr @.str.3901, i64 6, i64 0 }) + store { ptr, i64, i64 } %t82, ptr %a83 + %t84 = load ptr, ptr %a1 + %t85 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 1 + %t86 = load { ptr, i64, i64 }, ptr %t85 + %t87 = load { ptr, i64, i64 }, ptr %a80 + %t88 = load { ptr, i64, i64 }, ptr %a83 + call void @finch.gen.condBr(ptr %t84, { ptr, i64, i64 } %t86, { ptr, i64, i64 } %t87, { ptr, i64, i64 } %t88) + %t89 = load ptr, ptr %a1 + %t90 = load { ptr, i64, i64 }, ptr %a80 + call void @finch.gen.label(ptr %t89, { ptr, i64, i64 } %t90) + %t91 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t91, i64 0) + %t92 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t92, i64 0) + %t93 = load ptr, ptr %a1 + %t94 = load ptr, ptr %a1 + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic6093, label %ok6094 +panic6093: + call void @finch_panic(ptr @.str.3903, i64 3269, ptr @.str.3904) + unreachable +ok6094: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 13 + %t98 = load %S.gen.FnSig, ptr %t97 + %t99 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t94, %S.gen.FnSig %t98) + store { ptr, i64, i64 } { ptr @.str.3902, i64 4, i64 0 }, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t99, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.3905, i64 1, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = load ptr, ptr %a1 + %t111 = load ptr, ptr %a1 + %t112 = load ptr, ptr %a1 + %t113 = icmp eq ptr %t112, null + br i1 %t113, label %panic6095, label %ok6096 +panic6095: + call void @finch_panic(ptr @.str.3907, i64 3269, ptr @.str.3908) + unreachable +ok6096: + %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 13 + %t115 = load %S.gen.FnSig, ptr %t114 + %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t111, %S.gen.FnSig %t115) + store { ptr, i64, i64 } { ptr @.str.3906, i64 12, i64 0 }, ptr %a118 + store { ptr, i64, i64 } %t116, ptr %a119 + call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) + store { ptr, i64, i64 } %t116, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.3909, i64 36, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t126, ptr %a130 + store { ptr, i64, i64 } %t128, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + store { ptr, i64, i64 } %t126, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t133, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.3910, i64 3, i64 0 }, ptr %a136 + call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) + store { ptr, i64, i64 } %t133, ptr %a137 + call void @finch_str_drop(ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a134 + %t139 = call { ptr, i64, i64 } @finch.gen.op(ptr %t110, { ptr, i64, i64 } %t138) + store { ptr, i64, i64 } %t138, ptr %a140 + call void @finch_str_drop(ptr %a140) + store { ptr, i64, i64 } %t109, ptr %a142 + store { ptr, i64, i64 } %t139, ptr %a143 + call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) + store { ptr, i64, i64 } %t109, ptr %a144 + call void @finch_str_drop(ptr %a144) + store { ptr, i64, i64 } %t139, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a141 + call void @finch.gen.emit(ptr %t93, { ptr, i64, i64 } %t146) + store { ptr, i64, i64 } %t146, ptr %a147 + call void @finch_str_drop(ptr %a147) + %t148 = load ptr, ptr %a1 + %t149 = icmp eq ptr %t148, null + br i1 %t149, label %panic6097, label %ok6098 +panic6097: + call void @finch_panic(ptr @.str.3911, i64 3270, ptr @.str.3912) + unreachable +ok6098: + %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 9 + store i1 true, ptr %t150 + %t151 = load ptr, ptr %a1 + %t152 = load { ptr, i64, i64 }, ptr %a83 + call void @finch.gen.label(ptr %t151, { ptr, i64, i64 } %t152) + %t153 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 0 + %t154 = load %S.gen.Val, ptr %t153 + store %S.gen.Val %t154, ptr %a155 + call void @finch.copy.S_gen_Val(ptr %a156, ptr %a155) + %t157 = load %S.gen.Val, ptr %a156 + call void @finch_str_drop(ptr %a83) + call void @finch_str_drop(ptr %a80) + call void @finch.drop.S_gen_Fallible(ptr %a77) + ret %S.gen.Val %t157 +} + +define internal %S.gen.Val @finch.gen.orElse(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a13 = alloca %S.gen.Fallible, align 16 + %a16 = alloca %S.gen.Val, align 16 + %a17 = alloca %S.gen.Val, align 16 + %a19 = alloca %S.gen.Val, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca %S.ast.Type, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca i1, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca %S.ast.Type, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca %S.gen.Val, align 16 + %a155 = alloca %S.gen.Val, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca %S.ast.Type, align 16 + %a245 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range6099, label %inrange6100 +range6099: + call void @finch_panic_index(ptr @.str.3913, i64 3277, i64 0, i64 %t7) + unreachable +inrange6100: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t4, %S.ast.Node %t11) + store %S.gen.Fallible %t12, ptr %a13 + %t14 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 0 + %t15 = load %S.gen.Val, ptr %t14 + store %S.gen.Val %t15, ptr %a16 + call void @finch.copy.S_gen_Val(ptr %a17, ptr %a16) + %t18 = load %S.gen.Val, ptr %a17 + store %S.gen.Val %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t20, { ptr, i64, i64 } { ptr @.str.3914, i64 9, i64 0 }) + store { ptr, i64, i64 } %t21, ptr %a22 + %t23 = load ptr, ptr %a1 + %t24 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t23, { ptr, i64, i64 } { ptr @.str.3915, i64 5, i64 0 }) + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 1 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = load { ptr, i64, i64 }, ptr %a22 + %t30 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29, { ptr, i64, i64 } %t30) + %t31 = load ptr, ptr %a1 + %t32 = load { ptr, i64, i64 }, ptr %a22 + call void @finch.gen.label(ptr %t31, { ptr, i64, i64 } %t32) + %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 + %t34 = load i1, ptr %t33 + br i1 %t34, label %then6101, label %endif6103 +then6101: + %t35 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t35) + %t36 = load ptr, ptr %a1 + %t37 = load %S.ast.Node, ptr %a2 + %t38 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3917, i64 3, i64 0 }) + %t39 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } { ptr @.str.3916, i64 3, i64 0 }, %S.ast.Type %t38, { ptr, i64, i64 } %t40, i1 true, i1 true) + store %S.ast.Type %t38, ptr %a42 + call void @finch.drop.S_ast_Type(ptr %a42) + store { ptr, i64, i64 } %t41, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load ptr, ptr %a1 + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range6104, label %inrange6105 +range6104: + call void @finch_panic_index(ptr @.str.3918, i64 3286, i64 1, i64 %t47) + unreachable +inrange6105: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 + %t51 = load %S.ast.Node, ptr %t50 + call void @finch.gen.block(ptr %t44, %S.ast.Node %t51, i1 true) + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic6106, label %ok6107 +panic6106: + call void @finch_panic(ptr @.str.3919, i64 3287, ptr @.str.3920) + unreachable +ok6107: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 9 + %t55 = load i1, ptr %t54 + store i1 %t55, ptr %a56 + %t57 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t57) + %t58 = load i1, ptr %a56 + %t59 = xor i1 %t58, true + br label %logic.from6108 +logic.from6108: + br i1 %t59, label %logic.rhs6109, label %logic.end6110 +logic.rhs6109: + %t60 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.3921, i64 4, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp eq i32 %t65, 0 + br label %logic.rend6111 +logic.rend6111: + br label %logic.end6110 +logic.end6110: + %t67 = phi i1 [ false, %logic.from6108 ], [ %t66, %logic.rend6111 ] + br label %logic.from6112 +logic.from6112: + br i1 %t67, label %logic.rhs6113, label %logic.end6114 +logic.rhs6113: + %t68 = load i1, ptr %a3 + %t69 = xor i1 %t68, true + br label %logic.rend6115 +logic.rend6115: + br label %logic.end6114 +logic.end6114: + %t70 = phi i1 [ false, %logic.from6112 ], [ %t69, %logic.rend6115 ] + br i1 %t70, label %then6116, label %endif6118 +then6116: + %t71 = load ptr, ptr %a1 + %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 1, %t74 + br i1 %t75, label %range6119, label %inrange6120 +range6119: + call void @finch_panic_index(ptr @.str.3922, i64 3290, i64 1, i64 %t74) + unreachable +inrange6120: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 1 + %t78 = load %S.ast.Node, ptr %t77 + call void @finch.gen.fail(ptr %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.3923, i64 142, i64 0 }) + br label %endif6118 +endif6118: + %t79 = load i1, ptr %a3 + br label %logic.from6121 +logic.from6121: + br i1 %t79, label %logic.rhs6122, label %logic.end6123 +logic.rhs6122: + %t80 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t81 = getelementptr inbounds %S.ast.Type, ptr %t80, i32 0, i32 0 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t82, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.3924, i64 4, i64 0 }, ptr %a84 + %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) + %t86 = icmp eq i32 %t85, 0 + br label %logic.rend6124 +logic.rend6124: + br label %logic.end6123 +logic.end6123: + %t87 = phi i1 [ false, %logic.from6121 ], [ %t86, %logic.rend6124 ] + br i1 %t87, label %then6125, label %endif6127 +then6125: + %t88 = load ptr, ptr %a1 + %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3925, i64 6, i64 0 }) + store { ptr, i64, i64 } %t89, ptr %a90 + %t91 = load ptr, ptr %a1 + %t92 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t91, { ptr, i64, i64 } %t92) + %t93 = load ptr, ptr %a1 + %t94 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.label(ptr %t93, { ptr, i64, i64 } %t94) + %t95 = load ptr, ptr %a1 + %t96 = load %S.gen.Val, ptr %a19 + call void @finch.gen.release(ptr %t95, %S.gen.Val %t96) + %t97 = load ptr, ptr %a1 + %t98 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t97, { ptr, i64, i64 } %t98) + %t99 = load ptr, ptr %a1 + %t100 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.label(ptr %t99, { ptr, i64, i64 } %t100) + %t101 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3926, i64 4, i64 0 }) + %t102 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t101, 1 + call void @finch_str_drop(ptr %a90) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a22) + call void @finch.drop.S_gen_Val(ptr %a19) + call void @finch.drop.S_gen_Fallible(ptr %a13) + ret %S.gen.Val %t102 +endif6127: + %t103 = load ptr, ptr %a1 + %t104 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) + %t105 = load ptr, ptr %a1 + %t106 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) + %t107 = load %S.gen.Val, ptr %a19 + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a22) + call void @finch.drop.S_gen_Fallible(ptr %a13) + ret %S.gen.Val %t107 +endif6103: + %t108 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } %t110, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.3927, i64 4, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br i1 %t114, label %then6128, label %endif6130 +then6128: + %t115 = load ptr, ptr %a1 + %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t117 = load { ptr, i64, i64 }, ptr %t116 + %t118 = extractvalue { ptr, i64, i64 } %t117, 1 + %t119 = icmp uge i64 1, %t118 + br i1 %t119, label %range6131, label %inrange6132 +range6131: + call void @finch_panic_index(ptr @.str.3928, i64 3306, i64 1, i64 %t118) + unreachable +inrange6132: + %t120 = extractvalue { ptr, i64, i64 } %t117, 0 + %t121 = getelementptr inbounds %S.ast.Node, ptr %t120, i64 1 + %t122 = load %S.ast.Node, ptr %t121 + call void @finch.gen.fail(ptr %t115, %S.ast.Node %t122, { ptr, i64, i64 } { ptr @.str.3929, i64 98, i64 0 }) + br label %endif6130 +endif6130: + %t123 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t123) + %t124 = load ptr, ptr %a1 + %t125 = load %S.ast.Node, ptr %a2 + %t126 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3931, i64 3, i64 0 }) + %t127 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + %t129 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t124, %S.ast.Node %t125, { ptr, i64, i64 } { ptr @.str.3930, i64 3, i64 0 }, %S.ast.Type %t126, { ptr, i64, i64 } %t128, i1 true, i1 true) + store %S.ast.Type %t126, ptr %a130 + call void @finch.drop.S_ast_Type(ptr %a130) + store { ptr, i64, i64 } %t129, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load ptr, ptr %a1 + %t133 = load ptr, ptr %a1 + %t134 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t135 = load { ptr, i64, i64 }, ptr %t134 + %t136 = extractvalue { ptr, i64, i64 } %t135, 1 + %t137 = icmp uge i64 1, %t136 + br i1 %t137, label %range6133, label %inrange6134 +range6133: + call void @finch_panic_index(ptr @.str.3932, i64 3310, i64 1, i64 %t136) + unreachable +inrange6134: + %t138 = extractvalue { ptr, i64, i64 } %t135, 0 + %t139 = getelementptr inbounds %S.ast.Node, ptr %t138, i64 1 + %t140 = load %S.ast.Node, ptr %t139 + %t141 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t142 = load %S.ast.Type, ptr %t141 + %t143 = call %S.gen.Val @finch.gen.exprWant(ptr %t133, %S.ast.Node %t140, %S.ast.Type %t142) + %t144 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t145 = load %S.ast.Type, ptr %t144 + %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t147 = load { ptr, i64, i64 }, ptr %t146 + %t148 = extractvalue { ptr, i64, i64 } %t147, 1 + %t149 = icmp uge i64 1, %t148 + br i1 %t149, label %range6135, label %inrange6136 +range6135: + call void @finch_panic_index(ptr @.str.3933, i64 3310, i64 1, i64 %t148) + unreachable +inrange6136: + %t150 = extractvalue { ptr, i64, i64 } %t147, 0 + %t151 = getelementptr inbounds %S.ast.Node, ptr %t150, i64 1 + %t152 = load %S.ast.Node, ptr %t151 + %t153 = call %S.gen.Val @finch.gen.coerce(ptr %t132, %S.gen.Val %t143, %S.ast.Type %t145, %S.ast.Node %t152, { ptr, i64, i64 } { ptr @.str.3934, i64 20, i64 0 }) + store %S.gen.Val %t143, ptr %a154 + call void @finch.drop.S_gen_Val(ptr %a154) + store %S.gen.Val %t153, ptr %a155 + %t156 = load ptr, ptr %a1 + %t157 = load %S.gen.Val, ptr %a155 + %t158 = call { ptr, i64, i64 } @finch.gen.own(ptr %t156, %S.gen.Val %t157) + store { ptr, i64, i64 } %t158, ptr %a159 + %t160 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t160) + %t161 = load ptr, ptr %a1 + %t162 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t161, { ptr, i64, i64 } { ptr @.str.3935, i64 7, i64 0 }) + store { ptr, i64, i64 } %t162, ptr %a163 + %t164 = load ptr, ptr %a1 + %t165 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t164, { ptr, i64, i64 } { ptr @.str.3936, i64 6, i64 0 }) + store { ptr, i64, i64 } %t165, ptr %a166 + %t167 = load ptr, ptr %a1 + %t168 = load { ptr, i64, i64 }, ptr %a163 + call void @finch.gen.br(ptr %t167, { ptr, i64, i64 } %t168) + %t169 = load ptr, ptr %a1 + %t170 = load { ptr, i64, i64 }, ptr %a163 + call void @finch.gen.label(ptr %t169, { ptr, i64, i64 } %t170) + %t171 = load ptr, ptr %a1 + %t172 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t171, { ptr, i64, i64 } %t172) + %t173 = load ptr, ptr %a1 + %t174 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.label(ptr %t173, { ptr, i64, i64 } %t174) + %t175 = load ptr, ptr %a1 + %t176 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t175, { ptr, i64, i64 } %t176) + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.label(ptr %t177, { ptr, i64, i64 } %t178) + %t179 = load ptr, ptr %a1 + %t180 = load ptr, ptr %a1 + %t181 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t182 = load %S.ast.Type, ptr %t181 + %t183 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t180, %S.ast.Type %t182) + store { ptr, i64, i64 } { ptr @.str.3937, i64 4, i64 0 }, ptr %a185 + store { ptr, i64, i64 } %t183, ptr %a186 + call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) + store { ptr, i64, i64 } %t183, ptr %a187 + call void @finch_str_drop(ptr %a187) + %t188 = load { ptr, i64, i64 }, ptr %a184 + store { ptr, i64, i64 } %t188, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.3938, i64 3, i64 0 }, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t188, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load { ptr, i64, i64 }, ptr %a189 + %t194 = load { ptr, i64, i64 }, ptr %a159 + store { ptr, i64, i64 } %t193, ptr %a196 + store { ptr, i64, i64 } %t194, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t193, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + store { ptr, i64, i64 } %t199, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.3939, i64 3, i64 0 }, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t199, ptr %a203 + call void @finch_str_drop(ptr %a203) + %t204 = load { ptr, i64, i64 }, ptr %a200 + %t205 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t204, ptr %a207 + store { ptr, i64, i64 } %t205, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + store { ptr, i64, i64 } %t204, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t210, ptr %a212 + store { ptr, i64, i64 } { ptr @.str.3940, i64 6, i64 0 }, ptr %a213 + call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) + store { ptr, i64, i64 } %t210, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a211 + %t216 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 0 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t215, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t215, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.3941, i64 3, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t227, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t227, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.3942, i64 2, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t179, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t238, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t239, 0 + %t242 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t243 = load %S.ast.Type, ptr %t242 + store %S.ast.Type %t243, ptr %a244 + call void @finch.copy.S_ast_Type(ptr %a245, ptr %a244) + %t246 = load %S.ast.Type, ptr %a245 + %t247 = insertvalue %S.gen.Val %t241, %S.ast.Type %t246, 1 + %t248 = load ptr, ptr %a1 + %t249 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t250 = load %S.ast.Type, ptr %t249 + %t251 = call i1 @finch.gen.owning(ptr %t248, %S.ast.Type %t250) + %t252 = insertvalue %S.gen.Val %t247, i1 %t251, 2 + call void @finch_str_drop(ptr %a166) + call void @finch_str_drop(ptr %a163) + call void @finch_str_drop(ptr %a159) + call void @finch.drop.S_gen_Val(ptr %a155) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a22) + call void @finch.drop.S_gen_Val(ptr %a19) + call void @finch.drop.S_gen_Fallible(ptr %a13) + ret %S.gen.Val %t252 +} + +define internal %S.gen.Val @finch.gen.exprWant(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.3943, i64 5, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then6137, label %endif6139 +then6137: + %t10 = load ptr, ptr %a1 + %t11 = load %S.ast.Node, ptr %a2 + %t12 = load %S.ast.Type, ptr %a3 + %t13 = call %S.gen.Val @finch.gen.arrayLit(ptr %t10, %S.ast.Node %t11, %S.ast.Type %t12) + ret %S.gen.Val %t13 +endif6139: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3944, i64 3, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then6140, label %endif6142 +then6140: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Node, ptr %a2 + %t22 = load %S.ast.Type, ptr %a3 + %t23 = call %S.gen.Val @finch.gen.mapLit(ptr %t20, %S.ast.Node %t21, %S.ast.Type %t22) + ret %S.gen.Val %t23 +endif6142: + %t24 = load ptr, ptr %a1 + %t25 = load %S.ast.Node, ptr %a2 + %t26 = call %S.gen.Val @finch.gen.expr(ptr %t24, %S.ast.Node %t25) + ret %S.gen.Val %t26 +} + +define internal %S.gen.Val @finch.gen.expr(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca i64, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca i64, align 16 + %a47 = alloca i8, align 16 + %a52 = alloca i64, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca i64, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca %S.gen.Ref, align 16 + %a186 = alloca %S.gen.Val, align 16 + %a187 = alloca %S.gen.Val, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca %S.ast.Type, align 16 + %a205 = alloca %S.ast.Type, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca %S.ast.Type, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca %S.ast.Type, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.3945, i64 3, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then6143, label %endif6145 +then6143: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3947, i64 2, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_starts(ptr %a16, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.from6146 +logic.from6146: + br i1 %t20, label %logic.end6148, label %logic.rhs6147 +logic.rhs6147: + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.3949, i64 2, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_starts(ptr %a23, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.rend6149 +logic.rend6149: + br label %logic.end6148 +logic.end6148: + %t28 = phi i1 [ true, %logic.from6146 ], [ %t27, %logic.rend6149 ] + br i1 %t28, label %then6150, label %endif6152 +then6150: + store i64 0, ptr %a29 + %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t31 = load { ptr, i64, i64 }, ptr %t30 + store { ptr, i64, i64 } %t31, ptr %a32 + %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 + %t36 = load i64, ptr %t35 + call void @finch_str_sub(ptr %a33, ptr %a32, i64 2, i64 %t36, ptr @.str.3950, i64 3339) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a38 + store i64 0, ptr %a39 + br label %each.cond6153 +each.cond6153: + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a38, i32 0, i32 1 + %t41 = load i64, ptr %t40 + %t42 = load i64, ptr %a39 + %t43 = icmp slt i64 %t42, %t41 + br i1 %t43, label %each.body6154, label %each.end6156 +each.body6154: + %t44 = load ptr, ptr %a38 + %t45 = getelementptr inbounds i8, ptr %t44, i64 %t42 + %t46 = load i8, ptr %t45 + store i8 %t46, ptr %a47 + %t48 = load i8, ptr %a47 + %t49 = zext i8 %t48 to i64 + %t50 = zext i8 48 to i64 + %t51 = sub i64 %t49, %t50 + store i64 %t51, ptr %a52 + %t53 = load i8, ptr %a47 + %t54 = icmp uge i8 %t53, 97 + br label %logic.from6157 +logic.from6157: + br i1 %t54, label %logic.rhs6158, label %logic.end6159 +logic.rhs6158: + %t55 = load i8, ptr %a47 + %t56 = icmp ule i8 %t55, 102 + br label %logic.rend6160 +logic.rend6160: + br label %logic.end6159 +logic.end6159: + %t57 = phi i1 [ false, %logic.from6157 ], [ %t56, %logic.rend6160 ] + br i1 %t57, label %then6161, label %endif6163 +then6161: + %t58 = load i8, ptr %a47 + %t59 = zext i8 %t58 to i64 + %t60 = zext i8 97 to i64 + %t61 = sub i64 %t59, %t60 + %t62 = add i64 %t61, 10 + store i64 %t62, ptr %a52 + br label %endif6163 +endif6163: + %t63 = load i8, ptr %a47 + %t64 = icmp uge i8 %t63, 65 + br label %logic.from6164 +logic.from6164: + br i1 %t64, label %logic.rhs6165, label %logic.end6166 +logic.rhs6165: + %t65 = load i8, ptr %a47 + %t66 = icmp ule i8 %t65, 70 + br label %logic.rend6167 +logic.rend6167: + br label %logic.end6166 +logic.end6166: + %t67 = phi i1 [ false, %logic.from6164 ], [ %t66, %logic.rend6167 ] + br i1 %t67, label %then6168, label %endif6170 +then6168: + %t68 = load i8, ptr %a47 + %t69 = zext i8 %t68 to i64 + %t70 = zext i8 65 to i64 + %t71 = sub i64 %t69, %t70 + %t72 = add i64 %t71, 10 + store i64 %t72, ptr %a52 + br label %endif6170 +endif6170: + %t73 = load i64, ptr %a29 + %t74 = mul i64 %t73, 16 + %t75 = load i64, ptr %a52 + %t76 = add i64 %t74, %t75 + store i64 %t76, ptr %a29 + br label %each.step6155 +each.step6155: + %t77 = load i64, ptr %a39 + %t78 = add i64 %t77, 1 + store i64 %t78, ptr %a39 + br label %each.cond6153 +each.end6156: + call void @finch_str_drop(ptr %a38) + %t79 = load i64, ptr %a29 + call void @finch_str_from_int(ptr %a80, i64 %t79) + %t81 = load { ptr, i64, i64 }, ptr %a80 + %t82 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t81, 0 + %t83 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3951, i64 3, i64 0 }) + %t84 = insertvalue %S.gen.Val %t82, %S.ast.Type %t83, 1 + %t85 = insertvalue %S.gen.Val %t84, i1 true, 3 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t85 +endif6152: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } %t87, ptr %a88 + %t89 = call i64 @finch_str_to_int(ptr %a88, ptr @.str.3952, i64 3351) + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t91, 0 + %t93 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3953, i64 3, i64 0 }) + %t94 = insertvalue %S.gen.Val %t92, %S.ast.Type %t93, 1 + %t95 = insertvalue %S.gen.Val %t94, i1 true, 3 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t95 +endif6145: + %t96 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.3954, i64 5, i64 0 }, ptr %a98 + %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) + %t100 = icmp ne i32 %t99, 0 + br i1 %t100, label %then6171, label %endif6173 +then6171: + %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } %t102, ptr %a103 + call void @finch_str_copy(ptr %a104, ptr %a103) + %t105 = load { ptr, i64, i64 }, ptr %a104 + %t106 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t105, 0 + %t107 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3955, i64 5, i64 0 }) + %t108 = insertvalue %S.gen.Val %t106, %S.ast.Type %t107, 1 + %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t109 +endif6173: + %t110 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t110, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.3956, i64 4, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br i1 %t114, label %then6174, label %endif6176 +then6174: + %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_copy(ptr %a118, ptr %a117) + %t119 = load { ptr, i64, i64 }, ptr %a118 + %t120 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t119, 0 + %t121 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3957, i64 4, i64 0 }) + %t122 = insertvalue %S.gen.Val %t120, %S.ast.Type %t121, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t122 +endif6176: + %t123 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t123, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.3958, i64 4, i64 0 }, ptr %a125 + %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) + %t127 = icmp ne i32 %t126, 0 + br i1 %t127, label %then6177, label %endif6179 +then6177: + %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t129 = load { ptr, i64, i64 }, ptr %t128 + %t130 = extractvalue { ptr, i64, i64 } %t129, 1 + %t131 = icmp uge i64 0, %t130 + br i1 %t131, label %range6180, label %inrange6181 +range6180: + call void @finch_panic_index(ptr @.str.3959, i64 3360, i64 0, i64 %t130) + unreachable +inrange6181: + %t132 = extractvalue { ptr, i64, i64 } %t129, 0 + %t133 = getelementptr inbounds i8, ptr %t132, i64 0 + %t134 = load i8, ptr %t133 + %t135 = zext i8 %t134 to i64 + store i64 %t135, ptr %a136 + %t137 = load i64, ptr %a136 + call void @finch_str_from_int(ptr %a138, i64 %t137) + %t139 = load { ptr, i64, i64 }, ptr %a138 + %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t141 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3960, i64 4, i64 0 }) + %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t142 +endif6179: + %t143 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t143, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.3961, i64 3, i64 0 }, ptr %a145 + %t146 = call i32 @finch_str_eq(ptr %a144, ptr %a145) + %t147 = icmp ne i32 %t146, 0 + br i1 %t147, label %then6182, label %endif6184 +then6182: + %t148 = load ptr, ptr %a1 + %t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t150 = load { ptr, i64, i64 }, ptr %t149 + %t151 = call %S.gen.Val @finch.gen.strConst(ptr %t148, { ptr, i64, i64 } %t150) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t151 +endif6184: + %t152 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t152, ptr %a153 + store { ptr, i64, i64 } { ptr @.str.3962, i64 4, i64 0 }, ptr %a154 + %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) + %t156 = icmp ne i32 %t155, 0 + br i1 %t156, label %then6185, label %endif6187 +then6185: + %t157 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.3963, i64 4, i64 0 }, 0 + %t158 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3964, i64 4, i64 0 }) + %t159 = insertvalue %S.gen.Val %t157, %S.ast.Type %t158, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t159 +endif6187: + %t160 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t160, ptr %a161 + store { ptr, i64, i64 } { ptr @.str.3965, i64 3, i64 0 }, ptr %a162 + %t163 = call i32 @finch_str_eq(ptr %a161, ptr %a162) + %t164 = icmp ne i32 %t163, 0 + br label %logic.from6188 +logic.from6188: + br i1 %t164, label %logic.end6190, label %logic.rhs6189 +logic.rhs6189: + %t165 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t165, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.3966, i64 6, i64 0 }, ptr %a167 + %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) + %t169 = icmp ne i32 %t168, 0 + br label %logic.rend6191 +logic.rend6191: + br label %logic.end6190 +logic.end6190: + %t170 = phi i1 [ true, %logic.from6188 ], [ %t169, %logic.rend6191 ] + br label %logic.from6192 +logic.from6192: + br i1 %t170, label %logic.end6194, label %logic.rhs6193 +logic.rhs6193: + %t171 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.3967, i64 5, i64 0 }, ptr %a173 + %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) + %t175 = icmp ne i32 %t174, 0 + br label %logic.rend6195 +logic.rend6195: + br label %logic.end6194 +logic.end6194: + %t176 = phi i1 [ true, %logic.from6192 ], [ %t175, %logic.rend6195 ] + br i1 %t176, label %then6196, label %endif6198 +then6196: + %t177 = load ptr, ptr %a1 + %t178 = load %S.ast.Node, ptr %a2 + %t179 = call %S.gen.Ref @finch.gen.ref(ptr %t177, %S.ast.Node %t178, i1 false) + store %S.gen.Ref %t179, ptr %a180 + %t181 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 0 + %t182 = load i1, ptr %t181 + %t183 = xor i1 %t182, true + br i1 %t183, label %then6199, label %endif6201 +then6199: + %t184 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 2 + %t185 = load %S.gen.Val, ptr %t184 + store %S.gen.Val %t185, ptr %a186 + call void @finch.copy.S_gen_Val(ptr %a187, ptr %a186) + %t188 = load %S.gen.Val, ptr %a187 + call void @finch.drop.S_gen_Ref(ptr %a180) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t188 +endif6201: + %t189 = load ptr, ptr %a1 + %t190 = load ptr, ptr %a1 + %t191 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 + %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 1 + %t193 = load %S.ast.Type, ptr %t192 + %t194 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t190, %S.ast.Type %t193) + %t195 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 + %t196 = getelementptr inbounds %S.gen.Place, ptr %t195, i32 0, i32 0 + %t197 = load { ptr, i64, i64 }, ptr %t196 + %t198 = call { ptr, i64, i64 } @finch.gen.load(ptr %t189, { ptr, i64, i64 } %t194, { ptr, i64, i64 } %t197) + store { ptr, i64, i64 } %t194, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t198, 0 + %t201 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 + %t202 = getelementptr inbounds %S.gen.Place, ptr %t201, i32 0, i32 1 + %t203 = load %S.ast.Type, ptr %t202 + store %S.ast.Type %t203, ptr %a204 + call void @finch.copy.S_ast_Type(ptr %a205, ptr %a204) + %t206 = load %S.ast.Type, ptr %a205 + %t207 = insertvalue %S.gen.Val %t200, %S.ast.Type %t206, 1 + call void @finch.drop.S_gen_Ref(ptr %a180) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t207 +endif6198: + %t208 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.3968, i64 5, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br i1 %t212, label %then6202, label %endif6204 +then6202: + %t213 = load ptr, ptr %a1 + %t214 = load %S.ast.Node, ptr %a2 + %t215 = call %S.gen.Val @finch.gen.matchGen(ptr %t213, %S.ast.Node %t214, i1 true) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t215 +endif6204: + %t216 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t216, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.3969, i64 3, i64 0 }, ptr %a218 + %t219 = call i32 @finch_str_eq(ptr %a217, ptr %a218) + %t220 = icmp ne i32 %t219, 0 + br i1 %t220, label %then6205, label %endif6207 +then6205: + %t221 = load ptr, ptr %a1 + %t222 = load %S.ast.Node, ptr %a2 + %t223 = call %S.gen.Val @finch.gen.tryExpr(ptr %t221, %S.ast.Node %t222) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t223 +endif6207: + %t224 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t224, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.3970, i64 2, i64 0 }, ptr %a226 + %t227 = call i32 @finch_str_eq(ptr %a225, ptr %a226) + %t228 = icmp ne i32 %t227, 0 + br i1 %t228, label %then6208, label %endif6210 +then6208: + %t229 = load ptr, ptr %a1 + %t230 = load %S.ast.Node, ptr %a2 + %t231 = call %S.gen.Val @finch.gen.orElse(ptr %t229, %S.ast.Node %t230, i1 false) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t231 +endif6210: + %t232 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t232, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.3971, i64 5, i64 0 }, ptr %a234 + %t235 = call i32 @finch_str_eq(ptr %a233, ptr %a234) + %t236 = icmp ne i32 %t235, 0 + br i1 %t236, label %then6211, label %endif6213 +then6211: + %t237 = load ptr, ptr %a1 + %t238 = load %S.ast.Node, ptr %a2 + %t239 = call %S.gen.Val @finch.gen.unary(ptr %t237, %S.ast.Node %t238) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t239 +endif6213: + %t240 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t240, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.3972, i64 6, i64 0 }, ptr %a242 + %t243 = call i32 @finch_str_eq(ptr %a241, ptr %a242) + %t244 = icmp ne i32 %t243, 0 + br i1 %t244, label %then6214, label %endif6216 +then6214: + %t245 = load ptr, ptr %a1 + %t246 = load %S.ast.Node, ptr %a2 + %t247 = call %S.gen.Val @finch.gen.binary(ptr %t245, %S.ast.Node %t246) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t247 +endif6216: + %t248 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t248, ptr %a249 + store { ptr, i64, i64 } { ptr @.str.3973, i64 4, i64 0 }, ptr %a250 + %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) + %t252 = icmp ne i32 %t251, 0 + br i1 %t252, label %then6217, label %endif6219 +then6217: + %t253 = load ptr, ptr %a1 + %t254 = load %S.ast.Node, ptr %a2 + %t255 = call %S.gen.Val @finch.gen.call(ptr %t253, %S.ast.Node %t254) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t255 +endif6219: + %t256 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t256, ptr %a257 + store { ptr, i64, i64 } { ptr @.str.3974, i64 6, i64 0 }, ptr %a258 + %t259 = call i32 @finch_str_eq(ptr %a257, ptr %a258) + %t260 = icmp ne i32 %t259, 0 + br i1 %t260, label %then6220, label %endif6222 +then6220: + %t261 = load ptr, ptr %a1 + %t262 = load %S.ast.Node, ptr %a2 + %t263 = call %S.gen.Val @finch.gen.method(ptr %t261, %S.ast.Node %t262) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t263 +endif6222: + %t264 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t264, ptr %a265 + store { ptr, i64, i64 } { ptr @.str.3975, i64 5, i64 0 }, ptr %a266 + %t267 = call i32 @finch_str_eq(ptr %a265, ptr %a266) + %t268 = icmp ne i32 %t267, 0 + br i1 %t268, label %then6223, label %endif6225 +then6223: + %t269 = load ptr, ptr %a1 + %t270 = load %S.ast.Node, ptr %a2 + %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3976, i64 4, i64 0 }) + %t272 = call %S.gen.Val @finch.gen.arrayLit(ptr %t269, %S.ast.Node %t270, %S.ast.Type %t271) + store %S.ast.Type %t271, ptr %a273 + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t272 +endif6225: + %t274 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t274, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.3977, i64 3, i64 0 }, ptr %a276 + %t277 = call i32 @finch_str_eq(ptr %a275, ptr %a276) + %t278 = icmp ne i32 %t277, 0 + br i1 %t278, label %then6226, label %endif6228 +then6226: + %t279 = load ptr, ptr %a1 + %t280 = load %S.ast.Node, ptr %a2 + %t281 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3978, i64 4, i64 0 }) + %t282 = call %S.gen.Val @finch.gen.mapLit(ptr %t279, %S.ast.Node %t280, %S.ast.Type %t281) + store %S.ast.Type %t281, ptr %a283 + call void @finch.drop.S_ast_Type(ptr %a283) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t282 +endif6228: + %t284 = load ptr, ptr %a1 + %t285 = load %S.ast.Node, ptr %a2 + %t286 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.3979, i64 19, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a287 + call void @finch.gen.fail(ptr %t284, %S.ast.Node %t285, { ptr, i64, i64 } %t290) + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val zeroinitializer +} + +define internal %S.gen.Val @finch.gen.unary(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a12 = alloca %S.gen.Val, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a31 = alloca %S.gen.Val, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a103 = alloca %S.ast.Type, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca %S.ast.Type, align 16 + %a144 = alloca %S.ast.Type, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca %S.ast.Type, align 16 + %a158 = alloca %S.ast.Type, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca %S.ast.Type, align 16 + %a190 = alloca %S.ast.Type, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca %S.ast.Type, align 16 + %a224 = alloca %S.ast.Type, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t5 = load { ptr, i64, i64 }, ptr %t4 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 0, %t6 + br i1 %t7, label %range6229, label %inrange6230 +range6229: + call void @finch_panic_index(ptr @.str.3980, i64 3408, i64 0, i64 %t6) + unreachable +inrange6230: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 + %t10 = load %S.ast.Node, ptr %t9 + %t11 = call %S.gen.Val @finch.gen.expr(ptr %t3, %S.ast.Node %t10) + store %S.gen.Val %t11, ptr %a12 + %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.3981, i64 1, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br i1 %t18, label %then6231, label %endif6233 +then6231: + %t19 = load ptr, ptr %a1 + %t20 = load %S.gen.Val, ptr %a12 + %t21 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3982, i64 4, i64 0 }) + %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 0, %t24 + br i1 %t25, label %range6234, label %inrange6235 +range6234: + call void @finch_panic_index(ptr @.str.3983, i64 3410, i64 0, i64 %t24) + unreachable +inrange6235: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds %S.ast.Node, ptr %t26, i64 0 + %t28 = load %S.ast.Node, ptr %t27 + %t29 = call %S.gen.Val @finch.gen.coerce(ptr %t19, %S.gen.Val %t20, %S.ast.Type %t21, %S.ast.Node %t28, { ptr, i64, i64 } { ptr @.str.3984, i64 19, i64 0 }) + store %S.ast.Type %t21, ptr %a30 + call void @finch.drop.S_ast_Type(ptr %a30) + store %S.gen.Val %t29, ptr %a31 + %t32 = load ptr, ptr %a1 + %t33 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } { ptr @.str.3985, i64 7, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.3986, i64 6, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + %t44 = call { ptr, i64, i64 } @finch.gen.op(ptr %t32, { ptr, i64, i64 } %t43) + store { ptr, i64, i64 } %t43, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t44, 0 + %t47 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3987, i64 4, i64 0 }) + %t48 = insertvalue %S.gen.Val %t46, %S.ast.Type %t47, 1 + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t48 +endif6233: + %t49 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.3988, i64 1, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then6236, label %endif6238 +then6236: + %t55 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t56 = load %S.ast.Type, ptr %t55 + %t57 = call i1 @finch.gen.isInt(%S.ast.Type %t56) + %t58 = xor i1 %t57, true + br i1 %t58, label %then6239, label %endif6241 +then6239: + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Node, ptr %a2 + %t61 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t62 = load %S.ast.Type, ptr %t61 + %t63 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t62) + store { ptr, i64, i64 } { ptr @.str.3989, i64 45, i64 0 }, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t63, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a64 + call void @finch.gen.fail(ptr %t59, %S.ast.Node %t60, { ptr, i64, i64 } %t68) + store { ptr, i64, i64 } %t68, ptr %a69 + call void @finch_str_drop(ptr %a69) + br label %endif6241 +endif6241: + %t70 = load ptr, ptr %a1 + %t71 = load ptr, ptr %a1 + %t72 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t73 = load %S.ast.Type, ptr %t72 + %t74 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t71, %S.ast.Type %t73) + store { ptr, i64, i64 } { ptr @.str.3990, i64 4, i64 0 }, ptr %a76 + store { ptr, i64, i64 } %t74, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3991, i64 1, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + %t85 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t84, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t84, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.3992, i64 4, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + %t97 = call { ptr, i64, i64 } @finch.gen.op(ptr %t70, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t97, 0 + %t100 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t101 = load %S.ast.Type, ptr %t100 + store %S.ast.Type %t101, ptr %a102 + call void @finch.copy.S_ast_Type(ptr %a103, ptr %a102) + %t104 = load %S.ast.Type, ptr %a103 + %t105 = insertvalue %S.gen.Val %t99, %S.ast.Type %t104, 1 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t105 +endif6238: + %t106 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t107 = load %S.ast.Type, ptr %t106 + %t108 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t107) + br i1 %t108, label %then6242, label %endif6244 +then6242: + %t109 = load ptr, ptr %a1 + %t110 = load %S.ast.Node, ptr %a2 + %t111 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t112 = load %S.ast.Type, ptr %t111 + %t113 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t112) + store { ptr, i64, i64 } %t113, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.3993, i64 34, i64 0 }, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t113, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a114 + call void @finch.gen.fail(ptr %t109, %S.ast.Node %t110, { ptr, i64, i64 } %t118) + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_drop(ptr %a119) + br label %endif6244 +endif6244: + %t120 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t121 = load %S.ast.Type, ptr %t120 + %t122 = call i1 @finch.gen.isSigned(%S.ast.Type %t121) + br i1 %t122, label %then6245, label %endif6247 +then6245: + %t123 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 3 + %t124 = load i1, ptr %t123 + br i1 %t124, label %then6248, label %endif6250 +then6248: + %t125 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t126, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.3995, i64 1, i64 0 }, ptr %a129 + %t130 = call i32 @finch_str_starts(ptr %a127, ptr %a129) + %t131 = icmp ne i32 %t130, 0 + br i1 %t131, label %then6251, label %endif6253 +then6251: + %t132 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + %t136 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 + %t138 = load i64, ptr %t137 + call void @finch_str_sub(ptr %a135, ptr %a134, i64 1, i64 %t138, ptr @.str.3996, i64 3425) + %t139 = load { ptr, i64, i64 }, ptr %a135 + %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t141 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t142 = load %S.ast.Type, ptr %t141 + store %S.ast.Type %t142, ptr %a143 + call void @finch.copy.S_ast_Type(ptr %a144, ptr %a143) + %t145 = load %S.ast.Type, ptr %a144 + %t146 = insertvalue %S.gen.Val %t140, %S.ast.Type %t145, 1 + %t147 = insertvalue %S.gen.Val %t146, i1 true, 3 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t147 +endif6253: + %t148 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t149 = load { ptr, i64, i64 }, ptr %t148 + store { ptr, i64, i64 } { ptr @.str.3997, i64 1, i64 0 }, ptr %a151 + store { ptr, i64, i64 } %t149, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + %t153 = load { ptr, i64, i64 }, ptr %a150 + %t154 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t153, 0 + %t155 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t156 = load %S.ast.Type, ptr %t155 + store %S.ast.Type %t156, ptr %a157 + call void @finch.copy.S_ast_Type(ptr %a158, ptr %a157) + %t159 = load %S.ast.Type, ptr %a158 + %t160 = insertvalue %S.gen.Val %t154, %S.ast.Type %t159, 1 + %t161 = insertvalue %S.gen.Val %t160, i1 true, 3 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t161 +endif6250: + %t162 = load ptr, ptr %a1 + %t163 = load ptr, ptr %a1 + %t164 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t165 = load %S.ast.Type, ptr %t164 + %t166 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t163, %S.ast.Type %t165) + store { ptr, i64, i64 } { ptr @.str.3998, i64 4, i64 0 }, ptr %a168 + store { ptr, i64, i64 } %t166, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t166, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t171, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.3999, i64 4, i64 0 }, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t171, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a172 + %t177 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t178 = load { ptr, i64, i64 }, ptr %t177 + store { ptr, i64, i64 } %t176, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t176, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t162, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t184, 0 + %t187 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t188 = load %S.ast.Type, ptr %t187 + store %S.ast.Type %t188, ptr %a189 + call void @finch.copy.S_ast_Type(ptr %a190, ptr %a189) + %t191 = load %S.ast.Type, ptr %a190 + %t192 = insertvalue %S.gen.Val %t186, %S.ast.Type %t191, 1 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t192 +endif6247: + %t193 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t194 = load %S.ast.Type, ptr %t193 + %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) + br i1 %t195, label %then6254, label %endif6256 +then6254: + %t196 = load ptr, ptr %a1 + %t197 = load ptr, ptr %a1 + %t198 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t199 = load %S.ast.Type, ptr %t198 + %t200 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t197, %S.ast.Type %t199) + store { ptr, i64, i64 } { ptr @.str.4000, i64 5, i64 0 }, ptr %a202 + store { ptr, i64, i64 } %t200, ptr %a203 + call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) + store { ptr, i64, i64 } %t200, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a201 + store { ptr, i64, i64 } %t205, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.4001, i64 1, i64 0 }, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + store { ptr, i64, i64 } %t205, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a206 + %t211 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t212 = load { ptr, i64, i64 }, ptr %t211 + store { ptr, i64, i64 } %t210, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t210, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + %t218 = call { ptr, i64, i64 } @finch.gen.op(ptr %t196, { ptr, i64, i64 } %t217) + store { ptr, i64, i64 } %t217, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t218, 0 + %t221 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t222 = load %S.ast.Type, ptr %t221 + store %S.ast.Type %t222, ptr %a223 + call void @finch.copy.S_ast_Type(ptr %a224, ptr %a223) + %t225 = load %S.ast.Type, ptr %a224 + %t226 = insertvalue %S.gen.Val %t220, %S.ast.Type %t225, 1 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t226 +endif6256: + %t227 = load ptr, ptr %a1 + %t228 = load %S.ast.Node, ptr %a2 + %t229 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t230 = load %S.ast.Type, ptr %t229 + %t231 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t230) + store { ptr, i64, i64 } { ptr @.str.4002, i64 26, i64 0 }, ptr %a233 + store { ptr, i64, i64 } %t231, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t231, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + call void @finch.gen.fail(ptr %t227, %S.ast.Node %t228, { ptr, i64, i64 } %t236) + store { ptr, i64, i64 } %t236, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load %S.gen.Val, ptr %a12 + ret %S.gen.Val %t238 +} + +define internal void @finch.gen.badOperands(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.gen.Val, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.gen.Val %p2, ptr %a3 + store %S.gen.Val %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.4003, i64 11, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.4004, i64 5, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t17) + store { ptr, i64, i64 } %t15, ptr %a20 + store { ptr, i64, i64 } %t18, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t15, ptr %a22 + call void @finch_str_drop(ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t27 = load %S.ast.Type, ptr %t26 + %t28 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 + %t29 = load %S.ast.Type, ptr %t28 + %t30 = call i1 @finch.ast.same(%S.ast.Type %t27, %S.ast.Type %t29) + %t31 = xor i1 %t30, true + br i1 %t31, label %then6257, label %endif6259 +then6257: + %t32 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.4005, i64 5, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a33 + %t37 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 + %t38 = load %S.ast.Type, ptr %t37 + %t39 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t38) + store { ptr, i64, i64 } %t36, ptr %a41 + store { ptr, i64, i64 } %t39, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t36, ptr %a43 + call void @finch_str_drop(ptr %a43) + store { ptr, i64, i64 } %t39, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a40 + %t46 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t45, ptr %a25 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %endif6259 +endif6259: + %t48 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t48, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.4006, i64 1, i64 0 }, ptr %a50 + %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) + %t52 = icmp ne i32 %t51, 0 + br label %logic.from6260 +logic.from6260: + br i1 %t52, label %logic.rhs6261, label %logic.end6262 +logic.rhs6261: + %t53 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t54 = getelementptr inbounds %S.ast.Type, ptr %t53, i32 0, i32 0 + %t55 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t55, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.4007, i64 3, i64 0 }, ptr %a57 + %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) + %t59 = icmp ne i32 %t58, 0 + br label %logic.from6263 +logic.from6263: + br i1 %t59, label %logic.end6265, label %logic.rhs6264 +logic.rhs6264: + %t60 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 + %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.4008, i64 3, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br label %logic.rend6266 +logic.rend6266: + br label %logic.end6265 +logic.end6265: + %t67 = phi i1 [ true, %logic.from6263 ], [ %t66, %logic.rend6266 ] + br label %logic.rend6267 +logic.rend6267: + br label %logic.end6262 +logic.end6262: + %t68 = phi i1 [ false, %logic.from6260 ], [ %t67, %logic.rend6267 ] + br i1 %t68, label %then6268, label %endif6270 +then6268: + %t69 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.4009, i64 48, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a70 + %t74 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t73, ptr %a25 + store { ptr, i64, i64 } %t74, ptr %a75 + call void @finch_str_drop(ptr %a75) + br label %endif6270 +endif6270: + %t76 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.4010, i64 1, i64 0 }, ptr %a78 + %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) + %t80 = icmp ne i32 %t79, 0 + br label %logic.from6271 +logic.from6271: + br i1 %t80, label %logic.end6273, label %logic.rhs6272 +logic.rhs6272: + %t81 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.4011, i64 1, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.rend6274 +logic.rend6274: + br label %logic.end6273 +logic.end6273: + %t86 = phi i1 [ true, %logic.from6271 ], [ %t85, %logic.rend6274 ] + br label %logic.from6275 +logic.from6275: + br i1 %t86, label %logic.rhs6276, label %logic.end6277 +logic.rhs6276: + %t87 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i32 0, i32 0 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.4012, i64 4, i64 0 }, ptr %a91 + %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) + %t93 = icmp ne i32 %t92, 0 + br label %logic.rend6278 +logic.rend6278: + br label %logic.end6277 +logic.end6277: + %t94 = phi i1 [ false, %logic.from6275 ], [ %t93, %logic.rend6278 ] + br i1 %t94, label %then6279, label %else6280 +then6279: + %t95 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.4013, i64 1, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then6282, label %else6283 +then6282: + %t100 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.4014, i64 26, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a101 + %t105 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t104, ptr %a25 + store { ptr, i64, i64 } %t105, ptr %a106 + call void @finch_str_drop(ptr %a106) + br label %endif6284 +else6283: + %t107 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.4015, i64 26, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + %t112 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t111, ptr %a25 + store { ptr, i64, i64 } %t112, ptr %a113 + call void @finch_str_drop(ptr %a113) + br label %endif6284 +endif6284: + br label %endif6281 +else6280: + %t114 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.4016, i64 1, i64 0 }, ptr %a116 + %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) + %t118 = icmp ne i32 %t117, 0 + br label %logic.from6285 +logic.from6285: + br i1 %t118, label %logic.end6287, label %logic.rhs6286 +logic.rhs6286: + %t119 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t119, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.4017, i64 1, i64 0 }, ptr %a121 + %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) + %t123 = icmp ne i32 %t122, 0 + br label %logic.rend6288 +logic.rend6288: + br label %logic.end6287 +logic.end6287: + %t124 = phi i1 [ true, %logic.from6285 ], [ %t123, %logic.rend6288 ] + br label %logic.from6289 +logic.from6289: + br i1 %t124, label %logic.end6291, label %logic.rhs6290 +logic.rhs6290: + %t125 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t125, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.4018, i64 1, i64 0 }, ptr %a127 + %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) + %t129 = icmp ne i32 %t128, 0 + br label %logic.rend6292 +logic.rend6292: + br label %logic.end6291 +logic.end6291: + %t130 = phi i1 [ true, %logic.from6289 ], [ %t129, %logic.rend6292 ] + br label %logic.from6293 +logic.from6293: + br i1 %t130, label %logic.end6295, label %logic.rhs6294 +logic.rhs6294: + %t131 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t131, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.4019, i64 2, i64 0 }, ptr %a133 + %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) + %t135 = icmp ne i32 %t134, 0 + br label %logic.rend6296 +logic.rend6296: + br label %logic.end6295 +logic.end6295: + %t136 = phi i1 [ true, %logic.from6293 ], [ %t135, %logic.rend6296 ] + br label %logic.from6297 +logic.from6297: + br i1 %t136, label %logic.end6299, label %logic.rhs6298 +logic.rhs6298: + %t137 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t137, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.4020, i64 2, i64 0 }, ptr %a139 + %t140 = call i32 @finch_str_eq(ptr %a138, ptr %a139) + %t141 = icmp ne i32 %t140, 0 + br label %logic.rend6300 +logic.rend6300: + br label %logic.end6299 +logic.end6299: + %t142 = phi i1 [ true, %logic.from6297 ], [ %t141, %logic.rend6300 ] + br i1 %t142, label %then6301, label %endif6303 +then6301: + %t143 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t143, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.4021, i64 43, i64 0 }, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a144 + %t148 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t147, ptr %a25 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch_str_drop(ptr %a149) + br label %endif6303 +endif6303: + br label %endif6281 +endif6281: + %t150 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t151 = getelementptr inbounds %S.ast.Type, ptr %t150, i32 0, i32 0 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t152, ptr %a153 + store { ptr, i64, i64 } { ptr @.str.4022, i64 6, i64 0 }, ptr %a154 + %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) + %t156 = icmp ne i32 %t155, 0 + br label %logic.from6304 +logic.from6304: + br i1 %t156, label %logic.end6306, label %logic.rhs6305 +logic.rhs6305: + %t157 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t158 = getelementptr inbounds %S.ast.Type, ptr %t157, i32 0, i32 0 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.4023, i64 5, i64 0 }, ptr %a161 + %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) + %t163 = icmp ne i32 %t162, 0 + br label %logic.rend6307 +logic.rend6307: + br label %logic.end6306 +logic.end6306: + %t164 = phi i1 [ true, %logic.from6304 ], [ %t163, %logic.rend6307 ] + br label %logic.from6308 +logic.from6308: + br i1 %t164, label %logic.rhs6309, label %logic.end6310 +logic.rhs6309: + %t165 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t165, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.4024, i64 2, i64 0 }, ptr %a167 + %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) + %t169 = icmp ne i32 %t168, 0 + br label %logic.from6311 +logic.from6311: + br i1 %t169, label %logic.end6313, label %logic.rhs6312 +logic.rhs6312: + %t170 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.4025, i64 2, i64 0 }, ptr %a172 + %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) + %t174 = icmp ne i32 %t173, 0 + br label %logic.rend6314 +logic.rend6314: + br label %logic.end6313 +logic.end6313: + %t175 = phi i1 [ true, %logic.from6311 ], [ %t174, %logic.rend6314 ] + br label %logic.rend6315 +logic.rend6315: + br label %logic.end6310 +logic.end6310: + %t176 = phi i1 [ false, %logic.from6308 ], [ %t175, %logic.rend6315 ] + br i1 %t176, label %then6316, label %endif6318 +then6316: + %t177 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t177, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.4026, i64 31, i64 0 }, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a178 + %t182 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t181, ptr %a25 + store { ptr, i64, i64 } %t182, ptr %a183 + call void @finch_str_drop(ptr %a183) + br label %endif6318 +endif6318: + %t184 = load ptr, ptr %a1 + %t185 = load %S.ast.Node, ptr %a5 + %t186 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.fail(ptr %t184, %S.ast.Node %t185, { ptr, i64, i64 } %t186) + call void @finch_str_drop(ptr %a25) + ret void +} + +define internal i1 @finch.gen.unify(ptr %p0, ptr %p1, ptr %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca ptr, align 16 + %a3 = alloca ptr, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.ast.Type, align 16 + %a61 = alloca %S.ast.Type, align 16 + %a68 = alloca %S.gen.Val, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca %S.ast.Type, align 16 + %a106 = alloca %S.ast.Type, align 16 + %a113 = alloca %S.gen.Val, align 16 + %a142 = alloca %S.ast.Type, align 16 + %a143 = alloca %S.ast.Type, align 16 + %a149 = alloca %S.gen.Val, align 16 + %a178 = alloca %S.ast.Type, align 16 + %a179 = alloca %S.ast.Type, align 16 + %a185 = alloca %S.gen.Val, align 16 + %a207 = alloca %S.ast.Node, align 16 + %a211 = alloca %S.gen.Val, align 16 + %a233 = alloca %S.ast.Node, align 16 + %a237 = alloca %S.gen.Val, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca %S.ast.Type, align 16 + %a276 = alloca %S.gen.Val, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca %S.ast.Type, align 16 + %a304 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store ptr %p1, ptr %a2 + store ptr %p2, ptr %a3 + %t4 = load ptr, ptr %a2 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic6319, label %ok6320 +panic6319: + call void @finch_panic(ptr @.str.4027, i64 3462, ptr @.str.4028) + unreachable +ok6320: + %t6 = getelementptr inbounds %S.gen.Val, ptr %t4, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %t6 + %t8 = load ptr, ptr %a3 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic6321, label %ok6322 +panic6321: + call void @finch_panic(ptr @.str.4029, i64 3462, ptr @.str.4030) + unreachable +ok6322: + %t10 = getelementptr inbounds %S.gen.Val, ptr %t8, i32 0, i32 1 + %t11 = load %S.ast.Type, ptr %t10 + %t12 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t11) + br i1 %t12, label %then6323, label %endif6325 +then6323: + ret i1 true +endif6325: + %t13 = load ptr, ptr %a2 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic6326, label %ok6327 +panic6326: + call void @finch_panic(ptr @.str.4031, i64 3465, ptr @.str.4032) + unreachable +ok6327: + %t15 = getelementptr inbounds %S.gen.Val, ptr %t13, i32 0, i32 1 + %t16 = load %S.ast.Type, ptr %t15 + %t17 = call i1 @finch.gen.isInt(%S.ast.Type %t16) + br label %logic.from6328 +logic.from6328: + br i1 %t17, label %logic.rhs6329, label %logic.end6330 +logic.rhs6329: + %t18 = load ptr, ptr %a3 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic6331, label %ok6332 +panic6331: + call void @finch_panic(ptr @.str.4033, i64 3465, ptr @.str.4034) + unreachable +ok6332: + %t20 = getelementptr inbounds %S.gen.Val, ptr %t18, i32 0, i32 1 + %t21 = load %S.ast.Type, ptr %t20 + %t22 = call i1 @finch.gen.isInt(%S.ast.Type %t21) + br label %logic.rend6333 +logic.rend6333: + br label %logic.end6330 +logic.end6330: + %t23 = phi i1 [ false, %logic.from6328 ], [ %t22, %logic.rend6333 ] + br i1 %t23, label %then6334, label %endif6336 +then6334: + %t24 = load ptr, ptr %a2 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic6337, label %ok6338 +panic6337: + call void @finch_panic(ptr @.str.4035, i64 3468, ptr @.str.4036) + unreachable +ok6338: + %t26 = getelementptr inbounds %S.gen.Val, ptr %t24, i32 0, i32 3 + %t27 = load i1, ptr %t26 + br label %logic.from6339 +logic.from6339: + br i1 %t27, label %logic.rhs6340, label %logic.end6341 +logic.rhs6340: + %t28 = load ptr, ptr %a3 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic6342, label %ok6343 +panic6342: + call void @finch_panic(ptr @.str.4037, i64 3468, ptr @.str.4038) + unreachable +ok6343: + %t30 = getelementptr inbounds %S.gen.Val, ptr %t28, i32 0, i32 3 + %t31 = load i1, ptr %t30 + %t32 = xor i1 %t31, true + br label %logic.rend6344 +logic.rend6344: + br label %logic.end6341 +logic.end6341: + %t33 = phi i1 [ false, %logic.from6339 ], [ %t32, %logic.rend6344 ] + br label %logic.from6345 +logic.from6345: + br i1 %t33, label %logic.rhs6346, label %logic.end6347 +logic.rhs6346: + %t34 = load ptr, ptr %a2 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic6348, label %ok6349 +panic6348: + call void @finch_panic(ptr @.str.4039, i64 3468, ptr @.str.4040) + unreachable +ok6349: + %t36 = getelementptr inbounds %S.gen.Val, ptr %t34, i32 0, i32 0 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = load ptr, ptr %a2 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic6350, label %ok6351 +panic6350: + call void @finch_panic(ptr @.str.4041, i64 3468, ptr @.str.4042) + unreachable +ok6351: + %t40 = getelementptr inbounds %S.gen.Val, ptr %t38, i32 0, i32 1 + %t41 = load %S.ast.Type, ptr %t40 + %t42 = load ptr, ptr %a3 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic6352, label %ok6353 +panic6352: + call void @finch_panic(ptr @.str.4043, i64 3468, ptr @.str.4044) + unreachable +ok6353: + %t44 = getelementptr inbounds %S.gen.Val, ptr %t42, i32 0, i32 1 + %t45 = load %S.ast.Type, ptr %t44 + %t46 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t37, %S.ast.Type %t41, %S.ast.Type %t45) + br label %logic.rend6354 +logic.rend6354: + br label %logic.end6347 +logic.end6347: + %t47 = phi i1 [ false, %logic.from6345 ], [ %t46, %logic.rend6354 ] + br i1 %t47, label %then6355, label %endif6357 +then6355: + %t48 = load ptr, ptr %a2 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic6358, label %ok6359 +panic6358: + call void @finch_panic(ptr @.str.4045, i64 3469, ptr @.str.4046) + unreachable +ok6359: + %t50 = getelementptr inbounds %S.gen.Val, ptr %t48, i32 0, i32 0 + %t51 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } %t51, ptr %a52 + call void @finch_str_copy(ptr %a53, ptr %a52) + %t54 = load { ptr, i64, i64 }, ptr %a53 + %t55 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t54, 0 + %t56 = load ptr, ptr %a3 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic6360, label %ok6361 +panic6360: + call void @finch_panic(ptr @.str.4047, i64 3469, ptr @.str.4048) + unreachable +ok6361: + %t58 = getelementptr inbounds %S.gen.Val, ptr %t56, i32 0, i32 1 + %t59 = load %S.ast.Type, ptr %t58 + store %S.ast.Type %t59, ptr %a60 + call void @finch.copy.S_ast_Type(ptr %a61, ptr %a60) + %t62 = load %S.ast.Type, ptr %a61 + %t63 = insertvalue %S.gen.Val %t55, %S.ast.Type %t62, 1 + %t64 = insertvalue %S.gen.Val %t63, i1 true, 3 + %t65 = load ptr, ptr %a2 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic6362, label %ok6363 +panic6362: + call void @finch_panic(ptr @.str.4049, i64 3469, ptr @.str.4050) + unreachable +ok6363: + %t67 = load %S.gen.Val, ptr %t65 + store %S.gen.Val %t64, ptr %t65 + store %S.gen.Val %t67, ptr %a68 + call void @finch.drop.S_gen_Val(ptr %a68) + ret i1 true +endif6357: + %t69 = load ptr, ptr %a3 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic6364, label %ok6365 +panic6364: + call void @finch_panic(ptr @.str.4051, i64 3472, ptr @.str.4052) + unreachable +ok6365: + %t71 = getelementptr inbounds %S.gen.Val, ptr %t69, i32 0, i32 3 + %t72 = load i1, ptr %t71 + br label %logic.from6366 +logic.from6366: + br i1 %t72, label %logic.rhs6367, label %logic.end6368 +logic.rhs6367: + %t73 = load ptr, ptr %a2 + %t74 = icmp eq ptr %t73, null + br i1 %t74, label %panic6369, label %ok6370 +panic6369: + call void @finch_panic(ptr @.str.4053, i64 3472, ptr @.str.4054) + unreachable +ok6370: + %t75 = getelementptr inbounds %S.gen.Val, ptr %t73, i32 0, i32 3 + %t76 = load i1, ptr %t75 + %t77 = xor i1 %t76, true + br label %logic.rend6371 +logic.rend6371: + br label %logic.end6368 +logic.end6368: + %t78 = phi i1 [ false, %logic.from6366 ], [ %t77, %logic.rend6371 ] + br label %logic.from6372 +logic.from6372: + br i1 %t78, label %logic.rhs6373, label %logic.end6374 +logic.rhs6373: + %t79 = load ptr, ptr %a3 + %t80 = icmp eq ptr %t79, null + br i1 %t80, label %panic6375, label %ok6376 +panic6375: + call void @finch_panic(ptr @.str.4055, i64 3472, ptr @.str.4056) + unreachable +ok6376: + %t81 = getelementptr inbounds %S.gen.Val, ptr %t79, i32 0, i32 0 + %t82 = load { ptr, i64, i64 }, ptr %t81 + %t83 = load ptr, ptr %a3 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic6377, label %ok6378 +panic6377: + call void @finch_panic(ptr @.str.4057, i64 3472, ptr @.str.4058) + unreachable +ok6378: + %t85 = getelementptr inbounds %S.gen.Val, ptr %t83, i32 0, i32 1 + %t86 = load %S.ast.Type, ptr %t85 + %t87 = load ptr, ptr %a2 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic6379, label %ok6380 +panic6379: + call void @finch_panic(ptr @.str.4059, i64 3472, ptr @.str.4060) + unreachable +ok6380: + %t89 = getelementptr inbounds %S.gen.Val, ptr %t87, i32 0, i32 1 + %t90 = load %S.ast.Type, ptr %t89 + %t91 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t82, %S.ast.Type %t86, %S.ast.Type %t90) + br label %logic.rend6381 +logic.rend6381: + br label %logic.end6374 +logic.end6374: + %t92 = phi i1 [ false, %logic.from6372 ], [ %t91, %logic.rend6381 ] + br i1 %t92, label %then6382, label %endif6384 +then6382: + %t93 = load ptr, ptr %a3 + %t94 = icmp eq ptr %t93, null + br i1 %t94, label %panic6385, label %ok6386 +panic6385: + call void @finch_panic(ptr @.str.4061, i64 3473, ptr @.str.4062) + unreachable +ok6386: + %t95 = getelementptr inbounds %S.gen.Val, ptr %t93, i32 0, i32 0 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_copy(ptr %a98, ptr %a97) + %t99 = load { ptr, i64, i64 }, ptr %a98 + %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 + %t101 = load ptr, ptr %a2 + %t102 = icmp eq ptr %t101, null + br i1 %t102, label %panic6387, label %ok6388 +panic6387: + call void @finch_panic(ptr @.str.4063, i64 3473, ptr @.str.4064) + unreachable +ok6388: + %t103 = getelementptr inbounds %S.gen.Val, ptr %t101, i32 0, i32 1 + %t104 = load %S.ast.Type, ptr %t103 + store %S.ast.Type %t104, ptr %a105 + call void @finch.copy.S_ast_Type(ptr %a106, ptr %a105) + %t107 = load %S.ast.Type, ptr %a106 + %t108 = insertvalue %S.gen.Val %t100, %S.ast.Type %t107, 1 + %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 + %t110 = load ptr, ptr %a3 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic6389, label %ok6390 +panic6389: + call void @finch_panic(ptr @.str.4065, i64 3473, ptr @.str.4066) + unreachable +ok6390: + %t112 = load %S.gen.Val, ptr %t110 + store %S.gen.Val %t109, ptr %t110 + store %S.gen.Val %t112, ptr %a113 + call void @finch.drop.S_gen_Val(ptr %a113) + ret i1 true +endif6384: + %t114 = load ptr, ptr %a2 + %t115 = icmp eq ptr %t114, null + br i1 %t115, label %panic6391, label %ok6392 +panic6391: + call void @finch_panic(ptr @.str.4067, i64 3476, ptr @.str.4068) + unreachable +ok6392: + %t116 = getelementptr inbounds %S.gen.Val, ptr %t114, i32 0, i32 1 + %t117 = load %S.ast.Type, ptr %t116 + %t118 = load ptr, ptr %a3 + %t119 = icmp eq ptr %t118, null + br i1 %t119, label %panic6393, label %ok6394 +panic6393: + call void @finch_panic(ptr @.str.4069, i64 3476, ptr @.str.4070) + unreachable +ok6394: + %t120 = getelementptr inbounds %S.gen.Val, ptr %t118, i32 0, i32 1 + %t121 = load %S.ast.Type, ptr %t120 + %t122 = call i1 @finch.gen.widens(%S.ast.Type %t117, %S.ast.Type %t121) + br i1 %t122, label %then6395, label %endif6397 +then6395: + %t123 = load ptr, ptr %a1 + %t124 = load ptr, ptr %a2 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic6398, label %ok6399 +panic6398: + call void @finch_panic(ptr @.str.4071, i64 3477, ptr @.str.4072) + unreachable +ok6399: + %t126 = getelementptr inbounds %S.gen.Val, ptr %t124, i32 0, i32 0 + %t127 = load { ptr, i64, i64 }, ptr %t126 + %t128 = load ptr, ptr %a2 + %t129 = icmp eq ptr %t128, null + br i1 %t129, label %panic6400, label %ok6401 +panic6400: + call void @finch_panic(ptr @.str.4073, i64 3477, ptr @.str.4074) + unreachable +ok6401: + %t130 = getelementptr inbounds %S.gen.Val, ptr %t128, i32 0, i32 1 + %t131 = load %S.ast.Type, ptr %t130 + %t132 = load ptr, ptr %a3 + %t133 = icmp eq ptr %t132, null + br i1 %t133, label %panic6402, label %ok6403 +panic6402: + call void @finch_panic(ptr @.str.4075, i64 3477, ptr @.str.4076) + unreachable +ok6403: + %t134 = getelementptr inbounds %S.gen.Val, ptr %t132, i32 0, i32 1 + %t135 = load %S.ast.Type, ptr %t134 + %t136 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t123, { ptr, i64, i64 } %t127, %S.ast.Type %t131, %S.ast.Type %t135) + %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t136, 0 + %t138 = load ptr, ptr %a3 + %t139 = icmp eq ptr %t138, null + br i1 %t139, label %panic6404, label %ok6405 +panic6404: + call void @finch_panic(ptr @.str.4077, i64 3477, ptr @.str.4078) + unreachable +ok6405: + %t140 = getelementptr inbounds %S.gen.Val, ptr %t138, i32 0, i32 1 + %t141 = load %S.ast.Type, ptr %t140 + store %S.ast.Type %t141, ptr %a142 + call void @finch.copy.S_ast_Type(ptr %a143, ptr %a142) + %t144 = load %S.ast.Type, ptr %a143 + %t145 = insertvalue %S.gen.Val %t137, %S.ast.Type %t144, 1 + %t146 = load ptr, ptr %a2 + %t147 = icmp eq ptr %t146, null + br i1 %t147, label %panic6406, label %ok6407 +panic6406: + call void @finch_panic(ptr @.str.4079, i64 3477, ptr @.str.4080) + unreachable +ok6407: + %t148 = load %S.gen.Val, ptr %t146 + store %S.gen.Val %t145, ptr %t146 + store %S.gen.Val %t148, ptr %a149 + call void @finch.drop.S_gen_Val(ptr %a149) + ret i1 true +endif6397: + %t150 = load ptr, ptr %a3 + %t151 = icmp eq ptr %t150, null + br i1 %t151, label %panic6408, label %ok6409 +panic6408: + call void @finch_panic(ptr @.str.4081, i64 3480, ptr @.str.4082) + unreachable +ok6409: + %t152 = getelementptr inbounds %S.gen.Val, ptr %t150, i32 0, i32 1 + %t153 = load %S.ast.Type, ptr %t152 + %t154 = load ptr, ptr %a2 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic6410, label %ok6411 +panic6410: + call void @finch_panic(ptr @.str.4083, i64 3480, ptr @.str.4084) + unreachable +ok6411: + %t156 = getelementptr inbounds %S.gen.Val, ptr %t154, i32 0, i32 1 + %t157 = load %S.ast.Type, ptr %t156 + %t158 = call i1 @finch.gen.widens(%S.ast.Type %t153, %S.ast.Type %t157) + br i1 %t158, label %then6412, label %endif6414 +then6412: + %t159 = load ptr, ptr %a1 + %t160 = load ptr, ptr %a3 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic6415, label %ok6416 +panic6415: + call void @finch_panic(ptr @.str.4085, i64 3481, ptr @.str.4086) + unreachable +ok6416: + %t162 = getelementptr inbounds %S.gen.Val, ptr %t160, i32 0, i32 0 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = load ptr, ptr %a3 + %t165 = icmp eq ptr %t164, null + br i1 %t165, label %panic6417, label %ok6418 +panic6417: + call void @finch_panic(ptr @.str.4087, i64 3481, ptr @.str.4088) + unreachable +ok6418: + %t166 = getelementptr inbounds %S.gen.Val, ptr %t164, i32 0, i32 1 + %t167 = load %S.ast.Type, ptr %t166 + %t168 = load ptr, ptr %a2 + %t169 = icmp eq ptr %t168, null + br i1 %t169, label %panic6419, label %ok6420 +panic6419: + call void @finch_panic(ptr @.str.4089, i64 3481, ptr @.str.4090) + unreachable +ok6420: + %t170 = getelementptr inbounds %S.gen.Val, ptr %t168, i32 0, i32 1 + %t171 = load %S.ast.Type, ptr %t170 + %t172 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t159, { ptr, i64, i64 } %t163, %S.ast.Type %t167, %S.ast.Type %t171) + %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 + %t174 = load ptr, ptr %a2 + %t175 = icmp eq ptr %t174, null + br i1 %t175, label %panic6421, label %ok6422 +panic6421: + call void @finch_panic(ptr @.str.4091, i64 3481, ptr @.str.4092) + unreachable +ok6422: + %t176 = getelementptr inbounds %S.gen.Val, ptr %t174, i32 0, i32 1 + %t177 = load %S.ast.Type, ptr %t176 + store %S.ast.Type %t177, ptr %a178 + call void @finch.copy.S_ast_Type(ptr %a179, ptr %a178) + %t180 = load %S.ast.Type, ptr %a179 + %t181 = insertvalue %S.gen.Val %t173, %S.ast.Type %t180, 1 + %t182 = load ptr, ptr %a3 + %t183 = icmp eq ptr %t182, null + br i1 %t183, label %panic6423, label %ok6424 +panic6423: + call void @finch_panic(ptr @.str.4093, i64 3481, ptr @.str.4094) + unreachable +ok6424: + %t184 = load %S.gen.Val, ptr %t182 + store %S.gen.Val %t181, ptr %t182 + store %S.gen.Val %t184, ptr %a185 + call void @finch.drop.S_gen_Val(ptr %a185) + ret i1 true +endif6414: + ret i1 false +endif6336: + %t186 = load ptr, ptr %a2 + %t187 = icmp eq ptr %t186, null + br i1 %t187, label %panic6425, label %ok6426 +panic6425: + call void @finch_panic(ptr @.str.4095, i64 3486, ptr @.str.4096) + unreachable +ok6426: + %t188 = getelementptr inbounds %S.gen.Val, ptr %t186, i32 0, i32 1 + %t189 = load %S.ast.Type, ptr %t188 + %t190 = call i1 @finch.gen.isInt(%S.ast.Type %t189) + br label %logic.from6427 +logic.from6427: + br i1 %t190, label %logic.rhs6428, label %logic.end6429 +logic.rhs6428: + %t191 = load ptr, ptr %a3 + %t192 = icmp eq ptr %t191, null + br i1 %t192, label %panic6430, label %ok6431 +panic6430: + call void @finch_panic(ptr @.str.4097, i64 3486, ptr @.str.4098) + unreachable +ok6431: + %t193 = getelementptr inbounds %S.gen.Val, ptr %t191, i32 0, i32 1 + %t194 = load %S.ast.Type, ptr %t193 + %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) + br label %logic.rend6432 +logic.rend6432: + br label %logic.end6429 +logic.end6429: + %t196 = phi i1 [ false, %logic.from6427 ], [ %t195, %logic.rend6432 ] + br i1 %t196, label %then6433, label %endif6435 +then6433: + %t197 = load ptr, ptr %a1 + %t198 = load ptr, ptr %a2 + %t199 = icmp eq ptr %t198, null + br i1 %t199, label %panic6436, label %ok6437 +panic6436: + call void @finch_panic(ptr @.str.4099, i64 3487, ptr @.str.4100) + unreachable +ok6437: + %t200 = load %S.gen.Val, ptr %t198 + %t201 = load ptr, ptr %a3 + %t202 = icmp eq ptr %t201, null + br i1 %t202, label %panic6438, label %ok6439 +panic6438: + call void @finch_panic(ptr @.str.4101, i64 3487, ptr @.str.4102) + unreachable +ok6439: + %t203 = getelementptr inbounds %S.gen.Val, ptr %t201, i32 0, i32 1 + %t204 = load %S.ast.Type, ptr %t203 + %t205 = call %S.ast.Node @finch.gen.Node0() + %t206 = call %S.gen.Val @finch.gen.coerce(ptr %t197, %S.gen.Val %t200, %S.ast.Type %t204, %S.ast.Node %t205, { ptr, i64, i64 } { ptr @.str.4103, i64 0, i64 0 }) + store %S.ast.Node %t205, ptr %a207 + call void @finch.drop.S_ast_Node(ptr %a207) + %t208 = load ptr, ptr %a2 + %t209 = icmp eq ptr %t208, null + br i1 %t209, label %panic6440, label %ok6441 +panic6440: + call void @finch_panic(ptr @.str.4104, i64 3487, ptr @.str.4105) + unreachable +ok6441: + %t210 = load %S.gen.Val, ptr %t208 + store %S.gen.Val %t206, ptr %t208 + store %S.gen.Val %t210, ptr %a211 + call void @finch.drop.S_gen_Val(ptr %a211) + ret i1 true +endif6435: + %t212 = load ptr, ptr %a2 + %t213 = icmp eq ptr %t212, null + br i1 %t213, label %panic6442, label %ok6443 +panic6442: + call void @finch_panic(ptr @.str.4106, i64 3490, ptr @.str.4107) + unreachable +ok6443: + %t214 = getelementptr inbounds %S.gen.Val, ptr %t212, i32 0, i32 1 + %t215 = load %S.ast.Type, ptr %t214 + %t216 = call i1 @finch.gen.isFloat(%S.ast.Type %t215) + br label %logic.from6444 +logic.from6444: + br i1 %t216, label %logic.rhs6445, label %logic.end6446 +logic.rhs6445: + %t217 = load ptr, ptr %a3 + %t218 = icmp eq ptr %t217, null + br i1 %t218, label %panic6447, label %ok6448 +panic6447: + call void @finch_panic(ptr @.str.4108, i64 3490, ptr @.str.4109) + unreachable +ok6448: + %t219 = getelementptr inbounds %S.gen.Val, ptr %t217, i32 0, i32 1 + %t220 = load %S.ast.Type, ptr %t219 + %t221 = call i1 @finch.gen.isInt(%S.ast.Type %t220) + br label %logic.rend6449 +logic.rend6449: + br label %logic.end6446 +logic.end6446: + %t222 = phi i1 [ false, %logic.from6444 ], [ %t221, %logic.rend6449 ] + br i1 %t222, label %then6450, label %endif6452 +then6450: + %t223 = load ptr, ptr %a1 + %t224 = load ptr, ptr %a3 + %t225 = icmp eq ptr %t224, null + br i1 %t225, label %panic6453, label %ok6454 +panic6453: + call void @finch_panic(ptr @.str.4110, i64 3491, ptr @.str.4111) + unreachable +ok6454: + %t226 = load %S.gen.Val, ptr %t224 + %t227 = load ptr, ptr %a2 + %t228 = icmp eq ptr %t227, null + br i1 %t228, label %panic6455, label %ok6456 +panic6455: + call void @finch_panic(ptr @.str.4112, i64 3491, ptr @.str.4113) + unreachable +ok6456: + %t229 = getelementptr inbounds %S.gen.Val, ptr %t227, i32 0, i32 1 + %t230 = load %S.ast.Type, ptr %t229 + %t231 = call %S.ast.Node @finch.gen.Node0() + %t232 = call %S.gen.Val @finch.gen.coerce(ptr %t223, %S.gen.Val %t226, %S.ast.Type %t230, %S.ast.Node %t231, { ptr, i64, i64 } { ptr @.str.4114, i64 0, i64 0 }) + store %S.ast.Node %t231, ptr %a233 + call void @finch.drop.S_ast_Node(ptr %a233) + %t234 = load ptr, ptr %a3 + %t235 = icmp eq ptr %t234, null + br i1 %t235, label %panic6457, label %ok6458 +panic6457: + call void @finch_panic(ptr @.str.4115, i64 3491, ptr @.str.4116) + unreachable +ok6458: + %t236 = load %S.gen.Val, ptr %t234 + store %S.gen.Val %t232, ptr %t234 + store %S.gen.Val %t236, ptr %a237 + call void @finch.drop.S_gen_Val(ptr %a237) + ret i1 true +endif6452: + %t238 = load ptr, ptr %a2 + %t239 = icmp eq ptr %t238, null + br i1 %t239, label %panic6459, label %ok6460 +panic6459: + call void @finch_panic(ptr @.str.4117, i64 3494, ptr @.str.4118) + unreachable +ok6460: + %t240 = getelementptr inbounds %S.gen.Val, ptr %t238, i32 0, i32 1 + %t241 = load %S.ast.Type, ptr %t240 + %t242 = call i1 @finch.gen.isFloat(%S.ast.Type %t241) + br label %logic.from6461 +logic.from6461: + br i1 %t242, label %logic.rhs6462, label %logic.end6463 +logic.rhs6462: + %t243 = load ptr, ptr %a3 + %t244 = icmp eq ptr %t243, null + br i1 %t244, label %panic6464, label %ok6465 +panic6464: + call void @finch_panic(ptr @.str.4119, i64 3494, ptr @.str.4120) + unreachable +ok6465: + %t245 = getelementptr inbounds %S.gen.Val, ptr %t243, i32 0, i32 1 + %t246 = load %S.ast.Type, ptr %t245 + %t247 = call i1 @finch.gen.isFloat(%S.ast.Type %t246) + br label %logic.rend6466 +logic.rend6466: + br label %logic.end6463 +logic.end6463: + %t248 = phi i1 [ false, %logic.from6461 ], [ %t247, %logic.rend6466 ] + br i1 %t248, label %then6467, label %endif6469 +then6467: + %t249 = load ptr, ptr %a2 + %t250 = icmp eq ptr %t249, null + br i1 %t250, label %panic6470, label %ok6471 +panic6470: + call void @finch_panic(ptr @.str.4121, i64 3495, ptr @.str.4122) + unreachable +ok6471: + %t251 = getelementptr inbounds %S.gen.Val, ptr %t249, i32 0, i32 1 + %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.4123, i64 3, i64 0 }, ptr %a255 + %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) + %t257 = icmp ne i32 %t256, 0 + br i1 %t257, label %then6472, label %endif6474 +then6472: + %t258 = load ptr, ptr %a1 + %t259 = load ptr, ptr %a2 + %t260 = icmp eq ptr %t259, null + br i1 %t260, label %panic6475, label %ok6476 +panic6475: + call void @finch_panic(ptr @.str.4124, i64 3496, ptr @.str.4125) + unreachable +ok6476: + %t261 = getelementptr inbounds %S.gen.Val, ptr %t259, i32 0, i32 0 + %t262 = load { ptr, i64, i64 }, ptr %t261 + %t263 = load ptr, ptr %a2 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic6477, label %ok6478 +panic6477: + call void @finch_panic(ptr @.str.4126, i64 3496, ptr @.str.4127) + unreachable +ok6478: + %t265 = getelementptr inbounds %S.gen.Val, ptr %t263, i32 0, i32 1 + %t266 = load %S.ast.Type, ptr %t265 + %t267 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4128, i64 5, i64 0 }) + %t268 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t258, { ptr, i64, i64 } %t262, %S.ast.Type %t266, %S.ast.Type %t267) + store %S.ast.Type %t267, ptr %a269 + call void @finch.drop.S_ast_Type(ptr %a269) + %t270 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t268, 0 + %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4129, i64 5, i64 0 }) + %t272 = insertvalue %S.gen.Val %t270, %S.ast.Type %t271, 1 + %t273 = load ptr, ptr %a2 + %t274 = icmp eq ptr %t273, null + br i1 %t274, label %panic6479, label %ok6480 +panic6479: + call void @finch_panic(ptr @.str.4130, i64 3496, ptr @.str.4131) + unreachable +ok6480: + %t275 = load %S.gen.Val, ptr %t273 + store %S.gen.Val %t272, ptr %t273 + store %S.gen.Val %t275, ptr %a276 + call void @finch.drop.S_gen_Val(ptr %a276) + br label %endif6474 +endif6474: + %t277 = load ptr, ptr %a3 + %t278 = icmp eq ptr %t277, null + br i1 %t278, label %panic6481, label %ok6482 +panic6481: + call void @finch_panic(ptr @.str.4132, i64 3498, ptr @.str.4133) + unreachable +ok6482: + %t279 = getelementptr inbounds %S.gen.Val, ptr %t277, i32 0, i32 1 + %t280 = getelementptr inbounds %S.ast.Type, ptr %t279, i32 0, i32 0 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.4134, i64 3, i64 0 }, ptr %a283 + %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) + %t285 = icmp ne i32 %t284, 0 + br i1 %t285, label %then6483, label %endif6485 +then6483: + %t286 = load ptr, ptr %a1 + %t287 = load ptr, ptr %a3 + %t288 = icmp eq ptr %t287, null + br i1 %t288, label %panic6486, label %ok6487 +panic6486: + call void @finch_panic(ptr @.str.4135, i64 3499, ptr @.str.4136) + unreachable +ok6487: + %t289 = getelementptr inbounds %S.gen.Val, ptr %t287, i32 0, i32 0 + %t290 = load { ptr, i64, i64 }, ptr %t289 + %t291 = load ptr, ptr %a3 + %t292 = icmp eq ptr %t291, null + br i1 %t292, label %panic6488, label %ok6489 +panic6488: + call void @finch_panic(ptr @.str.4137, i64 3499, ptr @.str.4138) + unreachable +ok6489: + %t293 = getelementptr inbounds %S.gen.Val, ptr %t291, i32 0, i32 1 + %t294 = load %S.ast.Type, ptr %t293 + %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4139, i64 5, i64 0 }) + %t296 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t286, { ptr, i64, i64 } %t290, %S.ast.Type %t294, %S.ast.Type %t295) + store %S.ast.Type %t295, ptr %a297 + call void @finch.drop.S_ast_Type(ptr %a297) + %t298 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t296, 0 + %t299 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4140, i64 5, i64 0 }) + %t300 = insertvalue %S.gen.Val %t298, %S.ast.Type %t299, 1 + %t301 = load ptr, ptr %a3 + %t302 = icmp eq ptr %t301, null + br i1 %t302, label %panic6490, label %ok6491 +panic6490: + call void @finch_panic(ptr @.str.4141, i64 3499, ptr @.str.4142) + unreachable +ok6491: + %t303 = load %S.gen.Val, ptr %t301 + store %S.gen.Val %t300, ptr %t301 + store %S.gen.Val %t303, ptr %a304 + call void @finch.drop.S_gen_Val(ptr %a304) + br label %endif6485 +endif6485: + ret i1 true +endif6469: + ret i1 false +} + +define internal %S.ast.Node @finch.gen.Node0() { +entry: + + ret %S.ast.Node zeroinitializer +} + +define internal %S.gen.Val @finch.gen.arith(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.gen.Val, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a6 = alloca %S.gen.Val, align 16 + %a7 = alloca %S.gen.Val, align 16 + %a8 = alloca %S.gen.Val, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca i64, align 16 + %a155 = alloca i64, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca i64, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca %S.ast.Type, align 16 + %a280 = alloca %S.ast.Type, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca i64, align 16 + %a313 = alloca i64, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca i64, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca %S.ast.Type, align 16 + %a384 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.gen.Val %p2, ptr %a3 + call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) + %t5 = load %S.gen.Val, ptr %a4 + store %S.gen.Val %t5, ptr %a6 + store %S.gen.Val %p3, ptr %a7 + call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) + %t9 = load %S.gen.Val, ptr %a8 + store %S.gen.Val %t9, ptr %a10 + store %S.ast.Node %p4, ptr %a11 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.4143, i64 1, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from6492 +logic.from6492: + br i1 %t16, label %logic.rhs6493, label %logic.end6494 +logic.rhs6493: + %t17 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t18 = getelementptr inbounds %S.ast.Type, ptr %t17, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.4144, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend6495 +logic.rend6495: + br label %logic.end6494 +logic.end6494: + %t24 = phi i1 [ false, %logic.from6492 ], [ %t23, %logic.rend6495 ] + br label %logic.from6496 +logic.from6496: + br i1 %t24, label %logic.rhs6497, label %logic.end6498 +logic.rhs6497: + %t25 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t26 = getelementptr inbounds %S.ast.Type, ptr %t25, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.4145, i64 3, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend6499 +logic.rend6499: + br label %logic.end6498 +logic.end6498: + %t32 = phi i1 [ false, %logic.from6496 ], [ %t31, %logic.rend6499 ] + br i1 %t32, label %then6500, label %endif6502 +then6500: + %t33 = load ptr, ptr %a1 + %t34 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t33, { ptr, i64, i64 } { ptr @.str.4146, i64 17, i64 0 }) + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = load ptr, ptr %a1 + %t37 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.4147, i64 32, i64 0 }, ptr %a39 + store { ptr, i64, i64 } %t37, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.4148, i64 6, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t41, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = load ptr, ptr %a1 + %t48 = load %S.gen.Val, ptr %a6 + %t49 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t47, %S.gen.Val %t48) + store { ptr, i64, i64 } %t46, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t46, ptr %a53 + call void @finch_str_drop(ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.4149, i64 6, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load ptr, ptr %a1 + %t62 = load %S.gen.Val, ptr %a10 + %t63 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t61, %S.gen.Val %t62) + store { ptr, i64, i64 } %t60, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t60, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.4150, i64 1, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + call void @finch.gen.emit(ptr %t36, { ptr, i64, i64 } %t74) + store { ptr, i64, i64 } %t74, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load ptr, ptr %a1 + %t77 = load %S.gen.Val, ptr %a6 + call void @finch.gen.release(ptr %t76, %S.gen.Val %t77) + %t78 = load ptr, ptr %a1 + %t79 = load %S.gen.Val, ptr %a10 + call void @finch.gen.release(ptr %t78, %S.gen.Val %t79) + %t80 = load ptr, ptr %a1 + %t81 = load { ptr, i64, i64 }, ptr %a35 + %t82 = call { ptr, i64, i64 } @finch.gen.load(ptr %t80, { ptr, i64, i64 } { ptr @.str.4151, i64 17, i64 0 }, { ptr, i64, i64 } %t81) + %t83 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t82, 0 + %t84 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4152, i64 3, i64 0 }) + %t85 = insertvalue %S.gen.Val %t83, %S.ast.Type %t84, 1 + %t86 = insertvalue %S.gen.Val %t85, i1 true, 2 + call void @finch_str_drop(ptr %a35) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t86 +endif6502: + %t87 = load ptr, ptr %a1 + %t88 = call i1 @finch.gen.unify(ptr %t87, ptr %a6, ptr %a10) + %t89 = xor i1 %t88, true + br i1 %t89, label %then6503, label %endif6505 +then6503: + %t90 = load ptr, ptr %a1 + %t91 = load { ptr, i64, i64 }, ptr %a2 + %t92 = load %S.gen.Val, ptr %a6 + %t93 = load %S.gen.Val, ptr %a10 + %t94 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t90, { ptr, i64, i64 } %t91, %S.gen.Val %t92, %S.gen.Val %t93, %S.ast.Node %t94) + br label %endif6505 +endif6505: + %t95 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t96 = load %S.ast.Type, ptr %t95 + %t97 = call i1 @finch.gen.isInt(%S.ast.Type %t96) + br i1 %t97, label %then6506, label %endif6508 +then6506: + %t98 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t99 = call ptr @finch_alloc(i64 %t98) + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 0 + store { ptr, i64, i64 } { ptr @.str.4153, i64 1, i64 0 }, ptr %t100 + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 1 + store { ptr, i64, i64 } { ptr @.str.4154, i64 1, i64 0 }, ptr %t101 + %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 2 + store { ptr, i64, i64 } { ptr @.str.4155, i64 1, i64 0 }, ptr %t102 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 3 + store { ptr, i64, i64 } { ptr @.str.4156, i64 1, i64 0 }, ptr %t103 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 4 + store { ptr, i64, i64 } { ptr @.str.4157, i64 1, i64 0 }, ptr %t104 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 5 + store { ptr, i64, i64 } { ptr @.str.4158, i64 1, i64 0 }, ptr %t105 + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 6 + store { ptr, i64, i64 } { ptr @.str.4159, i64 1, i64 0 }, ptr %t106 + %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 7 + store { ptr, i64, i64 } { ptr @.str.4160, i64 1, i64 0 }, ptr %t107 + %t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 8 + store { ptr, i64, i64 } { ptr @.str.4161, i64 2, i64 0 }, ptr %t108 + %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 9 + store { ptr, i64, i64 } { ptr @.str.4162, i64 2, i64 0 }, ptr %t109 + %t110 = insertvalue { ptr, i64, i64 } undef, ptr %t99, 0 + %t111 = insertvalue { ptr, i64, i64 } %t110, i64 10, 1 + %t112 = insertvalue { ptr, i64, i64 } %t111, i64 10, 2 + store { ptr, i64, i64 } %t112, ptr %a113 + %t114 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t115 = call ptr @finch_alloc(i64 %t114) + %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 0 + store { ptr, i64, i64 } { ptr @.str.4163, i64 3, i64 0 }, ptr %t116 + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 1 + store { ptr, i64, i64 } { ptr @.str.4164, i64 3, i64 0 }, ptr %t117 + %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 2 + store { ptr, i64, i64 } { ptr @.str.4165, i64 3, i64 0 }, ptr %t118 + %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 3 + store { ptr, i64, i64 } { ptr @.str.4166, i64 4, i64 0 }, ptr %t119 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 4 + store { ptr, i64, i64 } { ptr @.str.4167, i64 4, i64 0 }, ptr %t120 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 5 + store { ptr, i64, i64 } { ptr @.str.4168, i64 3, i64 0 }, ptr %t121 + %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 6 + store { ptr, i64, i64 } { ptr @.str.4169, i64 2, i64 0 }, ptr %t122 + %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 7 + store { ptr, i64, i64 } { ptr @.str.4170, i64 3, i64 0 }, ptr %t123 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 8 + store { ptr, i64, i64 } { ptr @.str.4171, i64 3, i64 0 }, ptr %t124 + %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 9 + store { ptr, i64, i64 } { ptr @.str.4172, i64 4, i64 0 }, ptr %t125 + %t126 = insertvalue { ptr, i64, i64 } undef, ptr %t115, 0 + %t127 = insertvalue { ptr, i64, i64 } %t126, i64 10, 1 + %t128 = insertvalue { ptr, i64, i64 } %t127, i64 10, 2 + store { ptr, i64, i64 } %t128, ptr %a129 + %t130 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t131 = load %S.ast.Type, ptr %t130 + %t132 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t131) + br i1 %t132, label %then6509, label %endif6511 +then6509: + %t133 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t134 = call ptr @finch_alloc(i64 %t133) + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 0 + store { ptr, i64, i64 } { ptr @.str.4173, i64 3, i64 0 }, ptr %t135 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 1 + store { ptr, i64, i64 } { ptr @.str.4174, i64 3, i64 0 }, ptr %t136 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 2 + store { ptr, i64, i64 } { ptr @.str.4175, i64 3, i64 0 }, ptr %t137 + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 3 + store { ptr, i64, i64 } { ptr @.str.4176, i64 4, i64 0 }, ptr %t138 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 4 + store { ptr, i64, i64 } { ptr @.str.4177, i64 4, i64 0 }, ptr %t139 + %t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 5 + store { ptr, i64, i64 } { ptr @.str.4178, i64 3, i64 0 }, ptr %t140 + %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 6 + store { ptr, i64, i64 } { ptr @.str.4179, i64 2, i64 0 }, ptr %t141 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 7 + store { ptr, i64, i64 } { ptr @.str.4180, i64 3, i64 0 }, ptr %t142 + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 8 + store { ptr, i64, i64 } { ptr @.str.4181, i64 3, i64 0 }, ptr %t143 + %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 9 + store { ptr, i64, i64 } { ptr @.str.4182, i64 4, i64 0 }, ptr %t144 + %t145 = insertvalue { ptr, i64, i64 } undef, ptr %t134, 0 + %t146 = insertvalue { ptr, i64, i64 } %t145, i64 10, 1 + %t147 = insertvalue { ptr, i64, i64 } %t146, i64 10, 2 + %t148 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t147, ptr %a129 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch.drop.arr_str(ptr %a149) + br label %endif6511 +endif6511: + %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t151 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a152 + %t153 = load i64, ptr %t150 + %t154 = load ptr, ptr %a113 + store i64 0, ptr %a155 + br label %find.cond6512 +find.cond6512: + %t156 = load i64, ptr %a155 + %t157 = icmp slt i64 %t156, %t153 + br i1 %t157, label %find.body6513, label %find.end6516 +find.body6513: + %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i64 %t156 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } %t151, ptr %a161 + %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) + %t163 = icmp ne i32 %t162, 0 + br i1 %t163, label %find.hit6514, label %find.next6515 +find.hit6514: + store i64 %t156, ptr %a152 + br label %find.end6516 +find.next6515: + %t164 = add i64 %t156, 1 + store i64 %t164, ptr %a155 + br label %find.cond6512 +find.end6516: + %t165 = load i64, ptr %a152 + store i64 %t165, ptr %a166 + %t167 = load i64, ptr %a166 + %t168 = icmp slt i64 %t167, 0 + br i1 %t168, label %then6517, label %endif6519 +then6517: + %t169 = load ptr, ptr %a1 + %t170 = load { ptr, i64, i64 }, ptr %a2 + %t171 = load %S.gen.Val, ptr %a6 + %t172 = load %S.gen.Val, ptr %a10 + %t173 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t169, { ptr, i64, i64 } %t170, %S.gen.Val %t171, %S.gen.Val %t172, %S.ast.Node %t173) + br label %endif6519 +endif6519: + %t174 = load ptr, ptr %a1 + %t175 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t176 = load %S.ast.Type, ptr %t175 + %t177 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t174, %S.ast.Type %t176) + store { ptr, i64, i64 } %t177, ptr %a178 + %t179 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t179, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.4183, i64 1, i64 0 }, ptr %a181 + %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + br label %logic.from6520 +logic.from6520: + br i1 %t183, label %logic.end6522, label %logic.rhs6521 +logic.rhs6521: + %t184 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } { ptr @.str.4184, i64 1, i64 0 }, ptr %a186 + %t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186) + %t188 = icmp ne i32 %t187, 0 + br label %logic.rend6523 +logic.rend6523: + br label %logic.end6522 +logic.end6522: + %t189 = phi i1 [ true, %logic.from6520 ], [ %t188, %logic.rend6523 ] + br i1 %t189, label %then6524, label %endif6526 +then6524: + %t190 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 + %t191 = load i1, ptr %t190 + br label %logic.from6527 +logic.from6527: + br i1 %t191, label %logic.rhs6528, label %logic.end6529 +logic.rhs6528: + %t192 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + store { ptr, i64, i64 } %t193, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.4185, i64 1, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br label %logic.rend6530 +logic.rend6530: + br label %logic.end6529 +logic.end6529: + %t198 = phi i1 [ false, %logic.from6527 ], [ %t197, %logic.rend6530 ] + br i1 %t198, label %then6531, label %endif6533 +then6531: + %t199 = load ptr, ptr %a1 + %t200 = load %S.ast.Node, ptr %a11 + call void @finch.gen.fail(ptr %t199, %S.ast.Node %t200, { ptr, i64, i64 } { ptr @.str.4186, i64 16, i64 0 }) + br label %endif6533 +endif6533: + %t201 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 + %t202 = load i1, ptr %t201 + %t203 = xor i1 %t202, true + br i1 %t203, label %then6534, label %endif6536 +then6534: + %t204 = load ptr, ptr %a1 + %t205 = load ptr, ptr %a1 + %t206 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.4187, i64 8, i64 0 }, ptr %a208 + store { ptr, i64, i64 } %t206, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a207 + store { ptr, i64, i64 } %t210, ptr %a212 + store { ptr, i64, i64 } { ptr @.str.4188, i64 1, i64 0 }, ptr %a213 + call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) + store { ptr, i64, i64 } %t210, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a211 + %t216 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t215, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t215, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.4189, i64 3, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = call { ptr, i64, i64 } @finch.gen.op(ptr %t205, { ptr, i64, i64 } %t227) + store { ptr, i64, i64 } %t227, ptr %a229 + call void @finch_str_drop(ptr %a229) + %t230 = load %S.ast.Node, ptr %a11 + call void @finch.gen.panicIf(ptr %t204, { ptr, i64, i64 } %t228, { ptr, i64, i64 } { ptr @.str.4190, i64 16, i64 0 }, %S.ast.Node %t230) + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_drop(ptr %a231) + br label %endif6536 +endif6536: + br label %endif6526 +endif6526: + %t232 = load ptr, ptr %a1 + %t233 = load i64, ptr %a166 + %t234 = load { ptr, i64, i64 }, ptr %a129 + %t235 = extractvalue { ptr, i64, i64 } %t234, 1 + %t236 = icmp uge i64 %t233, %t235 + br i1 %t236, label %range6537, label %inrange6538 +range6537: + call void @finch_panic_index(ptr @.str.4191, i64 3540, i64 %t233, i64 %t235) + unreachable +inrange6538: + %t237 = extractvalue { ptr, i64, i64 } %t234, 0 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t233 + %t239 = load { ptr, i64, i64 }, ptr %t238 + store { ptr, i64, i64 } %t239, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.4192, i64 1, i64 0 }, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a240 + %t244 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t243, ptr %a246 + store { ptr, i64, i64 } %t244, ptr %a247 + call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) + store { ptr, i64, i64 } %t243, ptr %a248 + call void @finch_str_drop(ptr %a248) + %t249 = load { ptr, i64, i64 }, ptr %a245 + store { ptr, i64, i64 } %t249, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.4193, i64 1, i64 0 }, ptr %a252 + call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) + store { ptr, i64, i64 } %t249, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a250 + %t255 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t256 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t254, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t254, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t261, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.4194, i64 2, i64 0 }, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t261, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + %t267 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t266, ptr %a270 + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t266, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + %t274 = call { ptr, i64, i64 } @finch.gen.op(ptr %t232, { ptr, i64, i64 } %t273) + store { ptr, i64, i64 } %t273, ptr %a275 + call void @finch_str_drop(ptr %a275) + %t276 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t274, 0 + %t277 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t278 = load %S.ast.Type, ptr %t277 + store %S.ast.Type %t278, ptr %a279 + call void @finch.copy.S_ast_Type(ptr %a280, ptr %a279) + %t281 = load %S.ast.Type, ptr %a280 + %t282 = insertvalue %S.gen.Val %t276, %S.ast.Type %t281, 1 + call void @finch_str_drop(ptr %a178) + call void @finch.drop.arr_str(ptr %a129) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t282 +endif6508: + %t283 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t284 = load %S.ast.Type, ptr %t283 + %t285 = call i1 @finch.gen.isFloat(%S.ast.Type %t284) + br i1 %t285, label %then6539, label %endif6541 +then6539: + %t286 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t287 = call ptr @finch_alloc(i64 %t286) + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 0 + store { ptr, i64, i64 } { ptr @.str.4195, i64 1, i64 0 }, ptr %t288 + %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 1 + store { ptr, i64, i64 } { ptr @.str.4196, i64 1, i64 0 }, ptr %t289 + %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 2 + store { ptr, i64, i64 } { ptr @.str.4197, i64 1, i64 0 }, ptr %t290 + %t291 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 3 + store { ptr, i64, i64 } { ptr @.str.4198, i64 1, i64 0 }, ptr %t291 + %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 4 + store { ptr, i64, i64 } { ptr @.str.4199, i64 1, i64 0 }, ptr %t292 + %t293 = insertvalue { ptr, i64, i64 } undef, ptr %t287, 0 + %t294 = insertvalue { ptr, i64, i64 } %t293, i64 5, 1 + %t295 = insertvalue { ptr, i64, i64 } %t294, i64 5, 2 + store { ptr, i64, i64 } %t295, ptr %a296 + %t297 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t298 = call ptr @finch_alloc(i64 %t297) + %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 0 + store { ptr, i64, i64 } { ptr @.str.4200, i64 4, i64 0 }, ptr %t299 + %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 1 + store { ptr, i64, i64 } { ptr @.str.4201, i64 4, i64 0 }, ptr %t300 + %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 2 + store { ptr, i64, i64 } { ptr @.str.4202, i64 4, i64 0 }, ptr %t301 + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 3 + store { ptr, i64, i64 } { ptr @.str.4203, i64 4, i64 0 }, ptr %t302 + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 4 + store { ptr, i64, i64 } { ptr @.str.4204, i64 4, i64 0 }, ptr %t303 + %t304 = insertvalue { ptr, i64, i64 } undef, ptr %t298, 0 + %t305 = insertvalue { ptr, i64, i64 } %t304, i64 5, 1 + %t306 = insertvalue { ptr, i64, i64 } %t305, i64 5, 2 + store { ptr, i64, i64 } %t306, ptr %a307 + %t308 = getelementptr inbounds { ptr, i64, i64 }, ptr %a296, i32 0, i32 1 + %t309 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a310 + %t311 = load i64, ptr %t308 + %t312 = load ptr, ptr %a296 + store i64 0, ptr %a313 + br label %find.cond6542 +find.cond6542: + %t314 = load i64, ptr %a313 + %t315 = icmp slt i64 %t314, %t311 + br i1 %t315, label %find.body6543, label %find.end6546 +find.body6543: + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t312, i64 %t314 + %t317 = load { ptr, i64, i64 }, ptr %t316 + store { ptr, i64, i64 } %t317, ptr %a318 + store { ptr, i64, i64 } %t309, ptr %a319 + %t320 = call i32 @finch_str_eq(ptr %a318, ptr %a319) + %t321 = icmp ne i32 %t320, 0 + br i1 %t321, label %find.hit6544, label %find.next6545 +find.hit6544: + store i64 %t314, ptr %a310 + br label %find.end6546 +find.next6545: + %t322 = add i64 %t314, 1 + store i64 %t322, ptr %a313 + br label %find.cond6542 +find.end6546: + %t323 = load i64, ptr %a310 + store i64 %t323, ptr %a324 + %t325 = load i64, ptr %a324 + %t326 = icmp slt i64 %t325, 0 + br i1 %t326, label %then6547, label %endif6549 +then6547: + %t327 = load ptr, ptr %a1 + %t328 = load { ptr, i64, i64 }, ptr %a2 + %t329 = load %S.gen.Val, ptr %a6 + %t330 = load %S.gen.Val, ptr %a10 + %t331 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t327, { ptr, i64, i64 } %t328, %S.gen.Val %t329, %S.gen.Val %t330, %S.ast.Node %t331) + br label %endif6549 +endif6549: + %t332 = load ptr, ptr %a1 + %t333 = load i64, ptr %a324 + %t334 = load { ptr, i64, i64 }, ptr %a307 + %t335 = extractvalue { ptr, i64, i64 } %t334, 1 + %t336 = icmp uge i64 %t333, %t335 + br i1 %t336, label %range6550, label %inrange6551 +range6550: + call void @finch_panic_index(ptr @.str.4205, i64 3549, i64 %t333, i64 %t335) + unreachable +inrange6551: + %t337 = extractvalue { ptr, i64, i64 } %t334, 0 + %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t333 + %t339 = load { ptr, i64, i64 }, ptr %t338 + store { ptr, i64, i64 } %t339, ptr %a341 + store { ptr, i64, i64 } { ptr @.str.4206, i64 1, i64 0 }, ptr %a342 + call void @finch_str_concat(ptr %a340, ptr %a341, ptr %a342) + %t343 = load { ptr, i64, i64 }, ptr %a340 + %t344 = load ptr, ptr %a1 + %t345 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t346 = load %S.ast.Type, ptr %t345 + %t347 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t344, %S.ast.Type %t346) + store { ptr, i64, i64 } %t343, ptr %a349 + store { ptr, i64, i64 } %t347, ptr %a350 + call void @finch_str_concat(ptr %a348, ptr %a349, ptr %a350) + store { ptr, i64, i64 } %t343, ptr %a351 + call void @finch_str_drop(ptr %a351) + store { ptr, i64, i64 } %t347, ptr %a352 + call void @finch_str_drop(ptr %a352) + %t353 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t353, ptr %a355 + store { ptr, i64, i64 } { ptr @.str.4207, i64 1, i64 0 }, ptr %a356 + call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356) + store { ptr, i64, i64 } %t353, ptr %a357 + call void @finch_str_drop(ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a354 + %t359 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t360 = load { ptr, i64, i64 }, ptr %t359 + store { ptr, i64, i64 } %t358, ptr %a362 + store { ptr, i64, i64 } %t360, ptr %a363 + call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) + store { ptr, i64, i64 } %t358, ptr %a364 + call void @finch_str_drop(ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a361 + store { ptr, i64, i64 } %t365, ptr %a367 + store { ptr, i64, i64 } { ptr @.str.4208, i64 2, i64 0 }, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + store { ptr, i64, i64 } %t365, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = load { ptr, i64, i64 }, ptr %a366 + %t371 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t372 = load { ptr, i64, i64 }, ptr %t371 + store { ptr, i64, i64 } %t370, ptr %a374 + store { ptr, i64, i64 } %t372, ptr %a375 + call void @finch_str_concat(ptr %a373, ptr %a374, ptr %a375) + store { ptr, i64, i64 } %t370, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a373 + %t378 = call { ptr, i64, i64 } @finch.gen.op(ptr %t332, { ptr, i64, i64 } %t377) + store { ptr, i64, i64 } %t377, ptr %a379 + call void @finch_str_drop(ptr %a379) + %t380 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t378, 0 + %t381 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t382 = load %S.ast.Type, ptr %t381 + store %S.ast.Type %t382, ptr %a383 + call void @finch.copy.S_ast_Type(ptr %a384, ptr %a383) + %t385 = load %S.ast.Type, ptr %a384 + %t386 = insertvalue %S.gen.Val %t380, %S.ast.Type %t385, 1 + call void @finch.drop.arr_str(ptr %a307) + call void @finch.drop.arr_str(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t386 +endif6541: + %t387 = load ptr, ptr %a1 + %t388 = load { ptr, i64, i64 }, ptr %a2 + %t389 = load %S.gen.Val, ptr %a6 + %t390 = load %S.gen.Val, ptr %a10 + %t391 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t387, { ptr, i64, i64 } %t388, %S.gen.Val %t389, %S.gen.Val %t390, %S.ast.Node %t391) + %t392 = load %S.gen.Val, ptr %a6 + call void @finch.drop.S_gen_Val(ptr %a10) + ret %S.gen.Val %t392 +} + +define internal %S.gen.Val @finch.gen.compare(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.gen.Val, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a6 = alloca %S.gen.Val, align 16 + %a7 = alloca %S.gen.Val, align 16 + %a8 = alloca %S.gen.Val, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca i1, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca i64, align 16 + %a330 = alloca i64, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.gen.Val %p2, ptr %a3 + call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) + %t5 = load %S.gen.Val, ptr %a4 + store %S.gen.Val %t5, ptr %a6 + store %S.gen.Val %p3, ptr %a7 + call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) + %t9 = load %S.gen.Val, ptr %a8 + store %S.gen.Val %t9, ptr %a10 + store %S.ast.Node %p4, ptr %a11 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.4209, i64 2, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from6552 +logic.from6552: + br i1 %t16, label %logic.end6554, label %logic.rhs6553 +logic.rhs6553: + %t17 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.4210, i64 2, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + br label %logic.rend6555 +logic.rend6555: + br label %logic.end6554 +logic.end6554: + %t22 = phi i1 [ true, %logic.from6552 ], [ %t21, %logic.rend6555 ] + store i1 %t22, ptr %a23 + %t24 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t25 = getelementptr inbounds %S.ast.Type, ptr %t24, i32 0, i32 0 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.4211, i64 3, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br label %logic.from6556 +logic.from6556: + br i1 %t30, label %logic.end6558, label %logic.rhs6557 +logic.rhs6557: + %t31 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.4212, i64 3, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br label %logic.rend6559 +logic.rend6559: + br label %logic.end6558 +logic.end6558: + %t38 = phi i1 [ true, %logic.from6556 ], [ %t37, %logic.rend6559 ] + br label %logic.from6560 +logic.from6560: + br i1 %t38, label %logic.end6562, label %logic.rhs6561 +logic.rhs6561: + %t39 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t40 = getelementptr inbounds %S.ast.Type, ptr %t39, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.4213, i64 4, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.rend6563 +logic.rend6563: + br label %logic.end6562 +logic.end6562: + %t46 = phi i1 [ true, %logic.from6560 ], [ %t45, %logic.rend6563 ] + br label %logic.from6564 +logic.from6564: + br i1 %t46, label %logic.end6566, label %logic.rhs6565 +logic.rhs6565: + %t47 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t48 = getelementptr inbounds %S.ast.Type, ptr %t47, i32 0, i32 0 + %t49 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.4214, i64 4, i64 0 }, ptr %a51 + %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) + %t53 = icmp ne i32 %t52, 0 + br label %logic.rend6567 +logic.rend6567: + br label %logic.end6566 +logic.end6566: + %t54 = phi i1 [ true, %logic.from6564 ], [ %t53, %logic.rend6567 ] + br i1 %t54, label %then6568, label %endif6570 +then6568: + %t55 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t56 = getelementptr inbounds %S.ast.Type, ptr %t55, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.4215, i64 3, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.from6571 +logic.from6571: + br i1 %t61, label %logic.end6573, label %logic.rhs6572 +logic.rhs6572: + %t62 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t63 = getelementptr inbounds %S.ast.Type, ptr %t62, i32 0, i32 0 + %t64 = load { ptr, i64, i64 }, ptr %t63 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.4216, i64 3, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp ne i32 %t67, 0 + br label %logic.rend6574 +logic.rend6574: + br label %logic.end6573 +logic.end6573: + %t69 = phi i1 [ true, %logic.from6571 ], [ %t68, %logic.rend6574 ] + br i1 %t69, label %then6575, label %endif6577 +then6575: + %t70 = load ptr, ptr %a1 + %t71 = load %S.ast.Node, ptr %a11 + call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } { ptr @.str.4217, i64 59, i64 0 }) + br label %endif6577 +endif6577: + %t72 = load i1, ptr %a23 + %t73 = xor i1 %t72, true + br i1 %t73, label %then6578, label %endif6580 +then6578: + %t74 = load ptr, ptr %a1 + %t75 = load { ptr, i64, i64 }, ptr %a2 + %t76 = load %S.gen.Val, ptr %a6 + %t77 = load %S.gen.Val, ptr %a10 + %t78 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t74, { ptr, i64, i64 } %t75, %S.gen.Val %t76, %S.gen.Val %t77, %S.ast.Node %t78) + br label %endif6580 +endif6580: + store { ptr, i64, i64 } { ptr @.str.4218, i64 2, i64 0 }, ptr %a79 + %t80 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.4219, i64 2, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %then6581, label %endif6583 +then6581: + %t85 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4220, i64 2, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + br label %endif6583 +endif6583: + %t87 = load ptr, ptr %a1 + %t88 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4221, i64 5, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4222, i64 5, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t99 = load { ptr, i64, i64 }, ptr %t98 + store { ptr, i64, i64 } %t97, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t97, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.4223, i64 2, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t111 = load { ptr, i64, i64 }, ptr %t110 + store { ptr, i64, i64 } %t109, ptr %a113 + store { ptr, i64, i64 } %t111, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t109, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a112 + %t117 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t116, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t117, 0 + %t120 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4224, i64 4, i64 0 }) + %t121 = insertvalue %S.gen.Val %t119, %S.ast.Type %t120, 1 + call void @finch_str_drop(ptr %a79) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t121 +endif6570: + %t122 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t123 = getelementptr inbounds %S.ast.Type, ptr %t122, i32 0, i32 0 + %t124 = load { ptr, i64, i64 }, ptr %t123 + store { ptr, i64, i64 } %t124, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.4225, i64 3, i64 0 }, ptr %a126 + %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) + %t128 = icmp ne i32 %t127, 0 + br label %logic.from6584 +logic.from6584: + br i1 %t128, label %logic.rhs6585, label %logic.end6586 +logic.rhs6585: + %t129 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t130 = getelementptr inbounds %S.ast.Type, ptr %t129, i32 0, i32 0 + %t131 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t131, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.4226, i64 3, i64 0 }, ptr %a133 + %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) + %t135 = icmp ne i32 %t134, 0 + br label %logic.rend6587 +logic.rend6587: + br label %logic.end6586 +logic.end6586: + %t136 = phi i1 [ false, %logic.from6584 ], [ %t135, %logic.rend6587 ] + br i1 %t136, label %then6588, label %endif6590 +then6588: + %t137 = load i1, ptr %a23 + br i1 %t137, label %then6591, label %endif6593 +then6591: + %t138 = load ptr, ptr %a1 + %t139 = load ptr, ptr %a1 + %t140 = load %S.gen.Val, ptr %a6 + %t141 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t139, %S.gen.Val %t140) + store { ptr, i64, i64 } { ptr @.str.4227, i64 27, i64 0 }, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.4228, i64 6, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = load ptr, ptr %a1 + %t153 = load %S.gen.Val, ptr %a10 + %t154 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t152, %S.gen.Val %t153) + store { ptr, i64, i64 } %t151, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t151, ptr %a158 + call void @finch_str_drop(ptr %a158) + store { ptr, i64, i64 } %t154, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.4229, i64 1, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + store { ptr, i64, i64 } %t160, ptr %a164 + call void @finch_str_drop(ptr %a164) + %t165 = load { ptr, i64, i64 }, ptr %a161 + %t166 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t165) + store { ptr, i64, i64 } %t165, ptr %a167 + call void @finch_str_drop(ptr %a167) + store { ptr, i64, i64 } %t166, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4230, i64 2, i64 0 }, ptr %a169 + %t170 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.4231, i64 2, i64 0 }, ptr %a172 + %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) + %t174 = icmp ne i32 %t173, 0 + br i1 %t174, label %then6594, label %endif6596 +then6594: + %t175 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4232, i64 2, i64 0 }, ptr %a169 + store { ptr, i64, i64 } %t175, ptr %a176 + call void @finch_str_drop(ptr %a176) + br label %endif6596 +endif6596: + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4233, i64 5, i64 0 }, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.4234, i64 5, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t187, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t187, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load { ptr, i64, i64 }, ptr %a189 + store { ptr, i64, i64 } %t193, ptr %a195 + store { ptr, i64, i64 } { ptr @.str.4235, i64 3, i64 0 }, ptr %a196 + call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) + store { ptr, i64, i64 } %t193, ptr %a197 + call void @finch_str_drop(ptr %a197) + %t198 = load { ptr, i64, i64 }, ptr %a194 + %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t177, { ptr, i64, i64 } %t198) + store { ptr, i64, i64 } %t198, ptr %a200 + call void @finch_str_drop(ptr %a200) + store { ptr, i64, i64 } %t199, ptr %a201 + %t202 = load ptr, ptr %a1 + %t203 = load %S.gen.Val, ptr %a6 + call void @finch.gen.release(ptr %t202, %S.gen.Val %t203) + %t204 = load ptr, ptr %a1 + %t205 = load %S.gen.Val, ptr %a10 + call void @finch.gen.release(ptr %t204, %S.gen.Val %t205) + %t206 = load { ptr, i64, i64 }, ptr %a201 + store { ptr, i64, i64 } %t206, ptr %a207 + call void @finch_str_copy(ptr %a208, ptr %a207) + %t209 = load { ptr, i64, i64 }, ptr %a208 + %t210 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t209, 0 + %t211 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4236, i64 4, i64 0 }) + %t212 = insertvalue %S.gen.Val %t210, %S.ast.Type %t211, 1 + call void @finch_str_drop(ptr %a201) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a168) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t212 +endif6593: + %t213 = load ptr, ptr %a1 + %t214 = load ptr, ptr %a1 + %t215 = load %S.gen.Val, ptr %a6 + %t216 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t214, %S.gen.Val %t215) + store { ptr, i64, i64 } { ptr @.str.4237, i64 28, i64 0 }, ptr %a218 + store { ptr, i64, i64 } %t216, ptr %a219 + call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a217 + store { ptr, i64, i64 } %t221, ptr %a223 + store { ptr, i64, i64 } { ptr @.str.4238, i64 6, i64 0 }, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t221, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load { ptr, i64, i64 }, ptr %a222 + %t227 = load ptr, ptr %a1 + %t228 = load %S.gen.Val, ptr %a10 + %t229 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t227, %S.gen.Val %t228) + store { ptr, i64, i64 } %t226, ptr %a231 + store { ptr, i64, i64 } %t229, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + store { ptr, i64, i64 } %t226, ptr %a233 + call void @finch_str_drop(ptr %a233) + store { ptr, i64, i64 } %t229, ptr %a234 + call void @finch_str_drop(ptr %a234) + %t235 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t235, ptr %a237 + store { ptr, i64, i64 } { ptr @.str.4239, i64 1, i64 0 }, ptr %a238 + call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) + store { ptr, i64, i64 } %t235, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a236 + %t241 = call { ptr, i64, i64 } @finch.gen.op(ptr %t213, { ptr, i64, i64 } %t240) + store { ptr, i64, i64 } %t240, ptr %a242 + call void @finch_str_drop(ptr %a242) + store { ptr, i64, i64 } %t241, ptr %a243 + %t244 = load ptr, ptr %a1 + %t245 = load { ptr, i64, i64 }, ptr %a2 + %t246 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t245, i1 true) + store { ptr, i64, i64 } { ptr @.str.4240, i64 5, i64 0 }, ptr %a248 + store { ptr, i64, i64 } %t246, ptr %a249 + call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) + store { ptr, i64, i64 } %t246, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.4241, i64 5, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + %t257 = load { ptr, i64, i64 }, ptr %a243 + store { ptr, i64, i64 } %t256, ptr %a259 + store { ptr, i64, i64 } %t257, ptr %a260 + call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) + store { ptr, i64, i64 } %t256, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a258 + store { ptr, i64, i64 } %t262, ptr %a264 + store { ptr, i64, i64 } { ptr @.str.4242, i64 3, i64 0 }, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + store { ptr, i64, i64 } %t262, ptr %a266 + call void @finch_str_drop(ptr %a266) + %t267 = load { ptr, i64, i64 }, ptr %a263 + %t268 = call { ptr, i64, i64 } @finch.gen.op(ptr %t244, { ptr, i64, i64 } %t267) + store { ptr, i64, i64 } %t267, ptr %a269 + call void @finch_str_drop(ptr %a269) + store { ptr, i64, i64 } %t268, ptr %a270 + %t271 = load ptr, ptr %a1 + %t272 = load %S.gen.Val, ptr %a6 + call void @finch.gen.release(ptr %t271, %S.gen.Val %t272) + %t273 = load ptr, ptr %a1 + %t274 = load %S.gen.Val, ptr %a10 + call void @finch.gen.release(ptr %t273, %S.gen.Val %t274) + %t275 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t275, ptr %a276 + call void @finch_str_copy(ptr %a277, ptr %a276) + %t278 = load { ptr, i64, i64 }, ptr %a277 + %t279 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t278, 0 + %t280 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4243, i64 4, i64 0 }) + %t281 = insertvalue %S.gen.Val %t279, %S.ast.Type %t280, 1 + call void @finch_str_drop(ptr %a270) + call void @finch_str_drop(ptr %a243) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t281 +endif6590: + %t282 = load ptr, ptr %a1 + %t283 = call i1 @finch.gen.unify(ptr %t282, ptr %a6, ptr %a10) + %t284 = xor i1 %t283, true + br i1 %t284, label %then6597, label %endif6599 +then6597: + %t285 = load ptr, ptr %a1 + %t286 = load { ptr, i64, i64 }, ptr %a2 + %t287 = load %S.gen.Val, ptr %a6 + %t288 = load %S.gen.Val, ptr %a10 + %t289 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t285, { ptr, i64, i64 } %t286, %S.gen.Val %t287, %S.gen.Val %t288, %S.ast.Node %t289) + br label %endif6599 +endif6599: + %t290 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t291 = getelementptr inbounds %S.ast.Type, ptr %t290, i32 0, i32 0 + %t292 = load { ptr, i64, i64 }, ptr %t291 + store { ptr, i64, i64 } %t292, ptr %a293 + call void @finch_str_copy(ptr %a294, ptr %a293) + %t295 = load { ptr, i64, i64 }, ptr %a294 + store { ptr, i64, i64 } %t295, ptr %a296 + %t297 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t298 = load %S.ast.Type, ptr %t297 + %t299 = call i1 @finch.gen.isFloat(%S.ast.Type %t298) + br i1 %t299, label %then6600, label %endif6602 +then6600: + %t300 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t301 = call ptr @finch_alloc(i64 %t300) + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 0 + store { ptr, i64, i64 } { ptr @.str.4244, i64 2, i64 0 }, ptr %t302 + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 1 + store { ptr, i64, i64 } { ptr @.str.4245, i64 2, i64 0 }, ptr %t303 + %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 2 + store { ptr, i64, i64 } { ptr @.str.4246, i64 1, i64 0 }, ptr %t304 + %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 3 + store { ptr, i64, i64 } { ptr @.str.4247, i64 2, i64 0 }, ptr %t305 + %t306 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 4 + store { ptr, i64, i64 } { ptr @.str.4248, i64 1, i64 0 }, ptr %t306 + %t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 5 + store { ptr, i64, i64 } { ptr @.str.4249, i64 2, i64 0 }, ptr %t307 + %t308 = insertvalue { ptr, i64, i64 } undef, ptr %t301, 0 + %t309 = insertvalue { ptr, i64, i64 } %t308, i64 6, 1 + %t310 = insertvalue { ptr, i64, i64 } %t309, i64 6, 2 + store { ptr, i64, i64 } %t310, ptr %a311 + %t312 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t313 = call ptr @finch_alloc(i64 %t312) + %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 0 + store { ptr, i64, i64 } { ptr @.str.4250, i64 3, i64 0 }, ptr %t314 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 1 + store { ptr, i64, i64 } { ptr @.str.4251, i64 3, i64 0 }, ptr %t315 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 2 + store { ptr, i64, i64 } { ptr @.str.4252, i64 3, i64 0 }, ptr %t316 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 3 + store { ptr, i64, i64 } { ptr @.str.4253, i64 3, i64 0 }, ptr %t317 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 4 + store { ptr, i64, i64 } { ptr @.str.4254, i64 3, i64 0 }, ptr %t318 + %t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 5 + store { ptr, i64, i64 } { ptr @.str.4255, i64 3, i64 0 }, ptr %t319 + %t320 = insertvalue { ptr, i64, i64 } undef, ptr %t313, 0 + %t321 = insertvalue { ptr, i64, i64 } %t320, i64 6, 1 + %t322 = insertvalue { ptr, i64, i64 } %t321, i64 6, 2 + store { ptr, i64, i64 } %t322, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a311, i32 0, i32 1 + %t326 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a327 + %t328 = load i64, ptr %t325 + %t329 = load ptr, ptr %a311 + store i64 0, ptr %a330 + br label %find.cond6603 +find.cond6603: + %t331 = load i64, ptr %a330 + %t332 = icmp slt i64 %t331, %t328 + br i1 %t332, label %find.body6604, label %find.end6607 +find.body6604: + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t329, i64 %t331 + %t334 = load { ptr, i64, i64 }, ptr %t333 + store { ptr, i64, i64 } %t334, ptr %a335 + store { ptr, i64, i64 } %t326, ptr %a336 + %t337 = call i32 @finch_str_eq(ptr %a335, ptr %a336) + %t338 = icmp ne i32 %t337, 0 + br i1 %t338, label %find.hit6605, label %find.next6606 +find.hit6605: + store i64 %t331, ptr %a327 + br label %find.end6607 +find.next6606: + %t339 = add i64 %t331, 1 + store i64 %t339, ptr %a330 + br label %find.cond6603 +find.end6607: + %t340 = load i64, ptr %a327 + %t341 = load { ptr, i64, i64 }, ptr %a323 + %t342 = extractvalue { ptr, i64, i64 } %t341, 1 + %t343 = icmp uge i64 %t340, %t342 + br i1 %t343, label %range6608, label %inrange6609 +range6608: + call void @finch_panic_index(ptr @.str.4257, i64 3595, i64 %t340, i64 %t342) + unreachable +inrange6609: + %t344 = extractvalue { ptr, i64, i64 } %t341, 0 + %t345 = getelementptr inbounds { ptr, i64, i64 }, ptr %t344, i64 %t340 + %t346 = load { ptr, i64, i64 }, ptr %t345 + store { ptr, i64, i64 } { ptr @.str.4256, i64 5, i64 0 }, ptr %a348 + store { ptr, i64, i64 } %t346, ptr %a349 + call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) + %t350 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t350, ptr %a352 + store { ptr, i64, i64 } { ptr @.str.4258, i64 1, i64 0 }, ptr %a353 + call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) + store { ptr, i64, i64 } %t350, ptr %a354 + call void @finch_str_drop(ptr %a354) + %t355 = load { ptr, i64, i64 }, ptr %a351 + %t356 = load ptr, ptr %a1 + %t357 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t358 = load %S.ast.Type, ptr %t357 + %t359 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t356, %S.ast.Type %t358) + store { ptr, i64, i64 } %t355, ptr %a361 + store { ptr, i64, i64 } %t359, ptr %a362 + call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) + store { ptr, i64, i64 } %t355, ptr %a363 + call void @finch_str_drop(ptr %a363) + store { ptr, i64, i64 } %t359, ptr %a364 + call void @finch_str_drop(ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a360 + store { ptr, i64, i64 } %t365, ptr %a367 + store { ptr, i64, i64 } { ptr @.str.4259, i64 1, i64 0 }, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + store { ptr, i64, i64 } %t365, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = load { ptr, i64, i64 }, ptr %a366 + %t371 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t372 = load { ptr, i64, i64 }, ptr %t371 + store { ptr, i64, i64 } %t370, ptr %a374 + store { ptr, i64, i64 } %t372, ptr %a375 + call void @finch_str_concat(ptr %a373, ptr %a374, ptr %a375) + store { ptr, i64, i64 } %t370, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a373 + store { ptr, i64, i64 } %t377, ptr %a379 + store { ptr, i64, i64 } { ptr @.str.4260, i64 2, i64 0 }, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + %t383 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t384 = load { ptr, i64, i64 }, ptr %t383 + store { ptr, i64, i64 } %t382, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + store { ptr, i64, i64 } %t382, ptr %a388 + call void @finch_str_drop(ptr %a388) + %t389 = load { ptr, i64, i64 }, ptr %a385 + %t390 = call { ptr, i64, i64 } @finch.gen.op(ptr %t324, { ptr, i64, i64 } %t389) + store { ptr, i64, i64 } %t389, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t390, 0 + %t393 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4261, i64 4, i64 0 }) + %t394 = insertvalue %S.gen.Val %t392, %S.ast.Type %t393, 1 + call void @finch.drop.arr_str(ptr %a323) + call void @finch.drop.arr_str(ptr %a311) + call void @finch_str_drop(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t394 +endif6602: + %t395 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t395, ptr %a396 + store { ptr, i64, i64 } { ptr @.str.4262, i64 4, i64 0 }, ptr %a397 + %t398 = call i32 @finch_str_eq(ptr %a396, ptr %a397) + %t399 = icmp ne i32 %t398, 0 + br i1 %t399, label %then6610, label %endif6612 +then6610: + %t400 = load i1, ptr %a23 + %t401 = xor i1 %t400, true + br i1 %t401, label %then6613, label %endif6615 +then6613: + %t402 = load ptr, ptr %a1 + %t403 = load %S.ast.Node, ptr %a11 + call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4263, i64 115, i64 0 }) + br label %endif6615 +endif6615: + store { ptr, i64, i64 } { ptr @.str.4264, i64 2, i64 0 }, ptr %a404 + %t405 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t405, ptr %a406 + store { ptr, i64, i64 } { ptr @.str.4265, i64 2, i64 0 }, ptr %a407 + %t408 = call i32 @finch_str_eq(ptr %a406, ptr %a407) + %t409 = icmp ne i32 %t408, 0 + br i1 %t409, label %then6616, label %endif6618 +then6616: + %t410 = load { ptr, i64, i64 }, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.4266, i64 2, i64 0 }, ptr %a404 + store { ptr, i64, i64 } %t410, ptr %a411 + call void @finch_str_drop(ptr %a411) + br label %endif6618 +endif6618: + %t412 = load ptr, ptr %a1 + %t413 = load { ptr, i64, i64 }, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.4267, i64 5, i64 0 }, ptr %a415 + store { ptr, i64, i64 } %t413, ptr %a416 + call void @finch_str_concat(ptr %a414, ptr %a415, ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a414 + store { ptr, i64, i64 } %t417, ptr %a419 + store { ptr, i64, i64 } { ptr @.str.4268, i64 5, i64 0 }, ptr %a420 + call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420) + store { ptr, i64, i64 } %t417, ptr %a421 + call void @finch_str_drop(ptr %a421) + %t422 = load { ptr, i64, i64 }, ptr %a418 + %t423 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t424 = load { ptr, i64, i64 }, ptr %t423 + store { ptr, i64, i64 } %t422, ptr %a426 + store { ptr, i64, i64 } %t424, ptr %a427 + call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427) + store { ptr, i64, i64 } %t422, ptr %a428 + call void @finch_str_drop(ptr %a428) + %t429 = load { ptr, i64, i64 }, ptr %a425 + store { ptr, i64, i64 } %t429, ptr %a431 + store { ptr, i64, i64 } { ptr @.str.4269, i64 2, i64 0 }, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t436 = load { ptr, i64, i64 }, ptr %t435 + store { ptr, i64, i64 } %t434, ptr %a438 + store { ptr, i64, i64 } %t436, ptr %a439 + call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) + store { ptr, i64, i64 } %t434, ptr %a440 + call void @finch_str_drop(ptr %a440) + %t441 = load { ptr, i64, i64 }, ptr %a437 + %t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t412, { ptr, i64, i64 } %t441) + store { ptr, i64, i64 } %t441, ptr %a443 + call void @finch_str_drop(ptr %a443) + %t444 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t442, 0 + %t445 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4270, i64 4, i64 0 }) + %t446 = insertvalue %S.gen.Val %t444, %S.ast.Type %t445, 1 + call void @finch_str_drop(ptr %a404) + call void @finch_str_drop(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t446 +endif6612: + %t447 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t447, ptr %a448 + store { ptr, i64, i64 } { ptr @.str.4271, i64 4, i64 0 }, ptr %a449 + %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) + %t451 = icmp ne i32 %t450, 0 + br label %logic.from6619 +logic.from6619: + br i1 %t451, label %logic.rhs6620, label %logic.end6621 +logic.rhs6620: + %t452 = load i1, ptr %a23 + %t453 = xor i1 %t452, true + br label %logic.rend6622 +logic.rend6622: + br label %logic.end6621 +logic.end6621: + %t454 = phi i1 [ false, %logic.from6619 ], [ %t453, %logic.rend6622 ] + br i1 %t454, label %then6623, label %endif6625 +then6623: + %t455 = load ptr, ptr %a1 + %t456 = load { ptr, i64, i64 }, ptr %a2 + %t457 = load %S.gen.Val, ptr %a6 + %t458 = load %S.gen.Val, ptr %a10 + %t459 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t455, { ptr, i64, i64 } %t456, %S.gen.Val %t457, %S.gen.Val %t458, %S.ast.Node %t459) + br label %endif6625 +endif6625: + %t460 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t461 = load %S.ast.Type, ptr %t460 + %t462 = call i1 @finch.gen.isInt(%S.ast.Type %t461) + %t463 = xor i1 %t462, true + br label %logic.from6626 +logic.from6626: + br i1 %t463, label %logic.rhs6627, label %logic.end6628 +logic.rhs6627: + %t464 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t464, ptr %a465 + store { ptr, i64, i64 } { ptr @.str.4272, i64 4, i64 0 }, ptr %a466 + %t467 = call i32 @finch_str_eq(ptr %a465, ptr %a466) + %t468 = icmp eq i32 %t467, 0 + br label %logic.rend6629 +logic.rend6629: + br label %logic.end6628 +logic.end6628: + %t469 = phi i1 [ false, %logic.from6626 ], [ %t468, %logic.rend6629 ] + br label %logic.from6630 +logic.from6630: + br i1 %t469, label %logic.rhs6631, label %logic.end6632 +logic.rhs6631: + %t470 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t470, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.4273, i64 4, i64 0 }, ptr %a472 + %t473 = call i32 @finch_str_eq(ptr %a471, ptr %a472) + %t474 = icmp eq i32 %t473, 0 + br label %logic.rend6633 +logic.rend6633: + br label %logic.end6632 +logic.end6632: + %t475 = phi i1 [ false, %logic.from6630 ], [ %t474, %logic.rend6633 ] + br i1 %t475, label %then6634, label %endif6636 +then6634: + %t476 = load ptr, ptr %a1 + %t477 = load { ptr, i64, i64 }, ptr %a2 + %t478 = load %S.gen.Val, ptr %a6 + %t479 = load %S.gen.Val, ptr %a10 + %t480 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t476, { ptr, i64, i64 } %t477, %S.gen.Val %t478, %S.gen.Val %t479, %S.ast.Node %t480) + br label %endif6636 +endif6636: + %t481 = load ptr, ptr %a1 + %t482 = load { ptr, i64, i64 }, ptr %a2 + %t483 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t484 = load %S.ast.Type, ptr %t483 + %t485 = call i1 @finch.gen.isSigned(%S.ast.Type %t484) + %t486 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t482, i1 %t485) + store { ptr, i64, i64 } { ptr @.str.4274, i64 5, i64 0 }, ptr %a488 + store { ptr, i64, i64 } %t486, ptr %a489 + call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) + store { ptr, i64, i64 } %t486, ptr %a490 + call void @finch_str_drop(ptr %a490) + %t491 = load { ptr, i64, i64 }, ptr %a487 + store { ptr, i64, i64 } %t491, ptr %a493 + store { ptr, i64, i64 } { ptr @.str.4275, i64 1, i64 0 }, ptr %a494 + call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) + store { ptr, i64, i64 } %t491, ptr %a495 + call void @finch_str_drop(ptr %a495) + %t496 = load { ptr, i64, i64 }, ptr %a492 + %t497 = load ptr, ptr %a1 + %t498 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t499 = load %S.ast.Type, ptr %t498 + %t500 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t497, %S.ast.Type %t499) + store { ptr, i64, i64 } %t496, ptr %a502 + store { ptr, i64, i64 } %t500, ptr %a503 + call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) + store { ptr, i64, i64 } %t496, ptr %a504 + call void @finch_str_drop(ptr %a504) + store { ptr, i64, i64 } %t500, ptr %a505 + call void @finch_str_drop(ptr %a505) + %t506 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t506, ptr %a508 + store { ptr, i64, i64 } { ptr @.str.4276, i64 1, i64 0 }, ptr %a509 + call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) + store { ptr, i64, i64 } %t506, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a507 + %t512 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t513 = load { ptr, i64, i64 }, ptr %t512 + store { ptr, i64, i64 } %t511, ptr %a515 + store { ptr, i64, i64 } %t513, ptr %a516 + call void @finch_str_concat(ptr %a514, ptr %a515, ptr %a516) + store { ptr, i64, i64 } %t511, ptr %a517 + call void @finch_str_drop(ptr %a517) + %t518 = load { ptr, i64, i64 }, ptr %a514 + store { ptr, i64, i64 } %t518, ptr %a520 + store { ptr, i64, i64 } { ptr @.str.4277, i64 2, i64 0 }, ptr %a521 + call void @finch_str_concat(ptr %a519, ptr %a520, ptr %a521) + store { ptr, i64, i64 } %t518, ptr %a522 + call void @finch_str_drop(ptr %a522) + %t523 = load { ptr, i64, i64 }, ptr %a519 + %t524 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t525 = load { ptr, i64, i64 }, ptr %t524 + store { ptr, i64, i64 } %t523, ptr %a527 + store { ptr, i64, i64 } %t525, ptr %a528 + call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) + store { ptr, i64, i64 } %t523, ptr %a529 + call void @finch_str_drop(ptr %a529) + %t530 = load { ptr, i64, i64 }, ptr %a526 + %t531 = call { ptr, i64, i64 } @finch.gen.op(ptr %t481, { ptr, i64, i64 } %t530) + store { ptr, i64, i64 } %t530, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t531, 0 + %t534 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4278, i64 4, i64 0 }) + %t535 = insertvalue %S.gen.Val %t533, %S.ast.Type %t534, 1 + call void @finch_str_drop(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t535 +} + +define internal { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %p0, i1 %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i1, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca i64, align 16 + %a46 = alloca i64, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i1 %p1, ptr %a2 + %t3 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t4 = call ptr @finch_alloc(i64 %t3) + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 + store { ptr, i64, i64 } { ptr @.str.4279, i64 2, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 1 + store { ptr, i64, i64 } { ptr @.str.4280, i64 2, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 2 + store { ptr, i64, i64 } { ptr @.str.4281, i64 1, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 3 + store { ptr, i64, i64 } { ptr @.str.4282, i64 2, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 4 + store { ptr, i64, i64 } { ptr @.str.4283, i64 1, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 5 + store { ptr, i64, i64 } { ptr @.str.4284, i64 2, i64 0 }, ptr %t10 + %t11 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 + %t12 = insertvalue { ptr, i64, i64 } %t11, i64 6, 1 + %t13 = insertvalue { ptr, i64, i64 } %t12, i64 6, 2 + store { ptr, i64, i64 } %t13, ptr %a14 + %t15 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t16 = call ptr @finch_alloc(i64 %t15) + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 + store { ptr, i64, i64 } { ptr @.str.4285, i64 2, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 1 + store { ptr, i64, i64 } { ptr @.str.4286, i64 2, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 2 + store { ptr, i64, i64 } { ptr @.str.4287, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 3 + store { ptr, i64, i64 } { ptr @.str.4288, i64 3, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 4 + store { ptr, i64, i64 } { ptr @.str.4289, i64 3, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 5 + store { ptr, i64, i64 } { ptr @.str.4290, i64 3, i64 0 }, ptr %t22 + %t23 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 + %t24 = insertvalue { ptr, i64, i64 } %t23, i64 6, 1 + %t25 = insertvalue { ptr, i64, i64 } %t24, i64 6, 2 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load i1, ptr %a2 + br i1 %t27, label %then6637, label %endif6639 +then6637: + %t28 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t29 = call ptr @finch_alloc(i64 %t28) + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 + store { ptr, i64, i64 } { ptr @.str.4291, i64 2, i64 0 }, ptr %t30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 1 + store { ptr, i64, i64 } { ptr @.str.4292, i64 2, i64 0 }, ptr %t31 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 2 + store { ptr, i64, i64 } { ptr @.str.4293, i64 3, i64 0 }, ptr %t32 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 3 + store { ptr, i64, i64 } { ptr @.str.4294, i64 3, i64 0 }, ptr %t33 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 4 + store { ptr, i64, i64 } { ptr @.str.4295, i64 3, i64 0 }, ptr %t34 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 5 + store { ptr, i64, i64 } { ptr @.str.4296, i64 3, i64 0 }, ptr %t35 + %t36 = insertvalue { ptr, i64, i64 } undef, ptr %t29, 0 + %t37 = insertvalue { ptr, i64, i64 } %t36, i64 6, 1 + %t38 = insertvalue { ptr, i64, i64 } %t37, i64 6, 2 + %t39 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t38, ptr %a26 + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch.drop.arr_str(ptr %a40) + br label %endif6639 +endif6639: + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a43 + %t44 = load i64, ptr %t41 + %t45 = load ptr, ptr %a14 + store i64 0, ptr %a46 + br label %find.cond6640 +find.cond6640: + %t47 = load i64, ptr %a46 + %t48 = icmp slt i64 %t47, %t44 + br i1 %t48, label %find.body6641, label %find.end6644 +find.body6641: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t47 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } %t42, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %find.hit6642, label %find.next6643 +find.hit6642: + store i64 %t47, ptr %a43 + br label %find.end6644 +find.next6643: + %t55 = add i64 %t47, 1 + store i64 %t55, ptr %a46 + br label %find.cond6640 +find.end6644: + %t56 = load i64, ptr %a43 + %t57 = load { ptr, i64, i64 }, ptr %a26 + %t58 = extractvalue { ptr, i64, i64 } %t57, 1 + %t59 = icmp uge i64 %t56, %t58 + br i1 %t59, label %range6645, label %inrange6646 +range6645: + call void @finch_panic_index(ptr @.str.4297, i64 3622, i64 %t56, i64 %t58) + unreachable +inrange6646: + %t60 = extractvalue { ptr, i64, i64 } %t57, 0 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i64 %t56 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + call void @finch.drop.arr_str(ptr %a26) + call void @finch.drop.arr_str(ptr %a14) + ret { ptr, i64, i64 } %t65 +} + +define internal %S.gen.Val @finch.gen.binary(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca %S.gen.Val, align 16 + %a151 = alloca i64, align 16 + %a163 = alloca %S.gen.Val, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.4298, i64 2, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from6647 +logic.from6647: + br i1 %t13, label %logic.end6649, label %logic.rhs6648 +logic.rhs6648: + %t14 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.4299, i64 2, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.rend6650 +logic.rend6650: + br label %logic.end6649 +logic.end6649: + %t19 = phi i1 [ true, %logic.from6647 ], [ %t18, %logic.rend6650 ] + br i1 %t19, label %then6651, label %endif6653 +then6651: + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = extractvalue { ptr, i64, i64 } %t22, 1 + %t24 = icmp uge i64 0, %t23 + br i1 %t24, label %range6654, label %inrange6655 +range6654: + call void @finch_panic_index(ptr @.str.4300, i64 3628, i64 0, i64 %t23) + unreachable +inrange6655: + %t25 = extractvalue { ptr, i64, i64 } %t22, 0 + %t26 = getelementptr inbounds %S.ast.Node, ptr %t25, i64 0 + %t27 = load %S.ast.Node, ptr %t26 + %t28 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t20, %S.ast.Node %t27) + store { ptr, i64, i64 } %t28, ptr %a29 + %t30 = load ptr, ptr %a1 + %t31 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t30, { ptr, i64, i64 } { ptr @.str.4301, i64 10, i64 0 }) + store { ptr, i64, i64 } %t31, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t33, { ptr, i64, i64 } { ptr @.str.4302, i64 9, i64 0 }) + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = load ptr, ptr %a1 + %t37 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t36, { ptr, i64, i64 } { ptr @.str.4303, i64 9, i64 0 }) + store { ptr, i64, i64 } %t37, ptr %a38 + %t39 = load ptr, ptr %a1 + %t40 = load { ptr, i64, i64 }, ptr %a32 + call void @finch.gen.br(ptr %t39, { ptr, i64, i64 } %t40) + %t41 = load ptr, ptr %a1 + %t42 = load { ptr, i64, i64 }, ptr %a32 + call void @finch.gen.label(ptr %t41, { ptr, i64, i64 } %t42) + %t43 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.4304, i64 2, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp ne i32 %t46, 0 + br i1 %t47, label %then6656, label %else6657 +then6656: + %t48 = load ptr, ptr %a1 + %t49 = load { ptr, i64, i64 }, ptr %a29 + %t50 = load { ptr, i64, i64 }, ptr %a35 + %t51 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.gen.condBr(ptr %t48, { ptr, i64, i64 } %t49, { ptr, i64, i64 } %t50, { ptr, i64, i64 } %t51) + br label %endif6658 +else6657: + %t52 = load ptr, ptr %a1 + %t53 = load { ptr, i64, i64 }, ptr %a29 + %t54 = load { ptr, i64, i64 }, ptr %a38 + %t55 = load { ptr, i64, i64 }, ptr %a35 + call void @finch.gen.condBr(ptr %t52, { ptr, i64, i64 } %t53, { ptr, i64, i64 } %t54, { ptr, i64, i64 } %t55) + br label %endif6658 +endif6658: + %t56 = load ptr, ptr %a1 + %t57 = load { ptr, i64, i64 }, ptr %a35 + call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = extractvalue { ptr, i64, i64 } %t60, 1 + %t62 = icmp uge i64 1, %t61 + br i1 %t62, label %range6659, label %inrange6660 +range6659: + call void @finch_panic_index(ptr @.str.4305, i64 3640, i64 1, i64 %t61) + unreachable +inrange6660: + %t63 = extractvalue { ptr, i64, i64 } %t60, 0 + %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 1 + %t65 = load %S.ast.Node, ptr %t64 + %t66 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t58, %S.ast.Node %t65) + store { ptr, i64, i64 } %t66, ptr %a67 + %t68 = load ptr, ptr %a1 + %t69 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t68, { ptr, i64, i64 } { ptr @.str.4306, i64 10, i64 0 }) + store { ptr, i64, i64 } %t69, ptr %a70 + %t71 = load ptr, ptr %a1 + %t72 = load { ptr, i64, i64 }, ptr %a70 + call void @finch.gen.br(ptr %t71, { ptr, i64, i64 } %t72) + %t73 = load ptr, ptr %a1 + %t74 = load { ptr, i64, i64 }, ptr %a70 + call void @finch.gen.label(ptr %t73, { ptr, i64, i64 } %t74) + %t75 = load ptr, ptr %a1 + %t76 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.gen.br(ptr %t75, { ptr, i64, i64 } %t76) + %t77 = load ptr, ptr %a1 + %t78 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.gen.label(ptr %t77, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } { ptr @.str.4307, i64 4, i64 0 }, ptr %a79 + %t80 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.4308, i64 2, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %then6661, label %endif6663 +then6661: + %t85 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4309, i64 5, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + br label %endif6663 +endif6663: + %t87 = load ptr, ptr %a1 + %t88 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4310, i64 9, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4311, i64 3, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load { ptr, i64, i64 }, ptr %a32 + store { ptr, i64, i64 } %t97, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.4312, i64 6, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t108, ptr %a111 + store { ptr, i64, i64 } %t109, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.4313, i64 3, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t119, ptr %a122 + store { ptr, i64, i64 } %t120, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t119, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + store { ptr, i64, i64 } %t125, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.4314, i64 2, i64 0 }, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t125, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t130) + store { ptr, i64, i64 } %t130, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t131, 0 + %t134 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4315, i64 4, i64 0 }) + %t135 = insertvalue %S.gen.Val %t133, %S.ast.Type %t134, 1 + call void @finch_str_drop(ptr %a79) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a67) + call void @finch_str_drop(ptr %a38) + call void @finch_str_drop(ptr %a35) + call void @finch_str_drop(ptr %a32) + call void @finch_str_drop(ptr %a29) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t135 +endif6653: + %t136 = load ptr, ptr %a1 + %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t138 = load { ptr, i64, i64 }, ptr %t137 + %t139 = extractvalue { ptr, i64, i64 } %t138, 1 + %t140 = icmp uge i64 0, %t139 + br i1 %t140, label %range6664, label %inrange6665 +range6664: + call void @finch_panic_index(ptr @.str.4316, i64 3652, i64 0, i64 %t139) + unreachable +inrange6665: + %t141 = extractvalue { ptr, i64, i64 } %t138, 0 + %t142 = getelementptr inbounds %S.ast.Node, ptr %t141, i64 0 + %t143 = load %S.ast.Node, ptr %t142 + %t144 = call %S.gen.Val @finch.gen.expr(ptr %t136, %S.ast.Node %t143) + store %S.gen.Val %t144, ptr %a145 + %t146 = load ptr, ptr %a1 + %t147 = icmp eq ptr %t146, null + br i1 %t147, label %panic6666, label %ok6667 +panic6666: + call void @finch_panic(ptr @.str.4317, i64 3653, ptr @.str.4318) + unreachable +ok6667: + %t148 = getelementptr inbounds %S.gen.Gen, ptr %t146, i32 0, i32 11 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i32 0, i32 1 + %t150 = load i64, ptr %t149 + store i64 %t150, ptr %a151 + %t152 = load ptr, ptr %a1 + %t153 = load %S.gen.Val, ptr %a145 + call void @finch.gen.hold(ptr %t152, %S.gen.Val %t153) + %t154 = load ptr, ptr %a1 + %t155 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t156 = load { ptr, i64, i64 }, ptr %t155 + %t157 = extractvalue { ptr, i64, i64 } %t156, 1 + %t158 = icmp uge i64 1, %t157 + br i1 %t158, label %range6668, label %inrange6669 +range6668: + call void @finch_panic_index(ptr @.str.4319, i64 3655, i64 1, i64 %t157) + unreachable +inrange6669: + %t159 = extractvalue { ptr, i64, i64 } %t156, 0 + %t160 = getelementptr inbounds %S.ast.Node, ptr %t159, i64 1 + %t161 = load %S.ast.Node, ptr %t160 + %t162 = call %S.gen.Val @finch.gen.expr(ptr %t154, %S.ast.Node %t161) + store %S.gen.Val %t162, ptr %a163 + %t164 = load ptr, ptr %a1 + %t165 = load i64, ptr %a151 + call void @finch.gen.heldEnd(ptr %t164, i64 %t165) + %t166 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.4320, i64 2, i64 0 }, ptr %a168 + %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) + %t170 = icmp ne i32 %t169, 0 + br label %logic.from6670 +logic.from6670: + br i1 %t170, label %logic.end6672, label %logic.rhs6671 +logic.rhs6671: + %t171 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.4321, i64 2, i64 0 }, ptr %a173 + %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) + %t175 = icmp ne i32 %t174, 0 + br label %logic.rend6673 +logic.rend6673: + br label %logic.end6672 +logic.end6672: + %t176 = phi i1 [ true, %logic.from6670 ], [ %t175, %logic.rend6673 ] + br label %logic.from6674 +logic.from6674: + br i1 %t176, label %logic.end6676, label %logic.rhs6675 +logic.rhs6675: + %t177 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t177, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.4322, i64 1, i64 0 }, ptr %a179 + %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) + %t181 = icmp ne i32 %t180, 0 + br label %logic.rend6677 +logic.rend6677: + br label %logic.end6676 +logic.end6676: + %t182 = phi i1 [ true, %logic.from6674 ], [ %t181, %logic.rend6677 ] + br label %logic.from6678 +logic.from6678: + br i1 %t182, label %logic.end6680, label %logic.rhs6679 +logic.rhs6679: + %t183 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t183, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.4323, i64 2, i64 0 }, ptr %a185 + %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) + %t187 = icmp ne i32 %t186, 0 + br label %logic.rend6681 +logic.rend6681: + br label %logic.end6680 +logic.end6680: + %t188 = phi i1 [ true, %logic.from6678 ], [ %t187, %logic.rend6681 ] + br label %logic.from6682 +logic.from6682: + br i1 %t188, label %logic.end6684, label %logic.rhs6683 +logic.rhs6683: + %t189 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t189, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.4324, i64 1, i64 0 }, ptr %a191 + %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) + %t193 = icmp ne i32 %t192, 0 + br label %logic.rend6685 +logic.rend6685: + br label %logic.end6684 +logic.end6684: + %t194 = phi i1 [ true, %logic.from6682 ], [ %t193, %logic.rend6685 ] + br label %logic.from6686 +logic.from6686: + br i1 %t194, label %logic.end6688, label %logic.rhs6687 +logic.rhs6687: + %t195 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t195, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.4325, i64 2, i64 0 }, ptr %a197 + %t198 = call i32 @finch_str_eq(ptr %a196, ptr %a197) + %t199 = icmp ne i32 %t198, 0 + br label %logic.rend6689 +logic.rend6689: + br label %logic.end6688 +logic.end6688: + %t200 = phi i1 [ true, %logic.from6686 ], [ %t199, %logic.rend6689 ] + br i1 %t200, label %then6690, label %endif6692 +then6690: + %t201 = load ptr, ptr %a1 + %t202 = load { ptr, i64, i64 }, ptr %a8 + %t203 = load %S.gen.Val, ptr %a145 + %t204 = load %S.gen.Val, ptr %a163 + %t205 = load %S.ast.Node, ptr %a2 + %t206 = call %S.gen.Val @finch.gen.compare(ptr %t201, { ptr, i64, i64 } %t202, %S.gen.Val %t203, %S.gen.Val %t204, %S.ast.Node %t205) + call void @finch.drop.S_gen_Val(ptr %a163) + call void @finch.drop.S_gen_Val(ptr %a145) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t206 +endif6692: + %t207 = load ptr, ptr %a1 + %t208 = load { ptr, i64, i64 }, ptr %a8 + %t209 = load %S.gen.Val, ptr %a145 + %t210 = load %S.gen.Val, ptr %a163 + %t211 = load %S.ast.Node, ptr %a2 + %t212 = call %S.gen.Val @finch.gen.arith(ptr %t207, { ptr, i64, i64 } %t208, %S.gen.Val %t209, %S.gen.Val %t210, %S.ast.Node %t211) + call void @finch.drop.S_gen_Val(ptr %a163) + call void @finch.drop.S_gen_Val(ptr %a145) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t212 +} + +define internal %S.gen.Val @finch.gen.arrayLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a5 = alloca %S.ast.Type, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca i64, align 16 + %a38 = alloca i64, align 16 + %a46 = alloca %S.ast.Node, align 16 + %a47 = alloca %S.gen.Val, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca %S.gen.Val, align 16 + %a61 = alloca %S.ast.Type, align 16 + %a62 = alloca %S.ast.Type, align 16 + %a65 = alloca %S.ast.Type, align 16 + %a71 = alloca %S.gen.Val, align 16 + %a78 = alloca %S.gen.Val, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a103 = alloca %S.ast.Type, align 16 + %a107 = alloca %S.gen.Val, align 16 + %a114 = alloca %S.ast.Type, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca i64, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca %S.ast.Type, align 16 + %a290 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4326, i64 4, i64 0 }) + store %S.ast.Type %t4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4327, i64 5, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then6693, label %else6694 +then6693: + %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t13 = load { ptr, i64, i64 }, ptr %t12 + %t14 = extractvalue { ptr, i64, i64 } %t13, 1 + %t15 = icmp uge i64 0, %t14 + br i1 %t15, label %range6696, label %inrange6697 +range6696: + call void @finch_panic_index(ptr @.str.4328, i64 3666, i64 0, i64 %t14) + unreachable +inrange6697: + %t16 = extractvalue { ptr, i64, i64 } %t13, 0 + %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i64 0 + %t18 = load %S.ast.Type, ptr %t17 + store %S.ast.Type %t18, ptr %a19 + call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) + %t21 = load %S.ast.Type, ptr %a20 + %t22 = load %S.ast.Type, ptr %a5 + store %S.ast.Type %t21, ptr %a5 + store %S.ast.Type %t22, ptr %a23 + call void @finch.drop.S_ast_Type(ptr %a23) + br label %endif6695 +else6694: + %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i32 0, i32 1 + %t26 = load i64, ptr %t25 + %t27 = icmp eq i64 %t26, 0 + br i1 %t27, label %then6698, label %endif6700 +then6698: + %t28 = load ptr, ptr %a1 + %t29 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t28, %S.ast.Node %t29, { ptr, i64, i64 } { ptr @.str.4329, i64 47, i64 0 }) + br label %endif6700 +endif6700: + br label %endif6695 +endif6695: + store { ptr, i64, i64 } zeroinitializer, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic6701, label %ok6702 +panic6701: + call void @finch_panic(ptr @.str.4330, i64 3671, ptr @.str.4331) + unreachable +ok6702: + %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 11 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 + %t35 = load i64, ptr %t34 + store i64 %t35, ptr %a36 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + store i64 0, ptr %a38 + br label %each.cond6703 +each.cond6703: + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 + %t40 = load i64, ptr %t39 + %t41 = load i64, ptr %a38 + %t42 = icmp slt i64 %t41, %t40 + br i1 %t42, label %each.body6704, label %each.end6706 +each.body6704: + %t43 = load ptr, ptr %t37 + %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 + %t45 = load %S.ast.Node, ptr %t44 + store %S.ast.Node %t45, ptr %a46 + store %S.gen.Val zeroinitializer, ptr %a47 + %t48 = getelementptr inbounds %S.ast.Type, ptr %a5, i32 0, i32 0 + %t49 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.4332, i64 4, i64 0 }, ptr %a51 + %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) + %t53 = icmp ne i32 %t52, 0 + br i1 %t53, label %then6707, label %else6708 +then6707: + %t54 = load ptr, ptr %a1 + %t55 = load %S.ast.Node, ptr %a46 + %t56 = call %S.gen.Val @finch.gen.expr(ptr %t54, %S.ast.Node %t55) + %t57 = load %S.gen.Val, ptr %a47 + store %S.gen.Val %t56, ptr %a47 + store %S.gen.Val %t57, ptr %a58 + call void @finch.drop.S_gen_Val(ptr %a58) + %t59 = getelementptr inbounds %S.gen.Val, ptr %a47, i32 0, i32 1 + %t60 = load %S.ast.Type, ptr %t59 + store %S.ast.Type %t60, ptr %a61 + call void @finch.copy.S_ast_Type(ptr %a62, ptr %a61) + %t63 = load %S.ast.Type, ptr %a62 + %t64 = load %S.ast.Type, ptr %a5 + store %S.ast.Type %t63, ptr %a5 + store %S.ast.Type %t64, ptr %a65 + call void @finch.drop.S_ast_Type(ptr %a65) + br label %endif6709 +else6708: + %t66 = load ptr, ptr %a1 + %t67 = load %S.ast.Node, ptr %a46 + %t68 = load %S.ast.Type, ptr %a5 + %t69 = call %S.gen.Val @finch.gen.exprWant(ptr %t66, %S.ast.Node %t67, %S.ast.Type %t68) + %t70 = load %S.gen.Val, ptr %a47 + store %S.gen.Val %t69, ptr %a47 + store %S.gen.Val %t70, ptr %a71 + call void @finch.drop.S_gen_Val(ptr %a71) + br label %endif6709 +endif6709: + %t72 = load ptr, ptr %a1 + %t73 = load %S.gen.Val, ptr %a47 + %t74 = load %S.ast.Type, ptr %a5 + %t75 = load %S.ast.Node, ptr %a46 + %t76 = call %S.gen.Val @finch.gen.coerce(ptr %t72, %S.gen.Val %t73, %S.ast.Type %t74, %S.ast.Node %t75, { ptr, i64, i64 } { ptr @.str.4333, i64 27, i64 0 }) + %t77 = load %S.gen.Val, ptr %a47 + store %S.gen.Val %t76, ptr %a47 + store %S.gen.Val %t77, ptr %a78 + call void @finch.drop.S_gen_Val(ptr %a78) + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t80 = load ptr, ptr %a1 + %t81 = load %S.gen.Val, ptr %a47 + %t82 = call { ptr, i64, i64 } @finch.gen.own(ptr %t80, %S.gen.Val %t81) + %t83 = load i64, ptr %t79 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %a30, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %a30 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 + store { ptr, i64, i64 } %t82, ptr %t86 + store i64 %t84, ptr %t79 + %t87 = load ptr, ptr %a1 + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t89 = load i64, ptr %t88 + %t90 = sub i64 %t89, 1 + %t91 = load { ptr, i64, i64 }, ptr %a30 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 %t90, %t92 + br i1 %t93, label %range6710, label %inrange6711 +range6710: + call void @finch_panic_index(ptr @.str.4334, i64 3682, i64 %t90, i64 %t92) + unreachable +inrange6711: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 %t90 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_copy(ptr %a98, ptr %a97) + %t99 = load { ptr, i64, i64 }, ptr %a98 + %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 + %t101 = load %S.ast.Type, ptr %a5 + store %S.ast.Type %t101, ptr %a102 + call void @finch.copy.S_ast_Type(ptr %a103, ptr %a102) + %t104 = load %S.ast.Type, ptr %a103 + %t105 = insertvalue %S.gen.Val %t100, %S.ast.Type %t104, 1 + %t106 = insertvalue %S.gen.Val %t105, i1 true, 2 + call void @finch.gen.hold(ptr %t87, %S.gen.Val %t106) + store %S.gen.Val %t106, ptr %a107 + call void @finch.drop.S_gen_Val(ptr %a107) + call void @finch.drop.S_gen_Val(ptr %a47) + br label %each.step6705 +each.step6705: + %t108 = load i64, ptr %a38 + %t109 = add i64 %t108, 1 + store i64 %t109, ptr %a38 + br label %each.cond6703 +each.end6706: + %t110 = load ptr, ptr %a1 + %t111 = load i64, ptr %a36 + call void @finch.gen.heldEnd(ptr %t110, i64 %t111) + %t112 = load %S.ast.Type, ptr %a5 + %t113 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t112) + store %S.ast.Type %t113, ptr %a114 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t116 = load i64, ptr %t115 + call void @finch_str_from_int(ptr %a117, i64 %t116) + %t118 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t118, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.4335, i64 4, i64 0 }, ptr %a120 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t122 = load i64, ptr %t121 + %t123 = icmp sgt i64 %t122, 0 + br i1 %t123, label %then6712, label %endif6714 +then6712: + %t124 = load ptr, ptr %a1 + %t125 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.4336, i64 8, i64 0 }, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + %t129 = load { ptr, i64, i64 }, ptr %a126 + store { ptr, i64, i64 } %t129, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.4337, i64 2, i64 0 }, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + store { ptr, i64, i64 } %t129, ptr %a133 + call void @finch_str_drop(ptr %a133) + %t134 = load { ptr, i64, i64 }, ptr %a130 + %t135 = load ptr, ptr %a1 + %t136 = load %S.ast.Type, ptr %a5 + %t137 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t135, %S.ast.Type %t136) + store { ptr, i64, i64 } %t134, ptr %a139 + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t134, ptr %a141 + call void @finch_str_drop(ptr %a141) + store { ptr, i64, i64 } %t137, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a138 + %t144 = call { ptr, i64, i64 } @finch.gen.op(ptr %t124, { ptr, i64, i64 } %t143) + store { ptr, i64, i64 } %t143, ptr %a145 + call void @finch_str_drop(ptr %a145) + store { ptr, i64, i64 } %t144, ptr %a146 + %t147 = load ptr, ptr %a1 + %t148 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } { ptr @.str.4338, i64 26, i64 0 }, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.4339, i64 1, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + %t158 = call { ptr, i64, i64 } @finch.gen.op(ptr %t147, { ptr, i64, i64 } %t157) + store { ptr, i64, i64 } %t157, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t158, ptr %a120 + store { ptr, i64, i64 } %t160, ptr %a161 + call void @finch_str_drop(ptr %a161) + call void @finch_str_drop(ptr %a146) + br label %endif6714 +endif6714: + %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t163 = load i64, ptr %t162 + store i64 0, ptr %a164 + br label %for.cond6715 +for.cond6715: + %t165 = load i64, ptr %a164 + %t166 = icmp slt i64 %t165, %t163 + br i1 %t166, label %for.body6716, label %for.end6718 +for.body6716: + %t167 = load ptr, ptr %a1 + %t168 = load ptr, ptr %a1 + %t169 = load %S.ast.Type, ptr %a5 + %t170 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t168, %S.ast.Type %t169) + store { ptr, i64, i64 } { ptr @.str.4340, i64 23, i64 0 }, ptr %a172 + store { ptr, i64, i64 } %t170, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t170, ptr %a174 + call void @finch_str_drop(ptr %a174) + %t175 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } %t175, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.4341, i64 6, i64 0 }, ptr %a178 + call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) + store { ptr, i64, i64 } %t175, ptr %a179 + call void @finch_str_drop(ptr %a179) + %t180 = load { ptr, i64, i64 }, ptr %a176 + %t181 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t180, ptr %a183 + store { ptr, i64, i64 } %t181, ptr %a184 + call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) + store { ptr, i64, i64 } %t180, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a182 + store { ptr, i64, i64 } %t186, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.4342, i64 6, i64 0 }, ptr %a189 + call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) + store { ptr, i64, i64 } %t186, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a187 + %t192 = load i64, ptr %a164 + call void @finch_str_from_int(ptr %a193, i64 %t192) + %t194 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t191, ptr %a196 + store { ptr, i64, i64 } %t194, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t191, ptr %a198 + call void @finch_str_drop(ptr %a198) + store { ptr, i64, i64 } %t194, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a195 + %t201 = call { ptr, i64, i64 } @finch.gen.op(ptr %t167, { ptr, i64, i64 } %t200) + store { ptr, i64, i64 } %t200, ptr %a202 + call void @finch_str_drop(ptr %a202) + store { ptr, i64, i64 } %t201, ptr %a203 + %t204 = load ptr, ptr %a1 + %t205 = load ptr, ptr %a1 + %t206 = load %S.ast.Type, ptr %a5 + %t207 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t205, %S.ast.Type %t206) + %t208 = load i64, ptr %a164 + %t209 = load { ptr, i64, i64 }, ptr %a30 + %t210 = extractvalue { ptr, i64, i64 } %t209, 1 + %t211 = icmp uge i64 %t208, %t210 + br i1 %t211, label %range6719, label %inrange6720 +range6719: + call void @finch_panic_index(ptr @.str.4343, i64 3694, i64 %t208, i64 %t210) + unreachable +inrange6720: + %t212 = extractvalue { ptr, i64, i64 } %t209, 0 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t208 + %t214 = load { ptr, i64, i64 }, ptr %t213 + %t215 = load { ptr, i64, i64 }, ptr %a203 + call void @finch.gen.store(ptr %t204, { ptr, i64, i64 } %t207, { ptr, i64, i64 } %t214, { ptr, i64, i64 } %t215) + store { ptr, i64, i64 } %t207, ptr %a216 + call void @finch_str_drop(ptr %a216) + call void @finch_str_drop(ptr %a203) + br label %for.step6717 +for.step6717: + %t217 = load i64, ptr %a164 + %t218 = add i64 %t217, 1 + store i64 %t218, ptr %a164 + br label %for.cond6715 +for.end6718: + %t219 = load ptr, ptr %a1 + %t220 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.4344, i64 41, i64 0 }, ptr %a222 + store { ptr, i64, i64 } %t220, ptr %a223 + call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) + %t224 = load { ptr, i64, i64 }, ptr %a221 + store { ptr, i64, i64 } %t224, ptr %a226 + store { ptr, i64, i64 } { ptr @.str.4345, i64 3, i64 0 }, ptr %a227 + call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) + store { ptr, i64, i64 } %t224, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = load { ptr, i64, i64 }, ptr %a225 + %t230 = call { ptr, i64, i64 } @finch.gen.op(ptr %t219, { ptr, i64, i64 } %t229) + store { ptr, i64, i64 } %t229, ptr %a231 + call void @finch_str_drop(ptr %a231) + store { ptr, i64, i64 } %t230, ptr %a232 + %t233 = load ptr, ptr %a1 + %t234 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.4346, i64 30, i64 0 }, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t238, ptr %a240 + store { ptr, i64, i64 } { ptr @.str.4347, i64 6, i64 0 }, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t238, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + %t244 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } %t243, ptr %a246 + store { ptr, i64, i64 } %t244, ptr %a247 + call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) + store { ptr, i64, i64 } %t243, ptr %a248 + call void @finch_str_drop(ptr %a248) + %t249 = load { ptr, i64, i64 }, ptr %a245 + store { ptr, i64, i64 } %t249, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.4348, i64 3, i64 0 }, ptr %a252 + call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) + store { ptr, i64, i64 } %t249, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a250 + %t255 = call { ptr, i64, i64 } @finch.gen.op(ptr %t233, { ptr, i64, i64 } %t254) + store { ptr, i64, i64 } %t254, ptr %a256 + call void @finch_str_drop(ptr %a256) + store { ptr, i64, i64 } %t255, ptr %a257 + %t258 = load ptr, ptr %a1 + %t259 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } { ptr @.str.4349, i64 30, i64 0 }, ptr %a261 + store { ptr, i64, i64 } %t259, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a260 + store { ptr, i64, i64 } %t263, ptr %a265 + store { ptr, i64, i64 } { ptr @.str.4350, i64 6, i64 0 }, ptr %a266 + call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) + store { ptr, i64, i64 } %t263, ptr %a267 + call void @finch_str_drop(ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a264 + %t269 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } %t268, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t268, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.4351, i64 3, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + store { ptr, i64, i64 } %t274, ptr %a278 + call void @finch_str_drop(ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a275 + %t280 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t279) + store { ptr, i64, i64 } %t279, ptr %a281 + call void @finch_str_drop(ptr %a281) + store { ptr, i64, i64 } %t280, ptr %a282 + %t283 = load { ptr, i64, i64 }, ptr %a282 + store { ptr, i64, i64 } %t283, ptr %a284 + call void @finch_str_copy(ptr %a285, ptr %a284) + %t286 = load { ptr, i64, i64 }, ptr %a285 + %t287 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t286, 0 + %t288 = load %S.ast.Type, ptr %a114 + store %S.ast.Type %t288, ptr %a289 + call void @finch.copy.S_ast_Type(ptr %a290, ptr %a289) + %t291 = load %S.ast.Type, ptr %a290 + %t292 = insertvalue %S.gen.Val %t287, %S.ast.Type %t291, 1 + %t293 = insertvalue %S.gen.Val %t292, i1 true, 2 + call void @finch_str_drop(ptr %a282) + call void @finch_str_drop(ptr %a257) + call void @finch_str_drop(ptr %a232) + call void @finch_str_drop(ptr %a120) + call void @finch_str_drop(ptr %a119) + call void @finch.drop.S_ast_Type(ptr %a114) + call void @finch.drop.arr_str(ptr %a30) + call void @finch.drop.S_ast_Type(ptr %a5) + ret %S.gen.Val %t293 +} + +define internal void @finch.copy.S_gen_Place(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Place, ptr %src + store %S.gen.Place %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal %S.gen.Place @finch.gen.place(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.gen.Ref, align 16 + %a42 = alloca %S.gen.Place, align 16 + %a43 = alloca %S.gen.Place, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4352, i64 3, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.from6721 +logic.from6721: + br i1 %t9, label %logic.rhs6722, label %logic.end6723 +logic.rhs6722: + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) + %t14 = icmp slt i64 %t13, 0 + br label %logic.rend6724 +logic.rend6724: + br label %logic.end6723 +logic.end6723: + %t15 = phi i1 [ false, %logic.from6721 ], [ %t14, %logic.rend6724 ] + br i1 %t15, label %then6725, label %endif6727 +then6725: + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Node, ptr %a2 + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } { ptr @.str.4353, i64 28, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.4354, i64 1, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } %t28) + store { ptr, i64, i64 } %t28, ptr %a29 + call void @finch_str_drop(ptr %a29) + br label %endif6727 +endif6727: + %t30 = load ptr, ptr %a1 + %t31 = load %S.ast.Node, ptr %a2 + %t32 = load i1, ptr %a3 + %t33 = call %S.gen.Ref @finch.gen.ref(ptr %t30, %S.ast.Node %t31, i1 %t32) + store %S.gen.Ref %t33, ptr %a34 + %t35 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 0 + %t36 = load i1, ptr %t35 + %t37 = xor i1 %t36, true + br i1 %t37, label %then6728, label %endif6730 +then6728: + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t38, %S.ast.Node %t39, { ptr, i64, i64 } { ptr @.str.4355, i64 60, i64 0 }) + br label %endif6730 +endif6730: + %t40 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 1 + %t41 = load %S.gen.Place, ptr %t40 + store %S.gen.Place %t41, ptr %a42 + call void @finch.copy.S_gen_Place(ptr %a43, ptr %a42) + %t44 = load %S.gen.Place, ptr %a43 + call void @finch.drop.S_gen_Ref(ptr %a34) + ret %S.gen.Place %t44 +} + +define internal void @finch.copy.S_cimport_CConst(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CConst, ptr %src + store %S.cimport.CConst %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CConst, ptr %dst, i32 0, i32 3 + %t3 = getelementptr inbounds %S.cimport.CConst, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t2, ptr %t3) + ret void +} + +define internal %S.gen.Ref @finch.gen.ref(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca %S.cimport.CConst, align 16 + %a44 = alloca %S.cimport.CConst, align 16 + %a46 = alloca %S.cimport.CConst, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca %S.ast.Type, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca i64, align 16 + %a190 = alloca i64, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca %S.ast.Type, align 16 + %a256 = alloca %S.ast.Type, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca %S.gen.Var, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca %S.ast.Type, align 16 + %a359 = alloca %S.ast.Type, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4356, i64 3, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then6731, label %endif6733 +then6731: + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) + store i64 %t13, ptr %a14 + %t15 = load i64, ptr %a14 + %t16 = icmp slt i64 %t15, 0 + br label %logic.from6734 +logic.from6734: + br i1 %t16, label %logic.rhs6735, label %logic.end6736 +logic.rhs6735: + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic6737, label %ok6738 +panic6737: + call void @finch_panic(ptr @.str.4357, i64 3718, ptr @.str.4358) + unreachable +ok6738: + %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 26 + %t20 = getelementptr inbounds %S.cimport.CImports, ptr %t19, i32 0, i32 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = call i64 @finch_map_find(ptr %t20, ptr %a23, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t25 = icmp sge i64 %t24, 0 + br label %logic.rend6739 +logic.rend6739: + br label %logic.end6736 +logic.end6736: + %t26 = phi i1 [ false, %logic.from6734 ], [ %t25, %logic.rend6739 ] + br i1 %t26, label %then6740, label %endif6742 +then6740: + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic6743, label %ok6744 +panic6743: + call void @finch_panic(ptr @.str.4359, i64 3719, ptr @.str.4360) + unreachable +ok6744: + %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 26 + %t30 = getelementptr inbounds %S.cimport.CImports, ptr %t29, i32 0, i32 1 + %t31 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + %t34 = call i64 @finch_map_find(ptr %t30, ptr %a33, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t35 = icmp slt i64 %t34, 0 + br i1 %t35, label %map.missing6745, label %map.found6746 +map.missing6745: + store { ptr, i64, i64 } zeroinitializer, ptr %a36 + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_buf_str(ptr %a36, ptr %a37, i32 1) + call void @finch_map_missing(ptr @.str.4361, i64 3719, ptr %a36) + unreachable +map.found6746: + %t38 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t30, i32 0, i32 0 + %t39 = load ptr, ptr %t38 + %t40 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t39, i64 %t34 + %t41 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t40, i32 0, i32 2 + %t42 = load %S.cimport.CConst, ptr %t41 + store %S.cimport.CConst %t42, ptr %a43 + call void @finch.copy.S_cimport_CConst(ptr %a44, ptr %a43) + %t45 = load %S.cimport.CConst, ptr %a44 + store %S.cimport.CConst %t45, ptr %a46 + %t47 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 0 + %t48 = load i1, ptr %t47 + br i1 %t48, label %then6747, label %endif6749 +then6747: + %t49 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t50 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 3 + %t51 = load { ptr, i64, i64 }, ptr %t50 + %t52 = call { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %t51) + %t53 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t52, 0 + %t54 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4362, i64 5, i64 0 }) + %t55 = insertvalue %S.gen.Val %t53, %S.ast.Type %t54, 1 + %t56 = insertvalue %S.gen.Val %t55, i1 true, 3 + %t57 = insertvalue %S.gen.Ref %t49, %S.gen.Val %t56, 2 + call void @finch.drop.S_cimport_CConst(ptr %a46) + ret %S.gen.Ref %t57 +endif6749: + %t58 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t59 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 1 + %t60 = load i64, ptr %t59 + call void @finch_str_from_int(ptr %a61, i64 %t60) + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t62, 0 + %t64 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4363, i64 3, i64 0 }) + %t65 = insertvalue %S.gen.Val %t63, %S.ast.Type %t64, 1 + %t66 = insertvalue %S.gen.Val %t65, i1 true, 3 + %t67 = insertvalue %S.gen.Ref %t58, %S.gen.Val %t66, 2 + call void @finch.drop.S_cimport_CConst(ptr %a46) + ret %S.gen.Ref %t67 +endif6742: + %t68 = load i64, ptr %a14 + %t69 = icmp slt i64 %t68, 0 + br label %logic.from6750 +logic.from6750: + br i1 %t69, label %logic.rhs6751, label %logic.end6752 +logic.rhs6751: + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic6753, label %ok6754 +panic6753: + call void @finch_panic(ptr @.str.4364, i64 3726, ptr @.str.4365) + unreachable +ok6754: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 26 + %t73 = getelementptr inbounds %S.cimport.CImports, ptr %t72, i32 0, i32 2 + %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + store { ptr, i64, i64 } %t75, ptr %a76 + %t77 = call i64 @finch_map_find(ptr %t73, ptr %a76, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t78 = icmp sge i64 %t77, 0 + %t79 = xor i1 %t78, true + br label %logic.rend6755 +logic.rend6755: + br label %logic.end6752 +logic.end6752: + %t80 = phi i1 [ false, %logic.from6750 ], [ %t79, %logic.rend6755 ] + br label %logic.from6756 +logic.from6756: + br i1 %t80, label %logic.rhs6757, label %logic.end6758 +logic.rhs6757: + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic6759, label %ok6760 +panic6759: + call void @finch_panic(ptr @.str.4366, i64 3726, ptr @.str.4367) + unreachable +ok6760: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 26 + %t84 = getelementptr inbounds %S.cimport.CImports, ptr %t83, i32 0, i32 0 + store { ptr, i64, i64 } { ptr @.str.4368, i64 7, i64 0 }, ptr %a85 + %t86 = call i64 @finch_map_find(ptr %t84, ptr %a85, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t87 = icmp sge i64 %t86, 0 + br label %logic.rend6761 +logic.rend6761: + br label %logic.end6758 +logic.end6758: + %t88 = phi i1 [ false, %logic.from6756 ], [ %t87, %logic.rend6761 ] + br label %logic.from6762 +logic.from6762: + br i1 %t88, label %logic.rhs6763, label %logic.end6764 +logic.rhs6763: + %t89 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t90 = load { ptr, i64, i64 }, ptr %t89 + store { ptr, i64, i64 } %t90, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.4369, i64 5, i64 0 }, ptr %a92 + %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) + %t94 = icmp ne i32 %t93, 0 + br label %logic.from6765 +logic.from6765: + br i1 %t94, label %logic.end6767, label %logic.rhs6766 +logic.rhs6766: + %t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.4370, i64 6, i64 0 }, ptr %a98 + %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) + %t100 = icmp ne i32 %t99, 0 + br label %logic.rend6768 +logic.rend6768: + br label %logic.end6767 +logic.end6767: + %t101 = phi i1 [ true, %logic.from6765 ], [ %t100, %logic.rend6768 ] + br label %logic.from6769 +logic.from6769: + br i1 %t101, label %logic.end6771, label %logic.rhs6770 +logic.rhs6770: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.4371, i64 6, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br label %logic.rend6772 +logic.rend6772: + br label %logic.end6771 +logic.end6771: + %t108 = phi i1 [ true, %logic.from6769 ], [ %t107, %logic.rend6772 ] + br label %logic.rend6773 +logic.rend6773: + br label %logic.end6764 +logic.end6764: + %t109 = phi i1 [ false, %logic.from6762 ], [ %t108, %logic.rend6773 ] + br i1 %t109, label %then6774, label %endif6776 +then6774: + store { ptr, i64, i64 } { ptr @.str.4372, i64 1, i64 0 }, ptr %a110 + %t111 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.4373, i64 5, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br i1 %t116, label %then6777, label %else6778 +then6777: + %t117 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.4374, i64 1, i64 0 }, ptr %a110 + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_drop(ptr %a118) + br label %endif6779 +else6778: + %t119 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t120 = load { ptr, i64, i64 }, ptr %t119 + store { ptr, i64, i64 } %t120, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.4375, i64 6, i64 0 }, ptr %a122 + %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) + %t124 = icmp ne i32 %t123, 0 + br i1 %t124, label %then6780, label %endif6782 +then6780: + %t125 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.4376, i64 1, i64 0 }, ptr %a110 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_drop(ptr %a126) + br label %endif6782 +endif6782: + br label %endif6779 +endif6779: + %t127 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t128 = load ptr, ptr %a1 + %t129 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.4377, i64 31, i64 0 }, ptr %a131 + store { ptr, i64, i64 } %t129, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t133, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.4378, i64 1, i64 0 }, ptr %a136 + call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) + store { ptr, i64, i64 } %t133, ptr %a137 + call void @finch_str_drop(ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a134 + %t139 = call { ptr, i64, i64 } @finch.gen.op(ptr %t128, { ptr, i64, i64 } %t138) + store { ptr, i64, i64 } %t138, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t142 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4379, i64 3, i64 0 }) + %t143 = insertvalue %S.gen.Val %t141, %S.ast.Type %t142, 1 + %t144 = insertvalue %S.gen.Ref %t127, %S.gen.Val %t143, 2 + call void @finch_str_drop(ptr %a110) + ret %S.gen.Ref %t144 +endif6776: + %t145 = load i64, ptr %a14 + %t146 = icmp slt i64 %t145, 0 + br label %logic.from6783 +logic.from6783: + br i1 %t146, label %logic.rhs6784, label %logic.end6785 +logic.rhs6784: + %t147 = load ptr, ptr %a1 + %t148 = icmp eq ptr %t147, null + br i1 %t148, label %panic6786, label %ok6787 +panic6786: + call void @finch_panic(ptr @.str.4380, i64 3735, ptr @.str.4381) + unreachable +ok6787: + %t149 = getelementptr inbounds %S.gen.Gen, ptr %t147, i32 0, i32 26 + %t150 = getelementptr inbounds %S.cimport.CImports, ptr %t149, i32 0, i32 2 + %t151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t152, ptr %a153 + %t154 = call i64 @finch_map_find(ptr %t150, ptr %a153, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t155 = icmp sge i64 %t154, 0 + br label %logic.rend6788 +logic.rend6788: + br label %logic.end6785 +logic.end6785: + %t156 = phi i1 [ false, %logic.from6783 ], [ %t155, %logic.rend6788 ] + br i1 %t156, label %then6789, label %endif6791 +then6789: + %t157 = load ptr, ptr %a1 + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic6792, label %ok6793 +panic6792: + call void @finch_panic(ptr @.str.4382, i64 3736, ptr @.str.4383) + unreachable +ok6793: + %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 26 + %t161 = getelementptr inbounds %S.cimport.CImports, ptr %t160, i32 0, i32 2 + %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t163 = load { ptr, i64, i64 }, ptr %t162 + store { ptr, i64, i64 } %t163, ptr %a164 + %t165 = call i64 @finch_map_find(ptr %t161, ptr %a164, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t166 = icmp slt i64 %t165, 0 + br i1 %t166, label %map.missing6794, label %map.found6795 +map.missing6794: + store { ptr, i64, i64 } zeroinitializer, ptr %a167 + store { ptr, i64, i64 } %t163, ptr %a168 + call void @finch_buf_str(ptr %a167, ptr %a168, i32 1) + call void @finch_map_missing(ptr @.str.4384, i64 3736, ptr %a167) + unreachable +map.found6795: + %t169 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t161, i32 0, i32 0 + %t170 = load ptr, ptr %t169 + %t171 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t170, i64 %t165 + %t172 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t171, i32 0, i32 2 + %t173 = load %S.ast.Type, ptr %t172 + %t174 = load %S.ast.Node, ptr %a2 + %t175 = call %S.ast.Type @finch.gen.resolve(ptr %t157, %S.ast.Type %t173, %S.ast.Node %t174) + store %S.ast.Type %t175, ptr %a176 + %t177 = load ptr, ptr %a1 + %t178 = icmp eq ptr %t177, null + br i1 %t178, label %panic6796, label %ok6797 +panic6796: + call void @finch_panic(ptr @.str.4385, i64 3737, ptr @.str.4386) + unreachable +ok6797: + %t179 = getelementptr inbounds %S.gen.Gen, ptr %t177, i32 0, i32 40 + %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 + %t181 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t182 = load { ptr, i64, i64 }, ptr %t181 + store { ptr, i64, i64 } { ptr @.str.4387, i64 2, i64 0 }, ptr %a184 + store { ptr, i64, i64 } %t182, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a183 + store i64 -1, ptr %a187 + %t188 = load i64, ptr %t180 + %t189 = load ptr, ptr %t179 + store i64 0, ptr %a190 + br label %find.cond6798 +find.cond6798: + %t191 = load i64, ptr %a190 + %t192 = icmp slt i64 %t191, %t188 + br i1 %t192, label %find.body6799, label %find.end6802 +find.body6799: + %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t189, i64 %t191 + %t194 = load { ptr, i64, i64 }, ptr %t193 + store { ptr, i64, i64 } %t194, ptr %a195 + store { ptr, i64, i64 } %t186, ptr %a196 + %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) + %t198 = icmp ne i32 %t197, 0 + br i1 %t198, label %find.hit6800, label %find.next6801 +find.hit6800: + store i64 %t191, ptr %a187 + br label %find.end6802 +find.next6801: + %t199 = add i64 %t191, 1 + store i64 %t199, ptr %a190 + br label %find.cond6798 +find.end6802: + store { ptr, i64, i64 } %t186, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load i64, ptr %a187 + %t202 = icmp sge i64 %t201, 0 + %t203 = xor i1 %t202, true + br i1 %t203, label %then6803, label %endif6805 +then6803: + %t204 = load ptr, ptr %a1 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic6806, label %ok6807 +panic6806: + call void @finch_panic(ptr @.str.4388, i64 3738, ptr @.str.4389) + unreachable +ok6807: + %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 40 + %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 + %t208 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t209 = load { ptr, i64, i64 }, ptr %t208 + store { ptr, i64, i64 } { ptr @.str.4390, i64 2, i64 0 }, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + %t213 = load { ptr, i64, i64 }, ptr %a210 + %t214 = load i64, ptr %t207 + %t215 = add i64 %t214, 1 + call void @finch_arr_reserve(ptr %t206, i64 %t215, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t216 = load ptr, ptr %t206 + %t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i64 %t214 + store { ptr, i64, i64 } %t213, ptr %t217 + store i64 %t215, ptr %t207 + %t218 = load ptr, ptr %a1 + %t219 = icmp eq ptr %t218, null + br i1 %t219, label %panic6808, label %ok6809 +panic6808: + call void @finch_panic(ptr @.str.4391, i64 3739, ptr @.str.4392) + unreachable +ok6809: + %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 2 + %t221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t220, i32 0, i32 1 + %t222 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t223 = load { ptr, i64, i64 }, ptr %t222 + store { ptr, i64, i64 } { ptr @.str.4393, i64 1, i64 0 }, ptr %a225 + store { ptr, i64, i64 } %t223, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a224 + store { ptr, i64, i64 } %t227, ptr %a229 + store { ptr, i64, i64 } { ptr @.str.4394, i64 19, i64 0 }, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + store { ptr, i64, i64 } %t227, ptr %a231 + call void @finch_str_drop(ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a228 + %t233 = load ptr, ptr %a1 + %t234 = load %S.ast.Type, ptr %a176 + %t235 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t233, %S.ast.Type %t234) + store { ptr, i64, i64 } %t232, ptr %a237 + store { ptr, i64, i64 } %t235, ptr %a238 + call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) + store { ptr, i64, i64 } %t232, ptr %a239 + call void @finch_str_drop(ptr %a239) + store { ptr, i64, i64 } %t235, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = load { ptr, i64, i64 }, ptr %a236 + %t242 = load i64, ptr %t221 + %t243 = add i64 %t242, 1 + call void @finch_arr_reserve(ptr %t220, i64 %t243, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t244 = load ptr, ptr %t220 + %t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i64 %t242 + store { ptr, i64, i64 } %t241, ptr %t245 + store i64 %t243, ptr %t221 + br label %endif6805 +endif6805: + %t246 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t247 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t248 = load { ptr, i64, i64 }, ptr %t247 + store { ptr, i64, i64 } { ptr @.str.4395, i64 1, i64 0 }, ptr %a250 + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + %t252 = load { ptr, i64, i64 }, ptr %a249 + %t253 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t252, 0 + %t254 = load %S.ast.Type, ptr %a176 + store %S.ast.Type %t254, ptr %a255 + call void @finch.copy.S_ast_Type(ptr %a256, ptr %a255) + %t257 = load %S.ast.Type, ptr %a256 + %t258 = insertvalue %S.gen.Place %t253, %S.ast.Type %t257, 1 + %t259 = insertvalue %S.gen.Ref %t246, %S.gen.Place %t258, 1 + call void @finch.drop.S_ast_Type(ptr %a176) + ret %S.gen.Ref %t259 +endif6791: + %t260 = load i64, ptr %a14 + %t261 = icmp slt i64 %t260, 0 + br i1 %t261, label %then6810, label %endif6812 +then6810: + %t262 = load ptr, ptr %a1 + %t263 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = call i1 @finch.gen.imports(ptr %t262, { ptr, i64, i64 } %t264) + br i1 %t265, label %then6813, label %endif6815 +then6813: + %t266 = load ptr, ptr %a1 + %t267 = load %S.ast.Node, ptr %a2 + %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t269 = load { ptr, i64, i64 }, ptr %t268 + store { ptr, i64, i64 } { ptr @.str.4396, i64 1, i64 0 }, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t273, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.4397, i64 43, i64 0 }, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + %t279 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t280 = load { ptr, i64, i64 }, ptr %t279 + store { ptr, i64, i64 } %t278, ptr %a282 + store { ptr, i64, i64 } %t280, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t278, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + store { ptr, i64, i64 } %t285, ptr %a287 + store { ptr, i64, i64 } { ptr @.str.4398, i64 10, i64 0 }, ptr %a288 + call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) + store { ptr, i64, i64 } %t285, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a286 + call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t290) + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + br label %endif6815 +endif6815: + %t292 = load ptr, ptr %a1 + %t293 = load %S.ast.Node, ptr %a2 + %t294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t295 = load { ptr, i64, i64 }, ptr %t294 + store { ptr, i64, i64 } { ptr @.str.4399, i64 28, i64 0 }, ptr %a297 + store { ptr, i64, i64 } %t295, ptr %a298 + call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t299, ptr %a301 + store { ptr, i64, i64 } { ptr @.str.4400, i64 1, i64 0 }, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t299, ptr %a303 + call void @finch_str_drop(ptr %a303) + %t304 = load { ptr, i64, i64 }, ptr %a300 + call void @finch.gen.fail(ptr %t292, %S.ast.Node %t293, { ptr, i64, i64 } %t304) + store { ptr, i64, i64 } %t304, ptr %a305 + call void @finch_str_drop(ptr %a305) + br label %endif6812 +endif6812: + %t306 = load ptr, ptr %a1 + %t307 = load i64, ptr %a14 + %t308 = call %S.gen.Var @finch.gen.varAt(ptr %t306, i64 %t307) + store %S.gen.Var %t308, ptr %a309 + %t310 = load ptr, ptr %a1 + %t311 = load %S.ast.Node, ptr %a2 + %t312 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t313 = load i64, ptr %t312 + %t314 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 + %t316 = load i64, ptr %t315 + %t317 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 1 + %t318 = load %S.ast.Type, ptr %t317 + %t319 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t318) + store { ptr, i64, i64 } { ptr @.str.4401, i64 9, i64 0 }, ptr %a321 + store { ptr, i64, i64 } %t319, ptr %a322 + call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) + store { ptr, i64, i64 } %t319, ptr %a323 + call void @finch_str_drop(ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t324, ptr %a326 + store { ptr, i64, i64 } { ptr @.str.4402, i64 1, i64 0 }, ptr %a327 + call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) + store { ptr, i64, i64 } %t324, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a325 + %t330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t331 = load { ptr, i64, i64 }, ptr %t330 + store { ptr, i64, i64 } %t329, ptr %a333 + store { ptr, i64, i64 } %t331, ptr %a334 + call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) + store { ptr, i64, i64 } %t329, ptr %a335 + call void @finch_str_drop(ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a332 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.4403, i64 4, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t336, ptr %a340 + call void @finch_str_drop(ptr %a340) + %t341 = load { ptr, i64, i64 }, ptr %a337 + %t342 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 7 + %t343 = load { ptr, i64, i64 }, ptr %t342 + %t344 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 8 + %t345 = load i64, ptr %t344 + %t346 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 9 + %t347 = load i64, ptr %t346 + call void @finch.gen.noteRef(ptr %t310, %S.ast.Node %t311, i64 %t313, i64 %t316, { ptr, i64, i64 } %t341, { ptr, i64, i64 } %t343, i64 %t345, i64 %t347) + store { ptr, i64, i64 } %t341, ptr %a348 + call void @finch_str_drop(ptr %a348) + %t349 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t350 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 2 + %t351 = load { ptr, i64, i64 }, ptr %t350 + store { ptr, i64, i64 } %t351, ptr %a352 + call void @finch_str_copy(ptr %a353, ptr %a352) + %t354 = load { ptr, i64, i64 }, ptr %a353 + %t355 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t354, 0 + %t356 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 1 + %t357 = load %S.ast.Type, ptr %t356 + store %S.ast.Type %t357, ptr %a358 + call void @finch.copy.S_ast_Type(ptr %a359, ptr %a358) + %t360 = load %S.ast.Type, ptr %a359 + %t361 = insertvalue %S.gen.Place %t355, %S.ast.Type %t360, 1 + %t362 = insertvalue %S.gen.Ref %t349, %S.gen.Place %t361, 1 + call void @finch.drop.S_gen_Var(ptr %a309) + ret %S.gen.Ref %t362 +endif6733: + %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t364 = load { ptr, i64, i64 }, ptr %t363 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.4404, i64 6, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br i1 %t368, label %then6816, label %endif6818 +then6816: + %t369 = load ptr, ptr %a1 + %t370 = load %S.ast.Node, ptr %a2 + %t371 = load i1, ptr %a3 + %t372 = call %S.gen.Ref @finch.gen.member(ptr %t369, %S.ast.Node %t370, i1 %t371) + ret %S.gen.Ref %t372 +endif6818: + %t373 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t374 = load { ptr, i64, i64 }, ptr %t373 + store { ptr, i64, i64 } %t374, ptr %a375 + store { ptr, i64, i64 } { ptr @.str.4405, i64 5, i64 0 }, ptr %a376 + %t377 = call i32 @finch_str_eq(ptr %a375, ptr %a376) + %t378 = icmp ne i32 %t377, 0 + br i1 %t378, label %then6819, label %endif6821 +then6819: + %t379 = load ptr, ptr %a1 + %t380 = load %S.ast.Node, ptr %a2 + %t381 = load i1, ptr %a3 + %t382 = call %S.gen.Ref @finch.gen.index(ptr %t379, %S.ast.Node %t380, i1 %t381) + ret %S.gen.Ref %t382 +endif6821: + %t383 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t384 = load ptr, ptr %a1 + %t385 = load %S.ast.Node, ptr %a2 + %t386 = call %S.gen.Val @finch.gen.expr(ptr %t384, %S.ast.Node %t385) + %t387 = insertvalue %S.gen.Ref %t383, %S.gen.Val %t386, 2 + ret %S.gen.Ref %t387 +} + +define internal { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca i64, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4407, i64 1, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then6822, label %endif6824 +then6822: + %t13 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4408, i64 1, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a14 + %t18 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t17, ptr %a6 + store { ptr, i64, i64 } %t18, ptr %a19 + call void @finch_str_drop(ptr %a19) + br label %endif6824 +endif6824: + %t20 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.4410, i64 1, i64 0 }, ptr %a23 + %t24 = call i64 @finch_str_find(ptr %a21, ptr %a23) + %t25 = icmp sge i64 %t24, 0 + %t26 = xor i1 %t25, true + br i1 %t26, label %then6825, label %endif6827 +then6825: + %t27 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.4412, i64 1, i64 0 }, ptr %a30 + %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) + store i64 %t31, ptr %a32 + %t33 = load i64, ptr %a32 + %t34 = icmp slt i64 %t33, 0 + br i1 %t34, label %then6828, label %endif6830 +then6828: + %t35 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.4414, i64 1, i64 0 }, ptr %a38 + %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) + store i64 %t39, ptr %a32 + br label %endif6830 +endif6830: + %t40 = load i64, ptr %a32 + %t41 = icmp slt i64 %t40, 0 + br i1 %t41, label %then6831, label %endif6833 +then6831: + %t42 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t42, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.4415, i64 2, i64 0 }, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a43 + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t46 +endif6833: + %t47 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t47, ptr %a48 + %t50 = load i64, ptr %a32 + call void @finch_str_sub(ptr %a49, ptr %a48, i64 0, i64 %t50, ptr @.str.4416, i64 3776) + %t51 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.4417, i64 2, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + %t57 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t57, ptr %a58 + %t60 = load i64, ptr %a32 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t62 = load i64, ptr %t61 + call void @finch_str_sub(ptr %a59, ptr %a58, i64 %t60, i64 %t62, ptr @.str.4418, i64 3776) + %t63 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t56, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t56, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t69 +endif6827: + %t70 = load { ptr, i64, i64 }, ptr %a6 + ret { ptr, i64, i64 } %t70 +} + +define internal i64 @finch.gen.enumNamed(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4419, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from6834 +logic.from6834: + br i1 %t8, label %logic.rhs6835, label %logic.end6836 +logic.rhs6835: + %t9 = load ptr, ptr %a1 + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) + %t13 = icmp slt i64 %t12, 0 + br label %logic.rend6837 +logic.rend6837: + br label %logic.end6836 +logic.end6836: + %t14 = phi i1 [ false, %logic.from6834 ], [ %t13, %logic.rend6837 ] + br i1 %t14, label %then6838, label %endif6840 +then6838: + %t15 = load ptr, ptr %a1 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic6841, label %ok6842 +panic6841: + call void @finch_panic(ptr @.str.4420, i64 3784, ptr @.str.4421) + unreachable +ok6842: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = call i64 @finch.gen.findEnum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) + ret i64 %t22 +endif6840: + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.4422, i64 6, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.from6843 +logic.from6843: + br i1 %t28, label %logic.rhs6844, label %logic.end6845 +logic.rhs6844: + %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 0, %t31 + br i1 %t32, label %range6846, label %inrange6847 +range6846: + call void @finch_panic_index(ptr @.str.4423, i64 3786, i64 0, i64 %t31) + unreachable +inrange6847: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 + %t36 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.4424, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.rend6848 +logic.rend6848: + br label %logic.end6845 +logic.end6845: + %t41 = phi i1 [ false, %logic.from6843 ], [ %t40, %logic.rend6848 ] + br label %logic.from6849 +logic.from6849: + br i1 %t41, label %logic.rhs6850, label %logic.end6851 +logic.rhs6850: + %t42 = load ptr, ptr %a1 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 0, %t45 + br i1 %t46, label %range6852, label %inrange6853 +range6852: + call void @finch_panic_index(ptr @.str.4425, i64 3786, i64 0, i64 %t45) + unreachable +inrange6853: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 + %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) + %t52 = icmp slt i64 %t51, 0 + br label %logic.rend6854 +logic.rend6854: + br label %logic.end6851 +logic.end6851: + %t53 = phi i1 [ false, %logic.from6849 ], [ %t52, %logic.rend6854 ] + br label %logic.from6855 +logic.from6855: + br i1 %t53, label %logic.rhs6856, label %logic.end6857 +logic.rhs6856: + %t54 = load ptr, ptr %a1 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t56 = load { ptr, i64, i64 }, ptr %t55 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 0, %t57 + br i1 %t58, label %range6858, label %inrange6859 +range6858: + call void @finch_panic_index(ptr @.str.4426, i64 3786, i64 0, i64 %t57) + unreachable +inrange6859: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 + %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) + br label %logic.rend6860 +logic.rend6860: + br label %logic.end6857 +logic.end6857: + %t64 = phi i1 [ false, %logic.from6855 ], [ %t63, %logic.rend6860 ] + br i1 %t64, label %then6861, label %endif6863 +then6861: + %t65 = load ptr, ptr %a1 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t67 = load { ptr, i64, i64 }, ptr %t66 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 0, %t68 + br i1 %t69, label %range6864, label %inrange6865 +range6864: + call void @finch_panic_index(ptr @.str.4427, i64 3787, i64 0, i64 %t68) + unreachable +inrange6865: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 + %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + %t76 = call i64 @finch.gen.findEnum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) + ret i64 %t76 +endif6863: + ret i64 -1 +} + +define internal i64 @finch.gen.sumNamed(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4428, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from6866 +logic.from6866: + br i1 %t8, label %logic.rhs6867, label %logic.end6868 +logic.rhs6867: + %t9 = load ptr, ptr %a1 + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) + %t13 = icmp slt i64 %t12, 0 + br label %logic.rend6869 +logic.rend6869: + br label %logic.end6868 +logic.end6868: + %t14 = phi i1 [ false, %logic.from6866 ], [ %t13, %logic.rend6869 ] + br i1 %t14, label %then6870, label %endif6872 +then6870: + %t15 = load ptr, ptr %a1 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic6873, label %ok6874 +panic6873: + call void @finch_panic(ptr @.str.4429, i64 3795, ptr @.str.4430) + unreachable +ok6874: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = call i64 @finch.gen.findSum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) + ret i64 %t22 +endif6872: + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.4431, i64 6, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.from6875 +logic.from6875: + br i1 %t28, label %logic.rhs6876, label %logic.end6877 +logic.rhs6876: + %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 0, %t31 + br i1 %t32, label %range6878, label %inrange6879 +range6878: + call void @finch_panic_index(ptr @.str.4432, i64 3797, i64 0, i64 %t31) + unreachable +inrange6879: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 + %t36 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.4433, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.rend6880 +logic.rend6880: + br label %logic.end6877 +logic.end6877: + %t41 = phi i1 [ false, %logic.from6875 ], [ %t40, %logic.rend6880 ] + br label %logic.from6881 +logic.from6881: + br i1 %t41, label %logic.rhs6882, label %logic.end6883 +logic.rhs6882: + %t42 = load ptr, ptr %a1 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 0, %t45 + br i1 %t46, label %range6884, label %inrange6885 +range6884: + call void @finch_panic_index(ptr @.str.4434, i64 3797, i64 0, i64 %t45) + unreachable +inrange6885: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 + %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) + %t52 = icmp slt i64 %t51, 0 + br label %logic.rend6886 +logic.rend6886: + br label %logic.end6883 +logic.end6883: + %t53 = phi i1 [ false, %logic.from6881 ], [ %t52, %logic.rend6886 ] + br label %logic.from6887 +logic.from6887: + br i1 %t53, label %logic.rhs6888, label %logic.end6889 +logic.rhs6888: + %t54 = load ptr, ptr %a1 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t56 = load { ptr, i64, i64 }, ptr %t55 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 0, %t57 + br i1 %t58, label %range6890, label %inrange6891 +range6890: + call void @finch_panic_index(ptr @.str.4435, i64 3797, i64 0, i64 %t57) + unreachable +inrange6891: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 + %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) + br label %logic.rend6892 +logic.rend6892: + br label %logic.end6889 +logic.end6889: + %t64 = phi i1 [ false, %logic.from6887 ], [ %t63, %logic.rend6892 ] + br i1 %t64, label %then6893, label %endif6895 +then6893: + %t65 = load ptr, ptr %a1 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t67 = load { ptr, i64, i64 }, ptr %t66 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 0, %t68 + br i1 %t69, label %range6896, label %inrange6897 +range6896: + call void @finch_panic_index(ptr @.str.4436, i64 3798, i64 0, i64 %t68) + unreachable +inrange6897: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 + %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + %t76 = call i64 @finch.gen.findSum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) + ret i64 %t76 +endif6895: + ret i64 -1 +} + +define internal i64 @finch.gen.sumVariant(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a15 = alloca %S.gen.SumDef, align 16 + %a16 = alloca %S.gen.SumDef, align 16 + %a18 = alloca %S.gen.SumDef, align 16 + %a22 = alloca i64, align 16 + %a25 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca i64, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic6898, label %ok6899 +panic6898: + call void @finch_panic(ptr @.str.4437, i64 3804, ptr @.str.4438) + unreachable +ok6899: + %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 22 + %t8 = load i64, ptr %a2 + %t9 = load { ptr, i64, i64 }, ptr %t7 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range6900, label %inrange6901 +range6900: + call void @finch_panic_index(ptr @.str.4439, i64 3804, i64 %t8, i64 %t10) + unreachable +inrange6901: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.gen.SumDef, ptr %t12, i64 %t8 + %t14 = load %S.gen.SumDef, ptr %t13 + store %S.gen.SumDef %t14, ptr %a15 + call void @finch.copy.S_gen_SumDef(ptr %a16, ptr %a15) + %t17 = load %S.gen.SumDef, ptr %a16 + store %S.gen.SumDef %t17, ptr %a18 + %t19 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 2 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %a3 + store i64 -1, ptr %a22 + %t23 = load i64, ptr %t20 + %t24 = load ptr, ptr %t19 + store i64 0, ptr %a25 + br label %find.cond6902 +find.cond6902: + %t26 = load i64, ptr %a25 + %t27 = icmp slt i64 %t26, %t23 + br i1 %t27, label %find.body6903, label %find.end6906 +find.body6903: + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } %t21, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br i1 %t33, label %find.hit6904, label %find.next6905 +find.hit6904: + store i64 %t26, ptr %a22 + br label %find.end6906 +find.next6905: + %t34 = add i64 %t26, 1 + store i64 %t34, ptr %a25 + br label %find.cond6902 +find.end6906: + %t35 = load i64, ptr %a22 + store i64 %t35, ptr %a36 + %t37 = load i64, ptr %a36 + %t38 = icmp slt i64 %t37, 0 + br i1 %t38, label %then6907, label %endif6909 +then6907: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a4 + %t41 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.4440, i64 9, i64 0 }, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t46, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.4441, i64 17, i64 0 }, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + %t52 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t51, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t51, ptr %a56 + call void @finch_str_drop(ptr %a56) + %t57 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } %t57, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.4442, i64 11, i64 0 }, ptr %a60 + call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) + store { ptr, i64, i64 } %t57, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load { ptr, i64, i64 }, ptr %a58 + %t63 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 2 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4443, i64 2, i64 0 }, ptr %a65 + call void @finch_str_join(ptr %a66, ptr %t63, ptr %a65) + %t67 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t62, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t62, ptr %a71 + call void @finch_str_drop(ptr %a71) + store { ptr, i64, i64 } %t67, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.4444, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif6909 +endif6909: + %t80 = load i64, ptr %a36 + call void @finch.drop.S_gen_SumDef(ptr %a18) + ret i64 %t80 +} + +define internal %S.gen.Val @finch.gen.sumMake(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a16 = alloca %S.gen.SumDef, align 16 + %a17 = alloca %S.gen.SumDef, align 16 + %a19 = alloca %S.gen.SumDef, align 16 + %a25 = alloca i64, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca i64, align 16 + %a178 = alloca %S.ast.Node, align 16 + %a179 = alloca %S.ast.Node, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic6910, label %ok6911 +panic6910: + call void @finch_panic(ptr @.str.4445, i64 3814, ptr @.str.4446) + unreachable +ok6911: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 22 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range6912, label %inrange6913 +range6912: + call void @finch_panic_index(ptr @.str.4447, i64 3814, i64 %t9, i64 %t11) + unreachable +inrange6913: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.SumDef, ptr %t13, i64 %t9 + %t15 = load %S.gen.SumDef, ptr %t14 + store %S.gen.SumDef %t15, ptr %a16 + call void @finch.copy.S_gen_SumDef(ptr %a17, ptr %a16) + %t18 = load %S.gen.SumDef, ptr %a17 + store %S.gen.SumDef %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = load i64, ptr %a2 + %t22 = load { ptr, i64, i64 }, ptr %a3 + %t23 = load %S.ast.Node, ptr %a5 + %t24 = call i64 @finch.gen.sumVariant(ptr %t20, i64 %t21, { ptr, i64, i64 } %t22, %S.ast.Node %t23) + store i64 %t24, ptr %a25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 + %t29 = load i64, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %t28 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 %t29, %t31 + br i1 %t32, label %range6914, label %inrange6915 +range6914: + call void @finch_panic_index(ptr @.str.4448, i64 3816, i64 %t29, i64 %t31) + unreachable +inrange6915: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds i64, ptr %t33, i64 %t29 + %t35 = load i64, ptr %t34 + %t36 = icmp ne i64 %t27, %t35 + br i1 %t36, label %then6916, label %endif6918 +then6916: + %t37 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 + %t38 = load i64, ptr %a25 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range6919, label %inrange6920 +range6919: + call void @finch_panic_index(ptr @.str.4449, i64 3817, i64 %t38, i64 %t40) + unreachable +inrange6920: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds i64, ptr %t42, i64 %t38 + %t44 = load i64, ptr %t43 + %t45 = icmp eq i64 %t44, 0 + br i1 %t45, label %then6921, label %endif6923 +then6921: + %t46 = load ptr, ptr %a1 + %t47 = load %S.ast.Node, ptr %a5 + %t48 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.4450, i64 22, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a49 + %t53 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t52, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t52, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t59, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.4451, i64 1, i64 0 }, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + store { ptr, i64, i64 } %t59, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a60 + %t65 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t64, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t64, ptr %a69 + call void @finch_str_drop(ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a66 + call void @finch.gen.fail(ptr %t46, %S.ast.Node %t47, { ptr, i64, i64 } %t70) + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + br label %endif6923 +endif6923: + %t72 = load ptr, ptr %a1 + %t73 = load %S.ast.Node, ptr %a5 + %t74 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.4452, i64 7, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a75 + %t79 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 + %t80 = load i64, ptr %a25 + %t81 = load { ptr, i64, i64 }, ptr %t79 + %t82 = extractvalue { ptr, i64, i64 } %t81, 1 + %t83 = icmp uge i64 %t80, %t82 + br i1 %t83, label %range6924, label %inrange6925 +range6924: + call void @finch_panic_index(ptr @.str.4453, i64 3820, i64 %t80, i64 %t82) + unreachable +inrange6925: + %t84 = extractvalue { ptr, i64, i64 } %t81, 0 + %t85 = getelementptr inbounds i64, ptr %t84, i64 %t80 + %t86 = load i64, ptr %t85 + call void @finch_str_from_int(ptr %a87, i64 %t86) + %t88 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t78, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t78, ptr %a92 + call void @finch_str_drop(ptr %a92) + store { ptr, i64, i64 } %t88, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t94, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.4454, i64 19, i64 0 }, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a95 + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t101 = load i64, ptr %t100 + call void @finch_str_from_int(ptr %a102, i64 %t101) + %t103 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t99, ptr %a105 + store { ptr, i64, i64 } %t103, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t99, ptr %a107 + call void @finch_str_drop(ptr %a107) + store { ptr, i64, i64 } %t103, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a104 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.4455, i64 2, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t109, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + %t115 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t114, ptr %a118 + store { ptr, i64, i64 } %t116, ptr %a119 + call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) + store { ptr, i64, i64 } %t114, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.4456, i64 1, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t126, ptr %a129 + store { ptr, i64, i64 } %t127, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t126, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t132, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.4457, i64 5, i64 0 }, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + call void @finch.gen.fail(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t137) + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_drop(ptr %a138) + br label %endif6918 +endif6918: + store { ptr, i64, i64 } zeroinitializer, ptr %a139 + store { ptr, i64, i64 } zeroinitializer, ptr %a140 + %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 + %t142 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.4458, i64 3, i64 0 }, 0 + %t143 = load i64, ptr %a25 + call void @finch_str_from_int(ptr %a144, i64 %t143) + %t145 = load { ptr, i64, i64 }, ptr %a144 + %t146 = insertvalue %S.ast.Node %t142, { ptr, i64, i64 } %t145, 4 + %t147 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 11 + %t148 = load i64, ptr %t147 + %t149 = insertvalue %S.ast.Node %t146, i64 %t148, 11 + %t150 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 + %t151 = load i64, ptr %t150 + %t152 = insertvalue %S.ast.Node %t149, i64 %t151, 12 + %t153 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 13 + %t154 = load i64, ptr %t153 + %t155 = insertvalue %S.ast.Node %t152, i64 %t154, 13 + %t156 = load i64, ptr %t141 + %t157 = add i64 %t156, 1 + call void @finch_arr_reserve(ptr %a139, i64 %t157, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t158 = load ptr, ptr %a139 + %t159 = getelementptr inbounds %S.ast.Node, ptr %t158, i64 %t156 + store %S.ast.Node %t155, ptr %t159 + store i64 %t157, ptr %t141 + %t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %a140, i32 0, i32 1 + %t161 = load i64, ptr %t160 + %t162 = add i64 %t161, 1 + call void @finch_arr_reserve(ptr %a140, i64 %t162, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t163 = load ptr, ptr %a140 + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i64 %t161 + store { ptr, i64, i64 } { ptr @.str.4459, i64 3, i64 0 }, ptr %t164 + store i64 %t162, ptr %t160 + %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t166 = load i64, ptr %t165 + store i64 0, ptr %a167 + br label %for.cond6926 +for.cond6926: + %t168 = load i64, ptr %a167 + %t169 = icmp slt i64 %t168, %t166 + br i1 %t169, label %for.body6927, label %for.end6929 +for.body6927: + %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 + %t171 = load i64, ptr %a167 + %t172 = load { ptr, i64, i64 }, ptr %a4 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 %t171, %t173 + br i1 %t174, label %range6930, label %inrange6931 +range6930: + call void @finch_panic_index(ptr @.str.4460, i64 3827, i64 %t171, i64 %t173) + unreachable +inrange6931: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t171 + %t177 = load %S.ast.Node, ptr %t176 + store %S.ast.Node %t177, ptr %a178 + call void @finch.copy.S_ast_Node(ptr %a179, ptr %a178) + %t180 = load %S.ast.Node, ptr %a179 + %t181 = load i64, ptr %t170 + %t182 = add i64 %t181, 1 + call void @finch_arr_reserve(ptr %a139, i64 %t182, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t183 = load ptr, ptr %a139 + %t184 = getelementptr inbounds %S.ast.Node, ptr %t183, i64 %t181 + store %S.ast.Node %t180, ptr %t184 + store i64 %t182, ptr %t170 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %a140, i32 0, i32 1 + %t186 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t186, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.4461, i64 1, i64 0 }, ptr %a189 + call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a187 + %t191 = load i64, ptr %a167 + call void @finch_str_from_int(ptr %a192, i64 %t191) + %t193 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } %t190, ptr %a195 + store { ptr, i64, i64 } %t193, ptr %a196 + call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) + store { ptr, i64, i64 } %t190, ptr %a197 + call void @finch_str_drop(ptr %a197) + store { ptr, i64, i64 } %t193, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a194 + %t200 = load i64, ptr %t185 + %t201 = add i64 %t200, 1 + call void @finch_arr_reserve(ptr %a140, i64 %t201, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t202 = load ptr, ptr %a140 + %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 %t200 + store { ptr, i64, i64 } %t199, ptr %t203 + store i64 %t201, ptr %t185 + br label %for.step6928 +for.step6928: + %t204 = load i64, ptr %a167 + %t205 = add i64 %t204, 1 + store i64 %t205, ptr %a167 + br label %for.cond6926 +for.end6929: + %t206 = load ptr, ptr %a1 + %t207 = load %S.ast.Node, ptr %a5 + %t208 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 + %t209 = load i64, ptr %t208 + %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t211 = load i64, ptr %t210 + %t212 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t213 = load { ptr, i64, i64 }, ptr %t212 + store { ptr, i64, i64 } { ptr @.str.4462, i64 9, i64 0 }, ptr %a215 + store { ptr, i64, i64 } %t213, ptr %a216 + call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t217, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.4463, i64 1, i64 0 }, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t217, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + %t223 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t222, ptr %a225 + store { ptr, i64, i64 } %t223, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t222, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + store { ptr, i64, i64 } %t228, ptr %a230 + store { ptr, i64, i64 } { ptr @.str.4464, i64 4, i64 0 }, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t228, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + call void @finch.gen.noteRef(ptr %t206, %S.ast.Node %t207, i64 %t209, i64 %t211, { ptr, i64, i64 } %t233, { ptr, i64, i64 } { ptr @.str.4465, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t233, ptr %a234 + call void @finch_str_drop(ptr %a234) + %t235 = load ptr, ptr %a1 + %t236 = load ptr, ptr %a1 + %t237 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = call i64 @finch.gen.findStruct(ptr %t236, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t240) + %t242 = load { ptr, i64, i64 }, ptr %a139 + %t243 = load { ptr, i64, i64 }, ptr %a140 + %t244 = load %S.ast.Node, ptr %a5 + %t245 = call %S.gen.Val @finch.gen.construct(ptr %t235, i64 %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, %S.ast.Node %t244) + call void @finch.drop.arr_str(ptr %a140) + call void @finch.drop.arr_S_ast_Node(ptr %a139) + call void @finch.drop.S_gen_SumDef(ptr %a19) + ret %S.gen.Val %t245 +} + +define internal %S.gen.SumPat @finch.gen.sumPattern(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a14 = alloca %S.gen.SumDef, align 16 + %a15 = alloca %S.gen.SumDef, align 16 + %a17 = alloca %S.gen.SumDef, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca i64, align 16 + %a124 = alloca %S.ast.Node, align 16 + %a125 = alloca %S.ast.Node, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca i64, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca i64, align 16 + %a251 = alloca %S.ast.Node, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic6932, label %ok6933 +panic6932: + call void @finch_panic(ptr @.str.4466, i64 3836, ptr @.str.4467) + unreachable +ok6933: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 + %t7 = load i64, ptr %a3 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range6934, label %inrange6935 +range6934: + call void @finch_panic_index(ptr @.str.4468, i64 3836, i64 %t7, i64 %t9) + unreachable +inrange6935: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.SumDef, ptr %t11, i64 %t7 + %t13 = load %S.gen.SumDef, ptr %t12 + store %S.gen.SumDef %t13, ptr %a14 + call void @finch.copy.S_gen_SumDef(ptr %a15, ptr %a14) + %t16 = load %S.gen.SumDef, ptr %a15 + store %S.gen.SumDef %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.4469, i64 0, i64 0 }, ptr %a18 + store { ptr, i64, i64 } zeroinitializer, ptr %a19 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.4470, i64 3, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br label %logic.from6936 +logic.from6936: + br i1 %t25, label %logic.rhs6937, label %logic.end6938 +logic.rhs6937: + %t26 = load ptr, ptr %a1 + %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = call i64 @finch.gen.lookup(ptr %t26, { ptr, i64, i64 } %t28) + %t30 = icmp slt i64 %t29, 0 + br label %logic.rend6939 +logic.rend6939: + br label %logic.end6938 +logic.end6938: + %t31 = phi i1 [ false, %logic.from6936 ], [ %t30, %logic.rend6939 ] + br i1 %t31, label %then6940, label %else6941 +then6940: + %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_copy(ptr %a35, ptr %a34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + %t37 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t36, ptr %a18 + store { ptr, i64, i64 } %t37, ptr %a38 + call void @finch_str_drop(ptr %a38) + br label %endif6942 +else6941: + %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.4471, i64 4, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then6943, label %else6944 +then6943: + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t46 = load { ptr, i64, i64 }, ptr %t45 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_copy(ptr %a48, ptr %a47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + %t50 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t49, ptr %a18 + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t53, ptr %a54 + call void @finch.copy.arr_S_ast_Node(ptr %a55, ptr %a54) + %t56 = load { ptr, i64, i64 }, ptr %a55 + %t57 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t56, ptr %a19 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch.drop.arr_S_ast_Node(ptr %a58) + br label %endif6945 +else6944: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.4472, i64 6, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br label %logic.from6946 +logic.from6946: + br i1 %t64, label %logic.rhs6947, label %logic.end6948 +logic.rhs6947: + %t65 = load ptr, ptr %a1 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t67 = load { ptr, i64, i64 }, ptr %t66 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 0, %t68 + br i1 %t69, label %range6949, label %inrange6950 +range6949: + call void @finch_panic_index(ptr @.str.4473, i64 3844, i64 0, i64 %t68) + unreachable +inrange6950: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 + %t72 = load %S.ast.Node, ptr %t71 + %t73 = call i64 @finch.gen.sumNamed(ptr %t65, %S.ast.Node %t72) + %t74 = load i64, ptr %a3 + %t75 = icmp eq i64 %t73, %t74 + br label %logic.rend6951 +logic.rend6951: + br label %logic.end6948 +logic.end6948: + %t76 = phi i1 [ false, %logic.from6946 ], [ %t75, %logic.rend6951 ] + br i1 %t76, label %then6952, label %else6953 +then6952: + %t77 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t78 = load { ptr, i64, i64 }, ptr %t77 + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_copy(ptr %a80, ptr %a79) + %t81 = load { ptr, i64, i64 }, ptr %a80 + %t82 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t81, ptr %a18 + store { ptr, i64, i64 } %t82, ptr %a83 + call void @finch_str_drop(ptr %a83) + br label %endif6954 +else6953: + %t84 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.4474, i64 6, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + br label %logic.from6955 +logic.from6955: + br i1 %t89, label %logic.rhs6956, label %logic.end6957 +logic.rhs6956: + %t90 = load ptr, ptr %a1 + %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t92 = load { ptr, i64, i64 }, ptr %t91 + %t93 = extractvalue { ptr, i64, i64 } %t92, 1 + %t94 = icmp uge i64 0, %t93 + br i1 %t94, label %range6958, label %inrange6959 +range6958: + call void @finch_panic_index(ptr @.str.4475, i64 3846, i64 0, i64 %t93) + unreachable +inrange6959: + %t95 = extractvalue { ptr, i64, i64 } %t92, 0 + %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 0 + %t97 = load %S.ast.Node, ptr %t96 + %t98 = call i64 @finch.gen.sumNamed(ptr %t90, %S.ast.Node %t97) + %t99 = load i64, ptr %a3 + %t100 = icmp eq i64 %t98, %t99 + br label %logic.rend6960 +logic.rend6960: + br label %logic.end6957 +logic.end6957: + %t101 = phi i1 [ false, %logic.from6955 ], [ %t100, %logic.rend6960 ] + br i1 %t101, label %then6961, label %else6962 +then6961: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch_str_copy(ptr %a105, ptr %a104) + %t106 = load { ptr, i64, i64 }, ptr %a105 + %t107 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t106, ptr %a18 + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t109, i32 0, i32 1 + %t111 = load i64, ptr %t110 + store i64 1, ptr %a112 + br label %for.cond6964 +for.cond6964: + %t113 = load i64, ptr %a112 + %t114 = icmp slt i64 %t113, %t111 + br i1 %t114, label %for.body6965, label %for.end6967 +for.body6965: + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t117 = load i64, ptr %a112 + %t118 = load { ptr, i64, i64 }, ptr %t116 + %t119 = extractvalue { ptr, i64, i64 } %t118, 1 + %t120 = icmp uge i64 %t117, %t119 + br i1 %t120, label %range6968, label %inrange6969 +range6968: + call void @finch_panic_index(ptr @.str.4476, i64 3849, i64 %t117, i64 %t119) + unreachable +inrange6969: + %t121 = extractvalue { ptr, i64, i64 } %t118, 0 + %t122 = getelementptr inbounds %S.ast.Node, ptr %t121, i64 %t117 + %t123 = load %S.ast.Node, ptr %t122 + store %S.ast.Node %t123, ptr %a124 + call void @finch.copy.S_ast_Node(ptr %a125, ptr %a124) + %t126 = load %S.ast.Node, ptr %a125 + %t127 = load i64, ptr %t115 + %t128 = add i64 %t127, 1 + call void @finch_arr_reserve(ptr %a19, i64 %t128, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t129 = load ptr, ptr %a19 + %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 %t127 + store %S.ast.Node %t126, ptr %t130 + store i64 %t128, ptr %t115 + br label %for.step6966 +for.step6966: + %t131 = load i64, ptr %a112 + %t132 = add i64 %t131, 1 + store i64 %t132, ptr %a112 + br label %for.cond6964 +for.end6967: + br label %endif6963 +else6962: + %t133 = load ptr, ptr %a1 + %t134 = load %S.ast.Node, ptr %a2 + %t135 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 1 + %t136 = load { ptr, i64, i64 }, ptr %t135 + store { ptr, i64, i64 } { ptr @.str.4477, i64 33, i64 0 }, ptr %a138 + store { ptr, i64, i64 } %t136, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + %t140 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t140, ptr %a142 + store { ptr, i64, i64 } { ptr @.str.4478, i64 10, i64 0 }, ptr %a143 + call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) + store { ptr, i64, i64 } %t140, ptr %a144 + call void @finch_str_drop(ptr %a144) + %t145 = load { ptr, i64, i64 }, ptr %a141 + %t146 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 2 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4479, i64 2, i64 0 }, ptr %a148 + call void @finch_str_join(ptr %a149, ptr %t146, ptr %a148) + %t150 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t145, ptr %a152 + store { ptr, i64, i64 } %t150, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t145, ptr %a154 + call void @finch_str_drop(ptr %a154) + store { ptr, i64, i64 } %t150, ptr %a155 + call void @finch_str_drop(ptr %a155) + %t156 = load { ptr, i64, i64 }, ptr %a151 + store { ptr, i64, i64 } %t156, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.4480, i64 1, i64 0 }, ptr %a159 + call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) + store { ptr, i64, i64 } %t156, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a157 + call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } %t161) + store { ptr, i64, i64 } %t161, ptr %a162 + call void @finch_str_drop(ptr %a162) + br label %endif6963 +endif6963: + br label %endif6954 +endif6954: + br label %endif6945 +endif6945: + br label %endif6942 +endif6942: + %t163 = load ptr, ptr %a1 + %t164 = load i64, ptr %a3 + %t165 = load { ptr, i64, i64 }, ptr %a18 + %t166 = load %S.ast.Node, ptr %a2 + %t167 = call i64 @finch.gen.sumVariant(ptr %t163, i64 %t164, { ptr, i64, i64 } %t165, %S.ast.Node %t166) + store i64 %t167, ptr %a168 + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 + %t172 = load i64, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %t171 + %t174 = extractvalue { ptr, i64, i64 } %t173, 1 + %t175 = icmp uge i64 %t172, %t174 + br i1 %t175, label %range6970, label %inrange6971 +range6970: + call void @finch_panic_index(ptr @.str.4481, i64 3855, i64 %t172, i64 %t174) + unreachable +inrange6971: + %t176 = extractvalue { ptr, i64, i64 } %t173, 0 + %t177 = getelementptr inbounds i64, ptr %t176, i64 %t172 + %t178 = load i64, ptr %t177 + %t179 = icmp ne i64 %t170, %t178 + br i1 %t179, label %then6972, label %endif6974 +then6972: + %t180 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 + %t181 = load i64, ptr %a168 + %t182 = load { ptr, i64, i64 }, ptr %t180 + %t183 = extractvalue { ptr, i64, i64 } %t182, 1 + %t184 = icmp uge i64 %t181, %t183 + br i1 %t184, label %range6975, label %inrange6976 +range6975: + call void @finch_panic_index(ptr @.str.4482, i64 3856, i64 %t181, i64 %t183) + unreachable +inrange6976: + %t185 = extractvalue { ptr, i64, i64 } %t182, 0 + %t186 = getelementptr inbounds i64, ptr %t185, i64 %t181 + %t187 = load i64, ptr %t186 + %t188 = icmp eq i64 %t187, 0 + br i1 %t188, label %then6977, label %endif6979 +then6977: + %t189 = load ptr, ptr %a1 + %t190 = load %S.ast.Node, ptr %a2 + %t191 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t191, ptr %a193 + store { ptr, i64, i64 } { ptr @.str.4483, i64 27, i64 0 }, ptr %a194 + call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a192 + %t196 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t195, ptr %a198 + store { ptr, i64, i64 } %t196, ptr %a199 + call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) + store { ptr, i64, i64 } %t195, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load { ptr, i64, i64 }, ptr %a197 + call void @finch.gen.fail(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t201) + store { ptr, i64, i64 } %t201, ptr %a202 + call void @finch_str_drop(ptr %a202) + br label %endif6979 +endif6979: + %t203 = load ptr, ptr %a1 + %t204 = load %S.ast.Node, ptr %a2 + %t205 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t205, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.4484, i64 7, i64 0 }, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + %t209 = load { ptr, i64, i64 }, ptr %a206 + %t210 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 + %t211 = load i64, ptr %a168 + %t212 = load { ptr, i64, i64 }, ptr %t210 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 %t211, %t213 + br i1 %t214, label %range6980, label %inrange6981 +range6980: + call void @finch_panic_index(ptr @.str.4485, i64 3859, i64 %t211, i64 %t213) + unreachable +inrange6981: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds i64, ptr %t215, i64 %t211 + %t217 = load i64, ptr %t216 + call void @finch_str_from_int(ptr %a218, i64 %t217) + %t219 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t209, ptr %a221 + store { ptr, i64, i64 } %t219, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + store { ptr, i64, i64 } %t209, ptr %a223 + call void @finch_str_drop(ptr %a223) + store { ptr, i64, i64 } %t219, ptr %a224 + call void @finch_str_drop(ptr %a224) + %t225 = load { ptr, i64, i64 }, ptr %a220 + store { ptr, i64, i64 } %t225, ptr %a227 + store { ptr, i64, i64 } { ptr @.str.4486, i64 27, i64 0 }, ptr %a228 + call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228) + store { ptr, i64, i64 } %t225, ptr %a229 + call void @finch_str_drop(ptr %a229) + %t230 = load { ptr, i64, i64 }, ptr %a226 + %t231 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t230, ptr %a233 + store { ptr, i64, i64 } %t231, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t230, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t236, ptr %a238 + store { ptr, i64, i64 } { ptr @.str.4487, i64 27, i64 0 }, ptr %a239 + call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) + store { ptr, i64, i64 } %t236, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = load { ptr, i64, i64 }, ptr %a237 + call void @finch.gen.fail(ptr %t203, %S.ast.Node %t204, { ptr, i64, i64 } %t241) + store { ptr, i64, i64 } %t241, ptr %a242 + call void @finch_str_drop(ptr %a242) + br label %endif6974 +endif6974: + store i64 0, ptr %a243 + br label %each.cond6982 +each.cond6982: + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t245 = load i64, ptr %t244 + %t246 = load i64, ptr %a243 + %t247 = icmp slt i64 %t246, %t245 + br i1 %t247, label %each.body6983, label %each.end6985 +each.body6983: + %t248 = load ptr, ptr %a19 + %t249 = getelementptr inbounds %S.ast.Node, ptr %t248, i64 %t246 + %t250 = load %S.ast.Node, ptr %t249 + store %S.ast.Node %t250, ptr %a251 + %t252 = getelementptr inbounds %S.ast.Node, ptr %a251, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.4488, i64 3, i64 0 }, ptr %a255 + %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) + %t257 = icmp eq i32 %t256, 0 + br i1 %t257, label %then6986, label %endif6988 +then6986: + %t258 = load ptr, ptr %a1 + %t259 = load %S.ast.Node, ptr %a251 + call void @finch.gen.fail(ptr %t258, %S.ast.Node %t259, { ptr, i64, i64 } { ptr @.str.4489, i64 50, i64 0 }) + br label %endif6988 +endif6988: + br label %each.step6984 +each.step6984: + %t260 = load i64, ptr %a243 + %t261 = add i64 %t260, 1 + store i64 %t261, ptr %a243 + br label %each.cond6982 +each.end6985: + %t262 = load i64, ptr %a168 + %t263 = insertvalue %S.gen.SumPat zeroinitializer, i64 %t262, 0 + %t264 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t264, ptr %a265 + call void @finch.copy.arr_S_ast_Node(ptr %a266, ptr %a265) + %t267 = load { ptr, i64, i64 }, ptr %a266 + %t268 = insertvalue %S.gen.SumPat %t263, { ptr, i64, i64 } %t267, 1 + call void @finch.drop.arr_S_ast_Node(ptr %a19) + call void @finch_str_drop(ptr %a18) + call void @finch.drop.S_gen_SumDef(ptr %a17) + ret %S.gen.SumPat %t268 +} + +define internal %S.gen.Val @finch.gen.enumValue(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a14 = alloca %S.gen.EnumDef, align 16 + %a15 = alloca %S.gen.EnumDef, align 16 + %a17 = alloca %S.gen.EnumDef, align 16 + %a22 = alloca i64, align 16 + %a25 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca i64, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic6989, label %ok6990 +panic6989: + call void @finch_panic(ptr @.str.4490, i64 3871, ptr @.str.4491) + unreachable +ok6990: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 + %t7 = load i64, ptr %a3 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range6991, label %inrange6992 +range6991: + call void @finch_panic_index(ptr @.str.4492, i64 3871, i64 %t7, i64 %t9) + unreachable +inrange6992: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 + %t13 = load %S.gen.EnumDef, ptr %t12 + store %S.gen.EnumDef %t13, ptr %a14 + call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) + %t16 = load %S.gen.EnumDef, ptr %a15 + store %S.gen.EnumDef %t16, ptr %a17 + %t18 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store i64 -1, ptr %a22 + %t23 = load i64, ptr %t19 + %t24 = load ptr, ptr %t18 + store i64 0, ptr %a25 + br label %find.cond6993 +find.cond6993: + %t26 = load i64, ptr %a25 + %t27 = icmp slt i64 %t26, %t23 + br i1 %t27, label %find.body6994, label %find.end6997 +find.body6994: + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } %t21, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br i1 %t33, label %find.hit6995, label %find.next6996 +find.hit6995: + store i64 %t26, ptr %a22 + br label %find.end6997 +find.next6996: + %t34 = add i64 %t26, 1 + store i64 %t34, ptr %a25 + br label %find.cond6993 +find.end6997: + %t35 = load i64, ptr %a22 + store i64 %t35, ptr %a36 + %t37 = load i64, ptr %a36 + %t38 = icmp slt i64 %t37, 0 + br i1 %t38, label %then6998, label %endif7000 +then6998: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a2 + %t41 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.4493, i64 9, i64 0 }, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t46, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.4494, i64 17, i64 0 }, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t51, ptr %a55 + store { ptr, i64, i64 } %t53, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t51, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t58, ptr %a60 + store { ptr, i64, i64 } { ptr @.str.4495, i64 11, i64 0 }, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + %t64 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4496, i64 2, i64 0 }, ptr %a66 + call void @finch_str_join(ptr %a67, ptr %t64, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t63, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t63, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t68, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.4497, i64 1, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t79) + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif7000 +endif7000: + %t81 = load ptr, ptr %a1 + %t82 = load %S.ast.Node, ptr %a2 + %t83 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t84 = load i64, ptr %t83 + %t85 = add i64 %t84, 1 + %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load i64, ptr %t87 + %t89 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t90 = load { ptr, i64, i64 }, ptr %t89 + store { ptr, i64, i64 } { ptr @.str.4498, i64 9, i64 0 }, ptr %a92 + store { ptr, i64, i64 } %t90, ptr %a93 + call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } %t94, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.4499, i64 1, i64 0 }, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a95 + %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t101 = load { ptr, i64, i64 }, ptr %t100 + store { ptr, i64, i64 } %t99, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t99, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.4500, i64 3, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t113 = load i64, ptr %a36 + %t114 = load { ptr, i64, i64 }, ptr %t112 + %t115 = extractvalue { ptr, i64, i64 } %t114, 1 + %t116 = icmp uge i64 %t113, %t115 + br i1 %t116, label %range7001, label %inrange7002 +range7001: + call void @finch_panic_index(ptr @.str.4501, i64 3876, i64 %t113, i64 %t115) + unreachable +inrange7002: + %t117 = extractvalue { ptr, i64, i64 } %t114, 0 + %t118 = getelementptr inbounds i64, ptr %t117, i64 %t113 + %t119 = load i64, ptr %t118 + call void @finch_str_from_int(ptr %a120, i64 %t119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t111, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t111, ptr %a125 + call void @finch_str_drop(ptr %a125) + store { ptr, i64, i64 } %t121, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t127, ptr %a129 + store { ptr, i64, i64 } { ptr @.str.4502, i64 4, i64 0 }, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t127, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + call void @finch.gen.noteRef(ptr %t81, %S.ast.Node %t82, i64 %t85, i64 %t88, { ptr, i64, i64 } %t132, { ptr, i64, i64 } { ptr @.str.4503, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t132, ptr %a133 + call void @finch_str_drop(ptr %a133) + %t134 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t135 = load i64, ptr %a36 + %t136 = load { ptr, i64, i64 }, ptr %t134 + %t137 = extractvalue { ptr, i64, i64 } %t136, 1 + %t138 = icmp uge i64 %t135, %t137 + br i1 %t138, label %range7003, label %inrange7004 +range7003: + call void @finch_panic_index(ptr @.str.4504, i64 3877, i64 %t135, i64 %t137) + unreachable +inrange7004: + %t139 = extractvalue { ptr, i64, i64 } %t136, 0 + %t140 = getelementptr inbounds i64, ptr %t139, i64 %t135 + %t141 = load i64, ptr %t140 + call void @finch_str_from_int(ptr %a142, i64 %t141) + %t143 = load { ptr, i64, i64 }, ptr %a142 + %t144 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t143, 0 + %t145 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4505, i64 4, i64 0 }, 0 + %t146 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t147 = load { ptr, i64, i64 }, ptr %t146 + store { ptr, i64, i64 } %t147, ptr %a148 + call void @finch_str_copy(ptr %a149, ptr %a148) + %t150 = load { ptr, i64, i64 }, ptr %a149 + %t151 = insertvalue %S.ast.Type %t145, { ptr, i64, i64 } %t150, 2 + %t152 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 + %t153 = load { ptr, i64, i64 }, ptr %t152 + store { ptr, i64, i64 } %t153, ptr %a154 + call void @finch_str_copy(ptr %a155, ptr %a154) + %t156 = load { ptr, i64, i64 }, ptr %a155 + %t157 = insertvalue %S.ast.Type %t151, { ptr, i64, i64 } %t156, 3 + %t158 = insertvalue %S.gen.Val %t144, %S.ast.Type %t157, 1 + call void @finch.drop.S_gen_EnumDef(ptr %a17) + ret %S.gen.Val %t158 +} + +define internal %S.gen.Ref @finch.gen.member(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a13 = alloca i64, align 16 + %a25 = alloca i64, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca i64, align 16 + %a157 = alloca %S.gen.Ref, align 16 + %a161 = alloca %S.ast.Type, align 16 + %a162 = alloca %S.ast.Type, align 16 + %a164 = alloca %S.ast.Type, align 16 + %a170 = alloca %S.ast.Type, align 16 + %a171 = alloca %S.ast.Type, align 16 + %a174 = alloca %S.ast.Type, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca %S.ast.Type, align 16 + %a239 = alloca %S.ast.Type, align 16 + %a241 = alloca %S.ast.Type, align 16 + %a242 = alloca i1, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca i64, align 16 + %a268 = alloca i64, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca %S.ast.Type, align 16 + %a297 = alloca %S.ast.Type, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca %S.ast.Type, align 16 + %a330 = alloca %S.ast.Type, align 16 + %a335 = alloca %S.gen.Ref, align 16 + %a337 = alloca %S.ast.Type, align 16 + %a338 = alloca %S.ast.Type, align 16 + %a341 = alloca %S.ast.Type, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca %S.ast.Type, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a613 = alloca { ptr, i64, i64 }, align 16 + %a614 = alloca { ptr, i64, i64 }, align 16 + %a616 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a618 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca %S.gen.StructDef, align 16 + %a693 = alloca %S.gen.StructDef, align 16 + %a695 = alloca %S.gen.StructDef, align 16 + %a700 = alloca i64, align 16 + %a703 = alloca i64, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca i64, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a746 = alloca { ptr, i64, i64 }, align 16 + %a748 = alloca { ptr, i64, i64 }, align 16 + %a749 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca %S.ast.Type, align 16 + %a769 = alloca %S.ast.Type, align 16 + %a771 = alloca %S.ast.Type, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca { ptr, i64, i64 }, align 16 + %a813 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a817 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a832 = alloca { ptr, i64, i64 }, align 16 + %a842 = alloca { ptr, i64, i64 }, align 16 + %a844 = alloca { ptr, i64, i64 }, align 16 + %a845 = alloca { ptr, i64, i64 }, align 16 + %a846 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a852 = alloca { ptr, i64, i64 }, align 16 + %a855 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca { ptr, i64, i64 }, align 16 + %a860 = alloca %S.ast.Type, align 16 + %a861 = alloca %S.ast.Type, align 16 + %a869 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a871 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a882 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a885 = alloca { ptr, i64, i64 }, align 16 + %a887 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca { ptr, i64, i64 }, align 16 + %a900 = alloca { ptr, i64, i64 }, align 16 + %a902 = alloca { ptr, i64, i64 }, align 16 + %a903 = alloca { ptr, i64, i64 }, align 16 + %a904 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a912 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a917 = alloca %S.ast.Type, align 16 + %a918 = alloca %S.ast.Type, align 16 + %a921 = alloca %S.gen.Val, align 16 + %a935 = alloca %S.ast.Type, align 16 + %a936 = alloca %S.ast.Type, align 16 + %a941 = alloca %S.gen.Val, align 16 + %a947 = alloca %S.gen.Val, align 16 + %a948 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range7005, label %inrange7006 +range7005: + call void @finch_panic_index(ptr @.str.4506, i64 3881, i64 0, i64 %t7) + unreachable +inrange7006: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call i64 @finch.gen.sumNamed(ptr %t4, %S.ast.Node %t11) + store i64 %t12, ptr %a13 + %t14 = load i64, ptr %a13 + %t15 = icmp sge i64 %t14, 0 + br i1 %t15, label %then7007, label %endif7009 +then7007: + %t16 = load i1, ptr %a3 + br i1 %t16, label %then7010, label %endif7012 +then7010: + %t17 = load ptr, ptr %a1 + %t18 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t17, %S.ast.Node %t18, { ptr, i64, i64 } { ptr @.str.4507, i64 37, i64 0 }) + br label %endif7012 +endif7012: + %t19 = load ptr, ptr %a1 + %t20 = load i64, ptr %a13 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load %S.ast.Node, ptr %a2 + %t24 = call i64 @finch.gen.sumVariant(ptr %t19, i64 %t20, { ptr, i64, i64 } %t22, %S.ast.Node %t23) + store i64 %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic7013, label %ok7014 +panic7013: + call void @finch_panic(ptr @.str.4508, i64 3887, ptr @.str.4509) + unreachable +ok7014: + %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 22 + %t29 = load i64, ptr %a13 + %t30 = load { ptr, i64, i64 }, ptr %t28 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 %t29, %t31 + br i1 %t32, label %range7015, label %inrange7016 +range7015: + call void @finch_panic_index(ptr @.str.4510, i64 3887, i64 %t29, i64 %t31) + unreachable +inrange7016: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.gen.SumDef, ptr %t33, i64 %t29 + %t35 = getelementptr inbounds %S.gen.SumDef, ptr %t34, i32 0, i32 3 + %t36 = load i64, ptr %a25 + %t37 = load { ptr, i64, i64 }, ptr %t35 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range7017, label %inrange7018 +range7017: + call void @finch_panic_index(ptr @.str.4511, i64 3887, i64 %t36, i64 %t38) + unreachable +inrange7018: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds i64, ptr %t40, i64 %t36 + %t42 = load i64, ptr %t41 + %t43 = icmp sgt i64 %t42, 0 + br i1 %t43, label %then7019, label %endif7021 +then7019: + %t44 = load ptr, ptr %a1 + %t45 = load %S.ast.Node, ptr %a2 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.4512, i64 7, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a48 + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic7022, label %ok7023 +panic7022: + call void @finch_panic(ptr @.str.4513, i64 3888, ptr @.str.4514) + unreachable +ok7023: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 22 + %t55 = load i64, ptr %a13 + %t56 = load { ptr, i64, i64 }, ptr %t54 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 %t55, %t57 + br i1 %t58, label %range7024, label %inrange7025 +range7024: + call void @finch_panic_index(ptr @.str.4515, i64 3888, i64 %t55, i64 %t57) + unreachable +inrange7025: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds %S.gen.SumDef, ptr %t59, i64 %t55 + %t61 = getelementptr inbounds %S.gen.SumDef, ptr %t60, i32 0, i32 3 + %t62 = load i64, ptr %a25 + %t63 = load { ptr, i64, i64 }, ptr %t61 + %t64 = extractvalue { ptr, i64, i64 } %t63, 1 + %t65 = icmp uge i64 %t62, %t64 + br i1 %t65, label %range7026, label %inrange7027 +range7026: + call void @finch_panic_index(ptr @.str.4516, i64 3888, i64 %t62, i64 %t64) + unreachable +inrange7027: + %t66 = extractvalue { ptr, i64, i64 } %t63, 0 + %t67 = getelementptr inbounds i64, ptr %t66, i64 %t62 + %t68 = load i64, ptr %t67 + call void @finch_str_from_int(ptr %a69, i64 %t68) + %t70 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t51, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t51, ptr %a74 + call void @finch_str_drop(ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t76, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.4517, i64 11, i64 0 }, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + store { ptr, i64, i64 } %t76, ptr %a80 + call void @finch_str_drop(ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a77 + %t82 = load ptr, ptr %a1 + %t83 = icmp eq ptr %t82, null + br i1 %t83, label %panic7028, label %ok7029 +panic7028: + call void @finch_panic(ptr @.str.4518, i64 3888, ptr @.str.4519) + unreachable +ok7029: + %t84 = getelementptr inbounds %S.gen.Gen, ptr %t82, i32 0, i32 22 + %t85 = load i64, ptr %a13 + %t86 = load { ptr, i64, i64 }, ptr %t84 + %t87 = extractvalue { ptr, i64, i64 } %t86, 1 + %t88 = icmp uge i64 %t85, %t87 + br i1 %t88, label %range7030, label %inrange7031 +range7030: + call void @finch_panic_index(ptr @.str.4520, i64 3888, i64 %t85, i64 %t87) + unreachable +inrange7031: + %t89 = extractvalue { ptr, i64, i64 } %t86, 0 + %t90 = getelementptr inbounds %S.gen.SumDef, ptr %t89, i64 %t85 + %t91 = getelementptr inbounds %S.gen.SumDef, ptr %t90, i32 0, i32 1 + %t92 = load { ptr, i64, i64 }, ptr %t91 + store { ptr, i64, i64 } %t81, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t81, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.4521, i64 1, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.4522, i64 5, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t109, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + call void @finch.gen.fail(ptr %t44, %S.ast.Node %t45, { ptr, i64, i64 } %t114) + store { ptr, i64, i64 } %t114, ptr %a115 + call void @finch_str_drop(ptr %a115) + br label %endif7021 +endif7021: + store { ptr, i64, i64 } zeroinitializer, ptr %a116 + %t117 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t118 = load ptr, ptr %a1 + %t119 = load i64, ptr %a13 + %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %t120 + %t122 = load { ptr, i64, i64 }, ptr %a116 + %t123 = load %S.ast.Node, ptr %a2 + %t124 = call %S.gen.Val @finch.gen.sumMake(ptr %t118, i64 %t119, { ptr, i64, i64 } %t121, { ptr, i64, i64 } %t122, %S.ast.Node %t123) + %t125 = insertvalue %S.gen.Ref %t117, %S.gen.Val %t124, 2 + call void @finch.drop.arr_S_ast_Node(ptr %a116) + ret %S.gen.Ref %t125 +endif7009: + %t126 = load ptr, ptr %a1 + %t127 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t128 = load { ptr, i64, i64 }, ptr %t127 + %t129 = extractvalue { ptr, i64, i64 } %t128, 1 + %t130 = icmp uge i64 0, %t129 + br i1 %t130, label %range7032, label %inrange7033 +range7032: + call void @finch_panic_index(ptr @.str.4523, i64 3893, i64 0, i64 %t129) + unreachable +inrange7033: + %t131 = extractvalue { ptr, i64, i64 } %t128, 0 + %t132 = getelementptr inbounds %S.ast.Node, ptr %t131, i64 0 + %t133 = load %S.ast.Node, ptr %t132 + %t134 = call i64 @finch.gen.enumNamed(ptr %t126, %S.ast.Node %t133) + store i64 %t134, ptr %a135 + %t136 = load i64, ptr %a135 + %t137 = icmp sge i64 %t136, 0 + br i1 %t137, label %then7034, label %endif7036 +then7034: + %t138 = load i1, ptr %a3 + br i1 %t138, label %then7037, label %endif7039 +then7037: + %t139 = load ptr, ptr %a1 + %t140 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t139, %S.ast.Node %t140, { ptr, i64, i64 } { ptr @.str.4524, i64 37, i64 0 }) + br label %endif7039 +endif7039: + %t141 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t142 = load ptr, ptr %a1 + %t143 = load %S.ast.Node, ptr %a2 + %t144 = load i64, ptr %a135 + %t145 = call %S.gen.Val @finch.gen.enumValue(ptr %t142, %S.ast.Node %t143, i64 %t144) + %t146 = insertvalue %S.gen.Ref %t141, %S.gen.Val %t145, 2 + ret %S.gen.Ref %t146 +endif7036: + %t147 = load ptr, ptr %a1 + %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t149 = load { ptr, i64, i64 }, ptr %t148 + %t150 = extractvalue { ptr, i64, i64 } %t149, 1 + %t151 = icmp uge i64 0, %t150 + br i1 %t151, label %range7040, label %inrange7041 +range7040: + call void @finch_panic_index(ptr @.str.4525, i64 3900, i64 0, i64 %t150) + unreachable +inrange7041: + %t152 = extractvalue { ptr, i64, i64 } %t149, 0 + %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 0 + %t154 = load %S.ast.Node, ptr %t153 + %t155 = load i1, ptr %a3 + %t156 = call %S.gen.Ref @finch.gen.ref(ptr %t147, %S.ast.Node %t154, i1 %t155) + store %S.gen.Ref %t156, ptr %a157 + %t158 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t159 = getelementptr inbounds %S.gen.Val, ptr %t158, i32 0, i32 1 + %t160 = load %S.ast.Type, ptr %t159 + store %S.ast.Type %t160, ptr %a161 + call void @finch.copy.S_ast_Type(ptr %a162, ptr %a161) + %t163 = load %S.ast.Type, ptr %a162 + store %S.ast.Type %t163, ptr %a164 + %t165 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t166 = load i1, ptr %t165 + br i1 %t166, label %then7042, label %endif7044 +then7042: + %t167 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t168 = getelementptr inbounds %S.gen.Place, ptr %t167, i32 0, i32 1 + %t169 = load %S.ast.Type, ptr %t168 + store %S.ast.Type %t169, ptr %a170 + call void @finch.copy.S_ast_Type(ptr %a171, ptr %a170) + %t172 = load %S.ast.Type, ptr %a171 + %t173 = load %S.ast.Type, ptr %a164 + store %S.ast.Type %t172, ptr %a164 + store %S.ast.Type %t173, ptr %a174 + call void @finch.drop.S_ast_Type(ptr %a174) + br label %endif7044 +endif7044: + %t175 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t176 = load { ptr, i64, i64 }, ptr %t175 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.4526, i64 3, i64 0 }, ptr %a178 + %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %then7045, label %endif7047 +then7045: + %t181 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t182 = getelementptr inbounds %S.gen.Val, ptr %t181, i32 0, i32 0 + %t183 = load { ptr, i64, i64 }, ptr %t182 + store { ptr, i64, i64 } %t183, ptr %a184 + call void @finch_str_copy(ptr %a185, ptr %a184) + %t186 = load { ptr, i64, i64 }, ptr %a185 + store { ptr, i64, i64 } %t186, ptr %a187 + %t188 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t189 = load i1, ptr %t188 + br i1 %t189, label %then7048, label %endif7050 +then7048: + %t190 = load ptr, ptr %a1 + %t191 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + %t194 = call { ptr, i64, i64 } @finch.gen.load(ptr %t190, { ptr, i64, i64 } { ptr @.str.4527, i64 3, i64 0 }, { ptr, i64, i64 } %t193) + %t195 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t194, ptr %a187 + store { ptr, i64, i64 } %t195, ptr %a196 + call void @finch_str_drop(ptr %a196) + br label %endif7050 +endif7050: + %t197 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 + %t199 = load i64, ptr %t198 + %t200 = icmp eq i64 %t199, 0 + br i1 %t200, label %then7051, label %endif7053 +then7051: + %t201 = load ptr, ptr %a1 + %t202 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t201, %S.ast.Node %t202, { ptr, i64, i64 } { ptr @.str.4528, i64 57, i64 0 }) + br label %endif7053 +endif7053: + %t203 = load ptr, ptr %a1 + %t204 = load ptr, ptr %a1 + %t205 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.4529, i64 12, i64 0 }, ptr %a207 + store { ptr, i64, i64 } %t205, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + %t209 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t209, ptr %a211 + store { ptr, i64, i64 } { ptr @.str.4530, i64 6, i64 0 }, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t209, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + %t215 = call { ptr, i64, i64 } @finch.gen.op(ptr %t204, { ptr, i64, i64 } %t214) + store { ptr, i64, i64 } %t214, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t218 = load { ptr, i64, i64 }, ptr %t217 + store { ptr, i64, i64 } { ptr @.str.4531, i64 6, i64 0 }, ptr %a220 + store { ptr, i64, i64 } %t218, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.4532, i64 18, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t203, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t227, %S.ast.Node %t228) + store { ptr, i64, i64 } %t215, ptr %a229 + call void @finch_str_drop(ptr %a229) + store { ptr, i64, i64 } %t227, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t232 = load { ptr, i64, i64 }, ptr %t231 + %t233 = extractvalue { ptr, i64, i64 } %t232, 1 + %t234 = icmp uge i64 0, %t233 + br i1 %t234, label %range7054, label %inrange7055 +range7054: + call void @finch_panic_index(ptr @.str.4533, i64 3914, i64 0, i64 %t233) + unreachable +inrange7055: + %t235 = extractvalue { ptr, i64, i64 } %t232, 0 + %t236 = getelementptr inbounds %S.ast.Type, ptr %t235, i64 0 + %t237 = load %S.ast.Type, ptr %t236 + store %S.ast.Type %t237, ptr %a238 + call void @finch.copy.S_ast_Type(ptr %a239, ptr %a238) + %t240 = load %S.ast.Type, ptr %a239 + store %S.ast.Type %t240, ptr %a241 + store i1 false, ptr %a242 + %t243 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 + %t244 = load { ptr, i64, i64 }, ptr %t243 + store { ptr, i64, i64 } %t244, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.4534, i64 6, i64 0 }, ptr %a246 + %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) + %t248 = icmp ne i32 %t247, 0 + br i1 %t248, label %then7056, label %endif7058 +then7056: + %t249 = load ptr, ptr %a1 + %t250 = icmp eq ptr %t249, null + br i1 %t250, label %panic7059, label %ok7060 +panic7059: + call void @finch_panic(ptr @.str.4535, i64 3917, ptr @.str.4536) + unreachable +ok7060: + %t251 = getelementptr inbounds %S.gen.Gen, ptr %t249, i32 0, i32 16 + %t252 = load ptr, ptr %a1 + %t253 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 3 + %t254 = load { ptr, i64, i64 }, ptr %t253 + %t255 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 2 + %t256 = load { ptr, i64, i64 }, ptr %t255 + %t257 = call i64 @finch.gen.findStruct(ptr %t252, { ptr, i64, i64 } %t254, { ptr, i64, i64 } %t256) + %t258 = load { ptr, i64, i64 }, ptr %t251 + %t259 = extractvalue { ptr, i64, i64 } %t258, 1 + %t260 = icmp uge i64 %t257, %t259 + br i1 %t260, label %range7061, label %inrange7062 +range7061: + call void @finch_panic_index(ptr @.str.4537, i64 3917, i64 %t257, i64 %t259) + unreachable +inrange7062: + %t261 = extractvalue { ptr, i64, i64 } %t258, 0 + %t262 = getelementptr inbounds %S.gen.StructDef, ptr %t261, i64 %t257 + %t263 = getelementptr inbounds %S.gen.StructDef, ptr %t262, i32 0, i32 11 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + store i64 -1, ptr %a265 + %t266 = load i64, ptr %t264 + %t267 = load ptr, ptr %t263 + store i64 0, ptr %a268 + br label %find.cond7063 +find.cond7063: + %t269 = load i64, ptr %a268 + %t270 = icmp slt i64 %t269, %t266 + br i1 %t270, label %find.body7064, label %find.end7067 +find.body7064: + %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i64 %t269 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } %t272, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.4538, i64 5, i64 0 }, ptr %a274 + %t275 = call i32 @finch_str_eq(ptr %a273, ptr %a274) + %t276 = icmp ne i32 %t275, 0 + br i1 %t276, label %find.hit7065, label %find.next7066 +find.hit7065: + store i64 %t269, ptr %a265 + br label %find.end7067 +find.next7066: + %t277 = add i64 %t269, 1 + store i64 %t277, ptr %a268 + br label %find.cond7063 +find.end7067: + %t278 = load i64, ptr %a265 + %t279 = icmp sge i64 %t278, 0 + store i1 %t279, ptr %a242 + br label %endif7058 +endif7058: + %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.4539, i64 5, i64 0 }, ptr %a283 + %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) + %t285 = icmp ne i32 %t284, 0 + br label %logic.from7068 +logic.from7068: + br i1 %t285, label %logic.rhs7069, label %logic.end7070 +logic.rhs7069: + %t286 = load i1, ptr %a242 + %t287 = xor i1 %t286, true + br label %logic.rend7071 +logic.rend7071: + br label %logic.end7070 +logic.end7070: + %t288 = phi i1 [ false, %logic.from7068 ], [ %t287, %logic.rend7071 ] + br i1 %t288, label %then7072, label %endif7074 +then7072: + %t289 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t290 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_copy(ptr %a292, ptr %a291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + %t294 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t293, 0 + %t295 = load %S.ast.Type, ptr %a241 + store %S.ast.Type %t295, ptr %a296 + call void @finch.copy.S_ast_Type(ptr %a297, ptr %a296) + %t298 = load %S.ast.Type, ptr %a297 + %t299 = insertvalue %S.gen.Place %t294, %S.ast.Type %t298, 1 + %t300 = insertvalue %S.gen.Ref %t289, %S.gen.Place %t299, 1 + call void @finch.drop.S_ast_Type(ptr %a241) + call void @finch_str_drop(ptr %a187) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t300 +endif7074: + %t301 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store { ptr, i64, i64 } %t302, ptr %a303 + store { ptr, i64, i64 } { ptr @.str.4540, i64 6, i64 0 }, ptr %a304 + %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) + %t306 = icmp eq i32 %t305, 0 + br i1 %t306, label %then7075, label %endif7077 +then7075: + %t307 = load ptr, ptr %a1 + %t308 = load %S.ast.Node, ptr %a2 + %t309 = load %S.ast.Type, ptr %a164 + %t310 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t309) + store { ptr, i64, i64 } { ptr @.str.4541, i64 2, i64 0 }, ptr %a312 + store { ptr, i64, i64 } %t310, ptr %a313 + call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) + store { ptr, i64, i64 } %t310, ptr %a314 + call void @finch_str_drop(ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a311 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.4542, i64 43, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + call void @finch.gen.fail(ptr %t307, %S.ast.Node %t308, { ptr, i64, i64 } %t320) + store { ptr, i64, i64 } %t320, ptr %a321 + call void @finch_str_drop(ptr %a321) + br label %endif7077 +endif7077: + %t322 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t323 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t323, ptr %a324 + call void @finch_str_copy(ptr %a325, ptr %a324) + %t326 = load { ptr, i64, i64 }, ptr %a325 + %t327 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t326, 0 + %t328 = load %S.ast.Type, ptr %a241 + store %S.ast.Type %t328, ptr %a329 + call void @finch.copy.S_ast_Type(ptr %a330, ptr %a329) + %t331 = load %S.ast.Type, ptr %a330 + %t332 = insertvalue %S.gen.Place %t327, %S.ast.Type %t331, 1 + %t333 = insertvalue %S.gen.Ref %t322, %S.gen.Place %t332, 1 + %t334 = load %S.gen.Ref, ptr %a157 + store %S.gen.Ref %t333, ptr %a157 + store %S.gen.Ref %t334, ptr %a335 + call void @finch.drop.S_gen_Ref(ptr %a335) + %t336 = load %S.ast.Type, ptr %a241 + store %S.ast.Type %t336, ptr %a337 + call void @finch.copy.S_ast_Type(ptr %a338, ptr %a337) + %t339 = load %S.ast.Type, ptr %a338 + %t340 = load %S.ast.Type, ptr %a164 + store %S.ast.Type %t339, ptr %a164 + store %S.ast.Type %t340, ptr %a341 + call void @finch.drop.S_ast_Type(ptr %a341) + call void @finch.drop.S_ast_Type(ptr %a241) + call void @finch_str_drop(ptr %a187) + br label %endif7047 +endif7047: + %t342 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t343 = load { ptr, i64, i64 }, ptr %t342 + store { ptr, i64, i64 } %t343, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.4543, i64 5, i64 0 }, ptr %a345 + %t346 = call i32 @finch_str_eq(ptr %a344, ptr %a345) + %t347 = icmp ne i32 %t346, 0 + br i1 %t347, label %then7078, label %endif7080 +then7078: + %t348 = load i1, ptr %a3 + br i1 %t348, label %then7081, label %endif7083 +then7081: + %t349 = load ptr, ptr %a1 + %t350 = load %S.ast.Node, ptr %a2 + %t351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t352 = load { ptr, i64, i64 }, ptr %t351 + store { ptr, i64, i64 } { ptr @.str.4544, i64 1, i64 0 }, ptr %a354 + store { ptr, i64, i64 } %t352, ptr %a355 + call void @finch_str_concat(ptr %a353, ptr %a354, ptr %a355) + %t356 = load { ptr, i64, i64 }, ptr %a353 + store { ptr, i64, i64 } %t356, ptr %a358 + store { ptr, i64, i64 } { ptr @.str.4545, i64 26, i64 0 }, ptr %a359 + call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) + store { ptr, i64, i64 } %t356, ptr %a360 + call void @finch_str_drop(ptr %a360) + %t361 = load { ptr, i64, i64 }, ptr %a357 + call void @finch.gen.fail(ptr %t349, %S.ast.Node %t350, { ptr, i64, i64 } %t361) + store { ptr, i64, i64 } %t361, ptr %a362 + call void @finch_str_drop(ptr %a362) + br label %endif7083 +endif7083: + %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t364 = load { ptr, i64, i64 }, ptr %t363 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.4546, i64 3, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br i1 %t368, label %then7084, label %endif7086 +then7084: + %t369 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t370 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 4 + %t371 = load i64, ptr %t370 + call void @finch_str_from_int(ptr %a372, i64 %t371) + %t373 = load { ptr, i64, i64 }, ptr %a372 + %t374 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t373, 0 + %t375 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4547, i64 3, i64 0 }) + %t376 = insertvalue %S.gen.Val %t374, %S.ast.Type %t375, 1 + %t377 = insertvalue %S.gen.Val %t376, i1 true, 3 + %t378 = insertvalue %S.gen.Ref %t369, %S.gen.Val %t377, 2 + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t378 +endif7086: + %t379 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t380 = load { ptr, i64, i64 }, ptr %t379 + store { ptr, i64, i64 } %t380, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.4548, i64 3, i64 0 }, ptr %a382 + %t383 = call i32 @finch_str_eq(ptr %a381, ptr %a382) + %t384 = icmp eq i32 %t383, 0 + br i1 %t384, label %then7087, label %endif7089 +then7087: + %t385 = load ptr, ptr %a1 + %t386 = load %S.ast.Node, ptr %a2 + %t387 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t388 = load { ptr, i64, i64 }, ptr %t387 + store { ptr, i64, i64 } { ptr @.str.4549, i64 34, i64 0 }, ptr %a390 + store { ptr, i64, i64 } %t388, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a389 + store { ptr, i64, i64 } %t392, ptr %a394 + store { ptr, i64, i64 } { ptr @.str.4550, i64 1, i64 0 }, ptr %a395 + call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) + store { ptr, i64, i64 } %t392, ptr %a396 + call void @finch_str_drop(ptr %a396) + %t397 = load { ptr, i64, i64 }, ptr %a393 + call void @finch.gen.fail(ptr %t385, %S.ast.Node %t386, { ptr, i64, i64 } %t397) + store { ptr, i64, i64 } %t397, ptr %a398 + call void @finch_str_drop(ptr %a398) + br label %endif7089 +endif7089: + %t399 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t400 = load i1, ptr %t399 + %t401 = xor i1 %t400, true + br i1 %t401, label %then7090, label %endif7092 +then7090: + %t402 = load ptr, ptr %a1 + %t403 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4551, i64 48, i64 0 }) + br label %endif7092 +endif7092: + %t404 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t405 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t406 = getelementptr inbounds %S.gen.Place, ptr %t405, i32 0, i32 0 + %t407 = load { ptr, i64, i64 }, ptr %t406 + store { ptr, i64, i64 } %t407, ptr %a408 + call void @finch_str_copy(ptr %a409, ptr %a408) + %t410 = load { ptr, i64, i64 }, ptr %a409 + %t411 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t410, 0 + %t412 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t413 = load { ptr, i64, i64 }, ptr %t412 + %t414 = extractvalue { ptr, i64, i64 } %t413, 1 + %t415 = icmp uge i64 0, %t414 + br i1 %t415, label %range7093, label %inrange7094 +range7093: + call void @finch_panic_index(ptr @.str.4552, i64 3941, i64 0, i64 %t414) + unreachable +inrange7094: + %t416 = extractvalue { ptr, i64, i64 } %t413, 0 + %t417 = getelementptr inbounds %S.ast.Type, ptr %t416, i64 0 + %t418 = load %S.ast.Type, ptr %t417 + %t419 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t418) + %t420 = insertvalue %S.gen.Val %t411, %S.ast.Type %t419, 1 + %t421 = insertvalue %S.gen.Ref %t404, %S.gen.Val %t420, 2 + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t421 +endif7080: + %t422 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t423 = load { ptr, i64, i64 }, ptr %t422 + store { ptr, i64, i64 } %t423, ptr %a424 + store { ptr, i64, i64 } { ptr @.str.4553, i64 5, i64 0 }, ptr %a425 + %t426 = call i32 @finch_str_eq(ptr %a424, ptr %a425) + %t427 = icmp ne i32 %t426, 0 + br label %logic.from7095 +logic.from7095: + br i1 %t427, label %logic.end7097, label %logic.rhs7096 +logic.rhs7096: + %t428 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t429 = load { ptr, i64, i64 }, ptr %t428 + store { ptr, i64, i64 } %t429, ptr %a430 + store { ptr, i64, i64 } { ptr @.str.4554, i64 3, i64 0 }, ptr %a431 + %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) + %t433 = icmp ne i32 %t432, 0 + br label %logic.rend7098 +logic.rend7098: + br label %logic.end7097 +logic.end7097: + %t434 = phi i1 [ true, %logic.from7095 ], [ %t433, %logic.rend7098 ] + br label %logic.from7099 +logic.from7099: + br i1 %t434, label %logic.rhs7100, label %logic.end7101 +logic.rhs7100: + %t435 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t436 = load { ptr, i64, i64 }, ptr %t435 + store { ptr, i64, i64 } %t436, ptr %a437 + store { ptr, i64, i64 } { ptr @.str.4555, i64 3, i64 0 }, ptr %a438 + %t439 = call i32 @finch_str_eq(ptr %a437, ptr %a438) + %t440 = icmp ne i32 %t439, 0 + br label %logic.rend7102 +logic.rend7102: + br label %logic.end7101 +logic.end7101: + %t441 = phi i1 [ false, %logic.from7099 ], [ %t440, %logic.rend7102 ] + br i1 %t441, label %then7103, label %endif7105 +then7103: + %t442 = load i1, ptr %a3 + br i1 %t442, label %then7106, label %endif7108 +then7106: + %t443 = load ptr, ptr %a1 + %t444 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t443, %S.ast.Node %t444, { ptr, i64, i64 } { ptr @.str.4556, i64 30, i64 0 }) + br label %endif7108 +endif7108: + %t445 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t446 = load i1, ptr %t445 + %t447 = xor i1 %t446, true + br label %logic.from7109 +logic.from7109: + br i1 %t447, label %logic.rhs7110, label %logic.end7111 +logic.rhs7110: + %t448 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t449 = getelementptr inbounds %S.gen.Val, ptr %t448, i32 0, i32 2 + %t450 = load i1, ptr %t449 + br label %logic.rend7112 +logic.rend7112: + br label %logic.end7111 +logic.end7111: + %t451 = phi i1 [ false, %logic.from7109 ], [ %t450, %logic.rend7112 ] + br label %logic.from7113 +logic.from7113: + br i1 %t451, label %logic.rhs7114, label %logic.end7115 +logic.rhs7114: + %t452 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t453 = getelementptr inbounds %S.gen.Val, ptr %t452, i32 0, i32 0 + %t454 = load { ptr, i64, i64 }, ptr %t453 + store { ptr, i64, i64 } %t454, ptr %a455 + store { ptr, i64, i64 } { ptr @.str.4558, i64 1, i64 0 }, ptr %a457 + %t458 = call i32 @finch_str_starts(ptr %a455, ptr %a457) + %t459 = icmp ne i32 %t458, 0 + br label %logic.rend7116 +logic.rend7116: + br label %logic.end7115 +logic.end7115: + %t460 = phi i1 [ false, %logic.from7113 ], [ %t459, %logic.rend7116 ] + br i1 %t460, label %then7117, label %endif7119 +then7117: + %t461 = load ptr, ptr %a1 + %t462 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t461, %S.ast.Node %t462, { ptr, i64, i64 } { ptr @.str.4559, i64 53, i64 0 }) + br label %endif7119 +endif7119: + %t463 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t464 = getelementptr inbounds %S.gen.Val, ptr %t463, i32 0, i32 0 + %t465 = load { ptr, i64, i64 }, ptr %t464 + store { ptr, i64, i64 } %t465, ptr %a466 + call void @finch_str_copy(ptr %a467, ptr %a466) + %t468 = load { ptr, i64, i64 }, ptr %a467 + store { ptr, i64, i64 } %t468, ptr %a469 + %t470 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t471 = load i1, ptr %t470 + br i1 %t471, label %then7120, label %endif7122 +then7120: + %t472 = load ptr, ptr %a1 + %t473 = load ptr, ptr %a1 + %t474 = load %S.ast.Type, ptr %a164 + %t475 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t473, %S.ast.Type %t474) + %t476 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t477 = getelementptr inbounds %S.gen.Place, ptr %t476, i32 0, i32 0 + %t478 = load { ptr, i64, i64 }, ptr %t477 + %t479 = call { ptr, i64, i64 } @finch.gen.load(ptr %t472, { ptr, i64, i64 } %t475, { ptr, i64, i64 } %t478) + store { ptr, i64, i64 } %t475, ptr %a480 + call void @finch_str_drop(ptr %a480) + %t481 = load { ptr, i64, i64 }, ptr %a469 + store { ptr, i64, i64 } %t479, ptr %a469 + store { ptr, i64, i64 } %t481, ptr %a482 + call void @finch_str_drop(ptr %a482) + br label %endif7122 +endif7122: + %t483 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t484 = load { ptr, i64, i64 }, ptr %t483 + store { ptr, i64, i64 } %t484, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.4560, i64 3, i64 0 }, ptr %a486 + %t487 = call i32 @finch_str_eq(ptr %a485, ptr %a486) + %t488 = icmp ne i32 %t487, 0 + br i1 %t488, label %then7123, label %endif7125 +then7123: + %t489 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t490 = load ptr, ptr %a1 + %t491 = load { ptr, i64, i64 }, ptr %a469 + %t492 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t490, { ptr, i64, i64 } %t491) + %t493 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t492, 0 + %t494 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4561, i64 4, i64 0 }) + %t495 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t494) + store %S.ast.Type %t494, ptr %a496 + call void @finch.drop.S_ast_Type(ptr %a496) + %t497 = insertvalue %S.gen.Val %t493, %S.ast.Type %t495, 1 + %t498 = insertvalue %S.gen.Ref %t489, %S.gen.Val %t497, 2 + call void @finch_str_drop(ptr %a469) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t498 +endif7125: + %t499 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t500 = load ptr, ptr %a1 + %t501 = load { ptr, i64, i64 }, ptr %a469 + store { ptr, i64, i64 } { ptr @.str.4562, i64 31, i64 0 }, ptr %a503 + store { ptr, i64, i64 } %t501, ptr %a504 + call void @finch_str_concat(ptr %a502, ptr %a503, ptr %a504) + %t505 = load { ptr, i64, i64 }, ptr %a502 + store { ptr, i64, i64 } %t505, ptr %a507 + store { ptr, i64, i64 } { ptr @.str.4563, i64 3, i64 0 }, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t505, ptr %a509 + call void @finch_str_drop(ptr %a509) + %t510 = load { ptr, i64, i64 }, ptr %a506 + %t511 = call { ptr, i64, i64 } @finch.gen.op(ptr %t500, { ptr, i64, i64 } %t510) + store { ptr, i64, i64 } %t510, ptr %a512 + call void @finch_str_drop(ptr %a512) + %t513 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t511, 0 + %t514 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t515 = load { ptr, i64, i64 }, ptr %t514 + %t516 = extractvalue { ptr, i64, i64 } %t515, 1 + %t517 = icmp uge i64 0, %t516 + br i1 %t517, label %range7126, label %inrange7127 +range7126: + call void @finch_panic_index(ptr @.str.4564, i64 3959, i64 0, i64 %t516) + unreachable +inrange7127: + %t518 = extractvalue { ptr, i64, i64 } %t515, 0 + %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 + %t520 = load %S.ast.Type, ptr %t519 + %t521 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t520) + %t522 = insertvalue %S.gen.Val %t513, %S.ast.Type %t521, 1 + %t523 = insertvalue %S.gen.Ref %t499, %S.gen.Val %t522, 2 + call void @finch_str_drop(ptr %a469) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t523 +endif7105: + %t524 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t525 = load { ptr, i64, i64 }, ptr %t524 + store { ptr, i64, i64 } %t525, ptr %a526 + store { ptr, i64, i64 } { ptr @.str.4565, i64 5, i64 0 }, ptr %a527 + %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) + %t529 = icmp ne i32 %t528, 0 + br label %logic.from7128 +logic.from7128: + br i1 %t529, label %logic.end7130, label %logic.rhs7129 +logic.rhs7129: + %t530 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t531 = load { ptr, i64, i64 }, ptr %t530 + store { ptr, i64, i64 } %t531, ptr %a532 + store { ptr, i64, i64 } { ptr @.str.4566, i64 3, i64 0 }, ptr %a533 + %t534 = call i32 @finch_str_eq(ptr %a532, ptr %a533) + %t535 = icmp ne i32 %t534, 0 + br label %logic.rend7131 +logic.rend7131: + br label %logic.end7130 +logic.end7130: + %t536 = phi i1 [ true, %logic.from7128 ], [ %t535, %logic.rend7131 ] + br label %logic.from7132 +logic.from7132: + br i1 %t536, label %logic.end7134, label %logic.rhs7133 +logic.rhs7133: + %t537 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t538 = load { ptr, i64, i64 }, ptr %t537 + store { ptr, i64, i64 } %t538, ptr %a539 + store { ptr, i64, i64 } { ptr @.str.4567, i64 3, i64 0 }, ptr %a540 + %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) + %t542 = icmp ne i32 %t541, 0 + br label %logic.rend7135 +logic.rend7135: + br label %logic.end7134 +logic.end7134: + %t543 = phi i1 [ true, %logic.from7132 ], [ %t542, %logic.rend7135 ] + br i1 %t543, label %then7136, label %endif7138 +then7136: + %t544 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t545 = load { ptr, i64, i64 }, ptr %t544 + store { ptr, i64, i64 } %t545, ptr %a546 + store { ptr, i64, i64 } { ptr @.str.4568, i64 3, i64 0 }, ptr %a547 + %t548 = call i32 @finch_str_eq(ptr %a546, ptr %a547) + %t549 = icmp eq i32 %t548, 0 + br i1 %t549, label %then7139, label %endif7141 +then7139: + %t550 = load ptr, ptr %a1 + %t551 = load %S.ast.Node, ptr %a2 + %t552 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t553 = load { ptr, i64, i64 }, ptr %t552 + store { ptr, i64, i64 } { ptr @.str.4569, i64 37, i64 0 }, ptr %a555 + store { ptr, i64, i64 } %t553, ptr %a556 + call void @finch_str_concat(ptr %a554, ptr %a555, ptr %a556) + %t557 = load { ptr, i64, i64 }, ptr %a554 + store { ptr, i64, i64 } %t557, ptr %a559 + store { ptr, i64, i64 } { ptr @.str.4570, i64 1, i64 0 }, ptr %a560 + call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) + store { ptr, i64, i64 } %t557, ptr %a561 + call void @finch_str_drop(ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a558 + call void @finch.gen.fail(ptr %t550, %S.ast.Node %t551, { ptr, i64, i64 } %t562) + store { ptr, i64, i64 } %t562, ptr %a563 + call void @finch_str_drop(ptr %a563) + br label %endif7141 +endif7141: + %t564 = load i1, ptr %a3 + br i1 %t564, label %then7142, label %endif7144 +then7142: + %t565 = load ptr, ptr %a1 + %t566 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t565, %S.ast.Node %t566, { ptr, i64, i64 } { ptr @.str.4571, i64 48, i64 0 }) + br label %endif7144 +endif7144: + %t567 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t568 = load i1, ptr %t567 + br i1 %t568, label %then7145, label %endif7147 +then7145: + %t569 = load ptr, ptr %a1 + %t570 = load ptr, ptr %a1 + %t571 = load %S.ast.Type, ptr %a164 + %t572 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t570, %S.ast.Type %t571) + store { ptr, i64, i64 } { ptr @.str.4572, i64 23, i64 0 }, ptr %a574 + store { ptr, i64, i64 } %t572, ptr %a575 + call void @finch_str_concat(ptr %a573, ptr %a574, ptr %a575) + store { ptr, i64, i64 } %t572, ptr %a576 + call void @finch_str_drop(ptr %a576) + %t577 = load { ptr, i64, i64 }, ptr %a573 + store { ptr, i64, i64 } %t577, ptr %a579 + store { ptr, i64, i64 } { ptr @.str.4573, i64 6, i64 0 }, ptr %a580 + call void @finch_str_concat(ptr %a578, ptr %a579, ptr %a580) + store { ptr, i64, i64 } %t577, ptr %a581 + call void @finch_str_drop(ptr %a581) + %t582 = load { ptr, i64, i64 }, ptr %a578 + %t583 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t584 = getelementptr inbounds %S.gen.Place, ptr %t583, i32 0, i32 0 + %t585 = load { ptr, i64, i64 }, ptr %t584 + store { ptr, i64, i64 } %t582, ptr %a587 + store { ptr, i64, i64 } %t585, ptr %a588 + call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588) + store { ptr, i64, i64 } %t582, ptr %a589 + call void @finch_str_drop(ptr %a589) + %t590 = load { ptr, i64, i64 }, ptr %a586 + store { ptr, i64, i64 } %t590, ptr %a592 + store { ptr, i64, i64 } { ptr @.str.4574, i64 14, i64 0 }, ptr %a593 + call void @finch_str_concat(ptr %a591, ptr %a592, ptr %a593) + store { ptr, i64, i64 } %t590, ptr %a594 + call void @finch_str_drop(ptr %a594) + %t595 = load { ptr, i64, i64 }, ptr %a591 + %t596 = call { ptr, i64, i64 } @finch.gen.op(ptr %t569, { ptr, i64, i64 } %t595) + store { ptr, i64, i64 } %t595, ptr %a597 + call void @finch_str_drop(ptr %a597) + store { ptr, i64, i64 } %t596, ptr %a598 + %t599 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t600 = load ptr, ptr %a1 + %t601 = load { ptr, i64, i64 }, ptr %a598 + %t602 = call { ptr, i64, i64 } @finch.gen.load(ptr %t600, { ptr, i64, i64 } { ptr @.str.4575, i64 3, i64 0 }, { ptr, i64, i64 } %t601) + %t603 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t602, 0 + %t604 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4576, i64 3, i64 0 }) + %t605 = insertvalue %S.gen.Val %t603, %S.ast.Type %t604, 1 + %t606 = insertvalue %S.gen.Ref %t599, %S.gen.Val %t605, 2 + call void @finch_str_drop(ptr %a598) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t606 +endif7147: + %t607 = load ptr, ptr %a1 + %t608 = load ptr, ptr %a1 + %t609 = load %S.ast.Type, ptr %a164 + %t610 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t608, %S.ast.Type %t609) + store { ptr, i64, i64 } { ptr @.str.4577, i64 13, i64 0 }, ptr %a612 + store { ptr, i64, i64 } %t610, ptr %a613 + call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) + store { ptr, i64, i64 } %t610, ptr %a614 + call void @finch_str_drop(ptr %a614) + %t615 = load { ptr, i64, i64 }, ptr %a611 + store { ptr, i64, i64 } %t615, ptr %a617 + store { ptr, i64, i64 } { ptr @.str.4578, i64 1, i64 0 }, ptr %a618 + call void @finch_str_concat(ptr %a616, ptr %a617, ptr %a618) + store { ptr, i64, i64 } %t615, ptr %a619 + call void @finch_str_drop(ptr %a619) + %t620 = load { ptr, i64, i64 }, ptr %a616 + %t621 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t622 = getelementptr inbounds %S.gen.Val, ptr %t621, i32 0, i32 0 + %t623 = load { ptr, i64, i64 }, ptr %t622 + store { ptr, i64, i64 } %t620, ptr %a625 + store { ptr, i64, i64 } %t623, ptr %a626 + call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626) + store { ptr, i64, i64 } %t620, ptr %a627 + call void @finch_str_drop(ptr %a627) + %t628 = load { ptr, i64, i64 }, ptr %a624 + store { ptr, i64, i64 } %t628, ptr %a630 + store { ptr, i64, i64 } { ptr @.str.4579, i64 3, i64 0 }, ptr %a631 + call void @finch_str_concat(ptr %a629, ptr %a630, ptr %a631) + store { ptr, i64, i64 } %t628, ptr %a632 + call void @finch_str_drop(ptr %a632) + %t633 = load { ptr, i64, i64 }, ptr %a629 + %t634 = call { ptr, i64, i64 } @finch.gen.op(ptr %t607, { ptr, i64, i64 } %t633) + store { ptr, i64, i64 } %t633, ptr %a635 + call void @finch_str_drop(ptr %a635) + store { ptr, i64, i64 } %t634, ptr %a636 + %t637 = load ptr, ptr %a1 + %t638 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t639 = load %S.gen.Val, ptr %t638 + call void @finch.gen.release(ptr %t637, %S.gen.Val %t639) + %t640 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t641 = load { ptr, i64, i64 }, ptr %a636 + store { ptr, i64, i64 } %t641, ptr %a642 + call void @finch_str_copy(ptr %a643, ptr %a642) + %t644 = load { ptr, i64, i64 }, ptr %a643 + %t645 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t644, 0 + %t646 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4580, i64 3, i64 0 }) + %t647 = insertvalue %S.gen.Val %t645, %S.ast.Type %t646, 1 + %t648 = insertvalue %S.gen.Ref %t640, %S.gen.Val %t647, 2 + call void @finch_str_drop(ptr %a636) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t648 +endif7138: + %t649 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t650 = load { ptr, i64, i64 }, ptr %t649 + store { ptr, i64, i64 } %t650, ptr %a651 + store { ptr, i64, i64 } { ptr @.str.4581, i64 6, i64 0 }, ptr %a652 + %t653 = call i32 @finch_str_eq(ptr %a651, ptr %a652) + %t654 = icmp eq i32 %t653, 0 + br i1 %t654, label %then7148, label %endif7150 +then7148: + %t655 = load ptr, ptr %a1 + %t656 = load %S.ast.Node, ptr %a2 + %t657 = load %S.ast.Type, ptr %a164 + %t658 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t657) + store { ptr, i64, i64 } %t658, ptr %a660 + store { ptr, i64, i64 } { ptr @.str.4582, i64 21, i64 0 }, ptr %a661 + call void @finch_str_concat(ptr %a659, ptr %a660, ptr %a661) + store { ptr, i64, i64 } %t658, ptr %a662 + call void @finch_str_drop(ptr %a662) + %t663 = load { ptr, i64, i64 }, ptr %a659 + %t664 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t665 = load { ptr, i64, i64 }, ptr %t664 + store { ptr, i64, i64 } %t663, ptr %a667 + store { ptr, i64, i64 } %t665, ptr %a668 + call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) + store { ptr, i64, i64 } %t663, ptr %a669 + call void @finch_str_drop(ptr %a669) + %t670 = load { ptr, i64, i64 }, ptr %a666 + store { ptr, i64, i64 } %t670, ptr %a672 + store { ptr, i64, i64 } { ptr @.str.4583, i64 2, i64 0 }, ptr %a673 + call void @finch_str_concat(ptr %a671, ptr %a672, ptr %a673) + store { ptr, i64, i64 } %t670, ptr %a674 + call void @finch_str_drop(ptr %a674) + %t675 = load { ptr, i64, i64 }, ptr %a671 + call void @finch.gen.fail(ptr %t655, %S.ast.Node %t656, { ptr, i64, i64 } %t675) + store { ptr, i64, i64 } %t675, ptr %a676 + call void @finch_str_drop(ptr %a676) + br label %endif7150 +endif7150: + %t677 = load ptr, ptr %a1 + %t678 = icmp eq ptr %t677, null + br i1 %t678, label %panic7151, label %ok7152 +panic7151: + call void @finch_panic(ptr @.str.4584, i64 3979, ptr @.str.4585) + unreachable +ok7152: + %t679 = getelementptr inbounds %S.gen.Gen, ptr %t677, i32 0, i32 16 + %t680 = load ptr, ptr %a1 + %t681 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 3 + %t682 = load { ptr, i64, i64 }, ptr %t681 + %t683 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 2 + %t684 = load { ptr, i64, i64 }, ptr %t683 + %t685 = call i64 @finch.gen.findStruct(ptr %t680, { ptr, i64, i64 } %t682, { ptr, i64, i64 } %t684) + %t686 = load { ptr, i64, i64 }, ptr %t679 + %t687 = extractvalue { ptr, i64, i64 } %t686, 1 + %t688 = icmp uge i64 %t685, %t687 + br i1 %t688, label %range7153, label %inrange7154 +range7153: + call void @finch_panic_index(ptr @.str.4586, i64 3979, i64 %t685, i64 %t687) + unreachable +inrange7154: + %t689 = extractvalue { ptr, i64, i64 } %t686, 0 + %t690 = getelementptr inbounds %S.gen.StructDef, ptr %t689, i64 %t685 + %t691 = load %S.gen.StructDef, ptr %t690 + store %S.gen.StructDef %t691, ptr %a692 + call void @finch.copy.S_gen_StructDef(ptr %a693, ptr %a692) + %t694 = load %S.gen.StructDef, ptr %a693 + store %S.gen.StructDef %t694, ptr %a695 + %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 11 + %t697 = getelementptr inbounds { ptr, i64, i64 }, ptr %t696, i32 0, i32 1 + %t698 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t699 = load { ptr, i64, i64 }, ptr %t698 + store i64 -1, ptr %a700 + %t701 = load i64, ptr %t697 + %t702 = load ptr, ptr %t696 + store i64 0, ptr %a703 + br label %find.cond7155 +find.cond7155: + %t704 = load i64, ptr %a703 + %t705 = icmp slt i64 %t704, %t701 + br i1 %t705, label %find.body7156, label %find.end7159 +find.body7156: + %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 + %t707 = load { ptr, i64, i64 }, ptr %t706 + store { ptr, i64, i64 } %t707, ptr %a708 + store { ptr, i64, i64 } %t699, ptr %a709 + %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) + %t711 = icmp ne i32 %t710, 0 + br i1 %t711, label %find.hit7157, label %find.next7158 +find.hit7157: + store i64 %t704, ptr %a700 + br label %find.end7159 +find.next7158: + %t712 = add i64 %t704, 1 + store i64 %t712, ptr %a703 + br label %find.cond7155 +find.end7159: + %t713 = load i64, ptr %a700 + store i64 %t713, ptr %a714 + %t715 = load i64, ptr %a714 + %t716 = icmp slt i64 %t715, 0 + br i1 %t716, label %then7160, label %endif7162 +then7160: + %t717 = load ptr, ptr %a1 + %t718 = load %S.ast.Node, ptr %a2 + %t719 = load %S.ast.Type, ptr %a164 + %t720 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t719) + store { ptr, i64, i64 } { ptr @.str.4587, i64 11, i64 0 }, ptr %a722 + store { ptr, i64, i64 } %t720, ptr %a723 + call void @finch_str_concat(ptr %a721, ptr %a722, ptr %a723) + store { ptr, i64, i64 } %t720, ptr %a724 + call void @finch_str_drop(ptr %a724) + %t725 = load { ptr, i64, i64 }, ptr %a721 + store { ptr, i64, i64 } %t725, ptr %a727 + store { ptr, i64, i64 } { ptr @.str.4588, i64 15, i64 0 }, ptr %a728 + call void @finch_str_concat(ptr %a726, ptr %a727, ptr %a728) + store { ptr, i64, i64 } %t725, ptr %a729 + call void @finch_str_drop(ptr %a729) + %t730 = load { ptr, i64, i64 }, ptr %a726 + %t731 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t732 = load { ptr, i64, i64 }, ptr %t731 + store { ptr, i64, i64 } %t730, ptr %a734 + store { ptr, i64, i64 } %t732, ptr %a735 + call void @finch_str_concat(ptr %a733, ptr %a734, ptr %a735) + store { ptr, i64, i64 } %t730, ptr %a736 + call void @finch_str_drop(ptr %a736) + %t737 = load { ptr, i64, i64 }, ptr %a733 + store { ptr, i64, i64 } %t737, ptr %a739 + store { ptr, i64, i64 } { ptr @.str.4589, i64 11, i64 0 }, ptr %a740 + call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) + store { ptr, i64, i64 } %t737, ptr %a741 + call void @finch_str_drop(ptr %a741) + %t742 = load { ptr, i64, i64 }, ptr %a738 + %t743 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 11 + %t744 = getelementptr inbounds { ptr, i64, i64 }, ptr %t743, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4590, i64 2, i64 0 }, ptr %a745 + call void @finch_str_join(ptr %a746, ptr %t743, ptr %a745) + %t747 = load { ptr, i64, i64 }, ptr %a746 + store { ptr, i64, i64 } %t742, ptr %a749 + store { ptr, i64, i64 } %t747, ptr %a750 + call void @finch_str_concat(ptr %a748, ptr %a749, ptr %a750) + store { ptr, i64, i64 } %t742, ptr %a751 + call void @finch_str_drop(ptr %a751) + store { ptr, i64, i64 } %t747, ptr %a752 + call void @finch_str_drop(ptr %a752) + %t753 = load { ptr, i64, i64 }, ptr %a748 + store { ptr, i64, i64 } %t753, ptr %a755 + store { ptr, i64, i64 } { ptr @.str.4591, i64 1, i64 0 }, ptr %a756 + call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) + store { ptr, i64, i64 } %t753, ptr %a757 + call void @finch_str_drop(ptr %a757) + %t758 = load { ptr, i64, i64 }, ptr %a754 + call void @finch.gen.fail(ptr %t717, %S.ast.Node %t718, { ptr, i64, i64 } %t758) + store { ptr, i64, i64 } %t758, ptr %a759 + call void @finch_str_drop(ptr %a759) + br label %endif7162 +endif7162: + %t760 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 12 + %t761 = load i64, ptr %a714 + %t762 = load { ptr, i64, i64 }, ptr %t760 + %t763 = extractvalue { ptr, i64, i64 } %t762, 1 + %t764 = icmp uge i64 %t761, %t763 + br i1 %t764, label %range7163, label %inrange7164 +range7163: + call void @finch_panic_index(ptr @.str.4592, i64 3984, i64 %t761, i64 %t763) + unreachable +inrange7164: + %t765 = extractvalue { ptr, i64, i64 } %t762, 0 + %t766 = getelementptr inbounds %S.ast.Type, ptr %t765, i64 %t761 + %t767 = load %S.ast.Type, ptr %t766 + store %S.ast.Type %t767, ptr %a768 + call void @finch.copy.S_ast_Type(ptr %a769, ptr %a768) + %t770 = load %S.ast.Type, ptr %a769 + store %S.ast.Type %t770, ptr %a771 + %t772 = load ptr, ptr %a1 + %t773 = load %S.ast.Node, ptr %a2 + %t774 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t775 = load i64, ptr %t774 + %t776 = add i64 %t775, 1 + %t777 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t778 = getelementptr inbounds { ptr, i64, i64 }, ptr %t777, i32 0, i32 1 + %t779 = load i64, ptr %t778 + %t780 = load %S.ast.Type, ptr %a771 + %t781 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t780) + store { ptr, i64, i64 } { ptr @.str.4593, i64 9, i64 0 }, ptr %a783 + store { ptr, i64, i64 } %t781, ptr %a784 + call void @finch_str_concat(ptr %a782, ptr %a783, ptr %a784) + store { ptr, i64, i64 } %t781, ptr %a785 + call void @finch_str_drop(ptr %a785) + %t786 = load { ptr, i64, i64 }, ptr %a782 + store { ptr, i64, i64 } %t786, ptr %a788 + store { ptr, i64, i64 } { ptr @.str.4594, i64 1, i64 0 }, ptr %a789 + call void @finch_str_concat(ptr %a787, ptr %a788, ptr %a789) + store { ptr, i64, i64 } %t786, ptr %a790 + call void @finch_str_drop(ptr %a790) + %t791 = load { ptr, i64, i64 }, ptr %a787 + %t792 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t793 = load { ptr, i64, i64 }, ptr %t792 + store { ptr, i64, i64 } %t791, ptr %a795 + store { ptr, i64, i64 } %t793, ptr %a796 + call void @finch_str_concat(ptr %a794, ptr %a795, ptr %a796) + store { ptr, i64, i64 } %t791, ptr %a797 + call void @finch_str_drop(ptr %a797) + %t798 = load { ptr, i64, i64 }, ptr %a794 + store { ptr, i64, i64 } %t798, ptr %a800 + store { ptr, i64, i64 } { ptr @.str.4595, i64 4, i64 0 }, ptr %a801 + call void @finch_str_concat(ptr %a799, ptr %a800, ptr %a801) + store { ptr, i64, i64 } %t798, ptr %a802 + call void @finch_str_drop(ptr %a802) + %t803 = load { ptr, i64, i64 }, ptr %a799 + call void @finch.gen.noteRef(ptr %t772, %S.ast.Node %t773, i64 %t776, i64 %t779, { ptr, i64, i64 } %t803, { ptr, i64, i64 } { ptr @.str.4596, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t803, ptr %a804 + call void @finch_str_drop(ptr %a804) + %t805 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t806 = load i1, ptr %t805 + br i1 %t806, label %then7165, label %endif7167 +then7165: + %t807 = load ptr, ptr %a1 + %t808 = load ptr, ptr %a1 + %t809 = load %S.ast.Type, ptr %a164 + %t810 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t808, %S.ast.Type %t809) + store { ptr, i64, i64 } { ptr @.str.4597, i64 23, i64 0 }, ptr %a812 + store { ptr, i64, i64 } %t810, ptr %a813 + call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813) + store { ptr, i64, i64 } %t810, ptr %a814 + call void @finch_str_drop(ptr %a814) + %t815 = load { ptr, i64, i64 }, ptr %a811 + store { ptr, i64, i64 } %t815, ptr %a817 + store { ptr, i64, i64 } { ptr @.str.4598, i64 6, i64 0 }, ptr %a818 + call void @finch_str_concat(ptr %a816, ptr %a817, ptr %a818) + store { ptr, i64, i64 } %t815, ptr %a819 + call void @finch_str_drop(ptr %a819) + %t820 = load { ptr, i64, i64 }, ptr %a816 + %t821 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t822 = getelementptr inbounds %S.gen.Place, ptr %t821, i32 0, i32 0 + %t823 = load { ptr, i64, i64 }, ptr %t822 + store { ptr, i64, i64 } %t820, ptr %a825 + store { ptr, i64, i64 } %t823, ptr %a826 + call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) + store { ptr, i64, i64 } %t820, ptr %a827 + call void @finch_str_drop(ptr %a827) + %t828 = load { ptr, i64, i64 }, ptr %a824 + store { ptr, i64, i64 } %t828, ptr %a830 + store { ptr, i64, i64 } { ptr @.str.4599, i64 13, i64 0 }, ptr %a831 + call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) + store { ptr, i64, i64 } %t828, ptr %a832 + call void @finch_str_drop(ptr %a832) + %t833 = load { ptr, i64, i64 }, ptr %a829 + %t834 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 3 + %t835 = load i64, ptr %a714 + %t836 = load { ptr, i64, i64 }, ptr %t834 + %t837 = extractvalue { ptr, i64, i64 } %t836, 1 + %t838 = icmp uge i64 %t835, %t837 + br i1 %t838, label %range7168, label %inrange7169 +range7168: + call void @finch_panic_index(ptr @.str.4600, i64 3987, i64 %t835, i64 %t837) + unreachable +inrange7169: + %t839 = extractvalue { ptr, i64, i64 } %t836, 0 + %t840 = getelementptr inbounds i64, ptr %t839, i64 %t835 + %t841 = load i64, ptr %t840 + call void @finch_str_from_int(ptr %a842, i64 %t841) + %t843 = load { ptr, i64, i64 }, ptr %a842 + store { ptr, i64, i64 } %t833, ptr %a845 + store { ptr, i64, i64 } %t843, ptr %a846 + call void @finch_str_concat(ptr %a844, ptr %a845, ptr %a846) + store { ptr, i64, i64 } %t833, ptr %a847 + call void @finch_str_drop(ptr %a847) + store { ptr, i64, i64 } %t843, ptr %a848 + call void @finch_str_drop(ptr %a848) + %t849 = load { ptr, i64, i64 }, ptr %a844 + %t850 = call { ptr, i64, i64 } @finch.gen.op(ptr %t807, { ptr, i64, i64 } %t849) + store { ptr, i64, i64 } %t849, ptr %a851 + call void @finch_str_drop(ptr %a851) + store { ptr, i64, i64 } %t850, ptr %a852 + %t853 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t854 = load { ptr, i64, i64 }, ptr %a852 + store { ptr, i64, i64 } %t854, ptr %a855 + call void @finch_str_copy(ptr %a856, ptr %a855) + %t857 = load { ptr, i64, i64 }, ptr %a856 + %t858 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t857, 0 + %t859 = load %S.ast.Type, ptr %a771 + store %S.ast.Type %t859, ptr %a860 + call void @finch.copy.S_ast_Type(ptr %a861, ptr %a860) + %t862 = load %S.ast.Type, ptr %a861 + %t863 = insertvalue %S.gen.Place %t858, %S.ast.Type %t862, 1 + %t864 = insertvalue %S.gen.Ref %t853, %S.gen.Place %t863, 1 + call void @finch_str_drop(ptr %a852) + call void @finch.drop.S_ast_Type(ptr %a771) + call void @finch.drop.S_gen_StructDef(ptr %a695) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t864 +endif7167: + %t865 = load ptr, ptr %a1 + %t866 = load ptr, ptr %a1 + %t867 = load %S.ast.Type, ptr %a164 + %t868 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t866, %S.ast.Type %t867) + store { ptr, i64, i64 } { ptr @.str.4601, i64 13, i64 0 }, ptr %a870 + store { ptr, i64, i64 } %t868, ptr %a871 + call void @finch_str_concat(ptr %a869, ptr %a870, ptr %a871) + store { ptr, i64, i64 } %t868, ptr %a872 + call void @finch_str_drop(ptr %a872) + %t873 = load { ptr, i64, i64 }, ptr %a869 + store { ptr, i64, i64 } %t873, ptr %a875 + store { ptr, i64, i64 } { ptr @.str.4602, i64 1, i64 0 }, ptr %a876 + call void @finch_str_concat(ptr %a874, ptr %a875, ptr %a876) + store { ptr, i64, i64 } %t873, ptr %a877 + call void @finch_str_drop(ptr %a877) + %t878 = load { ptr, i64, i64 }, ptr %a874 + %t879 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t880 = getelementptr inbounds %S.gen.Val, ptr %t879, i32 0, i32 0 + %t881 = load { ptr, i64, i64 }, ptr %t880 + store { ptr, i64, i64 } %t878, ptr %a883 + store { ptr, i64, i64 } %t881, ptr %a884 + call void @finch_str_concat(ptr %a882, ptr %a883, ptr %a884) + store { ptr, i64, i64 } %t878, ptr %a885 + call void @finch_str_drop(ptr %a885) + %t886 = load { ptr, i64, i64 }, ptr %a882 + store { ptr, i64, i64 } %t886, ptr %a888 + store { ptr, i64, i64 } { ptr @.str.4603, i64 2, i64 0 }, ptr %a889 + call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889) + store { ptr, i64, i64 } %t886, ptr %a890 + call void @finch_str_drop(ptr %a890) + %t891 = load { ptr, i64, i64 }, ptr %a887 + %t892 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 3 + %t893 = load i64, ptr %a714 + %t894 = load { ptr, i64, i64 }, ptr %t892 + %t895 = extractvalue { ptr, i64, i64 } %t894, 1 + %t896 = icmp uge i64 %t893, %t895 + br i1 %t896, label %range7170, label %inrange7171 +range7170: + call void @finch_panic_index(ptr @.str.4604, i64 3990, i64 %t893, i64 %t895) + unreachable +inrange7171: + %t897 = extractvalue { ptr, i64, i64 } %t894, 0 + %t898 = getelementptr inbounds i64, ptr %t897, i64 %t893 + %t899 = load i64, ptr %t898 + call void @finch_str_from_int(ptr %a900, i64 %t899) + %t901 = load { ptr, i64, i64 }, ptr %a900 + store { ptr, i64, i64 } %t891, ptr %a903 + store { ptr, i64, i64 } %t901, ptr %a904 + call void @finch_str_concat(ptr %a902, ptr %a903, ptr %a904) + store { ptr, i64, i64 } %t891, ptr %a905 + call void @finch_str_drop(ptr %a905) + store { ptr, i64, i64 } %t901, ptr %a906 + call void @finch_str_drop(ptr %a906) + %t907 = load { ptr, i64, i64 }, ptr %a902 + %t908 = call { ptr, i64, i64 } @finch.gen.op(ptr %t865, { ptr, i64, i64 } %t907) + store { ptr, i64, i64 } %t907, ptr %a909 + call void @finch_str_drop(ptr %a909) + store { ptr, i64, i64 } %t908, ptr %a910 + %t911 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t911, ptr %a912 + call void @finch_str_copy(ptr %a913, ptr %a912) + %t914 = load { ptr, i64, i64 }, ptr %a913 + %t915 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t914, 0 + %t916 = load %S.ast.Type, ptr %a771 + store %S.ast.Type %t916, ptr %a917 + call void @finch.copy.S_ast_Type(ptr %a918, ptr %a917) + %t919 = load %S.ast.Type, ptr %a918 + %t920 = insertvalue %S.gen.Val %t915, %S.ast.Type %t919, 1 + store %S.gen.Val %t920, ptr %a921 + %t922 = load ptr, ptr %a1 + %t923 = load %S.ast.Type, ptr %a771 + %t924 = call i1 @finch.gen.owning(ptr %t922, %S.ast.Type %t923) + br label %logic.from7172 +logic.from7172: + br i1 %t924, label %logic.rhs7173, label %logic.end7174 +logic.rhs7173: + %t925 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t926 = getelementptr inbounds %S.gen.Val, ptr %t925, i32 0, i32 2 + %t927 = load i1, ptr %t926 + br label %logic.rend7175 +logic.rend7175: + br label %logic.end7174 +logic.end7174: + %t928 = phi i1 [ false, %logic.from7172 ], [ %t927, %logic.rend7175 ] + br i1 %t928, label %then7176, label %endif7178 +then7176: + %t929 = load ptr, ptr %a1 + %t930 = load { ptr, i64, i64 }, ptr %a910 + %t931 = load %S.ast.Type, ptr %a771 + %t932 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t929, { ptr, i64, i64 } %t930, %S.ast.Type %t931) + %t933 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t932, 0 + %t934 = load %S.ast.Type, ptr %a771 + store %S.ast.Type %t934, ptr %a935 + call void @finch.copy.S_ast_Type(ptr %a936, ptr %a935) + %t937 = load %S.ast.Type, ptr %a936 + %t938 = insertvalue %S.gen.Val %t933, %S.ast.Type %t937, 1 + %t939 = insertvalue %S.gen.Val %t938, i1 true, 2 + %t940 = load %S.gen.Val, ptr %a921 + store %S.gen.Val %t939, ptr %a921 + store %S.gen.Val %t940, ptr %a941 + call void @finch.drop.S_gen_Val(ptr %a941) + br label %endif7178 +endif7178: + %t942 = load ptr, ptr %a1 + %t943 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t944 = load %S.gen.Val, ptr %t943 + call void @finch.gen.release(ptr %t942, %S.gen.Val %t944) + %t945 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t946 = load %S.gen.Val, ptr %a921 + store %S.gen.Val %t946, ptr %a947 + call void @finch.copy.S_gen_Val(ptr %a948, ptr %a947) + %t949 = load %S.gen.Val, ptr %a948 + %t950 = insertvalue %S.gen.Ref %t945, %S.gen.Val %t949, 2 + call void @finch.drop.S_gen_Val(ptr %a921) + call void @finch_str_drop(ptr %a910) + call void @finch.drop.S_ast_Type(ptr %a771) + call void @finch.drop.S_gen_StructDef(ptr %a695) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t950 +} + +define internal %S.gen.Ref @finch.gen.index(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a14 = alloca %S.gen.Ref, align 16 + %a20 = alloca i64, align 16 + %a32 = alloca %S.gen.Ref, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range7179, label %inrange7180 +range7179: + call void @finch_panic_index(ptr @.str.4605, i64 4000, i64 0, i64 %t7) + unreachable +inrange7180: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = load i1, ptr %a3 + %t13 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 %t12) + store %S.gen.Ref %t13, ptr %a14 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic7181, label %ok7182 +panic7181: + call void @finch_panic(ptr @.str.4606, i64 4001, ptr @.str.4607) + unreachable +ok7182: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 11 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + store i64 %t19, ptr %a20 + %t21 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 + %t22 = load i1, ptr %t21 + %t23 = xor i1 %t22, true + br i1 %t23, label %then7183, label %endif7185 +then7183: + %t24 = load ptr, ptr %a1 + %t25 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 + %t26 = load %S.gen.Val, ptr %t25 + call void @finch.gen.hold(ptr %t24, %S.gen.Val %t26) + br label %endif7185 +endif7185: + %t27 = load ptr, ptr %a1 + %t28 = load %S.ast.Node, ptr %a2 + %t29 = load %S.gen.Ref, ptr %a14 + %t30 = load i1, ptr %a3 + %t31 = call %S.gen.Ref @finch.gen.indexOf(ptr %t27, %S.ast.Node %t28, %S.gen.Ref %t29, i1 %t30) + store %S.gen.Ref %t31, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = load i64, ptr %a20 + call void @finch.gen.heldEnd(ptr %t33, i64 %t34) + %t35 = load %S.gen.Ref, ptr %a32 + call void @finch.drop.S_gen_Ref(ptr %a14) + ret %S.gen.Ref %t35 +} + +define internal %S.gen.Ref @finch.gen.indexOf(ptr %p0, %S.ast.Node %p1, %S.gen.Ref %p2, i1 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.Ref, align 16 + %a4 = alloca i1, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a9 = alloca %S.ast.Type, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca %S.gen.Val, align 16 + %a54 = alloca %S.ast.Type, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca %S.gen.Val, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca %S.ast.Type, align 16 + %a140 = alloca %S.ast.Type, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca %S.ast.Type, align 16 + %a180 = alloca %S.ast.Type, align 16 + %a182 = alloca %S.ast.Type, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a220 = alloca %S.ast.Type, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca %S.ast.Type, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca %S.ast.Type, align 16 + %a263 = alloca %S.ast.Type, align 16 + %a266 = alloca %S.ast.Type, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca %S.ast.Type, align 16 + %a386 = alloca %S.ast.Type, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca %S.ast.Type, align 16 + %a405 = alloca %S.ast.Type, align 16 + %a408 = alloca %S.gen.Val, align 16 + %a422 = alloca %S.ast.Type, align 16 + %a423 = alloca %S.ast.Type, align 16 + %a428 = alloca %S.gen.Val, align 16 + %a434 = alloca %S.gen.Val, align 16 + %a435 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.Ref %p2, ptr %a3 + store i1 %p3, ptr %a4 + %t5 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t6 = getelementptr inbounds %S.gen.Val, ptr %t5, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %t6 + store %S.ast.Type %t7, ptr %a8 + call void @finch.copy.S_ast_Type(ptr %a9, ptr %a8) + %t10 = load %S.ast.Type, ptr %a9 + store %S.ast.Type %t10, ptr %a11 + %t12 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t13 = load i1, ptr %t12 + br i1 %t13, label %then7186, label %endif7188 +then7186: + %t14 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t15 = getelementptr inbounds %S.gen.Place, ptr %t14, i32 0, i32 1 + %t16 = load %S.ast.Type, ptr %t15 + store %S.ast.Type %t16, ptr %a17 + call void @finch.copy.S_ast_Type(ptr %a18, ptr %a17) + %t19 = load %S.ast.Type, ptr %a18 + %t20 = load %S.ast.Type, ptr %a11 + store %S.ast.Type %t19, ptr %a11 + store %S.ast.Type %t20, ptr %a21 + call void @finch.drop.S_ast_Type(ptr %a21) + br label %endif7188 +endif7188: + %t22 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.4608, i64 3, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then7189, label %endif7191 +then7189: + %t28 = load ptr, ptr %a1 + %t29 = load %S.ast.Node, ptr %a2 + %t30 = load %S.gen.Ref, ptr %a3 + %t31 = load %S.ast.Type, ptr %a11 + %t32 = load i1, ptr %a4 + %t33 = call %S.gen.Ref @finch.gen.mapIndex(ptr %t28, %S.ast.Node %t29, %S.gen.Ref %t30, %S.ast.Type %t31, i1 %t32) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t33 +endif7191: + %t34 = load ptr, ptr %a1 + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 1, %t38 + br i1 %t39, label %range7192, label %inrange7193 +range7192: + call void @finch_panic_index(ptr @.str.4609, i64 4018, i64 1, i64 %t38) + unreachable +inrange7193: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 + %t42 = load %S.ast.Node, ptr %t41 + %t43 = call %S.gen.Val @finch.gen.expr(ptr %t35, %S.ast.Node %t42) + %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4610, i64 3, i64 0 }) + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range7194, label %inrange7195 +range7194: + call void @finch_panic_index(ptr @.str.4611, i64 4018, i64 1, i64 %t47) + unreachable +inrange7195: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 + %t51 = load %S.ast.Node, ptr %t50 + %t52 = call %S.gen.Val @finch.gen.coerce(ptr %t34, %S.gen.Val %t43, %S.ast.Type %t44, %S.ast.Node %t51, { ptr, i64, i64 } { ptr @.str.4612, i64 8, i64 0 }) + store %S.gen.Val %t43, ptr %a53 + call void @finch.drop.S_gen_Val(ptr %a53) + store %S.ast.Type %t44, ptr %a54 + call void @finch.drop.S_ast_Type(ptr %a54) + %t55 = extractvalue %S.gen.Val %t52, 0 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_copy(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + store %S.gen.Val %t52, ptr %a59 + call void @finch.drop.S_gen_Val(ptr %a59) + store { ptr, i64, i64 } %t58, ptr %a60 + %t61 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.4613, i64 5, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br i1 %t66, label %then7196, label %endif7198 +then7196: + store { ptr, i64, i64 } { ptr @.str.4614, i64 0, i64 0 }, ptr %a67 + %t68 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t69 = load i1, ptr %t68 + br i1 %t69, label %then7199, label %else7200 +then7199: + %t70 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t71 = getelementptr inbounds %S.gen.Place, ptr %t70, i32 0, i32 0 + %t72 = load { ptr, i64, i64 }, ptr %t71 + store { ptr, i64, i64 } %t72, ptr %a73 + call void @finch_str_copy(ptr %a74, ptr %a73) + %t75 = load { ptr, i64, i64 }, ptr %a74 + %t76 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t75, ptr %a67 + store { ptr, i64, i64 } %t76, ptr %a77 + call void @finch_str_drop(ptr %a77) + br label %endif7201 +else7200: + %t78 = load ptr, ptr %a1 + %t79 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t80 = load %S.gen.Val, ptr %t79 + %t81 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t78, %S.gen.Val %t80) + %t82 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t81, ptr %a67 + store { ptr, i64, i64 } %t82, ptr %a83 + call void @finch_str_drop(ptr %a83) + br label %endif7201 +endif7201: + %t84 = load ptr, ptr %a1 + %t85 = load { ptr, i64, i64 }, ptr %a60 + %t86 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 4 + %t87 = load i64, ptr %t86 + call void @finch_str_from_int(ptr %a88, i64 %t87) + %t89 = load { ptr, i64, i64 }, ptr %a88 + %t90 = load %S.ast.Node, ptr %a2 + call void @finch.gen.boundsCheck(ptr %t84, { ptr, i64, i64 } %t85, { ptr, i64, i64 } %t89, %S.ast.Node %t90) + store { ptr, i64, i64 } %t89, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load ptr, ptr %a1 + %t93 = load ptr, ptr %a1 + %t94 = load %S.ast.Type, ptr %a11 + %t95 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t93, %S.ast.Type %t94) + store { ptr, i64, i64 } { ptr @.str.4615, i64 23, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.4616, i64 6, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + store { ptr, i64, i64 } %t100, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a101 + %t106 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t105, ptr %a108 + store { ptr, i64, i64 } %t106, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t105, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t111, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.4617, i64 13, i64 0 }, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t111, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a112 + %t117 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t116, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t116, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + %t123 = call { ptr, i64, i64 } @finch.gen.op(ptr %t92, { ptr, i64, i64 } %t122) + store { ptr, i64, i64 } %t122, ptr %a124 + call void @finch_str_drop(ptr %a124) + store { ptr, i64, i64 } %t123, ptr %a125 + %t126 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t127 = load { ptr, i64, i64 }, ptr %a125 + store { ptr, i64, i64 } %t127, ptr %a128 + call void @finch_str_copy(ptr %a129, ptr %a128) + %t130 = load { ptr, i64, i64 }, ptr %a129 + %t131 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t130, 0 + %t132 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t133 = load { ptr, i64, i64 }, ptr %t132 + %t134 = extractvalue { ptr, i64, i64 } %t133, 1 + %t135 = icmp uge i64 0, %t134 + br i1 %t135, label %range7202, label %inrange7203 +range7202: + call void @finch_panic_index(ptr @.str.4618, i64 4028, i64 0, i64 %t134) + unreachable +inrange7203: + %t136 = extractvalue { ptr, i64, i64 } %t133, 0 + %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 0 + %t138 = load %S.ast.Type, ptr %t137 + store %S.ast.Type %t138, ptr %a139 + call void @finch.copy.S_ast_Type(ptr %a140, ptr %a139) + %t141 = load %S.ast.Type, ptr %a140 + %t142 = insertvalue %S.gen.Place %t131, %S.ast.Type %t141, 1 + %t143 = insertvalue %S.gen.Ref %t126, %S.gen.Place %t142, 1 + call void @finch_str_drop(ptr %a125) + call void @finch_str_drop(ptr %a67) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t143 +endif7198: + %t144 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t145 = load { ptr, i64, i64 }, ptr %t144 + store { ptr, i64, i64 } %t145, ptr %a146 + store { ptr, i64, i64 } { ptr @.str.4619, i64 3, i64 0 }, ptr %a147 + %t148 = call i32 @finch_str_eq(ptr %a146, ptr %a147) + %t149 = icmp ne i32 %t148, 0 + br i1 %t149, label %then7204, label %endif7206 +then7204: + %t150 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 + %t152 = load i64, ptr %t151 + %t153 = icmp eq i64 %t152, 0 + br i1 %t153, label %then7207, label %endif7209 +then7207: + %t154 = load ptr, ptr %a1 + %t155 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } { ptr @.str.4620, i64 57, i64 0 }) + br label %endif7209 +endif7209: + %t156 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t157 = getelementptr inbounds %S.gen.Val, ptr %t156, i32 0, i32 0 + %t158 = load { ptr, i64, i64 }, ptr %t157 + store { ptr, i64, i64 } %t158, ptr %a159 + call void @finch_str_copy(ptr %a160, ptr %a159) + %t161 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t161, ptr %a162 + %t163 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t164 = load i1, ptr %t163 + br i1 %t164, label %then7210, label %endif7212 +then7210: + %t165 = load ptr, ptr %a1 + %t166 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t167 = getelementptr inbounds %S.gen.Place, ptr %t166, i32 0, i32 0 + %t168 = load { ptr, i64, i64 }, ptr %t167 + %t169 = call { ptr, i64, i64 } @finch.gen.load(ptr %t165, { ptr, i64, i64 } { ptr @.str.4621, i64 3, i64 0 }, { ptr, i64, i64 } %t168) + %t170 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t169, ptr %a162 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_drop(ptr %a171) + br label %endif7212 +endif7212: + %t172 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t173 = load { ptr, i64, i64 }, ptr %t172 + %t174 = extractvalue { ptr, i64, i64 } %t173, 1 + %t175 = icmp uge i64 0, %t174 + br i1 %t175, label %range7213, label %inrange7214 +range7213: + call void @finch_panic_index(ptr @.str.4622, i64 4038, i64 0, i64 %t174) + unreachable +inrange7214: + %t176 = extractvalue { ptr, i64, i64 } %t173, 0 + %t177 = getelementptr inbounds %S.ast.Type, ptr %t176, i64 0 + %t178 = load %S.ast.Type, ptr %t177 + store %S.ast.Type %t178, ptr %a179 + call void @finch.copy.S_ast_Type(ptr %a180, ptr %a179) + %t181 = load %S.ast.Type, ptr %a180 + store %S.ast.Type %t181, ptr %a182 + %t183 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t184 = load ptr, ptr %a1 + %t185 = load ptr, ptr %a1 + %t186 = load %S.ast.Type, ptr %a182 + %t187 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t185, %S.ast.Type %t186) + store { ptr, i64, i64 } { ptr @.str.4623, i64 23, i64 0 }, ptr %a189 + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.4624, i64 6, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load { ptr, i64, i64 }, ptr %a193 + %t198 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t197, ptr %a200 + store { ptr, i64, i64 } %t198, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + store { ptr, i64, i64 } %t197, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t203, ptr %a205 + store { ptr, i64, i64 } { ptr @.str.4625, i64 6, i64 0 }, ptr %a206 + call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) + store { ptr, i64, i64 } %t203, ptr %a207 + call void @finch_str_drop(ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a204 + %t209 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t208, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t208, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + %t215 = call { ptr, i64, i64 } @finch.gen.op(ptr %t184, { ptr, i64, i64 } %t214) + store { ptr, i64, i64 } %t214, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t215, 0 + %t218 = load %S.ast.Type, ptr %a182 + store %S.ast.Type %t218, ptr %a219 + call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) + %t221 = load %S.ast.Type, ptr %a220 + %t222 = insertvalue %S.gen.Place %t217, %S.ast.Type %t221, 1 + %t223 = insertvalue %S.gen.Ref %t183, %S.gen.Place %t222, 1 + call void @finch.drop.S_ast_Type(ptr %a182) + call void @finch_str_drop(ptr %a162) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t223 +endif7206: + %t224 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t225 = load { ptr, i64, i64 }, ptr %t224 + store { ptr, i64, i64 } %t225, ptr %a226 + store { ptr, i64, i64 } { ptr @.str.4626, i64 5, i64 0 }, ptr %a227 + %t228 = call i32 @finch_str_eq(ptr %a226, ptr %a227) + %t229 = icmp eq i32 %t228, 0 + br label %logic.from7215 +logic.from7215: + br i1 %t229, label %logic.rhs7216, label %logic.end7217 +logic.rhs7216: + %t230 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t231 = load { ptr, i64, i64 }, ptr %t230 + store { ptr, i64, i64 } %t231, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.4627, i64 3, i64 0 }, ptr %a233 + %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) + %t235 = icmp eq i32 %t234, 0 + br label %logic.rend7218 +logic.rend7218: + br label %logic.end7217 +logic.end7217: + %t236 = phi i1 [ false, %logic.from7215 ], [ %t235, %logic.rend7218 ] + br i1 %t236, label %then7219, label %endif7221 +then7219: + %t237 = load ptr, ptr %a1 + %t238 = load %S.ast.Node, ptr %a2 + %t239 = load %S.ast.Type, ptr %a11 + %t240 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t239) + store { ptr, i64, i64 } { ptr @.str.4628, i64 46, i64 0 }, ptr %a242 + store { ptr, i64, i64 } %t240, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t240, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + call void @finch.gen.fail(ptr %t237, %S.ast.Node %t238, { ptr, i64, i64 } %t245) + store { ptr, i64, i64 } %t245, ptr %a246 + call void @finch_str_drop(ptr %a246) + br label %endif7221 +endif7221: + %t247 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4629, i64 4, i64 0 }) + store %S.ast.Type %t247, ptr %a248 + %t249 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t250 = load { ptr, i64, i64 }, ptr %t249 + store { ptr, i64, i64 } %t250, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.4630, i64 5, i64 0 }, ptr %a252 + %t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252) + %t254 = icmp ne i32 %t253, 0 + br i1 %t254, label %then7222, label %endif7224 +then7222: + %t255 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t256 = load { ptr, i64, i64 }, ptr %t255 + %t257 = extractvalue { ptr, i64, i64 } %t256, 1 + %t258 = icmp uge i64 0, %t257 + br i1 %t258, label %range7225, label %inrange7226 +range7225: + call void @finch_panic_index(ptr @.str.4631, i64 4046, i64 0, i64 %t257) + unreachable +inrange7226: + %t259 = extractvalue { ptr, i64, i64 } %t256, 0 + %t260 = getelementptr inbounds %S.ast.Type, ptr %t259, i64 0 + %t261 = load %S.ast.Type, ptr %t260 + store %S.ast.Type %t261, ptr %a262 + call void @finch.copy.S_ast_Type(ptr %a263, ptr %a262) + %t264 = load %S.ast.Type, ptr %a263 + %t265 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t264, ptr %a248 + store %S.ast.Type %t265, ptr %a266 + call void @finch.drop.S_ast_Type(ptr %a266) + br label %endif7224 +endif7224: + %t267 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t268, ptr %a269 + store { ptr, i64, i64 } { ptr @.str.4632, i64 3, i64 0 }, ptr %a270 + %t271 = call i32 @finch_str_eq(ptr %a269, ptr %a270) + %t272 = icmp ne i32 %t271, 0 + br label %logic.from7227 +logic.from7227: + br i1 %t272, label %logic.rhs7228, label %logic.end7229 +logic.rhs7228: + %t273 = load i1, ptr %a4 + br label %logic.rend7230 +logic.rend7230: + br label %logic.end7229 +logic.end7229: + %t274 = phi i1 [ false, %logic.from7227 ], [ %t273, %logic.rend7230 ] + br i1 %t274, label %then7231, label %endif7233 +then7231: + %t275 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t276 = load i1, ptr %t275 + %t277 = xor i1 %t276, true + br i1 %t277, label %then7234, label %endif7236 +then7234: + %t278 = load ptr, ptr %a1 + %t279 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t278, %S.ast.Node %t279, { ptr, i64, i64 } { ptr @.str.4633, i64 44, i64 0 }) + br label %endif7236 +endif7236: + %t280 = load ptr, ptr %a1 + %t281 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t282 = getelementptr inbounds %S.gen.Place, ptr %t281, i32 0, i32 0 + %t283 = load { ptr, i64, i64 }, ptr %t282 + store { ptr, i64, i64 } { ptr @.str.4634, i64 29, i64 0 }, ptr %a285 + store { ptr, i64, i64 } %t283, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + %t287 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t287, ptr %a289 + store { ptr, i64, i64 } { ptr @.str.4635, i64 1, i64 0 }, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t287, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + call void @finch.gen.emit(ptr %t280, { ptr, i64, i64 } %t292) + store { ptr, i64, i64 } %t292, ptr %a293 + call void @finch_str_drop(ptr %a293) + br label %endif7233 +endif7233: + %t294 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t295 = getelementptr inbounds %S.gen.Val, ptr %t294, i32 0, i32 0 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_copy(ptr %a298, ptr %a297) + %t299 = load { ptr, i64, i64 }, ptr %a298 + store { ptr, i64, i64 } %t299, ptr %a300 + %t301 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t302 = load i1, ptr %t301 + br i1 %t302, label %then7237, label %endif7239 +then7237: + %t303 = load ptr, ptr %a1 + %t304 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t305 = getelementptr inbounds %S.gen.Place, ptr %t304, i32 0, i32 0 + %t306 = load { ptr, i64, i64 }, ptr %t305 + %t307 = call { ptr, i64, i64 } @finch.gen.load(ptr %t303, { ptr, i64, i64 } { ptr @.str.4636, i64 17, i64 0 }, { ptr, i64, i64 } %t306) + %t308 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } %t307, ptr %a300 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif7239 +endif7239: + %t310 = load ptr, ptr %a1 + %t311 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.4637, i64 31, i64 0 }, ptr %a313 + store { ptr, i64, i64 } %t311, ptr %a314 + call void @finch_str_concat(ptr %a312, ptr %a313, ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a312 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.4638, i64 3, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + %t321 = call { ptr, i64, i64 } @finch.gen.op(ptr %t310, { ptr, i64, i64 } %t320) + store { ptr, i64, i64 } %t320, ptr %a322 + call void @finch_str_drop(ptr %a322) + store { ptr, i64, i64 } %t321, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = load { ptr, i64, i64 }, ptr %a60 + %t326 = load { ptr, i64, i64 }, ptr %a323 + %t327 = load %S.ast.Node, ptr %a2 + call void @finch.gen.boundsCheck(ptr %t324, { ptr, i64, i64 } %t325, { ptr, i64, i64 } %t326, %S.ast.Node %t327) + %t328 = load ptr, ptr %a1 + %t329 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.4639, i64 31, i64 0 }, ptr %a331 + store { ptr, i64, i64 } %t329, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + %t333 = load { ptr, i64, i64 }, ptr %a330 + store { ptr, i64, i64 } %t333, ptr %a335 + store { ptr, i64, i64 } { ptr @.str.4640, i64 3, i64 0 }, ptr %a336 + call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336) + store { ptr, i64, i64 } %t333, ptr %a337 + call void @finch_str_drop(ptr %a337) + %t338 = load { ptr, i64, i64 }, ptr %a334 + %t339 = call { ptr, i64, i64 } @finch.gen.op(ptr %t328, { ptr, i64, i64 } %t338) + store { ptr, i64, i64 } %t338, ptr %a340 + call void @finch_str_drop(ptr %a340) + store { ptr, i64, i64 } %t339, ptr %a341 + %t342 = load ptr, ptr %a1 + %t343 = load ptr, ptr %a1 + %t344 = load %S.ast.Type, ptr %a248 + %t345 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t343, %S.ast.Type %t344) + store { ptr, i64, i64 } { ptr @.str.4641, i64 23, i64 0 }, ptr %a347 + store { ptr, i64, i64 } %t345, ptr %a348 + call void @finch_str_concat(ptr %a346, ptr %a347, ptr %a348) + store { ptr, i64, i64 } %t345, ptr %a349 + call void @finch_str_drop(ptr %a349) + %t350 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t350, ptr %a352 + store { ptr, i64, i64 } { ptr @.str.4642, i64 6, i64 0 }, ptr %a353 + call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) + store { ptr, i64, i64 } %t350, ptr %a354 + call void @finch_str_drop(ptr %a354) + %t355 = load { ptr, i64, i64 }, ptr %a351 + %t356 = load { ptr, i64, i64 }, ptr %a341 + store { ptr, i64, i64 } %t355, ptr %a358 + store { ptr, i64, i64 } %t356, ptr %a359 + call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) + store { ptr, i64, i64 } %t355, ptr %a360 + call void @finch_str_drop(ptr %a360) + %t361 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t361, ptr %a363 + store { ptr, i64, i64 } { ptr @.str.4643, i64 6, i64 0 }, ptr %a364 + call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) + store { ptr, i64, i64 } %t361, ptr %a365 + call void @finch_str_drop(ptr %a365) + %t366 = load { ptr, i64, i64 }, ptr %a362 + %t367 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t366, ptr %a369 + store { ptr, i64, i64 } %t367, ptr %a370 + call void @finch_str_concat(ptr %a368, ptr %a369, ptr %a370) + store { ptr, i64, i64 } %t366, ptr %a371 + call void @finch_str_drop(ptr %a371) + %t372 = load { ptr, i64, i64 }, ptr %a368 + %t373 = call { ptr, i64, i64 } @finch.gen.op(ptr %t342, { ptr, i64, i64 } %t372) + store { ptr, i64, i64 } %t372, ptr %a374 + call void @finch_str_drop(ptr %a374) + store { ptr, i64, i64 } %t373, ptr %a375 + %t376 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t377 = load i1, ptr %t376 + br i1 %t377, label %then7240, label %endif7242 +then7240: + %t378 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t379 = load { ptr, i64, i64 }, ptr %a375 + store { ptr, i64, i64 } %t379, ptr %a380 + call void @finch_str_copy(ptr %a381, ptr %a380) + %t382 = load { ptr, i64, i64 }, ptr %a381 + %t383 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t382, 0 + %t384 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t384, ptr %a385 + call void @finch.copy.S_ast_Type(ptr %a386, ptr %a385) + %t387 = load %S.ast.Type, ptr %a386 + %t388 = insertvalue %S.gen.Place %t383, %S.ast.Type %t387, 1 + %t389 = insertvalue %S.gen.Ref %t378, %S.gen.Place %t388, 1 + call void @finch_str_drop(ptr %a375) + call void @finch_str_drop(ptr %a341) + call void @finch_str_drop(ptr %a323) + call void @finch_str_drop(ptr %a300) + call void @finch.drop.S_ast_Type(ptr %a248) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t389 +endif7242: + %t390 = load ptr, ptr %a1 + %t391 = load ptr, ptr %a1 + %t392 = load %S.ast.Type, ptr %a248 + %t393 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t391, %S.ast.Type %t392) + %t394 = load { ptr, i64, i64 }, ptr %a375 + %t395 = call { ptr, i64, i64 } @finch.gen.load(ptr %t390, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t394) + store { ptr, i64, i64 } %t393, ptr %a396 + call void @finch_str_drop(ptr %a396) + store { ptr, i64, i64 } %t395, ptr %a397 + %t398 = load { ptr, i64, i64 }, ptr %a397 + store { ptr, i64, i64 } %t398, ptr %a399 + call void @finch_str_copy(ptr %a400, ptr %a399) + %t401 = load { ptr, i64, i64 }, ptr %a400 + %t402 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t401, 0 + %t403 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t403, ptr %a404 + call void @finch.copy.S_ast_Type(ptr %a405, ptr %a404) + %t406 = load %S.ast.Type, ptr %a405 + %t407 = insertvalue %S.gen.Val %t402, %S.ast.Type %t406, 1 + store %S.gen.Val %t407, ptr %a408 + %t409 = load ptr, ptr %a1 + %t410 = load %S.ast.Type, ptr %a248 + %t411 = call i1 @finch.gen.owning(ptr %t409, %S.ast.Type %t410) + br label %logic.from7243 +logic.from7243: + br i1 %t411, label %logic.rhs7244, label %logic.end7245 +logic.rhs7244: + %t412 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t413 = getelementptr inbounds %S.gen.Val, ptr %t412, i32 0, i32 2 + %t414 = load i1, ptr %t413 + br label %logic.rend7246 +logic.rend7246: + br label %logic.end7245 +logic.end7245: + %t415 = phi i1 [ false, %logic.from7243 ], [ %t414, %logic.rend7246 ] + br i1 %t415, label %then7247, label %endif7249 +then7247: + %t416 = load ptr, ptr %a1 + %t417 = load { ptr, i64, i64 }, ptr %a397 + %t418 = load %S.ast.Type, ptr %a248 + %t419 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t416, { ptr, i64, i64 } %t417, %S.ast.Type %t418) + %t420 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t419, 0 + %t421 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t421, ptr %a422 + call void @finch.copy.S_ast_Type(ptr %a423, ptr %a422) + %t424 = load %S.ast.Type, ptr %a423 + %t425 = insertvalue %S.gen.Val %t420, %S.ast.Type %t424, 1 + %t426 = insertvalue %S.gen.Val %t425, i1 true, 2 + %t427 = load %S.gen.Val, ptr %a408 + store %S.gen.Val %t426, ptr %a408 + store %S.gen.Val %t427, ptr %a428 + call void @finch.drop.S_gen_Val(ptr %a428) + br label %endif7249 +endif7249: + %t429 = load ptr, ptr %a1 + %t430 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t431 = load %S.gen.Val, ptr %t430 + call void @finch.gen.release(ptr %t429, %S.gen.Val %t431) + %t432 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t433 = load %S.gen.Val, ptr %a408 + store %S.gen.Val %t433, ptr %a434 + call void @finch.copy.S_gen_Val(ptr %a435, ptr %a434) + %t436 = load %S.gen.Val, ptr %a435 + %t437 = insertvalue %S.gen.Ref %t432, %S.gen.Val %t436, 2 + call void @finch.drop.S_gen_Val(ptr %a408) + call void @finch_str_drop(ptr %a397) + call void @finch_str_drop(ptr %a375) + call void @finch_str_drop(ptr %a341) + call void @finch_str_drop(ptr %a323) + call void @finch_str_drop(ptr %a300) + call void @finch.drop.S_ast_Type(ptr %a248) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t437 +} + +define internal void @finch.gen.checkArgs(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca i64, align 16 + %a13 = alloca i64, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load i64, ptr %a3 + %t10 = sub i64 %t8, %t9 + store i64 %t10, ptr %a11 + %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + store i64 0, ptr %a13 + br label %each.cond7250 +each.cond7250: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = load i64, ptr %a13 + %t17 = icmp slt i64 %t16, %t15 + br i1 %t17, label %each.body7251, label %each.end7253 +each.body7251: + %t18 = load ptr, ptr %t12 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = icmp sgt i64 %t23, 0 + br i1 %t24, label %then7254, label %endif7256 +then7254: + %t25 = load ptr, ptr %a1 + %t26 = load %S.ast.Node, ptr %a2 + %t27 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.4644, i64 17, i64 0 }, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t31, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.4645, i64 36, i64 0 }, ptr %a34 + call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) + store { ptr, i64, i64 } %t31, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a32 + call void @finch.gen.fail(ptr %t25, %S.ast.Node %t26, { ptr, i64, i64 } %t36) + store { ptr, i64, i64 } %t36, ptr %a37 + call void @finch_str_drop(ptr %a37) + br label %endif7256 +endif7256: + br label %each.step7252 +each.step7252: + %t38 = load i64, ptr %a13 + %t39 = add i64 %t38, 1 + store i64 %t39, ptr %a13 + br label %each.cond7250 +each.end7253: + %t40 = load i64, ptr %a11 + %t41 = load i64, ptr %a4 + %t42 = icmp ne i64 %t40, %t41 + br i1 %t42, label %then7257, label %endif7259 +then7257: + %t43 = load ptr, ptr %a1 + %t44 = load %S.ast.Node, ptr %a2 + %t45 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4646, i64 1, i64 0 }, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.4647, i64 8, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + %t55 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a56, i64 %t55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a59 + store { ptr, i64, i64 } %t57, ptr %a60 + call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) + store { ptr, i64, i64 } %t54, ptr %a61 + call void @finch_str_drop(ptr %a61) + store { ptr, i64, i64 } %t57, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a58 + store { ptr, i64, i64 } %t63, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.4648, i64 22, i64 0 }, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t63, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a64 + %t69 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a70, i64 %t69) + %t71 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a73 + store { ptr, i64, i64 } %t71, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t68, ptr %a75 + call void @finch_str_drop(ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.fail(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t77) + store { ptr, i64, i64 } %t77, ptr %a78 + call void @finch_str_drop(ptr %a78) + br label %endif7259 +endif7259: + ret void +} + +define internal %S.gen.Val @finch.gen.strArg(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca %S.gen.Val, align 16 + %a13 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load ptr, ptr %a1 + %t6 = load %S.ast.Node, ptr %a2 + %t7 = call %S.gen.Val @finch.gen.expr(ptr %t5, %S.ast.Node %t6) + %t8 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4649, i64 3, i64 0 }) + %t9 = load %S.ast.Node, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %a3 + %t11 = call %S.gen.Val @finch.gen.coerce(ptr %t4, %S.gen.Val %t7, %S.ast.Type %t8, %S.ast.Node %t9, { ptr, i64, i64 } %t10) + store %S.gen.Val %t7, ptr %a12 + call void @finch.drop.S_gen_Val(ptr %a12) + store %S.ast.Type %t8, ptr %a13 + call void @finch.drop.S_ast_Type(ptr %a13) + ret %S.gen.Val %t11 +} + +define internal { ptr, i64, i64 } @finch.gen.strOut(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t2, { ptr, i64, i64 } { ptr @.str.4650, i64 17, i64 0 }) + ret { ptr, i64, i64 } %t3 +} + +define internal { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca i64, align 16 + %a36 = alloca i64, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.4651, i64 3, i64 0 }, ptr %a4 + %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) + %t6 = icmp ne i32 %t5, 0 + br i1 %t6, label %then7260, label %endif7262 +then7260: + ret { ptr, i64, i64 } { ptr @.str.4652, i64 3, i64 0 } +endif7262: + %t7 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4653, i64 3, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then7263, label %endif7265 +then7263: + ret { ptr, i64, i64 } { ptr @.str.4654, i64 5, i64 0 } +endif7265: + %t12 = mul i64 13, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t13 = call ptr @finch_alloc(i64 %t12) + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 0 + store { ptr, i64, i64 } { ptr @.str.4655, i64 3, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 1 + store { ptr, i64, i64 } { ptr @.str.4656, i64 5, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 2 + store { ptr, i64, i64 } { ptr @.str.4657, i64 4, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 3 + store { ptr, i64, i64 } { ptr @.str.4658, i64 4, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 4 + store { ptr, i64, i64 } { ptr @.str.4659, i64 2, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 5 + store { ptr, i64, i64 } { ptr @.str.4660, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 6 + store { ptr, i64, i64 } { ptr @.str.4661, i64 3, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 7 + store { ptr, i64, i64 } { ptr @.str.4662, i64 2, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 8 + store { ptr, i64, i64 } { ptr @.str.4663, i64 3, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 9 + store { ptr, i64, i64 } { ptr @.str.4664, i64 3, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 10 + store { ptr, i64, i64 } { ptr @.str.4665, i64 3, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 11 + store { ptr, i64, i64 } { ptr @.str.4666, i64 3, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 12 + store { ptr, i64, i64 } { ptr @.str.4667, i64 3, i64 0 }, ptr %t26 + %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t13, 0 + %t28 = insertvalue { ptr, i64, i64 } %t27, i64 13, 1 + %t29 = insertvalue { ptr, i64, i64 } %t28, i64 13, 2 + store { ptr, i64, i64 } %t29, ptr %a30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a33 + %t34 = load i64, ptr %t31 + %t35 = load ptr, ptr %a30 + store i64 0, ptr %a36 + br label %find.cond7266 +find.cond7266: + %t37 = load i64, ptr %a36 + %t38 = icmp slt i64 %t37, %t34 + br i1 %t38, label %find.body7267, label %find.end7270 +find.body7267: + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t37 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } %t32, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %find.hit7268, label %find.next7269 +find.hit7268: + store i64 %t37, ptr %a33 + br label %find.end7270 +find.next7269: + %t45 = add i64 %t37, 1 + store i64 %t45, ptr %a36 + br label %find.cond7266 +find.end7270: + %t46 = load i64, ptr %a33 + %t47 = icmp sge i64 %t46, 0 + br i1 %t47, label %then7271, label %endif7273 +then7271: + %t48 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t48, ptr %a49 + call void @finch_str_copy(ptr %a50, ptr %a49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } %t51 +endif7273: + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } { ptr @.str.4668, i64 0, i64 0 } +} + +define internal %S.gen.Val @finch.gen.convert(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.gen.Val, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca %S.ast.Type, align 16 + %a139 = alloca %S.ast.Type, align 16 + %a140 = alloca %S.ast.Type, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca %S.ast.Type, align 16 + %a226 = alloca %S.ast.Type, align 16 + %a227 = alloca %S.ast.Type, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca %S.ast.Type, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a309 = alloca %S.ast.Type, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca %S.ast.Type, align 16 + %a365 = alloca %S.ast.Type, align 16 + %a366 = alloca %S.ast.Type, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca %S.ast.Type, align 16 + %a387 = alloca %S.ast.Type, align 16 + %a388 = alloca %S.ast.Type, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca %S.ast.Type, align 16 + %a418 = alloca %S.ast.Type, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca %S.ast.Type, align 16 + %a453 = alloca %S.ast.Type, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca %S.ast.Type, align 16 + %a512 = alloca %S.ast.Type, align 16 + %a527 = alloca %S.ast.Type, align 16 + %a528 = alloca %S.ast.Type, align 16 + %a541 = alloca %S.ast.Type, align 16 + %a542 = alloca %S.ast.Type, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca %S.ast.Type, align 16 + %a585 = alloca %S.ast.Type, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a615 = alloca %S.ast.Type, align 16 + %a616 = alloca %S.ast.Type, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca %S.ast.Type, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a644 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca %S.ast.Type, align 16 + %a651 = alloca %S.ast.Type, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca %S.ast.Type, align 16 + %a689 = alloca %S.ast.Type, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a731 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a737 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Node, ptr %a2 + %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 0, i64 1, { ptr, i64, i64 } %t7) + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t10 = load { ptr, i64, i64 }, ptr %t9 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 0, %t11 + br i1 %t12, label %range7274, label %inrange7275 +range7274: + call void @finch_panic_index(ptr @.str.4669, i64 4116, i64 0, i64 %t11) + unreachable +inrange7275: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.ast.Node, ptr %t13, i64 0 + %t15 = load %S.ast.Node, ptr %t14 + %t16 = call %S.gen.Val @finch.gen.expr(ptr %t8, %S.ast.Node %t15) + store %S.gen.Val %t16, ptr %a17 + %t18 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 1 + %t19 = load %S.ast.Type, ptr %t18 + store %S.ast.Type %t19, ptr %a20 + call void @finch.copy.S_ast_Type(ptr %a21, ptr %a20) + %t22 = load %S.ast.Type, ptr %a21 + store %S.ast.Type %t22, ptr %a23 + %t24 = load %S.ast.Type, ptr %a23 + %t25 = load %S.ast.Type, ptr %a3 + %t26 = call i1 @finch.ast.same(%S.ast.Type %t24, %S.ast.Type %t25) + br i1 %t26, label %then7276, label %endif7278 +then7276: + %t27 = load %S.gen.Val, ptr %a17 + call void @finch.drop.S_ast_Type(ptr %a23) + ret %S.gen.Val %t27 +endif7278: + %t28 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.4670, i64 3, i64 0 }, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br label %logic.from7279 +logic.from7279: + br i1 %t33, label %logic.rhs7280, label %logic.end7281 +logic.rhs7280: + %t34 = load %S.ast.Type, ptr %a3 + %t35 = call i1 @finch.gen.isNumber(%S.ast.Type %t34) + br label %logic.rend7282 +logic.rend7282: + br label %logic.end7281 +logic.end7281: + %t36 = phi i1 [ false, %logic.from7279 ], [ %t35, %logic.rend7282 ] + br label %logic.from7283 +logic.from7283: + br i1 %t36, label %logic.rhs7284, label %logic.end7285 +logic.rhs7284: + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic7286, label %ok7287 +panic7286: + call void @finch_panic(ptr @.str.4671, i64 4121, ptr @.str.4672) + unreachable +ok7287: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 41 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = load %S.ast.Node, ptr %a2 + %t42 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t41) + store { ptr, i64, i64 } %t40, ptr %a43 + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + store { ptr, i64, i64 } %t42, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %logic.rend7288 +logic.rend7288: + br label %logic.end7285 +logic.end7285: + %t48 = phi i1 [ false, %logic.from7283 ], [ %t46, %logic.rend7288 ] + br i1 %t48, label %then7289, label %endif7291 +then7289: + %t49 = load ptr, ptr %a1 + %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.4673, i64 17, i64 0 }) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.4674, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4675, i64 15, i64 0 }, { ptr, i64, i64 } %t53) + %t54 = load %S.ast.Type, ptr %a3 + %t55 = call i1 @finch.gen.isInt(%S.ast.Type %t54) + br i1 %t55, label %then7292, label %endif7294 +then7292: + %t56 = load ptr, ptr %a1 + %t57 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t56, { ptr, i64, i64 } { ptr @.str.4676, i64 3, i64 0 }) + store { ptr, i64, i64 } %t57, ptr %a58 + %t59 = load ptr, ptr %a1 + %t60 = load { ptr, i64, i64 }, ptr %a58 + call void @finch.gen.store(ptr %t59, { ptr, i64, i64 } { ptr @.str.4677, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.4678, i64 1, i64 0 }, { ptr, i64, i64 } %t60) + %t61 = load ptr, ptr %a1 + %t62 = load ptr, ptr %a1 + %t63 = load %S.gen.Val, ptr %a17 + %t64 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t62, %S.gen.Val %t63) + store { ptr, i64, i64 } { ptr @.str.4679, i64 32, i64 0 }, ptr %a66 + store { ptr, i64, i64 } %t64, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.4680, i64 6, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load { ptr, i64, i64 }, ptr %a58 + store { ptr, i64, i64 } %t74, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t74, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.4681, i64 6, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t85, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.4682, i64 1, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + %t97 = call { ptr, i64, i64 } @finch.gen.op(ptr %t61, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a98 + call void @finch_str_drop(ptr %a98) + store { ptr, i64, i64 } %t97, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.4683, i64 12, i64 0 }, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.4684, i64 3, i64 0 }, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t105, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t110) + store { ptr, i64, i64 } %t110, ptr %a112 + call void @finch_str_drop(ptr %a112) + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic7295, label %ok7296 +panic7295: + call void @finch_panic(ptr @.str.4685, i64 4129, ptr @.str.4686) + unreachable +ok7296: + %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 42 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t111, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load ptr, ptr %a1 + %t119 = load { ptr, i64, i64 }, ptr %a51 + %t120 = call { ptr, i64, i64 } @finch.gen.load(ptr %t118, { ptr, i64, i64 } { ptr @.str.4687, i64 17, i64 0 }, { ptr, i64, i64 } %t119) + %t121 = load ptr, ptr %a1 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic7297, label %ok7298 +panic7297: + call void @finch_panic(ptr @.str.4688, i64 4130, ptr @.str.4689) + unreachable +ok7298: + %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 43 + %t124 = load { ptr, i64, i64 }, ptr %t123 + store { ptr, i64, i64 } %t120, ptr %t123 + store { ptr, i64, i64 } %t124, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load ptr, ptr %a1 + %t127 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t126, %S.gen.Val %t127) + %t128 = load ptr, ptr %a1 + %t129 = load ptr, ptr %a1 + %t130 = load { ptr, i64, i64 }, ptr %a58 + %t131 = call { ptr, i64, i64 } @finch.gen.load(ptr %t129, { ptr, i64, i64 } { ptr @.str.4690, i64 3, i64 0 }, { ptr, i64, i64 } %t130) + %t132 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4691, i64 3, i64 0 }) + %t133 = load %S.ast.Type, ptr %a3 + %t134 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t128, { ptr, i64, i64 } %t131, %S.ast.Type %t132, %S.ast.Type %t133) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + store %S.ast.Type %t132, ptr %a136 + call void @finch.drop.S_ast_Type(ptr %a136) + %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t134, 0 + %t138 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t138, ptr %a139 + call void @finch.copy.S_ast_Type(ptr %a140, ptr %a139) + %t141 = load %S.ast.Type, ptr %a140 + %t142 = insertvalue %S.gen.Val %t137, %S.ast.Type %t141, 1 + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a58) + call void @finch_str_drop(ptr %a51) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t142 +endif7294: + %t143 = load ptr, ptr %a1 + %t144 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t143, { ptr, i64, i64 } { ptr @.str.4692, i64 6, i64 0 }) + store { ptr, i64, i64 } %t144, ptr %a145 + %t146 = load ptr, ptr %a1 + %t147 = load { ptr, i64, i64 }, ptr %a145 + call void @finch.gen.store(ptr %t146, { ptr, i64, i64 } { ptr @.str.4693, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.4694, i64 3, i64 0 }, { ptr, i64, i64 } %t147) + %t148 = load ptr, ptr %a1 + %t149 = load ptr, ptr %a1 + %t150 = load %S.gen.Val, ptr %a17 + %t151 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t149, %S.gen.Val %t150) + store { ptr, i64, i64 } { ptr @.str.4695, i64 34, i64 0 }, ptr %a153 + store { ptr, i64, i64 } %t151, ptr %a154 + call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154) + store { ptr, i64, i64 } %t151, ptr %a155 + call void @finch_str_drop(ptr %a155) + %t156 = load { ptr, i64, i64 }, ptr %a152 + store { ptr, i64, i64 } %t156, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.4696, i64 6, i64 0 }, ptr %a159 + call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) + store { ptr, i64, i64 } %t156, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a157 + %t162 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t161, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t161, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t167, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4697, i64 6, i64 0 }, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t167, ptr %a171 + call void @finch_str_drop(ptr %a171) + %t172 = load { ptr, i64, i64 }, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t172, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t172, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.4698, i64 1, i64 0 }, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t178, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t148, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + store { ptr, i64, i64 } %t184, ptr %a186 + %t187 = load ptr, ptr %a1 + %t188 = load { ptr, i64, i64 }, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.4699, i64 12, i64 0 }, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a189 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.4700, i64 3, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load { ptr, i64, i64 }, ptr %a193 + %t198 = call { ptr, i64, i64 } @finch.gen.op(ptr %t187, { ptr, i64, i64 } %t197) + store { ptr, i64, i64 } %t197, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load ptr, ptr %a1 + %t201 = icmp eq ptr %t200, null + br i1 %t201, label %panic7299, label %ok7300 +panic7299: + call void @finch_panic(ptr @.str.4701, i64 4137, ptr @.str.4702) + unreachable +ok7300: + %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 42 + %t203 = load { ptr, i64, i64 }, ptr %t202 + store { ptr, i64, i64 } %t198, ptr %t202 + store { ptr, i64, i64 } %t203, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load ptr, ptr %a1 + %t206 = load { ptr, i64, i64 }, ptr %a51 + %t207 = call { ptr, i64, i64 } @finch.gen.load(ptr %t205, { ptr, i64, i64 } { ptr @.str.4703, i64 17, i64 0 }, { ptr, i64, i64 } %t206) + %t208 = load ptr, ptr %a1 + %t209 = icmp eq ptr %t208, null + br i1 %t209, label %panic7301, label %ok7302 +panic7301: + call void @finch_panic(ptr @.str.4704, i64 4138, ptr @.str.4705) + unreachable +ok7302: + %t210 = getelementptr inbounds %S.gen.Gen, ptr %t208, i32 0, i32 43 + %t211 = load { ptr, i64, i64 }, ptr %t210 + store { ptr, i64, i64 } %t207, ptr %t210 + store { ptr, i64, i64 } %t211, ptr %a212 + call void @finch_str_drop(ptr %a212) + %t213 = load ptr, ptr %a1 + %t214 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t213, %S.gen.Val %t214) + %t215 = load ptr, ptr %a1 + %t216 = load ptr, ptr %a1 + %t217 = load { ptr, i64, i64 }, ptr %a145 + %t218 = call { ptr, i64, i64 } @finch.gen.load(ptr %t216, { ptr, i64, i64 } { ptr @.str.4706, i64 6, i64 0 }, { ptr, i64, i64 } %t217) + %t219 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4707, i64 5, i64 0 }) + %t220 = load %S.ast.Type, ptr %a3 + %t221 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t215, { ptr, i64, i64 } %t218, %S.ast.Type %t219, %S.ast.Type %t220) + store { ptr, i64, i64 } %t218, ptr %a222 + call void @finch_str_drop(ptr %a222) + store %S.ast.Type %t219, ptr %a223 + call void @finch.drop.S_ast_Type(ptr %a223) + %t224 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t221, 0 + %t225 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t225, ptr %a226 + call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) + %t228 = load %S.ast.Type, ptr %a227 + %t229 = insertvalue %S.gen.Val %t224, %S.ast.Type %t228, 1 + call void @finch_str_drop(ptr %a186) + call void @finch_str_drop(ptr %a145) + call void @finch_str_drop(ptr %a51) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t229 +endif7291: + %t230 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t231 = load { ptr, i64, i64 }, ptr %t230 + store { ptr, i64, i64 } %t231, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.4708, i64 3, i64 0 }, ptr %a233 + %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) + %t235 = icmp ne i32 %t234, 0 + br label %logic.from7303 +logic.from7303: + br i1 %t235, label %logic.rhs7304, label %logic.end7305 +logic.rhs7304: + %t236 = load %S.ast.Type, ptr %a3 + %t237 = call i1 @finch.gen.isNumber(%S.ast.Type %t236) + br label %logic.rend7306 +logic.rend7306: + br label %logic.end7305 +logic.end7305: + %t238 = phi i1 [ false, %logic.from7303 ], [ %t237, %logic.rend7306 ] + br i1 %t238, label %then7307, label %endif7309 +then7307: + %t239 = load ptr, ptr %a1 + %t240 = load ptr, ptr %a1 + %t241 = icmp eq ptr %t240, null + br i1 %t241, label %panic7310, label %ok7311 +panic7310: + call void @finch_panic(ptr @.str.4709, i64 4143, ptr @.str.4710) + unreachable +ok7311: + %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 1 + %t243 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t244 = load i64, ptr %t243 + %t245 = load { ptr, i64, i64 }, ptr %t242 + %t246 = extractvalue { ptr, i64, i64 } %t245, 1 + %t247 = icmp uge i64 %t244, %t246 + br i1 %t247, label %range7312, label %inrange7313 +range7312: + call void @finch_panic_index(ptr @.str.4711, i64 4143, i64 %t244, i64 %t246) + unreachable +inrange7313: + %t248 = extractvalue { ptr, i64, i64 } %t245, 0 + %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t244 + %t250 = load { ptr, i64, i64 }, ptr %t249 + %t251 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t239, { ptr, i64, i64 } %t250) + store { ptr, i64, i64 } %t251, ptr %a252 + %t253 = load %S.ast.Type, ptr %a3 + %t254 = call i1 @finch.gen.isInt(%S.ast.Type %t253) + br i1 %t254, label %then7314, label %endif7316 +then7314: + %t255 = load ptr, ptr %a1 + %t256 = load ptr, ptr %a1 + %t257 = load %S.gen.Val, ptr %a17 + %t258 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t256, %S.gen.Val %t257) + store { ptr, i64, i64 } { ptr @.str.4712, i64 31, i64 0 }, ptr %a260 + store { ptr, i64, i64 } %t258, ptr %a261 + call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) + store { ptr, i64, i64 } %t258, ptr %a262 + call void @finch_str_drop(ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a259 + store { ptr, i64, i64 } %t263, ptr %a265 + store { ptr, i64, i64 } { ptr @.str.4713, i64 6, i64 0 }, ptr %a266 + call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) + store { ptr, i64, i64 } %t263, ptr %a267 + call void @finch_str_drop(ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a264 + %t269 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t268, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t268, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.4714, i64 6, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + store { ptr, i64, i64 } %t274, ptr %a278 + call void @finch_str_drop(ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a275 + %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t281 = load i64, ptr %t280 + call void @finch_str_from_int(ptr %a282, i64 %t281) + %t283 = load { ptr, i64, i64 }, ptr %a282 + store { ptr, i64, i64 } %t279, ptr %a285 + store { ptr, i64, i64 } %t283, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t279, ptr %a287 + call void @finch_str_drop(ptr %a287) + store { ptr, i64, i64 } %t283, ptr %a288 + call void @finch_str_drop(ptr %a288) + %t289 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t289, ptr %a291 + store { ptr, i64, i64 } { ptr @.str.4715, i64 1, i64 0 }, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + store { ptr, i64, i64 } %t289, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load { ptr, i64, i64 }, ptr %a290 + %t295 = call { ptr, i64, i64 } @finch.gen.op(ptr %t255, { ptr, i64, i64 } %t294) + store { ptr, i64, i64 } %t294, ptr %a296 + call void @finch_str_drop(ptr %a296) + store { ptr, i64, i64 } %t295, ptr %a297 + %t298 = load ptr, ptr %a1 + %t299 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t298, %S.gen.Val %t299) + %t300 = load ptr, ptr %a1 + %t301 = load { ptr, i64, i64 }, ptr %a297 + %t302 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4716, i64 3, i64 0 }) + %t303 = load %S.ast.Type, ptr %a3 + %t304 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t300, { ptr, i64, i64 } %t301, %S.ast.Type %t302, %S.ast.Type %t303) + store %S.ast.Type %t302, ptr %a305 + call void @finch.drop.S_ast_Type(ptr %a305) + %t306 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0 + %t307 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t307, ptr %a308 + call void @finch.copy.S_ast_Type(ptr %a309, ptr %a308) + %t310 = load %S.ast.Type, ptr %a309 + %t311 = insertvalue %S.gen.Val %t306, %S.ast.Type %t310, 1 + call void @finch_str_drop(ptr %a297) + call void @finch_str_drop(ptr %a252) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t311 +endif7316: + %t312 = load ptr, ptr %a1 + %t313 = load ptr, ptr %a1 + %t314 = load %S.gen.Val, ptr %a17 + %t315 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t313, %S.gen.Val %t314) + store { ptr, i64, i64 } { ptr @.str.4717, i64 36, i64 0 }, ptr %a317 + store { ptr, i64, i64 } %t315, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + store { ptr, i64, i64 } %t320, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.4718, i64 6, i64 0 }, ptr %a323 + call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) + store { ptr, i64, i64 } %t320, ptr %a324 + call void @finch_str_drop(ptr %a324) + %t325 = load { ptr, i64, i64 }, ptr %a321 + %t326 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t325, ptr %a328 + store { ptr, i64, i64 } %t326, ptr %a329 + call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) + store { ptr, i64, i64 } %t325, ptr %a330 + call void @finch_str_drop(ptr %a330) + %t331 = load { ptr, i64, i64 }, ptr %a327 + store { ptr, i64, i64 } %t331, ptr %a333 + store { ptr, i64, i64 } { ptr @.str.4719, i64 6, i64 0 }, ptr %a334 + call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) + store { ptr, i64, i64 } %t331, ptr %a335 + call void @finch_str_drop(ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a332 + %t337 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t338 = load i64, ptr %t337 + call void @finch_str_from_int(ptr %a339, i64 %t338) + %t340 = load { ptr, i64, i64 }, ptr %a339 + store { ptr, i64, i64 } %t336, ptr %a342 + store { ptr, i64, i64 } %t340, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t336, ptr %a344 + call void @finch_str_drop(ptr %a344) + store { ptr, i64, i64 } %t340, ptr %a345 + call void @finch_str_drop(ptr %a345) + %t346 = load { ptr, i64, i64 }, ptr %a341 + store { ptr, i64, i64 } %t346, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.4720, i64 1, i64 0 }, ptr %a349 + call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) + store { ptr, i64, i64 } %t346, ptr %a350 + call void @finch_str_drop(ptr %a350) + %t351 = load { ptr, i64, i64 }, ptr %a347 + %t352 = call { ptr, i64, i64 } @finch.gen.op(ptr %t312, { ptr, i64, i64 } %t351) + store { ptr, i64, i64 } %t351, ptr %a353 + call void @finch_str_drop(ptr %a353) + store { ptr, i64, i64 } %t352, ptr %a354 + %t355 = load ptr, ptr %a1 + %t356 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t355, %S.gen.Val %t356) + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a354 + %t359 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4721, i64 5, i64 0 }) + %t360 = load %S.ast.Type, ptr %a3 + %t361 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359, %S.ast.Type %t360) + store %S.ast.Type %t359, ptr %a362 + call void @finch.drop.S_ast_Type(ptr %a362) + %t363 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t361, 0 + %t364 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t364, ptr %a365 + call void @finch.copy.S_ast_Type(ptr %a366, ptr %a365) + %t367 = load %S.ast.Type, ptr %a366 + %t368 = insertvalue %S.gen.Val %t363, %S.ast.Type %t367, 1 + call void @finch_str_drop(ptr %a354) + call void @finch_str_drop(ptr %a252) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t368 +endif7309: + %t369 = load %S.ast.Type, ptr %a3 + %t370 = call i1 @finch.gen.isInt(%S.ast.Type %t369) + br label %logic.from7317 +logic.from7317: + br i1 %t370, label %logic.rhs7318, label %logic.end7319 +logic.rhs7318: + %t371 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t372 = load { ptr, i64, i64 }, ptr %t371 + store { ptr, i64, i64 } %t372, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.4722, i64 4, i64 0 }, ptr %a374 + %t375 = call i32 @finch_str_eq(ptr %a373, ptr %a374) + %t376 = icmp ne i32 %t375, 0 + br label %logic.rend7320 +logic.rend7320: + br label %logic.end7319 +logic.end7319: + %t377 = phi i1 [ false, %logic.from7317 ], [ %t376, %logic.rend7320 ] + br i1 %t377, label %then7321, label %endif7323 +then7321: + %t378 = load ptr, ptr %a1 + %t379 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t380 = load { ptr, i64, i64 }, ptr %t379 + %t381 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4723, i64 3, i64 0 }) + %t382 = load %S.ast.Type, ptr %a3 + %t383 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t378, { ptr, i64, i64 } %t380, %S.ast.Type %t381, %S.ast.Type %t382) + store %S.ast.Type %t381, ptr %a384 + call void @finch.drop.S_ast_Type(ptr %a384) + %t385 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t383, 0 + %t386 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t386, ptr %a387 + call void @finch.copy.S_ast_Type(ptr %a388, ptr %a387) + %t389 = load %S.ast.Type, ptr %a388 + %t390 = insertvalue %S.gen.Val %t385, %S.ast.Type %t389, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t390 +endif7323: + %t391 = load %S.ast.Type, ptr %a3 + %t392 = call i1 @finch.gen.isInt(%S.ast.Type %t391) + br label %logic.from7324 +logic.from7324: + br i1 %t392, label %logic.end7326, label %logic.rhs7325 +logic.rhs7325: + %t393 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t394 = load { ptr, i64, i64 }, ptr %t393 + store { ptr, i64, i64 } %t394, ptr %a395 + store { ptr, i64, i64 } { ptr @.str.4724, i64 4, i64 0 }, ptr %a396 + %t397 = call i32 @finch_str_eq(ptr %a395, ptr %a396) + %t398 = icmp ne i32 %t397, 0 + br label %logic.rend7327 +logic.rend7327: + br label %logic.end7326 +logic.end7326: + %t399 = phi i1 [ true, %logic.from7324 ], [ %t398, %logic.rend7327 ] + br i1 %t399, label %then7328, label %endif7330 +then7328: + %t400 = load %S.ast.Type, ptr %a23 + %t401 = call i1 @finch.gen.isInt(%S.ast.Type %t400) + br label %logic.from7331 +logic.from7331: + br i1 %t401, label %logic.end7333, label %logic.rhs7332 +logic.rhs7332: + %t402 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t403 = load { ptr, i64, i64 }, ptr %t402 + store { ptr, i64, i64 } %t403, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.4725, i64 4, i64 0 }, ptr %a405 + %t406 = call i32 @finch_str_eq(ptr %a404, ptr %a405) + %t407 = icmp ne i32 %t406, 0 + br label %logic.rend7334 +logic.rend7334: + br label %logic.end7333 +logic.end7333: + %t408 = phi i1 [ true, %logic.from7331 ], [ %t407, %logic.rend7334 ] + br i1 %t408, label %then7335, label %endif7337 +then7335: + %t409 = load ptr, ptr %a1 + %t410 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t411 = load { ptr, i64, i64 }, ptr %t410 + %t412 = load %S.ast.Type, ptr %a23 + %t413 = load %S.ast.Type, ptr %a3 + %t414 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t409, { ptr, i64, i64 } %t411, %S.ast.Type %t412, %S.ast.Type %t413) + %t415 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t414, 0 + %t416 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t416, ptr %a417 + call void @finch.copy.S_ast_Type(ptr %a418, ptr %a417) + %t419 = load %S.ast.Type, ptr %a418 + %t420 = insertvalue %S.gen.Val %t415, %S.ast.Type %t419, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t420 +endif7337: + %t421 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t422 = load { ptr, i64, i64 }, ptr %t421 + store { ptr, i64, i64 } %t422, ptr %a423 + store { ptr, i64, i64 } { ptr @.str.4726, i64 4, i64 0 }, ptr %a424 + %t425 = call i32 @finch_str_eq(ptr %a423, ptr %a424) + %t426 = icmp ne i32 %t425, 0 + br i1 %t426, label %then7338, label %endif7340 +then7338: + %t427 = load ptr, ptr %a1 + %t428 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t429 = load { ptr, i64, i64 }, ptr %t428 + store { ptr, i64, i64 } { ptr @.str.4727, i64 8, i64 0 }, ptr %a431 + store { ptr, i64, i64 } %t429, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + %t433 = load { ptr, i64, i64 }, ptr %a430 + store { ptr, i64, i64 } %t433, ptr %a435 + store { ptr, i64, i64 } { ptr @.str.4728, i64 4, i64 0 }, ptr %a436 + call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) + store { ptr, i64, i64 } %t433, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a434 + %t439 = load ptr, ptr %a1 + %t440 = load %S.ast.Type, ptr %a3 + %t441 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t439, %S.ast.Type %t440) + store { ptr, i64, i64 } %t438, ptr %a443 + store { ptr, i64, i64 } %t441, ptr %a444 + call void @finch_str_concat(ptr %a442, ptr %a443, ptr %a444) + store { ptr, i64, i64 } %t438, ptr %a445 + call void @finch_str_drop(ptr %a445) + store { ptr, i64, i64 } %t441, ptr %a446 + call void @finch_str_drop(ptr %a446) + %t447 = load { ptr, i64, i64 }, ptr %a442 + %t448 = call { ptr, i64, i64 } @finch.gen.op(ptr %t427, { ptr, i64, i64 } %t447) + store { ptr, i64, i64 } %t447, ptr %a449 + call void @finch_str_drop(ptr %a449) + %t450 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t448, 0 + %t451 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t451, ptr %a452 + call void @finch.copy.S_ast_Type(ptr %a453, ptr %a452) + %t454 = load %S.ast.Type, ptr %a453 + %t455 = insertvalue %S.gen.Val %t450, %S.ast.Type %t454, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t455 +endif7340: + %t456 = load %S.ast.Type, ptr %a23 + %t457 = call i1 @finch.gen.isFloat(%S.ast.Type %t456) + br label %logic.from7341 +logic.from7341: + br i1 %t457, label %logic.rhs7342, label %logic.end7343 +logic.rhs7342: + %t458 = load %S.ast.Type, ptr %a3 + %t459 = call i1 @finch.gen.isInt(%S.ast.Type %t458) + br label %logic.rend7344 +logic.rend7344: + br label %logic.end7343 +logic.end7343: + %t460 = phi i1 [ false, %logic.from7341 ], [ %t459, %logic.rend7344 ] + br i1 %t460, label %then7345, label %endif7347 +then7345: + store { ptr, i64, i64 } { ptr @.str.4729, i64 6, i64 0 }, ptr %a461 + %t462 = load %S.ast.Type, ptr %a3 + %t463 = call i1 @finch.gen.isSigned(%S.ast.Type %t462) + br i1 %t463, label %then7348, label %endif7350 +then7348: + %t464 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } { ptr @.str.4730, i64 6, i64 0 }, ptr %a461 + store { ptr, i64, i64 } %t464, ptr %a465 + call void @finch_str_drop(ptr %a465) + br label %endif7350 +endif7350: + %t466 = load ptr, ptr %a1 + %t467 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } %t467, ptr %a469 + store { ptr, i64, i64 } { ptr @.str.4731, i64 1, i64 0 }, ptr %a470 + call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) + %t471 = load { ptr, i64, i64 }, ptr %a468 + %t472 = load ptr, ptr %a1 + %t473 = load %S.ast.Type, ptr %a23 + %t474 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t472, %S.ast.Type %t473) + store { ptr, i64, i64 } %t471, ptr %a476 + store { ptr, i64, i64 } %t474, ptr %a477 + call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) + store { ptr, i64, i64 } %t471, ptr %a478 + call void @finch_str_drop(ptr %a478) + store { ptr, i64, i64 } %t474, ptr %a479 + call void @finch_str_drop(ptr %a479) + %t480 = load { ptr, i64, i64 }, ptr %a475 + store { ptr, i64, i64 } %t480, ptr %a482 + store { ptr, i64, i64 } { ptr @.str.4732, i64 1, i64 0 }, ptr %a483 + call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) + store { ptr, i64, i64 } %t480, ptr %a484 + call void @finch_str_drop(ptr %a484) + %t485 = load { ptr, i64, i64 }, ptr %a481 + %t486 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t487 = load { ptr, i64, i64 }, ptr %t486 + store { ptr, i64, i64 } %t485, ptr %a489 + store { ptr, i64, i64 } %t487, ptr %a490 + call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) + store { ptr, i64, i64 } %t485, ptr %a491 + call void @finch_str_drop(ptr %a491) + %t492 = load { ptr, i64, i64 }, ptr %a488 + store { ptr, i64, i64 } %t492, ptr %a494 + store { ptr, i64, i64 } { ptr @.str.4733, i64 4, i64 0 }, ptr %a495 + call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) + store { ptr, i64, i64 } %t492, ptr %a496 + call void @finch_str_drop(ptr %a496) + %t497 = load { ptr, i64, i64 }, ptr %a493 + %t498 = load ptr, ptr %a1 + %t499 = load %S.ast.Type, ptr %a3 + %t500 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t498, %S.ast.Type %t499) + store { ptr, i64, i64 } %t497, ptr %a502 + store { ptr, i64, i64 } %t500, ptr %a503 + call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) + store { ptr, i64, i64 } %t497, ptr %a504 + call void @finch_str_drop(ptr %a504) + store { ptr, i64, i64 } %t500, ptr %a505 + call void @finch_str_drop(ptr %a505) + %t506 = load { ptr, i64, i64 }, ptr %a501 + %t507 = call { ptr, i64, i64 } @finch.gen.op(ptr %t466, { ptr, i64, i64 } %t506) + store { ptr, i64, i64 } %t506, ptr %a508 + call void @finch_str_drop(ptr %a508) + %t509 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t507, 0 + %t510 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t510, ptr %a511 + call void @finch.copy.S_ast_Type(ptr %a512, ptr %a511) + %t513 = load %S.ast.Type, ptr %a512 + %t514 = insertvalue %S.gen.Val %t509, %S.ast.Type %t513, 1 + call void @finch_str_drop(ptr %a461) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t514 +endif7347: + br label %endif7330 +endif7330: + %t515 = load %S.ast.Type, ptr %a3 + %t516 = call i1 @finch.gen.isFloat(%S.ast.Type %t515) + br i1 %t516, label %then7351, label %endif7353 +then7351: + %t517 = load %S.ast.Type, ptr %a23 + %t518 = call i1 @finch.gen.isInt(%S.ast.Type %t517) + br i1 %t518, label %then7354, label %endif7356 +then7354: + %t519 = load ptr, ptr %a1 + %t520 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t521 = load { ptr, i64, i64 }, ptr %t520 + %t522 = load %S.ast.Type, ptr %a23 + %t523 = load %S.ast.Type, ptr %a3 + %t524 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t519, { ptr, i64, i64 } %t521, %S.ast.Type %t522, %S.ast.Type %t523) + %t525 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t524, 0 + %t526 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t526, ptr %a527 + call void @finch.copy.S_ast_Type(ptr %a528, ptr %a527) + %t529 = load %S.ast.Type, ptr %a528 + %t530 = insertvalue %S.gen.Val %t525, %S.ast.Type %t529, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t530 +endif7356: + %t531 = load %S.ast.Type, ptr %a23 + %t532 = call i1 @finch.gen.isFloat(%S.ast.Type %t531) + br i1 %t532, label %then7357, label %endif7359 +then7357: + %t533 = load ptr, ptr %a1 + %t534 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t535 = load { ptr, i64, i64 }, ptr %t534 + %t536 = load %S.ast.Type, ptr %a23 + %t537 = load %S.ast.Type, ptr %a3 + %t538 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t533, { ptr, i64, i64 } %t535, %S.ast.Type %t536, %S.ast.Type %t537) + %t539 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t538, 0 + %t540 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t540, ptr %a541 + call void @finch.copy.S_ast_Type(ptr %a542, ptr %a541) + %t543 = load %S.ast.Type, ptr %a542 + %t544 = insertvalue %S.gen.Val %t539, %S.ast.Type %t543, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t544 +endif7359: + br label %endif7353 +endif7353: + %t545 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t546 = load { ptr, i64, i64 }, ptr %t545 + store { ptr, i64, i64 } %t546, ptr %a547 + store { ptr, i64, i64 } { ptr @.str.4734, i64 4, i64 0 }, ptr %a548 + %t549 = call i32 @finch_str_eq(ptr %a547, ptr %a548) + %t550 = icmp ne i32 %t549, 0 + br label %logic.from7360 +logic.from7360: + br i1 %t550, label %logic.rhs7361, label %logic.end7362 +logic.rhs7361: + %t551 = load %S.ast.Type, ptr %a23 + %t552 = call i1 @finch.gen.isInt(%S.ast.Type %t551) + br label %logic.rend7363 +logic.rend7363: + br label %logic.end7362 +logic.end7362: + %t553 = phi i1 [ false, %logic.from7360 ], [ %t552, %logic.rend7363 ] + br i1 %t553, label %then7364, label %endif7366 +then7364: + %t554 = load ptr, ptr %a1 + %t555 = load ptr, ptr %a1 + %t556 = load %S.ast.Type, ptr %a23 + %t557 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t555, %S.ast.Type %t556) + store { ptr, i64, i64 } { ptr @.str.4735, i64 8, i64 0 }, ptr %a559 + store { ptr, i64, i64 } %t557, ptr %a560 + call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) + store { ptr, i64, i64 } %t557, ptr %a561 + call void @finch_str_drop(ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a558 + store { ptr, i64, i64 } %t562, ptr %a564 + store { ptr, i64, i64 } { ptr @.str.4736, i64 1, i64 0 }, ptr %a565 + call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) + store { ptr, i64, i64 } %t562, ptr %a566 + call void @finch_str_drop(ptr %a566) + %t567 = load { ptr, i64, i64 }, ptr %a563 + %t568 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t569 = load { ptr, i64, i64 }, ptr %t568 + store { ptr, i64, i64 } %t567, ptr %a571 + store { ptr, i64, i64 } %t569, ptr %a572 + call void @finch_str_concat(ptr %a570, ptr %a571, ptr %a572) + store { ptr, i64, i64 } %t567, ptr %a573 + call void @finch_str_drop(ptr %a573) + %t574 = load { ptr, i64, i64 }, ptr %a570 + store { ptr, i64, i64 } %t574, ptr %a576 + store { ptr, i64, i64 } { ptr @.str.4737, i64 3, i64 0 }, ptr %a577 + call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577) + store { ptr, i64, i64 } %t574, ptr %a578 + call void @finch_str_drop(ptr %a578) + %t579 = load { ptr, i64, i64 }, ptr %a575 + %t580 = call { ptr, i64, i64 } @finch.gen.op(ptr %t554, { ptr, i64, i64 } %t579) + store { ptr, i64, i64 } %t579, ptr %a581 + call void @finch_str_drop(ptr %a581) + %t582 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t580, 0 + %t583 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t583, ptr %a584 + call void @finch.copy.S_ast_Type(ptr %a585, ptr %a584) + %t586 = load %S.ast.Type, ptr %a585 + %t587 = insertvalue %S.gen.Val %t582, %S.ast.Type %t586, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t587 +endif7366: + %t588 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t589 = load { ptr, i64, i64 }, ptr %t588 + store { ptr, i64, i64 } %t589, ptr %a590 + store { ptr, i64, i64 } { ptr @.str.4738, i64 3, i64 0 }, ptr %a591 + %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) + %t593 = icmp ne i32 %t592, 0 + br label %logic.from7367 +logic.from7367: + br i1 %t593, label %logic.rhs7368, label %logic.end7369 +logic.rhs7368: + %t594 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t595 = load { ptr, i64, i64 }, ptr %t594 + store { ptr, i64, i64 } %t595, ptr %a596 + store { ptr, i64, i64 } { ptr @.str.4739, i64 3, i64 0 }, ptr %a597 + %t598 = call i32 @finch_str_eq(ptr %a596, ptr %a597) + %t599 = icmp ne i32 %t598, 0 + br label %logic.from7370 +logic.from7370: + br i1 %t599, label %logic.end7372, label %logic.rhs7371 +logic.rhs7371: + %t600 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t601 = load { ptr, i64, i64 }, ptr %t600 + store { ptr, i64, i64 } %t601, ptr %a602 + store { ptr, i64, i64 } { ptr @.str.4740, i64 4, i64 0 }, ptr %a603 + %t604 = call i32 @finch_str_eq(ptr %a602, ptr %a603) + %t605 = icmp ne i32 %t604, 0 + br label %logic.rend7373 +logic.rend7373: + br label %logic.end7372 +logic.end7372: + %t606 = phi i1 [ true, %logic.from7370 ], [ %t605, %logic.rend7373 ] + br label %logic.rend7374 +logic.rend7374: + br label %logic.end7369 +logic.end7369: + %t607 = phi i1 [ false, %logic.from7367 ], [ %t606, %logic.rend7374 ] + br i1 %t607, label %then7375, label %endif7377 +then7375: + %t608 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t609 = load { ptr, i64, i64 }, ptr %t608 + store { ptr, i64, i64 } %t609, ptr %a610 + call void @finch_str_copy(ptr %a611, ptr %a610) + %t612 = load { ptr, i64, i64 }, ptr %a611 + %t613 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t612, 0 + %t614 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t614, ptr %a615 + call void @finch.copy.S_ast_Type(ptr %a616, ptr %a615) + %t617 = load %S.ast.Type, ptr %a616 + %t618 = insertvalue %S.gen.Val %t613, %S.ast.Type %t617, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t618 +endif7377: + %t619 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t620 = load { ptr, i64, i64 }, ptr %t619 + store { ptr, i64, i64 } %t620, ptr %a621 + store { ptr, i64, i64 } { ptr @.str.4741, i64 3, i64 0 }, ptr %a622 + %t623 = call i32 @finch_str_eq(ptr %a621, ptr %a622) + %t624 = icmp ne i32 %t623, 0 + br label %logic.from7378 +logic.from7378: + br i1 %t624, label %logic.rhs7379, label %logic.end7380 +logic.rhs7379: + %t625 = load %S.ast.Type, ptr %a23 + %t626 = call i1 @finch.gen.isInt(%S.ast.Type %t625) + br label %logic.rend7381 +logic.rend7381: + br label %logic.end7380 +logic.end7380: + %t627 = phi i1 [ false, %logic.from7378 ], [ %t626, %logic.rend7381 ] + br i1 %t627, label %then7382, label %endif7384 +then7382: + %t628 = load ptr, ptr %a1 + %t629 = load ptr, ptr %a1 + %t630 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t631 = load { ptr, i64, i64 }, ptr %t630 + %t632 = load %S.ast.Type, ptr %a23 + %t633 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4743, i64 3, i64 0 }) + %t634 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t629, { ptr, i64, i64 } %t631, %S.ast.Type %t632, %S.ast.Type %t633) + store %S.ast.Type %t633, ptr %a635 + call void @finch.drop.S_ast_Type(ptr %a635) + store { ptr, i64, i64 } { ptr @.str.4742, i64 13, i64 0 }, ptr %a637 + store { ptr, i64, i64 } %t634, ptr %a638 + call void @finch_str_concat(ptr %a636, ptr %a637, ptr %a638) + store { ptr, i64, i64 } %t634, ptr %a639 + call void @finch_str_drop(ptr %a639) + %t640 = load { ptr, i64, i64 }, ptr %a636 + store { ptr, i64, i64 } %t640, ptr %a642 + store { ptr, i64, i64 } { ptr @.str.4744, i64 7, i64 0 }, ptr %a643 + call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643) + store { ptr, i64, i64 } %t640, ptr %a644 + call void @finch_str_drop(ptr %a644) + %t645 = load { ptr, i64, i64 }, ptr %a641 + %t646 = call { ptr, i64, i64 } @finch.gen.op(ptr %t628, { ptr, i64, i64 } %t645) + store { ptr, i64, i64 } %t645, ptr %a647 + call void @finch_str_drop(ptr %a647) + %t648 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t646, 0 + %t649 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t649, ptr %a650 + call void @finch.copy.S_ast_Type(ptr %a651, ptr %a650) + %t652 = load %S.ast.Type, ptr %a651 + %t653 = insertvalue %S.gen.Val %t648, %S.ast.Type %t652, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t653 +endif7384: + %t654 = load %S.ast.Type, ptr %a3 + %t655 = call i1 @finch.gen.isInt(%S.ast.Type %t654) + br label %logic.from7385 +logic.from7385: + br i1 %t655, label %logic.rhs7386, label %logic.end7387 +logic.rhs7386: + %t656 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t657 = load { ptr, i64, i64 }, ptr %t656 + store { ptr, i64, i64 } %t657, ptr %a658 + store { ptr, i64, i64 } { ptr @.str.4745, i64 3, i64 0 }, ptr %a659 + %t660 = call i32 @finch_str_eq(ptr %a658, ptr %a659) + %t661 = icmp ne i32 %t660, 0 + br label %logic.rend7388 +logic.rend7388: + br label %logic.end7387 +logic.end7387: + %t662 = phi i1 [ false, %logic.from7385 ], [ %t661, %logic.rend7388 ] + br i1 %t662, label %then7389, label %endif7391 +then7389: + %t663 = load ptr, ptr %a1 + %t664 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t665 = load { ptr, i64, i64 }, ptr %t664 + store { ptr, i64, i64 } { ptr @.str.4746, i64 13, i64 0 }, ptr %a667 + store { ptr, i64, i64 } %t665, ptr %a668 + call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) + %t669 = load { ptr, i64, i64 }, ptr %a666 + store { ptr, i64, i64 } %t669, ptr %a671 + store { ptr, i64, i64 } { ptr @.str.4747, i64 4, i64 0 }, ptr %a672 + call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672) + store { ptr, i64, i64 } %t669, ptr %a673 + call void @finch_str_drop(ptr %a673) + %t674 = load { ptr, i64, i64 }, ptr %a670 + %t675 = load ptr, ptr %a1 + %t676 = load %S.ast.Type, ptr %a3 + %t677 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t675, %S.ast.Type %t676) + store { ptr, i64, i64 } %t674, ptr %a679 + store { ptr, i64, i64 } %t677, ptr %a680 + call void @finch_str_concat(ptr %a678, ptr %a679, ptr %a680) + store { ptr, i64, i64 } %t674, ptr %a681 + call void @finch_str_drop(ptr %a681) + store { ptr, i64, i64 } %t677, ptr %a682 + call void @finch_str_drop(ptr %a682) + %t683 = load { ptr, i64, i64 }, ptr %a678 + %t684 = call { ptr, i64, i64 } @finch.gen.op(ptr %t663, { ptr, i64, i64 } %t683) + store { ptr, i64, i64 } %t683, ptr %a685 + call void @finch_str_drop(ptr %a685) + %t686 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t684, 0 + %t687 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t687, ptr %a688 + call void @finch.copy.S_ast_Type(ptr %a689, ptr %a688) + %t690 = load %S.ast.Type, ptr %a689 + %t691 = insertvalue %S.gen.Val %t686, %S.ast.Type %t690, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t691 +endif7391: + %t692 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t693 = load { ptr, i64, i64 }, ptr %t692 + store { ptr, i64, i64 } %t693, ptr %a694 + store { ptr, i64, i64 } { ptr @.str.4748, i64 3, i64 0 }, ptr %a695 + %t696 = call i32 @finch_str_eq(ptr %a694, ptr %a695) + %t697 = icmp ne i32 %t696, 0 + br label %logic.from7392 +logic.from7392: + br i1 %t697, label %logic.rhs7393, label %logic.end7394 +logic.rhs7393: + %t698 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t699 = load { ptr, i64, i64 }, ptr %t698 + store { ptr, i64, i64 } %t699, ptr %a700 + store { ptr, i64, i64 } { ptr @.str.4749, i64 3, i64 0 }, ptr %a701 + %t702 = call i32 @finch_str_eq(ptr %a700, ptr %a701) + %t703 = icmp ne i32 %t702, 0 + br label %logic.rend7395 +logic.rend7395: + br label %logic.end7394 +logic.end7394: + %t704 = phi i1 [ false, %logic.from7392 ], [ %t703, %logic.rend7395 ] + br i1 %t704, label %then7396, label %endif7398 +then7396: + %t705 = load ptr, ptr %a1 + %t706 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t707 = load { ptr, i64, i64 }, ptr %t706 + %t708 = extractvalue { ptr, i64, i64 } %t707, 1 + %t709 = icmp uge i64 0, %t708 + br i1 %t709, label %range7399, label %inrange7400 +range7399: + call void @finch_panic_index(ptr @.str.4750, i64 4192, i64 0, i64 %t708) + unreachable +inrange7400: + %t710 = extractvalue { ptr, i64, i64 } %t707, 0 + %t711 = getelementptr inbounds %S.ast.Node, ptr %t710, i64 0 + %t712 = load %S.ast.Node, ptr %t711 + call void @finch.gen.fail(ptr %t705, %S.ast.Node %t712, { ptr, i64, i64 } { ptr @.str.4751, i64 70, i64 0 }) + br label %endif7398 +endif7398: + %t713 = load ptr, ptr %a1 + %t714 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t715 = load { ptr, i64, i64 }, ptr %t714 + %t716 = extractvalue { ptr, i64, i64 } %t715, 1 + %t717 = icmp uge i64 0, %t716 + br i1 %t717, label %range7401, label %inrange7402 +range7401: + call void @finch_panic_index(ptr @.str.4752, i64 4194, i64 0, i64 %t716) + unreachable +inrange7402: + %t718 = extractvalue { ptr, i64, i64 } %t715, 0 + %t719 = getelementptr inbounds %S.ast.Node, ptr %t718, i64 0 + %t720 = load %S.ast.Node, ptr %t719 + %t721 = load %S.ast.Type, ptr %a23 + %t722 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t721) + store { ptr, i64, i64 } { ptr @.str.4753, i64 11, i64 0 }, ptr %a724 + store { ptr, i64, i64 } %t722, ptr %a725 + call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725) + store { ptr, i64, i64 } %t722, ptr %a726 + call void @finch_str_drop(ptr %a726) + %t727 = load { ptr, i64, i64 }, ptr %a723 + store { ptr, i64, i64 } %t727, ptr %a729 + store { ptr, i64, i64 } { ptr @.str.4754, i64 6, i64 0 }, ptr %a730 + call void @finch_str_concat(ptr %a728, ptr %a729, ptr %a730) + store { ptr, i64, i64 } %t727, ptr %a731 + call void @finch_str_drop(ptr %a731) + %t732 = load { ptr, i64, i64 }, ptr %a728 + %t733 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t734 = load { ptr, i64, i64 }, ptr %t733 + store { ptr, i64, i64 } %t732, ptr %a736 + store { ptr, i64, i64 } %t734, ptr %a737 + call void @finch_str_concat(ptr %a735, ptr %a736, ptr %a737) + store { ptr, i64, i64 } %t732, ptr %a738 + call void @finch_str_drop(ptr %a738) + %t739 = load { ptr, i64, i64 }, ptr %a735 + call void @finch.gen.fail(ptr %t713, %S.ast.Node %t720, { ptr, i64, i64 } %t739) + store { ptr, i64, i64 } %t739, ptr %a740 + call void @finch_str_drop(ptr %a740) + %t741 = load %S.gen.Val, ptr %a17 + call void @finch.drop.S_ast_Type(ptr %a23) + ret %S.gen.Val %t741 +} + +define internal i64 @finch.gen.sizeBytes(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4755, i64 6, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then7403, label %endif7405 +then7403: + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic7406, label %ok7407 +panic7406: + call void @finch_panic(ptr @.str.4756, i64 4227, ptr @.str.4757) + unreachable +ok7407: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 16 + %t12 = load ptr, ptr %a1 + %t13 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = call i64 @finch.gen.findStruct(ptr %t12, { ptr, i64, i64 } %t14, { ptr, i64, i64 } %t16) + %t18 = load { ptr, i64, i64 }, ptr %t11 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 %t17, %t19 + br i1 %t20, label %range7408, label %inrange7409 +range7408: + call void @finch_panic_index(ptr @.str.4758, i64 4227, i64 %t17, i64 %t19) + unreachable +inrange7409: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.gen.StructDef, ptr %t21, i64 %t17 + %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i32 0, i32 9 + %t24 = load i64, ptr %t23 + ret i64 %t24 +endif7405: + %t25 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.4759, i64 5, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br i1 %t30, label %then7410, label %endif7412 +then7410: + %t31 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t32 = load i64, ptr %t31 + %t33 = load ptr, ptr %a1 + %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 0, %t36 + br i1 %t37, label %range7413, label %inrange7414 +range7413: + call void @finch_panic_index(ptr @.str.4760, i64 4230, i64 0, i64 %t36) + unreachable +inrange7414: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds %S.ast.Type, ptr %t38, i64 0 + %t40 = load %S.ast.Type, ptr %t39 + %t41 = call i64 @finch.gen.sizeBytes(ptr %t33, %S.ast.Type %t40) + %t42 = mul i64 %t32, %t41 + ret i64 %t42 +endif7412: + %t43 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.4761, i64 3, i64 0 }, ptr %a46 + %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) + %t48 = icmp ne i32 %t47, 0 + br label %logic.from7415 +logic.from7415: + br i1 %t48, label %logic.end7417, label %logic.rhs7416 +logic.rhs7416: + %t49 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.4762, i64 3, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br label %logic.rend7418 +logic.rend7418: + br label %logic.end7417 +logic.end7417: + %t55 = phi i1 [ true, %logic.from7415 ], [ %t54, %logic.rend7418 ] + br i1 %t55, label %then7419, label %endif7421 +then7419: + ret i64 8 +endif7421: + %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.4763, i64 5, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br i1 %t61, label %then7422, label %endif7424 +then7422: + ret i64 8 +endif7424: + %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.4764, i64 3, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) + %t67 = icmp ne i32 %t66, 0 + br i1 %t67, label %then7425, label %endif7427 +then7425: + ret i64 4 +endif7427: + %t68 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t69 = load { ptr, i64, i64 }, ptr %t68 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.4765, i64 4, i64 0 }, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %then7428, label %endif7430 +then7428: + ret i64 1 +endif7430: + %t74 = load %S.ast.Type, ptr %a2 + %t75 = call i64 @finch.gen.bitsOf(%S.ast.Type %t74) + %t76 = sdiv i64 %t75, 8 + ret i64 %t76 +} + +define internal void @finch.drop.arr_S_gen_Leaf(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.leavesOf(ptr %p0, %S.ast.Type %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca %S.gen.StructDef, align 16 + %a27 = alloca %S.gen.StructDef, align 16 + %a29 = alloca %S.gen.StructDef, align 16 + %a33 = alloca i64, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca i64, align 16 + %a65 = alloca %S.gen.Leaf, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca i64, align 16 + %a94 = alloca i64, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca i64, align 16 + %a120 = alloca %S.gen.Leaf, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store i64 %p2, ptr %a3 + store { ptr, i64, i64 } zeroinitializer, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.4766, i64 6, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp ne i32 %t9, 0 + br i1 %t10, label %then7431, label %else7432 +then7431: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic7434, label %ok7435 +panic7434: + call void @finch_panic(ptr @.str.4767, i64 4251, ptr @.str.4768) + unreachable +ok7435: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 16 + %t14 = load ptr, ptr %a1 + %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = call i64 @finch.gen.findStruct(ptr %t14, { ptr, i64, i64 } %t16, { ptr, i64, i64 } %t18) + %t20 = load { ptr, i64, i64 }, ptr %t13 + %t21 = extractvalue { ptr, i64, i64 } %t20, 1 + %t22 = icmp uge i64 %t19, %t21 + br i1 %t22, label %range7436, label %inrange7437 +range7436: + call void @finch_panic_index(ptr @.str.4769, i64 4251, i64 %t19, i64 %t21) + unreachable +inrange7437: + %t23 = extractvalue { ptr, i64, i64 } %t20, 0 + %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i64 %t19 + %t25 = load %S.gen.StructDef, ptr %t24 + store %S.gen.StructDef %t25, ptr %a26 + call void @finch.copy.S_gen_StructDef(ptr %a27, ptr %a26) + %t28 = load %S.gen.StructDef, ptr %a27 + store %S.gen.StructDef %t28, ptr %a29 + %t30 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 + %t32 = load i64, ptr %t31 + store i64 0, ptr %a33 + br label %for.cond7438 +for.cond7438: + %t34 = load i64, ptr %a33 + %t35 = icmp slt i64 %t34, %t32 + br i1 %t35, label %for.body7439, label %for.end7441 +for.body7439: + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 + %t38 = load i64, ptr %a33 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range7442, label %inrange7443 +range7442: + call void @finch_panic_index(ptr @.str.4770, i64 4253, i64 %t38, i64 %t40) + unreachable +inrange7443: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.ast.Type, ptr %t42, i64 %t38 + %t44 = load %S.ast.Type, ptr %t43 + %t45 = load i64, ptr %a3 + %t46 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 4 + %t47 = load i64, ptr %a33 + %t48 = load { ptr, i64, i64 }, ptr %t46 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range7444, label %inrange7445 +range7444: + call void @finch_panic_index(ptr @.str.4771, i64 4253, i64 %t47, i64 %t49) + unreachable +inrange7445: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds i64, ptr %t51, i64 %t47 + %t53 = load i64, ptr %t52 + %t54 = add i64 %t45, %t53 + %t55 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t36, %S.ast.Type %t44, i64 %t54) + store { ptr, i64, i64 } %t55, ptr %a56 + store i64 0, ptr %a57 + br label %each.cond7446 +each.cond7446: + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a56, i32 0, i32 1 + %t59 = load i64, ptr %t58 + %t60 = load i64, ptr %a57 + %t61 = icmp slt i64 %t60, %t59 + br i1 %t61, label %each.body7447, label %each.end7449 +each.body7447: + %t62 = load ptr, ptr %a56 + %t63 = getelementptr inbounds %S.gen.Leaf, ptr %t62, i64 %t60 + %t64 = load %S.gen.Leaf, ptr %t63 + store %S.gen.Leaf %t64, ptr %a65 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t67 = load %S.gen.Leaf, ptr %a65 + %t68 = load i64, ptr %t66 + %t69 = add i64 %t68, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t69, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) + %t70 = load ptr, ptr %a4 + %t71 = getelementptr inbounds %S.gen.Leaf, ptr %t70, i64 %t68 + store %S.gen.Leaf %t67, ptr %t71 + store i64 %t69, ptr %t66 + br label %each.step7448 +each.step7448: + %t72 = load i64, ptr %a57 + %t73 = add i64 %t72, 1 + store i64 %t73, ptr %a57 + br label %each.cond7446 +each.end7449: + call void @finch.drop.arr_S_gen_Leaf(ptr %a56) + br label %for.step7440 +for.step7440: + %t74 = load i64, ptr %a33 + %t75 = add i64 %t74, 1 + store i64 %t75, ptr %a33 + br label %for.cond7438 +for.end7441: + call void @finch.drop.S_gen_StructDef(ptr %a29) + br label %endif7433 +else7432: + %t76 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t77 = load { ptr, i64, i64 }, ptr %t76 + store { ptr, i64, i64 } %t77, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.4772, i64 5, i64 0 }, ptr %a79 + %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) + %t81 = icmp ne i32 %t80, 0 + br i1 %t81, label %then7450, label %else7451 +then7450: + %t82 = load ptr, ptr %a1 + %t83 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t84 = load { ptr, i64, i64 }, ptr %t83 + %t85 = extractvalue { ptr, i64, i64 } %t84, 1 + %t86 = icmp uge i64 0, %t85 + br i1 %t86, label %range7453, label %inrange7454 +range7453: + call void @finch_panic_index(ptr @.str.4773, i64 4258, i64 0, i64 %t85) + unreachable +inrange7454: + %t87 = extractvalue { ptr, i64, i64 } %t84, 0 + %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i64 0 + %t89 = load %S.ast.Type, ptr %t88 + %t90 = call i64 @finch.gen.sizeBytes(ptr %t82, %S.ast.Type %t89) + store i64 %t90, ptr %a91 + %t92 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t93 = load i64, ptr %t92 + store i64 0, ptr %a94 + br label %for.cond7455 +for.cond7455: + %t95 = load i64, ptr %a94 + %t96 = icmp slt i64 %t95, %t93 + br i1 %t96, label %for.body7456, label %for.end7458 +for.body7456: + %t97 = load ptr, ptr %a1 + %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t99 = load { ptr, i64, i64 }, ptr %t98 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 0, %t100 + br i1 %t101, label %range7459, label %inrange7460 +range7459: + call void @finch_panic_index(ptr @.str.4774, i64 4260, i64 0, i64 %t100) + unreachable +inrange7460: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 + %t104 = load %S.ast.Type, ptr %t103 + %t105 = load i64, ptr %a3 + %t106 = load i64, ptr %a94 + %t107 = load i64, ptr %a91 + %t108 = mul i64 %t106, %t107 + %t109 = add i64 %t105, %t108 + %t110 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t97, %S.ast.Type %t104, i64 %t109) + store { ptr, i64, i64 } %t110, ptr %a111 + store i64 0, ptr %a112 + br label %each.cond7461 +each.cond7461: + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = load i64, ptr %a112 + %t116 = icmp slt i64 %t115, %t114 + br i1 %t116, label %each.body7462, label %each.end7464 +each.body7462: + %t117 = load ptr, ptr %a111 + %t118 = getelementptr inbounds %S.gen.Leaf, ptr %t117, i64 %t115 + %t119 = load %S.gen.Leaf, ptr %t118 + store %S.gen.Leaf %t119, ptr %a120 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t122 = load %S.gen.Leaf, ptr %a120 + %t123 = load i64, ptr %t121 + %t124 = add i64 %t123, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t124, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) + %t125 = load ptr, ptr %a4 + %t126 = getelementptr inbounds %S.gen.Leaf, ptr %t125, i64 %t123 + store %S.gen.Leaf %t122, ptr %t126 + store i64 %t124, ptr %t121 + br label %each.step7463 +each.step7463: + %t127 = load i64, ptr %a112 + %t128 = add i64 %t127, 1 + store i64 %t128, ptr %a112 + br label %each.cond7461 +each.end7464: + call void @finch.drop.arr_S_gen_Leaf(ptr %a111) + br label %for.step7457 +for.step7457: + %t129 = load i64, ptr %a94 + %t130 = add i64 %t129, 1 + store i64 %t130, ptr %a94 + br label %for.cond7455 +for.end7458: + br label %endif7452 +else7451: + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t132 = load i64, ptr %a3 + %t133 = insertvalue %S.gen.Leaf zeroinitializer, i64 %t132, 0 + %t134 = load ptr, ptr %a1 + %t135 = load %S.ast.Type, ptr %a2 + %t136 = call i64 @finch.gen.sizeBytes(ptr %t134, %S.ast.Type %t135) + %t137 = insertvalue %S.gen.Leaf %t133, i64 %t136, 1 + %t138 = load %S.ast.Type, ptr %a2 + %t139 = call i1 @finch.gen.isFloat(%S.ast.Type %t138) + %t140 = insertvalue %S.gen.Leaf %t137, i1 %t139, 2 + %t141 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t142 = load { ptr, i64, i64 }, ptr %t141 + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.4775, i64 5, i64 0 }, ptr %a144 + %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) + %t146 = icmp ne i32 %t145, 0 + %t147 = insertvalue %S.gen.Leaf %t140, i1 %t146, 3 + %t148 = load i64, ptr %t131 + %t149 = add i64 %t148, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t149, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) + %t150 = load ptr, ptr %a4 + %t151 = getelementptr inbounds %S.gen.Leaf, ptr %t150, i64 %t148 + store %S.gen.Leaf %t147, ptr %t151 + store i64 %t149, ptr %t131 + br label %endif7452 +endif7452: + br label %endif7433 +endif7433: + %t152 = load { ptr, i64, i64 }, ptr %a4 + ret { ptr, i64, i64 } %t152 +} + +define internal void @finch.copy.S_gen_Abi(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Abi, ptr %src + store %S.gen.Abi %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_str(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal %S.gen.Abi @finch.gen.classifyArm64(ptr %p0, %S.ast.Type %p1, %S.gen.Abi %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.gen.Abi, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca %S.gen.Abi, align 16 + %a8 = alloca %S.gen.Abi, align 16 + %a10 = alloca %S.gen.Abi, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i1, align 16 + %a23 = alloca i64, align 16 + %a31 = alloca %S.gen.Leaf, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca i64, align 16 + %a102 = alloca %S.gen.Leaf, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.gen.Abi %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = load %S.gen.Abi, ptr %a3 + store %S.gen.Abi %t6, ptr %a7 + call void @finch.copy.S_gen_Abi(ptr %a8, ptr %a7) + %t9 = load %S.gen.Abi, ptr %a8 + store %S.gen.Abi %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load %S.ast.Type, ptr %a2 + %t13 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t11, %S.ast.Type %t12, i64 0) + store { ptr, i64, i64 } %t13, ptr %a14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp sgt i64 %t16, 0 + br label %logic.from7465 +logic.from7465: + br i1 %t17, label %logic.rhs7466, label %logic.end7467 +logic.rhs7466: + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp sle i64 %t19, 4 + br label %logic.rend7468 +logic.rend7468: + br label %logic.end7467 +logic.end7467: + %t21 = phi i1 [ false, %logic.from7465 ], [ %t20, %logic.rend7468 ] + store i1 %t21, ptr %a22 + store i64 0, ptr %a23 + br label %each.cond7469 +each.cond7469: + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = load i64, ptr %a23 + %t27 = icmp slt i64 %t26, %t25 + br i1 %t27, label %each.body7470, label %each.end7472 +each.body7470: + %t28 = load ptr, ptr %a14 + %t29 = getelementptr inbounds %S.gen.Leaf, ptr %t28, i64 %t26 + %t30 = load %S.gen.Leaf, ptr %t29 + store %S.gen.Leaf %t30, ptr %a31 + %t32 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 2 + %t33 = load i1, ptr %t32 + %t34 = xor i1 %t33, true + br label %logic.from7473 +logic.from7473: + br i1 %t34, label %logic.end7475, label %logic.rhs7474 +logic.rhs7474: + %t35 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 3 + %t36 = load i1, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %a14 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 0, %t38 + br i1 %t39, label %range7476, label %inrange7477 +range7476: + call void @finch_panic_index(ptr @.str.4776, i64 4277, i64 0, i64 %t38) + unreachable +inrange7477: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.gen.Leaf, ptr %t40, i64 0 + %t42 = getelementptr inbounds %S.gen.Leaf, ptr %t41, i32 0, i32 3 + %t43 = load i1, ptr %t42 + %t44 = icmp ne i1 %t36, %t43 + br label %logic.rend7478 +logic.rend7478: + br label %logic.end7475 +logic.end7475: + %t45 = phi i1 [ true, %logic.from7473 ], [ %t44, %logic.rend7478 ] + br i1 %t45, label %then7479, label %endif7481 +then7479: + store i1 false, ptr %a22 + br label %endif7481 +endif7481: + br label %each.step7471 +each.step7471: + %t46 = load i64, ptr %a23 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a23 + br label %each.cond7469 +each.end7472: + %t48 = load i1, ptr %a22 + br i1 %t48, label %then7482, label %endif7484 +then7482: + store { ptr, i64, i64 } { ptr @.str.4777, i64 5, i64 0 }, ptr %a49 + %t50 = load { ptr, i64, i64 }, ptr %a14 + %t51 = extractvalue { ptr, i64, i64 } %t50, 1 + %t52 = icmp uge i64 0, %t51 + br i1 %t52, label %range7485, label %inrange7486 +range7485: + call void @finch_panic_index(ptr @.str.4778, i64 4283, i64 0, i64 %t51) + unreachable +inrange7486: + %t53 = extractvalue { ptr, i64, i64 } %t50, 0 + %t54 = getelementptr inbounds %S.gen.Leaf, ptr %t53, i64 0 + %t55 = getelementptr inbounds %S.gen.Leaf, ptr %t54, i32 0, i32 3 + %t56 = load i1, ptr %t55 + br i1 %t56, label %then7487, label %endif7489 +then7487: + %t57 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.4779, i64 6, i64 0 }, ptr %a49 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch_str_drop(ptr %a58) + br label %endif7489 +endif7489: + %t59 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } { ptr @.str.4780, i64 6, i64 0 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i32 0, i32 1 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t65 = load i64, ptr %t64 + call void @finch_str_from_int(ptr %a66, i64 %t65) + %t67 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.4781, i64 1, i64 0 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.4782, i64 3, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t77, ptr %a80 + store { ptr, i64, i64 } %t78, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.4783, i64 1, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + %t89 = load i64, ptr %t63 + %t90 = add i64 %t89, 1 + call void @finch_arr_reserve(ptr %t62, i64 %t90, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t91 = load ptr, ptr %t62 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t89 + store { ptr, i64, i64 } %t88, ptr %t92 + store i64 %t90, ptr %t63 + store { ptr, i64, i64 } zeroinitializer, ptr %a93 + store i64 0, ptr %a94 + br label %each.cond7490 +each.cond7490: + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t96 = load i64, ptr %t95 + %t97 = load i64, ptr %a94 + %t98 = icmp slt i64 %t97, %t96 + br i1 %t98, label %each.body7491, label %each.end7493 +each.body7491: + %t99 = load ptr, ptr %a14 + %t100 = getelementptr inbounds %S.gen.Leaf, ptr %t99, i64 %t97 + %t101 = load %S.gen.Leaf, ptr %t100 + store %S.gen.Leaf %t101, ptr %a102 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 + %t104 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_copy(ptr %a106, ptr %a105) + %t107 = load { ptr, i64, i64 }, ptr %a106 + %t108 = load i64, ptr %t103 + %t109 = add i64 %t108, 1 + call void @finch_arr_reserve(ptr %a93, i64 %t109, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t110 = load ptr, ptr %a93 + %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i64 %t108 + store { ptr, i64, i64 } %t107, ptr %t111 + store i64 %t109, ptr %t103 + br label %each.step7492 +each.step7492: + %t112 = load i64, ptr %a94 + %t113 = add i64 %t112, 1 + store i64 %t113, ptr %a94 + br label %each.cond7490 +each.end7493: + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4785, i64 2, i64 0 }, ptr %a115 + call void @finch_str_join(ptr %a116, ptr %a93, ptr %a115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.4784, i64 2, i64 0 }, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t122, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.4786, i64 2, i64 0 }, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + store { ptr, i64, i64 } %t122, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a123 + %t128 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t129 = load { ptr, i64, i64 }, ptr %t128 + store { ptr, i64, i64 } %t127, ptr %t128 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load %S.gen.Abi, ptr %a10 + call void @finch.drop.arr_str(ptr %a93) + call void @finch_str_drop(ptr %a49) + call void @finch.drop.arr_S_gen_Leaf(ptr %a14) + ret %S.gen.Abi %t131 +endif7484: + %t132 = load i64, ptr %a4 + %t133 = icmp sgt i64 %t132, 16 + br i1 %t133, label %then7494, label %endif7496 +then7494: + %t134 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 + %t135 = load { ptr, i64, i64 }, ptr %t134 + store { ptr, i64, i64 } { ptr @.str.4787, i64 8, i64 0 }, ptr %t134 + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load %S.gen.Abi, ptr %a10 + call void @finch.drop.arr_S_gen_Leaf(ptr %a14) + ret %S.gen.Abi %t137 +endif7496: + %t138 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 + %t139 = load { ptr, i64, i64 }, ptr %t138 + store { ptr, i64, i64 } { ptr @.str.4788, i64 6, i64 0 }, ptr %t138 + store { ptr, i64, i64 } %t139, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load i64, ptr %a5 + %t142 = icmp sge i64 %t141, 16 + br i1 %t142, label %then7497, label %else7498 +then7497: + %t143 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 + %t145 = load i64, ptr %t144 + %t146 = add i64 %t145, 1 + call void @finch_arr_reserve(ptr %t143, i64 %t146, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t147 = load ptr, ptr %t143 + %t148 = getelementptr inbounds { ptr, i64, i64 }, ptr %t147, i64 %t145 + store { ptr, i64, i64 } { ptr @.str.4789, i64 4, i64 0 }, ptr %t148 + store i64 %t146, ptr %t144 + %t149 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } { ptr @.str.4790, i64 4, i64 0 }, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + call void @finch_str_drop(ptr %a151) + br label %endif7499 +else7498: + %t152 = load i64, ptr %a4 + %t153 = icmp sle i64 %t152, 8 + br i1 %t153, label %then7500, label %else7501 +then7500: + %t154 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 + %t156 = load i64, ptr %t155 + %t157 = add i64 %t156, 1 + call void @finch_arr_reserve(ptr %t154, i64 %t157, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t158 = load ptr, ptr %t154 + %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i64 %t156 + store { ptr, i64, i64 } { ptr @.str.4791, i64 3, i64 0 }, ptr %t159 + store i64 %t157, ptr %t155 + %t160 = load i64, ptr %a4 + %t161 = mul i64 %t160, 8 + call void @finch_str_from_int(ptr %a162, i64 %t161) + %t163 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.4792, i64 1, i64 0 }, ptr %a165 + store { ptr, i64, i64 } %t163, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t170 = load { ptr, i64, i64 }, ptr %t169 + store { ptr, i64, i64 } %t168, ptr %t169 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_drop(ptr %a171) + br label %endif7502 +else7501: + %t172 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i32 0, i32 1 + %t174 = load i64, ptr %t173 + %t175 = add i64 %t174, 1 + call void @finch_arr_reserve(ptr %t172, i64 %t175, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t176 = load ptr, ptr %t172 + %t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 %t174 + store { ptr, i64, i64 } { ptr @.str.4793, i64 9, i64 0 }, ptr %t177 + store i64 %t175, ptr %t173 + %t178 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t179 = load { ptr, i64, i64 }, ptr %t178 + store { ptr, i64, i64 } { ptr @.str.4794, i64 9, i64 0 }, ptr %t178 + store { ptr, i64, i64 } %t179, ptr %a180 + call void @finch_str_drop(ptr %a180) + br label %endif7502 +endif7502: + br label %endif7499 +endif7499: + %t181 = load %S.gen.Abi, ptr %a10 + call void @finch.drop.arr_S_gen_Leaf(ptr %a14) + ret %S.gen.Abi %t181 +} + +define internal void @finch.drop.S_gen_Abi(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal %S.gen.Abi @finch.gen.classify(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.gen.Abi, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca %S.gen.StructDef, align 16 + %a28 = alloca %S.gen.StructDef, align 16 + %a30 = alloca %S.gen.StructDef, align 16 + %a33 = alloca i64, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca i64, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca i64, align 16 + %a145 = alloca %S.gen.Leaf, align 16 + %a148 = alloca i64, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca i64, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca i64, align 16 + %a210 = alloca i64, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = insertvalue %S.gen.Abi zeroinitializer, { ptr, i64, i64 } { ptr @.str.4795, i64 6, i64 0 }, 0 + store %S.gen.Abi %t3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.4796, i64 6, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp eq i32 %t9, 0 + br i1 %t10, label %then7503, label %endif7505 +then7503: + %t11 = load %S.gen.Abi, ptr %a4 + ret %S.gen.Abi %t11 +endif7505: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic7506, label %ok7507 +panic7506: + call void @finch_panic(ptr @.str.4797, i64 4318, ptr @.str.4798) + unreachable +ok7507: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call i64 @finch.gen.findStruct(ptr %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t19) + %t21 = load { ptr, i64, i64 }, ptr %t14 + %t22 = extractvalue { ptr, i64, i64 } %t21, 1 + %t23 = icmp uge i64 %t20, %t22 + br i1 %t23, label %range7508, label %inrange7509 +range7508: + call void @finch_panic_index(ptr @.str.4799, i64 4318, i64 %t20, i64 %t22) + unreachable +inrange7509: + %t24 = extractvalue { ptr, i64, i64 } %t21, 0 + %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 + %t26 = load %S.gen.StructDef, ptr %t25 + store %S.gen.StructDef %t26, ptr %a27 + call void @finch.copy.S_gen_StructDef(ptr %a28, ptr %a27) + %t29 = load %S.gen.StructDef, ptr %a28 + store %S.gen.StructDef %t29, ptr %a30 + %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 9 + %t32 = load i64, ptr %t31 + store i64 %t32, ptr %a33 + %t34 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 + store i64 8, ptr %t34 + %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 + %t36 = load i64, ptr %t35 + %t37 = icmp sgt i64 %t36, 8 + br i1 %t37, label %then7510, label %endif7512 +then7510: + %t38 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 + %t39 = load i64, ptr %t38 + %t40 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 + store i64 %t39, ptr %t40 + br label %endif7512 +endif7512: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic7513, label %ok7514 +panic7513: + call void @finch_panic(ptr @.str.4800, i64 4324, ptr @.str.4801) + unreachable +ok7514: + %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 31 + %t44 = getelementptr inbounds %S.platform.Target, ptr %t43, i32 0, i32 4 + %t45 = load i1, ptr %t44 + br i1 %t45, label %then7515, label %endif7517 +then7515: + %t46 = load ptr, ptr %a1 + %t47 = load %S.ast.Type, ptr %a2 + %t48 = load %S.gen.Abi, ptr %a4 + %t49 = load i64, ptr %a33 + %t50 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 + %t51 = load i64, ptr %t50 + %t52 = call %S.gen.Abi @finch.gen.classifyArm64(ptr %t46, %S.ast.Type %t47, %S.gen.Abi %t48, i64 %t49, i64 %t51) + call void @finch.drop.S_gen_StructDef(ptr %a30) + call void @finch.drop.S_gen_Abi(ptr %a4) + ret %S.gen.Abi %t52 +endif7517: + %t53 = load ptr, ptr %a1 + %t54 = icmp eq ptr %t53, null + br i1 %t54, label %panic7518, label %ok7519 +panic7518: + call void @finch_panic(ptr @.str.4802, i64 4327, ptr @.str.4803) + unreachable +ok7519: + %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 31 + %t56 = getelementptr inbounds %S.platform.Target, ptr %t55, i32 0, i32 1 + %t57 = load i1, ptr %t56 + br i1 %t57, label %then7520, label %endif7522 +then7520: + %t58 = load i64, ptr %a33 + %t59 = icmp eq i64 %t58, 1 + br label %logic.from7523 +logic.from7523: + br i1 %t59, label %logic.end7525, label %logic.rhs7524 +logic.rhs7524: + %t60 = load i64, ptr %a33 + %t61 = icmp eq i64 %t60, 2 + br label %logic.rend7526 +logic.rend7526: + br label %logic.end7525 +logic.end7525: + %t62 = phi i1 [ true, %logic.from7523 ], [ %t61, %logic.rend7526 ] + br label %logic.from7527 +logic.from7527: + br i1 %t62, label %logic.end7529, label %logic.rhs7528 +logic.rhs7528: + %t63 = load i64, ptr %a33 + %t64 = icmp eq i64 %t63, 4 + br label %logic.rend7530 +logic.rend7530: + br label %logic.end7529 +logic.end7529: + %t65 = phi i1 [ true, %logic.from7527 ], [ %t64, %logic.rend7530 ] + br label %logic.from7531 +logic.from7531: + br i1 %t65, label %logic.end7533, label %logic.rhs7532 +logic.rhs7532: + %t66 = load i64, ptr %a33 + %t67 = icmp eq i64 %t66, 8 + br label %logic.rend7534 +logic.rend7534: + br label %logic.end7533 +logic.end7533: + %t68 = phi i1 [ true, %logic.from7531 ], [ %t67, %logic.rend7534 ] + br i1 %t68, label %then7535, label %else7536 +then7535: + %t69 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t70 = load { ptr, i64, i64 }, ptr %t69 + store { ptr, i64, i64 } { ptr @.str.4804, i64 6, i64 0 }, ptr %t69 + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 + %t74 = load i64, ptr %a33 + %t75 = mul i64 %t74, 8 + call void @finch_str_from_int(ptr %a76, i64 %t75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.4805, i64 1, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load i64, ptr %t73 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %t72, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %t72 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 + store { ptr, i64, i64 } %t82, ptr %t86 + store i64 %t84, ptr %t73 + %t87 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t88 = load { ptr, i64, i64 }, ptr %t87 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 0, %t89 + br i1 %t90, label %range7538, label %inrange7539 +range7538: + call void @finch_panic_index(ptr @.str.4806, i64 4333, i64 0, i64 %t89) + unreachable +inrange7539: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 0 + %t93 = load { ptr, i64, i64 }, ptr %t92 + %t94 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t93, ptr %a95 + call void @finch_str_copy(ptr %a96, ptr %a95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + %t98 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t97, ptr %t94 + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_drop(ptr %a99) + br label %endif7537 +else7536: + %t100 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t101 = load { ptr, i64, i64 }, ptr %t100 + store { ptr, i64, i64 } { ptr @.str.4807, i64 8, i64 0 }, ptr %t100 + store { ptr, i64, i64 } %t101, ptr %a102 + call void @finch_str_drop(ptr %a102) + br label %endif7537 +endif7537: + %t103 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t103 +endif7522: + %t104 = load i64, ptr %a33 + %t105 = icmp sgt i64 %t104, 16 + br label %logic.from7540 +logic.from7540: + br i1 %t105, label %logic.end7542, label %logic.rhs7541 +logic.rhs7541: + %t106 = load i64, ptr %a33 + %t107 = icmp eq i64 %t106, 0 + br label %logic.rend7543 +logic.rend7543: + br label %logic.end7542 +logic.end7542: + %t108 = phi i1 [ true, %logic.from7540 ], [ %t107, %logic.rend7543 ] + br i1 %t108, label %then7544, label %endif7546 +then7544: + %t109 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } { ptr @.str.4808, i64 6, i64 0 }, ptr %t109 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t112 +endif7546: + %t113 = load ptr, ptr %a1 + %t114 = load %S.ast.Type, ptr %a2 + %t115 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t113, %S.ast.Type %t114, i64 0) + store { ptr, i64, i64 } %t115, ptr %a116 + %t117 = load i64, ptr %a33 + %t118 = add i64 %t117, 7 + %t119 = sdiv i64 %t118, 8 + store i64 %t119, ptr %a120 + %t121 = mul i64 2, ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64) + %t122 = call ptr @finch_alloc(i64 %t121) + %t123 = getelementptr inbounds i64, ptr %t122, i64 0 + store i64 0, ptr %t123 + %t124 = getelementptr inbounds i64, ptr %t122, i64 1 + store i64 0, ptr %t124 + %t125 = insertvalue { ptr, i64, i64 } undef, ptr %t122, 0 + %t126 = insertvalue { ptr, i64, i64 } %t125, i64 2, 1 + %t127 = insertvalue { ptr, i64, i64 } %t126, i64 2, 2 + store { ptr, i64, i64 } %t127, ptr %a128 + %t129 = mul i64 2, ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64) + %t130 = call ptr @finch_alloc(i64 %t129) + %t131 = getelementptr inbounds i1, ptr %t130, i64 0 + store i1 false, ptr %t131 + %t132 = getelementptr inbounds i1, ptr %t130, i64 1 + store i1 false, ptr %t132 + %t133 = insertvalue { ptr, i64, i64 } undef, ptr %t130, 0 + %t134 = insertvalue { ptr, i64, i64 } %t133, i64 2, 1 + %t135 = insertvalue { ptr, i64, i64 } %t134, i64 2, 2 + store { ptr, i64, i64 } %t135, ptr %a136 + store i64 0, ptr %a137 + br label %each.cond7547 +each.cond7547: + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %a116, i32 0, i32 1 + %t139 = load i64, ptr %t138 + %t140 = load i64, ptr %a137 + %t141 = icmp slt i64 %t140, %t139 + br i1 %t141, label %each.body7548, label %each.end7550 +each.body7548: + %t142 = load ptr, ptr %a116 + %t143 = getelementptr inbounds %S.gen.Leaf, ptr %t142, i64 %t140 + %t144 = load %S.gen.Leaf, ptr %t143 + store %S.gen.Leaf %t144, ptr %a145 + %t146 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 1 + %t147 = load i64, ptr %t146 + store i64 %t147, ptr %a148 + %t149 = load i64, ptr %a148 + %t150 = icmp sgt i64 %t149, 8 + br i1 %t150, label %then7551, label %endif7553 +then7551: + store i64 8, ptr %a148 + br label %endif7553 +endif7553: + %t151 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 + %t152 = load i64, ptr %t151 + %t153 = load i64, ptr %a148 + %t154 = icmp eq i64 %t153, 0 + br i1 %t154, label %panic7554, label %ok7555 +panic7554: + call void @finch_panic(ptr @.str.4809, i64 4352, ptr @.str.4810) + unreachable +ok7555: + %t155 = srem i64 %t152, %t153 + %t156 = icmp ne i64 %t155, 0 + br i1 %t156, label %then7556, label %endif7558 +then7556: + %t157 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t158 = load { ptr, i64, i64 }, ptr %t157 + store { ptr, i64, i64 } { ptr @.str.4811, i64 6, i64 0 }, ptr %t157 + store { ptr, i64, i64 } %t158, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.arr_bool(ptr %a136) + call void @finch.drop.arr_int(ptr %a128) + call void @finch.drop.arr_S_gen_Leaf(ptr %a116) + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t160 +endif7558: + %t161 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 + %t162 = load i64, ptr %t161 + %t163 = sdiv i64 %t162, 8 + store i64 %t163, ptr %a164 + %t165 = load i64, ptr %a164 + %t166 = load { ptr, i64, i64 }, ptr %a128 + %t167 = extractvalue { ptr, i64, i64 } %t166, 1 + %t168 = icmp uge i64 %t165, %t167 + br i1 %t168, label %range7559, label %inrange7560 +range7559: + call void @finch_panic_index(ptr @.str.4812, i64 4357, i64 %t165, i64 %t167) + unreachable +inrange7560: + %t169 = extractvalue { ptr, i64, i64 } %t166, 0 + %t170 = getelementptr inbounds i64, ptr %t169, i64 %t165 + %t171 = load i64, ptr %t170 + %t172 = icmp eq i64 %t171, 1 + br label %logic.from7561 +logic.from7561: + br i1 %t172, label %logic.end7563, label %logic.rhs7562 +logic.rhs7562: + %t173 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 2 + %t174 = load i1, ptr %t173 + %t175 = xor i1 %t174, true + br label %logic.rend7564 +logic.rend7564: + br label %logic.end7563 +logic.end7563: + %t176 = phi i1 [ true, %logic.from7561 ], [ %t175, %logic.rend7564 ] + br i1 %t176, label %then7565, label %else7566 +then7565: + %t177 = load i64, ptr %a164 + %t178 = load { ptr, i64, i64 }, ptr %a128 + %t179 = extractvalue { ptr, i64, i64 } %t178, 1 + %t180 = icmp uge i64 %t177, %t179 + br i1 %t180, label %range7568, label %inrange7569 +range7568: + call void @finch_panic_index(ptr @.str.4813, i64 4358, i64 %t177, i64 %t179) + unreachable +inrange7569: + %t181 = extractvalue { ptr, i64, i64 } %t178, 0 + %t182 = getelementptr inbounds i64, ptr %t181, i64 %t177 + store i64 1, ptr %t182 + br label %endif7567 +else7566: + %t183 = load i64, ptr %a164 + %t184 = load { ptr, i64, i64 }, ptr %a128 + %t185 = extractvalue { ptr, i64, i64 } %t184, 1 + %t186 = icmp uge i64 %t183, %t185 + br i1 %t186, label %range7570, label %inrange7571 +range7570: + call void @finch_panic_index(ptr @.str.4814, i64 4360, i64 %t183, i64 %t185) + unreachable +inrange7571: + %t187 = extractvalue { ptr, i64, i64 } %t184, 0 + %t188 = getelementptr inbounds i64, ptr %t187, i64 %t183 + store i64 2, ptr %t188 + br label %endif7567 +endif7567: + %t189 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 3 + %t190 = load i1, ptr %t189 + br i1 %t190, label %then7572, label %endif7574 +then7572: + %t191 = load i64, ptr %a164 + %t192 = load { ptr, i64, i64 }, ptr %a136 + %t193 = extractvalue { ptr, i64, i64 } %t192, 1 + %t194 = icmp uge i64 %t191, %t193 + br i1 %t194, label %range7575, label %inrange7576 +range7575: + call void @finch_panic_index(ptr @.str.4815, i64 4363, i64 %t191, i64 %t193) + unreachable +inrange7576: + %t195 = extractvalue { ptr, i64, i64 } %t192, 0 + %t196 = getelementptr inbounds i1, ptr %t195, i64 %t191 + store i1 true, ptr %t196 + br label %endif7574 +endif7574: + br label %each.step7549 +each.step7549: + %t197 = load i64, ptr %a137 + %t198 = add i64 %t197, 1 + store i64 %t198, ptr %a137 + br label %each.cond7547 +each.end7550: + %t199 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t200 = load { ptr, i64, i64 }, ptr %t199 + store { ptr, i64, i64 } { ptr @.str.4816, i64 6, i64 0 }, ptr %t199 + store { ptr, i64, i64 } %t200, ptr %a201 + call void @finch_str_drop(ptr %a201) + %t202 = load i64, ptr %a120 + store i64 0, ptr %a203 + br label %for.cond7577 +for.cond7577: + %t204 = load i64, ptr %a203 + %t205 = icmp slt i64 %t204, %t202 + br i1 %t205, label %for.body7578, label %for.end7580 +for.body7578: + %t206 = load i64, ptr %a33 + %t207 = load i64, ptr %a203 + %t208 = mul i64 8, %t207 + %t209 = sub i64 %t206, %t208 + store i64 %t209, ptr %a210 + %t211 = load i64, ptr %a210 + %t212 = icmp sgt i64 %t211, 8 + br i1 %t212, label %then7581, label %endif7583 +then7581: + store i64 8, ptr %a210 + br label %endif7583 +endif7583: + %t213 = load i64, ptr %a203 + %t214 = load { ptr, i64, i64 }, ptr %a128 + %t215 = extractvalue { ptr, i64, i64 } %t214, 1 + %t216 = icmp uge i64 %t213, %t215 + br i1 %t216, label %range7584, label %inrange7585 +range7584: + call void @finch_panic_index(ptr @.str.4817, i64 4372, i64 %t213, i64 %t215) + unreachable +inrange7585: + %t217 = extractvalue { ptr, i64, i64 } %t214, 0 + %t218 = getelementptr inbounds i64, ptr %t217, i64 %t213 + %t219 = load i64, ptr %t218 + %t220 = icmp eq i64 %t219, 2 + br i1 %t220, label %then7586, label %else7587 +then7586: + %t221 = load i64, ptr %a203 + %t222 = load { ptr, i64, i64 }, ptr %a136 + %t223 = extractvalue { ptr, i64, i64 } %t222, 1 + %t224 = icmp uge i64 %t221, %t223 + br i1 %t224, label %range7589, label %inrange7590 +range7589: + call void @finch_panic_index(ptr @.str.4818, i64 4373, i64 %t221, i64 %t223) + unreachable +inrange7590: + %t225 = extractvalue { ptr, i64, i64 } %t222, 0 + %t226 = getelementptr inbounds i1, ptr %t225, i64 %t221 + %t227 = load i1, ptr %t226 + br i1 %t227, label %then7591, label %else7592 +then7591: + %t228 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i32 0, i32 1 + %t230 = load i64, ptr %t229 + %t231 = add i64 %t230, 1 + call void @finch_arr_reserve(ptr %t228, i64 %t231, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t232 = load ptr, ptr %t228 + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 %t230 + store { ptr, i64, i64 } { ptr @.str.4819, i64 6, i64 0 }, ptr %t233 + store i64 %t231, ptr %t229 + br label %endif7593 +else7592: + %t234 = load i64, ptr %a210 + %t235 = icmp sgt i64 %t234, 4 + br i1 %t235, label %then7594, label %else7595 +then7594: + %t236 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1 + %t238 = load i64, ptr %t237 + %t239 = add i64 %t238, 1 + call void @finch_arr_reserve(ptr %t236, i64 %t239, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t240 = load ptr, ptr %t236 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i64 %t238 + store { ptr, i64, i64 } { ptr @.str.4820, i64 11, i64 0 }, ptr %t241 + store i64 %t239, ptr %t237 + br label %endif7596 +else7595: + %t242 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 + %t244 = load i64, ptr %t243 + %t245 = add i64 %t244, 1 + call void @finch_arr_reserve(ptr %t242, i64 %t245, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t246 = load ptr, ptr %t242 + %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 + store { ptr, i64, i64 } { ptr @.str.4821, i64 5, i64 0 }, ptr %t247 + store i64 %t245, ptr %t243 + br label %endif7596 +endif7596: + br label %endif7593 +endif7593: + br label %endif7588 +else7587: + %t248 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 + %t250 = load i64, ptr %a210 + %t251 = mul i64 %t250, 8 + call void @finch_str_from_int(ptr %a252, i64 %t251) + %t253 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } { ptr @.str.4822, i64 1, i64 0 }, ptr %a255 + store { ptr, i64, i64 } %t253, ptr %a256 + call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) + store { ptr, i64, i64 } %t253, ptr %a257 + call void @finch_str_drop(ptr %a257) + %t258 = load { ptr, i64, i64 }, ptr %a254 + %t259 = load i64, ptr %t249 + %t260 = add i64 %t259, 1 + call void @finch_arr_reserve(ptr %t248, i64 %t260, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t261 = load ptr, ptr %t248 + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t261, i64 %t259 + store { ptr, i64, i64 } %t258, ptr %t262 + store i64 %t260, ptr %t249 + br label %endif7588 +endif7588: + br label %for.step7579 +for.step7579: + %t263 = load i64, ptr %a203 + %t264 = add i64 %t263, 1 + store i64 %t264, ptr %a203 + br label %for.cond7577 +for.end7580: + %t265 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1 + %t267 = load i64, ptr %t266 + %t268 = icmp eq i64 %t267, 1 + br i1 %t268, label %then7597, label %else7598 +then7597: + %t269 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t270 = load { ptr, i64, i64 }, ptr %t269 + %t271 = extractvalue { ptr, i64, i64 } %t270, 1 + %t272 = icmp uge i64 0, %t271 + br i1 %t272, label %range7600, label %inrange7601 +range7600: + call void @finch_panic_index(ptr @.str.4823, i64 4385, i64 0, i64 %t271) + unreachable +inrange7601: + %t273 = extractvalue { ptr, i64, i64 } %t270, 0 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 0 + %t275 = load { ptr, i64, i64 }, ptr %t274 + %t276 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t275, ptr %a277 + call void @finch_str_copy(ptr %a278, ptr %a277) + %t279 = load { ptr, i64, i64 }, ptr %a278 + %t280 = load { ptr, i64, i64 }, ptr %t276 + store { ptr, i64, i64 } %t279, ptr %t276 + store { ptr, i64, i64 } %t280, ptr %a281 + call void @finch_str_drop(ptr %a281) + br label %endif7599 +else7598: + %t282 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4825, i64 2, i64 0 }, ptr %a284 + call void @finch_str_join(ptr %a285, ptr %t282, ptr %a284) + %t286 = load { ptr, i64, i64 }, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.4824, i64 2, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t286, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.4826, i64 2, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 + %t298 = load { ptr, i64, i64 }, ptr %t297 + store { ptr, i64, i64 } %t296, ptr %t297 + store { ptr, i64, i64 } %t298, ptr %a299 + call void @finch_str_drop(ptr %a299) + br label %endif7599 +endif7599: + %t300 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.arr_bool(ptr %a136) + call void @finch.drop.arr_int(ptr %a128) + call void @finch.drop.arr_S_gen_Leaf(ptr %a116) + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t300 +} + +define internal %S.gen.Plan @finch.gen.makePlan(ptr %p0, %S.ast.Type %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.gen.Plan, align 16 + %a5 = alloca i64, align 16 + %a6 = alloca i64, align 16 + %a12 = alloca %S.gen.Abi, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca i64, align 16 + %a76 = alloca %S.ast.Type, align 16 + %a80 = alloca %S.gen.Abi, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca i64, align 16 + %a88 = alloca i64, align 16 + %a90 = alloca i64, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca %S.gen.Abi, align 16 + %a155 = alloca %S.gen.Abi, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.gen.Plan zeroinitializer, ptr %a4 + store i64 6, ptr %a5 + store i64 8, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = load %S.ast.Type, ptr %a2 + %t9 = call %S.gen.Abi @finch.gen.classify(ptr %t7, %S.ast.Type %t8) + %t10 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t11 = load %S.gen.Abi, ptr %t10 + store %S.gen.Abi %t9, ptr %t10 + store %S.gen.Abi %t11, ptr %a12 + call void @finch.drop.S_gen_Abi(ptr %a12) + %t13 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } { ptr @.str.4827, i64 4, i64 0 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.4828, i64 4, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp eq i32 %t20, 0 + br i1 %t21, label %then7602, label %endif7604 +then7602: + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Type, ptr %a2 + %t24 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t22, %S.ast.Type %t23) + %t25 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t24, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + call void @finch_str_drop(ptr %a27) + br label %endif7604 +endif7604: + %t28 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t29 = getelementptr inbounds %S.gen.Abi, ptr %t28, i32 0, i32 0 + %t30 = load { ptr, i64, i64 }, ptr %t29 + store { ptr, i64, i64 } %t30, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.4829, i64 8, i64 0 }, ptr %a32 + %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) + %t34 = icmp ne i32 %t33, 0 + br i1 %t34, label %then7605, label %endif7607 +then7605: + %t35 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t36 = getelementptr inbounds %S.gen.Abi, ptr %t35, i32 0, i32 0 + %t37 = load { ptr, i64, i64 }, ptr %t36 + store { ptr, i64, i64 } { ptr @.str.4830, i64 6, i64 0 }, ptr %t36 + store { ptr, i64, i64 } %t37, ptr %a38 + call void @finch_str_drop(ptr %a38) + br label %endif7607 +endif7607: + %t39 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t40 = getelementptr inbounds %S.gen.Abi, ptr %t39, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.4831, i64 6, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br i1 %t45, label %then7608, label %else7609 +then7608: + %t46 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 3 + store i1 true, ptr %t46 + %t47 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + %t48 = load { ptr, i64, i64 }, ptr %t47 + store { ptr, i64, i64 } { ptr @.str.4832, i64 4, i64 0 }, ptr %t47 + store { ptr, i64, i64 } %t48, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load i64, ptr %a5 + %t51 = sub i64 %t50, 1 + store i64 %t51, ptr %a5 + br label %endif7610 +else7609: + %t52 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t53 = getelementptr inbounds %S.gen.Abi, ptr %t52, i32 0, i32 0 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.4833, i64 6, i64 0 }, ptr %a56 + %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) + %t58 = icmp ne i32 %t57, 0 + br i1 %t58, label %then7611, label %endif7613 +then7611: + %t59 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t60 = getelementptr inbounds %S.gen.Abi, ptr %t59, i32 0, i32 2 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t61, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + %t66 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t65, ptr %t62 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + br label %endif7613 +endif7613: + br label %endif7610 +endif7610: + store i64 0, ptr %a68 + br label %each.cond7614 +each.cond7614: + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = load i64, ptr %a68 + %t72 = icmp slt i64 %t71, %t70 + br i1 %t72, label %each.body7615, label %each.end7617 +each.body7615: + %t73 = load ptr, ptr %a3 + %t74 = getelementptr inbounds %S.ast.Type, ptr %t73, i64 %t71 + %t75 = load %S.ast.Type, ptr %t74 + store %S.ast.Type %t75, ptr %a76 + %t77 = load ptr, ptr %a1 + %t78 = load %S.ast.Type, ptr %a76 + %t79 = call %S.gen.Abi @finch.gen.classify(ptr %t77, %S.ast.Type %t78) + store %S.gen.Abi %t79, ptr %a80 + %t81 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t82, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.4834, i64 6, i64 0 }, ptr %a84 + %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) + %t86 = icmp ne i32 %t85, 0 + br i1 %t86, label %then7618, label %else7619 +then7618: + store i64 0, ptr %a87 + store i64 0, ptr %a88 + %t89 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 1 + store i64 0, ptr %a90 + br label %each.cond7621 +each.cond7621: + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 + %t92 = load i64, ptr %t91 + %t93 = load i64, ptr %a90 + %t94 = icmp slt i64 %t93, %t92 + br i1 %t94, label %each.body7622, label %each.end7624 +each.body7622: + %t95 = load ptr, ptr %t89 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t93 + %t97 = load { ptr, i64, i64 }, ptr %t96 + store { ptr, i64, i64 } %t97, ptr %a98 + %t99 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t99, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.4836, i64 1, i64 0 }, ptr %a102 + %t103 = call i32 @finch_str_starts(ptr %a100, ptr %a102) + %t104 = icmp ne i32 %t103, 0 + br i1 %t104, label %then7625, label %else7626 +then7625: + %t105 = load i64, ptr %a87 + %t106 = add i64 %t105, 1 + store i64 %t106, ptr %a87 + br label %endif7627 +else7626: + %t107 = load i64, ptr %a88 + %t108 = add i64 %t107, 1 + store i64 %t108, ptr %a88 + br label %endif7627 +endif7627: + br label %each.step7623 +each.step7623: + %t109 = load i64, ptr %a90 + %t110 = add i64 %t109, 1 + store i64 %t110, ptr %a90 + br label %each.cond7621 +each.end7624: + %t111 = load ptr, ptr %a1 + %t112 = icmp eq ptr %t111, null + br i1 %t112, label %panic7628, label %ok7629 +panic7628: + call void @finch_panic(ptr @.str.4837, i64 4425, ptr @.str.4838) + unreachable +ok7629: + %t113 = getelementptr inbounds %S.gen.Gen, ptr %t111, i32 0, i32 31 + %t114 = getelementptr inbounds %S.platform.Target, ptr %t113, i32 0, i32 1 + %t115 = load i1, ptr %t114 + br label %logic.from7630 +logic.from7630: + br i1 %t115, label %logic.end7632, label %logic.rhs7631 +logic.rhs7631: + %t116 = load ptr, ptr %a1 + %t117 = icmp eq ptr %t116, null + br i1 %t117, label %panic7633, label %ok7634 +panic7633: + call void @finch_panic(ptr @.str.4839, i64 4425, ptr @.str.4840) + unreachable +ok7634: + %t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 31 + %t119 = getelementptr inbounds %S.platform.Target, ptr %t118, i32 0, i32 4 + %t120 = load i1, ptr %t119 + br label %logic.rend7635 +logic.rend7635: + br label %logic.end7632 +logic.end7632: + %t121 = phi i1 [ true, %logic.from7630 ], [ %t120, %logic.rend7635 ] + br label %logic.from7636 +logic.from7636: + br i1 %t121, label %logic.end7638, label %logic.rhs7637 +logic.rhs7637: + %t122 = load i64, ptr %a87 + %t123 = load i64, ptr %a5 + %t124 = icmp sle i64 %t122, %t123 + br label %logic.from7639 +logic.from7639: + br i1 %t124, label %logic.rhs7640, label %logic.end7641 +logic.rhs7640: + %t125 = load i64, ptr %a88 + %t126 = load i64, ptr %a6 + %t127 = icmp sle i64 %t125, %t126 + br label %logic.rend7642 +logic.rend7642: + br label %logic.end7641 +logic.end7641: + %t128 = phi i1 [ false, %logic.from7639 ], [ %t127, %logic.rend7642 ] + br label %logic.rend7643 +logic.rend7643: + br label %logic.end7638 +logic.end7638: + %t129 = phi i1 [ true, %logic.from7636 ], [ %t128, %logic.rend7643 ] + br i1 %t129, label %then7644, label %else7645 +then7644: + %t130 = load i64, ptr %a87 + %t131 = load i64, ptr %a5 + %t132 = sub i64 %t131, %t130 + store i64 %t132, ptr %a5 + %t133 = load i64, ptr %a88 + %t134 = load i64, ptr %a6 + %t135 = sub i64 %t134, %t133 + store i64 %t135, ptr %a6 + br label %endif7646 +else7645: + %t136 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 + %t137 = load { ptr, i64, i64 }, ptr %t136 + store { ptr, i64, i64 } { ptr @.str.4841, i64 6, i64 0 }, ptr %t136 + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_drop(ptr %a138) + br label %endif7646 +endif7646: + br label %endif7620 +else7619: + %t139 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 + %t140 = load { ptr, i64, i64 }, ptr %t139 + store { ptr, i64, i64 } %t140, ptr %a141 + store { ptr, i64, i64 } { ptr @.str.4842, i64 6, i64 0 }, ptr %a142 + %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) + %t144 = icmp ne i32 %t143, 0 + br i1 %t144, label %then7647, label %endif7649 +then7647: + %t145 = load %S.ast.Type, ptr %a76 + %t146 = call i1 @finch.gen.isFloat(%S.ast.Type %t145) + br i1 %t146, label %then7650, label %else7651 +then7650: + %t147 = load i64, ptr %a6 + %t148 = sub i64 %t147, 1 + store i64 %t148, ptr %a6 + br label %endif7652 +else7651: + %t149 = load i64, ptr %a5 + %t150 = sub i64 %t149, 1 + store i64 %t150, ptr %a5 + br label %endif7652 +endif7652: + br label %endif7649 +endif7649: + br label %endif7620 +endif7620: + %t151 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 1 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load %S.gen.Abi, ptr %a80 + store %S.gen.Abi %t153, ptr %a154 + call void @finch.copy.S_gen_Abi(ptr %a155, ptr %a154) + %t156 = load %S.gen.Abi, ptr %a155 + %t157 = load i64, ptr %t152 + %t158 = add i64 %t157, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t158, i64 ptrtoint (ptr getelementptr (%S.gen.Abi, ptr null, i32 1) to i64)) + %t159 = load ptr, ptr %t151 + %t160 = getelementptr inbounds %S.gen.Abi, ptr %t159, i64 %t157 + store %S.gen.Abi %t156, ptr %t160 + store i64 %t158, ptr %t152 + call void @finch.drop.S_gen_Abi(ptr %a80) + br label %each.step7616 +each.step7616: + %t161 = load i64, ptr %a68 + %t162 = add i64 %t161, 1 + store i64 %t162, ptr %a68 + br label %each.cond7614 +each.end7617: + %t163 = load %S.gen.Plan, ptr %a4 + ret %S.gen.Plan %t163 +} + +define internal void @finch.gen.checkByValue(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca %S.gen.StructDef, align 16 + %a28 = alloca %S.gen.StructDef, align 16 + %a30 = alloca %S.gen.StructDef, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4843, i64 6, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp eq i32 %t10, 0 + br i1 %t11, label %then7653, label %endif7655 +then7653: + ret void +endif7655: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic7656, label %ok7657 +panic7656: + call void @finch_panic(ptr @.str.4844, i64 4447, ptr @.str.4845) + unreachable +ok7657: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 3 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call i64 @finch.gen.findStruct(ptr %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t19) + %t21 = load { ptr, i64, i64 }, ptr %t14 + %t22 = extractvalue { ptr, i64, i64 } %t21, 1 + %t23 = icmp uge i64 %t20, %t22 + br i1 %t23, label %range7658, label %inrange7659 +range7658: + call void @finch_panic_index(ptr @.str.4846, i64 4447, i64 %t20, i64 %t22) + unreachable +inrange7659: + %t24 = extractvalue { ptr, i64, i64 } %t21, 0 + %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 + %t26 = load %S.gen.StructDef, ptr %t25 + store %S.gen.StructDef %t26, ptr %a27 + call void @finch.copy.S_gen_StructDef(ptr %a28, ptr %a27) + %t29 = load %S.gen.StructDef, ptr %a28 + store %S.gen.StructDef %t29, ptr %a30 + %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 2 + %t32 = load i1, ptr %t31 + %t33 = xor i1 %t32, true + br i1 %t33, label %then7660, label %endif7662 +then7660: + %t34 = load ptr, ptr %a1 + %t35 = load %S.ast.Node, ptr %a2 + %t36 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.4847, i64 16, i64 0 }, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.4848, i64 2, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t45, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t45, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.4849, i64 18, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + %t57 = load %S.ast.Type, ptr %a4 + %t58 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t57) + store { ptr, i64, i64 } %t56, ptr %a60 + store { ptr, i64, i64 } %t58, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t56, ptr %a62 + call void @finch_str_drop(ptr %a62) + store { ptr, i64, i64 } %t58, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t64, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.4850, i64 20, i64 0 }, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + call void @finch.gen.fail(ptr %t34, %S.ast.Node %t35, { ptr, i64, i64 } %t69) + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_drop(ptr %a70) + br label %endif7662 +endif7662: + %t71 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1 + %t73 = load i64, ptr %t72 + %t74 = icmp sgt i64 %t73, 0 + br i1 %t74, label %then7663, label %endif7665 +then7663: + %t75 = load ptr, ptr %a1 + %t76 = load %S.ast.Node, ptr %a2 + %t77 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.4851, i64 16, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t81, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.4852, i64 2, i64 0 }, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t81, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a82 + %t87 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t86, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t86, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4853, i64 12, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load %S.ast.Type, ptr %a4 + %t99 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t98) + store { ptr, i64, i64 } %t97, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t97, ptr %a103 + call void @finch_str_drop(ptr %a103) + store { ptr, i64, i64 } %t99, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.4854, i64 40, i64 0 }, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t105, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t110, ptr %a114 + store { ptr, i64, i64 } %t112, ptr %a115 + call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) + store { ptr, i64, i64 } %t110, ptr %a116 + call void @finch_str_drop(ptr %a116) + %t117 = load { ptr, i64, i64 }, ptr %a113 + call void @finch.gen.fail(ptr %t75, %S.ast.Node %t76, { ptr, i64, i64 } %t117) + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_drop(ptr %a118) + br label %endif7665 +endif7665: + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret void +} + +define internal i1 @finch.gen.cPlain(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + %t3 = call i1 @finch.gen.isNumber(%S.ast.Type %t2) + br label %logic.from7666 +logic.from7666: + br i1 %t3, label %logic.end7668, label %logic.rhs7667 +logic.rhs7667: + %t4 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4855, i64 4, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.rend7669 +logic.rend7669: + br label %logic.end7668 +logic.end7668: + %t10 = phi i1 [ true, %logic.from7666 ], [ %t9, %logic.rend7669 ] + br label %logic.from7670 +logic.from7670: + br i1 %t10, label %logic.end7672, label %logic.rhs7671 +logic.rhs7671: + %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.4856, i64 4, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.rend7673 +logic.rend7673: + br label %logic.end7672 +logic.end7672: + %t17 = phi i1 [ true, %logic.from7670 ], [ %t16, %logic.rend7673 ] + br label %logic.from7674 +logic.from7674: + br i1 %t17, label %logic.end7676, label %logic.rhs7675 +logic.rhs7675: + %t18 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.4857, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend7677 +logic.rend7677: + br label %logic.end7676 +logic.end7676: + %t24 = phi i1 [ true, %logic.from7674 ], [ %t23, %logic.rend7677 ] + ret i1 %t24 +} + +define internal void @finch.gen.checkExport(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.FnSig, align 16 + %a23 = alloca i64, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca i64, align 16 + %a106 = alloca %S.gen.FnSig, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.FnSig %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 2 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = icmp sgt i64 %t6, 0 + br i1 %t7, label %then7678, label %endif7680 +then7678: + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.4858, i64 59, i64 0 }) + br label %endif7680 +endif7680: + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 7 + %t11 = load i1, ptr %t10 + br i1 %t11, label %then7681, label %endif7683 +then7681: + %t12 = load ptr, ptr %a1 + %t13 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t12, %S.ast.Node %t13, { ptr, i64, i64 } { ptr @.str.4859, i64 74, i64 0 }) + br label %endif7683 +endif7683: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 3 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp sgt i64 %t16, 0 + br i1 %t17, label %then7684, label %endif7686 +then7684: + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.4860, i64 29, i64 0 }) + br label %endif7686 +endif7686: + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load i64, ptr %t21 + store i64 0, ptr %a23 + br label %for.cond7687 +for.cond7687: + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, %t22 + br i1 %t25, label %for.body7688, label %for.end7690 +for.body7688: + %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 + %t27 = load i64, ptr %a23 + %t28 = load { ptr, i64, i64 }, ptr %t26 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 %t27, %t29 + br i1 %t30, label %range7691, label %inrange7692 +range7691: + call void @finch_panic_index(ptr @.str.4861, i64 4472, i64 %t27, i64 %t29) + unreachable +inrange7692: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 %t27 + %t33 = load %S.ast.Type, ptr %t32 + %t34 = call i1 @finch.gen.cPlain(%S.ast.Type %t33) + %t35 = xor i1 %t34, true + br i1 %t35, label %then7693, label %endif7695 +then7693: + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t38 = load i64, ptr %a23 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range7696, label %inrange7697 +range7696: + call void @finch_panic_index(ptr @.str.4862, i64 4473, i64 %t38, i64 %t40) + unreachable +inrange7697: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t38 + %t44 = load %S.ast.Node, ptr %t43 + %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 + %t46 = load i64, ptr %a23 + %t47 = load { ptr, i64, i64 }, ptr %t45 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = icmp uge i64 %t46, %t48 + br i1 %t49, label %range7698, label %inrange7699 +range7698: + call void @finch_panic_index(ptr @.str.4864, i64 4473, i64 %t46, i64 %t48) + unreachable +inrange7699: + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = getelementptr inbounds %S.ast.Type, ptr %t50, i64 %t46 + %t52 = load %S.ast.Type, ptr %t51 + %t53 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t52) + store { ptr, i64, i64 } { ptr @.str.4863, i64 66, i64 0 }, ptr %a55 + store { ptr, i64, i64 } %t53, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t53, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t58, ptr %a60 + store { ptr, i64, i64 } { ptr @.str.4865, i64 50, i64 0 }, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + call void @finch.gen.fail(ptr %t36, %S.ast.Node %t44, { ptr, i64, i64 } %t63) + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_drop(ptr %a64) + br label %endif7695 +endif7695: + br label %for.step7689 +for.step7689: + %t65 = load i64, ptr %a23 + %t66 = add i64 %t65, 1 + store i64 %t66, ptr %a23 + br label %for.cond7687 +for.end7690: + %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 + %t68 = getelementptr inbounds %S.ast.Type, ptr %t67, i32 0, i32 0 + %t69 = load { ptr, i64, i64 }, ptr %t68 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.4866, i64 4, i64 0 }, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp eq i32 %t72, 0 + br label %logic.from7700 +logic.from7700: + br i1 %t73, label %logic.rhs7701, label %logic.end7702 +logic.rhs7701: + %t74 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 + %t75 = load %S.ast.Type, ptr %t74 + %t76 = call i1 @finch.gen.cPlain(%S.ast.Type %t75) + %t77 = xor i1 %t76, true + br label %logic.rend7703 +logic.rend7703: + br label %logic.end7702 +logic.end7702: + %t78 = phi i1 [ false, %logic.from7700 ], [ %t77, %logic.rend7703 ] + br i1 %t78, label %then7704, label %endif7706 +then7704: + %t79 = load ptr, ptr %a1 + %t80 = load %S.ast.Node, ptr %a2 + %t81 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 + %t82 = load %S.ast.Type, ptr %t81 + %t83 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t82) + store { ptr, i64, i64 } { ptr @.str.4867, i64 69, i64 0 }, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.4868, i64 1, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + call void @finch.gen.fail(ptr %t79, %S.ast.Node %t80, { ptr, i64, i64 } %t93) + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + br label %endif7706 +endif7706: + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic7707, label %ok7708 +panic7707: + call void @finch_panic(ptr @.str.4869, i64 4479, ptr @.str.4870) + unreachable +ok7708: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 15 + store i64 0, ptr %a98 + br label %each.cond7709 +each.cond7709: + %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i32 0, i32 1 + %t100 = load i64, ptr %t99 + %t101 = load i64, ptr %a98 + %t102 = icmp slt i64 %t101, %t100 + br i1 %t102, label %each.body7710, label %each.end7712 +each.body7710: + %t103 = load ptr, ptr %t97 + %t104 = getelementptr inbounds %S.gen.FnSig, ptr %t103, i64 %t101 + %t105 = load %S.gen.FnSig, ptr %t104 + store %S.gen.FnSig %t105, ptr %a106 + %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 5 + %t108 = load i1, ptr %t107 + br label %logic.from7713 +logic.from7713: + br i1 %t108, label %logic.rhs7714, label %logic.end7715 +logic.rhs7714: + %t109 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 1 + %t110 = load { ptr, i64, i64 }, ptr %t109 + %t111 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t110, ptr %a113 + store { ptr, i64, i64 } %t112, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br label %logic.rend7716 +logic.rend7716: + br label %logic.end7715 +logic.end7715: + %t117 = phi i1 [ false, %logic.from7713 ], [ %t116, %logic.rend7716 ] + br i1 %t117, label %then7717, label %endif7719 +then7717: + %t118 = load ptr, ptr %a1 + %t119 = load %S.ast.Node, ptr %a2 + %t120 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %t120 + store { ptr, i64, i64 } { ptr @.str.4871, i64 1, i64 0 }, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t125, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.4872, i64 38, i64 0 }, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t125, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.fail(ptr %t118, %S.ast.Node %t119, { ptr, i64, i64 } %t130) + store { ptr, i64, i64 } %t130, ptr %a131 + call void @finch_str_drop(ptr %a131) + br label %endif7719 +endif7719: + br label %each.step7711 +each.step7711: + %t132 = load i64, ptr %a98 + %t133 = add i64 %t132, 1 + store i64 %t133, ptr %a98 + br label %each.cond7709 +each.end7712: + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %p0, %S.gen.FnSig %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.FnSig, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca %S.gen.Saved, align 16 + %a11 = alloca i64, align 16 + %a22 = alloca %S.ast.Type, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.ast.Type, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.FnSig %p1, ptr %a2 + store { ptr, i64, i64 } zeroinitializer, ptr %a3 + store { ptr, i64, i64 } zeroinitializer, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t5) + store %S.gen.Saved %t6, ptr %a7 + %t8 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + store i64 0, ptr %a11 + br label %for.cond7720 +for.cond7720: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t10 + br i1 %t13, label %for.body7721, label %for.end7723 +for.body7721: + %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 + %t15 = load i64, ptr %a11 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range7724, label %inrange7725 +range7724: + call void @finch_panic_index(ptr @.str.4873, i64 4492, i64 %t15, i64 %t17) + unreachable +inrange7725: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.ast.Type, ptr %t19, i64 %t15 + %t21 = load %S.ast.Type, ptr %t20 + store %S.ast.Type %t21, ptr %a22 + call void @finch.copy.S_ast_Type(ptr %a23, ptr %a22) + %t24 = load %S.ast.Type, ptr %a23 + store %S.ast.Type %t24, ptr %a25 + %t26 = getelementptr inbounds %S.ast.Type, ptr %a25, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.4874, i64 4, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %then7726, label %else7727 +then7726: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t33 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a34, i64 %t33) + %t35 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.4875, i64 13, i64 0 }, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load i64, ptr %t32 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a3, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a3 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } %t40, ptr %t44 + store i64 %t42, ptr %t32 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t46 = load ptr, ptr %a1 + %t47 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a48, i64 %t47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.4877, i64 13, i64 0 }, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.4878, i64 3, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + %t60 = call { ptr, i64, i64 } @finch.gen.op(ptr %t46, { ptr, i64, i64 } %t59) + store { ptr, i64, i64 } %t59, ptr %a61 + call void @finch_str_drop(ptr %a61) + store { ptr, i64, i64 } { ptr @.str.4876, i64 3, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = load i64, ptr %t45 + %t68 = add i64 %t67, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t68, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t69 = load ptr, ptr %a4 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t67 + store { ptr, i64, i64 } %t66, ptr %t70 + store i64 %t68, ptr %t45 + br label %endif7728 +else7727: + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t72 = load ptr, ptr %a1 + %t73 = load %S.ast.Type, ptr %a25 + %t74 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t72, %S.ast.Type %t73) + %t75 = load ptr, ptr %a1 + %t76 = load %S.ast.Type, ptr %a25 + %t77 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t75, %S.ast.Type %t76) + store { ptr, i64, i64 } %t74, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t74, ptr %a81 + call void @finch_str_drop(ptr %a81) + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.4879, i64 3, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + %t89 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t88, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a92 + %t98 = load i64, ptr %t71 + %t99 = add i64 %t98, 1 + call void @finch_arr_reserve(ptr %a3, i64 %t99, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t100 = load ptr, ptr %a3 + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t98 + store { ptr, i64, i64 } %t97, ptr %t101 + store i64 %t99, ptr %t71 + %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t103 = load ptr, ptr %a1 + %t104 = load %S.ast.Type, ptr %a25 + %t105 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t103, %S.ast.Type %t104) + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.4880, i64 3, i64 0 }, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t105, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a112, i64 %t111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t110, ptr %a117 + call void @finch_str_drop(ptr %a117) + store { ptr, i64, i64 } %t113, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a114 + %t120 = load i64, ptr %t102 + %t121 = add i64 %t120, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t121, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t122 = load ptr, ptr %a4 + %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 %t120 + store { ptr, i64, i64 } %t119, ptr %t123 + store i64 %t121, ptr %t102 + br label %endif7728 +endif7728: + call void @finch.drop.S_ast_Type(ptr %a25) + br label %for.step7722 +for.step7722: + %t124 = load i64, ptr %a11 + %t125 = add i64 %t124, 1 + store i64 %t125, ptr %a11 + br label %for.cond7720 +for.end7723: + %t126 = load ptr, ptr %a1 + %t127 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t128 = load %S.ast.Type, ptr %t127 + %t129 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t126, %S.ast.Type %t128) + store { ptr, i64, i64 } { ptr @.str.4881, i64 5, i64 0 }, ptr %a131 + store { ptr, i64, i64 } %t129, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + store { ptr, i64, i64 } %t129, ptr %a133 + call void @finch_str_drop(ptr %a133) + %t134 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t134, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.4882, i64 1, i64 0 }, ptr %a137 + call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) + store { ptr, i64, i64 } %t134, ptr %a138 + call void @finch_str_drop(ptr %a138) + %t139 = load { ptr, i64, i64 }, ptr %a135 + %t140 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 + %t141 = load { ptr, i64, i64 }, ptr %t140 + store { ptr, i64, i64 } %t139, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t139, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.4883, i64 1, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4884, i64 2, i64 0 }, ptr %a153 + call void @finch_str_join(ptr %a154, ptr %a4, ptr %a153) + %t155 = load { ptr, i64, i64 }, ptr %a154 + store { ptr, i64, i64 } %t151, ptr %a157 + store { ptr, i64, i64 } %t155, ptr %a158 + call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) + store { ptr, i64, i64 } %t151, ptr %a159 + call void @finch_str_drop(ptr %a159) + store { ptr, i64, i64 } %t155, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a156 + store { ptr, i64, i64 } %t161, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.4885, i64 1, i64 0 }, ptr %a164 + call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) + store { ptr, i64, i64 } %t161, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.4886, i64 4, i64 0 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4887, i64 0, i64 0 }, ptr %a169 + %t170 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t171 = getelementptr inbounds %S.ast.Type, ptr %t170, i32 0, i32 0 + %t172 = load { ptr, i64, i64 }, ptr %t171 + store { ptr, i64, i64 } %t172, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.4888, i64 4, i64 0 }, ptr %a174 + %t175 = call i32 @finch_str_eq(ptr %a173, ptr %a174) + %t176 = icmp ne i32 %t175, 0 + br i1 %t176, label %then7729, label %else7730 +then7729: + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a167 + call void @finch.gen.emit(ptr %t177, { ptr, i64, i64 } %t178) + %t179 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t179, { ptr, i64, i64 } { ptr @.str.4889, i64 8, i64 0 }) + br label %endif7731 +else7730: + %t180 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t181 = getelementptr inbounds %S.ast.Type, ptr %t180, i32 0, i32 0 + %t182 = load { ptr, i64, i64 }, ptr %t181 + store { ptr, i64, i64 } %t182, ptr %a183 + store { ptr, i64, i64 } { ptr @.str.4890, i64 4, i64 0 }, ptr %a184 + %t185 = call i32 @finch_str_eq(ptr %a183, ptr %a184) + %t186 = icmp ne i32 %t185, 0 + br i1 %t186, label %then7732, label %else7733 +then7732: + %t187 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4891, i64 2, i64 0 }, ptr %a168 + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch_str_drop(ptr %a188) + %t189 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4892, i64 8, i64 0 }, ptr %a169 + store { ptr, i64, i64 } %t189, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load ptr, ptr %a1 + %t192 = load ptr, ptr %a1 + %t193 = load ptr, ptr %a1 + %t194 = load { ptr, i64, i64 }, ptr %a167 + %t195 = call { ptr, i64, i64 } @finch.gen.op(ptr %t193, { ptr, i64, i64 } %t194) + store { ptr, i64, i64 } { ptr @.str.4894, i64 8, i64 0 }, ptr %a197 + store { ptr, i64, i64 } %t195, ptr %a198 + call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) + store { ptr, i64, i64 } %t195, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } %t200, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.4895, i64 6, i64 0 }, ptr %a203 + call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) + store { ptr, i64, i64 } %t200, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a201 + %t206 = call { ptr, i64, i64 } @finch.gen.op(ptr %t192, { ptr, i64, i64 } %t205) + store { ptr, i64, i64 } %t205, ptr %a207 + call void @finch_str_drop(ptr %a207) + store { ptr, i64, i64 } { ptr @.str.4893, i64 7, i64 0 }, ptr %a209 + store { ptr, i64, i64 } %t206, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + store { ptr, i64, i64 } %t206, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a208 + call void @finch.gen.emit(ptr %t191, { ptr, i64, i64 } %t212) + store { ptr, i64, i64 } %t212, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %endif7734 +else7733: + %t214 = load ptr, ptr %a1 + %t215 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t216 = load %S.ast.Type, ptr %t215 + %t217 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t214, %S.ast.Type %t216) + %t218 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t217, ptr %a168 + store { ptr, i64, i64 } %t218, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load ptr, ptr %a1 + %t221 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t222 = load %S.ast.Type, ptr %t221 + %t223 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t220, %S.ast.Type %t222) + %t224 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t223, ptr %a169 + store { ptr, i64, i64 } %t224, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load ptr, ptr %a1 + %t227 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4896, i64 4, i64 0 }, ptr %a229 + store { ptr, i64, i64 } %t227, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a228 + store { ptr, i64, i64 } %t231, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.4897, i64 1, i64 0 }, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t231, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + %t237 = load ptr, ptr %a1 + %t238 = load { ptr, i64, i64 }, ptr %a167 + %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t237, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t236, ptr %a241 + store { ptr, i64, i64 } %t239, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + store { ptr, i64, i64 } %t236, ptr %a243 + call void @finch_str_drop(ptr %a243) + store { ptr, i64, i64 } %t239, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.emit(ptr %t226, { ptr, i64, i64 } %t245) + store { ptr, i64, i64 } %t245, ptr %a246 + call void @finch_str_drop(ptr %a246) + br label %endif7734 +endif7734: + br label %endif7731 +endif7731: + store { ptr, i64, i64 } { ptr @.str.4898, i64 0, i64 0 }, ptr %a247 + %t248 = load ptr, ptr %a1 + %t249 = icmp eq ptr %t248, null + br i1 %t249, label %panic7735, label %ok7736 +panic7735: + call void @finch_panic(ptr @.str.4899, i64 4517, ptr @.str.4900) + unreachable +ok7736: + %t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 31 + %t251 = getelementptr inbounds %S.platform.Target, ptr %t250, i32 0, i32 1 + %t252 = load i1, ptr %t251 + br i1 %t252, label %then7737, label %endif7739 +then7737: + %t253 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.4901, i64 10, i64 0 }, ptr %a247 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_drop(ptr %a254) + br label %endif7739 +endif7739: + %t255 = load ptr, ptr %a1 + %t256 = load %S.gen.Saved, ptr %a7 + %t257 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.4902, i64 6, i64 0 }, ptr %a259 + store { ptr, i64, i64 } %t257, ptr %a260 + call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a258 + %t262 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t261, ptr %a264 + store { ptr, i64, i64 } %t262, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + store { ptr, i64, i64 } %t261, ptr %a266 + call void @finch_str_drop(ptr %a266) + %t267 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t267, ptr %a269 + store { ptr, i64, i64 } { ptr @.str.4903, i64 1, i64 0 }, ptr %a270 + call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) + store { ptr, i64, i64 } %t267, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load { ptr, i64, i64 }, ptr %a268 + %t273 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t272, ptr %a275 + store { ptr, i64, i64 } %t273, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t272, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + store { ptr, i64, i64 } %t278, ptr %a280 + store { ptr, i64, i64 } { ptr @.str.4904, i64 2, i64 0 }, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } %t283, ptr %a287 + store { ptr, i64, i64 } %t285, ptr %a288 + call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) + store { ptr, i64, i64 } %t283, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a286 + store { ptr, i64, i64 } %t290, ptr %a292 + store { ptr, i64, i64 } { ptr @.str.4905, i64 1, i64 0 }, ptr %a293 + call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293) + store { ptr, i64, i64 } %t290, ptr %a294 + call void @finch_str_drop(ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a291 + %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4906, i64 2, i64 0 }, ptr %a297 + call void @finch_str_join(ptr %a298, ptr %a3, ptr %a297) + %t299 = load { ptr, i64, i64 }, ptr %a298 + store { ptr, i64, i64 } %t295, ptr %a301 + store { ptr, i64, i64 } %t299, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t295, ptr %a303 + call void @finch_str_drop(ptr %a303) + store { ptr, i64, i64 } %t299, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } %t305, ptr %a307 + store { ptr, i64, i64 } { ptr @.str.4907, i64 1, i64 0 }, ptr %a308 + call void @finch_str_concat(ptr %a306, ptr %a307, ptr %a308) + store { ptr, i64, i64 } %t305, ptr %a309 + call void @finch_str_drop(ptr %a309) + %t310 = load { ptr, i64, i64 }, ptr %a306 + call void @finch.gen.endHelper(ptr %t255, %S.gen.Saved %t256, { ptr, i64, i64 } %t310) + store { ptr, i64, i64 } %t310, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 + %t313 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t313, ptr %a314 + call void @finch_str_copy(ptr %a315, ptr %a314) + %t316 = load { ptr, i64, i64 }, ptr %a315 + call void @finch_str_drop(ptr %a247) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a168) + call void @finch_str_drop(ptr %a167) + call void @finch.drop.S_gen_Saved(ptr %a7) + call void @finch.drop.arr_str(ptr %a4) + call void @finch.drop.arr_str(ptr %a3) + ret { ptr, i64, i64 } %t316 +} + +define internal void @finch.drop.arr_S_gen_Abi(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond7862 +n.cond7862: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body7863, label %n.end7864 +n.body7863: + %t7 = getelementptr inbounds %S.gen.Abi, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Abi(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond7862 +n.end7864: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Plan(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 0 + call void @finch.drop.S_gen_Abi(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_gen_Abi(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.cThunk(ptr %p0, i64 %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a14 = alloca %S.gen.FnSig, align 16 + %a15 = alloca %S.gen.FnSig, align 16 + %a17 = alloca %S.gen.FnSig, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i64, align 16 + %a51 = alloca i64, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca i64, align 16 + %a108 = alloca %S.ast.Type, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca %S.gen.Plan, align 16 + %a276 = alloca %S.gen.Saved, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca i64, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca i64, align 16 + %a318 = alloca %S.ast.Type, align 16 + %a319 = alloca %S.ast.Type, align 16 + %a321 = alloca %S.ast.Type, align 16 + %a330 = alloca %S.gen.Abi, align 16 + %a331 = alloca %S.gen.Abi, align 16 + %a333 = alloca %S.gen.Abi, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca i64, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a544 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a648 = alloca { ptr, i64, i64 }, align 16 + %a649 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a653 = alloca { ptr, i64, i64 }, align 16 + %a654 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a684 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a737 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a793 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a803 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a805 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a808 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a810 = alloca { ptr, i64, i64 }, align 16 + %a813 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic7740, label %ok7741 +panic7740: + call void @finch_panic(ptr @.str.4908, i64 4526, ptr @.str.4909) + unreachable +ok7741: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 + %t7 = load i64, ptr %a2 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range7742, label %inrange7743 +range7742: + call void @finch_panic_index(ptr @.str.4910, i64 4526, i64 %t7, i64 %t9) + unreachable +inrange7743: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.FnSig, ptr %t11, i64 %t7 + %t13 = load %S.gen.FnSig, ptr %t12 + store %S.gen.FnSig %t13, ptr %a14 + call void @finch.copy.S_gen_FnSig(ptr %a15, ptr %a14) + %t16 = load %S.gen.FnSig, ptr %a15 + store %S.gen.FnSig %t16, ptr %a17 + %t18 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t19) + store { ptr, i64, i64 } { ptr @.str.4911, i64 9, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t20, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.4912, i64 1, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t30, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t30, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a38 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic7744, label %ok7745 +panic7744: + call void @finch_panic(ptr @.str.4913, i64 4528, ptr @.str.4914) + unreachable +ok7745: + %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 40 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 + %t43 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.4915, i64 2, i64 0 }, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a44 + store i64 -1, ptr %a48 + %t49 = load i64, ptr %t42 + %t50 = load ptr, ptr %t41 + store i64 0, ptr %a51 + br label %find.cond7746 +find.cond7746: + %t52 = load i64, ptr %a51 + %t53 = icmp slt i64 %t52, %t49 + br i1 %t53, label %find.body7747, label %find.end7750 +find.body7747: + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 + %t55 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t55, ptr %a56 + store { ptr, i64, i64 } %t47, ptr %a57 + %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) + %t59 = icmp ne i32 %t58, 0 + br i1 %t59, label %find.hit7748, label %find.next7749 +find.hit7748: + store i64 %t52, ptr %a48 + br label %find.end7750 +find.next7749: + %t60 = add i64 %t52, 1 + store i64 %t60, ptr %a51 + br label %find.cond7746 +find.end7750: + store { ptr, i64, i64 } %t47, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load i64, ptr %a48 + %t63 = icmp sge i64 %t62, 0 + br i1 %t63, label %then7751, label %endif7753 +then7751: + %t64 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.drop.S_gen_FnSig(ptr %a17) + ret { ptr, i64, i64 } %t64 +endif7753: + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic7754, label %ok7755 +panic7754: + call void @finch_panic(ptr @.str.4916, i64 4531, ptr @.str.4917) + unreachable +ok7755: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 40 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 + %t69 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.4918, i64 2, i64 0 }, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a70 + %t74 = load i64, ptr %t68 + %t75 = add i64 %t74, 1 + call void @finch_arr_reserve(ptr %t67, i64 %t75, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t76 = load ptr, ptr %t67 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 + store { ptr, i64, i64 } %t73, ptr %t77 + store i64 %t75, ptr %t68 + %t78 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 2 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i32 0, i32 1 + %t80 = load i64, ptr %t79 + %t81 = icmp sgt i64 %t80, 0 + br label %logic.from7756 +logic.from7756: + br i1 %t81, label %logic.end7758, label %logic.rhs7757 +logic.rhs7757: + %t82 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 9 + %t83 = load i1, ptr %t82 + br label %logic.rend7759 +logic.rend7759: + br label %logic.end7758 +logic.end7758: + %t84 = phi i1 [ true, %logic.from7756 ], [ %t83, %logic.rend7759 ] + br i1 %t84, label %then7760, label %endif7762 +then7760: + %t85 = load ptr, ptr %a1 + %t86 = load %S.ast.Node, ptr %a3 + %t87 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t88 = load { ptr, i64, i64 }, ptr %t87 + store { ptr, i64, i64 } { ptr @.str.4919, i64 5, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4920, i64 81, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + call void @finch.gen.fail(ptr %t85, %S.ast.Node %t86, { ptr, i64, i64 } %t97) + store { ptr, i64, i64 } %t97, ptr %a98 + call void @finch_str_drop(ptr %a98) + br label %endif7762 +endif7762: + %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + store i64 0, ptr %a100 + br label %each.cond7763 +each.cond7763: + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 + %t102 = load i64, ptr %t101 + %t103 = load i64, ptr %a100 + %t104 = icmp slt i64 %t103, %t102 + br i1 %t104, label %each.body7764, label %each.end7766 +each.body7764: + %t105 = load ptr, ptr %t99 + %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t103 + %t107 = load %S.ast.Type, ptr %t106 + store %S.ast.Type %t107, ptr %a108 + %t109 = load %S.ast.Type, ptr %a108 + %t110 = call i1 @finch.gen.isNumber(%S.ast.Type %t109) + br label %logic.from7767 +logic.from7767: + br i1 %t110, label %logic.end7769, label %logic.rhs7768 +logic.rhs7768: + %t111 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.4921, i64 4, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br label %logic.rend7770 +logic.rend7770: + br label %logic.end7769 +logic.end7769: + %t117 = phi i1 [ true, %logic.from7767 ], [ %t116, %logic.rend7770 ] + br label %logic.from7771 +logic.from7771: + br i1 %t117, label %logic.end7773, label %logic.rhs7772 +logic.rhs7772: + %t118 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t119 = load { ptr, i64, i64 }, ptr %t118 + store { ptr, i64, i64 } %t119, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.4922, i64 4, i64 0 }, ptr %a121 + %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) + %t123 = icmp ne i32 %t122, 0 + br label %logic.rend7774 +logic.rend7774: + br label %logic.end7773 +logic.end7773: + %t124 = phi i1 [ true, %logic.from7771 ], [ %t123, %logic.rend7774 ] + br label %logic.from7775 +logic.from7775: + br i1 %t124, label %logic.end7777, label %logic.rhs7776 +logic.rhs7776: + %t125 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t126, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.4923, i64 3, i64 0 }, ptr %a128 + %t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128) + %t130 = icmp ne i32 %t129, 0 + br label %logic.rend7778 +logic.rend7778: + br label %logic.end7777 +logic.end7777: + %t131 = phi i1 [ true, %logic.from7775 ], [ %t130, %logic.rend7778 ] + br label %logic.from7779 +logic.from7779: + br i1 %t131, label %logic.end7781, label %logic.rhs7780 +logic.rhs7780: + %t132 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.4924, i64 6, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp ne i32 %t136, 0 + br label %logic.from7782 +logic.from7782: + br i1 %t137, label %logic.rhs7783, label %logic.end7784 +logic.rhs7783: + %t138 = load ptr, ptr %a1 + %t139 = icmp eq ptr %t138, null + br i1 %t139, label %panic7785, label %ok7786 +panic7785: + call void @finch_panic(ptr @.str.4925, i64 4536, ptr @.str.4926) + unreachable +ok7786: + %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 + %t141 = load ptr, ptr %a1 + %t142 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 3 + %t143 = load { ptr, i64, i64 }, ptr %t142 + %t144 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 2 + %t145 = load { ptr, i64, i64 }, ptr %t144 + %t146 = call i64 @finch.gen.findStruct(ptr %t141, { ptr, i64, i64 } %t143, { ptr, i64, i64 } %t145) + %t147 = load { ptr, i64, i64 }, ptr %t140 + %t148 = extractvalue { ptr, i64, i64 } %t147, 1 + %t149 = icmp uge i64 %t146, %t148 + br i1 %t149, label %range7787, label %inrange7788 +range7787: + call void @finch_panic_index(ptr @.str.4927, i64 4536, i64 %t146, i64 %t148) + unreachable +inrange7788: + %t150 = extractvalue { ptr, i64, i64 } %t147, 0 + %t151 = getelementptr inbounds %S.gen.StructDef, ptr %t150, i64 %t146 + %t152 = getelementptr inbounds %S.gen.StructDef, ptr %t151, i32 0, i32 2 + %t153 = load i1, ptr %t152 + br label %logic.rend7789 +logic.rend7789: + br label %logic.end7784 +logic.end7784: + %t154 = phi i1 [ false, %logic.from7782 ], [ %t153, %logic.rend7789 ] + br label %logic.rend7790 +logic.rend7790: + br label %logic.end7781 +logic.end7781: + %t155 = phi i1 [ true, %logic.from7779 ], [ %t154, %logic.rend7790 ] + %t156 = xor i1 %t155, true + br i1 %t156, label %then7791, label %endif7793 +then7791: + %t157 = load ptr, ptr %a1 + %t158 = load %S.ast.Node, ptr %a3 + %t159 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + store { ptr, i64, i64 } { ptr @.str.4928, i64 5, i64 0 }, ptr %a162 + store { ptr, i64, i64 } %t160, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + store { ptr, i64, i64 } %t164, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.4929, i64 95, i64 0 }, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t164, ptr %a168 + call void @finch_str_drop(ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a165 + %t170 = load %S.ast.Type, ptr %a108 + %t171 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t170) + store { ptr, i64, i64 } %t169, ptr %a173 + store { ptr, i64, i64 } %t171, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t169, ptr %a175 + call void @finch_str_drop(ptr %a175) + store { ptr, i64, i64 } %t171, ptr %a176 + call void @finch_str_drop(ptr %a176) + %t177 = load { ptr, i64, i64 }, ptr %a172 + call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t177) + store { ptr, i64, i64 } %t177, ptr %a178 + call void @finch_str_drop(ptr %a178) + br label %endif7793 +endif7793: + br label %each.step7765 +each.step7765: + %t179 = load i64, ptr %a100 + %t180 = add i64 %t179, 1 + store i64 %t180, ptr %a100 + br label %each.cond7763 +each.end7766: + %t181 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t182 = load %S.ast.Type, ptr %t181 + %t183 = call i1 @finch.gen.isNumber(%S.ast.Type %t182) + br label %logic.from7794 +logic.from7794: + br i1 %t183, label %logic.end7796, label %logic.rhs7795 +logic.rhs7795: + %t184 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t185 = getelementptr inbounds %S.ast.Type, ptr %t184, i32 0, i32 0 + %t186 = load { ptr, i64, i64 }, ptr %t185 + store { ptr, i64, i64 } %t186, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.4930, i64 4, i64 0 }, ptr %a188 + %t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188) + %t190 = icmp ne i32 %t189, 0 + br label %logic.rend7797 +logic.rend7797: + br label %logic.end7796 +logic.end7796: + %t191 = phi i1 [ true, %logic.from7794 ], [ %t190, %logic.rend7797 ] + br label %logic.from7798 +logic.from7798: + br i1 %t191, label %logic.end7800, label %logic.rhs7799 +logic.rhs7799: + %t192 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i32 0, i32 0 + %t194 = load { ptr, i64, i64 }, ptr %t193 + store { ptr, i64, i64 } %t194, ptr %a195 + store { ptr, i64, i64 } { ptr @.str.4931, i64 4, i64 0 }, ptr %a196 + %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) + %t198 = icmp ne i32 %t197, 0 + br label %logic.rend7801 +logic.rend7801: + br label %logic.end7800 +logic.end7800: + %t199 = phi i1 [ true, %logic.from7798 ], [ %t198, %logic.rend7801 ] + br label %logic.from7802 +logic.from7802: + br i1 %t199, label %logic.end7804, label %logic.rhs7803 +logic.rhs7803: + %t200 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 + %t202 = load { ptr, i64, i64 }, ptr %t201 + store { ptr, i64, i64 } %t202, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.4932, i64 3, i64 0 }, ptr %a204 + %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) + %t206 = icmp ne i32 %t205, 0 + br label %logic.rend7805 +logic.rend7805: + br label %logic.end7804 +logic.end7804: + %t207 = phi i1 [ true, %logic.from7802 ], [ %t206, %logic.rend7805 ] + br label %logic.from7806 +logic.from7806: + br i1 %t207, label %logic.end7808, label %logic.rhs7807 +logic.rhs7807: + %t208 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t209 = getelementptr inbounds %S.ast.Type, ptr %t208, i32 0, i32 0 + %t210 = load { ptr, i64, i64 }, ptr %t209 + store { ptr, i64, i64 } %t210, ptr %a211 + store { ptr, i64, i64 } { ptr @.str.4933, i64 4, i64 0 }, ptr %a212 + %t213 = call i32 @finch_str_eq(ptr %a211, ptr %a212) + %t214 = icmp ne i32 %t213, 0 + br label %logic.rend7809 +logic.rend7809: + br label %logic.end7808 +logic.end7808: + %t215 = phi i1 [ true, %logic.from7806 ], [ %t214, %logic.rend7809 ] + br label %logic.from7810 +logic.from7810: + br i1 %t215, label %logic.end7812, label %logic.rhs7811 +logic.rhs7811: + %t216 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t217 = getelementptr inbounds %S.ast.Type, ptr %t216, i32 0, i32 0 + %t218 = load { ptr, i64, i64 }, ptr %t217 + store { ptr, i64, i64 } %t218, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.4934, i64 6, i64 0 }, ptr %a220 + %t221 = call i32 @finch_str_eq(ptr %a219, ptr %a220) + %t222 = icmp ne i32 %t221, 0 + br label %logic.from7813 +logic.from7813: + br i1 %t222, label %logic.rhs7814, label %logic.end7815 +logic.rhs7814: + %t223 = load ptr, ptr %a1 + %t224 = icmp eq ptr %t223, null + br i1 %t224, label %panic7816, label %ok7817 +panic7816: + call void @finch_panic(ptr @.str.4935, i64 4540, ptr @.str.4936) + unreachable +ok7817: + %t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 16 + %t226 = load ptr, ptr %a1 + %t227 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t228 = getelementptr inbounds %S.ast.Type, ptr %t227, i32 0, i32 3 + %t229 = load { ptr, i64, i64 }, ptr %t228 + %t230 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t231 = getelementptr inbounds %S.ast.Type, ptr %t230, i32 0, i32 2 + %t232 = load { ptr, i64, i64 }, ptr %t231 + %t233 = call i64 @finch.gen.findStruct(ptr %t226, { ptr, i64, i64 } %t229, { ptr, i64, i64 } %t232) + %t234 = load { ptr, i64, i64 }, ptr %t225 + %t235 = extractvalue { ptr, i64, i64 } %t234, 1 + %t236 = icmp uge i64 %t233, %t235 + br i1 %t236, label %range7818, label %inrange7819 +range7818: + call void @finch_panic_index(ptr @.str.4937, i64 4540, i64 %t233, i64 %t235) + unreachable +inrange7819: + %t237 = extractvalue { ptr, i64, i64 } %t234, 0 + %t238 = getelementptr inbounds %S.gen.StructDef, ptr %t237, i64 %t233 + %t239 = getelementptr inbounds %S.gen.StructDef, ptr %t238, i32 0, i32 2 + %t240 = load i1, ptr %t239 + br label %logic.rend7820 +logic.rend7820: + br label %logic.end7815 +logic.end7815: + %t241 = phi i1 [ false, %logic.from7813 ], [ %t240, %logic.rend7820 ] + br label %logic.rend7821 +logic.rend7821: + br label %logic.end7812 +logic.end7812: + %t242 = phi i1 [ true, %logic.from7810 ], [ %t241, %logic.rend7821 ] + %t243 = xor i1 %t242, true + br i1 %t243, label %then7822, label %endif7824 +then7822: + %t244 = load ptr, ptr %a1 + %t245 = load %S.ast.Node, ptr %a3 + %t246 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t247 = load { ptr, i64, i64 }, ptr %t246 + store { ptr, i64, i64 } { ptr @.str.4938, i64 5, i64 0 }, ptr %a249 + store { ptr, i64, i64 } %t247, ptr %a250 + call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a248 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.4939, i64 38, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + %t257 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t258 = load %S.ast.Type, ptr %t257 + %t259 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t258) + store { ptr, i64, i64 } %t256, ptr %a261 + store { ptr, i64, i64 } %t259, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + store { ptr, i64, i64 } %t256, ptr %a263 + call void @finch_str_drop(ptr %a263) + store { ptr, i64, i64 } %t259, ptr %a264 + call void @finch_str_drop(ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a260 + call void @finch.gen.fail(ptr %t244, %S.ast.Node %t245, { ptr, i64, i64 } %t265) + store { ptr, i64, i64 } %t265, ptr %a266 + call void @finch_str_drop(ptr %a266) + br label %endif7824 +endif7824: + %t267 = load ptr, ptr %a1 + %t268 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t269 = load %S.ast.Type, ptr %t268 + %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + %t271 = load { ptr, i64, i64 }, ptr %t270 + %t272 = call %S.gen.Plan @finch.gen.makePlan(ptr %t267, %S.ast.Type %t269, { ptr, i64, i64 } %t271) + store %S.gen.Plan %t272, ptr %a273 + %t274 = load ptr, ptr %a1 + %t275 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t274) + store %S.gen.Saved %t275, ptr %a276 + store { ptr, i64, i64 } zeroinitializer, ptr %a277 + store i64 0, ptr %a278 + store { ptr, i64, i64 } { ptr @.str.4940, i64 0, i64 0 }, ptr %a279 + %t280 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 + %t281 = load i1, ptr %t280 + br i1 %t281, label %then7825, label %endif7827 +then7825: + %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t283 = load ptr, ptr %a1 + %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t285 = load %S.ast.Type, ptr %t284 + %t286 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t283, %S.ast.Type %t285) + store { ptr, i64, i64 } { ptr @.str.4941, i64 9, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t286, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.4942, i64 14, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load i64, ptr %t282 + %t298 = add i64 %t297, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t298, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t299 = load ptr, ptr %a277 + %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t299, i64 %t297 + store { ptr, i64, i64 } %t296, ptr %t300 + store i64 %t298, ptr %t282 + %t301 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.4943, i64 3, i64 0 }, ptr %a279 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + store i64 1, ptr %a278 + br label %endif7827 +endif7827: + store { ptr, i64, i64 } zeroinitializer, ptr %a303 + %t304 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t304, i32 0, i32 1 + %t306 = load i64, ptr %t305 + store i64 0, ptr %a307 + br label %for.cond7828 +for.cond7828: + %t308 = load i64, ptr %a307 + %t309 = icmp slt i64 %t308, %t306 + br i1 %t309, label %for.body7829, label %for.end7831 +for.body7829: + %t310 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + %t311 = load i64, ptr %a307 + %t312 = load { ptr, i64, i64 }, ptr %t310 + %t313 = extractvalue { ptr, i64, i64 } %t312, 1 + %t314 = icmp uge i64 %t311, %t313 + br i1 %t314, label %range7832, label %inrange7833 +range7832: + call void @finch_panic_index(ptr @.str.4944, i64 4555, i64 %t311, i64 %t313) + unreachable +inrange7833: + %t315 = extractvalue { ptr, i64, i64 } %t312, 0 + %t316 = getelementptr inbounds %S.ast.Type, ptr %t315, i64 %t311 + %t317 = load %S.ast.Type, ptr %t316 + store %S.ast.Type %t317, ptr %a318 + call void @finch.copy.S_ast_Type(ptr %a319, ptr %a318) + %t320 = load %S.ast.Type, ptr %a319 + store %S.ast.Type %t320, ptr %a321 + %t322 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 1 + %t323 = load i64, ptr %a307 + %t324 = load { ptr, i64, i64 }, ptr %t322 + %t325 = extractvalue { ptr, i64, i64 } %t324, 1 + %t326 = icmp uge i64 %t323, %t325 + br i1 %t326, label %range7834, label %inrange7835 +range7834: + call void @finch_panic_index(ptr @.str.4945, i64 4556, i64 %t323, i64 %t325) + unreachable +inrange7835: + %t327 = extractvalue { ptr, i64, i64 } %t324, 0 + %t328 = getelementptr inbounds %S.gen.Abi, ptr %t327, i64 %t323 + %t329 = load %S.gen.Abi, ptr %t328 + store %S.gen.Abi %t329, ptr %a330 + call void @finch.copy.S_gen_Abi(ptr %a331, ptr %a330) + %t332 = load %S.gen.Abi, ptr %a331 + store %S.gen.Abi %t332, ptr %a333 + %t334 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t335, ptr %a336 + store { ptr, i64, i64 } { ptr @.str.4946, i64 6, i64 0 }, ptr %a337 + %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) + %t339 = icmp ne i32 %t338, 0 + br i1 %t339, label %then7836, label %else7837 +then7836: + %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t341 = load ptr, ptr %a1 + %t342 = load %S.ast.Type, ptr %a321 + %t343 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t341, %S.ast.Type %t342) + store { ptr, i64, i64 } { ptr @.str.4947, i64 10, i64 0 }, ptr %a345 + store { ptr, i64, i64 } %t343, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t343, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = load { ptr, i64, i64 }, ptr %a344 + store { ptr, i64, i64 } %t348, ptr %a350 + store { ptr, i64, i64 } { ptr @.str.4948, i64 8, i64 0 }, ptr %a351 + call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) + store { ptr, i64, i64 } %t348, ptr %a352 + call void @finch_str_drop(ptr %a352) + %t353 = load { ptr, i64, i64 }, ptr %a349 + %t354 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 3 + %t355 = load i64, ptr %t354 + call void @finch_str_from_int(ptr %a356, i64 %t355) + %t357 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } %t353, ptr %a359 + store { ptr, i64, i64 } %t357, ptr %a360 + call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) + store { ptr, i64, i64 } %t353, ptr %a361 + call void @finch_str_drop(ptr %a361) + store { ptr, i64, i64 } %t357, ptr %a362 + call void @finch_str_drop(ptr %a362) + %t363 = load { ptr, i64, i64 }, ptr %a358 + store { ptr, i64, i64 } %t363, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.4949, i64 3, i64 0 }, ptr %a366 + call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366) + store { ptr, i64, i64 } %t363, ptr %a367 + call void @finch_str_drop(ptr %a367) + %t368 = load { ptr, i64, i64 }, ptr %a364 + %t369 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a370, i64 %t369) + %t371 = load { ptr, i64, i64 }, ptr %a370 + store { ptr, i64, i64 } %t368, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t368, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t371, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a372 + %t378 = load i64, ptr %t340 + %t379 = add i64 %t378, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t379, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t380 = load ptr, ptr %a277 + %t381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t380, i64 %t378 + store { ptr, i64, i64 } %t377, ptr %t381 + store i64 %t379, ptr %t340 + %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t383 = load ptr, ptr %a1 + %t384 = load %S.ast.Type, ptr %a321 + %t385 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t383, %S.ast.Type %t384) + store { ptr, i64, i64 } %t385, ptr %a387 + store { ptr, i64, i64 } { ptr @.str.4950, i64 1, i64 0 }, ptr %a388 + call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) + store { ptr, i64, i64 } %t385, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a386 + %t391 = load ptr, ptr %a1 + %t392 = load ptr, ptr %a1 + %t393 = load %S.ast.Type, ptr %a321 + %t394 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t392, %S.ast.Type %t393) + %t395 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a396, i64 %t395) + %t397 = load { ptr, i64, i64 }, ptr %a396 + store { ptr, i64, i64 } { ptr @.str.4951, i64 2, i64 0 }, ptr %a399 + store { ptr, i64, i64 } %t397, ptr %a400 + call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) + store { ptr, i64, i64 } %t397, ptr %a401 + call void @finch_str_drop(ptr %a401) + %t402 = load { ptr, i64, i64 }, ptr %a398 + %t403 = call { ptr, i64, i64 } @finch.gen.load(ptr %t391, { ptr, i64, i64 } %t394, { ptr, i64, i64 } %t402) + store { ptr, i64, i64 } %t394, ptr %a404 + call void @finch_str_drop(ptr %a404) + store { ptr, i64, i64 } %t402, ptr %a405 + call void @finch_str_drop(ptr %a405) + store { ptr, i64, i64 } %t390, ptr %a407 + store { ptr, i64, i64 } %t403, ptr %a408 + call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408) + store { ptr, i64, i64 } %t390, ptr %a409 + call void @finch_str_drop(ptr %a409) + store { ptr, i64, i64 } %t403, ptr %a410 + call void @finch_str_drop(ptr %a410) + %t411 = load { ptr, i64, i64 }, ptr %a406 + %t412 = load i64, ptr %t382 + %t413 = add i64 %t412, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t413, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t414 = load ptr, ptr %a303 + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t412 + store { ptr, i64, i64 } %t411, ptr %t415 + store i64 %t413, ptr %t382 + %t416 = load i64, ptr %a278 + %t417 = add i64 %t416, 1 + store i64 %t417, ptr %a278 + br label %endif7838 +else7837: + %t418 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 + %t419 = load { ptr, i64, i64 }, ptr %t418 + store { ptr, i64, i64 } %t419, ptr %a420 + store { ptr, i64, i64 } { ptr @.str.4952, i64 8, i64 0 }, ptr %a421 + %t422 = call i32 @finch_str_eq(ptr %a420, ptr %a421) + %t423 = icmp ne i32 %t422, 0 + br i1 %t423, label %then7839, label %else7840 +then7839: + %t424 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t425 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a426, i64 %t425) + %t427 = load { ptr, i64, i64 }, ptr %a426 + store { ptr, i64, i64 } { ptr @.str.4953, i64 6, i64 0 }, ptr %a429 + store { ptr, i64, i64 } %t427, ptr %a430 + call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) + store { ptr, i64, i64 } %t427, ptr %a431 + call void @finch_str_drop(ptr %a431) + %t432 = load { ptr, i64, i64 }, ptr %a428 + %t433 = load i64, ptr %t424 + %t434 = add i64 %t433, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t434, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t435 = load ptr, ptr %a277 + %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %t435, i64 %t433 + store { ptr, i64, i64 } %t432, ptr %t436 + store i64 %t434, ptr %t424 + %t437 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t438 = load ptr, ptr %a1 + %t439 = load %S.ast.Type, ptr %a321 + %t440 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t438, %S.ast.Type %t439) + store { ptr, i64, i64 } %t440, ptr %a442 + store { ptr, i64, i64 } { ptr @.str.4954, i64 1, i64 0 }, ptr %a443 + call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443) + store { ptr, i64, i64 } %t440, ptr %a444 + call void @finch_str_drop(ptr %a444) + %t445 = load { ptr, i64, i64 }, ptr %a441 + %t446 = load ptr, ptr %a1 + %t447 = load ptr, ptr %a1 + %t448 = load %S.ast.Type, ptr %a321 + %t449 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t447, %S.ast.Type %t448) + %t450 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a451, i64 %t450) + %t452 = load { ptr, i64, i64 }, ptr %a451 + store { ptr, i64, i64 } { ptr @.str.4955, i64 2, i64 0 }, ptr %a454 + store { ptr, i64, i64 } %t452, ptr %a455 + call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) + store { ptr, i64, i64 } %t452, ptr %a456 + call void @finch_str_drop(ptr %a456) + %t457 = load { ptr, i64, i64 }, ptr %a453 + %t458 = call { ptr, i64, i64 } @finch.gen.load(ptr %t446, { ptr, i64, i64 } %t449, { ptr, i64, i64 } %t457) + store { ptr, i64, i64 } %t449, ptr %a459 + call void @finch_str_drop(ptr %a459) + store { ptr, i64, i64 } %t457, ptr %a460 + call void @finch_str_drop(ptr %a460) + store { ptr, i64, i64 } %t445, ptr %a462 + store { ptr, i64, i64 } %t458, ptr %a463 + call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) + store { ptr, i64, i64 } %t445, ptr %a464 + call void @finch_str_drop(ptr %a464) + store { ptr, i64, i64 } %t458, ptr %a465 + call void @finch_str_drop(ptr %a465) + %t466 = load { ptr, i64, i64 }, ptr %a461 + %t467 = load i64, ptr %t437 + %t468 = add i64 %t467, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t468, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t469 = load ptr, ptr %a303 + %t470 = getelementptr inbounds { ptr, i64, i64 }, ptr %t469, i64 %t467 + store { ptr, i64, i64 } %t466, ptr %t470 + store i64 %t468, ptr %t437 + %t471 = load i64, ptr %a278 + %t472 = add i64 %t471, 1 + store i64 %t472, ptr %a278 + br label %endif7841 +else7840: + %t473 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 + %t474 = load { ptr, i64, i64 }, ptr %t473 + store { ptr, i64, i64 } %t474, ptr %a475 + store { ptr, i64, i64 } { ptr @.str.4956, i64 6, i64 0 }, ptr %a476 + %t477 = call i32 @finch_str_eq(ptr %a475, ptr %a476) + %t478 = icmp ne i32 %t477, 0 + br i1 %t478, label %then7842, label %else7843 +then7842: + %t479 = load ptr, ptr %a1 + %t480 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t479, { ptr, i64, i64 } { ptr @.str.4957, i64 9, i64 0 }) + store { ptr, i64, i64 } %t480, ptr %a481 + %t482 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 + %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 + %t484 = load i64, ptr %t483 + store i64 0, ptr %a485 + br label %for.cond7845 +for.cond7845: + %t486 = load i64, ptr %a485 + %t487 = icmp slt i64 %t486, %t484 + br i1 %t487, label %for.body7846, label %for.end7848 +for.body7846: + %t488 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t489 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 + %t490 = load i64, ptr %a485 + %t491 = load { ptr, i64, i64 }, ptr %t489 + %t492 = extractvalue { ptr, i64, i64 } %t491, 1 + %t493 = icmp uge i64 %t490, %t492 + br i1 %t493, label %range7849, label %inrange7850 +range7849: + call void @finch_panic_index(ptr @.str.4958, i64 4568, i64 %t490, i64 %t492) + unreachable +inrange7850: + %t494 = extractvalue { ptr, i64, i64 } %t491, 0 + %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i64 %t490 + %t496 = load { ptr, i64, i64 }, ptr %t495 + store { ptr, i64, i64 } %t496, ptr %a498 + store { ptr, i64, i64 } { ptr @.str.4959, i64 3, i64 0 }, ptr %a499 + call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499) + %t500 = load { ptr, i64, i64 }, ptr %a497 + %t501 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a502, i64 %t501) + %t503 = load { ptr, i64, i64 }, ptr %a502 + store { ptr, i64, i64 } %t500, ptr %a505 + store { ptr, i64, i64 } %t503, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t500, ptr %a507 + call void @finch_str_drop(ptr %a507) + store { ptr, i64, i64 } %t503, ptr %a508 + call void @finch_str_drop(ptr %a508) + %t509 = load { ptr, i64, i64 }, ptr %a504 + %t510 = load i64, ptr %t488 + %t511 = add i64 %t510, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t511, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t512 = load ptr, ptr %a277 + %t513 = getelementptr inbounds { ptr, i64, i64 }, ptr %t512, i64 %t510 + store { ptr, i64, i64 } %t509, ptr %t513 + store i64 %t511, ptr %t488 + %t514 = load ptr, ptr %a1 + %t515 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 + %t516 = load i64, ptr %a485 + %t517 = load { ptr, i64, i64 }, ptr %t515 + %t518 = extractvalue { ptr, i64, i64 } %t517, 1 + %t519 = icmp uge i64 %t516, %t518 + br i1 %t519, label %range7851, label %inrange7852 +range7851: + call void @finch_panic_index(ptr @.str.4960, i64 4569, i64 %t516, i64 %t518) + unreachable +inrange7852: + %t520 = extractvalue { ptr, i64, i64 } %t517, 0 + %t521 = getelementptr inbounds { ptr, i64, i64 }, ptr %t520, i64 %t516 + %t522 = load { ptr, i64, i64 }, ptr %t521 + %t523 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a524, i64 %t523) + %t525 = load { ptr, i64, i64 }, ptr %a524 + store { ptr, i64, i64 } { ptr @.str.4961, i64 2, i64 0 }, ptr %a527 + store { ptr, i64, i64 } %t525, ptr %a528 + call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) + store { ptr, i64, i64 } %t525, ptr %a529 + call void @finch_str_drop(ptr %a529) + %t530 = load { ptr, i64, i64 }, ptr %a526 + %t531 = load ptr, ptr %a1 + %t532 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } { ptr @.str.4962, i64 31, i64 0 }, ptr %a534 + store { ptr, i64, i64 } %t532, ptr %a535 + call void @finch_str_concat(ptr %a533, ptr %a534, ptr %a535) + %t536 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } %t536, ptr %a538 + store { ptr, i64, i64 } { ptr @.str.4963, i64 6, i64 0 }, ptr %a539 + call void @finch_str_concat(ptr %a537, ptr %a538, ptr %a539) + store { ptr, i64, i64 } %t536, ptr %a540 + call void @finch_str_drop(ptr %a540) + %t541 = load { ptr, i64, i64 }, ptr %a537 + %t542 = load i64, ptr %a485 + %t543 = mul i64 8, %t542 + call void @finch_str_from_int(ptr %a544, i64 %t543) + %t545 = load { ptr, i64, i64 }, ptr %a544 + store { ptr, i64, i64 } %t541, ptr %a547 + store { ptr, i64, i64 } %t545, ptr %a548 + call void @finch_str_concat(ptr %a546, ptr %a547, ptr %a548) + store { ptr, i64, i64 } %t541, ptr %a549 + call void @finch_str_drop(ptr %a549) + store { ptr, i64, i64 } %t545, ptr %a550 + call void @finch_str_drop(ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a546 + %t552 = call { ptr, i64, i64 } @finch.gen.op(ptr %t531, { ptr, i64, i64 } %t551) + store { ptr, i64, i64 } %t551, ptr %a553 + call void @finch_str_drop(ptr %a553) + call void @finch.gen.store(ptr %t514, { ptr, i64, i64 } %t522, { ptr, i64, i64 } %t530, { ptr, i64, i64 } %t552) + store { ptr, i64, i64 } %t530, ptr %a554 + call void @finch_str_drop(ptr %a554) + store { ptr, i64, i64 } %t552, ptr %a555 + call void @finch_str_drop(ptr %a555) + %t556 = load i64, ptr %a278 + %t557 = add i64 %t556, 1 + store i64 %t557, ptr %a278 + br label %for.step7847 +for.step7847: + %t558 = load i64, ptr %a485 + %t559 = add i64 %t558, 1 + store i64 %t559, ptr %a485 + br label %for.cond7845 +for.end7848: + %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t561 = load ptr, ptr %a1 + %t562 = load %S.ast.Type, ptr %a321 + %t563 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t561, %S.ast.Type %t562) + store { ptr, i64, i64 } %t563, ptr %a565 + store { ptr, i64, i64 } { ptr @.str.4964, i64 1, i64 0 }, ptr %a566 + call void @finch_str_concat(ptr %a564, ptr %a565, ptr %a566) + store { ptr, i64, i64 } %t563, ptr %a567 + call void @finch_str_drop(ptr %a567) + %t568 = load { ptr, i64, i64 }, ptr %a564 + %t569 = load ptr, ptr %a1 + %t570 = load ptr, ptr %a1 + %t571 = load %S.ast.Type, ptr %a321 + %t572 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t570, %S.ast.Type %t571) + %t573 = load { ptr, i64, i64 }, ptr %a481 + %t574 = call { ptr, i64, i64 } @finch.gen.load(ptr %t569, { ptr, i64, i64 } %t572, { ptr, i64, i64 } %t573) + store { ptr, i64, i64 } %t572, ptr %a575 + call void @finch_str_drop(ptr %a575) + store { ptr, i64, i64 } %t568, ptr %a577 + store { ptr, i64, i64 } %t574, ptr %a578 + call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578) + store { ptr, i64, i64 } %t568, ptr %a579 + call void @finch_str_drop(ptr %a579) + store { ptr, i64, i64 } %t574, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = load { ptr, i64, i64 }, ptr %a576 + %t582 = load i64, ptr %t560 + %t583 = add i64 %t582, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t583, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t584 = load ptr, ptr %a303 + %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i64 %t582 + store { ptr, i64, i64 } %t581, ptr %t585 + store i64 %t583, ptr %t560 + call void @finch_str_drop(ptr %a481) + br label %endif7844 +else7843: + %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t587 = load ptr, ptr %a1 + %t588 = load %S.ast.Type, ptr %a321 + %t589 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t587, %S.ast.Type %t588) + %t590 = load ptr, ptr %a1 + %t591 = load %S.ast.Type, ptr %a321 + %t592 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t590, %S.ast.Type %t591) + store { ptr, i64, i64 } %t589, ptr %a594 + store { ptr, i64, i64 } %t592, ptr %a595 + call void @finch_str_concat(ptr %a593, ptr %a594, ptr %a595) + store { ptr, i64, i64 } %t589, ptr %a596 + call void @finch_str_drop(ptr %a596) + store { ptr, i64, i64 } %t592, ptr %a597 + call void @finch_str_drop(ptr %a597) + %t598 = load { ptr, i64, i64 }, ptr %a593 + store { ptr, i64, i64 } %t598, ptr %a600 + store { ptr, i64, i64 } { ptr @.str.4965, i64 3, i64 0 }, ptr %a601 + call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601) + store { ptr, i64, i64 } %t598, ptr %a602 + call void @finch_str_drop(ptr %a602) + %t603 = load { ptr, i64, i64 }, ptr %a599 + %t604 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a605, i64 %t604) + %t606 = load { ptr, i64, i64 }, ptr %a605 + store { ptr, i64, i64 } %t603, ptr %a608 + store { ptr, i64, i64 } %t606, ptr %a609 + call void @finch_str_concat(ptr %a607, ptr %a608, ptr %a609) + store { ptr, i64, i64 } %t603, ptr %a610 + call void @finch_str_drop(ptr %a610) + store { ptr, i64, i64 } %t606, ptr %a611 + call void @finch_str_drop(ptr %a611) + %t612 = load { ptr, i64, i64 }, ptr %a607 + %t613 = load i64, ptr %t586 + %t614 = add i64 %t613, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t614, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t615 = load ptr, ptr %a277 + %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %t615, i64 %t613 + store { ptr, i64, i64 } %t612, ptr %t616 + store i64 %t614, ptr %t586 + %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t618 = load ptr, ptr %a1 + %t619 = load %S.ast.Type, ptr %a321 + %t620 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t618, %S.ast.Type %t619) + store { ptr, i64, i64 } %t620, ptr %a622 + store { ptr, i64, i64 } { ptr @.str.4966, i64 3, i64 0 }, ptr %a623 + call void @finch_str_concat(ptr %a621, ptr %a622, ptr %a623) + store { ptr, i64, i64 } %t620, ptr %a624 + call void @finch_str_drop(ptr %a624) + %t625 = load { ptr, i64, i64 }, ptr %a621 + %t626 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a627, i64 %t626) + %t628 = load { ptr, i64, i64 }, ptr %a627 + store { ptr, i64, i64 } %t625, ptr %a630 + store { ptr, i64, i64 } %t628, ptr %a631 + call void @finch_str_concat(ptr %a629, ptr %a630, ptr %a631) + store { ptr, i64, i64 } %t625, ptr %a632 + call void @finch_str_drop(ptr %a632) + store { ptr, i64, i64 } %t628, ptr %a633 + call void @finch_str_drop(ptr %a633) + %t634 = load { ptr, i64, i64 }, ptr %a629 + %t635 = load i64, ptr %t617 + %t636 = add i64 %t635, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t636, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t637 = load ptr, ptr %a303 + %t638 = getelementptr inbounds { ptr, i64, i64 }, ptr %t637, i64 %t635 + store { ptr, i64, i64 } %t634, ptr %t638 + store i64 %t636, ptr %t617 + %t639 = load i64, ptr %a278 + %t640 = add i64 %t639, 1 + store i64 %t640, ptr %a278 + br label %endif7844 +endif7844: + br label %endif7841 +endif7841: + br label %endif7838 +endif7838: + call void @finch.drop.S_gen_Abi(ptr %a333) + call void @finch.drop.S_ast_Type(ptr %a321) + br label %for.step7830 +for.step7830: + %t641 = load i64, ptr %a307 + %t642 = add i64 %t641, 1 + store i64 %t642, ptr %a307 + br label %for.cond7828 +for.end7831: + %t643 = load ptr, ptr %a1 + %t644 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t645 = load %S.ast.Type, ptr %t644 + %t646 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t643, %S.ast.Type %t645) + store { ptr, i64, i64 } { ptr @.str.4967, i64 5, i64 0 }, ptr %a648 + store { ptr, i64, i64 } %t646, ptr %a649 + call void @finch_str_concat(ptr %a647, ptr %a648, ptr %a649) + store { ptr, i64, i64 } %t646, ptr %a650 + call void @finch_str_drop(ptr %a650) + %t651 = load { ptr, i64, i64 }, ptr %a647 + store { ptr, i64, i64 } %t651, ptr %a653 + store { ptr, i64, i64 } { ptr @.str.4968, i64 1, i64 0 }, ptr %a654 + call void @finch_str_concat(ptr %a652, ptr %a653, ptr %a654) + store { ptr, i64, i64 } %t651, ptr %a655 + call void @finch_str_drop(ptr %a655) + %t656 = load { ptr, i64, i64 }, ptr %a652 + %t657 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 11 + %t658 = load { ptr, i64, i64 }, ptr %t657 + store { ptr, i64, i64 } %t656, ptr %a660 + store { ptr, i64, i64 } %t658, ptr %a661 + call void @finch_str_concat(ptr %a659, ptr %a660, ptr %a661) + store { ptr, i64, i64 } %t656, ptr %a662 + call void @finch_str_drop(ptr %a662) + %t663 = load { ptr, i64, i64 }, ptr %a659 + store { ptr, i64, i64 } %t663, ptr %a665 + store { ptr, i64, i64 } { ptr @.str.4969, i64 1, i64 0 }, ptr %a666 + call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) + store { ptr, i64, i64 } %t663, ptr %a667 + call void @finch_str_drop(ptr %a667) + %t668 = load { ptr, i64, i64 }, ptr %a664 + %t669 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4970, i64 2, i64 0 }, ptr %a670 + call void @finch_str_join(ptr %a671, ptr %a303, ptr %a670) + %t672 = load { ptr, i64, i64 }, ptr %a671 + store { ptr, i64, i64 } %t668, ptr %a674 + store { ptr, i64, i64 } %t672, ptr %a675 + call void @finch_str_concat(ptr %a673, ptr %a674, ptr %a675) + store { ptr, i64, i64 } %t668, ptr %a676 + call void @finch_str_drop(ptr %a676) + store { ptr, i64, i64 } %t672, ptr %a677 + call void @finch_str_drop(ptr %a677) + %t678 = load { ptr, i64, i64 }, ptr %a673 + store { ptr, i64, i64 } %t678, ptr %a680 + store { ptr, i64, i64 } { ptr @.str.4971, i64 1, i64 0 }, ptr %a681 + call void @finch_str_concat(ptr %a679, ptr %a680, ptr %a681) + store { ptr, i64, i64 } %t678, ptr %a682 + call void @finch_str_drop(ptr %a682) + %t683 = load { ptr, i64, i64 }, ptr %a679 + store { ptr, i64, i64 } %t683, ptr %a684 + store { ptr, i64, i64 } { ptr @.str.4972, i64 0, i64 0 }, ptr %a685 + %t686 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t687 = getelementptr inbounds %S.ast.Type, ptr %t686, i32 0, i32 0 + %t688 = load { ptr, i64, i64 }, ptr %t687 + store { ptr, i64, i64 } %t688, ptr %a689 + store { ptr, i64, i64 } { ptr @.str.4973, i64 4, i64 0 }, ptr %a690 + %t691 = call i32 @finch_str_eq(ptr %a689, ptr %a690) + %t692 = icmp ne i32 %t691, 0 + br i1 %t692, label %then7853, label %else7854 +then7853: + %t693 = load ptr, ptr %a1 + %t694 = load { ptr, i64, i64 }, ptr %a684 + call void @finch.gen.emit(ptr %t693, { ptr, i64, i64 } %t694) + %t695 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t695, { ptr, i64, i64 } { ptr @.str.4974, i64 8, i64 0 }) + br label %endif7855 +else7854: + %t696 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 + %t697 = load i1, ptr %t696 + br i1 %t697, label %then7856, label %else7857 +then7856: + %t698 = load ptr, ptr %a1 + %t699 = load ptr, ptr %a1 + %t700 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t701 = load %S.ast.Type, ptr %t700 + %t702 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t699, %S.ast.Type %t701) + %t703 = load ptr, ptr %a1 + %t704 = load { ptr, i64, i64 }, ptr %a684 + %t705 = call { ptr, i64, i64 } @finch.gen.op(ptr %t703, { ptr, i64, i64 } %t704) + %t706 = load { ptr, i64, i64 }, ptr %a279 + call void @finch.gen.store(ptr %t698, { ptr, i64, i64 } %t702, { ptr, i64, i64 } %t705, { ptr, i64, i64 } %t706) + store { ptr, i64, i64 } %t702, ptr %a707 + call void @finch_str_drop(ptr %a707) + store { ptr, i64, i64 } %t705, ptr %a708 + call void @finch_str_drop(ptr %a708) + %t709 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t709, { ptr, i64, i64 } { ptr @.str.4975, i64 8, i64 0 }) + br label %endif7858 +else7857: + %t710 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 + %t711 = getelementptr inbounds %S.gen.Abi, ptr %t710, i32 0, i32 0 + %t712 = load { ptr, i64, i64 }, ptr %t711 + store { ptr, i64, i64 } %t712, ptr %a713 + store { ptr, i64, i64 } { ptr @.str.4976, i64 6, i64 0 }, ptr %a714 + %t715 = call i32 @finch_str_eq(ptr %a713, ptr %a714) + %t716 = icmp ne i32 %t715, 0 + br i1 %t716, label %then7859, label %else7860 +then7859: + %t717 = load ptr, ptr %a1 + %t718 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t717, { ptr, i64, i64 } { ptr @.str.4977, i64 9, i64 0 }) + store { ptr, i64, i64 } %t718, ptr %a719 + %t720 = load ptr, ptr %a1 + %t721 = load ptr, ptr %a1 + %t722 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t723 = load %S.ast.Type, ptr %t722 + %t724 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t721, %S.ast.Type %t723) + %t725 = load ptr, ptr %a1 + %t726 = load { ptr, i64, i64 }, ptr %a684 + %t727 = call { ptr, i64, i64 } @finch.gen.op(ptr %t725, { ptr, i64, i64 } %t726) + %t728 = load { ptr, i64, i64 }, ptr %a719 + call void @finch.gen.store(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t727, { ptr, i64, i64 } %t728) + store { ptr, i64, i64 } %t724, ptr %a729 + call void @finch_str_drop(ptr %a729) + store { ptr, i64, i64 } %t727, ptr %a730 + call void @finch_str_drop(ptr %a730) + %t731 = load ptr, ptr %a1 + %t732 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 + %t733 = getelementptr inbounds %S.gen.Abi, ptr %t732, i32 0, i32 2 + %t734 = load { ptr, i64, i64 }, ptr %t733 + store { ptr, i64, i64 } { ptr @.str.4978, i64 4, i64 0 }, ptr %a736 + store { ptr, i64, i64 } %t734, ptr %a737 + call void @finch_str_concat(ptr %a735, ptr %a736, ptr %a737) + %t738 = load { ptr, i64, i64 }, ptr %a735 + store { ptr, i64, i64 } %t738, ptr %a740 + store { ptr, i64, i64 } { ptr @.str.4979, i64 1, i64 0 }, ptr %a741 + call void @finch_str_concat(ptr %a739, ptr %a740, ptr %a741) + store { ptr, i64, i64 } %t738, ptr %a742 + call void @finch_str_drop(ptr %a742) + %t743 = load { ptr, i64, i64 }, ptr %a739 + %t744 = load ptr, ptr %a1 + %t745 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 + %t746 = getelementptr inbounds %S.gen.Abi, ptr %t745, i32 0, i32 2 + %t747 = load { ptr, i64, i64 }, ptr %t746 + %t748 = load { ptr, i64, i64 }, ptr %a719 + %t749 = call { ptr, i64, i64 } @finch.gen.load(ptr %t744, { ptr, i64, i64 } %t747, { ptr, i64, i64 } %t748) + store { ptr, i64, i64 } %t743, ptr %a751 + store { ptr, i64, i64 } %t749, ptr %a752 + call void @finch_str_concat(ptr %a750, ptr %a751, ptr %a752) + store { ptr, i64, i64 } %t743, ptr %a753 + call void @finch_str_drop(ptr %a753) + store { ptr, i64, i64 } %t749, ptr %a754 + call void @finch_str_drop(ptr %a754) + %t755 = load { ptr, i64, i64 }, ptr %a750 + call void @finch.gen.emit(ptr %t731, { ptr, i64, i64 } %t755) + store { ptr, i64, i64 } %t755, ptr %a756 + call void @finch_str_drop(ptr %a756) + call void @finch_str_drop(ptr %a719) + br label %endif7861 +else7860: + %t757 = load ptr, ptr %a1 + %t758 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t759 = load %S.ast.Type, ptr %t758 + %t760 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t757, %S.ast.Type %t759) + %t761 = load { ptr, i64, i64 }, ptr %a685 + store { ptr, i64, i64 } %t760, ptr %a685 + store { ptr, i64, i64 } %t761, ptr %a762 + call void @finch_str_drop(ptr %a762) + %t763 = load ptr, ptr %a1 + %t764 = load ptr, ptr %a1 + %t765 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t766 = load %S.ast.Type, ptr %t765 + %t767 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t764, %S.ast.Type %t766) + store { ptr, i64, i64 } { ptr @.str.4980, i64 4, i64 0 }, ptr %a769 + store { ptr, i64, i64 } %t767, ptr %a770 + call void @finch_str_concat(ptr %a768, ptr %a769, ptr %a770) + store { ptr, i64, i64 } %t767, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a768 + store { ptr, i64, i64 } %t772, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.4981, i64 1, i64 0 }, ptr %a775 + call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) + store { ptr, i64, i64 } %t772, ptr %a776 + call void @finch_str_drop(ptr %a776) + %t777 = load { ptr, i64, i64 }, ptr %a773 + %t778 = load ptr, ptr %a1 + %t779 = load { ptr, i64, i64 }, ptr %a684 + %t780 = call { ptr, i64, i64 } @finch.gen.op(ptr %t778, { ptr, i64, i64 } %t779) + store { ptr, i64, i64 } %t777, ptr %a782 + store { ptr, i64, i64 } %t780, ptr %a783 + call void @finch_str_concat(ptr %a781, ptr %a782, ptr %a783) + store { ptr, i64, i64 } %t777, ptr %a784 + call void @finch_str_drop(ptr %a784) + store { ptr, i64, i64 } %t780, ptr %a785 + call void @finch_str_drop(ptr %a785) + %t786 = load { ptr, i64, i64 }, ptr %a781 + call void @finch.gen.emit(ptr %t763, { ptr, i64, i64 } %t786) + store { ptr, i64, i64 } %t786, ptr %a787 + call void @finch_str_drop(ptr %a787) + br label %endif7861 +endif7861: + br label %endif7858 +endif7858: + br label %endif7855 +endif7855: + %t788 = load ptr, ptr %a1 + %t789 = load %S.gen.Saved, ptr %a276 + %t790 = load { ptr, i64, i64 }, ptr %a685 + store { ptr, i64, i64 } { ptr @.str.4982, i64 15, i64 0 }, ptr %a792 + store { ptr, i64, i64 } %t790, ptr %a793 + call void @finch_str_concat(ptr %a791, ptr %a792, ptr %a793) + %t794 = load { ptr, i64, i64 }, ptr %a791 + store { ptr, i64, i64 } %t794, ptr %a796 + store { ptr, i64, i64 } { ptr @.str.4983, i64 1, i64 0 }, ptr %a797 + call void @finch_str_concat(ptr %a795, ptr %a796, ptr %a797) + store { ptr, i64, i64 } %t794, ptr %a798 + call void @finch_str_drop(ptr %a798) + %t799 = load { ptr, i64, i64 }, ptr %a795 + %t800 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 2 + %t801 = load { ptr, i64, i64 }, ptr %t800 + store { ptr, i64, i64 } %t799, ptr %a803 + store { ptr, i64, i64 } %t801, ptr %a804 + call void @finch_str_concat(ptr %a802, ptr %a803, ptr %a804) + store { ptr, i64, i64 } %t799, ptr %a805 + call void @finch_str_drop(ptr %a805) + %t806 = load { ptr, i64, i64 }, ptr %a802 + store { ptr, i64, i64 } %t806, ptr %a808 + store { ptr, i64, i64 } { ptr @.str.4984, i64 1, i64 0 }, ptr %a809 + call void @finch_str_concat(ptr %a807, ptr %a808, ptr %a809) + store { ptr, i64, i64 } %t806, ptr %a810 + call void @finch_str_drop(ptr %a810) + %t811 = load { ptr, i64, i64 }, ptr %a807 + %t812 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } %t811, ptr %a814 + store { ptr, i64, i64 } %t812, ptr %a815 + call void @finch_str_concat(ptr %a813, ptr %a814, ptr %a815) + store { ptr, i64, i64 } %t811, ptr %a816 + call void @finch_str_drop(ptr %a816) + %t817 = load { ptr, i64, i64 }, ptr %a813 + store { ptr, i64, i64 } %t817, ptr %a819 + store { ptr, i64, i64 } { ptr @.str.4985, i64 1, i64 0 }, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t817, ptr %a821 + call void @finch_str_drop(ptr %a821) + %t822 = load { ptr, i64, i64 }, ptr %a818 + %t823 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4986, i64 2, i64 0 }, ptr %a824 + call void @finch_str_join(ptr %a825, ptr %a277, ptr %a824) + %t826 = load { ptr, i64, i64 }, ptr %a825 + store { ptr, i64, i64 } %t822, ptr %a828 + store { ptr, i64, i64 } %t826, ptr %a829 + call void @finch_str_concat(ptr %a827, ptr %a828, ptr %a829) + store { ptr, i64, i64 } %t822, ptr %a830 + call void @finch_str_drop(ptr %a830) + store { ptr, i64, i64 } %t826, ptr %a831 + call void @finch_str_drop(ptr %a831) + %t832 = load { ptr, i64, i64 }, ptr %a827 + store { ptr, i64, i64 } %t832, ptr %a834 + store { ptr, i64, i64 } { ptr @.str.4987, i64 1, i64 0 }, ptr %a835 + call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) + store { ptr, i64, i64 } %t832, ptr %a836 + call void @finch_str_drop(ptr %a836) + %t837 = load { ptr, i64, i64 }, ptr %a833 + call void @finch.gen.endHelper(ptr %t788, %S.gen.Saved %t789, { ptr, i64, i64 } %t837) + store { ptr, i64, i64 } %t837, ptr %a838 + call void @finch_str_drop(ptr %a838) + %t839 = load { ptr, i64, i64 }, ptr %a38 + call void @finch_str_drop(ptr %a685) + call void @finch_str_drop(ptr %a684) + call void @finch.drop.arr_str(ptr %a303) + call void @finch_str_drop(ptr %a279) + call void @finch.drop.arr_str(ptr %a277) + call void @finch.drop.S_gen_Saved(ptr %a276) + call void @finch.drop.S_gen_Plan(ptr %a273) + call void @finch.drop.S_gen_FnSig(ptr %a17) + ret { ptr, i64, i64 } %t839 +} + +define internal %S.gen.Val @finch.gen.enumFrom(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a14 = alloca %S.gen.EnumDef, align 16 + %a15 = alloca %S.gen.EnumDef, align 16 + %a17 = alloca %S.gen.EnumDef, align 16 + %a31 = alloca %S.gen.Val, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca %S.ast.Type, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca i64, align 16 + %a85 = alloca i64, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.ast.Type, align 16 + %a135 = alloca %S.ast.Type, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca i64, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca %S.ast.Type, align 16 + %a244 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic7865, label %ok7866 +panic7865: + call void @finch_panic(ptr @.str.4988, i64 4601, ptr @.str.4989) + unreachable +ok7866: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 + %t7 = load i64, ptr %a3 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range7867, label %inrange7868 +range7867: + call void @finch_panic_index(ptr @.str.4990, i64 4601, i64 %t7, i64 %t9) + unreachable +inrange7868: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 + %t13 = load %S.gen.EnumDef, ptr %t12 + store %S.gen.EnumDef %t13, ptr %a14 + call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) + %t16 = load %S.gen.EnumDef, ptr %a15 + store %S.gen.EnumDef %t16, ptr %a17 + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + call void @finch.gen.checkArgs(ptr %t18, %S.ast.Node %t19, i64 0, i64 1, { ptr, i64, i64 } %t21) + %t22 = load ptr, ptr %a1 + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t24 = load { ptr, i64, i64 }, ptr %t23 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 0, %t25 + br i1 %t26, label %range7869, label %inrange7870 +range7869: + call void @finch_panic_index(ptr @.str.4991, i64 4603, i64 0, i64 %t25) + unreachable +inrange7870: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 0 + %t29 = load %S.ast.Node, ptr %t28 + %t30 = call %S.gen.Val @finch.gen.expr(ptr %t22, %S.ast.Node %t29) + store %S.gen.Val %t30, ptr %a31 + %t32 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 + %t33 = load %S.ast.Type, ptr %t32 + %t34 = call i1 @finch.gen.isInt(%S.ast.Type %t33) + %t35 = xor i1 %t34, true + br i1 %t35, label %then7871, label %endif7873 +then7871: + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 0, %t39 + br i1 %t40, label %range7874, label %inrange7875 +range7874: + call void @finch_panic_index(ptr @.str.4992, i64 4605, i64 0, i64 %t39) + unreachable +inrange7875: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 0 + %t43 = load %S.ast.Node, ptr %t42 + %t44 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.4993, i64 54, i64 0 }, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a46 + %t50 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 + %t51 = load %S.ast.Type, ptr %t50 + %t52 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t51) + store { ptr, i64, i64 } %t49, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t49, ptr %a56 + call void @finch_str_drop(ptr %a56) + store { ptr, i64, i64 } %t52, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a53 + call void @finch.gen.fail(ptr %t36, %S.ast.Node %t43, { ptr, i64, i64 } %t58) + store { ptr, i64, i64 } %t58, ptr %a59 + call void @finch_str_drop(ptr %a59) + br label %endif7873 +endif7873: + %t60 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4994, i64 4, i64 0 }, 0 + %t61 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + %t66 = insertvalue %S.ast.Type %t60, { ptr, i64, i64 } %t65, 2 + %t67 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 + %t68 = load { ptr, i64, i64 }, ptr %t67 + store { ptr, i64, i64 } %t68, ptr %a69 + call void @finch_str_copy(ptr %a70, ptr %a69) + %t71 = load { ptr, i64, i64 }, ptr %a70 + %t72 = insertvalue %S.ast.Type %t66, { ptr, i64, i64 } %t71, 3 + store %S.ast.Type %t72, ptr %a73 + %t74 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 3 + %t75 = load i1, ptr %t74 + br i1 %t75, label %then7876, label %endif7878 +then7876: + %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + %t81 = call i64 @finch_str_to_int(ptr %a80, ptr @.str.4995, i64 4609) + store i64 -1, ptr %a82 + %t83 = load i64, ptr %t77 + %t84 = load ptr, ptr %t76 + store i64 0, ptr %a85 + br label %find.cond7879 +find.cond7879: + %t86 = load i64, ptr %a85 + %t87 = icmp slt i64 %t86, %t83 + br i1 %t87, label %find.body7880, label %find.end7883 +find.body7880: + %t88 = getelementptr inbounds i64, ptr %t84, i64 %t86 + %t89 = load i64, ptr %t88 + %t90 = icmp eq i64 %t89, %t81 + br i1 %t90, label %find.hit7881, label %find.next7882 +find.hit7881: + store i64 %t86, ptr %a82 + br label %find.end7883 +find.next7882: + %t91 = add i64 %t86, 1 + store i64 %t91, ptr %a85 + br label %find.cond7879 +find.end7883: + %t92 = load i64, ptr %a82 + %t93 = icmp sge i64 %t92, 0 + %t94 = xor i1 %t93, true + br i1 %t94, label %then7884, label %endif7886 +then7884: + %t95 = load ptr, ptr %a1 + %t96 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t97 = load { ptr, i64, i64 }, ptr %t96 + %t98 = extractvalue { ptr, i64, i64 } %t97, 1 + %t99 = icmp uge i64 0, %t98 + br i1 %t99, label %range7887, label %inrange7888 +range7887: + call void @finch_panic_index(ptr @.str.4996, i64 4610, i64 0, i64 %t98) + unreachable +inrange7888: + %t100 = extractvalue { ptr, i64, i64 } %t97, 0 + %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 0 + %t102 = load %S.ast.Node, ptr %t101 + %t103 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.4997, i64 37, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a105 + %t109 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } %t108, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t108, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.fail(ptr %t95, %S.ast.Node %t102, { ptr, i64, i64 } %t115) + store { ptr, i64, i64 } %t115, ptr %a116 + call void @finch_str_drop(ptr %a116) + br label %endif7886 +endif7886: + %t117 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t118 = load { ptr, i64, i64 }, ptr %t117 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_copy(ptr %a120, ptr %a119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + %t122 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t121, 0 + %t123 = load %S.ast.Type, ptr %a73 + store %S.ast.Type %t123, ptr %a124 + call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) + %t126 = load %S.ast.Type, ptr %a125 + %t127 = insertvalue %S.gen.Val %t122, %S.ast.Type %t126, 1 + call void @finch.drop.S_ast_Type(ptr %a73) + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.S_gen_EnumDef(ptr %a17) + ret %S.gen.Val %t127 +endif7878: + %t128 = load ptr, ptr %a1 + %t129 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t130 = load { ptr, i64, i64 }, ptr %t129 + %t131 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 + %t132 = load %S.ast.Type, ptr %t131 + %t133 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4998, i64 3, i64 0 }) + %t134 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t128, { ptr, i64, i64 } %t130, %S.ast.Type %t132, %S.ast.Type %t133) + store %S.ast.Type %t133, ptr %a135 + call void @finch.drop.S_ast_Type(ptr %a135) + store { ptr, i64, i64 } %t134, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.4999, i64 0, i64 0 }, ptr %a137 + %t138 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 + %t140 = load i64, ptr %t139 + store i64 0, ptr %a141 + br label %for.cond7889 +for.cond7889: + %t142 = load i64, ptr %a141 + %t143 = icmp slt i64 %t142, %t140 + br i1 %t143, label %for.body7890, label %for.end7892 +for.body7890: + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.5000, i64 12, i64 0 }, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + %t149 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t149, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.5001, i64 2, i64 0 }, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + store { ptr, i64, i64 } %t149, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a150 + %t155 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t156 = load i64, ptr %a141 + %t157 = load { ptr, i64, i64 }, ptr %t155 + %t158 = extractvalue { ptr, i64, i64 } %t157, 1 + %t159 = icmp uge i64 %t156, %t158 + br i1 %t159, label %range7893, label %inrange7894 +range7893: + call void @finch_panic_index(ptr @.str.5002, i64 4617, i64 %t156, i64 %t158) + unreachable +inrange7894: + %t160 = extractvalue { ptr, i64, i64 } %t157, 0 + %t161 = getelementptr inbounds i64, ptr %t160, i64 %t156 + %t162 = load i64, ptr %t161 + call void @finch_str_from_int(ptr %a163, i64 %t162) + %t164 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t154, ptr %a166 + store { ptr, i64, i64 } %t164, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t154, ptr %a168 + call void @finch_str_drop(ptr %a168) + store { ptr, i64, i64 } %t164, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load { ptr, i64, i64 }, ptr %a165 + %t171 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t170) + store { ptr, i64, i64 } %t170, ptr %a172 + call void @finch_str_drop(ptr %a172) + store { ptr, i64, i64 } %t171, ptr %a173 + %t174 = load i64, ptr %a141 + %t175 = icmp eq i64 %t174, 0 + br i1 %t175, label %then7895, label %else7896 +then7895: + %t176 = load { ptr, i64, i64 }, ptr %a173 + store { ptr, i64, i64 } %t176, ptr %a177 + call void @finch_str_copy(ptr %a178, ptr %a177) + %t179 = load { ptr, i64, i64 }, ptr %a178 + %t180 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t179, ptr %a137 + store { ptr, i64, i64 } %t180, ptr %a181 + call void @finch_str_drop(ptr %a181) + br label %endif7897 +else7896: + %t182 = load ptr, ptr %a1 + %t183 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.5003, i64 6, i64 0 }, ptr %a185 + store { ptr, i64, i64 } %t183, ptr %a186 + call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a184 + store { ptr, i64, i64 } %t187, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.5004, i64 2, i64 0 }, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + %t193 = load { ptr, i64, i64 }, ptr %a173 + store { ptr, i64, i64 } %t192, ptr %a195 + store { ptr, i64, i64 } %t193, ptr %a196 + call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) + store { ptr, i64, i64 } %t192, ptr %a197 + call void @finch_str_drop(ptr %a197) + %t198 = load { ptr, i64, i64 }, ptr %a194 + %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t182, { ptr, i64, i64 } %t198) + store { ptr, i64, i64 } %t198, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t199, ptr %a137 + store { ptr, i64, i64 } %t201, ptr %a202 + call void @finch_str_drop(ptr %a202) + br label %endif7897 +endif7897: + call void @finch_str_drop(ptr %a173) + br label %for.step7891 +for.step7891: + %t203 = load i64, ptr %a141 + %t204 = add i64 %t203, 1 + store i64 %t204, ptr %a141 + br label %for.cond7889 +for.end7892: + %t205 = load ptr, ptr %a1 + %t206 = load ptr, ptr %a1 + %t207 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.5005, i64 7, i64 0 }, ptr %a209 + store { ptr, i64, i64 } %t207, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t211, ptr %a213 + store { ptr, i64, i64 } { ptr @.str.5006, i64 6, i64 0 }, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + store { ptr, i64, i64 } %t211, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a212 + %t217 = call { ptr, i64, i64 } @finch.gen.op(ptr %t206, { ptr, i64, i64 } %t216) + store { ptr, i64, i64 } %t216, ptr %a218 + call void @finch_str_drop(ptr %a218) + %t219 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t220 = load { ptr, i64, i64 }, ptr %t219 + store { ptr, i64, i64 } { ptr @.str.5007, i64 32, i64 0 }, ptr %a222 + store { ptr, i64, i64 } %t220, ptr %a223 + call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) + %t224 = load { ptr, i64, i64 }, ptr %a221 + %t225 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t205, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t224, %S.ast.Node %t225) + store { ptr, i64, i64 } %t217, ptr %a226 + call void @finch_str_drop(ptr %a226) + store { ptr, i64, i64 } %t224, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load ptr, ptr %a1 + %t229 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.5008, i64 10, i64 0 }, ptr %a231 + store { ptr, i64, i64 } %t229, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.5009, i64 7, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t228, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t238, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t239, 0 + %t242 = load %S.ast.Type, ptr %a73 + store %S.ast.Type %t242, ptr %a243 + call void @finch.copy.S_ast_Type(ptr %a244, ptr %a243) + %t245 = load %S.ast.Type, ptr %a244 + %t246 = insertvalue %S.gen.Val %t241, %S.ast.Type %t245, 1 + call void @finch_str_drop(ptr %a137) + call void @finch_str_drop(ptr %a136) + call void @finch.drop.S_ast_Type(ptr %a73) + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.S_gen_EnumDef(ptr %a17) + ret %S.gen.Val %t246 +} + +define internal { ptr, i64, i64 } @finch.gen.cExt(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.5010, i64 4, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from7898 +logic.from7898: + br i1 %t8, label %logic.end7900, label %logic.rhs7899 +logic.rhs7899: + %t9 = load %S.ast.Type, ptr %a2 + %t10 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t9) + br label %logic.rend7901 +logic.rend7901: + br label %logic.end7900 +logic.end7900: + %t11 = phi i1 [ true, %logic.from7898 ], [ %t10, %logic.rend7901 ] + br i1 %t11, label %then7902, label %endif7904 +then7902: + %t12 = load %S.ast.Type, ptr %a2 + %t13 = call i64 @finch.gen.bitsOf(%S.ast.Type %t12) + %t14 = icmp slt i64 %t13, 32 + br i1 %t14, label %then7905, label %endif7907 +then7905: + ret { ptr, i64, i64 } { ptr @.str.5011, i64 8, i64 0 } +endif7907: + br label %endif7904 +endif7904: + %t15 = load %S.ast.Type, ptr %a2 + %t16 = call i1 @finch.gen.isSigned(%S.ast.Type %t15) + br label %logic.from7908 +logic.from7908: + br i1 %t16, label %logic.end7910, label %logic.rhs7909 +logic.rhs7909: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5012, i64 4, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.from7911 +logic.from7911: + br i1 %t22, label %logic.rhs7912, label %logic.end7913 +logic.rhs7912: + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic7914, label %ok7915 +panic7914: + call void @finch_panic(ptr @.str.5013, i64 4637, ptr @.str.5014) + unreachable +ok7915: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 31 + %t26 = load %S.platform.Target, ptr %t25 + %t27 = call i1 @finch.platform.charIsSigned(%S.platform.Target %t26) + br label %logic.rend7916 +logic.rend7916: + br label %logic.end7913 +logic.end7913: + %t28 = phi i1 [ false, %logic.from7911 ], [ %t27, %logic.rend7916 ] + br label %logic.rend7917 +logic.rend7917: + br label %logic.end7910 +logic.end7910: + %t29 = phi i1 [ true, %logic.from7908 ], [ %t28, %logic.rend7917 ] + br label %logic.from7918 +logic.from7918: + br i1 %t29, label %logic.rhs7919, label %logic.end7920 +logic.rhs7919: + %t30 = load %S.ast.Type, ptr %a2 + %t31 = call i64 @finch.gen.bitsOf(%S.ast.Type %t30) + %t32 = icmp slt i64 %t31, 32 + br label %logic.rend7921 +logic.rend7921: + br label %logic.end7920 +logic.end7920: + %t33 = phi i1 [ false, %logic.from7918 ], [ %t32, %logic.rend7921 ] + br i1 %t33, label %then7922, label %endif7924 +then7922: + ret { ptr, i64, i64 } { ptr @.str.5015, i64 8, i64 0 } +endif7924: + %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.5016, i64 4, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.from7925 +logic.from7925: + br i1 %t39, label %logic.rhs7926, label %logic.end7927 +logic.rhs7926: + %t40 = load %S.ast.Type, ptr %a2 + %t41 = call i64 @finch.gen.bitsOf(%S.ast.Type %t40) + %t42 = icmp slt i64 %t41, 32 + br label %logic.rend7928 +logic.rend7928: + br label %logic.end7927 +logic.end7927: + %t43 = phi i1 [ false, %logic.from7925 ], [ %t42, %logic.rend7928 ] + br i1 %t43, label %then7929, label %endif7931 +then7929: + ret { ptr, i64, i64 } { ptr @.str.5017, i64 8, i64 0 } +endif7931: + ret { ptr, i64, i64 } { ptr @.str.5018, i64 0, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.gen.cLL(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.5019, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then7932, label %endif7934 +then7932: + ret { ptr, i64, i64 } { ptr @.str.5020, i64 3, i64 0 } +endif7934: + %t9 = load ptr, ptr %a1 + %t10 = load %S.ast.Type, ptr %a2 + %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t9, %S.ast.Type %t10) + ret { ptr, i64, i64 } %t11 +} + +define internal %S.gen.Val @finch.gen.callC(ptr %p0, %S.ast.Node %p1, %S.cimport.CFunc %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.cimport.CFunc, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca i64, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca i64, align 16 + %a235 = alloca %S.ast.Type, align 16 + %a240 = alloca %S.ast.Type, align 16 + %a248 = alloca %S.ast.Type, align 16 + %a249 = alloca %S.ast.Type, align 16 + %a261 = alloca %S.gen.Plan, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca i64, align 16 + %a327 = alloca i64, align 16 + %a342 = alloca %S.ast.Type, align 16 + %a343 = alloca %S.ast.Type, align 16 + %a345 = alloca %S.ast.Type, align 16 + %a354 = alloca %S.gen.Abi, align 16 + %a355 = alloca %S.gen.Abi, align 16 + %a357 = alloca %S.gen.Abi, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca %S.gen.Val, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca %S.gen.Val, align 16 + %a406 = alloca %S.gen.Val, align 16 + %a407 = alloca %S.gen.Val, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca i64, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a648 = alloca { ptr, i64, i64 }, align 16 + %a649 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca %S.gen.Val, align 16 + %a699 = alloca %S.ast.Type, align 16 + %a700 = alloca %S.ast.Type, align 16 + %a702 = alloca %S.ast.Type, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca %S.gen.Val, align 16 + %a721 = alloca %S.gen.Val, align 16 + %a731 = alloca { ptr, i64, i64 }, align 16 + %a732 = alloca { ptr, i64, i64 }, align 16 + %a737 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca %S.ast.Type, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca %S.ast.Type, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca %S.ast.Type, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a803 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca %S.ast.Type, align 16 + %a817 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca %S.ast.Type, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca %S.ast.Type, align 16 + %a841 = alloca { ptr, i64, i64 }, align 16 + %a842 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a844 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a850 = alloca { ptr, i64, i64 }, align 16 + %a860 = alloca { ptr, i64, i64 }, align 16 + %a861 = alloca { ptr, i64, i64 }, align 16 + %a863 = alloca { ptr, i64, i64 }, align 16 + %a864 = alloca { ptr, i64, i64 }, align 16 + %a868 = alloca { ptr, i64, i64 }, align 16 + %a869 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a886 = alloca { ptr, i64, i64 }, align 16 + %a893 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a897 = alloca i64, align 16 + %a900 = alloca i64, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a920 = alloca { ptr, i64, i64 }, align 16 + %a921 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca { ptr, i64, i64 }, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a939 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a944 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a949 = alloca { ptr, i64, i64 }, align 16 + %a950 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a955 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a964 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a966 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a970 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a973 = alloca { ptr, i64, i64 }, align 16 + %a974 = alloca { ptr, i64, i64 }, align 16 + %a975 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a977 = alloca { ptr, i64, i64 }, align 16 + %a980 = alloca { ptr, i64, i64 }, align 16 + %a981 = alloca { ptr, i64, i64 }, align 16 + %a982 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a986 = alloca { ptr, i64, i64 }, align 16 + %a987 = alloca { ptr, i64, i64 }, align 16 + %a988 = alloca { ptr, i64, i64 }, align 16 + %a994 = alloca { ptr, i64, i64 }, align 16 + %a998 = alloca { ptr, i64, i64 }, align 16 + %a999 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1002 = alloca { ptr, i64, i64 }, align 16 + %a1003 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1007 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1010 = alloca { ptr, i64, i64 }, align 16 + %a1012 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1015 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1022 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1025 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1027 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1032 = alloca { ptr, i64, i64 }, align 16 + %a1033 = alloca { ptr, i64, i64 }, align 16 + %a1036 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca { ptr, i64, i64 }, align 16 + %a1038 = alloca { ptr, i64, i64 }, align 16 + %a1039 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1042 = alloca { ptr, i64, i64 }, align 16 + %a1043 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1048 = alloca { ptr, i64, i64 }, align 16 + %a1049 = alloca { ptr, i64, i64 }, align 16 + %a1050 = alloca { ptr, i64, i64 }, align 16 + %a1051 = alloca { ptr, i64, i64 }, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1054 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1060 = alloca { ptr, i64, i64 }, align 16 + %a1062 = alloca { ptr, i64, i64 }, align 16 + %a1063 = alloca { ptr, i64, i64 }, align 16 + %a1064 = alloca { ptr, i64, i64 }, align 16 + %a1065 = alloca { ptr, i64, i64 }, align 16 + %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 + %a1069 = alloca { ptr, i64, i64 }, align 16 + %a1070 = alloca { ptr, i64, i64 }, align 16 + %a1071 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1076 = alloca { ptr, i64, i64 }, align 16 + %a1077 = alloca { ptr, i64, i64 }, align 16 + %a1086 = alloca %S.ast.Type, align 16 + %a1087 = alloca %S.ast.Type, align 16 + %a1103 = alloca { ptr, i64, i64 }, align 16 + %a1106 = alloca %S.ast.Type, align 16 + %a1107 = alloca %S.ast.Type, align 16 + %a1113 = alloca { ptr, i64, i64 }, align 16 + %a1120 = alloca { ptr, i64, i64 }, align 16 + %a1121 = alloca { ptr, i64, i64 }, align 16 + %a1126 = alloca { ptr, i64, i64 }, align 16 + %a1139 = alloca { ptr, i64, i64 }, align 16 + %a1142 = alloca %S.ast.Type, align 16 + %a1143 = alloca %S.ast.Type, align 16 + %a1148 = alloca { ptr, i64, i64 }, align 16 + %a1149 = alloca { ptr, i64, i64 }, align 16 + %a1154 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca { ptr, i64, i64 }, align 16 + %a1160 = alloca { ptr, i64, i64 }, align 16 + %a1161 = alloca { ptr, i64, i64 }, align 16 + %a1163 = alloca { ptr, i64, i64 }, align 16 + %a1164 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca { ptr, i64, i64 }, align 16 + %a1166 = alloca { ptr, i64, i64 }, align 16 + %a1169 = alloca { ptr, i64, i64 }, align 16 + %a1170 = alloca { ptr, i64, i64 }, align 16 + %a1171 = alloca { ptr, i64, i64 }, align 16 + %a1172 = alloca { ptr, i64, i64 }, align 16 + %a1174 = alloca { ptr, i64, i64 }, align 16 + %a1175 = alloca { ptr, i64, i64 }, align 16 + %a1176 = alloca { ptr, i64, i64 }, align 16 + %a1177 = alloca { ptr, i64, i64 }, align 16 + %a1179 = alloca { ptr, i64, i64 }, align 16 + %a1185 = alloca %S.ast.Type, align 16 + %a1186 = alloca %S.ast.Type, align 16 + %a1190 = alloca { ptr, i64, i64 }, align 16 + %a1191 = alloca { ptr, i64, i64 }, align 16 + %a1195 = alloca %S.ast.Type, align 16 + %a1196 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.cimport.CFunc %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic7935, label %ok7936 +panic7935: + call void @finch_panic(ptr @.str.5021, i64 4654, ptr @.str.5022) + unreachable +ok7936: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + br i1 %t7, label %then7937, label %endif7939 +then7937: + store { ptr, i64, i64 } zeroinitializer, ptr %a8 + %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + store i64 0, ptr %a10 + br label %each.cond7940 +each.cond7940: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = load i64, ptr %a10 + %t14 = icmp slt i64 %t13, %t12 + br i1 %t14, label %each.body7941, label %each.end7943 +each.body7941: + %t15 = load ptr, ptr %t9 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 + %t17 = load %S.ast.Type, ptr %t16 + store %S.ast.Type %t17, ptr %a18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t20 = load %S.ast.Type, ptr %a18 + %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) + %t22 = load i64, ptr %t19 + %t23 = add i64 %t22, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t23, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t24 = load ptr, ptr %a8 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t22 + store { ptr, i64, i64 } %t21, ptr %t25 + store i64 %t23, ptr %t19 + br label %each.step7942 +each.step7942: + %t26 = load i64, ptr %a10 + %t27 = add i64 %t26, 1 + store i64 %t27, ptr %a10 + br label %each.cond7940 +each.end7943: + %t28 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t29 = load i1, ptr %t28 + br i1 %t29, label %then7944, label %endif7946 +then7944: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %a8 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } { ptr @.str.5023, i64 3, i64 0 }, ptr %t34 + store i64 %t32, ptr %t30 + br label %endif7946 +endif7946: + %t35 = load ptr, ptr %a1 + %t36 = load %S.ast.Node, ptr %a2 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t38 = load i64, ptr %t37 + %t39 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 + %t41 = load i64, ptr %t40 + %t42 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 1 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store { ptr, i64, i64 } { ptr @.str.5024, i64 17, i64 0 }, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.5025, i64 7, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 + %t54 = load %S.ast.Type, ptr %t53 + %t55 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t54) + store { ptr, i64, i64 } %t52, ptr %a57 + store { ptr, i64, i64 } %t55, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t52, ptr %a59 + call void @finch_str_drop(ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.5026, i64 1, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t68 = load { ptr, i64, i64 }, ptr %t67 + store { ptr, i64, i64 } %t66, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t66, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.5027, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5028, i64 2, i64 0 }, ptr %a80 + call void @finch_str_join(ptr %a81, ptr %a8, ptr %a80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t78, ptr %a84 + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t78, ptr %a86 + call void @finch_str_drop(ptr %a86) + store { ptr, i64, i64 } %t82, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.5029, i64 5, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + call void @finch.gen.noteRef(ptr %t35, %S.ast.Node %t36, i64 %t38, i64 %t41, { ptr, i64, i64 } %t93, { ptr, i64, i64 } { ptr @.str.5030, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + call void @finch.drop.arr_str(ptr %a8) + br label %endif7939 +endif7939: + %t95 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 + %t97 = load i64, ptr %t96 + %t98 = icmp sgt i64 %t97, 0 + br i1 %t98, label %then7947, label %endif7949 +then7947: + %t99 = load ptr, ptr %a1 + %t100 = load %S.ast.Node, ptr %a2 + %t101 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } { ptr @.str.5031, i64 16, i64 0 }, ptr %a104 + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.5032, i64 35, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 + %t113 = load { ptr, i64, i64 }, ptr %t112 + store { ptr, i64, i64 } %t111, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t111, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a114 + call void @finch.gen.fail(ptr %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t118) + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_drop(ptr %a119) + br label %endif7949 +endif7949: + %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t120, i32 0, i32 1 + %t122 = load i64, ptr %t121 + store i64 %t122, ptr %a123 + %t124 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t125 = load i1, ptr %t124 + br i1 %t125, label %then7950, label %else7951 +then7950: + %t126 = load i64, ptr %a123 + %t127 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1 + %t129 = load i64, ptr %t128 + %t130 = icmp slt i64 %t126, %t129 + br i1 %t130, label %then7953, label %endif7955 +then7953: + %t131 = load ptr, ptr %a1 + %t132 = load %S.ast.Node, ptr %a2 + %t133 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t134 = load { ptr, i64, i64 }, ptr %t133 + store { ptr, i64, i64 } { ptr @.str.5033, i64 1, i64 0 }, ptr %a136 + store { ptr, i64, i64 } %t134, ptr %a137 + call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a135 + store { ptr, i64, i64 } %t138, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.5034, i64 17, i64 0 }, ptr %a141 + call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) + store { ptr, i64, i64 } %t138, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a139 + %t144 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 + %t146 = load i64, ptr %t145 + call void @finch_str_from_int(ptr %a147, i64 %t146) + %t148 = load { ptr, i64, i64 }, ptr %a147 + store { ptr, i64, i64 } %t143, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + store { ptr, i64, i64 } %t143, ptr %a152 + call void @finch_str_drop(ptr %a152) + store { ptr, i64, i64 } %t148, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t154, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.5035, i64 22, i64 0 }, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t154, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load { ptr, i64, i64 }, ptr %a155 + %t160 = load i64, ptr %a123 + call void @finch_str_from_int(ptr %a161, i64 %t160) + %t162 = load { ptr, i64, i64 }, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t159, ptr %a166 + call void @finch_str_drop(ptr %a166) + store { ptr, i64, i64 } %t162, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a163 + call void @finch.gen.fail(ptr %t131, %S.ast.Node %t132, { ptr, i64, i64 } %t168) + store { ptr, i64, i64 } %t168, ptr %a169 + call void @finch_str_drop(ptr %a169) + br label %endif7955 +endif7955: + br label %endif7952 +else7951: + %t170 = load i64, ptr %a123 + %t171 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 + %t173 = load i64, ptr %t172 + %t174 = icmp ne i64 %t170, %t173 + br i1 %t174, label %then7956, label %endif7958 +then7956: + %t175 = load ptr, ptr %a1 + %t176 = load %S.ast.Node, ptr %a2 + %t177 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t178 = load { ptr, i64, i64 }, ptr %t177 + store { ptr, i64, i64 } { ptr @.str.5036, i64 1, i64 0 }, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.5037, i64 8, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 + %t190 = load i64, ptr %t189 + call void @finch_str_from_int(ptr %a191, i64 %t190) + %t192 = load { ptr, i64, i64 }, ptr %a191 + store { ptr, i64, i64 } %t187, ptr %a194 + store { ptr, i64, i64 } %t192, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t187, ptr %a196 + call void @finch_str_drop(ptr %a196) + store { ptr, i64, i64 } %t192, ptr %a197 + call void @finch_str_drop(ptr %a197) + %t198 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t198, ptr %a200 + store { ptr, i64, i64 } { ptr @.str.5038, i64 22, i64 0 }, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + store { ptr, i64, i64 } %t198, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a199 + %t204 = load i64, ptr %a123 + call void @finch_str_from_int(ptr %a205, i64 %t204) + %t206 = load { ptr, i64, i64 }, ptr %a205 + store { ptr, i64, i64 } %t203, ptr %a208 + store { ptr, i64, i64 } %t206, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t203, ptr %a210 + call void @finch_str_drop(ptr %a210) + store { ptr, i64, i64 } %t206, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a207 + call void @finch.gen.fail(ptr %t175, %S.ast.Node %t176, { ptr, i64, i64 } %t212) + store { ptr, i64, i64 } %t212, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %endif7958 +endif7958: + br label %endif7952 +endif7952: + %t214 = load ptr, ptr %a1 + %t215 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 + %t216 = load %S.ast.Type, ptr %t215 + %t217 = load %S.ast.Node, ptr %a2 + %t218 = call %S.ast.Type @finch.gen.resolve(ptr %t214, %S.ast.Type %t216, %S.ast.Node %t217) + store %S.ast.Type %t218, ptr %a219 + %t220 = load ptr, ptr %a1 + %t221 = load %S.ast.Node, ptr %a2 + %t222 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t223 = load { ptr, i64, i64 }, ptr %t222 + %t224 = load %S.ast.Type, ptr %a219 + call void @finch.gen.checkByValue(ptr %t220, %S.ast.Node %t221, { ptr, i64, i64 } %t223, %S.ast.Type %t224, { ptr, i64, i64 } { ptr @.str.5039, i64 7, i64 0 }) + store { ptr, i64, i64 } zeroinitializer, ptr %a225 + %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + store i64 0, ptr %a227 + br label %each.cond7959 +each.cond7959: + %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i32 0, i32 1 + %t229 = load i64, ptr %t228 + %t230 = load i64, ptr %a227 + %t231 = icmp slt i64 %t230, %t229 + br i1 %t231, label %each.body7960, label %each.end7962 +each.body7960: + %t232 = load ptr, ptr %t226 + %t233 = getelementptr inbounds %S.ast.Type, ptr %t232, i64 %t230 + %t234 = load %S.ast.Type, ptr %t233 + store %S.ast.Type %t234, ptr %a235 + %t236 = load ptr, ptr %a1 + %t237 = load %S.ast.Type, ptr %a235 + %t238 = load %S.ast.Node, ptr %a2 + %t239 = call %S.ast.Type @finch.gen.resolve(ptr %t236, %S.ast.Type %t237, %S.ast.Node %t238) + store %S.ast.Type %t239, ptr %a240 + %t241 = load ptr, ptr %a1 + %t242 = load %S.ast.Node, ptr %a2 + %t243 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t244 = load { ptr, i64, i64 }, ptr %t243 + %t245 = load %S.ast.Type, ptr %a240 + call void @finch.gen.checkByValue(ptr %t241, %S.ast.Node %t242, { ptr, i64, i64 } %t244, %S.ast.Type %t245, { ptr, i64, i64 } { ptr @.str.5040, i64 5, i64 0 }) + %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %a225, i32 0, i32 1 + %t247 = load %S.ast.Type, ptr %a240 + store %S.ast.Type %t247, ptr %a248 + call void @finch.copy.S_ast_Type(ptr %a249, ptr %a248) + %t250 = load %S.ast.Type, ptr %a249 + %t251 = load i64, ptr %t246 + %t252 = add i64 %t251, 1 + call void @finch_arr_reserve(ptr %a225, i64 %t252, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t253 = load ptr, ptr %a225 + %t254 = getelementptr inbounds %S.ast.Type, ptr %t253, i64 %t251 + store %S.ast.Type %t250, ptr %t254 + store i64 %t252, ptr %t246 + call void @finch.drop.S_ast_Type(ptr %a240) + br label %each.step7961 +each.step7961: + %t255 = load i64, ptr %a227 + %t256 = add i64 %t255, 1 + store i64 %t256, ptr %a227 + br label %each.cond7959 +each.end7962: + %t257 = load ptr, ptr %a1 + %t258 = load %S.ast.Type, ptr %a219 + %t259 = load { ptr, i64, i64 }, ptr %a225 + %t260 = call %S.gen.Plan @finch.gen.makePlan(ptr %t257, %S.ast.Type %t258, { ptr, i64, i64 } %t259) + store %S.gen.Plan %t260, ptr %a261 + store { ptr, i64, i64 } zeroinitializer, ptr %a262 + store { ptr, i64, i64 } zeroinitializer, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.5041, i64 0, i64 0 }, ptr %a264 + %t265 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 + %t266 = load i1, ptr %t265 + br i1 %t266, label %then7963, label %endif7965 +then7963: + %t267 = load ptr, ptr %a1 + %t268 = load ptr, ptr %a1 + %t269 = load %S.ast.Type, ptr %a219 + %t270 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t268, %S.ast.Type %t269) + %t271 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t267, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t271, ptr %a264 + store { ptr, i64, i64 } %t273, ptr %a274 + call void @finch_str_drop(ptr %a274) + %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t276 = load ptr, ptr %a1 + %t277 = load %S.ast.Type, ptr %a219 + %t278 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t276, %S.ast.Type %t277) + store { ptr, i64, i64 } { ptr @.str.5042, i64 9, i64 0 }, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t283, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.5043, i64 10, i64 0 }, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = load i64, ptr %t275 + %t290 = add i64 %t289, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t290, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t291 = load ptr, ptr %a262 + %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i64 %t289 + store { ptr, i64, i64 } %t288, ptr %t292 + store i64 %t290, ptr %t275 + %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t294 = load ptr, ptr %a1 + %t295 = load %S.ast.Type, ptr %a219 + %t296 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t294, %S.ast.Type %t295) + store { ptr, i64, i64 } { ptr @.str.5044, i64 9, i64 0 }, ptr %a298 + store { ptr, i64, i64 } %t296, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + store { ptr, i64, i64 } %t296, ptr %a300 + call void @finch_str_drop(ptr %a300) + %t301 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } %t301, ptr %a303 + store { ptr, i64, i64 } { ptr @.str.5045, i64 11, i64 0 }, ptr %a304 + call void @finch_str_concat(ptr %a302, ptr %a303, ptr %a304) + store { ptr, i64, i64 } %t301, ptr %a305 + call void @finch_str_drop(ptr %a305) + %t306 = load { ptr, i64, i64 }, ptr %a302 + %t307 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t306, ptr %a309 + store { ptr, i64, i64 } %t307, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t306, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = load { ptr, i64, i64 }, ptr %a308 + %t313 = load i64, ptr %t293 + %t314 = add i64 %t313, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t314, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t315 = load ptr, ptr %a263 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t315, i64 %t313 + store { ptr, i64, i64 } %t312, ptr %t316 + store i64 %t314, ptr %t293 + br label %endif7965 +endif7965: + store { ptr, i64, i64 } zeroinitializer, ptr %a317 + %t318 = load ptr, ptr %a1 + %t319 = icmp eq ptr %t318, null + br i1 %t319, label %panic7966, label %ok7967 +panic7966: + call void @finch_panic(ptr @.str.5046, i64 4693, ptr @.str.5047) + unreachable +ok7967: + %t320 = getelementptr inbounds %S.gen.Gen, ptr %t318, i32 0, i32 11 + %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i32 0, i32 1 + %t322 = load i64, ptr %t321 + store i64 %t322, ptr %a323 + %t324 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %t324, i32 0, i32 1 + %t326 = load i64, ptr %t325 + store i64 0, ptr %a327 + br label %for.cond7968 +for.cond7968: + %t328 = load i64, ptr %a327 + %t329 = icmp slt i64 %t328, %t326 + br i1 %t329, label %for.body7969, label %for.end7971 +for.body7969: + %t330 = load i64, ptr %a327 + %t331 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 + %t333 = load i64, ptr %t332 + %t334 = icmp slt i64 %t330, %t333 + br i1 %t334, label %then7972, label %endif7974 +then7972: + %t335 = load i64, ptr %a327 + %t336 = load { ptr, i64, i64 }, ptr %a225 + %t337 = extractvalue { ptr, i64, i64 } %t336, 1 + %t338 = icmp uge i64 %t335, %t337 + br i1 %t338, label %range7975, label %inrange7976 +range7975: + call void @finch_panic_index(ptr @.str.5048, i64 4696, i64 %t335, i64 %t337) + unreachable +inrange7976: + %t339 = extractvalue { ptr, i64, i64 } %t336, 0 + %t340 = getelementptr inbounds %S.ast.Type, ptr %t339, i64 %t335 + %t341 = load %S.ast.Type, ptr %t340 + store %S.ast.Type %t341, ptr %a342 + call void @finch.copy.S_ast_Type(ptr %a343, ptr %a342) + %t344 = load %S.ast.Type, ptr %a343 + store %S.ast.Type %t344, ptr %a345 + %t346 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 1 + %t347 = load i64, ptr %a327 + %t348 = load { ptr, i64, i64 }, ptr %t346 + %t349 = extractvalue { ptr, i64, i64 } %t348, 1 + %t350 = icmp uge i64 %t347, %t349 + br i1 %t350, label %range7977, label %inrange7978 +range7977: + call void @finch_panic_index(ptr @.str.5049, i64 4697, i64 %t347, i64 %t349) + unreachable +inrange7978: + %t351 = extractvalue { ptr, i64, i64 } %t348, 0 + %t352 = getelementptr inbounds %S.gen.Abi, ptr %t351, i64 %t347 + %t353 = load %S.gen.Abi, ptr %t352 + store %S.gen.Abi %t353, ptr %a354 + call void @finch.copy.S_gen_Abi(ptr %a355, ptr %a354) + %t356 = load %S.gen.Abi, ptr %a355 + store %S.gen.Abi %t356, ptr %a357 + %t358 = load ptr, ptr %a1 + %t359 = load ptr, ptr %a1 + %t360 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t361 = load i64, ptr %a327 + %t362 = load { ptr, i64, i64 }, ptr %t360 + %t363 = extractvalue { ptr, i64, i64 } %t362, 1 + %t364 = icmp uge i64 %t361, %t363 + br i1 %t364, label %range7979, label %inrange7980 +range7979: + call void @finch_panic_index(ptr @.str.5050, i64 4698, i64 %t361, i64 %t363) + unreachable +inrange7980: + %t365 = extractvalue { ptr, i64, i64 } %t362, 0 + %t366 = getelementptr inbounds %S.ast.Node, ptr %t365, i64 %t361 + %t367 = load %S.ast.Node, ptr %t366 + %t368 = load %S.ast.Type, ptr %a345 + %t369 = call %S.gen.Val @finch.gen.exprWant(ptr %t359, %S.ast.Node %t367, %S.ast.Type %t368) + %t370 = load %S.ast.Type, ptr %a345 + %t371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t372 = load i64, ptr %a327 + %t373 = load { ptr, i64, i64 }, ptr %t371 + %t374 = extractvalue { ptr, i64, i64 } %t373, 1 + %t375 = icmp uge i64 %t372, %t374 + br i1 %t375, label %range7981, label %inrange7982 +range7981: + call void @finch_panic_index(ptr @.str.5051, i64 4698, i64 %t372, i64 %t374) + unreachable +inrange7982: + %t376 = extractvalue { ptr, i64, i64 } %t373, 0 + %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i64 %t372 + %t378 = load %S.ast.Node, ptr %t377 + %t379 = load i64, ptr %a327 + %t380 = add i64 %t379, 1 + call void @finch_str_from_int(ptr %a381, i64 %t380) + %t382 = load { ptr, i64, i64 }, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.5052, i64 9, i64 0 }, ptr %a384 + store { ptr, i64, i64 } %t382, ptr %a385 + call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) + store { ptr, i64, i64 } %t382, ptr %a386 + call void @finch_str_drop(ptr %a386) + %t387 = load { ptr, i64, i64 }, ptr %a383 + store { ptr, i64, i64 } %t387, ptr %a389 + store { ptr, i64, i64 } { ptr @.str.5053, i64 4, i64 0 }, ptr %a390 + call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) + store { ptr, i64, i64 } %t387, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a388 + %t393 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t394 = load { ptr, i64, i64 }, ptr %t393 + store { ptr, i64, i64 } %t392, ptr %a396 + store { ptr, i64, i64 } %t394, ptr %a397 + call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) + store { ptr, i64, i64 } %t392, ptr %a398 + call void @finch_str_drop(ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a395 + %t400 = call %S.gen.Val @finch.gen.coerce(ptr %t358, %S.gen.Val %t369, %S.ast.Type %t370, %S.ast.Node %t378, { ptr, i64, i64 } %t399) + store %S.gen.Val %t369, ptr %a401 + call void @finch.drop.S_gen_Val(ptr %a401) + store { ptr, i64, i64 } %t399, ptr %a402 + call void @finch_str_drop(ptr %a402) + store %S.gen.Val %t400, ptr %a403 + %t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 + %t405 = load %S.gen.Val, ptr %a403 + store %S.gen.Val %t405, ptr %a406 + call void @finch.copy.S_gen_Val(ptr %a407, ptr %a406) + %t408 = load %S.gen.Val, ptr %a407 + %t409 = load i64, ptr %t404 + %t410 = add i64 %t409, 1 + call void @finch_arr_reserve(ptr %a317, i64 %t410, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t411 = load ptr, ptr %a317 + %t412 = getelementptr inbounds %S.gen.Val, ptr %t411, i64 %t409 + store %S.gen.Val %t408, ptr %t412 + store i64 %t410, ptr %t404 + %t413 = load ptr, ptr %a1 + %t414 = load %S.gen.Val, ptr %a403 + call void @finch.gen.hold(ptr %t413, %S.gen.Val %t414) + %t415 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t416, ptr %a417 + store { ptr, i64, i64 } { ptr @.str.5054, i64 6, i64 0 }, ptr %a418 + %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) + %t420 = icmp ne i32 %t419, 0 + br i1 %t420, label %then7983, label %else7984 +then7983: + %t421 = load ptr, ptr %a1 + %t422 = load ptr, ptr %a1 + %t423 = load %S.ast.Type, ptr %a345 + %t424 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t422, %S.ast.Type %t423) + %t425 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t421, { ptr, i64, i64 } %t424) + store { ptr, i64, i64 } %t424, ptr %a426 + call void @finch_str_drop(ptr %a426) + store { ptr, i64, i64 } %t425, ptr %a427 + %t428 = load ptr, ptr %a1 + %t429 = load ptr, ptr %a1 + %t430 = load %S.ast.Type, ptr %a345 + %t431 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t429, %S.ast.Type %t430) + %t432 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t433 = load { ptr, i64, i64 }, ptr %t432 + %t434 = load { ptr, i64, i64 }, ptr %a427 + call void @finch.gen.store(ptr %t428, { ptr, i64, i64 } %t431, { ptr, i64, i64 } %t433, { ptr, i64, i64 } %t434) + store { ptr, i64, i64 } %t431, ptr %a435 + call void @finch_str_drop(ptr %a435) + %t436 = load ptr, ptr %a1 + %t437 = load %S.ast.Type, ptr %a345 + %t438 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t436, %S.ast.Type %t437) + store { ptr, i64, i64 } { ptr @.str.5055, i64 10, i64 0 }, ptr %a440 + store { ptr, i64, i64 } %t438, ptr %a441 + call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) + store { ptr, i64, i64 } %t438, ptr %a442 + call void @finch_str_drop(ptr %a442) + %t443 = load { ptr, i64, i64 }, ptr %a439 + store { ptr, i64, i64 } %t443, ptr %a445 + store { ptr, i64, i64 } { ptr @.str.5056, i64 8, i64 0 }, ptr %a446 + call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) + store { ptr, i64, i64 } %t443, ptr %a447 + call void @finch_str_drop(ptr %a447) + %t448 = load { ptr, i64, i64 }, ptr %a444 + %t449 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 3 + %t450 = load i64, ptr %t449 + call void @finch_str_from_int(ptr %a451, i64 %t450) + %t452 = load { ptr, i64, i64 }, ptr %a451 + store { ptr, i64, i64 } %t448, ptr %a454 + store { ptr, i64, i64 } %t452, ptr %a455 + call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) + store { ptr, i64, i64 } %t448, ptr %a456 + call void @finch_str_drop(ptr %a456) + store { ptr, i64, i64 } %t452, ptr %a457 + call void @finch_str_drop(ptr %a457) + %t458 = load { ptr, i64, i64 }, ptr %a453 + store { ptr, i64, i64 } %t458, ptr %a459 + %t460 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t461 = load { ptr, i64, i64 }, ptr %a459 + store { ptr, i64, i64 } %t461, ptr %a462 + call void @finch_str_copy(ptr %a463, ptr %a462) + %t464 = load { ptr, i64, i64 }, ptr %a463 + %t465 = load i64, ptr %t460 + %t466 = add i64 %t465, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t466, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t467 = load ptr, ptr %a262 + %t468 = getelementptr inbounds { ptr, i64, i64 }, ptr %t467, i64 %t465 + store { ptr, i64, i64 } %t464, ptr %t468 + store i64 %t466, ptr %t460 + %t469 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t470 = load { ptr, i64, i64 }, ptr %a459 + store { ptr, i64, i64 } %t470, ptr %a472 + store { ptr, i64, i64 } { ptr @.str.5057, i64 1, i64 0 }, ptr %a473 + call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a471 + %t475 = load { ptr, i64, i64 }, ptr %a427 + store { ptr, i64, i64 } %t474, ptr %a477 + store { ptr, i64, i64 } %t475, ptr %a478 + call void @finch_str_concat(ptr %a476, ptr %a477, ptr %a478) + store { ptr, i64, i64 } %t474, ptr %a479 + call void @finch_str_drop(ptr %a479) + %t480 = load { ptr, i64, i64 }, ptr %a476 + %t481 = load i64, ptr %t469 + %t482 = add i64 %t481, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t482, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t483 = load ptr, ptr %a263 + %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 %t481 + store { ptr, i64, i64 } %t480, ptr %t484 + store i64 %t482, ptr %t469 + call void @finch_str_drop(ptr %a459) + call void @finch_str_drop(ptr %a427) + br label %endif7985 +else7984: + %t485 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 + %t486 = load { ptr, i64, i64 }, ptr %t485 + store { ptr, i64, i64 } %t486, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.5058, i64 8, i64 0 }, ptr %a488 + %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) + %t490 = icmp ne i32 %t489, 0 + br i1 %t490, label %then7986, label %else7987 +then7986: + %t491 = load ptr, ptr %a1 + %t492 = load ptr, ptr %a1 + %t493 = load %S.ast.Type, ptr %a345 + %t494 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t492, %S.ast.Type %t493) + %t495 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t491, { ptr, i64, i64 } %t494) + store { ptr, i64, i64 } %t494, ptr %a496 + call void @finch_str_drop(ptr %a496) + store { ptr, i64, i64 } %t495, ptr %a497 + %t498 = load ptr, ptr %a1 + %t499 = load ptr, ptr %a1 + %t500 = load %S.ast.Type, ptr %a345 + %t501 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t499, %S.ast.Type %t500) + %t502 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t503 = load { ptr, i64, i64 }, ptr %t502 + %t504 = load { ptr, i64, i64 }, ptr %a497 + call void @finch.gen.store(ptr %t498, { ptr, i64, i64 } %t501, { ptr, i64, i64 } %t503, { ptr, i64, i64 } %t504) + store { ptr, i64, i64 } %t501, ptr %a505 + call void @finch_str_drop(ptr %a505) + %t506 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t507 = load i64, ptr %t506 + %t508 = add i64 %t507, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t508, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t509 = load ptr, ptr %a262 + %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i64 %t507 + store { ptr, i64, i64 } { ptr @.str.5059, i64 3, i64 0 }, ptr %t510 + store i64 %t508, ptr %t506 + %t511 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t512 = load { ptr, i64, i64 }, ptr %a497 + store { ptr, i64, i64 } { ptr @.str.5060, i64 4, i64 0 }, ptr %a514 + store { ptr, i64, i64 } %t512, ptr %a515 + call void @finch_str_concat(ptr %a513, ptr %a514, ptr %a515) + %t516 = load { ptr, i64, i64 }, ptr %a513 + %t517 = load i64, ptr %t511 + %t518 = add i64 %t517, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t518, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t519 = load ptr, ptr %a263 + %t520 = getelementptr inbounds { ptr, i64, i64 }, ptr %t519, i64 %t517 + store { ptr, i64, i64 } %t516, ptr %t520 + store i64 %t518, ptr %t511 + call void @finch_str_drop(ptr %a497) + br label %endif7988 +else7987: + %t521 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 + %t522 = load { ptr, i64, i64 }, ptr %t521 + store { ptr, i64, i64 } %t522, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.5061, i64 6, i64 0 }, ptr %a524 + %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) + %t526 = icmp ne i32 %t525, 0 + br i1 %t526, label %then7989, label %else7990 +then7989: + %t527 = load ptr, ptr %a1 + %t528 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t527, { ptr, i64, i64 } { ptr @.str.5062, i64 9, i64 0 }) + store { ptr, i64, i64 } %t528, ptr %a529 + %t530 = load ptr, ptr %a1 + %t531 = load ptr, ptr %a1 + %t532 = load %S.ast.Type, ptr %a345 + %t533 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t531, %S.ast.Type %t532) + %t534 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t535 = load { ptr, i64, i64 }, ptr %t534 + %t536 = load { ptr, i64, i64 }, ptr %a529 + call void @finch.gen.store(ptr %t530, { ptr, i64, i64 } %t533, { ptr, i64, i64 } %t535, { ptr, i64, i64 } %t536) + store { ptr, i64, i64 } %t533, ptr %a537 + call void @finch_str_drop(ptr %a537) + %t538 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t539 = getelementptr inbounds { ptr, i64, i64 }, ptr %t538, i32 0, i32 1 + %t540 = load i64, ptr %t539 + store i64 0, ptr %a541 + br label %for.cond7992 +for.cond7992: + %t542 = load i64, ptr %a541 + %t543 = icmp slt i64 %t542, %t540 + br i1 %t543, label %for.body7993, label %for.end7995 +for.body7993: + %t544 = load ptr, ptr %a1 + %t545 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t546 = load i64, ptr %a541 + %t547 = load { ptr, i64, i64 }, ptr %t545 + %t548 = extractvalue { ptr, i64, i64 } %t547, 1 + %t549 = icmp uge i64 %t546, %t548 + br i1 %t549, label %range7996, label %inrange7997 +range7996: + call void @finch_panic_index(ptr @.str.5063, i64 4716, i64 %t546, i64 %t548) + unreachable +inrange7997: + %t550 = extractvalue { ptr, i64, i64 } %t547, 0 + %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %t550, i64 %t546 + %t552 = load { ptr, i64, i64 }, ptr %t551 + %t553 = load ptr, ptr %a1 + %t554 = load { ptr, i64, i64 }, ptr %a529 + store { ptr, i64, i64 } { ptr @.str.5064, i64 31, i64 0 }, ptr %a556 + store { ptr, i64, i64 } %t554, ptr %a557 + call void @finch_str_concat(ptr %a555, ptr %a556, ptr %a557) + %t558 = load { ptr, i64, i64 }, ptr %a555 + store { ptr, i64, i64 } %t558, ptr %a560 + store { ptr, i64, i64 } { ptr @.str.5065, i64 6, i64 0 }, ptr %a561 + call void @finch_str_concat(ptr %a559, ptr %a560, ptr %a561) + store { ptr, i64, i64 } %t558, ptr %a562 + call void @finch_str_drop(ptr %a562) + %t563 = load { ptr, i64, i64 }, ptr %a559 + %t564 = load i64, ptr %a541 + %t565 = mul i64 8, %t564 + call void @finch_str_from_int(ptr %a566, i64 %t565) + %t567 = load { ptr, i64, i64 }, ptr %a566 + store { ptr, i64, i64 } %t563, ptr %a569 + store { ptr, i64, i64 } %t567, ptr %a570 + call void @finch_str_concat(ptr %a568, ptr %a569, ptr %a570) + store { ptr, i64, i64 } %t563, ptr %a571 + call void @finch_str_drop(ptr %a571) + store { ptr, i64, i64 } %t567, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a568 + %t574 = call { ptr, i64, i64 } @finch.gen.op(ptr %t553, { ptr, i64, i64 } %t573) + store { ptr, i64, i64 } %t573, ptr %a575 + call void @finch_str_drop(ptr %a575) + %t576 = call { ptr, i64, i64 } @finch.gen.load(ptr %t544, { ptr, i64, i64 } %t552, { ptr, i64, i64 } %t574) + store { ptr, i64, i64 } %t574, ptr %a577 + call void @finch_str_drop(ptr %a577) + store { ptr, i64, i64 } %t576, ptr %a578 + %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t580 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t581 = load i64, ptr %a541 + %t582 = load { ptr, i64, i64 }, ptr %t580 + %t583 = extractvalue { ptr, i64, i64 } %t582, 1 + %t584 = icmp uge i64 %t581, %t583 + br i1 %t584, label %range7998, label %inrange7999 +range7998: + call void @finch_panic_index(ptr @.str.5066, i64 4717, i64 %t581, i64 %t583) + unreachable +inrange7999: + %t585 = extractvalue { ptr, i64, i64 } %t582, 0 + %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %t585, i64 %t581 + %t587 = load { ptr, i64, i64 }, ptr %t586 + store { ptr, i64, i64 } %t587, ptr %a588 + call void @finch_str_copy(ptr %a589, ptr %a588) + %t590 = load { ptr, i64, i64 }, ptr %a589 + %t591 = load i64, ptr %t579 + %t592 = add i64 %t591, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t592, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t593 = load ptr, ptr %a262 + %t594 = getelementptr inbounds { ptr, i64, i64 }, ptr %t593, i64 %t591 + store { ptr, i64, i64 } %t590, ptr %t594 + store i64 %t592, ptr %t579 + %t595 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t596 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t597 = load i64, ptr %a541 + %t598 = load { ptr, i64, i64 }, ptr %t596 + %t599 = extractvalue { ptr, i64, i64 } %t598, 1 + %t600 = icmp uge i64 %t597, %t599 + br i1 %t600, label %range8000, label %inrange8001 +range8000: + call void @finch_panic_index(ptr @.str.5067, i64 4718, i64 %t597, i64 %t599) + unreachable +inrange8001: + %t601 = extractvalue { ptr, i64, i64 } %t598, 0 + %t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %t601, i64 %t597 + %t603 = load { ptr, i64, i64 }, ptr %t602 + store { ptr, i64, i64 } %t603, ptr %a605 + store { ptr, i64, i64 } { ptr @.str.5068, i64 1, i64 0 }, ptr %a606 + call void @finch_str_concat(ptr %a604, ptr %a605, ptr %a606) + %t607 = load { ptr, i64, i64 }, ptr %a604 + %t608 = load { ptr, i64, i64 }, ptr %a578 + store { ptr, i64, i64 } %t607, ptr %a610 + store { ptr, i64, i64 } %t608, ptr %a611 + call void @finch_str_concat(ptr %a609, ptr %a610, ptr %a611) + store { ptr, i64, i64 } %t607, ptr %a612 + call void @finch_str_drop(ptr %a612) + %t613 = load { ptr, i64, i64 }, ptr %a609 + %t614 = load i64, ptr %t595 + %t615 = add i64 %t614, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t615, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t616 = load ptr, ptr %a263 + %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %t616, i64 %t614 + store { ptr, i64, i64 } %t613, ptr %t617 + store i64 %t615, ptr %t595 + call void @finch_str_drop(ptr %a578) + br label %for.step7994 +for.step7994: + %t618 = load i64, ptr %a541 + %t619 = add i64 %t618, 1 + store i64 %t619, ptr %a541 + br label %for.cond7992 +for.end7995: + call void @finch_str_drop(ptr %a529) + br label %endif7991 +else7990: + %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t621 = load ptr, ptr %a1 + %t622 = load %S.ast.Type, ptr %a345 + %t623 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t621, %S.ast.Type %t622) + %t624 = load ptr, ptr %a1 + %t625 = load %S.ast.Type, ptr %a345 + %t626 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t624, %S.ast.Type %t625) + store { ptr, i64, i64 } %t623, ptr %a628 + store { ptr, i64, i64 } %t626, ptr %a629 + call void @finch_str_concat(ptr %a627, ptr %a628, ptr %a629) + store { ptr, i64, i64 } %t623, ptr %a630 + call void @finch_str_drop(ptr %a630) + store { ptr, i64, i64 } %t626, ptr %a631 + call void @finch_str_drop(ptr %a631) + %t632 = load { ptr, i64, i64 }, ptr %a627 + %t633 = load i64, ptr %t620 + %t634 = add i64 %t633, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t634, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t635 = load ptr, ptr %a262 + %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t633 + store { ptr, i64, i64 } %t632, ptr %t636 + store i64 %t634, ptr %t620 + %t637 = getelementptr inbounds %S.ast.Type, ptr %a345, i32 0, i32 0 + %t638 = load { ptr, i64, i64 }, ptr %t637 + store { ptr, i64, i64 } %t638, ptr %a639 + store { ptr, i64, i64 } { ptr @.str.5069, i64 3, i64 0 }, ptr %a640 + %t641 = call i32 @finch_str_eq(ptr %a639, ptr %a640) + %t642 = icmp ne i32 %t641, 0 + br i1 %t642, label %then8002, label %else8003 +then8002: + %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t644 = load ptr, ptr %a1 + %t645 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t646 = load { ptr, i64, i64 }, ptr %t645 + %t647 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t644, { ptr, i64, i64 } %t646) + store { ptr, i64, i64 } { ptr @.str.5070, i64 4, i64 0 }, ptr %a649 + store { ptr, i64, i64 } %t647, ptr %a650 + call void @finch_str_concat(ptr %a648, ptr %a649, ptr %a650) + store { ptr, i64, i64 } %t647, ptr %a651 + call void @finch_str_drop(ptr %a651) + %t652 = load { ptr, i64, i64 }, ptr %a648 + %t653 = load i64, ptr %t643 + %t654 = add i64 %t653, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t654, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t655 = load ptr, ptr %a263 + %t656 = getelementptr inbounds { ptr, i64, i64 }, ptr %t655, i64 %t653 + store { ptr, i64, i64 } %t652, ptr %t656 + store i64 %t654, ptr %t643 + br label %endif8004 +else8003: + %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t658 = load ptr, ptr %a1 + %t659 = load %S.ast.Type, ptr %a345 + %t660 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t658, %S.ast.Type %t659) + %t661 = load ptr, ptr %a1 + %t662 = load %S.ast.Type, ptr %a345 + %t663 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t661, %S.ast.Type %t662) + store { ptr, i64, i64 } %t660, ptr %a665 + store { ptr, i64, i64 } %t663, ptr %a666 + call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) + store { ptr, i64, i64 } %t660, ptr %a667 + call void @finch_str_drop(ptr %a667) + store { ptr, i64, i64 } %t663, ptr %a668 + call void @finch_str_drop(ptr %a668) + %t669 = load { ptr, i64, i64 }, ptr %a664 + store { ptr, i64, i64 } %t669, ptr %a671 + store { ptr, i64, i64 } { ptr @.str.5071, i64 1, i64 0 }, ptr %a672 + call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672) + store { ptr, i64, i64 } %t669, ptr %a673 + call void @finch_str_drop(ptr %a673) + %t674 = load { ptr, i64, i64 }, ptr %a670 + %t675 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t676 = load { ptr, i64, i64 }, ptr %t675 + store { ptr, i64, i64 } %t674, ptr %a678 + store { ptr, i64, i64 } %t676, ptr %a679 + call void @finch_str_concat(ptr %a677, ptr %a678, ptr %a679) + store { ptr, i64, i64 } %t674, ptr %a680 + call void @finch_str_drop(ptr %a680) + %t681 = load { ptr, i64, i64 }, ptr %a677 + %t682 = load i64, ptr %t657 + %t683 = add i64 %t682, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t683, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t684 = load ptr, ptr %a263 + %t685 = getelementptr inbounds { ptr, i64, i64 }, ptr %t684, i64 %t682 + store { ptr, i64, i64 } %t681, ptr %t685 + store i64 %t683, ptr %t657 + br label %endif8004 +endif8004: + br label %endif7991 +endif7991: + br label %endif7988 +endif7988: + br label %endif7985 +endif7985: + call void @finch.drop.S_gen_Val(ptr %a403) + call void @finch.drop.S_gen_Abi(ptr %a357) + call void @finch.drop.S_ast_Type(ptr %a345) + br label %for.step7970 +endif7974: + %t686 = load ptr, ptr %a1 + %t687 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t688 = load i64, ptr %a327 + %t689 = load { ptr, i64, i64 }, ptr %t687 + %t690 = extractvalue { ptr, i64, i64 } %t689, 1 + %t691 = icmp uge i64 %t688, %t690 + br i1 %t691, label %range8005, label %inrange8006 +range8005: + call void @finch_panic_index(ptr @.str.5072, i64 4731, i64 %t688, i64 %t690) + unreachable +inrange8006: + %t692 = extractvalue { ptr, i64, i64 } %t689, 0 + %t693 = getelementptr inbounds %S.ast.Node, ptr %t692, i64 %t688 + %t694 = load %S.ast.Node, ptr %t693 + %t695 = call %S.gen.Val @finch.gen.expr(ptr %t686, %S.ast.Node %t694) + store %S.gen.Val %t695, ptr %a696 + %t697 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 1 + %t698 = load %S.ast.Type, ptr %t697 + store %S.ast.Type %t698, ptr %a699 + call void @finch.copy.S_ast_Type(ptr %a700, ptr %a699) + %t701 = load %S.ast.Type, ptr %a700 + store %S.ast.Type %t701, ptr %a702 + %t703 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t704 = load { ptr, i64, i64 }, ptr %t703 + store { ptr, i64, i64 } %t704, ptr %a705 + store { ptr, i64, i64 } { ptr @.str.5073, i64 4, i64 0 }, ptr %a706 + %t707 = call i32 @finch_str_eq(ptr %a705, ptr %a706) + %t708 = icmp ne i32 %t707, 0 + br i1 %t708, label %then8007, label %endif8009 +then8007: + %t709 = load ptr, ptr %a1 + %t710 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t711 = load i64, ptr %a327 + %t712 = load { ptr, i64, i64 }, ptr %t710 + %t713 = extractvalue { ptr, i64, i64 } %t712, 1 + %t714 = icmp uge i64 %t711, %t713 + br i1 %t714, label %range8010, label %inrange8011 +range8010: + call void @finch_panic_index(ptr @.str.5074, i64 4734, i64 %t711, i64 %t713) + unreachable +inrange8011: + %t715 = extractvalue { ptr, i64, i64 } %t712, 0 + %t716 = getelementptr inbounds %S.ast.Node, ptr %t715, i64 %t711 + %t717 = load %S.ast.Node, ptr %t716 + call void @finch.gen.fail(ptr %t709, %S.ast.Node %t717, { ptr, i64, i64 } { ptr @.str.5075, i64 23, i64 0 }) + br label %endif8009 +endif8009: + %t718 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 + %t719 = load %S.gen.Val, ptr %a696 + store %S.gen.Val %t719, ptr %a720 + call void @finch.copy.S_gen_Val(ptr %a721, ptr %a720) + %t722 = load %S.gen.Val, ptr %a721 + %t723 = load i64, ptr %t718 + %t724 = add i64 %t723, 1 + call void @finch_arr_reserve(ptr %a317, i64 %t724, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t725 = load ptr, ptr %a317 + %t726 = getelementptr inbounds %S.gen.Val, ptr %t725, i64 %t723 + store %S.gen.Val %t722, ptr %t726 + store i64 %t724, ptr %t718 + %t727 = load ptr, ptr %a1 + %t728 = load %S.gen.Val, ptr %a696 + call void @finch.gen.hold(ptr %t727, %S.gen.Val %t728) + %t729 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t730 = load { ptr, i64, i64 }, ptr %t729 + store { ptr, i64, i64 } %t730, ptr %a731 + store { ptr, i64, i64 } { ptr @.str.5076, i64 6, i64 0 }, ptr %a732 + %t733 = call i32 @finch_str_eq(ptr %a731, ptr %a732) + %t734 = icmp ne i32 %t733, 0 + br label %logic.from8012 +logic.from8012: + br i1 %t734, label %logic.end8014, label %logic.rhs8013 +logic.rhs8013: + %t735 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t736 = load { ptr, i64, i64 }, ptr %t735 + store { ptr, i64, i64 } %t736, ptr %a737 + store { ptr, i64, i64 } { ptr @.str.5077, i64 5, i64 0 }, ptr %a738 + %t739 = call i32 @finch_str_eq(ptr %a737, ptr %a738) + %t740 = icmp ne i32 %t739, 0 + br label %logic.rend8015 +logic.rend8015: + br label %logic.end8014 +logic.end8014: + %t741 = phi i1 [ true, %logic.from8012 ], [ %t740, %logic.rend8015 ] + br i1 %t741, label %then8016, label %endif8018 +then8016: + %t742 = load ptr, ptr %a1 + %t743 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t744 = load i64, ptr %a327 + %t745 = load { ptr, i64, i64 }, ptr %t743 + %t746 = extractvalue { ptr, i64, i64 } %t745, 1 + %t747 = icmp uge i64 %t744, %t746 + br i1 %t747, label %range8019, label %inrange8020 +range8019: + call void @finch_panic_index(ptr @.str.5078, i64 4739, i64 %t744, i64 %t746) + unreachable +inrange8020: + %t748 = extractvalue { ptr, i64, i64 } %t745, 0 + %t749 = getelementptr inbounds %S.ast.Node, ptr %t748, i64 %t744 + %t750 = load %S.ast.Node, ptr %t749 + call void @finch.gen.fail(ptr %t742, %S.ast.Node %t750, { ptr, i64, i64 } { ptr @.str.5079, i64 68, i64 0 }) + br label %endif8018 +endif8018: + %t751 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 + %t752 = load { ptr, i64, i64 }, ptr %t751 + store { ptr, i64, i64 } %t752, ptr %a753 + call void @finch_str_copy(ptr %a754, ptr %a753) + %t755 = load { ptr, i64, i64 }, ptr %a754 + store { ptr, i64, i64 } %t755, ptr %a756 + %t757 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t758 = load { ptr, i64, i64 }, ptr %t757 + store { ptr, i64, i64 } %t758, ptr %a759 + store { ptr, i64, i64 } { ptr @.str.5080, i64 3, i64 0 }, ptr %a760 + %t761 = call i32 @finch_str_eq(ptr %a759, ptr %a760) + %t762 = icmp ne i32 %t761, 0 + br i1 %t762, label %then8021, label %else8022 +then8021: + %t763 = load ptr, ptr %a1 + %t764 = load { ptr, i64, i64 }, ptr %a756 + %t765 = load %S.ast.Type, ptr %a702 + %t766 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5081, i64 5, i64 0 }) + %t767 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t763, { ptr, i64, i64 } %t764, %S.ast.Type %t765, %S.ast.Type %t766) + store %S.ast.Type %t766, ptr %a768 + call void @finch.drop.S_ast_Type(ptr %a768) + %t769 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t767, ptr %a756 + store { ptr, i64, i64 } %t769, ptr %a770 + call void @finch_str_drop(ptr %a770) + %t771 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5082, i64 5, i64 0 }) + %t772 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t771, ptr %a702 + store %S.ast.Type %t772, ptr %a773 + call void @finch.drop.S_ast_Type(ptr %a773) + br label %endif8023 +else8022: + %t774 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t775 = load { ptr, i64, i64 }, ptr %t774 + store { ptr, i64, i64 } %t775, ptr %a776 + store { ptr, i64, i64 } { ptr @.str.5083, i64 3, i64 0 }, ptr %a777 + %t778 = call i32 @finch_str_eq(ptr %a776, ptr %a777) + %t779 = icmp ne i32 %t778, 0 + br i1 %t779, label %then8024, label %else8025 +then8024: + %t780 = load ptr, ptr %a1 + %t781 = load { ptr, i64, i64 }, ptr %a756 + %t782 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t780, { ptr, i64, i64 } %t781) + %t783 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t782, ptr %a756 + store { ptr, i64, i64 } %t783, ptr %a784 + call void @finch_str_drop(ptr %a784) + %t785 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5084, i64 3, i64 0 }) + %t786 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t785, ptr %a702 + store %S.ast.Type %t786, ptr %a787 + call void @finch.drop.S_ast_Type(ptr %a787) + br label %endif8026 +else8025: + %t788 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t789 = load { ptr, i64, i64 }, ptr %t788 + store { ptr, i64, i64 } %t789, ptr %a790 + store { ptr, i64, i64 } { ptr @.str.5085, i64 4, i64 0 }, ptr %a791 + %t792 = call i32 @finch_str_eq(ptr %a790, ptr %a791) + %t793 = icmp ne i32 %t792, 0 + br i1 %t793, label %then8027, label %else8028 +then8027: + %t794 = load ptr, ptr %a1 + %t795 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 + %t796 = load { ptr, i64, i64 }, ptr %t795 + store { ptr, i64, i64 } { ptr @.str.5086, i64 8, i64 0 }, ptr %a798 + store { ptr, i64, i64 } %t796, ptr %a799 + call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799) + %t800 = load { ptr, i64, i64 }, ptr %a797 + store { ptr, i64, i64 } %t800, ptr %a802 + store { ptr, i64, i64 } { ptr @.str.5087, i64 7, i64 0 }, ptr %a803 + call void @finch_str_concat(ptr %a801, ptr %a802, ptr %a803) + store { ptr, i64, i64 } %t800, ptr %a804 + call void @finch_str_drop(ptr %a804) + %t805 = load { ptr, i64, i64 }, ptr %a801 + %t806 = call { ptr, i64, i64 } @finch.gen.op(ptr %t794, { ptr, i64, i64 } %t805) + store { ptr, i64, i64 } %t805, ptr %a807 + call void @finch_str_drop(ptr %a807) + %t808 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t806, ptr %a756 + store { ptr, i64, i64 } %t808, ptr %a809 + call void @finch_str_drop(ptr %a809) + %t810 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5088, i64 3, i64 0 }) + %t811 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t810, ptr %a702 + store %S.ast.Type %t811, ptr %a812 + call void @finch.drop.S_ast_Type(ptr %a812) + br label %endif8029 +else8028: + %t813 = load %S.ast.Type, ptr %a702 + %t814 = call i1 @finch.gen.isInt(%S.ast.Type %t813) + br label %logic.from8030 +logic.from8030: + br i1 %t814, label %logic.end8032, label %logic.rhs8031 +logic.rhs8031: + %t815 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t816 = load { ptr, i64, i64 }, ptr %t815 + store { ptr, i64, i64 } %t816, ptr %a817 + store { ptr, i64, i64 } { ptr @.str.5089, i64 4, i64 0 }, ptr %a818 + %t819 = call i32 @finch_str_eq(ptr %a817, ptr %a818) + %t820 = icmp ne i32 %t819, 0 + br label %logic.rend8033 +logic.rend8033: + br label %logic.end8032 +logic.end8032: + %t821 = phi i1 [ true, %logic.from8030 ], [ %t820, %logic.rend8033 ] + br label %logic.from8034 +logic.from8034: + br i1 %t821, label %logic.rhs8035, label %logic.end8036 +logic.rhs8035: + %t822 = load %S.ast.Type, ptr %a702 + %t823 = call i64 @finch.gen.bitsOf(%S.ast.Type %t822) + %t824 = icmp slt i64 %t823, 32 + br label %logic.rend8037 +logic.rend8037: + br label %logic.end8036 +logic.end8036: + %t825 = phi i1 [ false, %logic.from8034 ], [ %t824, %logic.rend8037 ] + br i1 %t825, label %then8038, label %endif8040 +then8038: + %t826 = load ptr, ptr %a1 + %t827 = load { ptr, i64, i64 }, ptr %a756 + %t828 = load %S.ast.Type, ptr %a702 + %t829 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5090, i64 3, i64 0 }) + %t830 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t826, { ptr, i64, i64 } %t827, %S.ast.Type %t828, %S.ast.Type %t829) + store %S.ast.Type %t829, ptr %a831 + call void @finch.drop.S_ast_Type(ptr %a831) + %t832 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t830, ptr %a756 + store { ptr, i64, i64 } %t832, ptr %a833 + call void @finch_str_drop(ptr %a833) + %t834 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5091, i64 3, i64 0 }) + %t835 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t834, ptr %a702 + store %S.ast.Type %t835, ptr %a836 + call void @finch.drop.S_ast_Type(ptr %a836) + br label %endif8040 +endif8040: + br label %endif8029 +endif8029: + br label %endif8026 +endif8026: + br label %endif8023 +endif8023: + %t837 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t838 = load ptr, ptr %a1 + %t839 = load %S.ast.Type, ptr %a702 + %t840 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t838, %S.ast.Type %t839) + store { ptr, i64, i64 } %t840, ptr %a842 + store { ptr, i64, i64 } { ptr @.str.5092, i64 1, i64 0 }, ptr %a843 + call void @finch_str_concat(ptr %a841, ptr %a842, ptr %a843) + store { ptr, i64, i64 } %t840, ptr %a844 + call void @finch_str_drop(ptr %a844) + %t845 = load { ptr, i64, i64 }, ptr %a841 + %t846 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t845, ptr %a848 + store { ptr, i64, i64 } %t846, ptr %a849 + call void @finch_str_concat(ptr %a847, ptr %a848, ptr %a849) + store { ptr, i64, i64 } %t845, ptr %a850 + call void @finch_str_drop(ptr %a850) + %t851 = load { ptr, i64, i64 }, ptr %a847 + %t852 = load i64, ptr %t837 + %t853 = add i64 %t852, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t853, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t854 = load ptr, ptr %a263 + %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i64 %t852 + store { ptr, i64, i64 } %t851, ptr %t855 + store i64 %t853, ptr %t837 + call void @finch_str_drop(ptr %a756) + call void @finch.drop.S_ast_Type(ptr %a702) + call void @finch.drop.S_gen_Val(ptr %a696) + br label %for.step7970 +for.step7970: + %t856 = load i64, ptr %a327 + %t857 = add i64 %t856, 1 + store i64 %t857, ptr %a327 + br label %for.cond7968 +for.end7971: + %t858 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 2 + %t859 = load { ptr, i64, i64 }, ptr %t858 + store { ptr, i64, i64 } %t859, ptr %a860 + call void @finch_str_copy(ptr %a861, ptr %a860) + %t862 = load { ptr, i64, i64 }, ptr %a861 + store { ptr, i64, i64 } %t862, ptr %a863 + store { ptr, i64, i64 } { ptr @.str.5093, i64 0, i64 0 }, ptr %a864 + %t865 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 + %t866 = getelementptr inbounds %S.gen.Abi, ptr %t865, i32 0, i32 0 + %t867 = load { ptr, i64, i64 }, ptr %t866 + store { ptr, i64, i64 } %t867, ptr %a868 + store { ptr, i64, i64 } { ptr @.str.5094, i64 6, i64 0 }, ptr %a869 + %t870 = call i32 @finch_str_eq(ptr %a868, ptr %a869) + %t871 = icmp ne i32 %t870, 0 + br i1 %t871, label %then8041, label %endif8043 +then8041: + %t872 = load ptr, ptr %a1 + %t873 = load %S.ast.Type, ptr %a219 + %t874 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t872, %S.ast.Type %t873) + %t875 = load { ptr, i64, i64 }, ptr %a864 + store { ptr, i64, i64 } %t874, ptr %a864 + store { ptr, i64, i64 } %t875, ptr %a876 + call void @finch_str_drop(ptr %a876) + br label %endif8043 +endif8043: + store { ptr, i64, i64 } { ptr @.str.5095, i64 0, i64 0 }, ptr %a877 + %t878 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t879 = load i1, ptr %t878 + br i1 %t879, label %then8044, label %endif8046 +then8044: + %t880 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.5096, i64 5, i64 0 }, ptr %a877 + store { ptr, i64, i64 } %t880, ptr %a881 + call void @finch_str_drop(ptr %a881) + %t882 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t883 = load i64, ptr %t882 + %t884 = icmp eq i64 %t883, 0 + br i1 %t884, label %then8047, label %endif8049 +then8047: + %t885 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.5097, i64 3, i64 0 }, ptr %a877 + store { ptr, i64, i64 } %t885, ptr %a886 + call void @finch_str_drop(ptr %a886) + br label %endif8049 +endif8049: + br label %endif8046 +endif8046: + %t887 = load ptr, ptr %a1 + %t888 = icmp eq ptr %t887, null + br i1 %t888, label %panic8050, label %ok8051 +panic8050: + call void @finch_panic(ptr @.str.5098, i64 4770, ptr @.str.5099) + unreachable +ok8051: + %t889 = getelementptr inbounds %S.gen.Gen, ptr %t887, i32 0, i32 40 + %t890 = getelementptr inbounds { ptr, i64, i64 }, ptr %t889, i32 0, i32 1 + %t891 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t892 = load { ptr, i64, i64 }, ptr %t891 + store { ptr, i64, i64 } { ptr @.str.5100, i64 2, i64 0 }, ptr %a894 + store { ptr, i64, i64 } %t892, ptr %a895 + call void @finch_str_concat(ptr %a893, ptr %a894, ptr %a895) + %t896 = load { ptr, i64, i64 }, ptr %a893 + store i64 -1, ptr %a897 + %t898 = load i64, ptr %t890 + %t899 = load ptr, ptr %t889 + store i64 0, ptr %a900 + br label %find.cond8052 +find.cond8052: + %t901 = load i64, ptr %a900 + %t902 = icmp slt i64 %t901, %t898 + br i1 %t902, label %find.body8053, label %find.end8056 +find.body8053: + %t903 = getelementptr inbounds { ptr, i64, i64 }, ptr %t899, i64 %t901 + %t904 = load { ptr, i64, i64 }, ptr %t903 + store { ptr, i64, i64 } %t904, ptr %a905 + store { ptr, i64, i64 } %t896, ptr %a906 + %t907 = call i32 @finch_str_eq(ptr %a905, ptr %a906) + %t908 = icmp ne i32 %t907, 0 + br i1 %t908, label %find.hit8054, label %find.next8055 +find.hit8054: + store i64 %t901, ptr %a897 + br label %find.end8056 +find.next8055: + %t909 = add i64 %t901, 1 + store i64 %t909, ptr %a900 + br label %find.cond8052 +find.end8056: + store { ptr, i64, i64 } %t896, ptr %a910 + call void @finch_str_drop(ptr %a910) + %t911 = load i64, ptr %a897 + %t912 = icmp sge i64 %t911, 0 + %t913 = xor i1 %t912, true + br i1 %t913, label %then8057, label %endif8059 +then8057: + %t914 = load ptr, ptr %a1 + %t915 = icmp eq ptr %t914, null + br i1 %t915, label %panic8060, label %ok8061 +panic8060: + call void @finch_panic(ptr @.str.5101, i64 4771, ptr @.str.5102) + unreachable +ok8061: + %t916 = getelementptr inbounds %S.gen.Gen, ptr %t914, i32 0, i32 40 + %t917 = getelementptr inbounds { ptr, i64, i64 }, ptr %t916, i32 0, i32 1 + %t918 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t919 = load { ptr, i64, i64 }, ptr %t918 + store { ptr, i64, i64 } { ptr @.str.5103, i64 2, i64 0 }, ptr %a921 + store { ptr, i64, i64 } %t919, ptr %a922 + call void @finch_str_concat(ptr %a920, ptr %a921, ptr %a922) + %t923 = load { ptr, i64, i64 }, ptr %a920 + %t924 = load i64, ptr %t917 + %t925 = add i64 %t924, 1 + call void @finch_arr_reserve(ptr %t916, i64 %t925, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t926 = load ptr, ptr %t916 + %t927 = getelementptr inbounds { ptr, i64, i64 }, ptr %t926, i64 %t924 + store { ptr, i64, i64 } %t923, ptr %t927 + store i64 %t925, ptr %t917 + %t928 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t929 = load { ptr, i64, i64 }, ptr %t928 + %t930 = call i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %t929) + %t931 = xor i1 %t930, true + br i1 %t931, label %then8062, label %endif8064 +then8062: + %t932 = load ptr, ptr %a1 + %t933 = icmp eq ptr %t932, null + br i1 %t933, label %panic8065, label %ok8066 +panic8065: + call void @finch_panic(ptr @.str.5104, i64 4773, ptr @.str.5105) + unreachable +ok8066: + %t934 = getelementptr inbounds %S.gen.Gen, ptr %t932, i32 0, i32 2 + %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t934, i32 0, i32 1 + %t936 = load { ptr, i64, i64 }, ptr %a864 + store { ptr, i64, i64 } { ptr @.str.5106, i64 7, i64 0 }, ptr %a938 + store { ptr, i64, i64 } %t936, ptr %a939 + call void @finch_str_concat(ptr %a937, ptr %a938, ptr %a939) + %t940 = load { ptr, i64, i64 }, ptr %a937 + store { ptr, i64, i64 } %t940, ptr %a942 + store { ptr, i64, i64 } { ptr @.str.5107, i64 1, i64 0 }, ptr %a943 + call void @finch_str_concat(ptr %a941, ptr %a942, ptr %a943) + store { ptr, i64, i64 } %t940, ptr %a944 + call void @finch_str_drop(ptr %a944) + %t945 = load { ptr, i64, i64 }, ptr %a941 + %t946 = load { ptr, i64, i64 }, ptr %a863 + store { ptr, i64, i64 } %t945, ptr %a948 + store { ptr, i64, i64 } %t946, ptr %a949 + call void @finch_str_concat(ptr %a947, ptr %a948, ptr %a949) + store { ptr, i64, i64 } %t945, ptr %a950 + call void @finch_str_drop(ptr %a950) + %t951 = load { ptr, i64, i64 }, ptr %a947 + store { ptr, i64, i64 } %t951, ptr %a953 + store { ptr, i64, i64 } { ptr @.str.5108, i64 2, i64 0 }, ptr %a954 + call void @finch_str_concat(ptr %a952, ptr %a953, ptr %a954) + store { ptr, i64, i64 } %t951, ptr %a955 + call void @finch_str_drop(ptr %a955) + %t956 = load { ptr, i64, i64 }, ptr %a952 + %t957 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t958 = load { ptr, i64, i64 }, ptr %t957 + store { ptr, i64, i64 } %t956, ptr %a960 + store { ptr, i64, i64 } %t958, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t956, ptr %a962 + call void @finch_str_drop(ptr %a962) + %t963 = load { ptr, i64, i64 }, ptr %a959 + store { ptr, i64, i64 } %t963, ptr %a965 + store { ptr, i64, i64 } { ptr @.str.5109, i64 1, i64 0 }, ptr %a966 + call void @finch_str_concat(ptr %a964, ptr %a965, ptr %a966) + store { ptr, i64, i64 } %t963, ptr %a967 + call void @finch_str_drop(ptr %a967) + %t968 = load { ptr, i64, i64 }, ptr %a964 + %t969 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5110, i64 2, i64 0 }, ptr %a970 + call void @finch_str_join(ptr %a971, ptr %a262, ptr %a970) + %t972 = load { ptr, i64, i64 }, ptr %a971 + store { ptr, i64, i64 } %t968, ptr %a974 + store { ptr, i64, i64 } %t972, ptr %a975 + call void @finch_str_concat(ptr %a973, ptr %a974, ptr %a975) + store { ptr, i64, i64 } %t968, ptr %a976 + call void @finch_str_drop(ptr %a976) + store { ptr, i64, i64 } %t972, ptr %a977 + call void @finch_str_drop(ptr %a977) + %t978 = load { ptr, i64, i64 }, ptr %a973 + %t979 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } %t978, ptr %a981 + store { ptr, i64, i64 } %t979, ptr %a982 + call void @finch_str_concat(ptr %a980, ptr %a981, ptr %a982) + store { ptr, i64, i64 } %t978, ptr %a983 + call void @finch_str_drop(ptr %a983) + %t984 = load { ptr, i64, i64 }, ptr %a980 + store { ptr, i64, i64 } %t984, ptr %a986 + store { ptr, i64, i64 } { ptr @.str.5111, i64 1, i64 0 }, ptr %a987 + call void @finch_str_concat(ptr %a985, ptr %a986, ptr %a987) + store { ptr, i64, i64 } %t984, ptr %a988 + call void @finch_str_drop(ptr %a988) + %t989 = load { ptr, i64, i64 }, ptr %a985 + %t990 = load i64, ptr %t935 + %t991 = add i64 %t990, 1 + call void @finch_arr_reserve(ptr %t934, i64 %t991, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t992 = load ptr, ptr %t934 + %t993 = getelementptr inbounds { ptr, i64, i64 }, ptr %t992, i64 %t990 + store { ptr, i64, i64 } %t989, ptr %t993 + store i64 %t991, ptr %t935 + br label %endif8064 +endif8064: + br label %endif8059 +endif8059: + store { ptr, i64, i64 } { ptr @.str.5112, i64 0, i64 0 }, ptr %a994 + %t995 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t996 = load i1, ptr %t995 + br i1 %t996, label %then8067, label %endif8069 +then8067: + %t997 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5114, i64 2, i64 0 }, ptr %a998 + call void @finch_str_join(ptr %a999, ptr %a262, ptr %a998) + %t1000 = load { ptr, i64, i64 }, ptr %a999 + store { ptr, i64, i64 } { ptr @.str.5113, i64 2, i64 0 }, ptr %a1002 + store { ptr, i64, i64 } %t1000, ptr %a1003 + call void @finch_str_concat(ptr %a1001, ptr %a1002, ptr %a1003) + store { ptr, i64, i64 } %t1000, ptr %a1004 + call void @finch_str_drop(ptr %a1004) + %t1005 = load { ptr, i64, i64 }, ptr %a1001 + %t1006 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } %t1005, ptr %a1008 + store { ptr, i64, i64 } %t1006, ptr %a1009 + call void @finch_str_concat(ptr %a1007, ptr %a1008, ptr %a1009) + store { ptr, i64, i64 } %t1005, ptr %a1010 + call void @finch_str_drop(ptr %a1010) + %t1011 = load { ptr, i64, i64 }, ptr %a1007 + store { ptr, i64, i64 } %t1011, ptr %a1013 + store { ptr, i64, i64 } { ptr @.str.5115, i64 1, i64 0 }, ptr %a1014 + call void @finch_str_concat(ptr %a1012, ptr %a1013, ptr %a1014) + store { ptr, i64, i64 } %t1011, ptr %a1015 + call void @finch_str_drop(ptr %a1015) + %t1016 = load { ptr, i64, i64 }, ptr %a1012 + %t1017 = load { ptr, i64, i64 }, ptr %a994 + store { ptr, i64, i64 } %t1016, ptr %a994 + store { ptr, i64, i64 } %t1017, ptr %a1018 + call void @finch_str_drop(ptr %a1018) + br label %endif8069 +endif8069: + %t1019 = load { ptr, i64, i64 }, ptr %a864 + store { ptr, i64, i64 } { ptr @.str.5116, i64 4, i64 0 }, ptr %a1021 + store { ptr, i64, i64 } %t1019, ptr %a1022 + call void @finch_str_concat(ptr %a1020, ptr %a1021, ptr %a1022) + %t1023 = load { ptr, i64, i64 }, ptr %a1020 + store { ptr, i64, i64 } %t1023, ptr %a1025 + store { ptr, i64, i64 } { ptr @.str.5117, i64 1, i64 0 }, ptr %a1026 + call void @finch_str_concat(ptr %a1024, ptr %a1025, ptr %a1026) + store { ptr, i64, i64 } %t1023, ptr %a1027 + call void @finch_str_drop(ptr %a1027) + %t1028 = load { ptr, i64, i64 }, ptr %a1024 + %t1029 = load { ptr, i64, i64 }, ptr %a863 + store { ptr, i64, i64 } %t1028, ptr %a1031 + store { ptr, i64, i64 } %t1029, ptr %a1032 + call void @finch_str_concat(ptr %a1030, ptr %a1031, ptr %a1032) + store { ptr, i64, i64 } %t1028, ptr %a1033 + call void @finch_str_drop(ptr %a1033) + %t1034 = load { ptr, i64, i64 }, ptr %a1030 + %t1035 = load { ptr, i64, i64 }, ptr %a994 + store { ptr, i64, i64 } %t1034, ptr %a1037 + store { ptr, i64, i64 } %t1035, ptr %a1038 + call void @finch_str_concat(ptr %a1036, ptr %a1037, ptr %a1038) + store { ptr, i64, i64 } %t1034, ptr %a1039 + call void @finch_str_drop(ptr %a1039) + %t1040 = load { ptr, i64, i64 }, ptr %a1036 + store { ptr, i64, i64 } %t1040, ptr %a1042 + store { ptr, i64, i64 } { ptr @.str.5118, i64 2, i64 0 }, ptr %a1043 + call void @finch_str_concat(ptr %a1041, ptr %a1042, ptr %a1043) + store { ptr, i64, i64 } %t1040, ptr %a1044 + call void @finch_str_drop(ptr %a1044) + %t1045 = load { ptr, i64, i64 }, ptr %a1041 + %t1046 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t1047 = load { ptr, i64, i64 }, ptr %t1046 + store { ptr, i64, i64 } %t1045, ptr %a1049 + store { ptr, i64, i64 } %t1047, ptr %a1050 + call void @finch_str_concat(ptr %a1048, ptr %a1049, ptr %a1050) + store { ptr, i64, i64 } %t1045, ptr %a1051 + call void @finch_str_drop(ptr %a1051) + %t1052 = load { ptr, i64, i64 }, ptr %a1048 + store { ptr, i64, i64 } %t1052, ptr %a1054 + store { ptr, i64, i64 } { ptr @.str.5119, i64 1, i64 0 }, ptr %a1055 + call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) + store { ptr, i64, i64 } %t1052, ptr %a1056 + call void @finch_str_drop(ptr %a1056) + %t1057 = load { ptr, i64, i64 }, ptr %a1053 + %t1058 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5120, i64 2, i64 0 }, ptr %a1059 + call void @finch_str_join(ptr %a1060, ptr %a263, ptr %a1059) + %t1061 = load { ptr, i64, i64 }, ptr %a1060 + store { ptr, i64, i64 } %t1057, ptr %a1063 + store { ptr, i64, i64 } %t1061, ptr %a1064 + call void @finch_str_concat(ptr %a1062, ptr %a1063, ptr %a1064) + store { ptr, i64, i64 } %t1057, ptr %a1065 + call void @finch_str_drop(ptr %a1065) + store { ptr, i64, i64 } %t1061, ptr %a1066 + call void @finch_str_drop(ptr %a1066) + %t1067 = load { ptr, i64, i64 }, ptr %a1062 + store { ptr, i64, i64 } %t1067, ptr %a1069 + store { ptr, i64, i64 } { ptr @.str.5121, i64 1, i64 0 }, ptr %a1070 + call void @finch_str_concat(ptr %a1068, ptr %a1069, ptr %a1070) + store { ptr, i64, i64 } %t1067, ptr %a1071 + call void @finch_str_drop(ptr %a1071) + %t1072 = load { ptr, i64, i64 }, ptr %a1068 + store { ptr, i64, i64 } %t1072, ptr %a1073 + %t1074 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 + %t1075 = load { ptr, i64, i64 }, ptr %t1074 + store { ptr, i64, i64 } %t1075, ptr %a1076 + store { ptr, i64, i64 } { ptr @.str.5122, i64 4, i64 0 }, ptr %a1077 + %t1078 = call i32 @finch_str_eq(ptr %a1076, ptr %a1077) + %t1079 = icmp ne i32 %t1078, 0 + br i1 %t1079, label %then8070, label %endif8072 +then8070: + %t1080 = load ptr, ptr %a1 + %t1081 = load { ptr, i64, i64 }, ptr %a1073 + call void @finch.gen.emit(ptr %t1080, { ptr, i64, i64 } %t1081) + %t1082 = load ptr, ptr %a1 + %t1083 = load { ptr, i64, i64 }, ptr %a317 + %t1084 = load i64, ptr %a323 + call void @finch.gen.releaseAll(ptr %t1082, { ptr, i64, i64 } %t1083, i64 %t1084) + %t1085 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1085, ptr %a1086 + call void @finch.copy.S_ast_Type(ptr %a1087, ptr %a1086) + %t1088 = load %S.ast.Type, ptr %a1087 + %t1089 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1088, 1 + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1089 +endif8072: + %t1090 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 + %t1091 = load i1, ptr %t1090 + br i1 %t1091, label %then8073, label %endif8075 +then8073: + %t1092 = load ptr, ptr %a1 + %t1093 = load { ptr, i64, i64 }, ptr %a1073 + call void @finch.gen.emit(ptr %t1092, { ptr, i64, i64 } %t1093) + %t1094 = load ptr, ptr %a1 + %t1095 = load { ptr, i64, i64 }, ptr %a317 + %t1096 = load i64, ptr %a323 + call void @finch.gen.releaseAll(ptr %t1094, { ptr, i64, i64 } %t1095, i64 %t1096) + %t1097 = load ptr, ptr %a1 + %t1098 = load ptr, ptr %a1 + %t1099 = load %S.ast.Type, ptr %a219 + %t1100 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1098, %S.ast.Type %t1099) + %t1101 = load { ptr, i64, i64 }, ptr %a264 + %t1102 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1097, { ptr, i64, i64 } %t1100, { ptr, i64, i64 } %t1101) + store { ptr, i64, i64 } %t1100, ptr %a1103 + call void @finch_str_drop(ptr %a1103) + %t1104 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1102, 0 + %t1105 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1105, ptr %a1106 + call void @finch.copy.S_ast_Type(ptr %a1107, ptr %a1106) + %t1108 = load %S.ast.Type, ptr %a1107 + %t1109 = insertvalue %S.gen.Val %t1104, %S.ast.Type %t1108, 1 + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1109 +endif8075: + %t1110 = load ptr, ptr %a1 + %t1111 = load { ptr, i64, i64 }, ptr %a1073 + %t1112 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1110, { ptr, i64, i64 } %t1111) + store { ptr, i64, i64 } %t1112, ptr %a1113 + %t1114 = load ptr, ptr %a1 + %t1115 = load { ptr, i64, i64 }, ptr %a317 + %t1116 = load i64, ptr %a323 + call void @finch.gen.releaseAll(ptr %t1114, { ptr, i64, i64 } %t1115, i64 %t1116) + %t1117 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 + %t1118 = getelementptr inbounds %S.gen.Abi, ptr %t1117, i32 0, i32 0 + %t1119 = load { ptr, i64, i64 }, ptr %t1118 + store { ptr, i64, i64 } %t1119, ptr %a1120 + store { ptr, i64, i64 } { ptr @.str.5123, i64 6, i64 0 }, ptr %a1121 + %t1122 = call i32 @finch_str_eq(ptr %a1120, ptr %a1121) + %t1123 = icmp ne i32 %t1122, 0 + br i1 %t1123, label %then8076, label %endif8078 +then8076: + %t1124 = load ptr, ptr %a1 + %t1125 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1124, { ptr, i64, i64 } { ptr @.str.5124, i64 9, i64 0 }) + store { ptr, i64, i64 } %t1125, ptr %a1126 + %t1127 = load ptr, ptr %a1 + %t1128 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 + %t1129 = getelementptr inbounds %S.gen.Abi, ptr %t1128, i32 0, i32 2 + %t1130 = load { ptr, i64, i64 }, ptr %t1129 + %t1131 = load { ptr, i64, i64 }, ptr %a1113 + %t1132 = load { ptr, i64, i64 }, ptr %a1126 + call void @finch.gen.store(ptr %t1127, { ptr, i64, i64 } %t1130, { ptr, i64, i64 } %t1131, { ptr, i64, i64 } %t1132) + %t1133 = load ptr, ptr %a1 + %t1134 = load ptr, ptr %a1 + %t1135 = load %S.ast.Type, ptr %a219 + %t1136 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1134, %S.ast.Type %t1135) + %t1137 = load { ptr, i64, i64 }, ptr %a1126 + %t1138 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1133, { ptr, i64, i64 } %t1136, { ptr, i64, i64 } %t1137) + store { ptr, i64, i64 } %t1136, ptr %a1139 + call void @finch_str_drop(ptr %a1139) + %t1140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1138, 0 + %t1141 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1141, ptr %a1142 + call void @finch.copy.S_ast_Type(ptr %a1143, ptr %a1142) + %t1144 = load %S.ast.Type, ptr %a1143 + %t1145 = insertvalue %S.gen.Val %t1140, %S.ast.Type %t1144, 1 + call void @finch_str_drop(ptr %a1126) + call void @finch_str_drop(ptr %a1113) + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1145 +endif8078: + %t1146 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 + %t1147 = load { ptr, i64, i64 }, ptr %t1146 + store { ptr, i64, i64 } %t1147, ptr %a1148 + store { ptr, i64, i64 } { ptr @.str.5125, i64 3, i64 0 }, ptr %a1149 + %t1150 = call i32 @finch_str_eq(ptr %a1148, ptr %a1149) + %t1151 = icmp ne i32 %t1150, 0 + br i1 %t1151, label %then8079, label %endif8081 +then8079: + %t1152 = load ptr, ptr %a1 + %t1153 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1152) + store { ptr, i64, i64 } %t1153, ptr %a1154 + %t1155 = load ptr, ptr %a1 + %t1156 = load { ptr, i64, i64 }, ptr %a1154 + call void @finch.gen.store(ptr %t1155, { ptr, i64, i64 } { ptr @.str.5126, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5127, i64 15, i64 0 }, { ptr, i64, i64 } %t1156) + %t1157 = load ptr, ptr %a1 + %t1158 = load { ptr, i64, i64 }, ptr %a1154 + store { ptr, i64, i64 } { ptr @.str.5128, i64 32, i64 0 }, ptr %a1160 + store { ptr, i64, i64 } %t1158, ptr %a1161 + call void @finch_str_concat(ptr %a1159, ptr %a1160, ptr %a1161) + %t1162 = load { ptr, i64, i64 }, ptr %a1159 + store { ptr, i64, i64 } %t1162, ptr %a1164 + store { ptr, i64, i64 } { ptr @.str.5129, i64 6, i64 0 }, ptr %a1165 + call void @finch_str_concat(ptr %a1163, ptr %a1164, ptr %a1165) + store { ptr, i64, i64 } %t1162, ptr %a1166 + call void @finch_str_drop(ptr %a1166) + %t1167 = load { ptr, i64, i64 }, ptr %a1163 + %t1168 = load { ptr, i64, i64 }, ptr %a1113 + store { ptr, i64, i64 } %t1167, ptr %a1170 + store { ptr, i64, i64 } %t1168, ptr %a1171 + call void @finch_str_concat(ptr %a1169, ptr %a1170, ptr %a1171) + store { ptr, i64, i64 } %t1167, ptr %a1172 + call void @finch_str_drop(ptr %a1172) + %t1173 = load { ptr, i64, i64 }, ptr %a1169 + store { ptr, i64, i64 } %t1173, ptr %a1175 + store { ptr, i64, i64 } { ptr @.str.5130, i64 1, i64 0 }, ptr %a1176 + call void @finch_str_concat(ptr %a1174, ptr %a1175, ptr %a1176) + store { ptr, i64, i64 } %t1173, ptr %a1177 + call void @finch_str_drop(ptr %a1177) + %t1178 = load { ptr, i64, i64 }, ptr %a1174 + call void @finch.gen.emit(ptr %t1157, { ptr, i64, i64 } %t1178) + store { ptr, i64, i64 } %t1178, ptr %a1179 + call void @finch_str_drop(ptr %a1179) + %t1180 = load ptr, ptr %a1 + %t1181 = load { ptr, i64, i64 }, ptr %a1154 + %t1182 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1180, { ptr, i64, i64 } { ptr @.str.5131, i64 17, i64 0 }, { ptr, i64, i64 } %t1181) + %t1183 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1182, 0 + %t1184 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1184, ptr %a1185 + call void @finch.copy.S_ast_Type(ptr %a1186, ptr %a1185) + %t1187 = load %S.ast.Type, ptr %a1186 + %t1188 = insertvalue %S.gen.Val %t1183, %S.ast.Type %t1187, 1 + call void @finch_str_drop(ptr %a1154) + call void @finch_str_drop(ptr %a1113) + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1188 +endif8081: + %t1189 = load { ptr, i64, i64 }, ptr %a1113 + store { ptr, i64, i64 } %t1189, ptr %a1190 + call void @finch_str_copy(ptr %a1191, ptr %a1190) + %t1192 = load { ptr, i64, i64 }, ptr %a1191 + %t1193 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1192, 0 + %t1194 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1194, ptr %a1195 + call void @finch.copy.S_ast_Type(ptr %a1196, ptr %a1195) + %t1197 = load %S.ast.Type, ptr %a1196 + %t1198 = insertvalue %S.gen.Val %t1193, %S.ast.Type %t1197, 1 + call void @finch_str_drop(ptr %a1113) + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1198 +} + +define internal void @finch.gen.releaseAll(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a12 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 0, ptr %a4 + br label %each.cond8082 +each.cond8082: + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = load i64, ptr %a4 + %t8 = icmp slt i64 %t7, %t6 + br i1 %t8, label %each.body8083, label %each.end8085 +each.body8083: + %t9 = load ptr, ptr %a2 + %t10 = getelementptr inbounds %S.gen.Val, ptr %t9, i64 %t7 + %t11 = load %S.gen.Val, ptr %t10 + store %S.gen.Val %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = load %S.gen.Val, ptr %a12 + call void @finch.gen.release(ptr %t13, %S.gen.Val %t14) + br label %each.step8084 +each.step8084: + %t15 = load i64, ptr %a4 + %t16 = add i64 %t15, 1 + store i64 %t16, ptr %a4 + br label %each.cond8082 +each.end8085: + %t17 = load ptr, ptr %a1 + %t18 = load i64, ptr %a3 + call void @finch.gen.heldEnd(ptr %t17, i64 %t18) + ret void +} + +define internal i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca i64, align 16 + %a18 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.5132, i64 6, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.5133, i64 6, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.5134, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.5135, i64 4, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.5136, i64 5, i64 0 }, ptr %t8 + %t9 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t10 = insertvalue { ptr, i64, i64 } %t9, i64 5, 1 + %t11 = insertvalue { ptr, i64, i64 } %t10, i64 5, 2 + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 + %t14 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a15 + %t16 = load i64, ptr %t13 + %t17 = load ptr, ptr %a12 + store i64 0, ptr %a18 + br label %find.cond8086 +find.cond8086: + %t19 = load i64, ptr %a18 + %t20 = icmp slt i64 %t19, %t16 + br i1 %t20, label %find.body8087, label %find.end8090 +find.body8087: + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t19 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } %t14, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %find.hit8088, label %find.next8089 +find.hit8088: + store i64 %t19, ptr %a15 + br label %find.end8090 +find.next8089: + %t27 = add i64 %t19, 1 + store i64 %t27, ptr %a18 + br label %find.cond8086 +find.end8090: + %t28 = load i64, ptr %a15 + %t29 = icmp sge i64 %t28, 0 + call void @finch.drop.arr_str(ptr %a12) + ret i1 %t29 +} + +define internal { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca i64, align 16 + %a65 = alloca i64, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca i64, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.5137, i64 6, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.5138, i64 4, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.5139, i64 7, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.5140, i64 5, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.5141, i64 5, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.5142, i64 7, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.5143, i64 4, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.5144, i64 3, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.5145, i64 3, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.5146, i64 3, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.5147, i64 5, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.5148, i64 4, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.5149, i64 6, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.5150, i64 4, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.5151, i64 5, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.5152, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 + store { ptr, i64, i64 } { ptr @.str.5153, i64 4, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 + store { ptr, i64, i64 } { ptr @.str.5154, i64 6, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 + store { ptr, i64, i64 } { ptr @.str.5155, i64 6, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 + store { ptr, i64, i64 } { ptr @.str.5156, i64 6, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 + store { ptr, i64, i64 } { ptr @.str.5157, i64 4, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 + store { ptr, i64, i64 } { ptr @.str.5158, i64 5, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 + store { ptr, i64, i64 } { ptr @.str.5159, i64 6, i64 0 }, ptr %t26 + %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t28 = insertvalue { ptr, i64, i64 } %t27, i64 23, 1 + %t29 = insertvalue { ptr, i64, i64 } %t28, i64 23, 2 + store { ptr, i64, i64 } %t29, ptr %a30 + %t31 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t32 = call ptr @finch_alloc(i64 %t31) + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 0 + store { ptr, i64, i64 } { ptr @.str.5160, i64 7, i64 0 }, ptr %t33 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 1 + store { ptr, i64, i64 } { ptr @.str.5161, i64 7, i64 0 }, ptr %t34 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 2 + store { ptr, i64, i64 } { ptr @.str.5162, i64 7, i64 0 }, ptr %t35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 3 + store { ptr, i64, i64 } { ptr @.str.5163, i64 7, i64 0 }, ptr %t36 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 4 + store { ptr, i64, i64 } { ptr @.str.5164, i64 7, i64 0 }, ptr %t37 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 5 + store { ptr, i64, i64 } { ptr @.str.5165, i64 7, i64 0 }, ptr %t38 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 6 + store { ptr, i64, i64 } { ptr @.str.5166, i64 6, i64 0 }, ptr %t39 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 7 + store { ptr, i64, i64 } { ptr @.str.5167, i64 6, i64 0 }, ptr %t40 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 8 + store { ptr, i64, i64 } { ptr @.str.5168, i64 6, i64 0 }, ptr %t41 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 9 + store { ptr, i64, i64 } { ptr @.str.5169, i64 6, i64 0 }, ptr %t42 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 10 + store { ptr, i64, i64 } { ptr @.str.5170, i64 6, i64 0 }, ptr %t43 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 11 + store { ptr, i64, i64 } { ptr @.str.5171, i64 6, i64 0 }, ptr %t44 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 12 + store { ptr, i64, i64 } { ptr @.str.5172, i64 8, i64 0 }, ptr %t45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 13 + store { ptr, i64, i64 } { ptr @.str.5173, i64 8, i64 0 }, ptr %t46 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 14 + store { ptr, i64, i64 } { ptr @.str.5174, i64 8, i64 0 }, ptr %t47 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 15 + store { ptr, i64, i64 } { ptr @.str.5175, i64 8, i64 0 }, ptr %t48 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 16 + store { ptr, i64, i64 } { ptr @.str.5176, i64 8, i64 0 }, ptr %t49 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 17 + store { ptr, i64, i64 } { ptr @.str.5177, i64 8, i64 0 }, ptr %t50 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 18 + store { ptr, i64, i64 } { ptr @.str.5178, i64 8, i64 0 }, ptr %t51 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 19 + store { ptr, i64, i64 } { ptr @.str.5179, i64 8, i64 0 }, ptr %t52 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 20 + store { ptr, i64, i64 } { ptr @.str.5180, i64 6, i64 0 }, ptr %t53 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 21 + store { ptr, i64, i64 } { ptr @.str.5181, i64 8, i64 0 }, ptr %t54 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 22 + store { ptr, i64, i64 } { ptr @.str.5182, i64 8, i64 0 }, ptr %t55 + %t56 = insertvalue { ptr, i64, i64 } undef, ptr %t32, 0 + %t57 = insertvalue { ptr, i64, i64 } %t56, i64 23, 1 + %t58 = insertvalue { ptr, i64, i64 } %t57, i64 23, 2 + store { ptr, i64, i64 } %t58, ptr %a59 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t61 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a62 + %t63 = load i64, ptr %t60 + %t64 = load ptr, ptr %a30 + store i64 0, ptr %a65 + br label %find.cond8091 +find.cond8091: + %t66 = load i64, ptr %a65 + %t67 = icmp slt i64 %t66, %t63 + br i1 %t67, label %find.body8092, label %find.end8095 +find.body8092: + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t66 + %t69 = load { ptr, i64, i64 }, ptr %t68 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } %t61, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %find.hit8093, label %find.next8094 +find.hit8093: + store i64 %t66, ptr %a62 + br label %find.end8095 +find.next8094: + %t74 = add i64 %t66, 1 + store i64 %t74, ptr %a65 + br label %find.cond8091 +find.end8095: + %t75 = load i64, ptr %a62 + store i64 %t75, ptr %a76 + %t77 = load i64, ptr %a76 + %t78 = icmp slt i64 %t77, 0 + br i1 %t78, label %then8096, label %endif8098 +then8096: + call void @finch.drop.arr_str(ptr %a59) + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } { ptr @.str.5183, i64 0, i64 0 } +endif8098: + %t79 = load i64, ptr %a76 + %t80 = load { ptr, i64, i64 }, ptr %a59 + %t81 = extractvalue { ptr, i64, i64 } %t80, 1 + %t82 = icmp uge i64 %t79, %t81 + br i1 %t82, label %range8099, label %inrange8100 +range8099: + call void @finch_panic_index(ptr @.str.5185, i64 4830, i64 %t79, i64 %t81) + unreachable +inrange8100: + %t83 = extractvalue { ptr, i64, i64 } %t80, 0 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t79 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } { ptr @.str.5184, i64 28, i64 0 }, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.5186, i64 14, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.drop.arr_str(ptr %a59) + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } %t94 +} + +define internal void @finch.drop.S_docs_Doc(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal void @finch.drop.arr_S_docs_Doc(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond8110 +n.cond8110: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body8111, label %n.end8112 +n.body8111: + %t7 = getelementptr inbounds %S.docs.Doc, ptr %t1, i64 %t5 + call void @finch.drop.S_docs_Doc(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond8110 +n.end8112: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal %S.gen.Val @finch.gen.call(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca %S.docs.Doc, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i64, align 16 + %a62 = alloca %S.gen.Val, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca %S.ast.Node, align 16 + %a110 = alloca %S.ast.Node, align 16 + %a112 = alloca %S.ast.Node, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca i64, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca %S.gen.Place, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca %S.gen.Val, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca i1, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a220 = alloca %S.ast.Type, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca %S.ast.Type, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca %S.ast.Type, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca %S.ast.Type, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca %S.ast.Type, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca %S.gen.Val, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a615 = alloca { ptr, i64, i64 }, align 16 + %a616 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a654 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a684 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a686 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a697 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a704 = alloca { ptr, i64, i64 }, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a763 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a766 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a779 = alloca { ptr, i64, i64 }, align 16 + %a780 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a810 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca %S.gen.Val, align 16 + %a832 = alloca i64, align 16 + %a844 = alloca %S.gen.Val, align 16 + %a850 = alloca { ptr, i64, i64 }, align 16 + %a854 = alloca { ptr, i64, i64 }, align 16 + %a861 = alloca { ptr, i64, i64 }, align 16 + %a862 = alloca { ptr, i64, i64 }, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a868 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a878 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a880 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a885 = alloca { ptr, i64, i64 }, align 16 + %a886 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca { ptr, i64, i64 }, align 16 + %a891 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a896 = alloca { ptr, i64, i64 }, align 16 + %a897 = alloca { ptr, i64, i64 }, align 16 + %a899 = alloca { ptr, i64, i64 }, align 16 + %a900 = alloca { ptr, i64, i64 }, align 16 + %a901 = alloca { ptr, i64, i64 }, align 16 + %a902 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a911 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a914 = alloca { ptr, i64, i64 }, align 16 + %a915 = alloca { ptr, i64, i64 }, align 16 + %a916 = alloca { ptr, i64, i64 }, align 16 + %a919 = alloca { ptr, i64, i64 }, align 16 + %a924 = alloca { ptr, i64, i64 }, align 16 + %a932 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a945 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a956 = alloca { ptr, i64, i64 }, align 16 + %a957 = alloca { ptr, i64, i64 }, align 16 + %a958 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a963 = alloca { ptr, i64, i64 }, align 16 + %a970 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a972 = alloca { ptr, i64, i64 }, align 16 + %a974 = alloca { ptr, i64, i64 }, align 16 + %a975 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a977 = alloca { ptr, i64, i64 }, align 16 + %a980 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a986 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca %S.gen.Val, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1007 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1011 = alloca { ptr, i64, i64 }, align 16 + %a1012 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1022 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1025 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1027 = alloca { ptr, i64, i64 }, align 16 + %a1028 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca { ptr, i64, i64 }, align 16 + %a1038 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1049 = alloca { ptr, i64, i64 }, align 16 + %a1050 = alloca { ptr, i64, i64 }, align 16 + %a1051 = alloca { ptr, i64, i64 }, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1054 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1060 = alloca { ptr, i64, i64 }, align 16 + %a1061 = alloca { ptr, i64, i64 }, align 16 + %a1062 = alloca { ptr, i64, i64 }, align 16 + %a1064 = alloca { ptr, i64, i64 }, align 16 + %a1065 = alloca { ptr, i64, i64 }, align 16 + %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1070 = alloca { ptr, i64, i64 }, align 16 + %a1071 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 + %a1075 = alloca { ptr, i64, i64 }, align 16 + %a1076 = alloca { ptr, i64, i64 }, align 16 + %a1078 = alloca { ptr, i64, i64 }, align 16 + %a1079 = alloca { ptr, i64, i64 }, align 16 + %a1080 = alloca { ptr, i64, i64 }, align 16 + %a1081 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca { ptr, i64, i64 }, align 16 + %a1097 = alloca { ptr, i64, i64 }, align 16 + %a1101 = alloca %S.ast.Type, align 16 + %a1108 = alloca { ptr, i64, i64 }, align 16 + %a1109 = alloca { ptr, i64, i64 }, align 16 + %a1110 = alloca { ptr, i64, i64 }, align 16 + %a1112 = alloca { ptr, i64, i64 }, align 16 + %a1113 = alloca { ptr, i64, i64 }, align 16 + %a1114 = alloca { ptr, i64, i64 }, align 16 + %a1115 = alloca { ptr, i64, i64 }, align 16 + %a1118 = alloca { ptr, i64, i64 }, align 16 + %a1119 = alloca { ptr, i64, i64 }, align 16 + %a1123 = alloca %S.ast.Type, align 16 + %a1128 = alloca { ptr, i64, i64 }, align 16 + %a1129 = alloca { ptr, i64, i64 }, align 16 + %a1130 = alloca { ptr, i64, i64 }, align 16 + %a1132 = alloca { ptr, i64, i64 }, align 16 + %a1133 = alloca { ptr, i64, i64 }, align 16 + %a1134 = alloca { ptr, i64, i64 }, align 16 + %a1135 = alloca { ptr, i64, i64 }, align 16 + %a1138 = alloca { ptr, i64, i64 }, align 16 + %a1143 = alloca { ptr, i64, i64 }, align 16 + %a1144 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca %S.gen.Val, align 16 + %a1162 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca { ptr, i64, i64 }, align 16 + %a1166 = alloca { ptr, i64, i64 }, align 16 + %a1167 = alloca { ptr, i64, i64 }, align 16 + %a1169 = alloca { ptr, i64, i64 }, align 16 + %a1170 = alloca { ptr, i64, i64 }, align 16 + %a1171 = alloca { ptr, i64, i64 }, align 16 + %a1172 = alloca { ptr, i64, i64 }, align 16 + %a1177 = alloca { ptr, i64, i64 }, align 16 + %a1178 = alloca { ptr, i64, i64 }, align 16 + %a1179 = alloca { ptr, i64, i64 }, align 16 + %a1180 = alloca { ptr, i64, i64 }, align 16 + %a1181 = alloca { ptr, i64, i64 }, align 16 + %a1183 = alloca { ptr, i64, i64 }, align 16 + %a1184 = alloca { ptr, i64, i64 }, align 16 + %a1185 = alloca { ptr, i64, i64 }, align 16 + %a1186 = alloca { ptr, i64, i64 }, align 16 + %a1188 = alloca { ptr, i64, i64 }, align 16 + %a1191 = alloca { ptr, i64, i64 }, align 16 + %a1192 = alloca { ptr, i64, i64 }, align 16 + %a1193 = alloca { ptr, i64, i64 }, align 16 + %a1195 = alloca { ptr, i64, i64 }, align 16 + %a1196 = alloca { ptr, i64, i64 }, align 16 + %a1197 = alloca { ptr, i64, i64 }, align 16 + %a1198 = alloca { ptr, i64, i64 }, align 16 + %a1201 = alloca { ptr, i64, i64 }, align 16 + %a1202 = alloca { ptr, i64, i64 }, align 16 + %a1206 = alloca %S.ast.Type, align 16 + %a1210 = alloca { ptr, i64, i64 }, align 16 + %a1211 = alloca { ptr, i64, i64 }, align 16 + %a1217 = alloca { ptr, i64, i64 }, align 16 + %a1218 = alloca { ptr, i64, i64 }, align 16 + %a1243 = alloca %S.gen.Val, align 16 + %a1244 = alloca %S.ast.Type, align 16 + %a1245 = alloca %S.gen.Val, align 16 + %a1249 = alloca { ptr, i64, i64 }, align 16 + %a1250 = alloca { ptr, i64, i64 }, align 16 + %a1251 = alloca { ptr, i64, i64 }, align 16 + %a1253 = alloca { ptr, i64, i64 }, align 16 + %a1254 = alloca { ptr, i64, i64 }, align 16 + %a1255 = alloca { ptr, i64, i64 }, align 16 + %a1256 = alloca { ptr, i64, i64 }, align 16 + %a1259 = alloca { ptr, i64, i64 }, align 16 + %a1260 = alloca { ptr, i64, i64 }, align 16 + %a1263 = alloca { ptr, i64, i64 }, align 16 + %a1266 = alloca { ptr, i64, i64 }, align 16 + %a1267 = alloca { ptr, i64, i64 }, align 16 + %a1268 = alloca { ptr, i64, i64 }, align 16 + %a1270 = alloca { ptr, i64, i64 }, align 16 + %a1271 = alloca { ptr, i64, i64 }, align 16 + %a1272 = alloca { ptr, i64, i64 }, align 16 + %a1273 = alloca { ptr, i64, i64 }, align 16 + %a1275 = alloca { ptr, i64, i64 }, align 16 + %a1279 = alloca { ptr, i64, i64 }, align 16 + %a1280 = alloca { ptr, i64, i64 }, align 16 + %a1285 = alloca %S.gen.Val, align 16 + %a1303 = alloca %S.gen.Val, align 16 + %a1306 = alloca { ptr, i64, i64 }, align 16 + %a1309 = alloca { ptr, i64, i64 }, align 16 + %a1310 = alloca { ptr, i64, i64 }, align 16 + %a1311 = alloca { ptr, i64, i64 }, align 16 + %a1313 = alloca { ptr, i64, i64 }, align 16 + %a1314 = alloca { ptr, i64, i64 }, align 16 + %a1315 = alloca { ptr, i64, i64 }, align 16 + %a1316 = alloca { ptr, i64, i64 }, align 16 + %a1321 = alloca { ptr, i64, i64 }, align 16 + %a1322 = alloca { ptr, i64, i64 }, align 16 + %a1323 = alloca { ptr, i64, i64 }, align 16 + %a1324 = alloca { ptr, i64, i64 }, align 16 + %a1325 = alloca { ptr, i64, i64 }, align 16 + %a1327 = alloca { ptr, i64, i64 }, align 16 + %a1328 = alloca { ptr, i64, i64 }, align 16 + %a1329 = alloca { ptr, i64, i64 }, align 16 + %a1330 = alloca { ptr, i64, i64 }, align 16 + %a1332 = alloca { ptr, i64, i64 }, align 16 + %a1343 = alloca { ptr, i64, i64 }, align 16 + %a1344 = alloca { ptr, i64, i64 }, align 16 + %a1359 = alloca %S.gen.Val, align 16 + %a1365 = alloca { ptr, i64, i64 }, align 16 + %a1366 = alloca { ptr, i64, i64 }, align 16 + %a1367 = alloca { ptr, i64, i64 }, align 16 + %a1368 = alloca { ptr, i64, i64 }, align 16 + %a1370 = alloca { ptr, i64, i64 }, align 16 + %a1371 = alloca { ptr, i64, i64 }, align 16 + %a1372 = alloca { ptr, i64, i64 }, align 16 + %a1373 = alloca { ptr, i64, i64 }, align 16 + %a1376 = alloca { ptr, i64, i64 }, align 16 + %a1377 = alloca { ptr, i64, i64 }, align 16 + %a1387 = alloca { ptr, i64, i64 }, align 16 + %a1388 = alloca { ptr, i64, i64 }, align 16 + %a1390 = alloca { ptr, i64, i64 }, align 16 + %a1391 = alloca { ptr, i64, i64 }, align 16 + %a1399 = alloca { ptr, i64, i64 }, align 16 + %a1400 = alloca { ptr, i64, i64 }, align 16 + %a1415 = alloca %S.gen.Val, align 16 + %a1419 = alloca { ptr, i64, i64 }, align 16 + %a1420 = alloca { ptr, i64, i64 }, align 16 + %a1449 = alloca { ptr, i64, i64 }, align 16 + %a1452 = alloca { ptr, i64, i64 }, align 16 + %a1457 = alloca { ptr, i64, i64 }, align 16 + %a1458 = alloca { ptr, i64, i64 }, align 16 + %a1459 = alloca { ptr, i64, i64 }, align 16 + %a1461 = alloca { ptr, i64, i64 }, align 16 + %a1462 = alloca { ptr, i64, i64 }, align 16 + %a1463 = alloca { ptr, i64, i64 }, align 16 + %a1464 = alloca { ptr, i64, i64 }, align 16 + %a1467 = alloca { ptr, i64, i64 }, align 16 + %a1470 = alloca { ptr, i64, i64 }, align 16 + %a1491 = alloca { ptr, i64, i64 }, align 16 + %a1492 = alloca { ptr, i64, i64 }, align 16 + %a1493 = alloca { ptr, i64, i64 }, align 16 + %a1495 = alloca { ptr, i64, i64 }, align 16 + %a1496 = alloca { ptr, i64, i64 }, align 16 + %a1497 = alloca { ptr, i64, i64 }, align 16 + %a1498 = alloca { ptr, i64, i64 }, align 16 + %a1500 = alloca { ptr, i64, i64 }, align 16 + %a1510 = alloca i64, align 16 + %a1521 = alloca { ptr, i64, i64 }, align 16 + %a1522 = alloca { ptr, i64, i64 }, align 16 + %a1523 = alloca { ptr, i64, i64 }, align 16 + %a1525 = alloca { ptr, i64, i64 }, align 16 + %a1526 = alloca { ptr, i64, i64 }, align 16 + %a1527 = alloca { ptr, i64, i64 }, align 16 + %a1528 = alloca { ptr, i64, i64 }, align 16 + %a1530 = alloca { ptr, i64, i64 }, align 16 + %a1543 = alloca i64, align 16 + %a1567 = alloca { ptr, i64, i64 }, align 16 + %a1568 = alloca { ptr, i64, i64 }, align 16 + %a1569 = alloca { ptr, i64, i64 }, align 16 + %a1571 = alloca { ptr, i64, i64 }, align 16 + %a1572 = alloca { ptr, i64, i64 }, align 16 + %a1573 = alloca { ptr, i64, i64 }, align 16 + %a1574 = alloca { ptr, i64, i64 }, align 16 + %a1577 = alloca { ptr, i64, i64 }, align 16 + %a1578 = alloca { ptr, i64, i64 }, align 16 + %a1579 = alloca { ptr, i64, i64 }, align 16 + %a1580 = alloca { ptr, i64, i64 }, align 16 + %a1582 = alloca { ptr, i64, i64 }, align 16 + %a1583 = alloca { ptr, i64, i64 }, align 16 + %a1584 = alloca { ptr, i64, i64 }, align 16 + %a1585 = alloca { ptr, i64, i64 }, align 16 + %a1587 = alloca { ptr, i64, i64 }, align 16 + %a1588 = alloca { ptr, i64, i64 }, align 16 + %a1591 = alloca i64, align 16 + %a1599 = alloca %S.ast.Type, align 16 + %a1620 = alloca %S.ast.Type, align 16 + %a1641 = alloca i64, align 16 + %a1654 = alloca %S.gen.StructDef, align 16 + %a1655 = alloca %S.gen.StructDef, align 16 + %a1657 = alloca %S.gen.StructDef, align 16 + %a1685 = alloca %S.ast.Node, align 16 + %a1686 = alloca %S.ast.Node, align 16 + %a1688 = alloca %S.ast.Node, align 16 + %a1697 = alloca { ptr, i64, i64 }, align 16 + %a1698 = alloca { ptr, i64, i64 }, align 16 + %a1699 = alloca { ptr, i64, i64 }, align 16 + %a1701 = alloca { ptr, i64, i64 }, align 16 + %a1702 = alloca { ptr, i64, i64 }, align 16 + %a1703 = alloca { ptr, i64, i64 }, align 16 + %a1704 = alloca { ptr, i64, i64 }, align 16 + %a1708 = alloca { ptr, i64, i64 }, align 16 + %a1709 = alloca { ptr, i64, i64 }, align 16 + %a1711 = alloca { ptr, i64, i64 }, align 16 + %a1712 = alloca { ptr, i64, i64 }, align 16 + %a1713 = alloca { ptr, i64, i64 }, align 16 + %a1714 = alloca { ptr, i64, i64 }, align 16 + %a1715 = alloca { ptr, i64, i64 }, align 16 + %a1717 = alloca { ptr, i64, i64 }, align 16 + %a1718 = alloca { ptr, i64, i64 }, align 16 + %a1719 = alloca { ptr, i64, i64 }, align 16 + %a1720 = alloca { ptr, i64, i64 }, align 16 + %a1737 = alloca { ptr, i64, i64 }, align 16 + %a1753 = alloca i64, align 16 + %a1765 = alloca { ptr, i64, i64 }, align 16 + %a1775 = alloca { ptr, i64, i64 }, align 16 + %a1778 = alloca { ptr, i64, i64 }, align 16 + %a1779 = alloca { ptr, i64, i64 }, align 16 + %a1806 = alloca { ptr, i64, i64 }, align 16 + %a1807 = alloca { ptr, i64, i64 }, align 16 + %a1808 = alloca { ptr, i64, i64 }, align 16 + %a1810 = alloca { ptr, i64, i64 }, align 16 + %a1811 = alloca { ptr, i64, i64 }, align 16 + %a1812 = alloca { ptr, i64, i64 }, align 16 + %a1813 = alloca { ptr, i64, i64 }, align 16 + %a1815 = alloca { ptr, i64, i64 }, align 16 + %a1819 = alloca { ptr, i64, i64 }, align 16 + %a1820 = alloca { ptr, i64, i64 }, align 16 + %a1821 = alloca { ptr, i64, i64 }, align 16 + %a1823 = alloca { ptr, i64, i64 }, align 16 + %a1824 = alloca { ptr, i64, i64 }, align 16 + %a1825 = alloca { ptr, i64, i64 }, align 16 + %a1826 = alloca { ptr, i64, i64 }, align 16 + %a1830 = alloca { ptr, i64, i64 }, align 16 + %a1831 = alloca { ptr, i64, i64 }, align 16 + %a1832 = alloca { ptr, i64, i64 }, align 16 + %a1833 = alloca { ptr, i64, i64 }, align 16 + %a1834 = alloca { ptr, i64, i64 }, align 16 + %a1836 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic8101, label %ok8102 +panic8101: + call void @finch_panic(ptr @.str.5187, i64 4835, ptr @.str.5188) + unreachable +ok8102: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 + %t12 = load i1, ptr %t11 + br label %logic.from8103 +logic.from8103: + br i1 %t12, label %logic.rhs8104, label %logic.end8105 +logic.rhs8104: + %t13 = load { ptr, i64, i64 }, ptr %a8 + %t14 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t13) + br label %logic.rend8106 +logic.rend8106: + br label %logic.end8105 +logic.end8105: + %t15 = phi i1 [ false, %logic.from8103 ], [ %t14, %logic.rend8106 ] + br i1 %t15, label %then8107, label %endif8109 +then8107: + %t16 = call { ptr, i64, i64 } @finch.docs.builtins() + %t17 = load { ptr, i64, i64 }, ptr %a8 + %t18 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t16, { ptr, i64, i64 } %t17) + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch.drop.arr_S_docs_Doc(ptr %a19) + store %S.docs.Doc %t18, ptr %a20 + %t21 = getelementptr inbounds %S.docs.Doc, ptr %a20, i32 0, i32 0 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = icmp sgt i64 %t23, 0 + br i1 %t24, label %then8113, label %endif8115 +then8113: + %t25 = load ptr, ptr %a1 + %t26 = load %S.ast.Node, ptr %a2 + %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t28 = load i64, ptr %t27 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = load %S.docs.Doc, ptr %a20 + %t32 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t31) + call void @finch.gen.noteRef(ptr %t25, %S.ast.Node %t26, i64 %t28, i64 %t30, { ptr, i64, i64 } %t32, { ptr, i64, i64 } { ptr @.str.5189, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + br label %endif8115 +endif8115: + call void @finch.drop.S_docs_Doc(ptr %a20) + br label %endif8109 +endif8109: + %t34 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.5190, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then8116, label %endif8118 +then8116: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.5191, i64 86, i64 0 }) + br label %endif8118 +endif8118: + %t41 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.5192, i64 5, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br i1 %t45, label %then8119, label %endif8121 +then8119: + %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 + %t48 = load i64, ptr %t47 + store i64 0, ptr %a49 + br label %for.cond8122 +for.cond8122: + %t50 = load i64, ptr %a49 + %t51 = icmp slt i64 %t50, %t48 + br i1 %t51, label %for.body8123, label %for.end8125 +for.body8123: + %t52 = load ptr, ptr %a1 + %t53 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t54 = load i64, ptr %a49 + %t55 = load { ptr, i64, i64 }, ptr %t53 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range8126, label %inrange8127 +range8126: + call void @finch_panic_index(ptr @.str.5193, i64 4846, i64 %t54, i64 %t56) + unreachable +inrange8127: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 + %t60 = load %S.ast.Node, ptr %t59 + %t61 = call %S.gen.Val @finch.gen.expr(ptr %t52, %S.ast.Node %t60) + store %S.gen.Val %t61, ptr %a62 + %t63 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 1 + %t64 = getelementptr inbounds %S.ast.Type, ptr %t63, i32 0, i32 0 + %t65 = load { ptr, i64, i64 }, ptr %t64 + store { ptr, i64, i64 } %t65, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.5194, i64 4, i64 0 }, ptr %a67 + %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) + %t69 = icmp ne i32 %t68, 0 + br i1 %t69, label %then8128, label %endif8130 +then8128: + %t70 = load ptr, ptr %a1 + %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t72 = load i64, ptr %a49 + %t73 = load { ptr, i64, i64 }, ptr %t71 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 %t72, %t74 + br i1 %t75, label %range8131, label %inrange8132 +range8131: + call void @finch_panic_index(ptr @.str.5195, i64 4848, i64 %t72, i64 %t74) + unreachable +inrange8132: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 %t72 + %t78 = load %S.ast.Node, ptr %t77 + call void @finch.gen.fail(ptr %t70, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5196, i64 53, i64 0 }) + br label %endif8130 +endif8130: + %t79 = load i64, ptr %a49 + %t80 = icmp sgt i64 %t79, 0 + br i1 %t80, label %then8133, label %endif8135 +then8133: + %t81 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t81, { ptr, i64, i64 } { ptr @.str.5197, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5198, i64 0, i64 0 }) + br label %endif8135 +endif8135: + %t82 = load ptr, ptr %a1 + %t83 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 0 + %t84 = load { ptr, i64, i64 }, ptr %t83 + %t85 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 1 + %t86 = load %S.ast.Type, ptr %t85 + call void @finch.gen.emitPrint(ptr %t82, { ptr, i64, i64 } %t84, %S.ast.Type %t86, i1 false) + %t87 = load ptr, ptr %a1 + %t88 = load %S.gen.Val, ptr %a62 + call void @finch.gen.release(ptr %t87, %S.gen.Val %t88) + call void @finch.drop.S_gen_Val(ptr %a62) + br label %for.step8124 +for.step8124: + %t89 = load i64, ptr %a49 + %t90 = add i64 %t89, 1 + store i64 %t90, ptr %a49 + br label %for.cond8122 +for.end8125: + %t91 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t91, { ptr, i64, i64 } { ptr @.str.5199, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5200, i64 0, i64 0 }) + %t92 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5201, i64 4, i64 0 }) + %t93 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t92, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t93 +endif8121: + %t94 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t94, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.5202, i64 4, i64 0 }, ptr %a96 + %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) + %t98 = icmp ne i32 %t97, 0 + br i1 %t98, label %then8136, label %endif8138 +then8136: + %t99 = load ptr, ptr %a1 + %t100 = load %S.ast.Node, ptr %a2 + %t101 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t99, %S.ast.Node %t100, i64 0, i64 1, { ptr, i64, i64 } %t101) + %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t103 = load { ptr, i64, i64 }, ptr %t102 + %t104 = extractvalue { ptr, i64, i64 } %t103, 1 + %t105 = icmp uge i64 0, %t104 + br i1 %t105, label %range8139, label %inrange8140 +range8139: + call void @finch_panic_index(ptr @.str.5203, i64 4861, i64 0, i64 %t104) + unreachable +inrange8140: + %t106 = extractvalue { ptr, i64, i64 } %t103, 0 + %t107 = getelementptr inbounds %S.ast.Node, ptr %t106, i64 0 + %t108 = load %S.ast.Node, ptr %t107 + store %S.ast.Node %t108, ptr %a109 + call void @finch.copy.S_ast_Node(ptr %a110, ptr %a109) + %t111 = load %S.ast.Node, ptr %a110 + store %S.ast.Node %t111, ptr %a112 + %t113 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t114 = load { ptr, i64, i64 }, ptr %t113 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.5204, i64 3, i64 0 }, ptr %a116 + %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) + %t118 = icmp ne i32 %t117, 0 + br label %logic.from8141 +logic.from8141: + br i1 %t118, label %logic.rhs8142, label %logic.end8143 +logic.rhs8142: + %t119 = load ptr, ptr %a1 + %t120 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %t120 + %t122 = call i64 @finch.gen.lookup(ptr %t119, { ptr, i64, i64 } %t121) + %t123 = icmp slt i64 %t122, 0 + br label %logic.rend8144 +logic.rend8144: + br label %logic.end8143 +logic.end8143: + %t124 = phi i1 [ false, %logic.from8141 ], [ %t123, %logic.rend8144 ] + br i1 %t124, label %then8145, label %endif8147 +then8145: + %t125 = load ptr, ptr %a1 + %t126 = load ptr, ptr %a1 + %t127 = icmp eq ptr %t126, null + br i1 %t127, label %panic8148, label %ok8149 +panic8148: + call void @finch_panic(ptr @.str.5205, i64 4863, ptr @.str.5206) + unreachable +ok8149: + %t128 = getelementptr inbounds %S.gen.Gen, ptr %t126, i32 0, i32 14 + %t129 = load { ptr, i64, i64 }, ptr %t128 + %t130 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 + %t131 = load { ptr, i64, i64 }, ptr %t130 + %t132 = call i64 @finch.gen.findFn(ptr %t125, { ptr, i64, i64 } %t129, { ptr, i64, i64 } %t131) + store i64 %t132, ptr %a133 + %t134 = load i64, ptr %a133 + %t135 = icmp sge i64 %t134, 0 + br i1 %t135, label %then8150, label %endif8152 +then8150: + %t136 = load ptr, ptr %a1 + %t137 = load i64, ptr %a133 + %t138 = load %S.ast.Node, ptr %a112 + %t139 = call { ptr, i64, i64 } @finch.gen.cThunk(ptr %t136, i64 %t137, %S.ast.Node %t138) + %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t141 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5207, i64 3, i64 0 }) + %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 + call void @finch.drop.S_ast_Node(ptr %a112) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t142 +endif8152: + br label %endif8147 +endif8147: + %t143 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t144 = load { ptr, i64, i64 }, ptr %t143 + store { ptr, i64, i64 } %t144, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.5208, i64 3, i64 0 }, ptr %a146 + %t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146) + %t148 = icmp eq i32 %t147, 0 + br label %logic.from8153 +logic.from8153: + br i1 %t148, label %logic.rhs8154, label %logic.end8155 +logic.rhs8154: + %t149 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.5209, i64 6, i64 0 }, ptr %a152 + %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) + %t154 = icmp eq i32 %t153, 0 + br label %logic.rend8156 +logic.rend8156: + br label %logic.end8155 +logic.end8155: + %t155 = phi i1 [ false, %logic.from8153 ], [ %t154, %logic.rend8156 ] + br label %logic.from8157 +logic.from8157: + br i1 %t155, label %logic.rhs8158, label %logic.end8159 +logic.rhs8158: + %t156 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.5210, i64 5, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) + %t161 = icmp eq i32 %t160, 0 + br label %logic.rend8160 +logic.rend8160: + br label %logic.end8159 +logic.end8159: + %t162 = phi i1 [ false, %logic.from8157 ], [ %t161, %logic.rend8160 ] + br i1 %t162, label %then8161, label %endif8163 +then8161: + %t163 = load ptr, ptr %a1 + %t164 = load %S.ast.Node, ptr %a112 + call void @finch.gen.fail(ptr %t163, %S.ast.Node %t164, { ptr, i64, i64 } { ptr @.str.5211, i64 63, i64 0 }) + br label %endif8163 +endif8163: + %t165 = load ptr, ptr %a1 + %t166 = load %S.ast.Node, ptr %a112 + %t167 = call %S.gen.Place @finch.gen.place(ptr %t165, %S.ast.Node %t166, i1 true) + store %S.gen.Place %t167, ptr %a168 + %t169 = getelementptr inbounds %S.gen.Place, ptr %a168, i32 0, i32 0 + %t170 = load { ptr, i64, i64 }, ptr %t169 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_copy(ptr %a172, ptr %a171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + %t174 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t173, 0 + %t175 = getelementptr inbounds %S.gen.Place, ptr %a168, i32 0, i32 1 + %t176 = load %S.ast.Type, ptr %t175 + %t177 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t176) + %t178 = insertvalue %S.gen.Val %t174, %S.ast.Type %t177, 1 + call void @finch.drop.S_gen_Place(ptr %a168) + call void @finch.drop.S_ast_Node(ptr %a112) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t178 +endif8138: + %t179 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t179, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5212, i64 3, i64 0 }, ptr %a181 + %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + br i1 %t183, label %then8164, label %endif8166 +then8164: + %t184 = load ptr, ptr %a1 + %t185 = load %S.ast.Node, ptr %a2 + %t186 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t184, %S.ast.Node %t185, i64 0, i64 1, { ptr, i64, i64 } %t186) + %t187 = load ptr, ptr %a1 + %t188 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t189 = load { ptr, i64, i64 }, ptr %t188 + %t190 = extractvalue { ptr, i64, i64 } %t189, 1 + %t191 = icmp uge i64 0, %t190 + br i1 %t191, label %range8167, label %inrange8168 +range8167: + call void @finch_panic_index(ptr @.str.5213, i64 4876, i64 0, i64 %t190) + unreachable +inrange8168: + %t192 = extractvalue { ptr, i64, i64 } %t189, 0 + %t193 = getelementptr inbounds %S.ast.Node, ptr %t192, i64 0 + %t194 = load %S.ast.Node, ptr %t193 + %t195 = call %S.gen.Val @finch.gen.expr(ptr %t187, %S.ast.Node %t194) + store %S.gen.Val %t195, ptr %a196 + %t197 = load ptr, ptr %a1 + %t198 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t197) + store { ptr, i64, i64 } %t198, ptr %a199 + %t200 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 + %t202 = load { ptr, i64, i64 }, ptr %t201 + store { ptr, i64, i64 } %t202, ptr %a203 + call void @finch_str_copy(ptr %a204, ptr %a203) + %t205 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t205, ptr %a206 + store i1 false, ptr %a207 + %t208 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.5214, i64 3, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br i1 %t212, label %then8169, label %else8170 +then8169: + %t213 = load ptr, ptr %a1 + %t214 = load %S.gen.Val, ptr %a196 + %t215 = call { ptr, i64, i64 } @finch.gen.own(ptr %t213, %S.gen.Val %t214) + %t216 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t215, 0 + %t217 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t218 = load %S.ast.Type, ptr %t217 + store %S.ast.Type %t218, ptr %a219 + call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) + %t221 = load %S.ast.Type, ptr %a220 + %t222 = insertvalue %S.gen.Val %t216, %S.ast.Type %t221, 1 + %t223 = insertvalue %S.gen.Val %t222, i1 true, 2 + call void @finch_str_drop(ptr %a206) + call void @finch_str_drop(ptr %a199) + call void @finch.drop.S_gen_Val(ptr %a196) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t223 +else8170: + %t224 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t225 = load %S.ast.Type, ptr %t224 + %t226 = call i1 @finch.gen.isSigned(%S.ast.Type %t225) + br i1 %t226, label %then8172, label %else8173 +then8172: + %t227 = load ptr, ptr %a1 + %t228 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5215, i64 34, i64 0 }, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.5216, i64 6, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + store { ptr, i64, i64 } %t232, ptr %a236 + call void @finch_str_drop(ptr %a236) + %t237 = load { ptr, i64, i64 }, ptr %a233 + %t238 = load ptr, ptr %a1 + %t239 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t242 = load %S.ast.Type, ptr %t241 + %t243 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5217, i64 3, i64 0 }) + %t244 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t238, { ptr, i64, i64 } %t240, %S.ast.Type %t242, %S.ast.Type %t243) + store %S.ast.Type %t243, ptr %a245 + call void @finch.drop.S_ast_Type(ptr %a245) + store { ptr, i64, i64 } %t237, ptr %a247 + store { ptr, i64, i64 } %t244, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t237, ptr %a249 + call void @finch_str_drop(ptr %a249) + store { ptr, i64, i64 } %t244, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.5218, i64 1, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + call void @finch.gen.emit(ptr %t227, { ptr, i64, i64 } %t256) + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch_str_drop(ptr %a257) + br label %endif8174 +else8173: + %t258 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t259 = load %S.ast.Type, ptr %t258 + %t260 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t259) + br i1 %t260, label %then8175, label %else8176 +then8175: + %t261 = load ptr, ptr %a1 + %t262 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5219, i64 35, i64 0 }, ptr %a264 + store { ptr, i64, i64 } %t262, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t266, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.5220, i64 6, i64 0 }, ptr %a269 + call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) + store { ptr, i64, i64 } %t266, ptr %a270 + call void @finch_str_drop(ptr %a270) + %t271 = load { ptr, i64, i64 }, ptr %a267 + %t272 = load ptr, ptr %a1 + %t273 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t274 = load { ptr, i64, i64 }, ptr %t273 + %t275 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t276 = load %S.ast.Type, ptr %t275 + %t277 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5221, i64 3, i64 0 }) + %t278 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t272, { ptr, i64, i64 } %t274, %S.ast.Type %t276, %S.ast.Type %t277) + store %S.ast.Type %t277, ptr %a279 + call void @finch.drop.S_ast_Type(ptr %a279) + store { ptr, i64, i64 } %t271, ptr %a281 + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) + store { ptr, i64, i64 } %t271, ptr %a283 + call void @finch_str_drop(ptr %a283) + store { ptr, i64, i64 } %t278, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a280 + store { ptr, i64, i64 } %t285, ptr %a287 + store { ptr, i64, i64 } { ptr @.str.5222, i64 1, i64 0 }, ptr %a288 + call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) + store { ptr, i64, i64 } %t285, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a286 + call void @finch.gen.emit(ptr %t261, { ptr, i64, i64 } %t290) + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + br label %endif8177 +else8176: + %t292 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t293 = load %S.ast.Type, ptr %t292 + %t294 = call i1 @finch.gen.isFloat(%S.ast.Type %t293) + br i1 %t294, label %then8178, label %else8179 +then8178: + %t295 = load ptr, ptr %a1 + %t296 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5223, i64 36, i64 0 }, ptr %a298 + store { ptr, i64, i64 } %t296, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } %t300, ptr %a302 + store { ptr, i64, i64 } { ptr @.str.5224, i64 9, i64 0 }, ptr %a303 + call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) + store { ptr, i64, i64 } %t300, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load { ptr, i64, i64 }, ptr %a301 + %t306 = load ptr, ptr %a1 + %t307 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t308 = load { ptr, i64, i64 }, ptr %t307 + %t309 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t310 = load %S.ast.Type, ptr %t309 + %t311 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5225, i64 5, i64 0 }) + %t312 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t306, { ptr, i64, i64 } %t308, %S.ast.Type %t310, %S.ast.Type %t311) + store %S.ast.Type %t311, ptr %a313 + call void @finch.drop.S_ast_Type(ptr %a313) + store { ptr, i64, i64 } %t305, ptr %a315 + store { ptr, i64, i64 } %t312, ptr %a316 + call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) + store { ptr, i64, i64 } %t305, ptr %a317 + call void @finch_str_drop(ptr %a317) + store { ptr, i64, i64 } %t312, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a314 + store { ptr, i64, i64 } %t319, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.5226, i64 1, i64 0 }, ptr %a322 + call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) + store { ptr, i64, i64 } %t319, ptr %a323 + call void @finch_str_drop(ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a320 + call void @finch.gen.emit(ptr %t295, { ptr, i64, i64 } %t324) + store { ptr, i64, i64 } %t324, ptr %a325 + call void @finch_str_drop(ptr %a325) + br label %endif8180 +else8179: + %t326 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t326, ptr %a327 + store { ptr, i64, i64 } { ptr @.str.5227, i64 4, i64 0 }, ptr %a328 + %t329 = call i32 @finch_str_eq(ptr %a327, ptr %a328) + %t330 = icmp ne i32 %t329, 0 + br i1 %t330, label %then8181, label %else8182 +then8181: + %t331 = load ptr, ptr %a1 + %t332 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5228, i64 35, i64 0 }, ptr %a334 + store { ptr, i64, i64 } %t332, ptr %a335 + call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a333 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.5229, i64 13, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t336, ptr %a340 + call void @finch_str_drop(ptr %a340) + %t341 = load { ptr, i64, i64 }, ptr %a337 + %t342 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t343 = load { ptr, i64, i64 }, ptr %t342 + store { ptr, i64, i64 } %t341, ptr %a345 + store { ptr, i64, i64 } %t343, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t341, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = load { ptr, i64, i64 }, ptr %a344 + store { ptr, i64, i64 } %t348, ptr %a350 + store { ptr, i64, i64 } { ptr @.str.5230, i64 1, i64 0 }, ptr %a351 + call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) + store { ptr, i64, i64 } %t348, ptr %a352 + call void @finch_str_drop(ptr %a352) + %t353 = load { ptr, i64, i64 }, ptr %a349 + call void @finch.gen.emit(ptr %t331, { ptr, i64, i64 } %t353) + store { ptr, i64, i64 } %t353, ptr %a354 + call void @finch_str_drop(ptr %a354) + br label %endif8183 +else8182: + %t355 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t355, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.5231, i64 4, i64 0 }, ptr %a357 + %t358 = call i32 @finch_str_eq(ptr %a356, ptr %a357) + %t359 = icmp ne i32 %t358, 0 + br i1 %t359, label %then8184, label %else8185 +then8184: + %t360 = load ptr, ptr %a1 + %t361 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t362 = load { ptr, i64, i64 }, ptr %t361 + store { ptr, i64, i64 } { ptr @.str.5232, i64 8, i64 0 }, ptr %a364 + store { ptr, i64, i64 } %t362, ptr %a365 + call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) + %t366 = load { ptr, i64, i64 }, ptr %a363 + store { ptr, i64, i64 } %t366, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.5233, i64 7, i64 0 }, ptr %a369 + call void @finch_str_concat(ptr %a367, ptr %a368, ptr %a369) + store { ptr, i64, i64 } %t366, ptr %a370 + call void @finch_str_drop(ptr %a370) + %t371 = load { ptr, i64, i64 }, ptr %a367 + %t372 = call { ptr, i64, i64 } @finch.gen.op(ptr %t360, { ptr, i64, i64 } %t371) + store { ptr, i64, i64 } %t371, ptr %a373 + call void @finch_str_drop(ptr %a373) + store { ptr, i64, i64 } %t372, ptr %a374 + %t375 = load ptr, ptr %a1 + %t376 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5234, i64 35, i64 0 }, ptr %a378 + store { ptr, i64, i64 } %t376, ptr %a379 + call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) + %t380 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t380, ptr %a382 + store { ptr, i64, i64 } { ptr @.str.5235, i64 6, i64 0 }, ptr %a383 + call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383) + store { ptr, i64, i64 } %t380, ptr %a384 + call void @finch_str_drop(ptr %a384) + %t385 = load { ptr, i64, i64 }, ptr %a381 + %t386 = load { ptr, i64, i64 }, ptr %a374 + store { ptr, i64, i64 } %t385, ptr %a388 + store { ptr, i64, i64 } %t386, ptr %a389 + call void @finch_str_concat(ptr %a387, ptr %a388, ptr %a389) + store { ptr, i64, i64 } %t385, ptr %a390 + call void @finch_str_drop(ptr %a390) + %t391 = load { ptr, i64, i64 }, ptr %a387 + store { ptr, i64, i64 } %t391, ptr %a393 + store { ptr, i64, i64 } { ptr @.str.5236, i64 1, i64 0 }, ptr %a394 + call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394) + store { ptr, i64, i64 } %t391, ptr %a395 + call void @finch_str_drop(ptr %a395) + %t396 = load { ptr, i64, i64 }, ptr %a392 + call void @finch.gen.emit(ptr %t375, { ptr, i64, i64 } %t396) + store { ptr, i64, i64 } %t396, ptr %a397 + call void @finch_str_drop(ptr %a397) + call void @finch_str_drop(ptr %a374) + br label %endif8186 +else8185: + %t398 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t398, ptr %a399 + store { ptr, i64, i64 } { ptr @.str.5237, i64 3, i64 0 }, ptr %a400 + %t401 = call i32 @finch_str_eq(ptr %a399, ptr %a400) + %t402 = icmp ne i32 %t401, 0 + br i1 %t402, label %then8187, label %else8188 +then8187: + %t403 = load ptr, ptr %a1 + %t404 = load { ptr, i64, i64 }, ptr %a199 + call void @finch.gen.store(ptr %t403, { ptr, i64, i64 } { ptr @.str.5238, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5239, i64 15, i64 0 }, { ptr, i64, i64 } %t404) + %t405 = load ptr, ptr %a1 + %t406 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5240, i64 32, i64 0 }, ptr %a408 + store { ptr, i64, i64 } %t406, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + %t410 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t410, ptr %a412 + store { ptr, i64, i64 } { ptr @.str.5241, i64 6, i64 0 }, ptr %a413 + call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) + store { ptr, i64, i64 } %t410, ptr %a414 + call void @finch_str_drop(ptr %a414) + %t415 = load { ptr, i64, i64 }, ptr %a411 + %t416 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t417 = load { ptr, i64, i64 }, ptr %t416 + store { ptr, i64, i64 } %t415, ptr %a419 + store { ptr, i64, i64 } %t417, ptr %a420 + call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420) + store { ptr, i64, i64 } %t415, ptr %a421 + call void @finch_str_drop(ptr %a421) + %t422 = load { ptr, i64, i64 }, ptr %a418 + store { ptr, i64, i64 } %t422, ptr %a424 + store { ptr, i64, i64 } { ptr @.str.5242, i64 1, i64 0 }, ptr %a425 + call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) + store { ptr, i64, i64 } %t422, ptr %a426 + call void @finch_str_drop(ptr %a426) + %t427 = load { ptr, i64, i64 }, ptr %a423 + call void @finch.gen.emit(ptr %t405, { ptr, i64, i64 } %t427) + store { ptr, i64, i64 } %t427, ptr %a428 + call void @finch_str_drop(ptr %a428) + store i1 true, ptr %a207 + br label %endif8189 +else8188: + %t429 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t429, ptr %a430 + store { ptr, i64, i64 } { ptr @.str.5243, i64 5, i64 0 }, ptr %a431 + %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) + %t433 = icmp ne i32 %t432, 0 + br label %logic.from8190 +logic.from8190: + br i1 %t433, label %logic.rhs8191, label %logic.end8192 +logic.rhs8191: + %t434 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t435 = getelementptr inbounds %S.ast.Type, ptr %t434, i32 0, i32 1 + %t436 = load { ptr, i64, i64 }, ptr %t435 + %t437 = extractvalue { ptr, i64, i64 } %t436, 1 + %t438 = icmp uge i64 0, %t437 + br i1 %t438, label %range8193, label %inrange8194 +range8193: + call void @finch_panic_index(ptr @.str.5244, i64 4898, i64 0, i64 %t437) + unreachable +inrange8194: + %t439 = extractvalue { ptr, i64, i64 } %t436, 0 + %t440 = getelementptr inbounds %S.ast.Type, ptr %t439, i64 0 + %t441 = getelementptr inbounds %S.ast.Type, ptr %t440, i32 0, i32 0 + %t442 = load { ptr, i64, i64 }, ptr %t441 + store { ptr, i64, i64 } %t442, ptr %a443 + store { ptr, i64, i64 } { ptr @.str.5245, i64 2, i64 0 }, ptr %a444 + %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) + %t446 = icmp ne i32 %t445, 0 + br label %logic.from8195 +logic.from8195: + br i1 %t446, label %logic.end8197, label %logic.rhs8196 +logic.rhs8196: + %t447 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t448 = getelementptr inbounds %S.ast.Type, ptr %t447, i32 0, i32 1 + %t449 = load { ptr, i64, i64 }, ptr %t448 + %t450 = extractvalue { ptr, i64, i64 } %t449, 1 + %t451 = icmp uge i64 0, %t450 + br i1 %t451, label %range8198, label %inrange8199 +range8198: + call void @finch_panic_index(ptr @.str.5246, i64 4898, i64 0, i64 %t450) + unreachable +inrange8199: + %t452 = extractvalue { ptr, i64, i64 } %t449, 0 + %t453 = getelementptr inbounds %S.ast.Type, ptr %t452, i64 0 + %t454 = getelementptr inbounds %S.ast.Type, ptr %t453, i32 0, i32 0 + %t455 = load { ptr, i64, i64 }, ptr %t454 + store { ptr, i64, i64 } %t455, ptr %a456 + store { ptr, i64, i64 } { ptr @.str.5247, i64 4, i64 0 }, ptr %a457 + %t458 = call i32 @finch_str_eq(ptr %a456, ptr %a457) + %t459 = icmp ne i32 %t458, 0 + br label %logic.rend8200 +logic.rend8200: + br label %logic.end8197 +logic.end8197: + %t460 = phi i1 [ true, %logic.from8195 ], [ %t459, %logic.rend8200 ] + br label %logic.rend8201 +logic.rend8201: + br label %logic.end8192 +logic.end8192: + %t461 = phi i1 [ false, %logic.from8190 ], [ %t460, %logic.rend8201 ] + br i1 %t461, label %then8202, label %else8203 +then8202: + %t462 = load ptr, ptr %a1 + %t463 = load { ptr, i64, i64 }, ptr %a199 + call void @finch.gen.store(ptr %t462, { ptr, i64, i64 } { ptr @.str.5248, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5249, i64 15, i64 0 }, { ptr, i64, i64 } %t463) + %t464 = load ptr, ptr %a1 + %t465 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5250, i64 36, i64 0 }, ptr %a467 + store { ptr, i64, i64 } %t465, ptr %a468 + call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) + %t469 = load { ptr, i64, i64 }, ptr %a466 + store { ptr, i64, i64 } %t469, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.5251, i64 6, i64 0 }, ptr %a472 + call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) + store { ptr, i64, i64 } %t469, ptr %a473 + call void @finch_str_drop(ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a470 + %t475 = load ptr, ptr %a1 + %t476 = load %S.gen.Val, ptr %a196 + %t477 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t475, %S.gen.Val %t476) + store { ptr, i64, i64 } %t474, ptr %a479 + store { ptr, i64, i64 } %t477, ptr %a480 + call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480) + store { ptr, i64, i64 } %t474, ptr %a481 + call void @finch_str_drop(ptr %a481) + store { ptr, i64, i64 } %t477, ptr %a482 + call void @finch_str_drop(ptr %a482) + %t483 = load { ptr, i64, i64 }, ptr %a478 + store { ptr, i64, i64 } %t483, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.5252, i64 1, i64 0 }, ptr %a486 + call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) + store { ptr, i64, i64 } %t483, ptr %a487 + call void @finch_str_drop(ptr %a487) + %t488 = load { ptr, i64, i64 }, ptr %a484 + call void @finch.gen.emit(ptr %t464, { ptr, i64, i64 } %t488) + store { ptr, i64, i64 } %t488, ptr %a489 + call void @finch_str_drop(ptr %a489) + %t490 = load ptr, ptr %a1 + %t491 = load %S.gen.Val, ptr %a196 + call void @finch.gen.release(ptr %t490, %S.gen.Val %t491) + br label %endif8204 +else8203: + %t492 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t492, ptr %a493 + store { ptr, i64, i64 } { ptr @.str.5253, i64 4, i64 0 }, ptr %a494 + %t495 = call i32 @finch_str_eq(ptr %a493, ptr %a494) + %t496 = icmp ne i32 %t495, 0 + br label %logic.from8205 +logic.from8205: + br i1 %t496, label %logic.end8207, label %logic.rhs8206 +logic.rhs8206: + %t497 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t497, ptr %a498 + store { ptr, i64, i64 } { ptr @.str.5254, i64 4, i64 0 }, ptr %a499 + %t500 = call i32 @finch_str_eq(ptr %a498, ptr %a499) + %t501 = icmp ne i32 %t500, 0 + br label %logic.rend8208 +logic.rend8208: + br label %logic.end8207 +logic.end8207: + %t502 = phi i1 [ true, %logic.from8205 ], [ %t501, %logic.rend8208 ] + br label %logic.from8209 +logic.from8209: + br i1 %t502, label %logic.end8211, label %logic.rhs8210 +logic.rhs8210: + %t503 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t503, ptr %a504 + store { ptr, i64, i64 } { ptr @.str.5255, i64 5, i64 0 }, ptr %a505 + %t506 = call i32 @finch_str_eq(ptr %a504, ptr %a505) + %t507 = icmp ne i32 %t506, 0 + br label %logic.rend8212 +logic.rend8212: + br label %logic.end8211 +logic.end8211: + %t508 = phi i1 [ true, %logic.from8209 ], [ %t507, %logic.rend8212 ] + br label %logic.from8213 +logic.from8213: + br i1 %t508, label %logic.end8215, label %logic.rhs8214 +logic.rhs8214: + %t509 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t509, ptr %a510 + store { ptr, i64, i64 } { ptr @.str.5256, i64 3, i64 0 }, ptr %a511 + %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) + %t513 = icmp ne i32 %t512, 0 + br label %logic.rend8216 +logic.rend8216: + br label %logic.end8215 +logic.end8215: + %t514 = phi i1 [ true, %logic.from8213 ], [ %t513, %logic.rend8216 ] + br label %logic.from8217 +logic.from8217: + br i1 %t514, label %logic.end8219, label %logic.rhs8218 +logic.rhs8218: + %t515 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t515, ptr %a516 + store { ptr, i64, i64 } { ptr @.str.5257, i64 6, i64 0 }, ptr %a517 + %t518 = call i32 @finch_str_eq(ptr %a516, ptr %a517) + %t519 = icmp ne i32 %t518, 0 + br label %logic.rend8220 +logic.rend8220: + br label %logic.end8219 +logic.end8219: + %t520 = phi i1 [ true, %logic.from8217 ], [ %t519, %logic.rend8220 ] + br label %logic.from8221 +logic.from8221: + br i1 %t520, label %logic.end8223, label %logic.rhs8222 +logic.rhs8222: + %t521 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t521, ptr %a522 + store { ptr, i64, i64 } { ptr @.str.5258, i64 4, i64 0 }, ptr %a523 + %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) + %t525 = icmp ne i32 %t524, 0 + br label %logic.rend8224 +logic.rend8224: + br label %logic.end8223 +logic.end8223: + %t526 = phi i1 [ true, %logic.from8221 ], [ %t525, %logic.rend8224 ] + br i1 %t526, label %then8225, label %else8226 +then8225: + %t527 = load ptr, ptr %a1 + %t528 = load { ptr, i64, i64 }, ptr %a199 + call void @finch.gen.store(ptr %t527, { ptr, i64, i64 } { ptr @.str.5259, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5260, i64 15, i64 0 }, { ptr, i64, i64 } %t528) + %t529 = load ptr, ptr %a1 + %t530 = load { ptr, i64, i64 }, ptr %a199 + %t531 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t532 = load { ptr, i64, i64 }, ptr %t531 + %t533 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t534 = load %S.ast.Type, ptr %t533 + call void @finch.gen.emitFormat(ptr %t529, { ptr, i64, i64 } %t530, { ptr, i64, i64 } %t532, %S.ast.Type %t534, i1 false) + %t535 = load ptr, ptr %a1 + %t536 = load %S.gen.Val, ptr %a196 + call void @finch.gen.release(ptr %t535, %S.gen.Val %t536) + br label %endif8227 +else8226: + %t537 = load ptr, ptr %a1 + %t538 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t539 = load { ptr, i64, i64 }, ptr %t538 + %t540 = extractvalue { ptr, i64, i64 } %t539, 1 + %t541 = icmp uge i64 0, %t540 + br i1 %t541, label %range8228, label %inrange8229 +range8228: + call void @finch_panic_index(ptr @.str.5261, i64 4908, i64 0, i64 %t540) + unreachable +inrange8229: + %t542 = extractvalue { ptr, i64, i64 } %t539, 0 + %t543 = getelementptr inbounds %S.ast.Node, ptr %t542, i64 0 + %t544 = load %S.ast.Node, ptr %t543 + %t545 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t546 = load %S.ast.Type, ptr %t545 + %t547 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t546) + store { ptr, i64, i64 } { ptr @.str.5262, i64 11, i64 0 }, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + store { ptr, i64, i64 } %t547, ptr %a551 + call void @finch_str_drop(ptr %a551) + %t552 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t552, ptr %a554 + store { ptr, i64, i64 } { ptr @.str.5263, i64 9, i64 0 }, ptr %a555 + call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) + store { ptr, i64, i64 } %t552, ptr %a556 + call void @finch_str_drop(ptr %a556) + %t557 = load { ptr, i64, i64 }, ptr %a553 + call void @finch.gen.fail(ptr %t537, %S.ast.Node %t544, { ptr, i64, i64 } %t557) + store { ptr, i64, i64 } %t557, ptr %a558 + call void @finch_str_drop(ptr %a558) + br label %endif8227 +endif8227: + br label %endif8204 +endif8204: + br label %endif8189 +endif8189: + br label %endif8186 +endif8186: + br label %endif8183 +endif8183: + br label %endif8180 +endif8180: + br label %endif8177 +endif8177: + br label %endif8174 +endif8174: + br label %endif8171 +endif8171: + %t559 = load ptr, ptr %a1 + %t560 = load { ptr, i64, i64 }, ptr %a199 + %t561 = call { ptr, i64, i64 } @finch.gen.load(ptr %t559, { ptr, i64, i64 } { ptr @.str.5264, i64 17, i64 0 }, { ptr, i64, i64 } %t560) + %t562 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t561, 0 + %t563 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5265, i64 3, i64 0 }) + %t564 = insertvalue %S.gen.Val %t562, %S.ast.Type %t563, 1 + %t565 = load i1, ptr %a207 + %t566 = xor i1 %t565, true + %t567 = insertvalue %S.gen.Val %t564, i1 %t566, 2 + call void @finch_str_drop(ptr %a206) + call void @finch_str_drop(ptr %a199) + call void @finch.drop.S_gen_Val(ptr %a196) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t567 +endif8166: + %t568 = load { ptr, i64, i64 }, ptr %a8 + %t569 = call { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %t568) + store { ptr, i64, i64 } %t569, ptr %a570 + %t571 = getelementptr inbounds { ptr, i64, i64 }, ptr %a570, i32 0, i32 1 + %t572 = load i64, ptr %t571 + %t573 = icmp sgt i64 %t572, 0 + br i1 %t573, label %then8230, label %endif8232 +then8230: + %t574 = load ptr, ptr %a1 + %t575 = load %S.ast.Node, ptr %a2 + %t576 = load { ptr, i64, i64 }, ptr %a570 + %t577 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %t576) + %t578 = call %S.gen.Val @finch.gen.convert(ptr %t574, %S.ast.Node %t575, %S.ast.Type %t577) + store %S.ast.Type %t577, ptr %a579 + call void @finch.drop.S_ast_Type(ptr %a579) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t578 +endif8232: + %t580 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t580, ptr %a581 + store { ptr, i64, i64 } { ptr @.str.5266, i64 9, i64 0 }, ptr %a582 + %t583 = call i32 @finch_str_eq(ptr %a581, ptr %a582) + %t584 = icmp ne i32 %t583, 0 + br label %logic.from8233 +logic.from8233: + br i1 %t584, label %logic.end8235, label %logic.rhs8234 +logic.rhs8234: + %t585 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t585, ptr %a586 + store { ptr, i64, i64 } { ptr @.str.5267, i64 11, i64 0 }, ptr %a587 + %t588 = call i32 @finch_str_eq(ptr %a586, ptr %a587) + %t589 = icmp ne i32 %t588, 0 + br label %logic.rend8236 +logic.rend8236: + br label %logic.end8235 +logic.end8235: + %t590 = phi i1 [ true, %logic.from8233 ], [ %t589, %logic.rend8236 ] + br i1 %t590, label %then8237, label %endif8239 +then8237: + %t591 = load ptr, ptr %a1 + %t592 = load %S.ast.Node, ptr %a2 + %t593 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t591, %S.ast.Node %t592, i64 0, i64 1, { ptr, i64, i64 } %t593) + %t594 = load ptr, ptr %a1 + %t595 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t596 = load { ptr, i64, i64 }, ptr %t595 + %t597 = extractvalue { ptr, i64, i64 } %t596, 1 + %t598 = icmp uge i64 0, %t597 + br i1 %t598, label %range8240, label %inrange8241 +range8240: + call void @finch_panic_index(ptr @.str.5268, i64 4918, i64 0, i64 %t597) + unreachable +inrange8241: + %t599 = extractvalue { ptr, i64, i64 } %t596, 0 + %t600 = getelementptr inbounds %S.ast.Node, ptr %t599, i64 0 + %t601 = load %S.ast.Node, ptr %t600 + %t602 = call %S.gen.Val @finch.gen.strArg(ptr %t594, %S.ast.Node %t601, { ptr, i64, i64 } { ptr @.str.5269, i64 13, i64 0 }) + store %S.gen.Val %t602, ptr %a603 + %t604 = load ptr, ptr %a1 + %t605 = load %S.gen.Val, ptr %a603 + %t606 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t604, %S.gen.Val %t605) + store { ptr, i64, i64 } %t606, ptr %a607 + %t608 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t608, ptr %a609 + store { ptr, i64, i64 } { ptr @.str.5270, i64 11, i64 0 }, ptr %a610 + %t611 = call i32 @finch_str_eq(ptr %a609, ptr %a610) + %t612 = icmp ne i32 %t611, 0 + br i1 %t612, label %then8242, label %endif8244 +then8242: + %t613 = load ptr, ptr %a1 + %t614 = load { ptr, i64, i64 }, ptr %a607 + store { ptr, i64, i64 } { ptr @.str.5271, i64 32, i64 0 }, ptr %a616 + store { ptr, i64, i64 } %t614, ptr %a617 + call void @finch_str_concat(ptr %a615, ptr %a616, ptr %a617) + %t618 = load { ptr, i64, i64 }, ptr %a615 + store { ptr, i64, i64 } %t618, ptr %a620 + store { ptr, i64, i64 } { ptr @.str.5272, i64 1, i64 0 }, ptr %a621 + call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) + store { ptr, i64, i64 } %t618, ptr %a622 + call void @finch_str_drop(ptr %a622) + %t623 = load { ptr, i64, i64 }, ptr %a619 + %t624 = call { ptr, i64, i64 } @finch.gen.op(ptr %t613, { ptr, i64, i64 } %t623) + store { ptr, i64, i64 } %t623, ptr %a625 + call void @finch_str_drop(ptr %a625) + store { ptr, i64, i64 } %t624, ptr %a626 + %t627 = load ptr, ptr %a1 + %t628 = load %S.gen.Val, ptr %a603 + call void @finch.gen.release(ptr %t627, %S.gen.Val %t628) + %t629 = load ptr, ptr %a1 + %t630 = load { ptr, i64, i64 }, ptr %a626 + store { ptr, i64, i64 } { ptr @.str.5273, i64 12, i64 0 }, ptr %a632 + store { ptr, i64, i64 } %t630, ptr %a633 + call void @finch_str_concat(ptr %a631, ptr %a632, ptr %a633) + %t634 = load { ptr, i64, i64 }, ptr %a631 + store { ptr, i64, i64 } %t634, ptr %a636 + store { ptr, i64, i64 } { ptr @.str.5274, i64 3, i64 0 }, ptr %a637 + call void @finch_str_concat(ptr %a635, ptr %a636, ptr %a637) + store { ptr, i64, i64 } %t634, ptr %a638 + call void @finch_str_drop(ptr %a638) + %t639 = load { ptr, i64, i64 }, ptr %a635 + %t640 = call { ptr, i64, i64 } @finch.gen.op(ptr %t629, { ptr, i64, i64 } %t639) + store { ptr, i64, i64 } %t639, ptr %a641 + call void @finch_str_drop(ptr %a641) + %t642 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t640, 0 + %t643 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5275, i64 4, i64 0 }) + %t644 = insertvalue %S.gen.Val %t642, %S.ast.Type %t643, 1 + call void @finch_str_drop(ptr %a626) + call void @finch_str_drop(ptr %a607) + call void @finch.drop.S_gen_Val(ptr %a603) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t644 +endif8244: + %t645 = load ptr, ptr %a1 + %t646 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t645) + store { ptr, i64, i64 } %t646, ptr %a647 + %t648 = load ptr, ptr %a1 + %t649 = icmp eq ptr %t648, null + br i1 %t649, label %panic8245, label %ok8246 +panic8245: + call void @finch_panic(ptr @.str.5276, i64 4926, ptr @.str.5277) + unreachable +ok8246: + %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 41 + %t651 = load { ptr, i64, i64 }, ptr %t650 + %t652 = load %S.ast.Node, ptr %a2 + %t653 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t652) + store { ptr, i64, i64 } %t651, ptr %a654 + store { ptr, i64, i64 } %t653, ptr %a655 + %t656 = call i32 @finch_str_eq(ptr %a654, ptr %a655) + %t657 = icmp ne i32 %t656, 0 + store { ptr, i64, i64 } %t653, ptr %a658 + call void @finch_str_drop(ptr %a658) + br i1 %t657, label %then8247, label %endif8249 +then8247: + %t659 = load ptr, ptr %a1 + %t660 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t659, { ptr, i64, i64 } { ptr @.str.5278, i64 17, i64 0 }) + store { ptr, i64, i64 } %t660, ptr %a661 + %t662 = load ptr, ptr %a1 + %t663 = load { ptr, i64, i64 }, ptr %a647 + call void @finch.gen.store(ptr %t662, { ptr, i64, i64 } { ptr @.str.5279, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5280, i64 15, i64 0 }, { ptr, i64, i64 } %t663) + %t664 = load ptr, ptr %a1 + %t665 = load { ptr, i64, i64 }, ptr %a661 + call void @finch.gen.store(ptr %t664, { ptr, i64, i64 } { ptr @.str.5281, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5282, i64 15, i64 0 }, { ptr, i64, i64 } %t665) + %t666 = load ptr, ptr %a1 + %t667 = load { ptr, i64, i64 }, ptr %a647 + store { ptr, i64, i64 } { ptr @.str.5283, i64 34, i64 0 }, ptr %a669 + store { ptr, i64, i64 } %t667, ptr %a670 + call void @finch_str_concat(ptr %a668, ptr %a669, ptr %a670) + %t671 = load { ptr, i64, i64 }, ptr %a668 + store { ptr, i64, i64 } %t671, ptr %a673 + store { ptr, i64, i64 } { ptr @.str.5284, i64 6, i64 0 }, ptr %a674 + call void @finch_str_concat(ptr %a672, ptr %a673, ptr %a674) + store { ptr, i64, i64 } %t671, ptr %a675 + call void @finch_str_drop(ptr %a675) + %t676 = load { ptr, i64, i64 }, ptr %a672 + %t677 = load { ptr, i64, i64 }, ptr %a607 + store { ptr, i64, i64 } %t676, ptr %a679 + store { ptr, i64, i64 } %t677, ptr %a680 + call void @finch_str_concat(ptr %a678, ptr %a679, ptr %a680) + store { ptr, i64, i64 } %t676, ptr %a681 + call void @finch_str_drop(ptr %a681) + %t682 = load { ptr, i64, i64 }, ptr %a678 + store { ptr, i64, i64 } %t682, ptr %a684 + store { ptr, i64, i64 } { ptr @.str.5285, i64 6, i64 0 }, ptr %a685 + call void @finch_str_concat(ptr %a683, ptr %a684, ptr %a685) + store { ptr, i64, i64 } %t682, ptr %a686 + call void @finch_str_drop(ptr %a686) + %t687 = load { ptr, i64, i64 }, ptr %a683 + %t688 = load { ptr, i64, i64 }, ptr %a661 + store { ptr, i64, i64 } %t687, ptr %a690 + store { ptr, i64, i64 } %t688, ptr %a691 + call void @finch_str_concat(ptr %a689, ptr %a690, ptr %a691) + store { ptr, i64, i64 } %t687, ptr %a692 + call void @finch_str_drop(ptr %a692) + %t693 = load { ptr, i64, i64 }, ptr %a689 + store { ptr, i64, i64 } %t693, ptr %a695 + store { ptr, i64, i64 } { ptr @.str.5286, i64 1, i64 0 }, ptr %a696 + call void @finch_str_concat(ptr %a694, ptr %a695, ptr %a696) + store { ptr, i64, i64 } %t693, ptr %a697 + call void @finch_str_drop(ptr %a697) + %t698 = load { ptr, i64, i64 }, ptr %a694 + %t699 = call { ptr, i64, i64 } @finch.gen.op(ptr %t666, { ptr, i64, i64 } %t698) + store { ptr, i64, i64 } %t698, ptr %a700 + call void @finch_str_drop(ptr %a700) + store { ptr, i64, i64 } %t699, ptr %a701 + %t702 = load ptr, ptr %a1 + %t703 = load { ptr, i64, i64 }, ptr %a701 + store { ptr, i64, i64 } { ptr @.str.5287, i64 12, i64 0 }, ptr %a705 + store { ptr, i64, i64 } %t703, ptr %a706 + call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) + %t707 = load { ptr, i64, i64 }, ptr %a704 + store { ptr, i64, i64 } %t707, ptr %a709 + store { ptr, i64, i64 } { ptr @.str.5288, i64 3, i64 0 }, ptr %a710 + call void @finch_str_concat(ptr %a708, ptr %a709, ptr %a710) + store { ptr, i64, i64 } %t707, ptr %a711 + call void @finch_str_drop(ptr %a711) + %t712 = load { ptr, i64, i64 }, ptr %a708 + %t713 = call { ptr, i64, i64 } @finch.gen.op(ptr %t702, { ptr, i64, i64 } %t712) + store { ptr, i64, i64 } %t712, ptr %a714 + call void @finch_str_drop(ptr %a714) + %t715 = load ptr, ptr %a1 + %t716 = icmp eq ptr %t715, null + br i1 %t716, label %panic8250, label %ok8251 +panic8250: + call void @finch_panic(ptr @.str.5289, i64 4931, ptr @.str.5290) + unreachable +ok8251: + %t717 = getelementptr inbounds %S.gen.Gen, ptr %t715, i32 0, i32 42 + %t718 = load { ptr, i64, i64 }, ptr %t717 + store { ptr, i64, i64 } %t713, ptr %t717 + store { ptr, i64, i64 } %t718, ptr %a719 + call void @finch_str_drop(ptr %a719) + %t720 = load ptr, ptr %a1 + %t721 = load { ptr, i64, i64 }, ptr %a661 + %t722 = call { ptr, i64, i64 } @finch.gen.load(ptr %t720, { ptr, i64, i64 } { ptr @.str.5291, i64 17, i64 0 }, { ptr, i64, i64 } %t721) + %t723 = load ptr, ptr %a1 + %t724 = icmp eq ptr %t723, null + br i1 %t724, label %panic8252, label %ok8253 +panic8252: + call void @finch_panic(ptr @.str.5292, i64 4932, ptr @.str.5293) + unreachable +ok8253: + %t725 = getelementptr inbounds %S.gen.Gen, ptr %t723, i32 0, i32 43 + %t726 = load { ptr, i64, i64 }, ptr %t725 + store { ptr, i64, i64 } %t722, ptr %t725 + store { ptr, i64, i64 } %t726, ptr %a727 + call void @finch_str_drop(ptr %a727) + %t728 = load ptr, ptr %a1 + %t729 = load %S.gen.Val, ptr %a603 + call void @finch.gen.release(ptr %t728, %S.gen.Val %t729) + %t730 = load ptr, ptr %a1 + %t731 = load { ptr, i64, i64 }, ptr %a647 + %t732 = call { ptr, i64, i64 } @finch.gen.load(ptr %t730, { ptr, i64, i64 } { ptr @.str.5294, i64 17, i64 0 }, { ptr, i64, i64 } %t731) + %t733 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t732, 0 + %t734 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5295, i64 3, i64 0 }) + %t735 = insertvalue %S.gen.Val %t733, %S.ast.Type %t734, 1 + %t736 = insertvalue %S.gen.Val %t735, i1 true, 2 + call void @finch_str_drop(ptr %a701) + call void @finch_str_drop(ptr %a661) + call void @finch_str_drop(ptr %a647) + call void @finch_str_drop(ptr %a607) + call void @finch.drop.S_gen_Val(ptr %a603) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t736 +endif8249: + %t737 = load ptr, ptr %a1 + %t738 = load ptr, ptr %a1 + %t739 = icmp eq ptr %t738, null + br i1 %t739, label %panic8254, label %ok8255 +panic8254: + call void @finch_panic(ptr @.str.5296, i64 4936, ptr @.str.5297) + unreachable +ok8255: + %t740 = getelementptr inbounds %S.gen.Gen, ptr %t738, i32 0, i32 1 + %t741 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t742 = load i64, ptr %t741 + %t743 = load { ptr, i64, i64 }, ptr %t740 + %t744 = extractvalue { ptr, i64, i64 } %t743, 1 + %t745 = icmp uge i64 %t742, %t744 + br i1 %t745, label %range8256, label %inrange8257 +range8256: + call void @finch_panic_index(ptr @.str.5298, i64 4936, i64 %t742, i64 %t744) + unreachable +inrange8257: + %t746 = extractvalue { ptr, i64, i64 } %t743, 0 + %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i64 %t742 + %t748 = load { ptr, i64, i64 }, ptr %t747 + %t749 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t737, { ptr, i64, i64 } %t748) + store { ptr, i64, i64 } %t749, ptr %a750 + %t751 = load ptr, ptr %a1 + %t752 = load { ptr, i64, i64 }, ptr %a647 + store { ptr, i64, i64 } { ptr @.str.5299, i64 31, i64 0 }, ptr %a754 + store { ptr, i64, i64 } %t752, ptr %a755 + call void @finch_str_concat(ptr %a753, ptr %a754, ptr %a755) + %t756 = load { ptr, i64, i64 }, ptr %a753 + store { ptr, i64, i64 } %t756, ptr %a758 + store { ptr, i64, i64 } { ptr @.str.5300, i64 6, i64 0 }, ptr %a759 + call void @finch_str_concat(ptr %a757, ptr %a758, ptr %a759) + store { ptr, i64, i64 } %t756, ptr %a760 + call void @finch_str_drop(ptr %a760) + %t761 = load { ptr, i64, i64 }, ptr %a757 + %t762 = load { ptr, i64, i64 }, ptr %a607 + store { ptr, i64, i64 } %t761, ptr %a764 + store { ptr, i64, i64 } %t762, ptr %a765 + call void @finch_str_concat(ptr %a763, ptr %a764, ptr %a765) + store { ptr, i64, i64 } %t761, ptr %a766 + call void @finch_str_drop(ptr %a766) + %t767 = load { ptr, i64, i64 }, ptr %a763 + store { ptr, i64, i64 } %t767, ptr %a769 + store { ptr, i64, i64 } { ptr @.str.5301, i64 6, i64 0 }, ptr %a770 + call void @finch_str_concat(ptr %a768, ptr %a769, ptr %a770) + store { ptr, i64, i64 } %t767, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a768 + %t773 = load { ptr, i64, i64 }, ptr %a750 + store { ptr, i64, i64 } %t772, ptr %a775 + store { ptr, i64, i64 } %t773, ptr %a776 + call void @finch_str_concat(ptr %a774, ptr %a775, ptr %a776) + store { ptr, i64, i64 } %t772, ptr %a777 + call void @finch_str_drop(ptr %a777) + %t778 = load { ptr, i64, i64 }, ptr %a774 + store { ptr, i64, i64 } %t778, ptr %a780 + store { ptr, i64, i64 } { ptr @.str.5302, i64 6, i64 0 }, ptr %a781 + call void @finch_str_concat(ptr %a779, ptr %a780, ptr %a781) + store { ptr, i64, i64 } %t778, ptr %a782 + call void @finch_str_drop(ptr %a782) + %t783 = load { ptr, i64, i64 }, ptr %a779 + %t784 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t785 = load i64, ptr %t784 + call void @finch_str_from_int(ptr %a786, i64 %t785) + %t787 = load { ptr, i64, i64 }, ptr %a786 + store { ptr, i64, i64 } %t783, ptr %a789 + store { ptr, i64, i64 } %t787, ptr %a790 + call void @finch_str_concat(ptr %a788, ptr %a789, ptr %a790) + store { ptr, i64, i64 } %t783, ptr %a791 + call void @finch_str_drop(ptr %a791) + store { ptr, i64, i64 } %t787, ptr %a792 + call void @finch_str_drop(ptr %a792) + %t793 = load { ptr, i64, i64 }, ptr %a788 + store { ptr, i64, i64 } %t793, ptr %a795 + store { ptr, i64, i64 } { ptr @.str.5303, i64 1, i64 0 }, ptr %a796 + call void @finch_str_concat(ptr %a794, ptr %a795, ptr %a796) + store { ptr, i64, i64 } %t793, ptr %a797 + call void @finch_str_drop(ptr %a797) + %t798 = load { ptr, i64, i64 }, ptr %a794 + call void @finch.gen.emit(ptr %t751, { ptr, i64, i64 } %t798) + store { ptr, i64, i64 } %t798, ptr %a799 + call void @finch_str_drop(ptr %a799) + %t800 = load ptr, ptr %a1 + %t801 = load %S.gen.Val, ptr %a603 + call void @finch.gen.release(ptr %t800, %S.gen.Val %t801) + %t802 = load ptr, ptr %a1 + %t803 = load { ptr, i64, i64 }, ptr %a647 + %t804 = call { ptr, i64, i64 } @finch.gen.load(ptr %t802, { ptr, i64, i64 } { ptr @.str.5304, i64 17, i64 0 }, { ptr, i64, i64 } %t803) + %t805 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t804, 0 + %t806 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5305, i64 3, i64 0 }) + %t807 = insertvalue %S.gen.Val %t805, %S.ast.Type %t806, 1 + %t808 = insertvalue %S.gen.Val %t807, i1 true, 2 + call void @finch_str_drop(ptr %a750) + call void @finch_str_drop(ptr %a647) + call void @finch_str_drop(ptr %a607) + call void @finch.drop.S_gen_Val(ptr %a603) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t808 +endif8239: + %t809 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t809, ptr %a810 + store { ptr, i64, i64 } { ptr @.str.5306, i64 10, i64 0 }, ptr %a811 + %t812 = call i32 @finch_str_eq(ptr %a810, ptr %a811) + %t813 = icmp ne i32 %t812, 0 + br i1 %t813, label %then8258, label %endif8260 +then8258: + %t814 = load ptr, ptr %a1 + %t815 = load %S.ast.Node, ptr %a2 + %t816 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t814, %S.ast.Node %t815, i64 0, i64 2, { ptr, i64, i64 } %t816) + %t817 = load ptr, ptr %a1 + %t818 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t819 = load { ptr, i64, i64 }, ptr %t818 + %t820 = extractvalue { ptr, i64, i64 } %t819, 1 + %t821 = icmp uge i64 0, %t820 + br i1 %t821, label %range8261, label %inrange8262 +range8261: + call void @finch_panic_index(ptr @.str.5307, i64 4943, i64 0, i64 %t820) + unreachable +inrange8262: + %t822 = extractvalue { ptr, i64, i64 } %t819, 0 + %t823 = getelementptr inbounds %S.ast.Node, ptr %t822, i64 0 + %t824 = load %S.ast.Node, ptr %t823 + %t825 = call %S.gen.Val @finch.gen.strArg(ptr %t817, %S.ast.Node %t824, { ptr, i64, i64 } { ptr @.str.5308, i64 13, i64 0 }) + store %S.gen.Val %t825, ptr %a826 + %t827 = load ptr, ptr %a1 + %t828 = icmp eq ptr %t827, null + br i1 %t828, label %panic8263, label %ok8264 +panic8263: + call void @finch_panic(ptr @.str.5309, i64 4944, ptr @.str.5310) + unreachable +ok8264: + %t829 = getelementptr inbounds %S.gen.Gen, ptr %t827, i32 0, i32 11 + %t830 = getelementptr inbounds { ptr, i64, i64 }, ptr %t829, i32 0, i32 1 + %t831 = load i64, ptr %t830 + store i64 %t831, ptr %a832 + %t833 = load ptr, ptr %a1 + %t834 = load %S.gen.Val, ptr %a826 + call void @finch.gen.hold(ptr %t833, %S.gen.Val %t834) + %t835 = load ptr, ptr %a1 + %t836 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t837 = load { ptr, i64, i64 }, ptr %t836 + %t838 = extractvalue { ptr, i64, i64 } %t837, 1 + %t839 = icmp uge i64 1, %t838 + br i1 %t839, label %range8265, label %inrange8266 +range8265: + call void @finch_panic_index(ptr @.str.5311, i64 4946, i64 1, i64 %t838) + unreachable +inrange8266: + %t840 = extractvalue { ptr, i64, i64 } %t837, 0 + %t841 = getelementptr inbounds %S.ast.Node, ptr %t840, i64 1 + %t842 = load %S.ast.Node, ptr %t841 + %t843 = call %S.gen.Val @finch.gen.strArg(ptr %t835, %S.ast.Node %t842, { ptr, i64, i64 } { ptr @.str.5312, i64 8, i64 0 }) + store %S.gen.Val %t843, ptr %a844 + %t845 = load ptr, ptr %a1 + %t846 = load i64, ptr %a832 + call void @finch.gen.heldEnd(ptr %t845, i64 %t846) + %t847 = load ptr, ptr %a1 + %t848 = load %S.gen.Val, ptr %a826 + %t849 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t847, %S.gen.Val %t848) + store { ptr, i64, i64 } %t849, ptr %a850 + %t851 = load ptr, ptr %a1 + %t852 = load %S.gen.Val, ptr %a844 + %t853 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t851, %S.gen.Val %t852) + store { ptr, i64, i64 } %t853, ptr %a854 + %t855 = load ptr, ptr %a1 + %t856 = icmp eq ptr %t855, null + br i1 %t856, label %panic8267, label %ok8268 +panic8267: + call void @finch_panic(ptr @.str.5313, i64 4950, ptr @.str.5314) + unreachable +ok8268: + %t857 = getelementptr inbounds %S.gen.Gen, ptr %t855, i32 0, i32 41 + %t858 = load { ptr, i64, i64 }, ptr %t857 + %t859 = load %S.ast.Node, ptr %a2 + %t860 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t859) + store { ptr, i64, i64 } %t858, ptr %a861 + store { ptr, i64, i64 } %t860, ptr %a862 + %t863 = call i32 @finch_str_eq(ptr %a861, ptr %a862) + %t864 = icmp ne i32 %t863, 0 + store { ptr, i64, i64 } %t860, ptr %a865 + call void @finch_str_drop(ptr %a865) + br i1 %t864, label %then8269, label %endif8271 +then8269: + %t866 = load ptr, ptr %a1 + %t867 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t866, { ptr, i64, i64 } { ptr @.str.5315, i64 17, i64 0 }) + store { ptr, i64, i64 } %t867, ptr %a868 + %t869 = load ptr, ptr %a1 + %t870 = load { ptr, i64, i64 }, ptr %a868 + call void @finch.gen.store(ptr %t869, { ptr, i64, i64 } { ptr @.str.5316, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5317, i64 15, i64 0 }, { ptr, i64, i64 } %t870) + %t871 = load ptr, ptr %a1 + %t872 = load { ptr, i64, i64 }, ptr %a850 + store { ptr, i64, i64 } { ptr @.str.5318, i64 35, i64 0 }, ptr %a874 + store { ptr, i64, i64 } %t872, ptr %a875 + call void @finch_str_concat(ptr %a873, ptr %a874, ptr %a875) + %t876 = load { ptr, i64, i64 }, ptr %a873 + store { ptr, i64, i64 } %t876, ptr %a878 + store { ptr, i64, i64 } { ptr @.str.5319, i64 6, i64 0 }, ptr %a879 + call void @finch_str_concat(ptr %a877, ptr %a878, ptr %a879) + store { ptr, i64, i64 } %t876, ptr %a880 + call void @finch_str_drop(ptr %a880) + %t881 = load { ptr, i64, i64 }, ptr %a877 + %t882 = load { ptr, i64, i64 }, ptr %a854 + store { ptr, i64, i64 } %t881, ptr %a884 + store { ptr, i64, i64 } %t882, ptr %a885 + call void @finch_str_concat(ptr %a883, ptr %a884, ptr %a885) + store { ptr, i64, i64 } %t881, ptr %a886 + call void @finch_str_drop(ptr %a886) + %t887 = load { ptr, i64, i64 }, ptr %a883 + store { ptr, i64, i64 } %t887, ptr %a889 + store { ptr, i64, i64 } { ptr @.str.5320, i64 6, i64 0 }, ptr %a890 + call void @finch_str_concat(ptr %a888, ptr %a889, ptr %a890) + store { ptr, i64, i64 } %t887, ptr %a891 + call void @finch_str_drop(ptr %a891) + %t892 = load { ptr, i64, i64 }, ptr %a888 + %t893 = load { ptr, i64, i64 }, ptr %a868 + store { ptr, i64, i64 } %t892, ptr %a895 + store { ptr, i64, i64 } %t893, ptr %a896 + call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) + store { ptr, i64, i64 } %t892, ptr %a897 + call void @finch_str_drop(ptr %a897) + %t898 = load { ptr, i64, i64 }, ptr %a894 + store { ptr, i64, i64 } %t898, ptr %a900 + store { ptr, i64, i64 } { ptr @.str.5321, i64 1, i64 0 }, ptr %a901 + call void @finch_str_concat(ptr %a899, ptr %a900, ptr %a901) + store { ptr, i64, i64 } %t898, ptr %a902 + call void @finch_str_drop(ptr %a902) + %t903 = load { ptr, i64, i64 }, ptr %a899 + %t904 = call { ptr, i64, i64 } @finch.gen.op(ptr %t871, { ptr, i64, i64 } %t903) + store { ptr, i64, i64 } %t903, ptr %a905 + call void @finch_str_drop(ptr %a905) + store { ptr, i64, i64 } %t904, ptr %a906 + %t907 = load ptr, ptr %a1 + %t908 = load { ptr, i64, i64 }, ptr %a906 + store { ptr, i64, i64 } { ptr @.str.5322, i64 12, i64 0 }, ptr %a910 + store { ptr, i64, i64 } %t908, ptr %a911 + call void @finch_str_concat(ptr %a909, ptr %a910, ptr %a911) + %t912 = load { ptr, i64, i64 }, ptr %a909 + store { ptr, i64, i64 } %t912, ptr %a914 + store { ptr, i64, i64 } { ptr @.str.5323, i64 3, i64 0 }, ptr %a915 + call void @finch_str_concat(ptr %a913, ptr %a914, ptr %a915) + store { ptr, i64, i64 } %t912, ptr %a916 + call void @finch_str_drop(ptr %a916) + %t917 = load { ptr, i64, i64 }, ptr %a913 + %t918 = call { ptr, i64, i64 } @finch.gen.op(ptr %t907, { ptr, i64, i64 } %t917) + store { ptr, i64, i64 } %t917, ptr %a919 + call void @finch_str_drop(ptr %a919) + %t920 = load ptr, ptr %a1 + %t921 = icmp eq ptr %t920, null + br i1 %t921, label %panic8272, label %ok8273 +panic8272: + call void @finch_panic(ptr @.str.5324, i64 4954, ptr @.str.5325) + unreachable +ok8273: + %t922 = getelementptr inbounds %S.gen.Gen, ptr %t920, i32 0, i32 42 + %t923 = load { ptr, i64, i64 }, ptr %t922 + store { ptr, i64, i64 } %t918, ptr %t922 + store { ptr, i64, i64 } %t923, ptr %a924 + call void @finch_str_drop(ptr %a924) + %t925 = load ptr, ptr %a1 + %t926 = load { ptr, i64, i64 }, ptr %a868 + %t927 = call { ptr, i64, i64 } @finch.gen.load(ptr %t925, { ptr, i64, i64 } { ptr @.str.5326, i64 17, i64 0 }, { ptr, i64, i64 } %t926) + %t928 = load ptr, ptr %a1 + %t929 = icmp eq ptr %t928, null + br i1 %t929, label %panic8274, label %ok8275 +panic8274: + call void @finch_panic(ptr @.str.5327, i64 4955, ptr @.str.5328) + unreachable +ok8275: + %t930 = getelementptr inbounds %S.gen.Gen, ptr %t928, i32 0, i32 43 + %t931 = load { ptr, i64, i64 }, ptr %t930 + store { ptr, i64, i64 } %t927, ptr %t930 + store { ptr, i64, i64 } %t931, ptr %a932 + call void @finch_str_drop(ptr %a932) + %t933 = load ptr, ptr %a1 + %t934 = load %S.gen.Val, ptr %a826 + call void @finch.gen.release(ptr %t933, %S.gen.Val %t934) + %t935 = load ptr, ptr %a1 + %t936 = load %S.gen.Val, ptr %a844 + call void @finch.gen.release(ptr %t935, %S.gen.Val %t936) + %t937 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5329, i64 4, i64 0 }) + %t938 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t937, 1 + call void @finch_str_drop(ptr %a906) + call void @finch_str_drop(ptr %a868) + call void @finch_str_drop(ptr %a854) + call void @finch_str_drop(ptr %a850) + call void @finch.drop.S_gen_Val(ptr %a844) + call void @finch.drop.S_gen_Val(ptr %a826) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t938 +endif8271: + %t939 = load ptr, ptr %a1 + %t940 = load { ptr, i64, i64 }, ptr %a850 + store { ptr, i64, i64 } { ptr @.str.5330, i64 31, i64 0 }, ptr %a942 + store { ptr, i64, i64 } %t940, ptr %a943 + call void @finch_str_concat(ptr %a941, ptr %a942, ptr %a943) + %t944 = load { ptr, i64, i64 }, ptr %a941 + store { ptr, i64, i64 } %t944, ptr %a946 + store { ptr, i64, i64 } { ptr @.str.5331, i64 6, i64 0 }, ptr %a947 + call void @finch_str_concat(ptr %a945, ptr %a946, ptr %a947) + store { ptr, i64, i64 } %t944, ptr %a948 + call void @finch_str_drop(ptr %a948) + %t949 = load { ptr, i64, i64 }, ptr %a945 + %t950 = load { ptr, i64, i64 }, ptr %a854 + store { ptr, i64, i64 } %t949, ptr %a952 + store { ptr, i64, i64 } %t950, ptr %a953 + call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) + store { ptr, i64, i64 } %t949, ptr %a954 + call void @finch_str_drop(ptr %a954) + %t955 = load { ptr, i64, i64 }, ptr %a951 + store { ptr, i64, i64 } %t955, ptr %a957 + store { ptr, i64, i64 } { ptr @.str.5332, i64 1, i64 0 }, ptr %a958 + call void @finch_str_concat(ptr %a956, ptr %a957, ptr %a958) + store { ptr, i64, i64 } %t955, ptr %a959 + call void @finch_str_drop(ptr %a959) + %t960 = load { ptr, i64, i64 }, ptr %a956 + %t961 = call { ptr, i64, i64 } @finch.gen.op(ptr %t939, { ptr, i64, i64 } %t960) + store { ptr, i64, i64 } %t960, ptr %a962 + call void @finch_str_drop(ptr %a962) + store { ptr, i64, i64 } %t961, ptr %a963 + %t964 = load ptr, ptr %a1 + %t965 = load %S.gen.Val, ptr %a826 + call void @finch.gen.release(ptr %t964, %S.gen.Val %t965) + %t966 = load ptr, ptr %a1 + %t967 = load %S.gen.Val, ptr %a844 + call void @finch.gen.release(ptr %t966, %S.gen.Val %t967) + %t968 = load ptr, ptr %a1 + %t969 = load { ptr, i64, i64 }, ptr %a963 + store { ptr, i64, i64 } { ptr @.str.5333, i64 12, i64 0 }, ptr %a971 + store { ptr, i64, i64 } %t969, ptr %a972 + call void @finch_str_concat(ptr %a970, ptr %a971, ptr %a972) + %t973 = load { ptr, i64, i64 }, ptr %a970 + store { ptr, i64, i64 } %t973, ptr %a975 + store { ptr, i64, i64 } { ptr @.str.5334, i64 3, i64 0 }, ptr %a976 + call void @finch_str_concat(ptr %a974, ptr %a975, ptr %a976) + store { ptr, i64, i64 } %t973, ptr %a977 + call void @finch_str_drop(ptr %a977) + %t978 = load { ptr, i64, i64 }, ptr %a974 + %t979 = call { ptr, i64, i64 } @finch.gen.op(ptr %t968, { ptr, i64, i64 } %t978) + store { ptr, i64, i64 } %t978, ptr %a980 + call void @finch_str_drop(ptr %a980) + %t981 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t979, 0 + %t982 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5335, i64 4, i64 0 }) + %t983 = insertvalue %S.gen.Val %t981, %S.ast.Type %t982, 1 + call void @finch_str_drop(ptr %a963) + call void @finch_str_drop(ptr %a854) + call void @finch_str_drop(ptr %a850) + call void @finch.drop.S_gen_Val(ptr %a844) + call void @finch.drop.S_gen_Val(ptr %a826) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t983 +endif8260: + %t984 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t984, ptr %a985 + store { ptr, i64, i64 } { ptr @.str.5336, i64 11, i64 0 }, ptr %a986 + %t987 = call i32 @finch_str_eq(ptr %a985, ptr %a986) + %t988 = icmp ne i32 %t987, 0 + br i1 %t988, label %then8276, label %endif8278 +then8276: + %t989 = load ptr, ptr %a1 + %t990 = load %S.ast.Node, ptr %a2 + %t991 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t989, %S.ast.Node %t990, i64 0, i64 1, { ptr, i64, i64 } %t991) + %t992 = load ptr, ptr %a1 + %t993 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t994 = load { ptr, i64, i64 }, ptr %t993 + %t995 = extractvalue { ptr, i64, i64 } %t994, 1 + %t996 = icmp uge i64 0, %t995 + br i1 %t996, label %range8279, label %inrange8280 +range8279: + call void @finch_panic_index(ptr @.str.5337, i64 4967, i64 0, i64 %t995) + unreachable +inrange8280: + %t997 = extractvalue { ptr, i64, i64 } %t994, 0 + %t998 = getelementptr inbounds %S.ast.Node, ptr %t997, i64 0 + %t999 = load %S.ast.Node, ptr %t998 + %t1000 = call %S.gen.Val @finch.gen.strArg(ptr %t992, %S.ast.Node %t999, { ptr, i64, i64 } { ptr @.str.5338, i64 13, i64 0 }) + store %S.gen.Val %t1000, ptr %a1001 + %t1002 = load ptr, ptr %a1 + %t1003 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1002) + store { ptr, i64, i64 } %t1003, ptr %a1004 + %t1005 = load ptr, ptr %a1 + %t1006 = load { ptr, i64, i64 }, ptr %a1004 + store { ptr, i64, i64 } { ptr @.str.5339, i64 30, i64 0 }, ptr %a1008 + store { ptr, i64, i64 } %t1006, ptr %a1009 + call void @finch_str_concat(ptr %a1007, ptr %a1008, ptr %a1009) + %t1010 = load { ptr, i64, i64 }, ptr %a1007 + store { ptr, i64, i64 } %t1010, ptr %a1012 + store { ptr, i64, i64 } { ptr @.str.5340, i64 6, i64 0 }, ptr %a1013 + call void @finch_str_concat(ptr %a1011, ptr %a1012, ptr %a1013) + store { ptr, i64, i64 } %t1010, ptr %a1014 + call void @finch_str_drop(ptr %a1014) + %t1015 = load { ptr, i64, i64 }, ptr %a1011 + %t1016 = load ptr, ptr %a1 + %t1017 = load %S.gen.Val, ptr %a1001 + %t1018 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1016, %S.gen.Val %t1017) + store { ptr, i64, i64 } %t1015, ptr %a1020 + store { ptr, i64, i64 } %t1018, ptr %a1021 + call void @finch_str_concat(ptr %a1019, ptr %a1020, ptr %a1021) + store { ptr, i64, i64 } %t1015, ptr %a1022 + call void @finch_str_drop(ptr %a1022) + store { ptr, i64, i64 } %t1018, ptr %a1023 + call void @finch_str_drop(ptr %a1023) + %t1024 = load { ptr, i64, i64 }, ptr %a1019 + store { ptr, i64, i64 } %t1024, ptr %a1026 + store { ptr, i64, i64 } { ptr @.str.5341, i64 1, i64 0 }, ptr %a1027 + call void @finch_str_concat(ptr %a1025, ptr %a1026, ptr %a1027) + store { ptr, i64, i64 } %t1024, ptr %a1028 + call void @finch_str_drop(ptr %a1028) + %t1029 = load { ptr, i64, i64 }, ptr %a1025 + call void @finch.gen.emit(ptr %t1005, { ptr, i64, i64 } %t1029) + store { ptr, i64, i64 } %t1029, ptr %a1030 + call void @finch_str_drop(ptr %a1030) + %t1031 = load ptr, ptr %a1 + %t1032 = icmp eq ptr %t1031, null + br i1 %t1032, label %panic8281, label %ok8282 +panic8281: + call void @finch_panic(ptr @.str.5342, i64 4970, ptr @.str.5343) + unreachable +ok8282: + %t1033 = getelementptr inbounds %S.gen.Gen, ptr %t1031, i32 0, i32 41 + %t1034 = load { ptr, i64, i64 }, ptr %t1033 + %t1035 = load %S.ast.Node, ptr %a2 + %t1036 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t1035) + store { ptr, i64, i64 } %t1034, ptr %a1037 + store { ptr, i64, i64 } %t1036, ptr %a1038 + %t1039 = call i32 @finch_str_eq(ptr %a1037, ptr %a1038) + %t1040 = icmp ne i32 %t1039, 0 + store { ptr, i64, i64 } %t1036, ptr %a1041 + call void @finch_str_drop(ptr %a1041) + br i1 %t1040, label %then8283, label %endif8285 +then8283: + %t1042 = load ptr, ptr %a1 + %t1043 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1042, { ptr, i64, i64 } { ptr @.str.5344, i64 17, i64 0 }) + store { ptr, i64, i64 } %t1043, ptr %a1044 + %t1045 = load ptr, ptr %a1 + %t1046 = load { ptr, i64, i64 }, ptr %a1044 + call void @finch.gen.store(ptr %t1045, { ptr, i64, i64 } { ptr @.str.5345, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5346, i64 15, i64 0 }, { ptr, i64, i64 } %t1046) + %t1047 = load ptr, ptr %a1 + %t1048 = load { ptr, i64, i64 }, ptr %a1004 + store { ptr, i64, i64 } { ptr @.str.5347, i64 36, i64 0 }, ptr %a1050 + store { ptr, i64, i64 } %t1048, ptr %a1051 + call void @finch_str_concat(ptr %a1049, ptr %a1050, ptr %a1051) + %t1052 = load { ptr, i64, i64 }, ptr %a1049 + store { ptr, i64, i64 } %t1052, ptr %a1054 + store { ptr, i64, i64 } { ptr @.str.5348, i64 6, i64 0 }, ptr %a1055 + call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) + store { ptr, i64, i64 } %t1052, ptr %a1056 + call void @finch_str_drop(ptr %a1056) + %t1057 = load { ptr, i64, i64 }, ptr %a1053 + %t1058 = load { ptr, i64, i64 }, ptr %a1044 + store { ptr, i64, i64 } %t1057, ptr %a1060 + store { ptr, i64, i64 } %t1058, ptr %a1061 + call void @finch_str_concat(ptr %a1059, ptr %a1060, ptr %a1061) + store { ptr, i64, i64 } %t1057, ptr %a1062 + call void @finch_str_drop(ptr %a1062) + %t1063 = load { ptr, i64, i64 }, ptr %a1059 + store { ptr, i64, i64 } %t1063, ptr %a1065 + store { ptr, i64, i64 } { ptr @.str.5349, i64 1, i64 0 }, ptr %a1066 + call void @finch_str_concat(ptr %a1064, ptr %a1065, ptr %a1066) + store { ptr, i64, i64 } %t1063, ptr %a1067 + call void @finch_str_drop(ptr %a1067) + %t1068 = load { ptr, i64, i64 }, ptr %a1064 + %t1069 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1047, { ptr, i64, i64 } %t1068) + store { ptr, i64, i64 } %t1068, ptr %a1070 + call void @finch_str_drop(ptr %a1070) + store { ptr, i64, i64 } %t1069, ptr %a1071 + %t1072 = load ptr, ptr %a1 + %t1073 = load { ptr, i64, i64 }, ptr %a1071 + store { ptr, i64, i64 } { ptr @.str.5350, i64 12, i64 0 }, ptr %a1075 + store { ptr, i64, i64 } %t1073, ptr %a1076 + call void @finch_str_concat(ptr %a1074, ptr %a1075, ptr %a1076) + %t1077 = load { ptr, i64, i64 }, ptr %a1074 + store { ptr, i64, i64 } %t1077, ptr %a1079 + store { ptr, i64, i64 } { ptr @.str.5351, i64 3, i64 0 }, ptr %a1080 + call void @finch_str_concat(ptr %a1078, ptr %a1079, ptr %a1080) + store { ptr, i64, i64 } %t1077, ptr %a1081 + call void @finch_str_drop(ptr %a1081) + %t1082 = load { ptr, i64, i64 }, ptr %a1078 + %t1083 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1072, { ptr, i64, i64 } %t1082) + store { ptr, i64, i64 } %t1082, ptr %a1084 + call void @finch_str_drop(ptr %a1084) + %t1085 = load ptr, ptr %a1 + %t1086 = icmp eq ptr %t1085, null + br i1 %t1086, label %panic8286, label %ok8287 +panic8286: + call void @finch_panic(ptr @.str.5352, i64 4974, ptr @.str.5353) + unreachable +ok8287: + %t1087 = getelementptr inbounds %S.gen.Gen, ptr %t1085, i32 0, i32 42 + %t1088 = load { ptr, i64, i64 }, ptr %t1087 + store { ptr, i64, i64 } %t1083, ptr %t1087 + store { ptr, i64, i64 } %t1088, ptr %a1089 + call void @finch_str_drop(ptr %a1089) + %t1090 = load ptr, ptr %a1 + %t1091 = load { ptr, i64, i64 }, ptr %a1044 + %t1092 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1090, { ptr, i64, i64 } { ptr @.str.5354, i64 17, i64 0 }, { ptr, i64, i64 } %t1091) + %t1093 = load ptr, ptr %a1 + %t1094 = icmp eq ptr %t1093, null + br i1 %t1094, label %panic8288, label %ok8289 +panic8288: + call void @finch_panic(ptr @.str.5355, i64 4975, ptr @.str.5356) + unreachable +ok8289: + %t1095 = getelementptr inbounds %S.gen.Gen, ptr %t1093, i32 0, i32 43 + %t1096 = load { ptr, i64, i64 }, ptr %t1095 + store { ptr, i64, i64 } %t1092, ptr %t1095 + store { ptr, i64, i64 } %t1096, ptr %a1097 + call void @finch_str_drop(ptr %a1097) + %t1098 = load ptr, ptr %a1 + %t1099 = load { ptr, i64, i64 }, ptr %a1004 + %t1100 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5357, i64 3, i64 0 }) + call void @finch.gen.dropAt(ptr %t1098, { ptr, i64, i64 } %t1099, %S.ast.Type %t1100) + store %S.ast.Type %t1100, ptr %a1101 + call void @finch.drop.S_ast_Type(ptr %a1101) + %t1102 = load ptr, ptr %a1 + %t1103 = load %S.gen.Val, ptr %a1001 + call void @finch.gen.release(ptr %t1102, %S.gen.Val %t1103) + %t1104 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5358, i64 4, i64 0 }) + %t1105 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1104, 1 + call void @finch_str_drop(ptr %a1071) + call void @finch_str_drop(ptr %a1044) + call void @finch_str_drop(ptr %a1004) + call void @finch.drop.S_gen_Val(ptr %a1001) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1105 +endif8285: + %t1106 = load ptr, ptr %a1 + %t1107 = load { ptr, i64, i64 }, ptr %a1004 + store { ptr, i64, i64 } { ptr @.str.5359, i64 32, i64 0 }, ptr %a1109 + store { ptr, i64, i64 } %t1107, ptr %a1110 + call void @finch_str_concat(ptr %a1108, ptr %a1109, ptr %a1110) + %t1111 = load { ptr, i64, i64 }, ptr %a1108 + store { ptr, i64, i64 } %t1111, ptr %a1113 + store { ptr, i64, i64 } { ptr @.str.5360, i64 1, i64 0 }, ptr %a1114 + call void @finch_str_concat(ptr %a1112, ptr %a1113, ptr %a1114) + store { ptr, i64, i64 } %t1111, ptr %a1115 + call void @finch_str_drop(ptr %a1115) + %t1116 = load { ptr, i64, i64 }, ptr %a1112 + %t1117 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1106, { ptr, i64, i64 } %t1116) + store { ptr, i64, i64 } %t1116, ptr %a1118 + call void @finch_str_drop(ptr %a1118) + store { ptr, i64, i64 } %t1117, ptr %a1119 + %t1120 = load ptr, ptr %a1 + %t1121 = load { ptr, i64, i64 }, ptr %a1004 + %t1122 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5361, i64 3, i64 0 }) + call void @finch.gen.dropAt(ptr %t1120, { ptr, i64, i64 } %t1121, %S.ast.Type %t1122) + store %S.ast.Type %t1122, ptr %a1123 + call void @finch.drop.S_ast_Type(ptr %a1123) + %t1124 = load ptr, ptr %a1 + %t1125 = load %S.gen.Val, ptr %a1001 + call void @finch.gen.release(ptr %t1124, %S.gen.Val %t1125) + %t1126 = load ptr, ptr %a1 + %t1127 = load { ptr, i64, i64 }, ptr %a1119 + store { ptr, i64, i64 } { ptr @.str.5362, i64 12, i64 0 }, ptr %a1129 + store { ptr, i64, i64 } %t1127, ptr %a1130 + call void @finch_str_concat(ptr %a1128, ptr %a1129, ptr %a1130) + %t1131 = load { ptr, i64, i64 }, ptr %a1128 + store { ptr, i64, i64 } %t1131, ptr %a1133 + store { ptr, i64, i64 } { ptr @.str.5363, i64 3, i64 0 }, ptr %a1134 + call void @finch_str_concat(ptr %a1132, ptr %a1133, ptr %a1134) + store { ptr, i64, i64 } %t1131, ptr %a1135 + call void @finch_str_drop(ptr %a1135) + %t1136 = load { ptr, i64, i64 }, ptr %a1132 + %t1137 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1126, { ptr, i64, i64 } %t1136) + store { ptr, i64, i64 } %t1136, ptr %a1138 + call void @finch_str_drop(ptr %a1138) + %t1139 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1137, 0 + %t1140 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5364, i64 4, i64 0 }) + %t1141 = insertvalue %S.gen.Val %t1139, %S.ast.Type %t1140, 1 + call void @finch_str_drop(ptr %a1119) + call void @finch_str_drop(ptr %a1004) + call void @finch.drop.S_gen_Val(ptr %a1001) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1141 +endif8278: + %t1142 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1142, ptr %a1143 + store { ptr, i64, i64 } { ptr @.str.5365, i64 5, i64 0 }, ptr %a1144 + %t1145 = call i32 @finch_str_eq(ptr %a1143, ptr %a1144) + %t1146 = icmp ne i32 %t1145, 0 + br i1 %t1146, label %then8290, label %endif8292 +then8290: + %t1147 = load ptr, ptr %a1 + %t1148 = load %S.ast.Node, ptr %a2 + %t1149 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1147, %S.ast.Node %t1148, i64 0, i64 1, { ptr, i64, i64 } %t1149) + %t1150 = load ptr, ptr %a1 + %t1151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1152 = load { ptr, i64, i64 }, ptr %t1151 + %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 + %t1154 = icmp uge i64 0, %t1153 + br i1 %t1154, label %range8293, label %inrange8294 +range8293: + call void @finch_panic_index(ptr @.str.5366, i64 4987, i64 0, i64 %t1153) + unreachable +inrange8294: + %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 + %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 0 + %t1157 = load %S.ast.Node, ptr %t1156 + %t1158 = call %S.gen.Val @finch.gen.strArg(ptr %t1150, %S.ast.Node %t1157, { ptr, i64, i64 } { ptr @.str.5367, i64 11, i64 0 }) + store %S.gen.Val %t1158, ptr %a1159 + %t1160 = load ptr, ptr %a1 + %t1161 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1160) + store { ptr, i64, i64 } %t1161, ptr %a1162 + %t1163 = load ptr, ptr %a1 + %t1164 = load { ptr, i64, i64 }, ptr %a1162 + store { ptr, i64, i64 } { ptr @.str.5368, i64 30, i64 0 }, ptr %a1166 + store { ptr, i64, i64 } %t1164, ptr %a1167 + call void @finch_str_concat(ptr %a1165, ptr %a1166, ptr %a1167) + %t1168 = load { ptr, i64, i64 }, ptr %a1165 + store { ptr, i64, i64 } %t1168, ptr %a1170 + store { ptr, i64, i64 } { ptr @.str.5369, i64 6, i64 0 }, ptr %a1171 + call void @finch_str_concat(ptr %a1169, ptr %a1170, ptr %a1171) + store { ptr, i64, i64 } %t1168, ptr %a1172 + call void @finch_str_drop(ptr %a1172) + %t1173 = load { ptr, i64, i64 }, ptr %a1169 + %t1174 = load ptr, ptr %a1 + %t1175 = load %S.gen.Val, ptr %a1159 + %t1176 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1174, %S.gen.Val %t1175) + store { ptr, i64, i64 } %t1173, ptr %a1178 + store { ptr, i64, i64 } %t1176, ptr %a1179 + call void @finch_str_concat(ptr %a1177, ptr %a1178, ptr %a1179) + store { ptr, i64, i64 } %t1173, ptr %a1180 + call void @finch_str_drop(ptr %a1180) + store { ptr, i64, i64 } %t1176, ptr %a1181 + call void @finch_str_drop(ptr %a1181) + %t1182 = load { ptr, i64, i64 }, ptr %a1177 + store { ptr, i64, i64 } %t1182, ptr %a1184 + store { ptr, i64, i64 } { ptr @.str.5370, i64 1, i64 0 }, ptr %a1185 + call void @finch_str_concat(ptr %a1183, ptr %a1184, ptr %a1185) + store { ptr, i64, i64 } %t1182, ptr %a1186 + call void @finch_str_drop(ptr %a1186) + %t1187 = load { ptr, i64, i64 }, ptr %a1183 + call void @finch.gen.emit(ptr %t1163, { ptr, i64, i64 } %t1187) + store { ptr, i64, i64 } %t1187, ptr %a1188 + call void @finch_str_drop(ptr %a1188) + %t1189 = load ptr, ptr %a1 + %t1190 = load { ptr, i64, i64 }, ptr %a1162 + store { ptr, i64, i64 } { ptr @.str.5371, i64 26, i64 0 }, ptr %a1192 + store { ptr, i64, i64 } %t1190, ptr %a1193 + call void @finch_str_concat(ptr %a1191, ptr %a1192, ptr %a1193) + %t1194 = load { ptr, i64, i64 }, ptr %a1191 + store { ptr, i64, i64 } %t1194, ptr %a1196 + store { ptr, i64, i64 } { ptr @.str.5372, i64 1, i64 0 }, ptr %a1197 + call void @finch_str_concat(ptr %a1195, ptr %a1196, ptr %a1197) + store { ptr, i64, i64 } %t1194, ptr %a1198 + call void @finch_str_drop(ptr %a1198) + %t1199 = load { ptr, i64, i64 }, ptr %a1195 + %t1200 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1189, { ptr, i64, i64 } %t1199) + store { ptr, i64, i64 } %t1199, ptr %a1201 + call void @finch_str_drop(ptr %a1201) + store { ptr, i64, i64 } %t1200, ptr %a1202 + %t1203 = load ptr, ptr %a1 + %t1204 = load { ptr, i64, i64 }, ptr %a1162 + %t1205 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5373, i64 3, i64 0 }) + call void @finch.gen.dropAt(ptr %t1203, { ptr, i64, i64 } %t1204, %S.ast.Type %t1205) + store %S.ast.Type %t1205, ptr %a1206 + call void @finch.drop.S_ast_Type(ptr %a1206) + %t1207 = load ptr, ptr %a1 + %t1208 = load %S.gen.Val, ptr %a1159 + call void @finch.gen.release(ptr %t1207, %S.gen.Val %t1208) + %t1209 = load { ptr, i64, i64 }, ptr %a1202 + store { ptr, i64, i64 } %t1209, ptr %a1210 + call void @finch_str_copy(ptr %a1211, ptr %a1210) + %t1212 = load { ptr, i64, i64 }, ptr %a1211 + %t1213 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1212, 0 + %t1214 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5374, i64 3, i64 0 }) + %t1215 = insertvalue %S.gen.Val %t1213, %S.ast.Type %t1214, 1 + call void @finch_str_drop(ptr %a1202) + call void @finch_str_drop(ptr %a1162) + call void @finch.drop.S_gen_Val(ptr %a1159) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1215 +endif8292: + %t1216 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1216, ptr %a1217 + store { ptr, i64, i64 } { ptr @.str.5375, i64 4, i64 0 }, ptr %a1218 + %t1219 = call i32 @finch_str_eq(ptr %a1217, ptr %a1218) + %t1220 = icmp ne i32 %t1219, 0 + br i1 %t1220, label %then8295, label %endif8297 +then8295: + %t1221 = load ptr, ptr %a1 + %t1222 = load %S.ast.Node, ptr %a2 + %t1223 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1221, %S.ast.Node %t1222, i64 0, i64 1, { ptr, i64, i64 } %t1223) + %t1224 = load ptr, ptr %a1 + %t1225 = load ptr, ptr %a1 + %t1226 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1227 = load { ptr, i64, i64 }, ptr %t1226 + %t1228 = extractvalue { ptr, i64, i64 } %t1227, 1 + %t1229 = icmp uge i64 0, %t1228 + br i1 %t1229, label %range8298, label %inrange8299 +range8298: + call void @finch_panic_index(ptr @.str.5376, i64 4997, i64 0, i64 %t1228) + unreachable +inrange8299: + %t1230 = extractvalue { ptr, i64, i64 } %t1227, 0 + %t1231 = getelementptr inbounds %S.ast.Node, ptr %t1230, i64 0 + %t1232 = load %S.ast.Node, ptr %t1231 + %t1233 = call %S.gen.Val @finch.gen.expr(ptr %t1225, %S.ast.Node %t1232) + %t1234 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5377, i64 3, i64 0 }) + %t1235 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1236 = load { ptr, i64, i64 }, ptr %t1235 + %t1237 = extractvalue { ptr, i64, i64 } %t1236, 1 + %t1238 = icmp uge i64 0, %t1237 + br i1 %t1238, label %range8300, label %inrange8301 +range8300: + call void @finch_panic_index(ptr @.str.5378, i64 4997, i64 0, i64 %t1237) + unreachable +inrange8301: + %t1239 = extractvalue { ptr, i64, i64 } %t1236, 0 + %t1240 = getelementptr inbounds %S.ast.Node, ptr %t1239, i64 0 + %t1241 = load %S.ast.Node, ptr %t1240 + %t1242 = call %S.gen.Val @finch.gen.coerce(ptr %t1224, %S.gen.Val %t1233, %S.ast.Type %t1234, %S.ast.Node %t1241, { ptr, i64, i64 } { ptr @.str.5379, i64 13, i64 0 }) + store %S.gen.Val %t1233, ptr %a1243 + call void @finch.drop.S_gen_Val(ptr %a1243) + store %S.ast.Type %t1234, ptr %a1244 + call void @finch.drop.S_ast_Type(ptr %a1244) + store %S.gen.Val %t1242, ptr %a1245 + %t1246 = load ptr, ptr %a1 + %t1247 = getelementptr inbounds %S.gen.Val, ptr %a1245, i32 0, i32 0 + %t1248 = load { ptr, i64, i64 }, ptr %t1247 + store { ptr, i64, i64 } { ptr @.str.5380, i64 10, i64 0 }, ptr %a1250 + store { ptr, i64, i64 } %t1248, ptr %a1251 + call void @finch_str_concat(ptr %a1249, ptr %a1250, ptr %a1251) + %t1252 = load { ptr, i64, i64 }, ptr %a1249 + store { ptr, i64, i64 } %t1252, ptr %a1254 + store { ptr, i64, i64 } { ptr @.str.5381, i64 7, i64 0 }, ptr %a1255 + call void @finch_str_concat(ptr %a1253, ptr %a1254, ptr %a1255) + store { ptr, i64, i64 } %t1252, ptr %a1256 + call void @finch_str_drop(ptr %a1256) + %t1257 = load { ptr, i64, i64 }, ptr %a1253 + %t1258 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1246, { ptr, i64, i64 } %t1257) + store { ptr, i64, i64 } %t1257, ptr %a1259 + call void @finch_str_drop(ptr %a1259) + store { ptr, i64, i64 } %t1258, ptr %a1260 + %t1261 = load ptr, ptr %a1 + %t1262 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1261, { ptr, i64, i64 } { ptr @.str.5382, i64 26, i64 0 }) + store { ptr, i64, i64 } %t1262, ptr %a1263 + %t1264 = load ptr, ptr %a1 + %t1265 = load { ptr, i64, i64 }, ptr %a1260 + store { ptr, i64, i64 } { ptr @.str.5383, i64 20, i64 0 }, ptr %a1267 + store { ptr, i64, i64 } %t1265, ptr %a1268 + call void @finch_str_concat(ptr %a1266, ptr %a1267, ptr %a1268) + %t1269 = load { ptr, i64, i64 }, ptr %a1266 + store { ptr, i64, i64 } %t1269, ptr %a1271 + store { ptr, i64, i64 } { ptr @.str.5384, i64 1, i64 0 }, ptr %a1272 + call void @finch_str_concat(ptr %a1270, ptr %a1271, ptr %a1272) + store { ptr, i64, i64 } %t1269, ptr %a1273 + call void @finch_str_drop(ptr %a1273) + %t1274 = load { ptr, i64, i64 }, ptr %a1270 + call void @finch.gen.emit(ptr %t1264, { ptr, i64, i64 } %t1274) + store { ptr, i64, i64 } %t1274, ptr %a1275 + call void @finch_str_drop(ptr %a1275) + %t1276 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5385, i64 4, i64 0 }) + %t1277 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1276, 1 + call void @finch_str_drop(ptr %a1263) + call void @finch_str_drop(ptr %a1260) + call void @finch.drop.S_gen_Val(ptr %a1245) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1277 +endif8297: + %t1278 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1278, ptr %a1279 + store { ptr, i64, i64 } { ptr @.str.5386, i64 5, i64 0 }, ptr %a1280 + %t1281 = call i32 @finch_str_eq(ptr %a1279, ptr %a1280) + %t1282 = icmp ne i32 %t1281, 0 + br i1 %t1282, label %then8302, label %endif8304 +then8302: + %t1283 = load ptr, ptr %a1 + %t1284 = call %S.gen.Val @finch.gen.strConst(ptr %t1283, { ptr, i64, i64 } { ptr @.str.5387, i64 0, i64 0 }) + store %S.gen.Val %t1284, ptr %a1285 + %t1286 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1286, i32 0, i32 1 + %t1288 = load i64, ptr %t1287 + %t1289 = icmp sgt i64 %t1288, 0 + br i1 %t1289, label %then8305, label %endif8307 +then8305: + %t1290 = load ptr, ptr %a1 + %t1291 = load %S.ast.Node, ptr %a2 + %t1292 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1290, %S.ast.Node %t1291, i64 0, i64 1, { ptr, i64, i64 } %t1292) + %t1293 = load ptr, ptr %a1 + %t1294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1295 = load { ptr, i64, i64 }, ptr %t1294 + %t1296 = extractvalue { ptr, i64, i64 } %t1295, 1 + %t1297 = icmp uge i64 0, %t1296 + br i1 %t1297, label %range8308, label %inrange8309 +range8308: + call void @finch_panic_index(ptr @.str.5388, i64 5007, i64 0, i64 %t1296) + unreachable +inrange8309: + %t1298 = extractvalue { ptr, i64, i64 } %t1295, 0 + %t1299 = getelementptr inbounds %S.ast.Node, ptr %t1298, i64 0 + %t1300 = load %S.ast.Node, ptr %t1299 + %t1301 = call %S.gen.Val @finch.gen.strArg(ptr %t1293, %S.ast.Node %t1300, { ptr, i64, i64 } { ptr @.str.5389, i64 12, i64 0 }) + %t1302 = load %S.gen.Val, ptr %a1285 + store %S.gen.Val %t1301, ptr %a1285 + store %S.gen.Val %t1302, ptr %a1303 + call void @finch.drop.S_gen_Val(ptr %a1303) + br label %endif8307 +endif8307: + %t1304 = load ptr, ptr %a1 + %t1305 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1304) + store { ptr, i64, i64 } %t1305, ptr %a1306 + %t1307 = load ptr, ptr %a1 + %t1308 = load { ptr, i64, i64 }, ptr %a1306 + store { ptr, i64, i64 } { ptr @.str.5390, i64 27, i64 0 }, ptr %a1310 + store { ptr, i64, i64 } %t1308, ptr %a1311 + call void @finch_str_concat(ptr %a1309, ptr %a1310, ptr %a1311) + %t1312 = load { ptr, i64, i64 }, ptr %a1309 + store { ptr, i64, i64 } %t1312, ptr %a1314 + store { ptr, i64, i64 } { ptr @.str.5391, i64 6, i64 0 }, ptr %a1315 + call void @finch_str_concat(ptr %a1313, ptr %a1314, ptr %a1315) + store { ptr, i64, i64 } %t1312, ptr %a1316 + call void @finch_str_drop(ptr %a1316) + %t1317 = load { ptr, i64, i64 }, ptr %a1313 + %t1318 = load ptr, ptr %a1 + %t1319 = load %S.gen.Val, ptr %a1285 + %t1320 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1318, %S.gen.Val %t1319) + store { ptr, i64, i64 } %t1317, ptr %a1322 + store { ptr, i64, i64 } %t1320, ptr %a1323 + call void @finch_str_concat(ptr %a1321, ptr %a1322, ptr %a1323) + store { ptr, i64, i64 } %t1317, ptr %a1324 + call void @finch_str_drop(ptr %a1324) + store { ptr, i64, i64 } %t1320, ptr %a1325 + call void @finch_str_drop(ptr %a1325) + %t1326 = load { ptr, i64, i64 }, ptr %a1321 + store { ptr, i64, i64 } %t1326, ptr %a1328 + store { ptr, i64, i64 } { ptr @.str.5392, i64 1, i64 0 }, ptr %a1329 + call void @finch_str_concat(ptr %a1327, ptr %a1328, ptr %a1329) + store { ptr, i64, i64 } %t1326, ptr %a1330 + call void @finch_str_drop(ptr %a1330) + %t1331 = load { ptr, i64, i64 }, ptr %a1327 + call void @finch.gen.emit(ptr %t1307, { ptr, i64, i64 } %t1331) + store { ptr, i64, i64 } %t1331, ptr %a1332 + call void @finch_str_drop(ptr %a1332) + %t1333 = load ptr, ptr %a1 + %t1334 = load %S.gen.Val, ptr %a1285 + call void @finch.gen.release(ptr %t1333, %S.gen.Val %t1334) + %t1335 = load ptr, ptr %a1 + %t1336 = load { ptr, i64, i64 }, ptr %a1306 + %t1337 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1335, { ptr, i64, i64 } { ptr @.str.5393, i64 17, i64 0 }, { ptr, i64, i64 } %t1336) + %t1338 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1337, 0 + %t1339 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5394, i64 3, i64 0 }) + %t1340 = insertvalue %S.gen.Val %t1338, %S.ast.Type %t1339, 1 + %t1341 = insertvalue %S.gen.Val %t1340, i1 true, 2 + call void @finch_str_drop(ptr %a1306) + call void @finch.drop.S_gen_Val(ptr %a1285) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1341 +endif8304: + %t1342 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1342, ptr %a1343 + store { ptr, i64, i64 } { ptr @.str.5395, i64 3, i64 0 }, ptr %a1344 + %t1345 = call i32 @finch_str_eq(ptr %a1343, ptr %a1344) + %t1346 = icmp ne i32 %t1345, 0 + br i1 %t1346, label %then8310, label %endif8312 +then8310: + %t1347 = load ptr, ptr %a1 + %t1348 = load %S.ast.Node, ptr %a2 + %t1349 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1347, %S.ast.Node %t1348, i64 0, i64 1, { ptr, i64, i64 } %t1349) + %t1350 = load ptr, ptr %a1 + %t1351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1352 = load { ptr, i64, i64 }, ptr %t1351 + %t1353 = extractvalue { ptr, i64, i64 } %t1352, 1 + %t1354 = icmp uge i64 0, %t1353 + br i1 %t1354, label %range8313, label %inrange8314 +range8313: + call void @finch_panic_index(ptr @.str.5396, i64 5016, i64 0, i64 %t1353) + unreachable +inrange8314: + %t1355 = extractvalue { ptr, i64, i64 } %t1352, 0 + %t1356 = getelementptr inbounds %S.ast.Node, ptr %t1355, i64 0 + %t1357 = load %S.ast.Node, ptr %t1356 + %t1358 = call %S.gen.Val @finch.gen.expr(ptr %t1350, %S.ast.Node %t1357) + store %S.gen.Val %t1358, ptr %a1359 + %t1360 = load ptr, ptr %a1 + %t1361 = load ptr, ptr %a1 + %t1362 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 + %t1363 = load %S.ast.Type, ptr %t1362 + %t1364 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1361, %S.ast.Type %t1363) + store { ptr, i64, i64 } { ptr @.str.5397, i64 26, i64 0 }, ptr %a1366 + store { ptr, i64, i64 } %t1364, ptr %a1367 + call void @finch_str_concat(ptr %a1365, ptr %a1366, ptr %a1367) + store { ptr, i64, i64 } %t1364, ptr %a1368 + call void @finch_str_drop(ptr %a1368) + %t1369 = load { ptr, i64, i64 }, ptr %a1365 + store { ptr, i64, i64 } %t1369, ptr %a1371 + store { ptr, i64, i64 } { ptr @.str.5398, i64 1, i64 0 }, ptr %a1372 + call void @finch_str_concat(ptr %a1370, ptr %a1371, ptr %a1372) + store { ptr, i64, i64 } %t1369, ptr %a1373 + call void @finch_str_drop(ptr %a1373) + %t1374 = load { ptr, i64, i64 }, ptr %a1370 + %t1375 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1360, { ptr, i64, i64 } %t1374) + store { ptr, i64, i64 } %t1374, ptr %a1376 + call void @finch_str_drop(ptr %a1376) + store { ptr, i64, i64 } %t1375, ptr %a1377 + %t1378 = load ptr, ptr %a1 + %t1379 = load ptr, ptr %a1 + %t1380 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 + %t1381 = load %S.ast.Type, ptr %t1380 + %t1382 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1379, %S.ast.Type %t1381) + %t1383 = load ptr, ptr %a1 + %t1384 = load %S.gen.Val, ptr %a1359 + %t1385 = call { ptr, i64, i64 } @finch.gen.own(ptr %t1383, %S.gen.Val %t1384) + %t1386 = load { ptr, i64, i64 }, ptr %a1377 + call void @finch.gen.store(ptr %t1378, { ptr, i64, i64 } %t1382, { ptr, i64, i64 } %t1385, { ptr, i64, i64 } %t1386) + store { ptr, i64, i64 } %t1382, ptr %a1387 + call void @finch_str_drop(ptr %a1387) + store { ptr, i64, i64 } %t1385, ptr %a1388 + call void @finch_str_drop(ptr %a1388) + %t1389 = load { ptr, i64, i64 }, ptr %a1377 + store { ptr, i64, i64 } %t1389, ptr %a1390 + call void @finch_str_copy(ptr %a1391, ptr %a1390) + %t1392 = load { ptr, i64, i64 }, ptr %a1391 + %t1393 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1392, 0 + %t1394 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 + %t1395 = load %S.ast.Type, ptr %t1394 + %t1396 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t1395) + %t1397 = insertvalue %S.gen.Val %t1393, %S.ast.Type %t1396, 1 + call void @finch_str_drop(ptr %a1377) + call void @finch.drop.S_gen_Val(ptr %a1359) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1397 +endif8312: + %t1398 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1398, ptr %a1399 + store { ptr, i64, i64 } { ptr @.str.5399, i64 4, i64 0 }, ptr %a1400 + %t1401 = call i32 @finch_str_eq(ptr %a1399, ptr %a1400) + %t1402 = icmp ne i32 %t1401, 0 + br i1 %t1402, label %then8315, label %endif8317 +then8315: + %t1403 = load ptr, ptr %a1 + %t1404 = load %S.ast.Node, ptr %a2 + %t1405 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1403, %S.ast.Node %t1404, i64 0, i64 1, { ptr, i64, i64 } %t1405) + %t1406 = load ptr, ptr %a1 + %t1407 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1408 = load { ptr, i64, i64 }, ptr %t1407 + %t1409 = extractvalue { ptr, i64, i64 } %t1408, 1 + %t1410 = icmp uge i64 0, %t1409 + br i1 %t1410, label %range8318, label %inrange8319 +range8318: + call void @finch_panic_index(ptr @.str.5400, i64 5023, i64 0, i64 %t1409) + unreachable +inrange8319: + %t1411 = extractvalue { ptr, i64, i64 } %t1408, 0 + %t1412 = getelementptr inbounds %S.ast.Node, ptr %t1411, i64 0 + %t1413 = load %S.ast.Node, ptr %t1412 + %t1414 = call %S.gen.Val @finch.gen.expr(ptr %t1406, %S.ast.Node %t1413) + store %S.gen.Val %t1414, ptr %a1415 + %t1416 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1417 = getelementptr inbounds %S.ast.Type, ptr %t1416, i32 0, i32 0 + %t1418 = load { ptr, i64, i64 }, ptr %t1417 + store { ptr, i64, i64 } %t1418, ptr %a1419 + store { ptr, i64, i64 } { ptr @.str.5401, i64 3, i64 0 }, ptr %a1420 + %t1421 = call i32 @finch_str_eq(ptr %a1419, ptr %a1420) + %t1422 = icmp eq i32 %t1421, 0 + br i1 %t1422, label %then8320, label %endif8322 +then8320: + %t1423 = load ptr, ptr %a1 + %t1424 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1425 = load { ptr, i64, i64 }, ptr %t1424 + %t1426 = extractvalue { ptr, i64, i64 } %t1425, 1 + %t1427 = icmp uge i64 0, %t1426 + br i1 %t1427, label %range8323, label %inrange8324 +range8323: + call void @finch_panic_index(ptr @.str.5402, i64 5025, i64 0, i64 %t1426) + unreachable +inrange8324: + %t1428 = extractvalue { ptr, i64, i64 } %t1425, 0 + %t1429 = getelementptr inbounds %S.ast.Node, ptr %t1428, i64 0 + %t1430 = load %S.ast.Node, ptr %t1429 + call void @finch.gen.fail(ptr %t1423, %S.ast.Node %t1430, { ptr, i64, i64 } { ptr @.str.5403, i64 119, i64 0 }) + br label %endif8322 +endif8322: + %t1431 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1432 = getelementptr inbounds %S.ast.Type, ptr %t1431, i32 0, i32 1 + %t1433 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1432, i32 0, i32 1 + %t1434 = load i64, ptr %t1433 + %t1435 = icmp sgt i64 %t1434, 0 + br label %logic.from8325 +logic.from8325: + br i1 %t1435, label %logic.rhs8326, label %logic.end8327 +logic.rhs8326: + %t1436 = load ptr, ptr %a1 + %t1437 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1438 = getelementptr inbounds %S.ast.Type, ptr %t1437, i32 0, i32 1 + %t1439 = load { ptr, i64, i64 }, ptr %t1438 + %t1440 = extractvalue { ptr, i64, i64 } %t1439, 1 + %t1441 = icmp uge i64 0, %t1440 + br i1 %t1441, label %range8328, label %inrange8329 +range8328: + call void @finch_panic_index(ptr @.str.5404, i64 5027, i64 0, i64 %t1440) + unreachable +inrange8329: + %t1442 = extractvalue { ptr, i64, i64 } %t1439, 0 + %t1443 = getelementptr inbounds %S.ast.Type, ptr %t1442, i64 0 + %t1444 = load %S.ast.Type, ptr %t1443 + %t1445 = call i1 @finch.gen.owning(ptr %t1436, %S.ast.Type %t1444) + br label %logic.rend8330 +logic.rend8330: + br label %logic.end8327 +logic.end8327: + %t1446 = phi i1 [ false, %logic.from8325 ], [ %t1445, %logic.rend8330 ] + br i1 %t1446, label %then8331, label %endif8333 +then8331: + %t1447 = load ptr, ptr %a1 + %t1448 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1447, { ptr, i64, i64 } { ptr @.str.5405, i64 9, i64 0 }) + store { ptr, i64, i64 } %t1448, ptr %a1449 + %t1450 = load ptr, ptr %a1 + %t1451 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1450, { ptr, i64, i64 } { ptr @.str.5406, i64 9, i64 0 }) + store { ptr, i64, i64 } %t1451, ptr %a1452 + %t1453 = load ptr, ptr %a1 + %t1454 = load ptr, ptr %a1 + %t1455 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 + %t1456 = load { ptr, i64, i64 }, ptr %t1455 + store { ptr, i64, i64 } { ptr @.str.5407, i64 12, i64 0 }, ptr %a1458 + store { ptr, i64, i64 } %t1456, ptr %a1459 + call void @finch_str_concat(ptr %a1457, ptr %a1458, ptr %a1459) + %t1460 = load { ptr, i64, i64 }, ptr %a1457 + store { ptr, i64, i64 } %t1460, ptr %a1462 + store { ptr, i64, i64 } { ptr @.str.5408, i64 6, i64 0 }, ptr %a1463 + call void @finch_str_concat(ptr %a1461, ptr %a1462, ptr %a1463) + store { ptr, i64, i64 } %t1460, ptr %a1464 + call void @finch_str_drop(ptr %a1464) + %t1465 = load { ptr, i64, i64 }, ptr %a1461 + %t1466 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1454, { ptr, i64, i64 } %t1465) + store { ptr, i64, i64 } %t1465, ptr %a1467 + call void @finch_str_drop(ptr %a1467) + %t1468 = load { ptr, i64, i64 }, ptr %a1452 + %t1469 = load { ptr, i64, i64 }, ptr %a1449 + call void @finch.gen.condBr(ptr %t1453, { ptr, i64, i64 } %t1466, { ptr, i64, i64 } %t1468, { ptr, i64, i64 } %t1469) + store { ptr, i64, i64 } %t1466, ptr %a1470 + call void @finch_str_drop(ptr %a1470) + %t1471 = load ptr, ptr %a1 + %t1472 = load { ptr, i64, i64 }, ptr %a1449 + call void @finch.gen.label(ptr %t1471, { ptr, i64, i64 } %t1472) + %t1473 = load ptr, ptr %a1 + %t1474 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 + %t1475 = load { ptr, i64, i64 }, ptr %t1474 + %t1476 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1477 = getelementptr inbounds %S.ast.Type, ptr %t1476, i32 0, i32 1 + %t1478 = load { ptr, i64, i64 }, ptr %t1477 + %t1479 = extractvalue { ptr, i64, i64 } %t1478, 1 + %t1480 = icmp uge i64 0, %t1479 + br i1 %t1480, label %range8334, label %inrange8335 +range8334: + call void @finch_panic_index(ptr @.str.5409, i64 5032, i64 0, i64 %t1479) + unreachable +inrange8335: + %t1481 = extractvalue { ptr, i64, i64 } %t1478, 0 + %t1482 = getelementptr inbounds %S.ast.Type, ptr %t1481, i64 0 + %t1483 = load %S.ast.Type, ptr %t1482 + call void @finch.gen.dropAt(ptr %t1473, { ptr, i64, i64 } %t1475, %S.ast.Type %t1483) + %t1484 = load ptr, ptr %a1 + %t1485 = load { ptr, i64, i64 }, ptr %a1452 + call void @finch.gen.br(ptr %t1484, { ptr, i64, i64 } %t1485) + %t1486 = load ptr, ptr %a1 + %t1487 = load { ptr, i64, i64 }, ptr %a1452 + call void @finch.gen.label(ptr %t1486, { ptr, i64, i64 } %t1487) + call void @finch_str_drop(ptr %a1452) + call void @finch_str_drop(ptr %a1449) + br label %endif8333 +endif8333: + %t1488 = load ptr, ptr %a1 + %t1489 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 + %t1490 = load { ptr, i64, i64 }, ptr %t1489 + store { ptr, i64, i64 } { ptr @.str.5410, i64 20, i64 0 }, ptr %a1492 + store { ptr, i64, i64 } %t1490, ptr %a1493 + call void @finch_str_concat(ptr %a1491, ptr %a1492, ptr %a1493) + %t1494 = load { ptr, i64, i64 }, ptr %a1491 + store { ptr, i64, i64 } %t1494, ptr %a1496 + store { ptr, i64, i64 } { ptr @.str.5411, i64 1, i64 0 }, ptr %a1497 + call void @finch_str_concat(ptr %a1495, ptr %a1496, ptr %a1497) + store { ptr, i64, i64 } %t1494, ptr %a1498 + call void @finch_str_drop(ptr %a1498) + %t1499 = load { ptr, i64, i64 }, ptr %a1495 + call void @finch.gen.emit(ptr %t1488, { ptr, i64, i64 } %t1499) + store { ptr, i64, i64 } %t1499, ptr %a1500 + call void @finch_str_drop(ptr %a1500) + %t1501 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5412, i64 4, i64 0 }) + %t1502 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1501, 1 + call void @finch.drop.S_gen_Val(ptr %a1415) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1502 +endif8317: + %t1503 = load ptr, ptr %a1 + %t1504 = load ptr, ptr %a1 + %t1505 = icmp eq ptr %t1504, null + br i1 %t1505, label %panic8336, label %ok8337 +panic8336: + call void @finch_panic(ptr @.str.5413, i64 5039, ptr @.str.5414) + unreachable +ok8337: + %t1506 = getelementptr inbounds %S.gen.Gen, ptr %t1504, i32 0, i32 14 + %t1507 = load { ptr, i64, i64 }, ptr %t1506 + %t1508 = load { ptr, i64, i64 }, ptr %a8 + %t1509 = call i64 @finch.gen.findFn(ptr %t1503, { ptr, i64, i64 } %t1507, { ptr, i64, i64 } %t1508) + store i64 %t1509, ptr %a1510 + %t1511 = load i64, ptr %a1510 + %t1512 = icmp sge i64 %t1511, 0 + br i1 %t1512, label %then8338, label %endif8340 +then8338: + %t1513 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t1514 = getelementptr inbounds %S.ast.Type, ptr %t1513, i32 0, i32 1 + %t1515 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1514, i32 0, i32 1 + %t1516 = load i64, ptr %t1515 + %t1517 = icmp sgt i64 %t1516, 0 + br i1 %t1517, label %then8341, label %endif8343 +then8341: + %t1518 = load ptr, ptr %a1 + %t1519 = load %S.ast.Node, ptr %a2 + %t1520 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5415, i64 1, i64 0 }, ptr %a1522 + store { ptr, i64, i64 } %t1520, ptr %a1523 + call void @finch_str_concat(ptr %a1521, ptr %a1522, ptr %a1523) + %t1524 = load { ptr, i64, i64 }, ptr %a1521 + store { ptr, i64, i64 } %t1524, ptr %a1526 + store { ptr, i64, i64 } { ptr @.str.5416, i64 47, i64 0 }, ptr %a1527 + call void @finch_str_concat(ptr %a1525, ptr %a1526, ptr %a1527) + store { ptr, i64, i64 } %t1524, ptr %a1528 + call void @finch_str_drop(ptr %a1528) + %t1529 = load { ptr, i64, i64 }, ptr %a1525 + call void @finch.gen.fail(ptr %t1518, %S.ast.Node %t1519, { ptr, i64, i64 } %t1529) + store { ptr, i64, i64 } %t1529, ptr %a1530 + call void @finch_str_drop(ptr %a1530) + br label %endif8343 +endif8343: + %t1531 = load ptr, ptr %a1 + %t1532 = load i64, ptr %a1510 + %t1533 = load %S.ast.Node, ptr %a2 + %t1534 = load { ptr, i64, i64 }, ptr %a8 + %t1535 = call %S.gen.Val @finch.gen.callFn(ptr %t1531, i64 %t1532, %S.ast.Node %t1533, i64 0, { ptr, i64, i64 } %t1534, { ptr, i64, i64 } { ptr @.str.5417, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5418, i64 0, i64 0 }) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1535 +endif8340: + %t1536 = load ptr, ptr %a1 + %t1537 = load ptr, ptr %a1 + %t1538 = icmp eq ptr %t1537, null + br i1 %t1538, label %panic8344, label %ok8345 +panic8344: + call void @finch_panic(ptr @.str.5419, i64 5046, ptr @.str.5420) + unreachable +ok8345: + %t1539 = getelementptr inbounds %S.gen.Gen, ptr %t1537, i32 0, i32 14 + %t1540 = load { ptr, i64, i64 }, ptr %t1539 + %t1541 = load { ptr, i64, i64 }, ptr %a8 + %t1542 = call i64 @finch.gen.findTemplate(ptr %t1536, { ptr, i64, i64 } %t1540, { ptr, i64, i64 } %t1541, { ptr, i64, i64 } { ptr @.str.5421, i64 0, i64 0 }, i1 false) + store i64 %t1542, ptr %a1543 + %t1544 = load i64, ptr %a1543 + %t1545 = icmp sge i64 %t1544, 0 + br i1 %t1545, label %then8346, label %endif8348 +then8346: + %t1546 = load ptr, ptr %a1 + %t1547 = load %S.ast.Node, ptr %a2 + %t1548 = load i64, ptr %a1543 + %t1549 = load { ptr, i64, i64 }, ptr %a8 + %t1550 = call %S.gen.Val @finch.gen.genericCall(ptr %t1546, %S.ast.Node %t1547, i64 %t1548, i64 0, { ptr, i64, i64 } %t1549) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1550 +endif8348: + %t1551 = load ptr, ptr %a1 + %t1552 = load ptr, ptr %a1 + %t1553 = icmp eq ptr %t1552, null + br i1 %t1553, label %panic8349, label %ok8350 +panic8349: + call void @finch_panic(ptr @.str.5422, i64 5050, ptr @.str.5423) + unreachable +ok8350: + %t1554 = getelementptr inbounds %S.gen.Gen, ptr %t1552, i32 0, i32 14 + %t1555 = load { ptr, i64, i64 }, ptr %t1554 + %t1556 = load { ptr, i64, i64 }, ptr %a8 + %t1557 = call i64 @finch.gen.findTemplate(ptr %t1551, { ptr, i64, i64 } %t1555, { ptr, i64, i64 } %t1556, { ptr, i64, i64 } { ptr @.str.5424, i64 0, i64 0 }, i1 true) + %t1558 = icmp sge i64 %t1557, 0 + br i1 %t1558, label %then8351, label %endif8353 +then8351: + %t1559 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t1560 = getelementptr inbounds %S.ast.Type, ptr %t1559, i32 0, i32 1 + %t1561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1560, i32 0, i32 1 + %t1562 = load i64, ptr %t1561 + %t1563 = icmp eq i64 %t1562, 0 + br i1 %t1563, label %then8354, label %endif8356 +then8354: + %t1564 = load ptr, ptr %a1 + %t1565 = load %S.ast.Node, ptr %a2 + %t1566 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5425, i64 1, i64 0 }, ptr %a1568 + store { ptr, i64, i64 } %t1566, ptr %a1569 + call void @finch_str_concat(ptr %a1567, ptr %a1568, ptr %a1569) + %t1570 = load { ptr, i64, i64 }, ptr %a1567 + store { ptr, i64, i64 } %t1570, ptr %a1572 + store { ptr, i64, i64 } { ptr @.str.5426, i64 42, i64 0 }, ptr %a1573 + call void @finch_str_concat(ptr %a1571, ptr %a1572, ptr %a1573) + store { ptr, i64, i64 } %t1570, ptr %a1574 + call void @finch_str_drop(ptr %a1574) + %t1575 = load { ptr, i64, i64 }, ptr %a1571 + %t1576 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1575, ptr %a1578 + store { ptr, i64, i64 } %t1576, ptr %a1579 + call void @finch_str_concat(ptr %a1577, ptr %a1578, ptr %a1579) + store { ptr, i64, i64 } %t1575, ptr %a1580 + call void @finch_str_drop(ptr %a1580) + %t1581 = load { ptr, i64, i64 }, ptr %a1577 + store { ptr, i64, i64 } %t1581, ptr %a1583 + store { ptr, i64, i64 } { ptr @.str.5427, i64 10, i64 0 }, ptr %a1584 + call void @finch_str_concat(ptr %a1582, ptr %a1583, ptr %a1584) + store { ptr, i64, i64 } %t1581, ptr %a1585 + call void @finch_str_drop(ptr %a1585) + %t1586 = load { ptr, i64, i64 }, ptr %a1582 + call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1586) + store { ptr, i64, i64 } %t1586, ptr %a1587 + call void @finch_str_drop(ptr %a1587) + br label %endif8356 +endif8356: + store { ptr, i64, i64 } zeroinitializer, ptr %a1588 + %t1589 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t1590 = getelementptr inbounds %S.ast.Type, ptr %t1589, i32 0, i32 1 + store i64 0, ptr %a1591 + br label %each.cond8357 +each.cond8357: + %t1592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1590, i32 0, i32 1 + %t1593 = load i64, ptr %t1592 + %t1594 = load i64, ptr %a1591 + %t1595 = icmp slt i64 %t1594, %t1593 + br i1 %t1595, label %each.body8358, label %each.end8360 +each.body8358: + %t1596 = load ptr, ptr %t1590 + %t1597 = getelementptr inbounds %S.ast.Type, ptr %t1596, i64 %t1594 + %t1598 = load %S.ast.Type, ptr %t1597 + store %S.ast.Type %t1598, ptr %a1599 + %t1600 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1588, i32 0, i32 1 + %t1601 = load ptr, ptr %a1 + %t1602 = load %S.ast.Type, ptr %a1599 + %t1603 = load %S.ast.Node, ptr %a2 + %t1604 = call %S.ast.Type @finch.gen.resolve(ptr %t1601, %S.ast.Type %t1602, %S.ast.Node %t1603) + %t1605 = load i64, ptr %t1600 + %t1606 = add i64 %t1605, 1 + call void @finch_arr_reserve(ptr %a1588, i64 %t1606, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t1607 = load ptr, ptr %a1588 + %t1608 = getelementptr inbounds %S.ast.Type, ptr %t1607, i64 %t1605 + store %S.ast.Type %t1604, ptr %t1608 + store i64 %t1606, ptr %t1600 + br label %each.step8359 +each.step8359: + %t1609 = load i64, ptr %a1591 + %t1610 = add i64 %t1609, 1 + store i64 %t1610, ptr %a1591 + br label %each.cond8357 +each.end8360: + %t1611 = load ptr, ptr %a1 + %t1612 = load ptr, ptr %a1 + %t1613 = icmp eq ptr %t1612, null + br i1 %t1613, label %panic8361, label %ok8362 +panic8361: + call void @finch_panic(ptr @.str.5428, i64 5059, ptr @.str.5429) + unreachable +ok8362: + %t1614 = getelementptr inbounds %S.gen.Gen, ptr %t1612, i32 0, i32 14 + %t1615 = load { ptr, i64, i64 }, ptr %t1614 + %t1616 = load { ptr, i64, i64 }, ptr %a8 + %t1617 = load { ptr, i64, i64 }, ptr %a1588 + %t1618 = load %S.ast.Node, ptr %a2 + %t1619 = call %S.ast.Type @finch.gen.instStruct(ptr %t1611, { ptr, i64, i64 } %t1615, { ptr, i64, i64 } %t1616, { ptr, i64, i64 } %t1617, %S.ast.Node %t1618) + store %S.ast.Type %t1619, ptr %a1620 + %t1621 = load ptr, ptr %a1 + %t1622 = load ptr, ptr %a1 + %t1623 = getelementptr inbounds %S.ast.Type, ptr %a1620, i32 0, i32 3 + %t1624 = load { ptr, i64, i64 }, ptr %t1623 + %t1625 = getelementptr inbounds %S.ast.Type, ptr %a1620, i32 0, i32 2 + %t1626 = load { ptr, i64, i64 }, ptr %t1625 + %t1627 = call i64 @finch.gen.findStruct(ptr %t1622, { ptr, i64, i64 } %t1624, { ptr, i64, i64 } %t1626) + %t1628 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1629 = load { ptr, i64, i64 }, ptr %t1628 + %t1630 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t1631 = load { ptr, i64, i64 }, ptr %t1630 + %t1632 = load %S.ast.Node, ptr %a2 + %t1633 = call %S.gen.Val @finch.gen.construct(ptr %t1621, i64 %t1627, { ptr, i64, i64 } %t1629, { ptr, i64, i64 } %t1631, %S.ast.Node %t1632) + call void @finch.drop.S_ast_Type(ptr %a1620) + call void @finch.drop.arr_S_ast_Type(ptr %a1588) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1633 +endif8353: + %t1634 = load ptr, ptr %a1 + %t1635 = load ptr, ptr %a1 + %t1636 = icmp eq ptr %t1635, null + br i1 %t1636, label %panic8363, label %ok8364 +panic8363: + call void @finch_panic(ptr @.str.5430, i64 5062, ptr @.str.5431) + unreachable +ok8364: + %t1637 = getelementptr inbounds %S.gen.Gen, ptr %t1635, i32 0, i32 14 + %t1638 = load { ptr, i64, i64 }, ptr %t1637 + %t1639 = load { ptr, i64, i64 }, ptr %a8 + %t1640 = call i64 @finch.gen.findStruct(ptr %t1634, { ptr, i64, i64 } %t1638, { ptr, i64, i64 } %t1639) + store i64 %t1640, ptr %a1641 + %t1642 = load i64, ptr %a1641 + %t1643 = icmp sge i64 %t1642, 0 + br i1 %t1643, label %then8365, label %endif8367 +then8365: + %t1644 = load ptr, ptr %a1 + %t1645 = icmp eq ptr %t1644, null + br i1 %t1645, label %panic8368, label %ok8369 +panic8368: + call void @finch_panic(ptr @.str.5432, i64 5064, ptr @.str.5433) + unreachable +ok8369: + %t1646 = getelementptr inbounds %S.gen.Gen, ptr %t1644, i32 0, i32 16 + %t1647 = load i64, ptr %a1641 + %t1648 = load { ptr, i64, i64 }, ptr %t1646 + %t1649 = extractvalue { ptr, i64, i64 } %t1648, 1 + %t1650 = icmp uge i64 %t1647, %t1649 + br i1 %t1650, label %range8370, label %inrange8371 +range8370: + call void @finch_panic_index(ptr @.str.5434, i64 5064, i64 %t1647, i64 %t1649) + unreachable +inrange8371: + %t1651 = extractvalue { ptr, i64, i64 } %t1648, 0 + %t1652 = getelementptr inbounds %S.gen.StructDef, ptr %t1651, i64 %t1647 + %t1653 = load %S.gen.StructDef, ptr %t1652 + store %S.gen.StructDef %t1653, ptr %a1654 + call void @finch.copy.S_gen_StructDef(ptr %a1655, ptr %a1654) + %t1656 = load %S.gen.StructDef, ptr %a1655 + store %S.gen.StructDef %t1656, ptr %a1657 + %t1658 = load ptr, ptr %a1 + %t1659 = icmp eq ptr %t1658, null + br i1 %t1659, label %panic8372, label %ok8373 +panic8372: + call void @finch_panic(ptr @.str.5435, i64 5065, ptr @.str.5436) + unreachable +ok8373: + %t1660 = getelementptr inbounds %S.gen.Gen, ptr %t1658, i32 0, i32 28 + %t1661 = load i1, ptr %t1660 + br label %logic.from8374 +logic.from8374: + br i1 %t1661, label %logic.rhs8375, label %logic.end8376 +logic.rhs8375: + %t1662 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 2 + %t1663 = load i1, ptr %t1662 + %t1664 = xor i1 %t1663, true + br label %logic.rend8377 +logic.rend8377: + br label %logic.end8376 +logic.end8376: + %t1665 = phi i1 [ false, %logic.from8374 ], [ %t1664, %logic.rend8377 ] + br i1 %t1665, label %then8378, label %endif8380 +then8378: + %t1666 = load ptr, ptr %a1 + %t1667 = icmp eq ptr %t1666, null + br i1 %t1667, label %panic8381, label %ok8382 +panic8381: + call void @finch_panic(ptr @.str.5437, i64 5066, ptr @.str.5438) + unreachable +ok8382: + %t1668 = getelementptr inbounds %S.gen.Gen, ptr %t1666, i32 0, i32 0 + %t1669 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 13 + %t1670 = load i64, ptr %t1669 + %t1671 = load { ptr, i64, i64 }, ptr %t1668 + %t1672 = extractvalue { ptr, i64, i64 } %t1671, 1 + %t1673 = icmp uge i64 %t1670, %t1672 + br i1 %t1673, label %range8383, label %inrange8384 +range8383: + call void @finch_panic_index(ptr @.str.5439, i64 5066, i64 %t1670, i64 %t1672) + unreachable +inrange8384: + %t1674 = extractvalue { ptr, i64, i64 } %t1671, 0 + %t1675 = getelementptr inbounds %S.ast.Program, ptr %t1674, i64 %t1670 + %t1676 = getelementptr inbounds %S.ast.Program, ptr %t1675, i32 0, i32 6 + %t1677 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 14 + %t1678 = load i64, ptr %t1677 + %t1679 = load { ptr, i64, i64 }, ptr %t1676 + %t1680 = extractvalue { ptr, i64, i64 } %t1679, 1 + %t1681 = icmp uge i64 %t1678, %t1680 + br i1 %t1681, label %range8385, label %inrange8386 +range8385: + call void @finch_panic_index(ptr @.str.5440, i64 5066, i64 %t1678, i64 %t1680) + unreachable +inrange8386: + %t1682 = extractvalue { ptr, i64, i64 } %t1679, 0 + %t1683 = getelementptr inbounds %S.ast.Node, ptr %t1682, i64 %t1678 + %t1684 = load %S.ast.Node, ptr %t1683 + store %S.ast.Node %t1684, ptr %a1685 + call void @finch.copy.S_ast_Node(ptr %a1686, ptr %a1685) + %t1687 = load %S.ast.Node, ptr %a1686 + store %S.ast.Node %t1687, ptr %a1688 + %t1689 = load ptr, ptr %a1 + %t1690 = load %S.ast.Node, ptr %a2 + %t1691 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t1692 = load i64, ptr %t1691 + %t1693 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t1694 = load i64, ptr %t1693 + %t1695 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 1 + %t1696 = load { ptr, i64, i64 }, ptr %t1695 + store { ptr, i64, i64 } { ptr @.str.5441, i64 16, i64 0 }, ptr %a1698 + store { ptr, i64, i64 } %t1696, ptr %a1699 + call void @finch_str_concat(ptr %a1697, ptr %a1698, ptr %a1699) + %t1700 = load { ptr, i64, i64 }, ptr %a1697 + store { ptr, i64, i64 } %t1700, ptr %a1702 + store { ptr, i64, i64 } { ptr @.str.5442, i64 3, i64 0 }, ptr %a1703 + call void @finch_str_concat(ptr %a1701, ptr %a1702, ptr %a1703) + store { ptr, i64, i64 } %t1700, ptr %a1704 + call void @finch_str_drop(ptr %a1704) + %t1705 = load { ptr, i64, i64 }, ptr %a1701 + %t1706 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 11 + %t1707 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1706, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5443, i64 2, i64 0 }, ptr %a1708 + call void @finch_str_join(ptr %a1709, ptr %t1706, ptr %a1708) + %t1710 = load { ptr, i64, i64 }, ptr %a1709 + store { ptr, i64, i64 } %t1705, ptr %a1712 + store { ptr, i64, i64 } %t1710, ptr %a1713 + call void @finch_str_concat(ptr %a1711, ptr %a1712, ptr %a1713) + store { ptr, i64, i64 } %t1705, ptr %a1714 + call void @finch_str_drop(ptr %a1714) + store { ptr, i64, i64 } %t1710, ptr %a1715 + call void @finch_str_drop(ptr %a1715) + %t1716 = load { ptr, i64, i64 }, ptr %a1711 + store { ptr, i64, i64 } %t1716, ptr %a1718 + store { ptr, i64, i64 } { ptr @.str.5444, i64 6, i64 0 }, ptr %a1719 + call void @finch_str_concat(ptr %a1717, ptr %a1718, ptr %a1719) + store { ptr, i64, i64 } %t1716, ptr %a1720 + call void @finch_str_drop(ptr %a1720) + %t1721 = load { ptr, i64, i64 }, ptr %a1717 + %t1722 = load ptr, ptr %a1 + %t1723 = icmp eq ptr %t1722, null + br i1 %t1723, label %panic8387, label %ok8388 +panic8387: + call void @finch_panic(ptr @.str.5445, i64 5067, ptr @.str.5446) + unreachable +ok8388: + %t1724 = getelementptr inbounds %S.gen.Gen, ptr %t1722, i32 0, i32 1 + %t1725 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 13 + %t1726 = load i64, ptr %t1725 + %t1727 = load { ptr, i64, i64 }, ptr %t1724 + %t1728 = extractvalue { ptr, i64, i64 } %t1727, 1 + %t1729 = icmp uge i64 %t1726, %t1728 + br i1 %t1729, label %range8389, label %inrange8390 +range8389: + call void @finch_panic_index(ptr @.str.5447, i64 5067, i64 %t1726, i64 %t1728) + unreachable +inrange8390: + %t1730 = extractvalue { ptr, i64, i64 } %t1727, 0 + %t1731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1730, i64 %t1726 + %t1732 = load { ptr, i64, i64 }, ptr %t1731 + %t1733 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 11 + %t1734 = load i64, ptr %t1733 + %t1735 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 12 + %t1736 = load i64, ptr %t1735 + call void @finch.gen.noteRef(ptr %t1689, %S.ast.Node %t1690, i64 %t1692, i64 %t1694, { ptr, i64, i64 } %t1721, { ptr, i64, i64 } %t1732, i64 %t1734, i64 %t1736) + store { ptr, i64, i64 } %t1721, ptr %a1737 + call void @finch_str_drop(ptr %a1737) + call void @finch.drop.S_ast_Node(ptr %a1688) + br label %endif8380 +endif8380: + %t1738 = load ptr, ptr %a1 + %t1739 = load i64, ptr %a1641 + %t1740 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1741 = load { ptr, i64, i64 }, ptr %t1740 + %t1742 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t1743 = load { ptr, i64, i64 }, ptr %t1742 + %t1744 = load %S.ast.Node, ptr %a2 + %t1745 = call %S.gen.Val @finch.gen.construct(ptr %t1738, i64 %t1739, { ptr, i64, i64 } %t1741, { ptr, i64, i64 } %t1743, %S.ast.Node %t1744) + call void @finch.drop.S_gen_StructDef(ptr %a1657) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1745 +endif8367: + %t1746 = load ptr, ptr %a1 + %t1747 = load ptr, ptr %a1 + %t1748 = icmp eq ptr %t1747, null + br i1 %t1748, label %panic8391, label %ok8392 +panic8391: + call void @finch_panic(ptr @.str.5448, i64 5071, ptr @.str.5449) + unreachable +ok8392: + %t1749 = getelementptr inbounds %S.gen.Gen, ptr %t1747, i32 0, i32 14 + %t1750 = load { ptr, i64, i64 }, ptr %t1749 + %t1751 = load { ptr, i64, i64 }, ptr %a8 + %t1752 = call i64 @finch.gen.findEnum(ptr %t1746, { ptr, i64, i64 } %t1750, { ptr, i64, i64 } %t1751) + store i64 %t1752, ptr %a1753 + %t1754 = load i64, ptr %a1753 + %t1755 = icmp sge i64 %t1754, 0 + br i1 %t1755, label %then8393, label %endif8395 +then8393: + %t1756 = load ptr, ptr %a1 + %t1757 = load %S.ast.Node, ptr %a2 + %t1758 = load i64, ptr %a1753 + %t1759 = call %S.gen.Val @finch.gen.enumFrom(ptr %t1756, %S.ast.Node %t1757, i64 %t1758) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1759 +endif8395: + %t1760 = load ptr, ptr %a1 + %t1761 = icmp eq ptr %t1760, null + br i1 %t1761, label %panic8396, label %ok8397 +panic8396: + call void @finch_panic(ptr @.str.5450, i64 5075, ptr @.str.5451) + unreachable +ok8397: + %t1762 = getelementptr inbounds %S.gen.Gen, ptr %t1760, i32 0, i32 26 + %t1763 = getelementptr inbounds %S.cimport.CImports, ptr %t1762, i32 0, i32 0 + %t1764 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1764, ptr %a1765 + %t1766 = call i64 @finch_map_find(ptr %t1763, ptr %a1765, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t1767 = icmp sge i64 %t1766, 0 + br i1 %t1767, label %then8398, label %endif8400 +then8398: + %t1768 = load ptr, ptr %a1 + %t1769 = load %S.ast.Node, ptr %a2 + %t1770 = load ptr, ptr %a1 + %t1771 = icmp eq ptr %t1770, null + br i1 %t1771, label %panic8401, label %ok8402 +panic8401: + call void @finch_panic(ptr @.str.5452, i64 5076, ptr @.str.5453) + unreachable +ok8402: + %t1772 = getelementptr inbounds %S.gen.Gen, ptr %t1770, i32 0, i32 26 + %t1773 = getelementptr inbounds %S.cimport.CImports, ptr %t1772, i32 0, i32 0 + %t1774 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1774, ptr %a1775 + %t1776 = call i64 @finch_map_find(ptr %t1773, ptr %a1775, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t1777 = icmp slt i64 %t1776, 0 + br i1 %t1777, label %map.missing8403, label %map.found8404 +map.missing8403: + store { ptr, i64, i64 } zeroinitializer, ptr %a1778 + store { ptr, i64, i64 } %t1774, ptr %a1779 + call void @finch_buf_str(ptr %a1778, ptr %a1779, i32 1) + call void @finch_map_missing(ptr @.str.5454, i64 5076, ptr %a1778) + unreachable +map.found8404: + %t1780 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t1773, i32 0, i32 0 + %t1781 = load ptr, ptr %t1780 + %t1782 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1781, i64 %t1776 + %t1783 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1782, i32 0, i32 2 + %t1784 = load %S.cimport.CFunc, ptr %t1783 + %t1785 = call %S.gen.Val @finch.gen.callC(ptr %t1768, %S.ast.Node %t1769, %S.cimport.CFunc %t1784) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1785 +endif8400: + %t1786 = load ptr, ptr %a1 + %t1787 = load { ptr, i64, i64 }, ptr %a8 + %t1788 = call i64 @finch.gen.findStruct(ptr %t1786, { ptr, i64, i64 } { ptr @.str.5455, i64 1, i64 0 }, { ptr, i64, i64 } %t1787) + store i64 %t1788, ptr %a1641 + %t1789 = load i64, ptr %a1641 + %t1790 = icmp sge i64 %t1789, 0 + br i1 %t1790, label %then8405, label %endif8407 +then8405: + %t1791 = load ptr, ptr %a1 + %t1792 = load i64, ptr %a1641 + %t1793 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1794 = load { ptr, i64, i64 }, ptr %t1793 + %t1795 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t1796 = load { ptr, i64, i64 }, ptr %t1795 + %t1797 = load %S.ast.Node, ptr %a2 + %t1798 = call %S.gen.Val @finch.gen.construct(ptr %t1791, i64 %t1792, { ptr, i64, i64 } %t1794, { ptr, i64, i64 } %t1796, %S.ast.Node %t1797) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1798 +endif8407: + %t1799 = load ptr, ptr %a1 + %t1800 = load { ptr, i64, i64 }, ptr %a8 + %t1801 = call i64 @finch.gen.lookup(ptr %t1799, { ptr, i64, i64 } %t1800) + %t1802 = icmp sge i64 %t1801, 0 + br i1 %t1802, label %then8408, label %endif8410 +then8408: + %t1803 = load ptr, ptr %a1 + %t1804 = load %S.ast.Node, ptr %a2 + %t1805 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5456, i64 1, i64 0 }, ptr %a1807 + store { ptr, i64, i64 } %t1805, ptr %a1808 + call void @finch_str_concat(ptr %a1806, ptr %a1807, ptr %a1808) + %t1809 = load { ptr, i64, i64 }, ptr %a1806 + store { ptr, i64, i64 } %t1809, ptr %a1811 + store { ptr, i64, i64 } { ptr @.str.5457, i64 31, i64 0 }, ptr %a1812 + call void @finch_str_concat(ptr %a1810, ptr %a1811, ptr %a1812) + store { ptr, i64, i64 } %t1809, ptr %a1813 + call void @finch_str_drop(ptr %a1813) + %t1814 = load { ptr, i64, i64 }, ptr %a1810 + call void @finch.gen.fail(ptr %t1803, %S.ast.Node %t1804, { ptr, i64, i64 } %t1814) + store { ptr, i64, i64 } %t1814, ptr %a1815 + call void @finch_str_drop(ptr %a1815) + br label %endif8410 +endif8410: + %t1816 = load ptr, ptr %a1 + %t1817 = load %S.ast.Node, ptr %a2 + %t1818 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5458, i64 28, i64 0 }, ptr %a1820 + store { ptr, i64, i64 } %t1818, ptr %a1821 + call void @finch_str_concat(ptr %a1819, ptr %a1820, ptr %a1821) + %t1822 = load { ptr, i64, i64 }, ptr %a1819 + store { ptr, i64, i64 } %t1822, ptr %a1824 + store { ptr, i64, i64 } { ptr @.str.5459, i64 1, i64 0 }, ptr %a1825 + call void @finch_str_concat(ptr %a1823, ptr %a1824, ptr %a1825) + store { ptr, i64, i64 } %t1822, ptr %a1826 + call void @finch_str_drop(ptr %a1826) + %t1827 = load { ptr, i64, i64 }, ptr %a1823 + %t1828 = load { ptr, i64, i64 }, ptr %a8 + %t1829 = call { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %t1828) + store { ptr, i64, i64 } %t1827, ptr %a1831 + store { ptr, i64, i64 } %t1829, ptr %a1832 + call void @finch_str_concat(ptr %a1830, ptr %a1831, ptr %a1832) + store { ptr, i64, i64 } %t1827, ptr %a1833 + call void @finch_str_drop(ptr %a1833) + store { ptr, i64, i64 } %t1829, ptr %a1834 + call void @finch_str_drop(ptr %a1834) + %t1835 = load { ptr, i64, i64 }, ptr %a1830 + call void @finch.gen.fail(ptr %t1816, %S.ast.Node %t1817, { ptr, i64, i64 } %t1835) + store { ptr, i64, i64 } %t1835, ptr %a1836 + call void @finch_str_drop(ptr %a1836) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val zeroinitializer +} + +define internal %S.gen.Val @finch.gen.callFn(ptr %p0, i64 %p1, %S.ast.Node %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, { ptr, i64, i64 } %p6) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.gen.FnSig, align 16 + %a19 = alloca %S.gen.FnSig, align 16 + %a21 = alloca %S.gen.FnSig, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca i64, align 16 + %a70 = alloca i64, align 16 + %a83 = alloca %S.ast.Node, align 16 + %a84 = alloca %S.ast.Node, align 16 + %a86 = alloca %S.ast.Node, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca %S.gen.Val, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.gen.Val, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca %S.ast.Type, align 16 + %a166 = alloca %S.ast.Type, align 16 + %a171 = alloca %S.gen.Val, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca %S.gen.Val, align 16 + %a204 = alloca %S.gen.Val, align 16 + %a220 = alloca %S.gen.Val, align 16 + %a221 = alloca i64, align 16 + %a229 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store { ptr, i64, i64 } %p5, ptr %a6 + store { ptr, i64, i64 } %p6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic8411, label %ok8412 +panic8411: + call void @finch_panic(ptr @.str.5460, i64 5090, ptr @.str.5461) + unreachable +ok8412: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 15 + %t11 = load i64, ptr %a2 + %t12 = load { ptr, i64, i64 }, ptr %t10 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range8413, label %inrange8414 +range8413: + call void @finch_panic_index(ptr @.str.5462, i64 5090, i64 %t11, i64 %t13) + unreachable +inrange8414: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.gen.FnSig, ptr %t15, i64 %t11 + %t17 = load %S.gen.FnSig, ptr %t16 + store %S.gen.FnSig %t17, ptr %a18 + call void @finch.copy.S_gen_FnSig(ptr %a19, ptr %a18) + %t20 = load %S.gen.FnSig, ptr %a19 + store %S.gen.FnSig %t20, ptr %a21 + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 0 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = icmp eq i64 %t24, 0 + br label %logic.from8415 +logic.from8415: + br i1 %t25, label %logic.rhs8416, label %logic.end8417 +logic.rhs8416: + %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 1 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.5463, i64 4, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend8418 +logic.rend8418: + br label %logic.end8417 +logic.end8417: + %t32 = phi i1 [ false, %logic.from8415 ], [ %t31, %logic.rend8418 ] + br i1 %t32, label %then8419, label %endif8421 +then8419: + %t33 = load ptr, ptr %a1 + %t34 = load %S.ast.Node, ptr %a3 + call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } { ptr @.str.5464, i64 52, i64 0 }) + br label %endif8421 +endif8421: + %t35 = load ptr, ptr %a1 + %t36 = load %S.ast.Node, ptr %a3 + %t37 = load %S.gen.FnSig, ptr %a21 + call void @finch.gen.noteCall(ptr %t35, %S.ast.Node %t36, %S.gen.FnSig %t37) + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Node, ptr %a3 + %t40 = load i64, ptr %a4 + %t41 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 + %t43 = load i64, ptr %t42 + %t44 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.checkArgs(ptr %t38, %S.ast.Node %t39, i64 %t40, i64 %t43, { ptr, i64, i64 } %t44) + store { ptr, i64, i64 } zeroinitializer, ptr %a45 + %t46 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 2 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 + %t48 = load i64, ptr %t47 + %t49 = icmp sgt i64 %t48, 0 + br i1 %t49, label %then8422, label %endif8424 +then8422: + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 + %t51 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.5465, i64 4, i64 0 }, ptr %a53 + store { ptr, i64, i64 } %t51, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a52 + %t56 = load i64, ptr %t50 + %t57 = add i64 %t56, 1 + call void @finch_arr_reserve(ptr %a45, i64 %t57, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t58 = load ptr, ptr %a45 + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t56 + store { ptr, i64, i64 } %t55, ptr %t59 + store i64 %t57, ptr %t50 + br label %endif8424 +endif8424: + store { ptr, i64, i64 } zeroinitializer, ptr %a60 + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic8425, label %ok8426 +panic8425: + call void @finch_panic(ptr @.str.5466, i64 5101, ptr @.str.5467) + unreachable +ok8426: + %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 11 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + %t65 = load i64, ptr %t64 + store i64 %t65, ptr %a66 + %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 + %t69 = load i64, ptr %t68 + store i64 0, ptr %a70 + br label %for.cond8427 +for.cond8427: + %t71 = load i64, ptr %a70 + %t72 = icmp slt i64 %t71, %t69 + br i1 %t72, label %for.body8428, label %for.end8430 +for.body8428: + %t73 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t74 = load i64, ptr %a4 + %t75 = load i64, ptr %a70 + %t76 = add i64 %t74, %t75 + %t77 = load { ptr, i64, i64 }, ptr %t73 + %t78 = extractvalue { ptr, i64, i64 } %t77, 1 + %t79 = icmp uge i64 %t76, %t78 + br i1 %t79, label %range8431, label %inrange8432 +range8431: + call void @finch_panic_index(ptr @.str.5468, i64 5103, i64 %t76, i64 %t78) + unreachable +inrange8432: + %t80 = extractvalue { ptr, i64, i64 } %t77, 0 + %t81 = getelementptr inbounds %S.ast.Node, ptr %t80, i64 %t76 + %t82 = load %S.ast.Node, ptr %t81 + store %S.ast.Node %t82, ptr %a83 + call void @finch.copy.S_ast_Node(ptr %a84, ptr %a83) + %t85 = load %S.ast.Node, ptr %a84 + store %S.ast.Node %t85, ptr %a86 + %t87 = load ptr, ptr %a1 + %t88 = load ptr, ptr %a1 + %t89 = load %S.ast.Node, ptr %a86 + %t90 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t91 = load i64, ptr %a70 + %t92 = load { ptr, i64, i64 }, ptr %t90 + %t93 = extractvalue { ptr, i64, i64 } %t92, 1 + %t94 = icmp uge i64 %t91, %t93 + br i1 %t94, label %range8433, label %inrange8434 +range8433: + call void @finch_panic_index(ptr @.str.5469, i64 5104, i64 %t91, i64 %t93) + unreachable +inrange8434: + %t95 = extractvalue { ptr, i64, i64 } %t92, 0 + %t96 = getelementptr inbounds %S.ast.Type, ptr %t95, i64 %t91 + %t97 = load %S.ast.Type, ptr %t96 + %t98 = call %S.gen.Val @finch.gen.exprWant(ptr %t88, %S.ast.Node %t89, %S.ast.Type %t97) + %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t100 = load i64, ptr %a70 + %t101 = load { ptr, i64, i64 }, ptr %t99 + %t102 = extractvalue { ptr, i64, i64 } %t101, 1 + %t103 = icmp uge i64 %t100, %t102 + br i1 %t103, label %range8435, label %inrange8436 +range8435: + call void @finch_panic_index(ptr @.str.5470, i64 5104, i64 %t100, i64 %t102) + unreachable +inrange8436: + %t104 = extractvalue { ptr, i64, i64 } %t101, 0 + %t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 %t100 + %t106 = load %S.ast.Type, ptr %t105 + %t107 = load %S.ast.Node, ptr %a86 + %t108 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 14 + %t109 = load i64, ptr %a70 + %t110 = load { ptr, i64, i64 }, ptr %t108 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range8437, label %inrange8438 +range8437: + call void @finch_panic_index(ptr @.str.5472, i64 5104, i64 %t109, i64 %t111) + unreachable +inrange8438: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i64 %t109 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } { ptr @.str.5471, i64 10, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.5473, i64 1, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = call %S.gen.Val @finch.gen.coerce(ptr %t87, %S.gen.Val %t98, %S.ast.Type %t106, %S.ast.Node %t107, { ptr, i64, i64 } %t124) + store %S.gen.Val %t98, ptr %a126 + call void @finch.drop.S_gen_Val(ptr %a126) + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_drop(ptr %a127) + store %S.gen.Val %t125, ptr %a128 + %t129 = load ptr, ptr %a1 + %t130 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t131 = load i64, ptr %a70 + %t132 = load { ptr, i64, i64 }, ptr %t130 + %t133 = extractvalue { ptr, i64, i64 } %t132, 1 + %t134 = icmp uge i64 %t131, %t133 + br i1 %t134, label %range8439, label %inrange8440 +range8439: + call void @finch_panic_index(ptr @.str.5474, i64 5106, i64 %t131, i64 %t133) + unreachable +inrange8440: + %t135 = extractvalue { ptr, i64, i64 } %t132, 0 + %t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i64 %t131 + %t137 = load %S.ast.Type, ptr %t136 + %t138 = call i1 @finch.gen.owning(ptr %t129, %S.ast.Type %t137) + br label %logic.from8441 +logic.from8441: + br i1 %t138, label %logic.rhs8442, label %logic.end8443 +logic.rhs8442: + %t139 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 + %t140 = load i1, ptr %t139 + %t141 = xor i1 %t140, true + br label %logic.rend8444 +logic.rend8444: + br label %logic.end8443 +logic.end8443: + %t142 = phi i1 [ false, %logic.from8441 ], [ %t141, %logic.rend8444 ] + br label %logic.from8445 +logic.from8445: + br i1 %t142, label %logic.rhs8446, label %logic.end8447 +logic.rhs8446: + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t144 = load i64, ptr %t143 + %t145 = icmp sgt i64 %t144, 0 + br label %logic.rend8448 +logic.rend8448: + br label %logic.end8447 +logic.end8447: + %t146 = phi i1 [ false, %logic.from8445 ], [ %t145, %logic.rend8448 ] + br label %logic.from8449 +logic.from8449: + br i1 %t146, label %logic.rhs8450, label %logic.end8451 +logic.rhs8450: + %t147 = load %S.ast.Node, ptr %a86 + %t148 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t147) + %t149 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t148, ptr %a150 + store { ptr, i64, i64 } %t149, ptr %a151 + %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + store { ptr, i64, i64 } %t148, ptr %a154 + call void @finch_str_drop(ptr %a154) + br label %logic.rend8452 +logic.rend8452: + br label %logic.end8451 +logic.end8451: + %t155 = phi i1 [ false, %logic.from8449 ], [ %t153, %logic.rend8452 ] + br i1 %t155, label %then8453, label %endif8455 +then8453: + %t156 = load ptr, ptr %a1 + %t157 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 + %t158 = load { ptr, i64, i64 }, ptr %t157 + %t159 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 1 + %t160 = load %S.ast.Type, ptr %t159 + %t161 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t156, { ptr, i64, i64 } %t158, %S.ast.Type %t160) + %t162 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t161, 0 + %t163 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 1 + %t164 = load %S.ast.Type, ptr %t163 + store %S.ast.Type %t164, ptr %a165 + call void @finch.copy.S_ast_Type(ptr %a166, ptr %a165) + %t167 = load %S.ast.Type, ptr %a166 + %t168 = insertvalue %S.gen.Val %t162, %S.ast.Type %t167, 1 + %t169 = insertvalue %S.gen.Val %t168, i1 true, 2 + %t170 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t169, ptr %a128 + store %S.gen.Val %t170, ptr %a171 + call void @finch.drop.S_gen_Val(ptr %a171) + br label %endif8455 +endif8455: + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 + %t173 = load ptr, ptr %a1 + %t174 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t175 = load i64, ptr %a70 + %t176 = load { ptr, i64, i64 }, ptr %t174 + %t177 = extractvalue { ptr, i64, i64 } %t176, 1 + %t178 = icmp uge i64 %t175, %t177 + br i1 %t178, label %range8456, label %inrange8457 +range8456: + call void @finch_panic_index(ptr @.str.5475, i64 5109, i64 %t175, i64 %t177) + unreachable +inrange8457: + %t179 = extractvalue { ptr, i64, i64 } %t176, 0 + %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i64 %t175 + %t181 = load %S.ast.Type, ptr %t180 + %t182 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t181) + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.5476, i64 1, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 + %t189 = load { ptr, i64, i64 }, ptr %t188 + store { ptr, i64, i64 } %t187, ptr %a191 + store { ptr, i64, i64 } %t189, ptr %a192 + call void @finch_str_concat(ptr %a190, ptr %a191, ptr %a192) + store { ptr, i64, i64 } %t187, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = load { ptr, i64, i64 }, ptr %a190 + %t195 = load i64, ptr %t172 + %t196 = add i64 %t195, 1 + call void @finch_arr_reserve(ptr %a45, i64 %t196, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t197 = load ptr, ptr %a45 + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i64 %t195 + store { ptr, i64, i64 } %t194, ptr %t198 + store i64 %t196, ptr %t172 + %t199 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 + %t200 = load i1, ptr %t199 + br i1 %t200, label %then8458, label %endif8460 +then8458: + %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 + %t202 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t202, ptr %a203 + call void @finch.copy.S_gen_Val(ptr %a204, ptr %a203) + %t205 = load %S.gen.Val, ptr %a204 + %t206 = load i64, ptr %t201 + %t207 = add i64 %t206, 1 + call void @finch_arr_reserve(ptr %a60, i64 %t207, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t208 = load ptr, ptr %a60 + %t209 = getelementptr inbounds %S.gen.Val, ptr %t208, i64 %t206 + store %S.gen.Val %t205, ptr %t209 + store i64 %t207, ptr %t201 + br label %endif8460 +endif8460: + %t210 = load ptr, ptr %a1 + %t211 = load %S.gen.Val, ptr %a128 + call void @finch.gen.hold(ptr %t210, %S.gen.Val %t211) + call void @finch.drop.S_gen_Val(ptr %a128) + call void @finch.drop.S_ast_Node(ptr %a86) + br label %for.step8429 +for.step8429: + %t212 = load i64, ptr %a70 + %t213 = add i64 %t212, 1 + store i64 %t213, ptr %a70 + br label %for.cond8427 +for.end8430: + %t214 = load ptr, ptr %a1 + %t215 = load %S.gen.FnSig, ptr %a21 + %t216 = load %S.ast.Node, ptr %a3 + %t217 = load { ptr, i64, i64 }, ptr %a45 + %t218 = load { ptr, i64, i64 }, ptr %a5 + %t219 = call %S.gen.Val @finch.gen.emitCall(ptr %t214, %S.gen.FnSig %t215, %S.ast.Node %t216, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t218) + store %S.gen.Val %t219, ptr %a220 + store i64 0, ptr %a221 + br label %each.cond8461 +each.cond8461: + %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 + %t223 = load i64, ptr %t222 + %t224 = load i64, ptr %a221 + %t225 = icmp slt i64 %t224, %t223 + br i1 %t225, label %each.body8462, label %each.end8464 +each.body8462: + %t226 = load ptr, ptr %a60 + %t227 = getelementptr inbounds %S.gen.Val, ptr %t226, i64 %t224 + %t228 = load %S.gen.Val, ptr %t227 + store %S.gen.Val %t228, ptr %a229 + %t230 = load ptr, ptr %a1 + %t231 = load %S.gen.Val, ptr %a229 + call void @finch.gen.release(ptr %t230, %S.gen.Val %t231) + br label %each.step8463 +each.step8463: + %t232 = load i64, ptr %a221 + %t233 = add i64 %t232, 1 + store i64 %t233, ptr %a221 + br label %each.cond8461 +each.end8464: + %t234 = load ptr, ptr %a1 + %t235 = load i64, ptr %a66 + call void @finch.gen.heldEnd(ptr %t234, i64 %t235) + %t236 = load %S.gen.Val, ptr %a220 + call void @finch.drop.arr_S_gen_Val(ptr %a60) + call void @finch.drop.arr_str(ptr %a45) + call void @finch.drop.S_gen_FnSig(ptr %a21) + ret %S.gen.Val %t236 +} + +define internal %S.gen.Val @finch.gen.emitCall(ptr %p0, %S.gen.FnSig %p1, %S.ast.Node %p2, { ptr, i64, i64 } %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.FnSig, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca %S.ast.Type, align 16 + %a201 = alloca %S.ast.Type, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca %S.ast.Type, align 16 + %a235 = alloca %S.ast.Type, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca %S.ast.Type, align 16 + %a255 = alloca %S.ast.Type, align 16 + %a264 = alloca %S.ast.Type, align 16 + %a265 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.gen.FnSig %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 + %t7 = load i1, ptr %t6 + br label %logic.from8465 +logic.from8465: + br i1 %t7, label %logic.rhs8466, label %logic.end8467 +logic.rhs8466: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic8468, label %ok8469 +panic8468: + call void @finch_panic(ptr @.str.5477, i64 5125, ptr @.str.5478) + unreachable +ok8469: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 41 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = load %S.ast.Node, ptr %a3 + %t13 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t12) + store { ptr, i64, i64 } %t11, ptr %a14 + store { ptr, i64, i64 } %t13, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp eq i32 %t16, 0 + store { ptr, i64, i64 } %t13, ptr %a18 + call void @finch_str_drop(ptr %a18) + br label %logic.rend8470 +logic.rend8470: + br label %logic.end8467 +logic.end8467: + %t19 = phi i1 [ false, %logic.from8465 ], [ %t17, %logic.rend8470 ] + br i1 %t19, label %then8471, label %endif8473 +then8471: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Node, ptr %a3 + %t22 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.5479, i64 1, i64 0 }, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.5480, i64 39, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t31, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t31, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.5481, i64 19, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + %t43 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t42, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t42, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.5482, i64 27, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t53, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t53, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t59, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.5483, i64 5, i64 0 }, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + store { ptr, i64, i64 } %t59, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a60 + call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } %t64) + store { ptr, i64, i64 } %t64, ptr %a65 + call void @finch_str_drop(ptr %a65) + br label %endif8473 +endif8473: + %t66 = load ptr, ptr %a1 + %t67 = load %S.gen.FnSig, ptr %a2 + %t68 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t66, %S.gen.FnSig %t67) + store { ptr, i64, i64 } { ptr @.str.5484, i64 5, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.5485, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t78, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t78, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.5486, i64 1, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5487, i64 2, i64 0 }, ptr %a92 + call void @finch_str_join(ptr %a93, ptr %a4, ptr %a92) + %t94 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t90, ptr %a96 + store { ptr, i64, i64 } %t94, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t90, ptr %a98 + call void @finch_str_drop(ptr %a98) + store { ptr, i64, i64 } %t94, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.5488, i64 1, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + store { ptr, i64, i64 } %t100, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a101 + store { ptr, i64, i64 } %t105, ptr %a106 + %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 + %t108 = load i1, ptr %t107 + br i1 %t108, label %then8474, label %endif8476 +then8474: + %t109 = load ptr, ptr %a1 + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t109, { ptr, i64, i64 } %t110) + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load ptr, ptr %a1 + %t114 = load ptr, ptr %a1 + %t115 = load %S.gen.FnSig, ptr %a2 + %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t114, %S.gen.FnSig %t115) + store { ptr, i64, i64 } { ptr @.str.5489, i64 13, i64 0 }, ptr %a118 + store { ptr, i64, i64 } %t116, ptr %a119 + call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) + store { ptr, i64, i64 } %t116, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.5490, i64 1, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t126, ptr %a129 + store { ptr, i64, i64 } %t127, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t126, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t132, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.5491, i64 3, i64 0 }, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + %t138 = call { ptr, i64, i64 } @finch.gen.op(ptr %t113, { ptr, i64, i64 } %t137) + store { ptr, i64, i64 } %t137, ptr %a139 + call void @finch_str_drop(ptr %a139) + store { ptr, i64, i64 } %t138, ptr %a140 + %t141 = load ptr, ptr %a1 + %t142 = load { ptr, i64, i64 }, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.5492, i64 7, i64 0 }, ptr %a144 + store { ptr, i64, i64 } %t142, ptr %a145 + call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a143 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.5493, i64 6, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = call { ptr, i64, i64 } @finch.gen.op(ptr %t141, { ptr, i64, i64 } %t151) + store { ptr, i64, i64 } %t151, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load ptr, ptr %a1 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic8477, label %ok8478 +panic8477: + call void @finch_panic(ptr @.str.5494, i64 5132, ptr @.str.5495) + unreachable +ok8478: + %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 42 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t152, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load ptr, ptr %a1 + %t160 = load ptr, ptr %a1 + %t161 = load %S.gen.FnSig, ptr %a2 + %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t160, %S.gen.FnSig %t161) + store { ptr, i64, i64 } { ptr @.str.5496, i64 13, i64 0 }, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t162, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t167, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.5497, i64 1, i64 0 }, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t167, ptr %a171 + call void @finch_str_drop(ptr %a171) + %t172 = load { ptr, i64, i64 }, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t172, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t172, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5498, i64 3, i64 0 }, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t178, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t159, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load ptr, ptr %a1 + %t187 = icmp eq ptr %t186, null + br i1 %t187, label %panic8479, label %ok8480 +panic8479: + call void @finch_panic(ptr @.str.5499, i64 5133, ptr @.str.5500) + unreachable +ok8480: + %t188 = getelementptr inbounds %S.gen.Gen, ptr %t186, i32 0, i32 43 + %t189 = load { ptr, i64, i64 }, ptr %t188 + store { ptr, i64, i64 } %t184, ptr %t188 + store { ptr, i64, i64 } %t189, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t192 = getelementptr inbounds %S.ast.Type, ptr %t191, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + store { ptr, i64, i64 } %t193, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.5501, i64 4, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br i1 %t197, label %then8481, label %endif8483 +then8481: + %t198 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t199 = load %S.ast.Type, ptr %t198 + store %S.ast.Type %t199, ptr %a200 + call void @finch.copy.S_ast_Type(ptr %a201, ptr %a200) + %t202 = load %S.ast.Type, ptr %a201 + %t203 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t202, 1 + call void @finch_str_drop(ptr %a140) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t203 +endif8483: + %t204 = load ptr, ptr %a1 + %t205 = load ptr, ptr %a1 + %t206 = load %S.gen.FnSig, ptr %a2 + %t207 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t205, %S.gen.FnSig %t206) + store { ptr, i64, i64 } { ptr @.str.5502, i64 13, i64 0 }, ptr %a209 + store { ptr, i64, i64 } %t207, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + store { ptr, i64, i64 } %t207, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t212, ptr %a214 + store { ptr, i64, i64 } { ptr @.str.5503, i64 1, i64 0 }, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t212, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + %t218 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t217, ptr %a220 + store { ptr, i64, i64 } %t218, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t217, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.5504, i64 3, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t204, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t228, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t229, 0 + %t232 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t233 = load %S.ast.Type, ptr %t232 + store %S.ast.Type %t233, ptr %a234 + call void @finch.copy.S_ast_Type(ptr %a235, ptr %a234) + %t236 = load %S.ast.Type, ptr %a235 + %t237 = insertvalue %S.gen.Val %t231, %S.ast.Type %t236, 1 + %t238 = load ptr, ptr %a1 + %t239 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t240 = load %S.ast.Type, ptr %t239 + %t241 = call i1 @finch.gen.owning(ptr %t238, %S.ast.Type %t240) + %t242 = insertvalue %S.gen.Val %t237, i1 %t241, 2 + call void @finch_str_drop(ptr %a140) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t242 +endif8476: + %t243 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i32 0, i32 0 + %t245 = load { ptr, i64, i64 }, ptr %t244 + store { ptr, i64, i64 } %t245, ptr %a246 + store { ptr, i64, i64 } { ptr @.str.5505, i64 4, i64 0 }, ptr %a247 + %t248 = call i32 @finch_str_eq(ptr %a246, ptr %a247) + %t249 = icmp ne i32 %t248, 0 + br i1 %t249, label %then8484, label %endif8486 +then8484: + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a106 + call void @finch.gen.emit(ptr %t250, { ptr, i64, i64 } %t251) + %t252 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t253 = load %S.ast.Type, ptr %t252 + store %S.ast.Type %t253, ptr %a254 + call void @finch.copy.S_ast_Type(ptr %a255, ptr %a254) + %t256 = load %S.ast.Type, ptr %a255 + %t257 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t256, 1 + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t257 +endif8486: + %t258 = load ptr, ptr %a1 + %t259 = load { ptr, i64, i64 }, ptr %a106 + %t260 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t259) + %t261 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t260, 0 + %t262 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t263 = load %S.ast.Type, ptr %t262 + store %S.ast.Type %t263, ptr %a264 + call void @finch.copy.S_ast_Type(ptr %a265, ptr %a264) + %t266 = load %S.ast.Type, ptr %a265 + %t267 = insertvalue %S.gen.Val %t261, %S.ast.Type %t266, 1 + %t268 = load ptr, ptr %a1 + %t269 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t270 = load %S.ast.Type, ptr %t269 + %t271 = call i1 @finch.gen.owning(ptr %t268, %S.ast.Type %t270) + %t272 = insertvalue %S.gen.Val %t267, i1 %t271, 2 + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t272 +} + +define internal %S.gen.Val @finch.gen.construct(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a16 = alloca %S.gen.StructDef, align 16 + %a17 = alloca %S.gen.StructDef, align 16 + %a19 = alloca %S.gen.StructDef, align 16 + %a20 = alloca %S.ast.Node, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a44 = alloca %S.ast.Node, align 16 + %a47 = alloca %S.ast.Node, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca %S.ast.Type, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca i1, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca i64, align 16 + %a95 = alloca i64, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca i64, align 16 + %a196 = alloca i64, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca i64, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca i64, align 16 + %a294 = alloca i64, align 16 + %a305 = alloca %S.ast.Type, align 16 + %a306 = alloca %S.ast.Type, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a309 = alloca %S.gen.Val, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca %S.gen.Val, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca %S.gen.Val, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca %S.gen.Val, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca %S.gen.Val, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca %S.ast.Type, align 16 + %a562 = alloca %S.ast.Type, align 16 + %a566 = alloca %S.gen.Val, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a644 = alloca %S.ast.Type, align 16 + %a645 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic8487, label %ok8488 +panic8487: + call void @finch_panic(ptr @.str.5506, i64 5147, ptr @.str.5507) + unreachable +ok8488: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range8489, label %inrange8490 +range8489: + call void @finch_panic_index(ptr @.str.5508, i64 5147, i64 %t9, i64 %t11) + unreachable +inrange8490: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 + %t15 = load %S.gen.StructDef, ptr %t14 + store %S.gen.StructDef %t15, ptr %a16 + call void @finch.copy.S_gen_StructDef(ptr %a17, ptr %a16) + %t18 = load %S.gen.StructDef, ptr %a17 + store %S.gen.StructDef %t18, ptr %a19 + store %S.ast.Node zeroinitializer, ptr %a20 + %t21 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 + %t22 = load i1, ptr %t21 + %t23 = xor i1 %t22, true + br i1 %t23, label %then8491, label %endif8493 +then8491: + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic8494, label %ok8495 +panic8494: + call void @finch_panic(ptr @.str.5509, i64 5150, ptr @.str.5510) + unreachable +ok8495: + %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 13 + %t28 = load i64, ptr %t27 + %t29 = load { ptr, i64, i64 }, ptr %t26 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range8496, label %inrange8497 +range8496: + call void @finch_panic_index(ptr @.str.5511, i64 5150, i64 %t28, i64 %t30) + unreachable +inrange8497: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 + %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 + %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 14 + %t36 = load i64, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %t34 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range8498, label %inrange8499 +range8498: + call void @finch_panic_index(ptr @.str.5512, i64 5150, i64 %t36, i64 %t38) + unreachable +inrange8499: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 + %t42 = load %S.ast.Node, ptr %t41 + store %S.ast.Node %t42, ptr %a43 + call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) + %t45 = load %S.ast.Node, ptr %a44 + %t46 = load %S.ast.Node, ptr %a20 + store %S.ast.Node %t45, ptr %a20 + store %S.ast.Node %t46, ptr %a47 + call void @finch.drop.S_ast_Node(ptr %a47) + br label %endif8493 +endif8493: + %t48 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.5513, i64 6, i64 0 }, 0 + %t49 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_copy(ptr %a52, ptr %a51) + %t53 = load { ptr, i64, i64 }, ptr %a52 + %t54 = insertvalue %S.ast.Type %t48, { ptr, i64, i64 } %t53, 2 + %t55 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 + %t56 = load { ptr, i64, i64 }, ptr %t55 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_copy(ptr %a58, ptr %a57) + %t59 = load { ptr, i64, i64 }, ptr %a58 + %t60 = insertvalue %S.ast.Type %t54, { ptr, i64, i64 } %t59, 3 + store %S.ast.Type %t60, ptr %a61 + %t62 = load ptr, ptr %a1 + %t63 = load %S.ast.Type, ptr %a61 + %t64 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t62, %S.ast.Type %t63) + store { ptr, i64, i64 } %t64, ptr %a65 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t67 = load i64, ptr %t66 + %t68 = icmp sgt i64 %t67, 0 + br label %logic.from8500 +logic.from8500: + br i1 %t68, label %logic.rhs8501, label %logic.end8502 +logic.rhs8501: + %t69 = load { ptr, i64, i64 }, ptr %a4 + %t70 = extractvalue { ptr, i64, i64 } %t69, 1 + %t71 = icmp uge i64 0, %t70 + br i1 %t71, label %range8503, label %inrange8504 +range8503: + call void @finch_panic_index(ptr @.str.5514, i64 5154, i64 0, i64 %t70) + unreachable +inrange8504: + %t72 = extractvalue { ptr, i64, i64 } %t69, 0 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i64 0 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = icmp sgt i64 %t75, 0 + br label %logic.rend8505 +logic.rend8505: + br label %logic.end8502 +logic.end8502: + %t77 = phi i1 [ false, %logic.from8500 ], [ %t76, %logic.rend8505 ] + store i1 %t77, ptr %a78 + store { ptr, i64, i64 } zeroinitializer, ptr %a79 + %t80 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i32 0, i32 1 + %t82 = load i64, ptr %t81 + store i64 0, ptr %a83 + br label %for.cond8506 +for.cond8506: + %t84 = load i64, ptr %a83 + %t85 = icmp slt i64 %t84, %t82 + br i1 %t85, label %for.body8507, label %for.end8509 +for.body8507: + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %a79, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %a79, i64 %t88, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %a79 + %t90 = getelementptr inbounds i64, ptr %t89, i64 %t87 + store i64 -1, ptr %t90 + store i64 %t88, ptr %t86 + br label %for.step8508 +for.step8508: + %t91 = load i64, ptr %a83 + %t92 = add i64 %t91, 1 + store i64 %t92, ptr %a83 + br label %for.cond8506 +for.end8509: + %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t94 = load i64, ptr %t93 + store i64 0, ptr %a95 + br label %for.cond8510 +for.cond8510: + %t96 = load i64, ptr %a95 + %t97 = icmp slt i64 %t96, %t94 + br i1 %t97, label %for.body8511, label %for.end8513 +for.body8511: + %t98 = load i64, ptr %a95 + %t99 = load { ptr, i64, i64 }, ptr %a4 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 %t98, %t100 + br i1 %t101, label %range8514, label %inrange8515 +range8514: + call void @finch_panic_index(ptr @.str.5515, i64 5160, i64 %t98, i64 %t100) + unreachable +inrange8515: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t98 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 + %t105 = load i64, ptr %t104 + %t106 = icmp sgt i64 %t105, 0 + %t107 = load i1, ptr %a78 + %t108 = icmp ne i1 %t106, %t107 + br i1 %t108, label %then8516, label %endif8518 +then8516: + %t109 = load ptr, ptr %a1 + %t110 = load i64, ptr %a95 + %t111 = load { ptr, i64, i64 }, ptr %a3 + %t112 = extractvalue { ptr, i64, i64 } %t111, 1 + %t113 = icmp uge i64 %t110, %t112 + br i1 %t113, label %range8519, label %inrange8520 +range8519: + call void @finch_panic_index(ptr @.str.5516, i64 5161, i64 %t110, i64 %t112) + unreachable +inrange8520: + %t114 = extractvalue { ptr, i64, i64 } %t111, 0 + %t115 = getelementptr inbounds %S.ast.Node, ptr %t114, i64 %t110 + %t116 = load %S.ast.Node, ptr %t115 + call void @finch.gen.fail(ptr %t109, %S.ast.Node %t116, { ptr, i64, i64 } { ptr @.str.5517, i64 69, i64 0 }) + br label %endif8518 +endif8518: + %t117 = load i1, ptr %a78 + %t118 = xor i1 %t117, true + br i1 %t118, label %then8521, label %endif8523 +then8521: + %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t120 = load i64, ptr %t119 + %t121 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t121, i32 0, i32 1 + %t123 = load i64, ptr %t122 + %t124 = icmp ne i64 %t120, %t123 + br i1 %t124, label %then8524, label %endif8526 +then8524: + %t125 = load ptr, ptr %a1 + %t126 = load %S.ast.Node, ptr %a5 + %t127 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.5518, i64 5, i64 0 }, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a129 + %t133 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load i64, ptr %t134 + call void @finch_str_from_int(ptr %a136, i64 %t135) + %t137 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t132, ptr %a139 + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t132, ptr %a141 + call void @finch_str_drop(ptr %a141) + store { ptr, i64, i64 } %t137, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a138 + store { ptr, i64, i64 } %t143, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.5519, i64 17, i64 0 }, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + store { ptr, i64, i64 } %t143, ptr %a147 + call void @finch_str_drop(ptr %a147) + %t148 = load { ptr, i64, i64 }, ptr %a144 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t150 = load i64, ptr %t149 + call void @finch_str_from_int(ptr %a151, i64 %t150) + %t152 = load { ptr, i64, i64 }, ptr %a151 + store { ptr, i64, i64 } %t148, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t148, ptr %a156 + call void @finch_str_drop(ptr %a156) + store { ptr, i64, i64 } %t152, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a153 + store { ptr, i64, i64 } %t158, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.5520, i64 23, i64 0 }, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t158, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a159 + %t164 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t165 = load { ptr, i64, i64 }, ptr %t164 + store { ptr, i64, i64 } %t163, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + store { ptr, i64, i64 } %t163, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t170, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.5521, i64 15, i64 0 }, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t170, ptr %a174 + call void @finch_str_drop(ptr %a174) + %t175 = load { ptr, i64, i64 }, ptr %a171 + call void @finch.gen.fail(ptr %t125, %S.ast.Node %t126, { ptr, i64, i64 } %t175) + store { ptr, i64, i64 } %t175, ptr %a176 + call void @finch_str_drop(ptr %a176) + br label %endif8526 +endif8526: + %t177 = load i64, ptr %a95 + %t178 = load i64, ptr %a95 + %t179 = load { ptr, i64, i64 }, ptr %a79 + %t180 = extractvalue { ptr, i64, i64 } %t179, 1 + %t181 = icmp uge i64 %t178, %t180 + br i1 %t181, label %range8527, label %inrange8528 +range8527: + call void @finch_panic_index(ptr @.str.5522, i64 5167, i64 %t178, i64 %t180) + unreachable +inrange8528: + %t182 = extractvalue { ptr, i64, i64 } %t179, 0 + %t183 = getelementptr inbounds i64, ptr %t182, i64 %t178 + store i64 %t177, ptr %t183 + br label %for.step8512 +endif8523: + %t184 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i32 0, i32 1 + %t186 = load i64, ptr %a95 + %t187 = load { ptr, i64, i64 }, ptr %a4 + %t188 = extractvalue { ptr, i64, i64 } %t187, 1 + %t189 = icmp uge i64 %t186, %t188 + br i1 %t189, label %range8529, label %inrange8530 +range8529: + call void @finch_panic_index(ptr @.str.5523, i64 5170, i64 %t186, i64 %t188) + unreachable +inrange8530: + %t190 = extractvalue { ptr, i64, i64 } %t187, 0 + %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i64 %t186 + %t192 = load { ptr, i64, i64 }, ptr %t191 + store i64 -1, ptr %a193 + %t194 = load i64, ptr %t185 + %t195 = load ptr, ptr %t184 + store i64 0, ptr %a196 + br label %find.cond8531 +find.cond8531: + %t197 = load i64, ptr %a196 + %t198 = icmp slt i64 %t197, %t194 + br i1 %t198, label %find.body8532, label %find.end8535 +find.body8532: + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t195, i64 %t197 + %t200 = load { ptr, i64, i64 }, ptr %t199 + store { ptr, i64, i64 } %t200, ptr %a201 + store { ptr, i64, i64 } %t192, ptr %a202 + %t203 = call i32 @finch_str_eq(ptr %a201, ptr %a202) + %t204 = icmp ne i32 %t203, 0 + br i1 %t204, label %find.hit8533, label %find.next8534 +find.hit8533: + store i64 %t197, ptr %a193 + br label %find.end8535 +find.next8534: + %t205 = add i64 %t197, 1 + store i64 %t205, ptr %a196 + br label %find.cond8531 +find.end8535: + %t206 = load i64, ptr %a193 + store i64 %t206, ptr %a207 + %t208 = load i64, ptr %a207 + %t209 = icmp slt i64 %t208, 0 + br i1 %t209, label %then8536, label %endif8538 +then8536: + %t210 = load ptr, ptr %a1 + %t211 = load i64, ptr %a95 + %t212 = load { ptr, i64, i64 }, ptr %a3 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 %t211, %t213 + br i1 %t214, label %range8539, label %inrange8540 +range8539: + call void @finch_panic_index(ptr @.str.5524, i64 5172, i64 %t211, i64 %t213) + unreachable +inrange8540: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 %t211 + %t217 = load %S.ast.Node, ptr %t216 + %t218 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t219 = load { ptr, i64, i64 }, ptr %t218 + store { ptr, i64, i64 } %t219, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.5525, i64 15, i64 0 }, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a220 + %t224 = load i64, ptr %a95 + %t225 = load { ptr, i64, i64 }, ptr %a4 + %t226 = extractvalue { ptr, i64, i64 } %t225, 1 + %t227 = icmp uge i64 %t224, %t226 + br i1 %t227, label %range8541, label %inrange8542 +range8541: + call void @finch_panic_index(ptr @.str.5526, i64 5172, i64 %t224, i64 %t226) + unreachable +inrange8542: + %t228 = extractvalue { ptr, i64, i64 } %t225, 0 + %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i64 %t224 + %t230 = load { ptr, i64, i64 }, ptr %t229 + store { ptr, i64, i64 } %t223, ptr %a232 + store { ptr, i64, i64 } %t230, ptr %a233 + call void @finch_str_concat(ptr %a231, ptr %a232, ptr %a233) + store { ptr, i64, i64 } %t223, ptr %a234 + call void @finch_str_drop(ptr %a234) + %t235 = load { ptr, i64, i64 }, ptr %a231 + store { ptr, i64, i64 } %t235, ptr %a237 + store { ptr, i64, i64 } { ptr @.str.5527, i64 1, i64 0 }, ptr %a238 + call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) + store { ptr, i64, i64 } %t235, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a236 + call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t240) + store { ptr, i64, i64 } %t240, ptr %a241 + call void @finch_str_drop(ptr %a241) + br label %endif8538 +endif8538: + %t242 = load i64, ptr %a207 + %t243 = load { ptr, i64, i64 }, ptr %a79 + %t244 = extractvalue { ptr, i64, i64 } %t243, 1 + %t245 = icmp uge i64 %t242, %t244 + br i1 %t245, label %range8543, label %inrange8544 +range8543: + call void @finch_panic_index(ptr @.str.5528, i64 5174, i64 %t242, i64 %t244) + unreachable +inrange8544: + %t246 = extractvalue { ptr, i64, i64 } %t243, 0 + %t247 = getelementptr inbounds i64, ptr %t246, i64 %t242 + %t248 = load i64, ptr %t247 + %t249 = icmp sge i64 %t248, 0 + br i1 %t249, label %then8545, label %endif8547 +then8545: + %t250 = load ptr, ptr %a1 + %t251 = load i64, ptr %a95 + %t252 = load { ptr, i64, i64 }, ptr %a3 + %t253 = extractvalue { ptr, i64, i64 } %t252, 1 + %t254 = icmp uge i64 %t251, %t253 + br i1 %t254, label %range8548, label %inrange8549 +range8548: + call void @finch_panic_index(ptr @.str.5529, i64 5175, i64 %t251, i64 %t253) + unreachable +inrange8549: + %t255 = extractvalue { ptr, i64, i64 } %t252, 0 + %t256 = getelementptr inbounds %S.ast.Node, ptr %t255, i64 %t251 + %t257 = load %S.ast.Node, ptr %t256 + %t258 = load i64, ptr %a95 + %t259 = load { ptr, i64, i64 }, ptr %a4 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 %t258, %t260 + br i1 %t261, label %range8550, label %inrange8551 +range8550: + call void @finch_panic_index(ptr @.str.5531, i64 5175, i64 %t258, i64 %t260) + unreachable +inrange8551: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 %t258 + %t264 = load { ptr, i64, i64 }, ptr %t263 + store { ptr, i64, i64 } { ptr @.str.5530, i64 11, i64 0 }, ptr %a266 + store { ptr, i64, i64 } %t264, ptr %a267 + call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a265 + store { ptr, i64, i64 } %t268, ptr %a270 + store { ptr, i64, i64 } { ptr @.str.5532, i64 16, i64 0 }, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t268, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + call void @finch.gen.fail(ptr %t250, %S.ast.Node %t257, { ptr, i64, i64 } %t273) + store { ptr, i64, i64 } %t273, ptr %a274 + call void @finch_str_drop(ptr %a274) + br label %endif8547 +endif8547: + %t275 = load i64, ptr %a95 + %t276 = load i64, ptr %a207 + %t277 = load { ptr, i64, i64 }, ptr %a79 + %t278 = extractvalue { ptr, i64, i64 } %t277, 1 + %t279 = icmp uge i64 %t276, %t278 + br i1 %t279, label %range8552, label %inrange8553 +range8552: + call void @finch_panic_index(ptr @.str.5533, i64 5177, i64 %t276, i64 %t278) + unreachable +inrange8553: + %t280 = extractvalue { ptr, i64, i64 } %t277, 0 + %t281 = getelementptr inbounds i64, ptr %t280, i64 %t276 + store i64 %t275, ptr %t281 + br label %for.step8512 +for.step8512: + %t282 = load i64, ptr %a95 + %t283 = add i64 %t282, 1 + store i64 %t283, ptr %a95 + br label %for.cond8510 +for.end8513: + store { ptr, i64, i64 } { ptr @.str.5534, i64 15, i64 0 }, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = icmp eq ptr %t285, null + br i1 %t286, label %panic8554, label %ok8555 +panic8554: + call void @finch_panic(ptr @.str.5535, i64 5180, ptr @.str.5536) + unreachable +ok8555: + %t287 = getelementptr inbounds %S.gen.Gen, ptr %t285, i32 0, i32 11 + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i32 0, i32 1 + %t289 = load i64, ptr %t288 + store i64 %t289, ptr %a290 + %t291 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i32 0, i32 1 + %t293 = load i64, ptr %t292 + store i64 0, ptr %a294 + br label %for.cond8556 +for.cond8556: + %t295 = load i64, ptr %a294 + %t296 = icmp slt i64 %t295, %t293 + br i1 %t296, label %for.body8557, label %for.end8559 +for.body8557: + %t297 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 12 + %t298 = load i64, ptr %a294 + %t299 = load { ptr, i64, i64 }, ptr %t297 + %t300 = extractvalue { ptr, i64, i64 } %t299, 1 + %t301 = icmp uge i64 %t298, %t300 + br i1 %t301, label %range8560, label %inrange8561 +range8560: + call void @finch_panic_index(ptr @.str.5537, i64 5182, i64 %t298, i64 %t300) + unreachable +inrange8561: + %t302 = extractvalue { ptr, i64, i64 } %t299, 0 + %t303 = getelementptr inbounds %S.ast.Type, ptr %t302, i64 %t298 + %t304 = load %S.ast.Type, ptr %t303 + store %S.ast.Type %t304, ptr %a305 + call void @finch.copy.S_ast_Type(ptr %a306, ptr %a305) + %t307 = load %S.ast.Type, ptr %a306 + store %S.ast.Type %t307, ptr %a308 + store %S.gen.Val zeroinitializer, ptr %a309 + %t310 = load i64, ptr %a294 + %t311 = load { ptr, i64, i64 }, ptr %a79 + %t312 = extractvalue { ptr, i64, i64 } %t311, 1 + %t313 = icmp uge i64 %t310, %t312 + br i1 %t313, label %range8562, label %inrange8563 +range8562: + call void @finch_panic_index(ptr @.str.5538, i64 5184, i64 %t310, i64 %t312) + unreachable +inrange8563: + %t314 = extractvalue { ptr, i64, i64 } %t311, 0 + %t315 = getelementptr inbounds i64, ptr %t314, i64 %t310 + %t316 = load i64, ptr %t315 + %t317 = icmp sge i64 %t316, 0 + br i1 %t317, label %then8564, label %else8565 +then8564: + %t318 = load ptr, ptr %a1 + %t319 = load ptr, ptr %a1 + %t320 = load i64, ptr %a294 + %t321 = load { ptr, i64, i64 }, ptr %a79 + %t322 = extractvalue { ptr, i64, i64 } %t321, 1 + %t323 = icmp uge i64 %t320, %t322 + br i1 %t323, label %range8567, label %inrange8568 +range8567: + call void @finch_panic_index(ptr @.str.5539, i64 5185, i64 %t320, i64 %t322) + unreachable +inrange8568: + %t324 = extractvalue { ptr, i64, i64 } %t321, 0 + %t325 = getelementptr inbounds i64, ptr %t324, i64 %t320 + %t326 = load i64, ptr %t325 + %t327 = load { ptr, i64, i64 }, ptr %a3 + %t328 = extractvalue { ptr, i64, i64 } %t327, 1 + %t329 = icmp uge i64 %t326, %t328 + br i1 %t329, label %range8569, label %inrange8570 +range8569: + call void @finch_panic_index(ptr @.str.5540, i64 5185, i64 %t326, i64 %t328) + unreachable +inrange8570: + %t330 = extractvalue { ptr, i64, i64 } %t327, 0 + %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 + %t332 = load %S.ast.Node, ptr %t331 + %t333 = load %S.ast.Type, ptr %a308 + %t334 = call %S.gen.Val @finch.gen.exprWant(ptr %t319, %S.ast.Node %t332, %S.ast.Type %t333) + %t335 = load %S.ast.Type, ptr %a308 + %t336 = load i64, ptr %a294 + %t337 = load { ptr, i64, i64 }, ptr %a79 + %t338 = extractvalue { ptr, i64, i64 } %t337, 1 + %t339 = icmp uge i64 %t336, %t338 + br i1 %t339, label %range8571, label %inrange8572 +range8571: + call void @finch_panic_index(ptr @.str.5541, i64 5185, i64 %t336, i64 %t338) + unreachable +inrange8572: + %t340 = extractvalue { ptr, i64, i64 } %t337, 0 + %t341 = getelementptr inbounds i64, ptr %t340, i64 %t336 + %t342 = load i64, ptr %t341 + %t343 = load { ptr, i64, i64 }, ptr %a3 + %t344 = extractvalue { ptr, i64, i64 } %t343, 1 + %t345 = icmp uge i64 %t342, %t344 + br i1 %t345, label %range8573, label %inrange8574 +range8573: + call void @finch_panic_index(ptr @.str.5542, i64 5185, i64 %t342, i64 %t344) + unreachable +inrange8574: + %t346 = extractvalue { ptr, i64, i64 } %t343, 0 + %t347 = getelementptr inbounds %S.ast.Node, ptr %t346, i64 %t342 + %t348 = load %S.ast.Node, ptr %t347 + %t349 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t350 = load i64, ptr %a294 + %t351 = load { ptr, i64, i64 }, ptr %t349 + %t352 = extractvalue { ptr, i64, i64 } %t351, 1 + %t353 = icmp uge i64 %t350, %t352 + br i1 %t353, label %range8575, label %inrange8576 +range8575: + call void @finch_panic_index(ptr @.str.5544, i64 5185, i64 %t350, i64 %t352) + unreachable +inrange8576: + %t354 = extractvalue { ptr, i64, i64 } %t351, 0 + %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i64 %t350 + %t356 = load { ptr, i64, i64 }, ptr %t355 + store { ptr, i64, i64 } { ptr @.str.5543, i64 11, i64 0 }, ptr %a358 + store { ptr, i64, i64 } %t356, ptr %a359 + call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) + %t360 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t360, ptr %a362 + store { ptr, i64, i64 } { ptr @.str.5545, i64 1, i64 0 }, ptr %a363 + call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) + store { ptr, i64, i64 } %t360, ptr %a364 + call void @finch_str_drop(ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a361 + %t366 = call %S.gen.Val @finch.gen.coerce(ptr %t318, %S.gen.Val %t334, %S.ast.Type %t335, %S.ast.Node %t348, { ptr, i64, i64 } %t365) + store %S.gen.Val %t334, ptr %a367 + call void @finch.drop.S_gen_Val(ptr %a367) + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load %S.gen.Val, ptr %a309 + store %S.gen.Val %t366, ptr %a309 + store %S.gen.Val %t369, ptr %a370 + call void @finch.drop.S_gen_Val(ptr %a370) + br label %endif8566 +else8565: + %t371 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 + %t372 = load i1, ptr %t371 + %t373 = xor i1 %t372, true + br label %logic.from8577 +logic.from8577: + br i1 %t373, label %logic.rhs8578, label %logic.end8579 +logic.rhs8578: + %t374 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 + %t375 = load i64, ptr %a294 + %t376 = load { ptr, i64, i64 }, ptr %t374 + %t377 = extractvalue { ptr, i64, i64 } %t376, 1 + %t378 = icmp uge i64 %t375, %t377 + br i1 %t378, label %range8580, label %inrange8581 +range8580: + call void @finch_panic_index(ptr @.str.5546, i64 5186, i64 %t375, i64 %t377) + unreachable +inrange8581: + %t379 = extractvalue { ptr, i64, i64 } %t376, 0 + %t380 = getelementptr inbounds %S.ast.Node, ptr %t379, i64 %t375 + %t381 = getelementptr inbounds %S.ast.Node, ptr %t380, i32 0, i32 9 + %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %t381, i32 0, i32 1 + %t383 = load i64, ptr %t382 + %t384 = icmp sgt i64 %t383, 0 + br label %logic.rend8582 +logic.rend8582: + br label %logic.end8579 +logic.end8579: + %t385 = phi i1 [ false, %logic.from8577 ], [ %t384, %logic.rend8582 ] + br i1 %t385, label %then8583, label %else8584 +then8583: + %t386 = load ptr, ptr %a1 + %t387 = icmp eq ptr %t386, null + br i1 %t387, label %panic8586, label %ok8587 +panic8586: + call void @finch_panic(ptr @.str.5547, i64 5188, ptr @.str.5548) + unreachable +ok8587: + %t388 = getelementptr inbounds %S.gen.Gen, ptr %t386, i32 0, i32 10 + %t389 = load { ptr, i64, i64 }, ptr %t388 + store { ptr, i64, i64 } %t389, ptr %a390 + call void @finch.copy.arr_S_gen_Scope(ptr %a391, ptr %a390) + %t392 = load { ptr, i64, i64 }, ptr %a391 + store { ptr, i64, i64 } %t392, ptr %a393 + %t394 = load ptr, ptr %a1 + %t395 = icmp eq ptr %t394, null + br i1 %t395, label %panic8588, label %ok8589 +panic8588: + call void @finch_panic(ptr @.str.5549, i64 5189, ptr @.str.5550) + unreachable +ok8589: + %t396 = getelementptr inbounds %S.gen.Gen, ptr %t394, i32 0, i32 14 + %t397 = load { ptr, i64, i64 }, ptr %t396 + store { ptr, i64, i64 } %t397, ptr %a398 + call void @finch_str_copy(ptr %a399, ptr %a398) + %t400 = load { ptr, i64, i64 }, ptr %a399 + store { ptr, i64, i64 } %t400, ptr %a401 + %t402 = load ptr, ptr %a1 + %t403 = icmp eq ptr %t402, null + br i1 %t403, label %panic8590, label %ok8591 +panic8590: + call void @finch_panic(ptr @.str.5551, i64 5190, ptr @.str.5552) + unreachable +ok8591: + %t404 = getelementptr inbounds %S.gen.Gen, ptr %t402, i32 0, i32 18 + %t405 = load { ptr, i64, i64 }, ptr %t404 + store { ptr, i64, i64 } %t405, ptr %a406 + call void @finch.copy.arr_str(ptr %a407, ptr %a406) + %t408 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t408, ptr %a409 + %t410 = load ptr, ptr %a1 + %t411 = icmp eq ptr %t410, null + br i1 %t411, label %panic8592, label %ok8593 +panic8592: + call void @finch_panic(ptr @.str.5553, i64 5191, ptr @.str.5554) + unreachable +ok8593: + %t412 = getelementptr inbounds %S.gen.Gen, ptr %t410, i32 0, i32 19 + %t413 = load { ptr, i64, i64 }, ptr %t412 + store { ptr, i64, i64 } %t413, ptr %a414 + call void @finch.copy.arr_S_ast_Type(ptr %a415, ptr %a414) + %t416 = load { ptr, i64, i64 }, ptr %a415 + store { ptr, i64, i64 } %t416, ptr %a417 + %t418 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 6 + %t419 = load { ptr, i64, i64 }, ptr %t418 + %t420 = load ptr, ptr %a1 + %t421 = icmp eq ptr %t420, null + br i1 %t421, label %panic8594, label %ok8595 +panic8594: + call void @finch_panic(ptr @.str.5555, i64 5192, ptr @.str.5556) + unreachable +ok8595: + %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 18 + store { ptr, i64, i64 } %t419, ptr %a423 + call void @finch.copy.arr_str(ptr %a424, ptr %a423) + %t425 = load { ptr, i64, i64 }, ptr %a424 + %t426 = load { ptr, i64, i64 }, ptr %t422 + store { ptr, i64, i64 } %t425, ptr %t422 + store { ptr, i64, i64 } %t426, ptr %a427 + call void @finch.drop.arr_str(ptr %a427) + %t428 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 7 + %t429 = load { ptr, i64, i64 }, ptr %t428 + %t430 = load ptr, ptr %a1 + %t431 = icmp eq ptr %t430, null + br i1 %t431, label %panic8596, label %ok8597 +panic8596: + call void @finch_panic(ptr @.str.5557, i64 5193, ptr @.str.5558) + unreachable +ok8597: + %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 19 + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch.copy.arr_S_ast_Type(ptr %a434, ptr %a433) + %t435 = load { ptr, i64, i64 }, ptr %a434 + %t436 = load { ptr, i64, i64 }, ptr %t432 + store { ptr, i64, i64 } %t435, ptr %t432 + store { ptr, i64, i64 } %t436, ptr %a437 + call void @finch.drop.arr_S_ast_Type(ptr %a437) + store { ptr, i64, i64 } zeroinitializer, ptr %a438 + %t439 = load { ptr, i64, i64 }, ptr %a438 + %t440 = load ptr, ptr %a1 + %t441 = icmp eq ptr %t440, null + br i1 %t441, label %panic8598, label %ok8599 +panic8598: + call void @finch_panic(ptr @.str.5559, i64 5195, ptr @.str.5560) + unreachable +ok8599: + %t442 = getelementptr inbounds %S.gen.Gen, ptr %t440, i32 0, i32 10 + store { ptr, i64, i64 } %t439, ptr %a443 + call void @finch.copy.arr_S_gen_Scope(ptr %a444, ptr %a443) + %t445 = load { ptr, i64, i64 }, ptr %a444 + %t446 = load { ptr, i64, i64 }, ptr %t442 + store { ptr, i64, i64 } %t445, ptr %t442 + store { ptr, i64, i64 } %t446, ptr %a447 + call void @finch.drop.arr_S_gen_Scope(ptr %a447) + %t448 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t448) + %t449 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 + %t450 = load { ptr, i64, i64 }, ptr %t449 + %t451 = load ptr, ptr %a1 + %t452 = icmp eq ptr %t451, null + br i1 %t452, label %panic8600, label %ok8601 +panic8600: + call void @finch_panic(ptr @.str.5561, i64 5197, ptr @.str.5562) + unreachable +ok8601: + %t453 = getelementptr inbounds %S.gen.Gen, ptr %t451, i32 0, i32 14 + store { ptr, i64, i64 } %t450, ptr %a454 + call void @finch_str_copy(ptr %a455, ptr %a454) + %t456 = load { ptr, i64, i64 }, ptr %a455 + %t457 = load { ptr, i64, i64 }, ptr %t453 + store { ptr, i64, i64 } %t456, ptr %t453 + store { ptr, i64, i64 } %t457, ptr %a458 + call void @finch_str_drop(ptr %a458) + %t459 = load ptr, ptr %a1 + %t460 = load ptr, ptr %a1 + %t461 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 + %t462 = load i64, ptr %a294 + %t463 = load { ptr, i64, i64 }, ptr %t461 + %t464 = extractvalue { ptr, i64, i64 } %t463, 1 + %t465 = icmp uge i64 %t462, %t464 + br i1 %t465, label %range8602, label %inrange8603 +range8602: + call void @finch_panic_index(ptr @.str.5563, i64 5198, i64 %t462, i64 %t464) + unreachable +inrange8603: + %t466 = extractvalue { ptr, i64, i64 } %t463, 0 + %t467 = getelementptr inbounds %S.ast.Node, ptr %t466, i64 %t462 + %t468 = getelementptr inbounds %S.ast.Node, ptr %t467, i32 0, i32 9 + %t469 = load { ptr, i64, i64 }, ptr %t468 + %t470 = extractvalue { ptr, i64, i64 } %t469, 1 + %t471 = icmp uge i64 0, %t470 + br i1 %t471, label %range8604, label %inrange8605 +range8604: + call void @finch_panic_index(ptr @.str.5564, i64 5198, i64 0, i64 %t470) + unreachable +inrange8605: + %t472 = extractvalue { ptr, i64, i64 } %t469, 0 + %t473 = getelementptr inbounds %S.ast.Node, ptr %t472, i64 0 + %t474 = load %S.ast.Node, ptr %t473 + %t475 = load %S.ast.Type, ptr %a308 + %t476 = call %S.gen.Val @finch.gen.exprWant(ptr %t460, %S.ast.Node %t474, %S.ast.Type %t475) + %t477 = load %S.ast.Type, ptr %a308 + %t478 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 + %t479 = load i64, ptr %a294 + %t480 = load { ptr, i64, i64 }, ptr %t478 + %t481 = extractvalue { ptr, i64, i64 } %t480, 1 + %t482 = icmp uge i64 %t479, %t481 + br i1 %t482, label %range8606, label %inrange8607 +range8606: + call void @finch_panic_index(ptr @.str.5565, i64 5198, i64 %t479, i64 %t481) + unreachable +inrange8607: + %t483 = extractvalue { ptr, i64, i64 } %t480, 0 + %t484 = getelementptr inbounds %S.ast.Node, ptr %t483, i64 %t479 + %t485 = getelementptr inbounds %S.ast.Node, ptr %t484, i32 0, i32 9 + %t486 = load { ptr, i64, i64 }, ptr %t485 + %t487 = extractvalue { ptr, i64, i64 } %t486, 1 + %t488 = icmp uge i64 0, %t487 + br i1 %t488, label %range8608, label %inrange8609 +range8608: + call void @finch_panic_index(ptr @.str.5566, i64 5198, i64 0, i64 %t487) + unreachable +inrange8609: + %t489 = extractvalue { ptr, i64, i64 } %t486, 0 + %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 + %t491 = load %S.ast.Node, ptr %t490 + %t492 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t493 = load i64, ptr %a294 + %t494 = load { ptr, i64, i64 }, ptr %t492 + %t495 = extractvalue { ptr, i64, i64 } %t494, 1 + %t496 = icmp uge i64 %t493, %t495 + br i1 %t496, label %range8610, label %inrange8611 +range8610: + call void @finch_panic_index(ptr @.str.5568, i64 5198, i64 %t493, i64 %t495) + unreachable +inrange8611: + %t497 = extractvalue { ptr, i64, i64 } %t494, 0 + %t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i64 %t493 + %t499 = load { ptr, i64, i64 }, ptr %t498 + store { ptr, i64, i64 } { ptr @.str.5567, i64 16, i64 0 }, ptr %a501 + store { ptr, i64, i64 } %t499, ptr %a502 + call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) + %t503 = load { ptr, i64, i64 }, ptr %a500 + store { ptr, i64, i64 } %t503, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.5569, i64 1, i64 0 }, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t503, ptr %a507 + call void @finch_str_drop(ptr %a507) + %t508 = load { ptr, i64, i64 }, ptr %a504 + %t509 = call %S.gen.Val @finch.gen.coerce(ptr %t459, %S.gen.Val %t476, %S.ast.Type %t477, %S.ast.Node %t491, { ptr, i64, i64 } %t508) + store %S.gen.Val %t476, ptr %a510 + call void @finch.drop.S_gen_Val(ptr %a510) + store { ptr, i64, i64 } %t508, ptr %a511 + call void @finch_str_drop(ptr %a511) + %t512 = load %S.gen.Val, ptr %a309 + store %S.gen.Val %t509, ptr %a309 + store %S.gen.Val %t512, ptr %a513 + call void @finch.drop.S_gen_Val(ptr %a513) + %t514 = load { ptr, i64, i64 }, ptr %a401 + %t515 = load ptr, ptr %a1 + %t516 = icmp eq ptr %t515, null + br i1 %t516, label %panic8612, label %ok8613 +panic8612: + call void @finch_panic(ptr @.str.5570, i64 5199, ptr @.str.5571) + unreachable +ok8613: + %t517 = getelementptr inbounds %S.gen.Gen, ptr %t515, i32 0, i32 14 + store { ptr, i64, i64 } %t514, ptr %a518 + call void @finch_str_copy(ptr %a519, ptr %a518) + %t520 = load { ptr, i64, i64 }, ptr %a519 + %t521 = load { ptr, i64, i64 }, ptr %t517 + store { ptr, i64, i64 } %t520, ptr %t517 + store { ptr, i64, i64 } %t521, ptr %a522 + call void @finch_str_drop(ptr %a522) + %t523 = load { ptr, i64, i64 }, ptr %a409 + %t524 = load ptr, ptr %a1 + %t525 = icmp eq ptr %t524, null + br i1 %t525, label %panic8614, label %ok8615 +panic8614: + call void @finch_panic(ptr @.str.5572, i64 5200, ptr @.str.5573) + unreachable +ok8615: + %t526 = getelementptr inbounds %S.gen.Gen, ptr %t524, i32 0, i32 18 + store { ptr, i64, i64 } %t523, ptr %a527 + call void @finch.copy.arr_str(ptr %a528, ptr %a527) + %t529 = load { ptr, i64, i64 }, ptr %a528 + %t530 = load { ptr, i64, i64 }, ptr %t526 + store { ptr, i64, i64 } %t529, ptr %t526 + store { ptr, i64, i64 } %t530, ptr %a531 + call void @finch.drop.arr_str(ptr %a531) + %t532 = load { ptr, i64, i64 }, ptr %a417 + %t533 = load ptr, ptr %a1 + %t534 = icmp eq ptr %t533, null + br i1 %t534, label %panic8616, label %ok8617 +panic8616: + call void @finch_panic(ptr @.str.5574, i64 5201, ptr @.str.5575) + unreachable +ok8617: + %t535 = getelementptr inbounds %S.gen.Gen, ptr %t533, i32 0, i32 19 + store { ptr, i64, i64 } %t532, ptr %a536 + call void @finch.copy.arr_S_ast_Type(ptr %a537, ptr %a536) + %t538 = load { ptr, i64, i64 }, ptr %a537 + %t539 = load { ptr, i64, i64 }, ptr %t535 + store { ptr, i64, i64 } %t538, ptr %t535 + store { ptr, i64, i64 } %t539, ptr %a540 + call void @finch.drop.arr_S_ast_Type(ptr %a540) + %t541 = load { ptr, i64, i64 }, ptr %a393 + %t542 = load ptr, ptr %a1 + %t543 = icmp eq ptr %t542, null + br i1 %t543, label %panic8618, label %ok8619 +panic8618: + call void @finch_panic(ptr @.str.5576, i64 5202, ptr @.str.5577) + unreachable +ok8619: + %t544 = getelementptr inbounds %S.gen.Gen, ptr %t542, i32 0, i32 10 + store { ptr, i64, i64 } %t541, ptr %a545 + call void @finch.copy.arr_S_gen_Scope(ptr %a546, ptr %a545) + %t547 = load { ptr, i64, i64 }, ptr %a546 + %t548 = load { ptr, i64, i64 }, ptr %t544 + store { ptr, i64, i64 } %t547, ptr %t544 + store { ptr, i64, i64 } %t548, ptr %a549 + call void @finch.drop.arr_S_gen_Scope(ptr %a549) + call void @finch.drop.arr_S_gen_Scope(ptr %a438) + call void @finch.drop.arr_S_ast_Type(ptr %a417) + call void @finch.drop.arr_str(ptr %a409) + call void @finch_str_drop(ptr %a401) + call void @finch.drop.arr_S_gen_Scope(ptr %a393) + br label %endif8585 +else8584: + call void @finch.drop.S_gen_Val(ptr %a309) + call void @finch.drop.S_ast_Type(ptr %a308) + br label %for.step8558 +endif8585: + br label %endif8566 +endif8566: + %t550 = load ptr, ptr %a1 + %t551 = load %S.gen.Val, ptr %a309 + %t552 = call { ptr, i64, i64 } @finch.gen.own(ptr %t550, %S.gen.Val %t551) + store { ptr, i64, i64 } %t552, ptr %a553 + %t554 = load ptr, ptr %a1 + %t555 = load { ptr, i64, i64 }, ptr %a553 + store { ptr, i64, i64 } %t555, ptr %a556 + call void @finch_str_copy(ptr %a557, ptr %a556) + %t558 = load { ptr, i64, i64 }, ptr %a557 + %t559 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t558, 0 + %t560 = load %S.ast.Type, ptr %a308 + store %S.ast.Type %t560, ptr %a561 + call void @finch.copy.S_ast_Type(ptr %a562, ptr %a561) + %t563 = load %S.ast.Type, ptr %a562 + %t564 = insertvalue %S.gen.Val %t559, %S.ast.Type %t563, 1 + %t565 = insertvalue %S.gen.Val %t564, i1 true, 2 + call void @finch.gen.hold(ptr %t554, %S.gen.Val %t565) + store %S.gen.Val %t565, ptr %a566 + call void @finch.drop.S_gen_Val(ptr %a566) + %t567 = load ptr, ptr %a1 + %t568 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.5578, i64 12, i64 0 }, ptr %a570 + store { ptr, i64, i64 } %t568, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + %t572 = load { ptr, i64, i64 }, ptr %a569 + store { ptr, i64, i64 } %t572, ptr %a574 + store { ptr, i64, i64 } { ptr @.str.5579, i64 1, i64 0 }, ptr %a575 + call void @finch_str_concat(ptr %a573, ptr %a574, ptr %a575) + store { ptr, i64, i64 } %t572, ptr %a576 + call void @finch_str_drop(ptr %a576) + %t577 = load { ptr, i64, i64 }, ptr %a573 + %t578 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t577, ptr %a580 + store { ptr, i64, i64 } %t578, ptr %a581 + call void @finch_str_concat(ptr %a579, ptr %a580, ptr %a581) + store { ptr, i64, i64 } %t577, ptr %a582 + call void @finch_str_drop(ptr %a582) + %t583 = load { ptr, i64, i64 }, ptr %a579 + store { ptr, i64, i64 } %t583, ptr %a585 + store { ptr, i64, i64 } { ptr @.str.5580, i64 2, i64 0 }, ptr %a586 + call void @finch_str_concat(ptr %a584, ptr %a585, ptr %a586) + store { ptr, i64, i64 } %t583, ptr %a587 + call void @finch_str_drop(ptr %a587) + %t588 = load { ptr, i64, i64 }, ptr %a584 + %t589 = load ptr, ptr %a1 + %t590 = load %S.ast.Type, ptr %a308 + %t591 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t589, %S.ast.Type %t590) + store { ptr, i64, i64 } %t588, ptr %a593 + store { ptr, i64, i64 } %t591, ptr %a594 + call void @finch_str_concat(ptr %a592, ptr %a593, ptr %a594) + store { ptr, i64, i64 } %t588, ptr %a595 + call void @finch_str_drop(ptr %a595) + store { ptr, i64, i64 } %t591, ptr %a596 + call void @finch_str_drop(ptr %a596) + %t597 = load { ptr, i64, i64 }, ptr %a592 + store { ptr, i64, i64 } %t597, ptr %a599 + store { ptr, i64, i64 } { ptr @.str.5581, i64 1, i64 0 }, ptr %a600 + call void @finch_str_concat(ptr %a598, ptr %a599, ptr %a600) + store { ptr, i64, i64 } %t597, ptr %a601 + call void @finch_str_drop(ptr %a601) + %t602 = load { ptr, i64, i64 }, ptr %a598 + %t603 = load { ptr, i64, i64 }, ptr %a553 + store { ptr, i64, i64 } %t602, ptr %a605 + store { ptr, i64, i64 } %t603, ptr %a606 + call void @finch_str_concat(ptr %a604, ptr %a605, ptr %a606) + store { ptr, i64, i64 } %t602, ptr %a607 + call void @finch_str_drop(ptr %a607) + %t608 = load { ptr, i64, i64 }, ptr %a604 + store { ptr, i64, i64 } %t608, ptr %a610 + store { ptr, i64, i64 } { ptr @.str.5582, i64 2, i64 0 }, ptr %a611 + call void @finch_str_concat(ptr %a609, ptr %a610, ptr %a611) + store { ptr, i64, i64 } %t608, ptr %a612 + call void @finch_str_drop(ptr %a612) + %t613 = load { ptr, i64, i64 }, ptr %a609 + %t614 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 3 + %t615 = load i64, ptr %a294 + %t616 = load { ptr, i64, i64 }, ptr %t614 + %t617 = extractvalue { ptr, i64, i64 } %t616, 1 + %t618 = icmp uge i64 %t615, %t617 + br i1 %t618, label %range8620, label %inrange8621 +range8620: + call void @finch_panic_index(ptr @.str.5583, i64 5208, i64 %t615, i64 %t617) + unreachable +inrange8621: + %t619 = extractvalue { ptr, i64, i64 } %t616, 0 + %t620 = getelementptr inbounds i64, ptr %t619, i64 %t615 + %t621 = load i64, ptr %t620 + call void @finch_str_from_int(ptr %a622, i64 %t621) + %t623 = load { ptr, i64, i64 }, ptr %a622 + store { ptr, i64, i64 } %t613, ptr %a625 + store { ptr, i64, i64 } %t623, ptr %a626 + call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626) + store { ptr, i64, i64 } %t613, ptr %a627 + call void @finch_str_drop(ptr %a627) + store { ptr, i64, i64 } %t623, ptr %a628 + call void @finch_str_drop(ptr %a628) + %t629 = load { ptr, i64, i64 }, ptr %a624 + %t630 = call { ptr, i64, i64 } @finch.gen.op(ptr %t567, { ptr, i64, i64 } %t629) + store { ptr, i64, i64 } %t629, ptr %a631 + call void @finch_str_drop(ptr %a631) + %t632 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t630, ptr %a284 + store { ptr, i64, i64 } %t632, ptr %a633 + call void @finch_str_drop(ptr %a633) + call void @finch_str_drop(ptr %a553) + call void @finch.drop.S_gen_Val(ptr %a309) + call void @finch.drop.S_ast_Type(ptr %a308) + br label %for.step8558 +for.step8558: + %t634 = load i64, ptr %a294 + %t635 = add i64 %t634, 1 + store i64 %t635, ptr %a294 + br label %for.cond8556 +for.end8559: + %t636 = load ptr, ptr %a1 + %t637 = load i64, ptr %a290 + call void @finch.gen.heldEnd(ptr %t636, i64 %t637) + %t638 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t638, ptr %a639 + call void @finch_str_copy(ptr %a640, ptr %a639) + %t641 = load { ptr, i64, i64 }, ptr %a640 + %t642 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t641, 0 + %t643 = load %S.ast.Type, ptr %a61 + store %S.ast.Type %t643, ptr %a644 + call void @finch.copy.S_ast_Type(ptr %a645, ptr %a644) + %t646 = load %S.ast.Type, ptr %a645 + %t647 = insertvalue %S.gen.Val %t642, %S.ast.Type %t646, 1 + %t648 = load ptr, ptr %a1 + %t649 = load %S.ast.Type, ptr %a61 + %t650 = call i1 @finch.gen.owning(ptr %t648, %S.ast.Type %t649) + %t651 = insertvalue %S.gen.Val %t647, i1 %t650, 2 + call void @finch_str_drop(ptr %a284) + call void @finch.drop.arr_int(ptr %a79) + call void @finch_str_drop(ptr %a65) + call void @finch.drop.S_ast_Type(ptr %a61) + call void @finch.drop.S_ast_Node(ptr %a20) + call void @finch.drop.S_gen_StructDef(ptr %a19) + ret %S.gen.Val %t651 +} + +define internal void @finch.gen.noteMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca %S.docs.Doc, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic8622, label %ok8623 +panic8622: + call void @finch_panic(ptr @.str.5584, i64 5218, ptr @.str.5585) + unreachable +ok8623: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + %t8 = xor i1 %t7, true + br i1 %t8, label %then8624, label %endif8626 +then8624: + ret void +endif8626: + %t9 = load { ptr, i64, i64 }, ptr %a3 + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t9, { ptr, i64, i64 } %t11) + store %S.docs.Doc %t12, ptr %a13 + %t14 = getelementptr inbounds %S.docs.Doc, ptr %a13, i32 0, i32 0 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp sgt i64 %t16, 0 + br i1 %t17, label %then8627, label %endif8629 +then8627: + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t21 = load i64, ptr %t20 + %t22 = add i64 %t21, 1 + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = load %S.docs.Doc, ptr %a13 + %t27 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t26) + call void @finch.gen.noteRef(ptr %t18, %S.ast.Node %t19, i64 %t22, i64 %t25, { ptr, i64, i64 } %t27, { ptr, i64, i64 } { ptr @.str.5586, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_drop(ptr %a28) + br label %endif8629 +endif8629: + call void @finch.drop.S_docs_Doc(ptr %a13) + ret void +} + +define internal %S.gen.Val @finch.gen.method(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.ast.Node, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca %S.ast.Node, align 16 + %a17 = alloca i64, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca i64, align 16 + %a36 = alloca %S.ast.Node, align 16 + %a37 = alloca %S.ast.Node, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca i64, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca i64, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca i64, align 16 + %a165 = alloca i64, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca i64, align 16 + %a184 = alloca %S.ast.Node, align 16 + %a185 = alloca %S.ast.Node, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca i64, align 16 + %a247 = alloca i64, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca %S.gen.Ref, align 16 + %a266 = alloca i64, align 16 + %a270 = alloca %S.ast.Type, align 16 + %a271 = alloca %S.ast.Type, align 16 + %a273 = alloca %S.ast.Type, align 16 + %a279 = alloca %S.ast.Type, align 16 + %a280 = alloca %S.ast.Type, align 16 + %a283 = alloca %S.ast.Type, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca i64, align 16 + %a307 = alloca i64, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca %S.gen.Val, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca %S.gen.Val, align 16 + %a372 = alloca %S.gen.Val, align 16 + %a374 = alloca %S.gen.Val, align 16 + %a384 = alloca %S.ast.Type, align 16 + %a385 = alloca %S.ast.Type, align 16 + %a389 = alloca %S.gen.Val, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca %S.gen.Val, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca i64, align 16 + %a438 = alloca i64, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca %S.gen.Val, align 16 + %a497 = alloca %S.ast.Type, align 16 + %a498 = alloca %S.ast.Type, align 16 + %a500 = alloca %S.ast.Type, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca i1, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca %S.ast.Type, align 16 + %a579 = alloca %S.ast.Type, align 16 + %a582 = alloca %S.ast.Type, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca i64, align 16 + %a644 = alloca { ptr, i64, i64 }, align 16 + %a645 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca i64, align 16 + %a686 = alloca i64, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca i64, align 16 + %a719 = alloca %S.gen.FnSig, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a732 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a763 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a780 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a793 = alloca { ptr, i64, i64 }, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a808 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca { ptr, i64, i64 }, align 16 + %a813 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a832 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a837 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a839 = alloca { ptr, i64, i64 }, align 16 + %a842 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a845 = alloca { ptr, i64, i64 }, align 16 + %a846 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a852 = alloca { ptr, i64, i64 }, align 16 + %a853 = alloca { ptr, i64, i64 }, align 16 + %a854 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a871 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca { ptr, i64, i64 }, align 16 + %a891 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a896 = alloca { ptr, i64, i64 }, align 16 + %a897 = alloca { ptr, i64, i64 }, align 16 + %a898 = alloca { ptr, i64, i64 }, align 16 + %a899 = alloca { ptr, i64, i64 }, align 16 + %a901 = alloca { ptr, i64, i64 }, align 16 + %a902 = alloca { ptr, i64, i64 }, align 16 + %a903 = alloca { ptr, i64, i64 }, align 16 + %a904 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a916 = alloca i64, align 16 + %a923 = alloca %S.gen.Var, align 16 + %a928 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a930 = alloca { ptr, i64, i64 }, align 16 + %a932 = alloca { ptr, i64, i64 }, align 16 + %a933 = alloca { ptr, i64, i64 }, align 16 + %a934 = alloca { ptr, i64, i64 }, align 16 + %a935 = alloca { ptr, i64, i64 }, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a958 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a968 = alloca { ptr, i64, i64 }, align 16 + %a969 = alloca %S.gen.Val, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a991 = alloca { ptr, i64, i64 }, align 16 + %a992 = alloca { ptr, i64, i64 }, align 16 + %a994 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t4 = load { ptr, i64, i64 }, ptr %t3 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 0, %t5 + br i1 %t6, label %range8630, label %inrange8631 +range8630: + call void @finch_panic_index(ptr @.str.5587, i64 5228, i64 0, i64 %t5) + unreachable +inrange8631: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 + %t9 = load %S.ast.Node, ptr %t8 + store %S.ast.Node %t9, ptr %a10 + call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) + %t12 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = load %S.ast.Node, ptr %a13 + %t16 = call i64 @finch.gen.sumNamed(ptr %t14, %S.ast.Node %t15) + store i64 %t16, ptr %a17 + %t18 = load i64, ptr %a17 + %t19 = icmp sge i64 %t18, 0 + br i1 %t19, label %then8632, label %endif8634 +then8632: + store { ptr, i64, i64 } zeroinitializer, ptr %a20 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + store i64 1, ptr %a24 + br label %for.cond8635 +for.cond8635: + %t25 = load i64, ptr %a24 + %t26 = icmp slt i64 %t25, %t23 + br i1 %t26, label %for.body8636, label %for.end8638 +for.body8636: + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t29 = load i64, ptr %a24 + %t30 = load { ptr, i64, i64 }, ptr %t28 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 %t29, %t31 + br i1 %t32, label %range8639, label %inrange8640 +range8639: + call void @finch_panic_index(ptr @.str.5588, i64 5233, i64 %t29, i64 %t31) + unreachable +inrange8640: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t29 + %t35 = load %S.ast.Node, ptr %t34 + store %S.ast.Node %t35, ptr %a36 + call void @finch.copy.S_ast_Node(ptr %a37, ptr %a36) + %t38 = load %S.ast.Node, ptr %a37 + %t39 = load i64, ptr %t27 + %t40 = add i64 %t39, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t40, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t41 = load ptr, ptr %a20 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 %t39 + store %S.ast.Node %t38, ptr %t42 + store i64 %t40, ptr %t27 + br label %for.step8637 +for.step8637: + %t43 = load i64, ptr %a24 + %t44 = add i64 %t43, 1 + store i64 %t44, ptr %a24 + br label %for.cond8635 +for.end8638: + %t45 = load ptr, ptr %a1 + %t46 = load i64, ptr %a17 + %t47 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t48 = load { ptr, i64, i64 }, ptr %t47 + %t49 = load { ptr, i64, i64 }, ptr %a20 + %t50 = load %S.ast.Node, ptr %a2 + %t51 = call %S.gen.Val @finch.gen.sumMake(ptr %t45, i64 %t46, { ptr, i64, i64 } %t48, { ptr, i64, i64 } %t49, %S.ast.Node %t50) + call void @finch.drop.arr_S_ast_Node(ptr %a20) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t51 +endif8634: + %t52 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t53, ptr %a54 + store { ptr, i64, i64 } { ptr @.str.5589, i64 3, i64 0 }, ptr %a55 + %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) + %t57 = icmp ne i32 %t56, 0 + br label %logic.from8641 +logic.from8641: + br i1 %t57, label %logic.rhs8642, label %logic.end8643 +logic.rhs8642: + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = call i64 @finch.gen.lookup(ptr %t58, { ptr, i64, i64 } %t60) + %t62 = icmp slt i64 %t61, 0 + br label %logic.rend8644 +logic.rend8644: + br label %logic.end8643 +logic.end8643: + %t63 = phi i1 [ false, %logic.from8641 ], [ %t62, %logic.rend8644 ] + br i1 %t63, label %then8645, label %endif8647 +then8645: + %t64 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 + %t65 = load { ptr, i64, i64 }, ptr %t64 + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_copy(ptr %a67, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t68, ptr %a69 + %t70 = load ptr, ptr %a1 + %t71 = load { ptr, i64, i64 }, ptr %a69 + %t72 = call i1 @finch.gen.imports(ptr %t70, { ptr, i64, i64 } %t71) + %t73 = xor i1 %t72, true + br i1 %t73, label %then8648, label %endif8650 +then8648: + %t74 = load ptr, ptr %a1 + %t75 = load %S.ast.Node, ptr %a13 + %t76 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.5590, i64 38, i64 0 }, ptr %a78 + store { ptr, i64, i64 } %t76, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.5591, i64 32, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t85, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.5592, i64 13, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + call void @finch.gen.fail(ptr %t74, %S.ast.Node %t75, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %endif8650 +endif8650: + %t98 = load ptr, ptr %a1 + %t99 = load { ptr, i64, i64 }, ptr %a69 + %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t101 = load { ptr, i64, i64 }, ptr %t100 + %t102 = call i64 @finch.gen.findFn(ptr %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t101) + store i64 %t102, ptr %a103 + %t104 = load i64, ptr %a103 + %t105 = icmp sge i64 %t104, 0 + br i1 %t105, label %then8651, label %endif8653 +then8651: + %t106 = load ptr, ptr %a1 + %t107 = load i64, ptr %a103 + %t108 = load %S.ast.Node, ptr %a2 + %t109 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.5593, i64 1, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a110 + %t114 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } %t113, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t113, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a116 + %t121 = call %S.gen.Val @finch.gen.callFn(ptr %t106, i64 %t107, %S.ast.Node %t108, i64 1, { ptr, i64, i64 } %t120, { ptr, i64, i64 } { ptr @.str.5594, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5595, i64 0, i64 0 }) + store { ptr, i64, i64 } %t120, ptr %a122 + call void @finch_str_drop(ptr %a122) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t121 +endif8653: + %t123 = load ptr, ptr %a1 + %t124 = load { ptr, i64, i64 }, ptr %a69 + %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t126 = load { ptr, i64, i64 }, ptr %t125 + %t127 = call i64 @finch.gen.findTemplate(ptr %t123, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } { ptr @.str.5596, i64 0, i64 0 }, i1 false) + store i64 %t127, ptr %a128 + %t129 = load i64, ptr %a128 + %t130 = icmp sge i64 %t129, 0 + br i1 %t130, label %then8654, label %endif8656 +then8654: + %t131 = load ptr, ptr %a1 + %t132 = load %S.ast.Node, ptr %a2 + %t133 = load i64, ptr %a128 + %t134 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t134, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.5597, i64 1, i64 0 }, ptr %a137 + call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a135 + %t139 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t140 = load { ptr, i64, i64 }, ptr %t139 + store { ptr, i64, i64 } %t138, ptr %a142 + store { ptr, i64, i64 } %t140, ptr %a143 + call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) + store { ptr, i64, i64 } %t138, ptr %a144 + call void @finch_str_drop(ptr %a144) + %t145 = load { ptr, i64, i64 }, ptr %a141 + %t146 = call %S.gen.Val @finch.gen.genericCall(ptr %t131, %S.ast.Node %t132, i64 %t133, i64 1, { ptr, i64, i64 } %t145) + store { ptr, i64, i64 } %t145, ptr %a147 + call void @finch_str_drop(ptr %a147) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t146 +endif8656: + %t148 = load ptr, ptr %a1 + %t149 = load { ptr, i64, i64 }, ptr %a69 + %t150 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t151 = load { ptr, i64, i64 }, ptr %t150 + %t152 = call i64 @finch.gen.findEnum(ptr %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t151) + store i64 %t152, ptr %a153 + %t154 = load i64, ptr %a153 + %t155 = icmp sge i64 %t154, 0 + br i1 %t155, label %then8657, label %endif8659 +then8657: + %t156 = load ptr, ptr %a1 + %t157 = load %S.ast.Node, ptr %a2 + %t158 = load i64, ptr %a153 + %t159 = call %S.gen.Val @finch.gen.enumFrom(ptr %t156, %S.ast.Node %t157, i64 %t158) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t159 +endif8659: + %t160 = load ptr, ptr %a1 + %t161 = load { ptr, i64, i64 }, ptr %a69 + %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = call i64 @finch.gen.findStruct(ptr %t160, { ptr, i64, i64 } %t161, { ptr, i64, i64 } %t163) + store i64 %t164, ptr %a165 + %t166 = load i64, ptr %a165 + %t167 = icmp sge i64 %t166, 0 + br i1 %t167, label %then8660, label %endif8662 +then8660: + store { ptr, i64, i64 } zeroinitializer, ptr %a168 + %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 + %t171 = load i64, ptr %t170 + store i64 1, ptr %a172 + br label %for.cond8663 +for.cond8663: + %t173 = load i64, ptr %a172 + %t174 = icmp slt i64 %t173, %t171 + br i1 %t174, label %for.body8664, label %for.end8666 +for.body8664: + %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 + %t176 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t177 = load i64, ptr %a172 + %t178 = load { ptr, i64, i64 }, ptr %t176 + %t179 = extractvalue { ptr, i64, i64 } %t178, 1 + %t180 = icmp uge i64 %t177, %t179 + br i1 %t180, label %range8667, label %inrange8668 +range8667: + call void @finch_panic_index(ptr @.str.5598, i64 5258, i64 %t177, i64 %t179) + unreachable +inrange8668: + %t181 = extractvalue { ptr, i64, i64 } %t178, 0 + %t182 = getelementptr inbounds %S.ast.Node, ptr %t181, i64 %t177 + %t183 = load %S.ast.Node, ptr %t182 + store %S.ast.Node %t183, ptr %a184 + call void @finch.copy.S_ast_Node(ptr %a185, ptr %a184) + %t186 = load %S.ast.Node, ptr %a185 + %t187 = load i64, ptr %t175 + %t188 = add i64 %t187, 1 + call void @finch_arr_reserve(ptr %a168, i64 %t188, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t189 = load ptr, ptr %a168 + %t190 = getelementptr inbounds %S.ast.Node, ptr %t189, i64 %t187 + store %S.ast.Node %t186, ptr %t190 + store i64 %t188, ptr %t175 + br label %for.step8665 +for.step8665: + %t191 = load i64, ptr %a172 + %t192 = add i64 %t191, 1 + store i64 %t192, ptr %a172 + br label %for.cond8663 +for.end8666: + %t193 = load ptr, ptr %a1 + %t194 = load i64, ptr %a165 + %t195 = load { ptr, i64, i64 }, ptr %a168 + %t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t197 = load { ptr, i64, i64 }, ptr %t196 + %t198 = load %S.ast.Node, ptr %a2 + %t199 = call %S.gen.Val @finch.gen.construct(ptr %t193, i64 %t194, { ptr, i64, i64 } %t195, { ptr, i64, i64 } %t197, %S.ast.Node %t198) + call void @finch.drop.arr_S_ast_Node(ptr %a168) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t199 +endif8662: + %t200 = load ptr, ptr %a1 + %t201 = load %S.ast.Node, ptr %a2 + %t202 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.5599, i64 12, i64 0 }, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + %t206 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t206, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.5600, i64 35, i64 0 }, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t206, ptr %a210 + call void @finch_str_drop(ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a207 + %t212 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t213 = load { ptr, i64, i64 }, ptr %t212 + store { ptr, i64, i64 } %t211, ptr %a215 + store { ptr, i64, i64 } %t213, ptr %a216 + call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) + store { ptr, i64, i64 } %t211, ptr %a217 + call void @finch_str_drop(ptr %a217) + %t218 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t218, ptr %a220 + store { ptr, i64, i64 } { ptr @.str.5601, i64 1, i64 0 }, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t218, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.fail(ptr %t200, %S.ast.Node %t201, { ptr, i64, i64 } %t223) + store { ptr, i64, i64 } %t223, ptr %a224 + call void @finch_str_drop(ptr %a224) + call void @finch_str_drop(ptr %a69) + br label %endif8647 +endif8647: + %t225 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t226 = call ptr @finch_alloc(i64 %t225) + %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 0 + store { ptr, i64, i64 } { ptr @.str.5602, i64 4, i64 0 }, ptr %t227 + %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 1 + store { ptr, i64, i64 } { ptr @.str.5603, i64 3, i64 0 }, ptr %t228 + %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 2 + store { ptr, i64, i64 } { ptr @.str.5604, i64 6, i64 0 }, ptr %t229 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 3 + store { ptr, i64, i64 } { ptr @.str.5605, i64 6, i64 0 }, ptr %t230 + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 4 + store { ptr, i64, i64 } { ptr @.str.5606, i64 5, i64 0 }, ptr %t231 + %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 5 + store { ptr, i64, i64 } { ptr @.str.5607, i64 6, i64 0 }, ptr %t232 + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 6 + store { ptr, i64, i64 } { ptr @.str.5608, i64 4, i64 0 }, ptr %t233 + %t234 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 7 + store { ptr, i64, i64 } { ptr @.str.5609, i64 7, i64 0 }, ptr %t234 + %t235 = insertvalue { ptr, i64, i64 } undef, ptr %t226, 0 + %t236 = insertvalue { ptr, i64, i64 } %t235, i64 8, 1 + %t237 = insertvalue { ptr, i64, i64 } %t236, i64 8, 2 + store { ptr, i64, i64 } %t237, ptr %a238 + %t239 = load ptr, ptr %a1 + %t240 = load %S.ast.Node, ptr %a13 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 + %t242 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t243 = load { ptr, i64, i64 }, ptr %t242 + store i64 -1, ptr %a244 + %t245 = load i64, ptr %t241 + %t246 = load ptr, ptr %a238 + store i64 0, ptr %a247 + br label %find.cond8669 +find.cond8669: + %t248 = load i64, ptr %a247 + %t249 = icmp slt i64 %t248, %t245 + br i1 %t249, label %find.body8670, label %find.end8673 +find.body8670: + %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t248 + %t251 = load { ptr, i64, i64 }, ptr %t250 + store { ptr, i64, i64 } %t251, ptr %a252 + store { ptr, i64, i64 } %t243, ptr %a253 + %t254 = call i32 @finch_str_eq(ptr %a252, ptr %a253) + %t255 = icmp ne i32 %t254, 0 + br i1 %t255, label %find.hit8671, label %find.next8672 +find.hit8671: + store i64 %t248, ptr %a244 + br label %find.end8673 +find.next8672: + %t256 = add i64 %t248, 1 + store i64 %t256, ptr %a247 + br label %find.cond8669 +find.end8673: + %t257 = load i64, ptr %a244 + %t258 = icmp sge i64 %t257, 0 + %t259 = call %S.gen.Ref @finch.gen.ref(ptr %t239, %S.ast.Node %t240, i1 %t258) + store %S.gen.Ref %t259, ptr %a260 + %t261 = load ptr, ptr %a1 + %t262 = icmp eq ptr %t261, null + br i1 %t262, label %panic8674, label %ok8675 +panic8674: + call void @finch_panic(ptr @.str.5610, i64 5266, ptr @.str.5611) + unreachable +ok8675: + %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 11 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + %t265 = load i64, ptr %t264 + store i64 %t265, ptr %a266 + %t267 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t268 = getelementptr inbounds %S.gen.Val, ptr %t267, i32 0, i32 1 + %t269 = load %S.ast.Type, ptr %t268 + store %S.ast.Type %t269, ptr %a270 + call void @finch.copy.S_ast_Type(ptr %a271, ptr %a270) + %t272 = load %S.ast.Type, ptr %a271 + store %S.ast.Type %t272, ptr %a273 + %t274 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t275 = load i1, ptr %t274 + br i1 %t275, label %then8676, label %endif8678 +then8676: + %t276 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t277 = getelementptr inbounds %S.gen.Place, ptr %t276, i32 0, i32 1 + %t278 = load %S.ast.Type, ptr %t277 + store %S.ast.Type %t278, ptr %a279 + call void @finch.copy.S_ast_Type(ptr %a280, ptr %a279) + %t281 = load %S.ast.Type, ptr %a280 + %t282 = load %S.ast.Type, ptr %a273 + store %S.ast.Type %t281, ptr %a273 + store %S.ast.Type %t282, ptr %a283 + call void @finch.drop.S_ast_Type(ptr %a283) + br label %endif8678 +endif8678: + %t284 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + store { ptr, i64, i64 } { ptr @.str.5612, i64 5, i64 0 }, ptr %a287 + %t288 = call i32 @finch_str_eq(ptr %a286, ptr %a287) + %t289 = icmp ne i32 %t288, 0 + br i1 %t289, label %then8679, label %endif8681 +then8679: + store { ptr, i64, i64 } { ptr @.str.5613, i64 0, i64 0 }, ptr %a290 + %t291 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t292 = load i1, ptr %t291 + br i1 %t292, label %then8682, label %else8683 +then8682: + %t293 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t294 = getelementptr inbounds %S.gen.Place, ptr %t293, i32 0, i32 0 + %t295 = load { ptr, i64, i64 }, ptr %t294 + store { ptr, i64, i64 } %t295, ptr %a296 + call void @finch_str_copy(ptr %a297, ptr %a296) + %t298 = load { ptr, i64, i64 }, ptr %a297 + %t299 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t298, ptr %a290 + store { ptr, i64, i64 } %t299, ptr %a300 + call void @finch_str_drop(ptr %a300) + br label %endif8684 +else8683: + %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 + %t302 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t303 = load { ptr, i64, i64 }, ptr %t302 + store i64 -1, ptr %a304 + %t305 = load i64, ptr %t301 + %t306 = load ptr, ptr %a238 + store i64 0, ptr %a307 + br label %find.cond8685 +find.cond8685: + %t308 = load i64, ptr %a307 + %t309 = icmp slt i64 %t308, %t305 + br i1 %t309, label %find.body8686, label %find.end8689 +find.body8686: + %t310 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 %t308 + %t311 = load { ptr, i64, i64 }, ptr %t310 + store { ptr, i64, i64 } %t311, ptr %a312 + store { ptr, i64, i64 } %t303, ptr %a313 + %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) + %t315 = icmp ne i32 %t314, 0 + br i1 %t315, label %find.hit8687, label %find.next8688 +find.hit8687: + store i64 %t308, ptr %a304 + br label %find.end8689 +find.next8688: + %t316 = add i64 %t308, 1 + store i64 %t316, ptr %a307 + br label %find.cond8685 +find.end8689: + %t317 = load i64, ptr %a304 + %t318 = icmp sge i64 %t317, 0 + br i1 %t318, label %then8690, label %endif8692 +then8690: + %t319 = load ptr, ptr %a1 + %t320 = load %S.ast.Node, ptr %a2 + %t321 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t322 = load { ptr, i64, i64 }, ptr %t321 + store { ptr, i64, i64 } %t322, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.5614, i64 63, i64 0 }, ptr %a325 + call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) + %t326 = load { ptr, i64, i64 }, ptr %a323 + call void @finch.gen.fail(ptr %t319, %S.ast.Node %t320, { ptr, i64, i64 } %t326) + store { ptr, i64, i64 } %t326, ptr %a327 + call void @finch_str_drop(ptr %a327) + br label %endif8692 +endif8692: + %t328 = load ptr, ptr %a1 + %t329 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t330 = load %S.gen.Val, ptr %t329 + %t331 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t328, %S.gen.Val %t330) + %t332 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t331, ptr %a290 + store { ptr, i64, i64 } %t332, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t335 = getelementptr inbounds %S.gen.Val, ptr %t334, i32 0, i32 2 + %t336 = load i1, ptr %t335 + br i1 %t336, label %then8693, label %endif8695 +then8693: + %t337 = load ptr, ptr %a1 + %t338 = load { ptr, i64, i64 }, ptr %a290 + %t339 = load %S.ast.Type, ptr %a273 + call void @finch.gen.holdAddr(ptr %t337, { ptr, i64, i64 } %t338, %S.ast.Type %t339) + br label %endif8695 +endif8695: + br label %endif8684 +endif8684: + %t340 = load ptr, ptr %a1 + %t341 = load %S.ast.Node, ptr %a2 + %t342 = call { ptr, i64, i64 } @finch.docs.arrayMethods() + call void @finch.gen.noteMethod(ptr %t340, %S.ast.Node %t341, { ptr, i64, i64 } %t342) + store { ptr, i64, i64 } %t342, ptr %a343 + call void @finch.drop.arr_S_docs_Doc(ptr %a343) + %t344 = load ptr, ptr %a1 + %t345 = load %S.ast.Node, ptr %a2 + %t346 = load { ptr, i64, i64 }, ptr %a290 + %t347 = load %S.ast.Type, ptr %a273 + %t348 = call %S.gen.Val @finch.gen.arrayMethod(ptr %t344, %S.ast.Node %t345, { ptr, i64, i64 } %t346, %S.ast.Type %t347) + store %S.gen.Val %t348, ptr %a349 + %t350 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t351 = load i1, ptr %t350 + %t352 = xor i1 %t351, true + br label %logic.from8696 +logic.from8696: + br i1 %t352, label %logic.rhs8697, label %logic.end8698 +logic.rhs8697: + %t353 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t354 = getelementptr inbounds %S.gen.Val, ptr %t353, i32 0, i32 2 + %t355 = load i1, ptr %t354 + br label %logic.rend8699 +logic.rend8699: + br label %logic.end8698 +logic.end8698: + %t356 = phi i1 [ false, %logic.from8696 ], [ %t355, %logic.rend8699 ] + br i1 %t356, label %then8700, label %endif8702 +then8700: + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a290 + %t359 = load %S.ast.Type, ptr %a273 + call void @finch.gen.dropAt(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359) + br label %endif8702 +endif8702: + %t360 = load ptr, ptr %a1 + %t361 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t360, i64 %t361) + %t362 = load %S.gen.Val, ptr %a349 + call void @finch_str_drop(ptr %a290) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t362 +endif8681: + %t363 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t364 = load { ptr, i64, i64 }, ptr %t363 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.5615, i64 3, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br i1 %t368, label %then8703, label %endif8705 +then8703: + %t369 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t370 = load %S.gen.Val, ptr %t369 + store %S.gen.Val %t370, ptr %a371 + call void @finch.copy.S_gen_Val(ptr %a372, ptr %a371) + %t373 = load %S.gen.Val, ptr %a372 + store %S.gen.Val %t373, ptr %a374 + %t375 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t376 = load i1, ptr %t375 + br i1 %t376, label %then8706, label %endif8708 +then8706: + %t377 = load ptr, ptr %a1 + %t378 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t379 = getelementptr inbounds %S.gen.Place, ptr %t378, i32 0, i32 0 + %t380 = load { ptr, i64, i64 }, ptr %t379 + %t381 = call { ptr, i64, i64 } @finch.gen.load(ptr %t377, { ptr, i64, i64 } { ptr @.str.5616, i64 17, i64 0 }, { ptr, i64, i64 } %t380) + %t382 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t381, 0 + %t383 = load %S.ast.Type, ptr %a273 + store %S.ast.Type %t383, ptr %a384 + call void @finch.copy.S_ast_Type(ptr %a385, ptr %a384) + %t386 = load %S.ast.Type, ptr %a385 + %t387 = insertvalue %S.gen.Val %t382, %S.ast.Type %t386, 1 + %t388 = load %S.gen.Val, ptr %a374 + store %S.gen.Val %t387, ptr %a374 + store %S.gen.Val %t388, ptr %a389 + call void @finch.drop.S_gen_Val(ptr %a389) + br label %endif8708 +endif8708: + %t390 = load ptr, ptr %a1 + %t391 = load %S.ast.Node, ptr %a2 + %t392 = call { ptr, i64, i64 } @finch.docs.strMethods() + call void @finch.gen.noteMethod(ptr %t390, %S.ast.Node %t391, { ptr, i64, i64 } %t392) + store { ptr, i64, i64 } %t392, ptr %a393 + call void @finch.drop.arr_S_docs_Doc(ptr %a393) + %t394 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t395 = load i1, ptr %t394 + %t396 = xor i1 %t395, true + br i1 %t396, label %then8709, label %endif8711 +then8709: + %t397 = load ptr, ptr %a1 + %t398 = load %S.gen.Val, ptr %a374 + call void @finch.gen.hold(ptr %t397, %S.gen.Val %t398) + br label %endif8711 +endif8711: + %t399 = load ptr, ptr %a1 + %t400 = load %S.ast.Node, ptr %a2 + %t401 = load ptr, ptr %a1 + %t402 = load %S.gen.Val, ptr %a374 + %t403 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t401, %S.gen.Val %t402) + %t404 = call %S.gen.Val @finch.gen.strMethod(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t403) + store { ptr, i64, i64 } %t403, ptr %a405 + call void @finch_str_drop(ptr %a405) + store %S.gen.Val %t404, ptr %a406 + %t407 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t408 = load i1, ptr %t407 + %t409 = xor i1 %t408, true + br i1 %t409, label %then8712, label %endif8714 +then8712: + %t410 = load ptr, ptr %a1 + %t411 = load %S.gen.Val, ptr %a374 + call void @finch.gen.release(ptr %t410, %S.gen.Val %t411) + br label %endif8714 +endif8714: + %t412 = load ptr, ptr %a1 + %t413 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t412, i64 %t413) + %t414 = load %S.gen.Val, ptr %a406 + call void @finch.drop.S_gen_Val(ptr %a374) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t414 +endif8705: + %t415 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t416, ptr %a417 + store { ptr, i64, i64 } { ptr @.str.5617, i64 3, i64 0 }, ptr %a418 + %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) + %t420 = icmp ne i32 %t419, 0 + br i1 %t420, label %then8715, label %endif8717 +then8715: + store { ptr, i64, i64 } { ptr @.str.5618, i64 0, i64 0 }, ptr %a421 + %t422 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t423 = load i1, ptr %t422 + br i1 %t423, label %then8718, label %else8719 +then8718: + %t424 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t425 = getelementptr inbounds %S.gen.Place, ptr %t424, i32 0, i32 0 + %t426 = load { ptr, i64, i64 }, ptr %t425 + store { ptr, i64, i64 } %t426, ptr %a427 + call void @finch_str_copy(ptr %a428, ptr %a427) + %t429 = load { ptr, i64, i64 }, ptr %a428 + %t430 = load { ptr, i64, i64 }, ptr %a421 + store { ptr, i64, i64 } %t429, ptr %a421 + store { ptr, i64, i64 } %t430, ptr %a431 + call void @finch_str_drop(ptr %a431) + br label %endif8720 +else8719: + %t432 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 + %t433 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t434 = load { ptr, i64, i64 }, ptr %t433 + store i64 -1, ptr %a435 + %t436 = load i64, ptr %t432 + %t437 = load ptr, ptr %a238 + store i64 0, ptr %a438 + br label %find.cond8721 +find.cond8721: + %t439 = load i64, ptr %a438 + %t440 = icmp slt i64 %t439, %t436 + br i1 %t440, label %find.body8722, label %find.end8725 +find.body8722: + %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t437, i64 %t439 + %t442 = load { ptr, i64, i64 }, ptr %t441 + store { ptr, i64, i64 } %t442, ptr %a443 + store { ptr, i64, i64 } %t434, ptr %a444 + %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) + %t446 = icmp ne i32 %t445, 0 + br i1 %t446, label %find.hit8723, label %find.next8724 +find.hit8723: + store i64 %t439, ptr %a435 + br label %find.end8725 +find.next8724: + %t447 = add i64 %t439, 1 + store i64 %t447, ptr %a438 + br label %find.cond8721 +find.end8725: + %t448 = load i64, ptr %a435 + %t449 = icmp sge i64 %t448, 0 + br i1 %t449, label %then8726, label %endif8728 +then8726: + %t450 = load ptr, ptr %a1 + %t451 = load %S.ast.Node, ptr %a2 + %t452 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t453 = load { ptr, i64, i64 }, ptr %t452 + store { ptr, i64, i64 } %t453, ptr %a455 + store { ptr, i64, i64 } { ptr @.str.5619, i64 61, i64 0 }, ptr %a456 + call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) + %t457 = load { ptr, i64, i64 }, ptr %a454 + call void @finch.gen.fail(ptr %t450, %S.ast.Node %t451, { ptr, i64, i64 } %t457) + store { ptr, i64, i64 } %t457, ptr %a458 + call void @finch_str_drop(ptr %a458) + br label %endif8728 +endif8728: + %t459 = load ptr, ptr %a1 + %t460 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t461 = load %S.gen.Val, ptr %t460 + %t462 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t459, %S.gen.Val %t461) + %t463 = load { ptr, i64, i64 }, ptr %a421 + store { ptr, i64, i64 } %t462, ptr %a421 + store { ptr, i64, i64 } %t463, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t466 = getelementptr inbounds %S.gen.Val, ptr %t465, i32 0, i32 2 + %t467 = load i1, ptr %t466 + br i1 %t467, label %then8729, label %endif8731 +then8729: + %t468 = load ptr, ptr %a1 + %t469 = load { ptr, i64, i64 }, ptr %a421 + %t470 = load %S.ast.Type, ptr %a273 + call void @finch.gen.holdAddr(ptr %t468, { ptr, i64, i64 } %t469, %S.ast.Type %t470) + br label %endif8731 +endif8731: + br label %endif8720 +endif8720: + %t471 = load ptr, ptr %a1 + %t472 = load %S.ast.Node, ptr %a2 + %t473 = call { ptr, i64, i64 } @finch.docs.mapMethods() + call void @finch.gen.noteMethod(ptr %t471, %S.ast.Node %t472, { ptr, i64, i64 } %t473) + store { ptr, i64, i64 } %t473, ptr %a474 + call void @finch.drop.arr_S_docs_Doc(ptr %a474) + %t475 = load ptr, ptr %a1 + %t476 = load %S.ast.Node, ptr %a2 + %t477 = load { ptr, i64, i64 }, ptr %a421 + %t478 = load %S.ast.Type, ptr %a273 + %t479 = call %S.gen.Val @finch.gen.mapMethod(ptr %t475, %S.ast.Node %t476, { ptr, i64, i64 } %t477, %S.ast.Type %t478) + store %S.gen.Val %t479, ptr %a480 + %t481 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t482 = load i1, ptr %t481 + %t483 = xor i1 %t482, true + br label %logic.from8732 +logic.from8732: + br i1 %t483, label %logic.rhs8733, label %logic.end8734 +logic.rhs8733: + %t484 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t485 = getelementptr inbounds %S.gen.Val, ptr %t484, i32 0, i32 2 + %t486 = load i1, ptr %t485 + br label %logic.rend8735 +logic.rend8735: + br label %logic.end8734 +logic.end8734: + %t487 = phi i1 [ false, %logic.from8732 ], [ %t486, %logic.rend8735 ] + br i1 %t487, label %then8736, label %endif8738 +then8736: + %t488 = load ptr, ptr %a1 + %t489 = load { ptr, i64, i64 }, ptr %a421 + %t490 = load %S.ast.Type, ptr %a273 + call void @finch.gen.dropAt(ptr %t488, { ptr, i64, i64 } %t489, %S.ast.Type %t490) + br label %endif8738 +endif8738: + %t491 = load ptr, ptr %a1 + %t492 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t491, i64 %t492) + %t493 = load %S.gen.Val, ptr %a480 + call void @finch_str_drop(ptr %a421) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t493 +endif8717: + %t494 = load ptr, ptr %a1 + %t495 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t494, i64 %t495) + %t496 = load %S.ast.Type, ptr %a273 + store %S.ast.Type %t496, ptr %a497 + call void @finch.copy.S_ast_Type(ptr %a498, ptr %a497) + %t499 = load %S.ast.Type, ptr %a498 + store %S.ast.Type %t499, ptr %a500 + store { ptr, i64, i64 } { ptr @.str.5620, i64 0, i64 0 }, ptr %a501 + store i1 false, ptr %a502 + %t503 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t504 = load { ptr, i64, i64 }, ptr %t503 + store { ptr, i64, i64 } %t504, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.5621, i64 3, i64 0 }, ptr %a506 + %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) + %t508 = icmp ne i32 %t507, 0 + br label %logic.from8739 +logic.from8739: + br i1 %t508, label %logic.rhs8740, label %logic.end8741 +logic.rhs8740: + %t509 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 + %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i32 0, i32 1 + %t511 = load i64, ptr %t510 + %t512 = icmp sgt i64 %t511, 0 + br label %logic.rend8742 +logic.rend8742: + br label %logic.end8741 +logic.end8741: + %t513 = phi i1 [ false, %logic.from8739 ], [ %t512, %logic.rend8742 ] + br label %logic.from8743 +logic.from8743: + br i1 %t513, label %logic.rhs8744, label %logic.end8745 +logic.rhs8744: + %t514 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 + %t515 = load { ptr, i64, i64 }, ptr %t514 + %t516 = extractvalue { ptr, i64, i64 } %t515, 1 + %t517 = icmp uge i64 0, %t516 + br i1 %t517, label %range8746, label %inrange8747 +range8746: + call void @finch_panic_index(ptr @.str.5622, i64 5333, i64 0, i64 %t516) + unreachable +inrange8747: + %t518 = extractvalue { ptr, i64, i64 } %t515, 0 + %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 + %t520 = getelementptr inbounds %S.ast.Type, ptr %t519, i32 0, i32 0 + %t521 = load { ptr, i64, i64 }, ptr %t520 + store { ptr, i64, i64 } %t521, ptr %a522 + store { ptr, i64, i64 } { ptr @.str.5623, i64 6, i64 0 }, ptr %a523 + %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) + %t525 = icmp ne i32 %t524, 0 + br label %logic.rend8748 +logic.rend8748: + br label %logic.end8745 +logic.end8745: + %t526 = phi i1 [ false, %logic.from8743 ], [ %t525, %logic.rend8748 ] + br i1 %t526, label %then8749, label %else8750 +then8749: + %t527 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t528 = getelementptr inbounds %S.gen.Val, ptr %t527, i32 0, i32 0 + %t529 = load { ptr, i64, i64 }, ptr %t528 + store { ptr, i64, i64 } %t529, ptr %a530 + call void @finch_str_copy(ptr %a531, ptr %a530) + %t532 = load { ptr, i64, i64 }, ptr %a531 + store { ptr, i64, i64 } %t532, ptr %a533 + %t534 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t535 = load i1, ptr %t534 + br i1 %t535, label %then8752, label %endif8754 +then8752: + %t536 = load ptr, ptr %a1 + %t537 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t538 = getelementptr inbounds %S.gen.Place, ptr %t537, i32 0, i32 0 + %t539 = load { ptr, i64, i64 }, ptr %t538 + %t540 = call { ptr, i64, i64 } @finch.gen.load(ptr %t536, { ptr, i64, i64 } { ptr @.str.5624, i64 3, i64 0 }, { ptr, i64, i64 } %t539) + %t541 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } %t540, ptr %a533 + store { ptr, i64, i64 } %t541, ptr %a542 + call void @finch_str_drop(ptr %a542) + br label %endif8754 +endif8754: + %t543 = load ptr, ptr %a1 + %t544 = load ptr, ptr %a1 + %t545 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } { ptr @.str.5625, i64 12, i64 0 }, ptr %a547 + store { ptr, i64, i64 } %t545, ptr %a548 + call void @finch_str_concat(ptr %a546, ptr %a547, ptr %a548) + %t549 = load { ptr, i64, i64 }, ptr %a546 + store { ptr, i64, i64 } %t549, ptr %a551 + store { ptr, i64, i64 } { ptr @.str.5626, i64 6, i64 0 }, ptr %a552 + call void @finch_str_concat(ptr %a550, ptr %a551, ptr %a552) + store { ptr, i64, i64 } %t549, ptr %a553 + call void @finch_str_drop(ptr %a553) + %t554 = load { ptr, i64, i64 }, ptr %a550 + %t555 = call { ptr, i64, i64 } @finch.gen.op(ptr %t544, { ptr, i64, i64 } %t554) + store { ptr, i64, i64 } %t554, ptr %a556 + call void @finch_str_drop(ptr %a556) + %t557 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t558 = load { ptr, i64, i64 }, ptr %t557 + store { ptr, i64, i64 } { ptr @.str.5627, i64 8, i64 0 }, ptr %a560 + store { ptr, i64, i64 } %t558, ptr %a561 + call void @finch_str_concat(ptr %a559, ptr %a560, ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a559 + store { ptr, i64, i64 } %t562, ptr %a564 + store { ptr, i64, i64 } { ptr @.str.5628, i64 20, i64 0 }, ptr %a565 + call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) + store { ptr, i64, i64 } %t562, ptr %a566 + call void @finch_str_drop(ptr %a566) + %t567 = load { ptr, i64, i64 }, ptr %a563 + %t568 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t543, { ptr, i64, i64 } %t555, { ptr, i64, i64 } %t567, %S.ast.Node %t568) + store { ptr, i64, i64 } %t555, ptr %a569 + call void @finch_str_drop(ptr %a569) + store { ptr, i64, i64 } %t567, ptr %a570 + call void @finch_str_drop(ptr %a570) + %t571 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 + %t572 = load { ptr, i64, i64 }, ptr %t571 + %t573 = extractvalue { ptr, i64, i64 } %t572, 1 + %t574 = icmp uge i64 0, %t573 + br i1 %t574, label %range8755, label %inrange8756 +range8755: + call void @finch_panic_index(ptr @.str.5629, i64 5339, i64 0, i64 %t573) + unreachable +inrange8756: + %t575 = extractvalue { ptr, i64, i64 } %t572, 0 + %t576 = getelementptr inbounds %S.ast.Type, ptr %t575, i64 0 + %t577 = load %S.ast.Type, ptr %t576 + store %S.ast.Type %t577, ptr %a578 + call void @finch.copy.S_ast_Type(ptr %a579, ptr %a578) + %t580 = load %S.ast.Type, ptr %a579 + %t581 = load %S.ast.Type, ptr %a500 + store %S.ast.Type %t580, ptr %a500 + store %S.ast.Type %t581, ptr %a582 + call void @finch.drop.S_ast_Type(ptr %a582) + %t583 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } %t583, ptr %a584 + call void @finch_str_copy(ptr %a585, ptr %a584) + %t586 = load { ptr, i64, i64 }, ptr %a585 + %t587 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t586, ptr %a501 + store { ptr, i64, i64 } %t587, ptr %a588 + call void @finch_str_drop(ptr %a588) + call void @finch_str_drop(ptr %a533) + br label %endif8751 +else8750: + %t589 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t590 = load { ptr, i64, i64 }, ptr %t589 + store { ptr, i64, i64 } %t590, ptr %a591 + store { ptr, i64, i64 } { ptr @.str.5630, i64 6, i64 0 }, ptr %a592 + %t593 = call i32 @finch_str_eq(ptr %a591, ptr %a592) + %t594 = icmp ne i32 %t593, 0 + br label %logic.from8757 +logic.from8757: + br i1 %t594, label %logic.end8759, label %logic.rhs8758 +logic.rhs8758: + %t595 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t596 = load { ptr, i64, i64 }, ptr %t595 + store { ptr, i64, i64 } %t596, ptr %a597 + store { ptr, i64, i64 } { ptr @.str.5631, i64 4, i64 0 }, ptr %a598 + %t599 = call i32 @finch_str_eq(ptr %a597, ptr %a598) + %t600 = icmp ne i32 %t599, 0 + br label %logic.rend8760 +logic.rend8760: + br label %logic.end8759 +logic.end8759: + %t601 = phi i1 [ true, %logic.from8757 ], [ %t600, %logic.rend8760 ] + br i1 %t601, label %then8761, label %endif8763 +then8761: + %t602 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t603 = load i1, ptr %t602 + br i1 %t603, label %then8764, label %else8765 +then8764: + %t604 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t605 = getelementptr inbounds %S.gen.Place, ptr %t604, i32 0, i32 0 + %t606 = load { ptr, i64, i64 }, ptr %t605 + store { ptr, i64, i64 } %t606, ptr %a607 + call void @finch_str_copy(ptr %a608, ptr %a607) + %t609 = load { ptr, i64, i64 }, ptr %a608 + %t610 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t609, ptr %a501 + store { ptr, i64, i64 } %t610, ptr %a611 + call void @finch_str_drop(ptr %a611) + br label %endif8766 +else8765: + %t612 = load ptr, ptr %a1 + %t613 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t614 = load %S.gen.Val, ptr %t613 + %t615 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t612, %S.gen.Val %t614) + %t616 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t615, ptr %a501 + store { ptr, i64, i64 } %t616, ptr %a617 + call void @finch_str_drop(ptr %a617) + store i1 true, ptr %a502 + br label %endif8766 +endif8766: + br label %endif8763 +endif8763: + br label %endif8751 +endif8751: + %t618 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t619 = load { ptr, i64, i64 }, ptr %t618 + store { ptr, i64, i64 } %t619, ptr %a620 + store { ptr, i64, i64 } { ptr @.str.5632, i64 6, i64 0 }, ptr %a621 + %t622 = call i32 @finch_str_eq(ptr %a620, ptr %a621) + %t623 = icmp ne i32 %t622, 0 + br label %logic.from8767 +logic.from8767: + br i1 %t623, label %logic.end8769, label %logic.rhs8768 +logic.rhs8768: + %t624 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t625 = load { ptr, i64, i64 }, ptr %t624 + store { ptr, i64, i64 } %t625, ptr %a626 + store { ptr, i64, i64 } { ptr @.str.5633, i64 4, i64 0 }, ptr %a627 + %t628 = call i32 @finch_str_eq(ptr %a626, ptr %a627) + %t629 = icmp ne i32 %t628, 0 + br label %logic.rend8770 +logic.rend8770: + br label %logic.end8769 +logic.end8769: + %t630 = phi i1 [ true, %logic.from8767 ], [ %t629, %logic.rend8770 ] + br i1 %t630, label %then8771, label %endif8773 +then8771: + %t631 = load ptr, ptr %a1 + %t632 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t633 = load { ptr, i64, i64 }, ptr %t632 + %t634 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t635 = load { ptr, i64, i64 }, ptr %t634 + %t636 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t637 = load { ptr, i64, i64 }, ptr %t636 + %t638 = call i64 @finch.gen.findMethod(ptr %t631, { ptr, i64, i64 } %t633, { ptr, i64, i64 } %t635, { ptr, i64, i64 } %t637) + store i64 %t638, ptr %a639 + %t640 = load i64, ptr %a639 + %t641 = icmp slt i64 %t640, 0 + br label %logic.from8774 +logic.from8774: + br i1 %t641, label %logic.rhs8775, label %logic.end8776 +logic.rhs8775: + %t642 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t643 = load { ptr, i64, i64 }, ptr %t642 + store { ptr, i64, i64 } %t643, ptr %a644 + store { ptr, i64, i64 } { ptr @.str.5634, i64 6, i64 0 }, ptr %a645 + %t646 = call i32 @finch_str_eq(ptr %a644, ptr %a645) + %t647 = icmp ne i32 %t646, 0 + br label %logic.rend8777 +logic.rend8777: + br label %logic.end8776 +logic.end8776: + %t648 = phi i1 [ false, %logic.from8774 ], [ %t647, %logic.rend8777 ] + br i1 %t648, label %then8778, label %endif8780 +then8778: + %t649 = load ptr, ptr %a1 + %t650 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t651 = load { ptr, i64, i64 }, ptr %t650 + %t652 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t653 = load { ptr, i64, i64 }, ptr %t652 + %t654 = call i64 @finch.gen.findStruct(ptr %t649, { ptr, i64, i64 } %t651, { ptr, i64, i64 } %t653) + store i64 %t654, ptr %a655 + %t656 = load ptr, ptr %a1 + %t657 = icmp eq ptr %t656, null + br i1 %t657, label %panic8781, label %ok8782 +panic8781: + call void @finch_panic(ptr @.str.5635, i64 5353, ptr @.str.5636) + unreachable +ok8782: + %t658 = getelementptr inbounds %S.gen.Gen, ptr %t656, i32 0, i32 16 + %t659 = load i64, ptr %a655 + %t660 = load { ptr, i64, i64 }, ptr %t658 + %t661 = extractvalue { ptr, i64, i64 } %t660, 1 + %t662 = icmp uge i64 %t659, %t661 + br i1 %t662, label %range8783, label %inrange8784 +range8783: + call void @finch_panic_index(ptr @.str.5637, i64 5353, i64 %t659, i64 %t661) + unreachable +inrange8784: + %t663 = extractvalue { ptr, i64, i64 } %t660, 0 + %t664 = getelementptr inbounds %S.gen.StructDef, ptr %t663, i64 %t659 + %t665 = getelementptr inbounds %S.gen.StructDef, ptr %t664, i32 0, i32 5 + %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 + %t667 = load i64, ptr %t666 + %t668 = icmp sgt i64 %t667, 0 + br i1 %t668, label %then8785, label %endif8787 +then8785: + %t669 = load ptr, ptr %a1 + %t670 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t671 = load { ptr, i64, i64 }, ptr %t670 + %t672 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t673 = load { ptr, i64, i64 }, ptr %t672 + %t674 = load ptr, ptr %a1 + %t675 = icmp eq ptr %t674, null + br i1 %t675, label %panic8788, label %ok8789 +panic8788: + call void @finch_panic(ptr @.str.5638, i64 5354, ptr @.str.5639) + unreachable +ok8789: + %t676 = getelementptr inbounds %S.gen.Gen, ptr %t674, i32 0, i32 16 + %t677 = load i64, ptr %a655 + %t678 = load { ptr, i64, i64 }, ptr %t676 + %t679 = extractvalue { ptr, i64, i64 } %t678, 1 + %t680 = icmp uge i64 %t677, %t679 + br i1 %t680, label %range8790, label %inrange8791 +range8790: + call void @finch_panic_index(ptr @.str.5640, i64 5354, i64 %t677, i64 %t679) + unreachable +inrange8791: + %t681 = extractvalue { ptr, i64, i64 } %t678, 0 + %t682 = getelementptr inbounds %S.gen.StructDef, ptr %t681, i64 %t677 + %t683 = getelementptr inbounds %S.gen.StructDef, ptr %t682, i32 0, i32 5 + %t684 = load { ptr, i64, i64 }, ptr %t683 + %t685 = call i64 @finch.gen.findTemplate(ptr %t669, { ptr, i64, i64 } %t671, { ptr, i64, i64 } %t673, { ptr, i64, i64 } %t684, i1 false) + store i64 %t685, ptr %a686 + %t687 = load i64, ptr %a686 + %t688 = icmp sge i64 %t687, 0 + br i1 %t688, label %then8792, label %endif8794 +then8792: + %t689 = load ptr, ptr %a1 + %t690 = load i64, ptr %a686 + %t691 = load ptr, ptr %a1 + %t692 = icmp eq ptr %t691, null + br i1 %t692, label %panic8795, label %ok8796 +panic8795: + call void @finch_panic(ptr @.str.5641, i64 5356, ptr @.str.5642) + unreachable +ok8796: + %t693 = getelementptr inbounds %S.gen.Gen, ptr %t691, i32 0, i32 16 + %t694 = load i64, ptr %a655 + %t695 = load { ptr, i64, i64 }, ptr %t693 + %t696 = extractvalue { ptr, i64, i64 } %t695, 1 + %t697 = icmp uge i64 %t694, %t696 + br i1 %t697, label %range8797, label %inrange8798 +range8797: + call void @finch_panic_index(ptr @.str.5643, i64 5356, i64 %t694, i64 %t696) + unreachable +inrange8798: + %t698 = extractvalue { ptr, i64, i64 } %t695, 0 + %t699 = getelementptr inbounds %S.gen.StructDef, ptr %t698, i64 %t694 + %t700 = getelementptr inbounds %S.gen.StructDef, ptr %t699, i32 0, i32 7 + %t701 = load { ptr, i64, i64 }, ptr %t700 + %t702 = load %S.ast.Type, ptr %a500 + %t703 = load %S.ast.Node, ptr %a2 + %t704 = call i64 @finch.gen.instFn(ptr %t689, i64 %t690, { ptr, i64, i64 } %t701, %S.ast.Type %t702, %S.ast.Node %t703) + store i64 %t704, ptr %a639 + br label %endif8794 +endif8794: + br label %endif8787 +endif8787: + br label %endif8780 +endif8780: + %t705 = load i64, ptr %a639 + %t706 = icmp slt i64 %t705, 0 + br i1 %t706, label %then8799, label %endif8801 +then8799: + store { ptr, i64, i64 } zeroinitializer, ptr %a707 + %t708 = load ptr, ptr %a1 + %t709 = icmp eq ptr %t708, null + br i1 %t709, label %panic8802, label %ok8803 +panic8802: + call void @finch_panic(ptr @.str.5644, i64 5362, ptr @.str.5645) + unreachable +ok8803: + %t710 = getelementptr inbounds %S.gen.Gen, ptr %t708, i32 0, i32 15 + store i64 0, ptr %a711 + br label %each.cond8804 +each.cond8804: + %t712 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i32 0, i32 1 + %t713 = load i64, ptr %t712 + %t714 = load i64, ptr %a711 + %t715 = icmp slt i64 %t714, %t713 + br i1 %t715, label %each.body8805, label %each.end8807 +each.body8805: + %t716 = load ptr, ptr %t710 + %t717 = getelementptr inbounds %S.gen.FnSig, ptr %t716, i64 %t714 + %t718 = load %S.gen.FnSig, ptr %t717 + store %S.gen.FnSig %t718, ptr %a719 + %t720 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 2 + %t721 = load { ptr, i64, i64 }, ptr %t720 + %t722 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t723 = load { ptr, i64, i64 }, ptr %t722 + store { ptr, i64, i64 } %t721, ptr %a724 + store { ptr, i64, i64 } %t723, ptr %a725 + %t726 = call i32 @finch_str_eq(ptr %a724, ptr %a725) + %t727 = icmp ne i32 %t726, 0 + br label %logic.from8808 +logic.from8808: + br i1 %t727, label %logic.rhs8809, label %logic.end8810 +logic.rhs8809: + %t728 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 3 + %t729 = load { ptr, i64, i64 }, ptr %t728 + %t730 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t731 = load { ptr, i64, i64 }, ptr %t730 + store { ptr, i64, i64 } %t729, ptr %a732 + store { ptr, i64, i64 } %t731, ptr %a733 + %t734 = call i32 @finch_str_eq(ptr %a732, ptr %a733) + %t735 = icmp ne i32 %t734, 0 + br label %logic.rend8811 +logic.rend8811: + br label %logic.end8810 +logic.end8810: + %t736 = phi i1 [ false, %logic.from8808 ], [ %t735, %logic.rend8811 ] + br i1 %t736, label %then8812, label %endif8814 +then8812: + %t737 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 + %t738 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 1 + %t739 = load { ptr, i64, i64 }, ptr %t738 + store { ptr, i64, i64 } %t739, ptr %a740 + call void @finch_str_copy(ptr %a741, ptr %a740) + %t742 = load { ptr, i64, i64 }, ptr %a741 + %t743 = load i64, ptr %t737 + %t744 = add i64 %t743, 1 + call void @finch_arr_reserve(ptr %a707, i64 %t744, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t745 = load ptr, ptr %a707 + %t746 = getelementptr inbounds { ptr, i64, i64 }, ptr %t745, i64 %t743 + store { ptr, i64, i64 } %t742, ptr %t746 + store i64 %t744, ptr %t737 + br label %endif8814 +endif8814: + br label %each.step8806 +each.step8806: + %t747 = load i64, ptr %a711 + %t748 = add i64 %t747, 1 + store i64 %t748, ptr %a711 + br label %each.cond8804 +each.end8807: + %t749 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 + %t750 = load i64, ptr %t749 + %t751 = icmp eq i64 %t750, 0 + br i1 %t751, label %then8815, label %endif8817 +then8815: + %t752 = load ptr, ptr %a1 + %t753 = load %S.ast.Node, ptr %a2 + %t754 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t755 = load { ptr, i64, i64 }, ptr %t754 + store { ptr, i64, i64 } { ptr @.str.5646, i64 4, i64 0 }, ptr %a757 + store { ptr, i64, i64 } %t755, ptr %a758 + call void @finch_str_concat(ptr %a756, ptr %a757, ptr %a758) + %t759 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t759, ptr %a761 + store { ptr, i64, i64 } { ptr @.str.5647, i64 1, i64 0 }, ptr %a762 + call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) + store { ptr, i64, i64 } %t759, ptr %a763 + call void @finch_str_drop(ptr %a763) + %t764 = load { ptr, i64, i64 }, ptr %a760 + %t765 = load %S.ast.Type, ptr %a500 + %t766 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t765) + store { ptr, i64, i64 } %t764, ptr %a768 + store { ptr, i64, i64 } %t766, ptr %a769 + call void @finch_str_concat(ptr %a767, ptr %a768, ptr %a769) + store { ptr, i64, i64 } %t764, ptr %a770 + call void @finch_str_drop(ptr %a770) + store { ptr, i64, i64 } %t766, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t772, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.5648, i64 34, i64 0 }, ptr %a775 + call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) + store { ptr, i64, i64 } %t772, ptr %a776 + call void @finch_str_drop(ptr %a776) + %t777 = load { ptr, i64, i64 }, ptr %a773 + %t778 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t779 = load { ptr, i64, i64 }, ptr %t778 + store { ptr, i64, i64 } %t777, ptr %a781 + store { ptr, i64, i64 } %t779, ptr %a782 + call void @finch_str_concat(ptr %a780, ptr %a781, ptr %a782) + store { ptr, i64, i64 } %t777, ptr %a783 + call void @finch_str_drop(ptr %a783) + %t784 = load { ptr, i64, i64 }, ptr %a780 + store { ptr, i64, i64 } %t784, ptr %a786 + store { ptr, i64, i64 } { ptr @.str.5649, i64 1, i64 0 }, ptr %a787 + call void @finch_str_concat(ptr %a785, ptr %a786, ptr %a787) + store { ptr, i64, i64 } %t784, ptr %a788 + call void @finch_str_drop(ptr %a788) + %t789 = load { ptr, i64, i64 }, ptr %a785 + %t790 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t791 = load { ptr, i64, i64 }, ptr %t790 + store { ptr, i64, i64 } %t789, ptr %a793 + store { ptr, i64, i64 } %t791, ptr %a794 + call void @finch_str_concat(ptr %a792, ptr %a793, ptr %a794) + store { ptr, i64, i64 } %t789, ptr %a795 + call void @finch_str_drop(ptr %a795) + %t796 = load { ptr, i64, i64 }, ptr %a792 + store { ptr, i64, i64 } %t796, ptr %a798 + store { ptr, i64, i64 } { ptr @.str.5650, i64 13, i64 0 }, ptr %a799 + call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799) + store { ptr, i64, i64 } %t796, ptr %a800 + call void @finch_str_drop(ptr %a800) + %t801 = load { ptr, i64, i64 }, ptr %a797 + call void @finch.gen.fail(ptr %t752, %S.ast.Node %t753, { ptr, i64, i64 } %t801) + store { ptr, i64, i64 } %t801, ptr %a802 + call void @finch_str_drop(ptr %a802) + br label %endif8817 +endif8817: + %t803 = load ptr, ptr %a1 + %t804 = load %S.ast.Node, ptr %a2 + %t805 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t806 = load { ptr, i64, i64 }, ptr %t805 + store { ptr, i64, i64 } { ptr @.str.5651, i64 4, i64 0 }, ptr %a808 + store { ptr, i64, i64 } %t806, ptr %a809 + call void @finch_str_concat(ptr %a807, ptr %a808, ptr %a809) + %t810 = load { ptr, i64, i64 }, ptr %a807 + store { ptr, i64, i64 } %t810, ptr %a812 + store { ptr, i64, i64 } { ptr @.str.5652, i64 1, i64 0 }, ptr %a813 + call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813) + store { ptr, i64, i64 } %t810, ptr %a814 + call void @finch_str_drop(ptr %a814) + %t815 = load { ptr, i64, i64 }, ptr %a811 + %t816 = load %S.ast.Type, ptr %a500 + %t817 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t816) + store { ptr, i64, i64 } %t815, ptr %a819 + store { ptr, i64, i64 } %t817, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t815, ptr %a821 + call void @finch_str_drop(ptr %a821) + store { ptr, i64, i64 } %t817, ptr %a822 + call void @finch_str_drop(ptr %a822) + %t823 = load { ptr, i64, i64 }, ptr %a818 + store { ptr, i64, i64 } %t823, ptr %a825 + store { ptr, i64, i64 } { ptr @.str.5653, i64 16, i64 0 }, ptr %a826 + call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) + store { ptr, i64, i64 } %t823, ptr %a827 + call void @finch_str_drop(ptr %a827) + %t828 = load { ptr, i64, i64 }, ptr %a824 + %t829 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t830 = load { ptr, i64, i64 }, ptr %t829 + store { ptr, i64, i64 } %t828, ptr %a832 + store { ptr, i64, i64 } %t830, ptr %a833 + call void @finch_str_concat(ptr %a831, ptr %a832, ptr %a833) + store { ptr, i64, i64 } %t828, ptr %a834 + call void @finch_str_drop(ptr %a834) + %t835 = load { ptr, i64, i64 }, ptr %a831 + store { ptr, i64, i64 } %t835, ptr %a837 + store { ptr, i64, i64 } { ptr @.str.5654, i64 11, i64 0 }, ptr %a838 + call void @finch_str_concat(ptr %a836, ptr %a837, ptr %a838) + store { ptr, i64, i64 } %t835, ptr %a839 + call void @finch_str_drop(ptr %a839) + %t840 = load { ptr, i64, i64 }, ptr %a836 + %t841 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5655, i64 2, i64 0 }, ptr %a842 + call void @finch_str_join(ptr %a843, ptr %a707, ptr %a842) + %t844 = load { ptr, i64, i64 }, ptr %a843 + store { ptr, i64, i64 } %t840, ptr %a846 + store { ptr, i64, i64 } %t844, ptr %a847 + call void @finch_str_concat(ptr %a845, ptr %a846, ptr %a847) + store { ptr, i64, i64 } %t840, ptr %a848 + call void @finch_str_drop(ptr %a848) + store { ptr, i64, i64 } %t844, ptr %a849 + call void @finch_str_drop(ptr %a849) + %t850 = load { ptr, i64, i64 }, ptr %a845 + store { ptr, i64, i64 } %t850, ptr %a852 + store { ptr, i64, i64 } { ptr @.str.5656, i64 1, i64 0 }, ptr %a853 + call void @finch_str_concat(ptr %a851, ptr %a852, ptr %a853) + store { ptr, i64, i64 } %t850, ptr %a854 + call void @finch_str_drop(ptr %a854) + %t855 = load { ptr, i64, i64 }, ptr %a851 + call void @finch.gen.fail(ptr %t803, %S.ast.Node %t804, { ptr, i64, i64 } %t855) + store { ptr, i64, i64 } %t855, ptr %a856 + call void @finch_str_drop(ptr %a856) + call void @finch.drop.arr_str(ptr %a707) + br label %endif8801 +endif8801: + %t857 = load ptr, ptr %a1 + %t858 = icmp eq ptr %t857, null + br i1 %t858, label %panic8818, label %ok8819 +panic8818: + call void @finch_panic(ptr @.str.5657, i64 5373, ptr @.str.5658) + unreachable +ok8819: + %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 15 + %t860 = load i64, ptr %a639 + %t861 = load { ptr, i64, i64 }, ptr %t859 + %t862 = extractvalue { ptr, i64, i64 } %t861, 1 + %t863 = icmp uge i64 %t860, %t862 + br i1 %t863, label %range8820, label %inrange8821 +range8820: + call void @finch_panic_index(ptr @.str.5659, i64 5373, i64 %t860, i64 %t862) + unreachable +inrange8821: + %t864 = extractvalue { ptr, i64, i64 } %t861, 0 + %t865 = getelementptr inbounds %S.gen.FnSig, ptr %t864, i64 %t860 + %t866 = getelementptr inbounds %S.gen.FnSig, ptr %t865, i32 0, i32 10 + %t867 = load i1, ptr %t866 + br label %logic.from8822 +logic.from8822: + br i1 %t867, label %logic.rhs8823, label %logic.end8824 +logic.rhs8823: + %t868 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t869 = load { ptr, i64, i64 }, ptr %t868 + store { ptr, i64, i64 } %t869, ptr %a870 + store { ptr, i64, i64 } { ptr @.str.5660, i64 6, i64 0 }, ptr %a871 + %t872 = call i32 @finch_str_eq(ptr %a870, ptr %a871) + %t873 = icmp ne i32 %t872, 0 + br label %logic.from8825 +logic.from8825: + br i1 %t873, label %logic.end8827, label %logic.rhs8826 +logic.rhs8826: + %t874 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t875 = load { ptr, i64, i64 }, ptr %t874 + store { ptr, i64, i64 } %t875, ptr %a876 + store { ptr, i64, i64 } { ptr @.str.5661, i64 4, i64 0 }, ptr %a877 + %t878 = call i32 @finch_str_eq(ptr %a876, ptr %a877) + %t879 = icmp ne i32 %t878, 0 + br label %logic.rend8828 +logic.rend8828: + br label %logic.end8827 +logic.end8827: + %t880 = phi i1 [ true, %logic.from8825 ], [ %t879, %logic.rend8828 ] + br label %logic.rend8829 +logic.rend8829: + br label %logic.end8824 +logic.end8824: + %t881 = phi i1 [ false, %logic.from8822 ], [ %t880, %logic.rend8829 ] + br i1 %t881, label %then8830, label %endif8832 +then8830: + %t882 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t883 = load i1, ptr %t882 + %t884 = xor i1 %t883, true + br i1 %t884, label %then8833, label %endif8835 +then8833: + %t885 = load ptr, ptr %a1 + %t886 = load %S.ast.Node, ptr %a2 + %t887 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t888 = load { ptr, i64, i64 }, ptr %t887 + store { ptr, i64, i64 } %t888, ptr %a890 + store { ptr, i64, i64 } { ptr @.str.5662, i64 28, i64 0 }, ptr %a891 + call void @finch_str_concat(ptr %a889, ptr %a890, ptr %a891) + %t892 = load { ptr, i64, i64 }, ptr %a889 + %t893 = load %S.ast.Type, ptr %a500 + %t894 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t893) + store { ptr, i64, i64 } %t892, ptr %a896 + store { ptr, i64, i64 } %t894, ptr %a897 + call void @finch_str_concat(ptr %a895, ptr %a896, ptr %a897) + store { ptr, i64, i64 } %t892, ptr %a898 + call void @finch_str_drop(ptr %a898) + store { ptr, i64, i64 } %t894, ptr %a899 + call void @finch_str_drop(ptr %a899) + %t900 = load { ptr, i64, i64 }, ptr %a895 + store { ptr, i64, i64 } %t900, ptr %a902 + store { ptr, i64, i64 } { ptr @.str.5663, i64 30, i64 0 }, ptr %a903 + call void @finch_str_concat(ptr %a901, ptr %a902, ptr %a903) + store { ptr, i64, i64 } %t900, ptr %a904 + call void @finch_str_drop(ptr %a904) + %t905 = load { ptr, i64, i64 }, ptr %a901 + call void @finch.gen.fail(ptr %t885, %S.ast.Node %t886, { ptr, i64, i64 } %t905) + store { ptr, i64, i64 } %t905, ptr %a906 + call void @finch_str_drop(ptr %a906) + br label %endif8835 +endif8835: + %t907 = load %S.ast.Node, ptr %a13 + %t908 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t907) + store { ptr, i64, i64 } %t908, ptr %a909 + %t910 = getelementptr inbounds { ptr, i64, i64 }, ptr %a909, i32 0, i32 1 + %t911 = load i64, ptr %t910 + %t912 = icmp sgt i64 %t911, 0 + br i1 %t912, label %then8836, label %endif8838 +then8836: + %t913 = load ptr, ptr %a1 + %t914 = load { ptr, i64, i64 }, ptr %a909 + %t915 = call i64 @finch.gen.lookup(ptr %t913, { ptr, i64, i64 } %t914) + store i64 %t915, ptr %a916 + %t917 = load i64, ptr %a916 + %t918 = icmp sge i64 %t917, 0 + br label %logic.from8839 +logic.from8839: + br i1 %t918, label %logic.rhs8840, label %logic.end8841 +logic.rhs8840: + %t919 = load ptr, ptr %a1 + %t920 = load i64, ptr %a916 + %t921 = call %S.gen.Var @finch.gen.varAt(ptr %t919, i64 %t920) + %t922 = extractvalue %S.gen.Var %t921, 3 + store %S.gen.Var %t921, ptr %a923 + call void @finch.drop.S_gen_Var(ptr %a923) + br label %logic.rend8842 +logic.rend8842: + br label %logic.end8841 +logic.end8841: + %t924 = phi i1 [ false, %logic.from8839 ], [ %t922, %logic.rend8842 ] + br i1 %t924, label %then8843, label %endif8845 +then8843: + %t925 = load ptr, ptr %a1 + %t926 = load %S.ast.Node, ptr %a2 + %t927 = load { ptr, i64, i64 }, ptr %a909 + store { ptr, i64, i64 } { ptr @.str.5664, i64 19, i64 0 }, ptr %a929 + store { ptr, i64, i64 } %t927, ptr %a930 + call void @finch_str_concat(ptr %a928, ptr %a929, ptr %a930) + %t931 = load { ptr, i64, i64 }, ptr %a928 + store { ptr, i64, i64 } %t931, ptr %a933 + store { ptr, i64, i64 } { ptr @.str.5665, i64 18, i64 0 }, ptr %a934 + call void @finch_str_concat(ptr %a932, ptr %a933, ptr %a934) + store { ptr, i64, i64 } %t931, ptr %a935 + call void @finch_str_drop(ptr %a935) + %t936 = load { ptr, i64, i64 }, ptr %a932 + call void @finch.gen.fail(ptr %t925, %S.ast.Node %t926, { ptr, i64, i64 } %t936) + store { ptr, i64, i64 } %t936, ptr %a937 + call void @finch_str_drop(ptr %a937) + br label %endif8845 +endif8845: + br label %endif8838 +endif8838: + call void @finch_str_drop(ptr %a909) + br label %endif8832 +endif8832: + %t938 = load i1, ptr %a502 + br label %logic.from8846 +logic.from8846: + br i1 %t938, label %logic.rhs8847, label %logic.end8848 +logic.rhs8847: + %t939 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t940 = getelementptr inbounds %S.gen.Val, ptr %t939, i32 0, i32 2 + %t941 = load i1, ptr %t940 + br label %logic.rend8849 +logic.rend8849: + br label %logic.end8848 +logic.end8848: + %t942 = phi i1 [ false, %logic.from8846 ], [ %t941, %logic.rend8849 ] + br i1 %t942, label %then8850, label %endif8852 +then8850: + %t943 = load ptr, ptr %a1 + %t944 = load { ptr, i64, i64 }, ptr %a501 + %t945 = load %S.ast.Type, ptr %a500 + call void @finch.gen.holdAddr(ptr %t943, { ptr, i64, i64 } %t944, %S.ast.Type %t945) + br label %endif8852 +endif8852: + %t946 = load ptr, ptr %a1 + %t947 = load i64, ptr %a639 + %t948 = load %S.ast.Node, ptr %a2 + %t949 = load %S.ast.Type, ptr %a500 + %t950 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t949) + store { ptr, i64, i64 } %t950, ptr %a952 + store { ptr, i64, i64 } { ptr @.str.5666, i64 1, i64 0 }, ptr %a953 + call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) + store { ptr, i64, i64 } %t950, ptr %a954 + call void @finch_str_drop(ptr %a954) + %t955 = load { ptr, i64, i64 }, ptr %a951 + %t956 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t957 = load { ptr, i64, i64 }, ptr %t956 + store { ptr, i64, i64 } %t955, ptr %a959 + store { ptr, i64, i64 } %t957, ptr %a960 + call void @finch_str_concat(ptr %a958, ptr %a959, ptr %a960) + store { ptr, i64, i64 } %t955, ptr %a961 + call void @finch_str_drop(ptr %a961) + %t962 = load { ptr, i64, i64 }, ptr %a958 + %t963 = load { ptr, i64, i64 }, ptr %a501 + %t964 = load %S.ast.Node, ptr %a13 + %t965 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t964) + %t966 = call %S.gen.Val @finch.gen.callFn(ptr %t946, i64 %t947, %S.ast.Node %t948, i64 1, { ptr, i64, i64 } %t962, { ptr, i64, i64 } %t963, { ptr, i64, i64 } %t965) + store { ptr, i64, i64 } %t962, ptr %a967 + call void @finch_str_drop(ptr %a967) + store { ptr, i64, i64 } %t965, ptr %a968 + call void @finch_str_drop(ptr %a968) + store %S.gen.Val %t966, ptr %a969 + %t970 = load i1, ptr %a502 + br label %logic.from8853 +logic.from8853: + br i1 %t970, label %logic.rhs8854, label %logic.end8855 +logic.rhs8854: + %t971 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t972 = getelementptr inbounds %S.gen.Val, ptr %t971, i32 0, i32 2 + %t973 = load i1, ptr %t972 + br label %logic.rend8856 +logic.rend8856: + br label %logic.end8855 +logic.end8855: + %t974 = phi i1 [ false, %logic.from8853 ], [ %t973, %logic.rend8856 ] + br label %logic.from8857 +logic.from8857: + br i1 %t974, label %logic.rhs8858, label %logic.end8859 +logic.rhs8858: + %t975 = load ptr, ptr %a1 + %t976 = load %S.ast.Type, ptr %a500 + %t977 = call i1 @finch.gen.owning(ptr %t975, %S.ast.Type %t976) + br label %logic.rend8860 +logic.rend8860: + br label %logic.end8859 +logic.end8859: + %t978 = phi i1 [ false, %logic.from8857 ], [ %t977, %logic.rend8860 ] + br i1 %t978, label %then8861, label %endif8863 +then8861: + %t979 = load ptr, ptr %a1 + %t980 = load { ptr, i64, i64 }, ptr %a501 + %t981 = load %S.ast.Type, ptr %a500 + call void @finch.gen.dropAt(ptr %t979, { ptr, i64, i64 } %t980, %S.ast.Type %t981) + br label %endif8863 +endif8863: + %t982 = load ptr, ptr %a1 + %t983 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t982, i64 %t983) + %t984 = load %S.gen.Val, ptr %a969 + call void @finch_str_drop(ptr %a501) + call void @finch.drop.S_ast_Type(ptr %a500) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t984 +endif8773: + %t985 = load ptr, ptr %a1 + %t986 = load %S.ast.Node, ptr %a2 + %t987 = load %S.ast.Type, ptr %a273 + %t988 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t987) + store { ptr, i64, i64 } %t988, ptr %a990 + store { ptr, i64, i64 } { ptr @.str.5667, i64 15, i64 0 }, ptr %a991 + call void @finch_str_concat(ptr %a989, ptr %a990, ptr %a991) + store { ptr, i64, i64 } %t988, ptr %a992 + call void @finch_str_drop(ptr %a992) + %t993 = load { ptr, i64, i64 }, ptr %a989 + call void @finch.gen.fail(ptr %t985, %S.ast.Node %t986, { ptr, i64, i64 } %t993) + store { ptr, i64, i64 } %t993, ptr %a994 + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a501) + call void @finch.drop.S_ast_Type(ptr %a500) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val zeroinitializer +} + +define internal void @finch.gen.need(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Node, ptr %a2 + %t6 = load i64, ptr %a3 + %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %t7 + call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 1, i64 %t6, { ptr, i64, i64 } %t8) + ret void +} + +define internal %S.gen.Val @finch.gen.arrayMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a12 = alloca %S.ast.Type, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a15 = alloca %S.ast.Type, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca %S.gen.Val, align 16 + %a70 = alloca %S.gen.Val, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca %S.ast.Type, align 16 + %a260 = alloca %S.ast.Type, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca %S.gen.Val, align 16 + %a315 = alloca %S.gen.Val, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca %S.ast.Type, align 16 + %a420 = alloca %S.ast.Type, align 16 + %a423 = alloca %S.gen.Val, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca %S.ast.Type, align 16 + %a435 = alloca %S.ast.Type, align 16 + %a440 = alloca %S.gen.Val, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca %S.gen.Val, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca %S.gen.Val, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a615 = alloca %S.gen.Val, align 16 + %a616 = alloca %S.ast.Type, align 16 + %a618 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca %S.gen.Val, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a644 = alloca %S.gen.Val, align 16 + %a646 = alloca %S.gen.Val, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a687 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a699 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a702 = alloca { ptr, i64, i64 }, align 16 + %a704 = alloca { ptr, i64, i64 }, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a716 = alloca { ptr, i64, i64 }, align 16 + %a717 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a744 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a746 = alloca { ptr, i64, i64 }, align 16 + %a747 = alloca { ptr, i64, i64 }, align 16 + %a749 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a766 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca %S.gen.Val, align 16 + %a792 = alloca %S.ast.Type, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca %S.gen.Val, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a805 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a832 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a837 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a841 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a844 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a852 = alloca { ptr, i64, i64 }, align 16 + %a853 = alloca { ptr, i64, i64 }, align 16 + %a854 = alloca { ptr, i64, i64 }, align 16 + %a857 = alloca { ptr, i64, i64 }, align 16 + %a858 = alloca { ptr, i64, i64 }, align 16 + %a859 = alloca { ptr, i64, i64 }, align 16 + %a860 = alloca { ptr, i64, i64 }, align 16 + %a862 = alloca { ptr, i64, i64 }, align 16 + %a863 = alloca { ptr, i64, i64 }, align 16 + %a864 = alloca { ptr, i64, i64 }, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a871 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a878 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca %S.ast.Type, align 16 + %a889 = alloca %S.ast.Type, align 16 + %a897 = alloca { ptr, i64, i64 }, align 16 + %a898 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca %S.gen.Val, align 16 + %a923 = alloca %S.ast.Type, align 16 + %a925 = alloca { ptr, i64, i64 }, align 16 + %a926 = alloca { ptr, i64, i64 }, align 16 + %a928 = alloca %S.gen.Val, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a936 = alloca { ptr, i64, i64 }, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a940 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a949 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a963 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a966 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a968 = alloca { ptr, i64, i64 }, align 16 + %a970 = alloca { ptr, i64, i64 }, align 16 + %a974 = alloca { ptr, i64, i64 }, align 16 + %a975 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a987 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a991 = alloca { ptr, i64, i64 }, align 16 + %a992 = alloca { ptr, i64, i64 }, align 16 + %a994 = alloca { ptr, i64, i64 }, align 16 + %a995 = alloca { ptr, i64, i64 }, align 16 + %a996 = alloca { ptr, i64, i64 }, align 16 + %a997 = alloca { ptr, i64, i64 }, align 16 + %a1000 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1005 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1010 = alloca { ptr, i64, i64 }, align 16 + %a1012 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1015 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1025 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1034 = alloca { ptr, i64, i64 }, align 16 + %a1035 = alloca { ptr, i64, i64 }, align 16 + %a1036 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca { ptr, i64, i64 }, align 16 + %a1040 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1045 = alloca { ptr, i64, i64 }, align 16 + %a1046 = alloca { ptr, i64, i64 }, align 16 + %a1047 = alloca { ptr, i64, i64 }, align 16 + %a1049 = alloca { ptr, i64, i64 }, align 16 + %a1050 = alloca { ptr, i64, i64 }, align 16 + %a1051 = alloca { ptr, i64, i64 }, align 16 + %a1052 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1057 = alloca { ptr, i64, i64 }, align 16 + %a1058 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1061 = alloca { ptr, i64, i64 }, align 16 + %a1062 = alloca { ptr, i64, i64 }, align 16 + %a1063 = alloca { ptr, i64, i64 }, align 16 + %a1064 = alloca { ptr, i64, i64 }, align 16 + %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 + %a1075 = alloca { ptr, i64, i64 }, align 16 + %a1078 = alloca { ptr, i64, i64 }, align 16 + %a1079 = alloca { ptr, i64, i64 }, align 16 + %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1086 = alloca { ptr, i64, i64 }, align 16 + %a1087 = alloca { ptr, i64, i64 }, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca { ptr, i64, i64 }, align 16 + %a1092 = alloca { ptr, i64, i64 }, align 16 + %a1093 = alloca { ptr, i64, i64 }, align 16 + %a1094 = alloca { ptr, i64, i64 }, align 16 + %a1095 = alloca { ptr, i64, i64 }, align 16 + %a1097 = alloca { ptr, i64, i64 }, align 16 + %a1098 = alloca { ptr, i64, i64 }, align 16 + %a1099 = alloca { ptr, i64, i64 }, align 16 + %a1100 = alloca { ptr, i64, i64 }, align 16 + %a1103 = alloca { ptr, i64, i64 }, align 16 + %a1104 = alloca { ptr, i64, i64 }, align 16 + %a1105 = alloca { ptr, i64, i64 }, align 16 + %a1106 = alloca { ptr, i64, i64 }, align 16 + %a1109 = alloca { ptr, i64, i64 }, align 16 + %a1110 = alloca { ptr, i64, i64 }, align 16 + %a1115 = alloca { ptr, i64, i64 }, align 16 + %a1120 = alloca { ptr, i64, i64 }, align 16 + %a1134 = alloca { ptr, i64, i64 }, align 16 + %a1135 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca %S.gen.Val, align 16 + %a1160 = alloca %S.ast.Type, align 16 + %a1162 = alloca { ptr, i64, i64 }, align 16 + %a1163 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca %S.gen.Val, align 16 + %a1166 = alloca { ptr, i64, i64 }, align 16 + %a1186 = alloca %S.gen.Val, align 16 + %a1187 = alloca %S.ast.Type, align 16 + %a1189 = alloca { ptr, i64, i64 }, align 16 + %a1190 = alloca { ptr, i64, i64 }, align 16 + %a1192 = alloca %S.gen.Val, align 16 + %a1193 = alloca { ptr, i64, i64 }, align 16 + %a1197 = alloca { ptr, i64, i64 }, align 16 + %a1200 = alloca { ptr, i64, i64 }, align 16 + %a1201 = alloca { ptr, i64, i64 }, align 16 + %a1202 = alloca { ptr, i64, i64 }, align 16 + %a1204 = alloca { ptr, i64, i64 }, align 16 + %a1205 = alloca { ptr, i64, i64 }, align 16 + %a1206 = alloca { ptr, i64, i64 }, align 16 + %a1207 = alloca { ptr, i64, i64 }, align 16 + %a1210 = alloca { ptr, i64, i64 }, align 16 + %a1211 = alloca { ptr, i64, i64 }, align 16 + %a1214 = alloca { ptr, i64, i64 }, align 16 + %a1215 = alloca { ptr, i64, i64 }, align 16 + %a1216 = alloca { ptr, i64, i64 }, align 16 + %a1218 = alloca { ptr, i64, i64 }, align 16 + %a1219 = alloca { ptr, i64, i64 }, align 16 + %a1220 = alloca { ptr, i64, i64 }, align 16 + %a1221 = alloca { ptr, i64, i64 }, align 16 + %a1224 = alloca { ptr, i64, i64 }, align 16 + %a1225 = alloca { ptr, i64, i64 }, align 16 + %a1226 = alloca { ptr, i64, i64 }, align 16 + %a1227 = alloca { ptr, i64, i64 }, align 16 + %a1230 = alloca { ptr, i64, i64 }, align 16 + %a1231 = alloca { ptr, i64, i64 }, align 16 + %a1234 = alloca { ptr, i64, i64 }, align 16 + %a1235 = alloca { ptr, i64, i64 }, align 16 + %a1236 = alloca { ptr, i64, i64 }, align 16 + %a1238 = alloca { ptr, i64, i64 }, align 16 + %a1239 = alloca { ptr, i64, i64 }, align 16 + %a1240 = alloca { ptr, i64, i64 }, align 16 + %a1241 = alloca { ptr, i64, i64 }, align 16 + %a1244 = alloca { ptr, i64, i64 }, align 16 + %a1245 = alloca { ptr, i64, i64 }, align 16 + %a1246 = alloca { ptr, i64, i64 }, align 16 + %a1247 = alloca { ptr, i64, i64 }, align 16 + %a1250 = alloca { ptr, i64, i64 }, align 16 + %a1251 = alloca { ptr, i64, i64 }, align 16 + %a1256 = alloca { ptr, i64, i64 }, align 16 + %a1257 = alloca { ptr, i64, i64 }, align 16 + %a1258 = alloca { ptr, i64, i64 }, align 16 + %a1260 = alloca { ptr, i64, i64 }, align 16 + %a1261 = alloca { ptr, i64, i64 }, align 16 + %a1262 = alloca { ptr, i64, i64 }, align 16 + %a1263 = alloca { ptr, i64, i64 }, align 16 + %a1266 = alloca { ptr, i64, i64 }, align 16 + %a1267 = alloca { ptr, i64, i64 }, align 16 + %a1268 = alloca { ptr, i64, i64 }, align 16 + %a1269 = alloca { ptr, i64, i64 }, align 16 + %a1272 = alloca { ptr, i64, i64 }, align 16 + %a1273 = alloca { ptr, i64, i64 }, align 16 + %a1274 = alloca { ptr, i64, i64 }, align 16 + %a1275 = alloca { ptr, i64, i64 }, align 16 + %a1276 = alloca { ptr, i64, i64 }, align 16 + %a1278 = alloca { ptr, i64, i64 }, align 16 + %a1279 = alloca { ptr, i64, i64 }, align 16 + %a1280 = alloca { ptr, i64, i64 }, align 16 + %a1281 = alloca { ptr, i64, i64 }, align 16 + %a1284 = alloca { ptr, i64, i64 }, align 16 + %a1285 = alloca { ptr, i64, i64 }, align 16 + %a1286 = alloca { ptr, i64, i64 }, align 16 + %a1287 = alloca { ptr, i64, i64 }, align 16 + %a1290 = alloca { ptr, i64, i64 }, align 16 + %a1292 = alloca { ptr, i64, i64 }, align 16 + %a1295 = alloca { ptr, i64, i64 }, align 16 + %a1296 = alloca { ptr, i64, i64 }, align 16 + %a1297 = alloca { ptr, i64, i64 }, align 16 + %a1299 = alloca { ptr, i64, i64 }, align 16 + %a1300 = alloca { ptr, i64, i64 }, align 16 + %a1301 = alloca { ptr, i64, i64 }, align 16 + %a1302 = alloca { ptr, i64, i64 }, align 16 + %a1305 = alloca { ptr, i64, i64 }, align 16 + %a1306 = alloca { ptr, i64, i64 }, align 16 + %a1307 = alloca { ptr, i64, i64 }, align 16 + %a1308 = alloca { ptr, i64, i64 }, align 16 + %a1311 = alloca { ptr, i64, i64 }, align 16 + %a1312 = alloca { ptr, i64, i64 }, align 16 + %a1315 = alloca { ptr, i64, i64 }, align 16 + %a1318 = alloca { ptr, i64, i64 }, align 16 + %a1319 = alloca { ptr, i64, i64 }, align 16 + %a1320 = alloca { ptr, i64, i64 }, align 16 + %a1322 = alloca { ptr, i64, i64 }, align 16 + %a1323 = alloca { ptr, i64, i64 }, align 16 + %a1324 = alloca { ptr, i64, i64 }, align 16 + %a1325 = alloca { ptr, i64, i64 }, align 16 + %a1328 = alloca { ptr, i64, i64 }, align 16 + %a1329 = alloca { ptr, i64, i64 }, align 16 + %a1330 = alloca { ptr, i64, i64 }, align 16 + %a1331 = alloca { ptr, i64, i64 }, align 16 + %a1333 = alloca { ptr, i64, i64 }, align 16 + %a1334 = alloca { ptr, i64, i64 }, align 16 + %a1335 = alloca { ptr, i64, i64 }, align 16 + %a1336 = alloca { ptr, i64, i64 }, align 16 + %a1341 = alloca { ptr, i64, i64 }, align 16 + %a1342 = alloca { ptr, i64, i64 }, align 16 + %a1343 = alloca { ptr, i64, i64 }, align 16 + %a1344 = alloca { ptr, i64, i64 }, align 16 + %a1345 = alloca { ptr, i64, i64 }, align 16 + %a1347 = alloca { ptr, i64, i64 }, align 16 + %a1348 = alloca { ptr, i64, i64 }, align 16 + %a1349 = alloca { ptr, i64, i64 }, align 16 + %a1350 = alloca { ptr, i64, i64 }, align 16 + %a1352 = alloca { ptr, i64, i64 }, align 16 + %a1356 = alloca { ptr, i64, i64 }, align 16 + %a1360 = alloca { ptr, i64, i64 }, align 16 + %a1364 = alloca { ptr, i64, i64 }, align 16 + %a1367 = alloca { ptr, i64, i64 }, align 16 + %a1368 = alloca { ptr, i64, i64 }, align 16 + %a1369 = alloca { ptr, i64, i64 }, align 16 + %a1371 = alloca { ptr, i64, i64 }, align 16 + %a1372 = alloca { ptr, i64, i64 }, align 16 + %a1373 = alloca { ptr, i64, i64 }, align 16 + %a1374 = alloca { ptr, i64, i64 }, align 16 + %a1377 = alloca { ptr, i64, i64 }, align 16 + %a1378 = alloca { ptr, i64, i64 }, align 16 + %a1379 = alloca { ptr, i64, i64 }, align 16 + %a1380 = alloca { ptr, i64, i64 }, align 16 + %a1382 = alloca { ptr, i64, i64 }, align 16 + %a1383 = alloca { ptr, i64, i64 }, align 16 + %a1384 = alloca { ptr, i64, i64 }, align 16 + %a1385 = alloca { ptr, i64, i64 }, align 16 + %a1393 = alloca { ptr, i64, i64 }, align 16 + %a1394 = alloca { ptr, i64, i64 }, align 16 + %a1395 = alloca { ptr, i64, i64 }, align 16 + %a1396 = alloca { ptr, i64, i64 }, align 16 + %a1399 = alloca { ptr, i64, i64 }, align 16 + %a1400 = alloca { ptr, i64, i64 }, align 16 + %a1403 = alloca { ptr, i64, i64 }, align 16 + %a1404 = alloca { ptr, i64, i64 }, align 16 + %a1405 = alloca { ptr, i64, i64 }, align 16 + %a1407 = alloca { ptr, i64, i64 }, align 16 + %a1408 = alloca { ptr, i64, i64 }, align 16 + %a1409 = alloca { ptr, i64, i64 }, align 16 + %a1410 = alloca { ptr, i64, i64 }, align 16 + %a1413 = alloca { ptr, i64, i64 }, align 16 + %a1414 = alloca { ptr, i64, i64 }, align 16 + %a1415 = alloca { ptr, i64, i64 }, align 16 + %a1416 = alloca { ptr, i64, i64 }, align 16 + %a1418 = alloca { ptr, i64, i64 }, align 16 + %a1419 = alloca { ptr, i64, i64 }, align 16 + %a1420 = alloca { ptr, i64, i64 }, align 16 + %a1421 = alloca { ptr, i64, i64 }, align 16 + %a1425 = alloca { ptr, i64, i64 }, align 16 + %a1426 = alloca { ptr, i64, i64 }, align 16 + %a1427 = alloca { ptr, i64, i64 }, align 16 + %a1429 = alloca { ptr, i64, i64 }, align 16 + %a1430 = alloca { ptr, i64, i64 }, align 16 + %a1431 = alloca { ptr, i64, i64 }, align 16 + %a1432 = alloca { ptr, i64, i64 }, align 16 + %a1440 = alloca { ptr, i64, i64 }, align 16 + %a1441 = alloca { ptr, i64, i64 }, align 16 + %a1442 = alloca { ptr, i64, i64 }, align 16 + %a1443 = alloca { ptr, i64, i64 }, align 16 + %a1446 = alloca { ptr, i64, i64 }, align 16 + %a1447 = alloca { ptr, i64, i64 }, align 16 + %a1448 = alloca { ptr, i64, i64 }, align 16 + %a1449 = alloca { ptr, i64, i64 }, align 16 + %a1450 = alloca { ptr, i64, i64 }, align 16 + %a1451 = alloca { ptr, i64, i64 }, align 16 + %a1454 = alloca { ptr, i64, i64 }, align 16 + %a1455 = alloca { ptr, i64, i64 }, align 16 + %a1467 = alloca %S.ast.Type, align 16 + %a1468 = alloca %S.ast.Type, align 16 + %a1473 = alloca { ptr, i64, i64 }, align 16 + %a1474 = alloca { ptr, i64, i64 }, align 16 + %a1481 = alloca { ptr, i64, i64 }, align 16 + %a1482 = alloca { ptr, i64, i64 }, align 16 + %a1484 = alloca { ptr, i64, i64 }, align 16 + %a1489 = alloca { ptr, i64, i64 }, align 16 + %a1490 = alloca { ptr, i64, i64 }, align 16 + %a1495 = alloca { ptr, i64, i64 }, align 16 + %a1496 = alloca { ptr, i64, i64 }, align 16 + %a1505 = alloca { ptr, i64, i64 }, align 16 + %a1509 = alloca { ptr, i64, i64 }, align 16 + %a1513 = alloca { ptr, i64, i64 }, align 16 + %a1516 = alloca { ptr, i64, i64 }, align 16 + %a1517 = alloca { ptr, i64, i64 }, align 16 + %a1518 = alloca { ptr, i64, i64 }, align 16 + %a1520 = alloca { ptr, i64, i64 }, align 16 + %a1521 = alloca { ptr, i64, i64 }, align 16 + %a1522 = alloca { ptr, i64, i64 }, align 16 + %a1523 = alloca { ptr, i64, i64 }, align 16 + %a1526 = alloca { ptr, i64, i64 }, align 16 + %a1527 = alloca { ptr, i64, i64 }, align 16 + %a1528 = alloca { ptr, i64, i64 }, align 16 + %a1529 = alloca { ptr, i64, i64 }, align 16 + %a1531 = alloca { ptr, i64, i64 }, align 16 + %a1532 = alloca { ptr, i64, i64 }, align 16 + %a1533 = alloca { ptr, i64, i64 }, align 16 + %a1534 = alloca { ptr, i64, i64 }, align 16 + %a1539 = alloca { ptr, i64, i64 }, align 16 + %a1540 = alloca { ptr, i64, i64 }, align 16 + %a1541 = alloca { ptr, i64, i64 }, align 16 + %a1542 = alloca { ptr, i64, i64 }, align 16 + %a1543 = alloca { ptr, i64, i64 }, align 16 + %a1545 = alloca { ptr, i64, i64 }, align 16 + %a1546 = alloca { ptr, i64, i64 }, align 16 + %a1547 = alloca { ptr, i64, i64 }, align 16 + %a1548 = alloca { ptr, i64, i64 }, align 16 + %a1551 = alloca { ptr, i64, i64 }, align 16 + %a1552 = alloca { ptr, i64, i64 }, align 16 + %a1553 = alloca { ptr, i64, i64 }, align 16 + %a1554 = alloca { ptr, i64, i64 }, align 16 + %a1556 = alloca { ptr, i64, i64 }, align 16 + %a1557 = alloca { ptr, i64, i64 }, align 16 + %a1558 = alloca { ptr, i64, i64 }, align 16 + %a1559 = alloca { ptr, i64, i64 }, align 16 + %a1561 = alloca { ptr, i64, i64 }, align 16 + %a1567 = alloca { ptr, i64, i64 }, align 16 + %a1568 = alloca { ptr, i64, i64 }, align 16 + %a1569 = alloca { ptr, i64, i64 }, align 16 + %a1571 = alloca { ptr, i64, i64 }, align 16 + %a1572 = alloca { ptr, i64, i64 }, align 16 + %a1573 = alloca { ptr, i64, i64 }, align 16 + %a1574 = alloca { ptr, i64, i64 }, align 16 + %a1576 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range8864, label %inrange8865 +range8864: + call void @finch_panic_index(ptr @.str.5668, i64 5404, i64 0, i64 %t7) + unreachable +inrange8865: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 + %t11 = load %S.ast.Type, ptr %t10 + store %S.ast.Type %t11, ptr %a12 + call void @finch.copy.S_ast_Type(ptr %a13, ptr %a12) + %t14 = load %S.ast.Type, ptr %a13 + store %S.ast.Type %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Type, ptr %a15 + %t18 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t16, %S.ast.Type %t17) + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + call void @finch_str_copy(ptr %a23, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5669, i64 46, i64 0 }, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t31, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.5670, i64 14, i64 0 }, ptr %a34 + call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) + store { ptr, i64, i64 } %t31, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a32 + %t37 = call { ptr, i64, i64 } @finch.gen.op(ptr %t26, { ptr, i64, i64 } %t36) + store { ptr, i64, i64 } %t36, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t37, ptr %a39 + %t40 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.5671, i64 4, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then8866, label %endif8868 +then8866: + %t45 = load ptr, ptr %a1 + %t46 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t45, %S.ast.Node %t46, i64 1) + %t47 = load ptr, ptr %a1 + %t48 = load ptr, ptr %a1 + %t49 = load ptr, ptr %a1 + %t50 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t51 = load { ptr, i64, i64 }, ptr %t50 + %t52 = extractvalue { ptr, i64, i64 } %t51, 1 + %t53 = icmp uge i64 1, %t52 + br i1 %t53, label %range8869, label %inrange8870 +range8869: + call void @finch_panic_index(ptr @.str.5672, i64 5410, i64 1, i64 %t52) + unreachable +inrange8870: + %t54 = extractvalue { ptr, i64, i64 } %t51, 0 + %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 1 + %t56 = load %S.ast.Node, ptr %t55 + %t57 = load %S.ast.Type, ptr %a15 + %t58 = call %S.gen.Val @finch.gen.exprWant(ptr %t49, %S.ast.Node %t56, %S.ast.Type %t57) + %t59 = load %S.ast.Type, ptr %a15 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 1, %t62 + br i1 %t63, label %range8871, label %inrange8872 +range8871: + call void @finch_panic_index(ptr @.str.5673, i64 5410, i64 1, i64 %t62) + unreachable +inrange8872: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 1 + %t66 = load %S.ast.Node, ptr %t65 + %t67 = call %S.gen.Val @finch.gen.coerce(ptr %t48, %S.gen.Val %t58, %S.ast.Type %t59, %S.ast.Node %t66, { ptr, i64, i64 } { ptr @.str.5674, i64 11, i64 0 }) + store %S.gen.Val %t58, ptr %a68 + call void @finch.drop.S_gen_Val(ptr %a68) + %t69 = call { ptr, i64, i64 } @finch.gen.own(ptr %t47, %S.gen.Val %t67) + store %S.gen.Val %t67, ptr %a70 + call void @finch.drop.S_gen_Val(ptr %a70) + store { ptr, i64, i64 } %t69, ptr %a71 + %t72 = load ptr, ptr %a1 + %t73 = load { ptr, i64, i64 }, ptr %a39 + %t74 = call { ptr, i64, i64 } @finch.gen.load(ptr %t72, { ptr, i64, i64 } { ptr @.str.5675, i64 3, i64 0 }, { ptr, i64, i64 } %t73) + store { ptr, i64, i64 } %t74, ptr %a75 + %t76 = load ptr, ptr %a1 + %t77 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.5676, i64 8, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t81, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.5677, i64 3, i64 0 }, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t81, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a82 + %t87 = call { ptr, i64, i64 } @finch.gen.op(ptr %t76, { ptr, i64, i64 } %t86) + store { ptr, i64, i64 } %t86, ptr %a88 + call void @finch_str_drop(ptr %a88) + store { ptr, i64, i64 } %t87, ptr %a89 + %t90 = load ptr, ptr %a1 + %t91 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5678, i64 33, i64 0 }, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t95, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.5679, i64 6, i64 0 }, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + %t101 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t100, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t100, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.5680, i64 6, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = load ptr, ptr %a1 + %t113 = load %S.ast.Type, ptr %a15 + %t114 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t112, %S.ast.Type %t113) + store { ptr, i64, i64 } %t111, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t111, ptr %a118 + call void @finch_str_drop(ptr %a118) + store { ptr, i64, i64 } %t114, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t120, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.5681, i64 1, i64 0 }, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t120, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + call void @finch.gen.emit(ptr %t90, { ptr, i64, i64 } %t125) + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load ptr, ptr %a1 + %t128 = load { ptr, i64, i64 }, ptr %a3 + %t129 = call { ptr, i64, i64 } @finch.gen.load(ptr %t127, { ptr, i64, i64 } { ptr @.str.5682, i64 3, i64 0 }, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t129, ptr %a130 + %t131 = load ptr, ptr %a1 + %t132 = load { ptr, i64, i64 }, ptr %a19 + %t133 = load { ptr, i64, i64 }, ptr %a71 + %t134 = load ptr, ptr %a1 + %t135 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5683, i64 23, i64 0 }, ptr %a137 + store { ptr, i64, i64 } %t135, ptr %a138 + call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) + %t139 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t139, ptr %a141 + store { ptr, i64, i64 } { ptr @.str.5684, i64 6, i64 0 }, ptr %a142 + call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142) + store { ptr, i64, i64 } %t139, ptr %a143 + call void @finch_str_drop(ptr %a143) + %t144 = load { ptr, i64, i64 }, ptr %a140 + %t145 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t144, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.5685, i64 6, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t155, ptr %a158 + store { ptr, i64, i64 } %t156, ptr %a159 + call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) + store { ptr, i64, i64 } %t155, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a157 + %t162 = call { ptr, i64, i64 } @finch.gen.op(ptr %t134, { ptr, i64, i64 } %t161) + store { ptr, i64, i64 } %t161, ptr %a163 + call void @finch_str_drop(ptr %a163) + call void @finch.gen.store(ptr %t131, { ptr, i64, i64 } %t132, { ptr, i64, i64 } %t133, { ptr, i64, i64 } %t162) + store { ptr, i64, i64 } %t162, ptr %a164 + call void @finch_str_drop(ptr %a164) + %t165 = load ptr, ptr %a1 + %t166 = load { ptr, i64, i64 }, ptr %a89 + %t167 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.store(ptr %t165, { ptr, i64, i64 } { ptr @.str.5686, i64 3, i64 0 }, { ptr, i64, i64 } %t166, { ptr, i64, i64 } %t167) + %t168 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5687, i64 4, i64 0 }) + %t169 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t168, 1 + call void @finch_str_drop(ptr %a130) + call void @finch_str_drop(ptr %a89) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a71) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t169 +endif8868: + %t170 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.5688, i64 3, i64 0 }, ptr %a172 + %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) + %t174 = icmp ne i32 %t173, 0 + br i1 %t174, label %then8873, label %endif8875 +then8873: + %t175 = load ptr, ptr %a1 + %t176 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t175, %S.ast.Node %t176, i64 0) + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a39 + %t179 = call { ptr, i64, i64 } @finch.gen.load(ptr %t177, { ptr, i64, i64 } { ptr @.str.5689, i64 3, i64 0 }, { ptr, i64, i64 } %t178) + store { ptr, i64, i64 } %t179, ptr %a180 + %t181 = load ptr, ptr %a1 + %t182 = load ptr, ptr %a1 + %t183 = load { ptr, i64, i64 }, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5690, i64 12, i64 0 }, ptr %a185 + store { ptr, i64, i64 } %t183, ptr %a186 + call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a184 + store { ptr, i64, i64 } %t187, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.5691, i64 3, i64 0 }, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + %t193 = call { ptr, i64, i64 } @finch.gen.op(ptr %t182, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a194 + call void @finch_str_drop(ptr %a194) + %t195 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t181, { ptr, i64, i64 } %t193, { ptr, i64, i64 } { ptr @.str.5692, i64 23, i64 0 }, %S.ast.Node %t195) + store { ptr, i64, i64 } %t193, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load ptr, ptr %a1 + %t198 = load { ptr, i64, i64 }, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5693, i64 8, i64 0 }, ptr %a200 + store { ptr, i64, i64 } %t198, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + %t202 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t202, ptr %a204 + store { ptr, i64, i64 } { ptr @.str.5694, i64 3, i64 0 }, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + %t208 = call { ptr, i64, i64 } @finch.gen.op(ptr %t197, { ptr, i64, i64 } %t207) + store { ptr, i64, i64 } %t207, ptr %a209 + call void @finch_str_drop(ptr %a209) + store { ptr, i64, i64 } %t208, ptr %a210 + %t211 = load ptr, ptr %a1 + %t212 = load { ptr, i64, i64 }, ptr %a3 + %t213 = call { ptr, i64, i64 } @finch.gen.load(ptr %t211, { ptr, i64, i64 } { ptr @.str.5695, i64 3, i64 0 }, { ptr, i64, i64 } %t212) + store { ptr, i64, i64 } %t213, ptr %a214 + %t215 = load ptr, ptr %a1 + %t216 = load { ptr, i64, i64 }, ptr %a19 + %t217 = load ptr, ptr %a1 + %t218 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5696, i64 23, i64 0 }, ptr %a220 + store { ptr, i64, i64 } %t218, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.5697, i64 6, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t227, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t227, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.5698, i64 6, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + %t239 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } %t238, ptr %a241 + store { ptr, i64, i64 } %t239, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + store { ptr, i64, i64 } %t238, ptr %a243 + call void @finch_str_drop(ptr %a243) + %t244 = load { ptr, i64, i64 }, ptr %a240 + %t245 = call { ptr, i64, i64 } @finch.gen.op(ptr %t217, { ptr, i64, i64 } %t244) + store { ptr, i64, i64 } %t244, ptr %a246 + call void @finch_str_drop(ptr %a246) + %t247 = call { ptr, i64, i64 } @finch.gen.load(ptr %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t245) + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_drop(ptr %a248) + store { ptr, i64, i64 } %t247, ptr %a249 + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a210 + %t252 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.store(ptr %t250, { ptr, i64, i64 } { ptr @.str.5699, i64 3, i64 0 }, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252) + %t253 = load { ptr, i64, i64 }, ptr %a249 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_copy(ptr %a255, ptr %a254) + %t256 = load { ptr, i64, i64 }, ptr %a255 + %t257 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t256, 0 + %t258 = load %S.ast.Type, ptr %a15 + store %S.ast.Type %t258, ptr %a259 + call void @finch.copy.S_ast_Type(ptr %a260, ptr %a259) + %t261 = load %S.ast.Type, ptr %a260 + %t262 = insertvalue %S.gen.Val %t257, %S.ast.Type %t261, 1 + %t263 = load ptr, ptr %a1 + %t264 = load %S.ast.Type, ptr %a15 + %t265 = call i1 @finch.gen.owning(ptr %t263, %S.ast.Type %t264) + %t266 = insertvalue %S.gen.Val %t262, i1 %t265, 2 + call void @finch_str_drop(ptr %a249) + call void @finch_str_drop(ptr %a214) + call void @finch_str_drop(ptr %a210) + call void @finch_str_drop(ptr %a180) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t266 +endif8875: + %t267 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t267, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.5700, i64 5, i64 0 }, ptr %a269 + %t270 = call i32 @finch_str_eq(ptr %a268, ptr %a269) + %t271 = icmp ne i32 %t270, 0 + br i1 %t271, label %then8876, label %endif8878 +then8876: + %t272 = load ptr, ptr %a1 + %t273 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t272, %S.ast.Node %t273, i64 0) + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a3 + %t276 = load %S.ast.Type, ptr %a4 + call void @finch.gen.dropFrom(ptr %t274, { ptr, i64, i64 } %t275, %S.ast.Type %t276, { ptr, i64, i64 } { ptr @.str.5701, i64 1, i64 0 }) + %t277 = load ptr, ptr %a1 + %t278 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.store(ptr %t277, { ptr, i64, i64 } { ptr @.str.5702, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5703, i64 1, i64 0 }, { ptr, i64, i64 } %t278) + %t279 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5704, i64 4, i64 0 }) + %t280 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t279, 1 + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t280 +endif8878: + %t281 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t281, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.5705, i64 4, i64 0 }, ptr %a283 + %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) + %t285 = icmp ne i32 %t284, 0 + br label %logic.from8879 +logic.from8879: + br i1 %t285, label %logic.end8881, label %logic.rhs8880 +logic.rhs8880: + %t286 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t286, ptr %a287 + store { ptr, i64, i64 } { ptr @.str.5706, i64 8, i64 0 }, ptr %a288 + %t289 = call i32 @finch_str_eq(ptr %a287, ptr %a288) + %t290 = icmp ne i32 %t289, 0 + br label %logic.rend8882 +logic.rend8882: + br label %logic.end8881 +logic.end8881: + %t291 = phi i1 [ true, %logic.from8879 ], [ %t290, %logic.rend8882 ] + br i1 %t291, label %then8883, label %endif8885 +then8883: + %t292 = load ptr, ptr %a1 + %t293 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t292, %S.ast.Node %t293, i64 1) + %t294 = load ptr, ptr %a1 + %t295 = load ptr, ptr %a1 + %t296 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t297 = load { ptr, i64, i64 }, ptr %t296 + %t298 = extractvalue { ptr, i64, i64 } %t297, 1 + %t299 = icmp uge i64 1, %t298 + br i1 %t299, label %range8886, label %inrange8887 +range8886: + call void @finch_panic_index(ptr @.str.5707, i64 5437, i64 1, i64 %t298) + unreachable +inrange8887: + %t300 = extractvalue { ptr, i64, i64 } %t297, 0 + %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i64 1 + %t302 = load %S.ast.Node, ptr %t301 + %t303 = load %S.ast.Type, ptr %a15 + %t304 = call %S.gen.Val @finch.gen.exprWant(ptr %t295, %S.ast.Node %t302, %S.ast.Type %t303) + %t305 = load %S.ast.Type, ptr %a15 + %t306 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t307 = load { ptr, i64, i64 }, ptr %t306 + %t308 = extractvalue { ptr, i64, i64 } %t307, 1 + %t309 = icmp uge i64 1, %t308 + br i1 %t309, label %range8888, label %inrange8889 +range8888: + call void @finch_panic_index(ptr @.str.5708, i64 5437, i64 1, i64 %t308) + unreachable +inrange8889: + %t310 = extractvalue { ptr, i64, i64 } %t307, 0 + %t311 = getelementptr inbounds %S.ast.Node, ptr %t310, i64 1 + %t312 = load %S.ast.Node, ptr %t311 + %t313 = call %S.gen.Val @finch.gen.coerce(ptr %t294, %S.gen.Val %t304, %S.ast.Type %t305, %S.ast.Node %t312, { ptr, i64, i64 } { ptr @.str.5709, i64 21, i64 0 }) + store %S.gen.Val %t304, ptr %a314 + call void @finch.drop.S_gen_Val(ptr %a314) + store %S.gen.Val %t313, ptr %a315 + %t316 = load ptr, ptr %a1 + %t317 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t316, { ptr, i64, i64 } { ptr @.str.5710, i64 3, i64 0 }) + store { ptr, i64, i64 } %t317, ptr %a318 + %t319 = load ptr, ptr %a1 + %t320 = load { ptr, i64, i64 }, ptr %a318 + call void @finch.gen.store(ptr %t319, { ptr, i64, i64 } { ptr @.str.5711, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5712, i64 2, i64 0 }, { ptr, i64, i64 } %t320) + %t321 = load ptr, ptr %a1 + %t322 = load { ptr, i64, i64 }, ptr %a39 + %t323 = call { ptr, i64, i64 } @finch.gen.load(ptr %t321, { ptr, i64, i64 } { ptr @.str.5713, i64 3, i64 0 }, { ptr, i64, i64 } %t322) + store { ptr, i64, i64 } %t323, ptr %a324 + %t325 = load ptr, ptr %a1 + %t326 = load { ptr, i64, i64 }, ptr %a3 + %t327 = call { ptr, i64, i64 } @finch.gen.load(ptr %t325, { ptr, i64, i64 } { ptr @.str.5714, i64 3, i64 0 }, { ptr, i64, i64 } %t326) + store { ptr, i64, i64 } %t327, ptr %a328 + %t329 = load ptr, ptr %a1 + %t330 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t329, { ptr, i64, i64 } { ptr @.str.5715, i64 3, i64 0 }) + store { ptr, i64, i64 } %t330, ptr %a331 + %t332 = load ptr, ptr %a1 + %t333 = load { ptr, i64, i64 }, ptr %a331 + call void @finch.gen.store(ptr %t332, { ptr, i64, i64 } { ptr @.str.5716, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5717, i64 1, i64 0 }, { ptr, i64, i64 } %t333) + %t334 = load ptr, ptr %a1 + %t335 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t334, { ptr, i64, i64 } { ptr @.str.5718, i64 9, i64 0 }) + store { ptr, i64, i64 } %t335, ptr %a336 + %t337 = load ptr, ptr %a1 + %t338 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t337, { ptr, i64, i64 } { ptr @.str.5719, i64 9, i64 0 }) + store { ptr, i64, i64 } %t338, ptr %a339 + %t340 = load ptr, ptr %a1 + %t341 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t340, { ptr, i64, i64 } { ptr @.str.5720, i64 8, i64 0 }) + store { ptr, i64, i64 } %t341, ptr %a342 + %t343 = load ptr, ptr %a1 + %t344 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t343, { ptr, i64, i64 } { ptr @.str.5721, i64 9, i64 0 }) + store { ptr, i64, i64 } %t344, ptr %a345 + %t346 = load ptr, ptr %a1 + %t347 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t346, { ptr, i64, i64 } { ptr @.str.5722, i64 8, i64 0 }) + store { ptr, i64, i64 } %t347, ptr %a348 + %t349 = load ptr, ptr %a1 + %t350 = load { ptr, i64, i64 }, ptr %a336 + call void @finch.gen.br(ptr %t349, { ptr, i64, i64 } %t350) + %t351 = load ptr, ptr %a1 + %t352 = load { ptr, i64, i64 }, ptr %a336 + call void @finch.gen.label(ptr %t351, { ptr, i64, i64 } %t352) + %t353 = load ptr, ptr %a1 + %t354 = load { ptr, i64, i64 }, ptr %a331 + %t355 = call { ptr, i64, i64 } @finch.gen.load(ptr %t353, { ptr, i64, i64 } { ptr @.str.5723, i64 3, i64 0 }, { ptr, i64, i64 } %t354) + store { ptr, i64, i64 } %t355, ptr %a356 + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.5724, i64 13, i64 0 }, ptr %a360 + store { ptr, i64, i64 } %t358, ptr %a361 + call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) + %t362 = load { ptr, i64, i64 }, ptr %a359 + store { ptr, i64, i64 } %t362, ptr %a364 + store { ptr, i64, i64 } { ptr @.str.5725, i64 2, i64 0 }, ptr %a365 + call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) + store { ptr, i64, i64 } %t362, ptr %a366 + call void @finch_str_drop(ptr %a366) + %t367 = load { ptr, i64, i64 }, ptr %a363 + %t368 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t367, ptr %a370 + store { ptr, i64, i64 } %t368, ptr %a371 + call void @finch_str_concat(ptr %a369, ptr %a370, ptr %a371) + store { ptr, i64, i64 } %t367, ptr %a372 + call void @finch_str_drop(ptr %a372) + %t373 = load { ptr, i64, i64 }, ptr %a369 + %t374 = call { ptr, i64, i64 } @finch.gen.op(ptr %t357, { ptr, i64, i64 } %t373) + store { ptr, i64, i64 } %t373, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t374, ptr %a376 + %t377 = load ptr, ptr %a1 + %t378 = load { ptr, i64, i64 }, ptr %a376 + %t379 = load { ptr, i64, i64 }, ptr %a339 + %t380 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.gen.condBr(ptr %t377, { ptr, i64, i64 } %t378, { ptr, i64, i64 } %t379, { ptr, i64, i64 } %t380) + %t381 = load ptr, ptr %a1 + %t382 = load { ptr, i64, i64 }, ptr %a339 + call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) + %t383 = load ptr, ptr %a1 + %t384 = load { ptr, i64, i64 }, ptr %a19 + %t385 = load ptr, ptr %a1 + %t386 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5726, i64 23, i64 0 }, ptr %a388 + store { ptr, i64, i64 } %t386, ptr %a389 + call void @finch_str_concat(ptr %a387, ptr %a388, ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a387 + store { ptr, i64, i64 } %t390, ptr %a392 + store { ptr, i64, i64 } { ptr @.str.5727, i64 6, i64 0 }, ptr %a393 + call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) + store { ptr, i64, i64 } %t390, ptr %a394 + call void @finch_str_drop(ptr %a394) + %t395 = load { ptr, i64, i64 }, ptr %a391 + %t396 = load { ptr, i64, i64 }, ptr %a328 + store { ptr, i64, i64 } %t395, ptr %a398 + store { ptr, i64, i64 } %t396, ptr %a399 + call void @finch_str_concat(ptr %a397, ptr %a398, ptr %a399) + store { ptr, i64, i64 } %t395, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = load { ptr, i64, i64 }, ptr %a397 + store { ptr, i64, i64 } %t401, ptr %a403 + store { ptr, i64, i64 } { ptr @.str.5728, i64 6, i64 0 }, ptr %a404 + call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) + store { ptr, i64, i64 } %t401, ptr %a405 + call void @finch_str_drop(ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a402 + %t407 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } %t406, ptr %a409 + store { ptr, i64, i64 } %t407, ptr %a410 + call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410) + store { ptr, i64, i64 } %t406, ptr %a411 + call void @finch_str_drop(ptr %a411) + %t412 = load { ptr, i64, i64 }, ptr %a408 + %t413 = call { ptr, i64, i64 } @finch.gen.op(ptr %t385, { ptr, i64, i64 } %t412) + store { ptr, i64, i64 } %t412, ptr %a414 + call void @finch_str_drop(ptr %a414) + %t415 = call { ptr, i64, i64 } @finch.gen.load(ptr %t383, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t413) + store { ptr, i64, i64 } %t413, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t415, 0 + %t418 = load %S.ast.Type, ptr %a15 + store %S.ast.Type %t418, ptr %a419 + call void @finch.copy.S_ast_Type(ptr %a420, ptr %a419) + %t421 = load %S.ast.Type, ptr %a420 + %t422 = insertvalue %S.gen.Val %t417, %S.ast.Type %t421, 1 + store %S.gen.Val %t422, ptr %a423 + %t424 = load ptr, ptr %a1 + %t425 = load %S.gen.Val, ptr %a423 + %t426 = getelementptr inbounds %S.gen.Val, ptr %a315, i32 0, i32 0 + %t427 = load { ptr, i64, i64 }, ptr %t426 + store { ptr, i64, i64 } %t427, ptr %a428 + call void @finch_str_copy(ptr %a429, ptr %a428) + %t430 = load { ptr, i64, i64 }, ptr %a429 + %t431 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t430, 0 + %t432 = getelementptr inbounds %S.gen.Val, ptr %a315, i32 0, i32 1 + %t433 = load %S.ast.Type, ptr %t432 + store %S.ast.Type %t433, ptr %a434 + call void @finch.copy.S_ast_Type(ptr %a435, ptr %a434) + %t436 = load %S.ast.Type, ptr %a435 + %t437 = insertvalue %S.gen.Val %t431, %S.ast.Type %t436, 1 + %t438 = load %S.ast.Node, ptr %a2 + %t439 = call %S.gen.Val @finch.gen.compare(ptr %t424, { ptr, i64, i64 } { ptr @.str.5729, i64 2, i64 0 }, %S.gen.Val %t425, %S.gen.Val %t437, %S.ast.Node %t438) + store %S.gen.Val %t437, ptr %a440 + call void @finch.drop.S_gen_Val(ptr %a440) + %t441 = extractvalue %S.gen.Val %t439, 0 + store { ptr, i64, i64 } %t441, ptr %a442 + call void @finch_str_copy(ptr %a443, ptr %a442) + %t444 = load { ptr, i64, i64 }, ptr %a443 + store %S.gen.Val %t439, ptr %a445 + call void @finch.drop.S_gen_Val(ptr %a445) + store { ptr, i64, i64 } %t444, ptr %a446 + %t447 = load ptr, ptr %a1 + %t448 = load { ptr, i64, i64 }, ptr %a446 + %t449 = load { ptr, i64, i64 }, ptr %a342 + %t450 = load { ptr, i64, i64 }, ptr %a345 + call void @finch.gen.condBr(ptr %t447, { ptr, i64, i64 } %t448, { ptr, i64, i64 } %t449, { ptr, i64, i64 } %t450) + %t451 = load ptr, ptr %a1 + %t452 = load { ptr, i64, i64 }, ptr %a342 + call void @finch.gen.label(ptr %t451, { ptr, i64, i64 } %t452) + %t453 = load ptr, ptr %a1 + %t454 = load { ptr, i64, i64 }, ptr %a356 + %t455 = load { ptr, i64, i64 }, ptr %a318 + call void @finch.gen.store(ptr %t453, { ptr, i64, i64 } { ptr @.str.5730, i64 3, i64 0 }, { ptr, i64, i64 } %t454, { ptr, i64, i64 } %t455) + %t456 = load ptr, ptr %a1 + %t457 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.gen.br(ptr %t456, { ptr, i64, i64 } %t457) + %t458 = load ptr, ptr %a1 + %t459 = load { ptr, i64, i64 }, ptr %a345 + call void @finch.gen.label(ptr %t458, { ptr, i64, i64 } %t459) + %t460 = load ptr, ptr %a1 + %t461 = load ptr, ptr %a1 + %t462 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.5732, i64 8, i64 0 }, ptr %a464 + store { ptr, i64, i64 } %t462, ptr %a465 + call void @finch_str_concat(ptr %a463, ptr %a464, ptr %a465) + %t466 = load { ptr, i64, i64 }, ptr %a463 + store { ptr, i64, i64 } %t466, ptr %a468 + store { ptr, i64, i64 } { ptr @.str.5733, i64 3, i64 0 }, ptr %a469 + call void @finch_str_concat(ptr %a467, ptr %a468, ptr %a469) + store { ptr, i64, i64 } %t466, ptr %a470 + call void @finch_str_drop(ptr %a470) + %t471 = load { ptr, i64, i64 }, ptr %a467 + %t472 = call { ptr, i64, i64 } @finch.gen.op(ptr %t461, { ptr, i64, i64 } %t471) + store { ptr, i64, i64 } %t471, ptr %a473 + call void @finch_str_drop(ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a331 + call void @finch.gen.store(ptr %t460, { ptr, i64, i64 } { ptr @.str.5731, i64 3, i64 0 }, { ptr, i64, i64 } %t472, { ptr, i64, i64 } %t474) + store { ptr, i64, i64 } %t472, ptr %a475 + call void @finch_str_drop(ptr %a475) + %t476 = load ptr, ptr %a1 + %t477 = load { ptr, i64, i64 }, ptr %a336 + call void @finch.gen.br(ptr %t476, { ptr, i64, i64 } %t477) + %t478 = load ptr, ptr %a1 + %t479 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.gen.label(ptr %t478, { ptr, i64, i64 } %t479) + %t480 = load ptr, ptr %a1 + %t481 = load %S.gen.Val, ptr %a315 + call void @finch.gen.release(ptr %t480, %S.gen.Val %t481) + %t482 = load ptr, ptr %a1 + %t483 = load { ptr, i64, i64 }, ptr %a318 + %t484 = call { ptr, i64, i64 } @finch.gen.load(ptr %t482, { ptr, i64, i64 } { ptr @.str.5734, i64 3, i64 0 }, { ptr, i64, i64 } %t483) + store { ptr, i64, i64 } %t484, ptr %a485 + %t486 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t486, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.5735, i64 4, i64 0 }, ptr %a488 + %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) + %t490 = icmp ne i32 %t489, 0 + br i1 %t490, label %then8890, label %endif8892 +then8890: + %t491 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } %t491, ptr %a492 + call void @finch_str_copy(ptr %a493, ptr %a492) + %t494 = load { ptr, i64, i64 }, ptr %a493 + %t495 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t494, 0 + %t496 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5736, i64 3, i64 0 }) + %t497 = insertvalue %S.gen.Val %t495, %S.ast.Type %t496, 1 + call void @finch_str_drop(ptr %a485) + call void @finch_str_drop(ptr %a446) + call void @finch.drop.S_gen_Val(ptr %a423) + call void @finch_str_drop(ptr %a376) + call void @finch_str_drop(ptr %a356) + call void @finch_str_drop(ptr %a348) + call void @finch_str_drop(ptr %a345) + call void @finch_str_drop(ptr %a342) + call void @finch_str_drop(ptr %a339) + call void @finch_str_drop(ptr %a336) + call void @finch_str_drop(ptr %a331) + call void @finch_str_drop(ptr %a328) + call void @finch_str_drop(ptr %a324) + call void @finch_str_drop(ptr %a318) + call void @finch.drop.S_gen_Val(ptr %a315) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t497 +endif8892: + %t498 = load ptr, ptr %a1 + %t499 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.5737, i64 13, i64 0 }, ptr %a501 + store { ptr, i64, i64 } %t499, ptr %a502 + call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) + %t503 = load { ptr, i64, i64 }, ptr %a500 + store { ptr, i64, i64 } %t503, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.5738, i64 3, i64 0 }, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t503, ptr %a507 + call void @finch_str_drop(ptr %a507) + %t508 = load { ptr, i64, i64 }, ptr %a504 + %t509 = call { ptr, i64, i64 } @finch.gen.op(ptr %t498, { ptr, i64, i64 } %t508) + store { ptr, i64, i64 } %t508, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t509, 0 + %t512 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5739, i64 4, i64 0 }) + %t513 = insertvalue %S.gen.Val %t511, %S.ast.Type %t512, 1 + call void @finch_str_drop(ptr %a485) + call void @finch_str_drop(ptr %a446) + call void @finch.drop.S_gen_Val(ptr %a423) + call void @finch_str_drop(ptr %a376) + call void @finch_str_drop(ptr %a356) + call void @finch_str_drop(ptr %a348) + call void @finch_str_drop(ptr %a345) + call void @finch_str_drop(ptr %a342) + call void @finch_str_drop(ptr %a339) + call void @finch_str_drop(ptr %a336) + call void @finch_str_drop(ptr %a331) + call void @finch_str_drop(ptr %a328) + call void @finch_str_drop(ptr %a324) + call void @finch_str_drop(ptr %a318) + call void @finch.drop.S_gen_Val(ptr %a315) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t513 +endif8885: + %t514 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t514, ptr %a515 + store { ptr, i64, i64 } { ptr @.str.5740, i64 4, i64 0 }, ptr %a516 + %t517 = call i32 @finch_str_eq(ptr %a515, ptr %a516) + %t518 = icmp ne i32 %t517, 0 + br i1 %t518, label %then8893, label %endif8895 +then8893: + %t519 = load ptr, ptr %a1 + %t520 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t519, %S.ast.Node %t520, i64 1) + %t521 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 + %t522 = load { ptr, i64, i64 }, ptr %t521 + store { ptr, i64, i64 } %t522, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.5741, i64 3, i64 0 }, ptr %a524 + %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) + %t526 = icmp eq i32 %t525, 0 + br i1 %t526, label %then8896, label %endif8898 +then8896: + %t527 = load ptr, ptr %a1 + %t528 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t527, %S.ast.Node %t528, { ptr, i64, i64 } { ptr @.str.5742, i64 31, i64 0 }) + br label %endif8898 +endif8898: + %t529 = load ptr, ptr %a1 + %t530 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t531 = load { ptr, i64, i64 }, ptr %t530 + %t532 = extractvalue { ptr, i64, i64 } %t531, 1 + %t533 = icmp uge i64 1, %t532 + br i1 %t533, label %range8899, label %inrange8900 +range8899: + call void @finch_panic_index(ptr @.str.5743, i64 5477, i64 1, i64 %t532) + unreachable +inrange8900: + %t534 = extractvalue { ptr, i64, i64 } %t531, 0 + %t535 = getelementptr inbounds %S.ast.Node, ptr %t534, i64 1 + %t536 = load %S.ast.Node, ptr %t535 + %t537 = call %S.gen.Val @finch.gen.strArg(ptr %t529, %S.ast.Node %t536, { ptr, i64, i64 } { ptr @.str.5744, i64 13, i64 0 }) + store %S.gen.Val %t537, ptr %a538 + %t539 = load ptr, ptr %a1 + %t540 = load %S.gen.Val, ptr %a538 + %t541 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t539, %S.gen.Val %t540) + store { ptr, i64, i64 } %t541, ptr %a542 + %t543 = load ptr, ptr %a1 + %t544 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t543) + store { ptr, i64, i64 } %t544, ptr %a545 + %t546 = load ptr, ptr %a1 + %t547 = load { ptr, i64, i64 }, ptr %a545 + store { ptr, i64, i64 } { ptr @.str.5745, i64 30, i64 0 }, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t551, ptr %a553 + store { ptr, i64, i64 } { ptr @.str.5746, i64 6, i64 0 }, ptr %a554 + call void @finch_str_concat(ptr %a552, ptr %a553, ptr %a554) + store { ptr, i64, i64 } %t551, ptr %a555 + call void @finch_str_drop(ptr %a555) + %t556 = load { ptr, i64, i64 }, ptr %a552 + %t557 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t556, ptr %a559 + store { ptr, i64, i64 } %t557, ptr %a560 + call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) + store { ptr, i64, i64 } %t556, ptr %a561 + call void @finch_str_drop(ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a558 + store { ptr, i64, i64 } %t562, ptr %a564 + store { ptr, i64, i64 } { ptr @.str.5747, i64 6, i64 0 }, ptr %a565 + call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) + store { ptr, i64, i64 } %t562, ptr %a566 + call void @finch_str_drop(ptr %a566) + %t567 = load { ptr, i64, i64 }, ptr %a563 + %t568 = load { ptr, i64, i64 }, ptr %a542 + store { ptr, i64, i64 } %t567, ptr %a570 + store { ptr, i64, i64 } %t568, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + store { ptr, i64, i64 } %t567, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a569 + store { ptr, i64, i64 } %t573, ptr %a575 + store { ptr, i64, i64 } { ptr @.str.5748, i64 1, i64 0 }, ptr %a576 + call void @finch_str_concat(ptr %a574, ptr %a575, ptr %a576) + store { ptr, i64, i64 } %t573, ptr %a577 + call void @finch_str_drop(ptr %a577) + %t578 = load { ptr, i64, i64 }, ptr %a574 + call void @finch.gen.emit(ptr %t546, { ptr, i64, i64 } %t578) + store { ptr, i64, i64 } %t578, ptr %a579 + call void @finch_str_drop(ptr %a579) + %t580 = load ptr, ptr %a1 + %t581 = load %S.gen.Val, ptr %a538 + call void @finch.gen.release(ptr %t580, %S.gen.Val %t581) + %t582 = load ptr, ptr %a1 + %t583 = load { ptr, i64, i64 }, ptr %a545 + %t584 = call { ptr, i64, i64 } @finch.gen.load(ptr %t582, { ptr, i64, i64 } { ptr @.str.5749, i64 17, i64 0 }, { ptr, i64, i64 } %t583) + %t585 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t584, 0 + %t586 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5750, i64 3, i64 0 }) + %t587 = insertvalue %S.gen.Val %t585, %S.ast.Type %t586, 1 + %t588 = insertvalue %S.gen.Val %t587, i1 true, 2 + call void @finch_str_drop(ptr %a545) + call void @finch_str_drop(ptr %a542) + call void @finch.drop.S_gen_Val(ptr %a538) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t588 +endif8895: + %t589 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t589, ptr %a590 + store { ptr, i64, i64 } { ptr @.str.5751, i64 6, i64 0 }, ptr %a591 + %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) + %t593 = icmp ne i32 %t592, 0 + br i1 %t593, label %then8901, label %endif8903 +then8901: + %t594 = load ptr, ptr %a1 + %t595 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t594, %S.ast.Node %t595, i64 2) + %t596 = load ptr, ptr %a1 + %t597 = load ptr, ptr %a1 + %t598 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t599 = load { ptr, i64, i64 }, ptr %t598 + %t600 = extractvalue { ptr, i64, i64 } %t599, 1 + %t601 = icmp uge i64 1, %t600 + br i1 %t601, label %range8904, label %inrange8905 +range8904: + call void @finch_panic_index(ptr @.str.5752, i64 5486, i64 1, i64 %t600) + unreachable +inrange8905: + %t602 = extractvalue { ptr, i64, i64 } %t599, 0 + %t603 = getelementptr inbounds %S.ast.Node, ptr %t602, i64 1 + %t604 = load %S.ast.Node, ptr %t603 + %t605 = call %S.gen.Val @finch.gen.expr(ptr %t597, %S.ast.Node %t604) + %t606 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5753, i64 3, i64 0 }) + %t607 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t608 = load { ptr, i64, i64 }, ptr %t607 + %t609 = extractvalue { ptr, i64, i64 } %t608, 1 + %t610 = icmp uge i64 1, %t609 + br i1 %t610, label %range8906, label %inrange8907 +range8906: + call void @finch_panic_index(ptr @.str.5754, i64 5486, i64 1, i64 %t609) + unreachable +inrange8907: + %t611 = extractvalue { ptr, i64, i64 } %t608, 0 + %t612 = getelementptr inbounds %S.ast.Node, ptr %t611, i64 1 + %t613 = load %S.ast.Node, ptr %t612 + %t614 = call %S.gen.Val @finch.gen.coerce(ptr %t596, %S.gen.Val %t605, %S.ast.Type %t606, %S.ast.Node %t613, { ptr, i64, i64 } { ptr @.str.5755, i64 12, i64 0 }) + store %S.gen.Val %t605, ptr %a615 + call void @finch.drop.S_gen_Val(ptr %a615) + store %S.ast.Type %t606, ptr %a616 + call void @finch.drop.S_ast_Type(ptr %a616) + %t617 = extractvalue %S.gen.Val %t614, 0 + store { ptr, i64, i64 } %t617, ptr %a618 + call void @finch_str_copy(ptr %a619, ptr %a618) + %t620 = load { ptr, i64, i64 }, ptr %a619 + store %S.gen.Val %t614, ptr %a621 + call void @finch.drop.S_gen_Val(ptr %a621) + store { ptr, i64, i64 } %t620, ptr %a622 + %t623 = load ptr, ptr %a1 + %t624 = load ptr, ptr %a1 + %t625 = load ptr, ptr %a1 + %t626 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t627 = load { ptr, i64, i64 }, ptr %t626 + %t628 = extractvalue { ptr, i64, i64 } %t627, 1 + %t629 = icmp uge i64 2, %t628 + br i1 %t629, label %range8908, label %inrange8909 +range8908: + call void @finch_panic_index(ptr @.str.5756, i64 5487, i64 2, i64 %t628) + unreachable +inrange8909: + %t630 = extractvalue { ptr, i64, i64 } %t627, 0 + %t631 = getelementptr inbounds %S.ast.Node, ptr %t630, i64 2 + %t632 = load %S.ast.Node, ptr %t631 + %t633 = load %S.ast.Type, ptr %a15 + %t634 = call %S.gen.Val @finch.gen.exprWant(ptr %t625, %S.ast.Node %t632, %S.ast.Type %t633) + %t635 = load %S.ast.Type, ptr %a15 + %t636 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t637 = load { ptr, i64, i64 }, ptr %t636 + %t638 = extractvalue { ptr, i64, i64 } %t637, 1 + %t639 = icmp uge i64 2, %t638 + br i1 %t639, label %range8910, label %inrange8911 +range8910: + call void @finch_panic_index(ptr @.str.5757, i64 5487, i64 2, i64 %t638) + unreachable +inrange8911: + %t640 = extractvalue { ptr, i64, i64 } %t637, 0 + %t641 = getelementptr inbounds %S.ast.Node, ptr %t640, i64 2 + %t642 = load %S.ast.Node, ptr %t641 + %t643 = call %S.gen.Val @finch.gen.coerce(ptr %t624, %S.gen.Val %t634, %S.ast.Type %t635, %S.ast.Node %t642, { ptr, i64, i64 } { ptr @.str.5758, i64 11, i64 0 }) + store %S.gen.Val %t634, ptr %a644 + call void @finch.drop.S_gen_Val(ptr %a644) + %t645 = call { ptr, i64, i64 } @finch.gen.own(ptr %t623, %S.gen.Val %t643) + store %S.gen.Val %t643, ptr %a646 + call void @finch.drop.S_gen_Val(ptr %a646) + store { ptr, i64, i64 } %t645, ptr %a647 + %t648 = load ptr, ptr %a1 + %t649 = load ptr, ptr %a1 + %t650 = icmp eq ptr %t649, null + br i1 %t650, label %panic8912, label %ok8913 +panic8912: + call void @finch_panic(ptr @.str.5759, i64 5488, ptr @.str.5760) + unreachable +ok8913: + %t651 = getelementptr inbounds %S.gen.Gen, ptr %t649, i32 0, i32 1 + %t652 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t653 = load i64, ptr %t652 + %t654 = load { ptr, i64, i64 }, ptr %t651 + %t655 = extractvalue { ptr, i64, i64 } %t654, 1 + %t656 = icmp uge i64 %t653, %t655 + br i1 %t656, label %range8914, label %inrange8915 +range8914: + call void @finch_panic_index(ptr @.str.5761, i64 5488, i64 %t653, i64 %t655) + unreachable +inrange8915: + %t657 = extractvalue { ptr, i64, i64 } %t654, 0 + %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i64 %t653 + %t659 = load { ptr, i64, i64 }, ptr %t658 + %t660 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t648, { ptr, i64, i64 } %t659) + store { ptr, i64, i64 } %t660, ptr %a661 + %t662 = load ptr, ptr %a1 + %t663 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5762, i64 36, i64 0 }, ptr %a665 + store { ptr, i64, i64 } %t663, ptr %a666 + call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) + %t667 = load { ptr, i64, i64 }, ptr %a664 + store { ptr, i64, i64 } %t667, ptr %a669 + store { ptr, i64, i64 } { ptr @.str.5763, i64 6, i64 0 }, ptr %a670 + call void @finch_str_concat(ptr %a668, ptr %a669, ptr %a670) + store { ptr, i64, i64 } %t667, ptr %a671 + call void @finch_str_drop(ptr %a671) + %t672 = load { ptr, i64, i64 }, ptr %a668 + %t673 = load { ptr, i64, i64 }, ptr %a622 + store { ptr, i64, i64 } %t672, ptr %a675 + store { ptr, i64, i64 } %t673, ptr %a676 + call void @finch_str_concat(ptr %a674, ptr %a675, ptr %a676) + store { ptr, i64, i64 } %t672, ptr %a677 + call void @finch_str_drop(ptr %a677) + %t678 = load { ptr, i64, i64 }, ptr %a674 + store { ptr, i64, i64 } %t678, ptr %a680 + store { ptr, i64, i64 } { ptr @.str.5764, i64 6, i64 0 }, ptr %a681 + call void @finch_str_concat(ptr %a679, ptr %a680, ptr %a681) + store { ptr, i64, i64 } %t678, ptr %a682 + call void @finch_str_drop(ptr %a682) + %t683 = load { ptr, i64, i64 }, ptr %a679 + %t684 = load ptr, ptr %a1 + %t685 = load %S.ast.Type, ptr %a15 + %t686 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t684, %S.ast.Type %t685) + store { ptr, i64, i64 } %t683, ptr %a688 + store { ptr, i64, i64 } %t686, ptr %a689 + call void @finch_str_concat(ptr %a687, ptr %a688, ptr %a689) + store { ptr, i64, i64 } %t683, ptr %a690 + call void @finch_str_drop(ptr %a690) + store { ptr, i64, i64 } %t686, ptr %a691 + call void @finch_str_drop(ptr %a691) + %t692 = load { ptr, i64, i64 }, ptr %a687 + store { ptr, i64, i64 } %t692, ptr %a694 + store { ptr, i64, i64 } { ptr @.str.5765, i64 6, i64 0 }, ptr %a695 + call void @finch_str_concat(ptr %a693, ptr %a694, ptr %a695) + store { ptr, i64, i64 } %t692, ptr %a696 + call void @finch_str_drop(ptr %a696) + %t697 = load { ptr, i64, i64 }, ptr %a693 + %t698 = load { ptr, i64, i64 }, ptr %a661 + store { ptr, i64, i64 } %t697, ptr %a700 + store { ptr, i64, i64 } %t698, ptr %a701 + call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) + store { ptr, i64, i64 } %t697, ptr %a702 + call void @finch_str_drop(ptr %a702) + %t703 = load { ptr, i64, i64 }, ptr %a699 + store { ptr, i64, i64 } %t703, ptr %a705 + store { ptr, i64, i64 } { ptr @.str.5766, i64 6, i64 0 }, ptr %a706 + call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) + store { ptr, i64, i64 } %t703, ptr %a707 + call void @finch_str_drop(ptr %a707) + %t708 = load { ptr, i64, i64 }, ptr %a704 + %t709 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t710 = load i64, ptr %t709 + call void @finch_str_from_int(ptr %a711, i64 %t710) + %t712 = load { ptr, i64, i64 }, ptr %a711 + store { ptr, i64, i64 } %t708, ptr %a714 + store { ptr, i64, i64 } %t712, ptr %a715 + call void @finch_str_concat(ptr %a713, ptr %a714, ptr %a715) + store { ptr, i64, i64 } %t708, ptr %a716 + call void @finch_str_drop(ptr %a716) + store { ptr, i64, i64 } %t712, ptr %a717 + call void @finch_str_drop(ptr %a717) + %t718 = load { ptr, i64, i64 }, ptr %a713 + store { ptr, i64, i64 } %t718, ptr %a720 + store { ptr, i64, i64 } { ptr @.str.5767, i64 1, i64 0 }, ptr %a721 + call void @finch_str_concat(ptr %a719, ptr %a720, ptr %a721) + store { ptr, i64, i64 } %t718, ptr %a722 + call void @finch_str_drop(ptr %a722) + %t723 = load { ptr, i64, i64 }, ptr %a719 + call void @finch.gen.emit(ptr %t662, { ptr, i64, i64 } %t723) + store { ptr, i64, i64 } %t723, ptr %a724 + call void @finch_str_drop(ptr %a724) + %t725 = load ptr, ptr %a1 + %t726 = load { ptr, i64, i64 }, ptr %a3 + %t727 = call { ptr, i64, i64 } @finch.gen.load(ptr %t725, { ptr, i64, i64 } { ptr @.str.5768, i64 3, i64 0 }, { ptr, i64, i64 } %t726) + store { ptr, i64, i64 } %t727, ptr %a728 + %t729 = load ptr, ptr %a1 + %t730 = load { ptr, i64, i64 }, ptr %a19 + %t731 = load { ptr, i64, i64 }, ptr %a647 + %t732 = load ptr, ptr %a1 + %t733 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5769, i64 23, i64 0 }, ptr %a735 + store { ptr, i64, i64 } %t733, ptr %a736 + call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) + %t737 = load { ptr, i64, i64 }, ptr %a734 + store { ptr, i64, i64 } %t737, ptr %a739 + store { ptr, i64, i64 } { ptr @.str.5770, i64 6, i64 0 }, ptr %a740 + call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) + store { ptr, i64, i64 } %t737, ptr %a741 + call void @finch_str_drop(ptr %a741) + %t742 = load { ptr, i64, i64 }, ptr %a738 + %t743 = load { ptr, i64, i64 }, ptr %a728 + store { ptr, i64, i64 } %t742, ptr %a745 + store { ptr, i64, i64 } %t743, ptr %a746 + call void @finch_str_concat(ptr %a744, ptr %a745, ptr %a746) + store { ptr, i64, i64 } %t742, ptr %a747 + call void @finch_str_drop(ptr %a747) + %t748 = load { ptr, i64, i64 }, ptr %a744 + store { ptr, i64, i64 } %t748, ptr %a750 + store { ptr, i64, i64 } { ptr @.str.5771, i64 6, i64 0 }, ptr %a751 + call void @finch_str_concat(ptr %a749, ptr %a750, ptr %a751) + store { ptr, i64, i64 } %t748, ptr %a752 + call void @finch_str_drop(ptr %a752) + %t753 = load { ptr, i64, i64 }, ptr %a749 + %t754 = load { ptr, i64, i64 }, ptr %a622 + store { ptr, i64, i64 } %t753, ptr %a756 + store { ptr, i64, i64 } %t754, ptr %a757 + call void @finch_str_concat(ptr %a755, ptr %a756, ptr %a757) + store { ptr, i64, i64 } %t753, ptr %a758 + call void @finch_str_drop(ptr %a758) + %t759 = load { ptr, i64, i64 }, ptr %a755 + %t760 = call { ptr, i64, i64 } @finch.gen.op(ptr %t732, { ptr, i64, i64 } %t759) + store { ptr, i64, i64 } %t759, ptr %a761 + call void @finch_str_drop(ptr %a761) + call void @finch.gen.store(ptr %t729, { ptr, i64, i64 } %t730, { ptr, i64, i64 } %t731, { ptr, i64, i64 } %t760) + store { ptr, i64, i64 } %t760, ptr %a762 + call void @finch_str_drop(ptr %a762) + %t763 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5772, i64 4, i64 0 }) + %t764 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t763, 1 + call void @finch_str_drop(ptr %a728) + call void @finch_str_drop(ptr %a661) + call void @finch_str_drop(ptr %a647) + call void @finch_str_drop(ptr %a622) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t764 +endif8903: + %t765 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t765, ptr %a766 + store { ptr, i64, i64 } { ptr @.str.5773, i64 6, i64 0 }, ptr %a767 + %t768 = call i32 @finch_str_eq(ptr %a766, ptr %a767) + %t769 = icmp ne i32 %t768, 0 + br i1 %t769, label %then8916, label %endif8918 +then8916: + %t770 = load ptr, ptr %a1 + %t771 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t770, %S.ast.Node %t771, i64 1) + %t772 = load ptr, ptr %a1 + %t773 = load ptr, ptr %a1 + %t774 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t775 = load { ptr, i64, i64 }, ptr %t774 + %t776 = extractvalue { ptr, i64, i64 } %t775, 1 + %t777 = icmp uge i64 1, %t776 + br i1 %t777, label %range8919, label %inrange8920 +range8919: + call void @finch_panic_index(ptr @.str.5774, i64 5496, i64 1, i64 %t776) + unreachable +inrange8920: + %t778 = extractvalue { ptr, i64, i64 } %t775, 0 + %t779 = getelementptr inbounds %S.ast.Node, ptr %t778, i64 1 + %t780 = load %S.ast.Node, ptr %t779 + %t781 = call %S.gen.Val @finch.gen.expr(ptr %t773, %S.ast.Node %t780) + %t782 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5775, i64 3, i64 0 }) + %t783 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t784 = load { ptr, i64, i64 }, ptr %t783 + %t785 = extractvalue { ptr, i64, i64 } %t784, 1 + %t786 = icmp uge i64 1, %t785 + br i1 %t786, label %range8921, label %inrange8922 +range8921: + call void @finch_panic_index(ptr @.str.5776, i64 5496, i64 1, i64 %t785) + unreachable +inrange8922: + %t787 = extractvalue { ptr, i64, i64 } %t784, 0 + %t788 = getelementptr inbounds %S.ast.Node, ptr %t787, i64 1 + %t789 = load %S.ast.Node, ptr %t788 + %t790 = call %S.gen.Val @finch.gen.coerce(ptr %t772, %S.gen.Val %t781, %S.ast.Type %t782, %S.ast.Node %t789, { ptr, i64, i64 } { ptr @.str.5777, i64 12, i64 0 }) + store %S.gen.Val %t781, ptr %a791 + call void @finch.drop.S_gen_Val(ptr %a791) + store %S.ast.Type %t782, ptr %a792 + call void @finch.drop.S_ast_Type(ptr %a792) + %t793 = extractvalue %S.gen.Val %t790, 0 + store { ptr, i64, i64 } %t793, ptr %a794 + call void @finch_str_copy(ptr %a795, ptr %a794) + %t796 = load { ptr, i64, i64 }, ptr %a795 + store %S.gen.Val %t790, ptr %a797 + call void @finch.drop.S_gen_Val(ptr %a797) + store { ptr, i64, i64 } %t796, ptr %a798 + %t799 = load ptr, ptr %a1 + %t800 = load { ptr, i64, i64 }, ptr %a798 + %t801 = load ptr, ptr %a1 + %t802 = load { ptr, i64, i64 }, ptr %a39 + %t803 = call { ptr, i64, i64 } @finch.gen.load(ptr %t801, { ptr, i64, i64 } { ptr @.str.5778, i64 3, i64 0 }, { ptr, i64, i64 } %t802) + %t804 = load %S.ast.Node, ptr %a2 + call void @finch.gen.boundsCheck(ptr %t799, { ptr, i64, i64 } %t800, { ptr, i64, i64 } %t803, %S.ast.Node %t804) + store { ptr, i64, i64 } %t803, ptr %a805 + call void @finch_str_drop(ptr %a805) + %t806 = load ptr, ptr %a1 + %t807 = load { ptr, i64, i64 }, ptr %a3 + %t808 = call { ptr, i64, i64 } @finch.gen.load(ptr %t806, { ptr, i64, i64 } { ptr @.str.5779, i64 3, i64 0 }, { ptr, i64, i64 } %t807) + store { ptr, i64, i64 } %t808, ptr %a809 + %t810 = load ptr, ptr %a1 + %t811 = load { ptr, i64, i64 }, ptr %a19 + %t812 = load ptr, ptr %a1 + %t813 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5780, i64 23, i64 0 }, ptr %a815 + store { ptr, i64, i64 } %t813, ptr %a816 + call void @finch_str_concat(ptr %a814, ptr %a815, ptr %a816) + %t817 = load { ptr, i64, i64 }, ptr %a814 + store { ptr, i64, i64 } %t817, ptr %a819 + store { ptr, i64, i64 } { ptr @.str.5781, i64 6, i64 0 }, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t817, ptr %a821 + call void @finch_str_drop(ptr %a821) + %t822 = load { ptr, i64, i64 }, ptr %a818 + %t823 = load { ptr, i64, i64 }, ptr %a809 + store { ptr, i64, i64 } %t822, ptr %a825 + store { ptr, i64, i64 } %t823, ptr %a826 + call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) + store { ptr, i64, i64 } %t822, ptr %a827 + call void @finch_str_drop(ptr %a827) + %t828 = load { ptr, i64, i64 }, ptr %a824 + store { ptr, i64, i64 } %t828, ptr %a830 + store { ptr, i64, i64 } { ptr @.str.5782, i64 6, i64 0 }, ptr %a831 + call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) + store { ptr, i64, i64 } %t828, ptr %a832 + call void @finch_str_drop(ptr %a832) + %t833 = load { ptr, i64, i64 }, ptr %a829 + %t834 = load { ptr, i64, i64 }, ptr %a798 + store { ptr, i64, i64 } %t833, ptr %a836 + store { ptr, i64, i64 } %t834, ptr %a837 + call void @finch_str_concat(ptr %a835, ptr %a836, ptr %a837) + store { ptr, i64, i64 } %t833, ptr %a838 + call void @finch_str_drop(ptr %a838) + %t839 = load { ptr, i64, i64 }, ptr %a835 + %t840 = call { ptr, i64, i64 } @finch.gen.op(ptr %t812, { ptr, i64, i64 } %t839) + store { ptr, i64, i64 } %t839, ptr %a841 + call void @finch_str_drop(ptr %a841) + %t842 = call { ptr, i64, i64 } @finch.gen.load(ptr %t810, { ptr, i64, i64 } %t811, { ptr, i64, i64 } %t840) + store { ptr, i64, i64 } %t840, ptr %a843 + call void @finch_str_drop(ptr %a843) + store { ptr, i64, i64 } %t842, ptr %a844 + %t845 = load ptr, ptr %a1 + %t846 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5783, i64 36, i64 0 }, ptr %a848 + store { ptr, i64, i64 } %t846, ptr %a849 + call void @finch_str_concat(ptr %a847, ptr %a848, ptr %a849) + %t850 = load { ptr, i64, i64 }, ptr %a847 + store { ptr, i64, i64 } %t850, ptr %a852 + store { ptr, i64, i64 } { ptr @.str.5784, i64 6, i64 0 }, ptr %a853 + call void @finch_str_concat(ptr %a851, ptr %a852, ptr %a853) + store { ptr, i64, i64 } %t850, ptr %a854 + call void @finch_str_drop(ptr %a854) + %t855 = load { ptr, i64, i64 }, ptr %a851 + %t856 = load { ptr, i64, i64 }, ptr %a798 + store { ptr, i64, i64 } %t855, ptr %a858 + store { ptr, i64, i64 } %t856, ptr %a859 + call void @finch_str_concat(ptr %a857, ptr %a858, ptr %a859) + store { ptr, i64, i64 } %t855, ptr %a860 + call void @finch_str_drop(ptr %a860) + %t861 = load { ptr, i64, i64 }, ptr %a857 + store { ptr, i64, i64 } %t861, ptr %a863 + store { ptr, i64, i64 } { ptr @.str.5785, i64 6, i64 0 }, ptr %a864 + call void @finch_str_concat(ptr %a862, ptr %a863, ptr %a864) + store { ptr, i64, i64 } %t861, ptr %a865 + call void @finch_str_drop(ptr %a865) + %t866 = load { ptr, i64, i64 }, ptr %a862 + %t867 = load ptr, ptr %a1 + %t868 = load %S.ast.Type, ptr %a15 + %t869 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t867, %S.ast.Type %t868) + store { ptr, i64, i64 } %t866, ptr %a871 + store { ptr, i64, i64 } %t869, ptr %a872 + call void @finch_str_concat(ptr %a870, ptr %a871, ptr %a872) + store { ptr, i64, i64 } %t866, ptr %a873 + call void @finch_str_drop(ptr %a873) + store { ptr, i64, i64 } %t869, ptr %a874 + call void @finch_str_drop(ptr %a874) + %t875 = load { ptr, i64, i64 }, ptr %a870 + store { ptr, i64, i64 } %t875, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.5786, i64 1, i64 0 }, ptr %a878 + call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878) + store { ptr, i64, i64 } %t875, ptr %a879 + call void @finch_str_drop(ptr %a879) + %t880 = load { ptr, i64, i64 }, ptr %a876 + call void @finch.gen.emit(ptr %t845, { ptr, i64, i64 } %t880) + store { ptr, i64, i64 } %t880, ptr %a881 + call void @finch_str_drop(ptr %a881) + %t882 = load { ptr, i64, i64 }, ptr %a844 + store { ptr, i64, i64 } %t882, ptr %a883 + call void @finch_str_copy(ptr %a884, ptr %a883) + %t885 = load { ptr, i64, i64 }, ptr %a884 + %t886 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t885, 0 + %t887 = load %S.ast.Type, ptr %a15 + store %S.ast.Type %t887, ptr %a888 + call void @finch.copy.S_ast_Type(ptr %a889, ptr %a888) + %t890 = load %S.ast.Type, ptr %a889 + %t891 = insertvalue %S.gen.Val %t886, %S.ast.Type %t890, 1 + %t892 = load ptr, ptr %a1 + %t893 = load %S.ast.Type, ptr %a15 + %t894 = call i1 @finch.gen.owning(ptr %t892, %S.ast.Type %t893) + %t895 = insertvalue %S.gen.Val %t891, i1 %t894, 2 + call void @finch_str_drop(ptr %a844) + call void @finch_str_drop(ptr %a809) + call void @finch_str_drop(ptr %a798) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t895 +endif8918: + %t896 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t896, ptr %a897 + store { ptr, i64, i64 } { ptr @.str.5787, i64 6, i64 0 }, ptr %a898 + %t899 = call i32 @finch_str_eq(ptr %a897, ptr %a898) + %t900 = icmp ne i32 %t899, 0 + br i1 %t900, label %then8923, label %endif8925 +then8923: + %t901 = load ptr, ptr %a1 + %t902 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t901, %S.ast.Node %t902, i64 1) + %t903 = load ptr, ptr %a1 + %t904 = load ptr, ptr %a1 + %t905 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t906 = load { ptr, i64, i64 }, ptr %t905 + %t907 = extractvalue { ptr, i64, i64 } %t906, 1 + %t908 = icmp uge i64 1, %t907 + br i1 %t908, label %range8926, label %inrange8927 +range8926: + call void @finch_panic_index(ptr @.str.5788, i64 5505, i64 1, i64 %t907) + unreachable +inrange8927: + %t909 = extractvalue { ptr, i64, i64 } %t906, 0 + %t910 = getelementptr inbounds %S.ast.Node, ptr %t909, i64 1 + %t911 = load %S.ast.Node, ptr %t910 + %t912 = call %S.gen.Val @finch.gen.expr(ptr %t904, %S.ast.Node %t911) + %t913 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5789, i64 3, i64 0 }) + %t914 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t915 = load { ptr, i64, i64 }, ptr %t914 + %t916 = extractvalue { ptr, i64, i64 } %t915, 1 + %t917 = icmp uge i64 1, %t916 + br i1 %t917, label %range8928, label %inrange8929 +range8928: + call void @finch_panic_index(ptr @.str.5790, i64 5505, i64 1, i64 %t916) + unreachable +inrange8929: + %t918 = extractvalue { ptr, i64, i64 } %t915, 0 + %t919 = getelementptr inbounds %S.ast.Node, ptr %t918, i64 1 + %t920 = load %S.ast.Node, ptr %t919 + %t921 = call %S.gen.Val @finch.gen.coerce(ptr %t903, %S.gen.Val %t912, %S.ast.Type %t913, %S.ast.Node %t920, { ptr, i64, i64 } { ptr @.str.5791, i64 14, i64 0 }) + store %S.gen.Val %t912, ptr %a922 + call void @finch.drop.S_gen_Val(ptr %a922) + store %S.ast.Type %t913, ptr %a923 + call void @finch.drop.S_ast_Type(ptr %a923) + %t924 = extractvalue %S.gen.Val %t921, 0 + store { ptr, i64, i64 } %t924, ptr %a925 + call void @finch_str_copy(ptr %a926, ptr %a925) + %t927 = load { ptr, i64, i64 }, ptr %a926 + store %S.gen.Val %t921, ptr %a928 + call void @finch.drop.S_gen_Val(ptr %a928) + store { ptr, i64, i64 } %t927, ptr %a929 + %t930 = load ptr, ptr %a1 + %t931 = load { ptr, i64, i64 }, ptr %a3 + %t932 = load %S.ast.Type, ptr %a4 + %t933 = load { ptr, i64, i64 }, ptr %a929 + call void @finch.gen.dropFrom(ptr %t930, { ptr, i64, i64 } %t931, %S.ast.Type %t932, { ptr, i64, i64 } %t933) + %t934 = load ptr, ptr %a1 + %t935 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5792, i64 32, i64 0 }, ptr %a937 + store { ptr, i64, i64 } %t935, ptr %a938 + call void @finch_str_concat(ptr %a936, ptr %a937, ptr %a938) + %t939 = load { ptr, i64, i64 }, ptr %a936 + store { ptr, i64, i64 } %t939, ptr %a941 + store { ptr, i64, i64 } { ptr @.str.5793, i64 6, i64 0 }, ptr %a942 + call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) + store { ptr, i64, i64 } %t939, ptr %a943 + call void @finch_str_drop(ptr %a943) + %t944 = load { ptr, i64, i64 }, ptr %a940 + %t945 = load { ptr, i64, i64 }, ptr %a929 + store { ptr, i64, i64 } %t944, ptr %a947 + store { ptr, i64, i64 } %t945, ptr %a948 + call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948) + store { ptr, i64, i64 } %t944, ptr %a949 + call void @finch_str_drop(ptr %a949) + %t950 = load { ptr, i64, i64 }, ptr %a946 + store { ptr, i64, i64 } %t950, ptr %a952 + store { ptr, i64, i64 } { ptr @.str.5794, i64 6, i64 0 }, ptr %a953 + call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) + store { ptr, i64, i64 } %t950, ptr %a954 + call void @finch_str_drop(ptr %a954) + %t955 = load { ptr, i64, i64 }, ptr %a951 + %t956 = load ptr, ptr %a1 + %t957 = load %S.ast.Type, ptr %a15 + %t958 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t956, %S.ast.Type %t957) + store { ptr, i64, i64 } %t955, ptr %a960 + store { ptr, i64, i64 } %t958, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t955, ptr %a962 + call void @finch_str_drop(ptr %a962) + store { ptr, i64, i64 } %t958, ptr %a963 + call void @finch_str_drop(ptr %a963) + %t964 = load { ptr, i64, i64 }, ptr %a959 + store { ptr, i64, i64 } %t964, ptr %a966 + store { ptr, i64, i64 } { ptr @.str.5795, i64 1, i64 0 }, ptr %a967 + call void @finch_str_concat(ptr %a965, ptr %a966, ptr %a967) + store { ptr, i64, i64 } %t964, ptr %a968 + call void @finch_str_drop(ptr %a968) + %t969 = load { ptr, i64, i64 }, ptr %a965 + call void @finch.gen.emit(ptr %t934, { ptr, i64, i64 } %t969) + store { ptr, i64, i64 } %t969, ptr %a970 + call void @finch_str_drop(ptr %a970) + %t971 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5796, i64 4, i64 0 }) + %t972 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t971, 1 + call void @finch_str_drop(ptr %a929) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t972 +endif8925: + %t973 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t973, ptr %a974 + store { ptr, i64, i64 } { ptr @.str.5797, i64 7, i64 0 }, ptr %a975 + %t976 = call i32 @finch_str_eq(ptr %a974, ptr %a975) + %t977 = icmp ne i32 %t976, 0 + br i1 %t977, label %then8930, label %endif8932 +then8930: + %t978 = load ptr, ptr %a1 + %t979 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t978, %S.ast.Node %t979, i64 0) + %t980 = load ptr, ptr %a1 + %t981 = load { ptr, i64, i64 }, ptr %a39 + %t982 = call { ptr, i64, i64 } @finch.gen.load(ptr %t980, { ptr, i64, i64 } { ptr @.str.5798, i64 3, i64 0 }, { ptr, i64, i64 } %t981) + store { ptr, i64, i64 } %t982, ptr %a983 + %t984 = load ptr, ptr %a1 + %t985 = load { ptr, i64, i64 }, ptr %a3 + %t986 = call { ptr, i64, i64 } @finch.gen.load(ptr %t984, { ptr, i64, i64 } { ptr @.str.5799, i64 3, i64 0 }, { ptr, i64, i64 } %t985) + store { ptr, i64, i64 } %t986, ptr %a987 + %t988 = load ptr, ptr %a1 + %t989 = load { ptr, i64, i64 }, ptr %a983 + store { ptr, i64, i64 } { ptr @.str.5800, i64 9, i64 0 }, ptr %a991 + store { ptr, i64, i64 } %t989, ptr %a992 + call void @finch_str_concat(ptr %a990, ptr %a991, ptr %a992) + %t993 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t993, ptr %a995 + store { ptr, i64, i64 } { ptr @.str.5801, i64 3, i64 0 }, ptr %a996 + call void @finch_str_concat(ptr %a994, ptr %a995, ptr %a996) + store { ptr, i64, i64 } %t993, ptr %a997 + call void @finch_str_drop(ptr %a997) + %t998 = load { ptr, i64, i64 }, ptr %a994 + %t999 = call { ptr, i64, i64 } @finch.gen.op(ptr %t988, { ptr, i64, i64 } %t998) + store { ptr, i64, i64 } %t998, ptr %a1000 + call void @finch_str_drop(ptr %a1000) + store { ptr, i64, i64 } %t999, ptr %a1001 + %t1002 = load ptr, ptr %a1 + %t1003 = load { ptr, i64, i64 }, ptr %a1001 + %t1004 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1002, { ptr, i64, i64 } %t1003) + store { ptr, i64, i64 } %t1004, ptr %a1005 + %t1006 = load ptr, ptr %a1 + %t1007 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5802, i64 23, i64 0 }, ptr %a1009 + store { ptr, i64, i64 } %t1007, ptr %a1010 + call void @finch_str_concat(ptr %a1008, ptr %a1009, ptr %a1010) + %t1011 = load { ptr, i64, i64 }, ptr %a1008 + store { ptr, i64, i64 } %t1011, ptr %a1013 + store { ptr, i64, i64 } { ptr @.str.5803, i64 6, i64 0 }, ptr %a1014 + call void @finch_str_concat(ptr %a1012, ptr %a1013, ptr %a1014) + store { ptr, i64, i64 } %t1011, ptr %a1015 + call void @finch_str_drop(ptr %a1015) + %t1016 = load { ptr, i64, i64 }, ptr %a1012 + %t1017 = load { ptr, i64, i64 }, ptr %a987 + store { ptr, i64, i64 } %t1016, ptr %a1019 + store { ptr, i64, i64 } %t1017, ptr %a1020 + call void @finch_str_concat(ptr %a1018, ptr %a1019, ptr %a1020) + store { ptr, i64, i64 } %t1016, ptr %a1021 + call void @finch_str_drop(ptr %a1021) + %t1022 = load { ptr, i64, i64 }, ptr %a1018 + store { ptr, i64, i64 } %t1022, ptr %a1024 + store { ptr, i64, i64 } { ptr @.str.5804, i64 6, i64 0 }, ptr %a1025 + call void @finch_str_concat(ptr %a1023, ptr %a1024, ptr %a1025) + store { ptr, i64, i64 } %t1022, ptr %a1026 + call void @finch_str_drop(ptr %a1026) + %t1027 = load { ptr, i64, i64 }, ptr %a1023 + %t1028 = load { ptr, i64, i64 }, ptr %a1005 + %t1029 = extractvalue { ptr, i64, i64 } %t1028, 1 + %t1030 = icmp uge i64 3, %t1029 + br i1 %t1030, label %range8933, label %inrange8934 +range8933: + call void @finch_panic_index(ptr @.str.5805, i64 5516, i64 3, i64 %t1029) + unreachable +inrange8934: + %t1031 = extractvalue { ptr, i64, i64 } %t1028, 0 + %t1032 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1031, i64 3 + %t1033 = load { ptr, i64, i64 }, ptr %t1032 + store { ptr, i64, i64 } %t1027, ptr %a1035 + store { ptr, i64, i64 } %t1033, ptr %a1036 + call void @finch_str_concat(ptr %a1034, ptr %a1035, ptr %a1036) + store { ptr, i64, i64 } %t1027, ptr %a1037 + call void @finch_str_drop(ptr %a1037) + %t1038 = load { ptr, i64, i64 }, ptr %a1034 + %t1039 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1006, { ptr, i64, i64 } %t1038) + store { ptr, i64, i64 } %t1038, ptr %a1040 + call void @finch_str_drop(ptr %a1040) + store { ptr, i64, i64 } %t1039, ptr %a1041 + %t1042 = load ptr, ptr %a1 + %t1043 = load ptr, ptr %a1 + %t1044 = load { ptr, i64, i64 }, ptr %a983 + store { ptr, i64, i64 } { ptr @.str.5807, i64 8, i64 0 }, ptr %a1046 + store { ptr, i64, i64 } %t1044, ptr %a1047 + call void @finch_str_concat(ptr %a1045, ptr %a1046, ptr %a1047) + %t1048 = load { ptr, i64, i64 }, ptr %a1045 + store { ptr, i64, i64 } %t1048, ptr %a1050 + store { ptr, i64, i64 } { ptr @.str.5808, i64 3, i64 0 }, ptr %a1051 + call void @finch_str_concat(ptr %a1049, ptr %a1050, ptr %a1051) + store { ptr, i64, i64 } %t1048, ptr %a1052 + call void @finch_str_drop(ptr %a1052) + %t1053 = load { ptr, i64, i64 }, ptr %a1049 + %t1054 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1043, { ptr, i64, i64 } %t1053) + store { ptr, i64, i64 } %t1053, ptr %a1055 + call void @finch_str_drop(ptr %a1055) + store { ptr, i64, i64 } { ptr @.str.5806, i64 8, i64 0 }, ptr %a1057 + store { ptr, i64, i64 } %t1054, ptr %a1058 + call void @finch_str_concat(ptr %a1056, ptr %a1057, ptr %a1058) + store { ptr, i64, i64 } %t1054, ptr %a1059 + call void @finch_str_drop(ptr %a1059) + %t1060 = load { ptr, i64, i64 }, ptr %a1056 + store { ptr, i64, i64 } %t1060, ptr %a1062 + store { ptr, i64, i64 } { ptr @.str.5809, i64 2, i64 0 }, ptr %a1063 + call void @finch_str_concat(ptr %a1061, ptr %a1062, ptr %a1063) + store { ptr, i64, i64 } %t1060, ptr %a1064 + call void @finch_str_drop(ptr %a1064) + %t1065 = load { ptr, i64, i64 }, ptr %a1061 + %t1066 = load { ptr, i64, i64 }, ptr %a1005 + %t1067 = extractvalue { ptr, i64, i64 } %t1066, 1 + %t1068 = icmp uge i64 3, %t1067 + br i1 %t1068, label %range8935, label %inrange8936 +range8935: + call void @finch_panic_index(ptr @.str.5810, i64 5517, i64 3, i64 %t1067) + unreachable +inrange8936: + %t1069 = extractvalue { ptr, i64, i64 } %t1066, 0 + %t1070 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1069, i64 3 + %t1071 = load { ptr, i64, i64 }, ptr %t1070 + store { ptr, i64, i64 } %t1065, ptr %a1073 + store { ptr, i64, i64 } %t1071, ptr %a1074 + call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) + store { ptr, i64, i64 } %t1065, ptr %a1075 + call void @finch_str_drop(ptr %a1075) + %t1076 = load { ptr, i64, i64 }, ptr %a1072 + %t1077 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1042, { ptr, i64, i64 } %t1076) + store { ptr, i64, i64 } %t1076, ptr %a1078 + call void @finch_str_drop(ptr %a1078) + store { ptr, i64, i64 } %t1077, ptr %a1079 + %t1080 = load ptr, ptr %a1 + %t1081 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5811, i64 23, i64 0 }, ptr %a1083 + store { ptr, i64, i64 } %t1081, ptr %a1084 + call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084) + %t1085 = load { ptr, i64, i64 }, ptr %a1082 + store { ptr, i64, i64 } %t1085, ptr %a1087 + store { ptr, i64, i64 } { ptr @.str.5812, i64 6, i64 0 }, ptr %a1088 + call void @finch_str_concat(ptr %a1086, ptr %a1087, ptr %a1088) + store { ptr, i64, i64 } %t1085, ptr %a1089 + call void @finch_str_drop(ptr %a1089) + %t1090 = load { ptr, i64, i64 }, ptr %a1086 + %t1091 = load { ptr, i64, i64 }, ptr %a987 + store { ptr, i64, i64 } %t1090, ptr %a1093 + store { ptr, i64, i64 } %t1091, ptr %a1094 + call void @finch_str_concat(ptr %a1092, ptr %a1093, ptr %a1094) + store { ptr, i64, i64 } %t1090, ptr %a1095 + call void @finch_str_drop(ptr %a1095) + %t1096 = load { ptr, i64, i64 }, ptr %a1092 + store { ptr, i64, i64 } %t1096, ptr %a1098 + store { ptr, i64, i64 } { ptr @.str.5813, i64 6, i64 0 }, ptr %a1099 + call void @finch_str_concat(ptr %a1097, ptr %a1098, ptr %a1099) + store { ptr, i64, i64 } %t1096, ptr %a1100 + call void @finch_str_drop(ptr %a1100) + %t1101 = load { ptr, i64, i64 }, ptr %a1097 + %t1102 = load { ptr, i64, i64 }, ptr %a1079 + store { ptr, i64, i64 } %t1101, ptr %a1104 + store { ptr, i64, i64 } %t1102, ptr %a1105 + call void @finch_str_concat(ptr %a1103, ptr %a1104, ptr %a1105) + store { ptr, i64, i64 } %t1101, ptr %a1106 + call void @finch_str_drop(ptr %a1106) + %t1107 = load { ptr, i64, i64 }, ptr %a1103 + %t1108 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1080, { ptr, i64, i64 } %t1107) + store { ptr, i64, i64 } %t1107, ptr %a1109 + call void @finch_str_drop(ptr %a1109) + store { ptr, i64, i64 } %t1108, ptr %a1110 + %t1111 = load ptr, ptr %a1 + %t1112 = load { ptr, i64, i64 }, ptr %a19 + %t1113 = load { ptr, i64, i64 }, ptr %a1041 + %t1114 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1111, { ptr, i64, i64 } %t1112, { ptr, i64, i64 } %t1113) + store { ptr, i64, i64 } %t1114, ptr %a1115 + %t1116 = load ptr, ptr %a1 + %t1117 = load { ptr, i64, i64 }, ptr %a19 + %t1118 = load { ptr, i64, i64 }, ptr %a1110 + %t1119 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1116, { ptr, i64, i64 } %t1117, { ptr, i64, i64 } %t1118) + store { ptr, i64, i64 } %t1119, ptr %a1120 + %t1121 = load ptr, ptr %a1 + %t1122 = load { ptr, i64, i64 }, ptr %a19 + %t1123 = load { ptr, i64, i64 }, ptr %a1120 + %t1124 = load { ptr, i64, i64 }, ptr %a1041 + call void @finch.gen.store(ptr %t1121, { ptr, i64, i64 } %t1122, { ptr, i64, i64 } %t1123, { ptr, i64, i64 } %t1124) + %t1125 = load ptr, ptr %a1 + %t1126 = load { ptr, i64, i64 }, ptr %a19 + %t1127 = load { ptr, i64, i64 }, ptr %a1115 + %t1128 = load { ptr, i64, i64 }, ptr %a1110 + call void @finch.gen.store(ptr %t1125, { ptr, i64, i64 } %t1126, { ptr, i64, i64 } %t1127, { ptr, i64, i64 } %t1128) + %t1129 = load ptr, ptr %a1 + %t1130 = load { ptr, i64, i64 }, ptr %a1005 + call void @finch.gen.loopEnd(ptr %t1129, { ptr, i64, i64 } %t1130) + %t1131 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5814, i64 4, i64 0 }) + %t1132 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1131, 1 + call void @finch_str_drop(ptr %a1120) + call void @finch_str_drop(ptr %a1115) + call void @finch_str_drop(ptr %a1110) + call void @finch_str_drop(ptr %a1079) + call void @finch_str_drop(ptr %a1041) + call void @finch.drop.arr_str(ptr %a1005) + call void @finch_str_drop(ptr %a1001) + call void @finch_str_drop(ptr %a987) + call void @finch_str_drop(ptr %a983) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t1132 +endif8932: + %t1133 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t1133, ptr %a1134 + store { ptr, i64, i64 } { ptr @.str.5815, i64 5, i64 0 }, ptr %a1135 + %t1136 = call i32 @finch_str_eq(ptr %a1134, ptr %a1135) + %t1137 = icmp ne i32 %t1136, 0 + br i1 %t1137, label %then8937, label %endif8939 +then8937: + %t1138 = load ptr, ptr %a1 + %t1139 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t1138, %S.ast.Node %t1139, i64 2) + %t1140 = load ptr, ptr %a1 + %t1141 = load ptr, ptr %a1 + %t1142 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1143 = load { ptr, i64, i64 }, ptr %t1142 + %t1144 = extractvalue { ptr, i64, i64 } %t1143, 1 + %t1145 = icmp uge i64 1, %t1144 + br i1 %t1145, label %range8940, label %inrange8941 +range8940: + call void @finch_panic_index(ptr @.str.5816, i64 5528, i64 1, i64 %t1144) + unreachable +inrange8941: + %t1146 = extractvalue { ptr, i64, i64 } %t1143, 0 + %t1147 = getelementptr inbounds %S.ast.Node, ptr %t1146, i64 1 + %t1148 = load %S.ast.Node, ptr %t1147 + %t1149 = call %S.gen.Val @finch.gen.expr(ptr %t1141, %S.ast.Node %t1148) + %t1150 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5817, i64 3, i64 0 }) + %t1151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1152 = load { ptr, i64, i64 }, ptr %t1151 + %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 + %t1154 = icmp uge i64 1, %t1153 + br i1 %t1154, label %range8942, label %inrange8943 +range8942: + call void @finch_panic_index(ptr @.str.5818, i64 5528, i64 1, i64 %t1153) + unreachable +inrange8943: + %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 + %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 1 + %t1157 = load %S.ast.Node, ptr %t1156 + %t1158 = call %S.gen.Val @finch.gen.coerce(ptr %t1140, %S.gen.Val %t1149, %S.ast.Type %t1150, %S.ast.Node %t1157, { ptr, i64, i64 } { ptr @.str.5819, i64 9, i64 0 }) + store %S.gen.Val %t1149, ptr %a1159 + call void @finch.drop.S_gen_Val(ptr %a1159) + store %S.ast.Type %t1150, ptr %a1160 + call void @finch.drop.S_ast_Type(ptr %a1160) + %t1161 = extractvalue %S.gen.Val %t1158, 0 + store { ptr, i64, i64 } %t1161, ptr %a1162 + call void @finch_str_copy(ptr %a1163, ptr %a1162) + %t1164 = load { ptr, i64, i64 }, ptr %a1163 + store %S.gen.Val %t1158, ptr %a1165 + call void @finch.drop.S_gen_Val(ptr %a1165) + store { ptr, i64, i64 } %t1164, ptr %a1166 + %t1167 = load ptr, ptr %a1 + %t1168 = load ptr, ptr %a1 + %t1169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1170 = load { ptr, i64, i64 }, ptr %t1169 + %t1171 = extractvalue { ptr, i64, i64 } %t1170, 1 + %t1172 = icmp uge i64 2, %t1171 + br i1 %t1172, label %range8944, label %inrange8945 +range8944: + call void @finch_panic_index(ptr @.str.5820, i64 5529, i64 2, i64 %t1171) + unreachable +inrange8945: + %t1173 = extractvalue { ptr, i64, i64 } %t1170, 0 + %t1174 = getelementptr inbounds %S.ast.Node, ptr %t1173, i64 2 + %t1175 = load %S.ast.Node, ptr %t1174 + %t1176 = call %S.gen.Val @finch.gen.expr(ptr %t1168, %S.ast.Node %t1175) + %t1177 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5821, i64 3, i64 0 }) + %t1178 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1179 = load { ptr, i64, i64 }, ptr %t1178 + %t1180 = extractvalue { ptr, i64, i64 } %t1179, 1 + %t1181 = icmp uge i64 2, %t1180 + br i1 %t1181, label %range8946, label %inrange8947 +range8946: + call void @finch_panic_index(ptr @.str.5822, i64 5529, i64 2, i64 %t1180) + unreachable +inrange8947: + %t1182 = extractvalue { ptr, i64, i64 } %t1179, 0 + %t1183 = getelementptr inbounds %S.ast.Node, ptr %t1182, i64 2 + %t1184 = load %S.ast.Node, ptr %t1183 + %t1185 = call %S.gen.Val @finch.gen.coerce(ptr %t1167, %S.gen.Val %t1176, %S.ast.Type %t1177, %S.ast.Node %t1184, { ptr, i64, i64 } { ptr @.str.5823, i64 7, i64 0 }) + store %S.gen.Val %t1176, ptr %a1186 + call void @finch.drop.S_gen_Val(ptr %a1186) + store %S.ast.Type %t1177, ptr %a1187 + call void @finch.drop.S_ast_Type(ptr %a1187) + %t1188 = extractvalue %S.gen.Val %t1185, 0 + store { ptr, i64, i64 } %t1188, ptr %a1189 + call void @finch_str_copy(ptr %a1190, ptr %a1189) + %t1191 = load { ptr, i64, i64 }, ptr %a1190 + store %S.gen.Val %t1185, ptr %a1192 + call void @finch.drop.S_gen_Val(ptr %a1192) + store { ptr, i64, i64 } %t1191, ptr %a1193 + %t1194 = load ptr, ptr %a1 + %t1195 = load { ptr, i64, i64 }, ptr %a39 + %t1196 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1194, { ptr, i64, i64 } { ptr @.str.5824, i64 3, i64 0 }, { ptr, i64, i64 } %t1195) + store { ptr, i64, i64 } %t1196, ptr %a1197 + %t1198 = load ptr, ptr %a1 + %t1199 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } { ptr @.str.5825, i64 13, i64 0 }, ptr %a1201 + store { ptr, i64, i64 } %t1199, ptr %a1202 + call void @finch_str_concat(ptr %a1200, ptr %a1201, ptr %a1202) + %t1203 = load { ptr, i64, i64 }, ptr %a1200 + store { ptr, i64, i64 } %t1203, ptr %a1205 + store { ptr, i64, i64 } { ptr @.str.5826, i64 3, i64 0 }, ptr %a1206 + call void @finch_str_concat(ptr %a1204, ptr %a1205, ptr %a1206) + store { ptr, i64, i64 } %t1203, ptr %a1207 + call void @finch_str_drop(ptr %a1207) + %t1208 = load { ptr, i64, i64 }, ptr %a1204 + %t1209 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1198, { ptr, i64, i64 } %t1208) + store { ptr, i64, i64 } %t1208, ptr %a1210 + call void @finch_str_drop(ptr %a1210) + store { ptr, i64, i64 } %t1209, ptr %a1211 + %t1212 = load ptr, ptr %a1 + %t1213 = load { ptr, i64, i64 }, ptr %a1193 + store { ptr, i64, i64 } { ptr @.str.5827, i64 13, i64 0 }, ptr %a1215 + store { ptr, i64, i64 } %t1213, ptr %a1216 + call void @finch_str_concat(ptr %a1214, ptr %a1215, ptr %a1216) + %t1217 = load { ptr, i64, i64 }, ptr %a1214 + store { ptr, i64, i64 } %t1217, ptr %a1219 + store { ptr, i64, i64 } { ptr @.str.5828, i64 2, i64 0 }, ptr %a1220 + call void @finch_str_concat(ptr %a1218, ptr %a1219, ptr %a1220) + store { ptr, i64, i64 } %t1217, ptr %a1221 + call void @finch_str_drop(ptr %a1221) + %t1222 = load { ptr, i64, i64 }, ptr %a1218 + %t1223 = load { ptr, i64, i64 }, ptr %a1197 + store { ptr, i64, i64 } %t1222, ptr %a1225 + store { ptr, i64, i64 } %t1223, ptr %a1226 + call void @finch_str_concat(ptr %a1224, ptr %a1225, ptr %a1226) + store { ptr, i64, i64 } %t1222, ptr %a1227 + call void @finch_str_drop(ptr %a1227) + %t1228 = load { ptr, i64, i64 }, ptr %a1224 + %t1229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1212, { ptr, i64, i64 } %t1228) + store { ptr, i64, i64 } %t1228, ptr %a1230 + call void @finch_str_drop(ptr %a1230) + store { ptr, i64, i64 } %t1229, ptr %a1231 + %t1232 = load ptr, ptr %a1 + %t1233 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } { ptr @.str.5829, i64 13, i64 0 }, ptr %a1235 + store { ptr, i64, i64 } %t1233, ptr %a1236 + call void @finch_str_concat(ptr %a1234, ptr %a1235, ptr %a1236) + %t1237 = load { ptr, i64, i64 }, ptr %a1234 + store { ptr, i64, i64 } %t1237, ptr %a1239 + store { ptr, i64, i64 } { ptr @.str.5830, i64 2, i64 0 }, ptr %a1240 + call void @finch_str_concat(ptr %a1238, ptr %a1239, ptr %a1240) + store { ptr, i64, i64 } %t1237, ptr %a1241 + call void @finch_str_drop(ptr %a1241) + %t1242 = load { ptr, i64, i64 }, ptr %a1238 + %t1243 = load { ptr, i64, i64 }, ptr %a1193 + store { ptr, i64, i64 } %t1242, ptr %a1245 + store { ptr, i64, i64 } %t1243, ptr %a1246 + call void @finch_str_concat(ptr %a1244, ptr %a1245, ptr %a1246) + store { ptr, i64, i64 } %t1242, ptr %a1247 + call void @finch_str_drop(ptr %a1247) + %t1248 = load { ptr, i64, i64 }, ptr %a1244 + %t1249 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1232, { ptr, i64, i64 } %t1248) + store { ptr, i64, i64 } %t1248, ptr %a1250 + call void @finch_str_drop(ptr %a1250) + store { ptr, i64, i64 } %t1249, ptr %a1251 + %t1252 = load ptr, ptr %a1 + %t1253 = load ptr, ptr %a1 + %t1254 = load ptr, ptr %a1 + %t1255 = load { ptr, i64, i64 }, ptr %a1211 + store { ptr, i64, i64 } { ptr @.str.5832, i64 6, i64 0 }, ptr %a1257 + store { ptr, i64, i64 } %t1255, ptr %a1258 + call void @finch_str_concat(ptr %a1256, ptr %a1257, ptr %a1258) + %t1259 = load { ptr, i64, i64 }, ptr %a1256 + store { ptr, i64, i64 } %t1259, ptr %a1261 + store { ptr, i64, i64 } { ptr @.str.5833, i64 2, i64 0 }, ptr %a1262 + call void @finch_str_concat(ptr %a1260, ptr %a1261, ptr %a1262) + store { ptr, i64, i64 } %t1259, ptr %a1263 + call void @finch_str_drop(ptr %a1263) + %t1264 = load { ptr, i64, i64 }, ptr %a1260 + %t1265 = load { ptr, i64, i64 }, ptr %a1231 + store { ptr, i64, i64 } %t1264, ptr %a1267 + store { ptr, i64, i64 } %t1265, ptr %a1268 + call void @finch_str_concat(ptr %a1266, ptr %a1267, ptr %a1268) + store { ptr, i64, i64 } %t1264, ptr %a1269 + call void @finch_str_drop(ptr %a1269) + %t1270 = load { ptr, i64, i64 }, ptr %a1266 + %t1271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1254, { ptr, i64, i64 } %t1270) + store { ptr, i64, i64 } %t1270, ptr %a1272 + call void @finch_str_drop(ptr %a1272) + store { ptr, i64, i64 } { ptr @.str.5831, i64 6, i64 0 }, ptr %a1274 + store { ptr, i64, i64 } %t1271, ptr %a1275 + call void @finch_str_concat(ptr %a1273, ptr %a1274, ptr %a1275) + store { ptr, i64, i64 } %t1271, ptr %a1276 + call void @finch_str_drop(ptr %a1276) + %t1277 = load { ptr, i64, i64 }, ptr %a1273 + store { ptr, i64, i64 } %t1277, ptr %a1279 + store { ptr, i64, i64 } { ptr @.str.5834, i64 2, i64 0 }, ptr %a1280 + call void @finch_str_concat(ptr %a1278, ptr %a1279, ptr %a1280) + store { ptr, i64, i64 } %t1277, ptr %a1281 + call void @finch_str_drop(ptr %a1281) + %t1282 = load { ptr, i64, i64 }, ptr %a1278 + %t1283 = load { ptr, i64, i64 }, ptr %a1251 + store { ptr, i64, i64 } %t1282, ptr %a1285 + store { ptr, i64, i64 } %t1283, ptr %a1286 + call void @finch_str_concat(ptr %a1284, ptr %a1285, ptr %a1286) + store { ptr, i64, i64 } %t1282, ptr %a1287 + call void @finch_str_drop(ptr %a1287) + %t1288 = load { ptr, i64, i64 }, ptr %a1284 + %t1289 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1253, { ptr, i64, i64 } %t1288) + store { ptr, i64, i64 } %t1288, ptr %a1290 + call void @finch_str_drop(ptr %a1290) + %t1291 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t1252, { ptr, i64, i64 } %t1289, { ptr, i64, i64 } { ptr @.str.5835, i64 33, i64 0 }, %S.ast.Node %t1291) + store { ptr, i64, i64 } %t1289, ptr %a1292 + call void @finch_str_drop(ptr %a1292) + %t1293 = load ptr, ptr %a1 + %t1294 = load { ptr, i64, i64 }, ptr %a1193 + store { ptr, i64, i64 } { ptr @.str.5836, i64 8, i64 0 }, ptr %a1296 + store { ptr, i64, i64 } %t1294, ptr %a1297 + call void @finch_str_concat(ptr %a1295, ptr %a1296, ptr %a1297) + %t1298 = load { ptr, i64, i64 }, ptr %a1295 + store { ptr, i64, i64 } %t1298, ptr %a1300 + store { ptr, i64, i64 } { ptr @.str.5837, i64 2, i64 0 }, ptr %a1301 + call void @finch_str_concat(ptr %a1299, ptr %a1300, ptr %a1301) + store { ptr, i64, i64 } %t1298, ptr %a1302 + call void @finch_str_drop(ptr %a1302) + %t1303 = load { ptr, i64, i64 }, ptr %a1299 + %t1304 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } %t1303, ptr %a1306 + store { ptr, i64, i64 } %t1304, ptr %a1307 + call void @finch_str_concat(ptr %a1305, ptr %a1306, ptr %a1307) + store { ptr, i64, i64 } %t1303, ptr %a1308 + call void @finch_str_drop(ptr %a1308) + %t1309 = load { ptr, i64, i64 }, ptr %a1305 + %t1310 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1293, { ptr, i64, i64 } %t1309) + store { ptr, i64, i64 } %t1309, ptr %a1311 + call void @finch_str_drop(ptr %a1311) + store { ptr, i64, i64 } %t1310, ptr %a1312 + %t1313 = load ptr, ptr %a1 + %t1314 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1313, { ptr, i64, i64 } { ptr @.str.5838, i64 17, i64 0 }) + store { ptr, i64, i64 } %t1314, ptr %a1315 + %t1316 = load ptr, ptr %a1 + %t1317 = load { ptr, i64, i64 }, ptr %a1315 + store { ptr, i64, i64 } { ptr @.str.5839, i64 30, i64 0 }, ptr %a1319 + store { ptr, i64, i64 } %t1317, ptr %a1320 + call void @finch_str_concat(ptr %a1318, ptr %a1319, ptr %a1320) + %t1321 = load { ptr, i64, i64 }, ptr %a1318 + store { ptr, i64, i64 } %t1321, ptr %a1323 + store { ptr, i64, i64 } { ptr @.str.5840, i64 6, i64 0 }, ptr %a1324 + call void @finch_str_concat(ptr %a1322, ptr %a1323, ptr %a1324) + store { ptr, i64, i64 } %t1321, ptr %a1325 + call void @finch_str_drop(ptr %a1325) + %t1326 = load { ptr, i64, i64 }, ptr %a1322 + %t1327 = load { ptr, i64, i64 }, ptr %a1312 + store { ptr, i64, i64 } %t1326, ptr %a1329 + store { ptr, i64, i64 } %t1327, ptr %a1330 + call void @finch_str_concat(ptr %a1328, ptr %a1329, ptr %a1330) + store { ptr, i64, i64 } %t1326, ptr %a1331 + call void @finch_str_drop(ptr %a1331) + %t1332 = load { ptr, i64, i64 }, ptr %a1328 + store { ptr, i64, i64 } %t1332, ptr %a1334 + store { ptr, i64, i64 } { ptr @.str.5841, i64 6, i64 0 }, ptr %a1335 + call void @finch_str_concat(ptr %a1333, ptr %a1334, ptr %a1335) + store { ptr, i64, i64 } %t1332, ptr %a1336 + call void @finch_str_drop(ptr %a1336) + %t1337 = load { ptr, i64, i64 }, ptr %a1333 + %t1338 = load ptr, ptr %a1 + %t1339 = load %S.ast.Type, ptr %a15 + %t1340 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1338, %S.ast.Type %t1339) + store { ptr, i64, i64 } %t1337, ptr %a1342 + store { ptr, i64, i64 } %t1340, ptr %a1343 + call void @finch_str_concat(ptr %a1341, ptr %a1342, ptr %a1343) + store { ptr, i64, i64 } %t1337, ptr %a1344 + call void @finch_str_drop(ptr %a1344) + store { ptr, i64, i64 } %t1340, ptr %a1345 + call void @finch_str_drop(ptr %a1345) + %t1346 = load { ptr, i64, i64 }, ptr %a1341 + store { ptr, i64, i64 } %t1346, ptr %a1348 + store { ptr, i64, i64 } { ptr @.str.5842, i64 1, i64 0 }, ptr %a1349 + call void @finch_str_concat(ptr %a1347, ptr %a1348, ptr %a1349) + store { ptr, i64, i64 } %t1346, ptr %a1350 + call void @finch_str_drop(ptr %a1350) + %t1351 = load { ptr, i64, i64 }, ptr %a1347 + call void @finch.gen.emit(ptr %t1316, { ptr, i64, i64 } %t1351) + store { ptr, i64, i64 } %t1351, ptr %a1352 + call void @finch_str_drop(ptr %a1352) + %t1353 = load ptr, ptr %a1 + %t1354 = load { ptr, i64, i64 }, ptr %a3 + %t1355 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1353, { ptr, i64, i64 } { ptr @.str.5843, i64 3, i64 0 }, { ptr, i64, i64 } %t1354) + store { ptr, i64, i64 } %t1355, ptr %a1356 + %t1357 = load ptr, ptr %a1 + %t1358 = load { ptr, i64, i64 }, ptr %a1315 + %t1359 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1357, { ptr, i64, i64 } { ptr @.str.5844, i64 3, i64 0 }, { ptr, i64, i64 } %t1358) + store { ptr, i64, i64 } %t1359, ptr %a1360 + %t1361 = load ptr, ptr %a1 + %t1362 = load { ptr, i64, i64 }, ptr %a1312 + %t1363 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1361, { ptr, i64, i64 } %t1362) + store { ptr, i64, i64 } %t1363, ptr %a1364 + %t1365 = load ptr, ptr %a1 + %t1366 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5845, i64 23, i64 0 }, ptr %a1368 + store { ptr, i64, i64 } %t1366, ptr %a1369 + call void @finch_str_concat(ptr %a1367, ptr %a1368, ptr %a1369) + %t1370 = load { ptr, i64, i64 }, ptr %a1367 + store { ptr, i64, i64 } %t1370, ptr %a1372 + store { ptr, i64, i64 } { ptr @.str.5846, i64 6, i64 0 }, ptr %a1373 + call void @finch_str_concat(ptr %a1371, ptr %a1372, ptr %a1373) + store { ptr, i64, i64 } %t1370, ptr %a1374 + call void @finch_str_drop(ptr %a1374) + %t1375 = load { ptr, i64, i64 }, ptr %a1371 + %t1376 = load { ptr, i64, i64 }, ptr %a1360 + store { ptr, i64, i64 } %t1375, ptr %a1378 + store { ptr, i64, i64 } %t1376, ptr %a1379 + call void @finch_str_concat(ptr %a1377, ptr %a1378, ptr %a1379) + store { ptr, i64, i64 } %t1375, ptr %a1380 + call void @finch_str_drop(ptr %a1380) + %t1381 = load { ptr, i64, i64 }, ptr %a1377 + store { ptr, i64, i64 } %t1381, ptr %a1383 + store { ptr, i64, i64 } { ptr @.str.5847, i64 6, i64 0 }, ptr %a1384 + call void @finch_str_concat(ptr %a1382, ptr %a1383, ptr %a1384) + store { ptr, i64, i64 } %t1381, ptr %a1385 + call void @finch_str_drop(ptr %a1385) + %t1386 = load { ptr, i64, i64 }, ptr %a1382 + %t1387 = load { ptr, i64, i64 }, ptr %a1364 + %t1388 = extractvalue { ptr, i64, i64 } %t1387, 1 + %t1389 = icmp uge i64 3, %t1388 + br i1 %t1389, label %range8948, label %inrange8949 +range8948: + call void @finch_panic_index(ptr @.str.5848, i64 5541, i64 3, i64 %t1388) + unreachable +inrange8949: + %t1390 = extractvalue { ptr, i64, i64 } %t1387, 0 + %t1391 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1390, i64 3 + %t1392 = load { ptr, i64, i64 }, ptr %t1391 + store { ptr, i64, i64 } %t1386, ptr %a1394 + store { ptr, i64, i64 } %t1392, ptr %a1395 + call void @finch_str_concat(ptr %a1393, ptr %a1394, ptr %a1395) + store { ptr, i64, i64 } %t1386, ptr %a1396 + call void @finch_str_drop(ptr %a1396) + %t1397 = load { ptr, i64, i64 }, ptr %a1393 + %t1398 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1365, { ptr, i64, i64 } %t1397) + store { ptr, i64, i64 } %t1397, ptr %a1399 + call void @finch_str_drop(ptr %a1399) + store { ptr, i64, i64 } %t1398, ptr %a1400 + %t1401 = load ptr, ptr %a1 + %t1402 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5849, i64 23, i64 0 }, ptr %a1404 + store { ptr, i64, i64 } %t1402, ptr %a1405 + call void @finch_str_concat(ptr %a1403, ptr %a1404, ptr %a1405) + %t1406 = load { ptr, i64, i64 }, ptr %a1403 + store { ptr, i64, i64 } %t1406, ptr %a1408 + store { ptr, i64, i64 } { ptr @.str.5850, i64 6, i64 0 }, ptr %a1409 + call void @finch_str_concat(ptr %a1407, ptr %a1408, ptr %a1409) + store { ptr, i64, i64 } %t1406, ptr %a1410 + call void @finch_str_drop(ptr %a1410) + %t1411 = load { ptr, i64, i64 }, ptr %a1407 + %t1412 = load { ptr, i64, i64 }, ptr %a1356 + store { ptr, i64, i64 } %t1411, ptr %a1414 + store { ptr, i64, i64 } %t1412, ptr %a1415 + call void @finch_str_concat(ptr %a1413, ptr %a1414, ptr %a1415) + store { ptr, i64, i64 } %t1411, ptr %a1416 + call void @finch_str_drop(ptr %a1416) + %t1417 = load { ptr, i64, i64 }, ptr %a1413 + store { ptr, i64, i64 } %t1417, ptr %a1419 + store { ptr, i64, i64 } { ptr @.str.5851, i64 6, i64 0 }, ptr %a1420 + call void @finch_str_concat(ptr %a1418, ptr %a1419, ptr %a1420) + store { ptr, i64, i64 } %t1417, ptr %a1421 + call void @finch_str_drop(ptr %a1421) + %t1422 = load { ptr, i64, i64 }, ptr %a1418 + %t1423 = load ptr, ptr %a1 + %t1424 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } { ptr @.str.5852, i64 8, i64 0 }, ptr %a1426 + store { ptr, i64, i64 } %t1424, ptr %a1427 + call void @finch_str_concat(ptr %a1425, ptr %a1426, ptr %a1427) + %t1428 = load { ptr, i64, i64 }, ptr %a1425 + store { ptr, i64, i64 } %t1428, ptr %a1430 + store { ptr, i64, i64 } { ptr @.str.5853, i64 2, i64 0 }, ptr %a1431 + call void @finch_str_concat(ptr %a1429, ptr %a1430, ptr %a1431) + store { ptr, i64, i64 } %t1428, ptr %a1432 + call void @finch_str_drop(ptr %a1432) + %t1433 = load { ptr, i64, i64 }, ptr %a1429 + %t1434 = load { ptr, i64, i64 }, ptr %a1364 + %t1435 = extractvalue { ptr, i64, i64 } %t1434, 1 + %t1436 = icmp uge i64 3, %t1435 + br i1 %t1436, label %range8950, label %inrange8951 +range8950: + call void @finch_panic_index(ptr @.str.5854, i64 5542, i64 3, i64 %t1435) + unreachable +inrange8951: + %t1437 = extractvalue { ptr, i64, i64 } %t1434, 0 + %t1438 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1437, i64 3 + %t1439 = load { ptr, i64, i64 }, ptr %t1438 + store { ptr, i64, i64 } %t1433, ptr %a1441 + store { ptr, i64, i64 } %t1439, ptr %a1442 + call void @finch_str_concat(ptr %a1440, ptr %a1441, ptr %a1442) + store { ptr, i64, i64 } %t1433, ptr %a1443 + call void @finch_str_drop(ptr %a1443) + %t1444 = load { ptr, i64, i64 }, ptr %a1440 + %t1445 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1423, { ptr, i64, i64 } %t1444) + store { ptr, i64, i64 } %t1444, ptr %a1446 + call void @finch_str_drop(ptr %a1446) + store { ptr, i64, i64 } %t1422, ptr %a1448 + store { ptr, i64, i64 } %t1445, ptr %a1449 + call void @finch_str_concat(ptr %a1447, ptr %a1448, ptr %a1449) + store { ptr, i64, i64 } %t1422, ptr %a1450 + call void @finch_str_drop(ptr %a1450) + store { ptr, i64, i64 } %t1445, ptr %a1451 + call void @finch_str_drop(ptr %a1451) + %t1452 = load { ptr, i64, i64 }, ptr %a1447 + %t1453 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1401, { ptr, i64, i64 } %t1452) + store { ptr, i64, i64 } %t1452, ptr %a1454 + call void @finch_str_drop(ptr %a1454) + store { ptr, i64, i64 } %t1453, ptr %a1455 + %t1456 = load ptr, ptr %a1 + %t1457 = load { ptr, i64, i64 }, ptr %a1400 + %t1458 = load { ptr, i64, i64 }, ptr %a1455 + %t1459 = load %S.ast.Type, ptr %a15 + call void @finch.gen.copyAt(ptr %t1456, { ptr, i64, i64 } %t1457, { ptr, i64, i64 } %t1458, %S.ast.Type %t1459) + %t1460 = load ptr, ptr %a1 + %t1461 = load { ptr, i64, i64 }, ptr %a1364 + call void @finch.gen.loopEnd(ptr %t1460, { ptr, i64, i64 } %t1461) + %t1462 = load ptr, ptr %a1 + %t1463 = load { ptr, i64, i64 }, ptr %a1315 + %t1464 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1462, { ptr, i64, i64 } { ptr @.str.5855, i64 17, i64 0 }, { ptr, i64, i64 } %t1463) + %t1465 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1464, 0 + %t1466 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t1466, ptr %a1467 + call void @finch.copy.S_ast_Type(ptr %a1468, ptr %a1467) + %t1469 = load %S.ast.Type, ptr %a1468 + %t1470 = insertvalue %S.gen.Val %t1465, %S.ast.Type %t1469, 1 + %t1471 = insertvalue %S.gen.Val %t1470, i1 true, 2 + call void @finch_str_drop(ptr %a1455) + call void @finch_str_drop(ptr %a1400) + call void @finch.drop.arr_str(ptr %a1364) + call void @finch_str_drop(ptr %a1360) + call void @finch_str_drop(ptr %a1356) + call void @finch_str_drop(ptr %a1315) + call void @finch_str_drop(ptr %a1312) + call void @finch_str_drop(ptr %a1251) + call void @finch_str_drop(ptr %a1231) + call void @finch_str_drop(ptr %a1211) + call void @finch_str_drop(ptr %a1197) + call void @finch_str_drop(ptr %a1193) + call void @finch_str_drop(ptr %a1166) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t1471 +endif8939: + %t1472 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t1472, ptr %a1473 + store { ptr, i64, i64 } { ptr @.str.5856, i64 4, i64 0 }, ptr %a1474 + %t1475 = call i32 @finch_str_eq(ptr %a1473, ptr %a1474) + %t1476 = icmp ne i32 %t1475, 0 + br i1 %t1476, label %then8952, label %endif8954 +then8952: + %t1477 = load ptr, ptr %a1 + %t1478 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t1477, %S.ast.Node %t1478, i64 0) + %t1479 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 + %t1480 = load { ptr, i64, i64 }, ptr %t1479 + store { ptr, i64, i64 } %t1480, ptr %a1481 + call void @finch_str_copy(ptr %a1482, ptr %a1481) + %t1483 = load { ptr, i64, i64 }, ptr %a1482 + store { ptr, i64, i64 } %t1483, ptr %a1484 + %t1485 = load %S.ast.Type, ptr %a15 + %t1486 = call i1 @finch.gen.isNumber(%S.ast.Type %t1485) + %t1487 = xor i1 %t1486, true + br label %logic.from8955 +logic.from8955: + br i1 %t1487, label %logic.rhs8956, label %logic.end8957 +logic.rhs8956: + %t1488 = load { ptr, i64, i64 }, ptr %a1484 + store { ptr, i64, i64 } %t1488, ptr %a1489 + store { ptr, i64, i64 } { ptr @.str.5857, i64 4, i64 0 }, ptr %a1490 + %t1491 = call i32 @finch_str_eq(ptr %a1489, ptr %a1490) + %t1492 = icmp eq i32 %t1491, 0 + br label %logic.rend8958 +logic.rend8958: + br label %logic.end8957 +logic.end8957: + %t1493 = phi i1 [ false, %logic.from8955 ], [ %t1492, %logic.rend8958 ] + br label %logic.from8959 +logic.from8959: + br i1 %t1493, label %logic.rhs8960, label %logic.end8961 +logic.rhs8960: + %t1494 = load { ptr, i64, i64 }, ptr %a1484 + store { ptr, i64, i64 } %t1494, ptr %a1495 + store { ptr, i64, i64 } { ptr @.str.5858, i64 3, i64 0 }, ptr %a1496 + %t1497 = call i32 @finch_str_eq(ptr %a1495, ptr %a1496) + %t1498 = icmp eq i32 %t1497, 0 + br label %logic.rend8962 +logic.rend8962: + br label %logic.end8961 +logic.end8961: + %t1499 = phi i1 [ false, %logic.from8959 ], [ %t1498, %logic.rend8962 ] + br i1 %t1499, label %then8963, label %endif8965 +then8963: + %t1500 = load ptr, ptr %a1 + %t1501 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t1500, %S.ast.Node %t1501, { ptr, i64, i64 } { ptr @.str.5859, i64 47, i64 0 }) + br label %endif8965 +endif8965: + %t1502 = load ptr, ptr %a1 + %t1503 = load %S.ast.Type, ptr %a15 + %t1504 = call { ptr, i64, i64 } @finch.gen.cmpFn(ptr %t1502, %S.ast.Type %t1503) + store { ptr, i64, i64 } %t1504, ptr %a1505 + %t1506 = load ptr, ptr %a1 + %t1507 = load { ptr, i64, i64 }, ptr %a39 + %t1508 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1506, { ptr, i64, i64 } { ptr @.str.5860, i64 3, i64 0 }, { ptr, i64, i64 } %t1507) + store { ptr, i64, i64 } %t1508, ptr %a1509 + %t1510 = load ptr, ptr %a1 + %t1511 = load { ptr, i64, i64 }, ptr %a3 + %t1512 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1510, { ptr, i64, i64 } { ptr @.str.5861, i64 3, i64 0 }, { ptr, i64, i64 } %t1511) + store { ptr, i64, i64 } %t1512, ptr %a1513 + %t1514 = load ptr, ptr %a1 + %t1515 = load { ptr, i64, i64 }, ptr %a1513 + store { ptr, i64, i64 } { ptr @.str.5862, i64 21, i64 0 }, ptr %a1517 + store { ptr, i64, i64 } %t1515, ptr %a1518 + call void @finch_str_concat(ptr %a1516, ptr %a1517, ptr %a1518) + %t1519 = load { ptr, i64, i64 }, ptr %a1516 + store { ptr, i64, i64 } %t1519, ptr %a1521 + store { ptr, i64, i64 } { ptr @.str.5863, i64 6, i64 0 }, ptr %a1522 + call void @finch_str_concat(ptr %a1520, ptr %a1521, ptr %a1522) + store { ptr, i64, i64 } %t1519, ptr %a1523 + call void @finch_str_drop(ptr %a1523) + %t1524 = load { ptr, i64, i64 }, ptr %a1520 + %t1525 = load { ptr, i64, i64 }, ptr %a1509 + store { ptr, i64, i64 } %t1524, ptr %a1527 + store { ptr, i64, i64 } %t1525, ptr %a1528 + call void @finch_str_concat(ptr %a1526, ptr %a1527, ptr %a1528) + store { ptr, i64, i64 } %t1524, ptr %a1529 + call void @finch_str_drop(ptr %a1529) + %t1530 = load { ptr, i64, i64 }, ptr %a1526 + store { ptr, i64, i64 } %t1530, ptr %a1532 + store { ptr, i64, i64 } { ptr @.str.5864, i64 6, i64 0 }, ptr %a1533 + call void @finch_str_concat(ptr %a1531, ptr %a1532, ptr %a1533) + store { ptr, i64, i64 } %t1530, ptr %a1534 + call void @finch_str_drop(ptr %a1534) + %t1535 = load { ptr, i64, i64 }, ptr %a1531 + %t1536 = load ptr, ptr %a1 + %t1537 = load %S.ast.Type, ptr %a15 + %t1538 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1536, %S.ast.Type %t1537) + store { ptr, i64, i64 } %t1535, ptr %a1540 + store { ptr, i64, i64 } %t1538, ptr %a1541 + call void @finch_str_concat(ptr %a1539, ptr %a1540, ptr %a1541) + store { ptr, i64, i64 } %t1535, ptr %a1542 + call void @finch_str_drop(ptr %a1542) + store { ptr, i64, i64 } %t1538, ptr %a1543 + call void @finch_str_drop(ptr %a1543) + %t1544 = load { ptr, i64, i64 }, ptr %a1539 + store { ptr, i64, i64 } %t1544, ptr %a1546 + store { ptr, i64, i64 } { ptr @.str.5865, i64 6, i64 0 }, ptr %a1547 + call void @finch_str_concat(ptr %a1545, ptr %a1546, ptr %a1547) + store { ptr, i64, i64 } %t1544, ptr %a1548 + call void @finch_str_drop(ptr %a1548) + %t1549 = load { ptr, i64, i64 }, ptr %a1545 + %t1550 = load { ptr, i64, i64 }, ptr %a1505 + store { ptr, i64, i64 } %t1549, ptr %a1552 + store { ptr, i64, i64 } %t1550, ptr %a1553 + call void @finch_str_concat(ptr %a1551, ptr %a1552, ptr %a1553) + store { ptr, i64, i64 } %t1549, ptr %a1554 + call void @finch_str_drop(ptr %a1554) + %t1555 = load { ptr, i64, i64 }, ptr %a1551 + store { ptr, i64, i64 } %t1555, ptr %a1557 + store { ptr, i64, i64 } { ptr @.str.5866, i64 1, i64 0 }, ptr %a1558 + call void @finch_str_concat(ptr %a1556, ptr %a1557, ptr %a1558) + store { ptr, i64, i64 } %t1555, ptr %a1559 + call void @finch_str_drop(ptr %a1559) + %t1560 = load { ptr, i64, i64 }, ptr %a1556 + call void @finch.gen.emit(ptr %t1514, { ptr, i64, i64 } %t1560) + store { ptr, i64, i64 } %t1560, ptr %a1561 + call void @finch_str_drop(ptr %a1561) + %t1562 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5867, i64 4, i64 0 }) + %t1563 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1562, 1 + call void @finch_str_drop(ptr %a1513) + call void @finch_str_drop(ptr %a1509) + call void @finch_str_drop(ptr %a1505) + call void @finch_str_drop(ptr %a1484) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t1563 +endif8954: + %t1564 = load ptr, ptr %a1 + %t1565 = load %S.ast.Node, ptr %a2 + %t1566 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.5868, i64 24, i64 0 }, ptr %a1568 + store { ptr, i64, i64 } %t1566, ptr %a1569 + call void @finch_str_concat(ptr %a1567, ptr %a1568, ptr %a1569) + %t1570 = load { ptr, i64, i64 }, ptr %a1567 + store { ptr, i64, i64 } %t1570, ptr %a1572 + store { ptr, i64, i64 } { ptr @.str.5869, i64 96, i64 0 }, ptr %a1573 + call void @finch_str_concat(ptr %a1571, ptr %a1572, ptr %a1573) + store { ptr, i64, i64 } %t1570, ptr %a1574 + call void @finch_str_drop(ptr %a1574) + %t1575 = load { ptr, i64, i64 }, ptr %a1571 + call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1575) + store { ptr, i64, i64 } %t1575, ptr %a1576 + call void @finch_str_drop(ptr %a1576) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val zeroinitializer +} + +define internal void @finch.gen.dropFrom(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca %S.ast.Type, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a15 = alloca %S.ast.Type, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range8966, label %inrange8967 +range8966: + call void @finch_panic_index(ptr @.str.5870, i64 5565, i64 0, i64 %t7) + unreachable +inrange8967: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 + %t11 = load %S.ast.Type, ptr %t10 + store %S.ast.Type %t11, ptr %a12 + call void @finch.copy.S_ast_Type(ptr %a13, ptr %a12) + %t14 = load %S.ast.Type, ptr %a13 + store %S.ast.Type %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Type, ptr %a15 + %t18 = call i1 @finch.gen.owning(ptr %t16, %S.ast.Type %t17) + %t19 = xor i1 %t18, true + br i1 %t19, label %then8968, label %endif8970 +then8968: + call void @finch.drop.S_ast_Type(ptr %a15) + ret void +endif8970: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Type, ptr %a15 + %t22 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t20, %S.ast.Type %t21) + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = load ptr, ptr %a1 + %t26 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.5872, i64 46, i64 0 }, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.5873, i64 14, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + %t36 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t35) + store { ptr, i64, i64 } %t35, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = call { ptr, i64, i64 } @finch.gen.load(ptr %t24, { ptr, i64, i64 } { ptr @.str.5871, i64 3, i64 0 }, { ptr, i64, i64 } %t36) + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_drop(ptr %a39) + store { ptr, i64, i64 } %t38, ptr %a40 + %t41 = load ptr, ptr %a1 + %t42 = load { ptr, i64, i64 }, ptr %a2 + %t43 = call { ptr, i64, i64 } @finch.gen.load(ptr %t41, { ptr, i64, i64 } { ptr @.str.5874, i64 3, i64 0 }, { ptr, i64, i64 } %t42) + store { ptr, i64, i64 } %t43, ptr %a44 + %t45 = load ptr, ptr %a1 + %t46 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.5875, i64 13, i64 0 }, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.5876, i64 2, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t55, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t45, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t61, ptr %a63 + call void @finch_str_drop(ptr %a63) + store { ptr, i64, i64 } %t62, ptr %a64 + %t65 = load ptr, ptr %a1 + %t66 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.5877, i64 13, i64 0 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.5878, i64 3, i64 0 }, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t70, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + %t76 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t75) + store { ptr, i64, i64 } %t75, ptr %a77 + call void @finch_str_drop(ptr %a77) + store { ptr, i64, i64 } %t76, ptr %a78 + %t79 = load ptr, ptr %a1 + %t80 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.5879, i64 10, i64 0 }, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t84, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.5880, i64 6, i64 0 }, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + %t90 = load ptr, ptr %a1 + %t91 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.5881, i64 10, i64 0 }, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t95, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.5882, i64 13, i64 0 }, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + %t101 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t100, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t100, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + %t107 = call { ptr, i64, i64 } @finch.gen.op(ptr %t90, { ptr, i64, i64 } %t106) + store { ptr, i64, i64 } %t106, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t89, ptr %a110 + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t89, ptr %a112 + call void @finch_str_drop(ptr %a112) + store { ptr, i64, i64 } %t107, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.5883, i64 6, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t119, ptr %a122 + store { ptr, i64, i64 } %t120, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t119, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + %t126 = call { ptr, i64, i64 } @finch.gen.op(ptr %t79, { ptr, i64, i64 } %t125) + store { ptr, i64, i64 } %t125, ptr %a127 + call void @finch_str_drop(ptr %a127) + store { ptr, i64, i64 } %t126, ptr %a128 + %t129 = load ptr, ptr %a1 + %t130 = load ptr, ptr %a1 + %t131 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.5884, i64 8, i64 0 }, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t135, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.5885, i64 2, i64 0 }, ptr %a138 + call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) + store { ptr, i64, i64 } %t135, ptr %a139 + call void @finch_str_drop(ptr %a139) + %t140 = load { ptr, i64, i64 }, ptr %a136 + %t141 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t140, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t140, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + %t147 = call { ptr, i64, i64 } @finch.gen.op(ptr %t130, { ptr, i64, i64 } %t146) + store { ptr, i64, i64 } %t146, ptr %a148 + call void @finch_str_drop(ptr %a148) + %t149 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t129, { ptr, i64, i64 } %t147) + store { ptr, i64, i64 } %t147, ptr %a150 + call void @finch_str_drop(ptr %a150) + store { ptr, i64, i64 } %t149, ptr %a151 + %t152 = load ptr, ptr %a1 + %t153 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.5886, i64 23, i64 0 }, ptr %a155 + store { ptr, i64, i64 } %t153, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a154 + store { ptr, i64, i64 } %t157, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.5887, i64 6, i64 0 }, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t157, ptr %a161 + call void @finch_str_drop(ptr %a161) + %t162 = load { ptr, i64, i64 }, ptr %a158 + %t163 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t162, ptr %a165 + store { ptr, i64, i64 } %t163, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t162, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + store { ptr, i64, i64 } %t168, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.5888, i64 6, i64 0 }, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t168, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a169 + %t174 = load ptr, ptr %a1 + %t175 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.5889, i64 8, i64 0 }, ptr %a177 + store { ptr, i64, i64 } %t175, ptr %a178 + call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a176 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.5890, i64 2, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + store { ptr, i64, i64 } %t179, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a180 + %t185 = load { ptr, i64, i64 }, ptr %a151 + %t186 = extractvalue { ptr, i64, i64 } %t185, 1 + %t187 = icmp uge i64 3, %t186 + br i1 %t187, label %range8971, label %inrange8972 +range8971: + call void @finch_panic_index(ptr @.str.5891, i64 5576, i64 3, i64 %t186) + unreachable +inrange8972: + %t188 = extractvalue { ptr, i64, i64 } %t185, 0 + %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i64 3 + %t190 = load { ptr, i64, i64 }, ptr %t189 + store { ptr, i64, i64 } %t184, ptr %a192 + store { ptr, i64, i64 } %t190, ptr %a193 + call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) + store { ptr, i64, i64 } %t184, ptr %a194 + call void @finch_str_drop(ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a191 + %t196 = call { ptr, i64, i64 } @finch.gen.op(ptr %t174, { ptr, i64, i64 } %t195) + store { ptr, i64, i64 } %t195, ptr %a197 + call void @finch_str_drop(ptr %a197) + store { ptr, i64, i64 } %t173, ptr %a199 + store { ptr, i64, i64 } %t196, ptr %a200 + call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) + store { ptr, i64, i64 } %t173, ptr %a201 + call void @finch_str_drop(ptr %a201) + store { ptr, i64, i64 } %t196, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a198 + %t204 = call { ptr, i64, i64 } @finch.gen.op(ptr %t152, { ptr, i64, i64 } %t203) + store { ptr, i64, i64 } %t203, ptr %a205 + call void @finch_str_drop(ptr %a205) + store { ptr, i64, i64 } %t204, ptr %a206 + %t207 = load ptr, ptr %a1 + %t208 = load { ptr, i64, i64 }, ptr %a206 + %t209 = load %S.ast.Type, ptr %a15 + call void @finch.gen.dropAt(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t209) + %t210 = load ptr, ptr %a1 + %t211 = load { ptr, i64, i64 }, ptr %a151 + call void @finch.gen.loopEnd(ptr %t210, { ptr, i64, i64 } %t211) + call void @finch_str_drop(ptr %a206) + call void @finch.drop.arr_str(ptr %a151) + call void @finch_str_drop(ptr %a128) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a64) + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a40) + call void @finch_str_drop(ptr %a23) + call void @finch.drop.S_ast_Type(ptr %a15) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.cmpFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.5892, i64 11, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic8973, label %ok8974 +panic8973: + call void @finch_panic(ptr @.str.5893, i64 5584, ptr @.str.5894) + unreachable +ok8974: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then8975, label %endif8977 +then8975: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif8977: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic8978, label %ok8979 +panic8978: + call void @finch_panic(ptr @.str.5895, i64 5587, ptr @.str.5896) + unreachable +ok8979: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.5897, i64 0, i64 0 }, ptr %a33 + %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.5898, i64 3, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br i1 %t39, label %then8980, label %else8981 +then8980: + %t40 = load ptr, ptr %a1 + %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t40, { ptr, i64, i64 } { ptr @.str.5899, i64 39, i64 0 }) + store { ptr, i64, i64 } %t41, ptr %a42 + %t43 = load ptr, ptr %a1 + %t44 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.5900, i64 10, i64 0 }, ptr %a46 + store { ptr, i64, i64 } %t44, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.5901, i64 7, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = call { ptr, i64, i64 } @finch.gen.op(ptr %t43, { ptr, i64, i64 } %t53) + store { ptr, i64, i64 } %t53, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t54, ptr %a33 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_drop(ptr %a57) + call void @finch_str_drop(ptr %a42) + br label %endif8982 +else8981: + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Type, ptr %a2 + %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) + store { ptr, i64, i64 } %t60, ptr %a61 + %t62 = load ptr, ptr %a1 + %t63 = load { ptr, i64, i64 }, ptr %a61 + %t64 = call { ptr, i64, i64 } @finch.gen.load(ptr %t62, { ptr, i64, i64 } %t63, { ptr, i64, i64 } { ptr @.str.5902, i64 2, i64 0 }) + store { ptr, i64, i64 } %t64, ptr %a65 + %t66 = load ptr, ptr %a1 + %t67 = load { ptr, i64, i64 }, ptr %a61 + %t68 = call { ptr, i64, i64 } @finch.gen.load(ptr %t66, { ptr, i64, i64 } %t67, { ptr, i64, i64 } { ptr @.str.5903, i64 2, i64 0 }) + store { ptr, i64, i64 } %t68, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.5904, i64 0, i64 0 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.5905, i64 0, i64 0 }, ptr %a71 + %t72 = load %S.ast.Type, ptr %a2 + %t73 = call i1 @finch.gen.isFloat(%S.ast.Type %t72) + br i1 %t73, label %then8983, label %else8984 +then8983: + %t74 = load ptr, ptr %a1 + %t75 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.5906, i64 9, i64 0 }, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.5907, i64 1, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + %t85 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t84, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t84, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t90, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.5908, i64 2, i64 0 }, ptr %a93 + call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) + store { ptr, i64, i64 } %t90, ptr %a94 + call void @finch_str_drop(ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a91 + %t96 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t95, ptr %a98 + store { ptr, i64, i64 } %t96, ptr %a99 + call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) + store { ptr, i64, i64 } %t95, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a97 + %t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t74, { ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t101, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t102, ptr %a70 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load ptr, ptr %a1 + %t107 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.5909, i64 9, i64 0 }, ptr %a109 + store { ptr, i64, i64 } %t107, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t111, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.5910, i64 1, i64 0 }, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t111, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a112 + %t117 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t116, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t116, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t122, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.5911, i64 2, i64 0 }, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + store { ptr, i64, i64 } %t122, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a123 + %t128 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t127, ptr %a130 + store { ptr, i64, i64 } %t128, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + store { ptr, i64, i64 } %t127, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a129 + %t134 = call { ptr, i64, i64 } @finch.gen.op(ptr %t106, { ptr, i64, i64 } %t133) + store { ptr, i64, i64 } %t133, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t134, ptr %a71 + store { ptr, i64, i64 } %t136, ptr %a137 + call void @finch_str_drop(ptr %a137) + br label %endif8985 +else8984: + %t138 = load ptr, ptr %a1 + %t139 = load %S.ast.Type, ptr %a2 + %t140 = call i1 @finch.gen.isSigned(%S.ast.Type %t139) + %t141 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5913, i64 1, i64 0 }, i1 %t140) + store { ptr, i64, i64 } { ptr @.str.5912, i64 5, i64 0 }, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.5914, i64 1, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t151, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t151, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + store { ptr, i64, i64 } %t157, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.5915, i64 1, i64 0 }, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t157, ptr %a161 + call void @finch_str_drop(ptr %a161) + %t162 = load { ptr, i64, i64 }, ptr %a158 + %t163 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t162, ptr %a165 + store { ptr, i64, i64 } %t163, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t162, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + store { ptr, i64, i64 } %t168, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.5916, i64 2, i64 0 }, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t168, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a169 + %t174 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t173, ptr %a176 + store { ptr, i64, i64 } %t174, ptr %a177 + call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) + store { ptr, i64, i64 } %t173, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a175 + %t180 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t179) + store { ptr, i64, i64 } %t179, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t180, ptr %a70 + store { ptr, i64, i64 } %t182, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load ptr, ptr %a1 + %t185 = load %S.ast.Type, ptr %a2 + %t186 = call i1 @finch.gen.isSigned(%S.ast.Type %t185) + %t187 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5918, i64 1, i64 0 }, i1 %t186) + store { ptr, i64, i64 } { ptr @.str.5917, i64 5, i64 0 }, ptr %a189 + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.5919, i64 1, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load { ptr, i64, i64 }, ptr %a193 + %t198 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t197, ptr %a200 + store { ptr, i64, i64 } %t198, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + store { ptr, i64, i64 } %t197, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t203, ptr %a205 + store { ptr, i64, i64 } { ptr @.str.5920, i64 1, i64 0 }, ptr %a206 + call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) + store { ptr, i64, i64 } %t203, ptr %a207 + call void @finch_str_drop(ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a204 + %t209 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t208, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t208, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } %t214, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.5921, i64 2, i64 0 }, ptr %a217 + call void @finch_str_concat(ptr %a215, ptr %a216, ptr %a217) + store { ptr, i64, i64 } %t214, ptr %a218 + call void @finch_str_drop(ptr %a218) + %t219 = load { ptr, i64, i64 }, ptr %a215 + %t220 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t219, ptr %a222 + store { ptr, i64, i64 } %t220, ptr %a223 + call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) + store { ptr, i64, i64 } %t219, ptr %a224 + call void @finch_str_drop(ptr %a224) + %t225 = load { ptr, i64, i64 }, ptr %a221 + %t226 = call { ptr, i64, i64 } @finch.gen.op(ptr %t184, { ptr, i64, i64 } %t225) + store { ptr, i64, i64 } %t225, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t226, ptr %a71 + store { ptr, i64, i64 } %t228, ptr %a229 + call void @finch_str_drop(ptr %a229) + br label %endif8985 +endif8985: + %t230 = load ptr, ptr %a1 + %t231 = load ptr, ptr %a1 + %t232 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.5923, i64 8, i64 0 }, ptr %a234 + store { ptr, i64, i64 } %t232, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a233 + store { ptr, i64, i64 } %t236, ptr %a238 + store { ptr, i64, i64 } { ptr @.str.5924, i64 7, i64 0 }, ptr %a239 + call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) + store { ptr, i64, i64 } %t236, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = load { ptr, i64, i64 }, ptr %a237 + %t242 = call { ptr, i64, i64 } @finch.gen.op(ptr %t231, { ptr, i64, i64 } %t241) + store { ptr, i64, i64 } %t241, ptr %a243 + call void @finch_str_drop(ptr %a243) + store { ptr, i64, i64 } { ptr @.str.5922, i64 8, i64 0 }, ptr %a245 + store { ptr, i64, i64 } %t242, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t242, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + store { ptr, i64, i64 } %t248, ptr %a250 + store { ptr, i64, i64 } { ptr @.str.5925, i64 2, i64 0 }, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t248, ptr %a252 + call void @finch_str_drop(ptr %a252) + %t253 = load { ptr, i64, i64 }, ptr %a249 + %t254 = load ptr, ptr %a1 + %t255 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.5926, i64 8, i64 0 }, ptr %a257 + store { ptr, i64, i64 } %t255, ptr %a258 + call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) + %t259 = load { ptr, i64, i64 }, ptr %a256 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.5927, i64 7, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + store { ptr, i64, i64 } %t259, ptr %a263 + call void @finch_str_drop(ptr %a263) + %t264 = load { ptr, i64, i64 }, ptr %a260 + %t265 = call { ptr, i64, i64 } @finch.gen.op(ptr %t254, { ptr, i64, i64 } %t264) + store { ptr, i64, i64 } %t264, ptr %a266 + call void @finch_str_drop(ptr %a266) + store { ptr, i64, i64 } %t253, ptr %a268 + store { ptr, i64, i64 } %t265, ptr %a269 + call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) + store { ptr, i64, i64 } %t253, ptr %a270 + call void @finch_str_drop(ptr %a270) + store { ptr, i64, i64 } %t265, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load { ptr, i64, i64 }, ptr %a267 + %t273 = call { ptr, i64, i64 } @finch.gen.op(ptr %t230, { ptr, i64, i64 } %t272) + store { ptr, i64, i64 } %t272, ptr %a274 + call void @finch_str_drop(ptr %a274) + %t275 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t273, ptr %a33 + store { ptr, i64, i64 } %t275, ptr %a276 + call void @finch_str_drop(ptr %a276) + call void @finch_str_drop(ptr %a71) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a69) + call void @finch_str_drop(ptr %a65) + call void @finch_str_drop(ptr %a61) + br label %endif8982 +endif8982: + %t277 = load ptr, ptr %a1 + %t278 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.5928, i64 8, i64 0 }, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + %t282 = load { ptr, i64, i64 }, ptr %a279 + call void @finch.gen.emit(ptr %t277, { ptr, i64, i64 } %t282) + store { ptr, i64, i64 } %t282, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load ptr, ptr %a1 + %t285 = load %S.gen.Saved, ptr %a32 + %t286 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.5929, i64 20, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t290, ptr %a292 + store { ptr, i64, i64 } { ptr @.str.5930, i64 16, i64 0 }, ptr %a293 + call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293) + store { ptr, i64, i64 } %t290, ptr %a294 + call void @finch_str_drop(ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a291 + call void @finch.gen.endHelper(ptr %t284, %S.gen.Saved %t285, { ptr, i64, i64 } %t295) + store { ptr, i64, i64 } %t295, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a10 + call void @finch_str_drop(ptr %a33) + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t297 +} + +define internal %S.gen.Val @finch.gen.strMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca %S.gen.Val, align 16 + %a54 = alloca %S.ast.Type, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca %S.gen.Val, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca %S.gen.Val, align 16 + %a81 = alloca %S.ast.Type, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca %S.gen.Val, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca %S.gen.Val, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca %S.gen.Val, align 16 + %a446 = alloca i64, align 16 + %a458 = alloca %S.gen.Val, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca %S.gen.Val, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca %S.ast.Type, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca %S.gen.Val, align 16 + %a621 = alloca %S.ast.Type, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca %S.gen.Val, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a634 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a645 = alloca { ptr, i64, i64 }, align 16 + %a646 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a648 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a653 = alloca { ptr, i64, i64 }, align 16 + %a654 = alloca { ptr, i64, i64 }, align 16 + %a656 = alloca { ptr, i64, i64 }, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a686 = alloca { ptr, i64, i64 }, align 16 + %a687 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a697 = alloca { ptr, i64, i64 }, align 16 + %a698 = alloca { ptr, i64, i64 }, align 16 + %a699 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca %S.ast.Type, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a716 = alloca { ptr, i64, i64 }, align 16 + %a718 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + call void @finch_str_copy(ptr %a7, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load ptr, ptr %a1 + %t11 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t10) + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic8986, label %ok8987 +panic8986: + call void @finch_panic(ptr @.str.5931, i64 5616, ptr @.str.5932) + unreachable +ok8987: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 1 + %t17 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t18 = load i64, ptr %t17 + %t19 = load { ptr, i64, i64 }, ptr %t16 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range8988, label %inrange8989 +range8988: + call void @finch_panic_index(ptr @.str.5933, i64 5616, i64 %t18, i64 %t20) + unreachable +inrange8989: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 + %t24 = load { ptr, i64, i64 }, ptr %t23 + %t25 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t13, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.5934, i64 3, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %then8990, label %endif8992 +then8990: + %t32 = load ptr, ptr %a1 + %t33 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t32, %S.ast.Node %t33, i64 2) + %t34 = load ptr, ptr %a1 + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 1, %t38 + br i1 %t39, label %range8993, label %inrange8994 +range8993: + call void @finch_panic_index(ptr @.str.5935, i64 5619, i64 1, i64 %t38) + unreachable +inrange8994: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 + %t42 = load %S.ast.Node, ptr %t41 + %t43 = call %S.gen.Val @finch.gen.expr(ptr %t35, %S.ast.Node %t42) + %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5936, i64 3, i64 0 }) + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range8995, label %inrange8996 +range8995: + call void @finch_panic_index(ptr @.str.5937, i64 5619, i64 1, i64 %t47) + unreachable +inrange8996: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 + %t51 = load %S.ast.Node, ptr %t50 + %t52 = call %S.gen.Val @finch.gen.coerce(ptr %t34, %S.gen.Val %t43, %S.ast.Type %t44, %S.ast.Node %t51, { ptr, i64, i64 } { ptr @.str.5938, i64 9, i64 0 }) + store %S.gen.Val %t43, ptr %a53 + call void @finch.drop.S_gen_Val(ptr %a53) + store %S.ast.Type %t44, ptr %a54 + call void @finch.drop.S_ast_Type(ptr %a54) + %t55 = extractvalue %S.gen.Val %t52, 0 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_copy(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + store %S.gen.Val %t52, ptr %a59 + call void @finch.drop.S_gen_Val(ptr %a59) + store { ptr, i64, i64 } %t58, ptr %a60 + %t61 = load ptr, ptr %a1 + %t62 = load ptr, ptr %a1 + %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = extractvalue { ptr, i64, i64 } %t64, 1 + %t66 = icmp uge i64 2, %t65 + br i1 %t66, label %range8997, label %inrange8998 +range8997: + call void @finch_panic_index(ptr @.str.5939, i64 5620, i64 2, i64 %t65) + unreachable +inrange8998: + %t67 = extractvalue { ptr, i64, i64 } %t64, 0 + %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 2 + %t69 = load %S.ast.Node, ptr %t68 + %t70 = call %S.gen.Val @finch.gen.expr(ptr %t62, %S.ast.Node %t69) + %t71 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5940, i64 3, i64 0 }) + %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 2, %t74 + br i1 %t75, label %range8999, label %inrange9000 +range8999: + call void @finch_panic_index(ptr @.str.5941, i64 5620, i64 2, i64 %t74) + unreachable +inrange9000: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 2 + %t78 = load %S.ast.Node, ptr %t77 + %t79 = call %S.gen.Val @finch.gen.coerce(ptr %t61, %S.gen.Val %t70, %S.ast.Type %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5942, i64 7, i64 0 }) + store %S.gen.Val %t70, ptr %a80 + call void @finch.drop.S_gen_Val(ptr %a80) + store %S.ast.Type %t71, ptr %a81 + call void @finch.drop.S_ast_Type(ptr %a81) + %t82 = extractvalue %S.gen.Val %t79, 0 + store { ptr, i64, i64 } %t82, ptr %a83 + call void @finch_str_copy(ptr %a84, ptr %a83) + %t85 = load { ptr, i64, i64 }, ptr %a84 + store %S.gen.Val %t79, ptr %a86 + call void @finch.drop.S_gen_Val(ptr %a86) + store { ptr, i64, i64 } %t85, ptr %a87 + %t88 = load ptr, ptr %a1 + %t89 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.5943, i64 29, i64 0 }, ptr %a91 + store { ptr, i64, i64 } %t89, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.5944, i64 6, i64 0 }, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + %t99 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t98, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t98, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.5945, i64 6, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t109, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t109, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + store { ptr, i64, i64 } %t115, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.5946, i64 6, i64 0 }, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t115, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a116 + %t121 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t120, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t120, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t126, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.5947, i64 6, i64 0 }, ptr %a129 + call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) + store { ptr, i64, i64 } %t126, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load { ptr, i64, i64 }, ptr %a127 + %t132 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t131, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t131, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.5948, i64 6, i64 0 }, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t137, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t144 = load i64, ptr %t143 + call void @finch_str_from_int(ptr %a145, i64 %t144) + %t146 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t142, ptr %a148 + store { ptr, i64, i64 } %t146, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t142, ptr %a150 + call void @finch_str_drop(ptr %a150) + store { ptr, i64, i64 } %t146, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a147 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.5949, i64 1, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } %t157) + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load ptr, ptr %a1 + %t160 = load { ptr, i64, i64 }, ptr %a12 + %t161 = call { ptr, i64, i64 } @finch.gen.load(ptr %t159, { ptr, i64, i64 } { ptr @.str.5950, i64 17, i64 0 }, { ptr, i64, i64 } %t160) + %t162 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t161, 0 + %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5951, i64 3, i64 0 }) + %t164 = insertvalue %S.gen.Val %t162, %S.ast.Type %t163, 1 + %t165 = insertvalue %S.gen.Val %t164, i1 true, 2 + call void @finch_str_drop(ptr %a87) + call void @finch_str_drop(ptr %a60) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t165 +endif8992: + %t166 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.5952, i64 4, i64 0 }, ptr %a168 + %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) + %t170 = icmp ne i32 %t169, 0 + br label %logic.from9001 +logic.from9001: + br i1 %t170, label %logic.end9003, label %logic.rhs9002 +logic.rhs9002: + %t171 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.5953, i64 8, i64 0 }, ptr %a173 + %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) + %t175 = icmp ne i32 %t174, 0 + br label %logic.rend9004 +logic.rend9004: + br label %logic.end9003 +logic.end9003: + %t176 = phi i1 [ true, %logic.from9001 ], [ %t175, %logic.rend9004 ] + br label %logic.from9005 +logic.from9005: + br i1 %t176, label %logic.end9007, label %logic.rhs9006 +logic.rhs9006: + %t177 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t177, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.5954, i64 11, i64 0 }, ptr %a179 + %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) + %t181 = icmp ne i32 %t180, 0 + br label %logic.rend9008 +logic.rend9008: + br label %logic.end9007 +logic.end9007: + %t182 = phi i1 [ true, %logic.from9005 ], [ %t181, %logic.rend9008 ] + br label %logic.from9009 +logic.from9009: + br i1 %t182, label %logic.end9011, label %logic.rhs9010 +logic.rhs9010: + %t183 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t183, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.5955, i64 9, i64 0 }, ptr %a185 + %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) + %t187 = icmp ne i32 %t186, 0 + br label %logic.rend9012 +logic.rend9012: + br label %logic.end9011 +logic.end9011: + %t188 = phi i1 [ true, %logic.from9009 ], [ %t187, %logic.rend9012 ] + br i1 %t188, label %then9013, label %endif9015 +then9013: + %t189 = load ptr, ptr %a1 + %t190 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t189, %S.ast.Node %t190, i64 1) + %t191 = load ptr, ptr %a1 + %t192 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t193 = load { ptr, i64, i64 }, ptr %t192 + %t194 = extractvalue { ptr, i64, i64 } %t193, 1 + %t195 = icmp uge i64 1, %t194 + br i1 %t195, label %range9016, label %inrange9017 +range9016: + call void @finch_panic_index(ptr @.str.5956, i64 5626, i64 1, i64 %t194) + unreachable +inrange9017: + %t196 = extractvalue { ptr, i64, i64 } %t193, 0 + %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 1 + %t198 = load %S.ast.Node, ptr %t197 + %t199 = call %S.gen.Val @finch.gen.strArg(ptr %t191, %S.ast.Node %t198, { ptr, i64, i64 } { ptr @.str.5957, i64 20, i64 0 }) + store %S.gen.Val %t199, ptr %a200 + %t201 = load ptr, ptr %a1 + %t202 = load %S.gen.Val, ptr %a200 + %t203 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t201, %S.gen.Val %t202) + store { ptr, i64, i64 } %t203, ptr %a204 + %t205 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t205, ptr %a206 + store { ptr, i64, i64 } { ptr @.str.5958, i64 4, i64 0 }, ptr %a207 + %t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207) + %t209 = icmp ne i32 %t208, 0 + br i1 %t209, label %then9018, label %endif9020 +then9018: + %t210 = load ptr, ptr %a1 + %t211 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5959, i64 29, i64 0 }, ptr %a213 + store { ptr, i64, i64 } %t211, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.5960, i64 6, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load { ptr, i64, i64 }, ptr %a216 + %t221 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t220, ptr %a223 + store { ptr, i64, i64 } %t221, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t220, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load { ptr, i64, i64 }, ptr %a222 + store { ptr, i64, i64 } %t226, ptr %a228 + store { ptr, i64, i64 } { ptr @.str.5961, i64 1, i64 0 }, ptr %a229 + call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) + store { ptr, i64, i64 } %t226, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a227 + %t232 = call { ptr, i64, i64 } @finch.gen.op(ptr %t210, { ptr, i64, i64 } %t231) + store { ptr, i64, i64 } %t231, ptr %a233 + call void @finch_str_drop(ptr %a233) + store { ptr, i64, i64 } %t232, ptr %a234 + %t235 = load ptr, ptr %a1 + %t236 = load %S.gen.Val, ptr %a200 + call void @finch.gen.release(ptr %t235, %S.gen.Val %t236) + %t237 = load { ptr, i64, i64 }, ptr %a234 + store { ptr, i64, i64 } %t237, ptr %a238 + call void @finch_str_copy(ptr %a239, ptr %a238) + %t240 = load { ptr, i64, i64 }, ptr %a239 + %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t240, 0 + %t242 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5962, i64 3, i64 0 }) + %t243 = insertvalue %S.gen.Val %t241, %S.ast.Type %t242, 1 + call void @finch_str_drop(ptr %a234) + call void @finch_str_drop(ptr %a204) + call void @finch.drop.S_gen_Val(ptr %a200) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t243 +endif9020: + %t244 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t244, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.5963, i64 8, i64 0 }, ptr %a246 + %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) + %t248 = icmp ne i32 %t247, 0 + br i1 %t248, label %then9021, label %endif9023 +then9021: + %t249 = load ptr, ptr %a1 + %t250 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5964, i64 29, i64 0 }, ptr %a252 + store { ptr, i64, i64 } %t250, ptr %a253 + call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a251 + store { ptr, i64, i64 } %t254, ptr %a256 + store { ptr, i64, i64 } { ptr @.str.5965, i64 6, i64 0 }, ptr %a257 + call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) + store { ptr, i64, i64 } %t254, ptr %a258 + call void @finch_str_drop(ptr %a258) + %t259 = load { ptr, i64, i64 }, ptr %a255 + %t260 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t259, ptr %a262 + store { ptr, i64, i64 } %t260, ptr %a263 + call void @finch_str_concat(ptr %a261, ptr %a262, ptr %a263) + store { ptr, i64, i64 } %t259, ptr %a264 + call void @finch_str_drop(ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a261 + store { ptr, i64, i64 } %t265, ptr %a267 + store { ptr, i64, i64 } { ptr @.str.5966, i64 1, i64 0 }, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t265, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + %t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t249, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a272 + call void @finch_str_drop(ptr %a272) + store { ptr, i64, i64 } %t271, ptr %a273 + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.5967, i64 13, i64 0 }, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t279, ptr %a281 + store { ptr, i64, i64 } { ptr @.str.5968, i64 3, i64 0 }, ptr %a282 + call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) + store { ptr, i64, i64 } %t279, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a280 + %t285 = call { ptr, i64, i64 } @finch.gen.op(ptr %t274, { ptr, i64, i64 } %t284) + store { ptr, i64, i64 } %t284, ptr %a286 + call void @finch_str_drop(ptr %a286) + store { ptr, i64, i64 } %t285, ptr %a287 + %t288 = load ptr, ptr %a1 + %t289 = load %S.gen.Val, ptr %a200 + call void @finch.gen.release(ptr %t288, %S.gen.Val %t289) + %t290 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_copy(ptr %a292, ptr %a291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + %t294 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t293, 0 + %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5969, i64 4, i64 0 }) + %t296 = insertvalue %S.gen.Val %t294, %S.ast.Type %t295, 1 + call void @finch_str_drop(ptr %a287) + call void @finch_str_drop(ptr %a273) + call void @finch_str_drop(ptr %a204) + call void @finch.drop.S_gen_Val(ptr %a200) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t296 +endif9023: + store { ptr, i64, i64 } { ptr @.str.5970, i64 17, i64 0 }, ptr %a297 + %t298 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t298, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.5971, i64 9, i64 0 }, ptr %a300 + %t301 = call i32 @finch_str_eq(ptr %a299, ptr %a300) + %t302 = icmp ne i32 %t301, 0 + br i1 %t302, label %then9024, label %endif9026 +then9024: + %t303 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.5972, i64 15, i64 0 }, ptr %a297 + store { ptr, i64, i64 } %t303, ptr %a304 + call void @finch_str_drop(ptr %a304) + br label %endif9026 +endif9026: + %t305 = load ptr, ptr %a1 + %t306 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.5973, i64 9, i64 0 }, ptr %a308 + store { ptr, i64, i64 } %t306, ptr %a309 + call void @finch_str_concat(ptr %a307, ptr %a308, ptr %a309) + %t310 = load { ptr, i64, i64 }, ptr %a307 + store { ptr, i64, i64 } %t310, ptr %a312 + store { ptr, i64, i64 } { ptr @.str.5974, i64 5, i64 0 }, ptr %a313 + call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) + store { ptr, i64, i64 } %t310, ptr %a314 + call void @finch_str_drop(ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a311 + %t316 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t315, ptr %a318 + store { ptr, i64, i64 } %t316, ptr %a319 + call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) + store { ptr, i64, i64 } %t315, ptr %a320 + call void @finch_str_drop(ptr %a320) + %t321 = load { ptr, i64, i64 }, ptr %a317 + store { ptr, i64, i64 } %t321, ptr %a323 + store { ptr, i64, i64 } { ptr @.str.5975, i64 6, i64 0 }, ptr %a324 + call void @finch_str_concat(ptr %a322, ptr %a323, ptr %a324) + store { ptr, i64, i64 } %t321, ptr %a325 + call void @finch_str_drop(ptr %a325) + %t326 = load { ptr, i64, i64 }, ptr %a322 + %t327 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t326, ptr %a329 + store { ptr, i64, i64 } %t327, ptr %a330 + call void @finch_str_concat(ptr %a328, ptr %a329, ptr %a330) + store { ptr, i64, i64 } %t326, ptr %a331 + call void @finch_str_drop(ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a328 + store { ptr, i64, i64 } %t332, ptr %a334 + store { ptr, i64, i64 } { ptr @.str.5976, i64 1, i64 0 }, ptr %a335 + call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) + store { ptr, i64, i64 } %t332, ptr %a336 + call void @finch_str_drop(ptr %a336) + %t337 = load { ptr, i64, i64 }, ptr %a333 + %t338 = call { ptr, i64, i64 } @finch.gen.op(ptr %t305, { ptr, i64, i64 } %t337) + store { ptr, i64, i64 } %t337, ptr %a339 + call void @finch_str_drop(ptr %a339) + store { ptr, i64, i64 } %t338, ptr %a340 + %t341 = load ptr, ptr %a1 + %t342 = load { ptr, i64, i64 }, ptr %a340 + store { ptr, i64, i64 } { ptr @.str.5977, i64 12, i64 0 }, ptr %a344 + store { ptr, i64, i64 } %t342, ptr %a345 + call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) + %t346 = load { ptr, i64, i64 }, ptr %a343 + store { ptr, i64, i64 } %t346, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.5978, i64 3, i64 0 }, ptr %a349 + call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) + store { ptr, i64, i64 } %t346, ptr %a350 + call void @finch_str_drop(ptr %a350) + %t351 = load { ptr, i64, i64 }, ptr %a347 + %t352 = call { ptr, i64, i64 } @finch.gen.op(ptr %t341, { ptr, i64, i64 } %t351) + store { ptr, i64, i64 } %t351, ptr %a353 + call void @finch_str_drop(ptr %a353) + store { ptr, i64, i64 } %t352, ptr %a354 + %t355 = load ptr, ptr %a1 + %t356 = load %S.gen.Val, ptr %a200 + call void @finch.gen.release(ptr %t355, %S.gen.Val %t356) + %t357 = load { ptr, i64, i64 }, ptr %a354 + store { ptr, i64, i64 } %t357, ptr %a358 + call void @finch_str_copy(ptr %a359, ptr %a358) + %t360 = load { ptr, i64, i64 }, ptr %a359 + %t361 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t360, 0 + %t362 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5979, i64 4, i64 0 }) + %t363 = insertvalue %S.gen.Val %t361, %S.ast.Type %t362, 1 + call void @finch_str_drop(ptr %a354) + call void @finch_str_drop(ptr %a340) + call void @finch_str_drop(ptr %a297) + call void @finch_str_drop(ptr %a204) + call void @finch.drop.S_gen_Val(ptr %a200) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t363 +endif9015: + %t364 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.5980, i64 4, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br label %logic.from9027 +logic.from9027: + br i1 %t368, label %logic.end9029, label %logic.rhs9028 +logic.rhs9028: + %t369 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t369, ptr %a370 + store { ptr, i64, i64 } { ptr @.str.5981, i64 5, i64 0 }, ptr %a371 + %t372 = call i32 @finch_str_eq(ptr %a370, ptr %a371) + %t373 = icmp ne i32 %t372, 0 + br label %logic.rend9030 +logic.rend9030: + br label %logic.end9029 +logic.end9029: + %t374 = phi i1 [ true, %logic.from9027 ], [ %t373, %logic.rend9030 ] + br label %logic.from9031 +logic.from9031: + br i1 %t374, label %logic.end9033, label %logic.rhs9032 +logic.rhs9032: + %t375 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t375, ptr %a376 + store { ptr, i64, i64 } { ptr @.str.5982, i64 5, i64 0 }, ptr %a377 + %t378 = call i32 @finch_str_eq(ptr %a376, ptr %a377) + %t379 = icmp ne i32 %t378, 0 + br label %logic.rend9034 +logic.rend9034: + br label %logic.end9033 +logic.end9033: + %t380 = phi i1 [ true, %logic.from9031 ], [ %t379, %logic.rend9034 ] + br i1 %t380, label %then9035, label %endif9037 +then9035: + %t381 = load ptr, ptr %a1 + %t382 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t381, %S.ast.Node %t382, i64 0) + %t383 = load ptr, ptr %a1 + %t384 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.5983, i64 21, i64 0 }, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + %t388 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t388, ptr %a390 + store { ptr, i64, i64 } { ptr @.str.5984, i64 5, i64 0 }, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t388, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + %t394 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t393, ptr %a396 + store { ptr, i64, i64 } %t394, ptr %a397 + call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) + store { ptr, i64, i64 } %t393, ptr %a398 + call void @finch_str_drop(ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a395 + store { ptr, i64, i64 } %t399, ptr %a401 + store { ptr, i64, i64 } { ptr @.str.5985, i64 6, i64 0 }, ptr %a402 + call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) + store { ptr, i64, i64 } %t399, ptr %a403 + call void @finch_str_drop(ptr %a403) + %t404 = load { ptr, i64, i64 }, ptr %a400 + %t405 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t404, ptr %a407 + store { ptr, i64, i64 } %t405, ptr %a408 + call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408) + store { ptr, i64, i64 } %t404, ptr %a409 + call void @finch_str_drop(ptr %a409) + %t410 = load { ptr, i64, i64 }, ptr %a406 + store { ptr, i64, i64 } %t410, ptr %a412 + store { ptr, i64, i64 } { ptr @.str.5986, i64 1, i64 0 }, ptr %a413 + call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) + store { ptr, i64, i64 } %t410, ptr %a414 + call void @finch_str_drop(ptr %a414) + %t415 = load { ptr, i64, i64 }, ptr %a411 + call void @finch.gen.emit(ptr %t383, { ptr, i64, i64 } %t415) + store { ptr, i64, i64 } %t415, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = load ptr, ptr %a1 + %t418 = load { ptr, i64, i64 }, ptr %a12 + %t419 = call { ptr, i64, i64 } @finch.gen.load(ptr %t417, { ptr, i64, i64 } { ptr @.str.5987, i64 17, i64 0 }, { ptr, i64, i64 } %t418) + %t420 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t419, 0 + %t421 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5988, i64 3, i64 0 }) + %t422 = insertvalue %S.gen.Val %t420, %S.ast.Type %t421, 1 + %t423 = insertvalue %S.gen.Val %t422, i1 true, 2 + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t423 +endif9037: + %t424 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t424, ptr %a425 + store { ptr, i64, i64 } { ptr @.str.5989, i64 7, i64 0 }, ptr %a426 + %t427 = call i32 @finch_str_eq(ptr %a425, ptr %a426) + %t428 = icmp ne i32 %t427, 0 + br i1 %t428, label %then9038, label %endif9040 +then9038: + %t429 = load ptr, ptr %a1 + %t430 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t429, %S.ast.Node %t430, i64 2) + %t431 = load ptr, ptr %a1 + %t432 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t433 = load { ptr, i64, i64 }, ptr %t432 + %t434 = extractvalue { ptr, i64, i64 } %t433, 1 + %t435 = icmp uge i64 1, %t434 + br i1 %t435, label %range9041, label %inrange9042 +range9041: + call void @finch_panic_index(ptr @.str.5990, i64 5655, i64 1, i64 %t434) + unreachable +inrange9042: + %t436 = extractvalue { ptr, i64, i64 } %t433, 0 + %t437 = getelementptr inbounds %S.ast.Node, ptr %t436, i64 1 + %t438 = load %S.ast.Node, ptr %t437 + %t439 = call %S.gen.Val @finch.gen.strArg(ptr %t431, %S.ast.Node %t438, { ptr, i64, i64 } { ptr @.str.5991, i64 19, i64 0 }) + store %S.gen.Val %t439, ptr %a440 + %t441 = load ptr, ptr %a1 + %t442 = icmp eq ptr %t441, null + br i1 %t442, label %panic9043, label %ok9044 +panic9043: + call void @finch_panic(ptr @.str.5992, i64 5656, ptr @.str.5993) + unreachable +ok9044: + %t443 = getelementptr inbounds %S.gen.Gen, ptr %t441, i32 0, i32 11 + %t444 = getelementptr inbounds { ptr, i64, i64 }, ptr %t443, i32 0, i32 1 + %t445 = load i64, ptr %t444 + store i64 %t445, ptr %a446 + %t447 = load ptr, ptr %a1 + %t448 = load %S.gen.Val, ptr %a440 + call void @finch.gen.hold(ptr %t447, %S.gen.Val %t448) + %t449 = load ptr, ptr %a1 + %t450 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t451 = load { ptr, i64, i64 }, ptr %t450 + %t452 = extractvalue { ptr, i64, i64 } %t451, 1 + %t453 = icmp uge i64 2, %t452 + br i1 %t453, label %range9045, label %inrange9046 +range9045: + call void @finch_panic_index(ptr @.str.5994, i64 5658, i64 2, i64 %t452) + unreachable +inrange9046: + %t454 = extractvalue { ptr, i64, i64 } %t451, 0 + %t455 = getelementptr inbounds %S.ast.Node, ptr %t454, i64 2 + %t456 = load %S.ast.Node, ptr %t455 + %t457 = call %S.gen.Val @finch.gen.strArg(ptr %t449, %S.ast.Node %t456, { ptr, i64, i64 } { ptr @.str.5995, i64 12, i64 0 }) + store %S.gen.Val %t457, ptr %a458 + %t459 = load ptr, ptr %a1 + %t460 = load i64, ptr %a446 + call void @finch.gen.heldEnd(ptr %t459, i64 %t460) + %t461 = load ptr, ptr %a1 + %t462 = load %S.gen.Val, ptr %a440 + %t463 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t461, %S.gen.Val %t462) + store { ptr, i64, i64 } %t463, ptr %a464 + %t465 = load ptr, ptr %a1 + %t466 = load %S.gen.Val, ptr %a458 + %t467 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t465, %S.gen.Val %t466) + store { ptr, i64, i64 } %t467, ptr %a468 + %t469 = load ptr, ptr %a1 + %t470 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.5996, i64 33, i64 0 }, ptr %a472 + store { ptr, i64, i64 } %t470, ptr %a473 + call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a471 + store { ptr, i64, i64 } %t474, ptr %a476 + store { ptr, i64, i64 } { ptr @.str.5997, i64 6, i64 0 }, ptr %a477 + call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) + store { ptr, i64, i64 } %t474, ptr %a478 + call void @finch_str_drop(ptr %a478) + %t479 = load { ptr, i64, i64 }, ptr %a475 + %t480 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t479, ptr %a482 + store { ptr, i64, i64 } %t480, ptr %a483 + call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) + store { ptr, i64, i64 } %t479, ptr %a484 + call void @finch_str_drop(ptr %a484) + %t485 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t485, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.5998, i64 6, i64 0 }, ptr %a488 + call void @finch_str_concat(ptr %a486, ptr %a487, ptr %a488) + store { ptr, i64, i64 } %t485, ptr %a489 + call void @finch_str_drop(ptr %a489) + %t490 = load { ptr, i64, i64 }, ptr %a486 + %t491 = load { ptr, i64, i64 }, ptr %a464 + store { ptr, i64, i64 } %t490, ptr %a493 + store { ptr, i64, i64 } %t491, ptr %a494 + call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) + store { ptr, i64, i64 } %t490, ptr %a495 + call void @finch_str_drop(ptr %a495) + %t496 = load { ptr, i64, i64 }, ptr %a492 + store { ptr, i64, i64 } %t496, ptr %a498 + store { ptr, i64, i64 } { ptr @.str.5999, i64 6, i64 0 }, ptr %a499 + call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499) + store { ptr, i64, i64 } %t496, ptr %a500 + call void @finch_str_drop(ptr %a500) + %t501 = load { ptr, i64, i64 }, ptr %a497 + %t502 = load { ptr, i64, i64 }, ptr %a468 + store { ptr, i64, i64 } %t501, ptr %a504 + store { ptr, i64, i64 } %t502, ptr %a505 + call void @finch_str_concat(ptr %a503, ptr %a504, ptr %a505) + store { ptr, i64, i64 } %t501, ptr %a506 + call void @finch_str_drop(ptr %a506) + %t507 = load { ptr, i64, i64 }, ptr %a503 + store { ptr, i64, i64 } %t507, ptr %a509 + store { ptr, i64, i64 } { ptr @.str.6000, i64 1, i64 0 }, ptr %a510 + call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510) + store { ptr, i64, i64 } %t507, ptr %a511 + call void @finch_str_drop(ptr %a511) + %t512 = load { ptr, i64, i64 }, ptr %a508 + call void @finch.gen.emit(ptr %t469, { ptr, i64, i64 } %t512) + store { ptr, i64, i64 } %t512, ptr %a513 + call void @finch_str_drop(ptr %a513) + %t514 = load ptr, ptr %a1 + %t515 = load %S.gen.Val, ptr %a440 + call void @finch.gen.release(ptr %t514, %S.gen.Val %t515) + %t516 = load ptr, ptr %a1 + %t517 = load %S.gen.Val, ptr %a458 + call void @finch.gen.release(ptr %t516, %S.gen.Val %t517) + %t518 = load ptr, ptr %a1 + %t519 = load { ptr, i64, i64 }, ptr %a12 + %t520 = call { ptr, i64, i64 } @finch.gen.load(ptr %t518, { ptr, i64, i64 } { ptr @.str.6001, i64 17, i64 0 }, { ptr, i64, i64 } %t519) + %t521 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t520, 0 + %t522 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6002, i64 3, i64 0 }) + %t523 = insertvalue %S.gen.Val %t521, %S.ast.Type %t522, 1 + %t524 = insertvalue %S.gen.Val %t523, i1 true, 2 + call void @finch_str_drop(ptr %a468) + call void @finch_str_drop(ptr %a464) + call void @finch.drop.S_gen_Val(ptr %a458) + call void @finch.drop.S_gen_Val(ptr %a440) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t524 +endif9040: + %t525 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t525, ptr %a526 + store { ptr, i64, i64 } { ptr @.str.6003, i64 5, i64 0 }, ptr %a527 + %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) + %t529 = icmp ne i32 %t528, 0 + br i1 %t529, label %then9047, label %endif9049 +then9047: + %t530 = load ptr, ptr %a1 + %t531 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t530, %S.ast.Node %t531, i64 1) + %t532 = load ptr, ptr %a1 + %t533 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t534 = load { ptr, i64, i64 }, ptr %t533 + %t535 = extractvalue { ptr, i64, i64 } %t534, 1 + %t536 = icmp uge i64 1, %t535 + br i1 %t536, label %range9050, label %inrange9051 +range9050: + call void @finch_panic_index(ptr @.str.6004, i64 5669, i64 1, i64 %t535) + unreachable +inrange9051: + %t537 = extractvalue { ptr, i64, i64 } %t534, 0 + %t538 = getelementptr inbounds %S.ast.Node, ptr %t537, i64 1 + %t539 = load %S.ast.Node, ptr %t538 + %t540 = call %S.gen.Val @finch.gen.strArg(ptr %t532, %S.ast.Node %t539, { ptr, i64, i64 } { ptr @.str.6005, i64 13, i64 0 }) + store %S.gen.Val %t540, ptr %a541 + %t542 = load ptr, ptr %a1 + %t543 = load %S.gen.Val, ptr %a541 + %t544 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t542, %S.gen.Val %t543) + store { ptr, i64, i64 } %t544, ptr %a545 + %t546 = load ptr, ptr %a1 + %t547 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t546) + store { ptr, i64, i64 } %t547, ptr %a548 + %t549 = load ptr, ptr %a1 + %t550 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } { ptr @.str.6006, i64 31, i64 0 }, ptr %a552 + store { ptr, i64, i64 } %t550, ptr %a553 + call void @finch_str_concat(ptr %a551, ptr %a552, ptr %a553) + %t554 = load { ptr, i64, i64 }, ptr %a551 + store { ptr, i64, i64 } %t554, ptr %a556 + store { ptr, i64, i64 } { ptr @.str.6007, i64 6, i64 0 }, ptr %a557 + call void @finch_str_concat(ptr %a555, ptr %a556, ptr %a557) + store { ptr, i64, i64 } %t554, ptr %a558 + call void @finch_str_drop(ptr %a558) + %t559 = load { ptr, i64, i64 }, ptr %a555 + %t560 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t559, ptr %a562 + store { ptr, i64, i64 } %t560, ptr %a563 + call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) + store { ptr, i64, i64 } %t559, ptr %a564 + call void @finch_str_drop(ptr %a564) + %t565 = load { ptr, i64, i64 }, ptr %a561 + store { ptr, i64, i64 } %t565, ptr %a567 + store { ptr, i64, i64 } { ptr @.str.6008, i64 6, i64 0 }, ptr %a568 + call void @finch_str_concat(ptr %a566, ptr %a567, ptr %a568) + store { ptr, i64, i64 } %t565, ptr %a569 + call void @finch_str_drop(ptr %a569) + %t570 = load { ptr, i64, i64 }, ptr %a566 + %t571 = load { ptr, i64, i64 }, ptr %a545 + store { ptr, i64, i64 } %t570, ptr %a573 + store { ptr, i64, i64 } %t571, ptr %a574 + call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) + store { ptr, i64, i64 } %t570, ptr %a575 + call void @finch_str_drop(ptr %a575) + %t576 = load { ptr, i64, i64 }, ptr %a572 + store { ptr, i64, i64 } %t576, ptr %a578 + store { ptr, i64, i64 } { ptr @.str.6009, i64 1, i64 0 }, ptr %a579 + call void @finch_str_concat(ptr %a577, ptr %a578, ptr %a579) + store { ptr, i64, i64 } %t576, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = load { ptr, i64, i64 }, ptr %a577 + call void @finch.gen.emit(ptr %t549, { ptr, i64, i64 } %t581) + store { ptr, i64, i64 } %t581, ptr %a582 + call void @finch_str_drop(ptr %a582) + %t583 = load ptr, ptr %a1 + %t584 = load %S.gen.Val, ptr %a541 + call void @finch.gen.release(ptr %t583, %S.gen.Val %t584) + %t585 = load ptr, ptr %a1 + %t586 = load { ptr, i64, i64 }, ptr %a548 + %t587 = call { ptr, i64, i64 } @finch.gen.load(ptr %t585, { ptr, i64, i64 } { ptr @.str.6010, i64 17, i64 0 }, { ptr, i64, i64 } %t586) + %t588 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t587, 0 + %t589 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6011, i64 3, i64 0 }) + %t590 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t589) + store %S.ast.Type %t589, ptr %a591 + call void @finch.drop.S_ast_Type(ptr %a591) + %t592 = insertvalue %S.gen.Val %t588, %S.ast.Type %t590, 1 + %t593 = insertvalue %S.gen.Val %t592, i1 true, 2 + call void @finch_str_drop(ptr %a548) + call void @finch_str_drop(ptr %a545) + call void @finch.drop.S_gen_Val(ptr %a541) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t593 +endif9049: + %t594 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t594, ptr %a595 + store { ptr, i64, i64 } { ptr @.str.6012, i64 6, i64 0 }, ptr %a596 + %t597 = call i32 @finch_str_eq(ptr %a595, ptr %a596) + %t598 = icmp ne i32 %t597, 0 + br i1 %t598, label %then9052, label %endif9054 +then9052: + %t599 = load ptr, ptr %a1 + %t600 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t599, %S.ast.Node %t600, i64 1) + %t601 = load ptr, ptr %a1 + %t602 = load ptr, ptr %a1 + %t603 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t604 = load { ptr, i64, i64 }, ptr %t603 + %t605 = extractvalue { ptr, i64, i64 } %t604, 1 + %t606 = icmp uge i64 1, %t605 + br i1 %t606, label %range9055, label %inrange9056 +range9055: + call void @finch_panic_index(ptr @.str.6013, i64 5678, i64 1, i64 %t605) + unreachable +inrange9056: + %t607 = extractvalue { ptr, i64, i64 } %t604, 0 + %t608 = getelementptr inbounds %S.ast.Node, ptr %t607, i64 1 + %t609 = load %S.ast.Node, ptr %t608 + %t610 = call %S.gen.Val @finch.gen.expr(ptr %t602, %S.ast.Node %t609) + %t611 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6014, i64 3, i64 0 }) + %t612 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t613 = load { ptr, i64, i64 }, ptr %t612 + %t614 = extractvalue { ptr, i64, i64 } %t613, 1 + %t615 = icmp uge i64 1, %t614 + br i1 %t615, label %range9057, label %inrange9058 +range9057: + call void @finch_panic_index(ptr @.str.6015, i64 5678, i64 1, i64 %t614) + unreachable +inrange9058: + %t616 = extractvalue { ptr, i64, i64 } %t613, 0 + %t617 = getelementptr inbounds %S.ast.Node, ptr %t616, i64 1 + %t618 = load %S.ast.Node, ptr %t617 + %t619 = call %S.gen.Val @finch.gen.coerce(ptr %t601, %S.gen.Val %t610, %S.ast.Type %t611, %S.ast.Node %t618, { ptr, i64, i64 } { ptr @.str.6016, i64 9, i64 0 }) + store %S.gen.Val %t610, ptr %a620 + call void @finch.drop.S_gen_Val(ptr %a620) + store %S.ast.Type %t611, ptr %a621 + call void @finch.drop.S_ast_Type(ptr %a621) + %t622 = extractvalue %S.gen.Val %t619, 0 + store { ptr, i64, i64 } %t622, ptr %a623 + call void @finch_str_copy(ptr %a624, ptr %a623) + %t625 = load { ptr, i64, i64 }, ptr %a624 + store %S.gen.Val %t619, ptr %a626 + call void @finch.drop.S_gen_Val(ptr %a626) + store { ptr, i64, i64 } %t625, ptr %a627 + %t628 = load ptr, ptr %a1 + %t629 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.6017, i64 32, i64 0 }, ptr %a631 + store { ptr, i64, i64 } %t629, ptr %a632 + call void @finch_str_concat(ptr %a630, ptr %a631, ptr %a632) + %t633 = load { ptr, i64, i64 }, ptr %a630 + store { ptr, i64, i64 } %t633, ptr %a635 + store { ptr, i64, i64 } { ptr @.str.6018, i64 6, i64 0 }, ptr %a636 + call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636) + store { ptr, i64, i64 } %t633, ptr %a637 + call void @finch_str_drop(ptr %a637) + %t638 = load { ptr, i64, i64 }, ptr %a634 + %t639 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t638, ptr %a641 + store { ptr, i64, i64 } %t639, ptr %a642 + call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) + store { ptr, i64, i64 } %t638, ptr %a643 + call void @finch_str_drop(ptr %a643) + %t644 = load { ptr, i64, i64 }, ptr %a640 + store { ptr, i64, i64 } %t644, ptr %a646 + store { ptr, i64, i64 } { ptr @.str.6019, i64 6, i64 0 }, ptr %a647 + call void @finch_str_concat(ptr %a645, ptr %a646, ptr %a647) + store { ptr, i64, i64 } %t644, ptr %a648 + call void @finch_str_drop(ptr %a648) + %t649 = load { ptr, i64, i64 }, ptr %a645 + %t650 = load { ptr, i64, i64 }, ptr %a627 + store { ptr, i64, i64 } %t649, ptr %a652 + store { ptr, i64, i64 } %t650, ptr %a653 + call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) + store { ptr, i64, i64 } %t649, ptr %a654 + call void @finch_str_drop(ptr %a654) + %t655 = load { ptr, i64, i64 }, ptr %a651 + store { ptr, i64, i64 } %t655, ptr %a657 + store { ptr, i64, i64 } { ptr @.str.6020, i64 1, i64 0 }, ptr %a658 + call void @finch_str_concat(ptr %a656, ptr %a657, ptr %a658) + store { ptr, i64, i64 } %t655, ptr %a659 + call void @finch_str_drop(ptr %a659) + %t660 = load { ptr, i64, i64 }, ptr %a656 + call void @finch.gen.emit(ptr %t628, { ptr, i64, i64 } %t660) + store { ptr, i64, i64 } %t660, ptr %a661 + call void @finch_str_drop(ptr %a661) + %t662 = load ptr, ptr %a1 + %t663 = load { ptr, i64, i64 }, ptr %a12 + %t664 = call { ptr, i64, i64 } @finch.gen.load(ptr %t662, { ptr, i64, i64 } { ptr @.str.6021, i64 17, i64 0 }, { ptr, i64, i64 } %t663) + %t665 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t664, 0 + %t666 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6022, i64 3, i64 0 }) + %t667 = insertvalue %S.gen.Val %t665, %S.ast.Type %t666, 1 + %t668 = insertvalue %S.gen.Val %t667, i1 true, 2 + call void @finch_str_drop(ptr %a627) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t668 +endif9054: + %t669 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t669, ptr %a670 + store { ptr, i64, i64 } { ptr @.str.6023, i64 5, i64 0 }, ptr %a671 + %t672 = call i32 @finch_str_eq(ptr %a670, ptr %a671) + %t673 = icmp ne i32 %t672, 0 + br i1 %t673, label %then9059, label %endif9061 +then9059: + %t674 = load ptr, ptr %a1 + %t675 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t674, %S.ast.Node %t675, i64 0) + %t676 = load ptr, ptr %a1 + %t677 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t676) + store { ptr, i64, i64 } %t677, ptr %a678 + %t679 = load ptr, ptr %a1 + %t680 = load { ptr, i64, i64 }, ptr %a678 + store { ptr, i64, i64 } { ptr @.str.6024, i64 36, i64 0 }, ptr %a682 + store { ptr, i64, i64 } %t680, ptr %a683 + call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) + %t684 = load { ptr, i64, i64 }, ptr %a681 + store { ptr, i64, i64 } %t684, ptr %a686 + store { ptr, i64, i64 } { ptr @.str.6025, i64 6, i64 0 }, ptr %a687 + call void @finch_str_concat(ptr %a685, ptr %a686, ptr %a687) + store { ptr, i64, i64 } %t684, ptr %a688 + call void @finch_str_drop(ptr %a688) + %t689 = load { ptr, i64, i64 }, ptr %a685 + %t690 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t689, ptr %a692 + store { ptr, i64, i64 } %t690, ptr %a693 + call void @finch_str_concat(ptr %a691, ptr %a692, ptr %a693) + store { ptr, i64, i64 } %t689, ptr %a694 + call void @finch_str_drop(ptr %a694) + %t695 = load { ptr, i64, i64 }, ptr %a691 + store { ptr, i64, i64 } %t695, ptr %a697 + store { ptr, i64, i64 } { ptr @.str.6026, i64 1, i64 0 }, ptr %a698 + call void @finch_str_concat(ptr %a696, ptr %a697, ptr %a698) + store { ptr, i64, i64 } %t695, ptr %a699 + call void @finch_str_drop(ptr %a699) + %t700 = load { ptr, i64, i64 }, ptr %a696 + call void @finch.gen.emit(ptr %t679, { ptr, i64, i64 } %t700) + store { ptr, i64, i64 } %t700, ptr %a701 + call void @finch_str_drop(ptr %a701) + %t702 = load ptr, ptr %a1 + %t703 = load { ptr, i64, i64 }, ptr %a678 + %t704 = call { ptr, i64, i64 } @finch.gen.load(ptr %t702, { ptr, i64, i64 } { ptr @.str.6027, i64 17, i64 0 }, { ptr, i64, i64 } %t703) + %t705 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t704, 0 + %t706 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6028, i64 2, i64 0 }) + %t707 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t706) + store %S.ast.Type %t706, ptr %a708 + call void @finch.drop.S_ast_Type(ptr %a708) + %t709 = insertvalue %S.gen.Val %t705, %S.ast.Type %t707, 1 + %t710 = insertvalue %S.gen.Val %t709, i1 true, 2 + call void @finch_str_drop(ptr %a678) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t710 +endif9061: + %t711 = load ptr, ptr %a1 + %t712 = load %S.ast.Node, ptr %a2 + %t713 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6029, i64 21, i64 0 }, ptr %a715 + store { ptr, i64, i64 } %t713, ptr %a716 + call void @finch_str_concat(ptr %a714, ptr %a715, ptr %a716) + %t717 = load { ptr, i64, i64 }, ptr %a714 + store { ptr, i64, i64 } %t717, ptr %a719 + store { ptr, i64, i64 } { ptr @.str.6030, i64 106, i64 0 }, ptr %a720 + call void @finch_str_concat(ptr %a718, ptr %a719, ptr %a720) + store { ptr, i64, i64 } %t717, ptr %a721 + call void @finch_str_drop(ptr %a721) + %t722 = load { ptr, i64, i64 }, ptr %a718 + call void @finch.gen.fail(ptr %t711, %S.ast.Node %t712, { ptr, i64, i64 } %t722) + store { ptr, i64, i64 } %t722, ptr %a723 + call void @finch_str_drop(ptr %a723) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val zeroinitializer +} + +define internal { ptr, i64, i64 } @finch.gen.runtimeDecls() { +entry: + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %t1 = mul i64 74, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6031, i64 54, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6032, i64 65, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 + store { ptr, i64, i64 } { ptr @.str.6033, i64 29, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 + store { ptr, i64, i64 } { ptr @.str.6034, i64 38, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 + store { ptr, i64, i64 } { ptr @.str.6035, i64 33, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 + store { ptr, i64, i64 } { ptr @.str.6036, i64 33, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 + store { ptr, i64, i64 } { ptr @.str.6037, i64 33, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 + store { ptr, i64, i64 } { ptr @.str.6038, i64 32, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 + store { ptr, i64, i64 } { ptr @.str.6039, i64 45, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 + store { ptr, i64, i64 } { ptr @.str.6040, i64 35, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 + store { ptr, i64, i64 } { ptr @.str.6041, i64 36, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 + store { ptr, i64, i64 } { ptr @.str.6042, i64 42, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 + store { ptr, i64, i64 } { ptr @.str.6043, i64 37, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 + store { ptr, i64, i64 } { ptr @.str.6044, i64 38, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 + store { ptr, i64, i64 } { ptr @.str.6045, i64 42, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 + store { ptr, i64, i64 } { ptr @.str.6046, i64 38, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 + store { ptr, i64, i64 } { ptr @.str.6047, i64 37, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 + store { ptr, i64, i64 } { ptr @.str.6048, i64 42, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 + store { ptr, i64, i64 } { ptr @.str.6049, i64 42, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 + store { ptr, i64, i64 } { ptr @.str.6050, i64 34, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 + store { ptr, i64, i64 } { ptr @.str.6051, i64 42, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 + store { ptr, i64, i64 } { ptr @.str.6052, i64 43, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 22 + store { ptr, i64, i64 } { ptr @.str.6053, i64 47, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 23 + store { ptr, i64, i64 } { ptr @.str.6054, i64 50, i64 0 }, ptr %t26 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 24 + store { ptr, i64, i64 } { ptr @.str.6055, i64 43, i64 0 }, ptr %t27 + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 25 + store { ptr, i64, i64 } { ptr @.str.6056, i64 44, i64 0 }, ptr %t28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 26 + store { ptr, i64, i64 } { ptr @.str.6057, i64 49, i64 0 }, ptr %t29 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 27 + store { ptr, i64, i64 } { ptr @.str.6058, i64 57, i64 0 }, ptr %t30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 28 + store { ptr, i64, i64 } { ptr @.str.6059, i64 37, i64 0 }, ptr %t31 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 29 + store { ptr, i64, i64 } { ptr @.str.6060, i64 39, i64 0 }, ptr %t32 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 30 + store { ptr, i64, i64 } { ptr @.str.6061, i64 37, i64 0 }, ptr %t33 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 31 + store { ptr, i64, i64 } { ptr @.str.6062, i64 38, i64 0 }, ptr %t34 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 32 + store { ptr, i64, i64 } { ptr @.str.6063, i64 39, i64 0 }, ptr %t35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 33 + store { ptr, i64, i64 } { ptr @.str.6064, i64 39, i64 0 }, ptr %t36 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 34 + store { ptr, i64, i64 } { ptr @.str.6065, i64 51, i64 0 }, ptr %t37 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 35 + store { ptr, i64, i64 } { ptr @.str.6066, i64 44, i64 0 }, ptr %t38 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 36 + store { ptr, i64, i64 } { ptr @.str.6067, i64 43, i64 0 }, ptr %t39 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 37 + store { ptr, i64, i64 } { ptr @.str.6068, i64 45, i64 0 }, ptr %t40 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 38 + store { ptr, i64, i64 } { ptr @.str.6069, i64 44, i64 0 }, ptr %t41 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 39 + store { ptr, i64, i64 } { ptr @.str.6070, i64 52, i64 0 }, ptr %t42 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 40 + store { ptr, i64, i64 } { ptr @.str.6071, i64 57, i64 0 }, ptr %t43 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 41 + store { ptr, i64, i64 } { ptr @.str.6072, i64 48, i64 0 }, ptr %t44 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 42 + store { ptr, i64, i64 } { ptr @.str.6073, i64 34, i64 0 }, ptr %t45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 43 + store { ptr, i64, i64 } { ptr @.str.6074, i64 48, i64 0 }, ptr %t46 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 44 + store { ptr, i64, i64 } { ptr @.str.6075, i64 60, i64 0 }, ptr %t47 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 45 + store { ptr, i64, i64 } { ptr @.str.6076, i64 55, i64 0 }, ptr %t48 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 46 + store { ptr, i64, i64 } { ptr @.str.6077, i64 46, i64 0 }, ptr %t49 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 47 + store { ptr, i64, i64 } { ptr @.str.6078, i64 48, i64 0 }, ptr %t50 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 48 + store { ptr, i64, i64 } { ptr @.str.6079, i64 43, i64 0 }, ptr %t51 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 49 + store { ptr, i64, i64 } { ptr @.str.6080, i64 45, i64 0 }, ptr %t52 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 50 + store { ptr, i64, i64 } { ptr @.str.6081, i64 59, i64 0 }, ptr %t53 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 51 + store { ptr, i64, i64 } { ptr @.str.6082, i64 49, i64 0 }, ptr %t54 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 52 + store { ptr, i64, i64 } { ptr @.str.6083, i64 39, i64 0 }, ptr %t55 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 53 + store { ptr, i64, i64 } { ptr @.str.6084, i64 39, i64 0 }, ptr %t56 + %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 54 + store { ptr, i64, i64 } { ptr @.str.6085, i64 35, i64 0 }, ptr %t57 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 55 + store { ptr, i64, i64 } { ptr @.str.6086, i64 35, i64 0 }, ptr %t58 + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 56 + store { ptr, i64, i64 } { ptr @.str.6087, i64 45, i64 0 }, ptr %t59 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 57 + store { ptr, i64, i64 } { ptr @.str.6088, i64 47, i64 0 }, ptr %t60 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 58 + store { ptr, i64, i64 } { ptr @.str.6089, i64 47, i64 0 }, ptr %t61 + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 59 + store { ptr, i64, i64 } { ptr @.str.6090, i64 48, i64 0 }, ptr %t62 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 60 + store { ptr, i64, i64 } { ptr @.str.6091, i64 44, i64 0 }, ptr %t63 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 61 + store { ptr, i64, i64 } { ptr @.str.6092, i64 37, i64 0 }, ptr %t64 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 62 + store { ptr, i64, i64 } { ptr @.str.6093, i64 49, i64 0 }, ptr %t65 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 63 + store { ptr, i64, i64 } { ptr @.str.6094, i64 39, i64 0 }, ptr %t66 + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 64 + store { ptr, i64, i64 } { ptr @.str.6095, i64 29, i64 0 }, ptr %t67 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 65 + store { ptr, i64, i64 } { ptr @.str.6096, i64 35, i64 0 }, ptr %t68 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 66 + store { ptr, i64, i64 } { ptr @.str.6097, i64 29, i64 0 }, ptr %t69 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 67 + store { ptr, i64, i64 } { ptr @.str.6098, i64 24, i64 0 }, ptr %t70 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 68 + store { ptr, i64, i64 } { ptr @.str.6099, i64 40, i64 0 }, ptr %t71 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 69 + store { ptr, i64, i64 } { ptr @.str.6100, i64 33, i64 0 }, ptr %t72 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 70 + store { ptr, i64, i64 } { ptr @.str.6101, i64 34, i64 0 }, ptr %t73 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 71 + store { ptr, i64, i64 } { ptr @.str.6102, i64 44, i64 0 }, ptr %t74 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 72 + store { ptr, i64, i64 } { ptr @.str.6103, i64 32, i64 0 }, ptr %t75 + %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 73 + store { ptr, i64, i64 } { ptr @.str.6104, i64 23, i64 0 }, ptr %t76 + %t77 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t78 = insertvalue { ptr, i64, i64 } %t77, i64 74, 1 + %t79 = insertvalue { ptr, i64, i64 } %t78, i64 74, 2 + store { ptr, i64, i64 } %t79, ptr %a80 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a80, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6105, i64 1, i64 0 }, ptr %a82 + call void @finch_str_join(ptr %a83, ptr %a80, ptr %a82) + %t84 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t84, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.6106, i64 1, i64 0 }, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + call void @finch.drop.arr_str(ptr %a80) + ret { ptr, i64, i64 } %t89 +} + +define internal { ptr, i64, i64 } @finch.gen.assemble(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6107, i64 52, i64 0 }, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic9062, label %ok9063 +panic9062: + call void @finch_panic(ptr @.str.6108, i64 5776, ptr @.str.6109) + unreachable +ok9063: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 31 + %t6 = getelementptr inbounds %S.platform.Target, ptr %t5, i32 0, i32 5 + %t7 = load i1, ptr %t6 + br label %logic.from9064 +logic.from9064: + br i1 %t7, label %logic.end9066, label %logic.rhs9065 +logic.rhs9065: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic9067, label %ok9068 +panic9067: + call void @finch_panic(ptr @.str.6110, i64 5776, ptr @.str.6111) + unreachable +ok9068: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 31 + %t11 = getelementptr inbounds %S.platform.Target, ptr %t10, i32 0, i32 1 + %t12 = load i1, ptr %t11 + br label %logic.rend9069 +logic.rend9069: + br label %logic.end9066 +logic.end9066: + %t13 = phi i1 [ true, %logic.from9064 ], [ %t12, %logic.rend9069 ] + br i1 %t13, label %then9070, label %endif9072 +then9070: + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6112, i64 17, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic9073, label %ok9074 +panic9073: + call void @finch_panic(ptr @.str.6113, i64 5777, ptr @.str.6114) + unreachable +ok9074: + %t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 31 + %t22 = getelementptr inbounds %S.platform.Target, ptr %t21, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t18, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t18, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6115, i64 3, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a2 + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_str_drop(ptr %a35) + br label %endif9072 +endif9072: + %t36 = load { ptr, i64, i64 }, ptr %a2 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic9075, label %ok9076 +panic9075: + call void @finch_panic(ptr @.str.6116, i64 5779, ptr @.str.6117) + unreachable +ok9076: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 2 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6118, i64 1, i64 0 }, ptr %a41 + call void @finch_str_join(ptr %a42, ptr %t39, ptr %a41) + %t43 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t36, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6119, i64 2, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = call { ptr, i64, i64 } @finch.gen.runtimeDecls() + store { ptr, i64, i64 } %t53, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t53, ptr %a58 + call void @finch_str_drop(ptr %a58) + store { ptr, i64, i64 } %t54, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.6120, i64 1, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t65, ptr %a2 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic9077, label %ok9078 +panic9077: + call void @finch_panic(ptr @.str.6121, i64 5780, ptr @.str.6122) + unreachable +ok9078: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 30 + %t71 = load i1, ptr %t70 + br i1 %t71, label %then9079, label %endif9081 +then9079: + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6123, i64 62, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a73 + %t77 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a2 + store { ptr, i64, i64 } %t77, ptr %a78 + call void @finch_str_drop(ptr %a78) + br label %endif9081 +endif9081: + %t79 = load { ptr, i64, i64 }, ptr %a2 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic9082, label %ok9083 +panic9082: + call void @finch_panic(ptr @.str.6124, i64 5783, ptr @.str.6125) + unreachable +ok9083: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 3 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6126, i64 1, i64 0 }, ptr %a84 + call void @finch_str_join(ptr %a85, ptr %t82, ptr %a84) + %t86 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t79, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t86, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + %t92 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t91, ptr %a2 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic9084, label %ok9085 +panic9084: + call void @finch_panic(ptr @.str.6127, i64 5784, ptr @.str.6128) + unreachable +ok9085: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 30 + %t97 = load i1, ptr %t96 + br i1 %t97, label %then9086, label %endif9088 +then9086: + %t98 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6129, i64 1, i64 0 }, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a99 + %t103 = load ptr, ptr %a1 + %t104 = call { ptr, i64, i64 } @finch.gen.dbgModule(ptr %t103) + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a105 + %t111 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t110, ptr %a2 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + br label %endif9088 +endif9088: + %t113 = load { ptr, i64, i64 }, ptr %a2 + ret { ptr, i64, i64 } %t113 +} + +define internal void @finch.copy.arr_S_ast_Program(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond9089 +n.cond9089: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body9090, label %n.end9091 +n.body9090: + %t8 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.ast.Program, ptr %t2, i64 %t6 + call void @finch.copy.S_ast_Program(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond9089 +n.end9091: + ret void +} + +define internal void @finch.copy.S_cimport_CFunc(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CFunc, ptr %src + store %S.cimport.CFunc %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 2 + call void @finch.copy.S_ast_Type(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_S_ast_Type(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 5 + %t11 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 5 + call void @finch_str_copy(ptr %t10, ptr %t11) + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CFunc(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9092 +n.cond9092: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9093, label %n.end9094 +n.body9093: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9095, label %entry.next9096 +entry.live9095: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CFunc(ptr %t17, ptr %t18) + br label %entry.next9096 +entry.next9096: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9092 +n.end9094: + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CConst(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9097 +n.cond9097: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9098, label %n.end9099 +n.body9098: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9100, label %entry.next9101 +entry.live9100: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CConst(ptr %t17, ptr %t18) + br label %entry.next9101 +entry.next9101: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9097 +n.end9099: + ret void +} + +define internal void @finch.copy.map_str_S_ast_Type(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9102 +n.cond9102: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9103, label %n.end9104 +n.body9103: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9105, label %entry.next9106 +entry.live9105: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_ast_Type(ptr %t17, ptr %t18) + br label %entry.next9106 +entry.next9106: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9102 +n.end9104: + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CStruct(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9107 +n.cond9107: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9108, label %n.end9109 +n.body9108: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9110, label %entry.next9111 +entry.live9110: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CStruct(ptr %t17, ptr %t18) + br label %entry.next9111 +entry.next9111: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9107 +n.end9109: + ret void +} + +define internal void @finch.copy.S_cimport_CImports(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CImports, ptr %src + store %S.cimport.CImports %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 0 + call void @finch.copy.map_str_S_cimport_CFunc(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 1 + call void @finch.copy.map_str_S_cimport_CConst(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 2 + call void @finch.copy.map_str_S_ast_Type(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 3 + call void @finch.copy.map_str_S_cimport_CStruct(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + ret void +} + +define internal void @finch.drop.arr_S_gen_Pending(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9180 +n.cond9180: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9181, label %n.end9182 +n.body9181: + %t7 = getelementptr inbounds %S.gen.Pending, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Pending(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9180 +n.end9182: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_Loop(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9183 +n.cond9183: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9184, label %n.end9185 +n.body9184: + %t7 = getelementptr inbounds %S.gen.Loop, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Loop(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9183 +n.end9185: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_FnSig(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9186 +n.cond9186: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9187, label %n.end9188 +n.body9187: + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_FnSig(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9186 +n.end9188: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_StructDef(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9189 +n.cond9189: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9190, label %n.end9191 +n.body9190: + %t7 = getelementptr inbounds %S.gen.StructDef, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_StructDef(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9189 +n.end9191: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_Template(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9192 +n.cond9192: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9193, label %n.end9194 +n.body9193: + %t7 = getelementptr inbounds %S.gen.Template, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Template(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9192 +n.end9194: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_EnumDef(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9195 +n.cond9195: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9196, label %n.end9197 +n.body9196: + %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_EnumDef(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9195 +n.end9197: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_SumDef(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9198 +n.cond9198: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9199, label %n.end9200 +n.body9199: + %t7 = getelementptr inbounds %S.gen.SumDef, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_SumDef(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9198 +n.end9200: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.map_str_int(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9201 +n.cond9201: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9202, label %n.end9203 +n.body9202: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live9204, label %entry.next9205 +entry.live9204: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 2 + br label %entry.next9205 +entry.next9205: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond9201 +n.end9203: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Gen(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_ast_Program(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_str(ptr %t5) + %t6 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 10 + call void @finch.drop.arr_S_gen_Scope(ptr %t7) + %t8 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 11 + call void @finch.drop.arr_S_gen_Pending(ptr %t8) + %t9 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 12 + call void @finch.drop.arr_S_gen_Loop(ptr %t9) + %t10 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 13 + call void @finch.drop.S_gen_FnSig(ptr %t10) + %t11 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 14 + call void @finch_str_drop(ptr %t11) + %t12 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 15 + call void @finch.drop.arr_S_gen_FnSig(ptr %t12) + %t13 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 16 + call void @finch.drop.arr_S_gen_StructDef(ptr %t13) + %t14 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 17 + call void @finch.drop.arr_S_gen_Template(ptr %t14) + %t15 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 18 + call void @finch.drop.arr_str(ptr %t15) + %t16 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 19 + call void @finch.drop.arr_S_ast_Type(ptr %t16) + %t17 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 20 + call void @finch_str_drop(ptr %t17) + %t18 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 21 + call void @finch.drop.arr_S_gen_EnumDef(ptr %t18) + %t19 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 22 + call void @finch.drop.arr_S_gen_SumDef(ptr %t19) + %t20 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 23 + call void @finch.drop.arr_str(ptr %t20) + %t21 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 24 + call void @finch.drop.arr_str(ptr %t21) + %t22 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 26 + call void @finch.drop.S_cimport_CImports(ptr %t22) + %t23 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 29 + call void @finch.drop.arr_str(ptr %t23) + %t24 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 31 + call void @finch.drop.S_platform_Target(ptr %t24) + %t25 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 32 + call void @finch_str_drop(ptr %t25) + %t26 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 33 + call void @finch.drop.arr_str(ptr %t26) + %t27 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 34 + call void @finch.drop.map_str_int(ptr %t27) + %t28 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 35 + call void @finch.drop.arr_int(ptr %t28) + %t29 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 40 + call void @finch.drop.arr_str(ptr %t29) + %t30 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 41 + call void @finch_str_drop(ptr %t30) + %t31 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 42 + call void @finch_str_drop(ptr %t31) + %t32 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 43 + call void @finch_str_drop(ptr %t32) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, %S.cimport.CImports %p2, %S.gen.Options %p3) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.cimport.CImports, align 16 + %a4 = alloca %S.gen.Options, align 16 + %a7 = alloca i1, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.cimport.CImports, align 16 + %a20 = alloca %S.cimport.CImports, align 16 + %a34 = alloca %S.platform.Target, align 16 + %a35 = alloca %S.platform.Target, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca %S.gen.Gen, align 16 + %a46 = alloca ptr, align 16 + %a75 = alloca i64, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca i64, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca i64, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca i64, align 16 + %a269 = alloca %S.gen.FnSig, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca %S.gen.FnSig, align 16 + %a318 = alloca %S.gen.FnSig, align 16 + %a320 = alloca %S.gen.FnSig, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.cimport.CImports %p2, ptr %a3 + store %S.gen.Options %p3, ptr %a4 + %t5 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 + %t6 = load i1, ptr %t5 + store i1 %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch.copy.arr_S_ast_Program(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + %t12 = insertvalue %S.gen.Gen zeroinitializer, { ptr, i64, i64 } %t11, 0 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch.copy.arr_str(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.gen.Gen %t12, { ptr, i64, i64 } %t16, 1 + %t18 = load %S.cimport.CImports, ptr %a3 + store %S.cimport.CImports %t18, ptr %a19 + call void @finch.copy.S_cimport_CImports(ptr %a20, ptr %a19) + %t21 = load %S.cimport.CImports, ptr %a20 + %t22 = insertvalue %S.gen.Gen %t17, %S.cimport.CImports %t21, 26 + %t23 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 + %t24 = load i1, ptr %t23 + %t25 = insertvalue %S.gen.Gen %t22, i1 %t24, 27 + %t26 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 1 + %t27 = load i1, ptr %t26 + %t28 = insertvalue %S.gen.Gen %t25, i1 %t27, 28 + %t29 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 2 + %t30 = load i1, ptr %t29 + %t31 = insertvalue %S.gen.Gen %t28, i1 %t30, 30 + %t32 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 4 + %t33 = load %S.platform.Target, ptr %t32 + store %S.platform.Target %t33, ptr %a34 + call void @finch.copy.S_platform_Target(ptr %a35, ptr %a34) + %t36 = load %S.platform.Target, ptr %a35 + %t37 = insertvalue %S.gen.Gen %t31, %S.platform.Target %t36, 31 + %t38 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 3 + %t39 = load { ptr, i64, i64 }, ptr %t38 + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch_str_copy(ptr %a41, ptr %a40) + %t42 = load { ptr, i64, i64 }, ptr %a41 + %t43 = insertvalue %S.gen.Gen %t37, { ptr, i64, i64 } %t42, 32 + %t44 = insertvalue %S.gen.Gen %t43, i64 -1, 36 + store %S.gen.Gen %t44, ptr %a45 + store ptr %a45, ptr %a46 + %t47 = load ptr, ptr %a46 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic9112, label %ok9113 +panic9112: + call void @finch_panic(ptr @.str.6130, i64 5794, ptr @.str.6131) + unreachable +ok9113: + %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 30 + %t50 = load i1, ptr %t49 + br i1 %t50, label %then9114, label %endif9116 +then9114: + %t51 = load ptr, ptr %a46 + %t52 = icmp eq ptr %t51, null + br i1 %t52, label %panic9117, label %ok9118 +panic9117: + call void @finch_panic(ptr @.str.6132, i64 5796, ptr @.str.6133) + unreachable +ok9118: + %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 33 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = add i64 %t55, 1 + call void @finch_arr_reserve(ptr %t53, i64 %t56, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t57 = load ptr, ptr %t53 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i64 %t55 + store { ptr, i64, i64 } { ptr @.str.6134, i64 0, i64 0 }, ptr %t58 + store i64 %t56, ptr %t54 + %t59 = load ptr, ptr %a46 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic9119, label %ok9120 +panic9119: + call void @finch_panic(ptr @.str.6135, i64 5797, ptr @.str.6136) + unreachable +ok9120: + %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 33 + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1 + %t63 = load i64, ptr %t62 + %t64 = add i64 %t63, 1 + call void @finch_arr_reserve(ptr %t61, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t65 = load ptr, ptr %t61 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 + store { ptr, i64, i64 } { ptr @.str.6137, i64 33, i64 0 }, ptr %t66 + store i64 %t64, ptr %t62 + %t67 = load ptr, ptr %a46 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic9121, label %ok9122 +panic9121: + call void @finch_panic(ptr @.str.6138, i64 5798, ptr @.str.6139) + unreachable +ok9122: + %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 33 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 + %t71 = load i64, ptr %t70 + %t72 = add i64 %t71, 1 + call void @finch_arr_reserve(ptr %t69, i64 %t72, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t73 = load ptr, ptr %t69 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t71 + store { ptr, i64, i64 } { ptr @.str.6140, i64 38, i64 0 }, ptr %t74 + store i64 %t72, ptr %t70 + store i64 0, ptr %a75 + br label %each.cond9123 +each.cond9123: + %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t77 = load i64, ptr %t76 + %t78 = load i64, ptr %a75 + %t79 = icmp slt i64 %t78, %t77 + br i1 %t79, label %each.body9124, label %each.end9126 +each.body9124: + %t80 = load ptr, ptr %a2 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i64 %t78 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t82, ptr %a83 + %t84 = load ptr, ptr %a46 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic9127, label %ok9128 +panic9127: + call void @finch_panic(ptr @.str.6141, i64 5800, ptr @.str.6142) + unreachable +ok9128: + %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 35 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load ptr, ptr %a46 + %t89 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.6143, i64 19, i64 0 }, ptr %a91 + store { ptr, i64, i64 } %t89, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.6144, i64 15, i64 0 }, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + %t99 = load ptr, ptr %a46 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic9129, label %ok9130 +panic9129: + call void @finch_panic(ptr @.str.6145, i64 5800, ptr @.str.6146) + unreachable +ok9130: + %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 32 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } %t98, ptr %a104 + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + store { ptr, i64, i64 } %t98, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6147, i64 2, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a108 + %t113 = call i64 @finch.gen.md(ptr %t88, { ptr, i64, i64 } %t112) + store { ptr, i64, i64 } %t112, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load i64, ptr %t87 + %t116 = add i64 %t115, 1 + call void @finch_arr_reserve(ptr %t86, i64 %t116, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t117 = load ptr, ptr %t86 + %t118 = getelementptr inbounds i64, ptr %t117, i64 %t115 + store i64 %t113, ptr %t118 + store i64 %t116, ptr %t87 + br label %each.step9125 +each.step9125: + %t119 = load i64, ptr %a75 + %t120 = add i64 %t119, 1 + store i64 %t120, ptr %a75 + br label %each.cond9123 +each.end9126: + %t121 = load ptr, ptr %a46 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic9131, label %ok9132 +panic9131: + call void @finch_panic(ptr @.str.6149, i64 5802, ptr @.str.6150) + unreachable +ok9132: + %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 35 + %t124 = load { ptr, i64, i64 }, ptr %t123 + %t125 = extractvalue { ptr, i64, i64 } %t124, 1 + %t126 = icmp uge i64 0, %t125 + br i1 %t126, label %range9133, label %inrange9134 +range9133: + call void @finch_panic_index(ptr @.str.6151, i64 5802, i64 0, i64 %t125) + unreachable +inrange9134: + %t127 = extractvalue { ptr, i64, i64 } %t124, 0 + %t128 = getelementptr inbounds i64, ptr %t127, i64 0 + %t129 = load i64, ptr %t128 + call void @finch_str_from_int(ptr %a130, i64 %t129) + %t131 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6148, i64 52, i64 0 }, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.6152, i64 84, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = load ptr, ptr %a46 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic9135, label %ok9136 +panic9135: + call void @finch_panic(ptr @.str.6153, i64 5802, ptr @.str.6154) + unreachable +ok9136: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 33 + %t145 = load { ptr, i64, i64 }, ptr %t144 + %t146 = extractvalue { ptr, i64, i64 } %t145, 1 + %t147 = icmp uge i64 0, %t146 + br i1 %t147, label %range9137, label %inrange9138 +range9137: + call void @finch_panic_index(ptr @.str.6155, i64 5802, i64 0, i64 %t146) + unreachable +inrange9138: + %t148 = extractvalue { ptr, i64, i64 } %t145, 0 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i64 0 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } %t141, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + call void @finch_str_drop(ptr %a151) + br label %endif9116 +endif9116: + %t152 = load ptr, ptr %a46 + call void @finch.gen.declare(ptr %t152) + %t153 = load ptr, ptr %a46 + %t154 = call i64 @finch.gen.findFn(ptr %t153, { ptr, i64, i64 } { ptr @.str.6156, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6157, i64 4, i64 0 }) + store i64 %t154, ptr %a155 + %t156 = load i1, ptr %a7 + br i1 %t156, label %then9139, label %else9140 +then9139: + %t157 = load i64, ptr %a155 + %t158 = icmp sge i64 %t157, 0 + br i1 %t158, label %then9142, label %endif9144 +then9142: + %t159 = load ptr, ptr %a46 + %t160 = load ptr, ptr %a46 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic9145, label %ok9146 +panic9145: + call void @finch_panic(ptr @.str.6158, i64 5808, ptr @.str.6159) + unreachable +ok9146: + %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 0 + %t163 = load ptr, ptr %a46 + %t164 = icmp eq ptr %t163, null + br i1 %t164, label %panic9147, label %ok9148 +panic9147: + call void @finch_panic(ptr @.str.6160, i64 5808, ptr @.str.6161) + unreachable +ok9148: + %t165 = getelementptr inbounds %S.gen.Gen, ptr %t163, i32 0, i32 15 + %t166 = load i64, ptr %a155 + %t167 = load { ptr, i64, i64 }, ptr %t165 + %t168 = extractvalue { ptr, i64, i64 } %t167, 1 + %t169 = icmp uge i64 %t166, %t168 + br i1 %t169, label %range9149, label %inrange9150 +range9149: + call void @finch_panic_index(ptr @.str.6162, i64 5808, i64 %t166, i64 %t168) + unreachable +inrange9150: + %t170 = extractvalue { ptr, i64, i64 } %t167, 0 + %t171 = getelementptr inbounds %S.gen.FnSig, ptr %t170, i64 %t166 + %t172 = getelementptr inbounds %S.gen.FnSig, ptr %t171, i32 0, i32 16 + %t173 = load i64, ptr %t172 + %t174 = load { ptr, i64, i64 }, ptr %t162 + %t175 = extractvalue { ptr, i64, i64 } %t174, 1 + %t176 = icmp uge i64 %t173, %t175 + br i1 %t176, label %range9151, label %inrange9152 +range9151: + call void @finch_panic_index(ptr @.str.6163, i64 5808, i64 %t173, i64 %t175) + unreachable +inrange9152: + %t177 = extractvalue { ptr, i64, i64 } %t174, 0 + %t178 = getelementptr inbounds %S.ast.Program, ptr %t177, i64 %t173 + %t179 = getelementptr inbounds %S.ast.Program, ptr %t178, i32 0, i32 8 + %t180 = load ptr, ptr %a46 + %t181 = icmp eq ptr %t180, null + br i1 %t181, label %panic9153, label %ok9154 +panic9153: + call void @finch_panic(ptr @.str.6164, i64 5808, ptr @.str.6165) + unreachable +ok9154: + %t182 = getelementptr inbounds %S.gen.Gen, ptr %t180, i32 0, i32 15 + %t183 = load i64, ptr %a155 + %t184 = load { ptr, i64, i64 }, ptr %t182 + %t185 = extractvalue { ptr, i64, i64 } %t184, 1 + %t186 = icmp uge i64 %t183, %t185 + br i1 %t186, label %range9155, label %inrange9156 +range9155: + call void @finch_panic_index(ptr @.str.6166, i64 5808, i64 %t183, i64 %t185) + unreachable +inrange9156: + %t187 = extractvalue { ptr, i64, i64 } %t184, 0 + %t188 = getelementptr inbounds %S.gen.FnSig, ptr %t187, i64 %t183 + %t189 = getelementptr inbounds %S.gen.FnSig, ptr %t188, i32 0, i32 17 + %t190 = load i64, ptr %t189 + %t191 = load { ptr, i64, i64 }, ptr %t179 + %t192 = extractvalue { ptr, i64, i64 } %t191, 1 + %t193 = icmp uge i64 %t190, %t192 + br i1 %t193, label %range9157, label %inrange9158 +range9157: + call void @finch_panic_index(ptr @.str.6167, i64 5808, i64 %t190, i64 %t192) + unreachable +inrange9158: + %t194 = extractvalue { ptr, i64, i64 } %t191, 0 + %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t190 + %t196 = load %S.ast.Node, ptr %t195 + call void @finch.gen.fail(ptr %t159, %S.ast.Node %t196, { ptr, i64, i64 } { ptr @.str.6168, i64 82, i64 0 }) + br label %endif9144 +endif9144: + br label %endif9141 +else9140: + %t197 = load i64, ptr %a155 + %t198 = icmp slt i64 %t197, 0 + br i1 %t198, label %then9159, label %endif9161 +then9159: + %t199 = load { ptr, i64, i64 }, ptr %a2 + %t200 = extractvalue { ptr, i64, i64 } %t199, 1 + %t201 = icmp uge i64 0, %t200 + br i1 %t201, label %range9162, label %inrange9163 +range9162: + call void @finch_panic_index(ptr @.str.6169, i64 5811, i64 0, i64 %t200) + unreachable +inrange9163: + %t202 = extractvalue { ptr, i64, i64 } %t199, 0 + %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 0 + %t204 = load { ptr, i64, i64 }, ptr %t203 + store { ptr, i64, i64 } %t204, ptr %a206 + store { ptr, i64, i64 } { ptr @.str.6170, i64 64, i64 0 }, ptr %a207 + call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a205 + %t209 = extractvalue { ptr, i64, i64 } %t208, 1 + %t210 = trunc i64 %t209 to i32 + %t211 = extractvalue { ptr, i64, i64 } %t208, 0 + %t212 = icmp eq ptr %t211, null + %t213 = select i1 %t212, ptr @.str.6171, ptr %t211 + %t214 = call i32 (ptr, ...) @printf(ptr @.str.6172, i32 %t210, ptr %t213) + store { ptr, i64, i64 } %t208, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = call i32 (ptr, ...) @printf(ptr @.str.6173) + %t217 = trunc i64 1 to i32 + %t218 = call i32 @fflush(ptr null) + call void @exit(i32 %t217) + br label %endif9161 +endif9161: + br label %endif9141 +endif9141: + store i64 0, ptr %a219 + br label %while.cond9164 +while.cond9164: + %t220 = load i64, ptr %a219 + %t221 = load ptr, ptr %a46 + %t222 = icmp eq ptr %t221, null + br i1 %t222, label %panic9167, label %ok9168 +panic9167: + call void @finch_panic(ptr @.str.6174, i64 5816, ptr @.str.6175) + unreachable +ok9168: + %t223 = getelementptr inbounds %S.gen.Gen, ptr %t221, i32 0, i32 15 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 + %t225 = load i64, ptr %t224 + %t226 = icmp slt i64 %t220, %t225 + br i1 %t226, label %while.body9165, label %while.end9166 +while.body9165: + %t227 = load ptr, ptr %a46 + %t228 = load i64, ptr %a219 + call void @finch.gen.define(ptr %t227, i64 %t228) + %t229 = load i64, ptr %a219 + %t230 = add i64 %t229, 1 + store i64 %t230, ptr %a219 + br label %while.cond9164 +while.end9166: + %t231 = load ptr, ptr %a46 + %t232 = icmp eq ptr %t231, null + br i1 %t232, label %panic9169, label %ok9170 +panic9169: + call void @finch_panic(ptr @.str.6176, i64 5820, ptr @.str.6177) + unreachable +ok9170: + %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 28 + %t234 = load i1, ptr %t233 + br i1 %t234, label %then9171, label %endif9173 +then9171: + %t235 = load ptr, ptr %a46 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic9174, label %ok9175 +panic9174: + call void @finch_panic(ptr @.str.6178, i64 5821, ptr @.str.6179) + unreachable +ok9175: + %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = extractvalue { ptr, i64, i64 } %t238, 1 + %t240 = icmp uge i64 0, %t239 + br i1 %t240, label %range9176, label %inrange9177 +range9176: + call void @finch_panic_index(ptr @.str.6180, i64 5821, i64 0, i64 %t239) + unreachable +inrange9177: + %t241 = extractvalue { ptr, i64, i64 } %t238, 0 + %t242 = getelementptr inbounds %S.ast.Program, ptr %t241, i64 0 + %t243 = getelementptr inbounds %S.ast.Program, ptr %t242, i32 0, i32 2 + %t244 = load { ptr, i64, i64 }, ptr %t243 + store { ptr, i64, i64 } %t244, ptr %a245 + call void @finch.copy.arr_str(ptr %a246, ptr %a245) + %t247 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t247, ptr %a248 + %t249 = load ptr, ptr %a46 + %t250 = load { ptr, i64, i64 }, ptr %a248 + call void @finch.gen.indexAll(ptr %t249, { ptr, i64, i64 } %t250) + %t251 = load ptr, ptr %a46 + %t252 = icmp eq ptr %t251, null + br i1 %t252, label %panic9178, label %ok9179 +panic9178: + call void @finch_panic(ptr @.str.6181, i64 5823, ptr @.str.6182) + unreachable +ok9179: + %t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 29 + %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6183, i64 1, i64 0 }, ptr %a255 + call void @finch_str_join(ptr %a256, ptr %t253, ptr %a255) + %t257 = load { ptr, i64, i64 }, ptr %a256 + call void @finch.drop.arr_str(ptr %a248) + call void @finch.drop.S_gen_Gen(ptr %a45) + ret { ptr, i64, i64 } %t257 +endif9173: + %t258 = load ptr, ptr %a46 + %t259 = icmp eq ptr %t258, null + br i1 %t259, label %panic9206, label %ok9207 +panic9206: + call void @finch_panic(ptr @.str.6184, i64 5825, ptr @.str.6185) + unreachable +ok9207: + %t260 = getelementptr inbounds %S.gen.Gen, ptr %t258, i32 0, i32 15 + store i64 0, ptr %a261 + br label %each.cond9208 +each.cond9208: + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 + %t263 = load i64, ptr %t262 + %t264 = load i64, ptr %a261 + %t265 = icmp slt i64 %t264, %t263 + br i1 %t265, label %each.body9209, label %each.end9211 +each.body9209: + %t266 = load ptr, ptr %t260 + %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i64 %t264 + %t268 = load %S.gen.FnSig, ptr %t267 + store %S.gen.FnSig %t268, ptr %a269 + %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a269, i32 0, i32 5 + %t271 = load i1, ptr %t270 + br i1 %t271, label %then9212, label %endif9214 +then9212: + %t272 = load ptr, ptr %a46 + %t273 = load %S.gen.FnSig, ptr %a269 + %t274 = call { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %t272, %S.gen.FnSig %t273) + store { ptr, i64, i64 } %t274, ptr %a275 + call void @finch_str_drop(ptr %a275) + br label %endif9214 +endif9214: + br label %each.step9210 +each.step9210: + %t276 = load i64, ptr %a261 + %t277 = add i64 %t276, 1 + store i64 %t277, ptr %a261 + br label %each.cond9208 +each.end9211: + %t278 = load i1, ptr %a7 + br i1 %t278, label %then9215, label %endif9217 +then9215: + store { ptr, i64, i64 } { ptr @.str.6186, i64 0, i64 0 }, ptr %a279 + %t280 = load ptr, ptr %a46 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic9218, label %ok9219 +panic9218: + call void @finch_panic(ptr @.str.6187, i64 5833, ptr @.str.6188) + unreachable +ok9219: + %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 31 + %t283 = getelementptr inbounds %S.platform.Target, ptr %t282, i32 0, i32 1 + %t284 = load i1, ptr %t283 + br i1 %t284, label %then9220, label %endif9222 +then9220: + %t285 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6189, i64 10, i64 0 }, ptr %a279 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + br label %endif9222 +endif9222: + %t287 = load ptr, ptr %a46 + %t288 = icmp eq ptr %t287, null + br i1 %t288, label %panic9223, label %ok9224 +panic9223: + call void @finch_panic(ptr @.str.6190, i64 5836, ptr @.str.6191) + unreachable +ok9224: + %t289 = getelementptr inbounds %S.gen.Gen, ptr %t287, i32 0, i32 3 + %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 + %t291 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6192, i64 6, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t295, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.6193, i64 107, i64 0 }, ptr %a298 + call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) + store { ptr, i64, i64 } %t295, ptr %a299 + call void @finch_str_drop(ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a296 + %t301 = load i64, ptr %t290 + %t302 = add i64 %t301, 1 + call void @finch_arr_reserve(ptr %t289, i64 %t302, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t303 = load ptr, ptr %t289 + %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t303, i64 %t301 + store { ptr, i64, i64 } %t300, ptr %t304 + store i64 %t302, ptr %t290 + %t305 = load ptr, ptr %a46 + %t306 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t305) + call void @finch_str_drop(ptr %a279) + call void @finch.drop.S_gen_Gen(ptr %a45) + ret { ptr, i64, i64 } %t306 +endif9217: + %t307 = load ptr, ptr %a46 + %t308 = icmp eq ptr %t307, null + br i1 %t308, label %panic9225, label %ok9226 +panic9225: + call void @finch_panic(ptr @.str.6194, i64 5840, ptr @.str.6195) + unreachable +ok9226: + %t309 = getelementptr inbounds %S.gen.Gen, ptr %t307, i32 0, i32 15 + %t310 = load i64, ptr %a155 + %t311 = load { ptr, i64, i64 }, ptr %t309 + %t312 = extractvalue { ptr, i64, i64 } %t311, 1 + %t313 = icmp uge i64 %t310, %t312 + br i1 %t313, label %range9227, label %inrange9228 +range9227: + call void @finch_panic_index(ptr @.str.6196, i64 5840, i64 %t310, i64 %t312) + unreachable +inrange9228: + %t314 = extractvalue { ptr, i64, i64 } %t311, 0 + %t315 = getelementptr inbounds %S.gen.FnSig, ptr %t314, i64 %t310 + %t316 = load %S.gen.FnSig, ptr %t315 + store %S.gen.FnSig %t316, ptr %a317 + call void @finch.copy.S_gen_FnSig(ptr %a318, ptr %a317) + %t319 = load %S.gen.FnSig, ptr %a318 + store %S.gen.FnSig %t319, ptr %a320 + %t321 = load ptr, ptr %a46 + %t322 = load %S.gen.FnSig, ptr %a320 + %t323 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t321, %S.gen.FnSig %t322) + store { ptr, i64, i64 } { ptr @.str.6197, i64 5, i64 0 }, ptr %a325 + store { ptr, i64, i64 } %t323, ptr %a326 + call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) + store { ptr, i64, i64 } %t323, ptr %a327 + call void @finch_str_drop(ptr %a327) + %t328 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6198, i64 1, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + store { ptr, i64, i64 } %t328, ptr %a332 + call void @finch_str_drop(ptr %a332) + %t333 = load { ptr, i64, i64 }, ptr %a329 + %t334 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 11 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t333, ptr %a337 + store { ptr, i64, i64 } %t335, ptr %a338 + call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) + store { ptr, i64, i64 } %t333, ptr %a339 + call void @finch_str_drop(ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t340, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.6199, i64 1, i64 0 }, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t340, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load { ptr, i64, i64 }, ptr %a341 + store { ptr, i64, i64 } %t345, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6200, i64 0, i64 0 }, ptr %a347 + %t348 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 13 + %t349 = getelementptr inbounds { ptr, i64, i64 }, ptr %t348, i32 0, i32 1 + %t350 = load i64, ptr %t349 + %t351 = icmp eq i64 %t350, 1 + br i1 %t351, label %then9229, label %endif9231 +then9229: + %t352 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6201, i64 133, i64 0 }, ptr %a347 + store { ptr, i64, i64 } %t352, ptr %a353 + call void @finch_str_drop(ptr %a353) + %t354 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t354, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.6202, i64 20, i64 0 }, ptr %a357 + call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a355 + %t359 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t358, ptr %a346 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + br label %endif9231 +endif9231: + %t361 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t361, ptr %a363 + store { ptr, i64, i64 } { ptr @.str.6203, i64 1, i64 0 }, ptr %a364 + call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a362 + %t366 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t365, ptr %a346 + store { ptr, i64, i64 } %t366, ptr %a367 + call void @finch_str_drop(ptr %a367) + store { ptr, i64, i64 } { ptr @.str.6204, i64 12, i64 0 }, ptr %a368 + %t369 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 9 + %t370 = load i1, ptr %t369 + br i1 %t370, label %then9232, label %else9233 +then9232: + %t371 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6205, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + %t375 = load { ptr, i64, i64 }, ptr %a372 + %t376 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t375, ptr %a346 + store { ptr, i64, i64 } %t376, ptr %a377 + call void @finch_str_drop(ptr %a377) + %t378 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t378, ptr %a380 + store { ptr, i64, i64 } { ptr @.str.6206, i64 2, i64 0 }, ptr %a381 + call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a379 + %t383 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t382, ptr %a385 + store { ptr, i64, i64 } %t383, ptr %a386 + call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) + store { ptr, i64, i64 } %t382, ptr %a387 + call void @finch_str_drop(ptr %a387) + %t388 = load { ptr, i64, i64 }, ptr %a384 + store { ptr, i64, i64 } %t388, ptr %a390 + store { ptr, i64, i64 } { ptr @.str.6207, i64 1, i64 0 }, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t388, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + %t394 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t393, ptr %a347 + store { ptr, i64, i64 } %t394, ptr %a395 + call void @finch_str_drop(ptr %a395) + %t396 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6208, i64 0, i64 0 }, ptr %a346 + store { ptr, i64, i64 } %t396, ptr %a397 + call void @finch_str_drop(ptr %a397) + %t398 = load ptr, ptr %a46 + %t399 = load %S.gen.FnSig, ptr %a320 + %t400 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t398, %S.gen.FnSig %t399) + store { ptr, i64, i64 } %t400, ptr %a401 + %t402 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t402, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.6209, i64 21, i64 0 }, ptr %a405 + call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a403 + %t407 = load { ptr, i64, i64 }, ptr %a401 + store { ptr, i64, i64 } %t406, ptr %a409 + store { ptr, i64, i64 } %t407, ptr %a410 + call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410) + store { ptr, i64, i64 } %t406, ptr %a411 + call void @finch_str_drop(ptr %a411) + %t412 = load { ptr, i64, i64 }, ptr %a408 + store { ptr, i64, i64 } %t412, ptr %a414 + store { ptr, i64, i64 } { ptr @.str.6210, i64 62, i64 0 }, ptr %a415 + call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) + store { ptr, i64, i64 } %t412, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a413 + %t418 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t417, ptr %a347 + store { ptr, i64, i64 } %t418, ptr %a419 + call void @finch_str_drop(ptr %a419) + %t420 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t420, ptr %a422 + store { ptr, i64, i64 } { ptr @.str.6211, i64 20, i64 0 }, ptr %a423 + call void @finch_str_concat(ptr %a421, ptr %a422, ptr %a423) + %t424 = load { ptr, i64, i64 }, ptr %a421 + %t425 = load { ptr, i64, i64 }, ptr %a401 + store { ptr, i64, i64 } %t424, ptr %a427 + store { ptr, i64, i64 } %t425, ptr %a428 + call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) + store { ptr, i64, i64 } %t424, ptr %a429 + call void @finch_str_drop(ptr %a429) + %t430 = load { ptr, i64, i64 }, ptr %a426 + store { ptr, i64, i64 } %t430, ptr %a432 + store { ptr, i64, i64 } { ptr @.str.6212, i64 78, i64 0 }, ptr %a433 + call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) + store { ptr, i64, i64 } %t430, ptr %a434 + call void @finch_str_drop(ptr %a434) + %t435 = load { ptr, i64, i64 }, ptr %a431 + %t436 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t435, ptr %a347 + store { ptr, i64, i64 } %t436, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t438, ptr %a440 + store { ptr, i64, i64 } { ptr @.str.6213, i64 62, i64 0 }, ptr %a441 + call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) + %t442 = load { ptr, i64, i64 }, ptr %a439 + %t443 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t442, ptr %a347 + store { ptr, i64, i64 } %t443, ptr %a444 + call void @finch_str_drop(ptr %a444) + %t445 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 + %t446 = getelementptr inbounds %S.ast.Type, ptr %t445, i32 0, i32 0 + %t447 = load { ptr, i64, i64 }, ptr %t446 + store { ptr, i64, i64 } %t447, ptr %a448 + store { ptr, i64, i64 } { ptr @.str.6214, i64 3, i64 0 }, ptr %a449 + %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) + %t451 = icmp ne i32 %t450, 0 + br i1 %t451, label %then9235, label %endif9237 +then9235: + %t452 = load { ptr, i64, i64 }, ptr %a401 + store { ptr, i64, i64 } { ptr @.str.6215, i64 20, i64 0 }, ptr %a454 + store { ptr, i64, i64 } %t452, ptr %a455 + call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) + %t456 = load { ptr, i64, i64 }, ptr %a453 + store { ptr, i64, i64 } %t456, ptr %a458 + store { ptr, i64, i64 } { ptr @.str.6216, i64 53, i64 0 }, ptr %a459 + call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459) + store { ptr, i64, i64 } %t456, ptr %a460 + call void @finch_str_drop(ptr %a460) + %t461 = load { ptr, i64, i64 }, ptr %a457 + %t462 = load { ptr, i64, i64 }, ptr %a368 + store { ptr, i64, i64 } %t461, ptr %a368 + store { ptr, i64, i64 } %t462, ptr %a463 + call void @finch_str_drop(ptr %a463) + br label %endif9237 +endif9237: + call void @finch_str_drop(ptr %a401) + br label %endif9234 +else9233: + %t464 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 + %t465 = getelementptr inbounds %S.ast.Type, ptr %t464, i32 0, i32 0 + %t466 = load { ptr, i64, i64 }, ptr %t465 + store { ptr, i64, i64 } %t466, ptr %a467 + store { ptr, i64, i64 } { ptr @.str.6217, i64 3, i64 0 }, ptr %a468 + %t469 = call i32 @finch_str_eq(ptr %a467, ptr %a468) + %t470 = icmp ne i32 %t469, 0 + br i1 %t470, label %then9238, label %endif9240 +then9238: + %t471 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6218, i64 5, i64 0 }, ptr %a473 + store { ptr, i64, i64 } %t471, ptr %a474 + call void @finch_str_concat(ptr %a472, ptr %a473, ptr %a474) + %t475 = load { ptr, i64, i64 }, ptr %a472 + %t476 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t475, ptr %a346 + store { ptr, i64, i64 } %t476, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = load { ptr, i64, i64 }, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.6219, i64 46, i64 0 }, ptr %a368 + store { ptr, i64, i64 } %t478, ptr %a479 + call void @finch_str_drop(ptr %a479) + br label %endif9240 +endif9240: + br label %endif9234 +endif9234: + %t480 = load ptr, ptr %a46 + %t481 = icmp eq ptr %t480, null + br i1 %t481, label %panic9241, label %ok9242 +panic9241: + call void @finch_panic(ptr @.str.6220, i64 5865, ptr @.str.6221) + unreachable +ok9242: + %t482 = getelementptr inbounds %S.gen.Gen, ptr %t480, i32 0, i32 3 + %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 + %t484 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6222, i64 48, i64 0 }, ptr %a486 + store { ptr, i64, i64 } %t484, ptr %a487 + call void @finch_str_concat(ptr %a485, ptr %a486, ptr %a487) + %t488 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } %t488, ptr %a490 + store { ptr, i64, i64 } { ptr @.str.6223, i64 2, i64 0 }, ptr %a491 + call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491) + store { ptr, i64, i64 } %t488, ptr %a492 + call void @finch_str_drop(ptr %a492) + %t493 = load { ptr, i64, i64 }, ptr %a489 + %t494 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t493, ptr %a496 + store { ptr, i64, i64 } %t494, ptr %a497 + call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497) + store { ptr, i64, i64 } %t493, ptr %a498 + call void @finch_str_drop(ptr %a498) + %t499 = load { ptr, i64, i64 }, ptr %a495 + store { ptr, i64, i64 } %t499, ptr %a501 + store { ptr, i64, i64 } { ptr @.str.6224, i64 1, i64 0 }, ptr %a502 + call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) + store { ptr, i64, i64 } %t499, ptr %a503 + call void @finch_str_drop(ptr %a503) + %t504 = load { ptr, i64, i64 }, ptr %a500 + %t505 = load { ptr, i64, i64 }, ptr %a368 + store { ptr, i64, i64 } %t504, ptr %a507 + store { ptr, i64, i64 } %t505, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t504, ptr %a509 + call void @finch_str_drop(ptr %a509) + %t510 = load { ptr, i64, i64 }, ptr %a506 + store { ptr, i64, i64 } %t510, ptr %a512 + store { ptr, i64, i64 } { ptr @.str.6225, i64 2, i64 0 }, ptr %a513 + call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) + store { ptr, i64, i64 } %t510, ptr %a514 + call void @finch_str_drop(ptr %a514) + %t515 = load { ptr, i64, i64 }, ptr %a511 + %t516 = load i64, ptr %t483 + %t517 = add i64 %t516, 1 + call void @finch_arr_reserve(ptr %t482, i64 %t517, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t518 = load ptr, ptr %t482 + %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 %t516 + store { ptr, i64, i64 } %t515, ptr %t519 + store i64 %t517, ptr %t483 + %t520 = load ptr, ptr %a46 + %t521 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t520) + call void @finch_str_drop(ptr %a368) + call void @finch_str_drop(ptr %a347) + call void @finch_str_drop(ptr %a346) + call void @finch.drop.S_gen_FnSig(ptr %a320) + call void @finch.drop.S_gen_Gen(ptr %a45) + ret { ptr, i64, i64 } %t521 +} + +define internal %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + %t8 = insertvalue %S.docs.Doc zeroinitializer, { ptr, i64, i64 } %t7, 0 + %t9 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + %t13 = insertvalue %S.docs.Doc %t8, { ptr, i64, i64 } %t12, 1 + %t14 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_copy(ptr %a16, ptr %a15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + %t18 = insertvalue %S.docs.Doc %t13, { ptr, i64, i64 } %t17, 2 + ret %S.docs.Doc %t18 +} + +define internal { ptr, i64, i64 } @finch.docs.builtins() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6226, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6227, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6228, i64 78, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6229, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6230, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.6231, i64 77, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6232, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6233, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6234, i64 121, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6235, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6236, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.6237, i64 83, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6238, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6239, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6240, i64 29, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6241, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6242, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6243, i64 73, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6244, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6245, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6246, i64 98, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6247, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6248, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.6249, i64 66, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6250, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6251, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6252, i64 48, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6253, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6254, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6255, i64 77, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6256, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6257, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6258, i64 66, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6259, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6260, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6261, i64 73, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6262, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6263, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6264, i64 61, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6265, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6266, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6267, i64 130, i64 0 }) + %t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6268, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6269, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6270, i64 75, i64 0 }) + %t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6271, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6272, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6273, i64 29, i64 0 }) + %t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6274, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6275, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6276, i64 26, i64 0 }) + %t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6277, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6278, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6279, i64 88, i64 0 }) + %t19 = mul i64 18, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t20 = call ptr @finch_alloc(i64 %t19) + %t21 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 0 + store %S.docs.Doc %t1, ptr %t21 + %t22 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 1 + store %S.docs.Doc %t2, ptr %t22 + %t23 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 2 + store %S.docs.Doc %t3, ptr %t23 + %t24 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 3 + store %S.docs.Doc %t4, ptr %t24 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 4 + store %S.docs.Doc %t5, ptr %t25 + %t26 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 5 + store %S.docs.Doc %t6, ptr %t26 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 6 + store %S.docs.Doc %t7, ptr %t27 + %t28 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 7 + store %S.docs.Doc %t8, ptr %t28 + %t29 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 8 + store %S.docs.Doc %t9, ptr %t29 + %t30 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 9 + store %S.docs.Doc %t10, ptr %t30 + %t31 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 10 + store %S.docs.Doc %t11, ptr %t31 + %t32 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 11 + store %S.docs.Doc %t12, ptr %t32 + %t33 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 12 + store %S.docs.Doc %t13, ptr %t33 + %t34 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 13 + store %S.docs.Doc %t14, ptr %t34 + %t35 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 14 + store %S.docs.Doc %t15, ptr %t35 + %t36 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 15 + store %S.docs.Doc %t16, ptr %t36 + %t37 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 16 + store %S.docs.Doc %t17, ptr %t37 + %t38 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 17 + store %S.docs.Doc %t18, ptr %t38 + %t39 = insertvalue { ptr, i64, i64 } undef, ptr %t20, 0 + %t40 = insertvalue { ptr, i64, i64 } %t39, i64 18, 1 + %t41 = insertvalue { ptr, i64, i64 } %t40, i64 18, 2 + ret { ptr, i64, i64 } %t41 +} + +define internal { ptr, i64, i64 } @finch.docs.arrayMethods() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6280, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6281, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6282, i64 23, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6283, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6284, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6285, i64 40, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6286, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6287, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6288, i64 18, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6289, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6290, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6291, i64 43, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6292, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6293, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6294, i64 38, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6295, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6296, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6297, i64 37, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6298, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6299, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6300, i64 19, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6301, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6302, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6303, i64 46, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6304, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6305, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6306, i64 22, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6307, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6308, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6309, i64 18, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6310, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6311, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6312, i64 37, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6313, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6314, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6315, i64 18, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6316, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6317, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6318, i64 45, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6319, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6320, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6321, i64 47, i64 0 }) + %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t16 = call ptr @finch_alloc(i64 %t15) + %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 + store %S.docs.Doc %t1, ptr %t17 + %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 + store %S.docs.Doc %t2, ptr %t18 + %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 + store %S.docs.Doc %t3, ptr %t19 + %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 + store %S.docs.Doc %t4, ptr %t20 + %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 + store %S.docs.Doc %t5, ptr %t21 + %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 + store %S.docs.Doc %t6, ptr %t22 + %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 + store %S.docs.Doc %t7, ptr %t23 + %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 + store %S.docs.Doc %t8, ptr %t24 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 + store %S.docs.Doc %t9, ptr %t25 + %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 + store %S.docs.Doc %t10, ptr %t26 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 + store %S.docs.Doc %t11, ptr %t27 + %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 + store %S.docs.Doc %t12, ptr %t28 + %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 + store %S.docs.Doc %t13, ptr %t29 + %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 + store %S.docs.Doc %t14, ptr %t30 + %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 + %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 + %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.docs.strMethods() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6322, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6323, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 20, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6325, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6326, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6327, i64 59, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6328, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6329, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.6330, i64 29, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6331, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6332, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6333, i64 22, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6334, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6335, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 24, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6337, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6338, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6339, i64 27, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6340, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6341, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6342, i64 25, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6343, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6344, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6345, i64 62, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6346, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6347, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6348, i64 41, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6349, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6350, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6351, i64 24, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6352, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6353, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6354, i64 24, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6355, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6356, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6357, i64 26, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6358, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6359, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6360, i64 17, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6361, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6362, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6363, i64 22, i64 0 }) + %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t16 = call ptr @finch_alloc(i64 %t15) + %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 + store %S.docs.Doc %t1, ptr %t17 + %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 + store %S.docs.Doc %t2, ptr %t18 + %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 + store %S.docs.Doc %t3, ptr %t19 + %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 + store %S.docs.Doc %t4, ptr %t20 + %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 + store %S.docs.Doc %t5, ptr %t21 + %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 + store %S.docs.Doc %t6, ptr %t22 + %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 + store %S.docs.Doc %t7, ptr %t23 + %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 + store %S.docs.Doc %t8, ptr %t24 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 + store %S.docs.Doc %t9, ptr %t25 + %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 + store %S.docs.Doc %t10, ptr %t26 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 + store %S.docs.Doc %t11, ptr %t27 + %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 + store %S.docs.Doc %t12, ptr %t28 + %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 + store %S.docs.Doc %t13, ptr %t29 + %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 + store %S.docs.Doc %t14, ptr %t30 + %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 + %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 + %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.docs.mapMethods() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6364, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6365, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6366, i64 19, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6367, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6368, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6369, i64 22, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6370, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6371, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6372, i64 53, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6373, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6374, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6375, i64 52, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6376, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6377, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6378, i64 19, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6379, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6380, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6381, i64 39, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6382, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6383, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6384, i64 47, i64 0 }) + %t8 = mul i64 7, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t9 = call ptr @finch_alloc(i64 %t8) + %t10 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 0 + store %S.docs.Doc %t1, ptr %t10 + %t11 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 1 + store %S.docs.Doc %t2, ptr %t11 + %t12 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 2 + store %S.docs.Doc %t3, ptr %t12 + %t13 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 3 + store %S.docs.Doc %t4, ptr %t13 + %t14 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 4 + store %S.docs.Doc %t5, ptr %t14 + %t15 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 5 + store %S.docs.Doc %t6, ptr %t15 + %t16 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 6 + store %S.docs.Doc %t7, ptr %t16 + %t17 = insertvalue { ptr, i64, i64 } undef, ptr %t9, 0 + %t18 = insertvalue { ptr, i64, i64 } %t17, i64 7, 1 + %t19 = insertvalue { ptr, i64, i64 } %t18, i64 7, 2 + ret { ptr, i64, i64 } %t19 +} + +define internal { ptr, i64, i64 } @finch.docs.keywords() { +entry: + + %t1 = mul i64 22, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6385, i64 2, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6386, i64 6, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 + store { ptr, i64, i64 } { ptr @.str.6387, i64 2, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 + store { ptr, i64, i64 } { ptr @.str.6388, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 + store { ptr, i64, i64 } { ptr @.str.6389, i64 5, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 + store { ptr, i64, i64 } { ptr @.str.6390, i64 3, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 + store { ptr, i64, i64 } { ptr @.str.6391, i64 2, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 + store { ptr, i64, i64 } { ptr @.str.6392, i64 5, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 + store { ptr, i64, i64 } { ptr @.str.6393, i64 8, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 + store { ptr, i64, i64 } { ptr @.str.6394, i64 4, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 + store { ptr, i64, i64 } { ptr @.str.6395, i64 5, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 + store { ptr, i64, i64 } { ptr @.str.6396, i64 4, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 + store { ptr, i64, i64 } { ptr @.str.6397, i64 6, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 + store { ptr, i64, i64 } { ptr @.str.6398, i64 4, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 + store { ptr, i64, i64 } { ptr @.str.6399, i64 6, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 + store { ptr, i64, i64 } { ptr @.str.6400, i64 4, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 + store { ptr, i64, i64 } { ptr @.str.6401, i64 5, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 + store { ptr, i64, i64 } { ptr @.str.6402, i64 6, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 + store { ptr, i64, i64 } { ptr @.str.6403, i64 5, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 + store { ptr, i64, i64 } { ptr @.str.6404, i64 2, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 + store { ptr, i64, i64 } { ptr @.str.6405, i64 3, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 + store { ptr, i64, i64 } { ptr @.str.6406, i64 4, i64 0 }, ptr %t24 + %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t26 = insertvalue { ptr, i64, i64 } %t25, i64 22, 1 + %t27 = insertvalue { ptr, i64, i64 } %t26, i64 22, 2 + ret { ptr, i64, i64 } %t27 +} + +define internal { ptr, i64, i64 } @finch.docs.typeNames() { +entry: + + %t1 = mul i64 17, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6407, i64 3, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6408, i64 5, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 + store { ptr, i64, i64 } { ptr @.str.6409, i64 4, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 + store { ptr, i64, i64 } { ptr @.str.6410, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 + store { ptr, i64, i64 } { ptr @.str.6411, i64 3, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 + store { ptr, i64, i64 } { ptr @.str.6412, i64 3, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 + store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 + store { ptr, i64, i64 } { ptr @.str.6414, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 + store { ptr, i64, i64 } { ptr @.str.6415, i64 3, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 + store { ptr, i64, i64 } { ptr @.str.6416, i64 3, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 + store { ptr, i64, i64 } { ptr @.str.6417, i64 3, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 + store { ptr, i64, i64 } { ptr @.str.6418, i64 2, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 + store { ptr, i64, i64 } { ptr @.str.6419, i64 3, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 + store { ptr, i64, i64 } { ptr @.str.6420, i64 3, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 + store { ptr, i64, i64 } { ptr @.str.6421, i64 3, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 + store { ptr, i64, i64 } { ptr @.str.6422, i64 3, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 + store { ptr, i64, i64 } { ptr @.str.6423, i64 3, i64 0 }, ptr %t19 + %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t21 = insertvalue { ptr, i64, i64 } %t20, i64 17, 1 + %t22 = insertvalue { ptr, i64, i64 } %t21, i64 17, 2 + ret { ptr, i64, i64 } %t22 +} + +define internal void @finch.copy.S_docs_Doc(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.docs.Doc, ptr %src + store %S.docs.Doc %t1, ptr %dst + %t2 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca %S.docs.Doc, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca %S.docs.Doc, align 16 + %a21 = alloca %S.docs.Doc, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond9243 +each.cond9243: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body9244, label %each.end9246 +each.body9244: + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 + %t10 = load %S.docs.Doc, ptr %t9 + store %S.docs.Doc %t10, ptr %a11 + %t12 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } %t14, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br i1 %t18, label %then9247, label %endif9249 +then9247: + %t19 = load %S.docs.Doc, ptr %a11 + store %S.docs.Doc %t19, ptr %a20 + call void @finch.copy.S_docs_Doc(ptr %a21, ptr %a20) + %t22 = load %S.docs.Doc, ptr %a21 + ret %S.docs.Doc %t22 +endif9249: + br label %each.step9245 +each.step9245: + %t23 = load i64, ptr %a3 + %t24 = add i64 %t23, 1 + store i64 %t24, ptr %a3 + br label %each.cond9243 +each.end9246: + ret %S.docs.Doc zeroinitializer +} + +define internal { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %p0) { +entry: + %a1 = alloca %S.docs.Doc, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + store %S.docs.Doc %p0, ptr %a1 + %t2 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 1 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } { ptr @.str.6424, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t3, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6425, i64 5, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + %t13 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 2 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t12, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t12, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + ret { ptr, i64, i64 } %t19 +} + +define internal { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %p0) { +entry: + %a1 = alloca %S.C.CXString, align 16 + %a3 = alloca [32 x i8], align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca [32 x i8], align 16 + store %S.C.CXString %p0, ptr %a1 + %t2 = load %S.C.CXString, ptr %a1 + store %S.C.CXString %t2, ptr %a3 + %t4 = getelementptr inbounds i8, ptr %a3, i64 0 + %t5 = load [2 x i64], ptr %t4 + %t6 = call ptr @clang_getCString([2 x i64] %t5) + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + call void @finch_str_from_c(ptr %a7, ptr %t6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch_str_copy(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = load %S.C.CXString, ptr %a1 + store %S.C.CXString %t13, ptr %a14 + %t15 = getelementptr inbounds i8, ptr %a14, i64 0 + %t16 = load [2 x i64], ptr %t15 + call void @clang_disposeString([2 x i64] %t16) + %t17 = load { ptr, i64, i64 }, ptr %a12 + ret { ptr, i64, i64 } %t17 +} + +define internal %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t2, ptr %a3 + call void @finch.copy.S_ast_Type(ptr %a4, ptr %a3) + %t5 = load %S.ast.Type, ptr %a4 + %t6 = insertvalue %S.cimport.Mapped zeroinitializer, %S.ast.Type %t5, 0 + %t7 = insertvalue %S.cimport.Mapped %t6, i1 true, 2 + ret %S.cimport.Mapped %t7 +} + +define internal %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.cimport.Mapped zeroinitializer, { ptr, i64, i64 } %t5, 1 + %t7 = insertvalue %S.cimport.Mapped %t6, i1 false, 2 + ret %S.cimport.Mapped %t7 +} + +define internal %S.ast.Type @finch.cimport.fixed(%S.ast.Type %p0, i64 %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca i64, align 16 + %a6 = alloca %S.ast.Type, align 16 + %a10 = alloca %S.ast.Type, align 16 + %a11 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6426, i64 5, i64 0 }, 0 + %t4 = load i64, ptr %a2 + %t5 = insertvalue %S.ast.Type %t3, i64 %t4, 4 + store %S.ast.Type %t5, ptr %a6 + %t7 = getelementptr inbounds %S.ast.Type, ptr %a6, i32 0, i32 1 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 + %t9 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t9, ptr %a10 + call void @finch.copy.S_ast_Type(ptr %a11, ptr %a10) + %t12 = load %S.ast.Type, ptr %a11 + %t13 = load i64, ptr %t8 + %t14 = add i64 %t13, 1 + call void @finch_arr_reserve(ptr %t7, i64 %t14, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t15 = load ptr, ptr %t7 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 + store %S.ast.Type %t12, ptr %t16 + store i64 %t14, ptr %t8 + %t17 = load %S.ast.Type, ptr %a6 + ret %S.ast.Type %t17 +} + +define internal { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca i1, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca i64, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t3, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6427, i64 15, i64 0 }, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + %t9 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a10, i64 %t9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t8, ptr %a15 + call void @finch_str_drop(ptr %a15) + store { ptr, i64, i64 } %t11, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6428, i64 4, i64 0 }, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.6429, i64 13, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t29, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.6430, i64 2, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t43, ptr %a44 + %t45 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.6431, i64 0, i64 0 }, ptr %a47 + %t48 = call i32 @finch_write_file(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + %t50 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6432, i64 12, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a51 + %t55 = load { ptr, i64, i64 }, ptr %a44 + %t56 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t54, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t54, ptr %a60 + call void @finch_str_drop(ptr %a60) + store { ptr, i64, i64 } %t56, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t62, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.6433, i64 4, i64 0 }, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + %t68 = load { ptr, i64, i64 }, ptr %a23 + %t69 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t68) + store { ptr, i64, i64 } %t67, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t67, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t69, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t75, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.6434, i64 3, i64 0 }, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = call { ptr, i64, i64 } @finch.host.nullDevice() + store { ptr, i64, i64 } %t80, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t80, ptr %a85 + call void @finch_str_drop(ptr %a85) + store { ptr, i64, i64 } %t81, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a82 + %t88 = call i64 @finch.host.run({ ptr, i64, i64 } %t87) + store { ptr, i64, i64 } %t87, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a44 + call void @finch.host.remove({ ptr, i64, i64 } %t90) + %t91 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i32 @finch_file_exists(ptr %a92) + %t94 = icmp ne i32 %t93, 0 + %t95 = xor i1 %t94, true + br i1 %t95, label %then9250, label %endif9252 +then9250: + %t96 = load { ptr, i64, i64 }, ptr %a2 + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a23) + ret { ptr, i64, i64 } %t96 +endif9252: + store i1 false, ptr %a97 + %t98 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_read_file(ptr %a100, ptr %a99, ptr @.str.6435, i64 114) + %t101 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t101, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.6437, i64 1, i64 0 }, ptr %a104 + call void @finch_str_split(ptr %a105, ptr %a102, ptr %a104) + %t106 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } %t101, ptr %a107 + call void @finch_str_drop(ptr %a107) + store { ptr, i64, i64 } %t106, ptr %a108 + store i64 0, ptr %a109 + br label %each.cond9253 +each.cond9253: + %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %a108, i32 0, i32 1 + %t111 = load i64, ptr %t110 + %t112 = load i64, ptr %a109 + %t113 = icmp slt i64 %t112, %t111 + br i1 %t113, label %each.body9254, label %each.end9256 +each.body9254: + %t114 = load ptr, ptr %a108 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 %t112 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + %t118 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_trim(ptr %a120, ptr %a119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t121, ptr %a122 + %t123 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t123, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.6440, i64 34, i64 0 }, ptr %a126 + %t127 = call i32 @finch_str_starts(ptr %a124, ptr %a126) + %t128 = icmp ne i32 %t127, 0 + br i1 %t128, label %then9257, label %endif9259 +then9257: + store i1 true, ptr %a97 + call void @finch_str_drop(ptr %a122) + br label %each.step9255 +endif9259: + %t129 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t129, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6442, i64 19, i64 0 }, ptr %a132 + %t133 = call i32 @finch_str_starts(ptr %a130, ptr %a132) + %t134 = icmp ne i32 %t133, 0 + br i1 %t134, label %then9260, label %endif9262 +then9260: + call void @finch_str_drop(ptr %a122) + br label %each.end9256 +endif9262: + %t135 = load i1, ptr %a97 + %t136 = xor i1 %t135, true + br label %logic.from9263 +logic.from9263: + br i1 %t136, label %logic.end9265, label %logic.rhs9264 +logic.rhs9264: + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 + %t138 = load i64, ptr %t137 + %t139 = icmp eq i64 %t138, 0 + br label %logic.rend9266 +logic.rend9266: + br label %logic.end9265 +logic.end9265: + %t140 = phi i1 [ true, %logic.from9263 ], [ %t139, %logic.rend9266 ] + br i1 %t140, label %then9267, label %endif9269 +then9267: + call void @finch_str_drop(ptr %a122) + br label %each.step9255 +endif9269: + %t141 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t141, ptr %a142 + store { ptr, i64, i64 } { ptr @.str.6444, i64 22, i64 0 }, ptr %a144 + %t145 = call i32 @finch_str_ends(ptr %a142, ptr %a144) + %t146 = icmp ne i32 %t145, 0 + br i1 %t146, label %then9270, label %else9271 +then9270: + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t148 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t148, ptr %a149 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 + %t152 = load i64, ptr %t151 + %t153 = sub i64 %t152, 22 + call void @finch_str_sub(ptr %a150, ptr %a149, i64 0, i64 %t153, ptr @.str.6446, i64 128) + %t154 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } { ptr @.str.6445, i64 11, i64 0 }, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t154, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load { ptr, i64, i64 }, ptr %a155 + %t160 = load i64, ptr %t147 + %t161 = add i64 %t160, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t161, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t162 = load ptr, ptr %a2 + %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i64 %t160 + store { ptr, i64, i64 } %t159, ptr %t163 + store i64 %t161, ptr %t147 + br label %endif9272 +else9271: + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t165 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.6447, i64 8, i64 0 }, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a166 + %t170 = load i64, ptr %t164 + %t171 = add i64 %t170, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t171, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t172 = load ptr, ptr %a2 + %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i64 %t170 + store { ptr, i64, i64 } %t169, ptr %t173 + store i64 %t171, ptr %t164 + br label %endif9272 +endif9272: + call void @finch_str_drop(ptr %a122) + br label %each.step9255 +each.step9255: + %t174 = load i64, ptr %a109 + %t175 = add i64 %t174, 1 + store i64 %t175, ptr %a109 + br label %each.cond9253 +each.end9256: + call void @finch.drop.arr_str(ptr %a108) + %t176 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.host.remove({ ptr, i64, i64 } %t176) + %t177 = load { ptr, i64, i64 }, ptr %a2 + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a23) + ret { ptr, i64, i64 } %t177 +} + +define internal { ptr, i64, i64 } @finch.cimport.recordName(ptr %p0, %S.C.CXType %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXType, align 16 + %a3 = alloca %S.C.CXCursor, align 16 + %a5 = alloca %S.C.CXType, align 16 + %a7 = alloca %S.C.CXCursor, align 16 + %a9 = alloca %S.C.CXCursor, align 16 + %a11 = alloca [32 x i8], align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca %S.C.CXCursor, align 16 + %a42 = alloca [32 x i8], align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca i32, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXType %p1, ptr %a2 + %t4 = load %S.C.CXType, ptr %a2 + store %S.C.CXType %t4, ptr %a5 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a3, ptr %a5) + %t6 = load %S.C.CXCursor, ptr %a3 + store %S.C.CXCursor %t6, ptr %a7 + %t8 = load %S.C.CXCursor, ptr %a7 + store %S.C.CXCursor %t8, ptr %a9 + %t10 = call [2 x i64] @clang_getCursorUSR(ptr %a9) + store [2 x i64] %t10, ptr %a11 + %t12 = load %S.C.CXString, ptr %a11 + %t13 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t12) + store { ptr, i64, i64 } %t13, ptr %a14 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic9273, label %ok9274 +panic9273: + call void @finch_panic(ptr @.str.6448, i64 143, ptr @.str.6449) + unreachable +ok9274: + %t17 = getelementptr inbounds %S.cimport.Importer, ptr %t15, i32 0, i32 3 + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = call i64 @finch_map_find(ptr %t17, ptr %a19, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t21 = icmp sge i64 %t20, 0 + br i1 %t21, label %then9275, label %endif9277 +then9275: + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic9278, label %ok9279 +panic9278: + call void @finch_panic(ptr @.str.6450, i64 144, ptr @.str.6451) + unreachable +ok9279: + %t24 = getelementptr inbounds %S.cimport.Importer, ptr %t22, i32 0, i32 3 + %t25 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = call i64 @finch_map_find(ptr %t24, ptr %a26, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t28 = icmp slt i64 %t27, 0 + br i1 %t28, label %map.missing9280, label %map.found9281 +map.missing9280: + store { ptr, i64, i64 } zeroinitializer, ptr %a29 + store { ptr, i64, i64 } %t25, ptr %a30 + call void @finch_buf_str(ptr %a29, ptr %a30, i32 1) + call void @finch_map_missing(ptr @.str.6452, i64 144, ptr %a29) + unreachable +map.found9281: + %t31 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t24, i32 0, i32 0 + %t32 = load ptr, ptr %t31 + %t33 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t32, i64 %t27 + %t34 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t33, i32 0, i32 2 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + call void @finch_str_drop(ptr %a14) + ret { ptr, i64, i64 } %t38 +endif9277: + %t39 = load %S.C.CXCursor, ptr %a7 + store %S.C.CXCursor %t39, ptr %a40 + %t41 = call [2 x i64] @clang_getCursorSpelling(ptr %a40) + store [2 x i64] %t41, ptr %a42 + %t43 = load %S.C.CXString, ptr %a42 + %t44 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t43) + store { ptr, i64, i64 } %t44, ptr %a45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = icmp eq i64 %t47, 0 + br label %logic.from9282 +logic.from9282: + br i1 %t48, label %logic.end9284, label %logic.rhs9283 +logic.rhs9283: + %t49 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6454, i64 1, i64 0 }, ptr %a52 + %t53 = call i64 @finch_str_find(ptr %a50, ptr %a52) + %t54 = icmp sge i64 %t53, 0 + br label %logic.rend9285 +logic.rend9285: + br label %logic.end9284 +logic.end9284: + %t55 = phi i1 [ true, %logic.from9282 ], [ %t54, %logic.rend9285 ] + br i1 %t55, label %then9286, label %endif9288 +then9286: + %t56 = load ptr, ptr %a1 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic9289, label %ok9290 +panic9289: + call void @finch_panic(ptr @.str.6455, i64 148, ptr @.str.6456) + unreachable +ok9290: + %t58 = getelementptr inbounds %S.cimport.Importer, ptr %t56, i32 0, i32 5 + %t59 = load i64, ptr %t58 + %t60 = add i64 %t59, 1 + store i64 %t60, ptr %t58 + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic9291, label %ok9292 +panic9291: + call void @finch_panic(ptr @.str.6458, i64 149, ptr @.str.6459) + unreachable +ok9292: + %t63 = getelementptr inbounds %S.cimport.Importer, ptr %t61, i32 0, i32 5 + %t64 = load i64, ptr %t63 + call void @finch_str_from_int(ptr %a65, i64 %t64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.6457, i64 12, i64 0 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t71, ptr %a45 + store { ptr, i64, i64 } %t72, ptr %a73 + call void @finch_str_drop(ptr %a73) + br label %endif9288 +endif9288: + %t74 = load { ptr, i64, i64 }, ptr %a45 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic9293, label %ok9294 +panic9293: + call void @finch_panic(ptr @.str.6460, i64 151, ptr @.str.6461) + unreachable +ok9294: + %t77 = getelementptr inbounds %S.cimport.Importer, ptr %t75, i32 0, i32 3 + %t78 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t78, ptr %a79 + store i32 0, ptr %a80 + %t81 = call i64 @finch_map_slot(ptr %t77, ptr %a79, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a80) + %t82 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t77, i32 0, i32 0 + %t83 = load ptr, ptr %t82 + %t84 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i64 %t81 + %t85 = load i32, ptr %a80 + %t86 = icmp ne i32 %t85, 0 + br i1 %t86, label %map.new9295, label %map.have9296 +map.new9295: + %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 1 + call void @finch_str_copy(ptr %t87, ptr %a79) + %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t88 + br label %map.have9296 +map.have9296: + %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 + store { ptr, i64, i64 } %t74, ptr %a90 + call void @finch_str_copy(ptr %a91, ptr %a90) + %t92 = load { ptr, i64, i64 }, ptr %a91 + %t93 = load { ptr, i64, i64 }, ptr %t89 + store { ptr, i64, i64 } %t92, ptr %t89 + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a45 + call void @finch_str_drop(ptr %a14) + ret { ptr, i64, i64 } %t95 +} + +define internal i32 @finch.c.cimport.visitField(ptr %c0, ptr %c1) { +entry: + + %t1 = load %S.C.CXCursor, ptr %c0 + %t2 = call i32 @finch.cimport.visitField(%S.C.CXCursor %t1, ptr %c1) + ret i32 %t2 +} + +define internal { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %p0, %S.C.CXType %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXType, align 16 + %a3 = alloca %S.C.CXType, align 16 + %a5 = alloca %S.C.CXType, align 16 + %a7 = alloca %S.C.CXType, align 16 + %a8 = alloca %S.C.CXCursor, align 16 + %a10 = alloca %S.C.CXType, align 16 + %a12 = alloca %S.C.CXCursor, align 16 + %a14 = alloca %S.C.CXCursor, align 16 + %a16 = alloca [32 x i8], align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca %S.C.CXType, align 16 + %a44 = alloca i64, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca i32, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca %S.C.CXType, align 16 + %a73 = alloca %S.cimport.CStruct, align 16 + %a75 = alloca %S.C.CXCursor, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca %S.cimport.FieldCtx, align 16 + %a86 = alloca %S.C.CXType, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca i32, align 16 + %a117 = alloca %S.cimport.CStruct, align 16 + %a118 = alloca %S.cimport.CStruct, align 16 + %a121 = alloca %S.cimport.CStruct, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXType %p1, ptr %a2 + %t4 = load %S.C.CXType, ptr %a2 + store %S.C.CXType %t4, ptr %a5 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a3, ptr %a5) + %t6 = load %S.C.CXType, ptr %a3 + store %S.C.CXType %t6, ptr %a7 + %t9 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t9, ptr %a10 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a8, ptr %a10) + %t11 = load %S.C.CXCursor, ptr %a8 + store %S.C.CXCursor %t11, ptr %a12 + %t13 = load %S.C.CXCursor, ptr %a12 + store %S.C.CXCursor %t13, ptr %a14 + %t15 = call [2 x i64] @clang_getCursorUSR(ptr %a14) + store [2 x i64] %t15, ptr %a16 + %t17 = load %S.C.CXString, ptr %a16 + %t18 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t17) + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = load %S.C.CXType, ptr %a7 + %t22 = call { ptr, i64, i64 } @finch.cimport.recordName(ptr %t20, %S.C.CXType %t21) + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic9297, label %ok9298 +panic9297: + call void @finch_panic(ptr @.str.6462, i64 161, ptr @.str.6463) + unreachable +ok9298: + %t26 = getelementptr inbounds %S.cimport.Importer, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds %S.cimport.CImports, ptr %t26, i32 0, i32 3 + %t28 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t28, ptr %a29 + %t30 = call i64 @finch_map_find(ptr %t27, ptr %a29, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t31 = icmp sge i64 %t30, 0 + br label %logic.from9299 +logic.from9299: + br i1 %t31, label %logic.end9301, label %logic.rhs9300 +logic.rhs9300: + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic9302, label %ok9303 +panic9302: + call void @finch_panic(ptr @.str.6464, i64 161, ptr @.str.6465) + unreachable +ok9303: + %t34 = getelementptr inbounds %S.cimport.Importer, ptr %t32, i32 0, i32 4 + %t35 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t35, ptr %a36 + %t37 = call i64 @finch_map_find(ptr %t34, ptr %a36, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t38 = icmp sge i64 %t37, 0 + br label %logic.rend9304 +logic.rend9304: + br label %logic.end9301 +logic.end9301: + %t39 = phi i1 [ true, %logic.from9299 ], [ %t38, %logic.rend9304 ] + br i1 %t39, label %then9305, label %endif9307 +then9305: + %t40 = load { ptr, i64, i64 }, ptr %a23 + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t40 +endif9307: + %t41 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t41, ptr %a42 + %t43 = call i64 @clang_Type_getSizeOf(ptr %a42) + store i64 %t43, ptr %a44 + %t45 = load i64, ptr %a44 + %t46 = icmp slt i64 %t45, 0 + br i1 %t46, label %then9308, label %endif9310 +then9308: + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } { ptr @.str.6466, i64 0, i64 0 } +endif9310: + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic9311, label %ok9312 +panic9311: + call void @finch_panic(ptr @.str.6467, i64 168, ptr @.str.6468) + unreachable +ok9312: + %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 4 + %t50 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t50, ptr %a51 + store i32 0, ptr %a52 + %t53 = call i64 @finch_map_slot(ptr %t49, ptr %a51, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a52) + %t54 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t49, i32 0, i32 0 + %t55 = load ptr, ptr %t54 + %t56 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t55, i64 %t53 + %t57 = load i32, ptr %a52 + %t58 = icmp ne i32 %t57, 0 + br i1 %t58, label %map.new9313, label %map.have9314 +map.new9313: + %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 1 + call void @finch_str_copy(ptr %t59, ptr %a51) + %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 + store i1 false, ptr %t60 + br label %map.have9314 +map.have9314: + %t61 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 + store i1 true, ptr %t61 + %t62 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + %t66 = insertvalue %S.cimport.CStruct zeroinitializer, { ptr, i64, i64 } %t65, 0 + %t67 = load i64, ptr %a44 + %t68 = insertvalue %S.cimport.CStruct %t66, i64 %t67, 2 + %t69 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t69, ptr %a70 + %t71 = call i64 @clang_Type_getAlignOf(ptr %a70) + %t72 = insertvalue %S.cimport.CStruct %t68, i64 %t71, 3 + store %S.cimport.CStruct %t72, ptr %a73 + %t74 = load %S.C.CXCursor, ptr %a12 + store %S.C.CXCursor %t74, ptr %a75 + %t76 = call i32 @clang_getCursorKind(ptr %a75) + %t77 = icmp eq i32 %t76, 3 + br i1 %t77, label %then9315, label %endif9317 +then9315: + %t78 = getelementptr inbounds %S.cimport.CStruct, ptr %a73, i32 0, i32 4 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } { ptr @.str.6469, i64 12, i64 0 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif9317 +endif9317: + %t81 = load ptr, ptr %a1 + %t82 = insertvalue %S.cimport.FieldCtx zeroinitializer, ptr %t81, 0 + %t83 = insertvalue %S.cimport.FieldCtx %t82, ptr %a73, 1 + store %S.cimport.FieldCtx %t83, ptr %a84 + %t85 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t85, ptr %a86 + %t87 = call i32 @clang_Type_visitFields(ptr %a86, ptr @finch.c.cimport.visitField, ptr %a84) + %t88 = load ptr, ptr %a1 + %t89 = icmp eq ptr %t88, null + br i1 %t89, label %panic9318, label %ok9319 +panic9318: + call void @finch_panic(ptr @.str.6470, i64 176, ptr @.str.6471) + unreachable +ok9319: + %t90 = getelementptr inbounds %S.cimport.Importer, ptr %t88, i32 0, i32 4 + %t91 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i64 @finch_map_find(ptr %t90, ptr %a92, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t94 = icmp sge i64 %t93, 0 + br i1 %t94, label %remove.hit9320, label %remove.end9321 +remove.hit9320: + %t95 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t90, i32 0, i32 0 + %t96 = load ptr, ptr %t95 + %t97 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t96, i64 %t93 + %t98 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t97, i32 0, i32 1 + call void @finch_str_drop(ptr %t98) + %t99 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t97, i32 0, i32 2 + call void @finch_map_remove_at(ptr %t90, i64 %t93, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64)) + br label %remove.end9321 +remove.end9321: + %t100 = load %S.cimport.CStruct, ptr %a73 + %t101 = load ptr, ptr %a1 + %t102 = icmp eq ptr %t101, null + br i1 %t102, label %panic9322, label %ok9323 +panic9322: + call void @finch_panic(ptr @.str.6472, i64 177, ptr @.str.6473) + unreachable +ok9323: + %t103 = getelementptr inbounds %S.cimport.Importer, ptr %t101, i32 0, i32 0 + %t104 = getelementptr inbounds %S.cimport.CImports, ptr %t103, i32 0, i32 3 + %t105 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t105, ptr %a106 + store i32 0, ptr %a107 + %t108 = call i64 @finch_map_slot(ptr %t104, ptr %a106, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a107) + %t109 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t104, i32 0, i32 0 + %t110 = load ptr, ptr %t109 + %t111 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t110, i64 %t108 + %t112 = load i32, ptr %a107 + %t113 = icmp ne i32 %t112, 0 + br i1 %t113, label %map.new9324, label %map.have9325 +map.new9324: + %t114 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 1 + call void @finch_str_copy(ptr %t114, ptr %a106) + %t115 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 + store %S.cimport.CStruct zeroinitializer, ptr %t115 + br label %map.have9325 +map.have9325: + %t116 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 + store %S.cimport.CStruct %t100, ptr %a117 + call void @finch.copy.S_cimport_CStruct(ptr %a118, ptr %a117) + %t119 = load %S.cimport.CStruct, ptr %a118 + %t120 = load %S.cimport.CStruct, ptr %t116 + store %S.cimport.CStruct %t119, ptr %t116 + store %S.cimport.CStruct %t120, ptr %a121 + call void @finch.drop.S_cimport_CStruct(ptr %a121) + %t122 = load ptr, ptr %a1 + %t123 = icmp eq ptr %t122, null + br i1 %t123, label %panic9326, label %ok9327 +panic9326: + call void @finch_panic(ptr @.str.6474, i64 178, ptr @.str.6475) + unreachable +ok9327: + %t124 = getelementptr inbounds %S.cimport.Importer, ptr %t122, i32 0, i32 0 + %t125 = getelementptr inbounds %S.cimport.CImports, ptr %t124, i32 0, i32 4 + %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t125, i32 0, i32 1 + %t127 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t127, ptr %a128 + call void @finch_str_copy(ptr %a129, ptr %a128) + %t130 = load { ptr, i64, i64 }, ptr %a129 + %t131 = load i64, ptr %t126 + %t132 = add i64 %t131, 1 + call void @finch_arr_reserve(ptr %t125, i64 %t132, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t133 = load ptr, ptr %t125 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i64 %t131 + store { ptr, i64, i64 } %t130, ptr %t134 + store i64 %t132, ptr %t126 + %t135 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.S_cimport_CStruct(ptr %a73) + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t135 +} + +define internal void @finch.drop.S_cimport_Mapped(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Mapped, ptr %a, i32 0, i32 0 + call void @finch.drop.S_ast_Type(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.Mapped, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal i32 @finch.cimport.visitField(%S.C.CXCursor %p0, ptr %p1) { +entry: + %a1 = alloca %S.C.CXCursor, align 16 + %a2 = alloca ptr, align 16 + %a4 = alloca ptr, align 16 + %a6 = alloca %S.C.CXCursor, align 16 + %a8 = alloca [32 x i8], align 16 + %a12 = alloca %S.cimport.CField, align 16 + %a13 = alloca %S.C.CXType, align 16 + %a14 = alloca %S.C.CXType, align 16 + %a16 = alloca %S.C.CXCursor, align 16 + %a18 = alloca %S.C.CXType, align 16 + %a20 = alloca %S.C.CXType, align 16 + %a22 = alloca %S.C.CXCursor, align 16 + %a27 = alloca %S.C.CXType, align 16 + %a31 = alloca %S.C.CXType, align 16 + %a35 = alloca %S.C.CXCursor, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca %S.C.CXCursor, align 16 + %a52 = alloca %S.C.CXType, align 16 + %a54 = alloca %S.C.CXCursor, align 16 + %a65 = alloca %S.cimport.Mapped, align 16 + %a71 = alloca %S.ast.Type, align 16 + %a72 = alloca %S.ast.Type, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a98 = alloca %S.cimport.CField, align 16 + %a99 = alloca %S.cimport.CField, align 16 + store %S.C.CXCursor %p0, ptr %a1 + store ptr %p1, ptr %a2 + %t3 = load ptr, ptr %a2 + store ptr %t3, ptr %a4 + %t5 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t5, ptr %a6 + %t7 = call [2 x i64] @clang_getCursorSpelling(ptr %a6) + store [2 x i64] %t7, ptr %a8 + %t9 = load %S.C.CXString, ptr %a8 + %t10 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t9) + %t11 = insertvalue %S.cimport.CField zeroinitializer, { ptr, i64, i64 } %t10, 0 + store %S.cimport.CField %t11, ptr %a12 + %t15 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t15, ptr %a16 + call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a14, ptr %a16) + %t17 = load %S.C.CXType, ptr %a14 + store %S.C.CXType %t17, ptr %a18 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a13, ptr %a18) + %t19 = load %S.C.CXType, ptr %a13 + store %S.C.CXType %t19, ptr %a20 + %t21 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t21, ptr %a22 + %t23 = call i64 @clang_Cursor_getOffsetOfField(ptr %a22) + %t24 = sdiv i64 %t23, 8 + %t25 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 2 + store i64 %t24, ptr %t25 + %t26 = load %S.C.CXType, ptr %a20 + store %S.C.CXType %t26, ptr %a27 + %t28 = call i64 @clang_Type_getSizeOf(ptr %a27) + %t29 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 3 + store i64 %t28, ptr %t29 + %t30 = load %S.C.CXType, ptr %a20 + store %S.C.CXType %t30, ptr %a31 + %t32 = call i64 @clang_Type_getAlignOf(ptr %a31) + %t33 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 4 + store i64 %t32, ptr %t33 + %t34 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t34, ptr %a35 + %t36 = call i32 @clang_Cursor_isBitField(ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %then9328, label %else9329 +then9328: + %t38 = load ptr, ptr %a4 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic9331, label %ok9332 +panic9331: + call void @finch_panic(ptr @.str.6477, i64 195, ptr @.str.6478) + unreachable +ok9332: + %t40 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t38, i32 0, i32 1 + %t41 = load ptr, ptr %t40 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic9333, label %ok9334 +panic9333: + call void @finch_panic(ptr @.str.6479, i64 195, ptr @.str.6480) + unreachable +ok9334: + %t43 = getelementptr inbounds %S.cimport.CStruct, ptr %t41, i32 0, i32 4 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } { ptr @.str.6476, i64 14, i64 0 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + store i1 true, ptr %t46 + br label %endif9330 +else9329: + %t47 = getelementptr inbounds %S.C.CXType, ptr %a20, i32 0, i32 0 + %t48 = load i32, ptr %t47 + %t49 = icmp eq i32 %t48, 105 + br label %logic.from9335 +logic.from9335: + br i1 %t49, label %logic.rhs9336, label %logic.end9337 +logic.rhs9336: + %t51 = load %S.C.CXType, ptr %a20 + store %S.C.CXType %t51, ptr %a52 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a50, ptr %a52) + %t53 = load %S.C.CXCursor, ptr %a50 + store %S.C.CXCursor %t53, ptr %a54 + %t55 = call i32 @clang_getCursorKind(ptr %a54) + %t56 = icmp eq i32 %t55, 3 + br label %logic.rend9338 +logic.rend9338: + br label %logic.end9337 +logic.end9337: + %t57 = phi i1 [ false, %logic.from9335 ], [ %t56, %logic.rend9338 ] + br i1 %t57, label %then9339, label %else9340 +then9339: + %t58 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + store i1 true, ptr %t58 + br label %endif9341 +else9340: + %t59 = load ptr, ptr %a4 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic9342, label %ok9343 +panic9342: + call void @finch_panic(ptr @.str.6481, i64 200, ptr @.str.6482) + unreachable +ok9343: + %t61 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t59, i32 0, i32 0 + %t62 = load ptr, ptr %t61 + %t63 = load %S.C.CXType, ptr %a20 + %t64 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t62, %S.C.CXType %t63, i1 false, i1 false) + store %S.cimport.Mapped %t64, ptr %a65 + %t66 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 2 + %t67 = load i1, ptr %t66 + br i1 %t67, label %then9344, label %else9345 +then9344: + %t68 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 0 + %t69 = load %S.ast.Type, ptr %t68 + %t70 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 1 + store %S.ast.Type %t69, ptr %a71 + call void @finch.copy.S_ast_Type(ptr %a72, ptr %a71) + %t73 = load %S.ast.Type, ptr %a72 + %t74 = load %S.ast.Type, ptr %t70 + store %S.ast.Type %t73, ptr %t70 + store %S.ast.Type %t74, ptr %a75 + call void @finch.drop.S_ast_Type(ptr %a75) + br label %endif9346 +else9345: + %t76 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + store i1 true, ptr %t76 + br label %endif9346 +endif9346: + call void @finch.drop.S_cimport_Mapped(ptr %a65) + br label %endif9341 +endif9341: + br label %endif9330 +endif9330: + %t77 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + %t78 = load i1, ptr %t77 + br i1 %t78, label %then9347, label %endif9349 +then9347: + %t79 = load ptr, ptr %a4 + %t80 = icmp eq ptr %t79, null + br i1 %t80, label %panic9350, label %ok9351 +panic9350: + call void @finch_panic(ptr @.str.6483, i64 208, ptr @.str.6484) + unreachable +ok9351: + %t81 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t79, i32 0, i32 1 + %t82 = load ptr, ptr %t81 + %t83 = icmp eq ptr %t82, null + br i1 %t83, label %panic9352, label %ok9353 +panic9352: + call void @finch_panic(ptr @.str.6485, i64 208, ptr @.str.6486) + unreachable +ok9353: + %t84 = getelementptr inbounds %S.cimport.CStruct, ptr %t82, i32 0, i32 5 + store i1 true, ptr %t84 + br label %endif9349 +endif9349: + %t85 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 0 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = icmp eq i64 %t87, 0 + br i1 %t88, label %then9354, label %endif9356 +then9354: + %t89 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + store i1 true, ptr %t89 + br label %endif9356 +endif9356: + %t90 = load ptr, ptr %a4 + %t91 = icmp eq ptr %t90, null + br i1 %t91, label %panic9357, label %ok9358 +panic9357: + call void @finch_panic(ptr @.str.6487, i64 213, ptr @.str.6488) + unreachable +ok9358: + %t92 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t90, i32 0, i32 1 + %t93 = load ptr, ptr %t92 + %t94 = icmp eq ptr %t93, null + br i1 %t94, label %panic9359, label %ok9360 +panic9359: + call void @finch_panic(ptr @.str.6489, i64 213, ptr @.str.6490) + unreachable +ok9360: + %t95 = getelementptr inbounds %S.cimport.CStruct, ptr %t93, i32 0, i32 1 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 + %t97 = load %S.cimport.CField, ptr %a12 + store %S.cimport.CField %t97, ptr %a98 + call void @finch.copy.S_cimport_CField(ptr %a99, ptr %a98) + %t100 = load %S.cimport.CField, ptr %a99 + %t101 = load i64, ptr %t96 + %t102 = add i64 %t101, 1 + call void @finch_arr_reserve(ptr %t95, i64 %t102, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) + %t103 = load ptr, ptr %t95 + %t104 = getelementptr inbounds %S.cimport.CField, ptr %t103, i64 %t101 + store %S.cimport.CField %t100, ptr %t104 + store i64 %t102, ptr %t96 + call void @finch.drop.S_cimport_CField(ptr %a12) + ret i32 1 +} + +define internal %S.cimport.Mapped @finch.cimport.sized(i64 %p0, i1 %p1) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i1, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a26 = alloca %S.ast.Type, align 16 + %a29 = alloca %S.ast.Type, align 16 + %a35 = alloca %S.ast.Type, align 16 + %a38 = alloca %S.ast.Type, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store i1 %p1, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = icmp eq i64 %t3, 1 + br i1 %t4, label %then9361, label %endif9363 +then9361: + %t5 = load i1, ptr %a2 + br i1 %t5, label %then9364, label %endif9366 +then9364: + %t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6491, i64 2, i64 0 }) + %t7 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t6) + store %S.ast.Type %t6, ptr %a8 + call void @finch.drop.S_ast_Type(ptr %a8) + ret %S.cimport.Mapped %t7 +endif9366: + %t9 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6492, i64 2, i64 0 }) + %t10 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t9) + store %S.ast.Type %t9, ptr %a11 + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.cimport.Mapped %t10 +endif9363: + %t12 = load i64, ptr %a1 + %t13 = icmp eq i64 %t12, 2 + br i1 %t13, label %then9367, label %endif9369 +then9367: + %t14 = load i1, ptr %a2 + br i1 %t14, label %then9370, label %endif9372 +then9370: + %t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6493, i64 3, i64 0 }) + %t16 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t15) + store %S.ast.Type %t15, ptr %a17 + call void @finch.drop.S_ast_Type(ptr %a17) + ret %S.cimport.Mapped %t16 +endif9372: + %t18 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6494, i64 3, i64 0 }) + %t19 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t18) + store %S.ast.Type %t18, ptr %a20 + call void @finch.drop.S_ast_Type(ptr %a20) + ret %S.cimport.Mapped %t19 +endif9369: + %t21 = load i64, ptr %a1 + %t22 = icmp eq i64 %t21, 4 + br i1 %t22, label %then9373, label %endif9375 +then9373: + %t23 = load i1, ptr %a2 + br i1 %t23, label %then9376, label %endif9378 +then9376: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6495, i64 3, i64 0 }) + %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) + store %S.ast.Type %t24, ptr %a26 + call void @finch.drop.S_ast_Type(ptr %a26) + ret %S.cimport.Mapped %t25 +endif9378: + %t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }) + %t28 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t27) + store %S.ast.Type %t27, ptr %a29 + call void @finch.drop.S_ast_Type(ptr %a29) + ret %S.cimport.Mapped %t28 +endif9375: + %t30 = load i64, ptr %a1 + %t31 = icmp eq i64 %t30, 8 + br i1 %t31, label %then9379, label %endif9381 +then9379: + %t32 = load i1, ptr %a2 + br i1 %t32, label %then9382, label %endif9384 +then9382: + %t33 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6497, i64 3, i64 0 }) + %t34 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t33) + store %S.ast.Type %t33, ptr %a35 + call void @finch.drop.S_ast_Type(ptr %a35) + ret %S.cimport.Mapped %t34 +endif9384: + %t36 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6498, i64 3, i64 0 }) + %t37 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t36) + store %S.ast.Type %t36, ptr %a38 + call void @finch.drop.S_ast_Type(ptr %a38) + ret %S.cimport.Mapped %t37 +endif9381: + %t39 = load i64, ptr %a1 + %t40 = mul i64 %t39, 8 + call void @finch_str_from_int(ptr %a41, i64 %t40) + %t42 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.6499, i64 7, i64 0 }, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + store { ptr, i64, i64 } %t42, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.6500, i64 11, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t52) + store { ptr, i64, i64 } %t52, ptr %a54 + call void @finch_str_drop(ptr %a54) + ret %S.cimport.Mapped %t53 +} + +define internal %S.cimport.Mapped @finch.cimport.mapType(ptr %p0, %S.C.CXType %p1, i1 %p2, i1 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXType, align 16 + %a3 = alloca i1, align 16 + %a4 = alloca i1, align 16 + %a5 = alloca %S.C.CXType, align 16 + %a7 = alloca %S.C.CXType, align 16 + %a9 = alloca %S.C.CXType, align 16 + %a11 = alloca %S.C.CXType, align 16 + %a13 = alloca i64, align 16 + %a16 = alloca i32, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a26 = alloca %S.ast.Type, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a80 = alloca %S.ast.Type, align 16 + %a83 = alloca %S.C.CXType, align 16 + %a84 = alloca %S.C.CXType, align 16 + %a86 = alloca %S.C.CXType, align 16 + %a88 = alloca %S.C.CXType, align 16 + %a90 = alloca %S.C.CXType, align 16 + %a103 = alloca %S.C.CXType, align 16 + %a109 = alloca %S.ast.Type, align 16 + %a123 = alloca %S.ast.Type, align 16 + %a127 = alloca %S.cimport.Mapped, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca %S.ast.Type, align 16 + %a154 = alloca %S.ast.Type, align 16 + %a157 = alloca %S.C.CXCursor, align 16 + %a159 = alloca %S.C.CXType, align 16 + %a161 = alloca %S.C.CXCursor, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca %S.ast.Type, align 16 + %a185 = alloca %S.C.CXType, align 16 + %a187 = alloca %S.C.CXType, align 16 + %a190 = alloca %S.cimport.Mapped, align 16 + %a198 = alloca %S.C.CXType, align 16 + %a202 = alloca %S.ast.Type, align 16 + %a207 = alloca %S.C.CXType, align 16 + %a209 = alloca [32 x i8], align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXType %p1, ptr %a2 + store i1 %p2, ptr %a3 + store i1 %p3, ptr %a4 + %t6 = load %S.C.CXType, ptr %a2 + store %S.C.CXType %t6, ptr %a7 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a5, ptr %a7) + %t8 = load %S.C.CXType, ptr %a5 + store %S.C.CXType %t8, ptr %a9 + %t10 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t10, ptr %a11 + %t12 = call i64 @clang_Type_getSizeOf(ptr %a11) + store i64 %t12, ptr %a13 + %t14 = getelementptr inbounds %S.C.CXType, ptr %a9, i32 0, i32 0 + %t15 = load i32, ptr %t14 + store i32 %t15, ptr %a16 + %t17 = load i32, ptr %a16 + %t18 = icmp eq i32 %t17, 2 + br i1 %t18, label %then9385, label %endif9387 +then9385: + %t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6501, i64 4, i64 0 }) + %t20 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t19) + store %S.ast.Type %t19, ptr %a21 + call void @finch.drop.S_ast_Type(ptr %a21) + ret %S.cimport.Mapped %t20 +endif9387: + %t22 = load i32, ptr %a16 + %t23 = icmp eq i32 %t22, 3 + br i1 %t23, label %then9388, label %endif9390 +then9388: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6502, i64 4, i64 0 }) + %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) + store %S.ast.Type %t24, ptr %a26 + call void @finch.drop.S_ast_Type(ptr %a26) + ret %S.cimport.Mapped %t25 +endif9390: + %t27 = load i32, ptr %a16 + %t28 = icmp eq i32 %t27, 13 + br label %logic.from9391 +logic.from9391: + br i1 %t28, label %logic.end9393, label %logic.rhs9392 +logic.rhs9392: + %t29 = load i32, ptr %a16 + %t30 = icmp eq i32 %t29, 4 + br label %logic.rend9394 +logic.rend9394: + br label %logic.end9393 +logic.end9393: + %t31 = phi i1 [ true, %logic.from9391 ], [ %t30, %logic.rend9394 ] + br i1 %t31, label %then9395, label %endif9397 +then9395: + %t32 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6503, i64 4, i64 0 }) + %t33 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t32) + store %S.ast.Type %t32, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + ret %S.cimport.Mapped %t33 +endif9397: + %t35 = load i32, ptr %a16 + %t36 = icmp eq i32 %t35, 14 + br label %logic.from9398 +logic.from9398: + br i1 %t36, label %logic.end9400, label %logic.rhs9399 +logic.rhs9399: + %t37 = load i32, ptr %a16 + %t38 = icmp eq i32 %t37, 16 + br label %logic.rend9401 +logic.rend9401: + br label %logic.end9400 +logic.end9400: + %t39 = phi i1 [ true, %logic.from9398 ], [ %t38, %logic.rend9401 ] + br label %logic.from9402 +logic.from9402: + br i1 %t39, label %logic.end9404, label %logic.rhs9403 +logic.rhs9403: + %t40 = load i32, ptr %a16 + %t41 = icmp eq i32 %t40, 17 + br label %logic.rend9405 +logic.rend9405: + br label %logic.end9404 +logic.end9404: + %t42 = phi i1 [ true, %logic.from9402 ], [ %t41, %logic.rend9405 ] + br label %logic.from9406 +logic.from9406: + br i1 %t42, label %logic.end9408, label %logic.rhs9407 +logic.rhs9407: + %t43 = load i32, ptr %a16 + %t44 = icmp eq i32 %t43, 18 + br label %logic.rend9409 +logic.rend9409: + br label %logic.end9408 +logic.end9408: + %t45 = phi i1 [ true, %logic.from9406 ], [ %t44, %logic.rend9409 ] + br label %logic.from9410 +logic.from9410: + br i1 %t45, label %logic.end9412, label %logic.rhs9411 +logic.rhs9411: + %t46 = load i32, ptr %a16 + %t47 = icmp eq i32 %t46, 19 + br label %logic.rend9413 +logic.rend9413: + br label %logic.end9412 +logic.end9412: + %t48 = phi i1 [ true, %logic.from9410 ], [ %t47, %logic.rend9413 ] + br i1 %t48, label %then9414, label %endif9416 +then9414: + %t49 = load i64, ptr %a13 + %t50 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t49, i1 true) + ret %S.cimport.Mapped %t50 +endif9416: + %t51 = load i32, ptr %a16 + %t52 = icmp eq i32 %t51, 5 + br label %logic.from9417 +logic.from9417: + br i1 %t52, label %logic.end9419, label %logic.rhs9418 +logic.rhs9418: + %t53 = load i32, ptr %a16 + %t54 = icmp eq i32 %t53, 8 + br label %logic.rend9420 +logic.rend9420: + br label %logic.end9419 +logic.end9419: + %t55 = phi i1 [ true, %logic.from9417 ], [ %t54, %logic.rend9420 ] + br label %logic.from9421 +logic.from9421: + br i1 %t55, label %logic.end9423, label %logic.rhs9422 +logic.rhs9422: + %t56 = load i32, ptr %a16 + %t57 = icmp eq i32 %t56, 9 + br label %logic.rend9424 +logic.rend9424: + br label %logic.end9423 +logic.end9423: + %t58 = phi i1 [ true, %logic.from9421 ], [ %t57, %logic.rend9424 ] + br label %logic.from9425 +logic.from9425: + br i1 %t58, label %logic.end9427, label %logic.rhs9426 +logic.rhs9426: + %t59 = load i32, ptr %a16 + %t60 = icmp eq i32 %t59, 10 + br label %logic.rend9428 +logic.rend9428: + br label %logic.end9427 +logic.end9427: + %t61 = phi i1 [ true, %logic.from9425 ], [ %t60, %logic.rend9428 ] + br label %logic.from9429 +logic.from9429: + br i1 %t61, label %logic.end9431, label %logic.rhs9430 +logic.rhs9430: + %t62 = load i32, ptr %a16 + %t63 = icmp eq i32 %t62, 11 + br label %logic.rend9432 +logic.rend9432: + br label %logic.end9431 +logic.end9431: + %t64 = phi i1 [ true, %logic.from9429 ], [ %t63, %logic.rend9432 ] + br i1 %t64, label %then9433, label %endif9435 +then9433: + %t65 = load i64, ptr %a13 + %t66 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t65, i1 false) + ret %S.cimport.Mapped %t66 +endif9435: + %t67 = load i32, ptr %a16 + %t68 = icmp eq i32 %t67, 106 + br i1 %t68, label %then9436, label %endif9438 +then9436: + %t69 = load i64, ptr %a13 + %t70 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t69, i1 true) + ret %S.cimport.Mapped %t70 +endif9438: + %t71 = load i32, ptr %a16 + %t72 = icmp eq i32 %t71, 21 + br i1 %t72, label %then9439, label %endif9441 +then9439: + %t73 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6504, i64 3, i64 0 }) + %t74 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t73) + store %S.ast.Type %t73, ptr %a75 + call void @finch.drop.S_ast_Type(ptr %a75) + ret %S.cimport.Mapped %t74 +endif9441: + %t76 = load i32, ptr %a16 + %t77 = icmp eq i32 %t76, 22 + br i1 %t77, label %then9442, label %endif9444 +then9442: + %t78 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6505, i64 5, i64 0 }) + %t79 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t78) + store %S.ast.Type %t78, ptr %a80 + call void @finch.drop.S_ast_Type(ptr %a80) + ret %S.cimport.Mapped %t79 +endif9444: + %t81 = load i32, ptr %a16 + %t82 = icmp eq i32 %t81, 101 + br i1 %t82, label %then9445, label %endif9447 +then9445: + %t85 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t85, ptr %a86 + call void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16 %a84, ptr %a86) + %t87 = load %S.C.CXType, ptr %a84 + store %S.C.CXType %t87, ptr %a88 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a83, ptr %a88) + %t89 = load %S.C.CXType, ptr %a83 + store %S.C.CXType %t89, ptr %a90 + %t91 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t92 = load i32, ptr %t91 + %t93 = icmp eq i32 %t92, 13 + br label %logic.from9448 +logic.from9448: + br i1 %t93, label %logic.end9450, label %logic.rhs9449 +logic.rhs9449: + %t94 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t95 = load i32, ptr %t94 + %t96 = icmp eq i32 %t95, 4 + br label %logic.rend9451 +logic.rend9451: + br label %logic.end9450 +logic.end9450: + %t97 = phi i1 [ true, %logic.from9448 ], [ %t96, %logic.rend9451 ] + br label %logic.from9452 +logic.from9452: + br i1 %t97, label %logic.rhs9453, label %logic.end9454 +logic.rhs9453: + %t98 = load i1, ptr %a3 + br label %logic.rend9455 +logic.rend9455: + br label %logic.end9454 +logic.end9454: + %t99 = phi i1 [ false, %logic.from9452 ], [ %t98, %logic.rend9455 ] + br i1 %t99, label %then9456, label %endif9458 +then9456: + %t100 = load i1, ptr %a4 + %t101 = xor i1 %t100, true + br label %logic.from9459 +logic.from9459: + br i1 %t101, label %logic.end9461, label %logic.rhs9460 +logic.rhs9460: + %t102 = load %S.C.CXType, ptr %a90 + store %S.C.CXType %t102, ptr %a103 + %t104 = call i32 @clang_isConstQualifiedType(ptr %a103) + %t105 = icmp ne i32 %t104, 0 + br label %logic.rend9462 +logic.rend9462: + br label %logic.end9461 +logic.end9461: + %t106 = phi i1 [ true, %logic.from9459 ], [ %t105, %logic.rend9462 ] + br i1 %t106, label %then9463, label %endif9465 +then9463: + %t107 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6506, i64 3, i64 0 }) + %t108 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t107) + store %S.ast.Type %t107, ptr %a109 + call void @finch.drop.S_ast_Type(ptr %a109) + ret %S.cimport.Mapped %t108 +endif9465: + br label %endif9458 +endif9458: + %t110 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t111 = load i32, ptr %t110 + %t112 = icmp eq i32 %t111, 2 + br label %logic.from9466 +logic.from9466: + br i1 %t112, label %logic.end9468, label %logic.rhs9467 +logic.rhs9467: + %t113 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t114 = load i32, ptr %t113 + %t115 = icmp eq i32 %t114, 111 + br label %logic.rend9469 +logic.rend9469: + br label %logic.end9468 +logic.end9468: + %t116 = phi i1 [ true, %logic.from9466 ], [ %t115, %logic.rend9469 ] + br label %logic.from9470 +logic.from9470: + br i1 %t116, label %logic.end9472, label %logic.rhs9471 +logic.rhs9471: + %t117 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t118 = load i32, ptr %t117 + %t119 = icmp eq i32 %t118, 110 + br label %logic.rend9473 +logic.rend9473: + br label %logic.end9472 +logic.end9472: + %t120 = phi i1 [ true, %logic.from9470 ], [ %t119, %logic.rend9473 ] + br i1 %t120, label %then9474, label %endif9476 +then9474: + %t121 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6507, i64 3, i64 0 }) + %t122 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t121) + store %S.ast.Type %t121, ptr %a123 + call void @finch.drop.S_ast_Type(ptr %a123) + ret %S.cimport.Mapped %t122 +endif9476: + %t124 = load ptr, ptr %a1 + %t125 = load %S.C.CXType, ptr %a90 + %t126 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t124, %S.C.CXType %t125, i1 false, i1 false) + store %S.cimport.Mapped %t126, ptr %a127 + %t128 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 2 + %t129 = load i1, ptr %t128 + %t130 = xor i1 %t129, true + br label %logic.from9477 +logic.from9477: + br i1 %t130, label %logic.end9479, label %logic.rhs9478 +logic.rhs9478: + %t131 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 + %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.6508, i64 4, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp ne i32 %t136, 0 + br label %logic.rend9480 +logic.rend9480: + br label %logic.end9479 +logic.end9479: + %t138 = phi i1 [ true, %logic.from9477 ], [ %t137, %logic.rend9480 ] + br label %logic.from9481 +logic.from9481: + br i1 %t138, label %logic.end9483, label %logic.rhs9482 +logic.rhs9482: + %t139 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 + %t140 = getelementptr inbounds %S.ast.Type, ptr %t139, i32 0, i32 0 + %t141 = load { ptr, i64, i64 }, ptr %t140 + store { ptr, i64, i64 } %t141, ptr %a142 + store { ptr, i64, i64 } { ptr @.str.6509, i64 5, i64 0 }, ptr %a143 + %t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143) + %t145 = icmp ne i32 %t144, 0 + br label %logic.rend9484 +logic.rend9484: + br label %logic.end9483 +logic.end9483: + %t146 = phi i1 [ true, %logic.from9481 ], [ %t145, %logic.rend9484 ] + br i1 %t146, label %then9485, label %endif9487 +then9485: + %t147 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6510, i64 3, i64 0 }) + %t148 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t147) + store %S.ast.Type %t147, ptr %a149 + call void @finch.drop.S_ast_Type(ptr %a149) + call void @finch.drop.S_cimport_Mapped(ptr %a127) + ret %S.cimport.Mapped %t148 +endif9487: + %t150 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 + %t151 = load %S.ast.Type, ptr %t150 + %t152 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t151) + %t153 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t152) + store %S.ast.Type %t152, ptr %a154 + call void @finch.drop.S_ast_Type(ptr %a154) + call void @finch.drop.S_cimport_Mapped(ptr %a127) + ret %S.cimport.Mapped %t153 +endif9447: + %t155 = load i32, ptr %a16 + %t156 = icmp eq i32 %t155, 105 + br i1 %t156, label %then9488, label %endif9490 +then9488: + %t158 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t158, ptr %a159 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a157, ptr %a159) + %t160 = load %S.C.CXCursor, ptr %a157 + store %S.C.CXCursor %t160, ptr %a161 + %t162 = call i32 @clang_getCursorKind(ptr %a161) + %t163 = icmp eq i32 %t162, 3 + br i1 %t163, label %then9491, label %endif9493 +then9491: + %t164 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6511, i64 23, i64 0 }) + ret %S.cimport.Mapped %t164 +endif9493: + %t165 = load ptr, ptr %a1 + %t166 = load %S.C.CXType, ptr %a9 + %t167 = call { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %t165, %S.C.CXType %t166) + store { ptr, i64, i64 } %t167, ptr %a168 + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = icmp eq i64 %t170, 0 + br i1 %t171, label %then9494, label %endif9496 +then9494: + %t172 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6512, i64 36, i64 0 }) + call void @finch_str_drop(ptr %a168) + ret %S.cimport.Mapped %t172 +endif9496: + %t173 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6513, i64 5, i64 0 }, 0 + %t174 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t174, ptr %a175 + call void @finch_str_copy(ptr %a176, ptr %a175) + %t177 = load { ptr, i64, i64 }, ptr %a176 + %t178 = insertvalue %S.ast.Type %t173, { ptr, i64, i64 } %t177, 2 + %t179 = insertvalue %S.ast.Type %t178, { ptr, i64, i64 } { ptr @.str.6514, i64 1, i64 0 }, 3 + %t180 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t179) + store %S.ast.Type %t179, ptr %a181 + call void @finch.drop.S_ast_Type(ptr %a181) + call void @finch_str_drop(ptr %a168) + ret %S.cimport.Mapped %t180 +endif9490: + %t182 = load i32, ptr %a16 + %t183 = icmp eq i32 %t182, 112 + br i1 %t183, label %then9497, label %endif9499 +then9497: + %t184 = load ptr, ptr %a1 + %t186 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t186, ptr %a187 + call void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16 %a185, ptr %a187) + %t188 = load %S.C.CXType, ptr %a185 + %t189 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t184, %S.C.CXType %t188, i1 false, i1 false) + store %S.cimport.Mapped %t189, ptr %a190 + %t191 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 2 + %t192 = load i1, ptr %t191 + %t193 = xor i1 %t192, true + br i1 %t193, label %then9500, label %endif9502 +then9500: + %t194 = load %S.cimport.Mapped, ptr %a190 + ret %S.cimport.Mapped %t194 +endif9502: + %t195 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 0 + %t196 = load %S.ast.Type, ptr %t195 + %t197 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t197, ptr %a198 + %t199 = call i64 @clang_getArraySize(ptr %a198) + %t200 = call %S.ast.Type @finch.cimport.fixed(%S.ast.Type %t196, i64 %t199) + %t201 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t200) + store %S.ast.Type %t200, ptr %a202 + call void @finch.drop.S_ast_Type(ptr %a202) + call void @finch.drop.S_cimport_Mapped(ptr %a190) + ret %S.cimport.Mapped %t201 +endif9499: + %t203 = load i32, ptr %a16 + %t204 = icmp eq i32 %t203, 23 + br i1 %t204, label %then9503, label %endif9505 +then9503: + %t205 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6515, i64 16, i64 0 }) + ret %S.cimport.Mapped %t205 +endif9505: + %t206 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t206, ptr %a207 + %t208 = call [2 x i64] @clang_getTypeSpelling(ptr %a207) + store [2 x i64] %t208, ptr %a209 + %t210 = load %S.C.CXString, ptr %a209 + %t211 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t210) + store { ptr, i64, i64 } { ptr @.str.6516, i64 17, i64 0 }, ptr %a213 + store { ptr, i64, i64 } %t211, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + store { ptr, i64, i64 } %t211, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t216, ptr %a218 + store { ptr, i64, i64 } { ptr @.str.6517, i64 1, i64 0 }, ptr %a219 + call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a217 + %t222 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t221) + store { ptr, i64, i64 } %t221, ptr %a223 + call void @finch_str_drop(ptr %a223) + ret %S.cimport.Mapped %t222 +} + +define internal %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca i64, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i64, align 16 + %a49 = alloca i1, align 16 + %a50 = alloca i64, align 16 + %a62 = alloca i8, align 16 + %a63 = alloca i64, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + store i64 10, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6519, i64 2, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_starts(ptr %a9, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from9506 +logic.from9506: + br i1 %t13, label %logic.end9508, label %logic.rhs9507 +logic.rhs9507: + %t14 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6521, i64 2, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br label %logic.rend9509 +logic.rend9509: + br label %logic.end9508 +logic.end9508: + %t20 = phi i1 [ true, %logic.from9506 ], [ %t19, %logic.rend9509 ] + br i1 %t20, label %then9510, label %else9511 +then9510: + store i64 16, ptr %a7 + %t21 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t21, ptr %a22 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t25 = load i64, ptr %t24 + call void @finch_str_sub(ptr %a23, ptr %a22, i64 2, i64 %t25, ptr @.str.6522, i64 331) + %t26 = load { ptr, i64, i64 }, ptr %a23 + %t27 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t26, ptr %a6 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_drop(ptr %a28) + br label %endif9512 +else9511: + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = icmp sgt i64 %t30, 1 + br label %logic.from9513 +logic.from9513: + br i1 %t31, label %logic.rhs9514, label %logic.end9515 +logic.rhs9514: + %t32 = load { ptr, i64, i64 }, ptr %a6 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 0, %t33 + br i1 %t34, label %range9516, label %inrange9517 +range9516: + call void @finch_panic_index(ptr @.str.6523, i64 332, i64 0, i64 %t33) + unreachable +inrange9517: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds i8, ptr %t35, i64 0 + %t37 = load i8, ptr %t36 + %t38 = icmp eq i8 %t37, 48 + br label %logic.rend9518 +logic.rend9518: + br label %logic.end9515 +logic.end9515: + %t39 = phi i1 [ false, %logic.from9513 ], [ %t38, %logic.rend9518 ] + br i1 %t39, label %then9519, label %endif9521 +then9519: + store i64 8, ptr %a7 + %t40 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t40, ptr %a41 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t44 = load i64, ptr %t43 + call void @finch_str_sub(ptr %a42, ptr %a41, i64 1, i64 %t44, ptr @.str.6524, i64 334) + %t45 = load { ptr, i64, i64 }, ptr %a42 + %t46 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t45, ptr %a6 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %endif9521 +endif9521: + br label %endif9512 +endif9512: + store i64 0, ptr %a48 + store i1 false, ptr %a49 + store i64 0, ptr %a50 + br label %while.cond9522 +while.cond9522: + %t51 = load i64, ptr %a50 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t53 = load i64, ptr %t52 + %t54 = icmp slt i64 %t51, %t53 + br i1 %t54, label %while.body9523, label %while.end9524 +while.body9523: + %t55 = load i64, ptr %a50 + %t56 = load { ptr, i64, i64 }, ptr %a6 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 %t55, %t57 + br i1 %t58, label %range9525, label %inrange9526 +range9525: + call void @finch_panic_index(ptr @.str.6525, i64 340, i64 %t55, i64 %t57) + unreachable +inrange9526: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds i8, ptr %t59, i64 %t55 + %t61 = load i8, ptr %t60 + store i8 %t61, ptr %a62 + store i64 99, ptr %a63 + %t64 = load i8, ptr %a62 + %t65 = icmp uge i8 %t64, 48 + br label %logic.from9527 +logic.from9527: + br i1 %t65, label %logic.rhs9528, label %logic.end9529 +logic.rhs9528: + %t66 = load i8, ptr %a62 + %t67 = icmp ule i8 %t66, 57 + br label %logic.rend9530 +logic.rend9530: + br label %logic.end9529 +logic.end9529: + %t68 = phi i1 [ false, %logic.from9527 ], [ %t67, %logic.rend9530 ] + br i1 %t68, label %then9531, label %else9532 +then9531: + %t69 = load i8, ptr %a62 + %t70 = zext i8 %t69 to i64 + %t71 = zext i8 48 to i64 + %t72 = sub i64 %t70, %t71 + store i64 %t72, ptr %a63 + br label %endif9533 +else9532: + %t73 = load i8, ptr %a62 + %t74 = icmp uge i8 %t73, 97 + br label %logic.from9534 +logic.from9534: + br i1 %t74, label %logic.rhs9535, label %logic.end9536 +logic.rhs9535: + %t75 = load i8, ptr %a62 + %t76 = icmp ule i8 %t75, 102 + br label %logic.rend9537 +logic.rend9537: + br label %logic.end9536 +logic.end9536: + %t77 = phi i1 [ false, %logic.from9534 ], [ %t76, %logic.rend9537 ] + br i1 %t77, label %then9538, label %else9539 +then9538: + %t78 = load i8, ptr %a62 + %t79 = zext i8 %t78 to i64 + %t80 = zext i8 97 to i64 + %t81 = sub i64 %t79, %t80 + %t82 = add i64 %t81, 10 + store i64 %t82, ptr %a63 + br label %endif9540 +else9539: + %t83 = load i8, ptr %a62 + %t84 = icmp uge i8 %t83, 65 + br label %logic.from9541 +logic.from9541: + br i1 %t84, label %logic.rhs9542, label %logic.end9543 +logic.rhs9542: + %t85 = load i8, ptr %a62 + %t86 = icmp ule i8 %t85, 70 + br label %logic.rend9544 +logic.rend9544: + br label %logic.end9543 +logic.end9543: + %t87 = phi i1 [ false, %logic.from9541 ], [ %t86, %logic.rend9544 ] + br i1 %t87, label %then9545, label %endif9547 +then9545: + %t88 = load i8, ptr %a62 + %t89 = zext i8 %t88 to i64 + %t90 = zext i8 65 to i64 + %t91 = sub i64 %t89, %t90 + %t92 = add i64 %t91, 10 + store i64 %t92, ptr %a63 + br label %endif9547 +endif9547: + br label %endif9540 +endif9540: + br label %endif9533 +endif9533: + %t93 = load i64, ptr %a63 + %t94 = load i64, ptr %a7 + %t95 = icmp sge i64 %t93, %t94 + br i1 %t95, label %then9548, label %endif9550 +then9548: + br label %while.end9524 +endif9550: + %t96 = load i64, ptr %a48 + %t97 = load i64, ptr %a7 + %t98 = mul i64 %t96, %t97 + %t99 = load i64, ptr %a63 + %t100 = add i64 %t98, %t99 + store i64 %t100, ptr %a48 + store i1 true, ptr %a49 + %t101 = load i64, ptr %a50 + %t102 = add i64 %t101, 1 + store i64 %t102, ptr %a50 + br label %while.cond9522 +while.end9524: + br label %while.cond9551 +while.cond9551: + %t103 = load i64, ptr %a50 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t105 = load i64, ptr %t104 + %t106 = icmp slt i64 %t103, %t105 + br i1 %t106, label %while.body9552, label %while.end9553 +while.body9552: + store { ptr, i64, i64 } { ptr @.str.6526, i64 4, i64 0 }, ptr %a107 + %t109 = load i64, ptr %a50 + %t110 = load { ptr, i64, i64 }, ptr %a6 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range9554, label %inrange9555 +range9554: + call void @finch_panic_index(ptr @.str.6528, i64 358, i64 %t109, i64 %t111) + unreachable +inrange9555: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds i8, ptr %t113, i64 %t109 + %t115 = load i8, ptr %t114 + call void @finch_str_from_char(ptr %a116, i8 signext %t115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t117, ptr %a118 + %t119 = call i64 @finch_str_find(ptr %a107, ptr %a118) + %t120 = icmp sge i64 %t119, 0 + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = xor i1 %t120, true + br i1 %t122, label %then9556, label %endif9558 +then9556: + call void @finch_str_drop(ptr %a6) + ret %S.cimport.Number zeroinitializer +endif9558: + %t123 = load i64, ptr %a50 + %t124 = add i64 %t123, 1 + store i64 %t124, ptr %a50 + br label %while.cond9551 +while.end9553: + %t125 = load i1, ptr %a49 + %t126 = xor i1 %t125, true + br label %logic.from9559 +logic.from9559: + br i1 %t126, label %logic.rhs9560, label %logic.end9561 +logic.rhs9560: + %t127 = load i64, ptr %a7 + %t128 = icmp ne i64 %t127, 8 + br label %logic.rend9562 +logic.rend9562: + br label %logic.end9561 +logic.end9561: + %t129 = phi i1 [ false, %logic.from9559 ], [ %t128, %logic.rend9562 ] + br i1 %t129, label %then9563, label %endif9565 +then9563: + call void @finch_str_drop(ptr %a6) + ret %S.cimport.Number zeroinitializer +endif9565: + %t130 = load i64, ptr %a48 + %t131 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t130, 1 + %t132 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t131, 0 + %t133 = insertvalue %S.cimport.Number %t132, i1 true, 1 + call void @finch_str_drop(ptr %a6) + ret %S.cimport.Number %t133 +} + +define internal %S.cimport.Number @finch.cimport.macroValue(ptr %p0, %S.C.CXCursor %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXCursor, align 16 + %a3 = alloca ptr, align 16 + %a4 = alloca i32, align 16 + %a9 = alloca %S.C.CXSourceRange, align 16 + %a11 = alloca %S.C.CXCursor, align 16 + %a13 = alloca %S.C.CXSourceRange, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca i64, align 16 + %a24 = alloca %S.C.CXToken, align 16 + %a36 = alloca %S.C.CXToken, align 16 + %a38 = alloca [32 x i8], align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca i1, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca i1, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca double, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca double, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca %S.cimport.Number, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXCursor %p1, ptr %a2 + store ptr null, ptr %a3 + store i32 0, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic9566, label %ok9567 +panic9566: + call void @finch_panic(ptr @.str.6529, i64 373, ptr @.str.6530) + unreachable +ok9567: + %t7 = getelementptr inbounds %S.cimport.Importer, ptr %t5, i32 0, i32 1 + %t8 = load ptr, ptr %t7 + %t10 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t10, ptr %a11 + call void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16 %a9, ptr %a11) + %t12 = load %S.C.CXSourceRange, ptr %a9 + store %S.C.CXSourceRange %t12, ptr %a13 + call void @clang_tokenize(ptr %t8, ptr %a13, ptr %a3, ptr %a4) + store { ptr, i64, i64 } zeroinitializer, ptr %a14 + %t15 = load i32, ptr %a4 + %t16 = zext i32 %t15 to i64 + store i64 1, ptr %a17 + br label %for.cond9568 +for.cond9568: + %t18 = load i64, ptr %a17 + %t19 = icmp slt i64 %t18, %t16 + br i1 %t19, label %for.body9569, label %for.end9571 +for.body9569: + %t20 = load i64, ptr %a17 + %t21 = load ptr, ptr %a3 + %t22 = getelementptr inbounds %S.C.CXToken, ptr %t21, i64 %t20 + %t23 = load %S.C.CXToken, ptr %t22 + store %S.C.CXToken %t23, ptr %a24 + %t25 = call i32 @clang_getTokenKind(ptr %a24) + %t26 = icmp eq i32 %t25, 4 + br i1 %t26, label %then9572, label %endif9574 +then9572: + br label %for.step9570 +endif9574: + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic9575, label %ok9576 +panic9575: + call void @finch_panic(ptr @.str.6531, i64 379, ptr @.str.6532) + unreachable +ok9576: + %t30 = getelementptr inbounds %S.cimport.Importer, ptr %t28, i32 0, i32 1 + %t31 = load ptr, ptr %t30 + %t32 = load i64, ptr %a17 + %t33 = load ptr, ptr %a3 + %t34 = getelementptr inbounds %S.C.CXToken, ptr %t33, i64 %t32 + %t35 = load %S.C.CXToken, ptr %t34 + store %S.C.CXToken %t35, ptr %a36 + %t37 = call [2 x i64] @clang_getTokenSpelling(ptr %t31, ptr %a36) + store [2 x i64] %t37, ptr %a38 + %t39 = load %S.C.CXString, ptr %a38 + %t40 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t39) + %t41 = load i64, ptr %t27 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a14, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a14 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } %t40, ptr %t44 + store i64 %t42, ptr %t27 + br label %for.step9570 +for.step9570: + %t45 = load i64, ptr %a17 + %t46 = add i64 %t45, 1 + store i64 %t46, ptr %a17 + br label %for.cond9568 +for.end9571: + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic9577, label %ok9578 +panic9577: + call void @finch_panic(ptr @.str.6533, i64 381, ptr @.str.6534) + unreachable +ok9578: + %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 1 + %t50 = load ptr, ptr %t49 + %t51 = load ptr, ptr %a3 + %t52 = load i32, ptr %a4 + call void @clang_disposeTokens(ptr %t50, ptr %t51, i32 %t52) + br label %while.cond9579 +while.cond9579: + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t54 = load i64, ptr %t53 + %t55 = icmp sge i64 %t54, 2 + br label %logic.from9582 +logic.from9582: + br i1 %t55, label %logic.rhs9583, label %logic.end9584 +logic.rhs9583: + %t56 = load { ptr, i64, i64 }, ptr %a14 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 0, %t57 + br i1 %t58, label %range9585, label %inrange9586 +range9585: + call void @finch_panic_index(ptr @.str.6535, i64 383, i64 0, i64 %t57) + unreachable +inrange9586: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 0 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.6536, i64 1, i64 0 }, ptr %a63 + %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) + %t65 = icmp ne i32 %t64, 0 + br label %logic.rend9587 +logic.rend9587: + br label %logic.end9584 +logic.end9584: + %t66 = phi i1 [ false, %logic.from9582 ], [ %t65, %logic.rend9587 ] + br label %logic.from9588 +logic.from9588: + br i1 %t66, label %logic.rhs9589, label %logic.end9590 +logic.rhs9589: + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t68 = load i64, ptr %t67 + %t69 = sub i64 %t68, 1 + %t70 = load { ptr, i64, i64 }, ptr %a14 + %t71 = extractvalue { ptr, i64, i64 } %t70, 1 + %t72 = icmp uge i64 %t69, %t71 + br i1 %t72, label %range9591, label %inrange9592 +range9591: + call void @finch_panic_index(ptr @.str.6537, i64 383, i64 %t69, i64 %t71) + unreachable +inrange9592: + %t73 = extractvalue { ptr, i64, i64 } %t70, 0 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t69 + %t75 = load { ptr, i64, i64 }, ptr %t74 + store { ptr, i64, i64 } %t75, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.6538, i64 1, i64 0 }, ptr %a77 + %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) + %t79 = icmp ne i32 %t78, 0 + br label %logic.rend9593 +logic.rend9593: + br label %logic.end9590 +logic.end9590: + %t80 = phi i1 [ false, %logic.from9588 ], [ %t79, %logic.rend9593 ] + br i1 %t80, label %while.body9580, label %while.end9581 +while.body9580: + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t82 = load i64, ptr %t81 + %t83 = icmp uge i64 0, %t82 + br i1 %t83, label %range9594, label %inrange9595 +range9594: + call void @finch_panic_index(ptr @.str.6539, i64 384, i64 0, i64 %t82) + unreachable +inrange9595: + %t84 = load ptr, ptr %a14 + %t85 = getelementptr inbounds { ptr, i64, i64 }, ptr %t84, i64 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + store { ptr, i64, i64 } %t86, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t89 = load i64, ptr %t88 + %t90 = icmp eq i64 %t89, 0 + br i1 %t90, label %panic9596, label %ok9597 +panic9596: + call void @finch_panic(ptr @.str.6540, i64 385, ptr @.str.6541) + unreachable +ok9597: + %t91 = sub i64 %t89, 1 + %t92 = load ptr, ptr %a14 + %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t91 + %t94 = load { ptr, i64, i64 }, ptr %t93 + store i64 %t91, ptr %t88 + store { ptr, i64, i64 } %t94, ptr %a95 + call void @finch_str_drop(ptr %a95) + br label %while.cond9579 +while.end9581: + store i1 false, ptr %a96 + %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t98 = load i64, ptr %t97 + %t99 = icmp eq i64 %t98, 2 + br label %logic.from9598 +logic.from9598: + br i1 %t99, label %logic.rhs9599, label %logic.end9600 +logic.rhs9599: + %t100 = load { ptr, i64, i64 }, ptr %a14 + %t101 = extractvalue { ptr, i64, i64 } %t100, 1 + %t102 = icmp uge i64 0, %t101 + br i1 %t102, label %range9601, label %inrange9602 +range9601: + call void @finch_panic_index(ptr @.str.6542, i64 388, i64 0, i64 %t101) + unreachable +inrange9602: + %t103 = extractvalue { ptr, i64, i64 } %t100, 0 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 0 + %t105 = load { ptr, i64, i64 }, ptr %t104 + store { ptr, i64, i64 } %t105, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.6543, i64 1, i64 0 }, ptr %a107 + %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) + %t109 = icmp ne i32 %t108, 0 + br label %logic.rend9603 +logic.rend9603: + br label %logic.end9600 +logic.end9600: + %t110 = phi i1 [ false, %logic.from9598 ], [ %t109, %logic.rend9603 ] + br i1 %t110, label %then9604, label %endif9606 +then9604: + store i1 true, ptr %a96 + %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t112 = load i64, ptr %t111 + %t113 = icmp uge i64 0, %t112 + br i1 %t113, label %range9607, label %inrange9608 +range9607: + call void @finch_panic_index(ptr @.str.6544, i64 390, i64 0, i64 %t112) + unreachable +inrange9608: + %t114 = load ptr, ptr %a14 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 0 + %t116 = load { ptr, i64, i64 }, ptr %t115 + call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + br label %endif9606 +endif9606: + %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t119 = load i64, ptr %t118 + %t120 = icmp ne i64 %t119, 1 + br i1 %t120, label %then9609, label %endif9611 +then9609: + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number zeroinitializer +endif9611: + %t121 = load { ptr, i64, i64 }, ptr %a14 + %t122 = extractvalue { ptr, i64, i64 } %t121, 1 + %t123 = icmp uge i64 0, %t122 + br i1 %t123, label %range9612, label %inrange9613 +range9612: + call void @finch_panic_index(ptr @.str.6545, i64 395, i64 0, i64 %t122) + unreachable +inrange9613: + %t124 = extractvalue { ptr, i64, i64 } %t121, 0 + %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 0 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t126, ptr %a127 + call void @finch_str_copy(ptr %a128, ptr %a127) + %t129 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t129, ptr %a130 + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a130, i32 0, i32 1 + %t132 = load i64, ptr %t131 + %t133 = icmp eq i64 %t132, 0 + br label %logic.from9614 +logic.from9614: + br i1 %t133, label %logic.end9616, label %logic.rhs9615 +logic.rhs9615: + %t134 = load { ptr, i64, i64 }, ptr %a130 + %t135 = extractvalue { ptr, i64, i64 } %t134, 1 + %t136 = icmp uge i64 0, %t135 + br i1 %t136, label %range9617, label %inrange9618 +range9617: + call void @finch_panic_index(ptr @.str.6546, i64 396, i64 0, i64 %t135) + unreachable +inrange9618: + %t137 = extractvalue { ptr, i64, i64 } %t134, 0 + %t138 = getelementptr inbounds i8, ptr %t137, i64 0 + %t139 = load i8, ptr %t138 + %t140 = icmp uge i8 %t139, 48 + br label %logic.from9619 +logic.from9619: + br i1 %t140, label %logic.rhs9620, label %logic.end9621 +logic.rhs9620: + %t141 = load { ptr, i64, i64 }, ptr %a130 + %t142 = extractvalue { ptr, i64, i64 } %t141, 1 + %t143 = icmp uge i64 0, %t142 + br i1 %t143, label %range9622, label %inrange9623 +range9622: + call void @finch_panic_index(ptr @.str.6547, i64 396, i64 0, i64 %t142) + unreachable +inrange9623: + %t144 = extractvalue { ptr, i64, i64 } %t141, 0 + %t145 = getelementptr inbounds i8, ptr %t144, i64 0 + %t146 = load i8, ptr %t145 + %t147 = icmp ule i8 %t146, 57 + br label %logic.rend9624 +logic.rend9624: + br label %logic.end9621 +logic.end9621: + %t148 = phi i1 [ false, %logic.from9619 ], [ %t147, %logic.rend9624 ] + br label %logic.from9625 +logic.from9625: + br i1 %t148, label %logic.end9627, label %logic.rhs9626 +logic.rhs9626: + %t149 = load { ptr, i64, i64 }, ptr %a130 + %t150 = extractvalue { ptr, i64, i64 } %t149, 1 + %t151 = icmp uge i64 0, %t150 + br i1 %t151, label %range9628, label %inrange9629 +range9628: + call void @finch_panic_index(ptr @.str.6548, i64 396, i64 0, i64 %t150) + unreachable +inrange9629: + %t152 = extractvalue { ptr, i64, i64 } %t149, 0 + %t153 = getelementptr inbounds i8, ptr %t152, i64 0 + %t154 = load i8, ptr %t153 + %t155 = icmp eq i8 %t154, 46 + br label %logic.rend9630 +logic.rend9630: + br label %logic.end9627 +logic.end9627: + %t156 = phi i1 [ true, %logic.from9625 ], [ %t155, %logic.rend9630 ] + %t157 = xor i1 %t156, true + br label %logic.rend9631 +logic.rend9631: + br label %logic.end9616 +logic.end9616: + %t158 = phi i1 [ true, %logic.from9614 ], [ %t157, %logic.rend9631 ] + br i1 %t158, label %then9632, label %endif9634 +then9632: + call void @finch_str_drop(ptr %a130) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number zeroinitializer +endif9634: + %t159 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.6550, i64 1, i64 0 }, ptr %a162 + %t163 = call i64 @finch_str_find(ptr %a160, ptr %a162) + %t164 = icmp sge i64 %t163, 0 + br label %logic.from9635 +logic.from9635: + br i1 %t164, label %logic.end9637, label %logic.rhs9636 +logic.rhs9636: + %t165 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t165, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.6552, i64 1, i64 0 }, ptr %a168 + %t169 = call i64 @finch_str_find(ptr %a166, ptr %a168) + %t170 = icmp sge i64 %t169, 0 + br label %logic.rend9638 +logic.rend9638: + br label %logic.end9637 +logic.end9637: + %t171 = phi i1 [ true, %logic.from9635 ], [ %t170, %logic.rend9638 ] + br label %logic.from9639 +logic.from9639: + br i1 %t171, label %logic.end9641, label %logic.rhs9640 +logic.rhs9640: + %t172 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t172, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.6554, i64 1, i64 0 }, ptr %a175 + %t176 = call i64 @finch_str_find(ptr %a173, ptr %a175) + %t177 = icmp sge i64 %t176, 0 + br label %logic.rend9642 +logic.rend9642: + br label %logic.end9641 +logic.end9641: + %t178 = phi i1 [ true, %logic.from9639 ], [ %t177, %logic.rend9642 ] + br label %logic.from9643 +logic.from9643: + br i1 %t178, label %logic.rhs9644, label %logic.end9645 +logic.rhs9644: + %t179 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t179, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.6556, i64 2, i64 0 }, ptr %a182 + %t183 = call i32 @finch_str_starts(ptr %a180, ptr %a182) + %t184 = icmp ne i32 %t183, 0 + %t185 = xor i1 %t184, true + br label %logic.rend9646 +logic.rend9646: + br label %logic.end9645 +logic.end9645: + %t186 = phi i1 [ false, %logic.from9643 ], [ %t185, %logic.rend9646 ] + store i1 %t186, ptr %a187 + %t188 = load i1, ptr %a187 + br i1 %t188, label %then9647, label %endif9649 +then9647: + %t189 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t189, ptr %a190 + call void @finch_str_copy(ptr %a191, ptr %a190) + %t192 = load { ptr, i64, i64 }, ptr %a191 + store { ptr, i64, i64 } %t192, ptr %a193 + br label %while.cond9650 +while.cond9650: + %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 + %t195 = load i64, ptr %t194 + %t196 = icmp sgt i64 %t195, 0 + br label %logic.from9653 +logic.from9653: + br i1 %t196, label %logic.rhs9654, label %logic.end9655 +logic.rhs9654: + store { ptr, i64, i64 } { ptr @.str.6557, i64 4, i64 0 }, ptr %a197 + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 + %t200 = load i64, ptr %t199 + %t201 = sub i64 %t200, 1 + %t202 = load { ptr, i64, i64 }, ptr %a193 + %t203 = extractvalue { ptr, i64, i64 } %t202, 1 + %t204 = icmp uge i64 %t201, %t203 + br i1 %t204, label %range9656, label %inrange9657 +range9656: + call void @finch_panic_index(ptr @.str.6559, i64 402, i64 %t201, i64 %t203) + unreachable +inrange9657: + %t205 = extractvalue { ptr, i64, i64 } %t202, 0 + %t206 = getelementptr inbounds i8, ptr %t205, i64 %t201 + %t207 = load i8, ptr %t206 + call void @finch_str_from_char(ptr %a208, i8 signext %t207) + %t209 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t209, ptr %a210 + %t211 = call i64 @finch_str_find(ptr %a197, ptr %a210) + %t212 = icmp sge i64 %t211, 0 + store { ptr, i64, i64 } %t209, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %logic.rend9658 +logic.rend9658: + br label %logic.end9655 +logic.end9655: + %t214 = phi i1 [ false, %logic.from9653 ], [ %t212, %logic.rend9658 ] + br i1 %t214, label %while.body9651, label %while.end9652 +while.body9651: + %t215 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t215, ptr %a216 + %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 + %t219 = load i64, ptr %t218 + %t220 = sub i64 %t219, 1 + call void @finch_str_sub(ptr %a217, ptr %a216, i64 0, i64 %t220, ptr @.str.6560, i64 403) + %t221 = load { ptr, i64, i64 }, ptr %a217 + %t222 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t221, ptr %a193 + store { ptr, i64, i64 } %t222, ptr %a223 + call void @finch_str_drop(ptr %a223) + br label %while.cond9650 +while.end9652: + %t224 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } zeroinitializer, ptr %a225 + store double 0.0, ptr %a226 + store { ptr, i64, i64 } %t224, ptr %a227 + %t228 = call i32 @finch_str_try_float(ptr %a227, ptr %a226, ptr %a225) + %t229 = icmp eq i32 %t228, 0 + %t230 = load { ptr, i64, i64 }, ptr %a225 + %t231 = load double, ptr %a226 + br i1 %t229, label %or.failed9659, label %or.ok9660 +or.failed9659: + store { ptr, i64, i64 } %t230, ptr %a232 + call void @finch_str_drop(ptr %a232) + call void @finch_str_drop(ptr %a193) + call void @finch_str_drop(ptr %a130) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number zeroinitializer +or.ok9660: + store double %t231, ptr %a233 + %t234 = load i1, ptr %a96 + br i1 %t234, label %then9661, label %endif9663 +then9661: + %t235 = load double, ptr %a233 + %t236 = fsub double 0.0, %t235 + store double %t236, ptr %a233 + br label %endif9663 +endif9663: + %t237 = insertvalue %S.cimport.CConst zeroinitializer, i1 true, 0 + %t238 = load double, ptr %a233 + %t239 = insertvalue %S.cimport.CConst %t237, double %t238, 2 + %t240 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t240, ptr %a241 + call void @finch_str_copy(ptr %a242, ptr %a241) + %t243 = load { ptr, i64, i64 }, ptr %a242 + %t244 = insertvalue %S.cimport.CConst %t239, { ptr, i64, i64 } %t243, 3 + %t245 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t244, 0 + %t246 = insertvalue %S.cimport.Number %t245, i1 true, 1 + call void @finch_str_drop(ptr %a193) + call void @finch_str_drop(ptr %a130) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number %t246 +endif9649: + %t247 = load { ptr, i64, i64 }, ptr %a130 + %t248 = call %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %t247) + store %S.cimport.Number %t248, ptr %a249 + %t250 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 1 + %t251 = load i1, ptr %t250 + br label %logic.from9664 +logic.from9664: + br i1 %t251, label %logic.rhs9665, label %logic.end9666 +logic.rhs9665: + %t252 = load i1, ptr %a96 + br label %logic.rend9667 +logic.rend9667: + br label %logic.end9666 +logic.end9666: + %t253 = phi i1 [ false, %logic.from9664 ], [ %t252, %logic.rend9667 ] + br i1 %t253, label %then9668, label %endif9670 +then9668: + %t254 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 + %t255 = getelementptr inbounds %S.cimport.CConst, ptr %t254, i32 0, i32 1 + %t256 = load i64, ptr %t255 + %t257 = sub i64 0, %t256 + %t258 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 + %t259 = getelementptr inbounds %S.cimport.CConst, ptr %t258, i32 0, i32 1 + store i64 %t257, ptr %t259 + br label %endif9670 +endif9670: + %t260 = load %S.cimport.Number, ptr %a249 + call void @finch_str_drop(ptr %a130) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number %t260 +} + +define internal i32 @finch.cimport.visitTop(%S.C.CXCursor %p0, %S.C.CXCursor %p1, ptr %p2) { +entry: + %a1 = alloca %S.C.CXCursor, align 16 + %a2 = alloca %S.C.CXCursor, align 16 + %a3 = alloca ptr, align 16 + %a5 = alloca ptr, align 16 + store %S.C.CXCursor %p0, ptr %a1 + store %S.C.CXCursor %p1, ptr %a2 + store ptr %p2, ptr %a3 + %t4 = load ptr, ptr %a3 + store ptr %t4, ptr %a5 + %t6 = load ptr, ptr %a5 + %t7 = load %S.C.CXCursor, ptr %a1 + call void @finch.cimport.visit(ptr %t6, %S.C.CXCursor %t7) + ret i32 1 +} + +define internal i32 @finch.c.cimport.visitTop(ptr %c0, ptr %c1, ptr %c2) { +entry: + + %t1 = load %S.C.CXCursor, ptr %c0 + %t2 = load %S.C.CXCursor, ptr %c1 + %t3 = call i32 @finch.cimport.visitTop(%S.C.CXCursor %t1, %S.C.CXCursor %t2, ptr %c2) + ret i32 %t3 +} + +define internal void @finch.drop.S_cimport_Number(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Number, ptr %a, i32 0, i32 0 + call void @finch.drop.S_cimport_CConst(ptr %t1) + ret void +} + +define internal void @finch.cimport.visit(ptr %p0, %S.C.CXCursor %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXCursor, align 16 + %a4 = alloca %S.C.CXCursor, align 16 + %a6 = alloca [32 x i8], align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca %S.C.CXCursor, align 16 + %a13 = alloca i32, align 16 + %a16 = alloca %S.C.CXType, align 16 + %a17 = alloca %S.C.CXType, align 16 + %a19 = alloca %S.C.CXCursor, align 16 + %a21 = alloca %S.C.CXType, align 16 + %a23 = alloca %S.C.CXType, align 16 + %a27 = alloca %S.C.CXCursor, align 16 + %a29 = alloca %S.C.CXType, align 16 + %a31 = alloca %S.C.CXCursor, align 16 + %a33 = alloca [32 x i8], align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca i1, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca i32, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca %S.cimport.CFunc, align 16 + %a125 = alloca %S.C.CXCursor, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca i32, align 16 + %a148 = alloca %S.cimport.CFunc, align 16 + %a149 = alloca %S.cimport.CFunc, align 16 + %a152 = alloca %S.cimport.CFunc, align 16 + %a153 = alloca %S.C.CXType, align 16 + %a154 = alloca %S.C.CXType, align 16 + %a156 = alloca %S.C.CXCursor, align 16 + %a158 = alloca %S.C.CXType, align 16 + %a160 = alloca %S.C.CXType, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca i32, align 16 + %a184 = alloca %S.cimport.CFunc, align 16 + %a185 = alloca %S.cimport.CFunc, align 16 + %a188 = alloca %S.cimport.CFunc, align 16 + %a190 = alloca %S.C.CXType, align 16 + %a192 = alloca %S.C.CXType, align 16 + %a195 = alloca %S.cimport.Mapped, align 16 + %a201 = alloca %S.ast.Type, align 16 + %a202 = alloca %S.ast.Type, align 16 + %a205 = alloca %S.ast.Type, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca %S.C.CXType, align 16 + %a218 = alloca i64, align 16 + %a220 = alloca i64, align 16 + %a228 = alloca %S.C.CXType, align 16 + %a230 = alloca %S.C.CXType, align 16 + %a235 = alloca %S.cimport.Mapped, align 16 + %a242 = alloca %S.ast.Type, align 16 + %a243 = alloca %S.ast.Type, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca %S.C.CXType, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca i32, align 16 + %a281 = alloca %S.cimport.CFunc, align 16 + %a282 = alloca %S.cimport.CFunc, align 16 + %a285 = alloca %S.cimport.CFunc, align 16 + %a289 = alloca %S.C.CXCursor, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca %S.C.CXType, align 16 + %a304 = alloca %S.C.CXCursor, align 16 + %a307 = alloca %S.cimport.Mapped, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca i32, align 16 + %a328 = alloca %S.ast.Type, align 16 + %a329 = alloca %S.ast.Type, align 16 + %a332 = alloca %S.ast.Type, align 16 + %a336 = alloca %S.C.CXCursor, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca %S.C.CXCursor, align 16 + %a354 = alloca [32 x i8], align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca i32, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca %S.C.CXCursor, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca %S.C.CXCursor, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca i32, align 16 + %a425 = alloca %S.cimport.CConst, align 16 + %a429 = alloca %S.C.CXCursor, align 16 + %a433 = alloca %S.C.CXCursor, align 16 + %a440 = alloca %S.cimport.Number, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca i32, align 16 + %a471 = alloca %S.cimport.CConst, align 16 + %a472 = alloca %S.cimport.CConst, align 16 + %a475 = alloca %S.cimport.CConst, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXCursor %p1, ptr %a2 + %t3 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t3, ptr %a4 + %t5 = call [2 x i64] @clang_getCursorSpelling(ptr %a4) + store [2 x i64] %t5, ptr %a6 + %t7 = load %S.C.CXString, ptr %a6 + %t8 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t7) + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t10, ptr %a11 + %t12 = call i32 @clang_getCursorKind(ptr %a11) + store i32 %t12, ptr %a13 + %t14 = load i32, ptr %a13 + %t15 = icmp eq i32 %t14, 20 + br i1 %t15, label %then9671, label %else9672 +then9671: + %t18 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t18, ptr %a19 + call void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16 %a17, ptr %a19) + %t20 = load %S.C.CXType, ptr %a17 + store %S.C.CXType %t20, ptr %a21 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a16, ptr %a21) + %t22 = load %S.C.CXType, ptr %a16 + store %S.C.CXType %t22, ptr %a23 + %t24 = getelementptr inbounds %S.C.CXType, ptr %a23, i32 0, i32 0 + %t25 = load i32, ptr %t24 + %t26 = icmp eq i32 %t25, 105 + br i1 %t26, label %then9674, label %endif9676 +then9674: + %t28 = load %S.C.CXType, ptr %a23 + store %S.C.CXType %t28, ptr %a29 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a27, ptr %a29) + %t30 = load %S.C.CXCursor, ptr %a27 + store %S.C.CXCursor %t30, ptr %a31 + %t32 = call [2 x i64] @clang_getCursorUSR(ptr %a31) + store [2 x i64] %t32, ptr %a33 + %t34 = load %S.C.CXString, ptr %a33 + %t35 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t34) + store { ptr, i64, i64 } %t35, ptr %a36 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic9677, label %ok9678 +panic9677: + call void @finch_panic(ptr @.str.6561, i64 437, ptr @.str.6562) + unreachable +ok9678: + %t39 = getelementptr inbounds %S.cimport.Importer, ptr %t37, i32 0, i32 3 + %t40 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t40, ptr %a41 + %t42 = call i64 @finch_map_find(ptr %t39, ptr %a41, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t43 = icmp sge i64 %t42, 0 + br label %logic.from9679 +logic.from9679: + br i1 %t43, label %logic.rhs9680, label %logic.end9681 +logic.rhs9680: + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic9682, label %ok9683 +panic9682: + call void @finch_panic(ptr @.str.6563, i64 437, ptr @.str.6564) + unreachable +ok9683: + %t46 = getelementptr inbounds %S.cimport.Importer, ptr %t44, i32 0, i32 0 + %t47 = getelementptr inbounds %S.cimport.CImports, ptr %t46, i32 0, i32 3 + %t48 = load ptr, ptr %a1 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic9684, label %ok9685 +panic9684: + call void @finch_panic(ptr @.str.6565, i64 437, ptr @.str.6566) + unreachable +ok9685: + %t50 = getelementptr inbounds %S.cimport.Importer, ptr %t48, i32 0, i32 3 + %t51 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t54 = icmp slt i64 %t53, 0 + br i1 %t54, label %map.missing9686, label %map.found9687 +map.missing9686: + store { ptr, i64, i64 } zeroinitializer, ptr %a55 + store { ptr, i64, i64 } %t51, ptr %a56 + call void @finch_buf_str(ptr %a55, ptr %a56, i32 1) + call void @finch_map_missing(ptr @.str.6567, i64 437, ptr %a55) + unreachable +map.found9687: + %t57 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t50, i32 0, i32 0 + %t58 = load ptr, ptr %t57 + %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t58, i64 %t53 + %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t59, i32 0, i32 2 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + %t63 = call i64 @finch_map_find(ptr %t47, ptr %a62, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t64 = icmp sge i64 %t63, 0 + br label %logic.rend9688 +logic.rend9688: + br label %logic.end9681 +logic.end9681: + %t65 = phi i1 [ false, %logic.from9679 ], [ %t64, %logic.rend9688 ] + store i1 %t65, ptr %a66 + %t67 = load i1, ptr %a66 + %t68 = xor i1 %t67, true + br label %logic.from9689 +logic.from9689: + br i1 %t68, label %logic.rhs9690, label %logic.end9691 +logic.rhs9690: + %t69 = load ptr, ptr %a1 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic9692, label %ok9693 +panic9692: + call void @finch_panic(ptr @.str.6568, i64 438, ptr @.str.6569) + unreachable +ok9693: + %t71 = getelementptr inbounds %S.cimport.Importer, ptr %t69, i32 0, i32 0 + %t72 = getelementptr inbounds %S.cimport.CImports, ptr %t71, i32 0, i32 3 + %t73 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t73, ptr %a74 + %t75 = call i64 @finch_map_find(ptr %t72, ptr %a74, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t76 = icmp sge i64 %t75, 0 + %t77 = xor i1 %t76, true + br label %logic.rend9694 +logic.rend9694: + br label %logic.end9691 +logic.end9691: + %t78 = phi i1 [ false, %logic.from9689 ], [ %t77, %logic.rend9694 ] + br i1 %t78, label %then9695, label %endif9697 +then9695: + %t79 = load { ptr, i64, i64 }, ptr %a9 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic9698, label %ok9699 +panic9698: + call void @finch_panic(ptr @.str.6570, i64 439, ptr @.str.6571) + unreachable +ok9699: + %t82 = getelementptr inbounds %S.cimport.Importer, ptr %t80, i32 0, i32 3 + %t83 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t83, ptr %a84 + store i32 0, ptr %a85 + %t86 = call i64 @finch_map_slot(ptr %t82, ptr %a84, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a85) + %t87 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t82, i32 0, i32 0 + %t88 = load ptr, ptr %t87 + %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t88, i64 %t86 + %t90 = load i32, ptr %a85 + %t91 = icmp ne i32 %t90, 0 + br i1 %t91, label %map.new9700, label %map.have9701 +map.new9700: + %t92 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 1 + call void @finch_str_copy(ptr %t92, ptr %a84) + %t93 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t93 + br label %map.have9701 +map.have9701: + %t94 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 + store { ptr, i64, i64 } %t79, ptr %a95 + call void @finch_str_copy(ptr %a96, ptr %a95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + %t98 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t97, ptr %t94 + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_drop(ptr %a99) + br label %endif9697 +endif9697: + call void @finch_str_drop(ptr %a36) + br label %endif9676 +endif9676: + br label %endif9673 +else9672: + %t100 = load i32, ptr %a13 + %t101 = icmp eq i32 %t100, 8 + br i1 %t101, label %then9702, label %else9703 +then9702: + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic9705, label %ok9706 +panic9705: + call void @finch_panic(ptr @.str.6572, i64 443, ptr @.str.6573) + unreachable +ok9706: + %t104 = getelementptr inbounds %S.cimport.Importer, ptr %t102, i32 0, i32 0 + %t105 = getelementptr inbounds %S.cimport.CImports, ptr %t104, i32 0, i32 0 + %t106 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t106, ptr %a107 + %t108 = call i64 @finch_map_find(ptr %t105, ptr %a107, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t109 = icmp sge i64 %t108, 0 + br i1 %t109, label %then9707, label %endif9709 +then9707: + call void @finch_str_drop(ptr %a9) + ret void +endif9709: + %t110 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_copy(ptr %a112, ptr %a111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + %t114 = insertvalue %S.cimport.CFunc zeroinitializer, { ptr, i64, i64 } %t113, 0 + %t115 = load ptr, ptr %a1 + %t116 = icmp eq ptr %t115, null + br i1 %t116, label %panic9710, label %ok9711 +panic9710: + call void @finch_panic(ptr @.str.6574, i64 446, ptr @.str.6575) + unreachable +ok9711: + %t117 = getelementptr inbounds %S.cimport.Importer, ptr %t115, i32 0, i32 2 + %t118 = load { ptr, i64, i64 }, ptr %t117 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_copy(ptr %a120, ptr %a119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + %t122 = insertvalue %S.cimport.CFunc %t114, { ptr, i64, i64 } %t121, 1 + store %S.cimport.CFunc %t122, ptr %a123 + %t124 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t124, ptr %a125 + %t126 = call i32 @clang_Cursor_getStorageClass(ptr %a125) + %t127 = icmp eq i32 %t126, 3 + br i1 %t127, label %then9712, label %endif9714 +then9712: + %t128 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + %t129 = load { ptr, i64, i64 }, ptr %t128 + store { ptr, i64, i64 } { ptr @.str.6576, i64 62, i64 0 }, ptr %t128 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load %S.cimport.CFunc, ptr %a123 + %t132 = load ptr, ptr %a1 + %t133 = icmp eq ptr %t132, null + br i1 %t133, label %panic9715, label %ok9716 +panic9715: + call void @finch_panic(ptr @.str.6577, i64 449, ptr @.str.6578) + unreachable +ok9716: + %t134 = getelementptr inbounds %S.cimport.Importer, ptr %t132, i32 0, i32 0 + %t135 = getelementptr inbounds %S.cimport.CImports, ptr %t134, i32 0, i32 0 + %t136 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t136, ptr %a137 + store i32 0, ptr %a138 + %t139 = call i64 @finch_map_slot(ptr %t135, ptr %a137, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a138) + %t140 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t135, i32 0, i32 0 + %t141 = load ptr, ptr %t140 + %t142 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t141, i64 %t139 + %t143 = load i32, ptr %a138 + %t144 = icmp ne i32 %t143, 0 + br i1 %t144, label %map.new9717, label %map.have9718 +map.new9717: + %t145 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 1 + call void @finch_str_copy(ptr %t145, ptr %a137) + %t146 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 + store %S.cimport.CFunc zeroinitializer, ptr %t146 + br label %map.have9718 +map.have9718: + %t147 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 + store %S.cimport.CFunc %t131, ptr %a148 + call void @finch.copy.S_cimport_CFunc(ptr %a149, ptr %a148) + %t150 = load %S.cimport.CFunc, ptr %a149 + %t151 = load %S.cimport.CFunc, ptr %t147 + store %S.cimport.CFunc %t150, ptr %t147 + store %S.cimport.CFunc %t151, ptr %a152 + call void @finch.drop.S_cimport_CFunc(ptr %a152) + call void @finch.drop.S_cimport_CFunc(ptr %a123) + call void @finch_str_drop(ptr %a9) + ret void +endif9714: + %t155 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t155, ptr %a156 + call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a154, ptr %a156) + %t157 = load %S.C.CXType, ptr %a154 + store %S.C.CXType %t157, ptr %a158 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a153, ptr %a158) + %t159 = load %S.C.CXType, ptr %a153 + store %S.C.CXType %t159, ptr %a160 + %t161 = getelementptr inbounds %S.C.CXType, ptr %a160, i32 0, i32 0 + %t162 = load i32, ptr %t161 + %t163 = icmp eq i32 %t162, 110 + br i1 %t163, label %then9719, label %endif9721 +then9719: + %t164 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + %t165 = load { ptr, i64, i64 }, ptr %t164 + store { ptr, i64, i64 } { ptr @.str.6579, i64 42, i64 0 }, ptr %t164 + store { ptr, i64, i64 } %t165, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load %S.cimport.CFunc, ptr %a123 + %t168 = load ptr, ptr %a1 + %t169 = icmp eq ptr %t168, null + br i1 %t169, label %panic9722, label %ok9723 +panic9722: + call void @finch_panic(ptr @.str.6580, i64 455, ptr @.str.6581) + unreachable +ok9723: + %t170 = getelementptr inbounds %S.cimport.Importer, ptr %t168, i32 0, i32 0 + %t171 = getelementptr inbounds %S.cimport.CImports, ptr %t170, i32 0, i32 0 + %t172 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t172, ptr %a173 + store i32 0, ptr %a174 + %t175 = call i64 @finch_map_slot(ptr %t171, ptr %a173, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a174) + %t176 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t171, i32 0, i32 0 + %t177 = load ptr, ptr %t176 + %t178 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t177, i64 %t175 + %t179 = load i32, ptr %a174 + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %map.new9724, label %map.have9725 +map.new9724: + %t181 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 1 + call void @finch_str_copy(ptr %t181, ptr %a173) + %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 + store %S.cimport.CFunc zeroinitializer, ptr %t182 + br label %map.have9725 +map.have9725: + %t183 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 + store %S.cimport.CFunc %t167, ptr %a184 + call void @finch.copy.S_cimport_CFunc(ptr %a185, ptr %a184) + %t186 = load %S.cimport.CFunc, ptr %a185 + %t187 = load %S.cimport.CFunc, ptr %t183 + store %S.cimport.CFunc %t186, ptr %t183 + store %S.cimport.CFunc %t187, ptr %a188 + call void @finch.drop.S_cimport_CFunc(ptr %a188) + call void @finch.drop.S_cimport_CFunc(ptr %a123) + call void @finch_str_drop(ptr %a9) + ret void +endif9721: + %t189 = load ptr, ptr %a1 + %t191 = load %S.C.CXType, ptr %a160 + store %S.C.CXType %t191, ptr %a192 + call void @clang_getResultType(ptr sret(%S.C.CXType) align 16 %a190, ptr %a192) + %t193 = load %S.C.CXType, ptr %a190 + %t194 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t189, %S.C.CXType %t193, i1 true, i1 false) + store %S.cimport.Mapped %t194, ptr %a195 + %t196 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 2 + %t197 = load i1, ptr %t196 + br i1 %t197, label %then9726, label %else9727 +then9726: + %t198 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 0 + %t199 = load %S.ast.Type, ptr %t198 + %t200 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 2 + store %S.ast.Type %t199, ptr %a201 + call void @finch.copy.S_ast_Type(ptr %a202, ptr %a201) + %t203 = load %S.ast.Type, ptr %a202 + %t204 = load %S.ast.Type, ptr %t200 + store %S.ast.Type %t203, ptr %t200 + store %S.ast.Type %t204, ptr %a205 + call void @finch.drop.S_ast_Type(ptr %a205) + br label %endif9728 +else9727: + %t206 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 1 + %t207 = load { ptr, i64, i64 }, ptr %t206 + %t208 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + store { ptr, i64, i64 } %t207, ptr %a209 + call void @finch_str_copy(ptr %a210, ptr %a209) + %t211 = load { ptr, i64, i64 }, ptr %a210 + %t212 = load { ptr, i64, i64 }, ptr %t208 + store { ptr, i64, i64 } %t211, ptr %t208 + store { ptr, i64, i64 } %t212, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %endif9728 +endif9728: + %t214 = load %S.C.CXType, ptr %a160 + store %S.C.CXType %t214, ptr %a215 + %t216 = call i32 @clang_getNumArgTypes(ptr %a215) + %t217 = sext i32 %t216 to i64 + store i64 %t217, ptr %a218 + %t219 = load i64, ptr %a218 + store i64 0, ptr %a220 + br label %for.cond9729 +for.cond9729: + %t221 = load i64, ptr %a220 + %t222 = icmp slt i64 %t221, %t219 + br i1 %t222, label %for.body9730, label %for.end9732 +for.body9730: + %t223 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 + %t225 = load i64, ptr %t224 + %t226 = icmp sgt i64 %t225, 0 + br i1 %t226, label %then9733, label %endif9735 +then9733: + br label %for.end9732 +endif9735: + %t227 = load ptr, ptr %a1 + %t229 = load %S.C.CXType, ptr %a160 + store %S.C.CXType %t229, ptr %a230 + %t231 = load i64, ptr %a220 + %t232 = trunc i64 %t231 to i32 + call void @clang_getArgType(ptr sret(%S.C.CXType) align 16 %a228, ptr %a230, i32 %t232) + %t233 = load %S.C.CXType, ptr %a228 + %t234 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t227, %S.C.CXType %t233, i1 true, i1 true) + store %S.cimport.Mapped %t234, ptr %a235 + %t236 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 2 + %t237 = load i1, ptr %t236 + br i1 %t237, label %then9736, label %else9737 +then9736: + %t238 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 3 + %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i32 0, i32 1 + %t240 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 0 + %t241 = load %S.ast.Type, ptr %t240 + store %S.ast.Type %t241, ptr %a242 + call void @finch.copy.S_ast_Type(ptr %a243, ptr %a242) + %t244 = load %S.ast.Type, ptr %a243 + %t245 = load i64, ptr %t239 + %t246 = add i64 %t245, 1 + call void @finch_arr_reserve(ptr %t238, i64 %t246, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t247 = load ptr, ptr %t238 + %t248 = getelementptr inbounds %S.ast.Type, ptr %t247, i64 %t245 + store %S.ast.Type %t244, ptr %t248 + store i64 %t246, ptr %t239 + br label %endif9738 +else9737: + %t249 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 1 + %t250 = load { ptr, i64, i64 }, ptr %t249 + %t251 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + store { ptr, i64, i64 } %t250, ptr %a252 + call void @finch_str_copy(ptr %a253, ptr %a252) + %t254 = load { ptr, i64, i64 }, ptr %a253 + %t255 = load { ptr, i64, i64 }, ptr %t251 + store { ptr, i64, i64 } %t254, ptr %t251 + store { ptr, i64, i64 } %t255, ptr %a256 + call void @finch_str_drop(ptr %a256) + br label %endif9738 +endif9738: + call void @finch.drop.S_cimport_Mapped(ptr %a235) + br label %for.step9731 +for.step9731: + %t257 = load i64, ptr %a220 + %t258 = add i64 %t257, 1 + store i64 %t258, ptr %a220 + br label %for.cond9729 +for.end9732: + %t259 = load %S.C.CXType, ptr %a160 + store %S.C.CXType %t259, ptr %a260 + %t261 = call i32 @clang_isFunctionTypeVariadic(ptr %a260) + %t262 = icmp ne i32 %t261, 0 + %t263 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 4 + store i1 %t262, ptr %t263 + %t264 = load %S.cimport.CFunc, ptr %a123 + %t265 = load ptr, ptr %a1 + %t266 = icmp eq ptr %t265, null + br i1 %t266, label %panic9739, label %ok9740 +panic9739: + call void @finch_panic(ptr @.str.6582, i64 477, ptr @.str.6583) + unreachable +ok9740: + %t267 = getelementptr inbounds %S.cimport.Importer, ptr %t265, i32 0, i32 0 + %t268 = getelementptr inbounds %S.cimport.CImports, ptr %t267, i32 0, i32 0 + %t269 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t269, ptr %a270 + store i32 0, ptr %a271 + %t272 = call i64 @finch_map_slot(ptr %t268, ptr %a270, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a271) + %t273 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t268, i32 0, i32 0 + %t274 = load ptr, ptr %t273 + %t275 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t274, i64 %t272 + %t276 = load i32, ptr %a271 + %t277 = icmp ne i32 %t276, 0 + br i1 %t277, label %map.new9741, label %map.have9742 +map.new9741: + %t278 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 1 + call void @finch_str_copy(ptr %t278, ptr %a270) + %t279 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 + store %S.cimport.CFunc zeroinitializer, ptr %t279 + br label %map.have9742 +map.have9742: + %t280 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 + store %S.cimport.CFunc %t264, ptr %a281 + call void @finch.copy.S_cimport_CFunc(ptr %a282, ptr %a281) + %t283 = load %S.cimport.CFunc, ptr %a282 + %t284 = load %S.cimport.CFunc, ptr %t280 + store %S.cimport.CFunc %t283, ptr %t280 + store %S.cimport.CFunc %t284, ptr %a285 + call void @finch.drop.S_cimport_CFunc(ptr %a285) + call void @finch.drop.S_cimport_Mapped(ptr %a195) + call void @finch.drop.S_cimport_CFunc(ptr %a123) + br label %endif9704 +else9703: + %t286 = load i32, ptr %a13 + %t287 = icmp eq i32 %t286, 9 + br i1 %t287, label %then9743, label %else9744 +then9743: + %t288 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t288, ptr %a289 + %t290 = call i32 @clang_Cursor_getStorageClass(ptr %a289) + %t291 = icmp ne i32 %t290, 2 + br label %logic.from9746 +logic.from9746: + br i1 %t291, label %logic.end9748, label %logic.rhs9747 +logic.rhs9747: + %t292 = load ptr, ptr %a1 + %t293 = icmp eq ptr %t292, null + br i1 %t293, label %panic9749, label %ok9750 +panic9749: + call void @finch_panic(ptr @.str.6584, i64 479, ptr @.str.6585) + unreachable +ok9750: + %t294 = getelementptr inbounds %S.cimport.Importer, ptr %t292, i32 0, i32 0 + %t295 = getelementptr inbounds %S.cimport.CImports, ptr %t294, i32 0, i32 2 + %t296 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t296, ptr %a297 + %t298 = call i64 @finch_map_find(ptr %t295, ptr %a297, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t299 = icmp sge i64 %t298, 0 + br label %logic.rend9751 +logic.rend9751: + br label %logic.end9748 +logic.end9748: + %t300 = phi i1 [ true, %logic.from9746 ], [ %t299, %logic.rend9751 ] + br i1 %t300, label %then9752, label %endif9754 +then9752: + call void @finch_str_drop(ptr %a9) + ret void +endif9754: + %t301 = load ptr, ptr %a1 + %t303 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t303, ptr %a304 + call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a302, ptr %a304) + %t305 = load %S.C.CXType, ptr %a302 + %t306 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t301, %S.C.CXType %t305, i1 false, i1 false) + store %S.cimport.Mapped %t306, ptr %a307 + %t308 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 2 + %t309 = load i1, ptr %t308 + br i1 %t309, label %then9755, label %endif9757 +then9755: + %t310 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 0 + %t311 = load %S.ast.Type, ptr %t310 + %t312 = load ptr, ptr %a1 + %t313 = icmp eq ptr %t312, null + br i1 %t313, label %panic9758, label %ok9759 +panic9758: + call void @finch_panic(ptr @.str.6586, i64 484, ptr @.str.6587) + unreachable +ok9759: + %t314 = getelementptr inbounds %S.cimport.Importer, ptr %t312, i32 0, i32 0 + %t315 = getelementptr inbounds %S.cimport.CImports, ptr %t314, i32 0, i32 2 + %t316 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t316, ptr %a317 + store i32 0, ptr %a318 + %t319 = call i64 @finch_map_slot(ptr %t315, ptr %a317, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a318) + %t320 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t315, i32 0, i32 0 + %t321 = load ptr, ptr %t320 + %t322 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t321, i64 %t319 + %t323 = load i32, ptr %a318 + %t324 = icmp ne i32 %t323, 0 + br i1 %t324, label %map.new9760, label %map.have9761 +map.new9760: + %t325 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 1 + call void @finch_str_copy(ptr %t325, ptr %a317) + %t326 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 + store %S.ast.Type zeroinitializer, ptr %t326 + br label %map.have9761 +map.have9761: + %t327 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 + store %S.ast.Type %t311, ptr %a328 + call void @finch.copy.S_ast_Type(ptr %a329, ptr %a328) + %t330 = load %S.ast.Type, ptr %a329 + %t331 = load %S.ast.Type, ptr %t327 + store %S.ast.Type %t330, ptr %t327 + store %S.ast.Type %t331, ptr %a332 + call void @finch.drop.S_ast_Type(ptr %a332) + br label %endif9757 +endif9757: + call void @finch.drop.S_cimport_Mapped(ptr %a307) + br label %endif9745 +else9744: + %t333 = load i32, ptr %a13 + %t334 = icmp eq i32 %t333, 2 + br i1 %t334, label %then9762, label %else9763 +then9762: + %t335 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t335, ptr %a336 + %t337 = call i32 @clang_isCursorDefinition(ptr %a336) + %t338 = icmp ne i32 %t337, 0 + br label %logic.from9765 +logic.from9765: + br i1 %t338, label %logic.rhs9766, label %logic.end9767 +logic.rhs9766: + %t339 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t340 = load i64, ptr %t339 + %t341 = icmp sgt i64 %t340, 0 + br label %logic.rend9768 +logic.rend9768: + br label %logic.end9767 +logic.end9767: + %t342 = phi i1 [ false, %logic.from9765 ], [ %t341, %logic.rend9768 ] + br label %logic.from9769 +logic.from9769: + br i1 %t342, label %logic.rhs9770, label %logic.end9771 +logic.rhs9770: + %t343 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t343, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.6589, i64 1, i64 0 }, ptr %a346 + %t347 = call i64 @finch_str_find(ptr %a344, ptr %a346) + %t348 = icmp sge i64 %t347, 0 + %t349 = xor i1 %t348, true + br label %logic.rend9772 +logic.rend9772: + br label %logic.end9771 +logic.end9771: + %t350 = phi i1 [ false, %logic.from9769 ], [ %t349, %logic.rend9772 ] + br i1 %t350, label %then9773, label %endif9775 +then9773: + %t351 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t351, ptr %a352 + %t353 = call [2 x i64] @clang_getCursorUSR(ptr %a352) + store [2 x i64] %t353, ptr %a354 + %t355 = load %S.C.CXString, ptr %a354 + %t356 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t355) + store { ptr, i64, i64 } %t356, ptr %a357 + %t358 = load ptr, ptr %a1 + %t359 = icmp eq ptr %t358, null + br i1 %t359, label %panic9776, label %ok9777 +panic9776: + call void @finch_panic(ptr @.str.6590, i64 489, ptr @.str.6591) + unreachable +ok9777: + %t360 = getelementptr inbounds %S.cimport.Importer, ptr %t358, i32 0, i32 3 + %t361 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t361, ptr %a362 + %t363 = call i64 @finch_map_find(ptr %t360, ptr %a362, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t364 = icmp sge i64 %t363, 0 + %t365 = xor i1 %t364, true + br i1 %t365, label %then9778, label %endif9780 +then9778: + %t366 = load { ptr, i64, i64 }, ptr %a9 + %t367 = load ptr, ptr %a1 + %t368 = icmp eq ptr %t367, null + br i1 %t368, label %panic9781, label %ok9782 +panic9781: + call void @finch_panic(ptr @.str.6592, i64 490, ptr @.str.6593) + unreachable +ok9782: + %t369 = getelementptr inbounds %S.cimport.Importer, ptr %t367, i32 0, i32 3 + %t370 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t370, ptr %a371 + store i32 0, ptr %a372 + %t373 = call i64 @finch_map_slot(ptr %t369, ptr %a371, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a372) + %t374 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t369, i32 0, i32 0 + %t375 = load ptr, ptr %t374 + %t376 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t375, i64 %t373 + %t377 = load i32, ptr %a372 + %t378 = icmp ne i32 %t377, 0 + br i1 %t378, label %map.new9783, label %map.have9784 +map.new9783: + %t379 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 1 + call void @finch_str_copy(ptr %t379, ptr %a371) + %t380 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t380 + br label %map.have9784 +map.have9784: + %t381 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 + store { ptr, i64, i64 } %t366, ptr %a382 + call void @finch_str_copy(ptr %a383, ptr %a382) + %t384 = load { ptr, i64, i64 }, ptr %a383 + %t385 = load { ptr, i64, i64 }, ptr %t381 + store { ptr, i64, i64 } %t384, ptr %t381 + store { ptr, i64, i64 } %t385, ptr %a386 + call void @finch_str_drop(ptr %a386) + br label %endif9780 +endif9780: + call void @finch_str_drop(ptr %a357) + br label %endif9775 +endif9775: + br label %endif9764 +else9763: + %t387 = load i32, ptr %a13 + %t388 = icmp eq i32 %t387, 5 + br i1 %t388, label %then9785, label %else9786 +then9785: + %t389 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t389, ptr %a390 + %t391 = load ptr, ptr %a1 + %t392 = call i32 @clang_visitChildren(ptr %a390, ptr @finch.c.cimport.visitTop, ptr %t391) + br label %endif9787 +else9786: + %t393 = load i32, ptr %a13 + %t394 = icmp eq i32 %t393, 7 + br i1 %t394, label %then9788, label %else9789 +then9788: + %t395 = load ptr, ptr %a1 + %t396 = icmp eq ptr %t395, null + br i1 %t396, label %panic9791, label %ok9792 +panic9791: + call void @finch_panic(ptr @.str.6594, i64 496, ptr @.str.6595) + unreachable +ok9792: + %t397 = getelementptr inbounds %S.cimport.Importer, ptr %t395, i32 0, i32 0 + %t398 = getelementptr inbounds %S.cimport.CImports, ptr %t397, i32 0, i32 1 + %t399 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t399, ptr %a400 + %t401 = call i64 @finch_map_find(ptr %t398, ptr %a400, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t402 = icmp sge i64 %t401, 0 + %t403 = xor i1 %t402, true + br i1 %t403, label %then9793, label %endif9795 +then9793: + %t404 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t404, ptr %a405 + %t406 = call i64 @clang_getEnumConstantDeclValue(ptr %a405) + %t407 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t406, 1 + %t408 = load ptr, ptr %a1 + %t409 = icmp eq ptr %t408, null + br i1 %t409, label %panic9796, label %ok9797 +panic9796: + call void @finch_panic(ptr @.str.6596, i64 497, ptr @.str.6597) + unreachable +ok9797: + %t410 = getelementptr inbounds %S.cimport.Importer, ptr %t408, i32 0, i32 0 + %t411 = getelementptr inbounds %S.cimport.CImports, ptr %t410, i32 0, i32 1 + %t412 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t412, ptr %a413 + store i32 0, ptr %a414 + %t415 = call i64 @finch_map_slot(ptr %t411, ptr %a413, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a414) + %t416 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t411, i32 0, i32 0 + %t417 = load ptr, ptr %t416 + %t418 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t417, i64 %t415 + %t419 = load i32, ptr %a414 + %t420 = icmp ne i32 %t419, 0 + br i1 %t420, label %map.new9798, label %map.have9799 +map.new9798: + %t421 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 1 + call void @finch_str_copy(ptr %t421, ptr %a413) + %t422 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 + store %S.cimport.CConst zeroinitializer, ptr %t422 + br label %map.have9799 +map.have9799: + %t423 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 + %t424 = load %S.cimport.CConst, ptr %t423 + store %S.cimport.CConst %t407, ptr %t423 + store %S.cimport.CConst %t424, ptr %a425 + call void @finch.drop.S_cimport_CConst(ptr %a425) + br label %endif9795 +endif9795: + br label %endif9790 +else9789: + %t426 = load i32, ptr %a13 + %t427 = icmp eq i32 %t426, 501 + br i1 %t427, label %then9800, label %endif9802 +then9800: + %t428 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t428, ptr %a429 + %t430 = call i32 @clang_Cursor_isMacroBuiltin(ptr %a429) + %t431 = icmp ne i32 %t430, 0 + br label %logic.from9803 +logic.from9803: + br i1 %t431, label %logic.end9805, label %logic.rhs9804 +logic.rhs9804: + %t432 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t432, ptr %a433 + %t434 = call i32 @clang_Cursor_isMacroFunctionLike(ptr %a433) + %t435 = icmp ne i32 %t434, 0 + br label %logic.rend9806 +logic.rend9806: + br label %logic.end9805 +logic.end9805: + %t436 = phi i1 [ true, %logic.from9803 ], [ %t435, %logic.rend9806 ] + br i1 %t436, label %then9807, label %endif9809 +then9807: + call void @finch_str_drop(ptr %a9) + ret void +endif9809: + %t437 = load ptr, ptr %a1 + %t438 = load %S.C.CXCursor, ptr %a2 + %t439 = call %S.cimport.Number @finch.cimport.macroValue(ptr %t437, %S.C.CXCursor %t438) + store %S.cimport.Number %t439, ptr %a440 + %t441 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 1 + %t442 = load i1, ptr %t441 + br label %logic.from9810 +logic.from9810: + br i1 %t442, label %logic.rhs9811, label %logic.end9812 +logic.rhs9811: + %t443 = load ptr, ptr %a1 + %t444 = icmp eq ptr %t443, null + br i1 %t444, label %panic9813, label %ok9814 +panic9813: + call void @finch_panic(ptr @.str.6598, i64 504, ptr @.str.6599) + unreachable +ok9814: + %t445 = getelementptr inbounds %S.cimport.Importer, ptr %t443, i32 0, i32 0 + %t446 = getelementptr inbounds %S.cimport.CImports, ptr %t445, i32 0, i32 1 + %t447 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t447, ptr %a448 + %t449 = call i64 @finch_map_find(ptr %t446, ptr %a448, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t450 = icmp sge i64 %t449, 0 + %t451 = xor i1 %t450, true + br label %logic.rend9815 +logic.rend9815: + br label %logic.end9812 +logic.end9812: + %t452 = phi i1 [ false, %logic.from9810 ], [ %t451, %logic.rend9815 ] + br i1 %t452, label %then9816, label %endif9818 +then9816: + %t453 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 0 + %t454 = load %S.cimport.CConst, ptr %t453 + %t455 = load ptr, ptr %a1 + %t456 = icmp eq ptr %t455, null + br i1 %t456, label %panic9819, label %ok9820 +panic9819: + call void @finch_panic(ptr @.str.6600, i64 505, ptr @.str.6601) + unreachable +ok9820: + %t457 = getelementptr inbounds %S.cimport.Importer, ptr %t455, i32 0, i32 0 + %t458 = getelementptr inbounds %S.cimport.CImports, ptr %t457, i32 0, i32 1 + %t459 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t459, ptr %a460 + store i32 0, ptr %a461 + %t462 = call i64 @finch_map_slot(ptr %t458, ptr %a460, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a461) + %t463 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t458, i32 0, i32 0 + %t464 = load ptr, ptr %t463 + %t465 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t464, i64 %t462 + %t466 = load i32, ptr %a461 + %t467 = icmp ne i32 %t466, 0 + br i1 %t467, label %map.new9821, label %map.have9822 +map.new9821: + %t468 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 1 + call void @finch_str_copy(ptr %t468, ptr %a460) + %t469 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 + store %S.cimport.CConst zeroinitializer, ptr %t469 + br label %map.have9822 +map.have9822: + %t470 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 + store %S.cimport.CConst %t454, ptr %a471 + call void @finch.copy.S_cimport_CConst(ptr %a472, ptr %a471) + %t473 = load %S.cimport.CConst, ptr %a472 + %t474 = load %S.cimport.CConst, ptr %t470 + store %S.cimport.CConst %t473, ptr %t470 + store %S.cimport.CConst %t474, ptr %a475 + call void @finch.drop.S_cimport_CConst(ptr %a475) + br label %endif9818 +endif9818: + call void @finch.drop.S_cimport_Number(ptr %a440) + br label %endif9802 +endif9802: + br label %endif9790 +endif9790: + br label %endif9787 +endif9787: + br label %endif9764 +endif9764: + br label %endif9745 +endif9745: + br label %endif9704 +endif9704: + br label %endif9673 +endif9673: + call void @finch_str_drop(ptr %a9) + ret void +} + +define internal void @finch.drop.map_str_str(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9826 +n.cond9826: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9827, label %n.end9828 +n.body9827: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live9829, label %entry.next9830 +entry.live9829: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 2 + call void @finch_str_drop(ptr %t13) + br label %entry.next9830 +entry.next9830: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond9826 +n.end9828: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.map_str_bool(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9831 +n.cond9831: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9832, label %n.end9833 +n.body9832: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live9834, label %entry.next9835 +entry.live9834: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 2 + br label %entry.next9835 +entry.next9835: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond9831 +n.end9833: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_Importer(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 0 + call void @finch.drop.S_cimport_CImports(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 3 + call void @finch.drop.map_str_str(ptr %t3) + %t4 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 4 + call void @finch.drop.map_str_bool(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_ptr(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i1 %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i1, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca %S.cimport.Importer, align 16 + %a12 = alloca %S.cimport.CImports, align 16 + %a13 = alloca %S.cimport.CImports, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca i64, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca i64, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca i64, align 16 + %a113 = alloca ptr, align 16 + %a114 = alloca i64, align 16 + %a122 = alloca %S.cimport.Header, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca %S.C.CXUnsavedFile, align 16 + %a138 = alloca ptr, align 16 + %a140 = alloca i64, align 16 + %a153 = alloca i32, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca i64, align 16 + %a183 = alloca i64, align 16 + %a190 = alloca ptr, align 16 + %a196 = alloca [32 x i8], align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca %S.C.CXCursor, align 16 + %a321 = alloca %S.C.CXCursor, align 16 + %a329 = alloca %S.cimport.CImports, align 16 + %a330 = alloca %S.cimport.CImports, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i1 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store %S.cimport.Importer zeroinitializer, ptr %a6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = icmp eq i64 %t8, 0 + br i1 %t9, label %then9823, label %endif9825 +then9823: + %t10 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 + %t11 = load %S.cimport.CImports, ptr %t10 + store %S.cimport.CImports %t11, ptr %a12 + call void @finch.copy.S_cimport_CImports(ptr %a13, ptr %a12) + %t14 = load %S.cimport.CImports, ptr %a13 + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t15 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t16 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t15, %S.cimport.CImports %t14, 1 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t16 +endif9825: + %t17 = mul i64 3, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t18 = call ptr @finch_alloc(i64 %t17) + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 0 + store { ptr, i64, i64 } { ptr @.str.6602, i64 2, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 + store { ptr, i64, i64 } { ptr @.str.6603, i64 1, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 2 + store { ptr, i64, i64 } { ptr @.str.6604, i64 10, i64 0 }, ptr %t21 + %t22 = insertvalue { ptr, i64, i64 } undef, ptr %t18, 0 + %t23 = insertvalue { ptr, i64, i64 } %t22, i64 3, 1 + %t24 = insertvalue { ptr, i64, i64 } %t23, i64 3, 2 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = icmp sgt i64 %t27, 0 + br i1 %t28, label %then9836, label %endif9838 +then9836: + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t30 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6605, i64 9, i64 0 }, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a31 + %t35 = load i64, ptr %t29 + %t36 = add i64 %t35, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t36, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t37 = load ptr, ptr %a25 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t35 + store { ptr, i64, i64 } %t34, ptr %t38 + store i64 %t36, ptr %t29 + br label %endif9838 +endif9838: + %t39 = load i1, ptr %a4 + br i1 %t39, label %then9839, label %endif9841 +then9839: + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t41 = load i64, ptr %t40 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a25 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } { ptr @.str.6606, i64 19, i64 0 }, ptr %t44 + store i64 %t42, ptr %t40 + br label %endif9841 +endif9841: + store i64 0, ptr %a45 + br label %each.cond9842 +each.cond9842: + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = load i64, ptr %a45 + %t49 = icmp slt i64 %t48, %t47 + br i1 %t49, label %each.body9843, label %each.end9845 +each.body9843: + %t50 = load ptr, ptr %a2 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t55 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.6607, i64 2, i64 0 }, ptr %a57 + store { ptr, i64, i64 } %t55, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a56 + %t60 = load i64, ptr %t54 + %t61 = add i64 %t60, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t61, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t62 = load ptr, ptr %a25 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 %t60 + store { ptr, i64, i64 } %t59, ptr %t63 + store i64 %t61, ptr %t54 + br label %each.step9844 +each.step9844: + %t64 = load i64, ptr %a45 + %t65 = add i64 %t64, 1 + store i64 %t65, ptr %a45 + br label %each.cond9842 +each.end9845: + %t66 = load { ptr, i64, i64 }, ptr %a5 + %t67 = call { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %t66) + store { ptr, i64, i64 } %t67, ptr %a68 + store i64 0, ptr %a69 + br label %each.cond9846 +each.cond9846: + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a68, i32 0, i32 1 + %t71 = load i64, ptr %t70 + %t72 = load i64, ptr %a69 + %t73 = icmp slt i64 %t72, %t71 + br i1 %t73, label %each.body9847, label %each.end9849 +each.body9847: + %t74 = load ptr, ptr %a68 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 %t72 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } %t76, ptr %a77 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t79 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_copy(ptr %a81, ptr %a80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + %t83 = load i64, ptr %t78 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %a25 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 + store { ptr, i64, i64 } %t82, ptr %t86 + store i64 %t84, ptr %t78 + br label %each.step9848 +each.step9848: + %t87 = load i64, ptr %a69 + %t88 = add i64 %t87, 1 + store i64 %t88, ptr %a69 + br label %each.cond9846 +each.end9849: + call void @finch.drop.arr_str(ptr %a68) + store { ptr, i64, i64 } zeroinitializer, ptr %a89 + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t91 = load i64, ptr %t90 + store i64 0, ptr %a92 + br label %for.cond9850 +for.cond9850: + %t93 = load i64, ptr %a92 + %t94 = icmp slt i64 %t93, %t91 + br i1 %t94, label %for.body9851, label %for.end9853 +for.body9851: + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 + %t96 = load i64, ptr %a92 + %t97 = load { ptr, i64, i64 }, ptr %a25 + %t98 = extractvalue { ptr, i64, i64 } %t97, 1 + %t99 = icmp uge i64 %t96, %t98 + br i1 %t99, label %range9854, label %inrange9855 +range9854: + call void @finch_panic_index(ptr @.str.6608, i64 532, i64 %t96, i64 %t98) + unreachable +inrange9855: + %t100 = extractvalue { ptr, i64, i64 } %t97, 0 + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t96 + %t102 = load { ptr, i64, i64 }, ptr %t101 + %t103 = extractvalue { ptr, i64, i64 } %t102, 0 + %t104 = icmp eq ptr %t103, null + %t105 = select i1 %t104, ptr @.str.6609, ptr %t103 + %t106 = load i64, ptr %t95 + %t107 = add i64 %t106, 1 + call void @finch_arr_reserve(ptr %a89, i64 %t107, i64 ptrtoint (ptr getelementptr (ptr, ptr null, i32 1) to i64)) + %t108 = load ptr, ptr %a89 + %t109 = getelementptr inbounds ptr, ptr %t108, i64 %t106 + store ptr %t105, ptr %t109 + store i64 %t107, ptr %t95 + br label %for.step9852 +for.step9852: + %t110 = load i64, ptr %a92 + %t111 = add i64 %t110, 1 + store i64 %t111, ptr %a92 + br label %for.cond9850 +for.end9853: + %t112 = call ptr @clang_createIndex(i32 0, i32 0) + store ptr %t112, ptr %a113 + store i64 0, ptr %a114 + br label %each.cond9856 +each.cond9856: + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = load i64, ptr %a114 + %t118 = icmp slt i64 %t117, %t116 + br i1 %t118, label %each.body9857, label %each.end9859 +each.body9857: + %t119 = load ptr, ptr %a1 + %t120 = getelementptr inbounds %S.cimport.Header, ptr %t119, i64 %t117 + %t121 = load %S.cimport.Header, ptr %t120 + store %S.cimport.Header %t121, ptr %a122 + %t123 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t124 = load { ptr, i64, i64 }, ptr %t123 + store { ptr, i64, i64 } { ptr @.str.6610, i64 10, i64 0 }, ptr %a126 + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a125 + store { ptr, i64, i64 } %t128, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6611, i64 2, i64 0 }, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + store { ptr, i64, i64 } %t128, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t133, ptr %a134 + %t135 = load { ptr, i64, i64 }, ptr %a134 + %t136 = call %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } { ptr @.str.6612, i64 14, i64 0 }, { ptr, i64, i64 } %t135) + store %S.C.CXUnsavedFile %t136, ptr %a137 + store ptr null, ptr %a138 + %t139 = or i64 1, 64 + store i64 %t139, ptr %a140 + %t141 = load ptr, ptr %a113 + %t142 = extractvalue { ptr, i64, i64 } { ptr @.str.6613, i64 14, i64 0 }, 0 + %t143 = icmp eq ptr %t142, null + %t144 = select i1 %t143, ptr @.str.6614, ptr %t142 + %t145 = load { ptr, i64, i64 }, ptr %a89 + %t146 = extractvalue { ptr, i64, i64 } %t145, 0 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 + %t148 = load i64, ptr %t147 + %t149 = trunc i64 %t148 to i32 + %t150 = load i64, ptr %a140 + %t151 = trunc i64 %t150 to i32 + %t152 = call i32 @clang_parseTranslationUnit2(ptr %t141, ptr %t144, ptr %t146, i32 %t149, ptr %a137, i32 1, i32 %t151, ptr %a138) + store i32 %t152, ptr %a153 + %t154 = load i32, ptr %a153 + %t155 = icmp ne i32 %t154, 0 + br label %logic.from9860 +logic.from9860: + br i1 %t155, label %logic.end9862, label %logic.rhs9861 +logic.rhs9861: + %t156 = load ptr, ptr %a138 + %t157 = icmp eq ptr %t156, null + br label %logic.rend9863 +logic.rend9863: + br label %logic.end9862 +logic.end9862: + %t158 = phi i1 [ true, %logic.from9860 ], [ %t157, %logic.rend9863 ] + br i1 %t158, label %then9864, label %endif9866 +then9864: + %t159 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6615, i64 33, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t166 = load { ptr, i64, i64 }, ptr %t165 + store { ptr, i64, i64 } %t164, ptr %a168 + store { ptr, i64, i64 } %t166, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t164, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t171, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.6616, i64 1, i64 0 }, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t171, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a172 + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t177 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t176, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t177 +endif9866: + %t178 = load ptr, ptr %a138 + %t179 = call i32 @clang_getNumDiagnostics(ptr %t178) + %t180 = zext i32 %t179 to i64 + store i64 %t180, ptr %a181 + %t182 = load i64, ptr %a181 + store i64 0, ptr %a183 + br label %for.cond9867 +for.cond9867: + %t184 = load i64, ptr %a183 + %t185 = icmp slt i64 %t184, %t182 + br i1 %t185, label %for.body9868, label %for.end9870 +for.body9868: + %t186 = load ptr, ptr %a138 + %t187 = load i64, ptr %a183 + %t188 = trunc i64 %t187 to i32 + %t189 = call ptr @clang_getDiagnostic(ptr %t186, i32 %t188) + store ptr %t189, ptr %a190 + %t191 = load ptr, ptr %a190 + %t192 = call i32 @clang_getDiagnosticSeverity(ptr %t191) + %t193 = icmp sge i32 %t192, 3 + br i1 %t193, label %then9871, label %endif9873 +then9871: + %t194 = load ptr, ptr %a190 + %t195 = call [2 x i64] @clang_getDiagnosticSpelling(ptr %t194) + store [2 x i64] %t195, ptr %a196 + %t197 = load %S.C.CXString, ptr %a196 + %t198 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t197) + store { ptr, i64, i64 } %t198, ptr %a199 + %t200 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t200) + %t201 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t201, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.6618, i64 14, i64 0 }, ptr %a204 + %t205 = call i64 @finch_str_find(ptr %a202, ptr %a204) + %t206 = icmp sge i64 %t205, 0 + br i1 %t206, label %then9874, label %endif9876 +then9874: + %t207 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t207, ptr %a208 + %t210 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t210, ptr %a211 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a199, i32 0, i32 1 + %t214 = load i64, ptr %t213 + call void @finch_str_sub(ptr %a212, ptr %a211, i64 1, i64 %t214, ptr @.str.6620, i64 552) + %t215 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t215, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.6622, i64 1, i64 0 }, ptr %a218 + %t219 = call i64 @finch_str_find(ptr %a216, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = add i64 %t219, 1 + call void @finch_str_sub(ptr %a209, ptr %a208, i64 1, i64 %t221, ptr @.str.6619, i64 552) + %t222 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t222, ptr %a223 + %t224 = load { ptr, i64, i64 }, ptr %a223 + %t225 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t226 = load { ptr, i64, i64 }, ptr %t225 + store { ptr, i64, i64 } %t224, ptr %a227 + store { ptr, i64, i64 } %t226, ptr %a228 + %t229 = call i32 @finch_str_eq(ptr %a227, ptr %a228) + %t230 = icmp ne i32 %t229, 0 + br i1 %t230, label %then9877, label %endif9879 +then9877: + %t231 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t232 = load { ptr, i64, i64 }, ptr %t231 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.6623, i64 34, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a233 + %t237 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + store { ptr, i64, i64 } %t236, ptr %a240 + store { ptr, i64, i64 } %t238, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t236, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + store { ptr, i64, i64 } %t243, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.6624, i64 1, i64 0 }, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t243, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + call void @finch_str_drop(ptr %a223) + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t249 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t248, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t249 +endif9879: + %t250 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t251 = load { ptr, i64, i64 }, ptr %t250 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.6625, i64 34, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + %t255 = load { ptr, i64, i64 }, ptr %a252 + %t256 = load { ptr, i64, i64 }, ptr %a223 + store { ptr, i64, i64 } %t255, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t261, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.6626, i64 10, i64 0 }, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t261, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + %t267 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t266, ptr %a270 + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t266, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + store { ptr, i64, i64 } %t273, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.6627, i64 60, i64 0 }, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + call void @finch_str_drop(ptr %a223) + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t279 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t278, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t279 +endif9876: + %t280 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a283 + store { ptr, i64, i64 } { ptr @.str.6628, i64 19, i64 0 }, ptr %a284 + call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a282 + %t286 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t285, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t285, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t292, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.6629, i64 16, i64 0 }, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t292, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a293 + %t298 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t297, ptr %a300 + store { ptr, i64, i64 } %t298, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t297, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t304 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t303, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t304 +endif9873: + %t305 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t305) + br label %for.step9869 +for.step9869: + %t306 = load i64, ptr %a183 + %t307 = add i64 %t306, 1 + store i64 %t307, ptr %a183 + br label %for.cond9867 +for.end9870: + %t308 = load ptr, ptr %a138 + %t309 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1 + store ptr %t308, ptr %t309 + %t310 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t311 = load { ptr, i64, i64 }, ptr %t310 + %t312 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2 + store { ptr, i64, i64 } %t311, ptr %a313 + call void @finch_str_copy(ptr %a314, ptr %a313) + %t315 = load { ptr, i64, i64 }, ptr %a314 + %t316 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t315, ptr %t312 + store { ptr, i64, i64 } %t316, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t319 = load ptr, ptr %a138 + call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a318, ptr %t319) + %t320 = load %S.C.CXCursor, ptr %a318 + store %S.C.CXCursor %t320, ptr %a321 + %t322 = call i32 @clang_visitChildren(ptr %a321, ptr @finch.c.cimport.visitTop, ptr %a6) + %t323 = load ptr, ptr %a138 + call void @clang_disposeTranslationUnit(ptr %t323) + call void @finch_str_drop(ptr %a134) + br label %each.step9858 +each.step9858: + %t324 = load i64, ptr %a114 + %t325 = add i64 %t324, 1 + store i64 %t325, ptr %a114 + br label %each.cond9856 +each.end9859: + %t326 = load ptr, ptr %a113 + call void @clang_disposeIndex(ptr %t326) + %t327 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 + %t328 = load %S.cimport.CImports, ptr %t327 + store %S.cimport.CImports %t328, ptr %a329 + call void @finch.copy.S_cimport_CImports(ptr %a330, ptr %a329) + %t331 = load %S.cimport.CImports, ptr %a330 + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t332 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t333 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t332, %S.cimport.CImports %t331, 1 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t333 +} + +define internal %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + %t4 = extractvalue { ptr, i64, i64 } %t3, 0 + %t5 = icmp eq ptr %t4, null + %t6 = select i1 %t5, ptr @.str.6630, ptr %t4 + %t7 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = extractvalue { ptr, i64, i64 } %t8, 0 + %t10 = icmp eq ptr %t9, null + %t11 = select i1 %t10, ptr @.str.6631, ptr %t9 + %t12 = insertvalue %S.C.CXUnsavedFile %t7, ptr %t11, 1 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = insertvalue %S.C.CXUnsavedFile %t12, i64 %t14, 2 + ret %S.C.CXUnsavedFile %t15 +} + +define internal { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6634, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6635, i64 4, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6632, i64 1, i64 0 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.6636, i64 1, i64 0 }, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + ret { ptr, i64, i64 } %t17 +} + +define internal i64 @finch.host.run({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a4 + call void @finch_str_copy(ptr %a3, ptr %a4) + %t5 = call i64 @finch_shell(ptr %a3) + call void @finch_str_drop(ptr %a3) + ret i64 %t5 +} + +define internal { ptr, i64, i64 } @finch.host.nullDevice() { +entry: + + ret { ptr, i64, i64 } { ptr @.str.6637, i64 9, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.host.tempDir() { +entry: + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6638, i64 6, i64 0 }, 0 + %t2 = icmp eq ptr %t1, null + %t3 = select i1 %t2, ptr @.str.6639, ptr %t1 + %t4 = call ptr @getenv(ptr %t3) + store { ptr, i64, i64 } zeroinitializer, ptr %a5 + call void @finch_str_from_c(ptr %a5, ptr %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br i1 %t13, label %then9880, label %endif9882 +then9880: + %t14 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6641, i64 1, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_ends(ptr %a15, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then9883, label %endif9885 +then9883: + %t20 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t20, ptr %a21 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = sub i64 %t24, 1 + call void @finch_str_sub(ptr %a22, ptr %a21, i64 0, i64 %t25, ptr @.str.6642, i64 31) + %t26 = load { ptr, i64, i64 }, ptr %a22 + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t26 +endif9885: + %t27 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t27 +endif9882: + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } { ptr @.str.6643, i64 4, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.host.pathSeparator() { +entry: + + ret { ptr, i64, i64 } { ptr @.str.6644, i64 1, i64 0 } +} + +define internal i64 @finch.host.pid() { +entry: + + %t1 = call i32 @getpid() + %t2 = sext i32 %t1 to i64 + ret i64 %t2 +} + +define internal { ptr, i64, i64 } @finch.host.cwd() { +entry: + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6645, i64 3, i64 0 }, 0 + %t2 = icmp eq ptr %t1, null + %t3 = select i1 %t2, ptr @.str.6646, ptr %t1 + %t4 = call ptr @getenv(ptr %t3) + store { ptr, i64, i64 } zeroinitializer, ptr %a5 + call void @finch_str_from_c(ptr %a5, ptr %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + ret { ptr, i64, i64 } %t9 +} + +define internal { ptr, i64, i64 } @finch.host.cacheDir() { +entry: + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6647, i64 14, i64 0 }, 0 + %t2 = icmp eq ptr %t1, null + %t3 = select i1 %t2, ptr @.str.6648, ptr %t1 + %t4 = call ptr @getenv(ptr %t3) + store { ptr, i64, i64 } zeroinitializer, ptr %a5 + call void @finch_str_from_c(ptr %a5, ptr %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br i1 %t13, label %then9886, label %endif9888 +then9886: + %t14 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6649, i64 6, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t18 +endif9888: + %t19 = extractvalue { ptr, i64, i64 } { ptr @.str.6650, i64 4, i64 0 }, 0 + %t20 = icmp eq ptr %t19, null + %t21 = select i1 %t20, ptr @.str.6651, ptr %t19 + %t22 = call ptr @getenv(ptr %t21) + store { ptr, i64, i64 } zeroinitializer, ptr %a23 + call void @finch_str_from_c(ptr %a23, ptr %t22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = icmp sgt i64 %t30, 0 + br i1 %t31, label %then9889, label %endif9891 +then9889: + %t32 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.6652, i64 13, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a33 + call void @finch_str_drop(ptr %a28) + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t36 +endif9891: + %t37 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.6653, i64 12, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + call void @finch_str_drop(ptr %a28) + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t42 +} + +define internal void @finch.host.binaryStdio() { +entry: + + ret void +} + +define internal void @finch.host.makeDirs({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) + store { ptr, i64, i64 } { ptr @.str.6654, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t3, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t8, ptr %a10 + call void @finch_str_copy(ptr %a9, ptr %a10) + %t11 = call i64 @finch_shell(ptr %a9) + call void @finch_str_drop(ptr %a9) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + ret void +} + +define internal void @finch.host.remove({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a4 + call void @finch_str_copy(ptr %a3, ptr %a4) + %t5 = call i32 @finch_delete_file(ptr %a3) + call void @finch_str_drop(ptr %a3) + %t6 = icmp ne i32 %t5, 0 + ret void +} + +define internal void @finch.host.removeTree({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) + store { ptr, i64, i64 } { ptr @.str.6655, i64 7, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t3, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t8, ptr %a10 + call void @finch_str_copy(ptr %a9, ptr %a10) + %t11 = call i64 @finch_shell(ptr %a9) + call void @finch_str_drop(ptr %a9) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + ret void +} + +define internal void @finch.host.move({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t3) + store { ptr, i64, i64 } { ptr @.str.6656, i64 3, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.6657, i64 1, i64 0 }, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t9, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a10 + %t15 = load { ptr, i64, i64 }, ptr %a2 + %t16 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t14, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t14, ptr %a20 + call void @finch_str_drop(ptr %a20) + store { ptr, i64, i64 } %t16, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t22, ptr %a24 + call void @finch_str_copy(ptr %a23, ptr %a24) + %t25 = call i64 @finch_shell(ptr %a23) + call void @finch_str_drop(ptr %a23) + store { ptr, i64, i64 } %t22, ptr %a26 + call void @finch_str_drop(ptr %a26) + ret void +} + +define internal { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_trim(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6660, i64 1, i64 0 }, ptr %a8 + call void @finch_str_split(ptr %a9, ptr %a6, ptr %a8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t5, ptr %a11 + call void @finch_str_drop(ptr %a11) + store { ptr, i64, i64 } %t10, ptr %a12 + %t13 = load { ptr, i64, i64 }, ptr %a12 + %t14 = extractvalue { ptr, i64, i64 } %t13, 1 + %t15 = icmp uge i64 0, %t14 + br i1 %t15, label %range9892, label %inrange9893 +range9892: + call void @finch_panic_index(ptr @.str.6661, i64 21, i64 0, i64 %t14) + unreachable +inrange9893: + %t16 = extractvalue { ptr, i64, i64 } %t13, 0 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + call void @finch_str_trim(ptr %a20, ptr %a19) + %t21 = load { ptr, i64, i64 }, ptr %a20 + call void @finch.drop.arr_str(ptr %a12) + ret { ptr, i64, i64 } %t21 +} + +define internal { ptr, i64, i64 } @finch.platform.hostTriple() { +entry: + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %t1 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t1, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6663, i64 14, i64 0 }, ptr %a4 + call void @finch_str_concat(ptr %a2, ptr %a3, ptr %a4) + store { ptr, i64, i64 } %t1, ptr %a5 + call void @finch_str_drop(ptr %a5) + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a8, i64 %t7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t6, ptr %a13 + call void @finch_str_drop(ptr %a13) + store { ptr, i64, i64 } %t9, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6664, i64 4, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = load { ptr, i64, i64 }, ptr %a21 + %t23 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t22) + store { ptr, i64, i64 } { ptr @.str.6665, i64 21, i64 0 }, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6666, i64 4, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = call { ptr, i64, i64 } @finch.host.nullDevice() + store { ptr, i64, i64 } %t33, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + %t41 = call i64 @finch.host.run({ ptr, i64, i64 } %t40) + store { ptr, i64, i64 } %t40, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } zeroinitializer, ptr %a45 + store { ptr, i64, i64 } zeroinitializer, ptr %a46 + %t47 = call i32 @finch_try_read_file(ptr %a45, ptr %a44, ptr %a46) + %t48 = icmp eq i32 %t47, 0 + %t49 = load { ptr, i64, i64 }, ptr %a46 + %t50 = load { ptr, i64, i64 }, ptr %a45 + br i1 %t48, label %or.failed9894, label %or.ok9895 +or.failed9894: + store { ptr, i64, i64 } %t49, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %or.bend9896 +or.bend9896: + br label %or.end9897 +or.ok9895: + br label %or.end9897 +or.end9897: + %t52 = phi { ptr, i64, i64 } [ { ptr @.str.6667, i64 0, i64 0 }, %or.bend9896 ], [ %t50, %or.ok9895 ] + store { ptr, i64, i64 } %t52, ptr %a53 + %t54 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.host.remove({ ptr, i64, i64 } %t54) + %t55 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_trim(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + %t59 = extractvalue { ptr, i64, i64 } %t58, 1 + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = icmp eq i64 %t59, 0 + br i1 %t61, label %then9898, label %endif9900 +then9898: + call void @finch_str_drop(ptr %a53) + call void @finch_str_drop(ptr %a21) + ret { ptr, i64, i64 } { ptr @.str.6669, i64 24, i64 0 } +endif9900: + %t62 = load { ptr, i64, i64 }, ptr %a53 + %t63 = call { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %t62) + call void @finch_str_drop(ptr %a53) + call void @finch_str_drop(ptr %a21) + ret { ptr, i64, i64 } %t63 +} + +define internal %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca %S.platform.Target, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca i1, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca i1, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca i1, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = call { ptr, i64, i64 } @finch.platform.hostTriple() + store { ptr, i64, i64 } %t2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp eq i64 %t10, 0 + br i1 %t11, label %then9901, label %else9902 +then9901: + %t12 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + %t16 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t15, ptr %a8 + store { ptr, i64, i64 } %t16, ptr %a17 + call void @finch_str_drop(ptr %a17) + br label %endif9903 +else9902: + %t18 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6670, i64 7, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br i1 %t22, label %then9904, label %else9905 +then9904: + %t23 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6671, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch_str_drop(ptr %a24) + br label %endif9906 +else9905: + %t25 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.6672, i64 5, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br i1 %t29, label %then9907, label %else9908 +then9907: + %t30 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6673, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t30, ptr %a31 + call void @finch_str_drop(ptr %a31) + br label %endif9909 +else9908: + %t32 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.6674, i64 5, i64 0 }, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br label %logic.from9910 +logic.from9910: + br i1 %t36, label %logic.end9912, label %logic.rhs9911 +logic.rhs9911: + %t37 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t37, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.6675, i64 7, i64 0 }, ptr %a39 + %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) + %t41 = icmp ne i32 %t40, 0 + br label %logic.rend9913 +logic.rend9913: + br label %logic.end9912 +logic.end9912: + %t42 = phi i1 [ true, %logic.from9910 ], [ %t41, %logic.rend9913 ] + br label %logic.from9914 +logic.from9914: + br i1 %t42, label %logic.end9916, label %logic.rhs9915 +logic.rhs9915: + %t43 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.6676, i64 11, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp ne i32 %t46, 0 + br label %logic.rend9917 +logic.rend9917: + br label %logic.end9916 +logic.end9916: + %t48 = phi i1 [ true, %logic.from9914 ], [ %t47, %logic.rend9917 ] + br i1 %t48, label %then9918, label %else9919 +then9918: + %t49 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6677, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t49, ptr %a50 + call void @finch_str_drop(ptr %a50) + br label %endif9920 +else9919: + %t51 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t51, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6678, i64 5, i64 0 }, ptr %a53 + %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) + %t55 = icmp ne i32 %t54, 0 + br i1 %t55, label %then9921, label %endif9923 +then9921: + %t56 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.6680, i64 7, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_starts(ptr %a57, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.from9924 +logic.from9924: + br i1 %t61, label %logic.end9926, label %logic.rhs9925 +logic.rhs9925: + %t62 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6682, i64 5, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_starts(ptr %a63, ptr %a65) + %t67 = icmp ne i32 %t66, 0 + br label %logic.rend9927 +logic.rend9927: + br label %logic.end9926 +logic.end9926: + %t68 = phi i1 [ true, %logic.from9924 ], [ %t67, %logic.rend9927 ] + br i1 %t68, label %then9928, label %else9929 +then9928: + %t69 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6683, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_drop(ptr %a70) + br label %endif9930 +else9929: + %t71 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6684, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_drop(ptr %a72) + br label %endif9930 +endif9930: + br label %endif9923 +endif9923: + br label %endif9920 +endif9920: + br label %endif9909 +endif9909: + br label %endif9906 +endif9906: + br label %endif9903 +endif9903: + %t73 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t73, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6685, i64 22, i64 0 }, ptr %a75 + %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + br i1 %t77, label %then9931, label %endif9933 +then9931: + %t78 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6686, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif9933 +endif9933: + %t80 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t80, ptr %a81 + call void @finch_str_copy(ptr %a82, ptr %a81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = insertvalue %S.platform.Target zeroinitializer, { ptr, i64, i64 } %t83, 0 + store %S.platform.Target %t84, ptr %a85 + %t86 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.6688, i64 7, i64 0 }, ptr %a89 + %t90 = call i64 @finch_str_find(ptr %a87, ptr %a89) + %t91 = icmp sge i64 %t90, 0 + br label %logic.from9934 +logic.from9934: + br i1 %t91, label %logic.end9936, label %logic.rhs9935 +logic.rhs9935: + %t92 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t92, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.6690, i64 5, i64 0 }, ptr %a95 + %t96 = call i64 @finch_str_find(ptr %a93, ptr %a95) + %t97 = icmp sge i64 %t96, 0 + br label %logic.rend9937 +logic.rend9937: + br label %logic.end9936 +logic.end9936: + %t98 = phi i1 [ true, %logic.from9934 ], [ %t97, %logic.rend9937 ] + br label %logic.from9938 +logic.from9938: + br i1 %t98, label %logic.end9940, label %logic.rhs9939 +logic.rhs9939: + %t99 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t99, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6692, i64 4, i64 0 }, ptr %a102 + %t103 = call i64 @finch_str_find(ptr %a100, ptr %a102) + %t104 = icmp sge i64 %t103, 0 + br label %logic.rend9941 +logic.rend9941: + br label %logic.end9940 +logic.end9940: + %t105 = phi i1 [ true, %logic.from9938 ], [ %t104, %logic.rend9941 ] + br label %logic.from9942 +logic.from9942: + br i1 %t105, label %logic.end9944, label %logic.rhs9943 +logic.rhs9943: + %t106 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.6694, i64 5, i64 0 }, ptr %a109 + %t110 = call i64 @finch_str_find(ptr %a107, ptr %a109) + %t111 = icmp sge i64 %t110, 0 + br label %logic.rend9945 +logic.rend9945: + br label %logic.end9944 +logic.end9944: + %t112 = phi i1 [ true, %logic.from9942 ], [ %t111, %logic.rend9945 ] + %t113 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + store i1 %t112, ptr %t113 + %t114 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.6696, i64 4, i64 0 }, ptr %a117 + %t118 = call i64 @finch_str_find(ptr %a115, ptr %a117) + %t119 = icmp sge i64 %t118, 0 + %t120 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 2 + store i1 %t119, ptr %t120 + %t121 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.6698, i64 5, i64 0 }, ptr %a124 + %t125 = call i64 @finch_str_find(ptr %a122, ptr %a124) + %t126 = icmp sge i64 %t125, 0 + br label %logic.from9946 +logic.from9946: + br i1 %t126, label %logic.end9948, label %logic.rhs9947 +logic.rhs9947: + %t127 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t127, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.6700, i64 6, i64 0 }, ptr %a130 + %t131 = call i64 @finch_str_find(ptr %a128, ptr %a130) + %t132 = icmp sge i64 %t131, 0 + br label %logic.rend9949 +logic.rend9949: + br label %logic.end9948 +logic.end9948: + %t133 = phi i1 [ true, %logic.from9946 ], [ %t132, %logic.rend9949 ] + br label %logic.from9950 +logic.from9950: + br i1 %t133, label %logic.end9952, label %logic.rhs9951 +logic.rhs9951: + %t134 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t134, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.6702, i64 5, i64 0 }, ptr %a137 + %t138 = call i64 @finch_str_find(ptr %a135, ptr %a137) + %t139 = icmp sge i64 %t138, 0 + br label %logic.rend9953 +logic.rend9953: + br label %logic.end9952 +logic.end9952: + %t140 = phi i1 [ true, %logic.from9950 ], [ %t139, %logic.rend9953 ] + %t141 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + store i1 %t140, ptr %t141 + %t142 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.6704, i64 7, i64 0 }, ptr %a145 + %t146 = call i32 @finch_str_starts(ptr %a143, ptr %a145) + %t147 = icmp ne i32 %t146, 0 + br label %logic.from9954 +logic.from9954: + br i1 %t147, label %logic.end9956, label %logic.rhs9955 +logic.rhs9955: + %t148 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.6706, i64 5, i64 0 }, ptr %a151 + %t152 = call i32 @finch_str_starts(ptr %a149, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + br label %logic.rend9957 +logic.rend9957: + br label %logic.end9956 +logic.end9956: + %t154 = phi i1 [ true, %logic.from9954 ], [ %t153, %logic.rend9957 ] + %t155 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + store i1 %t154, ptr %t155 + %t156 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t156, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.6708, i64 7, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_starts(ptr %a157, ptr %a159) + %t161 = icmp ne i32 %t160, 0 + br label %logic.from9958 +logic.from9958: + br i1 %t161, label %logic.end9960, label %logic.rhs9959 +logic.rhs9959: + %t162 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t162, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.6710, i64 5, i64 0 }, ptr %a165 + %t166 = call i32 @finch_str_starts(ptr %a163, ptr %a165) + %t167 = icmp ne i32 %t166, 0 + br label %logic.rend9961 +logic.rend9961: + br label %logic.end9960 +logic.end9960: + %t168 = phi i1 [ true, %logic.from9958 ], [ %t167, %logic.rend9961 ] + store i1 %t168, ptr %a169 + %t170 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.6712, i64 5, i64 0 }, ptr %a173 + %t174 = call i64 @finch_str_find(ptr %a171, ptr %a173) + %t175 = icmp sge i64 %t174, 0 + br label %logic.from9962 +logic.from9962: + br i1 %t175, label %logic.end9964, label %logic.rhs9963 +logic.rhs9963: + %t176 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.6714, i64 6, i64 0 }, ptr %a179 + %t180 = call i64 @finch_str_find(ptr %a177, ptr %a179) + %t181 = icmp sge i64 %t180, 0 + br label %logic.rend9965 +logic.rend9965: + br label %logic.end9964 +logic.end9964: + %t182 = phi i1 [ true, %logic.from9962 ], [ %t181, %logic.rend9965 ] + store i1 %t182, ptr %a183 + %t184 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } { ptr @.str.6716, i64 7, i64 0 }, ptr %a187 + %t188 = call i64 @finch_str_find(ptr %a185, ptr %a187) + %t189 = icmp sge i64 %t188, 0 + br label %logic.from9966 +logic.from9966: + br i1 %t189, label %logic.end9968, label %logic.rhs9967 +logic.rhs9967: + %t190 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t190, ptr %a191 + store { ptr, i64, i64 } { ptr @.str.6718, i64 5, i64 0 }, ptr %a193 + %t194 = call i64 @finch_str_find(ptr %a191, ptr %a193) + %t195 = icmp sge i64 %t194, 0 + br label %logic.rend9969 +logic.rend9969: + br label %logic.end9968 +logic.end9968: + %t196 = phi i1 [ true, %logic.from9966 ], [ %t195, %logic.rend9969 ] + br label %logic.from9970 +logic.from9970: + br i1 %t196, label %logic.end9972, label %logic.rhs9971 +logic.rhs9971: + %t197 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t197, ptr %a198 + store { ptr, i64, i64 } { ptr @.str.6720, i64 4, i64 0 }, ptr %a200 + %t201 = call i64 @finch_str_find(ptr %a198, ptr %a200) + %t202 = icmp sge i64 %t201, 0 + br label %logic.rend9973 +logic.rend9973: + br label %logic.end9972 +logic.end9972: + %t203 = phi i1 [ true, %logic.from9970 ], [ %t202, %logic.rend9973 ] + store i1 %t203, ptr %a204 + %t205 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t206 = load i1, ptr %t205 + %t207 = load i1, ptr %a204 + %t208 = icmp ne i1 %t206, %t207 + br label %logic.from9974 +logic.from9974: + br i1 %t208, label %logic.end9976, label %logic.rhs9975 +logic.rhs9975: + %t209 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t210 = load i1, ptr %t209 + %t211 = load i1, ptr %a183 + %t212 = icmp ne i1 %t210, %t211 + br label %logic.rend9977 +logic.rend9977: + br label %logic.end9976 +logic.end9976: + %t213 = phi i1 [ true, %logic.from9974 ], [ %t212, %logic.rend9977 ] + br label %logic.from9978 +logic.from9978: + br i1 %t213, label %logic.end9980, label %logic.rhs9979 +logic.rhs9979: + %t214 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t215 = load i1, ptr %t214 + %t216 = load i1, ptr %a169 + %t217 = icmp ne i1 %t215, %t216 + br label %logic.rend9981 +logic.rend9981: + br label %logic.end9980 +logic.end9980: + %t218 = phi i1 [ true, %logic.from9978 ], [ %t217, %logic.rend9981 ] + %t219 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + store i1 %t218, ptr %t219 + %t220 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t221 = load { ptr, i64, i64 }, ptr %t220 + store { ptr, i64, i64 } { ptr @.str.6721, i64 0, i64 0 }, ptr %t220 + store { ptr, i64, i64 } %t221, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t224 = load i1, ptr %t223 + br i1 %t224, label %then9982, label %endif9984 +then9982: + %t225 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t226 = load { ptr, i64, i64 }, ptr %t225 + store { ptr, i64, i64 } { ptr @.str.6722, i64 4, i64 0 }, ptr %t225 + store { ptr, i64, i64 } %t226, ptr %a227 + call void @finch_str_drop(ptr %a227) + br label %endif9984 +endif9984: + %t228 = extractvalue { ptr, i64, i64 } { ptr @.str.6723, i64 8, i64 0 }, 0 + %t229 = icmp eq ptr %t228, null + %t230 = select i1 %t229, ptr @.str.6724, ptr %t228 + %t231 = call ptr @getenv(ptr %t230) + store { ptr, i64, i64 } zeroinitializer, ptr %a232 + call void @finch_str_from_c(ptr %a232, ptr %t231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t233, ptr %a234 + call void @finch_str_copy(ptr %a235, ptr %a234) + %t236 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t236, ptr %a237 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %a237, i32 0, i32 1 + %t239 = load i64, ptr %t238 + %t240 = icmp sgt i64 %t239, 0 + br i1 %t240, label %then9985, label %else9986 +then9985: + %t241 = load { ptr, i64, i64 }, ptr %a237 + %t242 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + store { ptr, i64, i64 } %t241, ptr %a243 + call void @finch_str_copy(ptr %a244, ptr %a243) + %t245 = load { ptr, i64, i64 }, ptr %a244 + %t246 = load { ptr, i64, i64 }, ptr %t242 + store { ptr, i64, i64 } %t245, ptr %t242 + store { ptr, i64, i64 } %t246, ptr %a247 + call void @finch_str_drop(ptr %a247) + br label %endif9987 +else9986: + %t248 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t249 = load i1, ptr %t248 + br label %logic.from9988 +logic.from9988: + br i1 %t249, label %logic.rhs9989, label %logic.end9990 +logic.rhs9989: + %t250 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t251 = load i1, ptr %t250 + br label %logic.rend9991 +logic.rend9991: + br label %logic.end9990 +logic.end9990: + %t252 = phi i1 [ false, %logic.from9988 ], [ %t251, %logic.rend9991 ] + br i1 %t252, label %then9992, label %else9993 +then9992: + %t253 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t254 = load { ptr, i64, i64 }, ptr %t253 + store { ptr, i64, i64 } { ptr @.str.6725, i64 22, i64 0 }, ptr %t253 + store { ptr, i64, i64 } %t254, ptr %a255 + call void @finch_str_drop(ptr %a255) + br label %endif9994 +else9993: + %t256 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t257 = load i1, ptr %t256 + br label %logic.from9995 +logic.from9995: + br i1 %t257, label %logic.rhs9996, label %logic.end9997 +logic.rhs9996: + %t258 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t259 = load i1, ptr %t258 + br label %logic.rend9998 +logic.rend9998: + br label %logic.end9997 +logic.end9997: + %t260 = phi i1 [ false, %logic.from9995 ], [ %t259, %logic.rend9998 ] + br label %logic.from9999 +logic.from9999: + br i1 %t260, label %logic.rhs10000, label %logic.end10001 +logic.rhs10000: + %t261 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t262 = load i1, ptr %t261 + %t263 = xor i1 %t262, true + br label %logic.rend10002 +logic.rend10002: + br label %logic.end10001 +logic.end10001: + %t264 = phi i1 [ false, %logic.from9999 ], [ %t263, %logic.rend10002 ] + br i1 %t264, label %then10003, label %else10004 +then10003: + %t265 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t266 = load { ptr, i64, i64 }, ptr %t265 + store { ptr, i64, i64 } { ptr @.str.6726, i64 21, i64 0 }, ptr %t265 + store { ptr, i64, i64 } %t266, ptr %a267 + call void @finch_str_drop(ptr %a267) + br label %endif10005 +else10004: + %t268 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t269 = load i1, ptr %t268 + br i1 %t269, label %then10006, label %else10007 +then10006: + %t270 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6727, i64 15, i64 0 }, ptr %a272 + store { ptr, i64, i64 } %t270, ptr %a273 + call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a271 + %t275 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t276 = load { ptr, i64, i64 }, ptr %t275 + store { ptr, i64, i64 } %t274, ptr %t275 + store { ptr, i64, i64 } %t276, ptr %a277 + call void @finch_str_drop(ptr %a277) + br label %endif10008 +else10007: + %t278 = call { ptr, i64, i64 } @finch.host.pathSeparator() + store { ptr, i64, i64 } %t278, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6728, i64 1, i64 0 }, ptr %a280 + %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) + %t282 = icmp ne i32 %t281, 0 + store { ptr, i64, i64 } %t278, ptr %a283 + call void @finch_str_drop(ptr %a283) + br i1 %t282, label %then10009, label %else10010 +then10009: + %t284 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } { ptr @.str.6729, i64 5, i64 0 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + br label %endif10011 +else10010: + %t287 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t288 = load { ptr, i64, i64 }, ptr %t287 + store { ptr, i64, i64 } { ptr @.str.6730, i64 2, i64 0 }, ptr %t287 + store { ptr, i64, i64 } %t288, ptr %a289 + call void @finch_str_drop(ptr %a289) + br label %endif10011 +endif10011: + br label %endif10008 +endif10008: + br label %endif10005 +endif10005: + br label %endif9994 +endif9994: + br label %endif9987 +endif9987: + %t290 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t291 = load i1, ptr %t290 + br label %logic.from10012 +logic.from10012: + br i1 %t291, label %logic.rhs10013, label %logic.end10014 +logic.rhs10013: + %t292 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t293 = load i1, ptr %t292 + br label %logic.rend10015 +logic.rend10015: + br label %logic.end10014 +logic.end10014: + %t294 = phi i1 [ false, %logic.from10012 ], [ %t293, %logic.rend10015 ] + br i1 %t294, label %then10016, label %else10017 +then10016: + %t295 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } { ptr @.str.6731, i64 5, i64 0 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_drop(ptr %a297) + br label %endif10018 +else10017: + %t298 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t299 = load i1, ptr %t298 + br label %logic.from10019 +logic.from10019: + br i1 %t299, label %logic.rhs10020, label %logic.end10021 +logic.rhs10020: + %t300 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t301 = load i1, ptr %t300 + br label %logic.rend10022 +logic.rend10022: + br label %logic.end10021 +logic.end10021: + %t302 = phi i1 [ false, %logic.from10019 ], [ %t301, %logic.rend10022 ] + br label %logic.from10023 +logic.from10023: + br i1 %t302, label %logic.rhs10024, label %logic.end10025 +logic.rhs10024: + %t303 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t304 = load i1, ptr %t303 + %t305 = xor i1 %t304, true + br label %logic.rend10026 +logic.rend10026: + br label %logic.end10025 +logic.end10025: + %t306 = phi i1 [ false, %logic.from10023 ], [ %t305, %logic.rend10026 ] + br i1 %t306, label %then10027, label %endif10029 +then10027: + %t307 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t308 = load { ptr, i64, i64 }, ptr %t307 + store { ptr, i64, i64 } { ptr @.str.6732, i64 13, i64 0 }, ptr %t307 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10029 +endif10029: + br label %endif10018 +endif10018: + %t310 = load %S.platform.Target, ptr %a85 + call void @finch_str_drop(ptr %a237) + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a3) + ret %S.platform.Target %t310 +} + +define internal i1 @finch.platform.charIsSigned(%S.platform.Target %p0) { +entry: + %a1 = alloca %S.platform.Target, align 16 + store %S.platform.Target %p0, ptr %a1 + %t2 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 4 + %t3 = load i1, ptr %t2 + %t4 = xor i1 %t3, true + br label %logic.from10030 +logic.from10030: + br i1 %t4, label %logic.end10032, label %logic.rhs10031 +logic.rhs10031: + %t5 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 3 + %t6 = load i1, ptr %t5 + br label %logic.rend10033 +logic.rend10033: + br label %logic.end10032 +logic.end10032: + %t7 = phi i1 [ true, %logic.from10030 ], [ %t6, %logic.rend10033 ] + br label %logic.from10034 +logic.from10034: + br i1 %t7, label %logic.end10036, label %logic.rhs10035 +logic.rhs10035: + %t8 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 1 + %t9 = load i1, ptr %t8 + br label %logic.rend10037 +logic.rend10037: + br label %logic.end10036 +logic.end10036: + %t10 = phi i1 [ true, %logic.from10034 ], [ %t9, %logic.rend10037 ] + ret i1 %t10 +} + +define internal { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i32, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca i8, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i32 2166136261, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond10038 +each.cond10038: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body10039, label %each.end10041 +each.body10039: + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds i8, ptr %t8, i64 %t6 + %t10 = load i8, ptr %t9 + store i8 %t10, ptr %a11 + %t12 = load i32, ptr %a2 + %t13 = load i8, ptr %a11 + %t14 = zext i8 %t13 to i32 + %t15 = xor i32 %t12, %t14 + %t16 = mul i32 %t15, 16777619 + store i32 %t16, ptr %a2 + br label %each.step10040 +each.step10040: + %t17 = load i64, ptr %a3 + %t18 = add i64 %t17, 1 + store i64 %t18, ptr %a3 + br label %each.cond10038 +each.end10041: + store { ptr, i64, i64 } { ptr @.str.6733, i64 16, i64 0 }, ptr %a19 + store { ptr, i64, i64 } zeroinitializer, ptr %a20 + store i64 0, ptr %a21 + br label %for.cond10042 +for.cond10042: + %t22 = load i64, ptr %a21 + %t23 = icmp slt i64 %t22, 8 + br i1 %t23, label %for.body10043, label %for.end10045 +for.body10043: + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t25 = load i32, ptr %a2 + %t26 = load i64, ptr %a21 + %t27 = mul i64 4, %t26 + %t28 = sub i64 28, %t27 + %t29 = trunc i64 %t28 to i32 + %t30 = lshr i32 %t25, %t29 + %t31 = and i32 %t30, 15 + %t32 = zext i32 %t31 to i64 + %t33 = load { ptr, i64, i64 }, ptr %a19 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range10046, label %inrange10047 +range10046: + call void @finch_panic_index(ptr @.str.6734, i64 16, i64 %t32, i64 %t34) + unreachable +inrange10047: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 + %t38 = load i8, ptr %t37 + call void @finch_str_from_char(ptr %a39, i8 signext %t38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + %t41 = load i64, ptr %t24 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a20 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } %t40, ptr %t44 + store i64 %t42, ptr %t24 + br label %for.step10044 +for.step10044: + %t45 = load i64, ptr %a21 + %t46 = add i64 %t45, 1 + store i64 %t46, ptr %a21 + br label %for.cond10042 +for.end10045: + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6735, i64 0, i64 0 }, ptr %a48 + call void @finch_str_join(ptr %a49, ptr %a20, ptr %a48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + call void @finch.drop.arr_str(ptr %a20) + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t50 +} + +define internal { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) + ret { ptr, i64, i64 } %t3 +} + +define internal { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %p0, %S.platform.Target %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.platform.Target, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca i64, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.platform.Target %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6737, i64 10, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_ends(ptr %a4, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then10048, label %endif10050 +then10048: + %t9 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t9, ptr %a10 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = sub i64 %t13, 10 + call void @finch_str_sub(ptr %a11, ptr %a10, i64 0, i64 %t14, ptr @.str.6739, i64 28) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_drop(ptr %a17) + store { ptr, i64, i64 } { ptr @.str.6738, i64 11, i64 0 }, ptr %a19 + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t16, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + ret { ptr, i64, i64 } %t22 +endif10050: + %t23 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 + %t24 = load i1, ptr %t23 + %t25 = xor i1 %t24, true + br i1 %t25, label %then10051, label %endif10053 +then10051: + %t26 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.6740, i64 17, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a33, i64 %t32) + %t34 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t31, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t31, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.6741, i64 4, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t45, ptr %a46 + %t47 = load { ptr, i64, i64 }, ptr %a1 + %t48 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t47) + store { ptr, i64, i64 } { ptr @.str.6742, i64 18, i64 0 }, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t53, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.6743, i64 3, i64 0 }, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t53, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + %t59 = load { ptr, i64, i64 }, ptr %a46 + %t60 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t59) + store { ptr, i64, i64 } %t58, ptr %a62 + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t58, ptr %a64 + call void @finch_str_drop(ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.6744, i64 4, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = call { ptr, i64, i64 } @finch.host.nullDevice() + store { ptr, i64, i64 } %t71, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + store { ptr, i64, i64 } %t72, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a73 + %t79 = call i64 @finch.host.run({ ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a80 + call void @finch_str_drop(ptr %a80) + store i64 %t79, ptr %a81 + %t82 = load i64, ptr %a81 + %t83 = icmp eq i64 %t82, 0 + br label %logic.from10054 +logic.from10054: + br i1 %t83, label %logic.rhs10055, label %logic.end10056 +logic.rhs10055: + %t84 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t84, ptr %a85 + %t86 = call i32 @finch_file_exists(ptr %a85) + %t87 = icmp ne i32 %t86, 0 + br label %logic.rend10057 +logic.rend10057: + br label %logic.end10056 +logic.end10056: + %t88 = phi i1 [ false, %logic.from10054 ], [ %t87, %logic.rend10057 ] + br i1 %t88, label %then10058, label %endif10060 +then10058: + %t89 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t89, ptr %a90 + store { ptr, i64, i64 } zeroinitializer, ptr %a91 + store { ptr, i64, i64 } zeroinitializer, ptr %a92 + %t93 = call i32 @finch_try_read_file(ptr %a91, ptr %a90, ptr %a92) + %t94 = icmp eq i32 %t93, 0 + %t95 = load { ptr, i64, i64 }, ptr %a92 + %t96 = load { ptr, i64, i64 }, ptr %a91 + br i1 %t94, label %or.failed10061, label %or.ok10062 +or.failed10061: + store { ptr, i64, i64 } %t95, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %or.bend10063 +or.bend10063: + br label %or.end10064 +or.ok10062: + br label %or.end10064 +or.end10064: + %t98 = phi { ptr, i64, i64 } [ { ptr @.str.6745, i64 0, i64 0 }, %or.bend10063 ], [ %t96, %or.ok10062 ] + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_trim(ptr %a100, ptr %a99) + %t101 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + store { ptr, i64, i64 } %t101, ptr %a103 + %t104 = load { ptr, i64, i64 }, ptr %a46 + call void @finch.host.remove({ ptr, i64, i64 } %t104) + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %a103, i32 0, i32 1 + %t106 = load i64, ptr %t105 + %t107 = icmp sgt i64 %t106, 0 + br i1 %t107, label %then10065, label %endif10067 +then10065: + %t108 = load { ptr, i64, i64 }, ptr %a103 + call void @finch_str_drop(ptr %a46) + ret { ptr, i64, i64 } %t108 +endif10067: + call void @finch_str_drop(ptr %a103) + br label %endif10060 +endif10060: + call void @finch_str_drop(ptr %a46) + br label %endif10053 +endif10053: + %t109 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6747, i64 2, i64 0 }, ptr %a111 + store { ptr, i64, i64 } %t109, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a110 + %t114 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t113) + store { ptr, i64, i64 } %t113, ptr %a115 + call void @finch_str_drop(ptr %a115) + ret { ptr, i64, i64 } %t114 +} + +define internal { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca i64, align 16 + %a35 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6749, i64 1, i64 0 }, ptr %a10 + %t11 = call i64 @finch_str_find(ptr %a8, ptr %a10) + store i64 %t11, ptr %a12 + br label %while.cond10068 +while.cond10068: + %t13 = load i64, ptr %a12 + %t14 = icmp sge i64 %t13, 0 + br i1 %t14, label %while.body10069, label %while.end10070 +while.body10069: + %t15 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t15, ptr %a16 + %t18 = load i64, ptr %a12 + %t19 = add i64 %t18, 1 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t21 = load i64, ptr %t20 + call void @finch_str_sub(ptr %a17, ptr %a16, i64 %t19, i64 %t21, ptr @.str.6750, i64 49) + %t22 = load { ptr, i64, i64 }, ptr %a17 + %t23 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t22, ptr %a6 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.6752, i64 1, i64 0 }, ptr %a28 + %t29 = call i64 @finch_str_find(ptr %a26, ptr %a28) + store i64 %t29, ptr %a12 + br label %while.cond10068 +while.end10070: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t31 = load i64, ptr %t30 + store i64 %t31, ptr %a32 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t34 = load i64, ptr %t33 + store i64 0, ptr %a35 + br label %for.cond10071 +for.cond10071: + %t36 = load i64, ptr %a35 + %t37 = icmp slt i64 %t36, %t34 + br i1 %t37, label %for.body10072, label %for.end10074 +for.body10072: + %t38 = load i64, ptr %a35 + %t39 = load { ptr, i64, i64 }, ptr %a6 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range10075, label %inrange10076 +range10075: + call void @finch_panic_index(ptr @.str.6753, i64 54, i64 %t38, i64 %t40) + unreachable +inrange10076: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 + %t44 = load i8, ptr %t43 + %t45 = icmp eq i8 %t44, 46 + br i1 %t45, label %then10077, label %endif10079 +then10077: + %t46 = load i64, ptr %a35 + store i64 %t46, ptr %a32 + br label %endif10079 +endif10079: + br label %for.step10073 +for.step10073: + %t47 = load i64, ptr %a35 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a35 + br label %for.cond10071 +for.end10074: + %t49 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t49, ptr %a50 + %t52 = load i64, ptr %a32 + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6754, i64 58) + %t53 = load { ptr, i64, i64 }, ptr %a51 + %t54 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t53, ptr %a6 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_drop(ptr %a55) + br label %while.cond10080 +while.cond10080: + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t57 = load i64, ptr %t56 + %t58 = icmp sgt i64 %t57, 0 + br label %logic.from10083 +logic.from10083: + br i1 %t58, label %logic.rhs10084, label %logic.end10085 +logic.rhs10084: + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t60 = load i64, ptr %t59 + %t61 = sub i64 %t60, 1 + %t62 = load { ptr, i64, i64 }, ptr %a6 + %t63 = extractvalue { ptr, i64, i64 } %t62, 1 + %t64 = icmp uge i64 %t61, %t63 + br i1 %t64, label %range10086, label %inrange10087 +range10086: + call void @finch_panic_index(ptr @.str.6755, i64 59, i64 %t61, i64 %t63) + unreachable +inrange10087: + %t65 = extractvalue { ptr, i64, i64 } %t62, 0 + %t66 = getelementptr inbounds i8, ptr %t65, i64 %t61 + %t67 = load i8, ptr %t66 + %t68 = icmp uge i8 %t67, 48 + br label %logic.rend10088 +logic.rend10088: + br label %logic.end10085 +logic.end10085: + %t69 = phi i1 [ false, %logic.from10083 ], [ %t68, %logic.rend10088 ] + br label %logic.from10089 +logic.from10089: + br i1 %t69, label %logic.rhs10090, label %logic.end10091 +logic.rhs10090: + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t71 = load i64, ptr %t70 + %t72 = sub i64 %t71, 1 + %t73 = load { ptr, i64, i64 }, ptr %a6 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 %t72, %t74 + br i1 %t75, label %range10092, label %inrange10093 +range10092: + call void @finch_panic_index(ptr @.str.6756, i64 59, i64 %t72, i64 %t74) + unreachable +inrange10093: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds i8, ptr %t76, i64 %t72 + %t78 = load i8, ptr %t77 + %t79 = icmp ule i8 %t78, 57 + br label %logic.rend10094 +logic.rend10094: + br label %logic.end10091 +logic.end10091: + %t80 = phi i1 [ false, %logic.from10089 ], [ %t79, %logic.rend10094 ] + br i1 %t80, label %while.body10081, label %while.end10082 +while.body10081: + %t81 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t81, ptr %a82 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t85 = load i64, ptr %t84 + %t86 = sub i64 %t85, 1 + call void @finch_str_sub(ptr %a83, ptr %a82, i64 0, i64 %t86, ptr @.str.6757, i64 60) + %t87 = load { ptr, i64, i64 }, ptr %a83 + %t88 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t87, ptr %a6 + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_drop(ptr %a89) + br label %while.cond10080 +while.end10082: + %t90 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t90, ptr %a91 + call void @finch_str_lower(ptr %a92, ptr %a91) + %t93 = load { ptr, i64, i64 }, ptr %a92 + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t93 +} + +define internal void @finch.linker.Names.add(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = icmp sgt i64 %t3, 0 + br label %logic.from10095 +logic.from10095: + br i1 %t4, label %logic.rhs10096, label %logic.end10097 +logic.rhs10096: + %t5 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a8 + %t9 = load i64, ptr %t6 + %t10 = load ptr, ptr %t5 + store i64 0, ptr %a11 + br label %find.cond10098 +find.cond10098: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t9 + br i1 %t13, label %find.body10099, label %find.end10102 +find.body10099: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } %t7, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %find.hit10100, label %find.next10101 +find.hit10100: + store i64 %t12, ptr %a8 + br label %find.end10102 +find.next10101: + %t20 = add i64 %t12, 1 + store i64 %t20, ptr %a11 + br label %find.cond10098 +find.end10102: + %t21 = load i64, ptr %a8 + %t22 = icmp sge i64 %t21, 0 + %t23 = xor i1 %t22, true + br label %logic.rend10103 +logic.rend10103: + br label %logic.end10097 +logic.end10097: + %t24 = phi i1 [ false, %logic.from10095 ], [ %t23, %logic.rend10103 ] + br i1 %t24, label %then10104, label %endif10106 +then10104: + %t25 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 + %t27 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_copy(ptr %a29, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + %t31 = load i64, ptr %t26 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %t25, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %t25 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } %t30, ptr %t34 + store i64 %t32, ptr %t26 + br label %endif10106 +endif10106: + ret void +} + +define internal { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = call i64 @finch_str_find(ptr %a5, ptr %a8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br i1 %t12, label %then10107, label %endif10109 +then10107: + ret { ptr, i64, i64 } { ptr @.str.6760, i64 0, i64 0 } +endif10109: + %t13 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t13, ptr %a14 + %t16 = load i64, ptr %a10 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = add i64 %t16, %t18 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t21 = load i64, ptr %t20 + call void @finch_str_sub(ptr %a15, ptr %a14, i64 %t19, i64 %t21, ptr @.str.6761, i64 81) + %t22 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t22, ptr %a23 + store i64 0, ptr %a24 + br label %while.cond10110 +while.cond10110: + %t25 = load i64, ptr %a24 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = icmp slt i64 %t25, %t27 + br label %logic.from10113 +logic.from10113: + br i1 %t28, label %logic.rhs10114, label %logic.end10115 +logic.rhs10114: + %t29 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t29, ptr %a30 + %t32 = load i64, ptr %a24 + %t33 = load { ptr, i64, i64 }, ptr %a23 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range10116, label %inrange10117 +range10116: + call void @finch_panic_index(ptr @.str.6763, i64 83, i64 %t32, i64 %t34) + unreachable +inrange10117: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 + %t38 = load i8, ptr %t37 + call void @finch_str_from_char(ptr %a39, i8 signext %t38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t40, ptr %a41 + %t42 = call i64 @finch_str_find(ptr %a30, ptr %a41) + %t43 = icmp sge i64 %t42, 0 + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = xor i1 %t43, true + br label %logic.rend10118 +logic.rend10118: + br label %logic.end10115 +logic.end10115: + %t46 = phi i1 [ false, %logic.from10113 ], [ %t45, %logic.rend10118 ] + br i1 %t46, label %while.body10111, label %while.end10112 +while.body10111: + %t47 = load i64, ptr %a24 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a24 + br label %while.cond10110 +while.end10112: + %t49 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t49, ptr %a50 + %t52 = load i64, ptr %a24 + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6764, i64 86) + %t53 = load { ptr, i64, i64 }, ptr %a51 + call void @finch_str_drop(ptr %a23) + ret { ptr, i64, i64 } %t53 +} + +define internal void @finch.drop.S_linker_Names(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.linker.Names, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + ret void +} + +define internal void @finch.drop.arr_S_linker_Names(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10222 +n.cond10222: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10223, label %n.end10224 +n.body10223: + %t7 = getelementptr inbounds %S.linker.Names, ptr %t1, i64 %t5 + call void @finch.drop.S_linker_Names(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10222 +n.end10224: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal i64 @finch.linker.linkFailed({ ptr, i64, i64 } %p0, %S.cimport.CImports %p1, %S.platform.Target %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.cimport.CImports, align 16 + %a3 = alloca %S.platform.Target, align 16 + %a4 = alloca %S.linker.Names, align 16 + %a5 = alloca %S.linker.Names, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca i64, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca i64, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca i64, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca i64, align 16 + %a238 = alloca i64, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca i64, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca i64, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca i64, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.cimport.CImports %p1, ptr %a2 + store %S.platform.Target %p2, ptr %a3 + store %S.linker.Names zeroinitializer, ptr %a4 + store %S.linker.Names zeroinitializer, ptr %a5 + %t6 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.6766, i64 1, i64 0 }, ptr %a9 + call void @finch_str_split(ptr %a10, ptr %a7, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t11, ptr %a12 + store i64 0, ptr %a13 + br label %each.cond10119 +each.cond10119: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = load i64, ptr %a13 + %t17 = icmp slt i64 %t16, %t15 + br i1 %t17, label %each.body10120, label %each.end10122 +each.body10120: + %t18 = load ptr, ptr %a12 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_trim(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.6769, i64 24, i64 0 }, ptr %a30 + %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) + %t32 = icmp sge i64 %t31, 0 + br i1 %t32, label %then10123, label %else10124 +then10123: + %t33 = load { ptr, i64, i64 }, ptr %a26 + %t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6770, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6771, i64 1, i64 0 }) + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t34) + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_str_drop(ptr %a35) + br label %endif10125 +else10124: + %t36 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.6773, i64 18, i64 0 }, ptr %a39 + %t40 = call i64 @finch_str_find(ptr %a37, ptr %a39) + %t41 = icmp sge i64 %t40, 0 + br i1 %t41, label %then10126, label %else10127 +then10126: + %t42 = load { ptr, i64, i64 }, ptr %a26 + %t43 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t42, { ptr, i64, i64 } { ptr @.str.6774, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6775, i64 2, i64 0 }) + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t43) + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_drop(ptr %a44) + br label %endif10128 +else10127: + %t45 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.6777, i64 27, i64 0 }, ptr %a48 + %t49 = call i64 @finch_str_find(ptr %a46, ptr %a48) + %t50 = icmp sge i64 %t49, 0 + br i1 %t50, label %then10129, label %else10130 +then10129: + %t51 = load { ptr, i64, i64 }, ptr %a26 + %t52 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t51, { ptr, i64, i64 } { ptr @.str.6778, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6779, i64 3, i64 0 }) + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t52) + store { ptr, i64, i64 } %t52, ptr %a53 + call void @finch_str_drop(ptr %a53) + br label %endif10131 +else10130: + %t54 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t54, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.6781, i64 14, i64 0 }, ptr %a57 + %t58 = call i64 @finch_str_find(ptr %a55, ptr %a57) + %t59 = icmp sge i64 %t58, 0 + br i1 %t59, label %then10132, label %else10133 +then10132: + %t60 = load { ptr, i64, i64 }, ptr %a26 + %t61 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t60, { ptr, i64, i64 } { ptr @.str.6782, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6783, i64 4, i64 0 }) + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t61, ptr %a62 + call void @finch_str_drop(ptr %a62) + br label %endif10134 +else10133: + %t63 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t63, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.6785, i64 24, i64 0 }, ptr %a66 + %t67 = call i64 @finch_str_find(ptr %a64, ptr %a66) + %t68 = icmp sge i64 %t67, 0 + br i1 %t68, label %then10135, label %else10136 +then10135: + %t69 = load { ptr, i64, i64 }, ptr %a26 + %t70 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t69, { ptr, i64, i64 } { ptr @.str.6786, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6787, i64 4, i64 0 }) + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t70) + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + br label %endif10137 +else10136: + %t72 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t72, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.6789, i64 13, i64 0 }, ptr %a75 + %t76 = call i64 @finch_str_find(ptr %a73, ptr %a75) + %t77 = icmp sge i64 %t76, 0 + br i1 %t77, label %then10138, label %else10139 +then10138: + %t78 = load { ptr, i64, i64 }, ptr %a26 + %t79 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.6790, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6791, i64 1, i64 0 }) + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t79) + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif10140 +else10139: + %t81 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.6793, i64 11, i64 0 }, ptr %a84 + %t85 = call i64 @finch_str_find(ptr %a82, ptr %a84) + %t86 = icmp sge i64 %t85, 0 + br label %logic.from10141 +logic.from10141: + br i1 %t86, label %logic.rhs10142, label %logic.end10143 +logic.rhs10142: + %t87 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t87, ptr %a88 + store { ptr, i64, i64 } { ptr @.str.6795, i64 9, i64 0 }, ptr %a90 + %t91 = call i64 @finch_str_find(ptr %a88, ptr %a90) + %t92 = icmp sge i64 %t91, 0 + br label %logic.rend10144 +logic.rend10144: + br label %logic.end10143 +logic.end10143: + %t93 = phi i1 [ false, %logic.from10141 ], [ %t92, %logic.rend10144 ] + br i1 %t93, label %then10145, label %else10146 +then10145: + %t94 = load { ptr, i64, i64 }, ptr %a26 + %t95 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t94, { ptr, i64, i64 } { ptr @.str.6796, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6797, i64 1, i64 0 }) + store { ptr, i64, i64 } %t95, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.6798, i64 10, i64 0 }, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t100) + store { ptr, i64, i64 } %t100, ptr %a101 + call void @finch_str_drop(ptr %a101) + br label %endif10147 +else10146: + %t102 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.6800, i64 1, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_starts(ptr %a103, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br label %logic.from10148 +logic.from10148: + br i1 %t107, label %logic.rhs10149, label %logic.end10150 +logic.rhs10149: + %t108 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6802, i64 19, i64 0 }, ptr %a111 + %t112 = call i64 @finch_str_find(ptr %a109, ptr %a111) + %t113 = icmp sge i64 %t112, 0 + br label %logic.rend10151 +logic.rend10151: + br label %logic.end10150 +logic.end10150: + %t114 = phi i1 [ false, %logic.from10148 ], [ %t113, %logic.rend10151 ] + br i1 %t114, label %then10152, label %endif10154 +then10152: + %t115 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t115, ptr %a116 + %t118 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t118, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.6805, i64 19, i64 0 }, ptr %a121 + %t122 = call i64 @finch_str_find(ptr %a119, ptr %a121) + call void @finch_str_sub(ptr %a117, ptr %a116, i64 1, i64 %t122, ptr @.str.6803, i64 111) + %t123 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t123, ptr %a124 + %t125 = getelementptr inbounds %S.platform.Target, ptr %a3, i32 0, i32 3 + %t126 = load i1, ptr %t125 + br label %logic.from10155 +logic.from10155: + br i1 %t126, label %logic.rhs10156, label %logic.end10157 +logic.rhs10156: + %t127 = load { ptr, i64, i64 }, ptr %a124 + store { ptr, i64, i64 } %t127, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.6807, i64 1, i64 0 }, ptr %a130 + %t131 = call i32 @finch_str_starts(ptr %a128, ptr %a130) + %t132 = icmp ne i32 %t131, 0 + br label %logic.rend10158 +logic.rend10158: + br label %logic.end10157 +logic.end10157: + %t133 = phi i1 [ false, %logic.from10155 ], [ %t132, %logic.rend10158 ] + br i1 %t133, label %then10159, label %endif10161 +then10159: + %t134 = load { ptr, i64, i64 }, ptr %a124 + store { ptr, i64, i64 } %t134, ptr %a135 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1 + %t138 = load i64, ptr %t137 + call void @finch_str_sub(ptr %a136, ptr %a135, i64 1, i64 %t138, ptr @.str.6808, i64 113) + %t139 = load { ptr, i64, i64 }, ptr %a136 + %t140 = load { ptr, i64, i64 }, ptr %a124 + store { ptr, i64, i64 } %t139, ptr %a124 + store { ptr, i64, i64 } %t140, ptr %a141 + call void @finch_str_drop(ptr %a141) + br label %endif10161 +endif10161: + %t142 = load { ptr, i64, i64 }, ptr %a124 + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t142) + call void @finch_str_drop(ptr %a124) + br label %endif10154 +endif10154: + br label %endif10147 +endif10147: + br label %endif10140 +endif10140: + br label %endif10137 +endif10137: + br label %endif10134 +endif10134: + br label %endif10131 +endif10131: + br label %endif10128 +endif10128: + br label %endif10125 +endif10125: + call void @finch_str_drop(ptr %a26) + br label %each.step10121 +each.step10121: + %t143 = load i64, ptr %a13 + %t144 = add i64 %t143, 1 + store i64 %t144, ptr %a13 + br label %each.cond10119 +each.end10122: + call void @finch.drop.arr_str(ptr %a12) + %t145 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1 + %t147 = load i64, ptr %t146 + %t148 = icmp eq i64 %t147, 0 + br label %logic.from10162 +logic.from10162: + br i1 %t148, label %logic.rhs10163, label %logic.end10164 +logic.rhs10163: + %t149 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 + %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t149, i32 0, i32 1 + %t151 = load i64, ptr %t150 + %t152 = icmp eq i64 %t151, 0 + br label %logic.rend10165 +logic.rend10165: + br label %logic.end10164 +logic.end10164: + %t153 = phi i1 [ false, %logic.from10162 ], [ %t152, %logic.rend10165 ] + br i1 %t153, label %then10166, label %endif10168 +then10166: + %t154 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t154, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.6809, i64 21, i64 0 }, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + %t159 = extractvalue { ptr, i64, i64 } %t158, 1 + %t160 = trunc i64 %t159 to i32 + %t161 = extractvalue { ptr, i64, i64 } %t158, 0 + %t162 = icmp eq ptr %t161, null + %t163 = select i1 %t162, ptr @.str.6810, ptr %t161 + %t164 = call i32 (ptr, ...) @printf(ptr @.str.6811, i32 %t160, ptr %t163) + store { ptr, i64, i64 } %t158, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = call i32 (ptr, ...) @printf(ptr @.str.6812) + call void @finch.drop.S_linker_Names(ptr %a5) + call void @finch.drop.S_linker_Names(ptr %a4) + ret i64 1 +endif10168: + %t167 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 + store i64 0, ptr %a168 + br label %each.cond10169 +each.cond10169: + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = load i64, ptr %a168 + %t172 = icmp slt i64 %t171, %t170 + br i1 %t172, label %each.body10170, label %each.end10172 +each.body10170: + %t173 = load ptr, ptr %t167 + %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 %t171 + %t175 = load { ptr, i64, i64 }, ptr %t174 + store { ptr, i64, i64 } %t175, ptr %a176 + %t177 = load { ptr, i64, i64 }, ptr %a176 + store { ptr, i64, i64 } { ptr @.str.6813, i64 20, i64 0 }, ptr %a179 + store { ptr, i64, i64 } %t177, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t181, ptr %a183 + store { ptr, i64, i64 } { ptr @.str.6814, i64 62, i64 0 }, ptr %a184 + call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) + store { ptr, i64, i64 } %t181, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a182 + %t187 = extractvalue { ptr, i64, i64 } %t186, 1 + %t188 = trunc i64 %t187 to i32 + %t189 = extractvalue { ptr, i64, i64 } %t186, 0 + %t190 = icmp eq ptr %t189, null + %t191 = select i1 %t190, ptr @.str.6815, ptr %t189 + %t192 = call i32 (ptr, ...) @printf(ptr @.str.6816, i32 %t188, ptr %t191) + store { ptr, i64, i64 } %t186, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = call i32 (ptr, ...) @printf(ptr @.str.6817) + br label %each.step10171 +each.step10171: + %t195 = load i64, ptr %a168 + %t196 = add i64 %t195, 1 + store i64 %t196, ptr %a168 + br label %each.cond10169 +each.end10172: + store { ptr, i64, i64 } zeroinitializer, ptr %a197 + store { ptr, i64, i64 } zeroinitializer, ptr %a198 + %t199 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 + store i64 0, ptr %a200 + br label %each.cond10173 +each.cond10173: + %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i32 0, i32 1 + %t202 = load i64, ptr %t201 + %t203 = load i64, ptr %a200 + %t204 = icmp slt i64 %t203, %t202 + br i1 %t204, label %each.body10174, label %each.end10176 +each.body10174: + %t205 = load ptr, ptr %t199 + %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i64 %t203 + %t207 = load { ptr, i64, i64 }, ptr %t206 + store { ptr, i64, i64 } %t207, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.6818, i64 0, i64 0 }, ptr %a209 + %t210 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 + %t211 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t211, ptr %a212 + %t213 = call i64 @finch_map_find(ptr %t210, ptr %a212, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t214 = icmp sge i64 %t213, 0 + br i1 %t214, label %then10177, label %endif10179 +then10177: + %t215 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 + %t216 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t216, ptr %a217 + %t218 = call i64 @finch_map_find(ptr %t215, ptr %a217, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t219 = icmp slt i64 %t218, 0 + br i1 %t219, label %map.missing10180, label %map.found10181 +map.missing10180: + store { ptr, i64, i64 } zeroinitializer, ptr %a220 + store { ptr, i64, i64 } %t216, ptr %a221 + call void @finch_buf_str(ptr %a220, ptr %a221, i32 1) + call void @finch_map_missing(ptr @.str.6819, i64 131, ptr %a220) + unreachable +map.found10181: + %t222 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t215, i32 0, i32 0 + %t223 = load ptr, ptr %t222 + %t224 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t223, i64 %t218 + %t225 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t224, i32 0, i32 2 + %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %t225, i32 0, i32 1 + %t227 = load { ptr, i64, i64 }, ptr %t226 + store { ptr, i64, i64 } %t227, ptr %a228 + call void @finch_str_copy(ptr %a229, ptr %a228) + %t230 = load { ptr, i64, i64 }, ptr %a229 + %t231 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t230, ptr %a209 + store { ptr, i64, i64 } %t231, ptr %a232 + call void @finch_str_drop(ptr %a232) + br label %endif10179 +endif10179: + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t234 = load { ptr, i64, i64 }, ptr %a209 + store i64 -1, ptr %a235 + %t236 = load i64, ptr %t233 + %t237 = load ptr, ptr %a197 + store i64 0, ptr %a238 + br label %find.cond10182 +find.cond10182: + %t239 = load i64, ptr %a238 + %t240 = icmp slt i64 %t239, %t236 + br i1 %t240, label %find.body10183, label %find.end10186 +find.body10183: + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t239 + %t242 = load { ptr, i64, i64 }, ptr %t241 + store { ptr, i64, i64 } %t242, ptr %a243 + store { ptr, i64, i64 } %t234, ptr %a244 + %t245 = call i32 @finch_str_eq(ptr %a243, ptr %a244) + %t246 = icmp ne i32 %t245, 0 + br i1 %t246, label %find.hit10184, label %find.next10185 +find.hit10184: + store i64 %t239, ptr %a235 + br label %find.end10186 +find.next10185: + %t247 = add i64 %t239, 1 + store i64 %t247, ptr %a238 + br label %find.cond10182 +find.end10186: + %t248 = load i64, ptr %a235 + store i64 %t248, ptr %a249 + %t250 = load i64, ptr %a249 + %t251 = icmp slt i64 %t250, 0 + br i1 %t251, label %then10187, label %endif10189 +then10187: + %t252 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t253 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_copy(ptr %a255, ptr %a254) + %t256 = load { ptr, i64, i64 }, ptr %a255 + %t257 = load i64, ptr %t252 + %t258 = add i64 %t257, 1 + call void @finch_arr_reserve(ptr %a197, i64 %t258, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t259 = load ptr, ptr %a197 + %t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i64 %t257 + store { ptr, i64, i64 } %t256, ptr %t260 + store i64 %t258, ptr %t252 + %t261 = getelementptr inbounds { ptr, i64, i64 }, ptr %a198, i32 0, i32 1 + %t262 = load i64, ptr %t261 + %t263 = add i64 %t262, 1 + call void @finch_arr_reserve(ptr %a198, i64 %t263, i64 ptrtoint (ptr getelementptr (%S.linker.Names, ptr null, i32 1) to i64)) + %t264 = load ptr, ptr %a198 + %t265 = getelementptr inbounds %S.linker.Names, ptr %t264, i64 %t262 + store %S.linker.Names zeroinitializer, ptr %t265 + store i64 %t263, ptr %t261 + %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t267 = load i64, ptr %t266 + %t268 = sub i64 %t267, 1 + store i64 %t268, ptr %a249 + br label %endif10189 +endif10189: + %t269 = load i64, ptr %a249 + %t270 = load { ptr, i64, i64 }, ptr %a198 + %t271 = extractvalue { ptr, i64, i64 } %t270, 1 + %t272 = icmp uge i64 %t269, %t271 + br i1 %t272, label %range10190, label %inrange10191 +range10190: + call void @finch_panic_index(ptr @.str.6820, i64 139, i64 %t269, i64 %t271) + unreachable +inrange10191: + %t273 = extractvalue { ptr, i64, i64 } %t270, 0 + %t274 = getelementptr inbounds %S.linker.Names, ptr %t273, i64 %t269 + %t275 = load { ptr, i64, i64 }, ptr %a208 + call void @finch.linker.Names.add(ptr %t274, { ptr, i64, i64 } %t275) + call void @finch_str_drop(ptr %a209) + br label %each.step10175 +each.step10175: + %t276 = load i64, ptr %a200 + %t277 = add i64 %t276, 1 + store i64 %t277, ptr %a200 + br label %each.cond10173 +each.end10176: + %t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t279 = load i64, ptr %t278 + store i64 0, ptr %a280 + br label %for.cond10192 +for.cond10192: + %t281 = load i64, ptr %a280 + %t282 = icmp slt i64 %t281, %t279 + br i1 %t282, label %for.body10193, label %for.end10195 +for.body10193: + %t283 = load i64, ptr %a280 + %t284 = load { ptr, i64, i64 }, ptr %a198 + %t285 = extractvalue { ptr, i64, i64 } %t284, 1 + %t286 = icmp uge i64 %t283, %t285 + br i1 %t286, label %range10196, label %inrange10197 +range10196: + call void @finch_panic_index(ptr @.str.6821, i64 142, i64 %t283, i64 %t285) + unreachable +inrange10197: + %t287 = extractvalue { ptr, i64, i64 } %t284, 0 + %t288 = getelementptr inbounds %S.linker.Names, ptr %t287, i64 %t283 + %t289 = getelementptr inbounds %S.linker.Names, ptr %t288, i32 0, i32 0 + %t290 = load { ptr, i64, i64 }, ptr %t289 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch.copy.arr_str(ptr %a292, ptr %a291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t293, ptr %a294 + store { ptr, i64, i64 } zeroinitializer, ptr %a295 + %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t297 = load i64, ptr %t296 + store i64 0, ptr %a298 + br label %for.cond10198 +for.cond10198: + %t299 = load i64, ptr %a298 + %t300 = icmp slt i64 %t299, %t297 + br i1 %t300, label %for.body10199, label %for.end10201 +for.body10199: + %t301 = load i64, ptr %a298 + %t302 = icmp slt i64 %t301, 3 + br i1 %t302, label %then10202, label %endif10204 +then10202: + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 + %t304 = load i64, ptr %a298 + %t305 = load { ptr, i64, i64 }, ptr %a294 + %t306 = extractvalue { ptr, i64, i64 } %t305, 1 + %t307 = icmp uge i64 %t304, %t306 + br i1 %t307, label %range10205, label %inrange10206 +range10205: + call void @finch_panic_index(ptr @.str.6822, i64 146, i64 %t304, i64 %t306) + unreachable +inrange10206: + %t308 = extractvalue { ptr, i64, i64 } %t305, 0 + %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t304 + %t310 = load { ptr, i64, i64 }, ptr %t309 + store { ptr, i64, i64 } %t310, ptr %a311 + call void @finch_str_copy(ptr %a312, ptr %a311) + %t313 = load { ptr, i64, i64 }, ptr %a312 + %t314 = load i64, ptr %t303 + %t315 = add i64 %t314, 1 + call void @finch_arr_reserve(ptr %a295, i64 %t315, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t316 = load ptr, ptr %a295 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i64 %t314 + store { ptr, i64, i64 } %t313, ptr %t317 + store i64 %t315, ptr %t303 + br label %endif10204 +endif10204: + br label %for.step10200 +for.step10200: + %t318 = load i64, ptr %a298 + %t319 = add i64 %t318, 1 + store i64 %t319, ptr %a298 + br label %for.cond10198 +for.end10201: + %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6823, i64 2, i64 0 }, ptr %a321 + call void @finch_str_join(ptr %a322, ptr %a295, ptr %a321) + %t323 = load { ptr, i64, i64 }, ptr %a322 + store { ptr, i64, i64 } %t323, ptr %a324 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t326 = load i64, ptr %t325 + %t327 = icmp sgt i64 %t326, 3 + br i1 %t327, label %then10207, label %endif10209 +then10207: + %t328 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6824, i64 5, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a329 + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t334 = load i64, ptr %t333 + %t335 = sub i64 %t334, 3 + call void @finch_str_from_int(ptr %a336, i64 %t335) + %t337 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t332, ptr %a339 + store { ptr, i64, i64 } %t337, ptr %a340 + call void @finch_str_concat(ptr %a338, ptr %a339, ptr %a340) + store { ptr, i64, i64 } %t332, ptr %a341 + call void @finch_str_drop(ptr %a341) + store { ptr, i64, i64 } %t337, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load { ptr, i64, i64 }, ptr %a338 + store { ptr, i64, i64 } %t343, ptr %a345 + store { ptr, i64, i64 } { ptr @.str.6825, i64 5, i64 0 }, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t343, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = load { ptr, i64, i64 }, ptr %a344 + %t349 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t348, ptr %a324 + store { ptr, i64, i64 } %t349, ptr %a350 + call void @finch_str_drop(ptr %a350) + br label %endif10209 +endif10209: + %t351 = load i64, ptr %a280 + %t352 = load { ptr, i64, i64 }, ptr %a197 + %t353 = extractvalue { ptr, i64, i64 } %t352, 1 + %t354 = icmp uge i64 %t351, %t353 + br i1 %t354, label %range10210, label %inrange10211 +range10210: + call void @finch_panic_index(ptr @.str.6826, i64 153, i64 %t351, i64 %t353) + unreachable +inrange10211: + %t355 = extractvalue { ptr, i64, i64 } %t352, 0 + %t356 = getelementptr inbounds { ptr, i64, i64 }, ptr %t355, i64 %t351 + %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 + %t358 = load i64, ptr %t357 + %t359 = icmp eq i64 %t358, 0 + br i1 %t359, label %then10212, label %endif10214 +then10212: + %t360 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.6827, i64 25, i64 0 }, ptr %a362 + store { ptr, i64, i64 } %t360, ptr %a363 + call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a361 + %t365 = extractvalue { ptr, i64, i64 } %t364, 1 + %t366 = trunc i64 %t365 to i32 + %t367 = extractvalue { ptr, i64, i64 } %t364, 0 + %t368 = icmp eq ptr %t367, null + %t369 = select i1 %t368, ptr @.str.6828, ptr %t367 + %t370 = call i32 (ptr, ...) @printf(ptr @.str.6829, i32 %t366, ptr %t369) + store { ptr, i64, i64 } %t364, ptr %a371 + call void @finch_str_drop(ptr %a371) + %t372 = call i32 (ptr, ...) @printf(ptr @.str.6830) + call void @finch_str_drop(ptr %a324) + call void @finch.drop.arr_str(ptr %a295) + call void @finch.drop.arr_str(ptr %a294) + br label %for.step10194 +endif10214: + store { ptr, i64, i64 } { ptr @.str.6831, i64 4, i64 0 }, ptr %a373 + %t374 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t375 = load i64, ptr %t374 + %t376 = icmp eq i64 %t375, 1 + br i1 %t376, label %then10215, label %endif10217 +then10215: + %t377 = load { ptr, i64, i64 }, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.6832, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } %t377, ptr %a378 + call void @finch_str_drop(ptr %a378) + br label %endif10217 +endif10217: + %t379 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.6833, i64 7, i64 0 }, ptr %a381 + store { ptr, i64, i64 } %t379, ptr %a382 + call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) + %t383 = load { ptr, i64, i64 }, ptr %a380 + store { ptr, i64, i64 } %t383, ptr %a385 + store { ptr, i64, i64 } { ptr @.str.6834, i64 1, i64 0 }, ptr %a386 + call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) + store { ptr, i64, i64 } %t383, ptr %a387 + call void @finch_str_drop(ptr %a387) + %t388 = load { ptr, i64, i64 }, ptr %a384 + %t389 = load { ptr, i64, i64 }, ptr %a373 + store { ptr, i64, i64 } %t388, ptr %a391 + store { ptr, i64, i64 } %t389, ptr %a392 + call void @finch_str_concat(ptr %a390, ptr %a391, ptr %a392) + store { ptr, i64, i64 } %t388, ptr %a393 + call void @finch_str_drop(ptr %a393) + %t394 = load { ptr, i64, i64 }, ptr %a390 + store { ptr, i64, i64 } %t394, ptr %a396 + store { ptr, i64, i64 } { ptr @.str.6835, i64 7, i64 0 }, ptr %a397 + call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) + store { ptr, i64, i64 } %t394, ptr %a398 + call void @finch_str_drop(ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a395 + %t400 = load i64, ptr %a280 + %t401 = load { ptr, i64, i64 }, ptr %a197 + %t402 = extractvalue { ptr, i64, i64 } %t401, 1 + %t403 = icmp uge i64 %t400, %t402 + br i1 %t403, label %range10218, label %inrange10219 +range10218: + call void @finch_panic_index(ptr @.str.6836, i64 161, i64 %t400, i64 %t402) + unreachable +inrange10219: + %t404 = extractvalue { ptr, i64, i64 } %t401, 0 + %t405 = getelementptr inbounds { ptr, i64, i64 }, ptr %t404, i64 %t400 + %t406 = load { ptr, i64, i64 }, ptr %t405 + store { ptr, i64, i64 } %t399, ptr %a408 + store { ptr, i64, i64 } %t406, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + store { ptr, i64, i64 } %t399, ptr %a410 + call void @finch_str_drop(ptr %a410) + %t411 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t411, ptr %a413 + store { ptr, i64, i64 } { ptr @.str.6837, i64 31, i64 0 }, ptr %a414 + call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) + store { ptr, i64, i64 } %t411, ptr %a415 + call void @finch_str_drop(ptr %a415) + %t416 = load { ptr, i64, i64 }, ptr %a412 + %t417 = extractvalue { ptr, i64, i64 } %t416, 1 + %t418 = trunc i64 %t417 to i32 + %t419 = extractvalue { ptr, i64, i64 } %t416, 0 + %t420 = icmp eq ptr %t419, null + %t421 = select i1 %t420, ptr @.str.6838, ptr %t419 + %t422 = call i32 (ptr, ...) @printf(ptr @.str.6839, i32 %t418, ptr %t421) + store { ptr, i64, i64 } %t416, ptr %a423 + call void @finch_str_drop(ptr %a423) + %t424 = call i32 (ptr, ...) @printf(ptr @.str.6840) + %t425 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 1 + %t426 = trunc i64 %t425 to i32 + %t427 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 0 + %t428 = icmp eq ptr %t427, null + %t429 = select i1 %t428, ptr @.str.6842, ptr %t427 + %t430 = call i32 (ptr, ...) @printf(ptr @.str.6843, i32 %t426, ptr %t429) + %t431 = call i32 (ptr, ...) @printf(ptr @.str.6844) + %t432 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 1 + %t433 = trunc i64 %t432 to i32 + %t434 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 0 + %t435 = icmp eq ptr %t434, null + %t436 = select i1 %t435, ptr @.str.6846, ptr %t434 + %t437 = call i32 (ptr, ...) @printf(ptr @.str.6847, i32 %t433, ptr %t436) + %t438 = call i32 (ptr, ...) @printf(ptr @.str.6848) + %t439 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 1 + %t440 = trunc i64 %t439 to i32 + %t441 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 0 + %t442 = icmp eq ptr %t441, null + %t443 = select i1 %t442, ptr @.str.6850, ptr %t441 + %t444 = call i32 (ptr, ...) @printf(ptr @.str.6851, i32 %t440, ptr %t443) + %t445 = call i32 (ptr, ...) @printf(ptr @.str.6852) + %t446 = load i64, ptr %a280 + %t447 = load { ptr, i64, i64 }, ptr %a197 + %t448 = extractvalue { ptr, i64, i64 } %t447, 1 + %t449 = icmp uge i64 %t446, %t448 + br i1 %t449, label %range10220, label %inrange10221 +range10220: + call void @finch_panic_index(ptr @.str.6854, i64 165, i64 %t446, i64 %t448) + unreachable +inrange10221: + %t450 = extractvalue { ptr, i64, i64 } %t447, 0 + %t451 = getelementptr inbounds { ptr, i64, i64 }, ptr %t450, i64 %t446 + %t452 = load { ptr, i64, i64 }, ptr %t451 + %t453 = call { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %t452) + store { ptr, i64, i64 } { ptr @.str.6853, i64 12, i64 0 }, ptr %a455 + store { ptr, i64, i64 } %t453, ptr %a456 + call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) + store { ptr, i64, i64 } %t453, ptr %a457 + call void @finch_str_drop(ptr %a457) + %t458 = load { ptr, i64, i64 }, ptr %a454 + store { ptr, i64, i64 } %t458, ptr %a460 + store { ptr, i64, i64 } { ptr @.str.6855, i64 1, i64 0 }, ptr %a461 + call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) + store { ptr, i64, i64 } %t458, ptr %a462 + call void @finch_str_drop(ptr %a462) + %t463 = load { ptr, i64, i64 }, ptr %a459 + %t464 = extractvalue { ptr, i64, i64 } %t463, 1 + %t465 = trunc i64 %t464 to i32 + %t466 = extractvalue { ptr, i64, i64 } %t463, 0 + %t467 = icmp eq ptr %t466, null + %t468 = select i1 %t467, ptr @.str.6856, ptr %t466 + %t469 = call i32 (ptr, ...) @printf(ptr @.str.6857, i32 %t465, ptr %t468) + store { ptr, i64, i64 } %t463, ptr %a470 + call void @finch_str_drop(ptr %a470) + %t471 = call i32 (ptr, ...) @printf(ptr @.str.6858) + %t472 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 1 + %t473 = trunc i64 %t472 to i32 + %t474 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 0 + %t475 = icmp eq ptr %t474, null + %t476 = select i1 %t475, ptr @.str.6860, ptr %t474 + %t477 = call i32 (ptr, ...) @printf(ptr @.str.6861, i32 %t473, ptr %t476) + %t478 = call i32 (ptr, ...) @printf(ptr @.str.6862) + call void @finch_str_drop(ptr %a373) + call void @finch_str_drop(ptr %a324) + call void @finch.drop.arr_str(ptr %a295) + call void @finch.drop.arr_str(ptr %a294) + br label %for.step10194 +for.step10194: + %t479 = load i64, ptr %a280 + %t480 = add i64 %t479, 1 + store i64 %t480, ptr %a280 + br label %for.cond10192 +for.end10195: + call void @finch.drop.arr_S_linker_Names(ptr %a198) + call void @finch.drop.arr_str(ptr %a197) + call void @finch.drop.S_linker_Names(ptr %a5) + call void @finch.drop.S_linker_Names(ptr %a4) + ret i64 1 +} + +define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %p0, %S.platform.Target %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.platform.Target, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca i64, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.platform.Target %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } zeroinitializer, ptr %a6 + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + %t8 = call i32 @finch_try_read_file(ptr %a6, ptr %a5, ptr %a7) + %t9 = icmp eq i32 %t8, 0 + %t10 = load { ptr, i64, i64 }, ptr %a7 + %t11 = load { ptr, i64, i64 }, ptr %a6 + br i1 %t9, label %try.failed10225, label %try.ok10226 +try.failed10225: + %t12 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t10, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t12 +try.ok10226: + store { ptr, i64, i64 } %t11, ptr %a13 + %t14 = call { ptr, i64, i64 } @finch.host.cacheDir() + store { ptr, i64, i64 } %t14, ptr %a15 + %t16 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.6863, i64 4, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a17 + %t21 = load { ptr, i64, i64 }, ptr %a13 + %t22 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t21, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a23 + %t27 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 + %t28 = load { ptr, i64, i64 }, ptr %t27 + store { ptr, i64, i64 } %t26, ptr %a30 + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t26, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t33, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.6864, i64 3, i64 0 }, ptr %a36 + call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a34 + %t39 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t38) + store { ptr, i64, i64 } %t38, ptr %a40 + call void @finch_str_drop(ptr %a40) + store { ptr, i64, i64 } %t20, ptr %a42 + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t20, ptr %a44 + call void @finch_str_drop(ptr %a44) + store { ptr, i64, i64 } %t39, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t46, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.6865, i64 2, i64 0 }, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t53, ptr %a54 + %t55 = call i32 @finch_file_exists(ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then10227, label %endif10229 +then10227: + %t57 = load { ptr, i64, i64 }, ptr %a52 + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a13) + %t58 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t59 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t58, { ptr, i64, i64 } %t57, 1 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t59 +endif10229: + %t60 = load { ptr, i64, i64 }, ptr %a15 + call void @finch.host.makeDirs({ ptr, i64, i64 } %t60) + %t61 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6866, i64 5, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a62 + %t66 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a67, i64 %t66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t65, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t68, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.6867, i64 6, i64 0 }, ptr %a76 + %t77 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t78 = load i1, ptr %t77 + br i1 %t78, label %then10230, label %endif10232 +then10230: + %t79 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.6868, i64 0, i64 0 }, ptr %a76 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif10232 +endif10232: + %t81 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t81, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.6869, i64 4, i64 0 }, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t85, ptr %a86 + %t87 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t87, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.6870, i64 4, i64 0 }, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a88 + %t92 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t91, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.6871, i64 4, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = load { ptr, i64, i64 }, ptr %a1 + %t104 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } %t110, ptr %a112 + store { ptr, i64, i64 } { ptr @.str.6872, i64 4, i64 0 }, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t110, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + %t116 = load { ptr, i64, i64 }, ptr %a75 + %t117 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t115, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t115, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t117, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.6873, i64 3, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = load { ptr, i64, i64 }, ptr %a86 + %t130 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t129) + store { ptr, i64, i64 } %t128, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t128, ptr %a134 + call void @finch_str_drop(ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a131 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.6874, i64 5, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = call i64 @finch.host.run({ ptr, i64, i64 } %t141) + store { ptr, i64, i64 } %t141, ptr %a143 + call void @finch_str_drop(ptr %a143) + store i64 %t142, ptr %a144 + %t145 = load i64, ptr %a144 + %t146 = icmp ne i64 %t145, 0 + br i1 %t146, label %then10233, label %endif10235 +then10233: + %t147 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t147, ptr %a148 + store { ptr, i64, i64 } zeroinitializer, ptr %a149 + store { ptr, i64, i64 } zeroinitializer, ptr %a150 + %t151 = call i32 @finch_try_read_file(ptr %a149, ptr %a148, ptr %a150) + %t152 = icmp eq i32 %t151, 0 + %t153 = load { ptr, i64, i64 }, ptr %a150 + %t154 = load { ptr, i64, i64 }, ptr %a149 + br i1 %t152, label %or.failed10236, label %or.ok10237 +or.failed10236: + store { ptr, i64, i64 } %t153, ptr %a155 + call void @finch_str_drop(ptr %a155) + br label %or.bend10238 +or.bend10238: + br label %or.end10239 +or.ok10237: + br label %or.end10239 +or.end10239: + %t156 = phi { ptr, i64, i64 } [ { ptr @.str.6875, i64 0, i64 0 }, %or.bend10238 ], [ %t154, %or.ok10237 ] + store { ptr, i64, i64 } %t156, ptr %a157 + %t158 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.host.remove({ ptr, i64, i64 } %t158) + %t159 = load { ptr, i64, i64 }, ptr %a86 + call void @finch.host.remove({ ptr, i64, i64 } %t159) + %t160 = load { ptr, i64, i64 }, ptr %a157 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6876, i64 46, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t164, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + store { ptr, i64, i64 } %t164, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t170, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.6877, i64 30, i64 0 }, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t170, ptr %a174 + call void @finch_str_drop(ptr %a174) + %t175 = load { ptr, i64, i64 }, ptr %a171 + call void @finch_str_drop(ptr %a157) + call void @finch_str_drop(ptr %a86) + call void @finch_str_drop(ptr %a76) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a52) + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a13) + %t176 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t175, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t176 +endif10235: + %t177 = load { ptr, i64, i64 }, ptr %a86 + call void @finch.host.remove({ ptr, i64, i64 } %t177) + %t178 = load { ptr, i64, i64 }, ptr %a75 + %t179 = load { ptr, i64, i64 }, ptr %a52 + call void @finch.host.move({ ptr, i64, i64 } %t178, { ptr, i64, i64 } %t179) + %t180 = load { ptr, i64, i64 }, ptr %a52 + call void @finch_str_drop(ptr %a86) + call void @finch_str_drop(ptr %a76) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a13) + %t181 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t182 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t181, { ptr, i64, i64 } %t180, 1 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t182 +} + +define internal i64 @finch.linker.build(%S.linker.Build %p0, %S.platform.Target %p1, %S.cimport.CImports %p2) { +entry: + %a1 = alloca %S.linker.Build, align 16 + %a2 = alloca %S.platform.Target, align 16 + %a3 = alloca %S.cimport.CImports, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca i64, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca i64, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca i64, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca i64, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca i64, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + store %S.linker.Build %p0, ptr %a1 + store %S.platform.Target %p1, ptr %a2 + store %S.cimport.CImports %p2, ptr %a3 + %t4 = extractvalue { ptr, i64, i64 } { ptr @.str.6878, i64 11, i64 0 }, 0 + %t5 = icmp eq ptr %t4, null + %t6 = select i1 %t5, ptr @.str.6879, ptr %t4 + %t7 = call ptr @getenv(ptr %t6) + store { ptr, i64, i64 } zeroinitializer, ptr %a8 + call void @finch_str_from_c(ptr %a8, ptr %t7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = icmp eq i64 %t15, 0 + br i1 %t16, label %then10240, label %endif10242 +then10240: + %t17 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.6880, i64 5, i64 0 }, ptr %a13 + store { ptr, i64, i64 } %t17, ptr %a18 + call void @finch_str_drop(ptr %a18) + br label %endif10242 +endif10242: + %t19 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t19, ptr %a20 + call void @finch_str_copy(ptr %a21, ptr %a20) + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 + %t25 = load i1, ptr %t24 + br i1 %t25, label %then10243, label %else10244 +then10243: + %t26 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 7 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_copy(ptr %a29, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + %t31 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t30, ptr %a23 + store { ptr, i64, i64 } %t31, ptr %a32 + call void @finch_str_drop(ptr %a32) + br label %endif10245 +else10244: + %t33 = extractvalue { ptr, i64, i64 } { ptr @.str.6881, i64 8, i64 0 }, 0 + %t34 = icmp eq ptr %t33, null + %t35 = select i1 %t34, ptr @.str.6882, ptr %t33 + %t36 = call ptr @getenv(ptr %t35) + store { ptr, i64, i64 } zeroinitializer, ptr %a37 + call void @finch_str_from_c(ptr %a37, ptr %t36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp sgt i64 %t39, 0 + br i1 %t40, label %then10246, label %endif10248 +then10246: + %t41 = extractvalue { ptr, i64, i64 } { ptr @.str.6883, i64 8, i64 0 }, 0 + %t42 = icmp eq ptr %t41, null + %t43 = select i1 %t42, ptr @.str.6884, ptr %t41 + %t44 = call ptr @getenv(ptr %t43) + store { ptr, i64, i64 } zeroinitializer, ptr %a45 + call void @finch_str_from_c(ptr %a45, ptr %t44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_copy(ptr %a48, ptr %a47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + %t50 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t49, ptr %a23 + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %endif10248 +endif10248: + br label %endif10245 +endif10245: + %t52 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 2 + %t53 = load { ptr, i64, i64 }, ptr %t52 + %t54 = load %S.platform.Target, ptr %a2 + %t55 = load { ptr, i64, i64 }, ptr %a23 + %t56 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %t53, %S.platform.Target %t54, { ptr, i64, i64 } %t55) + %t57 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 0 + %t58 = xor i1 %t57, true + %t59 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 2 + %t60 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 1 + br i1 %t58, label %or.failed10249, label %or.ok10250 +or.failed10249: + store { ptr, i64, i64 } %t59, ptr %a61 + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = extractvalue { ptr, i64, i64 } %t62, 1 + %t64 = trunc i64 %t63 to i32 + %t65 = extractvalue { ptr, i64, i64 } %t62, 0 + %t66 = icmp eq ptr %t65, null + %t67 = select i1 %t66, ptr @.str.6885, ptr %t65 + %t68 = call i32 (ptr, ...) @printf(ptr @.str.6886, i32 %t64, ptr %t67) + %t69 = call i32 (ptr, ...) @printf(ptr @.str.6887) + call void @finch_str_drop(ptr %a61) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +or.ok10250: + store { ptr, i64, i64 } %t60, ptr %a70 + %t71 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t72 = load { ptr, i64, i64 }, ptr %t71 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6888, i64 3, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t76, ptr %a77 + %t78 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.6889, i64 2, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a80 + store { ptr, i64, i64 } %t83, ptr %a84 + %t85 = load { ptr, i64, i64 }, ptr %a77 + %t86 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } %t85, ptr %a88 + store { ptr, i64, i64 } %t87, ptr %a89 + %t90 = call i32 @finch_write_file(ptr %a88, ptr %a89) + %t91 = icmp ne i32 %t90, 0 + store { ptr, i64, i64 } { ptr @.str.6890, i64 0, i64 0 }, ptr %a92 + %t93 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 + %t94 = load i1, ptr %t93 + br label %logic.from10251 +logic.from10251: + br i1 %t94, label %logic.end10253, label %logic.rhs10252 +logic.rhs10252: + %t95 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t96 = load i1, ptr %t95 + br label %logic.rend10254 +logic.rend10254: + br label %logic.end10253 +logic.end10253: + %t97 = phi i1 [ true, %logic.from10251 ], [ %t96, %logic.rend10254 ] + br i1 %t97, label %then10255, label %endif10257 +then10255: + %t98 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 + %t99 = load { ptr, i64, i64 }, ptr %t98 + store { ptr, i64, i64 } { ptr @.str.6891, i64 10, i64 0 }, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a100 + %t104 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t103, ptr %a92 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + br label %endif10257 +endif10257: + %t106 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6892, i64 4, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load { ptr, i64, i64 }, ptr %a13 + %t114 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t113, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.6893, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3 + %t125 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t123, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t123, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4 + %t132 = load { ptr, i64, i64 }, ptr %t131 + store { ptr, i64, i64 } %t130, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t130, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.6894, i64 7, i64 0 }, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t137, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + %t143 = load { ptr, i64, i64 }, ptr %a77 + %t144 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t143) + store { ptr, i64, i64 } %t142, ptr %a146 + store { ptr, i64, i64 } %t144, ptr %a147 + call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) + store { ptr, i64, i64 } %t142, ptr %a148 + call void @finch_str_drop(ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.6895, i64 4, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load { ptr, i64, i64 }, ptr %a84 + %t157 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t156) + store { ptr, i64, i64 } %t155, ptr %a159 + store { ptr, i64, i64 } %t157, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t155, ptr %a161 + call void @finch_str_drop(ptr %a161) + store { ptr, i64, i64 } %t157, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a158 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.6896, i64 3, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = load { ptr, i64, i64 }, ptr %a112 + %t170 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t169) + store { ptr, i64, i64 } %t168, ptr %a172 + store { ptr, i64, i64 } %t170, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t168, ptr %a174 + call void @finch_str_drop(ptr %a174) + store { ptr, i64, i64 } %t170, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } %t176, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.6897, i64 5, i64 0 }, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t176, ptr %a180 + call void @finch_str_drop(ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a177 + %t182 = call i64 @finch.host.run({ ptr, i64, i64 } %t181) + store { ptr, i64, i64 } %t181, ptr %a183 + call void @finch_str_drop(ptr %a183) + store i64 %t182, ptr %a184 + %t185 = load { ptr, i64, i64 }, ptr %a77 + call void @finch.host.remove({ ptr, i64, i64 } %t185) + %t186 = load i64, ptr %a184 + %t187 = icmp ne i64 %t186, 0 + br i1 %t187, label %then10258, label %endif10260 +then10258: + %t188 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t188, ptr %a189 + store { ptr, i64, i64 } zeroinitializer, ptr %a190 + store { ptr, i64, i64 } zeroinitializer, ptr %a191 + %t192 = call i32 @finch_try_read_file(ptr %a190, ptr %a189, ptr %a191) + %t193 = icmp eq i32 %t192, 0 + %t194 = load { ptr, i64, i64 }, ptr %a191 + %t195 = load { ptr, i64, i64 }, ptr %a190 + br i1 %t193, label %or.failed10261, label %or.ok10262 +or.failed10261: + store { ptr, i64, i64 } %t194, ptr %a196 + call void @finch_str_drop(ptr %a196) + br label %or.bend10263 +or.bend10263: + br label %or.end10264 +or.ok10262: + br label %or.end10264 +or.end10264: + %t197 = phi { ptr, i64, i64 } [ { ptr @.str.6898, i64 0, i64 0 }, %or.bend10263 ], [ %t195, %or.ok10262 ] + %t198 = extractvalue { ptr, i64, i64 } %t197, 1 + %t199 = trunc i64 %t198 to i32 + %t200 = extractvalue { ptr, i64, i64 } %t197, 0 + %t201 = icmp eq ptr %t200, null + %t202 = select i1 %t201, ptr @.str.6899, ptr %t200 + %t203 = call i32 (ptr, ...) @printf(ptr @.str.6900, i32 %t199, ptr %t202) + store { ptr, i64, i64 } %t197, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = call i32 (ptr, ...) @printf(ptr @.str.6901) + %t206 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 1 + %t207 = trunc i64 %t206 to i32 + %t208 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 0 + %t209 = icmp eq ptr %t208, null + %t210 = select i1 %t209, ptr @.str.6903, ptr %t208 + %t211 = call i32 (ptr, ...) @printf(ptr @.str.6904, i32 %t207, ptr %t210) + %t212 = call i32 (ptr, ...) @printf(ptr @.str.6905) + %t213 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t213) + %t214 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t214) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +endif10260: + %t215 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.6906, i64 1, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + %t219 = load { ptr, i64, i64 }, ptr %a216 + %t220 = load { ptr, i64, i64 }, ptr %a84 + %t221 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t220) + store { ptr, i64, i64 } %t219, ptr %a223 + store { ptr, i64, i64 } %t221, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t219, ptr %a225 + call void @finch_str_drop(ptr %a225) + store { ptr, i64, i64 } %t221, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a222 + store { ptr, i64, i64 } %t227, ptr %a229 + store { ptr, i64, i64 } { ptr @.str.6907, i64 1, i64 0 }, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + store { ptr, i64, i64 } %t227, ptr %a231 + call void @finch_str_drop(ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a228 + %t233 = load { ptr, i64, i64 }, ptr %a70 + %t234 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t233) + store { ptr, i64, i64 } %t232, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t232, ptr %a238 + call void @finch_str_drop(ptr %a238) + store { ptr, i64, i64 } %t234, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t240, ptr %a242 + store { ptr, i64, i64 } { ptr @.str.6908, i64 4, i64 0 }, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t240, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + %t246 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t247 = load { ptr, i64, i64 }, ptr %t246 + %t248 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t247) + store { ptr, i64, i64 } %t245, ptr %a250 + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t245, ptr %a252 + call void @finch_str_drop(ptr %a252) + store { ptr, i64, i64 } %t248, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a249 + store { ptr, i64, i64 } %t254, ptr %a255 + %t256 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2 + %t257 = load i1, ptr %t256 + %t258 = xor i1 %t257, true + br i1 %t258, label %then10265, label %endif10267 +then10265: + %t259 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.6909, i64 4, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a260 + %t264 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t263, ptr %a255 + store { ptr, i64, i64 } %t264, ptr %a265 + call void @finch_str_drop(ptr %a265) + br label %endif10267 +endif10267: + %t266 = extractvalue { ptr, i64, i64 } { ptr @.str.6910, i64 13, i64 0 }, 0 + %t267 = icmp eq ptr %t266, null + %t268 = select i1 %t267, ptr @.str.6911, ptr %t266 + %t269 = call ptr @getenv(ptr %t268) + store { ptr, i64, i64 } zeroinitializer, ptr %a270 + call void @finch_str_from_c(ptr %a270, ptr %t269) + %t271 = load { ptr, i64, i64 }, ptr %a270 + %t272 = extractvalue { ptr, i64, i64 } %t271, 1 + %t273 = icmp sgt i64 %t272, 0 + br i1 %t273, label %then10268, label %endif10270 +then10268: + %t274 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.6912, i64 1, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a275 + %t279 = extractvalue { ptr, i64, i64 } { ptr @.str.6913, i64 13, i64 0 }, 0 + %t280 = icmp eq ptr %t279, null + %t281 = select i1 %t280, ptr @.str.6914, ptr %t279 + %t282 = call ptr @getenv(ptr %t281) + store { ptr, i64, i64 } zeroinitializer, ptr %a283 + call void @finch_str_from_c(ptr %a283, ptr %t282) + %t284 = load { ptr, i64, i64 }, ptr %a283 + store { ptr, i64, i64 } %t278, ptr %a286 + store { ptr, i64, i64 } %t284, ptr %a287 + call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287) + store { ptr, i64, i64 } %t278, ptr %a288 + call void @finch_str_drop(ptr %a288) + %t289 = load { ptr, i64, i64 }, ptr %a285 + %t290 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t289, ptr %a255 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + br label %endif10270 +endif10270: + %t292 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5 + %t293 = load i1, ptr %t292 + br i1 %t293, label %then10271, label %endif10273 +then10271: + %t294 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3 + %t295 = load i1, ptr %t294 + br i1 %t295, label %then10274, label %else10275 +then10274: + %t296 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.6915, i64 12, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + %t301 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t300, ptr %a255 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + br label %endif10276 +else10275: + %t303 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t303, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.6916, i64 8, i64 0 }, ptr %a306 + call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a304 + %t308 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t307, ptr %a255 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10276 +endif10276: + br label %endif10273 +endif10273: + store { ptr, i64, i64 } zeroinitializer, ptr %a310 + %t311 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6 + store i64 0, ptr %a312 + br label %each.cond10277 +each.cond10277: + %t313 = getelementptr inbounds { ptr, i64, i64 }, ptr %t311, i32 0, i32 1 + %t314 = load i64, ptr %t313 + %t315 = load i64, ptr %a312 + %t316 = icmp slt i64 %t315, %t314 + br i1 %t316, label %each.body10278, label %each.end10280 +each.body10278: + %t317 = load ptr, ptr %t311 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i64 %t315 + %t319 = load { ptr, i64, i64 }, ptr %t318 + store { ptr, i64, i64 } %t319, ptr %a320 + %t321 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t321, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.6918, i64 2, i64 0 }, ptr %a324 + %t325 = call i32 @finch_str_ends(ptr %a322, ptr %a324) + %t326 = icmp ne i32 %t325, 0 + br i1 %t326, label %then10281, label %else10282 +then10281: + %t327 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t328 = load { ptr, i64, i64 }, ptr %t327 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6919, i64 1, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a329 + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t334 = load i64, ptr %t333 + call void @finch_str_from_int(ptr %a335, i64 %t334) + %t336 = load { ptr, i64, i64 }, ptr %a335 + store { ptr, i64, i64 } %t332, ptr %a338 + store { ptr, i64, i64 } %t336, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t332, ptr %a340 + call void @finch_str_drop(ptr %a340) + store { ptr, i64, i64 } %t336, ptr %a341 + call void @finch_str_drop(ptr %a341) + %t342 = load { ptr, i64, i64 }, ptr %a337 + store { ptr, i64, i64 } %t342, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.6920, i64 2, i64 0 }, ptr %a345 + call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) + store { ptr, i64, i64 } %t342, ptr %a346 + call void @finch_str_drop(ptr %a346) + %t347 = load { ptr, i64, i64 }, ptr %a343 + store { ptr, i64, i64 } %t347, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.6921, i64 6, i64 0 }, ptr %a349 + %t350 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t351 = load i1, ptr %t350 + br i1 %t351, label %then10284, label %endif10286 +then10284: + %t352 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } { ptr @.str.6922, i64 0, i64 0 }, ptr %a349 + store { ptr, i64, i64 } %t352, ptr %a353 + call void @finch_str_drop(ptr %a353) + br label %endif10286 +endif10286: + %t354 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t354, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.6923, i64 4, i64 0 }, ptr %a357 + call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a355 + %t359 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } %t358, ptr %a361 + store { ptr, i64, i64 } %t359, ptr %a362 + call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) + store { ptr, i64, i64 } %t358, ptr %a363 + call void @finch_str_drop(ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a360 + store { ptr, i64, i64 } %t364, ptr %a366 + store { ptr, i64, i64 } { ptr @.str.6924, i64 4, i64 0 }, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t364, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a365 + %t370 = load { ptr, i64, i64 }, ptr %a320 + %t371 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t370) + store { ptr, i64, i64 } %t369, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t369, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t371, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a372 + store { ptr, i64, i64 } %t377, ptr %a379 + store { ptr, i64, i64 } { ptr @.str.6925, i64 4, i64 0 }, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + %t383 = load { ptr, i64, i64 }, ptr %a348 + %t384 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t383) + store { ptr, i64, i64 } %t382, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + store { ptr, i64, i64 } %t382, ptr %a388 + call void @finch_str_drop(ptr %a388) + store { ptr, i64, i64 } %t384, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t390, ptr %a392 + store { ptr, i64, i64 } { ptr @.str.6926, i64 3, i64 0 }, ptr %a393 + call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) + store { ptr, i64, i64 } %t390, ptr %a394 + call void @finch_str_drop(ptr %a394) + %t395 = load { ptr, i64, i64 }, ptr %a391 + %t396 = load { ptr, i64, i64 }, ptr %a112 + %t397 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t396) + store { ptr, i64, i64 } %t395, ptr %a399 + store { ptr, i64, i64 } %t397, ptr %a400 + call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) + store { ptr, i64, i64 } %t395, ptr %a401 + call void @finch_str_drop(ptr %a401) + store { ptr, i64, i64 } %t397, ptr %a402 + call void @finch_str_drop(ptr %a402) + %t403 = load { ptr, i64, i64 }, ptr %a398 + store { ptr, i64, i64 } %t403, ptr %a405 + store { ptr, i64, i64 } { ptr @.str.6927, i64 5, i64 0 }, ptr %a406 + call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406) + store { ptr, i64, i64 } %t403, ptr %a407 + call void @finch_str_drop(ptr %a407) + %t408 = load { ptr, i64, i64 }, ptr %a404 + %t409 = call i64 @finch.host.run({ ptr, i64, i64 } %t408) + store { ptr, i64, i64 } %t408, ptr %a410 + call void @finch_str_drop(ptr %a410) + store i64 %t409, ptr %a411 + %t412 = load i64, ptr %a411 + %t413 = icmp ne i64 %t412, 0 + br i1 %t413, label %then10287, label %endif10289 +then10287: + %t414 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t414, ptr %a415 + store { ptr, i64, i64 } zeroinitializer, ptr %a416 + store { ptr, i64, i64 } zeroinitializer, ptr %a417 + %t418 = call i32 @finch_try_read_file(ptr %a416, ptr %a415, ptr %a417) + %t419 = icmp eq i32 %t418, 0 + %t420 = load { ptr, i64, i64 }, ptr %a417 + %t421 = load { ptr, i64, i64 }, ptr %a416 + br i1 %t419, label %or.failed10290, label %or.ok10291 +or.failed10290: + store { ptr, i64, i64 } %t420, ptr %a422 + call void @finch_str_drop(ptr %a422) + br label %or.bend10292 +or.bend10292: + br label %or.end10293 +or.ok10291: + br label %or.end10293 +or.end10293: + %t423 = phi { ptr, i64, i64 } [ { ptr @.str.6928, i64 0, i64 0 }, %or.bend10292 ], [ %t421, %or.ok10291 ] + store { ptr, i64, i64 } %t423, ptr %a425 + store { ptr, i64, i64 } { ptr @.str.6929, i64 24, i64 0 }, ptr %a426 + call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) + store { ptr, i64, i64 } %t423, ptr %a427 + call void @finch_str_drop(ptr %a427) + %t428 = load { ptr, i64, i64 }, ptr %a424 + %t429 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t428, ptr %a431 + store { ptr, i64, i64 } %t429, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t428, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = extractvalue { ptr, i64, i64 } %t434, 1 + %t436 = trunc i64 %t435 to i32 + %t437 = extractvalue { ptr, i64, i64 } %t434, 0 + %t438 = icmp eq ptr %t437, null + %t439 = select i1 %t438, ptr @.str.6930, ptr %t437 + %t440 = call i32 (ptr, ...) @printf(ptr @.str.6931, i32 %t436, ptr %t439) + store { ptr, i64, i64 } %t434, ptr %a441 + call void @finch_str_drop(ptr %a441) + %t442 = call i32 (ptr, ...) @printf(ptr @.str.6932) + %t443 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t443) + %t444 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t444) + %t445 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.host.remove({ ptr, i64, i64 } %t445) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +endif10289: + %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t447 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t447, ptr %a448 + call void @finch_str_copy(ptr %a449, ptr %a448) + %t450 = load { ptr, i64, i64 }, ptr %a449 + %t451 = load i64, ptr %t446 + %t452 = add i64 %t451, 1 + call void @finch_arr_reserve(ptr %a310, i64 %t452, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t453 = load ptr, ptr %a310 + %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t451 + store { ptr, i64, i64 } %t450, ptr %t454 + store i64 %t452, ptr %t446 + %t455 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t455, ptr %a457 + store { ptr, i64, i64 } { ptr @.str.6933, i64 1, i64 0 }, ptr %a458 + call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) + %t459 = load { ptr, i64, i64 }, ptr %a456 + %t460 = load { ptr, i64, i64 }, ptr %a348 + %t461 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t460) + store { ptr, i64, i64 } %t459, ptr %a463 + store { ptr, i64, i64 } %t461, ptr %a464 + call void @finch_str_concat(ptr %a462, ptr %a463, ptr %a464) + store { ptr, i64, i64 } %t459, ptr %a465 + call void @finch_str_drop(ptr %a465) + store { ptr, i64, i64 } %t461, ptr %a466 + call void @finch_str_drop(ptr %a466) + %t467 = load { ptr, i64, i64 }, ptr %a462 + %t468 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t467, ptr %a255 + store { ptr, i64, i64 } %t468, ptr %a469 + call void @finch_str_drop(ptr %a469) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + br label %endif10283 +else10282: + %t470 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t470, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.6935, i64 2, i64 0 }, ptr %a473 + %t474 = call i32 @finch_str_ends(ptr %a471, ptr %a473) + %t475 = icmp ne i32 %t474, 0 + br label %logic.from10294 +logic.from10294: + br i1 %t475, label %logic.end10296, label %logic.rhs10295 +logic.rhs10295: + %t476 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t476, ptr %a477 + store { ptr, i64, i64 } { ptr @.str.6937, i64 2, i64 0 }, ptr %a479 + %t480 = call i32 @finch_str_ends(ptr %a477, ptr %a479) + %t481 = icmp ne i32 %t480, 0 + br label %logic.rend10297 +logic.rend10297: + br label %logic.end10296 +logic.end10296: + %t482 = phi i1 [ true, %logic.from10294 ], [ %t481, %logic.rend10297 ] + br i1 %t482, label %then10298, label %else10299 +then10298: + %t483 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t483, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.6938, i64 1, i64 0 }, ptr %a486 + call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) + %t487 = load { ptr, i64, i64 }, ptr %a484 + %t488 = load { ptr, i64, i64 }, ptr %a320 + %t489 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t488) + store { ptr, i64, i64 } %t487, ptr %a491 + store { ptr, i64, i64 } %t489, ptr %a492 + call void @finch_str_concat(ptr %a490, ptr %a491, ptr %a492) + store { ptr, i64, i64 } %t487, ptr %a493 + call void @finch_str_drop(ptr %a493) + store { ptr, i64, i64 } %t489, ptr %a494 + call void @finch_str_drop(ptr %a494) + %t495 = load { ptr, i64, i64 }, ptr %a490 + %t496 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t495, ptr %a255 + store { ptr, i64, i64 } %t496, ptr %a497 + call void @finch_str_drop(ptr %a497) + br label %endif10300 +else10299: + %t498 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t498, ptr %a500 + store { ptr, i64, i64 } { ptr @.str.6939, i64 1, i64 0 }, ptr %a501 + call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) + %t502 = load { ptr, i64, i64 }, ptr %a499 + %t503 = load { ptr, i64, i64 }, ptr %a320 + %t504 = load %S.platform.Target, ptr %a2 + %t505 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t503, %S.platform.Target %t504) + store { ptr, i64, i64 } %t502, ptr %a507 + store { ptr, i64, i64 } %t505, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t502, ptr %a509 + call void @finch_str_drop(ptr %a509) + store { ptr, i64, i64 } %t505, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a506 + %t512 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t511, ptr %a255 + store { ptr, i64, i64 } %t512, ptr %a513 + call void @finch_str_drop(ptr %a513) + br label %endif10300 +endif10300: + br label %endif10283 +endif10283: + br label %each.step10279 +each.step10279: + %t514 = load i64, ptr %a312 + %t515 = add i64 %t514, 1 + store i64 %t515, ptr %a312 + br label %each.cond10277 +each.end10280: + %t516 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t516, ptr %a518 + store { ptr, i64, i64 } { ptr @.str.6940, i64 3, i64 0 }, ptr %a519 + call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519) + %t520 = load { ptr, i64, i64 }, ptr %a517 + %t521 = load { ptr, i64, i64 }, ptr %a112 + %t522 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t521) + store { ptr, i64, i64 } %t520, ptr %a524 + store { ptr, i64, i64 } %t522, ptr %a525 + call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) + store { ptr, i64, i64 } %t520, ptr %a526 + call void @finch_str_drop(ptr %a526) + store { ptr, i64, i64 } %t522, ptr %a527 + call void @finch_str_drop(ptr %a527) + %t528 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t528, ptr %a530 + store { ptr, i64, i64 } { ptr @.str.6941, i64 5, i64 0 }, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + %t534 = call i64 @finch.host.run({ ptr, i64, i64 } %t533) + store { ptr, i64, i64 } %t533, ptr %a535 + call void @finch_str_drop(ptr %a535) + store i64 %t534, ptr %a536 + %t537 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t537, ptr %a538 + store { ptr, i64, i64 } zeroinitializer, ptr %a539 + store { ptr, i64, i64 } zeroinitializer, ptr %a540 + %t541 = call i32 @finch_try_read_file(ptr %a539, ptr %a538, ptr %a540) + %t542 = icmp eq i32 %t541, 0 + %t543 = load { ptr, i64, i64 }, ptr %a540 + %t544 = load { ptr, i64, i64 }, ptr %a539 + br i1 %t542, label %or.failed10301, label %or.ok10302 +or.failed10301: + store { ptr, i64, i64 } %t543, ptr %a545 + call void @finch_str_drop(ptr %a545) + br label %or.bend10303 +or.bend10303: + br label %or.end10304 +or.ok10302: + br label %or.end10304 +or.end10304: + %t546 = phi { ptr, i64, i64 } [ { ptr @.str.6942, i64 0, i64 0 }, %or.bend10303 ], [ %t544, %or.ok10302 ] + store { ptr, i64, i64 } %t546, ptr %a547 + %t548 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t548) + %t549 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t549) + store i64 0, ptr %a550 + br label %each.cond10305 +each.cond10305: + %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t552 = load i64, ptr %t551 + %t553 = load i64, ptr %a550 + %t554 = icmp slt i64 %t553, %t552 + br i1 %t554, label %each.body10306, label %each.end10308 +each.body10306: + %t555 = load ptr, ptr %a310 + %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t555, i64 %t553 + %t557 = load { ptr, i64, i64 }, ptr %t556 + store { ptr, i64, i64 } %t557, ptr %a558 + %t559 = load { ptr, i64, i64 }, ptr %a558 + call void @finch.host.remove({ ptr, i64, i64 } %t559) + br label %each.step10307 +each.step10307: + %t560 = load i64, ptr %a550 + %t561 = add i64 %t560, 1 + store i64 %t561, ptr %a550 + br label %each.cond10305 +each.end10308: + %t562 = load i64, ptr %a536 + %t563 = icmp eq i64 %t562, 127 + br i1 %t563, label %then10309, label %endif10311 +then10309: + %t564 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.6943, i64 42, i64 0 }, ptr %a566 + store { ptr, i64, i64 } %t564, ptr %a567 + call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) + %t568 = load { ptr, i64, i64 }, ptr %a565 + store { ptr, i64, i64 } %t568, ptr %a570 + store { ptr, i64, i64 } { ptr @.str.6944, i64 32, i64 0 }, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + store { ptr, i64, i64 } %t568, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a569 + %t574 = extractvalue { ptr, i64, i64 } %t573, 1 + %t575 = trunc i64 %t574 to i32 + %t576 = extractvalue { ptr, i64, i64 } %t573, 0 + %t577 = icmp eq ptr %t576, null + %t578 = select i1 %t577, ptr @.str.6945, ptr %t576 + %t579 = call i32 (ptr, ...) @printf(ptr @.str.6946, i32 %t575, ptr %t578) + store { ptr, i64, i64 } %t573, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = call i32 (ptr, ...) @printf(ptr @.str.6947) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +endif10311: + %t582 = load i64, ptr %a536 + %t583 = icmp ne i64 %t582, 0 + br i1 %t583, label %then10312, label %endif10314 +then10312: + %t584 = load { ptr, i64, i64 }, ptr %a547 + %t585 = load %S.cimport.CImports, ptr %a3 + %t586 = load %S.platform.Target, ptr %a2 + %t587 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t584, %S.cimport.CImports %t585, %S.platform.Target %t586) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 %t587 +endif10314: + %t588 = getelementptr inbounds { ptr, i64, i64 }, ptr %a547, i32 0, i32 1 + %t589 = load i64, ptr %t588 + %t590 = icmp sgt i64 %t589, 0 + br i1 %t590, label %then10315, label %endif10317 +then10315: + %t591 = load { ptr, i64, i64 }, ptr %a547 + %t592 = extractvalue { ptr, i64, i64 } %t591, 1 + %t593 = trunc i64 %t592 to i32 + %t594 = extractvalue { ptr, i64, i64 } %t591, 0 + %t595 = icmp eq ptr %t594, null + %t596 = select i1 %t595, ptr @.str.6948, ptr %t594 + %t597 = call i32 (ptr, ...) @printf(ptr @.str.6949, i32 %t593, ptr %t596) + %t598 = call i32 (ptr, ...) @printf(ptr @.str.6950) + br label %endif10317 +endif10317: + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 0 +} + +define internal i64 @finch.lsp.hexval(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 48 + br label %logic.from10318 +logic.from10318: + br i1 %t3, label %logic.rhs10319, label %logic.end10320 +logic.rhs10319: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 57 + br label %logic.rend10321 +logic.rend10321: + br label %logic.end10320 +logic.end10320: + %t6 = phi i1 [ false, %logic.from10318 ], [ %t5, %logic.rend10321 ] + br i1 %t6, label %then10322, label %endif10324 +then10322: + %t7 = load i8, ptr %a1 + %t8 = zext i8 %t7 to i64 + %t9 = zext i8 48 to i64 + %t10 = sub i64 %t8, %t9 + ret i64 %t10 +endif10324: + %t11 = load i8, ptr %a1 + %t12 = icmp uge i8 %t11, 97 + br label %logic.from10325 +logic.from10325: + br i1 %t12, label %logic.rhs10326, label %logic.end10327 +logic.rhs10326: + %t13 = load i8, ptr %a1 + %t14 = icmp ule i8 %t13, 102 + br label %logic.rend10328 +logic.rend10328: + br label %logic.end10327 +logic.end10327: + %t15 = phi i1 [ false, %logic.from10325 ], [ %t14, %logic.rend10328 ] + br i1 %t15, label %then10329, label %endif10331 +then10329: + %t16 = load i8, ptr %a1 + %t17 = zext i8 %t16 to i64 + %t18 = zext i8 97 to i64 + %t19 = sub i64 %t17, %t18 + %t20 = add i64 %t19, 10 + ret i64 %t20 +endif10331: + %t21 = load i8, ptr %a1 + %t22 = icmp uge i8 %t21, 65 + br label %logic.from10332 +logic.from10332: + br i1 %t22, label %logic.rhs10333, label %logic.end10334 +logic.rhs10333: + %t23 = load i8, ptr %a1 + %t24 = icmp ule i8 %t23, 70 + br label %logic.rend10335 +logic.rend10335: + br label %logic.end10334 +logic.end10334: + %t25 = phi i1 [ false, %logic.from10332 ], [ %t24, %logic.rend10335 ] + br i1 %t25, label %then10336, label %endif10338 +then10336: + %t26 = load i8, ptr %a1 + %t27 = zext i8 %t26 to i64 + %t28 = zext i8 65 to i64 + %t29 = sub i64 %t27, %t28 + %t30 = add i64 %t29, 10 + ret i64 %t30 +endif10338: + ret i64 -1 +} + +define internal void @finch.drop.arr_u8(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i64, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6952, i64 7, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then10339, label %endif10341 +then10339: + %t13 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t13, ptr %a14 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t17 = load i64, ptr %t16 + call void @finch_str_sub(ptr %a15, ptr %a14, i64 7, i64 %t17, ptr @.str.6953, i64 114) + %t18 = load { ptr, i64, i64 }, ptr %a15 + %t19 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t18, ptr %a6 + store { ptr, i64, i64 } %t19, ptr %a20 + call void @finch_str_drop(ptr %a20) + br label %endif10341 +endif10341: + store { ptr, i64, i64 } zeroinitializer, ptr %a21 + store i64 0, ptr %a22 + br label %while.cond10342 +while.cond10342: + %t23 = load i64, ptr %a22 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = icmp slt i64 %t23, %t25 + br i1 %t26, label %while.body10343, label %while.end10344 +while.body10343: + %t27 = load i64, ptr %a22 + %t28 = load { ptr, i64, i64 }, ptr %a6 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 %t27, %t29 + br i1 %t30, label %range10345, label %inrange10346 +range10345: + call void @finch_panic_index(ptr @.str.6954, i64 119, i64 %t27, i64 %t29) + unreachable +inrange10346: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds i8, ptr %t31, i64 %t27 + %t33 = load i8, ptr %t32 + %t34 = icmp eq i8 %t33, 37 + br label %logic.from10347 +logic.from10347: + br i1 %t34, label %logic.rhs10348, label %logic.end10349 +logic.rhs10348: + %t35 = load i64, ptr %a22 + %t36 = add i64 %t35, 2 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 0 + %t40 = icmp slt i64 %t36, %t39 + br label %logic.rend10350 +logic.rend10350: + br label %logic.end10349 +logic.end10349: + %t41 = phi i1 [ false, %logic.from10347 ], [ %t40, %logic.rend10350 ] + br label %logic.from10351 +logic.from10351: + br i1 %t41, label %logic.rhs10352, label %logic.end10353 +logic.rhs10352: + %t42 = load i64, ptr %a22 + %t43 = add i64 %t42, 1 + %t44 = load { ptr, i64, i64 }, ptr %a6 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 %t43, %t45 + br i1 %t46, label %range10354, label %inrange10355 +range10354: + call void @finch_panic_index(ptr @.str.6955, i64 119, i64 %t43, i64 %t45) + unreachable +inrange10355: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 + %t49 = load i8, ptr %t48 + %t50 = call i64 @finch.lsp.hexval(i8 %t49) + %t51 = icmp sge i64 %t50, 0 + br label %logic.rend10356 +logic.rend10356: + br label %logic.end10353 +logic.end10353: + %t52 = phi i1 [ false, %logic.from10351 ], [ %t51, %logic.rend10356 ] + br label %logic.from10357 +logic.from10357: + br i1 %t52, label %logic.rhs10358, label %logic.end10359 +logic.rhs10358: + %t53 = load i64, ptr %a22 + %t54 = add i64 %t53, 2 + %t55 = load { ptr, i64, i64 }, ptr %a6 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range10360, label %inrange10361 +range10360: + call void @finch_panic_index(ptr @.str.6956, i64 119, i64 %t54, i64 %t56) + unreachable +inrange10361: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 + %t60 = load i8, ptr %t59 + %t61 = call i64 @finch.lsp.hexval(i8 %t60) + %t62 = icmp sge i64 %t61, 0 + br label %logic.rend10362 +logic.rend10362: + br label %logic.end10359 +logic.end10359: + %t63 = phi i1 [ false, %logic.from10357 ], [ %t62, %logic.rend10362 ] + br i1 %t63, label %then10363, label %else10364 +then10363: + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 + %t65 = load i64, ptr %a22 + %t66 = add i64 %t65, 1 + %t67 = load { ptr, i64, i64 }, ptr %a6 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 %t66, %t68 + br i1 %t69, label %range10366, label %inrange10367 +range10366: + call void @finch_panic_index(ptr @.str.6957, i64 120, i64 %t66, i64 %t68) + unreachable +inrange10367: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds i8, ptr %t70, i64 %t66 + %t72 = load i8, ptr %t71 + %t73 = call i64 @finch.lsp.hexval(i8 %t72) + %t74 = mul i64 %t73, 16 + %t75 = load i64, ptr %a22 + %t76 = add i64 %t75, 2 + %t77 = load { ptr, i64, i64 }, ptr %a6 + %t78 = extractvalue { ptr, i64, i64 } %t77, 1 + %t79 = icmp uge i64 %t76, %t78 + br i1 %t79, label %range10368, label %inrange10369 +range10368: + call void @finch_panic_index(ptr @.str.6958, i64 120, i64 %t76, i64 %t78) + unreachable +inrange10369: + %t80 = extractvalue { ptr, i64, i64 } %t77, 0 + %t81 = getelementptr inbounds i8, ptr %t80, i64 %t76 + %t82 = load i8, ptr %t81 + %t83 = call i64 @finch.lsp.hexval(i8 %t82) + %t84 = add i64 %t74, %t83 + %t85 = trunc i64 %t84 to i8 + %t86 = load i64, ptr %t64 + %t87 = add i64 %t86, 1 + call void @finch_arr_reserve(ptr %a21, i64 %t87, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t88 = load ptr, ptr %a21 + %t89 = getelementptr inbounds i8, ptr %t88, i64 %t86 + store i8 %t85, ptr %t89 + store i64 %t87, ptr %t64 + %t90 = load i64, ptr %a22 + %t91 = add i64 %t90, 3 + store i64 %t91, ptr %a22 + br label %endif10365 +else10364: + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 + %t93 = load i64, ptr %a22 + %t94 = load { ptr, i64, i64 }, ptr %a6 + %t95 = extractvalue { ptr, i64, i64 } %t94, 1 + %t96 = icmp uge i64 %t93, %t95 + br i1 %t96, label %range10370, label %inrange10371 +range10370: + call void @finch_panic_index(ptr @.str.6959, i64 123, i64 %t93, i64 %t95) + unreachable +inrange10371: + %t97 = extractvalue { ptr, i64, i64 } %t94, 0 + %t98 = getelementptr inbounds i8, ptr %t97, i64 %t93 + %t99 = load i8, ptr %t98 + %t100 = load i64, ptr %t92 + %t101 = add i64 %t100, 1 + call void @finch_arr_reserve(ptr %a21, i64 %t101, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t102 = load ptr, ptr %a21 + %t103 = getelementptr inbounds i8, ptr %t102, i64 %t100 + store i8 %t99, ptr %t103 + store i64 %t101, ptr %t92 + %t104 = load i64, ptr %a22 + %t105 = add i64 %t104, 1 + store i64 %t105, ptr %a22 + br label %endif10365 +endif10365: + br label %while.cond10342 +while.end10344: + %t106 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } zeroinitializer, ptr %a107 + store { ptr, i64, i64 } %t106, ptr %a108 + call void @finch_str_from_bytes(ptr %a107, ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a107 + call void @finch.drop.arr_u8(ptr %a21) + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t109 +} + +define internal { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a18 = alloca i8, align 16 + %a21 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6960, i64 16, i64 0 }, ptr %a2 + %t3 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t4 = call ptr @finch_alloc(i64 %t3) + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 + store { ptr, i64, i64 } { ptr @.str.6961, i64 7, i64 0 }, ptr %t5 + %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 1 + %t8 = insertvalue { ptr, i64, i64 } %t7, i64 1, 2 + store { ptr, i64, i64 } %t8, ptr %a9 + store i64 0, ptr %a10 + br label %each.cond10372 +each.cond10372: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = load i64, ptr %a10 + %t14 = icmp slt i64 %t13, %t12 + br i1 %t14, label %each.body10373, label %each.end10375 +each.body10373: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds i8, ptr %t15, i64 %t13 + %t17 = load i8, ptr %t16 + store i8 %t17, ptr %a18 + %t19 = load i8, ptr %a18 + %t20 = zext i8 %t19 to i64 + store i64 %t20, ptr %a21 + %t22 = load i8, ptr %a18 + %t23 = icmp uge i8 %t22, 97 + br label %logic.from10376 +logic.from10376: + br i1 %t23, label %logic.rhs10377, label %logic.end10378 +logic.rhs10377: + %t24 = load i8, ptr %a18 + %t25 = icmp ule i8 %t24, 122 + br label %logic.rend10379 +logic.rend10379: + br label %logic.end10378 +logic.end10378: + %t26 = phi i1 [ false, %logic.from10376 ], [ %t25, %logic.rend10379 ] + br label %logic.from10380 +logic.from10380: + br i1 %t26, label %logic.end10382, label %logic.rhs10381 +logic.rhs10381: + %t27 = load i8, ptr %a18 + %t28 = icmp uge i8 %t27, 65 + br label %logic.from10383 +logic.from10383: + br i1 %t28, label %logic.rhs10384, label %logic.end10385 +logic.rhs10384: + %t29 = load i8, ptr %a18 + %t30 = icmp ule i8 %t29, 90 + br label %logic.rend10386 +logic.rend10386: + br label %logic.end10385 +logic.end10385: + %t31 = phi i1 [ false, %logic.from10383 ], [ %t30, %logic.rend10386 ] + br label %logic.rend10387 +logic.rend10387: + br label %logic.end10382 +logic.end10382: + %t32 = phi i1 [ true, %logic.from10380 ], [ %t31, %logic.rend10387 ] + br label %logic.from10388 +logic.from10388: + br i1 %t32, label %logic.end10390, label %logic.rhs10389 +logic.rhs10389: + %t33 = load i8, ptr %a18 + %t34 = icmp uge i8 %t33, 48 + br label %logic.from10391 +logic.from10391: + br i1 %t34, label %logic.rhs10392, label %logic.end10393 +logic.rhs10392: + %t35 = load i8, ptr %a18 + %t36 = icmp ule i8 %t35, 57 + br label %logic.rend10394 +logic.rend10394: + br label %logic.end10393 +logic.end10393: + %t37 = phi i1 [ false, %logic.from10391 ], [ %t36, %logic.rend10394 ] + br label %logic.rend10395 +logic.rend10395: + br label %logic.end10390 +logic.end10390: + %t38 = phi i1 [ true, %logic.from10388 ], [ %t37, %logic.rend10395 ] + br label %logic.from10396 +logic.from10396: + br i1 %t38, label %logic.end10398, label %logic.rhs10397 +logic.rhs10397: + store { ptr, i64, i64 } { ptr @.str.6962, i64 5, i64 0 }, ptr %a39 + %t41 = load i8, ptr %a18 + call void @finch_str_from_char(ptr %a42, i8 signext %t41) + %t43 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t43, ptr %a44 + %t45 = call i64 @finch_str_find(ptr %a39, ptr %a44) + %t46 = icmp sge i64 %t45, 0 + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %logic.rend10399 +logic.rend10399: + br label %logic.end10398 +logic.end10398: + %t48 = phi i1 [ true, %logic.from10396 ], [ %t46, %logic.rend10399 ] + br i1 %t48, label %then10400, label %else10401 +then10400: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t50 = load i8, ptr %a18 + call void @finch_str_from_char(ptr %a51, i8 signext %t50) + %t52 = load { ptr, i64, i64 }, ptr %a51 + %t53 = load i64, ptr %t49 + %t54 = add i64 %t53, 1 + call void @finch_arr_reserve(ptr %a9, i64 %t54, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t55 = load ptr, ptr %a9 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i64 %t53 + store { ptr, i64, i64 } %t52, ptr %t56 + store i64 %t54, ptr %t49 + br label %endif10402 +else10401: + %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t58 = load i64, ptr %a21 + %t59 = sdiv i64 %t58, 16 + %t60 = srem i64 %t59, 16 + %t61 = load { ptr, i64, i64 }, ptr %a2 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 %t60, %t62 + br i1 %t63, label %range10403, label %inrange10404 +range10403: + call void @finch_panic_index(ptr @.str.6965, i64 138, i64 %t60, i64 %t62) + unreachable +inrange10404: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 + %t66 = load i8, ptr %t65 + call void @finch_str_from_char(ptr %a67, i8 signext %t66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.6964, i64 1, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + %t74 = load i64, ptr %a21 + %t75 = srem i64 %t74, 16 + %t76 = load { ptr, i64, i64 }, ptr %a2 + %t77 = extractvalue { ptr, i64, i64 } %t76, 1 + %t78 = icmp uge i64 %t75, %t77 + br i1 %t78, label %range10405, label %inrange10406 +range10405: + call void @finch_panic_index(ptr @.str.6966, i64 138, i64 %t75, i64 %t77) + unreachable +inrange10406: + %t79 = extractvalue { ptr, i64, i64 } %t76, 0 + %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 + %t81 = load i8, ptr %t80 + call void @finch_str_from_char(ptr %a82, i8 signext %t81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t73, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t73, ptr %a87 + call void @finch_str_drop(ptr %a87) + store { ptr, i64, i64 } %t83, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a84 + %t90 = load i64, ptr %t57 + %t91 = add i64 %t90, 1 + call void @finch_arr_reserve(ptr %a9, i64 %t91, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t92 = load ptr, ptr %a9 + %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t90 + store { ptr, i64, i64 } %t89, ptr %t93 + store i64 %t91, ptr %t57 + br label %endif10402 +endif10402: + br label %each.step10374 +each.step10374: + %t94 = load i64, ptr %a10 + %t95 = add i64 %t94, 1 + store i64 %t95, ptr %a10 + br label %each.cond10372 +each.end10375: + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6967, i64 0, i64 0 }, ptr %a97 + call void @finch_str_join(ptr %a98, ptr %a9, ptr %a97) + %t99 = load { ptr, i64, i64 }, ptr %a98 + call void @finch.drop.arr_str(ptr %a9) + call void @finch_str_drop(ptr %a2) + ret { ptr, i64, i64 } %t99 +} + +define internal { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + store i64 0, ptr %a3 + br label %while.cond10407 +while.cond10407: + %t4 = load i64, ptr %a3 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = icmp slt i64 %t4, %t6 + br i1 %t7, label %while.body10408, label %while.end10409 +while.body10408: + %t8 = load i64, ptr %a3 + %t9 = load { ptr, i64, i64 }, ptr %a1 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range10410, label %inrange10411 +range10410: + call void @finch_panic_index(ptr @.str.6968, i64 149, i64 %t8, i64 %t10) + unreachable +inrange10411: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 + %t14 = load i8, ptr %t13 + %t15 = icmp eq i8 %t14, 92 + br label %logic.from10412 +logic.from10412: + br i1 %t15, label %logic.rhs10413, label %logic.end10414 +logic.rhs10413: + %t16 = load i64, ptr %a3 + %t17 = add i64 %t16, 1 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp slt i64 %t17, %t19 + br label %logic.rend10415 +logic.rend10415: + br label %logic.end10414 +logic.end10414: + %t21 = phi i1 [ false, %logic.from10412 ], [ %t20, %logic.rend10415 ] + br i1 %t21, label %then10416, label %else10417 +then10416: + %t22 = load i64, ptr %a3 + %t23 = add i64 %t22, 1 + %t24 = load { ptr, i64, i64 }, ptr %a1 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range10419, label %inrange10420 +range10419: + call void @finch_panic_index(ptr @.str.6969, i64 150, i64 %t23, i64 %t25) + unreachable +inrange10420: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 + %t29 = load i8, ptr %t28 + %t30 = icmp eq i8 %t29, 110 + br i1 %t30, label %then10421, label %else10422 +then10421: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = add i64 %t32, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t33, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t34 = load ptr, ptr %a2 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i64 %t32 + store { ptr, i64, i64 } { ptr @.str.6970, i64 1, i64 0 }, ptr %t35 + store i64 %t33, ptr %t31 + br label %endif10423 +else10422: + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t37 = load i64, ptr %a3 + %t38 = add i64 %t37, 1 + %t39 = load { ptr, i64, i64 }, ptr %a1 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range10424, label %inrange10425 +range10424: + call void @finch_panic_index(ptr @.str.6971, i64 153, i64 %t38, i64 %t40) + unreachable +inrange10425: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 + %t44 = load i8, ptr %t43 + call void @finch_str_from_char(ptr %a45, i8 signext %t44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + %t47 = load i64, ptr %t36 + %t48 = add i64 %t47, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t49 = load ptr, ptr %a2 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 + store { ptr, i64, i64 } %t46, ptr %t50 + store i64 %t48, ptr %t36 + br label %endif10423 +endif10423: + %t51 = load i64, ptr %a3 + %t52 = add i64 %t51, 2 + store i64 %t52, ptr %a3 + br label %endif10418 +else10417: + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t54 = load i64, ptr %a3 + %t55 = load { ptr, i64, i64 }, ptr %a1 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range10426, label %inrange10427 +range10426: + call void @finch_panic_index(ptr @.str.6972, i64 157, i64 %t54, i64 %t56) + unreachable +inrange10427: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 + %t60 = load i8, ptr %t59 + call void @finch_str_from_char(ptr %a61, i8 signext %t60) + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = load i64, ptr %t53 + %t64 = add i64 %t63, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t65 = load ptr, ptr %a2 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 + store { ptr, i64, i64 } %t62, ptr %t66 + store i64 %t64, ptr %t53 + %t67 = load i64, ptr %a3 + %t68 = add i64 %t67, 1 + store i64 %t68, ptr %a3 + br label %endif10418 +endif10418: + br label %while.cond10407 +while.end10409: + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6973, i64 0, i64 0 }, ptr %a70 + call void @finch_str_join(ptr %a71, ptr %a2, ptr %a70) + %t72 = load { ptr, i64, i64 }, ptr %a71 + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t72 +} + +define internal { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %p0, i64 %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6975, i64 1, i64 0 }, ptr %a6 + call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load i64, ptr %a2 + %t11 = icmp sge i64 %t10, 1 + br label %logic.from10428 +logic.from10428: + br i1 %t11, label %logic.rhs10429, label %logic.end10430 +logic.rhs10429: + %t12 = load i64, ptr %a2 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sle i64 %t12, %t14 + br label %logic.rend10431 +logic.rend10431: + br label %logic.end10430 +logic.end10430: + %t16 = phi i1 [ false, %logic.from10428 ], [ %t15, %logic.rend10431 ] + br i1 %t16, label %then10432, label %endif10434 +then10432: + %t17 = load i64, ptr %a2 + %t18 = sub i64 %t17, 1 + %t19 = load { ptr, i64, i64 }, ptr %a9 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range10435, label %inrange10436 +range10435: + call void @finch_panic_index(ptr @.str.6976, i64 167, i64 %t18, i64 %t20) + unreachable +inrange10436: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + call void @finch.drop.arr_str(ptr %a9) + ret { ptr, i64, i64 } %t27 +endif10434: + call void @finch.drop.arr_str(ptr %a9) + ret { ptr, i64, i64 } { ptr @.str.6977, i64 0, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.lsp.readLine() { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i32, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } zeroinitializer, ptr %a1 + br label %while.cond10437 +while.cond10437: + br label %while.body10438 +while.body10438: + %t2 = call i32 @getchar() + store i32 %t2, ptr %a3 + %t4 = load i32, ptr %a3 + %t5 = icmp slt i32 %t4, 0 + br i1 %t5, label %then10440, label %endif10442 +then10440: + call void @finch.drop.arr_u8(ptr %a1) + ret { ptr, i64, i64 } { ptr @.str.6978, i64 0, i64 0 } +endif10442: + %t6 = load i32, ptr %a3 + %t7 = icmp eq i32 %t6, 10 + br i1 %t7, label %then10443, label %endif10445 +then10443: + br label %while.end10439 +endif10445: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t9 = load i32, ptr %a3 + %t10 = trunc i32 %t9 to i8 + %t11 = load i64, ptr %t8 + %t12 = add i64 %t11, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t12, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t13 = load ptr, ptr %a1 + %t14 = getelementptr inbounds i8, ptr %t13, i64 %t11 + store i8 %t10, ptr %t14 + store i64 %t12, ptr %t8 + br label %while.cond10437 +while.end10439: + %t15 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a16 + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_from_bytes(ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.6980, i64 1, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_ends(ptr %a21, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br i1 %t25, label %then10446, label %endif10448 +then10446: + %t26 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t26, ptr %a27 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = sub i64 %t30, 1 + call void @finch_str_sub(ptr %a28, ptr %a27, i64 0, i64 %t31, ptr @.str.6981, i64 188) + %t32 = load { ptr, i64, i64 }, ptr %a28 + %t33 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t32, ptr %a19 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_drop(ptr %a34) + br label %endif10448 +endif10448: + %t35 = load { ptr, i64, i64 }, ptr %a19 + call void @finch.drop.arr_u8(ptr %a1) + ret { ptr, i64, i64 } %t35 +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() { +entry: + %a1 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca i64, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca i64, align 16 + %a45 = alloca i32, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + store i64 0, ptr %a1 + br label %while.cond10449 +while.cond10449: + br label %while.body10450 +while.body10450: + %t2 = call { ptr, i64, i64 } @finch.lsp.readLine() + store { ptr, i64, i64 } %t2, ptr %a3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = icmp eq i64 %t5, 0 + br i1 %t6, label %then10452, label %endif10454 +then10452: + %t7 = load i64, ptr %a1 + %t8 = icmp sgt i64 %t7, 0 + br i1 %t8, label %then10455, label %endif10457 +then10455: + call void @finch_str_drop(ptr %a3) + br label %while.end10451 +endif10457: + %t9 = call ptr @finch_std_stream(i32 0) + %t10 = call i32 @feof(ptr %t9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then10458, label %endif10460 +then10458: + call void @finch_str_drop(ptr %a3) + %t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6982, i64 32, i64 0 }, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t12 +endif10460: + call void @finch_str_drop(ptr %a3) + br label %while.cond10449 +endif10454: + %t13 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.6984, i64 15, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_starts(ptr %a14, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br i1 %t18, label %then10461, label %endif10463 +then10461: + %t19 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t19, ptr %a20 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t23 = load i64, ptr %t22 + call void @finch_str_sub(ptr %a21, ptr %a20, i64 15, i64 %t23, ptr @.str.6985, i64 208) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_trim(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + store { ptr, i64, i64 } zeroinitializer, ptr %a29 + store i64 0, ptr %a30 + store { ptr, i64, i64 } %t27, ptr %a31 + %t32 = call i32 @finch_str_try_int(ptr %a31, ptr %a30, ptr %a29) + %t33 = icmp eq i32 %t32, 0 + %t34 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load i64, ptr %a30 + br i1 %t33, label %or.failed10464, label %or.ok10465 +or.failed10464: + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_drop(ptr %a37) + br label %or.bend10466 +or.bend10466: + br label %or.end10467 +or.ok10465: + br label %or.end10467 +or.end10467: + %t38 = phi i64 [ 0, %or.bend10466 ], [ %t36, %or.ok10465 ] + store i64 %t38, ptr %a1 + br label %endif10463 +endif10463: + call void @finch_str_drop(ptr %a3) + br label %while.cond10449 +while.end10451: + store { ptr, i64, i64 } zeroinitializer, ptr %a39 + %t40 = load i64, ptr %a1 + store i64 0, ptr %a41 + br label %for.cond10468 +for.cond10468: + %t42 = load i64, ptr %a41 + %t43 = icmp slt i64 %t42, %t40 + br i1 %t43, label %for.body10469, label %for.end10471 +for.body10469: + %t44 = call i32 @getchar() + store i32 %t44, ptr %a45 + %t46 = load i32, ptr %a45 + %t47 = icmp slt i32 %t46, 0 + br i1 %t47, label %then10472, label %endif10474 +then10472: + call void @finch.drop.arr_u8(ptr %a39) + %t48 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6987, i64 25, i64 0 }, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t48 +endif10474: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a39, i32 0, i32 1 + %t50 = load i32, ptr %a45 + %t51 = trunc i32 %t50 to i8 + %t52 = load i64, ptr %t49 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %a39, i64 %t53, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %a39 + %t55 = getelementptr inbounds i8, ptr %t54, i64 %t52 + store i8 %t51, ptr %t55 + store i64 %t53, ptr %t49 + br label %for.step10470 +for.step10470: + %t56 = load i64, ptr %a41 + %t57 = add i64 %t56, 1 + store i64 %t57, ptr %a41 + br label %for.cond10468 +for.end10471: + %t58 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } zeroinitializer, ptr %a59 + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_from_bytes(ptr %a59, ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a59 + %t62 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %t61) + %t63 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 0 + %t64 = xor i1 %t63, true + %t65 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 2 + %t66 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 1 + store { ptr, i64, i64 } %t61, ptr %a67 + call void @finch_str_drop(ptr %a67) + br i1 %t64, label %try.failed10475, label %try.ok10476 +try.failed10475: + call void @finch.drop.arr_u8(ptr %a39) + %t68 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t65, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t68 +try.ok10476: + call void @finch.drop.arr_u8(ptr %a39) + %t69 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t70 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t69, %S.json.Json %t66, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t70 +} + +define internal void @finch.lsp.send(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = load %S.json.Json, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %t2) + store { ptr, i64, i64 } %t3, ptr %a4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + call void @finch_str_from_int(ptr %a7, i64 %t6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.6988, i64 16, i64 0 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6989, i64 4, i64 0 }, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load { ptr, i64, i64 }, ptr %a19 + %t21 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t20, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load { ptr, i64, i64 }, ptr %a26 + %t28 = extractvalue { ptr, i64, i64 } %t27, 0 + %t29 = icmp eq ptr %t28, null + %t30 = select i1 %t29, ptr @.str.6990, ptr %t28 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = call ptr @finch_std_stream(i32 1) + %t34 = call i64 @fwrite(ptr %t30, i64 1, i64 %t32, ptr %t33) + %t35 = call ptr @finch_std_stream(i32 1) + %t36 = call i32 @fflush(ptr %t35) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a19) + call void @finch_str_drop(ptr %a4) + ret void +} + +define internal void @finch.drop.arr_S_json_Json(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10477 +n.cond10477: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10478, label %n.end10479 +n.body10478: + %t7 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t5 + call void @finch.drop.S_json_Json(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10477 +n.end10479: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_json_Json(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_S_json_Json(ptr %t2) + %t3 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t3) + ret void +} + +define internal void @finch.lsp.reply(%S.json.Json %p0, %S.json.Json %p1) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca %S.json.Json, align 16 + %a4 = alloca %S.json.Json, align 16 + %a6 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + store %S.json.Json %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t3, ptr %a4 + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6992, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6991, i64 7, i64 0 }, %S.json.Json %t5) + store %S.json.Json %t5, ptr %a6 + call void @finch.drop.S_json_Json(ptr %a6) + %t7 = load %S.json.Json, ptr %a1 + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6993, i64 2, i64 0 }, %S.json.Json %t7) + %t8 = load %S.json.Json, ptr %a2 + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6994, i64 6, i64 0 }, %S.json.Json %t8) + %t9 = load %S.json.Json, ptr %a4 + call void @finch.lsp.send(%S.json.Json %t9) + call void @finch.drop.S_json_Json(ptr %a4) + ret void +} + +define internal void @finch.lsp.notify({ ptr, i64, i64 } %p0, %S.json.Json %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.json.Json, align 16 + %a4 = alloca %S.json.Json, align 16 + %a6 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.json.Json %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t3, ptr %a4 + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6996, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6995, i64 7, i64 0 }, %S.json.Json %t5) + store %S.json.Json %t5, ptr %a6 + call void @finch.drop.S_json_Json(ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a1 + %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6997, i64 6, i64 0 }, %S.json.Json %t8) + store %S.json.Json %t8, ptr %a9 + call void @finch.drop.S_json_Json(ptr %a9) + %t10 = load %S.json.Json, ptr %a2 + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6998, i64 6, i64 0 }, %S.json.Json %t10) + %t11 = load %S.json.Json, ptr %a4 + call void @finch.lsp.send(%S.json.Json %t11) + call void @finch.drop.S_json_Json(ptr %a4) + ret void +} + +define internal %S.json.Json @finch.lsp.num(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + store i64 %p0, ptr %a1 + %t2 = load i64, ptr %a1 + %t3 = sitofp i64 %t2 to double + %t4 = call %S.json.Json @finch.json.new_number(double %t3) + ret %S.json.Json %t4 +} + +define internal %S.json.Json @finch.lsp.position(i64 %p0, i64 %p1) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i64, align 16 + %a4 = alloca %S.json.Json, align 16 + %a7 = alloca %S.json.Json, align 16 + %a10 = alloca %S.json.Json, align 16 + store i64 %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t3, ptr %a4 + %t5 = load i64, ptr %a1 + %t6 = call %S.json.Json @finch.lsp.num(i64 %t5) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6999, i64 4, i64 0 }, %S.json.Json %t6) + store %S.json.Json %t6, ptr %a7 + call void @finch.drop.S_json_Json(ptr %a7) + %t8 = load i64, ptr %a2 + %t9 = call %S.json.Json @finch.lsp.num(i64 %t8) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7000, i64 9, i64 0 }, %S.json.Json %t9) + store %S.json.Json %t9, ptr %a10 + call void @finch.drop.S_json_Json(ptr %a10) + %t11 = load %S.json.Json, ptr %a4 + ret %S.json.Json %t11 +} + +define internal %S.json.Json @finch.lsp.range(i64 %p0, i64 %p1, i64 %p2) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a5 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + %a13 = alloca %S.json.Json, align 16 + store i64 %p0, ptr %a1 + store i64 %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t4, ptr %a5 + %t6 = load i64, ptr %a1 + %t7 = load i64, ptr %a2 + %t8 = call %S.json.Json @finch.lsp.position(i64 %t6, i64 %t7) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7001, i64 5, i64 0 }, %S.json.Json %t8) + store %S.json.Json %t8, ptr %a9 + call void @finch.drop.S_json_Json(ptr %a9) + %t10 = load i64, ptr %a1 + %t11 = load i64, ptr %a3 + %t12 = call %S.json.Json @finch.lsp.position(i64 %t10, i64 %t11) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7002, i64 3, i64 0 }, %S.json.Json %t12) + store %S.json.Json %t12, ptr %a13 + call void @finch.drop.S_json_Json(ptr %a13) + %t14 = load %S.json.Json, ptr %a5 + ret %S.json.Json %t14 +} + +define internal { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.7004, i64 1, i64 0 }, ptr %a5 + call void @finch_str_split(ptr %a6, ptr %a3, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + ret { ptr, i64, i64 } %t7 +} + +define internal i64 @finch.lsp.intOf({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a3 + store i64 0, ptr %a4 + store { ptr, i64, i64 } %t2, ptr %a5 + %t6 = call i32 @finch_str_try_int(ptr %a5, ptr %a4, ptr %a3) + %t7 = icmp eq i32 %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a3 + %t9 = load i64, ptr %a4 + br i1 %t7, label %or.failed10480, label %or.ok10481 +or.failed10480: + store { ptr, i64, i64 } %t8, ptr %a10 + call void @finch_str_drop(ptr %a10) + br label %or.bend10482 +or.bend10482: + br label %or.end10483 +or.ok10481: + br label %or.end10483 +or.end10483: + %t11 = phi i64 [ 0, %or.bend10482 ], [ %t9, %or.ok10481 ] + ret i64 %t11 +} + +define internal %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca i64, align 16 + %a56 = alloca i64, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca i64, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.7006, i64 9, i64 0 }, ptr %a5 + %t6 = call i64 @finch_str_find(ptr %a3, ptr %a5) + store i64 %t6, ptr %a7 + %t8 = load i64, ptr %a7 + %t9 = icmp slt i64 %t8, 0 + br i1 %t9, label %then10484, label %endif10486 +then10484: + ret %S.lsp.Diag zeroinitializer +endif10486: + %t10 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t10, ptr %a11 + %t13 = load i64, ptr %a7 + call void @finch_str_sub(ptr %a12, ptr %a11, i64 0, i64 %t13, ptr @.str.7007, i64 280) + %t14 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t14, ptr %a15 + %t16 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t16, ptr %a17 + %t19 = load i64, ptr %a7 + %t20 = add i64 %t19, 9 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t22 = load i64, ptr %t21 + call void @finch_str_sub(ptr %a18, ptr %a17, i64 %t20, i64 %t22, ptr @.str.7008, i64 281) + %t23 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t23, ptr %a24 + %t25 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.7010, i64 1, i64 0 }, ptr %a28 + call void @finch_str_split(ptr %a29, ptr %a26, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t30, ptr %a31 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = icmp slt i64 %t33, 3 + br i1 %t34, label %then10487, label %endif10489 +then10487: + call void @finch.drop.arr_str(ptr %a31) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a15) + ret %S.lsp.Diag zeroinitializer +endif10489: + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t36 = load i64, ptr %t35 + %t37 = sub i64 %t36, 1 + %t38 = load { ptr, i64, i64 }, ptr %a31 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 %t37, %t39 + br i1 %t40, label %range10490, label %inrange10491 +range10490: + call void @finch_panic_index(ptr @.str.7011, i64 287, i64 %t37, i64 %t39) + unreachable +inrange10491: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t37 + %t43 = load { ptr, i64, i64 }, ptr %t42 + %t44 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t43) + store i64 %t44, ptr %a45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = sub i64 %t47, 2 + %t49 = load { ptr, i64, i64 }, ptr %a31 + %t50 = extractvalue { ptr, i64, i64 } %t49, 1 + %t51 = icmp uge i64 %t48, %t50 + br i1 %t51, label %range10492, label %inrange10493 +range10492: + call void @finch_panic_index(ptr @.str.7012, i64 288, i64 %t48, i64 %t50) + unreachable +inrange10493: + %t52 = extractvalue { ptr, i64, i64 } %t49, 0 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t48 + %t54 = load { ptr, i64, i64 }, ptr %t53 + %t55 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t54) + store i64 %t55, ptr %a56 + store { ptr, i64, i64 } zeroinitializer, ptr %a57 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t59 = load i64, ptr %t58 + %t60 = sub i64 %t59, 2 + store i64 0, ptr %a61 + br label %for.cond10494 +for.cond10494: + %t62 = load i64, ptr %a61 + %t63 = icmp slt i64 %t62, %t60 + br i1 %t63, label %for.body10495, label %for.end10497 +for.body10495: + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 + %t65 = load i64, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a31 + %t67 = extractvalue { ptr, i64, i64 } %t66, 1 + %t68 = icmp uge i64 %t65, %t67 + br i1 %t68, label %range10498, label %inrange10499 +range10498: + call void @finch_panic_index(ptr @.str.7013, i64 291, i64 %t65, i64 %t67) + unreachable +inrange10499: + %t69 = extractvalue { ptr, i64, i64 } %t66, 0 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t65 + %t71 = load { ptr, i64, i64 }, ptr %t70 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_copy(ptr %a73, ptr %a72) + %t74 = load { ptr, i64, i64 }, ptr %a73 + %t75 = load i64, ptr %t64 + %t76 = add i64 %t75, 1 + call void @finch_arr_reserve(ptr %a57, i64 %t76, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t77 = load ptr, ptr %a57 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i64 %t75 + store { ptr, i64, i64 } %t74, ptr %t78 + store i64 %t76, ptr %t64 + br label %for.step10496 +for.step10496: + %t79 = load i64, ptr %a61 + %t80 = add i64 %t79, 1 + store i64 %t80, ptr %a61 + br label %for.cond10494 +for.end10497: + %t81 = insertvalue %S.lsp.Diag zeroinitializer, i1 true, 0 + %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7014, i64 1, i64 0 }, ptr %a83 + call void @finch_str_join(ptr %a84, ptr %a57, ptr %a83) + %t85 = load { ptr, i64, i64 }, ptr %a84 + %t86 = insertvalue %S.lsp.Diag %t81, { ptr, i64, i64 } %t85, 1 + %t87 = load i64, ptr %a56 + %t88 = insertvalue %S.lsp.Diag %t86, i64 %t87, 2 + %t89 = load i64, ptr %a45 + %t90 = insertvalue %S.lsp.Diag %t88, i64 %t89, 3 + %t91 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t91, ptr %a92 + call void @finch_str_copy(ptr %a93, ptr %a92) + %t94 = load { ptr, i64, i64 }, ptr %a93 + %t95 = insertvalue %S.lsp.Diag %t90, { ptr, i64, i64 } %t94, 4 + call void @finch.drop.arr_str(ptr %a57) + call void @finch.drop.arr_str(ptr %a31) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a15) + ret %S.lsp.Diag %t95 +} + +define internal void @finch.drop.S_lsp_Diag(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Diag, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Diag, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.lsp.Analysis, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca i64, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca %S.lsp.Diag, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.lsp.Analysis zeroinitializer, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.7016, i64 1, i64 0 }, ptr %a6 + call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store i64 0, ptr %a10 + br label %each.cond10500 +each.cond10500: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = load i64, ptr %a10 + %t14 = icmp slt i64 %t13, %t12 + br i1 %t14, label %each.body10501, label %each.end10503 +each.body10501: + %t15 = load ptr, ptr %a9 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.7018, i64 1, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_starts(ptr %a20, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br i1 %t24, label %then10504, label %else10505 +then10504: + %t25 = load { ptr, i64, i64 }, ptr %a18 + %t26 = call { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %t25) + store { ptr, i64, i64 } %t26, ptr %a27 + %t28 = load { ptr, i64, i64 }, ptr %a27 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 0, %t29 + br i1 %t30, label %range10507, label %inrange10508 +range10507: + call void @finch_panic_index(ptr @.str.7019, i64 301, i64 0, i64 %t29) + unreachable +inrange10508: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i64 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_copy(ptr %a35, ptr %a34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t36, ptr %a37 + %t38 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t38, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.7020, i64 2, i64 0 }, ptr %a40 + %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br label %logic.from10509 +logic.from10509: + br i1 %t42, label %logic.rhs10510, label %logic.end10511 +logic.rhs10510: + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t44 = load i64, ptr %t43 + %t45 = icmp sge i64 %t44, 9 + br label %logic.rend10512 +logic.rend10512: + br label %logic.end10511 +logic.end10511: + %t46 = phi i1 [ false, %logic.from10509 ], [ %t45, %logic.rend10512 ] + br i1 %t46, label %then10513, label %else10514 +then10513: + %t47 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 0 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1 + %t49 = load { ptr, i64, i64 }, ptr %a27 + %t50 = extractvalue { ptr, i64, i64 } %t49, 1 + %t51 = icmp uge i64 1, %t50 + br i1 %t51, label %range10516, label %inrange10517 +range10516: + call void @finch_panic_index(ptr @.str.7021, i64 303, i64 1, i64 %t50) + unreachable +inrange10517: + %t52 = extractvalue { ptr, i64, i64 } %t49, 0 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 1 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_copy(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + %t58 = insertvalue %S.lsp.Ref zeroinitializer, { ptr, i64, i64 } %t57, 0 + %t59 = load { ptr, i64, i64 }, ptr %a27 + %t60 = extractvalue { ptr, i64, i64 } %t59, 1 + %t61 = icmp uge i64 2, %t60 + br i1 %t61, label %range10518, label %inrange10519 +range10518: + call void @finch_panic_index(ptr @.str.7022, i64 303, i64 2, i64 %t60) + unreachable +inrange10519: + %t62 = extractvalue { ptr, i64, i64 } %t59, 0 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 2 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t64) + %t66 = insertvalue %S.lsp.Ref %t58, i64 %t65, 1 + %t67 = load { ptr, i64, i64 }, ptr %a27 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 3, %t68 + br i1 %t69, label %range10520, label %inrange10521 +range10520: + call void @finch_panic_index(ptr @.str.7023, i64 303, i64 3, i64 %t68) + unreachable +inrange10521: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 3 + %t72 = load { ptr, i64, i64 }, ptr %t71 + %t73 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t72) + %t74 = insertvalue %S.lsp.Ref %t66, i64 %t73, 2 + %t75 = load { ptr, i64, i64 }, ptr %a27 + %t76 = extractvalue { ptr, i64, i64 } %t75, 1 + %t77 = icmp uge i64 4, %t76 + br i1 %t77, label %range10522, label %inrange10523 +range10522: + call void @finch_panic_index(ptr @.str.7024, i64 303, i64 4, i64 %t76) + unreachable +inrange10523: + %t78 = extractvalue { ptr, i64, i64 } %t75, 0 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 4 + %t80 = load { ptr, i64, i64 }, ptr %t79 + %t81 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t80) + %t82 = insertvalue %S.lsp.Ref %t74, i64 %t81, 3 + %t83 = load { ptr, i64, i64 }, ptr %a27 + %t84 = extractvalue { ptr, i64, i64 } %t83, 1 + %t85 = icmp uge i64 5, %t84 + br i1 %t85, label %range10524, label %inrange10525 +range10524: + call void @finch_panic_index(ptr @.str.7025, i64 303, i64 5, i64 %t84) + unreachable +inrange10525: + %t86 = extractvalue { ptr, i64, i64 } %t83, 0 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 5 + %t88 = load { ptr, i64, i64 }, ptr %t87 + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_copy(ptr %a90, ptr %a89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = insertvalue %S.lsp.Ref %t82, { ptr, i64, i64 } %t91, 4 + %t93 = load { ptr, i64, i64 }, ptr %a27 + %t94 = extractvalue { ptr, i64, i64 } %t93, 1 + %t95 = icmp uge i64 6, %t94 + br i1 %t95, label %range10526, label %inrange10527 +range10526: + call void @finch_panic_index(ptr @.str.7026, i64 303, i64 6, i64 %t94) + unreachable +inrange10527: + %t96 = extractvalue { ptr, i64, i64 } %t93, 0 + %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 6 + %t98 = load { ptr, i64, i64 }, ptr %t97 + %t99 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t98) + %t100 = insertvalue %S.lsp.Ref %t92, i64 %t99, 5 + %t101 = load { ptr, i64, i64 }, ptr %a27 + %t102 = extractvalue { ptr, i64, i64 } %t101, 1 + %t103 = icmp uge i64 7, %t102 + br i1 %t103, label %range10528, label %inrange10529 +range10528: + call void @finch_panic_index(ptr @.str.7027, i64 303, i64 7, i64 %t102) + unreachable +inrange10529: + %t104 = extractvalue { ptr, i64, i64 } %t101, 0 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 7 + %t106 = load { ptr, i64, i64 }, ptr %t105 + %t107 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t106) + %t108 = insertvalue %S.lsp.Ref %t100, i64 %t107, 6 + %t109 = load { ptr, i64, i64 }, ptr %a27 + %t110 = extractvalue { ptr, i64, i64 } %t109, 1 + %t111 = icmp uge i64 8, %t110 + br i1 %t111, label %range10530, label %inrange10531 +range10530: + call void @finch_panic_index(ptr @.str.7028, i64 303, i64 8, i64 %t110) + unreachable +inrange10531: + %t112 = extractvalue { ptr, i64, i64 } %t109, 0 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 8 + %t114 = load { ptr, i64, i64 }, ptr %t113 + %t115 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t114) + %t116 = insertvalue %S.lsp.Ref %t108, { ptr, i64, i64 } %t115, 7 + %t117 = load i64, ptr %t48 + %t118 = add i64 %t117, 1 + call void @finch_arr_reserve(ptr %t47, i64 %t118, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) + %t119 = load ptr, ptr %t47 + %t120 = getelementptr inbounds %S.lsp.Ref, ptr %t119, i64 %t117 + store %S.lsp.Ref %t116, ptr %t120 + store i64 %t118, ptr %t48 + br label %endif10515 +else10514: + %t121 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.7029, i64 2, i64 0 }, ptr %a123 + %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) + %t125 = icmp ne i32 %t124, 0 + br label %logic.from10532 +logic.from10532: + br i1 %t125, label %logic.rhs10533, label %logic.end10534 +logic.rhs10533: + %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t127 = load i64, ptr %t126 + %t128 = icmp sge i64 %t127, 9 + br label %logic.rend10535 +logic.rend10535: + br label %logic.end10534 +logic.end10534: + %t129 = phi i1 [ false, %logic.from10532 ], [ %t128, %logic.rend10535 ] + br i1 %t129, label %then10536, label %else10537 +then10536: + %t130 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 1 + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 + %t132 = load { ptr, i64, i64 }, ptr %a27 + %t133 = extractvalue { ptr, i64, i64 } %t132, 1 + %t134 = icmp uge i64 1, %t133 + br i1 %t134, label %range10539, label %inrange10540 +range10539: + call void @finch_panic_index(ptr @.str.7030, i64 305, i64 1, i64 %t133) + unreachable +inrange10540: + %t135 = extractvalue { ptr, i64, i64 } %t132, 0 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i64 1 + %t137 = load { ptr, i64, i64 }, ptr %t136 + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_copy(ptr %a139, ptr %a138) + %t140 = load { ptr, i64, i64 }, ptr %a139 + %t141 = insertvalue %S.lsp.VarRec zeroinitializer, { ptr, i64, i64 } %t140, 0 + %t142 = load { ptr, i64, i64 }, ptr %a27 + %t143 = extractvalue { ptr, i64, i64 } %t142, 1 + %t144 = icmp uge i64 2, %t143 + br i1 %t144, label %range10541, label %inrange10542 +range10541: + call void @finch_panic_index(ptr @.str.7031, i64 305, i64 2, i64 %t143) + unreachable +inrange10542: + %t145 = extractvalue { ptr, i64, i64 } %t142, 0 + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 2 + %t147 = load { ptr, i64, i64 }, ptr %t146 + store { ptr, i64, i64 } %t147, ptr %a148 + call void @finch_str_copy(ptr %a149, ptr %a148) + %t150 = load { ptr, i64, i64 }, ptr %a149 + %t151 = insertvalue %S.lsp.VarRec %t141, { ptr, i64, i64 } %t150, 1 + %t152 = load { ptr, i64, i64 }, ptr %a27 + %t153 = extractvalue { ptr, i64, i64 } %t152, 1 + %t154 = icmp uge i64 3, %t153 + br i1 %t154, label %range10543, label %inrange10544 +range10543: + call void @finch_panic_index(ptr @.str.7032, i64 305, i64 3, i64 %t153) + unreachable +inrange10544: + %t155 = extractvalue { ptr, i64, i64 } %t152, 0 + %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i64 3 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_copy(ptr %a159, ptr %a158) + %t160 = load { ptr, i64, i64 }, ptr %a159 + %t161 = insertvalue %S.lsp.VarRec %t151, { ptr, i64, i64 } %t160, 2 + %t162 = load { ptr, i64, i64 }, ptr %a27 + %t163 = extractvalue { ptr, i64, i64 } %t162, 1 + %t164 = icmp uge i64 4, %t163 + br i1 %t164, label %range10545, label %inrange10546 +range10545: + call void @finch_panic_index(ptr @.str.7033, i64 305, i64 4, i64 %t163) + unreachable +inrange10546: + %t165 = extractvalue { ptr, i64, i64 } %t162, 0 + %t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %t165, i64 4 + %t167 = load { ptr, i64, i64 }, ptr %t166 + %t168 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t167) + %t169 = insertvalue %S.lsp.VarRec %t161, i64 %t168, 3 + %t170 = load { ptr, i64, i64 }, ptr %a27 + %t171 = extractvalue { ptr, i64, i64 } %t170, 1 + %t172 = icmp uge i64 5, %t171 + br i1 %t172, label %range10547, label %inrange10548 +range10547: + call void @finch_panic_index(ptr @.str.7034, i64 305, i64 5, i64 %t171) + unreachable +inrange10548: + %t173 = extractvalue { ptr, i64, i64 } %t170, 0 + %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 5 + %t175 = load { ptr, i64, i64 }, ptr %t174 + %t176 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t175) + %t177 = insertvalue %S.lsp.VarRec %t169, i64 %t176, 4 + %t178 = load { ptr, i64, i64 }, ptr %a27 + %t179 = extractvalue { ptr, i64, i64 } %t178, 1 + %t180 = icmp uge i64 6, %t179 + br i1 %t180, label %range10549, label %inrange10550 +range10549: + call void @finch_panic_index(ptr @.str.7035, i64 305, i64 6, i64 %t179) + unreachable +inrange10550: + %t181 = extractvalue { ptr, i64, i64 } %t178, 0 + %t182 = getelementptr inbounds { ptr, i64, i64 }, ptr %t181, i64 6 + %t183 = load { ptr, i64, i64 }, ptr %t182 + store { ptr, i64, i64 } %t183, ptr %a184 + call void @finch_str_copy(ptr %a185, ptr %a184) + %t186 = load { ptr, i64, i64 }, ptr %a185 + %t187 = insertvalue %S.lsp.VarRec %t177, { ptr, i64, i64 } %t186, 5 + %t188 = load { ptr, i64, i64 }, ptr %a27 + %t189 = extractvalue { ptr, i64, i64 } %t188, 1 + %t190 = icmp uge i64 7, %t189 + br i1 %t190, label %range10551, label %inrange10552 +range10551: + call void @finch_panic_index(ptr @.str.7036, i64 305, i64 7, i64 %t189) + unreachable +inrange10552: + %t191 = extractvalue { ptr, i64, i64 } %t188, 0 + %t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %t191, i64 7 + %t193 = load { ptr, i64, i64 }, ptr %t192 + %t194 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t193) + %t195 = insertvalue %S.lsp.VarRec %t187, i64 %t194, 6 + %t196 = load { ptr, i64, i64 }, ptr %a27 + %t197 = extractvalue { ptr, i64, i64 } %t196, 1 + %t198 = icmp uge i64 8, %t197 + br i1 %t198, label %range10553, label %inrange10554 +range10553: + call void @finch_panic_index(ptr @.str.7037, i64 305, i64 8, i64 %t197) + unreachable +inrange10554: + %t199 = extractvalue { ptr, i64, i64 } %t196, 0 + %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 8 + %t201 = load { ptr, i64, i64 }, ptr %t200 + %t202 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t201) + %t203 = insertvalue %S.lsp.VarRec %t195, i64 %t202, 7 + %t204 = load i64, ptr %t131 + %t205 = add i64 %t204, 1 + call void @finch_arr_reserve(ptr %t130, i64 %t205, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) + %t206 = load ptr, ptr %t130 + %t207 = getelementptr inbounds %S.lsp.VarRec, ptr %t206, i64 %t204 + store %S.lsp.VarRec %t203, ptr %t207 + store i64 %t205, ptr %t131 + br label %endif10538 +else10537: + %t208 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.7038, i64 2, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br label %logic.from10555 +logic.from10555: + br i1 %t212, label %logic.rhs10556, label %logic.end10557 +logic.rhs10556: + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t214 = load i64, ptr %t213 + %t215 = icmp sge i64 %t214, 10 + br label %logic.rend10558 +logic.rend10558: + br label %logic.end10557 +logic.end10557: + %t216 = phi i1 [ false, %logic.from10555 ], [ %t215, %logic.rend10558 ] + br i1 %t216, label %then10559, label %else10560 +then10559: + %t217 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 2 + %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %t217, i32 0, i32 1 + %t219 = load { ptr, i64, i64 }, ptr %a27 + %t220 = extractvalue { ptr, i64, i64 } %t219, 1 + %t221 = icmp uge i64 1, %t220 + br i1 %t221, label %range10562, label %inrange10563 +range10562: + call void @finch_panic_index(ptr @.str.7039, i64 307, i64 1, i64 %t220) + unreachable +inrange10563: + %t222 = extractvalue { ptr, i64, i64 } %t219, 0 + %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i64 1 + %t224 = load { ptr, i64, i64 }, ptr %t223 + store { ptr, i64, i64 } %t224, ptr %a225 + call void @finch_str_copy(ptr %a226, ptr %a225) + %t227 = load { ptr, i64, i64 }, ptr %a226 + %t228 = insertvalue %S.lsp.FnRec zeroinitializer, { ptr, i64, i64 } %t227, 0 + %t229 = load { ptr, i64, i64 }, ptr %a27 + %t230 = extractvalue { ptr, i64, i64 } %t229, 1 + %t231 = icmp uge i64 2, %t230 + br i1 %t231, label %range10564, label %inrange10565 +range10564: + call void @finch_panic_index(ptr @.str.7040, i64 307, i64 2, i64 %t230) + unreachable +inrange10565: + %t232 = extractvalue { ptr, i64, i64 } %t229, 0 + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 2 + %t234 = load { ptr, i64, i64 }, ptr %t233 + store { ptr, i64, i64 } %t234, ptr %a235 + call void @finch_str_copy(ptr %a236, ptr %a235) + %t237 = load { ptr, i64, i64 }, ptr %a236 + %t238 = insertvalue %S.lsp.FnRec %t228, { ptr, i64, i64 } %t237, 1 + %t239 = load { ptr, i64, i64 }, ptr %a27 + %t240 = extractvalue { ptr, i64, i64 } %t239, 1 + %t241 = icmp uge i64 3, %t240 + br i1 %t241, label %range10566, label %inrange10567 +range10566: + call void @finch_panic_index(ptr @.str.7041, i64 307, i64 3, i64 %t240) + unreachable +inrange10567: + %t242 = extractvalue { ptr, i64, i64 } %t239, 0 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 3 + %t244 = load { ptr, i64, i64 }, ptr %t243 + store { ptr, i64, i64 } %t244, ptr %a245 + call void @finch_str_copy(ptr %a246, ptr %a245) + %t247 = load { ptr, i64, i64 }, ptr %a246 + %t248 = insertvalue %S.lsp.FnRec %t238, { ptr, i64, i64 } %t247, 2 + %t249 = load { ptr, i64, i64 }, ptr %a27 + %t250 = extractvalue { ptr, i64, i64 } %t249, 1 + %t251 = icmp uge i64 4, %t250 + br i1 %t251, label %range10568, label %inrange10569 +range10568: + call void @finch_panic_index(ptr @.str.7042, i64 307, i64 4, i64 %t250) + unreachable +inrange10569: + %t252 = extractvalue { ptr, i64, i64 } %t249, 0 + %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i64 4 + %t254 = load { ptr, i64, i64 }, ptr %t253 + store { ptr, i64, i64 } %t254, ptr %a255 + call void @finch_str_copy(ptr %a256, ptr %a255) + %t257 = load { ptr, i64, i64 }, ptr %a256 + %t258 = insertvalue %S.lsp.FnRec %t248, { ptr, i64, i64 } %t257, 3 + %t259 = load { ptr, i64, i64 }, ptr %a27 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 5, %t260 + br i1 %t261, label %range10570, label %inrange10571 +range10570: + call void @finch_panic_index(ptr @.str.7043, i64 307, i64 5, i64 %t260) + unreachable +inrange10571: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 5 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t264) + %t266 = insertvalue %S.lsp.FnRec %t258, i64 %t265, 4 + %t267 = load { ptr, i64, i64 }, ptr %a27 + %t268 = extractvalue { ptr, i64, i64 } %t267, 1 + %t269 = icmp uge i64 6, %t268 + br i1 %t269, label %range10572, label %inrange10573 +range10572: + call void @finch_panic_index(ptr @.str.7044, i64 307, i64 6, i64 %t268) + unreachable +inrange10573: + %t270 = extractvalue { ptr, i64, i64 } %t267, 0 + %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i64 6 + %t272 = load { ptr, i64, i64 }, ptr %t271 + %t273 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t272) + %t274 = insertvalue %S.lsp.FnRec %t266, i64 %t273, 5 + %t275 = load { ptr, i64, i64 }, ptr %a27 + %t276 = extractvalue { ptr, i64, i64 } %t275, 1 + %t277 = icmp uge i64 7, %t276 + br i1 %t277, label %range10574, label %inrange10575 +range10574: + call void @finch_panic_index(ptr @.str.7045, i64 307, i64 7, i64 %t276) + unreachable +inrange10575: + %t278 = extractvalue { ptr, i64, i64 } %t275, 0 + %t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i64 7 + %t280 = load { ptr, i64, i64 }, ptr %t279 + %t281 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t280) + %t282 = insertvalue %S.lsp.FnRec %t274, i64 %t281, 6 + %t283 = load { ptr, i64, i64 }, ptr %a27 + %t284 = extractvalue { ptr, i64, i64 } %t283, 1 + %t285 = icmp uge i64 8, %t284 + br i1 %t285, label %range10576, label %inrange10577 +range10576: + call void @finch_panic_index(ptr @.str.7046, i64 307, i64 8, i64 %t284) + unreachable +inrange10577: + %t286 = extractvalue { ptr, i64, i64 } %t283, 0 + %t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t286, i64 8 + %t288 = load { ptr, i64, i64 }, ptr %t287 + %t289 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t288) + %t290 = insertvalue %S.lsp.FnRec %t282, { ptr, i64, i64 } %t289, 7 + %t291 = load { ptr, i64, i64 }, ptr %a27 + %t292 = extractvalue { ptr, i64, i64 } %t291, 1 + %t293 = icmp uge i64 9, %t292 + br i1 %t293, label %range10578, label %inrange10579 +range10578: + call void @finch_panic_index(ptr @.str.7047, i64 307, i64 9, i64 %t292) + unreachable +inrange10579: + %t294 = extractvalue { ptr, i64, i64 } %t291, 0 + %t295 = getelementptr inbounds { ptr, i64, i64 }, ptr %t294, i64 9 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.7049, i64 1, i64 0 }, ptr %a299 + call void @finch_str_split(ptr %a300, ptr %a297, ptr %a299) + %t301 = load { ptr, i64, i64 }, ptr %a300 + %t302 = insertvalue %S.lsp.FnRec %t290, { ptr, i64, i64 } %t301, 8 + %t303 = load i64, ptr %t218 + %t304 = add i64 %t303, 1 + call void @finch_arr_reserve(ptr %t217, i64 %t304, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) + %t305 = load ptr, ptr %t217 + %t306 = getelementptr inbounds %S.lsp.FnRec, ptr %t305, i64 %t303 + store %S.lsp.FnRec %t302, ptr %t306 + store i64 %t304, ptr %t218 + br label %endif10561 +else10560: + %t307 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t307, ptr %a308 + store { ptr, i64, i64 } { ptr @.str.7050, i64 2, i64 0 }, ptr %a309 + %t310 = call i32 @finch_str_eq(ptr %a308, ptr %a309) + %t311 = icmp ne i32 %t310, 0 + br label %logic.from10580 +logic.from10580: + br i1 %t311, label %logic.rhs10581, label %logic.end10582 +logic.rhs10581: + %t312 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t313 = load i64, ptr %t312 + %t314 = icmp sge i64 %t313, 6 + br label %logic.rend10583 +logic.rend10583: + br label %logic.end10582 +logic.end10582: + %t315 = phi i1 [ false, %logic.from10580 ], [ %t314, %logic.rend10583 ] + br i1 %t315, label %then10584, label %else10585 +then10584: + %t316 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i32 0, i32 1 + %t318 = load { ptr, i64, i64 }, ptr %a27 + %t319 = extractvalue { ptr, i64, i64 } %t318, 1 + %t320 = icmp uge i64 1, %t319 + br i1 %t320, label %range10587, label %inrange10588 +range10587: + call void @finch_panic_index(ptr @.str.7051, i64 309, i64 1, i64 %t319) + unreachable +inrange10588: + %t321 = extractvalue { ptr, i64, i64 } %t318, 0 + %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i64 1 + %t323 = load { ptr, i64, i64 }, ptr %t322 + store { ptr, i64, i64 } %t323, ptr %a324 + call void @finch_str_copy(ptr %a325, ptr %a324) + %t326 = load { ptr, i64, i64 }, ptr %a325 + %t327 = insertvalue %S.lsp.StructRec zeroinitializer, { ptr, i64, i64 } %t326, 0 + %t328 = load { ptr, i64, i64 }, ptr %a27 + %t329 = extractvalue { ptr, i64, i64 } %t328, 1 + %t330 = icmp uge i64 2, %t329 + br i1 %t330, label %range10589, label %inrange10590 +range10589: + call void @finch_panic_index(ptr @.str.7052, i64 309, i64 2, i64 %t329) + unreachable +inrange10590: + %t331 = extractvalue { ptr, i64, i64 } %t328, 0 + %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i64 2 + %t333 = load { ptr, i64, i64 }, ptr %t332 + store { ptr, i64, i64 } %t333, ptr %a334 + call void @finch_str_copy(ptr %a335, ptr %a334) + %t336 = load { ptr, i64, i64 }, ptr %a335 + %t337 = insertvalue %S.lsp.StructRec %t327, { ptr, i64, i64 } %t336, 1 + %t338 = load { ptr, i64, i64 }, ptr %a27 + %t339 = extractvalue { ptr, i64, i64 } %t338, 1 + %t340 = icmp uge i64 3, %t339 + br i1 %t340, label %range10591, label %inrange10592 +range10591: + call void @finch_panic_index(ptr @.str.7053, i64 309, i64 3, i64 %t339) + unreachable +inrange10592: + %t341 = extractvalue { ptr, i64, i64 } %t338, 0 + %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 3 + %t343 = load { ptr, i64, i64 }, ptr %t342 + store { ptr, i64, i64 } %t343, ptr %a344 + call void @finch_str_copy(ptr %a345, ptr %a344) + %t346 = load { ptr, i64, i64 }, ptr %a345 + %t347 = insertvalue %S.lsp.StructRec %t337, { ptr, i64, i64 } %t346, 2 + %t348 = load { ptr, i64, i64 }, ptr %a27 + %t349 = extractvalue { ptr, i64, i64 } %t348, 1 + %t350 = icmp uge i64 4, %t349 + br i1 %t350, label %range10593, label %inrange10594 +range10593: + call void @finch_panic_index(ptr @.str.7054, i64 309, i64 4, i64 %t349) + unreachable +inrange10594: + %t351 = extractvalue { ptr, i64, i64 } %t348, 0 + %t352 = getelementptr inbounds { ptr, i64, i64 }, ptr %t351, i64 4 + %t353 = load { ptr, i64, i64 }, ptr %t352 + %t354 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t353) + %t355 = insertvalue %S.lsp.StructRec %t347, i64 %t354, 3 + %t356 = load { ptr, i64, i64 }, ptr %a27 + %t357 = extractvalue { ptr, i64, i64 } %t356, 1 + %t358 = icmp uge i64 5, %t357 + br i1 %t358, label %range10595, label %inrange10596 +range10595: + call void @finch_panic_index(ptr @.str.7055, i64 309, i64 5, i64 %t357) + unreachable +inrange10596: + %t359 = extractvalue { ptr, i64, i64 } %t356, 0 + %t360 = getelementptr inbounds { ptr, i64, i64 }, ptr %t359, i64 5 + %t361 = load { ptr, i64, i64 }, ptr %t360 + %t362 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t361) + %t363 = insertvalue %S.lsp.StructRec %t355, i64 %t362, 4 + %t364 = load i64, ptr %t317 + %t365 = add i64 %t364, 1 + call void @finch_arr_reserve(ptr %t316, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) + %t366 = load ptr, ptr %t316 + %t367 = getelementptr inbounds %S.lsp.StructRec, ptr %t366, i64 %t364 + store %S.lsp.StructRec %t363, ptr %t367 + store i64 %t365, ptr %t317 + br label %endif10586 +else10585: + %t368 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t368, ptr %a369 + store { ptr, i64, i64 } { ptr @.str.7056, i64 3, i64 0 }, ptr %a370 + %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) + %t372 = icmp ne i32 %t371, 0 + br label %logic.from10597 +logic.from10597: + br i1 %t372, label %logic.rhs10598, label %logic.end10599 +logic.rhs10598: + %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t374 = load i64, ptr %t373 + %t375 = icmp sge i64 %t374, 5 + br label %logic.rend10600 +logic.rend10600: + br label %logic.end10599 +logic.end10599: + %t376 = phi i1 [ false, %logic.from10597 ], [ %t375, %logic.rend10600 ] + br label %logic.from10601 +logic.from10601: + br i1 %t376, label %logic.rhs10602, label %logic.end10603 +logic.rhs10602: + %t377 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %t377, i32 0, i32 1 + %t379 = load i64, ptr %t378 + %t380 = icmp sgt i64 %t379, 0 + br label %logic.rend10604 +logic.rend10604: + br label %logic.end10603 +logic.end10603: + %t381 = phi i1 [ false, %logic.from10601 ], [ %t380, %logic.rend10604 ] + br i1 %t381, label %then10605, label %else10606 +then10605: + %t382 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %t382, i32 0, i32 1 + %t384 = load i64, ptr %t383 + %t385 = sub i64 %t384, 1 + store i64 %t385, ptr %a386 + %t387 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t388 = load i64, ptr %a386 + %t389 = load { ptr, i64, i64 }, ptr %t387 + %t390 = extractvalue { ptr, i64, i64 } %t389, 1 + %t391 = icmp uge i64 %t388, %t390 + br i1 %t391, label %range10608, label %inrange10609 +range10608: + call void @finch_panic_index(ptr @.str.7057, i64 312, i64 %t388, i64 %t390) + unreachable +inrange10609: + %t392 = extractvalue { ptr, i64, i64 } %t389, 0 + %t393 = getelementptr inbounds %S.lsp.StructRec, ptr %t392, i64 %t388 + %t394 = getelementptr inbounds %S.lsp.StructRec, ptr %t393, i32 0, i32 5 + %t395 = getelementptr inbounds { ptr, i64, i64 }, ptr %t394, i32 0, i32 1 + %t396 = load { ptr, i64, i64 }, ptr %a27 + %t397 = extractvalue { ptr, i64, i64 } %t396, 1 + %t398 = icmp uge i64 3, %t397 + br i1 %t398, label %range10610, label %inrange10611 +range10610: + call void @finch_panic_index(ptr @.str.7058, i64 312, i64 3, i64 %t397) + unreachable +inrange10611: + %t399 = extractvalue { ptr, i64, i64 } %t396, 0 + %t400 = getelementptr inbounds { ptr, i64, i64 }, ptr %t399, i64 3 + %t401 = load { ptr, i64, i64 }, ptr %t400 + store { ptr, i64, i64 } %t401, ptr %a402 + call void @finch_str_copy(ptr %a403, ptr %a402) + %t404 = load { ptr, i64, i64 }, ptr %a403 + %t405 = load i64, ptr %t395 + %t406 = add i64 %t405, 1 + call void @finch_arr_reserve(ptr %t394, i64 %t406, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t407 = load ptr, ptr %t394 + %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %t407, i64 %t405 + store { ptr, i64, i64 } %t404, ptr %t408 + store i64 %t406, ptr %t395 + %t409 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t410 = load i64, ptr %a386 + %t411 = load { ptr, i64, i64 }, ptr %t409 + %t412 = extractvalue { ptr, i64, i64 } %t411, 1 + %t413 = icmp uge i64 %t410, %t412 + br i1 %t413, label %range10612, label %inrange10613 +range10612: + call void @finch_panic_index(ptr @.str.7059, i64 313, i64 %t410, i64 %t412) + unreachable +inrange10613: + %t414 = extractvalue { ptr, i64, i64 } %t411, 0 + %t415 = getelementptr inbounds %S.lsp.StructRec, ptr %t414, i64 %t410 + %t416 = getelementptr inbounds %S.lsp.StructRec, ptr %t415, i32 0, i32 6 + %t417 = getelementptr inbounds { ptr, i64, i64 }, ptr %t416, i32 0, i32 1 + %t418 = load { ptr, i64, i64 }, ptr %a27 + %t419 = extractvalue { ptr, i64, i64 } %t418, 1 + %t420 = icmp uge i64 4, %t419 + br i1 %t420, label %range10614, label %inrange10615 +range10614: + call void @finch_panic_index(ptr @.str.7060, i64 313, i64 4, i64 %t419) + unreachable +inrange10615: + %t421 = extractvalue { ptr, i64, i64 } %t418, 0 + %t422 = getelementptr inbounds { ptr, i64, i64 }, ptr %t421, i64 4 + %t423 = load { ptr, i64, i64 }, ptr %t422 + store { ptr, i64, i64 } %t423, ptr %a424 + call void @finch_str_copy(ptr %a425, ptr %a424) + %t426 = load { ptr, i64, i64 }, ptr %a425 + %t427 = load i64, ptr %t417 + %t428 = add i64 %t427, 1 + call void @finch_arr_reserve(ptr %t416, i64 %t428, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t429 = load ptr, ptr %t416 + %t430 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i64 %t427 + store { ptr, i64, i64 } %t426, ptr %t430 + store i64 %t428, ptr %t417 + br label %endif10607 +else10606: + %t431 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t431, ptr %a432 + store { ptr, i64, i64 } { ptr @.str.7061, i64 2, i64 0 }, ptr %a433 + %t434 = call i32 @finch_str_eq(ptr %a432, ptr %a433) + %t435 = icmp ne i32 %t434, 0 + br label %logic.from10616 +logic.from10616: + br i1 %t435, label %logic.rhs10617, label %logic.end10618 +logic.rhs10617: + %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t437 = load i64, ptr %t436 + %t438 = icmp sge i64 %t437, 7 + br label %logic.rend10619 +logic.rend10619: + br label %logic.end10618 +logic.end10618: + %t439 = phi i1 [ false, %logic.from10616 ], [ %t438, %logic.rend10619 ] + br i1 %t439, label %then10620, label %else10621 +then10620: + %t440 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 4 + %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t440, i32 0, i32 1 + %t442 = load { ptr, i64, i64 }, ptr %a27 + %t443 = extractvalue { ptr, i64, i64 } %t442, 1 + %t444 = icmp uge i64 1, %t443 + br i1 %t444, label %range10623, label %inrange10624 +range10623: + call void @finch_panic_index(ptr @.str.7062, i64 315, i64 1, i64 %t443) + unreachable +inrange10624: + %t445 = extractvalue { ptr, i64, i64 } %t442, 0 + %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i64 1 + %t447 = load { ptr, i64, i64 }, ptr %t446 + store { ptr, i64, i64 } %t447, ptr %a448 + call void @finch_str_copy(ptr %a449, ptr %a448) + %t450 = load { ptr, i64, i64 }, ptr %a449 + %t451 = insertvalue %S.lsp.EnumRec zeroinitializer, { ptr, i64, i64 } %t450, 0 + %t452 = load { ptr, i64, i64 }, ptr %a27 + %t453 = extractvalue { ptr, i64, i64 } %t452, 1 + %t454 = icmp uge i64 2, %t453 + br i1 %t454, label %range10625, label %inrange10626 +range10625: + call void @finch_panic_index(ptr @.str.7063, i64 315, i64 2, i64 %t453) + unreachable +inrange10626: + %t455 = extractvalue { ptr, i64, i64 } %t452, 0 + %t456 = getelementptr inbounds { ptr, i64, i64 }, ptr %t455, i64 2 + %t457 = load { ptr, i64, i64 }, ptr %t456 + store { ptr, i64, i64 } %t457, ptr %a458 + call void @finch_str_copy(ptr %a459, ptr %a458) + %t460 = load { ptr, i64, i64 }, ptr %a459 + %t461 = insertvalue %S.lsp.EnumRec %t451, { ptr, i64, i64 } %t460, 1 + %t462 = load { ptr, i64, i64 }, ptr %a27 + %t463 = extractvalue { ptr, i64, i64 } %t462, 1 + %t464 = icmp uge i64 3, %t463 + br i1 %t464, label %range10627, label %inrange10628 +range10627: + call void @finch_panic_index(ptr @.str.7064, i64 315, i64 3, i64 %t463) + unreachable +inrange10628: + %t465 = extractvalue { ptr, i64, i64 } %t462, 0 + %t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 3 + %t467 = load { ptr, i64, i64 }, ptr %t466 + store { ptr, i64, i64 } %t467, ptr %a468 + call void @finch_str_copy(ptr %a469, ptr %a468) + %t470 = load { ptr, i64, i64 }, ptr %a469 + %t471 = insertvalue %S.lsp.EnumRec %t461, { ptr, i64, i64 } %t470, 2 + %t472 = load { ptr, i64, i64 }, ptr %a27 + %t473 = extractvalue { ptr, i64, i64 } %t472, 1 + %t474 = icmp uge i64 4, %t473 + br i1 %t474, label %range10629, label %inrange10630 +range10629: + call void @finch_panic_index(ptr @.str.7065, i64 315, i64 4, i64 %t473) + unreachable +inrange10630: + %t475 = extractvalue { ptr, i64, i64 } %t472, 0 + %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 4 + %t477 = load { ptr, i64, i64 }, ptr %t476 + %t478 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t477) + %t479 = insertvalue %S.lsp.EnumRec %t471, i64 %t478, 3 + %t480 = load { ptr, i64, i64 }, ptr %a27 + %t481 = extractvalue { ptr, i64, i64 } %t480, 1 + %t482 = icmp uge i64 5, %t481 + br i1 %t482, label %range10631, label %inrange10632 +range10631: + call void @finch_panic_index(ptr @.str.7066, i64 315, i64 5, i64 %t481) + unreachable +inrange10632: + %t483 = extractvalue { ptr, i64, i64 } %t480, 0 + %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 5 + %t485 = load { ptr, i64, i64 }, ptr %t484 + %t486 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t485) + %t487 = insertvalue %S.lsp.EnumRec %t479, i64 %t486, 4 + %t488 = load { ptr, i64, i64 }, ptr %a27 + %t489 = extractvalue { ptr, i64, i64 } %t488, 1 + %t490 = icmp uge i64 6, %t489 + br i1 %t490, label %range10633, label %inrange10634 +range10633: + call void @finch_panic_index(ptr @.str.7067, i64 315, i64 6, i64 %t489) + unreachable +inrange10634: + %t491 = extractvalue { ptr, i64, i64 } %t488, 0 + %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 6 + %t493 = load { ptr, i64, i64 }, ptr %t492 + store { ptr, i64, i64 } %t493, ptr %a494 + store { ptr, i64, i64 } { ptr @.str.7069, i64 1, i64 0 }, ptr %a496 + call void @finch_str_split(ptr %a497, ptr %a494, ptr %a496) + %t498 = load { ptr, i64, i64 }, ptr %a497 + %t499 = insertvalue %S.lsp.EnumRec %t487, { ptr, i64, i64 } %t498, 5 + %t500 = load i64, ptr %t441 + %t501 = add i64 %t500, 1 + call void @finch_arr_reserve(ptr %t440, i64 %t501, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) + %t502 = load ptr, ptr %t440 + %t503 = getelementptr inbounds %S.lsp.EnumRec, ptr %t502, i64 %t500 + store %S.lsp.EnumRec %t499, ptr %t503 + store i64 %t501, ptr %t441 + br label %endif10622 +else10621: + %t504 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t504, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.7070, i64 2, i64 0 }, ptr %a506 + %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) + %t508 = icmp ne i32 %t507, 0 + br label %logic.from10635 +logic.from10635: + br i1 %t508, label %logic.rhs10636, label %logic.end10637 +logic.rhs10636: + %t509 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t510 = load i64, ptr %t509 + %t511 = icmp sge i64 %t510, 2 + br label %logic.rend10638 +logic.rend10638: + br label %logic.end10637 +logic.end10637: + %t512 = phi i1 [ false, %logic.from10635 ], [ %t511, %logic.rend10638 ] + br i1 %t512, label %then10639, label %endif10641 +then10639: + %t513 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 5 + %t514 = getelementptr inbounds { ptr, i64, i64 }, ptr %t513, i32 0, i32 1 + %t515 = load { ptr, i64, i64 }, ptr %a27 + %t516 = extractvalue { ptr, i64, i64 } %t515, 1 + %t517 = icmp uge i64 1, %t516 + br i1 %t517, label %range10642, label %inrange10643 +range10642: + call void @finch_panic_index(ptr @.str.7071, i64 317, i64 1, i64 %t516) + unreachable +inrange10643: + %t518 = extractvalue { ptr, i64, i64 } %t515, 0 + %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 1 + %t520 = load { ptr, i64, i64 }, ptr %t519 + store { ptr, i64, i64 } %t520, ptr %a521 + call void @finch_str_copy(ptr %a522, ptr %a521) + %t523 = load { ptr, i64, i64 }, ptr %a522 + %t524 = load i64, ptr %t514 + %t525 = add i64 %t524, 1 + call void @finch_arr_reserve(ptr %t513, i64 %t525, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t526 = load ptr, ptr %t513 + %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t524 + store { ptr, i64, i64 } %t523, ptr %t527 + store i64 %t525, ptr %t514 + br label %endif10641 +endif10641: + br label %endif10622 +endif10622: + br label %endif10607 +endif10607: + br label %endif10586 +endif10586: + br label %endif10561 +endif10561: + br label %endif10538 +endif10538: + br label %endif10515 +endif10515: + call void @finch_str_drop(ptr %a37) + call void @finch.drop.arr_str(ptr %a27) + br label %endif10506 +else10505: + %t528 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t529 = getelementptr inbounds %S.lsp.Diag, ptr %t528, i32 0, i32 0 + %t530 = load i1, ptr %t529 + %t531 = xor i1 %t530, true + br i1 %t531, label %then10644, label %endif10646 +then10644: + %t532 = load { ptr, i64, i64 }, ptr %a18 + %t533 = call %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %t532) + %t534 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t535 = load %S.lsp.Diag, ptr %t534 + store %S.lsp.Diag %t533, ptr %t534 + store %S.lsp.Diag %t535, ptr %a536 + call void @finch.drop.S_lsp_Diag(ptr %a536) + br label %endif10646 +endif10646: + br label %endif10506 +endif10506: + br label %each.step10502 +each.step10502: + %t537 = load i64, ptr %a10 + %t538 = add i64 %t537, 1 + store i64 %t538, ptr %a10 + br label %each.cond10500 +each.end10503: + call void @finch.drop.arr_str(ptr %a9) + %t539 = load %S.lsp.Analysis, ptr %a2 + ret %S.lsp.Analysis %t539 +} + +define internal void @finch.copy.S_lsp_Ref(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.Ref, ptr %src + store %S.lsp.Ref %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 4 + %t5 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 7 + %t7 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal void @finch.copy.arr_S_lsp_Ref(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10667 +n.cond10667: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10668, label %n.end10669 +n.body10668: + %t8 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.Ref, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_Ref(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10667 +n.end10669: + ret void +} + +define internal void @finch.copy.S_lsp_VarRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.VarRec, ptr %src + store %S.lsp.VarRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 5 + %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 5 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.arr_S_lsp_VarRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10670 +n.cond10670: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10671, label %n.end10672 +n.body10671: + %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_VarRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10670 +n.end10672: + ret void +} + +define internal void @finch.copy.S_lsp_FnRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.FnRec, ptr %src + store %S.lsp.FnRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 7 + %t11 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 8 + %t13 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 8 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + ret void +} + +define internal void @finch.copy.arr_S_lsp_FnRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10673 +n.cond10673: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10674, label %n.end10675 +n.body10674: + %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_FnRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10673 +n.end10675: + ret void +} + +define internal void @finch.copy.S_lsp_StructRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.StructRec, ptr %src + store %S.lsp.StructRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 5 + %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 6 + %t11 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + ret void +} + +define internal void @finch.copy.arr_S_lsp_StructRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10676 +n.cond10676: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10677, label %n.end10678 +n.body10677: + %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_StructRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10676 +n.end10678: + ret void +} + +define internal void @finch.copy.S_lsp_EnumRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.EnumRec, ptr %src + store %S.lsp.EnumRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 5 + %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.arr_S_lsp_EnumRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10679 +n.cond10679: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10680, label %n.end10681 +n.body10680: + %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_EnumRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10679 +n.end10681: + ret void +} + +define internal void @finch.copy.S_lsp_Diag(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.Diag, ptr %src + store %S.lsp.Diag %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 1 + %t3 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 4 + %t5 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.copy.S_lsp_Analysis(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.Analysis, ptr %src + store %S.lsp.Analysis %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 0 + call void @finch.copy.arr_S_lsp_Ref(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_lsp_VarRec(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_S_lsp_FnRec(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_S_lsp_StructRec(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_S_lsp_EnumRec(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 6 + %t15 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 6 + call void @finch.copy.S_lsp_Diag(ptr %t14, ptr %t15) + ret void +} + +define internal void @finch.drop.S_lsp_Ref(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal void @finch.drop.arr_S_lsp_Ref(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10682 +n.cond10682: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10683, label %n.end10684 +n.body10683: + %t7 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_Ref(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10682 +n.end10684: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_VarRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 5 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_S_lsp_VarRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10685 +n.cond10685: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10686, label %n.end10687 +n.body10686: + %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_VarRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10685 +n.end10687: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_FnRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 8 + call void @finch.drop.arr_str(ptr %t6) + ret void +} + +define internal void @finch.drop.arr_S_lsp_FnRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10688 +n.cond10688: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10689, label %n.end10690 +n.body10689: + %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_FnRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10688 +n.end10690: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_StructRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t5) + ret void +} + +define internal void @finch.drop.arr_S_lsp_StructRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10691 +n.cond10691: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10692, label %n.end10693 +n.body10692: + %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_StructRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10691 +n.end10693: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_EnumRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_S_lsp_EnumRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10694 +n.cond10694: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10695, label %n.end10696 +n.body10695: + %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_EnumRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10694 +n.end10696: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_Analysis(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_lsp_Ref(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_lsp_VarRec(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_S_lsp_FnRec(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_S_lsp_StructRec(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_S_lsp_EnumRec(ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 6 + call void @finch.drop.S_lsp_Diag(ptr %t7) + ret void +} + +define internal void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca i64, align 16 + %a14 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca %S.lsp.Analysis, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca i32, align 16 + %a188 = alloca %S.lsp.Analysis, align 16 + %a189 = alloca %S.lsp.Analysis, align 16 + %a192 = alloca %S.lsp.Analysis, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca %S.lsp.Analysis, align 16 + %a211 = alloca %S.lsp.Analysis, align 16 + %a213 = alloca %S.lsp.Analysis, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca i32, align 16 + %a272 = alloca %S.lsp.Analysis, align 16 + %a273 = alloca %S.lsp.Analysis, align 16 + %a276 = alloca %S.lsp.Analysis, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 + %t3 = load { ptr, i64, i64 }, ptr %t2 + call void @finch.host.makeDirs({ ptr, i64, i64 } %t3) + store { ptr, i64, i64 } { ptr @.str.7072, i64 0, i64 0 }, ptr %a4 + store i64 0, ptr %a5 + %t6 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + %t8 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + call void @finch_arr_make(ptr %a7, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a7 + store i64 0, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 2 + %t13 = load i64, ptr %t12 + store i64 0, ptr %a14 + br label %n.cond10647 +n.cond10647: + %t15 = load i64, ptr %a14 + %t16 = icmp slt i64 %t15, %t13 + br i1 %t16, label %n.body10648, label %n.end10649 +n.body10648: + %t17 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 + %t18 = load ptr, ptr %t17 + %t19 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t18, i64 %t15 + %t20 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 0 + %t21 = load i64, ptr %t20 + %t22 = icmp ne i64 %t21, 0 + br i1 %t22, label %entry.live10650, label %entry.next10651 +entry.live10650: + %t23 = load i64, ptr %a11 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t23 + %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 1 + call void @finch_str_copy(ptr %t24, ptr %t25) + %t26 = add i64 %t23, 1 + store i64 %t26, ptr %a11 + br label %entry.next10651 +entry.next10651: + %t27 = load i64, ptr %a14 + %t28 = add i64 %t27, 1 + store i64 %t28, ptr %a14 + br label %n.cond10647 +n.end10649: + %t29 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t29, ptr %a30 + store i64 0, ptr %a31 + br label %each.cond10652 +each.cond10652: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = load i64, ptr %a31 + %t35 = icmp slt i64 %t34, %t33 + br i1 %t35, label %each.body10653, label %each.end10655 +each.body10653: + %t36 = load ptr, ptr %a30 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i64 %t34 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.7073, i64 4, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a42 + %t46 = load i64, ptr %a5 + call void @finch_str_from_int(ptr %a47, i64 %t46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t45, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.7074, i64 4, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t59, ptr %a60 + %t61 = load { ptr, i64, i64 }, ptr %a60 + %t62 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t63 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t63, ptr %a64 + %t65 = call i64 @finch_map_find(ptr %t62, ptr %a64, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t66 = icmp slt i64 %t65, 0 + br i1 %t66, label %map.missing10656, label %map.found10657 +map.missing10656: + store { ptr, i64, i64 } zeroinitializer, ptr %a67 + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_buf_str(ptr %a67, ptr %a68, i32 1) + call void @finch_map_missing(ptr @.str.7075, i64 333, ptr %a67) + unreachable +map.found10657: + %t69 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t62, i32 0, i32 0 + %t70 = load ptr, ptr %t69 + %t71 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t70, i64 %t65 + %t72 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t71, i32 0, i32 2 + %t73 = load { ptr, i64, i64 }, ptr %t72 + store { ptr, i64, i64 } %t61, ptr %a74 + store { ptr, i64, i64 } %t73, ptr %a75 + %t76 = call i32 @finch_write_file(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + %t78 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t78, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.7076, i64 11, i64 0 }, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a79 + %t83 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.7077, i64 1, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a84 + %t88 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t87, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t87, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + %t94 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t93) + store { ptr, i64, i64 } %t93, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t82, ptr %a97 + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t82, ptr %a99 + call void @finch_str_drop(ptr %a99) + store { ptr, i64, i64 } %t94, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a96 + %t102 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t101, ptr %a4 + store { ptr, i64, i64 } %t102, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load i64, ptr %a5 + %t105 = add i64 %t104, 1 + store i64 %t105, ptr %a5 + call void @finch_str_drop(ptr %a60) + br label %each.step10654 +each.step10654: + %t106 = load i64, ptr %a31 + %t107 = add i64 %t106, 1 + store i64 %t107, ptr %a31 + br label %each.cond10652 +each.end10655: + call void @finch.drop.arr_str(ptr %a30) + %t108 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 + %t109 = load { ptr, i64, i64 }, ptr %t108 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.7078, i64 8, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t113, ptr %a114 + %t115 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 0 + %t116 = load { ptr, i64, i64 }, ptr %t115 + %t117 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t117, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.7079, i64 7, i64 0 }, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + %t123 = load { ptr, i64, i64 }, ptr %a1 + %t124 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t123) + store { ptr, i64, i64 } %t122, ptr %a126 + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t122, ptr %a128 + call void @finch_str_drop(ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a125 + %t131 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t130, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.7080, i64 3, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = load { ptr, i64, i64 }, ptr %a114 + %t143 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t142) + store { ptr, i64, i64 } %t141, ptr %a145 + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + store { ptr, i64, i64 } %t141, ptr %a147 + call void @finch_str_drop(ptr %a147) + store { ptr, i64, i64 } %t143, ptr %a148 + call void @finch_str_drop(ptr %a148) + %t149 = load { ptr, i64, i64 }, ptr %a144 + store { ptr, i64, i64 } %t149, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.7081, i64 5, i64 0 }, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + store { ptr, i64, i64 } %t149, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a150 + %t155 = call i64 @finch.host.run({ ptr, i64, i64 } %t154) + store { ptr, i64, i64 } %t154, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a114 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } zeroinitializer, ptr %a159 + store { ptr, i64, i64 } zeroinitializer, ptr %a160 + %t161 = call i32 @finch_try_read_file(ptr %a159, ptr %a158, ptr %a160) + %t162 = icmp eq i32 %t161, 0 + %t163 = load { ptr, i64, i64 }, ptr %a160 + %t164 = load { ptr, i64, i64 }, ptr %a159 + br i1 %t162, label %or.failed10658, label %or.ok10659 +or.failed10658: + store { ptr, i64, i64 } %t163, ptr %a165 + call void @finch_str_drop(ptr %a165) + br label %or.bend10660 +or.bend10660: + br label %or.end10661 +or.ok10659: + br label %or.end10661 +or.end10661: + %t166 = phi { ptr, i64, i64 } [ { ptr @.str.7082, i64 0, i64 0 }, %or.bend10660 ], [ %t164, %or.ok10659 ] + %t167 = call %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %t166) + store { ptr, i64, i64 } %t166, ptr %a168 + call void @finch_str_drop(ptr %a168) + store %S.lsp.Analysis %t167, ptr %a169 + %t170 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 6 + %t171 = getelementptr inbounds %S.lsp.Diag, ptr %t170, i32 0, i32 0 + %t172 = load i1, ptr %t171 + %t173 = xor i1 %t172, true + br i1 %t173, label %then10662, label %else10663 +then10662: + %t174 = load %S.lsp.Analysis, ptr %a169 + %t175 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t176 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t176, ptr %a177 + store i32 0, ptr %a178 + %t179 = call i64 @finch_map_slot(ptr %t175, ptr %a177, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a178) + %t180 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t175, i32 0, i32 0 + %t181 = load ptr, ptr %t180 + %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t181, i64 %t179 + %t183 = load i32, ptr %a178 + %t184 = icmp ne i32 %t183, 0 + br i1 %t184, label %map.new10665, label %map.have10666 +map.new10665: + %t185 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 1 + call void @finch_str_copy(ptr %t185, ptr %a177) + %t186 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 + store %S.lsp.Analysis zeroinitializer, ptr %t186 + br label %map.have10666 +map.have10666: + %t187 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 + store %S.lsp.Analysis %t174, ptr %a188 + call void @finch.copy.S_lsp_Analysis(ptr %a189, ptr %a188) + %t190 = load %S.lsp.Analysis, ptr %a189 + %t191 = load %S.lsp.Analysis, ptr %t187 + store %S.lsp.Analysis %t190, ptr %t187 + store %S.lsp.Analysis %t191, ptr %a192 + call void @finch.drop.S_lsp_Analysis(ptr %a192) + br label %endif10664 +else10663: + %t193 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t194 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t194, ptr %a195 + %t196 = call i64 @finch_map_find(ptr %t193, ptr %a195, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t197 = icmp sge i64 %t196, 0 + br i1 %t197, label %then10697, label %endif10699 +then10697: + %t198 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t199 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t199, ptr %a200 + %t201 = call i64 @finch_map_find(ptr %t198, ptr %a200, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t202 = icmp slt i64 %t201, 0 + br i1 %t202, label %map.missing10700, label %map.found10701 +map.missing10700: + store { ptr, i64, i64 } zeroinitializer, ptr %a203 + store { ptr, i64, i64 } %t199, ptr %a204 + call void @finch_buf_str(ptr %a203, ptr %a204, i32 1) + call void @finch_map_missing(ptr @.str.7083, i64 344, ptr %a203) + unreachable +map.found10701: + %t205 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t198, i32 0, i32 0 + %t206 = load ptr, ptr %t205 + %t207 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t206, i64 %t201 + %t208 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t207, i32 0, i32 2 + %t209 = load %S.lsp.Analysis, ptr %t208 + store %S.lsp.Analysis %t209, ptr %a210 + call void @finch.copy.S_lsp_Analysis(ptr %a211, ptr %a210) + %t212 = load %S.lsp.Analysis, ptr %a211 + store %S.lsp.Analysis %t212, ptr %a213 + %t214 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 2 + %t215 = load { ptr, i64, i64 }, ptr %t214 + %t216 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 2 + store { ptr, i64, i64 } %t215, ptr %a217 + call void @finch.copy.arr_S_lsp_FnRec(ptr %a218, ptr %a217) + %t219 = load { ptr, i64, i64 }, ptr %a218 + %t220 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t219, ptr %t216 + store { ptr, i64, i64 } %t220, ptr %a221 + call void @finch.drop.arr_S_lsp_FnRec(ptr %a221) + %t222 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 3 + %t223 = load { ptr, i64, i64 }, ptr %t222 + %t224 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 3 + store { ptr, i64, i64 } %t223, ptr %a225 + call void @finch.copy.arr_S_lsp_StructRec(ptr %a226, ptr %a225) + %t227 = load { ptr, i64, i64 }, ptr %a226 + %t228 = load { ptr, i64, i64 }, ptr %t224 + store { ptr, i64, i64 } %t227, ptr %t224 + store { ptr, i64, i64 } %t228, ptr %a229 + call void @finch.drop.arr_S_lsp_StructRec(ptr %a229) + %t230 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 4 + %t231 = load { ptr, i64, i64 }, ptr %t230 + %t232 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 4 + store { ptr, i64, i64 } %t231, ptr %a233 + call void @finch.copy.arr_S_lsp_EnumRec(ptr %a234, ptr %a233) + %t235 = load { ptr, i64, i64 }, ptr %a234 + %t236 = load { ptr, i64, i64 }, ptr %t232 + store { ptr, i64, i64 } %t235, ptr %t232 + store { ptr, i64, i64 } %t236, ptr %a237 + call void @finch.drop.arr_S_lsp_EnumRec(ptr %a237) + %t238 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 1 + %t239 = load { ptr, i64, i64 }, ptr %t238 + %t240 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 1 + store { ptr, i64, i64 } %t239, ptr %a241 + call void @finch.copy.arr_S_lsp_VarRec(ptr %a242, ptr %a241) + %t243 = load { ptr, i64, i64 }, ptr %a242 + %t244 = load { ptr, i64, i64 }, ptr %t240 + store { ptr, i64, i64 } %t243, ptr %t240 + store { ptr, i64, i64 } %t244, ptr %a245 + call void @finch.drop.arr_S_lsp_VarRec(ptr %a245) + %t246 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 + %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i32 0, i32 1 + %t248 = load i64, ptr %t247 + %t249 = icmp eq i64 %t248, 0 + br i1 %t249, label %then10702, label %endif10704 +then10702: + %t250 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 5 + %t251 = load { ptr, i64, i64 }, ptr %t250 + %t252 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 + store { ptr, i64, i64 } %t251, ptr %a253 + call void @finch.copy.arr_str(ptr %a254, ptr %a253) + %t255 = load { ptr, i64, i64 }, ptr %a254 + %t256 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t255, ptr %t252 + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch.drop.arr_str(ptr %a257) + br label %endif10704 +endif10704: + call void @finch.drop.S_lsp_Analysis(ptr %a213) + br label %endif10699 +endif10699: + br label %endif10664 +endif10664: + %t258 = load %S.lsp.Analysis, ptr %a169 + %t259 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t260 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t260, ptr %a261 + store i32 0, ptr %a262 + %t263 = call i64 @finch_map_slot(ptr %t259, ptr %a261, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a262) + %t264 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t259, i32 0, i32 0 + %t265 = load ptr, ptr %t264 + %t266 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t265, i64 %t263 + %t267 = load i32, ptr %a262 + %t268 = icmp ne i32 %t267, 0 + br i1 %t268, label %map.new10705, label %map.have10706 +map.new10705: + %t269 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 1 + call void @finch_str_copy(ptr %t269, ptr %a261) + %t270 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 + store %S.lsp.Analysis zeroinitializer, ptr %t270 + br label %map.have10706 +map.have10706: + %t271 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 + store %S.lsp.Analysis %t258, ptr %a272 + call void @finch.copy.S_lsp_Analysis(ptr %a273, ptr %a272) + %t274 = load %S.lsp.Analysis, ptr %a273 + %t275 = load %S.lsp.Analysis, ptr %t271 + store %S.lsp.Analysis %t274, ptr %t271 + store %S.lsp.Analysis %t275, ptr %a276 + call void @finch.drop.S_lsp_Analysis(ptr %a276) + %t277 = load { ptr, i64, i64 }, ptr %a1 + %t278 = load %S.lsp.Analysis, ptr %a169 + call void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %t277, %S.lsp.Analysis %t278) + call void @finch.drop.S_lsp_Analysis(ptr %a169) + call void @finch_str_drop(ptr %a114) + call void @finch_str_drop(ptr %a4) + ret void +} + +define internal void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %p0, %S.lsp.Analysis %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.lsp.Analysis, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca i64, align 16 + %a29 = alloca i64, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca i64, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca %S.json.Json, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca i64, align 16 + %a88 = alloca i64, align 16 + %a92 = alloca %S.json.Json, align 16 + %a98 = alloca %S.json.Json, align 16 + %a100 = alloca %S.json.Json, align 16 + %a102 = alloca %S.json.Json, align 16 + %a107 = alloca %S.json.Json, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca %S.json.Json, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.json.Json, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.lsp.Analysis %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + %t7 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t8 = call ptr @finch_alloc(i64 %t7) + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 0 + store { ptr, i64, i64 } %t6, ptr %t9 + %t10 = insertvalue { ptr, i64, i64 } undef, ptr %t8, 0 + %t11 = insertvalue { ptr, i64, i64 } %t10, i64 1, 1 + %t12 = insertvalue { ptr, i64, i64 } %t11, i64 1, 2 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 + store i64 0, ptr %a15 + br label %each.cond10707 +each.cond10707: + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t17 = load i64, ptr %t16 + %t18 = load i64, ptr %a15 + %t19 = icmp slt i64 %t18, %t17 + br i1 %t19, label %each.body10708, label %each.end10710 +each.body10708: + %t20 = load ptr, ptr %t14 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t25 = load { ptr, i64, i64 }, ptr %a23 + store i64 -1, ptr %a26 + %t27 = load i64, ptr %t24 + %t28 = load ptr, ptr %a13 + store i64 0, ptr %a29 + br label %find.cond10711 +find.cond10711: + %t30 = load i64, ptr %a29 + %t31 = icmp slt i64 %t30, %t27 + br i1 %t31, label %find.body10712, label %find.end10715 +find.body10712: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } %t25, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %find.hit10713, label %find.next10714 +find.hit10713: + store i64 %t30, ptr %a26 + br label %find.end10715 +find.next10714: + %t38 = add i64 %t30, 1 + store i64 %t38, ptr %a29 + br label %find.cond10711 +find.end10715: + %t39 = load i64, ptr %a26 + %t40 = icmp sge i64 %t39, 0 + %t41 = xor i1 %t40, true + br i1 %t41, label %then10716, label %endif10718 +then10716: + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t43 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_copy(ptr %a45, ptr %a44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + %t47 = load i64, ptr %t42 + %t48 = add i64 %t47, 1 + call void @finch_arr_reserve(ptr %a13, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t49 = load ptr, ptr %a13 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 + store { ptr, i64, i64 } %t46, ptr %t50 + store i64 %t48, ptr %t42 + br label %endif10718 +endif10718: + br label %each.step10709 +each.step10709: + %t51 = load i64, ptr %a15 + %t52 = add i64 %t51, 1 + store i64 %t52, ptr %a15 + br label %each.cond10707 +each.end10710: + store { ptr, i64, i64 } zeroinitializer, ptr %a53 + store i64 0, ptr %a54 + br label %each.cond10719 +each.cond10719: + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = load i64, ptr %a54 + %t58 = icmp slt i64 %t57, %t56 + br i1 %t58, label %each.body10720, label %each.end10722 +each.body10720: + %t59 = load ptr, ptr %a13 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 %t57 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + %t63 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t63, ptr %a64 + %t65 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t66 = getelementptr inbounds %S.lsp.Diag, ptr %t65, i32 0, i32 0 + %t67 = load i1, ptr %t66 + br label %logic.from10723 +logic.from10723: + br i1 %t67, label %logic.rhs10724, label %logic.end10725 +logic.rhs10724: + %t68 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t69 = getelementptr inbounds %S.lsp.Diag, ptr %t68, i32 0, i32 1 + %t70 = load { ptr, i64, i64 }, ptr %t69 + %t71 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } %t71, ptr %a73 + %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) + %t75 = icmp ne i32 %t74, 0 + br label %logic.rend10726 +logic.rend10726: + br label %logic.end10725 +logic.end10725: + %t76 = phi i1 [ false, %logic.from10723 ], [ %t75, %logic.rend10726 ] + br i1 %t76, label %then10727, label %endif10729 +then10727: + %t77 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t78 = getelementptr inbounds %S.lsp.Diag, ptr %t77, i32 0, i32 2 + %t79 = load i64, ptr %t78 + %t80 = sub i64 %t79, 1 + store i64 %t80, ptr %a81 + %t82 = load i64, ptr %a81 + %t83 = icmp slt i64 %t82, 0 + br i1 %t83, label %then10730, label %endif10732 +then10730: + store i64 0, ptr %a81 + br label %endif10732 +endif10732: + %t84 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t85 = getelementptr inbounds %S.lsp.Diag, ptr %t84, i32 0, i32 3 + %t86 = load i64, ptr %t85 + %t87 = sub i64 %t86, 1 + store i64 %t87, ptr %a88 + %t89 = load i64, ptr %a88 + %t90 = icmp slt i64 %t89, 0 + br i1 %t90, label %then10733, label %endif10735 +then10733: + store i64 0, ptr %a88 + br label %endif10735 +endif10735: + %t91 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t91, ptr %a92 + %t93 = load i64, ptr %a81 + %t94 = load i64, ptr %a88 + %t95 = load i64, ptr %a88 + %t96 = add i64 %t95, 1 + %t97 = call %S.json.Json @finch.lsp.range(i64 %t93, i64 %t94, i64 %t96) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7084, i64 5, i64 0 }, %S.json.Json %t97) + store %S.json.Json %t97, ptr %a98 + call void @finch.drop.S_json_Json(ptr %a98) + %t99 = call %S.json.Json @finch.lsp.num(i64 1) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7085, i64 8, i64 0 }, %S.json.Json %t99) + store %S.json.Json %t99, ptr %a100 + call void @finch.drop.S_json_Json(ptr %a100) + %t101 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7087, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7086, i64 6, i64 0 }, %S.json.Json %t101) + store %S.json.Json %t101, ptr %a102 + call void @finch.drop.S_json_Json(ptr %a102) + %t103 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t104 = getelementptr inbounds %S.lsp.Diag, ptr %t103, i32 0, i32 4 + %t105 = load { ptr, i64, i64 }, ptr %t104 + %t106 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t105) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7088, i64 7, i64 0 }, %S.json.Json %t106) + store %S.json.Json %t106, ptr %a107 + call void @finch.drop.S_json_Json(ptr %a107) + %t108 = load %S.json.Json, ptr %a92 + call void @finch.json.Json.push(ptr %a64, %S.json.Json %t108) + %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 + %t110 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_copy(ptr %a112, ptr %a111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + %t114 = load i64, ptr %t109 + %t115 = add i64 %t114, 1 + call void @finch_arr_reserve(ptr %a53, i64 %t115, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t116 = load ptr, ptr %a53 + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t116, i64 %t114 + store { ptr, i64, i64 } %t113, ptr %t117 + store i64 %t115, ptr %t109 + call void @finch.drop.S_json_Json(ptr %a92) + br label %endif10729 +endif10729: + %t118 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t118, ptr %a119 + %t120 = load { ptr, i64, i64 }, ptr %a62 + %t121 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t120) + %t122 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t121) + store { ptr, i64, i64 } %t121, ptr %a123 + call void @finch_str_drop(ptr %a123) + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7089, i64 3, i64 0 }, %S.json.Json %t122) + store %S.json.Json %t122, ptr %a124 + call void @finch.drop.S_json_Json(ptr %a124) + %t125 = load %S.json.Json, ptr %a64 + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7090, i64 11, i64 0 }, %S.json.Json %t125) + %t126 = load %S.json.Json, ptr %a119 + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7091, i64 31, i64 0 }, %S.json.Json %t126) + call void @finch.drop.S_json_Json(ptr %a119) + call void @finch.drop.S_json_Json(ptr %a64) + br label %each.step10721 +each.step10721: + %t127 = load i64, ptr %a54 + %t128 = add i64 %t127, 1 + store i64 %t128, ptr %a54 + br label %each.cond10719 +each.end10722: + %t129 = load { ptr, i64, i64 }, ptr %a53 + %t130 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 + store { ptr, i64, i64 } %t129, ptr %a131 + call void @finch.copy.arr_str(ptr %a132, ptr %a131) + %t133 = load { ptr, i64, i64 }, ptr %a132 + %t134 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t133, ptr %t130 + store { ptr, i64, i64 } %t134, ptr %a135 + call void @finch.drop.arr_str(ptr %a135) + call void @finch.drop.arr_str(ptr %a53) + call void @finch.drop.arr_str(ptr %a13) + ret void +} + +define internal i64 @finch.lsp.refAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a19 = alloca %S.lsp.Ref, align 16 + %a20 = alloca %S.lsp.Ref, align 16 + %a22 = alloca %S.lsp.Ref, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond10736 +for.cond10736: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body10737, label %for.end10739 +for.body10737: + %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t12 = load i64, ptr %a8 + %t13 = load { ptr, i64, i64 }, ptr %t11 + %t14 = extractvalue { ptr, i64, i64 } %t13, 1 + %t15 = icmp uge i64 %t12, %t14 + br i1 %t15, label %range10740, label %inrange10741 +range10740: + call void @finch_panic_index(ptr @.str.7092, i64 397, i64 %t12, i64 %t14) + unreachable +inrange10741: + %t16 = extractvalue { ptr, i64, i64 } %t13, 0 + %t17 = getelementptr inbounds %S.lsp.Ref, ptr %t16, i64 %t12 + %t18 = load %S.lsp.Ref, ptr %t17 + store %S.lsp.Ref %t18, ptr %a19 + call void @finch.copy.S_lsp_Ref(ptr %a20, ptr %a19) + %t21 = load %S.lsp.Ref, ptr %a20 + store %S.lsp.Ref %t21, ptr %a22 + %t23 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = load i64, ptr %a3 + %t26 = icmp eq i64 %t24, %t25 + br label %logic.from10742 +logic.from10742: + br i1 %t26, label %logic.rhs10743, label %logic.end10744 +logic.rhs10743: + %t27 = load i64, ptr %a4 + %t28 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 + %t29 = load i64, ptr %t28 + %t30 = icmp sge i64 %t27, %t29 + br label %logic.rend10745 +logic.rend10745: + br label %logic.end10744 +logic.end10744: + %t31 = phi i1 [ false, %logic.from10742 ], [ %t30, %logic.rend10745 ] + br label %logic.from10746 +logic.from10746: + br i1 %t31, label %logic.rhs10747, label %logic.end10748 +logic.rhs10747: + %t32 = load i64, ptr %a4 + %t33 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 + %t34 = load i64, ptr %t33 + %t35 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 3 + %t36 = load i64, ptr %t35 + %t37 = add i64 %t34, %t36 + %t38 = icmp sle i64 %t32, %t37 + br label %logic.rend10749 +logic.rend10749: + br label %logic.end10748 +logic.end10748: + %t39 = phi i1 [ false, %logic.from10746 ], [ %t38, %logic.rend10749 ] + br label %logic.from10750 +logic.from10750: + br i1 %t39, label %logic.rhs10751, label %logic.end10752 +logic.rhs10751: + %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend10753 +logic.rend10753: + br label %logic.end10752 +logic.end10752: + %t47 = phi i1 [ false, %logic.from10750 ], [ %t46, %logic.rend10753 ] + br i1 %t47, label %then10754, label %endif10756 +then10754: + %t48 = load i64, ptr %a8 + call void @finch.drop.S_lsp_Ref(ptr %a22) + ret i64 %t48 +endif10756: + call void @finch.drop.S_lsp_Ref(ptr %a22) + br label %for.step10738 +for.step10738: + %t49 = load i64, ptr %a8 + %t50 = add i64 %t49, 1 + store i64 %t50, ptr %a8 + br label %for.cond10736 +for.end10739: + ret i64 -1 +} + +define internal %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a10 = alloca i64, align 16 + %a15 = alloca %S.json.Json, align 16 + %a17 = alloca %S.json.Json, align 16 + %a28 = alloca %S.json.Json, align 16 + %a30 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = load %S.lsp.Analysis, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = load i64, ptr %a3 + %t8 = load i64, ptr %a4 + %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br i1 %t12, label %then10757, label %endif10759 +then10757: + %t13 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t13 +endif10759: + %t14 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t14, ptr %a15 + %t16 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7094, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7093, i64 4, i64 0 }, %S.json.Json %t16) + store %S.json.Json %t16, ptr %a17 + call void @finch.drop.S_json_Json(ptr %a17) + %t18 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t19 = load i64, ptr %a10 + %t20 = load { ptr, i64, i64 }, ptr %t18 + %t21 = extractvalue { ptr, i64, i64 } %t20, 1 + %t22 = icmp uge i64 %t19, %t21 + br i1 %t22, label %range10760, label %inrange10761 +range10760: + call void @finch_panic_index(ptr @.str.7096, i64 412, i64 %t19, i64 %t21) + unreachable +inrange10761: + %t23 = extractvalue { ptr, i64, i64 } %t20, 0 + %t24 = getelementptr inbounds %S.lsp.Ref, ptr %t23, i64 %t19 + %t25 = getelementptr inbounds %S.lsp.Ref, ptr %t24, i32 0, i32 7 + %t26 = load { ptr, i64, i64 }, ptr %t25 + %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7095, i64 5, i64 0 }, %S.json.Json %t27) + store %S.json.Json %t27, ptr %a28 + call void @finch.drop.S_json_Json(ptr %a28) + %t29 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t29, ptr %a30 + %t31 = load %S.json.Json, ptr %a15 + call void @finch.json.Json.set(ptr %a30, { ptr, i64, i64 } { ptr @.str.7097, i64 8, i64 0 }, %S.json.Json %t31) + %t32 = load %S.json.Json, ptr %a30 + call void @finch.drop.S_json_Json(ptr %a15) + ret %S.json.Json %t32 +} + +define internal %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a10 = alloca i64, align 16 + %a34 = alloca %S.lsp.Ref, align 16 + %a35 = alloca %S.lsp.Ref, align 16 + %a37 = alloca %S.lsp.Ref, align 16 + %a39 = alloca %S.json.Json, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca %S.json.Json, align 16 + %a56 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = load %S.lsp.Analysis, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = load i64, ptr %a3 + %t8 = load i64, ptr %a4 + %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br label %logic.from10762 +logic.from10762: + br i1 %t12, label %logic.end10764, label %logic.rhs10763 +logic.rhs10763: + %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t14 = load i64, ptr %a10 + %t15 = load { ptr, i64, i64 }, ptr %t13 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 %t14, %t16 + br i1 %t17, label %range10765, label %inrange10766 +range10765: + call void @finch_panic_index(ptr @.str.7098, i64 420, i64 %t14, i64 %t16) + unreachable +inrange10766: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.lsp.Ref, ptr %t18, i64 %t14 + %t20 = getelementptr inbounds %S.lsp.Ref, ptr %t19, i32 0, i32 4 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = icmp eq i64 %t22, 0 + br label %logic.rend10767 +logic.rend10767: + br label %logic.end10764 +logic.end10764: + %t24 = phi i1 [ true, %logic.from10762 ], [ %t23, %logic.rend10767 ] + br i1 %t24, label %then10768, label %endif10770 +then10768: + %t25 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t25 +endif10770: + %t26 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t27 = load i64, ptr %a10 + %t28 = load { ptr, i64, i64 }, ptr %t26 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 %t27, %t29 + br i1 %t30, label %range10771, label %inrange10772 +range10771: + call void @finch_panic_index(ptr @.str.7099, i64 423, i64 %t27, i64 %t29) + unreachable +inrange10772: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.lsp.Ref, ptr %t31, i64 %t27 + %t33 = load %S.lsp.Ref, ptr %t32 + store %S.lsp.Ref %t33, ptr %a34 + call void @finch.copy.S_lsp_Ref(ptr %a35, ptr %a34) + %t36 = load %S.lsp.Ref, ptr %a35 + store %S.lsp.Ref %t36, ptr %a37 + %t38 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t38, ptr %a39 + %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 4 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t41) + %t43 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t42) + store { ptr, i64, i64 } %t42, ptr %a44 + call void @finch_str_drop(ptr %a44) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7100, i64 3, i64 0 }, %S.json.Json %t43) + store %S.json.Json %t43, ptr %a45 + call void @finch.drop.S_json_Json(ptr %a45) + %t46 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 5 + %t47 = load i64, ptr %t46 + %t48 = sub i64 %t47, 1 + %t49 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 + %t50 = load i64, ptr %t49 + %t51 = sub i64 %t50, 1 + %t52 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 + %t53 = load i64, ptr %t52 + %t54 = sub i64 %t53, 1 + %t55 = call %S.json.Json @finch.lsp.range(i64 %t48, i64 %t51, i64 %t54) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7101, i64 5, i64 0 }, %S.json.Json %t55) + store %S.json.Json %t55, ptr %a56 + call void @finch.drop.S_json_Json(ptr %a56) + %t57 = load %S.json.Json, ptr %a39 + call void @finch.drop.S_lsp_Ref(ptr %a37) + ret %S.json.Json %t57 +} + +define internal %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.json.Json, align 16 + %a6 = alloca i64, align 16 + %a14 = alloca %S.lsp.FnRec, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca %S.json.Json, align 16 + %a61 = alloca i64, align 16 + %a69 = alloca %S.lsp.StructRec, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca %S.json.Json, align 16 + %a95 = alloca i64, align 16 + %a103 = alloca %S.lsp.EnumRec, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t3, ptr %a4 + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a6 + br label %each.cond10773 +each.cond10773: + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load i64, ptr %a6 + %t10 = icmp slt i64 %t9, %t8 + br i1 %t10, label %each.body10774, label %each.end10776 +each.body10774: + %t11 = load ptr, ptr %t5 + %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %t11, i64 %t9 + %t13 = load %S.lsp.FnRec, ptr %t12 + store %S.lsp.FnRec %t13, ptr %a14 + %t15 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 3 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } %t17, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp eq i32 %t20, 0 + br i1 %t21, label %then10777, label %endif10779 +then10777: + br label %each.step10775 +endif10779: + store i64 12, ptr %a22 + %t23 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = icmp sgt i64 %t31, 0 + br i1 %t32, label %then10780, label %endif10782 +then10780: + store i64 6, ptr %a22 + %t33 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.7102, i64 1, i64 0 }, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a35 + %t39 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t38, ptr %a42 + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t38, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t45, ptr %a28 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %endif10782 +endif10782: + %t48 = load { ptr, i64, i64 }, ptr %a28 + %t49 = load i64, ptr %a22 + %t50 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 4 + %t51 = load i64, ptr %t50 + %t52 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 5 + %t53 = load i64, ptr %t52 + %t54 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 6 + %t55 = load i64, ptr %t54 + %t56 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t48, i64 %t49, i64 %t51, i64 %t53, i64 %t55) + call void @finch.json.Json.push(ptr %a4, %S.json.Json %t56) + store %S.json.Json %t56, ptr %a57 + call void @finch.drop.S_json_Json(ptr %a57) + call void @finch_str_drop(ptr %a28) + br label %each.step10775 +each.step10775: + %t58 = load i64, ptr %a6 + %t59 = add i64 %t58, 1 + store i64 %t59, ptr %a6 + br label %each.cond10773 +each.end10776: + %t60 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a61 + br label %each.cond10783 +each.cond10783: + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 + %t63 = load i64, ptr %t62 + %t64 = load i64, ptr %a61 + %t65 = icmp slt i64 %t64, %t63 + br i1 %t65, label %each.body10784, label %each.end10786 +each.body10784: + %t66 = load ptr, ptr %t60 + %t67 = getelementptr inbounds %S.lsp.StructRec, ptr %t66, i64 %t64 + %t68 = load %S.lsp.StructRec, ptr %t67 + store %S.lsp.StructRec %t68, ptr %a69 + %t70 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 2 + %t71 = load { ptr, i64, i64 }, ptr %t70 + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } %t72, ptr %a74 + %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) + %t76 = icmp ne i32 %t75, 0 + br i1 %t76, label %then10787, label %endif10789 +then10787: + %t77 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 1 + %t78 = load { ptr, i64, i64 }, ptr %t77 + %t79 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 + %t80 = load i64, ptr %t79 + %t81 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 4 + %t82 = load i64, ptr %t81 + %t83 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 + %t84 = load i64, ptr %t83 + %t85 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 5 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = add i64 %t84, %t87 + %t89 = add i64 %t88, 1 + %t90 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t78, i64 23, i64 %t80, i64 %t82, i64 %t89) + call void @finch.json.Json.push(ptr %a4, %S.json.Json %t90) + store %S.json.Json %t90, ptr %a91 + call void @finch.drop.S_json_Json(ptr %a91) + br label %endif10789 +endif10789: + br label %each.step10785 +each.step10785: + %t92 = load i64, ptr %a61 + %t93 = add i64 %t92, 1 + store i64 %t93, ptr %a61 + br label %each.cond10783 +each.end10786: + %t94 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a95 + br label %each.cond10790 +each.cond10790: + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t97 = load i64, ptr %t96 + %t98 = load i64, ptr %a95 + %t99 = icmp slt i64 %t98, %t97 + br i1 %t99, label %each.body10791, label %each.end10793 +each.body10791: + %t100 = load ptr, ptr %t94 + %t101 = getelementptr inbounds %S.lsp.EnumRec, ptr %t100, i64 %t98 + %t102 = load %S.lsp.EnumRec, ptr %t101 + store %S.lsp.EnumRec %t102, ptr %a103 + %t104 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 2 + %t105 = load { ptr, i64, i64 }, ptr %t104 + %t106 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } %t106, ptr %a108 + %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) + %t110 = icmp ne i32 %t109, 0 + br i1 %t110, label %then10794, label %endif10796 +then10794: + %t111 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 1 + %t112 = load { ptr, i64, i64 }, ptr %t111 + %t113 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 + %t114 = load i64, ptr %t113 + %t115 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 4 + %t116 = load i64, ptr %t115 + %t117 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 + %t118 = load i64, ptr %t117 + %t119 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 5 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 + %t121 = load i64, ptr %t120 + %t122 = add i64 %t118, %t121 + %t123 = add i64 %t122, 1 + %t124 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t112, i64 10, i64 %t114, i64 %t116, i64 %t123) + call void @finch.json.Json.push(ptr %a4, %S.json.Json %t124) + store %S.json.Json %t124, ptr %a125 + call void @finch.drop.S_json_Json(ptr %a125) + br label %endif10796 +endif10796: + br label %each.step10792 +each.step10792: + %t126 = load i64, ptr %a95 + %t127 = add i64 %t126, 1 + store i64 %t127, ptr %a95 + br label %each.cond10790 +each.end10793: + %t128 = load %S.json.Json, ptr %a4 + ret %S.json.Json %t128 +} + +define internal %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %p0, i64 %p1, i64 %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca %S.json.Json, align 16 + %a10 = alloca %S.json.Json, align 16 + %a13 = alloca %S.json.Json, align 16 + %a15 = alloca %S.json.Json, align 16 + %a19 = alloca %S.json.Json, align 16 + %a22 = alloca %S.json.Json, align 16 + %a31 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a1 + %t9 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t8) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7103, i64 4, i64 0 }, %S.json.Json %t9) + store %S.json.Json %t9, ptr %a10 + call void @finch.drop.S_json_Json(ptr %a10) + %t11 = load i64, ptr %a2 + %t12 = call %S.json.Json @finch.lsp.num(i64 %t11) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7104, i64 4, i64 0 }, %S.json.Json %t12) + store %S.json.Json %t12, ptr %a13 + call void @finch.drop.S_json_Json(ptr %a13) + %t14 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t14, ptr %a15 + %t16 = load i64, ptr %a3 + %t17 = sub i64 %t16, 1 + %t18 = call %S.json.Json @finch.lsp.position(i64 %t17, i64 0) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7105, i64 5, i64 0 }, %S.json.Json %t18) + store %S.json.Json %t18, ptr %a19 + call void @finch.drop.S_json_Json(ptr %a19) + %t20 = load i64, ptr %a5 + %t21 = call %S.json.Json @finch.lsp.position(i64 %t20, i64 0) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7106, i64 3, i64 0 }, %S.json.Json %t21) + store %S.json.Json %t21, ptr %a22 + call void @finch.drop.S_json_Json(ptr %a22) + %t23 = load %S.json.Json, ptr %a15 + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7107, i64 5, i64 0 }, %S.json.Json %t23) + %t24 = load i64, ptr %a3 + %t25 = sub i64 %t24, 1 + %t26 = load i64, ptr %a4 + %t27 = sub i64 %t26, 1 + %t28 = load i64, ptr %a4 + %t29 = sub i64 %t28, 1 + %t30 = call %S.json.Json @finch.lsp.range(i64 %t25, i64 %t27, i64 %t29) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7108, i64 14, i64 0 }, %S.json.Json %t30) + store %S.json.Json %t30, ptr %a31 + call void @finch.drop.S_json_Json(ptr %a31) + %t32 = load %S.json.Json, ptr %a7 + call void @finch.drop.S_json_Json(ptr %a15) + ret %S.json.Json %t32 +} + +define internal %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + %a12 = alloca %S.json.Json, align 16 + %a18 = alloca %S.json.Json, align 16 + %a23 = alloca %S.json.Json, align 16 + %a25 = alloca %S.json.Json, align 16 + %a28 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a1 + %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7109, i64 5, i64 0 }, %S.json.Json %t8) + store %S.json.Json %t8, ptr %a9 + call void @finch.drop.S_json_Json(ptr %a9) + %t10 = load i64, ptr %a2 + %t11 = call %S.json.Json @finch.lsp.num(i64 %t10) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7110, i64 4, i64 0 }, %S.json.Json %t11) + store %S.json.Json %t11, ptr %a12 + call void @finch.drop.S_json_Json(ptr %a12) + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sgt i64 %t14, 0 + br i1 %t15, label %then10797, label %endif10799 +then10797: + %t16 = load { ptr, i64, i64 }, ptr %a3 + %t17 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t16) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7111, i64 6, i64 0 }, %S.json.Json %t17) + store %S.json.Json %t17, ptr %a18 + call void @finch.drop.S_json_Json(ptr %a18) + br label %endif10799 +endif10799: + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t20 = load i64, ptr %t19 + %t21 = icmp sgt i64 %t20, 0 + br i1 %t21, label %then10800, label %endif10802 +then10800: + %t22 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t22, ptr %a23 + %t24 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7113, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7112, i64 4, i64 0 }, %S.json.Json %t24) + store %S.json.Json %t24, ptr %a25 + call void @finch.drop.S_json_Json(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a4 + %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7114, i64 5, i64 0 }, %S.json.Json %t27) + store %S.json.Json %t27, ptr %a28 + call void @finch.drop.S_json_Json(ptr %a28) + %t29 = load %S.json.Json, ptr %a23 + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7115, i64 13, i64 0 }, %S.json.Json %t29) + call void @finch.drop.S_json_Json(ptr %a23) + br label %endif10802 +endif10802: + %t30 = load %S.json.Json, ptr %a6 + ret %S.json.Json %t30 +} + +define internal i1 @finch.lsp.isWordChar(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 97 + br label %logic.from10803 +logic.from10803: + br i1 %t3, label %logic.rhs10804, label %logic.end10805 +logic.rhs10804: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 122 + br label %logic.rend10806 +logic.rend10806: + br label %logic.end10805 +logic.end10805: + %t6 = phi i1 [ false, %logic.from10803 ], [ %t5, %logic.rend10806 ] + br label %logic.from10807 +logic.from10807: + br i1 %t6, label %logic.end10809, label %logic.rhs10808 +logic.rhs10808: + %t7 = load i8, ptr %a1 + %t8 = icmp uge i8 %t7, 65 + br label %logic.from10810 +logic.from10810: + br i1 %t8, label %logic.rhs10811, label %logic.end10812 +logic.rhs10811: + %t9 = load i8, ptr %a1 + %t10 = icmp ule i8 %t9, 90 + br label %logic.rend10813 +logic.rend10813: + br label %logic.end10812 +logic.end10812: + %t11 = phi i1 [ false, %logic.from10810 ], [ %t10, %logic.rend10813 ] + br label %logic.rend10814 +logic.rend10814: + br label %logic.end10809 +logic.end10809: + %t12 = phi i1 [ true, %logic.from10807 ], [ %t11, %logic.rend10814 ] + br label %logic.from10815 +logic.from10815: + br i1 %t12, label %logic.end10817, label %logic.rhs10816 +logic.rhs10816: + %t13 = load i8, ptr %a1 + %t14 = icmp uge i8 %t13, 48 + br label %logic.from10818 +logic.from10818: + br i1 %t14, label %logic.rhs10819, label %logic.end10820 +logic.rhs10819: + %t15 = load i8, ptr %a1 + %t16 = icmp ule i8 %t15, 57 + br label %logic.rend10821 +logic.rend10821: + br label %logic.end10820 +logic.end10820: + %t17 = phi i1 [ false, %logic.from10818 ], [ %t16, %logic.rend10821 ] + br label %logic.rend10822 +logic.rend10822: + br label %logic.end10817 +logic.end10817: + %t18 = phi i1 [ true, %logic.from10815 ], [ %t17, %logic.rend10822 ] + br label %logic.from10823 +logic.from10823: + br i1 %t18, label %logic.end10825, label %logic.rhs10824 +logic.rhs10824: + %t19 = load i8, ptr %a1 + %t20 = icmp eq i8 %t19, 95 + br label %logic.rend10826 +logic.rend10826: + br label %logic.end10825 +logic.end10825: + %t21 = phi i1 [ true, %logic.from10823 ], [ %t20, %logic.rend10826 ] + ret i1 %t21 +} + +define internal void @finch.lsp.methodItems(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca %S.docs.Doc, align 16 + %a12 = alloca i64, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.json.Json, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond10827 +each.cond10827: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body10828, label %each.end10830 +each.body10828: + %t8 = load ptr, ptr %a2 + %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 + %t10 = load %S.docs.Doc, ptr %t9 + store %S.docs.Doc %t10, ptr %a11 + store i64 2, ptr %a12 + %t13 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.7117, i64 1, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then10831, label %endif10833 +then10831: + store i64 5, ptr %a12 + br label %endif10833 +endif10833: + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic10834, label %ok10835 +panic10834: + call void @finch_panic(ptr @.str.7118, i64 497, ptr @.str.7119) + unreachable +ok10835: + %t22 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = load i64, ptr %a12 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 + %t26 = load { ptr, i64, i64 }, ptr %t25 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 2 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t23, i64 %t24, { ptr, i64, i64 } %t26, { ptr, i64, i64 } %t28) + call void @finch.json.Json.push(ptr %t20, %S.json.Json %t29) + store %S.json.Json %t29, ptr %a30 + call void @finch.drop.S_json_Json(ptr %a30) + br label %each.step10829 +each.step10829: + %t31 = load i64, ptr %a3 + %t32 = add i64 %t31, 1 + store i64 %t32, ptr %a3 + br label %each.cond10827 +each.end10830: + ret void +} + +define internal %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca %S.lsp.VarRec, align 16 + %a7 = alloca i64, align 16 + %a15 = alloca %S.lsp.VarRec, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca %S.lsp.VarRec, align 16 + %a44 = alloca %S.lsp.VarRec, align 16 + %a47 = alloca %S.lsp.VarRec, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i64 %p3, ptr %a4 + store %S.lsp.VarRec zeroinitializer, ptr %a5 + %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 + store i64 0, ptr %a7 + br label %each.cond10836 +each.cond10836: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load i64, ptr %a7 + %t11 = icmp slt i64 %t10, %t9 + br i1 %t11, label %each.body10837, label %each.end10839 +each.body10837: + %t12 = load ptr, ptr %t6 + %t13 = getelementptr inbounds %S.lsp.VarRec, ptr %t12, i64 %t10 + %t14 = load %S.lsp.VarRec, ptr %t13 + store %S.lsp.VarRec %t14, ptr %a15 + %t16 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } %t18, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.from10840 +logic.from10840: + br i1 %t22, label %logic.rhs10841, label %logic.end10842 +logic.rhs10841: + %t23 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 3 + %t24 = load i64, ptr %t23 + %t25 = load i64, ptr %a4 + %t26 = icmp sle i64 %t24, %t25 + br label %logic.rend10843 +logic.rend10843: + br label %logic.end10842 +logic.end10842: + %t27 = phi i1 [ false, %logic.from10840 ], [ %t26, %logic.rend10843 ] + br label %logic.from10844 +logic.from10844: + br i1 %t27, label %logic.rhs10845, label %logic.end10846 +logic.rhs10845: + %t28 = load i64, ptr %a4 + %t29 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 7 + %t30 = load i64, ptr %t29 + %t31 = add i64 %t30, 1 + %t32 = icmp sle i64 %t28, %t31 + br label %logic.rend10847 +logic.rend10847: + br label %logic.end10846 +logic.end10846: + %t33 = phi i1 [ false, %logic.from10844 ], [ %t32, %logic.rend10847 ] + br label %logic.from10848 +logic.from10848: + br i1 %t33, label %logic.rhs10849, label %logic.end10850 +logic.rhs10849: + %t34 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 5 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } %t36, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.rend10851 +logic.rend10851: + br label %logic.end10850 +logic.end10850: + %t41 = phi i1 [ false, %logic.from10848 ], [ %t40, %logic.rend10851 ] + br i1 %t41, label %then10852, label %endif10854 +then10852: + %t42 = load %S.lsp.VarRec, ptr %a15 + store %S.lsp.VarRec %t42, ptr %a43 + call void @finch.copy.S_lsp_VarRec(ptr %a44, ptr %a43) + %t45 = load %S.lsp.VarRec, ptr %a44 + %t46 = load %S.lsp.VarRec, ptr %a5 + store %S.lsp.VarRec %t45, ptr %a5 + store %S.lsp.VarRec %t46, ptr %a47 + call void @finch.drop.S_lsp_VarRec(ptr %a47) + br label %endif10854 +endif10854: + br label %each.step10838 +each.step10838: + %t48 = load i64, ptr %a7 + %t49 = add i64 %t48, 1 + store i64 %t49, ptr %a7 + br label %each.cond10836 +each.end10839: + %t50 = load %S.lsp.VarRec, ptr %a5 + ret %S.lsp.VarRec %t50 +} + +define internal void @finch.drop.S_lsp_Names(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Names, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + ret void +} + +define internal %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca %S.json.Json, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca i64, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca i64, align 16 + %a56 = alloca i1, align 16 + %a60 = alloca i64, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca i1, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca i64, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca i64, align 16 + %a125 = alloca i64, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca i64, align 16 + %a146 = alloca %S.lsp.FnRec, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca %S.json.Json, align 16 + %a168 = alloca i64, align 16 + %a176 = alloca %S.lsp.StructRec, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca %S.json.Json, align 16 + %a198 = alloca i64, align 16 + %a206 = alloca %S.lsp.EnumRec, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca %S.json.Json, align 16 + %a230 = alloca i64, align 16 + %a238 = alloca %S.lsp.EnumRec, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca %S.lsp.VarRec, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca i64, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca %S.json.Json, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca %S.lsp.VarRec, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca i64, align 16 + %a387 = alloca %S.lsp.StructRec, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca i64, align 16 + %a418 = alloca %S.json.Json, align 16 + %a424 = alloca i64, align 16 + %a432 = alloca %S.lsp.FnRec, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca %S.json.Json, align 16 + %a450 = alloca %S.lsp.Names, align 16 + %a452 = alloca i64, align 16 + %a460 = alloca %S.lsp.VarRec, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca %S.json.Json, align 16 + %a492 = alloca i64, align 16 + %a500 = alloca %S.lsp.FnRec, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca %S.json.Json, align 16 + %a525 = alloca i64, align 16 + %a533 = alloca %S.lsp.StructRec, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca %S.json.Json, align 16 + %a558 = alloca i64, align 16 + %a566 = alloca %S.lsp.EnumRec, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca %S.json.Json, align 16 + %a591 = alloca i64, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca %S.json.Json, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca i64, align 16 + %a617 = alloca %S.docs.Doc, align 16 + %a628 = alloca %S.json.Json, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca i64, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a646 = alloca %S.json.Json, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca i64, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = load i64, ptr %a4 + %t10 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t8, i64 %t9) + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load i64, ptr %a5 + %t13 = sub i64 %t12, 1 + store i64 %t13, ptr %a14 + %t15 = load i64, ptr %a14 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t17 = load i64, ptr %t16 + %t18 = icmp sgt i64 %t15, %t17 + br i1 %t18, label %then10855, label %endif10857 +then10855: + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t20 = load i64, ptr %t19 + store i64 %t20, ptr %a14 + br label %endif10857 +endif10857: + %t21 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t21, ptr %a22 + %t24 = load i64, ptr %a14 + call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.7120, i64 519) + %t25 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 + %t28 = load i64, ptr %t27 + store i64 %t28, ptr %a29 + br label %while.cond10858 +while.cond10858: + %t30 = load i64, ptr %a29 + %t31 = icmp sgt i64 %t30, 0 + br label %logic.from10861 +logic.from10861: + br i1 %t31, label %logic.rhs10862, label %logic.end10863 +logic.rhs10862: + %t32 = load i64, ptr %a29 + %t33 = sub i64 %t32, 1 + %t34 = load { ptr, i64, i64 }, ptr %a26 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 %t33, %t35 + br i1 %t36, label %range10864, label %inrange10865 +range10864: + call void @finch_panic_index(ptr @.str.7121, i64 522, i64 %t33, i64 %t35) + unreachable +inrange10865: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds i8, ptr %t37, i64 %t33 + %t39 = load i8, ptr %t38 + %t40 = call i1 @finch.lsp.isWordChar(i8 %t39) + br label %logic.rend10866 +logic.rend10866: + br label %logic.end10863 +logic.end10863: + %t41 = phi i1 [ false, %logic.from10861 ], [ %t40, %logic.rend10866 ] + br i1 %t41, label %while.body10859, label %while.end10860 +while.body10859: + %t42 = load i64, ptr %a29 + %t43 = sub i64 %t42, 1 + store i64 %t43, ptr %a29 + br label %while.cond10858 +while.end10860: + %t44 = load i64, ptr %a29 + %t45 = icmp sgt i64 %t44, 0 + br label %logic.from10867 +logic.from10867: + br i1 %t45, label %logic.rhs10868, label %logic.end10869 +logic.rhs10868: + %t46 = load i64, ptr %a29 + %t47 = sub i64 %t46, 1 + %t48 = load { ptr, i64, i64 }, ptr %a26 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range10870, label %inrange10871 +range10870: + call void @finch_panic_index(ptr @.str.7122, i64 525, i64 %t47, i64 %t49) + unreachable +inrange10871: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 + %t53 = load i8, ptr %t52 + %t54 = icmp eq i8 %t53, 46 + br label %logic.rend10872 +logic.rend10872: + br label %logic.end10869 +logic.end10869: + %t55 = phi i1 [ false, %logic.from10867 ], [ %t54, %logic.rend10872 ] + store i1 %t55, ptr %a56 + %t57 = load i1, ptr %a56 + br i1 %t57, label %then10873, label %endif10875 +then10873: + %t58 = load i64, ptr %a29 + %t59 = sub i64 %t58, 1 + store i64 %t59, ptr %a60 + br label %while.cond10876 +while.cond10876: + %t61 = load i64, ptr %a60 + %t62 = icmp sgt i64 %t61, 0 + br label %logic.from10879 +logic.from10879: + br i1 %t62, label %logic.rhs10880, label %logic.end10881 +logic.rhs10880: + %t63 = load i64, ptr %a60 + %t64 = sub i64 %t63, 1 + %t65 = load { ptr, i64, i64 }, ptr %a26 + %t66 = extractvalue { ptr, i64, i64 } %t65, 1 + %t67 = icmp uge i64 %t64, %t66 + br i1 %t67, label %range10882, label %inrange10883 +range10882: + call void @finch_panic_index(ptr @.str.7123, i64 528, i64 %t64, i64 %t66) + unreachable +inrange10883: + %t68 = extractvalue { ptr, i64, i64 } %t65, 0 + %t69 = getelementptr inbounds i8, ptr %t68, i64 %t64 + %t70 = load i8, ptr %t69 + %t71 = call i1 @finch.lsp.isWordChar(i8 %t70) + br label %logic.from10884 +logic.from10884: + br i1 %t71, label %logic.end10886, label %logic.rhs10885 +logic.rhs10885: + %t72 = load i64, ptr %a60 + %t73 = sub i64 %t72, 1 + %t74 = load { ptr, i64, i64 }, ptr %a26 + %t75 = extractvalue { ptr, i64, i64 } %t74, 1 + %t76 = icmp uge i64 %t73, %t75 + br i1 %t76, label %range10887, label %inrange10888 +range10887: + call void @finch_panic_index(ptr @.str.7124, i64 528, i64 %t73, i64 %t75) + unreachable +inrange10888: + %t77 = extractvalue { ptr, i64, i64 } %t74, 0 + %t78 = getelementptr inbounds i8, ptr %t77, i64 %t73 + %t79 = load i8, ptr %t78 + %t80 = icmp eq i8 %t79, 91 + br label %logic.rend10889 +logic.rend10889: + br label %logic.end10886 +logic.end10886: + %t81 = phi i1 [ true, %logic.from10884 ], [ %t80, %logic.rend10889 ] + br label %logic.from10890 +logic.from10890: + br i1 %t81, label %logic.end10892, label %logic.rhs10891 +logic.rhs10891: + %t82 = load i64, ptr %a60 + %t83 = sub i64 %t82, 1 + %t84 = load { ptr, i64, i64 }, ptr %a26 + %t85 = extractvalue { ptr, i64, i64 } %t84, 1 + %t86 = icmp uge i64 %t83, %t85 + br i1 %t86, label %range10893, label %inrange10894 +range10893: + call void @finch_panic_index(ptr @.str.7125, i64 528, i64 %t83, i64 %t85) + unreachable +inrange10894: + %t87 = extractvalue { ptr, i64, i64 } %t84, 0 + %t88 = getelementptr inbounds i8, ptr %t87, i64 %t83 + %t89 = load i8, ptr %t88 + %t90 = icmp eq i8 %t89, 93 + br label %logic.rend10895 +logic.rend10895: + br label %logic.end10892 +logic.end10892: + %t91 = phi i1 [ true, %logic.from10890 ], [ %t90, %logic.rend10895 ] + br label %logic.rend10896 +logic.rend10896: + br label %logic.end10881 +logic.end10881: + %t92 = phi i1 [ false, %logic.from10879 ], [ %t91, %logic.rend10896 ] + br i1 %t92, label %while.body10877, label %while.end10878 +while.body10877: + %t93 = load i64, ptr %a60 + %t94 = sub i64 %t93, 1 + store i64 %t94, ptr %a60 + br label %while.cond10876 +while.end10878: + %t95 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t95, ptr %a96 + %t98 = load i64, ptr %a60 + %t99 = load i64, ptr %a29 + %t100 = sub i64 %t99, 1 + call void @finch_str_sub(ptr %a97, ptr %a96, i64 %t98, i64 %t100, ptr @.str.7126, i64 531) + %t101 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t101, ptr %a102 + store i1 false, ptr %a103 + %t104 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t104, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.7128, i64 1, i64 0 }, ptr %a107 + %t108 = call i64 @finch_str_find(ptr %a105, ptr %a107) + store i64 %t108, ptr %a109 + %t110 = load i64, ptr %a109 + %t111 = icmp sge i64 %t110, 0 + br i1 %t111, label %then10897, label %endif10899 +then10897: + %t112 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t112, ptr %a113 + %t115 = load i64, ptr %a109 + call void @finch_str_sub(ptr %a114, ptr %a113, i64 0, i64 %t115, ptr @.str.7129, i64 535) + %t116 = load { ptr, i64, i64 }, ptr %a114 + %t117 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t116, ptr %a102 + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_drop(ptr %a118) + store i1 true, ptr %a103 + br label %endif10899 +endif10899: + %t119 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %a102 + store i64 -1, ptr %a122 + %t123 = load i64, ptr %t120 + %t124 = load ptr, ptr %t119 + store i64 0, ptr %a125 + br label %find.cond10900 +find.cond10900: + %t126 = load i64, ptr %a125 + %t127 = icmp slt i64 %t126, %t123 + br i1 %t127, label %find.body10901, label %find.end10904 +find.body10901: + %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 %t126 + %t129 = load { ptr, i64, i64 }, ptr %t128 + store { ptr, i64, i64 } %t129, ptr %a130 + store { ptr, i64, i64 } %t121, ptr %a131 + %t132 = call i32 @finch_str_eq(ptr %a130, ptr %a131) + %t133 = icmp ne i32 %t132, 0 + br i1 %t133, label %find.hit10902, label %find.next10903 +find.hit10902: + store i64 %t126, ptr %a122 + br label %find.end10904 +find.next10903: + %t134 = add i64 %t126, 1 + store i64 %t134, ptr %a125 + br label %find.cond10900 +find.end10904: + %t135 = load i64, ptr %a122 + %t136 = icmp sge i64 %t135, 0 + br i1 %t136, label %then10905, label %endif10907 +then10905: + %t137 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a138 + br label %each.cond10908 +each.cond10908: + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 + %t140 = load i64, ptr %t139 + %t141 = load i64, ptr %a138 + %t142 = icmp slt i64 %t141, %t140 + br i1 %t142, label %each.body10909, label %each.end10911 +each.body10909: + %t143 = load ptr, ptr %t137 + %t144 = getelementptr inbounds %S.lsp.FnRec, ptr %t143, i64 %t141 + %t145 = load %S.lsp.FnRec, ptr %t144 + store %S.lsp.FnRec %t145, ptr %a146 + %t147 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 0 + %t148 = load { ptr, i64, i64 }, ptr %t147 + %t149 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t148, ptr %a150 + store { ptr, i64, i64 } %t149, ptr %a151 + %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + br label %logic.from10912 +logic.from10912: + br i1 %t153, label %logic.rhs10913, label %logic.end10914 +logic.rhs10913: + %t154 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 2 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 + %t156 = load i64, ptr %t155 + %t157 = icmp eq i64 %t156, 0 + br label %logic.rend10915 +logic.rend10915: + br label %logic.end10914 +logic.end10914: + %t158 = phi i1 [ false, %logic.from10912 ], [ %t157, %logic.rend10915 ] + br i1 %t158, label %then10916, label %endif10918 +then10916: + %t159 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + %t161 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 7 + %t162 = load { ptr, i64, i64 }, ptr %t161 + %t163 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t160, i64 3, { ptr, i64, i64 } %t162, { ptr, i64, i64 } { ptr @.str.7130, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t163) + store %S.json.Json %t163, ptr %a164 + call void @finch.drop.S_json_Json(ptr %a164) + br label %endif10918 +endif10918: + br label %each.step10910 +each.step10910: + %t165 = load i64, ptr %a138 + %t166 = add i64 %t165, 1 + store i64 %t166, ptr %a138 + br label %each.cond10908 +each.end10911: + %t167 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a168 + br label %each.cond10919 +each.cond10919: + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = load i64, ptr %a168 + %t172 = icmp slt i64 %t171, %t170 + br i1 %t172, label %each.body10920, label %each.end10922 +each.body10920: + %t173 = load ptr, ptr %t167 + %t174 = getelementptr inbounds %S.lsp.StructRec, ptr %t173, i64 %t171 + %t175 = load %S.lsp.StructRec, ptr %t174 + store %S.lsp.StructRec %t175, ptr %a176 + %t177 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 0 + %t178 = load { ptr, i64, i64 }, ptr %t177 + %t179 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } %t179, ptr %a181 + %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + br i1 %t183, label %then10923, label %endif10925 +then10923: + %t184 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 + %t185 = load { ptr, i64, i64 }, ptr %t184 + %t186 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 + %t187 = load { ptr, i64, i64 }, ptr %t186 + store { ptr, i64, i64 } { ptr @.str.7131, i64 7, i64 0 }, ptr %a189 + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a188 + %t192 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t185, i64 22, { ptr, i64, i64 } %t191, { ptr, i64, i64 } { ptr @.str.7132, i64 0, i64 0 }) + store { ptr, i64, i64 } %t191, ptr %a193 + call void @finch_str_drop(ptr %a193) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t192) + store %S.json.Json %t192, ptr %a194 + call void @finch.drop.S_json_Json(ptr %a194) + br label %endif10925 +endif10925: + br label %each.step10921 +each.step10921: + %t195 = load i64, ptr %a168 + %t196 = add i64 %t195, 1 + store i64 %t196, ptr %a168 + br label %each.cond10919 +each.end10922: + %t197 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a198 + br label %each.cond10926 +each.cond10926: + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 + %t200 = load i64, ptr %t199 + %t201 = load i64, ptr %a198 + %t202 = icmp slt i64 %t201, %t200 + br i1 %t202, label %each.body10927, label %each.end10929 +each.body10927: + %t203 = load ptr, ptr %t197 + %t204 = getelementptr inbounds %S.lsp.EnumRec, ptr %t203, i64 %t201 + %t205 = load %S.lsp.EnumRec, ptr %t204 + store %S.lsp.EnumRec %t205, ptr %a206 + %t207 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 0 + %t208 = load { ptr, i64, i64 }, ptr %t207 + %t209 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t208, ptr %a210 + store { ptr, i64, i64 } %t209, ptr %a211 + %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) + %t213 = icmp ne i32 %t212, 0 + br i1 %t213, label %then10930, label %endif10932 +then10930: + %t214 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 + %t215 = load { ptr, i64, i64 }, ptr %t214 + %t216 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } { ptr @.str.7133, i64 5, i64 0 }, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a218 + %t222 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t215, i64 13, { ptr, i64, i64 } %t221, { ptr, i64, i64 } { ptr @.str.7134, i64 0, i64 0 }) + store { ptr, i64, i64 } %t221, ptr %a223 + call void @finch_str_drop(ptr %a223) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t222) + store %S.json.Json %t222, ptr %a224 + call void @finch.drop.S_json_Json(ptr %a224) + br label %endif10932 +endif10932: + br label %each.step10928 +each.step10928: + %t225 = load i64, ptr %a198 + %t226 = add i64 %t225, 1 + store i64 %t226, ptr %a198 + br label %each.cond10926 +each.end10929: + %t227 = load %S.json.Json, ptr %a7 + %t228 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t227) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t228 +endif10907: + %t229 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a230 + br label %each.cond10933 +each.cond10933: + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 + %t232 = load i64, ptr %t231 + %t233 = load i64, ptr %a230 + %t234 = icmp slt i64 %t233, %t232 + br i1 %t234, label %each.body10934, label %each.end10936 +each.body10934: + %t235 = load ptr, ptr %t229 + %t236 = getelementptr inbounds %S.lsp.EnumRec, ptr %t235, i64 %t233 + %t237 = load %S.lsp.EnumRec, ptr %t236 + store %S.lsp.EnumRec %t237, ptr %a238 + %t239 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t240, ptr %a242 + store { ptr, i64, i64 } %t241, ptr %a243 + %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) + %t245 = icmp ne i32 %t244, 0 + br label %logic.from10937 +logic.from10937: + br i1 %t245, label %logic.rhs10938, label %logic.end10939 +logic.rhs10938: + %t246 = load %S.lsp.Analysis, ptr %a1 + %t247 = load { ptr, i64, i64 }, ptr %a3 + %t248 = load { ptr, i64, i64 }, ptr %a102 + %t249 = load i64, ptr %a4 + %t250 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t246, { ptr, i64, i64 } %t247, { ptr, i64, i64 } %t248, i64 %t249) + %t251 = extractvalue %S.lsp.VarRec %t250, 0 + store { ptr, i64, i64 } %t251, ptr %a252 + call void @finch_str_copy(ptr %a253, ptr %a252) + %t254 = load { ptr, i64, i64 }, ptr %a253 + store %S.lsp.VarRec %t250, ptr %a255 + call void @finch.drop.S_lsp_VarRec(ptr %a255) + %t256 = extractvalue { ptr, i64, i64 } %t254, 1 + store { ptr, i64, i64 } %t254, ptr %a257 + call void @finch_str_drop(ptr %a257) + %t258 = icmp eq i64 %t256, 0 + br label %logic.rend10940 +logic.rend10940: + br label %logic.end10939 +logic.end10939: + %t259 = phi i1 [ false, %logic.from10937 ], [ %t258, %logic.rend10940 ] + br i1 %t259, label %then10941, label %endif10943 +then10941: + %t260 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 5 + store i64 0, ptr %a261 + br label %each.cond10944 +each.cond10944: + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 + %t263 = load i64, ptr %t262 + %t264 = load i64, ptr %a261 + %t265 = icmp slt i64 %t264, %t263 + br i1 %t265, label %each.body10945, label %each.end10947 +each.body10945: + %t266 = load ptr, ptr %t260 + %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t266, i64 %t264 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t268, ptr %a269 + %t270 = load { ptr, i64, i64 }, ptr %a269 + %t271 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } %t272, ptr %a274 + store { ptr, i64, i64 } { ptr @.str.7135, i64 1, i64 0 }, ptr %a275 + call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) + %t276 = load { ptr, i64, i64 }, ptr %a273 + %t277 = load { ptr, i64, i64 }, ptr %a269 + store { ptr, i64, i64 } %t276, ptr %a279 + store { ptr, i64, i64 } %t277, ptr %a280 + call void @finch_str_concat(ptr %a278, ptr %a279, ptr %a280) + store { ptr, i64, i64 } %t276, ptr %a281 + call void @finch_str_drop(ptr %a281) + %t282 = load { ptr, i64, i64 }, ptr %a278 + %t283 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t270, i64 20, { ptr, i64, i64 } %t282, { ptr, i64, i64 } { ptr @.str.7136, i64 0, i64 0 }) + store { ptr, i64, i64 } %t282, ptr %a284 + call void @finch_str_drop(ptr %a284) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t283) + store %S.json.Json %t283, ptr %a285 + call void @finch.drop.S_json_Json(ptr %a285) + br label %each.step10946 +each.step10946: + %t286 = load i64, ptr %a261 + %t287 = add i64 %t286, 1 + store i64 %t287, ptr %a261 + br label %each.cond10944 +each.end10947: + %t288 = load %S.json.Json, ptr %a7 + %t289 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t288) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t289 +endif10943: + br label %each.step10935 +each.step10935: + %t290 = load i64, ptr %a230 + %t291 = add i64 %t290, 1 + store i64 %t291, ptr %a230 + br label %each.cond10933 +each.end10936: + %t292 = load %S.lsp.Analysis, ptr %a1 + %t293 = load { ptr, i64, i64 }, ptr %a3 + %t294 = load { ptr, i64, i64 }, ptr %a102 + %t295 = load i64, ptr %a4 + %t296 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t292, { ptr, i64, i64 } %t293, { ptr, i64, i64 } %t294, i64 %t295) + %t297 = extractvalue %S.lsp.VarRec %t296, 1 + store { ptr, i64, i64 } %t297, ptr %a298 + call void @finch_str_copy(ptr %a299, ptr %a298) + %t300 = load { ptr, i64, i64 }, ptr %a299 + store %S.lsp.VarRec %t296, ptr %a301 + call void @finch.drop.S_lsp_VarRec(ptr %a301) + store { ptr, i64, i64 } %t300, ptr %a302 + %t303 = load i1, ptr %a103 + br label %logic.from10948 +logic.from10948: + br i1 %t303, label %logic.rhs10949, label %logic.end10950 +logic.rhs10949: + %t304 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t304, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.7138, i64 2, i64 0 }, ptr %a307 + %t308 = call i32 @finch_str_starts(ptr %a305, ptr %a307) + %t309 = icmp ne i32 %t308, 0 + br label %logic.rend10951 +logic.rend10951: + br label %logic.end10950 +logic.end10950: + %t310 = phi i1 [ false, %logic.from10948 ], [ %t309, %logic.rend10951 ] + br i1 %t310, label %then10952, label %else10953 +then10952: + %t311 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t311, ptr %a312 + %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 + %t315 = load i64, ptr %t314 + call void @finch_str_sub(ptr %a313, ptr %a312, i64 2, i64 %t315, ptr @.str.7139, i64 569) + %t316 = load { ptr, i64, i64 }, ptr %a313 + %t317 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t316, ptr %a302 + store { ptr, i64, i64 } %t317, ptr %a318 + call void @finch_str_drop(ptr %a318) + br label %endif10954 +else10953: + %t319 = load i1, ptr %a103 + br label %logic.from10955 +logic.from10955: + br i1 %t319, label %logic.rhs10956, label %logic.end10957 +logic.rhs10956: + %t320 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t320, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.7140, i64 3, i64 0 }, ptr %a322 + %t323 = call i32 @finch_str_eq(ptr %a321, ptr %a322) + %t324 = icmp ne i32 %t323, 0 + br label %logic.rend10958 +logic.rend10958: + br label %logic.end10957 +logic.end10957: + %t325 = phi i1 [ false, %logic.from10955 ], [ %t324, %logic.rend10958 ] + br i1 %t325, label %then10959, label %endif10961 +then10959: + %t326 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } { ptr @.str.7141, i64 4, i64 0 }, ptr %a302 + store { ptr, i64, i64 } %t326, ptr %a327 + call void @finch_str_drop(ptr %a327) + br label %endif10961 +endif10961: + br label %endif10954 +endif10954: + %t328 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t328, ptr %a329 + store { ptr, i64, i64 } { ptr @.str.7143, i64 4, i64 0 }, ptr %a331 + %t332 = call i32 @finch_str_starts(ptr %a329, ptr %a331) + %t333 = icmp ne i32 %t332, 0 + br label %logic.from10962 +logic.from10962: + br i1 %t333, label %logic.rhs10963, label %logic.end10964 +logic.rhs10963: + %t334 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t334, ptr %a335 + store { ptr, i64, i64 } { ptr @.str.7145, i64 1, i64 0 }, ptr %a337 + %t338 = call i32 @finch_str_ends(ptr %a335, ptr %a337) + %t339 = icmp ne i32 %t338, 0 + br label %logic.rend10965 +logic.rend10965: + br label %logic.end10964 +logic.end10964: + %t340 = phi i1 [ false, %logic.from10962 ], [ %t339, %logic.rend10965 ] + br i1 %t340, label %then10966, label %endif10968 +then10966: + %t341 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t341, ptr %a342 + %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 + %t345 = load i64, ptr %t344 + %t346 = sub i64 %t345, 1 + call void @finch_str_sub(ptr %a343, ptr %a342, i64 4, i64 %t346, ptr @.str.7146, i64 574) + %t347 = load { ptr, i64, i64 }, ptr %a343 + %t348 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t347, ptr %a302 + store { ptr, i64, i64 } %t348, ptr %a349 + call void @finch_str_drop(ptr %a349) + br label %endif10968 +endif10968: + %t350 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t350, ptr %a351 + store { ptr, i64, i64 } { ptr @.str.7148, i64 2, i64 0 }, ptr %a353 + %t354 = call i32 @finch_str_starts(ptr %a351, ptr %a353) + %t355 = icmp ne i32 %t354, 0 + br i1 %t355, label %then10969, label %else10970 +then10969: + %t356 = call { ptr, i64, i64 } @finch.docs.arrayMethods() + call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t356) + store { ptr, i64, i64 } %t356, ptr %a357 + call void @finch.drop.arr_S_docs_Doc(ptr %a357) + br label %endif10971 +else10970: + %t358 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t358, ptr %a359 + store { ptr, i64, i64 } { ptr @.str.7149, i64 3, i64 0 }, ptr %a360 + %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) + %t362 = icmp ne i32 %t361, 0 + br i1 %t362, label %then10972, label %else10973 +then10972: + %t363 = call { ptr, i64, i64 } @finch.docs.strMethods() + call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t363) + store { ptr, i64, i64 } %t363, ptr %a364 + call void @finch.drop.arr_S_docs_Doc(ptr %a364) + br label %endif10974 +else10973: + %t365 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t365, ptr %a366 + store { ptr, i64, i64 } { ptr @.str.7151, i64 4, i64 0 }, ptr %a368 + %t369 = call i32 @finch_str_starts(ptr %a366, ptr %a368) + %t370 = icmp ne i32 %t369, 0 + br i1 %t370, label %then10975, label %else10976 +then10975: + %t371 = call { ptr, i64, i64 } @finch.docs.mapMethods() + call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t371) + store { ptr, i64, i64 } %t371, ptr %a372 + call void @finch.drop.arr_S_docs_Doc(ptr %a372) + br label %endif10977 +else10976: + %t373 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t373, ptr %a374 + call void @finch_str_copy(ptr %a375, ptr %a374) + %t376 = load { ptr, i64, i64 }, ptr %a375 + store { ptr, i64, i64 } %t376, ptr %a377 + %t378 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a379 + br label %each.cond10978 +each.cond10978: + %t380 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 + %t381 = load i64, ptr %t380 + %t382 = load i64, ptr %a379 + %t383 = icmp slt i64 %t382, %t381 + br i1 %t383, label %each.body10979, label %each.end10981 +each.body10979: + %t384 = load ptr, ptr %t378 + %t385 = getelementptr inbounds %S.lsp.StructRec, ptr %t384, i64 %t382 + %t386 = load %S.lsp.StructRec, ptr %t385 + store %S.lsp.StructRec %t386, ptr %a387 + %t388 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 1 + %t389 = load { ptr, i64, i64 }, ptr %t388 + %t390 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t389, ptr %a391 + store { ptr, i64, i64 } %t390, ptr %a392 + %t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392) + %t394 = icmp ne i32 %t393, 0 + br i1 %t394, label %then10982, label %endif10984 +then10982: + %t395 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 + %t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %t395, i32 0, i32 1 + %t397 = load i64, ptr %t396 + store i64 0, ptr %a398 + br label %for.cond10985 +for.cond10985: + %t399 = load i64, ptr %a398 + %t400 = icmp slt i64 %t399, %t397 + br i1 %t400, label %for.body10986, label %for.end10988 +for.body10986: + %t401 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 + %t402 = load i64, ptr %a398 + %t403 = load { ptr, i64, i64 }, ptr %t401 + %t404 = extractvalue { ptr, i64, i64 } %t403, 1 + %t405 = icmp uge i64 %t402, %t404 + br i1 %t405, label %range10989, label %inrange10990 +range10989: + call void @finch_panic_index(ptr @.str.7152, i64 587, i64 %t402, i64 %t404) + unreachable +inrange10990: + %t406 = extractvalue { ptr, i64, i64 } %t403, 0 + %t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i64 %t402 + %t408 = load { ptr, i64, i64 }, ptr %t407 + %t409 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 6 + %t410 = load i64, ptr %a398 + %t411 = load { ptr, i64, i64 }, ptr %t409 + %t412 = extractvalue { ptr, i64, i64 } %t411, 1 + %t413 = icmp uge i64 %t410, %t412 + br i1 %t413, label %range10991, label %inrange10992 +range10991: + call void @finch_panic_index(ptr @.str.7153, i64 587, i64 %t410, i64 %t412) + unreachable +inrange10992: + %t414 = extractvalue { ptr, i64, i64 } %t411, 0 + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t410 + %t416 = load { ptr, i64, i64 }, ptr %t415 + %t417 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t408, i64 5, { ptr, i64, i64 } %t416, { ptr, i64, i64 } { ptr @.str.7154, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t417) + store %S.json.Json %t417, ptr %a418 + call void @finch.drop.S_json_Json(ptr %a418) + br label %for.step10987 +for.step10987: + %t419 = load i64, ptr %a398 + %t420 = add i64 %t419, 1 + store i64 %t420, ptr %a398 + br label %for.cond10985 +for.end10988: + br label %endif10984 +endif10984: + br label %each.step10980 +each.step10980: + %t421 = load i64, ptr %a379 + %t422 = add i64 %t421, 1 + store i64 %t422, ptr %a379 + br label %each.cond10978 +each.end10981: + %t423 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a424 + br label %each.cond10993 +each.cond10993: + %t425 = getelementptr inbounds { ptr, i64, i64 }, ptr %t423, i32 0, i32 1 + %t426 = load i64, ptr %t425 + %t427 = load i64, ptr %a424 + %t428 = icmp slt i64 %t427, %t426 + br i1 %t428, label %each.body10994, label %each.end10996 +each.body10994: + %t429 = load ptr, ptr %t423 + %t430 = getelementptr inbounds %S.lsp.FnRec, ptr %t429, i64 %t427 + %t431 = load %S.lsp.FnRec, ptr %t430 + store %S.lsp.FnRec %t431, ptr %a432 + %t433 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 2 + %t434 = load { ptr, i64, i64 }, ptr %t433 + %t435 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t434, ptr %a436 + store { ptr, i64, i64 } %t435, ptr %a437 + %t438 = call i32 @finch_str_eq(ptr %a436, ptr %a437) + %t439 = icmp ne i32 %t438, 0 + br i1 %t439, label %then10997, label %endif10999 +then10997: + %t440 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 1 + %t441 = load { ptr, i64, i64 }, ptr %t440 + %t442 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 7 + %t443 = load { ptr, i64, i64 }, ptr %t442 + %t444 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t441, i64 2, { ptr, i64, i64 } %t443, { ptr, i64, i64 } { ptr @.str.7155, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t444) + store %S.json.Json %t444, ptr %a445 + call void @finch.drop.S_json_Json(ptr %a445) + br label %endif10999 +endif10999: + br label %each.step10995 +each.step10995: + %t446 = load i64, ptr %a424 + %t447 = add i64 %t446, 1 + store i64 %t447, ptr %a424 + br label %each.cond10993 +each.end10996: + call void @finch_str_drop(ptr %a377) + br label %endif10977 +endif10977: + br label %endif10974 +endif10974: + br label %endif10971 +endif10971: + %t448 = load %S.json.Json, ptr %a7 + %t449 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t448) + call void @finch_str_drop(ptr %a302) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t449 +endif10875: + store %S.lsp.Names zeroinitializer, ptr %a450 + %t451 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 + store i64 0, ptr %a452 + br label %each.cond11000 +each.cond11000: + %t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %t451, i32 0, i32 1 + %t454 = load i64, ptr %t453 + %t455 = load i64, ptr %a452 + %t456 = icmp slt i64 %t455, %t454 + br i1 %t456, label %each.body11001, label %each.end11003 +each.body11001: + %t457 = load ptr, ptr %t451 + %t458 = getelementptr inbounds %S.lsp.VarRec, ptr %t457, i64 %t455 + %t459 = load %S.lsp.VarRec, ptr %t458 + store %S.lsp.VarRec %t459, ptr %a460 + %t461 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 3 + %t462 = load i64, ptr %t461 + %t463 = load i64, ptr %a4 + %t464 = icmp sle i64 %t462, %t463 + br label %logic.from11004 +logic.from11004: + br i1 %t464, label %logic.rhs11005, label %logic.end11006 +logic.rhs11005: + %t465 = load i64, ptr %a4 + %t466 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 7 + %t467 = load i64, ptr %t466 + %t468 = add i64 %t467, 1 + %t469 = icmp sle i64 %t465, %t468 + br label %logic.rend11007 +logic.rend11007: + br label %logic.end11006 +logic.end11006: + %t470 = phi i1 [ false, %logic.from11004 ], [ %t469, %logic.rend11007 ] + br label %logic.from11008 +logic.from11008: + br i1 %t470, label %logic.rhs11009, label %logic.end11010 +logic.rhs11009: + %t471 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 5 + %t472 = load { ptr, i64, i64 }, ptr %t471 + %t473 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t472, ptr %a474 + store { ptr, i64, i64 } %t473, ptr %a475 + %t476 = call i32 @finch_str_eq(ptr %a474, ptr %a475) + %t477 = icmp ne i32 %t476, 0 + br label %logic.rend11011 +logic.rend11011: + br label %logic.end11010 +logic.end11010: + %t478 = phi i1 [ false, %logic.from11008 ], [ %t477, %logic.rend11011 ] + br label %logic.from11012 +logic.from11012: + br i1 %t478, label %logic.rhs11013, label %logic.end11014 +logic.rhs11013: + %t479 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 + %t480 = load { ptr, i64, i64 }, ptr %t479 + %t481 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t480) + br label %logic.rend11015 +logic.rend11015: + br label %logic.end11014 +logic.end11014: + %t482 = phi i1 [ false, %logic.from11012 ], [ %t481, %logic.rend11015 ] + br i1 %t482, label %then11016, label %endif11018 +then11016: + %t483 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 + %t484 = load { ptr, i64, i64 }, ptr %t483 + %t485 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 1 + %t486 = load { ptr, i64, i64 }, ptr %t485 + %t487 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t484, i64 6, { ptr, i64, i64 } %t486, { ptr, i64, i64 } { ptr @.str.7156, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t487) + store %S.json.Json %t487, ptr %a488 + call void @finch.drop.S_json_Json(ptr %a488) + br label %endif11018 +endif11018: + br label %each.step11002 +each.step11002: + %t489 = load i64, ptr %a452 + %t490 = add i64 %t489, 1 + store i64 %t490, ptr %a452 + br label %each.cond11000 +each.end11003: + %t491 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a492 + br label %each.cond11019 +each.cond11019: + %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i32 0, i32 1 + %t494 = load i64, ptr %t493 + %t495 = load i64, ptr %a492 + %t496 = icmp slt i64 %t495, %t494 + br i1 %t496, label %each.body11020, label %each.end11022 +each.body11020: + %t497 = load ptr, ptr %t491 + %t498 = getelementptr inbounds %S.lsp.FnRec, ptr %t497, i64 %t495 + %t499 = load %S.lsp.FnRec, ptr %t498 + store %S.lsp.FnRec %t499, ptr %a500 + %t501 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 2 + %t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t501, i32 0, i32 1 + %t503 = load i64, ptr %t502 + %t504 = icmp eq i64 %t503, 0 + br label %logic.from11023 +logic.from11023: + br i1 %t504, label %logic.rhs11024, label %logic.end11025 +logic.rhs11024: + %t505 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 0 + %t506 = load { ptr, i64, i64 }, ptr %t505 + store { ptr, i64, i64 } %t506, ptr %a507 + store { ptr, i64, i64 } { ptr @.str.7157, i64 0, i64 0 }, ptr %a508 + %t509 = call i32 @finch_str_eq(ptr %a507, ptr %a508) + %t510 = icmp ne i32 %t509, 0 + br label %logic.rend11026 +logic.rend11026: + br label %logic.end11025 +logic.end11025: + %t511 = phi i1 [ false, %logic.from11023 ], [ %t510, %logic.rend11026 ] + br label %logic.from11027 +logic.from11027: + br i1 %t511, label %logic.rhs11028, label %logic.end11029 +logic.rhs11028: + %t512 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 + %t513 = load { ptr, i64, i64 }, ptr %t512 + %t514 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t513) + br label %logic.rend11030 +logic.rend11030: + br label %logic.end11029 +logic.end11029: + %t515 = phi i1 [ false, %logic.from11027 ], [ %t514, %logic.rend11030 ] + br i1 %t515, label %then11031, label %endif11033 +then11031: + %t516 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 + %t517 = load { ptr, i64, i64 }, ptr %t516 + %t518 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 7 + %t519 = load { ptr, i64, i64 }, ptr %t518 + %t520 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t517, i64 3, { ptr, i64, i64 } %t519, { ptr, i64, i64 } { ptr @.str.7158, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t520) + store %S.json.Json %t520, ptr %a521 + call void @finch.drop.S_json_Json(ptr %a521) + br label %endif11033 +endif11033: + br label %each.step11021 +each.step11021: + %t522 = load i64, ptr %a492 + %t523 = add i64 %t522, 1 + store i64 %t523, ptr %a492 + br label %each.cond11019 +each.end11022: + %t524 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a525 + br label %each.cond11034 +each.cond11034: + %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t524, i32 0, i32 1 + %t527 = load i64, ptr %t526 + %t528 = load i64, ptr %a525 + %t529 = icmp slt i64 %t528, %t527 + br i1 %t529, label %each.body11035, label %each.end11037 +each.body11035: + %t530 = load ptr, ptr %t524 + %t531 = getelementptr inbounds %S.lsp.StructRec, ptr %t530, i64 %t528 + %t532 = load %S.lsp.StructRec, ptr %t531 + store %S.lsp.StructRec %t532, ptr %a533 + %t534 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 0 + %t535 = load { ptr, i64, i64 }, ptr %t534 + store { ptr, i64, i64 } %t535, ptr %a536 + store { ptr, i64, i64 } { ptr @.str.7159, i64 0, i64 0 }, ptr %a537 + %t538 = call i32 @finch_str_eq(ptr %a536, ptr %a537) + %t539 = icmp ne i32 %t538, 0 + br label %logic.from11038 +logic.from11038: + br i1 %t539, label %logic.rhs11039, label %logic.end11040 +logic.rhs11039: + %t540 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 + %t541 = load { ptr, i64, i64 }, ptr %t540 + %t542 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t541) + br label %logic.rend11041 +logic.rend11041: + br label %logic.end11040 +logic.end11040: + %t543 = phi i1 [ false, %logic.from11038 ], [ %t542, %logic.rend11041 ] + br i1 %t543, label %then11042, label %endif11044 +then11042: + %t544 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 + %t545 = load { ptr, i64, i64 }, ptr %t544 + %t546 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 + %t547 = load { ptr, i64, i64 }, ptr %t546 + store { ptr, i64, i64 } { ptr @.str.7160, i64 7, i64 0 }, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a548 + %t552 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t545, i64 22, { ptr, i64, i64 } %t551, { ptr, i64, i64 } { ptr @.str.7161, i64 0, i64 0 }) + store { ptr, i64, i64 } %t551, ptr %a553 + call void @finch_str_drop(ptr %a553) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t552) + store %S.json.Json %t552, ptr %a554 + call void @finch.drop.S_json_Json(ptr %a554) + br label %endif11044 +endif11044: + br label %each.step11036 +each.step11036: + %t555 = load i64, ptr %a525 + %t556 = add i64 %t555, 1 + store i64 %t556, ptr %a525 + br label %each.cond11034 +each.end11037: + %t557 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a558 + br label %each.cond11045 +each.cond11045: + %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i32 0, i32 1 + %t560 = load i64, ptr %t559 + %t561 = load i64, ptr %a558 + %t562 = icmp slt i64 %t561, %t560 + br i1 %t562, label %each.body11046, label %each.end11048 +each.body11046: + %t563 = load ptr, ptr %t557 + %t564 = getelementptr inbounds %S.lsp.EnumRec, ptr %t563, i64 %t561 + %t565 = load %S.lsp.EnumRec, ptr %t564 + store %S.lsp.EnumRec %t565, ptr %a566 + %t567 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 0 + %t568 = load { ptr, i64, i64 }, ptr %t567 + store { ptr, i64, i64 } %t568, ptr %a569 + store { ptr, i64, i64 } { ptr @.str.7162, i64 0, i64 0 }, ptr %a570 + %t571 = call i32 @finch_str_eq(ptr %a569, ptr %a570) + %t572 = icmp ne i32 %t571, 0 + br label %logic.from11049 +logic.from11049: + br i1 %t572, label %logic.rhs11050, label %logic.end11051 +logic.rhs11050: + %t573 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 + %t574 = load { ptr, i64, i64 }, ptr %t573 + %t575 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t574) + br label %logic.rend11052 +logic.rend11052: + br label %logic.end11051 +logic.end11051: + %t576 = phi i1 [ false, %logic.from11049 ], [ %t575, %logic.rend11052 ] + br i1 %t576, label %then11053, label %endif11055 +then11053: + %t577 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 + %t578 = load { ptr, i64, i64 }, ptr %t577 + %t579 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 + %t580 = load { ptr, i64, i64 }, ptr %t579 + store { ptr, i64, i64 } { ptr @.str.7163, i64 5, i64 0 }, ptr %a582 + store { ptr, i64, i64 } %t580, ptr %a583 + call void @finch_str_concat(ptr %a581, ptr %a582, ptr %a583) + %t584 = load { ptr, i64, i64 }, ptr %a581 + %t585 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t578, i64 13, { ptr, i64, i64 } %t584, { ptr, i64, i64 } { ptr @.str.7164, i64 0, i64 0 }) + store { ptr, i64, i64 } %t584, ptr %a586 + call void @finch_str_drop(ptr %a586) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t585) + store %S.json.Json %t585, ptr %a587 + call void @finch.drop.S_json_Json(ptr %a587) + br label %endif11055 +endif11055: + br label %each.step11047 +each.step11047: + %t588 = load i64, ptr %a558 + %t589 = add i64 %t588, 1 + store i64 %t589, ptr %a558 + br label %each.cond11045 +each.end11048: + %t590 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 + store i64 0, ptr %a591 + br label %each.cond11056 +each.cond11056: + %t592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t590, i32 0, i32 1 + %t593 = load i64, ptr %t592 + %t594 = load i64, ptr %a591 + %t595 = icmp slt i64 %t594, %t593 + br i1 %t595, label %each.body11057, label %each.end11059 +each.body11057: + %t596 = load ptr, ptr %t590 + %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 + %t598 = load { ptr, i64, i64 }, ptr %t597 + store { ptr, i64, i64 } %t598, ptr %a599 + %t600 = load { ptr, i64, i64 }, ptr %a599 + %t601 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t600) + br i1 %t601, label %then11060, label %endif11062 +then11060: + %t602 = load { ptr, i64, i64 }, ptr %a599 + %t603 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t602, i64 9, { ptr, i64, i64 } { ptr @.str.7165, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.7166, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t603) + store %S.json.Json %t603, ptr %a604 + call void @finch.drop.S_json_Json(ptr %a604) + br label %endif11062 +endif11062: + br label %each.step11058 +each.step11058: + %t605 = load i64, ptr %a591 + %t606 = add i64 %t605, 1 + store i64 %t606, ptr %a591 + br label %each.cond11056 +each.end11059: + %t607 = call { ptr, i64, i64 } @finch.docs.builtins() + store { ptr, i64, i64 } %t607, ptr %a608 + store i64 0, ptr %a609 + br label %each.cond11063 +each.cond11063: + %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a608, i32 0, i32 1 + %t611 = load i64, ptr %t610 + %t612 = load i64, ptr %a609 + %t613 = icmp slt i64 %t612, %t611 + br i1 %t613, label %each.body11064, label %each.end11066 +each.body11064: + %t614 = load ptr, ptr %a608 + %t615 = getelementptr inbounds %S.docs.Doc, ptr %t614, i64 %t612 + %t616 = load %S.docs.Doc, ptr %t615 + store %S.docs.Doc %t616, ptr %a617 + %t618 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 + %t619 = load { ptr, i64, i64 }, ptr %t618 + %t620 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t619) + br i1 %t620, label %then11067, label %endif11069 +then11067: + %t621 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 + %t622 = load { ptr, i64, i64 }, ptr %t621 + %t623 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 1 + %t624 = load { ptr, i64, i64 }, ptr %t623 + %t625 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 2 + %t626 = load { ptr, i64, i64 }, ptr %t625 + %t627 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t622, i64 3, { ptr, i64, i64 } %t624, { ptr, i64, i64 } %t626) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t627) + store %S.json.Json %t627, ptr %a628 + call void @finch.drop.S_json_Json(ptr %a628) + br label %endif11069 +endif11069: + br label %each.step11065 +each.step11065: + %t629 = load i64, ptr %a609 + %t630 = add i64 %t629, 1 + store i64 %t630, ptr %a609 + br label %each.cond11063 +each.end11066: + call void @finch.drop.arr_S_docs_Doc(ptr %a608) + %t631 = call { ptr, i64, i64 } @finch.docs.keywords() + store { ptr, i64, i64 } %t631, ptr %a632 + store i64 0, ptr %a633 + br label %each.cond11070 +each.cond11070: + %t634 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 + %t635 = load i64, ptr %t634 + %t636 = load i64, ptr %a633 + %t637 = icmp slt i64 %t636, %t635 + br i1 %t637, label %each.body11071, label %each.end11073 +each.body11071: + %t638 = load ptr, ptr %a632 + %t639 = getelementptr inbounds { ptr, i64, i64 }, ptr %t638, i64 %t636 + %t640 = load { ptr, i64, i64 }, ptr %t639 + store { ptr, i64, i64 } %t640, ptr %a641 + %t642 = load { ptr, i64, i64 }, ptr %a641 + %t643 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t642) + br i1 %t643, label %then11074, label %endif11076 +then11074: + %t644 = load { ptr, i64, i64 }, ptr %a641 + %t645 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t644, i64 14, { ptr, i64, i64 } { ptr @.str.7167, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7168, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t645) + store %S.json.Json %t645, ptr %a646 + call void @finch.drop.S_json_Json(ptr %a646) + br label %endif11076 +endif11076: + br label %each.step11072 +each.step11072: + %t647 = load i64, ptr %a633 + %t648 = add i64 %t647, 1 + store i64 %t648, ptr %a633 + br label %each.cond11070 +each.end11073: + call void @finch.drop.arr_str(ptr %a632) + %t649 = call { ptr, i64, i64 } @finch.docs.typeNames() + store { ptr, i64, i64 } %t649, ptr %a650 + store i64 0, ptr %a651 + br label %each.cond11077 +each.cond11077: + %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %a650, i32 0, i32 1 + %t653 = load i64, ptr %t652 + %t654 = load i64, ptr %a651 + %t655 = icmp slt i64 %t654, %t653 + br i1 %t655, label %each.body11078, label %each.end11080 +each.body11078: + %t656 = load ptr, ptr %a650 + %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %t656, i64 %t654 + %t658 = load { ptr, i64, i64 }, ptr %t657 + store { ptr, i64, i64 } %t658, ptr %a659 + %t660 = load { ptr, i64, i64 }, ptr %a659 + %t661 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t660) + br i1 %t661, label %then11081, label %endif11083 +then11081: + %t662 = load { ptr, i64, i64 }, ptr %a659 + %t663 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t662, i64 25, { ptr, i64, i64 } { ptr @.str.7169, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7170, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t663) + store %S.json.Json %t663, ptr %a664 + call void @finch.drop.S_json_Json(ptr %a664) + br label %endif11083 +endif11083: + br label %each.step11079 +each.step11079: + %t665 = load i64, ptr %a651 + %t666 = add i64 %t665, 1 + store i64 %t666, ptr %a651 + br label %each.cond11077 +each.end11080: + call void @finch.drop.arr_str(ptr %a650) + %t667 = load %S.json.Json, ptr %a7 + %t668 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t667) + call void @finch.drop.S_lsp_Names(ptr %a450) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t668 +} + +define internal i1 @finch.lsp.Names.add(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a5 + %t6 = load i64, ptr %t3 + %t7 = load ptr, ptr %t2 + store i64 0, ptr %a8 + br label %find.cond11084 +find.cond11084: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t6 + br i1 %t10, label %find.body11085, label %find.end11088 +find.body11085: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } %t4, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %find.hit11086, label %find.next11087 +find.hit11086: + store i64 %t9, ptr %a5 + br label %find.end11088 +find.next11087: + %t17 = add i64 %t9, 1 + store i64 %t17, ptr %a8 + br label %find.cond11084 +find.end11088: + %t18 = load i64, ptr %a5 + %t19 = icmp sge i64 %t18, 0 + br i1 %t19, label %then11089, label %endif11091 +then11089: + ret i1 false +endif11091: + %t20 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + ret i1 true +} + +define internal %S.json.Json @finch.lsp.completionList(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t2, ptr %a3 + %t4 = call %S.json.Json @finch.json.new_bool(i1 false) + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7171, i64 12, i64 0 }, %S.json.Json %t4) + store %S.json.Json %t4, ptr %a5 + call void @finch.drop.S_json_Json(ptr %a5) + %t6 = load %S.json.Json, ptr %a1 + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7172, i64 5, i64 0 }, %S.json.Json %t6) + %t7 = load %S.json.Json, ptr %a3 + ret %S.json.Json %t7 +} + +define internal %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca i64, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca i64, align 16 + %a26 = alloca i64, align 16 + %a27 = alloca i64, align 16 + %a31 = alloca i64, align 16 + %a41 = alloca i8, align 16 + %a74 = alloca i64, align 16 + %a76 = alloca i64, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca i64, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca %S.lsp.VarRec, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca i64, align 16 + %a188 = alloca %S.lsp.FnRec, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca %S.json.Json, align 16 + %a209 = alloca %S.json.Json, align 16 + %a211 = alloca %S.json.Json, align 16 + %a213 = alloca i64, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca %S.json.Json, align 16 + %a229 = alloca %S.json.Json, align 16 + %a235 = alloca %S.json.Json, align 16 + %a238 = alloca %S.json.Json, align 16 + %a241 = alloca %S.json.Json, align 16 + %a244 = alloca %S.json.Json, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca %S.docs.Doc, align 16 + %a258 = alloca %S.json.Json, align 16 + %a262 = alloca %S.json.Json, align 16 + %a266 = alloca %S.json.Json, align 16 + %a268 = alloca %S.json.Json, align 16 + %a271 = alloca %S.json.Json, align 16 + %a274 = alloca %S.json.Json, align 16 + %a277 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = load i64, ptr %a4 + %t8 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t6, i64 %t7) + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load i64, ptr %a5 + %t11 = sub i64 %t10, 1 + store i64 %t11, ptr %a12 + %t13 = load i64, ptr %a12 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = icmp sgt i64 %t13, %t15 + br i1 %t16, label %then11092, label %endif11094 +then11092: + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t18 = load i64, ptr %t17 + store i64 %t18, ptr %a12 + br label %endif11094 +endif11094: + %t19 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t19, ptr %a20 + %t22 = load i64, ptr %a12 + call void @finch_str_sub(ptr %a21, ptr %a20, i64 0, i64 %t22, ptr @.str.7173, i64 671) + %t23 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t23, ptr %a24 + store i64 0, ptr %a25 + store i64 0, ptr %a26 + store i64 -1, ptr %a27 + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %a24, i32 0, i32 1 + %t29 = load i64, ptr %t28 + %t30 = sub i64 %t29, 1 + store i64 %t30, ptr %a31 + br label %while.cond11095 +while.cond11095: + %t32 = load i64, ptr %a31 + %t33 = icmp sge i64 %t32, 0 + br i1 %t33, label %while.body11096, label %while.end11097 +while.body11096: + %t34 = load i64, ptr %a31 + %t35 = load { ptr, i64, i64 }, ptr %a24 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 %t34, %t36 + br i1 %t37, label %range11098, label %inrange11099 +range11098: + call void @finch_panic_index(ptr @.str.7174, i64 678, i64 %t34, i64 %t36) + unreachable +inrange11099: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds i8, ptr %t38, i64 %t34 + %t40 = load i8, ptr %t39 + store i8 %t40, ptr %a41 + %t42 = load i8, ptr %a41 + %t43 = icmp eq i8 %t42, 41 + br label %logic.from11100 +logic.from11100: + br i1 %t43, label %logic.end11102, label %logic.rhs11101 +logic.rhs11101: + %t44 = load i8, ptr %a41 + %t45 = icmp eq i8 %t44, 93 + br label %logic.rend11103 +logic.rend11103: + br label %logic.end11102 +logic.end11102: + %t46 = phi i1 [ true, %logic.from11100 ], [ %t45, %logic.rend11103 ] + br i1 %t46, label %then11104, label %else11105 +then11104: + %t47 = load i64, ptr %a25 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a25 + br label %endif11106 +else11105: + %t49 = load i8, ptr %a41 + %t50 = icmp eq i8 %t49, 40 + br label %logic.from11107 +logic.from11107: + br i1 %t50, label %logic.end11109, label %logic.rhs11108 +logic.rhs11108: + %t51 = load i8, ptr %a41 + %t52 = icmp eq i8 %t51, 91 + br label %logic.rend11110 +logic.rend11110: + br label %logic.end11109 +logic.end11109: + %t53 = phi i1 [ true, %logic.from11107 ], [ %t52, %logic.rend11110 ] + br i1 %t53, label %then11111, label %else11112 +then11111: + %t54 = load i64, ptr %a25 + %t55 = icmp eq i64 %t54, 0 + br i1 %t55, label %then11114, label %else11115 +then11114: + %t56 = load i8, ptr %a41 + %t57 = icmp eq i8 %t56, 40 + br i1 %t57, label %then11117, label %endif11119 +then11117: + %t58 = load i64, ptr %a31 + store i64 %t58, ptr %a27 + br label %while.end11097 +endif11119: + br label %endif11116 +else11115: + %t59 = load i64, ptr %a25 + %t60 = sub i64 %t59, 1 + store i64 %t60, ptr %a25 + br label %endif11116 +endif11116: + br label %endif11113 +else11112: + %t61 = load i8, ptr %a41 + %t62 = icmp eq i8 %t61, 44 + br label %logic.from11120 +logic.from11120: + br i1 %t62, label %logic.rhs11121, label %logic.end11122 +logic.rhs11121: + %t63 = load i64, ptr %a25 + %t64 = icmp eq i64 %t63, 0 + br label %logic.rend11123 +logic.rend11123: + br label %logic.end11122 +logic.end11122: + %t65 = phi i1 [ false, %logic.from11120 ], [ %t64, %logic.rend11123 ] + br i1 %t65, label %then11124, label %endif11126 +then11124: + %t66 = load i64, ptr %a26 + %t67 = add i64 %t66, 1 + store i64 %t67, ptr %a26 + br label %endif11126 +endif11126: + br label %endif11113 +endif11113: + br label %endif11106 +endif11106: + %t68 = load i64, ptr %a31 + %t69 = sub i64 %t68, 1 + store i64 %t69, ptr %a31 + br label %while.cond11095 +while.end11097: + %t70 = load i64, ptr %a27 + %t71 = icmp slt i64 %t70, 0 + br i1 %t71, label %then11127, label %endif11129 +then11127: + %t72 = call %S.json.Json @finch.json.new_null() + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t72 +endif11129: + %t73 = load i64, ptr %a27 + store i64 %t73, ptr %a74 + %t75 = load i64, ptr %a74 + store i64 %t75, ptr %a76 + br label %while.cond11130 +while.cond11130: + %t77 = load i64, ptr %a76 + %t78 = icmp sgt i64 %t77, 0 + br label %logic.from11133 +logic.from11133: + br i1 %t78, label %logic.rhs11134, label %logic.end11135 +logic.rhs11134: + %t79 = load i64, ptr %a76 + %t80 = sub i64 %t79, 1 + %t81 = load { ptr, i64, i64 }, ptr %a24 + %t82 = extractvalue { ptr, i64, i64 } %t81, 1 + %t83 = icmp uge i64 %t80, %t82 + br i1 %t83, label %range11136, label %inrange11137 +range11136: + call void @finch_panic_index(ptr @.str.7175, i64 700, i64 %t80, i64 %t82) + unreachable +inrange11137: + %t84 = extractvalue { ptr, i64, i64 } %t81, 0 + %t85 = getelementptr inbounds i8, ptr %t84, i64 %t80 + %t86 = load i8, ptr %t85 + %t87 = call i1 @finch.lsp.isWordChar(i8 %t86) + br label %logic.rend11138 +logic.rend11138: + br label %logic.end11135 +logic.end11135: + %t88 = phi i1 [ false, %logic.from11133 ], [ %t87, %logic.rend11138 ] + br i1 %t88, label %while.body11131, label %while.end11132 +while.body11131: + %t89 = load i64, ptr %a76 + %t90 = sub i64 %t89, 1 + store i64 %t90, ptr %a76 + br label %while.cond11130 +while.end11132: + %t91 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t91, ptr %a92 + %t94 = load i64, ptr %a76 + %t95 = load i64, ptr %a74 + call void @finch_str_sub(ptr %a93, ptr %a92, i64 %t94, i64 %t95, ptr @.str.7176, i64 703) + %t96 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t96, ptr %a97 + %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1 + %t99 = load i64, ptr %t98 + %t100 = icmp eq i64 %t99, 0 + br i1 %t100, label %then11139, label %endif11141 +then11139: + %t101 = call %S.json.Json @finch.json.new_null() + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t101 +endif11141: + store { ptr, i64, i64 } { ptr @.str.7177, i64 0, i64 0 }, ptr %a102 + %t103 = load i64, ptr %a76 + %t104 = icmp sgt i64 %t103, 0 + br label %logic.from11142 +logic.from11142: + br i1 %t104, label %logic.rhs11143, label %logic.end11144 +logic.rhs11143: + %t105 = load i64, ptr %a76 + %t106 = sub i64 %t105, 1 + %t107 = load { ptr, i64, i64 }, ptr %a24 + %t108 = extractvalue { ptr, i64, i64 } %t107, 1 + %t109 = icmp uge i64 %t106, %t108 + br i1 %t109, label %range11145, label %inrange11146 +range11145: + call void @finch_panic_index(ptr @.str.7178, i64 708, i64 %t106, i64 %t108) + unreachable +inrange11146: + %t110 = extractvalue { ptr, i64, i64 } %t107, 0 + %t111 = getelementptr inbounds i8, ptr %t110, i64 %t106 + %t112 = load i8, ptr %t111 + %t113 = icmp eq i8 %t112, 46 + br label %logic.rend11147 +logic.rend11147: + br label %logic.end11144 +logic.end11144: + %t114 = phi i1 [ false, %logic.from11142 ], [ %t113, %logic.rend11147 ] + br i1 %t114, label %then11148, label %endif11150 +then11148: + %t115 = load i64, ptr %a76 + %t116 = sub i64 %t115, 1 + store i64 %t116, ptr %a117 + br label %while.cond11151 +while.cond11151: + %t118 = load i64, ptr %a117 + %t119 = icmp sgt i64 %t118, 0 + br label %logic.from11154 +logic.from11154: + br i1 %t119, label %logic.rhs11155, label %logic.end11156 +logic.rhs11155: + %t120 = load i64, ptr %a117 + %t121 = sub i64 %t120, 1 + %t122 = load { ptr, i64, i64 }, ptr %a24 + %t123 = extractvalue { ptr, i64, i64 } %t122, 1 + %t124 = icmp uge i64 %t121, %t123 + br i1 %t124, label %range11157, label %inrange11158 +range11157: + call void @finch_panic_index(ptr @.str.7179, i64 711, i64 %t121, i64 %t123) + unreachable +inrange11158: + %t125 = extractvalue { ptr, i64, i64 } %t122, 0 + %t126 = getelementptr inbounds i8, ptr %t125, i64 %t121 + %t127 = load i8, ptr %t126 + %t128 = call i1 @finch.lsp.isWordChar(i8 %t127) + br label %logic.rend11159 +logic.rend11159: + br label %logic.end11156 +logic.end11156: + %t129 = phi i1 [ false, %logic.from11154 ], [ %t128, %logic.rend11159 ] + br i1 %t129, label %while.body11152, label %while.end11153 +while.body11152: + %t130 = load i64, ptr %a117 + %t131 = sub i64 %t130, 1 + store i64 %t131, ptr %a117 + br label %while.cond11151 +while.end11153: + %t132 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t132, ptr %a133 + %t135 = load i64, ptr %a117 + %t136 = load i64, ptr %a76 + %t137 = sub i64 %t136, 1 + call void @finch_str_sub(ptr %a134, ptr %a133, i64 %t135, i64 %t137, ptr @.str.7180, i64 714) + %t138 = load { ptr, i64, i64 }, ptr %a134 + store { ptr, i64, i64 } %t138, ptr %a139 + %t140 = load %S.lsp.Analysis, ptr %a1 + %t141 = load { ptr, i64, i64 }, ptr %a3 + %t142 = load { ptr, i64, i64 }, ptr %a139 + %t143 = load i64, ptr %a4 + %t144 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t140, { ptr, i64, i64 } %t141, { ptr, i64, i64 } %t142, i64 %t143) + %t145 = extractvalue %S.lsp.VarRec %t144, 1 + store { ptr, i64, i64 } %t145, ptr %a146 + call void @finch_str_copy(ptr %a147, ptr %a146) + %t148 = load { ptr, i64, i64 }, ptr %a147 + store %S.lsp.VarRec %t144, ptr %a149 + call void @finch.drop.S_lsp_VarRec(ptr %a149) + store { ptr, i64, i64 } %t148, ptr %a150 + %t151 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t151, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.7182, i64 4, i64 0 }, ptr %a154 + %t155 = call i32 @finch_str_starts(ptr %a152, ptr %a154) + %t156 = icmp ne i32 %t155, 0 + br label %logic.from11160 +logic.from11160: + br i1 %t156, label %logic.rhs11161, label %logic.end11162 +logic.rhs11161: + %t157 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.7184, i64 1, i64 0 }, ptr %a160 + %t161 = call i32 @finch_str_ends(ptr %a158, ptr %a160) + %t162 = icmp ne i32 %t161, 0 + br label %logic.rend11163 +logic.rend11163: + br label %logic.end11162 +logic.end11162: + %t163 = phi i1 [ false, %logic.from11160 ], [ %t162, %logic.rend11163 ] + br i1 %t163, label %then11164, label %endif11166 +then11164: + %t164 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t164, ptr %a165 + %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %a150, i32 0, i32 1 + %t168 = load i64, ptr %t167 + %t169 = sub i64 %t168, 1 + call void @finch_str_sub(ptr %a166, ptr %a165, i64 4, i64 %t169, ptr @.str.7185, i64 717) + %t170 = load { ptr, i64, i64 }, ptr %a166 + %t171 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t170, ptr %a150 + store { ptr, i64, i64 } %t171, ptr %a172 + call void @finch_str_drop(ptr %a172) + br label %endif11166 +endif11166: + %t173 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t173, ptr %a174 + call void @finch_str_copy(ptr %a175, ptr %a174) + %t176 = load { ptr, i64, i64 }, ptr %a175 + %t177 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t176, ptr %a102 + store { ptr, i64, i64 } %t177, ptr %a178 + call void @finch_str_drop(ptr %a178) + call void @finch_str_drop(ptr %a150) + call void @finch_str_drop(ptr %a139) + br label %endif11150 +endif11150: + %t179 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a180 + br label %each.cond11167 +each.cond11167: + %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 + %t182 = load i64, ptr %t181 + %t183 = load i64, ptr %a180 + %t184 = icmp slt i64 %t183, %t182 + br i1 %t184, label %each.body11168, label %each.end11170 +each.body11168: + %t185 = load ptr, ptr %t179 + %t186 = getelementptr inbounds %S.lsp.FnRec, ptr %t185, i64 %t183 + %t187 = load %S.lsp.FnRec, ptr %t186 + store %S.lsp.FnRec %t187, ptr %a188 + %t189 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 1 + %t190 = load { ptr, i64, i64 }, ptr %t189 + %t191 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t190, ptr %a192 + store { ptr, i64, i64 } %t191, ptr %a193 + %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) + %t195 = icmp ne i32 %t194, 0 + br label %logic.from11171 +logic.from11171: + br i1 %t195, label %logic.rhs11172, label %logic.end11173 +logic.rhs11172: + %t196 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 2 + %t197 = load { ptr, i64, i64 }, ptr %t196 + %t198 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t197, ptr %a199 + store { ptr, i64, i64 } %t198, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp ne i32 %t201, 0 + br label %logic.rend11174 +logic.rend11174: + br label %logic.end11173 +logic.end11173: + %t203 = phi i1 [ false, %logic.from11171 ], [ %t202, %logic.rend11174 ] + br i1 %t203, label %then11175, label %endif11177 +then11175: + %t204 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t204, ptr %a205 + %t206 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 7 + %t207 = load { ptr, i64, i64 }, ptr %t206 + %t208 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t207) + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7186, i64 5, i64 0 }, %S.json.Json %t208) + store %S.json.Json %t208, ptr %a209 + call void @finch.drop.S_json_Json(ptr %a209) + %t210 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t210, ptr %a211 + %t212 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 8 + store i64 0, ptr %a213 + br label %each.cond11178 +each.cond11178: + %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 + %t215 = load i64, ptr %t214 + %t216 = load i64, ptr %a213 + %t217 = icmp slt i64 %t216, %t215 + br i1 %t217, label %each.body11179, label %each.end11181 +each.body11179: + %t218 = load ptr, ptr %t212 + %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t216 + %t220 = load { ptr, i64, i64 }, ptr %t219 + store { ptr, i64, i64 } %t220, ptr %a221 + %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a221, i32 0, i32 1 + %t223 = load i64, ptr %t222 + %t224 = icmp sgt i64 %t223, 0 + br i1 %t224, label %then11182, label %endif11184 +then11182: + %t225 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t225, ptr %a226 + %t227 = load { ptr, i64, i64 }, ptr %a221 + %t228 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t227) + call void @finch.json.Json.set(ptr %a226, { ptr, i64, i64 } { ptr @.str.7187, i64 5, i64 0 }, %S.json.Json %t228) + store %S.json.Json %t228, ptr %a229 + call void @finch.drop.S_json_Json(ptr %a229) + %t230 = load %S.json.Json, ptr %a226 + call void @finch.json.Json.push(ptr %a211, %S.json.Json %t230) + call void @finch.drop.S_json_Json(ptr %a226) + br label %endif11184 +endif11184: + br label %each.step11180 +each.step11180: + %t231 = load i64, ptr %a213 + %t232 = add i64 %t231, 1 + store i64 %t232, ptr %a213 + br label %each.cond11178 +each.end11181: + %t233 = load %S.json.Json, ptr %a211 + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7188, i64 10, i64 0 }, %S.json.Json %t233) + %t234 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t234, ptr %a235 + %t236 = load %S.json.Json, ptr %a205 + call void @finch.json.Json.push(ptr %a235, %S.json.Json %t236) + %t237 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t237, ptr %a238 + %t239 = load %S.json.Json, ptr %a235 + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7189, i64 10, i64 0 }, %S.json.Json %t239) + %t240 = call %S.json.Json @finch.lsp.num(i64 0) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7190, i64 15, i64 0 }, %S.json.Json %t240) + store %S.json.Json %t240, ptr %a241 + call void @finch.drop.S_json_Json(ptr %a241) + %t242 = load i64, ptr %a26 + %t243 = call %S.json.Json @finch.lsp.num(i64 %t242) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7191, i64 15, i64 0 }, %S.json.Json %t243) + store %S.json.Json %t243, ptr %a244 + call void @finch.drop.S_json_Json(ptr %a244) + %t245 = load %S.json.Json, ptr %a238 + call void @finch.drop.S_json_Json(ptr %a235) + call void @finch.drop.S_json_Json(ptr %a211) + call void @finch.drop.S_json_Json(ptr %a205) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t245 +endif11177: + br label %each.step11169 +each.step11169: + %t246 = load i64, ptr %a180 + %t247 = add i64 %t246, 1 + store i64 %t247, ptr %a180 + br label %each.cond11167 +each.end11170: + %t248 = call { ptr, i64, i64 } @finch.docs.builtins() + %t249 = load { ptr, i64, i64 }, ptr %a97 + %t250 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t248, { ptr, i64, i64 } %t249) + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch.drop.arr_S_docs_Doc(ptr %a251) + store %S.docs.Doc %t250, ptr %a252 + %t253 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 0 + %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 + %t255 = load i64, ptr %t254 + %t256 = icmp sgt i64 %t255, 0 + br i1 %t256, label %then11185, label %endif11187 +then11185: + %t257 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t257, ptr %a258 + %t259 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 1 + %t260 = load { ptr, i64, i64 }, ptr %t259 + %t261 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t260) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7192, i64 5, i64 0 }, %S.json.Json %t261) + store %S.json.Json %t261, ptr %a262 + call void @finch.drop.S_json_Json(ptr %a262) + %t263 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 2 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t264) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7193, i64 13, i64 0 }, %S.json.Json %t265) + store %S.json.Json %t265, ptr %a266 + call void @finch.drop.S_json_Json(ptr %a266) + %t267 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t267, ptr %a268 + %t269 = load %S.json.Json, ptr %a258 + call void @finch.json.Json.push(ptr %a268, %S.json.Json %t269) + %t270 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t270, ptr %a271 + %t272 = load %S.json.Json, ptr %a268 + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7194, i64 10, i64 0 }, %S.json.Json %t272) + %t273 = call %S.json.Json @finch.lsp.num(i64 0) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7195, i64 15, i64 0 }, %S.json.Json %t273) + store %S.json.Json %t273, ptr %a274 + call void @finch.drop.S_json_Json(ptr %a274) + %t275 = load i64, ptr %a26 + %t276 = call %S.json.Json @finch.lsp.num(i64 %t275) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7196, i64 15, i64 0 }, %S.json.Json %t276) + store %S.json.Json %t276, ptr %a277 + call void @finch.drop.S_json_Json(ptr %a277) + %t278 = load %S.json.Json, ptr %a271 + call void @finch.drop.S_json_Json(ptr %a268) + call void @finch.drop.S_json_Json(ptr %a258) + call void @finch.drop.S_docs_Doc(ptr %a252) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t278 +endif11187: + %t279 = call %S.json.Json @finch.json.new_null() + call void @finch.drop.S_docs_Doc(ptr %a252) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t279 +} + +define internal { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7197, i64 12, i64 0 }) + store %S.json.Json %t2, ptr %a3 + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7198, i64 4, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a3) + store %S.json.Json %t4, ptr %a5 + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7199, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a5) + ret { ptr, i64, i64 } %t6 +} + +define internal { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7200, i64 12, i64 0 }) + store %S.json.Json %t2, ptr %a3 + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7201, i64 3, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a3) + store %S.json.Json %t4, ptr %a5 + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7202, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a5) + %t7 = call { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %t6) + store { ptr, i64, i64 } %t6, ptr %a8 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t7 +} + +define internal void @finch.lsp.Server.answer(ptr %self, %S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.json.Json, align 16 + %a18 = alloca %S.json.Json, align 16 + %a20 = alloca %S.json.Json, align 16 + %a22 = alloca %S.json.Json, align 16 + %a24 = alloca %S.json.Json, align 16 + %a26 = alloca %S.json.Json, align 16 + %a28 = alloca %S.json.Json, align 16 + %a30 = alloca %S.json.Json, align 16 + %a34 = alloca %S.json.Json, align 16 + %a36 = alloca %S.json.Json, align 16 + %a38 = alloca %S.json.Json, align 16 + %a40 = alloca %S.json.Json, align 16 + %a44 = alloca %S.json.Json, align 16 + %a47 = alloca %S.json.Json, align 16 + %a49 = alloca %S.json.Json, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.json.Json, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca i32, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca %S.json.Json, align 16 + %a106 = alloca %S.json.Json, align 16 + %a108 = alloca %S.json.Json, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca i32, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca %S.json.Json, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca %S.json.Json, align 16 + %a184 = alloca %S.json.Json, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca %S.json.Json, align 16 + %a212 = alloca %S.json.Json, align 16 + %a215 = alloca i64, align 16 + %a217 = alloca %S.json.Json, align 16 + %a219 = alloca %S.json.Json, align 16 + %a222 = alloca i64, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca %S.json.Json, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca %S.lsp.Analysis, align 16 + %a245 = alloca %S.lsp.Analysis, align 16 + %a247 = alloca %S.lsp.Analysis, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca %S.json.Json, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca %S.json.Json, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca %S.json.Json, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca %S.json.Json, align 16 + %a322 = alloca %S.json.Json, align 16 + %a328 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7203, i64 6, i64 0 }) + store %S.json.Json %t2, ptr %a3 + %t4 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a3, { ptr, i64, i64 } { ptr @.str.7204, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a3) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7205, i64 6, i64 0 }) + store %S.json.Json %t6, ptr %a7 + %t8 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7206, i64 2, i64 0 }) + store %S.json.Json %t8, ptr %a9 + %t10 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.7207, i64 10, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br i1 %t14, label %match.arm11189, label %match.next11190 +match.arm11189: + %t15 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t15, ptr %a16 + %t17 = call %S.json.Json @finch.lsp.num(i64 1) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7208, i64 16, i64 0 }, %S.json.Json %t17) + store %S.json.Json %t17, ptr %a18 + call void @finch.drop.S_json_Json(ptr %a18) + %t19 = call %S.json.Json @finch.json.new_bool(i1 true) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7209, i64 13, i64 0 }, %S.json.Json %t19) + store %S.json.Json %t19, ptr %a20 + call void @finch.drop.S_json_Json(ptr %a20) + %t21 = call %S.json.Json @finch.json.new_bool(i1 true) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7210, i64 18, i64 0 }, %S.json.Json %t21) + store %S.json.Json %t21, ptr %a22 + call void @finch.drop.S_json_Json(ptr %a22) + %t23 = call %S.json.Json @finch.json.new_bool(i1 true) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7211, i64 22, i64 0 }, %S.json.Json %t23) + store %S.json.Json %t23, ptr %a24 + call void @finch.drop.S_json_Json(ptr %a24) + %t25 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t25, ptr %a26 + %t27 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t27, ptr %a28 + %t29 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7212, i64 1, i64 0 }) + call void @finch.json.Json.push(ptr %a28, %S.json.Json %t29) + store %S.json.Json %t29, ptr %a30 + call void @finch.drop.S_json_Json(ptr %a30) + %t31 = load %S.json.Json, ptr %a28 + call void @finch.json.Json.set(ptr %a26, { ptr, i64, i64 } { ptr @.str.7213, i64 17, i64 0 }, %S.json.Json %t31) + %t32 = load %S.json.Json, ptr %a26 + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7214, i64 18, i64 0 }, %S.json.Json %t32) + %t33 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t33, ptr %a34 + %t35 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t35, ptr %a36 + %t37 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7215, i64 1, i64 0 }) + call void @finch.json.Json.push(ptr %a36, %S.json.Json %t37) + store %S.json.Json %t37, ptr %a38 + call void @finch.drop.S_json_Json(ptr %a38) + %t39 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7216, i64 1, i64 0 }) + call void @finch.json.Json.push(ptr %a36, %S.json.Json %t39) + store %S.json.Json %t39, ptr %a40 + call void @finch.drop.S_json_Json(ptr %a40) + %t41 = load %S.json.Json, ptr %a36 + call void @finch.json.Json.set(ptr %a34, { ptr, i64, i64 } { ptr @.str.7217, i64 17, i64 0 }, %S.json.Json %t41) + %t42 = load %S.json.Json, ptr %a34 + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7218, i64 21, i64 0 }, %S.json.Json %t42) + %t43 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t43, ptr %a44 + %t45 = load %S.json.Json, ptr %a16 + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7219, i64 12, i64 0 }, %S.json.Json %t45) + %t46 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t46, ptr %a47 + %t48 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7221, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a47, { ptr, i64, i64 } { ptr @.str.7220, i64 4, i64 0 }, %S.json.Json %t48) + store %S.json.Json %t48, ptr %a49 + call void @finch.drop.S_json_Json(ptr %a49) + %t50 = load %S.json.Json, ptr %a47 + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7222, i64 10, i64 0 }, %S.json.Json %t50) + %t51 = load %S.json.Json, ptr %a9 + %t52 = load %S.json.Json, ptr %a44 + call void @finch.lsp.reply(%S.json.Json %t51, %S.json.Json %t52) + call void @finch.drop.S_json_Json(ptr %a47) + call void @finch.drop.S_json_Json(ptr %a44) + call void @finch.drop.S_json_Json(ptr %a36) + call void @finch.drop.S_json_Json(ptr %a34) + call void @finch.drop.S_json_Json(ptr %a28) + call void @finch.drop.S_json_Json(ptr %a26) + call void @finch.drop.S_json_Json(ptr %a16) + br label %match.end11188 +match.next11190: + store { ptr, i64, i64 } %t10, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.7223, i64 8, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %match.arm11191, label %match.next11192 +match.arm11191: + %t57 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 6 + store i1 true, ptr %t57 + %t58 = load %S.json.Json, ptr %a9 + %t59 = call %S.json.Json @finch.json.new_null() + call void @finch.lsp.reply(%S.json.Json %t58, %S.json.Json %t59) + store %S.json.Json %t59, ptr %a60 + call void @finch.drop.S_json_Json(ptr %a60) + br label %match.end11188 +match.next11192: + store { ptr, i64, i64 } %t10, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.7224, i64 4, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br i1 %t64, label %match.arm11193, label %match.next11194 +match.arm11193: + %t65 = trunc i64 0 to i32 + %t66 = call i32 @fflush(ptr null) + call void @exit(i32 %t65) + br label %match.end11188 +match.next11194: + store { ptr, i64, i64 } %t10, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.7225, i64 20, i64 0 }, ptr %a68 + %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) + %t70 = icmp ne i32 %t69, 0 + br i1 %t70, label %match.arm11195, label %match.next11196 +match.arm11195: + %t71 = load %S.json.Json, ptr %a7 + %t72 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t71) + store { ptr, i64, i64 } %t72, ptr %a73 + %t74 = load %S.json.Json, ptr %a7 + %t75 = call { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %t74) + %t76 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a78 + store i32 0, ptr %a79 + %t80 = call i64 @finch_map_slot(ptr %t76, ptr %a78, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a79) + %t81 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t76, i32 0, i32 0 + %t82 = load ptr, ptr %t81 + %t83 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t82, i64 %t80 + %t84 = load i32, ptr %a79 + %t85 = icmp ne i32 %t84, 0 + br i1 %t85, label %map.new11197, label %map.have11198 +map.new11197: + %t86 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 1 + call void @finch_str_copy(ptr %t86, ptr %a78) + %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t87 + br label %map.have11198 +map.have11198: + %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t75, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a73 + call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t91) + call void @finch_str_drop(ptr %a73) + br label %match.end11188 +match.next11196: + store { ptr, i64, i64 } %t10, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.7226, i64 22, i64 0 }, ptr %a93 + %t94 = call i32 @finch_str_eq(ptr %a92, ptr %a93) + %t95 = icmp ne i32 %t94, 0 + br i1 %t95, label %match.arm11199, label %match.next11200 +match.arm11199: + %t96 = load %S.json.Json, ptr %a7 + %t97 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t96) + store { ptr, i64, i64 } %t97, ptr %a98 + %t99 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7227, i64 14, i64 0 }) + store %S.json.Json %t99, ptr %a100 + %t101 = call i64 @finch.json.Json.len(ptr %a100) + %t102 = icmp sgt i64 %t101, 0 + br i1 %t102, label %then11201, label %endif11203 +then11201: + %t103 = call i64 @finch.json.Json.len(ptr %a100) + %t104 = sub i64 %t103, 1 + %t105 = call %S.json.Json @finch.json.Json.at(ptr %a100, i64 %t104) + store %S.json.Json %t105, ptr %a106 + %t107 = call %S.json.Json @finch.json.Json.get(ptr %a106, { ptr, i64, i64 } { ptr @.str.7228, i64 4, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a106) + store %S.json.Json %t107, ptr %a108 + %t109 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a108, { ptr, i64, i64 } { ptr @.str.7229, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a108) + %t110 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t111 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t111, ptr %a112 + store i32 0, ptr %a113 + %t114 = call i64 @finch_map_slot(ptr %t110, ptr %a112, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a113) + %t115 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t110, i32 0, i32 0 + %t116 = load ptr, ptr %t115 + %t117 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t116, i64 %t114 + %t118 = load i32, ptr %a113 + %t119 = icmp ne i32 %t118, 0 + br i1 %t119, label %map.new11204, label %map.have11205 +map.new11204: + %t120 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 1 + call void @finch_str_copy(ptr %t120, ptr %a112) + %t121 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t121 + br label %map.have11205 +map.have11205: + %t122 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 + %t123 = load { ptr, i64, i64 }, ptr %t122 + store { ptr, i64, i64 } %t109, ptr %t122 + store { ptr, i64, i64 } %t123, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a98 + call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t125) + br label %endif11203 +endif11203: + call void @finch.drop.S_json_Json(ptr %a100) + call void @finch_str_drop(ptr %a98) + br label %match.end11188 +match.next11200: + store { ptr, i64, i64 } %t10, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.7230, i64 20, i64 0 }, ptr %a127 + %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) + %t129 = icmp ne i32 %t128, 0 + br i1 %t129, label %match.arm11206, label %match.next11207 +match.arm11206: + %t130 = load %S.json.Json, ptr %a7 + %t131 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t130) + store { ptr, i64, i64 } %t131, ptr %a132 + %t133 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t134 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t134, ptr %a135 + %t136 = call i64 @finch_map_find(ptr %t133, ptr %a135, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t137 = icmp sge i64 %t136, 0 + br i1 %t137, label %then11208, label %endif11210 +then11208: + %t138 = load { ptr, i64, i64 }, ptr %a132 + call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t138) + br label %endif11210 +endif11210: + call void @finch_str_drop(ptr %a132) + br label %match.end11188 +match.next11207: + store { ptr, i64, i64 } %t10, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.7231, i64 21, i64 0 }, ptr %a140 + %t141 = call i32 @finch_str_eq(ptr %a139, ptr %a140) + %t142 = icmp ne i32 %t141, 0 + br i1 %t142, label %match.arm11211, label %match.next11212 +match.arm11211: + %t143 = load %S.json.Json, ptr %a7 + %t144 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t143) + store { ptr, i64, i64 } %t144, ptr %a145 + %t146 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t147 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t147, ptr %a148 + %t149 = call i64 @finch_map_find(ptr %t146, ptr %a148, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t150 = icmp sge i64 %t149, 0 + br i1 %t150, label %remove.hit11213, label %remove.end11214 +remove.hit11213: + %t151 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t146, i32 0, i32 0 + %t152 = load ptr, ptr %t151 + %t153 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t152, i64 %t149 + %t154 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 1 + call void @finch_str_drop(ptr %t154) + %t155 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 2 + call void @finch_str_drop(ptr %t155) + call void @finch_map_remove_at(ptr %t146, i64 %t149, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64)) + br label %remove.end11214 +remove.end11214: + %t156 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t157 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t157, ptr %a158 + %t159 = call i64 @finch_map_find(ptr %t156, ptr %a158, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t160 = icmp sge i64 %t159, 0 + br i1 %t160, label %remove.hit11215, label %remove.end11216 +remove.hit11215: + %t161 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t156, i32 0, i32 0 + %t162 = load ptr, ptr %t161 + %t163 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t162, i64 %t159 + %t164 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 1 + call void @finch_str_drop(ptr %t164) + %t165 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 2 + call void @finch.drop.S_lsp_Analysis(ptr %t165) + call void @finch_map_remove_at(ptr %t156, i64 %t159, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) + br label %remove.end11216 +remove.end11216: + %t166 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t167 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t167, ptr %a168 + %t169 = call i64 @finch_map_find(ptr %t166, ptr %a168, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t170 = icmp sge i64 %t169, 0 + br i1 %t170, label %remove.hit11217, label %remove.end11218 +remove.hit11217: + %t171 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t166, i32 0, i32 0 + %t172 = load ptr, ptr %t171 + %t173 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t172, i64 %t169 + %t174 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 1 + call void @finch_str_drop(ptr %t174) + %t175 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 2 + call void @finch.drop.S_lsp_Analysis(ptr %t175) + call void @finch_map_remove_at(ptr %t166, i64 %t169, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) + br label %remove.end11218 +remove.end11218: + %t176 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t176, ptr %a177 + %t178 = load { ptr, i64, i64 }, ptr %a145 + %t179 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t178) + %t180 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t179) + store { ptr, i64, i64 } %t179, ptr %a181 + call void @finch_str_drop(ptr %a181) + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7232, i64 3, i64 0 }, %S.json.Json %t180) + store %S.json.Json %t180, ptr %a182 + call void @finch.drop.S_json_Json(ptr %a182) + %t183 = call %S.json.Json @finch.json.new_list() + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7233, i64 11, i64 0 }, %S.json.Json %t183) + store %S.json.Json %t183, ptr %a184 + call void @finch.drop.S_json_Json(ptr %a184) + %t185 = load %S.json.Json, ptr %a177 + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7234, i64 31, i64 0 }, %S.json.Json %t185) + call void @finch.drop.S_json_Json(ptr %a177) + call void @finch_str_drop(ptr %a145) + br label %match.end11188 +match.next11212: + store { ptr, i64, i64 } %t10, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.7235, i64 18, i64 0 }, ptr %a187 + %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) + %t189 = icmp ne i32 %t188, 0 + br i1 %t189, label %match.arm11219, label %match.or11221 +match.or11221: + store { ptr, i64, i64 } %t10, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.7236, i64 23, i64 0 }, ptr %a191 + %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) + %t193 = icmp ne i32 %t192, 0 + br i1 %t193, label %match.arm11219, label %match.or11222 +match.or11222: + store { ptr, i64, i64 } %t10, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.7237, i64 23, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br i1 %t197, label %match.arm11219, label %match.or11223 +match.or11223: + store { ptr, i64, i64 } %t10, ptr %a198 + store { ptr, i64, i64 } { ptr @.str.7238, i64 27, i64 0 }, ptr %a199 + %t200 = call i32 @finch_str_eq(ptr %a198, ptr %a199) + %t201 = icmp ne i32 %t200, 0 + br i1 %t201, label %match.arm11219, label %match.or11224 +match.or11224: + store { ptr, i64, i64 } %t10, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.7239, i64 26, i64 0 }, ptr %a203 + %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) + %t205 = icmp ne i32 %t204, 0 + br i1 %t205, label %match.arm11219, label %match.next11220 +match.arm11219: + %t206 = load %S.json.Json, ptr %a7 + %t207 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t206) + store { ptr, i64, i64 } %t207, ptr %a208 + %t209 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7240, i64 8, i64 0 }) + store %S.json.Json %t209, ptr %a210 + %t211 = call %S.json.Json @finch.json.Json.get(ptr %a210, { ptr, i64, i64 } { ptr @.str.7241, i64 4, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a210) + store %S.json.Json %t211, ptr %a212 + %t213 = call i64 @finch.json.Json.int_or(ptr %a212, i64 0) + call void @finch.drop.S_json_Json(ptr %a212) + %t214 = add i64 %t213, 1 + store i64 %t214, ptr %a215 + %t216 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7242, i64 8, i64 0 }) + store %S.json.Json %t216, ptr %a217 + %t218 = call %S.json.Json @finch.json.Json.get(ptr %a217, { ptr, i64, i64 } { ptr @.str.7243, i64 9, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a217) + store %S.json.Json %t218, ptr %a219 + %t220 = call i64 @finch.json.Json.int_or(ptr %a219, i64 0) + call void @finch.drop.S_json_Json(ptr %a219) + %t221 = add i64 %t220, 1 + store i64 %t221, ptr %a222 + %t223 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t224 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t224, ptr %a225 + %t226 = call i64 @finch_map_find(ptr %t223, ptr %a225, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t227 = icmp sge i64 %t226, 0 + %t228 = xor i1 %t227, true + br i1 %t228, label %then11225, label %endif11227 +then11225: + %t229 = load %S.json.Json, ptr %a9 + %t230 = call %S.json.Json @finch.json.new_null() + call void @finch.lsp.reply(%S.json.Json %t229, %S.json.Json %t230) + store %S.json.Json %t230, ptr %a231 + call void @finch.drop.S_json_Json(ptr %a231) + call void @finch_str_drop(ptr %a208) + call void @finch.drop.S_json_Json(ptr %a9) + call void @finch.drop.S_json_Json(ptr %a7) + call void @finch_str_drop(ptr %a5) + ret void +endif11227: + %t232 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t233 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t233, ptr %a234 + %t235 = call i64 @finch_map_find(ptr %t232, ptr %a234, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t236 = icmp slt i64 %t235, 0 + br i1 %t236, label %map.missing11228, label %map.found11229 +map.missing11228: + store { ptr, i64, i64 } zeroinitializer, ptr %a237 + store { ptr, i64, i64 } %t233, ptr %a238 + call void @finch_buf_str(ptr %a237, ptr %a238, i32 1) + call void @finch_map_missing(ptr @.str.7244, i64 842, ptr %a237) + unreachable +map.found11229: + %t239 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t232, i32 0, i32 0 + %t240 = load ptr, ptr %t239 + %t241 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t240, i64 %t235 + %t242 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t241, i32 0, i32 2 + %t243 = load %S.lsp.Analysis, ptr %t242 + store %S.lsp.Analysis %t243, ptr %a244 + call void @finch.copy.S_lsp_Analysis(ptr %a245, ptr %a244) + %t246 = load %S.lsp.Analysis, ptr %a245 + store %S.lsp.Analysis %t246, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.7245, i64 0, i64 0 }, ptr %a248 + %t249 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t250 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t250, ptr %a251 + %t252 = call i64 @finch_map_find(ptr %t249, ptr %a251, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t253 = icmp sge i64 %t252, 0 + br i1 %t253, label %then11230, label %endif11232 +then11230: + %t254 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t255 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t255, ptr %a256 + %t257 = call i64 @finch_map_find(ptr %t254, ptr %a256, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t258 = icmp slt i64 %t257, 0 + br i1 %t258, label %map.missing11233, label %map.found11234 +map.missing11233: + store { ptr, i64, i64 } zeroinitializer, ptr %a259 + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_buf_str(ptr %a259, ptr %a260, i32 1) + call void @finch_map_missing(ptr @.str.7246, i64 845, ptr %a259) + unreachable +map.found11234: + %t261 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t254, i32 0, i32 0 + %t262 = load ptr, ptr %t261 + %t263 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t262, i64 %t257 + %t264 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t263, i32 0, i32 2 + %t265 = load { ptr, i64, i64 }, ptr %t264 + store { ptr, i64, i64 } %t265, ptr %a266 + call void @finch_str_copy(ptr %a267, ptr %a266) + %t268 = load { ptr, i64, i64 }, ptr %a267 + %t269 = load { ptr, i64, i64 }, ptr %a248 + store { ptr, i64, i64 } %t268, ptr %a248 + store { ptr, i64, i64 } %t269, ptr %a270 + call void @finch_str_drop(ptr %a270) + br label %endif11232 +endif11232: + %t271 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t271, ptr %a272 + store { ptr, i64, i64 } { ptr @.str.7247, i64 18, i64 0 }, ptr %a273 + %t274 = call i32 @finch_str_eq(ptr %a272, ptr %a273) + %t275 = icmp ne i32 %t274, 0 + br i1 %t275, label %match.arm11236, label %match.next11237 +match.arm11236: + %t276 = load %S.json.Json, ptr %a9 + %t277 = load %S.lsp.Analysis, ptr %a247 + %t278 = load { ptr, i64, i64 }, ptr %a208 + %t279 = load i64, ptr %a215 + %t280 = load i64, ptr %a222 + %t281 = call %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %t277, { ptr, i64, i64 } %t278, i64 %t279, i64 %t280) + call void @finch.lsp.reply(%S.json.Json %t276, %S.json.Json %t281) + store %S.json.Json %t281, ptr %a282 + call void @finch.drop.S_json_Json(ptr %a282) + br label %match.end11235 +match.next11237: + store { ptr, i64, i64 } %t271, ptr %a283 + store { ptr, i64, i64 } { ptr @.str.7248, i64 23, i64 0 }, ptr %a284 + %t285 = call i32 @finch_str_eq(ptr %a283, ptr %a284) + %t286 = icmp ne i32 %t285, 0 + br i1 %t286, label %match.arm11238, label %match.next11239 +match.arm11238: + %t287 = load %S.json.Json, ptr %a9 + %t288 = load %S.lsp.Analysis, ptr %a247 + %t289 = load { ptr, i64, i64 }, ptr %a208 + %t290 = load i64, ptr %a215 + %t291 = load i64, ptr %a222 + %t292 = call %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %t288, { ptr, i64, i64 } %t289, i64 %t290, i64 %t291) + call void @finch.lsp.reply(%S.json.Json %t287, %S.json.Json %t292) + store %S.json.Json %t292, ptr %a293 + call void @finch.drop.S_json_Json(ptr %a293) + br label %match.end11235 +match.next11239: + store { ptr, i64, i64 } %t271, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.7249, i64 23, i64 0 }, ptr %a295 + %t296 = call i32 @finch_str_eq(ptr %a294, ptr %a295) + %t297 = icmp ne i32 %t296, 0 + br i1 %t297, label %match.arm11240, label %match.next11241 +match.arm11240: + %t298 = load %S.json.Json, ptr %a9 + %t299 = load %S.lsp.Analysis, ptr %a247 + %t300 = load { ptr, i64, i64 }, ptr %a248 + %t301 = load { ptr, i64, i64 }, ptr %a208 + %t302 = load i64, ptr %a215 + %t303 = load i64, ptr %a222 + %t304 = call %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %t299, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t301, i64 %t302, i64 %t303) + call void @finch.lsp.reply(%S.json.Json %t298, %S.json.Json %t304) + store %S.json.Json %t304, ptr %a305 + call void @finch.drop.S_json_Json(ptr %a305) + br label %match.end11235 +match.next11241: + store { ptr, i64, i64 } %t271, ptr %a306 + store { ptr, i64, i64 } { ptr @.str.7250, i64 27, i64 0 }, ptr %a307 + %t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307) + %t309 = icmp ne i32 %t308, 0 + br i1 %t309, label %match.arm11242, label %match.next11243 +match.arm11242: + %t310 = load %S.json.Json, ptr %a9 + %t311 = load %S.lsp.Analysis, ptr %a247 + %t312 = load { ptr, i64, i64 }, ptr %a208 + %t313 = call %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %t311, { ptr, i64, i64 } %t312) + call void @finch.lsp.reply(%S.json.Json %t310, %S.json.Json %t313) + store %S.json.Json %t313, ptr %a314 + call void @finch.drop.S_json_Json(ptr %a314) + br label %match.end11235 +match.next11243: + br label %match.arm11244 +match.arm11244: + %t315 = load %S.json.Json, ptr %a9 + %t316 = load %S.lsp.Analysis, ptr %a247 + %t317 = load { ptr, i64, i64 }, ptr %a248 + %t318 = load { ptr, i64, i64 }, ptr %a208 + %t319 = load i64, ptr %a215 + %t320 = load i64, ptr %a222 + %t321 = call %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %t316, { ptr, i64, i64 } %t317, { ptr, i64, i64 } %t318, i64 %t319, i64 %t320) + call void @finch.lsp.reply(%S.json.Json %t315, %S.json.Json %t321) + store %S.json.Json %t321, ptr %a322 + call void @finch.drop.S_json_Json(ptr %a322) + br label %match.end11235 +match.end11235: + call void @finch_str_drop(ptr %a248) + call void @finch.drop.S_lsp_Analysis(ptr %a247) + call void @finch_str_drop(ptr %a208) + br label %match.end11188 +match.next11220: + br label %match.arm11246 +match.arm11246: + %t323 = getelementptr inbounds %S.json.Json, ptr %a9, i32 0, i32 0 + %t324 = load i32, ptr %t323 + %t325 = icmp ne i32 %t324, 0 + br i1 %t325, label %then11248, label %endif11250 +then11248: + %t326 = load %S.json.Json, ptr %a9 + %t327 = call %S.json.Json @finch.json.new_null() + call void @finch.lsp.reply(%S.json.Json %t326, %S.json.Json %t327) + store %S.json.Json %t327, ptr %a328 + call void @finch.drop.S_json_Json(ptr %a328) + br label %endif11250 +endif11250: + br label %match.end11188 +match.end11188: + call void @finch.drop.S_json_Json(ptr %a9) + call void @finch.drop.S_json_Json(ptr %a7) + call void @finch_str_drop(ptr %a5) + ret void +} + +define internal void @finch.drop.map_str_S_lsp_Analysis(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond11256 +n.cond11256: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body11257, label %n.end11258 +n.body11257: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live11259, label %entry.next11260 +entry.live11259: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_lsp_Analysis(ptr %t13) + br label %entry.next11260 +entry.next11260: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond11256 +n.end11258: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_Server(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 2 + call void @finch.drop.map_str_str(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 3 + call void @finch.drop.map_str_S_lsp_Analysis(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 4 + call void @finch.drop.map_str_S_lsp_Analysis(ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + ret void +} + +define internal i64 @finch.lsp.run({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca %S.lsp.Server, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + call void @finch.host.binaryStdio() + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.lsp.Server zeroinitializer, { ptr, i64, i64 } %t5, 0 + %t7 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.7251, i64 11, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + %t13 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a14, i64 %t13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a16 + %t22 = insertvalue %S.lsp.Server %t6, { ptr, i64, i64 } %t21, 1 + store %S.lsp.Server %t22, ptr %a23 + br label %while.cond11251 +while.cond11251: + br label %while.body11252 +while.body11252: + %t24 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() + %t25 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 0 + %t26 = xor i1 %t25, true + %t27 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 2 + %t28 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 1 + br i1 %t26, label %or.failed11254, label %or.ok11255 +or.failed11254: + store { ptr, i64, i64 } %t27, ptr %a29 + call void @finch_str_drop(ptr %a29) + br label %while.end11253 +or.ok11255: + store %S.json.Json %t28, ptr %a30 + %t31 = load %S.json.Json, ptr %a30 + call void @finch.lsp.Server.answer(ptr %a23, %S.json.Json %t31) + call void @finch.drop.S_json_Json(ptr %a30) + br label %while.cond11251 +while.end11253: + %t32 = getelementptr inbounds %S.lsp.Server, ptr %a23, i32 0, i32 1 + %t33 = load { ptr, i64, i64 }, ptr %t32 + call void @finch.host.removeTree({ ptr, i64, i64 } %t33) + call void @finch.drop.S_lsp_Server(ptr %a23) + ret i64 0 +} + +define internal %S.json.Json @finch.json.new_null() { +entry: + + %t1 = insertvalue %S.json.Json zeroinitializer, i32 0, 0 + ret %S.json.Json %t1 +} + +define internal %S.json.Json @finch.json.new_bool(i1 %p0) { +entry: + %a1 = alloca i1, align 16 + store i1 %p0, ptr %a1 + %t2 = insertvalue %S.json.Json zeroinitializer, i32 1, 0 + %t3 = load i1, ptr %a1 + %t4 = insertvalue %S.json.Json %t2, i1 %t3, 1 + ret %S.json.Json %t4 +} + +define internal %S.json.Json @finch.json.new_number(double %p0) { +entry: + %a1 = alloca double, align 16 + store double %p0, ptr %a1 + %t2 = insertvalue %S.json.Json zeroinitializer, i32 2, 0 + %t3 = load double, ptr %a1 + %t4 = insertvalue %S.json.Json %t2, double %t3, 2 + ret %S.json.Json %t4 +} + +define internal %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = insertvalue %S.json.Json zeroinitializer, i32 3, 0 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + %t7 = insertvalue %S.json.Json %t2, { ptr, i64, i64 } %t6, 3 + ret %S.json.Json %t7 +} + +define internal %S.json.Json @finch.json.new_list() { +entry: + + %t1 = insertvalue %S.json.Json zeroinitializer, i32 4, 0 + ret %S.json.Json %t1 +} + +define internal %S.json.Json @finch.json.new_object() { +entry: + + %t1 = insertvalue %S.json.Json zeroinitializer, i32 5, 0 + ret %S.json.Json %t1 +} + +define internal i1 @finch.json.Json.is_null(ptr %self) { +entry: + + %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t2 = load i32, ptr %t1 + %t3 = icmp eq i32 %t2, 0 + ret i1 %t3 +} + +define internal i64 @finch.json.Json.len(ptr %self) { +entry: + + %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t2 = load i32, ptr %t1 + %t3 = icmp eq i32 %t2, 4 + br i1 %t3, label %match.arm11262, label %match.or11264 +match.or11264: + %t4 = icmp eq i32 %t2, 5 + br i1 %t4, label %match.arm11262, label %match.next11263 +match.arm11262: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + br label %match.from11265 +match.from11265: + br label %match.end11261 +match.next11263: + %t8 = icmp eq i32 %t2, 3 + br i1 %t8, label %match.arm11266, label %match.next11267 +match.arm11266: + %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load i64, ptr %t10 + br label %match.from11268 +match.from11268: + br label %match.end11261 +match.next11267: + br label %match.arm11269 +match.arm11269: + br label %match.from11271 +match.from11271: + br label %match.end11261 +match.end11261: + %t12 = phi i64 [ %t7, %match.from11265 ], [ %t11, %match.from11268 ], [ 0, %match.from11271 ] + ret i64 %t12 +} + +define internal i1 @finch.json.Json.has(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 5 + br label %logic.from11272 +logic.from11272: + br i1 %t4, label %logic.rhs11273, label %logic.end11274 +logic.rhs11273: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a8 + %t9 = load i64, ptr %t6 + %t10 = load ptr, ptr %t5 + store i64 0, ptr %a11 + br label %find.cond11275 +find.cond11275: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t9 + br i1 %t13, label %find.body11276, label %find.end11279 +find.body11276: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } %t7, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %find.hit11277, label %find.next11278 +find.hit11277: + store i64 %t12, ptr %a8 + br label %find.end11279 +find.next11278: + %t20 = add i64 %t12, 1 + store i64 %t20, ptr %a11 + br label %find.cond11275 +find.end11279: + %t21 = load i64, ptr %a8 + %t22 = icmp sge i64 %t21, 0 + br label %logic.rend11280 +logic.rend11280: + br label %logic.end11274 +logic.end11274: + %t23 = phi i1 [ false, %logic.from11272 ], [ %t22, %logic.rend11280 ] + ret i1 %t23 +} + +define internal void @finch.copy.arr_S_json_Json(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond11294 +n.cond11294: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body11295, label %n.end11296 +n.body11295: + %t8 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.json.Json, ptr %t2, i64 %t6 + call void @finch.copy.S_json_Json(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond11294 +n.end11296: + ret void +} + +define internal void @finch.copy.S_json_Json(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.json.Json, ptr %src + store %S.json.Json %t1, ptr %dst + %t2 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 3 + %t3 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 4 + %t5 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_S_json_Json(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 5 + %t7 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + ret void +} + +define internal %S.json.Json @finch.json.Json.get(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a12 = alloca i64, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca i64, align 16 + %a35 = alloca %S.json.Json, align 16 + %a36 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp ne i32 %t3, 5 + br i1 %t4, label %then11281, label %endif11283 +then11281: + %t5 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t5 +endif11283: + %t6 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a9 + %t10 = load i64, ptr %t7 + %t11 = load ptr, ptr %t6 + store i64 0, ptr %a12 + br label %find.cond11284 +find.cond11284: + %t13 = load i64, ptr %a12 + %t14 = icmp slt i64 %t13, %t10 + br i1 %t14, label %find.body11285, label %find.end11288 +find.body11285: + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i64 %t13 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } %t8, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br i1 %t20, label %find.hit11286, label %find.next11287 +find.hit11286: + store i64 %t13, ptr %a9 + br label %find.end11288 +find.next11287: + %t21 = add i64 %t13, 1 + store i64 %t21, ptr %a12 + br label %find.cond11284 +find.end11288: + %t22 = load i64, ptr %a9 + store i64 %t22, ptr %a23 + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, 0 + br i1 %t25, label %then11289, label %endif11291 +then11289: + %t26 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t26 +endif11291: + %t27 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t28 = load i64, ptr %a23 + %t29 = load { ptr, i64, i64 }, ptr %t27 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range11292, label %inrange11293 +range11292: + call void @finch_panic_index(ptr @.str.7252, i64 84, i64 %t28, i64 %t30) + unreachable +inrange11293: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.json.Json, ptr %t32, i64 %t28 + %t34 = load %S.json.Json, ptr %t33 + store %S.json.Json %t34, ptr %a35 + call void @finch.copy.S_json_Json(ptr %a36, ptr %a35) + %t37 = load %S.json.Json, ptr %a36 + ret %S.json.Json %t37 +} + +define internal %S.json.Json @finch.json.Json.at(ptr %self, i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a23 = alloca %S.json.Json, align 16 + %a24 = alloca %S.json.Json, align 16 + store i64 %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp ne i32 %t3, 4 + br label %logic.from11297 +logic.from11297: + br i1 %t4, label %logic.end11299, label %logic.rhs11298 +logic.rhs11298: + %t5 = load i64, ptr %a1 + %t6 = icmp slt i64 %t5, 0 + br label %logic.rend11300 +logic.rend11300: + br label %logic.end11299 +logic.end11299: + %t7 = phi i1 [ true, %logic.from11297 ], [ %t6, %logic.rend11300 ] + br label %logic.from11301 +logic.from11301: + br i1 %t7, label %logic.end11303, label %logic.rhs11302 +logic.rhs11302: + %t8 = load i64, ptr %a1 + %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = icmp sge i64 %t8, %t11 + br label %logic.rend11304 +logic.rend11304: + br label %logic.end11303 +logic.end11303: + %t13 = phi i1 [ true, %logic.from11301 ], [ %t12, %logic.rend11304 ] + br i1 %t13, label %then11305, label %endif11307 +then11305: + %t14 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t14 +endif11307: + %t15 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t16 = load i64, ptr %a1 + %t17 = load { ptr, i64, i64 }, ptr %t15 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range11308, label %inrange11309 +range11308: + call void @finch_panic_index(ptr @.str.7253, i64 92, i64 %t16, i64 %t18) + unreachable +inrange11309: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.json.Json, ptr %t20, i64 %t16 + %t22 = load %S.json.Json, ptr %t21 + store %S.json.Json %t22, ptr %a23 + call void @finch.copy.S_json_Json(ptr %a24, ptr %a23) + %t25 = load %S.json.Json, ptr %a24 + ret %S.json.Json %t25 +} + +define internal { ptr, i64, i64 } @finch.json.Json.str_or(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 3 + br i1 %t4, label %then11310, label %endif11312 +then11310: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + ret { ptr, i64, i64 } %t9 +endif11312: + %t10 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + ret { ptr, i64, i64 } %t13 +} + +define internal double @finch.json.Json.float_or(ptr %self, double %p0) { +entry: + %a1 = alloca double, align 16 + store double %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 2 + br i1 %t4, label %then11313, label %endif11315 +then11313: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 + %t6 = load double, ptr %t5 + ret double %t6 +endif11315: + %t7 = load double, ptr %a1 + ret double %t7 +} + +define internal i64 @finch.json.Json.int_or(ptr %self, i64 %p0) { +entry: + %a1 = alloca i64, align 16 + store i64 %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 2 + br i1 %t4, label %then11316, label %endif11318 +then11316: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 + %t6 = load double, ptr %t5 + %t7 = fptosi double %t6 to i64 + ret i64 %t7 +endif11318: + %t8 = load i64, ptr %a1 + ret i64 %t8 +} + +define internal i1 @finch.json.Json.bool_or(ptr %self, i1 %p0) { +entry: + %a1 = alloca i1, align 16 + store i1 %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 1 + br i1 %t4, label %then11319, label %endif11321 +then11319: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 1 + %t6 = load i1, ptr %t5 + ret i1 %t6 +endif11321: + %t7 = load i1, ptr %a1 + ret i1 %t7 +} + +define internal { ptr, i64, i64 } @finch.json.Json.names(ptr %self) { +entry: + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t2 = load { ptr, i64, i64 }, ptr %t1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch.copy.arr_str(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + ret { ptr, i64, i64 } %t5 +} + +define internal void @finch.json.Json.push(ptr %self, %S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + %a6 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 + %t4 = load %S.json.Json, ptr %a1 + store %S.json.Json %t4, ptr %a5 + call void @finch.copy.S_json_Json(ptr %a6, ptr %a5) + %t7 = load %S.json.Json, ptr %a6 + %t8 = load i64, ptr %t3 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %t2, i64 %t9, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %t2 + %t11 = getelementptr inbounds %S.json.Json, ptr %t10, i64 %t8 + store %S.json.Json %t7, ptr %t11 + store i64 %t9, ptr %t3 + ret void +} + +define internal void @finch.json.Json.set(ptr %self, { ptr, i64, i64 } %p0, %S.json.Json %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.json.Json, align 16 + %a6 = alloca i64, align 16 + %a9 = alloca i64, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca i64, align 16 + %a31 = alloca %S.json.Json, align 16 + %a32 = alloca %S.json.Json, align 16 + %a35 = alloca %S.json.Json, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.json.Json, align 16 + %a50 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.json.Json %p1, ptr %a2 + %t3 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 + %t5 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a6 + %t7 = load i64, ptr %t4 + %t8 = load ptr, ptr %t3 + store i64 0, ptr %a9 + br label %find.cond11322 +find.cond11322: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t7 + br i1 %t11, label %find.body11323, label %find.end11326 +find.body11323: + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t10 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } %t5, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br i1 %t17, label %find.hit11324, label %find.next11325 +find.hit11324: + store i64 %t10, ptr %a6 + br label %find.end11326 +find.next11325: + %t18 = add i64 %t10, 1 + store i64 %t18, ptr %a9 + br label %find.cond11322 +find.end11326: + %t19 = load i64, ptr %a6 + store i64 %t19, ptr %a20 + %t21 = load i64, ptr %a20 + %t22 = icmp sge i64 %t21, 0 + br i1 %t22, label %then11327, label %endif11329 +then11327: + %t23 = load %S.json.Json, ptr %a2 + %t24 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t25 = load i64, ptr %a20 + %t26 = load { ptr, i64, i64 }, ptr %t24 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 %t25, %t27 + br i1 %t28, label %range11330, label %inrange11331 +range11330: + call void @finch_panic_index(ptr @.str.7254, i64 140, i64 %t25, i64 %t27) + unreachable +inrange11331: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds %S.json.Json, ptr %t29, i64 %t25 + store %S.json.Json %t23, ptr %a31 + call void @finch.copy.S_json_Json(ptr %a32, ptr %a31) + %t33 = load %S.json.Json, ptr %a32 + %t34 = load %S.json.Json, ptr %t30 + store %S.json.Json %t33, ptr %t30 + store %S.json.Json %t34, ptr %a35 + call void @finch.drop.S_json_Json(ptr %a35) + ret void +endif11329: + %t36 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_copy(ptr %a40, ptr %a39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + %t42 = load i64, ptr %t37 + %t43 = add i64 %t42, 1 + call void @finch_arr_reserve(ptr %t36, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t44 = load ptr, ptr %t36 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 + store { ptr, i64, i64 } %t41, ptr %t45 + store i64 %t43, ptr %t37 + %t46 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 + %t48 = load %S.json.Json, ptr %a2 + store %S.json.Json %t48, ptr %a49 + call void @finch.copy.S_json_Json(ptr %a50, ptr %a49) + %t51 = load %S.json.Json, ptr %a50 + %t52 = load i64, ptr %t47 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %t46, i64 %t53, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %t46 + %t55 = getelementptr inbounds %S.json.Json, ptr %t54, i64 %t52 + store %S.json.Json %t51, ptr %t55 + store i64 %t53, ptr %t47 + ret void +} + +define internal { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a17 = alloca i8, align 16 + %a20 = alloca i64, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.7255, i64 1, i64 0 }, ptr %t4 + %t5 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t6 = insertvalue { ptr, i64, i64 } %t5, i64 1, 1 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 2 + store { ptr, i64, i64 } %t7, ptr %a8 + store i64 0, ptr %a9 + br label %each.cond11332 +each.cond11332: + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = load i64, ptr %a9 + %t13 = icmp slt i64 %t12, %t11 + br i1 %t13, label %each.body11333, label %each.end11335 +each.body11333: + %t14 = load ptr, ptr %a1 + %t15 = getelementptr inbounds i8, ptr %t14, i64 %t12 + %t16 = load i8, ptr %t15 + store i8 %t16, ptr %a17 + %t18 = load i8, ptr %a17 + %t19 = zext i8 %t18 to i64 + store i64 %t19, ptr %a20 + %t21 = load i8, ptr %a17 + %t22 = icmp eq i8 %t21, 34 + br i1 %t22, label %then11336, label %else11337 +then11336: + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = add i64 %t24, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t25, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t26 = load ptr, ptr %a8 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t24 + store { ptr, i64, i64 } { ptr @.str.7256, i64 2, i64 0 }, ptr %t27 + store i64 %t25, ptr %t23 + br label %endif11338 +else11337: + %t28 = load i8, ptr %a17 + %t29 = icmp eq i8 %t28, 92 + br i1 %t29, label %then11339, label %else11340 +then11339: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %a8 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } { ptr @.str.7257, i64 2, i64 0 }, ptr %t34 + store i64 %t32, ptr %t30 + br label %endif11341 +else11340: + %t35 = load i8, ptr %a17 + %t36 = icmp eq i8 %t35, 10 + br i1 %t36, label %then11342, label %else11343 +then11342: + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t40 = load ptr, ptr %a8 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 + store { ptr, i64, i64 } { ptr @.str.7258, i64 2, i64 0 }, ptr %t41 + store i64 %t39, ptr %t37 + br label %endif11344 +else11343: + %t42 = load i8, ptr %a17 + %t43 = icmp eq i8 %t42, 13 + br i1 %t43, label %then11345, label %else11346 +then11345: + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = add i64 %t45, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t47 = load ptr, ptr %a8 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 + store { ptr, i64, i64 } { ptr @.str.7259, i64 2, i64 0 }, ptr %t48 + store i64 %t46, ptr %t44 + br label %endif11347 +else11346: + %t49 = load i8, ptr %a17 + %t50 = icmp eq i8 %t49, 9 + br i1 %t50, label %then11348, label %else11349 +then11348: + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %a8 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 + store { ptr, i64, i64 } { ptr @.str.7260, i64 2, i64 0 }, ptr %t55 + store i64 %t53, ptr %t51 + br label %endif11350 +else11349: + %t56 = load i64, ptr %a20 + %t57 = icmp slt i64 %t56, 32 + br i1 %t57, label %then11351, label %else11352 +then11351: + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t59 = load i64, ptr %a20 + %t60 = sdiv i64 %t59, 16 + %t61 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t60) + store { ptr, i64, i64 } { ptr @.str.7261, i64 4, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = load i64, ptr %a20 + %t68 = srem i64 %t67, 16 + %t69 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t68) + store { ptr, i64, i64 } %t66, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t66, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t69, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a70 + %t76 = load i64, ptr %t58 + %t77 = add i64 %t76, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t77, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t78 = load ptr, ptr %a8 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 %t76 + store { ptr, i64, i64 } %t75, ptr %t79 + store i64 %t77, ptr %t58 + br label %endif11353 +else11352: + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t81 = load i8, ptr %a17 + call void @finch_str_from_char(ptr %a82, i8 signext %t81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = load i64, ptr %t80 + %t85 = add i64 %t84, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t85, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t86 = load ptr, ptr %a8 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 %t84 + store { ptr, i64, i64 } %t83, ptr %t87 + store i64 %t85, ptr %t80 + br label %endif11353 +endif11353: + br label %endif11350 +endif11350: + br label %endif11347 +endif11347: + br label %endif11344 +endif11344: + br label %endif11341 +endif11341: + br label %endif11338 +endif11338: + br label %each.step11334 +each.step11334: + %t88 = load i64, ptr %a9 + %t89 = add i64 %t88, 1 + store i64 %t89, ptr %a9 + br label %each.cond11332 +each.end11335: + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t91 = load i64, ptr %t90 + %t92 = add i64 %t91, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t92, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t93 = load ptr, ptr %a8 + %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91 + store { ptr, i64, i64 } { ptr @.str.7262, i64 1, i64 0 }, ptr %t94 + store i64 %t92, ptr %t90 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7263, i64 0, i64 0 }, ptr %a96 + call void @finch_str_join(ptr %a97, ptr %a8, ptr %a96) + %t98 = load { ptr, i64, i64 }, ptr %a97 + call void @finch.drop.arr_str(ptr %a8) + ret { ptr, i64, i64 } %t98 +} + +define internal { ptr, i64, i64 } @finch.json.hexdigit(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.7264, i64 16, i64 0 }, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 %t3, %t5 + br i1 %t6, label %range11354, label %inrange11355 +range11354: + call void @finch_panic_index(ptr @.str.7265, i64 175, i64 %t3, i64 %t5) + unreachable +inrange11355: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds i8, ptr %t7, i64 %t3 + %t9 = load i8, ptr %t8 + call void @finch_str_from_char(ptr %a10, i8 signext %t9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + call void @finch_str_drop(ptr %a2) + ret { ptr, i64, i64 } %t11 +} + +define internal { ptr, i64, i64 } @finch.json.number_text(double %p0) { +entry: + %a1 = alloca double, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store double %p0, ptr %a1 + %t2 = load double, ptr %a1 + %t3 = load double, ptr %a1 + %t4 = fptosi double %t3 to i64 + %t5 = sitofp i64 %t4 to double + %t6 = fcmp oeq double %t2, %t5 + br label %logic.from11356 +logic.from11356: + br i1 %t6, label %logic.rhs11357, label %logic.end11358 +logic.rhs11357: + %t7 = load double, ptr %a1 + %t8 = fneg double 1000000000000000.0 + %t9 = fcmp ogt double %t7, %t8 + br label %logic.rend11359 +logic.rend11359: + br label %logic.end11358 +logic.end11358: + %t10 = phi i1 [ false, %logic.from11356 ], [ %t9, %logic.rend11359 ] + br label %logic.from11360 +logic.from11360: + br i1 %t10, label %logic.rhs11361, label %logic.end11362 +logic.rhs11361: + %t11 = load double, ptr %a1 + %t12 = fcmp olt double %t11, 1000000000000000.0 + br label %logic.rend11363 +logic.rend11363: + br label %logic.end11362 +logic.end11362: + %t13 = phi i1 [ false, %logic.from11360 ], [ %t12, %logic.rend11363 ] + br i1 %t13, label %then11364, label %endif11366 +then11364: + %t14 = load double, ptr %a1 + %t15 = fptosi double %t14 to i64 + call void @finch_str_from_int(ptr %a16, i64 %t15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t17 +endif11366: + %t18 = load double, ptr %a1 + call void @finch_str_from_float(ptr %a19, double %t18) + %t20 = load { ptr, i64, i64 }, ptr %a19 + ret { ptr, i64, i64 } %t20 +} + +define internal void @finch.json.write(%S.json.Json %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, ptr %p3) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca ptr, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca i64, align 16 + %a113 = alloca i64, align 16 + %a114 = alloca %S.json.Json, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca i64, align 16 + %a203 = alloca i64, align 16 + %a204 = alloca %S.json.Json, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store ptr %p3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.7266, i64 0, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7267, i64 0, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7268, i64 1, i64 0 }, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.7269, i64 1, i64 0 }, ptr %a8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp sgt i64 %t10, 0 + br i1 %t11, label %then11367, label %endif11369 +then11367: + %t12 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7270, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a3 + %t15 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + %t20 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t19, ptr %a6 + store { ptr, i64, i64 } %t20, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.7271, i64 2, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_drop(ptr %a23) + br label %endif11369 +endif11369: + %t24 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 0 + %t25 = load i32, ptr %t24 + %t26 = icmp eq i32 %t25, 0 + br i1 %t26, label %match.arm11371, label %match.next11372 +match.arm11371: + %t27 = load ptr, ptr %a4 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic11373, label %ok11374 +panic11373: + call void @finch_panic(ptr @.str.7272, i64 200, ptr @.str.7273) + unreachable +ok11374: + %t29 = getelementptr inbounds %S.json.Writer, ptr %t27, i32 0, i32 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %t29, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %t29 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } { ptr @.str.7274, i64 4, i64 0 }, ptr %t34 + store i64 %t32, ptr %t30 + br label %match.end11370 +match.next11372: + %t35 = icmp eq i32 %t25, 1 + br i1 %t35, label %match.arm11375, label %match.next11376 +match.arm11375: + %t36 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 1 + %t37 = load i1, ptr %t36 + br i1 %t37, label %then11377, label %else11378 +then11377: + %t38 = load ptr, ptr %a4 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic11380, label %ok11381 +panic11380: + call void @finch_panic(ptr @.str.7275, i64 203, ptr @.str.7276) + unreachable +ok11381: + %t40 = getelementptr inbounds %S.json.Writer, ptr %t38, i32 0, i32 0 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = add i64 %t42, 1 + call void @finch_arr_reserve(ptr %t40, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t44 = load ptr, ptr %t40 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 + store { ptr, i64, i64 } { ptr @.str.7277, i64 4, i64 0 }, ptr %t45 + store i64 %t43, ptr %t41 + br label %endif11379 +else11378: + %t46 = load ptr, ptr %a4 + %t47 = icmp eq ptr %t46, null + br i1 %t47, label %panic11382, label %ok11383 +panic11382: + call void @finch_panic(ptr @.str.7278, i64 205, ptr @.str.7279) + unreachable +ok11383: + %t48 = getelementptr inbounds %S.json.Writer, ptr %t46, i32 0, i32 0 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 + %t50 = load i64, ptr %t49 + %t51 = add i64 %t50, 1 + call void @finch_arr_reserve(ptr %t48, i64 %t51, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t52 = load ptr, ptr %t48 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t50 + store { ptr, i64, i64 } { ptr @.str.7280, i64 5, i64 0 }, ptr %t53 + store i64 %t51, ptr %t49 + br label %endif11379 +endif11379: + br label %match.end11370 +match.next11376: + %t54 = icmp eq i32 %t25, 2 + br i1 %t54, label %match.arm11384, label %match.next11385 +match.arm11384: + %t55 = load ptr, ptr %a4 + %t56 = icmp eq ptr %t55, null + br i1 %t56, label %panic11386, label %ok11387 +panic11386: + call void @finch_panic(ptr @.str.7281, i64 208, ptr @.str.7282) + unreachable +ok11387: + %t57 = getelementptr inbounds %S.json.Writer, ptr %t55, i32 0, i32 0 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 + %t59 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 2 + %t60 = load double, ptr %t59 + %t61 = call { ptr, i64, i64 } @finch.json.number_text(double %t60) + %t62 = load i64, ptr %t58 + %t63 = add i64 %t62, 1 + call void @finch_arr_reserve(ptr %t57, i64 %t63, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t64 = load ptr, ptr %t57 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62 + store { ptr, i64, i64 } %t61, ptr %t65 + store i64 %t63, ptr %t58 + br label %match.end11370 +match.next11385: + %t66 = icmp eq i32 %t25, 3 + br i1 %t66, label %match.arm11388, label %match.next11389 +match.arm11388: + %t67 = load ptr, ptr %a4 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic11390, label %ok11391 +panic11390: + call void @finch_panic(ptr @.str.7283, i64 209, ptr @.str.7284) + unreachable +ok11391: + %t69 = getelementptr inbounds %S.json.Writer, ptr %t67, i32 0, i32 0 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 + %t71 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 3 + %t72 = load { ptr, i64, i64 }, ptr %t71 + %t73 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t72) + %t74 = load i64, ptr %t70 + %t75 = add i64 %t74, 1 + call void @finch_arr_reserve(ptr %t69, i64 %t75, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t76 = load ptr, ptr %t69 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 + store { ptr, i64, i64 } %t73, ptr %t77 + store i64 %t75, ptr %t70 + br label %match.end11370 +match.next11389: + %t78 = icmp eq i32 %t25, 4 + br i1 %t78, label %match.arm11392, label %match.next11393 +match.arm11392: + %t79 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 + %t81 = load i64, ptr %t80 + %t82 = icmp eq i64 %t81, 0 + br i1 %t82, label %then11394, label %endif11396 +then11394: + %t83 = load ptr, ptr %a4 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic11397, label %ok11398 +panic11397: + call void @finch_panic(ptr @.str.7285, i64 212, ptr @.str.7286) + unreachable +ok11398: + %t85 = getelementptr inbounds %S.json.Writer, ptr %t83, i32 0, i32 0 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %t85, i64 %t88, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %t85 + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i64 %t87 + store { ptr, i64, i64 } { ptr @.str.7287, i64 2, i64 0 }, ptr %t90 + store i64 %t88, ptr %t86 + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a7) + call void @finch_str_drop(ptr %a6) + call void @finch_str_drop(ptr %a5) + ret void +endif11396: + %t91 = load ptr, ptr %a4 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic11399, label %ok11400 +panic11399: + call void @finch_panic(ptr @.str.7288, i64 215, ptr @.str.7289) + unreachable +ok11400: + %t93 = getelementptr inbounds %S.json.Writer, ptr %t91, i32 0, i32 0 + %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 + %t95 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7290, i64 1, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a96 + %t100 = load i64, ptr %t94 + %t101 = add i64 %t100, 1 + call void @finch_arr_reserve(ptr %t93, i64 %t101, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t102 = load ptr, ptr %t93 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t100 + store { ptr, i64, i64 } %t99, ptr %t103 + store i64 %t101, ptr %t94 + %t104 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a105 + br label %each.cond11401 +each.cond11401: + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t107 = load i64, ptr %t106 + %t108 = load i64, ptr %a105 + %t109 = icmp slt i64 %t108, %t107 + br i1 %t109, label %each.body11402, label %each.end11404 +each.body11402: + %t110 = load ptr, ptr %t104 + %t111 = getelementptr inbounds %S.json.Json, ptr %t110, i64 %t108 + %t112 = load %S.json.Json, ptr %t111 + store i64 %t108, ptr %a113 + store %S.json.Json %t112, ptr %a114 + %t115 = load i64, ptr %a113 + %t116 = icmp sgt i64 %t115, 0 + br i1 %t116, label %then11405, label %endif11407 +then11405: + %t117 = load ptr, ptr %a4 + %t118 = icmp eq ptr %t117, null + br i1 %t118, label %panic11408, label %ok11409 +panic11408: + call void @finch_panic(ptr @.str.7291, i64 218, ptr @.str.7292) + unreachable +ok11409: + %t119 = getelementptr inbounds %S.json.Writer, ptr %t117, i32 0, i32 0 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %a7 + %t122 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t121, ptr %a124 + store { ptr, i64, i64 } %t122, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a123 + %t127 = load i64, ptr %t120 + %t128 = add i64 %t127, 1 + call void @finch_arr_reserve(ptr %t119, i64 %t128, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t129 = load ptr, ptr %t119 + %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i64 %t127 + store { ptr, i64, i64 } %t126, ptr %t130 + store i64 %t128, ptr %t120 + br label %endif11407 +endif11407: + %t131 = load ptr, ptr %a4 + %t132 = icmp eq ptr %t131, null + br i1 %t132, label %panic11410, label %ok11411 +panic11410: + call void @finch_panic(ptr @.str.7293, i64 220, ptr @.str.7294) + unreachable +ok11411: + %t133 = getelementptr inbounds %S.json.Writer, ptr %t131, i32 0, i32 0 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_copy(ptr %a137, ptr %a136) + %t138 = load { ptr, i64, i64 }, ptr %a137 + %t139 = load i64, ptr %t134 + %t140 = add i64 %t139, 1 + call void @finch_arr_reserve(ptr %t133, i64 %t140, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t141 = load ptr, ptr %t133 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i64 %t139 + store { ptr, i64, i64 } %t138, ptr %t142 + store i64 %t140, ptr %t134 + %t143 = load %S.json.Json, ptr %a114 + %t144 = load { ptr, i64, i64 }, ptr %a2 + %t145 = load { ptr, i64, i64 }, ptr %a6 + %t146 = load ptr, ptr %a4 + call void @finch.json.write(%S.json.Json %t143, { ptr, i64, i64 } %t144, { ptr, i64, i64 } %t145, ptr %t146) + br label %each.step11403 +each.step11403: + %t147 = load i64, ptr %a105 + %t148 = add i64 %t147, 1 + store i64 %t148, ptr %a105 + br label %each.cond11401 +each.end11404: + %t149 = load ptr, ptr %a4 + %t150 = icmp eq ptr %t149, null + br i1 %t150, label %panic11412, label %ok11413 +panic11412: + call void @finch_panic(ptr @.str.7295, i64 223, ptr @.str.7296) + unreachable +ok11413: + %t151 = getelementptr inbounds %S.json.Writer, ptr %t149, i32 0, i32 0 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load { ptr, i64, i64 }, ptr %a5 + %t154 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t153, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t158, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.7297, i64 1, i64 0 }, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t158, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a159 + %t164 = load i64, ptr %t152 + %t165 = add i64 %t164, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t165, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t166 = load ptr, ptr %t151 + %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i64 %t164 + store { ptr, i64, i64 } %t163, ptr %t167 + store i64 %t165, ptr %t152 + br label %match.end11370 +match.next11393: + %t168 = icmp eq i32 %t25, 5 + br i1 %t168, label %match.arm11414, label %match.next11415 +match.arm11414: + %t169 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 + %t171 = load i64, ptr %t170 + %t172 = icmp eq i64 %t171, 0 + br i1 %t172, label %then11416, label %endif11418 +then11416: + %t173 = load ptr, ptr %a4 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic11419, label %ok11420 +panic11419: + call void @finch_panic(ptr @.str.7298, i64 227, ptr @.str.7299) + unreachable +ok11420: + %t175 = getelementptr inbounds %S.json.Writer, ptr %t173, i32 0, i32 0 + %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i32 0, i32 1 + %t177 = load i64, ptr %t176 + %t178 = add i64 %t177, 1 + call void @finch_arr_reserve(ptr %t175, i64 %t178, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t179 = load ptr, ptr %t175 + %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t177 + store { ptr, i64, i64 } { ptr @.str.7300, i64 2, i64 0 }, ptr %t180 + store i64 %t178, ptr %t176 + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a7) + call void @finch_str_drop(ptr %a6) + call void @finch_str_drop(ptr %a5) + ret void +endif11418: + %t181 = load ptr, ptr %a4 + %t182 = icmp eq ptr %t181, null + br i1 %t182, label %panic11421, label %ok11422 +panic11421: + call void @finch_panic(ptr @.str.7301, i64 230, ptr @.str.7302) + unreachable +ok11422: + %t183 = getelementptr inbounds %S.json.Writer, ptr %t181, i32 0, i32 0 + %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 + %t185 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7303, i64 1, i64 0 }, ptr %a187 + store { ptr, i64, i64 } %t185, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + %t189 = load { ptr, i64, i64 }, ptr %a186 + %t190 = load i64, ptr %t184 + %t191 = add i64 %t190, 1 + call void @finch_arr_reserve(ptr %t183, i64 %t191, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t192 = load ptr, ptr %t183 + %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t192, i64 %t190 + store { ptr, i64, i64 } %t189, ptr %t193 + store i64 %t191, ptr %t184 + %t194 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a195 + br label %each.cond11423 +each.cond11423: + %t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 + %t197 = load i64, ptr %t196 + %t198 = load i64, ptr %a195 + %t199 = icmp slt i64 %t198, %t197 + br i1 %t199, label %each.body11424, label %each.end11426 +each.body11424: + %t200 = load ptr, ptr %t194 + %t201 = getelementptr inbounds %S.json.Json, ptr %t200, i64 %t198 + %t202 = load %S.json.Json, ptr %t201 + store i64 %t198, ptr %a203 + store %S.json.Json %t202, ptr %a204 + %t205 = load i64, ptr %a203 + %t206 = icmp sgt i64 %t205, 0 + br i1 %t206, label %then11427, label %endif11429 +then11427: + %t207 = load ptr, ptr %a4 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic11430, label %ok11431 +panic11430: + call void @finch_panic(ptr @.str.7304, i64 233, ptr @.str.7305) + unreachable +ok11431: + %t209 = getelementptr inbounds %S.json.Writer, ptr %t207, i32 0, i32 0 + %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 + %t211 = load { ptr, i64, i64 }, ptr %a7 + %t212 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t211, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a213 + %t217 = load i64, ptr %t210 + %t218 = add i64 %t217, 1 + call void @finch_arr_reserve(ptr %t209, i64 %t218, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t219 = load ptr, ptr %t209 + %t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %t219, i64 %t217 + store { ptr, i64, i64 } %t216, ptr %t220 + store i64 %t218, ptr %t210 + br label %endif11429 +endif11429: + %t221 = load ptr, ptr %a4 + %t222 = icmp eq ptr %t221, null + br i1 %t222, label %panic11432, label %ok11433 +panic11432: + call void @finch_panic(ptr @.str.7306, i64 235, ptr @.str.7307) + unreachable +ok11433: + %t223 = getelementptr inbounds %S.json.Writer, ptr %t221, i32 0, i32 0 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 + %t225 = load { ptr, i64, i64 }, ptr %a6 + %t226 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 5 + %t227 = load i64, ptr %a203 + %t228 = load { ptr, i64, i64 }, ptr %t226 + %t229 = extractvalue { ptr, i64, i64 } %t228, 1 + %t230 = icmp uge i64 %t227, %t229 + br i1 %t230, label %range11434, label %inrange11435 +range11434: + call void @finch_panic_index(ptr @.str.7308, i64 235, i64 %t227, i64 %t229) + unreachable +inrange11435: + %t231 = extractvalue { ptr, i64, i64 } %t228, 0 + %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i64 %t227 + %t233 = load { ptr, i64, i64 }, ptr %t232 + %t234 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t233) + store { ptr, i64, i64 } %t225, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t234, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a235 + %t240 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t239, ptr %a242 + store { ptr, i64, i64 } %t240, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t239, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + %t246 = load i64, ptr %t224 + %t247 = add i64 %t246, 1 + call void @finch_arr_reserve(ptr %t223, i64 %t247, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t248 = load ptr, ptr %t223 + %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t246 + store { ptr, i64, i64 } %t245, ptr %t249 + store i64 %t247, ptr %t224 + %t250 = load %S.json.Json, ptr %a204 + %t251 = load { ptr, i64, i64 }, ptr %a2 + %t252 = load { ptr, i64, i64 }, ptr %a6 + %t253 = load ptr, ptr %a4 + call void @finch.json.write(%S.json.Json %t250, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252, ptr %t253) + br label %each.step11425 +each.step11425: + %t254 = load i64, ptr %a195 + %t255 = add i64 %t254, 1 + store i64 %t255, ptr %a195 + br label %each.cond11423 +each.end11426: + %t256 = load ptr, ptr %a4 + %t257 = icmp eq ptr %t256, null + br i1 %t257, label %panic11436, label %ok11437 +panic11436: + call void @finch_panic(ptr @.str.7309, i64 238, ptr @.str.7310) + unreachable +ok11437: + %t258 = getelementptr inbounds %S.json.Writer, ptr %t256, i32 0, i32 0 + %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 + %t260 = load { ptr, i64, i64 }, ptr %a5 + %t261 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t260, ptr %a263 + store { ptr, i64, i64 } %t261, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a262 + store { ptr, i64, i64 } %t265, ptr %a267 + store { ptr, i64, i64 } { ptr @.str.7311, i64 1, i64 0 }, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t265, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + %t271 = load i64, ptr %t259 + %t272 = add i64 %t271, 1 + call void @finch_arr_reserve(ptr %t258, i64 %t272, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t273 = load ptr, ptr %t258 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 + store { ptr, i64, i64 } %t270, ptr %t274 + store i64 %t272, ptr %t259 + br label %match.end11370 +match.next11415: + br i1 true, label %panic11438, label %ok11439 +panic11438: + call void @finch_panic(ptr @.str.7312, i64 199, ptr @.str.7313) + unreachable +ok11439: + unreachable +match.end11370: + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a7) + call void @finch_str_drop(ptr %a6) + call void @finch_str_drop(ptr %a5) + ret void +} + +define internal void @finch.drop.S_json_Writer(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.json.Writer, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + ret void +} + +define internal { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca %S.json.Writer, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + store %S.json.Writer zeroinitializer, ptr %a2 + %t3 = load %S.json.Json, ptr %a1 + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7314, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7315, i64 0, i64 0 }, ptr %a2) + %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7316, i64 0, i64 0 }, ptr %a6 + call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.drop.S_json_Writer(ptr %a2) + ret { ptr, i64, i64 } %t8 +} + +define internal { ptr, i64, i64 } @finch.json.pretty(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca %S.json.Writer, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + store %S.json.Writer zeroinitializer, ptr %a2 + %t3 = load %S.json.Json, ptr %a1 + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7317, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.7318, i64 0, i64 0 }, ptr %a2) + %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7319, i64 0, i64 0 }, ptr %a6 + call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.drop.S_json_Writer(ptr %a2) + ret { ptr, i64, i64 } %t8 +} + +define internal { ptr, i64, i64 } @finch.json.where(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 1, ptr %a2 + store i64 1, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic11440, label %ok11441 +panic11440: + call void @finch_panic(ptr @.str.7320, i64 268, ptr @.str.7321) + unreachable +ok11441: + %t6 = getelementptr inbounds %S.json.Reader, ptr %t4, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond11442 +for.cond11442: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body11443, label %for.end11445 +for.body11443: + %t11 = load i64, ptr %a8 + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic11446, label %ok11447 +panic11446: + call void @finch_panic(ptr @.str.7322, i64 269, ptr @.str.7323) + unreachable +ok11447: + %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp slt i64 %t11, %t16 + br label %logic.from11448 +logic.from11448: + br i1 %t17, label %logic.rhs11449, label %logic.end11450 +logic.rhs11449: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic11451, label %ok11452 +panic11451: + call void @finch_panic(ptr @.str.7324, i64 269, ptr @.str.7325) + unreachable +ok11452: + %t20 = getelementptr inbounds %S.json.Reader, ptr %t18, i32 0, i32 0 + %t21 = load i64, ptr %a8 + %t22 = load { ptr, i64, i64 }, ptr %t20 + %t23 = extractvalue { ptr, i64, i64 } %t22, 1 + %t24 = icmp uge i64 %t21, %t23 + br i1 %t24, label %range11453, label %inrange11454 +range11453: + call void @finch_panic_index(ptr @.str.7326, i64 269, i64 %t21, i64 %t23) + unreachable +inrange11454: + %t25 = extractvalue { ptr, i64, i64 } %t22, 0 + %t26 = getelementptr inbounds i8, ptr %t25, i64 %t21 + %t27 = load i8, ptr %t26 + %t28 = icmp eq i8 %t27, 10 + br label %logic.rend11455 +logic.rend11455: + br label %logic.end11450 +logic.end11450: + %t29 = phi i1 [ false, %logic.from11448 ], [ %t28, %logic.rend11455 ] + br i1 %t29, label %then11456, label %else11457 +then11456: + %t30 = load i64, ptr %a2 + %t31 = add i64 %t30, 1 + store i64 %t31, ptr %a2 + store i64 1, ptr %a3 + br label %endif11458 +else11457: + %t32 = load i64, ptr %a3 + %t33 = add i64 %t32, 1 + store i64 %t33, ptr %a3 + br label %endif11458 +endif11458: + br label %for.step11444 +for.step11444: + %t34 = load i64, ptr %a8 + %t35 = add i64 %t34, 1 + store i64 %t35, ptr %a8 + br label %for.cond11442 +for.end11445: + %t36 = load i64, ptr %a2 + call void @finch_str_from_int(ptr %a37, i64 %t36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.7327, i64 5, i64 0 }, ptr %a40 + store { ptr, i64, i64 } %t38, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t43, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.7328, i64 9, i64 0 }, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + %t49 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a50, i64 %t49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a53 + store { ptr, i64, i64 } %t51, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t48, ptr %a55 + call void @finch_str_drop(ptr %a55) + store { ptr, i64, i64 } %t51, ptr %a56 + call void @finch_str_drop(ptr %a56) + %t57 = load { ptr, i64, i64 }, ptr %a52 + ret { ptr, i64, i64 } %t57 +} + +define internal i8 @finch.json.peek(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11459, label %ok11460 +panic11459: + call void @finch_panic(ptr @.str.7329, i64 280, ptr @.str.7330) + unreachable +ok11460: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11461, label %ok11462 +panic11461: + call void @finch_panic(ptr @.str.7331, i64 280, ptr @.str.7332) + unreachable +ok11462: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp slt i64 %t5, %t10 + br i1 %t11, label %then11463, label %endif11465 +then11463: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic11466, label %ok11467 +panic11466: + call void @finch_panic(ptr @.str.7333, i64 281, ptr @.str.7334) + unreachable +ok11467: + %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic11468, label %ok11469 +panic11468: + call void @finch_panic(ptr @.str.7335, i64 281, ptr @.str.7336) + unreachable +ok11469: + %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = load { ptr, i64, i64 }, ptr %t14 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range11470, label %inrange11471 +range11470: + call void @finch_panic_index(ptr @.str.7337, i64 281, i64 %t18, i64 %t20) + unreachable +inrange11471: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 + %t24 = load i8, ptr %t23 + ret i8 %t24 +endif11465: + %t25 = trunc i64 0 to i8 + ret i8 %t25 +} + +define internal void @finch.json.skip_space(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + br label %while.cond11472 +while.cond11472: + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11475, label %ok11476 +panic11475: + call void @finch_panic(ptr @.str.7338, i64 287, ptr @.str.7339) + unreachable +ok11476: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11477, label %ok11478 +panic11477: + call void @finch_panic(ptr @.str.7340, i64 287, ptr @.str.7341) + unreachable +ok11478: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp slt i64 %t5, %t10 + br label %logic.from11479 +logic.from11479: + br i1 %t11, label %logic.rhs11480, label %logic.end11481 +logic.rhs11480: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic11482, label %ok11483 +panic11482: + call void @finch_panic(ptr @.str.7342, i64 287, ptr @.str.7343) + unreachable +ok11483: + %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic11484, label %ok11485 +panic11484: + call void @finch_panic(ptr @.str.7344, i64 287, ptr @.str.7345) + unreachable +ok11485: + %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = load { ptr, i64, i64 }, ptr %t14 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range11486, label %inrange11487 +range11486: + call void @finch_panic_index(ptr @.str.7346, i64 287, i64 %t18, i64 %t20) + unreachable +inrange11487: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 + %t24 = load i8, ptr %t23 + %t25 = icmp eq i8 %t24, 32 + br label %logic.from11488 +logic.from11488: + br i1 %t25, label %logic.end11490, label %logic.rhs11489 +logic.rhs11489: + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic11491, label %ok11492 +panic11491: + call void @finch_panic(ptr @.str.7347, i64 287, ptr @.str.7348) + unreachable +ok11492: + %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 0 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic11493, label %ok11494 +panic11493: + call void @finch_panic(ptr @.str.7349, i64 287, ptr @.str.7350) + unreachable +ok11494: + %t31 = getelementptr inbounds %S.json.Reader, ptr %t29, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = load { ptr, i64, i64 }, ptr %t28 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range11495, label %inrange11496 +range11495: + call void @finch_panic_index(ptr @.str.7351, i64 287, i64 %t32, i64 %t34) + unreachable +inrange11496: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 + %t38 = load i8, ptr %t37 + %t39 = icmp eq i8 %t38, 10 + br label %logic.rend11497 +logic.rend11497: + br label %logic.end11490 +logic.end11490: + %t40 = phi i1 [ true, %logic.from11488 ], [ %t39, %logic.rend11497 ] + br label %logic.from11498 +logic.from11498: + br i1 %t40, label %logic.end11500, label %logic.rhs11499 +logic.rhs11499: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic11501, label %ok11502 +panic11501: + call void @finch_panic(ptr @.str.7352, i64 287, ptr @.str.7353) + unreachable +ok11502: + %t43 = getelementptr inbounds %S.json.Reader, ptr %t41, i32 0, i32 0 + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic11503, label %ok11504 +panic11503: + call void @finch_panic(ptr @.str.7354, i64 287, ptr @.str.7355) + unreachable +ok11504: + %t46 = getelementptr inbounds %S.json.Reader, ptr %t44, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = load { ptr, i64, i64 }, ptr %t43 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range11505, label %inrange11506 +range11505: + call void @finch_panic_index(ptr @.str.7356, i64 287, i64 %t47, i64 %t49) + unreachable +inrange11506: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 + %t53 = load i8, ptr %t52 + %t54 = icmp eq i8 %t53, 9 + br label %logic.rend11507 +logic.rend11507: + br label %logic.end11500 +logic.end11500: + %t55 = phi i1 [ true, %logic.from11498 ], [ %t54, %logic.rend11507 ] + br label %logic.from11508 +logic.from11508: + br i1 %t55, label %logic.end11510, label %logic.rhs11509 +logic.rhs11509: + %t56 = load ptr, ptr %a1 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic11511, label %ok11512 +panic11511: + call void @finch_panic(ptr @.str.7357, i64 287, ptr @.str.7358) + unreachable +ok11512: + %t58 = getelementptr inbounds %S.json.Reader, ptr %t56, i32 0, i32 0 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic11513, label %ok11514 +panic11513: + call void @finch_panic(ptr @.str.7359, i64 287, ptr @.str.7360) + unreachable +ok11514: + %t61 = getelementptr inbounds %S.json.Reader, ptr %t59, i32 0, i32 1 + %t62 = load i64, ptr %t61 + %t63 = load { ptr, i64, i64 }, ptr %t58 + %t64 = extractvalue { ptr, i64, i64 } %t63, 1 + %t65 = icmp uge i64 %t62, %t64 + br i1 %t65, label %range11515, label %inrange11516 +range11515: + call void @finch_panic_index(ptr @.str.7361, i64 287, i64 %t62, i64 %t64) + unreachable +inrange11516: + %t66 = extractvalue { ptr, i64, i64 } %t63, 0 + %t67 = getelementptr inbounds i8, ptr %t66, i64 %t62 + %t68 = load i8, ptr %t67 + %t69 = icmp eq i8 %t68, 13 + br label %logic.rend11517 +logic.rend11517: + br label %logic.end11510 +logic.end11510: + %t70 = phi i1 [ true, %logic.from11508 ], [ %t69, %logic.rend11517 ] + br label %logic.rend11518 +logic.rend11518: + br label %logic.end11481 +logic.end11481: + %t71 = phi i1 [ false, %logic.from11479 ], [ %t70, %logic.rend11518 ] + br i1 %t71, label %while.body11473, label %while.end11474 +while.body11473: + %t72 = load ptr, ptr %a1 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic11519, label %ok11520 +panic11519: + call void @finch_panic(ptr @.str.7362, i64 288, ptr @.str.7363) + unreachable +ok11520: + %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = add i64 %t75, 1 + store i64 %t76, ptr %t74 + br label %while.cond11472 +while.end11474: + ret void +} + +define internal { ptr, i64, i64 } @finch.json.unexpected(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic11521, label %ok11522 +panic11521: + call void @finch_panic(ptr @.str.7364, i64 293, ptr @.str.7365) + unreachable +ok11522: + %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic11523, label %ok11524 +panic11523: + call void @finch_panic(ptr @.str.7366, i64 293, ptr @.str.7367) + unreachable +ok11524: + %t9 = getelementptr inbounds %S.json.Reader, ptr %t7, i32 0, i32 0 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = icmp sge i64 %t6, %t11 + br i1 %t12, label %then11525, label %endif11527 +then11525: + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.7368, i64 26, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.7369, i64 12, i64 0 }, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + %t23 = load ptr, ptr %a1 + %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) + store { ptr, i64, i64 } %t22, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t22, ptr %a28 + call void @finch_str_drop(ptr %a28) + store { ptr, i64, i64 } %t24, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.7370, i64 1, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + ret { ptr, i64, i64 } %t35 +endif11527: + %t36 = load ptr, ptr %a1 + %t37 = icmp eq ptr %t36, null + br i1 %t37, label %panic11528, label %ok11529 +panic11528: + call void @finch_panic(ptr @.str.7372, i64 296, ptr @.str.7373) + unreachable +ok11529: + %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic11530, label %ok11531 +panic11530: + call void @finch_panic(ptr @.str.7374, i64 296, ptr @.str.7375) + unreachable +ok11531: + %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = load { ptr, i64, i64 }, ptr %t38 + %t44 = extractvalue { ptr, i64, i64 } %t43, 1 + %t45 = icmp uge i64 %t42, %t44 + br i1 %t45, label %range11532, label %inrange11533 +range11532: + call void @finch_panic_index(ptr @.str.7376, i64 296, i64 %t42, i64 %t44) + unreachable +inrange11533: + %t46 = extractvalue { ptr, i64, i64 } %t43, 0 + %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 + %t48 = load i8, ptr %t47 + call void @finch_str_from_char(ptr %a49, i8 signext %t48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.7371, i64 13, i64 0 }, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.7377, i64 8, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t60, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.7378, i64 12, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load ptr, ptr %a1 + %t73 = call { ptr, i64, i64 } @finch.json.where(ptr %t72) + store { ptr, i64, i64 } %t71, ptr %a75 + store { ptr, i64, i64 } %t73, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t71, ptr %a77 + call void @finch_str_drop(ptr %a77) + store { ptr, i64, i64 } %t73, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.7379, i64 1, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + ret { ptr, i64, i64 } %t84 +} + +define internal i1 @finch.json.comes(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic11534, label %ok11535 +panic11534: + call void @finch_panic(ptr @.str.7380, i64 301, ptr @.str.7381) + unreachable +ok11535: + %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic11536, label %ok11537 +panic11536: + call void @finch_panic(ptr @.str.7382, i64 301, ptr @.str.7383) + unreachable +ok11537: + %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = sub i64 %t7, %t11 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sge i64 %t12, %t14 + br label %logic.from11538 +logic.from11538: + br i1 %t15, label %logic.rhs11539, label %logic.end11540 +logic.rhs11539: + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic11541, label %ok11542 +panic11541: + call void @finch_panic(ptr @.str.7384, i64 301, ptr @.str.7385) + unreachable +ok11542: + %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic11543, label %ok11544 +panic11543: + call void @finch_panic(ptr @.str.7387, i64 301, ptr @.str.7388) + unreachable +ok11544: + %t24 = getelementptr inbounds %S.json.Reader, ptr %t22, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic11545, label %ok11546 +panic11545: + call void @finch_panic(ptr @.str.7389, i64 301, ptr @.str.7390) + unreachable +ok11546: + %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 1 + %t29 = load i64, ptr %t28 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t29, %t31 + call void @finch_str_sub(ptr %a21, ptr %a20, i64 %t25, i64 %t32, ptr @.str.7386, i64 301) + %t33 = load { ptr, i64, i64 }, ptr %a21 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a35 + store { ptr, i64, i64 } %t34, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + store { ptr, i64, i64 } %t33, ptr %a39 + call void @finch_str_drop(ptr %a39) + br label %logic.rend11547 +logic.rend11547: + br label %logic.end11540 +logic.end11540: + %t40 = phi i1 [ false, %logic.from11538 ], [ %t38, %logic.rend11547 ] + ret i1 %t40 +} + +define internal { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call i1 @finch.json.comes(ptr %t3, { ptr, i64, i64 } %t4) + %t6 = xor i1 %t5, true + br i1 %t6, label %then11548, label %endif11550 +then11548: + %t7 = load ptr, ptr %a1 + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.7391, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.7392, i64 1, i64 0 }, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + %t18 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t7, { ptr, i64, i64 } %t17) + store { ptr, i64, i64 } %t17, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = insertvalue { i1, i8, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t18, 2 + ret { i1, i8, { ptr, i64, i64 } } %t20 +endif11550: + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic11551, label %ok11552 +panic11551: + call void @finch_panic(ptr @.str.7393, i64 308, ptr @.str.7394) + unreachable +ok11552: + %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 + %t26 = load i64, ptr %t25 + %t27 = add i64 %t26, %t22 + store i64 %t27, ptr %t25 + ret { i1, i8, { ptr, i64, i64 } } { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer } +} + +define internal i64 @finch.json.hex_value(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 48 + br label %logic.from11553 +logic.from11553: + br i1 %t3, label %logic.rhs11554, label %logic.end11555 +logic.rhs11554: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 57 + br label %logic.rend11556 +logic.rend11556: + br label %logic.end11555 +logic.end11555: + %t6 = phi i1 [ false, %logic.from11553 ], [ %t5, %logic.rend11556 ] + br i1 %t6, label %then11557, label %endif11559 +then11557: + %t7 = load i8, ptr %a1 + %t8 = zext i8 %t7 to i64 + %t9 = zext i8 48 to i64 + %t10 = sub i64 %t8, %t9 + ret i64 %t10 +endif11559: + %t11 = load i8, ptr %a1 + %t12 = icmp uge i8 %t11, 97 + br label %logic.from11560 +logic.from11560: + br i1 %t12, label %logic.rhs11561, label %logic.end11562 +logic.rhs11561: + %t13 = load i8, ptr %a1 + %t14 = icmp ule i8 %t13, 102 + br label %logic.rend11563 +logic.rend11563: + br label %logic.end11562 +logic.end11562: + %t15 = phi i1 [ false, %logic.from11560 ], [ %t14, %logic.rend11563 ] + br i1 %t15, label %then11564, label %endif11566 +then11564: + %t16 = load i8, ptr %a1 + %t17 = zext i8 %t16 to i64 + %t18 = zext i8 97 to i64 + %t19 = sub i64 %t17, %t18 + %t20 = add i64 %t19, 10 + ret i64 %t20 +endif11566: + %t21 = load i8, ptr %a1 + %t22 = icmp uge i8 %t21, 65 + br label %logic.from11567 +logic.from11567: + br i1 %t22, label %logic.rhs11568, label %logic.end11569 +logic.rhs11568: + %t23 = load i8, ptr %a1 + %t24 = icmp ule i8 %t23, 70 + br label %logic.rend11570 +logic.rend11570: + br label %logic.end11569 +logic.end11569: + %t25 = phi i1 [ false, %logic.from11567 ], [ %t24, %logic.rend11570 ] + br i1 %t25, label %then11571, label %endif11573 +then11571: + %t26 = load i8, ptr %a1 + %t27 = zext i8 %t26 to i64 + %t28 = zext i8 65 to i64 + %t29 = sub i64 %t27, %t28 + %t30 = add i64 %t29, 10 + ret i64 %t30 +endif11573: + ret i64 -1 +} + +define internal { ptr, i64, i64 } @finch.json.utf8(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = icmp slt i64 %t3, 128 + br i1 %t4, label %then11574, label %else11575 +then11574: + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t6 = load i64, ptr %a1 + %t7 = trunc i64 %t6 to i8 + %t8 = load i64, ptr %t5 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t9, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a2 + %t11 = getelementptr inbounds i8, ptr %t10, i64 %t8 + store i8 %t7, ptr %t11 + store i64 %t9, ptr %t5 + br label %endif11576 +else11575: + %t12 = load i64, ptr %a1 + %t13 = icmp slt i64 %t12, 2048 + br i1 %t13, label %then11577, label %else11578 +then11577: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t15 = load i64, ptr %a1 + %t16 = sdiv i64 %t15, 64 + %t17 = add i64 192, %t16 + %t18 = trunc i64 %t17 to i8 + %t19 = load i64, ptr %t14 + %t20 = add i64 %t19, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t20, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t21 = load ptr, ptr %a2 + %t22 = getelementptr inbounds i8, ptr %t21, i64 %t19 + store i8 %t18, ptr %t22 + store i64 %t20, ptr %t14 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t24 = load i64, ptr %a1 + %t25 = srem i64 %t24, 64 + %t26 = add i64 128, %t25 + %t27 = trunc i64 %t26 to i8 + %t28 = load i64, ptr %t23 + %t29 = add i64 %t28, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t29, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t30 = load ptr, ptr %a2 + %t31 = getelementptr inbounds i8, ptr %t30, i64 %t28 + store i8 %t27, ptr %t31 + store i64 %t29, ptr %t23 + br label %endif11579 +else11578: + %t32 = load i64, ptr %a1 + %t33 = icmp slt i64 %t32, 65536 + br i1 %t33, label %then11580, label %else11581 +then11580: + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t35 = load i64, ptr %a1 + %t36 = sdiv i64 %t35, 4096 + %t37 = add i64 224, %t36 + %t38 = trunc i64 %t37 to i8 + %t39 = load i64, ptr %t34 + %t40 = add i64 %t39, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t40, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t41 = load ptr, ptr %a2 + %t42 = getelementptr inbounds i8, ptr %t41, i64 %t39 + store i8 %t38, ptr %t42 + store i64 %t40, ptr %t34 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t44 = load i64, ptr %a1 + %t45 = sdiv i64 %t44, 64 + %t46 = srem i64 %t45, 64 + %t47 = add i64 128, %t46 + %t48 = trunc i64 %t47 to i8 + %t49 = load i64, ptr %t43 + %t50 = add i64 %t49, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t50, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t51 = load ptr, ptr %a2 + %t52 = getelementptr inbounds i8, ptr %t51, i64 %t49 + store i8 %t48, ptr %t52 + store i64 %t50, ptr %t43 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t54 = load i64, ptr %a1 + %t55 = srem i64 %t54, 64 + %t56 = add i64 128, %t55 + %t57 = trunc i64 %t56 to i8 + %t58 = load i64, ptr %t53 + %t59 = add i64 %t58, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t59, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t60 = load ptr, ptr %a2 + %t61 = getelementptr inbounds i8, ptr %t60, i64 %t58 + store i8 %t57, ptr %t61 + store i64 %t59, ptr %t53 + br label %endif11582 +else11581: + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t63 = load i64, ptr %a1 + %t64 = sdiv i64 %t63, 262144 + %t65 = add i64 240, %t64 + %t66 = trunc i64 %t65 to i8 + %t67 = load i64, ptr %t62 + %t68 = add i64 %t67, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t68, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t69 = load ptr, ptr %a2 + %t70 = getelementptr inbounds i8, ptr %t69, i64 %t67 + store i8 %t66, ptr %t70 + store i64 %t68, ptr %t62 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t72 = load i64, ptr %a1 + %t73 = sdiv i64 %t72, 4096 + %t74 = srem i64 %t73, 64 + %t75 = add i64 128, %t74 + %t76 = trunc i64 %t75 to i8 + %t77 = load i64, ptr %t71 + %t78 = add i64 %t77, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t78, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t79 = load ptr, ptr %a2 + %t80 = getelementptr inbounds i8, ptr %t79, i64 %t77 + store i8 %t76, ptr %t80 + store i64 %t78, ptr %t71 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t82 = load i64, ptr %a1 + %t83 = sdiv i64 %t82, 64 + %t84 = srem i64 %t83, 64 + %t85 = add i64 128, %t84 + %t86 = trunc i64 %t85 to i8 + %t87 = load i64, ptr %t81 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t88, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %a2 + %t90 = getelementptr inbounds i8, ptr %t89, i64 %t87 + store i8 %t86, ptr %t90 + store i64 %t88, ptr %t81 + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t92 = load i64, ptr %a1 + %t93 = srem i64 %t92, 64 + %t94 = add i64 128, %t93 + %t95 = trunc i64 %t94 to i8 + %t96 = load i64, ptr %t91 + %t97 = add i64 %t96, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t97, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t98 = load ptr, ptr %a2 + %t99 = getelementptr inbounds i8, ptr %t98, i64 %t96 + store i8 %t95, ptr %t99 + store i64 %t97, ptr %t91 + br label %endif11582 +endif11582: + br label %endif11579 +endif11579: + br label %endif11576 +endif11576: + %t100 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } zeroinitializer, ptr %a101 + store { ptr, i64, i64 } %t100, ptr %a102 + call void @finch_str_from_bytes(ptr %a101, ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a101 + call void @finch.drop.arr_u8(ptr %a2) + ret { ptr, i64, i64 } %t103 +} + +define internal { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 0, ptr %a2 + store i64 0, ptr %a3 + br label %for.cond11583 +for.cond11583: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, 4 + br i1 %t5, label %for.body11584, label %for.end11586 +for.body11584: + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11587, label %ok11588 +panic11587: + call void @finch_panic(ptr @.str.7395, i64 348, ptr @.str.7396) + unreachable +ok11588: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic11589, label %ok11590 +panic11589: + call void @finch_panic(ptr @.str.7397, i64 348, ptr @.str.7398) + unreachable +ok11590: + %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sge i64 %t9, %t14 + br label %logic.from11591 +logic.from11591: + br i1 %t15, label %logic.end11593, label %logic.rhs11592 +logic.rhs11592: + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic11594, label %ok11595 +panic11594: + call void @finch_panic(ptr @.str.7399, i64 348, ptr @.str.7400) + unreachable +ok11595: + %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic11596, label %ok11597 +panic11596: + call void @finch_panic(ptr @.str.7401, i64 348, ptr @.str.7402) + unreachable +ok11597: + %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %t18 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 %t22, %t24 + br i1 %t25, label %range11598, label %inrange11599 +range11598: + call void @finch_panic_index(ptr @.str.7403, i64 348, i64 %t22, i64 %t24) + unreachable +inrange11599: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds i8, ptr %t26, i64 %t22 + %t28 = load i8, ptr %t27 + %t29 = call i64 @finch.json.hex_value(i8 %t28) + %t30 = icmp slt i64 %t29, 0 + br label %logic.rend11600 +logic.rend11600: + br label %logic.end11593 +logic.end11593: + %t31 = phi i1 [ true, %logic.from11591 ], [ %t30, %logic.rend11600 ] + br i1 %t31, label %then11601, label %endif11603 +then11601: + %t32 = load ptr, ptr %a1 + %t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.7404, i64 19, i64 0 }) + %t34 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t33, 2 + ret { i1, i64, { ptr, i64, i64 } } %t34 +endif11603: + %t35 = load i64, ptr %a2 + %t36 = mul i64 %t35, 16 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic11604, label %ok11605 +panic11604: + call void @finch_panic(ptr @.str.7405, i64 351, ptr @.str.7406) + unreachable +ok11605: + %t39 = getelementptr inbounds %S.json.Reader, ptr %t37, i32 0, i32 0 + %t40 = load ptr, ptr %a1 + %t41 = icmp eq ptr %t40, null + br i1 %t41, label %panic11606, label %ok11607 +panic11606: + call void @finch_panic(ptr @.str.7407, i64 351, ptr @.str.7408) + unreachable +ok11607: + %t42 = getelementptr inbounds %S.json.Reader, ptr %t40, i32 0, i32 1 + %t43 = load i64, ptr %t42 + %t44 = load { ptr, i64, i64 }, ptr %t39 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 %t43, %t45 + br i1 %t46, label %range11608, label %inrange11609 +range11608: + call void @finch_panic_index(ptr @.str.7409, i64 351, i64 %t43, i64 %t45) + unreachable +inrange11609: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 + %t49 = load i8, ptr %t48 + %t50 = call i64 @finch.json.hex_value(i8 %t49) + %t51 = add i64 %t36, %t50 + store i64 %t51, ptr %a2 + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic11610, label %ok11611 +panic11610: + call void @finch_panic(ptr @.str.7410, i64 352, ptr @.str.7411) + unreachable +ok11611: + %t54 = getelementptr inbounds %S.json.Reader, ptr %t52, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = add i64 %t55, 1 + store i64 %t56, ptr %t54 + br label %for.step11585 +for.step11585: + %t57 = load i64, ptr %a3 + %t58 = add i64 %t57, 1 + store i64 %t58, ptr %a3 + br label %for.cond11583 +for.end11586: + %t59 = load i64, ptr %a2 + %t60 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t61 = insertvalue { i1, i64, { ptr, i64, i64 } } %t60, i64 %t59, 1 + ret { i1, i64, { ptr, i64, i64 } } %t61 +} + +define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i8, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca i8, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca i64, align 16 + %a216 = alloca i64, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11612, label %ok11613 +panic11612: + call void @finch_panic(ptr @.str.7412, i64 358, ptr @.str.7413) + unreachable +ok11613: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = add i64 %t5, 1 + store i64 %t6, ptr %t4 + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic11614, label %ok11615 +panic11614: + call void @finch_panic(ptr @.str.7414, i64 360, ptr @.str.7415) + unreachable +ok11615: + %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 + %t11 = load i64, ptr %t10 + store i64 %t11, ptr %a12 + br label %while.cond11616 +while.cond11616: + br label %while.body11617 +while.body11617: + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic11619, label %ok11620 +panic11619: + call void @finch_panic(ptr @.str.7416, i64 362, ptr @.str.7417) + unreachable +ok11620: + %t15 = getelementptr inbounds %S.json.Reader, ptr %t13, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic11621, label %ok11622 +panic11621: + call void @finch_panic(ptr @.str.7418, i64 362, ptr @.str.7419) + unreachable +ok11622: + %t19 = getelementptr inbounds %S.json.Reader, ptr %t17, i32 0, i32 0 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load i64, ptr %t20 + %t22 = icmp sge i64 %t16, %t21 + br i1 %t22, label %then11623, label %endif11625 +then11623: + %t23 = load ptr, ptr %a1 + %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) + store { ptr, i64, i64 } { ptr @.str.7420, i64 30, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.7421, i64 1, i64 0 }, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + call void @finch.drop.arr_str(ptr %a7) + %t35 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t34, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t35 +endif11625: + %t36 = load ptr, ptr %a1 + %t37 = icmp eq ptr %t36, null + br i1 %t37, label %panic11626, label %ok11627 +panic11626: + call void @finch_panic(ptr @.str.7422, i64 365, ptr @.str.7423) + unreachable +ok11627: + %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic11628, label %ok11629 +panic11628: + call void @finch_panic(ptr @.str.7424, i64 365, ptr @.str.7425) + unreachable +ok11629: + %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = load { ptr, i64, i64 }, ptr %t38 + %t44 = extractvalue { ptr, i64, i64 } %t43, 1 + %t45 = icmp uge i64 %t42, %t44 + br i1 %t45, label %range11630, label %inrange11631 +range11630: + call void @finch_panic_index(ptr @.str.7426, i64 365, i64 %t42, i64 %t44) + unreachable +inrange11631: + %t46 = extractvalue { ptr, i64, i64 } %t43, 0 + %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 + %t48 = load i8, ptr %t47 + store i8 %t48, ptr %a49 + %t50 = load i8, ptr %a49 + %t51 = icmp eq i8 %t50, 34 + br i1 %t51, label %then11632, label %endif11634 +then11632: + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t53 = load ptr, ptr %a1 + %t54 = icmp eq ptr %t53, null + br i1 %t54, label %panic11635, label %ok11636 +panic11635: + call void @finch_panic(ptr @.str.7427, i64 367, ptr @.str.7428) + unreachable +ok11636: + %t55 = getelementptr inbounds %S.json.Reader, ptr %t53, i32 0, i32 0 + %t56 = load { ptr, i64, i64 }, ptr %t55 + store { ptr, i64, i64 } %t56, ptr %a57 + %t59 = load i64, ptr %a12 + %t60 = load ptr, ptr %a1 + %t61 = icmp eq ptr %t60, null + br i1 %t61, label %panic11637, label %ok11638 +panic11637: + call void @finch_panic(ptr @.str.7430, i64 367, ptr @.str.7431) + unreachable +ok11638: + %t62 = getelementptr inbounds %S.json.Reader, ptr %t60, i32 0, i32 1 + %t63 = load i64, ptr %t62 + call void @finch_str_sub(ptr %a58, ptr %a57, i64 %t59, i64 %t63, ptr @.str.7429, i64 367) + %t64 = load { ptr, i64, i64 }, ptr %a58 + %t65 = load i64, ptr %t52 + %t66 = add i64 %t65, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t66, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t67 = load ptr, ptr %a7 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i64 %t65 + store { ptr, i64, i64 } %t64, ptr %t68 + store i64 %t66, ptr %t52 + %t69 = load ptr, ptr %a1 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic11639, label %ok11640 +panic11639: + call void @finch_panic(ptr @.str.7432, i64 368, ptr @.str.7433) + unreachable +ok11640: + %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 1 + %t72 = load i64, ptr %t71 + %t73 = add i64 %t72, 1 + store i64 %t73, ptr %t71 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7434, i64 0, i64 0 }, ptr %a75 + call void @finch_str_join(ptr %a76, ptr %a7, ptr %a75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + call void @finch.drop.arr_str(ptr %a7) + %t78 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t79 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t78, { ptr, i64, i64 } %t77, 1 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t79 +endif11634: + %t80 = load i8, ptr %a49 + %t81 = zext i8 %t80 to i64 + %t82 = icmp slt i64 %t81, 32 + br i1 %t82, label %then11641, label %endif11643 +then11641: + %t83 = load ptr, ptr %a1 + %t84 = call { ptr, i64, i64 } @finch.json.where(ptr %t83) + store { ptr, i64, i64 } { ptr @.str.7435, i64 55, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.7436, i64 1, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.drop.arr_str(ptr %a7) + %t95 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t94, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t95 +endif11643: + %t96 = load i8, ptr %a49 + %t97 = icmp ne i8 %t96, 92 + br i1 %t97, label %then11644, label %endif11646 +then11644: + %t98 = load ptr, ptr %a1 + %t99 = icmp eq ptr %t98, null + br i1 %t99, label %panic11647, label %ok11648 +panic11647: + call void @finch_panic(ptr @.str.7437, i64 375, ptr @.str.7438) + unreachable +ok11648: + %t100 = getelementptr inbounds %S.json.Reader, ptr %t98, i32 0, i32 1 + %t101 = load i64, ptr %t100 + %t102 = add i64 %t101, 1 + store i64 %t102, ptr %t100 + br label %while.cond11616 +endif11646: + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic11649, label %ok11650 +panic11649: + call void @finch_panic(ptr @.str.7439, i64 378, ptr @.str.7440) + unreachable +ok11650: + %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a108 + %t110 = load i64, ptr %a12 + %t111 = load ptr, ptr %a1 + %t112 = icmp eq ptr %t111, null + br i1 %t112, label %panic11651, label %ok11652 +panic11651: + call void @finch_panic(ptr @.str.7442, i64 378, ptr @.str.7443) + unreachable +ok11652: + %t113 = getelementptr inbounds %S.json.Reader, ptr %t111, i32 0, i32 1 + %t114 = load i64, ptr %t113 + call void @finch_str_sub(ptr %a109, ptr %a108, i64 %t110, i64 %t114, ptr @.str.7441, i64 378) + %t115 = load { ptr, i64, i64 }, ptr %a109 + %t116 = load i64, ptr %t103 + %t117 = add i64 %t116, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t117, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t118 = load ptr, ptr %a7 + %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t118, i64 %t116 + store { ptr, i64, i64 } %t115, ptr %t119 + store i64 %t117, ptr %t103 + %t120 = load ptr, ptr %a1 + %t121 = icmp eq ptr %t120, null + br i1 %t121, label %panic11653, label %ok11654 +panic11653: + call void @finch_panic(ptr @.str.7444, i64 379, ptr @.str.7445) + unreachable +ok11654: + %t122 = getelementptr inbounds %S.json.Reader, ptr %t120, i32 0, i32 1 + %t123 = load i64, ptr %t122 + %t124 = add i64 %t123, 1 + store i64 %t124, ptr %t122 + %t125 = load ptr, ptr %a1 + %t126 = call i8 @finch.json.peek(ptr %t125) + store i8 %t126, ptr %a127 + %t128 = load ptr, ptr %a1 + %t129 = icmp eq ptr %t128, null + br i1 %t129, label %panic11655, label %ok11656 +panic11655: + call void @finch_panic(ptr @.str.7446, i64 381, ptr @.str.7447) + unreachable +ok11656: + %t130 = getelementptr inbounds %S.json.Reader, ptr %t128, i32 0, i32 1 + %t131 = load i64, ptr %t130 + %t132 = add i64 %t131, 1 + store i64 %t132, ptr %t130 + %t133 = load i8, ptr %a127 + %t134 = icmp eq i8 %t133, 110 + br i1 %t134, label %then11657, label %else11658 +then11657: + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = add i64 %t136, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t137, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t138 = load ptr, ptr %a7 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i64 %t136 + store { ptr, i64, i64 } { ptr @.str.7448, i64 1, i64 0 }, ptr %t139 + store i64 %t137, ptr %t135 + br label %endif11659 +else11658: + %t140 = load i8, ptr %a127 + %t141 = icmp eq i8 %t140, 116 + br i1 %t141, label %then11660, label %else11661 +then11660: + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t143 = load i64, ptr %t142 + %t144 = add i64 %t143, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t144, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t145 = load ptr, ptr %a7 + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 %t143 + store { ptr, i64, i64 } { ptr @.str.7449, i64 1, i64 0 }, ptr %t146 + store i64 %t144, ptr %t142 + br label %endif11662 +else11661: + %t147 = load i8, ptr %a127 + %t148 = icmp eq i8 %t147, 114 + br i1 %t148, label %then11663, label %else11664 +then11663: + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t150 = load i64, ptr %t149 + %t151 = add i64 %t150, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t151, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t152 = load ptr, ptr %a7 + %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i64 %t150 + store { ptr, i64, i64 } { ptr @.str.7450, i64 1, i64 0 }, ptr %t153 + store i64 %t151, ptr %t149 + br label %endif11665 +else11664: + %t154 = load i8, ptr %a127 + %t155 = icmp eq i8 %t154, 98 + br i1 %t155, label %then11666, label %else11667 +then11666: + %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t157 = call { ptr, i64, i64 } @finch.json.utf8(i64 8) + %t158 = load i64, ptr %t156 + %t159 = add i64 %t158, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t159, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t160 = load ptr, ptr %a7 + %t161 = getelementptr inbounds { ptr, i64, i64 }, ptr %t160, i64 %t158 + store { ptr, i64, i64 } %t157, ptr %t161 + store i64 %t159, ptr %t156 + br label %endif11668 +else11667: + %t162 = load i8, ptr %a127 + %t163 = icmp eq i8 %t162, 102 + br i1 %t163, label %then11669, label %else11670 +then11669: + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t165 = call { ptr, i64, i64 } @finch.json.utf8(i64 12) + %t166 = load i64, ptr %t164 + %t167 = add i64 %t166, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t167, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t168 = load ptr, ptr %a7 + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t168, i64 %t166 + store { ptr, i64, i64 } %t165, ptr %t169 + store i64 %t167, ptr %t164 + br label %endif11671 +else11670: + %t170 = load i8, ptr %a127 + %t171 = icmp eq i8 %t170, 34 + br label %logic.from11672 +logic.from11672: + br i1 %t171, label %logic.end11674, label %logic.rhs11673 +logic.rhs11673: + %t172 = load i8, ptr %a127 + %t173 = icmp eq i8 %t172, 92 + br label %logic.rend11675 +logic.rend11675: + br label %logic.end11674 +logic.end11674: + %t174 = phi i1 [ true, %logic.from11672 ], [ %t173, %logic.rend11675 ] + br label %logic.from11676 +logic.from11676: + br i1 %t174, label %logic.end11678, label %logic.rhs11677 +logic.rhs11677: + %t175 = load i8, ptr %a127 + %t176 = icmp eq i8 %t175, 47 + br label %logic.rend11679 +logic.rend11679: + br label %logic.end11678 +logic.end11678: + %t177 = phi i1 [ true, %logic.from11676 ], [ %t176, %logic.rend11679 ] + br i1 %t177, label %then11680, label %else11681 +then11680: + %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t179 = load i8, ptr %a127 + call void @finch_str_from_char(ptr %a180, i8 signext %t179) + %t181 = load { ptr, i64, i64 }, ptr %a180 + %t182 = load i64, ptr %t178 + %t183 = add i64 %t182, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t183, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t184 = load ptr, ptr %a7 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 + store { ptr, i64, i64 } %t181, ptr %t185 + store i64 %t183, ptr %t178 + br label %endif11682 +else11681: + %t186 = load i8, ptr %a127 + %t187 = icmp eq i8 %t186, 117 + br i1 %t187, label %then11683, label %else11684 +then11683: + %t188 = load ptr, ptr %a1 + %t189 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t188) + %t190 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 0 + %t191 = xor i1 %t190, true + %t192 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 2 + %t193 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 1 + br i1 %t191, label %try.failed11686, label %try.ok11687 +try.failed11686: + call void @finch.drop.arr_str(ptr %a7) + %t194 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t192, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t194 +try.ok11687: + store i64 %t193, ptr %a195 + %t196 = load i64, ptr %a195 + %t197 = icmp sge i64 %t196, 55296 + br label %logic.from11688 +logic.from11688: + br i1 %t197, label %logic.rhs11689, label %logic.end11690 +logic.rhs11689: + %t198 = load i64, ptr %a195 + %t199 = icmp slt i64 %t198, 56320 + br label %logic.rend11691 +logic.rend11691: + br label %logic.end11690 +logic.end11690: + %t200 = phi i1 [ false, %logic.from11688 ], [ %t199, %logic.rend11691 ] + br label %logic.from11692 +logic.from11692: + br i1 %t200, label %logic.rhs11693, label %logic.end11694 +logic.rhs11693: + %t201 = load ptr, ptr %a1 + %t202 = call i1 @finch.json.comes(ptr %t201, { ptr, i64, i64 } { ptr @.str.7451, i64 2, i64 0 }) + br label %logic.rend11695 +logic.rend11695: + br label %logic.end11694 +logic.end11694: + %t203 = phi i1 [ false, %logic.from11692 ], [ %t202, %logic.rend11695 ] + br i1 %t203, label %then11696, label %endif11698 +then11696: + %t204 = load ptr, ptr %a1 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic11699, label %ok11700 +panic11699: + call void @finch_panic(ptr @.str.7452, i64 398, ptr @.str.7453) + unreachable +ok11700: + %t206 = getelementptr inbounds %S.json.Reader, ptr %t204, i32 0, i32 1 + %t207 = load i64, ptr %t206 + %t208 = add i64 %t207, 2 + store i64 %t208, ptr %t206 + %t209 = load ptr, ptr %a1 + %t210 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t209) + %t211 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 0 + %t212 = xor i1 %t211, true + %t213 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 2 + %t214 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 1 + br i1 %t212, label %try.failed11701, label %try.ok11702 +try.failed11701: + call void @finch.drop.arr_str(ptr %a7) + %t215 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t213, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t215 +try.ok11702: + store i64 %t214, ptr %a216 + %t217 = load i64, ptr %a195 + %t218 = sub i64 %t217, 55296 + %t219 = mul i64 %t218, 1024 + %t220 = add i64 65536, %t219 + %t221 = load i64, ptr %a216 + %t222 = sub i64 %t221, 56320 + %t223 = add i64 %t220, %t222 + store i64 %t223, ptr %a195 + br label %endif11698 +endif11698: + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t225 = load i64, ptr %a195 + %t226 = call { ptr, i64, i64 } @finch.json.utf8(i64 %t225) + %t227 = load i64, ptr %t224 + %t228 = add i64 %t227, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t228, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t229 = load ptr, ptr %a7 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i64 %t227 + store { ptr, i64, i64 } %t226, ptr %t230 + store i64 %t228, ptr %t224 + br label %endif11685 +else11684: + %t231 = load i8, ptr %a127 + call void @finch_str_from_char(ptr %a232, i8 signext %t231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.7454, i64 22, i64 0 }, ptr %a235 + store { ptr, i64, i64 } %t233, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + store { ptr, i64, i64 } %t238, ptr %a240 + store { ptr, i64, i64 } { ptr @.str.7455, i64 12, i64 0 }, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t238, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + %t244 = load ptr, ptr %a1 + %t245 = call { ptr, i64, i64 } @finch.json.where(ptr %t244) + store { ptr, i64, i64 } %t243, ptr %a247 + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t243, ptr %a249 + call void @finch_str_drop(ptr %a249) + store { ptr, i64, i64 } %t245, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.7456, i64 1, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + call void @finch.drop.arr_str(ptr %a7) + %t257 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t256, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t257 +endif11685: + br label %endif11682 +endif11682: + br label %endif11671 +endif11671: + br label %endif11668 +endif11668: + br label %endif11665 +endif11665: + br label %endif11662 +endif11662: + br label %endif11659 +endif11659: + %t258 = load ptr, ptr %a1 + %t259 = icmp eq ptr %t258, null + br i1 %t259, label %panic11703, label %ok11704 +panic11703: + call void @finch_panic(ptr @.str.7457, i64 406, ptr @.str.7458) + unreachable +ok11704: + %t260 = getelementptr inbounds %S.json.Reader, ptr %t258, i32 0, i32 1 + %t261 = load i64, ptr %t260 + store i64 %t261, ptr %a12 + br label %while.cond11616 +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca i64, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca double, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca double, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11705, label %ok11706 +panic11705: + call void @finch_panic(ptr @.str.7459, i64 411, ptr @.str.7460) + unreachable +ok11706: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + store i64 %t5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = call i8 @finch.json.peek(ptr %t7) + %t9 = icmp eq i8 %t8, 45 + br i1 %t9, label %then11707, label %endif11709 +then11707: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic11710, label %ok11711 +panic11710: + call void @finch_panic(ptr @.str.7461, i64 413, ptr @.str.7462) + unreachable +ok11711: + %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + store i64 %t14, ptr %t12 + br label %endif11709 +endif11709: + br label %while.cond11712 +while.cond11712: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic11715, label %ok11716 +panic11715: + call void @finch_panic(ptr @.str.7463, i64 415, ptr @.str.7464) + unreachable +ok11716: + %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic11717, label %ok11718 +panic11717: + call void @finch_panic(ptr @.str.7465, i64 415, ptr @.str.7466) + unreachable +ok11718: + %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 0 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = icmp slt i64 %t18, %t23 + br label %logic.from11719 +logic.from11719: + br i1 %t24, label %logic.rhs11720, label %logic.end11721 +logic.rhs11720: + %t25 = load ptr, ptr %a1 + %t26 = icmp eq ptr %t25, null + br i1 %t26, label %panic11722, label %ok11723 +panic11722: + call void @finch_panic(ptr @.str.7467, i64 415, ptr @.str.7468) + unreachable +ok11723: + %t27 = getelementptr inbounds %S.json.Reader, ptr %t25, i32 0, i32 0 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic11724, label %ok11725 +panic11724: + call void @finch_panic(ptr @.str.7469, i64 415, ptr @.str.7470) + unreachable +ok11725: + %t30 = getelementptr inbounds %S.json.Reader, ptr %t28, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = load { ptr, i64, i64 }, ptr %t27 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range11726, label %inrange11727 +range11726: + call void @finch_panic_index(ptr @.str.7471, i64 415, i64 %t31, i64 %t33) + unreachable +inrange11727: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds i8, ptr %t35, i64 %t31 + %t37 = load i8, ptr %t36 + %t38 = icmp uge i8 %t37, 48 + br label %logic.from11728 +logic.from11728: + br i1 %t38, label %logic.rhs11729, label %logic.end11730 +logic.rhs11729: + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic11731, label %ok11732 +panic11731: + call void @finch_panic(ptr @.str.7472, i64 415, ptr @.str.7473) + unreachable +ok11732: + %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 0 + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic11733, label %ok11734 +panic11733: + call void @finch_panic(ptr @.str.7474, i64 415, ptr @.str.7475) + unreachable +ok11734: + %t44 = getelementptr inbounds %S.json.Reader, ptr %t42, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = load { ptr, i64, i64 }, ptr %t41 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 %t45, %t47 + br i1 %t48, label %range11735, label %inrange11736 +range11735: + call void @finch_panic_index(ptr @.str.7476, i64 415, i64 %t45, i64 %t47) + unreachable +inrange11736: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds i8, ptr %t49, i64 %t45 + %t51 = load i8, ptr %t50 + %t52 = icmp ule i8 %t51, 57 + br label %logic.rend11737 +logic.rend11737: + br label %logic.end11730 +logic.end11730: + %t53 = phi i1 [ false, %logic.from11728 ], [ %t52, %logic.rend11737 ] + br label %logic.from11738 +logic.from11738: + br i1 %t53, label %logic.end11740, label %logic.rhs11739 +logic.rhs11739: + %t54 = load ptr, ptr %a1 + %t55 = icmp eq ptr %t54, null + br i1 %t55, label %panic11741, label %ok11742 +panic11741: + call void @finch_panic(ptr @.str.7477, i64 415, ptr @.str.7478) + unreachable +ok11742: + %t56 = getelementptr inbounds %S.json.Reader, ptr %t54, i32 0, i32 0 + %t57 = load ptr, ptr %a1 + %t58 = icmp eq ptr %t57, null + br i1 %t58, label %panic11743, label %ok11744 +panic11743: + call void @finch_panic(ptr @.str.7479, i64 415, ptr @.str.7480) + unreachable +ok11744: + %t59 = getelementptr inbounds %S.json.Reader, ptr %t57, i32 0, i32 1 + %t60 = load i64, ptr %t59 + %t61 = load { ptr, i64, i64 }, ptr %t56 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 %t60, %t62 + br i1 %t63, label %range11745, label %inrange11746 +range11745: + call void @finch_panic_index(ptr @.str.7481, i64 415, i64 %t60, i64 %t62) + unreachable +inrange11746: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 + %t66 = load i8, ptr %t65 + %t67 = icmp eq i8 %t66, 46 + br label %logic.rend11747 +logic.rend11747: + br label %logic.end11740 +logic.end11740: + %t68 = phi i1 [ true, %logic.from11738 ], [ %t67, %logic.rend11747 ] + br label %logic.from11748 +logic.from11748: + br i1 %t68, label %logic.end11750, label %logic.rhs11749 +logic.rhs11749: + %t69 = load ptr, ptr %a1 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic11751, label %ok11752 +panic11751: + call void @finch_panic(ptr @.str.7482, i64 415, ptr @.str.7483) + unreachable +ok11752: + %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 0 + %t72 = load ptr, ptr %a1 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic11753, label %ok11754 +panic11753: + call void @finch_panic(ptr @.str.7484, i64 415, ptr @.str.7485) + unreachable +ok11754: + %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = load { ptr, i64, i64 }, ptr %t71 + %t77 = extractvalue { ptr, i64, i64 } %t76, 1 + %t78 = icmp uge i64 %t75, %t77 + br i1 %t78, label %range11755, label %inrange11756 +range11755: + call void @finch_panic_index(ptr @.str.7486, i64 415, i64 %t75, i64 %t77) + unreachable +inrange11756: + %t79 = extractvalue { ptr, i64, i64 } %t76, 0 + %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 + %t81 = load i8, ptr %t80 + %t82 = icmp eq i8 %t81, 101 + br label %logic.rend11757 +logic.rend11757: + br label %logic.end11750 +logic.end11750: + %t83 = phi i1 [ true, %logic.from11748 ], [ %t82, %logic.rend11757 ] + br label %logic.from11758 +logic.from11758: + br i1 %t83, label %logic.end11760, label %logic.rhs11759 +logic.rhs11759: + %t84 = load ptr, ptr %a1 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic11761, label %ok11762 +panic11761: + call void @finch_panic(ptr @.str.7487, i64 415, ptr @.str.7488) + unreachable +ok11762: + %t86 = getelementptr inbounds %S.json.Reader, ptr %t84, i32 0, i32 0 + %t87 = load ptr, ptr %a1 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic11763, label %ok11764 +panic11763: + call void @finch_panic(ptr @.str.7489, i64 415, ptr @.str.7490) + unreachable +ok11764: + %t89 = getelementptr inbounds %S.json.Reader, ptr %t87, i32 0, i32 1 + %t90 = load i64, ptr %t89 + %t91 = load { ptr, i64, i64 }, ptr %t86 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 %t90, %t92 + br i1 %t93, label %range11765, label %inrange11766 +range11765: + call void @finch_panic_index(ptr @.str.7491, i64 415, i64 %t90, i64 %t92) + unreachable +inrange11766: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds i8, ptr %t94, i64 %t90 + %t96 = load i8, ptr %t95 + %t97 = icmp eq i8 %t96, 69 + br label %logic.rend11767 +logic.rend11767: + br label %logic.end11760 +logic.end11760: + %t98 = phi i1 [ true, %logic.from11758 ], [ %t97, %logic.rend11767 ] + br label %logic.from11768 +logic.from11768: + br i1 %t98, label %logic.end11770, label %logic.rhs11769 +logic.rhs11769: + %t99 = load ptr, ptr %a1 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic11771, label %ok11772 +panic11771: + call void @finch_panic(ptr @.str.7492, i64 415, ptr @.str.7493) + unreachable +ok11772: + %t101 = getelementptr inbounds %S.json.Reader, ptr %t99, i32 0, i32 0 + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic11773, label %ok11774 +panic11773: + call void @finch_panic(ptr @.str.7494, i64 415, ptr @.str.7495) + unreachable +ok11774: + %t104 = getelementptr inbounds %S.json.Reader, ptr %t102, i32 0, i32 1 + %t105 = load i64, ptr %t104 + %t106 = load { ptr, i64, i64 }, ptr %t101 + %t107 = extractvalue { ptr, i64, i64 } %t106, 1 + %t108 = icmp uge i64 %t105, %t107 + br i1 %t108, label %range11775, label %inrange11776 +range11775: + call void @finch_panic_index(ptr @.str.7496, i64 415, i64 %t105, i64 %t107) + unreachable +inrange11776: + %t109 = extractvalue { ptr, i64, i64 } %t106, 0 + %t110 = getelementptr inbounds i8, ptr %t109, i64 %t105 + %t111 = load i8, ptr %t110 + %t112 = icmp eq i8 %t111, 43 + br label %logic.rend11777 +logic.rend11777: + br label %logic.end11770 +logic.end11770: + %t113 = phi i1 [ true, %logic.from11768 ], [ %t112, %logic.rend11777 ] + br label %logic.from11778 +logic.from11778: + br i1 %t113, label %logic.end11780, label %logic.rhs11779 +logic.rhs11779: + %t114 = load ptr, ptr %a1 + %t115 = icmp eq ptr %t114, null + br i1 %t115, label %panic11781, label %ok11782 +panic11781: + call void @finch_panic(ptr @.str.7497, i64 415, ptr @.str.7498) + unreachable +ok11782: + %t116 = getelementptr inbounds %S.json.Reader, ptr %t114, i32 0, i32 0 + %t117 = load ptr, ptr %a1 + %t118 = icmp eq ptr %t117, null + br i1 %t118, label %panic11783, label %ok11784 +panic11783: + call void @finch_panic(ptr @.str.7499, i64 415, ptr @.str.7500) + unreachable +ok11784: + %t119 = getelementptr inbounds %S.json.Reader, ptr %t117, i32 0, i32 1 + %t120 = load i64, ptr %t119 + %t121 = load { ptr, i64, i64 }, ptr %t116 + %t122 = extractvalue { ptr, i64, i64 } %t121, 1 + %t123 = icmp uge i64 %t120, %t122 + br i1 %t123, label %range11785, label %inrange11786 +range11785: + call void @finch_panic_index(ptr @.str.7501, i64 415, i64 %t120, i64 %t122) + unreachable +inrange11786: + %t124 = extractvalue { ptr, i64, i64 } %t121, 0 + %t125 = getelementptr inbounds i8, ptr %t124, i64 %t120 + %t126 = load i8, ptr %t125 + %t127 = icmp eq i8 %t126, 45 + br label %logic.rend11787 +logic.rend11787: + br label %logic.end11780 +logic.end11780: + %t128 = phi i1 [ true, %logic.from11778 ], [ %t127, %logic.rend11787 ] + br label %logic.rend11788 +logic.rend11788: + br label %logic.end11721 +logic.end11721: + %t129 = phi i1 [ false, %logic.from11719 ], [ %t128, %logic.rend11788 ] + br i1 %t129, label %while.body11713, label %while.end11714 +while.body11713: + %t130 = load ptr, ptr %a1 + %t131 = icmp eq ptr %t130, null + br i1 %t131, label %panic11789, label %ok11790 +panic11789: + call void @finch_panic(ptr @.str.7502, i64 416, ptr @.str.7503) + unreachable +ok11790: + %t132 = getelementptr inbounds %S.json.Reader, ptr %t130, i32 0, i32 1 + %t133 = load i64, ptr %t132 + %t134 = add i64 %t133, 1 + store i64 %t134, ptr %t132 + br label %while.cond11712 +while.end11714: + %t135 = load ptr, ptr %a1 + %t136 = icmp eq ptr %t135, null + br i1 %t136, label %panic11791, label %ok11792 +panic11791: + call void @finch_panic(ptr @.str.7504, i64 418, ptr @.str.7505) + unreachable +ok11792: + %t137 = getelementptr inbounds %S.json.Reader, ptr %t135, i32 0, i32 0 + %t138 = load { ptr, i64, i64 }, ptr %t137 + store { ptr, i64, i64 } %t138, ptr %a139 + %t141 = load i64, ptr %a6 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic11793, label %ok11794 +panic11793: + call void @finch_panic(ptr @.str.7507, i64 418, ptr @.str.7508) + unreachable +ok11794: + %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 + %t145 = load i64, ptr %t144 + call void @finch_str_sub(ptr %a140, ptr %a139, i64 %t141, i64 %t145, ptr @.str.7506, i64 418) + %t146 = load { ptr, i64, i64 }, ptr %a140 + store { ptr, i64, i64 } zeroinitializer, ptr %a147 + store double 0.0, ptr %a148 + store { ptr, i64, i64 } %t146, ptr %a149 + %t150 = call i32 @finch_str_try_float(ptr %a149, ptr %a148, ptr %a147) + %t151 = icmp eq i32 %t150, 0 + %t152 = load { ptr, i64, i64 }, ptr %a147 + store { ptr, i64, i64 } %t146, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load double, ptr %a148 + br i1 %t151, label %or.failed11795, label %or.ok11796 +or.failed11795: + store { ptr, i64, i64 } %t152, ptr %a155 + %t156 = load i64, ptr %a6 + %t157 = load ptr, ptr %a1 + %t158 = icmp eq ptr %t157, null + br i1 %t158, label %panic11797, label %ok11798 +panic11797: + call void @finch_panic(ptr @.str.7509, i64 419, ptr @.str.7510) + unreachable +ok11798: + %t159 = getelementptr inbounds %S.json.Reader, ptr %t157, i32 0, i32 1 + store i64 %t156, ptr %t159 + %t160 = load ptr, ptr %a1 + %t161 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t160, { ptr, i64, i64 } { ptr @.str.7511, i64 8, i64 0 }) + call void @finch_str_drop(ptr %a155) + %t162 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t161, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t162 +or.ok11796: + store double %t154, ptr %a163 + %t164 = load double, ptr %a163 + %t165 = call %S.json.Json @finch.json.new_number(double %t164) + %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t167 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t166, %S.json.Json %t165, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t167 +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a5 = alloca i8, align 16 + %a22 = alloca %S.json.Json, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca %S.json.Json, align 16 + %a103 = alloca %S.json.Json, align 16 + %a128 = alloca %S.json.Json, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t2) + %t3 = load ptr, ptr %a1 + %t4 = call i8 @finch.json.peek(ptr %t3) + store i8 %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11799, label %ok11800 +panic11799: + call void @finch_panic(ptr @.str.7512, i64 428, ptr @.str.7513) + unreachable +ok11800: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic11801, label %ok11802 +panic11801: + call void @finch_panic(ptr @.str.7514, i64 428, ptr @.str.7515) + unreachable +ok11802: + %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sge i64 %t9, %t14 + br i1 %t15, label %then11803, label %endif11805 +then11803: + %t16 = load ptr, ptr %a1 + %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7516, i64 7, i64 0 }) + %t18 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t17, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t18 +endif11805: + %t19 = load i8, ptr %a5 + %t20 = icmp eq i8 %t19, 123 + br i1 %t20, label %then11806, label %endif11808 +then11806: + %t21 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t21, ptr %a22 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic11809, label %ok11810 +panic11809: + call void @finch_panic(ptr @.str.7517, i64 433, ptr @.str.7518) + unreachable +ok11810: + %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 + %t26 = load i64, ptr %t25 + %t27 = add i64 %t26, 1 + store i64 %t27, ptr %t25 + %t28 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t28) + %t29 = load ptr, ptr %a1 + %t30 = call i8 @finch.json.peek(ptr %t29) + %t31 = icmp eq i8 %t30, 125 + br i1 %t31, label %then11811, label %endif11813 +then11811: + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic11814, label %ok11815 +panic11814: + call void @finch_panic(ptr @.str.7519, i64 436, ptr @.str.7520) + unreachable +ok11815: + %t34 = getelementptr inbounds %S.json.Reader, ptr %t32, i32 0, i32 1 + %t35 = load i64, ptr %t34 + %t36 = add i64 %t35, 1 + store i64 %t36, ptr %t34 + %t37 = load %S.json.Json, ptr %a22 + %t38 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t39 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t38, %S.json.Json %t37, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t39 +endif11813: + br label %while.cond11816 +while.cond11816: + br label %while.body11817 +while.body11817: + %t40 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t40) + %t41 = load ptr, ptr %a1 + %t42 = call i8 @finch.json.peek(ptr %t41) + %t43 = icmp ne i8 %t42, 34 + br i1 %t43, label %then11819, label %endif11821 +then11819: + %t44 = load ptr, ptr %a1 + %t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7521, i64 15, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a22) + %t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t45, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46 +endif11821: + %t47 = load ptr, ptr %a1 + %t48 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t47) + %t49 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 0 + %t50 = xor i1 %t49, true + %t51 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 2 + %t52 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 1 + br i1 %t50, label %try.failed11822, label %try.ok11823 +try.failed11822: + call void @finch.drop.S_json_Json(ptr %a22) + %t53 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t51, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t53 +try.ok11823: + store { ptr, i64, i64 } %t52, ptr %a54 + %t55 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t55) + %t56 = load ptr, ptr %a1 + %t57 = call i8 @finch.json.peek(ptr %t56) + %t58 = icmp ne i8 %t57, 58 + br i1 %t58, label %then11824, label %endif11826 +then11824: + %t59 = load ptr, ptr %a1 + %t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7522, i64 3, i64 0 }) + call void @finch_str_drop(ptr %a54) + call void @finch.drop.S_json_Json(ptr %a22) + %t61 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t60, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t61 +endif11826: + %t62 = load ptr, ptr %a1 + %t63 = icmp eq ptr %t62, null + br i1 %t63, label %panic11827, label %ok11828 +panic11827: + call void @finch_panic(ptr @.str.7523, i64 449, ptr @.str.7524) + unreachable +ok11828: + %t64 = getelementptr inbounds %S.json.Reader, ptr %t62, i32 0, i32 1 + %t65 = load i64, ptr %t64 + %t66 = add i64 %t65, 1 + store i64 %t66, ptr %t64 + %t67 = load ptr, ptr %a1 + %t68 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t67) + %t69 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 0 + %t70 = xor i1 %t69, true + %t71 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 2 + %t72 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 1 + br i1 %t70, label %try.failed11829, label %try.ok11830 +try.failed11829: + call void @finch_str_drop(ptr %a54) + call void @finch.drop.S_json_Json(ptr %a22) + %t73 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t71, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t73 +try.ok11830: + store %S.json.Json %t72, ptr %a74 + %t75 = load { ptr, i64, i64 }, ptr %a54 + %t76 = load %S.json.Json, ptr %a74 + call void @finch.json.Json.set(ptr %a22, { ptr, i64, i64 } %t75, %S.json.Json %t76) + %t77 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t77) + %t78 = load ptr, ptr %a1 + %t79 = call i8 @finch.json.peek(ptr %t78) + %t80 = icmp eq i8 %t79, 44 + br i1 %t80, label %then11831, label %endif11833 +then11831: + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic11834, label %ok11835 +panic11834: + call void @finch_panic(ptr @.str.7525, i64 454, ptr @.str.7526) + unreachable +ok11835: + %t83 = getelementptr inbounds %S.json.Reader, ptr %t81, i32 0, i32 1 + %t84 = load i64, ptr %t83 + %t85 = add i64 %t84, 1 + store i64 %t85, ptr %t83 + call void @finch.drop.S_json_Json(ptr %a74) + call void @finch_str_drop(ptr %a54) + br label %while.cond11816 +endif11833: + %t86 = load ptr, ptr %a1 + %t87 = call i8 @finch.json.peek(ptr %t86) + %t88 = icmp eq i8 %t87, 125 + br i1 %t88, label %then11836, label %endif11838 +then11836: + %t89 = load ptr, ptr %a1 + %t90 = icmp eq ptr %t89, null + br i1 %t90, label %panic11839, label %ok11840 +panic11839: + call void @finch_panic(ptr @.str.7527, i64 458, ptr @.str.7528) + unreachable +ok11840: + %t91 = getelementptr inbounds %S.json.Reader, ptr %t89, i32 0, i32 1 + %t92 = load i64, ptr %t91 + %t93 = add i64 %t92, 1 + store i64 %t93, ptr %t91 + %t94 = load %S.json.Json, ptr %a22 + call void @finch.drop.S_json_Json(ptr %a74) + call void @finch_str_drop(ptr %a54) + %t95 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t96 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t95, %S.json.Json %t94, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t96 +endif11838: + %t97 = load ptr, ptr %a1 + %t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7529, i64 10, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a74) + call void @finch_str_drop(ptr %a54) + call void @finch.drop.S_json_Json(ptr %a22) + %t99 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t98, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t99 +endif11808: + %t100 = load i8, ptr %a5 + %t101 = icmp eq i8 %t100, 91 + br i1 %t101, label %then11841, label %endif11843 +then11841: + %t102 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t102, ptr %a103 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic11844, label %ok11845 +panic11844: + call void @finch_panic(ptr @.str.7530, i64 466, ptr @.str.7531) + unreachable +ok11845: + %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 1 + %t107 = load i64, ptr %t106 + %t108 = add i64 %t107, 1 + store i64 %t108, ptr %t106 + %t109 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t109) + %t110 = load ptr, ptr %a1 + %t111 = call i8 @finch.json.peek(ptr %t110) + %t112 = icmp eq i8 %t111, 93 + br i1 %t112, label %then11846, label %endif11848 +then11846: + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic11849, label %ok11850 +panic11849: + call void @finch_panic(ptr @.str.7532, i64 469, ptr @.str.7533) + unreachable +ok11850: + %t115 = getelementptr inbounds %S.json.Reader, ptr %t113, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = add i64 %t116, 1 + store i64 %t117, ptr %t115 + %t118 = load %S.json.Json, ptr %a103 + %t119 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t120 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t119, %S.json.Json %t118, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t120 +endif11848: + br label %while.cond11851 +while.cond11851: + br label %while.body11852 +while.body11852: + %t121 = load ptr, ptr %a1 + %t122 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t121) + %t123 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 0 + %t124 = xor i1 %t123, true + %t125 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 2 + %t126 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 1 + br i1 %t124, label %try.failed11854, label %try.ok11855 +try.failed11854: + call void @finch.drop.S_json_Json(ptr %a103) + %t127 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t125, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t127 +try.ok11855: + store %S.json.Json %t126, ptr %a128 + %t129 = load %S.json.Json, ptr %a128 + call void @finch.json.Json.push(ptr %a103, %S.json.Json %t129) + %t130 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t130) + %t131 = load ptr, ptr %a1 + %t132 = call i8 @finch.json.peek(ptr %t131) + %t133 = icmp eq i8 %t132, 44 + br i1 %t133, label %then11856, label %endif11858 +then11856: + %t134 = load ptr, ptr %a1 + %t135 = icmp eq ptr %t134, null + br i1 %t135, label %panic11859, label %ok11860 +panic11859: + call void @finch_panic(ptr @.str.7534, i64 477, ptr @.str.7535) + unreachable +ok11860: + %t136 = getelementptr inbounds %S.json.Reader, ptr %t134, i32 0, i32 1 + %t137 = load i64, ptr %t136 + %t138 = add i64 %t137, 1 + store i64 %t138, ptr %t136 + call void @finch.drop.S_json_Json(ptr %a128) + br label %while.cond11851 +endif11858: + %t139 = load ptr, ptr %a1 + %t140 = call i8 @finch.json.peek(ptr %t139) + %t141 = icmp eq i8 %t140, 93 + br i1 %t141, label %then11861, label %endif11863 +then11861: + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic11864, label %ok11865 +panic11864: + call void @finch_panic(ptr @.str.7536, i64 481, ptr @.str.7537) + unreachable +ok11865: + %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 + %t145 = load i64, ptr %t144 + %t146 = add i64 %t145, 1 + store i64 %t146, ptr %t144 + %t147 = load %S.json.Json, ptr %a103 + call void @finch.drop.S_json_Json(ptr %a128) + %t148 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t149 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t148, %S.json.Json %t147, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t149 +endif11863: + %t150 = load ptr, ptr %a1 + %t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7538, i64 10, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a128) + call void @finch.drop.S_json_Json(ptr %a103) + %t152 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t151, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t152 +endif11843: + %t153 = load i8, ptr %a5 + %t154 = icmp eq i8 %t153, 34 + br i1 %t154, label %then11866, label %endif11868 +then11866: + %t155 = load ptr, ptr %a1 + %t156 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t155) + %t157 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 0 + %t158 = xor i1 %t157, true + %t159 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 2 + %t160 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 1 + br i1 %t158, label %try.failed11869, label %try.ok11870 +try.failed11869: + %t161 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t159, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t161 +try.ok11870: + store { ptr, i64, i64 } %t160, ptr %a162 + %t163 = load { ptr, i64, i64 }, ptr %a162 + %t164 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t163) + call void @finch_str_drop(ptr %a162) + %t165 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t165, %S.json.Json %t164, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t166 +endif11868: + %t167 = load i8, ptr %a5 + %t168 = icmp eq i8 %t167, 116 + br i1 %t168, label %then11871, label %endif11873 +then11871: + %t169 = load ptr, ptr %a1 + %t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7539, i64 4, i64 0 }) + %t171 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 0 + %t172 = xor i1 %t171, true + %t173 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 2 + br i1 %t172, label %try.failed11874, label %try.ok11875 +try.failed11874: + %t174 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t173, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t174 +try.ok11875: + %t175 = call %S.json.Json @finch.json.new_bool(i1 true) + %t176 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t177 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t176, %S.json.Json %t175, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t177 +endif11873: + %t178 = load i8, ptr %a5 + %t179 = icmp eq i8 %t178, 102 + br i1 %t179, label %then11876, label %endif11878 +then11876: + %t180 = load ptr, ptr %a1 + %t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7540, i64 5, i64 0 }) + %t182 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 0 + %t183 = xor i1 %t182, true + %t184 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 2 + br i1 %t183, label %try.failed11879, label %try.ok11880 +try.failed11879: + %t185 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t184, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t185 +try.ok11880: + %t186 = call %S.json.Json @finch.json.new_bool(i1 false) + %t187 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t188 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t187, %S.json.Json %t186, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t188 +endif11878: + %t189 = load i8, ptr %a5 + %t190 = icmp eq i8 %t189, 110 + br i1 %t190, label %then11881, label %endif11883 +then11881: + %t191 = load ptr, ptr %a1 + %t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7541, i64 4, i64 0 }) + %t193 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 0 + %t194 = xor i1 %t193, true + %t195 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 2 + br i1 %t194, label %try.failed11884, label %try.ok11885 +try.failed11884: + %t196 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t195, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t196 +try.ok11885: + %t197 = call %S.json.Json @finch.json.new_null() + %t198 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t199 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t198, %S.json.Json %t197, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t199 +endif11883: + %t200 = load i8, ptr %a5 + %t201 = icmp eq i8 %t200, 45 + br label %logic.from11886 +logic.from11886: + br i1 %t201, label %logic.end11888, label %logic.rhs11887 +logic.rhs11887: + %t202 = load i8, ptr %a5 + %t203 = icmp uge i8 %t202, 48 + br label %logic.from11889 +logic.from11889: + br i1 %t203, label %logic.rhs11890, label %logic.end11891 +logic.rhs11890: + %t204 = load i8, ptr %a5 + %t205 = icmp ule i8 %t204, 57 + br label %logic.rend11892 +logic.rend11892: + br label %logic.end11891 +logic.end11891: + %t206 = phi i1 [ false, %logic.from11889 ], [ %t205, %logic.rend11892 ] + br label %logic.rend11893 +logic.rend11893: + br label %logic.end11888 +logic.end11888: + %t207 = phi i1 [ true, %logic.from11886 ], [ %t206, %logic.rend11893 ] + br i1 %t207, label %then11894, label %endif11896 +then11894: + %t208 = load ptr, ptr %a1 + %t209 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %t208) + %t210 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 0 + %t211 = xor i1 %t210, true + %t212 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 2 + %t213 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 1 + br i1 %t211, label %try.failed11897, label %try.ok11898 +try.failed11897: + %t214 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t212, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t214 +try.ok11898: + %t215 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t216 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t215, %S.json.Json %t213, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t216 +endif11896: + %t217 = load ptr, ptr %a1 + %t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7542, i64 7, i64 0 }) + %t219 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t218, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t219 +} + +define internal void @finch.drop.S_json_Reader(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.json.Reader, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + ret void +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca %S.json.Reader, align 16 + %a14 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.json.Reader zeroinitializer, { ptr, i64, i64 } %t5, 0 + store %S.json.Reader %t6, ptr %a7 + %t8 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %a7) + %t9 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 0 + %t10 = xor i1 %t9, true + %t11 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 2 + %t12 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 1 + br i1 %t10, label %try.failed11899, label %try.ok11900 +try.failed11899: + call void @finch.drop.S_json_Reader(ptr %a7) + %t13 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t11, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t13 +try.ok11900: + store %S.json.Json %t12, ptr %a14 + call void @finch.json.skip_space(ptr %a7) + %t15 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 0 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp slt i64 %t16, %t19 + br i1 %t20, label %then11901, label %endif11903 +then11901: + %t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7543, i64 19, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a14) + call void @finch.drop.S_json_Reader(ptr %a7) + %t22 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t21, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t22 +endif11903: + %t23 = load %S.json.Json, ptr %a14 + call void @finch.drop.S_json_Reader(ptr %a7) + %t24 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t25 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, %S.json.Json %t23, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t25 +} + +define internal { ptr, i64, i64 } @finch.embedded.names() { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } zeroinitializer, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = add i64 %t3, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t5 = load ptr, ptr %a1 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 + store { ptr, i64, i64 } { ptr @.str.7544, i64 18, i64 0 }, ptr %t6 + store i64 %t4, ptr %t2 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 + store { ptr, i64, i64 } { ptr @.str.7545, i64 12, i64 0 }, ptr %t11 + store i64 %t9, ptr %t7 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 + store { ptr, i64, i64 } { ptr @.str.7546, i64 12, i64 0 }, ptr %t16 + store i64 %t14, ptr %t12 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = add i64 %t18, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + store { ptr, i64, i64 } { ptr @.str.7547, i64 12, i64 0 }, ptr %t21 + store i64 %t19, ptr %t17 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = add i64 %t23, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t25 = load ptr, ptr %a1 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 + store { ptr, i64, i64 } { ptr @.str.7548, i64 20, i64 0 }, ptr %t26 + store i64 %t24, ptr %t22 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = add i64 %t28, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t30 = load ptr, ptr %a1 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 + store { ptr, i64, i64 } { ptr @.str.7549, i64 12, i64 0 }, ptr %t31 + store i64 %t29, ptr %t27 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = add i64 %t33, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 + store { ptr, i64, i64 } { ptr @.str.7550, i64 20, i64 0 }, ptr %t36 + store i64 %t34, ptr %t32 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t40 = load ptr, ptr %a1 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 + store { ptr, i64, i64 } { ptr @.str.7551, i64 15, i64 0 }, ptr %t41 + store i64 %t39, ptr %t37 + %t42 = load { ptr, i64, i64 }, ptr %a1 + ret { ptr, i64, i64 } %t42 +} + +define internal { ptr, i64, i64 } @finch.embedded.texts() { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } zeroinitializer, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = add i64 %t3, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t5 = load ptr, ptr %a1 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 + store { ptr, i64, i64 } { ptr @.str.7552, i64 24981, i64 0 }, ptr %t6 + store i64 %t4, ptr %t2 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 + store { ptr, i64, i64 } { ptr @.str.7553, i64 12884, i64 0 }, ptr %t11 + store i64 %t9, ptr %t7 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 + store { ptr, i64, i64 } { ptr @.str.7554, i64 2846, i64 0 }, ptr %t16 + store i64 %t14, ptr %t12 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = add i64 %t18, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + store { ptr, i64, i64 } { ptr @.str.7555, i64 1406, i64 0 }, ptr %t21 + store i64 %t19, ptr %t17 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = add i64 %t23, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t25 = load ptr, ptr %a1 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 + store { ptr, i64, i64 } { ptr @.str.7556, i64 995, i64 0 }, ptr %t26 + store i64 %t24, ptr %t22 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = add i64 %t28, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t30 = load ptr, ptr %a1 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 + store { ptr, i64, i64 } { ptr @.str.7557, i64 2539, i64 0 }, ptr %t31 + store i64 %t29, ptr %t27 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = add i64 %t33, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 + store { ptr, i64, i64 } { ptr @.str.7558, i64 1792, i64 0 }, ptr %t36 + store i64 %t34, ptr %t32 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t40 = load ptr, ptr %a1 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 + store { ptr, i64, i64 } { ptr @.str.7559, i64 365, i64 0 }, ptr %t41 + store i64 %t39, ptr %t37 + %t42 = load { ptr, i64, i64 }, ptr %a1 + ret { ptr, i64, i64 } %t42 +} + +define i32 @main(i32 %argc, ptr %argv) { +entry: + %args = alloca { ptr, i64, i64 } + call void @finch_args(ptr %args, i32 %argc, ptr %argv) + %a = load { ptr, i64, i64 }, ptr %args + %r = call i64 @finch.main.main({ ptr, i64, i64 } %a) + %code = trunc i64 %r to i32 + ret i32 %code +} + diff --git a/bootstrap/macos-x86_64.ll b/bootstrap/macos-x86_64.ll new file mode 100644 index 0000000..8208f3a --- /dev/null +++ b/bootstrap/macos-x86_64.ll @@ -0,0 +1,117509 @@ +; generated by the Finch compiler written in Finch + +target triple = "x86_64-apple-macosx11.0.0" + +%S.main.Loader = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.lexer.Token = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1 } +%S.lexer.Lexer = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } +%S.ast.Type = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } +%S.ast.Node = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64 } +%S.ast.Program = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.parser.Parser = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 } } +%S.gen.Var = type { { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, i64, i1, i1, { ptr, i64, i64 }, i64, i64 } +%S.platform.Target = type { { ptr, i64, i64 }, i1, i1, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Options = type { i1, i1, i1, { ptr, i64, i64 }, %S.platform.Target } +%S.gen.Template = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1, i1 } +%S.gen.Binds = type { { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.EnumDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Cleanup = type { i1, i64 } +%S.gen.SumDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.SumPat = type { i64, { ptr, i64, i64 } } +%S.gen.Scope = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Pending = type { { ptr, i64, i64 }, %S.ast.Type, i1 } +%S.gen.Loop = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64 } +%S.gen.FnSig = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64 } +%S.gen.StructDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } +%S.gen.Val = type { { ptr, i64, i64 }, %S.ast.Type, i1, i1 } +%S.gen.Place = type { { ptr, i64, i64 }, %S.ast.Type } +%S.gen.Ref = type { i1, %S.gen.Place, %S.gen.Val } +%S.cimport.CImports = type { { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Gen = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.gen.FnSig, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, %S.cimport.CImports, i1, i1, { ptr, i64, i64 }, i1, %S.platform.Target, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i64, i64 } +%S.gen.Saved = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i1, i64 } +%S.gen.SizeAlign = type { i64, i64 } +%S.gen.Fallible = type { %S.gen.Val, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Abi = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } +%S.gen.Leaf = type { i64, i64, i1, i1 } +%S.gen.Plan = type { %S.gen.Abi, { ptr, i64, i64 }, { ptr, i64, i64 }, i1 } +%S.docs.Doc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.cimport.CFunc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } +%S.cimport.CConst = type { i1, i64, double, { ptr, i64, i64 } } +%S.cimport.CField = type { { ptr, i64, i64 }, %S.ast.Type, i64, i64, i64, i1 } +%S.cimport.CStruct = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i1 } +%S.cimport.Header = type { { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.cimport.Mapped = type { %S.ast.Type, { ptr, i64, i64 }, i1 } +%S.cimport.Importer = type { %S.cimport.CImports, ptr, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, i64 } +%S.cimport.FieldCtx = type { ptr, ptr } +%S.cimport.Number = type { %S.cimport.CConst, i1 } +%S.linker.Names = type { { ptr, i64, i64 } } +%S.linker.Build = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } +%S.lsp.Ref = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } +%S.lsp.VarRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i64, i64 } +%S.lsp.FnRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.lsp.StructRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.lsp.EnumRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } +%S.lsp.Diag = type { i1, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } +%S.lsp.Analysis = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.lsp.Diag } +%S.lsp.Server = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i1 } +%S.lsp.Names = type { { ptr, i64, i64 } } +%S.json.Json = type { i32, i1, double, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.json.Writer = type { { ptr, i64, i64 } } +%S.json.Reader = type { { ptr, i64, i64 }, i64 } +%S.C.rlimit = type { i64, i64 } +%S.C.timeval = type { i64, i32, [4 x i8] } +%S.C.rusage = type { %S.C.timeval, %S.C.timeval, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64, i64 } +%S.C.siginfo_t = type { i32, i32, i32, i32, i32, i32, ptr, [8 x i8], i64, [7 x i64] } +%S.C.div_t = type { i32, i32 } +%S.C.ldiv_t = type { i64, i64 } +%S.C.lldiv_t = type { i64, i64 } +%S.C.CXString = type { ptr, i32, [4 x i8] } +%S.C.CXStringSet = type { ptr, i32, [4 x i8] } +%S.C.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, [4 x i8], i64, ptr } +%S.C.timespec = type { i64, i64 } +%S.C.CXFileUniqueID = type { [3 x i64] } +%S.C.CXSourceLocation = type { [2 x ptr], i32, [4 x i8] } +%S.C.CXSourceRange = type { [2 x ptr], i32, i32 } +%S.C.CXSourceRangeList = type { i32, [4 x i8], ptr } +%S.C.CXIndexOptions = type { i32, i8, i8, [2 x i8], ptr, ptr } +%S.C.CXUnsavedFile = type { ptr, ptr, i64 } +%S.C.CXTUResourceUsageEntry = type { i32, [4 x i8], i64 } +%S.C.CXTUResourceUsage = type { ptr, i32, [4 x i8], ptr } +%S.C.CXCursor = type { i32, i32, [3 x ptr] } +%S.C.CXVersion = type { i32, i32, i32 } +%S.C.CXPlatformAvailability = type { %S.C.CXString, %S.C.CXVersion, %S.C.CXVersion, %S.C.CXVersion, i32, %S.C.CXString } +%S.C.CXType = type { i32, [4 x i8], [2 x ptr] } +%S.C.CXToken = type { [4 x i32], ptr } +%S.C.CXCompletionResult = type { i32, [4 x i8], ptr } +%S.C.CXCodeCompleteResults = type { ptr, i32, [4 x i8] } +%S.C.CXCursorAndRangeVisitor = type { ptr, ptr } +%S.C.CXIdxLoc = type { [2 x ptr], i32, [4 x i8] } +%S.C.CXIdxAttrInfo = type { i32, [4 x i8], %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxEntityInfo = type { i32, i32, i32, [4 x i8], ptr, ptr, %S.C.CXCursor, ptr, i32, [4 x i8] } +%S.C.CXIdxContainerInfo = type { %S.C.CXCursor } +%S.C.CXIdxDeclInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr, ptr, i32, i32, i32, [4 x i8], ptr, i32, [4 x i8], ptr, i32, i32 } +%S.C.CXIdxObjCContainerDeclInfo = type { ptr, i32, [4 x i8] } +%S.C.CXIdxBaseClassInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxObjCProtocolRefInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxObjCProtocolRefListInfo = type { ptr, i32, [4 x i8] } +%S.C.CXIdxObjCInterfaceDeclInfo = type { ptr, ptr, ptr } +%S.C.CXIdxObjCCategoryDeclInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr } +%S.C.CXIdxObjCPropertyDeclInfo = type { ptr, ptr, ptr } +%S.C.CXIdxIBOutletCollectionAttrInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxCXXClassDeclInfo = type { ptr, ptr, i32, [4 x i8] } +%S.C.IndexerCallbacks = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } +%S.C.fd_set = type { [32 x i32] } +%S.C.accessx_descriptor = type { i32, i32, [2 x i32] } +%S.C.__sbuf = type { ptr, i32, [4 x i8] } +%S.C.FILE = type { ptr, i32, i32, i16, i16, [4 x i8], %S.C.__sbuf, i32, [4 x i8], ptr, ptr, ptr, ptr, ptr, %S.C.__sbuf, ptr, i32, [3 x i8], [1 x i8], %S.C.__sbuf, i32, [4 x i8], i64 } +%S.C.__va_list_tag = type { i32, i32, ptr, ptr } +@.str.1 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.2 = private unnamed_addr constant [2 x i8] c".\00" +@.str.3 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.4 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.5 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.7 = private unnamed_addr constant [3 x i8] c"./\00" +@.str.8 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.9 = private unnamed_addr constant [2 x i8] c".\00" +@.str.10 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.11 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.12 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" +@.str.13 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.14 = private unnamed_addr constant [37 x i8] c"used .overlayFiles on a null pointer\00" +@.str.15 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.16 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.17 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.18 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.19 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.20 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.21 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.22 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.23 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.24 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.25 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.26 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.27 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.28 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.29 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.30 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.31 = private unnamed_addr constant [30 x i8] c"used .paths on a null pointer\00" +@.str.32 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.33 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.34 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.35 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.36 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.37 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.38 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.39 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.40 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.41 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.42 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.43 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.44 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.45 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.46 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.47 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.48 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.49 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.50 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.51 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.52 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.53 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.54 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.55 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.56 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.57 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.58 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.59 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.60 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.61 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.62 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.63 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.64 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.65 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.66 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.67 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.68 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.69 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.70 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.71 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" +@.str.72 = private unnamed_addr constant [31 x i8] c"error: can't find the module '\00" +@.str.73 = private unnamed_addr constant [15 x i8] c"' (looked for \00" +@.str.74 = private unnamed_addr constant [2 x i8] c")\00" +@.str.75 = private unnamed_addr constant [1 x i8] c"\00" +@.str.76 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.77 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.78 = private unnamed_addr constant [20 x i8] c"error: can't open '\00" +@.str.79 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.80 = private unnamed_addr constant [1 x i8] c"\00" +@.str.81 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.82 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.83 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.84 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.85 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.86 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.87 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.88 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.89 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.90 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" +@.str.91 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.92 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" +@.str.93 = private unnamed_addr constant [42 x i8] c"Finch -- the compiler is written in Finch\00" +@.str.94 = private unnamed_addr constant [1 x i8] c"\00" +@.str.95 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.96 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.97 = private unnamed_addr constant [7 x i8] c"usage:\00" +@.str.98 = private unnamed_addr constant [1 x i8] c"\00" +@.str.99 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.100 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.101 = private unnamed_addr constant [61 x i8] c" finch run [args...] build and run a program\00" +@.str.102 = private unnamed_addr constant [1 x i8] c"\00" +@.str.103 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.104 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.105 = private unnamed_addr constant [53 x i8] c" finch build [-o name] build a program\00" +@.str.106 = private unnamed_addr constant [1 x i8] c"\00" +@.str.107 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.108 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.109 = private unnamed_addr constant [55 x i8] c" finch ir print the LLVM IR\00" +@.str.110 = private unnamed_addr constant [1 x i8] c"\00" +@.str.111 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.112 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.113 = private unnamed_addr constant [54 x i8] c" finch version show the version\00" +@.str.114 = private unnamed_addr constant [1 x i8] c"\00" +@.str.115 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.116 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.117 = private unnamed_addr constant [91 x i8] c" finch lsp the language server, for editors (VS Code, Kate, ...)\00" +@.str.118 = private unnamed_addr constant [1 x i8] c"\00" +@.str.119 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.120 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.121 = private unnamed_addr constant [9 x i8] c"options:\00" +@.str.122 = private unnamed_addr constant [1 x i8] c"\00" +@.str.123 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.124 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.125 = private unnamed_addr constant [54 x i8] c" -O0 no optimization (faster to build)\00" +@.str.126 = private unnamed_addr constant [1 x i8] c"\00" +@.str.127 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.128 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.129 = private unnamed_addr constant [77 x i8] c" -l link a library (the same as link \22lib\22 in the program)\00" +@.str.130 = private unnamed_addr constant [1 x i8] c"\00" +@.str.131 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.132 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.133 = private unnamed_addr constant [58 x i8] c" -I look for imported C headers there too\00" +@.str.134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.135 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.136 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.137 = private unnamed_addr constant [67 x i8] c" -g debug info (for gdb and lldb; use -O0 with it)\00" +@.str.138 = private unnamed_addr constant [1 x i8] c"\00" +@.str.139 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.140 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.141 = private unnamed_addr constant [102 x i8] c" --target build for another system: windows, linux, arm64 (Linux), macos, or an LLVM triple\00" +@.str.142 = private unnamed_addr constant [1 x i8] c"\00" +@.str.143 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.144 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.145 = private unnamed_addr constant [8 x i8] c"/files-\00" +@.str.146 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.147 = private unnamed_addr constant [6 x i8] c"/done\00" +@.str.148 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.149 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.150 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.151 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.152 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.153 = private unnamed_addr constant [6 x i8] c"/done\00" +@.str.154 = private unnamed_addr constant [1 x i8] c"\00" +@.str.155 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.156 = private unnamed_addr constant [8 x i8] c"version\00" +@.str.157 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.158 = private unnamed_addr constant [10 x i8] c"--version\00" +@.str.159 = private unnamed_addr constant [47 x i8] c"Finch 2.4.0 (the compiler is written in Finch)\00" +@.str.160 = private unnamed_addr constant [1 x i8] c"\00" +@.str.161 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.162 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.163 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.164 = private unnamed_addr constant [4 x i8] c"lsp\00" +@.str.165 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.166 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.167 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.168 = private unnamed_addr constant [6 x i8] c"build\00" +@.str.169 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.170 = private unnamed_addr constant [3 x i8] c"ir\00" +@.str.171 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.172 = private unnamed_addr constant [1 x i8] c"\00" +@.str.173 = private unnamed_addr constant [4 x i8] c"-O2\00" +@.str.174 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.175 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.176 = private unnamed_addr constant [3 x i8] c"-o\00" +@.str.177 = private unnamed_addr constant [6 x i8] c"build\00" +@.str.178 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.179 = private unnamed_addr constant [9 x i8] c"--shared\00" +@.str.180 = private unnamed_addr constant [6 x i8] c"build\00" +@.str.181 = private unnamed_addr constant [4 x i8] c"-O0\00" +@.str.182 = private unnamed_addr constant [4 x i8] c"-O0\00" +@.str.183 = private unnamed_addr constant [3 x i8] c"-l\00" +@.str.184 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.185 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.186 = private unnamed_addr constant [3 x i8] c"-l\00" +@.str.187 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.188 = private unnamed_addr constant [3 x i8] c"-I\00" +@.str.189 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.190 = private unnamed_addr constant [10 x i8] c"--overlay\00" +@.str.191 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.192 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.193 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.194 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.195 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.196 = private unnamed_addr constant [3 x i8] c"-g\00" +@.str.197 = private unnamed_addr constant [9 x i8] c"--target\00" +@.str.198 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.199 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.200 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.201 = private unnamed_addr constant [12 x i8] c"/finch_run_\00" +@.str.202 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.203 = private unnamed_addr constant [5 x i8] c".dll\00" +@.str.204 = private unnamed_addr constant [4 x i8] c"lib\00" +@.str.205 = private unnamed_addr constant [7 x i8] c".dylib\00" +@.str.206 = private unnamed_addr constant [4 x i8] c"lib\00" +@.str.207 = private unnamed_addr constant [4 x i8] c".so\00" +@.str.208 = private unnamed_addr constant [6 x i8] c"linux\00" +@.str.209 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.210 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.211 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.212 = private unnamed_addr constant [8 x i8] c"/../std\00" +@.str.213 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.214 = private unnamed_addr constant [5 x i8] c"/std\00" +@.str.215 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.216 = private unnamed_addr constant [20 x i8] c"/../share/finch/std\00" +@.str.217 = private unnamed_addr constant [4 x i8] c"std\00" +@.str.218 = private unnamed_addr constant [10 x i8] c"/path.fch\00" +@.str.219 = private unnamed_addr constant [5 x i8] c"/std\00" +@.str.220 = private unnamed_addr constant [11 x i8] c"FINCH_PATH\00" +@.str.221 = private unnamed_addr constant [1 x i8] c"\00" +declare ptr @getenv(ptr) +@.str.222 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.223 = private unnamed_addr constant [1 x i8] c"\00" +@.str.224 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.225 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.226 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.227 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.228 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.229 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.230 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.231 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.232 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.233 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.234 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.235 = private unnamed_addr constant [1 x i8] c"\00" +@.str.236 = private unnamed_addr constant [1 x i8] c"\00" +@.str.237 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.238 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.239 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.240 = private unnamed_addr constant [3 x i8] c"ir\00" +@.str.241 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.242 = private unnamed_addr constant [1 x i8] c"\00" +@.str.243 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.244 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.245 = private unnamed_addr constant [9 x i8] c"FINCH_RT\00" +@.str.246 = private unnamed_addr constant [1 x i8] c"\00" +@.str.247 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.248 = private unnamed_addr constant [23 x i8] c"/../runtime/finch_rt.c\00" +@.str.249 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.250 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00" +@.str.251 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.252 = private unnamed_addr constant [35 x i8] c"/../share/finch/runtime/finch_rt.c\00" +@.str.253 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.254 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.255 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00" +@.str.256 = private unnamed_addr constant [1 x i8] c"\00" +@.str.257 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.258 = private unnamed_addr constant [4 x i8] c" -g\00" +@.str.259 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.260 = private unnamed_addr constant [2 x i8] c" \00" +@.str.261 = private unnamed_addr constant [2 x i8] c" \00" +@.str.262 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.263 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.264 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.265 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.266 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.267 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.268 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.269 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.270 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.271 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.272 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.273 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.274 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.275 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.276 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.277 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.278 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.279 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.280 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.281 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.282 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.283 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.284 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" +@.str.285 = private unnamed_addr constant [2 x i8] c":\00" +@.str.286 = private unnamed_addr constant [2 x i8] c":\00" +@.str.287 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.288 = private unnamed_addr constant [1 x i8] c"\00" +@.str.289 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.290 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.291 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.292 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.293 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.294 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.295 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.296 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.297 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.298 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.299 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.300 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.301 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.302 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.303 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.304 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.305 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.306 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.307 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.308 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.309 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.310 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" +@.str.311 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.312 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.313 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.314 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.315 = private unnamed_addr constant [3 x i8] c"->\00" +@.str.316 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.317 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.318 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.319 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.320 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.321 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.322 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.323 = private unnamed_addr constant [3 x i8] c"||\00" +@.str.324 = private unnamed_addr constant [3 x i8] c"..\00" +@.str.325 = private unnamed_addr constant [3 x i8] c":=\00" +@.str.326 = private unnamed_addr constant [3 x i8] c"+=\00" +@.str.327 = private unnamed_addr constant [3 x i8] c"-=\00" +@.str.328 = private unnamed_addr constant [3 x i8] c"*=\00" +@.str.329 = private unnamed_addr constant [3 x i8] c"/=\00" +@.str.330 = private unnamed_addr constant [3 x i8] c"%=\00" +@.str.331 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.332 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.333 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.334 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.335 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.336 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.337 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.338 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.339 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.340 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.341 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.342 = private unnamed_addr constant [23 x i8] c"(){}[],.:+-*/%&|^~<>=!\00" +@.str.343 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.344 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.345 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.346 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.347 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.348 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.349 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.350 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.351 = private unnamed_addr constant [1 x i8] c"\00" +@.str.352 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.353 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.354 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.355 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.356 = private unnamed_addr constant [17 x i8] c"unknown escape \5C\00" +@.str.357 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.358 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.359 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.360 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.361 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.362 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.363 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.364 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.365 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.366 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.367 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.368 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.369 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.370 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.371 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.372 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.373 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.374 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.375 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.376 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.377 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.378 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.379 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.380 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.381 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.382 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.383 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.384 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.385 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.386 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.387 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.388 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.389 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.390 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.391 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.392 = private unnamed_addr constant [37 x i8] c"comment is never closed (missing */)\00" +@.str.393 = private unnamed_addr constant [1 x i8] c"\00" +@.str.394 = private unnamed_addr constant [1 x i8] c"\00" +@.str.395 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.396 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.397 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.398 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.399 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.400 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" +@.str.401 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.402 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" +@.str.403 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.404 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.405 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.406 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.407 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.408 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.409 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.410 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.411 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.412 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.413 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.414 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.415 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.416 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.417 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.418 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.419 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.420 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.421 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.422 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.423 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.424 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.425 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.426 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.427 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.428 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.429 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.430 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.431 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.432 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.434 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.435 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.436 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.437 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.438 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.439 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.440 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.441 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.442 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.443 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.444 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.445 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.446 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.448 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.449 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.450 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.451 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.452 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.453 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.454 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.455 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.456 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.457 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.458 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.459 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.460 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.461 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.463 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.464 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.465 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.466 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.467 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.468 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.469 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.470 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.471 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.472 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.473 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.474 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.475 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.476 = private unnamed_addr constant [1 x i8] c"\00" +@.str.477 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.478 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.479 = private unnamed_addr constant [35 x i8] c"string is never closed (missing \22)\00" +@.str.480 = private unnamed_addr constant [33 x i8] c"char is never closed (missing ')\00" +@.str.481 = private unnamed_addr constant [1 x i8] c"\00" +@.str.482 = private unnamed_addr constant [45 x i8] c"a char holds exactly one character, like 'a'\00" +@.str.483 = private unnamed_addr constant [1 x i8] c"\00" +@.str.484 = private unnamed_addr constant [75 x i8] c" (names use only a-z, A-Z, 0-9 and _; other letters only go inside \22text\22)\00" +@.str.485 = private unnamed_addr constant [23 x i8] c"unexpected character '\00" +@.str.486 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.487 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.488 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.489 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.490 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.491 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.492 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.493 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.494 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.495 = private unnamed_addr constant [1 x i8] c"\00" +@.str.496 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.497 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.498 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.499 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.500 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.501 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.502 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.503 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.504 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.505 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.506 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.507 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.508 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.509 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.510 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.511 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.512 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.513 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.514 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.515 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.516 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.517 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.518 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.519 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.520 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.521 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.522 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.523 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.524 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.525 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.526 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.527 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.528 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.529 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.530 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.531 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.532 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.533 = private unnamed_addr constant [2 x i8] c".\00" +@.str.534 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.535 = private unnamed_addr constant [8 x i8] c"nothing\00" +@.str.536 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.537 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" +@.str.538 = private unnamed_addr constant [2 x i8] c":\00" +@.str.539 = private unnamed_addr constant [2 x i8] c":\00" +@.str.540 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.541 = private unnamed_addr constant [1 x i8] c"\00" +@.str.542 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.543 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.544 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.545 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.546 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.547 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.548 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.549 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.550 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.551 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.552 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.553 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.554 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.555 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.556 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.557 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.558 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.559 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.560 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.561 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.562 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.563 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.564 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.565 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.566 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.567 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.568 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.569 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.570 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.571 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.572 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.573 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.574 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.575 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.576 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.577 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.578 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.579 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.580 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.581 = private unnamed_addr constant [12 x i8] c"end of file\00" +@.str.582 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.583 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.584 = private unnamed_addr constant [9 x i8] c"a number\00" +@.str.585 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.586 = private unnamed_addr constant [9 x i8] c"a string\00" +@.str.587 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.588 = private unnamed_addr constant [7 x i8] c"a char\00" +@.str.589 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.590 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.591 = private unnamed_addr constant [10 x i8] c"expected \00" +@.str.592 = private unnamed_addr constant [9 x i8] c", found \00" +@.str.593 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.594 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.595 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.596 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.597 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.598 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.599 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.600 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.601 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.602 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.603 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.604 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.605 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.606 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" +@.str.607 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.608 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.609 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.610 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.611 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.612 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.613 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.614 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.615 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.616 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.617 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.618 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.619 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.620 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.621 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.622 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.623 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.624 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.625 = private unnamed_addr constant [37 x i8] c"']' (an array type looks like []int)\00" +@.str.626 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.627 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.628 = private unnamed_addr constant [57 x i8] c" (expected a type like int, str, []int or a struct name)\00" +@.str.629 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.630 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.631 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.632 = private unnamed_addr constant [40 x i8] c"']' (a map type looks like map[str]int)\00" +@.str.633 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.634 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.635 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.636 = private unnamed_addr constant [4 x i8] c"']'\00" +@.str.637 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.638 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.639 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.640 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.641 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.642 = private unnamed_addr constant [2 x i8] c".\00" +@.str.643 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.644 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.645 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.646 = private unnamed_addr constant [2 x i8] c",\00" +@.str.647 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.648 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" +@.str.649 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.650 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.651 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.652 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.653 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.654 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.655 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.656 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.657 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.658 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.659 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.660 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.661 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.662 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.663 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.664 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.665 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.666 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.667 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.668 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.669 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.670 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.671 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.672 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.673 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.674 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.675 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.676 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.677 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.678 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.679 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.680 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.681 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.682 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.683 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.684 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.685 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.686 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.687 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.688 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.689 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.690 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.691 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.692 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.693 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.694 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.695 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.696 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.697 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.698 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.699 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.700 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.701 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.702 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.703 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.704 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.705 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.706 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.707 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.708 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.709 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.710 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.711 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.712 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.713 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.714 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.715 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.716 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.717 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.718 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.719 = private unnamed_addr constant [2 x i8] c".\00" +@.str.720 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.721 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.722 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.723 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.724 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.725 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.726 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.727 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.728 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.729 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.730 = private unnamed_addr constant [38 x i8] c" (put each statement on its own line)\00" +@.str.731 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.732 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.733 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.734 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.735 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" +@.str.736 = private unnamed_addr constant [2 x i8] c":\00" +@.str.737 = private unnamed_addr constant [2 x i8] c":\00" +@.str.738 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.739 = private unnamed_addr constant [52 x i8] c"expected a module name or a C header after 'import'\00" +@.str.740 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.741 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.742 = private unnamed_addr constant [43 x i8] c"a library name in quotes, like link \22glfw\22\00" +@.str.743 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.744 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.745 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.746 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.747 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.748 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.749 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.750 = private unnamed_addr constant [4 x i8] c"lib\00" +@.str.751 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.752 = private unnamed_addr constant [4 x i8] c".so\00" +@.str.753 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.754 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.755 = private unnamed_addr constant [66 x i8] c"write just the library's name: for libglfw.so that's link \22glfw\22\00" +@.str.756 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.757 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.758 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.759 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.760 = private unnamed_addr constant [7 x i8] c"'enum'\00" +@.str.761 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.762 = private unnamed_addr constant [13 x i8] c"an enum name\00" +@.str.763 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.764 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.765 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.766 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.767 = private unnamed_addr constant [38 x i8] c"an enum is never closed (missing '}')\00" +@.str.768 = private unnamed_addr constant [8 x i8] c"variant\00" +@.str.769 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.770 = private unnamed_addr constant [25 x i8] c"a variant name, like Red\00" +@.str.771 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.772 = private unnamed_addr constant [2 x i8] c")\00" +@.str.773 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.774 = private unnamed_addr constant [2 x i8] c",\00" +@.str.775 = private unnamed_addr constant [2 x i8] c")\00" +@.str.776 = private unnamed_addr constant [36 x i8] c"')' after the values of the variant\00" +@.str.777 = private unnamed_addr constant [13 x i8] c"the variant \00" +@.str.778 = private unnamed_addr constant [28 x i8] c" has empty () : write just \00" +@.str.779 = private unnamed_addr constant [21 x i8] c" if it holds nothing\00" +@.str.780 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.781 = private unnamed_addr constant [53 x i8] c"a variant can't have both values inside and a number\00" +@.str.782 = private unnamed_addr constant [1 x i8] c"\00" +@.str.783 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.784 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.785 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.786 = private unnamed_addr constant [31 x i8] c"a whole number, like Ok = 200\00" +@.str.787 = private unnamed_addr constant [2 x i8] c",\00" +@.str.788 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.789 = private unnamed_addr constant [17 x i8] c" has no variants\00" +@.str.790 = private unnamed_addr constant [55 x i8] c"an enum whose variants hold values can't number them (\00" +@.str.791 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.792 = private unnamed_addr constant [2 x i8] c")\00" +@.str.793 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.794 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.795 = private unnamed_addr constant [4 x i8] c"tag\00" +@.str.796 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.797 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.798 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.799 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.800 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.801 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.802 = private unnamed_addr constant [8 x i8] c"'match'\00" +@.str.803 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.804 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.805 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.806 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.807 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.808 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.809 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.810 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.811 = private unnamed_addr constant [38 x i8] c"a match is never closed (missing '}')\00" +@.str.812 = private unnamed_addr constant [4 x i8] c"arm\00" +@.str.813 = private unnamed_addr constant [9 x i8] c"patterns\00" +@.str.814 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.815 = private unnamed_addr constant [2 x i8] c",\00" +@.str.816 = private unnamed_addr constant [3 x i8] c"->\00" +@.str.817 = private unnamed_addr constant [58 x i8] c"'->' after the value to match, like Red -> print(\22red\22)\00" +@.str.818 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.819 = private unnamed_addr constant [2 x i8] c",\00" +@.str.820 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.821 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.822 = private unnamed_addr constant [31 x i8] c"a match needs at least one arm\00" +@.str.823 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.824 = private unnamed_addr constant [4 x i8] c"'['\00" +@.str.825 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.826 = private unnamed_addr constant [30 x i8] c"a type parameter name, like T\00" +@.str.827 = private unnamed_addr constant [2 x i8] c",\00" +@.str.828 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.829 = private unnamed_addr constant [30 x i8] c"']' after the type parameters\00" +@.str.830 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.831 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.832 = private unnamed_addr constant [9 x i8] c"'struct'\00" +@.str.833 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.834 = private unnamed_addr constant [14 x i8] c"a struct name\00" +@.str.835 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.836 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.837 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.838 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.839 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.840 = private unnamed_addr constant [39 x i8] c"a struct is never closed (missing '}')\00" +@.str.841 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.842 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.843 = private unnamed_addr constant [29 x i8] c" (a field looks like: int x)\00" +@.str.844 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.845 = private unnamed_addr constant [13 x i8] c"a field name\00" +@.str.846 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.847 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.848 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.849 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.850 = private unnamed_addr constant [69 x i8] c"functions start with 'fn', like: fn add(int a, int b) -> int { ... }\00" +@.str.851 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.852 = private unnamed_addr constant [27 x i8] c"'fn', 'struct' or 'import'\00" +@.str.853 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.854 = private unnamed_addr constant [16 x i8] c"a function name\00" +@.str.855 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.856 = private unnamed_addr constant [2 x i8] c".\00" +@.str.857 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.858 = private unnamed_addr constant [14 x i8] c"a method name\00" +@.str.859 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.860 = private unnamed_addr constant [4 x i8] c"'('\00" +@.str.861 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.862 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.863 = private unnamed_addr constant [2 x i8] c")\00" +@.str.864 = private unnamed_addr constant [6 x i8] c"param\00" +@.str.865 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.866 = private unnamed_addr constant [17 x i8] c"a parameter name\00" +@.str.867 = private unnamed_addr constant [2 x i8] c",\00" +@.str.868 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.869 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.870 = private unnamed_addr constant [2 x i8] c")\00" +@.str.871 = private unnamed_addr constant [4 x i8] c"')'\00" +@.str.872 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.873 = private unnamed_addr constant [3 x i8] c"->\00" +@.str.874 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.875 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.876 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.877 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.878 = private unnamed_addr constant [62 x i8] c" (after '->' comes a type, or ! for a function that can fail)\00" +@.str.879 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.880 = private unnamed_addr constant [6 x i8] c"block\00" +@.str.881 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.882 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.883 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.884 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.885 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.886 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.887 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.888 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.889 = private unnamed_addr constant [36 x i8] c"a '{' is never closed (missing '}')\00" +@.str.890 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.891 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.892 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.893 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.894 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.895 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.896 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.897 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.898 = private unnamed_addr constant [21 x i8] c"a loop variable name\00" +@.str.899 = private unnamed_addr constant [2 x i8] c",\00" +@.str.900 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.901 = private unnamed_addr constant [28 x i8] c"a second loop variable name\00" +@.str.902 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.903 = private unnamed_addr constant [5 x i8] c"'in'\00" +@.str.904 = private unnamed_addr constant [3 x i8] c"..\00" +@.str.905 = private unnamed_addr constant [56 x i8] c"a range of numbers has one loop variable: for i in 0..n\00" +@.str.906 = private unnamed_addr constant [5 x i8] c"each\00" +@.str.907 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.908 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.909 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.910 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.911 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.912 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.913 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.914 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.915 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.916 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.917 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" +@.str.918 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.919 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.920 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.921 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.922 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.923 = private unnamed_addr constant [49 x i8] c"' can't be used here in the self-hosted compiler\00" +@.str.924 = private unnamed_addr constant [5 x i8] c"decl\00" +@.str.925 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.926 = private unnamed_addr constant [16 x i8] c"a variable name\00" +@.str.927 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.928 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.929 = private unnamed_addr constant [3 x i8] c":=\00" +@.str.930 = private unnamed_addr constant [5 x i8] c"decl\00" +@.str.931 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.932 = private unnamed_addr constant [3 x i8] c"+=\00" +@.str.933 = private unnamed_addr constant [3 x i8] c"-=\00" +@.str.934 = private unnamed_addr constant [3 x i8] c"*=\00" +@.str.935 = private unnamed_addr constant [3 x i8] c"/=\00" +@.str.936 = private unnamed_addr constant [3 x i8] c"%=\00" +@.str.937 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.938 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.939 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.940 = private unnamed_addr constant [67 x i8] c"only a variable, a field, an element or p.value can be assigned to\00" +@.str.941 = private unnamed_addr constant [7 x i8] c"assign\00" +@.str.942 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.943 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" +@.str.944 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.945 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.946 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.947 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.948 = private unnamed_addr constant [38 x i8] c"this value is computed but never used\00" +@.str.949 = private unnamed_addr constant [5 x i8] c"expr\00" +@.str.950 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.951 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" +@.str.952 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.953 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.954 = private unnamed_addr constant [5 x i8] c"'if'\00" +@.str.955 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.956 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.957 = private unnamed_addr constant [3 x i8] c"||\00" +@.str.958 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.959 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.960 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.961 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.962 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.963 = private unnamed_addr constant [2 x i8] c">\00" +@.str.964 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.965 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.966 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.967 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.968 = private unnamed_addr constant [2 x i8] c"^\00" +@.str.969 = private unnamed_addr constant [2 x i8] c"*\00" +@.str.970 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.971 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.972 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.973 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.974 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.975 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.976 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.977 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.978 = private unnamed_addr constant [7 x i8] c"binary\00" +@.str.979 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.980 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.981 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.982 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.983 = private unnamed_addr constant [2 x i8] c"~\00" +@.str.984 = private unnamed_addr constant [6 x i8] c"unary\00" +@.str.985 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.986 = private unnamed_addr constant [4 x i8] c"'('\00" +@.str.987 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.988 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.989 = private unnamed_addr constant [2 x i8] c")\00" +@.str.990 = private unnamed_addr constant [2 x i8] c")\00" +@.str.991 = private unnamed_addr constant [1 x i8] c"\00" +@.str.992 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.993 = private unnamed_addr constant [2 x i8] c":\00" +@.str.994 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.995 = private unnamed_addr constant [30 x i8] c"used .names on a null pointer\00" +@.str.996 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.997 = private unnamed_addr constant [29 x i8] c"used .kids on a null pointer\00" +@.str.998 = private unnamed_addr constant [2 x i8] c",\00" +@.str.999 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1000 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1001 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1002 = private unnamed_addr constant [4 x i8] c"')'\00" +@.str.1003 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1004 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.1005 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.1006 = private unnamed_addr constant [17 x i8] c"a name after '.'\00" +@.str.1007 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1008 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.1009 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1010 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.1011 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1012 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1013 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1014 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1015 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1016 = private unnamed_addr constant [4 x i8] c"']'\00" +@.str.1017 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1018 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1019 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1020 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1021 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.1022 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1023 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.1024 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1025 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1026 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1027 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1028 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1029 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1030 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1031 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1032 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1033 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1034 = private unnamed_addr constant [4 x i8] c"')'\00" +@.str.1035 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.1036 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1037 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1038 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1039 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1040 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1041 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1042 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1043 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1044 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1045 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1046 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1047 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1048 = private unnamed_addr constant [42 x i8] c"':' (a map entry looks like \22key\22: value)\00" +@.str.1049 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1050 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1051 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1052 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1053 = private unnamed_addr constant [4 x i8] c"']'\00" +@.str.1054 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.1055 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1056 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1057 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.1058 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1059 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.1060 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1061 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.1062 = private unnamed_addr constant [6 x i8] c"targs\00" +@.str.1063 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1064 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1065 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" +@.str.1066 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.1067 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1068 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.1069 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.1070 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.1071 = private unnamed_addr constant [20 x i8] c" (expected a value)\00" +@.str.1072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1073 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.1074 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" +@.str.1075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1076 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1077 = private unnamed_addr constant [3 x i8] c"\5Cn\00" +@.str.1078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1079 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1080 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1082 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.1083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1084 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1085 = private unnamed_addr constant [4 x i8] c"@R\09\00" +@.str.1086 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1087 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1089 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1090 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1091 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1092 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1093 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1094 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1095 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1097 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1099 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1100 = private unnamed_addr constant [4 x i8] c"fn \00" +@.str.1101 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1102 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1103 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1104 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1105 = private unnamed_addr constant [6 x i8] c" -> !\00" +@.str.1106 = private unnamed_addr constant [5 x i8] c" -> \00" +@.str.1107 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.1108 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1109 = private unnamed_addr constant [5 x i8] c" -> \00" +@.str.1110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1111 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.1112 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.1113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1114 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1117 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.1118 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.1119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1120 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1123 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1124 = private unnamed_addr constant [4 x i8] c"@I\09\00" +@.str.1125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1126 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.1127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1128 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1132 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1134 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1135 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1136 = private unnamed_addr constant [4 x i8] c"@F\09\00" +@.str.1137 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1138 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1139 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1141 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1143 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1144 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1145 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1146 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1147 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1148 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.1149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1150 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.1151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1152 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1154 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1156 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1157 = private unnamed_addr constant [4 x i8] c"@F\09\00" +@.str.1158 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1159 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1160 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1162 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1164 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1165 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1166 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1167 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1168 = private unnamed_addr constant [4 x i8] c"fn \00" +@.str.1169 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1170 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1171 = private unnamed_addr constant [7 x i8] c"](...)\00" +@.str.1172 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1174 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1176 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1180 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1181 = private unnamed_addr constant [4 x i8] c"@S\09\00" +@.str.1182 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1183 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1185 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1186 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1187 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1188 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1189 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1190 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1191 = private unnamed_addr constant [5 x i8] c"@SF\09\00" +@.str.1192 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1193 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1195 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1197 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1198 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1199 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1200 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1201 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1202 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1203 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1204 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1205 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1206 = private unnamed_addr constant [4 x i8] c"@E\09\00" +@.str.1207 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1208 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1210 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1211 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1213 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1215 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1216 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1217 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1219 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.1220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1221 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1222 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1223 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1224 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1225 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1226 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.1227 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1229 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1230 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1231 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1232 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1233 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.1234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1235 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.1236 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1237 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.1238 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1240 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1242 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.1243 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1244 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1245 = private unnamed_addr constant [3 x i8] c" \00" +@.str.1246 = private unnamed_addr constant [9 x i8] c", !dbg !\00" +@.str.1247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1248 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1249 = private unnamed_addr constant [3 x i8] c" \00" +@.str.1250 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1251 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1252 = private unnamed_addr constant [3 x i8] c"%t\00" +@.str.1253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1254 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1256 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" +@.str.1257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1258 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" +@.str.1259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1260 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1261 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1263 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1265 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1266 = private unnamed_addr constant [11 x i8] c"br label %\00" +@.str.1267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1268 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1269 = private unnamed_addr constant [7 x i8] c"br i1 \00" +@.str.1270 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1271 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1273 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1275 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1276 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1278 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1279 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1280 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1281 = private unnamed_addr constant [3 x i8] c" \00" +@.str.1282 = private unnamed_addr constant [11 x i8] c" = alloca \00" +@.str.1283 = private unnamed_addr constant [11 x i8] c", align 16\00" +@.str.1284 = private unnamed_addr constant [9 x i8] c" = load \00" +@.str.1285 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1286 = private unnamed_addr constant [7 x i8] c"store \00" +@.str.1287 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1288 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1289 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.1290 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1291 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.1292 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.1293 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1294 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.1295 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.1296 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.1297 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.1298 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1299 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.1300 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1301 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1302 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.1303 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.1304 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.1305 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.1306 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1307 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.1308 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.1309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1311 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1313 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1315 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1316 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1318 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1319 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1321 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1322 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1323 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1324 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1326 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1327 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1329 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1331 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1332 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1333 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1335 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1337 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1338 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1339 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1340 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1342 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.1343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1344 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1345 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1346 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1347 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1348 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1349 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1350 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1351 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1352 = private unnamed_addr constant [64 x i8] c"a map key must be a whole number, a char, a bool or a str, not \00" +@.str.1353 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1354 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1355 = private unnamed_addr constant [42 x i8] c"a map value can't have the type 'nothing'\00" +@.str.1356 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.1357 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.1358 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1359 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1360 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1361 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.1362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1363 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.1364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1365 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.1366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1367 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.1368 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1369 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1370 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.1371 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1372 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" +@.str.1373 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1374 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1375 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1376 = private unnamed_addr constant [29 x i8] c"there is no C struct named '\00" +@.str.1377 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1378 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1379 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1381 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.1382 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1383 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" +@.str.1384 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1385 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1386 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1387 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1388 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1389 = private unnamed_addr constant [25 x i8] c"there is no type named '\00" +@.str.1390 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1391 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1392 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1393 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1394 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1395 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1396 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1397 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1399 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1400 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1401 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1402 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1403 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1404 = private unnamed_addr constant [5 x i8] c"main\00" +@.str.1405 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1406 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1407 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1408 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.1409 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1410 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.1411 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.1412 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1413 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1414 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1415 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.1416 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1417 = private unnamed_addr constant [38 x i8] c"{ ptr, i64, i64, i64, ptr, i64, i64 }\00" +@.str.1418 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.1419 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1420 = private unnamed_addr constant [4 x i8] c" x \00" +@.str.1421 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1422 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1423 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1424 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1425 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1426 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1427 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1428 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1429 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1430 = private unnamed_addr constant [4 x i8] c"%S.\00" +@.str.1431 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1432 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.1433 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1434 = private unnamed_addr constant [7 x i8] c"{ i1, \00" +@.str.1435 = private unnamed_addr constant [22 x i8] c", { ptr, i64, i64 } }\00" +@.str.1436 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1437 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1438 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1439 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1440 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1441 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.1442 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1443 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1444 = private unnamed_addr constant [4 x i8] c"0.0\00" +@.str.1445 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1446 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1447 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1448 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.1449 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" +@.str.1450 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" +@.str.1451 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1452 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1453 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1454 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1455 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1456 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1458 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1459 = private unnamed_addr constant [5 x i8] c"arr_\00" +@.str.1460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1461 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1462 = private unnamed_addr constant [5 x i8] c"map_\00" +@.str.1463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1464 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.1465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1466 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1467 = private unnamed_addr constant [3 x i8] c"E_\00" +@.str.1468 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.1469 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1470 = private unnamed_addr constant [3 x i8] c"S_\00" +@.str.1471 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.1472 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" +@.str.1473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1476 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" +@.str.1477 = private unnamed_addr constant [7 x i8] c"@.str.\00" +@.str.1478 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1479 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" +@.str.1480 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.1481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1482 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.1483 = private unnamed_addr constant [35 x i8] c" = private unnamed_addr constant [\00" +@.str.1484 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" +@.str.1485 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1486 = private unnamed_addr constant [5 x i8] c"\5C00\22\00" +@.str.1487 = private unnamed_addr constant [7 x i8] c"{ ptr \00" +@.str.1488 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1489 = private unnamed_addr constant [10 x i8] c", i64 0 }\00" +@.str.1490 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1491 = private unnamed_addr constant [6 x i8] c"panic\00" +@.str.1492 = private unnamed_addr constant [3 x i8] c"ok\00" +@.str.1493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1494 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1496 = private unnamed_addr constant [28 x i8] c"call void @finch_panic(ptr \00" +@.str.1497 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1498 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1499 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1500 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.1501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1502 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1503 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.1504 = private unnamed_addr constant [8 x i8] c"inrange\00" +@.str.1505 = private unnamed_addr constant [14 x i8] c"icmp uge i64 \00" +@.str.1506 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1508 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1510 = private unnamed_addr constant [34 x i8] c"call void @finch_panic_index(ptr \00" +@.str.1511 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1512 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1513 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1514 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1515 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.1516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1517 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1519 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1521 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1523 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1525 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1527 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1529 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1530 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1531 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1532 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1533 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1535 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1537 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1539 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.1540 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" +@.str.1541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1542 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1543 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1544 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1546 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1547 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1548 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" +@.str.1549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1550 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1552 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1554 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1556 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1558 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1559 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1560 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1561 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.1562 = private unnamed_addr constant [7 x i8] c"n.cond\00" +@.str.1563 = private unnamed_addr constant [7 x i8] c"n.body\00" +@.str.1564 = private unnamed_addr constant [6 x i8] c"n.end\00" +@.str.1565 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1566 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.1567 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1568 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1570 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1571 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.1572 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.1573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1574 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1575 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1576 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1577 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" +@.str.1578 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1579 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1580 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1581 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1582 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1583 = private unnamed_addr constant [11 x i8] c"call void \00" +@.str.1584 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.1585 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1586 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1587 = private unnamed_addr constant [13 x i8] c"@finch.copy.\00" +@.str.1588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1589 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1591 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1592 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1593 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1594 = private unnamed_addr constant [56 x i8] c"call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 \00" +@.str.1595 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1596 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1597 = private unnamed_addr constant [5 x i8] c"%dst\00" +@.str.1598 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1599 = private unnamed_addr constant [5 x i8] c"%src\00" +@.str.1600 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1601 = private unnamed_addr constant [65 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1\00" +@.str.1602 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1603 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1604 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1606 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1607 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1608 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1610 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1611 = private unnamed_addr constant [56 x i8] c"call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 \00" +@.str.1612 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1615 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1616 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1617 = private unnamed_addr constant [25 x i8] c", ptr %src, i32 0, i32 2\00" +@.str.1618 = private unnamed_addr constant [5 x i8] c"%src\00" +@.str.1619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1620 = private unnamed_addr constant [5 x i8] c"%dst\00" +@.str.1621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1622 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.1623 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.1624 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.1625 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1626 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1627 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1628 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" +@.str.1629 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1630 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1633 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1634 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1635 = private unnamed_addr constant [5 x i8] c"%src\00" +@.str.1636 = private unnamed_addr constant [5 x i8] c"%dst\00" +@.str.1637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1638 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1639 = private unnamed_addr constant [24 x i8] c", ptr %dst, i32 0, i32 \00" +@.str.1640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1641 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1642 = private unnamed_addr constant [24 x i8] c", ptr %src, i32 0, i32 \00" +@.str.1643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1644 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1645 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.1646 = private unnamed_addr constant [22 x i8] c"define internal void \00" +@.str.1647 = private unnamed_addr constant [21 x i8] c"(ptr %dst, ptr %src)\00" +@.str.1648 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1649 = private unnamed_addr constant [31 x i8] c"call void @finch_str_drop(ptr \00" +@.str.1650 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1651 = private unnamed_addr constant [11 x i8] c"call void \00" +@.str.1652 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.1653 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1654 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1655 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.1656 = private unnamed_addr constant [13 x i8] c"@finch.drop.\00" +@.str.1657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1658 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1660 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1661 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1662 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1663 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1664 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1665 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1666 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00" +@.str.1667 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1668 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1669 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1670 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1671 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_free(ptr %a)\00" +@.str.1672 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1674 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1675 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1676 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1677 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00" +@.str.1678 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1679 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1680 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.1681 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.1682 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.1683 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1684 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1685 = private unnamed_addr constant [34 x i8] c"call void @finch_map_free(ptr %a)\00" +@.str.1686 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1687 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1690 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1691 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1694 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.1695 = private unnamed_addr constant [22 x i8] c"define internal void \00" +@.str.1696 = private unnamed_addr constant [9 x i8] c"(ptr %a)\00" +@.str.1697 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1698 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1699 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1700 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1702 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1703 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1704 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1705 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1707 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1709 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1710 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1711 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.1712 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1713 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1714 = private unnamed_addr constant [36 x i8] c" = call i32 (ptr, ...) @printf(ptr \00" +@.str.1715 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1716 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.1717 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1718 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.1719 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.1720 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1721 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.1722 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1723 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1724 = private unnamed_addr constant [5 x i8] c"%lld\00" +@.str.1725 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1726 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1727 = private unnamed_addr constant [5 x i8] c"%llu\00" +@.str.1728 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1729 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.1730 = private unnamed_addr constant [3 x i8] c"%g\00" +@.str.1731 = private unnamed_addr constant [8 x i8] c"double \00" +@.str.1732 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1733 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1734 = private unnamed_addr constant [9 x i8] c"sext i8 \00" +@.str.1735 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.1736 = private unnamed_addr constant [5 x i8] c"'%c'\00" +@.str.1737 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1738 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.1739 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1740 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1741 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.1742 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1743 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.1744 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1745 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1746 = private unnamed_addr constant [3 x i8] c"%s\00" +@.str.1747 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.1748 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1749 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.1750 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.1751 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.1752 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.1753 = private unnamed_addr constant [7 x i8] c"\22%.*s\22\00" +@.str.1754 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1755 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1756 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.1757 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1758 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1759 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1760 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.1761 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.1762 = private unnamed_addr constant [9 x i8] c"ptr.null\00" +@.str.1763 = private unnamed_addr constant [9 x i8] c"ptr.addr\00" +@.str.1764 = private unnamed_addr constant [9 x i8] c"ptr.done\00" +@.str.1765 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1766 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1767 = private unnamed_addr constant [7 x i8] c"0x%llx\00" +@.str.1768 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1769 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str.1770 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str.1771 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1772 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1773 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1774 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.1775 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.1776 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.1777 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_print(ptr \00" +@.str.1778 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1779 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_add(ptr \00" +@.str.1780 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1781 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1782 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1783 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.1784 = private unnamed_addr constant [2 x i8] c"1\00" +@.str.1785 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_int(ptr \00" +@.str.1786 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1787 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1788 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1789 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_uint(ptr \00" +@.str.1790 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1791 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.1792 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1793 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_float(ptr \00" +@.str.1794 = private unnamed_addr constant [10 x i8] c", double \00" +@.str.1795 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1796 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1797 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1798 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_char(ptr \00" +@.str.1799 = private unnamed_addr constant [6 x i8] c", i8 \00" +@.str.1800 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.1801 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1802 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1803 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_bool(ptr \00" +@.str.1804 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.1805 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.1806 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.1807 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1808 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1809 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_str(ptr \00" +@.str.1810 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1811 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.1812 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1813 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1814 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1815 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_ptr(ptr \00" +@.str.1816 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1817 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1818 = private unnamed_addr constant [11 x i8] c"call void \00" +@.str.1819 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.1820 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1821 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1822 = private unnamed_addr constant [15 x i8] c"@finch.format.\00" +@.str.1823 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1824 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1825 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1826 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1827 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1829 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1830 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1831 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1832 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00" +@.str.1833 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1834 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1835 = private unnamed_addr constant [4 x i8] c"sep\00" +@.str.1836 = private unnamed_addr constant [5 x i8] c"item\00" +@.str.1837 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" +@.str.1838 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1839 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1840 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1841 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1842 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1843 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1844 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1846 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1847 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1848 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1849 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1850 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1851 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1853 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1854 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1855 = private unnamed_addr constant [11 x i8] c"enum.other\00" +@.str.1856 = private unnamed_addr constant [10 x i8] c"enum.done\00" +@.str.1857 = private unnamed_addr constant [7 x i8] c"enum.v\00" +@.str.1858 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1860 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1862 = private unnamed_addr constant [12 x i8] c"switch i32 \00" +@.str.1863 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1864 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.1865 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1866 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.1867 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1868 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1870 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1871 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1872 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1873 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1874 = private unnamed_addr constant [40 x i8] c"call void @finch_buf_int(ptr %buf, i64 \00" +@.str.1875 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str.1876 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str.1877 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1878 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1879 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1880 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1881 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1882 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1883 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.1884 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1885 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.1886 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1887 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1888 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00" +@.str.1889 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1891 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.1892 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.1893 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.1894 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1895 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1896 = private unnamed_addr constant [4 x i8] c"sep\00" +@.str.1897 = private unnamed_addr constant [5 x i8] c"item\00" +@.str.1898 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1899 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1900 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1901 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1902 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1903 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1904 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1905 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1906 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1907 = private unnamed_addr constant [3 x i8] c": \00" +@.str.1908 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1909 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1911 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1912 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.1913 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1915 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1918 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1919 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1920 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1921 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1922 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1923 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1924 = private unnamed_addr constant [10 x i8] c"sum.other\00" +@.str.1925 = private unnamed_addr constant [9 x i8] c"sum.done\00" +@.str.1926 = private unnamed_addr constant [6 x i8] c"sum.v\00" +@.str.1927 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1928 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1929 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1930 = private unnamed_addr constant [12 x i8] c"switch i64 \00" +@.str.1931 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1932 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.1933 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1934 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.1935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1936 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1938 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1940 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1941 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1942 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1943 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1944 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1945 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1946 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1947 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1948 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1949 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1950 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1951 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1953 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1954 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1955 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1956 = private unnamed_addr constant [4 x i8] c"(?)\00" +@.str.1957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1958 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1960 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1961 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1962 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1963 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1964 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1966 = private unnamed_addr constant [3 x i8] c": \00" +@.str.1967 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1968 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1970 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1971 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1973 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1974 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1975 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.1976 = private unnamed_addr constant [22 x i8] c"define internal void \00" +@.str.1977 = private unnamed_addr constant [19 x i8] c"(ptr %buf, ptr %a)\00" +@.str.1978 = private unnamed_addr constant [7 x i8] c"trunc \00" +@.str.1979 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1980 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1981 = private unnamed_addr constant [6 x i8] c"sext \00" +@.str.1982 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1983 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1984 = private unnamed_addr constant [6 x i8] c"zext \00" +@.str.1985 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1986 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1987 = private unnamed_addr constant [7 x i8] c"fpext \00" +@.str.1988 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1989 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1990 = private unnamed_addr constant [9 x i8] c"fptrunc \00" +@.str.1991 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1992 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1993 = private unnamed_addr constant [8 x i8] c"sitofp \00" +@.str.1994 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1995 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1996 = private unnamed_addr constant [8 x i8] c"uitofp \00" +@.str.1997 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1998 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1999 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2000 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2001 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2002 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2003 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2004 = private unnamed_addr constant [12 x i8] c"the number \00" +@.str.2005 = private unnamed_addr constant [17 x i8] c" doesn't fit in \00" +@.str.2006 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2007 = private unnamed_addr constant [3 x i8] c".0\00" +@.str.2008 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2009 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2010 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2011 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2012 = private unnamed_addr constant [10 x i8] c" must be \00" +@.str.2013 = private unnamed_addr constant [15 x i8] c", but this is \00" +@.str.2014 = private unnamed_addr constant [7 x i8] c" (use \00" +@.str.2015 = private unnamed_addr constant [17 x i8] c"(...) to convert\00" +@.str.2016 = private unnamed_addr constant [27 x i8] c", it cuts off the fraction\00" +@.str.2017 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2018 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2019 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2020 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2021 = private unnamed_addr constant [35 x i8] c" (turn it into text with str(...))\00" +@.str.2022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2023 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2025 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2027 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2028 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2030 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2032 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2034 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2036 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2037 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2038 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2040 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2042 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2044 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2046 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2048 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2051 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2054 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2057 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2059 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2060 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2062 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2064 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2065 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2067 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.2068 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.2069 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2070 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2071 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2072 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2073 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2074 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.2075 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.2076 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.2077 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.2078 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.2079 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.2080 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.2081 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.2082 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2083 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.2084 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.2085 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.2086 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.2087 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.2088 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.2089 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.2090 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.2091 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.2092 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2093 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.2094 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.2095 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.2096 = private unnamed_addr constant [19 x i8] c"a variable named '\00" +@.str.2097 = private unnamed_addr constant [22 x i8] c"' already exists here\00" +@.str.2098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2099 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2100 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2101 = private unnamed_addr constant [36 x i8] c"' is already the name of a function\00" +@.str.2102 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2103 = private unnamed_addr constant [39 x i8] c"' is a built-in name, pick another one\00" +@.str.2104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2105 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2107 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2109 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2110 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2112 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2113 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2114 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2116 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.2117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2118 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.2119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2120 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2121 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.2122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2123 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.2124 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.2125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2126 = private unnamed_addr constant [2 x i8] c"$\00" +@.str.2127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2128 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2130 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.2131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2133 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.2134 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2136 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.2137 = private unnamed_addr constant [4 x i8] c"@V\09\00" +@.str.2138 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2139 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2141 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.2142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2143 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2144 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2145 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2146 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2147 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.2148 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2149 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2150 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2151 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.2152 = private unnamed_addr constant [2 x i8] c" \00" +@.str.2153 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.2154 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2156 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2157 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2158 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.2159 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2160 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2162 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2164 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.2165 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2166 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2168 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2169 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2170 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2173 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2177 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2179 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2181 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2183 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2186 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2187 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2189 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.2190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2191 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2192 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2195 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.2196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2197 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2198 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2199 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2200 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2201 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2202 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.2203 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.2204 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.2205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2206 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2207 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.2208 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.2209 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.2210 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.2211 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.2212 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.2213 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.2214 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.2215 = private unnamed_addr constant [7 x i8] c"assign\00" +@.str.2216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2217 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.2218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2219 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" +@.str.2220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2221 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.2222 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.2223 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2224 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2225 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2227 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2229 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2230 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2231 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2232 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2233 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2235 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2236 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2238 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2239 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2240 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2241 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2242 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2243 = private unnamed_addr constant [13 x i8] c"the struct '\00" +@.str.2244 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2245 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2246 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2248 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2249 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2250 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2251 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2252 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2254 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2256 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2258 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2259 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2260 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2261 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2264 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2265 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2266 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2268 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2269 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2270 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2271 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2272 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2273 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2274 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2275 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.2276 = private unnamed_addr constant [18 x i8] c" has the variant \00" +@.str.2277 = private unnamed_addr constant [7 x i8] c" twice\00" +@.str.2278 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2279 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.2280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2281 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2283 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2284 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2285 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2286 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2287 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2288 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2289 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.2290 = private unnamed_addr constant [18 x i8] c" has the variant \00" +@.str.2291 = private unnamed_addr constant [7 x i8] c" twice\00" +@.str.2292 = private unnamed_addr constant [17 x i8] c"two variants of \00" +@.str.2293 = private unnamed_addr constant [18 x i8] c" have the number \00" +@.str.2294 = private unnamed_addr constant [21 x i8] c" (give each its own)\00" +@.str.2295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2296 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.2297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2298 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.2299 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2300 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2301 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2302 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2303 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.2304 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2306 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2307 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2308 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2310 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2313 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2315 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2316 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2318 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2319 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2321 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2322 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2323 = private unnamed_addr constant [11 x i8] c"function '\00" +@.str.2324 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2326 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2327 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2328 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" +@.str.2329 = private unnamed_addr constant [54 x i8] c"' here (a method goes in the same file as its struct)\00" +@.str.2330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2331 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2332 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2333 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2335 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2337 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2338 = private unnamed_addr constant [12 x i8] c"the method \00" +@.str.2339 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2340 = private unnamed_addr constant [18 x i8] c" is defined twice\00" +@.str.2341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2342 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2343 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2344 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2345 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2346 = private unnamed_addr constant [27 x i8] c"there is no struct named '\00" +@.str.2347 = private unnamed_addr constant [77 x i8] c"' here (a method goes in the same file as its struct, or on a struct from C)\00" +@.str.2348 = private unnamed_addr constant [12 x i8] c"the method \00" +@.str.2349 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2350 = private unnamed_addr constant [18 x i8] c" is defined twice\00" +@.str.2351 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2352 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2353 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2354 = private unnamed_addr constant [12 x i8] c"the struct \00" +@.str.2355 = private unnamed_addr constant [29 x i8] c" already has a field named '\00" +@.str.2356 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2358 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2359 = private unnamed_addr constant [11 x i8] c"function '\00" +@.str.2360 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2361 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2362 = private unnamed_addr constant [44 x i8] c"' is a built-in function, pick another name\00" +@.str.2363 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2364 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2365 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2367 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2368 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2369 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2370 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2371 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2372 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2373 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2375 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.2376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2377 = private unnamed_addr constant [23 x i8] c"'self' is already the \00" +@.str.2378 = private unnamed_addr constant [25 x i8] c" the method is called on\00" +@.str.2379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2381 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2382 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2383 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2385 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2387 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2389 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2390 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2392 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2393 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2395 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2396 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2397 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2399 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2401 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2402 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.2403 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2405 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2407 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2408 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" +@.str.2409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2410 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2412 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2413 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2414 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2415 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2417 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2418 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2421 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.2422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2424 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2427 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" +@.str.2428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2429 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2431 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2433 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2436 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2437 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2441 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2442 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2444 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2445 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2446 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2449 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2450 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2451 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2452 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2453 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2455 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2456 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2458 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2459 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2460 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2461 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2462 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" +@.str.2463 = private unnamed_addr constant [29 x i8] c"' (a struct written struct \00" +@.str.2464 = private unnamed_addr constant [35 x i8] c"[T] { ... } takes type arguments)\00" +@.str.2465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2466 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2467 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2468 = private unnamed_addr constant [8 x i8] c" takes \00" +@.str.2469 = private unnamed_addr constant [25 x i8] c" type argument(s), like \00" +@.str.2470 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2471 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2472 = private unnamed_addr constant [12 x i8] c"], but got \00" +@.str.2473 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2474 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.2475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2476 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2477 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2478 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2479 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2480 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2481 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2482 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2483 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2484 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.2485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2486 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2487 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2489 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2490 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2491 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2492 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2493 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2494 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2496 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2498 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2500 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2502 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2504 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2506 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2508 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2509 = private unnamed_addr constant [18 x i8] c" (while building \00" +@.str.2510 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2512 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2517 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2519 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2521 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2523 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2525 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2527 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2529 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2530 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.2531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2532 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" +@.str.2533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2535 = private unnamed_addr constant [30 x i8] c"used .types on a null pointer\00" +@.str.2536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2538 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" +@.str.2539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2540 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2541 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2542 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.2543 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2544 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2545 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2546 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2547 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2548 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2550 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2551 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.2552 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2554 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2556 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2558 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2559 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2560 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2562 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2565 = private unnamed_addr constant [8 x i8] c" takes \00" +@.str.2566 = private unnamed_addr constant [28 x i8] c" type argument(s), but got \00" +@.str.2567 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2568 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2569 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2570 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2571 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2572 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.2573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2574 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2575 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2577 = private unnamed_addr constant [30 x i8] c"this has no type to work out \00" +@.str.2578 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2579 = private unnamed_addr constant [6 x i8] c" from\00" +@.str.2580 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2581 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2582 = private unnamed_addr constant [17 x i8] c"can't tell what \00" +@.str.2583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2584 = private unnamed_addr constant [25 x i8] c" is here; write it out: \00" +@.str.2585 = private unnamed_addr constant [11 x i8] c"[int](...)\00" +@.str.2586 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2588 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2591 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2593 = private unnamed_addr constant [11 x i8] c"argument '\00" +@.str.2594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2595 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2596 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2597 = private unnamed_addr constant [2 x i8] c" \00" +@.str.2598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2599 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.2600 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2601 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2602 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2603 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2605 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2606 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2607 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2608 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2609 = private unnamed_addr constant [7 x i8] c" x i8]\00" +@.str.2610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2611 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2612 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2614 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2615 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2616 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2617 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2620 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2622 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2623 = private unnamed_addr constant [7 x i8] c" x i8]\00" +@.str.2624 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2625 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2626 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2627 = private unnamed_addr constant [50 x i8] c"has fields Finch can't see (unions or bit fields)\00" +@.str.2628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2629 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2630 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2632 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2633 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2634 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2635 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2636 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2638 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2639 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2641 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.2642 = private unnamed_addr constant [6 x i8] c"%S.C.\00" +@.str.2643 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str.2644 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2645 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.2646 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2647 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2648 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2649 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2650 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2651 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2652 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2653 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2654 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2655 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2656 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2658 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2660 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2661 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2662 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2663 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2664 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2665 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2666 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2667 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2668 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2670 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2671 = private unnamed_addr constant [18 x i8] c" (while building \00" +@.str.2672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2673 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2674 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2675 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2676 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2677 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2678 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2679 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2680 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2681 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2682 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2683 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2684 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2685 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2686 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2687 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2690 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2691 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2694 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2695 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2696 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2697 = private unnamed_addr constant [12 x i8] c"the struct \00" +@.str.2698 = private unnamed_addr constant [27 x i8] c" contains itself; use ptr[\00" +@.str.2699 = private unnamed_addr constant [8 x i8] c"] or []\00" +@.str.2700 = private unnamed_addr constant [16 x i8] c" for that field\00" +@.str.2701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2702 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2703 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2705 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2707 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2710 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2711 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2712 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2713 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2714 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2715 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2716 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2717 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2718 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2719 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2720 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2721 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2722 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2724 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2725 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2726 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2727 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2728 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2729 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2730 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2731 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2732 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2733 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.2734 = private unnamed_addr constant [4 x i8] c"%S.\00" +@.str.2735 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2736 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2737 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2738 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2739 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2740 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2742 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str.2743 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2744 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.2745 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2746 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2747 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2748 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2749 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2750 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2752 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.2753 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2754 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2755 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.2756 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.2757 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.2758 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.2759 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.2760 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.2761 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2762 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.2763 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2764 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2765 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2766 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.2767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2768 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2770 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2772 = private unnamed_addr constant [43 x i8] c"!DIDerivedType(tag: DW_TAG_member, name: \22\00" +@.str.2773 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" +@.str.2774 = private unnamed_addr constant [10 x i8] c", file: !\00" +@.str.2775 = private unnamed_addr constant [9 x i8] c", line: \00" +@.str.2776 = private unnamed_addr constant [13 x i8] c", baseType: \00" +@.str.2777 = private unnamed_addr constant [9 x i8] c", size: \00" +@.str.2778 = private unnamed_addr constant [11 x i8] c", offset: \00" +@.str.2779 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2780 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" +@.str.2781 = private unnamed_addr constant [10 x i8] c"\22, size: \00" +@.str.2782 = private unnamed_addr constant [13 x i8] c", encoding: \00" +@.str.2783 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2784 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2785 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2786 = private unnamed_addr constant [3 x i8] c"T:\00" +@.str.2787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2788 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2790 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2791 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2792 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2793 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.2794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2795 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2796 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2797 = private unnamed_addr constant [15 x i8] c"DW_ATE_boolean\00" +@.str.2798 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2799 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2800 = private unnamed_addr constant [19 x i8] c"DW_ATE_signed_char\00" +@.str.2801 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2802 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2803 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" +@.str.2804 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2805 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2806 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" +@.str.2807 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2808 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2809 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" +@.str.2810 = private unnamed_addr constant [16 x i8] c"DW_ATE_unsigned\00" +@.str.2811 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" +@.str.2812 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.2813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2814 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.2815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2816 = private unnamed_addr constant [22 x i8] c"!DIEnumerator(name: \22\00" +@.str.2817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2818 = private unnamed_addr constant [11 x i8] c"\22, value: \00" +@.str.2819 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2820 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2821 = private unnamed_addr constant [55 x i8] c"!DICompositeType(tag: DW_TAG_enumeration_type, name: \22\00" +@.str.2822 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2823 = private unnamed_addr constant [25 x i8] c", size: 32, elements: !{\00" +@.str.2824 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2825 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2826 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2828 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2829 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2831 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" +@.str.2832 = private unnamed_addr constant [12 x i8] c", size: 64)\00" +@.str.2833 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2834 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2836 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.2837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2838 = private unnamed_addr constant [20 x i8] c"!DISubrange(count: \00" +@.str.2839 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2840 = private unnamed_addr constant [52 x i8] c"!DICompositeType(tag: DW_TAG_array_type, baseType: \00" +@.str.2841 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2842 = private unnamed_addr constant [9 x i8] c", size: \00" +@.str.2843 = private unnamed_addr constant [16 x i8] c", elements: !{!\00" +@.str.2844 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2846 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2847 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2848 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2849 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2850 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2851 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2853 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" +@.str.2854 = private unnamed_addr constant [12 x i8] c", size: 64)\00" +@.str.2855 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2856 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2857 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.2858 = private unnamed_addr constant [4 x i8] c"cap\00" +@.str.2859 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" +@.str.2860 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2861 = private unnamed_addr constant [38 x i8] c", size: 192, align: 64, elements: !{!\00" +@.str.2862 = private unnamed_addr constant [4 x i8] c", !\00" +@.str.2863 = private unnamed_addr constant [4 x i8] c", !\00" +@.str.2864 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2865 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2866 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2867 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2868 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2869 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2870 = private unnamed_addr constant [67 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)\00" +@.str.2871 = private unnamed_addr constant [8 x i8] c"entries\00" +@.str.2872 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.2873 = private unnamed_addr constant [5 x i8] c"used\00" +@.str.2874 = private unnamed_addr constant [4 x i8] c"cap\00" +@.str.2875 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.2876 = private unnamed_addr constant [5 x i8] c"icap\00" +@.str.2877 = private unnamed_addr constant [5 x i8] c"adds\00" +@.str.2878 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2879 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2880 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" +@.str.2881 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2882 = private unnamed_addr constant [37 x i8] c", size: 448, align: 64, elements: !{\00" +@.str.2883 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2884 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2886 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2887 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2888 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2889 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2890 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2892 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2893 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2894 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2896 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2897 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" +@.str.2898 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2899 = private unnamed_addr constant [9 x i8] c", size: \00" +@.str.2900 = private unnamed_addr constant [25 x i8] c", align: 8, elements: !{\00" +@.str.2901 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2902 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2904 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2905 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2906 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" +@.str.2907 = private unnamed_addr constant [40 x i8] c"\22, size: 64, encoding: DW_ATE_unsigned)\00" +@.str.2908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2909 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2912 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2913 = private unnamed_addr constant [3 x i8] c"L:\00" +@.str.2914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2915 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.2916 = private unnamed_addr constant [2 x i8] c":\00" +@.str.2917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2918 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.2919 = private unnamed_addr constant [2 x i8] c":\00" +@.str.2920 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2921 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2923 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2924 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2925 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2926 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2927 = private unnamed_addr constant [19 x i8] c"!DILocation(line: \00" +@.str.2928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2929 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.2930 = private unnamed_addr constant [11 x i8] c", column: \00" +@.str.2931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2932 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.2933 = private unnamed_addr constant [11 x i8] c", scope: !\00" +@.str.2934 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2935 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2936 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2938 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2940 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.2941 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2942 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2943 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.2944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2945 = private unnamed_addr constant [28 x i8] c"!DISubroutineType(types: !{\00" +@.str.2946 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2947 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2948 = private unnamed_addr constant [31 x i8] c"distinct !DISubprogram(name: \22\00" +@.str.2949 = private unnamed_addr constant [18 x i8] c"\22, linkageName: \22\00" +@.str.2950 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2951 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" +@.str.2952 = private unnamed_addr constant [10 x i8] c", file: !\00" +@.str.2953 = private unnamed_addr constant [9 x i8] c", line: \00" +@.str.2954 = private unnamed_addr constant [10 x i8] c", type: !\00" +@.str.2955 = private unnamed_addr constant [14 x i8] c", scopeLine: \00" +@.str.2956 = private unnamed_addr constant [88 x i8] c", flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagLocalToUnit, unit: !0)\00" +@.str.2957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2958 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.2959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2960 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2961 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2962 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2963 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.2964 = private unnamed_addr constant [8 x i8] c", arg: \00" +@.str.2965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2966 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.2967 = private unnamed_addr constant [25 x i8] c"!DILocalVariable(name: \22\00" +@.str.2968 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" +@.str.2969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2970 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2971 = private unnamed_addr constant [10 x i8] c", file: !\00" +@.str.2972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2973 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.2974 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2975 = private unnamed_addr constant [9 x i8] c", line: \00" +@.str.2976 = private unnamed_addr constant [10 x i8] c", type: !\00" +@.str.2977 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2978 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2979 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.2980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2981 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.2982 = private unnamed_addr constant [42 x i8] c"call void @llvm.dbg.declare(metadata ptr \00" +@.str.2983 = private unnamed_addr constant [13 x i8] c", metadata !\00" +@.str.2984 = private unnamed_addr constant [28 x i8] c", metadata !DIExpression())\00" +@.str.2985 = private unnamed_addr constant [21 x i8] c"!llvm.dbg.cu = !{!0}\00" +@.str.2986 = private unnamed_addr constant [31 x i8] c"!llvm.module.flags = !{!1, !2}\00" +@.str.2987 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2988 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2989 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2990 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.2991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2992 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2993 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2994 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.2995 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.2996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2997 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2998 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2999 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3000 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3001 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3002 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3003 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3004 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.3005 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3006 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3007 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3008 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.3009 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3010 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3011 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3012 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.3013 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3014 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3015 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.3016 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3017 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3018 = private unnamed_addr constant [18 x i8] c" (while building \00" +@.str.3019 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3020 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3021 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3023 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.3024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3025 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.3026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3027 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3028 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3030 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3032 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3033 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.3034 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3035 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.3036 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3037 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.3038 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3039 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3040 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3041 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.3042 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3043 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.3044 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3045 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.3046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3047 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.3048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3049 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.3050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3051 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.3052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3053 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.3054 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3055 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3057 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3059 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3060 = private unnamed_addr constant [10 x i8] c"ptr %self\00" +@.str.3061 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3062 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3063 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3064 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3066 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3068 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3070 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3072 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.3073 = private unnamed_addr constant [6 x i8] c"%self\00" +@.str.3074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3075 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.3076 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.3077 = private unnamed_addr constant [6 x i8] c"%self\00" +@.str.3078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3079 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3080 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3081 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3082 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3083 = private unnamed_addr constant [4 x i8] c" %p\00" +@.str.3084 = private unnamed_addr constant [3 x i8] c"%p\00" +@.str.3085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3086 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3087 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3089 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.3090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3091 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3092 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3093 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.3094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3095 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3096 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3099 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3100 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3102 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.3103 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3105 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3107 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3108 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3109 = private unnamed_addr constant [11 x i8] c"function '\00" +@.str.3110 = private unnamed_addr constant [39 x i8] c"' can reach its end without returning \00" +@.str.3111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3112 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3114 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3115 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3117 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3118 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" +@.str.3119 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.3120 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3121 = private unnamed_addr constant [8 x i8] c" !dbg !\00" +@.str.3122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3123 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.3124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.3126 = private unnamed_addr constant [17 x i8] c"define internal \00" +@.str.3127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3128 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3129 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3131 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3132 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.3133 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3134 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3135 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" +@.str.3136 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3137 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.3138 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.3139 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.3140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3141 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.3142 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.3143 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" +@.str.3144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3145 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3146 = private unnamed_addr constant [67 x i8] c"this code can never run (it comes after return, break or continue)\00" +@.str.3147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3148 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.3149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3150 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.3151 = private unnamed_addr constant [6 x i8] c"block\00" +@.str.3152 = private unnamed_addr constant [5 x i8] c"decl\00" +@.str.3153 = private unnamed_addr constant [7 x i8] c"assign\00" +@.str.3154 = private unnamed_addr constant [5 x i8] c"expr\00" +@.str.3155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3156 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.3157 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3159 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.3160 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.3161 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.3162 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.3163 = private unnamed_addr constant [5 x i8] c"each\00" +@.str.3164 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.3165 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.3166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3167 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3168 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" +@.str.3169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3170 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3172 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3175 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3178 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3182 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3185 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.3186 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.3187 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.3188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3189 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3190 = private unnamed_addr constant [28 x i8] c" can't be used inside defer\00" +@.str.3191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3192 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3193 = private unnamed_addr constant [32 x i8] c" can only be used inside a loop\00" +@.str.3194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3195 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3197 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3198 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3199 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.3200 = private unnamed_addr constant [19 x i8] c"unknown statement \00" +@.str.3201 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3202 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3204 = private unnamed_addr constant [47 x i8] c"this gives back nothing, so it can't be stored\00" +@.str.3205 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3206 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3207 = private unnamed_addr constant [35 x i8] c"null needs a type, like: ptr[int] \00" +@.str.3208 = private unnamed_addr constant [8 x i8] c" = null\00" +@.str.3209 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3210 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3211 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3212 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3213 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3215 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.3216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3217 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3218 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.3219 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3221 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3222 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3223 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" +@.str.3224 = private unnamed_addr constant [19 x i8] c"' (create it with \00" +@.str.3225 = private unnamed_addr constant [9 x i8] c" := ...)\00" +@.str.3226 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" +@.str.3227 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" +@.str.3228 = private unnamed_addr constant [10 x i8] c"the value\00" +@.str.3229 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3230 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3231 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3232 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.3233 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3234 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3235 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3236 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3238 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3240 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3242 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3243 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3244 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3245 = private unnamed_addr constant [12 x i8] c"a condition\00" +@.str.3246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3247 = private unnamed_addr constant [5 x i8] c"then\00" +@.str.3248 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.3249 = private unnamed_addr constant [6 x i8] c"endif\00" +@.str.3250 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3251 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3252 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3254 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3255 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3256 = private unnamed_addr constant [11 x i8] c"while.cond\00" +@.str.3257 = private unnamed_addr constant [11 x i8] c"while.body\00" +@.str.3258 = private unnamed_addr constant [10 x i8] c"while.end\00" +@.str.3259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3260 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3262 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.3263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3265 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3266 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3267 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3269 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3270 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3271 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3273 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3275 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3276 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.3277 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.3278 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.3279 = private unnamed_addr constant [5 x i8] c"each\00" +@.str.3280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3281 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3283 = private unnamed_addr constant [21 x i8] c"the start of a range\00" +@.str.3284 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3285 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3286 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3287 = private unnamed_addr constant [19 x i8] c"the end of a range\00" +@.str.3288 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3289 = private unnamed_addr constant [9 x i8] c"for.cond\00" +@.str.3290 = private unnamed_addr constant [9 x i8] c"for.body\00" +@.str.3291 = private unnamed_addr constant [9 x i8] c"for.step\00" +@.str.3292 = private unnamed_addr constant [8 x i8] c"for.end\00" +@.str.3293 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3294 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3295 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3296 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3297 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3299 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3301 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3302 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3303 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3304 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3306 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3307 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3308 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3309 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3310 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3313 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3315 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3316 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3317 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3318 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3319 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3320 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3321 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3322 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" +@.str.3323 = private unnamed_addr constant [9 x i8] c"map.cond\00" +@.str.3324 = private unnamed_addr constant [10 x i8] c"map.check\00" +@.str.3325 = private unnamed_addr constant [9 x i8] c"map.body\00" +@.str.3326 = private unnamed_addr constant [9 x i8] c"map.step\00" +@.str.3327 = private unnamed_addr constant [8 x i8] c"map.end\00" +@.str.3328 = private unnamed_addr constant [12 x i8] c"map.changed\00" +@.str.3329 = private unnamed_addr constant [9 x i8] c"map.same\00" +@.str.3330 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3331 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3332 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3333 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" +@.str.3334 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.3335 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3336 = private unnamed_addr constant [34 x i8] c"call void @finch_map_changed(ptr \00" +@.str.3337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3338 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.3339 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3340 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3341 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3342 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3344 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3345 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3346 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3347 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3348 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3349 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" +@.str.3350 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3351 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3352 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3353 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.3354 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3356 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3358 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3360 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3363 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3365 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3366 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3367 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3368 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3369 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3370 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3371 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3372 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3373 = private unnamed_addr constant [6 x i8] c"$list\00" +@.str.3374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3375 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.3376 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3377 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3378 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3380 = private unnamed_addr constant [56 x i8] c"for ... in needs an array, a str or a map, but this is \00" +@.str.3381 = private unnamed_addr constant [37 x i8] c" (for a range of numbers write 0..n)\00" +@.str.3382 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.3383 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3387 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3388 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3389 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3390 = private unnamed_addr constant [10 x i8] c"each.cond\00" +@.str.3391 = private unnamed_addr constant [10 x i8] c"each.body\00" +@.str.3392 = private unnamed_addr constant [10 x i8] c"each.step\00" +@.str.3393 = private unnamed_addr constant [9 x i8] c"each.end\00" +@.str.3394 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3395 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" +@.str.3396 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.3397 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3398 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3399 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3400 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.3401 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3402 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3403 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3405 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3407 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3409 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3410 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3412 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3413 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3414 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3415 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3416 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3417 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3418 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3419 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3421 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3422 = private unnamed_addr constant [34 x i8] c"return can't be used inside defer\00" +@.str.3423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3424 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.3425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3426 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.3427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3429 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3430 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3431 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3432 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3433 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3435 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3436 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3437 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3439 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3440 = private unnamed_addr constant [65 x i8] c"' can't fail, so it can't return an error (make it fallible: -> \00" +@.str.3441 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3442 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.3443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3444 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3446 = private unnamed_addr constant [18 x i8] c"the error message\00" +@.str.3447 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3449 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3450 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3451 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3453 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3454 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" +@.str.3455 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.3456 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3457 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3458 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3459 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3460 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3461 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3462 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3464 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3465 = private unnamed_addr constant [47 x i8] c"' doesn't return a value (it has no '-> type')\00" +@.str.3466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3467 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3468 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3469 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3470 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3471 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" +@.str.3472 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.3473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3474 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3475 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3477 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3478 = private unnamed_addr constant [15 x i8] c"' must return \00" +@.str.3479 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3480 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3482 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3483 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3484 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3485 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3486 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3487 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3489 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3490 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3491 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3494 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.3495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3496 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3498 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3500 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.3501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3502 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3506 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3508 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3512 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3517 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3519 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3521 = private unnamed_addr constant [19 x i8] c"the returned value\00" +@.str.3522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3523 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3524 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3526 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3527 = private unnamed_addr constant [29 x i8] c" zeroinitializer, i1 true, 0\00" +@.str.3528 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3530 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3531 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3532 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3534 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3535 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3536 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3537 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3539 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3540 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3541 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3543 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3544 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3546 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3547 = private unnamed_addr constant [8 x i8] c"{ i64, \00" +@.str.3548 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3549 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3550 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3551 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.3552 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" +@.str.3553 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" +@.str.3554 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.3555 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3556 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3557 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" +@.str.3558 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3559 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3560 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3561 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3562 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3563 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str.3564 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3566 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3567 = private unnamed_addr constant [2 x i8] c"1\00" +@.str.3568 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.3569 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3570 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3571 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3573 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.3574 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_find(\00" +@.str.3575 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3576 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3577 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.3578 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.3579 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3580 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_slot(\00" +@.str.3581 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3582 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3583 = private unnamed_addr constant [8 x i8] c"map.new\00" +@.str.3584 = private unnamed_addr constant [9 x i8] c"map.have\00" +@.str.3585 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.3586 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.3587 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3591 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3593 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3595 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3596 = private unnamed_addr constant [8 x i8] c"the key\00" +@.str.3597 = private unnamed_addr constant [45 x i8] c"this is a temporary map, it can't be changed\00" +@.str.3598 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3599 = private unnamed_addr constant [12 x i8] c"map.missing\00" +@.str.3600 = private unnamed_addr constant [10 x i8] c"map.found\00" +@.str.3601 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3602 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3603 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3604 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3605 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.3606 = private unnamed_addr constant [34 x i8] c"call void @finch_map_missing(ptr \00" +@.str.3607 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3608 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.3609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3610 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3611 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3612 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3613 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3615 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3616 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3617 = private unnamed_addr constant [53 x i8] c"an empty [:] needs a type, like: map[str]int m = [:]\00" +@.str.3618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3619 = private unnamed_addr constant [6 x i8] c"unary\00" +@.str.3620 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.3621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3622 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3623 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3624 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3625 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3626 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3627 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3629 = private unnamed_addr constant [36 x i8] c"a map key needs a value with a type\00" +@.str.3630 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3631 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3633 = private unnamed_addr constant [38 x i8] c"a map value needs a value with a type\00" +@.str.3634 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3635 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.3636 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3637 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3639 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3642 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3644 = private unnamed_addr constant [22 x i8] c"every key of this map\00" +@.str.3645 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3646 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3647 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3648 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3649 = private unnamed_addr constant [24 x i8] c"every value of this map\00" +@.str.3650 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3651 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3652 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3653 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3654 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.3655 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.3656 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.3657 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.3658 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3660 = private unnamed_addr constant [8 x i8] c"the key\00" +@.str.3661 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" +@.str.3662 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3663 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.3664 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3665 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.3666 = private unnamed_addr constant [11 x i8] c"remove.hit\00" +@.str.3667 = private unnamed_addr constant [11 x i8] c"remove.end\00" +@.str.3668 = private unnamed_addr constant [36 x i8] c"call void @finch_map_remove_at(ptr \00" +@.str.3669 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3670 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3671 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3672 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3673 = private unnamed_addr constant [10 x i8] c"get.found\00" +@.str.3674 = private unnamed_addr constant [12 x i8] c"get.missing\00" +@.str.3675 = private unnamed_addr constant [9 x i8] c"get.fend\00" +@.str.3676 = private unnamed_addr constant [9 x i8] c"get.mend\00" +@.str.3677 = private unnamed_addr constant [8 x i8] c"get.end\00" +@.str.3678 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3679 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3680 = private unnamed_addr constant [12 x i8] c"the default\00" +@.str.3681 = private unnamed_addr constant [5 x i8] c"phi \00" +@.str.3682 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.3683 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3684 = private unnamed_addr constant [7 x i8] c" ], [ \00" +@.str.3685 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3686 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.3687 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.3688 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3689 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3690 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3691 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" +@.str.3692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3693 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.3694 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.3695 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.3696 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3697 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3698 = private unnamed_addr constant [32 x i8] c"call void @finch_map_clear(ptr \00" +@.str.3699 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3700 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3701 = private unnamed_addr constant [5 x i8] c"keys\00" +@.str.3702 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.3703 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.3704 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3705 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3706 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.3707 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3708 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3709 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3710 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.3711 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" +@.str.3712 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3713 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3714 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3715 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.3716 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3717 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3718 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3719 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3720 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3721 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3722 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" +@.str.3723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3724 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.3725 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.3726 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.3727 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3728 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3729 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3730 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3731 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3732 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3733 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3734 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3735 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3736 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3737 = private unnamed_addr constant [22 x i8] c"a map has no method '\00" +@.str.3738 = private unnamed_addr constant [50 x i8] c"' (it has: has, get, remove, clear, keys, values)\00" +@.str.3739 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3740 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3742 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.3743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3744 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3745 = private unnamed_addr constant [23 x i8] c"' is not a variant of \00" +@.str.3746 = private unnamed_addr constant [11 x i8] c" (it has: \00" +@.str.3747 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3748 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3749 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3750 = private unnamed_addr constant [13 x i8] c"this pattern\00" +@.str.3751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3752 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3753 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3755 = private unnamed_addr constant [31 x i8] c"there is nothing to match here\00" +@.str.3756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3757 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3758 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3759 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3760 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.3761 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3762 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3763 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3764 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.3765 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3766 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3767 = private unnamed_addr constant [10 x i8] c"match.end\00" +@.str.3768 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3770 = private unnamed_addr constant [73 x i8] c"this arm can never be used: 'else' already takes everything that is left\00" +@.str.3771 = private unnamed_addr constant [10 x i8] c"match.arm\00" +@.str.3772 = private unnamed_addr constant [11 x i8] c"match.next\00" +@.str.3773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3774 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3775 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3777 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00" +@.str.3778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3779 = private unnamed_addr constant [53 x i8] c"an arm with several variants can't name their values\00" +@.str.3780 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.3781 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3782 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3783 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3784 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3785 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00" +@.str.3786 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.3787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3788 = private unnamed_addr constant [9 x i8] c"match.or\00" +@.str.3789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3790 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.3791 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3792 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3793 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.3794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3795 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.3796 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3798 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3799 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.3800 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3801 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3803 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3804 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3806 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3807 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3808 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3809 = private unnamed_addr constant [53 x i8] c"an arm of a match that gives a value has to give one\00" +@.str.3810 = private unnamed_addr constant [58 x i8] c"this arm (the arms of a match have to give the same type)\00" +@.str.3811 = private unnamed_addr constant [11 x i8] c"match.from\00" +@.str.3812 = private unnamed_addr constant [6 x i8] c"block\00" +@.str.3813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3814 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3816 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.3817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3819 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.3820 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3821 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3822 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00" +@.str.3823 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3824 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00" +@.str.3825 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3826 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3827 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.3828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3829 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3831 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00" +@.str.3832 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3833 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00" +@.str.3834 = private unnamed_addr constant [12 x i8] c"a match on \00" +@.str.3835 = private unnamed_addr constant [55 x i8] c" needs an 'else' arm for everything that is not listed\00" +@.str.3836 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.3837 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" +@.str.3838 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3840 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3841 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3842 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3843 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3844 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3845 = private unnamed_addr constant [5 x i8] c"phi \00" +@.str.3846 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3847 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3848 = private unnamed_addr constant [3 x i8] c"[ \00" +@.str.3849 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3850 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3851 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3852 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.3853 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3854 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.3855 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.3856 = private unnamed_addr constant [81 x i8] c"only a function call can fail; 'or' and 'try' go after one, like int(text) or 0\00" +@.str.3857 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3858 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.3859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3860 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3862 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3863 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3864 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.3865 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3866 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3867 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3868 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3870 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3871 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3872 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3873 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3874 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3875 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3876 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.3877 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3878 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3879 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3880 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3881 = private unnamed_addr constant [51 x i8] c"this call can't fail, so it needs no 'or' or 'try'\00" +@.str.3882 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3883 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3884 = private unnamed_addr constant [31 x i8] c"try can't be used inside defer\00" +@.str.3885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3886 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3887 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3888 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3889 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3890 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3892 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3893 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3894 = private unnamed_addr constant [30 x i8] c"try passes the error on, so '\00" +@.str.3895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3896 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3897 = private unnamed_addr constant [32 x i8] c"' must be able to fail too (-> \00" +@.str.3898 = private unnamed_addr constant [56 x i8] c"); or handle it here: ... or / ... or { ... }\00" +@.str.3899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3900 = private unnamed_addr constant [11 x i8] c"try.failed\00" +@.str.3901 = private unnamed_addr constant [7 x i8] c"try.ok\00" +@.str.3902 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3904 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3905 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3906 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3907 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3908 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3909 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" +@.str.3910 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.3911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3912 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3914 = private unnamed_addr constant [10 x i8] c"or.failed\00" +@.str.3915 = private unnamed_addr constant [6 x i8] c"or.ok\00" +@.str.3916 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.3917 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3918 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3919 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3920 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3921 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3923 = private unnamed_addr constant [143 x i8] c"this block must leave with return, break, continue or exit(...): after a failure there is no value to go on with (or give one: ... or )\00" +@.str.3924 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3925 = private unnamed_addr constant [7 x i8] c"or.end\00" +@.str.3926 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3927 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3929 = private unnamed_addr constant [99 x i8] c"this call gives back no value, so there is nothing to replace; handle the failure with or { ... }\00" +@.str.3930 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.3931 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3932 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3934 = private unnamed_addr constant [21 x i8] c"the value after 'or'\00" +@.str.3935 = private unnamed_addr constant [8 x i8] c"or.bend\00" +@.str.3936 = private unnamed_addr constant [7 x i8] c"or.end\00" +@.str.3937 = private unnamed_addr constant [5 x i8] c"phi \00" +@.str.3938 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.3939 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3940 = private unnamed_addr constant [7 x i8] c" ], [ \00" +@.str.3941 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3942 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.3943 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3944 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3945 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3946 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3947 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.3948 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3949 = private unnamed_addr constant [3 x i8] c"0X\00" +@.str.3950 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3951 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3953 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3954 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3955 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3956 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3957 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3958 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.3959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3960 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.3961 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3962 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3963 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3964 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3965 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3966 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.3967 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.3968 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.3969 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.3970 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.3971 = private unnamed_addr constant [6 x i8] c"unary\00" +@.str.3972 = private unnamed_addr constant [7 x i8] c"binary\00" +@.str.3973 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.3974 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.3975 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3976 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3977 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3978 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3979 = private unnamed_addr constant [20 x i8] c"unknown expression \00" +@.str.3980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3981 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3982 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3983 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3984 = private unnamed_addr constant [20 x i8] c"the value after '!'\00" +@.str.3985 = private unnamed_addr constant [8 x i8] c"xor i1 \00" +@.str.3986 = private unnamed_addr constant [7 x i8] c", true\00" +@.str.3987 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3988 = private unnamed_addr constant [2 x i8] c"~\00" +@.str.3989 = private unnamed_addr constant [46 x i8] c"'~' flips the bits of a whole number, not of \00" +@.str.3990 = private unnamed_addr constant [5 x i8] c"xor \00" +@.str.3991 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3992 = private unnamed_addr constant [5 x i8] c", -1\00" +@.str.3993 = private unnamed_addr constant [35 x i8] c" can't be negative (it's unsigned)\00" +@.str.3994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3995 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.3996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3997 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.3998 = private unnamed_addr constant [5 x i8] c"sub \00" +@.str.3999 = private unnamed_addr constant [5 x i8] c" 0, \00" +@.str.4000 = private unnamed_addr constant [6 x i8] c"fneg \00" +@.str.4001 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4002 = private unnamed_addr constant [27 x i8] c"can't put '-' in front of \00" +@.str.4003 = private unnamed_addr constant [12 x i8] c"can't use '\00" +@.str.4004 = private unnamed_addr constant [6 x i8] c"' on \00" +@.str.4005 = private unnamed_addr constant [6 x i8] c" and \00" +@.str.4006 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4007 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4008 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4009 = private unnamed_addr constant [49 x i8] c" (turn the other side into text first: str(...))\00" +@.str.4010 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4011 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.4012 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4013 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4014 = private unnamed_addr constant [27 x i8] c" (for true/false use '&&')\00" +@.str.4015 = private unnamed_addr constant [27 x i8] c" (for true/false use '||')\00" +@.str.4016 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4017 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.4018 = private unnamed_addr constant [2 x i8] c"^\00" +@.str.4019 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.4020 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.4021 = private unnamed_addr constant [44 x i8] c" (bit operators work on whole numbers only)\00" +@.str.4022 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4023 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4024 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4025 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4026 = private unnamed_addr constant [32 x i8] c" (compare the parts one by one)\00" +@.str.4027 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4028 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4030 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4032 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4034 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4036 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4037 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4038 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4040 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4042 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4044 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4046 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4048 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4050 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4051 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4052 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4054 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4056 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4057 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4058 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4059 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4060 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4062 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4064 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4066 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4068 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4070 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4072 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4074 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4076 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4077 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4078 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4079 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4080 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4082 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4084 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4086 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4087 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4088 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4089 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4090 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4091 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4092 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4093 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4094 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4095 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4096 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4098 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4099 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4100 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4102 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4103 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4105 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4107 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4109 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4111 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4112 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4113 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4114 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4116 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4118 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4120 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4122 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4123 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4125 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4126 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4127 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4128 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4129 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4131 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4133 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4134 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4136 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4137 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4138 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4139 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4140 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4142 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4143 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4144 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4145 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4146 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4147 = private unnamed_addr constant [33 x i8] c"call void @finch_str_concat(ptr \00" +@.str.4148 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4149 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4150 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4151 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4152 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4153 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4154 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.4155 = private unnamed_addr constant [2 x i8] c"*\00" +@.str.4156 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.4157 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4158 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4159 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.4160 = private unnamed_addr constant [2 x i8] c"^\00" +@.str.4161 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.4162 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.4163 = private unnamed_addr constant [4 x i8] c"add\00" +@.str.4164 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.4165 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str.4166 = private unnamed_addr constant [5 x i8] c"sdiv\00" +@.str.4167 = private unnamed_addr constant [5 x i8] c"srem\00" +@.str.4168 = private unnamed_addr constant [4 x i8] c"and\00" +@.str.4169 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.4170 = private unnamed_addr constant [4 x i8] c"xor\00" +@.str.4171 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str.4172 = private unnamed_addr constant [5 x i8] c"ashr\00" +@.str.4173 = private unnamed_addr constant [4 x i8] c"add\00" +@.str.4174 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.4175 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str.4176 = private unnamed_addr constant [5 x i8] c"udiv\00" +@.str.4177 = private unnamed_addr constant [5 x i8] c"urem\00" +@.str.4178 = private unnamed_addr constant [4 x i8] c"and\00" +@.str.4179 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.4180 = private unnamed_addr constant [4 x i8] c"xor\00" +@.str.4181 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str.4182 = private unnamed_addr constant [5 x i8] c"lshr\00" +@.str.4183 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.4184 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4185 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4186 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.4187 = private unnamed_addr constant [9 x i8] c"icmp eq \00" +@.str.4188 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4189 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4190 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.4191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4192 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4193 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4194 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4195 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4196 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.4197 = private unnamed_addr constant [2 x i8] c"*\00" +@.str.4198 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.4199 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4200 = private unnamed_addr constant [5 x i8] c"fadd\00" +@.str.4201 = private unnamed_addr constant [5 x i8] c"fsub\00" +@.str.4202 = private unnamed_addr constant [5 x i8] c"fmul\00" +@.str.4203 = private unnamed_addr constant [5 x i8] c"fdiv\00" +@.str.4204 = private unnamed_addr constant [5 x i8] c"frem\00" +@.str.4205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4206 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4207 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4208 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4209 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4210 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4211 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4212 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4213 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4214 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4215 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4216 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4217 = private unnamed_addr constant [60 x i8] c"a str is never null; to check for empty text use s.len == 0\00" +@.str.4218 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4219 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4220 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4221 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4222 = private unnamed_addr constant [6 x i8] c" ptr \00" +@.str.4223 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4224 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4225 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4226 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4227 = private unnamed_addr constant [28 x i8] c"call i32 @finch_str_eq(ptr \00" +@.str.4228 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4229 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4230 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4231 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4232 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4233 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4234 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str.4235 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4236 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4237 = private unnamed_addr constant [29 x i8] c"call i64 @finch_str_cmp(ptr \00" +@.str.4238 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4239 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4240 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4241 = private unnamed_addr constant [6 x i8] c" i64 \00" +@.str.4242 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4243 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4244 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4245 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4246 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.4247 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.4248 = private unnamed_addr constant [2 x i8] c">\00" +@.str.4249 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.4250 = private unnamed_addr constant [4 x i8] c"oeq\00" +@.str.4251 = private unnamed_addr constant [4 x i8] c"une\00" +@.str.4252 = private unnamed_addr constant [4 x i8] c"olt\00" +@.str.4253 = private unnamed_addr constant [4 x i8] c"ole\00" +@.str.4254 = private unnamed_addr constant [4 x i8] c"ogt\00" +@.str.4255 = private unnamed_addr constant [4 x i8] c"oge\00" +@.str.4256 = private unnamed_addr constant [6 x i8] c"fcmp \00" +@.str.4257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4258 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4259 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4260 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4261 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4262 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4263 = private unnamed_addr constant [116 x i8] c"enums can only be compared with == and != (to go through them in order, give the variants numbers and use int(...))\00" +@.str.4264 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4265 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4266 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4267 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4268 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str.4269 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4270 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4271 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4272 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4273 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4274 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4275 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4276 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4277 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4278 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4279 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4280 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4281 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.4282 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.4283 = private unnamed_addr constant [2 x i8] c">\00" +@.str.4284 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.4285 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4286 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4287 = private unnamed_addr constant [4 x i8] c"ult\00" +@.str.4288 = private unnamed_addr constant [4 x i8] c"ule\00" +@.str.4289 = private unnamed_addr constant [4 x i8] c"ugt\00" +@.str.4290 = private unnamed_addr constant [4 x i8] c"uge\00" +@.str.4291 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4292 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4293 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str.4294 = private unnamed_addr constant [4 x i8] c"sle\00" +@.str.4295 = private unnamed_addr constant [4 x i8] c"sgt\00" +@.str.4296 = private unnamed_addr constant [4 x i8] c"sge\00" +@.str.4297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4298 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.4299 = private unnamed_addr constant [3 x i8] c"||\00" +@.str.4300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4301 = private unnamed_addr constant [11 x i8] c"logic.from\00" +@.str.4302 = private unnamed_addr constant [10 x i8] c"logic.rhs\00" +@.str.4303 = private unnamed_addr constant [10 x i8] c"logic.end\00" +@.str.4304 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.4305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4306 = private unnamed_addr constant [11 x i8] c"logic.rend\00" +@.str.4307 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.4308 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.4309 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.4310 = private unnamed_addr constant [10 x i8] c"phi i1 [ \00" +@.str.4311 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.4312 = private unnamed_addr constant [7 x i8] c" ], [ \00" +@.str.4313 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.4314 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.4315 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4316 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4318 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.4319 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4320 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4321 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4322 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.4323 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.4324 = private unnamed_addr constant [2 x i8] c">\00" +@.str.4325 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.4326 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4327 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4329 = private unnamed_addr constant [48 x i8] c"an empty [] needs a type, like: []int nums = []\00" +@.str.4330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4331 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.4332 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4333 = private unnamed_addr constant [28 x i8] c"every element of this array\00" +@.str.4334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4335 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4336 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str.4337 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4338 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" +@.str.4339 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4340 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4341 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4342 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4344 = private unnamed_addr constant [42 x i8] c"insertvalue { ptr, i64, i64 } undef, ptr \00" +@.str.4345 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4346 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" +@.str.4347 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4348 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.4349 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" +@.str.4350 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4351 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.4352 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4353 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" +@.str.4354 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4355 = private unnamed_addr constant [61 x i8] c"this is a temporary value, it can't be changed or pointed to\00" +@.str.4356 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4358 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4360 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4362 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4363 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4365 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4367 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4368 = private unnamed_addr constant [8 x i8] c"fprintf\00" +@.str.4369 = private unnamed_addr constant [6 x i8] c"stdin\00" +@.str.4370 = private unnamed_addr constant [7 x i8] c"stdout\00" +@.str.4371 = private unnamed_addr constant [7 x i8] c"stderr\00" +@.str.4372 = private unnamed_addr constant [2 x i8] c"2\00" +@.str.4373 = private unnamed_addr constant [6 x i8] c"stdin\00" +@.str.4374 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4375 = private unnamed_addr constant [7 x i8] c"stdout\00" +@.str.4376 = private unnamed_addr constant [2 x i8] c"1\00" +@.str.4377 = private unnamed_addr constant [32 x i8] c"call ptr @finch_std_stream(i32 \00" +@.str.4378 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4379 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4381 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4382 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4383 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4386 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4387 = private unnamed_addr constant [3 x i8] c"g:\00" +@.str.4388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4389 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4390 = private unnamed_addr constant [3 x i8] c"g:\00" +@.str.4391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4392 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.4393 = private unnamed_addr constant [2 x i8] c"@\00" +@.str.4394 = private unnamed_addr constant [20 x i8] c" = external global \00" +@.str.4395 = private unnamed_addr constant [2 x i8] c"@\00" +@.str.4396 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4397 = private unnamed_addr constant [44 x i8] c"' is a module; use something from it, like \00" +@.str.4398 = private unnamed_addr constant [11 x i8] c".name(...)\00" +@.str.4399 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" +@.str.4400 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4401 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4402 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4403 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4404 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4405 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.4406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4407 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4408 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4410 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4412 = private unnamed_addr constant [2 x i8] c"e\00" +@.str.4413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4414 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.4415 = private unnamed_addr constant [3 x i8] c".0\00" +@.str.4416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4417 = private unnamed_addr constant [3 x i8] c".0\00" +@.str.4418 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4419 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4421 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.4422 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4424 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4428 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4429 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4430 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.4431 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4433 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4436 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4437 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4438 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4440 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.4441 = private unnamed_addr constant [18 x i8] c" has no variant '\00" +@.str.4442 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.4443 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4444 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4446 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4449 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4450 = private unnamed_addr constant [23 x i8] c" holds nothing: write \00" +@.str.4451 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4452 = private unnamed_addr constant [8 x i8] c" holds \00" +@.str.4453 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4454 = private unnamed_addr constant [20 x i8] c" value(s), but got \00" +@.str.4455 = private unnamed_addr constant [3 x i8] c": \00" +@.str.4456 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4457 = private unnamed_addr constant [6 x i8] c"(...)\00" +@.str.4458 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4459 = private unnamed_addr constant [4 x i8] c"tag\00" +@.str.4460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4461 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.4462 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4463 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4464 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4465 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4467 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4469 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4470 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4471 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.4472 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4474 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.4475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4477 = private unnamed_addr constant [34 x i8] c"this pattern is not a variant of \00" +@.str.4478 = private unnamed_addr constant [11 x i8] c" (it has: \00" +@.str.4479 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4480 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4482 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4483 = private unnamed_addr constant [28 x i8] c" holds nothing: write just \00" +@.str.4484 = private unnamed_addr constant [8 x i8] c" holds \00" +@.str.4485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4486 = private unnamed_addr constant [28 x i8] c" value(s): name them, like \00" +@.str.4487 = private unnamed_addr constant [28 x i8] c"(x), or use _ to ignore one\00" +@.str.4488 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4489 = private unnamed_addr constant [51 x i8] c"write a name to hold the value (or _ to ignore it)\00" +@.str.4490 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4491 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.4492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4493 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.4494 = private unnamed_addr constant [18 x i8] c" has no variant '\00" +@.str.4495 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.4496 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4497 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4498 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4499 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4500 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.4501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4502 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4503 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4505 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4507 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00" +@.str.4508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4509 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4512 = private unnamed_addr constant [8 x i8] c" holds \00" +@.str.4513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4514 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4517 = private unnamed_addr constant [12 x i8] c" value(s): \00" +@.str.4518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4519 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4521 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4522 = private unnamed_addr constant [6 x i8] c"(...)\00" +@.str.4523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4524 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00" +@.str.4525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4526 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4527 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4528 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" +@.str.4529 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.4530 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.4531 = private unnamed_addr constant [7 x i8] c"used .\00" +@.str.4532 = private unnamed_addr constant [19 x i8] c" on a null pointer\00" +@.str.4533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4534 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4535 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4536 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4538 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.4539 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.4540 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4541 = private unnamed_addr constant [3 x i8] c"a \00" +@.str.4542 = private unnamed_addr constant [44 x i8] c" only has '.value' (the thing it points to)\00" +@.str.4543 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4544 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4545 = private unnamed_addr constant [27 x i8] c" can't be changed directly\00" +@.str.4546 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.4547 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4548 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4549 = private unnamed_addr constant [35 x i8] c"an array has .len and .ptr, not '.\00" +@.str.4550 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4551 = private unnamed_addr constant [49 x i8] c".ptr of a temporary value would point to nothing\00" +@.str.4552 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4553 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4554 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4555 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4556 = private unnamed_addr constant [31 x i8] c".ptr can't be changed directly\00" +@.str.4557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4558 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4559 = private unnamed_addr constant [54 x i8] c".ptr of a temporary value would point to freed memory\00" +@.str.4560 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4561 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4562 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.4563 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4565 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4566 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4567 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.4568 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.4569 = private unnamed_addr constant [38 x i8] c"an array, map or str has .len, not '.\00" +@.str.4570 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4571 = private unnamed_addr constant [49 x i8] c".len can't be changed directly (use push or pop)\00" +@.str.4572 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4573 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4574 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.4575 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4576 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4577 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.4578 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4579 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.4580 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4581 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4582 = private unnamed_addr constant [22 x i8] c" has no fields (no '.\00" +@.str.4583 = private unnamed_addr constant [3 x i8] c"')\00" +@.str.4584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4585 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4586 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4587 = private unnamed_addr constant [12 x i8] c"the struct \00" +@.str.4588 = private unnamed_addr constant [16 x i8] c" has no field '\00" +@.str.4589 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.4590 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4591 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4593 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4594 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4595 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4596 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4597 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4598 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4599 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str.4600 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4601 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.4602 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4603 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4606 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4607 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.4608 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.4609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4610 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4611 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4612 = private unnamed_addr constant [9 x i8] c"an index\00" +@.str.4613 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4614 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4615 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4616 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4617 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00" +@.str.4618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4619 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4620 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" +@.str.4621 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4623 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4624 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4625 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4626 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4627 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4628 = private unnamed_addr constant [47 x i8] c"[ ] works on arrays, str and pointers, not on \00" +@.str.4629 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4630 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4632 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4633 = private unnamed_addr constant [45 x i8] c"this is a temporary str, it can't be changed\00" +@.str.4634 = private unnamed_addr constant [30 x i8] c"call void @finch_str_own(ptr \00" +@.str.4635 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4636 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4637 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.4638 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.4639 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.4640 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4641 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4642 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4643 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4644 = private unnamed_addr constant [18 x i8] c"named arguments (\00" +@.str.4645 = private unnamed_addr constant [37 x i8] c": ...) are only for creating structs\00" +@.str.4646 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4647 = private unnamed_addr constant [9 x i8] c"' takes \00" +@.str.4648 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" +@.str.4649 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4650 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4651 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4652 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4653 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.4654 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4655 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4656 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4657 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4658 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4659 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.4660 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.4661 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.4662 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.4663 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.4664 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.4665 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.4666 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4667 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4668 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4670 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4671 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4672 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.4673 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4674 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4675 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.4676 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4677 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4678 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4679 = private unnamed_addr constant [33 x i8] c"call i32 @finch_str_try_int(ptr \00" +@.str.4680 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4681 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4682 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4683 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.4684 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4685 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4686 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.4687 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4689 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.4690 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4691 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4692 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4693 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4694 = private unnamed_addr constant [4 x i8] c"0.0\00" +@.str.4695 = private unnamed_addr constant [35 x i8] c"call i32 @finch_str_try_float(ptr \00" +@.str.4696 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4697 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4698 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4699 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.4700 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4702 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.4703 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4705 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.4706 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4707 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4708 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4710 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.4711 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4712 = private unnamed_addr constant [32 x i8] c"call i64 @finch_str_to_int(ptr \00" +@.str.4713 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4714 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4715 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4716 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4717 = private unnamed_addr constant [37 x i8] c"call double @finch_str_to_float(ptr \00" +@.str.4718 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4719 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4720 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4721 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4722 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4723 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.4724 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4725 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4726 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4727 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.4728 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.4729 = private unnamed_addr constant [7 x i8] c"fptoui\00" +@.str.4730 = private unnamed_addr constant [7 x i8] c"fptosi\00" +@.str.4731 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4732 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4733 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.4734 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4735 = private unnamed_addr constant [9 x i8] c"icmp ne \00" +@.str.4736 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4737 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4738 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4739 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4740 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4741 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4742 = private unnamed_addr constant [14 x i8] c"inttoptr i64 \00" +@.str.4743 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.4744 = private unnamed_addr constant [8 x i8] c" to ptr\00" +@.str.4745 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4746 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str.4747 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.4748 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4749 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4750 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4751 = private unnamed_addr constant [71 x i8] c"use .ptr to get a str's address (it is only valid while the str lives)\00" +@.str.4752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4753 = private unnamed_addr constant [12 x i8] c"can't turn \00" +@.str.4754 = private unnamed_addr constant [7 x i8] c" into \00" +@.str.4755 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4757 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4758 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4759 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4760 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4761 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4762 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4763 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4764 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4765 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4766 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4768 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4772 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4775 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4777 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4779 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4780 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4781 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.4782 = private unnamed_addr constant [4 x i8] c" x \00" +@.str.4783 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.4784 = private unnamed_addr constant [3 x i8] c"{ \00" +@.str.4785 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4786 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.4787 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4788 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4789 = private unnamed_addr constant [5 x i8] c"i128\00" +@.str.4790 = private unnamed_addr constant [5 x i8] c"i128\00" +@.str.4791 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4792 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4793 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" +@.str.4794 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" +@.str.4795 = private unnamed_addr constant [7 x i8] c"direct\00" +@.str.4796 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4798 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4799 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4800 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4801 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4803 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4804 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4805 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4806 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4807 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4808 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4809 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4810 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.4811 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4812 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4814 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4816 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4819 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4820 = private unnamed_addr constant [12 x i8] c"<2 x float>\00" +@.str.4821 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4822 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4823 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4824 = private unnamed_addr constant [3 x i8] c"{ \00" +@.str.4825 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4826 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.4827 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4828 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4829 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4830 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4831 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4832 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4833 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4834 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4836 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4838 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4840 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4841 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4842 = private unnamed_addr constant [7 x i8] c"direct\00" +@.str.4843 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4844 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4845 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4846 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4847 = private unnamed_addr constant [17 x i8] c"the C function '\00" +@.str.4848 = private unnamed_addr constant [3 x i8] c"' \00" +@.str.4849 = private unnamed_addr constant [19 x i8] c" the Finch struct \00" +@.str.4850 = private unnamed_addr constant [21 x i8] c", which C can't take\00" +@.str.4851 = private unnamed_addr constant [17 x i8] c"the C function '\00" +@.str.4852 = private unnamed_addr constant [3 x i8] c"' \00" +@.str.4853 = private unnamed_addr constant [13 x i8] c" the struct \00" +@.str.4854 = private unnamed_addr constant [41 x i8] c" by value, which Finch can't do yet: it \00" +@.str.4855 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4856 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4857 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4858 = private unnamed_addr constant [60 x i8] c"methods can't be exported (export a plain fn that calls it)\00" +@.str.4859 = private unnamed_addr constant [75 x i8] c"an export fn can't fail (C has no errors as values): handle them inside it\00" +@.str.4860 = private unnamed_addr constant [30 x i8] c"an export fn can't be generic\00" +@.str.4861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4862 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4863 = private unnamed_addr constant [67 x i8] c"an export fn takes numbers, bool, char and pointers only (this is \00" +@.str.4864 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4865 = private unnamed_addr constant [51 x i8] c"; pass text as ptr[char] and make it a str inside)\00" +@.str.4866 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4867 = private unnamed_addr constant [70 x i8] c"an export fn returns nothing, a number, bool, char or a pointer (not \00" +@.str.4868 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4870 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.4871 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4872 = private unnamed_addr constant [39 x i8] c"' is exported twice (from two modules)\00" +@.str.4873 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4874 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4875 = private unnamed_addr constant [14 x i8] c"i8 zeroext %e\00" +@.str.4876 = private unnamed_addr constant [4 x i8] c"i1 \00" +@.str.4877 = private unnamed_addr constant [14 x i8] c"icmp ne i8 %e\00" +@.str.4878 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4879 = private unnamed_addr constant [4 x i8] c" %e\00" +@.str.4880 = private unnamed_addr constant [4 x i8] c" %e\00" +@.str.4881 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.4882 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4883 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4884 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4885 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4886 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4887 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4888 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4889 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.4890 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4891 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.4892 = private unnamed_addr constant [9 x i8] c" zeroext\00" +@.str.4893 = private unnamed_addr constant [8 x i8] c"ret i8 \00" +@.str.4894 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.4895 = private unnamed_addr constant [7 x i8] c" to i8\00" +@.str.4896 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.4897 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4898 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4900 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4901 = private unnamed_addr constant [11 x i8] c" dllexport\00" +@.str.4902 = private unnamed_addr constant [7 x i8] c"define\00" +@.str.4903 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4904 = private unnamed_addr constant [3 x i8] c" @\00" +@.str.4905 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4906 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4907 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4909 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.4910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4911 = private unnamed_addr constant [10 x i8] c"@finch.c.\00" +@.str.4912 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4914 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4915 = private unnamed_addr constant [3 x i8] c"t:\00" +@.str.4916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4917 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4918 = private unnamed_addr constant [3 x i8] c"t:\00" +@.str.4919 = private unnamed_addr constant [6 x i8] c"addr(\00" +@.str.4920 = private unnamed_addr constant [82 x i8] c") gives C a function pointer, so it can't be a method or a function that can fail\00" +@.str.4921 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4922 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4923 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4924 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4925 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4926 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4927 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4928 = private unnamed_addr constant [6 x i8] c"addr(\00" +@.str.4929 = private unnamed_addr constant [96 x i8] c") gives C a function pointer, so its parameters must be C types (numbers, ptr, C structs), not \00" +@.str.4930 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4931 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4932 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4933 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4934 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4936 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4938 = private unnamed_addr constant [6 x i8] c"addr(\00" +@.str.4939 = private unnamed_addr constant [39 x i8] c"): a function given to C can't return \00" +@.str.4940 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4941 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" +@.str.4942 = private unnamed_addr constant [15 x i8] c") align 16 %c0\00" +@.str.4943 = private unnamed_addr constant [4 x i8] c"%c0\00" +@.str.4944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4945 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4946 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4947 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" +@.str.4948 = private unnamed_addr constant [9 x i8] c") align \00" +@.str.4949 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4950 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4951 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.4952 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4953 = private unnamed_addr constant [7 x i8] c"ptr %c\00" +@.str.4954 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4955 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.4956 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4957 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.4958 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4959 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4960 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4961 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.4962 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str.4963 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4964 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4965 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4966 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4967 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.4968 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4969 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4970 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4971 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4972 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4973 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4974 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.4975 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.4976 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4977 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.4978 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.4979 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4980 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.4981 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4982 = private unnamed_addr constant [16 x i8] c"define internal\00" +@.str.4983 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4984 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4985 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4986 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4987 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4988 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4989 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.4990 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4992 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4993 = private unnamed_addr constant [55 x i8] c"(...) turns a whole number into the enum, but this is \00" +@.str.4994 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4995 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4997 = private unnamed_addr constant [38 x i8] c" is not the number of any variant of \00" +@.str.4998 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4999 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5000 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.5001 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5002 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5003 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str.5004 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5005 = private unnamed_addr constant [8 x i8] c"xor i1 \00" +@.str.5006 = private unnamed_addr constant [7 x i8] c", true\00" +@.str.5007 = private unnamed_addr constant [33 x i8] c"this number is not a variant of \00" +@.str.5008 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.5009 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5010 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5011 = private unnamed_addr constant [9 x i8] c" zeroext\00" +@.str.5012 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5014 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.5015 = private unnamed_addr constant [9 x i8] c" signext\00" +@.str.5016 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5017 = private unnamed_addr constant [9 x i8] c" zeroext\00" +@.str.5018 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5019 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5020 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5021 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5022 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5023 = private unnamed_addr constant [4 x i8] c"...\00" +@.str.5024 = private unnamed_addr constant [18 x i8] c"C function from `\00" +@.str.5025 = private unnamed_addr constant [8 x i8] c"`\0A```c\0A\00" +@.str.5026 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5027 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5028 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5029 = private unnamed_addr constant [6 x i8] c")\0A```\00" +@.str.5030 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5031 = private unnamed_addr constant [17 x i8] c"the C function '\00" +@.str.5032 = private unnamed_addr constant [36 x i8] c"' can't be used from Finch yet: it \00" +@.str.5033 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5034 = private unnamed_addr constant [18 x i8] c"' takes at least \00" +@.str.5035 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" +@.str.5036 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5037 = private unnamed_addr constant [9 x i8] c"' takes \00" +@.str.5038 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" +@.str.5039 = private unnamed_addr constant [8 x i8] c"returns\00" +@.str.5040 = private unnamed_addr constant [6 x i8] c"takes\00" +@.str.5041 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5042 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" +@.str.5043 = private unnamed_addr constant [11 x i8] c") align 16\00" +@.str.5044 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" +@.str.5045 = private unnamed_addr constant [12 x i8] c") align 16 \00" +@.str.5046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5047 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5051 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5052 = private unnamed_addr constant [10 x i8] c"argument \00" +@.str.5053 = private unnamed_addr constant [5 x i8] c" of \00" +@.str.5054 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.5055 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" +@.str.5056 = private unnamed_addr constant [9 x i8] c") align \00" +@.str.5057 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5058 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.5059 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5060 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.5061 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.5062 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.5063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5064 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str.5065 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5068 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5069 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5070 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.5071 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5073 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5075 = private unnamed_addr constant [24 x i8] c"this gives back nothing\00" +@.str.5076 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5077 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5079 = private unnamed_addr constant [69 x i8] c"structs and arrays can't be passed to the '...' part of a C function\00" +@.str.5080 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.5081 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.5082 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.5083 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5084 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5085 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5086 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5087 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5088 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.5089 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5090 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.5091 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.5092 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5093 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5094 = private unnamed_addr constant [7 x i8] c"direct\00" +@.str.5095 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5096 = private unnamed_addr constant [6 x i8] c", ...\00" +@.str.5097 = private unnamed_addr constant [4 x i8] c"...\00" +@.str.5098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5099 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.5100 = private unnamed_addr constant [3 x i8] c"f:\00" +@.str.5101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5102 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.5103 = private unnamed_addr constant [3 x i8] c"f:\00" +@.str.5104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5105 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.5106 = private unnamed_addr constant [8 x i8] c"declare\00" +@.str.5107 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5108 = private unnamed_addr constant [3 x i8] c" @\00" +@.str.5109 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5110 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5111 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5112 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5113 = private unnamed_addr constant [3 x i8] c" (\00" +@.str.5114 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5115 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5116 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.5117 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5118 = private unnamed_addr constant [3 x i8] c" @\00" +@.str.5119 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5120 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5121 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5122 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5123 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.5124 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.5125 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5126 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5127 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5128 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" +@.str.5129 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5130 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5131 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5132 = private unnamed_addr constant [7 x i8] c"printf\00" +@.str.5133 = private unnamed_addr constant [7 x i8] c"fflush\00" +@.str.5134 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.5135 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.5136 = private unnamed_addr constant [6 x i8] c"qsort\00" +@.str.5137 = private unnamed_addr constant [7 x i8] c"printf\00" +@.str.5138 = private unnamed_addr constant [5 x i8] c"puts\00" +@.str.5139 = private unnamed_addr constant [8 x i8] c"putchar\00" +@.str.5140 = private unnamed_addr constant [6 x i8] c"scanf\00" +@.str.5141 = private unnamed_addr constant [6 x i8] c"fopen\00" +@.str.5142 = private unnamed_addr constant [8 x i8] c"getchar\00" +@.str.5143 = private unnamed_addr constant [5 x i8] c"sqrt\00" +@.str.5144 = private unnamed_addr constant [4 x i8] c"pow\00" +@.str.5145 = private unnamed_addr constant [4 x i8] c"sin\00" +@.str.5146 = private unnamed_addr constant [4 x i8] c"cos\00" +@.str.5147 = private unnamed_addr constant [6 x i8] c"floor\00" +@.str.5148 = private unnamed_addr constant [5 x i8] c"fabs\00" +@.str.5149 = private unnamed_addr constant [7 x i8] c"malloc\00" +@.str.5150 = private unnamed_addr constant [5 x i8] c"rand\00" +@.str.5151 = private unnamed_addr constant [6 x i8] c"srand\00" +@.str.5152 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str.5153 = private unnamed_addr constant [5 x i8] c"atoi\00" +@.str.5154 = private unnamed_addr constant [7 x i8] c"strlen\00" +@.str.5155 = private unnamed_addr constant [7 x i8] c"strcpy\00" +@.str.5156 = private unnamed_addr constant [7 x i8] c"memcpy\00" +@.str.5157 = private unnamed_addr constant [5 x i8] c"time\00" +@.str.5158 = private unnamed_addr constant [6 x i8] c"sleep\00" +@.str.5159 = private unnamed_addr constant [7 x i8] c"usleep\00" +@.str.5160 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5161 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5162 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5163 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5164 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5165 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5166 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5167 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5168 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5169 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5170 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5171 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5172 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5173 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5174 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5175 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5176 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5177 = private unnamed_addr constant [9 x i8] c"string.h\00" +@.str.5178 = private unnamed_addr constant [9 x i8] c"string.h\00" +@.str.5179 = private unnamed_addr constant [9 x i8] c"string.h\00" +@.str.5180 = private unnamed_addr constant [7 x i8] c"time.h\00" +@.str.5181 = private unnamed_addr constant [9 x i8] c"unistd.h\00" +@.str.5182 = private unnamed_addr constant [9 x i8] c"unistd.h\00" +@.str.5183 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5184 = private unnamed_addr constant [29 x i8] c" (it's from C: add import \22\00" +@.str.5185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5186 = private unnamed_addr constant [15 x i8] c"\22 at the top)\00" +@.str.5187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5188 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5189 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5190 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.5191 = private unnamed_addr constant [87 x i8] c"error(...) makes an error to return from a function that can fail: return error(\22...\22)\00" +@.str.5192 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.5193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5194 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5195 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5196 = private unnamed_addr constant [54 x i8] c"this gives back nothing, so there is nothing to print\00" +@.str.5197 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5198 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5199 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.5200 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5201 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5202 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.5203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5204 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.5205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5206 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5207 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5208 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.5209 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.5210 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.5211 = private unnamed_addr constant [64 x i8] c"addr(...) needs a variable, a field or an element, like addr(x)\00" +@.str.5212 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5213 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5214 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5215 = private unnamed_addr constant [35 x i8] c"call void @finch_str_from_int(ptr \00" +@.str.5216 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5217 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5218 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5219 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_uint(ptr \00" +@.str.5220 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5221 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.5222 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5223 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_float(ptr \00" +@.str.5224 = private unnamed_addr constant [10 x i8] c", double \00" +@.str.5225 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.5226 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5227 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5228 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_char(ptr \00" +@.str.5229 = private unnamed_addr constant [14 x i8] c", i8 signext \00" +@.str.5230 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5231 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5232 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5233 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5234 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_bool(ptr \00" +@.str.5235 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.5236 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5237 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5238 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5239 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5240 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" +@.str.5241 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5242 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5243 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5245 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.5246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5247 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5248 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5249 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5250 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_bytes(ptr \00" +@.str.5251 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5252 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5253 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5254 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5255 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5256 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.5257 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5258 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5259 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5260 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5262 = private unnamed_addr constant [12 x i8] c"can't turn \00" +@.str.5263 = private unnamed_addr constant [10 x i8] c" into str\00" +@.str.5264 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5265 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5266 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.5267 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.5268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5269 = private unnamed_addr constant [14 x i8] c"the file name\00" +@.str.5270 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.5271 = private unnamed_addr constant [33 x i8] c"call i32 @finch_file_exists(ptr \00" +@.str.5272 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5273 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5274 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5275 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5276 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5277 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5278 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5279 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5280 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5281 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5282 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5283 = private unnamed_addr constant [35 x i8] c"call i32 @finch_try_read_file(ptr \00" +@.str.5284 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5285 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5286 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5287 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.5288 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5290 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5291 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5292 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5293 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5294 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5295 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5296 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5297 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5299 = private unnamed_addr constant [32 x i8] c"call void @finch_read_file(ptr \00" +@.str.5300 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5301 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5302 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5303 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5304 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5305 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5306 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.5307 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5308 = private unnamed_addr constant [14 x i8] c"the file name\00" +@.str.5309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5310 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5312 = private unnamed_addr constant [9 x i8] c"the text\00" +@.str.5313 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5314 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5315 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5316 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5317 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5318 = private unnamed_addr constant [36 x i8] c"call i32 @finch_try_write_file(ptr \00" +@.str.5319 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5320 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5321 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5322 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.5323 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5324 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5325 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5326 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5327 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5328 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5329 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5330 = private unnamed_addr constant [32 x i8] c"call i32 @finch_write_file(ptr \00" +@.str.5331 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5332 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5333 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5334 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5335 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5336 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.5337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5338 = private unnamed_addr constant [14 x i8] c"the file name\00" +@.str.5339 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" +@.str.5340 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5341 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5342 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5343 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5344 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5345 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5346 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5347 = private unnamed_addr constant [37 x i8] c"call i32 @finch_try_delete_file(ptr \00" +@.str.5348 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5349 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5350 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.5351 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5352 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5353 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5354 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5356 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5357 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5358 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5359 = private unnamed_addr constant [33 x i8] c"call i32 @finch_delete_file(ptr \00" +@.str.5360 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5361 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5362 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5363 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5364 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5365 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.5366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5367 = private unnamed_addr constant [12 x i8] c"the command\00" +@.str.5368 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" +@.str.5369 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5370 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5371 = private unnamed_addr constant [27 x i8] c"call i64 @finch_shell(ptr \00" +@.str.5372 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5373 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5374 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5375 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.5376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5377 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5378 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5379 = private unnamed_addr constant [14 x i8] c"the exit code\00" +@.str.5380 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.5381 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5382 = private unnamed_addr constant [27 x i8] c"call i32 @fflush(ptr null)\00" +@.str.5383 = private unnamed_addr constant [21 x i8] c"call void @exit(i32 \00" +@.str.5384 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5385 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5386 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.5387 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5389 = private unnamed_addr constant [13 x i8] c"the question\00" +@.str.5390 = private unnamed_addr constant [28 x i8] c"call void @finch_input(ptr \00" +@.str.5391 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5392 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5393 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5394 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5395 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.5396 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5397 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" +@.str.5398 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5399 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.5400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5401 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5402 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5403 = private unnamed_addr constant [120 x i8] c"free(...) is only for pointers from new(...) or C; arrays, str and structs are freed by Finch at the end of their block\00" +@.str.5404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5405 = private unnamed_addr constant [10 x i8] c"free.drop\00" +@.str.5406 = private unnamed_addr constant [10 x i8] c"free.done\00" +@.str.5407 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.5408 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.5409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5410 = private unnamed_addr constant [21 x i8] c"call void @free(ptr \00" +@.str.5411 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5412 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5414 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5415 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5416 = private unnamed_addr constant [48 x i8] c"' is not generic, so it takes no type arguments\00" +@.str.5417 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5418 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5420 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5421 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5423 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5424 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5425 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5426 = private unnamed_addr constant [43 x i8] c"' is generic, so say which type it holds: \00" +@.str.5427 = private unnamed_addr constant [11 x i8] c"[int](...)\00" +@.str.5428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5429 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5431 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5433 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5436 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5437 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5438 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.5439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5441 = private unnamed_addr constant [17 x i8] c"```finch\0Astruct \00" +@.str.5442 = private unnamed_addr constant [4 x i8] c" { \00" +@.str.5443 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5444 = private unnamed_addr constant [7 x i8] c" }\0A```\00" +@.str.5445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5446 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5449 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5450 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5451 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.5452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5453 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.5454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5455 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.5456 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5457 = private unnamed_addr constant [32 x i8] c"' is a variable, not a function\00" +@.str.5458 = private unnamed_addr constant [29 x i8] c"there is no function named '\00" +@.str.5459 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5461 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.5462 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5463 = private unnamed_addr constant [5 x i8] c"main\00" +@.str.5464 = private unnamed_addr constant [53 x i8] c"main can't be called, it is where the program starts\00" +@.str.5465 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.5466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5467 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5469 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5470 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5471 = private unnamed_addr constant [11 x i8] c"argument '\00" +@.str.5472 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5473 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5476 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5477 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5478 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5479 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5480 = private unnamed_addr constant [40 x i8] c"' can fail, so say what happens then: \00" +@.str.5481 = private unnamed_addr constant [20 x i8] c"(...) or , \00" +@.str.5482 = private unnamed_addr constant [28 x i8] c"(...) or { ... }, or try \00" +@.str.5483 = private unnamed_addr constant [6 x i8] c"(...)\00" +@.str.5484 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.5485 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5486 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5487 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5488 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5489 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.5490 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5491 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5492 = private unnamed_addr constant [8 x i8] c"xor i1 \00" +@.str.5493 = private unnamed_addr constant [7 x i8] c", true\00" +@.str.5494 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5495 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5496 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.5497 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5498 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.5499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5500 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5501 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5502 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.5503 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5504 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5505 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5507 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5510 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.5511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5513 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5517 = private unnamed_addr constant [70 x i8] c"give either all fields by name (x: 1, y: 2) or none (1, 2), not a mix\00" +@.str.5518 = private unnamed_addr constant [6 x i8] c" has \00" +@.str.5519 = private unnamed_addr constant [18 x i8] c" fields, but got \00" +@.str.5520 = private unnamed_addr constant [24 x i8] c" values (or name them: \00" +@.str.5521 = private unnamed_addr constant [16 x i8] c"(field: value))\00" +@.str.5522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5525 = private unnamed_addr constant [16 x i8] c" has no field '\00" +@.str.5526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5527 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5530 = private unnamed_addr constant [12 x i8] c"the field '\00" +@.str.5531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5532 = private unnamed_addr constant [17 x i8] c"' is given twice\00" +@.str.5533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5534 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5535 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5536 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5543 = private unnamed_addr constant [12 x i8] c"the field '\00" +@.str.5544 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5545 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5546 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5547 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5548 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.5549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5550 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5552 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.5553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5554 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.5555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5556 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.5557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5558 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.5559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5560 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.5561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5562 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5566 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5567 = private unnamed_addr constant [17 x i8] c"the default of '\00" +@.str.5568 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5569 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5570 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5571 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5573 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.5574 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5575 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.5576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5577 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.5578 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.5579 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5580 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5581 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5582 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5585 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5586 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5589 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.5590 = private unnamed_addr constant [39 x i8] c"there is no variable or module named '\00" +@.str.5591 = private unnamed_addr constant [33 x i8] c"' (to use a module, add import \00" +@.str.5592 = private unnamed_addr constant [14 x i8] c" at the top)\00" +@.str.5593 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5594 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5595 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5596 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5597 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5599 = private unnamed_addr constant [13 x i8] c"the module '\00" +@.str.5600 = private unnamed_addr constant [36 x i8] c"' has no function or struct named '\00" +@.str.5601 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5602 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.5603 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.5604 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.5605 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.5606 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.5607 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.5608 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.5609 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.5610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5611 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5612 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5613 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5614 = private unnamed_addr constant [64 x i8] c"() would change a temporary array; store it in a variable first\00" +@.str.5615 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5616 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5617 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.5618 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5619 = private unnamed_addr constant [62 x i8] c"() would change a temporary map; store it in a variable first\00" +@.str.5620 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5621 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5623 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5624 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5625 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.5626 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.5627 = private unnamed_addr constant [9 x i8] c"called .\00" +@.str.5628 = private unnamed_addr constant [21 x i8] c"() on a null pointer\00" +@.str.5629 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5630 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5631 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5632 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5633 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5634 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5635 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5636 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5639 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5642 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5644 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5645 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.5646 = private unnamed_addr constant [5 x i8] c"the \00" +@.str.5647 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5648 = private unnamed_addr constant [35 x i8] c" has no methods; add one with fn \00" +@.str.5649 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5650 = private unnamed_addr constant [14 x i8] c"(...) { ... }\00" +@.str.5651 = private unnamed_addr constant [5 x i8] c"the \00" +@.str.5652 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5653 = private unnamed_addr constant [17 x i8] c" has no method '\00" +@.str.5654 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.5655 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5656 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5658 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.5659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5660 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5661 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5662 = private unnamed_addr constant [29 x i8] c"() would change a temporary \00" +@.str.5663 = private unnamed_addr constant [31 x i8] c"; store it in a variable first\00" +@.str.5664 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" +@.str.5665 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" +@.str.5666 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5667 = private unnamed_addr constant [16 x i8] c" has no methods\00" +@.str.5668 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5669 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" +@.str.5670 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.5671 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.5672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5674 = private unnamed_addr constant [12 x i8] c"the element\00" +@.str.5675 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5676 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5677 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5678 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_reserve(ptr \00" +@.str.5679 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5680 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5681 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5682 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5683 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5684 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5685 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5686 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5687 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5688 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.5689 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5690 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.5691 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5692 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.5693 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5694 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5695 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5696 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5697 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5698 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5699 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5700 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.5701 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.5702 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5703 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.5704 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5705 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5706 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.5707 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5709 = private unnamed_addr constant [22 x i8] c"the value to look for\00" +@.str.5710 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5711 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5712 = private unnamed_addr constant [3 x i8] c"-1\00" +@.str.5713 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5714 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5715 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5716 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5717 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.5718 = private unnamed_addr constant [10 x i8] c"find.cond\00" +@.str.5719 = private unnamed_addr constant [10 x i8] c"find.body\00" +@.str.5720 = private unnamed_addr constant [9 x i8] c"find.hit\00" +@.str.5721 = private unnamed_addr constant [10 x i8] c"find.next\00" +@.str.5722 = private unnamed_addr constant [9 x i8] c"find.end\00" +@.str.5723 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5724 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5725 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5726 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5727 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5728 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5729 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.5730 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5731 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5732 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5733 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5734 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5735 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5736 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5737 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" +@.str.5738 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5739 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5740 = private unnamed_addr constant [5 x i8] c"join\00" +@.str.5741 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5742 = private unnamed_addr constant [32 x i8] c"join() works on an array of str\00" +@.str.5743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5744 = private unnamed_addr constant [14 x i8] c"the separator\00" +@.str.5745 = private unnamed_addr constant [31 x i8] c"call void @finch_str_join(ptr \00" +@.str.5746 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5747 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5748 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5749 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5750 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5751 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.5752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5753 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5755 = private unnamed_addr constant [13 x i8] c"the position\00" +@.str.5756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5757 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5758 = private unnamed_addr constant [12 x i8] c"the element\00" +@.str.5759 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5760 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5761 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5762 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_insert_gap(ptr \00" +@.str.5763 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5764 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5765 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5766 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5767 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5768 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5769 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5770 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5771 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5772 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5773 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.5774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5775 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5777 = private unnamed_addr constant [13 x i8] c"the position\00" +@.str.5778 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5779 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5780 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5781 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5782 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5783 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_remove_gap(ptr \00" +@.str.5784 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5785 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5786 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5787 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.5788 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5789 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5790 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5791 = private unnamed_addr constant [15 x i8] c"the new length\00" +@.str.5792 = private unnamed_addr constant [33 x i8] c"call void @finch_arr_resize(ptr \00" +@.str.5793 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5794 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5795 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5796 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5797 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.5798 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5799 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5800 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" +@.str.5801 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.5802 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5803 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5804 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5806 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5807 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5808 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5809 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5810 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5811 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5812 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5813 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5814 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5815 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str.5816 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5817 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5819 = private unnamed_addr constant [10 x i8] c"the start\00" +@.str.5820 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5821 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5822 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5823 = private unnamed_addr constant [8 x i8] c"the end\00" +@.str.5824 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5825 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5826 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5827 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" +@.str.5828 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5829 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" +@.str.5830 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5831 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str.5832 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str.5833 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5834 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5835 = private unnamed_addr constant [34 x i8] c"slice(start, end) is out of range\00" +@.str.5836 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5837 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5838 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5839 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" +@.str.5840 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5841 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5842 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5843 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5844 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5845 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5846 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5847 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5848 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5849 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5850 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5851 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5852 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5853 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5854 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5855 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5856 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.5857 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5858 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5859 = private unnamed_addr constant [48 x i8] c"sort() works on arrays of numbers, chars or str\00" +@.str.5860 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5861 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5862 = private unnamed_addr constant [22 x i8] c"call void @qsort(ptr \00" +@.str.5863 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5864 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5865 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5866 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5867 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5868 = private unnamed_addr constant [25 x i8] c"an array has no method '\00" +@.str.5869 = private unnamed_addr constant [97 x i8] c"' (it has: push, pop, insert, remove, clear, resize, find, contains, join, slice, reverse, sort)\00" +@.str.5870 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5871 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5872 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" +@.str.5873 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.5874 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5875 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5876 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5877 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5878 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5879 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.5880 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5881 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.5882 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00" +@.str.5883 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5884 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5885 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5886 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5887 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5888 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5889 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5890 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5892 = private unnamed_addr constant [12 x i8] c"@finch.cmp.\00" +@.str.5893 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5894 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.5895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5896 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.5897 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5898 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5899 = private unnamed_addr constant [40 x i8] c"call i64 @finch_str_cmp(ptr %x, ptr %y)\00" +@.str.5900 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.5901 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5902 = private unnamed_addr constant [3 x i8] c"%x\00" +@.str.5903 = private unnamed_addr constant [3 x i8] c"%y\00" +@.str.5904 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5905 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5906 = private unnamed_addr constant [10 x i8] c"fcmp olt \00" +@.str.5907 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5908 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5909 = private unnamed_addr constant [10 x i8] c"fcmp ogt \00" +@.str.5910 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5911 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5912 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.5913 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.5914 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5915 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5916 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5917 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.5918 = private unnamed_addr constant [2 x i8] c">\00" +@.str.5919 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5920 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5921 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5922 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str.5923 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5924 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5925 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5926 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5927 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5928 = private unnamed_addr constant [9 x i8] c"ret i32 \00" +@.str.5929 = private unnamed_addr constant [21 x i8] c"define internal i32 \00" +@.str.5930 = private unnamed_addr constant [17 x i8] c"(ptr %x, ptr %y)\00" +@.str.5931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5932 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5934 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.5935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5936 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5938 = private unnamed_addr constant [10 x i8] c"the start\00" +@.str.5939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5940 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5941 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5942 = private unnamed_addr constant [8 x i8] c"the end\00" +@.str.5943 = private unnamed_addr constant [30 x i8] c"call void @finch_str_sub(ptr \00" +@.str.5944 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5945 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5946 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5947 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5948 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5949 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5950 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5951 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5952 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5953 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.5954 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str.5955 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.5956 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5957 = private unnamed_addr constant [21 x i8] c"the text to look for\00" +@.str.5958 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5959 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" +@.str.5960 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5961 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5962 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5963 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.5964 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" +@.str.5965 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5966 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5967 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" +@.str.5968 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5969 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5970 = private unnamed_addr constant [18 x i8] c"@finch_str_starts\00" +@.str.5971 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.5972 = private unnamed_addr constant [16 x i8] c"@finch_str_ends\00" +@.str.5973 = private unnamed_addr constant [10 x i8] c"call i32 \00" +@.str.5974 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.5975 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5976 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5977 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5978 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5979 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5980 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str.5981 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str.5982 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str.5983 = private unnamed_addr constant [22 x i8] c"call void @finch_str_\00" +@.str.5984 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.5985 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5986 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5987 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5988 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5989 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str.5990 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5991 = private unnamed_addr constant [20 x i8] c"the text to replace\00" +@.str.5992 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5993 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5995 = private unnamed_addr constant [13 x i8] c"the new text\00" +@.str.5996 = private unnamed_addr constant [34 x i8] c"call void @finch_str_replace(ptr \00" +@.str.5997 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5998 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5999 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6000 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6001 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6002 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6003 = private unnamed_addr constant [6 x i8] c"split\00" +@.str.6004 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6005 = private unnamed_addr constant [14 x i8] c"the separator\00" +@.str.6006 = private unnamed_addr constant [32 x i8] c"call void @finch_str_split(ptr \00" +@.str.6007 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6008 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6009 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6010 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6011 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6012 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str.6013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6014 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6015 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6016 = private unnamed_addr constant [10 x i8] c"the count\00" +@.str.6017 = private unnamed_addr constant [33 x i8] c"call void @finch_str_repeat(ptr \00" +@.str.6018 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6019 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.6020 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6021 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6022 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6023 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str.6024 = private unnamed_addr constant [37 x i8] c"call void @finch_bytes_from_str(ptr \00" +@.str.6025 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6026 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6027 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6028 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6029 = private unnamed_addr constant [22 x i8] c"a str has no method '\00" +@.str.6030 = private unnamed_addr constant [107 x i8] c"' (it has: sub, find, contains, starts_with, ends_with, split, trim, upper, lower, replace, repeat, bytes)\00" +@.str.6031 = private unnamed_addr constant [55 x i8] c"declare void @finch_panic(ptr, i64, ptr) noreturn cold\00" +@.str.6032 = private unnamed_addr constant [66 x i8] c"declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold\00" +@.str.6033 = private unnamed_addr constant [30 x i8] c"declare ptr @finch_alloc(i64)\00" +@.str.6034 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_copy(ptr, ptr)\00" +@.str.6035 = private unnamed_addr constant [34 x i8] c"declare void @finch_str_drop(ptr)\00" +@.str.6036 = private unnamed_addr constant [34 x i8] c"declare void @finch_arr_free(ptr)\00" +@.str.6037 = private unnamed_addr constant [34 x i8] c"declare void @finch_map_free(ptr)\00" +@.str.6038 = private unnamed_addr constant [33 x i8] c"declare void @finch_str_own(ptr)\00" +@.str.6039 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_concat(ptr, ptr, ptr)\00" +@.str.6040 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_str_eq(ptr, ptr)\00" +@.str.6041 = private unnamed_addr constant [37 x i8] c"declare i64 @finch_str_cmp(ptr, ptr)\00" +@.str.6042 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_add(ptr, ptr, i64)\00" +@.str.6043 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_int(ptr, i64)\00" +@.str.6044 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_uint(ptr, i64)\00" +@.str.6045 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_float(ptr, double)\00" +@.str.6046 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_bool(ptr, i32)\00" +@.str.6047 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_ptr(ptr, ptr)\00" +@.str.6048 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_char(ptr, i8, i32)\00" +@.str.6049 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_str(ptr, ptr, i32)\00" +@.str.6050 = private unnamed_addr constant [35 x i8] c"declare void @finch_buf_print(ptr)\00" +@.str.6051 = private unnamed_addr constant [43 x i8] c"declare void @finch_str_from_int(ptr, i64)\00" +@.str.6052 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_uint(ptr, i64)\00" +@.str.6053 = private unnamed_addr constant [48 x i8] c"declare void @finch_str_from_float(ptr, double)\00" +@.str.6054 = private unnamed_addr constant [51 x i8] c"declare void @finch_str_from_char(ptr, i8 signext)\00" +@.str.6055 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_bool(ptr, i32)\00" +@.str.6056 = private unnamed_addr constant [45 x i8] c"declare i64 @finch_str_to_int(ptr, ptr, i64)\00" +@.str.6057 = private unnamed_addr constant [50 x i8] c"declare double @finch_str_to_float(ptr, ptr, i64)\00" +@.str.6058 = private unnamed_addr constant [58 x i8] c"declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64)\00" +@.str.6059 = private unnamed_addr constant [38 x i8] c"declare i64 @finch_str_find(ptr, ptr)\00" +@.str.6060 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_str_starts(ptr, ptr)\00" +@.str.6061 = private unnamed_addr constant [38 x i8] c"declare i32 @finch_str_ends(ptr, ptr)\00" +@.str.6062 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_trim(ptr, ptr)\00" +@.str.6063 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_upper(ptr, ptr)\00" +@.str.6064 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_lower(ptr, ptr)\00" +@.str.6065 = private unnamed_addr constant [52 x i8] c"declare void @finch_str_replace(ptr, ptr, ptr, ptr)\00" +@.str.6066 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_split(ptr, ptr, ptr)\00" +@.str.6067 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_join(ptr, ptr, ptr)\00" +@.str.6068 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_repeat(ptr, ptr, i64)\00" +@.str.6069 = private unnamed_addr constant [45 x i8] c"declare void @finch_bytes_from_str(ptr, ptr)\00" +@.str.6070 = private unnamed_addr constant [53 x i8] c"declare i64 @finch_map_find(ptr, ptr, i64, i64, i32)\00" +@.str.6071 = private unnamed_addr constant [58 x i8] c"declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr)\00" +@.str.6072 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_remove_at(ptr, i64, i64)\00" +@.str.6073 = private unnamed_addr constant [35 x i8] c"declare void @finch_map_clear(ptr)\00" +@.str.6074 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_clone_raw(ptr, ptr, i64)\00" +@.str.6075 = private unnamed_addr constant [61 x i8] c"declare void @finch_map_missing(ptr, i64, ptr) noreturn cold\00" +@.str.6076 = private unnamed_addr constant [56 x i8] c"declare void @finch_map_changed(ptr, i64) noreturn cold\00" +@.str.6077 = private unnamed_addr constant [47 x i8] c"declare void @finch_arr_reserve(ptr, i64, i64)\00" +@.str.6078 = private unnamed_addr constant [49 x i8] c"declare void @finch_arr_clone_raw(ptr, ptr, i64)\00" +@.str.6079 = private unnamed_addr constant [44 x i8] c"declare void @finch_arr_make(ptr, i64, i64)\00" +@.str.6080 = private unnamed_addr constant [46 x i8] c"declare void @finch_arr_resize(ptr, i64, i64)\00" +@.str.6081 = private unnamed_addr constant [60 x i8] c"declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64)\00" +@.str.6082 = private unnamed_addr constant [50 x i8] c"declare void @finch_arr_remove_gap(ptr, i64, i64)\00" +@.str.6083 = private unnamed_addr constant [40 x i8] c"declare void @qsort(ptr, i64, i64, ptr)\00" +@.str.6084 = private unnamed_addr constant [40 x i8] c"declare void @finch_args(ptr, i32, ptr)\00" +@.str.6085 = private unnamed_addr constant [36 x i8] c"declare void @finch_input(ptr, ptr)\00" +@.str.6086 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_file_exists(ptr)\00" +@.str.6087 = private unnamed_addr constant [46 x i8] c"declare i32 @finch_str_try_int(ptr, ptr, ptr)\00" +@.str.6088 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_str_try_float(ptr, ptr, ptr)\00" +@.str.6089 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_try_read_file(ptr, ptr, ptr)\00" +@.str.6090 = private unnamed_addr constant [49 x i8] c"declare i32 @finch_try_write_file(ptr, ptr, ptr)\00" +@.str.6091 = private unnamed_addr constant [45 x i8] c"declare i32 @finch_try_delete_file(ptr, ptr)\00" +@.str.6092 = private unnamed_addr constant [38 x i8] c"declare void @finch_report_error(ptr)\00" +@.str.6093 = private unnamed_addr constant [50 x i8] c"declare void @finch_read_file(ptr, ptr, ptr, i64)\00" +@.str.6094 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_write_file(ptr, ptr)\00" +@.str.6095 = private unnamed_addr constant [30 x i8] c"declare i64 @finch_shell(ptr)\00" +@.str.6096 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_delete_file(ptr)\00" +@.str.6097 = private unnamed_addr constant [30 x i8] c"declare i32 @printf(ptr, ...)\00" +@.str.6098 = private unnamed_addr constant [25 x i8] c"declare i32 @fflush(ptr)\00" +@.str.6099 = private unnamed_addr constant [41 x i8] c"declare void @finch_str_from_c(ptr, ptr)\00" +@.str.6100 = private unnamed_addr constant [34 x i8] c"declare void @finch_on_fatal(ptr)\00" +@.str.6101 = private unnamed_addr constant [35 x i8] c"declare ptr @finch_std_stream(i32)\00" +@.str.6102 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_from_bytes(ptr, ptr)\00" +@.str.6103 = private unnamed_addr constant [33 x i8] c"declare void @exit(i32) noreturn\00" +@.str.6104 = private unnamed_addr constant [24 x i8] c"declare void @free(ptr)\00" +@.str.6105 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6106 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6107 = private unnamed_addr constant [53 x i8] c"; generated by the Finch compiler written in Finch\0A\0A\00" +@.str.6108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6109 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6111 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6112 = private unnamed_addr constant [18 x i8] c"target triple = \22\00" +@.str.6113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6114 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6115 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00" +@.str.6116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6117 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.6118 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6119 = private unnamed_addr constant [3 x i8] c"\0A\0A\00" +@.str.6120 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6122 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6123 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00" +@.str.6124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6126 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6128 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6129 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6131 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6133 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6136 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6137 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00" +@.str.6138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6139 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6140 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00" +@.str.6141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6142 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6143 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00" +@.str.6144 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00" +@.str.6145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6146 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00" +@.str.6147 = private unnamed_addr constant [3 x i8] c"\22)\00" +@.str.6148 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00" +@.str.6149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6150 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6152 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00" +@.str.6153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6154 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6156 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6157 = private unnamed_addr constant [5 x i8] c"main\00" +@.str.6158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6159 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6161 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6165 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6168 = private unnamed_addr constant [83 x i8] c"a library (--shared) has no main: the program that loads it calls its 'export fn's\00" +@.str.6169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6170 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00" +@.str.6171 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6172 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6173 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6175 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6177 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.6178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6179 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6182 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.6183 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6185 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6186 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6188 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6189 = private unnamed_addr constant [11 x i8] c" dllexport\00" +@.str.6190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6191 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6192 = private unnamed_addr constant [7 x i8] c"define\00" +@.str.6193 = private unnamed_addr constant [108 x i8] c" void @finch_module_on_fatal(ptr %handler) {\0Aentry:\0A call void @finch_on_fatal(ptr %handler)\0A ret void\0A}\0A\00" +@.str.6194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6195 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6197 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.6198 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6199 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6200 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6201 = private unnamed_addr constant [134 x i8] c" %args = alloca { ptr, i64, i64 }\0A call void @finch_args(ptr %args, i32 %argc, ptr %argv)\0A %a = load { ptr, i64, i64 }, ptr %args\0A\00" +@.str.6202 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00" +@.str.6203 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6204 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" +@.str.6205 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6206 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6207 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6208 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6209 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00" +@.str.6210 = private unnamed_addr constant [63 x i8] c" %r, 0\0A br i1 %ok, label %main.ok, label %main.bad\0Amain.bad:\0A\00" +@.str.6211 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00" +@.str.6212 = private unnamed_addr constant [79 x i8] c" %r, 2\0A %mp = alloca { ptr, i64, i64 }\0A store { ptr, i64, i64 } %m, ptr %mp\0A\00" +@.str.6213 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00" +@.str.6214 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6215 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00" +@.str.6216 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00" +@.str.6217 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6218 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6219 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00" +@.str.6220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6221 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6222 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str.6223 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6224 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6225 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str.6226 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.6227 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00" +@.str.6228 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00" +@.str.6229 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.6230 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00" +@.str.6231 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00" +@.str.6232 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.6233 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00" +@.str.6234 = private unnamed_addr constant [122 x i8] c"The whole file as text. Stops the program if it can't be read, unless handled: read_file(p) or { ... }, try read_file(p).\00" +@.str.6235 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.6236 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00" +@.str.6237 = private unnamed_addr constant [84 x i8] c"Writes (replaces) the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6238 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.6239 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00" +@.str.6240 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00" +@.str.6241 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.6242 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00" +@.str.6243 = private unnamed_addr constant [74 x i8] c"Deletes the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6244 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.6245 = private unnamed_addr constant [19 x i8] c"error(str message)\00" +@.str.6246 = private unnamed_addr constant [99 x i8] c"The failure a fallible function returns: return error(\22...\22). The caller handles it with or / try.\00" +@.str.6247 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.6248 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00" +@.str.6249 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00" +@.str.6250 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.6251 = private unnamed_addr constant [15 x i8] c"exit(int code)\00" +@.str.6252 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00" +@.str.6253 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.6254 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00" +@.str.6255 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00" +@.str.6256 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.6257 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00" +@.str.6258 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00" +@.str.6259 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.6260 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00" +@.str.6261 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00" +@.str.6262 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6263 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00" +@.str.6264 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00" +@.str.6265 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6266 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00" +@.str.6267 = private unnamed_addr constant [131 x i8] c"Converts to a whole number: cuts off fractions, parses text (stops the program if it isn't a number, unless handled: int(s) or 0).\00" +@.str.6268 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6269 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00" +@.str.6270 = private unnamed_addr constant [76 x i8] c"Converts to a decimal number; parses text (int(s) or 0.0 handles bad text).\00" +@.str.6271 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6272 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00" +@.str.6273 = private unnamed_addr constant [30 x i8] c"The character with this code.\00" +@.str.6274 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6275 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00" +@.str.6276 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00" +@.str.6277 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6278 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00" +@.str.6279 = private unnamed_addr constant [89 x i8] c"An untyped pointer: from a typed pointer, or from a number (an address or offset for C).\00" +@.str.6280 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6281 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6282 = private unnamed_addr constant [24 x i8] c"The number of elements.\00" +@.str.6283 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6284 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00" +@.str.6285 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00" +@.str.6286 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.6287 = private unnamed_addr constant [10 x i8] c"push(T x)\00" +@.str.6288 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00" +@.str.6289 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.6290 = private unnamed_addr constant [11 x i8] c"pop() -> T\00" +@.str.6291 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00" +@.str.6292 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.6293 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00" +@.str.6294 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00" +@.str.6295 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6296 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00" +@.str.6297 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00" +@.str.6298 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6299 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6300 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6301 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.6302 = private unnamed_addr constant [14 x i8] c"resize(int n)\00" +@.str.6303 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00" +@.str.6304 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6305 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00" +@.str.6306 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00" +@.str.6307 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6308 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00" +@.str.6309 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00" +@.str.6310 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.6311 = private unnamed_addr constant [7 x i8] c"sort()\00" +@.str.6312 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00" +@.str.6313 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.6314 = private unnamed_addr constant [10 x i8] c"reverse()\00" +@.str.6315 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00" +@.str.6316 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str.6317 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00" +@.str.6318 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00" +@.str.6319 = private unnamed_addr constant [5 x i8] c"join\00" +@.str.6320 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00" +@.str.6321 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00" +@.str.6322 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6323 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6324 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00" +@.str.6325 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6326 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00" +@.str.6327 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00" +@.str.6328 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.6329 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00" +@.str.6330 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00" +@.str.6331 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6332 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00" +@.str.6333 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00" +@.str.6334 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6335 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00" +@.str.6336 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00" +@.str.6337 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str.6338 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00" +@.str.6339 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00" +@.str.6340 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.6341 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00" +@.str.6342 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00" +@.str.6343 = private unnamed_addr constant [6 x i8] c"split\00" +@.str.6344 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00" +@.str.6345 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00" +@.str.6346 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str.6347 = private unnamed_addr constant [14 x i8] c"trim() -> str\00" +@.str.6348 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00" +@.str.6349 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str.6350 = private unnamed_addr constant [15 x i8] c"upper() -> str\00" +@.str.6351 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00" +@.str.6352 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str.6353 = private unnamed_addr constant [15 x i8] c"lower() -> str\00" +@.str.6354 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00" +@.str.6355 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str.6356 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00" +@.str.6357 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00" +@.str.6358 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str.6359 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00" +@.str.6360 = private unnamed_addr constant [18 x i8] c"The text n times.\00" +@.str.6361 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str.6362 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00" +@.str.6363 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00" +@.str.6364 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6365 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6366 = private unnamed_addr constant [20 x i8] c"The number of keys.\00" +@.str.6367 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.6368 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00" +@.str.6369 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00" +@.str.6370 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.6371 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00" +@.str.6372 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00" +@.str.6373 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6374 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00" +@.str.6375 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00" +@.str.6376 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6377 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6378 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6379 = private unnamed_addr constant [5 x i8] c"keys\00" +@.str.6380 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00" +@.str.6381 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00" +@.str.6382 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.6383 = private unnamed_addr constant [16 x i8] c"values() -> []V\00" +@.str.6384 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00" +@.str.6385 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.6386 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.6387 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.6388 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.6389 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.6390 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.6391 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.6392 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.6393 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.6394 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.6395 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.6396 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.6397 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.6398 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.6399 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.6400 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.6401 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.6402 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.6403 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.6404 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.6405 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.6406 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.6407 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6408 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6409 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6410 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6411 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6412 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6413 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.6414 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6415 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6416 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6417 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.6418 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6419 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6420 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6421 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6422 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6423 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.6424 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.6425 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00" +declare ptr @clang_getCString(i64, i64) +declare void @clang_disposeString(i64, i64) +@.str.6426 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6427 = private unnamed_addr constant [16 x i8] c"/finch_cc_dirs_\00" +@.str.6428 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6429 = private unnamed_addr constant [14 x i8] c"/finch_empty_\00" +@.str.6430 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6431 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6432 = private unnamed_addr constant [13 x i8] c" -E -v -x c \00" +@.str.6433 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6434 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6435 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6436 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6437 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6438 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6439 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6440 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00" +@.str.6441 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6442 = private unnamed_addr constant [20 x i8] c"End of search list.\00" +@.str.6443 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6444 = private unnamed_addr constant [23 x i8] c" (framework directory)\00" +@.str.6445 = private unnamed_addr constant [12 x i8] c"-iframework\00" +@.str.6446 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6447 = private unnamed_addr constant [9 x i8] c"-isystem\00" +declare void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16, ptr byval(%S.C.CXType) align 8) +declare { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8) +@.str.6448 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6449 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6450 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6451 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6452 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +declare { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8) +@.str.6453 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6454 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6455 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6456 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6457 = private unnamed_addr constant [13 x i8] c"anon_struct_\00" +@.str.6458 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6459 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6460 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6461 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) +@.str.6462 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6463 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6464 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6465 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +declare i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8) +@.str.6466 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6467 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6468 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +declare i64 @clang_Type_getAlignOf(ptr byval(%S.C.CXType) align 8) +declare i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8) +@.str.6469 = private unnamed_addr constant [13 x i8] c"is a C union\00" +declare i32 @clang_Type_visitFields(ptr byval(%S.C.CXType) align 8, ptr, ptr) +@.str.6470 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6471 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +@.str.6472 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6473 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6474 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6475 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare void @clang_getCursorType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXCursor) align 8) +declare i64 @clang_Cursor_getOffsetOfField(ptr byval(%S.C.CXCursor) align 8) +declare i32 @clang_Cursor_isBitField(ptr byval(%S.C.CXCursor) align 8) +@.str.6476 = private unnamed_addr constant [15 x i8] c"has bit fields\00" +@.str.6477 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6478 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6479 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6480 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00" +@.str.6481 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6482 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00" +@.str.6483 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6484 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6485 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6486 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00" +@.str.6487 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6488 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6489 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6490 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00" +@.str.6491 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6492 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6493 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6494 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6495 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6496 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6497 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6498 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6499 = private unnamed_addr constant [8 x i8] c"uses a \00" +@.str.6500 = private unnamed_addr constant [12 x i8] c"-bit number\00" +@.str.6501 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6502 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6503 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6504 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6505 = private unnamed_addr constant [6 x i8] c"float\00" +declare void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) +declare i32 @clang_isConstQualifiedType(ptr byval(%S.C.CXType) align 8) +@.str.6506 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6507 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6508 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6509 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6510 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6511 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00" +@.str.6512 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00" +@.str.6513 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.6514 = private unnamed_addr constant [2 x i8] c"C\00" +declare void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) +declare i64 @clang_getArraySize(ptr byval(%S.C.CXType) align 8) +@.str.6515 = private unnamed_addr constant [17 x i8] c"uses long double\00" +@.str.6516 = private unnamed_addr constant [18 x i8] c"uses the C type '\00" +declare { i64, i64 } @clang_getTypeSpelling(ptr byval(%S.C.CXType) align 8) +@.str.6517 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6518 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6519 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6520 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6521 = private unnamed_addr constant [3 x i8] c"0X\00" +@.str.6522 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6523 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6524 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6525 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6526 = private unnamed_addr constant [5 x i8] c"uUlL\00" +@.str.6527 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6528 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6529 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6530 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16, ptr byval(%S.C.CXCursor) align 8) +declare void @clang_tokenize(ptr, ptr byval(%S.C.CXSourceRange) align 8, ptr, ptr) +declare i32 @clang_getTokenKind(ptr byval(%S.C.CXToken) align 8) +@.str.6531 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6532 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare { i64, i64 } @clang_getTokenSpelling(ptr, ptr byval(%S.C.CXToken) align 8) +@.str.6533 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6534 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare void @clang_disposeTokens(ptr, ptr, i32) +@.str.6535 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6536 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6537 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6538 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6539 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6540 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6541 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.6542 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6543 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.6544 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6545 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6546 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6547 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6548 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6549 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6550 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6551 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6552 = private unnamed_addr constant [2 x i8] c"e\00" +@.str.6553 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6554 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.6555 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6556 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6557 = private unnamed_addr constant [5 x i8] c"fFlL\00" +@.str.6558 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6559 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6560 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +declare void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXCursor) align 8) +@.str.6561 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6562 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6563 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6564 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6565 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6566 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6567 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6568 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6569 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6570 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6571 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6572 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6573 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6574 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6575 = private unnamed_addr constant [31 x i8] c"used .header on a null pointer\00" +declare i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8) +@.str.6576 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00" +@.str.6577 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6578 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6579 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00" +@.str.6580 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6581 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare void @clang_getResultType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8) +declare i32 @clang_getNumArgTypes(ptr byval(%S.C.CXType) align 8) +declare void @clang_getArgType(ptr sret(%S.C.CXType) align 16, ptr byval(%S.C.CXType) align 8, i32) +declare i32 @clang_isFunctionTypeVariadic(ptr byval(%S.C.CXType) align 8) +@.str.6582 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6583 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6584 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6585 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6586 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6587 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_isCursorDefinition(ptr byval(%S.C.CXCursor) align 8) +@.str.6588 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6589 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6590 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6591 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6592 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6593 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8, ptr, ptr) +@.str.6594 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6595 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i64 @clang_getEnumConstantDeclValue(ptr byval(%S.C.CXCursor) align 8) +@.str.6596 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6597 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_Cursor_isMacroBuiltin(ptr byval(%S.C.CXCursor) align 8) +declare i32 @clang_Cursor_isMacroFunctionLike(ptr byval(%S.C.CXCursor) align 8) +@.str.6598 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6599 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6600 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6601 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6602 = private unnamed_addr constant [3 x i8] c"-x\00" +@.str.6603 = private unnamed_addr constant [2 x i8] c"c\00" +@.str.6604 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00" +@.str.6605 = private unnamed_addr constant [10 x i8] c"--target=\00" +@.str.6606 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00" +@.str.6607 = private unnamed_addr constant [3 x i8] c"-I\00" +@.str.6608 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6609 = private unnamed_addr constant [1 x i8] c"\00" +declare ptr @clang_createIndex(i32, i32) +@.str.6610 = private unnamed_addr constant [11 x i8] c"#include \22\00" +@.str.6611 = private unnamed_addr constant [3 x i8] c"\22\0A\00" +@.str.6612 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" +@.str.6613 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" +@.str.6614 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @clang_parseTranslationUnit2(ptr, ptr, ptr, i32, ptr, i32, i32, ptr) +@.str.6615 = private unnamed_addr constant [34 x i8] c": error: couldn't read C header '\00" +@.str.6616 = private unnamed_addr constant [2 x i8] c"'\00" +declare i32 @clang_getNumDiagnostics(ptr) +declare ptr @clang_getDiagnostic(ptr, i32) +declare i32 @clang_getDiagnosticSeverity(ptr) +declare { i64, i64 } @clang_getDiagnosticSpelling(ptr) +declare void @clang_disposeDiagnostic(ptr) +@.str.6617 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6618 = private unnamed_addr constant [15 x i8] c"file not found\00" +@.str.6619 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6620 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6621 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6622 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6623 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" +@.str.6624 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6625 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" +@.str.6626 = private unnamed_addr constant [11 x i8] c"', which '\00" +@.str.6627 = private unnamed_addr constant [61 x i8] c"' includes (is its library's development package installed?)\00" +@.str.6628 = private unnamed_addr constant [20 x i8] c": error: C header '\00" +@.str.6629 = private unnamed_addr constant [17 x i8] c"' has an error: \00" +declare void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16, ptr) +declare void @clang_disposeTranslationUnit(ptr) +declare void @clang_disposeIndex(ptr) +@.str.6630 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6631 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6632 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6633 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6634 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6635 = private unnamed_addr constant [5 x i8] c"'\5C''\00" +@.str.6636 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6637 = private unnamed_addr constant [10 x i8] c"/dev/null\00" +@.str.6638 = private unnamed_addr constant [7 x i8] c"TMPDIR\00" +@.str.6639 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6640 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6641 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6642 = private unnamed_addr constant [13 x i8] c"src/host.fch\00" +@.str.6643 = private unnamed_addr constant [5 x i8] c"/tmp\00" +@.str.6644 = private unnamed_addr constant [2 x i8] c":\00" +declare i32 @getpid() +@.str.6645 = private unnamed_addr constant [4 x i8] c"PWD\00" +@.str.6646 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6647 = private unnamed_addr constant [15 x i8] c"XDG_CACHE_HOME\00" +@.str.6648 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6649 = private unnamed_addr constant [7 x i8] c"/finch\00" +@.str.6650 = private unnamed_addr constant [5 x i8] c"HOME\00" +@.str.6651 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6652 = private unnamed_addr constant [14 x i8] c"/.cache/finch\00" +@.str.6653 = private unnamed_addr constant [13 x i8] c"/finch-cache\00" +@.str.6654 = private unnamed_addr constant [10 x i8] c"mkdir -p \00" +@.str.6655 = private unnamed_addr constant [8 x i8] c"rm -rf \00" +@.str.6656 = private unnamed_addr constant [4 x i8] c"mv \00" +@.str.6657 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6658 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6659 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6660 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6661 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6662 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6663 = private unnamed_addr constant [15 x i8] c"/finch_triple_\00" +@.str.6664 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6665 = private unnamed_addr constant [22 x i8] c"clang -dumpmachine > \00" +@.str.6666 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6667 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6668 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6669 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6670 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6671 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" +@.str.6672 = private unnamed_addr constant [6 x i8] c"linux\00" +@.str.6673 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6674 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6675 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6676 = private unnamed_addr constant [12 x i8] c"linux-arm64\00" +@.str.6677 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00" +@.str.6678 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.6679 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6680 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6681 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6682 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6683 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00" +@.str.6684 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00" +@.str.6685 = private unnamed_addr constant [23 x i8] c"x86_64-w64-windows-gnu\00" +@.str.6686 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" +@.str.6687 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6688 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6689 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6690 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6691 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6692 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6693 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6694 = private unnamed_addr constant [6 x i8] c"win32\00" +@.str.6695 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6696 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6697 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6698 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6699 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6700 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6701 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6702 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.6703 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6704 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6705 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6706 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6707 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6708 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6709 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6710 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6711 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6712 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6713 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6714 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6715 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6716 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6717 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6718 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6719 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6720 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6721 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6722 = private unnamed_addr constant [5 x i8] c".exe\00" +@.str.6723 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6724 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6725 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00" +@.str.6726 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00" +@.str.6727 = private unnamed_addr constant [16 x i8] c"clang --target=\00" +@.str.6728 = private unnamed_addr constant [2 x i8] c";\00" +@.str.6729 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6730 = private unnamed_addr constant [3 x i8] c"cc\00" +@.str.6731 = private unnamed_addr constant [6 x i8] c"wine \00" +@.str.6732 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00" +@.str.6733 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.6734 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6735 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6736 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6737 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6738 = private unnamed_addr constant [12 x i8] c"-framework \00" +@.str.6739 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6740 = private unnamed_addr constant [18 x i8] c"/finch_pkg_flags_\00" +@.str.6741 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6742 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00" +@.str.6743 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6744 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6745 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6746 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6747 = private unnamed_addr constant [3 x i8] c"-l\00" +@.str.6748 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6749 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6750 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6751 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6752 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6753 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6754 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6755 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6756 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6757 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6758 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6759 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6760 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6761 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6762 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6763 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6764 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6765 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6766 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6767 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6768 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6769 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6770 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6771 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6772 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6773 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6774 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6775 = private unnamed_addr constant [3 x i8] c" \0A\00" +@.str.6776 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6777 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6778 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6779 = private unnamed_addr constant [4 x i8] c" \0A\0D\00" +@.str.6780 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6781 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6782 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6783 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" +@.str.6784 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6785 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6786 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6787 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" +@.str.6788 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6789 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6790 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6791 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6792 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6793 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6794 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6795 = private unnamed_addr constant [10 x i8] c"not found\00" +@.str.6796 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6797 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6798 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6799 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6800 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6801 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6802 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6803 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6804 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6805 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6806 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6807 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.6808 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6809 = private unnamed_addr constant [22 x i8] c"error: linking failed\00" +@.str.6810 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6811 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6812 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6813 = private unnamed_addr constant [21 x i8] c"error: the library '\00" +@.str.6814 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00" +@.str.6815 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6816 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6817 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6818 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6819 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6820 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6821 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6822 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6823 = private unnamed_addr constant [3 x i8] c", \00" +@.str.6824 = private unnamed_addr constant [6 x i8] c" and \00" +@.str.6825 = private unnamed_addr constant [6 x i8] c" more\00" +@.str.6826 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6827 = private unnamed_addr constant [26 x i8] c"error: no code found for \00" +@.str.6828 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6829 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6830 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6831 = private unnamed_addr constant [5 x i8] c"come\00" +@.str.6832 = private unnamed_addr constant [6 x i8] c"comes\00" +@.str.6833 = private unnamed_addr constant [8 x i8] c"error: \00" +@.str.6834 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6835 = private unnamed_addr constant [8 x i8] c" from \22\00" +@.str.6836 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6837 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00" +@.str.6838 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6839 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6840 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6841 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00" +@.str.6842 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6843 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6844 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6845 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00" +@.str.6846 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6847 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6848 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6849 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6850 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6851 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6852 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6853 = private unnamed_addr constant [13 x i8] c" link \22\00" +@.str.6854 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6855 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6856 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6857 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6858 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6859 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6860 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6861 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6862 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6863 = private unnamed_addr constant [5 x i8] c"/rt-\00" +@.str.6864 = private unnamed_addr constant [4 x i8] c"2.5\00" +@.str.6865 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6866 = private unnamed_addr constant [6 x i8] c".part\00" +@.str.6867 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6868 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6869 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6870 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6871 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6872 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6873 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6874 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6875 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6876 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00" +@.str.6877 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00" +@.str.6878 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00" +@.str.6879 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6880 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6881 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6882 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6883 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6884 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6885 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6886 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6887 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6888 = private unnamed_addr constant [4 x i8] c".ll\00" +@.str.6889 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6890 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6891 = private unnamed_addr constant [11 x i8] c" --target=\00" +@.str.6892 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6893 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6894 = private unnamed_addr constant [8 x i8] c" -w -c \00" +@.str.6895 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6896 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6897 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6898 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6899 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6900 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6901 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6902 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00" +@.str.6903 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6904 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6905 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6906 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6907 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6908 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6909 = private unnamed_addr constant [5 x i8] c" -lm\00" +@.str.6910 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6911 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6912 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6913 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6914 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6915 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00" +@.str.6916 = private unnamed_addr constant [9 x i8] c" -shared\00" +@.str.6917 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6918 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6919 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6920 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6921 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6922 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6923 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6924 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6925 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6926 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6927 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6928 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6929 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00" +@.str.6930 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6931 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6932 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6933 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6934 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6935 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6936 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6937 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.6938 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6939 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6940 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6941 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6942 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6943 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00" +@.str.6944 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00" +@.str.6945 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6946 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6947 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6948 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6949 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6950 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6951 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6952 = private unnamed_addr constant [8 x i8] c"file://\00" +@.str.6953 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6954 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6955 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6956 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6957 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6958 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6959 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6960 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" +@.str.6961 = private unnamed_addr constant [8 x i8] c"file://\00" +@.str.6962 = private unnamed_addr constant [6 x i8] c"/-_.~\00" +@.str.6963 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6964 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.6965 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6966 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6967 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6968 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6969 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6970 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6971 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6972 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6973 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6974 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6975 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6976 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6977 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @getchar() +@.str.6978 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6979 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6980 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.6981 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +declare i32 @feof(ptr) +@.str.6982 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00" +@.str.6983 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6984 = private unnamed_addr constant [16 x i8] c"Content-Length:\00" +@.str.6985 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6986 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6987 = private unnamed_addr constant [26 x i8] c"the message was cut short\00" +@.str.6988 = private unnamed_addr constant [17 x i8] c"Content-Length: \00" +@.str.6989 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00" +@.str.6990 = private unnamed_addr constant [1 x i8] c"\00" +declare i64 @fwrite(ptr, i64, i64, ptr) +@.str.6991 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.6992 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.6993 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.6994 = private unnamed_addr constant [7 x i8] c"result\00" +@.str.6995 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.6996 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.6997 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.6998 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.6999 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7000 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7001 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7002 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7003 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7004 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7005 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7006 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.7007 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7008 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7009 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7010 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7011 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7012 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7013 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7014 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7015 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7016 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7017 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7018 = private unnamed_addr constant [2 x i8] c"@\00" +@.str.7019 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7020 = private unnamed_addr constant [3 x i8] c"@R\00" +@.str.7021 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7022 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7023 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7024 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7025 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7026 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7027 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7028 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7029 = private unnamed_addr constant [3 x i8] c"@V\00" +@.str.7030 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7031 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7032 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7033 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7034 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7035 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7036 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7037 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7038 = private unnamed_addr constant [3 x i8] c"@F\00" +@.str.7039 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7040 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7041 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7042 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7043 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7044 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7045 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7046 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7047 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7048 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7049 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.7050 = private unnamed_addr constant [3 x i8] c"@S\00" +@.str.7051 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7052 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7053 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7054 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7055 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7056 = private unnamed_addr constant [4 x i8] c"@SF\00" +@.str.7057 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7058 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7059 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7060 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7061 = private unnamed_addr constant [3 x i8] c"@E\00" +@.str.7062 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7063 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7064 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7065 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7066 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7067 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7068 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7069 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7070 = private unnamed_addr constant [3 x i8] c"@I\00" +@.str.7071 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7072 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7073 = private unnamed_addr constant [5 x i8] c"/doc\00" +@.str.7074 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.7075 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7076 = private unnamed_addr constant [12 x i8] c" --overlay \00" +@.str.7077 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.7078 = private unnamed_addr constant [9 x i8] c"/out.txt\00" +@.str.7079 = private unnamed_addr constant [8 x i8] c" index \00" +@.str.7080 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.7081 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.7082 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7083 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7084 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7085 = private unnamed_addr constant [9 x i8] c"severity\00" +@.str.7086 = private unnamed_addr constant [7 x i8] c"source\00" +@.str.7087 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7088 = private unnamed_addr constant [8 x i8] c"message\00" +@.str.7089 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7090 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7091 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7092 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7093 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7094 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7095 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7096 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7097 = private unnamed_addr constant [9 x i8] c"contents\00" +@.str.7098 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7099 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7100 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7101 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7102 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7103 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7104 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7105 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7106 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7107 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7108 = private unnamed_addr constant [15 x i8] c"selectionRange\00" +@.str.7109 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7110 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7111 = private unnamed_addr constant [7 x i8] c"detail\00" +@.str.7112 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7113 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7114 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7115 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7116 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7117 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7118 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7119 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00" +@.str.7120 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7121 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7122 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7123 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7124 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7125 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7126 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7127 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7128 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.7129 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7130 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7131 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7132 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7133 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7135 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7136 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7137 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7138 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7139 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7140 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7141 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.7142 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7143 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7144 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7145 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7146 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7147 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7148 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7149 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7150 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7151 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.7152 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7153 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7154 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7155 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7156 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7157 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7158 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7159 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7160 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7161 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7162 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7163 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7164 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7165 = private unnamed_addr constant [7 x i8] c"module\00" +@.str.7166 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7167 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7168 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7169 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7170 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7171 = private unnamed_addr constant [13 x i8] c"isIncomplete\00" +@.str.7172 = private unnamed_addr constant [6 x i8] c"items\00" +@.str.7173 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7174 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7175 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7176 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7177 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7178 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7179 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7180 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7181 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7182 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7183 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7184 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7185 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7186 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7187 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7188 = private unnamed_addr constant [11 x i8] c"parameters\00" +@.str.7189 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7190 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7191 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7192 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7193 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7194 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7195 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7196 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7197 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7198 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7199 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7200 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7201 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7202 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7203 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.7204 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7205 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.7206 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.7207 = private unnamed_addr constant [11 x i8] c"initialize\00" +@.str.7208 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00" +@.str.7209 = private unnamed_addr constant [14 x i8] c"hoverProvider\00" +@.str.7210 = private unnamed_addr constant [19 x i8] c"definitionProvider\00" +@.str.7211 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00" +@.str.7212 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7213 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7214 = private unnamed_addr constant [19 x i8] c"completionProvider\00" +@.str.7215 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.7216 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7217 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7218 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00" +@.str.7219 = private unnamed_addr constant [13 x i8] c"capabilities\00" +@.str.7220 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7221 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7222 = private unnamed_addr constant [11 x i8] c"serverInfo\00" +@.str.7223 = private unnamed_addr constant [9 x i8] c"shutdown\00" +@.str.7224 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.7225 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00" +@.str.7226 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00" +@.str.7227 = private unnamed_addr constant [15 x i8] c"contentChanges\00" +@.str.7228 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7229 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7230 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00" +@.str.7231 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00" +@.str.7232 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7233 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7234 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7235 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7236 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7237 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7238 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7239 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00" +@.str.7240 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7241 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7242 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7243 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7244 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7245 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7246 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7247 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7248 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7249 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7250 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7251 = private unnamed_addr constant [12 x i8] c"/finch_lsp_\00" +@.str.7252 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7253 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7254 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7255 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7256 = private unnamed_addr constant [3 x i8] c"\5C\22\00" +@.str.7257 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" +@.str.7258 = private unnamed_addr constant [3 x i8] c"\5Cn\00" +@.str.7259 = private unnamed_addr constant [3 x i8] c"\5Cr\00" +@.str.7260 = private unnamed_addr constant [3 x i8] c"\5Ct\00" +@.str.7261 = private unnamed_addr constant [5 x i8] c"\5Cu00\00" +@.str.7262 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7263 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7264 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.7265 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7266 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7267 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7268 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7269 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7270 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7271 = private unnamed_addr constant [3 x i8] c": \00" +@.str.7272 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7273 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7274 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7275 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7276 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7277 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.7278 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7279 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7280 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7281 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7282 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7283 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7284 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7285 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7286 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7287 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7288 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7289 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7290 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.7291 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7292 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7293 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7294 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7295 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7296 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7297 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7298 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7299 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7300 = private unnamed_addr constant [3 x i8] c"{}\00" +@.str.7301 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7302 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7303 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.7304 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7305 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7306 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7307 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7308 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7309 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7310 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7311 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.7312 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7313 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" +@.str.7314 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7315 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7316 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7317 = private unnamed_addr constant [3 x i8] c" \00" +@.str.7318 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7319 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7320 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7321 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7322 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7323 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7324 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7325 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7326 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7327 = private unnamed_addr constant [6 x i8] c"line \00" +@.str.7328 = private unnamed_addr constant [10 x i8] c", column \00" +@.str.7329 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7330 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7331 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7332 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7333 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7334 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7335 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7336 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7337 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7338 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7339 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7340 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7341 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7342 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7343 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7344 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7345 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7346 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7347 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7348 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7349 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7350 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7351 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7352 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7353 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7354 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7355 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7356 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7357 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7358 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7359 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7360 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7361 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7362 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7363 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7364 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7365 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7366 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7367 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7368 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00" +@.str.7369 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7370 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7371 = private unnamed_addr constant [14 x i8] c"json: found '\00" +@.str.7372 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7373 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7374 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7375 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7376 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7377 = private unnamed_addr constant [9 x i8] c"' where \00" +@.str.7378 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7379 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7380 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7381 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7382 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7383 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7384 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7385 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7386 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7387 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7388 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7389 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7390 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7391 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7392 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7393 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7394 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7395 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7396 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7397 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7398 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7399 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7400 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7401 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7402 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7403 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7404 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00" +@.str.7405 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7406 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7407 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7408 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7409 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7410 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7411 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7412 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7413 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7414 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7415 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7416 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7417 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7418 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7419 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7420 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00" +@.str.7421 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7422 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7423 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7424 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7425 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7426 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7427 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7428 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7429 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7430 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7431 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7432 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7434 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7435 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00" +@.str.7436 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7437 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7438 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7439 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7440 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7441 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7442 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7443 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7444 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7445 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7446 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7448 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7449 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7450 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.7451 = private unnamed_addr constant [3 x i8] c"\5Cu\00" +@.str.7452 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7453 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7454 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00" +@.str.7455 = private unnamed_addr constant [13 x i8] c" in a text (\00" +@.str.7456 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7457 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7458 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7459 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7460 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7461 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7463 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7464 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7465 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7466 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7467 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7468 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7469 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7470 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7471 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7472 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7473 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7474 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7475 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7476 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7477 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7478 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7479 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7480 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7481 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7482 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7483 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7484 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7485 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7486 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7487 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7488 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7489 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7490 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7491 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7492 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7493 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7494 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7495 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7496 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7497 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7498 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7499 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7500 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7501 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7502 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7503 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7504 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7505 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7506 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7507 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7508 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7509 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7510 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7511 = private unnamed_addr constant [9 x i8] c"a number\00" +@.str.7512 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7513 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7514 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7515 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7516 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7517 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7518 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7519 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7520 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7521 = private unnamed_addr constant [16 x i8] c"a key in quotes\00" +@.str.7522 = private unnamed_addr constant [4 x i8] c"':'\00" +@.str.7523 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7524 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7525 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7526 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7527 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7528 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7529 = private unnamed_addr constant [11 x i8] c"',' or '}'\00" +@.str.7530 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7531 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7532 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7533 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7534 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7535 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7536 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7537 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7538 = private unnamed_addr constant [11 x i8] c"',' or ']'\00" +@.str.7539 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.7540 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7541 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7542 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7543 = private unnamed_addr constant [20 x i8] c"the end of the text\00" +@.str.7544 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.7545 = private unnamed_addr constant [13 x i8] c"std/json.fch\00" +@.str.7546 = private unnamed_addr constant [13 x i8] c"std/path.fch\00" +@.str.7547 = private unnamed_addr constant [13 x i8] c"std/proc.fch\00" +@.str.7548 = private unnamed_addr constant [21 x i8] c"std/proc_windows.fch\00" +@.str.7549 = private unnamed_addr constant [13 x i8] c"std/time.fch\00" +@.str.7550 = private unnamed_addr constant [21 x i8] c"std/time_windows.fch\00" +@.str.7551 = private unnamed_addr constant [16 x i8] c"std/finch_win.h\00" +@.str.7552 = private unnamed_addr constant [24982 x i8] c"// The Finch runtime: string and array helpers, input, files and runtime errors.\0A// It is embedded in the compiler, compiled once into a cache folder, and linked\0A// statically into every Finch program. Everything here is plain C with no state.\0A//\0A// Layout shared with the compiler (src/codegen.cpp):\0A// str = { char *ptr; int64 len; int64 cap } ptr is always NUL-terminated\0A// cap > 0 : heap memory owned by the value (cap bytes allocated)\0A// cap == 0 : a string literal, valid forever, never written to\0A// cap == -1: borrowed from C, must be copied before it is kept\0A// []T = { T *ptr; int64 len; int64 cap } owns ptr when cap > 0\0A// map[K]V: see \22maps\22 below\0A\0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#ifndef _WIN32\0A#include \0A#endif\0A\0Atypedef struct {\0A char *ptr;\0A int64_t len;\0A int64_t cap;\0A} FStr;\0A\0Atypedef struct {\0A void *ptr;\0A int64_t len;\0A int64_t cap;\0A} FArr;\0A\0Astatic char empty[1] = \22\22;\0A\0A// ---------- runtime errors ----------\0A\0A// A program that loads Finch libraries (finch build --shared) can take runtime errors over\0A// instead of the process exiting: finch_module_on_fatal(handler) in each library. The handler\0A// gets the message and must not return (longjmp out, or exit itself).\0Astatic void (*fatal_hook)(const char *msg);\0Avoid finch_on_fatal(void (*hook)(const char *msg)) { fatal_hook = hook; }\0A\0Astatic __attribute__((noreturn)) void fatal(const char *msg) {\0A if (fatal_hook) fatal_hook(msg);\0A fflush(stdout);\0A fprintf(stderr, \22%s\5Cn\22, msg);\0A exit(1);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic(const char *file, int64_t line, const char *msg) {\0A char full[1024];\0A snprintf(full, sizeof full, \22%s:%lld: runtime error: %s\22, file, (long long)line, msg);\0A fflush(stdout);\0A fatal(full);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic_index(const char *file, int64_t line, int64_t i, int64_t len) {\0A char msg[128];\0A snprintf(msg, sizeof msg, \22index %lld is out of range (the length is %lld)\22, (long long)i, (long long)len);\0A finch_panic(file, line, msg);\0A}\0A\0Astatic void *must(void *p) {\0A if (!p) {\0A fflush(stdout);\0A fatal(\22runtime error: out of memory\22);\0A }\0A return p;\0A}\0A\0Avoid *finch_alloc(int64_t n) { return must(malloc(n ? (size_t)n : 1)); }\0Avoid *finch_zalloc(int64_t n) { return must(calloc(1, n ? (size_t)n : 1)); }\0A\0A// ---------- strings ----------\0A\0Astatic void str_heap(FStr *out, const char *p, int64_t len) {\0A char *m = finch_alloc(len + 1);\0A if (len) memcpy(m, p, (size_t)len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void str_static(FStr *out, const char *lit) {\0A out->ptr = (char *)lit;\0A out->len = (int64_t)strlen(lit);\0A out->cap = 0;\0A}\0A\0A// A copy that can be kept: literals are shared, everything else is duplicated.\0Avoid finch_str_copy(FStr *out, const FStr *s) {\0A if (s->cap == 0) *out = *s;\0A else str_heap(out, s->ptr, s->len);\0A}\0A\0A// Make `s` writable (before s[i] = c).\0Avoid finch_str_own(FStr *s) {\0A if (s->cap > 0) return;\0A FStr t;\0A str_heap(&t, s->ptr, s->len);\0A *s = t;\0A}\0A\0Avoid finch_str_drop(FStr *s) {\0A if (s->cap > 0) free(s->ptr);\0A}\0A\0Avoid finch_str_from_c(FStr *out, const char *p) {\0A if (!p) {\0A str_static(out, empty);\0A return;\0A }\0A out->ptr = (char *)p;\0A out->len = (int64_t)strlen(p);\0A out->cap = -1;\0A}\0A\0Avoid finch_str_concat(FStr *out, const FStr *a, const FStr *b) {\0A int64_t len = a->len + b->len;\0A char *m = finch_alloc(len + 1);\0A memcpy(m, a->ptr, (size_t)a->len);\0A memcpy(m + a->len, b->ptr, (size_t)b->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Aint finch_str_eq(const FStr *a, const FStr *b) {\0A return a->len == b->len && memcmp(a->ptr, b->ptr, (size_t)a->len) == 0;\0A}\0A\0Aint64_t finch_str_cmp(const FStr *a, const FStr *b) {\0A int64_t n = a->len < b->len ? a->len : b->len;\0A int c = memcmp(a->ptr, b->ptr, (size_t)n);\0A if (c) return c < 0 ? -1 : 1;\0A return a->len < b->len ? -1 : a->len > b->len;\0A}\0A\0Avoid finch_str_from_int(FStr *out, int64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%lld\22, (long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_uint(FStr *out, uint64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%llu\22, (unsigned long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_float(FStr *out, double v) {\0A char buf[64];\0A int n = snprintf(buf, sizeof buf, \22%g\22, v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_char(FStr *out, char c) { str_heap(out, &c, 1); }\0A\0Avoid finch_str_from_bool(FStr *out, int b) { str_static(out, b ? \22true\22 : \22false\22); }\0A\0Astatic void number_error(char *msg, size_t size, const FStr *s, const char *kind) {\0A snprintf(msg, size, \22can't turn \5C\22%.*s\5C\22 into %s\22, (int)(s->len > 100 ? 100 : s->len), s->ptr ? s->ptr : \22\22, kind);\0A}\0A\0Astatic int parse_int(const FStr *s, int64_t *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A errno = 0;\0A long long v = strtoll(p, &end, 10);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end || errno == ERANGE);\0A}\0A\0Astatic int parse_float(const FStr *s, double *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A double v = strtod(p, &end);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end);\0A}\0A\0Aint64_t finch_str_to_int(const FStr *s, const char *file, int64_t line) {\0A int64_t v;\0A if (!parse_int(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0Adouble finch_str_to_float(const FStr *s, const char *file, int64_t line) {\0A double v;\0A if (!parse_float(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0A// ---------- errors as values: int(s) or 0, try read_file(p) ... ----------\0A// Each gives back 1 on success; on failure 0, with the message in *err.\0A\0Astatic void set_error(FStr *err, const char *msg) { str_heap(err, msg, (int64_t)strlen(msg)); }\0A\0Aint finch_str_try_int(const FStr *s, int64_t *out, FStr *err) {\0A if (parse_int(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Aint finch_str_try_float(const FStr *s, double *out, FStr *err) {\0A if (parse_float(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Astatic void file_error(FStr *err, const char *what, const FStr *path) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't %s the file \5C\22%.*s\5C\22: %s\22, what, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr ? path->ptr : \22\22, strerror(errno));\0A set_error(err, msg);\0A}\0A\0A// when `fn main() -> !` fails\0Avoid finch_report_error(const FStr *msg) {\0A fflush(stdout);\0A fprintf(stderr, \22error: %.*s\5Cn\22, (int)msg->len, msg->ptr ? msg->ptr : \22\22);\0A}\0A\0Avoid finch_str_sub(FStr *out, const FStr *s, int64_t start, int64_t end, const char *file, int64_t line) {\0A if (start < 0 || end > s->len || start > end) {\0A char msg[160];\0A snprintf(msg, sizeof msg, \22sub(%lld, %lld) is out of range (the length is %lld)\22, (long long)start,\0A (long long)end, (long long)s->len);\0A finch_panic(file, line, msg);\0A }\0A str_heap(out, s->ptr + start, end - start);\0A}\0A\0Aint64_t finch_str_find(const FStr *s, const FStr *t) {\0A if (t->len == 0) return 0;\0A for (int64_t i = 0; i + t->len <= s->len; i++)\0A if (s->ptr[i] == t->ptr[0] && memcmp(s->ptr + i, t->ptr, (size_t)t->len) == 0) return i;\0A return -1;\0A}\0A\0Aint finch_str_starts(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Aint finch_str_ends(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr + s->len - t->len, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Avoid finch_str_trim(FStr *out, const FStr *s) {\0A int64_t a = 0, b = s->len;\0A while (a < b && isspace((unsigned char)s->ptr[a])) a++;\0A while (b > a && isspace((unsigned char)s->ptr[b - 1])) b--;\0A str_heap(out, s->ptr + a, b - a);\0A}\0A\0Avoid finch_str_upper(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)toupper((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_lower(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)tolower((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_replace(FStr *out, const FStr *s, const FStr *from, const FStr *to) {\0A if (from->len == 0) {\0A str_heap(out, s->ptr, s->len);\0A return;\0A }\0A int64_t count = 0;\0A for (int64_t i = 0; i + from->len <= s->len;) {\0A if (memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A count++;\0A i += from->len;\0A } else {\0A i++;\0A }\0A }\0A int64_t len = s->len + count * (to->len - from->len);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < s->len;) {\0A if (i + from->len <= s->len && memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A memcpy(w, to->ptr, (size_t)to->len);\0A w += to->len;\0A i += from->len;\0A } else {\0A *w++ = s->ptr[i++];\0A }\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len);\0A\0A// \22a,b,,c\22.split(\22,\22) -> [\22a\22, \22b\22, \22\22, \22c\22]; split(\22\22) gives single characters.\0Avoid finch_str_split(FArr *out, const FStr *s, const FStr *sep) {\0A out->ptr = NULL;\0A out->len = out->cap = 0;\0A if (sep->len == 0) {\0A for (int64_t i = 0; i < s->len; i++) arr_push_str(out, s->ptr + i, 1);\0A return;\0A }\0A int64_t start = 0;\0A for (int64_t i = 0; i + sep->len <= s->len;) {\0A if (memcmp(s->ptr + i, sep->ptr, (size_t)sep->len) == 0) {\0A arr_push_str(out, s->ptr + start, i - start);\0A i += sep->len;\0A start = i;\0A } else {\0A i++;\0A }\0A }\0A arr_push_str(out, s->ptr + start, s->len - start);\0A}\0A\0Avoid finch_str_join(FStr *out, const FArr *parts, const FStr *sep) {\0A const FStr *p = parts->ptr;\0A int64_t len = 0;\0A for (int64_t i = 0; i < parts->len; i++) len += p[i].len + (i ? sep->len : 0);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < parts->len; i++) {\0A if (i) {\0A memcpy(w, sep->ptr, (size_t)sep->len);\0A w += sep->len;\0A }\0A memcpy(w, p[i].ptr, (size_t)p[i].len);\0A w += p[i].len;\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_repeat(FStr *out, const FStr *s, int64_t n) {\0A if (n < 0) n = 0;\0A int64_t len = s->len * n;\0A char *m = finch_alloc(len + 1);\0A for (int64_t i = 0; i < n; i++) memcpy(m + i * s->len, s->ptr, (size_t)s->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_from_bytes(FStr *out, const FArr *bytes) { str_heap(out, bytes->ptr, bytes->len); }\0A\0A// ---------- building text: print(x) and str(x) of arrays, maps and structs ----------\0A// A buffer starts as an empty str and grows on the heap.\0A\0Avoid finch_buf_add(FStr *b, const char *p, int64_t n) {\0A if (b->len + n + 1 > b->cap) {\0A int64_t cap = b->cap > 0 ? b->cap * 2 : 32;\0A while (cap < b->len + n + 1) cap *= 2;\0A b->ptr = must(realloc(b->cap > 0 ? b->ptr : NULL, (size_t)cap));\0A b->cap = cap;\0A }\0A if (n) memcpy(b->ptr + b->len, p, (size_t)n);\0A b->len += n;\0A b->ptr[b->len] = 0;\0A}\0A\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) __attribute__((format(printf, 2, 3)));\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) {\0A char t[64];\0A va_list ap;\0A va_start(ap, fmt);\0A int n = vsnprintf(t, sizeof t, fmt, ap);\0A va_end(ap);\0A finch_buf_add(b, t, n);\0A}\0A\0Avoid finch_buf_int(FStr *b, int64_t v) { buf_fmt(b, \22%lld\22, (long long)v); }\0Avoid finch_buf_uint(FStr *b, uint64_t v) { buf_fmt(b, \22%llu\22, (unsigned long long)v); }\0Avoid finch_buf_float(FStr *b, double v) { buf_fmt(b, \22%g\22, v); }\0Avoid finch_buf_bool(FStr *b, int v) { finch_buf_add(b, v ? \22true\22 : \22false\22, v ? 4 : 5); }\0Avoid finch_buf_ptr(FStr *b, const void *p) {\0A if (p) buf_fmt(b, \220x%llx\22, (unsigned long long)(uintptr_t)p);\0A else finch_buf_add(b, \22null\22, 4);\0A}\0A\0Avoid finch_buf_char(FStr *b, char c, int quoted) {\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A finch_buf_add(b, &c, 1);\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A}\0A\0Avoid finch_buf_str(FStr *b, const FStr *s, int quoted) {\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A finch_buf_add(b, s->ptr, s->len);\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A}\0A\0A// print the buffer and free it\0Avoid finch_buf_print(FStr *b) {\0A if (b->len) fwrite(b->ptr, 1, (size_t)b->len, stdout);\0A if (b->cap > 0) free(b->ptr);\0A}\0A\0A// ---------- arrays ----------\0A\0Avoid finch_arr_reserve(FArr *a, int64_t need, int64_t es) {\0A if (need <= a->cap) return;\0A int64_t cap = a->cap * 2;\0A if (cap < 4) cap = 4;\0A if (cap < need) cap = need;\0A a->ptr = must(realloc(a->cap > 0 ? a->ptr : NULL, (size_t)(cap * es)));\0A a->cap = cap;\0A}\0A\0Avoid finch_arr_make(FArr *out, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A out->ptr = len ? finch_zalloc(len * es) : NULL;\0A out->len = len;\0A out->cap = len;\0A}\0A\0A// grow or shrink to `len`; new elements are zero\0Avoid finch_arr_resize(FArr *a, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A finch_arr_reserve(a, len, es);\0A if (len > a->len) memset((char *)a->ptr + a->len * es, 0, (size_t)((len - a->len) * es));\0A a->len = len;\0A}\0A\0A// a byte-for-byte copy of the elements (the compiler deep-copies owning elements afterwards)\0Avoid finch_arr_clone_raw(FArr *out, const FArr *a, int64_t es) {\0A out->len = a->len;\0A out->cap = a->len;\0A out->ptr = a->len ? finch_alloc(a->len * es) : NULL;\0A if (a->len) memcpy(out->ptr, a->ptr, (size_t)(a->len * es));\0A}\0A\0Avoid finch_arr_free(FArr *a) {\0A if (a->cap > 0) free(a->ptr);\0A}\0A\0A// open a hole at i (0 <= i <= len), len grows by one\0Avoid finch_arr_insert_gap(FArr *a, int64_t i, int64_t es, const char *file, int64_t line) {\0A if (i < 0 || i > a->len) finch_panic_index(file, line, i, a->len);\0A finch_arr_reserve(a, a->len + 1, es);\0A char *p = a->ptr;\0A memmove(p + (i + 1) * es, p + i * es, (size_t)((a->len - i) * es));\0A a->len++;\0A}\0A\0A// close the hole at i (the element was already moved out), len shrinks by one\0Avoid finch_arr_remove_gap(FArr *a, int64_t i, int64_t es) {\0A char *p = a->ptr;\0A memmove(p + i * es, p + (i + 1) * es, (size_t)((a->len - i - 1) * es));\0A a->len--;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len) {\0A finch_arr_reserve(a, a->len + 1, (int64_t)sizeof(FStr));\0A str_heap((FStr *)a->ptr + a->len, p, len);\0A a->len++;\0A}\0A\0Avoid finch_bytes_from_str(FArr *out, const FStr *s) {\0A out->len = out->cap = s->len;\0A out->ptr = s->len ? finch_alloc(s->len) : NULL;\0A if (s->len) memcpy(out->ptr, s->ptr, (size_t)s->len);\0A}\0A\0A// ---------- program arguments, input and files ----------\0A\0Avoid finch_args(FArr *out, int argc, char **argv) {\0A out->len = out->cap = argc;\0A out->ptr = finch_alloc((int64_t)sizeof(FStr) * (argc ? argc : 1));\0A for (int i = 0; i < argc; i++) str_heap((FStr *)out->ptr + i, argv[i], (int64_t)strlen(argv[i]));\0A}\0A\0A// input(\22Name? \22) prints the prompt and reads one line, without the newline.\0Avoid finch_input(FStr *out, const FStr *prompt) {\0A if (prompt->len) fwrite(prompt->ptr, 1, (size_t)prompt->len, stdout);\0A fflush(stdout);\0A // read one line of any length (getline isn't available everywhere)\0A size_t size = 128, n = 0;\0A char *line = finch_alloc((int64_t)size);\0A int c, got = 0;\0A while ((c = fgetc(stdin)) != EOF) {\0A got = 1;\0A if (c == '\5Cn') break;\0A if (n + 1 >= size) line = must(realloc(line, size *= 2));\0A line[n++] = (char)c;\0A }\0A if (!got) {\0A free(line);\0A str_static(out, empty);\0A return;\0A }\0A while (n > 0 && line[n - 1] == '\5Cr') n--;\0A line[n] = 0;\0A out->ptr = line;\0A out->len = (int64_t)n;\0A out->cap = (int64_t)size;\0A}\0A\0Aint finch_file_exists(const FStr *path) {\0A FILE *f = fopen(path->ptr, \22rb\22);\0A if (f) fclose(f);\0A return f != NULL;\0A}\0A\0Aint finch_try_read_file(FStr *out, const FStr *path, FStr *err) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A file_error(err, \22read\22, path);\0A return 0;\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A return 1;\0A}\0A\0Avoid finch_read_file(FStr *out, const FStr *path, const char *file, int64_t line) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't read the file \5C\22%.*s\5C\22: %s\22, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr, strerror(errno));\0A finch_panic(file, line, msg);\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A}\0A\0A// shell(\22ls -l\22): run a command, give back its exit code\0Aint64_t finch_shell(const FStr *cmd) {\0A fflush(stdout);\0A int status = system(cmd->ptr ? cmd->ptr : \22\22);\0A#ifdef _WIN32\0A return status; // Windows gives the exit code directly\0A#else\0A if (status == -1) return -1;\0A if (WIFEXITED(status)) return WEXITSTATUS(status);\0A return 128 + (WIFSIGNALED(status) ? WTERMSIG(status) : 0);\0A#endif\0A}\0A\0Aint finch_delete_file(const FStr *path) { return remove(path->ptr ? path->ptr : \22\22) == 0; }\0A\0Aint finch_try_delete_file(const FStr *path, FStr *err) {\0A if (remove(path->ptr ? path->ptr : \22\22) == 0) return 1;\0A file_error(err, \22delete\22, path);\0A return 0;\0A}\0A\0A// stdin/stdout/stderr are macros on some systems (Windows), so Finch asks for them here\0Avoid *finch_std_stream(int i) { return i == 0 ? (void *)stdin : i == 1 ? (void *)stdout : (void *)stderr; }\0A\0Aint finch_write_file(const FStr *path, const FStr *text) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22wb\22);\0A if (!f) return 0;\0A size_t put = text->len ? fwrite(text->ptr, 1, (size_t)text->len, f) : 0;\0A return fclose(f) == 0 && put == (size_t)text->len;\0A}\0A\0Aint finch_try_write_file(const FStr *path, const FStr *text, FStr *err) {\0A errno = 0;\0A if (finch_write_file(path, text)) return 1;\0A if (!errno) errno = EIO;\0A file_error(err, \22write\22, path);\0A return 0;\0A}\0A\0A// ---------- maps ----------\0A// map[K]V = { entries; len; used; cap; index; icap; adds }\0A// entries: `used` slots of es bytes, each { uint64 hash; K key; V value }, in insertion order.\0A// A removed entry keeps its slot (hash 0) until the next resize packs the slots.\0A// index: icap slots (a power of two, at least 2 * cap): -1 empty, -2 removed, else an entry number.\0A// adds: how many keys were ever added; a `for` over the map stops with an error if it changes.\0A// The compiler stores, copies and drops keys and values; the runtime only finds and places entries.\0A// Keys are compared byte for byte (numbers, chars, bools) or as text (kstr).\0A\0Atypedef struct {\0A char *entries;\0A int64_t len, used, cap;\0A int64_t *index;\0A int64_t icap;\0A int64_t adds;\0A} FMap;\0A\0Astatic uint64_t map_hash(const void *key, int64_t ks, int kstr) {\0A const unsigned char *p;\0A size_t n;\0A if (kstr) {\0A const FStr *s = key;\0A p = (const unsigned char *)s->ptr;\0A n = (size_t)s->len;\0A } else {\0A p = key;\0A n = (size_t)ks;\0A }\0A uint64_t h = 1469598103934665603ULL; // FNV-1a, then mixed so the low bits spread well\0A for (size_t i = 0; i < n; i++) {\0A h ^= p[i];\0A h *= 1099511628211ULL;\0A }\0A h ^= h >> 31;\0A h *= 0xbf58476d1ce4e5b9ULL;\0A h ^= h >> 29;\0A return h | 1; // 0 marks a removed entry\0A}\0A\0Astatic int map_key_eq(const char *a, const void *b, int64_t ks, int kstr) {\0A if (!kstr) return memcmp(a, b, (size_t)ks) == 0;\0A const FStr *x = (const FStr *)a, *y = b;\0A return x->len == y->len && (x->len == 0 || memcmp(x->ptr, y->ptr, (size_t)x->len) == 0);\0A}\0A\0Astatic void map_reindex(FMap *m, int64_t es) {\0A if (m->len != m->used) { // pack the slots of removed entries away\0A int64_t j = 0;\0A for (int64_t i = 0; i < m->used; i++) {\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == 0) continue;\0A if (i != j) memmove(m->entries + j * es, e, (size_t)es);\0A j++;\0A }\0A m->used = j;\0A }\0A int64_t icap = 16;\0A while (icap < m->cap * 2) icap *= 2;\0A free(m->index);\0A m->index = finch_alloc(icap * (int64_t)sizeof(int64_t));\0A memset(m->index, 0xff, (size_t)icap * sizeof(int64_t));\0A m->icap = icap;\0A for (int64_t i = 0; i < m->used; i++) {\0A uint64_t h = *(uint64_t *)(m->entries + i * es);\0A int64_t s = (int64_t)(h & (uint64_t)(icap - 1));\0A while (m->index[s] != -1) s = (s + 1) & (icap - 1);\0A m->index[s] = i;\0A }\0A}\0A\0A// the entry number of `key`, or -1\0Aint64_t finch_map_find(const FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr) {\0A if (m->len == 0) return -1;\0A uint64_t h = map_hash(key, ks, kstr);\0A for (int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));; s = (s + 1) & (m->icap - 1)) {\0A int64_t i = m->index[s];\0A if (i == -1) return -1;\0A if (i < 0) continue;\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == h && map_key_eq(e + 8, key, ks, kstr)) return i;\0A }\0A}\0A\0A// The entry for `key`. A new one is zeroed except its hash (*added = 1); the compiler then stores the key.\0Aint64_t finch_map_slot(FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr, int32_t *added) {\0A int64_t i = finch_map_find(m, key, es, ks, kstr);\0A *added = i < 0;\0A if (i >= 0) return i;\0A if (m->used == m->cap) {\0A if (m->len * 4 < m->cap * 3) { // many removed slots: pack them instead of growing\0A map_reindex(m, es);\0A } else {\0A m->cap = m->cap ? m->cap * 2 : 8;\0A m->entries = must(realloc(m->entries, (size_t)(m->cap * es)));\0A map_reindex(m, es);\0A }\0A }\0A uint64_t h = map_hash(key, ks, kstr);\0A i = m->used++;\0A char *e = m->entries + i * es;\0A memset(e, 0, (size_t)es);\0A *(uint64_t *)e = h;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] >= 0) s = (s + 1) & (m->icap - 1);\0A m->index[s] = i;\0A m->len++;\0A m->adds++;\0A return i;\0A}\0A\0A// Forget entry i (its key and value were already dropped by the compiler).\0Avoid finch_map_remove_at(FMap *m, int64_t i, int64_t es) {\0A char *e = m->entries + i * es;\0A uint64_t h = *(uint64_t *)e;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] != i) s = (s + 1) & (m->icap - 1);\0A m->index[s] = -2;\0A *(uint64_t *)e = 0;\0A if (--m->len == 0) {\0A m->used = 0;\0A memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A }\0A}\0A\0Avoid finch_map_clear(FMap *m) {\0A m->len = m->used = 0;\0A if (m->index) memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0Avoid finch_map_free(FMap *m) {\0A free(m->entries);\0A free(m->index);\0A}\0A\0A// A copy of the slots and the index; the compiler then copies the keys and values that own memory.\0Avoid finch_map_clone_raw(FMap *out, const FMap *m, int64_t es) {\0A *out = *m;\0A if (!m->cap) return;\0A out->entries = finch_alloc(m->cap * es);\0A memcpy(out->entries, m->entries, (size_t)(m->used * es));\0A out->index = finch_alloc(m->icap * (int64_t)sizeof(int64_t));\0A memcpy(out->index, m->index, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_changed(const char *file, int64_t line) {\0A finch_panic(file, line, \22a key was added to the map while looping over it (collect the new keys, and add them after the loop)\22);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_missing(const char *file, int64_t line, const FStr *key) {\0A char msg[200];\0A snprintf(msg, sizeof msg, \22the key %.*s is not in the map (check with .has(key), or use .get(key, default))\22,\0A (int)(key->len > 100 ? 100 : key->len), key->ptr ? key->ptr : \22\22);\0A finch_panic(file, line, msg);\0A}\0A\00" +@.str.7553 = private unnamed_addr constant [12885 x i8] c"// JSON: read it, build it, write it.\0A//\0A// import json\0A//\0A// doc := try json.parse(\22{\5C\22name\5C\22: \5C\22Finch\5C\22, \5C\22tags\5C\22: [\5C\22fast\5C\22, \5C\22small\5C\22], \5C\22stars\5C\22: 5}\22)\0A// print(doc.get(\22name\22).str_or(\22\22)) Finch\0A// print(doc.get(\22tags\22).at(1).str_or(\22\22)) small\0A// print(doc.get(\22stars\22).int_or(0)) 5\0A// print(doc.get(\22missing\22).is_null()) true (a missing key is null, so chains never fail)\0A//\0A// out := json.new_object()\0A// out.set(\22ok\22, json.new_bool(true))\0A// list := json.new_list()\0A// list.push(json.new_number(1.5))\0A// out.set(\22values\22, list)\0A// print(json.stringify(out)) {\22ok\22:true,\22values\22:[1.5]}\0A// print(json.pretty(out)) the same, over several lines\0A\0Aenum Kind { Null, Bool, Number, Text, List, Object }\0A\0A// One JSON value. `kind` says which of the other fields it uses: flag for Bool, num for Number,\0A// text for Text, items for List, and items with keys (the same length, in the same order) for Object.\0Astruct Json {\0A Kind kind\0A bool flag\0A float num\0A str text\0A []Json items\0A []str keys\0A}\0A\0Afn new_null() -> Json {\0A return Json(kind: Kind.Null)\0A}\0A\0Afn new_bool(bool b) -> Json {\0A return Json(kind: Kind.Bool, flag: b)\0A}\0A\0Afn new_number(float n) -> Json {\0A return Json(kind: Kind.Number, num: n)\0A}\0A\0Afn new_text(str s) -> Json {\0A return Json(kind: Kind.Text, text: s)\0A}\0A\0Afn new_list() -> Json {\0A return Json(kind: Kind.List)\0A}\0A\0Afn new_object() -> Json {\0A return Json(kind: Kind.Object)\0A}\0A\0A// ---------- looking inside ----------\0A\0Afn Json.is_null() -> bool {\0A return self.kind == Kind.Null\0A}\0A\0A// the number of elements of a list, of keys of an object, of bytes of a text; 0 for the rest\0Afn Json.len() -> int {\0A return match self.kind {\0A List, Object -> self.items.len\0A Text -> self.text.len\0A else -> 0\0A }\0A}\0A\0Afn Json.has(str key) -> bool {\0A return self.kind == Kind.Object && self.keys.contains(key)\0A}\0A\0A// the value of a key of an object; null if there is none (or this is not an object)\0Afn Json.get(str key) -> Json {\0A if self.kind != Kind.Object {\0A return new_null()\0A }\0A i := self.keys.find(key)\0A if i < 0 {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the element of a list; null if there is none\0Afn Json.at(int i) -> Json {\0A if self.kind != Kind.List || i < 0 || i >= self.items.len {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the value if it is of that kind, else what was given\0Afn Json.str_or(str fallback) -> str {\0A if self.kind == Kind.Text {\0A return self.text\0A }\0A return fallback\0A}\0A\0Afn Json.float_or(float fallback) -> float {\0A if self.kind == Kind.Number {\0A return self.num\0A }\0A return fallback\0A}\0A\0Afn Json.int_or(int fallback) -> int {\0A if self.kind == Kind.Number {\0A return int(self.num)\0A }\0A return fallback\0A}\0A\0Afn Json.bool_or(bool fallback) -> bool {\0A if self.kind == Kind.Bool {\0A return self.flag\0A }\0A return fallback\0A}\0A\0A// the keys of an object, in the order they were written\0Afn Json.names() -> []str {\0A return self.keys\0A}\0A\0A// ---------- building ----------\0A\0A// add to the end of a list\0Afn Json.push(Json v) {\0A self.items.push(v)\0A}\0A\0A// give a key a value in an object; a key that is already there is replaced\0Afn Json.set(str key, Json v) {\0A i := self.keys.find(key)\0A if i >= 0 {\0A self.items[i] = v\0A return\0A }\0A self.keys.push(key)\0A self.items.push(v)\0A}\0A\0A// ---------- writing ----------\0A\0Afn quote(str s) -> str {\0A []str parts = [\22\5C\22\22]\0A for c in s {\0A n := int(c)\0A if c == '\22' {\0A parts.push(\22\5C\5C\5C\22\22)\0A } else if c == '\5C\5C' {\0A parts.push(\22\5C\5C\5C\5C\22)\0A } else if c == '\5Cn' {\0A parts.push(\22\5C\5Cn\22)\0A } else if c == '\5Cr' {\0A parts.push(\22\5C\5Cr\22)\0A } else if c == '\5Ct' {\0A parts.push(\22\5C\5Ct\22)\0A } else if n < 32 {\0A parts.push(\22\5C\5Cu00\22 + hexdigit(n / 16) + hexdigit(n % 16))\0A } else {\0A parts.push(str(c))\0A }\0A }\0A parts.push(\22\5C\22\22)\0A return parts.join(\22\22)\0A}\0A\0Afn hexdigit(int n) -> str {\0A digits := \220123456789abcdef\22\0A return str(digits[n])\0A}\0A\0Afn number_text(float n) -> str {\0A if n == float(int(n)) && n > -1000000000000000.0 && n < 1000000000000000.0 {\0A return str(int(n))\0A }\0A return str(n)\0A}\0A\0Astruct Writer {\0A []str out\0A}\0A\0Afn write(Json j, str indent, str pad, ptr[Writer] w) {\0A nl := \22\22\0A inner := \22\22\0A sep := \22,\22\0A colon := \22:\22\0A if indent.len > 0 {\0A nl = \22\5Cn\22\0A inner = pad + indent\0A colon = \22: \22\0A }\0A match j.kind {\0A Null -> w.out.push(\22null\22)\0A Bool -> {\0A if j.flag {\0A w.out.push(\22true\22)\0A } else {\0A w.out.push(\22false\22)\0A }\0A }\0A Number -> w.out.push(number_text(j.num))\0A Text -> w.out.push(quote(j.text))\0A List -> {\0A if j.items.len == 0 {\0A w.out.push(\22[]\22)\0A return\0A }\0A w.out.push(\22[\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22]\22)\0A }\0A Object -> {\0A if j.items.len == 0 {\0A w.out.push(\22{}\22)\0A return\0A }\0A w.out.push(\22{\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner + quote(j.keys[i]) + colon)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22}\22)\0A }\0A }\0A}\0A\0A// the value as text on one line\0Afn stringify(Json j) -> str {\0A w := Writer()\0A write(j, \22\22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// the value as text over several lines, indented by two spaces\0Afn pretty(Json j) -> str {\0A w := Writer()\0A write(j, \22 \22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// ---------- reading ----------\0A\0Astruct Reader {\0A str src\0A int i\0A}\0A\0A// the line and column of a position, for a message\0Afn where(ptr[Reader] r) -> str {\0A line := 1\0A col := 1\0A for k in 0..r.i {\0A if k < r.src.len && r.src[k] == '\5Cn' {\0A line += 1\0A col = 1\0A } else {\0A col += 1\0A }\0A }\0A return \22line \22 + str(line) + \22, column \22 + str(col)\0A}\0A\0Afn peek(ptr[Reader] r) -> char {\0A if r.i < r.src.len {\0A return r.src[r.i]\0A }\0A return char(0)\0A}\0A\0Afn skip_space(ptr[Reader] r) {\0A while r.i < r.src.len && (r.src[r.i] == ' ' || r.src[r.i] == '\5Cn' || r.src[r.i] == '\5Ct' || r.src[r.i] == '\5Cr') {\0A r.i += 1\0A }\0A}\0A\0Afn unexpected(ptr[Reader] r, str wanted) -> str {\0A if r.i >= r.src.len {\0A return \22json: the text ends where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A }\0A return \22json: found '\22 + str(r.src[r.i]) + \22' where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A}\0A\0A// does `word` come next?\0Afn comes(ptr[Reader] r, str word) -> bool {\0A return r.src.len - r.i >= word.len && r.src.sub(r.i, r.i + word.len) == word\0A}\0A\0Afn expect_word(ptr[Reader] r, str word) -> ! {\0A if !comes(r, word) {\0A return error(unexpected(r, \22'\22 + word + \22'\22))\0A }\0A r.i += word.len\0A}\0A\0Afn hex_value(char c) -> int {\0A if c >= '0' && c <= '9' {\0A return int(c) - int('0')\0A }\0A if c >= 'a' && c <= 'f' {\0A return int(c) - int('a') + 10\0A }\0A if c >= 'A' && c <= 'F' {\0A return int(c) - int('A') + 10\0A }\0A return -1\0A}\0A\0A// a code point as UTF-8\0Afn utf8(int cp) -> str {\0A []u8 b\0A if cp < 128 {\0A b.push(u8(cp))\0A } else if cp < 2048 {\0A b.push(u8(192 + cp / 64))\0A b.push(u8(128 + cp % 64))\0A } else if cp < 65536 {\0A b.push(u8(224 + cp / 4096))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A } else {\0A b.push(u8(240 + cp / 262144))\0A b.push(u8(128 + (cp / 4096) % 64))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A }\0A return str(b)\0A}\0A\0Afn read_hex4(ptr[Reader] r) -> int! {\0A n := 0\0A for k in 0..4 {\0A if r.i >= r.src.len || hex_value(r.src[r.i]) < 0 {\0A return error(unexpected(r, \22a hexadecimal digit\22))\0A }\0A n = n * 16 + hex_value(r.src[r.i])\0A r.i += 1\0A }\0A return n\0A}\0A\0Afn read_string(ptr[Reader] r) -> str! {\0A r.i += 1 // the opening quote\0A []str parts\0A start := r.i\0A while true {\0A if r.i >= r.src.len {\0A return error(\22json: a text is never closed (\22 + where(r) + \22)\22)\0A }\0A c := r.src[r.i]\0A if c == '\22' {\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A return parts.join(\22\22)\0A }\0A if int(c) < 32 {\0A return error(\22json: a line break or control character inside a text (\22 + where(r) + \22)\22)\0A }\0A if c != '\5C\5C' {\0A r.i += 1\0A continue\0A }\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A e := peek(r)\0A r.i += 1\0A if e == 'n' {\0A parts.push(\22\5Cn\22)\0A } else if e == 't' {\0A parts.push(\22\5Ct\22)\0A } else if e == 'r' {\0A parts.push(\22\5Cr\22)\0A } else if e == 'b' {\0A parts.push(utf8(8))\0A } else if e == 'f' {\0A parts.push(utf8(12))\0A } else if e == '\22' || e == '\5C\5C' || e == '/' {\0A parts.push(str(e))\0A } else if e == 'u' {\0A cp := try read_hex4(r)\0A // a pair of \F0\9F\98\80 stands for one character above U+FFFF\0A if cp >= 55296 && cp < 56320 && comes(r, \22\5C\5Cu\22) {\0A r.i += 2\0A low := try read_hex4(r)\0A cp = 65536 + (cp - 55296) * 1024 + (low - 56320)\0A }\0A parts.push(utf8(cp))\0A } else {\0A return error(\22json: unknown escape \5C\5C\22 + str(e) + \22 in a text (\22 + where(r) + \22)\22)\0A }\0A start = r.i\0A }\0A}\0A\0Afn read_number(ptr[Reader] r) -> Json! {\0A start := r.i\0A if peek(r) == '-' {\0A r.i += 1\0A }\0A while r.i < r.src.len && ((r.src[r.i] >= '0' && r.src[r.i] <= '9') || r.src[r.i] == '.' || r.src[r.i] == 'e' || r.src[r.i] == 'E' || r.src[r.i] == '+' || r.src[r.i] == '-') {\0A r.i += 1\0A }\0A n := float(r.src.sub(start, r.i)) or {\0A r.i = start\0A return error(unexpected(r, \22a number\22))\0A }\0A return new_number(n)\0A}\0A\0Afn read_value(ptr[Reader] r) -> Json! {\0A skip_space(r)\0A c := peek(r)\0A if r.i >= r.src.len {\0A return error(unexpected(r, \22a value\22))\0A }\0A if c == '{' {\0A obj := new_object()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A while true {\0A skip_space(r)\0A if peek(r) != '\22' {\0A return error(unexpected(r, \22a key in quotes\22))\0A }\0A key := try read_string(r)\0A skip_space(r)\0A if peek(r) != ':' {\0A return error(unexpected(r, \22':'\22))\0A }\0A r.i += 1\0A v := try read_value(r)\0A obj.set(key, v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A return error(unexpected(r, \22',' or '}'\22))\0A }\0A }\0A if c == '[' {\0A list := new_list()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A while true {\0A v := try read_value(r)\0A list.push(v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A return error(unexpected(r, \22',' or ']'\22))\0A }\0A }\0A if c == '\22' {\0A s := try read_string(r)\0A return new_text(s)\0A }\0A if c == 't' {\0A try expect_word(r, \22true\22)\0A return new_bool(true)\0A }\0A if c == 'f' {\0A try expect_word(r, \22false\22)\0A return new_bool(false)\0A }\0A if c == 'n' {\0A try expect_word(r, \22null\22)\0A return new_null()\0A }\0A if c == '-' || (c >= '0' && c <= '9') {\0A return try read_number(r)\0A }\0A return error(unexpected(r, \22a value\22))\0A}\0A\0A// the JSON in `text`; an error with the line and column where it went wrong\0Afn parse(str text) -> Json! {\0A r := Reader(src: text)\0A v := try read_value(addr(r))\0A skip_space(addr(r))\0A if r.i < r.src.len {\0A return error(unexpected(addr(r), \22the end of the text\22))\0A }\0A return v\0A}\0A\00" +@.str.7554 = private unnamed_addr constant [2847 x i8] c"// Paths, as text. Elements are separated by \22/\22.\0A//\0A// import path\0A// path.join(\22a\22, \22b.txt\22) a/b.txt\0A// path.base(\22/tmp/x/a.tar.gz\22) a.tar.gz path.stem(...) a.tar path.ext(...) .gz\0A// path.dir(\22/tmp/x/a.txt\22) /tmp/x\0A// path.clean(\22a//b/../c/./d\22) a/c/d\0A\0A// a and b with one separator between; an absolute b replaces a\0Afn join(str a, str b) -> str {\0A if a.len == 0 {\0A return b\0A }\0A if b.len == 0 {\0A return a\0A }\0A if b[0] == '/' {\0A return b\0A }\0A if a[a.len - 1] == '/' {\0A return a + b\0A }\0A return a + \22/\22 + b\0A}\0A\0Afn is_abs(str p) -> bool {\0A return p.len > 0 && p[0] == '/'\0A}\0A\0A// the last element: \22a/b.txt\22 -> \22b.txt\22, \22a/b/\22 -> \22b\22, \22\22 -> \22.\22, \22/\22 -> \22/\22\0Afn base(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A if end == 1 && p[0] == '/' {\0A return \22/\22\0A }\0A start := end\0A while start > 0 && p[start - 1] != '/' {\0A start -= 1\0A }\0A return p.sub(start, end)\0A}\0A\0A// everything before the last element: \22a/b.txt\22 -> \22a\22, \22b.txt\22 -> \22.\22, \22/b\22 -> \22/\22\0Afn dir(str p) -> str {\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A i := end\0A while i > 0 && p[i - 1] != '/' {\0A i -= 1\0A }\0A if i == 0 {\0A return \22.\22\0A }\0A while i > 1 && p[i - 1] == '/' {\0A i -= 1\0A }\0A return p.sub(0, i)\0A}\0A\0A// the part of the last element from its last dot: \22a.tar.gz\22 -> \22.gz\22; \22\22 when there is none\0Afn ext(str p) -> str {\0A b := base(p)\0A i := b.len\0A while i > 0 && b[i - 1] != '.' {\0A i -= 1\0A }\0A if i <= 1 { // no dot, or a name that only starts with one (.bashrc)\0A return \22\22\0A }\0A return b.sub(i - 1, b.len)\0A}\0A\0A// the last element without its extension\0Afn stem(str p) -> str {\0A b := base(p)\0A e := ext(p)\0A return b.sub(0, b.len - e.len)\0A}\0A\0A// the elements of a path: \22/a/b/c\22 -> [\22a\22, \22b\22, \22c\22]\0Afn parts(str p) -> []str {\0A []str out\0A for piece in p.split(\22/\22) {\0A if piece.len > 0 {\0A out.push(piece)\0A }\0A }\0A return out\0A}\0A\0A// the shortest path with the same meaning: no \22//\22, no \22.\22, and \22..\22 resolved where it can be\0Afn clean(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A abs := is_abs(p)\0A []str out\0A for piece in parts(p) {\0A if piece == \22.\22 {\0A continue\0A }\0A if piece == \22..\22 {\0A if out.len > 0 && out[out.len - 1] != \22..\22 {\0A out.pop()\0A } else if !abs {\0A out.push(\22..\22)\0A }\0A continue\0A }\0A out.push(piece)\0A }\0A joined := out.join(\22/\22)\0A if abs {\0A return \22/\22 + joined\0A }\0A if joined.len == 0 {\0A return \22.\22\0A }\0A return joined\0A}\0A\00" +@.str.7555 = private unnamed_addr constant [1407 x i8] c"// Programs: run a command, read what it printed, look at the environment.\0A//\0A// import proc\0A// code := proc.run(\22make\22) the exit code; what the command prints goes to the screen\0A// text := try proc.output(\22git describe\22) what the command printed; an error if it failed\0A// proc.env(\22HOME\22, \22/\22) an environment variable, or the second value if it is not set\0Aimport \22stdlib.h\22\0Aimport \22unistd.h\22\0Aimport \22time.h\22\0A\0A// run a command; its output goes to the screen. Gives its exit code.\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0A// run a command and give what it printed. Fails, with its output as the message, if it exits with an error.\0Afn output(str command) -> str! {\0A tmp := \22/tmp/finch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(\22(\22 + command + \22) > '\22 + tmp + \22' 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0A// the folder the program is running in\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7556 = private unnamed_addr constant [996 x i8] c"// Programs, for Windows. The same functions as proc.fch (that file is for Linux and macOS).\0Aimport \22stdlib.h\22\0Aimport \22process.h\22\0Aimport \22direct.h\22\0Aimport \22time.h\22\0A\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0Afn output(str command) -> str! {\0A tmp := proc_env(\22TEMP\22, \22.\22) + \22\5C\5Cfinch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(command + \22 > \5C\22\22 + tmp + \22\5C\22 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn proc_env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn env(str name, str fallback) -> str {\0A return proc_env(name, fallback)\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7557 = private unnamed_addr constant [2540 x i8] c"// Time: the clock, sleeping, and dates.\0A//\0A// import time\0A// start := time.millis() milliseconds from a clock that only goes forward (to measure with)\0A// time.sleep(250) wait a quarter of a second\0A// time.now() seconds since 1970-01-01 00:00 UTC\0A// d := time.date(time.now()) the parts: d.year, d.month, d.day, d.hour, d.minute, d.second\0A// time.format(time.now(), \22%Y-%m-%d %H:%M\22) as text, in the computer's time zone\0Aimport \22time.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0A// seconds since 1970-01-01 00:00 UTC\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward: for measuring how long something took\0Afn millis() -> int {\0A timespec ts\0A clock_gettime(CLOCK_MONOTONIC, addr(ts))\0A return int(ts.tv_sec) * 1000 + int(ts.tv_nsec) / 1000000\0A}\0A\0Afn sleep(int ms) {\0A timespec ts\0A ts.tv_sec = ms / 1000\0A ts.tv_nsec = (ms % 1000) * 1000000\0A nanosleep(addr(ts), null)\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0A// the date and time of a moment, in UTC\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A gmtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// the date and time of a moment, in the computer's time zone\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// a moment as text, in the computer's time zone: %Y year, %m month, %d day, %H hour, %M minute, %S second\0A// (the rest of C's strftime works too: %A weekday name, %B month name, ...)\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0A// the number of days in a month (month is 1 to 12)\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7558 = private unnamed_addr constant [1793 x i8] c"// Time, for Windows. The same functions as time.fch (that file is for Linux and macOS).\0Aimport \22time.h\22\0Aimport \22finch_win.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward (the performance counter: GetTickCount64 ticks every 15 ms)\0Afn millis() -> int {\0A i64 count = 0\0A i64 freq = 1\0A QueryPerformanceFrequency(addr(freq))\0A QueryPerformanceCounter(addr(count))\0A return int(count / freq) * 1000 + int(count % freq) * 1000 / int(freq)\0A}\0A\0Afn sleep(int ms) {\0A Sleep(u32(ms))\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _gmtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7559 = private unnamed_addr constant [366 x i8] c"/* The Windows functions std/time_windows.fch needs. Declared here, not by including :\0A libclang can't parse that header with MinGW's intrinsics. Both are in kernel32. */\0Aunsigned long long GetTickCount64(void);\0Avoid Sleep(unsigned long milliseconds);\0Aint QueryPerformanceCounter(long long *count);\0Aint QueryPerformanceFrequency(long long *frequency);\0A\00" + +declare void @finch_panic(ptr, i64, ptr) noreturn cold +declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold +declare ptr @finch_alloc(i64) +declare void @finch_str_copy(ptr, ptr) +declare void @finch_str_drop(ptr) +declare void @finch_arr_free(ptr) +declare void @finch_map_free(ptr) +declare void @finch_str_own(ptr) +declare void @finch_str_concat(ptr, ptr, ptr) +declare i32 @finch_str_eq(ptr, ptr) +declare i64 @finch_str_cmp(ptr, ptr) +declare void @finch_buf_add(ptr, ptr, i64) +declare void @finch_buf_int(ptr, i64) +declare void @finch_buf_uint(ptr, i64) +declare void @finch_buf_float(ptr, double) +declare void @finch_buf_bool(ptr, i32) +declare void @finch_buf_ptr(ptr, ptr) +declare void @finch_buf_char(ptr, i8, i32) +declare void @finch_buf_str(ptr, ptr, i32) +declare void @finch_buf_print(ptr) +declare void @finch_str_from_int(ptr, i64) +declare void @finch_str_from_uint(ptr, i64) +declare void @finch_str_from_float(ptr, double) +declare void @finch_str_from_char(ptr, i8 signext) +declare void @finch_str_from_bool(ptr, i32) +declare i64 @finch_str_to_int(ptr, ptr, i64) +declare double @finch_str_to_float(ptr, ptr, i64) +declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64) +declare i64 @finch_str_find(ptr, ptr) +declare i32 @finch_str_starts(ptr, ptr) +declare i32 @finch_str_ends(ptr, ptr) +declare void @finch_str_trim(ptr, ptr) +declare void @finch_str_upper(ptr, ptr) +declare void @finch_str_lower(ptr, ptr) +declare void @finch_str_replace(ptr, ptr, ptr, ptr) +declare void @finch_str_split(ptr, ptr, ptr) +declare void @finch_str_join(ptr, ptr, ptr) +declare void @finch_str_repeat(ptr, ptr, i64) +declare void @finch_bytes_from_str(ptr, ptr) +declare i64 @finch_map_find(ptr, ptr, i64, i64, i32) +declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr) +declare void @finch_map_remove_at(ptr, i64, i64) +declare void @finch_map_clear(ptr) +declare void @finch_map_clone_raw(ptr, ptr, i64) +declare void @finch_map_missing(ptr, i64, ptr) noreturn cold +declare void @finch_map_changed(ptr, i64) noreturn cold +declare void @finch_arr_reserve(ptr, i64, i64) +declare void @finch_arr_clone_raw(ptr, ptr, i64) +declare void @finch_arr_make(ptr, i64, i64) +declare void @finch_arr_resize(ptr, i64, i64) +declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64) +declare void @finch_arr_remove_gap(ptr, i64, i64) +declare void @qsort(ptr, i64, i64, ptr) +declare void @finch_args(ptr, i32, ptr) +declare void @finch_input(ptr, ptr) +declare i32 @finch_file_exists(ptr) +declare i32 @finch_str_try_int(ptr, ptr, ptr) +declare i32 @finch_str_try_float(ptr, ptr, ptr) +declare i32 @finch_try_read_file(ptr, ptr, ptr) +declare i32 @finch_try_write_file(ptr, ptr, ptr) +declare i32 @finch_try_delete_file(ptr, ptr) +declare void @finch_report_error(ptr) +declare void @finch_read_file(ptr, ptr, ptr, i64) +declare i32 @finch_write_file(ptr, ptr) +declare i64 @finch_shell(ptr) +declare i32 @finch_delete_file(ptr) +declare i32 @printf(ptr, ...) +declare i32 @fflush(ptr) +declare void @finch_str_from_c(ptr, ptr) +declare void @finch_on_fatal(ptr) +declare ptr @finch_std_stream(i32) +declare void @finch_str_from_bytes(ptr, ptr) +declare void @exit(i32) noreturn +declare void @free(ptr) + +define internal { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = sub i64 %t3, 1 + store i64 %t4, ptr %a5 + br label %while.cond1 +while.cond1: + %t6 = load i64, ptr %a5 + %t7 = icmp sge i64 %t6, 0 + br label %logic.from4 +logic.from4: + br i1 %t7, label %logic.rhs5, label %logic.end6 +logic.rhs5: + %t8 = load i64, ptr %a5 + %t9 = load { ptr, i64, i64 }, ptr %a1 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range7, label %inrange8 +range7: + call void @finch_panic_index(ptr @.str.1, i64 22, i64 %t8, i64 %t10) + unreachable +inrange8: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 + %t14 = load i8, ptr %t13 + %t15 = icmp ne i8 %t14, 47 + br label %logic.rend9 +logic.rend9: + br label %logic.end6 +logic.end6: + %t16 = phi i1 [ false, %logic.from4 ], [ %t15, %logic.rend9 ] + br i1 %t16, label %while.body2, label %while.end3 +while.body2: + %t17 = load i64, ptr %a5 + %t18 = sub i64 %t17, 1 + store i64 %t18, ptr %a5 + br label %while.cond1 +while.end3: + %t19 = load i64, ptr %a5 + %t20 = icmp slt i64 %t19, 0 + br i1 %t20, label %then10, label %endif12 +then10: + ret { ptr, i64, i64 } { ptr @.str.2, i64 1, i64 0 } +endif12: + %t21 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t21, ptr %a22 + %t24 = load i64, ptr %a5 + call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.3, i64 28) + %t25 = load { ptr, i64, i64 }, ptr %a23 + ret { ptr, i64, i64 } %t25 +} + +define internal { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca i64, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + %t5 = load { ptr, i64, i64 }, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t5) + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + store { ptr, i64, i64 } %t6, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = add i64 %t7, 1 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t11 = load i64, ptr %t10 + call void @finch_str_sub(ptr %a4, ptr %a3, i64 %t9, i64 %t11, ptr @.str.4, i64 32) + %t12 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load { ptr, i64, i64 }, ptr %a1 + %t15 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t14) + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.5, i64 1, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + br label %logic.from13 +logic.from13: + br i1 %t19, label %logic.rhs14, label %logic.end15 +logic.rhs14: + %t21 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.7, i64 2, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_starts(ptr %a22, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + %t27 = xor i1 %t26, true + br label %logic.rend16 +logic.rend16: + br label %logic.end15 +logic.end15: + %t28 = phi i1 [ false, %logic.from13 ], [ %t27, %logic.rend16 ] + br i1 %t28, label %then17, label %endif19 +then17: + %t29 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_copy(ptr %a31, ptr %a30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + %t33 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t32, ptr %a13 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_drop(ptr %a34) + br label %endif19 +endif19: + %t35 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.9, i64 1, i64 0 }, ptr %a38 + %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) + store i64 %t39, ptr %a40 + %t41 = load i64, ptr %a40 + %t42 = icmp sgt i64 %t41, 0 + br i1 %t42, label %then20, label %endif22 +then20: + %t43 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t43, ptr %a44 + %t46 = load i64, ptr %a40 + call void @finch_str_sub(ptr %a45, ptr %a44, i64 0, i64 %t46, ptr @.str.10, i64 38) + %t47 = load { ptr, i64, i64 }, ptr %a45 + call void @finch_str_drop(ptr %a13) + ret { ptr, i64, i64 } %t47 +endif22: + %t48 = load { ptr, i64, i64 }, ptr %a13 + ret { ptr, i64, i64 } %t48 +} + +define internal { ptr, i64, i64 } @finch.main.textOfFile(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i64, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic23, label %ok24 +panic23: + call void @finch_panic(ptr @.str.11, i64 55, ptr @.str.12) + unreachable +ok24: + %t5 = getelementptr inbounds %S.main.Loader, ptr %t3, i32 0, i32 6 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a8 + %t9 = load i64, ptr %t6 + %t10 = load ptr, ptr %t5 + store i64 0, ptr %a11 + br label %find.cond25 +find.cond25: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t9 + br i1 %t13, label %find.body26, label %find.end29 +find.body26: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } %t7, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %find.hit27, label %find.next28 +find.hit27: + store i64 %t12, ptr %a8 + br label %find.end29 +find.next28: + %t20 = add i64 %t12, 1 + store i64 %t20, ptr %a11 + br label %find.cond25 +find.end29: + %t21 = load i64, ptr %a8 + store i64 %t21, ptr %a22 + %t23 = load i64, ptr %a22 + %t24 = icmp sge i64 %t23, 0 + br i1 %t24, label %then30, label %endif32 +then30: + %t25 = load ptr, ptr %a1 + %t26 = icmp eq ptr %t25, null + br i1 %t26, label %panic33, label %ok34 +panic33: + call void @finch_panic(ptr @.str.13, i64 57, ptr @.str.14) + unreachable +ok34: + %t27 = getelementptr inbounds %S.main.Loader, ptr %t25, i32 0, i32 7 + %t28 = load i64, ptr %a22 + %t29 = load { ptr, i64, i64 }, ptr %t27 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range35, label %inrange36 +range35: + call void @finch_panic_index(ptr @.str.15, i64 57, i64 %t28, i64 %t30) + unreachable +inrange36: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 %t28 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_read_file(ptr %a36, ptr %a35, ptr @.str.16, i64 57) + %t37 = load { ptr, i64, i64 }, ptr %a36 + ret { ptr, i64, i64 } %t37 +endif32: + %t38 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_read_file(ptr %a40, ptr %a39, ptr @.str.17, i64 59) + %t41 = load { ptr, i64, i64 }, ptr %a40 + ret { ptr, i64, i64 } %t41 +} + +define internal { ptr, i64, i64 } @finch.main.findModule(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca i64, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t4) + store { ptr, i64, i64 } %t5, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.18, i64 1, i64 0 }, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t5, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + %t11 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t10, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t10, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.19, i64 4, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t21, ptr %a22 + %t23 = load { ptr, i64, i64 }, ptr %a2 + %t24 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t23) + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.20, i64 1, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t29, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.21, i64 1, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic37, label %ok38 +panic37: + call void @finch_panic(ptr @.str.22, i64 67, ptr @.str.23) + unreachable +ok38: + %t43 = getelementptr inbounds %S.main.Loader, ptr %t41, i32 0, i32 3 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t40, ptr %a46 + store { ptr, i64, i64 } %t44, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + store { ptr, i64, i64 } %t40, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.24, i64 4, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t54, ptr %a55 + %t56 = call i32 @finch_file_exists(ptr %a55) + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = icmp ne i32 %t56, 0 + br i1 %t58, label %then39, label %endif41 +then39: + %t59 = load { ptr, i64, i64 }, ptr %a2 + %t60 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t59) + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.25, i64 1, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t65, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t65, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.26, i64 1, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + %t77 = load ptr, ptr %a1 + %t78 = icmp eq ptr %t77, null + br i1 %t78, label %panic42, label %ok43 +panic42: + call void @finch_panic(ptr @.str.27, i64 68, ptr @.str.28) + unreachable +ok43: + %t79 = getelementptr inbounds %S.main.Loader, ptr %t77, i32 0, i32 3 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t76, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t76, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.29, i64 4, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t90 +endif41: + %t91 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i32 @finch_file_exists(ptr %a92) + %t94 = icmp ne i32 %t93, 0 + br i1 %t94, label %then44, label %endif46 +then44: + %t95 = load { ptr, i64, i64 }, ptr %a22 + ret { ptr, i64, i64 } %t95 +endif46: + %t96 = load ptr, ptr %a1 + %t97 = icmp eq ptr %t96, null + br i1 %t97, label %panic47, label %ok48 +panic47: + call void @finch_panic(ptr @.str.30, i64 73, ptr @.str.31) + unreachable +ok48: + %t98 = getelementptr inbounds %S.main.Loader, ptr %t96, i32 0, i32 5 + store i64 0, ptr %a99 + br label %each.cond49 +each.cond49: + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 + %t101 = load i64, ptr %t100 + %t102 = load i64, ptr %a99 + %t103 = icmp slt i64 %t102, %t101 + br i1 %t103, label %each.body50, label %each.end52 +each.body50: + %t104 = load ptr, ptr %t98 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 %t102 + %t106 = load { ptr, i64, i64 }, ptr %t105 + store { ptr, i64, i64 } %t106, ptr %a107 + %t108 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t108, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.32, i64 1, i64 0 }, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a109 + %t113 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t112, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t112, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a114 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.33, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = load ptr, ptr %a1 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic53, label %ok54 +panic53: + call void @finch_panic(ptr @.str.34, i64 74, ptr @.str.35) + unreachable +ok54: + %t126 = getelementptr inbounds %S.main.Loader, ptr %t124, i32 0, i32 3 + %t127 = load { ptr, i64, i64 }, ptr %t126 + store { ptr, i64, i64 } %t123, ptr %a129 + store { ptr, i64, i64 } %t127, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t123, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t132, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.36, i64 4, i64 0 }, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a138 + %t139 = call i32 @finch_file_exists(ptr %a138) + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = icmp ne i32 %t139, 0 + br i1 %t141, label %then55, label %endif57 +then55: + %t142 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t142, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.37, i64 1, i64 0 }, ptr %a145 + call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a143 + %t147 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t146, ptr %a149 + store { ptr, i64, i64 } %t147, ptr %a150 + call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) + store { ptr, i64, i64 } %t146, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a148 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.38, i64 1, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic58, label %ok59 +panic58: + call void @finch_panic(ptr @.str.39, i64 75, ptr @.str.40) + unreachable +ok59: + %t160 = getelementptr inbounds %S.main.Loader, ptr %t158, i32 0, i32 3 + %t161 = load { ptr, i64, i64 }, ptr %t160 + store { ptr, i64, i64 } %t157, ptr %a163 + store { ptr, i64, i64 } %t161, ptr %a164 + call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) + store { ptr, i64, i64 } %t157, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t166, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.41, i64 4, i64 0 }, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t166, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t171 +endif57: + %t172 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t172, ptr %a174 + store { ptr, i64, i64 } { ptr @.str.42, i64 1, i64 0 }, ptr %a175 + call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a173 + %t177 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t176, ptr %a179 + store { ptr, i64, i64 } %t177, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + store { ptr, i64, i64 } %t176, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.43, i64 4, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + store { ptr, i64, i64 } %t187, ptr %a188 + %t189 = call i32 @finch_file_exists(ptr %a188) + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = icmp ne i32 %t189, 0 + br i1 %t191, label %then60, label %endif62 +then60: + %t192 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.44, i64 1, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + %t196 = load { ptr, i64, i64 }, ptr %a193 + %t197 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t196, ptr %a199 + store { ptr, i64, i64 } %t197, ptr %a200 + call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) + store { ptr, i64, i64 } %t196, ptr %a201 + call void @finch_str_drop(ptr %a201) + %t202 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t202, ptr %a204 + store { ptr, i64, i64 } { ptr @.str.45, i64 4, i64 0 }, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t207 +endif62: + br label %each.step51 +each.step51: + %t208 = load i64, ptr %a99 + %t209 = add i64 %t208, 1 + store i64 %t209, ptr %a99 + br label %each.cond49 +each.end52: + %t210 = load ptr, ptr %a1 + %t211 = icmp eq ptr %t210, null + br i1 %t211, label %panic63, label %ok64 +panic63: + call void @finch_panic(ptr @.str.46, i64 81, ptr @.str.47) + unreachable +ok64: + %t212 = getelementptr inbounds %S.main.Loader, ptr %t210, i32 0, i32 4 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 + %t214 = load i64, ptr %t213 + %t215 = icmp sgt i64 %t214, 0 + br i1 %t215, label %then65, label %endif67 +then65: + %t216 = load ptr, ptr %a1 + %t217 = icmp eq ptr %t216, null + br i1 %t217, label %panic68, label %ok69 +panic68: + call void @finch_panic(ptr @.str.48, i64 82, ptr @.str.49) + unreachable +ok69: + %t218 = getelementptr inbounds %S.main.Loader, ptr %t216, i32 0, i32 4 + %t219 = load { ptr, i64, i64 }, ptr %t218 + store { ptr, i64, i64 } %t219, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.50, i64 1, i64 0 }, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a220 + %t224 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t223, ptr %a226 + store { ptr, i64, i64 } %t224, ptr %a227 + call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) + store { ptr, i64, i64 } %t223, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = load { ptr, i64, i64 }, ptr %a225 + store { ptr, i64, i64 } %t229, ptr %a231 + store { ptr, i64, i64 } { ptr @.str.51, i64 1, i64 0 }, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + store { ptr, i64, i64 } %t229, ptr %a233 + call void @finch_str_drop(ptr %a233) + %t234 = load { ptr, i64, i64 }, ptr %a230 + %t235 = load ptr, ptr %a1 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic70, label %ok71 +panic70: + call void @finch_panic(ptr @.str.52, i64 82, ptr @.str.53) + unreachable +ok71: + %t237 = getelementptr inbounds %S.main.Loader, ptr %t235, i32 0, i32 3 + %t238 = load { ptr, i64, i64 }, ptr %t237 + store { ptr, i64, i64 } %t234, ptr %a240 + store { ptr, i64, i64 } %t238, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t234, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + store { ptr, i64, i64 } %t243, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.54, i64 4, i64 0 }, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t243, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + store { ptr, i64, i64 } %t248, ptr %a249 + %t250 = call i32 @finch_file_exists(ptr %a249) + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_drop(ptr %a251) + %t252 = icmp ne i32 %t250, 0 + br i1 %t252, label %then72, label %endif74 +then72: + %t253 = load ptr, ptr %a1 + %t254 = icmp eq ptr %t253, null + br i1 %t254, label %panic75, label %ok76 +panic75: + call void @finch_panic(ptr @.str.55, i64 83, ptr @.str.56) + unreachable +ok76: + %t255 = getelementptr inbounds %S.main.Loader, ptr %t253, i32 0, i32 4 + %t256 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t256, ptr %a258 + store { ptr, i64, i64 } { ptr @.str.57, i64 1, i64 0 }, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + %t260 = load { ptr, i64, i64 }, ptr %a257 + %t261 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t260, ptr %a263 + store { ptr, i64, i64 } %t261, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t260, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + store { ptr, i64, i64 } %t266, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.58, i64 1, i64 0 }, ptr %a269 + call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) + store { ptr, i64, i64 } %t266, ptr %a270 + call void @finch_str_drop(ptr %a270) + %t271 = load { ptr, i64, i64 }, ptr %a267 + %t272 = load ptr, ptr %a1 + %t273 = icmp eq ptr %t272, null + br i1 %t273, label %panic77, label %ok78 +panic77: + call void @finch_panic(ptr @.str.59, i64 83, ptr @.str.60) + unreachable +ok78: + %t274 = getelementptr inbounds %S.main.Loader, ptr %t272, i32 0, i32 3 + %t275 = load { ptr, i64, i64 }, ptr %t274 + store { ptr, i64, i64 } %t271, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + store { ptr, i64, i64 } %t271, ptr %a279 + call void @finch_str_drop(ptr %a279) + %t280 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.61, i64 4, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t280, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t285 +endif74: + %t286 = load ptr, ptr %a1 + %t287 = icmp eq ptr %t286, null + br i1 %t287, label %panic79, label %ok80 +panic79: + call void @finch_panic(ptr @.str.62, i64 85, ptr @.str.63) + unreachable +ok80: + %t288 = getelementptr inbounds %S.main.Loader, ptr %t286, i32 0, i32 4 + %t289 = load { ptr, i64, i64 }, ptr %t288 + store { ptr, i64, i64 } %t289, ptr %a291 + store { ptr, i64, i64 } { ptr @.str.64, i64 1, i64 0 }, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + %t293 = load { ptr, i64, i64 }, ptr %a290 + %t294 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t293, ptr %a296 + store { ptr, i64, i64 } %t294, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + store { ptr, i64, i64 } %t293, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a295 + store { ptr, i64, i64 } %t299, ptr %a301 + store { ptr, i64, i64 } { ptr @.str.65, i64 4, i64 0 }, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t299, ptr %a303 + call void @finch_str_drop(ptr %a303) + %t304 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } %t304, ptr %a305 + %t306 = call i32 @finch_file_exists(ptr %a305) + store { ptr, i64, i64 } %t304, ptr %a307 + call void @finch_str_drop(ptr %a307) + %t308 = icmp ne i32 %t306, 0 + br i1 %t308, label %then81, label %endif83 +then81: + %t309 = load ptr, ptr %a1 + %t310 = icmp eq ptr %t309, null + br i1 %t310, label %panic84, label %ok85 +panic84: + call void @finch_panic(ptr @.str.66, i64 86, ptr @.str.67) + unreachable +ok85: + %t311 = getelementptr inbounds %S.main.Loader, ptr %t309, i32 0, i32 4 + %t312 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t312, ptr %a314 + store { ptr, i64, i64 } { ptr @.str.68, i64 1, i64 0 }, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + %t316 = load { ptr, i64, i64 }, ptr %a313 + %t317 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t316, ptr %a319 + store { ptr, i64, i64 } %t317, ptr %a320 + call void @finch_str_concat(ptr %a318, ptr %a319, ptr %a320) + store { ptr, i64, i64 } %t316, ptr %a321 + call void @finch_str_drop(ptr %a321) + %t322 = load { ptr, i64, i64 }, ptr %a318 + store { ptr, i64, i64 } %t322, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.69, i64 4, i64 0 }, ptr %a325 + call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) + store { ptr, i64, i64 } %t322, ptr %a326 + call void @finch_str_drop(ptr %a326) + %t327 = load { ptr, i64, i64 }, ptr %a323 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t327 +endif83: + br label %endif67 +endif67: + %t328 = load { ptr, i64, i64 }, ptr %a22 + ret { ptr, i64, i64 } %t328 +} + +define internal void @finch.drop.S_lexer_Token(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lexer.Token, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lexer.Token, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal void @finch.drop.arr_S_lexer_Token(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond107 +n.cond107: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body108, label %n.end109 +n.body108: + %t7 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t5 + call void @finch.drop.S_lexer_Token(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond107 +n.end109: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.copy.arr_str(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond110 +n.cond110: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body111, label %n.end112 +n.body111: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 %t6 + call void @finch_str_copy(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond110 +n.end112: + ret void +} + +define internal void @finch.copy.arr_S_ast_Type(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond118 +n.cond118: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body119, label %n.end120 +n.body119: + %t8 = getelementptr inbounds %S.ast.Type, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.ast.Type, ptr %t2, i64 %t6 + call void @finch.copy.S_ast_Type(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond118 +n.end120: + ret void +} + +define internal void @finch.copy.S_ast_Type(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.ast.Type, ptr %src + store %S.ast.Type %t1, ptr %dst + %t2 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_ast_Type(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.S_ast_Node(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.ast.Node, ptr %src + store %S.ast.Node %t1, ptr %dst + %t2 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 5 + call void @finch.copy.S_ast_Type(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 9 + %t15 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 9 + call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 10 + %t17 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 10 + call void @finch.copy.arr_str(ptr %t16, ptr %t17) + ret void +} + +define internal void @finch.copy.arr_S_ast_Node(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond115 +n.cond115: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body116, label %n.end117 +n.body116: + %t8 = getelementptr inbounds %S.ast.Node, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.ast.Node, ptr %t2, i64 %t6 + call void @finch.copy.S_ast_Node(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond115 +n.end117: + ret void +} + +define internal void @finch.copy.S_ast_Program(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.ast.Program, ptr %src + store %S.ast.Program %t1, ptr %dst + %t2 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 6 + %t15 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 7 + %t17 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 7 + call void @finch.copy.arr_S_ast_Node(ptr %t16, ptr %t17) + %t18 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 8 + %t19 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 8 + call void @finch.copy.arr_S_ast_Node(ptr %t18, ptr %t19) + ret void +} + +define internal void @finch.drop.arr_str(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond137 +n.cond137: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body138, label %n.end139 +n.body138: + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1, i64 %t5 + call void @finch_str_drop(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond137 +n.end139: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_ast_Type(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond143 +n.cond143: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body144, label %n.end145 +n.body144: + %t7 = getelementptr inbounds %S.ast.Type, ptr %t1, i64 %t5 + call void @finch.drop.S_ast_Type(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond143 +n.end145: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_ast_Type(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_ast_Type(ptr %t2) + %t3 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.drop.S_ast_Node(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 5 + call void @finch.drop.S_ast_Type(ptr %t6) + %t7 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 9 + call void @finch.drop.arr_S_ast_Node(ptr %t7) + %t8 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 10 + call void @finch.drop.arr_str(ptr %t8) + ret void +} + +define internal void @finch.drop.arr_S_ast_Node(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond140 +n.cond140: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body141, label %n.end142 +n.body141: + %t7 = getelementptr inbounds %S.ast.Node, ptr %t1, i64 %t5 + call void @finch.drop.S_ast_Node(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond140 +n.end142: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_ast_Program(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_str(ptr %t5) + %t6 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_S_ast_Node(ptr %t7) + %t8 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_S_ast_Node(ptr %t8) + %t9 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 8 + call void @finch.drop.arr_S_ast_Node(ptr %t9) + ret void +} + +define internal void @finch.main.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca i64, align 16 + %a17 = alloca i64, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca i64, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca %S.ast.Program, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca %S.ast.Program, align 16 + %a139 = alloca %S.ast.Program, align 16 + %a145 = alloca i64, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca i64, align 16 + %a162 = alloca i64, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = call i32 @finch_file_exists(ptr %a5) + %t7 = icmp ne i32 %t6, 0 + %t8 = xor i1 %t7, true + br label %logic.from86 +logic.from86: + br i1 %t8, label %logic.rhs87, label %logic.end88 +logic.rhs87: + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic89, label %ok90 +panic89: + call void @finch_panic(ptr @.str.70, i64 93, ptr @.str.71) + unreachable +ok90: + %t11 = getelementptr inbounds %S.main.Loader, ptr %t9, i32 0, i32 6 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a14 + %t15 = load i64, ptr %t12 + %t16 = load ptr, ptr %t11 + store i64 0, ptr %a17 + br label %find.cond91 +find.cond91: + %t18 = load i64, ptr %a17 + %t19 = icmp slt i64 %t18, %t15 + br i1 %t19, label %find.body92, label %find.end95 +find.body92: + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 %t18 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } %t13, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br i1 %t25, label %find.hit93, label %find.next94 +find.hit93: + store i64 %t18, ptr %a14 + br label %find.end95 +find.next94: + %t26 = add i64 %t18, 1 + store i64 %t26, ptr %a17 + br label %find.cond91 +find.end95: + %t27 = load i64, ptr %a14 + %t28 = icmp sge i64 %t27, 0 + %t29 = xor i1 %t28, true + br label %logic.rend96 +logic.rend96: + br label %logic.end88 +logic.end88: + %t30 = phi i1 [ false, %logic.from86 ], [ %t29, %logic.rend96 ] + br i1 %t30, label %then97, label %endif99 +then97: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = icmp sgt i64 %t32, 0 + br i1 %t33, label %then100, label %else101 +then100: + %t34 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.72, i64 30, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.73, i64 14, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + %t44 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t43, ptr %a46 + store { ptr, i64, i64 } %t44, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + store { ptr, i64, i64 } %t43, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.74, i64 1, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + %t55 = extractvalue { ptr, i64, i64 } %t54, 1 + %t56 = trunc i64 %t55 to i32 + %t57 = extractvalue { ptr, i64, i64 } %t54, 0 + %t58 = icmp eq ptr %t57, null + %t59 = select i1 %t58, ptr @.str.75, ptr %t57 + %t60 = call i32 (ptr, ...) @printf(ptr @.str.76, i32 %t56, ptr %t59) + store { ptr, i64, i64 } %t54, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = call i32 (ptr, ...) @printf(ptr @.str.77) + br label %endif102 +else101: + %t63 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.78, i64 19, i64 0 }, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t67, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.79, i64 1, i64 0 }, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + %t73 = extractvalue { ptr, i64, i64 } %t72, 1 + %t74 = trunc i64 %t73 to i32 + %t75 = extractvalue { ptr, i64, i64 } %t72, 0 + %t76 = icmp eq ptr %t75, null + %t77 = select i1 %t76, ptr @.str.80, ptr %t75 + %t78 = call i32 (ptr, ...) @printf(ptr @.str.81, i32 %t74, ptr %t77) + store { ptr, i64, i64 } %t72, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = call i32 (ptr, ...) @printf(ptr @.str.82) + br label %endif102 +endif102: + %t81 = trunc i64 1 to i32 + %t82 = call i32 @fflush(ptr null) + call void @exit(i32 %t81) + br label %endif99 +endif99: + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a2 + %t85 = call { ptr, i64, i64 } @finch.main.textOfFile(ptr %t83, { ptr, i64, i64 } %t84) + store { ptr, i64, i64 } %t85, ptr %a86 + %t87 = load ptr, ptr %a1 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic103, label %ok104 +panic103: + call void @finch_panic(ptr @.str.83, i64 102, ptr @.str.84) + unreachable +ok104: + %t89 = getelementptr inbounds %S.main.Loader, ptr %t87, i32 0, i32 1 + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 + %t91 = load i64, ptr %t90 + store i64 %t91, ptr %a92 + %t93 = load ptr, ptr %a1 + %t94 = icmp eq ptr %t93, null + br i1 %t94, label %panic105, label %ok106 +panic105: + call void @finch_panic(ptr @.str.85, i64 103, ptr @.str.86) + unreachable +ok106: + %t95 = getelementptr inbounds %S.main.Loader, ptr %t93, i32 0, i32 1 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 + %t97 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t97, ptr %a98 + call void @finch_str_copy(ptr %a99, ptr %a98) + %t100 = load { ptr, i64, i64 }, ptr %a99 + %t101 = load i64, ptr %t96 + %t102 = add i64 %t101, 1 + call void @finch_arr_reserve(ptr %t95, i64 %t102, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t103 = load ptr, ptr %t95 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 %t101 + store { ptr, i64, i64 } %t100, ptr %t104 + store i64 %t102, ptr %t96 + %t105 = load { ptr, i64, i64 }, ptr %a86 + %t106 = load { ptr, i64, i64 }, ptr %a2 + %t107 = call { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %t105, { ptr, i64, i64 } %t106) + %t108 = load i64, ptr %a92 + %t109 = load { ptr, i64, i64 }, ptr %a2 + %t110 = call %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %t107, i64 %t108, { ptr, i64, i64 } %t109) + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch.drop.arr_S_lexer_Token(ptr %a111) + store %S.ast.Program %t110, ptr %a112 + %t113 = load { ptr, i64, i64 }, ptr %a3 + %t114 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 0 + store { ptr, i64, i64 } %t113, ptr %a115 + call void @finch_str_copy(ptr %a116, ptr %a115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + %t118 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } %t117, ptr %t114 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a2 + %t121 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 1 + store { ptr, i64, i64 } %t120, ptr %a122 + call void @finch_str_copy(ptr %a123, ptr %a122) + %t124 = load { ptr, i64, i64 }, ptr %a123 + %t125 = load { ptr, i64, i64 }, ptr %t121 + store { ptr, i64, i64 } %t124, ptr %t121 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a129 + call void @finch.copy.arr_str(ptr %a130, ptr %a129) + %t131 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t131, ptr %a132 + %t133 = load ptr, ptr %a1 + %t134 = icmp eq ptr %t133, null + br i1 %t134, label %panic113, label %ok114 +panic113: + call void @finch_panic(ptr @.str.87, i64 108, ptr @.str.88) + unreachable +ok114: + %t135 = getelementptr inbounds %S.main.Loader, ptr %t133, i32 0, i32 0 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 + %t137 = load %S.ast.Program, ptr %a112 + store %S.ast.Program %t137, ptr %a138 + call void @finch.copy.S_ast_Program(ptr %a139, ptr %a138) + %t140 = load %S.ast.Program, ptr %a139 + %t141 = load i64, ptr %t136 + %t142 = add i64 %t141, 1 + call void @finch_arr_reserve(ptr %t135, i64 %t142, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) + %t143 = load ptr, ptr %t135 + %t144 = getelementptr inbounds %S.ast.Program, ptr %t143, i64 %t141 + store %S.ast.Program %t140, ptr %t144 + store i64 %t142, ptr %t136 + store i64 0, ptr %a145 + br label %each.cond121 +each.cond121: + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + %t147 = load i64, ptr %t146 + %t148 = load i64, ptr %a145 + %t149 = icmp slt i64 %t148, %t147 + br i1 %t149, label %each.body122, label %each.end124 +each.body122: + %t150 = load ptr, ptr %a132 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t148 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t152, ptr %a153 + %t154 = load ptr, ptr %a1 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic125, label %ok126 +panic125: + call void @finch_panic(ptr @.str.89, i64 110, ptr @.str.90) + unreachable +ok126: + %t156 = getelementptr inbounds %S.main.Loader, ptr %t154, i32 0, i32 2 + %t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i32 0, i32 1 + %t158 = load { ptr, i64, i64 }, ptr %a153 + store i64 -1, ptr %a159 + %t160 = load i64, ptr %t157 + %t161 = load ptr, ptr %t156 + store i64 0, ptr %a162 + br label %find.cond127 +find.cond127: + %t163 = load i64, ptr %a162 + %t164 = icmp slt i64 %t163, %t160 + br i1 %t164, label %find.body128, label %find.end131 +find.body128: + %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i64 %t163 + %t166 = load { ptr, i64, i64 }, ptr %t165 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } %t158, ptr %a168 + %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) + %t170 = icmp ne i32 %t169, 0 + br i1 %t170, label %find.hit129, label %find.next130 +find.hit129: + store i64 %t163, ptr %a159 + br label %find.end131 +find.next130: + %t171 = add i64 %t163, 1 + store i64 %t171, ptr %a162 + br label %find.cond127 +find.end131: + %t172 = load i64, ptr %a159 + %t173 = icmp sge i64 %t172, 0 + %t174 = xor i1 %t173, true + br i1 %t174, label %then132, label %endif134 +then132: + %t175 = load ptr, ptr %a1 + %t176 = icmp eq ptr %t175, null + br i1 %t176, label %panic135, label %ok136 +panic135: + call void @finch_panic(ptr @.str.91, i64 111, ptr @.str.92) + unreachable +ok136: + %t177 = getelementptr inbounds %S.main.Loader, ptr %t175, i32 0, i32 2 + %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 + %t179 = load { ptr, i64, i64 }, ptr %a153 + store { ptr, i64, i64 } %t179, ptr %a180 + call void @finch_str_copy(ptr %a181, ptr %a180) + %t182 = load { ptr, i64, i64 }, ptr %a181 + %t183 = load i64, ptr %t178 + %t184 = add i64 %t183, 1 + call void @finch_arr_reserve(ptr %t177, i64 %t184, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t185 = load ptr, ptr %t177 + %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i64 %t183 + store { ptr, i64, i64 } %t182, ptr %t186 + store i64 %t184, ptr %t178 + %t187 = load ptr, ptr %a1 + %t188 = load ptr, ptr %a1 + %t189 = load { ptr, i64, i64 }, ptr %a2 + %t190 = load { ptr, i64, i64 }, ptr %a153 + %t191 = call { ptr, i64, i64 } @finch.main.findModule(ptr %t188, { ptr, i64, i64 } %t189, { ptr, i64, i64 } %t190) + %t192 = load { ptr, i64, i64 }, ptr %a153 + call void @finch.main.load(ptr %t187, { ptr, i64, i64 } %t191, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t191, ptr %a193 + call void @finch_str_drop(ptr %a193) + br label %endif134 +endif134: + br label %each.step123 +each.step123: + %t194 = load i64, ptr %a145 + %t195 = add i64 %t194, 1 + store i64 %t195, ptr %a145 + br label %each.cond121 +each.end124: + call void @finch.drop.arr_str(ptr %a132) + call void @finch.drop.S_ast_Program(ptr %a112) + call void @finch_str_drop(ptr %a86) + ret void +} + +define internal void @finch.main.usage() { +entry: + + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 1 + %t2 = trunc i64 %t1 to i32 + %t3 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 0 + %t4 = icmp eq ptr %t3, null + %t5 = select i1 %t4, ptr @.str.94, ptr %t3 + %t6 = call i32 (ptr, ...) @printf(ptr @.str.95, i32 %t2, ptr %t5) + %t7 = call i32 (ptr, ...) @printf(ptr @.str.96) + %t8 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 1 + %t9 = trunc i64 %t8 to i32 + %t10 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 0 + %t11 = icmp eq ptr %t10, null + %t12 = select i1 %t11, ptr @.str.98, ptr %t10 + %t13 = call i32 (ptr, ...) @printf(ptr @.str.99, i32 %t9, ptr %t12) + %t14 = call i32 (ptr, ...) @printf(ptr @.str.100) + %t15 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 1 + %t16 = trunc i64 %t15 to i32 + %t17 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 0 + %t18 = icmp eq ptr %t17, null + %t19 = select i1 %t18, ptr @.str.102, ptr %t17 + %t20 = call i32 (ptr, ...) @printf(ptr @.str.103, i32 %t16, ptr %t19) + %t21 = call i32 (ptr, ...) @printf(ptr @.str.104) + %t22 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 1 + %t23 = trunc i64 %t22 to i32 + %t24 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 0 + %t25 = icmp eq ptr %t24, null + %t26 = select i1 %t25, ptr @.str.106, ptr %t24 + %t27 = call i32 (ptr, ...) @printf(ptr @.str.107, i32 %t23, ptr %t26) + %t28 = call i32 (ptr, ...) @printf(ptr @.str.108) + %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 1 + %t30 = trunc i64 %t29 to i32 + %t31 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 0 + %t32 = icmp eq ptr %t31, null + %t33 = select i1 %t32, ptr @.str.110, ptr %t31 + %t34 = call i32 (ptr, ...) @printf(ptr @.str.111, i32 %t30, ptr %t33) + %t35 = call i32 (ptr, ...) @printf(ptr @.str.112) + %t36 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 1 + %t37 = trunc i64 %t36 to i32 + %t38 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 0 + %t39 = icmp eq ptr %t38, null + %t40 = select i1 %t39, ptr @.str.114, ptr %t38 + %t41 = call i32 (ptr, ...) @printf(ptr @.str.115, i32 %t37, ptr %t40) + %t42 = call i32 (ptr, ...) @printf(ptr @.str.116) + %t43 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 1 + %t44 = trunc i64 %t43 to i32 + %t45 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 0 + %t46 = icmp eq ptr %t45, null + %t47 = select i1 %t46, ptr @.str.118, ptr %t45 + %t48 = call i32 (ptr, ...) @printf(ptr @.str.119, i32 %t44, ptr %t47) + %t49 = call i32 (ptr, ...) @printf(ptr @.str.120) + %t50 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 1 + %t51 = trunc i64 %t50 to i32 + %t52 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 0 + %t53 = icmp eq ptr %t52, null + %t54 = select i1 %t53, ptr @.str.122, ptr %t52 + %t55 = call i32 (ptr, ...) @printf(ptr @.str.123, i32 %t51, ptr %t54) + %t56 = call i32 (ptr, ...) @printf(ptr @.str.124) + %t57 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 1 + %t58 = trunc i64 %t57 to i32 + %t59 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 0 + %t60 = icmp eq ptr %t59, null + %t61 = select i1 %t60, ptr @.str.126, ptr %t59 + %t62 = call i32 (ptr, ...) @printf(ptr @.str.127, i32 %t58, ptr %t61) + %t63 = call i32 (ptr, ...) @printf(ptr @.str.128) + %t64 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 1 + %t65 = trunc i64 %t64 to i32 + %t66 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 0 + %t67 = icmp eq ptr %t66, null + %t68 = select i1 %t67, ptr @.str.130, ptr %t66 + %t69 = call i32 (ptr, ...) @printf(ptr @.str.131, i32 %t65, ptr %t68) + %t70 = call i32 (ptr, ...) @printf(ptr @.str.132) + %t71 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 1 + %t72 = trunc i64 %t71 to i32 + %t73 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 0 + %t74 = icmp eq ptr %t73, null + %t75 = select i1 %t74, ptr @.str.134, ptr %t73 + %t76 = call i32 (ptr, ...) @printf(ptr @.str.135, i32 %t72, ptr %t75) + %t77 = call i32 (ptr, ...) @printf(ptr @.str.136) + %t78 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 1 + %t79 = trunc i64 %t78 to i32 + %t80 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 0 + %t81 = icmp eq ptr %t80, null + %t82 = select i1 %t81, ptr @.str.138, ptr %t80 + %t83 = call i32 (ptr, ...) @printf(ptr @.str.139, i32 %t79, ptr %t82) + %t84 = call i32 (ptr, ...) @printf(ptr @.str.140) + %t85 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 1 + %t86 = trunc i64 %t85 to i32 + %t87 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 0 + %t88 = icmp eq ptr %t87, null + %t89 = select i1 %t88, ptr @.str.142, ptr %t87 + %t90 = call i32 (ptr, ...) @printf(ptr @.str.143, i32 %t86, ptr %t89) + %t91 = call i32 (ptr, ...) @printf(ptr @.str.144) + %t92 = trunc i64 1 to i32 + %t93 = call i32 @fflush(ptr null) + call void @exit(i32 %t92) + ret void +} + +define internal { ptr, i64, i64 } @finch.main.unpack() { +entry: + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca i64, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %t1 = call { ptr, i64, i64 } @finch.embedded.names() + store { ptr, i64, i64 } %t1, ptr %a2 + %t3 = call { ptr, i64, i64 } @finch.host.cacheDir() + store { ptr, i64, i64 } %t3, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.145, i64 7, i64 0 }, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + %t9 = call { ptr, i64, i64 } @finch.embedded.texts() + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.146, i64 1, i64 0 }, ptr %a12 + call void @finch_str_join(ptr %a13, ptr %a10, ptr %a12) + %t14 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.drop.arr_str(ptr %a10) + %t15 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t14) + store { ptr, i64, i64 } %t14, ptr %a16 + call void @finch_str_drop(ptr %a16) + store { ptr, i64, i64 } %t8, ptr %a18 + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t8, ptr %a20 + call void @finch_str_drop(ptr %a20) + store { ptr, i64, i64 } %t15, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.147, i64 5, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t28, ptr %a29 + %t30 = call i32 @finch_file_exists(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = icmp ne i32 %t30, 0 + br i1 %t32, label %then146, label %endif148 +then146: + %t33 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t33 +endif148: + %t34 = call { ptr, i64, i64 } @finch.embedded.texts() + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t37 = load i64, ptr %t36 + store i64 0, ptr %a38 + br label %for.cond149 +for.cond149: + %t39 = load i64, ptr %a38 + %t40 = icmp slt i64 %t39, %t37 + br i1 %t40, label %for.body150, label %for.end152 +for.body150: + %t41 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.148, i64 1, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a42 + %t46 = load i64, ptr %a38 + %t47 = load { ptr, i64, i64 }, ptr %a2 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = icmp uge i64 %t46, %t48 + br i1 %t49, label %range153, label %inrange154 +range153: + call void @finch_panic_index(ptr @.str.149, i64 144, i64 %t46, i64 %t48) + unreachable +inrange154: + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t46 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t45, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t45, ptr %a56 + call void @finch_str_drop(ptr %a56) + %t57 = load { ptr, i64, i64 }, ptr %a53 + %t58 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t57) + store { ptr, i64, i64 } %t57, ptr %a59 + call void @finch_str_drop(ptr %a59) + call void @finch.host.makeDirs({ ptr, i64, i64 } %t58) + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.150, i64 1, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a62 + %t66 = load i64, ptr %a38 + %t67 = load { ptr, i64, i64 }, ptr %a2 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 %t66, %t68 + br i1 %t69, label %range155, label %inrange156 +range155: + call void @finch_panic_index(ptr @.str.151, i64 145, i64 %t66, i64 %t68) + unreachable +inrange156: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 %t66 + %t72 = load { ptr, i64, i64 }, ptr %t71 + store { ptr, i64, i64 } %t65, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t65, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = load i64, ptr %a38 + %t79 = load { ptr, i64, i64 }, ptr %a35 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range157, label %inrange158 +range157: + call void @finch_panic_index(ptr @.str.152, i64 145, i64 %t78, i64 %t80) + unreachable +inrange158: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i64 %t78 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } %t77, ptr %a85 + store { ptr, i64, i64 } %t84, ptr %a86 + %t87 = call i32 @finch_write_file(ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t77, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = icmp ne i32 %t87, 0 + br label %for.step151 +for.step151: + %t90 = load i64, ptr %a38 + %t91 = add i64 %t90, 1 + store i64 %t91, ptr %a38 + br label %for.cond149 +for.end152: + %t92 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.153, i64 5, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.154, i64 0, i64 0 }, ptr %a98 + %t99 = call i32 @finch_write_file(ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t96, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = icmp ne i32 %t99, 0 + %t102 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.arr_str(ptr %a35) + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t102 +} + +define internal void @finch.drop.S_cimport_Header(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Header, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.Header, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal void @finch.drop.arr_S_cimport_Header(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond403 +n.cond403: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body404, label %n.end405 +n.body404: + %t7 = getelementptr inbounds %S.cimport.Header, ptr %t1, i64 %t5 + call void @finch.drop.S_cimport_Header(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond403 +n.end405: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_ast_Program(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond406 +n.cond406: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body407, label %n.end408 +n.body407: + %t7 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t5 + call void @finch.drop.S_ast_Program(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond406 +n.end408: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_main_Loader(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_ast_Program(ptr %t1) + %t2 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + %t3 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t7) + %t8 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_str(ptr %t8) + ret void +} + +define internal void @finch.drop.S_platform_Target(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 6 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 8 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.copy.S_platform_Target(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.platform.Target, ptr %src + store %S.platform.Target %t1, ptr %dst + %t2 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 6 + %t5 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 6 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 7 + %t7 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 8 + %t9 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 8 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.drop.S_gen_Options(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Options, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Options, ptr %a, i32 0, i32 4 + call void @finch.drop.S_platform_Target(ptr %t2) + ret void +} + +define internal void @finch.drop.S_cimport_CFunc(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 2 + call void @finch.drop.S_ast_Type(ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_S_ast_Type(ptr %t4) + %t5 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 5 + call void @finch_str_drop(ptr %t5) + ret void +} + +define internal void @finch.drop.map_str_S_cimport_CFunc(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond416 +n.cond416: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body417, label %n.end418 +n.body417: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live419, label %entry.next420 +entry.live419: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_cimport_CFunc(ptr %t13) + br label %entry.next420 +entry.next420: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond416 +n.end418: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CConst(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CConst, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t1) + ret void +} + +define internal void @finch.drop.map_str_S_cimport_CConst(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond421 +n.cond421: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body422, label %n.end423 +n.body422: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live424, label %entry.next425 +entry.live424: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_cimport_CConst(ptr %t13) + br label %entry.next425 +entry.next425: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond421 +n.end423: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.map_str_S_ast_Type(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond426 +n.cond426: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body427, label %n.end428 +n.body427: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live429, label %entry.next430 +entry.live429: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_ast_Type(ptr %t13) + br label %entry.next430 +entry.next430: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond426 +n.end428: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CField(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CField, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CField, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal void @finch.drop.arr_S_cimport_CField(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond436 +n.cond436: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body437, label %n.end438 +n.body437: + %t7 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t5 + call void @finch.drop.S_cimport_CField(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond436 +n.end438: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CStruct(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_cimport_CField(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal void @finch.drop.map_str_S_cimport_CStruct(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond431 +n.cond431: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body432, label %n.end433 +n.body432: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live434, label %entry.next435 +entry.live434: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_cimport_CStruct(ptr %t13) + br label %entry.next435 +entry.next435: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond431 +n.end433: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CImports(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 0 + call void @finch.drop.map_str_S_cimport_CFunc(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 1 + call void @finch.drop.map_str_S_cimport_CConst(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 2 + call void @finch.drop.map_str_S_ast_Type(ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 3 + call void @finch.drop.map_str_S_cimport_CStruct(ptr %t4) + %t5 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_str(ptr %t5) + ret void +} + +define internal void @finch.drop.S_linker_Build(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t6) + ret void +} + +define internal i64 @finch.main.main({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca i1, align 16 + %a105 = alloca i1, align 16 + %a106 = alloca i1, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca i64, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca %S.platform.Target, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a450 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca %S.main.Loader, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca i64, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca i64, align 16 + %a615 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a645 = alloca i64, align 16 + %a653 = alloca %S.ast.Program, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca i64, align 16 + %a663 = alloca i64, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca i64, align 16 + %a700 = alloca i64, align 16 + %a703 = alloca i64, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca i64, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a780 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a803 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca %S.cimport.CImports, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a866 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca %S.platform.Target, align 16 + %a876 = alloca %S.platform.Target, align 16 + %a880 = alloca %S.gen.Options, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a907 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a921 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca { ptr, i64, i64 }, align 16 + %a923 = alloca { ptr, i64, i64 }, align 16 + %a924 = alloca { ptr, i64, i64 }, align 16 + %a927 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a940 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a978 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a984 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a986 = alloca { ptr, i64, i64 }, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a993 = alloca { ptr, i64, i64 }, align 16 + %a996 = alloca { ptr, i64, i64 }, align 16 + %a997 = alloca { ptr, i64, i64 }, align 16 + %a998 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1003 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca %S.linker.Build, align 16 + %a1040 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1045 = alloca i64, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 + %a1069 = alloca { ptr, i64, i64 }, align 16 + %a1070 = alloca { ptr, i64, i64 }, align 16 + %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 + %a1075 = alloca { ptr, i64, i64 }, align 16 + %a1078 = alloca { ptr, i64, i64 }, align 16 + %a1079 = alloca { ptr, i64, i64 }, align 16 + %a1081 = alloca { ptr, i64, i64 }, align 16 + %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1085 = alloca { ptr, i64, i64 }, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca i64, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = icmp eq i64 %t3, 2 + br label %logic.from159 +logic.from159: + br i1 %t4, label %logic.rhs160, label %logic.end161 +logic.rhs160: + %t5 = load { ptr, i64, i64 }, ptr %a1 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 1, %t6 + br i1 %t7, label %range162, label %inrange163 +range162: + call void @finch_panic_index(ptr @.str.155, i64 152, i64 1, i64 %t6) + unreachable +inrange163: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 1 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.156, i64 7, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br label %logic.from164 +logic.from164: + br i1 %t14, label %logic.end166, label %logic.rhs165 +logic.rhs165: + %t15 = load { ptr, i64, i64 }, ptr %a1 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 1, %t16 + br i1 %t17, label %range167, label %inrange168 +range167: + call void @finch_panic_index(ptr @.str.157, i64 152, i64 1, i64 %t16) + unreachable +inrange168: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.158, i64 9, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br label %logic.rend169 +logic.rend169: + br label %logic.end166 +logic.end166: + %t25 = phi i1 [ true, %logic.from164 ], [ %t24, %logic.rend169 ] + br label %logic.rend170 +logic.rend170: + br label %logic.end161 +logic.end161: + %t26 = phi i1 [ false, %logic.from159 ], [ %t25, %logic.rend170 ] + br i1 %t26, label %then171, label %endif173 +then171: + %t27 = extractvalue { ptr, i64, i64 } { ptr @.str.159, i64 46, i64 0 }, 1 + %t28 = trunc i64 %t27 to i32 + %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.159, i64 46, i64 0 }, 0 + %t30 = icmp eq ptr %t29, null + %t31 = select i1 %t30, ptr @.str.160, ptr %t29 + %t32 = call i32 (ptr, ...) @printf(ptr @.str.161, i32 %t28, ptr %t31) + %t33 = call i32 (ptr, ...) @printf(ptr @.str.162) + ret i64 0 +endif173: + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t35 = load i64, ptr %t34 + %t36 = icmp eq i64 %t35, 2 + br label %logic.from174 +logic.from174: + br i1 %t36, label %logic.rhs175, label %logic.end176 +logic.rhs175: + %t37 = load { ptr, i64, i64 }, ptr %a1 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 1, %t38 + br i1 %t39, label %range177, label %inrange178 +range177: + call void @finch_panic_index(ptr @.str.163, i64 156, i64 1, i64 %t38) + unreachable +inrange178: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t42, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.164, i64 3, i64 0 }, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend179 +logic.rend179: + br label %logic.end176 +logic.end176: + %t47 = phi i1 [ false, %logic.from174 ], [ %t46, %logic.rend179 ] + br i1 %t47, label %then180, label %endif182 +then180: + %t48 = load { ptr, i64, i64 }, ptr %a1 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 0, %t49 + br i1 %t50, label %range183, label %inrange184 +range183: + call void @finch_panic_index(ptr @.str.165, i64 157, i64 0, i64 %t49) + unreachable +inrange184: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 0 + %t53 = load { ptr, i64, i64 }, ptr %t52 + %t54 = call i64 @finch.lsp.run({ ptr, i64, i64 } %t53) + ret i64 %t54 +endif182: + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = icmp slt i64 %t56, 3 + br i1 %t57, label %then185, label %endif187 +then185: + call void @finch.main.usage() + br label %endif187 +endif187: + %t58 = load { ptr, i64, i64 }, ptr %a1 + %t59 = extractvalue { ptr, i64, i64 } %t58, 1 + %t60 = icmp uge i64 1, %t59 + br i1 %t60, label %range188, label %inrange189 +range188: + call void @finch_panic_index(ptr @.str.166, i64 162, i64 1, i64 %t59) + unreachable +inrange189: + %t61 = extractvalue { ptr, i64, i64 } %t58, 0 + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i64 1 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_copy(ptr %a65, ptr %a64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t66, ptr %a67 + %t68 = load { ptr, i64, i64 }, ptr %a1 + %t69 = extractvalue { ptr, i64, i64 } %t68, 1 + %t70 = icmp uge i64 2, %t69 + br i1 %t70, label %range190, label %inrange191 +range190: + call void @finch_panic_index(ptr @.str.167, i64 163, i64 2, i64 %t69) + unreachable +inrange191: + %t71 = extractvalue { ptr, i64, i64 } %t68, 0 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 2 + %t73 = load { ptr, i64, i64 }, ptr %t72 + store { ptr, i64, i64 } %t73, ptr %a74 + call void @finch_str_copy(ptr %a75, ptr %a74) + %t76 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t76, ptr %a77 + %t78 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t78, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.168, i64 5, i64 0 }, ptr %a80 + %t81 = call i32 @finch_str_eq(ptr %a79, ptr %a80) + %t82 = icmp eq i32 %t81, 0 + br label %logic.from192 +logic.from192: + br i1 %t82, label %logic.rhs193, label %logic.end194 +logic.rhs193: + %t83 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t83, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.169, i64 3, i64 0 }, ptr %a85 + %t86 = call i32 @finch_str_eq(ptr %a84, ptr %a85) + %t87 = icmp eq i32 %t86, 0 + br label %logic.rend195 +logic.rend195: + br label %logic.end194 +logic.end194: + %t88 = phi i1 [ false, %logic.from192 ], [ %t87, %logic.rend195 ] + br label %logic.from196 +logic.from196: + br i1 %t88, label %logic.rhs197, label %logic.end198 +logic.rhs197: + %t89 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t89, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.170, i64 2, i64 0 }, ptr %a91 + %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) + %t93 = icmp eq i32 %t92, 0 + br label %logic.rend199 +logic.rend199: + br label %logic.end198 +logic.end198: + %t94 = phi i1 [ false, %logic.from196 ], [ %t93, %logic.rend199 ] + br label %logic.from200 +logic.from200: + br i1 %t94, label %logic.rhs201, label %logic.end202 +logic.rhs201: + %t95 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.171, i64 5, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp eq i32 %t98, 0 + br label %logic.rend203 +logic.rend203: + br label %logic.end202 +logic.end202: + %t100 = phi i1 [ false, %logic.from200 ], [ %t99, %logic.rend203 ] + br i1 %t100, label %then204, label %endif206 +then204: + call void @finch.main.usage() + br label %endif206 +endif206: + %t101 = load { ptr, i64, i64 }, ptr %a77 + %t102 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t102, ptr %a103 + store i1 false, ptr %a104 + store i1 false, ptr %a105 + store i1 false, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.172, i64 0, i64 0 }, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.173, i64 3, i64 0 }, ptr %a108 + store { ptr, i64, i64 } zeroinitializer, ptr %a109 + store { ptr, i64, i64 } zeroinitializer, ptr %a110 + store { ptr, i64, i64 } zeroinitializer, ptr %a111 + store { ptr, i64, i64 } zeroinitializer, ptr %a112 + store { ptr, i64, i64 } zeroinitializer, ptr %a113 + store i64 3, ptr %a114 + br label %while.cond207 +while.cond207: + %t115 = load i64, ptr %a114 + %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t117 = load i64, ptr %t116 + %t118 = icmp slt i64 %t115, %t117 + br i1 %t118, label %while.body208, label %while.end209 +while.body208: + %t119 = load i64, ptr %a114 + %t120 = load { ptr, i64, i64 }, ptr %a1 + %t121 = extractvalue { ptr, i64, i64 } %t120, 1 + %t122 = icmp uge i64 %t119, %t121 + br i1 %t122, label %range210, label %inrange211 +range210: + call void @finch_panic_index(ptr @.str.174, i64 180, i64 %t119, i64 %t121) + unreachable +inrange211: + %t123 = extractvalue { ptr, i64, i64 } %t120, 0 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 %t119 + %t125 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t128, ptr %a129 + %t130 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t130, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.175, i64 3, i64 0 }, ptr %a132 + %t133 = call i32 @finch_str_eq(ptr %a131, ptr %a132) + %t134 = icmp ne i32 %t133, 0 + br label %logic.from212 +logic.from212: + br i1 %t134, label %logic.rhs213, label %logic.end214 +logic.rhs213: + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = icmp sgt i64 %t136, 0 + br label %logic.rend215 +logic.rend215: + br label %logic.end214 +logic.end214: + %t138 = phi i1 [ false, %logic.from212 ], [ %t137, %logic.rend215 ] + br i1 %t138, label %then216, label %else217 +then216: + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t140 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t140, ptr %a141 + call void @finch_str_copy(ptr %a142, ptr %a141) + %t143 = load { ptr, i64, i64 }, ptr %a142 + %t144 = load i64, ptr %t139 + %t145 = add i64 %t144, 1 + call void @finch_arr_reserve(ptr %a113, i64 %t145, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t146 = load ptr, ptr %a113 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t144 + store { ptr, i64, i64 } %t143, ptr %t147 + store i64 %t145, ptr %t139 + br label %endif218 +else217: + %t148 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.176, i64 2, i64 0 }, ptr %a150 + %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) + %t152 = icmp ne i32 %t151, 0 + br label %logic.from219 +logic.from219: + br i1 %t152, label %logic.rhs220, label %logic.end221 +logic.rhs220: + %t153 = load i64, ptr %a114 + %t154 = add i64 %t153, 1 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t156 = load i64, ptr %t155 + %t157 = icmp slt i64 %t154, %t156 + br label %logic.rend222 +logic.rend222: + br label %logic.end221 +logic.end221: + %t158 = phi i1 [ false, %logic.from219 ], [ %t157, %logic.rend222 ] + br label %logic.from223 +logic.from223: + br i1 %t158, label %logic.rhs224, label %logic.end225 +logic.rhs224: + %t159 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.177, i64 5, i64 0 }, ptr %a161 + %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) + %t163 = icmp ne i32 %t162, 0 + br label %logic.rend226 +logic.rend226: + br label %logic.end225 +logic.end225: + %t164 = phi i1 [ false, %logic.from223 ], [ %t163, %logic.rend226 ] + br i1 %t164, label %then227, label %else228 +then227: + %t165 = load i64, ptr %a114 + %t166 = add i64 %t165, 1 + %t167 = load { ptr, i64, i64 }, ptr %a1 + %t168 = extractvalue { ptr, i64, i64 } %t167, 1 + %t169 = icmp uge i64 %t166, %t168 + br i1 %t169, label %range230, label %inrange231 +range230: + call void @finch_panic_index(ptr @.str.178, i64 184, i64 %t166, i64 %t168) + unreachable +inrange231: + %t170 = extractvalue { ptr, i64, i64 } %t167, 0 + %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i64 %t166 + %t172 = load { ptr, i64, i64 }, ptr %t171 + store { ptr, i64, i64 } %t172, ptr %a173 + call void @finch_str_copy(ptr %a174, ptr %a173) + %t175 = load { ptr, i64, i64 }, ptr %a174 + %t176 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t175, ptr %a103 + store { ptr, i64, i64 } %t176, ptr %a177 + call void @finch_str_drop(ptr %a177) + store i1 true, ptr %a104 + %t178 = load i64, ptr %a114 + %t179 = add i64 %t178, 1 + store i64 %t179, ptr %a114 + br label %endif229 +else228: + %t180 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t180, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.179, i64 8, i64 0 }, ptr %a182 + %t183 = call i32 @finch_str_eq(ptr %a181, ptr %a182) + %t184 = icmp ne i32 %t183, 0 + br label %logic.from232 +logic.from232: + br i1 %t184, label %logic.rhs233, label %logic.end234 +logic.rhs233: + %t185 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t185, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.180, i64 5, i64 0 }, ptr %a187 + %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) + %t189 = icmp ne i32 %t188, 0 + br label %logic.rend235 +logic.rend235: + br label %logic.end234 +logic.end234: + %t190 = phi i1 [ false, %logic.from232 ], [ %t189, %logic.rend235 ] + br i1 %t190, label %then236, label %else237 +then236: + store i1 true, ptr %a105 + br label %endif238 +else237: + %t191 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t191, ptr %a192 + store { ptr, i64, i64 } { ptr @.str.181, i64 3, i64 0 }, ptr %a193 + %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) + %t195 = icmp ne i32 %t194, 0 + br i1 %t195, label %then239, label %else240 +then239: + %t196 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.182, i64 3, i64 0 }, ptr %a108 + store { ptr, i64, i64 } %t196, ptr %a197 + call void @finch_str_drop(ptr %a197) + br label %endif241 +else240: + %t198 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t198, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.183, i64 2, i64 0 }, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp ne i32 %t201, 0 + br label %logic.from242 +logic.from242: + br i1 %t202, label %logic.rhs243, label %logic.end244 +logic.rhs243: + %t203 = load i64, ptr %a114 + %t204 = add i64 %t203, 1 + %t205 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t206 = load i64, ptr %t205 + %t207 = icmp slt i64 %t204, %t206 + br label %logic.rend245 +logic.rend245: + br label %logic.end244 +logic.end244: + %t208 = phi i1 [ false, %logic.from242 ], [ %t207, %logic.rend245 ] + br i1 %t208, label %then246, label %else247 +then246: + %t209 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 + %t210 = load i64, ptr %a114 + %t211 = add i64 %t210, 1 + %t212 = load { ptr, i64, i64 }, ptr %a1 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 %t211, %t213 + br i1 %t214, label %range249, label %inrange250 +range249: + call void @finch_panic_index(ptr @.str.184, i64 192, i64 %t211, i64 %t213) + unreachable +inrange250: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds { ptr, i64, i64 }, ptr %t215, i64 %t211 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t217, ptr %a218 + call void @finch_str_copy(ptr %a219, ptr %a218) + %t220 = load { ptr, i64, i64 }, ptr %a219 + %t221 = load i64, ptr %t209 + %t222 = add i64 %t221, 1 + call void @finch_arr_reserve(ptr %a109, i64 %t222, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t223 = load ptr, ptr %a109 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i64 %t221 + store { ptr, i64, i64 } %t220, ptr %t224 + store i64 %t222, ptr %t209 + %t225 = load i64, ptr %a114 + %t226 = add i64 %t225, 1 + store i64 %t226, ptr %a114 + br label %endif248 +else247: + %t227 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t227, ptr %a228 + store { ptr, i64, i64 } { ptr @.str.186, i64 2, i64 0 }, ptr %a230 + %t231 = call i32 @finch_str_starts(ptr %a228, ptr %a230) + %t232 = icmp ne i32 %t231, 0 + br label %logic.from251 +logic.from251: + br i1 %t232, label %logic.rhs252, label %logic.end253 +logic.rhs252: + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t234 = load i64, ptr %t233 + %t235 = icmp sgt i64 %t234, 2 + br label %logic.rend254 +logic.rend254: + br label %logic.end253 +logic.end253: + %t236 = phi i1 [ false, %logic.from251 ], [ %t235, %logic.rend254 ] + br i1 %t236, label %then255, label %else256 +then255: + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 + %t238 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t238, ptr %a239 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t242 = load i64, ptr %t241 + call void @finch_str_sub(ptr %a240, ptr %a239, i64 2, i64 %t242, ptr @.str.187, i64 195) + %t243 = load { ptr, i64, i64 }, ptr %a240 + %t244 = load i64, ptr %t237 + %t245 = add i64 %t244, 1 + call void @finch_arr_reserve(ptr %a109, i64 %t245, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t246 = load ptr, ptr %a109 + %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 + store { ptr, i64, i64 } %t243, ptr %t247 + store i64 %t245, ptr %t237 + br label %endif257 +else256: + %t248 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t248, ptr %a249 + store { ptr, i64, i64 } { ptr @.str.188, i64 2, i64 0 }, ptr %a250 + %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) + %t252 = icmp ne i32 %t251, 0 + br label %logic.from258 +logic.from258: + br i1 %t252, label %logic.rhs259, label %logic.end260 +logic.rhs259: + %t253 = load i64, ptr %a114 + %t254 = add i64 %t253, 1 + %t255 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t256 = load i64, ptr %t255 + %t257 = icmp slt i64 %t254, %t256 + br label %logic.rend261 +logic.rend261: + br label %logic.end260 +logic.end260: + %t258 = phi i1 [ false, %logic.from258 ], [ %t257, %logic.rend261 ] + br i1 %t258, label %then262, label %else263 +then262: + %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %a110, i32 0, i32 1 + %t260 = load i64, ptr %a114 + %t261 = add i64 %t260, 1 + %t262 = load { ptr, i64, i64 }, ptr %a1 + %t263 = extractvalue { ptr, i64, i64 } %t262, 1 + %t264 = icmp uge i64 %t261, %t263 + br i1 %t264, label %range265, label %inrange266 +range265: + call void @finch_panic_index(ptr @.str.189, i64 197, i64 %t261, i64 %t263) + unreachable +inrange266: + %t265 = extractvalue { ptr, i64, i64 } %t262, 0 + %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 %t261 + %t267 = load { ptr, i64, i64 }, ptr %t266 + store { ptr, i64, i64 } %t267, ptr %a268 + call void @finch_str_copy(ptr %a269, ptr %a268) + %t270 = load { ptr, i64, i64 }, ptr %a269 + %t271 = load i64, ptr %t259 + %t272 = add i64 %t271, 1 + call void @finch_arr_reserve(ptr %a110, i64 %t272, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t273 = load ptr, ptr %a110 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 + store { ptr, i64, i64 } %t270, ptr %t274 + store i64 %t272, ptr %t259 + %t275 = load i64, ptr %a114 + %t276 = add i64 %t275, 1 + store i64 %t276, ptr %a114 + br label %endif264 +else263: + %t277 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t277, ptr %a278 + store { ptr, i64, i64 } { ptr @.str.190, i64 9, i64 0 }, ptr %a279 + %t280 = call i32 @finch_str_eq(ptr %a278, ptr %a279) + %t281 = icmp ne i32 %t280, 0 + br label %logic.from267 +logic.from267: + br i1 %t281, label %logic.rhs268, label %logic.end269 +logic.rhs268: + %t282 = load i64, ptr %a114 + %t283 = add i64 %t282, 1 + %t284 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t285 = load i64, ptr %t284 + %t286 = icmp slt i64 %t283, %t285 + br label %logic.rend270 +logic.rend270: + br label %logic.end269 +logic.end269: + %t287 = phi i1 [ false, %logic.from267 ], [ %t286, %logic.rend270 ] + br i1 %t287, label %then271, label %else272 +then271: + %t288 = load i64, ptr %a114 + %t289 = add i64 %t288, 1 + %t290 = load { ptr, i64, i64 }, ptr %a1 + %t291 = extractvalue { ptr, i64, i64 } %t290, 1 + %t292 = icmp uge i64 %t289, %t291 + br i1 %t292, label %range274, label %inrange275 +range274: + call void @finch_panic_index(ptr @.str.191, i64 200, i64 %t289, i64 %t291) + unreachable +inrange275: + %t293 = extractvalue { ptr, i64, i64 } %t290, 0 + %t294 = getelementptr inbounds { ptr, i64, i64 }, ptr %t293, i64 %t289 + %t295 = load { ptr, i64, i64 }, ptr %t294 + store { ptr, i64, i64 } %t295, ptr %a296 + store { ptr, i64, i64 } { ptr @.str.193, i64 1, i64 0 }, ptr %a298 + call void @finch_str_split(ptr %a299, ptr %a296, ptr %a298) + %t300 = load { ptr, i64, i64 }, ptr %a299 + store { ptr, i64, i64 } %t300, ptr %a301 + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 + %t303 = load { ptr, i64, i64 }, ptr %a301 + %t304 = extractvalue { ptr, i64, i64 } %t303, 1 + %t305 = icmp uge i64 0, %t304 + br i1 %t305, label %range276, label %inrange277 +range276: + call void @finch_panic_index(ptr @.str.194, i64 201, i64 0, i64 %t304) + unreachable +inrange277: + %t306 = extractvalue { ptr, i64, i64 } %t303, 0 + %t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 0 + %t308 = load { ptr, i64, i64 }, ptr %t307 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_copy(ptr %a310, ptr %a309) + %t311 = load { ptr, i64, i64 }, ptr %a310 + %t312 = load i64, ptr %t302 + %t313 = add i64 %t312, 1 + call void @finch_arr_reserve(ptr %a111, i64 %t313, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t314 = load ptr, ptr %a111 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 %t312 + store { ptr, i64, i64 } %t311, ptr %t315 + store i64 %t313, ptr %t302 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %a112, i32 0, i32 1 + %t317 = load { ptr, i64, i64 }, ptr %a301 + %t318 = extractvalue { ptr, i64, i64 } %t317, 1 + %t319 = icmp uge i64 1, %t318 + br i1 %t319, label %range278, label %inrange279 +range278: + call void @finch_panic_index(ptr @.str.195, i64 202, i64 1, i64 %t318) + unreachable +inrange279: + %t320 = extractvalue { ptr, i64, i64 } %t317, 0 + %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i64 1 + %t322 = load { ptr, i64, i64 }, ptr %t321 + store { ptr, i64, i64 } %t322, ptr %a323 + call void @finch_str_copy(ptr %a324, ptr %a323) + %t325 = load { ptr, i64, i64 }, ptr %a324 + %t326 = load i64, ptr %t316 + %t327 = add i64 %t326, 1 + call void @finch_arr_reserve(ptr %a112, i64 %t327, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t328 = load ptr, ptr %a112 + %t329 = getelementptr inbounds { ptr, i64, i64 }, ptr %t328, i64 %t326 + store { ptr, i64, i64 } %t325, ptr %t329 + store i64 %t327, ptr %t316 + %t330 = load i64, ptr %a114 + %t331 = add i64 %t330, 1 + store i64 %t331, ptr %a114 + call void @finch.drop.arr_str(ptr %a301) + br label %endif273 +else272: + %t332 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t332, ptr %a333 + store { ptr, i64, i64 } { ptr @.str.196, i64 2, i64 0 }, ptr %a334 + %t335 = call i32 @finch_str_eq(ptr %a333, ptr %a334) + %t336 = icmp ne i32 %t335, 0 + br i1 %t336, label %then280, label %else281 +then280: + store i1 true, ptr %a106 + br label %endif282 +else281: + %t337 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t337, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.197, i64 8, i64 0 }, ptr %a339 + %t340 = call i32 @finch_str_eq(ptr %a338, ptr %a339) + %t341 = icmp ne i32 %t340, 0 + br label %logic.from283 +logic.from283: + br i1 %t341, label %logic.rhs284, label %logic.end285 +logic.rhs284: + %t342 = load i64, ptr %a114 + %t343 = add i64 %t342, 1 + %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t345 = load i64, ptr %t344 + %t346 = icmp slt i64 %t343, %t345 + br label %logic.rend286 +logic.rend286: + br label %logic.end285 +logic.end285: + %t347 = phi i1 [ false, %logic.from283 ], [ %t346, %logic.rend286 ] + br i1 %t347, label %then287, label %else288 +then287: + %t348 = load i64, ptr %a114 + %t349 = add i64 %t348, 1 + %t350 = load { ptr, i64, i64 }, ptr %a1 + %t351 = extractvalue { ptr, i64, i64 } %t350, 1 + %t352 = icmp uge i64 %t349, %t351 + br i1 %t352, label %range290, label %inrange291 +range290: + call void @finch_panic_index(ptr @.str.198, i64 207, i64 %t349, i64 %t351) + unreachable +inrange291: + %t353 = extractvalue { ptr, i64, i64 } %t350, 0 + %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i64 %t349 + %t355 = load { ptr, i64, i64 }, ptr %t354 + store { ptr, i64, i64 } %t355, ptr %a356 + call void @finch_str_copy(ptr %a357, ptr %a356) + %t358 = load { ptr, i64, i64 }, ptr %a357 + %t359 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t358, ptr %a107 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + %t361 = load i64, ptr %a114 + %t362 = add i64 %t361, 1 + store i64 %t362, ptr %a114 + br label %endif289 +else288: + %t363 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t363, ptr %a364 + store { ptr, i64, i64 } { ptr @.str.199, i64 3, i64 0 }, ptr %a365 + %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) + %t367 = icmp ne i32 %t366, 0 + br i1 %t367, label %then292, label %else293 +then292: + %t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t369 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t369, ptr %a370 + call void @finch_str_copy(ptr %a371, ptr %a370) + %t372 = load { ptr, i64, i64 }, ptr %a371 + %t373 = load i64, ptr %t368 + %t374 = add i64 %t373, 1 + call void @finch_arr_reserve(ptr %a113, i64 %t374, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t375 = load ptr, ptr %a113 + %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t373 + store { ptr, i64, i64 } %t372, ptr %t376 + store i64 %t374, ptr %t368 + br label %endif294 +else293: + call void @finch.main.usage() + br label %endif294 +endif294: + br label %endif289 +endif289: + br label %endif282 +endif282: + br label %endif273 +endif273: + br label %endif264 +endif264: + br label %endif257 +endif257: + br label %endif248 +endif248: + br label %endif241 +endif241: + br label %endif238 +endif238: + br label %endif229 +endif229: + br label %endif218 +endif218: + %t377 = load i64, ptr %a114 + %t378 = add i64 %t377, 1 + store i64 %t378, ptr %a114 + call void @finch_str_drop(ptr %a129) + br label %while.cond207 +while.end209: + %t379 = load { ptr, i64, i64 }, ptr %a107 + %t380 = call %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %t379) + store %S.platform.Target %t380, ptr %a381 + %t382 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t382, ptr %a383 + store { ptr, i64, i64 } { ptr @.str.200, i64 3, i64 0 }, ptr %a384 + %t385 = call i32 @finch_str_eq(ptr %a383, ptr %a384) + %t386 = icmp ne i32 %t385, 0 + br i1 %t386, label %then295, label %else296 +then295: + %t387 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t387, ptr %a389 + store { ptr, i64, i64 } { ptr @.str.201, i64 11, i64 0 }, ptr %a390 + call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) + store { ptr, i64, i64 } %t387, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a388 + %t393 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a394, i64 %t393) + %t395 = load { ptr, i64, i64 }, ptr %a394 + store { ptr, i64, i64 } %t392, ptr %a397 + store { ptr, i64, i64 } %t395, ptr %a398 + call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) + store { ptr, i64, i64 } %t392, ptr %a399 + call void @finch_str_drop(ptr %a399) + store { ptr, i64, i64 } %t395, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = load { ptr, i64, i64 }, ptr %a396 + store { ptr, i64, i64 } %t401, ptr %a403 + store { ptr, i64, i64 } { ptr @.str.202, i64 1, i64 0 }, ptr %a404 + call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) + store { ptr, i64, i64 } %t401, ptr %a405 + call void @finch_str_drop(ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a402 + %t407 = load { ptr, i64, i64 }, ptr %a77 + %t408 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t407) + store { ptr, i64, i64 } %t406, ptr %a410 + store { ptr, i64, i64 } %t408, ptr %a411 + call void @finch_str_concat(ptr %a409, ptr %a410, ptr %a411) + store { ptr, i64, i64 } %t406, ptr %a412 + call void @finch_str_drop(ptr %a412) + store { ptr, i64, i64 } %t408, ptr %a413 + call void @finch_str_drop(ptr %a413) + %t414 = load { ptr, i64, i64 }, ptr %a409 + %t415 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 6 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t414, ptr %a418 + store { ptr, i64, i64 } %t416, ptr %a419 + call void @finch_str_concat(ptr %a417, ptr %a418, ptr %a419) + store { ptr, i64, i64 } %t414, ptr %a420 + call void @finch_str_drop(ptr %a420) + %t421 = load { ptr, i64, i64 }, ptr %a417 + %t422 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t421, ptr %a103 + store { ptr, i64, i64 } %t422, ptr %a423 + call void @finch_str_drop(ptr %a423) + br label %endif297 +else296: + %t424 = load i1, ptr %a105 + br label %logic.from298 +logic.from298: + br i1 %t424, label %logic.rhs299, label %logic.end300 +logic.rhs299: + %t425 = load i1, ptr %a104 + %t426 = xor i1 %t425, true + br label %logic.rend301 +logic.rend301: + br label %logic.end300 +logic.end300: + %t427 = phi i1 [ false, %logic.from298 ], [ %t426, %logic.rend301 ] + br i1 %t427, label %then302, label %else303 +then302: + %t428 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t429 = load i1, ptr %t428 + br i1 %t429, label %then305, label %else306 +then305: + %t430 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t430, ptr %a432 + store { ptr, i64, i64 } { ptr @.str.203, i64 4, i64 0 }, ptr %a433 + call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a431 + %t435 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t434, ptr %a103 + store { ptr, i64, i64 } %t435, ptr %a436 + call void @finch_str_drop(ptr %a436) + br label %endif307 +else306: + %t437 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 3 + %t438 = load i1, ptr %t437 + br i1 %t438, label %then308, label %else309 +then308: + %t439 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.204, i64 3, i64 0 }, ptr %a441 + store { ptr, i64, i64 } %t439, ptr %a442 + call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442) + %t443 = load { ptr, i64, i64 }, ptr %a440 + store { ptr, i64, i64 } %t443, ptr %a445 + store { ptr, i64, i64 } { ptr @.str.205, i64 6, i64 0 }, ptr %a446 + call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) + store { ptr, i64, i64 } %t443, ptr %a447 + call void @finch_str_drop(ptr %a447) + %t448 = load { ptr, i64, i64 }, ptr %a444 + %t449 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t448, ptr %a103 + store { ptr, i64, i64 } %t449, ptr %a450 + call void @finch_str_drop(ptr %a450) + br label %endif310 +else309: + %t451 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.206, i64 3, i64 0 }, ptr %a453 + store { ptr, i64, i64 } %t451, ptr %a454 + call void @finch_str_concat(ptr %a452, ptr %a453, ptr %a454) + %t455 = load { ptr, i64, i64 }, ptr %a452 + store { ptr, i64, i64 } %t455, ptr %a457 + store { ptr, i64, i64 } { ptr @.str.207, i64 3, i64 0 }, ptr %a458 + call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) + store { ptr, i64, i64 } %t455, ptr %a459 + call void @finch_str_drop(ptr %a459) + %t460 = load { ptr, i64, i64 }, ptr %a456 + %t461 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t460, ptr %a103 + store { ptr, i64, i64 } %t461, ptr %a462 + call void @finch_str_drop(ptr %a462) + br label %endif310 +endif310: + br label %endif307 +endif307: + br label %endif304 +else303: + %t463 = load i1, ptr %a104 + %t464 = xor i1 %t463, true + br i1 %t464, label %then311, label %endif313 +then311: + %t465 = load { ptr, i64, i64 }, ptr %a103 + %t466 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 6 + %t467 = load { ptr, i64, i64 }, ptr %t466 + store { ptr, i64, i64 } %t465, ptr %a469 + store { ptr, i64, i64 } %t467, ptr %a470 + call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) + %t471 = load { ptr, i64, i64 }, ptr %a468 + %t472 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t471, ptr %a103 + store { ptr, i64, i64 } %t472, ptr %a473 + call void @finch_str_drop(ptr %a473) + br label %endif313 +endif313: + br label %endif304 +endif304: + br label %endif297 +endif297: + store %S.main.Loader zeroinitializer, ptr %a474 + %t475 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 + %t476 = load { ptr, i64, i64 }, ptr %t475 + store { ptr, i64, i64 } { ptr @.str.208, i64 5, i64 0 }, ptr %t475 + store { ptr, i64, i64 } %t476, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t479 = load i1, ptr %t478 + br i1 %t479, label %then314, label %else315 +then314: + %t480 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 + %t481 = load { ptr, i64, i64 }, ptr %t480 + store { ptr, i64, i64 } { ptr @.str.209, i64 7, i64 0 }, ptr %t480 + store { ptr, i64, i64 } %t481, ptr %a482 + call void @finch_str_drop(ptr %a482) + br label %endif316 +else315: + %t483 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 3 + %t484 = load i1, ptr %t483 + br i1 %t484, label %then317, label %endif319 +then317: + %t485 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 + %t486 = load { ptr, i64, i64 }, ptr %t485 + store { ptr, i64, i64 } { ptr @.str.210, i64 5, i64 0 }, ptr %t485 + store { ptr, i64, i64 } %t486, ptr %a487 + call void @finch_str_drop(ptr %a487) + br label %endif319 +endif319: + br label %endif316 +endif316: + %t488 = load { ptr, i64, i64 }, ptr %a1 + %t489 = extractvalue { ptr, i64, i64 } %t488, 1 + %t490 = icmp uge i64 0, %t489 + br i1 %t490, label %range320, label %inrange321 +range320: + call void @finch_panic_index(ptr @.str.211, i64 238, i64 0, i64 %t489) + unreachable +inrange321: + %t491 = extractvalue { ptr, i64, i64 } %t488, 0 + %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 0 + %t493 = load { ptr, i64, i64 }, ptr %t492 + %t494 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t493) + store { ptr, i64, i64 } %t494, ptr %a496 + store { ptr, i64, i64 } { ptr @.str.212, i64 7, i64 0 }, ptr %a497 + call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497) + store { ptr, i64, i64 } %t494, ptr %a498 + call void @finch_str_drop(ptr %a498) + %t499 = load { ptr, i64, i64 }, ptr %a495 + %t500 = load { ptr, i64, i64 }, ptr %a1 + %t501 = extractvalue { ptr, i64, i64 } %t500, 1 + %t502 = icmp uge i64 0, %t501 + br i1 %t502, label %range322, label %inrange323 +range322: + call void @finch_panic_index(ptr @.str.213, i64 238, i64 0, i64 %t501) + unreachable +inrange323: + %t503 = extractvalue { ptr, i64, i64 } %t500, 0 + %t504 = getelementptr inbounds { ptr, i64, i64 }, ptr %t503, i64 0 + %t505 = load { ptr, i64, i64 }, ptr %t504 + %t506 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t505) + store { ptr, i64, i64 } %t506, ptr %a508 + store { ptr, i64, i64 } { ptr @.str.214, i64 4, i64 0 }, ptr %a509 + call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) + store { ptr, i64, i64 } %t506, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a507 + %t512 = load { ptr, i64, i64 }, ptr %a1 + %t513 = extractvalue { ptr, i64, i64 } %t512, 1 + %t514 = icmp uge i64 0, %t513 + br i1 %t514, label %range324, label %inrange325 +range324: + call void @finch_panic_index(ptr @.str.215, i64 238, i64 0, i64 %t513) + unreachable +inrange325: + %t515 = extractvalue { ptr, i64, i64 } %t512, 0 + %t516 = getelementptr inbounds { ptr, i64, i64 }, ptr %t515, i64 0 + %t517 = load { ptr, i64, i64 }, ptr %t516 + %t518 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t517) + store { ptr, i64, i64 } %t518, ptr %a520 + store { ptr, i64, i64 } { ptr @.str.216, i64 19, i64 0 }, ptr %a521 + call void @finch_str_concat(ptr %a519, ptr %a520, ptr %a521) + store { ptr, i64, i64 } %t518, ptr %a522 + call void @finch_str_drop(ptr %a522) + %t523 = load { ptr, i64, i64 }, ptr %a519 + %t524 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t525 = call ptr @finch_alloc(i64 %t524) + %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 0 + store { ptr, i64, i64 } %t499, ptr %t526 + %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 1 + store { ptr, i64, i64 } %t511, ptr %t527 + %t528 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 2 + store { ptr, i64, i64 } %t523, ptr %t528 + %t529 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 3 + store { ptr, i64, i64 } { ptr @.str.217, i64 3, i64 0 }, ptr %t529 + %t530 = insertvalue { ptr, i64, i64 } undef, ptr %t525, 0 + %t531 = insertvalue { ptr, i64, i64 } %t530, i64 4, 1 + %t532 = insertvalue { ptr, i64, i64 } %t531, i64 4, 2 + store { ptr, i64, i64 } %t532, ptr %a533 + store i64 0, ptr %a534 + br label %each.cond326 +each.cond326: + %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %a533, i32 0, i32 1 + %t536 = load i64, ptr %t535 + %t537 = load i64, ptr %a534 + %t538 = icmp slt i64 %t537, %t536 + br i1 %t538, label %each.body327, label %each.end329 +each.body327: + %t539 = load ptr, ptr %a533 + %t540 = getelementptr inbounds { ptr, i64, i64 }, ptr %t539, i64 %t537 + %t541 = load { ptr, i64, i64 }, ptr %t540 + store { ptr, i64, i64 } %t541, ptr %a542 + %t543 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + %t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %t543, i32 0, i32 1 + %t545 = load i64, ptr %t544 + %t546 = icmp eq i64 %t545, 0 + br label %logic.from330 +logic.from330: + br i1 %t546, label %logic.rhs331, label %logic.end332 +logic.rhs331: + %t547 = load { ptr, i64, i64 }, ptr %a542 + store { ptr, i64, i64 } %t547, ptr %a549 + store { ptr, i64, i64 } { ptr @.str.218, i64 9, i64 0 }, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t551, ptr %a552 + %t553 = call i32 @finch_file_exists(ptr %a552) + store { ptr, i64, i64 } %t551, ptr %a554 + call void @finch_str_drop(ptr %a554) + %t555 = icmp ne i32 %t553, 0 + br label %logic.rend333 +logic.rend333: + br label %logic.end332 +logic.end332: + %t556 = phi i1 [ false, %logic.from330 ], [ %t555, %logic.rend333 ] + br i1 %t556, label %then334, label %endif336 +then334: + %t557 = load { ptr, i64, i64 }, ptr %a542 + %t558 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + store { ptr, i64, i64 } %t557, ptr %a559 + call void @finch_str_copy(ptr %a560, ptr %a559) + %t561 = load { ptr, i64, i64 }, ptr %a560 + %t562 = load { ptr, i64, i64 }, ptr %t558 + store { ptr, i64, i64 } %t561, ptr %t558 + store { ptr, i64, i64 } %t562, ptr %a563 + call void @finch_str_drop(ptr %a563) + br label %endif336 +endif336: + br label %each.step328 +each.step328: + %t564 = load i64, ptr %a534 + %t565 = add i64 %t564, 1 + store i64 %t565, ptr %a534 + br label %each.cond326 +each.end329: + call void @finch.drop.arr_str(ptr %a533) + %t566 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + %t567 = getelementptr inbounds { ptr, i64, i64 }, ptr %t566, i32 0, i32 1 + %t568 = load i64, ptr %t567 + %t569 = icmp eq i64 %t568, 0 + br i1 %t569, label %then337, label %endif339 +then337: + %t570 = call { ptr, i64, i64 } @finch.main.unpack() + store { ptr, i64, i64 } %t570, ptr %a572 + store { ptr, i64, i64 } { ptr @.str.219, i64 4, i64 0 }, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + store { ptr, i64, i64 } %t570, ptr %a574 + call void @finch_str_drop(ptr %a574) + %t575 = load { ptr, i64, i64 }, ptr %a571 + %t576 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + %t577 = load { ptr, i64, i64 }, ptr %t576 + store { ptr, i64, i64 } %t575, ptr %t576 + store { ptr, i64, i64 } %t577, ptr %a578 + call void @finch_str_drop(ptr %a578) + br label %endif339 +endif339: + %t579 = load { ptr, i64, i64 }, ptr %a111 + %t580 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 6 + store { ptr, i64, i64 } %t579, ptr %a581 + call void @finch.copy.arr_str(ptr %a582, ptr %a581) + %t583 = load { ptr, i64, i64 }, ptr %a582 + %t584 = load { ptr, i64, i64 }, ptr %t580 + store { ptr, i64, i64 } %t583, ptr %t580 + store { ptr, i64, i64 } %t584, ptr %a585 + call void @finch.drop.arr_str(ptr %a585) + %t586 = load { ptr, i64, i64 }, ptr %a112 + %t587 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 7 + store { ptr, i64, i64 } %t586, ptr %a588 + call void @finch.copy.arr_str(ptr %a589, ptr %a588) + %t590 = load { ptr, i64, i64 }, ptr %a589 + %t591 = load { ptr, i64, i64 }, ptr %t587 + store { ptr, i64, i64 } %t590, ptr %t587 + store { ptr, i64, i64 } %t591, ptr %a592 + call void @finch.drop.arr_str(ptr %a592) + %t593 = extractvalue { ptr, i64, i64 } { ptr @.str.220, i64 10, i64 0 }, 0 + %t594 = icmp eq ptr %t593, null + %t595 = select i1 %t594, ptr @.str.221, ptr %t593 + %t596 = call ptr @getenv(ptr %t595) + store { ptr, i64, i64 } zeroinitializer, ptr %a597 + call void @finch_str_from_c(ptr %a597, ptr %t596) + %t598 = load { ptr, i64, i64 }, ptr %a597 + store { ptr, i64, i64 } %t598, ptr %a599 + %t601 = call { ptr, i64, i64 } @finch.host.pathSeparator() + store { ptr, i64, i64 } %t601, ptr %a602 + call void @finch_str_split(ptr %a603, ptr %a599, ptr %a602) + store { ptr, i64, i64 } %t601, ptr %a604 + call void @finch_str_drop(ptr %a604) + %t605 = load { ptr, i64, i64 }, ptr %a603 + store { ptr, i64, i64 } %t605, ptr %a606 + store i64 0, ptr %a607 + br label %each.cond340 +each.cond340: + %t608 = getelementptr inbounds { ptr, i64, i64 }, ptr %a606, i32 0, i32 1 + %t609 = load i64, ptr %t608 + %t610 = load i64, ptr %a607 + %t611 = icmp slt i64 %t610, %t609 + br i1 %t611, label %each.body341, label %each.end343 +each.body341: + %t612 = load ptr, ptr %a606 + %t613 = getelementptr inbounds { ptr, i64, i64 }, ptr %t612, i64 %t610 + %t614 = load { ptr, i64, i64 }, ptr %t613 + store { ptr, i64, i64 } %t614, ptr %a615 + %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %a615, i32 0, i32 1 + %t617 = load i64, ptr %t616 + %t618 = icmp sgt i64 %t617, 0 + br i1 %t618, label %then344, label %endif346 +then344: + %t619 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 5 + %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %t619, i32 0, i32 1 + %t621 = load { ptr, i64, i64 }, ptr %a615 + store { ptr, i64, i64 } %t621, ptr %a622 + call void @finch_str_copy(ptr %a623, ptr %a622) + %t624 = load { ptr, i64, i64 }, ptr %a623 + %t625 = load i64, ptr %t620 + %t626 = add i64 %t625, 1 + call void @finch_arr_reserve(ptr %t619, i64 %t626, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t627 = load ptr, ptr %t619 + %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 + store { ptr, i64, i64 } %t624, ptr %t628 + store i64 %t626, ptr %t620 + br label %endif346 +endif346: + br label %each.step342 +each.step342: + %t629 = load i64, ptr %a607 + %t630 = add i64 %t629, 1 + store i64 %t630, ptr %a607 + br label %each.cond340 +each.end343: + call void @finch.drop.arr_str(ptr %a606) + %t631 = load { ptr, i64, i64 }, ptr %a77 + call void @finch.main.load(ptr %a474, { ptr, i64, i64 } %t631, { ptr, i64, i64 } { ptr @.str.223, i64 0, i64 0 }) + store { ptr, i64, i64 } zeroinitializer, ptr %a632 + store { ptr, i64, i64 } zeroinitializer, ptr %a633 + %t634 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t634, ptr %a635 + call void @finch.copy.arr_str(ptr %a636, ptr %a635) + %t637 = load { ptr, i64, i64 }, ptr %a636 + store { ptr, i64, i64 } %t637, ptr %a638 + %t639 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t639, ptr %a640 + call void @finch.copy.arr_str(ptr %a641, ptr %a640) + %t642 = load { ptr, i64, i64 }, ptr %a641 + store { ptr, i64, i64 } %t642, ptr %a643 + %t644 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 + store i64 0, ptr %a645 + br label %each.cond347 +each.cond347: + %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t644, i32 0, i32 1 + %t647 = load i64, ptr %t646 + %t648 = load i64, ptr %a645 + %t649 = icmp slt i64 %t648, %t647 + br i1 %t649, label %each.body348, label %each.end350 +each.body348: + %t650 = load ptr, ptr %t644 + %t651 = getelementptr inbounds %S.ast.Program, ptr %t650, i64 %t648 + %t652 = load %S.ast.Program, ptr %t651 + store %S.ast.Program %t652, ptr %a653 + %t654 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 1 + %t655 = load { ptr, i64, i64 }, ptr %t654 + %t656 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t655) + store { ptr, i64, i64 } %t656, ptr %a657 + %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %a638, i32 0, i32 1 + %t659 = load { ptr, i64, i64 }, ptr %a657 + store i64 -1, ptr %a660 + %t661 = load i64, ptr %t658 + %t662 = load ptr, ptr %a638 + store i64 0, ptr %a663 + br label %find.cond351 +find.cond351: + %t664 = load i64, ptr %a663 + %t665 = icmp slt i64 %t664, %t661 + br i1 %t665, label %find.body352, label %find.end355 +find.body352: + %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t662, i64 %t664 + %t667 = load { ptr, i64, i64 }, ptr %t666 + store { ptr, i64, i64 } %t667, ptr %a668 + store { ptr, i64, i64 } %t659, ptr %a669 + %t670 = call i32 @finch_str_eq(ptr %a668, ptr %a669) + %t671 = icmp ne i32 %t670, 0 + br i1 %t671, label %find.hit353, label %find.next354 +find.hit353: + store i64 %t664, ptr %a660 + br label %find.end355 +find.next354: + %t672 = add i64 %t664, 1 + store i64 %t672, ptr %a663 + br label %find.cond351 +find.end355: + %t673 = load i64, ptr %a660 + %t674 = icmp sge i64 %t673, 0 + %t675 = xor i1 %t674, true + br i1 %t675, label %then356, label %endif358 +then356: + %t676 = getelementptr inbounds { ptr, i64, i64 }, ptr %a638, i32 0, i32 1 + %t677 = load { ptr, i64, i64 }, ptr %a657 + store { ptr, i64, i64 } %t677, ptr %a678 + call void @finch_str_copy(ptr %a679, ptr %a678) + %t680 = load { ptr, i64, i64 }, ptr %a679 + %t681 = load i64, ptr %t676 + %t682 = add i64 %t681, 1 + call void @finch_arr_reserve(ptr %a638, i64 %t682, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t683 = load ptr, ptr %a638 + %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 + store { ptr, i64, i64 } %t680, ptr %t684 + store i64 %t682, ptr %t676 + br label %endif358 +endif358: + %t685 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t686 = getelementptr inbounds { ptr, i64, i64 }, ptr %t685, i32 0, i32 1 + %t687 = load i64, ptr %t686 + store i64 0, ptr %a688 + br label %for.cond359 +for.cond359: + %t689 = load i64, ptr %a688 + %t690 = icmp slt i64 %t689, %t687 + br i1 %t690, label %for.body360, label %for.end362 +for.body360: + %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %a633, i32 0, i32 1 + %t692 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t693 = load i64, ptr %a688 + %t694 = load { ptr, i64, i64 }, ptr %t692 + %t695 = extractvalue { ptr, i64, i64 } %t694, 1 + %t696 = icmp uge i64 %t693, %t695 + br i1 %t696, label %range363, label %inrange364 +range363: + call void @finch_panic_index(ptr @.str.224, i64 266, i64 %t693, i64 %t695) + unreachable +inrange364: + %t697 = extractvalue { ptr, i64, i64 } %t694, 0 + %t698 = getelementptr inbounds { ptr, i64, i64 }, ptr %t697, i64 %t693 + %t699 = load { ptr, i64, i64 }, ptr %t698 + store i64 -1, ptr %a700 + %t701 = load i64, ptr %t691 + %t702 = load ptr, ptr %a633 + store i64 0, ptr %a703 + br label %find.cond365 +find.cond365: + %t704 = load i64, ptr %a703 + %t705 = icmp slt i64 %t704, %t701 + br i1 %t705, label %find.body366, label %find.end369 +find.body366: + %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 + %t707 = load { ptr, i64, i64 }, ptr %t706 + store { ptr, i64, i64 } %t707, ptr %a708 + store { ptr, i64, i64 } %t699, ptr %a709 + %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) + %t711 = icmp ne i32 %t710, 0 + br i1 %t711, label %find.hit367, label %find.next368 +find.hit367: + store i64 %t704, ptr %a700 + br label %find.end369 +find.next368: + %t712 = add i64 %t704, 1 + store i64 %t712, ptr %a703 + br label %find.cond365 +find.end369: + %t713 = load i64, ptr %a700 + %t714 = icmp sge i64 %t713, 0 + %t715 = xor i1 %t714, true + br i1 %t715, label %then370, label %endif372 +then370: + %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a633, i32 0, i32 1 + %t717 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t718 = load i64, ptr %a688 + %t719 = load { ptr, i64, i64 }, ptr %t717 + %t720 = extractvalue { ptr, i64, i64 } %t719, 1 + %t721 = icmp uge i64 %t718, %t720 + br i1 %t721, label %range373, label %inrange374 +range373: + call void @finch_panic_index(ptr @.str.225, i64 267, i64 %t718, i64 %t720) + unreachable +inrange374: + %t722 = extractvalue { ptr, i64, i64 } %t719, 0 + %t723 = getelementptr inbounds { ptr, i64, i64 }, ptr %t722, i64 %t718 + %t724 = load { ptr, i64, i64 }, ptr %t723 + store { ptr, i64, i64 } %t724, ptr %a725 + call void @finch_str_copy(ptr %a726, ptr %a725) + %t727 = load { ptr, i64, i64 }, ptr %a726 + %t728 = load i64, ptr %t716 + %t729 = add i64 %t728, 1 + call void @finch_arr_reserve(ptr %a633, i64 %t729, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t730 = load ptr, ptr %a633 + %t731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t730, i64 %t728 + store { ptr, i64, i64 } %t727, ptr %t731 + store i64 %t729, ptr %t716 + %t732 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 + %t733 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t734 = load i64, ptr %a688 + %t735 = load { ptr, i64, i64 }, ptr %t733 + %t736 = extractvalue { ptr, i64, i64 } %t735, 1 + %t737 = icmp uge i64 %t734, %t736 + br i1 %t737, label %range375, label %inrange376 +range375: + call void @finch_panic_index(ptr @.str.226, i64 268, i64 %t734, i64 %t736) + unreachable +inrange376: + %t738 = extractvalue { ptr, i64, i64 } %t735, 0 + %t739 = getelementptr inbounds { ptr, i64, i64 }, ptr %t738, i64 %t734 + %t740 = load { ptr, i64, i64 }, ptr %t739 + store { ptr, i64, i64 } %t740, ptr %a741 + call void @finch_str_copy(ptr %a742, ptr %a741) + %t743 = load { ptr, i64, i64 }, ptr %a742 + %t744 = insertvalue %S.cimport.Header zeroinitializer, { ptr, i64, i64 } %t743, 0 + %t745 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 4 + %t746 = load i64, ptr %a688 + %t747 = load { ptr, i64, i64 }, ptr %t745 + %t748 = extractvalue { ptr, i64, i64 } %t747, 1 + %t749 = icmp uge i64 %t746, %t748 + br i1 %t749, label %range377, label %inrange378 +range377: + call void @finch_panic_index(ptr @.str.227, i64 268, i64 %t746, i64 %t748) + unreachable +inrange378: + %t750 = extractvalue { ptr, i64, i64 } %t747, 0 + %t751 = getelementptr inbounds { ptr, i64, i64 }, ptr %t750, i64 %t746 + %t752 = load { ptr, i64, i64 }, ptr %t751 + store { ptr, i64, i64 } %t752, ptr %a753 + call void @finch_str_copy(ptr %a754, ptr %a753) + %t755 = load { ptr, i64, i64 }, ptr %a754 + %t756 = insertvalue %S.cimport.Header %t744, { ptr, i64, i64 } %t755, 1 + %t757 = load i64, ptr %t732 + %t758 = add i64 %t757, 1 + call void @finch_arr_reserve(ptr %a632, i64 %t758, i64 ptrtoint (ptr getelementptr (%S.cimport.Header, ptr null, i32 1) to i64)) + %t759 = load ptr, ptr %a632 + %t760 = getelementptr inbounds %S.cimport.Header, ptr %t759, i64 %t757 + store %S.cimport.Header %t756, ptr %t760 + store i64 %t758, ptr %t732 + br label %endif372 +endif372: + br label %for.step361 +for.step361: + %t761 = load i64, ptr %a688 + %t762 = add i64 %t761, 1 + store i64 %t762, ptr %a688 + br label %for.cond359 +for.end362: + %t763 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 5 + store i64 0, ptr %a764 + br label %each.cond379 +each.cond379: + %t765 = getelementptr inbounds { ptr, i64, i64 }, ptr %t763, i32 0, i32 1 + %t766 = load i64, ptr %t765 + %t767 = load i64, ptr %a764 + %t768 = icmp slt i64 %t767, %t766 + br i1 %t768, label %each.body380, label %each.end382 +each.body380: + %t769 = load ptr, ptr %t763 + %t770 = getelementptr inbounds { ptr, i64, i64 }, ptr %t769, i64 %t767 + %t771 = load { ptr, i64, i64 }, ptr %t770 + store { ptr, i64, i64 } %t771, ptr %a772 + %t773 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t773, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.229, i64 2, i64 0 }, ptr %a776 + %t777 = call i32 @finch_str_ends(ptr %a774, ptr %a776) + %t778 = icmp ne i32 %t777, 0 + br label %logic.from383 +logic.from383: + br i1 %t778, label %logic.end385, label %logic.rhs384 +logic.rhs384: + %t779 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t779, ptr %a780 + store { ptr, i64, i64 } { ptr @.str.231, i64 2, i64 0 }, ptr %a782 + %t783 = call i32 @finch_str_ends(ptr %a780, ptr %a782) + %t784 = icmp ne i32 %t783, 0 + br label %logic.rend386 +logic.rend386: + br label %logic.end385 +logic.end385: + %t785 = phi i1 [ true, %logic.from383 ], [ %t784, %logic.rend386 ] + br label %logic.from387 +logic.from387: + br i1 %t785, label %logic.end389, label %logic.rhs388 +logic.rhs388: + %t786 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t786, ptr %a787 + store { ptr, i64, i64 } { ptr @.str.233, i64 2, i64 0 }, ptr %a789 + %t790 = call i32 @finch_str_ends(ptr %a787, ptr %a789) + %t791 = icmp ne i32 %t790, 0 + br label %logic.rend390 +logic.rend390: + br label %logic.end389 +logic.end389: + %t792 = phi i1 [ true, %logic.from387 ], [ %t791, %logic.rend390 ] + br i1 %t792, label %then391, label %else392 +then391: + %t793 = getelementptr inbounds { ptr, i64, i64 }, ptr %a643, i32 0, i32 1 + %t794 = load { ptr, i64, i64 }, ptr %a657 + store { ptr, i64, i64 } %t794, ptr %a796 + store { ptr, i64, i64 } { ptr @.str.234, i64 1, i64 0 }, ptr %a797 + call void @finch_str_concat(ptr %a795, ptr %a796, ptr %a797) + %t798 = load { ptr, i64, i64 }, ptr %a795 + %t799 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t798, ptr %a801 + store { ptr, i64, i64 } %t799, ptr %a802 + call void @finch_str_concat(ptr %a800, ptr %a801, ptr %a802) + store { ptr, i64, i64 } %t798, ptr %a803 + call void @finch_str_drop(ptr %a803) + %t804 = load { ptr, i64, i64 }, ptr %a800 + %t805 = load i64, ptr %t793 + %t806 = add i64 %t805, 1 + call void @finch_arr_reserve(ptr %a643, i64 %t806, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t807 = load ptr, ptr %a643 + %t808 = getelementptr inbounds { ptr, i64, i64 }, ptr %t807, i64 %t805 + store { ptr, i64, i64 } %t804, ptr %t808 + store i64 %t806, ptr %t793 + br label %endif393 +else392: + %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a643, i32 0, i32 1 + %t810 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t810, ptr %a811 + call void @finch_str_copy(ptr %a812, ptr %a811) + %t813 = load { ptr, i64, i64 }, ptr %a812 + %t814 = load i64, ptr %t809 + %t815 = add i64 %t814, 1 + call void @finch_arr_reserve(ptr %a643, i64 %t815, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t816 = load ptr, ptr %a643 + %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t814 + store { ptr, i64, i64 } %t813, ptr %t817 + store i64 %t815, ptr %t809 + br label %endif393 +endif393: + br label %each.step381 +each.step381: + %t818 = load i64, ptr %a764 + %t819 = add i64 %t818, 1 + store i64 %t819, ptr %a764 + br label %each.cond379 +each.end382: + call void @finch_str_drop(ptr %a657) + br label %each.step349 +each.step349: + %t820 = load i64, ptr %a645 + %t821 = add i64 %t820, 1 + store i64 %t821, ptr %a645 + br label %each.cond347 +each.end350: + store { ptr, i64, i64 } { ptr @.str.235, i64 0, i64 0 }, ptr %a822 + %t823 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 5 + %t824 = load i1, ptr %t823 + br label %logic.from394 +logic.from394: + br i1 %t824, label %logic.end396, label %logic.rhs395 +logic.rhs395: + %t825 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t826 = load i1, ptr %t825 + br label %logic.rend397 +logic.rend397: + br label %logic.end396 +logic.end396: + %t827 = phi i1 [ true, %logic.from394 ], [ %t826, %logic.rend397 ] + br i1 %t827, label %then398, label %endif400 +then398: + %t828 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 0 + %t829 = load { ptr, i64, i64 }, ptr %t828 + store { ptr, i64, i64 } %t829, ptr %a830 + call void @finch_str_copy(ptr %a831, ptr %a830) + %t832 = load { ptr, i64, i64 }, ptr %a831 + %t833 = load { ptr, i64, i64 }, ptr %a822 + store { ptr, i64, i64 } %t832, ptr %a822 + store { ptr, i64, i64 } %t833, ptr %a834 + call void @finch_str_drop(ptr %a834) + br label %endif400 +endif400: + %t835 = load { ptr, i64, i64 }, ptr %a632 + %t836 = load { ptr, i64, i64 }, ptr %a638 + %t837 = load { ptr, i64, i64 }, ptr %a822 + %t838 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t839 = load i1, ptr %t838 + %t840 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 7 + %t841 = load { ptr, i64, i64 }, ptr %t840 + %t842 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t835, { ptr, i64, i64 } %t836, { ptr, i64, i64 } %t837, i1 %t839, { ptr, i64, i64 } %t841) + %t843 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 0 + %t844 = xor i1 %t843, true + %t845 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 2 + %t846 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 1 + br i1 %t844, label %or.failed401, label %or.ok402 +or.failed401: + store { ptr, i64, i64 } %t845, ptr %a847 + %t848 = load { ptr, i64, i64 }, ptr %a847 + %t849 = extractvalue { ptr, i64, i64 } %t848, 1 + %t850 = trunc i64 %t849 to i32 + %t851 = extractvalue { ptr, i64, i64 } %t848, 0 + %t852 = icmp eq ptr %t851, null + %t853 = select i1 %t852, ptr @.str.236, ptr %t851 + %t854 = call i32 (ptr, ...) @printf(ptr @.str.237, i32 %t850, ptr %t853) + %t855 = call i32 (ptr, ...) @printf(ptr @.str.238) + call void @finch_str_drop(ptr %a847) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 1 +or.ok402: + store %S.cimport.CImports %t846, ptr %a856 + %t857 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 + %t858 = load { ptr, i64, i64 }, ptr %t857 + %t859 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 1 + %t860 = load { ptr, i64, i64 }, ptr %t859 + %t861 = load %S.cimport.CImports, ptr %a856 + %t862 = load i1, ptr %a105 + %t863 = insertvalue %S.gen.Options zeroinitializer, i1 %t862, 0 + %t864 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t864, ptr %a865 + store { ptr, i64, i64 } { ptr @.str.239, i64 5, i64 0 }, ptr %a866 + %t867 = call i32 @finch_str_eq(ptr %a865, ptr %a866) + %t868 = icmp ne i32 %t867, 0 + %t869 = insertvalue %S.gen.Options %t863, i1 %t868, 1 + %t870 = load i1, ptr %a106 + %t871 = insertvalue %S.gen.Options %t869, i1 %t870, 2 + %t872 = call { ptr, i64, i64 } @finch.host.cwd() + %t873 = insertvalue %S.gen.Options %t871, { ptr, i64, i64 } %t872, 3 + %t874 = load %S.platform.Target, ptr %a381 + store %S.platform.Target %t874, ptr %a875 + call void @finch.copy.S_platform_Target(ptr %a876, ptr %a875) + %t877 = load %S.platform.Target, ptr %a876 + %t878 = insertvalue %S.gen.Options %t873, %S.platform.Target %t877, 4 + %t879 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t858, { ptr, i64, i64 } %t860, %S.cimport.CImports %t861, %S.gen.Options %t878) + store %S.gen.Options %t878, ptr %a880 + call void @finch.drop.S_gen_Options(ptr %a880) + store { ptr, i64, i64 } %t879, ptr %a881 + %t882 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t882, ptr %a883 + store { ptr, i64, i64 } { ptr @.str.240, i64 2, i64 0 }, ptr %a884 + %t885 = call i32 @finch_str_eq(ptr %a883, ptr %a884) + %t886 = icmp ne i32 %t885, 0 + br label %logic.from409 +logic.from409: + br i1 %t886, label %logic.end411, label %logic.rhs410 +logic.rhs410: + %t887 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t887, ptr %a888 + store { ptr, i64, i64 } { ptr @.str.241, i64 5, i64 0 }, ptr %a889 + %t890 = call i32 @finch_str_eq(ptr %a888, ptr %a889) + %t891 = icmp ne i32 %t890, 0 + br label %logic.rend412 +logic.rend412: + br label %logic.end411 +logic.end411: + %t892 = phi i1 [ true, %logic.from409 ], [ %t891, %logic.rend412 ] + br i1 %t892, label %then413, label %endif415 +then413: + %t893 = load { ptr, i64, i64 }, ptr %a881 + %t894 = extractvalue { ptr, i64, i64 } %t893, 1 + %t895 = trunc i64 %t894 to i32 + %t896 = extractvalue { ptr, i64, i64 } %t893, 0 + %t897 = icmp eq ptr %t896, null + %t898 = select i1 %t897, ptr @.str.242, ptr %t896 + %t899 = call i32 (ptr, ...) @printf(ptr @.str.243, i32 %t895, ptr %t898) + %t900 = call i32 (ptr, ...) @printf(ptr @.str.244) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 0 +endif415: + %t901 = extractvalue { ptr, i64, i64 } { ptr @.str.245, i64 8, i64 0 }, 0 + %t902 = icmp eq ptr %t901, null + %t903 = select i1 %t902, ptr @.str.246, ptr %t901 + %t904 = call ptr @getenv(ptr %t903) + store { ptr, i64, i64 } zeroinitializer, ptr %a905 + call void @finch_str_from_c(ptr %a905, ptr %t904) + %t906 = load { ptr, i64, i64 }, ptr %a905 + store { ptr, i64, i64 } %t906, ptr %a907 + call void @finch_str_copy(ptr %a908, ptr %a907) + %t909 = load { ptr, i64, i64 }, ptr %a908 + store { ptr, i64, i64 } %t909, ptr %a910 + %t911 = getelementptr inbounds { ptr, i64, i64 }, ptr %a910, i32 0, i32 1 + %t912 = load i64, ptr %t911 + %t913 = icmp eq i64 %t912, 0 + br i1 %t913, label %then439, label %endif441 +then439: + %t914 = load { ptr, i64, i64 }, ptr %a1 + %t915 = extractvalue { ptr, i64, i64 } %t914, 1 + %t916 = icmp uge i64 0, %t915 + br i1 %t916, label %range442, label %inrange443 +range442: + call void @finch_panic_index(ptr @.str.247, i64 296, i64 0, i64 %t915) + unreachable +inrange443: + %t917 = extractvalue { ptr, i64, i64 } %t914, 0 + %t918 = getelementptr inbounds { ptr, i64, i64 }, ptr %t917, i64 0 + %t919 = load { ptr, i64, i64 }, ptr %t918 + %t920 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t919) + store { ptr, i64, i64 } %t920, ptr %a922 + store { ptr, i64, i64 } { ptr @.str.248, i64 22, i64 0 }, ptr %a923 + call void @finch_str_concat(ptr %a921, ptr %a922, ptr %a923) + store { ptr, i64, i64 } %t920, ptr %a924 + call void @finch_str_drop(ptr %a924) + %t925 = load { ptr, i64, i64 }, ptr %a921 + %t926 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t925, ptr %a910 + store { ptr, i64, i64 } %t926, ptr %a927 + call void @finch_str_drop(ptr %a927) + br label %endif441 +endif441: + %t928 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t928, ptr %a929 + %t930 = call i32 @finch_file_exists(ptr %a929) + %t931 = icmp ne i32 %t930, 0 + %t932 = xor i1 %t931, true + br i1 %t932, label %then444, label %endif446 +then444: + %t933 = load { ptr, i64, i64 }, ptr %a1 + %t934 = extractvalue { ptr, i64, i64 } %t933, 1 + %t935 = icmp uge i64 0, %t934 + br i1 %t935, label %range447, label %inrange448 +range447: + call void @finch_panic_index(ptr @.str.249, i64 299, i64 0, i64 %t934) + unreachable +inrange448: + %t936 = extractvalue { ptr, i64, i64 } %t933, 0 + %t937 = getelementptr inbounds { ptr, i64, i64 }, ptr %t936, i64 0 + %t938 = load { ptr, i64, i64 }, ptr %t937 + %t939 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t938) + store { ptr, i64, i64 } %t939, ptr %a941 + store { ptr, i64, i64 } { ptr @.str.250, i64 19, i64 0 }, ptr %a942 + call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) + store { ptr, i64, i64 } %t939, ptr %a943 + call void @finch_str_drop(ptr %a943) + %t944 = load { ptr, i64, i64 }, ptr %a940 + %t945 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t944, ptr %a910 + store { ptr, i64, i64 } %t945, ptr %a946 + call void @finch_str_drop(ptr %a946) + br label %endif446 +endif446: + %t947 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t947, ptr %a948 + %t949 = call i32 @finch_file_exists(ptr %a948) + %t950 = icmp ne i32 %t949, 0 + %t951 = xor i1 %t950, true + br i1 %t951, label %then449, label %endif451 +then449: + %t952 = load { ptr, i64, i64 }, ptr %a1 + %t953 = extractvalue { ptr, i64, i64 } %t952, 1 + %t954 = icmp uge i64 0, %t953 + br i1 %t954, label %range452, label %inrange453 +range452: + call void @finch_panic_index(ptr @.str.251, i64 302, i64 0, i64 %t953) + unreachable +inrange453: + %t955 = extractvalue { ptr, i64, i64 } %t952, 0 + %t956 = getelementptr inbounds { ptr, i64, i64 }, ptr %t955, i64 0 + %t957 = load { ptr, i64, i64 }, ptr %t956 + %t958 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t957) + store { ptr, i64, i64 } %t958, ptr %a960 + store { ptr, i64, i64 } { ptr @.str.252, i64 34, i64 0 }, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t958, ptr %a962 + call void @finch_str_drop(ptr %a962) + %t963 = load { ptr, i64, i64 }, ptr %a959 + %t964 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t963, ptr %a910 + store { ptr, i64, i64 } %t964, ptr %a965 + call void @finch_str_drop(ptr %a965) + br label %endif451 +endif451: + %t966 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t966, ptr %a967 + %t968 = call i32 @finch_file_exists(ptr %a967) + %t969 = icmp ne i32 %t968, 0 + %t970 = xor i1 %t969, true + br label %logic.from454 +logic.from454: + br i1 %t970, label %logic.rhs455, label %logic.end456 +logic.rhs455: + store { ptr, i64, i64 } { ptr @.str.253, i64 18, i64 0 }, ptr %a971 + %t972 = call i32 @finch_file_exists(ptr %a971) + %t973 = icmp ne i32 %t972, 0 + br label %logic.rend457 +logic.rend457: + br label %logic.end456 +logic.end456: + %t974 = phi i1 [ false, %logic.from454 ], [ %t973, %logic.rend457 ] + br i1 %t974, label %then458, label %endif460 +then458: + %t975 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } { ptr @.str.254, i64 18, i64 0 }, ptr %a910 + store { ptr, i64, i64 } %t975, ptr %a976 + call void @finch_str_drop(ptr %a976) + br label %endif460 +endif460: + %t977 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t977, ptr %a978 + %t979 = call i32 @finch_file_exists(ptr %a978) + %t980 = icmp ne i32 %t979, 0 + %t981 = xor i1 %t980, true + br i1 %t981, label %then461, label %endif463 +then461: + %t982 = call { ptr, i64, i64 } @finch.main.unpack() + store { ptr, i64, i64 } %t982, ptr %a984 + store { ptr, i64, i64 } { ptr @.str.255, i64 19, i64 0 }, ptr %a985 + call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) + store { ptr, i64, i64 } %t982, ptr %a986 + call void @finch_str_drop(ptr %a986) + %t987 = load { ptr, i64, i64 }, ptr %a983 + %t988 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t987, ptr %a910 + store { ptr, i64, i64 } %t988, ptr %a989 + call void @finch_str_drop(ptr %a989) + br label %endif463 +endif463: + store { ptr, i64, i64 } { ptr @.str.256, i64 0, i64 0 }, ptr %a990 + %t991 = load i1, ptr %a105 + br i1 %t991, label %then464, label %endif466 +then464: + %t992 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } { ptr @.str.257, i64 6, i64 0 }, ptr %a990 + store { ptr, i64, i64 } %t992, ptr %a993 + call void @finch_str_drop(ptr %a993) + br label %endif466 +endif466: + %t994 = load i1, ptr %a106 + br i1 %t994, label %then467, label %endif469 +then467: + %t995 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t995, ptr %a997 + store { ptr, i64, i64 } { ptr @.str.258, i64 3, i64 0 }, ptr %a998 + call void @finch_str_concat(ptr %a996, ptr %a997, ptr %a998) + %t999 = load { ptr, i64, i64 }, ptr %a996 + %t1000 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t999, ptr %a990 + store { ptr, i64, i64 } %t1000, ptr %a1001 + call void @finch_str_drop(ptr %a1001) + br label %endif469 +endif469: + %t1002 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t1002, ptr %a1003 + call void @finch_str_copy(ptr %a1004, ptr %a1003) + %t1005 = load { ptr, i64, i64 }, ptr %a1004 + %t1006 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t1005, 0 + %t1007 = load { ptr, i64, i64 }, ptr %a881 + store { ptr, i64, i64 } %t1007, ptr %a1008 + call void @finch_str_copy(ptr %a1009, ptr %a1008) + %t1010 = load { ptr, i64, i64 }, ptr %a1009 + %t1011 = insertvalue %S.linker.Build %t1006, { ptr, i64, i64 } %t1010, 1 + %t1012 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t1012, ptr %a1013 + call void @finch_str_copy(ptr %a1014, ptr %a1013) + %t1015 = load { ptr, i64, i64 }, ptr %a1014 + %t1016 = insertvalue %S.linker.Build %t1011, { ptr, i64, i64 } %t1015, 2 + %t1017 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t1017, ptr %a1018 + call void @finch_str_copy(ptr %a1019, ptr %a1018) + %t1020 = load { ptr, i64, i64 }, ptr %a1019 + %t1021 = insertvalue %S.linker.Build %t1016, { ptr, i64, i64 } %t1020, 3 + %t1022 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t1022, ptr %a1023 + call void @finch_str_copy(ptr %a1024, ptr %a1023) + %t1025 = load { ptr, i64, i64 }, ptr %a1024 + %t1026 = insertvalue %S.linker.Build %t1021, { ptr, i64, i64 } %t1025, 4 + %t1027 = load i1, ptr %a105 + %t1028 = insertvalue %S.linker.Build %t1026, i1 %t1027, 5 + %t1029 = load { ptr, i64, i64 }, ptr %a643 + store { ptr, i64, i64 } %t1029, ptr %a1030 + call void @finch.copy.arr_str(ptr %a1031, ptr %a1030) + %t1032 = load { ptr, i64, i64 }, ptr %a1031 + %t1033 = insertvalue %S.linker.Build %t1028, { ptr, i64, i64 } %t1032, 6 + %t1034 = load %S.platform.Target, ptr %a381 + %t1035 = load %S.cimport.CImports, ptr %a856 + %t1036 = call i64 @finch.linker.build(%S.linker.Build %t1033, %S.platform.Target %t1034, %S.cimport.CImports %t1035) + store %S.linker.Build %t1033, ptr %a1037 + call void @finch.drop.S_linker_Build(ptr %a1037) + %t1038 = icmp ne i64 %t1036, 0 + br i1 %t1038, label %then470, label %endif472 +then470: + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 1 +endif472: + %t1039 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t1039, ptr %a1040 + store { ptr, i64, i64 } { ptr @.str.259, i64 3, i64 0 }, ptr %a1041 + %t1042 = call i32 @finch_str_eq(ptr %a1040, ptr %a1041) + %t1043 = icmp ne i32 %t1042, 0 + br i1 %t1043, label %then473, label %endif475 +then473: + store { ptr, i64, i64 } zeroinitializer, ptr %a1044 + store i64 0, ptr %a1045 + br label %each.cond476 +each.cond476: + %t1046 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t1047 = load i64, ptr %t1046 + %t1048 = load i64, ptr %a1045 + %t1049 = icmp slt i64 %t1048, %t1047 + br i1 %t1049, label %each.body477, label %each.end479 +each.body477: + %t1050 = load ptr, ptr %a113 + %t1051 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1050, i64 %t1048 + %t1052 = load { ptr, i64, i64 }, ptr %t1051 + store { ptr, i64, i64 } %t1052, ptr %a1053 + %t1054 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + %t1055 = load { ptr, i64, i64 }, ptr %a1053 + %t1056 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1055) + %t1057 = load i64, ptr %t1054 + %t1058 = add i64 %t1057, 1 + call void @finch_arr_reserve(ptr %a1044, i64 %t1058, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1059 = load ptr, ptr %a1044 + %t1060 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1059, i64 %t1057 + store { ptr, i64, i64 } %t1056, ptr %t1060 + store i64 %t1058, ptr %t1054 + br label %each.step478 +each.step478: + %t1061 = load i64, ptr %a1045 + %t1062 = add i64 %t1061, 1 + store i64 %t1062, ptr %a1045 + br label %each.cond476 +each.end479: + %t1063 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 8 + %t1064 = load { ptr, i64, i64 }, ptr %t1063 + %t1065 = load { ptr, i64, i64 }, ptr %a103 + %t1066 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1065) + store { ptr, i64, i64 } %t1064, ptr %a1068 + store { ptr, i64, i64 } %t1066, ptr %a1069 + call void @finch_str_concat(ptr %a1067, ptr %a1068, ptr %a1069) + store { ptr, i64, i64 } %t1066, ptr %a1070 + call void @finch_str_drop(ptr %a1070) + %t1071 = load { ptr, i64, i64 }, ptr %a1067 + store { ptr, i64, i64 } %t1071, ptr %a1073 + store { ptr, i64, i64 } { ptr @.str.260, i64 1, i64 0 }, ptr %a1074 + call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) + store { ptr, i64, i64 } %t1071, ptr %a1075 + call void @finch_str_drop(ptr %a1075) + %t1076 = load { ptr, i64, i64 }, ptr %a1072 + %t1077 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.261, i64 1, i64 0 }, ptr %a1078 + call void @finch_str_join(ptr %a1079, ptr %a1044, ptr %a1078) + %t1080 = load { ptr, i64, i64 }, ptr %a1079 + store { ptr, i64, i64 } %t1076, ptr %a1082 + store { ptr, i64, i64 } %t1080, ptr %a1083 + call void @finch_str_concat(ptr %a1081, ptr %a1082, ptr %a1083) + store { ptr, i64, i64 } %t1076, ptr %a1084 + call void @finch_str_drop(ptr %a1084) + store { ptr, i64, i64 } %t1080, ptr %a1085 + call void @finch_str_drop(ptr %a1085) + %t1086 = load { ptr, i64, i64 }, ptr %a1081 + %t1087 = call i64 @finch.host.run({ ptr, i64, i64 } %t1086) + store { ptr, i64, i64 } %t1086, ptr %a1088 + call void @finch_str_drop(ptr %a1088) + store i64 %t1087, ptr %a1089 + %t1090 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.host.remove({ ptr, i64, i64 } %t1090) + %t1091 = load i64, ptr %a1089 + call void @finch.drop.arr_str(ptr %a1044) + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 %t1091 +endif475: + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 0 +} + +define internal i1 @finch.lexer.isAlpha(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 97 + br label %logic.from480 +logic.from480: + br i1 %t3, label %logic.rhs481, label %logic.end482 +logic.rhs481: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 122 + br label %logic.rend483 +logic.rend483: + br label %logic.end482 +logic.end482: + %t6 = phi i1 [ false, %logic.from480 ], [ %t5, %logic.rend483 ] + br label %logic.from484 +logic.from484: + br i1 %t6, label %logic.end486, label %logic.rhs485 +logic.rhs485: + %t7 = load i8, ptr %a1 + %t8 = icmp uge i8 %t7, 65 + br label %logic.from487 +logic.from487: + br i1 %t8, label %logic.rhs488, label %logic.end489 +logic.rhs488: + %t9 = load i8, ptr %a1 + %t10 = icmp ule i8 %t9, 90 + br label %logic.rend490 +logic.rend490: + br label %logic.end489 +logic.end489: + %t11 = phi i1 [ false, %logic.from487 ], [ %t10, %logic.rend490 ] + br label %logic.rend491 +logic.rend491: + br label %logic.end486 +logic.end486: + %t12 = phi i1 [ true, %logic.from484 ], [ %t11, %logic.rend491 ] + br label %logic.from492 +logic.from492: + br i1 %t12, label %logic.end494, label %logic.rhs493 +logic.rhs493: + %t13 = load i8, ptr %a1 + %t14 = icmp eq i8 %t13, 95 + br label %logic.rend495 +logic.rend495: + br label %logic.end494 +logic.end494: + %t15 = phi i1 [ true, %logic.from492 ], [ %t14, %logic.rend495 ] + ret i1 %t15 +} + +define internal i1 @finch.lexer.isDigit(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 48 + br label %logic.from496 +logic.from496: + br i1 %t3, label %logic.rhs497, label %logic.end498 +logic.rhs497: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 57 + br label %logic.rend499 +logic.rend499: + br label %logic.end498 +logic.end498: + %t6 = phi i1 [ false, %logic.from496 ], [ %t5, %logic.rend499 ] + ret i1 %t6 +} + +define internal i1 @finch.lexer.isHex(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = call i1 @finch.lexer.isDigit(i8 %t2) + br label %logic.from500 +logic.from500: + br i1 %t3, label %logic.end502, label %logic.rhs501 +logic.rhs501: + %t4 = load i8, ptr %a1 + %t5 = icmp uge i8 %t4, 97 + br label %logic.from503 +logic.from503: + br i1 %t5, label %logic.rhs504, label %logic.end505 +logic.rhs504: + %t6 = load i8, ptr %a1 + %t7 = icmp ule i8 %t6, 102 + br label %logic.rend506 +logic.rend506: + br label %logic.end505 +logic.end505: + %t8 = phi i1 [ false, %logic.from503 ], [ %t7, %logic.rend506 ] + br label %logic.rend507 +logic.rend507: + br label %logic.end502 +logic.end502: + %t9 = phi i1 [ true, %logic.from500 ], [ %t8, %logic.rend507 ] + br label %logic.from508 +logic.from508: + br i1 %t9, label %logic.end510, label %logic.rhs509 +logic.rhs509: + %t10 = load i8, ptr %a1 + %t11 = icmp uge i8 %t10, 65 + br label %logic.from511 +logic.from511: + br i1 %t11, label %logic.rhs512, label %logic.end513 +logic.rhs512: + %t12 = load i8, ptr %a1 + %t13 = icmp ule i8 %t12, 70 + br label %logic.rend514 +logic.rend514: + br label %logic.end513 +logic.end513: + %t14 = phi i1 [ false, %logic.from511 ], [ %t13, %logic.rend514 ] + br label %logic.rend515 +logic.rend515: + br label %logic.end510 +logic.end510: + %t15 = phi i1 [ true, %logic.from508 ], [ %t14, %logic.rend515 ] + ret i1 %t15 +} + +define internal i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca i64, align 16 + %a34 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 21, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.262, i64 2, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.263, i64 6, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.264, i64 2, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.265, i64 4, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.266, i64 5, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.267, i64 3, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.268, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.269, i64 5, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.270, i64 8, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.271, i64 4, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.272, i64 5, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.273, i64 4, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.274, i64 6, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.275, i64 4, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.276, i64 6, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.277, i64 5, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 + store { ptr, i64, i64 } { ptr @.str.278, i64 2, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 + store { ptr, i64, i64 } { ptr @.str.279, i64 3, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 + store { ptr, i64, i64 } { ptr @.str.280, i64 4, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 + store { ptr, i64, i64 } { ptr @.str.281, i64 5, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 + store { ptr, i64, i64 } { ptr @.str.282, i64 6, i64 0 }, ptr %t24 + %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t26 = insertvalue { ptr, i64, i64 } %t25, i64 21, 1 + %t27 = insertvalue { ptr, i64, i64 } %t26, i64 21, 2 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 + %t30 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a31 + %t32 = load i64, ptr %t29 + %t33 = load ptr, ptr %a28 + store i64 0, ptr %a34 + br label %find.cond516 +find.cond516: + %t35 = load i64, ptr %a34 + %t36 = icmp slt i64 %t35, %t32 + br i1 %t36, label %find.body517, label %find.end520 +find.body517: + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t35 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + store { ptr, i64, i64 } %t30, ptr %a40 + %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br i1 %t42, label %find.hit518, label %find.next519 +find.hit518: + store i64 %t35, ptr %a31 + br label %find.end520 +find.next519: + %t43 = add i64 %t35, 1 + store i64 %t43, ptr %a34 + br label %find.cond516 +find.end520: + %t44 = load i64, ptr %a31 + %t45 = icmp sge i64 %t44, 0 + call void @finch.drop.arr_str(ptr %a28) + ret i1 %t45 +} + +define internal void @finch.lexer.fail(ptr %p0, i64 %p1, i64 %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store i64 %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic521, label %ok522 +panic521: + call void @finch_panic(ptr @.str.283, i64 41, ptr @.str.284) + unreachable +ok522: + %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %t7 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.285, i64 1, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + %t13 = load i64, ptr %a2 + call void @finch_str_from_int(ptr %a14, i64 %t13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.286, i64 1, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a28, i64 %t27) + %t29 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t26, ptr %a33 + call void @finch_str_drop(ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.287, i64 9, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t40, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t40, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = trunc i64 %t47 to i32 + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = icmp eq ptr %t49, null + %t51 = select i1 %t50, ptr @.str.288, ptr %t49 + %t52 = call i32 (ptr, ...) @printf(ptr @.str.289, i32 %t48, ptr %t51) + store { ptr, i64, i64 } %t46, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = call i32 (ptr, ...) @printf(ptr @.str.290) + %t55 = trunc i64 1 to i32 + %t56 = call i32 @fflush(ptr null) + call void @exit(i32 %t55) + ret void +} + +define internal i8 @finch.lexer.peek(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic523, label %ok524 +panic523: + call void @finch_panic(ptr @.str.291, i64 46, ptr @.str.292) + unreachable +ok524: + %t5 = getelementptr inbounds %S.lexer.Lexer, ptr %t3, i32 0, i32 2 + %t6 = load i64, ptr %t5 + %t7 = load i64, ptr %a2 + %t8 = add i64 %t6, %t7 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic525, label %ok526 +panic525: + call void @finch_panic(ptr @.str.293, i64 46, ptr @.str.294) + unreachable +ok526: + %t11 = getelementptr inbounds %S.lexer.Lexer, ptr %t9, i32 0, i32 0 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = icmp slt i64 %t8, %t13 + br i1 %t14, label %then527, label %endif529 +then527: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic530, label %ok531 +panic530: + call void @finch_panic(ptr @.str.295, i64 47, ptr @.str.296) + unreachable +ok531: + %t17 = getelementptr inbounds %S.lexer.Lexer, ptr %t15, i32 0, i32 0 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic532, label %ok533 +panic532: + call void @finch_panic(ptr @.str.297, i64 47, ptr @.str.298) + unreachable +ok533: + %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 2 + %t21 = load i64, ptr %t20 + %t22 = load i64, ptr %a2 + %t23 = add i64 %t21, %t22 + %t24 = load { ptr, i64, i64 }, ptr %t17 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range534, label %inrange535 +range534: + call void @finch_panic_index(ptr @.str.299, i64 47, i64 %t23, i64 %t25) + unreachable +inrange535: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 + %t29 = load i8, ptr %t28 + ret i8 %t29 +endif529: + %t30 = trunc i64 0 to i8 + ret i8 %t30 +} + +define internal void @finch.lexer.advance(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a15 = alloca i8, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic536, label %ok537 +panic536: + call void @finch_panic(ptr @.str.300, i64 53, ptr @.str.301) + unreachable +ok537: + %t4 = getelementptr inbounds %S.lexer.Lexer, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic538, label %ok539 +panic538: + call void @finch_panic(ptr @.str.302, i64 53, ptr @.str.303) + unreachable +ok539: + %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 2 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range540, label %inrange541 +range540: + call void @finch_panic_index(ptr @.str.304, i64 53, i64 %t8, i64 %t10) + unreachable +inrange541: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 + %t14 = load i8, ptr %t13 + store i8 %t14, ptr %a15 + %t16 = load i8, ptr %a15 + %t17 = icmp eq i8 %t16, 10 + br i1 %t17, label %then542, label %else543 +then542: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic545, label %ok546 +panic545: + call void @finch_panic(ptr @.str.305, i64 55, ptr @.str.306) + unreachable +ok546: + %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 3 + %t21 = load i64, ptr %t20 + %t22 = add i64 %t21, 1 + store i64 %t22, ptr %t20 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic547, label %ok548 +panic547: + call void @finch_panic(ptr @.str.307, i64 56, ptr @.str.308) + unreachable +ok548: + %t25 = getelementptr inbounds %S.lexer.Lexer, ptr %t23, i32 0, i32 4 + store i64 1, ptr %t25 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic549, label %ok550 +panic549: + call void @finch_panic(ptr @.str.309, i64 57, ptr @.str.310) + unreachable +ok550: + %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 5 + store i1 true, ptr %t28 + br label %endif544 +else543: + %t29 = load i8, ptr %a15 + %t30 = zext i8 %t29 to i64 + %t31 = and i64 %t30, 192 + %t32 = icmp ne i64 %t31, 128 + br i1 %t32, label %then551, label %endif553 +then551: + %t33 = load ptr, ptr %a1 + %t34 = icmp eq ptr %t33, null + br i1 %t34, label %panic554, label %ok555 +panic554: + call void @finch_panic(ptr @.str.311, i64 59, ptr @.str.312) + unreachable +ok555: + %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 4 + %t36 = load i64, ptr %t35 + %t37 = add i64 %t36, 1 + store i64 %t37, ptr %t35 + br label %endif553 +endif553: + br label %endif544 +endif544: + %t38 = load ptr, ptr %a1 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic556, label %ok557 +panic556: + call void @finch_panic(ptr @.str.313, i64 61, ptr @.str.314) + unreachable +ok557: + %t40 = getelementptr inbounds %S.lexer.Lexer, ptr %t38, i32 0, i32 2 + %t41 = load i64, ptr %t40 + %t42 = add i64 %t41, 1 + store i64 %t42, ptr %t40 + ret void +} + +define internal { ptr, i64, i64 } @finch.lexer.operator(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca i64, align 16 + %a57 = alloca i64, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.315, i64 2, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.316, i64 2, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.317, i64 2, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.318, i64 2, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.319, i64 2, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.320, i64 2, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.321, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.322, i64 2, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.323, i64 2, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.324, i64 2, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.325, i64 2, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.326, i64 2, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.327, i64 2, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.328, i64 2, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.329, i64 2, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.330, i64 2, i64 0 }, ptr %t19 + %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 + %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic558, label %ok559 +panic558: + call void @finch_panic(ptr @.str.331, i64 67, ptr @.str.332) + unreachable +ok559: + %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 2 + %t27 = load i64, ptr %t26 + %t28 = add i64 %t27, 1 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic560, label %ok561 +panic560: + call void @finch_panic(ptr @.str.333, i64 67, ptr @.str.334) + unreachable +ok561: + %t31 = getelementptr inbounds %S.lexer.Lexer, ptr %t29, i32 0, i32 0 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = icmp slt i64 %t28, %t33 + br i1 %t34, label %then562, label %endif564 +then562: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic565, label %ok566 +panic565: + call void @finch_panic(ptr @.str.335, i64 68, ptr @.str.336) + unreachable +ok566: + %t37 = getelementptr inbounds %S.lexer.Lexer, ptr %t35, i32 0, i32 0 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic567, label %ok568 +panic567: + call void @finch_panic(ptr @.str.338, i64 68, ptr @.str.339) + unreachable +ok568: + %t43 = getelementptr inbounds %S.lexer.Lexer, ptr %t41, i32 0, i32 2 + %t44 = load i64, ptr %t43 + %t45 = load ptr, ptr %a1 + %t46 = icmp eq ptr %t45, null + br i1 %t46, label %panic569, label %ok570 +panic569: + call void @finch_panic(ptr @.str.340, i64 68, ptr @.str.341) + unreachable +ok570: + %t47 = getelementptr inbounds %S.lexer.Lexer, ptr %t45, i32 0, i32 2 + %t48 = load i64, ptr %t47 + %t49 = add i64 %t48, 2 + call void @finch_str_sub(ptr %a40, ptr %a39, i64 %t44, i64 %t49, ptr @.str.337, i64 68) + %t50 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 + %t53 = load { ptr, i64, i64 }, ptr %a51 + store i64 -1, ptr %a54 + %t55 = load i64, ptr %t52 + %t56 = load ptr, ptr %a23 + store i64 0, ptr %a57 + br label %find.cond571 +find.cond571: + %t58 = load i64, ptr %a57 + %t59 = icmp slt i64 %t58, %t55 + br i1 %t59, label %find.body572, label %find.end575 +find.body572: + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i64 %t58 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + store { ptr, i64, i64 } %t53, ptr %a63 + %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) + %t65 = icmp ne i32 %t64, 0 + br i1 %t65, label %find.hit573, label %find.next574 +find.hit573: + store i64 %t58, ptr %a54 + br label %find.end575 +find.next574: + %t66 = add i64 %t58, 1 + store i64 %t66, ptr %a57 + br label %find.cond571 +find.end575: + %t67 = load i64, ptr %a54 + %t68 = icmp sge i64 %t67, 0 + br i1 %t68, label %then576, label %endif578 +then576: + %t69 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.drop.arr_str(ptr %a23) + ret { ptr, i64, i64 } %t69 +endif578: + call void @finch_str_drop(ptr %a51) + br label %endif564 +endif564: + store { ptr, i64, i64 } { ptr @.str.342, i64 22, i64 0 }, ptr %a70 + %t71 = load ptr, ptr %a1 + %t72 = icmp eq ptr %t71, null + br i1 %t72, label %panic579, label %ok580 +panic579: + call void @finch_panic(ptr @.str.343, i64 74, ptr @.str.344) + unreachable +ok580: + %t73 = getelementptr inbounds %S.lexer.Lexer, ptr %t71, i32 0, i32 0 + %t74 = load { ptr, i64, i64 }, ptr %t73 + store { ptr, i64, i64 } %t74, ptr %a75 + %t77 = load ptr, ptr %a1 + %t78 = icmp eq ptr %t77, null + br i1 %t78, label %panic581, label %ok582 +panic581: + call void @finch_panic(ptr @.str.346, i64 74, ptr @.str.347) + unreachable +ok582: + %t79 = getelementptr inbounds %S.lexer.Lexer, ptr %t77, i32 0, i32 2 + %t80 = load i64, ptr %t79 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic583, label %ok584 +panic583: + call void @finch_panic(ptr @.str.348, i64 74, ptr @.str.349) + unreachable +ok584: + %t83 = getelementptr inbounds %S.lexer.Lexer, ptr %t81, i32 0, i32 2 + %t84 = load i64, ptr %t83 + %t85 = add i64 %t84, 1 + call void @finch_str_sub(ptr %a76, ptr %a75, i64 %t80, i64 %t85, ptr @.str.345, i64 74) + %t86 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t86, ptr %a87 + %t88 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t88, ptr %a89 + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i64 @finch_str_find(ptr %a89, ptr %a92) + %t94 = icmp sge i64 %t93, 0 + br i1 %t94, label %then585, label %endif587 +then585: + %t95 = load { ptr, i64, i64 }, ptr %a87 + call void @finch_str_drop(ptr %a70) + call void @finch.drop.arr_str(ptr %a23) + ret { ptr, i64, i64 } %t95 +endif587: + call void @finch_str_drop(ptr %a87) + call void @finch_str_drop(ptr %a70) + call void @finch.drop.arr_str(ptr %a23) + ret { ptr, i64, i64 } { ptr @.str.351, i64 0, i64 0 } +} + +define internal i8 @finch.lexer.escape(ptr %p0, i8 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i8, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i8 %p1, ptr %a2 + %t3 = load i8, ptr %a2 + %t4 = icmp eq i8 %t3, 110 + br i1 %t4, label %then588, label %endif590 +then588: + ret i8 10 +endif590: + %t5 = load i8, ptr %a2 + %t6 = icmp eq i8 %t5, 116 + br i1 %t6, label %then591, label %endif593 +then591: + ret i8 9 +endif593: + %t7 = load i8, ptr %a2 + %t8 = icmp eq i8 %t7, 114 + br i1 %t8, label %then594, label %endif596 +then594: + ret i8 13 +endif596: + %t9 = load i8, ptr %a2 + %t10 = icmp eq i8 %t9, 48 + br i1 %t10, label %then597, label %endif599 +then597: + %t11 = trunc i64 0 to i8 + ret i8 %t11 +endif599: + %t12 = load i8, ptr %a2 + %t13 = icmp eq i8 %t12, 92 + br label %logic.from600 +logic.from600: + br i1 %t13, label %logic.end602, label %logic.rhs601 +logic.rhs601: + %t14 = load i8, ptr %a2 + %t15 = icmp eq i8 %t14, 34 + br label %logic.rend603 +logic.rend603: + br label %logic.end602 +logic.end602: + %t16 = phi i1 [ true, %logic.from600 ], [ %t15, %logic.rend603 ] + br label %logic.from604 +logic.from604: + br i1 %t16, label %logic.end606, label %logic.rhs605 +logic.rhs605: + %t17 = load i8, ptr %a2 + %t18 = icmp eq i8 %t17, 39 + br label %logic.rend607 +logic.rend607: + br label %logic.end606 +logic.end606: + %t19 = phi i1 [ true, %logic.from604 ], [ %t18, %logic.rend607 ] + br i1 %t19, label %then608, label %endif610 +then608: + %t20 = load i8, ptr %a2 + ret i8 %t20 +endif610: + %t21 = load ptr, ptr %a1 + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic611, label %ok612 +panic611: + call void @finch_panic(ptr @.str.352, i64 97, ptr @.str.353) + unreachable +ok612: + %t24 = getelementptr inbounds %S.lexer.Lexer, ptr %t22, i32 0, i32 3 + %t25 = load i64, ptr %t24 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic613, label %ok614 +panic613: + call void @finch_panic(ptr @.str.354, i64 97, ptr @.str.355) + unreachable +ok614: + %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 4 + %t29 = load i64, ptr %t28 + %t30 = sub i64 %t29, 1 + %t31 = load i8, ptr %a2 + call void @finch_str_from_char(ptr %a32, i8 signext %t31) + %t33 = load { ptr, i64, i64 }, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.356, i64 16, i64 0 }, ptr %a35 + store { ptr, i64, i64 } %t33, ptr %a36 + call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a34 + call void @finch.lexer.fail(ptr %t21, i64 %t25, i64 %t30, { ptr, i64, i64 } %t38) + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load i8, ptr %a2 + ret i8 %t40 +} + +define internal void @finch.copy.S_lexer_Token(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lexer.Token, ptr %src + store %S.lexer.Token %t1, ptr %dst + %t2 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.drop.S_lexer_Lexer(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lexer.Lexer, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lexer.Lexer, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca %S.lexer.Lexer, align 16 + %a18 = alloca ptr, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca i8, align 16 + %a98 = alloca i64, align 16 + %a103 = alloca i64, align 16 + %a169 = alloca %S.lexer.Token, align 16 + %a177 = alloca i64, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca i8, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca i8, align 16 + %a471 = alloca i8, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca i64, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca i64, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca %S.lexer.Token, align 16 + %a593 = alloca %S.lexer.Token, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + %t7 = insertvalue %S.lexer.Lexer zeroinitializer, { ptr, i64, i64 } %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch_str_copy(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + %t12 = insertvalue %S.lexer.Lexer %t7, { ptr, i64, i64 } %t11, 1 + %t13 = insertvalue %S.lexer.Lexer %t12, i64 0, 2 + %t14 = insertvalue %S.lexer.Lexer %t13, i64 1, 3 + %t15 = insertvalue %S.lexer.Lexer %t14, i64 1, 4 + %t16 = insertvalue %S.lexer.Lexer %t15, i1 true, 5 + store %S.lexer.Lexer %t16, ptr %a17 + store ptr %a17, ptr %a18 + store { ptr, i64, i64 } zeroinitializer, ptr %a19 + br label %while.cond615 +while.cond615: + %t20 = load ptr, ptr %a18 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic618, label %ok619 +panic618: + call void @finch_panic(ptr @.str.357, i64 105, ptr @.str.358) + unreachable +ok619: + %t22 = getelementptr inbounds %S.lexer.Lexer, ptr %t20, i32 0, i32 2 + %t23 = load i64, ptr %t22 + %t24 = load ptr, ptr %a18 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic620, label %ok621 +panic620: + call void @finch_panic(ptr @.str.359, i64 105, ptr @.str.360) + unreachable +ok621: + %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = icmp slt i64 %t23, %t28 + br i1 %t29, label %while.body616, label %while.end617 +while.body616: + %t30 = load ptr, ptr %a18 + %t31 = icmp eq ptr %t30, null + br i1 %t31, label %panic622, label %ok623 +panic622: + call void @finch_panic(ptr @.str.361, i64 106, ptr @.str.362) + unreachable +ok623: + %t32 = getelementptr inbounds %S.lexer.Lexer, ptr %t30, i32 0, i32 0 + %t33 = load ptr, ptr %a18 + %t34 = icmp eq ptr %t33, null + br i1 %t34, label %panic624, label %ok625 +panic624: + call void @finch_panic(ptr @.str.363, i64 106, ptr @.str.364) + unreachable +ok625: + %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 2 + %t36 = load i64, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %t32 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range626, label %inrange627 +range626: + call void @finch_panic_index(ptr @.str.365, i64 106, i64 %t36, i64 %t38) + unreachable +inrange627: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds i8, ptr %t40, i64 %t36 + %t42 = load i8, ptr %t41 + store i8 %t42, ptr %a43 + %t44 = load i8, ptr %a43 + %t45 = icmp eq i8 %t44, 32 + br label %logic.from628 +logic.from628: + br i1 %t45, label %logic.end630, label %logic.rhs629 +logic.rhs629: + %t46 = load i8, ptr %a43 + %t47 = icmp eq i8 %t46, 9 + br label %logic.rend631 +logic.rend631: + br label %logic.end630 +logic.end630: + %t48 = phi i1 [ true, %logic.from628 ], [ %t47, %logic.rend631 ] + br label %logic.from632 +logic.from632: + br i1 %t48, label %logic.end634, label %logic.rhs633 +logic.rhs633: + %t49 = load i8, ptr %a43 + %t50 = icmp eq i8 %t49, 10 + br label %logic.rend635 +logic.rend635: + br label %logic.end634 +logic.end634: + %t51 = phi i1 [ true, %logic.from632 ], [ %t50, %logic.rend635 ] + br label %logic.from636 +logic.from636: + br i1 %t51, label %logic.end638, label %logic.rhs637 +logic.rhs637: + %t52 = load i8, ptr %a43 + %t53 = icmp eq i8 %t52, 13 + br label %logic.rend639 +logic.rend639: + br label %logic.end638 +logic.end638: + %t54 = phi i1 [ true, %logic.from636 ], [ %t53, %logic.rend639 ] + br i1 %t54, label %then640, label %endif642 +then640: + %t55 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t55) + br label %while.cond615 +endif642: + %t56 = load i8, ptr %a43 + %t57 = icmp eq i8 %t56, 47 + br label %logic.from643 +logic.from643: + br i1 %t57, label %logic.rhs644, label %logic.end645 +logic.rhs644: + %t58 = load ptr, ptr %a18 + %t59 = call i8 @finch.lexer.peek(ptr %t58, i64 1) + %t60 = icmp eq i8 %t59, 47 + br label %logic.rend646 +logic.rend646: + br label %logic.end645 +logic.end645: + %t61 = phi i1 [ false, %logic.from643 ], [ %t60, %logic.rend646 ] + br i1 %t61, label %then647, label %endif649 +then647: + br label %while.cond650 +while.cond650: + %t62 = load ptr, ptr %a18 + %t63 = icmp eq ptr %t62, null + br i1 %t63, label %panic653, label %ok654 +panic653: + call void @finch_panic(ptr @.str.366, i64 112, ptr @.str.367) + unreachable +ok654: + %t64 = getelementptr inbounds %S.lexer.Lexer, ptr %t62, i32 0, i32 2 + %t65 = load i64, ptr %t64 + %t66 = load ptr, ptr %a18 + %t67 = icmp eq ptr %t66, null + br i1 %t67, label %panic655, label %ok656 +panic655: + call void @finch_panic(ptr @.str.368, i64 112, ptr @.str.369) + unreachable +ok656: + %t68 = getelementptr inbounds %S.lexer.Lexer, ptr %t66, i32 0, i32 0 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = icmp slt i64 %t65, %t70 + br label %logic.from657 +logic.from657: + br i1 %t71, label %logic.rhs658, label %logic.end659 +logic.rhs658: + %t72 = load ptr, ptr %a18 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic660, label %ok661 +panic660: + call void @finch_panic(ptr @.str.370, i64 112, ptr @.str.371) + unreachable +ok661: + %t74 = getelementptr inbounds %S.lexer.Lexer, ptr %t72, i32 0, i32 0 + %t75 = load ptr, ptr %a18 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic662, label %ok663 +panic662: + call void @finch_panic(ptr @.str.372, i64 112, ptr @.str.373) + unreachable +ok663: + %t77 = getelementptr inbounds %S.lexer.Lexer, ptr %t75, i32 0, i32 2 + %t78 = load i64, ptr %t77 + %t79 = load { ptr, i64, i64 }, ptr %t74 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range664, label %inrange665 +range664: + call void @finch_panic_index(ptr @.str.374, i64 112, i64 %t78, i64 %t80) + unreachable +inrange665: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds i8, ptr %t82, i64 %t78 + %t84 = load i8, ptr %t83 + %t85 = icmp ne i8 %t84, 10 + br label %logic.rend666 +logic.rend666: + br label %logic.end659 +logic.end659: + %t86 = phi i1 [ false, %logic.from657 ], [ %t85, %logic.rend666 ] + br i1 %t86, label %while.body651, label %while.end652 +while.body651: + %t87 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t87) + br label %while.cond650 +while.end652: + br label %while.cond615 +endif649: + %t88 = load i8, ptr %a43 + %t89 = icmp eq i8 %t88, 47 + br label %logic.from667 +logic.from667: + br i1 %t89, label %logic.rhs668, label %logic.end669 +logic.rhs668: + %t90 = load ptr, ptr %a18 + %t91 = call i8 @finch.lexer.peek(ptr %t90, i64 1) + %t92 = icmp eq i8 %t91, 42 + br label %logic.rend670 +logic.rend670: + br label %logic.end669 +logic.end669: + %t93 = phi i1 [ false, %logic.from667 ], [ %t92, %logic.rend670 ] + br i1 %t93, label %then671, label %endif673 +then671: + %t94 = load ptr, ptr %a18 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic674, label %ok675 +panic674: + call void @finch_panic(ptr @.str.375, i64 118, ptr @.str.376) + unreachable +ok675: + %t96 = getelementptr inbounds %S.lexer.Lexer, ptr %t94, i32 0, i32 3 + %t97 = load i64, ptr %t96 + store i64 %t97, ptr %a98 + %t99 = load ptr, ptr %a18 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic676, label %ok677 +panic676: + call void @finch_panic(ptr @.str.377, i64 119, ptr @.str.378) + unreachable +ok677: + %t101 = getelementptr inbounds %S.lexer.Lexer, ptr %t99, i32 0, i32 4 + %t102 = load i64, ptr %t101 + store i64 %t102, ptr %a103 + %t104 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t104) + %t105 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t105) + br label %while.cond678 +while.cond678: + %t106 = load ptr, ptr %a18 + %t107 = icmp eq ptr %t106, null + br i1 %t107, label %panic681, label %ok682 +panic681: + call void @finch_panic(ptr @.str.379, i64 122, ptr @.str.380) + unreachable +ok682: + %t108 = getelementptr inbounds %S.lexer.Lexer, ptr %t106, i32 0, i32 2 + %t109 = load i64, ptr %t108 + %t110 = load ptr, ptr %a18 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic683, label %ok684 +panic683: + call void @finch_panic(ptr @.str.381, i64 122, ptr @.str.382) + unreachable +ok684: + %t112 = getelementptr inbounds %S.lexer.Lexer, ptr %t110, i32 0, i32 0 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = icmp slt i64 %t109, %t114 + br label %logic.from685 +logic.from685: + br i1 %t115, label %logic.rhs686, label %logic.end687 +logic.rhs686: + %t116 = load ptr, ptr %a18 + %t117 = icmp eq ptr %t116, null + br i1 %t117, label %panic688, label %ok689 +panic688: + call void @finch_panic(ptr @.str.383, i64 122, ptr @.str.384) + unreachable +ok689: + %t118 = getelementptr inbounds %S.lexer.Lexer, ptr %t116, i32 0, i32 0 + %t119 = load ptr, ptr %a18 + %t120 = icmp eq ptr %t119, null + br i1 %t120, label %panic690, label %ok691 +panic690: + call void @finch_panic(ptr @.str.385, i64 122, ptr @.str.386) + unreachable +ok691: + %t121 = getelementptr inbounds %S.lexer.Lexer, ptr %t119, i32 0, i32 2 + %t122 = load i64, ptr %t121 + %t123 = load { ptr, i64, i64 }, ptr %t118 + %t124 = extractvalue { ptr, i64, i64 } %t123, 1 + %t125 = icmp uge i64 %t122, %t124 + br i1 %t125, label %range692, label %inrange693 +range692: + call void @finch_panic_index(ptr @.str.387, i64 122, i64 %t122, i64 %t124) + unreachable +inrange693: + %t126 = extractvalue { ptr, i64, i64 } %t123, 0 + %t127 = getelementptr inbounds i8, ptr %t126, i64 %t122 + %t128 = load i8, ptr %t127 + %t129 = icmp eq i8 %t128, 42 + br label %logic.from694 +logic.from694: + br i1 %t129, label %logic.rhs695, label %logic.end696 +logic.rhs695: + %t130 = load ptr, ptr %a18 + %t131 = call i8 @finch.lexer.peek(ptr %t130, i64 1) + %t132 = icmp eq i8 %t131, 47 + br label %logic.rend697 +logic.rend697: + br label %logic.end696 +logic.end696: + %t133 = phi i1 [ false, %logic.from694 ], [ %t132, %logic.rend697 ] + %t134 = xor i1 %t133, true + br label %logic.rend698 +logic.rend698: + br label %logic.end687 +logic.end687: + %t135 = phi i1 [ false, %logic.from685 ], [ %t134, %logic.rend698 ] + br i1 %t135, label %while.body679, label %while.end680 +while.body679: + %t136 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t136) + br label %while.cond678 +while.end680: + %t137 = load ptr, ptr %a18 + %t138 = icmp eq ptr %t137, null + br i1 %t138, label %panic699, label %ok700 +panic699: + call void @finch_panic(ptr @.str.388, i64 125, ptr @.str.389) + unreachable +ok700: + %t139 = getelementptr inbounds %S.lexer.Lexer, ptr %t137, i32 0, i32 2 + %t140 = load i64, ptr %t139 + %t141 = load ptr, ptr %a18 + %t142 = icmp eq ptr %t141, null + br i1 %t142, label %panic701, label %ok702 +panic701: + call void @finch_panic(ptr @.str.390, i64 125, ptr @.str.391) + unreachable +ok702: + %t143 = getelementptr inbounds %S.lexer.Lexer, ptr %t141, i32 0, i32 0 + %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 + %t145 = load i64, ptr %t144 + %t146 = icmp sge i64 %t140, %t145 + br i1 %t146, label %then703, label %endif705 +then703: + %t147 = load ptr, ptr %a18 + %t148 = load i64, ptr %a98 + %t149 = load i64, ptr %a103 + call void @finch.lexer.fail(ptr %t147, i64 %t148, i64 %t149, { ptr, i64, i64 } { ptr @.str.392, i64 36, i64 0 }) + br label %endif705 +endif705: + %t150 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t150) + %t151 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t151) + br label %while.cond615 +endif673: + %t152 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.393, i64 0, i64 0 }, 0 + %t153 = insertvalue %S.lexer.Token %t152, { ptr, i64, i64 } { ptr @.str.394, i64 0, i64 0 }, 1 + %t154 = load ptr, ptr %a18 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic706, label %ok707 +panic706: + call void @finch_panic(ptr @.str.395, i64 133, ptr @.str.396) + unreachable +ok707: + %t156 = getelementptr inbounds %S.lexer.Lexer, ptr %t154, i32 0, i32 3 + %t157 = load i64, ptr %t156 + %t158 = insertvalue %S.lexer.Token %t153, i64 %t157, 2 + %t159 = load ptr, ptr %a18 + %t160 = icmp eq ptr %t159, null + br i1 %t160, label %panic708, label %ok709 +panic708: + call void @finch_panic(ptr @.str.397, i64 133, ptr @.str.398) + unreachable +ok709: + %t161 = getelementptr inbounds %S.lexer.Lexer, ptr %t159, i32 0, i32 4 + %t162 = load i64, ptr %t161 + %t163 = insertvalue %S.lexer.Token %t158, i64 %t162, 3 + %t164 = load ptr, ptr %a18 + %t165 = icmp eq ptr %t164, null + br i1 %t165, label %panic710, label %ok711 +panic710: + call void @finch_panic(ptr @.str.399, i64 133, ptr @.str.400) + unreachable +ok711: + %t166 = getelementptr inbounds %S.lexer.Lexer, ptr %t164, i32 0, i32 5 + %t167 = load i1, ptr %t166 + %t168 = insertvalue %S.lexer.Token %t163, i1 %t167, 4 + store %S.lexer.Token %t168, ptr %a169 + %t170 = load ptr, ptr %a18 + %t171 = icmp eq ptr %t170, null + br i1 %t171, label %panic712, label %ok713 +panic712: + call void @finch_panic(ptr @.str.401, i64 134, ptr @.str.402) + unreachable +ok713: + %t172 = getelementptr inbounds %S.lexer.Lexer, ptr %t170, i32 0, i32 5 + store i1 false, ptr %t172 + %t173 = load ptr, ptr %a18 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic714, label %ok715 +panic714: + call void @finch_panic(ptr @.str.403, i64 135, ptr @.str.404) + unreachable +ok715: + %t175 = getelementptr inbounds %S.lexer.Lexer, ptr %t173, i32 0, i32 2 + %t176 = load i64, ptr %t175 + store i64 %t176, ptr %a177 + %t178 = load i8, ptr %a43 + %t179 = call i1 @finch.lexer.isAlpha(i8 %t178) + br i1 %t179, label %then716, label %else717 +then716: + br label %while.cond719 +while.cond719: + %t180 = load ptr, ptr %a18 + %t181 = icmp eq ptr %t180, null + br i1 %t181, label %panic722, label %ok723 +panic722: + call void @finch_panic(ptr @.str.405, i64 137, ptr @.str.406) + unreachable +ok723: + %t182 = getelementptr inbounds %S.lexer.Lexer, ptr %t180, i32 0, i32 2 + %t183 = load i64, ptr %t182 + %t184 = load ptr, ptr %a18 + %t185 = icmp eq ptr %t184, null + br i1 %t185, label %panic724, label %ok725 +panic724: + call void @finch_panic(ptr @.str.407, i64 137, ptr @.str.408) + unreachable +ok725: + %t186 = getelementptr inbounds %S.lexer.Lexer, ptr %t184, i32 0, i32 0 + %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1 + %t188 = load i64, ptr %t187 + %t189 = icmp slt i64 %t183, %t188 + br label %logic.from726 +logic.from726: + br i1 %t189, label %logic.rhs727, label %logic.end728 +logic.rhs727: + %t190 = load ptr, ptr %a18 + %t191 = icmp eq ptr %t190, null + br i1 %t191, label %panic729, label %ok730 +panic729: + call void @finch_panic(ptr @.str.409, i64 137, ptr @.str.410) + unreachable +ok730: + %t192 = getelementptr inbounds %S.lexer.Lexer, ptr %t190, i32 0, i32 0 + %t193 = load ptr, ptr %a18 + %t194 = icmp eq ptr %t193, null + br i1 %t194, label %panic731, label %ok732 +panic731: + call void @finch_panic(ptr @.str.411, i64 137, ptr @.str.412) + unreachable +ok732: + %t195 = getelementptr inbounds %S.lexer.Lexer, ptr %t193, i32 0, i32 2 + %t196 = load i64, ptr %t195 + %t197 = load { ptr, i64, i64 }, ptr %t192 + %t198 = extractvalue { ptr, i64, i64 } %t197, 1 + %t199 = icmp uge i64 %t196, %t198 + br i1 %t199, label %range733, label %inrange734 +range733: + call void @finch_panic_index(ptr @.str.413, i64 137, i64 %t196, i64 %t198) + unreachable +inrange734: + %t200 = extractvalue { ptr, i64, i64 } %t197, 0 + %t201 = getelementptr inbounds i8, ptr %t200, i64 %t196 + %t202 = load i8, ptr %t201 + %t203 = call i1 @finch.lexer.isAlpha(i8 %t202) + br label %logic.from735 +logic.from735: + br i1 %t203, label %logic.end737, label %logic.rhs736 +logic.rhs736: + %t204 = load ptr, ptr %a18 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic738, label %ok739 +panic738: + call void @finch_panic(ptr @.str.414, i64 137, ptr @.str.415) + unreachable +ok739: + %t206 = getelementptr inbounds %S.lexer.Lexer, ptr %t204, i32 0, i32 0 + %t207 = load ptr, ptr %a18 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic740, label %ok741 +panic740: + call void @finch_panic(ptr @.str.416, i64 137, ptr @.str.417) + unreachable +ok741: + %t209 = getelementptr inbounds %S.lexer.Lexer, ptr %t207, i32 0, i32 2 + %t210 = load i64, ptr %t209 + %t211 = load { ptr, i64, i64 }, ptr %t206 + %t212 = extractvalue { ptr, i64, i64 } %t211, 1 + %t213 = icmp uge i64 %t210, %t212 + br i1 %t213, label %range742, label %inrange743 +range742: + call void @finch_panic_index(ptr @.str.418, i64 137, i64 %t210, i64 %t212) + unreachable +inrange743: + %t214 = extractvalue { ptr, i64, i64 } %t211, 0 + %t215 = getelementptr inbounds i8, ptr %t214, i64 %t210 + %t216 = load i8, ptr %t215 + %t217 = call i1 @finch.lexer.isDigit(i8 %t216) + br label %logic.rend744 +logic.rend744: + br label %logic.end737 +logic.end737: + %t218 = phi i1 [ true, %logic.from735 ], [ %t217, %logic.rend744 ] + br label %logic.rend745 +logic.rend745: + br label %logic.end728 +logic.end728: + %t219 = phi i1 [ false, %logic.from726 ], [ %t218, %logic.rend745 ] + br i1 %t219, label %while.body720, label %while.end721 +while.body720: + %t220 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t220) + br label %while.cond719 +while.end721: + %t221 = load ptr, ptr %a18 + %t222 = icmp eq ptr %t221, null + br i1 %t222, label %panic746, label %ok747 +panic746: + call void @finch_panic(ptr @.str.419, i64 140, ptr @.str.420) + unreachable +ok747: + %t223 = getelementptr inbounds %S.lexer.Lexer, ptr %t221, i32 0, i32 0 + %t224 = load { ptr, i64, i64 }, ptr %t223 + store { ptr, i64, i64 } %t224, ptr %a225 + %t227 = load i64, ptr %a177 + %t228 = load ptr, ptr %a18 + %t229 = icmp eq ptr %t228, null + br i1 %t229, label %panic748, label %ok749 +panic748: + call void @finch_panic(ptr @.str.422, i64 140, ptr @.str.423) + unreachable +ok749: + %t230 = getelementptr inbounds %S.lexer.Lexer, ptr %t228, i32 0, i32 2 + %t231 = load i64, ptr %t230 + call void @finch_str_sub(ptr %a226, ptr %a225, i64 %t227, i64 %t231, ptr @.str.421, i64 140) + %t232 = load { ptr, i64, i64 }, ptr %a226 + %t233 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t234 = load { ptr, i64, i64 }, ptr %t233 + store { ptr, i64, i64 } %t232, ptr %t233 + store { ptr, i64, i64 } %t234, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t237 = load { ptr, i64, i64 }, ptr %t236 + store { ptr, i64, i64 } { ptr @.str.424, i64 5, i64 0 }, ptr %t236 + store { ptr, i64, i64 } %t237, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = call i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %t240) + br i1 %t241, label %then750, label %endif752 +then750: + %t242 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t243 = load { ptr, i64, i64 }, ptr %t242 + %t244 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + store { ptr, i64, i64 } %t243, ptr %a245 + call void @finch_str_copy(ptr %a246, ptr %a245) + %t247 = load { ptr, i64, i64 }, ptr %a246 + %t248 = load { ptr, i64, i64 }, ptr %t244 + store { ptr, i64, i64 } %t247, ptr %t244 + store { ptr, i64, i64 } %t248, ptr %a249 + call void @finch_str_drop(ptr %a249) + br label %endif752 +endif752: + br label %endif718 +else717: + %t250 = load i8, ptr %a43 + %t251 = call i1 @finch.lexer.isDigit(i8 %t250) + br i1 %t251, label %then753, label %else754 +then753: + %t252 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } { ptr @.str.425, i64 3, i64 0 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_drop(ptr %a254) + %t255 = load i8, ptr %a43 + %t256 = icmp eq i8 %t255, 48 + br label %logic.from756 +logic.from756: + br i1 %t256, label %logic.rhs757, label %logic.end758 +logic.rhs757: + %t257 = load ptr, ptr %a18 + %t258 = call i8 @finch.lexer.peek(ptr %t257, i64 1) + %t259 = icmp eq i8 %t258, 120 + br label %logic.from759 +logic.from759: + br i1 %t259, label %logic.end761, label %logic.rhs760 +logic.rhs760: + %t260 = load ptr, ptr %a18 + %t261 = call i8 @finch.lexer.peek(ptr %t260, i64 1) + %t262 = icmp eq i8 %t261, 88 + br label %logic.rend762 +logic.rend762: + br label %logic.end761 +logic.end761: + %t263 = phi i1 [ true, %logic.from759 ], [ %t262, %logic.rend762 ] + br label %logic.rend763 +logic.rend763: + br label %logic.end758 +logic.end758: + %t264 = phi i1 [ false, %logic.from756 ], [ %t263, %logic.rend763 ] + br i1 %t264, label %then764, label %else765 +then764: + %t265 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t265) + %t266 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t266) + br label %while.cond767 +while.cond767: + %t267 = load ptr, ptr %a18 + %t268 = icmp eq ptr %t267, null + br i1 %t268, label %panic770, label %ok771 +panic770: + call void @finch_panic(ptr @.str.426, i64 150, ptr @.str.427) + unreachable +ok771: + %t269 = getelementptr inbounds %S.lexer.Lexer, ptr %t267, i32 0, i32 2 + %t270 = load i64, ptr %t269 + %t271 = load ptr, ptr %a18 + %t272 = icmp eq ptr %t271, null + br i1 %t272, label %panic772, label %ok773 +panic772: + call void @finch_panic(ptr @.str.428, i64 150, ptr @.str.429) + unreachable +ok773: + %t273 = getelementptr inbounds %S.lexer.Lexer, ptr %t271, i32 0, i32 0 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 + %t275 = load i64, ptr %t274 + %t276 = icmp slt i64 %t270, %t275 + br label %logic.from774 +logic.from774: + br i1 %t276, label %logic.rhs775, label %logic.end776 +logic.rhs775: + %t277 = load ptr, ptr %a18 + %t278 = icmp eq ptr %t277, null + br i1 %t278, label %panic777, label %ok778 +panic777: + call void @finch_panic(ptr @.str.430, i64 150, ptr @.str.431) + unreachable +ok778: + %t279 = getelementptr inbounds %S.lexer.Lexer, ptr %t277, i32 0, i32 0 + %t280 = load ptr, ptr %a18 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic779, label %ok780 +panic779: + call void @finch_panic(ptr @.str.432, i64 150, ptr @.str.433) + unreachable +ok780: + %t282 = getelementptr inbounds %S.lexer.Lexer, ptr %t280, i32 0, i32 2 + %t283 = load i64, ptr %t282 + %t284 = load { ptr, i64, i64 }, ptr %t279 + %t285 = extractvalue { ptr, i64, i64 } %t284, 1 + %t286 = icmp uge i64 %t283, %t285 + br i1 %t286, label %range781, label %inrange782 +range781: + call void @finch_panic_index(ptr @.str.434, i64 150, i64 %t283, i64 %t285) + unreachable +inrange782: + %t287 = extractvalue { ptr, i64, i64 } %t284, 0 + %t288 = getelementptr inbounds i8, ptr %t287, i64 %t283 + %t289 = load i8, ptr %t288 + %t290 = call i1 @finch.lexer.isHex(i8 %t289) + br label %logic.from783 +logic.from783: + br i1 %t290, label %logic.end785, label %logic.rhs784 +logic.rhs784: + %t291 = load ptr, ptr %a18 + %t292 = icmp eq ptr %t291, null + br i1 %t292, label %panic786, label %ok787 +panic786: + call void @finch_panic(ptr @.str.435, i64 150, ptr @.str.436) + unreachable +ok787: + %t293 = getelementptr inbounds %S.lexer.Lexer, ptr %t291, i32 0, i32 0 + %t294 = load ptr, ptr %a18 + %t295 = icmp eq ptr %t294, null + br i1 %t295, label %panic788, label %ok789 +panic788: + call void @finch_panic(ptr @.str.437, i64 150, ptr @.str.438) + unreachable +ok789: + %t296 = getelementptr inbounds %S.lexer.Lexer, ptr %t294, i32 0, i32 2 + %t297 = load i64, ptr %t296 + %t298 = load { ptr, i64, i64 }, ptr %t293 + %t299 = extractvalue { ptr, i64, i64 } %t298, 1 + %t300 = icmp uge i64 %t297, %t299 + br i1 %t300, label %range790, label %inrange791 +range790: + call void @finch_panic_index(ptr @.str.439, i64 150, i64 %t297, i64 %t299) + unreachable +inrange791: + %t301 = extractvalue { ptr, i64, i64 } %t298, 0 + %t302 = getelementptr inbounds i8, ptr %t301, i64 %t297 + %t303 = load i8, ptr %t302 + %t304 = icmp eq i8 %t303, 95 + br label %logic.rend792 +logic.rend792: + br label %logic.end785 +logic.end785: + %t305 = phi i1 [ true, %logic.from783 ], [ %t304, %logic.rend792 ] + br label %logic.rend793 +logic.rend793: + br label %logic.end776 +logic.end776: + %t306 = phi i1 [ false, %logic.from774 ], [ %t305, %logic.rend793 ] + br i1 %t306, label %while.body768, label %while.end769 +while.body768: + %t307 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t307) + br label %while.cond767 +while.end769: + br label %endif766 +else765: + br label %while.cond794 +while.cond794: + %t308 = load ptr, ptr %a18 + %t309 = icmp eq ptr %t308, null + br i1 %t309, label %panic797, label %ok798 +panic797: + call void @finch_panic(ptr @.str.440, i64 154, ptr @.str.441) + unreachable +ok798: + %t310 = getelementptr inbounds %S.lexer.Lexer, ptr %t308, i32 0, i32 2 + %t311 = load i64, ptr %t310 + %t312 = load ptr, ptr %a18 + %t313 = icmp eq ptr %t312, null + br i1 %t313, label %panic799, label %ok800 +panic799: + call void @finch_panic(ptr @.str.442, i64 154, ptr @.str.443) + unreachable +ok800: + %t314 = getelementptr inbounds %S.lexer.Lexer, ptr %t312, i32 0, i32 0 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 + %t316 = load i64, ptr %t315 + %t317 = icmp slt i64 %t311, %t316 + br label %logic.from801 +logic.from801: + br i1 %t317, label %logic.rhs802, label %logic.end803 +logic.rhs802: + %t318 = load ptr, ptr %a18 + %t319 = icmp eq ptr %t318, null + br i1 %t319, label %panic804, label %ok805 +panic804: + call void @finch_panic(ptr @.str.444, i64 154, ptr @.str.445) + unreachable +ok805: + %t320 = getelementptr inbounds %S.lexer.Lexer, ptr %t318, i32 0, i32 0 + %t321 = load ptr, ptr %a18 + %t322 = icmp eq ptr %t321, null + br i1 %t322, label %panic806, label %ok807 +panic806: + call void @finch_panic(ptr @.str.446, i64 154, ptr @.str.447) + unreachable +ok807: + %t323 = getelementptr inbounds %S.lexer.Lexer, ptr %t321, i32 0, i32 2 + %t324 = load i64, ptr %t323 + %t325 = load { ptr, i64, i64 }, ptr %t320 + %t326 = extractvalue { ptr, i64, i64 } %t325, 1 + %t327 = icmp uge i64 %t324, %t326 + br i1 %t327, label %range808, label %inrange809 +range808: + call void @finch_panic_index(ptr @.str.448, i64 154, i64 %t324, i64 %t326) + unreachable +inrange809: + %t328 = extractvalue { ptr, i64, i64 } %t325, 0 + %t329 = getelementptr inbounds i8, ptr %t328, i64 %t324 + %t330 = load i8, ptr %t329 + %t331 = call i1 @finch.lexer.isDigit(i8 %t330) + br label %logic.from810 +logic.from810: + br i1 %t331, label %logic.end812, label %logic.rhs811 +logic.rhs811: + %t332 = load ptr, ptr %a18 + %t333 = icmp eq ptr %t332, null + br i1 %t333, label %panic813, label %ok814 +panic813: + call void @finch_panic(ptr @.str.449, i64 154, ptr @.str.450) + unreachable +ok814: + %t334 = getelementptr inbounds %S.lexer.Lexer, ptr %t332, i32 0, i32 0 + %t335 = load ptr, ptr %a18 + %t336 = icmp eq ptr %t335, null + br i1 %t336, label %panic815, label %ok816 +panic815: + call void @finch_panic(ptr @.str.451, i64 154, ptr @.str.452) + unreachable +ok816: + %t337 = getelementptr inbounds %S.lexer.Lexer, ptr %t335, i32 0, i32 2 + %t338 = load i64, ptr %t337 + %t339 = load { ptr, i64, i64 }, ptr %t334 + %t340 = extractvalue { ptr, i64, i64 } %t339, 1 + %t341 = icmp uge i64 %t338, %t340 + br i1 %t341, label %range817, label %inrange818 +range817: + call void @finch_panic_index(ptr @.str.453, i64 154, i64 %t338, i64 %t340) + unreachable +inrange818: + %t342 = extractvalue { ptr, i64, i64 } %t339, 0 + %t343 = getelementptr inbounds i8, ptr %t342, i64 %t338 + %t344 = load i8, ptr %t343 + %t345 = icmp eq i8 %t344, 95 + br label %logic.rend819 +logic.rend819: + br label %logic.end812 +logic.end812: + %t346 = phi i1 [ true, %logic.from810 ], [ %t345, %logic.rend819 ] + br label %logic.rend820 +logic.rend820: + br label %logic.end803 +logic.end803: + %t347 = phi i1 [ false, %logic.from801 ], [ %t346, %logic.rend820 ] + br i1 %t347, label %while.body795, label %while.end796 +while.body795: + %t348 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t348) + br label %while.cond794 +while.end796: + %t349 = load ptr, ptr %a18 + %t350 = call i8 @finch.lexer.peek(ptr %t349, i64 0) + %t351 = icmp eq i8 %t350, 46 + br label %logic.from821 +logic.from821: + br i1 %t351, label %logic.rhs822, label %logic.end823 +logic.rhs822: + %t352 = load ptr, ptr %a18 + %t353 = call i8 @finch.lexer.peek(ptr %t352, i64 1) + %t354 = call i1 @finch.lexer.isDigit(i8 %t353) + br label %logic.rend824 +logic.rend824: + br label %logic.end823 +logic.end823: + %t355 = phi i1 [ false, %logic.from821 ], [ %t354, %logic.rend824 ] + br i1 %t355, label %then825, label %endif827 +then825: + %t356 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t357 = load { ptr, i64, i64 }, ptr %t356 + store { ptr, i64, i64 } { ptr @.str.454, i64 5, i64 0 }, ptr %t356 + store { ptr, i64, i64 } %t357, ptr %a358 + call void @finch_str_drop(ptr %a358) + %t359 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t359) + br label %while.cond828 +while.cond828: + %t360 = load ptr, ptr %a18 + %t361 = icmp eq ptr %t360, null + br i1 %t361, label %panic831, label %ok832 +panic831: + call void @finch_panic(ptr @.str.455, i64 160, ptr @.str.456) + unreachable +ok832: + %t362 = getelementptr inbounds %S.lexer.Lexer, ptr %t360, i32 0, i32 2 + %t363 = load i64, ptr %t362 + %t364 = load ptr, ptr %a18 + %t365 = icmp eq ptr %t364, null + br i1 %t365, label %panic833, label %ok834 +panic833: + call void @finch_panic(ptr @.str.457, i64 160, ptr @.str.458) + unreachable +ok834: + %t366 = getelementptr inbounds %S.lexer.Lexer, ptr %t364, i32 0, i32 0 + %t367 = getelementptr inbounds { ptr, i64, i64 }, ptr %t366, i32 0, i32 1 + %t368 = load i64, ptr %t367 + %t369 = icmp slt i64 %t363, %t368 + br label %logic.from835 +logic.from835: + br i1 %t369, label %logic.rhs836, label %logic.end837 +logic.rhs836: + %t370 = load ptr, ptr %a18 + %t371 = icmp eq ptr %t370, null + br i1 %t371, label %panic838, label %ok839 +panic838: + call void @finch_panic(ptr @.str.459, i64 160, ptr @.str.460) + unreachable +ok839: + %t372 = getelementptr inbounds %S.lexer.Lexer, ptr %t370, i32 0, i32 0 + %t373 = load ptr, ptr %a18 + %t374 = icmp eq ptr %t373, null + br i1 %t374, label %panic840, label %ok841 +panic840: + call void @finch_panic(ptr @.str.461, i64 160, ptr @.str.462) + unreachable +ok841: + %t375 = getelementptr inbounds %S.lexer.Lexer, ptr %t373, i32 0, i32 2 + %t376 = load i64, ptr %t375 + %t377 = load { ptr, i64, i64 }, ptr %t372 + %t378 = extractvalue { ptr, i64, i64 } %t377, 1 + %t379 = icmp uge i64 %t376, %t378 + br i1 %t379, label %range842, label %inrange843 +range842: + call void @finch_panic_index(ptr @.str.463, i64 160, i64 %t376, i64 %t378) + unreachable +inrange843: + %t380 = extractvalue { ptr, i64, i64 } %t377, 0 + %t381 = getelementptr inbounds i8, ptr %t380, i64 %t376 + %t382 = load i8, ptr %t381 + %t383 = call i1 @finch.lexer.isDigit(i8 %t382) + br label %logic.from844 +logic.from844: + br i1 %t383, label %logic.end846, label %logic.rhs845 +logic.rhs845: + %t384 = load ptr, ptr %a18 + %t385 = icmp eq ptr %t384, null + br i1 %t385, label %panic847, label %ok848 +panic847: + call void @finch_panic(ptr @.str.464, i64 160, ptr @.str.465) + unreachable +ok848: + %t386 = getelementptr inbounds %S.lexer.Lexer, ptr %t384, i32 0, i32 0 + %t387 = load ptr, ptr %a18 + %t388 = icmp eq ptr %t387, null + br i1 %t388, label %panic849, label %ok850 +panic849: + call void @finch_panic(ptr @.str.466, i64 160, ptr @.str.467) + unreachable +ok850: + %t389 = getelementptr inbounds %S.lexer.Lexer, ptr %t387, i32 0, i32 2 + %t390 = load i64, ptr %t389 + %t391 = load { ptr, i64, i64 }, ptr %t386 + %t392 = extractvalue { ptr, i64, i64 } %t391, 1 + %t393 = icmp uge i64 %t390, %t392 + br i1 %t393, label %range851, label %inrange852 +range851: + call void @finch_panic_index(ptr @.str.468, i64 160, i64 %t390, i64 %t392) + unreachable +inrange852: + %t394 = extractvalue { ptr, i64, i64 } %t391, 0 + %t395 = getelementptr inbounds i8, ptr %t394, i64 %t390 + %t396 = load i8, ptr %t395 + %t397 = icmp eq i8 %t396, 95 + br label %logic.rend853 +logic.rend853: + br label %logic.end846 +logic.end846: + %t398 = phi i1 [ true, %logic.from844 ], [ %t397, %logic.rend853 ] + br label %logic.rend854 +logic.rend854: + br label %logic.end837 +logic.end837: + %t399 = phi i1 [ false, %logic.from835 ], [ %t398, %logic.rend854 ] + br i1 %t399, label %while.body829, label %while.end830 +while.body829: + %t400 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t400) + br label %while.cond828 +while.end830: + br label %endif827 +endif827: + br label %endif766 +endif766: + %t401 = load ptr, ptr %a18 + %t402 = icmp eq ptr %t401, null + br i1 %t402, label %panic855, label %ok856 +panic855: + call void @finch_panic(ptr @.str.469, i64 165, ptr @.str.470) + unreachable +ok856: + %t403 = getelementptr inbounds %S.lexer.Lexer, ptr %t401, i32 0, i32 0 + %t404 = load { ptr, i64, i64 }, ptr %t403 + store { ptr, i64, i64 } %t404, ptr %a405 + %t407 = load i64, ptr %a177 + %t408 = load ptr, ptr %a18 + %t409 = icmp eq ptr %t408, null + br i1 %t409, label %panic857, label %ok858 +panic857: + call void @finch_panic(ptr @.str.472, i64 165, ptr @.str.473) + unreachable +ok858: + %t410 = getelementptr inbounds %S.lexer.Lexer, ptr %t408, i32 0, i32 2 + %t411 = load i64, ptr %t410 + call void @finch_str_sub(ptr %a406, ptr %a405, i64 %t407, i64 %t411, ptr @.str.471, i64 165) + %t412 = load { ptr, i64, i64 }, ptr %a406 + store { ptr, i64, i64 } %t412, ptr %a413 + store { ptr, i64, i64 } { ptr @.str.475, i64 1, i64 0 }, ptr %a415 + store { ptr, i64, i64 } { ptr @.str.476, i64 0, i64 0 }, ptr %a416 + call void @finch_str_replace(ptr %a414, ptr %a413, ptr %a415, ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a414 + store { ptr, i64, i64 } %t412, ptr %a418 + call void @finch_str_drop(ptr %a418) + %t419 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t420 = load { ptr, i64, i64 }, ptr %t419 + store { ptr, i64, i64 } %t417, ptr %t419 + store { ptr, i64, i64 } %t420, ptr %a421 + call void @finch_str_drop(ptr %a421) + br label %endif755 +else754: + %t422 = load i8, ptr %a43 + %t423 = icmp eq i8 %t422, 34 + br label %logic.from859 +logic.from859: + br i1 %t423, label %logic.end861, label %logic.rhs860 +logic.rhs860: + %t424 = load i8, ptr %a43 + %t425 = icmp eq i8 %t424, 39 + br label %logic.rend862 +logic.rend862: + br label %logic.end861 +logic.end861: + %t426 = phi i1 [ true, %logic.from859 ], [ %t425, %logic.rend862 ] + br i1 %t426, label %then863, label %else864 +then863: + %t427 = load i8, ptr %a43 + store i8 %t427, ptr %a428 + %t429 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t430 = load { ptr, i64, i64 }, ptr %t429 + store { ptr, i64, i64 } { ptr @.str.477, i64 6, i64 0 }, ptr %t429 + store { ptr, i64, i64 } %t430, ptr %a431 + call void @finch_str_drop(ptr %a431) + %t432 = load i8, ptr %a428 + %t433 = icmp eq i8 %t432, 39 + br i1 %t433, label %then866, label %endif868 +then866: + %t434 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t435 = load { ptr, i64, i64 }, ptr %t434 + store { ptr, i64, i64 } { ptr @.str.478, i64 4, i64 0 }, ptr %t434 + store { ptr, i64, i64 } %t435, ptr %a436 + call void @finch_str_drop(ptr %a436) + br label %endif868 +endif868: + %t437 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t437) + store { ptr, i64, i64 } zeroinitializer, ptr %a438 + br label %while.cond869 +while.cond869: + %t439 = load ptr, ptr %a18 + %t440 = call i8 @finch.lexer.peek(ptr %t439, i64 0) + %t441 = load i8, ptr %a428 + %t442 = icmp ne i8 %t440, %t441 + br i1 %t442, label %while.body870, label %while.end871 +while.body870: + %t443 = load ptr, ptr %a18 + %t444 = call i8 @finch.lexer.peek(ptr %t443, i64 0) + %t445 = trunc i64 0 to i8 + %t446 = icmp eq i8 %t444, %t445 + br label %logic.from872 +logic.from872: + br i1 %t446, label %logic.end874, label %logic.rhs873 +logic.rhs873: + %t447 = load ptr, ptr %a18 + %t448 = call i8 @finch.lexer.peek(ptr %t447, i64 0) + %t449 = icmp eq i8 %t448, 10 + br label %logic.rend875 +logic.rend875: + br label %logic.end874 +logic.end874: + %t450 = phi i1 [ true, %logic.from872 ], [ %t449, %logic.rend875 ] + br i1 %t450, label %then876, label %endif878 +then876: + %t451 = load i8, ptr %a428 + %t452 = icmp eq i8 %t451, 34 + br i1 %t452, label %then879, label %endif881 +then879: + %t453 = load ptr, ptr %a18 + %t454 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t455 = load i64, ptr %t454 + %t456 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t457 = load i64, ptr %t456 + call void @finch.lexer.fail(ptr %t453, i64 %t455, i64 %t457, { ptr, i64, i64 } { ptr @.str.479, i64 34, i64 0 }) + br label %endif881 +endif881: + %t458 = load ptr, ptr %a18 + %t459 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t460 = load i64, ptr %t459 + %t461 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t462 = load i64, ptr %t461 + call void @finch.lexer.fail(ptr %t458, i64 %t460, i64 %t462, { ptr, i64, i64 } { ptr @.str.480, i64 32, i64 0 }) + br label %endif878 +endif878: + %t463 = load ptr, ptr %a18 + %t464 = call i8 @finch.lexer.peek(ptr %t463, i64 0) + store i8 %t464, ptr %a465 + %t466 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t466) + %t467 = load i8, ptr %a465 + %t468 = icmp eq i8 %t467, 92 + br i1 %t468, label %then882, label %endif884 +then882: + %t469 = load ptr, ptr %a18 + %t470 = call i8 @finch.lexer.peek(ptr %t469, i64 0) + store i8 %t470, ptr %a471 + %t472 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t472) + %t473 = load ptr, ptr %a18 + %t474 = load i8, ptr %a471 + %t475 = call i8 @finch.lexer.escape(ptr %t473, i8 %t474) + store i8 %t475, ptr %a465 + br label %endif884 +endif884: + %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 + %t477 = load i8, ptr %a465 + call void @finch_str_from_char(ptr %a478, i8 signext %t477) + %t479 = load { ptr, i64, i64 }, ptr %a478 + %t480 = load i64, ptr %t476 + %t481 = add i64 %t480, 1 + call void @finch_arr_reserve(ptr %a438, i64 %t481, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t482 = load ptr, ptr %a438 + %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i64 %t480 + store { ptr, i64, i64 } %t479, ptr %t483 + store i64 %t481, ptr %t476 + br label %while.cond869 +while.end871: + %t484 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t484) + %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.481, i64 0, i64 0 }, ptr %a486 + call void @finch_str_join(ptr %a487, ptr %a438, ptr %a486) + %t488 = load { ptr, i64, i64 }, ptr %a487 + %t489 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t490 = load { ptr, i64, i64 }, ptr %t489 + store { ptr, i64, i64 } %t488, ptr %t489 + store { ptr, i64, i64 } %t490, ptr %a491 + call void @finch_str_drop(ptr %a491) + %t492 = load i8, ptr %a428 + %t493 = icmp eq i8 %t492, 39 + br label %logic.from885 +logic.from885: + br i1 %t493, label %logic.rhs886, label %logic.end887 +logic.rhs886: + %t494 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i32 0, i32 1 + %t496 = load i64, ptr %t495 + %t497 = icmp ne i64 %t496, 1 + br label %logic.rend888 +logic.rend888: + br label %logic.end887 +logic.end887: + %t498 = phi i1 [ false, %logic.from885 ], [ %t497, %logic.rend888 ] + br i1 %t498, label %then889, label %endif891 +then889: + %t499 = load ptr, ptr %a18 + %t500 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t501 = load i64, ptr %t500 + %t502 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t503 = load i64, ptr %t502 + call void @finch.lexer.fail(ptr %t499, i64 %t501, i64 %t503, { ptr, i64, i64 } { ptr @.str.482, i64 44, i64 0 }) + br label %endif891 +endif891: + call void @finch.drop.arr_str(ptr %a438) + br label %endif865 +else864: + %t504 = load ptr, ptr %a18 + %t505 = call { ptr, i64, i64 } @finch.lexer.operator(ptr %t504) + store { ptr, i64, i64 } %t505, ptr %a506 + %t507 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 + %t508 = load i64, ptr %t507 + %t509 = icmp eq i64 %t508, 0 + br i1 %t509, label %then892, label %endif894 +then892: + store i64 1, ptr %a510 + %t511 = load i8, ptr %a43 + %t512 = zext i8 %t511 to i64 + %t513 = and i64 %t512, 224 + %t514 = icmp eq i64 %t513, 192 + br i1 %t514, label %then895, label %else896 +then895: + store i64 2, ptr %a510 + br label %endif897 +else896: + %t515 = load i8, ptr %a43 + %t516 = zext i8 %t515 to i64 + %t517 = and i64 %t516, 240 + %t518 = icmp eq i64 %t517, 224 + br i1 %t518, label %then898, label %else899 +then898: + store i64 3, ptr %a510 + br label %endif900 +else899: + %t519 = load i8, ptr %a43 + %t520 = zext i8 %t519 to i64 + %t521 = and i64 %t520, 248 + %t522 = icmp eq i64 %t521, 240 + br i1 %t522, label %then901, label %endif903 +then901: + store i64 4, ptr %a510 + br label %endif903 +endif903: + br label %endif900 +endif900: + br label %endif897 +endif897: + store { ptr, i64, i64 } { ptr @.str.483, i64 0, i64 0 }, ptr %a523 + %t524 = load i8, ptr %a43 + %t525 = zext i8 %t524 to i64 + %t526 = icmp sge i64 %t525, 128 + br i1 %t526, label %then904, label %endif906 +then904: + %t527 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.484, i64 74, i64 0 }, ptr %a523 + store { ptr, i64, i64 } %t527, ptr %a528 + call void @finch_str_drop(ptr %a528) + br label %endif906 +endif906: + %t529 = load ptr, ptr %a18 + %t530 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t531 = load i64, ptr %t530 + %t532 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t533 = load i64, ptr %t532 + %t534 = load ptr, ptr %a18 + %t535 = icmp eq ptr %t534, null + br i1 %t535, label %panic907, label %ok908 +panic907: + call void @finch_panic(ptr @.str.486, i64 211, ptr @.str.487) + unreachable +ok908: + %t536 = getelementptr inbounds %S.lexer.Lexer, ptr %t534, i32 0, i32 0 + %t537 = load { ptr, i64, i64 }, ptr %t536 + store { ptr, i64, i64 } %t537, ptr %a538 + %t540 = load ptr, ptr %a18 + %t541 = icmp eq ptr %t540, null + br i1 %t541, label %panic909, label %ok910 +panic909: + call void @finch_panic(ptr @.str.489, i64 211, ptr @.str.490) + unreachable +ok910: + %t542 = getelementptr inbounds %S.lexer.Lexer, ptr %t540, i32 0, i32 2 + %t543 = load i64, ptr %t542 + %t544 = load ptr, ptr %a18 + %t545 = icmp eq ptr %t544, null + br i1 %t545, label %panic911, label %ok912 +panic911: + call void @finch_panic(ptr @.str.491, i64 211, ptr @.str.492) + unreachable +ok912: + %t546 = getelementptr inbounds %S.lexer.Lexer, ptr %t544, i32 0, i32 2 + %t547 = load i64, ptr %t546 + %t548 = load i64, ptr %a510 + %t549 = add i64 %t547, %t548 + call void @finch_str_sub(ptr %a539, ptr %a538, i64 %t543, i64 %t549, ptr @.str.488, i64 211) + %t550 = load { ptr, i64, i64 }, ptr %a539 + store { ptr, i64, i64 } { ptr @.str.485, i64 22, i64 0 }, ptr %a552 + store { ptr, i64, i64 } %t550, ptr %a553 + call void @finch_str_concat(ptr %a551, ptr %a552, ptr %a553) + store { ptr, i64, i64 } %t550, ptr %a554 + call void @finch_str_drop(ptr %a554) + %t555 = load { ptr, i64, i64 }, ptr %a551 + store { ptr, i64, i64 } %t555, ptr %a557 + store { ptr, i64, i64 } { ptr @.str.493, i64 1, i64 0 }, ptr %a558 + call void @finch_str_concat(ptr %a556, ptr %a557, ptr %a558) + store { ptr, i64, i64 } %t555, ptr %a559 + call void @finch_str_drop(ptr %a559) + %t560 = load { ptr, i64, i64 }, ptr %a556 + %t561 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t560, ptr %a563 + store { ptr, i64, i64 } %t561, ptr %a564 + call void @finch_str_concat(ptr %a562, ptr %a563, ptr %a564) + store { ptr, i64, i64 } %t560, ptr %a565 + call void @finch_str_drop(ptr %a565) + %t566 = load { ptr, i64, i64 }, ptr %a562 + call void @finch.lexer.fail(ptr %t529, i64 %t531, i64 %t533, { ptr, i64, i64 } %t566) + store { ptr, i64, i64 } %t566, ptr %a567 + call void @finch_str_drop(ptr %a567) + call void @finch_str_drop(ptr %a523) + br label %endif894 +endif894: + %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 + %t569 = load i64, ptr %t568 + store i64 0, ptr %a570 + br label %for.cond913 +for.cond913: + %t571 = load i64, ptr %a570 + %t572 = icmp slt i64 %t571, %t569 + br i1 %t572, label %for.body914, label %for.end916 +for.body914: + %t573 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t573) + br label %for.step915 +for.step915: + %t574 = load i64, ptr %a570 + %t575 = add i64 %t574, 1 + store i64 %t575, ptr %a570 + br label %for.cond913 +for.end916: + %t576 = load { ptr, i64, i64 }, ptr %a506 + %t577 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + store { ptr, i64, i64 } %t576, ptr %a578 + call void @finch_str_copy(ptr %a579, ptr %a578) + %t580 = load { ptr, i64, i64 }, ptr %a579 + %t581 = load { ptr, i64, i64 }, ptr %t577 + store { ptr, i64, i64 } %t580, ptr %t577 + store { ptr, i64, i64 } %t581, ptr %a582 + call void @finch_str_drop(ptr %a582) + %t583 = load { ptr, i64, i64 }, ptr %a506 + %t584 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + store { ptr, i64, i64 } %t583, ptr %a585 + call void @finch_str_copy(ptr %a586, ptr %a585) + %t587 = load { ptr, i64, i64 }, ptr %a586 + %t588 = load { ptr, i64, i64 }, ptr %t584 + store { ptr, i64, i64 } %t587, ptr %t584 + store { ptr, i64, i64 } %t588, ptr %a589 + call void @finch_str_drop(ptr %a589) + call void @finch_str_drop(ptr %a506) + br label %endif865 +endif865: + br label %endif755 +endif755: + br label %endif718 +endif718: + %t590 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t591 = load %S.lexer.Token, ptr %a169 + store %S.lexer.Token %t591, ptr %a592 + call void @finch.copy.S_lexer_Token(ptr %a593, ptr %a592) + %t594 = load %S.lexer.Token, ptr %a593 + %t595 = load i64, ptr %t590 + %t596 = add i64 %t595, 1 + call void @finch_arr_reserve(ptr %a19, i64 %t596, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) + %t597 = load ptr, ptr %a19 + %t598 = getelementptr inbounds %S.lexer.Token, ptr %t597, i64 %t595 + store %S.lexer.Token %t594, ptr %t598 + store i64 %t596, ptr %t590 + call void @finch.drop.S_lexer_Token(ptr %a169) + br label %while.cond615 +while.end617: + %t599 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t600 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.494, i64 3, i64 0 }, 0 + %t601 = insertvalue %S.lexer.Token %t600, { ptr, i64, i64 } { ptr @.str.495, i64 0, i64 0 }, 1 + %t602 = load ptr, ptr %a18 + %t603 = icmp eq ptr %t602, null + br i1 %t603, label %panic917, label %ok918 +panic917: + call void @finch_panic(ptr @.str.496, i64 221, ptr @.str.497) + unreachable +ok918: + %t604 = getelementptr inbounds %S.lexer.Lexer, ptr %t602, i32 0, i32 3 + %t605 = load i64, ptr %t604 + %t606 = insertvalue %S.lexer.Token %t601, i64 %t605, 2 + %t607 = load ptr, ptr %a18 + %t608 = icmp eq ptr %t607, null + br i1 %t608, label %panic919, label %ok920 +panic919: + call void @finch_panic(ptr @.str.498, i64 221, ptr @.str.499) + unreachable +ok920: + %t609 = getelementptr inbounds %S.lexer.Lexer, ptr %t607, i32 0, i32 4 + %t610 = load i64, ptr %t609 + %t611 = insertvalue %S.lexer.Token %t606, i64 %t610, 3 + %t612 = insertvalue %S.lexer.Token %t611, i1 true, 4 + %t613 = load i64, ptr %t599 + %t614 = add i64 %t613, 1 + call void @finch_arr_reserve(ptr %a19, i64 %t614, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) + %t615 = load ptr, ptr %a19 + %t616 = getelementptr inbounds %S.lexer.Token, ptr %t615, i64 %t613 + store %S.lexer.Token %t612, ptr %t616 + store i64 %t614, ptr %t599 + %t617 = load { ptr, i64, i64 }, ptr %a19 + call void @finch.drop.S_lexer_Lexer(ptr %a17) + ret { ptr, i64, i64 } %t617 +} + +define internal %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t5, 0 + ret %S.ast.Type %t6 +} + +define internal %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a7 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.500, i64 5, i64 0 }, 0 + store %S.ast.Type %t2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t6, ptr %a7 + call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) + %t9 = load %S.ast.Type, ptr %a8 + %t10 = load i64, ptr %t5 + %t11 = add i64 %t10, 1 + call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t12 = load ptr, ptr %t4 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 + store %S.ast.Type %t9, ptr %t13 + store i64 %t11, ptr %t5 + %t14 = load %S.ast.Type, ptr %a3 + ret %S.ast.Type %t14 +} + +define internal %S.ast.Type @finch.ast.mapOf(%S.ast.Type %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a9 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a19 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.501, i64 3, i64 0 }, 0 + store %S.ast.Type %t3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t7, ptr %a8 + call void @finch.copy.S_ast_Type(ptr %a9, ptr %a8) + %t10 = load %S.ast.Type, ptr %a9 + %t11 = load i64, ptr %t6 + %t12 = add i64 %t11, 1 + call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t13 = load ptr, ptr %t5 + %t14 = getelementptr inbounds %S.ast.Type, ptr %t13, i64 %t11 + store %S.ast.Type %t10, ptr %t14 + store i64 %t12, ptr %t6 + %t15 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %a2 + store %S.ast.Type %t17, ptr %a18 + call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) + %t20 = load %S.ast.Type, ptr %a19 + %t21 = load i64, ptr %t16 + %t22 = add i64 %t21, 1 + call void @finch_arr_reserve(ptr %t15, i64 %t22, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t23 = load ptr, ptr %t15 + %t24 = getelementptr inbounds %S.ast.Type, ptr %t23, i64 %t21 + store %S.ast.Type %t20, ptr %t24 + store i64 %t22, ptr %t16 + %t25 = load %S.ast.Type, ptr %a4 + ret %S.ast.Type %t25 +} + +define internal %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a7 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.502, i64 3, i64 0 }, 0 + store %S.ast.Type %t2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t6, ptr %a7 + call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) + %t9 = load %S.ast.Type, ptr %a8 + %t10 = load i64, ptr %t5 + %t11 = add i64 %t10, 1 + call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t12 = load ptr, ptr %t4 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 + store %S.ast.Type %t9, ptr %t13 + store i64 %t11, ptr %t5 + %t14 = load %S.ast.Type, ptr %a3 + ret %S.ast.Type %t14 +} + +define internal i1 @finch.ast.same(%S.ast.Type %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca i64, align 16 + store %S.ast.Type %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t4, ptr %a7 + store { ptr, i64, i64 } %t6, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp eq i32 %t9, 0 + br i1 %t10, label %then921, label %endif923 +then921: + ret i1 false +endif923: + %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.503, i64 6, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from924 +logic.from924: + br i1 %t16, label %logic.end926, label %logic.rhs925 +logic.rhs925: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.504, i64 5, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.rend927 +logic.rend927: + br label %logic.end926 +logic.end926: + %t23 = phi i1 [ true, %logic.from924 ], [ %t22, %logic.rend927 ] + br label %logic.from928 +logic.from928: + br i1 %t23, label %logic.end930, label %logic.rhs929 +logic.rhs929: + %t24 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t25 = load { ptr, i64, i64 }, ptr %t24 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.505, i64 4, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend931 +logic.rend931: + br label %logic.end930 +logic.end930: + %t30 = phi i1 [ true, %logic.from928 ], [ %t29, %logic.rend931 ] + br i1 %t30, label %then932, label %endif934 +then932: + %t31 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t32 = load { ptr, i64, i64 }, ptr %t31 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t32, ptr %a35 + store { ptr, i64, i64 } %t34, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.from935 +logic.from935: + br i1 %t38, label %logic.rhs936, label %logic.end937 +logic.rhs936: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t40, ptr %a43 + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend938 +logic.rend938: + br label %logic.end937 +logic.end937: + %t47 = phi i1 [ false, %logic.from935 ], [ %t46, %logic.rend938 ] + ret i1 %t47 +endif934: + %t48 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t49 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.506, i64 5, i64 0 }, ptr %a51 + %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) + %t53 = icmp ne i32 %t52, 0 + br label %logic.from939 +logic.from939: + br i1 %t53, label %logic.rhs940, label %logic.end941 +logic.rhs940: + %t54 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 + %t55 = load i64, ptr %t54 + %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t57 = load i64, ptr %t56 + %t58 = icmp ne i64 %t55, %t57 + br label %logic.rend942 +logic.rend942: + br label %logic.end941 +logic.end941: + %t59 = phi i1 [ false, %logic.from939 ], [ %t58, %logic.rend942 ] + br i1 %t59, label %then943, label %endif945 +then943: + ret i1 false +endif945: + %t60 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.507, i64 5, i64 0 }, ptr %a63 + %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) + %t65 = icmp ne i32 %t64, 0 + br label %logic.from946 +logic.from946: + br i1 %t65, label %logic.end948, label %logic.rhs947 +logic.rhs947: + %t66 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t67 = load { ptr, i64, i64 }, ptr %t66 + store { ptr, i64, i64 } %t67, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.508, i64 3, i64 0 }, ptr %a69 + %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) + %t71 = icmp ne i32 %t70, 0 + br label %logic.rend949 +logic.rend949: + br label %logic.end948 +logic.end948: + %t72 = phi i1 [ true, %logic.from946 ], [ %t71, %logic.rend949 ] + br label %logic.from950 +logic.from950: + br i1 %t72, label %logic.end952, label %logic.rhs951 +logic.rhs951: + %t73 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t74 = load { ptr, i64, i64 }, ptr %t73 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.509, i64 3, i64 0 }, ptr %a76 + %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) + %t78 = icmp ne i32 %t77, 0 + br label %logic.rend953 +logic.rend953: + br label %logic.end952 +logic.end952: + %t79 = phi i1 [ true, %logic.from950 ], [ %t78, %logic.rend953 ] + br label %logic.from954 +logic.from954: + br i1 %t79, label %logic.end956, label %logic.rhs955 +logic.rhs955: + %t80 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t81 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.510, i64 5, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.rend957 +logic.rend957: + br label %logic.end956 +logic.end956: + %t86 = phi i1 [ true, %logic.from954 ], [ %t85, %logic.rend957 ] + br i1 %t86, label %then958, label %endif960 +then958: + %t87 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 + %t89 = load i64, ptr %t88 + %t90 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1 + %t92 = load i64, ptr %t91 + %t93 = icmp ne i64 %t89, %t92 + br i1 %t93, label %then961, label %endif963 +then961: + ret i1 false +endif963: + %t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load i64, ptr %t95 + store i64 0, ptr %a97 + br label %for.cond964 +for.cond964: + %t98 = load i64, ptr %a97 + %t99 = icmp slt i64 %t98, %t96 + br i1 %t99, label %for.body965, label %for.end967 +for.body965: + %t100 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t101 = load i64, ptr %a97 + %t102 = load { ptr, i64, i64 }, ptr %t100 + %t103 = extractvalue { ptr, i64, i64 } %t102, 1 + %t104 = icmp uge i64 %t101, %t103 + br i1 %t104, label %range968, label %inrange969 +range968: + call void @finch_panic_index(ptr @.str.511, i64 54, i64 %t101, i64 %t103) + unreachable +inrange969: + %t105 = extractvalue { ptr, i64, i64 } %t102, 0 + %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t101 + %t107 = load %S.ast.Type, ptr %t106 + %t108 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t109 = load i64, ptr %a97 + %t110 = load { ptr, i64, i64 }, ptr %t108 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range970, label %inrange971 +range970: + call void @finch_panic_index(ptr @.str.512, i64 54, i64 %t109, i64 %t111) + unreachable +inrange971: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds %S.ast.Type, ptr %t113, i64 %t109 + %t115 = load %S.ast.Type, ptr %t114 + %t116 = call i1 @finch.ast.same(%S.ast.Type %t107, %S.ast.Type %t115) + %t117 = xor i1 %t116, true + br i1 %t117, label %then972, label %endif974 +then972: + ret i1 false +endif974: + br label %for.step966 +for.step966: + %t118 = load i64, ptr %a97 + %t119 = add i64 %t118, 1 + store i64 %t119, ptr %a97 + br label %for.cond964 +for.end967: + ret i1 true +endif960: + ret i1 true +} + +define internal { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.513, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then975, label %endif977 +then975: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 0, %t10 + br i1 %t11, label %range978, label %inrange979 +range978: + call void @finch_panic_index(ptr @.str.515, i64 65, i64 0, i64 %t10) + unreachable +inrange979: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 + %t14 = load %S.ast.Type, ptr %t13 + %t15 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t14) + store { ptr, i64, i64 } { ptr @.str.514, i64 2, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t20 +endif977: + %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.516, i64 5, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then980, label %endif982 +then980: + %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 + %t28 = load i64, ptr %t27 + call void @finch_str_from_int(ptr %a29, i64 %t28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } { ptr @.str.517, i64 1, i64 0 }, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.518, i64 1, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + %t43 = extractvalue { ptr, i64, i64 } %t42, 1 + %t44 = icmp uge i64 0, %t43 + br i1 %t44, label %range983, label %inrange984 +range983: + call void @finch_panic_index(ptr @.str.519, i64 68, i64 0, i64 %t43) + unreachable +inrange984: + %t45 = extractvalue { ptr, i64, i64 } %t42, 0 + %t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0 + %t47 = load %S.ast.Type, ptr %t46 + %t48 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t47) + store { ptr, i64, i64 } %t40, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t40, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + ret { ptr, i64, i64 } %t54 +endif982: + %t55 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t56 = load { ptr, i64, i64 }, ptr %t55 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.520, i64 3, i64 0 }, ptr %a58 + %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) + %t60 = icmp ne i32 %t59, 0 + br i1 %t60, label %then985, label %endif987 +then985: + %t61 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = extractvalue { ptr, i64, i64 } %t62, 1 + %t64 = icmp uge i64 0, %t63 + br i1 %t64, label %range988, label %inrange989 +range988: + call void @finch_panic_index(ptr @.str.522, i64 71, i64 0, i64 %t63) + unreachable +inrange989: + %t65 = extractvalue { ptr, i64, i64 } %t62, 0 + %t66 = getelementptr inbounds %S.ast.Type, ptr %t65, i64 0 + %t67 = load %S.ast.Type, ptr %t66 + %t68 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t67) + store { ptr, i64, i64 } { ptr @.str.521, i64 4, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.523, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t80 = load { ptr, i64, i64 }, ptr %t79 + %t81 = extractvalue { ptr, i64, i64 } %t80, 1 + %t82 = icmp uge i64 1, %t81 + br i1 %t82, label %range990, label %inrange991 +range990: + call void @finch_panic_index(ptr @.str.524, i64 71, i64 1, i64 %t81) + unreachable +inrange991: + %t83 = extractvalue { ptr, i64, i64 } %t80, 0 + %t84 = getelementptr inbounds %S.ast.Type, ptr %t83, i64 1 + %t85 = load %S.ast.Type, ptr %t84 + %t86 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t85) + store { ptr, i64, i64 } %t78, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t78, ptr %a90 + call void @finch_str_drop(ptr %a90) + store { ptr, i64, i64 } %t86, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a87 + ret { ptr, i64, i64 } %t92 +endif987: + %t93 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t94 = load { ptr, i64, i64 }, ptr %t93 + store { ptr, i64, i64 } %t94, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.525, i64 3, i64 0 }, ptr %a96 + %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) + %t98 = icmp ne i32 %t97, 0 + br i1 %t98, label %then992, label %endif994 +then992: + %t99 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 + %t101 = load i64, ptr %t100 + %t102 = icmp eq i64 %t101, 0 + br i1 %t102, label %then995, label %endif997 +then995: + ret { ptr, i64, i64 } { ptr @.str.526, i64 3, i64 0 } +endif997: + %t103 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t104 = load { ptr, i64, i64 }, ptr %t103 + %t105 = extractvalue { ptr, i64, i64 } %t104, 1 + %t106 = icmp uge i64 0, %t105 + br i1 %t106, label %range998, label %inrange999 +range998: + call void @finch_panic_index(ptr @.str.528, i64 77, i64 0, i64 %t105) + unreachable +inrange999: + %t107 = extractvalue { ptr, i64, i64 } %t104, 0 + %t108 = getelementptr inbounds %S.ast.Type, ptr %t107, i64 0 + %t109 = load %S.ast.Type, ptr %t108 + %t110 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t109) + store { ptr, i64, i64 } { ptr @.str.527, i64 4, i64 0 }, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t110, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + store { ptr, i64, i64 } %t115, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.529, i64 1, i64 0 }, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t115, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a116 + ret { ptr, i64, i64 } %t120 +endif994: + %t121 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t122 = load { ptr, i64, i64 }, ptr %t121 + store { ptr, i64, i64 } %t122, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.530, i64 6, i64 0 }, ptr %a124 + %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) + %t126 = icmp ne i32 %t125, 0 + br label %logic.from1000 +logic.from1000: + br i1 %t126, label %logic.end1002, label %logic.rhs1001 +logic.rhs1001: + %t127 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a129 + store { ptr, i64, i64 } { ptr @.str.531, i64 5, i64 0 }, ptr %a130 + %t131 = call i32 @finch_str_eq(ptr %a129, ptr %a130) + %t132 = icmp ne i32 %t131, 0 + br label %logic.rend1003 +logic.rend1003: + br label %logic.end1002 +logic.end1002: + %t133 = phi i1 [ true, %logic.from1000 ], [ %t132, %logic.rend1003 ] + br label %logic.from1004 +logic.from1004: + br i1 %t133, label %logic.end1006, label %logic.rhs1005 +logic.rhs1005: + %t134 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t135 = load { ptr, i64, i64 }, ptr %t134 + store { ptr, i64, i64 } %t135, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.532, i64 4, i64 0 }, ptr %a137 + %t138 = call i32 @finch_str_eq(ptr %a136, ptr %a137) + %t139 = icmp ne i32 %t138, 0 + br label %logic.rend1007 +logic.rend1007: + br label %logic.end1006 +logic.end1006: + %t140 = phi i1 [ true, %logic.from1004 ], [ %t139, %logic.rend1007 ] + br i1 %t140, label %then1008, label %endif1010 +then1008: + %t141 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 + %t143 = load i64, ptr %t142 + %t144 = icmp sgt i64 %t143, 0 + br i1 %t144, label %then1011, label %endif1013 +then1011: + %t145 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t146 = load { ptr, i64, i64 }, ptr %t145 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.533, i64 1, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a147 + %t151 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t150, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t150, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + ret { ptr, i64, i64 } %t157 +endif1013: + %t158 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t159, ptr %a160 + call void @finch_str_copy(ptr %a161, ptr %a160) + %t162 = load { ptr, i64, i64 }, ptr %a161 + ret { ptr, i64, i64 } %t162 +endif1010: + %t163 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t164 = load { ptr, i64, i64 }, ptr %t163 + store { ptr, i64, i64 } %t164, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.534, i64 4, i64 0 }, ptr %a166 + %t167 = call i32 @finch_str_eq(ptr %a165, ptr %a166) + %t168 = icmp ne i32 %t167, 0 + br i1 %t168, label %then1014, label %endif1016 +then1014: + ret { ptr, i64, i64 } { ptr @.str.535, i64 7, i64 0 } +endif1016: + %t169 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t170 = load { ptr, i64, i64 }, ptr %t169 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_copy(ptr %a172, ptr %a171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + ret { ptr, i64, i64 } %t173 +} + +define internal void @finch.parser.fail(ptr %p0, %S.lexer.Token %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.lexer.Token, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.lexer.Token %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic1017, label %ok1018 +panic1017: + call void @finch_panic(ptr @.str.536, i64 14, ptr @.str.537) + unreachable +ok1018: + %t6 = getelementptr inbounds %S.parser.Parser, ptr %t4, i32 0, i32 4 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.538, i64 1, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + %t12 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 2 + %t13 = load i64, ptr %t12 + call void @finch_str_from_int(ptr %a14, i64 %t13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t11, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t11, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.539, i64 1, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 3 + %t28 = load i64, ptr %t27 + call void @finch_str_from_int(ptr %a29, i64 %t28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t26, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t26, ptr %a34 + call void @finch_str_drop(ptr %a34) + store { ptr, i64, i64 } %t30, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t36, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.540, i64 9, i64 0 }, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t36, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + %t42 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t41, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a43 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = trunc i64 %t48 to i32 + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = icmp eq ptr %t50, null + %t52 = select i1 %t51, ptr @.str.541, ptr %t50 + %t53 = call i32 (ptr, ...) @printf(ptr @.str.542, i32 %t49, ptr %t52) + store { ptr, i64, i64 } %t47, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = call i32 (ptr, ...) @printf(ptr @.str.543) + %t56 = trunc i64 1 to i32 + %t57 = call i32 @fflush(ptr null) + call void @exit(i32 %t56) + ret void +} + +define internal %S.lexer.Token @finch.parser.cur(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a15 = alloca %S.lexer.Token, align 16 + %a16 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1019, label %ok1020 +panic1019: + call void @finch_panic(ptr @.str.544, i64 19, ptr @.str.545) + unreachable +ok1020: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic1021, label %ok1022 +panic1021: + call void @finch_panic(ptr @.str.546, i64 19, ptr @.str.547) + unreachable +ok1022: + %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range1023, label %inrange1024 +range1023: + call void @finch_panic_index(ptr @.str.548, i64 19, i64 %t8, i64 %t10) + unreachable +inrange1024: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 + %t14 = load %S.lexer.Token, ptr %t13 + store %S.lexer.Token %t14, ptr %a15 + call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) + %t17 = load %S.lexer.Token, ptr %a16 + ret %S.lexer.Token %t17 +} + +define internal { ptr, i64, i64 } @finch.parser.curKind(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1025, label %ok1026 +panic1025: + call void @finch_panic(ptr @.str.549, i64 23, ptr @.str.550) + unreachable +ok1026: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic1027, label %ok1028 +panic1027: + call void @finch_panic(ptr @.str.551, i64 23, ptr @.str.552) + unreachable +ok1028: + %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range1029, label %inrange1030 +range1029: + call void @finch_panic_index(ptr @.str.553, i64 23, i64 %t8, i64 %t10) + unreachable +inrange1030: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 + %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i32 0, i32 0 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + call void @finch_str_copy(ptr %a17, ptr %a16) + %t18 = load { ptr, i64, i64 }, ptr %a17 + ret { ptr, i64, i64 } %t18 +} + +define internal { ptr, i64, i64 } @finch.parser.peekKind(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a9 = alloca i64, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic1031, label %ok1032 +panic1031: + call void @finch_panic(ptr @.str.554, i64 27, ptr @.str.555) + unreachable +ok1032: + %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = load i64, ptr %a2 + %t8 = add i64 %t6, %t7 + store i64 %t8, ptr %a9 + %t10 = load i64, ptr %a9 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic1033, label %ok1034 +panic1033: + call void @finch_panic(ptr @.str.556, i64 28, ptr @.str.557) + unreachable +ok1034: + %t13 = getelementptr inbounds %S.parser.Parser, ptr %t11, i32 0, i32 0 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = icmp sge i64 %t10, %t15 + br i1 %t16, label %then1035, label %endif1037 +then1035: + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic1038, label %ok1039 +panic1038: + call void @finch_panic(ptr @.str.558, i64 29, ptr @.str.559) + unreachable +ok1039: + %t19 = getelementptr inbounds %S.parser.Parser, ptr %t17, i32 0, i32 0 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load i64, ptr %t20 + %t22 = sub i64 %t21, 1 + store i64 %t22, ptr %a9 + br label %endif1037 +endif1037: + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic1040, label %ok1041 +panic1040: + call void @finch_panic(ptr @.str.560, i64 31, ptr @.str.561) + unreachable +ok1041: + %t25 = getelementptr inbounds %S.parser.Parser, ptr %t23, i32 0, i32 0 + %t26 = load i64, ptr %a9 + %t27 = load { ptr, i64, i64 }, ptr %t25 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 %t26, %t28 + br i1 %t29, label %range1042, label %inrange1043 +range1042: + call void @finch_panic_index(ptr @.str.562, i64 31, i64 %t26, i64 %t28) + unreachable +inrange1043: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds %S.lexer.Token, ptr %t30, i64 %t26 + %t32 = getelementptr inbounds %S.lexer.Token, ptr %t31, i32 0, i32 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_copy(ptr %a35, ptr %a34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + ret { ptr, i64, i64 } %t36 +} + +define internal i1 @finch.parser.at(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic1044, label %ok1045 +panic1044: + call void @finch_panic(ptr @.str.563, i64 35, ptr @.str.564) + unreachable +ok1045: + %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1046, label %ok1047 +panic1046: + call void @finch_panic(ptr @.str.565, i64 35, ptr @.str.566) + unreachable +ok1047: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load { ptr, i64, i64 }, ptr %t5 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range1048, label %inrange1049 +range1048: + call void @finch_panic_index(ptr @.str.567, i64 35, i64 %t9, i64 %t11) + unreachable +inrange1049: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 + %t15 = getelementptr inbounds %S.lexer.Token, ptr %t14, i32 0, i32 0 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } %t17, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + ret i1 %t21 +} + +define internal %S.lexer.Token @finch.parser.next(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a15 = alloca %S.lexer.Token, align 16 + %a16 = alloca %S.lexer.Token, align 16 + %a18 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1050, label %ok1051 +panic1050: + call void @finch_panic(ptr @.str.568, i64 39, ptr @.str.569) + unreachable +ok1051: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic1052, label %ok1053 +panic1052: + call void @finch_panic(ptr @.str.570, i64 39, ptr @.str.571) + unreachable +ok1053: + %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range1054, label %inrange1055 +range1054: + call void @finch_panic_index(ptr @.str.572, i64 39, i64 %t8, i64 %t10) + unreachable +inrange1055: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 + %t14 = load %S.lexer.Token, ptr %t13 + store %S.lexer.Token %t14, ptr %a15 + call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) + %t17 = load %S.lexer.Token, ptr %a16 + store %S.lexer.Token %t17, ptr %a18 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic1056, label %ok1057 +panic1056: + call void @finch_panic(ptr @.str.573, i64 40, ptr @.str.574) + unreachable +ok1057: + %t21 = getelementptr inbounds %S.parser.Parser, ptr %t19, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = add i64 %t22, 1 + store i64 %t23, ptr %t21 + %t24 = load %S.lexer.Token, ptr %a18 + ret %S.lexer.Token %t24 +} + +define internal i1 @finch.parser.accept(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } %t4) + br i1 %t5, label %then1058, label %endif1060 +then1058: + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1061, label %ok1062 +panic1061: + call void @finch_panic(ptr @.str.575, i64 46, ptr @.str.576) + unreachable +ok1062: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = add i64 %t9, 1 + store i64 %t10, ptr %t8 + ret i1 true +endif1060: + ret i1 false +} + +define internal { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %p0) { +entry: + %a1 = alloca %S.lexer.Token, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + store %S.lexer.Token %p0, ptr %a1 + %t2 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.577, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then1063, label %endif1065 +then1063: + %t8 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } { ptr @.str.578, i64 1, i64 0 }, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.579, i64 1, i64 0 }, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + ret { ptr, i64, i64 } %t18 +endif1065: + %t19 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.580, i64 3, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br i1 %t24, label %then1066, label %endif1068 +then1066: + ret { ptr, i64, i64 } { ptr @.str.581, i64 11, i64 0 } +endif1068: + %t25 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.582, i64 3, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br label %logic.from1069 +logic.from1069: + br i1 %t30, label %logic.end1071, label %logic.rhs1070 +logic.rhs1070: + %t31 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.583, i64 5, i64 0 }, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br label %logic.rend1072 +logic.rend1072: + br label %logic.end1071 +logic.end1071: + %t37 = phi i1 [ true, %logic.from1069 ], [ %t36, %logic.rend1072 ] + br i1 %t37, label %then1073, label %endif1075 +then1073: + ret { ptr, i64, i64 } { ptr @.str.584, i64 8, i64 0 } +endif1075: + %t38 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t39 = load { ptr, i64, i64 }, ptr %t38 + store { ptr, i64, i64 } %t39, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.585, i64 6, i64 0 }, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br i1 %t43, label %then1076, label %endif1078 +then1076: + ret { ptr, i64, i64 } { ptr @.str.586, i64 8, i64 0 } +endif1078: + %t44 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.587, i64 4, i64 0 }, ptr %a47 + %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + br i1 %t49, label %then1079, label %endif1081 +then1079: + ret { ptr, i64, i64 } { ptr @.str.588, i64 6, i64 0 } +endif1081: + %t50 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t51 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } { ptr @.str.589, i64 1, i64 0 }, ptr %a53 + store { ptr, i64, i64 } %t51, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.590, i64 1, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + ret { ptr, i64, i64 } %t60 +} + +define internal %S.lexer.Token @finch.parser.expect(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca %S.lexer.Token, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca %S.lexer.Token, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load { ptr, i64, i64 }, ptr %a2 + %t6 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } %t5) + %t7 = xor i1 %t6, true + br i1 %t7, label %then1082, label %endif1084 +then1082: + %t8 = load ptr, ptr %a1 + %t9 = load ptr, ptr %a1 + %t10 = call %S.lexer.Token @finch.parser.cur(ptr %t9) + %t11 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.591, i64 9, i64 0 }, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.592, i64 8, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + %t21 = load ptr, ptr %a1 + %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) + %t23 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t22) + store %S.lexer.Token %t22, ptr %a24 + call void @finch.drop.S_lexer_Token(ptr %a24) + store { ptr, i64, i64 } %t20, ptr %a26 + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t20, ptr %a28 + call void @finch_str_drop(ptr %a28) + store { ptr, i64, i64 } %t23, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.parser.fail(ptr %t8, %S.lexer.Token %t10, { ptr, i64, i64 } %t30) + store %S.lexer.Token %t10, ptr %a31 + call void @finch.drop.S_lexer_Token(ptr %a31) + store { ptr, i64, i64 } %t30, ptr %a32 + call void @finch_str_drop(ptr %a32) + br label %endif1084 +endif1084: + %t33 = load ptr, ptr %a1 + %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) + ret %S.lexer.Token %t34 +} + +define internal i1 @finch.parser.sameLine(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1085, label %ok1086 +panic1085: + call void @finch_panic(ptr @.str.593, i64 79, ptr @.str.594) + unreachable +ok1086: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 2 + %t5 = load i64, ptr %t4 + %t6 = icmp sgt i64 %t5, 0 + br label %logic.from1087 +logic.from1087: + br i1 %t6, label %logic.end1089, label %logic.rhs1088 +logic.rhs1088: + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic1090, label %ok1091 +panic1090: + call void @finch_panic(ptr @.str.595, i64 79, ptr @.str.596) + unreachable +ok1091: + %t9 = getelementptr inbounds %S.parser.Parser, ptr %t7, i32 0, i32 0 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic1092, label %ok1093 +panic1092: + call void @finch_panic(ptr @.str.597, i64 79, ptr @.str.598) + unreachable +ok1093: + %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = load { ptr, i64, i64 }, ptr %t9 + %t15 = extractvalue { ptr, i64, i64 } %t14, 1 + %t16 = icmp uge i64 %t13, %t15 + br i1 %t16, label %range1094, label %inrange1095 +range1094: + call void @finch_panic_index(ptr @.str.599, i64 79, i64 %t13, i64 %t15) + unreachable +inrange1095: + %t17 = extractvalue { ptr, i64, i64 } %t14, 0 + %t18 = getelementptr inbounds %S.lexer.Token, ptr %t17, i64 %t13 + %t19 = getelementptr inbounds %S.lexer.Token, ptr %t18, i32 0, i32 4 + %t20 = load i1, ptr %t19 + %t21 = xor i1 %t20, true + br label %logic.rend1096 +logic.rend1096: + br label %logic.end1089 +logic.end1089: + %t22 = phi i1 [ true, %logic.from1087 ], [ %t21, %logic.rend1096 ] + ret i1 %t22 +} + +define internal %S.ast.Node @finch.parser.node(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.lexer.Token, align 16 + %a17 = alloca %S.lexer.Token, align 16 + %a19 = alloca %S.lexer.Token, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic1097, label %ok1098 +panic1097: + call void @finch_panic(ptr @.str.600, i64 83, ptr @.str.601) + unreachable +ok1098: + %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1099, label %ok1100 +panic1099: + call void @finch_panic(ptr @.str.602, i64 83, ptr @.str.603) + unreachable +ok1100: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load { ptr, i64, i64 }, ptr %t5 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range1101, label %inrange1102 +range1101: + call void @finch_panic_index(ptr @.str.604, i64 83, i64 %t9, i64 %t11) + unreachable +inrange1102: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 + %t15 = load %S.lexer.Token, ptr %t14 + store %S.lexer.Token %t15, ptr %a16 + call void @finch.copy.S_lexer_Token(ptr %a17, ptr %a16) + %t18 = load %S.lexer.Token, ptr %a17 + store %S.lexer.Token %t18, ptr %a19 + %t20 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t20, ptr %a21 + call void @finch_str_copy(ptr %a22, ptr %a21) + %t23 = load { ptr, i64, i64 }, ptr %a22 + %t24 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } %t23, 0 + %t25 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 2 + %t26 = load i64, ptr %t25 + %t27 = insertvalue %S.ast.Node %t24, i64 %t26, 11 + %t28 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 3 + %t29 = load i64, ptr %t28 + %t30 = insertvalue %S.ast.Node %t27, i64 %t29, 12 + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic1103, label %ok1104 +panic1103: + call void @finch_panic(ptr @.str.605, i64 84, ptr @.str.606) + unreachable +ok1104: + %t33 = getelementptr inbounds %S.parser.Parser, ptr %t31, i32 0, i32 3 + %t34 = load i64, ptr %t33 + %t35 = insertvalue %S.ast.Node %t30, i64 %t34, 13 + call void @finch.drop.S_lexer_Token(ptr %a19) + ret %S.ast.Node %t35 +} + +define internal i1 @finch.parser.isTypeName({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca i64, align 16 + %a29 = alloca i64, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.607, i64 3, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.608, i64 5, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.609, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.610, i64 4, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.611, i64 3, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.612, i64 3, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.613, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.614, i64 3, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.615, i64 3, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.616, i64 3, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.617, i64 2, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.618, i64 3, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.619, i64 3, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.620, i64 3, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.621, i64 3, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.622, i64 3, i64 0 }, ptr %t19 + %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 + %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 + %t25 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a26 + %t27 = load i64, ptr %t24 + %t28 = load ptr, ptr %a23 + store i64 0, ptr %a29 + br label %find.cond1105 +find.cond1105: + %t30 = load i64, ptr %a29 + %t31 = icmp slt i64 %t30, %t27 + br i1 %t31, label %find.body1106, label %find.end1109 +find.body1106: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } %t25, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %find.hit1107, label %find.next1108 +find.hit1107: + store i64 %t30, ptr %a26 + br label %find.end1109 +find.next1108: + %t38 = add i64 %t30, 1 + store i64 %t38, ptr %a29 + br label %find.cond1105 +find.end1109: + %t39 = load i64, ptr %a26 + %t40 = icmp sge i64 %t39, 0 + call void @finch.drop.arr_str(ptr %a23) + ret i1 %t40 +} + +define internal %S.ast.Type @finch.parser.parseType(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca %S.lexer.Token, align 16 + %a10 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.lexer.Token, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca %S.lexer.Token, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca %S.lexer.Token, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca %S.lexer.Token, align 16 + %a54 = alloca %S.ast.Type, align 16 + %a57 = alloca %S.lexer.Token, align 16 + %a62 = alloca %S.ast.Type, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca %S.ast.Type, align 16 + %a77 = alloca %S.ast.Type, align 16 + %a80 = alloca %S.lexer.Token, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca %S.lexer.Token, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca %S.lexer.Token, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca %S.lexer.Token, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca %S.lexer.Token, align 16 + %a165 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.accept(ptr %t2, { ptr, i64, i64 } { ptr @.str.623, i64 1, i64 0 }) + br i1 %t3, label %then1110, label %endif1112 +then1110: + %t4 = load ptr, ptr %a1 + %t5 = call %S.lexer.Token @finch.parser.expect(ptr %t4, { ptr, i64, i64 } { ptr @.str.624, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.625, i64 36, i64 0 }) + store %S.lexer.Token %t5, ptr %a6 + call void @finch.drop.S_lexer_Token(ptr %a6) + %t7 = load ptr, ptr %a1 + %t8 = call %S.ast.Type @finch.parser.parseType(ptr %t7) + %t9 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t8) + store %S.ast.Type %t8, ptr %a10 + call void @finch.drop.S_ast_Type(ptr %a10) + ret %S.ast.Type %t9 +endif1112: + %t11 = load ptr, ptr %a1 + %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.626, i64 5, i64 0 }) + %t13 = xor i1 %t12, true + br i1 %t13, label %then1113, label %endif1115 +then1113: + %t14 = load ptr, ptr %a1 + %t15 = load ptr, ptr %a1 + %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) + %t17 = load ptr, ptr %a1 + %t18 = call %S.lexer.Token @finch.parser.cur(ptr %t17) + %t19 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t18) + store %S.lexer.Token %t18, ptr %a20 + call void @finch.drop.S_lexer_Token(ptr %a20) + store { ptr, i64, i64 } { ptr @.str.627, i64 11, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t19, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.628, i64 56, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + call void @finch.parser.fail(ptr %t14, %S.lexer.Token %t16, { ptr, i64, i64 } %t30) + store %S.lexer.Token %t16, ptr %a31 + call void @finch.drop.S_lexer_Token(ptr %a31) + store { ptr, i64, i64 } %t30, ptr %a32 + call void @finch_str_drop(ptr %a32) + br label %endif1115 +endif1115: + %t33 = load ptr, ptr %a1 + %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) + %t35 = extractvalue %S.lexer.Token %t34, 1 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + store %S.lexer.Token %t34, ptr %a39 + call void @finch.drop.S_lexer_Token(ptr %a39) + store { ptr, i64, i64 } %t38, ptr %a40 + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.629, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.from1116 +logic.from1116: + br i1 %t45, label %logic.rhs1117, label %logic.end1118 +logic.rhs1117: + %t46 = load ptr, ptr %a1 + %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.630, i64 1, i64 0 }) + br label %logic.rend1119 +logic.rend1119: + br label %logic.end1118 +logic.end1118: + %t48 = phi i1 [ false, %logic.from1116 ], [ %t47, %logic.rend1119 ] + br i1 %t48, label %then1120, label %endif1122 +then1120: + %t49 = load ptr, ptr %a1 + %t50 = call %S.lexer.Token @finch.parser.next(ptr %t49) + store %S.lexer.Token %t50, ptr %a51 + call void @finch.drop.S_lexer_Token(ptr %a51) + %t52 = load ptr, ptr %a1 + %t53 = call %S.ast.Type @finch.parser.parseType(ptr %t52) + store %S.ast.Type %t53, ptr %a54 + %t55 = load ptr, ptr %a1 + %t56 = call %S.lexer.Token @finch.parser.expect(ptr %t55, { ptr, i64, i64 } { ptr @.str.631, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.632, i64 39, i64 0 }) + store %S.lexer.Token %t56, ptr %a57 + call void @finch.drop.S_lexer_Token(ptr %a57) + %t58 = load %S.ast.Type, ptr %a54 + %t59 = load ptr, ptr %a1 + %t60 = call %S.ast.Type @finch.parser.parseType(ptr %t59) + %t61 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t58, %S.ast.Type %t60) + store %S.ast.Type %t60, ptr %a62 + call void @finch.drop.S_ast_Type(ptr %a62) + call void @finch.drop.S_ast_Type(ptr %a54) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t61 +endif1122: + %t63 = load { ptr, i64, i64 }, ptr %a40 + %t64 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t63) + br i1 %t64, label %then1123, label %endif1125 +then1123: + %t65 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t65, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.633, i64 3, i64 0 }, ptr %a67 + %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) + %t69 = icmp ne i32 %t68, 0 + br label %logic.from1126 +logic.from1126: + br i1 %t69, label %logic.rhs1127, label %logic.end1128 +logic.rhs1127: + %t70 = load ptr, ptr %a1 + %t71 = call i1 @finch.parser.accept(ptr %t70, { ptr, i64, i64 } { ptr @.str.634, i64 1, i64 0 }) + br label %logic.rend1129 +logic.rend1129: + br label %logic.end1128 +logic.end1128: + %t72 = phi i1 [ false, %logic.from1126 ], [ %t71, %logic.rend1129 ] + br i1 %t72, label %then1130, label %endif1132 +then1130: + %t73 = load ptr, ptr %a1 + %t74 = call %S.ast.Type @finch.parser.parseType(ptr %t73) + %t75 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t74) + store %S.ast.Type %t74, ptr %a76 + call void @finch.drop.S_ast_Type(ptr %a76) + store %S.ast.Type %t75, ptr %a77 + %t78 = load ptr, ptr %a1 + %t79 = call %S.lexer.Token @finch.parser.expect(ptr %t78, { ptr, i64, i64 } { ptr @.str.635, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.636, i64 3, i64 0 }) + store %S.lexer.Token %t79, ptr %a80 + call void @finch.drop.S_lexer_Token(ptr %a80) + %t81 = load %S.ast.Type, ptr %a77 + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t81 +endif1132: + %t82 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t82, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.637, i64 3, i64 0 }, ptr %a84 + %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) + %t86 = icmp ne i32 %t85, 0 + br i1 %t86, label %then1133, label %endif1135 +then1133: + %t87 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.638, i64 3, i64 0 }) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t87 +endif1135: + %t88 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t88, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.639, i64 3, i64 0 }, ptr %a90 + %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then1136, label %endif1138 +then1136: + %t93 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.640, i64 5, i64 0 }) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t93 +endif1138: + %t94 = load { ptr, i64, i64 }, ptr %a40 + %t95 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t94) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t95 +endif1125: + %t96 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.641, i64 5, i64 0 }, 0 + %t97 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t97, ptr %a98 + call void @finch_str_copy(ptr %a99, ptr %a98) + %t100 = load { ptr, i64, i64 }, ptr %a99 + %t101 = insertvalue %S.ast.Type %t96, { ptr, i64, i64 } %t100, 2 + store %S.ast.Type %t101, ptr %a102 + %t103 = load ptr, ptr %a1 + %t104 = call i1 @finch.parser.at(ptr %t103, { ptr, i64, i64 } { ptr @.str.642, i64 1, i64 0 }) + br label %logic.from1139 +logic.from1139: + br i1 %t104, label %logic.rhs1140, label %logic.end1141 +logic.rhs1140: + %t105 = load ptr, ptr %a1 + %t106 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t105, i64 1) + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.643, i64 5, i64 0 }, ptr %a108 + %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) + %t110 = icmp ne i32 %t109, 0 + store { ptr, i64, i64 } %t106, ptr %a111 + call void @finch_str_drop(ptr %a111) + br label %logic.rend1142 +logic.rend1142: + br label %logic.end1141 +logic.end1141: + %t112 = phi i1 [ false, %logic.from1139 ], [ %t110, %logic.rend1142 ] + br i1 %t112, label %then1143, label %endif1145 +then1143: + %t113 = load ptr, ptr %a1 + %t114 = call %S.lexer.Token @finch.parser.next(ptr %t113) + store %S.lexer.Token %t114, ptr %a115 + call void @finch.drop.S_lexer_Token(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a40 + %t117 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 3 + store { ptr, i64, i64 } %t116, ptr %a118 + call void @finch_str_copy(ptr %a119, ptr %a118) + %t120 = load { ptr, i64, i64 }, ptr %a119 + %t121 = load { ptr, i64, i64 }, ptr %t117 + store { ptr, i64, i64 } %t120, ptr %t117 + store { ptr, i64, i64 } %t121, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load ptr, ptr %a1 + %t124 = call %S.lexer.Token @finch.parser.next(ptr %t123) + %t125 = extractvalue %S.lexer.Token %t124, 1 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + store %S.lexer.Token %t124, ptr %a129 + call void @finch.drop.S_lexer_Token(ptr %a129) + %t130 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 2 + %t131 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t128, ptr %t130 + store { ptr, i64, i64 } %t131, ptr %a132 + call void @finch_str_drop(ptr %a132) + br label %endif1145 +endif1145: + %t133 = load ptr, ptr %a1 + %t134 = call i1 @finch.parser.at(ptr %t133, { ptr, i64, i64 } { ptr @.str.644, i64 1, i64 0 }) + br label %logic.from1146 +logic.from1146: + br i1 %t134, label %logic.rhs1147, label %logic.end1148 +logic.rhs1147: + %t135 = load ptr, ptr %a1 + %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) + %t137 = extractvalue %S.lexer.Token %t136, 4 + store %S.lexer.Token %t136, ptr %a138 + call void @finch.drop.S_lexer_Token(ptr %a138) + %t139 = xor i1 %t137, true + br label %logic.rend1149 +logic.rend1149: + br label %logic.end1148 +logic.end1148: + %t140 = phi i1 [ false, %logic.from1146 ], [ %t139, %logic.rend1149 ] + br label %logic.from1150 +logic.from1150: + br i1 %t140, label %logic.rhs1151, label %logic.end1152 +logic.rhs1151: + %t141 = load ptr, ptr %a1 + %t142 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t141, i64 1) + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.645, i64 1, i64 0 }, ptr %a144 + %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) + %t146 = icmp eq i32 %t145, 0 + store { ptr, i64, i64 } %t142, ptr %a147 + call void @finch_str_drop(ptr %a147) + br label %logic.rend1153 +logic.rend1153: + br label %logic.end1152 +logic.end1152: + %t148 = phi i1 [ false, %logic.from1150 ], [ %t146, %logic.rend1153 ] + br i1 %t148, label %then1154, label %endif1156 +then1154: + %t149 = load ptr, ptr %a1 + %t150 = call %S.lexer.Token @finch.parser.next(ptr %t149) + store %S.lexer.Token %t150, ptr %a151 + call void @finch.drop.S_lexer_Token(ptr %a151) + br label %while.cond1157 +while.cond1157: + br label %while.body1158 +while.body1158: + %t152 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 1 + %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i32 0, i32 1 + %t154 = load ptr, ptr %a1 + %t155 = call %S.ast.Type @finch.parser.parseType(ptr %t154) + %t156 = load i64, ptr %t153 + %t157 = add i64 %t156, 1 + call void @finch_arr_reserve(ptr %t152, i64 %t157, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t158 = load ptr, ptr %t152 + %t159 = getelementptr inbounds %S.ast.Type, ptr %t158, i64 %t156 + store %S.ast.Type %t155, ptr %t159 + store i64 %t157, ptr %t153 + %t160 = load ptr, ptr %a1 + %t161 = call i1 @finch.parser.accept(ptr %t160, { ptr, i64, i64 } { ptr @.str.646, i64 1, i64 0 }) + %t162 = xor i1 %t161, true + br i1 %t162, label %then1160, label %endif1162 +then1160: + br label %while.end1159 +endif1162: + br label %while.cond1157 +while.end1159: + %t163 = load ptr, ptr %a1 + %t164 = call %S.lexer.Token @finch.parser.expect(ptr %t163, { ptr, i64, i64 } { ptr @.str.647, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.648, i64 28, i64 0 }) + store %S.lexer.Token %t164, ptr %a165 + call void @finch.drop.S_lexer_Token(ptr %a165) + br label %endif1156 +endif1156: + %t166 = load %S.ast.Type, ptr %a102 + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t166 +} + +define internal i1 @finch.parser.genericDeclAhead(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca i64, align 16 + %a27 = alloca i64, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.649, i64 5, i64 0 }) + %t4 = xor i1 %t3, true + br label %logic.from1163 +logic.from1163: + br i1 %t4, label %logic.end1165, label %logic.rhs1164 +logic.rhs1164: + %t5 = load ptr, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t5, i64 1) + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.650, i64 1, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp eq i32 %t9, 0 + store { ptr, i64, i64 } %t6, ptr %a11 + call void @finch_str_drop(ptr %a11) + br label %logic.rend1166 +logic.rend1166: + br label %logic.end1165 +logic.end1165: + %t12 = phi i1 [ true, %logic.from1163 ], [ %t10, %logic.rend1166 ] + br label %logic.from1167 +logic.from1167: + br i1 %t12, label %logic.end1169, label %logic.rhs1168 +logic.rhs1168: + %t13 = load ptr, ptr %a1 + %t14 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t13, i64 2) + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.651, i64 1, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + store { ptr, i64, i64 } %t14, ptr %a19 + call void @finch_str_drop(ptr %a19) + br label %logic.rend1170 +logic.rend1170: + br label %logic.end1169 +logic.end1169: + %t20 = phi i1 [ true, %logic.from1167 ], [ %t18, %logic.rend1170 ] + br i1 %t20, label %then1171, label %endif1173 +then1171: + ret i1 false +endif1173: + store i64 0, ptr %a21 + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic1174, label %ok1175 +panic1174: + call void @finch_panic(ptr @.str.652, i64 148, ptr @.str.653) + unreachable +ok1175: + %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = add i64 %t25, 1 + store i64 %t26, ptr %a27 + br label %while.cond1176 +while.cond1176: + %t28 = load i64, ptr %a27 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic1179, label %ok1180 +panic1179: + call void @finch_panic(ptr @.str.654, i64 149, ptr @.str.655) + unreachable +ok1180: + %t31 = getelementptr inbounds %S.parser.Parser, ptr %t29, i32 0, i32 0 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = icmp slt i64 %t28, %t33 + br i1 %t34, label %while.body1177, label %while.end1178 +while.body1177: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic1181, label %ok1182 +panic1181: + call void @finch_panic(ptr @.str.656, i64 150, ptr @.str.657) + unreachable +ok1182: + %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 0 + %t38 = load i64, ptr %a27 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range1183, label %inrange1184 +range1183: + call void @finch_panic_index(ptr @.str.658, i64 150, i64 %t38, i64 %t40) + unreachable +inrange1184: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.lexer.Token, ptr %t42, i64 %t38 + %t44 = getelementptr inbounds %S.lexer.Token, ptr %t43, i32 0, i32 0 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch_str_copy(ptr %a47, ptr %a46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t48, ptr %a49 + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.659, i64 1, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then1185, label %else1186 +then1185: + %t55 = load i64, ptr %a21 + %t56 = add i64 %t55, 1 + store i64 %t56, ptr %a21 + br label %endif1187 +else1186: + %t57 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.660, i64 1, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br i1 %t61, label %then1188, label %else1189 +then1188: + %t62 = load i64, ptr %a21 + %t63 = sub i64 %t62, 1 + store i64 %t63, ptr %a21 + %t64 = load i64, ptr %a21 + %t65 = icmp eq i64 %t64, 0 + br i1 %t65, label %then1191, label %endif1193 +then1191: + %t66 = load i64, ptr %a27 + %t67 = add i64 %t66, 1 + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic1194, label %ok1195 +panic1194: + call void @finch_panic(ptr @.str.661, i64 156, ptr @.str.662) + unreachable +ok1195: + %t70 = getelementptr inbounds %S.parser.Parser, ptr %t68, i32 0, i32 0 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 + %t72 = load i64, ptr %t71 + %t73 = icmp slt i64 %t67, %t72 + br label %logic.from1196 +logic.from1196: + br i1 %t73, label %logic.rhs1197, label %logic.end1198 +logic.rhs1197: + %t74 = load ptr, ptr %a1 + %t75 = icmp eq ptr %t74, null + br i1 %t75, label %panic1199, label %ok1200 +panic1199: + call void @finch_panic(ptr @.str.663, i64 156, ptr @.str.664) + unreachable +ok1200: + %t76 = getelementptr inbounds %S.parser.Parser, ptr %t74, i32 0, i32 0 + %t77 = load i64, ptr %a27 + %t78 = add i64 %t77, 1 + %t79 = load { ptr, i64, i64 }, ptr %t76 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range1201, label %inrange1202 +range1201: + call void @finch_panic_index(ptr @.str.665, i64 156, i64 %t78, i64 %t80) + unreachable +inrange1202: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds %S.lexer.Token, ptr %t82, i64 %t78 + %t84 = getelementptr inbounds %S.lexer.Token, ptr %t83, i32 0, i32 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.666, i64 5, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + br label %logic.rend1203 +logic.rend1203: + br label %logic.end1198 +logic.end1198: + %t90 = phi i1 [ false, %logic.from1196 ], [ %t89, %logic.rend1203 ] + br label %logic.from1204 +logic.from1204: + br i1 %t90, label %logic.rhs1205, label %logic.end1206 +logic.rhs1205: + %t91 = load ptr, ptr %a1 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic1207, label %ok1208 +panic1207: + call void @finch_panic(ptr @.str.667, i64 156, ptr @.str.668) + unreachable +ok1208: + %t93 = getelementptr inbounds %S.parser.Parser, ptr %t91, i32 0, i32 0 + %t94 = load i64, ptr %a27 + %t95 = add i64 %t94, 1 + %t96 = load { ptr, i64, i64 }, ptr %t93 + %t97 = extractvalue { ptr, i64, i64 } %t96, 1 + %t98 = icmp uge i64 %t95, %t97 + br i1 %t98, label %range1209, label %inrange1210 +range1209: + call void @finch_panic_index(ptr @.str.669, i64 156, i64 %t95, i64 %t97) + unreachable +inrange1210: + %t99 = extractvalue { ptr, i64, i64 } %t96, 0 + %t100 = getelementptr inbounds %S.lexer.Token, ptr %t99, i64 %t95 + %t101 = getelementptr inbounds %S.lexer.Token, ptr %t100, i32 0, i32 4 + %t102 = load i1, ptr %t101 + %t103 = xor i1 %t102, true + br label %logic.rend1211 +logic.rend1211: + br label %logic.end1206 +logic.end1206: + %t104 = phi i1 [ false, %logic.from1204 ], [ %t103, %logic.rend1211 ] + call void @finch_str_drop(ptr %a49) + ret i1 %t104 +endif1193: + br label %endif1190 +else1189: + %t105 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t105, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.670, i64 3, i64 0 }, ptr %a107 + %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) + %t109 = icmp ne i32 %t108, 0 + br label %logic.from1212 +logic.from1212: + br i1 %t109, label %logic.end1214, label %logic.rhs1213 +logic.rhs1213: + %t110 = load ptr, ptr %a1 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic1215, label %ok1216 +panic1215: + call void @finch_panic(ptr @.str.671, i64 158, ptr @.str.672) + unreachable +ok1216: + %t112 = getelementptr inbounds %S.parser.Parser, ptr %t110, i32 0, i32 0 + %t113 = load i64, ptr %a27 + %t114 = load { ptr, i64, i64 }, ptr %t112 + %t115 = extractvalue { ptr, i64, i64 } %t114, 1 + %t116 = icmp uge i64 %t113, %t115 + br i1 %t116, label %range1217, label %inrange1218 +range1217: + call void @finch_panic_index(ptr @.str.673, i64 158, i64 %t113, i64 %t115) + unreachable +inrange1218: + %t117 = extractvalue { ptr, i64, i64 } %t114, 0 + %t118 = getelementptr inbounds %S.lexer.Token, ptr %t117, i64 %t113 + %t119 = getelementptr inbounds %S.lexer.Token, ptr %t118, i32 0, i32 4 + %t120 = load i1, ptr %t119 + br label %logic.from1219 +logic.from1219: + br i1 %t120, label %logic.rhs1220, label %logic.end1221 +logic.rhs1220: + %t121 = load i64, ptr %a21 + %t122 = icmp eq i64 %t121, 0 + br label %logic.rend1222 +logic.rend1222: + br label %logic.end1221 +logic.end1221: + %t123 = phi i1 [ false, %logic.from1219 ], [ %t122, %logic.rend1222 ] + br label %logic.rend1223 +logic.rend1223: + br label %logic.end1214 +logic.end1214: + %t124 = phi i1 [ true, %logic.from1212 ], [ %t123, %logic.rend1223 ] + br i1 %t124, label %then1224, label %endif1226 +then1224: + call void @finch_str_drop(ptr %a49) + ret i1 false +endif1226: + br label %endif1190 +endif1190: + br label %endif1187 +endif1187: + %t125 = load i64, ptr %a27 + %t126 = add i64 %t125, 1 + store i64 %t126, ptr %a27 + call void @finch_str_drop(ptr %a49) + br label %while.cond1176 +while.end1178: + ret i1 false +} + +define internal i1 @finch.parser.genericCallAheadFrom(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a9 = alloca i1, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1227, label %ok1228 +panic1227: + call void @finch_panic(ptr @.str.674, i64 168, ptr @.str.675) + unreachable +ok1228: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = sub i64 %t5, 1 + store i64 %t6, ptr %t4 + %t7 = load ptr, ptr %a1 + %t8 = call i1 @finch.parser.genericCallAhead(ptr %t7) + store i1 %t8, ptr %a9 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic1229, label %ok1230 +panic1229: + call void @finch_panic(ptr @.str.676, i64 170, ptr @.str.677) + unreachable +ok1230: + %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + store i64 %t14, ptr %t12 + %t15 = load i1, ptr %a9 + ret i1 %t15 +} + +define internal i1 @finch.parser.genericCallAhead(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca i64, align 16 + %a39 = alloca i64, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t2, i64 1) + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.678, i64 1, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp eq i32 %t6, 0 + store { ptr, i64, i64 } %t3, ptr %a8 + call void @finch_str_drop(ptr %a8) + br label %logic.from1231 +logic.from1231: + br i1 %t7, label %logic.end1233, label %logic.rhs1232 +logic.rhs1232: + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic1234, label %ok1235 +panic1234: + call void @finch_panic(ptr @.str.679, i64 176, ptr @.str.680) + unreachable +ok1235: + %t11 = getelementptr inbounds %S.parser.Parser, ptr %t9, i32 0, i32 0 + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic1236, label %ok1237 +panic1236: + call void @finch_panic(ptr @.str.681, i64 176, ptr @.str.682) + unreachable +ok1237: + %t14 = getelementptr inbounds %S.parser.Parser, ptr %t12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = add i64 %t15, 1 + %t17 = load { ptr, i64, i64 }, ptr %t11 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range1238, label %inrange1239 +range1238: + call void @finch_panic_index(ptr @.str.683, i64 176, i64 %t16, i64 %t18) + unreachable +inrange1239: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.lexer.Token, ptr %t20, i64 %t16 + %t22 = getelementptr inbounds %S.lexer.Token, ptr %t21, i32 0, i32 4 + %t23 = load i1, ptr %t22 + br label %logic.rend1240 +logic.rend1240: + br label %logic.end1233 +logic.end1233: + %t24 = phi i1 [ true, %logic.from1231 ], [ %t23, %logic.rend1240 ] + br label %logic.from1241 +logic.from1241: + br i1 %t24, label %logic.end1243, label %logic.rhs1242 +logic.rhs1242: + %t25 = load ptr, ptr %a1 + %t26 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t25, i64 2) + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.684, i64 1, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + br label %logic.rend1244 +logic.rend1244: + br label %logic.end1243 +logic.end1243: + %t32 = phi i1 [ true, %logic.from1241 ], [ %t30, %logic.rend1244 ] + br i1 %t32, label %then1245, label %endif1247 +then1245: + ret i1 false +endif1247: + store i64 0, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic1248, label %ok1249 +panic1248: + call void @finch_panic(ptr @.str.685, i64 180, ptr @.str.686) + unreachable +ok1249: + %t36 = getelementptr inbounds %S.parser.Parser, ptr %t34, i32 0, i32 1 + %t37 = load i64, ptr %t36 + %t38 = add i64 %t37, 1 + store i64 %t38, ptr %a39 + br label %while.cond1250 +while.cond1250: + %t40 = load i64, ptr %a39 + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic1253, label %ok1254 +panic1253: + call void @finch_panic(ptr @.str.687, i64 181, ptr @.str.688) + unreachable +ok1254: + %t43 = getelementptr inbounds %S.parser.Parser, ptr %t41, i32 0, i32 0 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = icmp slt i64 %t40, %t45 + br i1 %t46, label %while.body1251, label %while.end1252 +while.body1251: + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic1255, label %ok1256 +panic1255: + call void @finch_panic(ptr @.str.689, i64 182, ptr @.str.690) + unreachable +ok1256: + %t49 = getelementptr inbounds %S.parser.Parser, ptr %t47, i32 0, i32 0 + %t50 = load i64, ptr %a39 + %t51 = load { ptr, i64, i64 }, ptr %t49 + %t52 = extractvalue { ptr, i64, i64 } %t51, 1 + %t53 = icmp uge i64 %t50, %t52 + br i1 %t53, label %range1257, label %inrange1258 +range1257: + call void @finch_panic_index(ptr @.str.691, i64 182, i64 %t50, i64 %t52) + unreachable +inrange1258: + %t54 = extractvalue { ptr, i64, i64 } %t51, 0 + %t55 = getelementptr inbounds %S.lexer.Token, ptr %t54, i64 %t50 + %t56 = getelementptr inbounds %S.lexer.Token, ptr %t55, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch_str_copy(ptr %a59, ptr %a58) + %t60 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t60, ptr %a61 + %t62 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.692, i64 1, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br i1 %t66, label %then1259, label %else1260 +then1259: + %t67 = load i64, ptr %a33 + %t68 = add i64 %t67, 1 + store i64 %t68, ptr %a33 + br label %endif1261 +else1260: + %t69 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.693, i64 1, i64 0 }, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %then1262, label %else1263 +then1262: + %t74 = load i64, ptr %a33 + %t75 = sub i64 %t74, 1 + store i64 %t75, ptr %a33 + %t76 = load i64, ptr %a33 + %t77 = icmp eq i64 %t76, 0 + br i1 %t77, label %then1265, label %endif1267 +then1265: + %t78 = load i64, ptr %a39 + %t79 = add i64 %t78, 1 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic1268, label %ok1269 +panic1268: + call void @finch_panic(ptr @.str.694, i64 188, ptr @.str.695) + unreachable +ok1269: + %t82 = getelementptr inbounds %S.parser.Parser, ptr %t80, i32 0, i32 0 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 + %t84 = load i64, ptr %t83 + %t85 = icmp slt i64 %t79, %t84 + br label %logic.from1270 +logic.from1270: + br i1 %t85, label %logic.rhs1271, label %logic.end1272 +logic.rhs1271: + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic1273, label %ok1274 +panic1273: + call void @finch_panic(ptr @.str.696, i64 188, ptr @.str.697) + unreachable +ok1274: + %t88 = getelementptr inbounds %S.parser.Parser, ptr %t86, i32 0, i32 0 + %t89 = load i64, ptr %a39 + %t90 = add i64 %t89, 1 + %t91 = load { ptr, i64, i64 }, ptr %t88 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 %t90, %t92 + br i1 %t93, label %range1275, label %inrange1276 +range1275: + call void @finch_panic_index(ptr @.str.698, i64 188, i64 %t90, i64 %t92) + unreachable +inrange1276: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds %S.lexer.Token, ptr %t94, i64 %t90 + %t96 = getelementptr inbounds %S.lexer.Token, ptr %t95, i32 0, i32 0 + %t97 = load { ptr, i64, i64 }, ptr %t96 + store { ptr, i64, i64 } %t97, ptr %a98 + store { ptr, i64, i64 } { ptr @.str.699, i64 1, i64 0 }, ptr %a99 + %t100 = call i32 @finch_str_eq(ptr %a98, ptr %a99) + %t101 = icmp ne i32 %t100, 0 + br label %logic.rend1277 +logic.rend1277: + br label %logic.end1272 +logic.end1272: + %t102 = phi i1 [ false, %logic.from1270 ], [ %t101, %logic.rend1277 ] + br label %logic.from1278 +logic.from1278: + br i1 %t102, label %logic.rhs1279, label %logic.end1280 +logic.rhs1279: + %t103 = load ptr, ptr %a1 + %t104 = icmp eq ptr %t103, null + br i1 %t104, label %panic1281, label %ok1282 +panic1281: + call void @finch_panic(ptr @.str.700, i64 188, ptr @.str.701) + unreachable +ok1282: + %t105 = getelementptr inbounds %S.parser.Parser, ptr %t103, i32 0, i32 0 + %t106 = load i64, ptr %a39 + %t107 = add i64 %t106, 1 + %t108 = load { ptr, i64, i64 }, ptr %t105 + %t109 = extractvalue { ptr, i64, i64 } %t108, 1 + %t110 = icmp uge i64 %t107, %t109 + br i1 %t110, label %range1283, label %inrange1284 +range1283: + call void @finch_panic_index(ptr @.str.702, i64 188, i64 %t107, i64 %t109) + unreachable +inrange1284: + %t111 = extractvalue { ptr, i64, i64 } %t108, 0 + %t112 = getelementptr inbounds %S.lexer.Token, ptr %t111, i64 %t107 + %t113 = getelementptr inbounds %S.lexer.Token, ptr %t112, i32 0, i32 4 + %t114 = load i1, ptr %t113 + %t115 = xor i1 %t114, true + br label %logic.rend1285 +logic.rend1285: + br label %logic.end1280 +logic.end1280: + %t116 = phi i1 [ false, %logic.from1278 ], [ %t115, %logic.rend1285 ] + call void @finch_str_drop(ptr %a61) + ret i1 %t116 +endif1267: + br label %endif1264 +else1263: + %t117 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t117, ptr %a118 + store { ptr, i64, i64 } { ptr @.str.703, i64 3, i64 0 }, ptr %a119 + %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) + %t121 = icmp ne i32 %t120, 0 + br label %logic.from1286 +logic.from1286: + br i1 %t121, label %logic.end1288, label %logic.rhs1287 +logic.rhs1287: + %t122 = load ptr, ptr %a1 + %t123 = icmp eq ptr %t122, null + br i1 %t123, label %panic1289, label %ok1290 +panic1289: + call void @finch_panic(ptr @.str.704, i64 190, ptr @.str.705) + unreachable +ok1290: + %t124 = getelementptr inbounds %S.parser.Parser, ptr %t122, i32 0, i32 0 + %t125 = load i64, ptr %a39 + %t126 = load { ptr, i64, i64 }, ptr %t124 + %t127 = extractvalue { ptr, i64, i64 } %t126, 1 + %t128 = icmp uge i64 %t125, %t127 + br i1 %t128, label %range1291, label %inrange1292 +range1291: + call void @finch_panic_index(ptr @.str.706, i64 190, i64 %t125, i64 %t127) + unreachable +inrange1292: + %t129 = extractvalue { ptr, i64, i64 } %t126, 0 + %t130 = getelementptr inbounds %S.lexer.Token, ptr %t129, i64 %t125 + %t131 = getelementptr inbounds %S.lexer.Token, ptr %t130, i32 0, i32 4 + %t132 = load i1, ptr %t131 + br label %logic.rend1293 +logic.rend1293: + br label %logic.end1288 +logic.end1288: + %t133 = phi i1 [ true, %logic.from1286 ], [ %t132, %logic.rend1293 ] + br i1 %t133, label %then1294, label %endif1296 +then1294: + call void @finch_str_drop(ptr %a61) + ret i1 false +endif1296: + br label %endif1264 +endif1264: + br label %endif1261 +endif1261: + %t134 = load i64, ptr %a39 + %t135 = add i64 %t134, 1 + store i64 %t135, ptr %a39 + call void @finch_str_drop(ptr %a61) + br label %while.cond1250 +while.end1252: + ret i1 false +} + +define internal i1 @finch.parser.atDeclaration(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.lexer.Token, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca %S.lexer.Token, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.genericDeclAhead(ptr %t2) + br i1 %t3, label %then1297, label %endif1299 +then1297: + ret i1 true +endif1299: + %t4 = load ptr, ptr %a1 + %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.707, i64 1, i64 0 }) + br i1 %t5, label %then1300, label %endif1302 +then1300: + %t6 = load ptr, ptr %a1 + %t7 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t6, i64 1) + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.708, i64 1, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + store { ptr, i64, i64 } %t7, ptr %a12 + call void @finch_str_drop(ptr %a12) + ret i1 %t11 +endif1302: + %t13 = load ptr, ptr %a1 + %t14 = call i1 @finch.parser.at(ptr %t13, { ptr, i64, i64 } { ptr @.str.709, i64 5, i64 0 }) + %t15 = xor i1 %t14, true + br i1 %t15, label %then1303, label %endif1305 +then1303: + ret i1 false +endif1305: + %t16 = load ptr, ptr %a1 + %t17 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t16, i64 1) + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.710, i64 5, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br i1 %t23, label %then1306, label %endif1308 +then1306: + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic1309, label %ok1310 +panic1309: + call void @finch_panic(ptr @.str.711, i64 210, ptr @.str.712) + unreachable +ok1310: + %t26 = getelementptr inbounds %S.parser.Parser, ptr %t24, i32 0, i32 0 + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic1311, label %ok1312 +panic1311: + call void @finch_panic(ptr @.str.713, i64 210, ptr @.str.714) + unreachable +ok1312: + %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = add i64 %t30, 1 + %t32 = load { ptr, i64, i64 }, ptr %t26 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range1313, label %inrange1314 +range1313: + call void @finch_panic_index(ptr @.str.715, i64 210, i64 %t31, i64 %t33) + unreachable +inrange1314: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.lexer.Token, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.lexer.Token, ptr %t36, i32 0, i32 4 + %t38 = load i1, ptr %t37 + %t39 = xor i1 %t38, true + call void @finch_str_drop(ptr %a18) + ret i1 %t39 +endif1308: + %t40 = load ptr, ptr %a1 + %t41 = call %S.lexer.Token @finch.parser.cur(ptr %t40) + %t42 = extractvalue %S.lexer.Token %t41, 1 + store { ptr, i64, i64 } %t42, ptr %a43 + call void @finch_str_copy(ptr %a44, ptr %a43) + %t45 = load { ptr, i64, i64 }, ptr %a44 + store %S.lexer.Token %t41, ptr %a46 + call void @finch.drop.S_lexer_Token(ptr %a46) + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.716, i64 3, i64 0 }, ptr %a48 + %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) + %t50 = icmp ne i32 %t49, 0 + store { ptr, i64, i64 } %t45, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %logic.from1315 +logic.from1315: + br i1 %t50, label %logic.end1317, label %logic.rhs1316 +logic.rhs1316: + %t52 = load ptr, ptr %a1 + %t53 = call %S.lexer.Token @finch.parser.cur(ptr %t52) + %t54 = extractvalue %S.lexer.Token %t53, 1 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_copy(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + store %S.lexer.Token %t53, ptr %a58 + call void @finch.drop.S_lexer_Token(ptr %a58) + store { ptr, i64, i64 } %t57, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.717, i64 3, i64 0 }, ptr %a60 + %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) + %t62 = icmp ne i32 %t61, 0 + store { ptr, i64, i64 } %t57, ptr %a63 + call void @finch_str_drop(ptr %a63) + br label %logic.rend1318 +logic.rend1318: + br label %logic.end1317 +logic.end1317: + %t64 = phi i1 [ true, %logic.from1315 ], [ %t62, %logic.rend1318 ] + br label %logic.from1319 +logic.from1319: + br i1 %t64, label %logic.rhs1320, label %logic.end1321 +logic.rhs1320: + %t65 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t65, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.718, i64 1, i64 0 }, ptr %a67 + %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) + %t69 = icmp ne i32 %t68, 0 + br label %logic.rend1322 +logic.rend1322: + br label %logic.end1321 +logic.end1321: + %t70 = phi i1 [ false, %logic.from1319 ], [ %t69, %logic.rend1322 ] + br i1 %t70, label %then1323, label %endif1325 +then1323: + call void @finch_str_drop(ptr %a18) + ret i1 true +endif1325: + %t71 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t71, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.719, i64 1, i64 0 }, ptr %a73 + %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) + %t75 = icmp ne i32 %t74, 0 + br label %logic.from1326 +logic.from1326: + br i1 %t75, label %logic.rhs1327, label %logic.end1328 +logic.rhs1327: + %t76 = load ptr, ptr %a1 + %t77 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t76, i64 2) + store { ptr, i64, i64 } %t77, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.720, i64 5, i64 0 }, ptr %a79 + %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) + %t81 = icmp ne i32 %t80, 0 + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + br label %logic.rend1329 +logic.rend1329: + br label %logic.end1328 +logic.end1328: + %t83 = phi i1 [ false, %logic.from1326 ], [ %t81, %logic.rend1329 ] + br label %logic.from1330 +logic.from1330: + br i1 %t83, label %logic.rhs1331, label %logic.end1332 +logic.rhs1331: + %t84 = load ptr, ptr %a1 + %t85 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t84, i64 3) + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.721, i64 5, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + br label %logic.rend1333 +logic.rend1333: + br label %logic.end1332 +logic.end1332: + %t91 = phi i1 [ false, %logic.from1330 ], [ %t89, %logic.rend1333 ] + br label %logic.from1334 +logic.from1334: + br i1 %t91, label %logic.rhs1335, label %logic.end1336 +logic.rhs1335: + %t92 = load ptr, ptr %a1 + %t93 = icmp eq ptr %t92, null + br i1 %t93, label %panic1337, label %ok1338 +panic1337: + call void @finch_panic(ptr @.str.722, i64 215, ptr @.str.723) + unreachable +ok1338: + %t94 = getelementptr inbounds %S.parser.Parser, ptr %t92, i32 0, i32 0 + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic1339, label %ok1340 +panic1339: + call void @finch_panic(ptr @.str.724, i64 215, ptr @.str.725) + unreachable +ok1340: + %t97 = getelementptr inbounds %S.parser.Parser, ptr %t95, i32 0, i32 1 + %t98 = load i64, ptr %t97 + %t99 = add i64 %t98, 3 + %t100 = load { ptr, i64, i64 }, ptr %t94 + %t101 = extractvalue { ptr, i64, i64 } %t100, 1 + %t102 = icmp uge i64 %t99, %t101 + br i1 %t102, label %range1341, label %inrange1342 +range1341: + call void @finch_panic_index(ptr @.str.726, i64 215, i64 %t99, i64 %t101) + unreachable +inrange1342: + %t103 = extractvalue { ptr, i64, i64 } %t100, 0 + %t104 = getelementptr inbounds %S.lexer.Token, ptr %t103, i64 %t99 + %t105 = getelementptr inbounds %S.lexer.Token, ptr %t104, i32 0, i32 4 + %t106 = load i1, ptr %t105 + %t107 = xor i1 %t106, true + br label %logic.rend1343 +logic.rend1343: + br label %logic.end1336 +logic.end1336: + %t108 = phi i1 [ false, %logic.from1334 ], [ %t107, %logic.rend1343 ] + call void @finch_str_drop(ptr %a18) + ret i1 %t108 +} + +define internal void @finch.parser.endOfStatement(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a10 = alloca %S.lexer.Token, align 16 + %a18 = alloca %S.lexer.Token, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca %S.lexer.Token, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.727, i64 1, i64 0 }) + br label %logic.from1344 +logic.from1344: + br i1 %t3, label %logic.end1346, label %logic.rhs1345 +logic.rhs1345: + %t4 = load ptr, ptr %a1 + %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.728, i64 3, i64 0 }) + br label %logic.rend1347 +logic.rend1347: + br label %logic.end1346 +logic.end1346: + %t6 = phi i1 [ true, %logic.from1344 ], [ %t5, %logic.rend1347 ] + br label %logic.from1348 +logic.from1348: + br i1 %t6, label %logic.end1350, label %logic.rhs1349 +logic.rhs1349: + %t7 = load ptr, ptr %a1 + %t8 = call %S.lexer.Token @finch.parser.cur(ptr %t7) + %t9 = extractvalue %S.lexer.Token %t8, 4 + store %S.lexer.Token %t8, ptr %a10 + call void @finch.drop.S_lexer_Token(ptr %a10) + br label %logic.rend1351 +logic.rend1351: + br label %logic.end1350 +logic.end1350: + %t11 = phi i1 [ true, %logic.from1348 ], [ %t9, %logic.rend1351 ] + br i1 %t11, label %then1352, label %endif1354 +then1352: + ret void +endif1354: + %t12 = load ptr, ptr %a1 + %t13 = load ptr, ptr %a1 + %t14 = call %S.lexer.Token @finch.parser.cur(ptr %t13) + %t15 = load ptr, ptr %a1 + %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) + %t17 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t16) + store %S.lexer.Token %t16, ptr %a18 + call void @finch.drop.S_lexer_Token(ptr %a18) + store { ptr, i64, i64 } { ptr @.str.729, i64 11, i64 0 }, ptr %a20 + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t17, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.730, i64 37, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + call void @finch.parser.fail(ptr %t12, %S.lexer.Token %t14, { ptr, i64, i64 } %t28) + store %S.lexer.Token %t14, ptr %a29 + call void @finch.drop.S_lexer_Token(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a30 + call void @finch_str_drop(ptr %a30) + ret void +} + +define internal %S.ast.Program @finch.parser.parseProgram(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Program, align 16 + %a10 = alloca %S.lexer.Token, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca %S.lexer.Token, align 16 + %a87 = alloca %S.lexer.Token, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca %S.lexer.Token, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca i1, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca %S.ast.Node, align 16 + %a170 = alloca %S.ast.Node, align 16 + %a171 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Program zeroinitializer, ptr %a2 + br label %while.cond1355 +while.cond1355: + %t3 = load ptr, ptr %a1 + %t4 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } { ptr @.str.731, i64 3, i64 0 }) + %t5 = xor i1 %t4, true + br i1 %t5, label %while.body1356, label %while.end1357 +while.body1356: + %t6 = load ptr, ptr %a1 + %t7 = call i1 @finch.parser.at(ptr %t6, { ptr, i64, i64 } { ptr @.str.732, i64 6, i64 0 }) + br i1 %t7, label %then1358, label %else1359 +then1358: + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.next(ptr %t8) + store %S.lexer.Token %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.733, i64 6, i64 0 }) + br i1 %t12, label %then1361, label %else1362 +then1361: + %t13 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 4 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic1364, label %ok1365 +panic1364: + call void @finch_panic(ptr @.str.734, i64 233, ptr @.str.735) + unreachable +ok1365: + %t17 = getelementptr inbounds %S.parser.Parser, ptr %t15, i32 0, i32 4 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.736, i64 1, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a19 + %t23 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 2 + %t24 = load i64, ptr %t23 + call void @finch_str_from_int(ptr %a25, i64 %t24) + %t26 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t22, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t22, ptr %a30 + call void @finch_str_drop(ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.737, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 3 + %t39 = load i64, ptr %t38 + call void @finch_str_from_int(ptr %a40, i64 %t39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t37, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t37, ptr %a45 + call void @finch_str_drop(ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a42 + %t48 = load i64, ptr %t14 + %t49 = add i64 %t48, 1 + call void @finch_arr_reserve(ptr %t13, i64 %t49, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t50 = load ptr, ptr %t13 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 + store { ptr, i64, i64 } %t47, ptr %t51 + store i64 %t49, ptr %t14 + %t52 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 3 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 + %t54 = load ptr, ptr %a1 + %t55 = call %S.lexer.Token @finch.parser.next(ptr %t54) + %t56 = extractvalue %S.lexer.Token %t55, 1 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_copy(ptr %a58, ptr %a57) + %t59 = load { ptr, i64, i64 }, ptr %a58 + store %S.lexer.Token %t55, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + %t61 = load i64, ptr %t53 + %t62 = add i64 %t61, 1 + call void @finch_arr_reserve(ptr %t52, i64 %t62, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t63 = load ptr, ptr %t52 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i64 %t61 + store { ptr, i64, i64 } %t59, ptr %t64 + store i64 %t62, ptr %t53 + br label %endif1363 +else1362: + %t65 = load ptr, ptr %a1 + %t66 = call i1 @finch.parser.at(ptr %t65, { ptr, i64, i64 } { ptr @.str.738, i64 5, i64 0 }) + %t67 = xor i1 %t66, true + br i1 %t67, label %then1366, label %endif1368 +then1366: + %t68 = load ptr, ptr %a1 + %t69 = load %S.lexer.Token, ptr %a10 + call void @finch.parser.fail(ptr %t68, %S.lexer.Token %t69, { ptr, i64, i64 } { ptr @.str.739, i64 51, i64 0 }) + br label %endif1368 +endif1368: + %t70 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 2 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 + %t72 = load ptr, ptr %a1 + %t73 = call %S.lexer.Token @finch.parser.next(ptr %t72) + %t74 = extractvalue %S.lexer.Token %t73, 1 + store { ptr, i64, i64 } %t74, ptr %a75 + call void @finch_str_copy(ptr %a76, ptr %a75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + store %S.lexer.Token %t73, ptr %a78 + call void @finch.drop.S_lexer_Token(ptr %a78) + %t79 = load i64, ptr %t71 + %t80 = add i64 %t79, 1 + call void @finch_arr_reserve(ptr %t70, i64 %t80, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t81 = load ptr, ptr %t70 + %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i64 %t79 + store { ptr, i64, i64 } %t77, ptr %t82 + store i64 %t80, ptr %t71 + br label %endif1363 +endif1363: + call void @finch.drop.S_lexer_Token(ptr %a10) + br label %endif1360 +else1359: + %t83 = load ptr, ptr %a1 + %t84 = call i1 @finch.parser.at(ptr %t83, { ptr, i64, i64 } { ptr @.str.740, i64 4, i64 0 }) + br i1 %t84, label %then1369, label %else1370 +then1369: + %t85 = load ptr, ptr %a1 + %t86 = call %S.lexer.Token @finch.parser.next(ptr %t85) + store %S.lexer.Token %t86, ptr %a87 + %t88 = load ptr, ptr %a1 + %t89 = call %S.lexer.Token @finch.parser.expect(ptr %t88, { ptr, i64, i64 } { ptr @.str.741, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.742, i64 42, i64 0 }) + %t90 = extractvalue %S.lexer.Token %t89, 1 + store { ptr, i64, i64 } %t90, ptr %a91 + call void @finch_str_copy(ptr %a92, ptr %a91) + %t93 = load { ptr, i64, i64 }, ptr %a92 + store %S.lexer.Token %t89, ptr %a94 + call void @finch.drop.S_lexer_Token(ptr %a94) + store { ptr, i64, i64 } %t93, ptr %a95 + %t96 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.744, i64 2, i64 0 }, ptr %a99 + %t100 = call i32 @finch_str_ends(ptr %a97, ptr %a99) + %t101 = icmp ne i32 %t100, 0 + br label %logic.from1372 +logic.from1372: + br i1 %t101, label %logic.end1374, label %logic.rhs1373 +logic.rhs1373: + %t102 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.746, i64 2, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_ends(ptr %a103, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br label %logic.rend1375 +logic.rend1375: + br label %logic.end1374 +logic.end1374: + %t108 = phi i1 [ true, %logic.from1372 ], [ %t107, %logic.rend1375 ] + br label %logic.from1376 +logic.from1376: + br i1 %t108, label %logic.end1378, label %logic.rhs1377 +logic.rhs1377: + %t109 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t109, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.748, i64 2, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_ends(ptr %a110, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br label %logic.rend1379 +logic.rend1379: + br label %logic.end1378 +logic.end1378: + %t115 = phi i1 [ true, %logic.from1376 ], [ %t114, %logic.rend1379 ] + store i1 %t115, ptr %a116 + %t117 = load i1, ptr %a116 + %t118 = xor i1 %t117, true + br label %logic.from1380 +logic.from1380: + br i1 %t118, label %logic.rhs1381, label %logic.end1382 +logic.rhs1381: + %t119 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t119, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.750, i64 3, i64 0 }, ptr %a122 + %t123 = call i32 @finch_str_starts(ptr %a120, ptr %a122) + %t124 = icmp ne i32 %t123, 0 + br label %logic.from1383 +logic.from1383: + br i1 %t124, label %logic.end1385, label %logic.rhs1384 +logic.rhs1384: + %t125 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t125, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.752, i64 3, i64 0 }, ptr %a128 + %t129 = call i64 @finch_str_find(ptr %a126, ptr %a128) + %t130 = icmp sge i64 %t129, 0 + br label %logic.rend1386 +logic.rend1386: + br label %logic.end1385 +logic.end1385: + %t131 = phi i1 [ true, %logic.from1383 ], [ %t130, %logic.rend1386 ] + br label %logic.from1387 +logic.from1387: + br i1 %t131, label %logic.end1389, label %logic.rhs1388 +logic.rhs1388: + %t132 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t132, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.754, i64 1, i64 0 }, ptr %a135 + %t136 = call i64 @finch_str_find(ptr %a133, ptr %a135) + %t137 = icmp sge i64 %t136, 0 + br label %logic.rend1390 +logic.rend1390: + br label %logic.end1389 +logic.end1389: + %t138 = phi i1 [ true, %logic.from1387 ], [ %t137, %logic.rend1390 ] + br label %logic.rend1391 +logic.rend1391: + br label %logic.end1382 +logic.end1382: + %t139 = phi i1 [ false, %logic.from1380 ], [ %t138, %logic.rend1391 ] + br i1 %t139, label %then1392, label %endif1394 +then1392: + %t140 = load ptr, ptr %a1 + %t141 = load %S.lexer.Token, ptr %a87 + call void @finch.parser.fail(ptr %t140, %S.lexer.Token %t141, { ptr, i64, i64 } { ptr @.str.755, i64 65, i64 0 }) + br label %endif1394 +endif1394: + %t142 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 5 + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i32 0, i32 1 + %t144 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t144, ptr %a145 + call void @finch_str_copy(ptr %a146, ptr %a145) + %t147 = load { ptr, i64, i64 }, ptr %a146 + %t148 = load i64, ptr %t143 + %t149 = add i64 %t148, 1 + call void @finch_arr_reserve(ptr %t142, i64 %t149, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t150 = load ptr, ptr %t142 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t148 + store { ptr, i64, i64 } %t147, ptr %t151 + store i64 %t149, ptr %t143 + call void @finch_str_drop(ptr %a95) + call void @finch.drop.S_lexer_Token(ptr %a87) + br label %endif1371 +else1370: + %t152 = load ptr, ptr %a1 + %t153 = call i1 @finch.parser.at(ptr %t152, { ptr, i64, i64 } { ptr @.str.756, i64 6, i64 0 }) + br i1 %t153, label %then1395, label %else1396 +then1395: + %t154 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 + %t156 = load ptr, ptr %a1 + %t157 = call %S.ast.Node @finch.parser.parseStruct(ptr %t156) + %t158 = load i64, ptr %t155 + %t159 = add i64 %t158, 1 + call void @finch_arr_reserve(ptr %t154, i64 %t159, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t160 = load ptr, ptr %t154 + %t161 = getelementptr inbounds %S.ast.Node, ptr %t160, i64 %t158 + store %S.ast.Node %t157, ptr %t161 + store i64 %t159, ptr %t155 + br label %endif1397 +else1396: + %t162 = load ptr, ptr %a1 + %t163 = call i1 @finch.parser.at(ptr %t162, { ptr, i64, i64 } { ptr @.str.757, i64 4, i64 0 }) + br i1 %t163, label %then1398, label %else1399 +then1398: + %t164 = load ptr, ptr %a1 + %t165 = call %S.ast.Node @finch.parser.parseEnum(ptr %t164) + store %S.ast.Node %t165, ptr %a166 + %t167 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 7 + %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t169 = load %S.ast.Node, ptr %a166 + store %S.ast.Node %t169, ptr %a170 + call void @finch.copy.S_ast_Node(ptr %a171, ptr %a170) + %t172 = load %S.ast.Node, ptr %a171 + %t173 = load i64, ptr %t168 + %t174 = add i64 %t173, 1 + call void @finch_arr_reserve(ptr %t167, i64 %t174, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t175 = load ptr, ptr %t167 + %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t173 + store %S.ast.Node %t172, ptr %t176 + store i64 %t174, ptr %t168 + %t177 = getelementptr inbounds %S.ast.Node, ptr %a166, i32 0, i32 6 + %t178 = load i1, ptr %t177 + br i1 %t178, label %then1401, label %endif1403 +then1401: + %t179 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 + %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 + %t181 = load %S.ast.Node, ptr %a166 + %t182 = call %S.ast.Node @finch.parser.sumStruct(%S.ast.Node %t181) + %t183 = load i64, ptr %t180 + %t184 = add i64 %t183, 1 + call void @finch_arr_reserve(ptr %t179, i64 %t184, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t185 = load ptr, ptr %t179 + %t186 = getelementptr inbounds %S.ast.Node, ptr %t185, i64 %t183 + store %S.ast.Node %t182, ptr %t186 + store i64 %t184, ptr %t180 + br label %endif1403 +endif1403: + call void @finch.drop.S_ast_Node(ptr %a166) + br label %endif1400 +else1399: + %t187 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 8 + %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 + %t189 = load ptr, ptr %a1 + %t190 = call %S.ast.Node @finch.parser.parseFn(ptr %t189) + %t191 = load i64, ptr %t188 + %t192 = add i64 %t191, 1 + call void @finch_arr_reserve(ptr %t187, i64 %t192, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t193 = load ptr, ptr %t187 + %t194 = getelementptr inbounds %S.ast.Node, ptr %t193, i64 %t191 + store %S.ast.Node %t190, ptr %t194 + store i64 %t192, ptr %t188 + br label %endif1400 +endif1400: + br label %endif1397 +endif1397: + br label %endif1371 +endif1371: + br label %endif1360 +endif1360: + br label %while.cond1355 +while.end1357: + %t195 = load %S.ast.Program, ptr %a2 + ret %S.ast.Program %t195 +} + +define internal %S.ast.Node @finch.parser.parseEnum(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca %S.lexer.Token, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca %S.lexer.Token, align 16 + %a29 = alloca %S.lexer.Token, align 16 + %a32 = alloca %S.ast.Node, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca %S.lexer.Token, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca %S.ast.Node, align 16 + %a56 = alloca %S.ast.Type, align 16 + %a60 = alloca %S.ast.Node, align 16 + %a61 = alloca %S.ast.Node, align 16 + %a72 = alloca %S.lexer.Token, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca %S.lexer.Token, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca %S.lexer.Token, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca %S.lexer.Token, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca %S.ast.Node, align 16 + %a138 = alloca %S.ast.Node, align 16 + %a150 = alloca %S.lexer.Token, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca %S.lexer.Token, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca i64, align 16 + %a182 = alloca %S.ast.Node, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca %S.lexer.Token, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.758, i64 4, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.759, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.760, i64 6, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.761, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.762, i64 12, i64 0 }) + %t10 = extractvalue %S.lexer.Token %t9, 1 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store %S.lexer.Token %t9, ptr %a14 + call void @finch.drop.S_lexer_Token(ptr %a14) + %t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t13, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load ptr, ptr %a1 + %t19 = call %S.lexer.Token @finch.parser.expect(ptr %t18, { ptr, i64, i64 } { ptr @.str.763, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.764, i64 3, i64 0 }) + store %S.lexer.Token %t19, ptr %a20 + call void @finch.drop.S_lexer_Token(ptr %a20) + br label %while.cond1404 +while.cond1404: + %t21 = load ptr, ptr %a1 + %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.765, i64 1, i64 0 }) + %t23 = xor i1 %t22, true + br i1 %t23, label %while.body1405, label %while.end1406 +while.body1405: + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.766, i64 3, i64 0 }) + br i1 %t25, label %then1407, label %endif1409 +then1407: + %t26 = load ptr, ptr %a1 + %t27 = load ptr, ptr %a1 + %t28 = call %S.lexer.Token @finch.parser.cur(ptr %t27) + call void @finch.parser.fail(ptr %t26, %S.lexer.Token %t28, { ptr, i64, i64 } { ptr @.str.767, i64 37, i64 0 }) + store %S.lexer.Token %t28, ptr %a29 + call void @finch.drop.S_lexer_Token(ptr %a29) + br label %endif1409 +endif1409: + %t30 = load ptr, ptr %a1 + %t31 = call %S.ast.Node @finch.parser.node(ptr %t30, { ptr, i64, i64 } { ptr @.str.768, i64 7, i64 0 }) + store %S.ast.Node %t31, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = call %S.lexer.Token @finch.parser.expect(ptr %t33, { ptr, i64, i64 } { ptr @.str.769, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.770, i64 24, i64 0 }) + %t35 = extractvalue %S.lexer.Token %t34, 1 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + store %S.lexer.Token %t34, ptr %a39 + call void @finch.drop.S_lexer_Token(ptr %a39) + %t40 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t38, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load ptr, ptr %a1 + %t44 = call i1 @finch.parser.accept(ptr %t43, { ptr, i64, i64 } { ptr @.str.771, i64 1, i64 0 }) + br i1 %t44, label %then1410, label %endif1412 +then1410: + %t45 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 + store i1 true, ptr %t45 + br label %while.cond1413 +while.cond1413: + %t46 = load ptr, ptr %a1 + %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.772, i64 1, i64 0 }) + %t48 = xor i1 %t47, true + br i1 %t48, label %while.body1414, label %while.end1415 +while.body1414: + %t49 = load ptr, ptr %a1 + %t50 = call %S.ast.Node @finch.parser.node(ptr %t49, { ptr, i64, i64 } { ptr @.str.773, i64 5, i64 0 }) + store %S.ast.Node %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = call %S.ast.Type @finch.parser.parseType(ptr %t52) + %t54 = getelementptr inbounds %S.ast.Node, ptr %a51, i32 0, i32 5 + %t55 = load %S.ast.Type, ptr %t54 + store %S.ast.Type %t53, ptr %t54 + store %S.ast.Type %t55, ptr %a56 + call void @finch.drop.S_ast_Type(ptr %a56) + %t57 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 9 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 + %t59 = load %S.ast.Node, ptr %a51 + store %S.ast.Node %t59, ptr %a60 + call void @finch.copy.S_ast_Node(ptr %a61, ptr %a60) + %t62 = load %S.ast.Node, ptr %a61 + %t63 = load i64, ptr %t58 + %t64 = add i64 %t63, 1 + call void @finch_arr_reserve(ptr %t57, i64 %t64, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t65 = load ptr, ptr %t57 + %t66 = getelementptr inbounds %S.ast.Node, ptr %t65, i64 %t63 + store %S.ast.Node %t62, ptr %t66 + store i64 %t64, ptr %t58 + %t67 = load ptr, ptr %a1 + %t68 = call i1 @finch.parser.accept(ptr %t67, { ptr, i64, i64 } { ptr @.str.774, i64 1, i64 0 }) + %t69 = xor i1 %t68, true + br i1 %t69, label %then1416, label %endif1418 +then1416: + call void @finch.drop.S_ast_Node(ptr %a51) + br label %while.end1415 +endif1418: + call void @finch.drop.S_ast_Node(ptr %a51) + br label %while.cond1413 +while.end1415: + %t70 = load ptr, ptr %a1 + %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.775, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.776, i64 35, i64 0 }) + store %S.lexer.Token %t71, ptr %a72 + call void @finch.drop.S_lexer_Token(ptr %a72) + %t73 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 9 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = icmp eq i64 %t75, 0 + br i1 %t76, label %then1419, label %endif1421 +then1419: + %t77 = load ptr, ptr %a1 + %t78 = load ptr, ptr %a1 + %t79 = call %S.lexer.Token @finch.parser.cur(ptr %t78) + %t80 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 + %t81 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } { ptr @.str.777, i64 12, i64 0 }, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.778, i64 27, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 + %t92 = load { ptr, i64, i64 }, ptr %t91 + store { ptr, i64, i64 } %t90, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t90, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.779, i64 20, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + call void @finch.parser.fail(ptr %t77, %S.lexer.Token %t79, { ptr, i64, i64 } %t102) + store %S.lexer.Token %t79, ptr %a103 + call void @finch.drop.S_lexer_Token(ptr %a103) + store { ptr, i64, i64 } %t102, ptr %a104 + call void @finch_str_drop(ptr %a104) + br label %endif1421 +endif1421: + br label %endif1412 +endif1412: + %t105 = load ptr, ptr %a1 + %t106 = call i1 @finch.parser.accept(ptr %t105, { ptr, i64, i64 } { ptr @.str.780, i64 1, i64 0 }) + br i1 %t106, label %then1422, label %endif1424 +then1422: + %t107 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 + %t108 = load i1, ptr %t107 + br i1 %t108, label %then1425, label %endif1427 +then1425: + %t109 = load ptr, ptr %a1 + %t110 = load ptr, ptr %a1 + %t111 = call %S.lexer.Token @finch.parser.cur(ptr %t110) + call void @finch.parser.fail(ptr %t109, %S.lexer.Token %t111, { ptr, i64, i64 } { ptr @.str.781, i64 52, i64 0 }) + store %S.lexer.Token %t111, ptr %a112 + call void @finch.drop.S_lexer_Token(ptr %a112) + br label %endif1427 +endif1427: + store { ptr, i64, i64 } { ptr @.str.782, i64 0, i64 0 }, ptr %a113 + %t114 = load ptr, ptr %a1 + %t115 = call i1 @finch.parser.accept(ptr %t114, { ptr, i64, i64 } { ptr @.str.783, i64 1, i64 0 }) + br i1 %t115, label %then1428, label %endif1430 +then1428: + %t116 = load { ptr, i64, i64 }, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.784, i64 1, i64 0 }, ptr %a113 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + br label %endif1430 +endif1430: + %t118 = load { ptr, i64, i64 }, ptr %a113 + %t119 = load ptr, ptr %a1 + %t120 = call %S.lexer.Token @finch.parser.expect(ptr %t119, { ptr, i64, i64 } { ptr @.str.785, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.786, i64 30, i64 0 }) + %t121 = extractvalue %S.lexer.Token %t120, 1 + store { ptr, i64, i64 } %t121, ptr %a122 + call void @finch_str_copy(ptr %a123, ptr %a122) + %t124 = load { ptr, i64, i64 }, ptr %a123 + store %S.lexer.Token %t120, ptr %a125 + call void @finch.drop.S_lexer_Token(ptr %a125) + store { ptr, i64, i64 } %t118, ptr %a127 + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 4 + %t132 = load { ptr, i64, i64 }, ptr %t131 + store { ptr, i64, i64 } %t130, ptr %t131 + store { ptr, i64, i64 } %t132, ptr %a133 + call void @finch_str_drop(ptr %a133) + call void @finch_str_drop(ptr %a113) + br label %endif1424 +endif1424: + %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 + %t136 = load %S.ast.Node, ptr %a32 + store %S.ast.Node %t136, ptr %a137 + call void @finch.copy.S_ast_Node(ptr %a138, ptr %a137) + %t139 = load %S.ast.Node, ptr %a138 + %t140 = load i64, ptr %t135 + %t141 = add i64 %t140, 1 + call void @finch_arr_reserve(ptr %t134, i64 %t141, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t142 = load ptr, ptr %t134 + %t143 = getelementptr inbounds %S.ast.Node, ptr %t142, i64 %t140 + store %S.ast.Node %t139, ptr %t143 + store i64 %t141, ptr %t135 + %t144 = load ptr, ptr %a1 + %t145 = call i1 @finch.parser.accept(ptr %t144, { ptr, i64, i64 } { ptr @.str.787, i64 1, i64 0 }) + %t146 = xor i1 %t145, true + br i1 %t146, label %then1431, label %endif1433 +then1431: + %t147 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t147) + br label %endif1433 +endif1433: + call void @finch.drop.S_ast_Node(ptr %a32) + br label %while.cond1404 +while.end1406: + %t148 = load ptr, ptr %a1 + %t149 = call %S.lexer.Token @finch.parser.next(ptr %t148) + store %S.lexer.Token %t149, ptr %a150 + call void @finch.drop.S_lexer_Token(ptr %a150) + %t151 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load i64, ptr %t152 + %t154 = icmp eq i64 %t153, 0 + br i1 %t154, label %then1434, label %endif1436 +then1434: + %t155 = load ptr, ptr %a1 + %t156 = load ptr, ptr %a1 + %t157 = call %S.lexer.Token @finch.parser.cur(ptr %t156) + %t158 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } { ptr @.str.788, i64 9, i64 0 }, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.789, i64 16, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + call void @finch.parser.fail(ptr %t155, %S.lexer.Token %t157, { ptr, i64, i64 } %t168) + store %S.lexer.Token %t157, ptr %a169 + call void @finch.drop.S_lexer_Token(ptr %a169) + store { ptr, i64, i64 } %t168, ptr %a170 + call void @finch_str_drop(ptr %a170) + br label %endif1436 +endif1436: + %t171 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 + %t172 = load i1, ptr %t171 + br i1 %t172, label %then1437, label %endif1439 +then1437: + %t173 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + store i64 0, ptr %a174 + br label %each.cond1440 +each.cond1440: + %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 + %t176 = load i64, ptr %t175 + %t177 = load i64, ptr %a174 + %t178 = icmp slt i64 %t177, %t176 + br i1 %t178, label %each.body1441, label %each.end1443 +each.body1441: + %t179 = load ptr, ptr %t173 + %t180 = getelementptr inbounds %S.ast.Node, ptr %t179, i64 %t177 + %t181 = load %S.ast.Node, ptr %t180 + store %S.ast.Node %t181, ptr %a182 + %t183 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 4 + %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 + %t185 = load i64, ptr %t184 + %t186 = icmp sgt i64 %t185, 0 + br i1 %t186, label %then1444, label %endif1446 +then1444: + %t187 = load ptr, ptr %a1 + %t188 = load ptr, ptr %a1 + %t189 = call %S.lexer.Token @finch.parser.cur(ptr %t188) + %t190 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 1 + %t191 = load { ptr, i64, i64 }, ptr %t190 + store { ptr, i64, i64 } { ptr @.str.790, i64 54, i64 0 }, ptr %a193 + store { ptr, i64, i64 } %t191, ptr %a194 + call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } %t195, ptr %a197 + store { ptr, i64, i64 } { ptr @.str.791, i64 3, i64 0 }, ptr %a198 + call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) + store { ptr, i64, i64 } %t195, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a196 + %t201 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 4 + %t202 = load { ptr, i64, i64 }, ptr %t201 + store { ptr, i64, i64 } %t200, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t200, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t207, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.792, i64 1, i64 0 }, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + store { ptr, i64, i64 } %t207, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a208 + call void @finch.parser.fail(ptr %t187, %S.lexer.Token %t189, { ptr, i64, i64 } %t212) + store %S.lexer.Token %t189, ptr %a213 + call void @finch.drop.S_lexer_Token(ptr %a213) + store { ptr, i64, i64 } %t212, ptr %a214 + call void @finch_str_drop(ptr %a214) + br label %endif1446 +endif1446: + br label %each.step1442 +each.step1442: + %t215 = load i64, ptr %a174 + %t216 = add i64 %t215, 1 + store i64 %t216, ptr %a174 + br label %each.cond1440 +each.end1443: + br label %endif1439 +endif1439: + %t217 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t217 +} + +define internal %S.ast.Node @finch.parser.sumStruct(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.ast.Node, align 16 + %a30 = alloca %S.ast.Node, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a38 = alloca %S.ast.Node, align 16 + %a39 = alloca %S.ast.Node, align 16 + %a46 = alloca i64, align 16 + %a54 = alloca %S.ast.Node, align 16 + %a58 = alloca i64, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca %S.ast.Node, align 16 + %a98 = alloca %S.ast.Type, align 16 + %a99 = alloca %S.ast.Type, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a106 = alloca %S.ast.Node, align 16 + %a107 = alloca %S.ast.Node, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.793, i64 6, i64 0 }, 0 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + %t8 = insertvalue %S.ast.Node %t2, { ptr, i64, i64 } %t7, 1 + %t9 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 + %t10 = load i64, ptr %t9 + %t11 = insertvalue %S.ast.Node %t8, i64 %t10, 11 + %t12 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 + %t13 = load i64, ptr %t12 + %t14 = insertvalue %S.ast.Node %t11, i64 %t13, 12 + %t15 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 + %t16 = load i64, ptr %t15 + %t17 = insertvalue %S.ast.Node %t14, i64 %t16, 13 + store %S.ast.Node %t17, ptr %a18 + %t19 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.794, i64 5, i64 0 }, 0 + %t20 = insertvalue %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.795, i64 3, i64 0 }, 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 + %t22 = load i64, ptr %t21 + %t23 = insertvalue %S.ast.Node %t20, i64 %t22, 11 + %t24 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 + %t25 = load i64, ptr %t24 + %t26 = insertvalue %S.ast.Node %t23, i64 %t25, 12 + %t27 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 + %t28 = load i64, ptr %t27 + %t29 = insertvalue %S.ast.Node %t26, i64 %t28, 13 + store %S.ast.Node %t29, ptr %a30 + %t31 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.796, i64 3, i64 0 }) + %t32 = getelementptr inbounds %S.ast.Node, ptr %a30, i32 0, i32 5 + %t33 = load %S.ast.Type, ptr %t32 + store %S.ast.Type %t31, ptr %t32 + store %S.ast.Type %t33, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + %t35 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i32 0, i32 1 + %t37 = load %S.ast.Node, ptr %a30 + store %S.ast.Node %t37, ptr %a38 + call void @finch.copy.S_ast_Node(ptr %a39, ptr %a38) + %t40 = load %S.ast.Node, ptr %a39 + %t41 = load i64, ptr %t36 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %t35, i64 %t42, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %t35 + %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 + store %S.ast.Node %t40, ptr %t44 + store i64 %t42, ptr %t36 + %t45 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 + store i64 0, ptr %a46 + br label %each.cond1447 +each.cond1447: + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 + %t48 = load i64, ptr %t47 + %t49 = load i64, ptr %a46 + %t50 = icmp slt i64 %t49, %t48 + br i1 %t50, label %each.body1448, label %each.end1450 +each.body1448: + %t51 = load ptr, ptr %t45 + %t52 = getelementptr inbounds %S.ast.Node, ptr %t51, i64 %t49 + %t53 = load %S.ast.Node, ptr %t52 + store %S.ast.Node %t53, ptr %a54 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 9 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 + %t57 = load i64, ptr %t56 + store i64 0, ptr %a58 + br label %for.cond1451 +for.cond1451: + %t59 = load i64, ptr %a58 + %t60 = icmp slt i64 %t59, %t57 + br i1 %t60, label %for.body1452, label %for.end1454 +for.body1452: + %t61 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.797, i64 5, i64 0 }, 0 + %t62 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 1 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.798, i64 1, i64 0 }, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a64 + %t68 = load i64, ptr %a58 + call void @finch_str_from_int(ptr %a69, i64 %t68) + %t70 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t67, ptr %a74 + call void @finch_str_drop(ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a71 + %t77 = insertvalue %S.ast.Node %t61, { ptr, i64, i64 } %t76, 1 + %t78 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 11 + %t79 = load i64, ptr %t78 + %t80 = insertvalue %S.ast.Node %t77, i64 %t79, 11 + %t81 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 12 + %t82 = load i64, ptr %t81 + %t83 = insertvalue %S.ast.Node %t80, i64 %t82, 12 + %t84 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 13 + %t85 = load i64, ptr %t84 + %t86 = insertvalue %S.ast.Node %t83, i64 %t85, 13 + store %S.ast.Node %t86, ptr %a87 + %t88 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 9 + %t89 = load i64, ptr %a58 + %t90 = load { ptr, i64, i64 }, ptr %t88 + %t91 = extractvalue { ptr, i64, i64 } %t90, 1 + %t92 = icmp uge i64 %t89, %t91 + br i1 %t92, label %range1455, label %inrange1456 +range1455: + call void @finch_panic_index(ptr @.str.799, i64 333, i64 %t89, i64 %t91) + unreachable +inrange1456: + %t93 = extractvalue { ptr, i64, i64 } %t90, 0 + %t94 = getelementptr inbounds %S.ast.Node, ptr %t93, i64 %t89 + %t95 = getelementptr inbounds %S.ast.Node, ptr %t94, i32 0, i32 5 + %t96 = load %S.ast.Type, ptr %t95 + %t97 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 5 + store %S.ast.Type %t96, ptr %a98 + call void @finch.copy.S_ast_Type(ptr %a99, ptr %a98) + %t100 = load %S.ast.Type, ptr %a99 + %t101 = load %S.ast.Type, ptr %t97 + store %S.ast.Type %t100, ptr %t97 + store %S.ast.Type %t101, ptr %a102 + call void @finch.drop.S_ast_Type(ptr %a102) + %t103 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 + %t105 = load %S.ast.Node, ptr %a87 + store %S.ast.Node %t105, ptr %a106 + call void @finch.copy.S_ast_Node(ptr %a107, ptr %a106) + %t108 = load %S.ast.Node, ptr %a107 + %t109 = load i64, ptr %t104 + %t110 = add i64 %t109, 1 + call void @finch_arr_reserve(ptr %t103, i64 %t110, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t111 = load ptr, ptr %t103 + %t112 = getelementptr inbounds %S.ast.Node, ptr %t111, i64 %t109 + store %S.ast.Node %t108, ptr %t112 + store i64 %t110, ptr %t104 + call void @finch.drop.S_ast_Node(ptr %a87) + br label %for.step1453 +for.step1453: + %t113 = load i64, ptr %a58 + %t114 = add i64 %t113, 1 + store i64 %t114, ptr %a58 + br label %for.cond1451 +for.end1454: + br label %each.step1449 +each.step1449: + %t115 = load i64, ptr %a46 + %t116 = add i64 %t115, 1 + store i64 %t116, ptr %a46 + br label %each.cond1447 +each.end1450: + %t117 = load %S.ast.Node, ptr %a18 + call void @finch.drop.S_ast_Node(ptr %a30) + ret %S.ast.Node %t117 +} + +define internal %S.ast.Node @finch.parser.parseMatch(ptr %p0, i1 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i1, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.lexer.Token, align 16 + %a21 = alloca %S.lexer.Token, align 16 + %a26 = alloca i64, align 16 + %a38 = alloca %S.lexer.Token, align 16 + %a41 = alloca %S.ast.Node, align 16 + %a44 = alloca %S.ast.Node, align 16 + %a62 = alloca %S.ast.Node, align 16 + %a63 = alloca %S.ast.Node, align 16 + %a71 = alloca %S.lexer.Token, align 16 + %a105 = alloca %S.ast.Node, align 16 + %a106 = alloca %S.ast.Node, align 16 + %a122 = alloca %S.lexer.Token, align 16 + %a130 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + store i1 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call %S.ast.Node @finch.parser.node(ptr %t3, { ptr, i64, i64 } { ptr @.str.800, i64 5, i64 0 }) + store %S.ast.Node %t4, ptr %a5 + %t6 = load i1, ptr %a2 + %t7 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 6 + store i1 %t6, ptr %t7 + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.801, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.802, i64 7, i64 0 }) + store %S.lexer.Token %t9, ptr %a10 + call void @finch.drop.S_lexer_Token(ptr %a10) + %t11 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 + %t13 = load ptr, ptr %a1 + %t14 = call %S.ast.Node @finch.parser.parseExpr(ptr %t13) + %t15 = load i64, ptr %t12 + %t16 = add i64 %t15, 1 + call void @finch_arr_reserve(ptr %t11, i64 %t16, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t17 = load ptr, ptr %t11 + %t18 = getelementptr inbounds %S.ast.Node, ptr %t17, i64 %t15 + store %S.ast.Node %t14, ptr %t18 + store i64 %t16, ptr %t12 + %t19 = load ptr, ptr %a1 + %t20 = call %S.lexer.Token @finch.parser.expect(ptr %t19, { ptr, i64, i64 } { ptr @.str.803, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.804, i64 3, i64 0 }) + store %S.lexer.Token %t20, ptr %a21 + call void @finch.drop.S_lexer_Token(ptr %a21) + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic1457, label %ok1458 +panic1457: + call void @finch_panic(ptr @.str.805, i64 348, ptr @.str.806) + unreachable +ok1458: + %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 2 + %t25 = load i64, ptr %t24 + store i64 %t25, ptr %a26 + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic1459, label %ok1460 +panic1459: + call void @finch_panic(ptr @.str.807, i64 349, ptr @.str.808) + unreachable +ok1460: + %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 2 + store i64 0, ptr %t29 + br label %while.cond1461 +while.cond1461: + %t30 = load ptr, ptr %a1 + %t31 = call i1 @finch.parser.at(ptr %t30, { ptr, i64, i64 } { ptr @.str.809, i64 1, i64 0 }) + %t32 = xor i1 %t31, true + br i1 %t32, label %while.body1462, label %while.end1463 +while.body1462: + %t33 = load ptr, ptr %a1 + %t34 = call i1 @finch.parser.at(ptr %t33, { ptr, i64, i64 } { ptr @.str.810, i64 3, i64 0 }) + br i1 %t34, label %then1464, label %endif1466 +then1464: + %t35 = load ptr, ptr %a1 + %t36 = load ptr, ptr %a1 + %t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36) + call void @finch.parser.fail(ptr %t35, %S.lexer.Token %t37, { ptr, i64, i64 } { ptr @.str.811, i64 37, i64 0 }) + store %S.lexer.Token %t37, ptr %a38 + call void @finch.drop.S_lexer_Token(ptr %a38) + br label %endif1466 +endif1466: + %t39 = load ptr, ptr %a1 + %t40 = call %S.ast.Node @finch.parser.node(ptr %t39, { ptr, i64, i64 } { ptr @.str.812, i64 3, i64 0 }) + store %S.ast.Node %t40, ptr %a41 + %t42 = load ptr, ptr %a1 + %t43 = call %S.ast.Node @finch.parser.node(ptr %t42, { ptr, i64, i64 } { ptr @.str.813, i64 8, i64 0 }) + store %S.ast.Node %t43, ptr %a44 + %t45 = load ptr, ptr %a1 + %t46 = call i1 @finch.parser.accept(ptr %t45, { ptr, i64, i64 } { ptr @.str.814, i64 4, i64 0 }) + br i1 %t46, label %then1467, label %else1468 +then1467: + %t47 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 6 + store i1 true, ptr %t47 + br label %endif1469 +else1468: + br label %while.cond1470 +while.cond1470: + br label %while.body1471 +while.body1471: + %t48 = getelementptr inbounds %S.ast.Node, ptr %a44, i32 0, i32 9 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 + %t50 = load ptr, ptr %a1 + %t51 = call %S.ast.Node @finch.parser.parseExpr(ptr %t50) + %t52 = load i64, ptr %t49 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %t48, i64 %t53, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %t48 + %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 %t52 + store %S.ast.Node %t51, ptr %t55 + store i64 %t53, ptr %t49 + %t56 = load ptr, ptr %a1 + %t57 = call i1 @finch.parser.accept(ptr %t56, { ptr, i64, i64 } { ptr @.str.815, i64 1, i64 0 }) + %t58 = xor i1 %t57, true + br i1 %t58, label %then1473, label %endif1475 +then1473: + br label %while.end1472 +endif1475: + br label %while.cond1470 +while.end1472: + br label %endif1469 +endif1469: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i32 0, i32 1 + %t61 = load %S.ast.Node, ptr %a44 + store %S.ast.Node %t61, ptr %a62 + call void @finch.copy.S_ast_Node(ptr %a63, ptr %a62) + %t64 = load %S.ast.Node, ptr %a63 + %t65 = load i64, ptr %t60 + %t66 = add i64 %t65, 1 + call void @finch_arr_reserve(ptr %t59, i64 %t66, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t67 = load ptr, ptr %t59 + %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 %t65 + store %S.ast.Node %t64, ptr %t68 + store i64 %t66, ptr %t60 + %t69 = load ptr, ptr %a1 + %t70 = call %S.lexer.Token @finch.parser.expect(ptr %t69, { ptr, i64, i64 } { ptr @.str.816, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.817, i64 57, i64 0 }) + store %S.lexer.Token %t70, ptr %a71 + call void @finch.drop.S_lexer_Token(ptr %a71) + %t72 = load ptr, ptr %a1 + %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.818, i64 1, i64 0 }) + br label %logic.from1476 +logic.from1476: + br i1 %t73, label %logic.rhs1477, label %logic.end1478 +logic.rhs1477: + %t74 = load i1, ptr %a2 + %t75 = xor i1 %t74, true + br label %logic.rend1479 +logic.rend1479: + br label %logic.end1478 +logic.end1478: + %t76 = phi i1 [ false, %logic.from1476 ], [ %t75, %logic.rend1479 ] + br i1 %t76, label %then1480, label %else1481 +then1480: + %t77 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 + %t79 = load ptr, ptr %a1 + %t80 = call %S.ast.Node @finch.parser.parseBlock(ptr %t79) + %t81 = load i64, ptr %t78 + %t82 = add i64 %t81, 1 + call void @finch_arr_reserve(ptr %t77, i64 %t82, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t83 = load ptr, ptr %t77 + %t84 = getelementptr inbounds %S.ast.Node, ptr %t83, i64 %t81 + store %S.ast.Node %t80, ptr %t84 + store i64 %t82, ptr %t78 + br label %endif1482 +else1481: + %t85 = load i1, ptr %a2 + br i1 %t85, label %then1483, label %else1484 +then1483: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load ptr, ptr %a1 + %t89 = call %S.ast.Node @finch.parser.parseExpr(ptr %t88) + %t90 = load i64, ptr %t87 + %t91 = add i64 %t90, 1 + call void @finch_arr_reserve(ptr %t86, i64 %t91, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t92 = load ptr, ptr %t86 + %t93 = getelementptr inbounds %S.ast.Node, ptr %t92, i64 %t90 + store %S.ast.Node %t89, ptr %t93 + store i64 %t91, ptr %t87 + br label %endif1485 +else1484: + %t94 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load ptr, ptr %a1 + %t97 = call %S.ast.Node @finch.parser.parseStatement(ptr %t96) + %t98 = load i64, ptr %t95 + %t99 = add i64 %t98, 1 + call void @finch_arr_reserve(ptr %t94, i64 %t99, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t100 = load ptr, ptr %t94 + %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 + store %S.ast.Node %t97, ptr %t101 + store i64 %t99, ptr %t95 + br label %endif1485 +endif1485: + br label %endif1482 +endif1482: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i32 0, i32 1 + %t104 = load %S.ast.Node, ptr %a41 + store %S.ast.Node %t104, ptr %a105 + call void @finch.copy.S_ast_Node(ptr %a106, ptr %a105) + %t107 = load %S.ast.Node, ptr %a106 + %t108 = load i64, ptr %t103 + %t109 = add i64 %t108, 1 + call void @finch_arr_reserve(ptr %t102, i64 %t109, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t110 = load ptr, ptr %t102 + %t111 = getelementptr inbounds %S.ast.Node, ptr %t110, i64 %t108 + store %S.ast.Node %t107, ptr %t111 + store i64 %t109, ptr %t103 + %t112 = load ptr, ptr %a1 + %t113 = call i1 @finch.parser.accept(ptr %t112, { ptr, i64, i64 } { ptr @.str.819, i64 1, i64 0 }) + %t114 = xor i1 %t113, true + br i1 %t114, label %then1486, label %endif1488 +then1486: + %t115 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t115) + br label %endif1488 +endif1488: + call void @finch.drop.S_ast_Node(ptr %a44) + call void @finch.drop.S_ast_Node(ptr %a41) + br label %while.cond1461 +while.end1463: + %t116 = load i64, ptr %a26 + %t117 = load ptr, ptr %a1 + %t118 = icmp eq ptr %t117, null + br i1 %t118, label %panic1489, label %ok1490 +panic1489: + call void @finch_panic(ptr @.str.820, i64 380, ptr @.str.821) + unreachable +ok1490: + %t119 = getelementptr inbounds %S.parser.Parser, ptr %t117, i32 0, i32 2 + store i64 %t116, ptr %t119 + %t120 = load ptr, ptr %a1 + %t121 = call %S.lexer.Token @finch.parser.next(ptr %t120) + store %S.lexer.Token %t121, ptr %a122 + call void @finch.drop.S_lexer_Token(ptr %a122) + %t123 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i32 0, i32 1 + %t125 = load i64, ptr %t124 + %t126 = icmp eq i64 %t125, 1 + br i1 %t126, label %then1491, label %endif1493 +then1491: + %t127 = load ptr, ptr %a1 + %t128 = load ptr, ptr %a1 + %t129 = call %S.lexer.Token @finch.parser.cur(ptr %t128) + call void @finch.parser.fail(ptr %t127, %S.lexer.Token %t129, { ptr, i64, i64 } { ptr @.str.822, i64 30, i64 0 }) + store %S.lexer.Token %t129, ptr %a130 + call void @finch.drop.S_lexer_Token(ptr %a130) + br label %endif1493 +endif1493: + %t131 = load %S.ast.Node, ptr %a5 + ret %S.ast.Node %t131 +} + +define internal { ptr, i64, i64 } @finch.parser.parseTParams(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.lexer.Token, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca %S.lexer.Token, align 16 + %a23 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.823, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.824, i64 3, i64 0 }) + store %S.lexer.Token %t4, ptr %a5 + call void @finch.drop.S_lexer_Token(ptr %a5) + br label %while.cond1494 +while.cond1494: + br label %while.body1495 +while.body1495: + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t7 = load ptr, ptr %a1 + %t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.825, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.826, i64 29, i64 0 }) + %t9 = extractvalue %S.lexer.Token %t8, 1 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store %S.lexer.Token %t8, ptr %a13 + call void @finch.drop.S_lexer_Token(ptr %a13) + %t14 = load i64, ptr %t6 + %t15 = add i64 %t14, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t15, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t16 = load ptr, ptr %a2 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 %t14 + store { ptr, i64, i64 } %t12, ptr %t17 + store i64 %t15, ptr %t6 + %t18 = load ptr, ptr %a1 + %t19 = call i1 @finch.parser.accept(ptr %t18, { ptr, i64, i64 } { ptr @.str.827, i64 1, i64 0 }) + %t20 = xor i1 %t19, true + br i1 %t20, label %then1497, label %endif1499 +then1497: + br label %while.end1496 +endif1499: + br label %while.cond1494 +while.end1496: + %t21 = load ptr, ptr %a1 + %t22 = call %S.lexer.Token @finch.parser.expect(ptr %t21, { ptr, i64, i64 } { ptr @.str.828, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.829, i64 29, i64 0 }) + store %S.lexer.Token %t22, ptr %a23 + call void @finch.drop.S_lexer_Token(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a2 + ret { ptr, i64, i64 } %t24 +} + +define internal %S.ast.Node @finch.parser.parseStruct(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca %S.lexer.Token, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca %S.lexer.Token, align 16 + %a36 = alloca %S.lexer.Token, align 16 + %a39 = alloca %S.ast.Node, align 16 + %a49 = alloca %S.lexer.Token, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca %S.ast.Type, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca %S.lexer.Token, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca %S.ast.Node, align 16 + %a91 = alloca %S.ast.Node, align 16 + %a100 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.830, i64 6, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.831, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.832, i64 8, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.833, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.834, i64 13, i64 0 }) + %t10 = extractvalue %S.lexer.Token %t9, 1 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store %S.lexer.Token %t9, ptr %a14 + call void @finch.drop.S_lexer_Token(ptr %a14) + %t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t13, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load ptr, ptr %a1 + %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.835, i64 1, i64 0 }) + br i1 %t19, label %then1500, label %endif1502 +then1500: + %t20 = load ptr, ptr %a1 + %t21 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t20) + %t22 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t21, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch.drop.arr_str(ptr %a24) + br label %endif1502 +endif1502: + %t25 = load ptr, ptr %a1 + %t26 = call %S.lexer.Token @finch.parser.expect(ptr %t25, { ptr, i64, i64 } { ptr @.str.836, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.837, i64 3, i64 0 }) + store %S.lexer.Token %t26, ptr %a27 + call void @finch.drop.S_lexer_Token(ptr %a27) + br label %while.cond1503 +while.cond1503: + %t28 = load ptr, ptr %a1 + %t29 = call i1 @finch.parser.at(ptr %t28, { ptr, i64, i64 } { ptr @.str.838, i64 1, i64 0 }) + %t30 = xor i1 %t29, true + br i1 %t30, label %while.body1504, label %while.end1505 +while.body1504: + %t31 = load ptr, ptr %a1 + %t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.839, i64 3, i64 0 }) + br i1 %t32, label %then1506, label %endif1508 +then1506: + %t33 = load ptr, ptr %a1 + %t34 = load ptr, ptr %a1 + %t35 = call %S.lexer.Token @finch.parser.cur(ptr %t34) + call void @finch.parser.fail(ptr %t33, %S.lexer.Token %t35, { ptr, i64, i64 } { ptr @.str.840, i64 38, i64 0 }) + store %S.lexer.Token %t35, ptr %a36 + call void @finch.drop.S_lexer_Token(ptr %a36) + br label %endif1508 +endif1508: + %t37 = load ptr, ptr %a1 + %t38 = call %S.ast.Node @finch.parser.node(ptr %t37, { ptr, i64, i64 } { ptr @.str.841, i64 5, i64 0 }) + store %S.ast.Node %t38, ptr %a39 + %t40 = load ptr, ptr %a1 + %t41 = call i1 @finch.parser.atDeclaration(ptr %t40) + %t42 = xor i1 %t41, true + br i1 %t42, label %then1509, label %endif1511 +then1509: + %t43 = load ptr, ptr %a1 + %t44 = load ptr, ptr %a1 + %t45 = call %S.lexer.Token @finch.parser.cur(ptr %t44) + %t46 = load ptr, ptr %a1 + %t47 = call %S.lexer.Token @finch.parser.cur(ptr %t46) + %t48 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t47) + store %S.lexer.Token %t47, ptr %a49 + call void @finch.drop.S_lexer_Token(ptr %a49) + store { ptr, i64, i64 } { ptr @.str.842, i64 11, i64 0 }, ptr %a51 + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.843, i64 28, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + call void @finch.parser.fail(ptr %t43, %S.lexer.Token %t45, { ptr, i64, i64 } %t59) + store %S.lexer.Token %t45, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + store { ptr, i64, i64 } %t59, ptr %a61 + call void @finch_str_drop(ptr %a61) + br label %endif1511 +endif1511: + %t62 = load ptr, ptr %a1 + %t63 = call %S.ast.Type @finch.parser.parseType(ptr %t62) + %t64 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 5 + %t65 = load %S.ast.Type, ptr %t64 + store %S.ast.Type %t63, ptr %t64 + store %S.ast.Type %t65, ptr %a66 + call void @finch.drop.S_ast_Type(ptr %a66) + %t67 = load ptr, ptr %a1 + %t68 = call %S.lexer.Token @finch.parser.expect(ptr %t67, { ptr, i64, i64 } { ptr @.str.844, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.845, i64 12, i64 0 }) + %t69 = extractvalue %S.lexer.Token %t68, 1 + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_copy(ptr %a71, ptr %a70) + %t72 = load { ptr, i64, i64 }, ptr %a71 + store %S.lexer.Token %t68, ptr %a73 + call void @finch.drop.S_lexer_Token(ptr %a73) + %t74 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + store { ptr, i64, i64 } %t72, ptr %t74 + store { ptr, i64, i64 } %t75, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load ptr, ptr %a1 + %t78 = call i1 @finch.parser.accept(ptr %t77, { ptr, i64, i64 } { ptr @.str.846, i64 1, i64 0 }) + br i1 %t78, label %then1512, label %endif1514 +then1512: + %t79 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 9 + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 + %t81 = load ptr, ptr %a1 + %t82 = call %S.ast.Node @finch.parser.parseExpr(ptr %t81) + %t83 = load i64, ptr %t80 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %t79, i64 %t84, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %t79 + %t86 = getelementptr inbounds %S.ast.Node, ptr %t85, i64 %t83 + store %S.ast.Node %t82, ptr %t86 + store i64 %t84, ptr %t80 + br label %endif1514 +endif1514: + %t87 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 + %t89 = load %S.ast.Node, ptr %a39 + store %S.ast.Node %t89, ptr %a90 + call void @finch.copy.S_ast_Node(ptr %a91, ptr %a90) + %t92 = load %S.ast.Node, ptr %a91 + %t93 = load i64, ptr %t88 + %t94 = add i64 %t93, 1 + call void @finch_arr_reserve(ptr %t87, i64 %t94, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t95 = load ptr, ptr %t87 + %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 %t93 + store %S.ast.Node %t92, ptr %t96 + store i64 %t94, ptr %t88 + %t97 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t97) + call void @finch.drop.S_ast_Node(ptr %a39) + br label %while.cond1503 +while.end1505: + %t98 = load ptr, ptr %a1 + %t99 = call %S.lexer.Token @finch.parser.next(ptr %t98) + store %S.lexer.Token %t99, ptr %a100 + call void @finch.drop.S_lexer_Token(ptr %a100) + %t101 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t101 +} + +define internal %S.ast.Node @finch.parser.parseFn(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.lexer.Token, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca %S.lexer.Token, align 16 + %a26 = alloca %S.lexer.Token, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca %S.lexer.Token, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca %S.lexer.Token, align 16 + %a77 = alloca %S.ast.Node, align 16 + %a82 = alloca %S.ast.Type, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca %S.lexer.Token, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca %S.ast.Node, align 16 + %a97 = alloca %S.ast.Node, align 16 + %a113 = alloca %S.lexer.Token, align 16 + %a117 = alloca %S.ast.Type, align 16 + %a127 = alloca %S.ast.Type, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca %S.lexer.Token, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca %S.lexer.Token, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.847, i64 2, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call i1 @finch.parser.accept(ptr %t5, { ptr, i64, i64 } { ptr @.str.848, i64 6, i64 0 }) + %t7 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 8 + store i1 %t6, ptr %t7 + %t8 = load ptr, ptr %a1 + %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.849, i64 5, i64 0 }) + br label %logic.from1515 +logic.from1515: + br i1 %t9, label %logic.rhs1516, label %logic.end1517 +logic.rhs1516: + %t10 = load ptr, ptr %a1 + %t11 = call %S.lexer.Token @finch.parser.cur(ptr %t10) + %t12 = extractvalue %S.lexer.Token %t11, 1 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store %S.lexer.Token %t11, ptr %a16 + call void @finch.drop.S_lexer_Token(ptr %a16) + %t17 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_drop(ptr %a18) + br label %logic.rend1518 +logic.rend1518: + br label %logic.end1517 +logic.end1517: + %t19 = phi i1 [ false, %logic.from1515 ], [ %t17, %logic.rend1518 ] + br i1 %t19, label %then1519, label %endif1521 +then1519: + %t20 = load ptr, ptr %a1 + %t21 = load ptr, ptr %a1 + %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) + call void @finch.parser.fail(ptr %t20, %S.lexer.Token %t22, { ptr, i64, i64 } { ptr @.str.850, i64 68, i64 0 }) + store %S.lexer.Token %t22, ptr %a23 + call void @finch.drop.S_lexer_Token(ptr %a23) + br label %endif1521 +endif1521: + %t24 = load ptr, ptr %a1 + %t25 = call %S.lexer.Token @finch.parser.expect(ptr %t24, { ptr, i64, i64 } { ptr @.str.851, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.852, i64 26, i64 0 }) + store %S.lexer.Token %t25, ptr %a26 + call void @finch.drop.S_lexer_Token(ptr %a26) + %t27 = load ptr, ptr %a1 + %t28 = call %S.lexer.Token @finch.parser.expect(ptr %t27, { ptr, i64, i64 } { ptr @.str.853, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.854, i64 15, i64 0 }) + %t29 = extractvalue %S.lexer.Token %t28, 1 + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_copy(ptr %a31, ptr %a30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store %S.lexer.Token %t28, ptr %a33 + call void @finch.drop.S_lexer_Token(ptr %a33) + %t34 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t32, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load ptr, ptr %a1 + %t38 = call i1 @finch.parser.at(ptr %t37, { ptr, i64, i64 } { ptr @.str.855, i64 1, i64 0 }) + br i1 %t38, label %then1522, label %endif1524 +then1522: + %t39 = load ptr, ptr %a1 + %t40 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t39) + %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t40, ptr %t41 + store { ptr, i64, i64 } %t42, ptr %a43 + call void @finch.drop.arr_str(ptr %a43) + br label %endif1524 +endif1524: + %t44 = load ptr, ptr %a1 + %t45 = call i1 @finch.parser.accept(ptr %t44, { ptr, i64, i64 } { ptr @.str.856, i64 1, i64 0 }) + br i1 %t45, label %then1525, label %endif1527 +then1525: + %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + %t48 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t47, ptr %a49 + call void @finch_str_copy(ptr %a50, ptr %a49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + %t52 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t51, ptr %t48 + store { ptr, i64, i64 } %t52, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load ptr, ptr %a1 + %t55 = call %S.lexer.Token @finch.parser.expect(ptr %t54, { ptr, i64, i64 } { ptr @.str.857, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.858, i64 13, i64 0 }) + %t56 = extractvalue %S.lexer.Token %t55, 1 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_copy(ptr %a58, ptr %a57) + %t59 = load { ptr, i64, i64 }, ptr %a58 + store %S.lexer.Token %t55, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + %t61 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t59, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_drop(ptr %a63) + br label %endif1527 +endif1527: + %t64 = load ptr, ptr %a1 + %t65 = call %S.lexer.Token @finch.parser.expect(ptr %t64, { ptr, i64, i64 } { ptr @.str.859, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.860, i64 3, i64 0 }) + store %S.lexer.Token %t65, ptr %a66 + call void @finch.drop.S_lexer_Token(ptr %a66) + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic1528, label %ok1529 +panic1528: + call void @finch_panic(ptr @.str.861, i64 446, ptr @.str.862) + unreachable +ok1529: + %t69 = getelementptr inbounds %S.parser.Parser, ptr %t67, i32 0, i32 2 + %t70 = load i64, ptr %t69 + %t71 = add i64 %t70, 1 + store i64 %t71, ptr %t69 + %t72 = load ptr, ptr %a1 + %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.863, i64 1, i64 0 }) + %t74 = xor i1 %t73, true + br i1 %t74, label %then1530, label %endif1532 +then1530: + br label %while.cond1533 +while.cond1533: + br label %while.body1534 +while.body1534: + %t75 = load ptr, ptr %a1 + %t76 = call %S.ast.Node @finch.parser.node(ptr %t75, { ptr, i64, i64 } { ptr @.str.864, i64 5, i64 0 }) + store %S.ast.Node %t76, ptr %a77 + %t78 = load ptr, ptr %a1 + %t79 = call %S.ast.Type @finch.parser.parseType(ptr %t78) + %t80 = getelementptr inbounds %S.ast.Node, ptr %a77, i32 0, i32 5 + %t81 = load %S.ast.Type, ptr %t80 + store %S.ast.Type %t79, ptr %t80 + store %S.ast.Type %t81, ptr %a82 + call void @finch.drop.S_ast_Type(ptr %a82) + %t83 = load ptr, ptr %a1 + %t84 = call %S.lexer.Token @finch.parser.expect(ptr %t83, { ptr, i64, i64 } { ptr @.str.865, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.866, i64 16, i64 0 }) + %t85 = extractvalue %S.lexer.Token %t84, 1 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_copy(ptr %a87, ptr %a86) + %t88 = load { ptr, i64, i64 }, ptr %a87 + store %S.lexer.Token %t84, ptr %a89 + call void @finch.drop.S_lexer_Token(ptr %a89) + %t90 = getelementptr inbounds %S.ast.Node, ptr %a77, i32 0, i32 1 + %t91 = load { ptr, i64, i64 }, ptr %t90 + store { ptr, i64, i64 } %t88, ptr %t90 + store { ptr, i64, i64 } %t91, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 + %t95 = load %S.ast.Node, ptr %a77 + store %S.ast.Node %t95, ptr %a96 + call void @finch.copy.S_ast_Node(ptr %a97, ptr %a96) + %t98 = load %S.ast.Node, ptr %a97 + %t99 = load i64, ptr %t94 + %t100 = add i64 %t99, 1 + call void @finch_arr_reserve(ptr %t93, i64 %t100, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t101 = load ptr, ptr %t93 + %t102 = getelementptr inbounds %S.ast.Node, ptr %t101, i64 %t99 + store %S.ast.Node %t98, ptr %t102 + store i64 %t100, ptr %t94 + %t103 = load ptr, ptr %a1 + %t104 = call i1 @finch.parser.accept(ptr %t103, { ptr, i64, i64 } { ptr @.str.867, i64 1, i64 0 }) + %t105 = xor i1 %t104, true + br i1 %t105, label %then1536, label %endif1538 +then1536: + call void @finch.drop.S_ast_Node(ptr %a77) + br label %while.end1535 +endif1538: + call void @finch.drop.S_ast_Node(ptr %a77) + br label %while.cond1533 +while.end1535: + br label %endif1532 +endif1532: + %t106 = load ptr, ptr %a1 + %t107 = icmp eq ptr %t106, null + br i1 %t107, label %panic1539, label %ok1540 +panic1539: + call void @finch_panic(ptr @.str.868, i64 458, ptr @.str.869) + unreachable +ok1540: + %t108 = getelementptr inbounds %S.parser.Parser, ptr %t106, i32 0, i32 2 + %t109 = load i64, ptr %t108 + %t110 = sub i64 %t109, 1 + store i64 %t110, ptr %t108 + %t111 = load ptr, ptr %a1 + %t112 = call %S.lexer.Token @finch.parser.expect(ptr %t111, { ptr, i64, i64 } { ptr @.str.870, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.871, i64 3, i64 0 }) + store %S.lexer.Token %t112, ptr %a113 + call void @finch.drop.S_lexer_Token(ptr %a113) + %t114 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.872, i64 4, i64 0 }) + %t115 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 + %t116 = load %S.ast.Type, ptr %t115 + store %S.ast.Type %t114, ptr %t115 + store %S.ast.Type %t116, ptr %a117 + call void @finch.drop.S_ast_Type(ptr %a117) + %t118 = load ptr, ptr %a1 + %t119 = call i1 @finch.parser.accept(ptr %t118, { ptr, i64, i64 } { ptr @.str.873, i64 2, i64 0 }) + br i1 %t119, label %then1541, label %endif1543 +then1541: + %t120 = load ptr, ptr %a1 + %t121 = call i1 @finch.parser.at(ptr %t120, { ptr, i64, i64 } { ptr @.str.874, i64 1, i64 0 }) + %t122 = xor i1 %t121, true + br i1 %t122, label %then1544, label %endif1546 +then1544: + %t123 = load ptr, ptr %a1 + %t124 = call %S.ast.Type @finch.parser.parseType(ptr %t123) + %t125 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 + %t126 = load %S.ast.Type, ptr %t125 + store %S.ast.Type %t124, ptr %t125 + store %S.ast.Type %t126, ptr %a127 + call void @finch.drop.S_ast_Type(ptr %a127) + br label %endif1546 +endif1546: + %t128 = load ptr, ptr %a1 + %t129 = call i1 @finch.parser.accept(ptr %t128, { ptr, i64, i64 } { ptr @.str.875, i64 1, i64 0 }) + %t130 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 + store i1 %t129, ptr %t130 + %t131 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 + %t132 = load i1, ptr %t131 + %t133 = xor i1 %t132, true + br label %logic.from1547 +logic.from1547: + br i1 %t133, label %logic.rhs1548, label %logic.end1549 +logic.rhs1548: + %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 + %t135 = getelementptr inbounds %S.ast.Type, ptr %t134, i32 0, i32 0 + %t136 = load { ptr, i64, i64 }, ptr %t135 + store { ptr, i64, i64 } %t136, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.876, i64 4, i64 0 }, ptr %a138 + %t139 = call i32 @finch_str_eq(ptr %a137, ptr %a138) + %t140 = icmp ne i32 %t139, 0 + br label %logic.rend1550 +logic.rend1550: + br label %logic.end1549 +logic.end1549: + %t141 = phi i1 [ false, %logic.from1547 ], [ %t140, %logic.rend1550 ] + br i1 %t141, label %then1551, label %endif1553 +then1551: + %t142 = load ptr, ptr %a1 + %t143 = load ptr, ptr %a1 + %t144 = call %S.lexer.Token @finch.parser.cur(ptr %t143) + %t145 = load ptr, ptr %a1 + %t146 = call %S.lexer.Token @finch.parser.cur(ptr %t145) + %t147 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t146) + store %S.lexer.Token %t146, ptr %a148 + call void @finch.drop.S_lexer_Token(ptr %a148) + store { ptr, i64, i64 } { ptr @.str.877, i64 11, i64 0 }, ptr %a150 + store { ptr, i64, i64 } %t147, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + store { ptr, i64, i64 } %t147, ptr %a152 + call void @finch_str_drop(ptr %a152) + %t153 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t153, ptr %a155 + store { ptr, i64, i64 } { ptr @.str.878, i64 61, i64 0 }, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + store { ptr, i64, i64 } %t153, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a154 + call void @finch.parser.fail(ptr %t142, %S.lexer.Token %t144, { ptr, i64, i64 } %t158) + store %S.lexer.Token %t144, ptr %a159 + call void @finch.drop.S_lexer_Token(ptr %a159) + store { ptr, i64, i64 } %t158, ptr %a160 + call void @finch_str_drop(ptr %a160) + br label %endif1553 +endif1553: + br label %endif1543 +endif1543: + %t161 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i32 0, i32 1 + %t163 = load ptr, ptr %a1 + %t164 = call %S.ast.Node @finch.parser.parseBlock(ptr %t163) + %t165 = load i64, ptr %t162 + %t166 = add i64 %t165, 1 + call void @finch_arr_reserve(ptr %t161, i64 %t166, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t167 = load ptr, ptr %t161 + %t168 = getelementptr inbounds %S.ast.Node, ptr %t167, i64 %t165 + store %S.ast.Node %t164, ptr %t168 + store i64 %t166, ptr %t162 + %t169 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t170 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 + %t172 = load i64, ptr %t171 + %t173 = sub i64 %t172, 1 + %t174 = load { ptr, i64, i64 }, ptr %t169 + %t175 = extractvalue { ptr, i64, i64 } %t174, 1 + %t176 = icmp uge i64 %t173, %t175 + br i1 %t176, label %range1554, label %inrange1555 +range1554: + call void @finch_panic_index(ptr @.str.879, i64 471, i64 %t173, i64 %t175) + unreachable +inrange1555: + %t177 = extractvalue { ptr, i64, i64 } %t174, 0 + %t178 = getelementptr inbounds %S.ast.Node, ptr %t177, i64 %t173 + %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i32 0, i32 14 + %t180 = load i64, ptr %t179 + %t181 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 + store i64 %t180, ptr %t181 + %t182 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t182 +} + +define internal %S.ast.Node @finch.parser.parseBlock(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + %a12 = alloca i64, align 16 + %a24 = alloca %S.lexer.Token, align 16 + %a41 = alloca %S.lexer.Token, align 16 + %a45 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.880, i64 5, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.881, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.882, i64 3, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic1556, label %ok1557 +panic1556: + call void @finch_panic(ptr @.str.883, i64 480, ptr @.str.884) + unreachable +ok1557: + %t10 = getelementptr inbounds %S.parser.Parser, ptr %t8, i32 0, i32 2 + %t11 = load i64, ptr %t10 + store i64 %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic1558, label %ok1559 +panic1558: + call void @finch_panic(ptr @.str.885, i64 481, ptr @.str.886) + unreachable +ok1559: + %t15 = getelementptr inbounds %S.parser.Parser, ptr %t13, i32 0, i32 2 + store i64 0, ptr %t15 + br label %while.cond1560 +while.cond1560: + %t16 = load ptr, ptr %a1 + %t17 = call i1 @finch.parser.at(ptr %t16, { ptr, i64, i64 } { ptr @.str.887, i64 1, i64 0 }) + %t18 = xor i1 %t17, true + br i1 %t18, label %while.body1561, label %while.end1562 +while.body1561: + %t19 = load ptr, ptr %a1 + %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.888, i64 3, i64 0 }) + br i1 %t20, label %then1563, label %endif1565 +then1563: + %t21 = load ptr, ptr %a1 + %t22 = load ptr, ptr %a1 + %t23 = call %S.lexer.Token @finch.parser.cur(ptr %t22) + call void @finch.parser.fail(ptr %t21, %S.lexer.Token %t23, { ptr, i64, i64 } { ptr @.str.889, i64 35, i64 0 }) + store %S.lexer.Token %t23, ptr %a24 + call void @finch.drop.S_lexer_Token(ptr %a24) + br label %endif1565 +endif1565: + %t25 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 + %t27 = load ptr, ptr %a1 + %t28 = call %S.ast.Node @finch.parser.parseStatement(ptr %t27) + %t29 = load i64, ptr %t26 + %t30 = add i64 %t29, 1 + call void @finch_arr_reserve(ptr %t25, i64 %t30, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t31 = load ptr, ptr %t25 + %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 %t29 + store %S.ast.Node %t28, ptr %t32 + store i64 %t30, ptr %t26 + %t33 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t33) + br label %while.cond1560 +while.end1562: + %t34 = load i64, ptr %a12 + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic1566, label %ok1567 +panic1566: + call void @finch_panic(ptr @.str.890, i64 489, ptr @.str.891) + unreachable +ok1567: + %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 2 + store i64 %t34, ptr %t37 + %t38 = load ptr, ptr %a1 + %t39 = call %S.lexer.Token @finch.parser.cur(ptr %t38) + %t40 = extractvalue %S.lexer.Token %t39, 2 + store %S.lexer.Token %t39, ptr %a41 + call void @finch.drop.S_lexer_Token(ptr %a41) + %t42 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 + store i64 %t40, ptr %t42 + %t43 = load ptr, ptr %a1 + %t44 = call %S.lexer.Token @finch.parser.next(ptr %t43) + store %S.lexer.Token %t44, ptr %a45 + call void @finch.drop.S_lexer_Token(ptr %a45) + %t46 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t46 +} + +define internal %S.ast.Node @finch.parser.parseStatement(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Node, align 16 + %a22 = alloca %S.lexer.Token, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca %S.ast.Node, align 16 + %a50 = alloca %S.lexer.Token, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca %S.lexer.Token, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca %S.lexer.Token, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca %S.lexer.Token, align 16 + %a93 = alloca %S.lexer.Token, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.ast.Node, align 16 + %a131 = alloca %S.lexer.Token, align 16 + %a138 = alloca %S.lexer.Token, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca %S.ast.Node, align 16 + %a167 = alloca %S.lexer.Token, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca %S.ast.Node, align 16 + %a186 = alloca %S.lexer.Token, align 16 + %a192 = alloca %S.lexer.Token, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca %S.lexer.Token, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca %S.ast.Node, align 16 + %a250 = alloca %S.ast.Type, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca %S.lexer.Token, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca %S.ast.Node, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca %S.lexer.Token, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca %S.lexer.Token, align 16 + %a309 = alloca %S.lexer.Token, align 16 + %a312 = alloca %S.ast.Node, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca i64, align 16 + %a331 = alloca i64, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca %S.ast.Node, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca %S.lexer.Token, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca %S.ast.Node, align 16 + %a396 = alloca %S.ast.Node, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca %S.ast.Node, align 16 + %a456 = alloca %S.ast.Node, align 16 + %a457 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t2) + store { ptr, i64, i64 } %t3, ptr %a4 + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.892, i64 2, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then1568, label %endif1570 +then1568: + %t10 = load ptr, ptr %a1 + %t11 = call %S.ast.Node @finch.parser.parseIf(ptr %t10) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t11 +endif1570: + %t12 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.893, i64 5, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %then1571, label %endif1573 +then1571: + %t17 = load ptr, ptr %a1 + %t18 = call %S.ast.Node @finch.parser.node(ptr %t17, { ptr, i64, i64 } { ptr @.str.894, i64 5, i64 0 }) + store %S.ast.Node %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = call %S.lexer.Token @finch.parser.next(ptr %t20) + store %S.lexer.Token %t21, ptr %a22 + call void @finch.drop.S_lexer_Token(ptr %a22) + %t23 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 + %t25 = load ptr, ptr %a1 + %t26 = call %S.ast.Node @finch.parser.parseExpr(ptr %t25) + %t27 = load i64, ptr %t24 + %t28 = add i64 %t27, 1 + call void @finch_arr_reserve(ptr %t23, i64 %t28, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t29 = load ptr, ptr %t23 + %t30 = getelementptr inbounds %S.ast.Node, ptr %t29, i64 %t27 + store %S.ast.Node %t26, ptr %t30 + store i64 %t28, ptr %t24 + %t31 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t33 = load ptr, ptr %a1 + %t34 = call %S.ast.Node @finch.parser.parseBlock(ptr %t33) + %t35 = load i64, ptr %t32 + %t36 = add i64 %t35, 1 + call void @finch_arr_reserve(ptr %t31, i64 %t36, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t37 = load ptr, ptr %t31 + %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t35 + store %S.ast.Node %t34, ptr %t38 + store i64 %t36, ptr %t32 + %t39 = load %S.ast.Node, ptr %a19 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t39 +endif1573: + %t40 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.895, i64 3, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then1574, label %endif1576 +then1574: + %t45 = load ptr, ptr %a1 + %t46 = call %S.ast.Node @finch.parser.node(ptr %t45, { ptr, i64, i64 } { ptr @.str.896, i64 3, i64 0 }) + store %S.ast.Node %t46, ptr %a47 + %t48 = load ptr, ptr %a1 + %t49 = call %S.lexer.Token @finch.parser.next(ptr %t48) + store %S.lexer.Token %t49, ptr %a50 + call void @finch.drop.S_lexer_Token(ptr %a50) + %t51 = load ptr, ptr %a1 + %t52 = call %S.lexer.Token @finch.parser.expect(ptr %t51, { ptr, i64, i64 } { ptr @.str.897, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.898, i64 20, i64 0 }) + %t53 = extractvalue %S.lexer.Token %t52, 1 + store { ptr, i64, i64 } %t53, ptr %a54 + call void @finch_str_copy(ptr %a55, ptr %a54) + %t56 = load { ptr, i64, i64 }, ptr %a55 + store %S.lexer.Token %t52, ptr %a57 + call void @finch.drop.S_lexer_Token(ptr %a57) + %t58 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 1 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } %t56, ptr %t58 + store { ptr, i64, i64 } %t59, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load ptr, ptr %a1 + %t62 = call i1 @finch.parser.accept(ptr %t61, { ptr, i64, i64 } { ptr @.str.899, i64 1, i64 0 }) + br i1 %t62, label %then1577, label %endif1579 +then1577: + %t63 = load ptr, ptr %a1 + %t64 = call %S.lexer.Token @finch.parser.expect(ptr %t63, { ptr, i64, i64 } { ptr @.str.900, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.901, i64 27, i64 0 }) + %t65 = extractvalue %S.lexer.Token %t64, 1 + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_copy(ptr %a67, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store %S.lexer.Token %t64, ptr %a69 + call void @finch.drop.S_lexer_Token(ptr %a69) + %t70 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 + %t71 = load { ptr, i64, i64 }, ptr %t70 + store { ptr, i64, i64 } %t68, ptr %t70 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_drop(ptr %a72) + br label %endif1579 +endif1579: + %t73 = load ptr, ptr %a1 + %t74 = call %S.lexer.Token @finch.parser.expect(ptr %t73, { ptr, i64, i64 } { ptr @.str.902, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.903, i64 4, i64 0 }) + store %S.lexer.Token %t74, ptr %a75 + call void @finch.drop.S_lexer_Token(ptr %a75) + %t76 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = load ptr, ptr %a1 + %t79 = call %S.ast.Node @finch.parser.parseExpr(ptr %t78) + %t80 = load i64, ptr %t77 + %t81 = add i64 %t80, 1 + call void @finch_arr_reserve(ptr %t76, i64 %t81, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t82 = load ptr, ptr %t76 + %t83 = getelementptr inbounds %S.ast.Node, ptr %t82, i64 %t80 + store %S.ast.Node %t79, ptr %t83 + store i64 %t81, ptr %t77 + %t84 = load ptr, ptr %a1 + %t85 = call i1 @finch.parser.accept(ptr %t84, { ptr, i64, i64 } { ptr @.str.904, i64 2, i64 0 }) + br i1 %t85, label %then1580, label %else1581 +then1580: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load i64, ptr %t87 + %t89 = icmp sgt i64 %t88, 0 + br i1 %t89, label %then1583, label %endif1585 +then1583: + %t90 = load ptr, ptr %a1 + %t91 = load ptr, ptr %a1 + %t92 = call %S.lexer.Token @finch.parser.cur(ptr %t91) + call void @finch.parser.fail(ptr %t90, %S.lexer.Token %t92, { ptr, i64, i64 } { ptr @.str.905, i64 55, i64 0 }) + store %S.lexer.Token %t92, ptr %a93 + call void @finch.drop.S_lexer_Token(ptr %a93) + br label %endif1585 +endif1585: + %t94 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load ptr, ptr %a1 + %t97 = call %S.ast.Node @finch.parser.parseExpr(ptr %t96) + %t98 = load i64, ptr %t95 + %t99 = add i64 %t98, 1 + call void @finch_arr_reserve(ptr %t94, i64 %t99, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t100 = load ptr, ptr %t94 + %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 + store %S.ast.Node %t97, ptr %t101 + store i64 %t99, ptr %t95 + br label %endif1582 +else1581: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 0 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } { ptr @.str.906, i64 4, i64 0 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch_str_drop(ptr %a104) + br label %endif1582 +endif1582: + %t105 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t105, i32 0, i32 1 + %t107 = load ptr, ptr %a1 + %t108 = call %S.ast.Node @finch.parser.parseBlock(ptr %t107) + %t109 = load i64, ptr %t106 + %t110 = add i64 %t109, 1 + call void @finch_arr_reserve(ptr %t105, i64 %t110, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t111 = load ptr, ptr %t105 + %t112 = getelementptr inbounds %S.ast.Node, ptr %t111, i64 %t109 + store %S.ast.Node %t108, ptr %t112 + store i64 %t110, ptr %t106 + %t113 = load %S.ast.Node, ptr %a47 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t113 +endif1576: + %t114 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.907, i64 5, i64 0 }, ptr %a116 + %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) + %t118 = icmp ne i32 %t117, 0 + br i1 %t118, label %then1586, label %endif1588 +then1586: + %t119 = load ptr, ptr %a1 + %t120 = call %S.ast.Node @finch.parser.parseMatch(ptr %t119, i1 false) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t120 +endif1588: + %t121 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.908, i64 6, i64 0 }, ptr %a123 + %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) + %t125 = icmp ne i32 %t124, 0 + br i1 %t125, label %then1589, label %endif1591 +then1589: + %t126 = load ptr, ptr %a1 + %t127 = call %S.ast.Node @finch.parser.node(ptr %t126, { ptr, i64, i64 } { ptr @.str.909, i64 6, i64 0 }) + store %S.ast.Node %t127, ptr %a128 + %t129 = load ptr, ptr %a1 + %t130 = call %S.lexer.Token @finch.parser.next(ptr %t129) + store %S.lexer.Token %t130, ptr %a131 + call void @finch.drop.S_lexer_Token(ptr %a131) + %t132 = load ptr, ptr %a1 + %t133 = call i1 @finch.parser.at(ptr %t132, { ptr, i64, i64 } { ptr @.str.910, i64 1, i64 0 }) + %t134 = xor i1 %t133, true + br label %logic.from1592 +logic.from1592: + br i1 %t134, label %logic.rhs1593, label %logic.end1594 +logic.rhs1593: + %t135 = load ptr, ptr %a1 + %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) + %t137 = extractvalue %S.lexer.Token %t136, 4 + store %S.lexer.Token %t136, ptr %a138 + call void @finch.drop.S_lexer_Token(ptr %a138) + %t139 = xor i1 %t137, true + br label %logic.rend1595 +logic.rend1595: + br label %logic.end1594 +logic.end1594: + %t140 = phi i1 [ false, %logic.from1592 ], [ %t139, %logic.rend1595 ] + br i1 %t140, label %then1596, label %endif1598 +then1596: + %t141 = getelementptr inbounds %S.ast.Node, ptr %a128, i32 0, i32 9 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 + %t143 = load ptr, ptr %a1 + %t144 = call %S.ast.Node @finch.parser.parseExpr(ptr %t143) + %t145 = load i64, ptr %t142 + %t146 = add i64 %t145, 1 + call void @finch_arr_reserve(ptr %t141, i64 %t146, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t147 = load ptr, ptr %t141 + %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 %t145 + store %S.ast.Node %t144, ptr %t148 + store i64 %t146, ptr %t142 + br label %endif1598 +endif1598: + %t149 = load %S.ast.Node, ptr %a128 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t149 +endif1591: + %t150 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t150, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.911, i64 5, i64 0 }, ptr %a152 + %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) + %t154 = icmp ne i32 %t153, 0 + br label %logic.from1599 +logic.from1599: + br i1 %t154, label %logic.end1601, label %logic.rhs1600 +logic.rhs1600: + %t155 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t155, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.912, i64 8, i64 0 }, ptr %a157 + %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) + %t159 = icmp ne i32 %t158, 0 + br label %logic.rend1602 +logic.rend1602: + br label %logic.end1601 +logic.end1601: + %t160 = phi i1 [ true, %logic.from1599 ], [ %t159, %logic.rend1602 ] + br i1 %t160, label %then1603, label %endif1605 +then1603: + %t161 = load ptr, ptr %a1 + %t162 = load { ptr, i64, i64 }, ptr %a4 + %t163 = call %S.ast.Node @finch.parser.node(ptr %t161, { ptr, i64, i64 } %t162) + store %S.ast.Node %t163, ptr %a164 + %t165 = load ptr, ptr %a1 + %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) + store %S.lexer.Token %t166, ptr %a167 + call void @finch.drop.S_lexer_Token(ptr %a167) + %t168 = load %S.ast.Node, ptr %a164 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t168 +endif1605: + %t169 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t169, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.913, i64 1, i64 0 }, ptr %a171 + %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) + %t173 = icmp ne i32 %t172, 0 + br i1 %t173, label %then1606, label %endif1608 +then1606: + %t174 = load ptr, ptr %a1 + %t175 = call %S.ast.Node @finch.parser.parseBlock(ptr %t174) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t175 +endif1608: + %t176 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.914, i64 5, i64 0 }, ptr %a178 + %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %then1609, label %endif1611 +then1609: + %t181 = load ptr, ptr %a1 + %t182 = call %S.ast.Node @finch.parser.node(ptr %t181, { ptr, i64, i64 } { ptr @.str.915, i64 5, i64 0 }) + store %S.ast.Node %t182, ptr %a183 + %t184 = load ptr, ptr %a1 + %t185 = call %S.lexer.Token @finch.parser.next(ptr %t184) + store %S.lexer.Token %t185, ptr %a186 + call void @finch.drop.S_lexer_Token(ptr %a186) + %t187 = load ptr, ptr %a1 + %t188 = call i1 @finch.parser.at(ptr %t187, { ptr, i64, i64 } { ptr @.str.916, i64 5, i64 0 }) + br i1 %t188, label %then1612, label %endif1614 +then1612: + %t189 = load ptr, ptr %a1 + %t190 = load ptr, ptr %a1 + %t191 = call %S.lexer.Token @finch.parser.cur(ptr %t190) + call void @finch.parser.fail(ptr %t189, %S.lexer.Token %t191, { ptr, i64, i64 } { ptr @.str.917, i64 33, i64 0 }) + store %S.lexer.Token %t191, ptr %a192 + call void @finch.drop.S_lexer_Token(ptr %a192) + br label %endif1614 +endif1614: + %t193 = getelementptr inbounds %S.ast.Node, ptr %a183, i32 0, i32 9 + %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t193, i32 0, i32 1 + %t195 = load ptr, ptr %a1 + %t196 = call %S.ast.Node @finch.parser.parseStatement(ptr %t195) + %t197 = load i64, ptr %t194 + %t198 = add i64 %t197, 1 + call void @finch_arr_reserve(ptr %t193, i64 %t198, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t199 = load ptr, ptr %t193 + %t200 = getelementptr inbounds %S.ast.Node, ptr %t199, i64 %t197 + store %S.ast.Node %t196, ptr %t200 + store i64 %t198, ptr %t194 + %t201 = load %S.ast.Node, ptr %a183 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t201 +endif1611: + %t202 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t202, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.918, i64 2, i64 0 }, ptr %a204 + %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) + %t206 = icmp ne i32 %t205, 0 + br label %logic.from1615 +logic.from1615: + br i1 %t206, label %logic.end1617, label %logic.rhs1616 +logic.rhs1616: + %t207 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t207, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.919, i64 6, i64 0 }, ptr %a209 + %t210 = call i32 @finch_str_eq(ptr %a208, ptr %a209) + %t211 = icmp ne i32 %t210, 0 + br label %logic.rend1618 +logic.rend1618: + br label %logic.end1617 +logic.end1617: + %t212 = phi i1 [ true, %logic.from1615 ], [ %t211, %logic.rend1618 ] + br label %logic.from1619 +logic.from1619: + br i1 %t212, label %logic.end1621, label %logic.rhs1620 +logic.rhs1620: + %t213 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t213, ptr %a214 + store { ptr, i64, i64 } { ptr @.str.920, i64 6, i64 0 }, ptr %a215 + %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) + %t217 = icmp ne i32 %t216, 0 + br label %logic.rend1622 +logic.rend1622: + br label %logic.end1621 +logic.end1621: + %t218 = phi i1 [ true, %logic.from1619 ], [ %t217, %logic.rend1622 ] + br label %logic.from1623 +logic.from1623: + br i1 %t218, label %logic.end1625, label %logic.rhs1624 +logic.rhs1624: + %t219 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t219, ptr %a220 + store { ptr, i64, i64 } { ptr @.str.921, i64 4, i64 0 }, ptr %a221 + %t222 = call i32 @finch_str_eq(ptr %a220, ptr %a221) + %t223 = icmp ne i32 %t222, 0 + br label %logic.rend1626 +logic.rend1626: + br label %logic.end1625 +logic.end1625: + %t224 = phi i1 [ true, %logic.from1623 ], [ %t223, %logic.rend1626 ] + br i1 %t224, label %then1627, label %endif1629 +then1627: + %t225 = load ptr, ptr %a1 + %t226 = load ptr, ptr %a1 + %t227 = call %S.lexer.Token @finch.parser.cur(ptr %t226) + %t228 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.922, i64 1, i64 0 }, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.923, i64 48, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + store { ptr, i64, i64 } %t232, ptr %a236 + call void @finch_str_drop(ptr %a236) + %t237 = load { ptr, i64, i64 }, ptr %a233 + call void @finch.parser.fail(ptr %t225, %S.lexer.Token %t227, { ptr, i64, i64 } %t237) + store %S.lexer.Token %t227, ptr %a238 + call void @finch.drop.S_lexer_Token(ptr %a238) + store { ptr, i64, i64 } %t237, ptr %a239 + call void @finch_str_drop(ptr %a239) + br label %endif1629 +endif1629: + %t240 = load ptr, ptr %a1 + %t241 = call i1 @finch.parser.atDeclaration(ptr %t240) + br i1 %t241, label %then1630, label %endif1632 +then1630: + %t242 = load ptr, ptr %a1 + %t243 = call %S.ast.Node @finch.parser.node(ptr %t242, { ptr, i64, i64 } { ptr @.str.924, i64 4, i64 0 }) + store %S.ast.Node %t243, ptr %a244 + %t245 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 6 + store i1 true, ptr %t245 + %t246 = load ptr, ptr %a1 + %t247 = call %S.ast.Type @finch.parser.parseType(ptr %t246) + %t248 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 5 + %t249 = load %S.ast.Type, ptr %t248 + store %S.ast.Type %t247, ptr %t248 + store %S.ast.Type %t249, ptr %a250 + call void @finch.drop.S_ast_Type(ptr %a250) + %t251 = load ptr, ptr %a1 + %t252 = call %S.lexer.Token @finch.parser.expect(ptr %t251, { ptr, i64, i64 } { ptr @.str.925, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.926, i64 15, i64 0 }) + %t253 = extractvalue %S.lexer.Token %t252, 1 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_copy(ptr %a255, ptr %a254) + %t256 = load { ptr, i64, i64 }, ptr %a255 + store %S.lexer.Token %t252, ptr %a257 + call void @finch.drop.S_lexer_Token(ptr %a257) + %t258 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 1 + %t259 = load { ptr, i64, i64 }, ptr %t258 + store { ptr, i64, i64 } %t256, ptr %t258 + store { ptr, i64, i64 } %t259, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load ptr, ptr %a1 + %t262 = call i1 @finch.parser.accept(ptr %t261, { ptr, i64, i64 } { ptr @.str.927, i64 1, i64 0 }) + br i1 %t262, label %then1633, label %endif1635 +then1633: + %t263 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 9 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + %t265 = load ptr, ptr %a1 + %t266 = call %S.ast.Node @finch.parser.parseExpr(ptr %t265) + %t267 = load i64, ptr %t264 + %t268 = add i64 %t267, 1 + call void @finch_arr_reserve(ptr %t263, i64 %t268, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t269 = load ptr, ptr %t263 + %t270 = getelementptr inbounds %S.ast.Node, ptr %t269, i64 %t267 + store %S.ast.Node %t266, ptr %t270 + store i64 %t268, ptr %t264 + br label %endif1635 +endif1635: + %t271 = load %S.ast.Node, ptr %a244 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t271 +endif1632: + %t272 = load ptr, ptr %a1 + %t273 = call i1 @finch.parser.at(ptr %t272, { ptr, i64, i64 } { ptr @.str.928, i64 5, i64 0 }) + br label %logic.from1636 +logic.from1636: + br i1 %t273, label %logic.rhs1637, label %logic.end1638 +logic.rhs1637: + %t274 = load ptr, ptr %a1 + %t275 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t274, i64 1) + store { ptr, i64, i64 } %t275, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.929, i64 2, i64 0 }, ptr %a277 + %t278 = call i32 @finch_str_eq(ptr %a276, ptr %a277) + %t279 = icmp ne i32 %t278, 0 + store { ptr, i64, i64 } %t275, ptr %a280 + call void @finch_str_drop(ptr %a280) + br label %logic.rend1639 +logic.rend1639: + br label %logic.end1638 +logic.end1638: + %t281 = phi i1 [ false, %logic.from1636 ], [ %t279, %logic.rend1639 ] + br i1 %t281, label %then1640, label %endif1642 +then1640: + %t282 = load ptr, ptr %a1 + %t283 = call %S.ast.Node @finch.parser.node(ptr %t282, { ptr, i64, i64 } { ptr @.str.930, i64 4, i64 0 }) + store %S.ast.Node %t283, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = call %S.lexer.Token @finch.parser.next(ptr %t285) + %t287 = extractvalue %S.lexer.Token %t286, 1 + store { ptr, i64, i64 } %t287, ptr %a288 + call void @finch_str_copy(ptr %a289, ptr %a288) + %t290 = load { ptr, i64, i64 }, ptr %a289 + store %S.lexer.Token %t286, ptr %a291 + call void @finch.drop.S_lexer_Token(ptr %a291) + %t292 = getelementptr inbounds %S.ast.Node, ptr %a284, i32 0, i32 1 + %t293 = load { ptr, i64, i64 }, ptr %t292 + store { ptr, i64, i64 } %t290, ptr %t292 + store { ptr, i64, i64 } %t293, ptr %a294 + call void @finch_str_drop(ptr %a294) + %t295 = load ptr, ptr %a1 + %t296 = call %S.lexer.Token @finch.parser.next(ptr %t295) + store %S.lexer.Token %t296, ptr %a297 + call void @finch.drop.S_lexer_Token(ptr %a297) + %t298 = getelementptr inbounds %S.ast.Node, ptr %a284, i32 0, i32 9 + %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i32 0, i32 1 + %t300 = load ptr, ptr %a1 + %t301 = call %S.ast.Node @finch.parser.parseExpr(ptr %t300) + %t302 = load i64, ptr %t299 + %t303 = add i64 %t302, 1 + call void @finch_arr_reserve(ptr %t298, i64 %t303, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t304 = load ptr, ptr %t298 + %t305 = getelementptr inbounds %S.ast.Node, ptr %t304, i64 %t302 + store %S.ast.Node %t301, ptr %t305 + store i64 %t303, ptr %t299 + %t306 = load %S.ast.Node, ptr %a284 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t306 +endif1642: + %t307 = load ptr, ptr %a1 + %t308 = call %S.lexer.Token @finch.parser.cur(ptr %t307) + store %S.lexer.Token %t308, ptr %a309 + %t310 = load ptr, ptr %a1 + %t311 = call %S.ast.Node @finch.parser.parseExpr(ptr %t310) + store %S.ast.Node %t311, ptr %a312 + %t313 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t314 = call ptr @finch_alloc(i64 %t313) + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 0 + store { ptr, i64, i64 } { ptr @.str.931, i64 1, i64 0 }, ptr %t315 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 1 + store { ptr, i64, i64 } { ptr @.str.932, i64 2, i64 0 }, ptr %t316 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 2 + store { ptr, i64, i64 } { ptr @.str.933, i64 2, i64 0 }, ptr %t317 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 3 + store { ptr, i64, i64 } { ptr @.str.934, i64 2, i64 0 }, ptr %t318 + %t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 4 + store { ptr, i64, i64 } { ptr @.str.935, i64 2, i64 0 }, ptr %t319 + %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 5 + store { ptr, i64, i64 } { ptr @.str.936, i64 2, i64 0 }, ptr %t320 + %t321 = insertvalue { ptr, i64, i64 } undef, ptr %t314, 0 + %t322 = insertvalue { ptr, i64, i64 } %t321, i64 6, 1 + %t323 = insertvalue { ptr, i64, i64 } %t322, i64 6, 2 + store { ptr, i64, i64 } %t323, ptr %a324 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a324, i32 0, i32 1 + %t326 = load ptr, ptr %a1 + %t327 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t326) + store i64 -1, ptr %a328 + %t329 = load i64, ptr %t325 + %t330 = load ptr, ptr %a324 + store i64 0, ptr %a331 + br label %find.cond1643 +find.cond1643: + %t332 = load i64, ptr %a331 + %t333 = icmp slt i64 %t332, %t329 + br i1 %t333, label %find.body1644, label %find.end1647 +find.body1644: + %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t330, i64 %t332 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t335, ptr %a336 + store { ptr, i64, i64 } %t327, ptr %a337 + %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) + %t339 = icmp ne i32 %t338, 0 + br i1 %t339, label %find.hit1645, label %find.next1646 +find.hit1645: + store i64 %t332, ptr %a328 + br label %find.end1647 +find.next1646: + %t340 = add i64 %t332, 1 + store i64 %t340, ptr %a331 + br label %find.cond1643 +find.end1647: + store { ptr, i64, i64 } %t327, ptr %a341 + call void @finch_str_drop(ptr %a341) + %t342 = load i64, ptr %a328 + %t343 = icmp sge i64 %t342, 0 + br label %logic.from1648 +logic.from1648: + br i1 %t343, label %logic.rhs1649, label %logic.end1650 +logic.rhs1649: + %t344 = load ptr, ptr %a1 + %t345 = call i1 @finch.parser.sameLine(ptr %t344) + br label %logic.rend1651 +logic.rend1651: + br label %logic.end1650 +logic.end1650: + %t346 = phi i1 [ false, %logic.from1648 ], [ %t345, %logic.rend1651 ] + br i1 %t346, label %then1652, label %endif1654 +then1652: + %t347 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t348 = load { ptr, i64, i64 }, ptr %t347 + store { ptr, i64, i64 } %t348, ptr %a349 + store { ptr, i64, i64 } { ptr @.str.937, i64 3, i64 0 }, ptr %a350 + %t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350) + %t352 = icmp eq i32 %t351, 0 + br label %logic.from1655 +logic.from1655: + br i1 %t352, label %logic.rhs1656, label %logic.end1657 +logic.rhs1656: + %t353 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t354 = load { ptr, i64, i64 }, ptr %t353 + store { ptr, i64, i64 } %t354, ptr %a355 + store { ptr, i64, i64 } { ptr @.str.938, i64 6, i64 0 }, ptr %a356 + %t357 = call i32 @finch_str_eq(ptr %a355, ptr %a356) + %t358 = icmp eq i32 %t357, 0 + br label %logic.rend1658 +logic.rend1658: + br label %logic.end1657 +logic.end1657: + %t359 = phi i1 [ false, %logic.from1655 ], [ %t358, %logic.rend1658 ] + br label %logic.from1659 +logic.from1659: + br i1 %t359, label %logic.rhs1660, label %logic.end1661 +logic.rhs1660: + %t360 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t361 = load { ptr, i64, i64 }, ptr %t360 + store { ptr, i64, i64 } %t361, ptr %a362 + store { ptr, i64, i64 } { ptr @.str.939, i64 5, i64 0 }, ptr %a363 + %t364 = call i32 @finch_str_eq(ptr %a362, ptr %a363) + %t365 = icmp eq i32 %t364, 0 + br label %logic.rend1662 +logic.rend1662: + br label %logic.end1661 +logic.end1661: + %t366 = phi i1 [ false, %logic.from1659 ], [ %t365, %logic.rend1662 ] + br i1 %t366, label %then1663, label %endif1665 +then1663: + %t367 = load ptr, ptr %a1 + %t368 = load %S.lexer.Token, ptr %a309 + call void @finch.parser.fail(ptr %t367, %S.lexer.Token %t368, { ptr, i64, i64 } { ptr @.str.940, i64 66, i64 0 }) + br label %endif1665 +endif1665: + %t369 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.941, i64 6, i64 0 }, 0 + %t370 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 + %t371 = load i64, ptr %t370 + %t372 = insertvalue %S.ast.Node %t369, i64 %t371, 11 + %t373 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 3 + %t374 = load i64, ptr %t373 + %t375 = insertvalue %S.ast.Node %t372, i64 %t374, 12 + %t376 = load ptr, ptr %a1 + %t377 = icmp eq ptr %t376, null + br i1 %t377, label %panic1666, label %ok1667 +panic1666: + call void @finch_panic(ptr @.str.942, i64 584, ptr @.str.943) + unreachable +ok1667: + %t378 = getelementptr inbounds %S.parser.Parser, ptr %t376, i32 0, i32 3 + %t379 = load i64, ptr %t378 + %t380 = insertvalue %S.ast.Node %t375, i64 %t379, 13 + store %S.ast.Node %t380, ptr %a381 + %t382 = load ptr, ptr %a1 + %t383 = call %S.lexer.Token @finch.parser.next(ptr %t382) + %t384 = extractvalue %S.lexer.Token %t383, 0 + store { ptr, i64, i64 } %t384, ptr %a385 + call void @finch_str_copy(ptr %a386, ptr %a385) + %t387 = load { ptr, i64, i64 }, ptr %a386 + store %S.lexer.Token %t383, ptr %a388 + call void @finch.drop.S_lexer_Token(ptr %a388) + %t389 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 1 + %t390 = load { ptr, i64, i64 }, ptr %t389 + store { ptr, i64, i64 } %t387, ptr %t389 + store { ptr, i64, i64 } %t390, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 9 + %t393 = getelementptr inbounds { ptr, i64, i64 }, ptr %t392, i32 0, i32 1 + %t394 = load %S.ast.Node, ptr %a312 + store %S.ast.Node %t394, ptr %a395 + call void @finch.copy.S_ast_Node(ptr %a396, ptr %a395) + %t397 = load %S.ast.Node, ptr %a396 + %t398 = load i64, ptr %t393 + %t399 = add i64 %t398, 1 + call void @finch_arr_reserve(ptr %t392, i64 %t399, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t400 = load ptr, ptr %t392 + %t401 = getelementptr inbounds %S.ast.Node, ptr %t400, i64 %t398 + store %S.ast.Node %t397, ptr %t401 + store i64 %t399, ptr %t393 + %t402 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 9 + %t403 = getelementptr inbounds { ptr, i64, i64 }, ptr %t402, i32 0, i32 1 + %t404 = load ptr, ptr %a1 + %t405 = call %S.ast.Node @finch.parser.parseExpr(ptr %t404) + %t406 = load i64, ptr %t403 + %t407 = add i64 %t406, 1 + call void @finch_arr_reserve(ptr %t402, i64 %t407, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t408 = load ptr, ptr %t402 + %t409 = getelementptr inbounds %S.ast.Node, ptr %t408, i64 %t406 + store %S.ast.Node %t405, ptr %t409 + store i64 %t407, ptr %t403 + %t410 = load %S.ast.Node, ptr %a381 + call void @finch.drop.arr_str(ptr %a324) + call void @finch.drop.S_ast_Node(ptr %a312) + call void @finch.drop.S_lexer_Token(ptr %a309) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t410 +endif1654: + %t411 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t412 = load { ptr, i64, i64 }, ptr %t411 + store { ptr, i64, i64 } %t412, ptr %a413 + store { ptr, i64, i64 } { ptr @.str.944, i64 4, i64 0 }, ptr %a414 + %t415 = call i32 @finch_str_eq(ptr %a413, ptr %a414) + %t416 = icmp eq i32 %t415, 0 + br label %logic.from1668 +logic.from1668: + br i1 %t416, label %logic.rhs1669, label %logic.end1670 +logic.rhs1669: + %t417 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t418 = load { ptr, i64, i64 }, ptr %t417 + store { ptr, i64, i64 } %t418, ptr %a419 + store { ptr, i64, i64 } { ptr @.str.945, i64 6, i64 0 }, ptr %a420 + %t421 = call i32 @finch_str_eq(ptr %a419, ptr %a420) + %t422 = icmp eq i32 %t421, 0 + br label %logic.rend1671 +logic.rend1671: + br label %logic.end1670 +logic.end1670: + %t423 = phi i1 [ false, %logic.from1668 ], [ %t422, %logic.rend1671 ] + br label %logic.from1672 +logic.from1672: + br i1 %t423, label %logic.rhs1673, label %logic.end1674 +logic.rhs1673: + %t424 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t425 = load { ptr, i64, i64 }, ptr %t424 + store { ptr, i64, i64 } %t425, ptr %a426 + store { ptr, i64, i64 } { ptr @.str.946, i64 3, i64 0 }, ptr %a427 + %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) + %t429 = icmp eq i32 %t428, 0 + br label %logic.rend1675 +logic.rend1675: + br label %logic.end1674 +logic.end1674: + %t430 = phi i1 [ false, %logic.from1672 ], [ %t429, %logic.rend1675 ] + br label %logic.from1676 +logic.from1676: + br i1 %t430, label %logic.rhs1677, label %logic.end1678 +logic.rhs1677: + %t431 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t432 = load { ptr, i64, i64 }, ptr %t431 + store { ptr, i64, i64 } %t432, ptr %a433 + store { ptr, i64, i64 } { ptr @.str.947, i64 2, i64 0 }, ptr %a434 + %t435 = call i32 @finch_str_eq(ptr %a433, ptr %a434) + %t436 = icmp eq i32 %t435, 0 + br label %logic.rend1679 +logic.rend1679: + br label %logic.end1678 +logic.end1678: + %t437 = phi i1 [ false, %logic.from1676 ], [ %t436, %logic.rend1679 ] + br i1 %t437, label %then1680, label %endif1682 +then1680: + %t438 = load ptr, ptr %a1 + %t439 = load %S.lexer.Token, ptr %a309 + call void @finch.parser.fail(ptr %t438, %S.lexer.Token %t439, { ptr, i64, i64 } { ptr @.str.948, i64 37, i64 0 }) + br label %endif1682 +endif1682: + %t440 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.949, i64 4, i64 0 }, 0 + %t441 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 + %t442 = load i64, ptr %t441 + %t443 = insertvalue %S.ast.Node %t440, i64 %t442, 11 + %t444 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 3 + %t445 = load i64, ptr %t444 + %t446 = insertvalue %S.ast.Node %t443, i64 %t445, 12 + %t447 = load ptr, ptr %a1 + %t448 = icmp eq ptr %t447, null + br i1 %t448, label %panic1683, label %ok1684 +panic1683: + call void @finch_panic(ptr @.str.950, i64 593, ptr @.str.951) + unreachable +ok1684: + %t449 = getelementptr inbounds %S.parser.Parser, ptr %t447, i32 0, i32 3 + %t450 = load i64, ptr %t449 + %t451 = insertvalue %S.ast.Node %t446, i64 %t450, 13 + store %S.ast.Node %t451, ptr %a452 + %t453 = getelementptr inbounds %S.ast.Node, ptr %a452, i32 0, i32 9 + %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i32 0, i32 1 + %t455 = load %S.ast.Node, ptr %a312 + store %S.ast.Node %t455, ptr %a456 + call void @finch.copy.S_ast_Node(ptr %a457, ptr %a456) + %t458 = load %S.ast.Node, ptr %a457 + %t459 = load i64, ptr %t454 + %t460 = add i64 %t459, 1 + call void @finch_arr_reserve(ptr %t453, i64 %t460, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t461 = load ptr, ptr %t453 + %t462 = getelementptr inbounds %S.ast.Node, ptr %t461, i64 %t459 + store %S.ast.Node %t458, ptr %t462 + store i64 %t460, ptr %t454 + %t463 = load %S.ast.Node, ptr %a452 + call void @finch.drop.arr_str(ptr %a324) + call void @finch.drop.S_ast_Node(ptr %a312) + call void @finch.drop.S_lexer_Token(ptr %a309) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t463 +} + +define internal %S.ast.Node @finch.parser.parseIf(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.952, i64 2, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.953, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.954, i64 4, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load ptr, ptr %a1 + %t11 = call %S.ast.Node @finch.parser.parseExpr(ptr %t10) + %t12 = load i64, ptr %t9 + %t13 = add i64 %t12, 1 + call void @finch_arr_reserve(ptr %t8, i64 %t13, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t14 = load ptr, ptr %t8 + %t15 = getelementptr inbounds %S.ast.Node, ptr %t14, i64 %t12 + store %S.ast.Node %t11, ptr %t15 + store i64 %t13, ptr %t9 + %t16 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 + %t18 = load ptr, ptr %a1 + %t19 = call %S.ast.Node @finch.parser.parseBlock(ptr %t18) + %t20 = load i64, ptr %t17 + %t21 = add i64 %t20, 1 + call void @finch_arr_reserve(ptr %t16, i64 %t21, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t22 = load ptr, ptr %t16 + %t23 = getelementptr inbounds %S.ast.Node, ptr %t22, i64 %t20 + store %S.ast.Node %t19, ptr %t23 + store i64 %t21, ptr %t17 + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.accept(ptr %t24, { ptr, i64, i64 } { ptr @.str.955, i64 4, i64 0 }) + br i1 %t25, label %then1685, label %endif1687 +then1685: + %t26 = load ptr, ptr %a1 + %t27 = call i1 @finch.parser.at(ptr %t26, { ptr, i64, i64 } { ptr @.str.956, i64 2, i64 0 }) + br i1 %t27, label %then1688, label %else1689 +then1688: + %t28 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 + %t30 = load ptr, ptr %a1 + %t31 = call %S.ast.Node @finch.parser.parseIf(ptr %t30) + %t32 = load i64, ptr %t29 + %t33 = add i64 %t32, 1 + call void @finch_arr_reserve(ptr %t28, i64 %t33, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t34 = load ptr, ptr %t28 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 + store %S.ast.Node %t31, ptr %t35 + store i64 %t33, ptr %t29 + br label %endif1690 +else1689: + %t36 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 + %t38 = load ptr, ptr %a1 + %t39 = call %S.ast.Node @finch.parser.parseBlock(ptr %t38) + %t40 = load i64, ptr %t37 + %t41 = add i64 %t40, 1 + call void @finch_arr_reserve(ptr %t36, i64 %t41, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t42 = load ptr, ptr %t36 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 + store %S.ast.Node %t39, ptr %t43 + store i64 %t41, ptr %t37 + br label %endif1690 +endif1690: + br label %endif1687 +endif1687: + %t44 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t44 +} + +define internal i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.957, i64 2, i64 0 }, ptr %a4 + %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) + %t6 = icmp ne i32 %t5, 0 + br i1 %t6, label %then1691, label %endif1693 +then1691: + ret i64 1 +endif1693: + %t7 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.958, i64 2, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then1694, label %endif1696 +then1694: + ret i64 2 +endif1696: + %t12 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.959, i64 2, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from1697 +logic.from1697: + br i1 %t16, label %logic.end1699, label %logic.rhs1698 +logic.rhs1698: + %t17 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.960, i64 2, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + br label %logic.rend1700 +logic.rend1700: + br label %logic.end1699 +logic.end1699: + %t22 = phi i1 [ true, %logic.from1697 ], [ %t21, %logic.rend1700 ] + br label %logic.from1701 +logic.from1701: + br i1 %t22, label %logic.end1703, label %logic.rhs1702 +logic.rhs1702: + %t23 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.961, i64 1, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.rend1704 +logic.rend1704: + br label %logic.end1703 +logic.end1703: + %t28 = phi i1 [ true, %logic.from1701 ], [ %t27, %logic.rend1704 ] + br label %logic.from1705 +logic.from1705: + br i1 %t28, label %logic.end1707, label %logic.rhs1706 +logic.rhs1706: + %t29 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.962, i64 2, i64 0 }, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br label %logic.rend1708 +logic.rend1708: + br label %logic.end1707 +logic.end1707: + %t34 = phi i1 [ true, %logic.from1705 ], [ %t33, %logic.rend1708 ] + br label %logic.from1709 +logic.from1709: + br i1 %t34, label %logic.end1711, label %logic.rhs1710 +logic.rhs1710: + %t35 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.963, i64 1, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.rend1712 +logic.rend1712: + br label %logic.end1711 +logic.end1711: + %t40 = phi i1 [ true, %logic.from1709 ], [ %t39, %logic.rend1712 ] + br label %logic.from1713 +logic.from1713: + br i1 %t40, label %logic.end1715, label %logic.rhs1714 +logic.rhs1714: + %t41 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.964, i64 2, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.rend1716 +logic.rend1716: + br label %logic.end1715 +logic.end1715: + %t46 = phi i1 [ true, %logic.from1713 ], [ %t45, %logic.rend1716 ] + br i1 %t46, label %then1717, label %endif1719 +then1717: + ret i64 3 +endif1719: + %t47 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t47, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.965, i64 1, i64 0 }, ptr %a49 + %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) + %t51 = icmp ne i32 %t50, 0 + br label %logic.from1720 +logic.from1720: + br i1 %t51, label %logic.end1722, label %logic.rhs1721 +logic.rhs1721: + %t52 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.966, i64 1, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br label %logic.rend1723 +logic.rend1723: + br label %logic.end1722 +logic.end1722: + %t57 = phi i1 [ true, %logic.from1720 ], [ %t56, %logic.rend1723 ] + br label %logic.from1724 +logic.from1724: + br i1 %t57, label %logic.end1726, label %logic.rhs1725 +logic.rhs1725: + %t58 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t58, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.967, i64 1, i64 0 }, ptr %a60 + %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) + %t62 = icmp ne i32 %t61, 0 + br label %logic.rend1727 +logic.rend1727: + br label %logic.end1726 +logic.end1726: + %t63 = phi i1 [ true, %logic.from1724 ], [ %t62, %logic.rend1727 ] + br label %logic.from1728 +logic.from1728: + br i1 %t63, label %logic.end1730, label %logic.rhs1729 +logic.rhs1729: + %t64 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.968, i64 1, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp ne i32 %t67, 0 + br label %logic.rend1731 +logic.rend1731: + br label %logic.end1730 +logic.end1730: + %t69 = phi i1 [ true, %logic.from1728 ], [ %t68, %logic.rend1731 ] + br i1 %t69, label %then1732, label %endif1734 +then1732: + ret i64 4 +endif1734: + %t70 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t70, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.969, i64 1, i64 0 }, ptr %a72 + %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) + %t74 = icmp ne i32 %t73, 0 + br label %logic.from1735 +logic.from1735: + br i1 %t74, label %logic.end1737, label %logic.rhs1736 +logic.rhs1736: + %t75 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t75, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.970, i64 1, i64 0 }, ptr %a77 + %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) + %t79 = icmp ne i32 %t78, 0 + br label %logic.rend1738 +logic.rend1738: + br label %logic.end1737 +logic.end1737: + %t80 = phi i1 [ true, %logic.from1735 ], [ %t79, %logic.rend1738 ] + br label %logic.from1739 +logic.from1739: + br i1 %t80, label %logic.end1741, label %logic.rhs1740 +logic.rhs1740: + %t81 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.971, i64 1, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.rend1742 +logic.rend1742: + br label %logic.end1741 +logic.end1741: + %t86 = phi i1 [ true, %logic.from1739 ], [ %t85, %logic.rend1742 ] + br label %logic.from1743 +logic.from1743: + br i1 %t86, label %logic.end1745, label %logic.rhs1744 +logic.rhs1744: + %t87 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t87, ptr %a88 + store { ptr, i64, i64 } { ptr @.str.972, i64 2, i64 0 }, ptr %a89 + %t90 = call i32 @finch_str_eq(ptr %a88, ptr %a89) + %t91 = icmp ne i32 %t90, 0 + br label %logic.rend1746 +logic.rend1746: + br label %logic.end1745 +logic.end1745: + %t92 = phi i1 [ true, %logic.from1743 ], [ %t91, %logic.rend1746 ] + br label %logic.from1747 +logic.from1747: + br i1 %t92, label %logic.end1749, label %logic.rhs1748 +logic.rhs1748: + %t93 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t93, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.973, i64 2, i64 0 }, ptr %a95 + %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) + %t97 = icmp ne i32 %t96, 0 + br label %logic.rend1750 +logic.rend1750: + br label %logic.end1749 +logic.end1749: + %t98 = phi i1 [ true, %logic.from1747 ], [ %t97, %logic.rend1750 ] + br label %logic.from1751 +logic.from1751: + br i1 %t98, label %logic.end1753, label %logic.rhs1752 +logic.rhs1752: + %t99 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t99, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.974, i64 1, i64 0 }, ptr %a101 + %t102 = call i32 @finch_str_eq(ptr %a100, ptr %a101) + %t103 = icmp ne i32 %t102, 0 + br label %logic.rend1754 +logic.rend1754: + br label %logic.end1753 +logic.end1753: + %t104 = phi i1 [ true, %logic.from1751 ], [ %t103, %logic.rend1754 ] + br i1 %t104, label %then1755, label %endif1757 +then1755: + ret i64 5 +endif1757: + ret i64 0 +} + +define internal %S.ast.Node @finch.parser.parseExpr(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a15 = alloca %S.ast.Node, align 16 + %a18 = alloca %S.lexer.Token, align 16 + %a22 = alloca %S.ast.Node, align 16 + %a23 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.parseBinary(ptr %t2, i64 1) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call i1 @finch.parser.sameLine(ptr %t5) + %t7 = xor i1 %t6, true + br label %logic.from1758 +logic.from1758: + br i1 %t7, label %logic.end1760, label %logic.rhs1759 +logic.rhs1759: + %t8 = load ptr, ptr %a1 + %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.975, i64 2, i64 0 }) + %t10 = xor i1 %t9, true + br label %logic.rend1761 +logic.rend1761: + br label %logic.end1760 +logic.end1760: + %t11 = phi i1 [ true, %logic.from1758 ], [ %t10, %logic.rend1761 ] + br i1 %t11, label %then1762, label %endif1764 +then1762: + %t12 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t12 +endif1764: + %t13 = load ptr, ptr %a1 + %t14 = call %S.ast.Node @finch.parser.node(ptr %t13, { ptr, i64, i64 } { ptr @.str.976, i64 2, i64 0 }) + store %S.ast.Node %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = call %S.lexer.Token @finch.parser.next(ptr %t16) + store %S.lexer.Token %t17, ptr %a18 + call void @finch.drop.S_lexer_Token(ptr %a18) + %t19 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t21, ptr %a22 + call void @finch.copy.S_ast_Node(ptr %a23, ptr %a22) + %t24 = load %S.ast.Node, ptr %a23 + %t25 = load i64, ptr %t20 + %t26 = add i64 %t25, 1 + call void @finch_arr_reserve(ptr %t19, i64 %t26, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t27 = load ptr, ptr %t19 + %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 %t25 + store %S.ast.Node %t24, ptr %t28 + store i64 %t26, ptr %t20 + %t29 = load ptr, ptr %a1 + %t30 = call i1 @finch.parser.at(ptr %t29, { ptr, i64, i64 } { ptr @.str.977, i64 1, i64 0 }) + br i1 %t30, label %then1765, label %else1766 +then1765: + %t31 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 6 + store i1 true, ptr %t31 + %t32 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i32 0, i32 1 + %t34 = load ptr, ptr %a1 + %t35 = call %S.ast.Node @finch.parser.parseBlock(ptr %t34) + %t36 = load i64, ptr %t33 + %t37 = add i64 %t36, 1 + call void @finch_arr_reserve(ptr %t32, i64 %t37, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t38 = load ptr, ptr %t32 + %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 %t36 + store %S.ast.Node %t35, ptr %t39 + store i64 %t37, ptr %t33 + br label %endif1767 +else1766: + %t40 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load ptr, ptr %a1 + %t43 = call %S.ast.Node @finch.parser.parseExpr(ptr %t42) + %t44 = load i64, ptr %t41 + %t45 = add i64 %t44, 1 + call void @finch_arr_reserve(ptr %t40, i64 %t45, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t46 = load ptr, ptr %t40 + %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 + store %S.ast.Node %t43, ptr %t47 + store i64 %t45, ptr %t41 + br label %endif1767 +endif1767: + %t48 = load %S.ast.Node, ptr %a15 + call void @finch.drop.S_ast_Node(ptr %a4) + ret %S.ast.Node %t48 +} + +define internal %S.ast.Node @finch.parser.parseBinary(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca %S.ast.Node, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.lexer.Token, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca %S.ast.Node, align 16 + %a38 = alloca %S.ast.Node, align 16 + %a55 = alloca %S.ast.Node, align 16 + %a56 = alloca %S.ast.Node, align 16 + %a59 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load i64, ptr %a2 + %t4 = icmp sgt i64 %t3, 5 + br i1 %t4, label %then1768, label %endif1770 +then1768: + %t5 = load ptr, ptr %a1 + %t6 = call %S.ast.Node @finch.parser.parseUnary(ptr %t5) + ret %S.ast.Node %t6 +endif1770: + %t7 = load ptr, ptr %a1 + %t8 = load i64, ptr %a2 + %t9 = add i64 %t8, 1 + %t10 = call %S.ast.Node @finch.parser.parseBinary(ptr %t7, i64 %t9) + store %S.ast.Node %t10, ptr %a11 + br label %while.cond1771 +while.cond1771: + %t12 = load ptr, ptr %a1 + %t13 = call i1 @finch.parser.sameLine(ptr %t12) + br label %logic.from1774 +logic.from1774: + br i1 %t13, label %logic.rhs1775, label %logic.end1776 +logic.rhs1775: + %t14 = load ptr, ptr %a1 + %t15 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t14) + %t16 = call i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load i64, ptr %a2 + %t19 = icmp eq i64 %t16, %t18 + br label %logic.rend1777 +logic.rend1777: + br label %logic.end1776 +logic.end1776: + %t20 = phi i1 [ false, %logic.from1774 ], [ %t19, %logic.rend1777 ] + br i1 %t20, label %while.body1772, label %while.end1773 +while.body1772: + %t21 = load ptr, ptr %a1 + %t22 = call %S.ast.Node @finch.parser.node(ptr %t21, { ptr, i64, i64 } { ptr @.str.978, i64 6, i64 0 }) + store %S.ast.Node %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = call %S.lexer.Token @finch.parser.next(ptr %t24) + %t26 = extractvalue %S.lexer.Token %t25, 0 + store { ptr, i64, i64 } %t26, ptr %a27 + call void @finch_str_copy(ptr %a28, ptr %a27) + %t29 = load { ptr, i64, i64 }, ptr %a28 + store %S.lexer.Token %t25, ptr %a30 + call void @finch.drop.S_lexer_Token(ptr %a30) + %t31 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t29, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 9 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 + %t36 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t36, ptr %a37 + call void @finch.copy.S_ast_Node(ptr %a38, ptr %a37) + %t39 = load %S.ast.Node, ptr %a38 + %t40 = load i64, ptr %t35 + %t41 = add i64 %t40, 1 + call void @finch_arr_reserve(ptr %t34, i64 %t41, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t42 = load ptr, ptr %t34 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 + store %S.ast.Node %t39, ptr %t43 + store i64 %t41, ptr %t35 + %t44 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 9 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 + %t46 = load ptr, ptr %a1 + %t47 = load i64, ptr %a2 + %t48 = add i64 %t47, 1 + %t49 = call %S.ast.Node @finch.parser.parseBinary(ptr %t46, i64 %t48) + %t50 = load i64, ptr %t45 + %t51 = add i64 %t50, 1 + call void @finch_arr_reserve(ptr %t44, i64 %t51, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t52 = load ptr, ptr %t44 + %t53 = getelementptr inbounds %S.ast.Node, ptr %t52, i64 %t50 + store %S.ast.Node %t49, ptr %t53 + store i64 %t51, ptr %t45 + %t54 = load %S.ast.Node, ptr %a23 + store %S.ast.Node %t54, ptr %a55 + call void @finch.copy.S_ast_Node(ptr %a56, ptr %a55) + %t57 = load %S.ast.Node, ptr %a56 + %t58 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t57, ptr %a11 + store %S.ast.Node %t58, ptr %a59 + call void @finch.drop.S_ast_Node(ptr %a59) + call void @finch.drop.S_ast_Node(ptr %a23) + br label %while.cond1771 +while.end1773: + %t60 = load %S.ast.Node, ptr %a11 + ret %S.ast.Node %t60 +} + +define internal %S.ast.Node @finch.parser.parseUnary(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca %S.ast.Node, align 16 + %a9 = alloca %S.lexer.Token, align 16 + %a29 = alloca %S.ast.Node, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca %S.lexer.Token, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.979, i64 3, i64 0 }) + br i1 %t3, label %then1778, label %endif1780 +then1778: + %t4 = load ptr, ptr %a1 + %t5 = call %S.ast.Node @finch.parser.node(ptr %t4, { ptr, i64, i64 } { ptr @.str.980, i64 3, i64 0 }) + store %S.ast.Node %t5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = call %S.lexer.Token @finch.parser.next(ptr %t7) + store %S.lexer.Token %t8, ptr %a9 + call void @finch.drop.S_lexer_Token(ptr %a9) + %t10 = getelementptr inbounds %S.ast.Node, ptr %a6, i32 0, i32 9 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load ptr, ptr %a1 + %t13 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t12) + %t14 = load i64, ptr %t11 + %t15 = add i64 %t14, 1 + call void @finch_arr_reserve(ptr %t10, i64 %t15, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t16 = load ptr, ptr %t10 + %t17 = getelementptr inbounds %S.ast.Node, ptr %t16, i64 %t14 + store %S.ast.Node %t13, ptr %t17 + store i64 %t15, ptr %t11 + %t18 = load %S.ast.Node, ptr %a6 + ret %S.ast.Node %t18 +endif1780: + %t19 = load ptr, ptr %a1 + %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.981, i64 1, i64 0 }) + br label %logic.from1781 +logic.from1781: + br i1 %t20, label %logic.end1783, label %logic.rhs1782 +logic.rhs1782: + %t21 = load ptr, ptr %a1 + %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 }) + br label %logic.rend1784 +logic.rend1784: + br label %logic.end1783 +logic.end1783: + %t23 = phi i1 [ true, %logic.from1781 ], [ %t22, %logic.rend1784 ] + br label %logic.from1785 +logic.from1785: + br i1 %t23, label %logic.end1787, label %logic.rhs1786 +logic.rhs1786: + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.983, i64 1, i64 0 }) + br label %logic.rend1788 +logic.rend1788: + br label %logic.end1787 +logic.end1787: + %t26 = phi i1 [ true, %logic.from1785 ], [ %t25, %logic.rend1788 ] + br i1 %t26, label %then1789, label %endif1791 +then1789: + %t27 = load ptr, ptr %a1 + %t28 = call %S.ast.Node @finch.parser.node(ptr %t27, { ptr, i64, i64 } { ptr @.str.984, i64 5, i64 0 }) + store %S.ast.Node %t28, ptr %a29 + %t30 = load ptr, ptr %a1 + %t31 = call %S.lexer.Token @finch.parser.next(ptr %t30) + %t32 = extractvalue %S.lexer.Token %t31, 0 + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_copy(ptr %a34, ptr %a33) + %t35 = load { ptr, i64, i64 }, ptr %a34 + store %S.lexer.Token %t31, ptr %a36 + call void @finch.drop.S_lexer_Token(ptr %a36) + %t37 = getelementptr inbounds %S.ast.Node, ptr %a29, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t35, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = getelementptr inbounds %S.ast.Node, ptr %a29, i32 0, i32 9 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load ptr, ptr %a1 + %t43 = call %S.ast.Node @finch.parser.parseUnary(ptr %t42) + %t44 = load i64, ptr %t41 + %t45 = add i64 %t44, 1 + call void @finch_arr_reserve(ptr %t40, i64 %t45, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t46 = load ptr, ptr %t40 + %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 + store %S.ast.Node %t43, ptr %t47 + store i64 %t45, ptr %t41 + %t48 = load %S.ast.Node, ptr %a29 + ret %S.ast.Node %t48 +endif1791: + %t49 = load ptr, ptr %a1 + %t50 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t49) + ret %S.ast.Node %t50 +} + +define internal void @finch.parser.parseArgs(ptr %p0, ptr %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca ptr, align 16 + %a5 = alloca %S.lexer.Token, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.lexer.Token, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca %S.lexer.Token, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + store ptr %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.985, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.986, i64 3, i64 0 }) + store %S.lexer.Token %t4, ptr %a5 + call void @finch.drop.S_lexer_Token(ptr %a5) + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1792, label %ok1793 +panic1792: + call void @finch_panic(ptr @.str.987, i64 686, ptr @.str.988) + unreachable +ok1793: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 2 + %t9 = load i64, ptr %t8 + %t10 = add i64 %t9, 1 + store i64 %t10, ptr %t8 + %t11 = load ptr, ptr %a1 + %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.989, i64 1, i64 0 }) + %t13 = xor i1 %t12, true + br i1 %t13, label %then1794, label %endif1796 +then1794: + br label %while.cond1797 +while.cond1797: + %t14 = load ptr, ptr %a1 + %t15 = call i1 @finch.parser.at(ptr %t14, { ptr, i64, i64 } { ptr @.str.990, i64 1, i64 0 }) + %t16 = xor i1 %t15, true + br i1 %t16, label %while.body1798, label %while.end1799 +while.body1798: + store { ptr, i64, i64 } { ptr @.str.991, i64 0, i64 0 }, ptr %a17 + %t18 = load ptr, ptr %a1 + %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.992, i64 5, i64 0 }) + br label %logic.from1800 +logic.from1800: + br i1 %t19, label %logic.rhs1801, label %logic.end1802 +logic.rhs1801: + %t20 = load ptr, ptr %a1 + %t21 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t20, i64 1) + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.993, i64 1, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + store { ptr, i64, i64 } %t21, ptr %a26 + call void @finch_str_drop(ptr %a26) + br label %logic.rend1803 +logic.rend1803: + br label %logic.end1802 +logic.end1802: + %t27 = phi i1 [ false, %logic.from1800 ], [ %t25, %logic.rend1803 ] + br i1 %t27, label %then1804, label %endif1806 +then1804: + %t28 = load ptr, ptr %a1 + %t29 = call %S.lexer.Token @finch.parser.next(ptr %t28) + %t30 = extractvalue %S.lexer.Token %t29, 1 + store { ptr, i64, i64 } %t30, ptr %a31 + call void @finch_str_copy(ptr %a32, ptr %a31) + %t33 = load { ptr, i64, i64 }, ptr %a32 + store %S.lexer.Token %t29, ptr %a34 + call void @finch.drop.S_lexer_Token(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t33, ptr %a17 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load ptr, ptr %a1 + %t38 = call %S.lexer.Token @finch.parser.next(ptr %t37) + store %S.lexer.Token %t38, ptr %a39 + call void @finch.drop.S_lexer_Token(ptr %a39) + br label %endif1806 +endif1806: + %t40 = load ptr, ptr %a2 + %t41 = icmp eq ptr %t40, null + br i1 %t41, label %panic1807, label %ok1808 +panic1807: + call void @finch_panic(ptr @.str.994, i64 694, ptr @.str.995) + unreachable +ok1808: + %t42 = getelementptr inbounds %S.ast.Node, ptr %t40, i32 0, i32 10 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 + %t44 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_copy(ptr %a46, ptr %a45) + %t47 = load { ptr, i64, i64 }, ptr %a46 + %t48 = load i64, ptr %t43 + %t49 = add i64 %t48, 1 + call void @finch_arr_reserve(ptr %t42, i64 %t49, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t50 = load ptr, ptr %t42 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 + store { ptr, i64, i64 } %t47, ptr %t51 + store i64 %t49, ptr %t43 + %t52 = load ptr, ptr %a2 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic1809, label %ok1810 +panic1809: + call void @finch_panic(ptr @.str.996, i64 695, ptr @.str.997) + unreachable +ok1810: + %t54 = getelementptr inbounds %S.ast.Node, ptr %t52, i32 0, i32 9 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 + %t56 = load ptr, ptr %a1 + %t57 = call %S.ast.Node @finch.parser.parseExpr(ptr %t56) + %t58 = load i64, ptr %t55 + %t59 = add i64 %t58, 1 + call void @finch_arr_reserve(ptr %t54, i64 %t59, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t60 = load ptr, ptr %t54 + %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i64 %t58 + store %S.ast.Node %t57, ptr %t61 + store i64 %t59, ptr %t55 + %t62 = load ptr, ptr %a1 + %t63 = call i1 @finch.parser.accept(ptr %t62, { ptr, i64, i64 } { ptr @.str.998, i64 1, i64 0 }) + %t64 = xor i1 %t63, true + br i1 %t64, label %then1811, label %endif1813 +then1811: + call void @finch_str_drop(ptr %a17) + br label %while.end1799 +endif1813: + call void @finch_str_drop(ptr %a17) + br label %while.cond1797 +while.end1799: + br label %endif1796 +endif1796: + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic1814, label %ok1815 +panic1814: + call void @finch_panic(ptr @.str.999, i64 701, ptr @.str.1000) + unreachable +ok1815: + %t67 = getelementptr inbounds %S.parser.Parser, ptr %t65, i32 0, i32 2 + %t68 = load i64, ptr %t67 + %t69 = sub i64 %t68, 1 + store i64 %t69, ptr %t67 + %t70 = load ptr, ptr %a1 + %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.1001, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1002, i64 3, i64 0 }) + store %S.lexer.Token %t71, ptr %a72 + call void @finch.drop.S_lexer_Token(ptr %a72) + ret void +} + +define internal %S.ast.Node @finch.parser.parsePostfix(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a14 = alloca %S.lexer.Token, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca %S.lexer.Token, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca %S.ast.Node, align 16 + %a29 = alloca %S.ast.Node, align 16 + %a40 = alloca %S.lexer.Token, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca %S.ast.Node, align 16 + %a49 = alloca %S.ast.Node, align 16 + %a52 = alloca %S.ast.Node, align 16 + %a57 = alloca %S.ast.Node, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a69 = alloca %S.ast.Node, align 16 + %a70 = alloca %S.ast.Node, align 16 + %a91 = alloca %S.lexer.Token, align 16 + %a93 = alloca %S.ast.Node, align 16 + %a94 = alloca %S.ast.Node, align 16 + %a97 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.parsePrimary(ptr %t2) + store %S.ast.Node %t3, ptr %a4 + br label %while.cond1816 +while.cond1816: + %t5 = load ptr, ptr %a1 + %t6 = call i1 @finch.parser.sameLine(ptr %t5) + br i1 %t6, label %while.body1817, label %while.end1818 +while.body1817: + %t7 = load ptr, ptr %a1 + %t8 = call i1 @finch.parser.at(ptr %t7, { ptr, i64, i64 } { ptr @.str.1003, i64 1, i64 0 }) + br i1 %t8, label %then1819, label %else1820 +then1819: + %t9 = load ptr, ptr %a1 + %t10 = call %S.ast.Node @finch.parser.node(ptr %t9, { ptr, i64, i64 } { ptr @.str.1004, i64 6, i64 0 }) + store %S.ast.Node %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = call %S.lexer.Token @finch.parser.next(ptr %t12) + store %S.lexer.Token %t13, ptr %a14 + call void @finch.drop.S_lexer_Token(ptr %a14) + %t15 = load ptr, ptr %a1 + %t16 = call %S.lexer.Token @finch.parser.expect(ptr %t15, { ptr, i64, i64 } { ptr @.str.1005, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.1006, i64 16, i64 0 }) + %t17 = extractvalue %S.lexer.Token %t16, 1 + store { ptr, i64, i64 } %t17, ptr %a18 + call void @finch_str_copy(ptr %a19, ptr %a18) + %t20 = load { ptr, i64, i64 }, ptr %a19 + store %S.lexer.Token %t16, ptr %a21 + call void @finch.drop.S_lexer_Token(ptr %a21) + %t22 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 1 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t20, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 9 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 + %t27 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t27, ptr %a28 + call void @finch.copy.S_ast_Node(ptr %a29, ptr %a28) + %t30 = load %S.ast.Node, ptr %a29 + %t31 = load i64, ptr %t26 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %t25, i64 %t32, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %t25 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t31 + store %S.ast.Node %t30, ptr %t34 + store i64 %t32, ptr %t26 + %t35 = load ptr, ptr %a1 + %t36 = call i1 @finch.parser.at(ptr %t35, { ptr, i64, i64 } { ptr @.str.1007, i64 1, i64 0 }) + br label %logic.from1822 +logic.from1822: + br i1 %t36, label %logic.rhs1823, label %logic.end1824 +logic.rhs1823: + %t37 = load ptr, ptr %a1 + %t38 = call %S.lexer.Token @finch.parser.cur(ptr %t37) + %t39 = extractvalue %S.lexer.Token %t38, 4 + store %S.lexer.Token %t38, ptr %a40 + call void @finch.drop.S_lexer_Token(ptr %a40) + %t41 = xor i1 %t39, true + br label %logic.rend1825 +logic.rend1825: + br label %logic.end1824 +logic.end1824: + %t42 = phi i1 [ false, %logic.from1822 ], [ %t41, %logic.rend1825 ] + br i1 %t42, label %then1826, label %endif1828 +then1826: + %t43 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 0 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } { ptr @.str.1008, i64 6, i64 0 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load ptr, ptr %a1 + call void @finch.parser.parseArgs(ptr %t46, ptr %a11) + br label %endif1828 +endif1828: + %t47 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t47, ptr %a48 + call void @finch.copy.S_ast_Node(ptr %a49, ptr %a48) + %t50 = load %S.ast.Node, ptr %a49 + %t51 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t50, ptr %a4 + store %S.ast.Node %t51, ptr %a52 + call void @finch.drop.S_ast_Node(ptr %a52) + call void @finch.drop.S_ast_Node(ptr %a11) + br label %endif1821 +else1820: + %t53 = load ptr, ptr %a1 + %t54 = call i1 @finch.parser.at(ptr %t53, { ptr, i64, i64 } { ptr @.str.1009, i64 1, i64 0 }) + br i1 %t54, label %then1829, label %else1830 +then1829: + %t55 = load ptr, ptr %a1 + %t56 = call %S.ast.Node @finch.parser.node(ptr %t55, { ptr, i64, i64 } { ptr @.str.1010, i64 5, i64 0 }) + store %S.ast.Node %t56, ptr %a57 + %t58 = load ptr, ptr %a1 + %t59 = call %S.lexer.Token @finch.parser.next(ptr %t58) + store %S.lexer.Token %t59, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic1832, label %ok1833 +panic1832: + call void @finch_panic(ptr @.str.1011, i64 721, ptr @.str.1012) + unreachable +ok1833: + %t63 = getelementptr inbounds %S.parser.Parser, ptr %t61, i32 0, i32 2 + %t64 = load i64, ptr %t63 + %t65 = add i64 %t64, 1 + store i64 %t65, ptr %t63 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a57, i32 0, i32 9 + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i32 0, i32 1 + %t68 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t68, ptr %a69 + call void @finch.copy.S_ast_Node(ptr %a70, ptr %a69) + %t71 = load %S.ast.Node, ptr %a70 + %t72 = load i64, ptr %t67 + %t73 = add i64 %t72, 1 + call void @finch_arr_reserve(ptr %t66, i64 %t73, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t74 = load ptr, ptr %t66 + %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 %t72 + store %S.ast.Node %t71, ptr %t75 + store i64 %t73, ptr %t67 + %t76 = getelementptr inbounds %S.ast.Node, ptr %a57, i32 0, i32 9 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = load ptr, ptr %a1 + %t79 = call %S.ast.Node @finch.parser.parseExpr(ptr %t78) + %t80 = load i64, ptr %t77 + %t81 = add i64 %t80, 1 + call void @finch_arr_reserve(ptr %t76, i64 %t81, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t82 = load ptr, ptr %t76 + %t83 = getelementptr inbounds %S.ast.Node, ptr %t82, i64 %t80 + store %S.ast.Node %t79, ptr %t83 + store i64 %t81, ptr %t77 + %t84 = load ptr, ptr %a1 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic1834, label %ok1835 +panic1834: + call void @finch_panic(ptr @.str.1013, i64 724, ptr @.str.1014) + unreachable +ok1835: + %t86 = getelementptr inbounds %S.parser.Parser, ptr %t84, i32 0, i32 2 + %t87 = load i64, ptr %t86 + %t88 = sub i64 %t87, 1 + store i64 %t88, ptr %t86 + %t89 = load ptr, ptr %a1 + %t90 = call %S.lexer.Token @finch.parser.expect(ptr %t89, { ptr, i64, i64 } { ptr @.str.1015, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1016, i64 3, i64 0 }) + store %S.lexer.Token %t90, ptr %a91 + call void @finch.drop.S_lexer_Token(ptr %a91) + %t92 = load %S.ast.Node, ptr %a57 + store %S.ast.Node %t92, ptr %a93 + call void @finch.copy.S_ast_Node(ptr %a94, ptr %a93) + %t95 = load %S.ast.Node, ptr %a94 + %t96 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t95, ptr %a4 + store %S.ast.Node %t96, ptr %a97 + call void @finch.drop.S_ast_Node(ptr %a97) + call void @finch.drop.S_ast_Node(ptr %a57) + br label %endif1831 +else1830: + %t98 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t98 +endif1831: + br label %endif1821 +endif1821: + br label %while.cond1816 +while.end1818: + %t99 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t99 +} + +define internal %S.ast.Node @finch.parser.parsePrimary(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.lexer.Token, align 16 + %a7 = alloca %S.ast.Node, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca %S.lexer.Token, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca %S.lexer.Token, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca %S.lexer.Token, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.lexer.Token, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca %S.lexer.Token, align 16 + %a122 = alloca %S.ast.Node, align 16 + %a130 = alloca %S.lexer.Token, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca %S.lexer.Token, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca %S.lexer.Token, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca %S.lexer.Token, align 16 + %a219 = alloca %S.lexer.Token, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca %S.lexer.Token, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca %S.lexer.Token, align 16 + %a268 = alloca %S.ast.Type, align 16 + %a283 = alloca %S.lexer.Token, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca %S.lexer.Token, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.lexer.Token @finch.parser.cur(ptr %t2) + store %S.lexer.Token %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.ast.Node @finch.parser.node(ptr %t5, { ptr, i64, i64 } { ptr @.str.1017, i64 0, i64 0 }) + store %S.ast.Node %t6, ptr %a7 + %t8 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.1018, i64 3, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.from1836 +logic.from1836: + br i1 %t18, label %logic.end1838, label %logic.rhs1837 +logic.rhs1837: + %t19 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1019, i64 5, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend1839 +logic.rend1839: + br label %logic.end1838 +logic.end1838: + %t24 = phi i1 [ true, %logic.from1836 ], [ %t23, %logic.rend1839 ] + br label %logic.from1840 +logic.from1840: + br i1 %t24, label %logic.end1842, label %logic.rhs1841 +logic.rhs1841: + %t25 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.1020, i64 4, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend1843 +logic.rend1843: + br label %logic.end1842 +logic.end1842: + %t30 = phi i1 [ true, %logic.from1840 ], [ %t29, %logic.rend1843 ] + br i1 %t30, label %then1844, label %endif1846 +then1844: + %t31 = load ptr, ptr %a1 + %t32 = call %S.lexer.Token @finch.parser.next(ptr %t31) + store %S.lexer.Token %t32, ptr %a33 + call void @finch.drop.S_lexer_Token(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a13 + %t35 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + store { ptr, i64, i64 } %t34, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + %t39 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t38, ptr %t35 + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 + store { ptr, i64, i64 } %t42, ptr %a44 + call void @finch_str_copy(ptr %a45, ptr %a44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + %t47 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t46, ptr %t43 + store { ptr, i64, i64 } %t47, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t49 +endif1846: + %t50 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.1021, i64 6, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then1847, label %endif1849 +then1847: + %t55 = load ptr, ptr %a1 + %t56 = call %S.lexer.Token @finch.parser.next(ptr %t55) + store %S.lexer.Token %t56, ptr %a57 + call void @finch.drop.S_lexer_Token(ptr %a57) + %t58 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } { ptr @.str.1022, i64 3, i64 0 }, ptr %t58 + store { ptr, i64, i64 } %t59, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 + store { ptr, i64, i64 } %t62, ptr %a64 + call void @finch_str_copy(ptr %a65, ptr %a64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + %t67 = load { ptr, i64, i64 }, ptr %t63 + store { ptr, i64, i64 } %t66, ptr %t63 + store { ptr, i64, i64 } %t67, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t69 +endif1849: + %t70 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t70, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.1023, i64 4, i64 0 }, ptr %a72 + %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) + %t74 = icmp ne i32 %t73, 0 + br label %logic.from1850 +logic.from1850: + br i1 %t74, label %logic.end1852, label %logic.rhs1851 +logic.rhs1851: + %t75 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t75, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.1024, i64 5, i64 0 }, ptr %a77 + %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) + %t79 = icmp ne i32 %t78, 0 + br label %logic.rend1853 +logic.rend1853: + br label %logic.end1852 +logic.end1852: + %t80 = phi i1 [ true, %logic.from1850 ], [ %t79, %logic.rend1853 ] + br i1 %t80, label %then1854, label %endif1856 +then1854: + %t81 = load ptr, ptr %a1 + %t82 = call %S.lexer.Token @finch.parser.next(ptr %t81) + store %S.lexer.Token %t82, ptr %a83 + call void @finch.drop.S_lexer_Token(ptr %a83) + %t84 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } { ptr @.str.1025, i64 4, i64 0 }, ptr %t84 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a13 + %t88 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 + store { ptr, i64, i64 } %t87, ptr %a89 + call void @finch_str_copy(ptr %a90, ptr %a89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t91, ptr %t88 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t94 +endif1856: + %t95 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.1026, i64 4, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then1857, label %endif1859 +then1857: + %t100 = load ptr, ptr %a1 + %t101 = call %S.lexer.Token @finch.parser.next(ptr %t100) + store %S.lexer.Token %t101, ptr %a102 + call void @finch.drop.S_lexer_Token(ptr %a102) + %t103 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } { ptr @.str.1027, i64 4, i64 0 }, ptr %t103 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t106 +endif1859: + %t107 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t107, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.1028, i64 1, i64 0 }, ptr %a109 + %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) + %t111 = icmp ne i32 %t110, 0 + br i1 %t111, label %then1860, label %endif1862 +then1860: + %t112 = load ptr, ptr %a1 + %t113 = call %S.lexer.Token @finch.parser.next(ptr %t112) + store %S.lexer.Token %t113, ptr %a114 + call void @finch.drop.S_lexer_Token(ptr %a114) + %t115 = load ptr, ptr %a1 + %t116 = icmp eq ptr %t115, null + br i1 %t116, label %panic1863, label %ok1864 +panic1863: + call void @finch_panic(ptr @.str.1029, i64 763, ptr @.str.1030) + unreachable +ok1864: + %t117 = getelementptr inbounds %S.parser.Parser, ptr %t115, i32 0, i32 2 + %t118 = load i64, ptr %t117 + %t119 = add i64 %t118, 1 + store i64 %t119, ptr %t117 + %t120 = load ptr, ptr %a1 + %t121 = call %S.ast.Node @finch.parser.parseExpr(ptr %t120) + store %S.ast.Node %t121, ptr %a122 + %t123 = load ptr, ptr %a1 + %t124 = icmp eq ptr %t123, null + br i1 %t124, label %panic1865, label %ok1866 +panic1865: + call void @finch_panic(ptr @.str.1031, i64 765, ptr @.str.1032) + unreachable +ok1866: + %t125 = getelementptr inbounds %S.parser.Parser, ptr %t123, i32 0, i32 2 + %t126 = load i64, ptr %t125 + %t127 = sub i64 %t126, 1 + store i64 %t127, ptr %t125 + %t128 = load ptr, ptr %a1 + %t129 = call %S.lexer.Token @finch.parser.expect(ptr %t128, { ptr, i64, i64 } { ptr @.str.1033, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1034, i64 3, i64 0 }) + store %S.lexer.Token %t129, ptr %a130 + call void @finch.drop.S_lexer_Token(ptr %a130) + %t131 = load %S.ast.Node, ptr %a122 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_ast_Node(ptr %a7) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t131 +endif1862: + %t132 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t132, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.1035, i64 5, i64 0 }, ptr %a134 + %t135 = call i32 @finch_str_eq(ptr %a133, ptr %a134) + %t136 = icmp ne i32 %t135, 0 + br i1 %t136, label %then1867, label %endif1869 +then1867: + %t137 = load ptr, ptr %a1 + %t138 = call %S.ast.Node @finch.parser.parseMatch(ptr %t137, i1 true) + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_ast_Node(ptr %a7) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t138 +endif1869: + %t139 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t139, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.1036, i64 1, i64 0 }, ptr %a141 + %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) + %t143 = icmp ne i32 %t142, 0 + br i1 %t143, label %then1870, label %endif1872 +then1870: + %t144 = load ptr, ptr %a1 + %t145 = call %S.lexer.Token @finch.parser.next(ptr %t144) + store %S.lexer.Token %t145, ptr %a146 + call void @finch.drop.S_lexer_Token(ptr %a146) + %t147 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t148 = load { ptr, i64, i64 }, ptr %t147 + store { ptr, i64, i64 } { ptr @.str.1037, i64 5, i64 0 }, ptr %t147 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load ptr, ptr %a1 + %t151 = icmp eq ptr %t150, null + br i1 %t151, label %panic1873, label %ok1874 +panic1873: + call void @finch_panic(ptr @.str.1038, i64 775, ptr @.str.1039) + unreachable +ok1874: + %t152 = getelementptr inbounds %S.parser.Parser, ptr %t150, i32 0, i32 2 + %t153 = load i64, ptr %t152 + %t154 = add i64 %t153, 1 + store i64 %t154, ptr %t152 + %t155 = load ptr, ptr %a1 + %t156 = call i1 @finch.parser.at(ptr %t155, { ptr, i64, i64 } { ptr @.str.1040, i64 1, i64 0 }) + br label %logic.from1875 +logic.from1875: + br i1 %t156, label %logic.rhs1876, label %logic.end1877 +logic.rhs1876: + %t157 = load ptr, ptr %a1 + %t158 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t157, i64 1) + store { ptr, i64, i64 } %t158, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.1041, i64 1, i64 0 }, ptr %a160 + %t161 = call i32 @finch_str_eq(ptr %a159, ptr %a160) + %t162 = icmp ne i32 %t161, 0 + store { ptr, i64, i64 } %t158, ptr %a163 + call void @finch_str_drop(ptr %a163) + br label %logic.rend1878 +logic.rend1878: + br label %logic.end1877 +logic.end1877: + %t164 = phi i1 [ false, %logic.from1875 ], [ %t162, %logic.rend1878 ] + br i1 %t164, label %then1879, label %endif1881 +then1879: + %t165 = load ptr, ptr %a1 + %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) + store %S.lexer.Token %t166, ptr %a167 + call void @finch.drop.S_lexer_Token(ptr %a167) + %t168 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t169 = load { ptr, i64, i64 }, ptr %t168 + store { ptr, i64, i64 } { ptr @.str.1042, i64 3, i64 0 }, ptr %t168 + store { ptr, i64, i64 } %t169, ptr %a170 + call void @finch_str_drop(ptr %a170) + br label %endif1881 +endif1881: + br label %while.cond1882 +while.cond1882: + %t171 = load ptr, ptr %a1 + %t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.1043, i64 1, i64 0 }) + %t173 = xor i1 %t172, true + br i1 %t173, label %while.body1883, label %while.end1884 +while.body1883: + %t174 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 + %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1 + %t176 = load ptr, ptr %a1 + %t177 = call %S.ast.Node @finch.parser.parseExpr(ptr %t176) + %t178 = load i64, ptr %t175 + %t179 = add i64 %t178, 1 + call void @finch_arr_reserve(ptr %t174, i64 %t179, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t180 = load ptr, ptr %t174 + %t181 = getelementptr inbounds %S.ast.Node, ptr %t180, i64 %t178 + store %S.ast.Node %t177, ptr %t181 + store i64 %t179, ptr %t175 + %t182 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 + %t184 = load i64, ptr %t183 + %t185 = icmp eq i64 %t184, 1 + br label %logic.from1885 +logic.from1885: + br i1 %t185, label %logic.rhs1886, label %logic.end1887 +logic.rhs1886: + %t186 = load ptr, ptr %a1 + %t187 = call i1 @finch.parser.at(ptr %t186, { ptr, i64, i64 } { ptr @.str.1044, i64 1, i64 0 }) + br label %logic.rend1888 +logic.rend1888: + br label %logic.end1887 +logic.end1887: + %t188 = phi i1 [ false, %logic.from1885 ], [ %t187, %logic.rend1888 ] + br i1 %t188, label %then1889, label %endif1891 +then1889: + %t189 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t190 = load { ptr, i64, i64 }, ptr %t189 + store { ptr, i64, i64 } { ptr @.str.1045, i64 3, i64 0 }, ptr %t189 + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_drop(ptr %a191) + br label %endif1891 +endif1891: + %t192 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + store { ptr, i64, i64 } %t193, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.1046, i64 3, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br i1 %t197, label %then1892, label %endif1894 +then1892: + %t198 = load ptr, ptr %a1 + %t199 = call %S.lexer.Token @finch.parser.expect(ptr %t198, { ptr, i64, i64 } { ptr @.str.1047, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1048, i64 41, i64 0 }) + store %S.lexer.Token %t199, ptr %a200 + call void @finch.drop.S_lexer_Token(ptr %a200) + %t201 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 + %t203 = load ptr, ptr %a1 + %t204 = call %S.ast.Node @finch.parser.parseExpr(ptr %t203) + %t205 = load i64, ptr %t202 + %t206 = add i64 %t205, 1 + call void @finch_arr_reserve(ptr %t201, i64 %t206, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t207 = load ptr, ptr %t201 + %t208 = getelementptr inbounds %S.ast.Node, ptr %t207, i64 %t205 + store %S.ast.Node %t204, ptr %t208 + store i64 %t206, ptr %t202 + br label %endif1894 +endif1894: + %t209 = load ptr, ptr %a1 + %t210 = call i1 @finch.parser.accept(ptr %t209, { ptr, i64, i64 } { ptr @.str.1049, i64 1, i64 0 }) + %t211 = xor i1 %t210, true + br i1 %t211, label %then1895, label %endif1897 +then1895: + br label %while.end1884 +endif1897: + br label %while.cond1882 +while.end1884: + %t212 = load ptr, ptr %a1 + %t213 = icmp eq ptr %t212, null + br i1 %t213, label %panic1898, label %ok1899 +panic1898: + call void @finch_panic(ptr @.str.1050, i64 793, ptr @.str.1051) + unreachable +ok1899: + %t214 = getelementptr inbounds %S.parser.Parser, ptr %t212, i32 0, i32 2 + %t215 = load i64, ptr %t214 + %t216 = sub i64 %t215, 1 + store i64 %t216, ptr %t214 + %t217 = load ptr, ptr %a1 + %t218 = call %S.lexer.Token @finch.parser.expect(ptr %t217, { ptr, i64, i64 } { ptr @.str.1052, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1053, i64 3, i64 0 }) + store %S.lexer.Token %t218, ptr %a219 + call void @finch.drop.S_lexer_Token(ptr %a219) + %t220 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t220 +endif1872: + %t221 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t221, ptr %a222 + store { ptr, i64, i64 } { ptr @.str.1054, i64 5, i64 0 }, ptr %a223 + %t224 = call i32 @finch_str_eq(ptr %a222, ptr %a223) + %t225 = icmp ne i32 %t224, 0 + br i1 %t225, label %then1900, label %endif1902 +then1900: + %t226 = load ptr, ptr %a1 + %t227 = call %S.lexer.Token @finch.parser.next(ptr %t226) + store %S.lexer.Token %t227, ptr %a228 + call void @finch.drop.S_lexer_Token(ptr %a228) + %t229 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 + %t230 = load { ptr, i64, i64 }, ptr %t229 + %t231 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 1 + store { ptr, i64, i64 } %t230, ptr %a232 + call void @finch_str_copy(ptr %a233, ptr %a232) + %t234 = load { ptr, i64, i64 }, ptr %a233 + %t235 = load { ptr, i64, i64 }, ptr %t231 + store { ptr, i64, i64 } %t234, ptr %t231 + store { ptr, i64, i64 } %t235, ptr %a236 + call void @finch_str_drop(ptr %a236) + %t237 = load ptr, ptr %a1 + %t238 = call i1 @finch.parser.at(ptr %t237, { ptr, i64, i64 } { ptr @.str.1055, i64 1, i64 0 }) + br label %logic.from1903 +logic.from1903: + br i1 %t238, label %logic.rhs1904, label %logic.end1905 +logic.rhs1904: + %t239 = load ptr, ptr %a1 + %t240 = icmp eq ptr %t239, null + br i1 %t240, label %panic1906, label %ok1907 +panic1906: + call void @finch_panic(ptr @.str.1056, i64 800, ptr @.str.1057) + unreachable +ok1907: + %t241 = getelementptr inbounds %S.parser.Parser, ptr %t239, i32 0, i32 0 + %t242 = load ptr, ptr %a1 + %t243 = icmp eq ptr %t242, null + br i1 %t243, label %panic1908, label %ok1909 +panic1908: + call void @finch_panic(ptr @.str.1058, i64 800, ptr @.str.1059) + unreachable +ok1909: + %t244 = getelementptr inbounds %S.parser.Parser, ptr %t242, i32 0, i32 1 + %t245 = load i64, ptr %t244 + %t246 = sub i64 %t245, 1 + %t247 = load { ptr, i64, i64 }, ptr %t241 + %t248 = extractvalue { ptr, i64, i64 } %t247, 1 + %t249 = icmp uge i64 %t246, %t248 + br i1 %t249, label %range1910, label %inrange1911 +range1910: + call void @finch_panic_index(ptr @.str.1060, i64 800, i64 %t246, i64 %t248) + unreachable +inrange1911: + %t250 = extractvalue { ptr, i64, i64 } %t247, 0 + %t251 = getelementptr inbounds %S.lexer.Token, ptr %t250, i64 %t246 + %t252 = getelementptr inbounds %S.lexer.Token, ptr %t251, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.1061, i64 5, i64 0 }, ptr %a255 + %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) + %t257 = icmp ne i32 %t256, 0 + br label %logic.rend1912 +logic.rend1912: + br label %logic.end1905 +logic.end1905: + %t258 = phi i1 [ false, %logic.from1903 ], [ %t257, %logic.rend1912 ] + br label %logic.from1913 +logic.from1913: + br i1 %t258, label %logic.rhs1914, label %logic.end1915 +logic.rhs1914: + %t259 = load ptr, ptr %a1 + %t260 = call i1 @finch.parser.genericCallAheadFrom(ptr %t259) + br label %logic.rend1916 +logic.rend1916: + br label %logic.end1915 +logic.end1915: + %t261 = phi i1 [ false, %logic.from1913 ], [ %t260, %logic.rend1916 ] + br i1 %t261, label %then1917, label %endif1919 +then1917: + %t262 = load ptr, ptr %a1 + %t263 = call %S.lexer.Token @finch.parser.next(ptr %t262) + store %S.lexer.Token %t263, ptr %a264 + call void @finch.drop.S_lexer_Token(ptr %a264) + %t265 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1062, i64 5, i64 0 }, 0 + %t266 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 + %t267 = load %S.ast.Type, ptr %t266 + store %S.ast.Type %t265, ptr %t266 + store %S.ast.Type %t267, ptr %a268 + call void @finch.drop.S_ast_Type(ptr %a268) + br label %while.cond1920 +while.cond1920: + br label %while.body1921 +while.body1921: + %t269 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 + %t270 = getelementptr inbounds %S.ast.Type, ptr %t269, i32 0, i32 1 + %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i32 0, i32 1 + %t272 = load ptr, ptr %a1 + %t273 = call %S.ast.Type @finch.parser.parseType(ptr %t272) + %t274 = load i64, ptr %t271 + %t275 = add i64 %t274, 1 + call void @finch_arr_reserve(ptr %t270, i64 %t275, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t276 = load ptr, ptr %t270 + %t277 = getelementptr inbounds %S.ast.Type, ptr %t276, i64 %t274 + store %S.ast.Type %t273, ptr %t277 + store i64 %t275, ptr %t271 + %t278 = load ptr, ptr %a1 + %t279 = call i1 @finch.parser.accept(ptr %t278, { ptr, i64, i64 } { ptr @.str.1063, i64 1, i64 0 }) + %t280 = xor i1 %t279, true + br i1 %t280, label %then1923, label %endif1925 +then1923: + br label %while.end1922 +endif1925: + br label %while.cond1920 +while.end1922: + %t281 = load ptr, ptr %a1 + %t282 = call %S.lexer.Token @finch.parser.expect(ptr %t281, { ptr, i64, i64 } { ptr @.str.1064, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1065, i64 28, i64 0 }) + store %S.lexer.Token %t282, ptr %a283 + call void @finch.drop.S_lexer_Token(ptr %a283) + %t284 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } { ptr @.str.1066, i64 4, i64 0 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + %t287 = load ptr, ptr %a1 + call void @finch.parser.parseArgs(ptr %t287, ptr %a7) + %t288 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t288 +endif1919: + %t289 = load ptr, ptr %a1 + %t290 = call i1 @finch.parser.at(ptr %t289, { ptr, i64, i64 } { ptr @.str.1067, i64 1, i64 0 }) + br label %logic.from1926 +logic.from1926: + br i1 %t290, label %logic.rhs1927, label %logic.end1928 +logic.rhs1927: + %t291 = load ptr, ptr %a1 + %t292 = call %S.lexer.Token @finch.parser.cur(ptr %t291) + %t293 = extractvalue %S.lexer.Token %t292, 4 + store %S.lexer.Token %t292, ptr %a294 + call void @finch.drop.S_lexer_Token(ptr %a294) + %t295 = xor i1 %t293, true + br label %logic.rend1929 +logic.rend1929: + br label %logic.end1928 +logic.end1928: + %t296 = phi i1 [ false, %logic.from1926 ], [ %t295, %logic.rend1929 ] + br i1 %t296, label %then1930, label %endif1932 +then1930: + %t297 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t298 = load { ptr, i64, i64 }, ptr %t297 + store { ptr, i64, i64 } { ptr @.str.1068, i64 4, i64 0 }, ptr %t297 + store { ptr, i64, i64 } %t298, ptr %a299 + call void @finch_str_drop(ptr %a299) + %t300 = load ptr, ptr %a1 + call void @finch.parser.parseArgs(ptr %t300, ptr %a7) + %t301 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t301 +endif1932: + %t302 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t303 = load { ptr, i64, i64 }, ptr %t302 + store { ptr, i64, i64 } { ptr @.str.1069, i64 3, i64 0 }, ptr %t302 + store { ptr, i64, i64 } %t303, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t305 +endif1902: + %t306 = load ptr, ptr %a1 + %t307 = load %S.lexer.Token, ptr %a4 + %t308 = load %S.lexer.Token, ptr %a4 + %t309 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t308) + store { ptr, i64, i64 } { ptr @.str.1070, i64 11, i64 0 }, ptr %a311 + store { ptr, i64, i64 } %t309, ptr %a312 + call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312) + store { ptr, i64, i64 } %t309, ptr %a313 + call void @finch_str_drop(ptr %a313) + %t314 = load { ptr, i64, i64 }, ptr %a310 + store { ptr, i64, i64 } %t314, ptr %a316 + store { ptr, i64, i64 } { ptr @.str.1071, i64 19, i64 0 }, ptr %a317 + call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) + store { ptr, i64, i64 } %t314, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a315 + call void @finch.parser.fail(ptr %t306, %S.lexer.Token %t307, { ptr, i64, i64 } %t319) + store { ptr, i64, i64 } %t319, ptr %a320 + call void @finch_str_drop(ptr %a320) + %t321 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t321 +} + +define internal void @finch.copy.arr_S_lexer_Token(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond1933 +n.cond1933: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body1934, label %n.end1935 +n.body1934: + %t8 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lexer.Token, ptr %t2, i64 %t6 + call void @finch.copy.S_lexer_Token(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond1933 +n.end1935: + ret void +} + +define internal void @finch.drop.S_parser_Parser(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.parser.Parser, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_lexer_Token(ptr %t1) + %t2 = getelementptr inbounds %S.parser.Parser, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.parser.Parser, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch.copy.arr_S_lexer_Token(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + %t8 = insertvalue %S.parser.Parser zeroinitializer, { ptr, i64, i64 } %t7, 0 + %t9 = insertvalue %S.parser.Parser %t8, i64 0, 1 + %t10 = insertvalue %S.parser.Parser %t9, i64 0, 2 + %t11 = load i64, ptr %a2 + %t12 = insertvalue %S.parser.Parser %t10, i64 %t11, 3 + %t13 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_copy(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.parser.Parser %t12, { ptr, i64, i64 } %t16, 4 + store %S.parser.Parser %t17, ptr %a18 + %t19 = call %S.ast.Program @finch.parser.parseProgram(ptr %a18) + call void @finch.drop.S_parser_Parser(ptr %a18) + ret %S.ast.Program %t19 +} + +define internal { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1073, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1074, i64 2, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.1076, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1077, i64 2, i64 0 }, ptr %a11 + call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a13 + call void @finch_str_drop(ptr %a13) + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1079, i64 1, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.1080, i64 1, i64 0 }, ptr %a17 + call void @finch_str_replace(ptr %a15, ptr %a14, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t18 +} + +define internal void @finch.gen.noteRef(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, i64 %p6, i64 %p7) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store { ptr, i64, i64 } %p5, ptr %a6 + store i64 %p6, ptr %a7 + store i64 %p7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic1936, label %ok1937 +panic1936: + call void @finch_panic(ptr @.str.1081, i64 232, ptr @.str.1082) + unreachable +ok1937: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 + %t12 = load i1, ptr %t11 + %t13 = xor i1 %t12, true + br i1 %t13, label %then1938, label %endif1940 +then1938: + ret void +endif1940: + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic1941, label %ok1942 +panic1941: + call void @finch_panic(ptr @.str.1083, i64 235, ptr @.str.1084) + unreachable +ok1942: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 29 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic1943, label %ok1944 +panic1943: + call void @finch_panic(ptr @.str.1086, i64 235, ptr @.str.1087) + unreachable +ok1944: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t22 = load i64, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %t20 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 %t22, %t24 + br i1 %t25, label %range1945, label %inrange1946 +range1945: + call void @finch_panic_index(ptr @.str.1088, i64 235, i64 %t22, i64 %t24) + unreachable +inrange1946: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 + %t28 = load { ptr, i64, i64 }, ptr %t27 + store { ptr, i64, i64 } { ptr @.str.1085, i64 3, i64 0 }, ptr %a30 + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.1089, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t39 = load i64, ptr %t38 + call void @finch_str_from_int(ptr %a40, i64 %t39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t37, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t37, ptr %a45 + call void @finch_str_drop(ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.1090, i64 1, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a54, i64 %t53) + %t55 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a57 + store { ptr, i64, i64 } %t55, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t52, ptr %a59 + call void @finch_str_drop(ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.1091, i64 1, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a68, i64 %t67) + %t69 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t66, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t69, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t75, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.1092, i64 1, i64 0 }, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t80, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t80, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t86, ptr %a88 + store { ptr, i64, i64 } { ptr @.str.1093, i64 1, i64 0 }, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t86, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + %t92 = load i64, ptr %a7 + call void @finch_str_from_int(ptr %a93, i64 %t92) + %t94 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a96 + store { ptr, i64, i64 } %t94, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t91, ptr %a98 + call void @finch_str_drop(ptr %a98) + store { ptr, i64, i64 } %t94, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.1094, i64 1, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + store { ptr, i64, i64 } %t100, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a101 + %t106 = load i64, ptr %a8 + call void @finch_str_from_int(ptr %a107, i64 %t106) + %t108 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t105, ptr %a110 + store { ptr, i64, i64 } %t108, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t105, ptr %a112 + call void @finch_str_drop(ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.1095, i64 1, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load { ptr, i64, i64 }, ptr %a5 + %t121 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t120) + store { ptr, i64, i64 } %t119, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t119, ptr %a125 + call void @finch_str_drop(ptr %a125) + store { ptr, i64, i64 } %t121, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a122 + %t128 = load i64, ptr %t17 + %t129 = add i64 %t128, 1 + call void @finch_arr_reserve(ptr %t16, i64 %t129, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t130 = load ptr, ptr %t16 + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i64 %t128 + store { ptr, i64, i64 } %t127, ptr %t131 + store i64 %t129, ptr %t17 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %p0) { +entry: + %a1 = alloca %S.gen.FnSig, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca i64, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + store %S.gen.FnSig %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 + %t5 = load i64, ptr %t4 + store i64 0, ptr %a6 + br label %for.cond1947 +for.cond1947: + %t7 = load i64, ptr %a6 + %t8 = icmp slt i64 %t7, %t5 + br i1 %t8, label %for.body1948, label %for.end1950 +for.body1948: + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 + %t11 = load i64, ptr %a6 + %t12 = load { ptr, i64, i64 }, ptr %t10 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range1951, label %inrange1952 +range1951: + call void @finch_panic_index(ptr @.str.1096, i64 242, i64 %t11, i64 %t13) + unreachable +inrange1952: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t11 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t17) + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1097, i64 1, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 14 + %t25 = load i64, ptr %a6 + %t26 = load { ptr, i64, i64 }, ptr %t24 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 %t25, %t27 + br i1 %t28, label %range1953, label %inrange1954 +range1953: + call void @finch_panic_index(ptr @.str.1098, i64 242, i64 %t25, i64 %t27) + unreachable +inrange1954: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t25 + %t31 = load { ptr, i64, i64 }, ptr %t30 + store { ptr, i64, i64 } %t23, ptr %a33 + store { ptr, i64, i64 } %t31, ptr %a34 + call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) + store { ptr, i64, i64 } %t23, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a32 + %t37 = load i64, ptr %t9 + %t38 = add i64 %t37, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t38, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t39 = load ptr, ptr %a2 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t37 + store { ptr, i64, i64 } %t36, ptr %t40 + store i64 %t38, ptr %t9 + br label %for.step1949 +for.step1949: + %t41 = load i64, ptr %a6 + %t42 = add i64 %t41, 1 + store i64 %t42, ptr %a6 + br label %for.cond1947 +for.end1950: + %t43 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_copy(ptr %a46, ptr %a45) + %t47 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t47, ptr %a48 + %t49 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 + %t51 = load i64, ptr %t50 + %t52 = icmp sgt i64 %t51, 0 + br i1 %t52, label %then1955, label %endif1957 +then1955: + %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.1099, i64 1, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a55 + %t59 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t58, ptr %a62 + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t58, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t65, ptr %a48 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + br label %endif1957 +endif1957: + %t68 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.1100, i64 3, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1101, i64 1, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1102, i64 2, i64 0 }, ptr %a79 + call void @finch_str_join(ptr %a80, ptr %a2, ptr %a79) + %t81 = load { ptr, i64, i64 }, ptr %a80 + store { ptr, i64, i64 } %t77, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t77, ptr %a85 + call void @finch_str_drop(ptr %a85) + store { ptr, i64, i64 } %t81, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t87, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.1103, i64 1, i64 0 }, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t87, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t92, ptr %a93 + %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 9 + %t95 = load i1, ptr %t94 + br i1 %t95, label %then1958, label %else1959 +then1958: + %t96 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t97 = getelementptr inbounds %S.ast.Type, ptr %t96, i32 0, i32 0 + %t98 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t98, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.1104, i64 4, i64 0 }, ptr %a100 + %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) + %t102 = icmp ne i32 %t101, 0 + br i1 %t102, label %then1961, label %else1962 +then1961: + %t103 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.1105, i64 5, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a104 + %t108 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t107, ptr %a93 + store { ptr, i64, i64 } %t108, ptr %a109 + call void @finch_str_drop(ptr %a109) + br label %endif1963 +else1962: + %t110 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t110, ptr %a112 + store { ptr, i64, i64 } { ptr @.str.1106, i64 4, i64 0 }, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a111 + %t115 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t116 = load %S.ast.Type, ptr %t115 + %t117 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t116) + store { ptr, i64, i64 } %t114, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t114, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t117, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.1107, i64 1, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t128, ptr %a93 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + br label %endif1963 +endif1963: + br label %endif1960 +else1959: + %t131 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.1108, i64 4, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp eq i32 %t136, 0 + br i1 %t137, label %then1964, label %endif1966 +then1964: + %t138 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t138, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.1109, i64 4, i64 0 }, ptr %a141 + call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a139 + %t143 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t144 = load %S.ast.Type, ptr %t143 + %t145 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t144) + store { ptr, i64, i64 } %t142, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + store { ptr, i64, i64 } %t142, ptr %a149 + call void @finch_str_drop(ptr %a149) + store { ptr, i64, i64 } %t145, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a146 + %t152 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t151, ptr %a93 + store { ptr, i64, i64 } %t152, ptr %a153 + call void @finch_str_drop(ptr %a153) + br label %endif1966 +endif1966: + br label %endif1960 +endif1960: + %t154 = load { ptr, i64, i64 }, ptr %a93 + call void @finch_str_drop(ptr %a48) + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t154 +} + +define internal void @finch.gen.noteCall(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.FnSig, align 16 + %a11 = alloca i64, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca %S.ast.Node, align 16 + %a41 = alloca %S.ast.Node, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.FnSig %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic1967, label %ok1968 +panic1967: + call void @finch_panic(ptr @.str.1110, i64 263, ptr @.str.1111) + unreachable +ok1968: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + %t8 = xor i1 %t7, true + br i1 %t8, label %then1969, label %endif1971 +then1969: + ret void +endif1971: + %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t10 = load i64, ptr %t9 + store i64 %t10, ptr %a11 + %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1112, i64 6, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br i1 %t17, label %then1972, label %endif1974 +then1972: + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t19 = load i64, ptr %t18 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a11 + br label %endif1974 +endif1974: + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic1975, label %ok1976 +panic1975: + call void @finch_panic(ptr @.str.1113, i64 270, ptr @.str.1114) + unreachable +ok1976: + %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 0 + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 16 + %t25 = load i64, ptr %t24 + %t26 = load { ptr, i64, i64 }, ptr %t23 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 %t25, %t27 + br i1 %t28, label %range1977, label %inrange1978 +range1977: + call void @finch_panic_index(ptr @.str.1115, i64 270, i64 %t25, i64 %t27) + unreachable +inrange1978: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i64 %t25 + %t31 = getelementptr inbounds %S.ast.Program, ptr %t30, i32 0, i32 8 + %t32 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 17 + %t33 = load i64, ptr %t32 + %t34 = load { ptr, i64, i64 }, ptr %t31 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 %t33, %t35 + br i1 %t36, label %range1979, label %inrange1980 +range1979: + call void @finch_panic_index(ptr @.str.1116, i64 270, i64 %t33, i64 %t35) + unreachable +inrange1980: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 + %t39 = load %S.ast.Node, ptr %t38 + store %S.ast.Node %t39, ptr %a40 + call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) + %t42 = load %S.ast.Node, ptr %a41 + store %S.ast.Node %t42, ptr %a43 + %t44 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch_str_copy(ptr %a47, ptr %a46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t48, ptr %a49 + %t50 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 7 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = icmp sgt i64 %t52, 0 + br label %logic.from1981 +logic.from1981: + br i1 %t53, label %logic.rhs1982, label %logic.end1983 +logic.rhs1982: + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 2 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = icmp eq i64 %t56, 0 + br label %logic.rend1984 +logic.rend1984: + br label %logic.end1983 +logic.end1983: + %t58 = phi i1 [ false, %logic.from1981 ], [ %t57, %logic.rend1984 ] + br i1 %t58, label %then1985, label %endif1987 +then1985: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + call void @finch_str_copy(ptr %a62, ptr %a61) + %t63 = load { ptr, i64, i64 }, ptr %a62 + %t64 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t63, ptr %a49 + store { ptr, i64, i64 } %t64, ptr %a65 + call void @finch_str_drop(ptr %a65) + br label %endif1987 +endif1987: + %t66 = load ptr, ptr %a1 + %t67 = load %S.ast.Node, ptr %a2 + %t68 = load i64, ptr %a11 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a49, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = load %S.gen.FnSig, ptr %a3 + %t72 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t71) + store { ptr, i64, i64 } { ptr @.str.1117, i64 9, i64 0 }, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.1118, i64 4, i64 0 }, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load ptr, ptr %a1 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic1988, label %ok1989 +panic1988: + call void @finch_panic(ptr @.str.1119, i64 275, ptr @.str.1120) + unreachable +ok1989: + %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 1 + %t86 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 13 + %t87 = load i64, ptr %t86 + %t88 = load { ptr, i64, i64 }, ptr %t85 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 %t87, %t89 + br i1 %t90, label %range1990, label %inrange1991 +range1990: + call void @finch_panic_index(ptr @.str.1121, i64 275, i64 %t87, i64 %t89) + unreachable +inrange1991: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t87 + %t93 = load { ptr, i64, i64 }, ptr %t92 + %t94 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 11 + %t95 = load i64, ptr %t94 + %t96 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 12 + %t97 = load i64, ptr %t96 + %t98 = add i64 %t97, 3 + call void @finch.gen.noteRef(ptr %t66, %S.ast.Node %t67, i64 %t68, i64 %t70, { ptr, i64, i64 } %t82, { ptr, i64, i64 } %t93, i64 %t95, i64 %t98) + store { ptr, i64, i64 } %t82, ptr %a99 + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a49) + call void @finch.drop.S_ast_Node(ptr %a43) + ret void +} + +define internal void @finch.copy.arr_bool(ptr %dst, ptr %src) { +entry: + + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + ret void +} + +define internal void @finch.copy.S_gen_FnSig(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.FnSig, ptr %src + store %S.gen.FnSig %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 6 + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 7 + %t13 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 7 + call void @finch.copy.arr_S_ast_Type(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 8 + %t15 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 8 + call void @finch_str_copy(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 11 + %t17 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 11 + call void @finch_str_copy(ptr %t16, ptr %t17) + %t18 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 12 + %t19 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 12 + call void @finch.copy.S_ast_Type(ptr %t18, ptr %t19) + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 13 + %t21 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 13 + call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 14 + %t23 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 14 + call void @finch.copy.arr_str(ptr %t22, ptr %t23) + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 15 + %t25 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 15 + call void @finch.copy.arr_bool(ptr %t24, ptr %t25) + ret void +} + +define internal void @finch.drop.arr_bool(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_FnSig(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t5) + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_S_ast_Type(ptr %t6) + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 8 + call void @finch_str_drop(ptr %t7) + %t8 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 11 + call void @finch_str_drop(ptr %t8) + %t9 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 12 + call void @finch.drop.S_ast_Type(ptr %t9) + %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 13 + call void @finch.drop.arr_S_ast_Type(ptr %t10) + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 14 + call void @finch.drop.arr_str(ptr %t11) + %t12 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 15 + call void @finch.drop.arr_bool(ptr %t12) + ret void +} + +define internal void @finch.copy.S_gen_Template(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Template, ptr %src + store %S.gen.Template %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.drop.S_gen_Template(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + ret void +} + +define internal void @finch.copy.arr_int(ptr %dst, ptr %src) { +entry: + + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + ret void +} + +define internal void @finch.copy.S_gen_StructDef(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.StructDef, ptr %src + store %S.gen.StructDef %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 3 + %t7 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_int(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 4 + %t9 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_int(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 5 + %t11 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 5 + call void @finch_str_copy(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 6 + %t13 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 7 + %t15 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 7 + call void @finch.copy.arr_S_ast_Type(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 8 + %t17 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 8 + call void @finch_str_copy(ptr %t16, ptr %t17) + %t18 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 11 + %t19 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 11 + call void @finch.copy.arr_str(ptr %t18, ptr %t19) + %t20 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 12 + %t21 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 12 + call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) + ret void +} + +define internal void @finch.drop.arr_int(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_StructDef(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_int(ptr %t3) + %t4 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_int(ptr %t4) + %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 5 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_S_ast_Type(ptr %t7) + %t8 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 8 + call void @finch_str_drop(ptr %t8) + %t9 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 11 + call void @finch.drop.arr_str(ptr %t9) + %t10 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 12 + call void @finch.drop.arr_S_ast_Type(ptr %t10) + ret void +} + +define internal void @finch.gen.indexAll(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca i64, align 16 + %a38 = alloca %S.gen.FnSig, align 16 + %a39 = alloca %S.gen.FnSig, align 16 + %a41 = alloca %S.gen.FnSig, align 16 + %a61 = alloca %S.ast.Node, align 16 + %a62 = alloca %S.ast.Node, align 16 + %a64 = alloca %S.ast.Node, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca i64, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca i64, align 16 + %a257 = alloca %S.gen.Template, align 16 + %a258 = alloca %S.gen.Template, align 16 + %a260 = alloca %S.gen.Template, align 16 + %a282 = alloca %S.ast.Node, align 16 + %a283 = alloca %S.ast.Node, align 16 + %a285 = alloca %S.ast.Node, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca i64, align 16 + %a448 = alloca %S.gen.StructDef, align 16 + %a449 = alloca %S.gen.StructDef, align 16 + %a451 = alloca %S.gen.StructDef, align 16 + %a478 = alloca %S.ast.Node, align 16 + %a479 = alloca %S.ast.Node, align 16 + %a481 = alloca %S.ast.Node, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a543 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca i64, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca i64, align 16 + %a651 = alloca i64, align 16 + %a659 = alloca %S.ast.Node, align 16 + %a660 = alloca %S.ast.Node, align 16 + %a662 = alloca %S.ast.Node, align 16 + %a663 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca i64, align 16 + %a674 = alloca %S.ast.Node, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a712 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a743 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a746 = alloca { ptr, i64, i64 }, align 16 + %a747 = alloca { ptr, i64, i64 }, align 16 + %a748 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a763 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a778 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond1992 +each.cond1992: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body1993, label %each.end1995 +each.body1993: + %t8 = load ptr, ptr %a2 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t6 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic1996, label %ok1997 +panic1996: + call void @finch_panic(ptr @.str.1122, i64 281, ptr @.str.1123) + unreachable +ok1997: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 29 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1124, i64 3, i64 0 }, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a17 + %t21 = load i64, ptr %t15 + %t22 = add i64 %t21, 1 + call void @finch_arr_reserve(ptr %t14, i64 %t22, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t23 = load ptr, ptr %t14 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i64 %t21 + store { ptr, i64, i64 } %t20, ptr %t24 + store i64 %t22, ptr %t15 + br label %each.step1994 +each.step1994: + %t25 = load i64, ptr %a3 + %t26 = add i64 %t25, 1 + store i64 %t26, ptr %a3 + br label %each.cond1992 +each.end1995: + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic1998, label %ok1999 +panic1998: + call void @finch_panic(ptr @.str.1125, i64 283, ptr @.str.1126) + unreachable +ok1999: + %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 15 + store i64 0, ptr %a30 + br label %each.cond2000 +each.cond2000: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = load i64, ptr %a30 + %t34 = icmp slt i64 %t33, %t32 + br i1 %t34, label %each.body2001, label %each.end2003 +each.body2001: + %t35 = load ptr, ptr %t29 + %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t33 + %t37 = load %S.gen.FnSig, ptr %t36 + store %S.gen.FnSig %t37, ptr %a38 + call void @finch.copy.S_gen_FnSig(ptr %a39, ptr %a38) + %t40 = load %S.gen.FnSig, ptr %a39 + store %S.gen.FnSig %t40, ptr %a41 + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic2004, label %ok2005 +panic2004: + call void @finch_panic(ptr @.str.1127, i64 284, ptr @.str.1128) + unreachable +ok2005: + %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 0 + %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 16 + %t46 = load i64, ptr %t45 + %t47 = load { ptr, i64, i64 }, ptr %t44 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = icmp uge i64 %t46, %t48 + br i1 %t49, label %range2006, label %inrange2007 +range2006: + call void @finch_panic_index(ptr @.str.1129, i64 284, i64 %t46, i64 %t48) + unreachable +inrange2007: + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = getelementptr inbounds %S.ast.Program, ptr %t50, i64 %t46 + %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i32 0, i32 8 + %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 17 + %t54 = load i64, ptr %t53 + %t55 = load { ptr, i64, i64 }, ptr %t52 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range2008, label %inrange2009 +range2008: + call void @finch_panic_index(ptr @.str.1130, i64 284, i64 %t54, i64 %t56) + unreachable +inrange2009: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 + %t60 = load %S.ast.Node, ptr %t59 + store %S.ast.Node %t60, ptr %a61 + call void @finch.copy.S_ast_Node(ptr %a62, ptr %a61) + %t63 = load %S.ast.Node, ptr %a62 + store %S.ast.Node %t63, ptr %a64 + %t65 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 7 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 + %t67 = load i64, ptr %t66 + %t68 = icmp sgt i64 %t67, 0 + br i1 %t68, label %then2010, label %endif2012 +then2010: + call void @finch.drop.S_ast_Node(ptr %a64) + call void @finch.drop.S_gen_FnSig(ptr %a41) + br label %each.step2002 +endif2012: + store { ptr, i64, i64 } zeroinitializer, ptr %a69 + %t70 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 + %t72 = load i64, ptr %t71 + store i64 0, ptr %a73 + br label %for.cond2013 +for.cond2013: + %t74 = load i64, ptr %a73 + %t75 = icmp slt i64 %t74, %t72 + br i1 %t75, label %for.body2014, label %for.end2016 +for.body2014: + %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 + %t77 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 + %t78 = load i64, ptr %a73 + %t79 = load { ptr, i64, i64 }, ptr %t77 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range2017, label %inrange2018 +range2017: + call void @finch_panic_index(ptr @.str.1131, i64 290, i64 %t78, i64 %t80) + unreachable +inrange2018: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds %S.ast.Type, ptr %t82, i64 %t78 + %t84 = load %S.ast.Type, ptr %t83 + %t85 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t84) + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1132, i64 1, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 14 + %t92 = load i64, ptr %a73 + %t93 = load { ptr, i64, i64 }, ptr %t91 + %t94 = extractvalue { ptr, i64, i64 } %t93, 1 + %t95 = icmp uge i64 %t92, %t94 + br i1 %t95, label %range2019, label %inrange2020 +range2019: + call void @finch_panic_index(ptr @.str.1133, i64 290, i64 %t92, i64 %t94) + unreachable +inrange2020: + %t96 = extractvalue { ptr, i64, i64 } %t93, 0 + %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 %t92 + %t98 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t90, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t90, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + %t104 = load i64, ptr %t76 + %t105 = add i64 %t104, 1 + call void @finch_arr_reserve(ptr %a69, i64 %t105, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t106 = load ptr, ptr %a69 + %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 %t104 + store { ptr, i64, i64 } %t103, ptr %t107 + store i64 %t105, ptr %t76 + br label %for.step2015 +for.step2015: + %t108 = load i64, ptr %a73 + %t109 = add i64 %t108, 1 + store i64 %t109, ptr %a73 + br label %for.cond2013 +for.end2016: + %t110 = load ptr, ptr %a1 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic2021, label %ok2022 +panic2021: + call void @finch_panic(ptr @.str.1134, i64 292, ptr @.str.1135) + unreachable +ok2022: + %t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 29 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 + %t114 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 0 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } { ptr @.str.1136, i64 3, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.1137, i64 1, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 1 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t124, ptr %a128 + store { ptr, i64, i64 } %t126, ptr %a129 + call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) + store { ptr, i64, i64 } %t124, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t131, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.1138, i64 1, i64 0 }, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + %t137 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 2 + %t138 = load { ptr, i64, i64 }, ptr %t137 + store { ptr, i64, i64 } %t136, ptr %a140 + store { ptr, i64, i64 } %t138, ptr %a141 + call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) + store { ptr, i64, i64 } %t136, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a139 + store { ptr, i64, i64 } %t143, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.1139, i64 1, i64 0 }, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + store { ptr, i64, i64 } %t143, ptr %a147 + call void @finch_str_drop(ptr %a147) + %t148 = load { ptr, i64, i64 }, ptr %a144 + %t149 = load ptr, ptr %a1 + %t150 = icmp eq ptr %t149, null + br i1 %t150, label %panic2023, label %ok2024 +panic2023: + call void @finch_panic(ptr @.str.1140, i64 292, ptr @.str.1141) + unreachable +ok2024: + %t151 = getelementptr inbounds %S.gen.Gen, ptr %t149, i32 0, i32 1 + %t152 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 13 + %t153 = load i64, ptr %t152 + %t154 = load { ptr, i64, i64 }, ptr %t151 + %t155 = extractvalue { ptr, i64, i64 } %t154, 1 + %t156 = icmp uge i64 %t153, %t155 + br i1 %t156, label %range2025, label %inrange2026 +range2025: + call void @finch_panic_index(ptr @.str.1142, i64 292, i64 %t153, i64 %t155) + unreachable +inrange2026: + %t157 = extractvalue { ptr, i64, i64 } %t154, 0 + %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t157, i64 %t153 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t148, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + store { ptr, i64, i64 } %t148, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t164, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.1143, i64 1, i64 0 }, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t164, ptr %a168 + call void @finch_str_drop(ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a165 + %t170 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 11 + %t171 = load i64, ptr %t170 + call void @finch_str_from_int(ptr %a172, i64 %t171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + store { ptr, i64, i64 } %t169, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t169, ptr %a177 + call void @finch_str_drop(ptr %a177) + store { ptr, i64, i64 } %t173, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.1144, i64 1, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + store { ptr, i64, i64 } %t179, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a180 + %t185 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 12 + %t186 = load i64, ptr %t185 + call void @finch_str_from_int(ptr %a187, i64 %t186) + %t188 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t184, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t184, ptr %a192 + call void @finch_str_drop(ptr %a192) + store { ptr, i64, i64 } %t188, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = load { ptr, i64, i64 }, ptr %a189 + store { ptr, i64, i64 } %t194, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.1145, i64 1, i64 0 }, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t194, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + %t200 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 14 + %t201 = load i64, ptr %t200 + call void @finch_str_from_int(ptr %a202, i64 %t201) + %t203 = load { ptr, i64, i64 }, ptr %a202 + store { ptr, i64, i64 } %t199, ptr %a205 + store { ptr, i64, i64 } %t203, ptr %a206 + call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) + store { ptr, i64, i64 } %t199, ptr %a207 + call void @finch_str_drop(ptr %a207) + store { ptr, i64, i64 } %t203, ptr %a208 + call void @finch_str_drop(ptr %a208) + %t209 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t209, ptr %a211 + store { ptr, i64, i64 } { ptr @.str.1146, i64 1, i64 0 }, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t209, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + %t215 = load %S.gen.FnSig, ptr %a41 + %t216 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t215) + %t217 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t216) + store { ptr, i64, i64 } %t216, ptr %a218 + call void @finch_str_drop(ptr %a218) + store { ptr, i64, i64 } %t214, ptr %a220 + store { ptr, i64, i64 } %t217, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t214, ptr %a222 + call void @finch_str_drop(ptr %a222) + store { ptr, i64, i64 } %t217, ptr %a223 + call void @finch_str_drop(ptr %a223) + %t224 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t224, ptr %a226 + store { ptr, i64, i64 } { ptr @.str.1147, i64 1, i64 0 }, ptr %a227 + call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) + store { ptr, i64, i64 } %t224, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = load { ptr, i64, i64 }, ptr %a225 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1148, i64 1, i64 0 }, ptr %a231 + call void @finch_str_join(ptr %a232, ptr %a69, ptr %a231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t229, ptr %a235 + store { ptr, i64, i64 } %t233, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t229, ptr %a237 + call void @finch_str_drop(ptr %a237) + store { ptr, i64, i64 } %t233, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a234 + %t240 = load i64, ptr %t113 + %t241 = add i64 %t240, 1 + call void @finch_arr_reserve(ptr %t112, i64 %t241, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t242 = load ptr, ptr %t112 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 %t240 + store { ptr, i64, i64 } %t239, ptr %t243 + store i64 %t241, ptr %t113 + call void @finch.drop.arr_str(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a64) + call void @finch.drop.S_gen_FnSig(ptr %a41) + br label %each.step2002 +each.step2002: + %t244 = load i64, ptr %a30 + %t245 = add i64 %t244, 1 + store i64 %t245, ptr %a30 + br label %each.cond2000 +each.end2003: + %t246 = load ptr, ptr %a1 + %t247 = icmp eq ptr %t246, null + br i1 %t247, label %panic2027, label %ok2028 +panic2027: + call void @finch_panic(ptr @.str.1149, i64 294, ptr @.str.1150) + unreachable +ok2028: + %t248 = getelementptr inbounds %S.gen.Gen, ptr %t246, i32 0, i32 17 + store i64 0, ptr %a249 + br label %each.cond2029 +each.cond2029: + %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 + %t251 = load i64, ptr %t250 + %t252 = load i64, ptr %a249 + %t253 = icmp slt i64 %t252, %t251 + br i1 %t253, label %each.body2030, label %each.end2032 +each.body2030: + %t254 = load ptr, ptr %t248 + %t255 = getelementptr inbounds %S.gen.Template, ptr %t254, i64 %t252 + %t256 = load %S.gen.Template, ptr %t255 + store %S.gen.Template %t256, ptr %a257 + call void @finch.copy.S_gen_Template(ptr %a258, ptr %a257) + %t259 = load %S.gen.Template, ptr %a258 + store %S.gen.Template %t259, ptr %a260 + %t261 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 6 + %t262 = load i1, ptr %t261 + br i1 %t262, label %then2033, label %endif2035 +then2033: + call void @finch.drop.S_gen_Template(ptr %a260) + br label %each.step2031 +endif2035: + %t263 = load ptr, ptr %a1 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic2036, label %ok2037 +panic2036: + call void @finch_panic(ptr @.str.1151, i64 298, ptr @.str.1152) + unreachable +ok2037: + %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 0 + %t266 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 4 + %t267 = load i64, ptr %t266 + %t268 = load { ptr, i64, i64 }, ptr %t265 + %t269 = extractvalue { ptr, i64, i64 } %t268, 1 + %t270 = icmp uge i64 %t267, %t269 + br i1 %t270, label %range2038, label %inrange2039 +range2038: + call void @finch_panic_index(ptr @.str.1153, i64 298, i64 %t267, i64 %t269) + unreachable +inrange2039: + %t271 = extractvalue { ptr, i64, i64 } %t268, 0 + %t272 = getelementptr inbounds %S.ast.Program, ptr %t271, i64 %t267 + %t273 = getelementptr inbounds %S.ast.Program, ptr %t272, i32 0, i32 8 + %t274 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 5 + %t275 = load i64, ptr %t274 + %t276 = load { ptr, i64, i64 }, ptr %t273 + %t277 = extractvalue { ptr, i64, i64 } %t276, 1 + %t278 = icmp uge i64 %t275, %t277 + br i1 %t278, label %range2040, label %inrange2041 +range2040: + call void @finch_panic_index(ptr @.str.1154, i64 298, i64 %t275, i64 %t277) + unreachable +inrange2041: + %t279 = extractvalue { ptr, i64, i64 } %t276, 0 + %t280 = getelementptr inbounds %S.ast.Node, ptr %t279, i64 %t275 + %t281 = load %S.ast.Node, ptr %t280 + store %S.ast.Node %t281, ptr %a282 + call void @finch.copy.S_ast_Node(ptr %a283, ptr %a282) + %t284 = load %S.ast.Node, ptr %a283 + store %S.ast.Node %t284, ptr %a285 + %t286 = load ptr, ptr %a1 + %t287 = icmp eq ptr %t286, null + br i1 %t287, label %panic2042, label %ok2043 +panic2042: + call void @finch_panic(ptr @.str.1155, i64 299, ptr @.str.1156) + unreachable +ok2043: + %t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 29 + %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i32 0, i32 1 + %t290 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 0 + %t291 = load { ptr, i64, i64 }, ptr %t290 + store { ptr, i64, i64 } { ptr @.str.1157, i64 3, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t295, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.1158, i64 1, i64 0 }, ptr %a298 + call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) + store { ptr, i64, i64 } %t295, ptr %a299 + call void @finch_str_drop(ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a296 + %t301 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 1 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store { ptr, i64, i64 } %t300, ptr %a304 + store { ptr, i64, i64 } %t302, ptr %a305 + call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) + store { ptr, i64, i64 } %t300, ptr %a306 + call void @finch_str_drop(ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a303 + store { ptr, i64, i64 } %t307, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.1159, i64 1, i64 0 }, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t307, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = load { ptr, i64, i64 }, ptr %a308 + %t313 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 2 + %t314 = load { ptr, i64, i64 }, ptr %t313 + store { ptr, i64, i64 } %t312, ptr %a316 + store { ptr, i64, i64 } %t314, ptr %a317 + call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) + store { ptr, i64, i64 } %t312, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a315 + store { ptr, i64, i64 } %t319, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.1160, i64 1, i64 0 }, ptr %a322 + call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) + store { ptr, i64, i64 } %t319, ptr %a323 + call void @finch_str_drop(ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a320 + %t325 = load ptr, ptr %a1 + %t326 = icmp eq ptr %t325, null + br i1 %t326, label %panic2044, label %ok2045 +panic2044: + call void @finch_panic(ptr @.str.1161, i64 299, ptr @.str.1162) + unreachable +ok2045: + %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 1 + %t328 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 13 + %t329 = load i64, ptr %t328 + %t330 = load { ptr, i64, i64 }, ptr %t327 + %t331 = extractvalue { ptr, i64, i64 } %t330, 1 + %t332 = icmp uge i64 %t329, %t331 + br i1 %t332, label %range2046, label %inrange2047 +range2046: + call void @finch_panic_index(ptr @.str.1163, i64 299, i64 %t329, i64 %t331) + unreachable +inrange2047: + %t333 = extractvalue { ptr, i64, i64 } %t330, 0 + %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i64 %t329 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t324, ptr %a337 + store { ptr, i64, i64 } %t335, ptr %a338 + call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) + store { ptr, i64, i64 } %t324, ptr %a339 + call void @finch_str_drop(ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t340, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.1164, i64 1, i64 0 }, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t340, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load { ptr, i64, i64 }, ptr %a341 + %t346 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 11 + %t347 = load i64, ptr %t346 + call void @finch_str_from_int(ptr %a348, i64 %t347) + %t349 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t345, ptr %a351 + store { ptr, i64, i64 } %t349, ptr %a352 + call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) + store { ptr, i64, i64 } %t345, ptr %a353 + call void @finch_str_drop(ptr %a353) + store { ptr, i64, i64 } %t349, ptr %a354 + call void @finch_str_drop(ptr %a354) + %t355 = load { ptr, i64, i64 }, ptr %a350 + store { ptr, i64, i64 } %t355, ptr %a357 + store { ptr, i64, i64 } { ptr @.str.1165, i64 1, i64 0 }, ptr %a358 + call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358) + store { ptr, i64, i64 } %t355, ptr %a359 + call void @finch_str_drop(ptr %a359) + %t360 = load { ptr, i64, i64 }, ptr %a356 + %t361 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 12 + %t362 = load i64, ptr %t361 + call void @finch_str_from_int(ptr %a363, i64 %t362) + %t364 = load { ptr, i64, i64 }, ptr %a363 + store { ptr, i64, i64 } %t360, ptr %a366 + store { ptr, i64, i64 } %t364, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t360, ptr %a368 + call void @finch_str_drop(ptr %a368) + store { ptr, i64, i64 } %t364, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = load { ptr, i64, i64 }, ptr %a365 + store { ptr, i64, i64 } %t370, ptr %a372 + store { ptr, i64, i64 } { ptr @.str.1166, i64 1, i64 0 }, ptr %a373 + call void @finch_str_concat(ptr %a371, ptr %a372, ptr %a373) + store { ptr, i64, i64 } %t370, ptr %a374 + call void @finch_str_drop(ptr %a374) + %t375 = load { ptr, i64, i64 }, ptr %a371 + %t376 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 14 + %t377 = load i64, ptr %t376 + call void @finch_str_from_int(ptr %a378, i64 %t377) + %t379 = load { ptr, i64, i64 }, ptr %a378 + store { ptr, i64, i64 } %t375, ptr %a381 + store { ptr, i64, i64 } %t379, ptr %a382 + call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) + store { ptr, i64, i64 } %t375, ptr %a383 + call void @finch_str_drop(ptr %a383) + store { ptr, i64, i64 } %t379, ptr %a384 + call void @finch_str_drop(ptr %a384) + %t385 = load { ptr, i64, i64 }, ptr %a380 + store { ptr, i64, i64 } %t385, ptr %a387 + store { ptr, i64, i64 } { ptr @.str.1167, i64 1, i64 0 }, ptr %a388 + call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) + store { ptr, i64, i64 } %t385, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a386 + %t391 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 1 + %t392 = load { ptr, i64, i64 }, ptr %t391 + store { ptr, i64, i64 } { ptr @.str.1168, i64 3, i64 0 }, ptr %a394 + store { ptr, i64, i64 } %t392, ptr %a395 + call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) + %t396 = load { ptr, i64, i64 }, ptr %a393 + store { ptr, i64, i64 } %t396, ptr %a398 + store { ptr, i64, i64 } { ptr @.str.1169, i64 1, i64 0 }, ptr %a399 + call void @finch_str_concat(ptr %a397, ptr %a398, ptr %a399) + store { ptr, i64, i64 } %t396, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = load { ptr, i64, i64 }, ptr %a397 + %t402 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 3 + %t403 = getelementptr inbounds { ptr, i64, i64 }, ptr %t402, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1170, i64 2, i64 0 }, ptr %a404 + call void @finch_str_join(ptr %a405, ptr %t402, ptr %a404) + %t406 = load { ptr, i64, i64 }, ptr %a405 + store { ptr, i64, i64 } %t401, ptr %a408 + store { ptr, i64, i64 } %t406, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + store { ptr, i64, i64 } %t401, ptr %a410 + call void @finch_str_drop(ptr %a410) + store { ptr, i64, i64 } %t406, ptr %a411 + call void @finch_str_drop(ptr %a411) + %t412 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t412, ptr %a414 + store { ptr, i64, i64 } { ptr @.str.1171, i64 6, i64 0 }, ptr %a415 + call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) + store { ptr, i64, i64 } %t412, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a413 + %t418 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t417) + store { ptr, i64, i64 } %t417, ptr %a419 + call void @finch_str_drop(ptr %a419) + store { ptr, i64, i64 } %t390, ptr %a421 + store { ptr, i64, i64 } %t418, ptr %a422 + call void @finch_str_concat(ptr %a420, ptr %a421, ptr %a422) + store { ptr, i64, i64 } %t390, ptr %a423 + call void @finch_str_drop(ptr %a423) + store { ptr, i64, i64 } %t418, ptr %a424 + call void @finch_str_drop(ptr %a424) + %t425 = load { ptr, i64, i64 }, ptr %a420 + store { ptr, i64, i64 } %t425, ptr %a427 + store { ptr, i64, i64 } { ptr @.str.1172, i64 1, i64 0 }, ptr %a428 + call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) + store { ptr, i64, i64 } %t425, ptr %a429 + call void @finch_str_drop(ptr %a429) + %t430 = load { ptr, i64, i64 }, ptr %a426 + %t431 = load i64, ptr %t289 + %t432 = add i64 %t431, 1 + call void @finch_arr_reserve(ptr %t288, i64 %t432, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t433 = load ptr, ptr %t288 + %t434 = getelementptr inbounds { ptr, i64, i64 }, ptr %t433, i64 %t431 + store { ptr, i64, i64 } %t430, ptr %t434 + store i64 %t432, ptr %t289 + call void @finch.drop.S_ast_Node(ptr %a285) + call void @finch.drop.S_gen_Template(ptr %a260) + br label %each.step2031 +each.step2031: + %t435 = load i64, ptr %a249 + %t436 = add i64 %t435, 1 + store i64 %t436, ptr %a249 + br label %each.cond2029 +each.end2032: + %t437 = load ptr, ptr %a1 + %t438 = icmp eq ptr %t437, null + br i1 %t438, label %panic2048, label %ok2049 +panic2048: + call void @finch_panic(ptr @.str.1173, i64 301, ptr @.str.1174) + unreachable +ok2049: + %t439 = getelementptr inbounds %S.gen.Gen, ptr %t437, i32 0, i32 16 + store i64 0, ptr %a440 + br label %each.cond2050 +each.cond2050: + %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 + %t442 = load i64, ptr %t441 + %t443 = load i64, ptr %a440 + %t444 = icmp slt i64 %t443, %t442 + br i1 %t444, label %each.body2051, label %each.end2053 +each.body2051: + %t445 = load ptr, ptr %t439 + %t446 = getelementptr inbounds %S.gen.StructDef, ptr %t445, i64 %t443 + %t447 = load %S.gen.StructDef, ptr %t446 + store %S.gen.StructDef %t447, ptr %a448 + call void @finch.copy.S_gen_StructDef(ptr %a449, ptr %a448) + %t450 = load %S.gen.StructDef, ptr %a449 + store %S.gen.StructDef %t450, ptr %a451 + %t452 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 2 + %t453 = load i1, ptr %t452 + br label %logic.from2054 +logic.from2054: + br i1 %t453, label %logic.end2056, label %logic.rhs2055 +logic.rhs2055: + %t454 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 5 + %t455 = getelementptr inbounds { ptr, i64, i64 }, ptr %t454, i32 0, i32 1 + %t456 = load i64, ptr %t455 + %t457 = icmp sgt i64 %t456, 0 + br label %logic.rend2057 +logic.rend2057: + br label %logic.end2056 +logic.end2056: + %t458 = phi i1 [ true, %logic.from2054 ], [ %t457, %logic.rend2057 ] + br i1 %t458, label %then2058, label %endif2060 +then2058: + call void @finch.drop.S_gen_StructDef(ptr %a451) + br label %each.step2052 +endif2060: + %t459 = load ptr, ptr %a1 + %t460 = icmp eq ptr %t459, null + br i1 %t460, label %panic2061, label %ok2062 +panic2061: + call void @finch_panic(ptr @.str.1175, i64 305, ptr @.str.1176) + unreachable +ok2062: + %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 0 + %t462 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 13 + %t463 = load i64, ptr %t462 + %t464 = load { ptr, i64, i64 }, ptr %t461 + %t465 = extractvalue { ptr, i64, i64 } %t464, 1 + %t466 = icmp uge i64 %t463, %t465 + br i1 %t466, label %range2063, label %inrange2064 +range2063: + call void @finch_panic_index(ptr @.str.1177, i64 305, i64 %t463, i64 %t465) + unreachable +inrange2064: + %t467 = extractvalue { ptr, i64, i64 } %t464, 0 + %t468 = getelementptr inbounds %S.ast.Program, ptr %t467, i64 %t463 + %t469 = getelementptr inbounds %S.ast.Program, ptr %t468, i32 0, i32 6 + %t470 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 14 + %t471 = load i64, ptr %t470 + %t472 = load { ptr, i64, i64 }, ptr %t469 + %t473 = extractvalue { ptr, i64, i64 } %t472, 1 + %t474 = icmp uge i64 %t471, %t473 + br i1 %t474, label %range2065, label %inrange2066 +range2065: + call void @finch_panic_index(ptr @.str.1178, i64 305, i64 %t471, i64 %t473) + unreachable +inrange2066: + %t475 = extractvalue { ptr, i64, i64 } %t472, 0 + %t476 = getelementptr inbounds %S.ast.Node, ptr %t475, i64 %t471 + %t477 = load %S.ast.Node, ptr %t476 + store %S.ast.Node %t477, ptr %a478 + call void @finch.copy.S_ast_Node(ptr %a479, ptr %a478) + %t480 = load %S.ast.Node, ptr %a479 + store %S.ast.Node %t480, ptr %a481 + %t482 = load ptr, ptr %a1 + %t483 = icmp eq ptr %t482, null + br i1 %t483, label %panic2067, label %ok2068 +panic2067: + call void @finch_panic(ptr @.str.1179, i64 306, ptr @.str.1180) + unreachable +ok2068: + %t484 = getelementptr inbounds %S.gen.Gen, ptr %t482, i32 0, i32 29 + %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %t484, i32 0, i32 1 + %t486 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 + %t487 = load { ptr, i64, i64 }, ptr %t486 + store { ptr, i64, i64 } { ptr @.str.1181, i64 3, i64 0 }, ptr %a489 + store { ptr, i64, i64 } %t487, ptr %a490 + call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) + %t491 = load { ptr, i64, i64 }, ptr %a488 + store { ptr, i64, i64 } %t491, ptr %a493 + store { ptr, i64, i64 } { ptr @.str.1182, i64 1, i64 0 }, ptr %a494 + call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) + store { ptr, i64, i64 } %t491, ptr %a495 + call void @finch_str_drop(ptr %a495) + %t496 = load { ptr, i64, i64 }, ptr %a492 + %t497 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 1 + %t498 = load { ptr, i64, i64 }, ptr %t497 + store { ptr, i64, i64 } %t496, ptr %a500 + store { ptr, i64, i64 } %t498, ptr %a501 + call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) + store { ptr, i64, i64 } %t496, ptr %a502 + call void @finch_str_drop(ptr %a502) + %t503 = load { ptr, i64, i64 }, ptr %a499 + store { ptr, i64, i64 } %t503, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.1183, i64 1, i64 0 }, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t503, ptr %a507 + call void @finch_str_drop(ptr %a507) + %t508 = load { ptr, i64, i64 }, ptr %a504 + %t509 = load ptr, ptr %a1 + %t510 = icmp eq ptr %t509, null + br i1 %t510, label %panic2069, label %ok2070 +panic2069: + call void @finch_panic(ptr @.str.1184, i64 306, ptr @.str.1185) + unreachable +ok2070: + %t511 = getelementptr inbounds %S.gen.Gen, ptr %t509, i32 0, i32 1 + %t512 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 13 + %t513 = load i64, ptr %t512 + %t514 = load { ptr, i64, i64 }, ptr %t511 + %t515 = extractvalue { ptr, i64, i64 } %t514, 1 + %t516 = icmp uge i64 %t513, %t515 + br i1 %t516, label %range2071, label %inrange2072 +range2071: + call void @finch_panic_index(ptr @.str.1186, i64 306, i64 %t513, i64 %t515) + unreachable +inrange2072: + %t517 = extractvalue { ptr, i64, i64 } %t514, 0 + %t518 = getelementptr inbounds { ptr, i64, i64 }, ptr %t517, i64 %t513 + %t519 = load { ptr, i64, i64 }, ptr %t518 + store { ptr, i64, i64 } %t508, ptr %a521 + store { ptr, i64, i64 } %t519, ptr %a522 + call void @finch_str_concat(ptr %a520, ptr %a521, ptr %a522) + store { ptr, i64, i64 } %t508, ptr %a523 + call void @finch_str_drop(ptr %a523) + %t524 = load { ptr, i64, i64 }, ptr %a520 + store { ptr, i64, i64 } %t524, ptr %a526 + store { ptr, i64, i64 } { ptr @.str.1187, i64 1, i64 0 }, ptr %a527 + call void @finch_str_concat(ptr %a525, ptr %a526, ptr %a527) + store { ptr, i64, i64 } %t524, ptr %a528 + call void @finch_str_drop(ptr %a528) + %t529 = load { ptr, i64, i64 }, ptr %a525 + %t530 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 11 + %t531 = load i64, ptr %t530 + call void @finch_str_from_int(ptr %a532, i64 %t531) + %t533 = load { ptr, i64, i64 }, ptr %a532 + store { ptr, i64, i64 } %t529, ptr %a535 + store { ptr, i64, i64 } %t533, ptr %a536 + call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536) + store { ptr, i64, i64 } %t529, ptr %a537 + call void @finch_str_drop(ptr %a537) + store { ptr, i64, i64 } %t533, ptr %a538 + call void @finch_str_drop(ptr %a538) + %t539 = load { ptr, i64, i64 }, ptr %a534 + store { ptr, i64, i64 } %t539, ptr %a541 + store { ptr, i64, i64 } { ptr @.str.1188, i64 1, i64 0 }, ptr %a542 + call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) + store { ptr, i64, i64 } %t539, ptr %a543 + call void @finch_str_drop(ptr %a543) + %t544 = load { ptr, i64, i64 }, ptr %a540 + %t545 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 12 + %t546 = load i64, ptr %t545 + call void @finch_str_from_int(ptr %a547, i64 %t546) + %t548 = load { ptr, i64, i64 }, ptr %a547 + store { ptr, i64, i64 } %t544, ptr %a550 + store { ptr, i64, i64 } %t548, ptr %a551 + call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551) + store { ptr, i64, i64 } %t544, ptr %a552 + call void @finch_str_drop(ptr %a552) + store { ptr, i64, i64 } %t548, ptr %a553 + call void @finch_str_drop(ptr %a553) + %t554 = load { ptr, i64, i64 }, ptr %a549 + %t555 = load i64, ptr %t485 + %t556 = add i64 %t555, 1 + call void @finch_arr_reserve(ptr %t484, i64 %t556, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t557 = load ptr, ptr %t484 + %t558 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i64 %t555 + store { ptr, i64, i64 } %t554, ptr %t558 + store i64 %t556, ptr %t485 + %t559 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 11 + %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 + %t561 = load i64, ptr %t560 + store i64 0, ptr %a562 + br label %for.cond2073 +for.cond2073: + %t563 = load i64, ptr %a562 + %t564 = icmp slt i64 %t563, %t561 + br i1 %t564, label %for.body2074, label %for.end2076 +for.body2074: + %t565 = load ptr, ptr %a1 + %t566 = icmp eq ptr %t565, null + br i1 %t566, label %panic2077, label %ok2078 +panic2077: + call void @finch_panic(ptr @.str.1189, i64 308, ptr @.str.1190) + unreachable +ok2078: + %t567 = getelementptr inbounds %S.gen.Gen, ptr %t565, i32 0, i32 29 + %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %t567, i32 0, i32 1 + %t569 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 + %t570 = load { ptr, i64, i64 }, ptr %t569 + store { ptr, i64, i64 } { ptr @.str.1191, i64 4, i64 0 }, ptr %a572 + store { ptr, i64, i64 } %t570, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + %t574 = load { ptr, i64, i64 }, ptr %a571 + store { ptr, i64, i64 } %t574, ptr %a576 + store { ptr, i64, i64 } { ptr @.str.1192, i64 1, i64 0 }, ptr %a577 + call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577) + store { ptr, i64, i64 } %t574, ptr %a578 + call void @finch_str_drop(ptr %a578) + %t579 = load { ptr, i64, i64 }, ptr %a575 + %t580 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 1 + %t581 = load { ptr, i64, i64 }, ptr %t580 + store { ptr, i64, i64 } %t579, ptr %a583 + store { ptr, i64, i64 } %t581, ptr %a584 + call void @finch_str_concat(ptr %a582, ptr %a583, ptr %a584) + store { ptr, i64, i64 } %t579, ptr %a585 + call void @finch_str_drop(ptr %a585) + %t586 = load { ptr, i64, i64 }, ptr %a582 + store { ptr, i64, i64 } %t586, ptr %a588 + store { ptr, i64, i64 } { ptr @.str.1193, i64 1, i64 0 }, ptr %a589 + call void @finch_str_concat(ptr %a587, ptr %a588, ptr %a589) + store { ptr, i64, i64 } %t586, ptr %a590 + call void @finch_str_drop(ptr %a590) + %t591 = load { ptr, i64, i64 }, ptr %a587 + %t592 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 11 + %t593 = load i64, ptr %a562 + %t594 = load { ptr, i64, i64 }, ptr %t592 + %t595 = extractvalue { ptr, i64, i64 } %t594, 1 + %t596 = icmp uge i64 %t593, %t595 + br i1 %t596, label %range2079, label %inrange2080 +range2079: + call void @finch_panic_index(ptr @.str.1194, i64 308, i64 %t593, i64 %t595) + unreachable +inrange2080: + %t597 = extractvalue { ptr, i64, i64 } %t594, 0 + %t598 = getelementptr inbounds { ptr, i64, i64 }, ptr %t597, i64 %t593 + %t599 = load { ptr, i64, i64 }, ptr %t598 + store { ptr, i64, i64 } %t591, ptr %a601 + store { ptr, i64, i64 } %t599, ptr %a602 + call void @finch_str_concat(ptr %a600, ptr %a601, ptr %a602) + store { ptr, i64, i64 } %t591, ptr %a603 + call void @finch_str_drop(ptr %a603) + %t604 = load { ptr, i64, i64 }, ptr %a600 + store { ptr, i64, i64 } %t604, ptr %a606 + store { ptr, i64, i64 } { ptr @.str.1195, i64 1, i64 0 }, ptr %a607 + call void @finch_str_concat(ptr %a605, ptr %a606, ptr %a607) + store { ptr, i64, i64 } %t604, ptr %a608 + call void @finch_str_drop(ptr %a608) + %t609 = load { ptr, i64, i64 }, ptr %a605 + %t610 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 12 + %t611 = load i64, ptr %a562 + %t612 = load { ptr, i64, i64 }, ptr %t610 + %t613 = extractvalue { ptr, i64, i64 } %t612, 1 + %t614 = icmp uge i64 %t611, %t613 + br i1 %t614, label %range2081, label %inrange2082 +range2081: + call void @finch_panic_index(ptr @.str.1196, i64 308, i64 %t611, i64 %t613) + unreachable +inrange2082: + %t615 = extractvalue { ptr, i64, i64 } %t612, 0 + %t616 = getelementptr inbounds %S.ast.Type, ptr %t615, i64 %t611 + %t617 = load %S.ast.Type, ptr %t616 + %t618 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t617) + store { ptr, i64, i64 } %t609, ptr %a620 + store { ptr, i64, i64 } %t618, ptr %a621 + call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) + store { ptr, i64, i64 } %t609, ptr %a622 + call void @finch_str_drop(ptr %a622) + store { ptr, i64, i64 } %t618, ptr %a623 + call void @finch_str_drop(ptr %a623) + %t624 = load { ptr, i64, i64 }, ptr %a619 + %t625 = load i64, ptr %t568 + %t626 = add i64 %t625, 1 + call void @finch_arr_reserve(ptr %t567, i64 %t626, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t627 = load ptr, ptr %t567 + %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 + store { ptr, i64, i64 } %t624, ptr %t628 + store i64 %t626, ptr %t568 + br label %for.step2075 +for.step2075: + %t629 = load i64, ptr %a562 + %t630 = add i64 %t629, 1 + store i64 %t630, ptr %a562 + br label %for.cond2073 +for.end2076: + call void @finch.drop.S_ast_Node(ptr %a481) + call void @finch.drop.S_gen_StructDef(ptr %a451) + br label %each.step2052 +each.step2052: + %t631 = load i64, ptr %a440 + %t632 = add i64 %t631, 1 + store i64 %t632, ptr %a440 + br label %each.cond2050 +each.end2053: + %t633 = load ptr, ptr %a1 + %t634 = icmp eq ptr %t633, null + br i1 %t634, label %panic2083, label %ok2084 +panic2083: + call void @finch_panic(ptr @.str.1197, i64 311, ptr @.str.1198) + unreachable +ok2084: + %t635 = getelementptr inbounds %S.gen.Gen, ptr %t633, i32 0, i32 0 + %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i32 0, i32 1 + %t637 = load i64, ptr %t636 + store i64 0, ptr %a638 + br label %for.cond2085 +for.cond2085: + %t639 = load i64, ptr %a638 + %t640 = icmp slt i64 %t639, %t637 + br i1 %t640, label %for.body2086, label %for.end2088 +for.body2086: + %t641 = load ptr, ptr %a1 + %t642 = icmp eq ptr %t641, null + br i1 %t642, label %panic2089, label %ok2090 +panic2089: + call void @finch_panic(ptr @.str.1199, i64 312, ptr @.str.1200) + unreachable +ok2090: + %t643 = getelementptr inbounds %S.gen.Gen, ptr %t641, i32 0, i32 0 + %t644 = load i64, ptr %a638 + %t645 = load { ptr, i64, i64 }, ptr %t643 + %t646 = extractvalue { ptr, i64, i64 } %t645, 1 + %t647 = icmp uge i64 %t644, %t646 + br i1 %t647, label %range2091, label %inrange2092 +range2091: + call void @finch_panic_index(ptr @.str.1201, i64 312, i64 %t644, i64 %t646) + unreachable +inrange2092: + %t648 = extractvalue { ptr, i64, i64 } %t645, 0 + %t649 = getelementptr inbounds %S.ast.Program, ptr %t648, i64 %t644 + %t650 = getelementptr inbounds %S.ast.Program, ptr %t649, i32 0, i32 7 + store i64 0, ptr %a651 + br label %each.cond2093 +each.cond2093: + %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %t650, i32 0, i32 1 + %t653 = load i64, ptr %t652 + %t654 = load i64, ptr %a651 + %t655 = icmp slt i64 %t654, %t653 + br i1 %t655, label %each.body2094, label %each.end2096 +each.body2094: + %t656 = load ptr, ptr %t650 + %t657 = getelementptr inbounds %S.ast.Node, ptr %t656, i64 %t654 + %t658 = load %S.ast.Node, ptr %t657 + store %S.ast.Node %t658, ptr %a659 + call void @finch.copy.S_ast_Node(ptr %a660, ptr %a659) + %t661 = load %S.ast.Node, ptr %a660 + store %S.ast.Node %t661, ptr %a662 + store { ptr, i64, i64 } { ptr @.str.1202, i64 0, i64 0 }, ptr %a663 + store { ptr, i64, i64 } zeroinitializer, ptr %a664 + %t665 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 9 + store i64 0, ptr %a666 + br label %each.cond2097 +each.cond2097: + %t667 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 + %t668 = load i64, ptr %t667 + %t669 = load i64, ptr %a666 + %t670 = icmp slt i64 %t669, %t668 + br i1 %t670, label %each.body2098, label %each.end2100 +each.body2098: + %t671 = load ptr, ptr %t665 + %t672 = getelementptr inbounds %S.ast.Node, ptr %t671, i64 %t669 + %t673 = load %S.ast.Node, ptr %t672 + store %S.ast.Node %t673, ptr %a674 + %t675 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 + %t676 = getelementptr inbounds %S.ast.Node, ptr %a674, i32 0, i32 1 + %t677 = load { ptr, i64, i64 }, ptr %t676 + store { ptr, i64, i64 } %t677, ptr %a678 + call void @finch_str_copy(ptr %a679, ptr %a678) + %t680 = load { ptr, i64, i64 }, ptr %a679 + %t681 = load i64, ptr %t675 + %t682 = add i64 %t681, 1 + call void @finch_arr_reserve(ptr %a664, i64 %t682, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t683 = load ptr, ptr %a664 + %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 + store { ptr, i64, i64 } %t680, ptr %t684 + store i64 %t682, ptr %t675 + br label %each.step2099 +each.step2099: + %t685 = load i64, ptr %a666 + %t686 = add i64 %t685, 1 + store i64 %t686, ptr %a666 + br label %each.cond2097 +each.end2100: + %t687 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1203, i64 1, i64 0 }, ptr %a688 + call void @finch_str_join(ptr %a689, ptr %a664, ptr %a688) + %t690 = load { ptr, i64, i64 }, ptr %a689 + %t691 = load { ptr, i64, i64 }, ptr %a663 + store { ptr, i64, i64 } %t690, ptr %a663 + store { ptr, i64, i64 } %t691, ptr %a692 + call void @finch_str_drop(ptr %a692) + %t693 = load ptr, ptr %a1 + %t694 = icmp eq ptr %t693, null + br i1 %t694, label %panic2101, label %ok2102 +panic2101: + call void @finch_panic(ptr @.str.1204, i64 319, ptr @.str.1205) + unreachable +ok2102: + %t695 = getelementptr inbounds %S.gen.Gen, ptr %t693, i32 0, i32 29 + %t696 = getelementptr inbounds { ptr, i64, i64 }, ptr %t695, i32 0, i32 1 + %t697 = load ptr, ptr %a1 + %t698 = icmp eq ptr %t697, null + br i1 %t698, label %panic2103, label %ok2104 +panic2103: + call void @finch_panic(ptr @.str.1207, i64 319, ptr @.str.1208) + unreachable +ok2104: + %t699 = getelementptr inbounds %S.gen.Gen, ptr %t697, i32 0, i32 0 + %t700 = load i64, ptr %a638 + %t701 = load { ptr, i64, i64 }, ptr %t699 + %t702 = extractvalue { ptr, i64, i64 } %t701, 1 + %t703 = icmp uge i64 %t700, %t702 + br i1 %t703, label %range2105, label %inrange2106 +range2105: + call void @finch_panic_index(ptr @.str.1209, i64 319, i64 %t700, i64 %t702) + unreachable +inrange2106: + %t704 = extractvalue { ptr, i64, i64 } %t701, 0 + %t705 = getelementptr inbounds %S.ast.Program, ptr %t704, i64 %t700 + %t706 = getelementptr inbounds %S.ast.Program, ptr %t705, i32 0, i32 0 + %t707 = load { ptr, i64, i64 }, ptr %t706 + store { ptr, i64, i64 } { ptr @.str.1206, i64 3, i64 0 }, ptr %a709 + store { ptr, i64, i64 } %t707, ptr %a710 + call void @finch_str_concat(ptr %a708, ptr %a709, ptr %a710) + %t711 = load { ptr, i64, i64 }, ptr %a708 + store { ptr, i64, i64 } %t711, ptr %a713 + store { ptr, i64, i64 } { ptr @.str.1210, i64 1, i64 0 }, ptr %a714 + call void @finch_str_concat(ptr %a712, ptr %a713, ptr %a714) + store { ptr, i64, i64 } %t711, ptr %a715 + call void @finch_str_drop(ptr %a715) + %t716 = load { ptr, i64, i64 }, ptr %a712 + %t717 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 1 + %t718 = load { ptr, i64, i64 }, ptr %t717 + store { ptr, i64, i64 } %t716, ptr %a720 + store { ptr, i64, i64 } %t718, ptr %a721 + call void @finch_str_concat(ptr %a719, ptr %a720, ptr %a721) + store { ptr, i64, i64 } %t716, ptr %a722 + call void @finch_str_drop(ptr %a722) + %t723 = load { ptr, i64, i64 }, ptr %a719 + store { ptr, i64, i64 } %t723, ptr %a725 + store { ptr, i64, i64 } { ptr @.str.1211, i64 1, i64 0 }, ptr %a726 + call void @finch_str_concat(ptr %a724, ptr %a725, ptr %a726) + store { ptr, i64, i64 } %t723, ptr %a727 + call void @finch_str_drop(ptr %a727) + %t728 = load { ptr, i64, i64 }, ptr %a724 + %t729 = load ptr, ptr %a1 + %t730 = icmp eq ptr %t729, null + br i1 %t730, label %panic2107, label %ok2108 +panic2107: + call void @finch_panic(ptr @.str.1212, i64 319, ptr @.str.1213) + unreachable +ok2108: + %t731 = getelementptr inbounds %S.gen.Gen, ptr %t729, i32 0, i32 1 + %t732 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 13 + %t733 = load i64, ptr %t732 + %t734 = load { ptr, i64, i64 }, ptr %t731 + %t735 = extractvalue { ptr, i64, i64 } %t734, 1 + %t736 = icmp uge i64 %t733, %t735 + br i1 %t736, label %range2109, label %inrange2110 +range2109: + call void @finch_panic_index(ptr @.str.1214, i64 319, i64 %t733, i64 %t735) + unreachable +inrange2110: + %t737 = extractvalue { ptr, i64, i64 } %t734, 0 + %t738 = getelementptr inbounds { ptr, i64, i64 }, ptr %t737, i64 %t733 + %t739 = load { ptr, i64, i64 }, ptr %t738 + store { ptr, i64, i64 } %t728, ptr %a741 + store { ptr, i64, i64 } %t739, ptr %a742 + call void @finch_str_concat(ptr %a740, ptr %a741, ptr %a742) + store { ptr, i64, i64 } %t728, ptr %a743 + call void @finch_str_drop(ptr %a743) + %t744 = load { ptr, i64, i64 }, ptr %a740 + store { ptr, i64, i64 } %t744, ptr %a746 + store { ptr, i64, i64 } { ptr @.str.1215, i64 1, i64 0 }, ptr %a747 + call void @finch_str_concat(ptr %a745, ptr %a746, ptr %a747) + store { ptr, i64, i64 } %t744, ptr %a748 + call void @finch_str_drop(ptr %a748) + %t749 = load { ptr, i64, i64 }, ptr %a745 + %t750 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 11 + %t751 = load i64, ptr %t750 + call void @finch_str_from_int(ptr %a752, i64 %t751) + %t753 = load { ptr, i64, i64 }, ptr %a752 + store { ptr, i64, i64 } %t749, ptr %a755 + store { ptr, i64, i64 } %t753, ptr %a756 + call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) + store { ptr, i64, i64 } %t749, ptr %a757 + call void @finch_str_drop(ptr %a757) + store { ptr, i64, i64 } %t753, ptr %a758 + call void @finch_str_drop(ptr %a758) + %t759 = load { ptr, i64, i64 }, ptr %a754 + store { ptr, i64, i64 } %t759, ptr %a761 + store { ptr, i64, i64 } { ptr @.str.1216, i64 1, i64 0 }, ptr %a762 + call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) + store { ptr, i64, i64 } %t759, ptr %a763 + call void @finch_str_drop(ptr %a763) + %t764 = load { ptr, i64, i64 }, ptr %a760 + %t765 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 12 + %t766 = load i64, ptr %t765 + call void @finch_str_from_int(ptr %a767, i64 %t766) + %t768 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t764, ptr %a770 + store { ptr, i64, i64 } %t768, ptr %a771 + call void @finch_str_concat(ptr %a769, ptr %a770, ptr %a771) + store { ptr, i64, i64 } %t764, ptr %a772 + call void @finch_str_drop(ptr %a772) + store { ptr, i64, i64 } %t768, ptr %a773 + call void @finch_str_drop(ptr %a773) + %t774 = load { ptr, i64, i64 }, ptr %a769 + store { ptr, i64, i64 } %t774, ptr %a776 + store { ptr, i64, i64 } { ptr @.str.1217, i64 1, i64 0 }, ptr %a777 + call void @finch_str_concat(ptr %a775, ptr %a776, ptr %a777) + store { ptr, i64, i64 } %t774, ptr %a778 + call void @finch_str_drop(ptr %a778) + %t779 = load { ptr, i64, i64 }, ptr %a775 + %t780 = load { ptr, i64, i64 }, ptr %a663 + store { ptr, i64, i64 } %t779, ptr %a782 + store { ptr, i64, i64 } %t780, ptr %a783 + call void @finch_str_concat(ptr %a781, ptr %a782, ptr %a783) + store { ptr, i64, i64 } %t779, ptr %a784 + call void @finch_str_drop(ptr %a784) + %t785 = load { ptr, i64, i64 }, ptr %a781 + %t786 = load i64, ptr %t696 + %t787 = add i64 %t786, 1 + call void @finch_arr_reserve(ptr %t695, i64 %t787, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t788 = load ptr, ptr %t695 + %t789 = getelementptr inbounds { ptr, i64, i64 }, ptr %t788, i64 %t786 + store { ptr, i64, i64 } %t785, ptr %t789 + store i64 %t787, ptr %t696 + call void @finch.drop.arr_str(ptr %a664) + call void @finch_str_drop(ptr %a663) + call void @finch.drop.S_ast_Node(ptr %a662) + br label %each.step2095 +each.step2095: + %t790 = load i64, ptr %a651 + %t791 = add i64 %t790, 1 + store i64 %t791, ptr %a651 + br label %each.cond2093 +each.end2096: + br label %for.step2087 +for.step2087: + %t792 = load i64, ptr %a638 + %t793 = add i64 %t792, 1 + store i64 %t793, ptr %a638 + br label %for.cond2085 +for.end2088: + ret void +} + +define internal void @finch.gen.fail(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2111, label %ok2112 +panic2111: + call void @finch_panic(ptr @.str.1218, i64 325, ptr @.str.1219) + unreachable +ok2112: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + br label %logic.from2113 +logic.from2113: + br i1 %t7, label %logic.rhs2114, label %logic.end2115 +logic.rhs2114: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic2116, label %ok2117 +panic2116: + call void @finch_panic(ptr @.str.1220, i64 325, ptr @.str.1221) + unreachable +ok2117: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 29 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br label %logic.rend2118 +logic.rend2118: + br label %logic.end2115 +logic.end2115: + %t14 = phi i1 [ false, %logic.from2113 ], [ %t13, %logic.rend2118 ] + br i1 %t14, label %then2119, label %endif2121 +then2119: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic2122, label %ok2123 +panic2122: + call void @finch_panic(ptr @.str.1222, i64 326, ptr @.str.1223) + unreachable +ok2123: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 29 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1224, i64 1, i64 0 }, ptr %a19 + call void @finch_str_join(ptr %a20, ptr %t17, ptr %a19) + %t21 = load { ptr, i64, i64 }, ptr %a20 + %t22 = extractvalue { ptr, i64, i64 } %t21, 1 + %t23 = trunc i64 %t22 to i32 + %t24 = extractvalue { ptr, i64, i64 } %t21, 0 + %t25 = icmp eq ptr %t24, null + %t26 = select i1 %t25, ptr @.str.1225, ptr %t24 + %t27 = call i32 (ptr, ...) @printf(ptr @.str.1226, i32 %t23, ptr %t26) + store { ptr, i64, i64 } %t21, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = call i32 (ptr, ...) @printf(ptr @.str.1227) + br label %endif2121 +endif2121: + %t30 = load ptr, ptr %a1 + %t31 = icmp eq ptr %t30, null + br i1 %t31, label %panic2124, label %ok2125 +panic2124: + call void @finch_panic(ptr @.str.1228, i64 328, ptr @.str.1229) + unreachable +ok2125: + %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 1 + %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t34 = load i64, ptr %t33 + %t35 = load { ptr, i64, i64 }, ptr %t32 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 %t34, %t36 + br i1 %t37, label %range2126, label %inrange2127 +range2126: + call void @finch_panic_index(ptr @.str.1230, i64 328, i64 %t34, i64 %t36) + unreachable +inrange2127: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t34 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1231, i64 1, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a41 + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t46 = load i64, ptr %t45 + call void @finch_str_from_int(ptr %a47, i64 %t46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t44, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t44, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.1232, i64 1, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t61 = load i64, ptr %t60 + call void @finch_str_from_int(ptr %a62, i64 %t61) + %t63 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t59, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t59, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.1233, i64 9, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t74, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t74, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic2128, label %ok2129 +panic2128: + call void @finch_panic(ptr @.str.1234, i64 328, ptr @.str.1235) + unreachable +ok2129: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 20 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } %t80, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t80, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + %t90 = extractvalue { ptr, i64, i64 } %t89, 1 + %t91 = trunc i64 %t90 to i32 + %t92 = extractvalue { ptr, i64, i64 } %t89, 0 + %t93 = icmp eq ptr %t92, null + %t94 = select i1 %t93, ptr @.str.1236, ptr %t92 + %t95 = call i32 (ptr, ...) @printf(ptr @.str.1237, i32 %t91, ptr %t94) + store { ptr, i64, i64 } %t89, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = call i32 (ptr, ...) @printf(ptr @.str.1238) + %t98 = trunc i64 1 to i32 + %t99 = call i32 @fflush(ptr null) + call void @exit(i32 %t98) + ret void +} + +define internal void @finch.gen.emit(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2130, label %ok2131 +panic2130: + call void @finch_panic(ptr @.str.1239, i64 334, ptr @.str.1240) + unreachable +ok2131: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 36 + %t6 = load i64, ptr %t5 + %t7 = icmp sge i64 %t6, 0 + br label %logic.from2132 +logic.from2132: + br i1 %t7, label %logic.rhs2133, label %logic.end2134 +logic.rhs2133: + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1242, i64 5, i64 0 }, ptr %a11 + %t12 = call i64 @finch_str_find(ptr %a9, ptr %a11) + %t13 = icmp sge i64 %t12, 0 + br label %logic.rend2135 +logic.rend2135: + br label %logic.end2134 +logic.end2134: + %t14 = phi i1 [ false, %logic.from2132 ], [ %t13, %logic.rend2135 ] + br i1 %t14, label %then2136, label %endif2138 +then2136: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic2139, label %ok2140 +panic2139: + call void @finch_panic(ptr @.str.1243, i64 335, ptr @.str.1244) + unreachable +ok2140: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 4 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1245, i64 2, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1246, i64 8, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + %t29 = load ptr, ptr %a1 + %t30 = call i64 @finch.gen.dbgLocation(ptr %t29) + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t28, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t28, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + %t39 = load i64, ptr %t18 + %t40 = add i64 %t39, 1 + call void @finch_arr_reserve(ptr %t17, i64 %t40, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t41 = load ptr, ptr %t17 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t39 + store { ptr, i64, i64 } %t38, ptr %t42 + store i64 %t40, ptr %t18 + ret void +endif2138: + %t43 = load ptr, ptr %a1 + %t44 = icmp eq ptr %t43, null + br i1 %t44, label %panic2141, label %ok2142 +panic2141: + call void @finch_panic(ptr @.str.1247, i64 338, ptr @.str.1248) + unreachable +ok2142: + %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 4 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1249, i64 2, i64 0 }, ptr %a49 + store { ptr, i64, i64 } %t47, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a48 + %t52 = load i64, ptr %t46 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %t45, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %t45 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 + store { ptr, i64, i64 } %t51, ptr %t55 + store i64 %t53, ptr %t46 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.tmpName(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic2143, label %ok2144 +panic2143: + call void @finch_panic(ptr @.str.1250, i64 342, ptr @.str.1251) + unreachable +ok2144: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 6 + %t5 = load i64, ptr %t4 + %t6 = add i64 %t5, 1 + store i64 %t6, ptr %t4 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic2145, label %ok2146 +panic2145: + call void @finch_panic(ptr @.str.1253, i64 343, ptr @.str.1254) + unreachable +ok2146: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 6 + %t10 = load i64, ptr %t9 + call void @finch_str_from_int(ptr %a11, i64 %t10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1252, i64 2, i64 0 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + ret { ptr, i64, i64 } %t17 +} + +define internal { ptr, i64, i64 } @finch.gen.newLabel(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2147, label %ok2148 +panic2147: + call void @finch_panic(ptr @.str.1255, i64 347, ptr @.str.1256) + unreachable +ok2148: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 7 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + store i64 %t7, ptr %t5 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic2149, label %ok2150 +panic2149: + call void @finch_panic(ptr @.str.1257, i64 348, ptr @.str.1258) + unreachable +ok2150: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 7 + %t12 = load i64, ptr %t11 + call void @finch_str_from_int(ptr %a13, i64 %t12) + %t14 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t8, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + ret { ptr, i64, i64 } %t19 +} + +define internal void @finch.gen.label(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2151, label %ok2152 +panic2151: + call void @finch_panic(ptr @.str.1259, i64 352, ptr @.str.1260) + unreachable +ok2152: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 4 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1261, i64 1, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + %t12 = load i64, ptr %t6 + %t13 = add i64 %t12, 1 + call void @finch_arr_reserve(ptr %t5, i64 %t13, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t14 = load ptr, ptr %t5 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t12 + store { ptr, i64, i64 } %t11, ptr %t15 + store i64 %t13, ptr %t6 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic2153, label %ok2154 +panic2153: + call void @finch_panic(ptr @.str.1262, i64 353, ptr @.str.1263) + unreachable +ok2154: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 + store i1 false, ptr %t18 + ret void +} + +define internal void @finch.gen.br(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2155, label %ok2156 +panic2155: + call void @finch_panic(ptr @.str.1264, i64 357, ptr @.str.1265) + unreachable +ok2156: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 9 + %t6 = load i1, ptr %t5 + %t7 = xor i1 %t6, true + br i1 %t7, label %then2157, label %endif2159 +then2157: + %t8 = load ptr, ptr %a1 + %t9 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1266, i64 10, i64 0 }, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.emit(ptr %t8, { ptr, i64, i64 } %t13) + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic2160, label %ok2161 +panic2160: + call void @finch_panic(ptr @.str.1267, i64 359, ptr @.str.1268) + unreachable +ok2161: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 9 + store i1 true, ptr %t17 + br label %endif2159 +endif2159: + ret void +} + +define internal void @finch.gen.condBr(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1269, i64 6, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1270, i64 9, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t15, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1271, i64 9, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t26, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a28 + call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic2162, label %ok2163 +panic2162: + call void @finch_panic(ptr @.str.1272, i64 365, ptr @.str.1273) + unreachable +ok2163: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 9 + store i1 true, ptr %t36 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.alloca(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2164, label %ok2165 +panic2164: + call void @finch_panic(ptr @.str.1274, i64 369, ptr @.str.1275) + unreachable +ok2165: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 6 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + store i64 %t7, ptr %t5 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic2166, label %ok2167 +panic2166: + call void @finch_panic(ptr @.str.1277, i64 370, ptr @.str.1278) + unreachable +ok2167: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 6 + %t11 = load i64, ptr %t10 + call void @finch_str_from_int(ptr %a12, i64 %t11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1276, i64 2, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic2168, label %ok2169 +panic2168: + call void @finch_panic(ptr @.str.1279, i64 371, ptr @.str.1280) + unreachable +ok2169: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 5 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.1281, i64 2, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1282, i64 10, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1283, i64 10, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load i64, ptr %t23 + %t46 = add i64 %t45, 1 + call void @finch_arr_reserve(ptr %t22, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t47 = load ptr, ptr %t22 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 + store { ptr, i64, i64 } %t44, ptr %t48 + store i64 %t46, ptr %t23 + %t49 = load { ptr, i64, i64 }, ptr %a19 + ret { ptr, i64, i64 } %t49 +} + +define internal { ptr, i64, i64 } @finch.gen.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t4) + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1284, i64 8, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t12, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t12, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1285, i64 6, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + %t24 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t23, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t23, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.emit(ptr %t7, { ptr, i64, i64 } %t29) + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a6 + ret { ptr, i64, i64 } %t31 +} + +define internal void @finch.gen.store(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1286, i64 6, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1287, i64 1, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t15, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1288, i64 6, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t26, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a28 + call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.spill(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t6 = load %S.ast.Type, ptr %t5 + %t7 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t4, %S.ast.Type %t6) + %t8 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } %t7) + store { ptr, i64, i64 } %t7, ptr %a9 + call void @finch_str_drop(ptr %a9) + store { ptr, i64, i64 } %t8, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load ptr, ptr %a1 + %t13 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t14 = load %S.ast.Type, ptr %t13 + %t15 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t12, %S.ast.Type %t14) + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.store(ptr %t11, { ptr, i64, i64 } %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t20 +} + +define internal { ptr, i64, i64 } @finch.gen.op(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t3) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1289, i64 3, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t11, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t11, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.gen.emit(ptr %t6, { ptr, i64, i64 } %t17) + store { ptr, i64, i64 } %t17, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a5 + ret { ptr, i64, i64 } %t19 +} + +define internal i1 @finch.gen.has({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a5 + %t6 = load i64, ptr %t3 + %t7 = load ptr, ptr %a1 + store i64 0, ptr %a8 + br label %find.cond2170 +find.cond2170: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t6 + br i1 %t10, label %find.body2171, label %find.end2174 +find.body2171: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } %t4, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %find.hit2172, label %find.next2173 +find.hit2172: + store i64 %t9, ptr %a5 + br label %find.end2174 +find.next2173: + %t17 = add i64 %t9, 1 + store i64 %t17, ptr %a8 + br label %find.cond2170 +find.end2174: + %t18 = load i64, ptr %a5 + %t19 = icmp sge i64 %t18, 0 + ret i1 %t19 +} + +define internal %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t2) + ret %S.ast.Type %t3 +} + +define internal i1 @finch.gen.isSigned(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1290, i64 3, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br label %logic.from2175 +logic.from2175: + br i1 %t12, label %logic.end2177, label %logic.rhs2176 +logic.rhs2176: + %t13 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1291, i64 2, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br label %logic.rend2178 +logic.rend2178: + br label %logic.end2177 +logic.end2177: + %t18 = phi i1 [ true, %logic.from2175 ], [ %t17, %logic.rend2178 ] + br label %logic.from2179 +logic.from2179: + br i1 %t18, label %logic.end2181, label %logic.rhs2180 +logic.rhs2180: + %t19 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1292, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend2182 +logic.rend2182: + br label %logic.end2181 +logic.end2181: + %t24 = phi i1 [ true, %logic.from2179 ], [ %t23, %logic.rend2182 ] + br label %logic.from2183 +logic.from2183: + br i1 %t24, label %logic.end2185, label %logic.rhs2184 +logic.rhs2184: + %t25 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.1293, i64 3, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend2186 +logic.rend2186: + br label %logic.end2185 +logic.end2185: + %t30 = phi i1 [ true, %logic.from2183 ], [ %t29, %logic.rend2186 ] + call void @finch_str_drop(ptr %a7) + ret i1 %t30 +} + +define internal i1 @finch.gen.isUnsigned(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1294, i64 2, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br label %logic.from2187 +logic.from2187: + br i1 %t12, label %logic.end2189, label %logic.rhs2188 +logic.rhs2188: + %t13 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1295, i64 3, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br label %logic.rend2190 +logic.rend2190: + br label %logic.end2189 +logic.end2189: + %t18 = phi i1 [ true, %logic.from2187 ], [ %t17, %logic.rend2190 ] + br label %logic.from2191 +logic.from2191: + br i1 %t18, label %logic.end2193, label %logic.rhs2192 +logic.rhs2192: + %t19 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1296, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend2194 +logic.rend2194: + br label %logic.end2193 +logic.end2193: + %t24 = phi i1 [ true, %logic.from2191 ], [ %t23, %logic.rend2194 ] + br label %logic.from2195 +logic.from2195: + br i1 %t24, label %logic.end2197, label %logic.rhs2196 +logic.rhs2196: + %t25 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.1297, i64 3, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend2198 +logic.rend2198: + br label %logic.end2197 +logic.end2197: + %t30 = phi i1 [ true, %logic.from2195 ], [ %t29, %logic.rend2198 ] + call void @finch_str_drop(ptr %a7) + ret i1 %t30 +} + +define internal i1 @finch.gen.isInt(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + %t3 = call i1 @finch.gen.isSigned(%S.ast.Type %t2) + br label %logic.from2199 +logic.from2199: + br i1 %t3, label %logic.end2201, label %logic.rhs2200 +logic.rhs2200: + %t4 = load %S.ast.Type, ptr %a1 + %t5 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t4) + br label %logic.rend2202 +logic.rend2202: + br label %logic.end2201 +logic.end2201: + %t6 = phi i1 [ true, %logic.from2199 ], [ %t5, %logic.rend2202 ] + ret i1 %t6 +} + +define internal i1 @finch.gen.isFloat(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.1298, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br label %logic.from2203 +logic.from2203: + br i1 %t7, label %logic.end2205, label %logic.rhs2204 +logic.rhs2204: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1299, i64 3, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.rend2206 +logic.rend2206: + br label %logic.end2205 +logic.end2205: + %t14 = phi i1 [ true, %logic.from2203 ], [ %t13, %logic.rend2206 ] + ret i1 %t14 +} + +define internal i1 @finch.gen.isNumber(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + %t3 = call i1 @finch.gen.isInt(%S.ast.Type %t2) + br label %logic.from2207 +logic.from2207: + br i1 %t3, label %logic.end2209, label %logic.rhs2208 +logic.rhs2208: + %t4 = load %S.ast.Type, ptr %a1 + %t5 = call i1 @finch.gen.isFloat(%S.ast.Type %t4) + br label %logic.rend2210 +logic.rend2210: + br label %logic.end2209 +logic.end2209: + %t6 = phi i1 [ true, %logic.from2207 ], [ %t5, %logic.rend2210 ] + ret i1 %t6 +} + +define internal i64 @finch.gen.bitsOf(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1300, i64 4, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then2211, label %endif2213 +then2211: + call void @finch_str_drop(ptr %a7) + ret i64 1 +endif2213: + %t13 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1301, i64 4, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br label %logic.from2214 +logic.from2214: + br i1 %t17, label %logic.end2216, label %logic.rhs2215 +logic.rhs2215: + %t18 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.1302, i64 2, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.rend2217 +logic.rend2217: + br label %logic.end2216 +logic.end2216: + %t23 = phi i1 [ true, %logic.from2214 ], [ %t22, %logic.rend2217 ] + br label %logic.from2218 +logic.from2218: + br i1 %t23, label %logic.end2220, label %logic.rhs2219 +logic.rhs2219: + %t24 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1303, i64 2, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.rend2221 +logic.rend2221: + br label %logic.end2220 +logic.end2220: + %t29 = phi i1 [ true, %logic.from2218 ], [ %t28, %logic.rend2221 ] + br i1 %t29, label %then2222, label %endif2224 +then2222: + call void @finch_str_drop(ptr %a7) + ret i64 8 +endif2224: + %t30 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t30, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.1304, i64 3, i64 0 }, ptr %a32 + %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) + %t34 = icmp ne i32 %t33, 0 + br label %logic.from2225 +logic.from2225: + br i1 %t34, label %logic.end2227, label %logic.rhs2226 +logic.rhs2226: + %t35 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.1305, i64 3, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.rend2228 +logic.rend2228: + br label %logic.end2227 +logic.end2227: + %t40 = phi i1 [ true, %logic.from2225 ], [ %t39, %logic.rend2228 ] + br i1 %t40, label %then2229, label %endif2231 +then2229: + call void @finch_str_drop(ptr %a7) + ret i64 16 +endif2231: + %t41 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1306, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.from2232 +logic.from2232: + br i1 %t45, label %logic.end2234, label %logic.rhs2233 +logic.rhs2233: + %t46 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t46, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.1307, i64 3, i64 0 }, ptr %a48 + %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) + %t50 = icmp ne i32 %t49, 0 + br label %logic.rend2235 +logic.rend2235: + br label %logic.end2234 +logic.end2234: + %t51 = phi i1 [ true, %logic.from2232 ], [ %t50, %logic.rend2235 ] + br label %logic.from2236 +logic.from2236: + br i1 %t51, label %logic.end2238, label %logic.rhs2237 +logic.rhs2237: + %t52 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.1308, i64 3, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br label %logic.rend2239 +logic.rend2239: + br label %logic.end2238 +logic.end2238: + %t57 = phi i1 [ true, %logic.from2236 ], [ %t56, %logic.rend2239 ] + br i1 %t57, label %then2240, label %endif2242 +then2240: + call void @finch_str_drop(ptr %a7) + ret i64 32 +endif2242: + call void @finch_str_drop(ptr %a7) + ret i64 64 +} + +define internal i1 @finch.gen.widens(%S.ast.Type %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a1 + %t4 = call i1 @finch.gen.isInt(%S.ast.Type %t3) + %t5 = xor i1 %t4, true + br label %logic.from2243 +logic.from2243: + br i1 %t5, label %logic.end2245, label %logic.rhs2244 +logic.rhs2244: + %t6 = load %S.ast.Type, ptr %a2 + %t7 = call i1 @finch.gen.isInt(%S.ast.Type %t6) + %t8 = xor i1 %t7, true + br label %logic.rend2246 +logic.rend2246: + br label %logic.end2245 +logic.end2245: + %t9 = phi i1 [ true, %logic.from2243 ], [ %t8, %logic.rend2246 ] + br i1 %t9, label %then2247, label %endif2249 +then2247: + ret i1 false +endif2249: + %t10 = load %S.ast.Type, ptr %a1 + %t11 = call i1 @finch.gen.isSigned(%S.ast.Type %t10) + br label %logic.from2250 +logic.from2250: + br i1 %t11, label %logic.rhs2251, label %logic.end2252 +logic.rhs2251: + %t12 = load %S.ast.Type, ptr %a2 + %t13 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t12) + br label %logic.rend2253 +logic.rend2253: + br label %logic.end2252 +logic.end2252: + %t14 = phi i1 [ false, %logic.from2250 ], [ %t13, %logic.rend2253 ] + br i1 %t14, label %then2254, label %endif2256 +then2254: + ret i1 false +endif2256: + %t15 = load %S.ast.Type, ptr %a2 + %t16 = call i64 @finch.gen.bitsOf(%S.ast.Type %t15) + %t17 = load %S.ast.Type, ptr %a1 + %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) + %t19 = icmp sgt i64 %t16, %t18 + ret i1 %t19 +} + +define internal i1 @finch.gen.fits({ ptr, i64, i64 } %p0, %S.ast.Type %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a13 = alloca i64, align 16 + %a31 = alloca i64, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load %S.ast.Type, ptr %a3 + %t5 = call i1 @finch.gen.isInt(%S.ast.Type %t4) + %t6 = xor i1 %t5, true + br i1 %t6, label %then2257, label %endif2259 +then2257: + ret i1 false +endif2259: + %t7 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = call i64 @finch_str_to_int(ptr %a8, ptr @.str.1309, i64 464) + store i64 %t9, ptr %a10 + %t11 = load %S.ast.Type, ptr %a3 + %t12 = call i64 @finch.gen.bitsOf(%S.ast.Type %t11) + store i64 %t12, ptr %a13 + %t14 = load i64, ptr %a10 + %t15 = icmp slt i64 %t14, 0 + br i1 %t15, label %then2260, label %endif2262 +then2260: + %t16 = load %S.ast.Type, ptr %a3 + %t17 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t16) + br i1 %t17, label %then2263, label %endif2265 +then2263: + ret i1 false +endif2265: + %t18 = load i64, ptr %a13 + %t19 = icmp eq i64 %t18, 64 + br i1 %t19, label %then2266, label %endif2268 +then2266: + ret i1 true +endif2268: + %t20 = load i64, ptr %a10 + %t21 = load i64, ptr %a13 + %t22 = sub i64 %t21, 1 + %t23 = shl i64 1, %t22 + %t24 = sub i64 0, %t23 + %t25 = icmp sge i64 %t20, %t24 + ret i1 %t25 +endif2262: + %t26 = load i64, ptr %a13 + %t27 = icmp eq i64 %t26, 64 + br i1 %t27, label %then2269, label %endif2271 +then2269: + ret i1 true +endif2271: + %t28 = load i64, ptr %a13 + %t29 = shl i64 1, %t28 + %t30 = sub i64 %t29, 1 + store i64 %t30, ptr %a31 + %t32 = load %S.ast.Type, ptr %a3 + %t33 = call i1 @finch.gen.isSigned(%S.ast.Type %t32) + br i1 %t33, label %then2272, label %endif2274 +then2272: + %t34 = load i64, ptr %a13 + %t35 = sub i64 %t34, 1 + %t36 = shl i64 1, %t35 + %t37 = sub i64 %t36, 1 + store i64 %t37, ptr %a31 + br label %endif2274 +endif2274: + %t38 = load i64, ptr %a10 + %t39 = load i64, ptr %a31 + %t40 = icmp sle i64 %t38, %t39 + ret i1 %t40 +} + +define internal i64 @finch.gen.findStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2275, label %ok2276 +panic2275: + call void @finch_panic(ptr @.str.1310, i64 486, ptr @.str.1311) + unreachable +ok2276: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 16 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond2277 +for.cond2277: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body2278, label %for.end2280 +for.body2278: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic2281, label %ok2282 +panic2281: + call void @finch_panic(ptr @.str.1312, i64 487, ptr @.str.1313) + unreachable +ok2282: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range2283, label %inrange2284 +range2283: + call void @finch_panic_index(ptr @.str.1314, i64 487, i64 %t15, i64 %t17) + unreachable +inrange2284: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.StructDef, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.StructDef, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from2285 +logic.from2285: + br i1 %t27, label %logic.rhs2286, label %logic.end2287 +logic.rhs2286: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2288, label %ok2289 +panic2288: + call void @finch_panic(ptr @.str.1315, i64 487, ptr @.str.1316) + unreachable +ok2289: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range2290, label %inrange2291 +range2290: + call void @finch_panic_index(ptr @.str.1317, i64 487, i64 %t31, i64 %t33) + unreachable +inrange2291: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend2292 +logic.rend2292: + br label %logic.end2287 +logic.end2287: + %t44 = phi i1 [ false, %logic.from2285 ], [ %t43, %logic.rend2292 ] + br i1 %t44, label %then2293, label %endif2295 +then2293: + %t45 = load i64, ptr %a9 + ret i64 %t45 +endif2295: + br label %for.step2279 +for.step2279: + %t46 = load i64, ptr %a9 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a9 + br label %for.cond2277 +for.end2280: + ret i64 -1 +} + +define internal i64 @finch.gen.findEnum(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2296, label %ok2297 +panic2296: + call void @finch_panic(ptr @.str.1318, i64 495, ptr @.str.1319) + unreachable +ok2297: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond2298 +for.cond2298: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body2299, label %for.end2301 +for.body2299: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic2302, label %ok2303 +panic2302: + call void @finch_panic(ptr @.str.1320, i64 496, ptr @.str.1321) + unreachable +ok2303: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 21 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range2304, label %inrange2305 +range2304: + call void @finch_panic_index(ptr @.str.1322, i64 496, i64 %t15, i64 %t17) + unreachable +inrange2305: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.EnumDef, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from2306 +logic.from2306: + br i1 %t27, label %logic.rhs2307, label %logic.end2308 +logic.rhs2307: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2309, label %ok2310 +panic2309: + call void @finch_panic(ptr @.str.1323, i64 496, ptr @.str.1324) + unreachable +ok2310: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 21 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range2311, label %inrange2312 +range2311: + call void @finch_panic_index(ptr @.str.1325, i64 496, i64 %t31, i64 %t33) + unreachable +inrange2312: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.EnumDef, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend2313 +logic.rend2313: + br label %logic.end2308 +logic.end2308: + %t44 = phi i1 [ false, %logic.from2306 ], [ %t43, %logic.rend2313 ] + br i1 %t44, label %then2314, label %endif2316 +then2314: + %t45 = load i64, ptr %a9 + ret i64 %t45 +endif2316: + br label %for.step2300 +for.step2300: + %t46 = load i64, ptr %a9 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a9 + br label %for.cond2298 +for.end2301: + ret i64 -1 +} + +define internal i64 @finch.gen.findSum(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2317, label %ok2318 +panic2317: + call void @finch_panic(ptr @.str.1326, i64 504, ptr @.str.1327) + unreachable +ok2318: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond2319 +for.cond2319: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body2320, label %for.end2322 +for.body2320: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic2323, label %ok2324 +panic2323: + call void @finch_panic(ptr @.str.1328, i64 505, ptr @.str.1329) + unreachable +ok2324: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 22 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range2325, label %inrange2326 +range2325: + call void @finch_panic_index(ptr @.str.1330, i64 505, i64 %t15, i64 %t17) + unreachable +inrange2326: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.SumDef, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.SumDef, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from2327 +logic.from2327: + br i1 %t27, label %logic.rhs2328, label %logic.end2329 +logic.rhs2328: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2330, label %ok2331 +panic2330: + call void @finch_panic(ptr @.str.1331, i64 505, ptr @.str.1332) + unreachable +ok2331: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 22 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range2332, label %inrange2333 +range2332: + call void @finch_panic_index(ptr @.str.1333, i64 505, i64 %t31, i64 %t33) + unreachable +inrange2333: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.SumDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.SumDef, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend2334 +logic.rend2334: + br label %logic.end2329 +logic.end2329: + %t44 = phi i1 [ false, %logic.from2327 ], [ %t43, %logic.rend2334 ] + br i1 %t44, label %then2335, label %endif2337 +then2335: + %t45 = load i64, ptr %a9 + ret i64 %t45 +endif2337: + br label %for.step2321 +for.step2321: + %t46 = load i64, ptr %a9 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a9 + br label %for.cond2319 +for.end2322: + ret i64 -1 +} + +define internal i64 @finch.gen.progOf(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2338, label %ok2339 +panic2338: + call void @finch_panic(ptr @.str.1334, i64 513, ptr @.str.1335) + unreachable +ok2339: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond2340 +for.cond2340: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body2341, label %for.end2343 +for.body2341: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2344, label %ok2345 +panic2344: + call void @finch_panic(ptr @.str.1336, i64 514, ptr @.str.1337) + unreachable +ok2345: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 0 + %t14 = load i64, ptr %a8 + %t15 = load { ptr, i64, i64 }, ptr %t13 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 %t14, %t16 + br i1 %t17, label %range2346, label %inrange2347 +range2346: + call void @finch_panic_index(ptr @.str.1338, i64 514, i64 %t14, i64 %t16) + unreachable +inrange2347: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i64 %t14 + %t20 = getelementptr inbounds %S.ast.Program, ptr %t19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } %t22, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then2348, label %endif2350 +then2348: + %t27 = load i64, ptr %a8 + ret i64 %t27 +endif2350: + br label %for.step2342 +for.step2342: + %t28 = load i64, ptr %a8 + %t29 = add i64 %t28, 1 + store i64 %t29, ptr %a8 + br label %for.cond2340 +for.end2343: + ret i64 -1 +} + +define internal i1 @finch.gen.imports(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca i64, align 16 + %a23 = alloca i64, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2351, label %ok2352 +panic2351: + call void @finch_panic(ptr @.str.1339, i64 522, ptr @.str.1340) + unreachable +ok2352: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic2353, label %ok2354 +panic2353: + call void @finch_panic(ptr @.str.1341, i64 522, ptr @.str.1342) + unreachable +ok2354: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 14 + %t10 = load { ptr, i64, i64 }, ptr %t9 + %t11 = call i64 @finch.gen.progOf(ptr %t6, { ptr, i64, i64 } %t10) + %t12 = load { ptr, i64, i64 }, ptr %t5 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range2355, label %inrange2356 +range2355: + call void @finch_panic_index(ptr @.str.1343, i64 522, i64 %t11, i64 %t13) + unreachable +inrange2356: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Program, ptr %t15, i64 %t11 + %t17 = getelementptr inbounds %S.ast.Program, ptr %t16, i32 0, i32 2 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a20 + %t21 = load i64, ptr %t18 + %t22 = load ptr, ptr %t17 + store i64 0, ptr %a23 + br label %find.cond2357 +find.cond2357: + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, %t21 + br i1 %t25, label %find.body2358, label %find.end2361 +find.body2358: + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t24 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } %t19, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %find.hit2359, label %find.next2360 +find.hit2359: + store i64 %t24, ptr %a20 + br label %find.end2361 +find.next2360: + %t32 = add i64 %t24, 1 + store i64 %t32, ptr %a23 + br label %find.cond2357 +find.end2361: + %t33 = load i64, ptr %a20 + %t34 = icmp sge i64 %t33, 0 + ret i1 %t34 +} + +define internal %S.ast.Type @finch.gen.resolve(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca %S.ast.Type, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca %S.ast.Type, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca %S.ast.Type, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca %S.ast.Type, align 16 + %a142 = alloca %S.ast.Type, align 16 + %a155 = alloca %S.ast.Type, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca %S.ast.Type, align 16 + %a164 = alloca %S.ast.Type, align 16 + %a181 = alloca i64, align 16 + %a184 = alloca i64, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca i64, align 16 + %a209 = alloca i64, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca %S.ast.Type, align 16 + %a227 = alloca %S.ast.Type, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca i64, align 16 + %a243 = alloca %S.ast.Type, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.1344, i64 5, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then2362, label %endif2364 +then2362: + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 0, %t13 + br i1 %t14, label %range2365, label %inrange2366 +range2365: + call void @finch_panic_index(ptr @.str.1345, i64 527, i64 0, i64 %t13) + unreachable +inrange2366: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = load %S.ast.Node, ptr %a3 + %t19 = call %S.ast.Type @finch.gen.resolve(ptr %t10, %S.ast.Type %t17, %S.ast.Node %t18) + %t20 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t19) + store %S.ast.Type %t19, ptr %a21 + call void @finch.drop.S_ast_Type(ptr %a21) + ret %S.ast.Type %t20 +endif2364: + %t22 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1346, i64 3, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then2367, label %endif2369 +then2367: + %t28 = load ptr, ptr %a1 + %t29 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 0, %t31 + br i1 %t32, label %range2370, label %inrange2371 +range2370: + call void @finch_panic_index(ptr @.str.1347, i64 530, i64 0, i64 %t31) + unreachable +inrange2371: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Type, ptr %t33, i64 0 + %t35 = load %S.ast.Type, ptr %t34 + %t36 = load %S.ast.Node, ptr %a3 + %t37 = call %S.ast.Type @finch.gen.resolve(ptr %t28, %S.ast.Type %t35, %S.ast.Node %t36) + store %S.ast.Type %t37, ptr %a38 + %t39 = load %S.ast.Type, ptr %a38 + %t40 = call i1 @finch.gen.isInt(%S.ast.Type %t39) + %t41 = xor i1 %t40, true + br label %logic.from2372 +logic.from2372: + br i1 %t41, label %logic.rhs2373, label %logic.end2374 +logic.rhs2373: + %t42 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.1348, i64 4, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp eq i32 %t46, 0 + br label %logic.rend2375 +logic.rend2375: + br label %logic.end2374 +logic.end2374: + %t48 = phi i1 [ false, %logic.from2372 ], [ %t47, %logic.rend2375 ] + br label %logic.from2376 +logic.from2376: + br i1 %t48, label %logic.rhs2377, label %logic.end2378 +logic.rhs2377: + %t49 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.1349, i64 4, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp eq i32 %t53, 0 + br label %logic.rend2379 +logic.rend2379: + br label %logic.end2378 +logic.end2378: + %t55 = phi i1 [ false, %logic.from2376 ], [ %t54, %logic.rend2379 ] + br label %logic.from2380 +logic.from2380: + br i1 %t55, label %logic.rhs2381, label %logic.end2382 +logic.rhs2381: + %t56 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.1350, i64 3, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp eq i32 %t60, 0 + br label %logic.rend2383 +logic.rend2383: + br label %logic.end2382 +logic.end2382: + %t62 = phi i1 [ false, %logic.from2380 ], [ %t61, %logic.rend2383 ] + br label %logic.from2384 +logic.from2384: + br i1 %t62, label %logic.rhs2385, label %logic.end2386 +logic.rhs2385: + %t63 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t64 = load { ptr, i64, i64 }, ptr %t63 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.1351, i64 4, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp eq i32 %t67, 0 + br label %logic.rend2387 +logic.rend2387: + br label %logic.end2386 +logic.end2386: + %t69 = phi i1 [ false, %logic.from2384 ], [ %t68, %logic.rend2387 ] + br i1 %t69, label %then2388, label %endif2390 +then2388: + %t70 = load ptr, ptr %a1 + %t71 = load %S.ast.Node, ptr %a3 + %t72 = load %S.ast.Type, ptr %a38 + %t73 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t72) + store { ptr, i64, i64 } { ptr @.str.1352, i64 63, i64 0 }, ptr %a75 + store { ptr, i64, i64 } %t73, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif2390 +endif2390: + %t80 = load ptr, ptr %a1 + %t81 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t82 = load { ptr, i64, i64 }, ptr %t81 + %t83 = extractvalue { ptr, i64, i64 } %t82, 1 + %t84 = icmp uge i64 1, %t83 + br i1 %t84, label %range2391, label %inrange2392 +range2391: + call void @finch_panic_index(ptr @.str.1353, i64 534, i64 1, i64 %t83) + unreachable +inrange2392: + %t85 = extractvalue { ptr, i64, i64 } %t82, 0 + %t86 = getelementptr inbounds %S.ast.Type, ptr %t85, i64 1 + %t87 = load %S.ast.Type, ptr %t86 + %t88 = load %S.ast.Node, ptr %a3 + %t89 = call %S.ast.Type @finch.gen.resolve(ptr %t80, %S.ast.Type %t87, %S.ast.Node %t88) + store %S.ast.Type %t89, ptr %a90 + %t91 = getelementptr inbounds %S.ast.Type, ptr %a90, i32 0, i32 0 + %t92 = load { ptr, i64, i64 }, ptr %t91 + store { ptr, i64, i64 } %t92, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.1354, i64 4, i64 0 }, ptr %a94 + %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) + %t96 = icmp ne i32 %t95, 0 + br i1 %t96, label %then2393, label %endif2395 +then2393: + %t97 = load ptr, ptr %a1 + %t98 = load %S.ast.Node, ptr %a3 + call void @finch.gen.fail(ptr %t97, %S.ast.Node %t98, { ptr, i64, i64 } { ptr @.str.1355, i64 41, i64 0 }) + br label %endif2395 +endif2395: + %t99 = load %S.ast.Type, ptr %a38 + %t100 = load %S.ast.Type, ptr %a90 + %t101 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t99, %S.ast.Type %t100) + call void @finch.drop.S_ast_Type(ptr %a90) + call void @finch.drop.S_ast_Type(ptr %a38) + ret %S.ast.Type %t101 +endif2369: + %t102 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.1356, i64 5, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br i1 %t107, label %then2396, label %endif2398 +then2396: + %t108 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1357, i64 5, i64 0 }, 0 + %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t110 = load i64, ptr %t109 + %t111 = insertvalue %S.ast.Type %t108, i64 %t110, 4 + store %S.ast.Type %t111, ptr %a112 + %t113 = getelementptr inbounds %S.ast.Type, ptr %a112, i32 0, i32 1 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i32 0, i32 1 + %t115 = load ptr, ptr %a1 + %t116 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t117 = load { ptr, i64, i64 }, ptr %t116 + %t118 = extractvalue { ptr, i64, i64 } %t117, 1 + %t119 = icmp uge i64 0, %t118 + br i1 %t119, label %range2399, label %inrange2400 +range2399: + call void @finch_panic_index(ptr @.str.1358, i64 542, i64 0, i64 %t118) + unreachable +inrange2400: + %t120 = extractvalue { ptr, i64, i64 } %t117, 0 + %t121 = getelementptr inbounds %S.ast.Type, ptr %t120, i64 0 + %t122 = load %S.ast.Type, ptr %t121 + %t123 = load %S.ast.Node, ptr %a3 + %t124 = call %S.ast.Type @finch.gen.resolve(ptr %t115, %S.ast.Type %t122, %S.ast.Node %t123) + %t125 = load i64, ptr %t114 + %t126 = add i64 %t125, 1 + call void @finch_arr_reserve(ptr %t113, i64 %t126, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t127 = load ptr, ptr %t113 + %t128 = getelementptr inbounds %S.ast.Type, ptr %t127, i64 %t125 + store %S.ast.Type %t124, ptr %t128 + store i64 %t126, ptr %t114 + %t129 = load %S.ast.Type, ptr %a112 + ret %S.ast.Type %t129 +endif2398: + %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t131 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t131, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.1359, i64 3, i64 0 }, ptr %a133 + %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) + %t135 = icmp ne i32 %t134, 0 + br i1 %t135, label %then2401, label %endif2403 +then2401: + %t136 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 + %t138 = load i64, ptr %t137 + %t139 = icmp eq i64 %t138, 0 + br i1 %t139, label %then2404, label %endif2406 +then2404: + %t140 = load %S.ast.Type, ptr %a2 + store %S.ast.Type %t140, ptr %a141 + call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) + %t143 = load %S.ast.Type, ptr %a142 + ret %S.ast.Type %t143 +endif2406: + %t144 = load ptr, ptr %a1 + %t145 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t146 = load { ptr, i64, i64 }, ptr %t145 + %t147 = extractvalue { ptr, i64, i64 } %t146, 1 + %t148 = icmp uge i64 0, %t147 + br i1 %t148, label %range2407, label %inrange2408 +range2407: + call void @finch_panic_index(ptr @.str.1360, i64 549, i64 0, i64 %t147) + unreachable +inrange2408: + %t149 = extractvalue { ptr, i64, i64 } %t146, 0 + %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 0 + %t151 = load %S.ast.Type, ptr %t150 + %t152 = load %S.ast.Node, ptr %a3 + %t153 = call %S.ast.Type @finch.gen.resolve(ptr %t144, %S.ast.Type %t151, %S.ast.Node %t152) + %t154 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t153) + store %S.ast.Type %t153, ptr %a155 + call void @finch.drop.S_ast_Type(ptr %a155) + ret %S.ast.Type %t154 +endif2403: + %t156 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.1361, i64 5, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) + %t161 = icmp eq i32 %t160, 0 + br i1 %t161, label %then2409, label %endif2411 +then2409: + %t162 = load %S.ast.Type, ptr %a2 + store %S.ast.Type %t162, ptr %a163 + call void @finch.copy.S_ast_Type(ptr %a164, ptr %a163) + %t165 = load %S.ast.Type, ptr %a164 + ret %S.ast.Type %t165 +endif2411: + %t166 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i32 0, i32 1 + %t168 = load i64, ptr %t167 + %t169 = icmp eq i64 %t168, 0 + br label %logic.from2412 +logic.from2412: + br i1 %t169, label %logic.rhs2413, label %logic.end2414 +logic.rhs2413: + %t170 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 + %t172 = load i64, ptr %t171 + %t173 = icmp eq i64 %t172, 0 + br label %logic.rend2415 +logic.rend2415: + br label %logic.end2414 +logic.end2414: + %t174 = phi i1 [ false, %logic.from2412 ], [ %t173, %logic.rend2415 ] + br label %logic.from2416 +logic.from2416: + br i1 %t174, label %logic.rhs2417, label %logic.end2418 +logic.rhs2417: + %t175 = load ptr, ptr %a1 + %t176 = icmp eq ptr %t175, null + br i1 %t176, label %panic2419, label %ok2420 +panic2419: + call void @finch_panic(ptr @.str.1362, i64 555, ptr @.str.1363) + unreachable +ok2420: + %t177 = getelementptr inbounds %S.gen.Gen, ptr %t175, i32 0, i32 18 + %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 + %t179 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t180 = load { ptr, i64, i64 }, ptr %t179 + store i64 -1, ptr %a181 + %t182 = load i64, ptr %t178 + %t183 = load ptr, ptr %t177 + store i64 0, ptr %a184 + br label %find.cond2421 +find.cond2421: + %t185 = load i64, ptr %a184 + %t186 = icmp slt i64 %t185, %t182 + br i1 %t186, label %find.body2422, label %find.end2425 +find.body2422: + %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i64 %t185 + %t188 = load { ptr, i64, i64 }, ptr %t187 + store { ptr, i64, i64 } %t188, ptr %a189 + store { ptr, i64, i64 } %t180, ptr %a190 + %t191 = call i32 @finch_str_eq(ptr %a189, ptr %a190) + %t192 = icmp ne i32 %t191, 0 + br i1 %t192, label %find.hit2423, label %find.next2424 +find.hit2423: + store i64 %t185, ptr %a181 + br label %find.end2425 +find.next2424: + %t193 = add i64 %t185, 1 + store i64 %t193, ptr %a184 + br label %find.cond2421 +find.end2425: + %t194 = load i64, ptr %a181 + %t195 = icmp sge i64 %t194, 0 + br label %logic.rend2426 +logic.rend2426: + br label %logic.end2418 +logic.end2418: + %t196 = phi i1 [ false, %logic.from2416 ], [ %t195, %logic.rend2426 ] + br i1 %t196, label %then2427, label %endif2429 +then2427: + %t197 = load ptr, ptr %a1 + %t198 = icmp eq ptr %t197, null + br i1 %t198, label %panic2430, label %ok2431 +panic2430: + call void @finch_panic(ptr @.str.1364, i64 556, ptr @.str.1365) + unreachable +ok2431: + %t199 = getelementptr inbounds %S.gen.Gen, ptr %t197, i32 0, i32 19 + %t200 = load ptr, ptr %a1 + %t201 = icmp eq ptr %t200, null + br i1 %t201, label %panic2432, label %ok2433 +panic2432: + call void @finch_panic(ptr @.str.1366, i64 556, ptr @.str.1367) + unreachable +ok2433: + %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 18 + %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i32 0, i32 1 + %t204 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t205 = load { ptr, i64, i64 }, ptr %t204 + store i64 -1, ptr %a206 + %t207 = load i64, ptr %t203 + %t208 = load ptr, ptr %t202 + store i64 0, ptr %a209 + br label %find.cond2434 +find.cond2434: + %t210 = load i64, ptr %a209 + %t211 = icmp slt i64 %t210, %t207 + br i1 %t211, label %find.body2435, label %find.end2438 +find.body2435: + %t212 = getelementptr inbounds { ptr, i64, i64 }, ptr %t208, i64 %t210 + %t213 = load { ptr, i64, i64 }, ptr %t212 + store { ptr, i64, i64 } %t213, ptr %a214 + store { ptr, i64, i64 } %t205, ptr %a215 + %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) + %t217 = icmp ne i32 %t216, 0 + br i1 %t217, label %find.hit2436, label %find.next2437 +find.hit2436: + store i64 %t210, ptr %a206 + br label %find.end2438 +find.next2437: + %t218 = add i64 %t210, 1 + store i64 %t218, ptr %a209 + br label %find.cond2434 +find.end2438: + %t219 = load i64, ptr %a206 + %t220 = load { ptr, i64, i64 }, ptr %t199 + %t221 = extractvalue { ptr, i64, i64 } %t220, 1 + %t222 = icmp uge i64 %t219, %t221 + br i1 %t222, label %range2439, label %inrange2440 +range2439: + call void @finch_panic_index(ptr @.str.1368, i64 556, i64 %t219, i64 %t221) + unreachable +inrange2440: + %t223 = extractvalue { ptr, i64, i64 } %t220, 0 + %t224 = getelementptr inbounds %S.ast.Type, ptr %t223, i64 %t219 + %t225 = load %S.ast.Type, ptr %t224 + store %S.ast.Type %t225, ptr %a226 + call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) + %t228 = load %S.ast.Type, ptr %a227 + ret %S.ast.Type %t228 +endif2429: + %t229 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 + %t231 = load i64, ptr %t230 + %t232 = icmp sgt i64 %t231, 0 + br i1 %t232, label %then2441, label %endif2443 +then2441: + store { ptr, i64, i64 } zeroinitializer, ptr %a233 + %t234 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + store i64 0, ptr %a235 + br label %each.cond2444 +each.cond2444: + %t236 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 + %t237 = load i64, ptr %t236 + %t238 = load i64, ptr %a235 + %t239 = icmp slt i64 %t238, %t237 + br i1 %t239, label %each.body2445, label %each.end2447 +each.body2445: + %t240 = load ptr, ptr %t234 + %t241 = getelementptr inbounds %S.ast.Type, ptr %t240, i64 %t238 + %t242 = load %S.ast.Type, ptr %t241 + store %S.ast.Type %t242, ptr %a243 + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a233, i32 0, i32 1 + %t245 = load ptr, ptr %a1 + %t246 = load %S.ast.Type, ptr %a243 + %t247 = load %S.ast.Node, ptr %a3 + %t248 = call %S.ast.Type @finch.gen.resolve(ptr %t245, %S.ast.Type %t246, %S.ast.Node %t247) + %t249 = load i64, ptr %t244 + %t250 = add i64 %t249, 1 + call void @finch_arr_reserve(ptr %a233, i64 %t250, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t251 = load ptr, ptr %a233 + %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i64 %t249 + store %S.ast.Type %t248, ptr %t252 + store i64 %t250, ptr %t244 + br label %each.step2446 +each.step2446: + %t253 = load i64, ptr %a235 + %t254 = add i64 %t253, 1 + store i64 %t254, ptr %a235 + br label %each.cond2444 +each.end2447: + %t255 = load ptr, ptr %a1 + %t256 = icmp eq ptr %t255, null + br i1 %t256, label %panic2448, label %ok2449 +panic2448: + call void @finch_panic(ptr @.str.1369, i64 564, ptr @.str.1370) + unreachable +ok2449: + %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 14 + %t258 = load { ptr, i64, i64 }, ptr %t257 + store { ptr, i64, i64 } %t258, ptr %a259 + call void @finch_str_copy(ptr %a260, ptr %a259) + %t261 = load { ptr, i64, i64 }, ptr %a260 + store { ptr, i64, i64 } %t261, ptr %a262 + %t263 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + %t265 = load i64, ptr %t264 + %t266 = icmp sgt i64 %t265, 0 + br i1 %t266, label %then2450, label %endif2452 +then2450: + %t267 = load ptr, ptr %a1 + %t268 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t269 = load { ptr, i64, i64 }, ptr %t268 + %t270 = call i1 @finch.gen.imports(ptr %t267, { ptr, i64, i64 } %t269) + %t271 = xor i1 %t270, true + br i1 %t271, label %then2453, label %endif2455 +then2453: + %t272 = load ptr, ptr %a1 + %t273 = load %S.ast.Node, ptr %a3 + %t274 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t275 = load { ptr, i64, i64 }, ptr %t274 + store { ptr, i64, i64 } { ptr @.str.1371, i64 1, i64 0 }, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t279, ptr %a281 + store { ptr, i64, i64 } { ptr @.str.1372, i64 36, i64 0 }, ptr %a282 + call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) + store { ptr, i64, i64 } %t279, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a280 + %t285 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t286 = load { ptr, i64, i64 }, ptr %t285 + store { ptr, i64, i64 } %t284, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t284, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.1373, i64 1, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + call void @finch.gen.fail(ptr %t272, %S.ast.Node %t273, { ptr, i64, i64 } %t296) + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_drop(ptr %a297) + br label %endif2455 +endif2455: + %t298 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t299 = load { ptr, i64, i64 }, ptr %t298 + store { ptr, i64, i64 } %t299, ptr %a300 + call void @finch_str_copy(ptr %a301, ptr %a300) + %t302 = load { ptr, i64, i64 }, ptr %a301 + %t303 = load { ptr, i64, i64 }, ptr %a262 + store { ptr, i64, i64 } %t302, ptr %a262 + store { ptr, i64, i64 } %t303, ptr %a304 + call void @finch_str_drop(ptr %a304) + br label %endif2452 +endif2452: + %t305 = load ptr, ptr %a1 + %t306 = load { ptr, i64, i64 }, ptr %a262 + %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t308 = load { ptr, i64, i64 }, ptr %t307 + %t309 = load { ptr, i64, i64 }, ptr %a233 + %t310 = load %S.ast.Node, ptr %a3 + %t311 = call %S.ast.Type @finch.gen.instStruct(ptr %t305, { ptr, i64, i64 } %t306, { ptr, i64, i64 } %t308, { ptr, i64, i64 } %t309, %S.ast.Node %t310) + call void @finch_str_drop(ptr %a262) + call void @finch.drop.arr_S_ast_Type(ptr %a233) + ret %S.ast.Type %t311 +endif2443: + %t312 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t313 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t313, ptr %a314 + store { ptr, i64, i64 } { ptr @.str.1374, i64 1, i64 0 }, ptr %a315 + %t316 = call i32 @finch_str_eq(ptr %a314, ptr %a315) + %t317 = icmp ne i32 %t316, 0 + br i1 %t317, label %then2456, label %endif2458 +then2456: + %t318 = load ptr, ptr %a1 + %t319 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t320 = load { ptr, i64, i64 }, ptr %t319 + %t321 = call i64 @finch.gen.findStruct(ptr %t318, { ptr, i64, i64 } { ptr @.str.1375, i64 1, i64 0 }, { ptr, i64, i64 } %t320) + %t322 = icmp slt i64 %t321, 0 + br i1 %t322, label %then2459, label %endif2461 +then2459: + %t323 = load ptr, ptr %a1 + %t324 = load %S.ast.Node, ptr %a3 + %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t326 = load { ptr, i64, i64 }, ptr %t325 + store { ptr, i64, i64 } { ptr @.str.1376, i64 28, i64 0 }, ptr %a328 + store { ptr, i64, i64 } %t326, ptr %a329 + call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) + %t330 = load { ptr, i64, i64 }, ptr %a327 + store { ptr, i64, i64 } %t330, ptr %a332 + store { ptr, i64, i64 } { ptr @.str.1377, i64 1, i64 0 }, ptr %a333 + call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333) + store { ptr, i64, i64 } %t330, ptr %a334 + call void @finch_str_drop(ptr %a334) + %t335 = load { ptr, i64, i64 }, ptr %a331 + call void @finch.gen.fail(ptr %t323, %S.ast.Node %t324, { ptr, i64, i64 } %t335) + store { ptr, i64, i64 } %t335, ptr %a336 + call void @finch_str_drop(ptr %a336) + br label %endif2461 +endif2461: + %t337 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1378, i64 6, i64 0 }, 0 + %t338 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t339 = load { ptr, i64, i64 }, ptr %t338 + store { ptr, i64, i64 } %t339, ptr %a340 + call void @finch_str_copy(ptr %a341, ptr %a340) + %t342 = load { ptr, i64, i64 }, ptr %a341 + %t343 = insertvalue %S.ast.Type %t337, { ptr, i64, i64 } %t342, 2 + %t344 = insertvalue %S.ast.Type %t343, { ptr, i64, i64 } { ptr @.str.1379, i64 1, i64 0 }, 3 + ret %S.ast.Type %t344 +endif2458: + %t345 = load ptr, ptr %a1 + %t346 = icmp eq ptr %t345, null + br i1 %t346, label %panic2462, label %ok2463 +panic2462: + call void @finch_panic(ptr @.str.1380, i64 579, ptr @.str.1381) + unreachable +ok2463: + %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 14 + %t348 = load { ptr, i64, i64 }, ptr %t347 + store { ptr, i64, i64 } %t348, ptr %a349 + call void @finch_str_copy(ptr %a350, ptr %a349) + %t351 = load { ptr, i64, i64 }, ptr %a350 + store { ptr, i64, i64 } %t351, ptr %a352 + %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i32 0, i32 1 + %t355 = load i64, ptr %t354 + %t356 = icmp sgt i64 %t355, 0 + br i1 %t356, label %then2464, label %endif2466 +then2464: + %t357 = load ptr, ptr %a1 + %t358 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t359 = load { ptr, i64, i64 }, ptr %t358 + %t360 = call i1 @finch.gen.imports(ptr %t357, { ptr, i64, i64 } %t359) + %t361 = xor i1 %t360, true + br i1 %t361, label %then2467, label %endif2469 +then2467: + %t362 = load ptr, ptr %a1 + %t363 = load %S.ast.Node, ptr %a3 + %t364 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t365 = load { ptr, i64, i64 }, ptr %t364 + store { ptr, i64, i64 } { ptr @.str.1382, i64 1, i64 0 }, ptr %a367 + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a366 + store { ptr, i64, i64 } %t369, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1383, i64 36, i64 0 }, ptr %a372 + call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) + store { ptr, i64, i64 } %t369, ptr %a373 + call void @finch_str_drop(ptr %a373) + %t374 = load { ptr, i64, i64 }, ptr %a370 + %t375 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t376 = load { ptr, i64, i64 }, ptr %t375 + store { ptr, i64, i64 } %t374, ptr %a378 + store { ptr, i64, i64 } %t376, ptr %a379 + call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) + store { ptr, i64, i64 } %t374, ptr %a380 + call void @finch_str_drop(ptr %a380) + %t381 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t381, ptr %a383 + store { ptr, i64, i64 } { ptr @.str.1384, i64 1, i64 0 }, ptr %a384 + call void @finch_str_concat(ptr %a382, ptr %a383, ptr %a384) + store { ptr, i64, i64 } %t381, ptr %a385 + call void @finch_str_drop(ptr %a385) + %t386 = load { ptr, i64, i64 }, ptr %a382 + call void @finch.gen.fail(ptr %t362, %S.ast.Node %t363, { ptr, i64, i64 } %t386) + store { ptr, i64, i64 } %t386, ptr %a387 + call void @finch_str_drop(ptr %a387) + br label %endif2469 +endif2469: + %t388 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t389 = load { ptr, i64, i64 }, ptr %t388 + store { ptr, i64, i64 } %t389, ptr %a390 + call void @finch_str_copy(ptr %a391, ptr %a390) + %t392 = load { ptr, i64, i64 }, ptr %a391 + %t393 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t392, ptr %a352 + store { ptr, i64, i64 } %t393, ptr %a394 + call void @finch_str_drop(ptr %a394) + br label %endif2466 +endif2466: + %t395 = load ptr, ptr %a1 + %t396 = load { ptr, i64, i64 }, ptr %a352 + %t397 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t398 = load { ptr, i64, i64 }, ptr %t397 + %t399 = call i64 @finch.gen.findEnum(ptr %t395, { ptr, i64, i64 } %t396, { ptr, i64, i64 } %t398) + %t400 = icmp sge i64 %t399, 0 + br i1 %t400, label %then2470, label %endif2472 +then2470: + %t401 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1385, i64 4, i64 0 }, 0 + %t402 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t403 = load { ptr, i64, i64 }, ptr %t402 + store { ptr, i64, i64 } %t403, ptr %a404 + call void @finch_str_copy(ptr %a405, ptr %a404) + %t406 = load { ptr, i64, i64 }, ptr %a405 + %t407 = insertvalue %S.ast.Type %t401, { ptr, i64, i64 } %t406, 2 + %t408 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t408, ptr %a409 + call void @finch_str_copy(ptr %a410, ptr %a409) + %t411 = load { ptr, i64, i64 }, ptr %a410 + %t412 = insertvalue %S.ast.Type %t407, { ptr, i64, i64 } %t411, 3 + call void @finch_str_drop(ptr %a352) + ret %S.ast.Type %t412 +endif2472: + %t413 = load ptr, ptr %a1 + %t414 = load { ptr, i64, i64 }, ptr %a352 + %t415 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t416 = load { ptr, i64, i64 }, ptr %t415 + %t417 = call i64 @finch.gen.findStruct(ptr %t413, { ptr, i64, i64 } %t414, { ptr, i64, i64 } %t416) + %t418 = icmp slt i64 %t417, 0 + br i1 %t418, label %then2473, label %endif2475 +then2473: + %t419 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t420 = getelementptr inbounds { ptr, i64, i64 }, ptr %t419, i32 0, i32 1 + %t421 = load i64, ptr %t420 + %t422 = icmp eq i64 %t421, 0 + br label %logic.from2476 +logic.from2476: + br i1 %t422, label %logic.rhs2477, label %logic.end2478 +logic.rhs2477: + %t423 = load ptr, ptr %a1 + %t424 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t425 = load { ptr, i64, i64 }, ptr %t424 + %t426 = call i64 @finch.gen.findStruct(ptr %t423, { ptr, i64, i64 } { ptr @.str.1386, i64 1, i64 0 }, { ptr, i64, i64 } %t425) + %t427 = icmp sge i64 %t426, 0 + br label %logic.rend2479 +logic.rend2479: + br label %logic.end2478 +logic.end2478: + %t428 = phi i1 [ false, %logic.from2476 ], [ %t427, %logic.rend2479 ] + br i1 %t428, label %then2480, label %endif2482 +then2480: + %t429 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1387, i64 6, i64 0 }, 0 + %t430 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t431 = load { ptr, i64, i64 }, ptr %t430 + store { ptr, i64, i64 } %t431, ptr %a432 + call void @finch_str_copy(ptr %a433, ptr %a432) + %t434 = load { ptr, i64, i64 }, ptr %a433 + %t435 = insertvalue %S.ast.Type %t429, { ptr, i64, i64 } %t434, 2 + %t436 = insertvalue %S.ast.Type %t435, { ptr, i64, i64 } { ptr @.str.1388, i64 1, i64 0 }, 3 + call void @finch_str_drop(ptr %a352) + ret %S.ast.Type %t436 +endif2482: + %t437 = load ptr, ptr %a1 + %t438 = load %S.ast.Node, ptr %a3 + %t439 = load %S.ast.Type, ptr %a2 + %t440 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t439) + store { ptr, i64, i64 } { ptr @.str.1389, i64 24, i64 0 }, ptr %a442 + store { ptr, i64, i64 } %t440, ptr %a443 + call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443) + store { ptr, i64, i64 } %t440, ptr %a444 + call void @finch_str_drop(ptr %a444) + %t445 = load { ptr, i64, i64 }, ptr %a441 + store { ptr, i64, i64 } %t445, ptr %a447 + store { ptr, i64, i64 } { ptr @.str.1390, i64 1, i64 0 }, ptr %a448 + call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448) + store { ptr, i64, i64 } %t445, ptr %a449 + call void @finch_str_drop(ptr %a449) + %t450 = load { ptr, i64, i64 }, ptr %a446 + call void @finch.gen.fail(ptr %t437, %S.ast.Node %t438, { ptr, i64, i64 } %t450) + store { ptr, i64, i64 } %t450, ptr %a451 + call void @finch_str_drop(ptr %a451) + br label %endif2475 +endif2475: + %t452 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1391, i64 6, i64 0 }, 0 + %t453 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t454 = load { ptr, i64, i64 }, ptr %t453 + store { ptr, i64, i64 } %t454, ptr %a455 + call void @finch_str_copy(ptr %a456, ptr %a455) + %t457 = load { ptr, i64, i64 }, ptr %a456 + %t458 = insertvalue %S.ast.Type %t452, { ptr, i64, i64 } %t457, 2 + %t459 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t459, ptr %a460 + call void @finch_str_copy(ptr %a461, ptr %a460) + %t462 = load { ptr, i64, i64 }, ptr %a461 + %t463 = insertvalue %S.ast.Type %t458, { ptr, i64, i64 } %t462, 3 + call void @finch_str_drop(ptr %a352) + ret %S.ast.Type %t463 +} + +define internal { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1393, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1394, i64 1, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.1396, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1397, i64 0, i64 0 }, ptr %a11 + call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a13 + call void @finch_str_drop(ptr %a13) + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1399, i64 1, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.1400, i64 1, i64 0 }, ptr %a17 + call void @finch_str_replace(ptr %a15, ptr %a14, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1402, i64 1, i64 0 }, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.1403, i64 0, i64 0 }, ptr %a23 + call void @finch_str_replace(ptr %a21, ptr %a20, ptr %a22, ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t18, ptr %a25 + call void @finch_str_drop(ptr %a25) + ret { ptr, i64, i64 } %t24 +} + +define internal { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = icmp eq i64 %t3, 0 + br i1 %t4, label %then2483, label %endif2485 +then2483: + ret { ptr, i64, i64 } { ptr @.str.1404, i64 4, i64 0 } +endif2485: + %t5 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t5, ptr %a6 + call void @finch_str_copy(ptr %a7, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + ret { ptr, i64, i64 } %t8 +} + +define internal { ptr, i64, i64 } @finch.gen.llty(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1405, i64 4, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then2486, label %endif2488 +then2486: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1406, i64 2, i64 0 } +endif2488: + %t14 = load %S.ast.Type, ptr %a2 + %t15 = call i1 @finch.gen.isInt(%S.ast.Type %t14) + br label %logic.from2489 +logic.from2489: + br i1 %t15, label %logic.end2491, label %logic.rhs2490 +logic.rhs2490: + %t16 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1407, i64 4, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.rend2492 +logic.rend2492: + br label %logic.end2491 +logic.end2491: + %t21 = phi i1 [ true, %logic.from2489 ], [ %t20, %logic.rend2492 ] + br i1 %t21, label %then2493, label %endif2495 +then2493: + %t22 = load %S.ast.Type, ptr %a2 + %t23 = call i64 @finch.gen.bitsOf(%S.ast.Type %t22) + call void @finch_str_from_int(ptr %a24, i64 %t23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1408, i64 1, i64 0 }, ptr %a27 + store { ptr, i64, i64 } %t25, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t30 +endif2495: + %t31 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t31, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.1409, i64 5, i64 0 }, ptr %a33 + %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) + %t35 = icmp ne i32 %t34, 0 + br i1 %t35, label %then2496, label %endif2498 +then2496: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1410, i64 6, i64 0 } +endif2498: + %t36 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.1411, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br i1 %t40, label %then2499, label %endif2501 +then2499: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1412, i64 5, i64 0 } +endif2501: + %t41 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1413, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.from2502 +logic.from2502: + br i1 %t45, label %logic.end2504, label %logic.rhs2503 +logic.rhs2503: + %t46 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t46, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.1414, i64 5, i64 0 }, ptr %a48 + %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) + %t50 = icmp ne i32 %t49, 0 + br label %logic.rend2505 +logic.rend2505: + br label %logic.end2504 +logic.end2504: + %t51 = phi i1 [ true, %logic.from2502 ], [ %t50, %logic.rend2505 ] + br i1 %t51, label %then2506, label %endif2508 +then2506: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1415, i64 17, i64 0 } +endif2508: + %t52 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.1416, i64 3, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then2509, label %endif2511 +then2509: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1417, i64 37, i64 0 } +endif2511: + %t57 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.1418, i64 5, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br i1 %t61, label %then2512, label %endif2514 +then2512: + %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t63 = load i64, ptr %t62 + call void @finch_str_from_int(ptr %a64, i64 %t63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.1419, i64 1, i64 0 }, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t65, ptr %a69 + call void @finch_str_drop(ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.1420, i64 3, i64 0 }, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t70, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + %t76 = load ptr, ptr %a1 + %t77 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t78 = load { ptr, i64, i64 }, ptr %t77 + %t79 = extractvalue { ptr, i64, i64 } %t78, 1 + %t80 = icmp uge i64 0, %t79 + br i1 %t80, label %range2515, label %inrange2516 +range2515: + call void @finch_panic_index(ptr @.str.1421, i64 632, i64 0, i64 %t79) + unreachable +inrange2516: + %t81 = extractvalue { ptr, i64, i64 } %t78, 0 + %t82 = getelementptr inbounds %S.ast.Type, ptr %t81, i64 0 + %t83 = load %S.ast.Type, ptr %t82 + %t84 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t76, %S.ast.Type %t83) + store { ptr, i64, i64 } %t75, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t75, ptr %a88 + call void @finch_str_drop(ptr %a88) + store { ptr, i64, i64 } %t84, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t90, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.1422, i64 1, i64 0 }, ptr %a93 + call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) + store { ptr, i64, i64 } %t90, ptr %a94 + call void @finch_str_drop(ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a91 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t95 +endif2514: + %t96 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.1423, i64 4, i64 0 }, ptr %a98 + %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) + %t100 = icmp ne i32 %t99, 0 + br i1 %t100, label %then2517, label %endif2519 +then2517: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1424, i64 3, i64 0 } +endif2519: + %t101 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t101, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.1425, i64 3, i64 0 }, ptr %a103 + %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) + %t105 = icmp ne i32 %t104, 0 + br label %logic.from2520 +logic.from2520: + br i1 %t105, label %logic.end2522, label %logic.rhs2521 +logic.rhs2521: + %t106 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.1426, i64 4, i64 0 }, ptr %a108 + %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) + %t110 = icmp ne i32 %t109, 0 + br label %logic.rend2523 +logic.rend2523: + br label %logic.end2522 +logic.end2522: + %t111 = phi i1 [ true, %logic.from2520 ], [ %t110, %logic.rend2523 ] + br i1 %t111, label %then2524, label %endif2526 +then2524: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1427, i64 3, i64 0 } +endif2526: + %t112 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.1428, i64 4, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br i1 %t116, label %then2527, label %endif2529 +then2527: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1429, i64 4, i64 0 } +endif2529: + %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t118) + store { ptr, i64, i64 } { ptr @.str.1430, i64 3, i64 0 }, ptr %a121 + store { ptr, i64, i64 } %t119, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t124, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.1431, i64 1, i64 0 }, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load { ptr, i64, i64 }, ptr %a125 + %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t131 = load { ptr, i64, i64 }, ptr %t130 + %t132 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t131) + store { ptr, i64, i64 } %t129, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t129, ptr %a136 + call void @finch_str_drop(ptr %a136) + store { ptr, i64, i64 } %t132, ptr %a137 + call void @finch_str_drop(ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a133 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t138 +} + +define internal { ptr, i64, i64 } @finch.gen.retTy(ptr %p0, %S.gen.FnSig %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.FnSig, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.FnSig %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 + %t4 = load i1, ptr %t3 + %t5 = xor i1 %t4, true + br i1 %t5, label %then2530, label %endif2532 +then2530: + %t6 = load ptr, ptr %a1 + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t8 = load %S.ast.Type, ptr %t7 + %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t6, %S.ast.Type %t8) + ret { ptr, i64, i64 } %t9 +endif2532: + store { ptr, i64, i64 } { ptr @.str.1432, i64 2, i64 0 }, ptr %a10 + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1433, i64 4, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp eq i32 %t16, 0 + br i1 %t17, label %then2533, label %endif2535 +then2533: + %t18 = load ptr, ptr %a1 + %t19 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t20 = load %S.ast.Type, ptr %t19 + %t21 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t18, %S.ast.Type %t20) + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t21, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_drop(ptr %a23) + br label %endif2535 +endif2535: + %t24 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1434, i64 6, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1435, i64 21, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1436, i64 1, i64 0 }, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 + %t9 = load i64, ptr %t8 + call void @finch_str_from_int(ptr %a10, i64 %t9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t7, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t7, ptr %a15 + call void @finch_str_drop(ptr %a15) + store { ptr, i64, i64 } %t11, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.1437, i64 1, i64 0 }, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + %t23 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 + %t24 = load i64, ptr %t23 + call void @finch_str_from_int(ptr %a25, i64 %t24) + %t26 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t22, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t22, ptr %a30 + call void @finch_str_drop(ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.1438, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 + %t39 = load i64, ptr %t38 + call void @finch_str_from_int(ptr %a40, i64 %t39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t37, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t37, ptr %a45 + call void @finch_str_drop(ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a42 + ret { ptr, i64, i64 } %t47 +} + +define internal { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load %S.ast.Type, ptr %a1 + %t9 = call i1 @finch.gen.isInt(%S.ast.Type %t8) + br label %logic.from2536 +logic.from2536: + br i1 %t9, label %logic.end2538, label %logic.rhs2537 +logic.rhs2537: + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1439, i64 4, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br label %logic.rend2539 +logic.rend2539: + br label %logic.end2538 +logic.end2538: + %t15 = phi i1 [ true, %logic.from2536 ], [ %t14, %logic.rend2539 ] + br label %logic.from2540 +logic.from2540: + br i1 %t15, label %logic.end2542, label %logic.rhs2541 +logic.rhs2541: + %t16 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1440, i64 4, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.rend2543 +logic.rend2543: + br label %logic.end2542 +logic.end2542: + %t21 = phi i1 [ true, %logic.from2540 ], [ %t20, %logic.rend2543 ] + br i1 %t21, label %then2544, label %endif2546 +then2544: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1441, i64 1, i64 0 } +endif2546: + %t22 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1442, i64 4, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then2547, label %endif2549 +then2547: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1443, i64 5, i64 0 } +endif2549: + %t27 = load %S.ast.Type, ptr %a1 + %t28 = call i1 @finch.gen.isFloat(%S.ast.Type %t27) + br i1 %t28, label %then2550, label %endif2552 +then2550: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1444, i64 3, i64 0 } +endif2552: + %t29 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1445, i64 3, i64 0 }, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br label %logic.from2553 +logic.from2553: + br i1 %t33, label %logic.end2555, label %logic.rhs2554 +logic.rhs2554: + %t34 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1446, i64 4, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.rend2556 +logic.rend2556: + br label %logic.end2555 +logic.end2555: + %t39 = phi i1 [ true, %logic.from2553 ], [ %t38, %logic.rend2556 ] + br i1 %t39, label %then2557, label %endif2559 +then2557: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1447, i64 4, i64 0 } +endif2559: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1448, i64 15, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.gen.sizeOf(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load %S.ast.Type, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t4) + store { ptr, i64, i64 } { ptr @.str.1449, i64 29, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t5, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t5, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1450, i64 26, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + ret { ptr, i64, i64 } %t15 +} + +define internal i1 @finch.gen.owning(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1451, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from2560 +logic.from2560: + br i1 %t8, label %logic.end2562, label %logic.rhs2561 +logic.rhs2561: + %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1452, i64 5, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br label %logic.rend2563 +logic.rend2563: + br label %logic.end2562 +logic.end2562: + %t15 = phi i1 [ true, %logic.from2560 ], [ %t14, %logic.rend2563 ] + br label %logic.from2564 +logic.from2564: + br i1 %t15, label %logic.end2566, label %logic.rhs2565 +logic.rhs2565: + %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.1453, i64 3, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + br label %logic.rend2567 +logic.rend2567: + br label %logic.end2566 +logic.end2566: + %t22 = phi i1 [ true, %logic.from2564 ], [ %t21, %logic.rend2567 ] + br i1 %t22, label %then2568, label %endif2570 +then2568: + ret i1 true +endif2570: + %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1454, i64 6, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br i1 %t28, label %then2571, label %endif2573 +then2571: + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic2574, label %ok2575 +panic2574: + call void @finch_panic(ptr @.str.1455, i64 690, ptr @.str.1456) + unreachable +ok2575: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 16 + %t32 = load ptr, ptr %a1 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t34 = load { ptr, i64, i64 }, ptr %t33 + %t35 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t36 = load { ptr, i64, i64 }, ptr %t35 + %t37 = call i64 @finch.gen.findStruct(ptr %t32, { ptr, i64, i64 } %t34, { ptr, i64, i64 } %t36) + %t38 = load { ptr, i64, i64 }, ptr %t31 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 %t37, %t39 + br i1 %t40, label %range2576, label %inrange2577 +range2576: + call void @finch_panic_index(ptr @.str.1457, i64 690, i64 %t37, i64 %t39) + unreachable +inrange2577: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds %S.gen.StructDef, ptr %t41, i64 %t37 + %t43 = getelementptr inbounds %S.gen.StructDef, ptr %t42, i32 0, i32 16 + %t44 = load i1, ptr %t43 + ret i1 %t44 +endif2573: + ret i1 false +} + +define internal { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.1458, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then2578, label %endif2580 +then2578: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 0, %t10 + br i1 %t11, label %range2581, label %inrange2582 +range2581: + call void @finch_panic_index(ptr @.str.1460, i64 697, i64 0, i64 %t10) + unreachable +inrange2582: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 + %t14 = load %S.ast.Type, ptr %t13 + %t15 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t14) + store { ptr, i64, i64 } { ptr @.str.1459, i64 4, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t20 +endif2580: + %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1461, i64 3, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then2583, label %endif2585 +then2583: + %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 0, %t29 + br i1 %t30, label %range2586, label %inrange2587 +range2586: + call void @finch_panic_index(ptr @.str.1463, i64 700, i64 0, i64 %t29) + unreachable +inrange2587: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 0 + %t33 = load %S.ast.Type, ptr %t32 + %t34 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t33) + store { ptr, i64, i64 } { ptr @.str.1462, i64 4, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1464, i64 1, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range2588, label %inrange2589 +range2588: + call void @finch_panic_index(ptr @.str.1465, i64 700, i64 1, i64 %t47) + unreachable +inrange2589: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Type, ptr %t49, i64 1 + %t51 = load %S.ast.Type, ptr %t50 + %t52 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t51) + store { ptr, i64, i64 } %t44, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t44, ptr %a56 + call void @finch_str_drop(ptr %a56) + store { ptr, i64, i64 } %t52, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a53 + ret { ptr, i64, i64 } %t58 +endif2585: + %t59 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.1466, i64 4, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br i1 %t64, label %then2590, label %endif2592 +then2590: + %t65 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t66 = load { ptr, i64, i64 }, ptr %t65 + %t67 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t66) + store { ptr, i64, i64 } { ptr @.str.1467, i64 2, i64 0 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1468, i64 1, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t77, ptr %a81 + store { ptr, i64, i64 } %t79, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t77, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + ret { ptr, i64, i64 } %t84 +endif2592: + %t85 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1469, i64 6, i64 0 }, ptr %a88 + %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) + %t90 = icmp ne i32 %t89, 0 + br i1 %t90, label %then2593, label %endif2595 +then2593: + %t91 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t92 = load { ptr, i64, i64 }, ptr %t91 + %t93 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t92) + store { ptr, i64, i64 } { ptr @.str.1470, i64 2, i64 0 }, ptr %a95 + store { ptr, i64, i64 } %t93, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.1471, i64 1, i64 0 }, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + %t104 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t105 = load { ptr, i64, i64 }, ptr %t104 + %t106 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t105) + store { ptr, i64, i64 } %t103, ptr %a108 + store { ptr, i64, i64 } %t106, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t103, ptr %a110 + call void @finch_str_drop(ptr %a110) + store { ptr, i64, i64 } %t106, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a107 + ret { ptr, i64, i64 } %t112 +endif2595: + %t113 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t114 = load { ptr, i64, i64 }, ptr %t113 + store { ptr, i64, i64 } %t114, ptr %a115 + call void @finch_str_copy(ptr %a116, ptr %a115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + ret { ptr, i64, i64 } %t117 +} + +define internal { ptr, i64, i64 } @finch.gen.hex(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.1472, i64 16, i64 0 }, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = sdiv i64 %t3, 16 + %t5 = load { ptr, i64, i64 }, ptr %a2 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 %t4, %t6 + br i1 %t7, label %range2596, label %inrange2597 +range2596: + call void @finch_panic_index(ptr @.str.1473, i64 715, i64 %t4, i64 %t6) + unreachable +inrange2597: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds i8, ptr %t8, i64 %t4 + %t10 = load i8, ptr %t9 + call void @finch_str_from_char(ptr %a11, i8 signext %t10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + %t13 = load i64, ptr %a1 + %t14 = srem i64 %t13, 16 + %t15 = load { ptr, i64, i64 }, ptr %a2 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 %t14, %t16 + br i1 %t17, label %range2598, label %inrange2599 +range2598: + call void @finch_panic_index(ptr @.str.1474, i64 715, i64 %t14, i64 %t16) + unreachable +inrange2599: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds i8, ptr %t18, i64 %t14 + %t20 = load i8, ptr %t19 + call void @finch_str_from_char(ptr %a21, i8 signext %t20) + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t12, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t12, ptr %a26 + call void @finch_str_drop(ptr %a26) + store { ptr, i64, i64 } %t22, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a23 + call void @finch_str_drop(ptr %a2) + ret { ptr, i64, i64 } %t28 +} + +define internal { ptr, i64, i64 } @finch.gen.strGlobal(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca i64, align 16 + %a29 = alloca i8, align 16 + %a32 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2600, label %ok2601 +panic2600: + call void @finch_panic(ptr @.str.1475, i64 719, ptr @.str.1476) + unreachable +ok2601: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 8 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + store i64 %t7, ptr %t5 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic2602, label %ok2603 +panic2602: + call void @finch_panic(ptr @.str.1478, i64 720, ptr @.str.1479) + unreachable +ok2603: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 8 + %t11 = load i64, ptr %t10 + call void @finch_str_from_int(ptr %a12, i64 %t11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1477, i64 6, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } zeroinitializer, ptr %a20 + store i64 0, ptr %a21 + br label %each.cond2604 +each.cond2604: + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = load i64, ptr %a21 + %t25 = icmp slt i64 %t24, %t23 + br i1 %t25, label %each.body2605, label %each.end2607 +each.body2605: + %t26 = load ptr, ptr %a2 + %t27 = getelementptr inbounds i8, ptr %t26, i64 %t24 + %t28 = load i8, ptr %t27 + store i8 %t28, ptr %a29 + %t30 = load i8, ptr %a29 + %t31 = zext i8 %t30 to i64 + store i64 %t31, ptr %a32 + %t33 = load i64, ptr %a32 + %t34 = icmp slt i64 %t33, 0 + br i1 %t34, label %then2608, label %endif2610 +then2608: + %t35 = load i64, ptr %a32 + %t36 = add i64 %t35, 256 + store i64 %t36, ptr %a32 + br label %endif2610 +endif2610: + %t37 = load i64, ptr %a32 + %t38 = icmp sge i64 %t37, 32 + br label %logic.from2611 +logic.from2611: + br i1 %t38, label %logic.rhs2612, label %logic.end2613 +logic.rhs2612: + %t39 = load i64, ptr %a32 + %t40 = icmp slt i64 %t39, 127 + br label %logic.rend2614 +logic.rend2614: + br label %logic.end2613 +logic.end2613: + %t41 = phi i1 [ false, %logic.from2611 ], [ %t40, %logic.rend2614 ] + br label %logic.from2615 +logic.from2615: + br i1 %t41, label %logic.rhs2616, label %logic.end2617 +logic.rhs2616: + %t42 = load i8, ptr %a29 + %t43 = icmp ne i8 %t42, 34 + br label %logic.rend2618 +logic.rend2618: + br label %logic.end2617 +logic.end2617: + %t44 = phi i1 [ false, %logic.from2615 ], [ %t43, %logic.rend2618 ] + br label %logic.from2619 +logic.from2619: + br i1 %t44, label %logic.rhs2620, label %logic.end2621 +logic.rhs2620: + %t45 = load i8, ptr %a29 + %t46 = icmp ne i8 %t45, 92 + br label %logic.rend2622 +logic.rend2622: + br label %logic.end2621 +logic.end2621: + %t47 = phi i1 [ false, %logic.from2619 ], [ %t46, %logic.rend2622 ] + br i1 %t47, label %then2623, label %else2624 +then2623: + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t49 = load i8, ptr %a29 + call void @finch_str_from_char(ptr %a50, i8 signext %t49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + %t52 = load i64, ptr %t48 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %a20 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 + store { ptr, i64, i64 } %t51, ptr %t55 + store i64 %t53, ptr %t48 + br label %endif2625 +else2624: + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t57 = load i64, ptr %a32 + %t58 = call { ptr, i64, i64 } @finch.gen.hex(i64 %t57) + store { ptr, i64, i64 } { ptr @.str.1480, i64 1, i64 0 }, ptr %a60 + store { ptr, i64, i64 } %t58, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + %t64 = load i64, ptr %t56 + %t65 = add i64 %t64, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t65, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t66 = load ptr, ptr %a20 + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i64 %t64 + store { ptr, i64, i64 } %t63, ptr %t67 + store i64 %t65, ptr %t56 + br label %endif2625 +endif2625: + br label %each.step2606 +each.step2606: + %t68 = load i64, ptr %a21 + %t69 = add i64 %t68, 1 + store i64 %t69, ptr %a21 + br label %each.cond2604 +each.end2607: + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic2626, label %ok2627 +panic2626: + call void @finch_panic(ptr @.str.1481, i64 733, ptr @.str.1482) + unreachable +ok2627: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 2 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 + %t74 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.1483, i64 34, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a75 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t80 = load i64, ptr %t79 + %t81 = add i64 %t80, 1 + call void @finch_str_from_int(ptr %a82, i64 %t81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t78, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t78, ptr %a87 + call void @finch_str_drop(ptr %a87) + store { ptr, i64, i64 } %t83, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a84 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.1484, i64 9, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1485, i64 0, i64 0 }, ptr %a96 + call void @finch_str_join(ptr %a97, ptr %a20, ptr %a96) + %t98 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t94, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t94, ptr %a102 + call void @finch_str_drop(ptr %a102) + store { ptr, i64, i64 } %t98, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.1486, i64 4, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = load i64, ptr %t73 + %t111 = add i64 %t110, 1 + call void @finch_arr_reserve(ptr %t72, i64 %t111, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t112 = load ptr, ptr %t72 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 %t110 + store { ptr, i64, i64 } %t109, ptr %t113 + store i64 %t111, ptr %t73 + %t114 = load { ptr, i64, i64 }, ptr %a19 + call void @finch.drop.arr_str(ptr %a20) + ret { ptr, i64, i64 } %t114 +} + +define internal %S.gen.Val @finch.gen.strConst(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t3, { ptr, i64, i64 } %t4) + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.1487, i64 6, i64 0 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t11, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.1488, i64 6, i64 0 }, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t11, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a12 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t18 = load i64, ptr %t17 + call void @finch_str_from_int(ptr %a19, i64 %t18) + %t20 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t16, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t16, ptr %a24 + call void @finch_str_drop(ptr %a24) + store { ptr, i64, i64 } %t20, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.1489, i64 9, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t31, 0 + %t33 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1490, i64 3, i64 0 }) + %t34 = insertvalue %S.gen.Val %t32, %S.ast.Type %t33, 1 + %t35 = insertvalue %S.gen.Val %t34, i1 true, 2 + call void @finch_str_drop(ptr %a6) + ret %S.gen.Val %t35 +} + +define internal void @finch.gen.panicIf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1491, i64 5, i64 0 }) + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1492, i64 2, i64 0 }) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load { ptr, i64, i64 }, ptr %a2 + %t13 = load { ptr, i64, i64 }, ptr %a7 + %t14 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.condBr(ptr %t11, { ptr, i64, i64 } %t12, { ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14) + %t15 = load ptr, ptr %a1 + %t16 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.gen.label(ptr %t15, { ptr, i64, i64 } %t16) + %t17 = load ptr, ptr %a1 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2628, label %ok2629 +panic2628: + call void @finch_panic(ptr @.str.1493, i64 749, ptr @.str.1494) + unreachable +ok2629: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 + %t22 = load i64, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %t20 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 %t22, %t24 + br i1 %t25, label %range2630, label %inrange2631 +range2630: + call void @finch_panic_index(ptr @.str.1495, i64 749, i64 %t22, i64 %t24) + unreachable +inrange2631: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t17, { ptr, i64, i64 } %t28) + store { ptr, i64, i64 } %t29, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = load { ptr, i64, i64 }, ptr %a3 + %t33 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t31, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t33, ptr %a34 + %t35 = load ptr, ptr %a1 + %t36 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1496, i64 27, i64 0 }, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1497, i64 6, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 + %t47 = load i64, ptr %t46 + call void @finch_str_from_int(ptr %a48, i64 %t47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t45, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t45, ptr %a53 + call void @finch_str_drop(ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.1498, i64 6, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } %t60, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1499, i64 1, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + call void @finch.gen.emit(ptr %t35, { ptr, i64, i64 } %t71) + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t73, { ptr, i64, i64 } { ptr @.str.1500, i64 11, i64 0 }) + %t74 = load ptr, ptr %a1 + %t75 = icmp eq ptr %t74, null + br i1 %t75, label %panic2632, label %ok2633 +panic2632: + call void @finch_panic(ptr @.str.1501, i64 753, ptr @.str.1502) + unreachable +ok2633: + %t76 = getelementptr inbounds %S.gen.Gen, ptr %t74, i32 0, i32 9 + store i1 true, ptr %t76 + %t77 = load ptr, ptr %a1 + %t78 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.label(ptr %t77, { ptr, i64, i64 } %t78) + call void @finch_str_drop(ptr %a34) + call void @finch_str_drop(ptr %a30) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a7) + ret void +} + +define internal void @finch.gen.boundsCheck(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1503, i64 5, i64 0 }) + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1504, i64 7, i64 0 }) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1505, i64 13, i64 0 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.1506, i64 2, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + %t22 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t21, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t21, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a23 + %t28 = call { ptr, i64, i64 } @finch.gen.op(ptr %t11, { ptr, i64, i64 } %t27) + store { ptr, i64, i64 } %t27, ptr %a29 + call void @finch_str_drop(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = load { ptr, i64, i64 }, ptr %a30 + %t33 = load { ptr, i64, i64 }, ptr %a7 + %t34 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.condBr(ptr %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33, { ptr, i64, i64 } %t34) + %t35 = load ptr, ptr %a1 + %t36 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.gen.label(ptr %t35, { ptr, i64, i64 } %t36) + %t37 = load ptr, ptr %a1 + %t38 = load ptr, ptr %a1 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic2634, label %ok2635 +panic2634: + call void @finch_panic(ptr @.str.1507, i64 763, ptr @.str.1508) + unreachable +ok2635: + %t40 = getelementptr inbounds %S.gen.Gen, ptr %t38, i32 0, i32 1 + %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 + %t42 = load i64, ptr %t41 + %t43 = load { ptr, i64, i64 }, ptr %t40 + %t44 = extractvalue { ptr, i64, i64 } %t43, 1 + %t45 = icmp uge i64 %t42, %t44 + br i1 %t45, label %range2636, label %inrange2637 +range2636: + call void @finch_panic_index(ptr @.str.1509, i64 763, i64 %t42, i64 %t44) + unreachable +inrange2637: + %t46 = extractvalue { ptr, i64, i64 } %t43, 0 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t42 + %t48 = load { ptr, i64, i64 }, ptr %t47 + %t49 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t37, { ptr, i64, i64 } %t48) + store { ptr, i64, i64 } %t49, ptr %a50 + %t51 = load ptr, ptr %a1 + %t52 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.1510, i64 33, i64 0 }, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.1511, i64 6, i64 0 }, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t56, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 + %t63 = load i64, ptr %t62 + call void @finch_str_from_int(ptr %a64, i64 %t63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t61, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t61, ptr %a69 + call void @finch_str_drop(ptr %a69) + store { ptr, i64, i64 } %t65, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.1512, i64 6, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + %t77 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t76, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t82, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.1513, i64 6, i64 0 }, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t82, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a83 + %t88 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t87, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t87, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.1514, i64 1, i64 0 }, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + call void @finch.gen.emit(ptr %t51, { ptr, i64, i64 } %t98) + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t100, { ptr, i64, i64 } { ptr @.str.1515, i64 11, i64 0 }) + %t101 = load ptr, ptr %a1 + %t102 = icmp eq ptr %t101, null + br i1 %t102, label %panic2638, label %ok2639 +panic2638: + call void @finch_panic(ptr @.str.1516, i64 766, ptr @.str.1517) + unreachable +ok2639: + %t103 = getelementptr inbounds %S.gen.Gen, ptr %t101, i32 0, i32 9 + store i1 true, ptr %t103 + %t104 = load ptr, ptr %a1 + %t105 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.label(ptr %t104, { ptr, i64, i64 } %t105) + call void @finch_str_drop(ptr %a50) + call void @finch_str_drop(ptr %a30) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a7) + ret void +} + +define internal %S.gen.Saved @finch.gen.beginHelper(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca %S.gen.Saved, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic2640, label %ok2641 +panic2640: + call void @finch_panic(ptr @.str.1518, i64 781, ptr @.str.1519) + unreachable +ok2641: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 4 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + call void @finch.copy.arr_str(ptr %a7, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + %t9 = insertvalue %S.gen.Saved zeroinitializer, { ptr, i64, i64 } %t8, 0 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic2642, label %ok2643 +panic2642: + call void @finch_panic(ptr @.str.1520, i64 781, ptr @.str.1521) + unreachable +ok2643: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 5 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch.copy.arr_str(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.gen.Saved %t9, { ptr, i64, i64 } %t16, 1 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2644, label %ok2645 +panic2644: + call void @finch_panic(ptr @.str.1522, i64 781, ptr @.str.1523) + unreachable +ok2645: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 6 + %t21 = load i64, ptr %t20 + %t22 = insertvalue %S.gen.Saved %t17, i64 %t21, 2 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic2646, label %ok2647 +panic2646: + call void @finch_panic(ptr @.str.1524, i64 781, ptr @.str.1525) + unreachable +ok2647: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 9 + %t26 = load i1, ptr %t25 + %t27 = insertvalue %S.gen.Saved %t22, i1 %t26, 3 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2648, label %ok2649 +panic2648: + call void @finch_panic(ptr @.str.1526, i64 781, ptr @.str.1527) + unreachable +ok2649: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 36 + %t31 = load i64, ptr %t30 + %t32 = insertvalue %S.gen.Saved %t27, i64 %t31, 4 + store %S.gen.Saved %t32, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic2650, label %ok2651 +panic2650: + call void @finch_panic(ptr @.str.1528, i64 782, ptr @.str.1529) + unreachable +ok2651: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 36 + store i64 -1, ptr %t36 + store { ptr, i64, i64 } zeroinitializer, ptr %a37 + %t38 = load { ptr, i64, i64 }, ptr %a37 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic2652, label %ok2653 +panic2652: + call void @finch_panic(ptr @.str.1530, i64 784, ptr @.str.1531) + unreachable +ok2653: + %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 4 + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch.copy.arr_str(ptr %a43, ptr %a42) + %t44 = load { ptr, i64, i64 }, ptr %a43 + %t45 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t44, ptr %t41 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch.drop.arr_str(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a37 + %t48 = load ptr, ptr %a1 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic2654, label %ok2655 +panic2654: + call void @finch_panic(ptr @.str.1532, i64 785, ptr @.str.1533) + unreachable +ok2655: + %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 5 + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch.copy.arr_str(ptr %a52, ptr %a51) + %t53 = load { ptr, i64, i64 }, ptr %a52 + %t54 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } %t53, ptr %t50 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch.drop.arr_str(ptr %a55) + %t56 = load ptr, ptr %a1 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic2656, label %ok2657 +panic2656: + call void @finch_panic(ptr @.str.1534, i64 786, ptr @.str.1535) + unreachable +ok2657: + %t58 = getelementptr inbounds %S.gen.Gen, ptr %t56, i32 0, i32 6 + store i64 0, ptr %t58 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic2658, label %ok2659 +panic2658: + call void @finch_panic(ptr @.str.1536, i64 787, ptr @.str.1537) + unreachable +ok2659: + %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 9 + store i1 false, ptr %t61 + %t62 = load %S.gen.Saved, ptr %a33 + call void @finch.drop.arr_str(ptr %a37) + ret %S.gen.Saved %t62 +} + +define internal void @finch.gen.endHelper(ptr %p0, %S.gen.Saved %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Saved, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Saved %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2660, label %ok2661 +panic2660: + call void @finch_panic(ptr @.str.1538, i64 792, ptr @.str.1539) + unreachable +ok2661: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 3 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1540, i64 10, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic2662, label %ok2663 +panic2662: + call void @finch_panic(ptr @.str.1541, i64 792, ptr @.str.1542) + unreachable +ok2663: + %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 5 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1543, i64 1, i64 0 }, ptr %a17 + call void @finch_str_join(ptr %a18, ptr %t15, ptr %a17) + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t12, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t12, ptr %a23 + call void @finch_str_drop(ptr %a23) + store { ptr, i64, i64 } %t19, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.1544, i64 1, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic2664, label %ok2665 +panic2664: + call void @finch_panic(ptr @.str.1545, i64 792, ptr @.str.1546) + unreachable +ok2665: + %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 4 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1547, i64 1, i64 0 }, ptr %a35 + call void @finch_str_join(ptr %a36, ptr %t33, ptr %a35) + %t37 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t30, ptr %a39 + store { ptr, i64, i64 } %t37, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t30, ptr %a41 + call void @finch_str_drop(ptr %a41) + store { ptr, i64, i64 } %t37, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } %t43, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.1548, i64 3, i64 0 }, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + %t49 = load i64, ptr %t7 + %t50 = add i64 %t49, 1 + call void @finch_arr_reserve(ptr %t6, i64 %t50, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t51 = load ptr, ptr %t6 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 %t49 + store { ptr, i64, i64 } %t48, ptr %t52 + store i64 %t50, ptr %t7 + %t53 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 0 + %t54 = load { ptr, i64, i64 }, ptr %t53 + %t55 = load ptr, ptr %a1 + %t56 = icmp eq ptr %t55, null + br i1 %t56, label %panic2666, label %ok2667 +panic2666: + call void @finch_panic(ptr @.str.1549, i64 793, ptr @.str.1550) + unreachable +ok2667: + %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 4 + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch.copy.arr_str(ptr %a59, ptr %a58) + %t60 = load { ptr, i64, i64 }, ptr %a59 + %t61 = load { ptr, i64, i64 }, ptr %t57 + store { ptr, i64, i64 } %t60, ptr %t57 + store { ptr, i64, i64 } %t61, ptr %a62 + call void @finch.drop.arr_str(ptr %a62) + %t63 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 1 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic2668, label %ok2669 +panic2668: + call void @finch_panic(ptr @.str.1551, i64 794, ptr @.str.1552) + unreachable +ok2669: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 5 + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch.copy.arr_str(ptr %a69, ptr %a68) + %t70 = load { ptr, i64, i64 }, ptr %a69 + %t71 = load { ptr, i64, i64 }, ptr %t67 + store { ptr, i64, i64 } %t70, ptr %t67 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch.drop.arr_str(ptr %a72) + %t73 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 2 + %t74 = load i64, ptr %t73 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic2670, label %ok2671 +panic2670: + call void @finch_panic(ptr @.str.1553, i64 795, ptr @.str.1554) + unreachable +ok2671: + %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 6 + store i64 %t74, ptr %t77 + %t78 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 3 + %t79 = load i1, ptr %t78 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic2672, label %ok2673 +panic2672: + call void @finch_panic(ptr @.str.1555, i64 796, ptr @.str.1556) + unreachable +ok2673: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 9 + store i1 %t79, ptr %t82 + %t83 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 4 + %t84 = load i64, ptr %t83 + %t85 = load ptr, ptr %a1 + %t86 = icmp eq ptr %t85, null + br i1 %t86, label %panic2674, label %ok2675 +panic2674: + call void @finch_panic(ptr @.str.1557, i64 797, ptr @.str.1558) + unreachable +ok2675: + %t87 = getelementptr inbounds %S.gen.Gen, ptr %t85, i32 0, i32 36 + store i64 %t84, ptr %t87 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.loopStart(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } { ptr @.str.1559, i64 3, i64 0 }) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.store(ptr %t6, { ptr, i64, i64 } { ptr @.str.1560, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1561, i64 1, i64 0 }, { ptr, i64, i64 } %t7) + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1562, i64 6, i64 0 }) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t11, { ptr, i64, i64 } { ptr @.str.1563, i64 6, i64 0 }) + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t14, { ptr, i64, i64 } { ptr @.str.1564, i64 5, i64 0 }) + store { ptr, i64, i64 } %t15, ptr %a16 + %t17 = load ptr, ptr %a1 + %t18 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.br(ptr %t17, { ptr, i64, i64 } %t18) + %t19 = load ptr, ptr %a1 + %t20 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.label(ptr %t19, { ptr, i64, i64 } %t20) + %t21 = load ptr, ptr %a1 + %t22 = load { ptr, i64, i64 }, ptr %a5 + %t23 = call { ptr, i64, i64 } @finch.gen.load(ptr %t21, { ptr, i64, i64 } { ptr @.str.1565, i64 3, i64 0 }, { ptr, i64, i64 } %t22) + store { ptr, i64, i64 } %t23, ptr %a24 + %t25 = load ptr, ptr %a1 + %t26 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1566, i64 13, i64 0 }, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.1567, i64 2, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + %t36 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t35, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t35, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + %t42 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t41) + store { ptr, i64, i64 } %t41, ptr %a43 + call void @finch_str_drop(ptr %a43) + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = load ptr, ptr %a1 + %t46 = load { ptr, i64, i64 }, ptr %a44 + %t47 = load { ptr, i64, i64 }, ptr %a13 + %t48 = load { ptr, i64, i64 }, ptr %a16 + call void @finch.gen.condBr(ptr %t45, { ptr, i64, i64 } %t46, { ptr, i64, i64 } %t47, { ptr, i64, i64 } %t48) + %t49 = load ptr, ptr %a1 + %t50 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.gen.label(ptr %t49, { ptr, i64, i64 } %t50) + %t51 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t51, ptr %a52 + call void @finch_str_copy(ptr %a53, ptr %a52) + %t54 = load { ptr, i64, i64 }, ptr %a53 + %t55 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_copy(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + %t59 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t59, ptr %a60 + call void @finch_str_copy(ptr %a61, ptr %a60) + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_copy(ptr %a65, ptr %a64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + %t67 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t68 = call ptr @finch_alloc(i64 %t67) + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 0 + store { ptr, i64, i64 } %t54, ptr %t69 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 1 + store { ptr, i64, i64 } %t58, ptr %t70 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 2 + store { ptr, i64, i64 } %t62, ptr %t71 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 3 + store { ptr, i64, i64 } %t66, ptr %t72 + %t73 = insertvalue { ptr, i64, i64 } undef, ptr %t68, 0 + %t74 = insertvalue { ptr, i64, i64 } %t73, i64 4, 1 + %t75 = insertvalue { ptr, i64, i64 } %t74, i64 4, 2 + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a16) + call void @finch_str_drop(ptr %a13) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a5) + ret { ptr, i64, i64 } %t75 +} + +define internal void @finch.gen.loopEnd(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 0, %t5 + br i1 %t6, label %range2676, label %inrange2677 +range2676: + call void @finch_panic_index(ptr @.str.1569, i64 817, i64 0, i64 %t5) + unreachable +inrange2677: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + %t10 = call { ptr, i64, i64 } @finch.gen.load(ptr %t3, { ptr, i64, i64 } { ptr @.str.1568, i64 3, i64 0 }, { ptr, i64, i64 } %t9) + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = load ptr, ptr %a1 + %t14 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1571, i64 8, i64 0 }, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1572, i64 3, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + %t24 = call { ptr, i64, i64 } @finch.gen.op(ptr %t13, { ptr, i64, i64 } %t23) + store { ptr, i64, i64 } %t23, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a2 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 0, %t27 + br i1 %t28, label %range2678, label %inrange2679 +range2678: + call void @finch_panic_index(ptr @.str.1573, i64 818, i64 0, i64 %t27) + unreachable +inrange2679: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 + %t31 = load { ptr, i64, i64 }, ptr %t30 + call void @finch.gen.store(ptr %t12, { ptr, i64, i64 } { ptr @.str.1570, i64 3, i64 0 }, { ptr, i64, i64 } %t24, { ptr, i64, i64 } %t31) + store { ptr, i64, i64 } %t24, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load ptr, ptr %a1 + %t34 = load { ptr, i64, i64 }, ptr %a2 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 1, %t35 + br i1 %t36, label %range2680, label %inrange2681 +range2680: + call void @finch_panic_index(ptr @.str.1574, i64 819, i64 1, i64 %t35) + unreachable +inrange2681: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 1 + %t39 = load { ptr, i64, i64 }, ptr %t38 + call void @finch.gen.br(ptr %t33, { ptr, i64, i64 } %t39) + %t40 = load ptr, ptr %a1 + %t41 = load { ptr, i64, i64 }, ptr %a2 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 2, %t42 + br i1 %t43, label %range2682, label %inrange2683 +range2682: + call void @finch_panic_index(ptr @.str.1575, i64 820, i64 2, i64 %t42) + unreachable +inrange2683: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 2 + %t46 = load { ptr, i64, i64 }, ptr %t45 + call void @finch.gen.label(ptr %t40, { ptr, i64, i64 } %t46) + call void @finch_str_drop(ptr %a11) + ret void +} + +define internal void @finch.gen.copyAt(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.1576, i64 3, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp ne i32 %t9, 0 + br i1 %t10, label %then2684, label %else2685 +then2684: + %t11 = load ptr, ptr %a1 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1577, i64 30, i64 0 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.1578, i64 6, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + %t22 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t21, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t21, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t27, ptr %a29 + store { ptr, i64, i64 } { ptr @.str.1579, i64 1, i64 0 }, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t27, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a28 + call void @finch.gen.emit(ptr %t11, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + br label %endif2686 +else2685: + %t34 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.1580, i64 5, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.from2687 +logic.from2687: + br i1 %t39, label %logic.end2689, label %logic.rhs2688 +logic.rhs2688: + %t40 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1581, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.rend2690 +logic.rend2690: + br label %logic.end2689 +logic.end2689: + %t46 = phi i1 [ true, %logic.from2687 ], [ %t45, %logic.rend2690 ] + br label %logic.from2691 +logic.from2691: + br i1 %t46, label %logic.end2693, label %logic.rhs2692 +logic.rhs2692: + %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t48 = load { ptr, i64, i64 }, ptr %t47 + store { ptr, i64, i64 } %t48, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.1582, i64 6, i64 0 }, ptr %a50 + %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) + %t52 = icmp ne i32 %t51, 0 + br label %logic.from2694 +logic.from2694: + br i1 %t52, label %logic.rhs2695, label %logic.end2696 +logic.rhs2695: + %t53 = load ptr, ptr %a1 + %t54 = load %S.ast.Type, ptr %a4 + %t55 = call i1 @finch.gen.owning(ptr %t53, %S.ast.Type %t54) + br label %logic.rend2697 +logic.rend2697: + br label %logic.end2696 +logic.end2696: + %t56 = phi i1 [ false, %logic.from2694 ], [ %t55, %logic.rend2697 ] + br label %logic.rend2698 +logic.rend2698: + br label %logic.end2693 +logic.end2693: + %t57 = phi i1 [ true, %logic.from2691 ], [ %t56, %logic.rend2698 ] + br i1 %t57, label %then2699, label %else2700 +then2699: + %t58 = load ptr, ptr %a1 + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Type, ptr %a4 + %t61 = call { ptr, i64, i64 } @finch.gen.copyFn(ptr %t59, %S.ast.Type %t60) + store { ptr, i64, i64 } { ptr @.str.1583, i64 10, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1584, i64 5, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t71, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.1585, i64 6, i64 0 }, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t82, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t82, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.1586, i64 1, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + call void @finch.gen.emit(ptr %t58, { ptr, i64, i64 } %t93) + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + br label %endif2701 +else2700: + %t95 = load ptr, ptr %a1 + %t96 = load ptr, ptr %a1 + %t97 = load %S.ast.Type, ptr %a4 + %t98 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t97) + %t99 = load ptr, ptr %a1 + %t100 = load ptr, ptr %a1 + %t101 = load %S.ast.Type, ptr %a4 + %t102 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t100, %S.ast.Type %t101) + %t103 = load { ptr, i64, i64 }, ptr %a3 + %t104 = call { ptr, i64, i64 } @finch.gen.load(ptr %t99, { ptr, i64, i64 } %t102, { ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a2 + call void @finch.gen.store(ptr %t95, { ptr, i64, i64 } %t98, { ptr, i64, i64 } %t104, { ptr, i64, i64 } %t106) + store { ptr, i64, i64 } %t98, ptr %a107 + call void @finch_str_drop(ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + br label %endif2701 +endif2701: + br label %endif2686 +endif2686: + ret void +} + +define internal void @finch.drop.S_gen_Saved(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Saved, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Saved, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.copyFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.ast.Type, align 16 + %a47 = alloca %S.ast.Type, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca %S.gen.StructDef, align 16 + %a365 = alloca %S.gen.StructDef, align 16 + %a367 = alloca %S.gen.StructDef, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca i64, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.1587, i64 12, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2702, label %ok2703 +panic2702: + call void @finch_panic(ptr @.str.1588, i64 835, ptr @.str.1589) + unreachable +ok2703: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then2704, label %endif2706 +then2704: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif2706: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2707, label %ok2708 +panic2707: + call void @finch_panic(ptr @.str.1590, i64 838, ptr @.str.1591) + unreachable +ok2708: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1592, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then2709, label %else2710 +then2709: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range2712, label %inrange2713 +range2712: + call void @finch_panic_index(ptr @.str.1593, i64 841, i64 0, i64 %t41) + unreachable +inrange2713: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 + %t45 = load %S.ast.Type, ptr %t44 + store %S.ast.Type %t45, ptr %a46 + call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) + %t48 = load %S.ast.Type, ptr %a47 + store %S.ast.Type %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = load ptr, ptr %a1 + %t52 = load %S.ast.Type, ptr %a49 + %t53 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t51, %S.ast.Type %t52) + store { ptr, i64, i64 } { ptr @.str.1594, i64 55, i64 0 }, ptr %a55 + store { ptr, i64, i64 } %t53, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t53, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t58, ptr %a60 + store { ptr, i64, i64 } { ptr @.str.1595, i64 1, i64 0 }, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + call void @finch.gen.emit(ptr %t50, { ptr, i64, i64 } %t63) + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load ptr, ptr %a1 + %t66 = load %S.ast.Type, ptr %a49 + %t67 = call i1 @finch.gen.owning(ptr %t65, %S.ast.Type %t66) + br i1 %t67, label %then2714, label %endif2716 +then2714: + %t68 = load ptr, ptr %a1 + %t69 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.1596, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1597, i64 4, i64 0 }) + store { ptr, i64, i64 } %t69, ptr %a70 + %t71 = load ptr, ptr %a1 + %t72 = call { ptr, i64, i64 } @finch.gen.load(ptr %t71, { ptr, i64, i64 } { ptr @.str.1598, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1599, i64 4, i64 0 }) + store { ptr, i64, i64 } %t72, ptr %a73 + %t74 = load ptr, ptr %a1 + %t75 = load ptr, ptr %a1 + %t76 = call { ptr, i64, i64 } @finch.gen.op(ptr %t75, { ptr, i64, i64 } { ptr @.str.1601, i64 64, i64 0 }) + %t77 = call { ptr, i64, i64 } @finch.gen.load(ptr %t74, { ptr, i64, i64 } { ptr @.str.1600, i64 3, i64 0 }, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a78 + call void @finch_str_drop(ptr %a78) + store { ptr, i64, i64 } %t77, ptr %a79 + %t80 = load ptr, ptr %a1 + %t81 = load { ptr, i64, i64 }, ptr %a79 + %t82 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t80, { ptr, i64, i64 } %t81) + store { ptr, i64, i64 } %t82, ptr %a83 + %t84 = load ptr, ptr %a1 + %t85 = load ptr, ptr %a1 + %t86 = load %S.ast.Type, ptr %a49 + %t87 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t85, %S.ast.Type %t86) + store { ptr, i64, i64 } { ptr @.str.1602, i64 23, i64 0 }, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t87, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.1603, i64 6, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t97, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.1604, i64 6, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load { ptr, i64, i64 }, ptr %a83 + %t110 = extractvalue { ptr, i64, i64 } %t109, 1 + %t111 = icmp uge i64 3, %t110 + br i1 %t111, label %range2717, label %inrange2718 +range2717: + call void @finch_panic_index(ptr @.str.1605, i64 848, i64 3, i64 %t110) + unreachable +inrange2718: + %t112 = extractvalue { ptr, i64, i64 } %t109, 0 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 3 + %t114 = load { ptr, i64, i64 }, ptr %t113 + store { ptr, i64, i64 } %t108, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t108, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = call { ptr, i64, i64 } @finch.gen.op(ptr %t84, { ptr, i64, i64 } %t119) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t120, ptr %a122 + %t123 = load ptr, ptr %a1 + %t124 = load ptr, ptr %a1 + %t125 = load %S.ast.Type, ptr %a49 + %t126 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t124, %S.ast.Type %t125) + store { ptr, i64, i64 } { ptr @.str.1606, i64 23, i64 0 }, ptr %a128 + store { ptr, i64, i64 } %t126, ptr %a129 + call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) + store { ptr, i64, i64 } %t126, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t131, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.1607, i64 6, i64 0 }, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + %t137 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t136, ptr %a139 + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t136, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + store { ptr, i64, i64 } %t142, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.1608, i64 6, i64 0 }, ptr %a145 + call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) + store { ptr, i64, i64 } %t142, ptr %a146 + call void @finch_str_drop(ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a143 + %t148 = load { ptr, i64, i64 }, ptr %a83 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 3, %t149 + br i1 %t150, label %range2719, label %inrange2720 +range2719: + call void @finch_panic_index(ptr @.str.1609, i64 849, i64 3, i64 %t149) + unreachable +inrange2720: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 3 + %t153 = load { ptr, i64, i64 }, ptr %t152 + store { ptr, i64, i64 } %t147, ptr %a155 + store { ptr, i64, i64 } %t153, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + store { ptr, i64, i64 } %t147, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a154 + %t159 = call { ptr, i64, i64 } @finch.gen.op(ptr %t123, { ptr, i64, i64 } %t158) + store { ptr, i64, i64 } %t158, ptr %a160 + call void @finch_str_drop(ptr %a160) + store { ptr, i64, i64 } %t159, ptr %a161 + %t162 = load ptr, ptr %a1 + %t163 = load { ptr, i64, i64 }, ptr %a122 + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = load %S.ast.Type, ptr %a49 + call void @finch.gen.copyAt(ptr %t162, { ptr, i64, i64 } %t163, { ptr, i64, i64 } %t164, %S.ast.Type %t165) + %t166 = load ptr, ptr %a1 + %t167 = load { ptr, i64, i64 }, ptr %a83 + call void @finch.gen.loopEnd(ptr %t166, { ptr, i64, i64 } %t167) + call void @finch_str_drop(ptr %a161) + call void @finch_str_drop(ptr %a122) + call void @finch.drop.arr_str(ptr %a83) + call void @finch_str_drop(ptr %a79) + call void @finch_str_drop(ptr %a73) + call void @finch_str_drop(ptr %a70) + br label %endif2716 +endif2716: + call void @finch.drop.S_ast_Type(ptr %a49) + br label %endif2711 +else2710: + %t168 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t169 = load { ptr, i64, i64 }, ptr %t168 + store { ptr, i64, i64 } %t169, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.1610, i64 3, i64 0 }, ptr %a171 + %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) + %t173 = icmp ne i32 %t172, 0 + br i1 %t173, label %then2721, label %else2722 +then2721: + %t174 = load ptr, ptr %a1 + %t175 = load ptr, ptr %a1 + %t176 = load %S.ast.Type, ptr %a2 + %t177 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t175, %S.ast.Type %t176) + store { ptr, i64, i64 } { ptr @.str.1611, i64 55, i64 0 }, ptr %a179 + store { ptr, i64, i64 } %t177, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + store { ptr, i64, i64 } %t177, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.1612, i64 1, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + call void @finch.gen.emit(ptr %t174, { ptr, i64, i64 } %t187) + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch_str_drop(ptr %a188) + %t189 = load ptr, ptr %a1 + %t190 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t191 = load { ptr, i64, i64 }, ptr %t190 + %t192 = extractvalue { ptr, i64, i64 } %t191, 1 + %t193 = icmp uge i64 0, %t192 + br i1 %t193, label %range2724, label %inrange2725 +range2724: + call void @finch_panic_index(ptr @.str.1613, i64 855, i64 0, i64 %t192) + unreachable +inrange2725: + %t194 = extractvalue { ptr, i64, i64 } %t191, 0 + %t195 = getelementptr inbounds %S.ast.Type, ptr %t194, i64 0 + %t196 = load %S.ast.Type, ptr %t195 + %t197 = call i1 @finch.gen.owning(ptr %t189, %S.ast.Type %t196) + br label %logic.from2726 +logic.from2726: + br i1 %t197, label %logic.end2728, label %logic.rhs2727 +logic.rhs2727: + %t198 = load ptr, ptr %a1 + %t199 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t200 = load { ptr, i64, i64 }, ptr %t199 + %t201 = extractvalue { ptr, i64, i64 } %t200, 1 + %t202 = icmp uge i64 1, %t201 + br i1 %t202, label %range2729, label %inrange2730 +range2729: + call void @finch_panic_index(ptr @.str.1614, i64 855, i64 1, i64 %t201) + unreachable +inrange2730: + %t203 = extractvalue { ptr, i64, i64 } %t200, 0 + %t204 = getelementptr inbounds %S.ast.Type, ptr %t203, i64 1 + %t205 = load %S.ast.Type, ptr %t204 + %t206 = call i1 @finch.gen.owning(ptr %t198, %S.ast.Type %t205) + br label %logic.rend2731 +logic.rend2731: + br label %logic.end2728 +logic.end2728: + %t207 = phi i1 [ true, %logic.from2726 ], [ %t206, %logic.rend2731 ] + br i1 %t207, label %then2732, label %endif2734 +then2732: + %t208 = load ptr, ptr %a1 + %t209 = load ptr, ptr %a1 + %t210 = load ptr, ptr %a1 + %t211 = load %S.ast.Type, ptr %a2 + %t212 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t210, %S.ast.Type %t211) + store { ptr, i64, i64 } { ptr @.str.1616, i64 23, i64 0 }, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t212, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + store { ptr, i64, i64 } %t217, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.1617, i64 24, i64 0 }, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t217, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + %t223 = call { ptr, i64, i64 } @finch.gen.op(ptr %t209, { ptr, i64, i64 } %t222) + store { ptr, i64, i64 } %t222, ptr %a224 + call void @finch_str_drop(ptr %a224) + %t225 = call { ptr, i64, i64 } @finch.gen.load(ptr %t208, { ptr, i64, i64 } { ptr @.str.1615, i64 3, i64 0 }, { ptr, i64, i64 } %t223) + store { ptr, i64, i64 } %t223, ptr %a226 + call void @finch_str_drop(ptr %a226) + store { ptr, i64, i64 } %t225, ptr %a227 + %t228 = load ptr, ptr %a1 + %t229 = load { ptr, i64, i64 }, ptr %a227 + %t230 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t228, { ptr, i64, i64 } %t229) + store { ptr, i64, i64 } %t230, ptr %a231 + %t232 = load ptr, ptr %a1 + %t233 = load %S.ast.Type, ptr %a2 + %t234 = load { ptr, i64, i64 }, ptr %a231 + %t235 = extractvalue { ptr, i64, i64 } %t234, 1 + %t236 = icmp uge i64 3, %t235 + br i1 %t236, label %range2735, label %inrange2736 +range2735: + call void @finch_panic_index(ptr @.str.1619, i64 859, i64 3, i64 %t235) + unreachable +inrange2736: + %t237 = extractvalue { ptr, i64, i64 } %t234, 0 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 3 + %t239 = load { ptr, i64, i64 }, ptr %t238 + %t240 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t232, { ptr, i64, i64 } { ptr @.str.1618, i64 4, i64 0 }, %S.ast.Type %t233, { ptr, i64, i64 } %t239) + store { ptr, i64, i64 } %t240, ptr %a241 + %t242 = load ptr, ptr %a1 + %t243 = load %S.ast.Type, ptr %a2 + %t244 = load { ptr, i64, i64 }, ptr %a231 + %t245 = extractvalue { ptr, i64, i64 } %t244, 1 + %t246 = icmp uge i64 3, %t245 + br i1 %t246, label %range2737, label %inrange2738 +range2737: + call void @finch_panic_index(ptr @.str.1621, i64 860, i64 3, i64 %t245) + unreachable +inrange2738: + %t247 = extractvalue { ptr, i64, i64 } %t244, 0 + %t248 = getelementptr inbounds { ptr, i64, i64 }, ptr %t247, i64 3 + %t249 = load { ptr, i64, i64 }, ptr %t248 + %t250 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t242, { ptr, i64, i64 } { ptr @.str.1620, i64 4, i64 0 }, %S.ast.Type %t243, { ptr, i64, i64 } %t249) + store { ptr, i64, i64 } %t250, ptr %a251 + %t252 = load ptr, ptr %a1 + %t253 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t252, { ptr, i64, i64 } { ptr @.str.1622, i64 10, i64 0 }) + store { ptr, i64, i64 } %t253, ptr %a254 + %t255 = load ptr, ptr %a1 + %t256 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t255, { ptr, i64, i64 } { ptr @.str.1623, i64 10, i64 0 }) + store { ptr, i64, i64 } %t256, ptr %a257 + %t258 = load ptr, ptr %a1 + %t259 = load ptr, ptr %a1 + %t260 = load ptr, ptr %a1 + %t261 = load ptr, ptr %a1 + %t262 = load ptr, ptr %a1 + %t263 = load %S.ast.Type, ptr %a2 + %t264 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t262, %S.ast.Type %t263) + store { ptr, i64, i64 } { ptr @.str.1626, i64 23, i64 0 }, ptr %a266 + store { ptr, i64, i64 } %t264, ptr %a267 + call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) + store { ptr, i64, i64 } %t264, ptr %a268 + call void @finch_str_drop(ptr %a268) + %t269 = load { ptr, i64, i64 }, ptr %a265 + store { ptr, i64, i64 } %t269, ptr %a271 + store { ptr, i64, i64 } { ptr @.str.1627, i64 6, i64 0 }, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t269, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + %t275 = load { ptr, i64, i64 }, ptr %a241 + store { ptr, i64, i64 } %t274, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + store { ptr, i64, i64 } %t274, ptr %a279 + call void @finch_str_drop(ptr %a279) + %t280 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.1628, i64 14, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t280, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + %t286 = call { ptr, i64, i64 } @finch.gen.op(ptr %t261, { ptr, i64, i64 } %t285) + store { ptr, i64, i64 } %t285, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = call { ptr, i64, i64 } @finch.gen.load(ptr %t260, { ptr, i64, i64 } { ptr @.str.1625, i64 3, i64 0 }, { ptr, i64, i64 } %t286) + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_drop(ptr %a289) + store { ptr, i64, i64 } { ptr @.str.1624, i64 12, i64 0 }, ptr %a291 + store { ptr, i64, i64 } %t288, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + store { ptr, i64, i64 } %t288, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t294, ptr %a296 + store { ptr, i64, i64 } { ptr @.str.1629, i64 3, i64 0 }, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + store { ptr, i64, i64 } %t294, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a295 + %t300 = call { ptr, i64, i64 } @finch.gen.op(ptr %t259, { ptr, i64, i64 } %t299) + store { ptr, i64, i64 } %t299, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a254 + %t303 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.condBr(ptr %t258, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t302, { ptr, i64, i64 } %t303) + store { ptr, i64, i64 } %t300, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load ptr, ptr %a1 + %t306 = load { ptr, i64, i64 }, ptr %a254 + call void @finch.gen.label(ptr %t305, { ptr, i64, i64 } %t306) + %t307 = load ptr, ptr %a1 + %t308 = load ptr, ptr %a1 + %t309 = load { ptr, i64, i64 }, ptr %a251 + %t310 = load %S.ast.Type, ptr %a2 + %t311 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t308, { ptr, i64, i64 } %t309, %S.ast.Type %t310, i64 1) + %t312 = load ptr, ptr %a1 + %t313 = load { ptr, i64, i64 }, ptr %a241 + %t314 = load %S.ast.Type, ptr %a2 + %t315 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t312, { ptr, i64, i64 } %t313, %S.ast.Type %t314, i64 1) + %t316 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t317 = load { ptr, i64, i64 }, ptr %t316 + %t318 = extractvalue { ptr, i64, i64 } %t317, 1 + %t319 = icmp uge i64 0, %t318 + br i1 %t319, label %range2739, label %inrange2740 +range2739: + call void @finch_panic_index(ptr @.str.1630, i64 865, i64 0, i64 %t318) + unreachable +inrange2740: + %t320 = extractvalue { ptr, i64, i64 } %t317, 0 + %t321 = getelementptr inbounds %S.ast.Type, ptr %t320, i64 0 + %t322 = load %S.ast.Type, ptr %t321 + call void @finch.gen.copyAt(ptr %t307, { ptr, i64, i64 } %t311, { ptr, i64, i64 } %t315, %S.ast.Type %t322) + store { ptr, i64, i64 } %t311, ptr %a323 + call void @finch_str_drop(ptr %a323) + store { ptr, i64, i64 } %t315, ptr %a324 + call void @finch_str_drop(ptr %a324) + %t325 = load ptr, ptr %a1 + %t326 = load ptr, ptr %a1 + %t327 = load { ptr, i64, i64 }, ptr %a251 + %t328 = load %S.ast.Type, ptr %a2 + %t329 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t326, { ptr, i64, i64 } %t327, %S.ast.Type %t328, i64 2) + %t330 = load ptr, ptr %a1 + %t331 = load { ptr, i64, i64 }, ptr %a241 + %t332 = load %S.ast.Type, ptr %a2 + %t333 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t330, { ptr, i64, i64 } %t331, %S.ast.Type %t332, i64 2) + %t334 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t335 = load { ptr, i64, i64 }, ptr %t334 + %t336 = extractvalue { ptr, i64, i64 } %t335, 1 + %t337 = icmp uge i64 1, %t336 + br i1 %t337, label %range2741, label %inrange2742 +range2741: + call void @finch_panic_index(ptr @.str.1631, i64 866, i64 1, i64 %t336) + unreachable +inrange2742: + %t338 = extractvalue { ptr, i64, i64 } %t335, 0 + %t339 = getelementptr inbounds %S.ast.Type, ptr %t338, i64 1 + %t340 = load %S.ast.Type, ptr %t339 + call void @finch.gen.copyAt(ptr %t325, { ptr, i64, i64 } %t329, { ptr, i64, i64 } %t333, %S.ast.Type %t340) + store { ptr, i64, i64 } %t329, ptr %a341 + call void @finch_str_drop(ptr %a341) + store { ptr, i64, i64 } %t333, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load ptr, ptr %a1 + %t344 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.br(ptr %t343, { ptr, i64, i64 } %t344) + %t345 = load ptr, ptr %a1 + %t346 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.label(ptr %t345, { ptr, i64, i64 } %t346) + %t347 = load ptr, ptr %a1 + %t348 = load { ptr, i64, i64 }, ptr %a231 + call void @finch.gen.loopEnd(ptr %t347, { ptr, i64, i64 } %t348) + call void @finch_str_drop(ptr %a257) + call void @finch_str_drop(ptr %a254) + call void @finch_str_drop(ptr %a251) + call void @finch_str_drop(ptr %a241) + call void @finch.drop.arr_str(ptr %a231) + call void @finch_str_drop(ptr %a227) + br label %endif2734 +endif2734: + br label %endif2723 +else2722: + %t349 = load ptr, ptr %a1 + %t350 = icmp eq ptr %t349, null + br i1 %t350, label %panic2743, label %ok2744 +panic2743: + call void @finch_panic(ptr @.str.1632, i64 872, ptr @.str.1633) + unreachable +ok2744: + %t351 = getelementptr inbounds %S.gen.Gen, ptr %t349, i32 0, i32 16 + %t352 = load ptr, ptr %a1 + %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t354 = load { ptr, i64, i64 }, ptr %t353 + %t355 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t356 = load { ptr, i64, i64 }, ptr %t355 + %t357 = call i64 @finch.gen.findStruct(ptr %t352, { ptr, i64, i64 } %t354, { ptr, i64, i64 } %t356) + %t358 = load { ptr, i64, i64 }, ptr %t351 + %t359 = extractvalue { ptr, i64, i64 } %t358, 1 + %t360 = icmp uge i64 %t357, %t359 + br i1 %t360, label %range2745, label %inrange2746 +range2745: + call void @finch_panic_index(ptr @.str.1634, i64 872, i64 %t357, i64 %t359) + unreachable +inrange2746: + %t361 = extractvalue { ptr, i64, i64 } %t358, 0 + %t362 = getelementptr inbounds %S.gen.StructDef, ptr %t361, i64 %t357 + %t363 = load %S.gen.StructDef, ptr %t362 + store %S.gen.StructDef %t363, ptr %a364 + call void @finch.copy.S_gen_StructDef(ptr %a365, ptr %a364) + %t366 = load %S.gen.StructDef, ptr %a365 + store %S.gen.StructDef %t366, ptr %a367 + %t368 = load ptr, ptr %a1 + %t369 = load %S.ast.Type, ptr %a2 + %t370 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t368, %S.ast.Type %t369) + store { ptr, i64, i64 } %t370, ptr %a371 + %t372 = load ptr, ptr %a1 + %t373 = load { ptr, i64, i64 }, ptr %a371 + %t374 = load ptr, ptr %a1 + %t375 = load { ptr, i64, i64 }, ptr %a371 + %t376 = call { ptr, i64, i64 } @finch.gen.load(ptr %t374, { ptr, i64, i64 } %t375, { ptr, i64, i64 } { ptr @.str.1635, i64 4, i64 0 }) + call void @finch.gen.store(ptr %t372, { ptr, i64, i64 } %t373, { ptr, i64, i64 } %t376, { ptr, i64, i64 } { ptr @.str.1636, i64 4, i64 0 }) + store { ptr, i64, i64 } %t376, ptr %a377 + call void @finch_str_drop(ptr %a377) + %t378 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 + %t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 + %t380 = load i64, ptr %t379 + store i64 0, ptr %a381 + br label %for.cond2747 +for.cond2747: + %t382 = load i64, ptr %a381 + %t383 = icmp slt i64 %t382, %t380 + br i1 %t383, label %for.body2748, label %for.end2750 +for.body2748: + %t384 = load ptr, ptr %a1 + %t385 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 + %t386 = load i64, ptr %a381 + %t387 = load { ptr, i64, i64 }, ptr %t385 + %t388 = extractvalue { ptr, i64, i64 } %t387, 1 + %t389 = icmp uge i64 %t386, %t388 + br i1 %t389, label %range2751, label %inrange2752 +range2751: + call void @finch_panic_index(ptr @.str.1637, i64 876, i64 %t386, i64 %t388) + unreachable +inrange2752: + %t390 = extractvalue { ptr, i64, i64 } %t387, 0 + %t391 = getelementptr inbounds %S.ast.Type, ptr %t390, i64 %t386 + %t392 = load %S.ast.Type, ptr %t391 + %t393 = call i1 @finch.gen.owning(ptr %t384, %S.ast.Type %t392) + br i1 %t393, label %then2753, label %endif2755 +then2753: + %t394 = load ptr, ptr %a1 + %t395 = load { ptr, i64, i64 }, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1638, i64 23, i64 0 }, ptr %a397 + store { ptr, i64, i64 } %t395, ptr %a398 + call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a396 + store { ptr, i64, i64 } %t399, ptr %a401 + store { ptr, i64, i64 } { ptr @.str.1639, i64 23, i64 0 }, ptr %a402 + call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) + store { ptr, i64, i64 } %t399, ptr %a403 + call void @finch_str_drop(ptr %a403) + %t404 = load { ptr, i64, i64 }, ptr %a400 + %t405 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 3 + %t406 = load i64, ptr %a381 + %t407 = load { ptr, i64, i64 }, ptr %t405 + %t408 = extractvalue { ptr, i64, i64 } %t407, 1 + %t409 = icmp uge i64 %t406, %t408 + br i1 %t409, label %range2756, label %inrange2757 +range2756: + call void @finch_panic_index(ptr @.str.1640, i64 877, i64 %t406, i64 %t408) + unreachable +inrange2757: + %t410 = extractvalue { ptr, i64, i64 } %t407, 0 + %t411 = getelementptr inbounds i64, ptr %t410, i64 %t406 + %t412 = load i64, ptr %t411 + call void @finch_str_from_int(ptr %a413, i64 %t412) + %t414 = load { ptr, i64, i64 }, ptr %a413 + store { ptr, i64, i64 } %t404, ptr %a416 + store { ptr, i64, i64 } %t414, ptr %a417 + call void @finch_str_concat(ptr %a415, ptr %a416, ptr %a417) + store { ptr, i64, i64 } %t404, ptr %a418 + call void @finch_str_drop(ptr %a418) + store { ptr, i64, i64 } %t414, ptr %a419 + call void @finch_str_drop(ptr %a419) + %t420 = load { ptr, i64, i64 }, ptr %a415 + %t421 = call { ptr, i64, i64 } @finch.gen.op(ptr %t394, { ptr, i64, i64 } %t420) + store { ptr, i64, i64 } %t420, ptr %a422 + call void @finch_str_drop(ptr %a422) + store { ptr, i64, i64 } %t421, ptr %a423 + %t424 = load ptr, ptr %a1 + %t425 = load { ptr, i64, i64 }, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1641, i64 23, i64 0 }, ptr %a427 + store { ptr, i64, i64 } %t425, ptr %a428 + call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) + %t429 = load { ptr, i64, i64 }, ptr %a426 + store { ptr, i64, i64 } %t429, ptr %a431 + store { ptr, i64, i64 } { ptr @.str.1642, i64 23, i64 0 }, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 3 + %t436 = load i64, ptr %a381 + %t437 = load { ptr, i64, i64 }, ptr %t435 + %t438 = extractvalue { ptr, i64, i64 } %t437, 1 + %t439 = icmp uge i64 %t436, %t438 + br i1 %t439, label %range2758, label %inrange2759 +range2758: + call void @finch_panic_index(ptr @.str.1643, i64 878, i64 %t436, i64 %t438) + unreachable +inrange2759: + %t440 = extractvalue { ptr, i64, i64 } %t437, 0 + %t441 = getelementptr inbounds i64, ptr %t440, i64 %t436 + %t442 = load i64, ptr %t441 + call void @finch_str_from_int(ptr %a443, i64 %t442) + %t444 = load { ptr, i64, i64 }, ptr %a443 + store { ptr, i64, i64 } %t434, ptr %a446 + store { ptr, i64, i64 } %t444, ptr %a447 + call void @finch_str_concat(ptr %a445, ptr %a446, ptr %a447) + store { ptr, i64, i64 } %t434, ptr %a448 + call void @finch_str_drop(ptr %a448) + store { ptr, i64, i64 } %t444, ptr %a449 + call void @finch_str_drop(ptr %a449) + %t450 = load { ptr, i64, i64 }, ptr %a445 + %t451 = call { ptr, i64, i64 } @finch.gen.op(ptr %t424, { ptr, i64, i64 } %t450) + store { ptr, i64, i64 } %t450, ptr %a452 + call void @finch_str_drop(ptr %a452) + store { ptr, i64, i64 } %t451, ptr %a453 + %t454 = load ptr, ptr %a1 + %t455 = load { ptr, i64, i64 }, ptr %a423 + %t456 = load { ptr, i64, i64 }, ptr %a453 + %t457 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 + %t458 = load i64, ptr %a381 + %t459 = load { ptr, i64, i64 }, ptr %t457 + %t460 = extractvalue { ptr, i64, i64 } %t459, 1 + %t461 = icmp uge i64 %t458, %t460 + br i1 %t461, label %range2760, label %inrange2761 +range2760: + call void @finch_panic_index(ptr @.str.1644, i64 879, i64 %t458, i64 %t460) + unreachable +inrange2761: + %t462 = extractvalue { ptr, i64, i64 } %t459, 0 + %t463 = getelementptr inbounds %S.ast.Type, ptr %t462, i64 %t458 + %t464 = load %S.ast.Type, ptr %t463 + call void @finch.gen.copyAt(ptr %t454, { ptr, i64, i64 } %t455, { ptr, i64, i64 } %t456, %S.ast.Type %t464) + call void @finch_str_drop(ptr %a453) + call void @finch_str_drop(ptr %a423) + br label %endif2755 +endif2755: + br label %for.step2749 +for.step2749: + %t465 = load i64, ptr %a381 + %t466 = add i64 %t465, 1 + store i64 %t466, ptr %a381 + br label %for.cond2747 +for.end2750: + call void @finch_str_drop(ptr %a371) + call void @finch.drop.S_gen_StructDef(ptr %a367) + br label %endif2723 +endif2723: + br label %endif2711 +endif2711: + %t467 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t467, { ptr, i64, i64 } { ptr @.str.1645, i64 8, i64 0 }) + %t468 = load ptr, ptr %a1 + %t469 = load %S.gen.Saved, ptr %a32 + %t470 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1646, i64 21, i64 0 }, ptr %a472 + store { ptr, i64, i64 } %t470, ptr %a473 + call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a471 + store { ptr, i64, i64 } %t474, ptr %a476 + store { ptr, i64, i64 } { ptr @.str.1647, i64 20, i64 0 }, ptr %a477 + call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) + store { ptr, i64, i64 } %t474, ptr %a478 + call void @finch_str_drop(ptr %a478) + %t479 = load { ptr, i64, i64 }, ptr %a475 + call void @finch.gen.endHelper(ptr %t468, %S.gen.Saved %t469, { ptr, i64, i64 } %t479) + store { ptr, i64, i64 } %t479, ptr %a480 + call void @finch_str_drop(ptr %a480) + %t481 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t481 +} + +define internal void @finch.drop.S_gen_Val(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Val, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Val, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.copyValue(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a24 = alloca %S.gen.Val, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + %t7 = xor i1 %t6, true + br i1 %t7, label %then2762, label %endif2764 +then2762: + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch_str_copy(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t11 +endif2764: + %t12 = load ptr, ptr %a1 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_copy(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t16, 0 + %t18 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t18, ptr %a19 + call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) + %t21 = load %S.ast.Type, ptr %a20 + %t22 = insertvalue %S.gen.Val %t17, %S.ast.Type %t21, 1 + %t23 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t12, %S.gen.Val %t22) + store %S.gen.Val %t22, ptr %a24 + call void @finch.drop.S_gen_Val(ptr %a24) + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = load ptr, ptr %a1 + %t28 = load %S.ast.Type, ptr %a3 + %t29 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t27, %S.ast.Type %t28) + %t30 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t26, { ptr, i64, i64 } %t29) + store { ptr, i64, i64 } %t29, ptr %a31 + call void @finch_str_drop(ptr %a31) + store { ptr, i64, i64 } %t30, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = load { ptr, i64, i64 }, ptr %a32 + %t35 = load { ptr, i64, i64 }, ptr %a25 + %t36 = load %S.ast.Type, ptr %a3 + call void @finch.gen.copyAt(ptr %t33, { ptr, i64, i64 } %t34, { ptr, i64, i64 } %t35, %S.ast.Type %t36) + %t37 = load ptr, ptr %a1 + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Type, ptr %a3 + %t40 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t38, %S.ast.Type %t39) + %t41 = load { ptr, i64, i64 }, ptr %a32 + %t42 = call { ptr, i64, i64 } @finch.gen.load(ptr %t37, { ptr, i64, i64 } %t40, { ptr, i64, i64 } %t41) + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_drop(ptr %a43) + call void @finch_str_drop(ptr %a32) + call void @finch_str_drop(ptr %a25) + ret { ptr, i64, i64 } %t42 +} + +define internal void @finch.gen.dropAt(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + %t7 = xor i1 %t6, true + br i1 %t7, label %then2765, label %endif2767 +then2765: + ret void +endif2767: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1648, i64 3, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then2768, label %else2769 +then2768: + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1649, i64 30, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.1650, i64 1, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + call void @finch.gen.emit(ptr %t14, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_drop(ptr %a25) + br label %endif2770 +else2769: + %t26 = load ptr, ptr %a1 + %t27 = load ptr, ptr %a1 + %t28 = load %S.ast.Type, ptr %a3 + %t29 = call { ptr, i64, i64 } @finch.gen.dropFn(ptr %t27, %S.ast.Type %t28) + store { ptr, i64, i64 } { ptr @.str.1651, i64 10, i64 0 }, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } %t34, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.1652, i64 5, i64 0 }, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + %t40 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t39, ptr %a42 + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t39, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.1653, i64 1, i64 0 }, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t45, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + call void @finch.gen.emit(ptr %t26, { ptr, i64, i64 } %t50) + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %endif2770 +endif2770: + ret void +} + +define internal void @finch.gen.dropValue(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca %S.ast.Type, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.gen.Val, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + br i1 %t6, label %then2771, label %endif2773 +then2771: + %t7 = load ptr, ptr %a1 + %t8 = load ptr, ptr %a1 + %t9 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + %t13 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t12, 0 + %t14 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t14, ptr %a15 + call void @finch.copy.S_ast_Type(ptr %a16, ptr %a15) + %t17 = load %S.ast.Type, ptr %a16 + %t18 = insertvalue %S.gen.Val %t13, %S.ast.Type %t17, 1 + %t19 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t8, %S.gen.Val %t18) + store %S.gen.Val %t18, ptr %a20 + call void @finch.drop.S_gen_Val(ptr %a20) + %t21 = load %S.ast.Type, ptr %a3 + call void @finch.gen.dropAt(ptr %t7, { ptr, i64, i64 } %t19, %S.ast.Type %t21) + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_drop(ptr %a22) + br label %endif2773 +endif2773: + ret void +} + +define internal void @finch.gen.release(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 + %t4 = load i1, ptr %t3 + br label %logic.from2774 +logic.from2774: + br i1 %t4, label %logic.rhs2775, label %logic.end2776 +logic.rhs2775: + %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = icmp sgt i64 %t7, 0 + br label %logic.rend2777 +logic.rend2777: + br label %logic.end2776 +logic.end2776: + %t9 = phi i1 [ false, %logic.from2774 ], [ %t8, %logic.rend2777 ] + br label %logic.from2778 +logic.from2778: + br i1 %t9, label %logic.rhs2779, label %logic.end2780 +logic.rhs2779: + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true + br label %logic.rend2781 +logic.rend2781: + br label %logic.end2780 +logic.end2780: + %t14 = phi i1 [ false, %logic.from2778 ], [ %t13, %logic.rend2781 ] + br label %logic.from2782 +logic.from2782: + br i1 %t14, label %logic.rhs2783, label %logic.end2784 +logic.rhs2783: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2785 +logic.rend2785: + br label %logic.end2784 +logic.end2784: + %t19 = phi i1 [ false, %logic.from2782 ], [ %t18, %logic.rend2785 ] + br i1 %t19, label %then2786, label %endif2788 +then2786: + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t24 = load %S.ast.Type, ptr %t23 + call void @finch.gen.dropValue(ptr %t20, { ptr, i64, i64 } %t22, %S.ast.Type %t24) + br label %endif2788 +endif2788: + ret void +} + +define internal i1 @finch.gen.isConstant({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1655, i64 1, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_starts(ptr %a3, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + %t8 = xor i1 %t7, true + ret i1 %t8 +} + +define internal { ptr, i64, i64 } @finch.gen.dropFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.ast.Type, align 16 + %a47 = alloca %S.ast.Type, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.ast.Type, align 16 + %a127 = alloca %S.ast.Type, align 16 + %a135 = alloca %S.ast.Type, align 16 + %a136 = alloca %S.ast.Type, align 16 + %a138 = alloca %S.ast.Type, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca %S.gen.StructDef, align 16 + %a249 = alloca %S.gen.StructDef, align 16 + %a251 = alloca %S.gen.StructDef, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca i64, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.1656, i64 12, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2789, label %ok2790 +panic2789: + call void @finch_panic(ptr @.str.1657, i64 930, ptr @.str.1658) + unreachable +ok2790: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then2791, label %endif2793 +then2791: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif2793: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2794, label %ok2795 +panic2794: + call void @finch_panic(ptr @.str.1659, i64 933, ptr @.str.1660) + unreachable +ok2795: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1661, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then2796, label %else2797 +then2796: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range2799, label %inrange2800 +range2799: + call void @finch_panic_index(ptr @.str.1662, i64 936, i64 0, i64 %t41) + unreachable +inrange2800: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 + %t45 = load %S.ast.Type, ptr %t44 + store %S.ast.Type %t45, ptr %a46 + call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) + %t48 = load %S.ast.Type, ptr %a47 + store %S.ast.Type %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = load %S.ast.Type, ptr %a49 + %t52 = call i1 @finch.gen.owning(ptr %t50, %S.ast.Type %t51) + br i1 %t52, label %then2801, label %endif2803 +then2801: + %t53 = load ptr, ptr %a1 + %t54 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1663, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1664, i64 2, i64 0 }) + store { ptr, i64, i64 } %t54, ptr %a55 + %t56 = load ptr, ptr %a1 + %t57 = load ptr, ptr %a1 + %t58 = call { ptr, i64, i64 } @finch.gen.op(ptr %t57, { ptr, i64, i64 } { ptr @.str.1666, i64 62, i64 0 }) + %t59 = call { ptr, i64, i64 } @finch.gen.load(ptr %t56, { ptr, i64, i64 } { ptr @.str.1665, i64 3, i64 0 }, { ptr, i64, i64 } %t58) + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_drop(ptr %a60) + store { ptr, i64, i64 } %t59, ptr %a61 + %t62 = load ptr, ptr %a1 + %t63 = load { ptr, i64, i64 }, ptr %a61 + %t64 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t62, { ptr, i64, i64 } %t63) + store { ptr, i64, i64 } %t64, ptr %a65 + %t66 = load ptr, ptr %a1 + %t67 = load ptr, ptr %a1 + %t68 = load %S.ast.Type, ptr %a49 + %t69 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t67, %S.ast.Type %t68) + store { ptr, i64, i64 } { ptr @.str.1667, i64 23, i64 0 }, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.1668, i64 6, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + %t80 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t79, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t79, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1669, i64 6, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = load { ptr, i64, i64 }, ptr %a65 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 3, %t92 + br i1 %t93, label %range2804, label %inrange2805 +range2804: + call void @finch_panic_index(ptr @.str.1670, i64 941, i64 3, i64 %t92) + unreachable +inrange2805: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 3 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t90, ptr %a98 + store { ptr, i64, i64 } %t96, ptr %a99 + call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) + store { ptr, i64, i64 } %t90, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a97 + %t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t66, { ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t101, ptr %a103 + call void @finch_str_drop(ptr %a103) + store { ptr, i64, i64 } %t102, ptr %a104 + %t105 = load ptr, ptr %a1 + %t106 = load { ptr, i64, i64 }, ptr %a104 + %t107 = load %S.ast.Type, ptr %a49 + call void @finch.gen.dropAt(ptr %t105, { ptr, i64, i64 } %t106, %S.ast.Type %t107) + %t108 = load ptr, ptr %a1 + %t109 = load { ptr, i64, i64 }, ptr %a65 + call void @finch.gen.loopEnd(ptr %t108, { ptr, i64, i64 } %t109) + call void @finch_str_drop(ptr %a104) + call void @finch.drop.arr_str(ptr %a65) + call void @finch_str_drop(ptr %a61) + call void @finch_str_drop(ptr %a55) + br label %endif2803 +endif2803: + %t110 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t110, { ptr, i64, i64 } { ptr @.str.1671, i64 33, i64 0 }) + call void @finch.drop.S_ast_Type(ptr %a49) + br label %endif2798 +else2797: + %t111 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.1672, i64 3, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br i1 %t116, label %then2806, label %else2807 +then2806: + %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = extractvalue { ptr, i64, i64 } %t118, 1 + %t120 = icmp uge i64 0, %t119 + br i1 %t120, label %range2809, label %inrange2810 +range2809: + call void @finch_panic_index(ptr @.str.1673, i64 947, i64 0, i64 %t119) + unreachable +inrange2810: + %t121 = extractvalue { ptr, i64, i64 } %t118, 0 + %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 0 + %t123 = load %S.ast.Type, ptr %t122 + store %S.ast.Type %t123, ptr %a124 + call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) + %t126 = load %S.ast.Type, ptr %a125 + store %S.ast.Type %t126, ptr %a127 + %t128 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t129 = load { ptr, i64, i64 }, ptr %t128 + %t130 = extractvalue { ptr, i64, i64 } %t129, 1 + %t131 = icmp uge i64 1, %t130 + br i1 %t131, label %range2811, label %inrange2812 +range2811: + call void @finch_panic_index(ptr @.str.1674, i64 948, i64 1, i64 %t130) + unreachable +inrange2812: + %t132 = extractvalue { ptr, i64, i64 } %t129, 0 + %t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i64 1 + %t134 = load %S.ast.Type, ptr %t133 + store %S.ast.Type %t134, ptr %a135 + call void @finch.copy.S_ast_Type(ptr %a136, ptr %a135) + %t137 = load %S.ast.Type, ptr %a136 + store %S.ast.Type %t137, ptr %a138 + %t139 = load ptr, ptr %a1 + %t140 = load %S.ast.Type, ptr %a127 + %t141 = call i1 @finch.gen.owning(ptr %t139, %S.ast.Type %t140) + br label %logic.from2813 +logic.from2813: + br i1 %t141, label %logic.end2815, label %logic.rhs2814 +logic.rhs2814: + %t142 = load ptr, ptr %a1 + %t143 = load %S.ast.Type, ptr %a138 + %t144 = call i1 @finch.gen.owning(ptr %t142, %S.ast.Type %t143) + br label %logic.rend2816 +logic.rend2816: + br label %logic.end2815 +logic.end2815: + %t145 = phi i1 [ true, %logic.from2813 ], [ %t144, %logic.rend2816 ] + br i1 %t145, label %then2817, label %endif2819 +then2817: + %t146 = load ptr, ptr %a1 + %t147 = load ptr, ptr %a1 + %t148 = load ptr, ptr %a1 + %t149 = load %S.ast.Type, ptr %a2 + %t150 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t148, %S.ast.Type %t149) + store { ptr, i64, i64 } { ptr @.str.1676, i64 23, i64 0 }, ptr %a152 + store { ptr, i64, i64 } %t150, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + store { ptr, i64, i64 } %t155, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.1677, i64 22, i64 0 }, ptr %a158 + call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) + store { ptr, i64, i64 } %t155, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load { ptr, i64, i64 }, ptr %a156 + %t161 = call { ptr, i64, i64 } @finch.gen.op(ptr %t147, { ptr, i64, i64 } %t160) + store { ptr, i64, i64 } %t160, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = call { ptr, i64, i64 } @finch.gen.load(ptr %t146, { ptr, i64, i64 } { ptr @.str.1675, i64 3, i64 0 }, { ptr, i64, i64 } %t161) + store { ptr, i64, i64 } %t161, ptr %a164 + call void @finch_str_drop(ptr %a164) + store { ptr, i64, i64 } %t163, ptr %a165 + %t166 = load ptr, ptr %a1 + %t167 = load { ptr, i64, i64 }, ptr %a165 + %t168 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t166, { ptr, i64, i64 } %t167) + store { ptr, i64, i64 } %t168, ptr %a169 + %t170 = load ptr, ptr %a1 + %t171 = load %S.ast.Type, ptr %a2 + %t172 = load { ptr, i64, i64 }, ptr %a169 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 3, %t173 + br i1 %t174, label %range2820, label %inrange2821 +range2820: + call void @finch_panic_index(ptr @.str.1679, i64 952, i64 3, i64 %t173) + unreachable +inrange2821: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i64 3 + %t177 = load { ptr, i64, i64 }, ptr %t176 + %t178 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t170, { ptr, i64, i64 } { ptr @.str.1678, i64 2, i64 0 }, %S.ast.Type %t171, { ptr, i64, i64 } %t177) + store { ptr, i64, i64 } %t178, ptr %a179 + %t180 = load ptr, ptr %a1 + %t181 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t180, { ptr, i64, i64 } { ptr @.str.1680, i64 10, i64 0 }) + store { ptr, i64, i64 } %t181, ptr %a182 + %t183 = load ptr, ptr %a1 + %t184 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t183, { ptr, i64, i64 } { ptr @.str.1681, i64 10, i64 0 }) + store { ptr, i64, i64 } %t184, ptr %a185 + %t186 = load ptr, ptr %a1 + %t187 = load ptr, ptr %a1 + %t188 = load ptr, ptr %a1 + %t189 = load ptr, ptr %a1 + %t190 = load { ptr, i64, i64 }, ptr %a179 + %t191 = load %S.ast.Type, ptr %a2 + %t192 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t189, { ptr, i64, i64 } %t190, %S.ast.Type %t191, i64 0) + %t193 = call { ptr, i64, i64 } @finch.gen.load(ptr %t188, { ptr, i64, i64 } { ptr @.str.1683, i64 3, i64 0 }, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a194 + call void @finch_str_drop(ptr %a194) + store { ptr, i64, i64 } { ptr @.str.1682, i64 12, i64 0 }, ptr %a196 + store { ptr, i64, i64 } %t193, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t193, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + store { ptr, i64, i64 } %t199, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.1684, i64 3, i64 0 }, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t199, ptr %a203 + call void @finch_str_drop(ptr %a203) + %t204 = load { ptr, i64, i64 }, ptr %a200 + %t205 = call { ptr, i64, i64 } @finch.gen.op(ptr %t187, { ptr, i64, i64 } %t204) + store { ptr, i64, i64 } %t204, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a182 + %t208 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.condBr(ptr %t186, { ptr, i64, i64 } %t205, { ptr, i64, i64 } %t207, { ptr, i64, i64 } %t208) + store { ptr, i64, i64 } %t205, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load ptr, ptr %a1 + %t211 = load { ptr, i64, i64 }, ptr %a182 + call void @finch.gen.label(ptr %t210, { ptr, i64, i64 } %t211) + %t212 = load ptr, ptr %a1 + %t213 = load ptr, ptr %a1 + %t214 = load { ptr, i64, i64 }, ptr %a179 + %t215 = load %S.ast.Type, ptr %a2 + %t216 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t213, { ptr, i64, i64 } %t214, %S.ast.Type %t215, i64 1) + %t217 = load %S.ast.Type, ptr %a127 + call void @finch.gen.dropAt(ptr %t212, { ptr, i64, i64 } %t216, %S.ast.Type %t217) + store { ptr, i64, i64 } %t216, ptr %a218 + call void @finch_str_drop(ptr %a218) + %t219 = load ptr, ptr %a1 + %t220 = load ptr, ptr %a1 + %t221 = load { ptr, i64, i64 }, ptr %a179 + %t222 = load %S.ast.Type, ptr %a2 + %t223 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t220, { ptr, i64, i64 } %t221, %S.ast.Type %t222, i64 2) + %t224 = load %S.ast.Type, ptr %a138 + call void @finch.gen.dropAt(ptr %t219, { ptr, i64, i64 } %t223, %S.ast.Type %t224) + store { ptr, i64, i64 } %t223, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load ptr, ptr %a1 + %t227 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.br(ptr %t226, { ptr, i64, i64 } %t227) + %t228 = load ptr, ptr %a1 + %t229 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.label(ptr %t228, { ptr, i64, i64 } %t229) + %t230 = load ptr, ptr %a1 + %t231 = load { ptr, i64, i64 }, ptr %a169 + call void @finch.gen.loopEnd(ptr %t230, { ptr, i64, i64 } %t231) + call void @finch_str_drop(ptr %a185) + call void @finch_str_drop(ptr %a182) + call void @finch_str_drop(ptr %a179) + call void @finch.drop.arr_str(ptr %a169) + call void @finch_str_drop(ptr %a165) + br label %endif2819 +endif2819: + %t232 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t232, { ptr, i64, i64 } { ptr @.str.1685, i64 33, i64 0 }) + call void @finch.drop.S_ast_Type(ptr %a138) + call void @finch.drop.S_ast_Type(ptr %a127) + br label %endif2808 +else2807: + %t233 = load ptr, ptr %a1 + %t234 = icmp eq ptr %t233, null + br i1 %t234, label %panic2822, label %ok2823 +panic2822: + call void @finch_panic(ptr @.str.1686, i64 965, ptr @.str.1687) + unreachable +ok2823: + %t235 = getelementptr inbounds %S.gen.Gen, ptr %t233, i32 0, i32 16 + %t236 = load ptr, ptr %a1 + %t237 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = call i64 @finch.gen.findStruct(ptr %t236, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t240) + %t242 = load { ptr, i64, i64 }, ptr %t235 + %t243 = extractvalue { ptr, i64, i64 } %t242, 1 + %t244 = icmp uge i64 %t241, %t243 + br i1 %t244, label %range2824, label %inrange2825 +range2824: + call void @finch_panic_index(ptr @.str.1688, i64 965, i64 %t241, i64 %t243) + unreachable +inrange2825: + %t245 = extractvalue { ptr, i64, i64 } %t242, 0 + %t246 = getelementptr inbounds %S.gen.StructDef, ptr %t245, i64 %t241 + %t247 = load %S.gen.StructDef, ptr %t246 + store %S.gen.StructDef %t247, ptr %a248 + call void @finch.copy.S_gen_StructDef(ptr %a249, ptr %a248) + %t250 = load %S.gen.StructDef, ptr %a249 + store %S.gen.StructDef %t250, ptr %a251 + %t252 = load ptr, ptr %a1 + %t253 = load %S.ast.Type, ptr %a2 + %t254 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t252, %S.ast.Type %t253) + store { ptr, i64, i64 } %t254, ptr %a255 + %t256 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 + %t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t256, i32 0, i32 1 + %t258 = load i64, ptr %t257 + store i64 0, ptr %a259 + br label %for.cond2826 +for.cond2826: + %t260 = load i64, ptr %a259 + %t261 = icmp slt i64 %t260, %t258 + br i1 %t261, label %for.body2827, label %for.end2829 +for.body2827: + %t262 = load ptr, ptr %a1 + %t263 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 + %t264 = load i64, ptr %a259 + %t265 = load { ptr, i64, i64 }, ptr %t263 + %t266 = extractvalue { ptr, i64, i64 } %t265, 1 + %t267 = icmp uge i64 %t264, %t266 + br i1 %t267, label %range2830, label %inrange2831 +range2830: + call void @finch_panic_index(ptr @.str.1689, i64 968, i64 %t264, i64 %t266) + unreachable +inrange2831: + %t268 = extractvalue { ptr, i64, i64 } %t265, 0 + %t269 = getelementptr inbounds %S.ast.Type, ptr %t268, i64 %t264 + %t270 = load %S.ast.Type, ptr %t269 + %t271 = call i1 @finch.gen.owning(ptr %t262, %S.ast.Type %t270) + br i1 %t271, label %then2832, label %endif2834 +then2832: + %t272 = load ptr, ptr %a1 + %t273 = load ptr, ptr %a1 + %t274 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } { ptr @.str.1690, i64 23, i64 0 }, ptr %a276 + store { ptr, i64, i64 } %t274, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a275 + store { ptr, i64, i64 } %t278, ptr %a280 + store { ptr, i64, i64 } { ptr @.str.1691, i64 21, i64 0 }, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + %t284 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 3 + %t285 = load i64, ptr %a259 + %t286 = load { ptr, i64, i64 }, ptr %t284 + %t287 = extractvalue { ptr, i64, i64 } %t286, 1 + %t288 = icmp uge i64 %t285, %t287 + br i1 %t288, label %range2835, label %inrange2836 +range2835: + call void @finch_panic_index(ptr @.str.1692, i64 969, i64 %t285, i64 %t287) + unreachable +inrange2836: + %t289 = extractvalue { ptr, i64, i64 } %t286, 0 + %t290 = getelementptr inbounds i64, ptr %t289, i64 %t285 + %t291 = load i64, ptr %t290 + call void @finch_str_from_int(ptr %a292, i64 %t291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t283, ptr %a295 + store { ptr, i64, i64 } %t293, ptr %a296 + call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) + store { ptr, i64, i64 } %t283, ptr %a297 + call void @finch_str_drop(ptr %a297) + store { ptr, i64, i64 } %t293, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a294 + %t300 = call { ptr, i64, i64 } @finch.gen.op(ptr %t273, { ptr, i64, i64 } %t299) + store { ptr, i64, i64 } %t299, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 + %t303 = load i64, ptr %a259 + %t304 = load { ptr, i64, i64 }, ptr %t302 + %t305 = extractvalue { ptr, i64, i64 } %t304, 1 + %t306 = icmp uge i64 %t303, %t305 + br i1 %t306, label %range2837, label %inrange2838 +range2837: + call void @finch_panic_index(ptr @.str.1693, i64 969, i64 %t303, i64 %t305) + unreachable +inrange2838: + %t307 = extractvalue { ptr, i64, i64 } %t304, 0 + %t308 = getelementptr inbounds %S.ast.Type, ptr %t307, i64 %t303 + %t309 = load %S.ast.Type, ptr %t308 + call void @finch.gen.dropAt(ptr %t272, { ptr, i64, i64 } %t300, %S.ast.Type %t309) + store { ptr, i64, i64 } %t300, ptr %a310 + call void @finch_str_drop(ptr %a310) + br label %endif2834 +endif2834: + br label %for.step2828 +for.step2828: + %t311 = load i64, ptr %a259 + %t312 = add i64 %t311, 1 + store i64 %t312, ptr %a259 + br label %for.cond2826 +for.end2829: + call void @finch_str_drop(ptr %a255) + call void @finch.drop.S_gen_StructDef(ptr %a251) + br label %endif2808 +endif2808: + br label %endif2798 +endif2798: + %t313 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t313, { ptr, i64, i64 } { ptr @.str.1694, i64 8, i64 0 }) + %t314 = load ptr, ptr %a1 + %t315 = load %S.gen.Saved, ptr %a32 + %t316 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1695, i64 21, i64 0 }, ptr %a318 + store { ptr, i64, i64 } %t316, ptr %a319 + call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a317 + store { ptr, i64, i64 } %t320, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.1696, i64 8, i64 0 }, ptr %a323 + call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) + store { ptr, i64, i64 } %t320, ptr %a324 + call void @finch_str_drop(ptr %a324) + %t325 = load { ptr, i64, i64 }, ptr %a321 + call void @finch.gen.endHelper(ptr %t314, %S.gen.Saved %t315, { ptr, i64, i64 } %t325) + store { ptr, i64, i64 } %t325, ptr %a326 + call void @finch_str_drop(ptr %a326) + %t327 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t327 +} + +define internal void @finch.gen.hold(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.ast.Type, align 16 + %a33 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 + %t4 = load i1, ptr %t3 + br label %logic.from2839 +logic.from2839: + br i1 %t4, label %logic.rhs2840, label %logic.end2841 +logic.rhs2840: + %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = icmp sgt i64 %t7, 0 + br label %logic.rend2842 +logic.rend2842: + br label %logic.end2841 +logic.end2841: + %t9 = phi i1 [ false, %logic.from2839 ], [ %t8, %logic.rend2842 ] + br label %logic.from2843 +logic.from2843: + br i1 %t9, label %logic.rhs2844, label %logic.end2845 +logic.rhs2844: + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true + br label %logic.rend2846 +logic.rend2846: + br label %logic.end2845 +logic.end2845: + %t14 = phi i1 [ false, %logic.from2843 ], [ %t13, %logic.rend2846 ] + br label %logic.from2847 +logic.from2847: + br i1 %t14, label %logic.rhs2848, label %logic.end2849 +logic.rhs2848: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2850 +logic.rend2850: + br label %logic.end2849 +logic.end2849: + %t19 = phi i1 [ false, %logic.from2847 ], [ %t18, %logic.rend2850 ] + br i1 %t19, label %then2851, label %endif2853 +then2851: + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic2854, label %ok2855 +panic2854: + call void @finch_panic(ptr @.str.1697, i64 982, ptr @.str.1698) + unreachable +ok2855: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 11 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t25 = load { ptr, i64, i64 }, ptr %t24 + store { ptr, i64, i64 } %t25, ptr %a26 + call void @finch_str_copy(ptr %a27, ptr %a26) + %t28 = load { ptr, i64, i64 }, ptr %a27 + %t29 = insertvalue %S.gen.Pending zeroinitializer, { ptr, i64, i64 } %t28, 0 + %t30 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t31 = load %S.ast.Type, ptr %t30 + store %S.ast.Type %t31, ptr %a32 + call void @finch.copy.S_ast_Type(ptr %a33, ptr %a32) + %t34 = load %S.ast.Type, ptr %a33 + %t35 = insertvalue %S.gen.Pending %t29, %S.ast.Type %t34, 1 + %t36 = insertvalue %S.gen.Pending %t35, i1 false, 2 + %t37 = load i64, ptr %t23 + %t38 = add i64 %t37, 1 + call void @finch_arr_reserve(ptr %t22, i64 %t38, i64 ptrtoint (ptr getelementptr (%S.gen.Pending, ptr null, i32 1) to i64)) + %t39 = load ptr, ptr %t22 + %t40 = getelementptr inbounds %S.gen.Pending, ptr %t39, i64 %t37 + store %S.gen.Pending %t36, ptr %t40 + store i64 %t38, ptr %t23 + br label %endif2853 +endif2853: + ret void +} + +define internal void @finch.gen.holdAddr(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + br i1 %t6, label %then2856, label %endif2858 +then2856: + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic2859, label %ok2860 +panic2859: + call void @finch_panic(ptr @.str.1699, i64 988, ptr @.str.1700) + unreachable +ok2860: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 11 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t11, ptr %a12 + call void @finch_str_copy(ptr %a13, ptr %a12) + %t14 = load { ptr, i64, i64 }, ptr %a13 + %t15 = insertvalue %S.gen.Pending zeroinitializer, { ptr, i64, i64 } %t14, 0 + %t16 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t16, ptr %a17 + call void @finch.copy.S_ast_Type(ptr %a18, ptr %a17) + %t19 = load %S.ast.Type, ptr %a18 + %t20 = insertvalue %S.gen.Pending %t15, %S.ast.Type %t19, 1 + %t21 = insertvalue %S.gen.Pending %t20, i1 true, 2 + %t22 = load i64, ptr %t10 + %t23 = add i64 %t22, 1 + call void @finch_arr_reserve(ptr %t9, i64 %t23, i64 ptrtoint (ptr getelementptr (%S.gen.Pending, ptr null, i32 1) to i64)) + %t24 = load ptr, ptr %t9 + %t25 = getelementptr inbounds %S.gen.Pending, ptr %t24, i64 %t22 + store %S.gen.Pending %t21, ptr %t25 + store i64 %t23, ptr %t10 + br label %endif2858 +endif2858: + ret void +} + +define internal void @finch.copy.S_gen_Pending(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Pending, ptr %src + store %S.gen.Pending %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Pending, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Pending, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Pending, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Pending, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.drop.S_gen_Pending(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Pending, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Pending, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal void @finch.gen.dropPending(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a24 = alloca %S.gen.Pending, align 16 + %a25 = alloca %S.gen.Pending, align 16 + %a27 = alloca %S.gen.Pending, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2861, label %ok2862 +panic2861: + call void @finch_panic(ptr @.str.1701, i64 994, ptr @.str.1702) + unreachable +ok2862: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 %t7, ptr %a8 + br label %while.cond2863 +while.cond2863: + %t9 = load i64, ptr %a8 + %t10 = load i64, ptr %a2 + %t11 = icmp sgt i64 %t9, %t10 + br i1 %t11, label %while.body2864, label %while.end2865 +while.body2864: + %t12 = load i64, ptr %a8 + %t13 = sub i64 %t12, 1 + store i64 %t13, ptr %a8 + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic2866, label %ok2867 +panic2866: + call void @finch_panic(ptr @.str.1703, i64 997, ptr @.str.1704) + unreachable +ok2867: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 11 + %t17 = load i64, ptr %a8 + %t18 = load { ptr, i64, i64 }, ptr %t16 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 %t17, %t19 + br i1 %t20, label %range2868, label %inrange2869 +range2868: + call void @finch_panic_index(ptr @.str.1705, i64 997, i64 %t17, i64 %t19) + unreachable +inrange2869: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.gen.Pending, ptr %t21, i64 %t17 + %t23 = load %S.gen.Pending, ptr %t22 + store %S.gen.Pending %t23, ptr %a24 + call void @finch.copy.S_gen_Pending(ptr %a25, ptr %a24) + %t26 = load %S.gen.Pending, ptr %a25 + store %S.gen.Pending %t26, ptr %a27 + %t28 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 2 + %t29 = load i1, ptr %t28 + br i1 %t29, label %then2870, label %else2871 +then2870: + %t30 = load ptr, ptr %a1 + %t31 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 + %t32 = load { ptr, i64, i64 }, ptr %t31 + %t33 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 + %t34 = load %S.ast.Type, ptr %t33 + call void @finch.gen.dropAt(ptr %t30, { ptr, i64, i64 } %t32, %S.ast.Type %t34) + br label %endif2872 +else2871: + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 + %t39 = load %S.ast.Type, ptr %t38 + call void @finch.gen.dropValue(ptr %t35, { ptr, i64, i64 } %t37, %S.ast.Type %t39) + br label %endif2872 +endif2872: + call void @finch.drop.S_gen_Pending(ptr %a27) + br label %while.cond2863 +while.end2865: + ret void +} + +define internal void @finch.gen.heldEnd(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a20 = alloca %S.gen.Pending, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + br label %while.cond2873 +while.cond2873: + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2876, label %ok2877 +panic2876: + call void @finch_panic(ptr @.str.1706, i64 1008, ptr @.str.1707) + unreachable +ok2877: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = load i64, ptr %a2 + %t9 = icmp sgt i64 %t7, %t8 + br i1 %t9, label %while.body2874, label %while.end2875 +while.body2874: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic2878, label %ok2879 +panic2878: + call void @finch_panic(ptr @.str.1708, i64 1009, ptr @.str.1709) + unreachable +ok2879: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 11 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp eq i64 %t14, 0 + br i1 %t15, label %panic2880, label %ok2881 +panic2880: + call void @finch_panic(ptr @.str.1710, i64 1009, ptr @.str.1711) + unreachable +ok2881: + %t16 = sub i64 %t14, 1 + %t17 = load ptr, ptr %t12 + %t18 = getelementptr inbounds %S.gen.Pending, ptr %t17, i64 %t16 + %t19 = load %S.gen.Pending, ptr %t18 + store i64 %t16, ptr %t13 + store %S.gen.Pending %t19, ptr %a20 + call void @finch.drop.S_gen_Pending(ptr %a20) + br label %while.cond2873 +while.end2875: + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.own(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t5 = load %S.ast.Type, ptr %t4 + %t6 = call i1 @finch.gen.owning(ptr %t3, %S.ast.Type %t5) + %t7 = xor i1 %t6, true + br label %logic.from2882 +logic.from2882: + br i1 %t7, label %logic.end2884, label %logic.rhs2883 +logic.rhs2883: + %t8 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 + %t9 = load i1, ptr %t8 + br label %logic.rend2885 +logic.rend2885: + br label %logic.end2884 +logic.end2884: + %t10 = phi i1 [ true, %logic.from2882 ], [ %t9, %logic.rend2885 ] + br i1 %t10, label %then2886, label %endif2888 +then2886: + %t11 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + ret { ptr, i64, i64 } %t15 +endif2888: + %t16 = load ptr, ptr %a1 + %t17 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t20 = load %S.ast.Type, ptr %t19 + %t21 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t16, { ptr, i64, i64 } %t18, %S.ast.Type %t20) + ret { ptr, i64, i64 } %t21 +} + +define internal void @finch.gen.printf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load { ptr, i64, i64 }, ptr %a2 + %t6 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t4, { ptr, i64, i64 } %t5) + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t8) + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1712, i64 0, i64 0 }, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = icmp sgt i64 %t13, 0 + br i1 %t14, label %then2889, label %endif2891 +then2889: + %t15 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1713, i64 2, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + %t20 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t19, ptr %a11 + store { ptr, i64, i64 } %t20, ptr %a21 + call void @finch_str_drop(ptr %a21) + br label %endif2891 +endif2891: + %t22 = load ptr, ptr %a1 + %t23 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1714, i64 35, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a24 + %t28 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t27, ptr %a30 + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t27, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t33, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1715, i64 1, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + call void @finch.gen.emit(ptr %t22, { ptr, i64, i64 } %t44) + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_drop(ptr %a45) + call void @finch_str_drop(ptr %a11) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a7) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.cstr(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1716, i64 31, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1717, i64 3, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a9 + %t14 = call { ptr, i64, i64 } @finch.gen.op(ptr %t3, { ptr, i64, i64 } %t13) + store { ptr, i64, i64 } %t13, ptr %a15 + call void @finch_str_drop(ptr %a15) + store { ptr, i64, i64 } %t14, ptr %a16 + %t17 = load ptr, ptr %a1 + %t18 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.1718, i64 12, i64 0 }, ptr %a20 + store { ptr, i64, i64 } %t18, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1719, i64 6, i64 0 }, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t22, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a23 + %t28 = call { ptr, i64, i64 } @finch.gen.op(ptr %t17, { ptr, i64, i64 } %t27) + store { ptr, i64, i64 } %t27, ptr %a29 + call void @finch_str_drop(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t31, { ptr, i64, i64 } { ptr @.str.1720, i64 0, i64 0 }) + store { ptr, i64, i64 } %t32, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1721, i64 10, i64 0 }, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1722, i64 6, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t44, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t44, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.1723, i64 6, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t55, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t34, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t61, ptr %a63 + call void @finch_str_drop(ptr %a63) + call void @finch_str_drop(ptr %a33) + call void @finch_str_drop(ptr %a30) + call void @finch_str_drop(ptr %a16) + ret { ptr, i64, i64 } %t62 +} + +define internal void @finch.gen.emitPrint(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i1 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca i1, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store i1 %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load %S.ast.Type, ptr %a3 + %t12 = call i1 @finch.gen.isSigned(%S.ast.Type %t11) + br i1 %t12, label %then2892, label %else2893 +then2892: + %t13 = load ptr, ptr %a1 + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a2 + %t16 = load %S.ast.Type, ptr %a3 + %t17 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1726, i64 3, i64 0 }) + %t18 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t14, { ptr, i64, i64 } %t15, %S.ast.Type %t16, %S.ast.Type %t17) + store %S.ast.Type %t17, ptr %a19 + call void @finch.drop.S_ast_Type(ptr %a19) + store { ptr, i64, i64 } { ptr @.str.1725, i64 4, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + call void @finch.gen.printf(ptr %t13, { ptr, i64, i64 } { ptr @.str.1724, i64 4, i64 0 }, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_drop(ptr %a25) + br label %endif2894 +else2893: + %t26 = load %S.ast.Type, ptr %a3 + %t27 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t26) + br i1 %t27, label %then2895, label %else2896 +then2895: + %t28 = load ptr, ptr %a1 + %t29 = load ptr, ptr %a1 + %t30 = load { ptr, i64, i64 }, ptr %a2 + %t31 = load %S.ast.Type, ptr %a3 + %t32 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1729, i64 3, i64 0 }) + %t33 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t29, { ptr, i64, i64 } %t30, %S.ast.Type %t31, %S.ast.Type %t32) + store %S.ast.Type %t32, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + store { ptr, i64, i64 } { ptr @.str.1728, i64 4, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + call void @finch.gen.printf(ptr %t28, { ptr, i64, i64 } { ptr @.str.1727, i64 4, i64 0 }, { ptr, i64, i64 } %t39) + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch_str_drop(ptr %a40) + br label %endif2897 +else2896: + %t41 = load %S.ast.Type, ptr %a3 + %t42 = call i1 @finch.gen.isFloat(%S.ast.Type %t41) + br i1 %t42, label %then2898, label %else2899 +then2898: + %t43 = load ptr, ptr %a1 + %t44 = load ptr, ptr %a1 + %t45 = load { ptr, i64, i64 }, ptr %a2 + %t46 = load %S.ast.Type, ptr %a3 + %t47 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1732, i64 5, i64 0 }) + %t48 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t44, { ptr, i64, i64 } %t45, %S.ast.Type %t46, %S.ast.Type %t47) + store %S.ast.Type %t47, ptr %a49 + call void @finch.drop.S_ast_Type(ptr %a49) + store { ptr, i64, i64 } { ptr @.str.1731, i64 7, i64 0 }, ptr %a51 + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + call void @finch.gen.printf(ptr %t43, { ptr, i64, i64 } { ptr @.str.1730, i64 2, i64 0 }, { ptr, i64, i64 } %t54) + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_drop(ptr %a55) + br label %endif2900 +else2899: + %t56 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.1733, i64 4, i64 0 }, ptr %a58 + %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) + %t60 = icmp ne i32 %t59, 0 + br i1 %t60, label %then2901, label %else2902 +then2901: + %t61 = load ptr, ptr %a1 + %t62 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1734, i64 8, i64 0 }, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1735, i64 7, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = call { ptr, i64, i64 } @finch.gen.op(ptr %t61, { ptr, i64, i64 } %t71) + store { ptr, i64, i64 } %t71, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t72, ptr %a74 + %t75 = load i1, ptr %a4 + br i1 %t75, label %then2904, label %else2905 +then2904: + %t76 = load ptr, ptr %a1 + %t77 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1737, i64 4, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a78 + call void @finch.gen.printf(ptr %t76, { ptr, i64, i64 } { ptr @.str.1736, i64 4, i64 0 }, { ptr, i64, i64 } %t81) + store { ptr, i64, i64 } %t81, ptr %a82 + call void @finch_str_drop(ptr %a82) + br label %endif2906 +else2905: + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1739, i64 4, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a85 + call void @finch.gen.printf(ptr %t83, { ptr, i64, i64 } { ptr @.str.1738, i64 2, i64 0 }, { ptr, i64, i64 } %t88) + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_drop(ptr %a89) + br label %endif2906 +endif2906: + call void @finch_str_drop(ptr %a74) + br label %endif2903 +else2902: + %t90 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t90, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.1740, i64 4, i64 0 }, ptr %a92 + %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) + %t94 = icmp ne i32 %t93, 0 + br i1 %t94, label %then2907, label %else2908 +then2907: + %t95 = load ptr, ptr %a1 + %t96 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t95, { ptr, i64, i64 } { ptr @.str.1741, i64 4, i64 0 }) + store { ptr, i64, i64 } %t96, ptr %a97 + %t98 = load ptr, ptr %a1 + %t99 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t98, { ptr, i64, i64 } { ptr @.str.1742, i64 5, i64 0 }) + store { ptr, i64, i64 } %t99, ptr %a100 + %t101 = load ptr, ptr %a1 + %t102 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1743, i64 10, i64 0 }, ptr %a104 + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.1744, i64 6, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t111, ptr %a114 + store { ptr, i64, i64 } %t112, ptr %a115 + call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) + store { ptr, i64, i64 } %t111, ptr %a116 + call void @finch_str_drop(ptr %a116) + %t117 = load { ptr, i64, i64 }, ptr %a113 + store { ptr, i64, i64 } %t117, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.1745, i64 6, i64 0 }, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + %t123 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t122, ptr %a125 + store { ptr, i64, i64 } %t123, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t122, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t101, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t128, ptr %a130 + call void @finch_str_drop(ptr %a130) + store { ptr, i64, i64 } %t129, ptr %a131 + %t132 = load ptr, ptr %a1 + %t133 = load { ptr, i64, i64 }, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.1747, i64 4, i64 0 }, ptr %a135 + store { ptr, i64, i64 } %t133, ptr %a136 + call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a134 + call void @finch.gen.printf(ptr %t132, { ptr, i64, i64 } { ptr @.str.1746, i64 2, i64 0 }, { ptr, i64, i64 } %t137) + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_drop(ptr %a138) + call void @finch_str_drop(ptr %a131) + call void @finch_str_drop(ptr %a100) + call void @finch_str_drop(ptr %a97) + br label %endif2909 +else2908: + %t139 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t139, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.1748, i64 3, i64 0 }, ptr %a141 + %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) + %t143 = icmp ne i32 %t142, 0 + br i1 %t143, label %then2910, label %else2911 +then2910: + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1749, i64 31, i64 0 }, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + %t149 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t149, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.1750, i64 3, i64 0 }, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + store { ptr, i64, i64 } %t149, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a150 + %t155 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t154) + store { ptr, i64, i64 } %t154, ptr %a156 + call void @finch_str_drop(ptr %a156) + store { ptr, i64, i64 } %t155, ptr %a157 + %t158 = load ptr, ptr %a1 + %t159 = load { ptr, i64, i64 }, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.1751, i64 10, i64 0 }, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.1752, i64 7, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = call { ptr, i64, i64 } @finch.gen.op(ptr %t158, { ptr, i64, i64 } %t168) + store { ptr, i64, i64 } %t168, ptr %a170 + call void @finch_str_drop(ptr %a170) + store { ptr, i64, i64 } %t169, ptr %a171 + %t172 = load ptr, ptr %a1 + %t173 = load { ptr, i64, i64 }, ptr %a2 + %t174 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t172, { ptr, i64, i64 } %t173) + store { ptr, i64, i64 } %t174, ptr %a175 + %t176 = load i1, ptr %a4 + br i1 %t176, label %then2913, label %else2914 +then2913: + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.1754, i64 4, i64 0 }, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.1755, i64 6, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = load { ptr, i64, i64 }, ptr %a175 + store { ptr, i64, i64 } %t187, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t187, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load { ptr, i64, i64 }, ptr %a189 + call void @finch.gen.printf(ptr %t177, { ptr, i64, i64 } { ptr @.str.1753, i64 6, i64 0 }, { ptr, i64, i64 } %t193) + store { ptr, i64, i64 } %t193, ptr %a194 + call void @finch_str_drop(ptr %a194) + br label %endif2915 +else2914: + %t195 = load ptr, ptr %a1 + %t196 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.1757, i64 4, i64 0 }, ptr %a198 + store { ptr, i64, i64 } %t196, ptr %a199 + call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a197 + store { ptr, i64, i64 } %t200, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.1758, i64 6, i64 0 }, ptr %a203 + call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) + store { ptr, i64, i64 } %t200, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a201 + %t206 = load { ptr, i64, i64 }, ptr %a175 + store { ptr, i64, i64 } %t205, ptr %a208 + store { ptr, i64, i64 } %t206, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t205, ptr %a210 + call void @finch_str_drop(ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a207 + call void @finch.gen.printf(ptr %t195, { ptr, i64, i64 } { ptr @.str.1756, i64 4, i64 0 }, { ptr, i64, i64 } %t211) + store { ptr, i64, i64 } %t211, ptr %a212 + call void @finch_str_drop(ptr %a212) + br label %endif2915 +endif2915: + call void @finch_str_drop(ptr %a175) + call void @finch_str_drop(ptr %a171) + call void @finch_str_drop(ptr %a157) + br label %endif2912 +else2911: + %t213 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t213, ptr %a214 + store { ptr, i64, i64 } { ptr @.str.1759, i64 3, i64 0 }, ptr %a215 + %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) + %t217 = icmp ne i32 %t216, 0 + br i1 %t217, label %then2916, label %else2917 +then2916: + %t218 = load ptr, ptr %a1 + %t219 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1760, i64 12, i64 0 }, ptr %a221 + store { ptr, i64, i64 } %t219, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a220 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.1761, i64 6, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t218, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t228, ptr %a230 + call void @finch_str_drop(ptr %a230) + store { ptr, i64, i64 } %t229, ptr %a231 + %t232 = load ptr, ptr %a1 + %t233 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t232, { ptr, i64, i64 } { ptr @.str.1762, i64 8, i64 0 }) + store { ptr, i64, i64 } %t233, ptr %a234 + %t235 = load ptr, ptr %a1 + %t236 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t235, { ptr, i64, i64 } { ptr @.str.1763, i64 8, i64 0 }) + store { ptr, i64, i64 } %t236, ptr %a237 + %t238 = load ptr, ptr %a1 + %t239 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t238, { ptr, i64, i64 } { ptr @.str.1764, i64 8, i64 0 }) + store { ptr, i64, i64 } %t239, ptr %a240 + %t241 = load ptr, ptr %a1 + %t242 = load { ptr, i64, i64 }, ptr %a231 + %t243 = load { ptr, i64, i64 }, ptr %a234 + %t244 = load { ptr, i64, i64 }, ptr %a237 + call void @finch.gen.condBr(ptr %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t244) + %t245 = load ptr, ptr %a1 + %t246 = load { ptr, i64, i64 }, ptr %a234 + call void @finch.gen.label(ptr %t245, { ptr, i64, i64 } %t246) + %t247 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t247, { ptr, i64, i64 } { ptr @.str.1765, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1766, i64 0, i64 0 }) + %t248 = load ptr, ptr %a1 + %t249 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.br(ptr %t248, { ptr, i64, i64 } %t249) + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a237 + call void @finch.gen.label(ptr %t250, { ptr, i64, i64 } %t251) + %t252 = load ptr, ptr %a1 + %t253 = load ptr, ptr %a1 + %t254 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1769, i64 13, i64 0 }, ptr %a256 + store { ptr, i64, i64 } %t254, ptr %a257 + call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) + %t258 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t258, ptr %a260 + store { ptr, i64, i64 } { ptr @.str.1770, i64 7, i64 0 }, ptr %a261 + call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) + store { ptr, i64, i64 } %t258, ptr %a262 + call void @finch_str_drop(ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a259 + %t264 = call { ptr, i64, i64 } @finch.gen.op(ptr %t253, { ptr, i64, i64 } %t263) + store { ptr, i64, i64 } %t263, ptr %a265 + call void @finch_str_drop(ptr %a265) + store { ptr, i64, i64 } { ptr @.str.1768, i64 4, i64 0 }, ptr %a267 + store { ptr, i64, i64 } %t264, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t264, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + call void @finch.gen.printf(ptr %t252, { ptr, i64, i64 } { ptr @.str.1767, i64 6, i64 0 }, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load ptr, ptr %a1 + %t273 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.br(ptr %t272, { ptr, i64, i64 } %t273) + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.label(ptr %t274, { ptr, i64, i64 } %t275) + call void @finch_str_drop(ptr %a240) + call void @finch_str_drop(ptr %a237) + call void @finch_str_drop(ptr %a234) + call void @finch_str_drop(ptr %a231) + br label %endif2918 +else2917: + %t276 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t276, ptr %a277 + store { ptr, i64, i64 } { ptr @.str.1771, i64 4, i64 0 }, ptr %a278 + %t279 = call i32 @finch_str_eq(ptr %a277, ptr %a278) + %t280 = icmp ne i32 %t279, 0 + br i1 %t280, label %then2919, label %else2920 +then2919: + %t281 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t281, { ptr, i64, i64 } { ptr @.str.1772, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1773, i64 0, i64 0 }) + br label %endif2921 +else2920: + %t282 = load ptr, ptr %a1 + %t283 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t282, { ptr, i64, i64 } { ptr @.str.1774, i64 17, i64 0 }) + store { ptr, i64, i64 } %t283, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = load { ptr, i64, i64 }, ptr %a284 + call void @finch.gen.store(ptr %t285, { ptr, i64, i64 } { ptr @.str.1775, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.1776, i64 15, i64 0 }, { ptr, i64, i64 } %t286) + %t287 = load ptr, ptr %a1 + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = load { ptr, i64, i64 }, ptr %a2 + %t290 = load %S.ast.Type, ptr %a3 + %t291 = load i1, ptr %a4 + call void @finch.gen.emitFormat(ptr %t287, { ptr, i64, i64 } %t288, { ptr, i64, i64 } %t289, %S.ast.Type %t290, i1 %t291) + %t292 = load ptr, ptr %a1 + %t293 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } { ptr @.str.1777, i64 31, i64 0 }, ptr %a295 + store { ptr, i64, i64 } %t293, ptr %a296 + call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a294 + store { ptr, i64, i64 } %t297, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.1778, i64 1, i64 0 }, ptr %a300 + call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) + store { ptr, i64, i64 } %t297, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a298 + call void @finch.gen.emit(ptr %t292, { ptr, i64, i64 } %t302) + store { ptr, i64, i64 } %t302, ptr %a303 + call void @finch_str_drop(ptr %a303) + call void @finch_str_drop(ptr %a284) + br label %endif2921 +endif2921: + br label %endif2918 +endif2918: + br label %endif2912 +endif2912: + br label %endif2909 +endif2909: + br label %endif2903 +endif2903: + br label %endif2900 +endif2900: + br label %endif2897 +endif2897: + br label %endif2894 +endif2894: + call void @finch_str_drop(ptr %a10) + ret void +} + +define internal void @finch.gen.bufText(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1779, i64 29, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t5, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t9, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1780, i64 6, i64 0 }, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t9, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a10 + %t15 = load ptr, ptr %a1 + %t16 = load { ptr, i64, i64 }, ptr %a3 + %t17 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t15, { ptr, i64, i64 } %t16) + store { ptr, i64, i64 } %t14, ptr %a19 + store { ptr, i64, i64 } %t17, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t14, ptr %a21 + call void @finch_str_drop(ptr %a21) + store { ptr, i64, i64 } %t17, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1781, i64 6, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t30 = load i64, ptr %t29 + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t28, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t28, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.1782, i64 1, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.emit(ptr %t4, { ptr, i64, i64 } %t43) + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_drop(ptr %a44) + ret void +} + +define internal void @finch.gen.emitFormat(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca i1, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca %S.ast.Type, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca %S.ast.Type, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca %S.ast.Type, align 16 + %a213 = alloca %S.ast.Type, align 16 + %a217 = alloca %S.gen.Val, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca %S.ast.Type, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a312 = alloca %S.gen.Val, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + call void @finch_str_copy(ptr %a9, ptr %a8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1783, i64 1, i64 0 }, ptr %a12 + %t13 = load i1, ptr %a5 + br i1 %t13, label %then2922, label %endif2924 +then2922: + %t14 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1784, i64 1, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_drop(ptr %a15) + br label %endif2924 +endif2924: + %t16 = load %S.ast.Type, ptr %a4 + %t17 = call i1 @finch.gen.isSigned(%S.ast.Type %t16) + br i1 %t17, label %then2925, label %else2926 +then2925: + %t18 = load ptr, ptr %a1 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1785, i64 29, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1786, i64 6, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + %t29 = load ptr, ptr %a1 + %t30 = load { ptr, i64, i64 }, ptr %a3 + %t31 = load %S.ast.Type, ptr %a4 + %t32 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1787, i64 3, i64 0 }) + %t33 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t29, { ptr, i64, i64 } %t30, %S.ast.Type %t31, %S.ast.Type %t32) + store %S.ast.Type %t32, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + store { ptr, i64, i64 } %t28, ptr %a36 + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t28, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t33, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1788, i64 1, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + call void @finch.gen.emit(ptr %t18, { ptr, i64, i64 } %t45) + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch_str_drop(ptr %a46) + br label %endif2927 +else2926: + %t47 = load %S.ast.Type, ptr %a4 + %t48 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t47) + br i1 %t48, label %then2928, label %else2929 +then2928: + %t49 = load ptr, ptr %a1 + %t50 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1789, i64 30, i64 0 }, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.1790, i64 6, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + %t60 = load ptr, ptr %a1 + %t61 = load { ptr, i64, i64 }, ptr %a3 + %t62 = load %S.ast.Type, ptr %a4 + %t63 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1791, i64 3, i64 0 }) + %t64 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t60, { ptr, i64, i64 } %t61, %S.ast.Type %t62, %S.ast.Type %t63) + store %S.ast.Type %t63, ptr %a65 + call void @finch.drop.S_ast_Type(ptr %a65) + store { ptr, i64, i64 } %t59, ptr %a67 + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t59, ptr %a69 + call void @finch_str_drop(ptr %a69) + store { ptr, i64, i64 } %t64, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.1792, i64 1, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.emit(ptr %t49, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a77 + call void @finch_str_drop(ptr %a77) + br label %endif2930 +else2929: + %t78 = load %S.ast.Type, ptr %a4 + %t79 = call i1 @finch.gen.isFloat(%S.ast.Type %t78) + br i1 %t79, label %then2931, label %else2932 +then2931: + %t80 = load ptr, ptr %a1 + %t81 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1793, i64 31, i64 0 }, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1794, i64 9, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = load ptr, ptr %a1 + %t92 = load { ptr, i64, i64 }, ptr %a3 + %t93 = load %S.ast.Type, ptr %a4 + %t94 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1795, i64 5, i64 0 }) + %t95 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t91, { ptr, i64, i64 } %t92, %S.ast.Type %t93, %S.ast.Type %t94) + store %S.ast.Type %t94, ptr %a96 + call void @finch.drop.S_ast_Type(ptr %a96) + store { ptr, i64, i64 } %t90, ptr %a98 + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) + store { ptr, i64, i64 } %t90, ptr %a100 + call void @finch_str_drop(ptr %a100) + store { ptr, i64, i64 } %t95, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t102, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.1796, i64 1, i64 0 }, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + store { ptr, i64, i64 } %t102, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.gen.emit(ptr %t80, { ptr, i64, i64 } %t107) + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_drop(ptr %a108) + br label %endif2933 +else2932: + %t109 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t109, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.1797, i64 4, i64 0 }, ptr %a111 + %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) + %t113 = icmp ne i32 %t112, 0 + br i1 %t113, label %then2934, label %else2935 +then2934: + %t114 = load ptr, ptr %a1 + %t115 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1798, i64 30, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.1799, i64 5, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t124, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + store { ptr, i64, i64 } %t130, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.1800, i64 6, i64 0 }, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t130, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + %t136 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t135, ptr %a138 + store { ptr, i64, i64 } %t136, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t135, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t141, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.1801, i64 1, i64 0 }, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + call void @finch.gen.emit(ptr %t114, { ptr, i64, i64 } %t146) + store { ptr, i64, i64 } %t146, ptr %a147 + call void @finch_str_drop(ptr %a147) + br label %endif2936 +else2935: + %t148 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.1802, i64 4, i64 0 }, ptr %a150 + %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) + %t152 = icmp ne i32 %t151, 0 + br i1 %t152, label %then2937, label %else2938 +then2937: + %t153 = load ptr, ptr %a1 + %t154 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1803, i64 30, i64 0 }, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t158, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.1804, i64 6, i64 0 }, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t158, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a159 + %t164 = load ptr, ptr %a1 + %t165 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1805, i64 8, i64 0 }, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t169, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.1806, i64 7, i64 0 }, ptr %a172 + call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) + store { ptr, i64, i64 } %t169, ptr %a173 + call void @finch_str_drop(ptr %a173) + %t174 = load { ptr, i64, i64 }, ptr %a170 + %t175 = call { ptr, i64, i64 } @finch.gen.op(ptr %t164, { ptr, i64, i64 } %t174) + store { ptr, i64, i64 } %t174, ptr %a176 + call void @finch_str_drop(ptr %a176) + store { ptr, i64, i64 } %t163, ptr %a178 + store { ptr, i64, i64 } %t175, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t163, ptr %a180 + call void @finch_str_drop(ptr %a180) + store { ptr, i64, i64 } %t175, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a177 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.1807, i64 1, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + call void @finch.gen.emit(ptr %t153, { ptr, i64, i64 } %t187) + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch_str_drop(ptr %a188) + br label %endif2939 +else2938: + %t189 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t189, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.1808, i64 3, i64 0 }, ptr %a191 + %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) + %t193 = icmp ne i32 %t192, 0 + br i1 %t193, label %then2940, label %else2941 +then2940: + %t194 = load ptr, ptr %a1 + %t195 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1809, i64 29, i64 0 }, ptr %a197 + store { ptr, i64, i64 } %t195, ptr %a198 + call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } %t199, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.1810, i64 6, i64 0 }, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t199, ptr %a203 + call void @finch_str_drop(ptr %a203) + %t204 = load { ptr, i64, i64 }, ptr %a200 + %t205 = load ptr, ptr %a1 + %t206 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t206, ptr %a207 + call void @finch_str_copy(ptr %a208, ptr %a207) + %t209 = load { ptr, i64, i64 }, ptr %a208 + %t210 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t209, 0 + %t211 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t211, ptr %a212 + call void @finch.copy.S_ast_Type(ptr %a213, ptr %a212) + %t214 = load %S.ast.Type, ptr %a213 + %t215 = insertvalue %S.gen.Val %t210, %S.ast.Type %t214, 1 + %t216 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t205, %S.gen.Val %t215) + store %S.gen.Val %t215, ptr %a217 + call void @finch.drop.S_gen_Val(ptr %a217) + store { ptr, i64, i64 } %t204, ptr %a219 + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t204, ptr %a221 + call void @finch_str_drop(ptr %a221) + store { ptr, i64, i64 } %t216, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.1811, i64 6, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t228, ptr %a231 + store { ptr, i64, i64 } %t229, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + store { ptr, i64, i64 } %t228, ptr %a233 + call void @finch_str_drop(ptr %a233) + %t234 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t234, ptr %a236 + store { ptr, i64, i64 } { ptr @.str.1812, i64 1, i64 0 }, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t234, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a235 + call void @finch.gen.emit(ptr %t194, { ptr, i64, i64 } %t239) + store { ptr, i64, i64 } %t239, ptr %a240 + call void @finch_str_drop(ptr %a240) + br label %endif2942 +else2941: + %t241 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t241, ptr %a242 + store { ptr, i64, i64 } { ptr @.str.1813, i64 3, i64 0 }, ptr %a243 + %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) + %t245 = icmp ne i32 %t244, 0 + br label %logic.from2943 +logic.from2943: + br i1 %t245, label %logic.end2945, label %logic.rhs2944 +logic.rhs2944: + %t246 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t246, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.1814, i64 4, i64 0 }, ptr %a248 + %t249 = call i32 @finch_str_eq(ptr %a247, ptr %a248) + %t250 = icmp ne i32 %t249, 0 + br label %logic.rend2946 +logic.rend2946: + br label %logic.end2945 +logic.end2945: + %t251 = phi i1 [ true, %logic.from2943 ], [ %t250, %logic.rend2946 ] + br i1 %t251, label %then2947, label %else2948 +then2947: + %t252 = load ptr, ptr %a1 + %t253 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1815, i64 29, i64 0 }, ptr %a255 + store { ptr, i64, i64 } %t253, ptr %a256 + call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) + %t257 = load { ptr, i64, i64 }, ptr %a254 + store { ptr, i64, i64 } %t257, ptr %a259 + store { ptr, i64, i64 } { ptr @.str.1816, i64 6, i64 0 }, ptr %a260 + call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) + store { ptr, i64, i64 } %t257, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a258 + %t263 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t262, ptr %a265 + store { ptr, i64, i64 } %t263, ptr %a266 + call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) + store { ptr, i64, i64 } %t262, ptr %a267 + call void @finch_str_drop(ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t268, ptr %a270 + store { ptr, i64, i64 } { ptr @.str.1817, i64 1, i64 0 }, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t268, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + call void @finch.gen.emit(ptr %t252, { ptr, i64, i64 } %t273) + store { ptr, i64, i64 } %t273, ptr %a274 + call void @finch_str_drop(ptr %a274) + br label %endif2949 +else2948: + %t275 = load ptr, ptr %a1 + %t276 = load ptr, ptr %a1 + %t277 = load %S.ast.Type, ptr %a4 + %t278 = call { ptr, i64, i64 } @finch.gen.formatFn(ptr %t276, %S.ast.Type %t277) + store { ptr, i64, i64 } { ptr @.str.1818, i64 10, i64 0 }, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t283, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.1819, i64 5, i64 0 }, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t288, ptr %a291 + store { ptr, i64, i64 } %t289, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + store { ptr, i64, i64 } %t288, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t294, ptr %a296 + store { ptr, i64, i64 } { ptr @.str.1820, i64 6, i64 0 }, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + store { ptr, i64, i64 } %t294, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a295 + %t300 = load ptr, ptr %a1 + %t301 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_copy(ptr %a303, ptr %a302) + %t304 = load { ptr, i64, i64 }, ptr %a303 + %t305 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0 + %t306 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t306, ptr %a307 + call void @finch.copy.S_ast_Type(ptr %a308, ptr %a307) + %t309 = load %S.ast.Type, ptr %a308 + %t310 = insertvalue %S.gen.Val %t305, %S.ast.Type %t309, 1 + %t311 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t300, %S.gen.Val %t310) + store %S.gen.Val %t310, ptr %a312 + call void @finch.drop.S_gen_Val(ptr %a312) + store { ptr, i64, i64 } %t299, ptr %a314 + store { ptr, i64, i64 } %t311, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + store { ptr, i64, i64 } %t299, ptr %a316 + call void @finch_str_drop(ptr %a316) + store { ptr, i64, i64 } %t311, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load { ptr, i64, i64 }, ptr %a313 + store { ptr, i64, i64 } %t318, ptr %a320 + store { ptr, i64, i64 } { ptr @.str.1821, i64 1, i64 0 }, ptr %a321 + call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) + store { ptr, i64, i64 } %t318, ptr %a322 + call void @finch_str_drop(ptr %a322) + %t323 = load { ptr, i64, i64 }, ptr %a319 + call void @finch.gen.emit(ptr %t275, { ptr, i64, i64 } %t323) + store { ptr, i64, i64 } %t323, ptr %a324 + call void @finch_str_drop(ptr %a324) + br label %endif2949 +endif2949: + br label %endif2942 +endif2942: + br label %endif2939 +endif2939: + br label %endif2936 +endif2936: + br label %endif2933 +endif2933: + br label %endif2930 +endif2930: + br label %endif2927 +endif2927: + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a11) + ret void +} + +define internal void @finch.copy.S_gen_EnumDef(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.EnumDef, ptr %src + store %S.gen.EnumDef %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_int(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.drop.S_gen_EnumDef(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_int(ptr %t4) + ret void +} + +define internal void @finch.copy.S_gen_SumDef(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.SumDef, ptr %src + store %S.gen.SumDef %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_int(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_int(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_S_ast_Node(ptr %t12, ptr %t13) + ret void +} + +define internal void @finch.drop.S_gen_SumDef(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_int(ptr %t4) + %t5 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_int(ptr %t5) + %t6 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_S_ast_Node(ptr %t6) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.formatFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.ast.Type, align 16 + %a47 = alloca %S.ast.Type, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca %S.gen.EnumDef, align 16 + %a174 = alloca %S.gen.EnumDef, align 16 + %a176 = alloca %S.gen.EnumDef, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca i64, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca i64, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca %S.gen.SumDef, align 16 + %a538 = alloca %S.gen.SumDef, align 16 + %a540 = alloca %S.gen.SumDef, align 16 + %a556 = alloca %S.gen.StructDef, align 16 + %a557 = alloca %S.gen.StructDef, align 16 + %a559 = alloca %S.gen.StructDef, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca i64, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a653 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a656 = alloca { ptr, i64, i64 }, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a663 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a684 = alloca { ptr, i64, i64 }, align 16 + %a686 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca i64, align 16 + %a731 = alloca i64, align 16 + %a747 = alloca i64, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca %S.gen.StructDef, align 16 + %a839 = alloca %S.gen.StructDef, align 16 + %a841 = alloca %S.gen.StructDef, align 16 + %a845 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a850 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a853 = alloca { ptr, i64, i64 }, align 16 + %a857 = alloca i64, align 16 + %a860 = alloca { ptr, i64, i64 }, align 16 + %a864 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a880 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a882 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a887 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a891 = alloca { ptr, i64, i64 }, align 16 + %a892 = alloca { ptr, i64, i64 }, align 16 + %a893 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a904 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a907 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a914 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a950 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a955 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.1822, i64 14, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2950, label %ok2951 +panic2950: + call void @finch_panic(ptr @.str.1823, i64 1126, ptr @.str.1824) + unreachable +ok2951: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then2952, label %endif2954 +then2952: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif2954: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2955, label %ok2956 +panic2955: + call void @finch_panic(ptr @.str.1825, i64 1129, ptr @.str.1826) + unreachable +ok2956: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1827, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then2957, label %else2958 +then2957: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range2960, label %inrange2961 +range2960: + call void @finch_panic_index(ptr @.str.1828, i64 1132, i64 0, i64 %t41) + unreachable +inrange2961: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 + %t45 = load %S.ast.Type, ptr %t44 + store %S.ast.Type %t45, ptr %a46 + call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) + %t48 = load %S.ast.Type, ptr %a47 + store %S.ast.Type %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = call { ptr, i64, i64 } @finch.gen.load(ptr %t50, { ptr, i64, i64 } { ptr @.str.1829, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1830, i64 2, i64 0 }) + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = load ptr, ptr %a1 + %t54 = load ptr, ptr %a1 + %t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t54, { ptr, i64, i64 } { ptr @.str.1832, i64 62, i64 0 }) + %t56 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1831, i64 3, i64 0 }, { ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t55, ptr %a57 + call void @finch_str_drop(ptr %a57) + store { ptr, i64, i64 } %t56, ptr %a58 + %t59 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t59, { ptr, i64, i64 } { ptr @.str.1833, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1834, i64 1, i64 0 }) + %t60 = load ptr, ptr %a1 + %t61 = load { ptr, i64, i64 }, ptr %a58 + %t62 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t60, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t62, ptr %a63 + %t64 = load ptr, ptr %a1 + %t65 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t64, { ptr, i64, i64 } { ptr @.str.1835, i64 3, i64 0 }) + store { ptr, i64, i64 } %t65, ptr %a66 + %t67 = load ptr, ptr %a1 + %t68 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t67, { ptr, i64, i64 } { ptr @.str.1836, i64 4, i64 0 }) + store { ptr, i64, i64 } %t68, ptr %a69 + %t70 = load ptr, ptr %a1 + %t71 = load { ptr, i64, i64 }, ptr %a63 + %t72 = extractvalue { ptr, i64, i64 } %t71, 1 + %t73 = icmp uge i64 3, %t72 + br i1 %t73, label %range2962, label %inrange2963 +range2962: + call void @finch_panic_index(ptr @.str.1838, i64 1139, i64 3, i64 %t72) + unreachable +inrange2963: + %t74 = extractvalue { ptr, i64, i64 } %t71, 0 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 3 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } { ptr @.str.1837, i64 13, i64 0 }, ptr %a78 + store { ptr, i64, i64 } %t76, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.1839, i64 3, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = call { ptr, i64, i64 } @finch.gen.op(ptr %t70, { ptr, i64, i64 } %t85) + store { ptr, i64, i64 } %t85, ptr %a87 + call void @finch_str_drop(ptr %a87) + store { ptr, i64, i64 } %t86, ptr %a88 + %t89 = load ptr, ptr %a1 + %t90 = load { ptr, i64, i64 }, ptr %a88 + %t91 = load { ptr, i64, i64 }, ptr %a66 + %t92 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.condBr(ptr %t89, { ptr, i64, i64 } %t90, { ptr, i64, i64 } %t91, { ptr, i64, i64 } %t92) + %t93 = load ptr, ptr %a1 + %t94 = load { ptr, i64, i64 }, ptr %a66 + call void @finch.gen.label(ptr %t93, { ptr, i64, i64 } %t94) + %t95 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t95, { ptr, i64, i64 } { ptr @.str.1840, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1841, i64 2, i64 0 }) + %t96 = load ptr, ptr %a1 + %t97 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.br(ptr %t96, { ptr, i64, i64 } %t97) + %t98 = load ptr, ptr %a1 + %t99 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.label(ptr %t98, { ptr, i64, i64 } %t99) + %t100 = load ptr, ptr %a1 + %t101 = load ptr, ptr %a1 + %t102 = load %S.ast.Type, ptr %a49 + %t103 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t101, %S.ast.Type %t102) + store { ptr, i64, i64 } { ptr @.str.1842, i64 23, i64 0 }, ptr %a105 + store { ptr, i64, i64 } %t103, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + store { ptr, i64, i64 } %t108, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.1843, i64 6, i64 0 }, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t108, ptr %a112 + call void @finch_str_drop(ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a109 + %t114 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t113, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t113, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.1844, i64 6, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = load { ptr, i64, i64 }, ptr %a63 + %t126 = extractvalue { ptr, i64, i64 } %t125, 1 + %t127 = icmp uge i64 3, %t126 + br i1 %t127, label %range2964, label %inrange2965 +range2964: + call void @finch_panic_index(ptr @.str.1845, i64 1145, i64 3, i64 %t126) + unreachable +inrange2965: + %t128 = extractvalue { ptr, i64, i64 } %t125, 0 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i64 3 + %t130 = load { ptr, i64, i64 }, ptr %t129 + store { ptr, i64, i64 } %t124, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t124, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + %t136 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t135) + store { ptr, i64, i64 } %t135, ptr %a137 + call void @finch_str_drop(ptr %a137) + store { ptr, i64, i64 } %t136, ptr %a138 + %t139 = load ptr, ptr %a1 + %t140 = load ptr, ptr %a1 + %t141 = load ptr, ptr %a1 + %t142 = load %S.ast.Type, ptr %a49 + %t143 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t141, %S.ast.Type %t142) + %t144 = load { ptr, i64, i64 }, ptr %a138 + %t145 = call { ptr, i64, i64 } @finch.gen.load(ptr %t140, { ptr, i64, i64 } %t143, { ptr, i64, i64 } %t144) + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_drop(ptr %a146) + %t147 = load %S.ast.Type, ptr %a49 + call void @finch.gen.emitFormat(ptr %t139, { ptr, i64, i64 } { ptr @.str.1846, i64 4, i64 0 }, { ptr, i64, i64 } %t145, %S.ast.Type %t147, i1 true) + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_drop(ptr %a148) + %t149 = load ptr, ptr %a1 + %t150 = load { ptr, i64, i64 }, ptr %a63 + call void @finch.gen.loopEnd(ptr %t149, { ptr, i64, i64 } %t150) + %t151 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t151, { ptr, i64, i64 } { ptr @.str.1847, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1848, i64 1, i64 0 }) + call void @finch_str_drop(ptr %a138) + call void @finch_str_drop(ptr %a88) + call void @finch_str_drop(ptr %a69) + call void @finch_str_drop(ptr %a66) + call void @finch.drop.arr_str(ptr %a63) + call void @finch_str_drop(ptr %a58) + call void @finch_str_drop(ptr %a52) + call void @finch.drop.S_ast_Type(ptr %a49) + br label %endif2959 +else2958: + %t152 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t153 = load { ptr, i64, i64 }, ptr %t152 + store { ptr, i64, i64 } %t153, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.1849, i64 4, i64 0 }, ptr %a155 + %t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155) + %t157 = icmp ne i32 %t156, 0 + br i1 %t157, label %then2966, label %else2967 +then2966: + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic2969, label %ok2970 +panic2969: + call void @finch_panic(ptr @.str.1850, i64 1151, ptr @.str.1851) + unreachable +ok2970: + %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 21 + %t161 = load ptr, ptr %a1 + %t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t165 = load { ptr, i64, i64 }, ptr %t164 + %t166 = call i64 @finch.gen.findEnum(ptr %t161, { ptr, i64, i64 } %t163, { ptr, i64, i64 } %t165) + %t167 = load { ptr, i64, i64 }, ptr %t160 + %t168 = extractvalue { ptr, i64, i64 } %t167, 1 + %t169 = icmp uge i64 %t166, %t168 + br i1 %t169, label %range2971, label %inrange2972 +range2971: + call void @finch_panic_index(ptr @.str.1852, i64 1151, i64 %t166, i64 %t168) + unreachable +inrange2972: + %t170 = extractvalue { ptr, i64, i64 } %t167, 0 + %t171 = getelementptr inbounds %S.gen.EnumDef, ptr %t170, i64 %t166 + %t172 = load %S.gen.EnumDef, ptr %t171 + store %S.gen.EnumDef %t172, ptr %a173 + call void @finch.copy.S_gen_EnumDef(ptr %a174, ptr %a173) + %t175 = load %S.gen.EnumDef, ptr %a174 + store %S.gen.EnumDef %t175, ptr %a176 + %t177 = load ptr, ptr %a1 + %t178 = call { ptr, i64, i64 } @finch.gen.load(ptr %t177, { ptr, i64, i64 } { ptr @.str.1853, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1854, i64 2, i64 0 }) + store { ptr, i64, i64 } %t178, ptr %a179 + %t180 = load ptr, ptr %a1 + %t181 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t180, { ptr, i64, i64 } { ptr @.str.1855, i64 10, i64 0 }) + store { ptr, i64, i64 } %t181, ptr %a182 + %t183 = load ptr, ptr %a1 + %t184 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t183, { ptr, i64, i64 } { ptr @.str.1856, i64 9, i64 0 }) + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } zeroinitializer, ptr %a186 + store { ptr, i64, i64 } zeroinitializer, ptr %a187 + %t188 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 + %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 + %t190 = load i64, ptr %t189 + store i64 0, ptr %a191 + br label %for.cond2973 +for.cond2973: + %t192 = load i64, ptr %a191 + %t193 = icmp slt i64 %t192, %t190 + br i1 %t193, label %for.body2974, label %for.end2976 +for.body2974: + %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a187, i32 0, i32 1 + %t195 = load ptr, ptr %a1 + %t196 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t195, { ptr, i64, i64 } { ptr @.str.1857, i64 6, i64 0 }) + %t197 = load i64, ptr %t194 + %t198 = add i64 %t197, 1 + call void @finch_arr_reserve(ptr %a187, i64 %t198, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t199 = load ptr, ptr %a187 + %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 %t197 + store { ptr, i64, i64 } %t196, ptr %t200 + store i64 %t198, ptr %t194 + %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a186, i32 0, i32 1 + %t202 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 3 + %t203 = load i64, ptr %a191 + %t204 = load { ptr, i64, i64 }, ptr %t202 + %t205 = extractvalue { ptr, i64, i64 } %t204, 1 + %t206 = icmp uge i64 %t203, %t205 + br i1 %t206, label %range2977, label %inrange2978 +range2977: + call void @finch_panic_index(ptr @.str.1859, i64 1159, i64 %t203, i64 %t205) + unreachable +inrange2978: + %t207 = extractvalue { ptr, i64, i64 } %t204, 0 + %t208 = getelementptr inbounds i64, ptr %t207, i64 %t203 + %t209 = load i64, ptr %t208 + call void @finch_str_from_int(ptr %a210, i64 %t209) + %t211 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.1858, i64 4, i64 0 }, ptr %a213 + store { ptr, i64, i64 } %t211, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + store { ptr, i64, i64 } %t211, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t216, ptr %a218 + store { ptr, i64, i64 } { ptr @.str.1860, i64 9, i64 0 }, ptr %a219 + call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a217 + %t222 = load i64, ptr %a191 + %t223 = load { ptr, i64, i64 }, ptr %a187 + %t224 = extractvalue { ptr, i64, i64 } %t223, 1 + %t225 = icmp uge i64 %t222, %t224 + br i1 %t225, label %range2979, label %inrange2980 +range2979: + call void @finch_panic_index(ptr @.str.1861, i64 1159, i64 %t222, i64 %t224) + unreachable +inrange2980: + %t226 = extractvalue { ptr, i64, i64 } %t223, 0 + %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 %t222 + %t228 = load { ptr, i64, i64 }, ptr %t227 + store { ptr, i64, i64 } %t221, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t221, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + %t234 = load i64, ptr %t201 + %t235 = add i64 %t234, 1 + call void @finch_arr_reserve(ptr %a186, i64 %t235, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t236 = load ptr, ptr %a186 + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i64 %t234 + store { ptr, i64, i64 } %t233, ptr %t237 + store i64 %t235, ptr %t201 + br label %for.step2975 +for.step2975: + %t238 = load i64, ptr %a191 + %t239 = add i64 %t238, 1 + store i64 %t239, ptr %a191 + br label %for.cond2973 +for.end2976: + %t240 = load ptr, ptr %a1 + %t241 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.1862, i64 11, i64 0 }, ptr %a243 + store { ptr, i64, i64 } %t241, ptr %a244 + call void @finch_str_concat(ptr %a242, ptr %a243, ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a242 + store { ptr, i64, i64 } %t245, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.1863, i64 9, i64 0 }, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t245, ptr %a249 + call void @finch_str_drop(ptr %a249) + %t250 = load { ptr, i64, i64 }, ptr %a246 + %t251 = load { ptr, i64, i64 }, ptr %a182 + store { ptr, i64, i64 } %t250, ptr %a253 + store { ptr, i64, i64 } %t251, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t250, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t256, ptr %a258 + store { ptr, i64, i64 } { ptr @.str.1864, i64 3, i64 0 }, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t256, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %a186, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1865, i64 1, i64 0 }, ptr %a263 + call void @finch_str_join(ptr %a264, ptr %a186, ptr %a263) + %t265 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t261, ptr %a267 + store { ptr, i64, i64 } %t265, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t261, ptr %a269 + call void @finch_str_drop(ptr %a269) + store { ptr, i64, i64 } %t265, ptr %a270 + call void @finch_str_drop(ptr %a270) + %t271 = load { ptr, i64, i64 }, ptr %a266 + store { ptr, i64, i64 } %t271, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.1866, i64 2, i64 0 }, ptr %a274 + call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274) + store { ptr, i64, i64 } %t271, ptr %a275 + call void @finch_str_drop(ptr %a275) + %t276 = load { ptr, i64, i64 }, ptr %a272 + call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t276) + store { ptr, i64, i64 } %t276, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load ptr, ptr %a1 + %t279 = icmp eq ptr %t278, null + br i1 %t279, label %panic2981, label %ok2982 +panic2981: + call void @finch_panic(ptr @.str.1867, i64 1162, ptr @.str.1868) + unreachable +ok2982: + %t280 = getelementptr inbounds %S.gen.Gen, ptr %t278, i32 0, i32 9 + store i1 true, ptr %t280 + %t281 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 + %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %t281, i32 0, i32 1 + %t283 = load i64, ptr %t282 + store i64 0, ptr %a284 + br label %for.cond2983 +for.cond2983: + %t285 = load i64, ptr %a284 + %t286 = icmp slt i64 %t285, %t283 + br i1 %t286, label %for.body2984, label %for.end2986 +for.body2984: + %t287 = load ptr, ptr %a1 + %t288 = load i64, ptr %a284 + %t289 = load { ptr, i64, i64 }, ptr %a187 + %t290 = extractvalue { ptr, i64, i64 } %t289, 1 + %t291 = icmp uge i64 %t288, %t290 + br i1 %t291, label %range2987, label %inrange2988 +range2987: + call void @finch_panic_index(ptr @.str.1869, i64 1164, i64 %t288, i64 %t290) + unreachable +inrange2988: + %t292 = extractvalue { ptr, i64, i64 } %t289, 0 + %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %t292, i64 %t288 + %t294 = load { ptr, i64, i64 }, ptr %t293 + call void @finch.gen.label(ptr %t287, { ptr, i64, i64 } %t294) + %t295 = load ptr, ptr %a1 + %t296 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 + %t297 = load i64, ptr %a284 + %t298 = load { ptr, i64, i64 }, ptr %t296 + %t299 = extractvalue { ptr, i64, i64 } %t298, 1 + %t300 = icmp uge i64 %t297, %t299 + br i1 %t300, label %range2989, label %inrange2990 +range2989: + call void @finch_panic_index(ptr @.str.1871, i64 1165, i64 %t297, i64 %t299) + unreachable +inrange2990: + %t301 = extractvalue { ptr, i64, i64 } %t298, 0 + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 %t297 + %t303 = load { ptr, i64, i64 }, ptr %t302 + call void @finch.gen.bufText(ptr %t295, { ptr, i64, i64 } { ptr @.str.1870, i64 4, i64 0 }, { ptr, i64, i64 } %t303) + %t304 = load ptr, ptr %a1 + %t305 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.br(ptr %t304, { ptr, i64, i64 } %t305) + br label %for.step2985 +for.step2985: + %t306 = load i64, ptr %a284 + %t307 = add i64 %t306, 1 + store i64 %t307, ptr %a284 + br label %for.cond2983 +for.end2986: + %t308 = load ptr, ptr %a1 + %t309 = load { ptr, i64, i64 }, ptr %a182 + call void @finch.gen.label(ptr %t308, { ptr, i64, i64 } %t309) + %t310 = load ptr, ptr %a1 + %t311 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 1 + %t312 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t312, ptr %a314 + store { ptr, i64, i64 } { ptr @.str.1873, i64 1, i64 0 }, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + %t316 = load { ptr, i64, i64 }, ptr %a313 + call void @finch.gen.bufText(ptr %t310, { ptr, i64, i64 } { ptr @.str.1872, i64 4, i64 0 }, { ptr, i64, i64 } %t316) + store { ptr, i64, i64 } %t316, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load ptr, ptr %a1 + %t319 = load ptr, ptr %a1 + %t320 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.1875, i64 9, i64 0 }, ptr %a322 + store { ptr, i64, i64 } %t320, ptr %a323 + call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a321 + store { ptr, i64, i64 } %t324, ptr %a326 + store { ptr, i64, i64 } { ptr @.str.1876, i64 7, i64 0 }, ptr %a327 + call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) + store { ptr, i64, i64 } %t324, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a325 + %t330 = call { ptr, i64, i64 } @finch.gen.op(ptr %t319, { ptr, i64, i64 } %t329) + store { ptr, i64, i64 } %t329, ptr %a331 + call void @finch_str_drop(ptr %a331) + store { ptr, i64, i64 } { ptr @.str.1874, i64 39, i64 0 }, ptr %a333 + store { ptr, i64, i64 } %t330, ptr %a334 + call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) + store { ptr, i64, i64 } %t330, ptr %a335 + call void @finch_str_drop(ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a332 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.1877, i64 1, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t336, ptr %a340 + call void @finch_str_drop(ptr %a340) + %t341 = load { ptr, i64, i64 }, ptr %a337 + call void @finch.gen.emit(ptr %t318, { ptr, i64, i64 } %t341) + store { ptr, i64, i64 } %t341, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t343, { ptr, i64, i64 } { ptr @.str.1878, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1879, i64 1, i64 0 }) + %t344 = load ptr, ptr %a1 + %t345 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.br(ptr %t344, { ptr, i64, i64 } %t345) + %t346 = load ptr, ptr %a1 + %t347 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.label(ptr %t346, { ptr, i64, i64 } %t347) + call void @finch.drop.arr_str(ptr %a187) + call void @finch.drop.arr_str(ptr %a186) + call void @finch_str_drop(ptr %a185) + call void @finch_str_drop(ptr %a182) + call void @finch_str_drop(ptr %a179) + call void @finch.drop.S_gen_EnumDef(ptr %a176) + br label %endif2968 +else2967: + %t348 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t349 = load { ptr, i64, i64 }, ptr %t348 + store { ptr, i64, i64 } %t349, ptr %a350 + store { ptr, i64, i64 } { ptr @.str.1880, i64 3, i64 0 }, ptr %a351 + %t352 = call i32 @finch_str_eq(ptr %a350, ptr %a351) + %t353 = icmp ne i32 %t352, 0 + br i1 %t353, label %then2991, label %else2992 +then2991: + %t354 = load ptr, ptr %a1 + %t355 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t354, { ptr, i64, i64 } { ptr @.str.1881, i64 2, i64 0 }) + store { ptr, i64, i64 } %t355, ptr %a356 + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a356 + call void @finch.gen.store(ptr %t357, { ptr, i64, i64 } { ptr @.str.1882, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1883, i64 4, i64 0 }, { ptr, i64, i64 } %t358) + %t359 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t359, { ptr, i64, i64 } { ptr @.str.1884, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1885, i64 1, i64 0 }) + %t360 = load ptr, ptr %a1 + %t361 = load ptr, ptr %a1 + %t362 = load ptr, ptr %a1 + %t363 = load %S.ast.Type, ptr %a2 + %t364 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t362, %S.ast.Type %t363) + store { ptr, i64, i64 } { ptr @.str.1887, i64 23, i64 0 }, ptr %a366 + store { ptr, i64, i64 } %t364, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t364, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a365 + store { ptr, i64, i64 } %t369, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1888, i64 22, i64 0 }, ptr %a372 + call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) + store { ptr, i64, i64 } %t369, ptr %a373 + call void @finch_str_drop(ptr %a373) + %t374 = load { ptr, i64, i64 }, ptr %a370 + %t375 = call { ptr, i64, i64 } @finch.gen.op(ptr %t361, { ptr, i64, i64 } %t374) + store { ptr, i64, i64 } %t374, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = call { ptr, i64, i64 } @finch.gen.load(ptr %t360, { ptr, i64, i64 } { ptr @.str.1886, i64 3, i64 0 }, { ptr, i64, i64 } %t375) + store { ptr, i64, i64 } %t375, ptr %a378 + call void @finch_str_drop(ptr %a378) + store { ptr, i64, i64 } %t377, ptr %a379 + %t380 = load ptr, ptr %a1 + %t381 = load { ptr, i64, i64 }, ptr %a379 + %t382 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t380, { ptr, i64, i64 } %t381) + store { ptr, i64, i64 } %t382, ptr %a383 + %t384 = load ptr, ptr %a1 + %t385 = load %S.ast.Type, ptr %a2 + %t386 = load { ptr, i64, i64 }, ptr %a383 + %t387 = extractvalue { ptr, i64, i64 } %t386, 1 + %t388 = icmp uge i64 3, %t387 + br i1 %t388, label %range2994, label %inrange2995 +range2994: + call void @finch_panic_index(ptr @.str.1890, i64 1181, i64 3, i64 %t387) + unreachable +inrange2995: + %t389 = extractvalue { ptr, i64, i64 } %t386, 0 + %t390 = getelementptr inbounds { ptr, i64, i64 }, ptr %t389, i64 3 + %t391 = load { ptr, i64, i64 }, ptr %t390 + %t392 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t384, { ptr, i64, i64 } { ptr @.str.1889, i64 2, i64 0 }, %S.ast.Type %t385, { ptr, i64, i64 } %t391) + store { ptr, i64, i64 } %t392, ptr %a393 + %t394 = load ptr, ptr %a1 + %t395 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t394, { ptr, i64, i64 } { ptr @.str.1891, i64 10, i64 0 }) + store { ptr, i64, i64 } %t395, ptr %a396 + %t397 = load ptr, ptr %a1 + %t398 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t397, { ptr, i64, i64 } { ptr @.str.1892, i64 10, i64 0 }) + store { ptr, i64, i64 } %t398, ptr %a399 + %t400 = load ptr, ptr %a1 + %t401 = load ptr, ptr %a1 + %t402 = load ptr, ptr %a1 + %t403 = load ptr, ptr %a1 + %t404 = load { ptr, i64, i64 }, ptr %a393 + %t405 = load %S.ast.Type, ptr %a2 + %t406 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t403, { ptr, i64, i64 } %t404, %S.ast.Type %t405, i64 0) + %t407 = call { ptr, i64, i64 } @finch.gen.load(ptr %t402, { ptr, i64, i64 } { ptr @.str.1894, i64 3, i64 0 }, { ptr, i64, i64 } %t406) + store { ptr, i64, i64 } %t406, ptr %a408 + call void @finch_str_drop(ptr %a408) + store { ptr, i64, i64 } { ptr @.str.1893, i64 12, i64 0 }, ptr %a410 + store { ptr, i64, i64 } %t407, ptr %a411 + call void @finch_str_concat(ptr %a409, ptr %a410, ptr %a411) + store { ptr, i64, i64 } %t407, ptr %a412 + call void @finch_str_drop(ptr %a412) + %t413 = load { ptr, i64, i64 }, ptr %a409 + store { ptr, i64, i64 } %t413, ptr %a415 + store { ptr, i64, i64 } { ptr @.str.1895, i64 3, i64 0 }, ptr %a416 + call void @finch_str_concat(ptr %a414, ptr %a415, ptr %a416) + store { ptr, i64, i64 } %t413, ptr %a417 + call void @finch_str_drop(ptr %a417) + %t418 = load { ptr, i64, i64 }, ptr %a414 + %t419 = call { ptr, i64, i64 } @finch.gen.op(ptr %t401, { ptr, i64, i64 } %t418) + store { ptr, i64, i64 } %t418, ptr %a420 + call void @finch_str_drop(ptr %a420) + %t421 = load { ptr, i64, i64 }, ptr %a396 + %t422 = load { ptr, i64, i64 }, ptr %a399 + call void @finch.gen.condBr(ptr %t400, { ptr, i64, i64 } %t419, { ptr, i64, i64 } %t421, { ptr, i64, i64 } %t422) + store { ptr, i64, i64 } %t419, ptr %a423 + call void @finch_str_drop(ptr %a423) + %t424 = load ptr, ptr %a1 + %t425 = load { ptr, i64, i64 }, ptr %a396 + call void @finch.gen.label(ptr %t424, { ptr, i64, i64 } %t425) + %t426 = load ptr, ptr %a1 + %t427 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t426, { ptr, i64, i64 } { ptr @.str.1896, i64 3, i64 0 }) + store { ptr, i64, i64 } %t427, ptr %a428 + %t429 = load ptr, ptr %a1 + %t430 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t429, { ptr, i64, i64 } { ptr @.str.1897, i64 4, i64 0 }) + store { ptr, i64, i64 } %t430, ptr %a431 + %t432 = load ptr, ptr %a1 + %t433 = load ptr, ptr %a1 + %t434 = load { ptr, i64, i64 }, ptr %a356 + %t435 = call { ptr, i64, i64 } @finch.gen.load(ptr %t433, { ptr, i64, i64 } { ptr @.str.1898, i64 2, i64 0 }, { ptr, i64, i64 } %t434) + %t436 = load { ptr, i64, i64 }, ptr %a431 + %t437 = load { ptr, i64, i64 }, ptr %a428 + call void @finch.gen.condBr(ptr %t432, { ptr, i64, i64 } %t435, { ptr, i64, i64 } %t436, { ptr, i64, i64 } %t437) + store { ptr, i64, i64 } %t435, ptr %a438 + call void @finch_str_drop(ptr %a438) + %t439 = load ptr, ptr %a1 + %t440 = load { ptr, i64, i64 }, ptr %a428 + call void @finch.gen.label(ptr %t439, { ptr, i64, i64 } %t440) + %t441 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t441, { ptr, i64, i64 } { ptr @.str.1899, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1900, i64 2, i64 0 }) + %t442 = load ptr, ptr %a1 + %t443 = load { ptr, i64, i64 }, ptr %a431 + call void @finch.gen.br(ptr %t442, { ptr, i64, i64 } %t443) + %t444 = load ptr, ptr %a1 + %t445 = load { ptr, i64, i64 }, ptr %a431 + call void @finch.gen.label(ptr %t444, { ptr, i64, i64 } %t445) + %t446 = load ptr, ptr %a1 + %t447 = load { ptr, i64, i64 }, ptr %a356 + call void @finch.gen.store(ptr %t446, { ptr, i64, i64 } { ptr @.str.1901, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1902, i64 5, i64 0 }, { ptr, i64, i64 } %t447) + %t448 = load ptr, ptr %a1 + %t449 = load ptr, ptr %a1 + %t450 = load ptr, ptr %a1 + %t451 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t452 = load { ptr, i64, i64 }, ptr %t451 + %t453 = extractvalue { ptr, i64, i64 } %t452, 1 + %t454 = icmp uge i64 0, %t453 + br i1 %t454, label %range2996, label %inrange2997 +range2996: + call void @finch_panic_index(ptr @.str.1904, i64 1194, i64 0, i64 %t453) + unreachable +inrange2997: + %t455 = extractvalue { ptr, i64, i64 } %t452, 0 + %t456 = getelementptr inbounds %S.ast.Type, ptr %t455, i64 0 + %t457 = load %S.ast.Type, ptr %t456 + %t458 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t450, %S.ast.Type %t457) + %t459 = load ptr, ptr %a1 + %t460 = load { ptr, i64, i64 }, ptr %a393 + %t461 = load %S.ast.Type, ptr %a2 + %t462 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t459, { ptr, i64, i64 } %t460, %S.ast.Type %t461, i64 1) + %t463 = call { ptr, i64, i64 } @finch.gen.load(ptr %t449, { ptr, i64, i64 } %t458, { ptr, i64, i64 } %t462) + store { ptr, i64, i64 } %t458, ptr %a464 + call void @finch_str_drop(ptr %a464) + store { ptr, i64, i64 } %t462, ptr %a465 + call void @finch_str_drop(ptr %a465) + %t466 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t467 = load { ptr, i64, i64 }, ptr %t466 + %t468 = extractvalue { ptr, i64, i64 } %t467, 1 + %t469 = icmp uge i64 0, %t468 + br i1 %t469, label %range2998, label %inrange2999 +range2998: + call void @finch_panic_index(ptr @.str.1905, i64 1194, i64 0, i64 %t468) + unreachable +inrange2999: + %t470 = extractvalue { ptr, i64, i64 } %t467, 0 + %t471 = getelementptr inbounds %S.ast.Type, ptr %t470, i64 0 + %t472 = load %S.ast.Type, ptr %t471 + call void @finch.gen.emitFormat(ptr %t448, { ptr, i64, i64 } { ptr @.str.1903, i64 4, i64 0 }, { ptr, i64, i64 } %t463, %S.ast.Type %t472, i1 true) + store { ptr, i64, i64 } %t463, ptr %a473 + call void @finch_str_drop(ptr %a473) + %t474 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t474, { ptr, i64, i64 } { ptr @.str.1906, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1907, i64 2, i64 0 }) + %t475 = load ptr, ptr %a1 + %t476 = load ptr, ptr %a1 + %t477 = load ptr, ptr %a1 + %t478 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t479 = load { ptr, i64, i64 }, ptr %t478 + %t480 = extractvalue { ptr, i64, i64 } %t479, 1 + %t481 = icmp uge i64 1, %t480 + br i1 %t481, label %range3000, label %inrange3001 +range3000: + call void @finch_panic_index(ptr @.str.1909, i64 1196, i64 1, i64 %t480) + unreachable +inrange3001: + %t482 = extractvalue { ptr, i64, i64 } %t479, 0 + %t483 = getelementptr inbounds %S.ast.Type, ptr %t482, i64 1 + %t484 = load %S.ast.Type, ptr %t483 + %t485 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t477, %S.ast.Type %t484) + %t486 = load ptr, ptr %a1 + %t487 = load { ptr, i64, i64 }, ptr %a393 + %t488 = load %S.ast.Type, ptr %a2 + %t489 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t486, { ptr, i64, i64 } %t487, %S.ast.Type %t488, i64 2) + %t490 = call { ptr, i64, i64 } @finch.gen.load(ptr %t476, { ptr, i64, i64 } %t485, { ptr, i64, i64 } %t489) + store { ptr, i64, i64 } %t485, ptr %a491 + call void @finch_str_drop(ptr %a491) + store { ptr, i64, i64 } %t489, ptr %a492 + call void @finch_str_drop(ptr %a492) + %t493 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t494 = load { ptr, i64, i64 }, ptr %t493 + %t495 = extractvalue { ptr, i64, i64 } %t494, 1 + %t496 = icmp uge i64 1, %t495 + br i1 %t496, label %range3002, label %inrange3003 +range3002: + call void @finch_panic_index(ptr @.str.1910, i64 1196, i64 1, i64 %t495) + unreachable +inrange3003: + %t497 = extractvalue { ptr, i64, i64 } %t494, 0 + %t498 = getelementptr inbounds %S.ast.Type, ptr %t497, i64 1 + %t499 = load %S.ast.Type, ptr %t498 + call void @finch.gen.emitFormat(ptr %t475, { ptr, i64, i64 } { ptr @.str.1908, i64 4, i64 0 }, { ptr, i64, i64 } %t490, %S.ast.Type %t499, i1 true) + store { ptr, i64, i64 } %t490, ptr %a500 + call void @finch_str_drop(ptr %a500) + %t501 = load ptr, ptr %a1 + %t502 = load { ptr, i64, i64 }, ptr %a399 + call void @finch.gen.br(ptr %t501, { ptr, i64, i64 } %t502) + %t503 = load ptr, ptr %a1 + %t504 = load { ptr, i64, i64 }, ptr %a399 + call void @finch.gen.label(ptr %t503, { ptr, i64, i64 } %t504) + %t505 = load ptr, ptr %a1 + %t506 = load { ptr, i64, i64 }, ptr %a383 + call void @finch.gen.loopEnd(ptr %t505, { ptr, i64, i64 } %t506) + %t507 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t507, { ptr, i64, i64 } { ptr @.str.1911, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1912, i64 1, i64 0 }) + call void @finch_str_drop(ptr %a431) + call void @finch_str_drop(ptr %a428) + call void @finch_str_drop(ptr %a399) + call void @finch_str_drop(ptr %a396) + call void @finch_str_drop(ptr %a393) + call void @finch.drop.arr_str(ptr %a383) + call void @finch_str_drop(ptr %a379) + call void @finch_str_drop(ptr %a356) + br label %endif2993 +else2992: + %t508 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t509 = load { ptr, i64, i64 }, ptr %t508 + store { ptr, i64, i64 } %t509, ptr %a510 + store { ptr, i64, i64 } { ptr @.str.1913, i64 6, i64 0 }, ptr %a511 + %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) + %t513 = icmp ne i32 %t512, 0 + br label %logic.from3004 +logic.from3004: + br i1 %t513, label %logic.rhs3005, label %logic.end3006 +logic.rhs3005: + %t514 = load ptr, ptr %a1 + %t515 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t516 = load { ptr, i64, i64 }, ptr %t515 + %t517 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t518 = load { ptr, i64, i64 }, ptr %t517 + %t519 = call i64 @finch.gen.findSum(ptr %t514, { ptr, i64, i64 } %t516, { ptr, i64, i64 } %t518) + %t520 = icmp sge i64 %t519, 0 + br label %logic.rend3007 +logic.rend3007: + br label %logic.end3006 +logic.end3006: + %t521 = phi i1 [ false, %logic.from3004 ], [ %t520, %logic.rend3007 ] + br i1 %t521, label %then3008, label %else3009 +then3008: + %t522 = load ptr, ptr %a1 + %t523 = icmp eq ptr %t522, null + br i1 %t523, label %panic3011, label %ok3012 +panic3011: + call void @finch_panic(ptr @.str.1914, i64 1203, ptr @.str.1915) + unreachable +ok3012: + %t524 = getelementptr inbounds %S.gen.Gen, ptr %t522, i32 0, i32 22 + %t525 = load ptr, ptr %a1 + %t526 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t527 = load { ptr, i64, i64 }, ptr %t526 + %t528 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t529 = load { ptr, i64, i64 }, ptr %t528 + %t530 = call i64 @finch.gen.findSum(ptr %t525, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t529) + %t531 = load { ptr, i64, i64 }, ptr %t524 + %t532 = extractvalue { ptr, i64, i64 } %t531, 1 + %t533 = icmp uge i64 %t530, %t532 + br i1 %t533, label %range3013, label %inrange3014 +range3013: + call void @finch_panic_index(ptr @.str.1916, i64 1203, i64 %t530, i64 %t532) + unreachable +inrange3014: + %t534 = extractvalue { ptr, i64, i64 } %t531, 0 + %t535 = getelementptr inbounds %S.gen.SumDef, ptr %t534, i64 %t530 + %t536 = load %S.gen.SumDef, ptr %t535 + store %S.gen.SumDef %t536, ptr %a537 + call void @finch.copy.S_gen_SumDef(ptr %a538, ptr %a537) + %t539 = load %S.gen.SumDef, ptr %a538 + store %S.gen.SumDef %t539, ptr %a540 + %t541 = load ptr, ptr %a1 + %t542 = icmp eq ptr %t541, null + br i1 %t542, label %panic3015, label %ok3016 +panic3015: + call void @finch_panic(ptr @.str.1917, i64 1204, ptr @.str.1918) + unreachable +ok3016: + %t543 = getelementptr inbounds %S.gen.Gen, ptr %t541, i32 0, i32 16 + %t544 = load ptr, ptr %a1 + %t545 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t546 = load { ptr, i64, i64 }, ptr %t545 + %t547 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t548 = load { ptr, i64, i64 }, ptr %t547 + %t549 = call i64 @finch.gen.findStruct(ptr %t544, { ptr, i64, i64 } %t546, { ptr, i64, i64 } %t548) + %t550 = load { ptr, i64, i64 }, ptr %t543 + %t551 = extractvalue { ptr, i64, i64 } %t550, 1 + %t552 = icmp uge i64 %t549, %t551 + br i1 %t552, label %range3017, label %inrange3018 +range3017: + call void @finch_panic_index(ptr @.str.1919, i64 1204, i64 %t549, i64 %t551) + unreachable +inrange3018: + %t553 = extractvalue { ptr, i64, i64 } %t550, 0 + %t554 = getelementptr inbounds %S.gen.StructDef, ptr %t553, i64 %t549 + %t555 = load %S.gen.StructDef, ptr %t554 + store %S.gen.StructDef %t555, ptr %a556 + call void @finch.copy.S_gen_StructDef(ptr %a557, ptr %a556) + %t558 = load %S.gen.StructDef, ptr %a557 + store %S.gen.StructDef %t558, ptr %a559 + %t560 = load ptr, ptr %a1 + %t561 = load %S.ast.Type, ptr %a2 + %t562 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t560, %S.ast.Type %t561) + store { ptr, i64, i64 } %t562, ptr %a563 + %t564 = load ptr, ptr %a1 + %t565 = load ptr, ptr %a1 + %t566 = load { ptr, i64, i64 }, ptr %a563 + store { ptr, i64, i64 } { ptr @.str.1921, i64 23, i64 0 }, ptr %a568 + store { ptr, i64, i64 } %t566, ptr %a569 + call void @finch_str_concat(ptr %a567, ptr %a568, ptr %a569) + %t570 = load { ptr, i64, i64 }, ptr %a567 + store { ptr, i64, i64 } %t570, ptr %a572 + store { ptr, i64, i64 } { ptr @.str.1922, i64 21, i64 0 }, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + store { ptr, i64, i64 } %t570, ptr %a574 + call void @finch_str_drop(ptr %a574) + %t575 = load { ptr, i64, i64 }, ptr %a571 + %t576 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 3 + %t577 = load { ptr, i64, i64 }, ptr %t576 + %t578 = extractvalue { ptr, i64, i64 } %t577, 1 + %t579 = icmp uge i64 0, %t578 + br i1 %t579, label %range3019, label %inrange3020 +range3019: + call void @finch_panic_index(ptr @.str.1923, i64 1206, i64 0, i64 %t578) + unreachable +inrange3020: + %t580 = extractvalue { ptr, i64, i64 } %t577, 0 + %t581 = getelementptr inbounds i64, ptr %t580, i64 0 + %t582 = load i64, ptr %t581 + call void @finch_str_from_int(ptr %a583, i64 %t582) + %t584 = load { ptr, i64, i64 }, ptr %a583 + store { ptr, i64, i64 } %t575, ptr %a586 + store { ptr, i64, i64 } %t584, ptr %a587 + call void @finch_str_concat(ptr %a585, ptr %a586, ptr %a587) + store { ptr, i64, i64 } %t575, ptr %a588 + call void @finch_str_drop(ptr %a588) + store { ptr, i64, i64 } %t584, ptr %a589 + call void @finch_str_drop(ptr %a589) + %t590 = load { ptr, i64, i64 }, ptr %a585 + %t591 = call { ptr, i64, i64 } @finch.gen.op(ptr %t565, { ptr, i64, i64 } %t590) + store { ptr, i64, i64 } %t590, ptr %a592 + call void @finch_str_drop(ptr %a592) + %t593 = call { ptr, i64, i64 } @finch.gen.load(ptr %t564, { ptr, i64, i64 } { ptr @.str.1920, i64 3, i64 0 }, { ptr, i64, i64 } %t591) + store { ptr, i64, i64 } %t591, ptr %a594 + call void @finch_str_drop(ptr %a594) + store { ptr, i64, i64 } %t593, ptr %a595 + %t596 = load ptr, ptr %a1 + %t597 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t596, { ptr, i64, i64 } { ptr @.str.1924, i64 9, i64 0 }) + store { ptr, i64, i64 } %t597, ptr %a598 + %t599 = load ptr, ptr %a1 + %t600 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t599, { ptr, i64, i64 } { ptr @.str.1925, i64 8, i64 0 }) + store { ptr, i64, i64 } %t600, ptr %a601 + store { ptr, i64, i64 } zeroinitializer, ptr %a602 + store { ptr, i64, i64 } zeroinitializer, ptr %a603 + %t604 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 + %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i32 0, i32 1 + %t606 = load i64, ptr %t605 + store i64 0, ptr %a607 + br label %for.cond3021 +for.cond3021: + %t608 = load i64, ptr %a607 + %t609 = icmp slt i64 %t608, %t606 + br i1 %t609, label %for.body3022, label %for.end3024 +for.body3022: + %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a603, i32 0, i32 1 + %t611 = load ptr, ptr %a1 + %t612 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t611, { ptr, i64, i64 } { ptr @.str.1926, i64 5, i64 0 }) + %t613 = load i64, ptr %t610 + %t614 = add i64 %t613, 1 + call void @finch_arr_reserve(ptr %a603, i64 %t614, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t615 = load ptr, ptr %a603 + %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %t615, i64 %t613 + store { ptr, i64, i64 } %t612, ptr %t616 + store i64 %t614, ptr %t610 + %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %a602, i32 0, i32 1 + %t618 = load i64, ptr %a607 + call void @finch_str_from_int(ptr %a619, i64 %t618) + %t620 = load { ptr, i64, i64 }, ptr %a619 + store { ptr, i64, i64 } { ptr @.str.1927, i64 4, i64 0 }, ptr %a622 + store { ptr, i64, i64 } %t620, ptr %a623 + call void @finch_str_concat(ptr %a621, ptr %a622, ptr %a623) + store { ptr, i64, i64 } %t620, ptr %a624 + call void @finch_str_drop(ptr %a624) + %t625 = load { ptr, i64, i64 }, ptr %a621 + store { ptr, i64, i64 } %t625, ptr %a627 + store { ptr, i64, i64 } { ptr @.str.1928, i64 9, i64 0 }, ptr %a628 + call void @finch_str_concat(ptr %a626, ptr %a627, ptr %a628) + store { ptr, i64, i64 } %t625, ptr %a629 + call void @finch_str_drop(ptr %a629) + %t630 = load { ptr, i64, i64 }, ptr %a626 + %t631 = load i64, ptr %a607 + %t632 = load { ptr, i64, i64 }, ptr %a603 + %t633 = extractvalue { ptr, i64, i64 } %t632, 1 + %t634 = icmp uge i64 %t631, %t633 + br i1 %t634, label %range3025, label %inrange3026 +range3025: + call void @finch_panic_index(ptr @.str.1929, i64 1213, i64 %t631, i64 %t633) + unreachable +inrange3026: + %t635 = extractvalue { ptr, i64, i64 } %t632, 0 + %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t631 + %t637 = load { ptr, i64, i64 }, ptr %t636 + store { ptr, i64, i64 } %t630, ptr %a639 + store { ptr, i64, i64 } %t637, ptr %a640 + call void @finch_str_concat(ptr %a638, ptr %a639, ptr %a640) + store { ptr, i64, i64 } %t630, ptr %a641 + call void @finch_str_drop(ptr %a641) + %t642 = load { ptr, i64, i64 }, ptr %a638 + %t643 = load i64, ptr %t617 + %t644 = add i64 %t643, 1 + call void @finch_arr_reserve(ptr %a602, i64 %t644, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t645 = load ptr, ptr %a602 + %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t645, i64 %t643 + store { ptr, i64, i64 } %t642, ptr %t646 + store i64 %t644, ptr %t617 + br label %for.step3023 +for.step3023: + %t647 = load i64, ptr %a607 + %t648 = add i64 %t647, 1 + store i64 %t648, ptr %a607 + br label %for.cond3021 +for.end3024: + %t649 = load ptr, ptr %a1 + %t650 = load { ptr, i64, i64 }, ptr %a595 + store { ptr, i64, i64 } { ptr @.str.1930, i64 11, i64 0 }, ptr %a652 + store { ptr, i64, i64 } %t650, ptr %a653 + call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) + %t654 = load { ptr, i64, i64 }, ptr %a651 + store { ptr, i64, i64 } %t654, ptr %a656 + store { ptr, i64, i64 } { ptr @.str.1931, i64 9, i64 0 }, ptr %a657 + call void @finch_str_concat(ptr %a655, ptr %a656, ptr %a657) + store { ptr, i64, i64 } %t654, ptr %a658 + call void @finch_str_drop(ptr %a658) + %t659 = load { ptr, i64, i64 }, ptr %a655 + %t660 = load { ptr, i64, i64 }, ptr %a598 + store { ptr, i64, i64 } %t659, ptr %a662 + store { ptr, i64, i64 } %t660, ptr %a663 + call void @finch_str_concat(ptr %a661, ptr %a662, ptr %a663) + store { ptr, i64, i64 } %t659, ptr %a664 + call void @finch_str_drop(ptr %a664) + %t665 = load { ptr, i64, i64 }, ptr %a661 + store { ptr, i64, i64 } %t665, ptr %a667 + store { ptr, i64, i64 } { ptr @.str.1932, i64 3, i64 0 }, ptr %a668 + call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) + store { ptr, i64, i64 } %t665, ptr %a669 + call void @finch_str_drop(ptr %a669) + %t670 = load { ptr, i64, i64 }, ptr %a666 + %t671 = getelementptr inbounds { ptr, i64, i64 }, ptr %a602, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1933, i64 1, i64 0 }, ptr %a672 + call void @finch_str_join(ptr %a673, ptr %a602, ptr %a672) + %t674 = load { ptr, i64, i64 }, ptr %a673 + store { ptr, i64, i64 } %t670, ptr %a676 + store { ptr, i64, i64 } %t674, ptr %a677 + call void @finch_str_concat(ptr %a675, ptr %a676, ptr %a677) + store { ptr, i64, i64 } %t670, ptr %a678 + call void @finch_str_drop(ptr %a678) + store { ptr, i64, i64 } %t674, ptr %a679 + call void @finch_str_drop(ptr %a679) + %t680 = load { ptr, i64, i64 }, ptr %a675 + store { ptr, i64, i64 } %t680, ptr %a682 + store { ptr, i64, i64 } { ptr @.str.1934, i64 2, i64 0 }, ptr %a683 + call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) + store { ptr, i64, i64 } %t680, ptr %a684 + call void @finch_str_drop(ptr %a684) + %t685 = load { ptr, i64, i64 }, ptr %a681 + call void @finch.gen.emit(ptr %t649, { ptr, i64, i64 } %t685) + store { ptr, i64, i64 } %t685, ptr %a686 + call void @finch_str_drop(ptr %a686) + %t687 = load ptr, ptr %a1 + %t688 = icmp eq ptr %t687, null + br i1 %t688, label %panic3027, label %ok3028 +panic3027: + call void @finch_panic(ptr @.str.1935, i64 1216, ptr @.str.1936) + unreachable +ok3028: + %t689 = getelementptr inbounds %S.gen.Gen, ptr %t687, i32 0, i32 9 + store i1 true, ptr %t689 + %t690 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 + %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %t690, i32 0, i32 1 + %t692 = load i64, ptr %t691 + store i64 0, ptr %a693 + br label %for.cond3029 +for.cond3029: + %t694 = load i64, ptr %a693 + %t695 = icmp slt i64 %t694, %t692 + br i1 %t695, label %for.body3030, label %for.end3032 +for.body3030: + %t696 = load ptr, ptr %a1 + %t697 = load i64, ptr %a693 + %t698 = load { ptr, i64, i64 }, ptr %a603 + %t699 = extractvalue { ptr, i64, i64 } %t698, 1 + %t700 = icmp uge i64 %t697, %t699 + br i1 %t700, label %range3033, label %inrange3034 +range3033: + call void @finch_panic_index(ptr @.str.1937, i64 1218, i64 %t697, i64 %t699) + unreachable +inrange3034: + %t701 = extractvalue { ptr, i64, i64 } %t698, 0 + %t702 = getelementptr inbounds { ptr, i64, i64 }, ptr %t701, i64 %t697 + %t703 = load { ptr, i64, i64 }, ptr %t702 + call void @finch.gen.label(ptr %t696, { ptr, i64, i64 } %t703) + %t704 = load ptr, ptr %a1 + %t705 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 + %t706 = load i64, ptr %a693 + %t707 = load { ptr, i64, i64 }, ptr %t705 + %t708 = extractvalue { ptr, i64, i64 } %t707, 1 + %t709 = icmp uge i64 %t706, %t708 + br i1 %t709, label %range3035, label %inrange3036 +range3035: + call void @finch_panic_index(ptr @.str.1939, i64 1219, i64 %t706, i64 %t708) + unreachable +inrange3036: + %t710 = extractvalue { ptr, i64, i64 } %t707, 0 + %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i64 %t706 + %t712 = load { ptr, i64, i64 }, ptr %t711 + call void @finch.gen.bufText(ptr %t704, { ptr, i64, i64 } { ptr @.str.1938, i64 4, i64 0 }, { ptr, i64, i64 } %t712) + %t713 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 + %t714 = load i64, ptr %a693 + %t715 = load { ptr, i64, i64 }, ptr %t713 + %t716 = extractvalue { ptr, i64, i64 } %t715, 1 + %t717 = icmp uge i64 %t714, %t716 + br i1 %t717, label %range3037, label %inrange3038 +range3037: + call void @finch_panic_index(ptr @.str.1940, i64 1220, i64 %t714, i64 %t716) + unreachable +inrange3038: + %t718 = extractvalue { ptr, i64, i64 } %t715, 0 + %t719 = getelementptr inbounds i64, ptr %t718, i64 %t714 + %t720 = load i64, ptr %t719 + %t721 = icmp sgt i64 %t720, 0 + br i1 %t721, label %then3039, label %endif3041 +then3039: + %t722 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t722, { ptr, i64, i64 } { ptr @.str.1941, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1942, i64 1, i64 0 }) + %t723 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 + %t724 = load i64, ptr %a693 + %t725 = load { ptr, i64, i64 }, ptr %t723 + %t726 = extractvalue { ptr, i64, i64 } %t725, 1 + %t727 = icmp uge i64 %t724, %t726 + br i1 %t727, label %range3042, label %inrange3043 +range3042: + call void @finch_panic_index(ptr @.str.1943, i64 1222, i64 %t724, i64 %t726) + unreachable +inrange3043: + %t728 = extractvalue { ptr, i64, i64 } %t725, 0 + %t729 = getelementptr inbounds i64, ptr %t728, i64 %t724 + %t730 = load i64, ptr %t729 + store i64 0, ptr %a731 + br label %for.cond3044 +for.cond3044: + %t732 = load i64, ptr %a731 + %t733 = icmp slt i64 %t732, %t730 + br i1 %t733, label %for.body3045, label %for.end3047 +for.body3045: + %t734 = load i64, ptr %a731 + %t735 = icmp sgt i64 %t734, 0 + br i1 %t735, label %then3048, label %endif3050 +then3048: + %t736 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t736, { ptr, i64, i64 } { ptr @.str.1944, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1945, i64 2, i64 0 }) + br label %endif3050 +endif3050: + %t737 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 4 + %t738 = load i64, ptr %a693 + %t739 = load { ptr, i64, i64 }, ptr %t737 + %t740 = extractvalue { ptr, i64, i64 } %t739, 1 + %t741 = icmp uge i64 %t738, %t740 + br i1 %t741, label %range3051, label %inrange3052 +range3051: + call void @finch_panic_index(ptr @.str.1946, i64 1226, i64 %t738, i64 %t740) + unreachable +inrange3052: + %t742 = extractvalue { ptr, i64, i64 } %t739, 0 + %t743 = getelementptr inbounds i64, ptr %t742, i64 %t738 + %t744 = load i64, ptr %t743 + %t745 = load i64, ptr %a731 + %t746 = add i64 %t744, %t745 + store i64 %t746, ptr %a747 + %t748 = load ptr, ptr %a1 + %t749 = load { ptr, i64, i64 }, ptr %a563 + store { ptr, i64, i64 } { ptr @.str.1947, i64 23, i64 0 }, ptr %a751 + store { ptr, i64, i64 } %t749, ptr %a752 + call void @finch_str_concat(ptr %a750, ptr %a751, ptr %a752) + %t753 = load { ptr, i64, i64 }, ptr %a750 + store { ptr, i64, i64 } %t753, ptr %a755 + store { ptr, i64, i64 } { ptr @.str.1948, i64 21, i64 0 }, ptr %a756 + call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) + store { ptr, i64, i64 } %t753, ptr %a757 + call void @finch_str_drop(ptr %a757) + %t758 = load { ptr, i64, i64 }, ptr %a754 + %t759 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 3 + %t760 = load i64, ptr %a747 + %t761 = load { ptr, i64, i64 }, ptr %t759 + %t762 = extractvalue { ptr, i64, i64 } %t761, 1 + %t763 = icmp uge i64 %t760, %t762 + br i1 %t763, label %range3053, label %inrange3054 +range3053: + call void @finch_panic_index(ptr @.str.1949, i64 1227, i64 %t760, i64 %t762) + unreachable +inrange3054: + %t764 = extractvalue { ptr, i64, i64 } %t761, 0 + %t765 = getelementptr inbounds i64, ptr %t764, i64 %t760 + %t766 = load i64, ptr %t765 + call void @finch_str_from_int(ptr %a767, i64 %t766) + %t768 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t758, ptr %a770 + store { ptr, i64, i64 } %t768, ptr %a771 + call void @finch_str_concat(ptr %a769, ptr %a770, ptr %a771) + store { ptr, i64, i64 } %t758, ptr %a772 + call void @finch_str_drop(ptr %a772) + store { ptr, i64, i64 } %t768, ptr %a773 + call void @finch_str_drop(ptr %a773) + %t774 = load { ptr, i64, i64 }, ptr %a769 + %t775 = call { ptr, i64, i64 } @finch.gen.op(ptr %t748, { ptr, i64, i64 } %t774) + store { ptr, i64, i64 } %t774, ptr %a776 + call void @finch_str_drop(ptr %a776) + store { ptr, i64, i64 } %t775, ptr %a777 + %t778 = load ptr, ptr %a1 + %t779 = load ptr, ptr %a1 + %t780 = load ptr, ptr %a1 + %t781 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 12 + %t782 = load i64, ptr %a747 + %t783 = load { ptr, i64, i64 }, ptr %t781 + %t784 = extractvalue { ptr, i64, i64 } %t783, 1 + %t785 = icmp uge i64 %t782, %t784 + br i1 %t785, label %range3055, label %inrange3056 +range3055: + call void @finch_panic_index(ptr @.str.1951, i64 1228, i64 %t782, i64 %t784) + unreachable +inrange3056: + %t786 = extractvalue { ptr, i64, i64 } %t783, 0 + %t787 = getelementptr inbounds %S.ast.Type, ptr %t786, i64 %t782 + %t788 = load %S.ast.Type, ptr %t787 + %t789 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t780, %S.ast.Type %t788) + %t790 = load { ptr, i64, i64 }, ptr %a777 + %t791 = call { ptr, i64, i64 } @finch.gen.load(ptr %t779, { ptr, i64, i64 } %t789, { ptr, i64, i64 } %t790) + store { ptr, i64, i64 } %t789, ptr %a792 + call void @finch_str_drop(ptr %a792) + %t793 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 12 + %t794 = load i64, ptr %a747 + %t795 = load { ptr, i64, i64 }, ptr %t793 + %t796 = extractvalue { ptr, i64, i64 } %t795, 1 + %t797 = icmp uge i64 %t794, %t796 + br i1 %t797, label %range3057, label %inrange3058 +range3057: + call void @finch_panic_index(ptr @.str.1952, i64 1228, i64 %t794, i64 %t796) + unreachable +inrange3058: + %t798 = extractvalue { ptr, i64, i64 } %t795, 0 + %t799 = getelementptr inbounds %S.ast.Type, ptr %t798, i64 %t794 + %t800 = load %S.ast.Type, ptr %t799 + call void @finch.gen.emitFormat(ptr %t778, { ptr, i64, i64 } { ptr @.str.1950, i64 4, i64 0 }, { ptr, i64, i64 } %t791, %S.ast.Type %t800, i1 true) + store { ptr, i64, i64 } %t791, ptr %a801 + call void @finch_str_drop(ptr %a801) + call void @finch_str_drop(ptr %a777) + br label %for.step3046 +for.step3046: + %t802 = load i64, ptr %a731 + %t803 = add i64 %t802, 1 + store i64 %t803, ptr %a731 + br label %for.cond3044 +for.end3047: + %t804 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t804, { ptr, i64, i64 } { ptr @.str.1953, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1954, i64 1, i64 0 }) + br label %endif3041 +endif3041: + %t805 = load ptr, ptr %a1 + %t806 = load { ptr, i64, i64 }, ptr %a601 + call void @finch.gen.br(ptr %t805, { ptr, i64, i64 } %t806) + br label %for.step3031 +for.step3031: + %t807 = load i64, ptr %a693 + %t808 = add i64 %t807, 1 + store i64 %t808, ptr %a693 + br label %for.cond3029 +for.end3032: + %t809 = load ptr, ptr %a1 + %t810 = load { ptr, i64, i64 }, ptr %a598 + call void @finch.gen.label(ptr %t809, { ptr, i64, i64 } %t810) + %t811 = load ptr, ptr %a1 + %t812 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 1 + %t813 = load { ptr, i64, i64 }, ptr %t812 + store { ptr, i64, i64 } %t813, ptr %a815 + store { ptr, i64, i64 } { ptr @.str.1956, i64 3, i64 0 }, ptr %a816 + call void @finch_str_concat(ptr %a814, ptr %a815, ptr %a816) + %t817 = load { ptr, i64, i64 }, ptr %a814 + call void @finch.gen.bufText(ptr %t811, { ptr, i64, i64 } { ptr @.str.1955, i64 4, i64 0 }, { ptr, i64, i64 } %t817) + store { ptr, i64, i64 } %t817, ptr %a818 + call void @finch_str_drop(ptr %a818) + %t819 = load ptr, ptr %a1 + %t820 = load { ptr, i64, i64 }, ptr %a601 + call void @finch.gen.br(ptr %t819, { ptr, i64, i64 } %t820) + %t821 = load ptr, ptr %a1 + %t822 = load { ptr, i64, i64 }, ptr %a601 + call void @finch.gen.label(ptr %t821, { ptr, i64, i64 } %t822) + call void @finch.drop.arr_str(ptr %a603) + call void @finch.drop.arr_str(ptr %a602) + call void @finch_str_drop(ptr %a601) + call void @finch_str_drop(ptr %a598) + call void @finch_str_drop(ptr %a595) + call void @finch_str_drop(ptr %a563) + call void @finch.drop.S_gen_StructDef(ptr %a559) + call void @finch.drop.S_gen_SumDef(ptr %a540) + br label %endif3010 +else3009: + %t823 = load ptr, ptr %a1 + %t824 = icmp eq ptr %t823, null + br i1 %t824, label %panic3059, label %ok3060 +panic3059: + call void @finch_panic(ptr @.str.1957, i64 1239, ptr @.str.1958) + unreachable +ok3060: + %t825 = getelementptr inbounds %S.gen.Gen, ptr %t823, i32 0, i32 16 + %t826 = load ptr, ptr %a1 + %t827 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t828 = load { ptr, i64, i64 }, ptr %t827 + %t829 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t830 = load { ptr, i64, i64 }, ptr %t829 + %t831 = call i64 @finch.gen.findStruct(ptr %t826, { ptr, i64, i64 } %t828, { ptr, i64, i64 } %t830) + %t832 = load { ptr, i64, i64 }, ptr %t825 + %t833 = extractvalue { ptr, i64, i64 } %t832, 1 + %t834 = icmp uge i64 %t831, %t833 + br i1 %t834, label %range3061, label %inrange3062 +range3061: + call void @finch_panic_index(ptr @.str.1959, i64 1239, i64 %t831, i64 %t833) + unreachable +inrange3062: + %t835 = extractvalue { ptr, i64, i64 } %t832, 0 + %t836 = getelementptr inbounds %S.gen.StructDef, ptr %t835, i64 %t831 + %t837 = load %S.gen.StructDef, ptr %t836 + store %S.gen.StructDef %t837, ptr %a838 + call void @finch.copy.S_gen_StructDef(ptr %a839, ptr %a838) + %t840 = load %S.gen.StructDef, ptr %a839 + store %S.gen.StructDef %t840, ptr %a841 + %t842 = load ptr, ptr %a1 + %t843 = load %S.ast.Type, ptr %a2 + %t844 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t842, %S.ast.Type %t843) + store { ptr, i64, i64 } %t844, ptr %a845 + %t846 = load ptr, ptr %a1 + %t847 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 1 + %t848 = load { ptr, i64, i64 }, ptr %t847 + store { ptr, i64, i64 } %t848, ptr %a850 + store { ptr, i64, i64 } { ptr @.str.1961, i64 1, i64 0 }, ptr %a851 + call void @finch_str_concat(ptr %a849, ptr %a850, ptr %a851) + %t852 = load { ptr, i64, i64 }, ptr %a849 + call void @finch.gen.bufText(ptr %t846, { ptr, i64, i64 } { ptr @.str.1960, i64 4, i64 0 }, { ptr, i64, i64 } %t852) + store { ptr, i64, i64 } %t852, ptr %a853 + call void @finch_str_drop(ptr %a853) + %t854 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 + %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i32 0, i32 1 + %t856 = load i64, ptr %t855 + store i64 0, ptr %a857 + br label %for.cond3063 +for.cond3063: + %t858 = load i64, ptr %a857 + %t859 = icmp slt i64 %t858, %t856 + br i1 %t859, label %for.body3064, label %for.end3066 +for.body3064: + store { ptr, i64, i64 } { ptr @.str.1962, i64 2, i64 0 }, ptr %a860 + %t861 = load i64, ptr %a857 + %t862 = icmp eq i64 %t861, 0 + br i1 %t862, label %then3067, label %endif3069 +then3067: + %t863 = load { ptr, i64, i64 }, ptr %a860 + store { ptr, i64, i64 } { ptr @.str.1963, i64 0, i64 0 }, ptr %a860 + store { ptr, i64, i64 } %t863, ptr %a864 + call void @finch_str_drop(ptr %a864) + br label %endif3069 +endif3069: + %t865 = load ptr, ptr %a1 + %t866 = load { ptr, i64, i64 }, ptr %a860 + %t867 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 11 + %t868 = load i64, ptr %a857 + %t869 = load { ptr, i64, i64 }, ptr %t867 + %t870 = extractvalue { ptr, i64, i64 } %t869, 1 + %t871 = icmp uge i64 %t868, %t870 + br i1 %t871, label %range3070, label %inrange3071 +range3070: + call void @finch_panic_index(ptr @.str.1965, i64 1247, i64 %t868, i64 %t870) + unreachable +inrange3071: + %t872 = extractvalue { ptr, i64, i64 } %t869, 0 + %t873 = getelementptr inbounds { ptr, i64, i64 }, ptr %t872, i64 %t868 + %t874 = load { ptr, i64, i64 }, ptr %t873 + store { ptr, i64, i64 } %t866, ptr %a876 + store { ptr, i64, i64 } %t874, ptr %a877 + call void @finch_str_concat(ptr %a875, ptr %a876, ptr %a877) + %t878 = load { ptr, i64, i64 }, ptr %a875 + store { ptr, i64, i64 } %t878, ptr %a880 + store { ptr, i64, i64 } { ptr @.str.1966, i64 2, i64 0 }, ptr %a881 + call void @finch_str_concat(ptr %a879, ptr %a880, ptr %a881) + store { ptr, i64, i64 } %t878, ptr %a882 + call void @finch_str_drop(ptr %a882) + %t883 = load { ptr, i64, i64 }, ptr %a879 + call void @finch.gen.bufText(ptr %t865, { ptr, i64, i64 } { ptr @.str.1964, i64 4, i64 0 }, { ptr, i64, i64 } %t883) + store { ptr, i64, i64 } %t883, ptr %a884 + call void @finch_str_drop(ptr %a884) + %t885 = load ptr, ptr %a1 + %t886 = load { ptr, i64, i64 }, ptr %a845 + store { ptr, i64, i64 } { ptr @.str.1967, i64 23, i64 0 }, ptr %a888 + store { ptr, i64, i64 } %t886, ptr %a889 + call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889) + %t890 = load { ptr, i64, i64 }, ptr %a887 + store { ptr, i64, i64 } %t890, ptr %a892 + store { ptr, i64, i64 } { ptr @.str.1968, i64 21, i64 0 }, ptr %a893 + call void @finch_str_concat(ptr %a891, ptr %a892, ptr %a893) + store { ptr, i64, i64 } %t890, ptr %a894 + call void @finch_str_drop(ptr %a894) + %t895 = load { ptr, i64, i64 }, ptr %a891 + %t896 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 3 + %t897 = load i64, ptr %a857 + %t898 = load { ptr, i64, i64 }, ptr %t896 + %t899 = extractvalue { ptr, i64, i64 } %t898, 1 + %t900 = icmp uge i64 %t897, %t899 + br i1 %t900, label %range3072, label %inrange3073 +range3072: + call void @finch_panic_index(ptr @.str.1969, i64 1248, i64 %t897, i64 %t899) + unreachable +inrange3073: + %t901 = extractvalue { ptr, i64, i64 } %t898, 0 + %t902 = getelementptr inbounds i64, ptr %t901, i64 %t897 + %t903 = load i64, ptr %t902 + call void @finch_str_from_int(ptr %a904, i64 %t903) + %t905 = load { ptr, i64, i64 }, ptr %a904 + store { ptr, i64, i64 } %t895, ptr %a907 + store { ptr, i64, i64 } %t905, ptr %a908 + call void @finch_str_concat(ptr %a906, ptr %a907, ptr %a908) + store { ptr, i64, i64 } %t895, ptr %a909 + call void @finch_str_drop(ptr %a909) + store { ptr, i64, i64 } %t905, ptr %a910 + call void @finch_str_drop(ptr %a910) + %t911 = load { ptr, i64, i64 }, ptr %a906 + %t912 = call { ptr, i64, i64 } @finch.gen.op(ptr %t885, { ptr, i64, i64 } %t911) + store { ptr, i64, i64 } %t911, ptr %a913 + call void @finch_str_drop(ptr %a913) + store { ptr, i64, i64 } %t912, ptr %a914 + %t915 = load ptr, ptr %a1 + %t916 = load ptr, ptr %a1 + %t917 = load ptr, ptr %a1 + %t918 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 + %t919 = load i64, ptr %a857 + %t920 = load { ptr, i64, i64 }, ptr %t918 + %t921 = extractvalue { ptr, i64, i64 } %t920, 1 + %t922 = icmp uge i64 %t919, %t921 + br i1 %t922, label %range3074, label %inrange3075 +range3074: + call void @finch_panic_index(ptr @.str.1971, i64 1249, i64 %t919, i64 %t921) + unreachable +inrange3075: + %t923 = extractvalue { ptr, i64, i64 } %t920, 0 + %t924 = getelementptr inbounds %S.ast.Type, ptr %t923, i64 %t919 + %t925 = load %S.ast.Type, ptr %t924 + %t926 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t917, %S.ast.Type %t925) + %t927 = load { ptr, i64, i64 }, ptr %a914 + %t928 = call { ptr, i64, i64 } @finch.gen.load(ptr %t916, { ptr, i64, i64 } %t926, { ptr, i64, i64 } %t927) + store { ptr, i64, i64 } %t926, ptr %a929 + call void @finch_str_drop(ptr %a929) + %t930 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 + %t931 = load i64, ptr %a857 + %t932 = load { ptr, i64, i64 }, ptr %t930 + %t933 = extractvalue { ptr, i64, i64 } %t932, 1 + %t934 = icmp uge i64 %t931, %t933 + br i1 %t934, label %range3076, label %inrange3077 +range3076: + call void @finch_panic_index(ptr @.str.1972, i64 1249, i64 %t931, i64 %t933) + unreachable +inrange3077: + %t935 = extractvalue { ptr, i64, i64 } %t932, 0 + %t936 = getelementptr inbounds %S.ast.Type, ptr %t935, i64 %t931 + %t937 = load %S.ast.Type, ptr %t936 + call void @finch.gen.emitFormat(ptr %t915, { ptr, i64, i64 } { ptr @.str.1970, i64 4, i64 0 }, { ptr, i64, i64 } %t928, %S.ast.Type %t937, i1 true) + store { ptr, i64, i64 } %t928, ptr %a938 + call void @finch_str_drop(ptr %a938) + call void @finch_str_drop(ptr %a914) + call void @finch_str_drop(ptr %a860) + br label %for.step3065 +for.step3065: + %t939 = load i64, ptr %a857 + %t940 = add i64 %t939, 1 + store i64 %t940, ptr %a857 + br label %for.cond3063 +for.end3066: + %t941 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t941, { ptr, i64, i64 } { ptr @.str.1973, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1974, i64 1, i64 0 }) + call void @finch_str_drop(ptr %a845) + call void @finch.drop.S_gen_StructDef(ptr %a841) + br label %endif3010 +endif3010: + br label %endif2993 +endif2993: + br label %endif2968 +endif2968: + br label %endif2959 +endif2959: + %t942 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t942, { ptr, i64, i64 } { ptr @.str.1975, i64 8, i64 0 }) + %t943 = load ptr, ptr %a1 + %t944 = load %S.gen.Saved, ptr %a32 + %t945 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1976, i64 21, i64 0 }, ptr %a947 + store { ptr, i64, i64 } %t945, ptr %a948 + call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948) + %t949 = load { ptr, i64, i64 }, ptr %a946 + store { ptr, i64, i64 } %t949, ptr %a951 + store { ptr, i64, i64 } { ptr @.str.1977, i64 18, i64 0 }, ptr %a952 + call void @finch_str_concat(ptr %a950, ptr %a951, ptr %a952) + store { ptr, i64, i64 } %t949, ptr %a953 + call void @finch_str_drop(ptr %a953) + %t954 = load { ptr, i64, i64 }, ptr %a950 + call void @finch.gen.endHelper(ptr %t943, %S.gen.Saved %t944, { ptr, i64, i64 } %t954) + store { ptr, i64, i64 } %t954, ptr %a955 + call void @finch_str_drop(ptr %a955) + %t956 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t956 +} + +define internal { ptr, i64, i64 } @finch.gen.intCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a7 = alloca i64, align 16 + %a10 = alloca i64, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i64 @finch.gen.bitsOf(%S.ast.Type %t5) + store i64 %t6, ptr %a7 + %t8 = load %S.ast.Type, ptr %a4 + %t9 = call i64 @finch.gen.bitsOf(%S.ast.Type %t8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a7 + %t12 = load i64, ptr %a10 + %t13 = icmp eq i64 %t11, %t12 + br i1 %t13, label %then3078, label %endif3080 +then3078: + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_copy(ptr %a16, ptr %a15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t17 +endif3080: + %t18 = load i64, ptr %a10 + %t19 = load i64, ptr %a7 + %t20 = icmp slt i64 %t18, %t19 + br i1 %t20, label %then3081, label %endif3083 +then3081: + %t21 = load ptr, ptr %a1 + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Type, ptr %a3 + %t24 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t22, %S.ast.Type %t23) + store { ptr, i64, i64 } { ptr @.str.1978, i64 6, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.1979, i64 1, i64 0 }, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + %t35 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t34, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1980, i64 4, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = load ptr, ptr %a1 + %t47 = load %S.ast.Type, ptr %a4 + %t48 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t46, %S.ast.Type %t47) + store { ptr, i64, i64 } %t45, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t45, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + %t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t21, { ptr, i64, i64 } %t54) + store { ptr, i64, i64 } %t54, ptr %a56 + call void @finch_str_drop(ptr %a56) + ret { ptr, i64, i64 } %t55 +endif3083: + %t57 = load %S.ast.Type, ptr %a3 + %t58 = call i1 @finch.gen.isSigned(%S.ast.Type %t57) + br i1 %t58, label %then3084, label %endif3086 +then3084: + %t59 = load ptr, ptr %a1 + %t60 = load ptr, ptr %a1 + %t61 = load %S.ast.Type, ptr %a3 + %t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t60, %S.ast.Type %t61) + store { ptr, i64, i64 } { ptr @.str.1981, i64 5, i64 0 }, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t67, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.1982, i64 1, i64 0 }, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + %t73 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t72, ptr %a75 + store { ptr, i64, i64 } %t73, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t72, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } %t78, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.1983, i64 4, i64 0 }, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + store { ptr, i64, i64 } %t78, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a79 + %t84 = load ptr, ptr %a1 + %t85 = load %S.ast.Type, ptr %a4 + %t86 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t84, %S.ast.Type %t85) + store { ptr, i64, i64 } %t83, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t83, ptr %a90 + call void @finch_str_drop(ptr %a90) + store { ptr, i64, i64 } %t86, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a87 + %t93 = call { ptr, i64, i64 } @finch.gen.op(ptr %t59, { ptr, i64, i64 } %t92) + store { ptr, i64, i64 } %t92, ptr %a94 + call void @finch_str_drop(ptr %a94) + ret { ptr, i64, i64 } %t93 +endif3086: + %t95 = load ptr, ptr %a1 + %t96 = load ptr, ptr %a1 + %t97 = load %S.ast.Type, ptr %a3 + %t98 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t97) + store { ptr, i64, i64 } { ptr @.str.1984, i64 5, i64 0 }, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.1985, i64 1, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t108, ptr %a111 + store { ptr, i64, i64 } %t109, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.1986, i64 4, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load ptr, ptr %a1 + %t121 = load %S.ast.Type, ptr %a4 + %t122 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t120, %S.ast.Type %t121) + store { ptr, i64, i64 } %t119, ptr %a124 + store { ptr, i64, i64 } %t122, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + store { ptr, i64, i64 } %t119, ptr %a126 + call void @finch_str_drop(ptr %a126) + store { ptr, i64, i64 } %t122, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a123 + %t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t95, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t128, ptr %a130 + call void @finch_str_drop(ptr %a130) + ret { ptr, i64, i64 } %t129 +} + +define internal { ptr, i64, i64 } @finch.gen.floatCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t8 = load { ptr, i64, i64 }, ptr %t7 + store { ptr, i64, i64 } %t6, ptr %a9 + store { ptr, i64, i64 } %t8, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then3087, label %endif3089 +then3087: + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_copy(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + ret { ptr, i64, i64 } %t16 +endif3089: + %t17 = load %S.ast.Type, ptr %a4 + %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) + %t19 = load %S.ast.Type, ptr %a3 + %t20 = call i64 @finch.gen.bitsOf(%S.ast.Type %t19) + %t21 = icmp sgt i64 %t18, %t20 + br i1 %t21, label %then3090, label %endif3092 +then3090: + %t22 = load ptr, ptr %a1 + %t23 = load ptr, ptr %a1 + %t24 = load %S.ast.Type, ptr %a3 + %t25 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t23, %S.ast.Type %t24) + store { ptr, i64, i64 } { ptr @.str.1987, i64 6, i64 0 }, ptr %a27 + store { ptr, i64, i64 } %t25, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.1988, i64 1, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + %t36 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t35, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t35, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.1989, i64 4, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t41, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = load ptr, ptr %a1 + %t48 = load %S.ast.Type, ptr %a4 + %t49 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t47, %S.ast.Type %t48) + store { ptr, i64, i64 } %t46, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t46, ptr %a53 + call void @finch_str_drop(ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a50 + %t56 = call { ptr, i64, i64 } @finch.gen.op(ptr %t22, { ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t55, ptr %a57 + call void @finch_str_drop(ptr %a57) + ret { ptr, i64, i64 } %t56 +endif3092: + %t58 = load ptr, ptr %a1 + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Type, ptr %a3 + %t61 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t59, %S.ast.Type %t60) + store { ptr, i64, i64 } { ptr @.str.1990, i64 8, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1991, i64 1, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t71, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.1992, i64 4, i64 0 }, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load ptr, ptr %a1 + %t84 = load %S.ast.Type, ptr %a4 + %t85 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t83, %S.ast.Type %t84) + store { ptr, i64, i64 } %t82, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t82, ptr %a89 + call void @finch_str_drop(ptr %a89) + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a86 + %t92 = call { ptr, i64, i64 } @finch.gen.op(ptr %t58, { ptr, i64, i64 } %t91) + store { ptr, i64, i64 } %t91, ptr %a93 + call void @finch_str_drop(ptr %a93) + ret { ptr, i64, i64 } %t92 +} + +define internal { ptr, i64, i64 } @finch.gen.intToFloat(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.isSigned(%S.ast.Type %t5) + br i1 %t6, label %then3093, label %endif3095 +then3093: + %t7 = load ptr, ptr %a1 + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Type, ptr %a3 + %t10 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t8, %S.ast.Type %t9) + store { ptr, i64, i64 } { ptr @.str.1993, i64 7, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t10, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1994, i64 1, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + %t21 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t20, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t20, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.1995, i64 4, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load ptr, ptr %a1 + %t33 = load %S.ast.Type, ptr %a4 + %t34 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t32, %S.ast.Type %t33) + store { ptr, i64, i64 } %t31, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t31, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t7, { ptr, i64, i64 } %t40) + store { ptr, i64, i64 } %t40, ptr %a42 + call void @finch_str_drop(ptr %a42) + ret { ptr, i64, i64 } %t41 +endif3095: + %t43 = load ptr, ptr %a1 + %t44 = load ptr, ptr %a1 + %t45 = load %S.ast.Type, ptr %a3 + %t46 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t44, %S.ast.Type %t45) + store { ptr, i64, i64 } { ptr @.str.1996, i64 7, i64 0 }, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.1997, i64 1, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + %t57 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t56, ptr %a59 + store { ptr, i64, i64 } %t57, ptr %a60 + call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) + store { ptr, i64, i64 } %t56, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load { ptr, i64, i64 }, ptr %a58 + store { ptr, i64, i64 } %t62, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.1998, i64 4, i64 0 }, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + %t68 = load ptr, ptr %a1 + %t69 = load %S.ast.Type, ptr %a4 + %t70 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t68, %S.ast.Type %t69) + store { ptr, i64, i64 } %t67, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t67, ptr %a74 + call void @finch_str_drop(ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a71 + %t77 = call { ptr, i64, i64 } @finch.gen.op(ptr %t43, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a78 + call void @finch_str_drop(ptr %a78) + ret { ptr, i64, i64 } %t77 +} + +define internal void @finch.copy.S_gen_Val(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Val, ptr %src + store %S.gen.Val %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal %S.gen.Val @finch.gen.coerce(ptr %p0, %S.gen.Val %p1, %S.ast.Type %p2, %S.ast.Node %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca %S.gen.Val, align 16 + %a12 = alloca %S.gen.Val, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a31 = alloca %S.ast.Type, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca %S.ast.Type, align 16 + %a67 = alloca %S.ast.Type, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca %S.ast.Type, align 16 + %a93 = alloca %S.ast.Type, align 16 + %a110 = alloca %S.ast.Type, align 16 + %a111 = alloca %S.ast.Type, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca %S.ast.Type, align 16 + %a162 = alloca %S.ast.Type, align 16 + %a175 = alloca %S.ast.Type, align 16 + %a176 = alloca %S.ast.Type, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca %S.ast.Type, align 16 + %a203 = alloca %S.ast.Type, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca %S.ast.Type, align 16 + %a233 = alloca %S.ast.Type, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca %S.gen.Val, align 16 + %a348 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %t6 + %t8 = load %S.ast.Type, ptr %a3 + %t9 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t8) + br i1 %t9, label %then3096, label %endif3098 +then3096: + %t10 = load %S.gen.Val, ptr %a2 + store %S.gen.Val %t10, ptr %a11 + call void @finch.copy.S_gen_Val(ptr %a12, ptr %a11) + %t13 = load %S.gen.Val, ptr %a12 + ret %S.gen.Val %t13 +endif3098: + %t14 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t15 = getelementptr inbounds %S.ast.Type, ptr %t14, i32 0, i32 0 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1999, i64 4, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.from3099 +logic.from3099: + br i1 %t20, label %logic.rhs3100, label %logic.end3101 +logic.rhs3100: + %t21 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.2000, i64 3, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br label %logic.rend3102 +logic.rend3102: + br label %logic.end3101 +logic.end3101: + %t27 = phi i1 [ false, %logic.from3099 ], [ %t26, %logic.rend3102 ] + br i1 %t27, label %then3103, label %endif3105 +then3103: + %t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.2001, i64 4, i64 0 }, 0 + %t29 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t29, ptr %a30 + call void @finch.copy.S_ast_Type(ptr %a31, ptr %a30) + %t32 = load %S.ast.Type, ptr %a31 + %t33 = insertvalue %S.gen.Val %t28, %S.ast.Type %t32, 1 + ret %S.gen.Val %t33 +endif3105: + %t34 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t35 = getelementptr inbounds %S.ast.Type, ptr %t34, i32 0, i32 0 + %t36 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.2002, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.from3106 +logic.from3106: + br i1 %t40, label %logic.rhs3107, label %logic.end3108 +logic.rhs3107: + %t41 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t42, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.2003, i64 3, i64 0 }, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend3109 +logic.rend3109: + br label %logic.end3108 +logic.end3108: + %t47 = phi i1 [ false, %logic.from3106 ], [ %t46, %logic.rend3109 ] + br label %logic.from3110 +logic.from3110: + br i1 %t47, label %logic.rhs3111, label %logic.end3112 +logic.rhs3111: + %t48 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t49 = getelementptr inbounds %S.ast.Type, ptr %t48, i32 0, i32 1 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 + %t51 = load i64, ptr %t50 + %t52 = icmp eq i64 %t51, 0 + br label %logic.from3113 +logic.from3113: + br i1 %t52, label %logic.end3115, label %logic.rhs3114 +logic.rhs3114: + %t53 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = icmp eq i64 %t55, 0 + br label %logic.rend3116 +logic.rend3116: + br label %logic.end3115 +logic.end3115: + %t57 = phi i1 [ true, %logic.from3113 ], [ %t56, %logic.rend3116 ] + br label %logic.rend3117 +logic.rend3117: + br label %logic.end3112 +logic.end3112: + %t58 = phi i1 [ false, %logic.from3110 ], [ %t57, %logic.rend3117 ] + br i1 %t58, label %then3118, label %endif3120 +then3118: + %t59 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + call void @finch_str_copy(ptr %a62, ptr %a61) + %t63 = load { ptr, i64, i64 }, ptr %a62 + %t64 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t63, 0 + %t65 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t65, ptr %a66 + call void @finch.copy.S_ast_Type(ptr %a67, ptr %a66) + %t68 = load %S.ast.Type, ptr %a67 + %t69 = insertvalue %S.gen.Val %t64, %S.ast.Type %t68, 1 + ret %S.gen.Val %t69 +endif3120: + %t70 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t71 = load %S.ast.Type, ptr %t70 + %t72 = call i1 @finch.gen.isInt(%S.ast.Type %t71) + br label %logic.from3121 +logic.from3121: + br i1 %t72, label %logic.rhs3122, label %logic.end3123 +logic.rhs3122: + %t73 = load %S.ast.Type, ptr %a3 + %t74 = call i1 @finch.gen.isInt(%S.ast.Type %t73) + br label %logic.rend3124 +logic.rend3124: + br label %logic.end3123 +logic.end3123: + %t75 = phi i1 [ false, %logic.from3121 ], [ %t74, %logic.rend3124 ] + br i1 %t75, label %then3125, label %endif3127 +then3125: + %t76 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t77 = load i1, ptr %t76 + br label %logic.from3128 +logic.from3128: + br i1 %t77, label %logic.rhs3129, label %logic.end3130 +logic.rhs3129: + %t78 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + %t80 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t81 = load %S.ast.Type, ptr %t80 + %t82 = load %S.ast.Type, ptr %a3 + %t83 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t79, %S.ast.Type %t81, %S.ast.Type %t82) + br label %logic.rend3131 +logic.rend3131: + br label %logic.end3130 +logic.end3130: + %t84 = phi i1 [ false, %logic.from3128 ], [ %t83, %logic.rend3131 ] + br i1 %t84, label %then3132, label %endif3134 +then3132: + %t85 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t86, ptr %a87 + call void @finch_str_copy(ptr %a88, ptr %a87) + %t89 = load { ptr, i64, i64 }, ptr %a88 + %t90 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t89, 0 + %t91 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t91, ptr %a92 + call void @finch.copy.S_ast_Type(ptr %a93, ptr %a92) + %t94 = load %S.ast.Type, ptr %a93 + %t95 = insertvalue %S.gen.Val %t90, %S.ast.Type %t94, 1 + %t96 = insertvalue %S.gen.Val %t95, i1 true, 3 + ret %S.gen.Val %t96 +endif3134: + %t97 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t98 = load %S.ast.Type, ptr %t97 + %t99 = load %S.ast.Type, ptr %a3 + %t100 = call i1 @finch.gen.widens(%S.ast.Type %t98, %S.ast.Type %t99) + br i1 %t100, label %then3135, label %endif3137 +then3135: + %t101 = load ptr, ptr %a1 + %t102 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t103 = load { ptr, i64, i64 }, ptr %t102 + %t104 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t105 = load %S.ast.Type, ptr %t104 + %t106 = load %S.ast.Type, ptr %a3 + %t107 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t101, { ptr, i64, i64 } %t103, %S.ast.Type %t105, %S.ast.Type %t106) + %t108 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t107, 0 + %t109 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t109, ptr %a110 + call void @finch.copy.S_ast_Type(ptr %a111, ptr %a110) + %t112 = load %S.ast.Type, ptr %a111 + %t113 = insertvalue %S.gen.Val %t108, %S.ast.Type %t112, 1 + ret %S.gen.Val %t113 +endif3137: + %t114 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t115 = load i1, ptr %t114 + br i1 %t115, label %then3138, label %endif3140 +then3138: + %t116 = load ptr, ptr %a1 + %t117 = load %S.ast.Node, ptr %a4 + %t118 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t119 = load { ptr, i64, i64 }, ptr %t118 + store { ptr, i64, i64 } { ptr @.str.2004, i64 11, i64 0 }, ptr %a121 + store { ptr, i64, i64 } %t119, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.2005, i64 16, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = load %S.ast.Type, ptr %a3 + %t130 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t129) + store { ptr, i64, i64 } %t128, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t128, ptr %a134 + call void @finch_str_drop(ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a131 + call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } %t136) + store { ptr, i64, i64 } %t136, ptr %a137 + call void @finch_str_drop(ptr %a137) + br label %endif3140 +endif3140: + br label %endif3127 +endif3127: + %t138 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t139 = load %S.ast.Type, ptr %t138 + %t140 = call i1 @finch.gen.isInt(%S.ast.Type %t139) + br label %logic.from3141 +logic.from3141: + br i1 %t140, label %logic.rhs3142, label %logic.end3143 +logic.rhs3142: + %t141 = load %S.ast.Type, ptr %a3 + %t142 = call i1 @finch.gen.isFloat(%S.ast.Type %t141) + br label %logic.rend3144 +logic.rend3144: + br label %logic.end3143 +logic.end3143: + %t143 = phi i1 [ false, %logic.from3141 ], [ %t142, %logic.rend3144 ] + br i1 %t143, label %then3145, label %endif3147 +then3145: + %t144 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t145 = load i1, ptr %t144 + br label %logic.from3148 +logic.from3148: + br i1 %t145, label %logic.rhs3149, label %logic.end3150 +logic.rhs3149: + %t146 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t147 = load { ptr, i64, i64 }, ptr %t146 + store { ptr, i64, i64 } %t147, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.2006, i64 5, i64 0 }, ptr %a149 + %t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149) + %t151 = icmp ne i32 %t150, 0 + br label %logic.rend3151 +logic.rend3151: + br label %logic.end3150 +logic.end3150: + %t152 = phi i1 [ false, %logic.from3148 ], [ %t151, %logic.rend3151 ] + br i1 %t152, label %then3152, label %endif3154 +then3152: + %t153 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t154 = load { ptr, i64, i64 }, ptr %t153 + store { ptr, i64, i64 } %t154, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.2007, i64 2, i64 0 }, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + %t159 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t158, 0 + %t160 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t160, ptr %a161 + call void @finch.copy.S_ast_Type(ptr %a162, ptr %a161) + %t163 = load %S.ast.Type, ptr %a162 + %t164 = insertvalue %S.gen.Val %t159, %S.ast.Type %t163, 1 + %t165 = insertvalue %S.gen.Val %t164, i1 true, 3 + ret %S.gen.Val %t165 +endif3154: + %t166 = load ptr, ptr %a1 + %t167 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t168 = load { ptr, i64, i64 }, ptr %t167 + %t169 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t170 = load %S.ast.Type, ptr %t169 + %t171 = load %S.ast.Type, ptr %a3 + %t172 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t166, { ptr, i64, i64 } %t168, %S.ast.Type %t170, %S.ast.Type %t171) + %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 + %t174 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t174, ptr %a175 + call void @finch.copy.S_ast_Type(ptr %a176, ptr %a175) + %t177 = load %S.ast.Type, ptr %a176 + %t178 = insertvalue %S.gen.Val %t173, %S.ast.Type %t177, 1 + ret %S.gen.Val %t178 +endif3147: + %t179 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i32 0, i32 0 + %t181 = load { ptr, i64, i64 }, ptr %t180 + store { ptr, i64, i64 } %t181, ptr %a182 + store { ptr, i64, i64 } { ptr @.str.2008, i64 3, i64 0 }, ptr %a183 + %t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183) + %t185 = icmp ne i32 %t184, 0 + br label %logic.from3155 +logic.from3155: + br i1 %t185, label %logic.rhs3156, label %logic.end3157 +logic.rhs3156: + %t186 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t187 = load { ptr, i64, i64 }, ptr %t186 + store { ptr, i64, i64 } %t187, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.2009, i64 5, i64 0 }, ptr %a189 + %t190 = call i32 @finch_str_eq(ptr %a188, ptr %a189) + %t191 = icmp ne i32 %t190, 0 + br label %logic.rend3158 +logic.rend3158: + br label %logic.end3157 +logic.end3157: + %t192 = phi i1 [ false, %logic.from3155 ], [ %t191, %logic.rend3158 ] + br i1 %t192, label %then3159, label %endif3161 +then3159: + %t193 = load ptr, ptr %a1 + %t194 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t195 = load { ptr, i64, i64 }, ptr %t194 + %t196 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t197 = load %S.ast.Type, ptr %t196 + %t198 = load %S.ast.Type, ptr %a3 + %t199 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t193, { ptr, i64, i64 } %t195, %S.ast.Type %t197, %S.ast.Type %t198) + %t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t199, 0 + %t201 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t201, ptr %a202 + call void @finch.copy.S_ast_Type(ptr %a203, ptr %a202) + %t204 = load %S.ast.Type, ptr %a203 + %t205 = insertvalue %S.gen.Val %t200, %S.ast.Type %t204, 1 + ret %S.gen.Val %t205 +endif3161: + %t206 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t207 = getelementptr inbounds %S.ast.Type, ptr %t206, i32 0, i32 0 + %t208 = load { ptr, i64, i64 }, ptr %t207 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.2010, i64 5, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br label %logic.from3162 +logic.from3162: + br i1 %t212, label %logic.rhs3163, label %logic.end3164 +logic.rhs3163: + %t213 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t214 = load { ptr, i64, i64 }, ptr %t213 + store { ptr, i64, i64 } %t214, ptr %a215 + store { ptr, i64, i64 } { ptr @.str.2011, i64 3, i64 0 }, ptr %a216 + %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) + %t218 = icmp ne i32 %t217, 0 + br label %logic.rend3165 +logic.rend3165: + br label %logic.end3164 +logic.end3164: + %t219 = phi i1 [ false, %logic.from3162 ], [ %t218, %logic.rend3165 ] + br label %logic.from3166 +logic.from3166: + br i1 %t219, label %logic.rhs3167, label %logic.end3168 +logic.rhs3167: + %t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t221 = load i1, ptr %t220 + br label %logic.rend3169 +logic.rend3169: + br label %logic.end3168 +logic.end3168: + %t222 = phi i1 [ false, %logic.from3166 ], [ %t221, %logic.rend3169 ] + br i1 %t222, label %then3170, label %endif3172 +then3170: + %t223 = load ptr, ptr %a1 + %t224 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t225 = load { ptr, i64, i64 }, ptr %t224 + %t226 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t227 = load %S.ast.Type, ptr %t226 + %t228 = load %S.ast.Type, ptr %a3 + %t229 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t223, { ptr, i64, i64 } %t225, %S.ast.Type %t227, %S.ast.Type %t228) + %t230 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t229, 0 + %t231 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t231, ptr %a232 + call void @finch.copy.S_ast_Type(ptr %a233, ptr %a232) + %t234 = load %S.ast.Type, ptr %a233 + %t235 = insertvalue %S.gen.Val %t230, %S.ast.Type %t234, 1 + ret %S.gen.Val %t235 +endif3172: + %t236 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t236, ptr %a238 + store { ptr, i64, i64 } { ptr @.str.2012, i64 9, i64 0 }, ptr %a239 + call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a237 + %t241 = load %S.ast.Type, ptr %a3 + %t242 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t241) + store { ptr, i64, i64 } %t240, ptr %a244 + store { ptr, i64, i64 } %t242, ptr %a245 + call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) + store { ptr, i64, i64 } %t240, ptr %a246 + call void @finch_str_drop(ptr %a246) + store { ptr, i64, i64 } %t242, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a243 + store { ptr, i64, i64 } %t248, ptr %a250 + store { ptr, i64, i64 } { ptr @.str.2013, i64 14, i64 0 }, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t248, ptr %a252 + call void @finch_str_drop(ptr %a252) + %t253 = load { ptr, i64, i64 }, ptr %a249 + %t254 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t255 = load %S.ast.Type, ptr %t254 + %t256 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t255) + store { ptr, i64, i64 } %t253, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t253, ptr %a260 + call void @finch_str_drop(ptr %a260) + store { ptr, i64, i64 } %t256, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t262, ptr %a263 + %t264 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t265 = load %S.ast.Type, ptr %t264 + %t266 = call i1 @finch.gen.isNumber(%S.ast.Type %t265) + br label %logic.from3173 +logic.from3173: + br i1 %t266, label %logic.rhs3174, label %logic.end3175 +logic.rhs3174: + %t267 = load %S.ast.Type, ptr %a3 + %t268 = call i1 @finch.gen.isNumber(%S.ast.Type %t267) + br label %logic.rend3176 +logic.rend3176: + br label %logic.end3175 +logic.end3175: + %t269 = phi i1 [ false, %logic.from3173 ], [ %t268, %logic.rend3176 ] + br i1 %t269, label %then3177, label %endif3179 +then3177: + %t270 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t270, ptr %a272 + store { ptr, i64, i64 } { ptr @.str.2014, i64 6, i64 0 }, ptr %a273 + call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a271 + %t275 = load %S.ast.Type, ptr %a3 + %t276 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t275) + store { ptr, i64, i64 } %t274, ptr %a278 + store { ptr, i64, i64 } %t276, ptr %a279 + call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) + store { ptr, i64, i64 } %t274, ptr %a280 + call void @finch_str_drop(ptr %a280) + store { ptr, i64, i64 } %t276, ptr %a281 + call void @finch_str_drop(ptr %a281) + %t282 = load { ptr, i64, i64 }, ptr %a277 + store { ptr, i64, i64 } %t282, ptr %a284 + store { ptr, i64, i64 } { ptr @.str.2015, i64 16, i64 0 }, ptr %a285 + call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285) + store { ptr, i64, i64 } %t282, ptr %a286 + call void @finch_str_drop(ptr %a286) + %t287 = load { ptr, i64, i64 }, ptr %a283 + %t288 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t287, ptr %a263 + store { ptr, i64, i64 } %t288, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t291 = load %S.ast.Type, ptr %t290 + %t292 = call i1 @finch.gen.isFloat(%S.ast.Type %t291) + br label %logic.from3180 +logic.from3180: + br i1 %t292, label %logic.rhs3181, label %logic.end3182 +logic.rhs3181: + %t293 = load %S.ast.Type, ptr %a3 + %t294 = call i1 @finch.gen.isInt(%S.ast.Type %t293) + br label %logic.rend3183 +logic.rend3183: + br label %logic.end3182 +logic.end3182: + %t295 = phi i1 [ false, %logic.from3180 ], [ %t294, %logic.rend3183 ] + br i1 %t295, label %then3184, label %endif3186 +then3184: + %t296 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.2016, i64 26, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + %t301 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t300, ptr %a263 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + br label %endif3186 +endif3186: + %t303 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t303, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.2017, i64 1, i64 0 }, ptr %a306 + call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a304 + %t308 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t307, ptr %a263 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif3179 +endif3179: + %t310 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t311 = load { ptr, i64, i64 }, ptr %t310 + store { ptr, i64, i64 } %t311, ptr %a312 + store { ptr, i64, i64 } { ptr @.str.2018, i64 3, i64 0 }, ptr %a313 + %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) + %t315 = icmp ne i32 %t314, 0 + br label %logic.from3187 +logic.from3187: + br i1 %t315, label %logic.rhs3188, label %logic.end3189 +logic.rhs3188: + %t316 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t317 = load %S.ast.Type, ptr %t316 + %t318 = call i1 @finch.gen.isNumber(%S.ast.Type %t317) + br label %logic.from3190 +logic.from3190: + br i1 %t318, label %logic.end3192, label %logic.rhs3191 +logic.rhs3191: + %t319 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t320 = getelementptr inbounds %S.ast.Type, ptr %t319, i32 0, i32 0 + %t321 = load { ptr, i64, i64 }, ptr %t320 + store { ptr, i64, i64 } %t321, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.2019, i64 4, i64 0 }, ptr %a323 + %t324 = call i32 @finch_str_eq(ptr %a322, ptr %a323) + %t325 = icmp ne i32 %t324, 0 + br label %logic.rend3193 +logic.rend3193: + br label %logic.end3192 +logic.end3192: + %t326 = phi i1 [ true, %logic.from3190 ], [ %t325, %logic.rend3193 ] + br label %logic.from3194 +logic.from3194: + br i1 %t326, label %logic.end3196, label %logic.rhs3195 +logic.rhs3195: + %t327 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t328 = getelementptr inbounds %S.ast.Type, ptr %t327, i32 0, i32 0 + %t329 = load { ptr, i64, i64 }, ptr %t328 + store { ptr, i64, i64 } %t329, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.2020, i64 4, i64 0 }, ptr %a331 + %t332 = call i32 @finch_str_eq(ptr %a330, ptr %a331) + %t333 = icmp ne i32 %t332, 0 + br label %logic.rend3197 +logic.rend3197: + br label %logic.end3196 +logic.end3196: + %t334 = phi i1 [ true, %logic.from3194 ], [ %t333, %logic.rend3197 ] + br label %logic.rend3198 +logic.rend3198: + br label %logic.end3189 +logic.end3189: + %t335 = phi i1 [ false, %logic.from3187 ], [ %t334, %logic.rend3198 ] + br i1 %t335, label %then3199, label %endif3201 +then3199: + %t336 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.2021, i64 34, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a337 + %t341 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t340, ptr %a263 + store { ptr, i64, i64 } %t341, ptr %a342 + call void @finch_str_drop(ptr %a342) + br label %endif3201 +endif3201: + %t343 = load ptr, ptr %a1 + %t344 = load %S.ast.Node, ptr %a4 + %t345 = load { ptr, i64, i64 }, ptr %a263 + call void @finch.gen.fail(ptr %t343, %S.ast.Node %t344, { ptr, i64, i64 } %t345) + %t346 = load %S.gen.Val, ptr %a2 + store %S.gen.Val %t346, ptr %a347 + call void @finch.copy.S_gen_Val(ptr %a348, ptr %a347) + %t349 = load %S.gen.Val, ptr %a348 + call void @finch_str_drop(ptr %a263) + ret %S.gen.Val %t349 +} + +define internal i64 @finch.gen.lookup(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a19 = alloca i64, align 16 + %a32 = alloca i64, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3202, label %ok3203 +panic3202: + call void @finch_panic(ptr @.str.2022, i64 1346, ptr @.str.2023) + unreachable +ok3203: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond3204 +for.cond3204: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body3205, label %for.end3207 +for.body3205: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic3208, label %ok3209 +panic3208: + call void @finch_panic(ptr @.str.2024, i64 1347, ptr @.str.2025) + unreachable +ok3209: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 10 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = sub i64 %t15, 1 + %t17 = load i64, ptr %a8 + %t18 = sub i64 %t16, %t17 + store i64 %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic3210, label %ok3211 +panic3210: + call void @finch_panic(ptr @.str.2026, i64 1348, ptr @.str.2027) + unreachable +ok3211: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 + %t23 = load i64, ptr %a19 + %t24 = load { ptr, i64, i64 }, ptr %t22 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range3212, label %inrange3213 +range3212: + call void @finch_panic_index(ptr @.str.2028, i64 1348, i64 %t23, i64 %t25) + unreachable +inrange3213: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 + %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t31 = load i64, ptr %t30 + store i64 0, ptr %a32 + br label %for.cond3214 +for.cond3214: + %t33 = load i64, ptr %a32 + %t34 = icmp slt i64 %t33, %t31 + br i1 %t34, label %for.body3215, label %for.end3217 +for.body3215: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic3218, label %ok3219 +panic3218: + call void @finch_panic(ptr @.str.2029, i64 1349, ptr @.str.2030) + unreachable +ok3219: + %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 10 + %t38 = load i64, ptr %a19 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range3220, label %inrange3221 +range3220: + call void @finch_panic_index(ptr @.str.2031, i64 1349, i64 %t38, i64 %t40) + unreachable +inrange3221: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.gen.Scope, ptr %t42, i64 %t38 + %t44 = getelementptr inbounds %S.gen.Scope, ptr %t43, i32 0, i32 0 + %t45 = load i64, ptr %a32 + %t46 = load { ptr, i64, i64 }, ptr %t44 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 %t45, %t47 + br i1 %t48, label %range3222, label %inrange3223 +range3222: + call void @finch_panic_index(ptr @.str.2032, i64 1349, i64 %t45, i64 %t47) + unreachable +inrange3223: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.gen.Var, ptr %t49, i64 %t45 + %t51 = getelementptr inbounds %S.gen.Var, ptr %t50, i32 0, i32 0 + %t52 = load { ptr, i64, i64 }, ptr %t51 + %t53 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t52, ptr %a54 + store { ptr, i64, i64 } %t53, ptr %a55 + %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) + %t57 = icmp ne i32 %t56, 0 + br i1 %t57, label %then3224, label %endif3226 +then3224: + %t58 = load ptr, ptr %a1 + %t59 = icmp eq ptr %t58, null + br i1 %t59, label %panic3227, label %ok3228 +panic3227: + call void @finch_panic(ptr @.str.2033, i64 1350, ptr @.str.2034) + unreachable +ok3228: + %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 44 + %t61 = load i1, ptr %t60 + br label %logic.from3229 +logic.from3229: + br i1 %t61, label %logic.rhs3230, label %logic.end3231 +logic.rhs3230: + %t62 = load ptr, ptr %a1 + %t63 = icmp eq ptr %t62, null + br i1 %t63, label %panic3232, label %ok3233 +panic3232: + call void @finch_panic(ptr @.str.2035, i64 1350, ptr @.str.2036) + unreachable +ok3233: + %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 10 + %t65 = load i64, ptr %a19 + %t66 = load { ptr, i64, i64 }, ptr %t64 + %t67 = extractvalue { ptr, i64, i64 } %t66, 1 + %t68 = icmp uge i64 %t65, %t67 + br i1 %t68, label %range3234, label %inrange3235 +range3234: + call void @finch_panic_index(ptr @.str.2037, i64 1350, i64 %t65, i64 %t67) + unreachable +inrange3235: + %t69 = extractvalue { ptr, i64, i64 } %t66, 0 + %t70 = getelementptr inbounds %S.gen.Scope, ptr %t69, i64 %t65 + %t71 = getelementptr inbounds %S.gen.Scope, ptr %t70, i32 0, i32 0 + %t72 = load i64, ptr %a32 + %t73 = load { ptr, i64, i64 }, ptr %t71 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 %t72, %t74 + br i1 %t75, label %range3236, label %inrange3237 +range3236: + call void @finch_panic_index(ptr @.str.2038, i64 1350, i64 %t72, i64 %t74) + unreachable +inrange3237: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.gen.Var, ptr %t76, i64 %t72 + %t78 = getelementptr inbounds %S.gen.Var, ptr %t77, i32 0, i32 4 + %t79 = load i64, ptr %t78 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic3238, label %ok3239 +panic3238: + call void @finch_panic(ptr @.str.2039, i64 1350, ptr @.str.2040) + unreachable +ok3239: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 45 + %t83 = load i64, ptr %t82 + %t84 = icmp sge i64 %t79, %t83 + br label %logic.rend3240 +logic.rend3240: + br label %logic.end3231 +logic.end3231: + %t85 = phi i1 [ false, %logic.from3229 ], [ %t84, %logic.rend3240 ] + br i1 %t85, label %then3241, label %endif3243 +then3241: + br label %for.step3216 +endif3243: + %t86 = load i64, ptr %a19 + %t87 = mul i64 %t86, 100000 + %t88 = load i64, ptr %a32 + %t89 = add i64 %t87, %t88 + ret i64 %t89 +endif3226: + br label %for.step3216 +for.step3216: + %t90 = load i64, ptr %a32 + %t91 = add i64 %t90, 1 + store i64 %t91, ptr %a32 + br label %for.cond3214 +for.end3217: + br label %for.step3206 +for.step3206: + %t92 = load i64, ptr %a8 + %t93 = add i64 %t92, 1 + store i64 %t93, ptr %a8 + br label %for.cond3204 +for.end3207: + ret i64 -1 +} + +define internal void @finch.copy.S_gen_Var(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Var, ptr %src + store %S.gen.Var %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 7 + %t9 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal %S.gen.Var @finch.gen.varAt(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a22 = alloca %S.gen.Var, align 16 + %a23 = alloca %S.gen.Var, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3244, label %ok3245 +panic3244: + call void @finch_panic(ptr @.str.2041, i64 1361, ptr @.str.2042) + unreachable +ok3245: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = load i64, ptr %a2 + %t7 = sdiv i64 %t6, 100000 + %t8 = load { ptr, i64, i64 }, ptr %t5 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range3246, label %inrange3247 +range3246: + call void @finch_panic_index(ptr @.str.2043, i64 1361, i64 %t7, i64 %t9) + unreachable +inrange3247: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i64 %t7 + %t13 = getelementptr inbounds %S.gen.Scope, ptr %t12, i32 0, i32 0 + %t14 = load i64, ptr %a2 + %t15 = srem i64 %t14, 100000 + %t16 = load { ptr, i64, i64 }, ptr %t13 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range3248, label %inrange3249 +range3248: + call void @finch_panic_index(ptr @.str.2044, i64 1361, i64 %t15, i64 %t17) + unreachable +inrange3249: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.Var, ptr %t19, i64 %t15 + %t21 = load %S.gen.Var, ptr %t20 + store %S.gen.Var %t21, ptr %a22 + call void @finch.copy.S_gen_Var(ptr %a23, ptr %a22) + %t24 = load %S.gen.Var, ptr %a23 + ret %S.gen.Var %t24 +} + +define internal i64 @finch.gen.findFn(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic3250, label %ok3251 +panic3250: + call void @finch_panic(ptr @.str.2045, i64 1365, ptr @.str.2046) + unreachable +ok3251: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond3252 +for.cond3252: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body3253, label %for.end3255 +for.body3253: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic3256, label %ok3257 +panic3256: + call void @finch_panic(ptr @.str.2047, i64 1366, ptr @.str.2048) + unreachable +ok3257: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 15 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range3258, label %inrange3259 +range3258: + call void @finch_panic_index(ptr @.str.2049, i64 1366, i64 %t15, i64 %t17) + unreachable +inrange3259: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from3260 +logic.from3260: + br i1 %t27, label %logic.rhs3261, label %logic.end3262 +logic.rhs3261: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic3263, label %ok3264 +panic3263: + call void @finch_panic(ptr @.str.2050, i64 1366, ptr @.str.2051) + unreachable +ok3264: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 15 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range3265, label %inrange3266 +range3265: + call void @finch_panic_index(ptr @.str.2052, i64 1366, i64 %t31, i64 %t33) + unreachable +inrange3266: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend3267 +logic.rend3267: + br label %logic.end3262 +logic.end3262: + %t44 = phi i1 [ false, %logic.from3260 ], [ %t43, %logic.rend3267 ] + br label %logic.from3268 +logic.from3268: + br i1 %t44, label %logic.rhs3269, label %logic.end3270 +logic.rhs3269: + %t45 = load ptr, ptr %a1 + %t46 = icmp eq ptr %t45, null + br i1 %t46, label %panic3271, label %ok3272 +panic3271: + call void @finch_panic(ptr @.str.2053, i64 1366, ptr @.str.2054) + unreachable +ok3272: + %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 15 + %t48 = load i64, ptr %a9 + %t49 = load { ptr, i64, i64 }, ptr %t47 + %t50 = extractvalue { ptr, i64, i64 } %t49, 1 + %t51 = icmp uge i64 %t48, %t50 + br i1 %t51, label %range3273, label %inrange3274 +range3273: + call void @finch_panic_index(ptr @.str.2055, i64 1366, i64 %t48, i64 %t50) + unreachable +inrange3274: + %t52 = extractvalue { ptr, i64, i64 } %t49, 0 + %t53 = getelementptr inbounds %S.gen.FnSig, ptr %t52, i64 %t48 + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 2 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = icmp eq i64 %t56, 0 + br label %logic.rend3275 +logic.rend3275: + br label %logic.end3270 +logic.end3270: + %t58 = phi i1 [ false, %logic.from3268 ], [ %t57, %logic.rend3275 ] + br i1 %t58, label %then3276, label %endif3278 +then3276: + %t59 = load i64, ptr %a9 + ret i64 %t59 +endif3278: + br label %for.step3254 +for.step3254: + %t60 = load i64, ptr %a9 + %t61 = add i64 %t60, 1 + store i64 %t61, ptr %a9 + br label %for.cond3252 +for.end3255: + ret i64 -1 +} + +define internal i64 @finch.gen.findMethod(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic3279, label %ok3280 +panic3279: + call void @finch_panic(ptr @.str.2056, i64 1374, ptr @.str.2057) + unreachable +ok3280: + %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 15 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 + %t9 = load i64, ptr %t8 + store i64 0, ptr %a10 + br label %for.cond3281 +for.cond3281: + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, %t9 + br i1 %t12, label %for.body3282, label %for.end3284 +for.body3282: + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic3285, label %ok3286 +panic3285: + call void @finch_panic(ptr @.str.2058, i64 1375, ptr @.str.2059) + unreachable +ok3286: + %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 15 + %t16 = load i64, ptr %a10 + %t17 = load { ptr, i64, i64 }, ptr %t15 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range3287, label %inrange3288 +range3287: + call void @finch_panic_index(ptr @.str.2060, i64 1375, i64 %t16, i64 %t18) + unreachable +inrange3288: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i64 %t16 + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %t21, i32 0, i32 3 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } %t24, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.from3289 +logic.from3289: + br i1 %t28, label %logic.rhs3290, label %logic.end3291 +logic.rhs3290: + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic3292, label %ok3293 +panic3292: + call void @finch_panic(ptr @.str.2061, i64 1375, ptr @.str.2062) + unreachable +ok3293: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 15 + %t32 = load i64, ptr %a10 + %t33 = load { ptr, i64, i64 }, ptr %t31 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range3294, label %inrange3295 +range3294: + call void @finch_panic_index(ptr @.str.2063, i64 1375, i64 %t32, i64 %t34) + unreachable +inrange3295: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i64 %t32 + %t38 = getelementptr inbounds %S.gen.FnSig, ptr %t37, i32 0, i32 2 + %t39 = load { ptr, i64, i64 }, ptr %t38 + %t40 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } %t40, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br label %logic.rend3296 +logic.rend3296: + br label %logic.end3291 +logic.end3291: + %t45 = phi i1 [ false, %logic.from3289 ], [ %t44, %logic.rend3296 ] + br label %logic.from3297 +logic.from3297: + br i1 %t45, label %logic.rhs3298, label %logic.end3299 +logic.rhs3298: + %t46 = load ptr, ptr %a1 + %t47 = icmp eq ptr %t46, null + br i1 %t47, label %panic3300, label %ok3301 +panic3300: + call void @finch_panic(ptr @.str.2064, i64 1375, ptr @.str.2065) + unreachable +ok3301: + %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 15 + %t49 = load i64, ptr %a10 + %t50 = load { ptr, i64, i64 }, ptr %t48 + %t51 = extractvalue { ptr, i64, i64 } %t50, 1 + %t52 = icmp uge i64 %t49, %t51 + br i1 %t52, label %range3302, label %inrange3303 +range3302: + call void @finch_panic_index(ptr @.str.2066, i64 1375, i64 %t49, i64 %t51) + unreachable +inrange3303: + %t53 = extractvalue { ptr, i64, i64 } %t50, 0 + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i64 %t49 + %t55 = getelementptr inbounds %S.gen.FnSig, ptr %t54, i32 0, i32 1 + %t56 = load { ptr, i64, i64 }, ptr %t55 + %t57 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } %t57, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.rend3304 +logic.rend3304: + br label %logic.end3299 +logic.end3299: + %t62 = phi i1 [ false, %logic.from3297 ], [ %t61, %logic.rend3304 ] + br i1 %t62, label %then3305, label %endif3307 +then3305: + %t63 = load i64, ptr %a10 + ret i64 %t63 +endif3307: + br label %for.step3283 +for.step3283: + %t64 = load i64, ptr %a10 + %t65 = add i64 %t64, 1 + store i64 %t65, ptr %a10 + br label %for.cond3281 +for.end3284: + ret i64 -1 +} + +define internal i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca i64, align 16 + %a41 = alloca i64, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 28, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.2067, i64 5, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.2068, i64 4, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.2069, i64 3, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.2070, i64 3, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.2071, i64 4, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.2072, i64 5, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.2073, i64 4, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.2074, i64 9, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.2075, i64 10, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.2076, i64 11, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.2077, i64 5, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.2078, i64 4, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.2079, i64 5, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.2080, i64 3, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.2081, i64 4, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.2082, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 + store { ptr, i64, i64 } { ptr @.str.2083, i64 11, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 + store { ptr, i64, i64 } { ptr @.str.2084, i64 2, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 + store { ptr, i64, i64 } { ptr @.str.2085, i64 3, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 + store { ptr, i64, i64 } { ptr @.str.2086, i64 3, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 + store { ptr, i64, i64 } { ptr @.str.2087, i64 3, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 + store { ptr, i64, i64 } { ptr @.str.2088, i64 2, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 + store { ptr, i64, i64 } { ptr @.str.2089, i64 3, i64 0 }, ptr %t26 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 23 + store { ptr, i64, i64 } { ptr @.str.2090, i64 3, i64 0 }, ptr %t27 + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 24 + store { ptr, i64, i64 } { ptr @.str.2091, i64 3, i64 0 }, ptr %t28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 25 + store { ptr, i64, i64 } { ptr @.str.2092, i64 3, i64 0 }, ptr %t29 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 26 + store { ptr, i64, i64 } { ptr @.str.2093, i64 3, i64 0 }, ptr %t30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 27 + store { ptr, i64, i64 } { ptr @.str.2094, i64 5, i64 0 }, ptr %t31 + %t32 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t33 = insertvalue { ptr, i64, i64 } %t32, i64 28, 1 + %t34 = insertvalue { ptr, i64, i64 } %t33, i64 28, 2 + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a35, i32 0, i32 1 + %t37 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a38 + %t39 = load i64, ptr %t36 + %t40 = load ptr, ptr %a35 + store i64 0, ptr %a41 + br label %find.cond3308 +find.cond3308: + %t42 = load i64, ptr %a41 + %t43 = icmp slt i64 %t42, %t39 + br i1 %t43, label %find.body3309, label %find.end3312 +find.body3309: + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t42 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } %t37, ptr %a47 + %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + br i1 %t49, label %find.hit3310, label %find.next3311 +find.hit3310: + store i64 %t42, ptr %a38 + br label %find.end3312 +find.next3311: + %t50 = add i64 %t42, 1 + store i64 %t50, ptr %a41 + br label %find.cond3308 +find.end3312: + %t51 = load i64, ptr %a38 + %t52 = icmp sge i64 %t51, 0 + call void @finch.drop.arr_str(ptr %a35) + ret i1 %t52 +} + +define internal { ptr, i64, i64 } @finch.gen.addVar(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4, i1 %p5, i1 %p6) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca i1, align 16 + %a7 = alloca i1, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca i64, align 16 + %a93 = alloca i1, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca %S.ast.Type, align 16 + %a142 = alloca %S.ast.Type, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca %S.ast.Node, align 16 + %a238 = alloca %S.ast.Node, align 16 + %a240 = alloca %S.ast.Node, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store i1 %p5, ptr %a6 + store i1 %p6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = load { ptr, i64, i64 }, ptr %a3 + %t10 = call i64 @finch.gen.lookup(ptr %t8, { ptr, i64, i64 } %t9) + %t11 = icmp sge i64 %t10, 0 + br label %logic.from3313 +logic.from3313: + br i1 %t11, label %logic.rhs3314, label %logic.end3315 +logic.rhs3314: + %t12 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.2095, i64 3, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp eq i32 %t15, 0 + br label %logic.rend3316 +logic.rend3316: + br label %logic.end3315 +logic.end3315: + %t17 = phi i1 [ false, %logic.from3313 ], [ %t16, %logic.rend3316 ] + br i1 %t17, label %then3317, label %endif3319 +then3317: + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + %t20 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2096, i64 18, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.2097, i64 21, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } %t29) + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_drop(ptr %a30) + br label %endif3319 +endif3319: + %t31 = load ptr, ptr %a1 + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic3320, label %ok3321 +panic3320: + call void @finch_panic(ptr @.str.2098, i64 1393, ptr @.str.2099) + unreachable +ok3321: + %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 14 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = load { ptr, i64, i64 }, ptr %a3 + %t37 = call i64 @finch.gen.findFn(ptr %t31, { ptr, i64, i64 } %t35, { ptr, i64, i64 } %t36) + %t38 = icmp sge i64 %t37, 0 + br i1 %t38, label %then3322, label %endif3324 +then3322: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a2 + %t41 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2100, i64 1, i64 0 }, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.2101, i64 35, i64 0 }, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t45, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t50) + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %endif3324 +endif3324: + %t52 = load { ptr, i64, i64 }, ptr %a3 + %t53 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t52) + br i1 %t53, label %then3325, label %endif3327 +then3325: + %t54 = load ptr, ptr %a1 + %t55 = load %S.ast.Node, ptr %a2 + %t56 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2102, i64 1, i64 0 }, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.2103, i64 38, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } %t65) + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_drop(ptr %a66) + br label %endif3327 +endif3327: + %t67 = load ptr, ptr %a1 + %t68 = load ptr, ptr %a1 + %t69 = load %S.ast.Type, ptr %a4 + %t70 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t68, %S.ast.Type %t69) + %t71 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t67, { ptr, i64, i64 } %t70) + store { ptr, i64, i64 } %t70, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t71, ptr %a73 + %t74 = load ptr, ptr %a1 + %t75 = load ptr, ptr %a1 + %t76 = load %S.ast.Type, ptr %a4 + %t77 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t75, %S.ast.Type %t76) + %t78 = load { ptr, i64, i64 }, ptr %a5 + %t79 = load { ptr, i64, i64 }, ptr %a73 + call void @finch.gen.store(ptr %t74, { ptr, i64, i64 } %t77, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t79) + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_drop(ptr %a80) + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic3328, label %ok3329 +panic3328: + call void @finch_panic(ptr @.str.2104, i64 1401, ptr @.str.2105) + unreachable +ok3329: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 10 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 + %t85 = load i64, ptr %t84 + %t86 = sub i64 %t85, 1 + store i64 %t86, ptr %a87 + %t88 = load i1, ptr %a7 + br label %logic.from3330 +logic.from3330: + br i1 %t88, label %logic.rhs3331, label %logic.end3332 +logic.rhs3331: + %t89 = load ptr, ptr %a1 + %t90 = load %S.ast.Type, ptr %a4 + %t91 = call i1 @finch.gen.owning(ptr %t89, %S.ast.Type %t90) + br label %logic.rend3333 +logic.rend3333: + br label %logic.end3332 +logic.end3332: + %t92 = phi i1 [ false, %logic.from3330 ], [ %t91, %logic.rend3333 ] + store i1 %t92, ptr %a93 + %t94 = load i1, ptr %a93 + br i1 %t94, label %then3334, label %endif3336 +then3334: + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic3337, label %ok3338 +panic3337: + call void @finch_panic(ptr @.str.2106, i64 1404, ptr @.str.2107) + unreachable +ok3338: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 10 + %t98 = load i64, ptr %a87 + %t99 = load { ptr, i64, i64 }, ptr %t97 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 %t98, %t100 + br i1 %t101, label %range3339, label %inrange3340 +range3339: + call void @finch_panic_index(ptr @.str.2108, i64 1404, i64 %t98, i64 %t100) + unreachable +inrange3340: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.gen.Scope, ptr %t102, i64 %t98 + %t104 = getelementptr inbounds %S.gen.Scope, ptr %t103, i32 0, i32 3 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t106 = insertvalue %S.gen.Cleanup zeroinitializer, i1 false, 0 + %t107 = load ptr, ptr %a1 + %t108 = icmp eq ptr %t107, null + br i1 %t108, label %panic3341, label %ok3342 +panic3341: + call void @finch_panic(ptr @.str.2109, i64 1404, ptr @.str.2110) + unreachable +ok3342: + %t109 = getelementptr inbounds %S.gen.Gen, ptr %t107, i32 0, i32 10 + %t110 = load i64, ptr %a87 + %t111 = load { ptr, i64, i64 }, ptr %t109 + %t112 = extractvalue { ptr, i64, i64 } %t111, 1 + %t113 = icmp uge i64 %t110, %t112 + br i1 %t113, label %range3343, label %inrange3344 +range3343: + call void @finch_panic_index(ptr @.str.2111, i64 1404, i64 %t110, i64 %t112) + unreachable +inrange3344: + %t114 = extractvalue { ptr, i64, i64 } %t111, 0 + %t115 = getelementptr inbounds %S.gen.Scope, ptr %t114, i64 %t110 + %t116 = getelementptr inbounds %S.gen.Scope, ptr %t115, i32 0, i32 0 + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t116, i32 0, i32 1 + %t118 = load i64, ptr %t117 + %t119 = insertvalue %S.gen.Cleanup %t106, i64 %t118, 1 + %t120 = load i64, ptr %t105 + %t121 = add i64 %t120, 1 + call void @finch_arr_reserve(ptr %t104, i64 %t121, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) + %t122 = load ptr, ptr %t104 + %t123 = getelementptr inbounds %S.gen.Cleanup, ptr %t122, i64 %t120 + store %S.gen.Cleanup %t119, ptr %t123 + store i64 %t121, ptr %t105 + br label %endif3336 +endif3336: + %t124 = load ptr, ptr %a1 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic3345, label %ok3346 +panic3345: + call void @finch_panic(ptr @.str.2112, i64 1406, ptr @.str.2113) + unreachable +ok3346: + %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 10 + %t127 = load i64, ptr %a87 + %t128 = load { ptr, i64, i64 }, ptr %t126 + %t129 = extractvalue { ptr, i64, i64 } %t128, 1 + %t130 = icmp uge i64 %t127, %t129 + br i1 %t130, label %range3347, label %inrange3348 +range3347: + call void @finch_panic_index(ptr @.str.2114, i64 1406, i64 %t127, i64 %t129) + unreachable +inrange3348: + %t131 = extractvalue { ptr, i64, i64 } %t128, 0 + %t132 = getelementptr inbounds %S.gen.Scope, ptr %t131, i64 %t127 + %t133 = getelementptr inbounds %S.gen.Scope, ptr %t132, i32 0, i32 0 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_copy(ptr %a137, ptr %a136) + %t138 = load { ptr, i64, i64 }, ptr %a137 + %t139 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } %t138, 0 + %t140 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t140, ptr %a141 + call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) + %t143 = load %S.ast.Type, ptr %a142 + %t144 = insertvalue %S.gen.Var %t139, %S.ast.Type %t143, 1 + %t145 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t145, ptr %a146 + call void @finch_str_copy(ptr %a147, ptr %a146) + %t148 = load { ptr, i64, i64 }, ptr %a147 + %t149 = insertvalue %S.gen.Var %t144, { ptr, i64, i64 } %t148, 2 + %t150 = load i1, ptr %a6 + %t151 = insertvalue %S.gen.Var %t149, i1 %t150, 3 + %t152 = load ptr, ptr %a1 + %t153 = icmp eq ptr %t152, null + br i1 %t153, label %panic3349, label %ok3350 +panic3349: + call void @finch_panic(ptr @.str.2115, i64 1406, ptr @.str.2116) + unreachable +ok3350: + %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 25 + %t155 = load i64, ptr %t154 + %t156 = insertvalue %S.gen.Var %t151, i64 %t155, 4 + %t157 = load i1, ptr %a93 + %t158 = insertvalue %S.gen.Var %t156, i1 %t157, 5 + %t159 = load ptr, ptr %a1 + %t160 = icmp eq ptr %t159, null + br i1 %t160, label %panic3351, label %ok3352 +panic3351: + call void @finch_panic(ptr @.str.2117, i64 1406, ptr @.str.2118) + unreachable +ok3352: + %t161 = getelementptr inbounds %S.gen.Gen, ptr %t159, i32 0, i32 1 + %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t163 = load i64, ptr %t162 + %t164 = load { ptr, i64, i64 }, ptr %t161 + %t165 = extractvalue { ptr, i64, i64 } %t164, 1 + %t166 = icmp uge i64 %t163, %t165 + br i1 %t166, label %range3353, label %inrange3354 +range3353: + call void @finch_panic_index(ptr @.str.2119, i64 1406, i64 %t163, i64 %t165) + unreachable +inrange3354: + %t167 = extractvalue { ptr, i64, i64 } %t164, 0 + %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i64 %t163 + %t169 = load { ptr, i64, i64 }, ptr %t168 + store { ptr, i64, i64 } %t169, ptr %a170 + call void @finch_str_copy(ptr %a171, ptr %a170) + %t172 = load { ptr, i64, i64 }, ptr %a171 + %t173 = insertvalue %S.gen.Var %t158, { ptr, i64, i64 } %t172, 7 + %t174 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t175 = load i64, ptr %t174 + %t176 = insertvalue %S.gen.Var %t173, i64 %t175, 8 + %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t178 = load i64, ptr %t177 + %t179 = insertvalue %S.gen.Var %t176, i64 %t178, 9 + %t180 = load i64, ptr %t134 + %t181 = add i64 %t180, 1 + call void @finch_arr_reserve(ptr %t133, i64 %t181, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) + %t182 = load ptr, ptr %t133 + %t183 = getelementptr inbounds %S.gen.Var, ptr %t182, i64 %t180 + store %S.gen.Var %t179, ptr %t183 + store i64 %t181, ptr %t134 + %t184 = load ptr, ptr %a1 + %t185 = icmp eq ptr %t184, null + br i1 %t185, label %panic3355, label %ok3356 +panic3355: + call void @finch_panic(ptr @.str.2120, i64 1407, ptr @.str.2121) + unreachable +ok3356: + %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 25 + %t187 = load i64, ptr %t186 + %t188 = add i64 %t187, 1 + store i64 %t188, ptr %t186 + %t189 = load ptr, ptr %a1 + %t190 = load %S.ast.Node, ptr %a2 + %t191 = load { ptr, i64, i64 }, ptr %a3 + %t192 = load %S.ast.Type, ptr %a4 + %t193 = load { ptr, i64, i64 }, ptr %a73 + call void @finch.gen.dbgVariable(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t191, %S.ast.Type %t192, { ptr, i64, i64 } %t193) + %t194 = load ptr, ptr %a1 + %t195 = icmp eq ptr %t194, null + br i1 %t195, label %panic3357, label %ok3358 +panic3357: + call void @finch_panic(ptr @.str.2122, i64 1409, ptr @.str.2123) + unreachable +ok3358: + %t196 = getelementptr inbounds %S.gen.Gen, ptr %t194, i32 0, i32 28 + %t197 = load i1, ptr %t196 + br label %logic.from3359 +logic.from3359: + br i1 %t197, label %logic.rhs3360, label %logic.end3361 +logic.rhs3360: + %t198 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t198, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.2124, i64 3, i64 0 }, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp eq i32 %t201, 0 + br label %logic.rend3362 +logic.rend3362: + br label %logic.end3361 +logic.end3361: + %t203 = phi i1 [ false, %logic.from3359 ], [ %t202, %logic.rend3362 ] + br label %logic.from3363 +logic.from3363: + br i1 %t203, label %logic.rhs3364, label %logic.end3365 +logic.rhs3364: + %t204 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t204, ptr %a205 + store { ptr, i64, i64 } { ptr @.str.2126, i64 1, i64 0 }, ptr %a207 + %t208 = call i32 @finch_str_starts(ptr %a205, ptr %a207) + %t209 = icmp ne i32 %t208, 0 + %t210 = xor i1 %t209, true + br label %logic.rend3366 +logic.rend3366: + br label %logic.end3365 +logic.end3365: + %t211 = phi i1 [ false, %logic.from3363 ], [ %t210, %logic.rend3366 ] + br i1 %t211, label %then3367, label %endif3369 +then3367: + %t212 = load ptr, ptr %a1 + %t213 = icmp eq ptr %t212, null + br i1 %t213, label %panic3370, label %ok3371 +panic3370: + call void @finch_panic(ptr @.str.2127, i64 1410, ptr @.str.2128) + unreachable +ok3371: + %t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 0 + %t215 = load ptr, ptr %a1 + %t216 = icmp eq ptr %t215, null + br i1 %t216, label %panic3372, label %ok3373 +panic3372: + call void @finch_panic(ptr @.str.2129, i64 1410, ptr @.str.2130) + unreachable +ok3373: + %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 13 + %t218 = getelementptr inbounds %S.gen.FnSig, ptr %t217, i32 0, i32 16 + %t219 = load i64, ptr %t218 + %t220 = load { ptr, i64, i64 }, ptr %t214 + %t221 = extractvalue { ptr, i64, i64 } %t220, 1 + %t222 = icmp uge i64 %t219, %t221 + br i1 %t222, label %range3374, label %inrange3375 +range3374: + call void @finch_panic_index(ptr @.str.2131, i64 1410, i64 %t219, i64 %t221) + unreachable +inrange3375: + %t223 = extractvalue { ptr, i64, i64 } %t220, 0 + %t224 = getelementptr inbounds %S.ast.Program, ptr %t223, i64 %t219 + %t225 = getelementptr inbounds %S.ast.Program, ptr %t224, i32 0, i32 8 + %t226 = load ptr, ptr %a1 + %t227 = icmp eq ptr %t226, null + br i1 %t227, label %panic3376, label %ok3377 +panic3376: + call void @finch_panic(ptr @.str.2132, i64 1410, ptr @.str.2133) + unreachable +ok3377: + %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 13 + %t229 = getelementptr inbounds %S.gen.FnSig, ptr %t228, i32 0, i32 17 + %t230 = load i64, ptr %t229 + %t231 = load { ptr, i64, i64 }, ptr %t225 + %t232 = extractvalue { ptr, i64, i64 } %t231, 1 + %t233 = icmp uge i64 %t230, %t232 + br i1 %t233, label %range3378, label %inrange3379 +range3378: + call void @finch_panic_index(ptr @.str.2134, i64 1410, i64 %t230, i64 %t232) + unreachable +inrange3379: + %t234 = extractvalue { ptr, i64, i64 } %t231, 0 + %t235 = getelementptr inbounds %S.ast.Node, ptr %t234, i64 %t230 + %t236 = load %S.ast.Node, ptr %t235 + store %S.ast.Node %t236, ptr %a237 + call void @finch.copy.S_ast_Node(ptr %a238, ptr %a237) + %t239 = load %S.ast.Node, ptr %a238 + store %S.ast.Node %t239, ptr %a240 + %t241 = load ptr, ptr %a1 + %t242 = icmp eq ptr %t241, null + br i1 %t242, label %panic3380, label %ok3381 +panic3380: + call void @finch_panic(ptr @.str.2135, i64 1411, ptr @.str.2136) + unreachable +ok3381: + %t243 = getelementptr inbounds %S.gen.Gen, ptr %t241, i32 0, i32 29 + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 + %t245 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2137, i64 3, i64 0 }, ptr %a247 + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + %t249 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t249, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.2138, i64 1, i64 0 }, ptr %a252 + call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) + store { ptr, i64, i64 } %t249, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a250 + %t255 = load %S.ast.Type, ptr %a4 + %t256 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t255) + store { ptr, i64, i64 } %t254, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t254, ptr %a260 + call void @finch_str_drop(ptr %a260) + store { ptr, i64, i64 } %t256, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t262, ptr %a264 + store { ptr, i64, i64 } { ptr @.str.2139, i64 1, i64 0 }, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + store { ptr, i64, i64 } %t262, ptr %a266 + call void @finch_str_drop(ptr %a266) + %t267 = load { ptr, i64, i64 }, ptr %a263 + %t268 = load ptr, ptr %a1 + %t269 = icmp eq ptr %t268, null + br i1 %t269, label %panic3382, label %ok3383 +panic3382: + call void @finch_panic(ptr @.str.2140, i64 1411, ptr @.str.2141) + unreachable +ok3383: + %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 1 + %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t272 = load i64, ptr %t271 + %t273 = load { ptr, i64, i64 }, ptr %t270 + %t274 = extractvalue { ptr, i64, i64 } %t273, 1 + %t275 = icmp uge i64 %t272, %t274 + br i1 %t275, label %range3384, label %inrange3385 +range3384: + call void @finch_panic_index(ptr @.str.2142, i64 1411, i64 %t272, i64 %t274) + unreachable +inrange3385: + %t276 = extractvalue { ptr, i64, i64 } %t273, 0 + %t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t276, i64 %t272 + %t278 = load { ptr, i64, i64 }, ptr %t277 + store { ptr, i64, i64 } %t267, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t267, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t283, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.2143, i64 1, i64 0 }, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t290 = load i64, ptr %t289 + call void @finch_str_from_int(ptr %a291, i64 %t290) + %t292 = load { ptr, i64, i64 }, ptr %a291 + store { ptr, i64, i64 } %t288, ptr %a294 + store { ptr, i64, i64 } %t292, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t288, ptr %a296 + call void @finch_str_drop(ptr %a296) + store { ptr, i64, i64 } %t292, ptr %a297 + call void @finch_str_drop(ptr %a297) + %t298 = load { ptr, i64, i64 }, ptr %a293 + store { ptr, i64, i64 } %t298, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.2144, i64 1, i64 0 }, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t298, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + %t304 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t305 = load i64, ptr %t304 + call void @finch_str_from_int(ptr %a306, i64 %t305) + %t307 = load { ptr, i64, i64 }, ptr %a306 + store { ptr, i64, i64 } %t303, ptr %a309 + store { ptr, i64, i64 } %t307, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t303, ptr %a311 + call void @finch_str_drop(ptr %a311) + store { ptr, i64, i64 } %t307, ptr %a312 + call void @finch_str_drop(ptr %a312) + %t313 = load { ptr, i64, i64 }, ptr %a308 + store { ptr, i64, i64 } %t313, ptr %a315 + store { ptr, i64, i64 } { ptr @.str.2145, i64 1, i64 0 }, ptr %a316 + call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) + store { ptr, i64, i64 } %t313, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load { ptr, i64, i64 }, ptr %a314 + %t319 = load ptr, ptr %a1 + %t320 = icmp eq ptr %t319, null + br i1 %t320, label %panic3386, label %ok3387 +panic3386: + call void @finch_panic(ptr @.str.2146, i64 1411, ptr @.str.2147) + unreachable +ok3387: + %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 1 + %t322 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 13 + %t323 = load i64, ptr %t322 + %t324 = load { ptr, i64, i64 }, ptr %t321 + %t325 = extractvalue { ptr, i64, i64 } %t324, 1 + %t326 = icmp uge i64 %t323, %t325 + br i1 %t326, label %range3388, label %inrange3389 +range3388: + call void @finch_panic_index(ptr @.str.2148, i64 1411, i64 %t323, i64 %t325) + unreachable +inrange3389: + %t327 = extractvalue { ptr, i64, i64 } %t324, 0 + %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i64 %t323 + %t329 = load { ptr, i64, i64 }, ptr %t328 + store { ptr, i64, i64 } %t318, ptr %a331 + store { ptr, i64, i64 } %t329, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + store { ptr, i64, i64 } %t318, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = load { ptr, i64, i64 }, ptr %a330 + store { ptr, i64, i64 } %t334, ptr %a336 + store { ptr, i64, i64 } { ptr @.str.2149, i64 1, i64 0 }, ptr %a337 + call void @finch_str_concat(ptr %a335, ptr %a336, ptr %a337) + store { ptr, i64, i64 } %t334, ptr %a338 + call void @finch_str_drop(ptr %a338) + %t339 = load { ptr, i64, i64 }, ptr %a335 + %t340 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 11 + %t341 = load i64, ptr %t340 + call void @finch_str_from_int(ptr %a342, i64 %t341) + %t343 = load { ptr, i64, i64 }, ptr %a342 + store { ptr, i64, i64 } %t339, ptr %a345 + store { ptr, i64, i64 } %t343, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t339, ptr %a347 + call void @finch_str_drop(ptr %a347) + store { ptr, i64, i64 } %t343, ptr %a348 + call void @finch_str_drop(ptr %a348) + %t349 = load { ptr, i64, i64 }, ptr %a344 + store { ptr, i64, i64 } %t349, ptr %a351 + store { ptr, i64, i64 } { ptr @.str.2150, i64 1, i64 0 }, ptr %a352 + call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) + store { ptr, i64, i64 } %t349, ptr %a353 + call void @finch_str_drop(ptr %a353) + %t354 = load { ptr, i64, i64 }, ptr %a350 + %t355 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 14 + %t356 = load i64, ptr %t355 + call void @finch_str_from_int(ptr %a357, i64 %t356) + %t358 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t354, ptr %a360 + store { ptr, i64, i64 } %t358, ptr %a361 + call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) + store { ptr, i64, i64 } %t354, ptr %a362 + call void @finch_str_drop(ptr %a362) + store { ptr, i64, i64 } %t358, ptr %a363 + call void @finch_str_drop(ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a359 + %t365 = load i64, ptr %t244 + %t366 = add i64 %t365, 1 + call void @finch_arr_reserve(ptr %t243, i64 %t366, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t367 = load ptr, ptr %t243 + %t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %t367, i64 %t365 + store { ptr, i64, i64 } %t364, ptr %t368 + store i64 %t366, ptr %t244 + %t369 = load ptr, ptr %a1 + %t370 = load %S.ast.Node, ptr %a2 + %t371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t372 = load i64, ptr %t371 + %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t374 = load i64, ptr %t373 + %t375 = load %S.ast.Type, ptr %a4 + %t376 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t375) + store { ptr, i64, i64 } { ptr @.str.2151, i64 9, i64 0 }, ptr %a378 + store { ptr, i64, i64 } %t376, ptr %a379 + call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) + store { ptr, i64, i64 } %t376, ptr %a380 + call void @finch_str_drop(ptr %a380) + %t381 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t381, ptr %a383 + store { ptr, i64, i64 } { ptr @.str.2152, i64 1, i64 0 }, ptr %a384 + call void @finch_str_concat(ptr %a382, ptr %a383, ptr %a384) + store { ptr, i64, i64 } %t381, ptr %a385 + call void @finch_str_drop(ptr %a385) + %t386 = load { ptr, i64, i64 }, ptr %a382 + %t387 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t386, ptr %a389 + store { ptr, i64, i64 } %t387, ptr %a390 + call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) + store { ptr, i64, i64 } %t386, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a388 + store { ptr, i64, i64 } %t392, ptr %a394 + store { ptr, i64, i64 } { ptr @.str.2153, i64 4, i64 0 }, ptr %a395 + call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) + store { ptr, i64, i64 } %t392, ptr %a396 + call void @finch_str_drop(ptr %a396) + %t397 = load { ptr, i64, i64 }, ptr %a393 + call void @finch.gen.noteRef(ptr %t369, %S.ast.Node %t370, i64 %t372, i64 %t374, { ptr, i64, i64 } %t397, { ptr, i64, i64 } { ptr @.str.2154, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t397, ptr %a398 + call void @finch_str_drop(ptr %a398) + call void @finch.drop.S_ast_Node(ptr %a240) + br label %endif3369 +endif3369: + %t399 = load { ptr, i64, i64 }, ptr %a73 + ret { ptr, i64, i64 } %t399 +} + +define internal void @finch.gen.pushScope(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic3390, label %ok3391 +panic3390: + call void @finch_panic(ptr @.str.2155, i64 1418, ptr @.str.2156) + unreachable +ok3391: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 10 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + call void @finch_arr_reserve(ptr %t4, i64 %t7, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) + %t8 = load ptr, ptr %t4 + %t9 = getelementptr inbounds %S.gen.Scope, ptr %t8, i64 %t6 + store %S.gen.Scope zeroinitializer, ptr %t9 + store i64 %t7, ptr %t5 + ret void +} + +define internal void @finch.drop.S_gen_Var(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_S_gen_Var(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond3403 +n.cond3403: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body3404, label %n.end3405 +n.body3404: + %t7 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Var(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond3403 +n.end3405: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_Cleanup(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Scope(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_gen_Var(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_ast_Node(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_int(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_S_gen_Cleanup(ptr %t4) + ret void +} + +define internal void @finch.gen.popScope(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a24 = alloca %S.gen.Scope, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic3392, label %ok3393 +panic3392: + call void @finch_panic(ptr @.str.2157, i64 1424, ptr @.str.2158) + unreachable +ok3393: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 9 + %t5 = load i1, ptr %t4 + %t6 = xor i1 %t5, true + br i1 %t6, label %then3394, label %endif3396 +then3394: + %t7 = load ptr, ptr %a1 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic3397, label %ok3398 +panic3397: + call void @finch_panic(ptr @.str.2159, i64 1425, ptr @.str.2160) + unreachable +ok3398: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = sub i64 %t12, 1 + call void @finch.gen.runCleanups(ptr %t7, i64 %t13) + br label %endif3396 +endif3396: + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic3399, label %ok3400 +panic3399: + call void @finch_panic(ptr @.str.2161, i64 1427, ptr @.str.2162) + unreachable +ok3400: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 10 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = icmp eq i64 %t18, 0 + br i1 %t19, label %panic3401, label %ok3402 +panic3401: + call void @finch_panic(ptr @.str.2163, i64 1427, ptr @.str.2164) + unreachable +ok3402: + %t20 = sub i64 %t18, 1 + %t21 = load ptr, ptr %t16 + %t22 = getelementptr inbounds %S.gen.Scope, ptr %t21, i64 %t20 + %t23 = load %S.gen.Scope, ptr %t22 + store i64 %t20, ptr %t17 + store %S.gen.Scope %t23, ptr %a24 + call void @finch.drop.S_gen_Scope(ptr %a24) + ret void +} + +define internal void @finch.gen.runCleanups(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a15 = alloca i64, align 16 + %a37 = alloca %S.gen.Cleanup, align 16 + %a59 = alloca %S.gen.Var, align 16 + %a60 = alloca %S.gen.Var, align 16 + %a62 = alloca %S.gen.Var, align 16 + %a75 = alloca i1, align 16 + %a80 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3406, label %ok3407 +panic3406: + call void @finch_panic(ptr @.str.2165, i64 1432, ptr @.str.2166) + unreachable +ok3407: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = load i64, ptr %a2 + %t7 = load { ptr, i64, i64 }, ptr %t5 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 %t6, %t8 + br i1 %t9, label %range3408, label %inrange3409 +range3408: + call void @finch_panic_index(ptr @.str.2167, i64 1432, i64 %t6, i64 %t8) + unreachable +inrange3409: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.gen.Scope, ptr %t10, i64 %t6 + %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i32 0, i32 3 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + store i64 %t14, ptr %a15 + br label %while.cond3410 +while.cond3410: + %t16 = load i64, ptr %a15 + %t17 = icmp sgt i64 %t16, 0 + br i1 %t17, label %while.body3411, label %while.end3412 +while.body3411: + %t18 = load i64, ptr %a15 + %t19 = sub i64 %t18, 1 + store i64 %t19, ptr %a15 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic3413, label %ok3414 +panic3413: + call void @finch_panic(ptr @.str.2168, i64 1435, ptr @.str.2169) + unreachable +ok3414: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 + %t23 = load i64, ptr %a2 + %t24 = load { ptr, i64, i64 }, ptr %t22 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range3415, label %inrange3416 +range3415: + call void @finch_panic_index(ptr @.str.2170, i64 1435, i64 %t23, i64 %t25) + unreachable +inrange3416: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 + %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 3 + %t30 = load i64, ptr %a15 + %t31 = load { ptr, i64, i64 }, ptr %t29 + %t32 = extractvalue { ptr, i64, i64 } %t31, 1 + %t33 = icmp uge i64 %t30, %t32 + br i1 %t33, label %range3417, label %inrange3418 +range3417: + call void @finch_panic_index(ptr @.str.2171, i64 1435, i64 %t30, i64 %t32) + unreachable +inrange3418: + %t34 = extractvalue { ptr, i64, i64 } %t31, 0 + %t35 = getelementptr inbounds %S.gen.Cleanup, ptr %t34, i64 %t30 + %t36 = load %S.gen.Cleanup, ptr %t35 + store %S.gen.Cleanup %t36, ptr %a37 + %t38 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 0 + %t39 = load i1, ptr %t38 + %t40 = xor i1 %t39, true + br i1 %t40, label %then3419, label %endif3421 +then3419: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic3422, label %ok3423 +panic3422: + call void @finch_panic(ptr @.str.2172, i64 1437, ptr @.str.2173) + unreachable +ok3423: + %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 10 + %t44 = load i64, ptr %a2 + %t45 = load { ptr, i64, i64 }, ptr %t43 + %t46 = extractvalue { ptr, i64, i64 } %t45, 1 + %t47 = icmp uge i64 %t44, %t46 + br i1 %t47, label %range3424, label %inrange3425 +range3424: + call void @finch_panic_index(ptr @.str.2174, i64 1437, i64 %t44, i64 %t46) + unreachable +inrange3425: + %t48 = extractvalue { ptr, i64, i64 } %t45, 0 + %t49 = getelementptr inbounds %S.gen.Scope, ptr %t48, i64 %t44 + %t50 = getelementptr inbounds %S.gen.Scope, ptr %t49, i32 0, i32 0 + %t51 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = load { ptr, i64, i64 }, ptr %t50 + %t54 = extractvalue { ptr, i64, i64 } %t53, 1 + %t55 = icmp uge i64 %t52, %t54 + br i1 %t55, label %range3426, label %inrange3427 +range3426: + call void @finch_panic_index(ptr @.str.2175, i64 1437, i64 %t52, i64 %t54) + unreachable +inrange3427: + %t56 = extractvalue { ptr, i64, i64 } %t53, 0 + %t57 = getelementptr inbounds %S.gen.Var, ptr %t56, i64 %t52 + %t58 = load %S.gen.Var, ptr %t57 + store %S.gen.Var %t58, ptr %a59 + call void @finch.copy.S_gen_Var(ptr %a60, ptr %a59) + %t61 = load %S.gen.Var, ptr %a60 + store %S.gen.Var %t61, ptr %a62 + %t63 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 6 + %t64 = load i1, ptr %t63 + %t65 = xor i1 %t64, true + br i1 %t65, label %then3428, label %endif3430 +then3428: + %t66 = load ptr, ptr %a1 + %t67 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 2 + %t68 = load { ptr, i64, i64 }, ptr %t67 + %t69 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 1 + %t70 = load %S.ast.Type, ptr %t69 + call void @finch.gen.dropAt(ptr %t66, { ptr, i64, i64 } %t68, %S.ast.Type %t70) + br label %endif3430 +endif3430: + call void @finch.drop.S_gen_Var(ptr %a62) + br label %while.cond3410 +endif3421: + %t71 = load ptr, ptr %a1 + %t72 = icmp eq ptr %t71, null + br i1 %t72, label %panic3431, label %ok3432 +panic3431: + call void @finch_panic(ptr @.str.2176, i64 1443, ptr @.str.2177) + unreachable +ok3432: + %t73 = getelementptr inbounds %S.gen.Gen, ptr %t71, i32 0, i32 44 + %t74 = load i1, ptr %t73 + store i1 %t74, ptr %a75 + %t76 = load ptr, ptr %a1 + %t77 = icmp eq ptr %t76, null + br i1 %t77, label %panic3433, label %ok3434 +panic3433: + call void @finch_panic(ptr @.str.2178, i64 1444, ptr @.str.2179) + unreachable +ok3434: + %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 45 + %t79 = load i64, ptr %t78 + store i64 %t79, ptr %a80 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic3435, label %ok3436 +panic3435: + call void @finch_panic(ptr @.str.2180, i64 1445, ptr @.str.2181) + unreachable +ok3436: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 44 + store i1 true, ptr %t83 + %t84 = load ptr, ptr %a1 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic3437, label %ok3438 +panic3437: + call void @finch_panic(ptr @.str.2182, i64 1446, ptr @.str.2183) + unreachable +ok3438: + %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 10 + %t87 = load i64, ptr %a2 + %t88 = load { ptr, i64, i64 }, ptr %t86 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 %t87, %t89 + br i1 %t90, label %range3439, label %inrange3440 +range3439: + call void @finch_panic_index(ptr @.str.2184, i64 1446, i64 %t87, i64 %t89) + unreachable +inrange3440: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds %S.gen.Scope, ptr %t91, i64 %t87 + %t93 = getelementptr inbounds %S.gen.Scope, ptr %t92, i32 0, i32 2 + %t94 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 + %t95 = load i64, ptr %t94 + %t96 = load { ptr, i64, i64 }, ptr %t93 + %t97 = extractvalue { ptr, i64, i64 } %t96, 1 + %t98 = icmp uge i64 %t95, %t97 + br i1 %t98, label %range3441, label %inrange3442 +range3441: + call void @finch_panic_index(ptr @.str.2185, i64 1446, i64 %t95, i64 %t97) + unreachable +inrange3442: + %t99 = extractvalue { ptr, i64, i64 } %t96, 0 + %t100 = getelementptr inbounds i64, ptr %t99, i64 %t95 + %t101 = load i64, ptr %t100 + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic3443, label %ok3444 +panic3443: + call void @finch_panic(ptr @.str.2186, i64 1446, ptr @.str.2187) + unreachable +ok3444: + %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 45 + store i64 %t101, ptr %t104 + %t105 = load ptr, ptr %a1 + %t106 = icmp eq ptr %t105, null + br i1 %t106, label %panic3445, label %ok3446 +panic3445: + call void @finch_panic(ptr @.str.2188, i64 1447, ptr @.str.2189) + unreachable +ok3446: + %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 46 + %t108 = load i64, ptr %t107 + %t109 = add i64 %t108, 1 + store i64 %t109, ptr %t107 + %t110 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t110) + %t111 = load ptr, ptr %a1 + %t112 = load ptr, ptr %a1 + %t113 = icmp eq ptr %t112, null + br i1 %t113, label %panic3447, label %ok3448 +panic3447: + call void @finch_panic(ptr @.str.2190, i64 1449, ptr @.str.2191) + unreachable +ok3448: + %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 10 + %t115 = load i64, ptr %a2 + %t116 = load { ptr, i64, i64 }, ptr %t114 + %t117 = extractvalue { ptr, i64, i64 } %t116, 1 + %t118 = icmp uge i64 %t115, %t117 + br i1 %t118, label %range3449, label %inrange3450 +range3449: + call void @finch_panic_index(ptr @.str.2192, i64 1449, i64 %t115, i64 %t117) + unreachable +inrange3450: + %t119 = extractvalue { ptr, i64, i64 } %t116, 0 + %t120 = getelementptr inbounds %S.gen.Scope, ptr %t119, i64 %t115 + %t121 = getelementptr inbounds %S.gen.Scope, ptr %t120, i32 0, i32 1 + %t122 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 + %t123 = load i64, ptr %t122 + %t124 = load { ptr, i64, i64 }, ptr %t121 + %t125 = extractvalue { ptr, i64, i64 } %t124, 1 + %t126 = icmp uge i64 %t123, %t125 + br i1 %t126, label %range3451, label %inrange3452 +range3451: + call void @finch_panic_index(ptr @.str.2193, i64 1449, i64 %t123, i64 %t125) + unreachable +inrange3452: + %t127 = extractvalue { ptr, i64, i64 } %t124, 0 + %t128 = getelementptr inbounds %S.ast.Node, ptr %t127, i64 %t123 + %t129 = load %S.ast.Node, ptr %t128 + call void @finch.gen.stmt(ptr %t111, %S.ast.Node %t129) + %t130 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t130) + %t131 = load ptr, ptr %a1 + %t132 = icmp eq ptr %t131, null + br i1 %t132, label %panic3453, label %ok3454 +panic3453: + call void @finch_panic(ptr @.str.2194, i64 1451, ptr @.str.2195) + unreachable +ok3454: + %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 46 + %t134 = load i64, ptr %t133 + %t135 = sub i64 %t134, 1 + store i64 %t135, ptr %t133 + %t136 = load i1, ptr %a75 + %t137 = load ptr, ptr %a1 + %t138 = icmp eq ptr %t137, null + br i1 %t138, label %panic3455, label %ok3456 +panic3455: + call void @finch_panic(ptr @.str.2196, i64 1452, ptr @.str.2197) + unreachable +ok3456: + %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 44 + store i1 %t136, ptr %t139 + %t140 = load i64, ptr %a80 + %t141 = load ptr, ptr %a1 + %t142 = icmp eq ptr %t141, null + br i1 %t142, label %panic3457, label %ok3458 +panic3457: + call void @finch_panic(ptr @.str.2198, i64 1453, ptr @.str.2199) + unreachable +ok3458: + %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 45 + store i64 %t140, ptr %t143 + br label %while.cond3410 +while.end3412: + ret void +} + +define internal void @finch.gen.unwind(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a8 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3459, label %ok3460 +panic3459: + call void @finch_panic(ptr @.str.2200, i64 1459, ptr @.str.2201) + unreachable +ok3460: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 %t7, ptr %a8 + br label %while.cond3461 +while.cond3461: + %t9 = load i64, ptr %a8 + %t10 = load i64, ptr %a2 + %t11 = icmp sgt i64 %t9, %t10 + br i1 %t11, label %while.body3462, label %while.end3463 +while.body3462: + %t12 = load i64, ptr %a8 + %t13 = sub i64 %t12, 1 + store i64 %t13, ptr %a8 + %t14 = load ptr, ptr %a1 + %t15 = load i64, ptr %a8 + call void @finch.gen.runCleanups(ptr %t14, i64 %t15) + br label %while.cond3461 +while.end3463: + ret void +} + +define internal void @finch.gen.endScope(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.2202, i64 3, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then3464, label %endif3466 +then3464: + %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + ret { ptr, i64, i64 } %t12 +endif3466: + %t13 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.2203, i64 6, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.from3467 +logic.from3467: + br i1 %t18, label %logic.end3469, label %logic.rhs3468 +logic.rhs3468: + %t19 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.2204, i64 5, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br label %logic.rend3470 +logic.rend3470: + br label %logic.end3469 +logic.end3469: + %t25 = phi i1 [ true, %logic.from3467 ], [ %t24, %logic.rend3470 ] + br i1 %t25, label %then3471, label %endif3473 +then3471: + %t26 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 + %t27 = load { ptr, i64, i64 }, ptr %t26 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 0, %t28 + br i1 %t29, label %range3474, label %inrange3475 +range3474: + call void @finch_panic_index(ptr @.str.2205, i64 1477, i64 0, i64 %t28) + unreachable +inrange3475: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds %S.ast.Node, ptr %t30, i64 0 + %t32 = load %S.ast.Node, ptr %t31 + %t33 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t32) + ret { ptr, i64, i64 } %t33 +endif3473: + ret { ptr, i64, i64 } { ptr @.str.2206, i64 0, i64 0 } +} + +define internal i1 @finch.gen.mutates(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i64, align 16 + %a51 = alloca i64, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca i64, align 16 + %a72 = alloca i64, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca i64, align 16 + %a143 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t5 = call ptr @finch_alloc(i64 %t4) + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 0 + store { ptr, i64, i64 } { ptr @.str.2207, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 1 + store { ptr, i64, i64 } { ptr @.str.2208, i64 3, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 2 + store { ptr, i64, i64 } { ptr @.str.2209, i64 6, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 3 + store { ptr, i64, i64 } { ptr @.str.2210, i64 6, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 4 + store { ptr, i64, i64 } { ptr @.str.2211, i64 5, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 5 + store { ptr, i64, i64 } { ptr @.str.2212, i64 6, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 6 + store { ptr, i64, i64 } { ptr @.str.2213, i64 4, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 7 + store { ptr, i64, i64 } { ptr @.str.2214, i64 7, i64 0 }, ptr %t13 + %t14 = insertvalue { ptr, i64, i64 } undef, ptr %t5, 0 + %t15 = insertvalue { ptr, i64, i64 } %t14, i64 8, 1 + %t16 = insertvalue { ptr, i64, i64 } %t15, i64 8, 2 + store { ptr, i64, i64 } %t16, ptr %a17 + %t18 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.2215, i64 6, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.from3476 +logic.from3476: + br i1 %t23, label %logic.rhs3477, label %logic.end3478 +logic.rhs3477: + %t24 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t25 = load { ptr, i64, i64 }, ptr %t24 + %t26 = extractvalue { ptr, i64, i64 } %t25, 1 + %t27 = icmp uge i64 0, %t26 + br i1 %t27, label %range3479, label %inrange3480 +range3479: + call void @finch_panic_index(ptr @.str.2216, i64 1484, i64 0, i64 %t26) + unreachable +inrange3480: + %t28 = extractvalue { ptr, i64, i64 } %t25, 0 + %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 + %t30 = load %S.ast.Node, ptr %t29 + %t31 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t30) + %t32 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t31, ptr %a33 + store { ptr, i64, i64 } %t32, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + store { ptr, i64, i64 } %t31, ptr %a37 + call void @finch_str_drop(ptr %a37) + br label %logic.rend3481 +logic.rend3481: + br label %logic.end3478 +logic.end3478: + %t38 = phi i1 [ false, %logic.from3476 ], [ %t36, %logic.rend3481 ] + br i1 %t38, label %then3482, label %endif3484 +then3482: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3484: + %t39 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.2217, i64 6, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br label %logic.from3485 +logic.from3485: + br i1 %t44, label %logic.rhs3486, label %logic.end3487 +logic.rhs3486: + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a17, i32 0, i32 1 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store i64 -1, ptr %a48 + %t49 = load i64, ptr %t45 + %t50 = load ptr, ptr %a17 + store i64 0, ptr %a51 + br label %find.cond3488 +find.cond3488: + %t52 = load i64, ptr %a51 + %t53 = icmp slt i64 %t52, %t49 + br i1 %t53, label %find.body3489, label %find.end3492 +find.body3489: + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 + %t55 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t55, ptr %a56 + store { ptr, i64, i64 } %t47, ptr %a57 + %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) + %t59 = icmp ne i32 %t58, 0 + br i1 %t59, label %find.hit3490, label %find.next3491 +find.hit3490: + store i64 %t52, ptr %a48 + br label %find.end3492 +find.next3491: + %t60 = add i64 %t52, 1 + store i64 %t60, ptr %a51 + br label %find.cond3488 +find.end3492: + %t61 = load i64, ptr %a48 + %t62 = icmp sge i64 %t61, 0 + br label %logic.from3493 +logic.from3493: + br i1 %t62, label %logic.end3495, label %logic.rhs3494 +logic.rhs3494: + %t63 = load ptr, ptr %a1 + %t64 = icmp eq ptr %t63, null + br i1 %t64, label %panic3496, label %ok3497 +panic3496: + call void @finch_panic(ptr @.str.2218, i64 1490, ptr @.str.2219) + unreachable +ok3497: + %t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 24 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 + %t67 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 + %t68 = load { ptr, i64, i64 }, ptr %t67 + store i64 -1, ptr %a69 + %t70 = load i64, ptr %t66 + %t71 = load ptr, ptr %t65 + store i64 0, ptr %a72 + br label %find.cond3498 +find.cond3498: + %t73 = load i64, ptr %a72 + %t74 = icmp slt i64 %t73, %t70 + br i1 %t74, label %find.body3499, label %find.end3502 +find.body3499: + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 %t73 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } %t76, ptr %a77 + store { ptr, i64, i64 } %t68, ptr %a78 + %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) + %t80 = icmp ne i32 %t79, 0 + br i1 %t80, label %find.hit3500, label %find.next3501 +find.hit3500: + store i64 %t73, ptr %a69 + br label %find.end3502 +find.next3501: + %t81 = add i64 %t73, 1 + store i64 %t81, ptr %a72 + br label %find.cond3498 +find.end3502: + %t82 = load i64, ptr %a69 + %t83 = icmp sge i64 %t82, 0 + br label %logic.rend3503 +logic.rend3503: + br label %logic.end3495 +logic.end3495: + %t84 = phi i1 [ true, %logic.from3493 ], [ %t83, %logic.rend3503 ] + br label %logic.rend3504 +logic.rend3504: + br label %logic.end3487 +logic.end3487: + %t85 = phi i1 [ false, %logic.from3485 ], [ %t84, %logic.rend3504 ] + br label %logic.from3505 +logic.from3505: + br i1 %t85, label %logic.rhs3506, label %logic.end3507 +logic.rhs3506: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t87 = load { ptr, i64, i64 }, ptr %t86 + %t88 = extractvalue { ptr, i64, i64 } %t87, 1 + %t89 = icmp uge i64 0, %t88 + br i1 %t89, label %range3508, label %inrange3509 +range3508: + call void @finch_panic_index(ptr @.str.2220, i64 1490, i64 0, i64 %t88) + unreachable +inrange3509: + %t90 = extractvalue { ptr, i64, i64 } %t87, 0 + %t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 0 + %t92 = load %S.ast.Node, ptr %t91 + %t93 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t92) + %t94 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } %t94, ptr %a96 + %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) + %t98 = icmp ne i32 %t97, 0 + store { ptr, i64, i64 } %t93, ptr %a99 + call void @finch_str_drop(ptr %a99) + br label %logic.rend3510 +logic.rend3510: + br label %logic.end3507 +logic.end3507: + %t100 = phi i1 [ false, %logic.from3505 ], [ %t98, %logic.rend3510 ] + br i1 %t100, label %then3511, label %endif3513 +then3511: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3513: + %t101 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.2221, i64 4, i64 0 }, ptr %a104 + %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) + %t106 = icmp ne i32 %t105, 0 + br label %logic.from3514 +logic.from3514: + br i1 %t106, label %logic.rhs3515, label %logic.end3516 +logic.rhs3515: + %t107 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 + %t108 = load { ptr, i64, i64 }, ptr %t107 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2222, i64 4, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br label %logic.rend3517 +logic.rend3517: + br label %logic.end3516 +logic.end3516: + %t113 = phi i1 [ false, %logic.from3514 ], [ %t112, %logic.rend3517 ] + br label %logic.from3518 +logic.from3518: + br i1 %t113, label %logic.rhs3519, label %logic.end3520 +logic.rhs3519: + %t114 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp eq i64 %t116, 1 + br label %logic.rend3521 +logic.rend3521: + br label %logic.end3520 +logic.end3520: + %t118 = phi i1 [ false, %logic.from3518 ], [ %t117, %logic.rend3521 ] + br label %logic.from3522 +logic.from3522: + br i1 %t118, label %logic.rhs3523, label %logic.end3524 +logic.rhs3523: + %t119 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t120 = load { ptr, i64, i64 }, ptr %t119 + %t121 = extractvalue { ptr, i64, i64 } %t120, 1 + %t122 = icmp uge i64 0, %t121 + br i1 %t122, label %range3525, label %inrange3526 +range3525: + call void @finch_panic_index(ptr @.str.2223, i64 1493, i64 0, i64 %t121) + unreachable +inrange3526: + %t123 = extractvalue { ptr, i64, i64 } %t120, 0 + %t124 = getelementptr inbounds %S.ast.Node, ptr %t123, i64 0 + %t125 = load %S.ast.Node, ptr %t124 + %t126 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t125) + %t127 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t126, ptr %a128 + store { ptr, i64, i64 } %t127, ptr %a129 + %t130 = call i32 @finch_str_eq(ptr %a128, ptr %a129) + %t131 = icmp ne i32 %t130, 0 + store { ptr, i64, i64 } %t126, ptr %a132 + call void @finch_str_drop(ptr %a132) + br label %logic.rend3527 +logic.rend3527: + br label %logic.end3524 +logic.end3524: + %t133 = phi i1 [ false, %logic.from3522 ], [ %t131, %logic.rend3527 ] + br i1 %t133, label %then3528, label %endif3530 +then3528: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3530: + %t134 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + store i64 0, ptr %a135 + br label %each.cond3531 +each.cond3531: + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 + %t137 = load i64, ptr %t136 + %t138 = load i64, ptr %a135 + %t139 = icmp slt i64 %t138, %t137 + br i1 %t139, label %each.body3532, label %each.end3534 +each.body3532: + %t140 = load ptr, ptr %t134 + %t141 = getelementptr inbounds %S.ast.Node, ptr %t140, i64 %t138 + %t142 = load %S.ast.Node, ptr %t141 + store %S.ast.Node %t142, ptr %a143 + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a2 + %t146 = load %S.ast.Node, ptr %a143 + %t147 = call i1 @finch.gen.mutates(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Node %t146) + br i1 %t147, label %then3535, label %endif3537 +then3535: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3537: + br label %each.step3533 +each.step3533: + %t148 = load i64, ptr %a135 + %t149 = add i64 %t148, 1 + store i64 %t149, ptr %a135 + br label %each.cond3531 +each.end3534: + call void @finch.drop.arr_str(ptr %a17) + ret i1 false +} + +define internal void @finch.gen.declare(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a7 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca i64, align 16 + %a61 = alloca %S.ast.Node, align 16 + %a62 = alloca %S.ast.Node, align 16 + %a64 = alloca %S.ast.Node, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca i64, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca i64, align 16 + %a224 = alloca %S.ast.Node, align 16 + %a225 = alloca %S.ast.Node, align 16 + %a227 = alloca %S.ast.Node, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca %S.gen.SumDef, align 16 + %a278 = alloca i64, align 16 + %a280 = alloca i64, align 16 + %a288 = alloca %S.ast.Node, align 16 + %a293 = alloca i64, align 16 + %a296 = alloca i64, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca %S.gen.SumDef, align 16 + %a374 = alloca %S.gen.SumDef, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca %S.gen.EnumDef, align 16 + %a428 = alloca i64, align 16 + %a430 = alloca i64, align 16 + %a438 = alloca %S.ast.Node, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca i64, align 16 + %a454 = alloca i64, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca i64, align 16 + %a498 = alloca i64, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca %S.gen.EnumDef, align 16 + %a563 = alloca %S.gen.EnumDef, align 16 + %a579 = alloca i64, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca i64, align 16 + %a629 = alloca i64, align 16 + %a646 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a663 = alloca i64, align 16 + %a683 = alloca %S.ast.Node, align 16 + %a684 = alloca %S.ast.Node, align 16 + %a686 = alloca %S.ast.Node, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a712 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a743 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca i1, align 16 + %a817 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a823 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca i64, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a878 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a896 = alloca { ptr, i64, i64 }, align 16 + %a898 = alloca { ptr, i64, i64 }, align 16 + %a899 = alloca { ptr, i64, i64 }, align 16 + %a900 = alloca { ptr, i64, i64 }, align 16 + %a901 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a907 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a911 = alloca { ptr, i64, i64 }, align 16 + %a912 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a915 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca i64, align 16 + %a932 = alloca i64, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a949 = alloca { ptr, i64, i64 }, align 16 + %a950 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a955 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a964 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a966 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a969 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a984 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a987 = alloca { ptr, i64, i64 }, align 16 + %a988 = alloca { ptr, i64, i64 }, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a992 = alloca { ptr, i64, i64 }, align 16 + %a1000 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1002 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1005 = alloca { ptr, i64, i64 }, align 16 + %a1006 = alloca { ptr, i64, i64 }, align 16 + %a1007 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1015 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1027 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1032 = alloca { ptr, i64, i64 }, align 16 + %a1047 = alloca %S.gen.FnSig, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1054 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1058 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1060 = alloca { ptr, i64, i64 }, align 16 + %a1061 = alloca { ptr, i64, i64 }, align 16 + %a1065 = alloca { ptr, i64, i64 }, align 16 + %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 + %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1085 = alloca { ptr, i64, i64 }, align 16 + %a1087 = alloca { ptr, i64, i64 }, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca { ptr, i64, i64 }, align 16 + %a1090 = alloca { ptr, i64, i64 }, align 16 + %a1094 = alloca { ptr, i64, i64 }, align 16 + %a1095 = alloca { ptr, i64, i64 }, align 16 + %a1096 = alloca { ptr, i64, i64 }, align 16 + %a1097 = alloca { ptr, i64, i64 }, align 16 + %a1099 = alloca { ptr, i64, i64 }, align 16 + %a1100 = alloca { ptr, i64, i64 }, align 16 + %a1101 = alloca { ptr, i64, i64 }, align 16 + %a1102 = alloca { ptr, i64, i64 }, align 16 + %a1106 = alloca { ptr, i64, i64 }, align 16 + %a1107 = alloca { ptr, i64, i64 }, align 16 + %a1108 = alloca { ptr, i64, i64 }, align 16 + %a1109 = alloca { ptr, i64, i64 }, align 16 + %a1113 = alloca { ptr, i64, i64 }, align 16 + %a1121 = alloca %S.ast.Type, align 16 + %a1126 = alloca i64, align 16 + %a1138 = alloca { ptr, i64, i64 }, align 16 + %a1139 = alloca { ptr, i64, i64 }, align 16 + %a1158 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca { ptr, i64, i64 }, align 16 + %a1160 = alloca { ptr, i64, i64 }, align 16 + %a1162 = alloca { ptr, i64, i64 }, align 16 + %a1163 = alloca { ptr, i64, i64 }, align 16 + %a1164 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca { ptr, i64, i64 }, align 16 + %a1167 = alloca { ptr, i64, i64 }, align 16 + %a1204 = alloca { ptr, i64, i64 }, align 16 + %a1205 = alloca { ptr, i64, i64 }, align 16 + %a1223 = alloca %S.gen.FnSig, align 16 + %a1224 = alloca %S.gen.FnSig, align 16 + %a1234 = alloca i1, align 16 + %a1241 = alloca i64, align 16 + %a1307 = alloca %S.ast.Node, align 16 + %a1308 = alloca %S.ast.Node, align 16 + %a1310 = alloca %S.ast.Node, align 16 + %a1349 = alloca { ptr, i64, i64 }, align 16 + %a1350 = alloca { ptr, i64, i64 }, align 16 + %a1363 = alloca i64, align 16 + %a1376 = alloca %S.gen.Template, align 16 + %a1377 = alloca %S.gen.Template, align 16 + %a1379 = alloca %S.gen.Template, align 16 + %a1407 = alloca %S.ast.Node, align 16 + %a1408 = alloca %S.ast.Node, align 16 + %a1410 = alloca %S.ast.Node, align 16 + %a1440 = alloca { ptr, i64, i64 }, align 16 + %a1441 = alloca { ptr, i64, i64 }, align 16 + %a1454 = alloca i64, align 16 + %a1494 = alloca %S.ast.Node, align 16 + %a1495 = alloca %S.ast.Node, align 16 + %a1497 = alloca %S.ast.Node, align 16 + %a1509 = alloca %S.ast.Node, align 16 + %a1510 = alloca %S.ast.Node, align 16 + %a1512 = alloca %S.ast.Node, align 16 + %a1525 = alloca i64, align 16 + %a1545 = alloca %S.ast.Type, align 16 + %a1546 = alloca %S.ast.Type, align 16 + %a1548 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic3538, label %ok3539 +panic3538: + call void @finch_panic(ptr @.str.2224, i64 1507, ptr @.str.2225) + unreachable +ok3539: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 0 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + store i64 0, ptr %a7 + br label %for.cond3540 +for.cond3540: + %t8 = load i64, ptr %a7 + %t9 = icmp slt i64 %t8, %t6 + br i1 %t9, label %for.body3541, label %for.end3543 +for.body3541: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic3544, label %ok3545 +panic3544: + call void @finch_panic(ptr @.str.2226, i64 1508, ptr @.str.2227) + unreachable +ok3545: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 0 + %t13 = load i64, ptr %a7 + %t14 = load { ptr, i64, i64 }, ptr %t12 + %t15 = extractvalue { ptr, i64, i64 } %t14, 1 + %t16 = icmp uge i64 %t13, %t15 + br i1 %t16, label %range3546, label %inrange3547 +range3546: + call void @finch_panic_index(ptr @.str.2228, i64 1508, i64 %t13, i64 %t15) + unreachable +inrange3547: + %t17 = extractvalue { ptr, i64, i64 } %t14, 0 + %t18 = getelementptr inbounds %S.ast.Program, ptr %t17, i64 %t13 + %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i32 0, i32 0 + %t20 = load { ptr, i64, i64 }, ptr %t19 + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic3548, label %ok3549 +panic3548: + call void @finch_panic(ptr @.str.2229, i64 1508, ptr @.str.2230) + unreachable +ok3549: + %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 14 + store { ptr, i64, i64 } %t20, ptr %a24 + call void @finch_str_copy(ptr %a25, ptr %a24) + %t26 = load { ptr, i64, i64 }, ptr %a25 + %t27 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t26, ptr %t23 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic3550, label %ok3551 +panic3550: + call void @finch_panic(ptr @.str.2231, i64 1509, ptr @.str.2232) + unreachable +ok3551: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 0 + %t32 = load i64, ptr %a7 + %t33 = load { ptr, i64, i64 }, ptr %t31 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range3552, label %inrange3553 +range3552: + call void @finch_panic_index(ptr @.str.2233, i64 1509, i64 %t32, i64 %t34) + unreachable +inrange3553: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.ast.Program, ptr %t36, i64 %t32 + %t38 = getelementptr inbounds %S.ast.Program, ptr %t37, i32 0, i32 6 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i32 0, i32 1 + %t40 = load i64, ptr %t39 + store i64 0, ptr %a41 + br label %for.cond3554 +for.cond3554: + %t42 = load i64, ptr %a41 + %t43 = icmp slt i64 %t42, %t40 + br i1 %t43, label %for.body3555, label %for.end3557 +for.body3555: + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic3558, label %ok3559 +panic3558: + call void @finch_panic(ptr @.str.2234, i64 1510, ptr @.str.2235) + unreachable +ok3559: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 0 + %t47 = load i64, ptr %a7 + %t48 = load { ptr, i64, i64 }, ptr %t46 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range3560, label %inrange3561 +range3560: + call void @finch_panic_index(ptr @.str.2236, i64 1510, i64 %t47, i64 %t49) + unreachable +inrange3561: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i64 %t47 + %t53 = getelementptr inbounds %S.ast.Program, ptr %t52, i32 0, i32 6 + %t54 = load i64, ptr %a41 + %t55 = load { ptr, i64, i64 }, ptr %t53 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range3562, label %inrange3563 +range3562: + call void @finch_panic_index(ptr @.str.2237, i64 1510, i64 %t54, i64 %t56) + unreachable +inrange3563: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 + %t60 = load %S.ast.Node, ptr %t59 + store %S.ast.Node %t60, ptr %a61 + call void @finch.copy.S_ast_Node(ptr %a62, ptr %a61) + %t63 = load %S.ast.Node, ptr %a62 + store %S.ast.Node %t63, ptr %a64 + %t65 = load ptr, ptr %a1 + %t66 = load ptr, ptr %a1 + %t67 = icmp eq ptr %t66, null + br i1 %t67, label %panic3564, label %ok3565 +panic3564: + call void @finch_panic(ptr @.str.2238, i64 1511, ptr @.str.2239) + unreachable +ok3565: + %t68 = getelementptr inbounds %S.gen.Gen, ptr %t66, i32 0, i32 14 + %t69 = load { ptr, i64, i64 }, ptr %t68 + %t70 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t71 = load { ptr, i64, i64 }, ptr %t70 + %t72 = call i64 @finch.gen.findStruct(ptr %t65, { ptr, i64, i64 } %t69, { ptr, i64, i64 } %t71) + %t73 = icmp sge i64 %t72, 0 + br label %logic.from3566 +logic.from3566: + br i1 %t73, label %logic.end3568, label %logic.rhs3567 +logic.rhs3567: + %t74 = load ptr, ptr %a1 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic3569, label %ok3570 +panic3569: + call void @finch_panic(ptr @.str.2240, i64 1511, ptr @.str.2241) + unreachable +ok3570: + %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 14 + %t78 = load { ptr, i64, i64 }, ptr %t77 + %t79 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t80 = load { ptr, i64, i64 }, ptr %t79 + %t81 = call i64 @finch.gen.findTemplate(ptr %t74, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t80, { ptr, i64, i64 } { ptr @.str.2242, i64 0, i64 0 }, i1 true) + %t82 = icmp sge i64 %t81, 0 + br label %logic.rend3571 +logic.rend3571: + br label %logic.end3568 +logic.end3568: + %t83 = phi i1 [ true, %logic.from3566 ], [ %t82, %logic.rend3571 ] + br i1 %t83, label %then3572, label %endif3574 +then3572: + %t84 = load ptr, ptr %a1 + %t85 = load %S.ast.Node, ptr %a64 + %t86 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } { ptr @.str.2243, i64 12, i64 0 }, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.2244, i64 18, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + call void @finch.gen.fail(ptr %t84, %S.ast.Node %t85, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %endif3574 +endif3574: + %t98 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 + %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 + %t100 = load i64, ptr %t99 + %t101 = icmp sgt i64 %t100, 0 + br i1 %t101, label %then3575, label %endif3577 +then3575: + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic3578, label %ok3579 +panic3578: + call void @finch_panic(ptr @.str.2245, i64 1516, ptr @.str.2246) + unreachable +ok3579: + %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 17 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t106 = load ptr, ptr %a1 + %t107 = icmp eq ptr %t106, null + br i1 %t107, label %panic3580, label %ok3581 +panic3580: + call void @finch_panic(ptr @.str.2247, i64 1516, ptr @.str.2248) + unreachable +ok3581: + %t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 14 + %t109 = load { ptr, i64, i64 }, ptr %t108 + store { ptr, i64, i64 } %t109, ptr %a110 + call void @finch_str_copy(ptr %a111, ptr %a110) + %t112 = load { ptr, i64, i64 }, ptr %a111 + %t113 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t112, 0 + %t114 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } %t115, ptr %a116 + call void @finch_str_copy(ptr %a117, ptr %a116) + %t118 = load { ptr, i64, i64 }, ptr %a117 + %t119 = insertvalue %S.gen.Template %t113, { ptr, i64, i64 } %t118, 1 + %t120 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 + %t121 = load { ptr, i64, i64 }, ptr %t120 + store { ptr, i64, i64 } %t121, ptr %a122 + call void @finch.copy.arr_str(ptr %a123, ptr %a122) + %t124 = load { ptr, i64, i64 }, ptr %a123 + %t125 = insertvalue %S.gen.Template %t119, { ptr, i64, i64 } %t124, 3 + %t126 = load i64, ptr %a7 + %t127 = insertvalue %S.gen.Template %t125, i64 %t126, 4 + %t128 = load i64, ptr %a41 + %t129 = insertvalue %S.gen.Template %t127, i64 %t128, 5 + %t130 = insertvalue %S.gen.Template %t129, i1 true, 6 + %t131 = load i64, ptr %t105 + %t132 = add i64 %t131, 1 + call void @finch_arr_reserve(ptr %t104, i64 %t132, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) + %t133 = load ptr, ptr %t104 + %t134 = getelementptr inbounds %S.gen.Template, ptr %t133, i64 %t131 + store %S.gen.Template %t130, ptr %t134 + store i64 %t132, ptr %t105 + call void @finch.drop.S_ast_Node(ptr %a64) + br label %for.step3556 +endif3577: + %t135 = load ptr, ptr %a1 + %t136 = icmp eq ptr %t135, null + br i1 %t136, label %panic3582, label %ok3583 +panic3582: + call void @finch_panic(ptr @.str.2249, i64 1519, ptr @.str.2250) + unreachable +ok3583: + %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 16 + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 + %t139 = load ptr, ptr %a1 + %t140 = icmp eq ptr %t139, null + br i1 %t140, label %panic3584, label %ok3585 +panic3584: + call void @finch_panic(ptr @.str.2251, i64 1519, ptr @.str.2252) + unreachable +ok3585: + %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 14 + %t142 = load { ptr, i64, i64 }, ptr %t141 + store { ptr, i64, i64 } %t142, ptr %a143 + call void @finch_str_copy(ptr %a144, ptr %a143) + %t145 = load { ptr, i64, i64 }, ptr %a144 + %t146 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t145, 0 + %t147 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t148 = load { ptr, i64, i64 }, ptr %t147 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch_str_copy(ptr %a150, ptr %a149) + %t151 = load { ptr, i64, i64 }, ptr %a150 + %t152 = insertvalue %S.gen.StructDef %t146, { ptr, i64, i64 } %t151, 1 + %t153 = load i64, ptr %a7 + %t154 = insertvalue %S.gen.StructDef %t152, i64 %t153, 13 + %t155 = load i64, ptr %a41 + %t156 = insertvalue %S.gen.StructDef %t154, i64 %t155, 14 + %t157 = load i64, ptr %t138 + %t158 = add i64 %t157, 1 + call void @finch_arr_reserve(ptr %t137, i64 %t158, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) + %t159 = load ptr, ptr %t137 + %t160 = getelementptr inbounds %S.gen.StructDef, ptr %t159, i64 %t157 + store %S.gen.StructDef %t156, ptr %t160 + store i64 %t158, ptr %t138 + call void @finch.drop.S_ast_Node(ptr %a64) + br label %for.step3556 +for.step3556: + %t161 = load i64, ptr %a41 + %t162 = add i64 %t161, 1 + store i64 %t162, ptr %a41 + br label %for.cond3554 +for.end3557: + br label %for.step3542 +for.step3542: + %t163 = load i64, ptr %a7 + %t164 = add i64 %t163, 1 + store i64 %t164, ptr %a7 + br label %for.cond3540 +for.end3543: + %t165 = load ptr, ptr %a1 + %t166 = icmp eq ptr %t165, null + br i1 %t166, label %panic3586, label %ok3587 +panic3586: + call void @finch_panic(ptr @.str.2253, i64 1522, ptr @.str.2254) + unreachable +ok3587: + %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 0 + %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t169 = load i64, ptr %t168 + store i64 0, ptr %a170 + br label %for.cond3588 +for.cond3588: + %t171 = load i64, ptr %a170 + %t172 = icmp slt i64 %t171, %t169 + br i1 %t172, label %for.body3589, label %for.end3591 +for.body3589: + %t173 = load ptr, ptr %a1 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic3592, label %ok3593 +panic3592: + call void @finch_panic(ptr @.str.2255, i64 1523, ptr @.str.2256) + unreachable +ok3593: + %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 0 + %t176 = load i64, ptr %a170 + %t177 = load { ptr, i64, i64 }, ptr %t175 + %t178 = extractvalue { ptr, i64, i64 } %t177, 1 + %t179 = icmp uge i64 %t176, %t178 + br i1 %t179, label %range3594, label %inrange3595 +range3594: + call void @finch_panic_index(ptr @.str.2257, i64 1523, i64 %t176, i64 %t178) + unreachable +inrange3595: + %t180 = extractvalue { ptr, i64, i64 } %t177, 0 + %t181 = getelementptr inbounds %S.ast.Program, ptr %t180, i64 %t176 + %t182 = getelementptr inbounds %S.ast.Program, ptr %t181, i32 0, i32 0 + %t183 = load { ptr, i64, i64 }, ptr %t182 + %t184 = load ptr, ptr %a1 + %t185 = icmp eq ptr %t184, null + br i1 %t185, label %panic3596, label %ok3597 +panic3596: + call void @finch_panic(ptr @.str.2258, i64 1523, ptr @.str.2259) + unreachable +ok3597: + %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 14 + store { ptr, i64, i64 } %t183, ptr %a187 + call void @finch_str_copy(ptr %a188, ptr %a187) + %t189 = load { ptr, i64, i64 }, ptr %a188 + %t190 = load { ptr, i64, i64 }, ptr %t186 + store { ptr, i64, i64 } %t189, ptr %t186 + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load ptr, ptr %a1 + %t193 = icmp eq ptr %t192, null + br i1 %t193, label %panic3598, label %ok3599 +panic3598: + call void @finch_panic(ptr @.str.2260, i64 1524, ptr @.str.2261) + unreachable +ok3599: + %t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 0 + %t195 = load i64, ptr %a170 + %t196 = load { ptr, i64, i64 }, ptr %t194 + %t197 = extractvalue { ptr, i64, i64 } %t196, 1 + %t198 = icmp uge i64 %t195, %t197 + br i1 %t198, label %range3600, label %inrange3601 +range3600: + call void @finch_panic_index(ptr @.str.2262, i64 1524, i64 %t195, i64 %t197) + unreachable +inrange3601: + %t199 = extractvalue { ptr, i64, i64 } %t196, 0 + %t200 = getelementptr inbounds %S.ast.Program, ptr %t199, i64 %t195 + %t201 = getelementptr inbounds %S.ast.Program, ptr %t200, i32 0, i32 7 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 + %t203 = load i64, ptr %t202 + store i64 0, ptr %a204 + br label %for.cond3602 +for.cond3602: + %t205 = load i64, ptr %a204 + %t206 = icmp slt i64 %t205, %t203 + br i1 %t206, label %for.body3603, label %for.end3605 +for.body3603: + %t207 = load ptr, ptr %a1 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic3606, label %ok3607 +panic3606: + call void @finch_panic(ptr @.str.2263, i64 1525, ptr @.str.2264) + unreachable +ok3607: + %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 0 + %t210 = load i64, ptr %a170 + %t211 = load { ptr, i64, i64 }, ptr %t209 + %t212 = extractvalue { ptr, i64, i64 } %t211, 1 + %t213 = icmp uge i64 %t210, %t212 + br i1 %t213, label %range3608, label %inrange3609 +range3608: + call void @finch_panic_index(ptr @.str.2265, i64 1525, i64 %t210, i64 %t212) + unreachable +inrange3609: + %t214 = extractvalue { ptr, i64, i64 } %t211, 0 + %t215 = getelementptr inbounds %S.ast.Program, ptr %t214, i64 %t210 + %t216 = getelementptr inbounds %S.ast.Program, ptr %t215, i32 0, i32 7 + %t217 = load i64, ptr %a204 + %t218 = load { ptr, i64, i64 }, ptr %t216 + %t219 = extractvalue { ptr, i64, i64 } %t218, 1 + %t220 = icmp uge i64 %t217, %t219 + br i1 %t220, label %range3610, label %inrange3611 +range3610: + call void @finch_panic_index(ptr @.str.2266, i64 1525, i64 %t217, i64 %t219) + unreachable +inrange3611: + %t221 = extractvalue { ptr, i64, i64 } %t218, 0 + %t222 = getelementptr inbounds %S.ast.Node, ptr %t221, i64 %t217 + %t223 = load %S.ast.Node, ptr %t222 + store %S.ast.Node %t223, ptr %a224 + call void @finch.copy.S_ast_Node(ptr %a225, ptr %a224) + %t226 = load %S.ast.Node, ptr %a225 + store %S.ast.Node %t226, ptr %a227 + %t228 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 6 + %t229 = load i1, ptr %t228 + br i1 %t229, label %then3612, label %endif3614 +then3612: + %t230 = load ptr, ptr %a1 + %t231 = load ptr, ptr %a1 + %t232 = icmp eq ptr %t231, null + br i1 %t232, label %panic3615, label %ok3616 +panic3615: + call void @finch_panic(ptr @.str.2267, i64 1527, ptr @.str.2268) + unreachable +ok3616: + %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 14 + %t234 = load { ptr, i64, i64 }, ptr %t233 + %t235 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t236 = load { ptr, i64, i64 }, ptr %t235 + %t237 = call i64 @finch.gen.findEnum(ptr %t230, { ptr, i64, i64 } %t234, { ptr, i64, i64 } %t236) + %t238 = icmp sge i64 %t237, 0 + br label %logic.from3617 +logic.from3617: + br i1 %t238, label %logic.end3619, label %logic.rhs3618 +logic.rhs3618: + %t239 = load ptr, ptr %a1 + %t240 = load ptr, ptr %a1 + %t241 = icmp eq ptr %t240, null + br i1 %t241, label %panic3620, label %ok3621 +panic3620: + call void @finch_panic(ptr @.str.2269, i64 1527, ptr @.str.2270) + unreachable +ok3621: + %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 14 + %t243 = load { ptr, i64, i64 }, ptr %t242 + %t244 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t245 = load { ptr, i64, i64 }, ptr %t244 + %t246 = call i64 @finch.gen.findSum(ptr %t239, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t245) + %t247 = icmp sge i64 %t246, 0 + br label %logic.rend3622 +logic.rend3622: + br label %logic.end3619 +logic.end3619: + %t248 = phi i1 [ true, %logic.from3617 ], [ %t247, %logic.rend3622 ] + br i1 %t248, label %then3623, label %endif3625 +then3623: + %t249 = load ptr, ptr %a1 + %t250 = load %S.ast.Node, ptr %a227 + %t251 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t252 = load { ptr, i64, i64 }, ptr %t251 + store { ptr, i64, i64 } { ptr @.str.2271, i64 1, i64 0 }, ptr %a254 + store { ptr, i64, i64 } %t252, ptr %a255 + call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a253 + store { ptr, i64, i64 } %t256, ptr %a258 + store { ptr, i64, i64 } { ptr @.str.2272, i64 18, i64 0 }, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t256, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.fail(ptr %t249, %S.ast.Node %t250, { ptr, i64, i64 } %t261) + store { ptr, i64, i64 } %t261, ptr %a262 + call void @finch_str_drop(ptr %a262) + br label %endif3625 +endif3625: + %t263 = load ptr, ptr %a1 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic3626, label %ok3627 +panic3626: + call void @finch_panic(ptr @.str.2273, i64 1530, ptr @.str.2274) + unreachable +ok3627: + %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 14 + %t266 = load { ptr, i64, i64 }, ptr %t265 + store { ptr, i64, i64 } %t266, ptr %a267 + call void @finch_str_copy(ptr %a268, ptr %a267) + %t269 = load { ptr, i64, i64 }, ptr %a268 + %t270 = insertvalue %S.gen.SumDef zeroinitializer, { ptr, i64, i64 } %t269, 0 + %t271 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } %t272, ptr %a273 + call void @finch_str_copy(ptr %a274, ptr %a273) + %t275 = load { ptr, i64, i64 }, ptr %a274 + %t276 = insertvalue %S.gen.SumDef %t270, { ptr, i64, i64 } %t275, 1 + store %S.gen.SumDef %t276, ptr %a277 + store i64 1, ptr %a278 + %t279 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 + store i64 0, ptr %a280 + br label %each.cond3628 +each.cond3628: + %t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %t279, i32 0, i32 1 + %t282 = load i64, ptr %t281 + %t283 = load i64, ptr %a280 + %t284 = icmp slt i64 %t283, %t282 + br i1 %t284, label %each.body3629, label %each.end3631 +each.body3629: + %t285 = load ptr, ptr %t279 + %t286 = getelementptr inbounds %S.ast.Node, ptr %t285, i64 %t283 + %t287 = load %S.ast.Node, ptr %t286 + store %S.ast.Node %t287, ptr %a288 + %t289 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 + %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 + %t291 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 + %t292 = load { ptr, i64, i64 }, ptr %t291 + store i64 -1, ptr %a293 + %t294 = load i64, ptr %t290 + %t295 = load ptr, ptr %t289 + store i64 0, ptr %a296 + br label %find.cond3632 +find.cond3632: + %t297 = load i64, ptr %a296 + %t298 = icmp slt i64 %t297, %t294 + br i1 %t298, label %find.body3633, label %find.end3636 +find.body3633: + %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t295, i64 %t297 + %t300 = load { ptr, i64, i64 }, ptr %t299 + store { ptr, i64, i64 } %t300, ptr %a301 + store { ptr, i64, i64 } %t292, ptr %a302 + %t303 = call i32 @finch_str_eq(ptr %a301, ptr %a302) + %t304 = icmp ne i32 %t303, 0 + br i1 %t304, label %find.hit3634, label %find.next3635 +find.hit3634: + store i64 %t297, ptr %a293 + br label %find.end3636 +find.next3635: + %t305 = add i64 %t297, 1 + store i64 %t305, ptr %a296 + br label %find.cond3632 +find.end3636: + %t306 = load i64, ptr %a293 + %t307 = icmp sge i64 %t306, 0 + br i1 %t307, label %then3637, label %endif3639 +then3637: + %t308 = load ptr, ptr %a1 + %t309 = load %S.ast.Node, ptr %a288 + %t310 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t311 = load { ptr, i64, i64 }, ptr %t310 + store { ptr, i64, i64 } { ptr @.str.2275, i64 9, i64 0 }, ptr %a313 + store { ptr, i64, i64 } %t311, ptr %a314 + call void @finch_str_concat(ptr %a312, ptr %a313, ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a312 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.2276, i64 17, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + %t321 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 + %t322 = load { ptr, i64, i64 }, ptr %t321 + store { ptr, i64, i64 } %t320, ptr %a324 + store { ptr, i64, i64 } %t322, ptr %a325 + call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) + store { ptr, i64, i64 } %t320, ptr %a326 + call void @finch_str_drop(ptr %a326) + %t327 = load { ptr, i64, i64 }, ptr %a323 + store { ptr, i64, i64 } %t327, ptr %a329 + store { ptr, i64, i64 } { ptr @.str.2277, i64 6, i64 0 }, ptr %a330 + call void @finch_str_concat(ptr %a328, ptr %a329, ptr %a330) + store { ptr, i64, i64 } %t327, ptr %a331 + call void @finch_str_drop(ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a328 + call void @finch.gen.fail(ptr %t308, %S.ast.Node %t309, { ptr, i64, i64 } %t332) + store { ptr, i64, i64 } %t332, ptr %a333 + call void @finch_str_drop(ptr %a333) + br label %endif3639 +endif3639: + %t334 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 + %t335 = getelementptr inbounds { ptr, i64, i64 }, ptr %t334, i32 0, i32 1 + %t336 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 + %t337 = load { ptr, i64, i64 }, ptr %t336 + store { ptr, i64, i64 } %t337, ptr %a338 + call void @finch_str_copy(ptr %a339, ptr %a338) + %t340 = load { ptr, i64, i64 }, ptr %a339 + %t341 = load i64, ptr %t335 + %t342 = add i64 %t341, 1 + call void @finch_arr_reserve(ptr %t334, i64 %t342, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t343 = load ptr, ptr %t334 + %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %t343, i64 %t341 + store { ptr, i64, i64 } %t340, ptr %t344 + store i64 %t342, ptr %t335 + %t345 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 3 + %t346 = getelementptr inbounds { ptr, i64, i64 }, ptr %t345, i32 0, i32 1 + %t347 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 9 + %t348 = getelementptr inbounds { ptr, i64, i64 }, ptr %t347, i32 0, i32 1 + %t349 = load i64, ptr %t348 + %t350 = load i64, ptr %t346 + %t351 = add i64 %t350, 1 + call void @finch_arr_reserve(ptr %t345, i64 %t351, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t352 = load ptr, ptr %t345 + %t353 = getelementptr inbounds i64, ptr %t352, i64 %t350 + store i64 %t349, ptr %t353 + store i64 %t351, ptr %t346 + %t354 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 4 + %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i32 0, i32 1 + %t356 = load i64, ptr %a278 + %t357 = load i64, ptr %t355 + %t358 = add i64 %t357, 1 + call void @finch_arr_reserve(ptr %t354, i64 %t358, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t359 = load ptr, ptr %t354 + %t360 = getelementptr inbounds i64, ptr %t359, i64 %t357 + store i64 %t356, ptr %t360 + store i64 %t358, ptr %t355 + %t361 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 9 + %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %t361, i32 0, i32 1 + %t363 = load i64, ptr %t362 + %t364 = load i64, ptr %a278 + %t365 = add i64 %t364, %t363 + store i64 %t365, ptr %a278 + br label %each.step3630 +each.step3630: + %t366 = load i64, ptr %a280 + %t367 = add i64 %t366, 1 + store i64 %t367, ptr %a280 + br label %each.cond3628 +each.end3631: + %t368 = load ptr, ptr %a1 + %t369 = icmp eq ptr %t368, null + br i1 %t369, label %panic3640, label %ok3641 +panic3640: + call void @finch_panic(ptr @.str.2278, i64 1541, ptr @.str.2279) + unreachable +ok3641: + %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 22 + %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 + %t372 = load %S.gen.SumDef, ptr %a277 + store %S.gen.SumDef %t372, ptr %a373 + call void @finch.copy.S_gen_SumDef(ptr %a374, ptr %a373) + %t375 = load %S.gen.SumDef, ptr %a374 + %t376 = load i64, ptr %t371 + %t377 = add i64 %t376, 1 + call void @finch_arr_reserve(ptr %t370, i64 %t377, i64 ptrtoint (ptr getelementptr (%S.gen.SumDef, ptr null, i32 1) to i64)) + %t378 = load ptr, ptr %t370 + %t379 = getelementptr inbounds %S.gen.SumDef, ptr %t378, i64 %t376 + store %S.gen.SumDef %t375, ptr %t379 + store i64 %t377, ptr %t371 + call void @finch.drop.S_gen_SumDef(ptr %a277) + call void @finch.drop.S_ast_Node(ptr %a227) + br label %for.step3604 +endif3614: + %t380 = load ptr, ptr %a1 + %t381 = load ptr, ptr %a1 + %t382 = icmp eq ptr %t381, null + br i1 %t382, label %panic3642, label %ok3643 +panic3642: + call void @finch_panic(ptr @.str.2280, i64 1544, ptr @.str.2281) + unreachable +ok3643: + %t383 = getelementptr inbounds %S.gen.Gen, ptr %t381, i32 0, i32 14 + %t384 = load { ptr, i64, i64 }, ptr %t383 + %t385 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t386 = load { ptr, i64, i64 }, ptr %t385 + %t387 = call i64 @finch.gen.findEnum(ptr %t380, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t386) + %t388 = icmp sge i64 %t387, 0 + br label %logic.from3644 +logic.from3644: + br i1 %t388, label %logic.end3646, label %logic.rhs3645 +logic.rhs3645: + %t389 = load ptr, ptr %a1 + %t390 = load ptr, ptr %a1 + %t391 = icmp eq ptr %t390, null + br i1 %t391, label %panic3647, label %ok3648 +panic3647: + call void @finch_panic(ptr @.str.2282, i64 1544, ptr @.str.2283) + unreachable +ok3648: + %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 14 + %t393 = load { ptr, i64, i64 }, ptr %t392 + %t394 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t395 = load { ptr, i64, i64 }, ptr %t394 + %t396 = call i64 @finch.gen.findStruct(ptr %t389, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t395) + %t397 = icmp sge i64 %t396, 0 + br label %logic.rend3649 +logic.rend3649: + br label %logic.end3646 +logic.end3646: + %t398 = phi i1 [ true, %logic.from3644 ], [ %t397, %logic.rend3649 ] + br i1 %t398, label %then3650, label %endif3652 +then3650: + %t399 = load ptr, ptr %a1 + %t400 = load %S.ast.Node, ptr %a227 + %t401 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t402 = load { ptr, i64, i64 }, ptr %t401 + store { ptr, i64, i64 } { ptr @.str.2284, i64 1, i64 0 }, ptr %a404 + store { ptr, i64, i64 } %t402, ptr %a405 + call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a403 + store { ptr, i64, i64 } %t406, ptr %a408 + store { ptr, i64, i64 } { ptr @.str.2285, i64 18, i64 0 }, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + store { ptr, i64, i64 } %t406, ptr %a410 + call void @finch_str_drop(ptr %a410) + %t411 = load { ptr, i64, i64 }, ptr %a407 + call void @finch.gen.fail(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t411) + store { ptr, i64, i64 } %t411, ptr %a412 + call void @finch_str_drop(ptr %a412) + br label %endif3652 +endif3652: + %t413 = load ptr, ptr %a1 + %t414 = icmp eq ptr %t413, null + br i1 %t414, label %panic3653, label %ok3654 +panic3653: + call void @finch_panic(ptr @.str.2286, i64 1547, ptr @.str.2287) + unreachable +ok3654: + %t415 = getelementptr inbounds %S.gen.Gen, ptr %t413, i32 0, i32 14 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t416, ptr %a417 + call void @finch_str_copy(ptr %a418, ptr %a417) + %t419 = load { ptr, i64, i64 }, ptr %a418 + %t420 = insertvalue %S.gen.EnumDef zeroinitializer, { ptr, i64, i64 } %t419, 0 + %t421 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t422 = load { ptr, i64, i64 }, ptr %t421 + store { ptr, i64, i64 } %t422, ptr %a423 + call void @finch_str_copy(ptr %a424, ptr %a423) + %t425 = load { ptr, i64, i64 }, ptr %a424 + %t426 = insertvalue %S.gen.EnumDef %t420, { ptr, i64, i64 } %t425, 1 + store %S.gen.EnumDef %t426, ptr %a427 + store i64 0, ptr %a428 + %t429 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 + store i64 0, ptr %a430 + br label %each.cond3655 +each.cond3655: + %t431 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i32 0, i32 1 + %t432 = load i64, ptr %t431 + %t433 = load i64, ptr %a430 + %t434 = icmp slt i64 %t433, %t432 + br i1 %t434, label %each.body3656, label %each.end3658 +each.body3656: + %t435 = load ptr, ptr %t429 + %t436 = getelementptr inbounds %S.ast.Node, ptr %t435, i64 %t433 + %t437 = load %S.ast.Node, ptr %t436 + store %S.ast.Node %t437, ptr %a438 + %t439 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 + %t440 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 + %t441 = load i64, ptr %t440 + %t442 = icmp sgt i64 %t441, 0 + br i1 %t442, label %then3659, label %endif3661 +then3659: + %t443 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 + %t444 = load { ptr, i64, i64 }, ptr %t443 + store { ptr, i64, i64 } %t444, ptr %a445 + %t446 = call i64 @finch_str_to_int(ptr %a445, ptr @.str.2288, i64 1551) + store i64 %t446, ptr %a428 + br label %endif3661 +endif3661: + %t447 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 + %t448 = getelementptr inbounds { ptr, i64, i64 }, ptr %t447, i32 0, i32 1 + %t449 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 + %t450 = load { ptr, i64, i64 }, ptr %t449 + store i64 -1, ptr %a451 + %t452 = load i64, ptr %t448 + %t453 = load ptr, ptr %t447 + store i64 0, ptr %a454 + br label %find.cond3662 +find.cond3662: + %t455 = load i64, ptr %a454 + %t456 = icmp slt i64 %t455, %t452 + br i1 %t456, label %find.body3663, label %find.end3666 +find.body3663: + %t457 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t455 + %t458 = load { ptr, i64, i64 }, ptr %t457 + store { ptr, i64, i64 } %t458, ptr %a459 + store { ptr, i64, i64 } %t450, ptr %a460 + %t461 = call i32 @finch_str_eq(ptr %a459, ptr %a460) + %t462 = icmp ne i32 %t461, 0 + br i1 %t462, label %find.hit3664, label %find.next3665 +find.hit3664: + store i64 %t455, ptr %a451 + br label %find.end3666 +find.next3665: + %t463 = add i64 %t455, 1 + store i64 %t463, ptr %a454 + br label %find.cond3662 +find.end3666: + %t464 = load i64, ptr %a451 + %t465 = icmp sge i64 %t464, 0 + br i1 %t465, label %then3667, label %endif3669 +then3667: + %t466 = load ptr, ptr %a1 + %t467 = load %S.ast.Node, ptr %a438 + %t468 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t469 = load { ptr, i64, i64 }, ptr %t468 + store { ptr, i64, i64 } { ptr @.str.2289, i64 9, i64 0 }, ptr %a471 + store { ptr, i64, i64 } %t469, ptr %a472 + call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) + %t473 = load { ptr, i64, i64 }, ptr %a470 + store { ptr, i64, i64 } %t473, ptr %a475 + store { ptr, i64, i64 } { ptr @.str.2290, i64 17, i64 0 }, ptr %a476 + call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) + store { ptr, i64, i64 } %t473, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = load { ptr, i64, i64 }, ptr %a474 + %t479 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 + %t480 = load { ptr, i64, i64 }, ptr %t479 + store { ptr, i64, i64 } %t478, ptr %a482 + store { ptr, i64, i64 } %t480, ptr %a483 + call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) + store { ptr, i64, i64 } %t478, ptr %a484 + call void @finch_str_drop(ptr %a484) + %t485 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t485, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.2291, i64 6, i64 0 }, ptr %a488 + call void @finch_str_concat(ptr %a486, ptr %a487, ptr %a488) + store { ptr, i64, i64 } %t485, ptr %a489 + call void @finch_str_drop(ptr %a489) + %t490 = load { ptr, i64, i64 }, ptr %a486 + call void @finch.gen.fail(ptr %t466, %S.ast.Node %t467, { ptr, i64, i64 } %t490) + store { ptr, i64, i64 } %t490, ptr %a491 + call void @finch_str_drop(ptr %a491) + br label %endif3669 +endif3669: + %t492 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 + %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t492, i32 0, i32 1 + %t494 = load i64, ptr %a428 + store i64 -1, ptr %a495 + %t496 = load i64, ptr %t493 + %t497 = load ptr, ptr %t492 + store i64 0, ptr %a498 + br label %find.cond3670 +find.cond3670: + %t499 = load i64, ptr %a498 + %t500 = icmp slt i64 %t499, %t496 + br i1 %t500, label %find.body3671, label %find.end3674 +find.body3671: + %t501 = getelementptr inbounds i64, ptr %t497, i64 %t499 + %t502 = load i64, ptr %t501 + %t503 = icmp eq i64 %t502, %t494 + br i1 %t503, label %find.hit3672, label %find.next3673 +find.hit3672: + store i64 %t499, ptr %a495 + br label %find.end3674 +find.next3673: + %t504 = add i64 %t499, 1 + store i64 %t504, ptr %a498 + br label %find.cond3670 +find.end3674: + %t505 = load i64, ptr %a495 + %t506 = icmp sge i64 %t505, 0 + br i1 %t506, label %then3675, label %endif3677 +then3675: + %t507 = load ptr, ptr %a1 + %t508 = load %S.ast.Node, ptr %a438 + %t509 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t510 = load { ptr, i64, i64 }, ptr %t509 + store { ptr, i64, i64 } { ptr @.str.2292, i64 16, i64 0 }, ptr %a512 + store { ptr, i64, i64 } %t510, ptr %a513 + call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) + %t514 = load { ptr, i64, i64 }, ptr %a511 + store { ptr, i64, i64 } %t514, ptr %a516 + store { ptr, i64, i64 } { ptr @.str.2293, i64 17, i64 0 }, ptr %a517 + call void @finch_str_concat(ptr %a515, ptr %a516, ptr %a517) + store { ptr, i64, i64 } %t514, ptr %a518 + call void @finch_str_drop(ptr %a518) + %t519 = load { ptr, i64, i64 }, ptr %a515 + %t520 = load i64, ptr %a428 + call void @finch_str_from_int(ptr %a521, i64 %t520) + %t522 = load { ptr, i64, i64 }, ptr %a521 + store { ptr, i64, i64 } %t519, ptr %a524 + store { ptr, i64, i64 } %t522, ptr %a525 + call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) + store { ptr, i64, i64 } %t519, ptr %a526 + call void @finch_str_drop(ptr %a526) + store { ptr, i64, i64 } %t522, ptr %a527 + call void @finch_str_drop(ptr %a527) + %t528 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t528, ptr %a530 + store { ptr, i64, i64 } { ptr @.str.2294, i64 20, i64 0 }, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + call void @finch.gen.fail(ptr %t507, %S.ast.Node %t508, { ptr, i64, i64 } %t533) + store { ptr, i64, i64 } %t533, ptr %a534 + call void @finch_str_drop(ptr %a534) + br label %endif3677 +endif3677: + %t535 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 + %t536 = getelementptr inbounds { ptr, i64, i64 }, ptr %t535, i32 0, i32 1 + %t537 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 + %t538 = load { ptr, i64, i64 }, ptr %t537 + store { ptr, i64, i64 } %t538, ptr %a539 + call void @finch_str_copy(ptr %a540, ptr %a539) + %t541 = load { ptr, i64, i64 }, ptr %a540 + %t542 = load i64, ptr %t536 + %t543 = add i64 %t542, 1 + call void @finch_arr_reserve(ptr %t535, i64 %t543, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t544 = load ptr, ptr %t535 + %t545 = getelementptr inbounds { ptr, i64, i64 }, ptr %t544, i64 %t542 + store { ptr, i64, i64 } %t541, ptr %t545 + store i64 %t543, ptr %t536 + %t546 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 + %t547 = getelementptr inbounds { ptr, i64, i64 }, ptr %t546, i32 0, i32 1 + %t548 = load i64, ptr %a428 + %t549 = load i64, ptr %t547 + %t550 = add i64 %t549, 1 + call void @finch_arr_reserve(ptr %t546, i64 %t550, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t551 = load ptr, ptr %t546 + %t552 = getelementptr inbounds i64, ptr %t551, i64 %t549 + store i64 %t548, ptr %t552 + store i64 %t550, ptr %t547 + %t553 = load i64, ptr %a428 + %t554 = add i64 %t553, 1 + store i64 %t554, ptr %a428 + br label %each.step3657 +each.step3657: + %t555 = load i64, ptr %a430 + %t556 = add i64 %t555, 1 + store i64 %t556, ptr %a430 + br label %each.cond3655 +each.end3658: + %t557 = load ptr, ptr %a1 + %t558 = icmp eq ptr %t557, null + br i1 %t558, label %panic3678, label %ok3679 +panic3678: + call void @finch_panic(ptr @.str.2295, i64 1563, ptr @.str.2296) + unreachable +ok3679: + %t559 = getelementptr inbounds %S.gen.Gen, ptr %t557, i32 0, i32 21 + %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 + %t561 = load %S.gen.EnumDef, ptr %a427 + store %S.gen.EnumDef %t561, ptr %a562 + call void @finch.copy.S_gen_EnumDef(ptr %a563, ptr %a562) + %t564 = load %S.gen.EnumDef, ptr %a563 + %t565 = load i64, ptr %t560 + %t566 = add i64 %t565, 1 + call void @finch_arr_reserve(ptr %t559, i64 %t566, i64 ptrtoint (ptr getelementptr (%S.gen.EnumDef, ptr null, i32 1) to i64)) + %t567 = load ptr, ptr %t559 + %t568 = getelementptr inbounds %S.gen.EnumDef, ptr %t567, i64 %t565 + store %S.gen.EnumDef %t564, ptr %t568 + store i64 %t566, ptr %t560 + call void @finch.drop.S_gen_EnumDef(ptr %a427) + call void @finch.drop.S_ast_Node(ptr %a227) + br label %for.step3604 +for.step3604: + %t569 = load i64, ptr %a204 + %t570 = add i64 %t569, 1 + store i64 %t570, ptr %a204 + br label %for.cond3602 +for.end3605: + br label %for.step3590 +for.step3590: + %t571 = load i64, ptr %a170 + %t572 = add i64 %t571, 1 + store i64 %t572, ptr %a170 + br label %for.cond3588 +for.end3591: + %t573 = load ptr, ptr %a1 + %t574 = icmp eq ptr %t573, null + br i1 %t574, label %panic3680, label %ok3681 +panic3680: + call void @finch_panic(ptr @.str.2297, i64 1566, ptr @.str.2298) + unreachable +ok3681: + %t575 = getelementptr inbounds %S.gen.Gen, ptr %t573, i32 0, i32 26 + %t576 = getelementptr inbounds %S.cimport.CImports, ptr %t575, i32 0, i32 4 + %t577 = getelementptr inbounds { ptr, i64, i64 }, ptr %t576, i32 0, i32 1 + %t578 = load i64, ptr %t577 + store i64 0, ptr %a579 + br label %for.cond3682 +for.cond3682: + %t580 = load i64, ptr %a579 + %t581 = icmp slt i64 %t580, %t578 + br i1 %t581, label %for.body3683, label %for.end3685 +for.body3683: + %t582 = load ptr, ptr %a1 + %t583 = icmp eq ptr %t582, null + br i1 %t583, label %panic3686, label %ok3687 +panic3686: + call void @finch_panic(ptr @.str.2299, i64 1567, ptr @.str.2300) + unreachable +ok3687: + %t584 = getelementptr inbounds %S.gen.Gen, ptr %t582, i32 0, i32 16 + %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i32 0, i32 1 + %t586 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } { ptr @.str.2301, i64 1, i64 0 }, 0 + %t587 = load ptr, ptr %a1 + %t588 = icmp eq ptr %t587, null + br i1 %t588, label %panic3688, label %ok3689 +panic3688: + call void @finch_panic(ptr @.str.2302, i64 1567, ptr @.str.2303) + unreachable +ok3689: + %t589 = getelementptr inbounds %S.gen.Gen, ptr %t587, i32 0, i32 26 + %t590 = getelementptr inbounds %S.cimport.CImports, ptr %t589, i32 0, i32 4 + %t591 = load i64, ptr %a579 + %t592 = load { ptr, i64, i64 }, ptr %t590 + %t593 = extractvalue { ptr, i64, i64 } %t592, 1 + %t594 = icmp uge i64 %t591, %t593 + br i1 %t594, label %range3690, label %inrange3691 +range3690: + call void @finch_panic_index(ptr @.str.2304, i64 1567, i64 %t591, i64 %t593) + unreachable +inrange3691: + %t595 = extractvalue { ptr, i64, i64 } %t592, 0 + %t596 = getelementptr inbounds { ptr, i64, i64 }, ptr %t595, i64 %t591 + %t597 = load { ptr, i64, i64 }, ptr %t596 + store { ptr, i64, i64 } %t597, ptr %a598 + call void @finch_str_copy(ptr %a599, ptr %a598) + %t600 = load { ptr, i64, i64 }, ptr %a599 + %t601 = insertvalue %S.gen.StructDef %t586, { ptr, i64, i64 } %t600, 1 + %t602 = insertvalue %S.gen.StructDef %t601, i1 true, 2 + %t603 = insertvalue %S.gen.StructDef %t602, i64 -1, 13 + %t604 = load i64, ptr %a579 + %t605 = insertvalue %S.gen.StructDef %t603, i64 %t604, 14 + %t606 = load i64, ptr %t585 + %t607 = add i64 %t606, 1 + call void @finch_arr_reserve(ptr %t584, i64 %t607, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) + %t608 = load ptr, ptr %t584 + %t609 = getelementptr inbounds %S.gen.StructDef, ptr %t608, i64 %t606 + store %S.gen.StructDef %t605, ptr %t609 + store i64 %t607, ptr %t585 + br label %for.step3684 +for.step3684: + %t610 = load i64, ptr %a579 + %t611 = add i64 %t610, 1 + store i64 %t611, ptr %a579 + br label %for.cond3682 +for.end3685: + %t612 = load ptr, ptr %a1 + %t613 = icmp eq ptr %t612, null + br i1 %t613, label %panic3692, label %ok3693 +panic3692: + call void @finch_panic(ptr @.str.2305, i64 1569, ptr @.str.2306) + unreachable +ok3693: + %t614 = getelementptr inbounds %S.gen.Gen, ptr %t612, i32 0, i32 16 + %t615 = getelementptr inbounds { ptr, i64, i64 }, ptr %t614, i32 0, i32 1 + %t616 = load i64, ptr %t615 + store i64 0, ptr %a617 + br label %for.cond3694 +for.cond3694: + %t618 = load i64, ptr %a617 + %t619 = icmp slt i64 %t618, %t616 + br i1 %t619, label %for.body3695, label %for.end3697 +for.body3695: + %t620 = load ptr, ptr %a1 + %t621 = load i64, ptr %a617 + call void @finch.gen.resolveStruct(ptr %t620, i64 %t621) + br label %for.step3696 +for.step3696: + %t622 = load i64, ptr %a617 + %t623 = add i64 %t622, 1 + store i64 %t623, ptr %a617 + br label %for.cond3694 +for.end3697: + %t624 = load ptr, ptr %a1 + %t625 = icmp eq ptr %t624, null + br i1 %t625, label %panic3698, label %ok3699 +panic3698: + call void @finch_panic(ptr @.str.2307, i64 1572, ptr @.str.2308) + unreachable +ok3699: + %t626 = getelementptr inbounds %S.gen.Gen, ptr %t624, i32 0, i32 0 + %t627 = getelementptr inbounds { ptr, i64, i64 }, ptr %t626, i32 0, i32 1 + %t628 = load i64, ptr %t627 + store i64 0, ptr %a629 + br label %for.cond3700 +for.cond3700: + %t630 = load i64, ptr %a629 + %t631 = icmp slt i64 %t630, %t628 + br i1 %t631, label %for.body3701, label %for.end3703 +for.body3701: + %t632 = load ptr, ptr %a1 + %t633 = icmp eq ptr %t632, null + br i1 %t633, label %panic3704, label %ok3705 +panic3704: + call void @finch_panic(ptr @.str.2309, i64 1573, ptr @.str.2310) + unreachable +ok3705: + %t634 = getelementptr inbounds %S.gen.Gen, ptr %t632, i32 0, i32 0 + %t635 = load i64, ptr %a629 + %t636 = load { ptr, i64, i64 }, ptr %t634 + %t637 = extractvalue { ptr, i64, i64 } %t636, 1 + %t638 = icmp uge i64 %t635, %t637 + br i1 %t638, label %range3706, label %inrange3707 +range3706: + call void @finch_panic_index(ptr @.str.2311, i64 1573, i64 %t635, i64 %t637) + unreachable +inrange3707: + %t639 = extractvalue { ptr, i64, i64 } %t636, 0 + %t640 = getelementptr inbounds %S.ast.Program, ptr %t639, i64 %t635 + %t641 = getelementptr inbounds %S.ast.Program, ptr %t640, i32 0, i32 0 + %t642 = load { ptr, i64, i64 }, ptr %t641 + %t643 = load ptr, ptr %a1 + %t644 = icmp eq ptr %t643, null + br i1 %t644, label %panic3708, label %ok3709 +panic3708: + call void @finch_panic(ptr @.str.2312, i64 1573, ptr @.str.2313) + unreachable +ok3709: + %t645 = getelementptr inbounds %S.gen.Gen, ptr %t643, i32 0, i32 14 + store { ptr, i64, i64 } %t642, ptr %a646 + call void @finch_str_copy(ptr %a647, ptr %a646) + %t648 = load { ptr, i64, i64 }, ptr %a647 + %t649 = load { ptr, i64, i64 }, ptr %t645 + store { ptr, i64, i64 } %t648, ptr %t645 + store { ptr, i64, i64 } %t649, ptr %a650 + call void @finch_str_drop(ptr %a650) + %t651 = load ptr, ptr %a1 + %t652 = icmp eq ptr %t651, null + br i1 %t652, label %panic3710, label %ok3711 +panic3710: + call void @finch_panic(ptr @.str.2314, i64 1574, ptr @.str.2315) + unreachable +ok3711: + %t653 = getelementptr inbounds %S.gen.Gen, ptr %t651, i32 0, i32 0 + %t654 = load i64, ptr %a629 + %t655 = load { ptr, i64, i64 }, ptr %t653 + %t656 = extractvalue { ptr, i64, i64 } %t655, 1 + %t657 = icmp uge i64 %t654, %t656 + br i1 %t657, label %range3712, label %inrange3713 +range3712: + call void @finch_panic_index(ptr @.str.2316, i64 1574, i64 %t654, i64 %t656) + unreachable +inrange3713: + %t658 = extractvalue { ptr, i64, i64 } %t655, 0 + %t659 = getelementptr inbounds %S.ast.Program, ptr %t658, i64 %t654 + %t660 = getelementptr inbounds %S.ast.Program, ptr %t659, i32 0, i32 8 + %t661 = getelementptr inbounds { ptr, i64, i64 }, ptr %t660, i32 0, i32 1 + %t662 = load i64, ptr %t661 + store i64 0, ptr %a663 + br label %for.cond3714 +for.cond3714: + %t664 = load i64, ptr %a663 + %t665 = icmp slt i64 %t664, %t662 + br i1 %t665, label %for.body3715, label %for.end3717 +for.body3715: + %t666 = load ptr, ptr %a1 + %t667 = icmp eq ptr %t666, null + br i1 %t667, label %panic3718, label %ok3719 +panic3718: + call void @finch_panic(ptr @.str.2317, i64 1575, ptr @.str.2318) + unreachable +ok3719: + %t668 = getelementptr inbounds %S.gen.Gen, ptr %t666, i32 0, i32 0 + %t669 = load i64, ptr %a629 + %t670 = load { ptr, i64, i64 }, ptr %t668 + %t671 = extractvalue { ptr, i64, i64 } %t670, 1 + %t672 = icmp uge i64 %t669, %t671 + br i1 %t672, label %range3720, label %inrange3721 +range3720: + call void @finch_panic_index(ptr @.str.2319, i64 1575, i64 %t669, i64 %t671) + unreachable +inrange3721: + %t673 = extractvalue { ptr, i64, i64 } %t670, 0 + %t674 = getelementptr inbounds %S.ast.Program, ptr %t673, i64 %t669 + %t675 = getelementptr inbounds %S.ast.Program, ptr %t674, i32 0, i32 8 + %t676 = load i64, ptr %a663 + %t677 = load { ptr, i64, i64 }, ptr %t675 + %t678 = extractvalue { ptr, i64, i64 } %t677, 1 + %t679 = icmp uge i64 %t676, %t678 + br i1 %t679, label %range3722, label %inrange3723 +range3722: + call void @finch_panic_index(ptr @.str.2320, i64 1575, i64 %t676, i64 %t678) + unreachable +inrange3723: + %t680 = extractvalue { ptr, i64, i64 } %t677, 0 + %t681 = getelementptr inbounds %S.ast.Node, ptr %t680, i64 %t676 + %t682 = load %S.ast.Node, ptr %t681 + store %S.ast.Node %t682, ptr %a683 + call void @finch.copy.S_ast_Node(ptr %a684, ptr %a683) + %t685 = load %S.ast.Node, ptr %a684 + store %S.ast.Node %t685, ptr %a686 + %t687 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 3 + %t688 = getelementptr inbounds { ptr, i64, i64 }, ptr %t687, i32 0, i32 1 + %t689 = load i64, ptr %t688 + %t690 = icmp sgt i64 %t689, 0 + br i1 %t690, label %then3724, label %endif3726 +then3724: + %t691 = load ptr, ptr %a1 + %t692 = load ptr, ptr %a1 + %t693 = icmp eq ptr %t692, null + br i1 %t693, label %panic3727, label %ok3728 +panic3727: + call void @finch_panic(ptr @.str.2321, i64 1578, ptr @.str.2322) + unreachable +ok3728: + %t694 = getelementptr inbounds %S.gen.Gen, ptr %t692, i32 0, i32 14 + %t695 = load { ptr, i64, i64 }, ptr %t694 + %t696 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t697 = load { ptr, i64, i64 }, ptr %t696 + %t698 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t699 = load { ptr, i64, i64 }, ptr %t698 + %t700 = call i64 @finch.gen.findTemplate(ptr %t691, { ptr, i64, i64 } %t695, { ptr, i64, i64 } %t697, { ptr, i64, i64 } %t699, i1 false) + %t701 = icmp sge i64 %t700, 0 + br i1 %t701, label %then3729, label %endif3731 +then3729: + %t702 = load ptr, ptr %a1 + %t703 = load %S.ast.Node, ptr %a686 + %t704 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t705 = load { ptr, i64, i64 }, ptr %t704 + store { ptr, i64, i64 } { ptr @.str.2323, i64 10, i64 0 }, ptr %a707 + store { ptr, i64, i64 } %t705, ptr %a708 + call void @finch_str_concat(ptr %a706, ptr %a707, ptr %a708) + %t709 = load { ptr, i64, i64 }, ptr %a706 + store { ptr, i64, i64 } %t709, ptr %a711 + store { ptr, i64, i64 } { ptr @.str.2324, i64 18, i64 0 }, ptr %a712 + call void @finch_str_concat(ptr %a710, ptr %a711, ptr %a712) + store { ptr, i64, i64 } %t709, ptr %a713 + call void @finch_str_drop(ptr %a713) + %t714 = load { ptr, i64, i64 }, ptr %a710 + call void @finch.gen.fail(ptr %t702, %S.ast.Node %t703, { ptr, i64, i64 } %t714) + store { ptr, i64, i64 } %t714, ptr %a715 + call void @finch_str_drop(ptr %a715) + br label %endif3731 +endif3731: + %t716 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t717 = getelementptr inbounds { ptr, i64, i64 }, ptr %t716, i32 0, i32 1 + %t718 = load i64, ptr %t717 + %t719 = icmp sgt i64 %t718, 0 + br label %logic.from3732 +logic.from3732: + br i1 %t719, label %logic.rhs3733, label %logic.end3734 +logic.rhs3733: + %t720 = load ptr, ptr %a1 + %t721 = load ptr, ptr %a1 + %t722 = icmp eq ptr %t721, null + br i1 %t722, label %panic3735, label %ok3736 +panic3735: + call void @finch_panic(ptr @.str.2325, i64 1581, ptr @.str.2326) + unreachable +ok3736: + %t723 = getelementptr inbounds %S.gen.Gen, ptr %t721, i32 0, i32 14 + %t724 = load { ptr, i64, i64 }, ptr %t723 + %t725 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t726 = load { ptr, i64, i64 }, ptr %t725 + %t727 = call i64 @finch.gen.findTemplate(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t726, { ptr, i64, i64 } { ptr @.str.2327, i64 0, i64 0 }, i1 true) + %t728 = icmp slt i64 %t727, 0 + br label %logic.rend3737 +logic.rend3737: + br label %logic.end3734 +logic.end3734: + %t729 = phi i1 [ false, %logic.from3732 ], [ %t728, %logic.rend3737 ] + br i1 %t729, label %then3738, label %endif3740 +then3738: + %t730 = load ptr, ptr %a1 + %t731 = load %S.ast.Node, ptr %a686 + %t732 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t733 = load { ptr, i64, i64 }, ptr %t732 + store { ptr, i64, i64 } { ptr @.str.2328, i64 34, i64 0 }, ptr %a735 + store { ptr, i64, i64 } %t733, ptr %a736 + call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) + %t737 = load { ptr, i64, i64 }, ptr %a734 + store { ptr, i64, i64 } %t737, ptr %a739 + store { ptr, i64, i64 } { ptr @.str.2329, i64 53, i64 0 }, ptr %a740 + call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) + store { ptr, i64, i64 } %t737, ptr %a741 + call void @finch_str_drop(ptr %a741) + %t742 = load { ptr, i64, i64 }, ptr %a738 + call void @finch.gen.fail(ptr %t730, %S.ast.Node %t731, { ptr, i64, i64 } %t742) + store { ptr, i64, i64 } %t742, ptr %a743 + call void @finch_str_drop(ptr %a743) + br label %endif3740 +endif3740: + %t744 = load ptr, ptr %a1 + %t745 = icmp eq ptr %t744, null + br i1 %t745, label %panic3741, label %ok3742 +panic3741: + call void @finch_panic(ptr @.str.2330, i64 1584, ptr @.str.2331) + unreachable +ok3742: + %t746 = getelementptr inbounds %S.gen.Gen, ptr %t744, i32 0, i32 17 + %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i32 0, i32 1 + %t748 = load ptr, ptr %a1 + %t749 = icmp eq ptr %t748, null + br i1 %t749, label %panic3743, label %ok3744 +panic3743: + call void @finch_panic(ptr @.str.2332, i64 1584, ptr @.str.2333) + unreachable +ok3744: + %t750 = getelementptr inbounds %S.gen.Gen, ptr %t748, i32 0, i32 14 + %t751 = load { ptr, i64, i64 }, ptr %t750 + store { ptr, i64, i64 } %t751, ptr %a752 + call void @finch_str_copy(ptr %a753, ptr %a752) + %t754 = load { ptr, i64, i64 }, ptr %a753 + %t755 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t754, 0 + %t756 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t757 = load { ptr, i64, i64 }, ptr %t756 + store { ptr, i64, i64 } %t757, ptr %a758 + call void @finch_str_copy(ptr %a759, ptr %a758) + %t760 = load { ptr, i64, i64 }, ptr %a759 + %t761 = insertvalue %S.gen.Template %t755, { ptr, i64, i64 } %t760, 1 + %t762 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t763 = load { ptr, i64, i64 }, ptr %t762 + store { ptr, i64, i64 } %t763, ptr %a764 + call void @finch_str_copy(ptr %a765, ptr %a764) + %t766 = load { ptr, i64, i64 }, ptr %a765 + %t767 = insertvalue %S.gen.Template %t761, { ptr, i64, i64 } %t766, 2 + %t768 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 3 + %t769 = load { ptr, i64, i64 }, ptr %t768 + store { ptr, i64, i64 } %t769, ptr %a770 + call void @finch.copy.arr_str(ptr %a771, ptr %a770) + %t772 = load { ptr, i64, i64 }, ptr %a771 + %t773 = insertvalue %S.gen.Template %t767, { ptr, i64, i64 } %t772, 3 + %t774 = load i64, ptr %a629 + %t775 = insertvalue %S.gen.Template %t773, i64 %t774, 4 + %t776 = load i64, ptr %a663 + %t777 = insertvalue %S.gen.Template %t775, i64 %t776, 5 + %t778 = load i64, ptr %t747 + %t779 = add i64 %t778, 1 + call void @finch_arr_reserve(ptr %t746, i64 %t779, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) + %t780 = load ptr, ptr %t746 + %t781 = getelementptr inbounds %S.gen.Template, ptr %t780, i64 %t778 + store %S.gen.Template %t777, ptr %t781 + store i64 %t779, ptr %t747 + call void @finch.drop.S_ast_Node(ptr %a686) + br label %for.step3716 +endif3726: + %t782 = load ptr, ptr %a1 + %t783 = icmp eq ptr %t782, null + br i1 %t783, label %panic3745, label %ok3746 +panic3745: + call void @finch_panic(ptr @.str.2334, i64 1587, ptr @.str.2335) + unreachable +ok3746: + %t784 = getelementptr inbounds %S.gen.Gen, ptr %t782, i32 0, i32 14 + %t785 = load { ptr, i64, i64 }, ptr %t784 + store { ptr, i64, i64 } %t785, ptr %a786 + call void @finch_str_copy(ptr %a787, ptr %a786) + %t788 = load { ptr, i64, i64 }, ptr %a787 + store { ptr, i64, i64 } %t788, ptr %a789 + store i1 false, ptr %a790 + %t791 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t792 = getelementptr inbounds { ptr, i64, i64 }, ptr %t791, i32 0, i32 1 + %t793 = load i64, ptr %t792 + %t794 = icmp sgt i64 %t793, 0 + br label %logic.from3747 +logic.from3747: + br i1 %t794, label %logic.rhs3748, label %logic.end3749 +logic.rhs3748: + %t795 = load ptr, ptr %a1 + %t796 = load ptr, ptr %a1 + %t797 = icmp eq ptr %t796, null + br i1 %t797, label %panic3750, label %ok3751 +panic3750: + call void @finch_panic(ptr @.str.2336, i64 1589, ptr @.str.2337) + unreachable +ok3751: + %t798 = getelementptr inbounds %S.gen.Gen, ptr %t796, i32 0, i32 14 + %t799 = load { ptr, i64, i64 }, ptr %t798 + %t800 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t801 = load { ptr, i64, i64 }, ptr %t800 + %t802 = call i64 @finch.gen.findEnum(ptr %t795, { ptr, i64, i64 } %t799, { ptr, i64, i64 } %t801) + %t803 = icmp sge i64 %t802, 0 + br label %logic.rend3752 +logic.rend3752: + br label %logic.end3749 +logic.end3749: + %t804 = phi i1 [ false, %logic.from3747 ], [ %t803, %logic.rend3752 ] + br i1 %t804, label %then3753, label %else3754 +then3753: + store i1 true, ptr %a790 + %t805 = load ptr, ptr %a1 + %t806 = load { ptr, i64, i64 }, ptr %a789 + %t807 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t808 = load { ptr, i64, i64 }, ptr %t807 + %t809 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t810 = load { ptr, i64, i64 }, ptr %t809 + %t811 = call i64 @finch.gen.findMethod(ptr %t805, { ptr, i64, i64 } %t806, { ptr, i64, i64 } %t808, { ptr, i64, i64 } %t810) + %t812 = icmp sge i64 %t811, 0 + br i1 %t812, label %then3756, label %endif3758 +then3756: + %t813 = load ptr, ptr %a1 + %t814 = load %S.ast.Node, ptr %a686 + %t815 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t816 = load { ptr, i64, i64 }, ptr %t815 + store { ptr, i64, i64 } { ptr @.str.2338, i64 11, i64 0 }, ptr %a818 + store { ptr, i64, i64 } %t816, ptr %a819 + call void @finch_str_concat(ptr %a817, ptr %a818, ptr %a819) + %t820 = load { ptr, i64, i64 }, ptr %a817 + store { ptr, i64, i64 } %t820, ptr %a822 + store { ptr, i64, i64 } { ptr @.str.2339, i64 1, i64 0 }, ptr %a823 + call void @finch_str_concat(ptr %a821, ptr %a822, ptr %a823) + store { ptr, i64, i64 } %t820, ptr %a824 + call void @finch_str_drop(ptr %a824) + %t825 = load { ptr, i64, i64 }, ptr %a821 + %t826 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t827 = load { ptr, i64, i64 }, ptr %t826 + store { ptr, i64, i64 } %t825, ptr %a829 + store { ptr, i64, i64 } %t827, ptr %a830 + call void @finch_str_concat(ptr %a828, ptr %a829, ptr %a830) + store { ptr, i64, i64 } %t825, ptr %a831 + call void @finch_str_drop(ptr %a831) + %t832 = load { ptr, i64, i64 }, ptr %a828 + store { ptr, i64, i64 } %t832, ptr %a834 + store { ptr, i64, i64 } { ptr @.str.2340, i64 17, i64 0 }, ptr %a835 + call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) + store { ptr, i64, i64 } %t832, ptr %a836 + call void @finch_str_drop(ptr %a836) + %t837 = load { ptr, i64, i64 }, ptr %a833 + call void @finch.gen.fail(ptr %t813, %S.ast.Node %t814, { ptr, i64, i64 } %t837) + store { ptr, i64, i64 } %t837, ptr %a838 + call void @finch_str_drop(ptr %a838) + br label %endif3758 +endif3758: + br label %endif3755 +else3754: + %t839 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t840 = getelementptr inbounds { ptr, i64, i64 }, ptr %t839, i32 0, i32 1 + %t841 = load i64, ptr %t840 + %t842 = icmp sgt i64 %t841, 0 + br i1 %t842, label %then3759, label %else3760 +then3759: + %t843 = load ptr, ptr %a1 + %t844 = load ptr, ptr %a1 + %t845 = icmp eq ptr %t844, null + br i1 %t845, label %panic3762, label %ok3763 +panic3762: + call void @finch_panic(ptr @.str.2341, i64 1595, ptr @.str.2342) + unreachable +ok3763: + %t846 = getelementptr inbounds %S.gen.Gen, ptr %t844, i32 0, i32 14 + %t847 = load { ptr, i64, i64 }, ptr %t846 + %t848 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t849 = load { ptr, i64, i64 }, ptr %t848 + %t850 = call i64 @finch.gen.findStruct(ptr %t843, { ptr, i64, i64 } %t847, { ptr, i64, i64 } %t849) + store i64 %t850, ptr %a851 + %t852 = load i64, ptr %a851 + %t853 = icmp slt i64 %t852, 0 + br label %logic.from3764 +logic.from3764: + br i1 %t853, label %logic.rhs3765, label %logic.end3766 +logic.rhs3765: + %t854 = load ptr, ptr %a1 + %t855 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t856 = load { ptr, i64, i64 }, ptr %t855 + %t857 = call i64 @finch.gen.findStruct(ptr %t854, { ptr, i64, i64 } { ptr @.str.2343, i64 1, i64 0 }, { ptr, i64, i64 } %t856) + %t858 = icmp sge i64 %t857, 0 + br label %logic.rend3767 +logic.rend3767: + br label %logic.end3766 +logic.end3766: + %t859 = phi i1 [ false, %logic.from3764 ], [ %t858, %logic.rend3767 ] + br i1 %t859, label %then3768, label %endif3770 +then3768: + %t860 = load ptr, ptr %a1 + %t861 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t862 = load { ptr, i64, i64 }, ptr %t861 + %t863 = call i64 @finch.gen.findStruct(ptr %t860, { ptr, i64, i64 } { ptr @.str.2344, i64 1, i64 0 }, { ptr, i64, i64 } %t862) + store i64 %t863, ptr %a851 + %t864 = load { ptr, i64, i64 }, ptr %a789 + store { ptr, i64, i64 } { ptr @.str.2345, i64 1, i64 0 }, ptr %a789 + store { ptr, i64, i64 } %t864, ptr %a865 + call void @finch_str_drop(ptr %a865) + br label %endif3770 +endif3770: + %t866 = load i64, ptr %a851 + %t867 = icmp slt i64 %t866, 0 + br i1 %t867, label %then3771, label %endif3773 +then3771: + %t868 = load ptr, ptr %a1 + %t869 = load %S.ast.Node, ptr %a686 + %t870 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t871 = load { ptr, i64, i64 }, ptr %t870 + store { ptr, i64, i64 } { ptr @.str.2346, i64 26, i64 0 }, ptr %a873 + store { ptr, i64, i64 } %t871, ptr %a874 + call void @finch_str_concat(ptr %a872, ptr %a873, ptr %a874) + %t875 = load { ptr, i64, i64 }, ptr %a872 + store { ptr, i64, i64 } %t875, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.2347, i64 76, i64 0 }, ptr %a878 + call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878) + store { ptr, i64, i64 } %t875, ptr %a879 + call void @finch_str_drop(ptr %a879) + %t880 = load { ptr, i64, i64 }, ptr %a876 + call void @finch.gen.fail(ptr %t868, %S.ast.Node %t869, { ptr, i64, i64 } %t880) + store { ptr, i64, i64 } %t880, ptr %a881 + call void @finch_str_drop(ptr %a881) + br label %endif3773 +endif3773: + %t882 = load ptr, ptr %a1 + %t883 = load { ptr, i64, i64 }, ptr %a789 + %t884 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t885 = load { ptr, i64, i64 }, ptr %t884 + %t886 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t887 = load { ptr, i64, i64 }, ptr %t886 + %t888 = call i64 @finch.gen.findMethod(ptr %t882, { ptr, i64, i64 } %t883, { ptr, i64, i64 } %t885, { ptr, i64, i64 } %t887) + %t889 = icmp sge i64 %t888, 0 + br i1 %t889, label %then3774, label %endif3776 +then3774: + %t890 = load ptr, ptr %a1 + %t891 = load %S.ast.Node, ptr %a686 + %t892 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t893 = load { ptr, i64, i64 }, ptr %t892 + store { ptr, i64, i64 } { ptr @.str.2348, i64 11, i64 0 }, ptr %a895 + store { ptr, i64, i64 } %t893, ptr %a896 + call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) + %t897 = load { ptr, i64, i64 }, ptr %a894 + store { ptr, i64, i64 } %t897, ptr %a899 + store { ptr, i64, i64 } { ptr @.str.2349, i64 1, i64 0 }, ptr %a900 + call void @finch_str_concat(ptr %a898, ptr %a899, ptr %a900) + store { ptr, i64, i64 } %t897, ptr %a901 + call void @finch_str_drop(ptr %a901) + %t902 = load { ptr, i64, i64 }, ptr %a898 + %t903 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t904 = load { ptr, i64, i64 }, ptr %t903 + store { ptr, i64, i64 } %t902, ptr %a906 + store { ptr, i64, i64 } %t904, ptr %a907 + call void @finch_str_concat(ptr %a905, ptr %a906, ptr %a907) + store { ptr, i64, i64 } %t902, ptr %a908 + call void @finch_str_drop(ptr %a908) + %t909 = load { ptr, i64, i64 }, ptr %a905 + store { ptr, i64, i64 } %t909, ptr %a911 + store { ptr, i64, i64 } { ptr @.str.2350, i64 17, i64 0 }, ptr %a912 + call void @finch_str_concat(ptr %a910, ptr %a911, ptr %a912) + store { ptr, i64, i64 } %t909, ptr %a913 + call void @finch_str_drop(ptr %a913) + %t914 = load { ptr, i64, i64 }, ptr %a910 + call void @finch.gen.fail(ptr %t890, %S.ast.Node %t891, { ptr, i64, i64 } %t914) + store { ptr, i64, i64 } %t914, ptr %a915 + call void @finch_str_drop(ptr %a915) + br label %endif3776 +endif3776: + %t916 = load ptr, ptr %a1 + %t917 = icmp eq ptr %t916, null + br i1 %t917, label %panic3777, label %ok3778 +panic3777: + call void @finch_panic(ptr @.str.2351, i64 1606, ptr @.str.2352) + unreachable +ok3778: + %t918 = getelementptr inbounds %S.gen.Gen, ptr %t916, i32 0, i32 16 + %t919 = load i64, ptr %a851 + %t920 = load { ptr, i64, i64 }, ptr %t918 + %t921 = extractvalue { ptr, i64, i64 } %t920, 1 + %t922 = icmp uge i64 %t919, %t921 + br i1 %t922, label %range3779, label %inrange3780 +range3779: + call void @finch_panic_index(ptr @.str.2353, i64 1606, i64 %t919, i64 %t921) + unreachable +inrange3780: + %t923 = extractvalue { ptr, i64, i64 } %t920, 0 + %t924 = getelementptr inbounds %S.gen.StructDef, ptr %t923, i64 %t919 + %t925 = getelementptr inbounds %S.gen.StructDef, ptr %t924, i32 0, i32 11 + %t926 = getelementptr inbounds { ptr, i64, i64 }, ptr %t925, i32 0, i32 1 + %t927 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t928 = load { ptr, i64, i64 }, ptr %t927 + store i64 -1, ptr %a929 + %t930 = load i64, ptr %t926 + %t931 = load ptr, ptr %t925 + store i64 0, ptr %a932 + br label %find.cond3781 +find.cond3781: + %t933 = load i64, ptr %a932 + %t934 = icmp slt i64 %t933, %t930 + br i1 %t934, label %find.body3782, label %find.end3785 +find.body3782: + %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t931, i64 %t933 + %t936 = load { ptr, i64, i64 }, ptr %t935 + store { ptr, i64, i64 } %t936, ptr %a937 + store { ptr, i64, i64 } %t928, ptr %a938 + %t939 = call i32 @finch_str_eq(ptr %a937, ptr %a938) + %t940 = icmp ne i32 %t939, 0 + br i1 %t940, label %find.hit3783, label %find.next3784 +find.hit3783: + store i64 %t933, ptr %a929 + br label %find.end3785 +find.next3784: + %t941 = add i64 %t933, 1 + store i64 %t941, ptr %a932 + br label %find.cond3781 +find.end3785: + %t942 = load i64, ptr %a929 + %t943 = icmp sge i64 %t942, 0 + br i1 %t943, label %then3786, label %endif3788 +then3786: + %t944 = load ptr, ptr %a1 + %t945 = load %S.ast.Node, ptr %a686 + %t946 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t947 = load { ptr, i64, i64 }, ptr %t946 + store { ptr, i64, i64 } { ptr @.str.2354, i64 11, i64 0 }, ptr %a949 + store { ptr, i64, i64 } %t947, ptr %a950 + call void @finch_str_concat(ptr %a948, ptr %a949, ptr %a950) + %t951 = load { ptr, i64, i64 }, ptr %a948 + store { ptr, i64, i64 } %t951, ptr %a953 + store { ptr, i64, i64 } { ptr @.str.2355, i64 28, i64 0 }, ptr %a954 + call void @finch_str_concat(ptr %a952, ptr %a953, ptr %a954) + store { ptr, i64, i64 } %t951, ptr %a955 + call void @finch_str_drop(ptr %a955) + %t956 = load { ptr, i64, i64 }, ptr %a952 + %t957 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t958 = load { ptr, i64, i64 }, ptr %t957 + store { ptr, i64, i64 } %t956, ptr %a960 + store { ptr, i64, i64 } %t958, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t956, ptr %a962 + call void @finch_str_drop(ptr %a962) + %t963 = load { ptr, i64, i64 }, ptr %a959 + store { ptr, i64, i64 } %t963, ptr %a965 + store { ptr, i64, i64 } { ptr @.str.2356, i64 1, i64 0 }, ptr %a966 + call void @finch_str_concat(ptr %a964, ptr %a965, ptr %a966) + store { ptr, i64, i64 } %t963, ptr %a967 + call void @finch_str_drop(ptr %a967) + %t968 = load { ptr, i64, i64 }, ptr %a964 + call void @finch.gen.fail(ptr %t944, %S.ast.Node %t945, { ptr, i64, i64 } %t968) + store { ptr, i64, i64 } %t968, ptr %a969 + call void @finch_str_drop(ptr %a969) + br label %endif3788 +endif3788: + br label %endif3761 +else3760: + %t970 = load ptr, ptr %a1 + %t971 = load ptr, ptr %a1 + %t972 = icmp eq ptr %t971, null + br i1 %t972, label %panic3789, label %ok3790 +panic3789: + call void @finch_panic(ptr @.str.2357, i64 1610, ptr @.str.2358) + unreachable +ok3790: + %t973 = getelementptr inbounds %S.gen.Gen, ptr %t971, i32 0, i32 14 + %t974 = load { ptr, i64, i64 }, ptr %t973 + %t975 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t976 = load { ptr, i64, i64 }, ptr %t975 + %t977 = call i64 @finch.gen.findFn(ptr %t970, { ptr, i64, i64 } %t974, { ptr, i64, i64 } %t976) + %t978 = icmp sge i64 %t977, 0 + br i1 %t978, label %then3791, label %endif3793 +then3791: + %t979 = load ptr, ptr %a1 + %t980 = load %S.ast.Node, ptr %a686 + %t981 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t982 = load { ptr, i64, i64 }, ptr %t981 + store { ptr, i64, i64 } { ptr @.str.2359, i64 10, i64 0 }, ptr %a984 + store { ptr, i64, i64 } %t982, ptr %a985 + call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) + %t986 = load { ptr, i64, i64 }, ptr %a983 + store { ptr, i64, i64 } %t986, ptr %a988 + store { ptr, i64, i64 } { ptr @.str.2360, i64 18, i64 0 }, ptr %a989 + call void @finch_str_concat(ptr %a987, ptr %a988, ptr %a989) + store { ptr, i64, i64 } %t986, ptr %a990 + call void @finch_str_drop(ptr %a990) + %t991 = load { ptr, i64, i64 }, ptr %a987 + call void @finch.gen.fail(ptr %t979, %S.ast.Node %t980, { ptr, i64, i64 } %t991) + store { ptr, i64, i64 } %t991, ptr %a992 + call void @finch_str_drop(ptr %a992) + br label %endif3793 +endif3793: + %t993 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t994 = load { ptr, i64, i64 }, ptr %t993 + %t995 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t994) + br i1 %t995, label %then3794, label %endif3796 +then3794: + %t996 = load ptr, ptr %a1 + %t997 = load %S.ast.Node, ptr %a686 + %t998 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t999 = load { ptr, i64, i64 }, ptr %t998 + store { ptr, i64, i64 } { ptr @.str.2361, i64 1, i64 0 }, ptr %a1001 + store { ptr, i64, i64 } %t999, ptr %a1002 + call void @finch_str_concat(ptr %a1000, ptr %a1001, ptr %a1002) + %t1003 = load { ptr, i64, i64 }, ptr %a1000 + store { ptr, i64, i64 } %t1003, ptr %a1005 + store { ptr, i64, i64 } { ptr @.str.2362, i64 43, i64 0 }, ptr %a1006 + call void @finch_str_concat(ptr %a1004, ptr %a1005, ptr %a1006) + store { ptr, i64, i64 } %t1003, ptr %a1007 + call void @finch_str_drop(ptr %a1007) + %t1008 = load { ptr, i64, i64 }, ptr %a1004 + call void @finch.gen.fail(ptr %t996, %S.ast.Node %t997, { ptr, i64, i64 } %t1008) + store { ptr, i64, i64 } %t1008, ptr %a1009 + call void @finch_str_drop(ptr %a1009) + br label %endif3796 +endif3796: + br label %endif3761 +endif3761: + br label %endif3755 +endif3755: + %t1010 = load ptr, ptr %a1 + %t1011 = icmp eq ptr %t1010, null + br i1 %t1011, label %panic3797, label %ok3798 +panic3797: + call void @finch_panic(ptr @.str.2363, i64 1617, ptr @.str.2364) + unreachable +ok3798: + %t1012 = getelementptr inbounds %S.gen.Gen, ptr %t1010, i32 0, i32 14 + %t1013 = load { ptr, i64, i64 }, ptr %t1012 + store { ptr, i64, i64 } %t1013, ptr %a1014 + call void @finch_str_copy(ptr %a1015, ptr %a1014) + %t1016 = load { ptr, i64, i64 }, ptr %a1015 + %t1017 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t1016, 0 + %t1018 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t1019 = load { ptr, i64, i64 }, ptr %t1018 + store { ptr, i64, i64 } %t1019, ptr %a1020 + call void @finch_str_copy(ptr %a1021, ptr %a1020) + %t1022 = load { ptr, i64, i64 }, ptr %a1021 + %t1023 = insertvalue %S.gen.FnSig %t1017, { ptr, i64, i64 } %t1022, 1 + %t1024 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1025 = load { ptr, i64, i64 }, ptr %t1024 + store { ptr, i64, i64 } %t1025, ptr %a1026 + call void @finch_str_copy(ptr %a1027, ptr %a1026) + %t1028 = load { ptr, i64, i64 }, ptr %a1027 + %t1029 = insertvalue %S.gen.FnSig %t1023, { ptr, i64, i64 } %t1028, 2 + %t1030 = load { ptr, i64, i64 }, ptr %a789 + store { ptr, i64, i64 } %t1030, ptr %a1031 + call void @finch_str_copy(ptr %a1032, ptr %a1031) + %t1033 = load { ptr, i64, i64 }, ptr %a1032 + %t1034 = insertvalue %S.gen.FnSig %t1029, { ptr, i64, i64 } %t1033, 3 + %t1035 = load i1, ptr %a790 + %t1036 = insertvalue %S.gen.FnSig %t1034, i1 %t1035, 4 + %t1037 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 + %t1038 = load i1, ptr %t1037 + %t1039 = insertvalue %S.gen.FnSig %t1036, i1 %t1038, 5 + %t1040 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 7 + %t1041 = load i1, ptr %t1040 + %t1042 = insertvalue %S.gen.FnSig %t1039, i1 %t1041, 9 + %t1043 = load i64, ptr %a629 + %t1044 = insertvalue %S.gen.FnSig %t1042, i64 %t1043, 16 + %t1045 = load i64, ptr %a663 + %t1046 = insertvalue %S.gen.FnSig %t1044, i64 %t1045, 17 + store %S.gen.FnSig %t1046, ptr %a1047 + %t1048 = load ptr, ptr %a1 + %t1049 = icmp eq ptr %t1048, null + br i1 %t1049, label %panic3799, label %ok3800 +panic3799: + call void @finch_panic(ptr @.str.2366, i64 1618, ptr @.str.2367) + unreachable +ok3800: + %t1050 = getelementptr inbounds %S.gen.Gen, ptr %t1048, i32 0, i32 14 + %t1051 = load { ptr, i64, i64 }, ptr %t1050 + %t1052 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1051) + store { ptr, i64, i64 } { ptr @.str.2365, i64 7, i64 0 }, ptr %a1054 + store { ptr, i64, i64 } %t1052, ptr %a1055 + call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) + store { ptr, i64, i64 } %t1052, ptr %a1056 + call void @finch_str_drop(ptr %a1056) + %t1057 = load { ptr, i64, i64 }, ptr %a1053 + store { ptr, i64, i64 } %t1057, ptr %a1059 + store { ptr, i64, i64 } { ptr @.str.2368, i64 1, i64 0 }, ptr %a1060 + call void @finch_str_concat(ptr %a1058, ptr %a1059, ptr %a1060) + store { ptr, i64, i64 } %t1057, ptr %a1061 + call void @finch_str_drop(ptr %a1061) + %t1062 = load { ptr, i64, i64 }, ptr %a1058 + %t1063 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t1064 = load { ptr, i64, i64 }, ptr %t1063 + store { ptr, i64, i64 } %t1062, ptr %a1066 + store { ptr, i64, i64 } %t1064, ptr %a1067 + call void @finch_str_concat(ptr %a1065, ptr %a1066, ptr %a1067) + store { ptr, i64, i64 } %t1062, ptr %a1068 + call void @finch_str_drop(ptr %a1068) + %t1069 = load { ptr, i64, i64 }, ptr %a1065 + %t1070 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 11 + %t1071 = load { ptr, i64, i64 }, ptr %t1070 + store { ptr, i64, i64 } %t1069, ptr %t1070 + store { ptr, i64, i64 } %t1071, ptr %a1072 + call void @finch_str_drop(ptr %a1072) + %t1073 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1074 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1073, i32 0, i32 1 + %t1075 = load i64, ptr %t1074 + %t1076 = icmp sgt i64 %t1075, 0 + br i1 %t1076, label %then3801, label %endif3803 +then3801: + %t1077 = load ptr, ptr %a1 + %t1078 = icmp eq ptr %t1077, null + br i1 %t1078, label %panic3804, label %ok3805 +panic3804: + call void @finch_panic(ptr @.str.2370, i64 1620, ptr @.str.2371) + unreachable +ok3805: + %t1079 = getelementptr inbounds %S.gen.Gen, ptr %t1077, i32 0, i32 14 + %t1080 = load { ptr, i64, i64 }, ptr %t1079 + %t1081 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1080) + store { ptr, i64, i64 } { ptr @.str.2369, i64 7, i64 0 }, ptr %a1083 + store { ptr, i64, i64 } %t1081, ptr %a1084 + call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084) + store { ptr, i64, i64 } %t1081, ptr %a1085 + call void @finch_str_drop(ptr %a1085) + %t1086 = load { ptr, i64, i64 }, ptr %a1082 + store { ptr, i64, i64 } %t1086, ptr %a1088 + store { ptr, i64, i64 } { ptr @.str.2372, i64 1, i64 0 }, ptr %a1089 + call void @finch_str_concat(ptr %a1087, ptr %a1088, ptr %a1089) + store { ptr, i64, i64 } %t1086, ptr %a1090 + call void @finch_str_drop(ptr %a1090) + %t1091 = load { ptr, i64, i64 }, ptr %a1087 + %t1092 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1093 = load { ptr, i64, i64 }, ptr %t1092 + store { ptr, i64, i64 } %t1091, ptr %a1095 + store { ptr, i64, i64 } %t1093, ptr %a1096 + call void @finch_str_concat(ptr %a1094, ptr %a1095, ptr %a1096) + store { ptr, i64, i64 } %t1091, ptr %a1097 + call void @finch_str_drop(ptr %a1097) + %t1098 = load { ptr, i64, i64 }, ptr %a1094 + store { ptr, i64, i64 } %t1098, ptr %a1100 + store { ptr, i64, i64 } { ptr @.str.2373, i64 1, i64 0 }, ptr %a1101 + call void @finch_str_concat(ptr %a1099, ptr %a1100, ptr %a1101) + store { ptr, i64, i64 } %t1098, ptr %a1102 + call void @finch_str_drop(ptr %a1102) + %t1103 = load { ptr, i64, i64 }, ptr %a1099 + %t1104 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t1105 = load { ptr, i64, i64 }, ptr %t1104 + store { ptr, i64, i64 } %t1103, ptr %a1107 + store { ptr, i64, i64 } %t1105, ptr %a1108 + call void @finch_str_concat(ptr %a1106, ptr %a1107, ptr %a1108) + store { ptr, i64, i64 } %t1103, ptr %a1109 + call void @finch_str_drop(ptr %a1109) + %t1110 = load { ptr, i64, i64 }, ptr %a1106 + %t1111 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 11 + %t1112 = load { ptr, i64, i64 }, ptr %t1111 + store { ptr, i64, i64 } %t1110, ptr %t1111 + store { ptr, i64, i64 } %t1112, ptr %a1113 + call void @finch_str_drop(ptr %a1113) + br label %endif3803 +endif3803: + %t1114 = load ptr, ptr %a1 + %t1115 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 5 + %t1116 = load %S.ast.Type, ptr %t1115 + %t1117 = load %S.ast.Node, ptr %a686 + %t1118 = call %S.ast.Type @finch.gen.resolve(ptr %t1114, %S.ast.Type %t1116, %S.ast.Node %t1117) + %t1119 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 12 + %t1120 = load %S.ast.Type, ptr %t1119 + store %S.ast.Type %t1118, ptr %t1119 + store %S.ast.Type %t1120, ptr %a1121 + call void @finch.drop.S_ast_Type(ptr %a1121) + %t1122 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1122, i32 0, i32 1 + %t1124 = load i64, ptr %t1123 + %t1125 = sub i64 %t1124, 1 + store i64 0, ptr %a1126 + br label %for.cond3806 +for.cond3806: + %t1127 = load i64, ptr %a1126 + %t1128 = icmp slt i64 %t1127, %t1125 + br i1 %t1128, label %for.body3807, label %for.end3809 +for.body3807: + %t1129 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1130 = load i64, ptr %a1126 + %t1131 = load { ptr, i64, i64 }, ptr %t1129 + %t1132 = extractvalue { ptr, i64, i64 } %t1131, 1 + %t1133 = icmp uge i64 %t1130, %t1132 + br i1 %t1133, label %range3810, label %inrange3811 +range3810: + call void @finch_panic_index(ptr @.str.2374, i64 1624, i64 %t1130, i64 %t1132) + unreachable +inrange3811: + %t1134 = extractvalue { ptr, i64, i64 } %t1131, 0 + %t1135 = getelementptr inbounds %S.ast.Node, ptr %t1134, i64 %t1130 + %t1136 = getelementptr inbounds %S.ast.Node, ptr %t1135, i32 0, i32 1 + %t1137 = load { ptr, i64, i64 }, ptr %t1136 + store { ptr, i64, i64 } %t1137, ptr %a1138 + store { ptr, i64, i64 } { ptr @.str.2375, i64 4, i64 0 }, ptr %a1139 + %t1140 = call i32 @finch_str_eq(ptr %a1138, ptr %a1139) + %t1141 = icmp ne i32 %t1140, 0 + br label %logic.from3812 +logic.from3812: + br i1 %t1141, label %logic.rhs3813, label %logic.end3814 +logic.rhs3813: + %t1142 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1142, i32 0, i32 1 + %t1144 = load i64, ptr %t1143 + %t1145 = icmp sgt i64 %t1144, 0 + br label %logic.rend3815 +logic.rend3815: + br label %logic.end3814 +logic.end3814: + %t1146 = phi i1 [ false, %logic.from3812 ], [ %t1145, %logic.rend3815 ] + br i1 %t1146, label %then3816, label %endif3818 +then3816: + %t1147 = load ptr, ptr %a1 + %t1148 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1149 = load i64, ptr %a1126 + %t1150 = load { ptr, i64, i64 }, ptr %t1148 + %t1151 = extractvalue { ptr, i64, i64 } %t1150, 1 + %t1152 = icmp uge i64 %t1149, %t1151 + br i1 %t1152, label %range3819, label %inrange3820 +range3819: + call void @finch_panic_index(ptr @.str.2376, i64 1625, i64 %t1149, i64 %t1151) + unreachable +inrange3820: + %t1153 = extractvalue { ptr, i64, i64 } %t1150, 0 + %t1154 = getelementptr inbounds %S.ast.Node, ptr %t1153, i64 %t1149 + %t1155 = load %S.ast.Node, ptr %t1154 + %t1156 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1157 = load { ptr, i64, i64 }, ptr %t1156 + store { ptr, i64, i64 } { ptr @.str.2377, i64 22, i64 0 }, ptr %a1159 + store { ptr, i64, i64 } %t1157, ptr %a1160 + call void @finch_str_concat(ptr %a1158, ptr %a1159, ptr %a1160) + %t1161 = load { ptr, i64, i64 }, ptr %a1158 + store { ptr, i64, i64 } %t1161, ptr %a1163 + store { ptr, i64, i64 } { ptr @.str.2378, i64 24, i64 0 }, ptr %a1164 + call void @finch_str_concat(ptr %a1162, ptr %a1163, ptr %a1164) + store { ptr, i64, i64 } %t1161, ptr %a1165 + call void @finch_str_drop(ptr %a1165) + %t1166 = load { ptr, i64, i64 }, ptr %a1162 + call void @finch.gen.fail(ptr %t1147, %S.ast.Node %t1155, { ptr, i64, i64 } %t1166) + store { ptr, i64, i64 } %t1166, ptr %a1167 + call void @finch_str_drop(ptr %a1167) + br label %endif3818 +endif3818: + %t1168 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 13 + %t1169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1168, i32 0, i32 1 + %t1170 = load ptr, ptr %a1 + %t1171 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1172 = load i64, ptr %a1126 + %t1173 = load { ptr, i64, i64 }, ptr %t1171 + %t1174 = extractvalue { ptr, i64, i64 } %t1173, 1 + %t1175 = icmp uge i64 %t1172, %t1174 + br i1 %t1175, label %range3821, label %inrange3822 +range3821: + call void @finch_panic_index(ptr @.str.2379, i64 1627, i64 %t1172, i64 %t1174) + unreachable +inrange3822: + %t1176 = extractvalue { ptr, i64, i64 } %t1173, 0 + %t1177 = getelementptr inbounds %S.ast.Node, ptr %t1176, i64 %t1172 + %t1178 = getelementptr inbounds %S.ast.Node, ptr %t1177, i32 0, i32 5 + %t1179 = load %S.ast.Type, ptr %t1178 + %t1180 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1181 = load i64, ptr %a1126 + %t1182 = load { ptr, i64, i64 }, ptr %t1180 + %t1183 = extractvalue { ptr, i64, i64 } %t1182, 1 + %t1184 = icmp uge i64 %t1181, %t1183 + br i1 %t1184, label %range3823, label %inrange3824 +range3823: + call void @finch_panic_index(ptr @.str.2380, i64 1627, i64 %t1181, i64 %t1183) + unreachable +inrange3824: + %t1185 = extractvalue { ptr, i64, i64 } %t1182, 0 + %t1186 = getelementptr inbounds %S.ast.Node, ptr %t1185, i64 %t1181 + %t1187 = load %S.ast.Node, ptr %t1186 + %t1188 = call %S.ast.Type @finch.gen.resolve(ptr %t1170, %S.ast.Type %t1179, %S.ast.Node %t1187) + %t1189 = load i64, ptr %t1169 + %t1190 = add i64 %t1189, 1 + call void @finch_arr_reserve(ptr %t1168, i64 %t1190, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t1191 = load ptr, ptr %t1168 + %t1192 = getelementptr inbounds %S.ast.Type, ptr %t1191, i64 %t1189 + store %S.ast.Type %t1188, ptr %t1192 + store i64 %t1190, ptr %t1169 + %t1193 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 14 + %t1194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1193, i32 0, i32 1 + %t1195 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1196 = load i64, ptr %a1126 + %t1197 = load { ptr, i64, i64 }, ptr %t1195 + %t1198 = extractvalue { ptr, i64, i64 } %t1197, 1 + %t1199 = icmp uge i64 %t1196, %t1198 + br i1 %t1199, label %range3825, label %inrange3826 +range3825: + call void @finch_panic_index(ptr @.str.2381, i64 1628, i64 %t1196, i64 %t1198) + unreachable +inrange3826: + %t1200 = extractvalue { ptr, i64, i64 } %t1197, 0 + %t1201 = getelementptr inbounds %S.ast.Node, ptr %t1200, i64 %t1196 + %t1202 = getelementptr inbounds %S.ast.Node, ptr %t1201, i32 0, i32 1 + %t1203 = load { ptr, i64, i64 }, ptr %t1202 + store { ptr, i64, i64 } %t1203, ptr %a1204 + call void @finch_str_copy(ptr %a1205, ptr %a1204) + %t1206 = load { ptr, i64, i64 }, ptr %a1205 + %t1207 = load i64, ptr %t1194 + %t1208 = add i64 %t1207, 1 + call void @finch_arr_reserve(ptr %t1193, i64 %t1208, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1209 = load ptr, ptr %t1193 + %t1210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1209, i64 %t1207 + store { ptr, i64, i64 } %t1206, ptr %t1210 + store i64 %t1208, ptr %t1194 + br label %for.step3808 +for.step3808: + %t1211 = load i64, ptr %a1126 + %t1212 = add i64 %t1211, 1 + store i64 %t1212, ptr %a1126 + br label %for.cond3806 +for.end3809: + %t1213 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 + %t1214 = load i1, ptr %t1213 + br i1 %t1214, label %then3827, label %endif3829 +then3827: + %t1215 = load ptr, ptr %a1 + %t1216 = load %S.ast.Node, ptr %a686 + %t1217 = load %S.gen.FnSig, ptr %a1047 + call void @finch.gen.checkExport(ptr %t1215, %S.ast.Node %t1216, %S.gen.FnSig %t1217) + br label %endif3829 +endif3829: + %t1218 = load ptr, ptr %a1 + %t1219 = icmp eq ptr %t1218, null + br i1 %t1219, label %panic3830, label %ok3831 +panic3830: + call void @finch_panic(ptr @.str.2382, i64 1633, ptr @.str.2383) + unreachable +ok3831: + %t1220 = getelementptr inbounds %S.gen.Gen, ptr %t1218, i32 0, i32 15 + %t1221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1220, i32 0, i32 1 + %t1222 = load %S.gen.FnSig, ptr %a1047 + store %S.gen.FnSig %t1222, ptr %a1223 + call void @finch.copy.S_gen_FnSig(ptr %a1224, ptr %a1223) + %t1225 = load %S.gen.FnSig, ptr %a1224 + %t1226 = load i64, ptr %t1221 + %t1227 = add i64 %t1226, 1 + call void @finch_arr_reserve(ptr %t1220, i64 %t1227, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) + %t1228 = load ptr, ptr %t1220 + %t1229 = getelementptr inbounds %S.gen.FnSig, ptr %t1228, i64 %t1226 + store %S.gen.FnSig %t1225, ptr %t1229 + store i64 %t1227, ptr %t1221 + call void @finch.drop.S_gen_FnSig(ptr %a1047) + call void @finch_str_drop(ptr %a789) + call void @finch.drop.S_ast_Node(ptr %a686) + br label %for.step3716 +for.step3716: + %t1230 = load i64, ptr %a663 + %t1231 = add i64 %t1230, 1 + store i64 %t1231, ptr %a663 + br label %for.cond3714 +for.end3717: + br label %for.step3702 +for.step3702: + %t1232 = load i64, ptr %a629 + %t1233 = add i64 %t1232, 1 + store i64 %t1233, ptr %a629 + br label %for.cond3700 +for.end3703: + store i1 true, ptr %a1234 + br label %while.cond3832 +while.cond3832: + %t1235 = load i1, ptr %a1234 + br i1 %t1235, label %while.body3833, label %while.end3834 +while.body3833: + store i1 false, ptr %a1234 + %t1236 = load ptr, ptr %a1 + %t1237 = icmp eq ptr %t1236, null + br i1 %t1237, label %panic3835, label %ok3836 +panic3835: + call void @finch_panic(ptr @.str.2384, i64 1641, ptr @.str.2385) + unreachable +ok3836: + %t1238 = getelementptr inbounds %S.gen.Gen, ptr %t1236, i32 0, i32 15 + %t1239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1238, i32 0, i32 1 + %t1240 = load i64, ptr %t1239 + store i64 0, ptr %a1241 + br label %for.cond3837 +for.cond3837: + %t1242 = load i64, ptr %a1241 + %t1243 = icmp slt i64 %t1242, %t1240 + br i1 %t1243, label %for.body3838, label %for.end3840 +for.body3838: + %t1244 = load ptr, ptr %a1 + %t1245 = icmp eq ptr %t1244, null + br i1 %t1245, label %panic3841, label %ok3842 +panic3841: + call void @finch_panic(ptr @.str.2386, i64 1642, ptr @.str.2387) + unreachable +ok3842: + %t1246 = getelementptr inbounds %S.gen.Gen, ptr %t1244, i32 0, i32 15 + %t1247 = load i64, ptr %a1241 + %t1248 = load { ptr, i64, i64 }, ptr %t1246 + %t1249 = extractvalue { ptr, i64, i64 } %t1248, 1 + %t1250 = icmp uge i64 %t1247, %t1249 + br i1 %t1250, label %range3843, label %inrange3844 +range3843: + call void @finch_panic_index(ptr @.str.2388, i64 1642, i64 %t1247, i64 %t1249) + unreachable +inrange3844: + %t1251 = extractvalue { ptr, i64, i64 } %t1248, 0 + %t1252 = getelementptr inbounds %S.gen.FnSig, ptr %t1251, i64 %t1247 + %t1253 = getelementptr inbounds %S.gen.FnSig, ptr %t1252, i32 0, i32 2 + %t1254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1253, i32 0, i32 1 + %t1255 = load i64, ptr %t1254 + %t1256 = icmp sgt i64 %t1255, 0 + br label %logic.from3845 +logic.from3845: + br i1 %t1256, label %logic.rhs3846, label %logic.end3847 +logic.rhs3846: + %t1257 = load ptr, ptr %a1 + %t1258 = icmp eq ptr %t1257, null + br i1 %t1258, label %panic3848, label %ok3849 +panic3848: + call void @finch_panic(ptr @.str.2389, i64 1642, ptr @.str.2390) + unreachable +ok3849: + %t1259 = getelementptr inbounds %S.gen.Gen, ptr %t1257, i32 0, i32 15 + %t1260 = load i64, ptr %a1241 + %t1261 = load { ptr, i64, i64 }, ptr %t1259 + %t1262 = extractvalue { ptr, i64, i64 } %t1261, 1 + %t1263 = icmp uge i64 %t1260, %t1262 + br i1 %t1263, label %range3850, label %inrange3851 +range3850: + call void @finch_panic_index(ptr @.str.2391, i64 1642, i64 %t1260, i64 %t1262) + unreachable +inrange3851: + %t1264 = extractvalue { ptr, i64, i64 } %t1261, 0 + %t1265 = getelementptr inbounds %S.gen.FnSig, ptr %t1264, i64 %t1260 + %t1266 = getelementptr inbounds %S.gen.FnSig, ptr %t1265, i32 0, i32 10 + %t1267 = load i1, ptr %t1266 + %t1268 = xor i1 %t1267, true + br label %logic.rend3852 +logic.rend3852: + br label %logic.end3847 +logic.end3847: + %t1269 = phi i1 [ false, %logic.from3845 ], [ %t1268, %logic.rend3852 ] + br i1 %t1269, label %then3853, label %endif3855 +then3853: + %t1270 = load ptr, ptr %a1 + %t1271 = icmp eq ptr %t1270, null + br i1 %t1271, label %panic3856, label %ok3857 +panic3856: + call void @finch_panic(ptr @.str.2392, i64 1643, ptr @.str.2393) + unreachable +ok3857: + %t1272 = getelementptr inbounds %S.gen.Gen, ptr %t1270, i32 0, i32 0 + %t1273 = load ptr, ptr %a1 + %t1274 = icmp eq ptr %t1273, null + br i1 %t1274, label %panic3858, label %ok3859 +panic3858: + call void @finch_panic(ptr @.str.2394, i64 1643, ptr @.str.2395) + unreachable +ok3859: + %t1275 = getelementptr inbounds %S.gen.Gen, ptr %t1273, i32 0, i32 15 + %t1276 = load i64, ptr %a1241 + %t1277 = load { ptr, i64, i64 }, ptr %t1275 + %t1278 = extractvalue { ptr, i64, i64 } %t1277, 1 + %t1279 = icmp uge i64 %t1276, %t1278 + br i1 %t1279, label %range3860, label %inrange3861 +range3860: + call void @finch_panic_index(ptr @.str.2396, i64 1643, i64 %t1276, i64 %t1278) + unreachable +inrange3861: + %t1280 = extractvalue { ptr, i64, i64 } %t1277, 0 + %t1281 = getelementptr inbounds %S.gen.FnSig, ptr %t1280, i64 %t1276 + %t1282 = getelementptr inbounds %S.gen.FnSig, ptr %t1281, i32 0, i32 16 + %t1283 = load i64, ptr %t1282 + %t1284 = load { ptr, i64, i64 }, ptr %t1272 + %t1285 = extractvalue { ptr, i64, i64 } %t1284, 1 + %t1286 = icmp uge i64 %t1283, %t1285 + br i1 %t1286, label %range3862, label %inrange3863 +range3862: + call void @finch_panic_index(ptr @.str.2397, i64 1643, i64 %t1283, i64 %t1285) + unreachable +inrange3863: + %t1287 = extractvalue { ptr, i64, i64 } %t1284, 0 + %t1288 = getelementptr inbounds %S.ast.Program, ptr %t1287, i64 %t1283 + %t1289 = getelementptr inbounds %S.ast.Program, ptr %t1288, i32 0, i32 8 + %t1290 = load ptr, ptr %a1 + %t1291 = icmp eq ptr %t1290, null + br i1 %t1291, label %panic3864, label %ok3865 +panic3864: + call void @finch_panic(ptr @.str.2398, i64 1643, ptr @.str.2399) + unreachable +ok3865: + %t1292 = getelementptr inbounds %S.gen.Gen, ptr %t1290, i32 0, i32 15 + %t1293 = load i64, ptr %a1241 + %t1294 = load { ptr, i64, i64 }, ptr %t1292 + %t1295 = extractvalue { ptr, i64, i64 } %t1294, 1 + %t1296 = icmp uge i64 %t1293, %t1295 + br i1 %t1296, label %range3866, label %inrange3867 +range3866: + call void @finch_panic_index(ptr @.str.2400, i64 1643, i64 %t1293, i64 %t1295) + unreachable +inrange3867: + %t1297 = extractvalue { ptr, i64, i64 } %t1294, 0 + %t1298 = getelementptr inbounds %S.gen.FnSig, ptr %t1297, i64 %t1293 + %t1299 = getelementptr inbounds %S.gen.FnSig, ptr %t1298, i32 0, i32 17 + %t1300 = load i64, ptr %t1299 + %t1301 = load { ptr, i64, i64 }, ptr %t1289 + %t1302 = extractvalue { ptr, i64, i64 } %t1301, 1 + %t1303 = icmp uge i64 %t1300, %t1302 + br i1 %t1303, label %range3868, label %inrange3869 +range3868: + call void @finch_panic_index(ptr @.str.2401, i64 1643, i64 %t1300, i64 %t1302) + unreachable +inrange3869: + %t1304 = extractvalue { ptr, i64, i64 } %t1301, 0 + %t1305 = getelementptr inbounds %S.ast.Node, ptr %t1304, i64 %t1300 + %t1306 = load %S.ast.Node, ptr %t1305 + store %S.ast.Node %t1306, ptr %a1307 + call void @finch.copy.S_ast_Node(ptr %a1308, ptr %a1307) + %t1309 = load %S.ast.Node, ptr %a1308 + store %S.ast.Node %t1309, ptr %a1310 + %t1311 = load ptr, ptr %a1 + %t1312 = getelementptr inbounds %S.ast.Node, ptr %a1310, i32 0, i32 9 + %t1313 = getelementptr inbounds %S.ast.Node, ptr %a1310, i32 0, i32 9 + %t1314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1313, i32 0, i32 1 + %t1315 = load i64, ptr %t1314 + %t1316 = sub i64 %t1315, 1 + %t1317 = load { ptr, i64, i64 }, ptr %t1312 + %t1318 = extractvalue { ptr, i64, i64 } %t1317, 1 + %t1319 = icmp uge i64 %t1316, %t1318 + br i1 %t1319, label %range3870, label %inrange3871 +range3870: + call void @finch_panic_index(ptr @.str.2403, i64 1644, i64 %t1316, i64 %t1318) + unreachable +inrange3871: + %t1320 = extractvalue { ptr, i64, i64 } %t1317, 0 + %t1321 = getelementptr inbounds %S.ast.Node, ptr %t1320, i64 %t1316 + %t1322 = load %S.ast.Node, ptr %t1321 + %t1323 = call i1 @finch.gen.mutates(ptr %t1311, { ptr, i64, i64 } { ptr @.str.2402, i64 4, i64 0 }, %S.ast.Node %t1322) + br i1 %t1323, label %then3872, label %endif3874 +then3872: + %t1324 = load ptr, ptr %a1 + %t1325 = icmp eq ptr %t1324, null + br i1 %t1325, label %panic3875, label %ok3876 +panic3875: + call void @finch_panic(ptr @.str.2404, i64 1645, ptr @.str.2405) + unreachable +ok3876: + %t1326 = getelementptr inbounds %S.gen.Gen, ptr %t1324, i32 0, i32 15 + %t1327 = load i64, ptr %a1241 + %t1328 = load { ptr, i64, i64 }, ptr %t1326 + %t1329 = extractvalue { ptr, i64, i64 } %t1328, 1 + %t1330 = icmp uge i64 %t1327, %t1329 + br i1 %t1330, label %range3877, label %inrange3878 +range3877: + call void @finch_panic_index(ptr @.str.2406, i64 1645, i64 %t1327, i64 %t1329) + unreachable +inrange3878: + %t1331 = extractvalue { ptr, i64, i64 } %t1328, 0 + %t1332 = getelementptr inbounds %S.gen.FnSig, ptr %t1331, i64 %t1327 + %t1333 = getelementptr inbounds %S.gen.FnSig, ptr %t1332, i32 0, i32 10 + store i1 true, ptr %t1333 + %t1334 = load ptr, ptr %a1 + %t1335 = icmp eq ptr %t1334, null + br i1 %t1335, label %panic3879, label %ok3880 +panic3879: + call void @finch_panic(ptr @.str.2407, i64 1646, ptr @.str.2408) + unreachable +ok3880: + %t1336 = getelementptr inbounds %S.gen.Gen, ptr %t1334, i32 0, i32 24 + %t1337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1336, i32 0, i32 1 + %t1338 = load ptr, ptr %a1 + %t1339 = icmp eq ptr %t1338, null + br i1 %t1339, label %panic3881, label %ok3882 +panic3881: + call void @finch_panic(ptr @.str.2409, i64 1646, ptr @.str.2410) + unreachable +ok3882: + %t1340 = getelementptr inbounds %S.gen.Gen, ptr %t1338, i32 0, i32 15 + %t1341 = load i64, ptr %a1241 + %t1342 = load { ptr, i64, i64 }, ptr %t1340 + %t1343 = extractvalue { ptr, i64, i64 } %t1342, 1 + %t1344 = icmp uge i64 %t1341, %t1343 + br i1 %t1344, label %range3883, label %inrange3884 +range3883: + call void @finch_panic_index(ptr @.str.2411, i64 1646, i64 %t1341, i64 %t1343) + unreachable +inrange3884: + %t1345 = extractvalue { ptr, i64, i64 } %t1342, 0 + %t1346 = getelementptr inbounds %S.gen.FnSig, ptr %t1345, i64 %t1341 + %t1347 = getelementptr inbounds %S.gen.FnSig, ptr %t1346, i32 0, i32 1 + %t1348 = load { ptr, i64, i64 }, ptr %t1347 + store { ptr, i64, i64 } %t1348, ptr %a1349 + call void @finch_str_copy(ptr %a1350, ptr %a1349) + %t1351 = load { ptr, i64, i64 }, ptr %a1350 + %t1352 = load i64, ptr %t1337 + %t1353 = add i64 %t1352, 1 + call void @finch_arr_reserve(ptr %t1336, i64 %t1353, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1354 = load ptr, ptr %t1336 + %t1355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1354, i64 %t1352 + store { ptr, i64, i64 } %t1351, ptr %t1355 + store i64 %t1353, ptr %t1337 + store i1 true, ptr %a1234 + br label %endif3874 +endif3874: + call void @finch.drop.S_ast_Node(ptr %a1310) + br label %endif3855 +endif3855: + br label %for.step3839 +for.step3839: + %t1356 = load i64, ptr %a1241 + %t1357 = add i64 %t1356, 1 + store i64 %t1357, ptr %a1241 + br label %for.cond3837 +for.end3840: + %t1358 = load ptr, ptr %a1 + %t1359 = icmp eq ptr %t1358, null + br i1 %t1359, label %panic3885, label %ok3886 +panic3885: + call void @finch_panic(ptr @.str.2412, i64 1651, ptr @.str.2413) + unreachable +ok3886: + %t1360 = getelementptr inbounds %S.gen.Gen, ptr %t1358, i32 0, i32 17 + %t1361 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1360, i32 0, i32 1 + %t1362 = load i64, ptr %t1361 + store i64 0, ptr %a1363 + br label %for.cond3887 +for.cond3887: + %t1364 = load i64, ptr %a1363 + %t1365 = icmp slt i64 %t1364, %t1362 + br i1 %t1365, label %for.body3888, label %for.end3890 +for.body3888: + %t1366 = load ptr, ptr %a1 + %t1367 = icmp eq ptr %t1366, null + br i1 %t1367, label %panic3891, label %ok3892 +panic3891: + call void @finch_panic(ptr @.str.2414, i64 1652, ptr @.str.2415) + unreachable +ok3892: + %t1368 = getelementptr inbounds %S.gen.Gen, ptr %t1366, i32 0, i32 17 + %t1369 = load i64, ptr %a1363 + %t1370 = load { ptr, i64, i64 }, ptr %t1368 + %t1371 = extractvalue { ptr, i64, i64 } %t1370, 1 + %t1372 = icmp uge i64 %t1369, %t1371 + br i1 %t1372, label %range3893, label %inrange3894 +range3893: + call void @finch_panic_index(ptr @.str.2416, i64 1652, i64 %t1369, i64 %t1371) + unreachable +inrange3894: + %t1373 = extractvalue { ptr, i64, i64 } %t1370, 0 + %t1374 = getelementptr inbounds %S.gen.Template, ptr %t1373, i64 %t1369 + %t1375 = load %S.gen.Template, ptr %t1374 + store %S.gen.Template %t1375, ptr %a1376 + call void @finch.copy.S_gen_Template(ptr %a1377, ptr %a1376) + %t1378 = load %S.gen.Template, ptr %a1377 + store %S.gen.Template %t1378, ptr %a1379 + %t1380 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 2 + %t1381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1380, i32 0, i32 1 + %t1382 = load i64, ptr %t1381 + %t1383 = icmp sgt i64 %t1382, 0 + br label %logic.from3895 +logic.from3895: + br i1 %t1383, label %logic.rhs3896, label %logic.end3897 +logic.rhs3896: + %t1384 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 7 + %t1385 = load i1, ptr %t1384 + %t1386 = xor i1 %t1385, true + br label %logic.rend3898 +logic.rend3898: + br label %logic.end3897 +logic.end3897: + %t1387 = phi i1 [ false, %logic.from3895 ], [ %t1386, %logic.rend3898 ] + br i1 %t1387, label %then3899, label %endif3901 +then3899: + %t1388 = load ptr, ptr %a1 + %t1389 = icmp eq ptr %t1388, null + br i1 %t1389, label %panic3902, label %ok3903 +panic3902: + call void @finch_panic(ptr @.str.2417, i64 1654, ptr @.str.2418) + unreachable +ok3903: + %t1390 = getelementptr inbounds %S.gen.Gen, ptr %t1388, i32 0, i32 0 + %t1391 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 4 + %t1392 = load i64, ptr %t1391 + %t1393 = load { ptr, i64, i64 }, ptr %t1390 + %t1394 = extractvalue { ptr, i64, i64 } %t1393, 1 + %t1395 = icmp uge i64 %t1392, %t1394 + br i1 %t1395, label %range3904, label %inrange3905 +range3904: + call void @finch_panic_index(ptr @.str.2419, i64 1654, i64 %t1392, i64 %t1394) + unreachable +inrange3905: + %t1396 = extractvalue { ptr, i64, i64 } %t1393, 0 + %t1397 = getelementptr inbounds %S.ast.Program, ptr %t1396, i64 %t1392 + %t1398 = getelementptr inbounds %S.ast.Program, ptr %t1397, i32 0, i32 8 + %t1399 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 5 + %t1400 = load i64, ptr %t1399 + %t1401 = load { ptr, i64, i64 }, ptr %t1398 + %t1402 = extractvalue { ptr, i64, i64 } %t1401, 1 + %t1403 = icmp uge i64 %t1400, %t1402 + br i1 %t1403, label %range3906, label %inrange3907 +range3906: + call void @finch_panic_index(ptr @.str.2420, i64 1654, i64 %t1400, i64 %t1402) + unreachable +inrange3907: + %t1404 = extractvalue { ptr, i64, i64 } %t1401, 0 + %t1405 = getelementptr inbounds %S.ast.Node, ptr %t1404, i64 %t1400 + %t1406 = load %S.ast.Node, ptr %t1405 + store %S.ast.Node %t1406, ptr %a1407 + call void @finch.copy.S_ast_Node(ptr %a1408, ptr %a1407) + %t1409 = load %S.ast.Node, ptr %a1408 + store %S.ast.Node %t1409, ptr %a1410 + %t1411 = load ptr, ptr %a1 + %t1412 = getelementptr inbounds %S.ast.Node, ptr %a1410, i32 0, i32 9 + %t1413 = getelementptr inbounds %S.ast.Node, ptr %a1410, i32 0, i32 9 + %t1414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1413, i32 0, i32 1 + %t1415 = load i64, ptr %t1414 + %t1416 = sub i64 %t1415, 1 + %t1417 = load { ptr, i64, i64 }, ptr %t1412 + %t1418 = extractvalue { ptr, i64, i64 } %t1417, 1 + %t1419 = icmp uge i64 %t1416, %t1418 + br i1 %t1419, label %range3908, label %inrange3909 +range3908: + call void @finch_panic_index(ptr @.str.2422, i64 1655, i64 %t1416, i64 %t1418) + unreachable +inrange3909: + %t1420 = extractvalue { ptr, i64, i64 } %t1417, 0 + %t1421 = getelementptr inbounds %S.ast.Node, ptr %t1420, i64 %t1416 + %t1422 = load %S.ast.Node, ptr %t1421 + %t1423 = call i1 @finch.gen.mutates(ptr %t1411, { ptr, i64, i64 } { ptr @.str.2421, i64 4, i64 0 }, %S.ast.Node %t1422) + br i1 %t1423, label %then3910, label %endif3912 +then3910: + %t1424 = load ptr, ptr %a1 + %t1425 = icmp eq ptr %t1424, null + br i1 %t1425, label %panic3913, label %ok3914 +panic3913: + call void @finch_panic(ptr @.str.2423, i64 1656, ptr @.str.2424) + unreachable +ok3914: + %t1426 = getelementptr inbounds %S.gen.Gen, ptr %t1424, i32 0, i32 17 + %t1427 = load i64, ptr %a1363 + %t1428 = load { ptr, i64, i64 }, ptr %t1426 + %t1429 = extractvalue { ptr, i64, i64 } %t1428, 1 + %t1430 = icmp uge i64 %t1427, %t1429 + br i1 %t1430, label %range3915, label %inrange3916 +range3915: + call void @finch_panic_index(ptr @.str.2425, i64 1656, i64 %t1427, i64 %t1429) + unreachable +inrange3916: + %t1431 = extractvalue { ptr, i64, i64 } %t1428, 0 + %t1432 = getelementptr inbounds %S.gen.Template, ptr %t1431, i64 %t1427 + %t1433 = getelementptr inbounds %S.gen.Template, ptr %t1432, i32 0, i32 7 + store i1 true, ptr %t1433 + %t1434 = load ptr, ptr %a1 + %t1435 = icmp eq ptr %t1434, null + br i1 %t1435, label %panic3917, label %ok3918 +panic3917: + call void @finch_panic(ptr @.str.2426, i64 1657, ptr @.str.2427) + unreachable +ok3918: + %t1436 = getelementptr inbounds %S.gen.Gen, ptr %t1434, i32 0, i32 24 + %t1437 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1436, i32 0, i32 1 + %t1438 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 1 + %t1439 = load { ptr, i64, i64 }, ptr %t1438 + store { ptr, i64, i64 } %t1439, ptr %a1440 + call void @finch_str_copy(ptr %a1441, ptr %a1440) + %t1442 = load { ptr, i64, i64 }, ptr %a1441 + %t1443 = load i64, ptr %t1437 + %t1444 = add i64 %t1443, 1 + call void @finch_arr_reserve(ptr %t1436, i64 %t1444, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1445 = load ptr, ptr %t1436 + %t1446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1445, i64 %t1443 + store { ptr, i64, i64 } %t1442, ptr %t1446 + store i64 %t1444, ptr %t1437 + store i1 true, ptr %a1234 + br label %endif3912 +endif3912: + call void @finch.drop.S_ast_Node(ptr %a1410) + br label %endif3901 +endif3901: + call void @finch.drop.S_gen_Template(ptr %a1379) + br label %for.step3889 +for.step3889: + %t1447 = load i64, ptr %a1363 + %t1448 = add i64 %t1447, 1 + store i64 %t1448, ptr %a1363 + br label %for.cond3887 +for.end3890: + br label %while.cond3832 +while.end3834: + %t1449 = load ptr, ptr %a1 + %t1450 = icmp eq ptr %t1449, null + br i1 %t1450, label %panic3919, label %ok3920 +panic3919: + call void @finch_panic(ptr @.str.2428, i64 1664, ptr @.str.2429) + unreachable +ok3920: + %t1451 = getelementptr inbounds %S.gen.Gen, ptr %t1449, i32 0, i32 15 + %t1452 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1451, i32 0, i32 1 + %t1453 = load i64, ptr %t1452 + store i64 0, ptr %a1454 + br label %for.cond3921 +for.cond3921: + %t1455 = load i64, ptr %a1454 + %t1456 = icmp slt i64 %t1455, %t1453 + br i1 %t1456, label %for.body3922, label %for.end3924 +for.body3922: + %t1457 = load ptr, ptr %a1 + %t1458 = icmp eq ptr %t1457, null + br i1 %t1458, label %panic3925, label %ok3926 +panic3925: + call void @finch_panic(ptr @.str.2430, i64 1665, ptr @.str.2431) + unreachable +ok3926: + %t1459 = getelementptr inbounds %S.gen.Gen, ptr %t1457, i32 0, i32 0 + %t1460 = load ptr, ptr %a1 + %t1461 = icmp eq ptr %t1460, null + br i1 %t1461, label %panic3927, label %ok3928 +panic3927: + call void @finch_panic(ptr @.str.2432, i64 1665, ptr @.str.2433) + unreachable +ok3928: + %t1462 = getelementptr inbounds %S.gen.Gen, ptr %t1460, i32 0, i32 15 + %t1463 = load i64, ptr %a1454 + %t1464 = load { ptr, i64, i64 }, ptr %t1462 + %t1465 = extractvalue { ptr, i64, i64 } %t1464, 1 + %t1466 = icmp uge i64 %t1463, %t1465 + br i1 %t1466, label %range3929, label %inrange3930 +range3929: + call void @finch_panic_index(ptr @.str.2434, i64 1665, i64 %t1463, i64 %t1465) + unreachable +inrange3930: + %t1467 = extractvalue { ptr, i64, i64 } %t1464, 0 + %t1468 = getelementptr inbounds %S.gen.FnSig, ptr %t1467, i64 %t1463 + %t1469 = getelementptr inbounds %S.gen.FnSig, ptr %t1468, i32 0, i32 16 + %t1470 = load i64, ptr %t1469 + %t1471 = load { ptr, i64, i64 }, ptr %t1459 + %t1472 = extractvalue { ptr, i64, i64 } %t1471, 1 + %t1473 = icmp uge i64 %t1470, %t1472 + br i1 %t1473, label %range3931, label %inrange3932 +range3931: + call void @finch_panic_index(ptr @.str.2435, i64 1665, i64 %t1470, i64 %t1472) + unreachable +inrange3932: + %t1474 = extractvalue { ptr, i64, i64 } %t1471, 0 + %t1475 = getelementptr inbounds %S.ast.Program, ptr %t1474, i64 %t1470 + %t1476 = getelementptr inbounds %S.ast.Program, ptr %t1475, i32 0, i32 8 + %t1477 = load ptr, ptr %a1 + %t1478 = icmp eq ptr %t1477, null + br i1 %t1478, label %panic3933, label %ok3934 +panic3933: + call void @finch_panic(ptr @.str.2436, i64 1665, ptr @.str.2437) + unreachable +ok3934: + %t1479 = getelementptr inbounds %S.gen.Gen, ptr %t1477, i32 0, i32 15 + %t1480 = load i64, ptr %a1454 + %t1481 = load { ptr, i64, i64 }, ptr %t1479 + %t1482 = extractvalue { ptr, i64, i64 } %t1481, 1 + %t1483 = icmp uge i64 %t1480, %t1482 + br i1 %t1483, label %range3935, label %inrange3936 +range3935: + call void @finch_panic_index(ptr @.str.2438, i64 1665, i64 %t1480, i64 %t1482) + unreachable +inrange3936: + %t1484 = extractvalue { ptr, i64, i64 } %t1481, 0 + %t1485 = getelementptr inbounds %S.gen.FnSig, ptr %t1484, i64 %t1480 + %t1486 = getelementptr inbounds %S.gen.FnSig, ptr %t1485, i32 0, i32 17 + %t1487 = load i64, ptr %t1486 + %t1488 = load { ptr, i64, i64 }, ptr %t1476 + %t1489 = extractvalue { ptr, i64, i64 } %t1488, 1 + %t1490 = icmp uge i64 %t1487, %t1489 + br i1 %t1490, label %range3937, label %inrange3938 +range3937: + call void @finch_panic_index(ptr @.str.2439, i64 1665, i64 %t1487, i64 %t1489) + unreachable +inrange3938: + %t1491 = extractvalue { ptr, i64, i64 } %t1488, 0 + %t1492 = getelementptr inbounds %S.ast.Node, ptr %t1491, i64 %t1487 + %t1493 = load %S.ast.Node, ptr %t1492 + store %S.ast.Node %t1493, ptr %a1494 + call void @finch.copy.S_ast_Node(ptr %a1495, ptr %a1494) + %t1496 = load %S.ast.Node, ptr %a1495 + store %S.ast.Node %t1496, ptr %a1497 + %t1498 = getelementptr inbounds %S.ast.Node, ptr %a1497, i32 0, i32 9 + %t1499 = getelementptr inbounds %S.ast.Node, ptr %a1497, i32 0, i32 9 + %t1500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1499, i32 0, i32 1 + %t1501 = load i64, ptr %t1500 + %t1502 = sub i64 %t1501, 1 + %t1503 = load { ptr, i64, i64 }, ptr %t1498 + %t1504 = extractvalue { ptr, i64, i64 } %t1503, 1 + %t1505 = icmp uge i64 %t1502, %t1504 + br i1 %t1505, label %range3939, label %inrange3940 +range3939: + call void @finch_panic_index(ptr @.str.2440, i64 1666, i64 %t1502, i64 %t1504) + unreachable +inrange3940: + %t1506 = extractvalue { ptr, i64, i64 } %t1503, 0 + %t1507 = getelementptr inbounds %S.ast.Node, ptr %t1506, i64 %t1502 + %t1508 = load %S.ast.Node, ptr %t1507 + store %S.ast.Node %t1508, ptr %a1509 + call void @finch.copy.S_ast_Node(ptr %a1510, ptr %a1509) + %t1511 = load %S.ast.Node, ptr %a1510 + store %S.ast.Node %t1511, ptr %a1512 + %t1513 = load ptr, ptr %a1 + %t1514 = icmp eq ptr %t1513, null + br i1 %t1514, label %panic3941, label %ok3942 +panic3941: + call void @finch_panic(ptr @.str.2441, i64 1667, ptr @.str.2442) + unreachable +ok3942: + %t1515 = getelementptr inbounds %S.gen.Gen, ptr %t1513, i32 0, i32 15 + %t1516 = load i64, ptr %a1454 + %t1517 = load { ptr, i64, i64 }, ptr %t1515 + %t1518 = extractvalue { ptr, i64, i64 } %t1517, 1 + %t1519 = icmp uge i64 %t1516, %t1518 + br i1 %t1519, label %range3943, label %inrange3944 +range3943: + call void @finch_panic_index(ptr @.str.2443, i64 1667, i64 %t1516, i64 %t1518) + unreachable +inrange3944: + %t1520 = extractvalue { ptr, i64, i64 } %t1517, 0 + %t1521 = getelementptr inbounds %S.gen.FnSig, ptr %t1520, i64 %t1516 + %t1522 = getelementptr inbounds %S.gen.FnSig, ptr %t1521, i32 0, i32 13 + %t1523 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1522, i32 0, i32 1 + %t1524 = load i64, ptr %t1523 + store i64 0, ptr %a1525 + br label %for.cond3945 +for.cond3945: + %t1526 = load i64, ptr %a1525 + %t1527 = icmp slt i64 %t1526, %t1524 + br i1 %t1527, label %for.body3946, label %for.end3948 +for.body3946: + %t1528 = load ptr, ptr %a1 + %t1529 = icmp eq ptr %t1528, null + br i1 %t1529, label %panic3949, label %ok3950 +panic3949: + call void @finch_panic(ptr @.str.2444, i64 1668, ptr @.str.2445) + unreachable +ok3950: + %t1530 = getelementptr inbounds %S.gen.Gen, ptr %t1528, i32 0, i32 15 + %t1531 = load i64, ptr %a1454 + %t1532 = load { ptr, i64, i64 }, ptr %t1530 + %t1533 = extractvalue { ptr, i64, i64 } %t1532, 1 + %t1534 = icmp uge i64 %t1531, %t1533 + br i1 %t1534, label %range3951, label %inrange3952 +range3951: + call void @finch_panic_index(ptr @.str.2446, i64 1668, i64 %t1531, i64 %t1533) + unreachable +inrange3952: + %t1535 = extractvalue { ptr, i64, i64 } %t1532, 0 + %t1536 = getelementptr inbounds %S.gen.FnSig, ptr %t1535, i64 %t1531 + %t1537 = getelementptr inbounds %S.gen.FnSig, ptr %t1536, i32 0, i32 13 + %t1538 = load i64, ptr %a1525 + %t1539 = load { ptr, i64, i64 }, ptr %t1537 + %t1540 = extractvalue { ptr, i64, i64 } %t1539, 1 + %t1541 = icmp uge i64 %t1538, %t1540 + br i1 %t1541, label %range3953, label %inrange3954 +range3953: + call void @finch_panic_index(ptr @.str.2447, i64 1668, i64 %t1538, i64 %t1540) + unreachable +inrange3954: + %t1542 = extractvalue { ptr, i64, i64 } %t1539, 0 + %t1543 = getelementptr inbounds %S.ast.Type, ptr %t1542, i64 %t1538 + %t1544 = load %S.ast.Type, ptr %t1543 + store %S.ast.Type %t1544, ptr %a1545 + call void @finch.copy.S_ast_Type(ptr %a1546, ptr %a1545) + %t1547 = load %S.ast.Type, ptr %a1546 + store %S.ast.Type %t1547, ptr %a1548 + %t1549 = load ptr, ptr %a1 + %t1550 = icmp eq ptr %t1549, null + br i1 %t1550, label %panic3955, label %ok3956 +panic3955: + call void @finch_panic(ptr @.str.2448, i64 1669, ptr @.str.2449) + unreachable +ok3956: + %t1551 = getelementptr inbounds %S.gen.Gen, ptr %t1549, i32 0, i32 15 + %t1552 = load i64, ptr %a1454 + %t1553 = load { ptr, i64, i64 }, ptr %t1551 + %t1554 = extractvalue { ptr, i64, i64 } %t1553, 1 + %t1555 = icmp uge i64 %t1552, %t1554 + br i1 %t1555, label %range3957, label %inrange3958 +range3957: + call void @finch_panic_index(ptr @.str.2450, i64 1669, i64 %t1552, i64 %t1554) + unreachable +inrange3958: + %t1556 = extractvalue { ptr, i64, i64 } %t1553, 0 + %t1557 = getelementptr inbounds %S.gen.FnSig, ptr %t1556, i64 %t1552 + %t1558 = getelementptr inbounds %S.gen.FnSig, ptr %t1557, i32 0, i32 15 + %t1559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1558, i32 0, i32 1 + %t1560 = load ptr, ptr %a1 + %t1561 = load %S.ast.Type, ptr %a1548 + %t1562 = call i1 @finch.gen.owning(ptr %t1560, %S.ast.Type %t1561) + br label %logic.from3959 +logic.from3959: + br i1 %t1562, label %logic.rhs3960, label %logic.end3961 +logic.rhs3960: + %t1563 = load ptr, ptr %a1 + %t1564 = load ptr, ptr %a1 + %t1565 = icmp eq ptr %t1564, null + br i1 %t1565, label %panic3962, label %ok3963 +panic3962: + call void @finch_panic(ptr @.str.2451, i64 1669, ptr @.str.2452) + unreachable +ok3963: + %t1566 = getelementptr inbounds %S.gen.Gen, ptr %t1564, i32 0, i32 15 + %t1567 = load i64, ptr %a1454 + %t1568 = load { ptr, i64, i64 }, ptr %t1566 + %t1569 = extractvalue { ptr, i64, i64 } %t1568, 1 + %t1570 = icmp uge i64 %t1567, %t1569 + br i1 %t1570, label %range3964, label %inrange3965 +range3964: + call void @finch_panic_index(ptr @.str.2453, i64 1669, i64 %t1567, i64 %t1569) + unreachable +inrange3965: + %t1571 = extractvalue { ptr, i64, i64 } %t1568, 0 + %t1572 = getelementptr inbounds %S.gen.FnSig, ptr %t1571, i64 %t1567 + %t1573 = getelementptr inbounds %S.gen.FnSig, ptr %t1572, i32 0, i32 14 + %t1574 = load i64, ptr %a1525 + %t1575 = load { ptr, i64, i64 }, ptr %t1573 + %t1576 = extractvalue { ptr, i64, i64 } %t1575, 1 + %t1577 = icmp uge i64 %t1574, %t1576 + br i1 %t1577, label %range3966, label %inrange3967 +range3966: + call void @finch_panic_index(ptr @.str.2454, i64 1669, i64 %t1574, i64 %t1576) + unreachable +inrange3967: + %t1578 = extractvalue { ptr, i64, i64 } %t1575, 0 + %t1579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1578, i64 %t1574 + %t1580 = load { ptr, i64, i64 }, ptr %t1579 + %t1581 = load %S.ast.Node, ptr %a1512 + %t1582 = call i1 @finch.gen.mutates(ptr %t1563, { ptr, i64, i64 } %t1580, %S.ast.Node %t1581) + %t1583 = xor i1 %t1582, true + br label %logic.rend3968 +logic.rend3968: + br label %logic.end3961 +logic.end3961: + %t1584 = phi i1 [ false, %logic.from3959 ], [ %t1583, %logic.rend3968 ] + %t1585 = load i64, ptr %t1559 + %t1586 = add i64 %t1585, 1 + call void @finch_arr_reserve(ptr %t1558, i64 %t1586, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + %t1587 = load ptr, ptr %t1558 + %t1588 = getelementptr inbounds i1, ptr %t1587, i64 %t1585 + store i1 %t1584, ptr %t1588 + store i64 %t1586, ptr %t1559 + call void @finch.drop.S_ast_Type(ptr %a1548) + br label %for.step3947 +for.step3947: + %t1589 = load i64, ptr %a1525 + %t1590 = add i64 %t1589, 1 + store i64 %t1590, ptr %a1525 + br label %for.cond3945 +for.end3948: + call void @finch.drop.S_ast_Node(ptr %a1512) + call void @finch.drop.S_ast_Node(ptr %a1497) + br label %for.step3923 +for.step3923: + %t1591 = load i64, ptr %a1454 + %t1592 = add i64 %t1591, 1 + store i64 %t1592, ptr %a1454 + br label %for.cond3921 +for.end3924: + ret void +} + +define internal i64 @finch.gen.findTemplate(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i1, align 16 + %a11 = alloca i64, align 16 + %a24 = alloca %S.gen.Template, align 16 + %a25 = alloca %S.gen.Template, align 16 + %a27 = alloca %S.gen.Template, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic3969, label %ok3970 +panic3969: + call void @finch_panic(ptr @.str.2455, i64 1675, ptr @.str.2456) + unreachable +ok3970: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + store i64 0, ptr %a11 + br label %for.cond3971 +for.cond3971: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t10 + br i1 %t13, label %for.body3972, label %for.end3974 +for.body3972: + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic3975, label %ok3976 +panic3975: + call void @finch_panic(ptr @.str.2457, i64 1676, ptr @.str.2458) + unreachable +ok3976: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 17 + %t17 = load i64, ptr %a11 + %t18 = load { ptr, i64, i64 }, ptr %t16 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 %t17, %t19 + br i1 %t20, label %range3977, label %inrange3978 +range3977: + call void @finch_panic_index(ptr @.str.2459, i64 1676, i64 %t17, i64 %t19) + unreachable +inrange3978: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.gen.Template, ptr %t21, i64 %t17 + %t23 = load %S.gen.Template, ptr %t22 + store %S.gen.Template %t23, ptr %a24 + call void @finch.copy.S_gen_Template(ptr %a25, ptr %a24) + %t26 = load %S.gen.Template, ptr %a25 + store %S.gen.Template %t26, ptr %a27 + %t28 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 0 + %t29 = load { ptr, i64, i64 }, ptr %t28 + %t30 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } %t30, ptr %a32 + %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) + %t34 = icmp ne i32 %t33, 0 + br label %logic.from3979 +logic.from3979: + br i1 %t34, label %logic.rhs3980, label %logic.end3981 +logic.rhs3980: + %t35 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 1 + %t36 = load { ptr, i64, i64 }, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t36, ptr %a38 + store { ptr, i64, i64 } %t37, ptr %a39 + %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) + %t41 = icmp ne i32 %t40, 0 + br label %logic.rend3982 +logic.rend3982: + br label %logic.end3981 +logic.end3981: + %t42 = phi i1 [ false, %logic.from3979 ], [ %t41, %logic.rend3982 ] + br label %logic.from3983 +logic.from3983: + br i1 %t42, label %logic.rhs3984, label %logic.end3985 +logic.rhs3984: + %t43 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 2 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t44, ptr %a46 + store { ptr, i64, i64 } %t45, ptr %a47 + %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + br label %logic.rend3986 +logic.rend3986: + br label %logic.end3985 +logic.end3985: + %t50 = phi i1 [ false, %logic.from3983 ], [ %t49, %logic.rend3986 ] + br label %logic.from3987 +logic.from3987: + br i1 %t50, label %logic.rhs3988, label %logic.end3989 +logic.rhs3988: + %t51 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 6 + %t52 = load i1, ptr %t51 + %t53 = load i1, ptr %a5 + %t54 = icmp eq i1 %t52, %t53 + br label %logic.rend3990 +logic.rend3990: + br label %logic.end3989 +logic.end3989: + %t55 = phi i1 [ false, %logic.from3987 ], [ %t54, %logic.rend3990 ] + br i1 %t55, label %then3991, label %endif3993 +then3991: + %t56 = load i64, ptr %a11 + call void @finch.drop.S_gen_Template(ptr %a27) + ret i64 %t56 +endif3993: + call void @finch.drop.S_gen_Template(ptr %a27) + br label %for.step3973 +for.step3973: + %t57 = load i64, ptr %a11 + %t58 = add i64 %t57, 1 + store i64 %t58, ptr %a11 + br label %for.cond3971 +for.end3974: + ret i64 -1 +} + +define internal { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond3994 +each.cond3994: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body3995, label %each.end3997 +each.body3995: + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 %t6 + %t10 = load %S.ast.Type, ptr %t9 + store %S.ast.Type %t10, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t13 = load %S.ast.Type, ptr %a11 + %t14 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t13) + %t15 = load i64, ptr %t12 + %t16 = add i64 %t15, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t16, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t17 = load ptr, ptr %a2 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t15 + store { ptr, i64, i64 } %t14, ptr %t18 + store i64 %t16, ptr %t12 + br label %each.step3996 +each.step3996: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %each.cond3994 +each.end3997: + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2460, i64 2, i64 0 }, ptr %a22 + call void @finch_str_join(ptr %a23, ptr %a2, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t24 +} + +define internal %S.ast.Type @finch.gen.instStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a10 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca %S.gen.Template, align 16 + %a48 = alloca %S.gen.Template, align 16 + %a50 = alloca %S.gen.Template, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + %t8 = load { ptr, i64, i64 }, ptr %a3 + %t9 = call i64 @finch.gen.findTemplate(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, { ptr, i64, i64 } { ptr @.str.2461, i64 0, i64 0 }, i1 true) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br i1 %t12, label %then3998, label %endif4000 +then3998: + %t13 = load ptr, ptr %a1 + %t14 = load %S.ast.Node, ptr %a5 + %t15 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2462, i64 34, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.2463, i64 28, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + %t25 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t24, ptr %a27 + store { ptr, i64, i64 } %t25, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t24, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.2464, i64 34, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + call void @finch.gen.fail(ptr %t13, %S.ast.Node %t14, { ptr, i64, i64 } %t35) + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_drop(ptr %a36) + br label %endif4000 +endif4000: + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic4001, label %ok4002 +panic4001: + call void @finch_panic(ptr @.str.2465, i64 1698, ptr @.str.2466) + unreachable +ok4002: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 17 + %t40 = load i64, ptr %a10 + %t41 = load { ptr, i64, i64 }, ptr %t39 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 %t40, %t42 + br i1 %t43, label %range4003, label %inrange4004 +range4003: + call void @finch_panic_index(ptr @.str.2467, i64 1698, i64 %t40, i64 %t42) + unreachable +inrange4004: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds %S.gen.Template, ptr %t44, i64 %t40 + %t46 = load %S.gen.Template, ptr %t45 + store %S.gen.Template %t46, ptr %a47 + call void @finch.copy.S_gen_Template(ptr %a48, ptr %a47) + %t49 = load %S.gen.Template, ptr %a48 + store %S.gen.Template %t49, ptr %a50 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = icmp ne i64 %t52, %t55 + br i1 %t56, label %then4005, label %endif4007 +then4005: + %t57 = load ptr, ptr %a1 + %t58 = load %S.ast.Node, ptr %a5 + %t59 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t59, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.2468, i64 7, i64 0 }, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a60 + %t64 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 + %t66 = load i64, ptr %t65 + call void @finch_str_from_int(ptr %a67, i64 %t66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t63, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t63, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t68, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.2469, i64 24, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + %t80 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t79, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t79, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.2470, i64 1, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2471, i64 2, i64 0 }, ptr %a93 + call void @finch_str_join(ptr %a94, ptr %t91, ptr %a93) + %t95 = load { ptr, i64, i64 }, ptr %a94 + store { ptr, i64, i64 } %t90, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t90, ptr %a99 + call void @finch_str_drop(ptr %a99) + store { ptr, i64, i64 } %t95, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t101, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.2472, i64 11, i64 0 }, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t101, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t108 = load i64, ptr %t107 + call void @finch_str_from_int(ptr %a109, i64 %t108) + %t110 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t106, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t106, ptr %a114 + call void @finch_str_drop(ptr %a114) + store { ptr, i64, i64 } %t110, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.fail(ptr %t57, %S.ast.Node %t58, { ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + br label %endif4007 +endif4007: + %t118 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.2473, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a119 + %t123 = load { ptr, i64, i64 }, ptr %a4 + %t124 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t123) + store { ptr, i64, i64 } %t122, ptr %a126 + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t122, ptr %a128 + call void @finch_str_drop(ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a125 + store { ptr, i64, i64 } %t130, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.2474, i64 1, i64 0 }, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t130, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + store { ptr, i64, i64 } %t135, ptr %a136 + %t137 = load ptr, ptr %a1 + %t138 = load { ptr, i64, i64 }, ptr %a2 + %t139 = load { ptr, i64, i64 }, ptr %a136 + %t140 = call i64 @finch.gen.findStruct(ptr %t137, { ptr, i64, i64 } %t138, { ptr, i64, i64 } %t139) + %t141 = icmp slt i64 %t140, 0 + br i1 %t141, label %then4008, label %endif4010 +then4008: + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic4011, label %ok4012 +panic4011: + call void @finch_panic(ptr @.str.2475, i64 1704, ptr @.str.2476) + unreachable +ok4012: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 16 + %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 + %t146 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t146, ptr %a147 + call void @finch_str_copy(ptr %a148, ptr %a147) + %t149 = load { ptr, i64, i64 }, ptr %a148 + %t150 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t149, 0 + %t151 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t151, ptr %a152 + call void @finch_str_copy(ptr %a153, ptr %a152) + %t154 = load { ptr, i64, i64 }, ptr %a153 + %t155 = insertvalue %S.gen.StructDef %t150, { ptr, i64, i64 } %t154, 1 + %t156 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t156, ptr %a157 + call void @finch_str_copy(ptr %a158, ptr %a157) + %t159 = load { ptr, i64, i64 }, ptr %a158 + %t160 = insertvalue %S.gen.StructDef %t155, { ptr, i64, i64 } %t159, 5 + %t161 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t162 = load { ptr, i64, i64 }, ptr %t161 + store { ptr, i64, i64 } %t162, ptr %a163 + call void @finch.copy.arr_str(ptr %a164, ptr %a163) + %t165 = load { ptr, i64, i64 }, ptr %a164 + %t166 = insertvalue %S.gen.StructDef %t160, { ptr, i64, i64 } %t165, 6 + %t167 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t167, ptr %a168 + call void @finch.copy.arr_S_ast_Type(ptr %a169, ptr %a168) + %t170 = load { ptr, i64, i64 }, ptr %a169 + %t171 = insertvalue %S.gen.StructDef %t166, { ptr, i64, i64 } %t170, 7 + %t172 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 4 + %t173 = load i64, ptr %t172 + %t174 = insertvalue %S.gen.StructDef %t171, i64 %t173, 13 + %t175 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 5 + %t176 = load i64, ptr %t175 + %t177 = insertvalue %S.gen.StructDef %t174, i64 %t176, 14 + %t178 = load i64, ptr %t145 + %t179 = add i64 %t178, 1 + call void @finch_arr_reserve(ptr %t144, i64 %t179, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) + %t180 = load ptr, ptr %t144 + %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t178 + store %S.gen.StructDef %t177, ptr %t181 + store i64 %t179, ptr %t145 + %t182 = load ptr, ptr %a1 + %t183 = load ptr, ptr %a1 + %t184 = icmp eq ptr %t183, null + br i1 %t184, label %panic4013, label %ok4014 +panic4013: + call void @finch_panic(ptr @.str.2477, i64 1705, ptr @.str.2478) + unreachable +ok4014: + %t185 = getelementptr inbounds %S.gen.Gen, ptr %t183, i32 0, i32 16 + %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i32 0, i32 1 + %t187 = load i64, ptr %t186 + %t188 = sub i64 %t187, 1 + call void @finch.gen.resolveStruct(ptr %t182, i64 %t188) + br label %endif4010 +endif4010: + %t189 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.2479, i64 6, i64 0 }, 0 + %t190 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_copy(ptr %a192, ptr %a191) + %t193 = load { ptr, i64, i64 }, ptr %a192 + %t194 = insertvalue %S.ast.Type %t189, { ptr, i64, i64 } %t193, 2 + %t195 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t195, ptr %a196 + call void @finch_str_copy(ptr %a197, ptr %a196) + %t198 = load { ptr, i64, i64 }, ptr %a197 + %t199 = insertvalue %S.ast.Type %t194, { ptr, i64, i64 } %t198, 3 + call void @finch_str_drop(ptr %a136) + call void @finch.drop.S_gen_Template(ptr %a50) + ret %S.ast.Type %t199 +} + +define internal i64 @finch.gen.instFn(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a16 = alloca %S.gen.Template, align 16 + %a17 = alloca %S.gen.Template, align 16 + %a19 = alloca %S.gen.Template, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca i64, align 16 + %a61 = alloca i64, align 16 + %a84 = alloca %S.ast.Node, align 16 + %a85 = alloca %S.ast.Node, align 16 + %a87 = alloca %S.ast.Node, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca %S.gen.FnSig, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca %S.ast.Type, align 16 + %a327 = alloca %S.ast.Node, align 16 + %a328 = alloca %S.ast.Node, align 16 + %a330 = alloca %S.ast.Node, align 16 + %a335 = alloca i64, align 16 + %a357 = alloca %S.ast.Type, align 16 + %a361 = alloca %S.ast.Type, align 16 + %a362 = alloca %S.ast.Type, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca %S.gen.FnSig, align 16 + %a453 = alloca %S.gen.FnSig, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4015, label %ok4016 +panic4015: + call void @finch_panic(ptr @.str.2480, i64 1712, ptr @.str.2481) + unreachable +ok4016: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range4017, label %inrange4018 +range4017: + call void @finch_panic_index(ptr @.str.2482, i64 1712, i64 %t9, i64 %t11) + unreachable +inrange4018: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 + %t15 = load %S.gen.Template, ptr %t14 + store %S.gen.Template %t15, ptr %a16 + call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) + %t18 = load %S.gen.Template, ptr %a17 + store %S.gen.Template %t18, ptr %a19 + %t20 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.2483, i64 1, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a22 + %t26 = load { ptr, i64, i64 }, ptr %a3 + %t27 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t26) + store { ptr, i64, i64 } %t25, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t25, ptr %a31 + call void @finch_str_drop(ptr %a31) + store { ptr, i64, i64 } %t27, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t33, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.2484, i64 1, i64 0 }, ptr %a36 + call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = icmp sgt i64 %t42, 0 + br i1 %t43, label %then4019, label %else4020 +then4019: + %t44 = load ptr, ptr %a1 + %t45 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t48 = load { ptr, i64, i64 }, ptr %t47 + %t49 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + %t51 = call i64 @finch.gen.findMethod(ptr %t44, { ptr, i64, i64 } %t46, { ptr, i64, i64 } %t48, { ptr, i64, i64 } %t50) + store i64 %t51, ptr %a52 + %t53 = load i64, ptr %a52 + %t54 = icmp sge i64 %t53, 0 + br i1 %t54, label %then4022, label %endif4024 +then4022: + %t55 = load i64, ptr %a52 + call void @finch_str_drop(ptr %a39) + call void @finch.drop.S_gen_Template(ptr %a19) + ret i64 %t55 +endif4024: + br label %endif4021 +else4020: + %t56 = load ptr, ptr %a1 + %t57 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t58 = load { ptr, i64, i64 }, ptr %t57 + %t59 = load { ptr, i64, i64 }, ptr %a39 + %t60 = call i64 @finch.gen.findFn(ptr %t56, { ptr, i64, i64 } %t58, { ptr, i64, i64 } %t59) + store i64 %t60, ptr %a61 + %t62 = load i64, ptr %a61 + %t63 = icmp sge i64 %t62, 0 + br i1 %t63, label %then4025, label %endif4027 +then4025: + %t64 = load i64, ptr %a61 + call void @finch_str_drop(ptr %a39) + call void @finch.drop.S_gen_Template(ptr %a19) + ret i64 %t64 +endif4027: + br label %endif4021 +endif4021: + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic4028, label %ok4029 +panic4028: + call void @finch_panic(ptr @.str.2485, i64 1725, ptr @.str.2486) + unreachable +ok4029: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 0 + %t68 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 + %t69 = load i64, ptr %t68 + %t70 = load { ptr, i64, i64 }, ptr %t67 + %t71 = extractvalue { ptr, i64, i64 } %t70, 1 + %t72 = icmp uge i64 %t69, %t71 + br i1 %t72, label %range4030, label %inrange4031 +range4030: + call void @finch_panic_index(ptr @.str.2487, i64 1725, i64 %t69, i64 %t71) + unreachable +inrange4031: + %t73 = extractvalue { ptr, i64, i64 } %t70, 0 + %t74 = getelementptr inbounds %S.ast.Program, ptr %t73, i64 %t69 + %t75 = getelementptr inbounds %S.ast.Program, ptr %t74, i32 0, i32 8 + %t76 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 + %t77 = load i64, ptr %t76 + %t78 = load { ptr, i64, i64 }, ptr %t75 + %t79 = extractvalue { ptr, i64, i64 } %t78, 1 + %t80 = icmp uge i64 %t77, %t79 + br i1 %t80, label %range4032, label %inrange4033 +range4032: + call void @finch_panic_index(ptr @.str.2488, i64 1725, i64 %t77, i64 %t79) + unreachable +inrange4033: + %t81 = extractvalue { ptr, i64, i64 } %t78, 0 + %t82 = getelementptr inbounds %S.ast.Node, ptr %t81, i64 %t77 + %t83 = load %S.ast.Node, ptr %t82 + store %S.ast.Node %t83, ptr %a84 + call void @finch.copy.S_ast_Node(ptr %a85, ptr %a84) + %t86 = load %S.ast.Node, ptr %a85 + store %S.ast.Node %t86, ptr %a87 + %t88 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + call void @finch_str_copy(ptr %a91, ptr %a90) + %t92 = load { ptr, i64, i64 }, ptr %a91 + %t93 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t92, 0 + %t94 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t94, ptr %a95 + call void @finch_str_copy(ptr %a96, ptr %a95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + %t98 = insertvalue %S.gen.FnSig %t93, { ptr, i64, i64 } %t97, 1 + %t99 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t100 = load { ptr, i64, i64 }, ptr %t99 + store { ptr, i64, i64 } %t100, ptr %a101 + call void @finch_str_copy(ptr %a102, ptr %a101) + %t103 = load { ptr, i64, i64 }, ptr %a102 + %t104 = insertvalue %S.gen.FnSig %t98, { ptr, i64, i64 } %t103, 3 + %t105 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t106 = load { ptr, i64, i64 }, ptr %t105 + store { ptr, i64, i64 } %t106, ptr %a107 + call void @finch.copy.arr_str(ptr %a108, ptr %a107) + %t109 = load { ptr, i64, i64 }, ptr %a108 + %t110 = insertvalue %S.gen.FnSig %t104, { ptr, i64, i64 } %t109, 6 + %t111 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch.copy.arr_S_ast_Type(ptr %a113, ptr %a112) + %t114 = load { ptr, i64, i64 }, ptr %a113 + %t115 = insertvalue %S.gen.FnSig %t110, { ptr, i64, i64 } %t114, 7 + %t116 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_copy(ptr %a118, ptr %a117) + %t119 = load { ptr, i64, i64 }, ptr %a118 + %t120 = insertvalue %S.gen.FnSig %t115, { ptr, i64, i64 } %t119, 8 + %t121 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 7 + %t122 = load i1, ptr %t121 + %t123 = insertvalue %S.gen.FnSig %t120, i1 %t122, 9 + %t124 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 7 + %t125 = load i1, ptr %t124 + %t126 = insertvalue %S.gen.FnSig %t123, i1 %t125, 10 + %t127 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 + %t128 = load i64, ptr %t127 + %t129 = insertvalue %S.gen.FnSig %t126, i64 %t128, 16 + %t130 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 + %t131 = load i64, ptr %t130 + %t132 = insertvalue %S.gen.FnSig %t129, i64 %t131, 17 + store %S.gen.FnSig %t132, ptr %a133 + %t134 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t135 = load { ptr, i64, i64 }, ptr %t134 + %t136 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t135) + store { ptr, i64, i64 } { ptr @.str.2489, i64 7, i64 0 }, ptr %a138 + store { ptr, i64, i64 } %t136, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t141, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.2490, i64 1, i64 0 }, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + %t147 = load { ptr, i64, i64 }, ptr %a39 + %t148 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t147) + store { ptr, i64, i64 } %t146, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + store { ptr, i64, i64 } %t146, ptr %a152 + call void @finch_str_drop(ptr %a152) + store { ptr, i64, i64 } %t148, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a149 + %t155 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 11 + %t156 = load { ptr, i64, i64 }, ptr %t155 + store { ptr, i64, i64 } %t154, ptr %t155 + store { ptr, i64, i64 } %t156, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 + %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i32 0, i32 1 + %t160 = load i64, ptr %t159 + %t161 = icmp sgt i64 %t160, 0 + br i1 %t161, label %then4034, label %endif4036 +then4034: + %t162 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 1 + store { ptr, i64, i64 } %t163, ptr %a165 + call void @finch_str_copy(ptr %a166, ptr %a165) + %t167 = load { ptr, i64, i64 }, ptr %a166 + %t168 = load { ptr, i64, i64 }, ptr %t164 + store { ptr, i64, i64 } %t167, ptr %t164 + store { ptr, i64, i64 } %t168, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t171 = load { ptr, i64, i64 }, ptr %t170 + %t172 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 2 + store { ptr, i64, i64 } %t171, ptr %a173 + call void @finch_str_copy(ptr %a174, ptr %a173) + %t175 = load { ptr, i64, i64 }, ptr %a174 + %t176 = load { ptr, i64, i64 }, ptr %t172 + store { ptr, i64, i64 } %t175, ptr %t172 + store { ptr, i64, i64 } %t176, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t179 = load { ptr, i64, i64 }, ptr %t178 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.2491, i64 1, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a180 + %t184 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t185 = load { ptr, i64, i64 }, ptr %t184 + store { ptr, i64, i64 } %t183, ptr %a187 + store { ptr, i64, i64 } %t185, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t183, ptr %a189 + call void @finch_str_drop(ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a186 + %t191 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 8 + %t192 = load { ptr, i64, i64 }, ptr %t191 + store { ptr, i64, i64 } %t190, ptr %t191 + store { ptr, i64, i64 } %t192, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t195 = load { ptr, i64, i64 }, ptr %t194 + %t196 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t195) + store { ptr, i64, i64 } { ptr @.str.2492, i64 7, i64 0 }, ptr %a198 + store { ptr, i64, i64 } %t196, ptr %a199 + call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) + store { ptr, i64, i64 } %t196, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load { ptr, i64, i64 }, ptr %a197 + store { ptr, i64, i64 } %t201, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.2493, i64 1, i64 0 }, ptr %a204 + call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204) + store { ptr, i64, i64 } %t201, ptr %a205 + call void @finch_str_drop(ptr %a205) + %t206 = load { ptr, i64, i64 }, ptr %a202 + %t207 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t208 = load { ptr, i64, i64 }, ptr %t207 + %t209 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t208) + store { ptr, i64, i64 } %t206, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t206, ptr %a213 + call void @finch_str_drop(ptr %a213) + store { ptr, i64, i64 } %t209, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.2494, i64 1, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load { ptr, i64, i64 }, ptr %a216 + %t221 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t222 = load { ptr, i64, i64 }, ptr %t221 + store { ptr, i64, i64 } %t220, ptr %a224 + store { ptr, i64, i64 } %t222, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t220, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 11 + %t229 = load { ptr, i64, i64 }, ptr %t228 + store { ptr, i64, i64 } %t227, ptr %t228 + store { ptr, i64, i64 } %t229, ptr %a230 + call void @finch_str_drop(ptr %a230) + br label %endif4036 +endif4036: + %t231 = load ptr, ptr %a1 + %t232 = icmp eq ptr %t231, null + br i1 %t232, label %panic4037, label %ok4038 +panic4037: + call void @finch_panic(ptr @.str.2495, i64 1734, ptr @.str.2496) + unreachable +ok4038: + %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 18 + %t234 = load { ptr, i64, i64 }, ptr %t233 + store { ptr, i64, i64 } %t234, ptr %a235 + call void @finch.copy.arr_str(ptr %a236, ptr %a235) + %t237 = load { ptr, i64, i64 }, ptr %a236 + store { ptr, i64, i64 } %t237, ptr %a238 + %t239 = load ptr, ptr %a1 + %t240 = icmp eq ptr %t239, null + br i1 %t240, label %panic4039, label %ok4040 +panic4039: + call void @finch_panic(ptr @.str.2497, i64 1735, ptr @.str.2498) + unreachable +ok4040: + %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 19 + %t242 = load { ptr, i64, i64 }, ptr %t241 + store { ptr, i64, i64 } %t242, ptr %a243 + call void @finch.copy.arr_S_ast_Type(ptr %a244, ptr %a243) + %t245 = load { ptr, i64, i64 }, ptr %a244 + store { ptr, i64, i64 } %t245, ptr %a246 + %t247 = load ptr, ptr %a1 + %t248 = icmp eq ptr %t247, null + br i1 %t248, label %panic4041, label %ok4042 +panic4041: + call void @finch_panic(ptr @.str.2499, i64 1736, ptr @.str.2500) + unreachable +ok4042: + %t249 = getelementptr inbounds %S.gen.Gen, ptr %t247, i32 0, i32 14 + %t250 = load { ptr, i64, i64 }, ptr %t249 + store { ptr, i64, i64 } %t250, ptr %a251 + call void @finch_str_copy(ptr %a252, ptr %a251) + %t253 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t253, ptr %a254 + %t255 = load ptr, ptr %a1 + %t256 = icmp eq ptr %t255, null + br i1 %t256, label %panic4043, label %ok4044 +panic4043: + call void @finch_panic(ptr @.str.2501, i64 1737, ptr @.str.2502) + unreachable +ok4044: + %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 20 + %t258 = load { ptr, i64, i64 }, ptr %t257 + store { ptr, i64, i64 } %t258, ptr %a259 + call void @finch_str_copy(ptr %a260, ptr %a259) + %t261 = load { ptr, i64, i64 }, ptr %a260 + store { ptr, i64, i64 } %t261, ptr %a262 + %t263 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = load ptr, ptr %a1 + %t266 = icmp eq ptr %t265, null + br i1 %t266, label %panic4045, label %ok4046 +panic4045: + call void @finch_panic(ptr @.str.2503, i64 1738, ptr @.str.2504) + unreachable +ok4046: + %t267 = getelementptr inbounds %S.gen.Gen, ptr %t265, i32 0, i32 18 + store { ptr, i64, i64 } %t264, ptr %a268 + call void @finch.copy.arr_str(ptr %a269, ptr %a268) + %t270 = load { ptr, i64, i64 }, ptr %a269 + %t271 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t270, ptr %t267 + store { ptr, i64, i64 } %t271, ptr %a272 + call void @finch.drop.arr_str(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a3 + %t274 = load ptr, ptr %a1 + %t275 = icmp eq ptr %t274, null + br i1 %t275, label %panic4047, label %ok4048 +panic4047: + call void @finch_panic(ptr @.str.2505, i64 1739, ptr @.str.2506) + unreachable +ok4048: + %t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 19 + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch.copy.arr_S_ast_Type(ptr %a278, ptr %a277) + %t279 = load { ptr, i64, i64 }, ptr %a278 + %t280 = load { ptr, i64, i64 }, ptr %t276 + store { ptr, i64, i64 } %t279, ptr %t276 + store { ptr, i64, i64 } %t280, ptr %a281 + call void @finch.drop.arr_S_ast_Type(ptr %a281) + %t282 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t283 = load { ptr, i64, i64 }, ptr %t282 + %t284 = load ptr, ptr %a1 + %t285 = icmp eq ptr %t284, null + br i1 %t285, label %panic4049, label %ok4050 +panic4049: + call void @finch_panic(ptr @.str.2507, i64 1740, ptr @.str.2508) + unreachable +ok4050: + %t286 = getelementptr inbounds %S.gen.Gen, ptr %t284, i32 0, i32 14 + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_copy(ptr %a288, ptr %a287) + %t289 = load { ptr, i64, i64 }, ptr %a288 + %t290 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t289, ptr %t286 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 8 + %t293 = load { ptr, i64, i64 }, ptr %t292 + store { ptr, i64, i64 } { ptr @.str.2509, i64 17, i64 0 }, ptr %a295 + store { ptr, i64, i64 } %t293, ptr %a296 + call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a294 + store { ptr, i64, i64 } %t297, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.2510, i64 1, i64 0 }, ptr %a300 + call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) + store { ptr, i64, i64 } %t297, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a298 + %t303 = load ptr, ptr %a1 + %t304 = icmp eq ptr %t303, null + br i1 %t304, label %panic4051, label %ok4052 +panic4051: + call void @finch_panic(ptr @.str.2511, i64 1741, ptr @.str.2512) + unreachable +ok4052: + %t305 = getelementptr inbounds %S.gen.Gen, ptr %t303, i32 0, i32 20 + %t306 = load { ptr, i64, i64 }, ptr %t305 + store { ptr, i64, i64 } %t302, ptr %t305 + store { ptr, i64, i64 } %t306, ptr %a307 + call void @finch_str_drop(ptr %a307) + %t308 = load ptr, ptr %a1 + %t309 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 5 + %t310 = load %S.ast.Type, ptr %t309 + %t311 = load %S.ast.Node, ptr %a87 + %t312 = call %S.ast.Type @finch.gen.resolve(ptr %t308, %S.ast.Type %t310, %S.ast.Node %t311) + %t313 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 12 + %t314 = load %S.ast.Type, ptr %t313 + store %S.ast.Type %t312, ptr %t313 + store %S.ast.Type %t314, ptr %a315 + call void @finch.drop.S_ast_Type(ptr %a315) + %t316 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t317 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 + %t319 = load i64, ptr %t318 + %t320 = sub i64 %t319, 1 + %t321 = load { ptr, i64, i64 }, ptr %t316 + %t322 = extractvalue { ptr, i64, i64 } %t321, 1 + %t323 = icmp uge i64 %t320, %t322 + br i1 %t323, label %range4053, label %inrange4054 +range4053: + call void @finch_panic_index(ptr @.str.2513, i64 1743, i64 %t320, i64 %t322) + unreachable +inrange4054: + %t324 = extractvalue { ptr, i64, i64 } %t321, 0 + %t325 = getelementptr inbounds %S.ast.Node, ptr %t324, i64 %t320 + %t326 = load %S.ast.Node, ptr %t325 + store %S.ast.Node %t326, ptr %a327 + call void @finch.copy.S_ast_Node(ptr %a328, ptr %a327) + %t329 = load %S.ast.Node, ptr %a328 + store %S.ast.Node %t329, ptr %a330 + %t331 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 + %t333 = load i64, ptr %t332 + %t334 = sub i64 %t333, 1 + store i64 0, ptr %a335 + br label %for.cond4055 +for.cond4055: + %t336 = load i64, ptr %a335 + %t337 = icmp slt i64 %t336, %t334 + br i1 %t337, label %for.body4056, label %for.end4058 +for.body4056: + %t338 = load ptr, ptr %a1 + %t339 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t340 = load i64, ptr %a335 + %t341 = load { ptr, i64, i64 }, ptr %t339 + %t342 = extractvalue { ptr, i64, i64 } %t341, 1 + %t343 = icmp uge i64 %t340, %t342 + br i1 %t343, label %range4059, label %inrange4060 +range4059: + call void @finch_panic_index(ptr @.str.2514, i64 1745, i64 %t340, i64 %t342) + unreachable +inrange4060: + %t344 = extractvalue { ptr, i64, i64 } %t341, 0 + %t345 = getelementptr inbounds %S.ast.Node, ptr %t344, i64 %t340 + %t346 = getelementptr inbounds %S.ast.Node, ptr %t345, i32 0, i32 5 + %t347 = load %S.ast.Type, ptr %t346 + %t348 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t349 = load i64, ptr %a335 + %t350 = load { ptr, i64, i64 }, ptr %t348 + %t351 = extractvalue { ptr, i64, i64 } %t350, 1 + %t352 = icmp uge i64 %t349, %t351 + br i1 %t352, label %range4061, label %inrange4062 +range4061: + call void @finch_panic_index(ptr @.str.2515, i64 1745, i64 %t349, i64 %t351) + unreachable +inrange4062: + %t353 = extractvalue { ptr, i64, i64 } %t350, 0 + %t354 = getelementptr inbounds %S.ast.Node, ptr %t353, i64 %t349 + %t355 = load %S.ast.Node, ptr %t354 + %t356 = call %S.ast.Type @finch.gen.resolve(ptr %t338, %S.ast.Type %t347, %S.ast.Node %t355) + store %S.ast.Type %t356, ptr %a357 + %t358 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 13 + %t359 = getelementptr inbounds { ptr, i64, i64 }, ptr %t358, i32 0, i32 1 + %t360 = load %S.ast.Type, ptr %a357 + store %S.ast.Type %t360, ptr %a361 + call void @finch.copy.S_ast_Type(ptr %a362, ptr %a361) + %t363 = load %S.ast.Type, ptr %a362 + %t364 = load i64, ptr %t359 + %t365 = add i64 %t364, 1 + call void @finch_arr_reserve(ptr %t358, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t366 = load ptr, ptr %t358 + %t367 = getelementptr inbounds %S.ast.Type, ptr %t366, i64 %t364 + store %S.ast.Type %t363, ptr %t367 + store i64 %t365, ptr %t359 + %t368 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 14 + %t369 = getelementptr inbounds { ptr, i64, i64 }, ptr %t368, i32 0, i32 1 + %t370 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t371 = load i64, ptr %a335 + %t372 = load { ptr, i64, i64 }, ptr %t370 + %t373 = extractvalue { ptr, i64, i64 } %t372, 1 + %t374 = icmp uge i64 %t371, %t373 + br i1 %t374, label %range4063, label %inrange4064 +range4063: + call void @finch_panic_index(ptr @.str.2516, i64 1747, i64 %t371, i64 %t373) + unreachable +inrange4064: + %t375 = extractvalue { ptr, i64, i64 } %t372, 0 + %t376 = getelementptr inbounds %S.ast.Node, ptr %t375, i64 %t371 + %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i32 0, i32 1 + %t378 = load { ptr, i64, i64 }, ptr %t377 + store { ptr, i64, i64 } %t378, ptr %a379 + call void @finch_str_copy(ptr %a380, ptr %a379) + %t381 = load { ptr, i64, i64 }, ptr %a380 + %t382 = load i64, ptr %t369 + %t383 = add i64 %t382, 1 + call void @finch_arr_reserve(ptr %t368, i64 %t383, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t384 = load ptr, ptr %t368 + %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t382 + store { ptr, i64, i64 } %t381, ptr %t385 + store i64 %t383, ptr %t369 + %t386 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 15 + %t387 = getelementptr inbounds { ptr, i64, i64 }, ptr %t386, i32 0, i32 1 + %t388 = load ptr, ptr %a1 + %t389 = load %S.ast.Type, ptr %a357 + %t390 = call i1 @finch.gen.owning(ptr %t388, %S.ast.Type %t389) + br label %logic.from4065 +logic.from4065: + br i1 %t390, label %logic.rhs4066, label %logic.end4067 +logic.rhs4066: + %t391 = load ptr, ptr %a1 + %t392 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t393 = load i64, ptr %a335 + %t394 = load { ptr, i64, i64 }, ptr %t392 + %t395 = extractvalue { ptr, i64, i64 } %t394, 1 + %t396 = icmp uge i64 %t393, %t395 + br i1 %t396, label %range4068, label %inrange4069 +range4068: + call void @finch_panic_index(ptr @.str.2517, i64 1748, i64 %t393, i64 %t395) + unreachable +inrange4069: + %t397 = extractvalue { ptr, i64, i64 } %t394, 0 + %t398 = getelementptr inbounds %S.ast.Node, ptr %t397, i64 %t393 + %t399 = getelementptr inbounds %S.ast.Node, ptr %t398, i32 0, i32 1 + %t400 = load { ptr, i64, i64 }, ptr %t399 + %t401 = load %S.ast.Node, ptr %a330 + %t402 = call i1 @finch.gen.mutates(ptr %t391, { ptr, i64, i64 } %t400, %S.ast.Node %t401) + %t403 = xor i1 %t402, true + br label %logic.rend4070 +logic.rend4070: + br label %logic.end4067 +logic.end4067: + %t404 = phi i1 [ false, %logic.from4065 ], [ %t403, %logic.rend4070 ] + %t405 = load i64, ptr %t387 + %t406 = add i64 %t405, 1 + call void @finch_arr_reserve(ptr %t386, i64 %t406, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + %t407 = load ptr, ptr %t386 + %t408 = getelementptr inbounds i1, ptr %t407, i64 %t405 + store i1 %t404, ptr %t408 + store i64 %t406, ptr %t387 + call void @finch.drop.S_ast_Type(ptr %a357) + br label %for.step4057 +for.step4057: + %t409 = load i64, ptr %a335 + %t410 = add i64 %t409, 1 + store i64 %t410, ptr %a335 + br label %for.cond4055 +for.end4058: + %t411 = load { ptr, i64, i64 }, ptr %a238 + %t412 = load ptr, ptr %a1 + %t413 = icmp eq ptr %t412, null + br i1 %t413, label %panic4071, label %ok4072 +panic4071: + call void @finch_panic(ptr @.str.2518, i64 1750, ptr @.str.2519) + unreachable +ok4072: + %t414 = getelementptr inbounds %S.gen.Gen, ptr %t412, i32 0, i32 18 + store { ptr, i64, i64 } %t411, ptr %a415 + call void @finch.copy.arr_str(ptr %a416, ptr %a415) + %t417 = load { ptr, i64, i64 }, ptr %a416 + %t418 = load { ptr, i64, i64 }, ptr %t414 + store { ptr, i64, i64 } %t417, ptr %t414 + store { ptr, i64, i64 } %t418, ptr %a419 + call void @finch.drop.arr_str(ptr %a419) + %t420 = load { ptr, i64, i64 }, ptr %a246 + %t421 = load ptr, ptr %a1 + %t422 = icmp eq ptr %t421, null + br i1 %t422, label %panic4073, label %ok4074 +panic4073: + call void @finch_panic(ptr @.str.2520, i64 1751, ptr @.str.2521) + unreachable +ok4074: + %t423 = getelementptr inbounds %S.gen.Gen, ptr %t421, i32 0, i32 19 + store { ptr, i64, i64 } %t420, ptr %a424 + call void @finch.copy.arr_S_ast_Type(ptr %a425, ptr %a424) + %t426 = load { ptr, i64, i64 }, ptr %a425 + %t427 = load { ptr, i64, i64 }, ptr %t423 + store { ptr, i64, i64 } %t426, ptr %t423 + store { ptr, i64, i64 } %t427, ptr %a428 + call void @finch.drop.arr_S_ast_Type(ptr %a428) + %t429 = load { ptr, i64, i64 }, ptr %a254 + %t430 = load ptr, ptr %a1 + %t431 = icmp eq ptr %t430, null + br i1 %t431, label %panic4075, label %ok4076 +panic4075: + call void @finch_panic(ptr @.str.2522, i64 1752, ptr @.str.2523) + unreachable +ok4076: + %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 14 + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch_str_copy(ptr %a434, ptr %a433) + %t435 = load { ptr, i64, i64 }, ptr %a434 + %t436 = load { ptr, i64, i64 }, ptr %t432 + store { ptr, i64, i64 } %t435, ptr %t432 + store { ptr, i64, i64 } %t436, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a262 + %t439 = load ptr, ptr %a1 + %t440 = icmp eq ptr %t439, null + br i1 %t440, label %panic4077, label %ok4078 +panic4077: + call void @finch_panic(ptr @.str.2524, i64 1753, ptr @.str.2525) + unreachable +ok4078: + %t441 = getelementptr inbounds %S.gen.Gen, ptr %t439, i32 0, i32 20 + store { ptr, i64, i64 } %t438, ptr %a442 + call void @finch_str_copy(ptr %a443, ptr %a442) + %t444 = load { ptr, i64, i64 }, ptr %a443 + %t445 = load { ptr, i64, i64 }, ptr %t441 + store { ptr, i64, i64 } %t444, ptr %t441 + store { ptr, i64, i64 } %t445, ptr %a446 + call void @finch_str_drop(ptr %a446) + %t447 = load ptr, ptr %a1 + %t448 = icmp eq ptr %t447, null + br i1 %t448, label %panic4079, label %ok4080 +panic4079: + call void @finch_panic(ptr @.str.2526, i64 1754, ptr @.str.2527) + unreachable +ok4080: + %t449 = getelementptr inbounds %S.gen.Gen, ptr %t447, i32 0, i32 15 + %t450 = getelementptr inbounds { ptr, i64, i64 }, ptr %t449, i32 0, i32 1 + %t451 = load %S.gen.FnSig, ptr %a133 + store %S.gen.FnSig %t451, ptr %a452 + call void @finch.copy.S_gen_FnSig(ptr %a453, ptr %a452) + %t454 = load %S.gen.FnSig, ptr %a453 + %t455 = load i64, ptr %t450 + %t456 = add i64 %t455, 1 + call void @finch_arr_reserve(ptr %t449, i64 %t456, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) + %t457 = load ptr, ptr %t449 + %t458 = getelementptr inbounds %S.gen.FnSig, ptr %t457, i64 %t455 + store %S.gen.FnSig %t454, ptr %t458 + store i64 %t456, ptr %t450 + %t459 = load ptr, ptr %a1 + %t460 = icmp eq ptr %t459, null + br i1 %t460, label %panic4081, label %ok4082 +panic4081: + call void @finch_panic(ptr @.str.2528, i64 1755, ptr @.str.2529) + unreachable +ok4082: + %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 15 + %t462 = getelementptr inbounds { ptr, i64, i64 }, ptr %t461, i32 0, i32 1 + %t463 = load i64, ptr %t462 + %t464 = sub i64 %t463, 1 + call void @finch.drop.S_ast_Node(ptr %a330) + call void @finch_str_drop(ptr %a262) + call void @finch_str_drop(ptr %a254) + call void @finch.drop.arr_S_ast_Type(ptr %a246) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_gen_FnSig(ptr %a133) + call void @finch.drop.S_ast_Node(ptr %a87) + call void @finch_str_drop(ptr %a39) + call void @finch.drop.S_gen_Template(ptr %a19) + ret i64 %t464 +} + +define internal void @finch.gen.bindType(ptr %p0, %S.ast.Type %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3, ptr %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca ptr, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca i64, align 16 + %a28 = alloca i64, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca i64, align 16 + %a47 = alloca i64, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca i64, align 16 + %a80 = alloca %S.ast.Type, align 16 + %a81 = alloca %S.ast.Type, align 16 + %a84 = alloca %S.ast.Type, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca %S.gen.StructDef, align 16 + %a231 = alloca %S.gen.StructDef, align 16 + %a233 = alloca %S.gen.StructDef, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store ptr %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.2530, i64 5, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br label %logic.from4083 +logic.from4083: + br i1 %t11, label %logic.rhs4084, label %logic.end4085 +logic.rhs4084: + %t12 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp eq i64 %t14, 0 + br label %logic.rend4086 +logic.rend4086: + br label %logic.end4085 +logic.end4085: + %t16 = phi i1 [ false, %logic.from4083 ], [ %t15, %logic.rend4086 ] + br label %logic.from4087 +logic.from4087: + br i1 %t16, label %logic.rhs4088, label %logic.end4089 +logic.rhs4088: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp eq i64 %t19, 0 + br label %logic.rend4090 +logic.rend4090: + br label %logic.end4089 +logic.end4089: + %t21 = phi i1 [ false, %logic.from4087 ], [ %t20, %logic.rend4090 ] + br label %logic.from4091 +logic.from4091: + br i1 %t21, label %logic.rhs4092, label %logic.end4093 +logic.rhs4092: + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store i64 -1, ptr %a25 + %t26 = load i64, ptr %t22 + %t27 = load ptr, ptr %a4 + store i64 0, ptr %a28 + br label %find.cond4094 +find.cond4094: + %t29 = load i64, ptr %a28 + %t30 = icmp slt i64 %t29, %t26 + br i1 %t30, label %find.body4095, label %find.end4098 +find.body4095: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 %t29 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } %t24, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br i1 %t36, label %find.hit4096, label %find.next4097 +find.hit4096: + store i64 %t29, ptr %a25 + br label %find.end4098 +find.next4097: + %t37 = add i64 %t29, 1 + store i64 %t37, ptr %a28 + br label %find.cond4094 +find.end4098: + %t38 = load i64, ptr %a25 + %t39 = icmp sge i64 %t38, 0 + br label %logic.rend4099 +logic.rend4099: + br label %logic.end4093 +logic.end4093: + %t40 = phi i1 [ false, %logic.from4091 ], [ %t39, %logic.rend4099 ] + br i1 %t40, label %then4100, label %endif4102 +then4100: + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t42 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store i64 -1, ptr %a44 + %t45 = load i64, ptr %t41 + %t46 = load ptr, ptr %a4 + store i64 0, ptr %a47 + br label %find.cond4103 +find.cond4103: + %t48 = load i64, ptr %a47 + %t49 = icmp slt i64 %t48, %t45 + br i1 %t49, label %find.body4104, label %find.end4107 +find.body4104: + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t48 + %t51 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } %t51, ptr %a52 + store { ptr, i64, i64 } %t43, ptr %a53 + %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) + %t55 = icmp ne i32 %t54, 0 + br i1 %t55, label %find.hit4105, label %find.next4106 +find.hit4105: + store i64 %t48, ptr %a44 + br label %find.end4107 +find.next4106: + %t56 = add i64 %t48, 1 + store i64 %t56, ptr %a47 + br label %find.cond4103 +find.end4107: + %t57 = load i64, ptr %a44 + store i64 %t57, ptr %a58 + %t59 = load ptr, ptr %a5 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic4108, label %ok4109 +panic4108: + call void @finch_panic(ptr @.str.2531, i64 1762, ptr @.str.2532) + unreachable +ok4109: + %t61 = getelementptr inbounds %S.gen.Binds, ptr %t59, i32 0, i32 1 + %t62 = load i64, ptr %a58 + %t63 = load { ptr, i64, i64 }, ptr %t61 + %t64 = extractvalue { ptr, i64, i64 } %t63, 1 + %t65 = icmp uge i64 %t62, %t64 + br i1 %t65, label %range4110, label %inrange4111 +range4110: + call void @finch_panic_index(ptr @.str.2533, i64 1762, i64 %t62, i64 %t64) + unreachable +inrange4111: + %t66 = extractvalue { ptr, i64, i64 } %t63, 0 + %t67 = getelementptr inbounds i1, ptr %t66, i64 %t62 + %t68 = load i1, ptr %t67 + %t69 = xor i1 %t68, true + br i1 %t69, label %then4112, label %endif4114 +then4112: + %t70 = load %S.ast.Type, ptr %a3 + %t71 = load ptr, ptr %a5 + %t72 = icmp eq ptr %t71, null + br i1 %t72, label %panic4115, label %ok4116 +panic4115: + call void @finch_panic(ptr @.str.2534, i64 1763, ptr @.str.2535) + unreachable +ok4116: + %t73 = getelementptr inbounds %S.gen.Binds, ptr %t71, i32 0, i32 0 + %t74 = load i64, ptr %a58 + %t75 = load { ptr, i64, i64 }, ptr %t73 + %t76 = extractvalue { ptr, i64, i64 } %t75, 1 + %t77 = icmp uge i64 %t74, %t76 + br i1 %t77, label %range4117, label %inrange4118 +range4117: + call void @finch_panic_index(ptr @.str.2536, i64 1763, i64 %t74, i64 %t76) + unreachable +inrange4118: + %t78 = extractvalue { ptr, i64, i64 } %t75, 0 + %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i64 %t74 + store %S.ast.Type %t70, ptr %a80 + call void @finch.copy.S_ast_Type(ptr %a81, ptr %a80) + %t82 = load %S.ast.Type, ptr %a81 + %t83 = load %S.ast.Type, ptr %t79 + store %S.ast.Type %t82, ptr %t79 + store %S.ast.Type %t83, ptr %a84 + call void @finch.drop.S_ast_Type(ptr %a84) + %t85 = load ptr, ptr %a5 + %t86 = icmp eq ptr %t85, null + br i1 %t86, label %panic4119, label %ok4120 +panic4119: + call void @finch_panic(ptr @.str.2537, i64 1764, ptr @.str.2538) + unreachable +ok4120: + %t87 = getelementptr inbounds %S.gen.Binds, ptr %t85, i32 0, i32 1 + %t88 = load i64, ptr %a58 + %t89 = load { ptr, i64, i64 }, ptr %t87 + %t90 = extractvalue { ptr, i64, i64 } %t89, 1 + %t91 = icmp uge i64 %t88, %t90 + br i1 %t91, label %range4121, label %inrange4122 +range4121: + call void @finch_panic_index(ptr @.str.2539, i64 1764, i64 %t88, i64 %t90) + unreachable +inrange4122: + %t92 = extractvalue { ptr, i64, i64 } %t89, 0 + %t93 = getelementptr inbounds i1, ptr %t92, i64 %t88 + store i1 true, ptr %t93 + br label %endif4114 +endif4114: + ret void +endif4102: + %t94 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t95 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.2540, i64 5, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br label %logic.from4123 +logic.from4123: + br i1 %t99, label %logic.end4125, label %logic.rhs4124 +logic.rhs4124: + %t100 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t101 = load { ptr, i64, i64 }, ptr %t100 + store { ptr, i64, i64 } %t101, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.2541, i64 3, i64 0 }, ptr %a103 + %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) + %t105 = icmp ne i32 %t104, 0 + br label %logic.rend4126 +logic.rend4126: + br label %logic.end4125 +logic.end4125: + %t106 = phi i1 [ true, %logic.from4123 ], [ %t105, %logic.rend4126 ] + br label %logic.from4127 +logic.from4127: + br i1 %t106, label %logic.end4129, label %logic.rhs4128 +logic.rhs4128: + %t107 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t108 = load { ptr, i64, i64 }, ptr %t107 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2542, i64 5, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br label %logic.rend4130 +logic.rend4130: + br label %logic.end4129 +logic.end4129: + %t113 = phi i1 [ true, %logic.from4127 ], [ %t112, %logic.rend4130 ] + br label %logic.from4131 +logic.from4131: + br i1 %t113, label %logic.rhs4132, label %logic.end4133 +logic.rhs4132: + %t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp sgt i64 %t116, 0 + br label %logic.rend4134 +logic.rend4134: + br label %logic.end4133 +logic.end4133: + %t118 = phi i1 [ false, %logic.from4131 ], [ %t117, %logic.rend4134 ] + br label %logic.from4135 +logic.from4135: + br i1 %t118, label %logic.rhs4136, label %logic.end4137 +logic.rhs4136: + %t119 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t120 = load { ptr, i64, i64 }, ptr %t119 + %t121 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t122 = load { ptr, i64, i64 }, ptr %t121 + store { ptr, i64, i64 } %t120, ptr %a123 + store { ptr, i64, i64 } %t122, ptr %a124 + %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) + %t126 = icmp ne i32 %t125, 0 + br label %logic.rend4138 +logic.rend4138: + br label %logic.end4137 +logic.end4137: + %t127 = phi i1 [ false, %logic.from4135 ], [ %t126, %logic.rend4138 ] + br label %logic.from4139 +logic.from4139: + br i1 %t127, label %logic.rhs4140, label %logic.end4141 +logic.rhs4140: + %t128 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 + %t130 = load i64, ptr %t129 + %t131 = icmp sgt i64 %t130, 0 + br label %logic.rend4142 +logic.rend4142: + br label %logic.end4141 +logic.end4141: + %t132 = phi i1 [ false, %logic.from4139 ], [ %t131, %logic.rend4142 ] + br i1 %t132, label %then4143, label %endif4145 +then4143: + %t133 = load ptr, ptr %a1 + %t134 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t135 = load { ptr, i64, i64 }, ptr %t134 + %t136 = extractvalue { ptr, i64, i64 } %t135, 1 + %t137 = icmp uge i64 0, %t136 + br i1 %t137, label %range4146, label %inrange4147 +range4146: + call void @finch_panic_index(ptr @.str.2543, i64 1769, i64 0, i64 %t136) + unreachable +inrange4147: + %t138 = extractvalue { ptr, i64, i64 } %t135, 0 + %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i64 0 + %t140 = load %S.ast.Type, ptr %t139 + %t141 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t142 = load { ptr, i64, i64 }, ptr %t141 + %t143 = extractvalue { ptr, i64, i64 } %t142, 1 + %t144 = icmp uge i64 0, %t143 + br i1 %t144, label %range4148, label %inrange4149 +range4148: + call void @finch_panic_index(ptr @.str.2544, i64 1769, i64 0, i64 %t143) + unreachable +inrange4149: + %t145 = extractvalue { ptr, i64, i64 } %t142, 0 + %t146 = getelementptr inbounds %S.ast.Type, ptr %t145, i64 0 + %t147 = load %S.ast.Type, ptr %t146 + %t148 = load { ptr, i64, i64 }, ptr %a4 + %t149 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t133, %S.ast.Type %t140, %S.ast.Type %t147, { ptr, i64, i64 } %t148, ptr %t149) + ret void +endif4145: + %t150 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t151 = load { ptr, i64, i64 }, ptr %t150 + store { ptr, i64, i64 } %t151, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.2545, i64 3, i64 0 }, ptr %a153 + %t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153) + %t155 = icmp ne i32 %t154, 0 + br label %logic.from4150 +logic.from4150: + br i1 %t155, label %logic.rhs4151, label %logic.end4152 +logic.rhs4151: + %t156 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.2546, i64 3, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) + %t161 = icmp ne i32 %t160, 0 + br label %logic.rend4153 +logic.rend4153: + br label %logic.end4152 +logic.end4152: + %t162 = phi i1 [ false, %logic.from4150 ], [ %t161, %logic.rend4153 ] + br i1 %t162, label %then4154, label %endif4156 +then4154: + %t163 = load ptr, ptr %a1 + %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t165 = load { ptr, i64, i64 }, ptr %t164 + %t166 = extractvalue { ptr, i64, i64 } %t165, 1 + %t167 = icmp uge i64 0, %t166 + br i1 %t167, label %range4157, label %inrange4158 +range4157: + call void @finch_panic_index(ptr @.str.2547, i64 1773, i64 0, i64 %t166) + unreachable +inrange4158: + %t168 = extractvalue { ptr, i64, i64 } %t165, 0 + %t169 = getelementptr inbounds %S.ast.Type, ptr %t168, i64 0 + %t170 = load %S.ast.Type, ptr %t169 + %t171 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t172 = load { ptr, i64, i64 }, ptr %t171 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 0, %t173 + br i1 %t174, label %range4159, label %inrange4160 +range4159: + call void @finch_panic_index(ptr @.str.2548, i64 1773, i64 0, i64 %t173) + unreachable +inrange4160: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds %S.ast.Type, ptr %t175, i64 0 + %t177 = load %S.ast.Type, ptr %t176 + %t178 = load { ptr, i64, i64 }, ptr %a4 + %t179 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t163, %S.ast.Type %t170, %S.ast.Type %t177, { ptr, i64, i64 } %t178, ptr %t179) + %t180 = load ptr, ptr %a1 + %t181 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t182 = load { ptr, i64, i64 }, ptr %t181 + %t183 = extractvalue { ptr, i64, i64 } %t182, 1 + %t184 = icmp uge i64 1, %t183 + br i1 %t184, label %range4161, label %inrange4162 +range4161: + call void @finch_panic_index(ptr @.str.2549, i64 1774, i64 1, i64 %t183) + unreachable +inrange4162: + %t185 = extractvalue { ptr, i64, i64 } %t182, 0 + %t186 = getelementptr inbounds %S.ast.Type, ptr %t185, i64 1 + %t187 = load %S.ast.Type, ptr %t186 + %t188 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t189 = load { ptr, i64, i64 }, ptr %t188 + %t190 = extractvalue { ptr, i64, i64 } %t189, 1 + %t191 = icmp uge i64 1, %t190 + br i1 %t191, label %range4163, label %inrange4164 +range4163: + call void @finch_panic_index(ptr @.str.2550, i64 1774, i64 1, i64 %t190) + unreachable +inrange4164: + %t192 = extractvalue { ptr, i64, i64 } %t189, 0 + %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i64 1 + %t194 = load %S.ast.Type, ptr %t193 + %t195 = load { ptr, i64, i64 }, ptr %a4 + %t196 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t180, %S.ast.Type %t187, %S.ast.Type %t194, { ptr, i64, i64 } %t195, ptr %t196) + ret void +endif4156: + %t197 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t198 = load { ptr, i64, i64 }, ptr %t197 + store { ptr, i64, i64 } %t198, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.2551, i64 5, i64 0 }, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp ne i32 %t201, 0 + br label %logic.from4165 +logic.from4165: + br i1 %t202, label %logic.rhs4166, label %logic.end4167 +logic.rhs4166: + %t203 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 + %t205 = load i64, ptr %t204 + %t206 = icmp sgt i64 %t205, 0 + br label %logic.rend4168 +logic.rend4168: + br label %logic.end4167 +logic.end4167: + %t207 = phi i1 [ false, %logic.from4165 ], [ %t206, %logic.rend4168 ] + br label %logic.from4169 +logic.from4169: + br i1 %t207, label %logic.rhs4170, label %logic.end4171 +logic.rhs4170: + %t208 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t209 = load { ptr, i64, i64 }, ptr %t208 + store { ptr, i64, i64 } %t209, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.2552, i64 6, i64 0 }, ptr %a211 + %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) + %t213 = icmp ne i32 %t212, 0 + br label %logic.rend4172 +logic.rend4172: + br label %logic.end4171 +logic.end4171: + %t214 = phi i1 [ false, %logic.from4169 ], [ %t213, %logic.rend4172 ] + br i1 %t214, label %then4173, label %endif4175 +then4173: + %t215 = load ptr, ptr %a1 + %t216 = icmp eq ptr %t215, null + br i1 %t216, label %panic4176, label %ok4177 +panic4176: + call void @finch_panic(ptr @.str.2553, i64 1778, ptr @.str.2554) + unreachable +ok4177: + %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 16 + %t218 = load ptr, ptr %a1 + %t219 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 + %t220 = load { ptr, i64, i64 }, ptr %t219 + %t221 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 + %t222 = load { ptr, i64, i64 }, ptr %t221 + %t223 = call i64 @finch.gen.findStruct(ptr %t218, { ptr, i64, i64 } %t220, { ptr, i64, i64 } %t222) + %t224 = load { ptr, i64, i64 }, ptr %t217 + %t225 = extractvalue { ptr, i64, i64 } %t224, 1 + %t226 = icmp uge i64 %t223, %t225 + br i1 %t226, label %range4178, label %inrange4179 +range4178: + call void @finch_panic_index(ptr @.str.2555, i64 1778, i64 %t223, i64 %t225) + unreachable +inrange4179: + %t227 = extractvalue { ptr, i64, i64 } %t224, 0 + %t228 = getelementptr inbounds %S.gen.StructDef, ptr %t227, i64 %t223 + %t229 = load %S.gen.StructDef, ptr %t228 + store %S.gen.StructDef %t229, ptr %a230 + call void @finch.copy.S_gen_StructDef(ptr %a231, ptr %a230) + %t232 = load %S.gen.StructDef, ptr %a231 + store %S.gen.StructDef %t232, ptr %a233 + %t234 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 5 + %t235 = load { ptr, i64, i64 }, ptr %t234 + %t236 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t237 = load { ptr, i64, i64 }, ptr %t236 + store { ptr, i64, i64 } %t235, ptr %a238 + store { ptr, i64, i64 } %t237, ptr %a239 + %t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239) + %t241 = icmp ne i32 %t240, 0 + br label %logic.from4180 +logic.from4180: + br i1 %t241, label %logic.rhs4181, label %logic.end4182 +logic.rhs4181: + %t242 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 + %t244 = load i64, ptr %t243 + %t245 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %t245, i32 0, i32 1 + %t247 = load i64, ptr %t246 + %t248 = icmp eq i64 %t244, %t247 + br label %logic.rend4183 +logic.rend4183: + br label %logic.end4182 +logic.end4182: + %t249 = phi i1 [ false, %logic.from4180 ], [ %t248, %logic.rend4183 ] + br i1 %t249, label %then4184, label %endif4186 +then4184: + %t250 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %t250, i32 0, i32 1 + %t252 = load i64, ptr %t251 + store i64 0, ptr %a253 + br label %for.cond4187 +for.cond4187: + %t254 = load i64, ptr %a253 + %t255 = icmp slt i64 %t254, %t252 + br i1 %t255, label %for.body4188, label %for.end4190 +for.body4188: + %t256 = load ptr, ptr %a1 + %t257 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t258 = load i64, ptr %a253 + %t259 = load { ptr, i64, i64 }, ptr %t257 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 %t258, %t260 + br i1 %t261, label %range4191, label %inrange4192 +range4191: + call void @finch_panic_index(ptr @.str.2556, i64 1781, i64 %t258, i64 %t260) + unreachable +inrange4192: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds %S.ast.Type, ptr %t262, i64 %t258 + %t264 = load %S.ast.Type, ptr %t263 + %t265 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 + %t266 = load i64, ptr %a253 + %t267 = load { ptr, i64, i64 }, ptr %t265 + %t268 = extractvalue { ptr, i64, i64 } %t267, 1 + %t269 = icmp uge i64 %t266, %t268 + br i1 %t269, label %range4193, label %inrange4194 +range4193: + call void @finch_panic_index(ptr @.str.2557, i64 1781, i64 %t266, i64 %t268) + unreachable +inrange4194: + %t270 = extractvalue { ptr, i64, i64 } %t267, 0 + %t271 = getelementptr inbounds %S.ast.Type, ptr %t270, i64 %t266 + %t272 = load %S.ast.Type, ptr %t271 + %t273 = load { ptr, i64, i64 }, ptr %a4 + %t274 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t256, %S.ast.Type %t264, %S.ast.Type %t272, { ptr, i64, i64 } %t273, ptr %t274) + br label %for.step4189 +for.step4189: + %t275 = load i64, ptr %a253 + %t276 = add i64 %t275, 1 + store i64 %t276, ptr %a253 + br label %for.cond4187 +for.end4190: + br label %endif4186 +endif4186: + call void @finch.drop.S_gen_StructDef(ptr %a233) + br label %endif4175 +endif4175: + ret void +} + +define internal void @finch.drop.arr_S_gen_Val(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond4271 +n.cond4271: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body4272, label %n.end4273 +n.body4272: + %t7 = getelementptr inbounds %S.gen.Val, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Val(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond4271 +n.end4273: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Binds(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Binds, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_ast_Type(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Binds, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_bool(ptr %t2) + ret void +} + +define internal %S.gen.Val @finch.gen.genericCall(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.gen.Template, align 16 + %a17 = alloca %S.gen.Template, align 16 + %a19 = alloca %S.gen.Template, align 16 + %a39 = alloca %S.ast.Node, align 16 + %a40 = alloca %S.ast.Node, align 16 + %a42 = alloca %S.ast.Node, align 16 + %a47 = alloca i64, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca i64, align 16 + %a113 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.ast.Type, align 16 + %a137 = alloca %S.gen.Binds, align 16 + %a141 = alloca i64, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca i64, align 16 + %a167 = alloca i64, align 16 + %a182 = alloca %S.gen.Val, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca %S.gen.Val, align 16 + %a228 = alloca %S.gen.Val, align 16 + %a255 = alloca i64, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a309 = alloca i64, align 16 + %a320 = alloca %S.gen.FnSig, align 16 + %a321 = alloca %S.gen.FnSig, align 16 + %a323 = alloca %S.gen.FnSig, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca i64, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca %S.gen.Val, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca %S.gen.Val, align 16 + %a414 = alloca i64, align 16 + %a422 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4195, label %ok4196 +panic4195: + call void @finch_panic(ptr @.str.2558, i64 1789, ptr @.str.2559) + unreachable +ok4196: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 + %t9 = load i64, ptr %a3 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range4197, label %inrange4198 +range4197: + call void @finch_panic_index(ptr @.str.2560, i64 1789, i64 %t9, i64 %t11) + unreachable +inrange4198: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 + %t15 = load %S.gen.Template, ptr %t14 + store %S.gen.Template %t15, ptr %a16 + call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) + %t18 = load %S.gen.Template, ptr %a17 + store %S.gen.Template %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic4199, label %ok4200 +panic4199: + call void @finch_panic(ptr @.str.2561, i64 1790, ptr @.str.2562) + unreachable +ok4200: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 0 + %t23 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 + %t24 = load i64, ptr %t23 + %t25 = load { ptr, i64, i64 }, ptr %t22 + %t26 = extractvalue { ptr, i64, i64 } %t25, 1 + %t27 = icmp uge i64 %t24, %t26 + br i1 %t27, label %range4201, label %inrange4202 +range4201: + call void @finch_panic_index(ptr @.str.2563, i64 1790, i64 %t24, i64 %t26) + unreachable +inrange4202: + %t28 = extractvalue { ptr, i64, i64 } %t25, 0 + %t29 = getelementptr inbounds %S.ast.Program, ptr %t28, i64 %t24 + %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i32 0, i32 8 + %t31 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 + %t32 = load i64, ptr %t31 + %t33 = load { ptr, i64, i64 }, ptr %t30 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range4203, label %inrange4204 +range4203: + call void @finch_panic_index(ptr @.str.2564, i64 1790, i64 %t32, i64 %t34) + unreachable +inrange4204: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 %t32 + %t38 = load %S.ast.Node, ptr %t37 + store %S.ast.Node %t38, ptr %a39 + call void @finch.copy.S_ast_Node(ptr %a40, ptr %a39) + %t41 = load %S.ast.Node, ptr %a40 + store %S.ast.Node %t41, ptr %a42 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = sub i64 %t45, 1 + store i64 %t46, ptr %a47 + %t48 = load ptr, ptr %a1 + %t49 = load %S.ast.Node, ptr %a2 + %t50 = load i64, ptr %a4 + %t51 = load i64, ptr %a47 + %t52 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.checkArgs(ptr %t48, %S.ast.Node %t49, i64 %t50, i64 %t51, { ptr, i64, i64 } %t52) + store { ptr, i64, i64 } zeroinitializer, ptr %a53 + %t54 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t55 = getelementptr inbounds %S.ast.Type, ptr %t54, i32 0, i32 1 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 + %t57 = load i64, ptr %t56 + %t58 = icmp sgt i64 %t57, 0 + br i1 %t58, label %then4205, label %endif4207 +then4205: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t60 = getelementptr inbounds %S.ast.Type, ptr %t59, i32 0, i32 1 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 + %t62 = load i64, ptr %t61 + %t63 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + %t65 = load i64, ptr %t64 + %t66 = icmp ne i64 %t62, %t65 + br i1 %t66, label %then4208, label %endif4210 +then4208: + %t67 = load ptr, ptr %a1 + %t68 = load %S.ast.Node, ptr %a2 + %t69 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.2565, i64 7, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a70 + %t74 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i32 0, i32 1 + %t76 = load i64, ptr %t75 + call void @finch_str_from_int(ptr %a77, i64 %t76) + %t78 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t73, ptr %a80 + store { ptr, i64, i64 } %t78, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + store { ptr, i64, i64 } %t73, ptr %a82 + call void @finch_str_drop(ptr %a82) + store { ptr, i64, i64 } %t78, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t84, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.2566, i64 27, i64 0 }, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + %t90 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i32 0, i32 1 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 + %t93 = load i64, ptr %t92 + call void @finch_str_from_int(ptr %a94, i64 %t93) + %t95 = load { ptr, i64, i64 }, ptr %a94 + store { ptr, i64, i64 } %t89, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t89, ptr %a99 + call void @finch_str_drop(ptr %a99) + store { ptr, i64, i64 } %t95, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.gen.fail(ptr %t67, %S.ast.Node %t68, { ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t101, ptr %a102 + call void @finch_str_drop(ptr %a102) + br label %endif4210 +endif4210: + %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t104 = getelementptr inbounds %S.ast.Type, ptr %t103, i32 0, i32 1 + store i64 0, ptr %a105 + br label %each.cond4211 +each.cond4211: + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t107 = load i64, ptr %t106 + %t108 = load i64, ptr %a105 + %t109 = icmp slt i64 %t108, %t107 + br i1 %t109, label %each.body4212, label %each.end4214 +each.body4212: + %t110 = load ptr, ptr %t104 + %t111 = getelementptr inbounds %S.ast.Type, ptr %t110, i64 %t108 + %t112 = load %S.ast.Type, ptr %t111 + store %S.ast.Type %t112, ptr %a113 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 + %t115 = load ptr, ptr %a1 + %t116 = load %S.ast.Type, ptr %a113 + %t117 = load %S.ast.Node, ptr %a2 + %t118 = call %S.ast.Type @finch.gen.resolve(ptr %t115, %S.ast.Type %t116, %S.ast.Node %t117) + %t119 = load i64, ptr %t114 + %t120 = add i64 %t119, 1 + call void @finch_arr_reserve(ptr %a53, i64 %t120, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t121 = load ptr, ptr %a53 + %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 %t119 + store %S.ast.Type %t118, ptr %t122 + store i64 %t120, ptr %t114 + br label %each.step4213 +each.step4213: + %t123 = load i64, ptr %a105 + %t124 = add i64 %t123, 1 + store i64 %t124, ptr %a105 + br label %each.cond4211 +each.end4214: + %t125 = load ptr, ptr %a1 + %t126 = load ptr, ptr %a1 + %t127 = load i64, ptr %a3 + %t128 = load { ptr, i64, i64 }, ptr %a53 + %t129 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2567, i64 4, i64 0 }) + %t130 = load %S.ast.Node, ptr %a2 + %t131 = call i64 @finch.gen.instFn(ptr %t126, i64 %t127, { ptr, i64, i64 } %t128, %S.ast.Type %t129, %S.ast.Node %t130) + store %S.ast.Type %t129, ptr %a132 + call void @finch.drop.S_ast_Type(ptr %a132) + %t133 = load %S.ast.Node, ptr %a2 + %t134 = load i64, ptr %a4 + %t135 = load { ptr, i64, i64 }, ptr %a5 + %t136 = call %S.gen.Val @finch.gen.callFn(ptr %t125, i64 %t131, %S.ast.Node %t133, i64 %t134, { ptr, i64, i64 } %t135, { ptr, i64, i64 } { ptr @.str.2568, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.2569, i64 0, i64 0 }) + call void @finch.drop.arr_S_ast_Type(ptr %a53) + call void @finch.drop.S_ast_Node(ptr %a42) + call void @finch.drop.S_gen_Template(ptr %a19) + ret %S.gen.Val %t136 +endif4207: + store %S.gen.Binds zeroinitializer, ptr %a137 + %t138 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 + %t140 = load i64, ptr %t139 + store i64 0, ptr %a141 + br label %for.cond4215 +for.cond4215: + %t142 = load i64, ptr %a141 + %t143 = icmp slt i64 %t142, %t140 + br i1 %t143, label %for.body4216, label %for.end4218 +for.body4216: + %t144 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 + %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 + %t146 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2570, i64 4, i64 0 }) + %t147 = load i64, ptr %t145 + %t148 = add i64 %t147, 1 + call void @finch_arr_reserve(ptr %t144, i64 %t148, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t149 = load ptr, ptr %t144 + %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 %t147 + store %S.ast.Type %t146, ptr %t150 + store i64 %t148, ptr %t145 + %t151 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load i64, ptr %t152 + %t154 = add i64 %t153, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t154, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + %t155 = load ptr, ptr %t151 + %t156 = getelementptr inbounds i1, ptr %t155, i64 %t153 + store i1 false, ptr %t156 + store i64 %t154, ptr %t152 + br label %for.step4217 +for.step4217: + %t157 = load i64, ptr %a141 + %t158 = add i64 %t157, 1 + store i64 %t158, ptr %a141 + br label %for.cond4215 +for.end4218: + store { ptr, i64, i64 } zeroinitializer, ptr %a159 + %t160 = load ptr, ptr %a1 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic4219, label %ok4220 +panic4219: + call void @finch_panic(ptr @.str.2571, i64 1809, ptr @.str.2572) + unreachable +ok4220: + %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 11 + %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1 + %t164 = load i64, ptr %t163 + store i64 %t164, ptr %a165 + %t166 = load i64, ptr %a47 + store i64 0, ptr %a167 + br label %for.cond4221 +for.cond4221: + %t168 = load i64, ptr %a167 + %t169 = icmp slt i64 %t168, %t166 + br i1 %t169, label %for.body4222, label %for.end4224 +for.body4222: + %t170 = load ptr, ptr %a1 + %t171 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t172 = load i64, ptr %a4 + %t173 = load i64, ptr %a167 + %t174 = add i64 %t172, %t173 + %t175 = load { ptr, i64, i64 }, ptr %t171 + %t176 = extractvalue { ptr, i64, i64 } %t175, 1 + %t177 = icmp uge i64 %t174, %t176 + br i1 %t177, label %range4225, label %inrange4226 +range4225: + call void @finch_panic_index(ptr @.str.2573, i64 1811, i64 %t174, i64 %t176) + unreachable +inrange4226: + %t178 = extractvalue { ptr, i64, i64 } %t175, 0 + %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i64 %t174 + %t180 = load %S.ast.Node, ptr %t179 + %t181 = call %S.gen.Val @finch.gen.expr(ptr %t170, %S.ast.Node %t180) + store %S.gen.Val %t181, ptr %a182 + %t183 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 + %t184 = getelementptr inbounds %S.ast.Type, ptr %t183, i32 0, i32 0 + %t185 = load { ptr, i64, i64 }, ptr %t184 + store { ptr, i64, i64 } %t185, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.2574, i64 4, i64 0 }, ptr %a187 + %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) + %t189 = icmp ne i32 %t188, 0 + br label %logic.from4227 +logic.from4227: + br i1 %t189, label %logic.end4229, label %logic.rhs4228 +logic.rhs4228: + %t190 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 + %t191 = getelementptr inbounds %S.ast.Type, ptr %t190, i32 0, i32 0 + %t192 = load { ptr, i64, i64 }, ptr %t191 + store { ptr, i64, i64 } %t192, ptr %a193 + store { ptr, i64, i64 } { ptr @.str.2575, i64 4, i64 0 }, ptr %a194 + %t195 = call i32 @finch_str_eq(ptr %a193, ptr %a194) + %t196 = icmp ne i32 %t195, 0 + br label %logic.rend4230 +logic.rend4230: + br label %logic.end4229 +logic.end4229: + %t197 = phi i1 [ true, %logic.from4227 ], [ %t196, %logic.rend4230 ] + br i1 %t197, label %then4231, label %endif4233 +then4231: + %t198 = load ptr, ptr %a1 + %t199 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t200 = load i64, ptr %a4 + %t201 = load i64, ptr %a167 + %t202 = add i64 %t200, %t201 + %t203 = load { ptr, i64, i64 }, ptr %t199 + %t204 = extractvalue { ptr, i64, i64 } %t203, 1 + %t205 = icmp uge i64 %t202, %t204 + br i1 %t205, label %range4234, label %inrange4235 +range4234: + call void @finch_panic_index(ptr @.str.2576, i64 1813, i64 %t202, i64 %t204) + unreachable +inrange4235: + %t206 = extractvalue { ptr, i64, i64 } %t203, 0 + %t207 = getelementptr inbounds %S.ast.Node, ptr %t206, i64 %t202 + %t208 = load %S.ast.Node, ptr %t207 + %t209 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2578, i64 2, i64 0 }, ptr %a211 + call void @finch_str_join(ptr %a212, ptr %t209, ptr %a211) + %t213 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } { ptr @.str.2577, i64 29, i64 0 }, ptr %a215 + store { ptr, i64, i64 } %t213, ptr %a216 + call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) + store { ptr, i64, i64 } %t213, ptr %a217 + call void @finch_str_drop(ptr %a217) + %t218 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t218, ptr %a220 + store { ptr, i64, i64 } { ptr @.str.2579, i64 5, i64 0 }, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t218, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.fail(ptr %t198, %S.ast.Node %t208, { ptr, i64, i64 } %t223) + store { ptr, i64, i64 } %t223, ptr %a224 + call void @finch_str_drop(ptr %a224) + br label %endif4233 +endif4233: + %t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 + %t226 = load %S.gen.Val, ptr %a182 + store %S.gen.Val %t226, ptr %a227 + call void @finch.copy.S_gen_Val(ptr %a228, ptr %a227) + %t229 = load %S.gen.Val, ptr %a228 + %t230 = load i64, ptr %t225 + %t231 = add i64 %t230, 1 + call void @finch_arr_reserve(ptr %a159, i64 %t231, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t232 = load ptr, ptr %a159 + %t233 = getelementptr inbounds %S.gen.Val, ptr %t232, i64 %t230 + store %S.gen.Val %t229, ptr %t233 + store i64 %t231, ptr %t225 + %t234 = load ptr, ptr %a1 + %t235 = load %S.gen.Val, ptr %a182 + call void @finch.gen.hold(ptr %t234, %S.gen.Val %t235) + %t236 = load ptr, ptr %a1 + %t237 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 + %t238 = load i64, ptr %a167 + %t239 = load { ptr, i64, i64 }, ptr %t237 + %t240 = extractvalue { ptr, i64, i64 } %t239, 1 + %t241 = icmp uge i64 %t238, %t240 + br i1 %t241, label %range4236, label %inrange4237 +range4236: + call void @finch_panic_index(ptr @.str.2580, i64 1817, i64 %t238, i64 %t240) + unreachable +inrange4237: + %t242 = extractvalue { ptr, i64, i64 } %t239, 0 + %t243 = getelementptr inbounds %S.ast.Node, ptr %t242, i64 %t238 + %t244 = getelementptr inbounds %S.ast.Node, ptr %t243, i32 0, i32 5 + %t245 = load %S.ast.Type, ptr %t244 + %t246 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 + %t247 = load %S.ast.Type, ptr %t246 + %t248 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t249 = load { ptr, i64, i64 }, ptr %t248 + call void @finch.gen.bindType(ptr %t236, %S.ast.Type %t245, %S.ast.Type %t247, { ptr, i64, i64 } %t249, ptr %a137) + call void @finch.drop.S_gen_Val(ptr %a182) + br label %for.step4223 +for.step4223: + %t250 = load i64, ptr %a167 + %t251 = add i64 %t250, 1 + store i64 %t251, ptr %a167 + br label %for.cond4221 +for.end4224: + %t252 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i32 0, i32 1 + %t254 = load i64, ptr %t253 + store i64 0, ptr %a255 + br label %for.cond4238 +for.cond4238: + %t256 = load i64, ptr %a255 + %t257 = icmp slt i64 %t256, %t254 + br i1 %t257, label %for.body4239, label %for.end4241 +for.body4239: + %t258 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 + %t259 = load i64, ptr %a255 + %t260 = load { ptr, i64, i64 }, ptr %t258 + %t261 = extractvalue { ptr, i64, i64 } %t260, 1 + %t262 = icmp uge i64 %t259, %t261 + br i1 %t262, label %range4242, label %inrange4243 +range4242: + call void @finch_panic_index(ptr @.str.2581, i64 1820, i64 %t259, i64 %t261) + unreachable +inrange4243: + %t263 = extractvalue { ptr, i64, i64 } %t260, 0 + %t264 = getelementptr inbounds i1, ptr %t263, i64 %t259 + %t265 = load i1, ptr %t264 + %t266 = xor i1 %t265, true + br i1 %t266, label %then4244, label %endif4246 +then4244: + %t267 = load ptr, ptr %a1 + %t268 = load %S.ast.Node, ptr %a2 + %t269 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t270 = load i64, ptr %a255 + %t271 = load { ptr, i64, i64 }, ptr %t269 + %t272 = extractvalue { ptr, i64, i64 } %t271, 1 + %t273 = icmp uge i64 %t270, %t272 + br i1 %t273, label %range4247, label %inrange4248 +range4247: + call void @finch_panic_index(ptr @.str.2583, i64 1821, i64 %t270, i64 %t272) + unreachable +inrange4248: + %t274 = extractvalue { ptr, i64, i64 } %t271, 0 + %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t274, i64 %t270 + %t276 = load { ptr, i64, i64 }, ptr %t275 + store { ptr, i64, i64 } { ptr @.str.2582, i64 16, i64 0 }, ptr %a278 + store { ptr, i64, i64 } %t276, ptr %a279 + call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) + %t280 = load { ptr, i64, i64 }, ptr %a277 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.2584, i64 24, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t280, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + %t286 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t285, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t285, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t292, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.2585, i64 10, i64 0 }, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t292, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a293 + call void @finch.gen.fail(ptr %t267, %S.ast.Node %t268, { ptr, i64, i64 } %t297) + store { ptr, i64, i64 } %t297, ptr %a298 + call void @finch_str_drop(ptr %a298) + br label %endif4246 +endif4246: + br label %for.step4240 +for.step4240: + %t299 = load i64, ptr %a255 + %t300 = add i64 %t299, 1 + store i64 %t300, ptr %a255 + br label %for.cond4238 +for.end4241: + %t301 = load ptr, ptr %a1 + %t302 = load i64, ptr %a3 + %t303 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 + %t304 = load { ptr, i64, i64 }, ptr %t303 + %t305 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2586, i64 4, i64 0 }) + %t306 = load %S.ast.Node, ptr %a2 + %t307 = call i64 @finch.gen.instFn(ptr %t301, i64 %t302, { ptr, i64, i64 } %t304, %S.ast.Type %t305, %S.ast.Node %t306) + store %S.ast.Type %t305, ptr %a308 + call void @finch.drop.S_ast_Type(ptr %a308) + store i64 %t307, ptr %a309 + %t310 = load ptr, ptr %a1 + %t311 = icmp eq ptr %t310, null + br i1 %t311, label %panic4249, label %ok4250 +panic4249: + call void @finch_panic(ptr @.str.2587, i64 1825, ptr @.str.2588) + unreachable +ok4250: + %t312 = getelementptr inbounds %S.gen.Gen, ptr %t310, i32 0, i32 15 + %t313 = load i64, ptr %a309 + %t314 = load { ptr, i64, i64 }, ptr %t312 + %t315 = extractvalue { ptr, i64, i64 } %t314, 1 + %t316 = icmp uge i64 %t313, %t315 + br i1 %t316, label %range4251, label %inrange4252 +range4251: + call void @finch_panic_index(ptr @.str.2589, i64 1825, i64 %t313, i64 %t315) + unreachable +inrange4252: + %t317 = extractvalue { ptr, i64, i64 } %t314, 0 + %t318 = getelementptr inbounds %S.gen.FnSig, ptr %t317, i64 %t313 + %t319 = load %S.gen.FnSig, ptr %t318 + store %S.gen.FnSig %t319, ptr %a320 + call void @finch.copy.S_gen_FnSig(ptr %a321, ptr %a320) + %t322 = load %S.gen.FnSig, ptr %a321 + store %S.gen.FnSig %t322, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = load %S.ast.Node, ptr %a2 + %t326 = load %S.gen.FnSig, ptr %a323 + call void @finch.gen.noteCall(ptr %t324, %S.ast.Node %t325, %S.gen.FnSig %t326) + store { ptr, i64, i64 } zeroinitializer, ptr %a327 + %t328 = load i64, ptr %a47 + store i64 0, ptr %a329 + br label %for.cond4253 +for.cond4253: + %t330 = load i64, ptr %a329 + %t331 = icmp slt i64 %t330, %t328 + br i1 %t331, label %for.body4254, label %for.end4256 +for.body4254: + %t332 = load ptr, ptr %a1 + %t333 = load i64, ptr %a329 + %t334 = load { ptr, i64, i64 }, ptr %a159 + %t335 = extractvalue { ptr, i64, i64 } %t334, 1 + %t336 = icmp uge i64 %t333, %t335 + br i1 %t336, label %range4257, label %inrange4258 +range4257: + call void @finch_panic_index(ptr @.str.2590, i64 1829, i64 %t333, i64 %t335) + unreachable +inrange4258: + %t337 = extractvalue { ptr, i64, i64 } %t334, 0 + %t338 = getelementptr inbounds %S.gen.Val, ptr %t337, i64 %t333 + %t339 = load %S.gen.Val, ptr %t338 + %t340 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 13 + %t341 = load i64, ptr %a329 + %t342 = load { ptr, i64, i64 }, ptr %t340 + %t343 = extractvalue { ptr, i64, i64 } %t342, 1 + %t344 = icmp uge i64 %t341, %t343 + br i1 %t344, label %range4259, label %inrange4260 +range4259: + call void @finch_panic_index(ptr @.str.2591, i64 1829, i64 %t341, i64 %t343) + unreachable +inrange4260: + %t345 = extractvalue { ptr, i64, i64 } %t342, 0 + %t346 = getelementptr inbounds %S.ast.Type, ptr %t345, i64 %t341 + %t347 = load %S.ast.Type, ptr %t346 + %t348 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t349 = load i64, ptr %a4 + %t350 = load i64, ptr %a329 + %t351 = add i64 %t349, %t350 + %t352 = load { ptr, i64, i64 }, ptr %t348 + %t353 = extractvalue { ptr, i64, i64 } %t352, 1 + %t354 = icmp uge i64 %t351, %t353 + br i1 %t354, label %range4261, label %inrange4262 +range4261: + call void @finch_panic_index(ptr @.str.2592, i64 1829, i64 %t351, i64 %t353) + unreachable +inrange4262: + %t355 = extractvalue { ptr, i64, i64 } %t352, 0 + %t356 = getelementptr inbounds %S.ast.Node, ptr %t355, i64 %t351 + %t357 = load %S.ast.Node, ptr %t356 + %t358 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 14 + %t359 = load i64, ptr %a329 + %t360 = load { ptr, i64, i64 }, ptr %t358 + %t361 = extractvalue { ptr, i64, i64 } %t360, 1 + %t362 = icmp uge i64 %t359, %t361 + br i1 %t362, label %range4263, label %inrange4264 +range4263: + call void @finch_panic_index(ptr @.str.2594, i64 1829, i64 %t359, i64 %t361) + unreachable +inrange4264: + %t363 = extractvalue { ptr, i64, i64 } %t360, 0 + %t364 = getelementptr inbounds { ptr, i64, i64 }, ptr %t363, i64 %t359 + %t365 = load { ptr, i64, i64 }, ptr %t364 + store { ptr, i64, i64 } { ptr @.str.2593, i64 10, i64 0 }, ptr %a367 + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a366 + store { ptr, i64, i64 } %t369, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.2595, i64 1, i64 0 }, ptr %a372 + call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) + store { ptr, i64, i64 } %t369, ptr %a373 + call void @finch_str_drop(ptr %a373) + %t374 = load { ptr, i64, i64 }, ptr %a370 + %t375 = call %S.gen.Val @finch.gen.coerce(ptr %t332, %S.gen.Val %t339, %S.ast.Type %t347, %S.ast.Node %t357, { ptr, i64, i64 } %t374) + store { ptr, i64, i64 } %t374, ptr %a376 + call void @finch_str_drop(ptr %a376) + store %S.gen.Val %t375, ptr %a377 + %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1 + %t379 = load ptr, ptr %a1 + %t380 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 13 + %t381 = load i64, ptr %a329 + %t382 = load { ptr, i64, i64 }, ptr %t380 + %t383 = extractvalue { ptr, i64, i64 } %t382, 1 + %t384 = icmp uge i64 %t381, %t383 + br i1 %t384, label %range4265, label %inrange4266 +range4265: + call void @finch_panic_index(ptr @.str.2596, i64 1830, i64 %t381, i64 %t383) + unreachable +inrange4266: + %t385 = extractvalue { ptr, i64, i64 } %t382, 0 + %t386 = getelementptr inbounds %S.ast.Type, ptr %t385, i64 %t381 + %t387 = load %S.ast.Type, ptr %t386 + %t388 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t379, %S.ast.Type %t387) + store { ptr, i64, i64 } %t388, ptr %a390 + store { ptr, i64, i64 } { ptr @.str.2597, i64 1, i64 0 }, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t388, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + %t394 = getelementptr inbounds %S.gen.Val, ptr %a377, i32 0, i32 0 + %t395 = load { ptr, i64, i64 }, ptr %t394 + store { ptr, i64, i64 } %t393, ptr %a397 + store { ptr, i64, i64 } %t395, ptr %a398 + call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) + store { ptr, i64, i64 } %t393, ptr %a399 + call void @finch_str_drop(ptr %a399) + %t400 = load { ptr, i64, i64 }, ptr %a396 + %t401 = load i64, ptr %t378 + %t402 = add i64 %t401, 1 + call void @finch_arr_reserve(ptr %a327, i64 %t402, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t403 = load ptr, ptr %a327 + %t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %t403, i64 %t401 + store { ptr, i64, i64 } %t400, ptr %t404 + store i64 %t402, ptr %t378 + call void @finch.drop.S_gen_Val(ptr %a377) + br label %for.step4255 +for.step4255: + %t405 = load i64, ptr %a329 + %t406 = add i64 %t405, 1 + store i64 %t406, ptr %a329 + br label %for.cond4253 +for.end4256: + %t407 = load ptr, ptr %a1 + %t408 = load %S.gen.FnSig, ptr %a323 + %t409 = load %S.ast.Node, ptr %a2 + %t410 = load { ptr, i64, i64 }, ptr %a327 + %t411 = load { ptr, i64, i64 }, ptr %a5 + %t412 = call %S.gen.Val @finch.gen.emitCall(ptr %t407, %S.gen.FnSig %t408, %S.ast.Node %t409, { ptr, i64, i64 } %t410, { ptr, i64, i64 } %t411) + store %S.gen.Val %t412, ptr %a413 + store i64 0, ptr %a414 + br label %each.cond4267 +each.cond4267: + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 + %t416 = load i64, ptr %t415 + %t417 = load i64, ptr %a414 + %t418 = icmp slt i64 %t417, %t416 + br i1 %t418, label %each.body4268, label %each.end4270 +each.body4268: + %t419 = load ptr, ptr %a159 + %t420 = getelementptr inbounds %S.gen.Val, ptr %t419, i64 %t417 + %t421 = load %S.gen.Val, ptr %t420 + store %S.gen.Val %t421, ptr %a422 + %t423 = load ptr, ptr %a1 + %t424 = load %S.gen.Val, ptr %a422 + call void @finch.gen.release(ptr %t423, %S.gen.Val %t424) + br label %each.step4269 +each.step4269: + %t425 = load i64, ptr %a414 + %t426 = add i64 %t425, 1 + store i64 %t426, ptr %a414 + br label %each.cond4267 +each.end4270: + %t427 = load ptr, ptr %a1 + %t428 = load i64, ptr %a165 + call void @finch.gen.heldEnd(ptr %t427, i64 %t428) + %t429 = load %S.gen.Val, ptr %a413 + call void @finch.drop.arr_str(ptr %a327) + call void @finch.drop.S_gen_FnSig(ptr %a323) + call void @finch.drop.arr_S_gen_Val(ptr %a159) + call void @finch.drop.S_gen_Binds(ptr %a137) + call void @finch.drop.arr_S_ast_Type(ptr %a53) + call void @finch.drop.S_ast_Node(ptr %a42) + call void @finch.drop.S_gen_Template(ptr %a19) + ret %S.gen.Val %t429 +} + +define internal void @finch.copy.S_cimport_CField(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CField, ptr %src + store %S.cimport.CField %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.copy.arr_S_cimport_CField(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond4282 +n.cond4282: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body4283, label %n.end4284 +n.body4283: + %t8 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.cimport.CField, ptr %t2, i64 %t6 + call void @finch.copy.S_cimport_CField(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond4282 +n.end4284: + ret void +} + +define internal void @finch.copy.S_cimport_CStruct(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CStruct, ptr %src + store %S.cimport.CStruct %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_cimport_CField(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 4 + %t7 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal void @finch.gen.resolveCStruct(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca %S.cimport.CStruct, align 16 + %a29 = alloca %S.cimport.CStruct, align 16 + %a31 = alloca %S.cimport.CStruct, align 16 + %a42 = alloca i64, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca i64, align 16 + %a53 = alloca %S.cimport.CField, align 16 + %a60 = alloca %S.ast.Type, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.ast.Type, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4274, label %ok4275 +panic4274: + call void @finch_panic(ptr @.str.2598, i64 1843, ptr @.str.2599) + unreachable +ok4275: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 26 + %t6 = getelementptr inbounds %S.cimport.CImports, ptr %t5, i32 0, i32 3 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic4276, label %ok4277 +panic4276: + call void @finch_panic(ptr @.str.2600, i64 1843, ptr @.str.2601) + unreachable +ok4277: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 16 + %t10 = load i64, ptr %a2 + %t11 = load { ptr, i64, i64 }, ptr %t9 + %t12 = extractvalue { ptr, i64, i64 } %t11, 1 + %t13 = icmp uge i64 %t10, %t12 + br i1 %t13, label %range4278, label %inrange4279 +range4278: + call void @finch_panic_index(ptr @.str.2602, i64 1843, i64 %t10, i64 %t12) + unreachable +inrange4279: + %t14 = extractvalue { ptr, i64, i64 } %t11, 0 + %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i64 %t10 + %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i32 0, i32 1 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = call i64 @finch_map_find(ptr %t6, ptr %a18, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t20 = icmp slt i64 %t19, 0 + br i1 %t20, label %map.missing4280, label %map.found4281 +map.missing4280: + store { ptr, i64, i64 } zeroinitializer, ptr %a21 + store { ptr, i64, i64 } %t17, ptr %a22 + call void @finch_buf_str(ptr %a21, ptr %a22, i32 1) + call void @finch_map_missing(ptr @.str.2603, i64 1843, ptr %a21) + unreachable +map.found4281: + %t23 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 + %t24 = load ptr, ptr %t23 + %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t24, i64 %t19 + %t26 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t25, i32 0, i32 2 + %t27 = load %S.cimport.CStruct, ptr %t26 + store %S.cimport.CStruct %t27, ptr %a28 + call void @finch.copy.S_cimport_CStruct(ptr %a29, ptr %a28) + %t30 = load %S.cimport.CStruct, ptr %a29 + store %S.cimport.CStruct %t30, ptr %a31 + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic4285, label %ok4286 +panic4285: + call void @finch_panic(ptr @.str.2604, i64 1844, ptr @.str.2605) + unreachable +ok4286: + %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 16 + %t35 = load i64, ptr %a2 + %t36 = load { ptr, i64, i64 }, ptr %t34 + %t37 = extractvalue { ptr, i64, i64 } %t36, 1 + %t38 = icmp uge i64 %t35, %t37 + br i1 %t38, label %range4287, label %inrange4288 +range4287: + call void @finch_panic_index(ptr @.str.2606, i64 1844, i64 %t35, i64 %t37) + unreachable +inrange4288: + %t39 = extractvalue { ptr, i64, i64 } %t36, 0 + %t40 = getelementptr inbounds %S.gen.StructDef, ptr %t39, i64 %t35 + %t41 = getelementptr inbounds %S.gen.StructDef, ptr %t40, i32 0, i32 15 + store i64 1, ptr %t41 + store i64 0, ptr %a42 + store { ptr, i64, i64 } zeroinitializer, ptr %a43 + %t44 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 1 + store i64 0, ptr %a45 + br label %each.cond4289 +each.cond4289: + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = load i64, ptr %a45 + %t49 = icmp slt i64 %t48, %t47 + br i1 %t49, label %each.body4290, label %each.end4292 +each.body4290: + %t50 = load ptr, ptr %t44 + %t51 = getelementptr inbounds %S.cimport.CField, ptr %t50, i64 %t48 + %t52 = load %S.cimport.CField, ptr %t51 + store %S.cimport.CField %t52, ptr %a53 + %t54 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 5 + %t55 = load i1, ptr %t54 + br i1 %t55, label %then4293, label %endif4295 +then4293: + br label %each.step4291 +endif4295: + %t56 = load ptr, ptr %a1 + %t57 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 1 + %t58 = load %S.ast.Type, ptr %t57 + %t59 = call %S.ast.Type @finch.gen.resolve(ptr %t56, %S.ast.Type %t58, %S.ast.Node zeroinitializer) + store %S.ast.Type %t59, ptr %a60 + %t61 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.2607, i64 6, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br i1 %t66, label %then4296, label %endif4298 +then4296: + %t67 = load ptr, ptr %a1 + %t68 = load ptr, ptr %a1 + %t69 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 3 + %t70 = load { ptr, i64, i64 }, ptr %t69 + %t71 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 2 + %t72 = load { ptr, i64, i64 }, ptr %t71 + %t73 = call i64 @finch.gen.findStruct(ptr %t68, { ptr, i64, i64 } %t70, { ptr, i64, i64 } %t72) + call void @finch.gen.resolveStruct(ptr %t67, i64 %t73) + br label %endif4298 +endif4298: + %t74 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t75 = load i64, ptr %t74 + %t76 = load i64, ptr %a42 + %t77 = icmp sgt i64 %t75, %t76 + br i1 %t77, label %then4299, label %endif4301 +then4299: + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t79 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t80 = load i64, ptr %t79 + %t81 = load i64, ptr %a42 + %t82 = sub i64 %t80, %t81 + call void @finch_str_from_int(ptr %a83, i64 %t82) + %t84 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.2608, i64 1, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.2609, i64 6, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + %t95 = load i64, ptr %t78 + %t96 = add i64 %t95, 1 + call void @finch_arr_reserve(ptr %a43, i64 %t96, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t97 = load ptr, ptr %a43 + %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i64 %t95 + store { ptr, i64, i64 } %t94, ptr %t98 + store i64 %t96, ptr %t78 + br label %endif4301 +endif4301: + %t99 = load ptr, ptr %a1 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic4302, label %ok4303 +panic4302: + call void @finch_panic(ptr @.str.2610, i64 1858, ptr @.str.2611) + unreachable +ok4303: + %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 16 + %t102 = load i64, ptr %a2 + %t103 = load { ptr, i64, i64 }, ptr %t101 + %t104 = extractvalue { ptr, i64, i64 } %t103, 1 + %t105 = icmp uge i64 %t102, %t104 + br i1 %t105, label %range4304, label %inrange4305 +range4304: + call void @finch_panic_index(ptr @.str.2612, i64 1858, i64 %t102, i64 %t104) + unreachable +inrange4305: + %t106 = extractvalue { ptr, i64, i64 } %t103, 0 + %t107 = getelementptr inbounds %S.gen.StructDef, ptr %t106, i64 %t102 + %t108 = getelementptr inbounds %S.gen.StructDef, ptr %t107, i32 0, i32 11 + %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t108, i32 0, i32 1 + %t110 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 0 + %t111 = load { ptr, i64, i64 }, ptr %t110 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_copy(ptr %a113, ptr %a112) + %t114 = load { ptr, i64, i64 }, ptr %a113 + %t115 = load i64, ptr %t109 + %t116 = add i64 %t115, 1 + call void @finch_arr_reserve(ptr %t108, i64 %t116, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t117 = load ptr, ptr %t108 + %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t117, i64 %t115 + store { ptr, i64, i64 } %t114, ptr %t118 + store i64 %t116, ptr %t109 + %t119 = load ptr, ptr %a1 + %t120 = icmp eq ptr %t119, null + br i1 %t120, label %panic4306, label %ok4307 +panic4306: + call void @finch_panic(ptr @.str.2613, i64 1859, ptr @.str.2614) + unreachable +ok4307: + %t121 = getelementptr inbounds %S.gen.Gen, ptr %t119, i32 0, i32 16 + %t122 = load i64, ptr %a2 + %t123 = load { ptr, i64, i64 }, ptr %t121 + %t124 = extractvalue { ptr, i64, i64 } %t123, 1 + %t125 = icmp uge i64 %t122, %t124 + br i1 %t125, label %range4308, label %inrange4309 +range4308: + call void @finch_panic_index(ptr @.str.2615, i64 1859, i64 %t122, i64 %t124) + unreachable +inrange4309: + %t126 = extractvalue { ptr, i64, i64 } %t123, 0 + %t127 = getelementptr inbounds %S.gen.StructDef, ptr %t126, i64 %t122 + %t128 = getelementptr inbounds %S.gen.StructDef, ptr %t127, i32 0, i32 12 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 + %t130 = load %S.ast.Type, ptr %a60 + store %S.ast.Type %t130, ptr %a131 + call void @finch.copy.S_ast_Type(ptr %a132, ptr %a131) + %t133 = load %S.ast.Type, ptr %a132 + %t134 = load i64, ptr %t129 + %t135 = add i64 %t134, 1 + call void @finch_arr_reserve(ptr %t128, i64 %t135, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t136 = load ptr, ptr %t128 + %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 %t134 + store %S.ast.Type %t133, ptr %t137 + store i64 %t135, ptr %t129 + %t138 = load ptr, ptr %a1 + %t139 = icmp eq ptr %t138, null + br i1 %t139, label %panic4310, label %ok4311 +panic4310: + call void @finch_panic(ptr @.str.2616, i64 1860, ptr @.str.2617) + unreachable +ok4311: + %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 + %t141 = load i64, ptr %a2 + %t142 = load { ptr, i64, i64 }, ptr %t140 + %t143 = extractvalue { ptr, i64, i64 } %t142, 1 + %t144 = icmp uge i64 %t141, %t143 + br i1 %t144, label %range4312, label %inrange4313 +range4312: + call void @finch_panic_index(ptr @.str.2618, i64 1860, i64 %t141, i64 %t143) + unreachable +inrange4313: + %t145 = extractvalue { ptr, i64, i64 } %t142, 0 + %t146 = getelementptr inbounds %S.gen.StructDef, ptr %t145, i64 %t141 + %t147 = getelementptr inbounds %S.gen.StructDef, ptr %t146, i32 0, i32 3 + %t148 = getelementptr inbounds { ptr, i64, i64 }, ptr %t147, i32 0, i32 1 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t150 = load i64, ptr %t149 + %t151 = load i64, ptr %t148 + %t152 = add i64 %t151, 1 + call void @finch_arr_reserve(ptr %t147, i64 %t152, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t153 = load ptr, ptr %t147 + %t154 = getelementptr inbounds i64, ptr %t153, i64 %t151 + store i64 %t150, ptr %t154 + store i64 %t152, ptr %t148 + %t155 = load ptr, ptr %a1 + %t156 = icmp eq ptr %t155, null + br i1 %t156, label %panic4314, label %ok4315 +panic4314: + call void @finch_panic(ptr @.str.2619, i64 1861, ptr @.str.2620) + unreachable +ok4315: + %t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 16 + %t158 = load i64, ptr %a2 + %t159 = load { ptr, i64, i64 }, ptr %t157 + %t160 = extractvalue { ptr, i64, i64 } %t159, 1 + %t161 = icmp uge i64 %t158, %t160 + br i1 %t161, label %range4316, label %inrange4317 +range4316: + call void @finch_panic_index(ptr @.str.2621, i64 1861, i64 %t158, i64 %t160) + unreachable +inrange4317: + %t162 = extractvalue { ptr, i64, i64 } %t159, 0 + %t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i64 %t158 + %t164 = getelementptr inbounds %S.gen.StructDef, ptr %t163, i32 0, i32 4 + %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i32 0, i32 1 + %t166 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t167 = load i64, ptr %t166 + %t168 = load i64, ptr %t165 + %t169 = add i64 %t168, 1 + call void @finch_arr_reserve(ptr %t164, i64 %t169, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t170 = load ptr, ptr %t164 + %t171 = getelementptr inbounds i64, ptr %t170, i64 %t168 + store i64 %t167, ptr %t171 + store i64 %t169, ptr %t165 + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t173 = load ptr, ptr %a1 + %t174 = load %S.ast.Type, ptr %a60 + %t175 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t174) + %t176 = load i64, ptr %t172 + %t177 = add i64 %t176, 1 + call void @finch_arr_reserve(ptr %a43, i64 %t177, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t178 = load ptr, ptr %a43 + %t179 = getelementptr inbounds { ptr, i64, i64 }, ptr %t178, i64 %t176 + store { ptr, i64, i64 } %t175, ptr %t179 + store i64 %t177, ptr %t172 + %t180 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t181 = load i64, ptr %t180 + %t182 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 3 + %t183 = load i64, ptr %t182 + %t184 = add i64 %t181, %t183 + store i64 %t184, ptr %a42 + call void @finch.drop.S_ast_Type(ptr %a60) + br label %each.step4291 +each.step4291: + %t185 = load i64, ptr %a45 + %t186 = add i64 %t185, 1 + store i64 %t186, ptr %a45 + br label %each.cond4289 +each.end4292: + %t187 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 + %t188 = load i64, ptr %t187 + %t189 = load i64, ptr %a42 + %t190 = icmp sgt i64 %t188, %t189 + br i1 %t190, label %then4318, label %endif4320 +then4318: + %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t192 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 + %t193 = load i64, ptr %t192 + %t194 = load i64, ptr %a42 + %t195 = sub i64 %t193, %t194 + call void @finch_str_from_int(ptr %a196, i64 %t195) + %t197 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.2622, i64 1, i64 0 }, ptr %a199 + store { ptr, i64, i64 } %t197, ptr %a200 + call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) + store { ptr, i64, i64 } %t197, ptr %a201 + call void @finch_str_drop(ptr %a201) + %t202 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t202, ptr %a204 + store { ptr, i64, i64 } { ptr @.str.2623, i64 6, i64 0 }, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + %t208 = load i64, ptr %t191 + %t209 = add i64 %t208, 1 + call void @finch_arr_reserve(ptr %a43, i64 %t209, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t210 = load ptr, ptr %a43 + %t211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t210, i64 %t208 + store { ptr, i64, i64 } %t207, ptr %t211 + store i64 %t209, ptr %t191 + br label %endif4320 +endif4320: + %t212 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 + %t213 = load { ptr, i64, i64 }, ptr %t212 + %t214 = load ptr, ptr %a1 + %t215 = icmp eq ptr %t214, null + br i1 %t215, label %panic4321, label %ok4322 +panic4321: + call void @finch_panic(ptr @.str.2624, i64 1868, ptr @.str.2625) + unreachable +ok4322: + %t216 = getelementptr inbounds %S.gen.Gen, ptr %t214, i32 0, i32 16 + %t217 = load i64, ptr %a2 + %t218 = load { ptr, i64, i64 }, ptr %t216 + %t219 = extractvalue { ptr, i64, i64 } %t218, 1 + %t220 = icmp uge i64 %t217, %t219 + br i1 %t220, label %range4323, label %inrange4324 +range4323: + call void @finch_panic_index(ptr @.str.2626, i64 1868, i64 %t217, i64 %t219) + unreachable +inrange4324: + %t221 = extractvalue { ptr, i64, i64 } %t218, 0 + %t222 = getelementptr inbounds %S.gen.StructDef, ptr %t221, i64 %t217 + %t223 = getelementptr inbounds %S.gen.StructDef, ptr %t222, i32 0, i32 8 + store { ptr, i64, i64 } %t213, ptr %a224 + call void @finch_str_copy(ptr %a225, ptr %a224) + %t226 = load { ptr, i64, i64 }, ptr %a225 + %t227 = load { ptr, i64, i64 }, ptr %t223 + store { ptr, i64, i64 } %t226, ptr %t223 + store { ptr, i64, i64 } %t227, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 5 + %t230 = load i1, ptr %t229 + br label %logic.from4325 +logic.from4325: + br i1 %t230, label %logic.rhs4326, label %logic.end4327 +logic.rhs4326: + %t231 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 + %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i32 0, i32 1 + %t233 = load i64, ptr %t232 + %t234 = icmp eq i64 %t233, 0 + br label %logic.rend4328 +logic.rend4328: + br label %logic.end4327 +logic.end4327: + %t235 = phi i1 [ false, %logic.from4325 ], [ %t234, %logic.rend4328 ] + br i1 %t235, label %then4329, label %endif4331 +then4329: + %t236 = load ptr, ptr %a1 + %t237 = icmp eq ptr %t236, null + br i1 %t237, label %panic4332, label %ok4333 +panic4332: + call void @finch_panic(ptr @.str.2628, i64 1870, ptr @.str.2629) + unreachable +ok4333: + %t238 = getelementptr inbounds %S.gen.Gen, ptr %t236, i32 0, i32 16 + %t239 = load i64, ptr %a2 + %t240 = load { ptr, i64, i64 }, ptr %t238 + %t241 = extractvalue { ptr, i64, i64 } %t240, 1 + %t242 = icmp uge i64 %t239, %t241 + br i1 %t242, label %range4334, label %inrange4335 +range4334: + call void @finch_panic_index(ptr @.str.2630, i64 1870, i64 %t239, i64 %t241) + unreachable +inrange4335: + %t243 = extractvalue { ptr, i64, i64 } %t240, 0 + %t244 = getelementptr inbounds %S.gen.StructDef, ptr %t243, i64 %t239 + %t245 = getelementptr inbounds %S.gen.StructDef, ptr %t244, i32 0, i32 8 + %t246 = load { ptr, i64, i64 }, ptr %t245 + store { ptr, i64, i64 } { ptr @.str.2627, i64 49, i64 0 }, ptr %t245 + store { ptr, i64, i64 } %t246, ptr %a247 + call void @finch_str_drop(ptr %a247) + br label %endif4331 +endif4331: + %t248 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 + %t249 = load i64, ptr %t248 + %t250 = load ptr, ptr %a1 + %t251 = icmp eq ptr %t250, null + br i1 %t251, label %panic4336, label %ok4337 +panic4336: + call void @finch_panic(ptr @.str.2631, i64 1872, ptr @.str.2632) + unreachable +ok4337: + %t252 = getelementptr inbounds %S.gen.Gen, ptr %t250, i32 0, i32 16 + %t253 = load i64, ptr %a2 + %t254 = load { ptr, i64, i64 }, ptr %t252 + %t255 = extractvalue { ptr, i64, i64 } %t254, 1 + %t256 = icmp uge i64 %t253, %t255 + br i1 %t256, label %range4338, label %inrange4339 +range4338: + call void @finch_panic_index(ptr @.str.2633, i64 1872, i64 %t253, i64 %t255) + unreachable +inrange4339: + %t257 = extractvalue { ptr, i64, i64 } %t254, 0 + %t258 = getelementptr inbounds %S.gen.StructDef, ptr %t257, i64 %t253 + %t259 = getelementptr inbounds %S.gen.StructDef, ptr %t258, i32 0, i32 9 + store i64 %t249, ptr %t259 + %t260 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 3 + %t261 = load i64, ptr %t260 + %t262 = load ptr, ptr %a1 + %t263 = icmp eq ptr %t262, null + br i1 %t263, label %panic4340, label %ok4341 +panic4340: + call void @finch_panic(ptr @.str.2634, i64 1873, ptr @.str.2635) + unreachable +ok4341: + %t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 16 + %t265 = load i64, ptr %a2 + %t266 = load { ptr, i64, i64 }, ptr %t264 + %t267 = extractvalue { ptr, i64, i64 } %t266, 1 + %t268 = icmp uge i64 %t265, %t267 + br i1 %t268, label %range4342, label %inrange4343 +range4342: + call void @finch_panic_index(ptr @.str.2636, i64 1873, i64 %t265, i64 %t267) + unreachable +inrange4343: + %t269 = extractvalue { ptr, i64, i64 } %t266, 0 + %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i64 %t265 + %t271 = getelementptr inbounds %S.gen.StructDef, ptr %t270, i32 0, i32 10 + store i64 %t261, ptr %t271 + %t272 = load ptr, ptr %a1 + %t273 = icmp eq ptr %t272, null + br i1 %t273, label %panic4344, label %ok4345 +panic4344: + call void @finch_panic(ptr @.str.2637, i64 1874, ptr @.str.2638) + unreachable +ok4345: + %t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 16 + %t275 = load i64, ptr %a2 + %t276 = load { ptr, i64, i64 }, ptr %t274 + %t277 = extractvalue { ptr, i64, i64 } %t276, 1 + %t278 = icmp uge i64 %t275, %t277 + br i1 %t278, label %range4346, label %inrange4347 +range4346: + call void @finch_panic_index(ptr @.str.2639, i64 1874, i64 %t275, i64 %t277) + unreachable +inrange4347: + %t279 = extractvalue { ptr, i64, i64 } %t276, 0 + %t280 = getelementptr inbounds %S.gen.StructDef, ptr %t279, i64 %t275 + %t281 = getelementptr inbounds %S.gen.StructDef, ptr %t280, i32 0, i32 15 + store i64 2, ptr %t281 + %t282 = load ptr, ptr %a1 + %t283 = icmp eq ptr %t282, null + br i1 %t283, label %panic4348, label %ok4349 +panic4348: + call void @finch_panic(ptr @.str.2640, i64 1875, ptr @.str.2641) + unreachable +ok4349: + %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 2 + %t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i32 0, i32 1 + %t286 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 0 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } { ptr @.str.2642, i64 5, i64 0 }, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.2643, i64 10, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2644, i64 2, i64 0 }, ptr %a298 + call void @finch_str_join(ptr %a299, ptr %a43, ptr %a298) + %t300 = load { ptr, i64, i64 }, ptr %a299 + store { ptr, i64, i64 } %t296, ptr %a302 + store { ptr, i64, i64 } %t300, ptr %a303 + call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) + store { ptr, i64, i64 } %t296, ptr %a304 + call void @finch_str_drop(ptr %a304) + store { ptr, i64, i64 } %t300, ptr %a305 + call void @finch_str_drop(ptr %a305) + %t306 = load { ptr, i64, i64 }, ptr %a301 + store { ptr, i64, i64 } %t306, ptr %a308 + store { ptr, i64, i64 } { ptr @.str.2645, i64 2, i64 0 }, ptr %a309 + call void @finch_str_concat(ptr %a307, ptr %a308, ptr %a309) + store { ptr, i64, i64 } %t306, ptr %a310 + call void @finch_str_drop(ptr %a310) + %t311 = load { ptr, i64, i64 }, ptr %a307 + %t312 = load i64, ptr %t285 + %t313 = add i64 %t312, 1 + call void @finch_arr_reserve(ptr %t284, i64 %t313, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t314 = load ptr, ptr %t284 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 %t312 + store { ptr, i64, i64 } %t311, ptr %t315 + store i64 %t313, ptr %t285 + call void @finch.drop.arr_str(ptr %a43) + call void @finch.drop.S_cimport_CStruct(ptr %a31) + ret void +} + +define internal void @finch.gen.resolveStruct(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4350, label %ok4351 +panic4350: + call void @finch_panic(ptr @.str.2646, i64 1879, ptr @.str.2647) + unreachable +ok4351: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 + %t6 = load i64, ptr %a2 + %t7 = load { ptr, i64, i64 }, ptr %t5 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 %t6, %t8 + br i1 %t9, label %range4352, label %inrange4353 +range4352: + call void @finch_panic_index(ptr @.str.2648, i64 1879, i64 %t6, i64 %t8) + unreachable +inrange4353: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.gen.StructDef, ptr %t10, i64 %t6 + %t12 = getelementptr inbounds %S.gen.StructDef, ptr %t11, i32 0, i32 15 + %t13 = load i64, ptr %t12 + %t14 = icmp eq i64 %t13, 2 + br i1 %t14, label %then4354, label %endif4356 +then4354: + ret void +endif4356: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic4357, label %ok4358 +panic4357: + call void @finch_panic(ptr @.str.2649, i64 1882, ptr @.str.2650) + unreachable +ok4358: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 16 + %t18 = load i64, ptr %a2 + %t19 = load { ptr, i64, i64 }, ptr %t17 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range4359, label %inrange4360 +range4359: + call void @finch_panic_index(ptr @.str.2651, i64 1882, i64 %t18, i64 %t20) + unreachable +inrange4360: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i64 %t18 + %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i32 0, i32 2 + %t25 = load i1, ptr %t24 + br i1 %t25, label %then4361, label %endif4363 +then4361: + %t26 = load ptr, ptr %a1 + %t27 = load i64, ptr %a2 + call void @finch.gen.resolveCStruct(ptr %t26, i64 %t27) + ret void +endif4363: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic4364, label %ok4365 +panic4364: + call void @finch_panic(ptr @.str.2652, i64 1886, ptr @.str.2653) + unreachable +ok4365: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 + %t31 = load i64, ptr %a2 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range4366, label %inrange4367 +range4366: + call void @finch_panic_index(ptr @.str.2654, i64 1886, i64 %t31, i64 %t33) + unreachable +inrange4367: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 5 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 + %t39 = load i64, ptr %t38 + %t40 = icmp eq i64 %t39, 0 + br i1 %t40, label %then4368, label %endif4370 +then4368: + %t41 = load ptr, ptr %a1 + %t42 = load i64, ptr %a2 + call void @finch.gen.resolveStructBody(ptr %t41, i64 %t42) + ret void +endif4370: + %t43 = load ptr, ptr %a1 + %t44 = icmp eq ptr %t43, null + br i1 %t44, label %panic4371, label %ok4372 +panic4371: + call void @finch_panic(ptr @.str.2655, i64 1891, ptr @.str.2656) + unreachable +ok4372: + %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 18 + %t46 = load { ptr, i64, i64 }, ptr %t45 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch.copy.arr_str(ptr %a48, ptr %a47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t49, ptr %a50 + %t51 = load ptr, ptr %a1 + %t52 = icmp eq ptr %t51, null + br i1 %t52, label %panic4373, label %ok4374 +panic4373: + call void @finch_panic(ptr @.str.2657, i64 1892, ptr @.str.2658) + unreachable +ok4374: + %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 19 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t57, ptr %a58 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic4375, label %ok4376 +panic4375: + call void @finch_panic(ptr @.str.2659, i64 1893, ptr @.str.2660) + unreachable +ok4376: + %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 20 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t65, ptr %a66 + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic4377, label %ok4378 +panic4377: + call void @finch_panic(ptr @.str.2661, i64 1894, ptr @.str.2662) + unreachable +ok4378: + %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 16 + %t70 = load i64, ptr %a2 + %t71 = load { ptr, i64, i64 }, ptr %t69 + %t72 = extractvalue { ptr, i64, i64 } %t71, 1 + %t73 = icmp uge i64 %t70, %t72 + br i1 %t73, label %range4379, label %inrange4380 +range4379: + call void @finch_panic_index(ptr @.str.2663, i64 1894, i64 %t70, i64 %t72) + unreachable +inrange4380: + %t74 = extractvalue { ptr, i64, i64 } %t71, 0 + %t75 = getelementptr inbounds %S.gen.StructDef, ptr %t74, i64 %t70 + %t76 = getelementptr inbounds %S.gen.StructDef, ptr %t75, i32 0, i32 6 + %t77 = load { ptr, i64, i64 }, ptr %t76 + %t78 = load ptr, ptr %a1 + %t79 = icmp eq ptr %t78, null + br i1 %t79, label %panic4381, label %ok4382 +panic4381: + call void @finch_panic(ptr @.str.2664, i64 1894, ptr @.str.2665) + unreachable +ok4382: + %t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 18 + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch.copy.arr_str(ptr %a82, ptr %a81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } %t83, ptr %t80 + store { ptr, i64, i64 } %t84, ptr %a85 + call void @finch.drop.arr_str(ptr %a85) + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic4383, label %ok4384 +panic4383: + call void @finch_panic(ptr @.str.2666, i64 1895, ptr @.str.2667) + unreachable +ok4384: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 16 + %t89 = load i64, ptr %a2 + %t90 = load { ptr, i64, i64 }, ptr %t88 + %t91 = extractvalue { ptr, i64, i64 } %t90, 1 + %t92 = icmp uge i64 %t89, %t91 + br i1 %t92, label %range4385, label %inrange4386 +range4385: + call void @finch_panic_index(ptr @.str.2668, i64 1895, i64 %t89, i64 %t91) + unreachable +inrange4386: + %t93 = extractvalue { ptr, i64, i64 } %t90, 0 + %t94 = getelementptr inbounds %S.gen.StructDef, ptr %t93, i64 %t89 + %t95 = getelementptr inbounds %S.gen.StructDef, ptr %t94, i32 0, i32 7 + %t96 = load { ptr, i64, i64 }, ptr %t95 + %t97 = load ptr, ptr %a1 + %t98 = icmp eq ptr %t97, null + br i1 %t98, label %panic4387, label %ok4388 +panic4387: + call void @finch_panic(ptr @.str.2669, i64 1895, ptr @.str.2670) + unreachable +ok4388: + %t99 = getelementptr inbounds %S.gen.Gen, ptr %t97, i32 0, i32 19 + store { ptr, i64, i64 } %t96, ptr %a100 + call void @finch.copy.arr_S_ast_Type(ptr %a101, ptr %a100) + %t102 = load { ptr, i64, i64 }, ptr %a101 + %t103 = load { ptr, i64, i64 }, ptr %t99 + store { ptr, i64, i64 } %t102, ptr %t99 + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch.drop.arr_S_ast_Type(ptr %a104) + %t105 = load ptr, ptr %a1 + %t106 = icmp eq ptr %t105, null + br i1 %t106, label %panic4389, label %ok4390 +panic4389: + call void @finch_panic(ptr @.str.2672, i64 1896, ptr @.str.2673) + unreachable +ok4390: + %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 16 + %t108 = load i64, ptr %a2 + %t109 = load { ptr, i64, i64 }, ptr %t107 + %t110 = extractvalue { ptr, i64, i64 } %t109, 1 + %t111 = icmp uge i64 %t108, %t110 + br i1 %t111, label %range4391, label %inrange4392 +range4391: + call void @finch_panic_index(ptr @.str.2674, i64 1896, i64 %t108, i64 %t110) + unreachable +inrange4392: + %t112 = extractvalue { ptr, i64, i64 } %t109, 0 + %t113 = getelementptr inbounds %S.gen.StructDef, ptr %t112, i64 %t108 + %t114 = getelementptr inbounds %S.gen.StructDef, ptr %t113, i32 0, i32 1 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } { ptr @.str.2671, i64 17, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.2675, i64 1, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = load ptr, ptr %a1 + %t126 = icmp eq ptr %t125, null + br i1 %t126, label %panic4393, label %ok4394 +panic4393: + call void @finch_panic(ptr @.str.2676, i64 1896, ptr @.str.2677) + unreachable +ok4394: + %t127 = getelementptr inbounds %S.gen.Gen, ptr %t125, i32 0, i32 20 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t124, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load ptr, ptr %a1 + %t131 = load i64, ptr %a2 + call void @finch.gen.resolveStructBody(ptr %t130, i64 %t131) + %t132 = load { ptr, i64, i64 }, ptr %a50 + %t133 = load ptr, ptr %a1 + %t134 = icmp eq ptr %t133, null + br i1 %t134, label %panic4395, label %ok4396 +panic4395: + call void @finch_panic(ptr @.str.2678, i64 1898, ptr @.str.2679) + unreachable +ok4396: + %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 18 + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch.copy.arr_str(ptr %a137, ptr %a136) + %t138 = load { ptr, i64, i64 }, ptr %a137 + %t139 = load { ptr, i64, i64 }, ptr %t135 + store { ptr, i64, i64 } %t138, ptr %t135 + store { ptr, i64, i64 } %t139, ptr %a140 + call void @finch.drop.arr_str(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a58 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic4397, label %ok4398 +panic4397: + call void @finch_panic(ptr @.str.2680, i64 1899, ptr @.str.2681) + unreachable +ok4398: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 19 + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch.copy.arr_S_ast_Type(ptr %a146, ptr %a145) + %t147 = load { ptr, i64, i64 }, ptr %a146 + %t148 = load { ptr, i64, i64 }, ptr %t144 + store { ptr, i64, i64 } %t147, ptr %t144 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch.drop.arr_S_ast_Type(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a66 + %t151 = load ptr, ptr %a1 + %t152 = icmp eq ptr %t151, null + br i1 %t152, label %panic4399, label %ok4400 +panic4399: + call void @finch_panic(ptr @.str.2682, i64 1900, ptr @.str.2683) + unreachable +ok4400: + %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 20 + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_copy(ptr %a155, ptr %a154) + %t156 = load { ptr, i64, i64 }, ptr %a155 + %t157 = load { ptr, i64, i64 }, ptr %t153 + store { ptr, i64, i64 } %t156, ptr %t153 + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_drop(ptr %a158) + call void @finch_str_drop(ptr %a66) + call void @finch.drop.arr_S_ast_Type(ptr %a58) + call void @finch.drop.arr_str(ptr %a50) + ret void +} + +define internal void @finch.gen.resolveStructBody(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a40 = alloca %S.ast.Node, align 16 + %a41 = alloca %S.ast.Node, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca i1, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca i64, align 16 + %a142 = alloca %S.ast.Node, align 16 + %a148 = alloca %S.ast.Type, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca %S.ast.Type, align 16 + %a222 = alloca %S.ast.Type, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4401, label %ok4402 +panic4401: + call void @finch_panic(ptr @.str.2684, i64 1904, ptr @.str.2685) + unreachable +ok4402: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4403, label %ok4404 +panic4403: + call void @finch_panic(ptr @.str.2686, i64 1904, ptr @.str.2687) + unreachable +ok4404: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range4405, label %inrange4406 +range4405: + call void @finch_panic_index(ptr @.str.2688, i64 1904, i64 %t9, i64 %t11) + unreachable +inrange4406: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 + %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i32 0, i32 13 + %t16 = load i64, ptr %t15 + %t17 = load { ptr, i64, i64 }, ptr %t5 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range4407, label %inrange4408 +range4407: + call void @finch_panic_index(ptr @.str.2689, i64 1904, i64 %t16, i64 %t18) + unreachable +inrange4408: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.ast.Program, ptr %t20, i64 %t16 + %t22 = getelementptr inbounds %S.ast.Program, ptr %t21, i32 0, i32 6 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic4409, label %ok4410 +panic4409: + call void @finch_panic(ptr @.str.2690, i64 1904, ptr @.str.2691) + unreachable +ok4410: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 16 + %t26 = load i64, ptr %a2 + %t27 = load { ptr, i64, i64 }, ptr %t25 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 %t26, %t28 + br i1 %t29, label %range4411, label %inrange4412 +range4411: + call void @finch_panic_index(ptr @.str.2692, i64 1904, i64 %t26, i64 %t28) + unreachable +inrange4412: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds %S.gen.StructDef, ptr %t30, i64 %t26 + %t32 = getelementptr inbounds %S.gen.StructDef, ptr %t31, i32 0, i32 14 + %t33 = load i64, ptr %t32 + %t34 = load { ptr, i64, i64 }, ptr %t22 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 %t33, %t35 + br i1 %t36, label %range4413, label %inrange4414 +range4413: + call void @finch_panic_index(ptr @.str.2693, i64 1904, i64 %t33, i64 %t35) + unreachable +inrange4414: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 + %t39 = load %S.ast.Node, ptr %t38 + store %S.ast.Node %t39, ptr %a40 + call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) + %t42 = load %S.ast.Node, ptr %a41 + store %S.ast.Node %t42, ptr %a43 + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic4415, label %ok4416 +panic4415: + call void @finch_panic(ptr @.str.2694, i64 1905, ptr @.str.2695) + unreachable +ok4416: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 16 + %t47 = load i64, ptr %a2 + %t48 = load { ptr, i64, i64 }, ptr %t46 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range4417, label %inrange4418 +range4417: + call void @finch_panic_index(ptr @.str.2696, i64 1905, i64 %t47, i64 %t49) + unreachable +inrange4418: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds %S.gen.StructDef, ptr %t51, i64 %t47 + %t53 = getelementptr inbounds %S.gen.StructDef, ptr %t52, i32 0, i32 15 + %t54 = load i64, ptr %t53 + %t55 = icmp eq i64 %t54, 1 + br i1 %t55, label %then4419, label %endif4421 +then4419: + %t56 = load ptr, ptr %a1 + %t57 = load %S.ast.Node, ptr %a43 + %t58 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } { ptr @.str.2697, i64 11, i64 0 }, ptr %a61 + store { ptr, i64, i64 } %t59, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t63, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.2698, i64 26, i64 0 }, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t63, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a64 + %t69 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t70 = load { ptr, i64, i64 }, ptr %t69 + store { ptr, i64, i64 } %t68, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t68, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t75, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.2699, i64 7, i64 0 }, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t80, ptr %a84 + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t80, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t87, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.2700, i64 15, i64 0 }, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t87, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t92) + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + br label %endif4421 +endif4421: + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic4422, label %ok4423 +panic4422: + call void @finch_panic(ptr @.str.2701, i64 1908, ptr @.str.2702) + unreachable +ok4423: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 16 + %t97 = load i64, ptr %a2 + %t98 = load { ptr, i64, i64 }, ptr %t96 + %t99 = extractvalue { ptr, i64, i64 } %t98, 1 + %t100 = icmp uge i64 %t97, %t99 + br i1 %t100, label %range4424, label %inrange4425 +range4424: + call void @finch_panic_index(ptr @.str.2703, i64 1908, i64 %t97, i64 %t99) + unreachable +inrange4425: + %t101 = extractvalue { ptr, i64, i64 } %t98, 0 + %t102 = getelementptr inbounds %S.gen.StructDef, ptr %t101, i64 %t97 + %t103 = getelementptr inbounds %S.gen.StructDef, ptr %t102, i32 0, i32 15 + store i64 1, ptr %t103 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic4426, label %ok4427 +panic4426: + call void @finch_panic(ptr @.str.2704, i64 1909, ptr @.str.2705) + unreachable +ok4427: + %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 14 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_copy(ptr %a109, ptr %a108) + %t110 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t110, ptr %a111 + %t112 = load ptr, ptr %a1 + %t113 = icmp eq ptr %t112, null + br i1 %t113, label %panic4428, label %ok4429 +panic4428: + call void @finch_panic(ptr @.str.2706, i64 1910, ptr @.str.2707) + unreachable +ok4429: + %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 16 + %t115 = load i64, ptr %a2 + %t116 = load { ptr, i64, i64 }, ptr %t114 + %t117 = extractvalue { ptr, i64, i64 } %t116, 1 + %t118 = icmp uge i64 %t115, %t117 + br i1 %t118, label %range4430, label %inrange4431 +range4430: + call void @finch_panic_index(ptr @.str.2708, i64 1910, i64 %t115, i64 %t117) + unreachable +inrange4431: + %t119 = extractvalue { ptr, i64, i64 } %t116, 0 + %t120 = getelementptr inbounds %S.gen.StructDef, ptr %t119, i64 %t115 + %t121 = getelementptr inbounds %S.gen.StructDef, ptr %t120, i32 0, i32 0 + %t122 = load { ptr, i64, i64 }, ptr %t121 + %t123 = load ptr, ptr %a1 + %t124 = icmp eq ptr %t123, null + br i1 %t124, label %panic4432, label %ok4433 +panic4432: + call void @finch_panic(ptr @.str.2709, i64 1910, ptr @.str.2710) + unreachable +ok4433: + %t125 = getelementptr inbounds %S.gen.Gen, ptr %t123, i32 0, i32 14 + store { ptr, i64, i64 } %t122, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + %t129 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t128, ptr %t125 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + store i1 false, ptr %a131 + store { ptr, i64, i64 } zeroinitializer, ptr %a132 + %t133 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 9 + store i64 0, ptr %a134 + br label %each.cond4434 +each.cond4434: + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = load i64, ptr %a134 + %t138 = icmp slt i64 %t137, %t136 + br i1 %t138, label %each.body4435, label %each.end4437 +each.body4435: + %t139 = load ptr, ptr %t133 + %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 %t137 + %t141 = load %S.ast.Node, ptr %t140 + store %S.ast.Node %t141, ptr %a142 + %t143 = load ptr, ptr %a1 + %t144 = getelementptr inbounds %S.ast.Node, ptr %a142, i32 0, i32 5 + %t145 = load %S.ast.Type, ptr %t144 + %t146 = load %S.ast.Node, ptr %a142 + %t147 = call %S.ast.Type @finch.gen.resolve(ptr %t143, %S.ast.Type %t145, %S.ast.Node %t146) + store %S.ast.Type %t147, ptr %a148 + %t149 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 0 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.2711, i64 6, i64 0 }, ptr %a152 + %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) + %t154 = icmp ne i32 %t153, 0 + br i1 %t154, label %then4438, label %endif4440 +then4438: + %t155 = load ptr, ptr %a1 + %t156 = load ptr, ptr %a1 + %t157 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 3 + %t158 = load { ptr, i64, i64 }, ptr %t157 + %t159 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 2 + %t160 = load { ptr, i64, i64 }, ptr %t159 + %t161 = call i64 @finch.gen.findStruct(ptr %t156, { ptr, i64, i64 } %t158, { ptr, i64, i64 } %t160) + call void @finch.gen.resolveStruct(ptr %t155, i64 %t161) + br label %endif4440 +endif4440: + %t162 = load ptr, ptr %a1 + %t163 = icmp eq ptr %t162, null + br i1 %t163, label %panic4441, label %ok4442 +panic4441: + call void @finch_panic(ptr @.str.2712, i64 1918, ptr @.str.2713) + unreachable +ok4442: + %t164 = getelementptr inbounds %S.gen.Gen, ptr %t162, i32 0, i32 16 + %t165 = load i64, ptr %a2 + %t166 = load { ptr, i64, i64 }, ptr %t164 + %t167 = extractvalue { ptr, i64, i64 } %t166, 1 + %t168 = icmp uge i64 %t165, %t167 + br i1 %t168, label %range4443, label %inrange4444 +range4443: + call void @finch_panic_index(ptr @.str.2714, i64 1918, i64 %t165, i64 %t167) + unreachable +inrange4444: + %t169 = extractvalue { ptr, i64, i64 } %t166, 0 + %t170 = getelementptr inbounds %S.gen.StructDef, ptr %t169, i64 %t165 + %t171 = getelementptr inbounds %S.gen.StructDef, ptr %t170, i32 0, i32 3 + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 + %t173 = load ptr, ptr %a1 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic4445, label %ok4446 +panic4445: + call void @finch_panic(ptr @.str.2715, i64 1918, ptr @.str.2716) + unreachable +ok4446: + %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 16 + %t176 = load i64, ptr %a2 + %t177 = load { ptr, i64, i64 }, ptr %t175 + %t178 = extractvalue { ptr, i64, i64 } %t177, 1 + %t179 = icmp uge i64 %t176, %t178 + br i1 %t179, label %range4447, label %inrange4448 +range4447: + call void @finch_panic_index(ptr @.str.2717, i64 1918, i64 %t176, i64 %t178) + unreachable +inrange4448: + %t180 = extractvalue { ptr, i64, i64 } %t177, 0 + %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t176 + %t182 = getelementptr inbounds %S.gen.StructDef, ptr %t181, i32 0, i32 11 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 + %t184 = load i64, ptr %t183 + %t185 = load i64, ptr %t172 + %t186 = add i64 %t185, 1 + call void @finch_arr_reserve(ptr %t171, i64 %t186, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t187 = load ptr, ptr %t171 + %t188 = getelementptr inbounds i64, ptr %t187, i64 %t185 + store i64 %t184, ptr %t188 + store i64 %t186, ptr %t172 + %t189 = load ptr, ptr %a1 + %t190 = icmp eq ptr %t189, null + br i1 %t190, label %panic4449, label %ok4450 +panic4449: + call void @finch_panic(ptr @.str.2718, i64 1919, ptr @.str.2719) + unreachable +ok4450: + %t191 = getelementptr inbounds %S.gen.Gen, ptr %t189, i32 0, i32 16 + %t192 = load i64, ptr %a2 + %t193 = load { ptr, i64, i64 }, ptr %t191 + %t194 = extractvalue { ptr, i64, i64 } %t193, 1 + %t195 = icmp uge i64 %t192, %t194 + br i1 %t195, label %range4451, label %inrange4452 +range4451: + call void @finch_panic_index(ptr @.str.2720, i64 1919, i64 %t192, i64 %t194) + unreachable +inrange4452: + %t196 = extractvalue { ptr, i64, i64 } %t193, 0 + %t197 = getelementptr inbounds %S.gen.StructDef, ptr %t196, i64 %t192 + %t198 = getelementptr inbounds %S.gen.StructDef, ptr %t197, i32 0, i32 11 + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t198, i32 0, i32 1 + %t200 = getelementptr inbounds %S.ast.Node, ptr %a142, i32 0, i32 1 + %t201 = load { ptr, i64, i64 }, ptr %t200 + store { ptr, i64, i64 } %t201, ptr %a202 + call void @finch_str_copy(ptr %a203, ptr %a202) + %t204 = load { ptr, i64, i64 }, ptr %a203 + %t205 = load i64, ptr %t199 + %t206 = add i64 %t205, 1 + call void @finch_arr_reserve(ptr %t198, i64 %t206, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t207 = load ptr, ptr %t198 + %t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %t207, i64 %t205 + store { ptr, i64, i64 } %t204, ptr %t208 + store i64 %t206, ptr %t199 + %t209 = load ptr, ptr %a1 + %t210 = icmp eq ptr %t209, null + br i1 %t210, label %panic4453, label %ok4454 +panic4453: + call void @finch_panic(ptr @.str.2721, i64 1920, ptr @.str.2722) + unreachable +ok4454: + %t211 = getelementptr inbounds %S.gen.Gen, ptr %t209, i32 0, i32 16 + %t212 = load i64, ptr %a2 + %t213 = load { ptr, i64, i64 }, ptr %t211 + %t214 = extractvalue { ptr, i64, i64 } %t213, 1 + %t215 = icmp uge i64 %t212, %t214 + br i1 %t215, label %range4455, label %inrange4456 +range4455: + call void @finch_panic_index(ptr @.str.2723, i64 1920, i64 %t212, i64 %t214) + unreachable +inrange4456: + %t216 = extractvalue { ptr, i64, i64 } %t213, 0 + %t217 = getelementptr inbounds %S.gen.StructDef, ptr %t216, i64 %t212 + %t218 = getelementptr inbounds %S.gen.StructDef, ptr %t217, i32 0, i32 12 + %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i32 0, i32 1 + %t220 = load %S.ast.Type, ptr %a148 + store %S.ast.Type %t220, ptr %a221 + call void @finch.copy.S_ast_Type(ptr %a222, ptr %a221) + %t223 = load %S.ast.Type, ptr %a222 + %t224 = load i64, ptr %t219 + %t225 = add i64 %t224, 1 + call void @finch_arr_reserve(ptr %t218, i64 %t225, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t226 = load ptr, ptr %t218 + %t227 = getelementptr inbounds %S.ast.Type, ptr %t226, i64 %t224 + store %S.ast.Type %t223, ptr %t227 + store i64 %t225, ptr %t219 + %t228 = load ptr, ptr %a1 + %t229 = load %S.ast.Type, ptr %a148 + %t230 = call i1 @finch.gen.owning(ptr %t228, %S.ast.Type %t229) + br i1 %t230, label %then4457, label %endif4459 +then4457: + store i1 true, ptr %a131 + br label %endif4459 +endif4459: + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + %t232 = load ptr, ptr %a1 + %t233 = load %S.ast.Type, ptr %a148 + %t234 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t232, %S.ast.Type %t233) + %t235 = load i64, ptr %t231 + %t236 = add i64 %t235, 1 + call void @finch_arr_reserve(ptr %a132, i64 %t236, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t237 = load ptr, ptr %a132 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t235 + store { ptr, i64, i64 } %t234, ptr %t238 + store i64 %t236, ptr %t231 + call void @finch.drop.S_ast_Type(ptr %a148) + br label %each.step4436 +each.step4436: + %t239 = load i64, ptr %a134 + %t240 = add i64 %t239, 1 + store i64 %t240, ptr %a134 + br label %each.cond4434 +each.end4437: + %t241 = load i1, ptr %a131 + %t242 = load ptr, ptr %a1 + %t243 = icmp eq ptr %t242, null + br i1 %t243, label %panic4460, label %ok4461 +panic4460: + call void @finch_panic(ptr @.str.2724, i64 1926, ptr @.str.2725) + unreachable +ok4461: + %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 16 + %t245 = load i64, ptr %a2 + %t246 = load { ptr, i64, i64 }, ptr %t244 + %t247 = extractvalue { ptr, i64, i64 } %t246, 1 + %t248 = icmp uge i64 %t245, %t247 + br i1 %t248, label %range4462, label %inrange4463 +range4462: + call void @finch_panic_index(ptr @.str.2726, i64 1926, i64 %t245, i64 %t247) + unreachable +inrange4463: + %t249 = extractvalue { ptr, i64, i64 } %t246, 0 + %t250 = getelementptr inbounds %S.gen.StructDef, ptr %t249, i64 %t245 + %t251 = getelementptr inbounds %S.gen.StructDef, ptr %t250, i32 0, i32 16 + store i1 %t241, ptr %t251 + %t252 = load { ptr, i64, i64 }, ptr %a111 + %t253 = load ptr, ptr %a1 + %t254 = icmp eq ptr %t253, null + br i1 %t254, label %panic4464, label %ok4465 +panic4464: + call void @finch_panic(ptr @.str.2727, i64 1927, ptr @.str.2728) + unreachable +ok4465: + %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 14 + store { ptr, i64, i64 } %t252, ptr %a256 + call void @finch_str_copy(ptr %a257, ptr %a256) + %t258 = load { ptr, i64, i64 }, ptr %a257 + %t259 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t258, ptr %t255 + store { ptr, i64, i64 } %t259, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load ptr, ptr %a1 + %t262 = icmp eq ptr %t261, null + br i1 %t262, label %panic4466, label %ok4467 +panic4466: + call void @finch_panic(ptr @.str.2729, i64 1928, ptr @.str.2730) + unreachable +ok4467: + %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 16 + %t264 = load i64, ptr %a2 + %t265 = load { ptr, i64, i64 }, ptr %t263 + %t266 = extractvalue { ptr, i64, i64 } %t265, 1 + %t267 = icmp uge i64 %t264, %t266 + br i1 %t267, label %range4468, label %inrange4469 +range4468: + call void @finch_panic_index(ptr @.str.2731, i64 1928, i64 %t264, i64 %t266) + unreachable +inrange4469: + %t268 = extractvalue { ptr, i64, i64 } %t265, 0 + %t269 = getelementptr inbounds %S.gen.StructDef, ptr %t268, i64 %t264 + %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i32 0, i32 15 + store i64 2, ptr %t270 + %t271 = load ptr, ptr %a1 + %t272 = icmp eq ptr %t271, null + br i1 %t272, label %panic4470, label %ok4471 +panic4470: + call void @finch_panic(ptr @.str.2732, i64 1929, ptr @.str.2733) + unreachable +ok4471: + %t273 = getelementptr inbounds %S.gen.Gen, ptr %t271, i32 0, i32 2 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 + %t275 = load ptr, ptr %a1 + %t276 = icmp eq ptr %t275, null + br i1 %t276, label %panic4472, label %ok4473 +panic4472: + call void @finch_panic(ptr @.str.2735, i64 1929, ptr @.str.2736) + unreachable +ok4473: + %t277 = getelementptr inbounds %S.gen.Gen, ptr %t275, i32 0, i32 16 + %t278 = load i64, ptr %a2 + %t279 = load { ptr, i64, i64 }, ptr %t277 + %t280 = extractvalue { ptr, i64, i64 } %t279, 1 + %t281 = icmp uge i64 %t278, %t280 + br i1 %t281, label %range4474, label %inrange4475 +range4474: + call void @finch_panic_index(ptr @.str.2737, i64 1929, i64 %t278, i64 %t280) + unreachable +inrange4475: + %t282 = extractvalue { ptr, i64, i64 } %t279, 0 + %t283 = getelementptr inbounds %S.gen.StructDef, ptr %t282, i64 %t278 + %t284 = getelementptr inbounds %S.gen.StructDef, ptr %t283, i32 0, i32 0 + %t285 = load { ptr, i64, i64 }, ptr %t284 + %t286 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t285) + store { ptr, i64, i64 } { ptr @.str.2734, i64 3, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t286, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.2738, i64 1, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load ptr, ptr %a1 + %t298 = icmp eq ptr %t297, null + br i1 %t298, label %panic4476, label %ok4477 +panic4476: + call void @finch_panic(ptr @.str.2739, i64 1929, ptr @.str.2740) + unreachable +ok4477: + %t299 = getelementptr inbounds %S.gen.Gen, ptr %t297, i32 0, i32 16 + %t300 = load i64, ptr %a2 + %t301 = load { ptr, i64, i64 }, ptr %t299 + %t302 = extractvalue { ptr, i64, i64 } %t301, 1 + %t303 = icmp uge i64 %t300, %t302 + br i1 %t303, label %range4478, label %inrange4479 +range4478: + call void @finch_panic_index(ptr @.str.2741, i64 1929, i64 %t300, i64 %t302) + unreachable +inrange4479: + %t304 = extractvalue { ptr, i64, i64 } %t301, 0 + %t305 = getelementptr inbounds %S.gen.StructDef, ptr %t304, i64 %t300 + %t306 = getelementptr inbounds %S.gen.StructDef, ptr %t305, i32 0, i32 1 + %t307 = load { ptr, i64, i64 }, ptr %t306 + %t308 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t307) + store { ptr, i64, i64 } %t296, ptr %a310 + store { ptr, i64, i64 } %t308, ptr %a311 + call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311) + store { ptr, i64, i64 } %t296, ptr %a312 + call void @finch_str_drop(ptr %a312) + store { ptr, i64, i64 } %t308, ptr %a313 + call void @finch_str_drop(ptr %a313) + %t314 = load { ptr, i64, i64 }, ptr %a309 + store { ptr, i64, i64 } %t314, ptr %a316 + store { ptr, i64, i64 } { ptr @.str.2742, i64 10, i64 0 }, ptr %a317 + call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) + store { ptr, i64, i64 } %t314, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a315 + %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2743, i64 2, i64 0 }, ptr %a321 + call void @finch_str_join(ptr %a322, ptr %a132, ptr %a321) + %t323 = load { ptr, i64, i64 }, ptr %a322 + store { ptr, i64, i64 } %t319, ptr %a325 + store { ptr, i64, i64 } %t323, ptr %a326 + call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) + store { ptr, i64, i64 } %t319, ptr %a327 + call void @finch_str_drop(ptr %a327) + store { ptr, i64, i64 } %t323, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t329, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.2744, i64 2, i64 0 }, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + store { ptr, i64, i64 } %t329, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = load { ptr, i64, i64 }, ptr %a330 + %t335 = load i64, ptr %t274 + %t336 = add i64 %t335, 1 + call void @finch_arr_reserve(ptr %t273, i64 %t336, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t337 = load ptr, ptr %t273 + %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t335 + store { ptr, i64, i64 } %t334, ptr %t338 + store i64 %t336, ptr %t274 + call void @finch.drop.arr_str(ptr %a132) + call void @finch_str_drop(ptr %a111) + call void @finch.drop.S_ast_Node(ptr %a43) + ret void +} + +define internal i64 @finch.gen.md(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4480, label %ok4481 +panic4480: + call void @finch_panic(ptr @.str.2745, i64 1938, ptr @.str.2746) + unreachable +ok4481: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 33 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t7, ptr %a8 + call void @finch_str_copy(ptr %a9, ptr %a8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + %t11 = load i64, ptr %t6 + %t12 = add i64 %t11, 1 + call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t13 = load ptr, ptr %t5 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 %t11 + store { ptr, i64, i64 } %t10, ptr %t14 + store i64 %t12, ptr %t6 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic4482, label %ok4483 +panic4482: + call void @finch_panic(ptr @.str.2747, i64 1939, ptr @.str.2748) + unreachable +ok4483: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 33 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = sub i64 %t19, 1 + ret i64 %t20 +} + +define internal { ptr, i64, i64 } @finch.gen.mdRef(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + %t2 = load i64, ptr %a1 + %t3 = icmp slt i64 %t2, 0 + br i1 %t3, label %then4484, label %endif4486 +then4484: + ret { ptr, i64, i64 } { ptr @.str.2749, i64 4, i64 0 } +endif4486: + %t4 = load i64, ptr %a1 + call void @finch_str_from_int(ptr %a5, i64 %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.2750, i64 1, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + store { ptr, i64, i64 } %t6, ptr %a10 + call void @finch_str_drop(ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a7 + ret { ptr, i64, i64 } %t11 +} + +define internal i64 @finch.gen.alignUp(i64 %p0, i64 %p1) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i64, align 16 + store i64 %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load i64, ptr %a2 + %t4 = icmp sle i64 %t3, 1 + br i1 %t4, label %then4487, label %endif4489 +then4487: + %t5 = load i64, ptr %a1 + ret i64 %t5 +endif4489: + %t6 = load i64, ptr %a1 + %t7 = load i64, ptr %a2 + %t8 = add i64 %t6, %t7 + %t9 = sub i64 %t8, 1 + %t10 = load i64, ptr %a2 + %t11 = icmp eq i64 %t10, 0 + br i1 %t11, label %panic4490, label %ok4491 +panic4490: + call void @finch_panic(ptr @.str.2751, i64 1958, ptr @.str.2752) + unreachable +ok4491: + %t12 = sdiv i64 %t9, %t10 + %t13 = load i64, ptr %a2 + %t14 = mul i64 %t12, %t13 + ret i64 %t14 +} + +define internal %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca %S.gen.SizeAlign, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca %S.gen.StructDef, align 16 + %a137 = alloca %S.gen.StructDef, align 16 + %a139 = alloca %S.gen.StructDef, align 16 + %a148 = alloca i64, align 16 + %a149 = alloca i64, align 16 + %a151 = alloca i64, align 16 + %a159 = alloca %S.ast.Type, align 16 + %a163 = alloca %S.gen.SizeAlign, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.2753, i64 4, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from4492 +logic.from4492: + br i1 %t13, label %logic.end4494, label %logic.rhs4493 +logic.rhs4493: + %t14 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.2754, i64 4, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.rend4495 +logic.rend4495: + br label %logic.end4494 +logic.end4494: + %t19 = phi i1 [ true, %logic.from4492 ], [ %t18, %logic.rend4495 ] + br label %logic.from4496 +logic.from4496: + br i1 %t19, label %logic.end4498, label %logic.rhs4497 +logic.rhs4497: + %t20 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.2755, i64 2, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br label %logic.rend4499 +logic.rend4499: + br label %logic.end4498 +logic.end4498: + %t25 = phi i1 [ true, %logic.from4496 ], [ %t24, %logic.rend4499 ] + br label %logic.from4500 +logic.from4500: + br i1 %t25, label %logic.end4502, label %logic.rhs4501 +logic.rhs4501: + %t26 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.2756, i64 2, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br label %logic.rend4503 +logic.rend4503: + br label %logic.end4502 +logic.end4502: + %t31 = phi i1 [ true, %logic.from4500 ], [ %t30, %logic.rend4503 ] + br i1 %t31, label %then4504, label %endif4506 +then4504: + %t32 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 1, 0 + %t33 = insertvalue %S.gen.SizeAlign %t32, i64 1, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t33 +endif4506: + %t34 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.2757, i64 3, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.from4507 +logic.from4507: + br i1 %t38, label %logic.end4509, label %logic.rhs4508 +logic.rhs4508: + %t39 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t39, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.2758, i64 3, i64 0 }, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend4510 +logic.rend4510: + br label %logic.end4509 +logic.end4509: + %t44 = phi i1 [ true, %logic.from4507 ], [ %t43, %logic.rend4510 ] + br i1 %t44, label %then4511, label %endif4513 +then4511: + %t45 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 2, 0 + %t46 = insertvalue %S.gen.SizeAlign %t45, i64 2, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t46 +endif4513: + %t47 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t47, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.2759, i64 3, i64 0 }, ptr %a49 + %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) + %t51 = icmp ne i32 %t50, 0 + br label %logic.from4514 +logic.from4514: + br i1 %t51, label %logic.end4516, label %logic.rhs4515 +logic.rhs4515: + %t52 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.2760, i64 3, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br label %logic.rend4517 +logic.rend4517: + br label %logic.end4516 +logic.end4516: + %t57 = phi i1 [ true, %logic.from4514 ], [ %t56, %logic.rend4517 ] + br label %logic.from4518 +logic.from4518: + br i1 %t57, label %logic.end4520, label %logic.rhs4519 +logic.rhs4519: + %t58 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t58, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.2761, i64 3, i64 0 }, ptr %a60 + %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) + %t62 = icmp ne i32 %t61, 0 + br label %logic.rend4521 +logic.rend4521: + br label %logic.end4520 +logic.end4520: + %t63 = phi i1 [ true, %logic.from4518 ], [ %t62, %logic.rend4521 ] + br label %logic.from4522 +logic.from4522: + br i1 %t63, label %logic.end4524, label %logic.rhs4523 +logic.rhs4523: + %t64 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.2762, i64 4, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp ne i32 %t67, 0 + br label %logic.rend4525 +logic.rend4525: + br label %logic.end4524 +logic.end4524: + %t69 = phi i1 [ true, %logic.from4522 ], [ %t68, %logic.rend4525 ] + br i1 %t69, label %then4526, label %endif4528 +then4526: + %t70 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 4, 0 + %t71 = insertvalue %S.gen.SizeAlign %t70, i64 4, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t71 +endif4528: + %t72 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t72, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.2763, i64 3, i64 0 }, ptr %a74 + %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) + %t76 = icmp ne i32 %t75, 0 + br label %logic.from4529 +logic.from4529: + br i1 %t76, label %logic.end4531, label %logic.rhs4530 +logic.rhs4530: + %t77 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t77, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.2764, i64 5, i64 0 }, ptr %a79 + %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) + %t81 = icmp ne i32 %t80, 0 + br label %logic.rend4532 +logic.rend4532: + br label %logic.end4531 +logic.end4531: + %t82 = phi i1 [ true, %logic.from4529 ], [ %t81, %logic.rend4532 ] + br i1 %t82, label %then4533, label %endif4535 +then4533: + %t83 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 24, 0 + %t84 = insertvalue %S.gen.SizeAlign %t83, i64 8, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t84 +endif4535: + %t85 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.2765, i64 3, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + br i1 %t89, label %then4536, label %endif4538 +then4536: + %t90 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 56, 0 + %t91 = insertvalue %S.gen.SizeAlign %t90, i64 8, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t91 +endif4538: + %t92 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t92, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.2766, i64 5, i64 0 }, ptr %a94 + %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) + %t96 = icmp ne i32 %t95, 0 + br i1 %t96, label %then4539, label %endif4541 +then4539: + %t97 = load ptr, ptr %a1 + %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t99 = load { ptr, i64, i64 }, ptr %t98 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 0, %t100 + br i1 %t101, label %range4542, label %inrange4543 +range4542: + call void @finch_panic_index(ptr @.str.2767, i64 1980, i64 0, i64 %t100) + unreachable +inrange4543: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 + %t104 = load %S.ast.Type, ptr %t103 + %t105 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t97, %S.ast.Type %t104) + store %S.gen.SizeAlign %t105, ptr %a106 + %t107 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 0 + %t108 = load i64, ptr %t107 + %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t110 = load i64, ptr %t109 + %t111 = mul i64 %t108, %t110 + %t112 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t111, 0 + %t113 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = insertvalue %S.gen.SizeAlign %t112, i64 %t114, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t115 +endif4541: + %t116 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t116, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.2768, i64 6, i64 0 }, ptr %a118 + %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) + %t120 = icmp ne i32 %t119, 0 + br i1 %t120, label %then4544, label %endif4546 +then4544: + %t121 = load ptr, ptr %a1 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic4547, label %ok4548 +panic4547: + call void @finch_panic(ptr @.str.2769, i64 1984, ptr @.str.2770) + unreachable +ok4548: + %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 16 + %t124 = load ptr, ptr %a1 + %t125 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t126 = load { ptr, i64, i64 }, ptr %t125 + %t127 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + %t129 = call i64 @finch.gen.findStruct(ptr %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t128) + %t130 = load { ptr, i64, i64 }, ptr %t123 + %t131 = extractvalue { ptr, i64, i64 } %t130, 1 + %t132 = icmp uge i64 %t129, %t131 + br i1 %t132, label %range4549, label %inrange4550 +range4549: + call void @finch_panic_index(ptr @.str.2771, i64 1984, i64 %t129, i64 %t131) + unreachable +inrange4550: + %t133 = extractvalue { ptr, i64, i64 } %t130, 0 + %t134 = getelementptr inbounds %S.gen.StructDef, ptr %t133, i64 %t129 + %t135 = load %S.gen.StructDef, ptr %t134 + store %S.gen.StructDef %t135, ptr %a136 + call void @finch.copy.S_gen_StructDef(ptr %a137, ptr %a136) + %t138 = load %S.gen.StructDef, ptr %a137 + store %S.gen.StructDef %t138, ptr %a139 + %t140 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 2 + %t141 = load i1, ptr %t140 + br i1 %t141, label %then4551, label %endif4553 +then4551: + %t142 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 9 + %t143 = load i64, ptr %t142 + %t144 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t143, 0 + %t145 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 10 + %t146 = load i64, ptr %t145 + %t147 = insertvalue %S.gen.SizeAlign %t144, i64 %t146, 1 + call void @finch.drop.S_gen_StructDef(ptr %a139) + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t147 +endif4553: + store i64 0, ptr %a148 + store i64 1, ptr %a149 + %t150 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 12 + store i64 0, ptr %a151 + br label %each.cond4554 +each.cond4554: + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 + %t153 = load i64, ptr %t152 + %t154 = load i64, ptr %a151 + %t155 = icmp slt i64 %t154, %t153 + br i1 %t155, label %each.body4555, label %each.end4557 +each.body4555: + %t156 = load ptr, ptr %t150 + %t157 = getelementptr inbounds %S.ast.Type, ptr %t156, i64 %t154 + %t158 = load %S.ast.Type, ptr %t157 + store %S.ast.Type %t158, ptr %a159 + %t160 = load ptr, ptr %a1 + %t161 = load %S.ast.Type, ptr %a159 + %t162 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t160, %S.ast.Type %t161) + store %S.gen.SizeAlign %t162, ptr %a163 + %t164 = load i64, ptr %a148 + %t165 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 + %t166 = load i64, ptr %t165 + %t167 = call i64 @finch.gen.alignUp(i64 %t164, i64 %t166) + %t168 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 0 + %t169 = load i64, ptr %t168 + %t170 = add i64 %t167, %t169 + store i64 %t170, ptr %a148 + %t171 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 + %t172 = load i64, ptr %t171 + %t173 = load i64, ptr %a149 + %t174 = icmp sgt i64 %t172, %t173 + br i1 %t174, label %then4558, label %endif4560 +then4558: + %t175 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 + %t176 = load i64, ptr %t175 + store i64 %t176, ptr %a149 + br label %endif4560 +endif4560: + br label %each.step4556 +each.step4556: + %t177 = load i64, ptr %a151 + %t178 = add i64 %t177, 1 + store i64 %t178, ptr %a151 + br label %each.cond4554 +each.end4557: + %t179 = load i64, ptr %a148 + %t180 = load i64, ptr %a149 + %t181 = call i64 @finch.gen.alignUp(i64 %t179, i64 %t180) + %t182 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t181, 0 + %t183 = load i64, ptr %a149 + %t184 = insertvalue %S.gen.SizeAlign %t182, i64 %t183, 1 + call void @finch.drop.S_gen_StructDef(ptr %a139) + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t184 +endif4546: + %t185 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 8, 0 + %t186 = insertvalue %S.gen.SizeAlign %t185, i64 8, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t186 +} + +define internal { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %p0, %S.gen.StructDef %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.StructDef, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca i64, align 16 + %a13 = alloca i64, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.gen.SizeAlign, align 16 + store ptr %p0, ptr %a1 + store %S.gen.StructDef %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 2 + %t4 = load i1, ptr %t3 + br i1 %t4, label %then4561, label %endif4563 +then4561: + %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 4 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch.copy.arr_int(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + ret { ptr, i64, i64 } %t9 +endif4563: + store { ptr, i64, i64 } zeroinitializer, ptr %a10 + store i64 0, ptr %a11 + %t12 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 12 + store i64 0, ptr %a13 + br label %each.cond4564 +each.cond4564: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = load i64, ptr %a13 + %t17 = icmp slt i64 %t16, %t15 + br i1 %t17, label %each.body4565, label %each.end4567 +each.body4565: + %t18 = load ptr, ptr %t12 + %t19 = getelementptr inbounds %S.ast.Type, ptr %t18, i64 %t16 + %t20 = load %S.ast.Type, ptr %t19 + store %S.ast.Type %t20, ptr %a21 + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Type, ptr %a21 + %t24 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t22, %S.ast.Type %t23) + store %S.gen.SizeAlign %t24, ptr %a25 + %t26 = load i64, ptr %a11 + %t27 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = call i64 @finch.gen.alignUp(i64 %t26, i64 %t28) + store i64 %t29, ptr %a11 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t31 = load i64, ptr %a11 + %t32 = load i64, ptr %t30 + %t33 = add i64 %t32, 1 + call void @finch_arr_reserve(ptr %a10, i64 %t33, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t34 = load ptr, ptr %a10 + %t35 = getelementptr inbounds i64, ptr %t34, i64 %t32 + store i64 %t31, ptr %t35 + store i64 %t33, ptr %t30 + %t36 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 0 + %t37 = load i64, ptr %t36 + %t38 = load i64, ptr %a11 + %t39 = add i64 %t38, %t37 + store i64 %t39, ptr %a11 + br label %each.step4566 +each.step4566: + %t40 = load i64, ptr %a13 + %t41 = add i64 %t40, 1 + store i64 %t41, ptr %a13 + br label %each.cond4564 +each.end4567: + %t42 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t42 +} + +define internal i64 @finch.gen.dbgMember(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6, i64 %p7) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a6 = alloca i64, align 16 + %a7 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + store i64 %p5, ptr %a6 + store i64 %p6, ptr %a7 + store i64 %p7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.2772, i64 42, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t10, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.2773, i64 11, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + %t20 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a21, i64 %t20) + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t19, ptr %a26 + call void @finch_str_drop(ptr %a26) + store { ptr, i64, i64 } %t22, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.2774, i64 9, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a35, i64 %t34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t33, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t33, ptr %a40 + call void @finch_str_drop(ptr %a40) + store { ptr, i64, i64 } %t36, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t42, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.2775, i64 8, i64 0 }, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + store { ptr, i64, i64 } %t42, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a43 + %t48 = load i64, ptr %a5 + call void @finch_str_from_int(ptr %a49, i64 %t48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t47, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t47, ptr %a54 + call void @finch_str_drop(ptr %a54) + store { ptr, i64, i64 } %t50, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.2776, i64 12, i64 0 }, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t56, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = load i64, ptr %a6 + %t63 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t62) + store { ptr, i64, i64 } %t61, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t61, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.2777, i64 8, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load i64, ptr %a7 + call void @finch_str_from_int(ptr %a76, i64 %t75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t74, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t74, ptr %a81 + call void @finch_str_drop(ptr %a81) + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.2778, i64 10, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + %t89 = load i64, ptr %a8 + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t88, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.2779, i64 1, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = call i64 @finch.gen.md(ptr %t9, { ptr, i64, i64 } %t102) + store { ptr, i64, i64 } %t102, ptr %a104 + call void @finch_str_drop(ptr %a104) + ret i64 %t103 +} + +define internal i64 @finch.gen.basicType(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.2780, i64 20, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.2781, i64 9, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a17, i64 %t16) + %t18 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a20 + store { ptr, i64, i64 } %t18, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t15, ptr %a22 + call void @finch_str_drop(ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.2782, i64 12, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t29, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.2783, i64 1, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = call i64 @finch.gen.md(ptr %t5, { ptr, i64, i64 } %t40) + store { ptr, i64, i64 } %t40, ptr %a42 + call void @finch_str_drop(ptr %a42) + ret i64 %t41 +} + +define internal i64 @finch.gen.diType(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i64, align 16 + %a59 = alloca i64, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.gen.EnumDef, align 16 + %a129 = alloca %S.gen.EnumDef, align 16 + %a131 = alloca %S.gen.EnumDef, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca i64, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca i32, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca i64, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca %S.gen.SizeAlign, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca i64, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca %S.ast.Type, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca %S.ast.Type, align 16 + %a414 = alloca %S.ast.Type, align 16 + %a417 = alloca %S.ast.Type, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca i64, align 16 + %a439 = alloca %S.ast.Type, align 16 + %a440 = alloca i64, align 16 + %a446 = alloca i64, align 16 + %a452 = alloca i64, align 16 + %a458 = alloca i64, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca %S.ast.Type, align 16 + %a547 = alloca i64, align 16 + %a550 = alloca i64, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca i64, align 16 + %a569 = alloca i64, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a613 = alloca { ptr, i64, i64 }, align 16 + %a614 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a634 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca %S.gen.StructDef, align 16 + %a677 = alloca %S.gen.StructDef, align 16 + %a679 = alloca %S.gen.StructDef, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a687 = alloca %S.gen.SizeAlign, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca i64, align 16 + %a705 = alloca %S.gen.SizeAlign, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a743 = alloca { ptr, i64, i64 }, align 16 + %a744 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a805 = alloca { ptr, i64, i64 }, align 16 + %a806 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a823 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a840 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca i32, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.2784, i64 4, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from4568 +logic.from4568: + br i1 %t13, label %logic.end4570, label %logic.rhs4569 +logic.rhs4569: + %t14 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.2785, i64 4, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.rend4571 +logic.rend4571: + br label %logic.end4570 +logic.end4570: + %t19 = phi i1 [ true, %logic.from4568 ], [ %t18, %logic.rend4571 ] + br i1 %t19, label %then4572, label %endif4574 +then4572: + call void @finch_str_drop(ptr %a8) + ret i64 -1 +endif4574: + %t20 = load %S.ast.Type, ptr %a2 + %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) + store { ptr, i64, i64 } { ptr @.str.2786, i64 2, i64 0 }, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a27 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic4575, label %ok4576 +panic4575: + call void @finch_panic(ptr @.str.2787, i64 2033, ptr @.str.2788) + unreachable +ok4576: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 34 + %t31 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t31, ptr %a32 + %t33 = call i64 @finch_map_find(ptr %t30, ptr %a32, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t34 = icmp sge i64 %t33, 0 + br i1 %t34, label %then4577, label %endif4579 +then4577: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic4580, label %ok4581 +panic4580: + call void @finch_panic(ptr @.str.2789, i64 2034, ptr @.str.2790) + unreachable +ok4581: + %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 34 + %t38 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = call i64 @finch_map_find(ptr %t37, ptr %a39, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t41 = icmp slt i64 %t40, 0 + br i1 %t41, label %map.missing4582, label %map.found4583 +map.missing4582: + store { ptr, i64, i64 } zeroinitializer, ptr %a42 + store { ptr, i64, i64 } %t38, ptr %a43 + call void @finch_buf_str(ptr %a42, ptr %a43, i32 1) + call void @finch_map_missing(ptr @.str.2791, i64 2034, ptr %a42) + unreachable +map.found4583: + %t44 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t37, i32 0, i32 0 + %t45 = load ptr, ptr %t44 + %t46 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t45, i64 %t40 + %t47 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t46, i32 0, i32 2 + %t48 = load i64, ptr %t47 + call void @finch_str_drop(ptr %a27) + call void @finch_str_drop(ptr %a8) + ret i64 %t48 +endif4579: + store i64 -1, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = icmp eq ptr %t50, null + br i1 %t51, label %panic4584, label %ok4585 +panic4584: + call void @finch_panic(ptr @.str.2792, i64 2037, ptr @.str.2793) + unreachable +ok4585: + %t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 35 + %t53 = load { ptr, i64, i64 }, ptr %t52 + %t54 = extractvalue { ptr, i64, i64 } %t53, 1 + %t55 = icmp uge i64 0, %t54 + br i1 %t55, label %range4586, label %inrange4587 +range4586: + call void @finch_panic_index(ptr @.str.2794, i64 2037, i64 0, i64 %t54) + unreachable +inrange4587: + %t56 = extractvalue { ptr, i64, i64 } %t53, 0 + %t57 = getelementptr inbounds i64, ptr %t56, i64 0 + %t58 = load i64, ptr %t57 + store i64 %t58, ptr %a59 + %t60 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.2795, i64 4, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br i1 %t64, label %then4588, label %else4589 +then4588: + %t65 = load ptr, ptr %a1 + %t66 = call i64 @finch.gen.basicType(ptr %t65, { ptr, i64, i64 } { ptr @.str.2796, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2797, i64 14, i64 0 }) + store i64 %t66, ptr %a49 + br label %endif4590 +else4589: + %t67 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t67, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.2798, i64 4, i64 0 }, ptr %a69 + %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) + %t71 = icmp ne i32 %t70, 0 + br i1 %t71, label %then4591, label %else4592 +then4591: + %t72 = load ptr, ptr %a1 + %t73 = call i64 @finch.gen.basicType(ptr %t72, { ptr, i64, i64 } { ptr @.str.2799, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2800, i64 18, i64 0 }) + store i64 %t73, ptr %a49 + br label %endif4593 +else4592: + %t74 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.2801, i64 3, i64 0 }, ptr %a76 + %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) + %t78 = icmp ne i32 %t77, 0 + br i1 %t78, label %then4594, label %else4595 +then4594: + %t79 = load ptr, ptr %a1 + %t80 = call i64 @finch.gen.basicType(ptr %t79, { ptr, i64, i64 } { ptr @.str.2802, i64 3, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2803, i64 13, i64 0 }) + store i64 %t80, ptr %a49 + br label %endif4596 +else4595: + %t81 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.2804, i64 5, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br i1 %t85, label %then4597, label %else4598 +then4597: + %t86 = load ptr, ptr %a1 + %t87 = call i64 @finch.gen.basicType(ptr %t86, { ptr, i64, i64 } { ptr @.str.2805, i64 5, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2806, i64 12, i64 0 }) + store i64 %t87, ptr %a49 + br label %endif4599 +else4598: + %t88 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t88, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.2807, i64 3, i64 0 }, ptr %a90 + %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then4600, label %else4601 +then4600: + %t93 = load ptr, ptr %a1 + %t94 = call i64 @finch.gen.basicType(ptr %t93, { ptr, i64, i64 } { ptr @.str.2808, i64 3, i64 0 }, i64 32, { ptr, i64, i64 } { ptr @.str.2809, i64 12, i64 0 }) + store i64 %t94, ptr %a49 + br label %endif4602 +else4601: + %t95 = load %S.ast.Type, ptr %a2 + %t96 = call i1 @finch.gen.isInt(%S.ast.Type %t95) + br i1 %t96, label %then4603, label %else4604 +then4603: + store { ptr, i64, i64 } { ptr @.str.2810, i64 15, i64 0 }, ptr %a97 + %t98 = load %S.ast.Type, ptr %a2 + %t99 = call i1 @finch.gen.isSigned(%S.ast.Type %t98) + br i1 %t99, label %then4606, label %endif4608 +then4606: + %t100 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.2811, i64 13, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t100, ptr %a101 + call void @finch_str_drop(ptr %a101) + br label %endif4608 +endif4608: + %t102 = load ptr, ptr %a1 + %t103 = load { ptr, i64, i64 }, ptr %a8 + %t104 = load %S.ast.Type, ptr %a2 + %t105 = call i64 @finch.gen.bitsOf(%S.ast.Type %t104) + %t106 = load { ptr, i64, i64 }, ptr %a97 + %t107 = call i64 @finch.gen.basicType(ptr %t102, { ptr, i64, i64 } %t103, i64 %t105, { ptr, i64, i64 } %t106) + store i64 %t107, ptr %a49 + call void @finch_str_drop(ptr %a97) + br label %endif4605 +else4604: + %t108 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2812, i64 4, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br i1 %t112, label %then4609, label %else4610 +then4609: + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic4612, label %ok4613 +panic4612: + call void @finch_panic(ptr @.str.2813, i64 2055, ptr @.str.2814) + unreachable +ok4613: + %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 21 + %t116 = load ptr, ptr %a1 + %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t120 = load { ptr, i64, i64 }, ptr %t119 + %t121 = call i64 @finch.gen.findEnum(ptr %t116, { ptr, i64, i64 } %t118, { ptr, i64, i64 } %t120) + %t122 = load { ptr, i64, i64 }, ptr %t115 + %t123 = extractvalue { ptr, i64, i64 } %t122, 1 + %t124 = icmp uge i64 %t121, %t123 + br i1 %t124, label %range4614, label %inrange4615 +range4614: + call void @finch_panic_index(ptr @.str.2815, i64 2055, i64 %t121, i64 %t123) + unreachable +inrange4615: + %t125 = extractvalue { ptr, i64, i64 } %t122, 0 + %t126 = getelementptr inbounds %S.gen.EnumDef, ptr %t125, i64 %t121 + %t127 = load %S.gen.EnumDef, ptr %t126 + store %S.gen.EnumDef %t127, ptr %a128 + call void @finch.copy.S_gen_EnumDef(ptr %a129, ptr %a128) + %t130 = load %S.gen.EnumDef, ptr %a129 + store %S.gen.EnumDef %t130, ptr %a131 + store { ptr, i64, i64 } zeroinitializer, ptr %a132 + %t133 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load i64, ptr %t134 + store i64 0, ptr %a136 + br label %for.cond4616 +for.cond4616: + %t137 = load i64, ptr %a136 + %t138 = icmp slt i64 %t137, %t135 + br i1 %t138, label %for.body4617, label %for.end4619 +for.body4617: + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + %t140 = load ptr, ptr %a1 + %t141 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 + %t142 = load i64, ptr %a136 + %t143 = load { ptr, i64, i64 }, ptr %t141 + %t144 = extractvalue { ptr, i64, i64 } %t143, 1 + %t145 = icmp uge i64 %t142, %t144 + br i1 %t145, label %range4620, label %inrange4621 +range4620: + call void @finch_panic_index(ptr @.str.2817, i64 2058, i64 %t142, i64 %t144) + unreachable +inrange4621: + %t146 = extractvalue { ptr, i64, i64 } %t143, 0 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t142 + %t148 = load { ptr, i64, i64 }, ptr %t147 + store { ptr, i64, i64 } { ptr @.str.2816, i64 21, i64 0 }, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.2818, i64 10, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + %t158 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 3 + %t159 = load i64, ptr %a136 + %t160 = load { ptr, i64, i64 }, ptr %t158 + %t161 = extractvalue { ptr, i64, i64 } %t160, 1 + %t162 = icmp uge i64 %t159, %t161 + br i1 %t162, label %range4622, label %inrange4623 +range4622: + call void @finch_panic_index(ptr @.str.2819, i64 2058, i64 %t159, i64 %t161) + unreachable +inrange4623: + %t163 = extractvalue { ptr, i64, i64 } %t160, 0 + %t164 = getelementptr inbounds i64, ptr %t163, i64 %t159 + %t165 = load i64, ptr %t164 + call void @finch_str_from_int(ptr %a166, i64 %t165) + %t167 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t157, ptr %a169 + store { ptr, i64, i64 } %t167, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t157, ptr %a171 + call void @finch_str_drop(ptr %a171) + store { ptr, i64, i64 } %t167, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t173, ptr %a175 + store { ptr, i64, i64 } { ptr @.str.2820, i64 1, i64 0 }, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t173, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + %t179 = call i64 @finch.gen.md(ptr %t140, { ptr, i64, i64 } %t178) + store { ptr, i64, i64 } %t178, ptr %a180 + call void @finch_str_drop(ptr %a180) + %t181 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t179) + %t182 = load i64, ptr %t139 + %t183 = add i64 %t182, 1 + call void @finch_arr_reserve(ptr %a132, i64 %t183, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t184 = load ptr, ptr %a132 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 + store { ptr, i64, i64 } %t181, ptr %t185 + store i64 %t183, ptr %t139 + br label %for.step4618 +for.step4618: + %t186 = load i64, ptr %a136 + %t187 = add i64 %t186, 1 + store i64 %t187, ptr %a136 + br label %for.cond4616 +for.end4619: + %t188 = load ptr, ptr %a1 + %t189 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 1 + %t190 = load { ptr, i64, i64 }, ptr %t189 + store { ptr, i64, i64 } { ptr @.str.2821, i64 54, i64 0 }, ptr %a192 + store { ptr, i64, i64 } %t190, ptr %a193 + call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) + %t194 = load { ptr, i64, i64 }, ptr %a191 + store { ptr, i64, i64 } %t194, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.2822, i64 10, i64 0 }, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t194, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + %t200 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a201, i64 %t200) + %t202 = load { ptr, i64, i64 }, ptr %a201 + store { ptr, i64, i64 } %t199, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t199, ptr %a206 + call void @finch_str_drop(ptr %a206) + store { ptr, i64, i64 } %t202, ptr %a207 + call void @finch_str_drop(ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t208, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.2823, i64 24, i64 0 }, ptr %a211 + call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211) + store { ptr, i64, i64 } %t208, ptr %a212 + call void @finch_str_drop(ptr %a212) + %t213 = load { ptr, i64, i64 }, ptr %a209 + %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2824, i64 2, i64 0 }, ptr %a215 + call void @finch_str_join(ptr %a216, ptr %a132, ptr %a215) + %t217 = load { ptr, i64, i64 }, ptr %a216 + store { ptr, i64, i64 } %t213, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t213, ptr %a221 + call void @finch_str_drop(ptr %a221) + store { ptr, i64, i64 } %t217, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.2825, i64 2, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = call i64 @finch.gen.md(ptr %t188, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t228, ptr %a230 + call void @finch_str_drop(ptr %a230) + store i64 %t229, ptr %a49 + call void @finch.drop.arr_str(ptr %a132) + call void @finch.drop.S_gen_EnumDef(ptr %a131) + br label %endif4611 +else4610: + %t231 = load ptr, ptr %a1 + %t232 = call i64 @finch.gen.md(ptr %t231, { ptr, i64, i64 } { ptr @.str.2826, i64 0, i64 0 }) + store i64 %t232, ptr %a49 + %t233 = load i64, ptr %a49 + %t234 = load ptr, ptr %a1 + %t235 = icmp eq ptr %t234, null + br i1 %t235, label %panic4624, label %ok4625 +panic4624: + call void @finch_panic(ptr @.str.2827, i64 2064, ptr @.str.2828) + unreachable +ok4625: + %t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 34 + %t237 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t237, ptr %a238 + store i32 0, ptr %a239 + %t240 = call i64 @finch_map_slot(ptr %t236, ptr %a238, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a239) + %t241 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t236, i32 0, i32 0 + %t242 = load ptr, ptr %t241 + %t243 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t242, i64 %t240 + %t244 = load i32, ptr %a239 + %t245 = icmp ne i32 %t244, 0 + br i1 %t245, label %map.new4626, label %map.have4627 +map.new4626: + %t246 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 1 + call void @finch_str_copy(ptr %t246, ptr %a238) + %t247 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 + store i64 0, ptr %t247 + br label %map.have4627 +map.have4627: + %t248 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 + store i64 %t233, ptr %t248 + %t249 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t249, ptr %a250 + store { ptr, i64, i64 } { ptr @.str.2829, i64 3, i64 0 }, ptr %a251 + %t252 = call i32 @finch_str_eq(ptr %a250, ptr %a251) + %t253 = icmp ne i32 %t252, 0 + br i1 %t253, label %then4628, label %else4629 +then4628: + store i64 -1, ptr %a254 + %t255 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %t255, i32 0, i32 1 + %t257 = load i64, ptr %t256 + %t258 = icmp sgt i64 %t257, 0 + br i1 %t258, label %then4631, label %endif4633 +then4631: + %t259 = load ptr, ptr %a1 + %t260 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t261 = load { ptr, i64, i64 }, ptr %t260 + %t262 = extractvalue { ptr, i64, i64 } %t261, 1 + %t263 = icmp uge i64 0, %t262 + br i1 %t263, label %range4634, label %inrange4635 +range4634: + call void @finch_panic_index(ptr @.str.2830, i64 2068, i64 0, i64 %t262) + unreachable +inrange4635: + %t264 = extractvalue { ptr, i64, i64 } %t261, 0 + %t265 = getelementptr inbounds %S.ast.Type, ptr %t264, i64 0 + %t266 = load %S.ast.Type, ptr %t265 + %t267 = call i64 @finch.gen.diType(ptr %t259, %S.ast.Type %t266) + store i64 %t267, ptr %a254 + br label %endif4633 +endif4633: + %t268 = load i64, ptr %a254 + %t269 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t268) + store { ptr, i64, i64 } { ptr @.str.2831, i64 51, i64 0 }, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t269, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.2832, i64 11, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + store { ptr, i64, i64 } %t274, ptr %a278 + call void @finch_str_drop(ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a275 + %t280 = load ptr, ptr %a1 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic4636, label %ok4637 +panic4636: + call void @finch_panic(ptr @.str.2833, i64 2070, ptr @.str.2834) + unreachable +ok4637: + %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 33 + %t283 = load i64, ptr %a49 + %t284 = load { ptr, i64, i64 }, ptr %t282 + %t285 = extractvalue { ptr, i64, i64 } %t284, 1 + %t286 = icmp uge i64 %t283, %t285 + br i1 %t286, label %range4638, label %inrange4639 +range4638: + call void @finch_panic_index(ptr @.str.2835, i64 2070, i64 %t283, i64 %t285) + unreachable +inrange4639: + %t287 = extractvalue { ptr, i64, i64 } %t284, 0 + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 %t283 + %t289 = load { ptr, i64, i64 }, ptr %t288 + store { ptr, i64, i64 } %t279, ptr %t288 + store { ptr, i64, i64 } %t289, ptr %a290 + call void @finch_str_drop(ptr %a290) + br label %endif4630 +else4629: + %t291 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t291, ptr %a292 + store { ptr, i64, i64 } { ptr @.str.2836, i64 5, i64 0 }, ptr %a293 + %t294 = call i32 @finch_str_eq(ptr %a292, ptr %a293) + %t295 = icmp ne i32 %t294, 0 + br i1 %t295, label %then4640, label %else4641 +then4640: + %t296 = load ptr, ptr %a1 + %t297 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t298 = load { ptr, i64, i64 }, ptr %t297 + %t299 = extractvalue { ptr, i64, i64 } %t298, 1 + %t300 = icmp uge i64 0, %t299 + br i1 %t300, label %range4643, label %inrange4644 +range4643: + call void @finch_panic_index(ptr @.str.2837, i64 2072, i64 0, i64 %t299) + unreachable +inrange4644: + %t301 = extractvalue { ptr, i64, i64 } %t298, 0 + %t302 = getelementptr inbounds %S.ast.Type, ptr %t301, i64 0 + %t303 = load %S.ast.Type, ptr %t302 + %t304 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t296, %S.ast.Type %t303) + store %S.gen.SizeAlign %t304, ptr %a305 + %t306 = load ptr, ptr %a1 + %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t308 = load i64, ptr %t307 + call void @finch_str_from_int(ptr %a309, i64 %t308) + %t310 = load { ptr, i64, i64 }, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.2838, i64 19, i64 0 }, ptr %a312 + store { ptr, i64, i64 } %t310, ptr %a313 + call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) + store { ptr, i64, i64 } %t310, ptr %a314 + call void @finch_str_drop(ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a311 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.2839, i64 1, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + %t321 = call i64 @finch.gen.md(ptr %t306, { ptr, i64, i64 } %t320) + store { ptr, i64, i64 } %t320, ptr %a322 + call void @finch_str_drop(ptr %a322) + store i64 %t321, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t326 = load { ptr, i64, i64 }, ptr %t325 + %t327 = extractvalue { ptr, i64, i64 } %t326, 1 + %t328 = icmp uge i64 0, %t327 + br i1 %t328, label %range4645, label %inrange4646 +range4645: + call void @finch_panic_index(ptr @.str.2841, i64 2074, i64 0, i64 %t327) + unreachable +inrange4646: + %t329 = extractvalue { ptr, i64, i64 } %t326, 0 + %t330 = getelementptr inbounds %S.ast.Type, ptr %t329, i64 0 + %t331 = load %S.ast.Type, ptr %t330 + %t332 = call i64 @finch.gen.diType(ptr %t324, %S.ast.Type %t331) + %t333 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t332) + store { ptr, i64, i64 } { ptr @.str.2840, i64 51, i64 0 }, ptr %a335 + store { ptr, i64, i64 } %t333, ptr %a336 + call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336) + store { ptr, i64, i64 } %t333, ptr %a337 + call void @finch_str_drop(ptr %a337) + %t338 = load { ptr, i64, i64 }, ptr %a334 + store { ptr, i64, i64 } %t338, ptr %a340 + store { ptr, i64, i64 } { ptr @.str.2842, i64 8, i64 0 }, ptr %a341 + call void @finch_str_concat(ptr %a339, ptr %a340, ptr %a341) + store { ptr, i64, i64 } %t338, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load { ptr, i64, i64 }, ptr %a339 + %t344 = getelementptr inbounds %S.gen.SizeAlign, ptr %a305, i32 0, i32 0 + %t345 = load i64, ptr %t344 + %t346 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t347 = load i64, ptr %t346 + %t348 = mul i64 %t345, %t347 + %t349 = mul i64 %t348, 8 + call void @finch_str_from_int(ptr %a350, i64 %t349) + %t351 = load { ptr, i64, i64 }, ptr %a350 + store { ptr, i64, i64 } %t343, ptr %a353 + store { ptr, i64, i64 } %t351, ptr %a354 + call void @finch_str_concat(ptr %a352, ptr %a353, ptr %a354) + store { ptr, i64, i64 } %t343, ptr %a355 + call void @finch_str_drop(ptr %a355) + store { ptr, i64, i64 } %t351, ptr %a356 + call void @finch_str_drop(ptr %a356) + %t357 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t357, ptr %a359 + store { ptr, i64, i64 } { ptr @.str.2843, i64 15, i64 0 }, ptr %a360 + call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) + store { ptr, i64, i64 } %t357, ptr %a361 + call void @finch_str_drop(ptr %a361) + %t362 = load { ptr, i64, i64 }, ptr %a358 + %t363 = load i64, ptr %a323 + call void @finch_str_from_int(ptr %a364, i64 %t363) + %t365 = load { ptr, i64, i64 }, ptr %a364 + store { ptr, i64, i64 } %t362, ptr %a367 + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + store { ptr, i64, i64 } %t362, ptr %a369 + call void @finch_str_drop(ptr %a369) + store { ptr, i64, i64 } %t365, ptr %a370 + call void @finch_str_drop(ptr %a370) + %t371 = load { ptr, i64, i64 }, ptr %a366 + store { ptr, i64, i64 } %t371, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.2844, i64 2, i64 0 }, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t371, ptr %a375 + call void @finch_str_drop(ptr %a375) + %t376 = load { ptr, i64, i64 }, ptr %a372 + %t377 = load ptr, ptr %a1 + %t378 = icmp eq ptr %t377, null + br i1 %t378, label %panic4647, label %ok4648 +panic4647: + call void @finch_panic(ptr @.str.2845, i64 2074, ptr @.str.2846) + unreachable +ok4648: + %t379 = getelementptr inbounds %S.gen.Gen, ptr %t377, i32 0, i32 33 + %t380 = load i64, ptr %a49 + %t381 = load { ptr, i64, i64 }, ptr %t379 + %t382 = extractvalue { ptr, i64, i64 } %t381, 1 + %t383 = icmp uge i64 %t380, %t382 + br i1 %t383, label %range4649, label %inrange4650 +range4649: + call void @finch_panic_index(ptr @.str.2847, i64 2074, i64 %t380, i64 %t382) + unreachable +inrange4650: + %t384 = extractvalue { ptr, i64, i64 } %t381, 0 + %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t380 + %t386 = load { ptr, i64, i64 }, ptr %t385 + store { ptr, i64, i64 } %t376, ptr %t385 + store { ptr, i64, i64 } %t386, ptr %a387 + call void @finch_str_drop(ptr %a387) + br label %endif4642 +else4641: + %t388 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t388, ptr %a389 + store { ptr, i64, i64 } { ptr @.str.2848, i64 3, i64 0 }, ptr %a390 + %t391 = call i32 @finch_str_eq(ptr %a389, ptr %a390) + %t392 = icmp ne i32 %t391, 0 + br label %logic.from4651 +logic.from4651: + br i1 %t392, label %logic.end4653, label %logic.rhs4652 +logic.rhs4652: + %t393 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t393, ptr %a394 + store { ptr, i64, i64 } { ptr @.str.2849, i64 5, i64 0 }, ptr %a395 + %t396 = call i32 @finch_str_eq(ptr %a394, ptr %a395) + %t397 = icmp ne i32 %t396, 0 + br label %logic.rend4654 +logic.rend4654: + br label %logic.end4653 +logic.end4653: + %t398 = phi i1 [ true, %logic.from4651 ], [ %t397, %logic.rend4654 ] + br i1 %t398, label %then4655, label %else4656 +then4655: + %t399 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2850, i64 4, i64 0 }) + store %S.ast.Type %t399, ptr %a400 + %t401 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t401, ptr %a402 + store { ptr, i64, i64 } { ptr @.str.2851, i64 5, i64 0 }, ptr %a403 + %t404 = call i32 @finch_str_eq(ptr %a402, ptr %a403) + %t405 = icmp ne i32 %t404, 0 + br i1 %t405, label %then4658, label %endif4660 +then4658: + %t406 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t407 = load { ptr, i64, i64 }, ptr %t406 + %t408 = extractvalue { ptr, i64, i64 } %t407, 1 + %t409 = icmp uge i64 0, %t408 + br i1 %t409, label %range4661, label %inrange4662 +range4661: + call void @finch_panic_index(ptr @.str.2852, i64 2078, i64 0, i64 %t408) + unreachable +inrange4662: + %t410 = extractvalue { ptr, i64, i64 } %t407, 0 + %t411 = getelementptr inbounds %S.ast.Type, ptr %t410, i64 0 + %t412 = load %S.ast.Type, ptr %t411 + store %S.ast.Type %t412, ptr %a413 + call void @finch.copy.S_ast_Type(ptr %a414, ptr %a413) + %t415 = load %S.ast.Type, ptr %a414 + %t416 = load %S.ast.Type, ptr %a400 + store %S.ast.Type %t415, ptr %a400 + store %S.ast.Type %t416, ptr %a417 + call void @finch.drop.S_ast_Type(ptr %a417) + br label %endif4660 +endif4660: + %t418 = load ptr, ptr %a1 + %t419 = load ptr, ptr %a1 + %t420 = load %S.ast.Type, ptr %a400 + %t421 = call i64 @finch.gen.diType(ptr %t419, %S.ast.Type %t420) + %t422 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t421) + store { ptr, i64, i64 } { ptr @.str.2853, i64 51, i64 0 }, ptr %a424 + store { ptr, i64, i64 } %t422, ptr %a425 + call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) + store { ptr, i64, i64 } %t422, ptr %a426 + call void @finch_str_drop(ptr %a426) + %t427 = load { ptr, i64, i64 }, ptr %a423 + store { ptr, i64, i64 } %t427, ptr %a429 + store { ptr, i64, i64 } { ptr @.str.2854, i64 11, i64 0 }, ptr %a430 + call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) + store { ptr, i64, i64 } %t427, ptr %a431 + call void @finch_str_drop(ptr %a431) + %t432 = load { ptr, i64, i64 }, ptr %a428 + %t433 = call i64 @finch.gen.md(ptr %t418, { ptr, i64, i64 } %t432) + store { ptr, i64, i64 } %t432, ptr %a434 + call void @finch_str_drop(ptr %a434) + store i64 %t433, ptr %a435 + %t436 = load ptr, ptr %a1 + %t437 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2855, i64 3, i64 0 }) + %t438 = call i64 @finch.gen.diType(ptr %t436, %S.ast.Type %t437) + store %S.ast.Type %t437, ptr %a439 + call void @finch.drop.S_ast_Type(ptr %a439) + store i64 %t438, ptr %a440 + %t441 = load ptr, ptr %a1 + %t442 = load i64, ptr %a49 + %t443 = load i64, ptr %a59 + %t444 = load i64, ptr %a435 + %t445 = call i64 @finch.gen.dbgMember(ptr %t441, { ptr, i64, i64 } { ptr @.str.2856, i64 3, i64 0 }, i64 %t442, i64 %t443, i64 0, i64 %t444, i64 64, i64 0) + store i64 %t445, ptr %a446 + %t447 = load ptr, ptr %a1 + %t448 = load i64, ptr %a49 + %t449 = load i64, ptr %a59 + %t450 = load i64, ptr %a440 + %t451 = call i64 @finch.gen.dbgMember(ptr %t447, { ptr, i64, i64 } { ptr @.str.2857, i64 3, i64 0 }, i64 %t448, i64 %t449, i64 0, i64 %t450, i64 64, i64 64) + store i64 %t451, ptr %a452 + %t453 = load ptr, ptr %a1 + %t454 = load i64, ptr %a49 + %t455 = load i64, ptr %a59 + %t456 = load i64, ptr %a440 + %t457 = call i64 @finch.gen.dbgMember(ptr %t453, { ptr, i64, i64 } { ptr @.str.2858, i64 3, i64 0 }, i64 %t454, i64 %t455, i64 0, i64 %t456, i64 64, i64 128) + store i64 %t457, ptr %a458 + %t459 = load %S.ast.Type, ptr %a2 + %t460 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t459) + store { ptr, i64, i64 } { ptr @.str.2859, i64 52, i64 0 }, ptr %a462 + store { ptr, i64, i64 } %t460, ptr %a463 + call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) + store { ptr, i64, i64 } %t460, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } %t465, ptr %a467 + store { ptr, i64, i64 } { ptr @.str.2860, i64 10, i64 0 }, ptr %a468 + call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) + store { ptr, i64, i64 } %t465, ptr %a469 + call void @finch_str_drop(ptr %a469) + %t470 = load { ptr, i64, i64 }, ptr %a466 + %t471 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a472, i64 %t471) + %t473 = load { ptr, i64, i64 }, ptr %a472 + store { ptr, i64, i64 } %t470, ptr %a475 + store { ptr, i64, i64 } %t473, ptr %a476 + call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) + store { ptr, i64, i64 } %t470, ptr %a477 + call void @finch_str_drop(ptr %a477) + store { ptr, i64, i64 } %t473, ptr %a478 + call void @finch_str_drop(ptr %a478) + %t479 = load { ptr, i64, i64 }, ptr %a474 + store { ptr, i64, i64 } %t479, ptr %a481 + store { ptr, i64, i64 } { ptr @.str.2861, i64 37, i64 0 }, ptr %a482 + call void @finch_str_concat(ptr %a480, ptr %a481, ptr %a482) + store { ptr, i64, i64 } %t479, ptr %a483 + call void @finch_str_drop(ptr %a483) + %t484 = load { ptr, i64, i64 }, ptr %a480 + %t485 = load i64, ptr %a446 + call void @finch_str_from_int(ptr %a486, i64 %t485) + %t487 = load { ptr, i64, i64 }, ptr %a486 + store { ptr, i64, i64 } %t484, ptr %a489 + store { ptr, i64, i64 } %t487, ptr %a490 + call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) + store { ptr, i64, i64 } %t484, ptr %a491 + call void @finch_str_drop(ptr %a491) + store { ptr, i64, i64 } %t487, ptr %a492 + call void @finch_str_drop(ptr %a492) + %t493 = load { ptr, i64, i64 }, ptr %a488 + store { ptr, i64, i64 } %t493, ptr %a495 + store { ptr, i64, i64 } { ptr @.str.2862, i64 3, i64 0 }, ptr %a496 + call void @finch_str_concat(ptr %a494, ptr %a495, ptr %a496) + store { ptr, i64, i64 } %t493, ptr %a497 + call void @finch_str_drop(ptr %a497) + %t498 = load { ptr, i64, i64 }, ptr %a494 + %t499 = load i64, ptr %a452 + call void @finch_str_from_int(ptr %a500, i64 %t499) + %t501 = load { ptr, i64, i64 }, ptr %a500 + store { ptr, i64, i64 } %t498, ptr %a503 + store { ptr, i64, i64 } %t501, ptr %a504 + call void @finch_str_concat(ptr %a502, ptr %a503, ptr %a504) + store { ptr, i64, i64 } %t498, ptr %a505 + call void @finch_str_drop(ptr %a505) + store { ptr, i64, i64 } %t501, ptr %a506 + call void @finch_str_drop(ptr %a506) + %t507 = load { ptr, i64, i64 }, ptr %a502 + store { ptr, i64, i64 } %t507, ptr %a509 + store { ptr, i64, i64 } { ptr @.str.2863, i64 3, i64 0 }, ptr %a510 + call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510) + store { ptr, i64, i64 } %t507, ptr %a511 + call void @finch_str_drop(ptr %a511) + %t512 = load { ptr, i64, i64 }, ptr %a508 + %t513 = load i64, ptr %a458 + call void @finch_str_from_int(ptr %a514, i64 %t513) + %t515 = load { ptr, i64, i64 }, ptr %a514 + store { ptr, i64, i64 } %t512, ptr %a517 + store { ptr, i64, i64 } %t515, ptr %a518 + call void @finch_str_concat(ptr %a516, ptr %a517, ptr %a518) + store { ptr, i64, i64 } %t512, ptr %a519 + call void @finch_str_drop(ptr %a519) + store { ptr, i64, i64 } %t515, ptr %a520 + call void @finch_str_drop(ptr %a520) + %t521 = load { ptr, i64, i64 }, ptr %a516 + store { ptr, i64, i64 } %t521, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.2864, i64 2, i64 0 }, ptr %a524 + call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) + store { ptr, i64, i64 } %t521, ptr %a525 + call void @finch_str_drop(ptr %a525) + %t526 = load { ptr, i64, i64 }, ptr %a522 + %t527 = load ptr, ptr %a1 + %t528 = icmp eq ptr %t527, null + br i1 %t528, label %panic4663, label %ok4664 +panic4663: + call void @finch_panic(ptr @.str.2865, i64 2085, ptr @.str.2866) + unreachable +ok4664: + %t529 = getelementptr inbounds %S.gen.Gen, ptr %t527, i32 0, i32 33 + %t530 = load i64, ptr %a49 + %t531 = load { ptr, i64, i64 }, ptr %t529 + %t532 = extractvalue { ptr, i64, i64 } %t531, 1 + %t533 = icmp uge i64 %t530, %t532 + br i1 %t533, label %range4665, label %inrange4666 +range4665: + call void @finch_panic_index(ptr @.str.2867, i64 2085, i64 %t530, i64 %t532) + unreachable +inrange4666: + %t534 = extractvalue { ptr, i64, i64 } %t531, 0 + %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %t534, i64 %t530 + %t536 = load { ptr, i64, i64 }, ptr %t535 + store { ptr, i64, i64 } %t526, ptr %t535 + store { ptr, i64, i64 } %t536, ptr %a537 + call void @finch_str_drop(ptr %a537) + call void @finch.drop.S_ast_Type(ptr %a400) + br label %endif4657 +else4656: + %t538 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t538, ptr %a539 + store { ptr, i64, i64 } { ptr @.str.2868, i64 3, i64 0 }, ptr %a540 + %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) + %t542 = icmp ne i32 %t541, 0 + br i1 %t542, label %then4667, label %else4668 +then4667: + %t543 = load ptr, ptr %a1 + %t544 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2869, i64 3, i64 0 }) + %t545 = call i64 @finch.gen.diType(ptr %t543, %S.ast.Type %t544) + store %S.ast.Type %t544, ptr %a546 + call void @finch.drop.S_ast_Type(ptr %a546) + store i64 %t545, ptr %a547 + %t548 = load ptr, ptr %a1 + %t549 = call i64 @finch.gen.md(ptr %t548, { ptr, i64, i64 } { ptr @.str.2870, i64 66, i64 0 }) + store i64 %t549, ptr %a550 + %t551 = mul i64 7, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t552 = call ptr @finch_alloc(i64 %t551) + %t553 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 0 + store { ptr, i64, i64 } { ptr @.str.2871, i64 7, i64 0 }, ptr %t553 + %t554 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 1 + store { ptr, i64, i64 } { ptr @.str.2872, i64 3, i64 0 }, ptr %t554 + %t555 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 2 + store { ptr, i64, i64 } { ptr @.str.2873, i64 4, i64 0 }, ptr %t555 + %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 3 + store { ptr, i64, i64 } { ptr @.str.2874, i64 3, i64 0 }, ptr %t556 + %t557 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 4 + store { ptr, i64, i64 } { ptr @.str.2875, i64 5, i64 0 }, ptr %t557 + %t558 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 5 + store { ptr, i64, i64 } { ptr @.str.2876, i64 4, i64 0 }, ptr %t558 + %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 6 + store { ptr, i64, i64 } { ptr @.str.2877, i64 4, i64 0 }, ptr %t559 + %t560 = insertvalue { ptr, i64, i64 } undef, ptr %t552, 0 + %t561 = insertvalue { ptr, i64, i64 } %t560, i64 7, 1 + %t562 = insertvalue { ptr, i64, i64 } %t561, i64 7, 2 + store { ptr, i64, i64 } %t562, ptr %a563 + store { ptr, i64, i64 } zeroinitializer, ptr %a564 + store i64 0, ptr %a565 + br label %for.cond4670 +for.cond4670: + %t566 = load i64, ptr %a565 + %t567 = icmp slt i64 %t566, 7 + br i1 %t567, label %for.body4671, label %for.end4673 +for.body4671: + %t568 = load i64, ptr %a547 + store i64 %t568, ptr %a569 + %t570 = load i64, ptr %a565 + %t571 = icmp eq i64 %t570, 0 + br label %logic.from4674 +logic.from4674: + br i1 %t571, label %logic.end4676, label %logic.rhs4675 +logic.rhs4675: + %t572 = load i64, ptr %a565 + %t573 = icmp eq i64 %t572, 4 + br label %logic.rend4677 +logic.rend4677: + br label %logic.end4676 +logic.end4676: + %t574 = phi i1 [ true, %logic.from4674 ], [ %t573, %logic.rend4677 ] + br i1 %t574, label %then4678, label %endif4680 +then4678: + %t575 = load i64, ptr %a550 + store i64 %t575, ptr %a569 + br label %endif4680 +endif4680: + %t576 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 + %t577 = load ptr, ptr %a1 + %t578 = load i64, ptr %a565 + %t579 = load { ptr, i64, i64 }, ptr %a563 + %t580 = extractvalue { ptr, i64, i64 } %t579, 1 + %t581 = icmp uge i64 %t578, %t580 + br i1 %t581, label %range4681, label %inrange4682 +range4681: + call void @finch_panic_index(ptr @.str.2879, i64 2096, i64 %t578, i64 %t580) + unreachable +inrange4682: + %t582 = extractvalue { ptr, i64, i64 } %t579, 0 + %t583 = getelementptr inbounds { ptr, i64, i64 }, ptr %t582, i64 %t578 + %t584 = load { ptr, i64, i64 }, ptr %t583 + %t585 = load i64, ptr %a49 + %t586 = load i64, ptr %a59 + %t587 = load i64, ptr %a569 + %t588 = load i64, ptr %a565 + %t589 = mul i64 64, %t588 + %t590 = call i64 @finch.gen.dbgMember(ptr %t577, { ptr, i64, i64 } %t584, i64 %t585, i64 %t586, i64 0, i64 %t587, i64 64, i64 %t589) + call void @finch_str_from_int(ptr %a591, i64 %t590) + %t592 = load { ptr, i64, i64 }, ptr %a591 + store { ptr, i64, i64 } { ptr @.str.2878, i64 1, i64 0 }, ptr %a594 + store { ptr, i64, i64 } %t592, ptr %a595 + call void @finch_str_concat(ptr %a593, ptr %a594, ptr %a595) + store { ptr, i64, i64 } %t592, ptr %a596 + call void @finch_str_drop(ptr %a596) + %t597 = load { ptr, i64, i64 }, ptr %a593 + %t598 = load i64, ptr %t576 + %t599 = add i64 %t598, 1 + call void @finch_arr_reserve(ptr %a564, i64 %t599, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t600 = load ptr, ptr %a564 + %t601 = getelementptr inbounds { ptr, i64, i64 }, ptr %t600, i64 %t598 + store { ptr, i64, i64 } %t597, ptr %t601 + store i64 %t599, ptr %t576 + br label %for.step4672 +for.step4672: + %t602 = load i64, ptr %a565 + %t603 = add i64 %t602, 1 + store i64 %t603, ptr %a565 + br label %for.cond4670 +for.end4673: + %t604 = load %S.ast.Type, ptr %a2 + %t605 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t604) + store { ptr, i64, i64 } { ptr @.str.2880, i64 52, i64 0 }, ptr %a607 + store { ptr, i64, i64 } %t605, ptr %a608 + call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) + store { ptr, i64, i64 } %t605, ptr %a609 + call void @finch_str_drop(ptr %a609) + %t610 = load { ptr, i64, i64 }, ptr %a606 + store { ptr, i64, i64 } %t610, ptr %a612 + store { ptr, i64, i64 } { ptr @.str.2881, i64 10, i64 0 }, ptr %a613 + call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) + store { ptr, i64, i64 } %t610, ptr %a614 + call void @finch_str_drop(ptr %a614) + %t615 = load { ptr, i64, i64 }, ptr %a611 + %t616 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a617, i64 %t616) + %t618 = load { ptr, i64, i64 }, ptr %a617 + store { ptr, i64, i64 } %t615, ptr %a620 + store { ptr, i64, i64 } %t618, ptr %a621 + call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) + store { ptr, i64, i64 } %t615, ptr %a622 + call void @finch_str_drop(ptr %a622) + store { ptr, i64, i64 } %t618, ptr %a623 + call void @finch_str_drop(ptr %a623) + %t624 = load { ptr, i64, i64 }, ptr %a619 + store { ptr, i64, i64 } %t624, ptr %a626 + store { ptr, i64, i64 } { ptr @.str.2882, i64 36, i64 0 }, ptr %a627 + call void @finch_str_concat(ptr %a625, ptr %a626, ptr %a627) + store { ptr, i64, i64 } %t624, ptr %a628 + call void @finch_str_drop(ptr %a628) + %t629 = load { ptr, i64, i64 }, ptr %a625 + %t630 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2883, i64 2, i64 0 }, ptr %a631 + call void @finch_str_join(ptr %a632, ptr %a564, ptr %a631) + %t633 = load { ptr, i64, i64 }, ptr %a632 + store { ptr, i64, i64 } %t629, ptr %a635 + store { ptr, i64, i64 } %t633, ptr %a636 + call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636) + store { ptr, i64, i64 } %t629, ptr %a637 + call void @finch_str_drop(ptr %a637) + store { ptr, i64, i64 } %t633, ptr %a638 + call void @finch_str_drop(ptr %a638) + %t639 = load { ptr, i64, i64 }, ptr %a634 + store { ptr, i64, i64 } %t639, ptr %a641 + store { ptr, i64, i64 } { ptr @.str.2884, i64 2, i64 0 }, ptr %a642 + call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) + store { ptr, i64, i64 } %t639, ptr %a643 + call void @finch_str_drop(ptr %a643) + %t644 = load { ptr, i64, i64 }, ptr %a640 + %t645 = load ptr, ptr %a1 + %t646 = icmp eq ptr %t645, null + br i1 %t646, label %panic4683, label %ok4684 +panic4683: + call void @finch_panic(ptr @.str.2885, i64 2098, ptr @.str.2886) + unreachable +ok4684: + %t647 = getelementptr inbounds %S.gen.Gen, ptr %t645, i32 0, i32 33 + %t648 = load i64, ptr %a49 + %t649 = load { ptr, i64, i64 }, ptr %t647 + %t650 = extractvalue { ptr, i64, i64 } %t649, 1 + %t651 = icmp uge i64 %t648, %t650 + br i1 %t651, label %range4685, label %inrange4686 +range4685: + call void @finch_panic_index(ptr @.str.2887, i64 2098, i64 %t648, i64 %t650) + unreachable +inrange4686: + %t652 = extractvalue { ptr, i64, i64 } %t649, 0 + %t653 = getelementptr inbounds { ptr, i64, i64 }, ptr %t652, i64 %t648 + %t654 = load { ptr, i64, i64 }, ptr %t653 + store { ptr, i64, i64 } %t644, ptr %t653 + store { ptr, i64, i64 } %t654, ptr %a655 + call void @finch_str_drop(ptr %a655) + call void @finch.drop.arr_str(ptr %a564) + call void @finch.drop.arr_str(ptr %a563) + br label %endif4669 +else4668: + %t656 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t656, ptr %a657 + store { ptr, i64, i64 } { ptr @.str.2888, i64 6, i64 0 }, ptr %a658 + %t659 = call i32 @finch_str_eq(ptr %a657, ptr %a658) + %t660 = icmp ne i32 %t659, 0 + br i1 %t660, label %then4687, label %else4688 +then4687: + %t661 = load ptr, ptr %a1 + %t662 = icmp eq ptr %t661, null + br i1 %t662, label %panic4690, label %ok4691 +panic4690: + call void @finch_panic(ptr @.str.2889, i64 2100, ptr @.str.2890) + unreachable +ok4691: + %t663 = getelementptr inbounds %S.gen.Gen, ptr %t661, i32 0, i32 16 + %t664 = load ptr, ptr %a1 + %t665 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t666 = load { ptr, i64, i64 }, ptr %t665 + %t667 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t668 = load { ptr, i64, i64 }, ptr %t667 + %t669 = call i64 @finch.gen.findStruct(ptr %t664, { ptr, i64, i64 } %t666, { ptr, i64, i64 } %t668) + %t670 = load { ptr, i64, i64 }, ptr %t663 + %t671 = extractvalue { ptr, i64, i64 } %t670, 1 + %t672 = icmp uge i64 %t669, %t671 + br i1 %t672, label %range4692, label %inrange4693 +range4692: + call void @finch_panic_index(ptr @.str.2891, i64 2100, i64 %t669, i64 %t671) + unreachable +inrange4693: + %t673 = extractvalue { ptr, i64, i64 } %t670, 0 + %t674 = getelementptr inbounds %S.gen.StructDef, ptr %t673, i64 %t669 + %t675 = load %S.gen.StructDef, ptr %t674 + store %S.gen.StructDef %t675, ptr %a676 + call void @finch.copy.S_gen_StructDef(ptr %a677, ptr %a676) + %t678 = load %S.gen.StructDef, ptr %a677 + store %S.gen.StructDef %t678, ptr %a679 + %t680 = load ptr, ptr %a1 + %t681 = load %S.gen.StructDef, ptr %a679 + %t682 = call { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %t680, %S.gen.StructDef %t681) + store { ptr, i64, i64 } %t682, ptr %a683 + %t684 = load ptr, ptr %a1 + %t685 = load %S.ast.Type, ptr %a2 + %t686 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t684, %S.ast.Type %t685) + store %S.gen.SizeAlign %t686, ptr %a687 + store { ptr, i64, i64 } zeroinitializer, ptr %a688 + %t689 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 + %t690 = getelementptr inbounds { ptr, i64, i64 }, ptr %t689, i32 0, i32 1 + %t691 = load i64, ptr %t690 + store i64 0, ptr %a692 + br label %for.cond4694 +for.cond4694: + %t693 = load i64, ptr %a692 + %t694 = icmp slt i64 %t693, %t691 + br i1 %t694, label %for.body4695, label %for.end4697 +for.body4695: + %t695 = load ptr, ptr %a1 + %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 + %t697 = load i64, ptr %a692 + %t698 = load { ptr, i64, i64 }, ptr %t696 + %t699 = extractvalue { ptr, i64, i64 } %t698, 1 + %t700 = icmp uge i64 %t697, %t699 + br i1 %t700, label %range4698, label %inrange4699 +range4698: + call void @finch_panic_index(ptr @.str.2892, i64 2105, i64 %t697, i64 %t699) + unreachable +inrange4699: + %t701 = extractvalue { ptr, i64, i64 } %t698, 0 + %t702 = getelementptr inbounds %S.ast.Type, ptr %t701, i64 %t697 + %t703 = load %S.ast.Type, ptr %t702 + %t704 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t695, %S.ast.Type %t703) + store %S.gen.SizeAlign %t704, ptr %a705 + %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %a688, i32 0, i32 1 + %t707 = load ptr, ptr %a1 + %t708 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 11 + %t709 = load i64, ptr %a692 + %t710 = load { ptr, i64, i64 }, ptr %t708 + %t711 = extractvalue { ptr, i64, i64 } %t710, 1 + %t712 = icmp uge i64 %t709, %t711 + br i1 %t712, label %range4700, label %inrange4701 +range4700: + call void @finch_panic_index(ptr @.str.2894, i64 2106, i64 %t709, i64 %t711) + unreachable +inrange4701: + %t713 = extractvalue { ptr, i64, i64 } %t710, 0 + %t714 = getelementptr inbounds { ptr, i64, i64 }, ptr %t713, i64 %t709 + %t715 = load { ptr, i64, i64 }, ptr %t714 + %t716 = load i64, ptr %a49 + %t717 = load i64, ptr %a59 + %t718 = load ptr, ptr %a1 + %t719 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 + %t720 = load i64, ptr %a692 + %t721 = load { ptr, i64, i64 }, ptr %t719 + %t722 = extractvalue { ptr, i64, i64 } %t721, 1 + %t723 = icmp uge i64 %t720, %t722 + br i1 %t723, label %range4702, label %inrange4703 +range4702: + call void @finch_panic_index(ptr @.str.2895, i64 2106, i64 %t720, i64 %t722) + unreachable +inrange4703: + %t724 = extractvalue { ptr, i64, i64 } %t721, 0 + %t725 = getelementptr inbounds %S.ast.Type, ptr %t724, i64 %t720 + %t726 = load %S.ast.Type, ptr %t725 + %t727 = call i64 @finch.gen.diType(ptr %t718, %S.ast.Type %t726) + %t728 = getelementptr inbounds %S.gen.SizeAlign, ptr %a705, i32 0, i32 0 + %t729 = load i64, ptr %t728 + %t730 = mul i64 %t729, 8 + %t731 = load i64, ptr %a692 + %t732 = load { ptr, i64, i64 }, ptr %a683 + %t733 = extractvalue { ptr, i64, i64 } %t732, 1 + %t734 = icmp uge i64 %t731, %t733 + br i1 %t734, label %range4704, label %inrange4705 +range4704: + call void @finch_panic_index(ptr @.str.2896, i64 2106, i64 %t731, i64 %t733) + unreachable +inrange4705: + %t735 = extractvalue { ptr, i64, i64 } %t732, 0 + %t736 = getelementptr inbounds i64, ptr %t735, i64 %t731 + %t737 = load i64, ptr %t736 + %t738 = mul i64 %t737, 8 + %t739 = call i64 @finch.gen.dbgMember(ptr %t707, { ptr, i64, i64 } %t715, i64 %t716, i64 %t717, i64 0, i64 %t727, i64 %t730, i64 %t738) + call void @finch_str_from_int(ptr %a740, i64 %t739) + %t741 = load { ptr, i64, i64 }, ptr %a740 + store { ptr, i64, i64 } { ptr @.str.2893, i64 1, i64 0 }, ptr %a743 + store { ptr, i64, i64 } %t741, ptr %a744 + call void @finch_str_concat(ptr %a742, ptr %a743, ptr %a744) + store { ptr, i64, i64 } %t741, ptr %a745 + call void @finch_str_drop(ptr %a745) + %t746 = load { ptr, i64, i64 }, ptr %a742 + %t747 = load i64, ptr %t706 + %t748 = add i64 %t747, 1 + call void @finch_arr_reserve(ptr %a688, i64 %t748, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t749 = load ptr, ptr %a688 + %t750 = getelementptr inbounds { ptr, i64, i64 }, ptr %t749, i64 %t747 + store { ptr, i64, i64 } %t746, ptr %t750 + store i64 %t748, ptr %t706 + br label %for.step4696 +for.step4696: + %t751 = load i64, ptr %a692 + %t752 = add i64 %t751, 1 + store i64 %t752, ptr %a692 + br label %for.cond4694 +for.end4697: + %t753 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 1 + %t754 = load { ptr, i64, i64 }, ptr %t753 + store { ptr, i64, i64 } { ptr @.str.2897, i64 52, i64 0 }, ptr %a756 + store { ptr, i64, i64 } %t754, ptr %a757 + call void @finch_str_concat(ptr %a755, ptr %a756, ptr %a757) + %t758 = load { ptr, i64, i64 }, ptr %a755 + store { ptr, i64, i64 } %t758, ptr %a760 + store { ptr, i64, i64 } { ptr @.str.2898, i64 10, i64 0 }, ptr %a761 + call void @finch_str_concat(ptr %a759, ptr %a760, ptr %a761) + store { ptr, i64, i64 } %t758, ptr %a762 + call void @finch_str_drop(ptr %a762) + %t763 = load { ptr, i64, i64 }, ptr %a759 + %t764 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a765, i64 %t764) + %t766 = load { ptr, i64, i64 }, ptr %a765 + store { ptr, i64, i64 } %t763, ptr %a768 + store { ptr, i64, i64 } %t766, ptr %a769 + call void @finch_str_concat(ptr %a767, ptr %a768, ptr %a769) + store { ptr, i64, i64 } %t763, ptr %a770 + call void @finch_str_drop(ptr %a770) + store { ptr, i64, i64 } %t766, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t772, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.2899, i64 8, i64 0 }, ptr %a775 + call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) + store { ptr, i64, i64 } %t772, ptr %a776 + call void @finch_str_drop(ptr %a776) + %t777 = load { ptr, i64, i64 }, ptr %a773 + %t778 = getelementptr inbounds %S.gen.SizeAlign, ptr %a687, i32 0, i32 0 + %t779 = load i64, ptr %t778 + %t780 = mul i64 %t779, 8 + call void @finch_str_from_int(ptr %a781, i64 %t780) + %t782 = load { ptr, i64, i64 }, ptr %a781 + store { ptr, i64, i64 } %t777, ptr %a784 + store { ptr, i64, i64 } %t782, ptr %a785 + call void @finch_str_concat(ptr %a783, ptr %a784, ptr %a785) + store { ptr, i64, i64 } %t777, ptr %a786 + call void @finch_str_drop(ptr %a786) + store { ptr, i64, i64 } %t782, ptr %a787 + call void @finch_str_drop(ptr %a787) + %t788 = load { ptr, i64, i64 }, ptr %a783 + store { ptr, i64, i64 } %t788, ptr %a790 + store { ptr, i64, i64 } { ptr @.str.2900, i64 24, i64 0 }, ptr %a791 + call void @finch_str_concat(ptr %a789, ptr %a790, ptr %a791) + store { ptr, i64, i64 } %t788, ptr %a792 + call void @finch_str_drop(ptr %a792) + %t793 = load { ptr, i64, i64 }, ptr %a789 + %t794 = getelementptr inbounds { ptr, i64, i64 }, ptr %a688, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2901, i64 2, i64 0 }, ptr %a795 + call void @finch_str_join(ptr %a796, ptr %a688, ptr %a795) + %t797 = load { ptr, i64, i64 }, ptr %a796 + store { ptr, i64, i64 } %t793, ptr %a799 + store { ptr, i64, i64 } %t797, ptr %a800 + call void @finch_str_concat(ptr %a798, ptr %a799, ptr %a800) + store { ptr, i64, i64 } %t793, ptr %a801 + call void @finch_str_drop(ptr %a801) + store { ptr, i64, i64 } %t797, ptr %a802 + call void @finch_str_drop(ptr %a802) + %t803 = load { ptr, i64, i64 }, ptr %a798 + store { ptr, i64, i64 } %t803, ptr %a805 + store { ptr, i64, i64 } { ptr @.str.2902, i64 2, i64 0 }, ptr %a806 + call void @finch_str_concat(ptr %a804, ptr %a805, ptr %a806) + store { ptr, i64, i64 } %t803, ptr %a807 + call void @finch_str_drop(ptr %a807) + %t808 = load { ptr, i64, i64 }, ptr %a804 + %t809 = load ptr, ptr %a1 + %t810 = icmp eq ptr %t809, null + br i1 %t810, label %panic4706, label %ok4707 +panic4706: + call void @finch_panic(ptr @.str.2903, i64 2108, ptr @.str.2904) + unreachable +ok4707: + %t811 = getelementptr inbounds %S.gen.Gen, ptr %t809, i32 0, i32 33 + %t812 = load i64, ptr %a49 + %t813 = load { ptr, i64, i64 }, ptr %t811 + %t814 = extractvalue { ptr, i64, i64 } %t813, 1 + %t815 = icmp uge i64 %t812, %t814 + br i1 %t815, label %range4708, label %inrange4709 +range4708: + call void @finch_panic_index(ptr @.str.2905, i64 2108, i64 %t812, i64 %t814) + unreachable +inrange4709: + %t816 = extractvalue { ptr, i64, i64 } %t813, 0 + %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t812 + %t818 = load { ptr, i64, i64 }, ptr %t817 + store { ptr, i64, i64 } %t808, ptr %t817 + store { ptr, i64, i64 } %t818, ptr %a819 + call void @finch_str_drop(ptr %a819) + call void @finch.drop.arr_str(ptr %a688) + call void @finch.drop.arr_int(ptr %a683) + call void @finch.drop.S_gen_StructDef(ptr %a679) + br label %endif4689 +else4688: + %t820 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.2906, i64 20, i64 0 }, ptr %a822 + store { ptr, i64, i64 } %t820, ptr %a823 + call void @finch_str_concat(ptr %a821, ptr %a822, ptr %a823) + %t824 = load { ptr, i64, i64 }, ptr %a821 + store { ptr, i64, i64 } %t824, ptr %a826 + store { ptr, i64, i64 } { ptr @.str.2907, i64 39, i64 0 }, ptr %a827 + call void @finch_str_concat(ptr %a825, ptr %a826, ptr %a827) + store { ptr, i64, i64 } %t824, ptr %a828 + call void @finch_str_drop(ptr %a828) + %t829 = load { ptr, i64, i64 }, ptr %a825 + %t830 = load ptr, ptr %a1 + %t831 = icmp eq ptr %t830, null + br i1 %t831, label %panic4710, label %ok4711 +panic4710: + call void @finch_panic(ptr @.str.2908, i64 2110, ptr @.str.2909) + unreachable +ok4711: + %t832 = getelementptr inbounds %S.gen.Gen, ptr %t830, i32 0, i32 33 + %t833 = load i64, ptr %a49 + %t834 = load { ptr, i64, i64 }, ptr %t832 + %t835 = extractvalue { ptr, i64, i64 } %t834, 1 + %t836 = icmp uge i64 %t833, %t835 + br i1 %t836, label %range4712, label %inrange4713 +range4712: + call void @finch_panic_index(ptr @.str.2910, i64 2110, i64 %t833, i64 %t835) + unreachable +inrange4713: + %t837 = extractvalue { ptr, i64, i64 } %t834, 0 + %t838 = getelementptr inbounds { ptr, i64, i64 }, ptr %t837, i64 %t833 + %t839 = load { ptr, i64, i64 }, ptr %t838 + store { ptr, i64, i64 } %t829, ptr %t838 + store { ptr, i64, i64 } %t839, ptr %a840 + call void @finch_str_drop(ptr %a840) + br label %endif4689 +endif4689: + br label %endif4669 +endif4669: + br label %endif4657 +endif4657: + br label %endif4642 +endif4642: + br label %endif4630 +endif4630: + %t841 = load i64, ptr %a49 + call void @finch_str_drop(ptr %a27) + call void @finch_str_drop(ptr %a8) + ret i64 %t841 +endif4611: + br label %endif4605 +endif4605: + br label %endif4602 +endif4602: + br label %endif4599 +endif4599: + br label %endif4596 +endif4596: + br label %endif4593 +endif4593: + br label %endif4590 +endif4590: + %t842 = load i64, ptr %a49 + %t843 = load ptr, ptr %a1 + %t844 = icmp eq ptr %t843, null + br i1 %t844, label %panic4714, label %ok4715 +panic4714: + call void @finch_panic(ptr @.str.2911, i64 2114, ptr @.str.2912) + unreachable +ok4715: + %t845 = getelementptr inbounds %S.gen.Gen, ptr %t843, i32 0, i32 34 + %t846 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t846, ptr %a847 + store i32 0, ptr %a848 + %t849 = call i64 @finch_map_slot(ptr %t845, ptr %a847, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a848) + %t850 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t845, i32 0, i32 0 + %t851 = load ptr, ptr %t850 + %t852 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t851, i64 %t849 + %t853 = load i32, ptr %a848 + %t854 = icmp ne i32 %t853, 0 + br i1 %t854, label %map.new4716, label %map.have4717 +map.new4716: + %t855 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 1 + call void @finch_str_copy(ptr %t855, ptr %a847) + %t856 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 + store i64 0, ptr %t856 + br label %map.have4717 +map.have4717: + %t857 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 + store i64 %t842, ptr %t857 + %t858 = load i64, ptr %a49 + call void @finch_str_drop(ptr %a27) + call void @finch_str_drop(ptr %a8) + ret i64 %t858 +} + +define internal i64 @finch.gen.dbgLocation(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca i64, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca i32, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic4718, label %ok4719 +panic4718: + call void @finch_panic(ptr @.str.2914, i64 2119, ptr @.str.2915) + unreachable +ok4719: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 37 + %t5 = load i64, ptr %t4 + call void @finch_str_from_int(ptr %a6, i64 %t5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.2913, i64 2, i64 0 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.2916, i64 1, i64 0 }, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic4720, label %ok4721 +panic4720: + call void @finch_panic(ptr @.str.2917, i64 2119, ptr @.str.2918) + unreachable +ok4721: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 38 + %t21 = load i64, ptr %t20 + call void @finch_str_from_int(ptr %a22, i64 %t21) + %t23 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t17, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t17, ptr %a27 + call void @finch_str_drop(ptr %a27) + store { ptr, i64, i64 } %t23, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.2919, i64 1, i64 0 }, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic4722, label %ok4723 +panic4722: + call void @finch_panic(ptr @.str.2920, i64 2119, ptr @.str.2921) + unreachable +ok4723: + %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 36 + %t38 = load i64, ptr %t37 + call void @finch_str_from_int(ptr %a39, i64 %t38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t34, ptr %a42 + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t34, ptr %a44 + call void @finch_str_drop(ptr %a44) + store { ptr, i64, i64 } %t40, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t46, ptr %a47 + %t48 = load ptr, ptr %a1 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic4724, label %ok4725 +panic4724: + call void @finch_panic(ptr @.str.2922, i64 2120, ptr @.str.2923) + unreachable +ok4725: + %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 34 + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t54 = icmp sge i64 %t53, 0 + br i1 %t54, label %then4726, label %endif4728 +then4726: + %t55 = load ptr, ptr %a1 + %t56 = icmp eq ptr %t55, null + br i1 %t56, label %panic4729, label %ok4730 +panic4729: + call void @finch_panic(ptr @.str.2924, i64 2121, ptr @.str.2925) + unreachable +ok4730: + %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 34 + %t58 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t58, ptr %a59 + %t60 = call i64 @finch_map_find(ptr %t57, ptr %a59, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t61 = icmp slt i64 %t60, 0 + br i1 %t61, label %map.missing4731, label %map.found4732 +map.missing4731: + store { ptr, i64, i64 } zeroinitializer, ptr %a62 + store { ptr, i64, i64 } %t58, ptr %a63 + call void @finch_buf_str(ptr %a62, ptr %a63, i32 1) + call void @finch_map_missing(ptr @.str.2926, i64 2121, ptr %a62) + unreachable +map.found4732: + %t64 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t57, i32 0, i32 0 + %t65 = load ptr, ptr %t64 + %t66 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t65, i64 %t60 + %t67 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t66, i32 0, i32 2 + %t68 = load i64, ptr %t67 + call void @finch_str_drop(ptr %a47) + ret i64 %t68 +endif4728: + %t69 = load ptr, ptr %a1 + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic4733, label %ok4734 +panic4733: + call void @finch_panic(ptr @.str.2928, i64 2123, ptr @.str.2929) + unreachable +ok4734: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 37 + %t73 = load i64, ptr %t72 + call void @finch_str_from_int(ptr %a74, i64 %t73) + %t75 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.2927, i64 18, i64 0 }, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.2930, i64 10, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic4735, label %ok4736 +panic4735: + call void @finch_panic(ptr @.str.2931, i64 2123, ptr @.str.2932) + unreachable +ok4736: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 38 + %t89 = load i64, ptr %t88 + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t85, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t85, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.2933, i64 10, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = load ptr, ptr %a1 + %t104 = icmp eq ptr %t103, null + br i1 %t104, label %panic4737, label %ok4738 +panic4737: + call void @finch_panic(ptr @.str.2934, i64 2123, ptr @.str.2935) + unreachable +ok4738: + %t105 = getelementptr inbounds %S.gen.Gen, ptr %t103, i32 0, i32 36 + %t106 = load i64, ptr %t105 + call void @finch_str_from_int(ptr %a107, i64 %t106) + %t108 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t102, ptr %a110 + store { ptr, i64, i64 } %t108, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t102, ptr %a112 + call void @finch_str_drop(ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.2936, i64 1, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = call i64 @finch.gen.md(ptr %t69, { ptr, i64, i64 } %t119) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + store i64 %t120, ptr %a122 + %t123 = load i64, ptr %a122 + %t124 = load ptr, ptr %a1 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic4739, label %ok4740 +panic4739: + call void @finch_panic(ptr @.str.2937, i64 2124, ptr @.str.2938) + unreachable +ok4740: + %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 34 + %t127 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t127, ptr %a128 + store i32 0, ptr %a129 + %t130 = call i64 @finch_map_slot(ptr %t126, ptr %a128, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a129) + %t131 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t126, i32 0, i32 0 + %t132 = load ptr, ptr %t131 + %t133 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t132, i64 %t130 + %t134 = load i32, ptr %a129 + %t135 = icmp ne i32 %t134, 0 + br i1 %t135, label %map.new4741, label %map.have4742 +map.new4741: + %t136 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 1 + call void @finch_str_copy(ptr %t136, ptr %a128) + %t137 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 + store i64 0, ptr %t137 + br label %map.have4742 +map.have4742: + %t138 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 + store i64 %t123, ptr %t138 + %t139 = load i64, ptr %a122 + call void @finch_str_drop(ptr %a47) + ret i64 %t139 +} + +define internal i64 @finch.gen.dbgSubprogram(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.gen.FnSig, align 16 + %a8 = alloca %S.gen.FnSig, align 16 + %a10 = alloca %S.gen.FnSig, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca i64, align 16 + %a40 = alloca %S.ast.Type, align 16 + %a63 = alloca i64, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca i64, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4743, label %ok4744 +panic4743: + call void @finch_panic(ptr @.str.2939, i64 2129, ptr @.str.2940) + unreachable +ok4744: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 + %t6 = load %S.gen.FnSig, ptr %t5 + store %S.gen.FnSig %t6, ptr %a7 + call void @finch.copy.S_gen_FnSig(ptr %a8, ptr %a7) + %t9 = load %S.gen.FnSig, ptr %a8 + store %S.gen.FnSig %t9, ptr %a10 + store { ptr, i64, i64 } zeroinitializer, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t13 = load ptr, ptr %a1 + %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 12 + %t15 = load %S.ast.Type, ptr %t14 + %t16 = call i64 @finch.gen.diType(ptr %t13, %S.ast.Type %t15) + %t17 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t16) + %t18 = load i64, ptr %t12 + %t19 = add i64 %t18, 1 + call void @finch_arr_reserve(ptr %a11, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t20 = load ptr, ptr %a11 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + store { ptr, i64, i64 } %t17, ptr %t21 + store i64 %t19, ptr %t12 + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 2 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = icmp sgt i64 %t24, 0 + br i1 %t25, label %then4745, label %endif4747 +then4745: + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = add i64 %t27, 1 + call void @finch_arr_reserve(ptr %a11, i64 %t28, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t29 = load ptr, ptr %a11 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t27 + store { ptr, i64, i64 } { ptr @.str.2941, i64 4, i64 0 }, ptr %t30 + store i64 %t28, ptr %t26 + br label %endif4747 +endif4747: + %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 13 + store i64 0, ptr %a32 + br label %each.cond4748 +each.cond4748: + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t34 = load i64, ptr %t33 + %t35 = load i64, ptr %a32 + %t36 = icmp slt i64 %t35, %t34 + br i1 %t36, label %each.body4749, label %each.end4751 +each.body4749: + %t37 = load ptr, ptr %t31 + %t38 = getelementptr inbounds %S.ast.Type, ptr %t37, i64 %t35 + %t39 = load %S.ast.Type, ptr %t38 + store %S.ast.Type %t39, ptr %a40 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t42 = load ptr, ptr %a1 + %t43 = load %S.ast.Type, ptr %a40 + %t44 = call i64 @finch.gen.diType(ptr %t42, %S.ast.Type %t43) + %t45 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t44) + %t46 = load i64, ptr %t41 + %t47 = add i64 %t46, 1 + call void @finch_arr_reserve(ptr %a11, i64 %t47, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t48 = load ptr, ptr %a11 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t46 + store { ptr, i64, i64 } %t45, ptr %t49 + store i64 %t47, ptr %t41 + br label %each.step4750 +each.step4750: + %t50 = load i64, ptr %a32 + %t51 = add i64 %t50, 1 + store i64 %t51, ptr %a32 + br label %each.cond4748 +each.end4751: + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic4752, label %ok4753 +panic4752: + call void @finch_panic(ptr @.str.2942, i64 2138, ptr @.str.2943) + unreachable +ok4753: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 35 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t56 = load i64, ptr %t55 + %t57 = load { ptr, i64, i64 }, ptr %t54 + %t58 = extractvalue { ptr, i64, i64 } %t57, 1 + %t59 = icmp uge i64 %t56, %t58 + br i1 %t59, label %range4754, label %inrange4755 +range4754: + call void @finch_panic_index(ptr @.str.2944, i64 2138, i64 %t56, i64 %t58) + unreachable +inrange4755: + %t60 = extractvalue { ptr, i64, i64 } %t57, 0 + %t61 = getelementptr inbounds i64, ptr %t60, i64 %t56 + %t62 = load i64, ptr %t61 + store i64 %t62, ptr %a63 + %t64 = load ptr, ptr %a1 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2946, i64 2, i64 0 }, ptr %a66 + call void @finch_str_join(ptr %a67, ptr %a11, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.2945, i64 27, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.2947, i64 2, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = call i64 @finch.gen.md(ptr %t64, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a80 + call void @finch_str_drop(ptr %a80) + store i64 %t79, ptr %a81 + %t82 = load ptr, ptr %a1 + %t83 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 1 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } { ptr @.str.2948, i64 30, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.2949, i64 17, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 + %t95 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t95, ptr %a96 + %t98 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 + %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 + %t100 = load i64, ptr %t99 + call void @finch_str_sub(ptr %a97, ptr %a96, i64 1, i64 %t100, ptr @.str.2950, i64 2140) + %t101 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t93, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t93, ptr %a105 + call void @finch_str_drop(ptr %a105) + store { ptr, i64, i64 } %t101, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2951, i64 11, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a108 + %t113 = load i64, ptr %a63 + call void @finch_str_from_int(ptr %a114, i64 %t113) + %t115 = load { ptr, i64, i64 }, ptr %a114 + store { ptr, i64, i64 } %t112, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t112, ptr %a119 + call void @finch_str_drop(ptr %a119) + store { ptr, i64, i64 } %t115, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.2952, i64 9, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = load i64, ptr %a63 + call void @finch_str_from_int(ptr %a128, i64 %t127) + %t129 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t126, ptr %a131 + store { ptr, i64, i64 } %t129, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + store { ptr, i64, i64 } %t126, ptr %a133 + call void @finch_str_drop(ptr %a133) + store { ptr, i64, i64 } %t129, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t135, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.2953, i64 8, i64 0 }, ptr %a138 + call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) + store { ptr, i64, i64 } %t135, ptr %a139 + call void @finch_str_drop(ptr %a139) + %t140 = load { ptr, i64, i64 }, ptr %a136 + %t141 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t142 = load i64, ptr %t141 + call void @finch_str_from_int(ptr %a143, i64 %t142) + %t144 = load { ptr, i64, i64 }, ptr %a143 + store { ptr, i64, i64 } %t140, ptr %a146 + store { ptr, i64, i64 } %t144, ptr %a147 + call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) + store { ptr, i64, i64 } %t140, ptr %a148 + call void @finch_str_drop(ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.2954, i64 9, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load i64, ptr %a81 + call void @finch_str_from_int(ptr %a157, i64 %t156) + %t158 = load { ptr, i64, i64 }, ptr %a157 + store { ptr, i64, i64 } %t155, ptr %a160 + store { ptr, i64, i64 } %t158, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t155, ptr %a162 + call void @finch_str_drop(ptr %a162) + store { ptr, i64, i64 } %t158, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a159 + store { ptr, i64, i64 } %t164, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.2955, i64 13, i64 0 }, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t164, ptr %a168 + call void @finch_str_drop(ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a165 + %t170 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t171 = load i64, ptr %t170 + call void @finch_str_from_int(ptr %a172, i64 %t171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + store { ptr, i64, i64 } %t169, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t169, ptr %a177 + call void @finch_str_drop(ptr %a177) + store { ptr, i64, i64 } %t173, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.2956, i64 87, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + store { ptr, i64, i64 } %t179, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a180 + %t185 = call i64 @finch.gen.md(ptr %t82, { ptr, i64, i64 } %t184) + store { ptr, i64, i64 } %t184, ptr %a186 + call void @finch_str_drop(ptr %a186) + call void @finch.drop.arr_str(ptr %a11) + call void @finch.drop.S_gen_FnSig(ptr %a10) + ret i64 %t185 +} + +define internal void @finch.gen.dbgVariable(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca i64, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4756, label %ok4757 +panic4756: + call void @finch_panic(ptr @.str.2957, i64 2144, ptr @.str.2958) + unreachable +ok4757: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 30 + %t9 = load i1, ptr %t8 + %t10 = xor i1 %t9, true + br label %logic.from4758 +logic.from4758: + br i1 %t10, label %logic.end4760, label %logic.rhs4759 +logic.rhs4759: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic4761, label %ok4762 +panic4761: + call void @finch_panic(ptr @.str.2959, i64 2144, ptr @.str.2960) + unreachable +ok4762: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 36 + %t14 = load i64, ptr %t13 + %t15 = icmp slt i64 %t14, 0 + br label %logic.rend4763 +logic.rend4763: + br label %logic.end4760 +logic.end4760: + %t16 = phi i1 [ true, %logic.from4758 ], [ %t15, %logic.rend4763 ] + br i1 %t16, label %then4764, label %endif4766 +then4764: + ret void +endif4766: + %t17 = load ptr, ptr %a1 + %t18 = load %S.ast.Type, ptr %a4 + %t19 = call i64 @finch.gen.diType(ptr %t17, %S.ast.Type %t18) + store i64 %t19, ptr %a20 + %t21 = load i64, ptr %a20 + %t22 = icmp slt i64 %t21, 0 + br i1 %t22, label %then4767, label %endif4769 +then4767: + ret void +endif4769: + store { ptr, i64, i64 } { ptr @.str.2961, i64 0, i64 0 }, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic4770, label %ok4771 +panic4770: + call void @finch_panic(ptr @.str.2962, i64 2152, ptr @.str.2963) + unreachable +ok4771: + %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 39 + %t27 = load i64, ptr %t26 + %t28 = icmp sgt i64 %t27, 0 + br i1 %t28, label %then4772, label %endif4774 +then4772: + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic4775, label %ok4776 +panic4775: + call void @finch_panic(ptr @.str.2965, i64 2153, ptr @.str.2966) + unreachable +ok4776: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 39 + %t32 = load i64, ptr %t31 + call void @finch_str_from_int(ptr %a33, i64 %t32) + %t34 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.2964, i64 7, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + %t40 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t39, ptr %a23 + store { ptr, i64, i64 } %t40, ptr %a41 + call void @finch_str_drop(ptr %a41) + br label %endif4774 +endif4774: + %t42 = load ptr, ptr %a1 + %t43 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2967, i64 24, i64 0 }, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.2968, i64 11, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = load ptr, ptr %a1 + %t54 = icmp eq ptr %t53, null + br i1 %t54, label %panic4777, label %ok4778 +panic4777: + call void @finch_panic(ptr @.str.2969, i64 2155, ptr @.str.2970) + unreachable +ok4778: + %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 36 + %t56 = load i64, ptr %t55 + call void @finch_str_from_int(ptr %a57, i64 %t56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t52, ptr %a60 + store { ptr, i64, i64 } %t58, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t52, ptr %a62 + call void @finch_str_drop(ptr %a62) + store { ptr, i64, i64 } %t58, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t64, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.2971, i64 9, i64 0 }, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic4779, label %ok4780 +panic4779: + call void @finch_panic(ptr @.str.2972, i64 2155, ptr @.str.2973) + unreachable +ok4780: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 35 + %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t74 = load i64, ptr %t73 + %t75 = load { ptr, i64, i64 }, ptr %t72 + %t76 = extractvalue { ptr, i64, i64 } %t75, 1 + %t77 = icmp uge i64 %t74, %t76 + br i1 %t77, label %range4781, label %inrange4782 +range4781: + call void @finch_panic_index(ptr @.str.2974, i64 2155, i64 %t74, i64 %t76) + unreachable +inrange4782: + %t78 = extractvalue { ptr, i64, i64 } %t75, 0 + %t79 = getelementptr inbounds i64, ptr %t78, i64 %t74 + %t80 = load i64, ptr %t79 + call void @finch_str_from_int(ptr %a81, i64 %t80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t69, ptr %a84 + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t69, ptr %a86 + call void @finch_str_drop(ptr %a86) + store { ptr, i64, i64 } %t82, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.2975, i64 8, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + %t94 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t95 = load i64, ptr %t94 + call void @finch_str_from_int(ptr %a96, i64 %t95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t93, ptr %a99 + store { ptr, i64, i64 } %t97, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t93, ptr %a101 + call void @finch_str_drop(ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.2976, i64 9, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load i64, ptr %a20 + call void @finch_str_from_int(ptr %a110, i64 %t109) + %t111 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t108, ptr %a113 + store { ptr, i64, i64 } %t111, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t108, ptr %a115 + call void @finch_str_drop(ptr %a115) + store { ptr, i64, i64 } %t111, ptr %a116 + call void @finch_str_drop(ptr %a116) + %t117 = load { ptr, i64, i64 }, ptr %a112 + %t118 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t117, ptr %a120 + store { ptr, i64, i64 } %t118, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t117, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.2977, i64 1, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = call i64 @finch.gen.md(ptr %t42, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t128, ptr %a130 + call void @finch_str_drop(ptr %a130) + store i64 %t129, ptr %a131 + %t132 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t133 = load i64, ptr %t132 + %t134 = load ptr, ptr %a1 + %t135 = icmp eq ptr %t134, null + br i1 %t135, label %panic4783, label %ok4784 +panic4783: + call void @finch_panic(ptr @.str.2978, i64 2156, ptr @.str.2979) + unreachable +ok4784: + %t136 = getelementptr inbounds %S.gen.Gen, ptr %t134, i32 0, i32 37 + store i64 %t133, ptr %t136 + %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t138 = load i64, ptr %t137 + %t139 = load ptr, ptr %a1 + %t140 = icmp eq ptr %t139, null + br i1 %t140, label %panic4785, label %ok4786 +panic4785: + call void @finch_panic(ptr @.str.2980, i64 2157, ptr @.str.2981) + unreachable +ok4786: + %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 38 + store i64 %t138, ptr %t141 + %t142 = load ptr, ptr %a1 + %t143 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.2982, i64 41, i64 0 }, ptr %a145 + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a144 + store { ptr, i64, i64 } %t147, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.2983, i64 12, i64 0 }, ptr %a150 + call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) + store { ptr, i64, i64 } %t147, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a148 + %t153 = load i64, ptr %a131 + call void @finch_str_from_int(ptr %a154, i64 %t153) + %t155 = load { ptr, i64, i64 }, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a157 + store { ptr, i64, i64 } %t155, ptr %a158 + call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) + store { ptr, i64, i64 } %t152, ptr %a159 + call void @finch_str_drop(ptr %a159) + store { ptr, i64, i64 } %t155, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a156 + store { ptr, i64, i64 } %t161, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.2984, i64 27, i64 0 }, ptr %a164 + call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) + store { ptr, i64, i64 } %t161, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = load { ptr, i64, i64 }, ptr %a162 + call void @finch.gen.emit(ptr %t142, { ptr, i64, i64 } %t166) + store { ptr, i64, i64 } %t166, ptr %a167 + call void @finch_str_drop(ptr %a167) + call void @finch_str_drop(ptr %a23) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.dbgModule(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca i64, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = mul i64 2, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.2985, i64 20, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.2986, i64 30, i64 0 }, ptr %t5 + %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 2, 1 + %t8 = insertvalue { ptr, i64, i64 } %t7, i64 2, 2 + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic4787, label %ok4788 +panic4787: + call void @finch_panic(ptr @.str.2987, i64 2164, ptr @.str.2988) + unreachable +ok4788: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 33 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + store i64 0, ptr %a15 + br label %for.cond4789 +for.cond4789: + %t16 = load i64, ptr %a15 + %t17 = icmp slt i64 %t16, %t14 + br i1 %t17, label %for.body4790, label %for.end4792 +for.body4790: + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t19 = load i64, ptr %a15 + call void @finch_str_from_int(ptr %a20, i64 %t19) + %t21 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.2989, i64 1, i64 0 }, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.2990, i64 3, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic4793, label %ok4794 +panic4793: + call void @finch_panic(ptr @.str.2991, i64 2165, ptr @.str.2992) + unreachable +ok4794: + %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 33 + %t35 = load i64, ptr %a15 + %t36 = load { ptr, i64, i64 }, ptr %t34 + %t37 = extractvalue { ptr, i64, i64 } %t36, 1 + %t38 = icmp uge i64 %t35, %t37 + br i1 %t38, label %range4795, label %inrange4796 +range4795: + call void @finch_panic_index(ptr @.str.2993, i64 2165, i64 %t35, i64 %t37) + unreachable +inrange4796: + %t39 = extractvalue { ptr, i64, i64 } %t36, 0 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t35 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t31, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t31, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = load i64, ptr %t18 + %t48 = add i64 %t47, 1 + call void @finch_arr_reserve(ptr %a9, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t49 = load ptr, ptr %a9 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 + store { ptr, i64, i64 } %t46, ptr %t50 + store i64 %t48, ptr %t18 + br label %for.step4791 +for.step4791: + %t51 = load i64, ptr %a15 + %t52 = add i64 %t51, 1 + store i64 %t52, ptr %a15 + br label %for.cond4789 +for.end4792: + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2994, i64 1, i64 0 }, ptr %a54 + call void @finch_str_join(ptr %a55, ptr %a9, ptr %a54) + %t56 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.2995, i64 1, i64 0 }, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t56, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.drop.arr_str(ptr %a9) + ret { ptr, i64, i64 } %t61 +} + +define internal void @finch.copy.arr_S_gen_Var(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond4868 +n.cond4868: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body4869, label %n.end4870 +n.body4869: + %t8 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.gen.Var, ptr %t2, i64 %t6 + call void @finch.copy.S_gen_Var(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond4868 +n.end4870: + ret void +} + +define internal void @finch.copy.arr_S_gen_Cleanup(ptr %dst, ptr %src) { +entry: + + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) + ret void +} + +define internal void @finch.copy.S_gen_Scope(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Scope, ptr %src + store %S.gen.Scope %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 0 + call void @finch.copy.arr_S_gen_Var(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_ast_Node(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_int(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_S_gen_Cleanup(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.arr_S_gen_Scope(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond4865 +n.cond4865: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body4866, label %n.end4867 +n.body4866: + %t8 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.gen.Scope, ptr %t2, i64 %t6 + call void @finch.copy.S_gen_Scope(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond4865 +n.end4867: + ret void +} + +define internal void @finch.drop.arr_S_gen_Scope(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond4871 +n.cond4871: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body4872, label %n.end4873 +n.body4872: + %t7 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Scope(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond4871 +n.end4873: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.gen.define(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a16 = alloca %S.gen.FnSig, align 16 + %a17 = alloca %S.gen.FnSig, align 16 + %a20 = alloca %S.gen.FnSig, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca %S.ast.Node, align 16 + %a117 = alloca %S.ast.Node, align 16 + %a119 = alloca %S.ast.Node, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca i64, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca %S.ast.Type, align 16 + %a247 = alloca %S.ast.Type, align 16 + %a248 = alloca %S.ast.Type, align 16 + %a270 = alloca i64, align 16 + %a284 = alloca %S.ast.Type, align 16 + %a285 = alloca %S.ast.Type, align 16 + %a287 = alloca %S.ast.Type, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a450 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a543 = alloca { ptr, i64, i64 }, align 16 + %a544 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4797, label %ok4798 +panic4797: + call void @finch_panic(ptr @.str.2996, i64 2171, ptr @.str.2997) + unreachable +ok4798: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 15 + %t6 = load i64, ptr %a2 + %t7 = load { ptr, i64, i64 }, ptr %t5 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 %t6, %t8 + br i1 %t9, label %range4799, label %inrange4800 +range4799: + call void @finch_panic_index(ptr @.str.2998, i64 2171, i64 %t6, i64 %t8) + unreachable +inrange4800: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %t10, i64 %t6 + %t12 = load %S.gen.FnSig, ptr %t11 + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic4801, label %ok4802 +panic4801: + call void @finch_panic(ptr @.str.2999, i64 2171, ptr @.str.3000) + unreachable +ok4802: + %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 13 + store %S.gen.FnSig %t12, ptr %a16 + call void @finch.copy.S_gen_FnSig(ptr %a17, ptr %a16) + %t18 = load %S.gen.FnSig, ptr %a17 + %t19 = load %S.gen.FnSig, ptr %t15 + store %S.gen.FnSig %t18, ptr %t15 + store %S.gen.FnSig %t19, ptr %a20 + call void @finch.drop.S_gen_FnSig(ptr %a20) + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic4803, label %ok4804 +panic4803: + call void @finch_panic(ptr @.str.3001, i64 2172, ptr @.str.3002) + unreachable +ok4804: + %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 13 + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %t23, i32 0, i32 0 + %t25 = load { ptr, i64, i64 }, ptr %t24 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic4805, label %ok4806 +panic4805: + call void @finch_panic(ptr @.str.3003, i64 2172, ptr @.str.3004) + unreachable +ok4806: + %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 14 + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_copy(ptr %a30, ptr %a29) + %t31 = load { ptr, i64, i64 }, ptr %a30 + %t32 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t31, ptr %t28 + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic4807, label %ok4808 +panic4807: + call void @finch_panic(ptr @.str.3005, i64 2173, ptr @.str.3006) + unreachable +ok4808: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 13 + %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 6 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic4809, label %ok4810 +panic4809: + call void @finch_panic(ptr @.str.3007, i64 2173, ptr @.str.3008) + unreachable +ok4810: + %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 18 + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch.copy.arr_str(ptr %a43, ptr %a42) + %t44 = load { ptr, i64, i64 }, ptr %a43 + %t45 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t44, ptr %t41 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch.drop.arr_str(ptr %a46) + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic4811, label %ok4812 +panic4811: + call void @finch_panic(ptr @.str.3009, i64 2174, ptr @.str.3010) + unreachable +ok4812: + %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 13 + %t50 = getelementptr inbounds %S.gen.FnSig, ptr %t49, i32 0, i32 7 + %t51 = load { ptr, i64, i64 }, ptr %t50 + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic4813, label %ok4814 +panic4813: + call void @finch_panic(ptr @.str.3011, i64 2174, ptr @.str.3012) + unreachable +ok4814: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 19 + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + %t58 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t57, ptr %t54 + store { ptr, i64, i64 } %t58, ptr %a59 + call void @finch.drop.arr_S_ast_Type(ptr %a59) + %t60 = load ptr, ptr %a1 + %t61 = icmp eq ptr %t60, null + br i1 %t61, label %panic4815, label %ok4816 +panic4815: + call void @finch_panic(ptr @.str.3014, i64 2175, ptr @.str.3015) + unreachable +ok4816: + %t62 = getelementptr inbounds %S.gen.Gen, ptr %t60, i32 0, i32 20 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } { ptr @.str.3013, i64 0, i64 0 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic4817, label %ok4818 +panic4817: + call void @finch_panic(ptr @.str.3016, i64 2176, ptr @.str.3017) + unreachable +ok4818: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 13 + %t68 = getelementptr inbounds %S.gen.FnSig, ptr %t67, i32 0, i32 7 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = icmp sgt i64 %t70, 0 + br i1 %t71, label %then4819, label %endif4821 +then4819: + %t72 = load ptr, ptr %a1 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic4822, label %ok4823 +panic4822: + call void @finch_panic(ptr @.str.3019, i64 2177, ptr @.str.3020) + unreachable +ok4823: + %t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 13 + %t75 = getelementptr inbounds %S.gen.FnSig, ptr %t74, i32 0, i32 8 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } { ptr @.str.3018, i64 17, i64 0 }, ptr %a78 + store { ptr, i64, i64 } %t76, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.3021, i64 1, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic4824, label %ok4825 +panic4824: + call void @finch_panic(ptr @.str.3022, i64 2177, ptr @.str.3023) + unreachable +ok4825: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 20 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t85, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + call void @finch_str_drop(ptr %a90) + br label %endif4821 +endif4821: + %t91 = load ptr, ptr %a1 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic4826, label %ok4827 +panic4826: + call void @finch_panic(ptr @.str.3024, i64 2179, ptr @.str.3025) + unreachable +ok4827: + %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 0 + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic4828, label %ok4829 +panic4828: + call void @finch_panic(ptr @.str.3026, i64 2179, ptr @.str.3027) + unreachable +ok4829: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 13 + %t97 = getelementptr inbounds %S.gen.FnSig, ptr %t96, i32 0, i32 16 + %t98 = load i64, ptr %t97 + %t99 = load { ptr, i64, i64 }, ptr %t93 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 %t98, %t100 + br i1 %t101, label %range4830, label %inrange4831 +range4830: + call void @finch_panic_index(ptr @.str.3028, i64 2179, i64 %t98, i64 %t100) + unreachable +inrange4831: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Program, ptr %t102, i64 %t98 + %t104 = getelementptr inbounds %S.ast.Program, ptr %t103, i32 0, i32 8 + %t105 = load ptr, ptr %a1 + %t106 = icmp eq ptr %t105, null + br i1 %t106, label %panic4832, label %ok4833 +panic4832: + call void @finch_panic(ptr @.str.3029, i64 2179, ptr @.str.3030) + unreachable +ok4833: + %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 13 + %t108 = getelementptr inbounds %S.gen.FnSig, ptr %t107, i32 0, i32 17 + %t109 = load i64, ptr %t108 + %t110 = load { ptr, i64, i64 }, ptr %t104 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range4834, label %inrange4835 +range4834: + call void @finch_panic_index(ptr @.str.3031, i64 2179, i64 %t109, i64 %t111) + unreachable +inrange4835: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds %S.ast.Node, ptr %t113, i64 %t109 + %t115 = load %S.ast.Node, ptr %t114 + store %S.ast.Node %t115, ptr %a116 + call void @finch.copy.S_ast_Node(ptr %a117, ptr %a116) + %t118 = load %S.ast.Node, ptr %a117 + store %S.ast.Node %t118, ptr %a119 + store { ptr, i64, i64 } zeroinitializer, ptr %a120 + %t121 = load { ptr, i64, i64 }, ptr %a120 + %t122 = load ptr, ptr %a1 + %t123 = icmp eq ptr %t122, null + br i1 %t123, label %panic4836, label %ok4837 +panic4836: + call void @finch_panic(ptr @.str.3032, i64 2181, ptr @.str.3033) + unreachable +ok4837: + %t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 4 + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch.copy.arr_str(ptr %a126, ptr %a125) + %t127 = load { ptr, i64, i64 }, ptr %a126 + %t128 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t127, ptr %t124 + store { ptr, i64, i64 } %t128, ptr %a129 + call void @finch.drop.arr_str(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a120 + %t131 = load ptr, ptr %a1 + %t132 = icmp eq ptr %t131, null + br i1 %t132, label %panic4838, label %ok4839 +panic4838: + call void @finch_panic(ptr @.str.3034, i64 2182, ptr @.str.3035) + unreachable +ok4839: + %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 5 + store { ptr, i64, i64 } %t130, ptr %a134 + call void @finch.copy.arr_str(ptr %a135, ptr %a134) + %t136 = load { ptr, i64, i64 }, ptr %a135 + %t137 = load { ptr, i64, i64 }, ptr %t133 + store { ptr, i64, i64 } %t136, ptr %t133 + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch.drop.arr_str(ptr %a138) + %t139 = load ptr, ptr %a1 + %t140 = icmp eq ptr %t139, null + br i1 %t140, label %panic4840, label %ok4841 +panic4840: + call void @finch_panic(ptr @.str.3036, i64 2183, ptr @.str.3037) + unreachable +ok4841: + %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 6 + store i64 0, ptr %t141 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic4842, label %ok4843 +panic4842: + call void @finch_panic(ptr @.str.3038, i64 2184, ptr @.str.3039) + unreachable +ok4843: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 9 + store i1 false, ptr %t144 + %t145 = load ptr, ptr %a1 + %t146 = icmp eq ptr %t145, null + br i1 %t146, label %panic4844, label %ok4845 +panic4844: + call void @finch_panic(ptr @.str.3040, i64 2185, ptr @.str.3041) + unreachable +ok4845: + %t147 = getelementptr inbounds %S.gen.Gen, ptr %t145, i32 0, i32 25 + store i64 0, ptr %t147 + %t148 = load ptr, ptr %a1 + %t149 = icmp eq ptr %t148, null + br i1 %t149, label %panic4846, label %ok4847 +panic4846: + call void @finch_panic(ptr @.str.3042, i64 2186, ptr @.str.3043) + unreachable +ok4847: + %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 36 + store i64 -1, ptr %t150 + store i64 -1, ptr %a151 + %t152 = load ptr, ptr %a1 + %t153 = icmp eq ptr %t152, null + br i1 %t153, label %panic4848, label %ok4849 +panic4848: + call void @finch_panic(ptr @.str.3044, i64 2188, ptr @.str.3045) + unreachable +ok4849: + %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 30 + %t155 = load i1, ptr %t154 + br i1 %t155, label %then4850, label %endif4852 +then4850: + %t156 = load ptr, ptr %a1 + %t157 = load %S.ast.Node, ptr %a119 + %t158 = call i64 @finch.gen.dbgSubprogram(ptr %t156, %S.ast.Node %t157) + store i64 %t158, ptr %a151 + %t159 = load i64, ptr %a151 + %t160 = load ptr, ptr %a1 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic4853, label %ok4854 +panic4853: + call void @finch_panic(ptr @.str.3046, i64 2190, ptr @.str.3047) + unreachable +ok4854: + %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 36 + store i64 %t159, ptr %t162 + %t163 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 11 + %t164 = load i64, ptr %t163 + %t165 = load ptr, ptr %a1 + %t166 = icmp eq ptr %t165, null + br i1 %t166, label %panic4855, label %ok4856 +panic4855: + call void @finch_panic(ptr @.str.3048, i64 2191, ptr @.str.3049) + unreachable +ok4856: + %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 37 + store i64 %t164, ptr %t167 + %t168 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 12 + %t169 = load i64, ptr %t168 + %t170 = load ptr, ptr %a1 + %t171 = icmp eq ptr %t170, null + br i1 %t171, label %panic4857, label %ok4858 +panic4857: + call void @finch_panic(ptr @.str.3050, i64 2192, ptr @.str.3051) + unreachable +ok4858: + %t172 = getelementptr inbounds %S.gen.Gen, ptr %t170, i32 0, i32 38 + store i64 %t169, ptr %t172 + br label %endif4852 +endif4852: + %t173 = load ptr, ptr %a1 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic4859, label %ok4860 +panic4859: + call void @finch_panic(ptr @.str.3052, i64 2194, ptr @.str.3053) + unreachable +ok4860: + %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 44 + store i1 false, ptr %t175 + %t176 = load ptr, ptr %a1 + %t177 = icmp eq ptr %t176, null + br i1 %t177, label %panic4861, label %ok4862 +panic4861: + call void @finch_panic(ptr @.str.3054, i64 2195, ptr @.str.3055) + unreachable +ok4862: + %t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 46 + store i64 0, ptr %t178 + store { ptr, i64, i64 } zeroinitializer, ptr %a179 + %t180 = load { ptr, i64, i64 }, ptr %a179 + %t181 = load ptr, ptr %a1 + %t182 = icmp eq ptr %t181, null + br i1 %t182, label %panic4863, label %ok4864 +panic4863: + call void @finch_panic(ptr @.str.3056, i64 2197, ptr @.str.3057) + unreachable +ok4864: + %t183 = getelementptr inbounds %S.gen.Gen, ptr %t181, i32 0, i32 10 + store { ptr, i64, i64 } %t180, ptr %a184 + call void @finch.copy.arr_S_gen_Scope(ptr %a185, ptr %a184) + %t186 = load { ptr, i64, i64 }, ptr %a185 + %t187 = load { ptr, i64, i64 }, ptr %t183 + store { ptr, i64, i64 } %t186, ptr %t183 + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch.drop.arr_S_gen_Scope(ptr %a188) + %t189 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t189) + store { ptr, i64, i64 } zeroinitializer, ptr %a190 + %t191 = load ptr, ptr %a1 + %t192 = icmp eq ptr %t191, null + br i1 %t192, label %panic4874, label %ok4875 +panic4874: + call void @finch_panic(ptr @.str.3058, i64 2200, ptr @.str.3059) + unreachable +ok4875: + %t193 = getelementptr inbounds %S.gen.Gen, ptr %t191, i32 0, i32 13 + %t194 = getelementptr inbounds %S.gen.FnSig, ptr %t193, i32 0, i32 2 + %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 + %t196 = load i64, ptr %t195 + %t197 = icmp sgt i64 %t196, 0 + br i1 %t197, label %then4876, label %endif4878 +then4876: + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 + %t199 = load i64, ptr %t198 + %t200 = add i64 %t199, 1 + call void @finch_arr_reserve(ptr %a190, i64 %t200, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t201 = load ptr, ptr %a190 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i64 %t199 + store { ptr, i64, i64 } { ptr @.str.3060, i64 9, i64 0 }, ptr %t202 + store i64 %t200, ptr %t198 + store { ptr, i64, i64 } { ptr @.str.3061, i64 6, i64 0 }, ptr %a203 + %t204 = load ptr, ptr %a1 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic4879, label %ok4880 +panic4879: + call void @finch_panic(ptr @.str.3062, i64 2204, ptr @.str.3063) + unreachable +ok4880: + %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 13 + %t207 = getelementptr inbounds %S.gen.FnSig, ptr %t206, i32 0, i32 4 + %t208 = load i1, ptr %t207 + br i1 %t208, label %then4881, label %endif4883 +then4881: + %t209 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.3064, i64 4, i64 0 }, ptr %a203 + store { ptr, i64, i64 } %t209, ptr %a210 + call void @finch_str_drop(ptr %a210) + br label %endif4883 +endif4883: + %t211 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t211, ptr %a212 + call void @finch_str_copy(ptr %a213, ptr %a212) + %t214 = load { ptr, i64, i64 }, ptr %a213 + %t215 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t214, 0 + %t216 = load ptr, ptr %a1 + %t217 = icmp eq ptr %t216, null + br i1 %t217, label %panic4884, label %ok4885 +panic4884: + call void @finch_panic(ptr @.str.3065, i64 2207, ptr @.str.3066) + unreachable +ok4885: + %t218 = getelementptr inbounds %S.gen.Gen, ptr %t216, i32 0, i32 13 + %t219 = getelementptr inbounds %S.gen.FnSig, ptr %t218, i32 0, i32 2 + %t220 = load { ptr, i64, i64 }, ptr %t219 + store { ptr, i64, i64 } %t220, ptr %a221 + call void @finch_str_copy(ptr %a222, ptr %a221) + %t223 = load { ptr, i64, i64 }, ptr %a222 + %t224 = insertvalue %S.ast.Type %t215, { ptr, i64, i64 } %t223, 2 + %t225 = load ptr, ptr %a1 + %t226 = icmp eq ptr %t225, null + br i1 %t226, label %panic4886, label %ok4887 +panic4886: + call void @finch_panic(ptr @.str.3067, i64 2207, ptr @.str.3068) + unreachable +ok4887: + %t227 = getelementptr inbounds %S.gen.Gen, ptr %t225, i32 0, i32 13 + %t228 = getelementptr inbounds %S.gen.FnSig, ptr %t227, i32 0, i32 3 + %t229 = load { ptr, i64, i64 }, ptr %t228 + store { ptr, i64, i64 } %t229, ptr %a230 + call void @finch_str_copy(ptr %a231, ptr %a230) + %t232 = load { ptr, i64, i64 }, ptr %a231 + %t233 = insertvalue %S.ast.Type %t224, { ptr, i64, i64 } %t232, 3 + store %S.ast.Type %t233, ptr %a234 + %t235 = load ptr, ptr %a1 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic4888, label %ok4889 +panic4888: + call void @finch_panic(ptr @.str.3069, i64 2208, ptr @.str.3070) + unreachable +ok4889: + %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 10 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = extractvalue { ptr, i64, i64 } %t238, 1 + %t240 = icmp uge i64 0, %t239 + br i1 %t240, label %range4890, label %inrange4891 +range4890: + call void @finch_panic_index(ptr @.str.3071, i64 2208, i64 0, i64 %t239) + unreachable +inrange4891: + %t241 = extractvalue { ptr, i64, i64 } %t238, 0 + %t242 = getelementptr inbounds %S.gen.Scope, ptr %t241, i64 0 + %t243 = getelementptr inbounds %S.gen.Scope, ptr %t242, i32 0, i32 0 + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 + %t245 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } { ptr @.str.3072, i64 4, i64 0 }, 0 + %t246 = load %S.ast.Type, ptr %a234 + store %S.ast.Type %t246, ptr %a247 + call void @finch.copy.S_ast_Type(ptr %a248, ptr %a247) + %t249 = load %S.ast.Type, ptr %a248 + %t250 = insertvalue %S.gen.Var %t245, %S.ast.Type %t249, 1 + %t251 = insertvalue %S.gen.Var %t250, { ptr, i64, i64 } { ptr @.str.3073, i64 5, i64 0 }, 2 + %t252 = insertvalue %S.gen.Var %t251, i1 false, 3 + %t253 = load i64, ptr %t244 + %t254 = add i64 %t253, 1 + call void @finch_arr_reserve(ptr %t243, i64 %t254, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) + %t255 = load ptr, ptr %t243 + %t256 = getelementptr inbounds %S.gen.Var, ptr %t255, i64 %t253 + store %S.gen.Var %t252, ptr %t256 + store i64 %t254, ptr %t244 + %t257 = load ptr, ptr %a1 + %t258 = icmp eq ptr %t257, null + br i1 %t258, label %panic4892, label %ok4893 +panic4892: + call void @finch_panic(ptr @.str.3074, i64 2209, ptr @.str.3075) + unreachable +ok4893: + %t259 = getelementptr inbounds %S.gen.Gen, ptr %t257, i32 0, i32 30 + %t260 = load i1, ptr %t259 + br i1 %t260, label %then4894, label %endif4896 +then4894: + %t261 = load ptr, ptr %a1 + %t262 = load %S.ast.Node, ptr %a119 + %t263 = load %S.ast.Type, ptr %a234 + call void @finch.gen.dbgVariable(ptr %t261, %S.ast.Node %t262, { ptr, i64, i64 } { ptr @.str.3076, i64 4, i64 0 }, %S.ast.Type %t263, { ptr, i64, i64 } { ptr @.str.3077, i64 5, i64 0 }) + br label %endif4896 +endif4896: + call void @finch.drop.S_ast_Type(ptr %a234) + call void @finch_str_drop(ptr %a203) + br label %endif4878 +endif4878: + %t264 = load ptr, ptr %a1 + %t265 = icmp eq ptr %t264, null + br i1 %t265, label %panic4897, label %ok4898 +panic4897: + call void @finch_panic(ptr @.str.3078, i64 2214, ptr @.str.3079) + unreachable +ok4898: + %t266 = getelementptr inbounds %S.gen.Gen, ptr %t264, i32 0, i32 13 + %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i32 0, i32 13 + %t268 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i32 0, i32 1 + %t269 = load i64, ptr %t268 + store i64 0, ptr %a270 + br label %for.cond4899 +for.cond4899: + %t271 = load i64, ptr %a270 + %t272 = icmp slt i64 %t271, %t269 + br i1 %t272, label %for.body4900, label %for.end4902 +for.body4900: + %t273 = load ptr, ptr %a1 + %t274 = icmp eq ptr %t273, null + br i1 %t274, label %panic4903, label %ok4904 +panic4903: + call void @finch_panic(ptr @.str.3080, i64 2215, ptr @.str.3081) + unreachable +ok4904: + %t275 = getelementptr inbounds %S.gen.Gen, ptr %t273, i32 0, i32 13 + %t276 = getelementptr inbounds %S.gen.FnSig, ptr %t275, i32 0, i32 13 + %t277 = load i64, ptr %a270 + %t278 = load { ptr, i64, i64 }, ptr %t276 + %t279 = extractvalue { ptr, i64, i64 } %t278, 1 + %t280 = icmp uge i64 %t277, %t279 + br i1 %t280, label %range4905, label %inrange4906 +range4905: + call void @finch_panic_index(ptr @.str.3082, i64 2215, i64 %t277, i64 %t279) + unreachable +inrange4906: + %t281 = extractvalue { ptr, i64, i64 } %t278, 0 + %t282 = getelementptr inbounds %S.ast.Type, ptr %t281, i64 %t277 + %t283 = load %S.ast.Type, ptr %t282 + store %S.ast.Type %t283, ptr %a284 + call void @finch.copy.S_ast_Type(ptr %a285, ptr %a284) + %t286 = load %S.ast.Type, ptr %a285 + store %S.ast.Type %t286, ptr %a287 + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 + %t289 = load ptr, ptr %a1 + %t290 = load %S.ast.Type, ptr %a287 + %t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t289, %S.ast.Type %t290) + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.3083, i64 3, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load i64, ptr %a270 + call void @finch_str_from_int(ptr %a298, i64 %t297) + %t299 = load { ptr, i64, i64 }, ptr %a298 + store { ptr, i64, i64 } %t296, ptr %a301 + store { ptr, i64, i64 } %t299, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t296, ptr %a303 + call void @finch_str_drop(ptr %a303) + store { ptr, i64, i64 } %t299, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load { ptr, i64, i64 }, ptr %a300 + %t306 = load i64, ptr %t288 + %t307 = add i64 %t306, 1 + call void @finch_arr_reserve(ptr %a190, i64 %t307, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t308 = load ptr, ptr %a190 + %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t306 + store { ptr, i64, i64 } %t305, ptr %t309 + store i64 %t307, ptr %t288 + %t310 = load i64, ptr %a270 + call void @finch_str_from_int(ptr %a311, i64 %t310) + %t312 = load { ptr, i64, i64 }, ptr %a311 + store { ptr, i64, i64 } { ptr @.str.3084, i64 2, i64 0 }, ptr %a314 + store { ptr, i64, i64 } %t312, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + store { ptr, i64, i64 } %t312, ptr %a316 + call void @finch_str_drop(ptr %a316) + %t317 = load { ptr, i64, i64 }, ptr %a313 + store { ptr, i64, i64 } %t317, ptr %a318 + %t319 = load ptr, ptr %a1 + %t320 = load %S.ast.Type, ptr %a287 + %t321 = call i1 @finch.gen.owning(ptr %t319, %S.ast.Type %t320) + br label %logic.from4907 +logic.from4907: + br i1 %t321, label %logic.rhs4908, label %logic.end4909 +logic.rhs4908: + %t322 = load ptr, ptr %a1 + %t323 = icmp eq ptr %t322, null + br i1 %t323, label %panic4910, label %ok4911 +panic4910: + call void @finch_panic(ptr @.str.3085, i64 2218, ptr @.str.3086) + unreachable +ok4911: + %t324 = getelementptr inbounds %S.gen.Gen, ptr %t322, i32 0, i32 13 + %t325 = getelementptr inbounds %S.gen.FnSig, ptr %t324, i32 0, i32 15 + %t326 = load i64, ptr %a270 + %t327 = load { ptr, i64, i64 }, ptr %t325 + %t328 = extractvalue { ptr, i64, i64 } %t327, 1 + %t329 = icmp uge i64 %t326, %t328 + br i1 %t329, label %range4912, label %inrange4913 +range4912: + call void @finch_panic_index(ptr @.str.3087, i64 2218, i64 %t326, i64 %t328) + unreachable +inrange4913: + %t330 = extractvalue { ptr, i64, i64 } %t327, 0 + %t331 = getelementptr inbounds i1, ptr %t330, i64 %t326 + %t332 = load i1, ptr %t331 + %t333 = xor i1 %t332, true + br label %logic.rend4914 +logic.rend4914: + br label %logic.end4909 +logic.end4909: + %t334 = phi i1 [ false, %logic.from4907 ], [ %t333, %logic.rend4914 ] + br i1 %t334, label %then4915, label %endif4917 +then4915: + %t335 = load ptr, ptr %a1 + %t336 = load { ptr, i64, i64 }, ptr %a318 + %t337 = load %S.ast.Type, ptr %a287 + %t338 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t335, { ptr, i64, i64 } %t336, %S.ast.Type %t337) + %t339 = load { ptr, i64, i64 }, ptr %a318 + store { ptr, i64, i64 } %t338, ptr %a318 + store { ptr, i64, i64 } %t339, ptr %a340 + call void @finch_str_drop(ptr %a340) + br label %endif4917 +endif4917: + %t341 = load i64, ptr %a270 + %t342 = add i64 %t341, 1 + %t343 = load ptr, ptr %a1 + %t344 = icmp eq ptr %t343, null + br i1 %t344, label %panic4918, label %ok4919 +panic4918: + call void @finch_panic(ptr @.str.3088, i64 2221, ptr @.str.3089) + unreachable +ok4919: + %t345 = getelementptr inbounds %S.gen.Gen, ptr %t343, i32 0, i32 39 + store i64 %t342, ptr %t345 + %t346 = load ptr, ptr %a1 + %t347 = icmp eq ptr %t346, null + br i1 %t347, label %panic4920, label %ok4921 +panic4920: + call void @finch_panic(ptr @.str.3090, i64 2222, ptr @.str.3091) + unreachable +ok4921: + %t348 = getelementptr inbounds %S.gen.Gen, ptr %t346, i32 0, i32 13 + %t349 = getelementptr inbounds %S.gen.FnSig, ptr %t348, i32 0, i32 2 + %t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i32 0, i32 1 + %t351 = load i64, ptr %t350 + %t352 = icmp sgt i64 %t351, 0 + br i1 %t352, label %then4922, label %endif4924 +then4922: + %t353 = load i64, ptr %a270 + %t354 = add i64 %t353, 2 + %t355 = load ptr, ptr %a1 + %t356 = icmp eq ptr %t355, null + br i1 %t356, label %panic4925, label %ok4926 +panic4925: + call void @finch_panic(ptr @.str.3092, i64 2223, ptr @.str.3093) + unreachable +ok4926: + %t357 = getelementptr inbounds %S.gen.Gen, ptr %t355, i32 0, i32 39 + store i64 %t354, ptr %t357 + br label %endif4924 +endif4924: + %t358 = load ptr, ptr %a1 + %t359 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 + %t360 = load i64, ptr %a270 + %t361 = load { ptr, i64, i64 }, ptr %t359 + %t362 = extractvalue { ptr, i64, i64 } %t361, 1 + %t363 = icmp uge i64 %t360, %t362 + br i1 %t363, label %range4927, label %inrange4928 +range4927: + call void @finch_panic_index(ptr @.str.3094, i64 2225, i64 %t360, i64 %t362) + unreachable +inrange4928: + %t364 = extractvalue { ptr, i64, i64 } %t361, 0 + %t365 = getelementptr inbounds %S.ast.Node, ptr %t364, i64 %t360 + %t366 = load %S.ast.Node, ptr %t365 + %t367 = load ptr, ptr %a1 + %t368 = icmp eq ptr %t367, null + br i1 %t368, label %panic4929, label %ok4930 +panic4929: + call void @finch_panic(ptr @.str.3095, i64 2225, ptr @.str.3096) + unreachable +ok4930: + %t369 = getelementptr inbounds %S.gen.Gen, ptr %t367, i32 0, i32 13 + %t370 = getelementptr inbounds %S.gen.FnSig, ptr %t369, i32 0, i32 14 + %t371 = load i64, ptr %a270 + %t372 = load { ptr, i64, i64 }, ptr %t370 + %t373 = extractvalue { ptr, i64, i64 } %t372, 1 + %t374 = icmp uge i64 %t371, %t373 + br i1 %t374, label %range4931, label %inrange4932 +range4931: + call void @finch_panic_index(ptr @.str.3097, i64 2225, i64 %t371, i64 %t373) + unreachable +inrange4932: + %t375 = extractvalue { ptr, i64, i64 } %t372, 0 + %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t371 + %t377 = load { ptr, i64, i64 }, ptr %t376 + %t378 = load %S.ast.Type, ptr %a287 + %t379 = load { ptr, i64, i64 }, ptr %a318 + %t380 = load ptr, ptr %a1 + %t381 = load %S.ast.Type, ptr %a287 + %t382 = call i1 @finch.gen.owning(ptr %t380, %S.ast.Type %t381) + br label %logic.from4933 +logic.from4933: + br i1 %t382, label %logic.rhs4934, label %logic.end4935 +logic.rhs4934: + %t383 = load ptr, ptr %a1 + %t384 = icmp eq ptr %t383, null + br i1 %t384, label %panic4936, label %ok4937 +panic4936: + call void @finch_panic(ptr @.str.3098, i64 2225, ptr @.str.3099) + unreachable +ok4937: + %t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 13 + %t386 = getelementptr inbounds %S.gen.FnSig, ptr %t385, i32 0, i32 15 + %t387 = load i64, ptr %a270 + %t388 = load { ptr, i64, i64 }, ptr %t386 + %t389 = extractvalue { ptr, i64, i64 } %t388, 1 + %t390 = icmp uge i64 %t387, %t389 + br i1 %t390, label %range4938, label %inrange4939 +range4938: + call void @finch_panic_index(ptr @.str.3100, i64 2225, i64 %t387, i64 %t389) + unreachable +inrange4939: + %t391 = extractvalue { ptr, i64, i64 } %t388, 0 + %t392 = getelementptr inbounds i1, ptr %t391, i64 %t387 + %t393 = load i1, ptr %t392 + %t394 = xor i1 %t393, true + br label %logic.rend4940 +logic.rend4940: + br label %logic.end4935 +logic.end4935: + %t395 = phi i1 [ false, %logic.from4933 ], [ %t394, %logic.rend4940 ] + %t396 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t358, %S.ast.Node %t366, { ptr, i64, i64 } %t377, %S.ast.Type %t378, { ptr, i64, i64 } %t379, i1 false, i1 %t395) + store { ptr, i64, i64 } %t396, ptr %a397 + call void @finch_str_drop(ptr %a397) + %t398 = load ptr, ptr %a1 + %t399 = icmp eq ptr %t398, null + br i1 %t399, label %panic4941, label %ok4942 +panic4941: + call void @finch_panic(ptr @.str.3101, i64 2226, ptr @.str.3102) + unreachable +ok4942: + %t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 39 + store i64 0, ptr %t400 + call void @finch_str_drop(ptr %a318) + call void @finch.drop.S_ast_Type(ptr %a287) + br label %for.step4901 +for.step4901: + %t401 = load i64, ptr %a270 + %t402 = add i64 %t401, 1 + store i64 %t402, ptr %a270 + br label %for.cond4899 +for.end4902: + %t403 = load ptr, ptr %a1 + %t404 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 + %t405 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 + %t406 = getelementptr inbounds { ptr, i64, i64 }, ptr %t405, i32 0, i32 1 + %t407 = load i64, ptr %t406 + %t408 = sub i64 %t407, 1 + %t409 = load { ptr, i64, i64 }, ptr %t404 + %t410 = extractvalue { ptr, i64, i64 } %t409, 1 + %t411 = icmp uge i64 %t408, %t410 + br i1 %t411, label %range4943, label %inrange4944 +range4943: + call void @finch_panic_index(ptr @.str.3103, i64 2228, i64 %t408, i64 %t410) + unreachable +inrange4944: + %t412 = extractvalue { ptr, i64, i64 } %t409, 0 + %t413 = getelementptr inbounds %S.ast.Node, ptr %t412, i64 %t408 + %t414 = load %S.ast.Node, ptr %t413 + call void @finch.gen.block(ptr %t403, %S.ast.Node %t414, i1 false) + %t415 = load ptr, ptr %a1 + %t416 = icmp eq ptr %t415, null + br i1 %t416, label %panic4945, label %ok4946 +panic4945: + call void @finch_panic(ptr @.str.3104, i64 2229, ptr @.str.3105) + unreachable +ok4946: + %t417 = getelementptr inbounds %S.gen.Gen, ptr %t415, i32 0, i32 9 + %t418 = load i1, ptr %t417 + %t419 = xor i1 %t418, true + br i1 %t419, label %then4947, label %endif4949 +then4947: + %t420 = load ptr, ptr %a1 + %t421 = icmp eq ptr %t420, null + br i1 %t421, label %panic4950, label %ok4951 +panic4950: + call void @finch_panic(ptr @.str.3106, i64 2230, ptr @.str.3107) + unreachable +ok4951: + %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 13 + %t423 = getelementptr inbounds %S.gen.FnSig, ptr %t422, i32 0, i32 12 + %t424 = getelementptr inbounds %S.ast.Type, ptr %t423, i32 0, i32 0 + %t425 = load { ptr, i64, i64 }, ptr %t424 + store { ptr, i64, i64 } %t425, ptr %a426 + store { ptr, i64, i64 } { ptr @.str.3108, i64 4, i64 0 }, ptr %a427 + %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) + %t429 = icmp eq i32 %t428, 0 + br i1 %t429, label %then4952, label %endif4954 +then4952: + %t430 = load ptr, ptr %a1 + %t431 = load %S.ast.Node, ptr %a119 + %t432 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 1 + %t433 = load { ptr, i64, i64 }, ptr %t432 + store { ptr, i64, i64 } { ptr @.str.3109, i64 10, i64 0 }, ptr %a435 + store { ptr, i64, i64 } %t433, ptr %a436 + call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) + %t437 = load { ptr, i64, i64 }, ptr %a434 + store { ptr, i64, i64 } %t437, ptr %a439 + store { ptr, i64, i64 } { ptr @.str.3110, i64 38, i64 0 }, ptr %a440 + call void @finch_str_concat(ptr %a438, ptr %a439, ptr %a440) + store { ptr, i64, i64 } %t437, ptr %a441 + call void @finch_str_drop(ptr %a441) + %t442 = load { ptr, i64, i64 }, ptr %a438 + %t443 = load ptr, ptr %a1 + %t444 = icmp eq ptr %t443, null + br i1 %t444, label %panic4955, label %ok4956 +panic4955: + call void @finch_panic(ptr @.str.3111, i64 2231, ptr @.str.3112) + unreachable +ok4956: + %t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 13 + %t446 = getelementptr inbounds %S.gen.FnSig, ptr %t445, i32 0, i32 12 + %t447 = load %S.ast.Type, ptr %t446 + %t448 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t447) + store { ptr, i64, i64 } %t442, ptr %a450 + store { ptr, i64, i64 } %t448, ptr %a451 + call void @finch_str_concat(ptr %a449, ptr %a450, ptr %a451) + store { ptr, i64, i64 } %t442, ptr %a452 + call void @finch_str_drop(ptr %a452) + store { ptr, i64, i64 } %t448, ptr %a453 + call void @finch_str_drop(ptr %a453) + %t454 = load { ptr, i64, i64 }, ptr %a449 + call void @finch.gen.fail(ptr %t430, %S.ast.Node %t431, { ptr, i64, i64 } %t454) + store { ptr, i64, i64 } %t454, ptr %a455 + call void @finch_str_drop(ptr %a455) + br label %endif4954 +endif4954: + %t456 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t456, i64 0) + %t457 = load ptr, ptr %a1 + %t458 = icmp eq ptr %t457, null + br i1 %t458, label %panic4957, label %ok4958 +panic4957: + call void @finch_panic(ptr @.str.3113, i64 2234, ptr @.str.3114) + unreachable +ok4958: + %t459 = getelementptr inbounds %S.gen.Gen, ptr %t457, i32 0, i32 13 + %t460 = getelementptr inbounds %S.gen.FnSig, ptr %t459, i32 0, i32 9 + %t461 = load i1, ptr %t460 + br i1 %t461, label %then4959, label %else4960 +then4959: + %t462 = load ptr, ptr %a1 + %t463 = load ptr, ptr %a1 + %t464 = load ptr, ptr %a1 + %t465 = icmp eq ptr %t464, null + br i1 %t465, label %panic4962, label %ok4963 +panic4962: + call void @finch_panic(ptr @.str.3116, i64 2235, ptr @.str.3117) + unreachable +ok4963: + %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 13 + %t467 = load %S.gen.FnSig, ptr %t466 + %t468 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t463, %S.gen.FnSig %t467) + store { ptr, i64, i64 } { ptr @.str.3115, i64 4, i64 0 }, ptr %a470 + store { ptr, i64, i64 } %t468, ptr %a471 + call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471) + store { ptr, i64, i64 } %t468, ptr %a472 + call void @finch_str_drop(ptr %a472) + %t473 = load { ptr, i64, i64 }, ptr %a469 + store { ptr, i64, i64 } %t473, ptr %a475 + store { ptr, i64, i64 } { ptr @.str.3118, i64 53, i64 0 }, ptr %a476 + call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) + store { ptr, i64, i64 } %t473, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = load { ptr, i64, i64 }, ptr %a474 + call void @finch.gen.emit(ptr %t462, { ptr, i64, i64 } %t478) + store { ptr, i64, i64 } %t478, ptr %a479 + call void @finch_str_drop(ptr %a479) + br label %endif4961 +else4960: + %t480 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t480, { ptr, i64, i64 } { ptr @.str.3119, i64 8, i64 0 }) + br label %endif4961 +endif4961: + br label %endif4949 +endif4949: + store { ptr, i64, i64 } { ptr @.str.3120, i64 0, i64 0 }, ptr %a481 + %t482 = load i64, ptr %a151 + %t483 = icmp sge i64 %t482, 0 + br i1 %t483, label %then4964, label %endif4966 +then4964: + %t484 = load i64, ptr %a151 + call void @finch_str_from_int(ptr %a485, i64 %t484) + %t486 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.3121, i64 7, i64 0 }, ptr %a488 + store { ptr, i64, i64 } %t486, ptr %a489 + call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) + store { ptr, i64, i64 } %t486, ptr %a490 + call void @finch_str_drop(ptr %a490) + %t491 = load { ptr, i64, i64 }, ptr %a487 + %t492 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t491, ptr %a481 + store { ptr, i64, i64 } %t492, ptr %a493 + call void @finch_str_drop(ptr %a493) + br label %endif4966 +endif4966: + %t494 = load ptr, ptr %a1 + %t495 = icmp eq ptr %t494, null + br i1 %t495, label %panic4967, label %ok4968 +panic4967: + call void @finch_panic(ptr @.str.3122, i64 2244, ptr @.str.3123) + unreachable +ok4968: + %t496 = getelementptr inbounds %S.gen.Gen, ptr %t494, i32 0, i32 36 + store i64 -1, ptr %t496 + %t497 = load ptr, ptr %a1 + %t498 = icmp eq ptr %t497, null + br i1 %t498, label %panic4969, label %ok4970 +panic4969: + call void @finch_panic(ptr @.str.3124, i64 2245, ptr @.str.3125) + unreachable +ok4970: + %t499 = getelementptr inbounds %S.gen.Gen, ptr %t497, i32 0, i32 3 + %t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t499, i32 0, i32 1 + %t501 = load ptr, ptr %a1 + %t502 = load ptr, ptr %a1 + %t503 = icmp eq ptr %t502, null + br i1 %t503, label %panic4971, label %ok4972 +panic4971: + call void @finch_panic(ptr @.str.3127, i64 2245, ptr @.str.3128) + unreachable +ok4972: + %t504 = getelementptr inbounds %S.gen.Gen, ptr %t502, i32 0, i32 13 + %t505 = load %S.gen.FnSig, ptr %t504 + %t506 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t501, %S.gen.FnSig %t505) + store { ptr, i64, i64 } { ptr @.str.3126, i64 16, i64 0 }, ptr %a508 + store { ptr, i64, i64 } %t506, ptr %a509 + call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) + store { ptr, i64, i64 } %t506, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a507 + store { ptr, i64, i64 } %t511, ptr %a513 + store { ptr, i64, i64 } { ptr @.str.3129, i64 1, i64 0 }, ptr %a514 + call void @finch_str_concat(ptr %a512, ptr %a513, ptr %a514) + store { ptr, i64, i64 } %t511, ptr %a515 + call void @finch_str_drop(ptr %a515) + %t516 = load { ptr, i64, i64 }, ptr %a512 + %t517 = load ptr, ptr %a1 + %t518 = icmp eq ptr %t517, null + br i1 %t518, label %panic4973, label %ok4974 +panic4973: + call void @finch_panic(ptr @.str.3130, i64 2245, ptr @.str.3131) + unreachable +ok4974: + %t519 = getelementptr inbounds %S.gen.Gen, ptr %t517, i32 0, i32 13 + %t520 = getelementptr inbounds %S.gen.FnSig, ptr %t519, i32 0, i32 11 + %t521 = load { ptr, i64, i64 }, ptr %t520 + store { ptr, i64, i64 } %t516, ptr %a523 + store { ptr, i64, i64 } %t521, ptr %a524 + call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) + store { ptr, i64, i64 } %t516, ptr %a525 + call void @finch_str_drop(ptr %a525) + %t526 = load { ptr, i64, i64 }, ptr %a522 + store { ptr, i64, i64 } %t526, ptr %a528 + store { ptr, i64, i64 } { ptr @.str.3132, i64 1, i64 0 }, ptr %a529 + call void @finch_str_concat(ptr %a527, ptr %a528, ptr %a529) + store { ptr, i64, i64 } %t526, ptr %a530 + call void @finch_str_drop(ptr %a530) + %t531 = load { ptr, i64, i64 }, ptr %a527 + %t532 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3133, i64 2, i64 0 }, ptr %a533 + call void @finch_str_join(ptr %a534, ptr %a190, ptr %a533) + %t535 = load { ptr, i64, i64 }, ptr %a534 + store { ptr, i64, i64 } %t531, ptr %a537 + store { ptr, i64, i64 } %t535, ptr %a538 + call void @finch_str_concat(ptr %a536, ptr %a537, ptr %a538) + store { ptr, i64, i64 } %t531, ptr %a539 + call void @finch_str_drop(ptr %a539) + store { ptr, i64, i64 } %t535, ptr %a540 + call void @finch_str_drop(ptr %a540) + %t541 = load { ptr, i64, i64 }, ptr %a536 + store { ptr, i64, i64 } %t541, ptr %a543 + store { ptr, i64, i64 } { ptr @.str.3134, i64 1, i64 0 }, ptr %a544 + call void @finch_str_concat(ptr %a542, ptr %a543, ptr %a544) + store { ptr, i64, i64 } %t541, ptr %a545 + call void @finch_str_drop(ptr %a545) + %t546 = load { ptr, i64, i64 }, ptr %a542 + %t547 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t546, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + store { ptr, i64, i64 } %t546, ptr %a551 + call void @finch_str_drop(ptr %a551) + %t552 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t552, ptr %a554 + store { ptr, i64, i64 } { ptr @.str.3135, i64 10, i64 0 }, ptr %a555 + call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) + store { ptr, i64, i64 } %t552, ptr %a556 + call void @finch_str_drop(ptr %a556) + %t557 = load { ptr, i64, i64 }, ptr %a553 + %t558 = load ptr, ptr %a1 + %t559 = icmp eq ptr %t558, null + br i1 %t559, label %panic4975, label %ok4976 +panic4975: + call void @finch_panic(ptr @.str.3136, i64 2246, ptr @.str.3137) + unreachable +ok4976: + %t560 = getelementptr inbounds %S.gen.Gen, ptr %t558, i32 0, i32 5 + %t561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t560, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3138, i64 1, i64 0 }, ptr %a562 + call void @finch_str_join(ptr %a563, ptr %t560, ptr %a562) + %t564 = load { ptr, i64, i64 }, ptr %a563 + store { ptr, i64, i64 } %t557, ptr %a566 + store { ptr, i64, i64 } %t564, ptr %a567 + call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) + store { ptr, i64, i64 } %t557, ptr %a568 + call void @finch_str_drop(ptr %a568) + store { ptr, i64, i64 } %t564, ptr %a569 + call void @finch_str_drop(ptr %a569) + %t570 = load { ptr, i64, i64 }, ptr %a565 + store { ptr, i64, i64 } %t570, ptr %a572 + store { ptr, i64, i64 } { ptr @.str.3139, i64 1, i64 0 }, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + store { ptr, i64, i64 } %t570, ptr %a574 + call void @finch_str_drop(ptr %a574) + %t575 = load { ptr, i64, i64 }, ptr %a571 + %t576 = load ptr, ptr %a1 + %t577 = icmp eq ptr %t576, null + br i1 %t577, label %panic4977, label %ok4978 +panic4977: + call void @finch_panic(ptr @.str.3140, i64 2246, ptr @.str.3141) + unreachable +ok4978: + %t578 = getelementptr inbounds %S.gen.Gen, ptr %t576, i32 0, i32 4 + %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t578, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3142, i64 1, i64 0 }, ptr %a580 + call void @finch_str_join(ptr %a581, ptr %t578, ptr %a580) + %t582 = load { ptr, i64, i64 }, ptr %a581 + store { ptr, i64, i64 } %t575, ptr %a584 + store { ptr, i64, i64 } %t582, ptr %a585 + call void @finch_str_concat(ptr %a583, ptr %a584, ptr %a585) + store { ptr, i64, i64 } %t575, ptr %a586 + call void @finch_str_drop(ptr %a586) + store { ptr, i64, i64 } %t582, ptr %a587 + call void @finch_str_drop(ptr %a587) + %t588 = load { ptr, i64, i64 }, ptr %a583 + store { ptr, i64, i64 } %t588, ptr %a590 + store { ptr, i64, i64 } { ptr @.str.3143, i64 3, i64 0 }, ptr %a591 + call void @finch_str_concat(ptr %a589, ptr %a590, ptr %a591) + store { ptr, i64, i64 } %t588, ptr %a592 + call void @finch_str_drop(ptr %a592) + %t593 = load { ptr, i64, i64 }, ptr %a589 + %t594 = load i64, ptr %t500 + %t595 = add i64 %t594, 1 + call void @finch_arr_reserve(ptr %t499, i64 %t595, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t596 = load ptr, ptr %t499 + %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 + store { ptr, i64, i64 } %t593, ptr %t597 + store i64 %t595, ptr %t500 + call void @finch_str_drop(ptr %a481) + call void @finch.drop.arr_str(ptr %a190) + call void @finch.drop.arr_S_gen_Scope(ptr %a179) + call void @finch.drop.arr_str(ptr %a120) + call void @finch.drop.S_ast_Node(ptr %a119) + ret void +} + +define internal void @finch.gen.block(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a7 = alloca i64, align 16 + %a15 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load i1, ptr %a3 + br i1 %t4, label %then4979, label %endif4981 +then4979: + %t5 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t5) + br label %endif4981 +endif4981: + %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + store i64 0, ptr %a7 + br label %each.cond4982 +each.cond4982: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load i64, ptr %a7 + %t11 = icmp slt i64 %t10, %t9 + br i1 %t11, label %each.body4983, label %each.end4985 +each.body4983: + %t12 = load ptr, ptr %t6 + %t13 = getelementptr inbounds %S.ast.Node, ptr %t12, i64 %t10 + %t14 = load %S.ast.Node, ptr %t13 + store %S.ast.Node %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic4986, label %ok4987 +panic4986: + call void @finch_panic(ptr @.str.3144, i64 2256, ptr @.str.3145) + unreachable +ok4987: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 + %t19 = load i1, ptr %t18 + br i1 %t19, label %then4988, label %endif4990 +then4988: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Node, ptr %a15 + call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } { ptr @.str.3146, i64 66, i64 0 }) + br label %endif4990 +endif4990: + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Node, ptr %a15 + call void @finch.gen.stmt(ptr %t22, %S.ast.Node %t23) + br label %each.step4984 +each.step4984: + %t24 = load i64, ptr %a7 + %t25 = add i64 %t24, 1 + store i64 %t25, ptr %a7 + br label %each.cond4982 +each.end4985: + %t26 = load i1, ptr %a3 + br i1 %t26, label %then4991, label %endif4993 +then4991: + %t27 = load ptr, ptr %a1 + call void @finch.gen.endScope(ptr %t27) + br label %endif4993 +endif4993: + ret void +} + +define internal void @finch.copy.S_gen_Loop(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Loop, ptr %src + store %S.gen.Loop %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.drop.S_gen_Loop(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Loop, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Loop, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal void @finch.gen.stmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca %S.gen.Val, align 16 + %a78 = alloca %S.gen.Val, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca %S.gen.Val, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca i64, align 16 + %a189 = alloca %S.ast.Node, align 16 + %a190 = alloca %S.ast.Node, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca %S.gen.Loop, align 16 + %a269 = alloca %S.gen.Loop, align 16 + %a271 = alloca %S.gen.Loop, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t4 = load i64, ptr %t3 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic4994, label %ok4995 +panic4994: + call void @finch_panic(ptr @.str.3147, i64 2267, ptr @.str.3148) + unreachable +ok4995: + %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 37 + store i64 %t4, ptr %t7 + %t8 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t9 = load i64, ptr %t8 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic4996, label %ok4997 +panic4996: + call void @finch_panic(ptr @.str.3149, i64 2268, ptr @.str.3150) + unreachable +ok4997: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 38 + store i64 %t9, ptr %t12 + %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_copy(ptr %a16, ptr %a15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.3151, i64 5, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br i1 %t23, label %then4998, label %else4999 +then4998: + %t24 = load ptr, ptr %a1 + %t25 = load %S.ast.Node, ptr %a2 + call void @finch.gen.block(ptr %t24, %S.ast.Node %t25, i1 true) + br label %endif5000 +else4999: + %t26 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.3152, i64 4, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br i1 %t30, label %then5001, label %else5002 +then5001: + %t31 = load ptr, ptr %a1 + %t32 = load %S.ast.Node, ptr %a2 + call void @finch.gen.declStmt(ptr %t31, %S.ast.Node %t32) + br label %endif5003 +else5002: + %t33 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3153, i64 6, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %then5004, label %else5005 +then5004: + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Node, ptr %a2 + call void @finch.gen.assignStmt(ptr %t38, %S.ast.Node %t39) + br label %endif5006 +else5005: + %t40 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.3154, i64 4, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then5007, label %else5008 +then5007: + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 0, %t47 + br i1 %t48, label %range5010, label %inrange5011 +range5010: + call void @finch_panic_index(ptr @.str.3155, i64 2277, i64 0, i64 %t47) + unreachable +inrange5011: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 0 + %t51 = getelementptr inbounds %S.ast.Node, ptr %t50, i32 0, i32 0 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.3156, i64 2, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then5012, label %else5013 +then5012: + %t57 = load ptr, ptr %a1 + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = extractvalue { ptr, i64, i64 } %t60, 1 + %t62 = icmp uge i64 0, %t61 + br i1 %t62, label %range5015, label %inrange5016 +range5015: + call void @finch_panic_index(ptr @.str.3157, i64 2278, i64 0, i64 %t61) + unreachable +inrange5016: + %t63 = extractvalue { ptr, i64, i64 } %t60, 0 + %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 0 + %t65 = load %S.ast.Node, ptr %t64 + %t66 = call %S.gen.Val @finch.gen.orElse(ptr %t58, %S.ast.Node %t65, i1 true) + call void @finch.gen.release(ptr %t57, %S.gen.Val %t66) + store %S.gen.Val %t66, ptr %a67 + call void @finch.drop.S_gen_Val(ptr %a67) + br label %endif5014 +else5013: + %t68 = load ptr, ptr %a1 + %t69 = load ptr, ptr %a1 + %t70 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t71 = load { ptr, i64, i64 }, ptr %t70 + %t72 = extractvalue { ptr, i64, i64 } %t71, 1 + %t73 = icmp uge i64 0, %t72 + br i1 %t73, label %range5017, label %inrange5018 +range5017: + call void @finch_panic_index(ptr @.str.3158, i64 2280, i64 0, i64 %t72) + unreachable +inrange5018: + %t74 = extractvalue { ptr, i64, i64 } %t71, 0 + %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 0 + %t76 = load %S.ast.Node, ptr %t75 + %t77 = call %S.gen.Val @finch.gen.expr(ptr %t69, %S.ast.Node %t76) + call void @finch.gen.release(ptr %t68, %S.gen.Val %t77) + store %S.gen.Val %t77, ptr %a78 + call void @finch.drop.S_gen_Val(ptr %a78) + br label %endif5014 +endif5014: + br label %endif5009 +else5008: + %t79 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t79, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.3159, i64 5, i64 0 }, ptr %a81 + %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) + %t83 = icmp ne i32 %t82, 0 + br i1 %t83, label %then5019, label %else5020 +then5019: + %t84 = load ptr, ptr %a1 + %t85 = load %S.ast.Node, ptr %a2 + %t86 = call %S.gen.Val @finch.gen.matchGen(ptr %t84, %S.ast.Node %t85, i1 false) + store %S.gen.Val %t86, ptr %a87 + call void @finch.drop.S_gen_Val(ptr %a87) + br label %endif5021 +else5020: + %t88 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t88, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.3160, i64 2, i64 0 }, ptr %a90 + %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then5022, label %else5023 +then5022: + %t93 = load ptr, ptr %a1 + %t94 = load %S.ast.Node, ptr %a2 + call void @finch.gen.ifStmt(ptr %t93, %S.ast.Node %t94) + br label %endif5024 +else5023: + %t95 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.3161, i64 5, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then5025, label %else5026 +then5025: + %t100 = load ptr, ptr %a1 + %t101 = load %S.ast.Node, ptr %a2 + call void @finch.gen.whileStmt(ptr %t100, %S.ast.Node %t101) + br label %endif5027 +else5026: + %t102 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.3162, i64 3, i64 0 }, ptr %a104 + %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) + %t106 = icmp ne i32 %t105, 0 + br i1 %t106, label %then5028, label %else5029 +then5028: + %t107 = load ptr, ptr %a1 + %t108 = load %S.ast.Node, ptr %a2 + call void @finch.gen.forStmt(ptr %t107, %S.ast.Node %t108) + br label %endif5030 +else5029: + %t109 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t109, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.3163, i64 4, i64 0 }, ptr %a111 + %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) + %t113 = icmp ne i32 %t112, 0 + br i1 %t113, label %then5031, label %else5032 +then5031: + %t114 = load ptr, ptr %a1 + %t115 = load %S.ast.Node, ptr %a2 + call void @finch.gen.eachStmt(ptr %t114, %S.ast.Node %t115) + br label %endif5033 +else5032: + %t116 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t116, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.3164, i64 6, i64 0 }, ptr %a118 + %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) + %t120 = icmp ne i32 %t119, 0 + br i1 %t120, label %then5034, label %else5035 +then5034: + %t121 = load ptr, ptr %a1 + %t122 = load %S.ast.Node, ptr %a2 + call void @finch.gen.returnStmt(ptr %t121, %S.ast.Node %t122) + br label %endif5036 +else5035: + %t123 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t123, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.3165, i64 5, i64 0 }, ptr %a125 + %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) + %t127 = icmp ne i32 %t126, 0 + br i1 %t127, label %then5037, label %else5038 +then5037: + %t128 = load ptr, ptr %a1 + %t129 = icmp eq ptr %t128, null + br i1 %t129, label %panic5040, label %ok5041 +panic5040: + call void @finch_panic(ptr @.str.3166, i64 2295, ptr @.str.3167) + unreachable +ok5041: + %t130 = getelementptr inbounds %S.gen.Gen, ptr %t128, i32 0, i32 46 + %t131 = load i64, ptr %t130 + %t132 = icmp sgt i64 %t131, 0 + br i1 %t132, label %then5042, label %endif5044 +then5042: + %t133 = load ptr, ptr %a1 + %t134 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } { ptr @.str.3168, i64 33, i64 0 }) + br label %endif5044 +endif5044: + %t135 = load ptr, ptr %a1 + %t136 = icmp eq ptr %t135, null + br i1 %t136, label %panic5045, label %ok5046 +panic5045: + call void @finch_panic(ptr @.str.3169, i64 2298, ptr @.str.3170) + unreachable +ok5046: + %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 10 + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 + %t139 = load i64, ptr %t138 + %t140 = sub i64 %t139, 1 + store i64 %t140, ptr %a141 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic5047, label %ok5048 +panic5047: + call void @finch_panic(ptr @.str.3171, i64 2299, ptr @.str.3172) + unreachable +ok5048: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 10 + %t145 = load i64, ptr %a141 + %t146 = load { ptr, i64, i64 }, ptr %t144 + %t147 = extractvalue { ptr, i64, i64 } %t146, 1 + %t148 = icmp uge i64 %t145, %t147 + br i1 %t148, label %range5049, label %inrange5050 +range5049: + call void @finch_panic_index(ptr @.str.3173, i64 2299, i64 %t145, i64 %t147) + unreachable +inrange5050: + %t149 = extractvalue { ptr, i64, i64 } %t146, 0 + %t150 = getelementptr inbounds %S.gen.Scope, ptr %t149, i64 %t145 + %t151 = getelementptr inbounds %S.gen.Scope, ptr %t150, i32 0, i32 3 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = insertvalue %S.gen.Cleanup zeroinitializer, i1 true, 0 + %t154 = load ptr, ptr %a1 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic5051, label %ok5052 +panic5051: + call void @finch_panic(ptr @.str.3174, i64 2299, ptr @.str.3175) + unreachable +ok5052: + %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 10 + %t157 = load i64, ptr %a141 + %t158 = load { ptr, i64, i64 }, ptr %t156 + %t159 = extractvalue { ptr, i64, i64 } %t158, 1 + %t160 = icmp uge i64 %t157, %t159 + br i1 %t160, label %range5053, label %inrange5054 +range5053: + call void @finch_panic_index(ptr @.str.3176, i64 2299, i64 %t157, i64 %t159) + unreachable +inrange5054: + %t161 = extractvalue { ptr, i64, i64 } %t158, 0 + %t162 = getelementptr inbounds %S.gen.Scope, ptr %t161, i64 %t157 + %t163 = getelementptr inbounds %S.gen.Scope, ptr %t162, i32 0, i32 1 + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i32 0, i32 1 + %t165 = load i64, ptr %t164 + %t166 = insertvalue %S.gen.Cleanup %t153, i64 %t165, 1 + %t167 = load i64, ptr %t152 + %t168 = add i64 %t167, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t168, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) + %t169 = load ptr, ptr %t151 + %t170 = getelementptr inbounds %S.gen.Cleanup, ptr %t169, i64 %t167 + store %S.gen.Cleanup %t166, ptr %t170 + store i64 %t168, ptr %t152 + %t171 = load ptr, ptr %a1 + %t172 = icmp eq ptr %t171, null + br i1 %t172, label %panic5055, label %ok5056 +panic5055: + call void @finch_panic(ptr @.str.3177, i64 2300, ptr @.str.3178) + unreachable +ok5056: + %t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 10 + %t174 = load i64, ptr %a141 + %t175 = load { ptr, i64, i64 }, ptr %t173 + %t176 = extractvalue { ptr, i64, i64 } %t175, 1 + %t177 = icmp uge i64 %t174, %t176 + br i1 %t177, label %range5057, label %inrange5058 +range5057: + call void @finch_panic_index(ptr @.str.3179, i64 2300, i64 %t174, i64 %t176) + unreachable +inrange5058: + %t178 = extractvalue { ptr, i64, i64 } %t175, 0 + %t179 = getelementptr inbounds %S.gen.Scope, ptr %t178, i64 %t174 + %t180 = getelementptr inbounds %S.gen.Scope, ptr %t179, i32 0, i32 1 + %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t180, i32 0, i32 1 + %t182 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t183 = load { ptr, i64, i64 }, ptr %t182 + %t184 = extractvalue { ptr, i64, i64 } %t183, 1 + %t185 = icmp uge i64 0, %t184 + br i1 %t185, label %range5059, label %inrange5060 +range5059: + call void @finch_panic_index(ptr @.str.3180, i64 2300, i64 0, i64 %t184) + unreachable +inrange5060: + %t186 = extractvalue { ptr, i64, i64 } %t183, 0 + %t187 = getelementptr inbounds %S.ast.Node, ptr %t186, i64 0 + %t188 = load %S.ast.Node, ptr %t187 + store %S.ast.Node %t188, ptr %a189 + call void @finch.copy.S_ast_Node(ptr %a190, ptr %a189) + %t191 = load %S.ast.Node, ptr %a190 + %t192 = load i64, ptr %t181 + %t193 = add i64 %t192, 1 + call void @finch_arr_reserve(ptr %t180, i64 %t193, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t194 = load ptr, ptr %t180 + %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t192 + store %S.ast.Node %t191, ptr %t195 + store i64 %t193, ptr %t181 + %t196 = load ptr, ptr %a1 + %t197 = icmp eq ptr %t196, null + br i1 %t197, label %panic5061, label %ok5062 +panic5061: + call void @finch_panic(ptr @.str.3181, i64 2301, ptr @.str.3182) + unreachable +ok5062: + %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 10 + %t199 = load i64, ptr %a141 + %t200 = load { ptr, i64, i64 }, ptr %t198 + %t201 = extractvalue { ptr, i64, i64 } %t200, 1 + %t202 = icmp uge i64 %t199, %t201 + br i1 %t202, label %range5063, label %inrange5064 +range5063: + call void @finch_panic_index(ptr @.str.3183, i64 2301, i64 %t199, i64 %t201) + unreachable +inrange5064: + %t203 = extractvalue { ptr, i64, i64 } %t200, 0 + %t204 = getelementptr inbounds %S.gen.Scope, ptr %t203, i64 %t199 + %t205 = getelementptr inbounds %S.gen.Scope, ptr %t204, i32 0, i32 2 + %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i32 0, i32 1 + %t207 = load ptr, ptr %a1 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic5065, label %ok5066 +panic5065: + call void @finch_panic(ptr @.str.3184, i64 2301, ptr @.str.3185) + unreachable +ok5066: + %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 25 + %t210 = load i64, ptr %t209 + %t211 = load i64, ptr %t206 + %t212 = add i64 %t211, 1 + call void @finch_arr_reserve(ptr %t205, i64 %t212, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t213 = load ptr, ptr %t205 + %t214 = getelementptr inbounds i64, ptr %t213, i64 %t211 + store i64 %t210, ptr %t214 + store i64 %t212, ptr %t206 + br label %endif5039 +else5038: + %t215 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t215, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.3186, i64 5, i64 0 }, ptr %a217 + %t218 = call i32 @finch_str_eq(ptr %a216, ptr %a217) + %t219 = icmp ne i32 %t218, 0 + br label %logic.from5067 +logic.from5067: + br i1 %t219, label %logic.end5069, label %logic.rhs5068 +logic.rhs5068: + %t220 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t220, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.3187, i64 8, i64 0 }, ptr %a222 + %t223 = call i32 @finch_str_eq(ptr %a221, ptr %a222) + %t224 = icmp ne i32 %t223, 0 + br label %logic.rend5070 +logic.rend5070: + br label %logic.end5069 +logic.end5069: + %t225 = phi i1 [ true, %logic.from5067 ], [ %t224, %logic.rend5070 ] + br i1 %t225, label %then5071, label %else5072 +then5071: + %t226 = load ptr, ptr %a1 + %t227 = icmp eq ptr %t226, null + br i1 %t227, label %panic5074, label %ok5075 +panic5074: + call void @finch_panic(ptr @.str.3188, i64 2303, ptr @.str.3189) + unreachable +ok5075: + %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 46 + %t229 = load i64, ptr %t228 + %t230 = icmp sgt i64 %t229, 0 + br i1 %t230, label %then5076, label %endif5078 +then5076: + %t231 = load ptr, ptr %a1 + %t232 = load %S.ast.Node, ptr %a2 + %t233 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.3190, i64 27, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + %t237 = load { ptr, i64, i64 }, ptr %a234 + call void @finch.gen.fail(ptr %t231, %S.ast.Node %t232, { ptr, i64, i64 } %t237) + store { ptr, i64, i64 } %t237, ptr %a238 + call void @finch_str_drop(ptr %a238) + br label %endif5078 +endif5078: + %t239 = load ptr, ptr %a1 + %t240 = icmp eq ptr %t239, null + br i1 %t240, label %panic5079, label %ok5080 +panic5079: + call void @finch_panic(ptr @.str.3191, i64 2306, ptr @.str.3192) + unreachable +ok5080: + %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 12 + %t242 = getelementptr inbounds { ptr, i64, i64 }, ptr %t241, i32 0, i32 1 + %t243 = load i64, ptr %t242 + %t244 = icmp eq i64 %t243, 0 + br i1 %t244, label %then5081, label %endif5083 +then5081: + %t245 = load ptr, ptr %a1 + %t246 = load %S.ast.Node, ptr %a2 + %t247 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t247, ptr %a249 + store { ptr, i64, i64 } { ptr @.str.3193, i64 31, i64 0 }, ptr %a250 + call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a248 + call void @finch.gen.fail(ptr %t245, %S.ast.Node %t246, { ptr, i64, i64 } %t251) + store { ptr, i64, i64 } %t251, ptr %a252 + call void @finch_str_drop(ptr %a252) + br label %endif5083 +endif5083: + %t253 = load ptr, ptr %a1 + %t254 = icmp eq ptr %t253, null + br i1 %t254, label %panic5084, label %ok5085 +panic5084: + call void @finch_panic(ptr @.str.3194, i64 2309, ptr @.str.3195) + unreachable +ok5085: + %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 12 + %t256 = load ptr, ptr %a1 + %t257 = icmp eq ptr %t256, null + br i1 %t257, label %panic5086, label %ok5087 +panic5086: + call void @finch_panic(ptr @.str.3196, i64 2309, ptr @.str.3197) + unreachable +ok5087: + %t258 = getelementptr inbounds %S.gen.Gen, ptr %t256, i32 0, i32 12 + %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 + %t260 = load i64, ptr %t259 + %t261 = sub i64 %t260, 1 + %t262 = load { ptr, i64, i64 }, ptr %t255 + %t263 = extractvalue { ptr, i64, i64 } %t262, 1 + %t264 = icmp uge i64 %t261, %t263 + br i1 %t264, label %range5088, label %inrange5089 +range5088: + call void @finch_panic_index(ptr @.str.3198, i64 2309, i64 %t261, i64 %t263) + unreachable +inrange5089: + %t265 = extractvalue { ptr, i64, i64 } %t262, 0 + %t266 = getelementptr inbounds %S.gen.Loop, ptr %t265, i64 %t261 + %t267 = load %S.gen.Loop, ptr %t266 + store %S.gen.Loop %t267, ptr %a268 + call void @finch.copy.S_gen_Loop(ptr %a269, ptr %a268) + %t270 = load %S.gen.Loop, ptr %a269 + store %S.gen.Loop %t270, ptr %a271 + %t272 = load ptr, ptr %a1 + %t273 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 3 + %t274 = load i64, ptr %t273 + call void @finch.gen.dropPending(ptr %t272, i64 %t274) + %t275 = load ptr, ptr %a1 + %t276 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 2 + %t277 = load i64, ptr %t276 + call void @finch.gen.unwind(ptr %t275, i64 %t277) + %t278 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t278, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.3199, i64 5, i64 0 }, ptr %a280 + %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) + %t282 = icmp ne i32 %t281, 0 + br i1 %t282, label %then5090, label %else5091 +then5090: + %t283 = load ptr, ptr %a1 + %t284 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 1 + %t285 = load { ptr, i64, i64 }, ptr %t284 + call void @finch.gen.br(ptr %t283, { ptr, i64, i64 } %t285) + br label %endif5092 +else5091: + %t286 = load ptr, ptr %a1 + %t287 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 0 + %t288 = load { ptr, i64, i64 }, ptr %t287 + call void @finch.gen.br(ptr %t286, { ptr, i64, i64 } %t288) + br label %endif5092 +endif5092: + call void @finch.drop.S_gen_Loop(ptr %a271) + br label %endif5073 +else5072: + %t289 = load ptr, ptr %a1 + %t290 = load %S.ast.Node, ptr %a2 + %t291 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.3200, i64 18, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a292 + call void @finch.gen.fail(ptr %t289, %S.ast.Node %t290, { ptr, i64, i64 } %t295) + store { ptr, i64, i64 } %t295, ptr %a296 + call void @finch_str_drop(ptr %a296) + br label %endif5073 +endif5073: + br label %endif5039 +endif5039: + br label %endif5036 +endif5036: + br label %endif5033 +endif5033: + br label %endif5030 +endif5030: + br label %endif5027 +endif5027: + br label %endif5024 +endif5024: + br label %endif5021 +endif5021: + br label %endif5009 +endif5009: + br label %endif5006 +endif5006: + br label %endif5003 +endif5003: + br label %endif5000 +endif5000: + call void @finch_str_drop(ptr %a18) + ret void +} + +define internal void @finch.gen.declStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a15 = alloca %S.gen.Val, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca %S.gen.Val, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca %S.gen.Val, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca %S.gen.Val, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 + %t4 = load i1, ptr %t3 + %t5 = xor i1 %t4, true + br i1 %t5, label %then5093, label %endif5095 +then5093: + %t6 = load ptr, ptr %a1 + %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t8 = load { ptr, i64, i64 }, ptr %t7 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 0, %t9 + br i1 %t10, label %range5096, label %inrange5097 +range5096: + call void @finch_panic_index(ptr @.str.3201, i64 2324, i64 0, i64 %t9) + unreachable +inrange5097: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.ast.Node, ptr %t11, i64 0 + %t13 = load %S.ast.Node, ptr %t12 + %t14 = call %S.gen.Val @finch.gen.expr(ptr %t6, %S.ast.Node %t13) + store %S.gen.Val %t14, ptr %a15 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 + %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.3202, i64 4, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br i1 %t22, label %then5098, label %endif5100 +then5098: + %t23 = load ptr, ptr %a1 + %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t25 = load { ptr, i64, i64 }, ptr %t24 + %t26 = extractvalue { ptr, i64, i64 } %t25, 1 + %t27 = icmp uge i64 0, %t26 + br i1 %t27, label %range5101, label %inrange5102 +range5101: + call void @finch_panic_index(ptr @.str.3203, i64 2326, i64 0, i64 %t26) + unreachable +inrange5102: + %t28 = extractvalue { ptr, i64, i64 } %t25, 0 + %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 + %t30 = load %S.ast.Node, ptr %t29 + call void @finch.gen.fail(ptr %t23, %S.ast.Node %t30, { ptr, i64, i64 } { ptr @.str.3204, i64 46, i64 0 }) + br label %endif5100 +endif5100: + %t31 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3205, i64 4, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %then5103, label %endif5105 +then5103: + %t38 = load ptr, ptr %a1 + %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range5106, label %inrange5107 +range5106: + call void @finch_panic_index(ptr @.str.3206, i64 2329, i64 0, i64 %t41) + unreachable +inrange5107: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 0 + %t45 = load %S.ast.Node, ptr %t44 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store { ptr, i64, i64 } { ptr @.str.3207, i64 34, i64 0 }, ptr %a49 + store { ptr, i64, i64 } %t47, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.3208, i64 7, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + call void @finch.gen.fail(ptr %t38, %S.ast.Node %t45, { ptr, i64, i64 } %t56) + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_drop(ptr %a57) + br label %endif5105 +endif5105: + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Node, ptr %a2 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 + %t63 = load %S.ast.Type, ptr %t62 + %t64 = load ptr, ptr %a1 + %t65 = load %S.gen.Val, ptr %a15 + %t66 = call { ptr, i64, i64 } @finch.gen.own(ptr %t64, %S.gen.Val %t65) + %t67 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t58, %S.ast.Node %t59, { ptr, i64, i64 } %t61, %S.ast.Type %t63, { ptr, i64, i64 } %t66, i1 false, i1 true) + store { ptr, i64, i64 } %t66, ptr %a68 + call void @finch_str_drop(ptr %a68) + store { ptr, i64, i64 } %t67, ptr %a69 + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_gen_Val(ptr %a15) + ret void +endif5095: + %t70 = load ptr, ptr %a1 + %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t72 = load %S.ast.Type, ptr %t71 + %t73 = load %S.ast.Node, ptr %a2 + %t74 = call %S.ast.Type @finch.gen.resolve(ptr %t70, %S.ast.Type %t72, %S.ast.Node %t73) + store %S.ast.Type %t74, ptr %a75 + %t76 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = load i64, ptr %t77 + %t79 = icmp eq i64 %t78, 0 + br i1 %t79, label %then5108, label %endif5110 +then5108: + %t80 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 0 + %t81 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.3209, i64 6, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.from5111 +logic.from5111: + br i1 %t85, label %logic.rhs5112, label %logic.end5113 +logic.rhs5112: + %t86 = load ptr, ptr %a1 + %t87 = load %S.ast.Type, ptr %a75 + %t88 = call i1 @finch.gen.hasDefaults(ptr %t86, %S.ast.Type %t87) + br label %logic.rend5114 +logic.rend5114: + br label %logic.end5113 +logic.end5113: + %t89 = phi i1 [ false, %logic.from5111 ], [ %t88, %logic.rend5114 ] + br i1 %t89, label %then5115, label %endif5117 +then5115: + store { ptr, i64, i64 } zeroinitializer, ptr %a90 + store { ptr, i64, i64 } zeroinitializer, ptr %a91 + %t92 = load ptr, ptr %a1 + %t93 = load ptr, ptr %a1 + %t94 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 3 + %t95 = load { ptr, i64, i64 }, ptr %t94 + %t96 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 2 + %t97 = load { ptr, i64, i64 }, ptr %t96 + %t98 = call i64 @finch.gen.findStruct(ptr %t93, { ptr, i64, i64 } %t95, { ptr, i64, i64 } %t97) + %t99 = load { ptr, i64, i64 }, ptr %a90 + %t100 = load { ptr, i64, i64 }, ptr %a91 + %t101 = load %S.ast.Node, ptr %a2 + %t102 = call %S.gen.Val @finch.gen.construct(ptr %t92, i64 %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t100, %S.ast.Node %t101) + store %S.gen.Val %t102, ptr %a103 + %t104 = load ptr, ptr %a1 + %t105 = load %S.ast.Node, ptr %a2 + %t106 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t107 = load { ptr, i64, i64 }, ptr %t106 + %t108 = load %S.ast.Type, ptr %a75 + %t109 = getelementptr inbounds %S.gen.Val, ptr %a103, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + %t111 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t104, %S.ast.Node %t105, { ptr, i64, i64 } %t107, %S.ast.Type %t108, { ptr, i64, i64 } %t110, i1 false, i1 true) + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + call void @finch.drop.S_gen_Val(ptr %a103) + call void @finch.drop.arr_str(ptr %a91) + call void @finch.drop.arr_S_ast_Node(ptr %a90) + call void @finch.drop.S_ast_Type(ptr %a75) + ret void +endif5117: + %t113 = load ptr, ptr %a1 + %t114 = load %S.ast.Node, ptr %a2 + %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t116 = load { ptr, i64, i64 }, ptr %t115 + %t117 = load %S.ast.Type, ptr %a75 + %t118 = load %S.ast.Type, ptr %a75 + %t119 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t118) + %t120 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t113, %S.ast.Node %t114, { ptr, i64, i64 } %t116, %S.ast.Type %t117, { ptr, i64, i64 } %t119, i1 false, i1 true) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t120, ptr %a122 + call void @finch_str_drop(ptr %a122) + call void @finch.drop.S_ast_Type(ptr %a75) + ret void +endif5110: + %t123 = load ptr, ptr %a1 + %t124 = load ptr, ptr %a1 + %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t126 = load { ptr, i64, i64 }, ptr %t125 + %t127 = extractvalue { ptr, i64, i64 } %t126, 1 + %t128 = icmp uge i64 0, %t127 + br i1 %t128, label %range5118, label %inrange5119 +range5118: + call void @finch_panic_index(ptr @.str.3210, i64 2346, i64 0, i64 %t127) + unreachable +inrange5119: + %t129 = extractvalue { ptr, i64, i64 } %t126, 0 + %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 0 + %t131 = load %S.ast.Node, ptr %t130 + %t132 = load %S.ast.Type, ptr %a75 + %t133 = call %S.gen.Val @finch.gen.exprWant(ptr %t124, %S.ast.Node %t131, %S.ast.Type %t132) + %t134 = load %S.ast.Type, ptr %a75 + %t135 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t136 = load { ptr, i64, i64 }, ptr %t135 + %t137 = extractvalue { ptr, i64, i64 } %t136, 1 + %t138 = icmp uge i64 0, %t137 + br i1 %t138, label %range5120, label %inrange5121 +range5120: + call void @finch_panic_index(ptr @.str.3211, i64 2346, i64 0, i64 %t137) + unreachable +inrange5121: + %t139 = extractvalue { ptr, i64, i64 } %t136, 0 + %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 0 + %t141 = load %S.ast.Node, ptr %t140 + %t142 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t143 = load { ptr, i64, i64 }, ptr %t142 + store { ptr, i64, i64 } { ptr @.str.3212, i64 1, i64 0 }, ptr %a145 + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a144 + store { ptr, i64, i64 } %t147, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.3213, i64 1, i64 0 }, ptr %a150 + call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) + store { ptr, i64, i64 } %t147, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a148 + %t153 = call %S.gen.Val @finch.gen.coerce(ptr %t123, %S.gen.Val %t133, %S.ast.Type %t134, %S.ast.Node %t141, { ptr, i64, i64 } %t152) + store %S.gen.Val %t133, ptr %a154 + call void @finch.drop.S_gen_Val(ptr %a154) + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_drop(ptr %a155) + store %S.gen.Val %t153, ptr %a156 + %t157 = load ptr, ptr %a1 + %t158 = load %S.ast.Node, ptr %a2 + %t159 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + %t161 = load %S.ast.Type, ptr %a75 + %t162 = load ptr, ptr %a1 + %t163 = load %S.gen.Val, ptr %a156 + %t164 = call { ptr, i64, i64 } @finch.gen.own(ptr %t162, %S.gen.Val %t163) + %t165 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t160, %S.ast.Type %t161, { ptr, i64, i64 } %t164, i1 false, i1 true) + store { ptr, i64, i64 } %t164, ptr %a166 + call void @finch_str_drop(ptr %a166) + store { ptr, i64, i64 } %t165, ptr %a167 + call void @finch_str_drop(ptr %a167) + call void @finch.drop.S_gen_Val(ptr %a156) + call void @finch.drop.S_ast_Type(ptr %a75) + ret void +} + +define internal i1 @finch.gen.hasDefaults(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.gen.StructDef, align 16 + %a19 = alloca %S.gen.StructDef, align 16 + %a21 = alloca %S.gen.StructDef, align 16 + %a43 = alloca i64, align 16 + %a51 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic5122, label %ok5123 +panic5122: + call void @finch_panic(ptr @.str.3214, i64 2351, ptr @.str.3215) + unreachable +ok5123: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 + %t6 = load ptr, ptr %a1 + %t7 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t8 = load { ptr, i64, i64 }, ptr %t7 + %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t10 = load { ptr, i64, i64 }, ptr %t9 + %t11 = call i64 @finch.gen.findStruct(ptr %t6, { ptr, i64, i64 } %t8, { ptr, i64, i64 } %t10) + %t12 = load { ptr, i64, i64 }, ptr %t5 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range5124, label %inrange5125 +range5124: + call void @finch_panic_index(ptr @.str.3216, i64 2351, i64 %t11, i64 %t13) + unreachable +inrange5125: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i64 %t11 + %t17 = load %S.gen.StructDef, ptr %t16 + store %S.gen.StructDef %t17, ptr %a18 + call void @finch.copy.S_gen_StructDef(ptr %a19, ptr %a18) + %t20 = load %S.gen.StructDef, ptr %a19 + store %S.gen.StructDef %t20, ptr %a21 + %t22 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 2 + %t23 = load i1, ptr %t22 + br i1 %t23, label %then5126, label %endif5128 +then5126: + call void @finch.drop.S_gen_StructDef(ptr %a21) + ret i1 false +endif5128: + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic5129, label %ok5130 +panic5129: + call void @finch_panic(ptr @.str.3217, i64 2355, ptr @.str.3218) + unreachable +ok5130: + %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 13 + %t28 = load i64, ptr %t27 + %t29 = load { ptr, i64, i64 }, ptr %t26 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range5131, label %inrange5132 +range5131: + call void @finch_panic_index(ptr @.str.3219, i64 2355, i64 %t28, i64 %t30) + unreachable +inrange5132: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 + %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 + %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 14 + %t36 = load i64, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %t34 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range5133, label %inrange5134 +range5133: + call void @finch_panic_index(ptr @.str.3220, i64 2355, i64 %t36, i64 %t38) + unreachable +inrange5134: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i32 0, i32 9 + store i64 0, ptr %a43 + br label %each.cond5135 +each.cond5135: + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = load i64, ptr %a43 + %t47 = icmp slt i64 %t46, %t45 + br i1 %t47, label %each.body5136, label %each.end5138 +each.body5136: + %t48 = load ptr, ptr %t42 + %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46 + %t50 = load %S.ast.Node, ptr %t49 + store %S.ast.Node %t50, ptr %a51 + %t52 = getelementptr inbounds %S.ast.Node, ptr %a51, i32 0, i32 9 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 + %t54 = load i64, ptr %t53 + %t55 = icmp sgt i64 %t54, 0 + br i1 %t55, label %then5139, label %endif5141 +then5139: + call void @finch.drop.S_gen_StructDef(ptr %a21) + ret i1 true +endif5141: + br label %each.step5137 +each.step5137: + %t56 = load i64, ptr %a43 + %t57 = add i64 %t56, 1 + store i64 %t57, ptr %a43 + br label %each.cond5135 +each.end5138: + call void @finch.drop.S_gen_StructDef(ptr %a21) + ret i1 false +} + +define internal void @finch.drop.S_gen_Place(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Place, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Place, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal void @finch.gen.assignStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.ast.Node, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca %S.ast.Node, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca i64, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca %S.gen.Var, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca %S.ast.Type, align 16 + %a105 = alloca i1, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca i64, align 16 + %a122 = alloca %S.ast.Type, align 16 + %a123 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.gen.Var, align 16 + %a127 = alloca %S.ast.Type, align 16 + %a128 = alloca %S.gen.Val, align 16 + %a141 = alloca %S.gen.Val, align 16 + %a152 = alloca %S.gen.Val, align 16 + %a158 = alloca i64, align 16 + %a164 = alloca %S.gen.Place, align 16 + %a179 = alloca %S.gen.Val, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca %S.gen.Val, align 16 + %a237 = alloca i64, align 16 + %a243 = alloca %S.gen.Place, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca %S.ast.Type, align 16 + %a257 = alloca %S.ast.Type, align 16 + %a260 = alloca %S.gen.Val, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca %S.gen.Val, align 16 + %a280 = alloca %S.gen.Val, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t4 = load { ptr, i64, i64 }, ptr %t3 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 0, %t5 + br i1 %t6, label %range5142, label %inrange5143 +range5142: + call void @finch_panic_index(ptr @.str.3221, i64 2364, i64 0, i64 %t5) + unreachable +inrange5143: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 + %t9 = load %S.ast.Node, ptr %t8 + store %S.ast.Node %t9, ptr %a10 + call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) + %t12 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t12, ptr %a13 + %t14 = load %S.ast.Node, ptr %a13 + %t15 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t14) + store { ptr, i64, i64 } %t15, ptr %a16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a16, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = icmp sgt i64 %t18, 0 + br i1 %t19, label %then5144, label %endif5146 +then5144: + %t20 = load ptr, ptr %a1 + %t21 = load { ptr, i64, i64 }, ptr %a16 + %t22 = call i64 @finch.gen.lookup(ptr %t20, { ptr, i64, i64 } %t21) + store i64 %t22, ptr %a23 + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, 0 + br label %logic.from5147 +logic.from5147: + br i1 %t25, label %logic.rhs5148, label %logic.end5149 +logic.rhs5148: + %t26 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.3222, i64 3, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend5150 +logic.rend5150: + br label %logic.end5149 +logic.end5149: + %t32 = phi i1 [ false, %logic.from5147 ], [ %t31, %logic.rend5150 ] + br i1 %t32, label %then5151, label %endif5153 +then5151: + %t33 = load ptr, ptr %a1 + %t34 = load %S.ast.Node, ptr %a2 + %t35 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3223, i64 28, i64 0 }, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.3224, i64 18, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t44, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t44, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.3225, i64 8, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_drop(ptr %a56) + br label %endif5153 +endif5153: + %t57 = load i64, ptr %a23 + %t58 = icmp sge i64 %t57, 0 + br label %logic.from5154 +logic.from5154: + br i1 %t58, label %logic.rhs5155, label %logic.end5156 +logic.rhs5155: + %t59 = load ptr, ptr %a1 + %t60 = load i64, ptr %a23 + %t61 = call %S.gen.Var @finch.gen.varAt(ptr %t59, i64 %t60) + %t62 = extractvalue %S.gen.Var %t61, 3 + store %S.gen.Var %t61, ptr %a63 + call void @finch.drop.S_gen_Var(ptr %a63) + br label %logic.rend5157 +logic.rend5157: + br label %logic.end5156 +logic.end5156: + %t64 = phi i1 [ false, %logic.from5154 ], [ %t62, %logic.rend5157 ] + br i1 %t64, label %then5158, label %endif5160 +then5158: + %t65 = load ptr, ptr %a1 + %t66 = load %S.ast.Node, ptr %a2 + %t67 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3226, i64 19, i64 0 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.3227, i64 18, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.fail(ptr %t65, %S.ast.Node %t66, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a77 + call void @finch_str_drop(ptr %a77) + br label %endif5160 +endif5160: + br label %endif5146 +endif5146: + store { ptr, i64, i64 } { ptr @.str.3228, i64 9, i64 0 }, ptr %a78 + %t79 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3229, i64 3, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %then5161, label %endif5163 +then5161: + %t85 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3230, i64 1, i64 0 }, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.3231, i64 1, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + %t95 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t94, ptr %a78 + store { ptr, i64, i64 } %t95, ptr %a96 + call void @finch_str_drop(ptr %a96) + br label %endif5163 +endif5163: + %t97 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t98 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t98, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.3232, i64 1, i64 0 }, ptr %a100 + %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) + %t102 = icmp ne i32 %t101, 0 + br i1 %t102, label %then5164, label %endif5166 +then5164: + %t103 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3233, i64 4, i64 0 }) + store %S.ast.Type %t103, ptr %a104 + store i1 false, ptr %a105 + %t106 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.3234, i64 3, i64 0 }, ptr %a109 + %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) + %t111 = icmp ne i32 %t110, 0 + br i1 %t111, label %then5167, label %endif5169 +then5167: + %t112 = load ptr, ptr %a1 + %t113 = load { ptr, i64, i64 }, ptr %a16 + %t114 = call i64 @finch.gen.lookup(ptr %t112, { ptr, i64, i64 } %t113) + store i64 %t114, ptr %a115 + %t116 = load i64, ptr %a115 + %t117 = icmp sge i64 %t116, 0 + br i1 %t117, label %then5170, label %endif5172 +then5170: + %t118 = load ptr, ptr %a1 + %t119 = load i64, ptr %a115 + %t120 = call %S.gen.Var @finch.gen.varAt(ptr %t118, i64 %t119) + %t121 = extractvalue %S.gen.Var %t120, 1 + store %S.ast.Type %t121, ptr %a122 + call void @finch.copy.S_ast_Type(ptr %a123, ptr %a122) + %t124 = load %S.ast.Type, ptr %a123 + store %S.gen.Var %t120, ptr %a125 + call void @finch.drop.S_gen_Var(ptr %a125) + %t126 = load %S.ast.Type, ptr %a104 + store %S.ast.Type %t124, ptr %a104 + store %S.ast.Type %t126, ptr %a127 + call void @finch.drop.S_ast_Type(ptr %a127) + store i1 true, ptr %a105 + br label %endif5172 +endif5172: + br label %endif5169 +endif5169: + store %S.gen.Val zeroinitializer, ptr %a128 + %t129 = load i1, ptr %a105 + br i1 %t129, label %then5173, label %else5174 +then5173: + %t130 = load ptr, ptr %a1 + %t131 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t132 = load { ptr, i64, i64 }, ptr %t131 + %t133 = extractvalue { ptr, i64, i64 } %t132, 1 + %t134 = icmp uge i64 1, %t133 + br i1 %t134, label %range5176, label %inrange5177 +range5176: + call void @finch_panic_index(ptr @.str.3235, i64 2392, i64 1, i64 %t133) + unreachable +inrange5177: + %t135 = extractvalue { ptr, i64, i64 } %t132, 0 + %t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 1 + %t137 = load %S.ast.Node, ptr %t136 + %t138 = load %S.ast.Type, ptr %a104 + %t139 = call %S.gen.Val @finch.gen.exprWant(ptr %t130, %S.ast.Node %t137, %S.ast.Type %t138) + %t140 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t139, ptr %a128 + store %S.gen.Val %t140, ptr %a141 + call void @finch.drop.S_gen_Val(ptr %a141) + br label %endif5175 +else5174: + %t142 = load ptr, ptr %a1 + %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t144 = load { ptr, i64, i64 }, ptr %t143 + %t145 = extractvalue { ptr, i64, i64 } %t144, 1 + %t146 = icmp uge i64 1, %t145 + br i1 %t146, label %range5178, label %inrange5179 +range5178: + call void @finch_panic_index(ptr @.str.3236, i64 2394, i64 1, i64 %t145) + unreachable +inrange5179: + %t147 = extractvalue { ptr, i64, i64 } %t144, 0 + %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 1 + %t149 = load %S.ast.Node, ptr %t148 + %t150 = call %S.gen.Val @finch.gen.expr(ptr %t142, %S.ast.Node %t149) + %t151 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t150, ptr %a128 + store %S.gen.Val %t151, ptr %a152 + call void @finch.drop.S_gen_Val(ptr %a152) + br label %endif5175 +endif5175: + %t153 = load ptr, ptr %a1 + %t154 = icmp eq ptr %t153, null + br i1 %t154, label %panic5180, label %ok5181 +panic5180: + call void @finch_panic(ptr @.str.3237, i64 2396, ptr @.str.3238) + unreachable +ok5181: + %t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 11 + %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i32 0, i32 1 + %t157 = load i64, ptr %t156 + store i64 %t157, ptr %a158 + %t159 = load ptr, ptr %a1 + %t160 = load %S.gen.Val, ptr %a128 + call void @finch.gen.hold(ptr %t159, %S.gen.Val %t160) + %t161 = load ptr, ptr %a1 + %t162 = load %S.ast.Node, ptr %a13 + %t163 = call %S.gen.Place @finch.gen.place(ptr %t161, %S.ast.Node %t162, i1 true) + store %S.gen.Place %t163, ptr %a164 + %t165 = load ptr, ptr %a1 + %t166 = load %S.gen.Val, ptr %a128 + %t167 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t168 = load %S.ast.Type, ptr %t167 + %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t170 = load { ptr, i64, i64 }, ptr %t169 + %t171 = extractvalue { ptr, i64, i64 } %t170, 1 + %t172 = icmp uge i64 1, %t171 + br i1 %t172, label %range5182, label %inrange5183 +range5182: + call void @finch_panic_index(ptr @.str.3239, i64 2399, i64 1, i64 %t171) + unreachable +inrange5183: + %t173 = extractvalue { ptr, i64, i64 } %t170, 0 + %t174 = getelementptr inbounds %S.ast.Node, ptr %t173, i64 1 + %t175 = load %S.ast.Node, ptr %t174 + %t176 = load { ptr, i64, i64 }, ptr %a78 + %t177 = call %S.gen.Val @finch.gen.coerce(ptr %t165, %S.gen.Val %t166, %S.ast.Type %t168, %S.ast.Node %t175, { ptr, i64, i64 } %t176) + %t178 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t177, ptr %a128 + store %S.gen.Val %t178, ptr %a179 + call void @finch.drop.S_gen_Val(ptr %a179) + %t180 = load ptr, ptr %a1 + %t181 = load %S.gen.Val, ptr %a128 + %t182 = call { ptr, i64, i64 } @finch.gen.own(ptr %t180, %S.gen.Val %t181) + store { ptr, i64, i64 } %t182, ptr %a183 + %t184 = load ptr, ptr %a1 + %t185 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t186 = load %S.ast.Type, ptr %t185 + %t187 = call i1 @finch.gen.owning(ptr %t184, %S.ast.Type %t186) + br i1 %t187, label %then5184, label %else5185 +then5184: + %t188 = load ptr, ptr %a1 + %t189 = load ptr, ptr %a1 + %t190 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t191 = load %S.ast.Type, ptr %t190 + %t192 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t189, %S.ast.Type %t191) + %t193 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 + %t194 = load { ptr, i64, i64 }, ptr %t193 + %t195 = call { ptr, i64, i64 } @finch.gen.load(ptr %t188, { ptr, i64, i64 } %t192, { ptr, i64, i64 } %t194) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + store { ptr, i64, i64 } %t195, ptr %a197 + %t198 = load ptr, ptr %a1 + %t199 = load ptr, ptr %a1 + %t200 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t201 = load %S.ast.Type, ptr %t200 + %t202 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t199, %S.ast.Type %t201) + %t203 = load { ptr, i64, i64 }, ptr %a183 + %t204 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 + %t205 = load { ptr, i64, i64 }, ptr %t204 + call void @finch.gen.store(ptr %t198, { ptr, i64, i64 } %t202, { ptr, i64, i64 } %t203, { ptr, i64, i64 } %t205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load ptr, ptr %a1 + %t208 = load { ptr, i64, i64 }, ptr %a197 + %t209 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t210 = load %S.ast.Type, ptr %t209 + call void @finch.gen.dropValue(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t210) + call void @finch_str_drop(ptr %a197) + br label %endif5186 +else5185: + %t211 = load ptr, ptr %a1 + %t212 = load ptr, ptr %a1 + %t213 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t214 = load %S.ast.Type, ptr %t213 + %t215 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t212, %S.ast.Type %t214) + %t216 = load { ptr, i64, i64 }, ptr %a183 + %t217 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 + %t218 = load { ptr, i64, i64 }, ptr %t217 + call void @finch.gen.store(ptr %t211, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + br label %endif5186 +endif5186: + %t220 = load ptr, ptr %a1 + %t221 = load i64, ptr %a158 + call void @finch.gen.heldEnd(ptr %t220, i64 %t221) + call void @finch_str_drop(ptr %a183) + call void @finch.drop.S_gen_Place(ptr %a164) + call void @finch.drop.S_gen_Val(ptr %a128) + call void @finch.drop.S_ast_Type(ptr %a104) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a16) + call void @finch.drop.S_ast_Node(ptr %a13) + ret void +endif5166: + %t222 = load ptr, ptr %a1 + %t223 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t224 = load { ptr, i64, i64 }, ptr %t223 + %t225 = extractvalue { ptr, i64, i64 } %t224, 1 + %t226 = icmp uge i64 1, %t225 + br i1 %t226, label %range5187, label %inrange5188 +range5187: + call void @finch_panic_index(ptr @.str.3240, i64 2411, i64 1, i64 %t225) + unreachable +inrange5188: + %t227 = extractvalue { ptr, i64, i64 } %t224, 0 + %t228 = getelementptr inbounds %S.ast.Node, ptr %t227, i64 1 + %t229 = load %S.ast.Node, ptr %t228 + %t230 = call %S.gen.Val @finch.gen.expr(ptr %t222, %S.ast.Node %t229) + store %S.gen.Val %t230, ptr %a231 + %t232 = load ptr, ptr %a1 + %t233 = icmp eq ptr %t232, null + br i1 %t233, label %panic5189, label %ok5190 +panic5189: + call void @finch_panic(ptr @.str.3241, i64 2412, ptr @.str.3242) + unreachable +ok5190: + %t234 = getelementptr inbounds %S.gen.Gen, ptr %t232, i32 0, i32 11 + %t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 + %t236 = load i64, ptr %t235 + store i64 %t236, ptr %a237 + %t238 = load ptr, ptr %a1 + %t239 = load %S.gen.Val, ptr %a231 + call void @finch.gen.hold(ptr %t238, %S.gen.Val %t239) + %t240 = load ptr, ptr %a1 + %t241 = load %S.ast.Node, ptr %a13 + %t242 = call %S.gen.Place @finch.gen.place(ptr %t240, %S.ast.Node %t241, i1 true) + store %S.gen.Place %t242, ptr %a243 + %t244 = load ptr, ptr %a1 + %t245 = load ptr, ptr %a1 + %t246 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t247 = load %S.ast.Type, ptr %t246 + %t248 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t245, %S.ast.Type %t247) + %t249 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 0 + %t250 = load { ptr, i64, i64 }, ptr %t249 + %t251 = call { ptr, i64, i64 } @finch.gen.load(ptr %t244, { ptr, i64, i64 } %t248, { ptr, i64, i64 } %t250) + store { ptr, i64, i64 } %t248, ptr %a252 + call void @finch_str_drop(ptr %a252) + %t253 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t251, 0 + %t254 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t255 = load %S.ast.Type, ptr %t254 + store %S.ast.Type %t255, ptr %a256 + call void @finch.copy.S_ast_Type(ptr %a257, ptr %a256) + %t258 = load %S.ast.Type, ptr %a257 + %t259 = insertvalue %S.gen.Val %t253, %S.ast.Type %t258, 1 + store %S.gen.Val %t259, ptr %a260 + %t261 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t262 = load { ptr, i64, i64 }, ptr %t261 + store { ptr, i64, i64 } %t262, ptr %a263 + call void @finch_str_sub(ptr %a264, ptr %a263, i64 0, i64 1, ptr @.str.3243, i64 2416) + %t265 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t265, ptr %a266 + %t267 = load ptr, ptr %a1 + %t268 = load ptr, ptr %a1 + %t269 = load { ptr, i64, i64 }, ptr %a266 + %t270 = load %S.gen.Val, ptr %a260 + %t271 = load %S.gen.Val, ptr %a231 + %t272 = load %S.ast.Node, ptr %a2 + %t273 = call %S.gen.Val @finch.gen.arith(ptr %t268, { ptr, i64, i64 } %t269, %S.gen.Val %t270, %S.gen.Val %t271, %S.ast.Node %t272) + %t274 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t275 = load %S.ast.Type, ptr %t274 + %t276 = load %S.ast.Node, ptr %a2 + %t277 = load { ptr, i64, i64 }, ptr %a78 + %t278 = call %S.gen.Val @finch.gen.coerce(ptr %t267, %S.gen.Val %t273, %S.ast.Type %t275, %S.ast.Node %t276, { ptr, i64, i64 } %t277) + store %S.gen.Val %t273, ptr %a279 + call void @finch.drop.S_gen_Val(ptr %a279) + store %S.gen.Val %t278, ptr %a280 + %t281 = load ptr, ptr %a1 + %t282 = load %S.gen.Val, ptr %a280 + %t283 = call { ptr, i64, i64 } @finch.gen.own(ptr %t281, %S.gen.Val %t282) + store { ptr, i64, i64 } %t283, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = load ptr, ptr %a1 + %t287 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t288 = load %S.ast.Type, ptr %t287 + %t289 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t286, %S.ast.Type %t288) + %t290 = load { ptr, i64, i64 }, ptr %a284 + %t291 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 0 + %t292 = load { ptr, i64, i64 }, ptr %t291 + call void @finch.gen.store(ptr %t285, { ptr, i64, i64 } %t289, { ptr, i64, i64 } %t290, { ptr, i64, i64 } %t292) + store { ptr, i64, i64 } %t289, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load ptr, ptr %a1 + %t295 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t296 = load %S.ast.Type, ptr %t295 + %t297 = call i1 @finch.gen.owning(ptr %t294, %S.ast.Type %t296) + br i1 %t297, label %then5191, label %endif5193 +then5191: + %t298 = load ptr, ptr %a1 + %t299 = getelementptr inbounds %S.gen.Val, ptr %a260, i32 0, i32 0 + %t300 = load { ptr, i64, i64 }, ptr %t299 + %t301 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t302 = load %S.ast.Type, ptr %t301 + call void @finch.gen.dropValue(ptr %t298, { ptr, i64, i64 } %t300, %S.ast.Type %t302) + br label %endif5193 +endif5193: + %t303 = load ptr, ptr %a1 + %t304 = load i64, ptr %a237 + call void @finch.gen.heldEnd(ptr %t303, i64 %t304) + call void @finch_str_drop(ptr %a284) + call void @finch.drop.S_gen_Val(ptr %a280) + call void @finch_str_drop(ptr %a266) + call void @finch.drop.S_gen_Val(ptr %a260) + call void @finch.drop.S_gen_Place(ptr %a243) + call void @finch.drop.S_gen_Val(ptr %a231) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a16) + call void @finch.drop.S_ast_Node(ptr %a13) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.condition(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Node, ptr %a2 + %t6 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t5) + %t7 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3244, i64 4, i64 0 }) + %t8 = load %S.ast.Node, ptr %a2 + %t9 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t6, %S.ast.Type %t7, %S.ast.Node %t8, { ptr, i64, i64 } { ptr @.str.3245, i64 11, i64 0 }) + store %S.gen.Val %t6, ptr %a10 + call void @finch.drop.S_gen_Val(ptr %a10) + store %S.ast.Type %t7, ptr %a11 + call void @finch.drop.S_ast_Type(ptr %a11) + %t12 = extractvalue %S.gen.Val %t9, 0 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store %S.gen.Val %t9, ptr %a16 + call void @finch.drop.S_gen_Val(ptr %a16) + ret { ptr, i64, i64 } %t15 +} + +define internal void @finch.gen.ifStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i1, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t5 = load { ptr, i64, i64 }, ptr %t4 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 0, %t6 + br i1 %t7, label %range5194, label %inrange5195 +range5194: + call void @finch_panic_index(ptr @.str.3246, i64 2431, i64 0, i64 %t6) + unreachable +inrange5195: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 + %t10 = load %S.ast.Node, ptr %t9 + %t11 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t3, %S.ast.Node %t10) + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t13, { ptr, i64, i64 } { ptr @.str.3247, i64 4, i64 0 }) + store { ptr, i64, i64 } %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t16, { ptr, i64, i64 } { ptr @.str.3248, i64 4, i64 0 }) + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load ptr, ptr %a1 + %t20 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t19, { ptr, i64, i64 } { ptr @.str.3249, i64 5, i64 0 }) + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = icmp sgt i64 %t24, 2 + br i1 %t25, label %then5196, label %else5197 +then5196: + %t26 = load ptr, ptr %a1 + %t27 = load { ptr, i64, i64 }, ptr %a12 + %t28 = load { ptr, i64, i64 }, ptr %a15 + %t29 = load { ptr, i64, i64 }, ptr %a18 + call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t27, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29) + br label %endif5198 +else5197: + %t30 = load ptr, ptr %a1 + %t31 = load { ptr, i64, i64 }, ptr %a12 + %t32 = load { ptr, i64, i64 }, ptr %a15 + %t33 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.condBr(ptr %t30, { ptr, i64, i64 } %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33) + br label %endif5198 +endif5198: + %t34 = load ptr, ptr %a1 + %t35 = load { ptr, i64, i64 }, ptr %a15 + call void @finch.gen.label(ptr %t34, { ptr, i64, i64 } %t35) + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 1, %t39 + br i1 %t40, label %range5199, label %inrange5200 +range5199: + call void @finch_panic_index(ptr @.str.3250, i64 2441, i64 1, i64 %t39) + unreachable +inrange5200: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 1 + %t43 = load %S.ast.Node, ptr %t42 + call void @finch.gen.block(ptr %t36, %S.ast.Node %t43, i1 true) + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic5201, label %ok5202 +panic5201: + call void @finch_panic(ptr @.str.3251, i64 2442, ptr @.str.3252) + unreachable +ok5202: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 9 + %t47 = load i1, ptr %t46 + %t48 = xor i1 %t47, true + store i1 %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.br(ptr %t50, { ptr, i64, i64 } %t51) + %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 + %t54 = load i64, ptr %t53 + %t55 = icmp sgt i64 %t54, 2 + br i1 %t55, label %then5203, label %else5204 +then5203: + %t56 = load ptr, ptr %a1 + %t57 = load { ptr, i64, i64 }, ptr %a18 + call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = extractvalue { ptr, i64, i64 } %t60, 1 + %t62 = icmp uge i64 2, %t61 + br i1 %t62, label %range5206, label %inrange5207 +range5206: + call void @finch_panic_index(ptr @.str.3253, i64 2446, i64 2, i64 %t61) + unreachable +inrange5207: + %t63 = extractvalue { ptr, i64, i64 } %t60, 0 + %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 2 + %t65 = load %S.ast.Node, ptr %t64 + call void @finch.gen.stmt(ptr %t58, %S.ast.Node %t65) + %t66 = load i1, ptr %a49 + br label %logic.from5208 +logic.from5208: + br i1 %t66, label %logic.end5210, label %logic.rhs5209 +logic.rhs5209: + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic5211, label %ok5212 +panic5211: + call void @finch_panic(ptr @.str.3254, i64 2447, ptr @.str.3255) + unreachable +ok5212: + %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 9 + %t70 = load i1, ptr %t69 + %t71 = xor i1 %t70, true + br label %logic.rend5213 +logic.rend5213: + br label %logic.end5210 +logic.end5210: + %t72 = phi i1 [ true, %logic.from5208 ], [ %t71, %logic.rend5213 ] + store i1 %t72, ptr %a49 + %t73 = load ptr, ptr %a1 + %t74 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.br(ptr %t73, { ptr, i64, i64 } %t74) + br label %endif5205 +else5204: + store i1 true, ptr %a49 + br label %endif5205 +endif5205: + %t75 = load i1, ptr %a49 + br i1 %t75, label %then5214, label %endif5216 +then5214: + %t76 = load ptr, ptr %a1 + %t77 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.label(ptr %t76, { ptr, i64, i64 } %t77) + br label %endif5216 +endif5216: + call void @finch_str_drop(ptr %a21) + call void @finch_str_drop(ptr %a18) + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a12) + ret void +} + +define internal void @finch.gen.whileStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca i1, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca i1, align 16 + %a118 = alloca %S.gen.Loop, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t3, { ptr, i64, i64 } { ptr @.str.3256, i64 10, i64 0 }) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t6, { ptr, i64, i64 } { ptr @.str.3257, i64 10, i64 0 }) + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t9, { ptr, i64, i64 } { ptr @.str.3258, i64 9, i64 0 }) + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.br(ptr %t12, { ptr, i64, i64 } %t13) + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.label(ptr %t14, { ptr, i64, i64 } %t15) + %t16 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 0, %t18 + br i1 %t19, label %range5217, label %inrange5218 +range5217: + call void @finch_panic_index(ptr @.str.3259, i64 2463, i64 0, i64 %t18) + unreachable +inrange5218: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.ast.Node, ptr %t20, i64 0 + %t22 = getelementptr inbounds %S.ast.Node, ptr %t21, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.3260, i64 4, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from5219 +logic.from5219: + br i1 %t27, label %logic.rhs5220, label %logic.end5221 +logic.rhs5220: + %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t29 = load { ptr, i64, i64 }, ptr %t28 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 0, %t30 + br i1 %t31, label %range5222, label %inrange5223 +range5222: + call void @finch_panic_index(ptr @.str.3261, i64 2463, i64 0, i64 %t30) + unreachable +inrange5223: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i64 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i32 0, i32 4 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.3262, i64 4, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.rend5224 +logic.rend5224: + br label %logic.end5221 +logic.end5221: + %t40 = phi i1 [ false, %logic.from5219 ], [ %t39, %logic.rend5224 ] + store i1 %t40, ptr %a41 + %t42 = load ptr, ptr %a1 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 0, %t45 + br i1 %t46, label %range5225, label %inrange5226 +range5225: + call void @finch_panic_index(ptr @.str.3263, i64 2464, i64 0, i64 %t45) + unreachable +inrange5226: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 + %t49 = load %S.ast.Node, ptr %t48 + %t50 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t42, %S.ast.Node %t49) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load i1, ptr %a41 + br i1 %t52, label %then5227, label %else5228 +then5227: + %t53 = load ptr, ptr %a1 + %t54 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.br(ptr %t53, { ptr, i64, i64 } %t54) + br label %endif5229 +else5228: + %t55 = load ptr, ptr %a1 + %t56 = load { ptr, i64, i64 }, ptr %a51 + %t57 = load { ptr, i64, i64 }, ptr %a8 + %t58 = load { ptr, i64, i64 }, ptr %a11 + call void @finch.gen.condBr(ptr %t55, { ptr, i64, i64 } %t56, { ptr, i64, i64 } %t57, { ptr, i64, i64 } %t58) + br label %endif5229 +endif5229: + %t59 = load ptr, ptr %a1 + %t60 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.label(ptr %t59, { ptr, i64, i64 } %t60) + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic5230, label %ok5231 +panic5230: + call void @finch_panic(ptr @.str.3264, i64 2471, ptr @.str.3265) + unreachable +ok5231: + %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 12 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + %t65 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_copy(ptr %a67, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + %t69 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t68, 0 + %t70 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_copy(ptr %a72, ptr %a71) + %t73 = load { ptr, i64, i64 }, ptr %a72 + %t74 = insertvalue %S.gen.Loop %t69, { ptr, i64, i64 } %t73, 1 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic5232, label %ok5233 +panic5232: + call void @finch_panic(ptr @.str.3266, i64 2471, ptr @.str.3267) + unreachable +ok5233: + %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 10 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 + %t79 = load i64, ptr %t78 + %t80 = insertvalue %S.gen.Loop %t74, i64 %t79, 2 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic5234, label %ok5235 +panic5234: + call void @finch_panic(ptr @.str.3268, i64 2471, ptr @.str.3269) + unreachable +ok5235: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 11 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 + %t85 = load i64, ptr %t84 + %t86 = insertvalue %S.gen.Loop %t80, i64 %t85, 3 + %t87 = load i64, ptr %t64 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %t63, i64 %t88, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %t63 + %t90 = getelementptr inbounds %S.gen.Loop, ptr %t89, i64 %t87 + store %S.gen.Loop %t86, ptr %t90 + store i64 %t88, ptr %t64 + %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t92 = load { ptr, i64, i64 }, ptr %t91 + %t93 = extractvalue { ptr, i64, i64 } %t92, 1 + %t94 = icmp uge i64 1, %t93 + br i1 %t94, label %range5236, label %inrange5237 +range5236: + call void @finch_panic_index(ptr @.str.3270, i64 2472, i64 1, i64 %t93) + unreachable +inrange5237: + %t95 = extractvalue { ptr, i64, i64 } %t92, 0 + %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 1 + %t97 = load %S.ast.Node, ptr %t96 + %t98 = call i1 @finch.gen.countBreaks(%S.ast.Node %t97) + store i1 %t98, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t102 = load { ptr, i64, i64 }, ptr %t101 + %t103 = extractvalue { ptr, i64, i64 } %t102, 1 + %t104 = icmp uge i64 1, %t103 + br i1 %t104, label %range5238, label %inrange5239 +range5238: + call void @finch_panic_index(ptr @.str.3271, i64 2473, i64 1, i64 %t103) + unreachable +inrange5239: + %t105 = extractvalue { ptr, i64, i64 } %t102, 0 + %t106 = getelementptr inbounds %S.ast.Node, ptr %t105, i64 1 + %t107 = load %S.ast.Node, ptr %t106 + call void @finch.gen.block(ptr %t100, %S.ast.Node %t107, i1 true) + %t108 = load ptr, ptr %a1 + %t109 = icmp eq ptr %t108, null + br i1 %t109, label %panic5240, label %ok5241 +panic5240: + call void @finch_panic(ptr @.str.3272, i64 2474, ptr @.str.3273) + unreachable +ok5241: + %t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 12 + %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1 + %t112 = load i64, ptr %t111 + %t113 = icmp eq i64 %t112, 0 + br i1 %t113, label %panic5242, label %ok5243 +panic5242: + call void @finch_panic(ptr @.str.3274, i64 2474, ptr @.str.3275) + unreachable +ok5243: + %t114 = sub i64 %t112, 1 + %t115 = load ptr, ptr %t110 + %t116 = getelementptr inbounds %S.gen.Loop, ptr %t115, i64 %t114 + %t117 = load %S.gen.Loop, ptr %t116 + store i64 %t114, ptr %t111 + store %S.gen.Loop %t117, ptr %a118 + call void @finch.drop.S_gen_Loop(ptr %a118) + %t119 = load ptr, ptr %a1 + %t120 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.br(ptr %t119, { ptr, i64, i64 } %t120) + %t121 = load i1, ptr %a41 + %t122 = xor i1 %t121, true + br label %logic.from5244 +logic.from5244: + br i1 %t122, label %logic.end5246, label %logic.rhs5245 +logic.rhs5245: + %t123 = load i1, ptr %a99 + br label %logic.rend5247 +logic.rend5247: + br label %logic.end5246 +logic.end5246: + %t124 = phi i1 [ true, %logic.from5244 ], [ %t123, %logic.rend5247 ] + br i1 %t124, label %then5248, label %endif5250 +then5248: + %t125 = load ptr, ptr %a1 + %t126 = load { ptr, i64, i64 }, ptr %a11 + call void @finch.gen.label(ptr %t125, { ptr, i64, i64 } %t126) + br label %endif5250 +endif5250: + call void @finch_str_drop(ptr %a51) + call void @finch_str_drop(ptr %a11) + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a5) + ret void +} + +define internal i1 @finch.gen.countBreaks(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca i64, align 16 + %a37 = alloca %S.ast.Node, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.3276, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then5251, label %endif5253 +then5251: + ret i1 true +endif5253: + %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.3277, i64 5, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from5254 +logic.from5254: + br i1 %t13, label %logic.end5256, label %logic.rhs5255 +logic.rhs5255: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3278, i64 3, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br label %logic.rend5257 +logic.rend5257: + br label %logic.end5256 +logic.end5256: + %t20 = phi i1 [ true, %logic.from5254 ], [ %t19, %logic.rend5257 ] + br label %logic.from5258 +logic.from5258: + br i1 %t20, label %logic.end5260, label %logic.rhs5259 +logic.rhs5259: + %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.3279, i64 4, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br label %logic.rend5261 +logic.rend5261: + br label %logic.end5260 +logic.end5260: + %t27 = phi i1 [ true, %logic.from5258 ], [ %t26, %logic.rend5261 ] + br i1 %t27, label %then5262, label %endif5264 +then5262: + ret i1 false +endif5264: + %t28 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 + store i64 0, ptr %a29 + br label %each.cond5265 +each.cond5265: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = load i64, ptr %a29 + %t33 = icmp slt i64 %t32, %t31 + br i1 %t33, label %each.body5266, label %each.end5268 +each.body5266: + %t34 = load ptr, ptr %t28 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 + %t36 = load %S.ast.Node, ptr %t35 + store %S.ast.Node %t36, ptr %a37 + %t38 = load %S.ast.Node, ptr %a37 + %t39 = call i1 @finch.gen.countBreaks(%S.ast.Node %t38) + br i1 %t39, label %then5269, label %endif5271 +then5269: + ret i1 true +endif5271: + br label %each.step5267 +each.step5267: + %t40 = load i64, ptr %a29 + %t41 = add i64 %t40, 1 + store i64 %t41, ptr %a29 + br label %each.cond5265 +each.end5268: + ret i1 false +} + +define internal void @finch.gen.forStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a22 = alloca %S.gen.Val, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca %S.gen.Val, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.gen.Val, align 16 + %a50 = alloca %S.ast.Type, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca %S.gen.Val, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca %S.ast.Type, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca %S.gen.Loop, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range5272, label %inrange5273 +range5272: + call void @finch_panic_index(ptr @.str.3280, i64 2498, i64 0, i64 %t7) + unreachable +inrange5273: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) + %t13 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3281, i64 3, i64 0 }) + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t15 = load { ptr, i64, i64 }, ptr %t14 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 0, %t16 + br i1 %t17, label %range5274, label %inrange5275 +range5274: + call void @finch_panic_index(ptr @.str.3282, i64 2498, i64 0, i64 %t16) + unreachable +inrange5275: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 + %t20 = load %S.ast.Node, ptr %t19 + %t21 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t12, %S.ast.Type %t13, %S.ast.Node %t20, { ptr, i64, i64 } { ptr @.str.3283, i64 20, i64 0 }) + store %S.gen.Val %t12, ptr %a22 + call void @finch.drop.S_gen_Val(ptr %a22) + store %S.ast.Type %t13, ptr %a23 + call void @finch.drop.S_ast_Type(ptr %a23) + %t24 = extractvalue %S.gen.Val %t21, 0 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store %S.gen.Val %t21, ptr %a28 + call void @finch.drop.S_gen_Val(ptr %a28) + store { ptr, i64, i64 } %t27, ptr %a29 + %t30 = load ptr, ptr %a1 + %t31 = load ptr, ptr %a1 + %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t33 = load { ptr, i64, i64 }, ptr %t32 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 1, %t34 + br i1 %t35, label %range5276, label %inrange5277 +range5276: + call void @finch_panic_index(ptr @.str.3284, i64 2499, i64 1, i64 %t34) + unreachable +inrange5277: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 1 + %t38 = load %S.ast.Node, ptr %t37 + %t39 = call %S.gen.Val @finch.gen.expr(ptr %t31, %S.ast.Node %t38) + %t40 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3285, i64 3, i64 0 }) + %t41 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t42 = load { ptr, i64, i64 }, ptr %t41 + %t43 = extractvalue { ptr, i64, i64 } %t42, 1 + %t44 = icmp uge i64 1, %t43 + br i1 %t44, label %range5278, label %inrange5279 +range5278: + call void @finch_panic_index(ptr @.str.3286, i64 2499, i64 1, i64 %t43) + unreachable +inrange5279: + %t45 = extractvalue { ptr, i64, i64 } %t42, 0 + %t46 = getelementptr inbounds %S.ast.Node, ptr %t45, i64 1 + %t47 = load %S.ast.Node, ptr %t46 + %t48 = call %S.gen.Val @finch.gen.coerce(ptr %t30, %S.gen.Val %t39, %S.ast.Type %t40, %S.ast.Node %t47, { ptr, i64, i64 } { ptr @.str.3287, i64 18, i64 0 }) + store %S.gen.Val %t39, ptr %a49 + call void @finch.drop.S_gen_Val(ptr %a49) + store %S.ast.Type %t40, ptr %a50 + call void @finch.drop.S_ast_Type(ptr %a50) + %t51 = extractvalue %S.gen.Val %t48, 0 + store { ptr, i64, i64 } %t51, ptr %a52 + call void @finch_str_copy(ptr %a53, ptr %a52) + %t54 = load { ptr, i64, i64 }, ptr %a53 + store %S.gen.Val %t48, ptr %a55 + call void @finch.drop.S_gen_Val(ptr %a55) + store { ptr, i64, i64 } %t54, ptr %a56 + %t57 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t57) + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Node, ptr %a2 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3288, i64 3, i64 0 }) + %t63 = load { ptr, i64, i64 }, ptr %a29 + %t64 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t58, %S.ast.Node %t59, { ptr, i64, i64 } %t61, %S.ast.Type %t62, { ptr, i64, i64 } %t63, i1 true, i1 false) + store %S.ast.Type %t62, ptr %a65 + call void @finch.drop.S_ast_Type(ptr %a65) + store { ptr, i64, i64 } %t64, ptr %a66 + %t67 = load ptr, ptr %a1 + %t68 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t67, { ptr, i64, i64 } { ptr @.str.3289, i64 8, i64 0 }) + store { ptr, i64, i64 } %t68, ptr %a69 + %t70 = load ptr, ptr %a1 + %t71 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t70, { ptr, i64, i64 } { ptr @.str.3290, i64 8, i64 0 }) + store { ptr, i64, i64 } %t71, ptr %a72 + %t73 = load ptr, ptr %a1 + %t74 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t73, { ptr, i64, i64 } { ptr @.str.3291, i64 8, i64 0 }) + store { ptr, i64, i64 } %t74, ptr %a75 + %t76 = load ptr, ptr %a1 + %t77 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t76, { ptr, i64, i64 } { ptr @.str.3292, i64 7, i64 0 }) + store { ptr, i64, i64 } %t77, ptr %a78 + %t79 = load ptr, ptr %a1 + %t80 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.br(ptr %t79, { ptr, i64, i64 } %t80) + %t81 = load ptr, ptr %a1 + %t82 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.label(ptr %t81, { ptr, i64, i64 } %t82) + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a66 + %t85 = call { ptr, i64, i64 } @finch.gen.load(ptr %t83, { ptr, i64, i64 } { ptr @.str.3293, i64 3, i64 0 }, { ptr, i64, i64 } %t84) + store { ptr, i64, i64 } %t85, ptr %a86 + %t87 = load ptr, ptr %a1 + %t88 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.3294, i64 13, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.3295, i64 2, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t97, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + %t104 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t103, ptr %a105 + call void @finch_str_drop(ptr %a105) + store { ptr, i64, i64 } %t104, ptr %a106 + %t107 = load ptr, ptr %a1 + %t108 = load { ptr, i64, i64 }, ptr %a106 + %t109 = load { ptr, i64, i64 }, ptr %a72 + %t110 = load { ptr, i64, i64 }, ptr %a78 + call void @finch.gen.condBr(ptr %t107, { ptr, i64, i64 } %t108, { ptr, i64, i64 } %t109, { ptr, i64, i64 } %t110) + %t111 = load ptr, ptr %a1 + %t112 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.label(ptr %t111, { ptr, i64, i64 } %t112) + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic5280, label %ok5281 +panic5280: + call void @finch_panic(ptr @.str.3296, i64 2512, ptr @.str.3297) + unreachable +ok5281: + %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 12 + %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i32 0, i32 1 + %t117 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_copy(ptr %a119, ptr %a118) + %t120 = load { ptr, i64, i64 }, ptr %a119 + %t121 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t120, 0 + %t122 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t122, ptr %a123 + call void @finch_str_copy(ptr %a124, ptr %a123) + %t125 = load { ptr, i64, i64 }, ptr %a124 + %t126 = insertvalue %S.gen.Loop %t121, { ptr, i64, i64 } %t125, 1 + %t127 = load ptr, ptr %a1 + %t128 = icmp eq ptr %t127, null + br i1 %t128, label %panic5282, label %ok5283 +panic5282: + call void @finch_panic(ptr @.str.3298, i64 2512, ptr @.str.3299) + unreachable +ok5283: + %t129 = getelementptr inbounds %S.gen.Gen, ptr %t127, i32 0, i32 10 + %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i32 0, i32 1 + %t131 = load i64, ptr %t130 + %t132 = insertvalue %S.gen.Loop %t126, i64 %t131, 2 + %t133 = load ptr, ptr %a1 + %t134 = icmp eq ptr %t133, null + br i1 %t134, label %panic5284, label %ok5285 +panic5284: + call void @finch_panic(ptr @.str.3300, i64 2512, ptr @.str.3301) + unreachable +ok5285: + %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 11 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 + %t137 = load i64, ptr %t136 + %t138 = insertvalue %S.gen.Loop %t132, i64 %t137, 3 + %t139 = load i64, ptr %t116 + %t140 = add i64 %t139, 1 + call void @finch_arr_reserve(ptr %t115, i64 %t140, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t141 = load ptr, ptr %t115 + %t142 = getelementptr inbounds %S.gen.Loop, ptr %t141, i64 %t139 + store %S.gen.Loop %t138, ptr %t142 + store i64 %t140, ptr %t116 + %t143 = load ptr, ptr %a1 + %t144 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t145 = load { ptr, i64, i64 }, ptr %t144 + %t146 = extractvalue { ptr, i64, i64 } %t145, 1 + %t147 = icmp uge i64 2, %t146 + br i1 %t147, label %range5286, label %inrange5287 +range5286: + call void @finch_panic_index(ptr @.str.3302, i64 2513, i64 2, i64 %t146) + unreachable +inrange5287: + %t148 = extractvalue { ptr, i64, i64 } %t145, 0 + %t149 = getelementptr inbounds %S.ast.Node, ptr %t148, i64 2 + %t150 = load %S.ast.Node, ptr %t149 + call void @finch.gen.block(ptr %t143, %S.ast.Node %t150, i1 true) + %t151 = load ptr, ptr %a1 + %t152 = icmp eq ptr %t151, null + br i1 %t152, label %panic5288, label %ok5289 +panic5288: + call void @finch_panic(ptr @.str.3303, i64 2514, ptr @.str.3304) + unreachable +ok5289: + %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 12 + %t154 = getelementptr inbounds { ptr, i64, i64 }, ptr %t153, i32 0, i32 1 + %t155 = load i64, ptr %t154 + %t156 = icmp eq i64 %t155, 0 + br i1 %t156, label %panic5290, label %ok5291 +panic5290: + call void @finch_panic(ptr @.str.3305, i64 2514, ptr @.str.3306) + unreachable +ok5291: + %t157 = sub i64 %t155, 1 + %t158 = load ptr, ptr %t153 + %t159 = getelementptr inbounds %S.gen.Loop, ptr %t158, i64 %t157 + %t160 = load %S.gen.Loop, ptr %t159 + store i64 %t157, ptr %t154 + store %S.gen.Loop %t160, ptr %a161 + call void @finch.drop.S_gen_Loop(ptr %a161) + %t162 = load ptr, ptr %a1 + %t163 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.gen.br(ptr %t162, { ptr, i64, i64 } %t163) + %t164 = load ptr, ptr %a1 + %t165 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.gen.label(ptr %t164, { ptr, i64, i64 } %t165) + %t166 = load ptr, ptr %a1 + %t167 = load { ptr, i64, i64 }, ptr %a66 + %t168 = call { ptr, i64, i64 } @finch.gen.load(ptr %t166, { ptr, i64, i64 } { ptr @.str.3307, i64 3, i64 0 }, { ptr, i64, i64 } %t167) + store { ptr, i64, i64 } %t168, ptr %a169 + %t170 = load ptr, ptr %a1 + %t171 = load ptr, ptr %a1 + %t172 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.3309, i64 8, i64 0 }, ptr %a174 + store { ptr, i64, i64 } %t172, ptr %a175 + call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a173 + store { ptr, i64, i64 } %t176, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.3310, i64 3, i64 0 }, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t176, ptr %a180 + call void @finch_str_drop(ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a177 + %t182 = call { ptr, i64, i64 } @finch.gen.op(ptr %t171, { ptr, i64, i64 } %t181) + store { ptr, i64, i64 } %t181, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a66 + call void @finch.gen.store(ptr %t170, { ptr, i64, i64 } { ptr @.str.3308, i64 3, i64 0 }, { ptr, i64, i64 } %t182, { ptr, i64, i64 } %t184) + store { ptr, i64, i64 } %t182, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load ptr, ptr %a1 + %t187 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.br(ptr %t186, { ptr, i64, i64 } %t187) + %t188 = load ptr, ptr %a1 + %t189 = load { ptr, i64, i64 }, ptr %a78 + call void @finch.gen.label(ptr %t188, { ptr, i64, i64 } %t189) + %t190 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t190) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a106) + call void @finch_str_drop(ptr %a86) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a72) + call void @finch_str_drop(ptr %a69) + call void @finch_str_drop(ptr %a66) + call void @finch_str_drop(ptr %a56) + call void @finch_str_drop(ptr %a29) + ret void +} + +define internal void @finch.gen.eachMap(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca i1, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a14 = alloca %S.ast.Type, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a24 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.ast.Type, align 16 + %a27 = alloca %S.ast.Type, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i1, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca %S.gen.Loop, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 0, %t8 + br i1 %t9, label %range5292, label %inrange5293 +range5292: + call void @finch_panic_index(ptr @.str.3311, i64 2526, i64 0, i64 %t8) + unreachable +inrange5293: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 + %t12 = load %S.ast.Type, ptr %t11 + store %S.ast.Type %t12, ptr %a13 + call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) + %t15 = load %S.ast.Type, ptr %a14 + store %S.ast.Type %t15, ptr %a16 + %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 1, %t19 + br i1 %t20, label %range5294, label %inrange5295 +range5294: + call void @finch_panic_index(ptr @.str.3312, i64 2527, i64 1, i64 %t19) + unreachable +inrange5295: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 + %t23 = load %S.ast.Type, ptr %t22 + store %S.ast.Type %t23, ptr %a24 + call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) + %t26 = load %S.ast.Type, ptr %a25 + store %S.ast.Type %t26, ptr %a27 + %t28 = load i1, ptr %a5 + br label %logic.from5296 +logic.from5296: + br i1 %t28, label %logic.rhs5297, label %logic.end5298 +logic.rhs5297: + %t29 = load ptr, ptr %a1 + %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t31 = load { ptr, i64, i64 }, ptr %t30 + %t32 = extractvalue { ptr, i64, i64 } %t31, 1 + %t33 = icmp uge i64 0, %t32 + br i1 %t33, label %range5299, label %inrange5300 +range5299: + call void @finch_panic_index(ptr @.str.3313, i64 2528, i64 0, i64 %t32) + unreachable +inrange5300: + %t34 = extractvalue { ptr, i64, i64 } %t31, 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 0 + %t36 = load %S.ast.Node, ptr %t35 + %t37 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t36) + %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t39 = load { ptr, i64, i64 }, ptr %t38 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 1, %t40 + br i1 %t41, label %range5301, label %inrange5302 +range5301: + call void @finch_panic_index(ptr @.str.3314, i64 2528, i64 1, i64 %t40) + unreachable +inrange5302: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 1 + %t44 = load %S.ast.Node, ptr %t43 + %t45 = call i1 @finch.gen.mutates(ptr %t29, { ptr, i64, i64 } %t37, %S.ast.Node %t44) + store { ptr, i64, i64 } %t37, ptr %a46 + call void @finch_str_drop(ptr %a46) + br label %logic.rend5303 +logic.rend5303: + br label %logic.end5298 +logic.end5298: + %t47 = phi i1 [ false, %logic.from5296 ], [ %t45, %logic.rend5303 ] + store i1 %t47, ptr %a48 + %t49 = load ptr, ptr %a1 + %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.3315, i64 3, i64 0 }) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.3316, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3317, i64 1, i64 0 }, { ptr, i64, i64 } %t53) + store { ptr, i64, i64 } { ptr @.str.3318, i64 0, i64 0 }, ptr %a54 + %t55 = load i1, ptr %a5 + br i1 %t55, label %then5304, label %endif5306 +then5304: + %t56 = load ptr, ptr %a1 + %t57 = load ptr, ptr %a1 + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Type, ptr %a4 + %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) + store { ptr, i64, i64 } { ptr @.str.3320, i64 23, i64 0 }, ptr %a62 + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t65, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.3321, i64 6, i64 0 }, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t65, ptr %a69 + call void @finch_str_drop(ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a66 + %t71 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t70, ptr %a73 + store { ptr, i64, i64 } %t71, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + store { ptr, i64, i64 } %t76, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.3322, i64 14, i64 0 }, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + store { ptr, i64, i64 } %t76, ptr %a80 + call void @finch_str_drop(ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a77 + %t82 = call { ptr, i64, i64 } @finch.gen.op(ptr %t57, { ptr, i64, i64 } %t81) + store { ptr, i64, i64 } %t81, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = call { ptr, i64, i64 } @finch.gen.load(ptr %t56, { ptr, i64, i64 } { ptr @.str.3319, i64 3, i64 0 }, { ptr, i64, i64 } %t82) + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t84, ptr %a54 + store { ptr, i64, i64 } %t86, ptr %a87 + call void @finch_str_drop(ptr %a87) + br label %endif5306 +endif5306: + %t88 = load ptr, ptr %a1 + %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3323, i64 8, i64 0 }) + store { ptr, i64, i64 } %t89, ptr %a90 + %t91 = load ptr, ptr %a1 + %t92 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t91, { ptr, i64, i64 } { ptr @.str.3324, i64 9, i64 0 }) + store { ptr, i64, i64 } %t92, ptr %a93 + %t94 = load ptr, ptr %a1 + %t95 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t94, { ptr, i64, i64 } { ptr @.str.3325, i64 8, i64 0 }) + store { ptr, i64, i64 } %t95, ptr %a96 + %t97 = load ptr, ptr %a1 + %t98 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t97, { ptr, i64, i64 } { ptr @.str.3326, i64 8, i64 0 }) + store { ptr, i64, i64 } %t98, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t100, { ptr, i64, i64 } { ptr @.str.3327, i64 7, i64 0 }) + store { ptr, i64, i64 } %t101, ptr %a102 + %t103 = load ptr, ptr %a1 + %t104 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) + %t105 = load ptr, ptr %a1 + %t106 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) + %t107 = load i1, ptr %a5 + br label %logic.from5307 +logic.from5307: + br i1 %t107, label %logic.rhs5308, label %logic.end5309 +logic.rhs5308: + %t108 = load i1, ptr %a48 + br label %logic.rend5310 +logic.rend5310: + br label %logic.end5309 +logic.end5309: + %t109 = phi i1 [ false, %logic.from5307 ], [ %t108, %logic.rend5310 ] + br i1 %t109, label %then5311, label %endif5313 +then5311: + %t110 = load ptr, ptr %a1 + %t111 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t110, { ptr, i64, i64 } { ptr @.str.3328, i64 11, i64 0 }) + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load ptr, ptr %a1 + %t114 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t113, { ptr, i64, i64 } { ptr @.str.3329, i64 8, i64 0 }) + store { ptr, i64, i64 } %t114, ptr %a115 + %t116 = load ptr, ptr %a1 + %t117 = load ptr, ptr %a1 + %t118 = load ptr, ptr %a1 + %t119 = load %S.ast.Type, ptr %a4 + %t120 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t118, %S.ast.Type %t119) + store { ptr, i64, i64 } { ptr @.str.3331, i64 23, i64 0 }, ptr %a122 + store { ptr, i64, i64 } %t120, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t120, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + store { ptr, i64, i64 } %t125, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.3332, i64 6, i64 0 }, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t125, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t130, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.3333, i64 14, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = call { ptr, i64, i64 } @finch.gen.op(ptr %t117, { ptr, i64, i64 } %t141) + store { ptr, i64, i64 } %t141, ptr %a143 + call void @finch_str_drop(ptr %a143) + %t144 = call { ptr, i64, i64 } @finch.gen.load(ptr %t116, { ptr, i64, i64 } { ptr @.str.3330, i64 3, i64 0 }, { ptr, i64, i64 } %t142) + store { ptr, i64, i64 } %t142, ptr %a145 + call void @finch_str_drop(ptr %a145) + store { ptr, i64, i64 } %t144, ptr %a146 + %t147 = load ptr, ptr %a1 + %t148 = load ptr, ptr %a1 + %t149 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } { ptr @.str.3334, i64 12, i64 0 }, ptr %a151 + store { ptr, i64, i64 } %t149, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + %t153 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t153, ptr %a155 + store { ptr, i64, i64 } { ptr @.str.3335, i64 2, i64 0 }, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + store { ptr, i64, i64 } %t153, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a154 + %t159 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t158, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + store { ptr, i64, i64 } %t158, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a160 + %t165 = call { ptr, i64, i64 } @finch.gen.op(ptr %t148, { ptr, i64, i64 } %t164) + store { ptr, i64, i64 } %t164, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a112 + %t168 = load { ptr, i64, i64 }, ptr %a115 + call void @finch.gen.condBr(ptr %t147, { ptr, i64, i64 } %t165, { ptr, i64, i64 } %t167, { ptr, i64, i64 } %t168) + store { ptr, i64, i64 } %t165, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load ptr, ptr %a1 + %t171 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.gen.label(ptr %t170, { ptr, i64, i64 } %t171) + %t172 = load ptr, ptr %a1 + %t173 = load ptr, ptr %a1 + %t174 = load ptr, ptr %a1 + %t175 = icmp eq ptr %t174, null + br i1 %t175, label %panic5314, label %ok5315 +panic5314: + call void @finch_panic(ptr @.str.3337, i64 2549, ptr @.str.3338) + unreachable +ok5315: + %t176 = getelementptr inbounds %S.gen.Gen, ptr %t174, i32 0, i32 1 + %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t178 = load i64, ptr %t177 + %t179 = load { ptr, i64, i64 }, ptr %t176 + %t180 = extractvalue { ptr, i64, i64 } %t179, 1 + %t181 = icmp uge i64 %t178, %t180 + br i1 %t181, label %range5316, label %inrange5317 +range5316: + call void @finch_panic_index(ptr @.str.3339, i64 2549, i64 %t178, i64 %t180) + unreachable +inrange5317: + %t182 = extractvalue { ptr, i64, i64 } %t179, 0 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t178 + %t184 = load { ptr, i64, i64 }, ptr %t183 + %t185 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t173, { ptr, i64, i64 } %t184) + store { ptr, i64, i64 } { ptr @.str.3336, i64 33, i64 0 }, ptr %a187 + store { ptr, i64, i64 } %t185, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t185, ptr %a189 + call void @finch_str_drop(ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a186 + store { ptr, i64, i64 } %t190, ptr %a192 + store { ptr, i64, i64 } { ptr @.str.3340, i64 6, i64 0 }, ptr %a193 + call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) + store { ptr, i64, i64 } %t190, ptr %a194 + call void @finch_str_drop(ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a191 + %t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t197 = load i64, ptr %t196 + call void @finch_str_from_int(ptr %a198, i64 %t197) + %t199 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t195, ptr %a201 + store { ptr, i64, i64 } %t199, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t195, ptr %a203 + call void @finch_str_drop(ptr %a203) + store { ptr, i64, i64 } %t199, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a200 + store { ptr, i64, i64 } %t205, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.3341, i64 1, i64 0 }, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + store { ptr, i64, i64 } %t205, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a206 + call void @finch.gen.emit(ptr %t172, { ptr, i64, i64 } %t210) + store { ptr, i64, i64 } %t210, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t212, { ptr, i64, i64 } { ptr @.str.3342, i64 11, i64 0 }) + %t213 = load ptr, ptr %a1 + %t214 = icmp eq ptr %t213, null + br i1 %t214, label %panic5318, label %ok5319 +panic5318: + call void @finch_panic(ptr @.str.3343, i64 2551, ptr @.str.3344) + unreachable +ok5319: + %t215 = getelementptr inbounds %S.gen.Gen, ptr %t213, i32 0, i32 9 + store i1 true, ptr %t215 + %t216 = load ptr, ptr %a1 + %t217 = load { ptr, i64, i64 }, ptr %a115 + call void @finch.gen.label(ptr %t216, { ptr, i64, i64 } %t217) + call void @finch_str_drop(ptr %a146) + call void @finch_str_drop(ptr %a115) + call void @finch_str_drop(ptr %a112) + br label %endif5313 +endif5313: + %t218 = load ptr, ptr %a1 + %t219 = load { ptr, i64, i64 }, ptr %a51 + %t220 = call { ptr, i64, i64 } @finch.gen.load(ptr %t218, { ptr, i64, i64 } { ptr @.str.3345, i64 3, i64 0 }, { ptr, i64, i64 } %t219) + store { ptr, i64, i64 } %t220, ptr %a221 + %t222 = load ptr, ptr %a1 + %t223 = load ptr, ptr %a1 + %t224 = load ptr, ptr %a1 + %t225 = load %S.ast.Type, ptr %a4 + %t226 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t224, %S.ast.Type %t225) + store { ptr, i64, i64 } { ptr @.str.3347, i64 23, i64 0 }, ptr %a228 + store { ptr, i64, i64 } %t226, ptr %a229 + call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) + store { ptr, i64, i64 } %t226, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a227 + store { ptr, i64, i64 } %t231, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.3348, i64 6, i64 0 }, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t231, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + %t237 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t236, ptr %a239 + store { ptr, i64, i64 } %t237, ptr %a240 + call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240) + store { ptr, i64, i64 } %t236, ptr %a241 + call void @finch_str_drop(ptr %a241) + %t242 = load { ptr, i64, i64 }, ptr %a238 + store { ptr, i64, i64 } %t242, ptr %a244 + store { ptr, i64, i64 } { ptr @.str.3349, i64 14, i64 0 }, ptr %a245 + call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) + store { ptr, i64, i64 } %t242, ptr %a246 + call void @finch_str_drop(ptr %a246) + %t247 = load { ptr, i64, i64 }, ptr %a243 + %t248 = call { ptr, i64, i64 } @finch.gen.op(ptr %t223, { ptr, i64, i64 } %t247) + store { ptr, i64, i64 } %t247, ptr %a249 + call void @finch_str_drop(ptr %a249) + %t250 = call { ptr, i64, i64 } @finch.gen.load(ptr %t222, { ptr, i64, i64 } { ptr @.str.3346, i64 3, i64 0 }, { ptr, i64, i64 } %t248) + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_drop(ptr %a251) + store { ptr, i64, i64 } %t250, ptr %a252 + %t253 = load ptr, ptr %a1 + %t254 = load ptr, ptr %a1 + %t255 = load { ptr, i64, i64 }, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.3350, i64 13, i64 0 }, ptr %a257 + store { ptr, i64, i64 } %t255, ptr %a258 + call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) + %t259 = load { ptr, i64, i64 }, ptr %a256 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.3351, i64 2, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + store { ptr, i64, i64 } %t259, ptr %a263 + call void @finch_str_drop(ptr %a263) + %t264 = load { ptr, i64, i64 }, ptr %a260 + %t265 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t264, ptr %a267 + store { ptr, i64, i64 } %t265, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t264, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + %t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t254, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a93 + %t274 = load { ptr, i64, i64 }, ptr %a102 + call void @finch.gen.condBr(ptr %t253, { ptr, i64, i64 } %t271, { ptr, i64, i64 } %t273, { ptr, i64, i64 } %t274) + store { ptr, i64, i64 } %t271, ptr %a275 + call void @finch_str_drop(ptr %a275) + %t276 = load ptr, ptr %a1 + %t277 = load { ptr, i64, i64 }, ptr %a93 + call void @finch.gen.label(ptr %t276, { ptr, i64, i64 } %t277) + %t278 = load ptr, ptr %a1 + %t279 = load { ptr, i64, i64 }, ptr %a3 + %t280 = load %S.ast.Type, ptr %a4 + %t281 = load { ptr, i64, i64 }, ptr %a221 + %t282 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t278, { ptr, i64, i64 } %t279, %S.ast.Type %t280, { ptr, i64, i64 } %t281) + store { ptr, i64, i64 } %t282, ptr %a283 + %t284 = load ptr, ptr %a1 + %t285 = load ptr, ptr %a1 + %t286 = load { ptr, i64, i64 }, ptr %a283 + %t287 = load %S.ast.Type, ptr %a4 + %t288 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t285, { ptr, i64, i64 } %t286, %S.ast.Type %t287, i64 0) + %t289 = call { ptr, i64, i64 } @finch.gen.load(ptr %t284, { ptr, i64, i64 } { ptr @.str.3352, i64 3, i64 0 }, { ptr, i64, i64 } %t288) + store { ptr, i64, i64 } %t288, ptr %a290 + call void @finch_str_drop(ptr %a290) + store { ptr, i64, i64 } %t289, ptr %a291 + %t292 = load ptr, ptr %a1 + %t293 = load ptr, ptr %a1 + %t294 = load { ptr, i64, i64 }, ptr %a291 + store { ptr, i64, i64 } { ptr @.str.3353, i64 12, i64 0 }, ptr %a296 + store { ptr, i64, i64 } %t294, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + %t298 = load { ptr, i64, i64 }, ptr %a295 + store { ptr, i64, i64 } %t298, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.3354, i64 3, i64 0 }, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t298, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + %t304 = call { ptr, i64, i64 } @finch.gen.op(ptr %t293, { ptr, i64, i64 } %t303) + store { ptr, i64, i64 } %t303, ptr %a305 + call void @finch_str_drop(ptr %a305) + %t306 = load { ptr, i64, i64 }, ptr %a99 + %t307 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.gen.condBr(ptr %t292, { ptr, i64, i64 } %t304, { ptr, i64, i64 } %t306, { ptr, i64, i64 } %t307) + store { ptr, i64, i64 } %t304, ptr %a308 + call void @finch_str_drop(ptr %a308) + %t309 = load ptr, ptr %a1 + %t310 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.gen.label(ptr %t309, { ptr, i64, i64 } %t310) + %t311 = load ptr, ptr %a1 + %t312 = icmp eq ptr %t311, null + br i1 %t312, label %panic5320, label %ok5321 +panic5320: + call void @finch_panic(ptr @.str.3355, i64 2562, ptr @.str.3356) + unreachable +ok5321: + %t313 = getelementptr inbounds %S.gen.Gen, ptr %t311, i32 0, i32 12 + %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i32 0, i32 1 + %t315 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t315, ptr %a316 + call void @finch_str_copy(ptr %a317, ptr %a316) + %t318 = load { ptr, i64, i64 }, ptr %a317 + %t319 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t318, 0 + %t320 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t320, ptr %a321 + call void @finch_str_copy(ptr %a322, ptr %a321) + %t323 = load { ptr, i64, i64 }, ptr %a322 + %t324 = insertvalue %S.gen.Loop %t319, { ptr, i64, i64 } %t323, 1 + %t325 = load ptr, ptr %a1 + %t326 = icmp eq ptr %t325, null + br i1 %t326, label %panic5322, label %ok5323 +panic5322: + call void @finch_panic(ptr @.str.3357, i64 2562, ptr @.str.3358) + unreachable +ok5323: + %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 10 + %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i32 0, i32 1 + %t329 = load i64, ptr %t328 + %t330 = insertvalue %S.gen.Loop %t324, i64 %t329, 2 + %t331 = load ptr, ptr %a1 + %t332 = icmp eq ptr %t331, null + br i1 %t332, label %panic5324, label %ok5325 +panic5324: + call void @finch_panic(ptr @.str.3359, i64 2562, ptr @.str.3360) + unreachable +ok5325: + %t333 = getelementptr inbounds %S.gen.Gen, ptr %t331, i32 0, i32 11 + %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i32 0, i32 1 + %t335 = load i64, ptr %t334 + %t336 = insertvalue %S.gen.Loop %t330, i64 %t335, 3 + %t337 = load i64, ptr %t314 + %t338 = add i64 %t337, 1 + call void @finch_arr_reserve(ptr %t313, i64 %t338, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t339 = load ptr, ptr %t313 + %t340 = getelementptr inbounds %S.gen.Loop, ptr %t339, i64 %t337 + store %S.gen.Loop %t336, ptr %t340 + store i64 %t338, ptr %t314 + %t341 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t341) + %t342 = load ptr, ptr %a1 + %t343 = load ptr, ptr %a1 + %t344 = load %S.ast.Type, ptr %a16 + %t345 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t343, %S.ast.Type %t344) + %t346 = load ptr, ptr %a1 + %t347 = load { ptr, i64, i64 }, ptr %a283 + %t348 = load %S.ast.Type, ptr %a4 + %t349 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t346, { ptr, i64, i64 } %t347, %S.ast.Type %t348, i64 1) + %t350 = call { ptr, i64, i64 } @finch.gen.load(ptr %t342, { ptr, i64, i64 } %t345, { ptr, i64, i64 } %t349) + store { ptr, i64, i64 } %t345, ptr %a351 + call void @finch_str_drop(ptr %a351) + store { ptr, i64, i64 } %t349, ptr %a352 + call void @finch_str_drop(ptr %a352) + store { ptr, i64, i64 } %t350, ptr %a353 + %t354 = load i1, ptr %a48 + br i1 %t354, label %then5326, label %endif5328 +then5326: + %t355 = load ptr, ptr %a1 + %t356 = load { ptr, i64, i64 }, ptr %a353 + %t357 = load %S.ast.Type, ptr %a16 + %t358 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t355, { ptr, i64, i64 } %t356, %S.ast.Type %t357) + %t359 = load { ptr, i64, i64 }, ptr %a353 + store { ptr, i64, i64 } %t358, ptr %a353 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + br label %endif5328 +endif5328: + %t361 = load ptr, ptr %a1 + %t362 = load %S.ast.Node, ptr %a2 + %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t364 = load { ptr, i64, i64 }, ptr %t363 + %t365 = load %S.ast.Type, ptr %a16 + %t366 = load { ptr, i64, i64 }, ptr %a353 + %t367 = load i1, ptr %a48 + %t368 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t361, %S.ast.Node %t362, { ptr, i64, i64 } %t364, %S.ast.Type %t365, { ptr, i64, i64 } %t366, i1 true, i1 %t367) + store { ptr, i64, i64 } %t368, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 + %t372 = load i64, ptr %t371 + %t373 = icmp sgt i64 %t372, 0 + br i1 %t373, label %then5329, label %endif5331 +then5329: + %t374 = load ptr, ptr %a1 + %t375 = load ptr, ptr %a1 + %t376 = load %S.ast.Type, ptr %a27 + %t377 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t375, %S.ast.Type %t376) + %t378 = load ptr, ptr %a1 + %t379 = load { ptr, i64, i64 }, ptr %a283 + %t380 = load %S.ast.Type, ptr %a4 + %t381 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t378, { ptr, i64, i64 } %t379, %S.ast.Type %t380, i64 2) + %t382 = call { ptr, i64, i64 } @finch.gen.load(ptr %t374, { ptr, i64, i64 } %t377, { ptr, i64, i64 } %t381) + store { ptr, i64, i64 } %t377, ptr %a383 + call void @finch_str_drop(ptr %a383) + store { ptr, i64, i64 } %t381, ptr %a384 + call void @finch_str_drop(ptr %a384) + store { ptr, i64, i64 } %t382, ptr %a385 + %t386 = load i1, ptr %a48 + br i1 %t386, label %then5332, label %endif5334 +then5332: + %t387 = load ptr, ptr %a1 + %t388 = load { ptr, i64, i64 }, ptr %a385 + %t389 = load %S.ast.Type, ptr %a27 + %t390 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t387, { ptr, i64, i64 } %t388, %S.ast.Type %t389) + %t391 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t390, ptr %a385 + store { ptr, i64, i64 } %t391, ptr %a392 + call void @finch_str_drop(ptr %a392) + br label %endif5334 +endif5334: + %t393 = load ptr, ptr %a1 + %t394 = load %S.ast.Node, ptr %a2 + %t395 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t396 = load { ptr, i64, i64 }, ptr %t395 + %t397 = load %S.ast.Type, ptr %a27 + %t398 = load { ptr, i64, i64 }, ptr %a385 + %t399 = load i1, ptr %a48 + %t400 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t393, %S.ast.Node %t394, { ptr, i64, i64 } %t396, %S.ast.Type %t397, { ptr, i64, i64 } %t398, i1 true, i1 %t399) + store { ptr, i64, i64 } %t400, ptr %a401 + call void @finch_str_drop(ptr %a401) + call void @finch_str_drop(ptr %a385) + br label %endif5331 +endif5331: + %t402 = load ptr, ptr %a1 + %t403 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t404 = load { ptr, i64, i64 }, ptr %t403 + %t405 = extractvalue { ptr, i64, i64 } %t404, 1 + %t406 = icmp uge i64 1, %t405 + br i1 %t406, label %range5335, label %inrange5336 +range5335: + call void @finch_panic_index(ptr @.str.3361, i64 2576, i64 1, i64 %t405) + unreachable +inrange5336: + %t407 = extractvalue { ptr, i64, i64 } %t404, 0 + %t408 = getelementptr inbounds %S.ast.Node, ptr %t407, i64 1 + %t409 = load %S.ast.Node, ptr %t408 + call void @finch.gen.block(ptr %t402, %S.ast.Node %t409, i1 true) + %t410 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t410) + %t411 = load ptr, ptr %a1 + %t412 = icmp eq ptr %t411, null + br i1 %t412, label %panic5337, label %ok5338 +panic5337: + call void @finch_panic(ptr @.str.3362, i64 2578, ptr @.str.3363) + unreachable +ok5338: + %t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 12 + %t414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t413, i32 0, i32 1 + %t415 = load i64, ptr %t414 + %t416 = icmp eq i64 %t415, 0 + br i1 %t416, label %panic5339, label %ok5340 +panic5339: + call void @finch_panic(ptr @.str.3364, i64 2578, ptr @.str.3365) + unreachable +ok5340: + %t417 = sub i64 %t415, 1 + %t418 = load ptr, ptr %t413 + %t419 = getelementptr inbounds %S.gen.Loop, ptr %t418, i64 %t417 + %t420 = load %S.gen.Loop, ptr %t419 + store i64 %t417, ptr %t414 + store %S.gen.Loop %t420, ptr %a421 + call void @finch.drop.S_gen_Loop(ptr %a421) + %t422 = load ptr, ptr %a1 + %t423 = load { ptr, i64, i64 }, ptr %a99 + call void @finch.gen.br(ptr %t422, { ptr, i64, i64 } %t423) + %t424 = load ptr, ptr %a1 + %t425 = load { ptr, i64, i64 }, ptr %a99 + call void @finch.gen.label(ptr %t424, { ptr, i64, i64 } %t425) + %t426 = load ptr, ptr %a1 + %t427 = load { ptr, i64, i64 }, ptr %a51 + %t428 = call { ptr, i64, i64 } @finch.gen.load(ptr %t426, { ptr, i64, i64 } { ptr @.str.3366, i64 3, i64 0 }, { ptr, i64, i64 } %t427) + store { ptr, i64, i64 } %t428, ptr %a429 + %t430 = load ptr, ptr %a1 + %t431 = load ptr, ptr %a1 + %t432 = load { ptr, i64, i64 }, ptr %a429 + store { ptr, i64, i64 } { ptr @.str.3368, i64 8, i64 0 }, ptr %a434 + store { ptr, i64, i64 } %t432, ptr %a435 + call void @finch_str_concat(ptr %a433, ptr %a434, ptr %a435) + %t436 = load { ptr, i64, i64 }, ptr %a433 + store { ptr, i64, i64 } %t436, ptr %a438 + store { ptr, i64, i64 } { ptr @.str.3369, i64 3, i64 0 }, ptr %a439 + call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) + store { ptr, i64, i64 } %t436, ptr %a440 + call void @finch_str_drop(ptr %a440) + %t441 = load { ptr, i64, i64 }, ptr %a437 + %t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t431, { ptr, i64, i64 } %t441) + store { ptr, i64, i64 } %t441, ptr %a443 + call void @finch_str_drop(ptr %a443) + %t444 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.store(ptr %t430, { ptr, i64, i64 } { ptr @.str.3367, i64 3, i64 0 }, { ptr, i64, i64 } %t442, { ptr, i64, i64 } %t444) + store { ptr, i64, i64 } %t442, ptr %a445 + call void @finch_str_drop(ptr %a445) + %t446 = load ptr, ptr %a1 + %t447 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t446, { ptr, i64, i64 } %t447) + %t448 = load ptr, ptr %a1 + %t449 = load { ptr, i64, i64 }, ptr %a102 + call void @finch.gen.label(ptr %t448, { ptr, i64, i64 } %t449) + call void @finch_str_drop(ptr %a429) + call void @finch_str_drop(ptr %a353) + call void @finch_str_drop(ptr %a291) + call void @finch_str_drop(ptr %a283) + call void @finch_str_drop(ptr %a252) + call void @finch_str_drop(ptr %a221) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a96) + call void @finch_str_drop(ptr %a93) + call void @finch_str_drop(ptr %a90) + call void @finch_str_drop(ptr %a54) + call void @finch_str_drop(ptr %a51) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret void +} + +define internal void @finch.drop.S_gen_Ref(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Ref, ptr %a, i32 0, i32 1 + call void @finch.drop.S_gen_Place(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Ref, ptr %a, i32 0, i32 2 + call void @finch.drop.S_gen_Val(ptr %t2) + ret void +} + +define internal void @finch.gen.eachStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a13 = alloca %S.gen.Ref, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a31 = alloca %S.ast.Type, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a38 = alloca %S.ast.Type, align 16 + %a39 = alloca %S.ast.Type, align 16 + %a42 = alloca %S.ast.Type, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca %S.ast.Type, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.ast.Type, align 16 + %a129 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.ast.Type, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca i1, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca %S.ast.Type, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca %S.gen.Loop, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t3) + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range5341, label %inrange5342 +range5341: + call void @finch_panic_index(ptr @.str.3370, i64 2589, i64 0, i64 %t7) + unreachable +inrange5342: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 false) + store %S.gen.Ref %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.3371, i64 0, i64 0 }, ptr %a14 + %t15 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3372, i64 4, i64 0 }) + store %S.ast.Type %t15, ptr %a16 + %t17 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 + %t18 = load i1, ptr %t17 + br i1 %t18, label %then5343, label %else5344 +then5343: + %t19 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 + %t20 = getelementptr inbounds %S.gen.Place, ptr %t19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + call void @finch_str_copy(ptr %a23, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + %t25 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t24, ptr %a14 + store { ptr, i64, i64 } %t25, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 + %t28 = getelementptr inbounds %S.gen.Place, ptr %t27, i32 0, i32 1 + %t29 = load %S.ast.Type, ptr %t28 + store %S.ast.Type %t29, ptr %a30 + call void @finch.copy.S_ast_Type(ptr %a31, ptr %a30) + %t32 = load %S.ast.Type, ptr %a31 + %t33 = load %S.ast.Type, ptr %a16 + store %S.ast.Type %t32, ptr %a16 + store %S.ast.Type %t33, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + br label %endif5345 +else5344: + %t35 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 + %t36 = getelementptr inbounds %S.gen.Val, ptr %t35, i32 0, i32 1 + %t37 = load %S.ast.Type, ptr %t36 + store %S.ast.Type %t37, ptr %a38 + call void @finch.copy.S_ast_Type(ptr %a39, ptr %a38) + %t40 = load %S.ast.Type, ptr %a39 + %t41 = load %S.ast.Type, ptr %a16 + store %S.ast.Type %t40, ptr %a16 + store %S.ast.Type %t41, ptr %a42 + call void @finch.drop.S_ast_Type(ptr %a42) + %t43 = load ptr, ptr %a1 + %t44 = load %S.ast.Node, ptr %a2 + %t45 = load ptr, ptr %a1 + %t46 = icmp eq ptr %t45, null + br i1 %t46, label %panic5346, label %ok5347 +panic5346: + call void @finch_panic(ptr @.str.3374, i64 2597, ptr @.str.3375) + unreachable +ok5347: + %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 25 + %t48 = load i64, ptr %t47 + call void @finch_str_from_int(ptr %a49, i64 %t48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.3373, i64 5, i64 0 }, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load %S.ast.Type, ptr %a16 + %t57 = load ptr, ptr %a1 + %t58 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 + %t59 = load %S.gen.Val, ptr %t58 + %t60 = call { ptr, i64, i64 } @finch.gen.own(ptr %t57, %S.gen.Val %t59) + %t61 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t55, %S.ast.Type %t56, { ptr, i64, i64 } %t60, i1 false, i1 true) + store { ptr, i64, i64 } %t55, ptr %a62 + call void @finch_str_drop(ptr %a62) + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t61, ptr %a14 + store { ptr, i64, i64 } %t64, ptr %a65 + call void @finch_str_drop(ptr %a65) + br label %endif5345 +endif5345: + %t66 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t67 = load { ptr, i64, i64 }, ptr %t66 + store { ptr, i64, i64 } %t67, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.3376, i64 3, i64 0 }, ptr %a69 + %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) + %t71 = icmp ne i32 %t70, 0 + br i1 %t71, label %then5348, label %endif5350 +then5348: + %t72 = load ptr, ptr %a1 + %t73 = load %S.ast.Node, ptr %a2 + %t74 = load { ptr, i64, i64 }, ptr %a14 + %t75 = load %S.ast.Type, ptr %a16 + %t76 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 + %t77 = load i1, ptr %t76 + call void @finch.gen.eachMap(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t74, %S.ast.Type %t75, i1 %t77) + %t78 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t78) + call void @finch.drop.S_ast_Type(ptr %a16) + call void @finch_str_drop(ptr %a14) + call void @finch.drop.S_gen_Ref(ptr %a13) + ret void +endif5350: + %t79 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3377, i64 5, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp eq i32 %t83, 0 + br label %logic.from5351 +logic.from5351: + br i1 %t84, label %logic.rhs5352, label %logic.end5353 +logic.rhs5352: + %t85 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.3378, i64 3, i64 0 }, ptr %a88 + %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) + %t90 = icmp eq i32 %t89, 0 + br label %logic.rend5354 +logic.rend5354: + br label %logic.end5353 +logic.end5353: + %t91 = phi i1 [ false, %logic.from5351 ], [ %t90, %logic.rend5354 ] + br i1 %t91, label %then5355, label %endif5357 +then5355: + %t92 = load ptr, ptr %a1 + %t93 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t94 = load { ptr, i64, i64 }, ptr %t93 + %t95 = extractvalue { ptr, i64, i64 } %t94, 1 + %t96 = icmp uge i64 0, %t95 + br i1 %t96, label %range5358, label %inrange5359 +range5358: + call void @finch_panic_index(ptr @.str.3379, i64 2605, i64 0, i64 %t95) + unreachable +inrange5359: + %t97 = extractvalue { ptr, i64, i64 } %t94, 0 + %t98 = getelementptr inbounds %S.ast.Node, ptr %t97, i64 0 + %t99 = load %S.ast.Node, ptr %t98 + %t100 = load %S.ast.Type, ptr %a16 + %t101 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t100) + store { ptr, i64, i64 } { ptr @.str.3380, i64 55, i64 0 }, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t101, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.3381, i64 36, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + call void @finch.gen.fail(ptr %t92, %S.ast.Node %t99, { ptr, i64, i64 } %t111) + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + br label %endif5357 +endif5357: + %t113 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3382, i64 4, i64 0 }) + store %S.ast.Type %t113, ptr %a114 + %t115 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.3383, i64 5, i64 0 }, ptr %a118 + %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) + %t120 = icmp ne i32 %t119, 0 + br i1 %t120, label %then5360, label %endif5362 +then5360: + %t121 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 1 + %t122 = load { ptr, i64, i64 }, ptr %t121 + %t123 = extractvalue { ptr, i64, i64 } %t122, 1 + %t124 = icmp uge i64 0, %t123 + br i1 %t124, label %range5363, label %inrange5364 +range5363: + call void @finch_panic_index(ptr @.str.3384, i64 2609, i64 0, i64 %t123) + unreachable +inrange5364: + %t125 = extractvalue { ptr, i64, i64 } %t122, 0 + %t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i64 0 + %t127 = load %S.ast.Type, ptr %t126 + store %S.ast.Type %t127, ptr %a128 + call void @finch.copy.S_ast_Type(ptr %a129, ptr %a128) + %t130 = load %S.ast.Type, ptr %a129 + %t131 = load %S.ast.Type, ptr %a114 + store %S.ast.Type %t130, ptr %a114 + store %S.ast.Type %t131, ptr %a132 + call void @finch.drop.S_ast_Type(ptr %a132) + br label %endif5362 +endif5362: + %t133 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 + %t134 = load i1, ptr %t133 + br label %logic.from5365 +logic.from5365: + br i1 %t134, label %logic.rhs5366, label %logic.end5367 +logic.rhs5366: + %t135 = load ptr, ptr %a1 + %t136 = load %S.ast.Type, ptr %a114 + %t137 = call i1 @finch.gen.owning(ptr %t135, %S.ast.Type %t136) + br label %logic.rend5368 +logic.rend5368: + br label %logic.end5367 +logic.end5367: + %t138 = phi i1 [ false, %logic.from5365 ], [ %t137, %logic.rend5368 ] + br label %logic.from5369 +logic.from5369: + br i1 %t138, label %logic.rhs5370, label %logic.end5371 +logic.rhs5370: + %t139 = load ptr, ptr %a1 + %t140 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t141 = load { ptr, i64, i64 }, ptr %t140 + %t142 = extractvalue { ptr, i64, i64 } %t141, 1 + %t143 = icmp uge i64 0, %t142 + br i1 %t143, label %range5372, label %inrange5373 +range5372: + call void @finch_panic_index(ptr @.str.3385, i64 2611, i64 0, i64 %t142) + unreachable +inrange5373: + %t144 = extractvalue { ptr, i64, i64 } %t141, 0 + %t145 = getelementptr inbounds %S.ast.Node, ptr %t144, i64 0 + %t146 = load %S.ast.Node, ptr %t145 + %t147 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t146) + %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t149 = load { ptr, i64, i64 }, ptr %t148 + %t150 = extractvalue { ptr, i64, i64 } %t149, 1 + %t151 = icmp uge i64 1, %t150 + br i1 %t151, label %range5374, label %inrange5375 +range5374: + call void @finch_panic_index(ptr @.str.3386, i64 2611, i64 1, i64 %t150) + unreachable +inrange5375: + %t152 = extractvalue { ptr, i64, i64 } %t149, 0 + %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 1 + %t154 = load %S.ast.Node, ptr %t153 + %t155 = call i1 @finch.gen.mutates(ptr %t139, { ptr, i64, i64 } %t147, %S.ast.Node %t154) + store { ptr, i64, i64 } %t147, ptr %a156 + call void @finch_str_drop(ptr %a156) + br label %logic.rend5376 +logic.rend5376: + br label %logic.end5371 +logic.end5371: + %t157 = phi i1 [ false, %logic.from5369 ], [ %t155, %logic.rend5376 ] + store i1 %t157, ptr %a158 + %t159 = load ptr, ptr %a1 + %t160 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t159, { ptr, i64, i64 } { ptr @.str.3387, i64 3, i64 0 }) + store { ptr, i64, i64 } %t160, ptr %a161 + %t162 = load ptr, ptr %a1 + %t163 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.store(ptr %t162, { ptr, i64, i64 } { ptr @.str.3388, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3389, i64 1, i64 0 }, { ptr, i64, i64 } %t163) + %t164 = load ptr, ptr %a1 + %t165 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t164, { ptr, i64, i64 } { ptr @.str.3390, i64 9, i64 0 }) + store { ptr, i64, i64 } %t165, ptr %a166 + %t167 = load ptr, ptr %a1 + %t168 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t167, { ptr, i64, i64 } { ptr @.str.3391, i64 9, i64 0 }) + store { ptr, i64, i64 } %t168, ptr %a169 + %t170 = load ptr, ptr %a1 + %t171 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t170, { ptr, i64, i64 } { ptr @.str.3392, i64 9, i64 0 }) + store { ptr, i64, i64 } %t171, ptr %a172 + %t173 = load ptr, ptr %a1 + %t174 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t173, { ptr, i64, i64 } { ptr @.str.3393, i64 8, i64 0 }) + store { ptr, i64, i64 } %t174, ptr %a175 + %t176 = load ptr, ptr %a1 + %t177 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t176, { ptr, i64, i64 } %t177) + %t178 = load ptr, ptr %a1 + %t179 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.label(ptr %t178, { ptr, i64, i64 } %t179) + %t180 = load ptr, ptr %a1 + %t181 = load ptr, ptr %a1 + %t182 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.3395, i64 46, i64 0 }, ptr %a184 + store { ptr, i64, i64 } %t182, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a183 + store { ptr, i64, i64 } %t186, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.3396, i64 14, i64 0 }, ptr %a189 + call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) + store { ptr, i64, i64 } %t186, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a187 + %t192 = call { ptr, i64, i64 } @finch.gen.op(ptr %t181, { ptr, i64, i64 } %t191) + store { ptr, i64, i64 } %t191, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = call { ptr, i64, i64 } @finch.gen.load(ptr %t180, { ptr, i64, i64 } { ptr @.str.3394, i64 3, i64 0 }, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a195 + call void @finch_str_drop(ptr %a195) + store { ptr, i64, i64 } %t194, ptr %a196 + %t197 = load ptr, ptr %a1 + %t198 = load { ptr, i64, i64 }, ptr %a161 + %t199 = call { ptr, i64, i64 } @finch.gen.load(ptr %t197, { ptr, i64, i64 } { ptr @.str.3397, i64 3, i64 0 }, { ptr, i64, i64 } %t198) + store { ptr, i64, i64 } %t199, ptr %a200 + %t201 = load ptr, ptr %a1 + %t202 = load { ptr, i64, i64 }, ptr %a200 + store { ptr, i64, i64 } { ptr @.str.3398, i64 13, i64 0 }, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + %t206 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t206, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.3399, i64 2, i64 0 }, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t206, ptr %a210 + call void @finch_str_drop(ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a207 + %t212 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } %t211, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t211, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + %t218 = call { ptr, i64, i64 } @finch.gen.op(ptr %t201, { ptr, i64, i64 } %t217) + store { ptr, i64, i64 } %t217, ptr %a219 + call void @finch_str_drop(ptr %a219) + store { ptr, i64, i64 } %t218, ptr %a220 + %t221 = load ptr, ptr %a1 + %t222 = load { ptr, i64, i64 }, ptr %a220 + %t223 = load { ptr, i64, i64 }, ptr %a169 + %t224 = load { ptr, i64, i64 }, ptr %a175 + call void @finch.gen.condBr(ptr %t221, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t223, { ptr, i64, i64 } %t224) + %t225 = load ptr, ptr %a1 + %t226 = load { ptr, i64, i64 }, ptr %a169 + call void @finch.gen.label(ptr %t225, { ptr, i64, i64 } %t226) + %t227 = load ptr, ptr %a1 + %t228 = load { ptr, i64, i64 }, ptr %a14 + %t229 = call { ptr, i64, i64 } @finch.gen.load(ptr %t227, { ptr, i64, i64 } { ptr @.str.3400, i64 3, i64 0 }, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t229, ptr %a230 + %t231 = load ptr, ptr %a1 + %t232 = load ptr, ptr %a1 + %t233 = load %S.ast.Type, ptr %a114 + %t234 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t232, %S.ast.Type %t233) + store { ptr, i64, i64 } { ptr @.str.3401, i64 23, i64 0 }, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t234, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t239, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.3402, i64 6, i64 0 }, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + store { ptr, i64, i64 } %t239, ptr %a243 + call void @finch_str_drop(ptr %a243) + %t244 = load { ptr, i64, i64 }, ptr %a240 + %t245 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t244, ptr %a247 + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t244, ptr %a249 + call void @finch_str_drop(ptr %a249) + %t250 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t250, ptr %a252 + store { ptr, i64, i64 } { ptr @.str.3403, i64 6, i64 0 }, ptr %a253 + call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) + store { ptr, i64, i64 } %t250, ptr %a254 + call void @finch_str_drop(ptr %a254) + %t255 = load { ptr, i64, i64 }, ptr %a251 + %t256 = load { ptr, i64, i64 }, ptr %a200 + store { ptr, i64, i64 } %t255, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + %t262 = call { ptr, i64, i64 } @finch.gen.op(ptr %t231, { ptr, i64, i64 } %t261) + store { ptr, i64, i64 } %t261, ptr %a263 + call void @finch_str_drop(ptr %a263) + store { ptr, i64, i64 } %t262, ptr %a264 + %t265 = load ptr, ptr %a1 + %t266 = load ptr, ptr %a1 + %t267 = load %S.ast.Type, ptr %a114 + %t268 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t266, %S.ast.Type %t267) + %t269 = load { ptr, i64, i64 }, ptr %a264 + %t270 = call { ptr, i64, i64 } @finch.gen.load(ptr %t265, { ptr, i64, i64 } %t268, { ptr, i64, i64 } %t269) + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_drop(ptr %a271) + store { ptr, i64, i64 } %t270, ptr %a272 + %t273 = load i1, ptr %a158 + br i1 %t273, label %then5377, label %endif5379 +then5377: + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a272 + %t276 = load %S.ast.Type, ptr %a114 + %t277 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t274, { ptr, i64, i64 } %t275, %S.ast.Type %t276) + %t278 = load { ptr, i64, i64 }, ptr %a272 + store { ptr, i64, i64 } %t277, ptr %a272 + store { ptr, i64, i64 } %t278, ptr %a279 + call void @finch_str_drop(ptr %a279) + br label %endif5379 +endif5379: + %t280 = load ptr, ptr %a1 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic5380, label %ok5381 +panic5380: + call void @finch_panic(ptr @.str.3404, i64 2631, ptr @.str.3405) + unreachable +ok5381: + %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 12 + %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 + %t284 = load { ptr, i64, i64 }, ptr %a172 + store { ptr, i64, i64 } %t284, ptr %a285 + call void @finch_str_copy(ptr %a286, ptr %a285) + %t287 = load { ptr, i64, i64 }, ptr %a286 + %t288 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t287, 0 + %t289 = load { ptr, i64, i64 }, ptr %a175 + store { ptr, i64, i64 } %t289, ptr %a290 + call void @finch_str_copy(ptr %a291, ptr %a290) + %t292 = load { ptr, i64, i64 }, ptr %a291 + %t293 = insertvalue %S.gen.Loop %t288, { ptr, i64, i64 } %t292, 1 + %t294 = load ptr, ptr %a1 + %t295 = icmp eq ptr %t294, null + br i1 %t295, label %panic5382, label %ok5383 +panic5382: + call void @finch_panic(ptr @.str.3406, i64 2631, ptr @.str.3407) + unreachable +ok5383: + %t296 = getelementptr inbounds %S.gen.Gen, ptr %t294, i32 0, i32 10 + %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i32 0, i32 1 + %t298 = load i64, ptr %t297 + %t299 = insertvalue %S.gen.Loop %t293, i64 %t298, 2 + %t300 = load ptr, ptr %a1 + %t301 = icmp eq ptr %t300, null + br i1 %t301, label %panic5384, label %ok5385 +panic5384: + call void @finch_panic(ptr @.str.3408, i64 2631, ptr @.str.3409) + unreachable +ok5385: + %t302 = getelementptr inbounds %S.gen.Gen, ptr %t300, i32 0, i32 11 + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i32 0, i32 1 + %t304 = load i64, ptr %t303 + %t305 = insertvalue %S.gen.Loop %t299, i64 %t304, 3 + %t306 = load i64, ptr %t283 + %t307 = add i64 %t306, 1 + call void @finch_arr_reserve(ptr %t282, i64 %t307, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t308 = load ptr, ptr %t282 + %t309 = getelementptr inbounds %S.gen.Loop, ptr %t308, i64 %t306 + store %S.gen.Loop %t305, ptr %t309 + store i64 %t307, ptr %t283 + %t310 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t310) + %t311 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t312 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t312, ptr %a313 + call void @finch_str_copy(ptr %a314, ptr %a313) + %t315 = load { ptr, i64, i64 }, ptr %a314 + store { ptr, i64, i64 } %t315, ptr %a316 + %t317 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 + %t319 = load i64, ptr %t318 + %t320 = icmp sgt i64 %t319, 0 + br i1 %t320, label %then5386, label %endif5388 +then5386: + %t321 = load ptr, ptr %a1 + %t322 = load %S.ast.Node, ptr %a2 + %t323 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t324 = load { ptr, i64, i64 }, ptr %t323 + %t325 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3410, i64 3, i64 0 }) + %t326 = load { ptr, i64, i64 }, ptr %a200 + %t327 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t321, %S.ast.Node %t322, { ptr, i64, i64 } %t324, %S.ast.Type %t325, { ptr, i64, i64 } %t326, i1 true, i1 false) + store %S.ast.Type %t325, ptr %a328 + call void @finch.drop.S_ast_Type(ptr %a328) + store { ptr, i64, i64 } %t327, ptr %a329 + call void @finch_str_drop(ptr %a329) + %t330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t331 = load { ptr, i64, i64 }, ptr %t330 + store { ptr, i64, i64 } %t331, ptr %a332 + call void @finch_str_copy(ptr %a333, ptr %a332) + %t334 = load { ptr, i64, i64 }, ptr %a333 + %t335 = load { ptr, i64, i64 }, ptr %a316 + store { ptr, i64, i64 } %t334, ptr %a316 + store { ptr, i64, i64 } %t335, ptr %a336 + call void @finch_str_drop(ptr %a336) + br label %endif5388 +endif5388: + %t337 = load ptr, ptr %a1 + %t338 = load %S.ast.Node, ptr %a2 + %t339 = load { ptr, i64, i64 }, ptr %a316 + %t340 = load %S.ast.Type, ptr %a114 + %t341 = load { ptr, i64, i64 }, ptr %a272 + %t342 = load i1, ptr %a158 + %t343 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t337, %S.ast.Node %t338, { ptr, i64, i64 } %t339, %S.ast.Type %t340, { ptr, i64, i64 } %t341, i1 true, i1 %t342) + store { ptr, i64, i64 } %t343, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load ptr, ptr %a1 + %t346 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t347 = load { ptr, i64, i64 }, ptr %t346 + %t348 = extractvalue { ptr, i64, i64 } %t347, 1 + %t349 = icmp uge i64 1, %t348 + br i1 %t349, label %range5389, label %inrange5390 +range5389: + call void @finch_panic_index(ptr @.str.3411, i64 2639, i64 1, i64 %t348) + unreachable +inrange5390: + %t350 = extractvalue { ptr, i64, i64 } %t347, 0 + %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 1 + %t352 = load %S.ast.Node, ptr %t351 + call void @finch.gen.block(ptr %t345, %S.ast.Node %t352, i1 true) + %t353 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t353) + %t354 = load ptr, ptr %a1 + %t355 = icmp eq ptr %t354, null + br i1 %t355, label %panic5391, label %ok5392 +panic5391: + call void @finch_panic(ptr @.str.3412, i64 2641, ptr @.str.3413) + unreachable +ok5392: + %t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 12 + %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 + %t358 = load i64, ptr %t357 + %t359 = icmp eq i64 %t358, 0 + br i1 %t359, label %panic5393, label %ok5394 +panic5393: + call void @finch_panic(ptr @.str.3414, i64 2641, ptr @.str.3415) + unreachable +ok5394: + %t360 = sub i64 %t358, 1 + %t361 = load ptr, ptr %t356 + %t362 = getelementptr inbounds %S.gen.Loop, ptr %t361, i64 %t360 + %t363 = load %S.gen.Loop, ptr %t362 + store i64 %t360, ptr %t357 + store %S.gen.Loop %t363, ptr %a364 + call void @finch.drop.S_gen_Loop(ptr %a364) + %t365 = load ptr, ptr %a1 + %t366 = load { ptr, i64, i64 }, ptr %a172 + call void @finch.gen.br(ptr %t365, { ptr, i64, i64 } %t366) + %t367 = load ptr, ptr %a1 + %t368 = load { ptr, i64, i64 }, ptr %a172 + call void @finch.gen.label(ptr %t367, { ptr, i64, i64 } %t368) + %t369 = load ptr, ptr %a1 + %t370 = load { ptr, i64, i64 }, ptr %a161 + %t371 = call { ptr, i64, i64 } @finch.gen.load(ptr %t369, { ptr, i64, i64 } { ptr @.str.3416, i64 3, i64 0 }, { ptr, i64, i64 } %t370) + store { ptr, i64, i64 } %t371, ptr %a372 + %t373 = load ptr, ptr %a1 + %t374 = load ptr, ptr %a1 + %t375 = load { ptr, i64, i64 }, ptr %a372 + store { ptr, i64, i64 } { ptr @.str.3418, i64 8, i64 0 }, ptr %a377 + store { ptr, i64, i64 } %t375, ptr %a378 + call void @finch_str_concat(ptr %a376, ptr %a377, ptr %a378) + %t379 = load { ptr, i64, i64 }, ptr %a376 + store { ptr, i64, i64 } %t379, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.3419, i64 3, i64 0 }, ptr %a382 + call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) + store { ptr, i64, i64 } %t379, ptr %a383 + call void @finch_str_drop(ptr %a383) + %t384 = load { ptr, i64, i64 }, ptr %a380 + %t385 = call { ptr, i64, i64 } @finch.gen.op(ptr %t374, { ptr, i64, i64 } %t384) + store { ptr, i64, i64 } %t384, ptr %a386 + call void @finch_str_drop(ptr %a386) + %t387 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.store(ptr %t373, { ptr, i64, i64 } { ptr @.str.3417, i64 3, i64 0 }, { ptr, i64, i64 } %t385, { ptr, i64, i64 } %t387) + store { ptr, i64, i64 } %t385, ptr %a388 + call void @finch_str_drop(ptr %a388) + %t389 = load ptr, ptr %a1 + %t390 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t389, { ptr, i64, i64 } %t390) + %t391 = load ptr, ptr %a1 + %t392 = load { ptr, i64, i64 }, ptr %a175 + call void @finch.gen.label(ptr %t391, { ptr, i64, i64 } %t392) + %t393 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t393) + call void @finch_str_drop(ptr %a372) + call void @finch_str_drop(ptr %a316) + call void @finch_str_drop(ptr %a272) + call void @finch_str_drop(ptr %a264) + call void @finch_str_drop(ptr %a230) + call void @finch_str_drop(ptr %a220) + call void @finch_str_drop(ptr %a200) + call void @finch_str_drop(ptr %a196) + call void @finch_str_drop(ptr %a175) + call void @finch_str_drop(ptr %a172) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a166) + call void @finch_str_drop(ptr %a161) + call void @finch.drop.S_ast_Type(ptr %a114) + call void @finch.drop.S_ast_Type(ptr %a16) + call void @finch_str_drop(ptr %a14) + call void @finch.drop.S_gen_Ref(ptr %a13) + ret void +} + +define internal void @finch.gen.returnStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca %S.ast.Node, align 16 + %a48 = alloca %S.ast.Node, align 16 + %a50 = alloca %S.ast.Node, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca %S.gen.Val, align 16 + %a131 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.gen.Val, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca i64, align 16 + %a329 = alloca i64, align 16 + %a342 = alloca i64, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca %S.gen.Var, align 16 + %a421 = alloca %S.gen.Var, align 16 + %a423 = alloca %S.gen.Var, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca %S.gen.Val, align 16 + %a512 = alloca %S.gen.Val, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic5395, label %ok5396 +panic5395: + call void @finch_panic(ptr @.str.3420, i64 2652, ptr @.str.3421) + unreachable +ok5396: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 + %t6 = load i64, ptr %t5 + %t7 = icmp sgt i64 %t6, 0 + br i1 %t7, label %then5397, label %endif5399 +then5397: + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3422, i64 33, i64 0 }) + br label %endif5399 +endif5399: + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br label %logic.from5400 +logic.from5400: + br i1 %t13, label %logic.rhs5401, label %logic.end5402 +logic.rhs5401: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t15 = load { ptr, i64, i64 }, ptr %t14 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 0, %t16 + br i1 %t17, label %range5403, label %inrange5404 +range5403: + call void @finch_panic_index(ptr @.str.3423, i64 2656, i64 0, i64 %t16) + unreachable +inrange5404: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 + %t20 = getelementptr inbounds %S.ast.Node, ptr %t19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.3424, i64 4, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br label %logic.rend5405 +logic.rend5405: + br label %logic.end5402 +logic.end5402: + %t26 = phi i1 [ false, %logic.from5400 ], [ %t25, %logic.rend5405 ] + br label %logic.from5406 +logic.from5406: + br i1 %t26, label %logic.rhs5407, label %logic.end5408 +logic.rhs5407: + %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 0, %t29 + br i1 %t30, label %range5409, label %inrange5410 +range5409: + call void @finch_panic_index(ptr @.str.3425, i64 2656, i64 0, i64 %t29) + unreachable +inrange5410: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 0 + %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i32 0, i32 1 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.3426, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.rend5411 +logic.rend5411: + br label %logic.end5408 +logic.end5408: + %t39 = phi i1 [ false, %logic.from5406 ], [ %t38, %logic.rend5411 ] + br i1 %t39, label %then5412, label %endif5414 +then5412: + %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 0, %t42 + br i1 %t43, label %range5415, label %inrange5416 +range5415: + call void @finch_panic_index(ptr @.str.3427, i64 2657, i64 0, i64 %t42) + unreachable +inrange5416: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 0 + %t46 = load %S.ast.Node, ptr %t45 + store %S.ast.Node %t46, ptr %a47 + call void @finch.copy.S_ast_Node(ptr %a48, ptr %a47) + %t49 = load %S.ast.Node, ptr %a48 + store %S.ast.Node %t49, ptr %a50 + %t51 = load ptr, ptr %a1 + %t52 = icmp eq ptr %t51, null + br i1 %t52, label %panic5417, label %ok5418 +panic5417: + call void @finch_panic(ptr @.str.3428, i64 2658, ptr @.str.3429) + unreachable +ok5418: + %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 13 + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 9 + %t55 = load i1, ptr %t54 + %t56 = xor i1 %t55, true + br i1 %t56, label %then5419, label %endif5421 +then5419: + store { ptr, i64, i64 } { ptr @.str.3430, i64 1, i64 0 }, ptr %a57 + %t58 = load ptr, ptr %a1 + %t59 = icmp eq ptr %t58, null + br i1 %t59, label %panic5422, label %ok5423 +panic5422: + call void @finch_panic(ptr @.str.3431, i64 2660, ptr @.str.3432) + unreachable +ok5423: + %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 13 + %t61 = getelementptr inbounds %S.gen.FnSig, ptr %t60, i32 0, i32 12 + %t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i32 0, i32 0 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.3433, i64 4, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) + %t67 = icmp eq i32 %t66, 0 + br i1 %t67, label %then5424, label %endif5426 +then5424: + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic5427, label %ok5428 +panic5427: + call void @finch_panic(ptr @.str.3434, i64 2661, ptr @.str.3435) + unreachable +ok5428: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 13 + %t71 = getelementptr inbounds %S.gen.FnSig, ptr %t70, i32 0, i32 12 + %t72 = load %S.ast.Type, ptr %t71 + %t73 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t72) + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.3436, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t78, ptr %a57 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif5426 +endif5426: + %t81 = load ptr, ptr %a1 + %t82 = load %S.ast.Node, ptr %a50 + %t83 = load ptr, ptr %a1 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic5429, label %ok5430 +panic5429: + call void @finch_panic(ptr @.str.3438, i64 2663, ptr @.str.3439) + unreachable +ok5430: + %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 13 + %t86 = getelementptr inbounds %S.gen.FnSig, ptr %t85, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } { ptr @.str.3437, i64 1, i64 0 }, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.3440, i64 64, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + %t97 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t96, ptr %a99 + store { ptr, i64, i64 } %t97, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t96, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t102, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.3441, i64 1, i64 0 }, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + store { ptr, i64, i64 } %t102, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.gen.fail(ptr %t81, %S.ast.Node %t82, { ptr, i64, i64 } %t107) + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a57) + br label %endif5421 +endif5421: + %t109 = load ptr, ptr %a1 + %t110 = load %S.ast.Node, ptr %a50 + call void @finch.gen.checkArgs(ptr %t109, %S.ast.Node %t110, i64 0, i64 1, { ptr, i64, i64 } { ptr @.str.3442, i64 5, i64 0 }) + %t111 = load ptr, ptr %a1 + %t112 = load ptr, ptr %a1 + %t113 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 + %t114 = load { ptr, i64, i64 }, ptr %t113 + %t115 = extractvalue { ptr, i64, i64 } %t114, 1 + %t116 = icmp uge i64 0, %t115 + br i1 %t116, label %range5431, label %inrange5432 +range5431: + call void @finch_panic_index(ptr @.str.3443, i64 2666, i64 0, i64 %t115) + unreachable +inrange5432: + %t117 = extractvalue { ptr, i64, i64 } %t114, 0 + %t118 = getelementptr inbounds %S.ast.Node, ptr %t117, i64 0 + %t119 = load %S.ast.Node, ptr %t118 + %t120 = call %S.gen.Val @finch.gen.expr(ptr %t112, %S.ast.Node %t119) + %t121 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3444, i64 3, i64 0 }) + %t122 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 + %t123 = load { ptr, i64, i64 }, ptr %t122 + %t124 = extractvalue { ptr, i64, i64 } %t123, 1 + %t125 = icmp uge i64 0, %t124 + br i1 %t125, label %range5433, label %inrange5434 +range5433: + call void @finch_panic_index(ptr @.str.3445, i64 2666, i64 0, i64 %t124) + unreachable +inrange5434: + %t126 = extractvalue { ptr, i64, i64 } %t123, 0 + %t127 = getelementptr inbounds %S.ast.Node, ptr %t126, i64 0 + %t128 = load %S.ast.Node, ptr %t127 + %t129 = call %S.gen.Val @finch.gen.coerce(ptr %t111, %S.gen.Val %t120, %S.ast.Type %t121, %S.ast.Node %t128, { ptr, i64, i64 } { ptr @.str.3446, i64 17, i64 0 }) + store %S.gen.Val %t120, ptr %a130 + call void @finch.drop.S_gen_Val(ptr %a130) + store %S.ast.Type %t121, ptr %a131 + call void @finch.drop.S_ast_Type(ptr %a131) + store %S.gen.Val %t129, ptr %a132 + %t133 = load ptr, ptr %a1 + %t134 = load %S.gen.Val, ptr %a132 + %t135 = call { ptr, i64, i64 } @finch.gen.own(ptr %t133, %S.gen.Val %t134) + store { ptr, i64, i64 } %t135, ptr %a136 + %t137 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t137, i64 0) + %t138 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t138, i64 0) + %t139 = load ptr, ptr %a1 + %t140 = load ptr, ptr %a1 + %t141 = load ptr, ptr %a1 + %t142 = icmp eq ptr %t141, null + br i1 %t142, label %panic5435, label %ok5436 +panic5435: + call void @finch_panic(ptr @.str.3448, i64 2670, ptr @.str.3449) + unreachable +ok5436: + %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 13 + %t144 = load %S.gen.FnSig, ptr %t143 + %t145 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t140, %S.gen.FnSig %t144) + store { ptr, i64, i64 } { ptr @.str.3447, i64 4, i64 0 }, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + store { ptr, i64, i64 } %t145, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.3450, i64 1, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load ptr, ptr %a1 + %t157 = load ptr, ptr %a1 + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic5437, label %ok5438 +panic5437: + call void @finch_panic(ptr @.str.3452, i64 2670, ptr @.str.3453) + unreachable +ok5438: + %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 13 + %t161 = load %S.gen.FnSig, ptr %t160 + %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t157, %S.gen.FnSig %t161) + store { ptr, i64, i64 } { ptr @.str.3451, i64 12, i64 0 }, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t162, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t167, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.3454, i64 36, i64 0 }, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t167, ptr %a171 + call void @finch_str_drop(ptr %a171) + %t172 = load { ptr, i64, i64 }, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t172, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t172, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.3455, i64 3, i64 0 }, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t178, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t156, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + store { ptr, i64, i64 } %t155, ptr %a187 + store { ptr, i64, i64 } %t184, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t155, ptr %a189 + call void @finch_str_drop(ptr %a189) + store { ptr, i64, i64 } %t184, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a186 + call void @finch.gen.emit(ptr %t139, { ptr, i64, i64 } %t191) + store { ptr, i64, i64 } %t191, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load ptr, ptr %a1 + %t194 = icmp eq ptr %t193, null + br i1 %t194, label %panic5439, label %ok5440 +panic5439: + call void @finch_panic(ptr @.str.3456, i64 2671, ptr @.str.3457) + unreachable +ok5440: + %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 + store i1 true, ptr %t195 + call void @finch_str_drop(ptr %a136) + call void @finch.drop.S_gen_Val(ptr %a132) + call void @finch.drop.S_ast_Node(ptr %a50) + ret void +endif5414: + %t196 = load ptr, ptr %a1 + %t197 = icmp eq ptr %t196, null + br i1 %t197, label %panic5441, label %ok5442 +panic5441: + call void @finch_panic(ptr @.str.3458, i64 2674, ptr @.str.3459) + unreachable +ok5442: + %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 13 + %t199 = getelementptr inbounds %S.gen.FnSig, ptr %t198, i32 0, i32 12 + %t200 = getelementptr inbounds %S.ast.Type, ptr %t199, i32 0, i32 0 + %t201 = load { ptr, i64, i64 }, ptr %t200 + store { ptr, i64, i64 } %t201, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.3460, i64 4, i64 0 }, ptr %a203 + %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) + %t205 = icmp ne i32 %t204, 0 + br i1 %t205, label %then5443, label %endif5445 +then5443: + %t206 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 + %t208 = load i64, ptr %t207 + %t209 = icmp sgt i64 %t208, 0 + br i1 %t209, label %then5446, label %endif5448 +then5446: + %t210 = load ptr, ptr %a1 + %t211 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t212 = load { ptr, i64, i64 }, ptr %t211 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 0, %t213 + br i1 %t214, label %range5449, label %inrange5450 +range5449: + call void @finch_panic_index(ptr @.str.3461, i64 2676, i64 0, i64 %t213) + unreachable +inrange5450: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 0 + %t217 = load %S.ast.Node, ptr %t216 + %t218 = load ptr, ptr %a1 + %t219 = icmp eq ptr %t218, null + br i1 %t219, label %panic5451, label %ok5452 +panic5451: + call void @finch_panic(ptr @.str.3463, i64 2676, ptr @.str.3464) + unreachable +ok5452: + %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 13 + %t221 = getelementptr inbounds %S.gen.FnSig, ptr %t220, i32 0, i32 1 + %t222 = load { ptr, i64, i64 }, ptr %t221 + store { ptr, i64, i64 } { ptr @.str.3462, i64 1, i64 0 }, ptr %a224 + store { ptr, i64, i64 } %t222, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + %t226 = load { ptr, i64, i64 }, ptr %a223 + store { ptr, i64, i64 } %t226, ptr %a228 + store { ptr, i64, i64 } { ptr @.str.3465, i64 46, i64 0 }, ptr %a229 + call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) + store { ptr, i64, i64 } %t226, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a227 + call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t231) + store { ptr, i64, i64 } %t231, ptr %a232 + call void @finch_str_drop(ptr %a232) + br label %endif5448 +endif5448: + %t233 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t233, i64 0) + %t234 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t234, i64 0) + %t235 = load ptr, ptr %a1 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic5453, label %ok5454 +panic5453: + call void @finch_panic(ptr @.str.3466, i64 2680, ptr @.str.3467) + unreachable +ok5454: + %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 13 + %t238 = getelementptr inbounds %S.gen.FnSig, ptr %t237, i32 0, i32 9 + %t239 = load i1, ptr %t238 + br i1 %t239, label %then5455, label %else5456 +then5455: + %t240 = load ptr, ptr %a1 + %t241 = load ptr, ptr %a1 + %t242 = load ptr, ptr %a1 + %t243 = icmp eq ptr %t242, null + br i1 %t243, label %panic5458, label %ok5459 +panic5458: + call void @finch_panic(ptr @.str.3469, i64 2681, ptr @.str.3470) + unreachable +ok5459: + %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 13 + %t245 = load %S.gen.FnSig, ptr %t244 + %t246 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t241, %S.gen.FnSig %t245) + store { ptr, i64, i64 } { ptr @.str.3468, i64 4, i64 0 }, ptr %a248 + store { ptr, i64, i64 } %t246, ptr %a249 + call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) + store { ptr, i64, i64 } %t246, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.3471, i64 53, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t256) + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch_str_drop(ptr %a257) + br label %endif5457 +else5456: + %t258 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t258, { ptr, i64, i64 } { ptr @.str.3472, i64 8, i64 0 }) + br label %endif5457 +endif5457: + %t259 = load ptr, ptr %a1 + %t260 = icmp eq ptr %t259, null + br i1 %t260, label %panic5460, label %ok5461 +panic5460: + call void @finch_panic(ptr @.str.3473, i64 2685, ptr @.str.3474) + unreachable +ok5461: + %t261 = getelementptr inbounds %S.gen.Gen, ptr %t259, i32 0, i32 9 + store i1 true, ptr %t261 + ret void +endif5445: + %t262 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i32 0, i32 1 + %t264 = load i64, ptr %t263 + %t265 = icmp eq i64 %t264, 0 + br i1 %t265, label %then5462, label %endif5464 +then5462: + %t266 = load ptr, ptr %a1 + %t267 = load %S.ast.Node, ptr %a2 + %t268 = load ptr, ptr %a1 + %t269 = icmp eq ptr %t268, null + br i1 %t269, label %panic5465, label %ok5466 +panic5465: + call void @finch_panic(ptr @.str.3476, i64 2689, ptr @.str.3477) + unreachable +ok5466: + %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 13 + %t271 = getelementptr inbounds %S.gen.FnSig, ptr %t270, i32 0, i32 1 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } { ptr @.str.3475, i64 1, i64 0 }, ptr %a274 + store { ptr, i64, i64 } %t272, ptr %a275 + call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) + %t276 = load { ptr, i64, i64 }, ptr %a273 + store { ptr, i64, i64 } %t276, ptr %a278 + store { ptr, i64, i64 } { ptr @.str.3478, i64 14, i64 0 }, ptr %a279 + call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) + store { ptr, i64, i64 } %t276, ptr %a280 + call void @finch_str_drop(ptr %a280) + %t281 = load { ptr, i64, i64 }, ptr %a277 + %t282 = load ptr, ptr %a1 + %t283 = icmp eq ptr %t282, null + br i1 %t283, label %panic5467, label %ok5468 +panic5467: + call void @finch_panic(ptr @.str.3479, i64 2689, ptr @.str.3480) + unreachable +ok5468: + %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 13 + %t285 = getelementptr inbounds %S.gen.FnSig, ptr %t284, i32 0, i32 12 + %t286 = load %S.ast.Type, ptr %t285 + %t287 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t286) + store { ptr, i64, i64 } %t281, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t281, ptr %a291 + call void @finch_str_drop(ptr %a291) + store { ptr, i64, i64 } %t287, ptr %a292 + call void @finch_str_drop(ptr %a292) + %t293 = load { ptr, i64, i64 }, ptr %a288 + call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t293) + store { ptr, i64, i64 } %t293, ptr %a294 + call void @finch_str_drop(ptr %a294) + br label %endif5464 +endif5464: + %t295 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t296 = load { ptr, i64, i64 }, ptr %t295 + %t297 = extractvalue { ptr, i64, i64 } %t296, 1 + %t298 = icmp uge i64 0, %t297 + br i1 %t298, label %range5469, label %inrange5470 +range5469: + call void @finch_panic_index(ptr @.str.3481, i64 2692, i64 0, i64 %t297) + unreachable +inrange5470: + %t299 = extractvalue { ptr, i64, i64 } %t296, 0 + %t300 = getelementptr inbounds %S.ast.Node, ptr %t299, i64 0 + %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i32 0, i32 0 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store { ptr, i64, i64 } %t302, ptr %a303 + store { ptr, i64, i64 } { ptr @.str.3482, i64 3, i64 0 }, ptr %a304 + %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) + %t306 = icmp ne i32 %t305, 0 + br i1 %t306, label %then5471, label %endif5473 +then5471: + %t307 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t308 = load { ptr, i64, i64 }, ptr %t307 + %t309 = extractvalue { ptr, i64, i64 } %t308, 1 + %t310 = icmp uge i64 0, %t309 + br i1 %t310, label %range5474, label %inrange5475 +range5474: + call void @finch_panic_index(ptr @.str.3483, i64 2693, i64 0, i64 %t309) + unreachable +inrange5475: + %t311 = extractvalue { ptr, i64, i64 } %t308, 0 + %t312 = getelementptr inbounds %S.ast.Node, ptr %t311, i64 0 + %t313 = getelementptr inbounds %S.ast.Node, ptr %t312, i32 0, i32 1 + %t314 = load { ptr, i64, i64 }, ptr %t313 + store { ptr, i64, i64 } %t314, ptr %a315 + call void @finch_str_copy(ptr %a316, ptr %a315) + %t317 = load { ptr, i64, i64 }, ptr %a316 + store { ptr, i64, i64 } %t317, ptr %a318 + %t319 = load ptr, ptr %a1 + %t320 = icmp eq ptr %t319, null + br i1 %t320, label %panic5476, label %ok5477 +panic5476: + call void @finch_panic(ptr @.str.3484, i64 2694, ptr @.str.3485) + unreachable +ok5477: + %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 10 + %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i32 0, i32 1 + %t323 = load i64, ptr %t322 + store i64 %t323, ptr %a324 + br label %while.cond5478 +while.cond5478: + %t325 = load i64, ptr %a324 + %t326 = icmp sgt i64 %t325, 0 + br i1 %t326, label %while.body5479, label %while.end5480 +while.body5479: + %t327 = load i64, ptr %a324 + %t328 = sub i64 %t327, 1 + store i64 %t328, ptr %a324 + store i64 -1, ptr %a329 + %t330 = load ptr, ptr %a1 + %t331 = icmp eq ptr %t330, null + br i1 %t331, label %panic5481, label %ok5482 +panic5481: + call void @finch_panic(ptr @.str.3486, i64 2698, ptr @.str.3487) + unreachable +ok5482: + %t332 = getelementptr inbounds %S.gen.Gen, ptr %t330, i32 0, i32 10 + %t333 = load i64, ptr %a324 + %t334 = load { ptr, i64, i64 }, ptr %t332 + %t335 = extractvalue { ptr, i64, i64 } %t334, 1 + %t336 = icmp uge i64 %t333, %t335 + br i1 %t336, label %range5483, label %inrange5484 +range5483: + call void @finch_panic_index(ptr @.str.3488, i64 2698, i64 %t333, i64 %t335) + unreachable +inrange5484: + %t337 = extractvalue { ptr, i64, i64 } %t334, 0 + %t338 = getelementptr inbounds %S.gen.Scope, ptr %t337, i64 %t333 + %t339 = getelementptr inbounds %S.gen.Scope, ptr %t338, i32 0, i32 0 + %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %t339, i32 0, i32 1 + %t341 = load i64, ptr %t340 + store i64 0, ptr %a342 + br label %for.cond5485 +for.cond5485: + %t343 = load i64, ptr %a342 + %t344 = icmp slt i64 %t343, %t341 + br i1 %t344, label %for.body5486, label %for.end5488 +for.body5486: + %t345 = load ptr, ptr %a1 + %t346 = icmp eq ptr %t345, null + br i1 %t346, label %panic5489, label %ok5490 +panic5489: + call void @finch_panic(ptr @.str.3489, i64 2699, ptr @.str.3490) + unreachable +ok5490: + %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 10 + %t348 = load i64, ptr %a324 + %t349 = load { ptr, i64, i64 }, ptr %t347 + %t350 = extractvalue { ptr, i64, i64 } %t349, 1 + %t351 = icmp uge i64 %t348, %t350 + br i1 %t351, label %range5491, label %inrange5492 +range5491: + call void @finch_panic_index(ptr @.str.3491, i64 2699, i64 %t348, i64 %t350) + unreachable +inrange5492: + %t352 = extractvalue { ptr, i64, i64 } %t349, 0 + %t353 = getelementptr inbounds %S.gen.Scope, ptr %t352, i64 %t348 + %t354 = getelementptr inbounds %S.gen.Scope, ptr %t353, i32 0, i32 0 + %t355 = load i64, ptr %a342 + %t356 = load { ptr, i64, i64 }, ptr %t354 + %t357 = extractvalue { ptr, i64, i64 } %t356, 1 + %t358 = icmp uge i64 %t355, %t357 + br i1 %t358, label %range5493, label %inrange5494 +range5493: + call void @finch_panic_index(ptr @.str.3492, i64 2699, i64 %t355, i64 %t357) + unreachable +inrange5494: + %t359 = extractvalue { ptr, i64, i64 } %t356, 0 + %t360 = getelementptr inbounds %S.gen.Var, ptr %t359, i64 %t355 + %t361 = getelementptr inbounds %S.gen.Var, ptr %t360, i32 0, i32 0 + %t362 = load { ptr, i64, i64 }, ptr %t361 + %t363 = load { ptr, i64, i64 }, ptr %a318 + store { ptr, i64, i64 } %t362, ptr %a364 + store { ptr, i64, i64 } %t363, ptr %a365 + %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) + %t367 = icmp ne i32 %t366, 0 + br label %logic.from5495 +logic.from5495: + br i1 %t367, label %logic.rhs5496, label %logic.end5497 +logic.rhs5496: + %t368 = load ptr, ptr %a1 + %t369 = icmp eq ptr %t368, null + br i1 %t369, label %panic5498, label %ok5499 +panic5498: + call void @finch_panic(ptr @.str.3493, i64 2699, ptr @.str.3494) + unreachable +ok5499: + %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 44 + %t371 = load i1, ptr %t370 + br label %logic.from5500 +logic.from5500: + br i1 %t371, label %logic.rhs5501, label %logic.end5502 +logic.rhs5501: + %t372 = load ptr, ptr %a1 + %t373 = icmp eq ptr %t372, null + br i1 %t373, label %panic5503, label %ok5504 +panic5503: + call void @finch_panic(ptr @.str.3495, i64 2699, ptr @.str.3496) + unreachable +ok5504: + %t374 = getelementptr inbounds %S.gen.Gen, ptr %t372, i32 0, i32 10 + %t375 = load i64, ptr %a324 + %t376 = load { ptr, i64, i64 }, ptr %t374 + %t377 = extractvalue { ptr, i64, i64 } %t376, 1 + %t378 = icmp uge i64 %t375, %t377 + br i1 %t378, label %range5505, label %inrange5506 +range5505: + call void @finch_panic_index(ptr @.str.3497, i64 2699, i64 %t375, i64 %t377) + unreachable +inrange5506: + %t379 = extractvalue { ptr, i64, i64 } %t376, 0 + %t380 = getelementptr inbounds %S.gen.Scope, ptr %t379, i64 %t375 + %t381 = getelementptr inbounds %S.gen.Scope, ptr %t380, i32 0, i32 0 + %t382 = load i64, ptr %a342 + %t383 = load { ptr, i64, i64 }, ptr %t381 + %t384 = extractvalue { ptr, i64, i64 } %t383, 1 + %t385 = icmp uge i64 %t382, %t384 + br i1 %t385, label %range5507, label %inrange5508 +range5507: + call void @finch_panic_index(ptr @.str.3498, i64 2699, i64 %t382, i64 %t384) + unreachable +inrange5508: + %t386 = extractvalue { ptr, i64, i64 } %t383, 0 + %t387 = getelementptr inbounds %S.gen.Var, ptr %t386, i64 %t382 + %t388 = getelementptr inbounds %S.gen.Var, ptr %t387, i32 0, i32 4 + %t389 = load i64, ptr %t388 + %t390 = load ptr, ptr %a1 + %t391 = icmp eq ptr %t390, null + br i1 %t391, label %panic5509, label %ok5510 +panic5509: + call void @finch_panic(ptr @.str.3499, i64 2699, ptr @.str.3500) + unreachable +ok5510: + %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 45 + %t393 = load i64, ptr %t392 + %t394 = icmp sge i64 %t389, %t393 + br label %logic.rend5511 +logic.rend5511: + br label %logic.end5502 +logic.end5502: + %t395 = phi i1 [ false, %logic.from5500 ], [ %t394, %logic.rend5511 ] + %t396 = xor i1 %t395, true + br label %logic.rend5512 +logic.rend5512: + br label %logic.end5497 +logic.end5497: + %t397 = phi i1 [ false, %logic.from5495 ], [ %t396, %logic.rend5512 ] + br i1 %t397, label %then5513, label %endif5515 +then5513: + %t398 = load i64, ptr %a342 + store i64 %t398, ptr %a329 + br label %endif5515 +endif5515: + br label %for.step5487 +for.step5487: + %t399 = load i64, ptr %a342 + %t400 = add i64 %t399, 1 + store i64 %t400, ptr %a342 + br label %for.cond5485 +for.end5488: + %t401 = load i64, ptr %a329 + %t402 = icmp slt i64 %t401, 0 + br i1 %t402, label %then5516, label %endif5518 +then5516: + br label %while.cond5478 +endif5518: + %t403 = load ptr, ptr %a1 + %t404 = icmp eq ptr %t403, null + br i1 %t404, label %panic5519, label %ok5520 +panic5519: + call void @finch_panic(ptr @.str.3501, i64 2706, ptr @.str.3502) + unreachable +ok5520: + %t405 = getelementptr inbounds %S.gen.Gen, ptr %t403, i32 0, i32 10 + %t406 = load i64, ptr %a324 + %t407 = load { ptr, i64, i64 }, ptr %t405 + %t408 = extractvalue { ptr, i64, i64 } %t407, 1 + %t409 = icmp uge i64 %t406, %t408 + br i1 %t409, label %range5521, label %inrange5522 +range5521: + call void @finch_panic_index(ptr @.str.3503, i64 2706, i64 %t406, i64 %t408) + unreachable +inrange5522: + %t410 = extractvalue { ptr, i64, i64 } %t407, 0 + %t411 = getelementptr inbounds %S.gen.Scope, ptr %t410, i64 %t406 + %t412 = getelementptr inbounds %S.gen.Scope, ptr %t411, i32 0, i32 0 + %t413 = load i64, ptr %a329 + %t414 = load { ptr, i64, i64 }, ptr %t412 + %t415 = extractvalue { ptr, i64, i64 } %t414, 1 + %t416 = icmp uge i64 %t413, %t415 + br i1 %t416, label %range5523, label %inrange5524 +range5523: + call void @finch_panic_index(ptr @.str.3504, i64 2706, i64 %t413, i64 %t415) + unreachable +inrange5524: + %t417 = extractvalue { ptr, i64, i64 } %t414, 0 + %t418 = getelementptr inbounds %S.gen.Var, ptr %t417, i64 %t413 + %t419 = load %S.gen.Var, ptr %t418 + store %S.gen.Var %t419, ptr %a420 + call void @finch.copy.S_gen_Var(ptr %a421, ptr %a420) + %t422 = load %S.gen.Var, ptr %a421 + store %S.gen.Var %t422, ptr %a423 + %t424 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 5 + %t425 = load i1, ptr %t424 + br label %logic.from5525 +logic.from5525: + br i1 %t425, label %logic.rhs5526, label %logic.end5527 +logic.rhs5526: + %t426 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 + %t427 = load %S.ast.Type, ptr %t426 + %t428 = load ptr, ptr %a1 + %t429 = icmp eq ptr %t428, null + br i1 %t429, label %panic5528, label %ok5529 +panic5528: + call void @finch_panic(ptr @.str.3505, i64 2707, ptr @.str.3506) + unreachable +ok5529: + %t430 = getelementptr inbounds %S.gen.Gen, ptr %t428, i32 0, i32 13 + %t431 = getelementptr inbounds %S.gen.FnSig, ptr %t430, i32 0, i32 12 + %t432 = load %S.ast.Type, ptr %t431 + %t433 = call i1 @finch.ast.same(%S.ast.Type %t427, %S.ast.Type %t432) + br label %logic.rend5530 +logic.rend5530: + br label %logic.end5527 +logic.end5527: + %t434 = phi i1 [ false, %logic.from5525 ], [ %t433, %logic.rend5530 ] + br i1 %t434, label %then5531, label %endif5533 +then5531: + %t435 = load ptr, ptr %a1 + %t436 = load ptr, ptr %a1 + %t437 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 + %t438 = load %S.ast.Type, ptr %t437 + %t439 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t436, %S.ast.Type %t438) + %t440 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 2 + %t441 = load { ptr, i64, i64 }, ptr %t440 + %t442 = call { ptr, i64, i64 } @finch.gen.load(ptr %t435, { ptr, i64, i64 } %t439, { ptr, i64, i64 } %t441) + store { ptr, i64, i64 } %t439, ptr %a443 + call void @finch_str_drop(ptr %a443) + store { ptr, i64, i64 } %t442, ptr %a444 + %t445 = load ptr, ptr %a1 + %t446 = icmp eq ptr %t445, null + br i1 %t446, label %panic5534, label %ok5535 +panic5534: + call void @finch_panic(ptr @.str.3507, i64 2709, ptr @.str.3508) + unreachable +ok5535: + %t447 = getelementptr inbounds %S.gen.Gen, ptr %t445, i32 0, i32 10 + %t448 = load i64, ptr %a324 + %t449 = load { ptr, i64, i64 }, ptr %t447 + %t450 = extractvalue { ptr, i64, i64 } %t449, 1 + %t451 = icmp uge i64 %t448, %t450 + br i1 %t451, label %range5536, label %inrange5537 +range5536: + call void @finch_panic_index(ptr @.str.3509, i64 2709, i64 %t448, i64 %t450) + unreachable +inrange5537: + %t452 = extractvalue { ptr, i64, i64 } %t449, 0 + %t453 = getelementptr inbounds %S.gen.Scope, ptr %t452, i64 %t448 + %t454 = getelementptr inbounds %S.gen.Scope, ptr %t453, i32 0, i32 0 + %t455 = load i64, ptr %a329 + %t456 = load { ptr, i64, i64 }, ptr %t454 + %t457 = extractvalue { ptr, i64, i64 } %t456, 1 + %t458 = icmp uge i64 %t455, %t457 + br i1 %t458, label %range5538, label %inrange5539 +range5538: + call void @finch_panic_index(ptr @.str.3510, i64 2709, i64 %t455, i64 %t457) + unreachable +inrange5539: + %t459 = extractvalue { ptr, i64, i64 } %t456, 0 + %t460 = getelementptr inbounds %S.gen.Var, ptr %t459, i64 %t455 + %t461 = getelementptr inbounds %S.gen.Var, ptr %t460, i32 0, i32 6 + store i1 true, ptr %t461 + %t462 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t462, i64 0) + %t463 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t463, i64 0) + %t464 = load ptr, ptr %a1 + %t465 = icmp eq ptr %t464, null + br i1 %t465, label %panic5540, label %ok5541 +panic5540: + call void @finch_panic(ptr @.str.3511, i64 2712, ptr @.str.3512) + unreachable +ok5541: + %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 10 + %t467 = load i64, ptr %a324 + %t468 = load { ptr, i64, i64 }, ptr %t466 + %t469 = extractvalue { ptr, i64, i64 } %t468, 1 + %t470 = icmp uge i64 %t467, %t469 + br i1 %t470, label %range5542, label %inrange5543 +range5542: + call void @finch_panic_index(ptr @.str.3513, i64 2712, i64 %t467, i64 %t469) + unreachable +inrange5543: + %t471 = extractvalue { ptr, i64, i64 } %t468, 0 + %t472 = getelementptr inbounds %S.gen.Scope, ptr %t471, i64 %t467 + %t473 = getelementptr inbounds %S.gen.Scope, ptr %t472, i32 0, i32 0 + %t474 = load i64, ptr %a329 + %t475 = load { ptr, i64, i64 }, ptr %t473 + %t476 = extractvalue { ptr, i64, i64 } %t475, 1 + %t477 = icmp uge i64 %t474, %t476 + br i1 %t477, label %range5544, label %inrange5545 +range5544: + call void @finch_panic_index(ptr @.str.3514, i64 2712, i64 %t474, i64 %t476) + unreachable +inrange5545: + %t478 = extractvalue { ptr, i64, i64 } %t475, 0 + %t479 = getelementptr inbounds %S.gen.Var, ptr %t478, i64 %t474 + %t480 = getelementptr inbounds %S.gen.Var, ptr %t479, i32 0, i32 6 + store i1 false, ptr %t480 + %t481 = load ptr, ptr %a1 + %t482 = load { ptr, i64, i64 }, ptr %a444 + call void @finch.gen.finishReturn(ptr %t481, { ptr, i64, i64 } %t482) + call void @finch_str_drop(ptr %a444) + call void @finch.drop.S_gen_Var(ptr %a423) + call void @finch_str_drop(ptr %a318) + ret void +endif5533: + call void @finch.drop.S_gen_Var(ptr %a423) + br label %while.end5480 +while.end5480: + call void @finch_str_drop(ptr %a318) + br label %endif5473 +endif5473: + %t483 = load ptr, ptr %a1 + %t484 = load ptr, ptr %a1 + %t485 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t486 = load { ptr, i64, i64 }, ptr %t485 + %t487 = extractvalue { ptr, i64, i64 } %t486, 1 + %t488 = icmp uge i64 0, %t487 + br i1 %t488, label %range5546, label %inrange5547 +range5546: + call void @finch_panic_index(ptr @.str.3515, i64 2719, i64 0, i64 %t487) + unreachable +inrange5547: + %t489 = extractvalue { ptr, i64, i64 } %t486, 0 + %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 + %t491 = load %S.ast.Node, ptr %t490 + %t492 = load ptr, ptr %a1 + %t493 = icmp eq ptr %t492, null + br i1 %t493, label %panic5548, label %ok5549 +panic5548: + call void @finch_panic(ptr @.str.3516, i64 2719, ptr @.str.3517) + unreachable +ok5549: + %t494 = getelementptr inbounds %S.gen.Gen, ptr %t492, i32 0, i32 13 + %t495 = getelementptr inbounds %S.gen.FnSig, ptr %t494, i32 0, i32 12 + %t496 = load %S.ast.Type, ptr %t495 + %t497 = call %S.gen.Val @finch.gen.exprWant(ptr %t484, %S.ast.Node %t491, %S.ast.Type %t496) + %t498 = load ptr, ptr %a1 + %t499 = icmp eq ptr %t498, null + br i1 %t499, label %panic5550, label %ok5551 +panic5550: + call void @finch_panic(ptr @.str.3518, i64 2719, ptr @.str.3519) + unreachable +ok5551: + %t500 = getelementptr inbounds %S.gen.Gen, ptr %t498, i32 0, i32 13 + %t501 = getelementptr inbounds %S.gen.FnSig, ptr %t500, i32 0, i32 12 + %t502 = load %S.ast.Type, ptr %t501 + %t503 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t504 = load { ptr, i64, i64 }, ptr %t503 + %t505 = extractvalue { ptr, i64, i64 } %t504, 1 + %t506 = icmp uge i64 0, %t505 + br i1 %t506, label %range5552, label %inrange5553 +range5552: + call void @finch_panic_index(ptr @.str.3520, i64 2719, i64 0, i64 %t505) + unreachable +inrange5553: + %t507 = extractvalue { ptr, i64, i64 } %t504, 0 + %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 0 + %t509 = load %S.ast.Node, ptr %t508 + %t510 = call %S.gen.Val @finch.gen.coerce(ptr %t483, %S.gen.Val %t497, %S.ast.Type %t502, %S.ast.Node %t509, { ptr, i64, i64 } { ptr @.str.3521, i64 18, i64 0 }) + store %S.gen.Val %t497, ptr %a511 + call void @finch.drop.S_gen_Val(ptr %a511) + store %S.gen.Val %t510, ptr %a512 + %t513 = load ptr, ptr %a1 + %t514 = load %S.gen.Val, ptr %a512 + %t515 = call { ptr, i64, i64 } @finch.gen.own(ptr %t513, %S.gen.Val %t514) + store { ptr, i64, i64 } %t515, ptr %a516 + %t517 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t517, i64 0) + %t518 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t518, i64 0) + %t519 = load ptr, ptr %a1 + %t520 = load { ptr, i64, i64 }, ptr %a516 + call void @finch.gen.finishReturn(ptr %t519, { ptr, i64, i64 } %t520) + call void @finch_str_drop(ptr %a516) + call void @finch.drop.S_gen_Val(ptr %a512) + ret void +} + +define internal void @finch.gen.finishReturn(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic5554, label %ok5555 +panic5554: + call void @finch_panic(ptr @.str.3522, i64 2727, ptr @.str.3523) + unreachable +ok5555: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %t5, i32 0, i32 9 + %t7 = load i1, ptr %t6 + br i1 %t7, label %then5556, label %else5557 +then5556: + %t8 = load ptr, ptr %a1 + %t9 = load ptr, ptr %a1 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic5559, label %ok5560 +panic5559: + call void @finch_panic(ptr @.str.3525, i64 2728, ptr @.str.3526) + unreachable +ok5560: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 + %t13 = load %S.gen.FnSig, ptr %t12 + %t14 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t9, %S.gen.FnSig %t13) + store { ptr, i64, i64 } { ptr @.str.3524, i64 12, i64 0 }, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.3527, i64 28, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + %t25 = call { ptr, i64, i64 } @finch.gen.op(ptr %t8, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t24, ptr %a26 + call void @finch_str_drop(ptr %a26) + store { ptr, i64, i64 } %t25, ptr %a27 + %t28 = load ptr, ptr %a1 + %t29 = load ptr, ptr %a1 + %t30 = load ptr, ptr %a1 + %t31 = icmp eq ptr %t30, null + br i1 %t31, label %panic5561, label %ok5562 +panic5561: + call void @finch_panic(ptr @.str.3529, i64 2729, ptr @.str.3530) + unreachable +ok5562: + %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 13 + %t33 = load %S.gen.FnSig, ptr %t32 + %t34 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t29, %S.gen.FnSig %t33) + store { ptr, i64, i64 } { ptr @.str.3528, i64 12, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.3531, i64 1, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t44, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t44, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.3532, i64 2, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load ptr, ptr %a1 + %t57 = load ptr, ptr %a1 + %t58 = icmp eq ptr %t57, null + br i1 %t58, label %panic5563, label %ok5564 +panic5563: + call void @finch_panic(ptr @.str.3533, i64 2729, ptr @.str.3534) + unreachable +ok5564: + %t59 = getelementptr inbounds %S.gen.Gen, ptr %t57, i32 0, i32 13 + %t60 = getelementptr inbounds %S.gen.FnSig, ptr %t59, i32 0, i32 12 + %t61 = load %S.ast.Type, ptr %t60 + %t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t56, %S.ast.Type %t61) + store { ptr, i64, i64 } %t55, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t55, ptr %a66 + call void @finch_str_drop(ptr %a66) + store { ptr, i64, i64 } %t62, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t68, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.3535, i64 1, i64 0 }, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + %t74 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t73, ptr %a76 + store { ptr, i64, i64 } %t74, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t73, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3536, i64 3, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + %t85 = call { ptr, i64, i64 } @finch.gen.op(ptr %t28, { ptr, i64, i64 } %t84) + store { ptr, i64, i64 } %t84, ptr %a86 + call void @finch_str_drop(ptr %a86) + store { ptr, i64, i64 } %t85, ptr %a87 + %t88 = load ptr, ptr %a1 + %t89 = load ptr, ptr %a1 + %t90 = load ptr, ptr %a1 + %t91 = icmp eq ptr %t90, null + br i1 %t91, label %panic5565, label %ok5566 +panic5565: + call void @finch_panic(ptr @.str.3538, i64 2730, ptr @.str.3539) + unreachable +ok5566: + %t92 = getelementptr inbounds %S.gen.Gen, ptr %t90, i32 0, i32 13 + %t93 = load %S.gen.FnSig, ptr %t92 + %t94 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t89, %S.gen.FnSig %t93) + store { ptr, i64, i64 } { ptr @.str.3537, i64 4, i64 0 }, ptr %a96 + store { ptr, i64, i64 } %t94, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t99, ptr %a101 + store { ptr, i64, i64 } { ptr @.str.3540, i64 1, i64 0 }, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t99, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + %t105 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t104, ptr %a107 + store { ptr, i64, i64 } %t105, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } %t110) + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_drop(ptr %a111) + call void @finch_str_drop(ptr %a87) + call void @finch_str_drop(ptr %a27) + br label %endif5558 +else5557: + %t112 = load ptr, ptr %a1 + %t113 = load ptr, ptr %a1 + %t114 = load ptr, ptr %a1 + %t115 = icmp eq ptr %t114, null + br i1 %t115, label %panic5567, label %ok5568 +panic5567: + call void @finch_panic(ptr @.str.3542, i64 2732, ptr @.str.3543) + unreachable +ok5568: + %t116 = getelementptr inbounds %S.gen.Gen, ptr %t114, i32 0, i32 13 + %t117 = getelementptr inbounds %S.gen.FnSig, ptr %t116, i32 0, i32 12 + %t118 = load %S.ast.Type, ptr %t117 + %t119 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t113, %S.ast.Type %t118) + store { ptr, i64, i64 } { ptr @.str.3541, i64 4, i64 0 }, ptr %a121 + store { ptr, i64, i64 } %t119, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t124, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.3544, i64 1, i64 0 }, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load { ptr, i64, i64 }, ptr %a125 + %t130 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t129, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t129, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + call void @finch.gen.emit(ptr %t112, { ptr, i64, i64 } %t135) + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_drop(ptr %a136) + br label %endif5558 +endif5558: + %t137 = load ptr, ptr %a1 + %t138 = icmp eq ptr %t137, null + br i1 %t138, label %panic5569, label %ok5570 +panic5569: + call void @finch_panic(ptr @.str.3545, i64 2734, ptr @.str.3546) + unreachable +ok5570: + %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 9 + store i1 true, ptr %t139 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.entryTy(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t5 = load { ptr, i64, i64 }, ptr %t4 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 0, %t6 + br i1 %t7, label %range5571, label %inrange5572 +range5571: + call void @finch_panic_index(ptr @.str.3548, i64 2746, i64 0, i64 %t6) + unreachable +inrange5572: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 0 + %t10 = load %S.ast.Type, ptr %t9 + %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t10) + store { ptr, i64, i64 } { ptr @.str.3547, i64 7, i64 0 }, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t11, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.3549, i64 2, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + %t22 = load ptr, ptr %a1 + %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t24 = load { ptr, i64, i64 }, ptr %t23 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 1, %t25 + br i1 %t26, label %range5573, label %inrange5574 +range5573: + call void @finch_panic_index(ptr @.str.3550, i64 2746, i64 1, i64 %t25) + unreachable +inrange5574: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.ast.Type, ptr %t27, i64 1 + %t29 = load %S.ast.Type, ptr %t28 + %t30 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t22, %S.ast.Type %t29) + store { ptr, i64, i64 } %t21, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t21, ptr %a34 + call void @finch_str_drop(ptr %a34) + store { ptr, i64, i64 } %t30, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t36, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.3551, i64 2, i64 0 }, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t36, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + ret { ptr, i64, i64 } %t41 +} + +define internal { ptr, i64, i64 } @finch.gen.entrySize(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load %S.ast.Type, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t3, %S.ast.Type %t4) + store { ptr, i64, i64 } { ptr @.str.3552, i64 29, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t5, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t5, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.3553, i64 26, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + ret { ptr, i64, i64 } %t15 +} + +define internal { ptr, i64, i64 } @finch.gen.entryAt(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load ptr, ptr %a1 + %t7 = load ptr, ptr %a1 + %t8 = load %S.ast.Type, ptr %a3 + %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t7, %S.ast.Type %t8) + store { ptr, i64, i64 } { ptr @.str.3555, i64 23, i64 0 }, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t9, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3556, i64 6, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + %t20 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t19, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t19, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.3557, i64 14, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + %t31 = call { ptr, i64, i64 } @finch.gen.op(ptr %t6, { ptr, i64, i64 } %t30) + store { ptr, i64, i64 } %t30, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = call { ptr, i64, i64 } @finch.gen.load(ptr %t5, { ptr, i64, i64 } { ptr @.str.3554, i64 3, i64 0 }, { ptr, i64, i64 } %t31) + store { ptr, i64, i64 } %t31, ptr %a34 + call void @finch_str_drop(ptr %a34) + store { ptr, i64, i64 } %t33, ptr %a35 + %t36 = load ptr, ptr %a1 + %t37 = load ptr, ptr %a1 + %t38 = load %S.ast.Type, ptr %a3 + %t39 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t37, %S.ast.Type %t38) + store { ptr, i64, i64 } { ptr @.str.3558, i64 23, i64 0 }, ptr %a41 + store { ptr, i64, i64 } %t39, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t44, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.3559, i64 6, i64 0 }, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + store { ptr, i64, i64 } %t44, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a45 + %t50 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t49, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.3560, i64 6, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t60, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = call { ptr, i64, i64 } @finch.gen.op(ptr %t36, { ptr, i64, i64 } %t66) + store { ptr, i64, i64 } %t66, ptr %a68 + call void @finch_str_drop(ptr %a68) + call void @finch_str_drop(ptr %a35) + ret { ptr, i64, i64 } %t67 +} + +define internal { ptr, i64, i64 } @finch.gen.entryField(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i64 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca i64, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load ptr, ptr %a1 + %t7 = load %S.ast.Type, ptr %a3 + %t8 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t6, %S.ast.Type %t7) + store { ptr, i64, i64 } { ptr @.str.3561, i64 23, i64 0 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.3562, i64 6, i64 0 }, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t18, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.3563, i64 13, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t29, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + %t39 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t38) + store { ptr, i64, i64 } %t38, ptr %a40 + call void @finch_str_drop(ptr %a40) + ret { ptr, i64, i64 } %t39 +} + +define internal { ptr, i64, i64 } @finch.gen.mapArgs(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.3564, i64 1, i64 0 }, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 0, %t8 + br i1 %t9, label %range5575, label %inrange5576 +range5575: + call void @finch_panic_index(ptr @.str.3565, i64 2766, i64 0, i64 %t8) + unreachable +inrange5576: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 + %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.3566, i64 3, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br i1 %t17, label %then5577, label %endif5579 +then5577: + %t18 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.3567, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t18, ptr %a19 + call void @finch_str_drop(ptr %a19) + br label %endif5579 +endif5579: + %t20 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.3568, i64 4, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.3569, i64 6, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t29, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.3570, i64 6, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load ptr, ptr %a1 + %t42 = load %S.ast.Type, ptr %a4 + %t43 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t41, %S.ast.Type %t42) + store { ptr, i64, i64 } %t40, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t40, ptr %a47 + call void @finch_str_drop(ptr %a47) + store { ptr, i64, i64 } %t43, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.3571, i64 6, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + %t55 = load ptr, ptr %a1 + %t56 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t57 = load { ptr, i64, i64 }, ptr %t56 + %t58 = extractvalue { ptr, i64, i64 } %t57, 1 + %t59 = icmp uge i64 0, %t58 + br i1 %t59, label %range5580, label %inrange5581 +range5580: + call void @finch_panic_index(ptr @.str.3572, i64 2769, i64 0, i64 %t58) + unreachable +inrange5581: + %t60 = extractvalue { ptr, i64, i64 } %t57, 0 + %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i64 0 + %t62 = load %S.ast.Type, ptr %t61 + %t63 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t55, %S.ast.Type %t62) + store { ptr, i64, i64 } %t54, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t54, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.3573, i64 6, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t74, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t74, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + call void @finch_str_drop(ptr %a5) + ret { ptr, i64, i64 } %t80 +} + +define internal { ptr, i64, i64 } @finch.gen.mapFind(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + %t8 = load { ptr, i64, i64 }, ptr %a3 + %t9 = load %S.ast.Type, ptr %a4 + %t10 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, %S.ast.Type %t9) + store { ptr, i64, i64 } { ptr @.str.3574, i64 25, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t10, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.3575, i64 1, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + %t21 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t20) + store { ptr, i64, i64 } %t20, ptr %a22 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t21 +} + +define internal { ptr, i64, i64 } @finch.gen.defaultVal(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.3576, i64 6, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.from5582 +logic.from5582: + br i1 %t9, label %logic.rhs5583, label %logic.end5584 +logic.rhs5583: + %t10 = load ptr, ptr %a1 + %t11 = load %S.ast.Type, ptr %a2 + %t12 = call i1 @finch.gen.hasDefaults(ptr %t10, %S.ast.Type %t11) + br label %logic.rend5585 +logic.rend5585: + br label %logic.end5584 +logic.end5584: + %t13 = phi i1 [ false, %logic.from5582 ], [ %t12, %logic.rend5585 ] + br i1 %t13, label %then5586, label %endif5588 +then5586: + store { ptr, i64, i64 } zeroinitializer, ptr %a14 + store { ptr, i64, i64 } zeroinitializer, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = load ptr, ptr %a1 + %t18 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = call i64 @finch.gen.findStruct(ptr %t17, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) + %t23 = load { ptr, i64, i64 }, ptr %a14 + %t24 = load { ptr, i64, i64 }, ptr %a15 + %t25 = load %S.ast.Node, ptr %a3 + %t26 = call %S.gen.Val @finch.gen.construct(ptr %t16, i64 %t22, { ptr, i64, i64 } %t23, { ptr, i64, i64 } %t24, %S.ast.Node %t25) + %t27 = extractvalue %S.gen.Val %t26, 0 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_copy(ptr %a29, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store %S.gen.Val %t26, ptr %a31 + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.arr_str(ptr %a15) + call void @finch.drop.arr_S_ast_Node(ptr %a14) + ret { ptr, i64, i64 } %t30 +endif5588: + %t32 = load %S.ast.Type, ptr %a2 + %t33 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t32) + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.gen.mapSlot(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.gen.Val %p3, i1 %p4, %S.ast.Node %p5) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a5 = alloca i1, align 16 + %a6 = alloca %S.ast.Node, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.ast.Type, align 16 + %a130 = alloca %S.gen.Val, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.gen.Val %p3, ptr %a4 + store i1 %p4, ptr %a5 + store %S.ast.Node %p5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = load %S.gen.Val, ptr %a4 + %t9 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t7, %S.gen.Val %t8) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t11, { ptr, i64, i64 } { ptr @.str.3577, i64 3, i64 0 }) + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.gen.store(ptr %t14, { ptr, i64, i64 } { ptr @.str.3578, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3579, i64 1, i64 0 }, { ptr, i64, i64 } %t15) + %t16 = load ptr, ptr %a1 + %t17 = load ptr, ptr %a1 + %t18 = load { ptr, i64, i64 }, ptr %a2 + %t19 = load { ptr, i64, i64 }, ptr %a10 + %t20 = load %S.ast.Type, ptr %a3 + %t21 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t17, { ptr, i64, i64 } %t18, { ptr, i64, i64 } %t19, %S.ast.Type %t20) + store { ptr, i64, i64 } { ptr @.str.3580, i64 25, i64 0 }, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.3581, i64 6, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t31, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t31, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.3582, i64 1, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + %t43 = call { ptr, i64, i64 } @finch.gen.op(ptr %t16, { ptr, i64, i64 } %t42) + store { ptr, i64, i64 } %t42, ptr %a44 + call void @finch_str_drop(ptr %a44) + store { ptr, i64, i64 } %t43, ptr %a45 + %t46 = load ptr, ptr %a1 + %t47 = load { ptr, i64, i64 }, ptr %a2 + %t48 = load %S.ast.Type, ptr %a3 + %t49 = load { ptr, i64, i64 }, ptr %a45 + %t50 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t46, { ptr, i64, i64 } %t47, %S.ast.Type %t48, { ptr, i64, i64 } %t49) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t52, { ptr, i64, i64 } { ptr @.str.3583, i64 7, i64 0 }) + store { ptr, i64, i64 } %t53, ptr %a54 + %t55 = load ptr, ptr %a1 + %t56 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t55, { ptr, i64, i64 } { ptr @.str.3584, i64 8, i64 0 }) + store { ptr, i64, i64 } %t56, ptr %a57 + %t58 = load ptr, ptr %a1 + %t59 = load ptr, ptr %a1 + %t60 = load ptr, ptr %a1 + %t61 = load { ptr, i64, i64 }, ptr %a13 + %t62 = call { ptr, i64, i64 } @finch.gen.load(ptr %t60, { ptr, i64, i64 } { ptr @.str.3586, i64 3, i64 0 }, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } { ptr @.str.3585, i64 12, i64 0 }, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t67, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.3587, i64 3, i64 0 }, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + %t73 = call { ptr, i64, i64 } @finch.gen.op(ptr %t59, { ptr, i64, i64 } %t72) + store { ptr, i64, i64 } %t72, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a54 + %t76 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.gen.condBr(ptr %t58, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load ptr, ptr %a1 + %t79 = load { ptr, i64, i64 }, ptr %a54 + call void @finch.gen.label(ptr %t78, { ptr, i64, i64 } %t79) + %t80 = load ptr, ptr %a1 + %t81 = load ptr, ptr %a1 + %t82 = load { ptr, i64, i64 }, ptr %a51 + %t83 = load %S.ast.Type, ptr %a3 + %t84 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t81, { ptr, i64, i64 } %t82, %S.ast.Type %t83, i64 1) + %t85 = load { ptr, i64, i64 }, ptr %a10 + %t86 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + %t88 = extractvalue { ptr, i64, i64 } %t87, 1 + %t89 = icmp uge i64 0, %t88 + br i1 %t89, label %range5589, label %inrange5590 +range5589: + call void @finch_panic_index(ptr @.str.3588, i64 2797, i64 0, i64 %t88) + unreachable +inrange5590: + %t90 = extractvalue { ptr, i64, i64 } %t87, 0 + %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i64 0 + %t92 = load %S.ast.Type, ptr %t91 + call void @finch.gen.copyAt(ptr %t80, { ptr, i64, i64 } %t84, { ptr, i64, i64 } %t85, %S.ast.Type %t92) + store { ptr, i64, i64 } %t84, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load i1, ptr %a5 + br i1 %t94, label %then5591, label %endif5593 +then5591: + %t95 = load ptr, ptr %a1 + %t96 = load ptr, ptr %a1 + %t97 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t98 = load { ptr, i64, i64 }, ptr %t97 + %t99 = extractvalue { ptr, i64, i64 } %t98, 1 + %t100 = icmp uge i64 1, %t99 + br i1 %t100, label %range5594, label %inrange5595 +range5594: + call void @finch_panic_index(ptr @.str.3589, i64 2799, i64 1, i64 %t99) + unreachable +inrange5595: + %t101 = extractvalue { ptr, i64, i64 } %t98, 0 + %t102 = getelementptr inbounds %S.ast.Type, ptr %t101, i64 1 + %t103 = load %S.ast.Type, ptr %t102 + %t104 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t103) + %t105 = load ptr, ptr %a1 + %t106 = load ptr, ptr %a1 + %t107 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t108 = load { ptr, i64, i64 }, ptr %t107 + %t109 = extractvalue { ptr, i64, i64 } %t108, 1 + %t110 = icmp uge i64 1, %t109 + br i1 %t110, label %range5596, label %inrange5597 +range5596: + call void @finch_panic_index(ptr @.str.3590, i64 2799, i64 1, i64 %t109) + unreachable +inrange5597: + %t111 = extractvalue { ptr, i64, i64 } %t108, 0 + %t112 = getelementptr inbounds %S.ast.Type, ptr %t111, i64 1 + %t113 = load %S.ast.Type, ptr %t112 + %t114 = load %S.ast.Node, ptr %a6 + %t115 = call { ptr, i64, i64 } @finch.gen.defaultVal(ptr %t106, %S.ast.Type %t113, %S.ast.Node %t114) + %t116 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t115, 0 + %t117 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = extractvalue { ptr, i64, i64 } %t118, 1 + %t120 = icmp uge i64 1, %t119 + br i1 %t120, label %range5598, label %inrange5599 +range5598: + call void @finch_panic_index(ptr @.str.3591, i64 2799, i64 1, i64 %t119) + unreachable +inrange5599: + %t121 = extractvalue { ptr, i64, i64 } %t118, 0 + %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 1 + %t123 = load %S.ast.Type, ptr %t122 + store %S.ast.Type %t123, ptr %a124 + call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) + %t126 = load %S.ast.Type, ptr %a125 + %t127 = insertvalue %S.gen.Val %t116, %S.ast.Type %t126, 1 + %t128 = insertvalue %S.gen.Val %t127, i1 true, 2 + %t129 = call { ptr, i64, i64 } @finch.gen.own(ptr %t105, %S.gen.Val %t128) + store %S.gen.Val %t128, ptr %a130 + call void @finch.drop.S_gen_Val(ptr %a130) + %t131 = load ptr, ptr %a1 + %t132 = load { ptr, i64, i64 }, ptr %a51 + %t133 = load %S.ast.Type, ptr %a3 + %t134 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t131, { ptr, i64, i64 } %t132, %S.ast.Type %t133, i64 2) + call void @finch.gen.store(ptr %t95, { ptr, i64, i64 } %t104, { ptr, i64, i64 } %t129, { ptr, i64, i64 } %t134) + store { ptr, i64, i64 } %t104, ptr %a135 + call void @finch_str_drop(ptr %a135) + store { ptr, i64, i64 } %t129, ptr %a136 + call void @finch_str_drop(ptr %a136) + store { ptr, i64, i64 } %t134, ptr %a137 + call void @finch_str_drop(ptr %a137) + br label %endif5593 +endif5593: + %t138 = load ptr, ptr %a1 + %t139 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.gen.br(ptr %t138, { ptr, i64, i64 } %t139) + %t140 = load ptr, ptr %a1 + %t141 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.gen.label(ptr %t140, { ptr, i64, i64 } %t141) + %t142 = load { ptr, i64, i64 }, ptr %a51 + call void @finch_str_drop(ptr %a57) + call void @finch_str_drop(ptr %a54) + call void @finch_str_drop(ptr %a45) + call void @finch_str_drop(ptr %a13) + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t142 +} + +define internal %S.gen.Ref @finch.gen.mapIndex(ptr %p0, %S.ast.Node %p1, %S.gen.Ref %p2, %S.ast.Type %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.Ref, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca i1, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a14 = alloca %S.ast.Type, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a24 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.ast.Type, align 16 + %a27 = alloca %S.ast.Type, align 16 + %a48 = alloca %S.gen.Val, align 16 + %a49 = alloca %S.gen.Val, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca %S.ast.Type, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a220 = alloca %S.ast.Type, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca %S.ast.Type, align 16 + %a239 = alloca %S.ast.Type, align 16 + %a242 = alloca %S.gen.Val, align 16 + %a256 = alloca %S.ast.Type, align 16 + %a257 = alloca %S.ast.Type, align 16 + %a262 = alloca %S.gen.Val, align 16 + %a268 = alloca %S.gen.Val, align 16 + %a269 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.Ref %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 0, %t8 + br i1 %t9, label %range5600, label %inrange5601 +range5600: + call void @finch_panic_index(ptr @.str.3592, i64 2808, i64 0, i64 %t8) + unreachable +inrange5601: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 + %t12 = load %S.ast.Type, ptr %t11 + store %S.ast.Type %t12, ptr %a13 + call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) + %t15 = load %S.ast.Type, ptr %a14 + store %S.ast.Type %t15, ptr %a16 + %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 1, %t19 + br i1 %t20, label %range5602, label %inrange5603 +range5602: + call void @finch_panic_index(ptr @.str.3593, i64 2809, i64 1, i64 %t19) + unreachable +inrange5603: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 + %t23 = load %S.ast.Type, ptr %t22 + store %S.ast.Type %t23, ptr %a24 + call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) + %t26 = load %S.ast.Type, ptr %a25 + store %S.ast.Type %t26, ptr %a27 + %t28 = load ptr, ptr %a1 + %t29 = load ptr, ptr %a1 + %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t31 = load { ptr, i64, i64 }, ptr %t30 + %t32 = extractvalue { ptr, i64, i64 } %t31, 1 + %t33 = icmp uge i64 1, %t32 + br i1 %t33, label %range5604, label %inrange5605 +range5604: + call void @finch_panic_index(ptr @.str.3594, i64 2810, i64 1, i64 %t32) + unreachable +inrange5605: + %t34 = extractvalue { ptr, i64, i64 } %t31, 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 1 + %t36 = load %S.ast.Node, ptr %t35 + %t37 = load %S.ast.Type, ptr %a16 + %t38 = call %S.gen.Val @finch.gen.exprWant(ptr %t29, %S.ast.Node %t36, %S.ast.Type %t37) + %t39 = load %S.ast.Type, ptr %a16 + %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 1, %t42 + br i1 %t43, label %range5606, label %inrange5607 +range5606: + call void @finch_panic_index(ptr @.str.3595, i64 2810, i64 1, i64 %t42) + unreachable +inrange5607: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 1 + %t46 = load %S.ast.Node, ptr %t45 + %t47 = call %S.gen.Val @finch.gen.coerce(ptr %t28, %S.gen.Val %t38, %S.ast.Type %t39, %S.ast.Node %t46, { ptr, i64, i64 } { ptr @.str.3596, i64 7, i64 0 }) + store %S.gen.Val %t38, ptr %a48 + call void @finch.drop.S_gen_Val(ptr %a48) + store %S.gen.Val %t47, ptr %a49 + %t50 = load i1, ptr %a5 + br i1 %t50, label %then5608, label %endif5610 +then5608: + %t51 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t52 = load i1, ptr %t51 + %t53 = xor i1 %t52, true + br i1 %t53, label %then5611, label %endif5613 +then5611: + %t54 = load ptr, ptr %a1 + %t55 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } { ptr @.str.3597, i64 44, i64 0 }) + br label %endif5613 +endif5613: + %t56 = load ptr, ptr %a1 + %t57 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t58 = getelementptr inbounds %S.gen.Place, ptr %t57, i32 0, i32 0 + %t59 = load { ptr, i64, i64 }, ptr %t58 + %t60 = load %S.ast.Type, ptr %a4 + %t61 = load %S.gen.Val, ptr %a49 + %t62 = load %S.ast.Node, ptr %a2 + %t63 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t56, { ptr, i64, i64 } %t59, %S.ast.Type %t60, %S.gen.Val %t61, i1 true, %S.ast.Node %t62) + store { ptr, i64, i64 } %t63, ptr %a64 + %t65 = load ptr, ptr %a1 + %t66 = load %S.gen.Val, ptr %a49 + call void @finch.gen.release(ptr %t65, %S.gen.Val %t66) + %t67 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t68 = load ptr, ptr %a1 + %t69 = load { ptr, i64, i64 }, ptr %a64 + %t70 = load %S.ast.Type, ptr %a4 + %t71 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t68, { ptr, i64, i64 } %t69, %S.ast.Type %t70, i64 2) + %t72 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t71, 0 + %t73 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t73, ptr %a74 + call void @finch.copy.S_ast_Type(ptr %a75, ptr %a74) + %t76 = load %S.ast.Type, ptr %a75 + %t77 = insertvalue %S.gen.Place %t72, %S.ast.Type %t76, 1 + %t78 = insertvalue %S.gen.Ref %t67, %S.gen.Place %t77, 1 + call void @finch_str_drop(ptr %a64) + call void @finch.drop.S_gen_Val(ptr %a49) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret %S.gen.Ref %t78 +endif5610: + store { ptr, i64, i64 } { ptr @.str.3598, i64 0, i64 0 }, ptr %a79 + %t80 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t81 = load i1, ptr %t80 + br i1 %t81, label %then5614, label %else5615 +then5614: + %t82 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t83 = getelementptr inbounds %S.gen.Place, ptr %t82, i32 0, i32 0 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } %t84, ptr %a85 + call void @finch_str_copy(ptr %a86, ptr %a85) + %t87 = load { ptr, i64, i64 }, ptr %a86 + %t88 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t87, ptr %a79 + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_drop(ptr %a89) + br label %endif5616 +else5615: + %t90 = load ptr, ptr %a1 + %t91 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t92 = load %S.gen.Val, ptr %t91 + %t93 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t90, %S.gen.Val %t92) + %t94 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t93, ptr %a79 + store { ptr, i64, i64 } %t94, ptr %a95 + call void @finch_str_drop(ptr %a95) + br label %endif5616 +endif5616: + %t96 = load ptr, ptr %a1 + %t97 = load %S.gen.Val, ptr %a49 + %t98 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t96, %S.gen.Val %t97) + store { ptr, i64, i64 } %t98, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = load { ptr, i64, i64 }, ptr %a79 + %t102 = load { ptr, i64, i64 }, ptr %a99 + %t103 = load %S.ast.Type, ptr %a4 + %t104 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t100, { ptr, i64, i64 } %t101, { ptr, i64, i64 } %t102, %S.ast.Type %t103) + store { ptr, i64, i64 } %t104, ptr %a105 + %t106 = load ptr, ptr %a1 + %t107 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t106, { ptr, i64, i64 } { ptr @.str.3599, i64 11, i64 0 }) + store { ptr, i64, i64 } %t107, ptr %a108 + %t109 = load ptr, ptr %a1 + %t110 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t109, { ptr, i64, i64 } { ptr @.str.3600, i64 9, i64 0 }) + store { ptr, i64, i64 } %t110, ptr %a111 + %t112 = load ptr, ptr %a1 + %t113 = load ptr, ptr %a1 + %t114 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.3601, i64 13, i64 0 }, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.3602, i64 3, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = call { ptr, i64, i64 } @finch.gen.op(ptr %t113, { ptr, i64, i64 } %t123) + store { ptr, i64, i64 } %t123, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a108 + %t127 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.condBr(ptr %t112, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t127) + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load ptr, ptr %a1 + %t130 = load { ptr, i64, i64 }, ptr %a108 + call void @finch.gen.label(ptr %t129, { ptr, i64, i64 } %t130) + %t131 = load ptr, ptr %a1 + %t132 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t131, { ptr, i64, i64 } { ptr @.str.3603, i64 17, i64 0 }) + store { ptr, i64, i64 } %t132, ptr %a133 + %t134 = load ptr, ptr %a1 + %t135 = load { ptr, i64, i64 }, ptr %a133 + call void @finch.gen.store(ptr %t134, { ptr, i64, i64 } { ptr @.str.3604, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3605, i64 15, i64 0 }, { ptr, i64, i64 } %t135) + %t136 = load ptr, ptr %a1 + %t137 = load { ptr, i64, i64 }, ptr %a133 + %t138 = getelementptr inbounds %S.gen.Val, ptr %a49, i32 0, i32 0 + %t139 = load { ptr, i64, i64 }, ptr %t138 + %t140 = load %S.ast.Type, ptr %a16 + call void @finch.gen.emitFormat(ptr %t136, { ptr, i64, i64 } %t137, { ptr, i64, i64 } %t139, %S.ast.Type %t140, i1 true) + %t141 = load ptr, ptr %a1 + %t142 = load ptr, ptr %a1 + %t143 = load ptr, ptr %a1 + %t144 = icmp eq ptr %t143, null + br i1 %t144, label %panic5617, label %ok5618 +panic5617: + call void @finch_panic(ptr @.str.3607, i64 2834, ptr @.str.3608) + unreachable +ok5618: + %t145 = getelementptr inbounds %S.gen.Gen, ptr %t143, i32 0, i32 1 + %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t147 = load i64, ptr %t146 + %t148 = load { ptr, i64, i64 }, ptr %t145 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 %t147, %t149 + br i1 %t150, label %range5619, label %inrange5620 +range5619: + call void @finch_panic_index(ptr @.str.3609, i64 2834, i64 %t147, i64 %t149) + unreachable +inrange5620: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 %t147 + %t153 = load { ptr, i64, i64 }, ptr %t152 + %t154 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t142, { ptr, i64, i64 } %t153) + store { ptr, i64, i64 } { ptr @.str.3606, i64 33, i64 0 }, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t154, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t159, ptr %a161 + store { ptr, i64, i64 } { ptr @.str.3610, i64 6, i64 0 }, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + store { ptr, i64, i64 } %t159, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a160 + %t165 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t166 = load i64, ptr %t165 + call void @finch_str_from_int(ptr %a167, i64 %t166) + %t168 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t164, ptr %a170 + store { ptr, i64, i64 } %t168, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t164, ptr %a172 + call void @finch_str_drop(ptr %a172) + store { ptr, i64, i64 } %t168, ptr %a173 + call void @finch_str_drop(ptr %a173) + %t174 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t174, ptr %a176 + store { ptr, i64, i64 } { ptr @.str.3611, i64 6, i64 0 }, ptr %a177 + call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) + store { ptr, i64, i64 } %t174, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a175 + %t180 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t179, ptr %a182 + store { ptr, i64, i64 } %t180, ptr %a183 + call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183) + store { ptr, i64, i64 } %t179, ptr %a184 + call void @finch_str_drop(ptr %a184) + %t185 = load { ptr, i64, i64 }, ptr %a181 + store { ptr, i64, i64 } %t185, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.3612, i64 1, i64 0 }, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t185, ptr %a189 + call void @finch_str_drop(ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a186 + call void @finch.gen.emit(ptr %t141, { ptr, i64, i64 } %t190) + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t192, { ptr, i64, i64 } { ptr @.str.3613, i64 11, i64 0 }) + %t193 = load ptr, ptr %a1 + %t194 = icmp eq ptr %t193, null + br i1 %t194, label %panic5621, label %ok5622 +panic5621: + call void @finch_panic(ptr @.str.3614, i64 2836, ptr @.str.3615) + unreachable +ok5622: + %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 + store i1 true, ptr %t195 + %t196 = load ptr, ptr %a1 + %t197 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.label(ptr %t196, { ptr, i64, i64 } %t197) + %t198 = load ptr, ptr %a1 + %t199 = load %S.gen.Val, ptr %a49 + call void @finch.gen.release(ptr %t198, %S.gen.Val %t199) + %t200 = load ptr, ptr %a1 + %t201 = load ptr, ptr %a1 + %t202 = load { ptr, i64, i64 }, ptr %a79 + %t203 = load %S.ast.Type, ptr %a4 + %t204 = load { ptr, i64, i64 }, ptr %a105 + %t205 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t201, { ptr, i64, i64 } %t202, %S.ast.Type %t203, { ptr, i64, i64 } %t204) + %t206 = load %S.ast.Type, ptr %a4 + %t207 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t200, { ptr, i64, i64 } %t205, %S.ast.Type %t206, i64 2) + store { ptr, i64, i64 } %t205, ptr %a208 + call void @finch_str_drop(ptr %a208) + store { ptr, i64, i64 } %t207, ptr %a209 + %t210 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t211 = load i1, ptr %t210 + br i1 %t211, label %then5623, label %endif5625 +then5623: + %t212 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t213 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t213, ptr %a214 + call void @finch_str_copy(ptr %a215, ptr %a214) + %t216 = load { ptr, i64, i64 }, ptr %a215 + %t217 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t216, 0 + %t218 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t218, ptr %a219 + call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) + %t221 = load %S.ast.Type, ptr %a220 + %t222 = insertvalue %S.gen.Place %t217, %S.ast.Type %t221, 1 + %t223 = insertvalue %S.gen.Ref %t212, %S.gen.Place %t222, 1 + call void @finch_str_drop(ptr %a209) + call void @finch_str_drop(ptr %a133) + call void @finch_str_drop(ptr %a111) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a105) + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a79) + call void @finch.drop.S_gen_Val(ptr %a49) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret %S.gen.Ref %t223 +endif5625: + %t224 = load ptr, ptr %a1 + %t225 = load ptr, ptr %a1 + %t226 = load %S.ast.Type, ptr %a27 + %t227 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t225, %S.ast.Type %t226) + %t228 = load { ptr, i64, i64 }, ptr %a209 + %t229 = call { ptr, i64, i64 } @finch.gen.load(ptr %t224, { ptr, i64, i64 } %t227, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t227, ptr %a230 + call void @finch_str_drop(ptr %a230) + store { ptr, i64, i64 } %t229, ptr %a231 + %t232 = load { ptr, i64, i64 }, ptr %a231 + store { ptr, i64, i64 } %t232, ptr %a233 + call void @finch_str_copy(ptr %a234, ptr %a233) + %t235 = load { ptr, i64, i64 }, ptr %a234 + %t236 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t235, 0 + %t237 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t237, ptr %a238 + call void @finch.copy.S_ast_Type(ptr %a239, ptr %a238) + %t240 = load %S.ast.Type, ptr %a239 + %t241 = insertvalue %S.gen.Val %t236, %S.ast.Type %t240, 1 + store %S.gen.Val %t241, ptr %a242 + %t243 = load ptr, ptr %a1 + %t244 = load %S.ast.Type, ptr %a27 + %t245 = call i1 @finch.gen.owning(ptr %t243, %S.ast.Type %t244) + br label %logic.from5626 +logic.from5626: + br i1 %t245, label %logic.rhs5627, label %logic.end5628 +logic.rhs5627: + %t246 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t247 = getelementptr inbounds %S.gen.Val, ptr %t246, i32 0, i32 2 + %t248 = load i1, ptr %t247 + br label %logic.rend5629 +logic.rend5629: + br label %logic.end5628 +logic.end5628: + %t249 = phi i1 [ false, %logic.from5626 ], [ %t248, %logic.rend5629 ] + br i1 %t249, label %then5630, label %endif5632 +then5630: + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a231 + %t252 = load %S.ast.Type, ptr %a27 + %t253 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t250, { ptr, i64, i64 } %t251, %S.ast.Type %t252) + %t254 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t253, 0 + %t255 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t255, ptr %a256 + call void @finch.copy.S_ast_Type(ptr %a257, ptr %a256) + %t258 = load %S.ast.Type, ptr %a257 + %t259 = insertvalue %S.gen.Val %t254, %S.ast.Type %t258, 1 + %t260 = insertvalue %S.gen.Val %t259, i1 true, 2 + %t261 = load %S.gen.Val, ptr %a242 + store %S.gen.Val %t260, ptr %a242 + store %S.gen.Val %t261, ptr %a262 + call void @finch.drop.S_gen_Val(ptr %a262) + br label %endif5632 +endif5632: + %t263 = load ptr, ptr %a1 + %t264 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t265 = load %S.gen.Val, ptr %t264 + call void @finch.gen.release(ptr %t263, %S.gen.Val %t265) + %t266 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t267 = load %S.gen.Val, ptr %a242 + store %S.gen.Val %t267, ptr %a268 + call void @finch.copy.S_gen_Val(ptr %a269, ptr %a268) + %t270 = load %S.gen.Val, ptr %a269 + %t271 = insertvalue %S.gen.Ref %t266, %S.gen.Val %t270, 2 + call void @finch.drop.S_gen_Val(ptr %a242) + call void @finch_str_drop(ptr %a231) + call void @finch_str_drop(ptr %a209) + call void @finch_str_drop(ptr %a133) + call void @finch_str_drop(ptr %a111) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a105) + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a79) + call void @finch.drop.S_gen_Val(ptr %a49) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret %S.gen.Ref %t271 +} + +define internal %S.gen.Val @finch.gen.mapLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a5 = alloca %S.ast.Type, align 16 + %a6 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a9 = alloca i1, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.gen.Val, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca i1, align 16 + %a25 = alloca i1, align 16 + %a30 = alloca i64, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a44 = alloca %S.ast.Node, align 16 + %a46 = alloca %S.ast.Node, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca %S.ast.Node, align 16 + %a68 = alloca %S.ast.Node, align 16 + %a71 = alloca %S.ast.Node, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca %S.gen.Val, align 16 + %a107 = alloca %S.gen.Val, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca %S.ast.Type, align 16 + %a157 = alloca %S.ast.Type, align 16 + %a159 = alloca %S.ast.Type, align 16 + %a165 = alloca %S.ast.Type, align 16 + %a171 = alloca %S.ast.Type, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca i64, align 16 + %a198 = alloca i64, align 16 + %a206 = alloca i64, align 16 + %a208 = alloca %S.gen.Val, align 16 + %a209 = alloca %S.gen.Val, align 16 + %a211 = alloca %S.gen.Val, align 16 + %a236 = alloca %S.gen.Val, align 16 + %a257 = alloca %S.gen.Val, align 16 + %a261 = alloca %S.gen.Val, align 16 + %a262 = alloca %S.gen.Val, align 16 + %a264 = alloca %S.gen.Val, align 16 + %a290 = alloca %S.gen.Val, align 16 + %a312 = alloca %S.gen.Val, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca %S.ast.Type, align 16 + %a369 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t4, ptr %a5 + call void @finch.copy.S_ast_Type(ptr %a6, ptr %a5) + %t7 = load %S.ast.Type, ptr %a6 + store %S.ast.Type %t7, ptr %a8 + store i1 false, ptr %a9 + store %S.gen.Val zeroinitializer, ptr %a10 + store %S.gen.Val zeroinitializer, ptr %a11 + %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.3616, i64 3, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp eq i32 %t16, 0 + br i1 %t17, label %then5633, label %endif5635 +then5633: + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 + %t20 = load i64, ptr %t19 + %t21 = icmp eq i64 %t20, 0 + br i1 %t21, label %then5636, label %endif5638 +then5636: + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t22, %S.ast.Node %t23, { ptr, i64, i64 } { ptr @.str.3617, i64 52, i64 0 }) + br label %endif5638 +endif5638: + store i1 true, ptr %a24 + store i1 false, ptr %a25 + %t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = sdiv i64 %t28, 2 + store i64 0, ptr %a30 + br label %for.cond5639 +for.cond5639: + %t31 = load i64, ptr %a30 + %t32 = icmp slt i64 %t31, %t29 + br i1 %t32, label %for.body5640, label %for.end5642 +for.body5640: + %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t34 = load i64, ptr %a30 + %t35 = mul i64 2, %t34 + %t36 = add i64 %t35, 1 + %t37 = load { ptr, i64, i64 }, ptr %t33 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range5643, label %inrange5644 +range5643: + call void @finch_panic_index(ptr @.str.3618, i64 2866, i64 %t36, i64 %t38) + unreachable +inrange5644: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 + %t42 = load %S.ast.Node, ptr %t41 + store %S.ast.Node %t42, ptr %a43 + call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) + %t45 = load %S.ast.Node, ptr %a44 + store %S.ast.Node %t45, ptr %a46 + %t47 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 + %t48 = load { ptr, i64, i64 }, ptr %t47 + store { ptr, i64, i64 } %t48, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.3619, i64 5, i64 0 }, ptr %a50 + %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) + %t52 = icmp ne i32 %t51, 0 + br label %logic.from5645 +logic.from5645: + br i1 %t52, label %logic.rhs5646, label %logic.end5647 +logic.rhs5646: + %t53 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 1 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.3620, i64 1, i64 0 }, ptr %a56 + %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) + %t58 = icmp ne i32 %t57, 0 + br label %logic.rend5648 +logic.rend5648: + br label %logic.end5647 +logic.end5647: + %t59 = phi i1 [ false, %logic.from5645 ], [ %t58, %logic.rend5648 ] + br i1 %t59, label %then5649, label %endif5651 +then5649: + %t60 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 0, %t62 + br i1 %t63, label %range5652, label %inrange5653 +range5652: + call void @finch_panic_index(ptr @.str.3621, i64 2868, i64 0, i64 %t62) + unreachable +inrange5653: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 0 + %t66 = load %S.ast.Node, ptr %t65 + store %S.ast.Node %t66, ptr %a67 + call void @finch.copy.S_ast_Node(ptr %a68, ptr %a67) + %t69 = load %S.ast.Node, ptr %a68 + %t70 = load %S.ast.Node, ptr %a46 + store %S.ast.Node %t69, ptr %a46 + store %S.ast.Node %t70, ptr %a71 + call void @finch.drop.S_ast_Node(ptr %a71) + br label %endif5651 +endif5651: + %t72 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 + %t73 = load { ptr, i64, i64 }, ptr %t72 + store { ptr, i64, i64 } %t73, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.3622, i64 5, i64 0 }, ptr %a75 + %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + br i1 %t77, label %then5654, label %else5655 +then5654: + store i1 true, ptr %a25 + br label %endif5656 +else5655: + %t78 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.3623, i64 3, i64 0 }, ptr %a81 + %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) + %t83 = icmp eq i32 %t82, 0 + br i1 %t83, label %then5657, label %endif5659 +then5657: + store i1 false, ptr %a24 + br label %endif5659 +endif5659: + br label %endif5656 +endif5656: + call void @finch.drop.S_ast_Node(ptr %a46) + br label %for.step5641 +for.step5641: + %t84 = load i64, ptr %a30 + %t85 = add i64 %t84, 1 + store i64 %t85, ptr %a30 + br label %for.cond5639 +for.end5642: + %t86 = load ptr, ptr %a1 + %t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t88 = load { ptr, i64, i64 }, ptr %t87 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 0, %t89 + br i1 %t90, label %range5660, label %inrange5661 +range5660: + call void @finch_panic_index(ptr @.str.3624, i64 2876, i64 0, i64 %t89) + unreachable +inrange5661: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds %S.ast.Node, ptr %t91, i64 0 + %t93 = load %S.ast.Node, ptr %t92 + %t94 = call %S.gen.Val @finch.gen.expr(ptr %t86, %S.ast.Node %t93) + %t95 = load %S.gen.Val, ptr %a10 + store %S.gen.Val %t94, ptr %a10 + store %S.gen.Val %t95, ptr %a96 + call void @finch.drop.S_gen_Val(ptr %a96) + %t97 = load ptr, ptr %a1 + %t98 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t99 = load { ptr, i64, i64 }, ptr %t98 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 1, %t100 + br i1 %t101, label %range5662, label %inrange5663 +range5662: + call void @finch_panic_index(ptr @.str.3625, i64 2877, i64 1, i64 %t100) + unreachable +inrange5663: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Node, ptr %t102, i64 1 + %t104 = load %S.ast.Node, ptr %t103 + %t105 = call %S.gen.Val @finch.gen.expr(ptr %t97, %S.ast.Node %t104) + %t106 = load %S.gen.Val, ptr %a11 + store %S.gen.Val %t105, ptr %a11 + store %S.gen.Val %t106, ptr %a107 + call void @finch.drop.S_gen_Val(ptr %a107) + %t108 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } %t110, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.3626, i64 4, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br label %logic.from5664 +logic.from5664: + br i1 %t114, label %logic.end5666, label %logic.rhs5665 +logic.rhs5665: + %t115 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i32 0, i32 0 + %t117 = load { ptr, i64, i64 }, ptr %t116 + store { ptr, i64, i64 } %t117, ptr %a118 + store { ptr, i64, i64 } { ptr @.str.3627, i64 4, i64 0 }, ptr %a119 + %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) + %t121 = icmp ne i32 %t120, 0 + br label %logic.rend5667 +logic.rend5667: + br label %logic.end5666 +logic.end5666: + %t122 = phi i1 [ true, %logic.from5664 ], [ %t121, %logic.rend5667 ] + br i1 %t122, label %then5668, label %endif5670 +then5668: + %t123 = load ptr, ptr %a1 + %t124 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t125 = load { ptr, i64, i64 }, ptr %t124 + %t126 = extractvalue { ptr, i64, i64 } %t125, 1 + %t127 = icmp uge i64 0, %t126 + br i1 %t127, label %range5671, label %inrange5672 +range5671: + call void @finch_panic_index(ptr @.str.3628, i64 2879, i64 0, i64 %t126) + unreachable +inrange5672: + %t128 = extractvalue { ptr, i64, i64 } %t125, 0 + %t129 = getelementptr inbounds %S.ast.Node, ptr %t128, i64 0 + %t130 = load %S.ast.Node, ptr %t129 + call void @finch.gen.fail(ptr %t123, %S.ast.Node %t130, { ptr, i64, i64 } { ptr @.str.3629, i64 35, i64 0 }) + br label %endif5670 +endif5670: + %t131 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 + %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.3630, i64 4, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp ne i32 %t136, 0 + br label %logic.from5673 +logic.from5673: + br i1 %t137, label %logic.end5675, label %logic.rhs5674 +logic.rhs5674: + %t138 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 + %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i32 0, i32 0 + %t140 = load { ptr, i64, i64 }, ptr %t139 + store { ptr, i64, i64 } %t140, ptr %a141 + store { ptr, i64, i64 } { ptr @.str.3631, i64 4, i64 0 }, ptr %a142 + %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) + %t144 = icmp ne i32 %t143, 0 + br label %logic.rend5676 +logic.rend5676: + br label %logic.end5675 +logic.end5675: + %t145 = phi i1 [ true, %logic.from5673 ], [ %t144, %logic.rend5676 ] + br i1 %t145, label %then5677, label %endif5679 +then5677: + %t146 = load ptr, ptr %a1 + %t147 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t148 = load { ptr, i64, i64 }, ptr %t147 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 1, %t149 + br i1 %t150, label %range5680, label %inrange5681 +range5680: + call void @finch_panic_index(ptr @.str.3632, i64 2882, i64 1, i64 %t149) + unreachable +inrange5681: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds %S.ast.Node, ptr %t151, i64 1 + %t153 = load %S.ast.Node, ptr %t152 + call void @finch.gen.fail(ptr %t146, %S.ast.Node %t153, { ptr, i64, i64 } { ptr @.str.3633, i64 37, i64 0 }) + br label %endif5679 +endif5679: + %t154 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 + %t155 = load %S.ast.Type, ptr %t154 + store %S.ast.Type %t155, ptr %a156 + call void @finch.copy.S_ast_Type(ptr %a157, ptr %a156) + %t158 = load %S.ast.Type, ptr %a157 + store %S.ast.Type %t158, ptr %a159 + %t160 = load i1, ptr %a24 + br label %logic.from5682 +logic.from5682: + br i1 %t160, label %logic.rhs5683, label %logic.end5684 +logic.rhs5683: + %t161 = load i1, ptr %a25 + br label %logic.rend5685 +logic.rend5685: + br label %logic.end5684 +logic.end5684: + %t162 = phi i1 [ false, %logic.from5682 ], [ %t161, %logic.rend5685 ] + br i1 %t162, label %then5686, label %endif5688 +then5686: + %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3634, i64 5, i64 0 }) + %t164 = load %S.ast.Type, ptr %a159 + store %S.ast.Type %t163, ptr %a159 + store %S.ast.Type %t164, ptr %a165 + call void @finch.drop.S_ast_Type(ptr %a165) + br label %endif5688 +endif5688: + %t166 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t167 = load %S.ast.Type, ptr %t166 + %t168 = load %S.ast.Type, ptr %a159 + %t169 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t167, %S.ast.Type %t168) + %t170 = load %S.ast.Type, ptr %a8 + store %S.ast.Type %t169, ptr %a8 + store %S.ast.Type %t170, ptr %a171 + call void @finch.drop.S_ast_Type(ptr %a171) + store i1 true, ptr %a9 + call void @finch.drop.S_ast_Type(ptr %a159) + br label %endif5635 +endif5635: + %t172 = load ptr, ptr %a1 + %t173 = load ptr, ptr %a1 + %t174 = load %S.ast.Type, ptr %a8 + %t175 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t174) + %t176 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t172, { ptr, i64, i64 } %t175) + store { ptr, i64, i64 } %t175, ptr %a177 + call void @finch_str_drop(ptr %a177) + store { ptr, i64, i64 } %t176, ptr %a178 + %t179 = load ptr, ptr %a1 + %t180 = load ptr, ptr %a1 + %t181 = load %S.ast.Type, ptr %a8 + %t182 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t180, %S.ast.Type %t181) + %t183 = load { ptr, i64, i64 }, ptr %a178 + call void @finch.gen.store(ptr %t179, { ptr, i64, i64 } %t182, { ptr, i64, i64 } { ptr @.str.3635, i64 15, i64 0 }, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t182, ptr %a184 + call void @finch_str_drop(ptr %a184) + %t185 = load ptr, ptr %a1 + %t186 = icmp eq ptr %t185, null + br i1 %t186, label %panic5689, label %ok5690 +panic5689: + call void @finch_panic(ptr @.str.3636, i64 2893, ptr @.str.3637) + unreachable +ok5690: + %t187 = getelementptr inbounds %S.gen.Gen, ptr %t185, i32 0, i32 11 + %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 + %t189 = load i64, ptr %t188 + store i64 %t189, ptr %a190 + %t191 = load ptr, ptr %a1 + %t192 = load { ptr, i64, i64 }, ptr %a178 + %t193 = load %S.ast.Type, ptr %a8 + call void @finch.gen.holdAddr(ptr %t191, { ptr, i64, i64 } %t192, %S.ast.Type %t193) + %t194 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 + %t196 = load i64, ptr %t195 + %t197 = sdiv i64 %t196, 2 + store i64 0, ptr %a198 + br label %for.cond5691 +for.cond5691: + %t199 = load i64, ptr %a198 + %t200 = icmp slt i64 %t199, %t197 + br i1 %t200, label %for.body5692, label %for.end5694 +for.body5692: + %t201 = load ptr, ptr %a1 + %t202 = icmp eq ptr %t201, null + br i1 %t202, label %panic5695, label %ok5696 +panic5695: + call void @finch_panic(ptr @.str.3638, i64 2896, ptr @.str.3639) + unreachable +ok5696: + %t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 11 + %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 + %t205 = load i64, ptr %t204 + store i64 %t205, ptr %a206 + %t207 = load %S.gen.Val, ptr %a10 + store %S.gen.Val %t207, ptr %a208 + call void @finch.copy.S_gen_Val(ptr %a209, ptr %a208) + %t210 = load %S.gen.Val, ptr %a209 + store %S.gen.Val %t210, ptr %a211 + %t212 = load i64, ptr %a198 + %t213 = icmp eq i64 %t212, 0 + br label %logic.from5697 +logic.from5697: + br i1 %t213, label %logic.rhs5698, label %logic.end5699 +logic.rhs5698: + %t214 = load i1, ptr %a9 + br label %logic.rend5700 +logic.rend5700: + br label %logic.end5699 +logic.end5699: + %t215 = phi i1 [ false, %logic.from5697 ], [ %t214, %logic.rend5700 ] + %t216 = xor i1 %t215, true + br i1 %t216, label %then5701, label %endif5703 +then5701: + %t217 = load ptr, ptr %a1 + %t218 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t219 = load i64, ptr %a198 + %t220 = mul i64 2, %t219 + %t221 = load { ptr, i64, i64 }, ptr %t218 + %t222 = extractvalue { ptr, i64, i64 } %t221, 1 + %t223 = icmp uge i64 %t220, %t222 + br i1 %t223, label %range5704, label %inrange5705 +range5704: + call void @finch_panic_index(ptr @.str.3640, i64 2899, i64 %t220, i64 %t222) + unreachable +inrange5705: + %t224 = extractvalue { ptr, i64, i64 } %t221, 0 + %t225 = getelementptr inbounds %S.ast.Node, ptr %t224, i64 %t220 + %t226 = load %S.ast.Node, ptr %t225 + %t227 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t228 = load { ptr, i64, i64 }, ptr %t227 + %t229 = extractvalue { ptr, i64, i64 } %t228, 1 + %t230 = icmp uge i64 0, %t229 + br i1 %t230, label %range5706, label %inrange5707 +range5706: + call void @finch_panic_index(ptr @.str.3641, i64 2899, i64 0, i64 %t229) + unreachable +inrange5707: + %t231 = extractvalue { ptr, i64, i64 } %t228, 0 + %t232 = getelementptr inbounds %S.ast.Type, ptr %t231, i64 0 + %t233 = load %S.ast.Type, ptr %t232 + %t234 = call %S.gen.Val @finch.gen.exprWant(ptr %t217, %S.ast.Node %t226, %S.ast.Type %t233) + %t235 = load %S.gen.Val, ptr %a211 + store %S.gen.Val %t234, ptr %a211 + store %S.gen.Val %t235, ptr %a236 + call void @finch.drop.S_gen_Val(ptr %a236) + br label %endif5703 +endif5703: + %t237 = load ptr, ptr %a1 + %t238 = load %S.gen.Val, ptr %a211 + %t239 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = extractvalue { ptr, i64, i64 } %t240, 1 + %t242 = icmp uge i64 0, %t241 + br i1 %t242, label %range5708, label %inrange5709 +range5708: + call void @finch_panic_index(ptr @.str.3642, i64 2901, i64 0, i64 %t241) + unreachable +inrange5709: + %t243 = extractvalue { ptr, i64, i64 } %t240, 0 + %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i64 0 + %t245 = load %S.ast.Type, ptr %t244 + %t246 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t247 = load i64, ptr %a198 + %t248 = mul i64 2, %t247 + %t249 = load { ptr, i64, i64 }, ptr %t246 + %t250 = extractvalue { ptr, i64, i64 } %t249, 1 + %t251 = icmp uge i64 %t248, %t250 + br i1 %t251, label %range5710, label %inrange5711 +range5710: + call void @finch_panic_index(ptr @.str.3643, i64 2901, i64 %t248, i64 %t250) + unreachable +inrange5711: + %t252 = extractvalue { ptr, i64, i64 } %t249, 0 + %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 + %t254 = load %S.ast.Node, ptr %t253 + %t255 = call %S.gen.Val @finch.gen.coerce(ptr %t237, %S.gen.Val %t238, %S.ast.Type %t245, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3644, i64 21, i64 0 }) + %t256 = load %S.gen.Val, ptr %a211 + store %S.gen.Val %t255, ptr %a211 + store %S.gen.Val %t256, ptr %a257 + call void @finch.drop.S_gen_Val(ptr %a257) + %t258 = load ptr, ptr %a1 + %t259 = load %S.gen.Val, ptr %a211 + call void @finch.gen.hold(ptr %t258, %S.gen.Val %t259) + %t260 = load %S.gen.Val, ptr %a11 + store %S.gen.Val %t260, ptr %a261 + call void @finch.copy.S_gen_Val(ptr %a262, ptr %a261) + %t263 = load %S.gen.Val, ptr %a262 + store %S.gen.Val %t263, ptr %a264 + %t265 = load i64, ptr %a198 + %t266 = icmp eq i64 %t265, 0 + br label %logic.from5712 +logic.from5712: + br i1 %t266, label %logic.rhs5713, label %logic.end5714 +logic.rhs5713: + %t267 = load i1, ptr %a9 + br label %logic.rend5715 +logic.rend5715: + br label %logic.end5714 +logic.end5714: + %t268 = phi i1 [ false, %logic.from5712 ], [ %t267, %logic.rend5715 ] + %t269 = xor i1 %t268, true + br i1 %t269, label %then5716, label %endif5718 +then5716: + %t270 = load ptr, ptr %a1 + %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t272 = load i64, ptr %a198 + %t273 = mul i64 2, %t272 + %t274 = add i64 %t273, 1 + %t275 = load { ptr, i64, i64 }, ptr %t271 + %t276 = extractvalue { ptr, i64, i64 } %t275, 1 + %t277 = icmp uge i64 %t274, %t276 + br i1 %t277, label %range5719, label %inrange5720 +range5719: + call void @finch_panic_index(ptr @.str.3645, i64 2905, i64 %t274, i64 %t276) + unreachable +inrange5720: + %t278 = extractvalue { ptr, i64, i64 } %t275, 0 + %t279 = getelementptr inbounds %S.ast.Node, ptr %t278, i64 %t274 + %t280 = load %S.ast.Node, ptr %t279 + %t281 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t282 = load { ptr, i64, i64 }, ptr %t281 + %t283 = extractvalue { ptr, i64, i64 } %t282, 1 + %t284 = icmp uge i64 1, %t283 + br i1 %t284, label %range5721, label %inrange5722 +range5721: + call void @finch_panic_index(ptr @.str.3646, i64 2905, i64 1, i64 %t283) + unreachable +inrange5722: + %t285 = extractvalue { ptr, i64, i64 } %t282, 0 + %t286 = getelementptr inbounds %S.ast.Type, ptr %t285, i64 1 + %t287 = load %S.ast.Type, ptr %t286 + %t288 = call %S.gen.Val @finch.gen.exprWant(ptr %t270, %S.ast.Node %t280, %S.ast.Type %t287) + %t289 = load %S.gen.Val, ptr %a264 + store %S.gen.Val %t288, ptr %a264 + store %S.gen.Val %t289, ptr %a290 + call void @finch.drop.S_gen_Val(ptr %a290) + br label %endif5718 +endif5718: + %t291 = load ptr, ptr %a1 + %t292 = load %S.gen.Val, ptr %a264 + %t293 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t294 = load { ptr, i64, i64 }, ptr %t293 + %t295 = extractvalue { ptr, i64, i64 } %t294, 1 + %t296 = icmp uge i64 1, %t295 + br i1 %t296, label %range5723, label %inrange5724 +range5723: + call void @finch_panic_index(ptr @.str.3647, i64 2907, i64 1, i64 %t295) + unreachable +inrange5724: + %t297 = extractvalue { ptr, i64, i64 } %t294, 0 + %t298 = getelementptr inbounds %S.ast.Type, ptr %t297, i64 1 + %t299 = load %S.ast.Type, ptr %t298 + %t300 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t301 = load i64, ptr %a198 + %t302 = mul i64 2, %t301 + %t303 = add i64 %t302, 1 + %t304 = load { ptr, i64, i64 }, ptr %t300 + %t305 = extractvalue { ptr, i64, i64 } %t304, 1 + %t306 = icmp uge i64 %t303, %t305 + br i1 %t306, label %range5725, label %inrange5726 +range5725: + call void @finch_panic_index(ptr @.str.3648, i64 2907, i64 %t303, i64 %t305) + unreachable +inrange5726: + %t307 = extractvalue { ptr, i64, i64 } %t304, 0 + %t308 = getelementptr inbounds %S.ast.Node, ptr %t307, i64 %t303 + %t309 = load %S.ast.Node, ptr %t308 + %t310 = call %S.gen.Val @finch.gen.coerce(ptr %t291, %S.gen.Val %t292, %S.ast.Type %t299, %S.ast.Node %t309, { ptr, i64, i64 } { ptr @.str.3649, i64 23, i64 0 }) + %t311 = load %S.gen.Val, ptr %a264 + store %S.gen.Val %t310, ptr %a264 + store %S.gen.Val %t311, ptr %a312 + call void @finch.drop.S_gen_Val(ptr %a312) + %t313 = load ptr, ptr %a1 + %t314 = load %S.gen.Val, ptr %a264 + %t315 = call { ptr, i64, i64 } @finch.gen.own(ptr %t313, %S.gen.Val %t314) + store { ptr, i64, i64 } %t315, ptr %a316 + %t317 = load ptr, ptr %a1 + %t318 = load { ptr, i64, i64 }, ptr %a178 + %t319 = load %S.ast.Type, ptr %a8 + %t320 = load %S.gen.Val, ptr %a211 + %t321 = load %S.ast.Node, ptr %a2 + %t322 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t317, { ptr, i64, i64 } %t318, %S.ast.Type %t319, %S.gen.Val %t320, i1 false, %S.ast.Node %t321) + store { ptr, i64, i64 } %t322, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = load { ptr, i64, i64 }, ptr %a323 + %t326 = load %S.ast.Type, ptr %a8 + %t327 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t324, { ptr, i64, i64 } %t325, %S.ast.Type %t326, i64 2) + store { ptr, i64, i64 } %t327, ptr %a328 + %t329 = load ptr, ptr %a1 + %t330 = load { ptr, i64, i64 }, ptr %a328 + %t331 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t332 = load { ptr, i64, i64 }, ptr %t331 + %t333 = extractvalue { ptr, i64, i64 } %t332, 1 + %t334 = icmp uge i64 1, %t333 + br i1 %t334, label %range5727, label %inrange5728 +range5727: + call void @finch_panic_index(ptr @.str.3650, i64 2911, i64 1, i64 %t333) + unreachable +inrange5728: + %t335 = extractvalue { ptr, i64, i64 } %t332, 0 + %t336 = getelementptr inbounds %S.ast.Type, ptr %t335, i64 1 + %t337 = load %S.ast.Type, ptr %t336 + call void @finch.gen.dropAt(ptr %t329, { ptr, i64, i64 } %t330, %S.ast.Type %t337) + %t338 = load ptr, ptr %a1 + %t339 = load ptr, ptr %a1 + %t340 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t341 = load { ptr, i64, i64 }, ptr %t340 + %t342 = extractvalue { ptr, i64, i64 } %t341, 1 + %t343 = icmp uge i64 1, %t342 + br i1 %t343, label %range5729, label %inrange5730 +range5729: + call void @finch_panic_index(ptr @.str.3651, i64 2912, i64 1, i64 %t342) + unreachable +inrange5730: + %t344 = extractvalue { ptr, i64, i64 } %t341, 0 + %t345 = getelementptr inbounds %S.ast.Type, ptr %t344, i64 1 + %t346 = load %S.ast.Type, ptr %t345 + %t347 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t339, %S.ast.Type %t346) + %t348 = load { ptr, i64, i64 }, ptr %a316 + %t349 = load { ptr, i64, i64 }, ptr %a328 + call void @finch.gen.store(ptr %t338, { ptr, i64, i64 } %t347, { ptr, i64, i64 } %t348, { ptr, i64, i64 } %t349) + store { ptr, i64, i64 } %t347, ptr %a350 + call void @finch_str_drop(ptr %a350) + %t351 = load ptr, ptr %a1 + %t352 = load %S.gen.Val, ptr %a211 + call void @finch.gen.release(ptr %t351, %S.gen.Val %t352) + %t353 = load ptr, ptr %a1 + %t354 = load i64, ptr %a206 + call void @finch.gen.heldEnd(ptr %t353, i64 %t354) + call void @finch_str_drop(ptr %a328) + call void @finch_str_drop(ptr %a323) + call void @finch_str_drop(ptr %a316) + call void @finch.drop.S_gen_Val(ptr %a264) + call void @finch.drop.S_gen_Val(ptr %a211) + br label %for.step5693 +for.step5693: + %t355 = load i64, ptr %a198 + %t356 = add i64 %t355, 1 + store i64 %t356, ptr %a198 + br label %for.cond5691 +for.end5694: + %t357 = load ptr, ptr %a1 + %t358 = load i64, ptr %a190 + call void @finch.gen.heldEnd(ptr %t357, i64 %t358) + %t359 = load ptr, ptr %a1 + %t360 = load ptr, ptr %a1 + %t361 = load %S.ast.Type, ptr %a8 + %t362 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t360, %S.ast.Type %t361) + %t363 = load { ptr, i64, i64 }, ptr %a178 + %t364 = call { ptr, i64, i64 } @finch.gen.load(ptr %t359, { ptr, i64, i64 } %t362, { ptr, i64, i64 } %t363) + store { ptr, i64, i64 } %t362, ptr %a365 + call void @finch_str_drop(ptr %a365) + %t366 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t364, 0 + %t367 = load %S.ast.Type, ptr %a8 + store %S.ast.Type %t367, ptr %a368 + call void @finch.copy.S_ast_Type(ptr %a369, ptr %a368) + %t370 = load %S.ast.Type, ptr %a369 + %t371 = insertvalue %S.gen.Val %t366, %S.ast.Type %t370, 1 + %t372 = insertvalue %S.gen.Val %t371, i1 true, 2 + call void @finch_str_drop(ptr %a178) + call void @finch.drop.S_gen_Val(ptr %a11) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_ast_Type(ptr %a8) + ret %S.gen.Val %t372 +} + +define internal %S.gen.Val @finch.gen.mapMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a29 = alloca %S.ast.Type, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a32 = alloca %S.ast.Type, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca %S.gen.Val, align 16 + %a82 = alloca %S.gen.Val, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca %S.gen.Val, align 16 + %a278 = alloca %S.gen.Val, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca %S.ast.Type, align 16 + %a351 = alloca %S.ast.Type, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca i64, align 16 + %a501 = alloca %S.ast.Type, align 16 + %a502 = alloca %S.ast.Type, align 16 + %a504 = alloca %S.ast.Type, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca %S.ast.Type, align 16 + %a512 = alloca %S.ast.Type, align 16 + %a515 = alloca %S.ast.Type, align 16 + %a518 = alloca %S.ast.Type, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a543 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a613 = alloca { ptr, i64, i64 }, align 16 + %a614 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a618 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a646 = alloca { ptr, i64, i64 }, align 16 + %a649 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a663 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a699 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a702 = alloca { ptr, i64, i64 }, align 16 + %a704 = alloca { ptr, i64, i64 }, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a712 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a716 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a732 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca %S.ast.Type, align 16 + %a753 = alloca %S.ast.Type, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a766 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 0, %t13 + br i1 %t14, label %range5731, label %inrange5732 +range5731: + call void @finch_panic_index(ptr @.str.3652, i64 2922, i64 0, i64 %t13) + unreachable +inrange5732: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 + %t17 = load %S.ast.Type, ptr %t16 + store %S.ast.Type %t17, ptr %a18 + call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) + %t20 = load %S.ast.Type, ptr %a19 + store %S.ast.Type %t20, ptr %a21 + %t22 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 1, %t24 + br i1 %t25, label %range5733, label %inrange5734 +range5733: + call void @finch_panic_index(ptr @.str.3653, i64 2923, i64 1, i64 %t24) + unreachable +inrange5734: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds %S.ast.Type, ptr %t26, i64 1 + %t28 = load %S.ast.Type, ptr %t27 + store %S.ast.Type %t28, ptr %a29 + call void @finch.copy.S_ast_Type(ptr %a30, ptr %a29) + %t31 = load %S.ast.Type, ptr %a30 + store %S.ast.Type %t31, ptr %a32 + %t33 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3654, i64 3, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br label %logic.from5735 +logic.from5735: + br i1 %t37, label %logic.end5737, label %logic.rhs5736 +logic.rhs5736: + %t38 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t38, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.3655, i64 3, i64 0 }, ptr %a40 + %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br label %logic.rend5738 +logic.rend5738: + br label %logic.end5737 +logic.end5737: + %t43 = phi i1 [ true, %logic.from5735 ], [ %t42, %logic.rend5738 ] + br label %logic.from5739 +logic.from5739: + br i1 %t43, label %logic.end5741, label %logic.rhs5740 +logic.rhs5740: + %t44 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t44, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.3656, i64 6, i64 0 }, ptr %a46 + %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) + %t48 = icmp ne i32 %t47, 0 + br label %logic.rend5742 +logic.rend5742: + br label %logic.end5741 +logic.end5741: + %t49 = phi i1 [ true, %logic.from5739 ], [ %t48, %logic.rend5742 ] + br i1 %t49, label %then5743, label %endif5745 +then5743: + %t50 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.3657, i64 3, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then5746, label %else5747 +then5746: + %t55 = load ptr, ptr %a1 + %t56 = load %S.ast.Node, ptr %a2 + %t57 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t55, %S.ast.Node %t56, i64 1, i64 2, { ptr, i64, i64 } %t57) + br label %endif5748 +else5747: + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Node, ptr %a2 + %t60 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t58, %S.ast.Node %t59, i64 1, i64 1, { ptr, i64, i64 } %t60) + br label %endif5748 +endif5748: + %t61 = load ptr, ptr %a1 + %t62 = load ptr, ptr %a1 + %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = extractvalue { ptr, i64, i64 } %t64, 1 + %t66 = icmp uge i64 1, %t65 + br i1 %t66, label %range5749, label %inrange5750 +range5749: + call void @finch_panic_index(ptr @.str.3658, i64 2930, i64 1, i64 %t65) + unreachable +inrange5750: + %t67 = extractvalue { ptr, i64, i64 } %t64, 0 + %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 1 + %t69 = load %S.ast.Node, ptr %t68 + %t70 = load %S.ast.Type, ptr %a21 + %t71 = call %S.gen.Val @finch.gen.exprWant(ptr %t62, %S.ast.Node %t69, %S.ast.Type %t70) + %t72 = load %S.ast.Type, ptr %a21 + %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t74 = load { ptr, i64, i64 }, ptr %t73 + %t75 = extractvalue { ptr, i64, i64 } %t74, 1 + %t76 = icmp uge i64 1, %t75 + br i1 %t76, label %range5751, label %inrange5752 +range5751: + call void @finch_panic_index(ptr @.str.3659, i64 2930, i64 1, i64 %t75) + unreachable +inrange5752: + %t77 = extractvalue { ptr, i64, i64 } %t74, 0 + %t78 = getelementptr inbounds %S.ast.Node, ptr %t77, i64 1 + %t79 = load %S.ast.Node, ptr %t78 + %t80 = call %S.gen.Val @finch.gen.coerce(ptr %t61, %S.gen.Val %t71, %S.ast.Type %t72, %S.ast.Node %t79, { ptr, i64, i64 } { ptr @.str.3660, i64 7, i64 0 }) + store %S.gen.Val %t71, ptr %a81 + call void @finch.drop.S_gen_Val(ptr %a81) + store %S.gen.Val %t80, ptr %a82 + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a3 + %t85 = load ptr, ptr %a1 + %t86 = load %S.gen.Val, ptr %a82 + %t87 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t85, %S.gen.Val %t86) + %t88 = load %S.ast.Type, ptr %a4 + %t89 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t83, { ptr, i64, i64 } %t84, { ptr, i64, i64 } %t87, %S.ast.Type %t88) + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_drop(ptr %a90) + store { ptr, i64, i64 } %t89, ptr %a91 + %t92 = load ptr, ptr %a1 + %t93 = load %S.gen.Val, ptr %a82 + call void @finch.gen.release(ptr %t92, %S.gen.Val %t93) + %t94 = load ptr, ptr %a1 + %t95 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.3661, i64 13, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t99, ptr %a101 + store { ptr, i64, i64 } { ptr @.str.3662, i64 3, i64 0 }, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t99, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + %t105 = call { ptr, i64, i64 } @finch.gen.op(ptr %t94, { ptr, i64, i64 } %t104) + store { ptr, i64, i64 } %t104, ptr %a106 + call void @finch_str_drop(ptr %a106) + store { ptr, i64, i64 } %t105, ptr %a107 + %t108 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.3663, i64 3, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br i1 %t112, label %then5753, label %endif5755 +then5753: + %t113 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t113, ptr %a114 + call void @finch_str_copy(ptr %a115, ptr %a114) + %t116 = load { ptr, i64, i64 }, ptr %a115 + %t117 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t116, 0 + %t118 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3664, i64 4, i64 0 }) + %t119 = insertvalue %S.gen.Val %t117, %S.ast.Type %t118, 1 + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a91) + call void @finch.drop.S_gen_Val(ptr %a82) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t119 +endif5755: + %t120 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t120, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.3665, i64 6, i64 0 }, ptr %a122 + %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) + %t124 = icmp ne i32 %t123, 0 + br i1 %t124, label %then5756, label %endif5758 +then5756: + %t125 = load ptr, ptr %a1 + %t126 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t125, { ptr, i64, i64 } { ptr @.str.3666, i64 10, i64 0 }) + store { ptr, i64, i64 } %t126, ptr %a127 + %t128 = load ptr, ptr %a1 + %t129 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t128, { ptr, i64, i64 } { ptr @.str.3667, i64 10, i64 0 }) + store { ptr, i64, i64 } %t129, ptr %a130 + %t131 = load ptr, ptr %a1 + %t132 = load { ptr, i64, i64 }, ptr %a107 + %t133 = load { ptr, i64, i64 }, ptr %a127 + %t134 = load { ptr, i64, i64 }, ptr %a130 + call void @finch.gen.condBr(ptr %t131, { ptr, i64, i64 } %t132, { ptr, i64, i64 } %t133, { ptr, i64, i64 } %t134) + %t135 = load ptr, ptr %a1 + %t136 = load { ptr, i64, i64 }, ptr %a127 + call void @finch.gen.label(ptr %t135, { ptr, i64, i64 } %t136) + %t137 = load ptr, ptr %a1 + %t138 = load { ptr, i64, i64 }, ptr %a3 + %t139 = load %S.ast.Type, ptr %a4 + %t140 = load { ptr, i64, i64 }, ptr %a91 + %t141 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t137, { ptr, i64, i64 } %t138, %S.ast.Type %t139, { ptr, i64, i64 } %t140) + store { ptr, i64, i64 } %t141, ptr %a142 + %t143 = load ptr, ptr %a1 + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a142 + %t146 = load %S.ast.Type, ptr %a4 + %t147 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Type %t146, i64 1) + %t148 = load %S.ast.Type, ptr %a21 + call void @finch.gen.dropAt(ptr %t143, { ptr, i64, i64 } %t147, %S.ast.Type %t148) + store { ptr, i64, i64 } %t147, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load ptr, ptr %a1 + %t151 = load ptr, ptr %a1 + %t152 = load { ptr, i64, i64 }, ptr %a142 + %t153 = load %S.ast.Type, ptr %a4 + %t154 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t151, { ptr, i64, i64 } %t152, %S.ast.Type %t153, i64 2) + %t155 = load %S.ast.Type, ptr %a32 + call void @finch.gen.dropAt(ptr %t150, { ptr, i64, i64 } %t154, %S.ast.Type %t155) + store { ptr, i64, i64 } %t154, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load ptr, ptr %a1 + %t158 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.3668, i64 35, i64 0 }, ptr %a160 + store { ptr, i64, i64 } %t158, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + %t162 = load { ptr, i64, i64 }, ptr %a159 + store { ptr, i64, i64 } %t162, ptr %a164 + store { ptr, i64, i64 } { ptr @.str.3669, i64 6, i64 0 }, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t162, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + %t168 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } %t167, ptr %a170 + store { ptr, i64, i64 } %t168, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t167, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t173, ptr %a175 + store { ptr, i64, i64 } { ptr @.str.3670, i64 6, i64 0 }, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t173, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + %t179 = load ptr, ptr %a1 + %t180 = load %S.ast.Type, ptr %a4 + %t181 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t179, %S.ast.Type %t180) + store { ptr, i64, i64 } %t178, ptr %a183 + store { ptr, i64, i64 } %t181, ptr %a184 + call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) + store { ptr, i64, i64 } %t178, ptr %a185 + call void @finch_str_drop(ptr %a185) + store { ptr, i64, i64 } %t181, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a182 + store { ptr, i64, i64 } %t187, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.3671, i64 1, i64 0 }, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + call void @finch.gen.emit(ptr %t157, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = load ptr, ptr %a1 + %t195 = load { ptr, i64, i64 }, ptr %a130 + call void @finch.gen.br(ptr %t194, { ptr, i64, i64 } %t195) + %t196 = load ptr, ptr %a1 + %t197 = load { ptr, i64, i64 }, ptr %a130 + call void @finch.gen.label(ptr %t196, { ptr, i64, i64 } %t197) + %t198 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t198, ptr %a199 + call void @finch_str_copy(ptr %a200, ptr %a199) + %t201 = load { ptr, i64, i64 }, ptr %a200 + %t202 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t201, 0 + %t203 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3672, i64 4, i64 0 }) + %t204 = insertvalue %S.gen.Val %t202, %S.ast.Type %t203, 1 + call void @finch_str_drop(ptr %a142) + call void @finch_str_drop(ptr %a130) + call void @finch_str_drop(ptr %a127) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a91) + call void @finch.drop.S_gen_Val(ptr %a82) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t204 +endif5758: + %t205 = load ptr, ptr %a1 + %t206 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t205, { ptr, i64, i64 } { ptr @.str.3673, i64 9, i64 0 }) + store { ptr, i64, i64 } %t206, ptr %a207 + %t208 = load ptr, ptr %a1 + %t209 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t208, { ptr, i64, i64 } { ptr @.str.3674, i64 11, i64 0 }) + store { ptr, i64, i64 } %t209, ptr %a210 + %t211 = load ptr, ptr %a1 + %t212 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t211, { ptr, i64, i64 } { ptr @.str.3675, i64 8, i64 0 }) + store { ptr, i64, i64 } %t212, ptr %a213 + %t214 = load ptr, ptr %a1 + %t215 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t214, { ptr, i64, i64 } { ptr @.str.3676, i64 8, i64 0 }) + store { ptr, i64, i64 } %t215, ptr %a216 + %t217 = load ptr, ptr %a1 + %t218 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t217, { ptr, i64, i64 } { ptr @.str.3677, i64 7, i64 0 }) + store { ptr, i64, i64 } %t218, ptr %a219 + %t220 = load ptr, ptr %a1 + %t221 = load { ptr, i64, i64 }, ptr %a107 + %t222 = load { ptr, i64, i64 }, ptr %a207 + %t223 = load { ptr, i64, i64 }, ptr %a210 + call void @finch.gen.condBr(ptr %t220, { ptr, i64, i64 } %t221, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t223) + %t224 = load ptr, ptr %a1 + %t225 = load { ptr, i64, i64 }, ptr %a207 + call void @finch.gen.label(ptr %t224, { ptr, i64, i64 } %t225) + %t226 = load ptr, ptr %a1 + %t227 = load ptr, ptr %a1 + %t228 = load ptr, ptr %a1 + %t229 = load %S.ast.Type, ptr %a32 + %t230 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t228, %S.ast.Type %t229) + %t231 = load ptr, ptr %a1 + %t232 = load ptr, ptr %a1 + %t233 = load { ptr, i64, i64 }, ptr %a3 + %t234 = load %S.ast.Type, ptr %a4 + %t235 = load { ptr, i64, i64 }, ptr %a91 + %t236 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t232, { ptr, i64, i64 } %t233, %S.ast.Type %t234, { ptr, i64, i64 } %t235) + %t237 = load %S.ast.Type, ptr %a4 + %t238 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t231, { ptr, i64, i64 } %t236, %S.ast.Type %t237, i64 2) + store { ptr, i64, i64 } %t236, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = call { ptr, i64, i64 } @finch.gen.load(ptr %t227, { ptr, i64, i64 } %t230, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t230, ptr %a241 + call void @finch_str_drop(ptr %a241) + store { ptr, i64, i64 } %t238, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load %S.ast.Type, ptr %a32 + %t244 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t226, { ptr, i64, i64 } %t240, %S.ast.Type %t243) + store { ptr, i64, i64 } %t240, ptr %a245 + call void @finch_str_drop(ptr %a245) + store { ptr, i64, i64 } %t244, ptr %a246 + %t247 = load ptr, ptr %a1 + %t248 = load { ptr, i64, i64 }, ptr %a213 + call void @finch.gen.br(ptr %t247, { ptr, i64, i64 } %t248) + %t249 = load ptr, ptr %a1 + %t250 = load { ptr, i64, i64 }, ptr %a213 + call void @finch.gen.label(ptr %t249, { ptr, i64, i64 } %t250) + %t251 = load ptr, ptr %a1 + %t252 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.br(ptr %t251, { ptr, i64, i64 } %t252) + %t253 = load ptr, ptr %a1 + %t254 = load { ptr, i64, i64 }, ptr %a210 + call void @finch.gen.label(ptr %t253, { ptr, i64, i64 } %t254) + %t255 = load ptr, ptr %a1 + %t256 = load ptr, ptr %a1 + %t257 = load ptr, ptr %a1 + %t258 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t259 = load { ptr, i64, i64 }, ptr %t258 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 2, %t260 + br i1 %t261, label %range5759, label %inrange5760 +range5759: + call void @finch_panic_index(ptr @.str.3678, i64 2963, i64 2, i64 %t260) + unreachable +inrange5760: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds %S.ast.Node, ptr %t262, i64 2 + %t264 = load %S.ast.Node, ptr %t263 + %t265 = load %S.ast.Type, ptr %a32 + %t266 = call %S.gen.Val @finch.gen.exprWant(ptr %t257, %S.ast.Node %t264, %S.ast.Type %t265) + %t267 = load %S.ast.Type, ptr %a32 + %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t269 = load { ptr, i64, i64 }, ptr %t268 + %t270 = extractvalue { ptr, i64, i64 } %t269, 1 + %t271 = icmp uge i64 2, %t270 + br i1 %t271, label %range5761, label %inrange5762 +range5761: + call void @finch_panic_index(ptr @.str.3679, i64 2963, i64 2, i64 %t270) + unreachable +inrange5762: + %t272 = extractvalue { ptr, i64, i64 } %t269, 0 + %t273 = getelementptr inbounds %S.ast.Node, ptr %t272, i64 2 + %t274 = load %S.ast.Node, ptr %t273 + %t275 = call %S.gen.Val @finch.gen.coerce(ptr %t256, %S.gen.Val %t266, %S.ast.Type %t267, %S.ast.Node %t274, { ptr, i64, i64 } { ptr @.str.3680, i64 11, i64 0 }) + store %S.gen.Val %t266, ptr %a276 + call void @finch.drop.S_gen_Val(ptr %a276) + %t277 = call { ptr, i64, i64 } @finch.gen.own(ptr %t255, %S.gen.Val %t275) + store %S.gen.Val %t275, ptr %a278 + call void @finch.drop.S_gen_Val(ptr %a278) + store { ptr, i64, i64 } %t277, ptr %a279 + %t280 = load ptr, ptr %a1 + %t281 = load { ptr, i64, i64 }, ptr %a216 + call void @finch.gen.br(ptr %t280, { ptr, i64, i64 } %t281) + %t282 = load ptr, ptr %a1 + %t283 = load { ptr, i64, i64 }, ptr %a216 + call void @finch.gen.label(ptr %t282, { ptr, i64, i64 } %t283) + %t284 = load ptr, ptr %a1 + %t285 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.br(ptr %t284, { ptr, i64, i64 } %t285) + %t286 = load ptr, ptr %a1 + %t287 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.label(ptr %t286, { ptr, i64, i64 } %t287) + %t288 = load ptr, ptr %a1 + %t289 = load ptr, ptr %a1 + %t290 = load %S.ast.Type, ptr %a32 + %t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t289, %S.ast.Type %t290) + store { ptr, i64, i64 } { ptr @.str.3681, i64 4, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.3682, i64 3, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + store { ptr, i64, i64 } %t296, ptr %a300 + call void @finch_str_drop(ptr %a300) + %t301 = load { ptr, i64, i64 }, ptr %a297 + %t302 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t301, ptr %a304 + store { ptr, i64, i64 } %t302, ptr %a305 + call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) + store { ptr, i64, i64 } %t301, ptr %a306 + call void @finch_str_drop(ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a303 + store { ptr, i64, i64 } %t307, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.3683, i64 3, i64 0 }, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t307, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = load { ptr, i64, i64 }, ptr %a308 + %t313 = load { ptr, i64, i64 }, ptr %a213 + store { ptr, i64, i64 } %t312, ptr %a315 + store { ptr, i64, i64 } %t313, ptr %a316 + call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) + store { ptr, i64, i64 } %t312, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load { ptr, i64, i64 }, ptr %a314 + store { ptr, i64, i64 } %t318, ptr %a320 + store { ptr, i64, i64 } { ptr @.str.3684, i64 6, i64 0 }, ptr %a321 + call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) + store { ptr, i64, i64 } %t318, ptr %a322 + call void @finch_str_drop(ptr %a322) + %t323 = load { ptr, i64, i64 }, ptr %a319 + %t324 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t323, ptr %a326 + store { ptr, i64, i64 } %t324, ptr %a327 + call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) + store { ptr, i64, i64 } %t323, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a325 + store { ptr, i64, i64 } %t329, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.3685, i64 3, i64 0 }, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + store { ptr, i64, i64 } %t329, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = load { ptr, i64, i64 }, ptr %a330 + %t335 = load { ptr, i64, i64 }, ptr %a216 + store { ptr, i64, i64 } %t334, ptr %a337 + store { ptr, i64, i64 } %t335, ptr %a338 + call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) + store { ptr, i64, i64 } %t334, ptr %a339 + call void @finch_str_drop(ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t340, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.3686, i64 2, i64 0 }, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t340, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load { ptr, i64, i64 }, ptr %a341 + %t346 = call { ptr, i64, i64 } @finch.gen.op(ptr %t288, { ptr, i64, i64 } %t345) + store { ptr, i64, i64 } %t345, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t346, 0 + %t349 = load %S.ast.Type, ptr %a32 + store %S.ast.Type %t349, ptr %a350 + call void @finch.copy.S_ast_Type(ptr %a351, ptr %a350) + %t352 = load %S.ast.Type, ptr %a351 + %t353 = insertvalue %S.gen.Val %t348, %S.ast.Type %t352, 1 + %t354 = load ptr, ptr %a1 + %t355 = load %S.ast.Type, ptr %a32 + %t356 = call i1 @finch.gen.owning(ptr %t354, %S.ast.Type %t355) + %t357 = insertvalue %S.gen.Val %t353, i1 %t356, 2 + call void @finch_str_drop(ptr %a279) + call void @finch_str_drop(ptr %a246) + call void @finch_str_drop(ptr %a219) + call void @finch_str_drop(ptr %a216) + call void @finch_str_drop(ptr %a213) + call void @finch_str_drop(ptr %a210) + call void @finch_str_drop(ptr %a207) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a91) + call void @finch.drop.S_gen_Val(ptr %a82) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t357 +endif5745: + %t358 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t358, ptr %a359 + store { ptr, i64, i64 } { ptr @.str.3687, i64 5, i64 0 }, ptr %a360 + %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) + %t362 = icmp ne i32 %t361, 0 + br i1 %t362, label %then5763, label %endif5765 +then5763: + %t363 = load ptr, ptr %a1 + %t364 = load %S.ast.Node, ptr %a2 + %t365 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t363, %S.ast.Node %t364, i64 1, i64 0, { ptr, i64, i64 } %t365) + %t366 = load ptr, ptr %a1 + %t367 = load %S.ast.Type, ptr %a21 + %t368 = call i1 @finch.gen.owning(ptr %t366, %S.ast.Type %t367) + br label %logic.from5766 +logic.from5766: + br i1 %t368, label %logic.end5768, label %logic.rhs5767 +logic.rhs5767: + %t369 = load ptr, ptr %a1 + %t370 = load %S.ast.Type, ptr %a32 + %t371 = call i1 @finch.gen.owning(ptr %t369, %S.ast.Type %t370) + br label %logic.rend5769 +logic.rend5769: + br label %logic.end5768 +logic.end5768: + %t372 = phi i1 [ true, %logic.from5766 ], [ %t371, %logic.rend5769 ] + br i1 %t372, label %then5770, label %endif5772 +then5770: + %t373 = load ptr, ptr %a1 + %t374 = load ptr, ptr %a1 + %t375 = load ptr, ptr %a1 + %t376 = load %S.ast.Type, ptr %a4 + %t377 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t375, %S.ast.Type %t376) + store { ptr, i64, i64 } { ptr @.str.3689, i64 23, i64 0 }, ptr %a379 + store { ptr, i64, i64 } %t377, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + store { ptr, i64, i64 } %t382, ptr %a384 + store { ptr, i64, i64 } { ptr @.str.3690, i64 6, i64 0 }, ptr %a385 + call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) + store { ptr, i64, i64 } %t382, ptr %a386 + call void @finch_str_drop(ptr %a386) + %t387 = load { ptr, i64, i64 }, ptr %a383 + %t388 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t387, ptr %a390 + store { ptr, i64, i64 } %t388, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t387, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + store { ptr, i64, i64 } %t393, ptr %a395 + store { ptr, i64, i64 } { ptr @.str.3691, i64 14, i64 0 }, ptr %a396 + call void @finch_str_concat(ptr %a394, ptr %a395, ptr %a396) + store { ptr, i64, i64 } %t393, ptr %a397 + call void @finch_str_drop(ptr %a397) + %t398 = load { ptr, i64, i64 }, ptr %a394 + %t399 = call { ptr, i64, i64 } @finch.gen.op(ptr %t374, { ptr, i64, i64 } %t398) + store { ptr, i64, i64 } %t398, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = call { ptr, i64, i64 } @finch.gen.load(ptr %t373, { ptr, i64, i64 } { ptr @.str.3688, i64 3, i64 0 }, { ptr, i64, i64 } %t399) + store { ptr, i64, i64 } %t399, ptr %a402 + call void @finch_str_drop(ptr %a402) + store { ptr, i64, i64 } %t401, ptr %a403 + %t404 = load ptr, ptr %a1 + %t405 = load { ptr, i64, i64 }, ptr %a403 + %t406 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t404, { ptr, i64, i64 } %t405) + store { ptr, i64, i64 } %t406, ptr %a407 + %t408 = load ptr, ptr %a1 + %t409 = load { ptr, i64, i64 }, ptr %a3 + %t410 = load %S.ast.Type, ptr %a4 + %t411 = load { ptr, i64, i64 }, ptr %a407 + %t412 = extractvalue { ptr, i64, i64 } %t411, 1 + %t413 = icmp uge i64 3, %t412 + br i1 %t413, label %range5773, label %inrange5774 +range5773: + call void @finch_panic_index(ptr @.str.3692, i64 2975, i64 3, i64 %t412) + unreachable +inrange5774: + %t414 = extractvalue { ptr, i64, i64 } %t411, 0 + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 3 + %t416 = load { ptr, i64, i64 }, ptr %t415 + %t417 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t408, { ptr, i64, i64 } %t409, %S.ast.Type %t410, { ptr, i64, i64 } %t416) + store { ptr, i64, i64 } %t417, ptr %a418 + %t419 = load ptr, ptr %a1 + %t420 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t419, { ptr, i64, i64 } { ptr @.str.3693, i64 10, i64 0 }) + store { ptr, i64, i64 } %t420, ptr %a421 + %t422 = load ptr, ptr %a1 + %t423 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t422, { ptr, i64, i64 } { ptr @.str.3694, i64 10, i64 0 }) + store { ptr, i64, i64 } %t423, ptr %a424 + %t425 = load ptr, ptr %a1 + %t426 = load ptr, ptr %a1 + %t427 = load ptr, ptr %a1 + %t428 = load ptr, ptr %a1 + %t429 = load { ptr, i64, i64 }, ptr %a418 + %t430 = load %S.ast.Type, ptr %a4 + %t431 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t428, { ptr, i64, i64 } %t429, %S.ast.Type %t430, i64 0) + %t432 = call { ptr, i64, i64 } @finch.gen.load(ptr %t427, { ptr, i64, i64 } { ptr @.str.3696, i64 3, i64 0 }, { ptr, i64, i64 } %t431) + store { ptr, i64, i64 } %t431, ptr %a433 + call void @finch_str_drop(ptr %a433) + store { ptr, i64, i64 } { ptr @.str.3695, i64 12, i64 0 }, ptr %a435 + store { ptr, i64, i64 } %t432, ptr %a436 + call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) + store { ptr, i64, i64 } %t432, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a434 + store { ptr, i64, i64 } %t438, ptr %a440 + store { ptr, i64, i64 } { ptr @.str.3697, i64 3, i64 0 }, ptr %a441 + call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) + store { ptr, i64, i64 } %t438, ptr %a442 + call void @finch_str_drop(ptr %a442) + %t443 = load { ptr, i64, i64 }, ptr %a439 + %t444 = call { ptr, i64, i64 } @finch.gen.op(ptr %t426, { ptr, i64, i64 } %t443) + store { ptr, i64, i64 } %t443, ptr %a445 + call void @finch_str_drop(ptr %a445) + %t446 = load { ptr, i64, i64 }, ptr %a421 + %t447 = load { ptr, i64, i64 }, ptr %a424 + call void @finch.gen.condBr(ptr %t425, { ptr, i64, i64 } %t444, { ptr, i64, i64 } %t446, { ptr, i64, i64 } %t447) + store { ptr, i64, i64 } %t444, ptr %a448 + call void @finch_str_drop(ptr %a448) + %t449 = load ptr, ptr %a1 + %t450 = load { ptr, i64, i64 }, ptr %a421 + call void @finch.gen.label(ptr %t449, { ptr, i64, i64 } %t450) + %t451 = load ptr, ptr %a1 + %t452 = load ptr, ptr %a1 + %t453 = load { ptr, i64, i64 }, ptr %a418 + %t454 = load %S.ast.Type, ptr %a4 + %t455 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t452, { ptr, i64, i64 } %t453, %S.ast.Type %t454, i64 1) + %t456 = load %S.ast.Type, ptr %a21 + call void @finch.gen.dropAt(ptr %t451, { ptr, i64, i64 } %t455, %S.ast.Type %t456) + store { ptr, i64, i64 } %t455, ptr %a457 + call void @finch_str_drop(ptr %a457) + %t458 = load ptr, ptr %a1 + %t459 = load ptr, ptr %a1 + %t460 = load { ptr, i64, i64 }, ptr %a418 + %t461 = load %S.ast.Type, ptr %a4 + %t462 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t459, { ptr, i64, i64 } %t460, %S.ast.Type %t461, i64 2) + %t463 = load %S.ast.Type, ptr %a32 + call void @finch.gen.dropAt(ptr %t458, { ptr, i64, i64 } %t462, %S.ast.Type %t463) + store { ptr, i64, i64 } %t462, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = load ptr, ptr %a1 + %t466 = load { ptr, i64, i64 }, ptr %a424 + call void @finch.gen.br(ptr %t465, { ptr, i64, i64 } %t466) + %t467 = load ptr, ptr %a1 + %t468 = load { ptr, i64, i64 }, ptr %a424 + call void @finch.gen.label(ptr %t467, { ptr, i64, i64 } %t468) + %t469 = load ptr, ptr %a1 + %t470 = load { ptr, i64, i64 }, ptr %a407 + call void @finch.gen.loopEnd(ptr %t469, { ptr, i64, i64 } %t470) + call void @finch_str_drop(ptr %a424) + call void @finch_str_drop(ptr %a421) + call void @finch_str_drop(ptr %a418) + call void @finch.drop.arr_str(ptr %a407) + call void @finch_str_drop(ptr %a403) + br label %endif5772 +endif5772: + %t471 = load ptr, ptr %a1 + %t472 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.3698, i64 31, i64 0 }, ptr %a474 + store { ptr, i64, i64 } %t472, ptr %a475 + call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) + %t476 = load { ptr, i64, i64 }, ptr %a473 + store { ptr, i64, i64 } %t476, ptr %a478 + store { ptr, i64, i64 } { ptr @.str.3699, i64 1, i64 0 }, ptr %a479 + call void @finch_str_concat(ptr %a477, ptr %a478, ptr %a479) + store { ptr, i64, i64 } %t476, ptr %a480 + call void @finch_str_drop(ptr %a480) + %t481 = load { ptr, i64, i64 }, ptr %a477 + call void @finch.gen.emit(ptr %t471, { ptr, i64, i64 } %t481) + store { ptr, i64, i64 } %t481, ptr %a482 + call void @finch_str_drop(ptr %a482) + %t483 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3700, i64 4, i64 0 }) + %t484 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t483, 1 + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t484 +endif5765: + %t485 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t485, ptr %a486 + store { ptr, i64, i64 } { ptr @.str.3701, i64 4, i64 0 }, ptr %a487 + %t488 = call i32 @finch_str_eq(ptr %a486, ptr %a487) + %t489 = icmp ne i32 %t488, 0 + br label %logic.from5775 +logic.from5775: + br i1 %t489, label %logic.end5777, label %logic.rhs5776 +logic.rhs5776: + %t490 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t490, ptr %a491 + store { ptr, i64, i64 } { ptr @.str.3702, i64 6, i64 0 }, ptr %a492 + %t493 = call i32 @finch_str_eq(ptr %a491, ptr %a492) + %t494 = icmp ne i32 %t493, 0 + br label %logic.rend5778 +logic.rend5778: + br label %logic.end5777 +logic.end5777: + %t495 = phi i1 [ true, %logic.from5775 ], [ %t494, %logic.rend5778 ] + br i1 %t495, label %then5779, label %endif5781 +then5779: + %t496 = load ptr, ptr %a1 + %t497 = load %S.ast.Node, ptr %a2 + %t498 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t496, %S.ast.Node %t497, i64 1, i64 0, { ptr, i64, i64 } %t498) + store i64 1, ptr %a499 + %t500 = load %S.ast.Type, ptr %a21 + store %S.ast.Type %t500, ptr %a501 + call void @finch.copy.S_ast_Type(ptr %a502, ptr %a501) + %t503 = load %S.ast.Type, ptr %a502 + store %S.ast.Type %t503, ptr %a504 + %t505 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t505, ptr %a506 + store { ptr, i64, i64 } { ptr @.str.3703, i64 6, i64 0 }, ptr %a507 + %t508 = call i32 @finch_str_eq(ptr %a506, ptr %a507) + %t509 = icmp ne i32 %t508, 0 + br i1 %t509, label %then5782, label %endif5784 +then5782: + store i64 2, ptr %a499 + %t510 = load %S.ast.Type, ptr %a32 + store %S.ast.Type %t510, ptr %a511 + call void @finch.copy.S_ast_Type(ptr %a512, ptr %a511) + %t513 = load %S.ast.Type, ptr %a512 + %t514 = load %S.ast.Type, ptr %a504 + store %S.ast.Type %t513, ptr %a504 + store %S.ast.Type %t514, ptr %a515 + call void @finch.drop.S_ast_Type(ptr %a515) + br label %endif5784 +endif5784: + %t516 = load %S.ast.Type, ptr %a504 + %t517 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t516) + store %S.ast.Type %t517, ptr %a518 + %t519 = load ptr, ptr %a1 + %t520 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t519, { ptr, i64, i64 } { ptr @.str.3704, i64 17, i64 0 }) + store { ptr, i64, i64 } %t520, ptr %a521 + %t522 = load ptr, ptr %a1 + %t523 = load { ptr, i64, i64 }, ptr %a521 + call void @finch.gen.store(ptr %t522, { ptr, i64, i64 } { ptr @.str.3705, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3706, i64 15, i64 0 }, { ptr, i64, i64 } %t523) + %t524 = load ptr, ptr %a1 + %t525 = load ptr, ptr %a1 + %t526 = load ptr, ptr %a1 + %t527 = load %S.ast.Type, ptr %a4 + %t528 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t526, %S.ast.Type %t527) + store { ptr, i64, i64 } { ptr @.str.3708, i64 23, i64 0 }, ptr %a530 + store { ptr, i64, i64 } %t528, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + store { ptr, i64, i64 } %t533, ptr %a535 + store { ptr, i64, i64 } { ptr @.str.3709, i64 6, i64 0 }, ptr %a536 + call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536) + store { ptr, i64, i64 } %t533, ptr %a537 + call void @finch_str_drop(ptr %a537) + %t538 = load { ptr, i64, i64 }, ptr %a534 + %t539 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t538, ptr %a541 + store { ptr, i64, i64 } %t539, ptr %a542 + call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) + store { ptr, i64, i64 } %t538, ptr %a543 + call void @finch_str_drop(ptr %a543) + %t544 = load { ptr, i64, i64 }, ptr %a540 + store { ptr, i64, i64 } %t544, ptr %a546 + store { ptr, i64, i64 } { ptr @.str.3710, i64 14, i64 0 }, ptr %a547 + call void @finch_str_concat(ptr %a545, ptr %a546, ptr %a547) + store { ptr, i64, i64 } %t544, ptr %a548 + call void @finch_str_drop(ptr %a548) + %t549 = load { ptr, i64, i64 }, ptr %a545 + %t550 = call { ptr, i64, i64 } @finch.gen.op(ptr %t525, { ptr, i64, i64 } %t549) + store { ptr, i64, i64 } %t549, ptr %a551 + call void @finch_str_drop(ptr %a551) + %t552 = call { ptr, i64, i64 } @finch.gen.load(ptr %t524, { ptr, i64, i64 } { ptr @.str.3707, i64 3, i64 0 }, { ptr, i64, i64 } %t550) + store { ptr, i64, i64 } %t550, ptr %a553 + call void @finch_str_drop(ptr %a553) + store { ptr, i64, i64 } %t552, ptr %a554 + %t555 = load ptr, ptr %a1 + %t556 = load { ptr, i64, i64 }, ptr %a521 + store { ptr, i64, i64 } { ptr @.str.3711, i64 30, i64 0 }, ptr %a558 + store { ptr, i64, i64 } %t556, ptr %a559 + call void @finch_str_concat(ptr %a557, ptr %a558, ptr %a559) + %t560 = load { ptr, i64, i64 }, ptr %a557 + store { ptr, i64, i64 } %t560, ptr %a562 + store { ptr, i64, i64 } { ptr @.str.3712, i64 6, i64 0 }, ptr %a563 + call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) + store { ptr, i64, i64 } %t560, ptr %a564 + call void @finch_str_drop(ptr %a564) + %t565 = load { ptr, i64, i64 }, ptr %a561 + %t566 = load { ptr, i64, i64 }, ptr %a554 + store { ptr, i64, i64 } %t565, ptr %a568 + store { ptr, i64, i64 } %t566, ptr %a569 + call void @finch_str_concat(ptr %a567, ptr %a568, ptr %a569) + store { ptr, i64, i64 } %t565, ptr %a570 + call void @finch_str_drop(ptr %a570) + %t571 = load { ptr, i64, i64 }, ptr %a567 + store { ptr, i64, i64 } %t571, ptr %a573 + store { ptr, i64, i64 } { ptr @.str.3713, i64 6, i64 0 }, ptr %a574 + call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) + store { ptr, i64, i64 } %t571, ptr %a575 + call void @finch_str_drop(ptr %a575) + %t576 = load { ptr, i64, i64 }, ptr %a572 + %t577 = load ptr, ptr %a1 + %t578 = load %S.ast.Type, ptr %a504 + %t579 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t577, %S.ast.Type %t578) + store { ptr, i64, i64 } %t576, ptr %a581 + store { ptr, i64, i64 } %t579, ptr %a582 + call void @finch_str_concat(ptr %a580, ptr %a581, ptr %a582) + store { ptr, i64, i64 } %t576, ptr %a583 + call void @finch_str_drop(ptr %a583) + store { ptr, i64, i64 } %t579, ptr %a584 + call void @finch_str_drop(ptr %a584) + %t585 = load { ptr, i64, i64 }, ptr %a580 + store { ptr, i64, i64 } %t585, ptr %a587 + store { ptr, i64, i64 } { ptr @.str.3714, i64 1, i64 0 }, ptr %a588 + call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588) + store { ptr, i64, i64 } %t585, ptr %a589 + call void @finch_str_drop(ptr %a589) + %t590 = load { ptr, i64, i64 }, ptr %a586 + call void @finch.gen.emit(ptr %t555, { ptr, i64, i64 } %t590) + store { ptr, i64, i64 } %t590, ptr %a591 + call void @finch_str_drop(ptr %a591) + %t592 = load ptr, ptr %a1 + %t593 = load { ptr, i64, i64 }, ptr %a521 + %t594 = call { ptr, i64, i64 } @finch.gen.load(ptr %t592, { ptr, i64, i64 } { ptr @.str.3715, i64 3, i64 0 }, { ptr, i64, i64 } %t593) + store { ptr, i64, i64 } %t594, ptr %a595 + %t596 = load ptr, ptr %a1 + %t597 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t596, { ptr, i64, i64 } { ptr @.str.3716, i64 3, i64 0 }) + store { ptr, i64, i64 } %t597, ptr %a598 + %t599 = load ptr, ptr %a1 + %t600 = load { ptr, i64, i64 }, ptr %a598 + call void @finch.gen.store(ptr %t599, { ptr, i64, i64 } { ptr @.str.3717, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3718, i64 1, i64 0 }, { ptr, i64, i64 } %t600) + %t601 = load ptr, ptr %a1 + %t602 = load ptr, ptr %a1 + %t603 = load ptr, ptr %a1 + %t604 = load %S.ast.Type, ptr %a4 + %t605 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t603, %S.ast.Type %t604) + store { ptr, i64, i64 } { ptr @.str.3720, i64 23, i64 0 }, ptr %a607 + store { ptr, i64, i64 } %t605, ptr %a608 + call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) + store { ptr, i64, i64 } %t605, ptr %a609 + call void @finch_str_drop(ptr %a609) + %t610 = load { ptr, i64, i64 }, ptr %a606 + store { ptr, i64, i64 } %t610, ptr %a612 + store { ptr, i64, i64 } { ptr @.str.3721, i64 6, i64 0 }, ptr %a613 + call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) + store { ptr, i64, i64 } %t610, ptr %a614 + call void @finch_str_drop(ptr %a614) + %t615 = load { ptr, i64, i64 }, ptr %a611 + %t616 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t615, ptr %a618 + store { ptr, i64, i64 } %t616, ptr %a619 + call void @finch_str_concat(ptr %a617, ptr %a618, ptr %a619) + store { ptr, i64, i64 } %t615, ptr %a620 + call void @finch_str_drop(ptr %a620) + %t621 = load { ptr, i64, i64 }, ptr %a617 + store { ptr, i64, i64 } %t621, ptr %a623 + store { ptr, i64, i64 } { ptr @.str.3722, i64 14, i64 0 }, ptr %a624 + call void @finch_str_concat(ptr %a622, ptr %a623, ptr %a624) + store { ptr, i64, i64 } %t621, ptr %a625 + call void @finch_str_drop(ptr %a625) + %t626 = load { ptr, i64, i64 }, ptr %a622 + %t627 = call { ptr, i64, i64 } @finch.gen.op(ptr %t602, { ptr, i64, i64 } %t626) + store { ptr, i64, i64 } %t626, ptr %a628 + call void @finch_str_drop(ptr %a628) + %t629 = call { ptr, i64, i64 } @finch.gen.load(ptr %t601, { ptr, i64, i64 } { ptr @.str.3719, i64 3, i64 0 }, { ptr, i64, i64 } %t627) + store { ptr, i64, i64 } %t627, ptr %a630 + call void @finch_str_drop(ptr %a630) + store { ptr, i64, i64 } %t629, ptr %a631 + %t632 = load ptr, ptr %a1 + %t633 = load { ptr, i64, i64 }, ptr %a631 + %t634 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t632, { ptr, i64, i64 } %t633) + store { ptr, i64, i64 } %t634, ptr %a635 + %t636 = load ptr, ptr %a1 + %t637 = load { ptr, i64, i64 }, ptr %a3 + %t638 = load %S.ast.Type, ptr %a4 + %t639 = load { ptr, i64, i64 }, ptr %a635 + %t640 = extractvalue { ptr, i64, i64 } %t639, 1 + %t641 = icmp uge i64 3, %t640 + br i1 %t641, label %range5785, label %inrange5786 +range5785: + call void @finch_panic_index(ptr @.str.3723, i64 3007, i64 3, i64 %t640) + unreachable +inrange5786: + %t642 = extractvalue { ptr, i64, i64 } %t639, 0 + %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %t642, i64 3 + %t644 = load { ptr, i64, i64 }, ptr %t643 + %t645 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t636, { ptr, i64, i64 } %t637, %S.ast.Type %t638, { ptr, i64, i64 } %t644) + store { ptr, i64, i64 } %t645, ptr %a646 + %t647 = load ptr, ptr %a1 + %t648 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t647, { ptr, i64, i64 } { ptr @.str.3724, i64 10, i64 0 }) + store { ptr, i64, i64 } %t648, ptr %a649 + %t650 = load ptr, ptr %a1 + %t651 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t650, { ptr, i64, i64 } { ptr @.str.3725, i64 10, i64 0 }) + store { ptr, i64, i64 } %t651, ptr %a652 + %t653 = load ptr, ptr %a1 + %t654 = load ptr, ptr %a1 + %t655 = load ptr, ptr %a1 + %t656 = load ptr, ptr %a1 + %t657 = load { ptr, i64, i64 }, ptr %a646 + %t658 = load %S.ast.Type, ptr %a4 + %t659 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t656, { ptr, i64, i64 } %t657, %S.ast.Type %t658, i64 0) + %t660 = call { ptr, i64, i64 } @finch.gen.load(ptr %t655, { ptr, i64, i64 } { ptr @.str.3727, i64 3, i64 0 }, { ptr, i64, i64 } %t659) + store { ptr, i64, i64 } %t659, ptr %a661 + call void @finch_str_drop(ptr %a661) + store { ptr, i64, i64 } { ptr @.str.3726, i64 12, i64 0 }, ptr %a663 + store { ptr, i64, i64 } %t660, ptr %a664 + call void @finch_str_concat(ptr %a662, ptr %a663, ptr %a664) + store { ptr, i64, i64 } %t660, ptr %a665 + call void @finch_str_drop(ptr %a665) + %t666 = load { ptr, i64, i64 }, ptr %a662 + store { ptr, i64, i64 } %t666, ptr %a668 + store { ptr, i64, i64 } { ptr @.str.3728, i64 3, i64 0 }, ptr %a669 + call void @finch_str_concat(ptr %a667, ptr %a668, ptr %a669) + store { ptr, i64, i64 } %t666, ptr %a670 + call void @finch_str_drop(ptr %a670) + %t671 = load { ptr, i64, i64 }, ptr %a667 + %t672 = call { ptr, i64, i64 } @finch.gen.op(ptr %t654, { ptr, i64, i64 } %t671) + store { ptr, i64, i64 } %t671, ptr %a673 + call void @finch_str_drop(ptr %a673) + %t674 = load { ptr, i64, i64 }, ptr %a649 + %t675 = load { ptr, i64, i64 }, ptr %a652 + call void @finch.gen.condBr(ptr %t653, { ptr, i64, i64 } %t672, { ptr, i64, i64 } %t674, { ptr, i64, i64 } %t675) + store { ptr, i64, i64 } %t672, ptr %a676 + call void @finch_str_drop(ptr %a676) + %t677 = load ptr, ptr %a1 + %t678 = load { ptr, i64, i64 }, ptr %a649 + call void @finch.gen.label(ptr %t677, { ptr, i64, i64 } %t678) + %t679 = load ptr, ptr %a1 + %t680 = load { ptr, i64, i64 }, ptr %a598 + %t681 = call { ptr, i64, i64 } @finch.gen.load(ptr %t679, { ptr, i64, i64 } { ptr @.str.3729, i64 3, i64 0 }, { ptr, i64, i64 } %t680) + store { ptr, i64, i64 } %t681, ptr %a682 + %t683 = load ptr, ptr %a1 + %t684 = load ptr, ptr %a1 + %t685 = load ptr, ptr %a1 + %t686 = load %S.ast.Type, ptr %a504 + %t687 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t685, %S.ast.Type %t686) + store { ptr, i64, i64 } { ptr @.str.3730, i64 23, i64 0 }, ptr %a689 + store { ptr, i64, i64 } %t687, ptr %a690 + call void @finch_str_concat(ptr %a688, ptr %a689, ptr %a690) + store { ptr, i64, i64 } %t687, ptr %a691 + call void @finch_str_drop(ptr %a691) + %t692 = load { ptr, i64, i64 }, ptr %a688 + store { ptr, i64, i64 } %t692, ptr %a694 + store { ptr, i64, i64 } { ptr @.str.3731, i64 6, i64 0 }, ptr %a695 + call void @finch_str_concat(ptr %a693, ptr %a694, ptr %a695) + store { ptr, i64, i64 } %t692, ptr %a696 + call void @finch_str_drop(ptr %a696) + %t697 = load { ptr, i64, i64 }, ptr %a693 + %t698 = load { ptr, i64, i64 }, ptr %a595 + store { ptr, i64, i64 } %t697, ptr %a700 + store { ptr, i64, i64 } %t698, ptr %a701 + call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) + store { ptr, i64, i64 } %t697, ptr %a702 + call void @finch_str_drop(ptr %a702) + %t703 = load { ptr, i64, i64 }, ptr %a699 + store { ptr, i64, i64 } %t703, ptr %a705 + store { ptr, i64, i64 } { ptr @.str.3732, i64 6, i64 0 }, ptr %a706 + call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) + store { ptr, i64, i64 } %t703, ptr %a707 + call void @finch_str_drop(ptr %a707) + %t708 = load { ptr, i64, i64 }, ptr %a704 + %t709 = load { ptr, i64, i64 }, ptr %a682 + store { ptr, i64, i64 } %t708, ptr %a711 + store { ptr, i64, i64 } %t709, ptr %a712 + call void @finch_str_concat(ptr %a710, ptr %a711, ptr %a712) + store { ptr, i64, i64 } %t708, ptr %a713 + call void @finch_str_drop(ptr %a713) + %t714 = load { ptr, i64, i64 }, ptr %a710 + %t715 = call { ptr, i64, i64 } @finch.gen.op(ptr %t684, { ptr, i64, i64 } %t714) + store { ptr, i64, i64 } %t714, ptr %a716 + call void @finch_str_drop(ptr %a716) + %t717 = load ptr, ptr %a1 + %t718 = load { ptr, i64, i64 }, ptr %a646 + %t719 = load %S.ast.Type, ptr %a4 + %t720 = load i64, ptr %a499 + %t721 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t717, { ptr, i64, i64 } %t718, %S.ast.Type %t719, i64 %t720) + %t722 = load %S.ast.Type, ptr %a504 + call void @finch.gen.copyAt(ptr %t683, { ptr, i64, i64 } %t715, { ptr, i64, i64 } %t721, %S.ast.Type %t722) + store { ptr, i64, i64 } %t715, ptr %a723 + call void @finch_str_drop(ptr %a723) + store { ptr, i64, i64 } %t721, ptr %a724 + call void @finch_str_drop(ptr %a724) + %t725 = load ptr, ptr %a1 + %t726 = load ptr, ptr %a1 + %t727 = load { ptr, i64, i64 }, ptr %a682 + store { ptr, i64, i64 } { ptr @.str.3734, i64 8, i64 0 }, ptr %a729 + store { ptr, i64, i64 } %t727, ptr %a730 + call void @finch_str_concat(ptr %a728, ptr %a729, ptr %a730) + %t731 = load { ptr, i64, i64 }, ptr %a728 + store { ptr, i64, i64 } %t731, ptr %a733 + store { ptr, i64, i64 } { ptr @.str.3735, i64 3, i64 0 }, ptr %a734 + call void @finch_str_concat(ptr %a732, ptr %a733, ptr %a734) + store { ptr, i64, i64 } %t731, ptr %a735 + call void @finch_str_drop(ptr %a735) + %t736 = load { ptr, i64, i64 }, ptr %a732 + %t737 = call { ptr, i64, i64 } @finch.gen.op(ptr %t726, { ptr, i64, i64 } %t736) + store { ptr, i64, i64 } %t736, ptr %a738 + call void @finch_str_drop(ptr %a738) + %t739 = load { ptr, i64, i64 }, ptr %a598 + call void @finch.gen.store(ptr %t725, { ptr, i64, i64 } { ptr @.str.3733, i64 3, i64 0 }, { ptr, i64, i64 } %t737, { ptr, i64, i64 } %t739) + store { ptr, i64, i64 } %t737, ptr %a740 + call void @finch_str_drop(ptr %a740) + %t741 = load ptr, ptr %a1 + %t742 = load { ptr, i64, i64 }, ptr %a652 + call void @finch.gen.br(ptr %t741, { ptr, i64, i64 } %t742) + %t743 = load ptr, ptr %a1 + %t744 = load { ptr, i64, i64 }, ptr %a652 + call void @finch.gen.label(ptr %t743, { ptr, i64, i64 } %t744) + %t745 = load ptr, ptr %a1 + %t746 = load { ptr, i64, i64 }, ptr %a635 + call void @finch.gen.loopEnd(ptr %t745, { ptr, i64, i64 } %t746) + %t747 = load ptr, ptr %a1 + %t748 = load { ptr, i64, i64 }, ptr %a521 + %t749 = call { ptr, i64, i64 } @finch.gen.load(ptr %t747, { ptr, i64, i64 } { ptr @.str.3736, i64 17, i64 0 }, { ptr, i64, i64 } %t748) + %t750 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t749, 0 + %t751 = load %S.ast.Type, ptr %a518 + store %S.ast.Type %t751, ptr %a752 + call void @finch.copy.S_ast_Type(ptr %a753, ptr %a752) + %t754 = load %S.ast.Type, ptr %a753 + %t755 = insertvalue %S.gen.Val %t750, %S.ast.Type %t754, 1 + %t756 = insertvalue %S.gen.Val %t755, i1 true, 2 + call void @finch_str_drop(ptr %a682) + call void @finch_str_drop(ptr %a652) + call void @finch_str_drop(ptr %a649) + call void @finch_str_drop(ptr %a646) + call void @finch.drop.arr_str(ptr %a635) + call void @finch_str_drop(ptr %a631) + call void @finch_str_drop(ptr %a598) + call void @finch_str_drop(ptr %a595) + call void @finch_str_drop(ptr %a554) + call void @finch_str_drop(ptr %a521) + call void @finch.drop.S_ast_Type(ptr %a518) + call void @finch.drop.S_ast_Type(ptr %a504) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t756 +endif5781: + %t757 = load ptr, ptr %a1 + %t758 = load %S.ast.Node, ptr %a2 + %t759 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.3737, i64 21, i64 0 }, ptr %a761 + store { ptr, i64, i64 } %t759, ptr %a762 + call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) + %t763 = load { ptr, i64, i64 }, ptr %a760 + store { ptr, i64, i64 } %t763, ptr %a765 + store { ptr, i64, i64 } { ptr @.str.3738, i64 49, i64 0 }, ptr %a766 + call void @finch_str_concat(ptr %a764, ptr %a765, ptr %a766) + store { ptr, i64, i64 } %t763, ptr %a767 + call void @finch_str_drop(ptr %a767) + %t768 = load { ptr, i64, i64 }, ptr %a764 + call void @finch.gen.fail(ptr %t757, %S.ast.Node %t758, { ptr, i64, i64 } %t768) + store { ptr, i64, i64 } %t768, ptr %a769 + call void @finch_str_drop(ptr %a769) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val zeroinitializer +} + +define internal %S.gen.Val @finch.gen.patternValue(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca %S.gen.EnumDef, align 16 + %a39 = alloca %S.gen.EnumDef, align 16 + %a41 = alloca %S.gen.EnumDef, align 16 + %a46 = alloca i64, align 16 + %a49 = alloca i64, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca i64, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca %S.ast.Type, align 16 + %a118 = alloca %S.ast.Type, align 16 + %a129 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.3739, i64 4, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.from5787 +logic.from5787: + br i1 %t9, label %logic.rhs5788, label %logic.end5789 +logic.rhs5788: + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + store { ptr, i64, i64 } %t11, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.3740, i64 3, i64 0 }, ptr %a13 + %t14 = call i32 @finch_str_eq(ptr %a12, ptr %a13) + %t15 = icmp ne i32 %t14, 0 + br label %logic.rend5790 +logic.rend5790: + br label %logic.end5789 +logic.end5789: + %t16 = phi i1 [ false, %logic.from5787 ], [ %t15, %logic.rend5790 ] + br label %logic.from5791 +logic.from5791: + br i1 %t16, label %logic.rhs5792, label %logic.end5793 +logic.rhs5792: + %t17 = load ptr, ptr %a1 + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call i64 @finch.gen.lookup(ptr %t17, { ptr, i64, i64 } %t19) + %t21 = icmp slt i64 %t20, 0 + br label %logic.rend5794 +logic.rend5794: + br label %logic.end5793 +logic.end5793: + %t22 = phi i1 [ false, %logic.from5791 ], [ %t21, %logic.rend5794 ] + br i1 %t22, label %then5795, label %endif5797 +then5795: + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic5798, label %ok5799 +panic5798: + call void @finch_panic(ptr @.str.3741, i64 3029, ptr @.str.3742) + unreachable +ok5799: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 21 + %t26 = load ptr, ptr %a1 + %t27 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = call i64 @finch.gen.findEnum(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t30) + %t32 = load { ptr, i64, i64 }, ptr %t25 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range5800, label %inrange5801 +range5800: + call void @finch_panic_index(ptr @.str.3743, i64 3029, i64 %t31, i64 %t33) + unreachable +inrange5801: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 + %t37 = load %S.gen.EnumDef, ptr %t36 + store %S.gen.EnumDef %t37, ptr %a38 + call void @finch.copy.S_gen_EnumDef(ptr %a39, ptr %a38) + %t40 = load %S.gen.EnumDef, ptr %a39 + store %S.gen.EnumDef %t40, ptr %a41 + %t42 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 + %t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store i64 -1, ptr %a46 + %t47 = load i64, ptr %t43 + %t48 = load ptr, ptr %t42 + store i64 0, ptr %a49 + br label %find.cond5802 +find.cond5802: + %t50 = load i64, ptr %a49 + %t51 = icmp slt i64 %t50, %t47 + br i1 %t51, label %find.body5803, label %find.end5806 +find.body5803: + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t50 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t53, ptr %a54 + store { ptr, i64, i64 } %t45, ptr %a55 + %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) + %t57 = icmp ne i32 %t56, 0 + br i1 %t57, label %find.hit5804, label %find.next5805 +find.hit5804: + store i64 %t50, ptr %a46 + br label %find.end5806 +find.next5805: + %t58 = add i64 %t50, 1 + store i64 %t58, ptr %a49 + br label %find.cond5802 +find.end5806: + %t59 = load i64, ptr %a46 + store i64 %t59, ptr %a60 + %t61 = load i64, ptr %a60 + %t62 = icmp slt i64 %t61, 0 + br i1 %t62, label %then5807, label %endif5809 +then5807: + %t63 = load ptr, ptr %a1 + %t64 = load %S.ast.Node, ptr %a2 + %t65 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t66 = load { ptr, i64, i64 }, ptr %t65 + store { ptr, i64, i64 } { ptr @.str.3744, i64 1, i64 0 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.3745, i64 22, i64 0 }, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t70, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 1 + %t77 = load { ptr, i64, i64 }, ptr %t76 + store { ptr, i64, i64 } %t75, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t75, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t82, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.3746, i64 10, i64 0 }, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t82, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a83 + %t88 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 + %t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t88, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3747, i64 2, i64 0 }, ptr %a90 + call void @finch_str_join(ptr %a91, ptr %t88, ptr %a90) + %t92 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } %t87, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t87, ptr %a96 + call void @finch_str_drop(ptr %a96) + store { ptr, i64, i64 } %t92, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.3748, i64 1, i64 0 }, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + call void @finch.gen.fail(ptr %t63, %S.ast.Node %t64, { ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch_str_drop(ptr %a104) + br label %endif5809 +endif5809: + %t105 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 3 + %t106 = load i64, ptr %a60 + %t107 = load { ptr, i64, i64 }, ptr %t105 + %t108 = extractvalue { ptr, i64, i64 } %t107, 1 + %t109 = icmp uge i64 %t106, %t108 + br i1 %t109, label %range5810, label %inrange5811 +range5810: + call void @finch_panic_index(ptr @.str.3749, i64 3034, i64 %t106, i64 %t108) + unreachable +inrange5811: + %t110 = extractvalue { ptr, i64, i64 } %t107, 0 + %t111 = getelementptr inbounds i64, ptr %t110, i64 %t106 + %t112 = load i64, ptr %t111 + call void @finch_str_from_int(ptr %a113, i64 %t112) + %t114 = load { ptr, i64, i64 }, ptr %a113 + %t115 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t114, 0 + %t116 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t116, ptr %a117 + call void @finch.copy.S_ast_Type(ptr %a118, ptr %a117) + %t119 = load %S.ast.Type, ptr %a118 + %t120 = insertvalue %S.gen.Val %t115, %S.ast.Type %t119, 1 + call void @finch.drop.S_gen_EnumDef(ptr %a41) + ret %S.gen.Val %t120 +endif5797: + %t121 = load ptr, ptr %a1 + %t122 = load ptr, ptr %a1 + %t123 = load %S.ast.Node, ptr %a2 + %t124 = load %S.ast.Type, ptr %a3 + %t125 = call %S.gen.Val @finch.gen.exprWant(ptr %t122, %S.ast.Node %t123, %S.ast.Type %t124) + %t126 = load %S.ast.Type, ptr %a3 + %t127 = load %S.ast.Node, ptr %a2 + %t128 = call %S.gen.Val @finch.gen.coerce(ptr %t121, %S.gen.Val %t125, %S.ast.Type %t126, %S.ast.Node %t127, { ptr, i64, i64 } { ptr @.str.3750, i64 12, i64 0 }) + store %S.gen.Val %t125, ptr %a129 + call void @finch.drop.S_gen_Val(ptr %a129) + ret %S.gen.Val %t128 +} + +define internal void @finch.drop.S_gen_SumPat(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.SumPat, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_ast_Node(ptr %t1) + ret void +} + +define internal %S.gen.Val @finch.gen.matchGen(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a13 = alloca %S.gen.Val, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca i64, align 16 + %a49 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca i1, align 16 + %a128 = alloca i1, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca %S.ast.Type, align 16 + %a138 = alloca i64, align 16 + %a140 = alloca i64, align 16 + %a152 = alloca %S.ast.Node, align 16 + %a153 = alloca %S.ast.Node, align 16 + %a155 = alloca %S.ast.Node, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca i64, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca i64, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca %S.gen.SumPat, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca i64, align 16 + %a210 = alloca i64, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca %S.gen.Val, align 16 + %a303 = alloca i64, align 16 + %a306 = alloca i64, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca %S.gen.Val, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca i1, align 16 + %a404 = alloca %S.gen.StructDef, align 16 + %a405 = alloca %S.gen.StructDef, align 16 + %a407 = alloca %S.gen.StructDef, align 16 + %a410 = alloca i64, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca i64, align 16 + %a453 = alloca %S.ast.Type, align 16 + %a454 = alloca %S.ast.Type, align 16 + %a456 = alloca %S.ast.Type, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca %S.ast.Node, align 16 + %a536 = alloca %S.ast.Node, align 16 + %a538 = alloca %S.ast.Node, align 16 + %a543 = alloca %S.gen.Val, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca %S.ast.Type, align 16 + %a573 = alloca %S.ast.Type, align 16 + %a576 = alloca %S.ast.Type, align 16 + %a583 = alloca %S.gen.Val, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca i64, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca i64, align 16 + %a670 = alloca i64, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a702 = alloca { ptr, i64, i64 }, align 16 + %a703 = alloca { ptr, i64, i64 }, align 16 + %a717 = alloca { ptr, i64, i64 }, align 16 + %a718 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca %S.gen.EnumDef, align 16 + %a753 = alloca %S.gen.EnumDef, align 16 + %a755 = alloca %S.gen.EnumDef, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca i64, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca i64, align 16 + %a777 = alloca i64, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a823 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a839 = alloca { ptr, i64, i64 }, align 16 + %a840 = alloca { ptr, i64, i64 }, align 16 + %a841 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a867 = alloca { ptr, i64, i64 }, align 16 + %a868 = alloca { ptr, i64, i64 }, align 16 + %a869 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a880 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a882 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a887 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca %S.ast.Type, align 16 + %a891 = alloca %S.ast.Type, align 16 + %a898 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range5812, label %inrange5813 +range5812: + call void @finch_panic_index(ptr @.str.3751, i64 3042, i64 0, i64 %t7) + unreachable +inrange5813: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) + store %S.gen.Val %t12, ptr %a13 + %t14 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 1 + %t15 = load %S.ast.Type, ptr %t14 + store %S.ast.Type %t15, ptr %a16 + call void @finch.copy.S_ast_Type(ptr %a17, ptr %a16) + %t18 = load %S.ast.Type, ptr %a17 + store %S.ast.Type %t18, ptr %a19 + %t20 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.3752, i64 4, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br label %logic.from5814 +logic.from5814: + br i1 %t25, label %logic.end5816, label %logic.rhs5815 +logic.rhs5815: + %t26 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.3753, i64 4, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend5817 +logic.rend5817: + br label %logic.end5816 +logic.end5816: + %t32 = phi i1 [ true, %logic.from5814 ], [ %t31, %logic.rend5817 ] + br i1 %t32, label %then5818, label %endif5820 +then5818: + %t33 = load ptr, ptr %a1 + %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 0, %t36 + br i1 %t37, label %range5821, label %inrange5822 +range5821: + call void @finch_panic_index(ptr @.str.3754, i64 3045, i64 0, i64 %t36) + unreachable +inrange5822: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 0 + %t40 = load %S.ast.Node, ptr %t39 + call void @finch.gen.fail(ptr %t33, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.3755, i64 30, i64 0 }) + br label %endif5820 +endif5820: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic5823, label %ok5824 +panic5823: + call void @finch_panic(ptr @.str.3756, i64 3047, ptr @.str.3757) + unreachable +ok5824: + %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 11 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + store i64 %t45, ptr %a46 + %t47 = load ptr, ptr %a1 + %t48 = load %S.gen.Val, ptr %a13 + call void @finch.gen.hold(ptr %t47, %S.gen.Val %t48) + store i64 -1, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.3758, i64 0, i64 0 }, ptr %a50 + %t51 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.3759, i64 6, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then5825, label %endif5827 +then5825: + %t57 = load ptr, ptr %a1 + %t58 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t59 = load { ptr, i64, i64 }, ptr %t58 + %t60 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = call i64 @finch.gen.findSum(ptr %t57, { ptr, i64, i64 } %t59, { ptr, i64, i64 } %t61) + store i64 %t62, ptr %a49 + %t63 = load i64, ptr %a49 + %t64 = icmp sge i64 %t63, 0 + br i1 %t64, label %then5828, label %endif5830 +then5828: + %t65 = load ptr, ptr %a1 + %t66 = load ptr, ptr %a1 + %t67 = load %S.ast.Type, ptr %a19 + %t68 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t66, %S.ast.Type %t67) + store { ptr, i64, i64 } { ptr @.str.3760, i64 13, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.3761, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 0 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t78, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t78, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.3762, i64 2, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = load ptr, ptr %a1 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic5831, label %ok5832 +panic5831: + call void @finch_panic(ptr @.str.3763, i64 3054, ptr @.str.3764) + unreachable +ok5832: + %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 16 + %t94 = load ptr, ptr %a1 + %t95 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t96 = load { ptr, i64, i64 }, ptr %t95 + %t97 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t98 = load { ptr, i64, i64 }, ptr %t97 + %t99 = call i64 @finch.gen.findStruct(ptr %t94, { ptr, i64, i64 } %t96, { ptr, i64, i64 } %t98) + %t100 = load { ptr, i64, i64 }, ptr %t93 + %t101 = extractvalue { ptr, i64, i64 } %t100, 1 + %t102 = icmp uge i64 %t99, %t101 + br i1 %t102, label %range5833, label %inrange5834 +range5833: + call void @finch_panic_index(ptr @.str.3765, i64 3054, i64 %t99, i64 %t101) + unreachable +inrange5834: + %t103 = extractvalue { ptr, i64, i64 } %t100, 0 + %t104 = getelementptr inbounds %S.gen.StructDef, ptr %t103, i64 %t99 + %t105 = getelementptr inbounds %S.gen.StructDef, ptr %t104, i32 0, i32 3 + %t106 = load { ptr, i64, i64 }, ptr %t105 + %t107 = extractvalue { ptr, i64, i64 } %t106, 1 + %t108 = icmp uge i64 0, %t107 + br i1 %t108, label %range5835, label %inrange5836 +range5835: + call void @finch_panic_index(ptr @.str.3766, i64 3054, i64 0, i64 %t107) + unreachable +inrange5836: + %t109 = extractvalue { ptr, i64, i64 } %t106, 0 + %t110 = getelementptr inbounds i64, ptr %t109, i64 0 + %t111 = load i64, ptr %t110 + call void @finch_str_from_int(ptr %a112, i64 %t111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t90, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t90, ptr %a117 + call void @finch_str_drop(ptr %a117) + store { ptr, i64, i64 } %t113, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a114 + %t120 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t119) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t120, ptr %a50 + store { ptr, i64, i64 } %t122, ptr %a123 + call void @finch_str_drop(ptr %a123) + br label %endif5830 +endif5830: + br label %endif5827 +endif5827: + %t124 = load ptr, ptr %a1 + %t125 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t124, { ptr, i64, i64 } { ptr @.str.3767, i64 9, i64 0 }) + store { ptr, i64, i64 } %t125, ptr %a126 + store i1 false, ptr %a127 + store i1 false, ptr %a128 + store { ptr, i64, i64 } zeroinitializer, ptr %a129 + store { ptr, i64, i64 } zeroinitializer, ptr %a130 + store { ptr, i64, i64 } zeroinitializer, ptr %a131 + %t132 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3768, i64 4, i64 0 }) + store %S.ast.Type %t132, ptr %a133 + %t134 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = sub i64 %t136, 1 + store i64 %t137, ptr %a138 + %t139 = load i64, ptr %a138 + store i64 0, ptr %a140 + br label %for.cond5837 +for.cond5837: + %t141 = load i64, ptr %a140 + %t142 = icmp slt i64 %t141, %t139 + br i1 %t142, label %for.body5838, label %for.end5840 +for.body5838: + %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t144 = load i64, ptr %a140 + %t145 = add i64 1, %t144 + %t146 = load { ptr, i64, i64 }, ptr %t143 + %t147 = extractvalue { ptr, i64, i64 } %t146, 1 + %t148 = icmp uge i64 %t145, %t147 + br i1 %t148, label %range5841, label %inrange5842 +range5841: + call void @finch_panic_index(ptr @.str.3769, i64 3066, i64 %t145, i64 %t147) + unreachable +inrange5842: + %t149 = extractvalue { ptr, i64, i64 } %t146, 0 + %t150 = getelementptr inbounds %S.ast.Node, ptr %t149, i64 %t145 + %t151 = load %S.ast.Node, ptr %t150 + store %S.ast.Node %t151, ptr %a152 + call void @finch.copy.S_ast_Node(ptr %a153, ptr %a152) + %t154 = load %S.ast.Node, ptr %a153 + store %S.ast.Node %t154, ptr %a155 + %t156 = load i1, ptr %a127 + br i1 %t156, label %then5843, label %endif5845 +then5843: + %t157 = load ptr, ptr %a1 + %t158 = load %S.ast.Node, ptr %a155 + call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } { ptr @.str.3770, i64 72, i64 0 }) + br label %endif5845 +endif5845: + %t159 = load ptr, ptr %a1 + %t160 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t159, { ptr, i64, i64 } { ptr @.str.3771, i64 9, i64 0 }) + store { ptr, i64, i64 } %t160, ptr %a161 + %t162 = load ptr, ptr %a1 + %t163 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t162, { ptr, i64, i64 } { ptr @.str.3772, i64 10, i64 0 }) + store { ptr, i64, i64 } %t163, ptr %a164 + store { ptr, i64, i64 } zeroinitializer, ptr %a165 + store i64 -1, ptr %a166 + %t167 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 + %t168 = load i1, ptr %t167 + br i1 %t168, label %then5846, label %else5847 +then5846: + store i1 true, ptr %a127 + %t169 = load ptr, ptr %a1 + %t170 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.br(ptr %t169, { ptr, i64, i64 } %t170) + br label %endif5848 +else5847: + %t171 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 + %t172 = load { ptr, i64, i64 }, ptr %t171 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 0, %t173 + br i1 %t174, label %range5849, label %inrange5850 +range5849: + call void @finch_panic_index(ptr @.str.3773, i64 3078, i64 0, i64 %t173) + unreachable +inrange5850: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 0 + %t177 = getelementptr inbounds %S.ast.Node, ptr %t176, i32 0, i32 9 + %t178 = load { ptr, i64, i64 }, ptr %t177 + store { ptr, i64, i64 } %t178, ptr %a179 + call void @finch.copy.arr_S_ast_Node(ptr %a180, ptr %a179) + %t181 = load { ptr, i64, i64 }, ptr %a180 + store { ptr, i64, i64 } %t181, ptr %a182 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 + %t184 = load i64, ptr %t183 + store i64 0, ptr %a185 + br label %for.cond5851 +for.cond5851: + %t186 = load i64, ptr %a185 + %t187 = icmp slt i64 %t186, %t184 + br i1 %t187, label %for.body5852, label %for.end5854 +for.body5852: + store { ptr, i64, i64 } { ptr @.str.3774, i64 0, i64 0 }, ptr %a188 + %t189 = load i64, ptr %a49 + %t190 = icmp sge i64 %t189, 0 + br i1 %t190, label %then5855, label %else5856 +then5855: + %t191 = load ptr, ptr %a1 + %t192 = load i64, ptr %a185 + %t193 = load { ptr, i64, i64 }, ptr %a182 + %t194 = extractvalue { ptr, i64, i64 } %t193, 1 + %t195 = icmp uge i64 %t192, %t194 + br i1 %t195, label %range5858, label %inrange5859 +range5858: + call void @finch_panic_index(ptr @.str.3775, i64 3082, i64 %t192, i64 %t194) + unreachable +inrange5859: + %t196 = extractvalue { ptr, i64, i64 } %t193, 0 + %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 %t192 + %t198 = load %S.ast.Node, ptr %t197 + %t199 = load i64, ptr %a49 + %t200 = call %S.gen.SumPat @finch.gen.sumPattern(ptr %t191, %S.ast.Node %t198, i64 %t199) + store %S.gen.SumPat %t200, ptr %a201 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t203 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t204 = load i64, ptr %t203 + call void @finch_str_from_int(ptr %a205, i64 %t204) + %t206 = load { ptr, i64, i64 }, ptr %a205 + store i64 -1, ptr %a207 + %t208 = load i64, ptr %t202 + %t209 = load ptr, ptr %a129 + store i64 0, ptr %a210 + br label %find.cond5860 +find.cond5860: + %t211 = load i64, ptr %a210 + %t212 = icmp slt i64 %t211, %t208 + br i1 %t212, label %find.body5861, label %find.end5864 +find.body5861: + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i64 %t211 + %t214 = load { ptr, i64, i64 }, ptr %t213 + store { ptr, i64, i64 } %t214, ptr %a215 + store { ptr, i64, i64 } %t206, ptr %a216 + %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) + %t218 = icmp ne i32 %t217, 0 + br i1 %t218, label %find.hit5862, label %find.next5863 +find.hit5862: + store i64 %t211, ptr %a207 + br label %find.end5864 +find.next5863: + %t219 = add i64 %t211, 1 + store i64 %t219, ptr %a210 + br label %find.cond5860 +find.end5864: + store { ptr, i64, i64 } %t206, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load i64, ptr %a207 + %t222 = icmp sge i64 %t221, 0 + br i1 %t222, label %then5865, label %endif5867 +then5865: + %t223 = load ptr, ptr %a1 + %t224 = load i64, ptr %a185 + %t225 = load { ptr, i64, i64 }, ptr %a182 + %t226 = extractvalue { ptr, i64, i64 } %t225, 1 + %t227 = icmp uge i64 %t224, %t226 + br i1 %t227, label %range5868, label %inrange5869 +range5868: + call void @finch_panic_index(ptr @.str.3776, i64 3084, i64 %t224, i64 %t226) + unreachable +inrange5869: + %t228 = extractvalue { ptr, i64, i64 } %t225, 0 + %t229 = getelementptr inbounds %S.ast.Node, ptr %t228, i64 %t224 + %t230 = load %S.ast.Node, ptr %t229 + call void @finch.gen.fail(ptr %t223, %S.ast.Node %t230, { ptr, i64, i64 } { ptr @.str.3777, i64 49, i64 0 }) + br label %endif5867 +endif5867: + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t232 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t233 = load i64, ptr %t232 + call void @finch_str_from_int(ptr %a234, i64 %t233) + %t235 = load { ptr, i64, i64 }, ptr %a234 + %t236 = load i64, ptr %t231 + %t237 = add i64 %t236, 1 + call void @finch_arr_reserve(ptr %a129, i64 %t237, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t238 = load ptr, ptr %a129 + %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i64 %t236 + store { ptr, i64, i64 } %t235, ptr %t239 + store i64 %t237, ptr %t231 + %t240 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i32 0, i32 1 + %t242 = load i64, ptr %t241 + %t243 = icmp sgt i64 %t242, 0 + br i1 %t243, label %then5870, label %endif5872 +then5870: + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 + %t245 = load i64, ptr %t244 + %t246 = icmp sgt i64 %t245, 1 + br i1 %t246, label %then5873, label %endif5875 +then5873: + %t247 = load ptr, ptr %a1 + %t248 = load i64, ptr %a185 + %t249 = load { ptr, i64, i64 }, ptr %a182 + %t250 = extractvalue { ptr, i64, i64 } %t249, 1 + %t251 = icmp uge i64 %t248, %t250 + br i1 %t251, label %range5876, label %inrange5877 +range5876: + call void @finch_panic_index(ptr @.str.3778, i64 3089, i64 %t248, i64 %t250) + unreachable +inrange5877: + %t252 = extractvalue { ptr, i64, i64 } %t249, 0 + %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 + %t254 = load %S.ast.Node, ptr %t253 + call void @finch.gen.fail(ptr %t247, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3779, i64 52, i64 0 }) + br label %endif5875 +endif5875: + %t255 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 + %t256 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch.copy.arr_S_ast_Node(ptr %a258, ptr %a257) + %t259 = load { ptr, i64, i64 }, ptr %a258 + %t260 = load { ptr, i64, i64 }, ptr %a165 + store { ptr, i64, i64 } %t259, ptr %a165 + store { ptr, i64, i64 } %t260, ptr %a261 + call void @finch.drop.arr_S_ast_Node(ptr %a261) + %t262 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t263 = load i64, ptr %t262 + store i64 %t263, ptr %a166 + br label %endif5872 +endif5872: + %t264 = load ptr, ptr %a1 + %t265 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.3780, i64 12, i64 0 }, ptr %a267 + store { ptr, i64, i64 } %t265, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + %t269 = load { ptr, i64, i64 }, ptr %a266 + store { ptr, i64, i64 } %t269, ptr %a271 + store { ptr, i64, i64 } { ptr @.str.3781, i64 2, i64 0 }, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t269, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + %t275 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t276 = load i64, ptr %t275 + call void @finch_str_from_int(ptr %a277, i64 %t276) + %t278 = load { ptr, i64, i64 }, ptr %a277 + store { ptr, i64, i64 } %t274, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t274, ptr %a282 + call void @finch_str_drop(ptr %a282) + store { ptr, i64, i64 } %t278, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a279 + %t285 = call { ptr, i64, i64 } @finch.gen.op(ptr %t264, { ptr, i64, i64 } %t284) + store { ptr, i64, i64 } %t284, ptr %a286 + call void @finch_str_drop(ptr %a286) + %t287 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t285, ptr %a188 + store { ptr, i64, i64 } %t287, ptr %a288 + call void @finch_str_drop(ptr %a288) + call void @finch.drop.S_gen_SumPat(ptr %a201) + br label %endif5857 +else5856: + %t289 = load ptr, ptr %a1 + %t290 = load i64, ptr %a185 + %t291 = load { ptr, i64, i64 }, ptr %a182 + %t292 = extractvalue { ptr, i64, i64 } %t291, 1 + %t293 = icmp uge i64 %t290, %t292 + br i1 %t293, label %range5878, label %inrange5879 +range5878: + call void @finch_panic_index(ptr @.str.3782, i64 3096, i64 %t290, i64 %t292) + unreachable +inrange5879: + %t294 = extractvalue { ptr, i64, i64 } %t291, 0 + %t295 = getelementptr inbounds %S.ast.Node, ptr %t294, i64 %t290 + %t296 = load %S.ast.Node, ptr %t295 + %t297 = load %S.ast.Type, ptr %a19 + %t298 = call %S.gen.Val @finch.gen.patternValue(ptr %t289, %S.ast.Node %t296, %S.ast.Type %t297) + store %S.gen.Val %t298, ptr %a299 + %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t301 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store i64 -1, ptr %a303 + %t304 = load i64, ptr %t300 + %t305 = load ptr, ptr %a129 + store i64 0, ptr %a306 + br label %find.cond5880 +find.cond5880: + %t307 = load i64, ptr %a306 + %t308 = icmp slt i64 %t307, %t304 + br i1 %t308, label %find.body5881, label %find.end5884 +find.body5881: + %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t305, i64 %t307 + %t310 = load { ptr, i64, i64 }, ptr %t309 + store { ptr, i64, i64 } %t310, ptr %a311 + store { ptr, i64, i64 } %t302, ptr %a312 + %t313 = call i32 @finch_str_eq(ptr %a311, ptr %a312) + %t314 = icmp ne i32 %t313, 0 + br i1 %t314, label %find.hit5882, label %find.next5883 +find.hit5882: + store i64 %t307, ptr %a303 + br label %find.end5884 +find.next5883: + %t315 = add i64 %t307, 1 + store i64 %t315, ptr %a306 + br label %find.cond5880 +find.end5884: + %t316 = load i64, ptr %a303 + %t317 = icmp sge i64 %t316, 0 + br label %logic.from5885 +logic.from5885: + br i1 %t317, label %logic.rhs5886, label %logic.end5887 +logic.rhs5886: + %t318 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t319 = load { ptr, i64, i64 }, ptr %t318 + store { ptr, i64, i64 } %t319, ptr %a320 + store { ptr, i64, i64 } { ptr @.str.3783, i64 4, i64 0 }, ptr %a321 + %t322 = call i32 @finch_str_eq(ptr %a320, ptr %a321) + %t323 = icmp ne i32 %t322, 0 + br label %logic.rend5888 +logic.rend5888: + br label %logic.end5887 +logic.end5887: + %t324 = phi i1 [ false, %logic.from5885 ], [ %t323, %logic.rend5888 ] + br i1 %t324, label %then5889, label %endif5891 +then5889: + %t325 = load ptr, ptr %a1 + %t326 = load i64, ptr %a185 + %t327 = load { ptr, i64, i64 }, ptr %a182 + %t328 = extractvalue { ptr, i64, i64 } %t327, 1 + %t329 = icmp uge i64 %t326, %t328 + br i1 %t329, label %range5892, label %inrange5893 +range5892: + call void @finch_panic_index(ptr @.str.3784, i64 3098, i64 %t326, i64 %t328) + unreachable +inrange5893: + %t330 = extractvalue { ptr, i64, i64 } %t327, 0 + %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 + %t332 = load %S.ast.Node, ptr %t331 + call void @finch.gen.fail(ptr %t325, %S.ast.Node %t332, { ptr, i64, i64 } { ptr @.str.3785, i64 49, i64 0 }) + br label %endif5891 +endif5891: + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t334 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t335, ptr %a336 + call void @finch_str_copy(ptr %a337, ptr %a336) + %t338 = load { ptr, i64, i64 }, ptr %a337 + %t339 = load i64, ptr %t333 + %t340 = add i64 %t339, 1 + call void @finch_arr_reserve(ptr %a129, i64 %t340, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t341 = load ptr, ptr %a129 + %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 %t339 + store { ptr, i64, i64 } %t338, ptr %t342 + store i64 %t340, ptr %t333 + %t343 = load ptr, ptr %a1 + %t344 = load %S.gen.Val, ptr %a13 + %t345 = load %S.gen.Val, ptr %a299 + %t346 = load i64, ptr %a185 + %t347 = load { ptr, i64, i64 }, ptr %a182 + %t348 = extractvalue { ptr, i64, i64 } %t347, 1 + %t349 = icmp uge i64 %t346, %t348 + br i1 %t349, label %range5894, label %inrange5895 +range5894: + call void @finch_panic_index(ptr @.str.3787, i64 3101, i64 %t346, i64 %t348) + unreachable +inrange5895: + %t350 = extractvalue { ptr, i64, i64 } %t347, 0 + %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 %t346 + %t352 = load %S.ast.Node, ptr %t351 + %t353 = call %S.gen.Val @finch.gen.compare(ptr %t343, { ptr, i64, i64 } { ptr @.str.3786, i64 2, i64 0 }, %S.gen.Val %t344, %S.gen.Val %t345, %S.ast.Node %t352) + %t354 = extractvalue %S.gen.Val %t353, 0 + store { ptr, i64, i64 } %t354, ptr %a355 + call void @finch_str_copy(ptr %a356, ptr %a355) + %t357 = load { ptr, i64, i64 }, ptr %a356 + store %S.gen.Val %t353, ptr %a358 + call void @finch.drop.S_gen_Val(ptr %a358) + %t359 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t357, ptr %a188 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + call void @finch.drop.S_gen_Val(ptr %a299) + br label %endif5857 +endif5857: + %t361 = load i64, ptr %a185 + %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 + %t363 = load i64, ptr %t362 + %t364 = sub i64 %t363, 1 + %t365 = icmp eq i64 %t361, %t364 + br i1 %t365, label %then5896, label %else5897 +then5896: + %t366 = load ptr, ptr %a1 + %t367 = load { ptr, i64, i64 }, ptr %a188 + %t368 = load { ptr, i64, i64 }, ptr %a161 + %t369 = load { ptr, i64, i64 }, ptr %a164 + call void @finch.gen.condBr(ptr %t366, { ptr, i64, i64 } %t367, { ptr, i64, i64 } %t368, { ptr, i64, i64 } %t369) + br label %endif5898 +else5897: + %t370 = load ptr, ptr %a1 + %t371 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t370, { ptr, i64, i64 } { ptr @.str.3788, i64 8, i64 0 }) + store { ptr, i64, i64 } %t371, ptr %a372 + %t373 = load ptr, ptr %a1 + %t374 = load { ptr, i64, i64 }, ptr %a188 + %t375 = load { ptr, i64, i64 }, ptr %a161 + %t376 = load { ptr, i64, i64 }, ptr %a372 + call void @finch.gen.condBr(ptr %t373, { ptr, i64, i64 } %t374, { ptr, i64, i64 } %t375, { ptr, i64, i64 } %t376) + %t377 = load ptr, ptr %a1 + %t378 = load { ptr, i64, i64 }, ptr %a372 + call void @finch.gen.label(ptr %t377, { ptr, i64, i64 } %t378) + call void @finch_str_drop(ptr %a372) + br label %endif5898 +endif5898: + call void @finch_str_drop(ptr %a188) + br label %for.step5853 +for.step5853: + %t379 = load i64, ptr %a185 + %t380 = add i64 %t379, 1 + store i64 %t380, ptr %a185 + br label %for.cond5851 +for.end5854: + call void @finch.drop.arr_S_ast_Node(ptr %a182) + br label %endif5848 +endif5848: + %t381 = load ptr, ptr %a1 + %t382 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) + %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 + %t384 = load i64, ptr %t383 + %t385 = icmp sgt i64 %t384, 0 + store i1 %t385, ptr %a386 + %t387 = load i1, ptr %a386 + br i1 %t387, label %then5899, label %endif5901 +then5899: + %t388 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t388) + %t389 = load ptr, ptr %a1 + %t390 = icmp eq ptr %t389, null + br i1 %t390, label %panic5902, label %ok5903 +panic5902: + call void @finch_panic(ptr @.str.3789, i64 3116, ptr @.str.3790) + unreachable +ok5903: + %t391 = getelementptr inbounds %S.gen.Gen, ptr %t389, i32 0, i32 16 + %t392 = load ptr, ptr %a1 + %t393 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t394 = load { ptr, i64, i64 }, ptr %t393 + %t395 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t396 = load { ptr, i64, i64 }, ptr %t395 + %t397 = call i64 @finch.gen.findStruct(ptr %t392, { ptr, i64, i64 } %t394, { ptr, i64, i64 } %t396) + %t398 = load { ptr, i64, i64 }, ptr %t391 + %t399 = extractvalue { ptr, i64, i64 } %t398, 1 + %t400 = icmp uge i64 %t397, %t399 + br i1 %t400, label %range5904, label %inrange5905 +range5904: + call void @finch_panic_index(ptr @.str.3791, i64 3116, i64 %t397, i64 %t399) + unreachable +inrange5905: + %t401 = extractvalue { ptr, i64, i64 } %t398, 0 + %t402 = getelementptr inbounds %S.gen.StructDef, ptr %t401, i64 %t397 + %t403 = load %S.gen.StructDef, ptr %t402 + store %S.gen.StructDef %t403, ptr %a404 + call void @finch.copy.S_gen_StructDef(ptr %a405, ptr %a404) + %t406 = load %S.gen.StructDef, ptr %a405 + store %S.gen.StructDef %t406, ptr %a407 + %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 + %t409 = load i64, ptr %t408 + store i64 0, ptr %a410 + br label %for.cond5906 +for.cond5906: + %t411 = load i64, ptr %a410 + %t412 = icmp slt i64 %t411, %t409 + br i1 %t412, label %for.body5907, label %for.end5909 +for.body5907: + %t413 = load i64, ptr %a410 + %t414 = load { ptr, i64, i64 }, ptr %a165 + %t415 = extractvalue { ptr, i64, i64 } %t414, 1 + %t416 = icmp uge i64 %t413, %t415 + br i1 %t416, label %range5910, label %inrange5911 +range5910: + call void @finch_panic_index(ptr @.str.3792, i64 3118, i64 %t413, i64 %t415) + unreachable +inrange5911: + %t417 = extractvalue { ptr, i64, i64 } %t414, 0 + %t418 = getelementptr inbounds %S.ast.Node, ptr %t417, i64 %t413 + %t419 = getelementptr inbounds %S.ast.Node, ptr %t418, i32 0, i32 1 + %t420 = load { ptr, i64, i64 }, ptr %t419 + store { ptr, i64, i64 } %t420, ptr %a421 + store { ptr, i64, i64 } { ptr @.str.3793, i64 1, i64 0 }, ptr %a422 + %t423 = call i32 @finch_str_eq(ptr %a421, ptr %a422) + %t424 = icmp ne i32 %t423, 0 + br i1 %t424, label %then5912, label %endif5914 +then5912: + br label %for.step5908 +endif5914: + %t425 = load ptr, ptr %a1 + %t426 = icmp eq ptr %t425, null + br i1 %t426, label %panic5915, label %ok5916 +panic5915: + call void @finch_panic(ptr @.str.3794, i64 3121, ptr @.str.3795) + unreachable +ok5916: + %t427 = getelementptr inbounds %S.gen.Gen, ptr %t425, i32 0, i32 22 + %t428 = load i64, ptr %a49 + %t429 = load { ptr, i64, i64 }, ptr %t427 + %t430 = extractvalue { ptr, i64, i64 } %t429, 1 + %t431 = icmp uge i64 %t428, %t430 + br i1 %t431, label %range5917, label %inrange5918 +range5917: + call void @finch_panic_index(ptr @.str.3796, i64 3121, i64 %t428, i64 %t430) + unreachable +inrange5918: + %t432 = extractvalue { ptr, i64, i64 } %t429, 0 + %t433 = getelementptr inbounds %S.gen.SumDef, ptr %t432, i64 %t428 + %t434 = getelementptr inbounds %S.gen.SumDef, ptr %t433, i32 0, i32 4 + %t435 = load i64, ptr %a166 + %t436 = load { ptr, i64, i64 }, ptr %t434 + %t437 = extractvalue { ptr, i64, i64 } %t436, 1 + %t438 = icmp uge i64 %t435, %t437 + br i1 %t438, label %range5919, label %inrange5920 +range5919: + call void @finch_panic_index(ptr @.str.3797, i64 3121, i64 %t435, i64 %t437) + unreachable +inrange5920: + %t439 = extractvalue { ptr, i64, i64 } %t436, 0 + %t440 = getelementptr inbounds i64, ptr %t439, i64 %t435 + %t441 = load i64, ptr %t440 + %t442 = load i64, ptr %a410 + %t443 = add i64 %t441, %t442 + store i64 %t443, ptr %a444 + %t445 = getelementptr inbounds %S.gen.StructDef, ptr %a407, i32 0, i32 12 + %t446 = load i64, ptr %a444 + %t447 = load { ptr, i64, i64 }, ptr %t445 + %t448 = extractvalue { ptr, i64, i64 } %t447, 1 + %t449 = icmp uge i64 %t446, %t448 + br i1 %t449, label %range5921, label %inrange5922 +range5921: + call void @finch_panic_index(ptr @.str.3798, i64 3122, i64 %t446, i64 %t448) + unreachable +inrange5922: + %t450 = extractvalue { ptr, i64, i64 } %t447, 0 + %t451 = getelementptr inbounds %S.ast.Type, ptr %t450, i64 %t446 + %t452 = load %S.ast.Type, ptr %t451 + store %S.ast.Type %t452, ptr %a453 + call void @finch.copy.S_ast_Type(ptr %a454, ptr %a453) + %t455 = load %S.ast.Type, ptr %a454 + store %S.ast.Type %t455, ptr %a456 + %t457 = load ptr, ptr %a1 + %t458 = load ptr, ptr %a1 + %t459 = load %S.ast.Type, ptr %a19 + %t460 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t458, %S.ast.Type %t459) + store { ptr, i64, i64 } { ptr @.str.3799, i64 13, i64 0 }, ptr %a462 + store { ptr, i64, i64 } %t460, ptr %a463 + call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) + store { ptr, i64, i64 } %t460, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } %t465, ptr %a467 + store { ptr, i64, i64 } { ptr @.str.3800, i64 1, i64 0 }, ptr %a468 + call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) + store { ptr, i64, i64 } %t465, ptr %a469 + call void @finch_str_drop(ptr %a469) + %t470 = load { ptr, i64, i64 }, ptr %a466 + %t471 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 0 + %t472 = load { ptr, i64, i64 }, ptr %t471 + store { ptr, i64, i64 } %t470, ptr %a474 + store { ptr, i64, i64 } %t472, ptr %a475 + call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) + store { ptr, i64, i64 } %t470, ptr %a476 + call void @finch_str_drop(ptr %a476) + %t477 = load { ptr, i64, i64 }, ptr %a473 + store { ptr, i64, i64 } %t477, ptr %a479 + store { ptr, i64, i64 } { ptr @.str.3801, i64 2, i64 0 }, ptr %a480 + call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480) + store { ptr, i64, i64 } %t477, ptr %a481 + call void @finch_str_drop(ptr %a481) + %t482 = load { ptr, i64, i64 }, ptr %a478 + %t483 = getelementptr inbounds %S.gen.StructDef, ptr %a407, i32 0, i32 3 + %t484 = load i64, ptr %a444 + %t485 = load { ptr, i64, i64 }, ptr %t483 + %t486 = extractvalue { ptr, i64, i64 } %t485, 1 + %t487 = icmp uge i64 %t484, %t486 + br i1 %t487, label %range5923, label %inrange5924 +range5923: + call void @finch_panic_index(ptr @.str.3802, i64 3123, i64 %t484, i64 %t486) + unreachable +inrange5924: + %t488 = extractvalue { ptr, i64, i64 } %t485, 0 + %t489 = getelementptr inbounds i64, ptr %t488, i64 %t484 + %t490 = load i64, ptr %t489 + call void @finch_str_from_int(ptr %a491, i64 %t490) + %t492 = load { ptr, i64, i64 }, ptr %a491 + store { ptr, i64, i64 } %t482, ptr %a494 + store { ptr, i64, i64 } %t492, ptr %a495 + call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) + store { ptr, i64, i64 } %t482, ptr %a496 + call void @finch_str_drop(ptr %a496) + store { ptr, i64, i64 } %t492, ptr %a497 + call void @finch_str_drop(ptr %a497) + %t498 = load { ptr, i64, i64 }, ptr %a493 + %t499 = call { ptr, i64, i64 } @finch.gen.op(ptr %t457, { ptr, i64, i64 } %t498) + store { ptr, i64, i64 } %t498, ptr %a500 + call void @finch_str_drop(ptr %a500) + store { ptr, i64, i64 } %t499, ptr %a501 + %t502 = load ptr, ptr %a1 + %t503 = load i64, ptr %a410 + %t504 = load { ptr, i64, i64 }, ptr %a165 + %t505 = extractvalue { ptr, i64, i64 } %t504, 1 + %t506 = icmp uge i64 %t503, %t505 + br i1 %t506, label %range5925, label %inrange5926 +range5925: + call void @finch_panic_index(ptr @.str.3803, i64 3124, i64 %t503, i64 %t505) + unreachable +inrange5926: + %t507 = extractvalue { ptr, i64, i64 } %t504, 0 + %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 %t503 + %t509 = load %S.ast.Node, ptr %t508 + %t510 = load i64, ptr %a410 + %t511 = load { ptr, i64, i64 }, ptr %a165 + %t512 = extractvalue { ptr, i64, i64 } %t511, 1 + %t513 = icmp uge i64 %t510, %t512 + br i1 %t513, label %range5927, label %inrange5928 +range5927: + call void @finch_panic_index(ptr @.str.3804, i64 3124, i64 %t510, i64 %t512) + unreachable +inrange5928: + %t514 = extractvalue { ptr, i64, i64 } %t511, 0 + %t515 = getelementptr inbounds %S.ast.Node, ptr %t514, i64 %t510 + %t516 = getelementptr inbounds %S.ast.Node, ptr %t515, i32 0, i32 1 + %t517 = load { ptr, i64, i64 }, ptr %t516 + %t518 = load %S.ast.Type, ptr %a456 + %t519 = load ptr, ptr %a1 + %t520 = load { ptr, i64, i64 }, ptr %a501 + %t521 = load %S.ast.Type, ptr %a456 + %t522 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t519, { ptr, i64, i64 } %t520, %S.ast.Type %t521) + %t523 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t502, %S.ast.Node %t509, { ptr, i64, i64 } %t517, %S.ast.Type %t518, { ptr, i64, i64 } %t522, i1 true, i1 true) + store { ptr, i64, i64 } %t522, ptr %a524 + call void @finch_str_drop(ptr %a524) + store { ptr, i64, i64 } %t523, ptr %a525 + call void @finch_str_drop(ptr %a525) + call void @finch_str_drop(ptr %a501) + call void @finch.drop.S_ast_Type(ptr %a456) + br label %for.step5908 +for.step5908: + %t526 = load i64, ptr %a410 + %t527 = add i64 %t526, 1 + store i64 %t527, ptr %a410 + br label %for.cond5906 +for.end5909: + call void @finch.drop.S_gen_StructDef(ptr %a407) + br label %endif5901 +endif5901: + %t528 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 + %t529 = load { ptr, i64, i64 }, ptr %t528 + %t530 = extractvalue { ptr, i64, i64 } %t529, 1 + %t531 = icmp uge i64 1, %t530 + br i1 %t531, label %range5929, label %inrange5930 +range5929: + call void @finch_panic_index(ptr @.str.3805, i64 3127, i64 1, i64 %t530) + unreachable +inrange5930: + %t532 = extractvalue { ptr, i64, i64 } %t529, 0 + %t533 = getelementptr inbounds %S.ast.Node, ptr %t532, i64 1 + %t534 = load %S.ast.Node, ptr %t533 + store %S.ast.Node %t534, ptr %a535 + call void @finch.copy.S_ast_Node(ptr %a536, ptr %a535) + %t537 = load %S.ast.Node, ptr %a536 + store %S.ast.Node %t537, ptr %a538 + %t539 = load i1, ptr %a3 + br i1 %t539, label %then5931, label %else5932 +then5931: + %t540 = load ptr, ptr %a1 + %t541 = load %S.ast.Node, ptr %a538 + %t542 = call %S.gen.Val @finch.gen.expr(ptr %t540, %S.ast.Node %t541) + store %S.gen.Val %t542, ptr %a543 + %t544 = load i64, ptr %a140 + %t545 = icmp eq i64 %t544, 0 + br label %logic.from5934 +logic.from5934: + br i1 %t545, label %logic.end5936, label %logic.rhs5935 +logic.rhs5935: + %t546 = getelementptr inbounds %S.ast.Type, ptr %a133, i32 0, i32 0 + %t547 = load { ptr, i64, i64 }, ptr %t546 + store { ptr, i64, i64 } %t547, ptr %a548 + store { ptr, i64, i64 } { ptr @.str.3806, i64 4, i64 0 }, ptr %a549 + %t550 = call i32 @finch_str_eq(ptr %a548, ptr %a549) + %t551 = icmp ne i32 %t550, 0 + br label %logic.rend5937 +logic.rend5937: + br label %logic.end5936 +logic.end5936: + %t552 = phi i1 [ true, %logic.from5934 ], [ %t551, %logic.rend5937 ] + br i1 %t552, label %then5938, label %endif5940 +then5938: + %t553 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 + %t554 = getelementptr inbounds %S.ast.Type, ptr %t553, i32 0, i32 0 + %t555 = load { ptr, i64, i64 }, ptr %t554 + store { ptr, i64, i64 } %t555, ptr %a556 + store { ptr, i64, i64 } { ptr @.str.3807, i64 4, i64 0 }, ptr %a557 + %t558 = call i32 @finch_str_eq(ptr %a556, ptr %a557) + %t559 = icmp ne i32 %t558, 0 + br label %logic.from5941 +logic.from5941: + br i1 %t559, label %logic.end5943, label %logic.rhs5942 +logic.rhs5942: + %t560 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 + %t561 = getelementptr inbounds %S.ast.Type, ptr %t560, i32 0, i32 0 + %t562 = load { ptr, i64, i64 }, ptr %t561 + store { ptr, i64, i64 } %t562, ptr %a563 + store { ptr, i64, i64 } { ptr @.str.3808, i64 4, i64 0 }, ptr %a564 + %t565 = call i32 @finch_str_eq(ptr %a563, ptr %a564) + %t566 = icmp ne i32 %t565, 0 + br label %logic.rend5944 +logic.rend5944: + br label %logic.end5943 +logic.end5943: + %t567 = phi i1 [ true, %logic.from5941 ], [ %t566, %logic.rend5944 ] + br i1 %t567, label %then5945, label %endif5947 +then5945: + %t568 = load ptr, ptr %a1 + %t569 = load %S.ast.Node, ptr %a538 + call void @finch.gen.fail(ptr %t568, %S.ast.Node %t569, { ptr, i64, i64 } { ptr @.str.3809, i64 52, i64 0 }) + br label %endif5947 +endif5947: + %t570 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 + %t571 = load %S.ast.Type, ptr %t570 + store %S.ast.Type %t571, ptr %a572 + call void @finch.copy.S_ast_Type(ptr %a573, ptr %a572) + %t574 = load %S.ast.Type, ptr %a573 + %t575 = load %S.ast.Type, ptr %a133 + store %S.ast.Type %t574, ptr %a133 + store %S.ast.Type %t575, ptr %a576 + call void @finch.drop.S_ast_Type(ptr %a576) + br label %endif5940 +endif5940: + %t577 = load ptr, ptr %a1 + %t578 = load %S.gen.Val, ptr %a543 + %t579 = load %S.ast.Type, ptr %a133 + %t580 = load %S.ast.Node, ptr %a538 + %t581 = call %S.gen.Val @finch.gen.coerce(ptr %t577, %S.gen.Val %t578, %S.ast.Type %t579, %S.ast.Node %t580, { ptr, i64, i64 } { ptr @.str.3810, i64 57, i64 0 }) + %t582 = load %S.gen.Val, ptr %a543 + store %S.gen.Val %t581, ptr %a543 + store %S.gen.Val %t582, ptr %a583 + call void @finch.drop.S_gen_Val(ptr %a583) + %t584 = load ptr, ptr %a1 + %t585 = load %S.gen.Val, ptr %a543 + %t586 = call { ptr, i64, i64 } @finch.gen.own(ptr %t584, %S.gen.Val %t585) + store { ptr, i64, i64 } %t586, ptr %a587 + %t588 = load i1, ptr %a386 + br i1 %t588, label %then5948, label %endif5950 +then5948: + %t589 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t589) + br label %endif5950 +endif5950: + %t590 = load ptr, ptr %a1 + %t591 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t590, { ptr, i64, i64 } { ptr @.str.3811, i64 10, i64 0 }) + store { ptr, i64, i64 } %t591, ptr %a592 + %t593 = load ptr, ptr %a1 + %t594 = load { ptr, i64, i64 }, ptr %a592 + call void @finch.gen.br(ptr %t593, { ptr, i64, i64 } %t594) + %t595 = load ptr, ptr %a1 + %t596 = load { ptr, i64, i64 }, ptr %a592 + call void @finch.gen.label(ptr %t595, { ptr, i64, i64 } %t596) + %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %a130, i32 0, i32 1 + %t598 = load { ptr, i64, i64 }, ptr %a587 + store { ptr, i64, i64 } %t598, ptr %a599 + call void @finch_str_copy(ptr %a600, ptr %a599) + %t601 = load { ptr, i64, i64 }, ptr %a600 + %t602 = load i64, ptr %t597 + %t603 = add i64 %t602, 1 + call void @finch_arr_reserve(ptr %a130, i64 %t603, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t604 = load ptr, ptr %a130 + %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i64 %t602 + store { ptr, i64, i64 } %t601, ptr %t605 + store i64 %t603, ptr %t597 + %t606 = getelementptr inbounds { ptr, i64, i64 }, ptr %a131, i32 0, i32 1 + %t607 = load { ptr, i64, i64 }, ptr %a592 + store { ptr, i64, i64 } %t607, ptr %a608 + call void @finch_str_copy(ptr %a609, ptr %a608) + %t610 = load { ptr, i64, i64 }, ptr %a609 + %t611 = load i64, ptr %t606 + %t612 = add i64 %t611, 1 + call void @finch_arr_reserve(ptr %a131, i64 %t612, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t613 = load ptr, ptr %a131 + %t614 = getelementptr inbounds { ptr, i64, i64 }, ptr %t613, i64 %t611 + store { ptr, i64, i64 } %t610, ptr %t614 + store i64 %t612, ptr %t606 + %t615 = load ptr, ptr %a1 + %t616 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.br(ptr %t615, { ptr, i64, i64 } %t616) + store i1 true, ptr %a128 + call void @finch_str_drop(ptr %a592) + call void @finch_str_drop(ptr %a587) + call void @finch.drop.S_gen_Val(ptr %a543) + br label %endif5933 +else5932: + %t617 = getelementptr inbounds %S.ast.Node, ptr %a538, i32 0, i32 0 + %t618 = load { ptr, i64, i64 }, ptr %t617 + store { ptr, i64, i64 } %t618, ptr %a619 + store { ptr, i64, i64 } { ptr @.str.3812, i64 5, i64 0 }, ptr %a620 + %t621 = call i32 @finch_str_eq(ptr %a619, ptr %a620) + %t622 = icmp ne i32 %t621, 0 + br i1 %t622, label %then5951, label %else5952 +then5951: + %t623 = load ptr, ptr %a1 + %t624 = load %S.ast.Node, ptr %a538 + call void @finch.gen.block(ptr %t623, %S.ast.Node %t624, i1 true) + br label %endif5953 +else5952: + %t625 = load ptr, ptr %a1 + %t626 = load %S.ast.Node, ptr %a538 + call void @finch.gen.stmt(ptr %t625, %S.ast.Node %t626) + br label %endif5953 +endif5953: + %t627 = load ptr, ptr %a1 + %t628 = icmp eq ptr %t627, null + br i1 %t628, label %panic5954, label %ok5955 +panic5954: + call void @finch_panic(ptr @.str.3813, i64 3154, ptr @.str.3814) + unreachable +ok5955: + %t629 = getelementptr inbounds %S.gen.Gen, ptr %t627, i32 0, i32 9 + %t630 = load i1, ptr %t629 + %t631 = xor i1 %t630, true + br i1 %t631, label %then5956, label %endif5958 +then5956: + store i1 true, ptr %a128 + br label %endif5958 +endif5958: + %t632 = load i1, ptr %a386 + br i1 %t632, label %then5959, label %endif5961 +then5959: + %t633 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t633) + br label %endif5961 +endif5961: + %t634 = load ptr, ptr %a1 + %t635 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.br(ptr %t634, { ptr, i64, i64 } %t635) + br label %endif5933 +endif5933: + %t636 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 + %t637 = load i1, ptr %t636 + %t638 = xor i1 %t637, true + br i1 %t638, label %then5962, label %endif5964 +then5962: + %t639 = load ptr, ptr %a1 + %t640 = load { ptr, i64, i64 }, ptr %a164 + call void @finch.gen.label(ptr %t639, { ptr, i64, i64 } %t640) + br label %endif5964 +endif5964: + call void @finch.drop.S_ast_Node(ptr %a538) + call void @finch.drop.arr_S_ast_Node(ptr %a165) + call void @finch_str_drop(ptr %a164) + call void @finch_str_drop(ptr %a161) + call void @finch.drop.S_ast_Node(ptr %a155) + br label %for.step5839 +for.step5839: + %t641 = load i64, ptr %a140 + %t642 = add i64 %t641, 1 + store i64 %t642, ptr %a140 + br label %for.cond5837 +for.end5840: + %t643 = load i1, ptr %a127 + %t644 = xor i1 %t643, true + br i1 %t644, label %then5965, label %endif5967 +then5965: + %t645 = load i64, ptr %a49 + %t646 = icmp sge i64 %t645, 0 + br i1 %t646, label %then5968, label %else5969 +then5968: + store { ptr, i64, i64 } zeroinitializer, ptr %a647 + %t648 = load ptr, ptr %a1 + %t649 = icmp eq ptr %t648, null + br i1 %t649, label %panic5971, label %ok5972 +panic5971: + call void @finch_panic(ptr @.str.3815, i64 3169, ptr @.str.3816) + unreachable +ok5972: + %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 22 + %t651 = load i64, ptr %a49 + %t652 = load { ptr, i64, i64 }, ptr %t650 + %t653 = extractvalue { ptr, i64, i64 } %t652, 1 + %t654 = icmp uge i64 %t651, %t653 + br i1 %t654, label %range5973, label %inrange5974 +range5973: + call void @finch_panic_index(ptr @.str.3817, i64 3169, i64 %t651, i64 %t653) + unreachable +inrange5974: + %t655 = extractvalue { ptr, i64, i64 } %t652, 0 + %t656 = getelementptr inbounds %S.gen.SumDef, ptr %t655, i64 %t651 + %t657 = getelementptr inbounds %S.gen.SumDef, ptr %t656, i32 0, i32 2 + %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i32 0, i32 1 + %t659 = load i64, ptr %t658 + store i64 0, ptr %a660 + br label %for.cond5975 +for.cond5975: + %t661 = load i64, ptr %a660 + %t662 = icmp slt i64 %t661, %t659 + br i1 %t662, label %for.body5976, label %for.end5978 +for.body5976: + %t663 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t664 = load i64, ptr %a660 + call void @finch_str_from_int(ptr %a665, i64 %t664) + %t666 = load { ptr, i64, i64 }, ptr %a665 + store i64 -1, ptr %a667 + %t668 = load i64, ptr %t663 + %t669 = load ptr, ptr %a129 + store i64 0, ptr %a670 + br label %find.cond5979 +find.cond5979: + %t671 = load i64, ptr %a670 + %t672 = icmp slt i64 %t671, %t668 + br i1 %t672, label %find.body5980, label %find.end5983 +find.body5980: + %t673 = getelementptr inbounds { ptr, i64, i64 }, ptr %t669, i64 %t671 + %t674 = load { ptr, i64, i64 }, ptr %t673 + store { ptr, i64, i64 } %t674, ptr %a675 + store { ptr, i64, i64 } %t666, ptr %a676 + %t677 = call i32 @finch_str_eq(ptr %a675, ptr %a676) + %t678 = icmp ne i32 %t677, 0 + br i1 %t678, label %find.hit5981, label %find.next5982 +find.hit5981: + store i64 %t671, ptr %a667 + br label %find.end5983 +find.next5982: + %t679 = add i64 %t671, 1 + store i64 %t679, ptr %a670 + br label %find.cond5979 +find.end5983: + store { ptr, i64, i64 } %t666, ptr %a680 + call void @finch_str_drop(ptr %a680) + %t681 = load i64, ptr %a667 + %t682 = icmp sge i64 %t681, 0 + %t683 = xor i1 %t682, true + br i1 %t683, label %then5984, label %endif5986 +then5984: + %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 + %t685 = load ptr, ptr %a1 + %t686 = icmp eq ptr %t685, null + br i1 %t686, label %panic5987, label %ok5988 +panic5987: + call void @finch_panic(ptr @.str.3818, i64 3171, ptr @.str.3819) + unreachable +ok5988: + %t687 = getelementptr inbounds %S.gen.Gen, ptr %t685, i32 0, i32 22 + %t688 = load i64, ptr %a49 + %t689 = load { ptr, i64, i64 }, ptr %t687 + %t690 = extractvalue { ptr, i64, i64 } %t689, 1 + %t691 = icmp uge i64 %t688, %t690 + br i1 %t691, label %range5989, label %inrange5990 +range5989: + call void @finch_panic_index(ptr @.str.3820, i64 3171, i64 %t688, i64 %t690) + unreachable +inrange5990: + %t692 = extractvalue { ptr, i64, i64 } %t689, 0 + %t693 = getelementptr inbounds %S.gen.SumDef, ptr %t692, i64 %t688 + %t694 = getelementptr inbounds %S.gen.SumDef, ptr %t693, i32 0, i32 2 + %t695 = load i64, ptr %a660 + %t696 = load { ptr, i64, i64 }, ptr %t694 + %t697 = extractvalue { ptr, i64, i64 } %t696, 1 + %t698 = icmp uge i64 %t695, %t697 + br i1 %t698, label %range5991, label %inrange5992 +range5991: + call void @finch_panic_index(ptr @.str.3821, i64 3171, i64 %t695, i64 %t697) + unreachable +inrange5992: + %t699 = extractvalue { ptr, i64, i64 } %t696, 0 + %t700 = getelementptr inbounds { ptr, i64, i64 }, ptr %t699, i64 %t695 + %t701 = load { ptr, i64, i64 }, ptr %t700 + store { ptr, i64, i64 } %t701, ptr %a702 + call void @finch_str_copy(ptr %a703, ptr %a702) + %t704 = load { ptr, i64, i64 }, ptr %a703 + %t705 = load i64, ptr %t684 + %t706 = add i64 %t705, 1 + call void @finch_arr_reserve(ptr %a647, i64 %t706, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t707 = load ptr, ptr %a647 + %t708 = getelementptr inbounds { ptr, i64, i64 }, ptr %t707, i64 %t705 + store { ptr, i64, i64 } %t704, ptr %t708 + store i64 %t706, ptr %t684 + br label %endif5986 +endif5986: + br label %for.step5977 +for.step5977: + %t709 = load i64, ptr %a660 + %t710 = add i64 %t709, 1 + store i64 %t710, ptr %a660 + br label %for.cond5975 +for.end5978: + %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 + %t712 = load i64, ptr %t711 + %t713 = icmp sgt i64 %t712, 0 + br i1 %t713, label %then5993, label %endif5995 +then5993: + %t714 = load ptr, ptr %a1 + %t715 = load %S.ast.Node, ptr %a2 + %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3823, i64 2, i64 0 }, ptr %a717 + call void @finch_str_join(ptr %a718, ptr %a647, ptr %a717) + %t719 = load { ptr, i64, i64 }, ptr %a718 + store { ptr, i64, i64 } { ptr @.str.3822, i64 26, i64 0 }, ptr %a721 + store { ptr, i64, i64 } %t719, ptr %a722 + call void @finch_str_concat(ptr %a720, ptr %a721, ptr %a722) + store { ptr, i64, i64 } %t719, ptr %a723 + call void @finch_str_drop(ptr %a723) + %t724 = load { ptr, i64, i64 }, ptr %a720 + store { ptr, i64, i64 } %t724, ptr %a726 + store { ptr, i64, i64 } { ptr @.str.3824, i64 29, i64 0 }, ptr %a727 + call void @finch_str_concat(ptr %a725, ptr %a726, ptr %a727) + store { ptr, i64, i64 } %t724, ptr %a728 + call void @finch_str_drop(ptr %a728) + %t729 = load { ptr, i64, i64 }, ptr %a725 + call void @finch.gen.fail(ptr %t714, %S.ast.Node %t715, { ptr, i64, i64 } %t729) + store { ptr, i64, i64 } %t729, ptr %a730 + call void @finch_str_drop(ptr %a730) + br label %endif5995 +endif5995: + call void @finch.drop.arr_str(ptr %a647) + br label %endif5970 +else5969: + %t731 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t732 = load { ptr, i64, i64 }, ptr %t731 + store { ptr, i64, i64 } %t732, ptr %a733 + store { ptr, i64, i64 } { ptr @.str.3825, i64 4, i64 0 }, ptr %a734 + %t735 = call i32 @finch_str_eq(ptr %a733, ptr %a734) + %t736 = icmp ne i32 %t735, 0 + br i1 %t736, label %then5996, label %else5997 +then5996: + %t737 = load ptr, ptr %a1 + %t738 = icmp eq ptr %t737, null + br i1 %t738, label %panic5999, label %ok6000 +panic5999: + call void @finch_panic(ptr @.str.3826, i64 3178, ptr @.str.3827) + unreachable +ok6000: + %t739 = getelementptr inbounds %S.gen.Gen, ptr %t737, i32 0, i32 21 + %t740 = load ptr, ptr %a1 + %t741 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t742 = load { ptr, i64, i64 }, ptr %t741 + %t743 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t744 = load { ptr, i64, i64 }, ptr %t743 + %t745 = call i64 @finch.gen.findEnum(ptr %t740, { ptr, i64, i64 } %t742, { ptr, i64, i64 } %t744) + %t746 = load { ptr, i64, i64 }, ptr %t739 + %t747 = extractvalue { ptr, i64, i64 } %t746, 1 + %t748 = icmp uge i64 %t745, %t747 + br i1 %t748, label %range6001, label %inrange6002 +range6001: + call void @finch_panic_index(ptr @.str.3828, i64 3178, i64 %t745, i64 %t747) + unreachable +inrange6002: + %t749 = extractvalue { ptr, i64, i64 } %t746, 0 + %t750 = getelementptr inbounds %S.gen.EnumDef, ptr %t749, i64 %t745 + %t751 = load %S.gen.EnumDef, ptr %t750 + store %S.gen.EnumDef %t751, ptr %a752 + call void @finch.copy.S_gen_EnumDef(ptr %a753, ptr %a752) + %t754 = load %S.gen.EnumDef, ptr %a753 + store %S.gen.EnumDef %t754, ptr %a755 + store { ptr, i64, i64 } zeroinitializer, ptr %a756 + %t757 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 + %t758 = getelementptr inbounds { ptr, i64, i64 }, ptr %t757, i32 0, i32 1 + %t759 = load i64, ptr %t758 + store i64 0, ptr %a760 + br label %for.cond6003 +for.cond6003: + %t761 = load i64, ptr %a760 + %t762 = icmp slt i64 %t761, %t759 + br i1 %t762, label %for.body6004, label %for.end6006 +for.body6004: + %t763 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t764 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 3 + %t765 = load i64, ptr %a760 + %t766 = load { ptr, i64, i64 }, ptr %t764 + %t767 = extractvalue { ptr, i64, i64 } %t766, 1 + %t768 = icmp uge i64 %t765, %t767 + br i1 %t768, label %range6007, label %inrange6008 +range6007: + call void @finch_panic_index(ptr @.str.3829, i64 3181, i64 %t765, i64 %t767) + unreachable +inrange6008: + %t769 = extractvalue { ptr, i64, i64 } %t766, 0 + %t770 = getelementptr inbounds i64, ptr %t769, i64 %t765 + %t771 = load i64, ptr %t770 + call void @finch_str_from_int(ptr %a772, i64 %t771) + %t773 = load { ptr, i64, i64 }, ptr %a772 + store i64 -1, ptr %a774 + %t775 = load i64, ptr %t763 + %t776 = load ptr, ptr %a129 + store i64 0, ptr %a777 + br label %find.cond6009 +find.cond6009: + %t778 = load i64, ptr %a777 + %t779 = icmp slt i64 %t778, %t775 + br i1 %t779, label %find.body6010, label %find.end6013 +find.body6010: + %t780 = getelementptr inbounds { ptr, i64, i64 }, ptr %t776, i64 %t778 + %t781 = load { ptr, i64, i64 }, ptr %t780 + store { ptr, i64, i64 } %t781, ptr %a782 + store { ptr, i64, i64 } %t773, ptr %a783 + %t784 = call i32 @finch_str_eq(ptr %a782, ptr %a783) + %t785 = icmp ne i32 %t784, 0 + br i1 %t785, label %find.hit6011, label %find.next6012 +find.hit6011: + store i64 %t778, ptr %a774 + br label %find.end6013 +find.next6012: + %t786 = add i64 %t778, 1 + store i64 %t786, ptr %a777 + br label %find.cond6009 +find.end6013: + store { ptr, i64, i64 } %t773, ptr %a787 + call void @finch_str_drop(ptr %a787) + %t788 = load i64, ptr %a774 + %t789 = icmp sge i64 %t788, 0 + %t790 = xor i1 %t789, true + br i1 %t790, label %then6014, label %endif6016 +then6014: + %t791 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 + %t792 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 + %t793 = load i64, ptr %a760 + %t794 = load { ptr, i64, i64 }, ptr %t792 + %t795 = extractvalue { ptr, i64, i64 } %t794, 1 + %t796 = icmp uge i64 %t793, %t795 + br i1 %t796, label %range6017, label %inrange6018 +range6017: + call void @finch_panic_index(ptr @.str.3830, i64 3182, i64 %t793, i64 %t795) + unreachable +inrange6018: + %t797 = extractvalue { ptr, i64, i64 } %t794, 0 + %t798 = getelementptr inbounds { ptr, i64, i64 }, ptr %t797, i64 %t793 + %t799 = load { ptr, i64, i64 }, ptr %t798 + store { ptr, i64, i64 } %t799, ptr %a800 + call void @finch_str_copy(ptr %a801, ptr %a800) + %t802 = load { ptr, i64, i64 }, ptr %a801 + %t803 = load i64, ptr %t791 + %t804 = add i64 %t803, 1 + call void @finch_arr_reserve(ptr %a756, i64 %t804, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t805 = load ptr, ptr %a756 + %t806 = getelementptr inbounds { ptr, i64, i64 }, ptr %t805, i64 %t803 + store { ptr, i64, i64 } %t802, ptr %t806 + store i64 %t804, ptr %t791 + br label %endif6016 +endif6016: + br label %for.step6005 +for.step6005: + %t807 = load i64, ptr %a760 + %t808 = add i64 %t807, 1 + store i64 %t808, ptr %a760 + br label %for.cond6003 +for.end6006: + %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 + %t810 = load i64, ptr %t809 + %t811 = icmp sgt i64 %t810, 0 + br i1 %t811, label %then6019, label %endif6021 +then6019: + %t812 = load ptr, ptr %a1 + %t813 = load %S.ast.Node, ptr %a2 + %t814 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3832, i64 2, i64 0 }, ptr %a815 + call void @finch_str_join(ptr %a816, ptr %a756, ptr %a815) + %t817 = load { ptr, i64, i64 }, ptr %a816 + store { ptr, i64, i64 } { ptr @.str.3831, i64 26, i64 0 }, ptr %a819 + store { ptr, i64, i64 } %t817, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t817, ptr %a821 + call void @finch_str_drop(ptr %a821) + %t822 = load { ptr, i64, i64 }, ptr %a818 + store { ptr, i64, i64 } %t822, ptr %a824 + store { ptr, i64, i64 } { ptr @.str.3833, i64 29, i64 0 }, ptr %a825 + call void @finch_str_concat(ptr %a823, ptr %a824, ptr %a825) + store { ptr, i64, i64 } %t822, ptr %a826 + call void @finch_str_drop(ptr %a826) + %t827 = load { ptr, i64, i64 }, ptr %a823 + call void @finch.gen.fail(ptr %t812, %S.ast.Node %t813, { ptr, i64, i64 } %t827) + store { ptr, i64, i64 } %t827, ptr %a828 + call void @finch_str_drop(ptr %a828) + br label %endif6021 +endif6021: + call void @finch.drop.arr_str(ptr %a756) + call void @finch.drop.S_gen_EnumDef(ptr %a755) + br label %endif5998 +else5997: + %t829 = load ptr, ptr %a1 + %t830 = load %S.ast.Node, ptr %a2 + %t831 = load %S.ast.Type, ptr %a19 + %t832 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t831) + store { ptr, i64, i64 } { ptr @.str.3834, i64 11, i64 0 }, ptr %a834 + store { ptr, i64, i64 } %t832, ptr %a835 + call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) + store { ptr, i64, i64 } %t832, ptr %a836 + call void @finch_str_drop(ptr %a836) + %t837 = load { ptr, i64, i64 }, ptr %a833 + store { ptr, i64, i64 } %t837, ptr %a839 + store { ptr, i64, i64 } { ptr @.str.3835, i64 54, i64 0 }, ptr %a840 + call void @finch_str_concat(ptr %a838, ptr %a839, ptr %a840) + store { ptr, i64, i64 } %t837, ptr %a841 + call void @finch_str_drop(ptr %a841) + %t842 = load { ptr, i64, i64 }, ptr %a838 + call void @finch.gen.fail(ptr %t829, %S.ast.Node %t830, { ptr, i64, i64 } %t842) + store { ptr, i64, i64 } %t842, ptr %a843 + call void @finch_str_drop(ptr %a843) + br label %endif5998 +endif5998: + br label %endif5970 +endif5970: + %t844 = load ptr, ptr %a1 + %t845 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t844, { ptr, i64, i64 } { ptr @.str.3836, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.3837, i64 35, i64 0 }, %S.ast.Node %t845) + %t846 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t846, { ptr, i64, i64 } { ptr @.str.3838, i64 11, i64 0 }) + %t847 = load ptr, ptr %a1 + %t848 = icmp eq ptr %t847, null + br i1 %t848, label %panic6022, label %ok6023 +panic6022: + call void @finch_panic(ptr @.str.3839, i64 3194, ptr @.str.3840) + unreachable +ok6023: + %t849 = getelementptr inbounds %S.gen.Gen, ptr %t847, i32 0, i32 9 + store i1 true, ptr %t849 + br label %endif5967 +endif5967: + %t850 = load ptr, ptr %a1 + %t851 = load i64, ptr %a46 + call void @finch.gen.heldEnd(ptr %t850, i64 %t851) + %t852 = load ptr, ptr %a1 + %t853 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.label(ptr %t852, { ptr, i64, i64 } %t853) + %t854 = load i1, ptr %a128 + %t855 = xor i1 %t854, true + br i1 %t855, label %then6024, label %endif6026 +then6024: + %t856 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t856, { ptr, i64, i64 } { ptr @.str.3841, i64 11, i64 0 }) + %t857 = load ptr, ptr %a1 + %t858 = icmp eq ptr %t857, null + br i1 %t858, label %panic6027, label %ok6028 +panic6027: + call void @finch_panic(ptr @.str.3842, i64 3200, ptr @.str.3843) + unreachable +ok6028: + %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 9 + store i1 true, ptr %t859 + %t860 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3844, i64 4, i64 0 }) + %t861 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t860, 1 + call void @finch.drop.S_ast_Type(ptr %a133) + call void @finch.drop.arr_str(ptr %a131) + call void @finch.drop.arr_str(ptr %a130) + call void @finch.drop.arr_str(ptr %a129) + call void @finch_str_drop(ptr %a126) + call void @finch_str_drop(ptr %a50) + call void @finch.drop.S_ast_Type(ptr %a19) + call void @finch.drop.S_gen_Val(ptr %a13) + ret %S.gen.Val %t861 +endif6026: + %t862 = load i1, ptr %a3 + br i1 %t862, label %then6029, label %endif6031 +then6029: + %t863 = load ptr, ptr %a1 + %t864 = load ptr, ptr %a1 + %t865 = load %S.ast.Type, ptr %a133 + %t866 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t864, %S.ast.Type %t865) + store { ptr, i64, i64 } { ptr @.str.3845, i64 4, i64 0 }, ptr %a868 + store { ptr, i64, i64 } %t866, ptr %a869 + call void @finch_str_concat(ptr %a867, ptr %a868, ptr %a869) + store { ptr, i64, i64 } %t866, ptr %a870 + call void @finch_str_drop(ptr %a870) + %t871 = load { ptr, i64, i64 }, ptr %a867 + store { ptr, i64, i64 } %t871, ptr %a873 + store { ptr, i64, i64 } { ptr @.str.3846, i64 1, i64 0 }, ptr %a874 + call void @finch_str_concat(ptr %a872, ptr %a873, ptr %a874) + store { ptr, i64, i64 } %t871, ptr %a875 + call void @finch_str_drop(ptr %a875) + %t876 = load { ptr, i64, i64 }, ptr %a872 + %t877 = load { ptr, i64, i64 }, ptr %a130 + %t878 = load { ptr, i64, i64 }, ptr %a131 + %t879 = call { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %t877, { ptr, i64, i64 } %t878) + store { ptr, i64, i64 } %t876, ptr %a881 + store { ptr, i64, i64 } %t879, ptr %a882 + call void @finch_str_concat(ptr %a880, ptr %a881, ptr %a882) + store { ptr, i64, i64 } %t876, ptr %a883 + call void @finch_str_drop(ptr %a883) + store { ptr, i64, i64 } %t879, ptr %a884 + call void @finch_str_drop(ptr %a884) + %t885 = load { ptr, i64, i64 }, ptr %a880 + %t886 = call { ptr, i64, i64 } @finch.gen.op(ptr %t863, { ptr, i64, i64 } %t885) + store { ptr, i64, i64 } %t885, ptr %a887 + call void @finch_str_drop(ptr %a887) + %t888 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t886, 0 + %t889 = load %S.ast.Type, ptr %a133 + store %S.ast.Type %t889, ptr %a890 + call void @finch.copy.S_ast_Type(ptr %a891, ptr %a890) + %t892 = load %S.ast.Type, ptr %a891 + %t893 = insertvalue %S.gen.Val %t888, %S.ast.Type %t892, 1 + %t894 = load ptr, ptr %a1 + %t895 = load %S.ast.Type, ptr %a133 + %t896 = call i1 @finch.gen.owning(ptr %t894, %S.ast.Type %t895) + %t897 = insertvalue %S.gen.Val %t893, i1 %t896, 2 + store %S.gen.Val %t897, ptr %a898 + %t899 = load ptr, ptr %a1 + %t900 = load %S.gen.Val, ptr %a13 + call void @finch.gen.release(ptr %t899, %S.gen.Val %t900) + %t901 = load %S.gen.Val, ptr %a898 + call void @finch.drop.S_ast_Type(ptr %a133) + call void @finch.drop.arr_str(ptr %a131) + call void @finch.drop.arr_str(ptr %a130) + call void @finch.drop.arr_str(ptr %a129) + call void @finch_str_drop(ptr %a126) + call void @finch_str_drop(ptr %a50) + call void @finch.drop.S_ast_Type(ptr %a19) + call void @finch.drop.S_gen_Val(ptr %a13) + ret %S.gen.Val %t901 +endif6031: + %t902 = load ptr, ptr %a1 + %t903 = load %S.gen.Val, ptr %a13 + call void @finch.gen.release(ptr %t902, %S.gen.Val %t903) + %t904 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3847, i64 4, i64 0 }) + %t905 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t904, 1 + call void @finch.drop.S_ast_Type(ptr %a133) + call void @finch.drop.arr_str(ptr %a131) + call void @finch.drop.arr_str(ptr %a130) + call void @finch.drop.arr_str(ptr %a129) + call void @finch_str_drop(ptr %a126) + call void @finch_str_drop(ptr %a50) + call void @finch.drop.S_ast_Type(ptr %a19) + call void @finch.drop.S_gen_Val(ptr %a13) + ret %S.gen.Val %t905 +} + +define internal { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca i64, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } zeroinitializer, ptr %a3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + store i64 0, ptr %a6 + br label %for.cond6032 +for.cond6032: + %t7 = load i64, ptr %a6 + %t8 = icmp slt i64 %t7, %t5 + br i1 %t8, label %for.body6033, label %for.end6035 +for.body6033: + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t10 = load i64, ptr %a6 + %t11 = load { ptr, i64, i64 }, ptr %a1 + %t12 = extractvalue { ptr, i64, i64 } %t11, 1 + %t13 = icmp uge i64 %t10, %t12 + br i1 %t13, label %range6036, label %inrange6037 +range6036: + call void @finch_panic_index(ptr @.str.3849, i64 3215, i64 %t10, i64 %t12) + unreachable +inrange6037: + %t14 = extractvalue { ptr, i64, i64 } %t11, 0 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t10 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } { ptr @.str.3848, i64 2, i64 0 }, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t20, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.3850, i64 3, i64 0 }, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t20, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + %t26 = load i64, ptr %a6 + %t27 = load { ptr, i64, i64 }, ptr %a2 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 %t26, %t28 + br i1 %t29, label %range6038, label %inrange6039 +range6038: + call void @finch_panic_index(ptr @.str.3851, i64 3215, i64 %t26, i64 %t28) + unreachable +inrange6039: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t26 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t25, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t25, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.3852, i64 2, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + %t43 = load i64, ptr %t9 + %t44 = add i64 %t43, 1 + call void @finch_arr_reserve(ptr %a3, i64 %t44, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t45 = load ptr, ptr %a3 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43 + store { ptr, i64, i64 } %t42, ptr %t46 + store i64 %t44, ptr %t9 + br label %for.step6034 +for.step6034: + %t47 = load i64, ptr %a6 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a6 + br label %for.cond6032 +for.end6035: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3853, i64 2, i64 0 }, ptr %a50 + call void @finch_str_join(ptr %a51, ptr %a3, ptr %a50) + %t52 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.drop.arr_str(ptr %a3) + ret { ptr, i64, i64 } %t52 +} + +define internal %S.gen.Fallible @finch.gen.fallibleCall(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca %S.gen.Val, align 16 + %a64 = alloca %S.gen.Val, align 16 + %a65 = alloca %S.gen.Val, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca %S.gen.Fallible, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.3854, i64 4, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp eq i32 %t7, 0 + br label %logic.from6040 +logic.from6040: + br i1 %t8, label %logic.rhs6041, label %logic.end6042 +logic.rhs6041: + %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.3855, i64 6, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp eq i32 %t13, 0 + br label %logic.rend6043 +logic.rend6043: + br label %logic.end6042 +logic.end6042: + %t15 = phi i1 [ false, %logic.from6040 ], [ %t14, %logic.rend6043 ] + br i1 %t15, label %then6044, label %endif6046 +then6044: + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } { ptr @.str.3856, i64 80, i64 0 }) + br label %endif6046 +endif6046: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic6047, label %ok6048 +panic6047: + call void @finch_panic(ptr @.str.3857, i64 3233, ptr @.str.3858) + unreachable +ok6048: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 41 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + call void @finch_str_copy(ptr %a23, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic6049, label %ok6050 +panic6049: + call void @finch_panic(ptr @.str.3859, i64 3234, ptr @.str.3860) + unreachable +ok6050: + %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 42 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_copy(ptr %a31, ptr %a30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t32, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic6051, label %ok6052 +panic6051: + call void @finch_panic(ptr @.str.3861, i64 3235, ptr @.str.3862) + unreachable +ok6052: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 43 + %t37 = load { ptr, i64, i64 }, ptr %t36 + store { ptr, i64, i64 } %t37, ptr %a38 + call void @finch_str_copy(ptr %a39, ptr %a38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t40, ptr %a41 + %t42 = load %S.ast.Node, ptr %a2 + %t43 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t42) + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic6053, label %ok6054 +panic6053: + call void @finch_panic(ptr @.str.3863, i64 3236, ptr @.str.3864) + unreachable +ok6054: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 41 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store { ptr, i64, i64 } %t43, ptr %t46 + store { ptr, i64, i64 } %t47, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load ptr, ptr %a1 + %t50 = icmp eq ptr %t49, null + br i1 %t50, label %panic6055, label %ok6056 +panic6055: + call void @finch_panic(ptr @.str.3866, i64 3237, ptr @.str.3867) + unreachable +ok6056: + %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 42 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } { ptr @.str.3865, i64 0, i64 0 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load ptr, ptr %a1 + %t55 = icmp eq ptr %t54, null + br i1 %t55, label %panic6057, label %ok6058 +panic6057: + call void @finch_panic(ptr @.str.3869, i64 3238, ptr @.str.3870) + unreachable +ok6058: + %t56 = getelementptr inbounds %S.gen.Gen, ptr %t54, i32 0, i32 43 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } { ptr @.str.3868, i64 0, i64 0 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Node, ptr %a2 + %t61 = call %S.gen.Val @finch.gen.expr(ptr %t59, %S.ast.Node %t60) + store %S.gen.Val %t61, ptr %a62 + %t63 = load %S.gen.Val, ptr %a62 + store %S.gen.Val %t63, ptr %a64 + call void @finch.copy.S_gen_Val(ptr %a65, ptr %a64) + %t66 = load %S.gen.Val, ptr %a65 + %t67 = insertvalue %S.gen.Fallible zeroinitializer, %S.gen.Val %t66, 0 + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic6059, label %ok6060 +panic6059: + call void @finch_panic(ptr @.str.3871, i64 3240, ptr @.str.3872) + unreachable +ok6060: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 42 + %t71 = load { ptr, i64, i64 }, ptr %t70 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_copy(ptr %a73, ptr %a72) + %t74 = load { ptr, i64, i64 }, ptr %a73 + %t75 = insertvalue %S.gen.Fallible %t67, { ptr, i64, i64 } %t74, 1 + %t76 = load ptr, ptr %a1 + %t77 = icmp eq ptr %t76, null + br i1 %t77, label %panic6061, label %ok6062 +panic6061: + call void @finch_panic(ptr @.str.3873, i64 3240, ptr @.str.3874) + unreachable +ok6062: + %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 43 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_copy(ptr %a81, ptr %a80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + %t83 = insertvalue %S.gen.Fallible %t75, { ptr, i64, i64 } %t82, 2 + store %S.gen.Fallible %t83, ptr %a84 + %t85 = load { ptr, i64, i64 }, ptr %a25 + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic6063, label %ok6064 +panic6063: + call void @finch_panic(ptr @.str.3875, i64 3241, ptr @.str.3876) + unreachable +ok6064: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 41 + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_copy(ptr %a90, ptr %a89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t91, ptr %t88 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a33 + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic6065, label %ok6066 +panic6065: + call void @finch_panic(ptr @.str.3877, i64 3242, ptr @.str.3878) + unreachable +ok6066: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 42 + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_copy(ptr %a99, ptr %a98) + %t100 = load { ptr, i64, i64 }, ptr %a99 + %t101 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t100, ptr %t97 + store { ptr, i64, i64 } %t101, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a41 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic6067, label %ok6068 +panic6067: + call void @finch_panic(ptr @.str.3879, i64 3243, ptr @.str.3880) + unreachable +ok6068: + %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 43 + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_copy(ptr %a108, ptr %a107) + %t109 = load { ptr, i64, i64 }, ptr %a108 + %t110 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t109, ptr %t106 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = getelementptr inbounds %S.gen.Fallible, ptr %a84, i32 0, i32 1 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = icmp eq i64 %t114, 0 + br i1 %t115, label %then6069, label %endif6071 +then6069: + %t116 = load ptr, ptr %a1 + %t117 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } { ptr @.str.3881, i64 50, i64 0 }) + br label %endif6071 +endif6071: + %t118 = load %S.gen.Fallible, ptr %a84 + call void @finch.drop.S_gen_Val(ptr %a62) + call void @finch_str_drop(ptr %a41) + call void @finch_str_drop(ptr %a33) + call void @finch_str_drop(ptr %a25) + ret %S.gen.Fallible %t118 +} + +define internal void @finch.drop.S_gen_Fallible(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 0 + call void @finch.drop.S_gen_Val(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal %S.gen.Val @finch.gen.tryExpr(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca %S.gen.Fallible, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca %S.gen.Val, align 16 + %a156 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic6072, label %ok6073 +panic6072: + call void @finch_panic(ptr @.str.3882, i64 3252, ptr @.str.3883) + unreachable +ok6073: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 + %t6 = load i64, ptr %t5 + %t7 = icmp sgt i64 %t6, 0 + br i1 %t7, label %then6074, label %endif6076 +then6074: + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3884, i64 30, i64 0 }) + br label %endif6076 +endif6076: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic6077, label %ok6078 +panic6077: + call void @finch_panic(ptr @.str.3885, i64 3255, ptr @.str.3886) + unreachable +ok6078: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 + %t13 = getelementptr inbounds %S.gen.FnSig, ptr %t12, i32 0, i32 9 + %t14 = load i1, ptr %t13 + %t15 = xor i1 %t14, true + br i1 %t15, label %then6079, label %endif6081 +then6079: + store { ptr, i64, i64 } { ptr @.str.3887, i64 1, i64 0 }, ptr %a16 + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic6082, label %ok6083 +panic6082: + call void @finch_panic(ptr @.str.3888, i64 3257, ptr @.str.3889) + unreachable +ok6083: + %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 13 + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i32 0, i32 12 + %t21 = getelementptr inbounds %S.ast.Type, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.3890, i64 4, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp eq i32 %t25, 0 + br i1 %t26, label %then6084, label %endif6086 +then6084: + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic6087, label %ok6088 +panic6087: + call void @finch_panic(ptr @.str.3891, i64 3258, ptr @.str.3892) + unreachable +ok6088: + %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 13 + %t30 = getelementptr inbounds %S.gen.FnSig, ptr %t29, i32 0, i32 12 + %t31 = load %S.ast.Type, ptr %t30 + %t32 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t31) + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3893, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t37, ptr %a16 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_drop(ptr %a39) + br label %endif6086 +endif6086: + %t40 = load ptr, ptr %a1 + %t41 = load %S.ast.Node, ptr %a2 + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic6089, label %ok6090 +panic6089: + call void @finch_panic(ptr @.str.3895, i64 3260, ptr @.str.3896) + unreachable +ok6090: + %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 13 + %t45 = getelementptr inbounds %S.gen.FnSig, ptr %t44, i32 0, i32 1 + %t46 = load { ptr, i64, i64 }, ptr %t45 + store { ptr, i64, i64 } { ptr @.str.3894, i64 29, i64 0 }, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.3897, i64 31, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t55, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.3898, i64 55, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + call void @finch.gen.fail(ptr %t40, %S.ast.Node %t41, { ptr, i64, i64 } %t66) + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + call void @finch_str_drop(ptr %a16) + br label %endif6081 +endif6081: + %t68 = load ptr, ptr %a1 + %t69 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t70 = load { ptr, i64, i64 }, ptr %t69 + %t71 = extractvalue { ptr, i64, i64 } %t70, 1 + %t72 = icmp uge i64 0, %t71 + br i1 %t72, label %range6091, label %inrange6092 +range6091: + call void @finch_panic_index(ptr @.str.3899, i64 3262, i64 0, i64 %t71) + unreachable +inrange6092: + %t73 = extractvalue { ptr, i64, i64 } %t70, 0 + %t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 0 + %t75 = load %S.ast.Node, ptr %t74 + %t76 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t68, %S.ast.Node %t75) + store %S.gen.Fallible %t76, ptr %a77 + %t78 = load ptr, ptr %a1 + %t79 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t78, { ptr, i64, i64 } { ptr @.str.3900, i64 10, i64 0 }) + store { ptr, i64, i64 } %t79, ptr %a80 + %t81 = load ptr, ptr %a1 + %t82 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t81, { ptr, i64, i64 } { ptr @.str.3901, i64 6, i64 0 }) + store { ptr, i64, i64 } %t82, ptr %a83 + %t84 = load ptr, ptr %a1 + %t85 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 1 + %t86 = load { ptr, i64, i64 }, ptr %t85 + %t87 = load { ptr, i64, i64 }, ptr %a80 + %t88 = load { ptr, i64, i64 }, ptr %a83 + call void @finch.gen.condBr(ptr %t84, { ptr, i64, i64 } %t86, { ptr, i64, i64 } %t87, { ptr, i64, i64 } %t88) + %t89 = load ptr, ptr %a1 + %t90 = load { ptr, i64, i64 }, ptr %a80 + call void @finch.gen.label(ptr %t89, { ptr, i64, i64 } %t90) + %t91 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t91, i64 0) + %t92 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t92, i64 0) + %t93 = load ptr, ptr %a1 + %t94 = load ptr, ptr %a1 + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic6093, label %ok6094 +panic6093: + call void @finch_panic(ptr @.str.3903, i64 3269, ptr @.str.3904) + unreachable +ok6094: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 13 + %t98 = load %S.gen.FnSig, ptr %t97 + %t99 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t94, %S.gen.FnSig %t98) + store { ptr, i64, i64 } { ptr @.str.3902, i64 4, i64 0 }, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t99, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.3905, i64 1, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = load ptr, ptr %a1 + %t111 = load ptr, ptr %a1 + %t112 = load ptr, ptr %a1 + %t113 = icmp eq ptr %t112, null + br i1 %t113, label %panic6095, label %ok6096 +panic6095: + call void @finch_panic(ptr @.str.3907, i64 3269, ptr @.str.3908) + unreachable +ok6096: + %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 13 + %t115 = load %S.gen.FnSig, ptr %t114 + %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t111, %S.gen.FnSig %t115) + store { ptr, i64, i64 } { ptr @.str.3906, i64 12, i64 0 }, ptr %a118 + store { ptr, i64, i64 } %t116, ptr %a119 + call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) + store { ptr, i64, i64 } %t116, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.3909, i64 36, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t126, ptr %a130 + store { ptr, i64, i64 } %t128, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + store { ptr, i64, i64 } %t126, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t133, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.3910, i64 3, i64 0 }, ptr %a136 + call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) + store { ptr, i64, i64 } %t133, ptr %a137 + call void @finch_str_drop(ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a134 + %t139 = call { ptr, i64, i64 } @finch.gen.op(ptr %t110, { ptr, i64, i64 } %t138) + store { ptr, i64, i64 } %t138, ptr %a140 + call void @finch_str_drop(ptr %a140) + store { ptr, i64, i64 } %t109, ptr %a142 + store { ptr, i64, i64 } %t139, ptr %a143 + call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) + store { ptr, i64, i64 } %t109, ptr %a144 + call void @finch_str_drop(ptr %a144) + store { ptr, i64, i64 } %t139, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a141 + call void @finch.gen.emit(ptr %t93, { ptr, i64, i64 } %t146) + store { ptr, i64, i64 } %t146, ptr %a147 + call void @finch_str_drop(ptr %a147) + %t148 = load ptr, ptr %a1 + %t149 = icmp eq ptr %t148, null + br i1 %t149, label %panic6097, label %ok6098 +panic6097: + call void @finch_panic(ptr @.str.3911, i64 3270, ptr @.str.3912) + unreachable +ok6098: + %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 9 + store i1 true, ptr %t150 + %t151 = load ptr, ptr %a1 + %t152 = load { ptr, i64, i64 }, ptr %a83 + call void @finch.gen.label(ptr %t151, { ptr, i64, i64 } %t152) + %t153 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 0 + %t154 = load %S.gen.Val, ptr %t153 + store %S.gen.Val %t154, ptr %a155 + call void @finch.copy.S_gen_Val(ptr %a156, ptr %a155) + %t157 = load %S.gen.Val, ptr %a156 + call void @finch_str_drop(ptr %a83) + call void @finch_str_drop(ptr %a80) + call void @finch.drop.S_gen_Fallible(ptr %a77) + ret %S.gen.Val %t157 +} + +define internal %S.gen.Val @finch.gen.orElse(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a13 = alloca %S.gen.Fallible, align 16 + %a16 = alloca %S.gen.Val, align 16 + %a17 = alloca %S.gen.Val, align 16 + %a19 = alloca %S.gen.Val, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca %S.ast.Type, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca i1, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca %S.ast.Type, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca %S.gen.Val, align 16 + %a155 = alloca %S.gen.Val, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca %S.ast.Type, align 16 + %a245 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range6099, label %inrange6100 +range6099: + call void @finch_panic_index(ptr @.str.3913, i64 3277, i64 0, i64 %t7) + unreachable +inrange6100: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t4, %S.ast.Node %t11) + store %S.gen.Fallible %t12, ptr %a13 + %t14 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 0 + %t15 = load %S.gen.Val, ptr %t14 + store %S.gen.Val %t15, ptr %a16 + call void @finch.copy.S_gen_Val(ptr %a17, ptr %a16) + %t18 = load %S.gen.Val, ptr %a17 + store %S.gen.Val %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t20, { ptr, i64, i64 } { ptr @.str.3914, i64 9, i64 0 }) + store { ptr, i64, i64 } %t21, ptr %a22 + %t23 = load ptr, ptr %a1 + %t24 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t23, { ptr, i64, i64 } { ptr @.str.3915, i64 5, i64 0 }) + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 1 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = load { ptr, i64, i64 }, ptr %a22 + %t30 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29, { ptr, i64, i64 } %t30) + %t31 = load ptr, ptr %a1 + %t32 = load { ptr, i64, i64 }, ptr %a22 + call void @finch.gen.label(ptr %t31, { ptr, i64, i64 } %t32) + %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 + %t34 = load i1, ptr %t33 + br i1 %t34, label %then6101, label %endif6103 +then6101: + %t35 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t35) + %t36 = load ptr, ptr %a1 + %t37 = load %S.ast.Node, ptr %a2 + %t38 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3917, i64 3, i64 0 }) + %t39 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } { ptr @.str.3916, i64 3, i64 0 }, %S.ast.Type %t38, { ptr, i64, i64 } %t40, i1 true, i1 true) + store %S.ast.Type %t38, ptr %a42 + call void @finch.drop.S_ast_Type(ptr %a42) + store { ptr, i64, i64 } %t41, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load ptr, ptr %a1 + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range6104, label %inrange6105 +range6104: + call void @finch_panic_index(ptr @.str.3918, i64 3286, i64 1, i64 %t47) + unreachable +inrange6105: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 + %t51 = load %S.ast.Node, ptr %t50 + call void @finch.gen.block(ptr %t44, %S.ast.Node %t51, i1 true) + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic6106, label %ok6107 +panic6106: + call void @finch_panic(ptr @.str.3919, i64 3287, ptr @.str.3920) + unreachable +ok6107: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 9 + %t55 = load i1, ptr %t54 + store i1 %t55, ptr %a56 + %t57 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t57) + %t58 = load i1, ptr %a56 + %t59 = xor i1 %t58, true + br label %logic.from6108 +logic.from6108: + br i1 %t59, label %logic.rhs6109, label %logic.end6110 +logic.rhs6109: + %t60 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.3921, i64 4, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp eq i32 %t65, 0 + br label %logic.rend6111 +logic.rend6111: + br label %logic.end6110 +logic.end6110: + %t67 = phi i1 [ false, %logic.from6108 ], [ %t66, %logic.rend6111 ] + br label %logic.from6112 +logic.from6112: + br i1 %t67, label %logic.rhs6113, label %logic.end6114 +logic.rhs6113: + %t68 = load i1, ptr %a3 + %t69 = xor i1 %t68, true + br label %logic.rend6115 +logic.rend6115: + br label %logic.end6114 +logic.end6114: + %t70 = phi i1 [ false, %logic.from6112 ], [ %t69, %logic.rend6115 ] + br i1 %t70, label %then6116, label %endif6118 +then6116: + %t71 = load ptr, ptr %a1 + %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 1, %t74 + br i1 %t75, label %range6119, label %inrange6120 +range6119: + call void @finch_panic_index(ptr @.str.3922, i64 3290, i64 1, i64 %t74) + unreachable +inrange6120: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 1 + %t78 = load %S.ast.Node, ptr %t77 + call void @finch.gen.fail(ptr %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.3923, i64 142, i64 0 }) + br label %endif6118 +endif6118: + %t79 = load i1, ptr %a3 + br label %logic.from6121 +logic.from6121: + br i1 %t79, label %logic.rhs6122, label %logic.end6123 +logic.rhs6122: + %t80 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t81 = getelementptr inbounds %S.ast.Type, ptr %t80, i32 0, i32 0 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t82, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.3924, i64 4, i64 0 }, ptr %a84 + %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) + %t86 = icmp eq i32 %t85, 0 + br label %logic.rend6124 +logic.rend6124: + br label %logic.end6123 +logic.end6123: + %t87 = phi i1 [ false, %logic.from6121 ], [ %t86, %logic.rend6124 ] + br i1 %t87, label %then6125, label %endif6127 +then6125: + %t88 = load ptr, ptr %a1 + %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3925, i64 6, i64 0 }) + store { ptr, i64, i64 } %t89, ptr %a90 + %t91 = load ptr, ptr %a1 + %t92 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t91, { ptr, i64, i64 } %t92) + %t93 = load ptr, ptr %a1 + %t94 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.label(ptr %t93, { ptr, i64, i64 } %t94) + %t95 = load ptr, ptr %a1 + %t96 = load %S.gen.Val, ptr %a19 + call void @finch.gen.release(ptr %t95, %S.gen.Val %t96) + %t97 = load ptr, ptr %a1 + %t98 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t97, { ptr, i64, i64 } %t98) + %t99 = load ptr, ptr %a1 + %t100 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.label(ptr %t99, { ptr, i64, i64 } %t100) + %t101 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3926, i64 4, i64 0 }) + %t102 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t101, 1 + call void @finch_str_drop(ptr %a90) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a22) + call void @finch.drop.S_gen_Val(ptr %a19) + call void @finch.drop.S_gen_Fallible(ptr %a13) + ret %S.gen.Val %t102 +endif6127: + %t103 = load ptr, ptr %a1 + %t104 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) + %t105 = load ptr, ptr %a1 + %t106 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) + %t107 = load %S.gen.Val, ptr %a19 + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a22) + call void @finch.drop.S_gen_Fallible(ptr %a13) + ret %S.gen.Val %t107 +endif6103: + %t108 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } %t110, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.3927, i64 4, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br i1 %t114, label %then6128, label %endif6130 +then6128: + %t115 = load ptr, ptr %a1 + %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t117 = load { ptr, i64, i64 }, ptr %t116 + %t118 = extractvalue { ptr, i64, i64 } %t117, 1 + %t119 = icmp uge i64 1, %t118 + br i1 %t119, label %range6131, label %inrange6132 +range6131: + call void @finch_panic_index(ptr @.str.3928, i64 3306, i64 1, i64 %t118) + unreachable +inrange6132: + %t120 = extractvalue { ptr, i64, i64 } %t117, 0 + %t121 = getelementptr inbounds %S.ast.Node, ptr %t120, i64 1 + %t122 = load %S.ast.Node, ptr %t121 + call void @finch.gen.fail(ptr %t115, %S.ast.Node %t122, { ptr, i64, i64 } { ptr @.str.3929, i64 98, i64 0 }) + br label %endif6130 +endif6130: + %t123 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t123) + %t124 = load ptr, ptr %a1 + %t125 = load %S.ast.Node, ptr %a2 + %t126 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3931, i64 3, i64 0 }) + %t127 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + %t129 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t124, %S.ast.Node %t125, { ptr, i64, i64 } { ptr @.str.3930, i64 3, i64 0 }, %S.ast.Type %t126, { ptr, i64, i64 } %t128, i1 true, i1 true) + store %S.ast.Type %t126, ptr %a130 + call void @finch.drop.S_ast_Type(ptr %a130) + store { ptr, i64, i64 } %t129, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load ptr, ptr %a1 + %t133 = load ptr, ptr %a1 + %t134 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t135 = load { ptr, i64, i64 }, ptr %t134 + %t136 = extractvalue { ptr, i64, i64 } %t135, 1 + %t137 = icmp uge i64 1, %t136 + br i1 %t137, label %range6133, label %inrange6134 +range6133: + call void @finch_panic_index(ptr @.str.3932, i64 3310, i64 1, i64 %t136) + unreachable +inrange6134: + %t138 = extractvalue { ptr, i64, i64 } %t135, 0 + %t139 = getelementptr inbounds %S.ast.Node, ptr %t138, i64 1 + %t140 = load %S.ast.Node, ptr %t139 + %t141 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t142 = load %S.ast.Type, ptr %t141 + %t143 = call %S.gen.Val @finch.gen.exprWant(ptr %t133, %S.ast.Node %t140, %S.ast.Type %t142) + %t144 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t145 = load %S.ast.Type, ptr %t144 + %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t147 = load { ptr, i64, i64 }, ptr %t146 + %t148 = extractvalue { ptr, i64, i64 } %t147, 1 + %t149 = icmp uge i64 1, %t148 + br i1 %t149, label %range6135, label %inrange6136 +range6135: + call void @finch_panic_index(ptr @.str.3933, i64 3310, i64 1, i64 %t148) + unreachable +inrange6136: + %t150 = extractvalue { ptr, i64, i64 } %t147, 0 + %t151 = getelementptr inbounds %S.ast.Node, ptr %t150, i64 1 + %t152 = load %S.ast.Node, ptr %t151 + %t153 = call %S.gen.Val @finch.gen.coerce(ptr %t132, %S.gen.Val %t143, %S.ast.Type %t145, %S.ast.Node %t152, { ptr, i64, i64 } { ptr @.str.3934, i64 20, i64 0 }) + store %S.gen.Val %t143, ptr %a154 + call void @finch.drop.S_gen_Val(ptr %a154) + store %S.gen.Val %t153, ptr %a155 + %t156 = load ptr, ptr %a1 + %t157 = load %S.gen.Val, ptr %a155 + %t158 = call { ptr, i64, i64 } @finch.gen.own(ptr %t156, %S.gen.Val %t157) + store { ptr, i64, i64 } %t158, ptr %a159 + %t160 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t160) + %t161 = load ptr, ptr %a1 + %t162 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t161, { ptr, i64, i64 } { ptr @.str.3935, i64 7, i64 0 }) + store { ptr, i64, i64 } %t162, ptr %a163 + %t164 = load ptr, ptr %a1 + %t165 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t164, { ptr, i64, i64 } { ptr @.str.3936, i64 6, i64 0 }) + store { ptr, i64, i64 } %t165, ptr %a166 + %t167 = load ptr, ptr %a1 + %t168 = load { ptr, i64, i64 }, ptr %a163 + call void @finch.gen.br(ptr %t167, { ptr, i64, i64 } %t168) + %t169 = load ptr, ptr %a1 + %t170 = load { ptr, i64, i64 }, ptr %a163 + call void @finch.gen.label(ptr %t169, { ptr, i64, i64 } %t170) + %t171 = load ptr, ptr %a1 + %t172 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t171, { ptr, i64, i64 } %t172) + %t173 = load ptr, ptr %a1 + %t174 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.label(ptr %t173, { ptr, i64, i64 } %t174) + %t175 = load ptr, ptr %a1 + %t176 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t175, { ptr, i64, i64 } %t176) + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.label(ptr %t177, { ptr, i64, i64 } %t178) + %t179 = load ptr, ptr %a1 + %t180 = load ptr, ptr %a1 + %t181 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t182 = load %S.ast.Type, ptr %t181 + %t183 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t180, %S.ast.Type %t182) + store { ptr, i64, i64 } { ptr @.str.3937, i64 4, i64 0 }, ptr %a185 + store { ptr, i64, i64 } %t183, ptr %a186 + call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) + store { ptr, i64, i64 } %t183, ptr %a187 + call void @finch_str_drop(ptr %a187) + %t188 = load { ptr, i64, i64 }, ptr %a184 + store { ptr, i64, i64 } %t188, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.3938, i64 3, i64 0 }, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t188, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load { ptr, i64, i64 }, ptr %a189 + %t194 = load { ptr, i64, i64 }, ptr %a159 + store { ptr, i64, i64 } %t193, ptr %a196 + store { ptr, i64, i64 } %t194, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t193, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + store { ptr, i64, i64 } %t199, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.3939, i64 3, i64 0 }, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t199, ptr %a203 + call void @finch_str_drop(ptr %a203) + %t204 = load { ptr, i64, i64 }, ptr %a200 + %t205 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t204, ptr %a207 + store { ptr, i64, i64 } %t205, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + store { ptr, i64, i64 } %t204, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t210, ptr %a212 + store { ptr, i64, i64 } { ptr @.str.3940, i64 6, i64 0 }, ptr %a213 + call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) + store { ptr, i64, i64 } %t210, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a211 + %t216 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 0 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t215, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t215, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.3941, i64 3, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t227, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t227, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.3942, i64 2, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t179, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t238, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t239, 0 + %t242 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t243 = load %S.ast.Type, ptr %t242 + store %S.ast.Type %t243, ptr %a244 + call void @finch.copy.S_ast_Type(ptr %a245, ptr %a244) + %t246 = load %S.ast.Type, ptr %a245 + %t247 = insertvalue %S.gen.Val %t241, %S.ast.Type %t246, 1 + %t248 = load ptr, ptr %a1 + %t249 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t250 = load %S.ast.Type, ptr %t249 + %t251 = call i1 @finch.gen.owning(ptr %t248, %S.ast.Type %t250) + %t252 = insertvalue %S.gen.Val %t247, i1 %t251, 2 + call void @finch_str_drop(ptr %a166) + call void @finch_str_drop(ptr %a163) + call void @finch_str_drop(ptr %a159) + call void @finch.drop.S_gen_Val(ptr %a155) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a22) + call void @finch.drop.S_gen_Val(ptr %a19) + call void @finch.drop.S_gen_Fallible(ptr %a13) + ret %S.gen.Val %t252 +} + +define internal %S.gen.Val @finch.gen.exprWant(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.3943, i64 5, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then6137, label %endif6139 +then6137: + %t10 = load ptr, ptr %a1 + %t11 = load %S.ast.Node, ptr %a2 + %t12 = load %S.ast.Type, ptr %a3 + %t13 = call %S.gen.Val @finch.gen.arrayLit(ptr %t10, %S.ast.Node %t11, %S.ast.Type %t12) + ret %S.gen.Val %t13 +endif6139: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3944, i64 3, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then6140, label %endif6142 +then6140: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Node, ptr %a2 + %t22 = load %S.ast.Type, ptr %a3 + %t23 = call %S.gen.Val @finch.gen.mapLit(ptr %t20, %S.ast.Node %t21, %S.ast.Type %t22) + ret %S.gen.Val %t23 +endif6142: + %t24 = load ptr, ptr %a1 + %t25 = load %S.ast.Node, ptr %a2 + %t26 = call %S.gen.Val @finch.gen.expr(ptr %t24, %S.ast.Node %t25) + ret %S.gen.Val %t26 +} + +define internal %S.gen.Val @finch.gen.expr(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca i64, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca i64, align 16 + %a47 = alloca i8, align 16 + %a52 = alloca i64, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca i64, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca %S.gen.Ref, align 16 + %a186 = alloca %S.gen.Val, align 16 + %a187 = alloca %S.gen.Val, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca %S.ast.Type, align 16 + %a205 = alloca %S.ast.Type, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca %S.ast.Type, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca %S.ast.Type, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.3945, i64 3, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then6143, label %endif6145 +then6143: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3947, i64 2, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_starts(ptr %a16, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.from6146 +logic.from6146: + br i1 %t20, label %logic.end6148, label %logic.rhs6147 +logic.rhs6147: + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.3949, i64 2, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_starts(ptr %a23, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.rend6149 +logic.rend6149: + br label %logic.end6148 +logic.end6148: + %t28 = phi i1 [ true, %logic.from6146 ], [ %t27, %logic.rend6149 ] + br i1 %t28, label %then6150, label %endif6152 +then6150: + store i64 0, ptr %a29 + %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t31 = load { ptr, i64, i64 }, ptr %t30 + store { ptr, i64, i64 } %t31, ptr %a32 + %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 + %t36 = load i64, ptr %t35 + call void @finch_str_sub(ptr %a33, ptr %a32, i64 2, i64 %t36, ptr @.str.3950, i64 3339) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a38 + store i64 0, ptr %a39 + br label %each.cond6153 +each.cond6153: + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a38, i32 0, i32 1 + %t41 = load i64, ptr %t40 + %t42 = load i64, ptr %a39 + %t43 = icmp slt i64 %t42, %t41 + br i1 %t43, label %each.body6154, label %each.end6156 +each.body6154: + %t44 = load ptr, ptr %a38 + %t45 = getelementptr inbounds i8, ptr %t44, i64 %t42 + %t46 = load i8, ptr %t45 + store i8 %t46, ptr %a47 + %t48 = load i8, ptr %a47 + %t49 = zext i8 %t48 to i64 + %t50 = zext i8 48 to i64 + %t51 = sub i64 %t49, %t50 + store i64 %t51, ptr %a52 + %t53 = load i8, ptr %a47 + %t54 = icmp uge i8 %t53, 97 + br label %logic.from6157 +logic.from6157: + br i1 %t54, label %logic.rhs6158, label %logic.end6159 +logic.rhs6158: + %t55 = load i8, ptr %a47 + %t56 = icmp ule i8 %t55, 102 + br label %logic.rend6160 +logic.rend6160: + br label %logic.end6159 +logic.end6159: + %t57 = phi i1 [ false, %logic.from6157 ], [ %t56, %logic.rend6160 ] + br i1 %t57, label %then6161, label %endif6163 +then6161: + %t58 = load i8, ptr %a47 + %t59 = zext i8 %t58 to i64 + %t60 = zext i8 97 to i64 + %t61 = sub i64 %t59, %t60 + %t62 = add i64 %t61, 10 + store i64 %t62, ptr %a52 + br label %endif6163 +endif6163: + %t63 = load i8, ptr %a47 + %t64 = icmp uge i8 %t63, 65 + br label %logic.from6164 +logic.from6164: + br i1 %t64, label %logic.rhs6165, label %logic.end6166 +logic.rhs6165: + %t65 = load i8, ptr %a47 + %t66 = icmp ule i8 %t65, 70 + br label %logic.rend6167 +logic.rend6167: + br label %logic.end6166 +logic.end6166: + %t67 = phi i1 [ false, %logic.from6164 ], [ %t66, %logic.rend6167 ] + br i1 %t67, label %then6168, label %endif6170 +then6168: + %t68 = load i8, ptr %a47 + %t69 = zext i8 %t68 to i64 + %t70 = zext i8 65 to i64 + %t71 = sub i64 %t69, %t70 + %t72 = add i64 %t71, 10 + store i64 %t72, ptr %a52 + br label %endif6170 +endif6170: + %t73 = load i64, ptr %a29 + %t74 = mul i64 %t73, 16 + %t75 = load i64, ptr %a52 + %t76 = add i64 %t74, %t75 + store i64 %t76, ptr %a29 + br label %each.step6155 +each.step6155: + %t77 = load i64, ptr %a39 + %t78 = add i64 %t77, 1 + store i64 %t78, ptr %a39 + br label %each.cond6153 +each.end6156: + call void @finch_str_drop(ptr %a38) + %t79 = load i64, ptr %a29 + call void @finch_str_from_int(ptr %a80, i64 %t79) + %t81 = load { ptr, i64, i64 }, ptr %a80 + %t82 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t81, 0 + %t83 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3951, i64 3, i64 0 }) + %t84 = insertvalue %S.gen.Val %t82, %S.ast.Type %t83, 1 + %t85 = insertvalue %S.gen.Val %t84, i1 true, 3 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t85 +endif6152: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } %t87, ptr %a88 + %t89 = call i64 @finch_str_to_int(ptr %a88, ptr @.str.3952, i64 3351) + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t91, 0 + %t93 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3953, i64 3, i64 0 }) + %t94 = insertvalue %S.gen.Val %t92, %S.ast.Type %t93, 1 + %t95 = insertvalue %S.gen.Val %t94, i1 true, 3 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t95 +endif6145: + %t96 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.3954, i64 5, i64 0 }, ptr %a98 + %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) + %t100 = icmp ne i32 %t99, 0 + br i1 %t100, label %then6171, label %endif6173 +then6171: + %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } %t102, ptr %a103 + call void @finch_str_copy(ptr %a104, ptr %a103) + %t105 = load { ptr, i64, i64 }, ptr %a104 + %t106 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t105, 0 + %t107 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3955, i64 5, i64 0 }) + %t108 = insertvalue %S.gen.Val %t106, %S.ast.Type %t107, 1 + %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t109 +endif6173: + %t110 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t110, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.3956, i64 4, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br i1 %t114, label %then6174, label %endif6176 +then6174: + %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_copy(ptr %a118, ptr %a117) + %t119 = load { ptr, i64, i64 }, ptr %a118 + %t120 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t119, 0 + %t121 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3957, i64 4, i64 0 }) + %t122 = insertvalue %S.gen.Val %t120, %S.ast.Type %t121, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t122 +endif6176: + %t123 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t123, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.3958, i64 4, i64 0 }, ptr %a125 + %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) + %t127 = icmp ne i32 %t126, 0 + br i1 %t127, label %then6177, label %endif6179 +then6177: + %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t129 = load { ptr, i64, i64 }, ptr %t128 + %t130 = extractvalue { ptr, i64, i64 } %t129, 1 + %t131 = icmp uge i64 0, %t130 + br i1 %t131, label %range6180, label %inrange6181 +range6180: + call void @finch_panic_index(ptr @.str.3959, i64 3360, i64 0, i64 %t130) + unreachable +inrange6181: + %t132 = extractvalue { ptr, i64, i64 } %t129, 0 + %t133 = getelementptr inbounds i8, ptr %t132, i64 0 + %t134 = load i8, ptr %t133 + %t135 = zext i8 %t134 to i64 + store i64 %t135, ptr %a136 + %t137 = load i64, ptr %a136 + call void @finch_str_from_int(ptr %a138, i64 %t137) + %t139 = load { ptr, i64, i64 }, ptr %a138 + %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t141 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3960, i64 4, i64 0 }) + %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t142 +endif6179: + %t143 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t143, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.3961, i64 3, i64 0 }, ptr %a145 + %t146 = call i32 @finch_str_eq(ptr %a144, ptr %a145) + %t147 = icmp ne i32 %t146, 0 + br i1 %t147, label %then6182, label %endif6184 +then6182: + %t148 = load ptr, ptr %a1 + %t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t150 = load { ptr, i64, i64 }, ptr %t149 + %t151 = call %S.gen.Val @finch.gen.strConst(ptr %t148, { ptr, i64, i64 } %t150) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t151 +endif6184: + %t152 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t152, ptr %a153 + store { ptr, i64, i64 } { ptr @.str.3962, i64 4, i64 0 }, ptr %a154 + %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) + %t156 = icmp ne i32 %t155, 0 + br i1 %t156, label %then6185, label %endif6187 +then6185: + %t157 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.3963, i64 4, i64 0 }, 0 + %t158 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3964, i64 4, i64 0 }) + %t159 = insertvalue %S.gen.Val %t157, %S.ast.Type %t158, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t159 +endif6187: + %t160 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t160, ptr %a161 + store { ptr, i64, i64 } { ptr @.str.3965, i64 3, i64 0 }, ptr %a162 + %t163 = call i32 @finch_str_eq(ptr %a161, ptr %a162) + %t164 = icmp ne i32 %t163, 0 + br label %logic.from6188 +logic.from6188: + br i1 %t164, label %logic.end6190, label %logic.rhs6189 +logic.rhs6189: + %t165 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t165, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.3966, i64 6, i64 0 }, ptr %a167 + %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) + %t169 = icmp ne i32 %t168, 0 + br label %logic.rend6191 +logic.rend6191: + br label %logic.end6190 +logic.end6190: + %t170 = phi i1 [ true, %logic.from6188 ], [ %t169, %logic.rend6191 ] + br label %logic.from6192 +logic.from6192: + br i1 %t170, label %logic.end6194, label %logic.rhs6193 +logic.rhs6193: + %t171 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.3967, i64 5, i64 0 }, ptr %a173 + %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) + %t175 = icmp ne i32 %t174, 0 + br label %logic.rend6195 +logic.rend6195: + br label %logic.end6194 +logic.end6194: + %t176 = phi i1 [ true, %logic.from6192 ], [ %t175, %logic.rend6195 ] + br i1 %t176, label %then6196, label %endif6198 +then6196: + %t177 = load ptr, ptr %a1 + %t178 = load %S.ast.Node, ptr %a2 + %t179 = call %S.gen.Ref @finch.gen.ref(ptr %t177, %S.ast.Node %t178, i1 false) + store %S.gen.Ref %t179, ptr %a180 + %t181 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 0 + %t182 = load i1, ptr %t181 + %t183 = xor i1 %t182, true + br i1 %t183, label %then6199, label %endif6201 +then6199: + %t184 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 2 + %t185 = load %S.gen.Val, ptr %t184 + store %S.gen.Val %t185, ptr %a186 + call void @finch.copy.S_gen_Val(ptr %a187, ptr %a186) + %t188 = load %S.gen.Val, ptr %a187 + call void @finch.drop.S_gen_Ref(ptr %a180) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t188 +endif6201: + %t189 = load ptr, ptr %a1 + %t190 = load ptr, ptr %a1 + %t191 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 + %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 1 + %t193 = load %S.ast.Type, ptr %t192 + %t194 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t190, %S.ast.Type %t193) + %t195 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 + %t196 = getelementptr inbounds %S.gen.Place, ptr %t195, i32 0, i32 0 + %t197 = load { ptr, i64, i64 }, ptr %t196 + %t198 = call { ptr, i64, i64 } @finch.gen.load(ptr %t189, { ptr, i64, i64 } %t194, { ptr, i64, i64 } %t197) + store { ptr, i64, i64 } %t194, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t198, 0 + %t201 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 + %t202 = getelementptr inbounds %S.gen.Place, ptr %t201, i32 0, i32 1 + %t203 = load %S.ast.Type, ptr %t202 + store %S.ast.Type %t203, ptr %a204 + call void @finch.copy.S_ast_Type(ptr %a205, ptr %a204) + %t206 = load %S.ast.Type, ptr %a205 + %t207 = insertvalue %S.gen.Val %t200, %S.ast.Type %t206, 1 + call void @finch.drop.S_gen_Ref(ptr %a180) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t207 +endif6198: + %t208 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.3968, i64 5, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br i1 %t212, label %then6202, label %endif6204 +then6202: + %t213 = load ptr, ptr %a1 + %t214 = load %S.ast.Node, ptr %a2 + %t215 = call %S.gen.Val @finch.gen.matchGen(ptr %t213, %S.ast.Node %t214, i1 true) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t215 +endif6204: + %t216 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t216, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.3969, i64 3, i64 0 }, ptr %a218 + %t219 = call i32 @finch_str_eq(ptr %a217, ptr %a218) + %t220 = icmp ne i32 %t219, 0 + br i1 %t220, label %then6205, label %endif6207 +then6205: + %t221 = load ptr, ptr %a1 + %t222 = load %S.ast.Node, ptr %a2 + %t223 = call %S.gen.Val @finch.gen.tryExpr(ptr %t221, %S.ast.Node %t222) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t223 +endif6207: + %t224 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t224, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.3970, i64 2, i64 0 }, ptr %a226 + %t227 = call i32 @finch_str_eq(ptr %a225, ptr %a226) + %t228 = icmp ne i32 %t227, 0 + br i1 %t228, label %then6208, label %endif6210 +then6208: + %t229 = load ptr, ptr %a1 + %t230 = load %S.ast.Node, ptr %a2 + %t231 = call %S.gen.Val @finch.gen.orElse(ptr %t229, %S.ast.Node %t230, i1 false) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t231 +endif6210: + %t232 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t232, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.3971, i64 5, i64 0 }, ptr %a234 + %t235 = call i32 @finch_str_eq(ptr %a233, ptr %a234) + %t236 = icmp ne i32 %t235, 0 + br i1 %t236, label %then6211, label %endif6213 +then6211: + %t237 = load ptr, ptr %a1 + %t238 = load %S.ast.Node, ptr %a2 + %t239 = call %S.gen.Val @finch.gen.unary(ptr %t237, %S.ast.Node %t238) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t239 +endif6213: + %t240 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t240, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.3972, i64 6, i64 0 }, ptr %a242 + %t243 = call i32 @finch_str_eq(ptr %a241, ptr %a242) + %t244 = icmp ne i32 %t243, 0 + br i1 %t244, label %then6214, label %endif6216 +then6214: + %t245 = load ptr, ptr %a1 + %t246 = load %S.ast.Node, ptr %a2 + %t247 = call %S.gen.Val @finch.gen.binary(ptr %t245, %S.ast.Node %t246) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t247 +endif6216: + %t248 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t248, ptr %a249 + store { ptr, i64, i64 } { ptr @.str.3973, i64 4, i64 0 }, ptr %a250 + %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) + %t252 = icmp ne i32 %t251, 0 + br i1 %t252, label %then6217, label %endif6219 +then6217: + %t253 = load ptr, ptr %a1 + %t254 = load %S.ast.Node, ptr %a2 + %t255 = call %S.gen.Val @finch.gen.call(ptr %t253, %S.ast.Node %t254) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t255 +endif6219: + %t256 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t256, ptr %a257 + store { ptr, i64, i64 } { ptr @.str.3974, i64 6, i64 0 }, ptr %a258 + %t259 = call i32 @finch_str_eq(ptr %a257, ptr %a258) + %t260 = icmp ne i32 %t259, 0 + br i1 %t260, label %then6220, label %endif6222 +then6220: + %t261 = load ptr, ptr %a1 + %t262 = load %S.ast.Node, ptr %a2 + %t263 = call %S.gen.Val @finch.gen.method(ptr %t261, %S.ast.Node %t262) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t263 +endif6222: + %t264 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t264, ptr %a265 + store { ptr, i64, i64 } { ptr @.str.3975, i64 5, i64 0 }, ptr %a266 + %t267 = call i32 @finch_str_eq(ptr %a265, ptr %a266) + %t268 = icmp ne i32 %t267, 0 + br i1 %t268, label %then6223, label %endif6225 +then6223: + %t269 = load ptr, ptr %a1 + %t270 = load %S.ast.Node, ptr %a2 + %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3976, i64 4, i64 0 }) + %t272 = call %S.gen.Val @finch.gen.arrayLit(ptr %t269, %S.ast.Node %t270, %S.ast.Type %t271) + store %S.ast.Type %t271, ptr %a273 + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t272 +endif6225: + %t274 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t274, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.3977, i64 3, i64 0 }, ptr %a276 + %t277 = call i32 @finch_str_eq(ptr %a275, ptr %a276) + %t278 = icmp ne i32 %t277, 0 + br i1 %t278, label %then6226, label %endif6228 +then6226: + %t279 = load ptr, ptr %a1 + %t280 = load %S.ast.Node, ptr %a2 + %t281 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3978, i64 4, i64 0 }) + %t282 = call %S.gen.Val @finch.gen.mapLit(ptr %t279, %S.ast.Node %t280, %S.ast.Type %t281) + store %S.ast.Type %t281, ptr %a283 + call void @finch.drop.S_ast_Type(ptr %a283) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t282 +endif6228: + %t284 = load ptr, ptr %a1 + %t285 = load %S.ast.Node, ptr %a2 + %t286 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.3979, i64 19, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a287 + call void @finch.gen.fail(ptr %t284, %S.ast.Node %t285, { ptr, i64, i64 } %t290) + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val zeroinitializer +} + +define internal %S.gen.Val @finch.gen.unary(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a12 = alloca %S.gen.Val, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a31 = alloca %S.gen.Val, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a103 = alloca %S.ast.Type, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca %S.ast.Type, align 16 + %a144 = alloca %S.ast.Type, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca %S.ast.Type, align 16 + %a158 = alloca %S.ast.Type, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca %S.ast.Type, align 16 + %a190 = alloca %S.ast.Type, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca %S.ast.Type, align 16 + %a224 = alloca %S.ast.Type, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t5 = load { ptr, i64, i64 }, ptr %t4 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 0, %t6 + br i1 %t7, label %range6229, label %inrange6230 +range6229: + call void @finch_panic_index(ptr @.str.3980, i64 3408, i64 0, i64 %t6) + unreachable +inrange6230: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 + %t10 = load %S.ast.Node, ptr %t9 + %t11 = call %S.gen.Val @finch.gen.expr(ptr %t3, %S.ast.Node %t10) + store %S.gen.Val %t11, ptr %a12 + %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.3981, i64 1, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br i1 %t18, label %then6231, label %endif6233 +then6231: + %t19 = load ptr, ptr %a1 + %t20 = load %S.gen.Val, ptr %a12 + %t21 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3982, i64 4, i64 0 }) + %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 0, %t24 + br i1 %t25, label %range6234, label %inrange6235 +range6234: + call void @finch_panic_index(ptr @.str.3983, i64 3410, i64 0, i64 %t24) + unreachable +inrange6235: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds %S.ast.Node, ptr %t26, i64 0 + %t28 = load %S.ast.Node, ptr %t27 + %t29 = call %S.gen.Val @finch.gen.coerce(ptr %t19, %S.gen.Val %t20, %S.ast.Type %t21, %S.ast.Node %t28, { ptr, i64, i64 } { ptr @.str.3984, i64 19, i64 0 }) + store %S.ast.Type %t21, ptr %a30 + call void @finch.drop.S_ast_Type(ptr %a30) + store %S.gen.Val %t29, ptr %a31 + %t32 = load ptr, ptr %a1 + %t33 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } { ptr @.str.3985, i64 7, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.3986, i64 6, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + %t44 = call { ptr, i64, i64 } @finch.gen.op(ptr %t32, { ptr, i64, i64 } %t43) + store { ptr, i64, i64 } %t43, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t44, 0 + %t47 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3987, i64 4, i64 0 }) + %t48 = insertvalue %S.gen.Val %t46, %S.ast.Type %t47, 1 + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t48 +endif6233: + %t49 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.3988, i64 1, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then6236, label %endif6238 +then6236: + %t55 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t56 = load %S.ast.Type, ptr %t55 + %t57 = call i1 @finch.gen.isInt(%S.ast.Type %t56) + %t58 = xor i1 %t57, true + br i1 %t58, label %then6239, label %endif6241 +then6239: + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Node, ptr %a2 + %t61 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t62 = load %S.ast.Type, ptr %t61 + %t63 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t62) + store { ptr, i64, i64 } { ptr @.str.3989, i64 45, i64 0 }, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t63, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a64 + call void @finch.gen.fail(ptr %t59, %S.ast.Node %t60, { ptr, i64, i64 } %t68) + store { ptr, i64, i64 } %t68, ptr %a69 + call void @finch_str_drop(ptr %a69) + br label %endif6241 +endif6241: + %t70 = load ptr, ptr %a1 + %t71 = load ptr, ptr %a1 + %t72 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t73 = load %S.ast.Type, ptr %t72 + %t74 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t71, %S.ast.Type %t73) + store { ptr, i64, i64 } { ptr @.str.3990, i64 4, i64 0 }, ptr %a76 + store { ptr, i64, i64 } %t74, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3991, i64 1, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + %t85 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t84, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t84, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.3992, i64 4, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + %t97 = call { ptr, i64, i64 } @finch.gen.op(ptr %t70, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t97, 0 + %t100 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t101 = load %S.ast.Type, ptr %t100 + store %S.ast.Type %t101, ptr %a102 + call void @finch.copy.S_ast_Type(ptr %a103, ptr %a102) + %t104 = load %S.ast.Type, ptr %a103 + %t105 = insertvalue %S.gen.Val %t99, %S.ast.Type %t104, 1 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t105 +endif6238: + %t106 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t107 = load %S.ast.Type, ptr %t106 + %t108 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t107) + br i1 %t108, label %then6242, label %endif6244 +then6242: + %t109 = load ptr, ptr %a1 + %t110 = load %S.ast.Node, ptr %a2 + %t111 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t112 = load %S.ast.Type, ptr %t111 + %t113 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t112) + store { ptr, i64, i64 } %t113, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.3993, i64 34, i64 0 }, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t113, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a114 + call void @finch.gen.fail(ptr %t109, %S.ast.Node %t110, { ptr, i64, i64 } %t118) + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_drop(ptr %a119) + br label %endif6244 +endif6244: + %t120 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t121 = load %S.ast.Type, ptr %t120 + %t122 = call i1 @finch.gen.isSigned(%S.ast.Type %t121) + br i1 %t122, label %then6245, label %endif6247 +then6245: + %t123 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 3 + %t124 = load i1, ptr %t123 + br i1 %t124, label %then6248, label %endif6250 +then6248: + %t125 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t126, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.3995, i64 1, i64 0 }, ptr %a129 + %t130 = call i32 @finch_str_starts(ptr %a127, ptr %a129) + %t131 = icmp ne i32 %t130, 0 + br i1 %t131, label %then6251, label %endif6253 +then6251: + %t132 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + %t136 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 + %t138 = load i64, ptr %t137 + call void @finch_str_sub(ptr %a135, ptr %a134, i64 1, i64 %t138, ptr @.str.3996, i64 3425) + %t139 = load { ptr, i64, i64 }, ptr %a135 + %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t141 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t142 = load %S.ast.Type, ptr %t141 + store %S.ast.Type %t142, ptr %a143 + call void @finch.copy.S_ast_Type(ptr %a144, ptr %a143) + %t145 = load %S.ast.Type, ptr %a144 + %t146 = insertvalue %S.gen.Val %t140, %S.ast.Type %t145, 1 + %t147 = insertvalue %S.gen.Val %t146, i1 true, 3 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t147 +endif6253: + %t148 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t149 = load { ptr, i64, i64 }, ptr %t148 + store { ptr, i64, i64 } { ptr @.str.3997, i64 1, i64 0 }, ptr %a151 + store { ptr, i64, i64 } %t149, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + %t153 = load { ptr, i64, i64 }, ptr %a150 + %t154 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t153, 0 + %t155 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t156 = load %S.ast.Type, ptr %t155 + store %S.ast.Type %t156, ptr %a157 + call void @finch.copy.S_ast_Type(ptr %a158, ptr %a157) + %t159 = load %S.ast.Type, ptr %a158 + %t160 = insertvalue %S.gen.Val %t154, %S.ast.Type %t159, 1 + %t161 = insertvalue %S.gen.Val %t160, i1 true, 3 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t161 +endif6250: + %t162 = load ptr, ptr %a1 + %t163 = load ptr, ptr %a1 + %t164 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t165 = load %S.ast.Type, ptr %t164 + %t166 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t163, %S.ast.Type %t165) + store { ptr, i64, i64 } { ptr @.str.3998, i64 4, i64 0 }, ptr %a168 + store { ptr, i64, i64 } %t166, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t166, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t171, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.3999, i64 4, i64 0 }, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t171, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a172 + %t177 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t178 = load { ptr, i64, i64 }, ptr %t177 + store { ptr, i64, i64 } %t176, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t176, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t162, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t184, 0 + %t187 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t188 = load %S.ast.Type, ptr %t187 + store %S.ast.Type %t188, ptr %a189 + call void @finch.copy.S_ast_Type(ptr %a190, ptr %a189) + %t191 = load %S.ast.Type, ptr %a190 + %t192 = insertvalue %S.gen.Val %t186, %S.ast.Type %t191, 1 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t192 +endif6247: + %t193 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t194 = load %S.ast.Type, ptr %t193 + %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) + br i1 %t195, label %then6254, label %endif6256 +then6254: + %t196 = load ptr, ptr %a1 + %t197 = load ptr, ptr %a1 + %t198 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t199 = load %S.ast.Type, ptr %t198 + %t200 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t197, %S.ast.Type %t199) + store { ptr, i64, i64 } { ptr @.str.4000, i64 5, i64 0 }, ptr %a202 + store { ptr, i64, i64 } %t200, ptr %a203 + call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) + store { ptr, i64, i64 } %t200, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a201 + store { ptr, i64, i64 } %t205, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.4001, i64 1, i64 0 }, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + store { ptr, i64, i64 } %t205, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a206 + %t211 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t212 = load { ptr, i64, i64 }, ptr %t211 + store { ptr, i64, i64 } %t210, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t210, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + %t218 = call { ptr, i64, i64 } @finch.gen.op(ptr %t196, { ptr, i64, i64 } %t217) + store { ptr, i64, i64 } %t217, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t218, 0 + %t221 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t222 = load %S.ast.Type, ptr %t221 + store %S.ast.Type %t222, ptr %a223 + call void @finch.copy.S_ast_Type(ptr %a224, ptr %a223) + %t225 = load %S.ast.Type, ptr %a224 + %t226 = insertvalue %S.gen.Val %t220, %S.ast.Type %t225, 1 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t226 +endif6256: + %t227 = load ptr, ptr %a1 + %t228 = load %S.ast.Node, ptr %a2 + %t229 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t230 = load %S.ast.Type, ptr %t229 + %t231 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t230) + store { ptr, i64, i64 } { ptr @.str.4002, i64 26, i64 0 }, ptr %a233 + store { ptr, i64, i64 } %t231, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t231, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + call void @finch.gen.fail(ptr %t227, %S.ast.Node %t228, { ptr, i64, i64 } %t236) + store { ptr, i64, i64 } %t236, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load %S.gen.Val, ptr %a12 + ret %S.gen.Val %t238 +} + +define internal void @finch.gen.badOperands(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.gen.Val, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.gen.Val %p2, ptr %a3 + store %S.gen.Val %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.4003, i64 11, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.4004, i64 5, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t17) + store { ptr, i64, i64 } %t15, ptr %a20 + store { ptr, i64, i64 } %t18, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t15, ptr %a22 + call void @finch_str_drop(ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t27 = load %S.ast.Type, ptr %t26 + %t28 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 + %t29 = load %S.ast.Type, ptr %t28 + %t30 = call i1 @finch.ast.same(%S.ast.Type %t27, %S.ast.Type %t29) + %t31 = xor i1 %t30, true + br i1 %t31, label %then6257, label %endif6259 +then6257: + %t32 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.4005, i64 5, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a33 + %t37 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 + %t38 = load %S.ast.Type, ptr %t37 + %t39 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t38) + store { ptr, i64, i64 } %t36, ptr %a41 + store { ptr, i64, i64 } %t39, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t36, ptr %a43 + call void @finch_str_drop(ptr %a43) + store { ptr, i64, i64 } %t39, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a40 + %t46 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t45, ptr %a25 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %endif6259 +endif6259: + %t48 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t48, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.4006, i64 1, i64 0 }, ptr %a50 + %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) + %t52 = icmp ne i32 %t51, 0 + br label %logic.from6260 +logic.from6260: + br i1 %t52, label %logic.rhs6261, label %logic.end6262 +logic.rhs6261: + %t53 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t54 = getelementptr inbounds %S.ast.Type, ptr %t53, i32 0, i32 0 + %t55 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t55, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.4007, i64 3, i64 0 }, ptr %a57 + %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) + %t59 = icmp ne i32 %t58, 0 + br label %logic.from6263 +logic.from6263: + br i1 %t59, label %logic.end6265, label %logic.rhs6264 +logic.rhs6264: + %t60 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 + %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.4008, i64 3, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br label %logic.rend6266 +logic.rend6266: + br label %logic.end6265 +logic.end6265: + %t67 = phi i1 [ true, %logic.from6263 ], [ %t66, %logic.rend6266 ] + br label %logic.rend6267 +logic.rend6267: + br label %logic.end6262 +logic.end6262: + %t68 = phi i1 [ false, %logic.from6260 ], [ %t67, %logic.rend6267 ] + br i1 %t68, label %then6268, label %endif6270 +then6268: + %t69 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.4009, i64 48, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a70 + %t74 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t73, ptr %a25 + store { ptr, i64, i64 } %t74, ptr %a75 + call void @finch_str_drop(ptr %a75) + br label %endif6270 +endif6270: + %t76 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.4010, i64 1, i64 0 }, ptr %a78 + %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) + %t80 = icmp ne i32 %t79, 0 + br label %logic.from6271 +logic.from6271: + br i1 %t80, label %logic.end6273, label %logic.rhs6272 +logic.rhs6272: + %t81 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.4011, i64 1, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.rend6274 +logic.rend6274: + br label %logic.end6273 +logic.end6273: + %t86 = phi i1 [ true, %logic.from6271 ], [ %t85, %logic.rend6274 ] + br label %logic.from6275 +logic.from6275: + br i1 %t86, label %logic.rhs6276, label %logic.end6277 +logic.rhs6276: + %t87 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i32 0, i32 0 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.4012, i64 4, i64 0 }, ptr %a91 + %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) + %t93 = icmp ne i32 %t92, 0 + br label %logic.rend6278 +logic.rend6278: + br label %logic.end6277 +logic.end6277: + %t94 = phi i1 [ false, %logic.from6275 ], [ %t93, %logic.rend6278 ] + br i1 %t94, label %then6279, label %else6280 +then6279: + %t95 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.4013, i64 1, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then6282, label %else6283 +then6282: + %t100 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.4014, i64 26, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a101 + %t105 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t104, ptr %a25 + store { ptr, i64, i64 } %t105, ptr %a106 + call void @finch_str_drop(ptr %a106) + br label %endif6284 +else6283: + %t107 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.4015, i64 26, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + %t112 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t111, ptr %a25 + store { ptr, i64, i64 } %t112, ptr %a113 + call void @finch_str_drop(ptr %a113) + br label %endif6284 +endif6284: + br label %endif6281 +else6280: + %t114 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.4016, i64 1, i64 0 }, ptr %a116 + %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) + %t118 = icmp ne i32 %t117, 0 + br label %logic.from6285 +logic.from6285: + br i1 %t118, label %logic.end6287, label %logic.rhs6286 +logic.rhs6286: + %t119 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t119, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.4017, i64 1, i64 0 }, ptr %a121 + %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) + %t123 = icmp ne i32 %t122, 0 + br label %logic.rend6288 +logic.rend6288: + br label %logic.end6287 +logic.end6287: + %t124 = phi i1 [ true, %logic.from6285 ], [ %t123, %logic.rend6288 ] + br label %logic.from6289 +logic.from6289: + br i1 %t124, label %logic.end6291, label %logic.rhs6290 +logic.rhs6290: + %t125 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t125, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.4018, i64 1, i64 0 }, ptr %a127 + %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) + %t129 = icmp ne i32 %t128, 0 + br label %logic.rend6292 +logic.rend6292: + br label %logic.end6291 +logic.end6291: + %t130 = phi i1 [ true, %logic.from6289 ], [ %t129, %logic.rend6292 ] + br label %logic.from6293 +logic.from6293: + br i1 %t130, label %logic.end6295, label %logic.rhs6294 +logic.rhs6294: + %t131 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t131, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.4019, i64 2, i64 0 }, ptr %a133 + %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) + %t135 = icmp ne i32 %t134, 0 + br label %logic.rend6296 +logic.rend6296: + br label %logic.end6295 +logic.end6295: + %t136 = phi i1 [ true, %logic.from6293 ], [ %t135, %logic.rend6296 ] + br label %logic.from6297 +logic.from6297: + br i1 %t136, label %logic.end6299, label %logic.rhs6298 +logic.rhs6298: + %t137 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t137, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.4020, i64 2, i64 0 }, ptr %a139 + %t140 = call i32 @finch_str_eq(ptr %a138, ptr %a139) + %t141 = icmp ne i32 %t140, 0 + br label %logic.rend6300 +logic.rend6300: + br label %logic.end6299 +logic.end6299: + %t142 = phi i1 [ true, %logic.from6297 ], [ %t141, %logic.rend6300 ] + br i1 %t142, label %then6301, label %endif6303 +then6301: + %t143 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t143, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.4021, i64 43, i64 0 }, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a144 + %t148 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t147, ptr %a25 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch_str_drop(ptr %a149) + br label %endif6303 +endif6303: + br label %endif6281 +endif6281: + %t150 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t151 = getelementptr inbounds %S.ast.Type, ptr %t150, i32 0, i32 0 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t152, ptr %a153 + store { ptr, i64, i64 } { ptr @.str.4022, i64 6, i64 0 }, ptr %a154 + %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) + %t156 = icmp ne i32 %t155, 0 + br label %logic.from6304 +logic.from6304: + br i1 %t156, label %logic.end6306, label %logic.rhs6305 +logic.rhs6305: + %t157 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t158 = getelementptr inbounds %S.ast.Type, ptr %t157, i32 0, i32 0 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.4023, i64 5, i64 0 }, ptr %a161 + %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) + %t163 = icmp ne i32 %t162, 0 + br label %logic.rend6307 +logic.rend6307: + br label %logic.end6306 +logic.end6306: + %t164 = phi i1 [ true, %logic.from6304 ], [ %t163, %logic.rend6307 ] + br label %logic.from6308 +logic.from6308: + br i1 %t164, label %logic.rhs6309, label %logic.end6310 +logic.rhs6309: + %t165 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t165, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.4024, i64 2, i64 0 }, ptr %a167 + %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) + %t169 = icmp ne i32 %t168, 0 + br label %logic.from6311 +logic.from6311: + br i1 %t169, label %logic.end6313, label %logic.rhs6312 +logic.rhs6312: + %t170 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.4025, i64 2, i64 0 }, ptr %a172 + %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) + %t174 = icmp ne i32 %t173, 0 + br label %logic.rend6314 +logic.rend6314: + br label %logic.end6313 +logic.end6313: + %t175 = phi i1 [ true, %logic.from6311 ], [ %t174, %logic.rend6314 ] + br label %logic.rend6315 +logic.rend6315: + br label %logic.end6310 +logic.end6310: + %t176 = phi i1 [ false, %logic.from6308 ], [ %t175, %logic.rend6315 ] + br i1 %t176, label %then6316, label %endif6318 +then6316: + %t177 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t177, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.4026, i64 31, i64 0 }, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a178 + %t182 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t181, ptr %a25 + store { ptr, i64, i64 } %t182, ptr %a183 + call void @finch_str_drop(ptr %a183) + br label %endif6318 +endif6318: + %t184 = load ptr, ptr %a1 + %t185 = load %S.ast.Node, ptr %a5 + %t186 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.fail(ptr %t184, %S.ast.Node %t185, { ptr, i64, i64 } %t186) + call void @finch_str_drop(ptr %a25) + ret void +} + +define internal i1 @finch.gen.unify(ptr %p0, ptr %p1, ptr %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca ptr, align 16 + %a3 = alloca ptr, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.ast.Type, align 16 + %a61 = alloca %S.ast.Type, align 16 + %a68 = alloca %S.gen.Val, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca %S.ast.Type, align 16 + %a106 = alloca %S.ast.Type, align 16 + %a113 = alloca %S.gen.Val, align 16 + %a142 = alloca %S.ast.Type, align 16 + %a143 = alloca %S.ast.Type, align 16 + %a149 = alloca %S.gen.Val, align 16 + %a178 = alloca %S.ast.Type, align 16 + %a179 = alloca %S.ast.Type, align 16 + %a185 = alloca %S.gen.Val, align 16 + %a207 = alloca %S.ast.Node, align 16 + %a211 = alloca %S.gen.Val, align 16 + %a233 = alloca %S.ast.Node, align 16 + %a237 = alloca %S.gen.Val, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca %S.ast.Type, align 16 + %a276 = alloca %S.gen.Val, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca %S.ast.Type, align 16 + %a304 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store ptr %p1, ptr %a2 + store ptr %p2, ptr %a3 + %t4 = load ptr, ptr %a2 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic6319, label %ok6320 +panic6319: + call void @finch_panic(ptr @.str.4027, i64 3462, ptr @.str.4028) + unreachable +ok6320: + %t6 = getelementptr inbounds %S.gen.Val, ptr %t4, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %t6 + %t8 = load ptr, ptr %a3 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic6321, label %ok6322 +panic6321: + call void @finch_panic(ptr @.str.4029, i64 3462, ptr @.str.4030) + unreachable +ok6322: + %t10 = getelementptr inbounds %S.gen.Val, ptr %t8, i32 0, i32 1 + %t11 = load %S.ast.Type, ptr %t10 + %t12 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t11) + br i1 %t12, label %then6323, label %endif6325 +then6323: + ret i1 true +endif6325: + %t13 = load ptr, ptr %a2 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic6326, label %ok6327 +panic6326: + call void @finch_panic(ptr @.str.4031, i64 3465, ptr @.str.4032) + unreachable +ok6327: + %t15 = getelementptr inbounds %S.gen.Val, ptr %t13, i32 0, i32 1 + %t16 = load %S.ast.Type, ptr %t15 + %t17 = call i1 @finch.gen.isInt(%S.ast.Type %t16) + br label %logic.from6328 +logic.from6328: + br i1 %t17, label %logic.rhs6329, label %logic.end6330 +logic.rhs6329: + %t18 = load ptr, ptr %a3 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic6331, label %ok6332 +panic6331: + call void @finch_panic(ptr @.str.4033, i64 3465, ptr @.str.4034) + unreachable +ok6332: + %t20 = getelementptr inbounds %S.gen.Val, ptr %t18, i32 0, i32 1 + %t21 = load %S.ast.Type, ptr %t20 + %t22 = call i1 @finch.gen.isInt(%S.ast.Type %t21) + br label %logic.rend6333 +logic.rend6333: + br label %logic.end6330 +logic.end6330: + %t23 = phi i1 [ false, %logic.from6328 ], [ %t22, %logic.rend6333 ] + br i1 %t23, label %then6334, label %endif6336 +then6334: + %t24 = load ptr, ptr %a2 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic6337, label %ok6338 +panic6337: + call void @finch_panic(ptr @.str.4035, i64 3468, ptr @.str.4036) + unreachable +ok6338: + %t26 = getelementptr inbounds %S.gen.Val, ptr %t24, i32 0, i32 3 + %t27 = load i1, ptr %t26 + br label %logic.from6339 +logic.from6339: + br i1 %t27, label %logic.rhs6340, label %logic.end6341 +logic.rhs6340: + %t28 = load ptr, ptr %a3 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic6342, label %ok6343 +panic6342: + call void @finch_panic(ptr @.str.4037, i64 3468, ptr @.str.4038) + unreachable +ok6343: + %t30 = getelementptr inbounds %S.gen.Val, ptr %t28, i32 0, i32 3 + %t31 = load i1, ptr %t30 + %t32 = xor i1 %t31, true + br label %logic.rend6344 +logic.rend6344: + br label %logic.end6341 +logic.end6341: + %t33 = phi i1 [ false, %logic.from6339 ], [ %t32, %logic.rend6344 ] + br label %logic.from6345 +logic.from6345: + br i1 %t33, label %logic.rhs6346, label %logic.end6347 +logic.rhs6346: + %t34 = load ptr, ptr %a2 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic6348, label %ok6349 +panic6348: + call void @finch_panic(ptr @.str.4039, i64 3468, ptr @.str.4040) + unreachable +ok6349: + %t36 = getelementptr inbounds %S.gen.Val, ptr %t34, i32 0, i32 0 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = load ptr, ptr %a2 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic6350, label %ok6351 +panic6350: + call void @finch_panic(ptr @.str.4041, i64 3468, ptr @.str.4042) + unreachable +ok6351: + %t40 = getelementptr inbounds %S.gen.Val, ptr %t38, i32 0, i32 1 + %t41 = load %S.ast.Type, ptr %t40 + %t42 = load ptr, ptr %a3 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic6352, label %ok6353 +panic6352: + call void @finch_panic(ptr @.str.4043, i64 3468, ptr @.str.4044) + unreachable +ok6353: + %t44 = getelementptr inbounds %S.gen.Val, ptr %t42, i32 0, i32 1 + %t45 = load %S.ast.Type, ptr %t44 + %t46 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t37, %S.ast.Type %t41, %S.ast.Type %t45) + br label %logic.rend6354 +logic.rend6354: + br label %logic.end6347 +logic.end6347: + %t47 = phi i1 [ false, %logic.from6345 ], [ %t46, %logic.rend6354 ] + br i1 %t47, label %then6355, label %endif6357 +then6355: + %t48 = load ptr, ptr %a2 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic6358, label %ok6359 +panic6358: + call void @finch_panic(ptr @.str.4045, i64 3469, ptr @.str.4046) + unreachable +ok6359: + %t50 = getelementptr inbounds %S.gen.Val, ptr %t48, i32 0, i32 0 + %t51 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } %t51, ptr %a52 + call void @finch_str_copy(ptr %a53, ptr %a52) + %t54 = load { ptr, i64, i64 }, ptr %a53 + %t55 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t54, 0 + %t56 = load ptr, ptr %a3 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic6360, label %ok6361 +panic6360: + call void @finch_panic(ptr @.str.4047, i64 3469, ptr @.str.4048) + unreachable +ok6361: + %t58 = getelementptr inbounds %S.gen.Val, ptr %t56, i32 0, i32 1 + %t59 = load %S.ast.Type, ptr %t58 + store %S.ast.Type %t59, ptr %a60 + call void @finch.copy.S_ast_Type(ptr %a61, ptr %a60) + %t62 = load %S.ast.Type, ptr %a61 + %t63 = insertvalue %S.gen.Val %t55, %S.ast.Type %t62, 1 + %t64 = insertvalue %S.gen.Val %t63, i1 true, 3 + %t65 = load ptr, ptr %a2 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic6362, label %ok6363 +panic6362: + call void @finch_panic(ptr @.str.4049, i64 3469, ptr @.str.4050) + unreachable +ok6363: + %t67 = load %S.gen.Val, ptr %t65 + store %S.gen.Val %t64, ptr %t65 + store %S.gen.Val %t67, ptr %a68 + call void @finch.drop.S_gen_Val(ptr %a68) + ret i1 true +endif6357: + %t69 = load ptr, ptr %a3 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic6364, label %ok6365 +panic6364: + call void @finch_panic(ptr @.str.4051, i64 3472, ptr @.str.4052) + unreachable +ok6365: + %t71 = getelementptr inbounds %S.gen.Val, ptr %t69, i32 0, i32 3 + %t72 = load i1, ptr %t71 + br label %logic.from6366 +logic.from6366: + br i1 %t72, label %logic.rhs6367, label %logic.end6368 +logic.rhs6367: + %t73 = load ptr, ptr %a2 + %t74 = icmp eq ptr %t73, null + br i1 %t74, label %panic6369, label %ok6370 +panic6369: + call void @finch_panic(ptr @.str.4053, i64 3472, ptr @.str.4054) + unreachable +ok6370: + %t75 = getelementptr inbounds %S.gen.Val, ptr %t73, i32 0, i32 3 + %t76 = load i1, ptr %t75 + %t77 = xor i1 %t76, true + br label %logic.rend6371 +logic.rend6371: + br label %logic.end6368 +logic.end6368: + %t78 = phi i1 [ false, %logic.from6366 ], [ %t77, %logic.rend6371 ] + br label %logic.from6372 +logic.from6372: + br i1 %t78, label %logic.rhs6373, label %logic.end6374 +logic.rhs6373: + %t79 = load ptr, ptr %a3 + %t80 = icmp eq ptr %t79, null + br i1 %t80, label %panic6375, label %ok6376 +panic6375: + call void @finch_panic(ptr @.str.4055, i64 3472, ptr @.str.4056) + unreachable +ok6376: + %t81 = getelementptr inbounds %S.gen.Val, ptr %t79, i32 0, i32 0 + %t82 = load { ptr, i64, i64 }, ptr %t81 + %t83 = load ptr, ptr %a3 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic6377, label %ok6378 +panic6377: + call void @finch_panic(ptr @.str.4057, i64 3472, ptr @.str.4058) + unreachable +ok6378: + %t85 = getelementptr inbounds %S.gen.Val, ptr %t83, i32 0, i32 1 + %t86 = load %S.ast.Type, ptr %t85 + %t87 = load ptr, ptr %a2 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic6379, label %ok6380 +panic6379: + call void @finch_panic(ptr @.str.4059, i64 3472, ptr @.str.4060) + unreachable +ok6380: + %t89 = getelementptr inbounds %S.gen.Val, ptr %t87, i32 0, i32 1 + %t90 = load %S.ast.Type, ptr %t89 + %t91 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t82, %S.ast.Type %t86, %S.ast.Type %t90) + br label %logic.rend6381 +logic.rend6381: + br label %logic.end6374 +logic.end6374: + %t92 = phi i1 [ false, %logic.from6372 ], [ %t91, %logic.rend6381 ] + br i1 %t92, label %then6382, label %endif6384 +then6382: + %t93 = load ptr, ptr %a3 + %t94 = icmp eq ptr %t93, null + br i1 %t94, label %panic6385, label %ok6386 +panic6385: + call void @finch_panic(ptr @.str.4061, i64 3473, ptr @.str.4062) + unreachable +ok6386: + %t95 = getelementptr inbounds %S.gen.Val, ptr %t93, i32 0, i32 0 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_copy(ptr %a98, ptr %a97) + %t99 = load { ptr, i64, i64 }, ptr %a98 + %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 + %t101 = load ptr, ptr %a2 + %t102 = icmp eq ptr %t101, null + br i1 %t102, label %panic6387, label %ok6388 +panic6387: + call void @finch_panic(ptr @.str.4063, i64 3473, ptr @.str.4064) + unreachable +ok6388: + %t103 = getelementptr inbounds %S.gen.Val, ptr %t101, i32 0, i32 1 + %t104 = load %S.ast.Type, ptr %t103 + store %S.ast.Type %t104, ptr %a105 + call void @finch.copy.S_ast_Type(ptr %a106, ptr %a105) + %t107 = load %S.ast.Type, ptr %a106 + %t108 = insertvalue %S.gen.Val %t100, %S.ast.Type %t107, 1 + %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 + %t110 = load ptr, ptr %a3 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic6389, label %ok6390 +panic6389: + call void @finch_panic(ptr @.str.4065, i64 3473, ptr @.str.4066) + unreachable +ok6390: + %t112 = load %S.gen.Val, ptr %t110 + store %S.gen.Val %t109, ptr %t110 + store %S.gen.Val %t112, ptr %a113 + call void @finch.drop.S_gen_Val(ptr %a113) + ret i1 true +endif6384: + %t114 = load ptr, ptr %a2 + %t115 = icmp eq ptr %t114, null + br i1 %t115, label %panic6391, label %ok6392 +panic6391: + call void @finch_panic(ptr @.str.4067, i64 3476, ptr @.str.4068) + unreachable +ok6392: + %t116 = getelementptr inbounds %S.gen.Val, ptr %t114, i32 0, i32 1 + %t117 = load %S.ast.Type, ptr %t116 + %t118 = load ptr, ptr %a3 + %t119 = icmp eq ptr %t118, null + br i1 %t119, label %panic6393, label %ok6394 +panic6393: + call void @finch_panic(ptr @.str.4069, i64 3476, ptr @.str.4070) + unreachable +ok6394: + %t120 = getelementptr inbounds %S.gen.Val, ptr %t118, i32 0, i32 1 + %t121 = load %S.ast.Type, ptr %t120 + %t122 = call i1 @finch.gen.widens(%S.ast.Type %t117, %S.ast.Type %t121) + br i1 %t122, label %then6395, label %endif6397 +then6395: + %t123 = load ptr, ptr %a1 + %t124 = load ptr, ptr %a2 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic6398, label %ok6399 +panic6398: + call void @finch_panic(ptr @.str.4071, i64 3477, ptr @.str.4072) + unreachable +ok6399: + %t126 = getelementptr inbounds %S.gen.Val, ptr %t124, i32 0, i32 0 + %t127 = load { ptr, i64, i64 }, ptr %t126 + %t128 = load ptr, ptr %a2 + %t129 = icmp eq ptr %t128, null + br i1 %t129, label %panic6400, label %ok6401 +panic6400: + call void @finch_panic(ptr @.str.4073, i64 3477, ptr @.str.4074) + unreachable +ok6401: + %t130 = getelementptr inbounds %S.gen.Val, ptr %t128, i32 0, i32 1 + %t131 = load %S.ast.Type, ptr %t130 + %t132 = load ptr, ptr %a3 + %t133 = icmp eq ptr %t132, null + br i1 %t133, label %panic6402, label %ok6403 +panic6402: + call void @finch_panic(ptr @.str.4075, i64 3477, ptr @.str.4076) + unreachable +ok6403: + %t134 = getelementptr inbounds %S.gen.Val, ptr %t132, i32 0, i32 1 + %t135 = load %S.ast.Type, ptr %t134 + %t136 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t123, { ptr, i64, i64 } %t127, %S.ast.Type %t131, %S.ast.Type %t135) + %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t136, 0 + %t138 = load ptr, ptr %a3 + %t139 = icmp eq ptr %t138, null + br i1 %t139, label %panic6404, label %ok6405 +panic6404: + call void @finch_panic(ptr @.str.4077, i64 3477, ptr @.str.4078) + unreachable +ok6405: + %t140 = getelementptr inbounds %S.gen.Val, ptr %t138, i32 0, i32 1 + %t141 = load %S.ast.Type, ptr %t140 + store %S.ast.Type %t141, ptr %a142 + call void @finch.copy.S_ast_Type(ptr %a143, ptr %a142) + %t144 = load %S.ast.Type, ptr %a143 + %t145 = insertvalue %S.gen.Val %t137, %S.ast.Type %t144, 1 + %t146 = load ptr, ptr %a2 + %t147 = icmp eq ptr %t146, null + br i1 %t147, label %panic6406, label %ok6407 +panic6406: + call void @finch_panic(ptr @.str.4079, i64 3477, ptr @.str.4080) + unreachable +ok6407: + %t148 = load %S.gen.Val, ptr %t146 + store %S.gen.Val %t145, ptr %t146 + store %S.gen.Val %t148, ptr %a149 + call void @finch.drop.S_gen_Val(ptr %a149) + ret i1 true +endif6397: + %t150 = load ptr, ptr %a3 + %t151 = icmp eq ptr %t150, null + br i1 %t151, label %panic6408, label %ok6409 +panic6408: + call void @finch_panic(ptr @.str.4081, i64 3480, ptr @.str.4082) + unreachable +ok6409: + %t152 = getelementptr inbounds %S.gen.Val, ptr %t150, i32 0, i32 1 + %t153 = load %S.ast.Type, ptr %t152 + %t154 = load ptr, ptr %a2 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic6410, label %ok6411 +panic6410: + call void @finch_panic(ptr @.str.4083, i64 3480, ptr @.str.4084) + unreachable +ok6411: + %t156 = getelementptr inbounds %S.gen.Val, ptr %t154, i32 0, i32 1 + %t157 = load %S.ast.Type, ptr %t156 + %t158 = call i1 @finch.gen.widens(%S.ast.Type %t153, %S.ast.Type %t157) + br i1 %t158, label %then6412, label %endif6414 +then6412: + %t159 = load ptr, ptr %a1 + %t160 = load ptr, ptr %a3 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic6415, label %ok6416 +panic6415: + call void @finch_panic(ptr @.str.4085, i64 3481, ptr @.str.4086) + unreachable +ok6416: + %t162 = getelementptr inbounds %S.gen.Val, ptr %t160, i32 0, i32 0 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = load ptr, ptr %a3 + %t165 = icmp eq ptr %t164, null + br i1 %t165, label %panic6417, label %ok6418 +panic6417: + call void @finch_panic(ptr @.str.4087, i64 3481, ptr @.str.4088) + unreachable +ok6418: + %t166 = getelementptr inbounds %S.gen.Val, ptr %t164, i32 0, i32 1 + %t167 = load %S.ast.Type, ptr %t166 + %t168 = load ptr, ptr %a2 + %t169 = icmp eq ptr %t168, null + br i1 %t169, label %panic6419, label %ok6420 +panic6419: + call void @finch_panic(ptr @.str.4089, i64 3481, ptr @.str.4090) + unreachable +ok6420: + %t170 = getelementptr inbounds %S.gen.Val, ptr %t168, i32 0, i32 1 + %t171 = load %S.ast.Type, ptr %t170 + %t172 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t159, { ptr, i64, i64 } %t163, %S.ast.Type %t167, %S.ast.Type %t171) + %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 + %t174 = load ptr, ptr %a2 + %t175 = icmp eq ptr %t174, null + br i1 %t175, label %panic6421, label %ok6422 +panic6421: + call void @finch_panic(ptr @.str.4091, i64 3481, ptr @.str.4092) + unreachable +ok6422: + %t176 = getelementptr inbounds %S.gen.Val, ptr %t174, i32 0, i32 1 + %t177 = load %S.ast.Type, ptr %t176 + store %S.ast.Type %t177, ptr %a178 + call void @finch.copy.S_ast_Type(ptr %a179, ptr %a178) + %t180 = load %S.ast.Type, ptr %a179 + %t181 = insertvalue %S.gen.Val %t173, %S.ast.Type %t180, 1 + %t182 = load ptr, ptr %a3 + %t183 = icmp eq ptr %t182, null + br i1 %t183, label %panic6423, label %ok6424 +panic6423: + call void @finch_panic(ptr @.str.4093, i64 3481, ptr @.str.4094) + unreachable +ok6424: + %t184 = load %S.gen.Val, ptr %t182 + store %S.gen.Val %t181, ptr %t182 + store %S.gen.Val %t184, ptr %a185 + call void @finch.drop.S_gen_Val(ptr %a185) + ret i1 true +endif6414: + ret i1 false +endif6336: + %t186 = load ptr, ptr %a2 + %t187 = icmp eq ptr %t186, null + br i1 %t187, label %panic6425, label %ok6426 +panic6425: + call void @finch_panic(ptr @.str.4095, i64 3486, ptr @.str.4096) + unreachable +ok6426: + %t188 = getelementptr inbounds %S.gen.Val, ptr %t186, i32 0, i32 1 + %t189 = load %S.ast.Type, ptr %t188 + %t190 = call i1 @finch.gen.isInt(%S.ast.Type %t189) + br label %logic.from6427 +logic.from6427: + br i1 %t190, label %logic.rhs6428, label %logic.end6429 +logic.rhs6428: + %t191 = load ptr, ptr %a3 + %t192 = icmp eq ptr %t191, null + br i1 %t192, label %panic6430, label %ok6431 +panic6430: + call void @finch_panic(ptr @.str.4097, i64 3486, ptr @.str.4098) + unreachable +ok6431: + %t193 = getelementptr inbounds %S.gen.Val, ptr %t191, i32 0, i32 1 + %t194 = load %S.ast.Type, ptr %t193 + %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) + br label %logic.rend6432 +logic.rend6432: + br label %logic.end6429 +logic.end6429: + %t196 = phi i1 [ false, %logic.from6427 ], [ %t195, %logic.rend6432 ] + br i1 %t196, label %then6433, label %endif6435 +then6433: + %t197 = load ptr, ptr %a1 + %t198 = load ptr, ptr %a2 + %t199 = icmp eq ptr %t198, null + br i1 %t199, label %panic6436, label %ok6437 +panic6436: + call void @finch_panic(ptr @.str.4099, i64 3487, ptr @.str.4100) + unreachable +ok6437: + %t200 = load %S.gen.Val, ptr %t198 + %t201 = load ptr, ptr %a3 + %t202 = icmp eq ptr %t201, null + br i1 %t202, label %panic6438, label %ok6439 +panic6438: + call void @finch_panic(ptr @.str.4101, i64 3487, ptr @.str.4102) + unreachable +ok6439: + %t203 = getelementptr inbounds %S.gen.Val, ptr %t201, i32 0, i32 1 + %t204 = load %S.ast.Type, ptr %t203 + %t205 = call %S.ast.Node @finch.gen.Node0() + %t206 = call %S.gen.Val @finch.gen.coerce(ptr %t197, %S.gen.Val %t200, %S.ast.Type %t204, %S.ast.Node %t205, { ptr, i64, i64 } { ptr @.str.4103, i64 0, i64 0 }) + store %S.ast.Node %t205, ptr %a207 + call void @finch.drop.S_ast_Node(ptr %a207) + %t208 = load ptr, ptr %a2 + %t209 = icmp eq ptr %t208, null + br i1 %t209, label %panic6440, label %ok6441 +panic6440: + call void @finch_panic(ptr @.str.4104, i64 3487, ptr @.str.4105) + unreachable +ok6441: + %t210 = load %S.gen.Val, ptr %t208 + store %S.gen.Val %t206, ptr %t208 + store %S.gen.Val %t210, ptr %a211 + call void @finch.drop.S_gen_Val(ptr %a211) + ret i1 true +endif6435: + %t212 = load ptr, ptr %a2 + %t213 = icmp eq ptr %t212, null + br i1 %t213, label %panic6442, label %ok6443 +panic6442: + call void @finch_panic(ptr @.str.4106, i64 3490, ptr @.str.4107) + unreachable +ok6443: + %t214 = getelementptr inbounds %S.gen.Val, ptr %t212, i32 0, i32 1 + %t215 = load %S.ast.Type, ptr %t214 + %t216 = call i1 @finch.gen.isFloat(%S.ast.Type %t215) + br label %logic.from6444 +logic.from6444: + br i1 %t216, label %logic.rhs6445, label %logic.end6446 +logic.rhs6445: + %t217 = load ptr, ptr %a3 + %t218 = icmp eq ptr %t217, null + br i1 %t218, label %panic6447, label %ok6448 +panic6447: + call void @finch_panic(ptr @.str.4108, i64 3490, ptr @.str.4109) + unreachable +ok6448: + %t219 = getelementptr inbounds %S.gen.Val, ptr %t217, i32 0, i32 1 + %t220 = load %S.ast.Type, ptr %t219 + %t221 = call i1 @finch.gen.isInt(%S.ast.Type %t220) + br label %logic.rend6449 +logic.rend6449: + br label %logic.end6446 +logic.end6446: + %t222 = phi i1 [ false, %logic.from6444 ], [ %t221, %logic.rend6449 ] + br i1 %t222, label %then6450, label %endif6452 +then6450: + %t223 = load ptr, ptr %a1 + %t224 = load ptr, ptr %a3 + %t225 = icmp eq ptr %t224, null + br i1 %t225, label %panic6453, label %ok6454 +panic6453: + call void @finch_panic(ptr @.str.4110, i64 3491, ptr @.str.4111) + unreachable +ok6454: + %t226 = load %S.gen.Val, ptr %t224 + %t227 = load ptr, ptr %a2 + %t228 = icmp eq ptr %t227, null + br i1 %t228, label %panic6455, label %ok6456 +panic6455: + call void @finch_panic(ptr @.str.4112, i64 3491, ptr @.str.4113) + unreachable +ok6456: + %t229 = getelementptr inbounds %S.gen.Val, ptr %t227, i32 0, i32 1 + %t230 = load %S.ast.Type, ptr %t229 + %t231 = call %S.ast.Node @finch.gen.Node0() + %t232 = call %S.gen.Val @finch.gen.coerce(ptr %t223, %S.gen.Val %t226, %S.ast.Type %t230, %S.ast.Node %t231, { ptr, i64, i64 } { ptr @.str.4114, i64 0, i64 0 }) + store %S.ast.Node %t231, ptr %a233 + call void @finch.drop.S_ast_Node(ptr %a233) + %t234 = load ptr, ptr %a3 + %t235 = icmp eq ptr %t234, null + br i1 %t235, label %panic6457, label %ok6458 +panic6457: + call void @finch_panic(ptr @.str.4115, i64 3491, ptr @.str.4116) + unreachable +ok6458: + %t236 = load %S.gen.Val, ptr %t234 + store %S.gen.Val %t232, ptr %t234 + store %S.gen.Val %t236, ptr %a237 + call void @finch.drop.S_gen_Val(ptr %a237) + ret i1 true +endif6452: + %t238 = load ptr, ptr %a2 + %t239 = icmp eq ptr %t238, null + br i1 %t239, label %panic6459, label %ok6460 +panic6459: + call void @finch_panic(ptr @.str.4117, i64 3494, ptr @.str.4118) + unreachable +ok6460: + %t240 = getelementptr inbounds %S.gen.Val, ptr %t238, i32 0, i32 1 + %t241 = load %S.ast.Type, ptr %t240 + %t242 = call i1 @finch.gen.isFloat(%S.ast.Type %t241) + br label %logic.from6461 +logic.from6461: + br i1 %t242, label %logic.rhs6462, label %logic.end6463 +logic.rhs6462: + %t243 = load ptr, ptr %a3 + %t244 = icmp eq ptr %t243, null + br i1 %t244, label %panic6464, label %ok6465 +panic6464: + call void @finch_panic(ptr @.str.4119, i64 3494, ptr @.str.4120) + unreachable +ok6465: + %t245 = getelementptr inbounds %S.gen.Val, ptr %t243, i32 0, i32 1 + %t246 = load %S.ast.Type, ptr %t245 + %t247 = call i1 @finch.gen.isFloat(%S.ast.Type %t246) + br label %logic.rend6466 +logic.rend6466: + br label %logic.end6463 +logic.end6463: + %t248 = phi i1 [ false, %logic.from6461 ], [ %t247, %logic.rend6466 ] + br i1 %t248, label %then6467, label %endif6469 +then6467: + %t249 = load ptr, ptr %a2 + %t250 = icmp eq ptr %t249, null + br i1 %t250, label %panic6470, label %ok6471 +panic6470: + call void @finch_panic(ptr @.str.4121, i64 3495, ptr @.str.4122) + unreachable +ok6471: + %t251 = getelementptr inbounds %S.gen.Val, ptr %t249, i32 0, i32 1 + %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.4123, i64 3, i64 0 }, ptr %a255 + %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) + %t257 = icmp ne i32 %t256, 0 + br i1 %t257, label %then6472, label %endif6474 +then6472: + %t258 = load ptr, ptr %a1 + %t259 = load ptr, ptr %a2 + %t260 = icmp eq ptr %t259, null + br i1 %t260, label %panic6475, label %ok6476 +panic6475: + call void @finch_panic(ptr @.str.4124, i64 3496, ptr @.str.4125) + unreachable +ok6476: + %t261 = getelementptr inbounds %S.gen.Val, ptr %t259, i32 0, i32 0 + %t262 = load { ptr, i64, i64 }, ptr %t261 + %t263 = load ptr, ptr %a2 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic6477, label %ok6478 +panic6477: + call void @finch_panic(ptr @.str.4126, i64 3496, ptr @.str.4127) + unreachable +ok6478: + %t265 = getelementptr inbounds %S.gen.Val, ptr %t263, i32 0, i32 1 + %t266 = load %S.ast.Type, ptr %t265 + %t267 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4128, i64 5, i64 0 }) + %t268 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t258, { ptr, i64, i64 } %t262, %S.ast.Type %t266, %S.ast.Type %t267) + store %S.ast.Type %t267, ptr %a269 + call void @finch.drop.S_ast_Type(ptr %a269) + %t270 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t268, 0 + %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4129, i64 5, i64 0 }) + %t272 = insertvalue %S.gen.Val %t270, %S.ast.Type %t271, 1 + %t273 = load ptr, ptr %a2 + %t274 = icmp eq ptr %t273, null + br i1 %t274, label %panic6479, label %ok6480 +panic6479: + call void @finch_panic(ptr @.str.4130, i64 3496, ptr @.str.4131) + unreachable +ok6480: + %t275 = load %S.gen.Val, ptr %t273 + store %S.gen.Val %t272, ptr %t273 + store %S.gen.Val %t275, ptr %a276 + call void @finch.drop.S_gen_Val(ptr %a276) + br label %endif6474 +endif6474: + %t277 = load ptr, ptr %a3 + %t278 = icmp eq ptr %t277, null + br i1 %t278, label %panic6481, label %ok6482 +panic6481: + call void @finch_panic(ptr @.str.4132, i64 3498, ptr @.str.4133) + unreachable +ok6482: + %t279 = getelementptr inbounds %S.gen.Val, ptr %t277, i32 0, i32 1 + %t280 = getelementptr inbounds %S.ast.Type, ptr %t279, i32 0, i32 0 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.4134, i64 3, i64 0 }, ptr %a283 + %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) + %t285 = icmp ne i32 %t284, 0 + br i1 %t285, label %then6483, label %endif6485 +then6483: + %t286 = load ptr, ptr %a1 + %t287 = load ptr, ptr %a3 + %t288 = icmp eq ptr %t287, null + br i1 %t288, label %panic6486, label %ok6487 +panic6486: + call void @finch_panic(ptr @.str.4135, i64 3499, ptr @.str.4136) + unreachable +ok6487: + %t289 = getelementptr inbounds %S.gen.Val, ptr %t287, i32 0, i32 0 + %t290 = load { ptr, i64, i64 }, ptr %t289 + %t291 = load ptr, ptr %a3 + %t292 = icmp eq ptr %t291, null + br i1 %t292, label %panic6488, label %ok6489 +panic6488: + call void @finch_panic(ptr @.str.4137, i64 3499, ptr @.str.4138) + unreachable +ok6489: + %t293 = getelementptr inbounds %S.gen.Val, ptr %t291, i32 0, i32 1 + %t294 = load %S.ast.Type, ptr %t293 + %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4139, i64 5, i64 0 }) + %t296 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t286, { ptr, i64, i64 } %t290, %S.ast.Type %t294, %S.ast.Type %t295) + store %S.ast.Type %t295, ptr %a297 + call void @finch.drop.S_ast_Type(ptr %a297) + %t298 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t296, 0 + %t299 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4140, i64 5, i64 0 }) + %t300 = insertvalue %S.gen.Val %t298, %S.ast.Type %t299, 1 + %t301 = load ptr, ptr %a3 + %t302 = icmp eq ptr %t301, null + br i1 %t302, label %panic6490, label %ok6491 +panic6490: + call void @finch_panic(ptr @.str.4141, i64 3499, ptr @.str.4142) + unreachable +ok6491: + %t303 = load %S.gen.Val, ptr %t301 + store %S.gen.Val %t300, ptr %t301 + store %S.gen.Val %t303, ptr %a304 + call void @finch.drop.S_gen_Val(ptr %a304) + br label %endif6485 +endif6485: + ret i1 true +endif6469: + ret i1 false +} + +define internal %S.ast.Node @finch.gen.Node0() { +entry: + + ret %S.ast.Node zeroinitializer +} + +define internal %S.gen.Val @finch.gen.arith(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.gen.Val, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a6 = alloca %S.gen.Val, align 16 + %a7 = alloca %S.gen.Val, align 16 + %a8 = alloca %S.gen.Val, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca i64, align 16 + %a155 = alloca i64, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca i64, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca %S.ast.Type, align 16 + %a280 = alloca %S.ast.Type, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca i64, align 16 + %a313 = alloca i64, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca i64, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca %S.ast.Type, align 16 + %a384 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.gen.Val %p2, ptr %a3 + call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) + %t5 = load %S.gen.Val, ptr %a4 + store %S.gen.Val %t5, ptr %a6 + store %S.gen.Val %p3, ptr %a7 + call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) + %t9 = load %S.gen.Val, ptr %a8 + store %S.gen.Val %t9, ptr %a10 + store %S.ast.Node %p4, ptr %a11 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.4143, i64 1, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from6492 +logic.from6492: + br i1 %t16, label %logic.rhs6493, label %logic.end6494 +logic.rhs6493: + %t17 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t18 = getelementptr inbounds %S.ast.Type, ptr %t17, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.4144, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend6495 +logic.rend6495: + br label %logic.end6494 +logic.end6494: + %t24 = phi i1 [ false, %logic.from6492 ], [ %t23, %logic.rend6495 ] + br label %logic.from6496 +logic.from6496: + br i1 %t24, label %logic.rhs6497, label %logic.end6498 +logic.rhs6497: + %t25 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t26 = getelementptr inbounds %S.ast.Type, ptr %t25, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.4145, i64 3, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend6499 +logic.rend6499: + br label %logic.end6498 +logic.end6498: + %t32 = phi i1 [ false, %logic.from6496 ], [ %t31, %logic.rend6499 ] + br i1 %t32, label %then6500, label %endif6502 +then6500: + %t33 = load ptr, ptr %a1 + %t34 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t33, { ptr, i64, i64 } { ptr @.str.4146, i64 17, i64 0 }) + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = load ptr, ptr %a1 + %t37 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.4147, i64 32, i64 0 }, ptr %a39 + store { ptr, i64, i64 } %t37, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.4148, i64 6, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t41, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = load ptr, ptr %a1 + %t48 = load %S.gen.Val, ptr %a6 + %t49 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t47, %S.gen.Val %t48) + store { ptr, i64, i64 } %t46, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t46, ptr %a53 + call void @finch_str_drop(ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.4149, i64 6, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load ptr, ptr %a1 + %t62 = load %S.gen.Val, ptr %a10 + %t63 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t61, %S.gen.Val %t62) + store { ptr, i64, i64 } %t60, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t60, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.4150, i64 1, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + call void @finch.gen.emit(ptr %t36, { ptr, i64, i64 } %t74) + store { ptr, i64, i64 } %t74, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load ptr, ptr %a1 + %t77 = load %S.gen.Val, ptr %a6 + call void @finch.gen.release(ptr %t76, %S.gen.Val %t77) + %t78 = load ptr, ptr %a1 + %t79 = load %S.gen.Val, ptr %a10 + call void @finch.gen.release(ptr %t78, %S.gen.Val %t79) + %t80 = load ptr, ptr %a1 + %t81 = load { ptr, i64, i64 }, ptr %a35 + %t82 = call { ptr, i64, i64 } @finch.gen.load(ptr %t80, { ptr, i64, i64 } { ptr @.str.4151, i64 17, i64 0 }, { ptr, i64, i64 } %t81) + %t83 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t82, 0 + %t84 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4152, i64 3, i64 0 }) + %t85 = insertvalue %S.gen.Val %t83, %S.ast.Type %t84, 1 + %t86 = insertvalue %S.gen.Val %t85, i1 true, 2 + call void @finch_str_drop(ptr %a35) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t86 +endif6502: + %t87 = load ptr, ptr %a1 + %t88 = call i1 @finch.gen.unify(ptr %t87, ptr %a6, ptr %a10) + %t89 = xor i1 %t88, true + br i1 %t89, label %then6503, label %endif6505 +then6503: + %t90 = load ptr, ptr %a1 + %t91 = load { ptr, i64, i64 }, ptr %a2 + %t92 = load %S.gen.Val, ptr %a6 + %t93 = load %S.gen.Val, ptr %a10 + %t94 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t90, { ptr, i64, i64 } %t91, %S.gen.Val %t92, %S.gen.Val %t93, %S.ast.Node %t94) + br label %endif6505 +endif6505: + %t95 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t96 = load %S.ast.Type, ptr %t95 + %t97 = call i1 @finch.gen.isInt(%S.ast.Type %t96) + br i1 %t97, label %then6506, label %endif6508 +then6506: + %t98 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t99 = call ptr @finch_alloc(i64 %t98) + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 0 + store { ptr, i64, i64 } { ptr @.str.4153, i64 1, i64 0 }, ptr %t100 + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 1 + store { ptr, i64, i64 } { ptr @.str.4154, i64 1, i64 0 }, ptr %t101 + %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 2 + store { ptr, i64, i64 } { ptr @.str.4155, i64 1, i64 0 }, ptr %t102 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 3 + store { ptr, i64, i64 } { ptr @.str.4156, i64 1, i64 0 }, ptr %t103 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 4 + store { ptr, i64, i64 } { ptr @.str.4157, i64 1, i64 0 }, ptr %t104 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 5 + store { ptr, i64, i64 } { ptr @.str.4158, i64 1, i64 0 }, ptr %t105 + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 6 + store { ptr, i64, i64 } { ptr @.str.4159, i64 1, i64 0 }, ptr %t106 + %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 7 + store { ptr, i64, i64 } { ptr @.str.4160, i64 1, i64 0 }, ptr %t107 + %t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 8 + store { ptr, i64, i64 } { ptr @.str.4161, i64 2, i64 0 }, ptr %t108 + %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 9 + store { ptr, i64, i64 } { ptr @.str.4162, i64 2, i64 0 }, ptr %t109 + %t110 = insertvalue { ptr, i64, i64 } undef, ptr %t99, 0 + %t111 = insertvalue { ptr, i64, i64 } %t110, i64 10, 1 + %t112 = insertvalue { ptr, i64, i64 } %t111, i64 10, 2 + store { ptr, i64, i64 } %t112, ptr %a113 + %t114 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t115 = call ptr @finch_alloc(i64 %t114) + %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 0 + store { ptr, i64, i64 } { ptr @.str.4163, i64 3, i64 0 }, ptr %t116 + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 1 + store { ptr, i64, i64 } { ptr @.str.4164, i64 3, i64 0 }, ptr %t117 + %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 2 + store { ptr, i64, i64 } { ptr @.str.4165, i64 3, i64 0 }, ptr %t118 + %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 3 + store { ptr, i64, i64 } { ptr @.str.4166, i64 4, i64 0 }, ptr %t119 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 4 + store { ptr, i64, i64 } { ptr @.str.4167, i64 4, i64 0 }, ptr %t120 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 5 + store { ptr, i64, i64 } { ptr @.str.4168, i64 3, i64 0 }, ptr %t121 + %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 6 + store { ptr, i64, i64 } { ptr @.str.4169, i64 2, i64 0 }, ptr %t122 + %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 7 + store { ptr, i64, i64 } { ptr @.str.4170, i64 3, i64 0 }, ptr %t123 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 8 + store { ptr, i64, i64 } { ptr @.str.4171, i64 3, i64 0 }, ptr %t124 + %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 9 + store { ptr, i64, i64 } { ptr @.str.4172, i64 4, i64 0 }, ptr %t125 + %t126 = insertvalue { ptr, i64, i64 } undef, ptr %t115, 0 + %t127 = insertvalue { ptr, i64, i64 } %t126, i64 10, 1 + %t128 = insertvalue { ptr, i64, i64 } %t127, i64 10, 2 + store { ptr, i64, i64 } %t128, ptr %a129 + %t130 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t131 = load %S.ast.Type, ptr %t130 + %t132 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t131) + br i1 %t132, label %then6509, label %endif6511 +then6509: + %t133 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t134 = call ptr @finch_alloc(i64 %t133) + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 0 + store { ptr, i64, i64 } { ptr @.str.4173, i64 3, i64 0 }, ptr %t135 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 1 + store { ptr, i64, i64 } { ptr @.str.4174, i64 3, i64 0 }, ptr %t136 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 2 + store { ptr, i64, i64 } { ptr @.str.4175, i64 3, i64 0 }, ptr %t137 + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 3 + store { ptr, i64, i64 } { ptr @.str.4176, i64 4, i64 0 }, ptr %t138 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 4 + store { ptr, i64, i64 } { ptr @.str.4177, i64 4, i64 0 }, ptr %t139 + %t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 5 + store { ptr, i64, i64 } { ptr @.str.4178, i64 3, i64 0 }, ptr %t140 + %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 6 + store { ptr, i64, i64 } { ptr @.str.4179, i64 2, i64 0 }, ptr %t141 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 7 + store { ptr, i64, i64 } { ptr @.str.4180, i64 3, i64 0 }, ptr %t142 + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 8 + store { ptr, i64, i64 } { ptr @.str.4181, i64 3, i64 0 }, ptr %t143 + %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 9 + store { ptr, i64, i64 } { ptr @.str.4182, i64 4, i64 0 }, ptr %t144 + %t145 = insertvalue { ptr, i64, i64 } undef, ptr %t134, 0 + %t146 = insertvalue { ptr, i64, i64 } %t145, i64 10, 1 + %t147 = insertvalue { ptr, i64, i64 } %t146, i64 10, 2 + %t148 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t147, ptr %a129 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch.drop.arr_str(ptr %a149) + br label %endif6511 +endif6511: + %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t151 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a152 + %t153 = load i64, ptr %t150 + %t154 = load ptr, ptr %a113 + store i64 0, ptr %a155 + br label %find.cond6512 +find.cond6512: + %t156 = load i64, ptr %a155 + %t157 = icmp slt i64 %t156, %t153 + br i1 %t157, label %find.body6513, label %find.end6516 +find.body6513: + %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i64 %t156 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } %t151, ptr %a161 + %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) + %t163 = icmp ne i32 %t162, 0 + br i1 %t163, label %find.hit6514, label %find.next6515 +find.hit6514: + store i64 %t156, ptr %a152 + br label %find.end6516 +find.next6515: + %t164 = add i64 %t156, 1 + store i64 %t164, ptr %a155 + br label %find.cond6512 +find.end6516: + %t165 = load i64, ptr %a152 + store i64 %t165, ptr %a166 + %t167 = load i64, ptr %a166 + %t168 = icmp slt i64 %t167, 0 + br i1 %t168, label %then6517, label %endif6519 +then6517: + %t169 = load ptr, ptr %a1 + %t170 = load { ptr, i64, i64 }, ptr %a2 + %t171 = load %S.gen.Val, ptr %a6 + %t172 = load %S.gen.Val, ptr %a10 + %t173 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t169, { ptr, i64, i64 } %t170, %S.gen.Val %t171, %S.gen.Val %t172, %S.ast.Node %t173) + br label %endif6519 +endif6519: + %t174 = load ptr, ptr %a1 + %t175 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t176 = load %S.ast.Type, ptr %t175 + %t177 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t174, %S.ast.Type %t176) + store { ptr, i64, i64 } %t177, ptr %a178 + %t179 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t179, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.4183, i64 1, i64 0 }, ptr %a181 + %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + br label %logic.from6520 +logic.from6520: + br i1 %t183, label %logic.end6522, label %logic.rhs6521 +logic.rhs6521: + %t184 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } { ptr @.str.4184, i64 1, i64 0 }, ptr %a186 + %t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186) + %t188 = icmp ne i32 %t187, 0 + br label %logic.rend6523 +logic.rend6523: + br label %logic.end6522 +logic.end6522: + %t189 = phi i1 [ true, %logic.from6520 ], [ %t188, %logic.rend6523 ] + br i1 %t189, label %then6524, label %endif6526 +then6524: + %t190 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 + %t191 = load i1, ptr %t190 + br label %logic.from6527 +logic.from6527: + br i1 %t191, label %logic.rhs6528, label %logic.end6529 +logic.rhs6528: + %t192 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + store { ptr, i64, i64 } %t193, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.4185, i64 1, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br label %logic.rend6530 +logic.rend6530: + br label %logic.end6529 +logic.end6529: + %t198 = phi i1 [ false, %logic.from6527 ], [ %t197, %logic.rend6530 ] + br i1 %t198, label %then6531, label %endif6533 +then6531: + %t199 = load ptr, ptr %a1 + %t200 = load %S.ast.Node, ptr %a11 + call void @finch.gen.fail(ptr %t199, %S.ast.Node %t200, { ptr, i64, i64 } { ptr @.str.4186, i64 16, i64 0 }) + br label %endif6533 +endif6533: + %t201 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 + %t202 = load i1, ptr %t201 + %t203 = xor i1 %t202, true + br i1 %t203, label %then6534, label %endif6536 +then6534: + %t204 = load ptr, ptr %a1 + %t205 = load ptr, ptr %a1 + %t206 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.4187, i64 8, i64 0 }, ptr %a208 + store { ptr, i64, i64 } %t206, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a207 + store { ptr, i64, i64 } %t210, ptr %a212 + store { ptr, i64, i64 } { ptr @.str.4188, i64 1, i64 0 }, ptr %a213 + call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) + store { ptr, i64, i64 } %t210, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a211 + %t216 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t215, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t215, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.4189, i64 3, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = call { ptr, i64, i64 } @finch.gen.op(ptr %t205, { ptr, i64, i64 } %t227) + store { ptr, i64, i64 } %t227, ptr %a229 + call void @finch_str_drop(ptr %a229) + %t230 = load %S.ast.Node, ptr %a11 + call void @finch.gen.panicIf(ptr %t204, { ptr, i64, i64 } %t228, { ptr, i64, i64 } { ptr @.str.4190, i64 16, i64 0 }, %S.ast.Node %t230) + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_drop(ptr %a231) + br label %endif6536 +endif6536: + br label %endif6526 +endif6526: + %t232 = load ptr, ptr %a1 + %t233 = load i64, ptr %a166 + %t234 = load { ptr, i64, i64 }, ptr %a129 + %t235 = extractvalue { ptr, i64, i64 } %t234, 1 + %t236 = icmp uge i64 %t233, %t235 + br i1 %t236, label %range6537, label %inrange6538 +range6537: + call void @finch_panic_index(ptr @.str.4191, i64 3540, i64 %t233, i64 %t235) + unreachable +inrange6538: + %t237 = extractvalue { ptr, i64, i64 } %t234, 0 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t233 + %t239 = load { ptr, i64, i64 }, ptr %t238 + store { ptr, i64, i64 } %t239, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.4192, i64 1, i64 0 }, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a240 + %t244 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t243, ptr %a246 + store { ptr, i64, i64 } %t244, ptr %a247 + call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) + store { ptr, i64, i64 } %t243, ptr %a248 + call void @finch_str_drop(ptr %a248) + %t249 = load { ptr, i64, i64 }, ptr %a245 + store { ptr, i64, i64 } %t249, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.4193, i64 1, i64 0 }, ptr %a252 + call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) + store { ptr, i64, i64 } %t249, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a250 + %t255 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t256 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t254, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t254, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t261, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.4194, i64 2, i64 0 }, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t261, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + %t267 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t266, ptr %a270 + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t266, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + %t274 = call { ptr, i64, i64 } @finch.gen.op(ptr %t232, { ptr, i64, i64 } %t273) + store { ptr, i64, i64 } %t273, ptr %a275 + call void @finch_str_drop(ptr %a275) + %t276 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t274, 0 + %t277 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t278 = load %S.ast.Type, ptr %t277 + store %S.ast.Type %t278, ptr %a279 + call void @finch.copy.S_ast_Type(ptr %a280, ptr %a279) + %t281 = load %S.ast.Type, ptr %a280 + %t282 = insertvalue %S.gen.Val %t276, %S.ast.Type %t281, 1 + call void @finch_str_drop(ptr %a178) + call void @finch.drop.arr_str(ptr %a129) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t282 +endif6508: + %t283 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t284 = load %S.ast.Type, ptr %t283 + %t285 = call i1 @finch.gen.isFloat(%S.ast.Type %t284) + br i1 %t285, label %then6539, label %endif6541 +then6539: + %t286 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t287 = call ptr @finch_alloc(i64 %t286) + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 0 + store { ptr, i64, i64 } { ptr @.str.4195, i64 1, i64 0 }, ptr %t288 + %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 1 + store { ptr, i64, i64 } { ptr @.str.4196, i64 1, i64 0 }, ptr %t289 + %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 2 + store { ptr, i64, i64 } { ptr @.str.4197, i64 1, i64 0 }, ptr %t290 + %t291 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 3 + store { ptr, i64, i64 } { ptr @.str.4198, i64 1, i64 0 }, ptr %t291 + %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 4 + store { ptr, i64, i64 } { ptr @.str.4199, i64 1, i64 0 }, ptr %t292 + %t293 = insertvalue { ptr, i64, i64 } undef, ptr %t287, 0 + %t294 = insertvalue { ptr, i64, i64 } %t293, i64 5, 1 + %t295 = insertvalue { ptr, i64, i64 } %t294, i64 5, 2 + store { ptr, i64, i64 } %t295, ptr %a296 + %t297 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t298 = call ptr @finch_alloc(i64 %t297) + %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 0 + store { ptr, i64, i64 } { ptr @.str.4200, i64 4, i64 0 }, ptr %t299 + %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 1 + store { ptr, i64, i64 } { ptr @.str.4201, i64 4, i64 0 }, ptr %t300 + %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 2 + store { ptr, i64, i64 } { ptr @.str.4202, i64 4, i64 0 }, ptr %t301 + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 3 + store { ptr, i64, i64 } { ptr @.str.4203, i64 4, i64 0 }, ptr %t302 + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 4 + store { ptr, i64, i64 } { ptr @.str.4204, i64 4, i64 0 }, ptr %t303 + %t304 = insertvalue { ptr, i64, i64 } undef, ptr %t298, 0 + %t305 = insertvalue { ptr, i64, i64 } %t304, i64 5, 1 + %t306 = insertvalue { ptr, i64, i64 } %t305, i64 5, 2 + store { ptr, i64, i64 } %t306, ptr %a307 + %t308 = getelementptr inbounds { ptr, i64, i64 }, ptr %a296, i32 0, i32 1 + %t309 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a310 + %t311 = load i64, ptr %t308 + %t312 = load ptr, ptr %a296 + store i64 0, ptr %a313 + br label %find.cond6542 +find.cond6542: + %t314 = load i64, ptr %a313 + %t315 = icmp slt i64 %t314, %t311 + br i1 %t315, label %find.body6543, label %find.end6546 +find.body6543: + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t312, i64 %t314 + %t317 = load { ptr, i64, i64 }, ptr %t316 + store { ptr, i64, i64 } %t317, ptr %a318 + store { ptr, i64, i64 } %t309, ptr %a319 + %t320 = call i32 @finch_str_eq(ptr %a318, ptr %a319) + %t321 = icmp ne i32 %t320, 0 + br i1 %t321, label %find.hit6544, label %find.next6545 +find.hit6544: + store i64 %t314, ptr %a310 + br label %find.end6546 +find.next6545: + %t322 = add i64 %t314, 1 + store i64 %t322, ptr %a313 + br label %find.cond6542 +find.end6546: + %t323 = load i64, ptr %a310 + store i64 %t323, ptr %a324 + %t325 = load i64, ptr %a324 + %t326 = icmp slt i64 %t325, 0 + br i1 %t326, label %then6547, label %endif6549 +then6547: + %t327 = load ptr, ptr %a1 + %t328 = load { ptr, i64, i64 }, ptr %a2 + %t329 = load %S.gen.Val, ptr %a6 + %t330 = load %S.gen.Val, ptr %a10 + %t331 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t327, { ptr, i64, i64 } %t328, %S.gen.Val %t329, %S.gen.Val %t330, %S.ast.Node %t331) + br label %endif6549 +endif6549: + %t332 = load ptr, ptr %a1 + %t333 = load i64, ptr %a324 + %t334 = load { ptr, i64, i64 }, ptr %a307 + %t335 = extractvalue { ptr, i64, i64 } %t334, 1 + %t336 = icmp uge i64 %t333, %t335 + br i1 %t336, label %range6550, label %inrange6551 +range6550: + call void @finch_panic_index(ptr @.str.4205, i64 3549, i64 %t333, i64 %t335) + unreachable +inrange6551: + %t337 = extractvalue { ptr, i64, i64 } %t334, 0 + %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t333 + %t339 = load { ptr, i64, i64 }, ptr %t338 + store { ptr, i64, i64 } %t339, ptr %a341 + store { ptr, i64, i64 } { ptr @.str.4206, i64 1, i64 0 }, ptr %a342 + call void @finch_str_concat(ptr %a340, ptr %a341, ptr %a342) + %t343 = load { ptr, i64, i64 }, ptr %a340 + %t344 = load ptr, ptr %a1 + %t345 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t346 = load %S.ast.Type, ptr %t345 + %t347 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t344, %S.ast.Type %t346) + store { ptr, i64, i64 } %t343, ptr %a349 + store { ptr, i64, i64 } %t347, ptr %a350 + call void @finch_str_concat(ptr %a348, ptr %a349, ptr %a350) + store { ptr, i64, i64 } %t343, ptr %a351 + call void @finch_str_drop(ptr %a351) + store { ptr, i64, i64 } %t347, ptr %a352 + call void @finch_str_drop(ptr %a352) + %t353 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t353, ptr %a355 + store { ptr, i64, i64 } { ptr @.str.4207, i64 1, i64 0 }, ptr %a356 + call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356) + store { ptr, i64, i64 } %t353, ptr %a357 + call void @finch_str_drop(ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a354 + %t359 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t360 = load { ptr, i64, i64 }, ptr %t359 + store { ptr, i64, i64 } %t358, ptr %a362 + store { ptr, i64, i64 } %t360, ptr %a363 + call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) + store { ptr, i64, i64 } %t358, ptr %a364 + call void @finch_str_drop(ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a361 + store { ptr, i64, i64 } %t365, ptr %a367 + store { ptr, i64, i64 } { ptr @.str.4208, i64 2, i64 0 }, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + store { ptr, i64, i64 } %t365, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = load { ptr, i64, i64 }, ptr %a366 + %t371 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t372 = load { ptr, i64, i64 }, ptr %t371 + store { ptr, i64, i64 } %t370, ptr %a374 + store { ptr, i64, i64 } %t372, ptr %a375 + call void @finch_str_concat(ptr %a373, ptr %a374, ptr %a375) + store { ptr, i64, i64 } %t370, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a373 + %t378 = call { ptr, i64, i64 } @finch.gen.op(ptr %t332, { ptr, i64, i64 } %t377) + store { ptr, i64, i64 } %t377, ptr %a379 + call void @finch_str_drop(ptr %a379) + %t380 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t378, 0 + %t381 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t382 = load %S.ast.Type, ptr %t381 + store %S.ast.Type %t382, ptr %a383 + call void @finch.copy.S_ast_Type(ptr %a384, ptr %a383) + %t385 = load %S.ast.Type, ptr %a384 + %t386 = insertvalue %S.gen.Val %t380, %S.ast.Type %t385, 1 + call void @finch.drop.arr_str(ptr %a307) + call void @finch.drop.arr_str(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t386 +endif6541: + %t387 = load ptr, ptr %a1 + %t388 = load { ptr, i64, i64 }, ptr %a2 + %t389 = load %S.gen.Val, ptr %a6 + %t390 = load %S.gen.Val, ptr %a10 + %t391 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t387, { ptr, i64, i64 } %t388, %S.gen.Val %t389, %S.gen.Val %t390, %S.ast.Node %t391) + %t392 = load %S.gen.Val, ptr %a6 + call void @finch.drop.S_gen_Val(ptr %a10) + ret %S.gen.Val %t392 +} + +define internal %S.gen.Val @finch.gen.compare(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.gen.Val, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a6 = alloca %S.gen.Val, align 16 + %a7 = alloca %S.gen.Val, align 16 + %a8 = alloca %S.gen.Val, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca i1, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca i64, align 16 + %a330 = alloca i64, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.gen.Val %p2, ptr %a3 + call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) + %t5 = load %S.gen.Val, ptr %a4 + store %S.gen.Val %t5, ptr %a6 + store %S.gen.Val %p3, ptr %a7 + call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) + %t9 = load %S.gen.Val, ptr %a8 + store %S.gen.Val %t9, ptr %a10 + store %S.ast.Node %p4, ptr %a11 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.4209, i64 2, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from6552 +logic.from6552: + br i1 %t16, label %logic.end6554, label %logic.rhs6553 +logic.rhs6553: + %t17 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.4210, i64 2, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + br label %logic.rend6555 +logic.rend6555: + br label %logic.end6554 +logic.end6554: + %t22 = phi i1 [ true, %logic.from6552 ], [ %t21, %logic.rend6555 ] + store i1 %t22, ptr %a23 + %t24 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t25 = getelementptr inbounds %S.ast.Type, ptr %t24, i32 0, i32 0 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.4211, i64 3, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br label %logic.from6556 +logic.from6556: + br i1 %t30, label %logic.end6558, label %logic.rhs6557 +logic.rhs6557: + %t31 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.4212, i64 3, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br label %logic.rend6559 +logic.rend6559: + br label %logic.end6558 +logic.end6558: + %t38 = phi i1 [ true, %logic.from6556 ], [ %t37, %logic.rend6559 ] + br label %logic.from6560 +logic.from6560: + br i1 %t38, label %logic.end6562, label %logic.rhs6561 +logic.rhs6561: + %t39 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t40 = getelementptr inbounds %S.ast.Type, ptr %t39, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.4213, i64 4, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.rend6563 +logic.rend6563: + br label %logic.end6562 +logic.end6562: + %t46 = phi i1 [ true, %logic.from6560 ], [ %t45, %logic.rend6563 ] + br label %logic.from6564 +logic.from6564: + br i1 %t46, label %logic.end6566, label %logic.rhs6565 +logic.rhs6565: + %t47 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t48 = getelementptr inbounds %S.ast.Type, ptr %t47, i32 0, i32 0 + %t49 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.4214, i64 4, i64 0 }, ptr %a51 + %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) + %t53 = icmp ne i32 %t52, 0 + br label %logic.rend6567 +logic.rend6567: + br label %logic.end6566 +logic.end6566: + %t54 = phi i1 [ true, %logic.from6564 ], [ %t53, %logic.rend6567 ] + br i1 %t54, label %then6568, label %endif6570 +then6568: + %t55 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t56 = getelementptr inbounds %S.ast.Type, ptr %t55, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.4215, i64 3, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.from6571 +logic.from6571: + br i1 %t61, label %logic.end6573, label %logic.rhs6572 +logic.rhs6572: + %t62 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t63 = getelementptr inbounds %S.ast.Type, ptr %t62, i32 0, i32 0 + %t64 = load { ptr, i64, i64 }, ptr %t63 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.4216, i64 3, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp ne i32 %t67, 0 + br label %logic.rend6574 +logic.rend6574: + br label %logic.end6573 +logic.end6573: + %t69 = phi i1 [ true, %logic.from6571 ], [ %t68, %logic.rend6574 ] + br i1 %t69, label %then6575, label %endif6577 +then6575: + %t70 = load ptr, ptr %a1 + %t71 = load %S.ast.Node, ptr %a11 + call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } { ptr @.str.4217, i64 59, i64 0 }) + br label %endif6577 +endif6577: + %t72 = load i1, ptr %a23 + %t73 = xor i1 %t72, true + br i1 %t73, label %then6578, label %endif6580 +then6578: + %t74 = load ptr, ptr %a1 + %t75 = load { ptr, i64, i64 }, ptr %a2 + %t76 = load %S.gen.Val, ptr %a6 + %t77 = load %S.gen.Val, ptr %a10 + %t78 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t74, { ptr, i64, i64 } %t75, %S.gen.Val %t76, %S.gen.Val %t77, %S.ast.Node %t78) + br label %endif6580 +endif6580: + store { ptr, i64, i64 } { ptr @.str.4218, i64 2, i64 0 }, ptr %a79 + %t80 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.4219, i64 2, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %then6581, label %endif6583 +then6581: + %t85 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4220, i64 2, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + br label %endif6583 +endif6583: + %t87 = load ptr, ptr %a1 + %t88 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4221, i64 5, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4222, i64 5, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t99 = load { ptr, i64, i64 }, ptr %t98 + store { ptr, i64, i64 } %t97, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t97, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.4223, i64 2, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t111 = load { ptr, i64, i64 }, ptr %t110 + store { ptr, i64, i64 } %t109, ptr %a113 + store { ptr, i64, i64 } %t111, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t109, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a112 + %t117 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t116, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t117, 0 + %t120 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4224, i64 4, i64 0 }) + %t121 = insertvalue %S.gen.Val %t119, %S.ast.Type %t120, 1 + call void @finch_str_drop(ptr %a79) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t121 +endif6570: + %t122 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t123 = getelementptr inbounds %S.ast.Type, ptr %t122, i32 0, i32 0 + %t124 = load { ptr, i64, i64 }, ptr %t123 + store { ptr, i64, i64 } %t124, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.4225, i64 3, i64 0 }, ptr %a126 + %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) + %t128 = icmp ne i32 %t127, 0 + br label %logic.from6584 +logic.from6584: + br i1 %t128, label %logic.rhs6585, label %logic.end6586 +logic.rhs6585: + %t129 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t130 = getelementptr inbounds %S.ast.Type, ptr %t129, i32 0, i32 0 + %t131 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t131, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.4226, i64 3, i64 0 }, ptr %a133 + %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) + %t135 = icmp ne i32 %t134, 0 + br label %logic.rend6587 +logic.rend6587: + br label %logic.end6586 +logic.end6586: + %t136 = phi i1 [ false, %logic.from6584 ], [ %t135, %logic.rend6587 ] + br i1 %t136, label %then6588, label %endif6590 +then6588: + %t137 = load i1, ptr %a23 + br i1 %t137, label %then6591, label %endif6593 +then6591: + %t138 = load ptr, ptr %a1 + %t139 = load ptr, ptr %a1 + %t140 = load %S.gen.Val, ptr %a6 + %t141 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t139, %S.gen.Val %t140) + store { ptr, i64, i64 } { ptr @.str.4227, i64 27, i64 0 }, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.4228, i64 6, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = load ptr, ptr %a1 + %t153 = load %S.gen.Val, ptr %a10 + %t154 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t152, %S.gen.Val %t153) + store { ptr, i64, i64 } %t151, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t151, ptr %a158 + call void @finch_str_drop(ptr %a158) + store { ptr, i64, i64 } %t154, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.4229, i64 1, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + store { ptr, i64, i64 } %t160, ptr %a164 + call void @finch_str_drop(ptr %a164) + %t165 = load { ptr, i64, i64 }, ptr %a161 + %t166 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t165) + store { ptr, i64, i64 } %t165, ptr %a167 + call void @finch_str_drop(ptr %a167) + store { ptr, i64, i64 } %t166, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4230, i64 2, i64 0 }, ptr %a169 + %t170 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.4231, i64 2, i64 0 }, ptr %a172 + %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) + %t174 = icmp ne i32 %t173, 0 + br i1 %t174, label %then6594, label %endif6596 +then6594: + %t175 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4232, i64 2, i64 0 }, ptr %a169 + store { ptr, i64, i64 } %t175, ptr %a176 + call void @finch_str_drop(ptr %a176) + br label %endif6596 +endif6596: + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4233, i64 5, i64 0 }, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.4234, i64 5, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t187, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t187, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load { ptr, i64, i64 }, ptr %a189 + store { ptr, i64, i64 } %t193, ptr %a195 + store { ptr, i64, i64 } { ptr @.str.4235, i64 3, i64 0 }, ptr %a196 + call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) + store { ptr, i64, i64 } %t193, ptr %a197 + call void @finch_str_drop(ptr %a197) + %t198 = load { ptr, i64, i64 }, ptr %a194 + %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t177, { ptr, i64, i64 } %t198) + store { ptr, i64, i64 } %t198, ptr %a200 + call void @finch_str_drop(ptr %a200) + store { ptr, i64, i64 } %t199, ptr %a201 + %t202 = load ptr, ptr %a1 + %t203 = load %S.gen.Val, ptr %a6 + call void @finch.gen.release(ptr %t202, %S.gen.Val %t203) + %t204 = load ptr, ptr %a1 + %t205 = load %S.gen.Val, ptr %a10 + call void @finch.gen.release(ptr %t204, %S.gen.Val %t205) + %t206 = load { ptr, i64, i64 }, ptr %a201 + store { ptr, i64, i64 } %t206, ptr %a207 + call void @finch_str_copy(ptr %a208, ptr %a207) + %t209 = load { ptr, i64, i64 }, ptr %a208 + %t210 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t209, 0 + %t211 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4236, i64 4, i64 0 }) + %t212 = insertvalue %S.gen.Val %t210, %S.ast.Type %t211, 1 + call void @finch_str_drop(ptr %a201) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a168) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t212 +endif6593: + %t213 = load ptr, ptr %a1 + %t214 = load ptr, ptr %a1 + %t215 = load %S.gen.Val, ptr %a6 + %t216 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t214, %S.gen.Val %t215) + store { ptr, i64, i64 } { ptr @.str.4237, i64 28, i64 0 }, ptr %a218 + store { ptr, i64, i64 } %t216, ptr %a219 + call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a217 + store { ptr, i64, i64 } %t221, ptr %a223 + store { ptr, i64, i64 } { ptr @.str.4238, i64 6, i64 0 }, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t221, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load { ptr, i64, i64 }, ptr %a222 + %t227 = load ptr, ptr %a1 + %t228 = load %S.gen.Val, ptr %a10 + %t229 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t227, %S.gen.Val %t228) + store { ptr, i64, i64 } %t226, ptr %a231 + store { ptr, i64, i64 } %t229, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + store { ptr, i64, i64 } %t226, ptr %a233 + call void @finch_str_drop(ptr %a233) + store { ptr, i64, i64 } %t229, ptr %a234 + call void @finch_str_drop(ptr %a234) + %t235 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t235, ptr %a237 + store { ptr, i64, i64 } { ptr @.str.4239, i64 1, i64 0 }, ptr %a238 + call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) + store { ptr, i64, i64 } %t235, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a236 + %t241 = call { ptr, i64, i64 } @finch.gen.op(ptr %t213, { ptr, i64, i64 } %t240) + store { ptr, i64, i64 } %t240, ptr %a242 + call void @finch_str_drop(ptr %a242) + store { ptr, i64, i64 } %t241, ptr %a243 + %t244 = load ptr, ptr %a1 + %t245 = load { ptr, i64, i64 }, ptr %a2 + %t246 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t245, i1 true) + store { ptr, i64, i64 } { ptr @.str.4240, i64 5, i64 0 }, ptr %a248 + store { ptr, i64, i64 } %t246, ptr %a249 + call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) + store { ptr, i64, i64 } %t246, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.4241, i64 5, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + %t257 = load { ptr, i64, i64 }, ptr %a243 + store { ptr, i64, i64 } %t256, ptr %a259 + store { ptr, i64, i64 } %t257, ptr %a260 + call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) + store { ptr, i64, i64 } %t256, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a258 + store { ptr, i64, i64 } %t262, ptr %a264 + store { ptr, i64, i64 } { ptr @.str.4242, i64 3, i64 0 }, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + store { ptr, i64, i64 } %t262, ptr %a266 + call void @finch_str_drop(ptr %a266) + %t267 = load { ptr, i64, i64 }, ptr %a263 + %t268 = call { ptr, i64, i64 } @finch.gen.op(ptr %t244, { ptr, i64, i64 } %t267) + store { ptr, i64, i64 } %t267, ptr %a269 + call void @finch_str_drop(ptr %a269) + store { ptr, i64, i64 } %t268, ptr %a270 + %t271 = load ptr, ptr %a1 + %t272 = load %S.gen.Val, ptr %a6 + call void @finch.gen.release(ptr %t271, %S.gen.Val %t272) + %t273 = load ptr, ptr %a1 + %t274 = load %S.gen.Val, ptr %a10 + call void @finch.gen.release(ptr %t273, %S.gen.Val %t274) + %t275 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t275, ptr %a276 + call void @finch_str_copy(ptr %a277, ptr %a276) + %t278 = load { ptr, i64, i64 }, ptr %a277 + %t279 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t278, 0 + %t280 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4243, i64 4, i64 0 }) + %t281 = insertvalue %S.gen.Val %t279, %S.ast.Type %t280, 1 + call void @finch_str_drop(ptr %a270) + call void @finch_str_drop(ptr %a243) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t281 +endif6590: + %t282 = load ptr, ptr %a1 + %t283 = call i1 @finch.gen.unify(ptr %t282, ptr %a6, ptr %a10) + %t284 = xor i1 %t283, true + br i1 %t284, label %then6597, label %endif6599 +then6597: + %t285 = load ptr, ptr %a1 + %t286 = load { ptr, i64, i64 }, ptr %a2 + %t287 = load %S.gen.Val, ptr %a6 + %t288 = load %S.gen.Val, ptr %a10 + %t289 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t285, { ptr, i64, i64 } %t286, %S.gen.Val %t287, %S.gen.Val %t288, %S.ast.Node %t289) + br label %endif6599 +endif6599: + %t290 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t291 = getelementptr inbounds %S.ast.Type, ptr %t290, i32 0, i32 0 + %t292 = load { ptr, i64, i64 }, ptr %t291 + store { ptr, i64, i64 } %t292, ptr %a293 + call void @finch_str_copy(ptr %a294, ptr %a293) + %t295 = load { ptr, i64, i64 }, ptr %a294 + store { ptr, i64, i64 } %t295, ptr %a296 + %t297 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t298 = load %S.ast.Type, ptr %t297 + %t299 = call i1 @finch.gen.isFloat(%S.ast.Type %t298) + br i1 %t299, label %then6600, label %endif6602 +then6600: + %t300 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t301 = call ptr @finch_alloc(i64 %t300) + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 0 + store { ptr, i64, i64 } { ptr @.str.4244, i64 2, i64 0 }, ptr %t302 + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 1 + store { ptr, i64, i64 } { ptr @.str.4245, i64 2, i64 0 }, ptr %t303 + %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 2 + store { ptr, i64, i64 } { ptr @.str.4246, i64 1, i64 0 }, ptr %t304 + %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 3 + store { ptr, i64, i64 } { ptr @.str.4247, i64 2, i64 0 }, ptr %t305 + %t306 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 4 + store { ptr, i64, i64 } { ptr @.str.4248, i64 1, i64 0 }, ptr %t306 + %t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 5 + store { ptr, i64, i64 } { ptr @.str.4249, i64 2, i64 0 }, ptr %t307 + %t308 = insertvalue { ptr, i64, i64 } undef, ptr %t301, 0 + %t309 = insertvalue { ptr, i64, i64 } %t308, i64 6, 1 + %t310 = insertvalue { ptr, i64, i64 } %t309, i64 6, 2 + store { ptr, i64, i64 } %t310, ptr %a311 + %t312 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t313 = call ptr @finch_alloc(i64 %t312) + %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 0 + store { ptr, i64, i64 } { ptr @.str.4250, i64 3, i64 0 }, ptr %t314 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 1 + store { ptr, i64, i64 } { ptr @.str.4251, i64 3, i64 0 }, ptr %t315 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 2 + store { ptr, i64, i64 } { ptr @.str.4252, i64 3, i64 0 }, ptr %t316 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 3 + store { ptr, i64, i64 } { ptr @.str.4253, i64 3, i64 0 }, ptr %t317 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 4 + store { ptr, i64, i64 } { ptr @.str.4254, i64 3, i64 0 }, ptr %t318 + %t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 5 + store { ptr, i64, i64 } { ptr @.str.4255, i64 3, i64 0 }, ptr %t319 + %t320 = insertvalue { ptr, i64, i64 } undef, ptr %t313, 0 + %t321 = insertvalue { ptr, i64, i64 } %t320, i64 6, 1 + %t322 = insertvalue { ptr, i64, i64 } %t321, i64 6, 2 + store { ptr, i64, i64 } %t322, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a311, i32 0, i32 1 + %t326 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a327 + %t328 = load i64, ptr %t325 + %t329 = load ptr, ptr %a311 + store i64 0, ptr %a330 + br label %find.cond6603 +find.cond6603: + %t331 = load i64, ptr %a330 + %t332 = icmp slt i64 %t331, %t328 + br i1 %t332, label %find.body6604, label %find.end6607 +find.body6604: + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t329, i64 %t331 + %t334 = load { ptr, i64, i64 }, ptr %t333 + store { ptr, i64, i64 } %t334, ptr %a335 + store { ptr, i64, i64 } %t326, ptr %a336 + %t337 = call i32 @finch_str_eq(ptr %a335, ptr %a336) + %t338 = icmp ne i32 %t337, 0 + br i1 %t338, label %find.hit6605, label %find.next6606 +find.hit6605: + store i64 %t331, ptr %a327 + br label %find.end6607 +find.next6606: + %t339 = add i64 %t331, 1 + store i64 %t339, ptr %a330 + br label %find.cond6603 +find.end6607: + %t340 = load i64, ptr %a327 + %t341 = load { ptr, i64, i64 }, ptr %a323 + %t342 = extractvalue { ptr, i64, i64 } %t341, 1 + %t343 = icmp uge i64 %t340, %t342 + br i1 %t343, label %range6608, label %inrange6609 +range6608: + call void @finch_panic_index(ptr @.str.4257, i64 3595, i64 %t340, i64 %t342) + unreachable +inrange6609: + %t344 = extractvalue { ptr, i64, i64 } %t341, 0 + %t345 = getelementptr inbounds { ptr, i64, i64 }, ptr %t344, i64 %t340 + %t346 = load { ptr, i64, i64 }, ptr %t345 + store { ptr, i64, i64 } { ptr @.str.4256, i64 5, i64 0 }, ptr %a348 + store { ptr, i64, i64 } %t346, ptr %a349 + call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) + %t350 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t350, ptr %a352 + store { ptr, i64, i64 } { ptr @.str.4258, i64 1, i64 0 }, ptr %a353 + call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) + store { ptr, i64, i64 } %t350, ptr %a354 + call void @finch_str_drop(ptr %a354) + %t355 = load { ptr, i64, i64 }, ptr %a351 + %t356 = load ptr, ptr %a1 + %t357 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t358 = load %S.ast.Type, ptr %t357 + %t359 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t356, %S.ast.Type %t358) + store { ptr, i64, i64 } %t355, ptr %a361 + store { ptr, i64, i64 } %t359, ptr %a362 + call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) + store { ptr, i64, i64 } %t355, ptr %a363 + call void @finch_str_drop(ptr %a363) + store { ptr, i64, i64 } %t359, ptr %a364 + call void @finch_str_drop(ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a360 + store { ptr, i64, i64 } %t365, ptr %a367 + store { ptr, i64, i64 } { ptr @.str.4259, i64 1, i64 0 }, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + store { ptr, i64, i64 } %t365, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = load { ptr, i64, i64 }, ptr %a366 + %t371 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t372 = load { ptr, i64, i64 }, ptr %t371 + store { ptr, i64, i64 } %t370, ptr %a374 + store { ptr, i64, i64 } %t372, ptr %a375 + call void @finch_str_concat(ptr %a373, ptr %a374, ptr %a375) + store { ptr, i64, i64 } %t370, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a373 + store { ptr, i64, i64 } %t377, ptr %a379 + store { ptr, i64, i64 } { ptr @.str.4260, i64 2, i64 0 }, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + %t383 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t384 = load { ptr, i64, i64 }, ptr %t383 + store { ptr, i64, i64 } %t382, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + store { ptr, i64, i64 } %t382, ptr %a388 + call void @finch_str_drop(ptr %a388) + %t389 = load { ptr, i64, i64 }, ptr %a385 + %t390 = call { ptr, i64, i64 } @finch.gen.op(ptr %t324, { ptr, i64, i64 } %t389) + store { ptr, i64, i64 } %t389, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t390, 0 + %t393 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4261, i64 4, i64 0 }) + %t394 = insertvalue %S.gen.Val %t392, %S.ast.Type %t393, 1 + call void @finch.drop.arr_str(ptr %a323) + call void @finch.drop.arr_str(ptr %a311) + call void @finch_str_drop(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t394 +endif6602: + %t395 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t395, ptr %a396 + store { ptr, i64, i64 } { ptr @.str.4262, i64 4, i64 0 }, ptr %a397 + %t398 = call i32 @finch_str_eq(ptr %a396, ptr %a397) + %t399 = icmp ne i32 %t398, 0 + br i1 %t399, label %then6610, label %endif6612 +then6610: + %t400 = load i1, ptr %a23 + %t401 = xor i1 %t400, true + br i1 %t401, label %then6613, label %endif6615 +then6613: + %t402 = load ptr, ptr %a1 + %t403 = load %S.ast.Node, ptr %a11 + call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4263, i64 115, i64 0 }) + br label %endif6615 +endif6615: + store { ptr, i64, i64 } { ptr @.str.4264, i64 2, i64 0 }, ptr %a404 + %t405 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t405, ptr %a406 + store { ptr, i64, i64 } { ptr @.str.4265, i64 2, i64 0 }, ptr %a407 + %t408 = call i32 @finch_str_eq(ptr %a406, ptr %a407) + %t409 = icmp ne i32 %t408, 0 + br i1 %t409, label %then6616, label %endif6618 +then6616: + %t410 = load { ptr, i64, i64 }, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.4266, i64 2, i64 0 }, ptr %a404 + store { ptr, i64, i64 } %t410, ptr %a411 + call void @finch_str_drop(ptr %a411) + br label %endif6618 +endif6618: + %t412 = load ptr, ptr %a1 + %t413 = load { ptr, i64, i64 }, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.4267, i64 5, i64 0 }, ptr %a415 + store { ptr, i64, i64 } %t413, ptr %a416 + call void @finch_str_concat(ptr %a414, ptr %a415, ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a414 + store { ptr, i64, i64 } %t417, ptr %a419 + store { ptr, i64, i64 } { ptr @.str.4268, i64 5, i64 0 }, ptr %a420 + call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420) + store { ptr, i64, i64 } %t417, ptr %a421 + call void @finch_str_drop(ptr %a421) + %t422 = load { ptr, i64, i64 }, ptr %a418 + %t423 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t424 = load { ptr, i64, i64 }, ptr %t423 + store { ptr, i64, i64 } %t422, ptr %a426 + store { ptr, i64, i64 } %t424, ptr %a427 + call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427) + store { ptr, i64, i64 } %t422, ptr %a428 + call void @finch_str_drop(ptr %a428) + %t429 = load { ptr, i64, i64 }, ptr %a425 + store { ptr, i64, i64 } %t429, ptr %a431 + store { ptr, i64, i64 } { ptr @.str.4269, i64 2, i64 0 }, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t436 = load { ptr, i64, i64 }, ptr %t435 + store { ptr, i64, i64 } %t434, ptr %a438 + store { ptr, i64, i64 } %t436, ptr %a439 + call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) + store { ptr, i64, i64 } %t434, ptr %a440 + call void @finch_str_drop(ptr %a440) + %t441 = load { ptr, i64, i64 }, ptr %a437 + %t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t412, { ptr, i64, i64 } %t441) + store { ptr, i64, i64 } %t441, ptr %a443 + call void @finch_str_drop(ptr %a443) + %t444 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t442, 0 + %t445 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4270, i64 4, i64 0 }) + %t446 = insertvalue %S.gen.Val %t444, %S.ast.Type %t445, 1 + call void @finch_str_drop(ptr %a404) + call void @finch_str_drop(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t446 +endif6612: + %t447 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t447, ptr %a448 + store { ptr, i64, i64 } { ptr @.str.4271, i64 4, i64 0 }, ptr %a449 + %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) + %t451 = icmp ne i32 %t450, 0 + br label %logic.from6619 +logic.from6619: + br i1 %t451, label %logic.rhs6620, label %logic.end6621 +logic.rhs6620: + %t452 = load i1, ptr %a23 + %t453 = xor i1 %t452, true + br label %logic.rend6622 +logic.rend6622: + br label %logic.end6621 +logic.end6621: + %t454 = phi i1 [ false, %logic.from6619 ], [ %t453, %logic.rend6622 ] + br i1 %t454, label %then6623, label %endif6625 +then6623: + %t455 = load ptr, ptr %a1 + %t456 = load { ptr, i64, i64 }, ptr %a2 + %t457 = load %S.gen.Val, ptr %a6 + %t458 = load %S.gen.Val, ptr %a10 + %t459 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t455, { ptr, i64, i64 } %t456, %S.gen.Val %t457, %S.gen.Val %t458, %S.ast.Node %t459) + br label %endif6625 +endif6625: + %t460 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t461 = load %S.ast.Type, ptr %t460 + %t462 = call i1 @finch.gen.isInt(%S.ast.Type %t461) + %t463 = xor i1 %t462, true + br label %logic.from6626 +logic.from6626: + br i1 %t463, label %logic.rhs6627, label %logic.end6628 +logic.rhs6627: + %t464 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t464, ptr %a465 + store { ptr, i64, i64 } { ptr @.str.4272, i64 4, i64 0 }, ptr %a466 + %t467 = call i32 @finch_str_eq(ptr %a465, ptr %a466) + %t468 = icmp eq i32 %t467, 0 + br label %logic.rend6629 +logic.rend6629: + br label %logic.end6628 +logic.end6628: + %t469 = phi i1 [ false, %logic.from6626 ], [ %t468, %logic.rend6629 ] + br label %logic.from6630 +logic.from6630: + br i1 %t469, label %logic.rhs6631, label %logic.end6632 +logic.rhs6631: + %t470 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t470, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.4273, i64 4, i64 0 }, ptr %a472 + %t473 = call i32 @finch_str_eq(ptr %a471, ptr %a472) + %t474 = icmp eq i32 %t473, 0 + br label %logic.rend6633 +logic.rend6633: + br label %logic.end6632 +logic.end6632: + %t475 = phi i1 [ false, %logic.from6630 ], [ %t474, %logic.rend6633 ] + br i1 %t475, label %then6634, label %endif6636 +then6634: + %t476 = load ptr, ptr %a1 + %t477 = load { ptr, i64, i64 }, ptr %a2 + %t478 = load %S.gen.Val, ptr %a6 + %t479 = load %S.gen.Val, ptr %a10 + %t480 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t476, { ptr, i64, i64 } %t477, %S.gen.Val %t478, %S.gen.Val %t479, %S.ast.Node %t480) + br label %endif6636 +endif6636: + %t481 = load ptr, ptr %a1 + %t482 = load { ptr, i64, i64 }, ptr %a2 + %t483 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t484 = load %S.ast.Type, ptr %t483 + %t485 = call i1 @finch.gen.isSigned(%S.ast.Type %t484) + %t486 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t482, i1 %t485) + store { ptr, i64, i64 } { ptr @.str.4274, i64 5, i64 0 }, ptr %a488 + store { ptr, i64, i64 } %t486, ptr %a489 + call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) + store { ptr, i64, i64 } %t486, ptr %a490 + call void @finch_str_drop(ptr %a490) + %t491 = load { ptr, i64, i64 }, ptr %a487 + store { ptr, i64, i64 } %t491, ptr %a493 + store { ptr, i64, i64 } { ptr @.str.4275, i64 1, i64 0 }, ptr %a494 + call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) + store { ptr, i64, i64 } %t491, ptr %a495 + call void @finch_str_drop(ptr %a495) + %t496 = load { ptr, i64, i64 }, ptr %a492 + %t497 = load ptr, ptr %a1 + %t498 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t499 = load %S.ast.Type, ptr %t498 + %t500 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t497, %S.ast.Type %t499) + store { ptr, i64, i64 } %t496, ptr %a502 + store { ptr, i64, i64 } %t500, ptr %a503 + call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) + store { ptr, i64, i64 } %t496, ptr %a504 + call void @finch_str_drop(ptr %a504) + store { ptr, i64, i64 } %t500, ptr %a505 + call void @finch_str_drop(ptr %a505) + %t506 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t506, ptr %a508 + store { ptr, i64, i64 } { ptr @.str.4276, i64 1, i64 0 }, ptr %a509 + call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) + store { ptr, i64, i64 } %t506, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a507 + %t512 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t513 = load { ptr, i64, i64 }, ptr %t512 + store { ptr, i64, i64 } %t511, ptr %a515 + store { ptr, i64, i64 } %t513, ptr %a516 + call void @finch_str_concat(ptr %a514, ptr %a515, ptr %a516) + store { ptr, i64, i64 } %t511, ptr %a517 + call void @finch_str_drop(ptr %a517) + %t518 = load { ptr, i64, i64 }, ptr %a514 + store { ptr, i64, i64 } %t518, ptr %a520 + store { ptr, i64, i64 } { ptr @.str.4277, i64 2, i64 0 }, ptr %a521 + call void @finch_str_concat(ptr %a519, ptr %a520, ptr %a521) + store { ptr, i64, i64 } %t518, ptr %a522 + call void @finch_str_drop(ptr %a522) + %t523 = load { ptr, i64, i64 }, ptr %a519 + %t524 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t525 = load { ptr, i64, i64 }, ptr %t524 + store { ptr, i64, i64 } %t523, ptr %a527 + store { ptr, i64, i64 } %t525, ptr %a528 + call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) + store { ptr, i64, i64 } %t523, ptr %a529 + call void @finch_str_drop(ptr %a529) + %t530 = load { ptr, i64, i64 }, ptr %a526 + %t531 = call { ptr, i64, i64 } @finch.gen.op(ptr %t481, { ptr, i64, i64 } %t530) + store { ptr, i64, i64 } %t530, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t531, 0 + %t534 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4278, i64 4, i64 0 }) + %t535 = insertvalue %S.gen.Val %t533, %S.ast.Type %t534, 1 + call void @finch_str_drop(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t535 +} + +define internal { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %p0, i1 %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i1, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca i64, align 16 + %a46 = alloca i64, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i1 %p1, ptr %a2 + %t3 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t4 = call ptr @finch_alloc(i64 %t3) + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 + store { ptr, i64, i64 } { ptr @.str.4279, i64 2, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 1 + store { ptr, i64, i64 } { ptr @.str.4280, i64 2, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 2 + store { ptr, i64, i64 } { ptr @.str.4281, i64 1, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 3 + store { ptr, i64, i64 } { ptr @.str.4282, i64 2, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 4 + store { ptr, i64, i64 } { ptr @.str.4283, i64 1, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 5 + store { ptr, i64, i64 } { ptr @.str.4284, i64 2, i64 0 }, ptr %t10 + %t11 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 + %t12 = insertvalue { ptr, i64, i64 } %t11, i64 6, 1 + %t13 = insertvalue { ptr, i64, i64 } %t12, i64 6, 2 + store { ptr, i64, i64 } %t13, ptr %a14 + %t15 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t16 = call ptr @finch_alloc(i64 %t15) + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 + store { ptr, i64, i64 } { ptr @.str.4285, i64 2, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 1 + store { ptr, i64, i64 } { ptr @.str.4286, i64 2, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 2 + store { ptr, i64, i64 } { ptr @.str.4287, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 3 + store { ptr, i64, i64 } { ptr @.str.4288, i64 3, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 4 + store { ptr, i64, i64 } { ptr @.str.4289, i64 3, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 5 + store { ptr, i64, i64 } { ptr @.str.4290, i64 3, i64 0 }, ptr %t22 + %t23 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 + %t24 = insertvalue { ptr, i64, i64 } %t23, i64 6, 1 + %t25 = insertvalue { ptr, i64, i64 } %t24, i64 6, 2 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load i1, ptr %a2 + br i1 %t27, label %then6637, label %endif6639 +then6637: + %t28 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t29 = call ptr @finch_alloc(i64 %t28) + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 + store { ptr, i64, i64 } { ptr @.str.4291, i64 2, i64 0 }, ptr %t30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 1 + store { ptr, i64, i64 } { ptr @.str.4292, i64 2, i64 0 }, ptr %t31 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 2 + store { ptr, i64, i64 } { ptr @.str.4293, i64 3, i64 0 }, ptr %t32 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 3 + store { ptr, i64, i64 } { ptr @.str.4294, i64 3, i64 0 }, ptr %t33 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 4 + store { ptr, i64, i64 } { ptr @.str.4295, i64 3, i64 0 }, ptr %t34 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 5 + store { ptr, i64, i64 } { ptr @.str.4296, i64 3, i64 0 }, ptr %t35 + %t36 = insertvalue { ptr, i64, i64 } undef, ptr %t29, 0 + %t37 = insertvalue { ptr, i64, i64 } %t36, i64 6, 1 + %t38 = insertvalue { ptr, i64, i64 } %t37, i64 6, 2 + %t39 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t38, ptr %a26 + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch.drop.arr_str(ptr %a40) + br label %endif6639 +endif6639: + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a43 + %t44 = load i64, ptr %t41 + %t45 = load ptr, ptr %a14 + store i64 0, ptr %a46 + br label %find.cond6640 +find.cond6640: + %t47 = load i64, ptr %a46 + %t48 = icmp slt i64 %t47, %t44 + br i1 %t48, label %find.body6641, label %find.end6644 +find.body6641: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t47 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } %t42, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %find.hit6642, label %find.next6643 +find.hit6642: + store i64 %t47, ptr %a43 + br label %find.end6644 +find.next6643: + %t55 = add i64 %t47, 1 + store i64 %t55, ptr %a46 + br label %find.cond6640 +find.end6644: + %t56 = load i64, ptr %a43 + %t57 = load { ptr, i64, i64 }, ptr %a26 + %t58 = extractvalue { ptr, i64, i64 } %t57, 1 + %t59 = icmp uge i64 %t56, %t58 + br i1 %t59, label %range6645, label %inrange6646 +range6645: + call void @finch_panic_index(ptr @.str.4297, i64 3622, i64 %t56, i64 %t58) + unreachable +inrange6646: + %t60 = extractvalue { ptr, i64, i64 } %t57, 0 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i64 %t56 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + call void @finch.drop.arr_str(ptr %a26) + call void @finch.drop.arr_str(ptr %a14) + ret { ptr, i64, i64 } %t65 +} + +define internal %S.gen.Val @finch.gen.binary(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca %S.gen.Val, align 16 + %a151 = alloca i64, align 16 + %a163 = alloca %S.gen.Val, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.4298, i64 2, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from6647 +logic.from6647: + br i1 %t13, label %logic.end6649, label %logic.rhs6648 +logic.rhs6648: + %t14 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.4299, i64 2, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.rend6650 +logic.rend6650: + br label %logic.end6649 +logic.end6649: + %t19 = phi i1 [ true, %logic.from6647 ], [ %t18, %logic.rend6650 ] + br i1 %t19, label %then6651, label %endif6653 +then6651: + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = extractvalue { ptr, i64, i64 } %t22, 1 + %t24 = icmp uge i64 0, %t23 + br i1 %t24, label %range6654, label %inrange6655 +range6654: + call void @finch_panic_index(ptr @.str.4300, i64 3628, i64 0, i64 %t23) + unreachable +inrange6655: + %t25 = extractvalue { ptr, i64, i64 } %t22, 0 + %t26 = getelementptr inbounds %S.ast.Node, ptr %t25, i64 0 + %t27 = load %S.ast.Node, ptr %t26 + %t28 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t20, %S.ast.Node %t27) + store { ptr, i64, i64 } %t28, ptr %a29 + %t30 = load ptr, ptr %a1 + %t31 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t30, { ptr, i64, i64 } { ptr @.str.4301, i64 10, i64 0 }) + store { ptr, i64, i64 } %t31, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t33, { ptr, i64, i64 } { ptr @.str.4302, i64 9, i64 0 }) + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = load ptr, ptr %a1 + %t37 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t36, { ptr, i64, i64 } { ptr @.str.4303, i64 9, i64 0 }) + store { ptr, i64, i64 } %t37, ptr %a38 + %t39 = load ptr, ptr %a1 + %t40 = load { ptr, i64, i64 }, ptr %a32 + call void @finch.gen.br(ptr %t39, { ptr, i64, i64 } %t40) + %t41 = load ptr, ptr %a1 + %t42 = load { ptr, i64, i64 }, ptr %a32 + call void @finch.gen.label(ptr %t41, { ptr, i64, i64 } %t42) + %t43 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.4304, i64 2, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp ne i32 %t46, 0 + br i1 %t47, label %then6656, label %else6657 +then6656: + %t48 = load ptr, ptr %a1 + %t49 = load { ptr, i64, i64 }, ptr %a29 + %t50 = load { ptr, i64, i64 }, ptr %a35 + %t51 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.gen.condBr(ptr %t48, { ptr, i64, i64 } %t49, { ptr, i64, i64 } %t50, { ptr, i64, i64 } %t51) + br label %endif6658 +else6657: + %t52 = load ptr, ptr %a1 + %t53 = load { ptr, i64, i64 }, ptr %a29 + %t54 = load { ptr, i64, i64 }, ptr %a38 + %t55 = load { ptr, i64, i64 }, ptr %a35 + call void @finch.gen.condBr(ptr %t52, { ptr, i64, i64 } %t53, { ptr, i64, i64 } %t54, { ptr, i64, i64 } %t55) + br label %endif6658 +endif6658: + %t56 = load ptr, ptr %a1 + %t57 = load { ptr, i64, i64 }, ptr %a35 + call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = extractvalue { ptr, i64, i64 } %t60, 1 + %t62 = icmp uge i64 1, %t61 + br i1 %t62, label %range6659, label %inrange6660 +range6659: + call void @finch_panic_index(ptr @.str.4305, i64 3640, i64 1, i64 %t61) + unreachable +inrange6660: + %t63 = extractvalue { ptr, i64, i64 } %t60, 0 + %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 1 + %t65 = load %S.ast.Node, ptr %t64 + %t66 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t58, %S.ast.Node %t65) + store { ptr, i64, i64 } %t66, ptr %a67 + %t68 = load ptr, ptr %a1 + %t69 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t68, { ptr, i64, i64 } { ptr @.str.4306, i64 10, i64 0 }) + store { ptr, i64, i64 } %t69, ptr %a70 + %t71 = load ptr, ptr %a1 + %t72 = load { ptr, i64, i64 }, ptr %a70 + call void @finch.gen.br(ptr %t71, { ptr, i64, i64 } %t72) + %t73 = load ptr, ptr %a1 + %t74 = load { ptr, i64, i64 }, ptr %a70 + call void @finch.gen.label(ptr %t73, { ptr, i64, i64 } %t74) + %t75 = load ptr, ptr %a1 + %t76 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.gen.br(ptr %t75, { ptr, i64, i64 } %t76) + %t77 = load ptr, ptr %a1 + %t78 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.gen.label(ptr %t77, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } { ptr @.str.4307, i64 4, i64 0 }, ptr %a79 + %t80 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.4308, i64 2, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %then6661, label %endif6663 +then6661: + %t85 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4309, i64 5, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + br label %endif6663 +endif6663: + %t87 = load ptr, ptr %a1 + %t88 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4310, i64 9, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4311, i64 3, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load { ptr, i64, i64 }, ptr %a32 + store { ptr, i64, i64 } %t97, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.4312, i64 6, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t108, ptr %a111 + store { ptr, i64, i64 } %t109, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.4313, i64 3, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t119, ptr %a122 + store { ptr, i64, i64 } %t120, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t119, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + store { ptr, i64, i64 } %t125, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.4314, i64 2, i64 0 }, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t125, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t130) + store { ptr, i64, i64 } %t130, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t131, 0 + %t134 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4315, i64 4, i64 0 }) + %t135 = insertvalue %S.gen.Val %t133, %S.ast.Type %t134, 1 + call void @finch_str_drop(ptr %a79) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a67) + call void @finch_str_drop(ptr %a38) + call void @finch_str_drop(ptr %a35) + call void @finch_str_drop(ptr %a32) + call void @finch_str_drop(ptr %a29) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t135 +endif6653: + %t136 = load ptr, ptr %a1 + %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t138 = load { ptr, i64, i64 }, ptr %t137 + %t139 = extractvalue { ptr, i64, i64 } %t138, 1 + %t140 = icmp uge i64 0, %t139 + br i1 %t140, label %range6664, label %inrange6665 +range6664: + call void @finch_panic_index(ptr @.str.4316, i64 3652, i64 0, i64 %t139) + unreachable +inrange6665: + %t141 = extractvalue { ptr, i64, i64 } %t138, 0 + %t142 = getelementptr inbounds %S.ast.Node, ptr %t141, i64 0 + %t143 = load %S.ast.Node, ptr %t142 + %t144 = call %S.gen.Val @finch.gen.expr(ptr %t136, %S.ast.Node %t143) + store %S.gen.Val %t144, ptr %a145 + %t146 = load ptr, ptr %a1 + %t147 = icmp eq ptr %t146, null + br i1 %t147, label %panic6666, label %ok6667 +panic6666: + call void @finch_panic(ptr @.str.4317, i64 3653, ptr @.str.4318) + unreachable +ok6667: + %t148 = getelementptr inbounds %S.gen.Gen, ptr %t146, i32 0, i32 11 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i32 0, i32 1 + %t150 = load i64, ptr %t149 + store i64 %t150, ptr %a151 + %t152 = load ptr, ptr %a1 + %t153 = load %S.gen.Val, ptr %a145 + call void @finch.gen.hold(ptr %t152, %S.gen.Val %t153) + %t154 = load ptr, ptr %a1 + %t155 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t156 = load { ptr, i64, i64 }, ptr %t155 + %t157 = extractvalue { ptr, i64, i64 } %t156, 1 + %t158 = icmp uge i64 1, %t157 + br i1 %t158, label %range6668, label %inrange6669 +range6668: + call void @finch_panic_index(ptr @.str.4319, i64 3655, i64 1, i64 %t157) + unreachable +inrange6669: + %t159 = extractvalue { ptr, i64, i64 } %t156, 0 + %t160 = getelementptr inbounds %S.ast.Node, ptr %t159, i64 1 + %t161 = load %S.ast.Node, ptr %t160 + %t162 = call %S.gen.Val @finch.gen.expr(ptr %t154, %S.ast.Node %t161) + store %S.gen.Val %t162, ptr %a163 + %t164 = load ptr, ptr %a1 + %t165 = load i64, ptr %a151 + call void @finch.gen.heldEnd(ptr %t164, i64 %t165) + %t166 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.4320, i64 2, i64 0 }, ptr %a168 + %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) + %t170 = icmp ne i32 %t169, 0 + br label %logic.from6670 +logic.from6670: + br i1 %t170, label %logic.end6672, label %logic.rhs6671 +logic.rhs6671: + %t171 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.4321, i64 2, i64 0 }, ptr %a173 + %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) + %t175 = icmp ne i32 %t174, 0 + br label %logic.rend6673 +logic.rend6673: + br label %logic.end6672 +logic.end6672: + %t176 = phi i1 [ true, %logic.from6670 ], [ %t175, %logic.rend6673 ] + br label %logic.from6674 +logic.from6674: + br i1 %t176, label %logic.end6676, label %logic.rhs6675 +logic.rhs6675: + %t177 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t177, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.4322, i64 1, i64 0 }, ptr %a179 + %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) + %t181 = icmp ne i32 %t180, 0 + br label %logic.rend6677 +logic.rend6677: + br label %logic.end6676 +logic.end6676: + %t182 = phi i1 [ true, %logic.from6674 ], [ %t181, %logic.rend6677 ] + br label %logic.from6678 +logic.from6678: + br i1 %t182, label %logic.end6680, label %logic.rhs6679 +logic.rhs6679: + %t183 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t183, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.4323, i64 2, i64 0 }, ptr %a185 + %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) + %t187 = icmp ne i32 %t186, 0 + br label %logic.rend6681 +logic.rend6681: + br label %logic.end6680 +logic.end6680: + %t188 = phi i1 [ true, %logic.from6678 ], [ %t187, %logic.rend6681 ] + br label %logic.from6682 +logic.from6682: + br i1 %t188, label %logic.end6684, label %logic.rhs6683 +logic.rhs6683: + %t189 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t189, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.4324, i64 1, i64 0 }, ptr %a191 + %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) + %t193 = icmp ne i32 %t192, 0 + br label %logic.rend6685 +logic.rend6685: + br label %logic.end6684 +logic.end6684: + %t194 = phi i1 [ true, %logic.from6682 ], [ %t193, %logic.rend6685 ] + br label %logic.from6686 +logic.from6686: + br i1 %t194, label %logic.end6688, label %logic.rhs6687 +logic.rhs6687: + %t195 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t195, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.4325, i64 2, i64 0 }, ptr %a197 + %t198 = call i32 @finch_str_eq(ptr %a196, ptr %a197) + %t199 = icmp ne i32 %t198, 0 + br label %logic.rend6689 +logic.rend6689: + br label %logic.end6688 +logic.end6688: + %t200 = phi i1 [ true, %logic.from6686 ], [ %t199, %logic.rend6689 ] + br i1 %t200, label %then6690, label %endif6692 +then6690: + %t201 = load ptr, ptr %a1 + %t202 = load { ptr, i64, i64 }, ptr %a8 + %t203 = load %S.gen.Val, ptr %a145 + %t204 = load %S.gen.Val, ptr %a163 + %t205 = load %S.ast.Node, ptr %a2 + %t206 = call %S.gen.Val @finch.gen.compare(ptr %t201, { ptr, i64, i64 } %t202, %S.gen.Val %t203, %S.gen.Val %t204, %S.ast.Node %t205) + call void @finch.drop.S_gen_Val(ptr %a163) + call void @finch.drop.S_gen_Val(ptr %a145) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t206 +endif6692: + %t207 = load ptr, ptr %a1 + %t208 = load { ptr, i64, i64 }, ptr %a8 + %t209 = load %S.gen.Val, ptr %a145 + %t210 = load %S.gen.Val, ptr %a163 + %t211 = load %S.ast.Node, ptr %a2 + %t212 = call %S.gen.Val @finch.gen.arith(ptr %t207, { ptr, i64, i64 } %t208, %S.gen.Val %t209, %S.gen.Val %t210, %S.ast.Node %t211) + call void @finch.drop.S_gen_Val(ptr %a163) + call void @finch.drop.S_gen_Val(ptr %a145) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t212 +} + +define internal %S.gen.Val @finch.gen.arrayLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a5 = alloca %S.ast.Type, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca i64, align 16 + %a38 = alloca i64, align 16 + %a46 = alloca %S.ast.Node, align 16 + %a47 = alloca %S.gen.Val, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca %S.gen.Val, align 16 + %a61 = alloca %S.ast.Type, align 16 + %a62 = alloca %S.ast.Type, align 16 + %a65 = alloca %S.ast.Type, align 16 + %a71 = alloca %S.gen.Val, align 16 + %a78 = alloca %S.gen.Val, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a103 = alloca %S.ast.Type, align 16 + %a107 = alloca %S.gen.Val, align 16 + %a114 = alloca %S.ast.Type, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca i64, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca %S.ast.Type, align 16 + %a290 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4326, i64 4, i64 0 }) + store %S.ast.Type %t4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4327, i64 5, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then6693, label %else6694 +then6693: + %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t13 = load { ptr, i64, i64 }, ptr %t12 + %t14 = extractvalue { ptr, i64, i64 } %t13, 1 + %t15 = icmp uge i64 0, %t14 + br i1 %t15, label %range6696, label %inrange6697 +range6696: + call void @finch_panic_index(ptr @.str.4328, i64 3666, i64 0, i64 %t14) + unreachable +inrange6697: + %t16 = extractvalue { ptr, i64, i64 } %t13, 0 + %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i64 0 + %t18 = load %S.ast.Type, ptr %t17 + store %S.ast.Type %t18, ptr %a19 + call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) + %t21 = load %S.ast.Type, ptr %a20 + %t22 = load %S.ast.Type, ptr %a5 + store %S.ast.Type %t21, ptr %a5 + store %S.ast.Type %t22, ptr %a23 + call void @finch.drop.S_ast_Type(ptr %a23) + br label %endif6695 +else6694: + %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i32 0, i32 1 + %t26 = load i64, ptr %t25 + %t27 = icmp eq i64 %t26, 0 + br i1 %t27, label %then6698, label %endif6700 +then6698: + %t28 = load ptr, ptr %a1 + %t29 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t28, %S.ast.Node %t29, { ptr, i64, i64 } { ptr @.str.4329, i64 47, i64 0 }) + br label %endif6700 +endif6700: + br label %endif6695 +endif6695: + store { ptr, i64, i64 } zeroinitializer, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic6701, label %ok6702 +panic6701: + call void @finch_panic(ptr @.str.4330, i64 3671, ptr @.str.4331) + unreachable +ok6702: + %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 11 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 + %t35 = load i64, ptr %t34 + store i64 %t35, ptr %a36 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + store i64 0, ptr %a38 + br label %each.cond6703 +each.cond6703: + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 + %t40 = load i64, ptr %t39 + %t41 = load i64, ptr %a38 + %t42 = icmp slt i64 %t41, %t40 + br i1 %t42, label %each.body6704, label %each.end6706 +each.body6704: + %t43 = load ptr, ptr %t37 + %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 + %t45 = load %S.ast.Node, ptr %t44 + store %S.ast.Node %t45, ptr %a46 + store %S.gen.Val zeroinitializer, ptr %a47 + %t48 = getelementptr inbounds %S.ast.Type, ptr %a5, i32 0, i32 0 + %t49 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.4332, i64 4, i64 0 }, ptr %a51 + %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) + %t53 = icmp ne i32 %t52, 0 + br i1 %t53, label %then6707, label %else6708 +then6707: + %t54 = load ptr, ptr %a1 + %t55 = load %S.ast.Node, ptr %a46 + %t56 = call %S.gen.Val @finch.gen.expr(ptr %t54, %S.ast.Node %t55) + %t57 = load %S.gen.Val, ptr %a47 + store %S.gen.Val %t56, ptr %a47 + store %S.gen.Val %t57, ptr %a58 + call void @finch.drop.S_gen_Val(ptr %a58) + %t59 = getelementptr inbounds %S.gen.Val, ptr %a47, i32 0, i32 1 + %t60 = load %S.ast.Type, ptr %t59 + store %S.ast.Type %t60, ptr %a61 + call void @finch.copy.S_ast_Type(ptr %a62, ptr %a61) + %t63 = load %S.ast.Type, ptr %a62 + %t64 = load %S.ast.Type, ptr %a5 + store %S.ast.Type %t63, ptr %a5 + store %S.ast.Type %t64, ptr %a65 + call void @finch.drop.S_ast_Type(ptr %a65) + br label %endif6709 +else6708: + %t66 = load ptr, ptr %a1 + %t67 = load %S.ast.Node, ptr %a46 + %t68 = load %S.ast.Type, ptr %a5 + %t69 = call %S.gen.Val @finch.gen.exprWant(ptr %t66, %S.ast.Node %t67, %S.ast.Type %t68) + %t70 = load %S.gen.Val, ptr %a47 + store %S.gen.Val %t69, ptr %a47 + store %S.gen.Val %t70, ptr %a71 + call void @finch.drop.S_gen_Val(ptr %a71) + br label %endif6709 +endif6709: + %t72 = load ptr, ptr %a1 + %t73 = load %S.gen.Val, ptr %a47 + %t74 = load %S.ast.Type, ptr %a5 + %t75 = load %S.ast.Node, ptr %a46 + %t76 = call %S.gen.Val @finch.gen.coerce(ptr %t72, %S.gen.Val %t73, %S.ast.Type %t74, %S.ast.Node %t75, { ptr, i64, i64 } { ptr @.str.4333, i64 27, i64 0 }) + %t77 = load %S.gen.Val, ptr %a47 + store %S.gen.Val %t76, ptr %a47 + store %S.gen.Val %t77, ptr %a78 + call void @finch.drop.S_gen_Val(ptr %a78) + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t80 = load ptr, ptr %a1 + %t81 = load %S.gen.Val, ptr %a47 + %t82 = call { ptr, i64, i64 } @finch.gen.own(ptr %t80, %S.gen.Val %t81) + %t83 = load i64, ptr %t79 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %a30, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %a30 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 + store { ptr, i64, i64 } %t82, ptr %t86 + store i64 %t84, ptr %t79 + %t87 = load ptr, ptr %a1 + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t89 = load i64, ptr %t88 + %t90 = sub i64 %t89, 1 + %t91 = load { ptr, i64, i64 }, ptr %a30 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 %t90, %t92 + br i1 %t93, label %range6710, label %inrange6711 +range6710: + call void @finch_panic_index(ptr @.str.4334, i64 3682, i64 %t90, i64 %t92) + unreachable +inrange6711: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 %t90 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_copy(ptr %a98, ptr %a97) + %t99 = load { ptr, i64, i64 }, ptr %a98 + %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 + %t101 = load %S.ast.Type, ptr %a5 + store %S.ast.Type %t101, ptr %a102 + call void @finch.copy.S_ast_Type(ptr %a103, ptr %a102) + %t104 = load %S.ast.Type, ptr %a103 + %t105 = insertvalue %S.gen.Val %t100, %S.ast.Type %t104, 1 + %t106 = insertvalue %S.gen.Val %t105, i1 true, 2 + call void @finch.gen.hold(ptr %t87, %S.gen.Val %t106) + store %S.gen.Val %t106, ptr %a107 + call void @finch.drop.S_gen_Val(ptr %a107) + call void @finch.drop.S_gen_Val(ptr %a47) + br label %each.step6705 +each.step6705: + %t108 = load i64, ptr %a38 + %t109 = add i64 %t108, 1 + store i64 %t109, ptr %a38 + br label %each.cond6703 +each.end6706: + %t110 = load ptr, ptr %a1 + %t111 = load i64, ptr %a36 + call void @finch.gen.heldEnd(ptr %t110, i64 %t111) + %t112 = load %S.ast.Type, ptr %a5 + %t113 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t112) + store %S.ast.Type %t113, ptr %a114 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t116 = load i64, ptr %t115 + call void @finch_str_from_int(ptr %a117, i64 %t116) + %t118 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t118, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.4335, i64 4, i64 0 }, ptr %a120 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t122 = load i64, ptr %t121 + %t123 = icmp sgt i64 %t122, 0 + br i1 %t123, label %then6712, label %endif6714 +then6712: + %t124 = load ptr, ptr %a1 + %t125 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.4336, i64 8, i64 0 }, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + %t129 = load { ptr, i64, i64 }, ptr %a126 + store { ptr, i64, i64 } %t129, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.4337, i64 2, i64 0 }, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + store { ptr, i64, i64 } %t129, ptr %a133 + call void @finch_str_drop(ptr %a133) + %t134 = load { ptr, i64, i64 }, ptr %a130 + %t135 = load ptr, ptr %a1 + %t136 = load %S.ast.Type, ptr %a5 + %t137 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t135, %S.ast.Type %t136) + store { ptr, i64, i64 } %t134, ptr %a139 + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t134, ptr %a141 + call void @finch_str_drop(ptr %a141) + store { ptr, i64, i64 } %t137, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a138 + %t144 = call { ptr, i64, i64 } @finch.gen.op(ptr %t124, { ptr, i64, i64 } %t143) + store { ptr, i64, i64 } %t143, ptr %a145 + call void @finch_str_drop(ptr %a145) + store { ptr, i64, i64 } %t144, ptr %a146 + %t147 = load ptr, ptr %a1 + %t148 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } { ptr @.str.4338, i64 26, i64 0 }, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.4339, i64 1, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + %t158 = call { ptr, i64, i64 } @finch.gen.op(ptr %t147, { ptr, i64, i64 } %t157) + store { ptr, i64, i64 } %t157, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t158, ptr %a120 + store { ptr, i64, i64 } %t160, ptr %a161 + call void @finch_str_drop(ptr %a161) + call void @finch_str_drop(ptr %a146) + br label %endif6714 +endif6714: + %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t163 = load i64, ptr %t162 + store i64 0, ptr %a164 + br label %for.cond6715 +for.cond6715: + %t165 = load i64, ptr %a164 + %t166 = icmp slt i64 %t165, %t163 + br i1 %t166, label %for.body6716, label %for.end6718 +for.body6716: + %t167 = load ptr, ptr %a1 + %t168 = load ptr, ptr %a1 + %t169 = load %S.ast.Type, ptr %a5 + %t170 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t168, %S.ast.Type %t169) + store { ptr, i64, i64 } { ptr @.str.4340, i64 23, i64 0 }, ptr %a172 + store { ptr, i64, i64 } %t170, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t170, ptr %a174 + call void @finch_str_drop(ptr %a174) + %t175 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } %t175, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.4341, i64 6, i64 0 }, ptr %a178 + call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) + store { ptr, i64, i64 } %t175, ptr %a179 + call void @finch_str_drop(ptr %a179) + %t180 = load { ptr, i64, i64 }, ptr %a176 + %t181 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t180, ptr %a183 + store { ptr, i64, i64 } %t181, ptr %a184 + call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) + store { ptr, i64, i64 } %t180, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a182 + store { ptr, i64, i64 } %t186, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.4342, i64 6, i64 0 }, ptr %a189 + call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) + store { ptr, i64, i64 } %t186, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a187 + %t192 = load i64, ptr %a164 + call void @finch_str_from_int(ptr %a193, i64 %t192) + %t194 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t191, ptr %a196 + store { ptr, i64, i64 } %t194, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t191, ptr %a198 + call void @finch_str_drop(ptr %a198) + store { ptr, i64, i64 } %t194, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a195 + %t201 = call { ptr, i64, i64 } @finch.gen.op(ptr %t167, { ptr, i64, i64 } %t200) + store { ptr, i64, i64 } %t200, ptr %a202 + call void @finch_str_drop(ptr %a202) + store { ptr, i64, i64 } %t201, ptr %a203 + %t204 = load ptr, ptr %a1 + %t205 = load ptr, ptr %a1 + %t206 = load %S.ast.Type, ptr %a5 + %t207 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t205, %S.ast.Type %t206) + %t208 = load i64, ptr %a164 + %t209 = load { ptr, i64, i64 }, ptr %a30 + %t210 = extractvalue { ptr, i64, i64 } %t209, 1 + %t211 = icmp uge i64 %t208, %t210 + br i1 %t211, label %range6719, label %inrange6720 +range6719: + call void @finch_panic_index(ptr @.str.4343, i64 3694, i64 %t208, i64 %t210) + unreachable +inrange6720: + %t212 = extractvalue { ptr, i64, i64 } %t209, 0 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t208 + %t214 = load { ptr, i64, i64 }, ptr %t213 + %t215 = load { ptr, i64, i64 }, ptr %a203 + call void @finch.gen.store(ptr %t204, { ptr, i64, i64 } %t207, { ptr, i64, i64 } %t214, { ptr, i64, i64 } %t215) + store { ptr, i64, i64 } %t207, ptr %a216 + call void @finch_str_drop(ptr %a216) + call void @finch_str_drop(ptr %a203) + br label %for.step6717 +for.step6717: + %t217 = load i64, ptr %a164 + %t218 = add i64 %t217, 1 + store i64 %t218, ptr %a164 + br label %for.cond6715 +for.end6718: + %t219 = load ptr, ptr %a1 + %t220 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.4344, i64 41, i64 0 }, ptr %a222 + store { ptr, i64, i64 } %t220, ptr %a223 + call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) + %t224 = load { ptr, i64, i64 }, ptr %a221 + store { ptr, i64, i64 } %t224, ptr %a226 + store { ptr, i64, i64 } { ptr @.str.4345, i64 3, i64 0 }, ptr %a227 + call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) + store { ptr, i64, i64 } %t224, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = load { ptr, i64, i64 }, ptr %a225 + %t230 = call { ptr, i64, i64 } @finch.gen.op(ptr %t219, { ptr, i64, i64 } %t229) + store { ptr, i64, i64 } %t229, ptr %a231 + call void @finch_str_drop(ptr %a231) + store { ptr, i64, i64 } %t230, ptr %a232 + %t233 = load ptr, ptr %a1 + %t234 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.4346, i64 30, i64 0 }, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t238, ptr %a240 + store { ptr, i64, i64 } { ptr @.str.4347, i64 6, i64 0 }, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t238, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + %t244 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } %t243, ptr %a246 + store { ptr, i64, i64 } %t244, ptr %a247 + call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) + store { ptr, i64, i64 } %t243, ptr %a248 + call void @finch_str_drop(ptr %a248) + %t249 = load { ptr, i64, i64 }, ptr %a245 + store { ptr, i64, i64 } %t249, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.4348, i64 3, i64 0 }, ptr %a252 + call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) + store { ptr, i64, i64 } %t249, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a250 + %t255 = call { ptr, i64, i64 } @finch.gen.op(ptr %t233, { ptr, i64, i64 } %t254) + store { ptr, i64, i64 } %t254, ptr %a256 + call void @finch_str_drop(ptr %a256) + store { ptr, i64, i64 } %t255, ptr %a257 + %t258 = load ptr, ptr %a1 + %t259 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } { ptr @.str.4349, i64 30, i64 0 }, ptr %a261 + store { ptr, i64, i64 } %t259, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a260 + store { ptr, i64, i64 } %t263, ptr %a265 + store { ptr, i64, i64 } { ptr @.str.4350, i64 6, i64 0 }, ptr %a266 + call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) + store { ptr, i64, i64 } %t263, ptr %a267 + call void @finch_str_drop(ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a264 + %t269 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } %t268, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t268, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.4351, i64 3, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + store { ptr, i64, i64 } %t274, ptr %a278 + call void @finch_str_drop(ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a275 + %t280 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t279) + store { ptr, i64, i64 } %t279, ptr %a281 + call void @finch_str_drop(ptr %a281) + store { ptr, i64, i64 } %t280, ptr %a282 + %t283 = load { ptr, i64, i64 }, ptr %a282 + store { ptr, i64, i64 } %t283, ptr %a284 + call void @finch_str_copy(ptr %a285, ptr %a284) + %t286 = load { ptr, i64, i64 }, ptr %a285 + %t287 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t286, 0 + %t288 = load %S.ast.Type, ptr %a114 + store %S.ast.Type %t288, ptr %a289 + call void @finch.copy.S_ast_Type(ptr %a290, ptr %a289) + %t291 = load %S.ast.Type, ptr %a290 + %t292 = insertvalue %S.gen.Val %t287, %S.ast.Type %t291, 1 + %t293 = insertvalue %S.gen.Val %t292, i1 true, 2 + call void @finch_str_drop(ptr %a282) + call void @finch_str_drop(ptr %a257) + call void @finch_str_drop(ptr %a232) + call void @finch_str_drop(ptr %a120) + call void @finch_str_drop(ptr %a119) + call void @finch.drop.S_ast_Type(ptr %a114) + call void @finch.drop.arr_str(ptr %a30) + call void @finch.drop.S_ast_Type(ptr %a5) + ret %S.gen.Val %t293 +} + +define internal void @finch.copy.S_gen_Place(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Place, ptr %src + store %S.gen.Place %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal %S.gen.Place @finch.gen.place(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.gen.Ref, align 16 + %a42 = alloca %S.gen.Place, align 16 + %a43 = alloca %S.gen.Place, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4352, i64 3, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.from6721 +logic.from6721: + br i1 %t9, label %logic.rhs6722, label %logic.end6723 +logic.rhs6722: + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) + %t14 = icmp slt i64 %t13, 0 + br label %logic.rend6724 +logic.rend6724: + br label %logic.end6723 +logic.end6723: + %t15 = phi i1 [ false, %logic.from6721 ], [ %t14, %logic.rend6724 ] + br i1 %t15, label %then6725, label %endif6727 +then6725: + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Node, ptr %a2 + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } { ptr @.str.4353, i64 28, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.4354, i64 1, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } %t28) + store { ptr, i64, i64 } %t28, ptr %a29 + call void @finch_str_drop(ptr %a29) + br label %endif6727 +endif6727: + %t30 = load ptr, ptr %a1 + %t31 = load %S.ast.Node, ptr %a2 + %t32 = load i1, ptr %a3 + %t33 = call %S.gen.Ref @finch.gen.ref(ptr %t30, %S.ast.Node %t31, i1 %t32) + store %S.gen.Ref %t33, ptr %a34 + %t35 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 0 + %t36 = load i1, ptr %t35 + %t37 = xor i1 %t36, true + br i1 %t37, label %then6728, label %endif6730 +then6728: + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t38, %S.ast.Node %t39, { ptr, i64, i64 } { ptr @.str.4355, i64 60, i64 0 }) + br label %endif6730 +endif6730: + %t40 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 1 + %t41 = load %S.gen.Place, ptr %t40 + store %S.gen.Place %t41, ptr %a42 + call void @finch.copy.S_gen_Place(ptr %a43, ptr %a42) + %t44 = load %S.gen.Place, ptr %a43 + call void @finch.drop.S_gen_Ref(ptr %a34) + ret %S.gen.Place %t44 +} + +define internal void @finch.copy.S_cimport_CConst(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CConst, ptr %src + store %S.cimport.CConst %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CConst, ptr %dst, i32 0, i32 3 + %t3 = getelementptr inbounds %S.cimport.CConst, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t2, ptr %t3) + ret void +} + +define internal %S.gen.Ref @finch.gen.ref(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca %S.cimport.CConst, align 16 + %a44 = alloca %S.cimport.CConst, align 16 + %a46 = alloca %S.cimport.CConst, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca %S.ast.Type, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca i64, align 16 + %a190 = alloca i64, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca %S.ast.Type, align 16 + %a256 = alloca %S.ast.Type, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca %S.gen.Var, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca %S.ast.Type, align 16 + %a359 = alloca %S.ast.Type, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4356, i64 3, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then6731, label %endif6733 +then6731: + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) + store i64 %t13, ptr %a14 + %t15 = load i64, ptr %a14 + %t16 = icmp slt i64 %t15, 0 + br label %logic.from6734 +logic.from6734: + br i1 %t16, label %logic.rhs6735, label %logic.end6736 +logic.rhs6735: + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic6737, label %ok6738 +panic6737: + call void @finch_panic(ptr @.str.4357, i64 3718, ptr @.str.4358) + unreachable +ok6738: + %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 26 + %t20 = getelementptr inbounds %S.cimport.CImports, ptr %t19, i32 0, i32 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = call i64 @finch_map_find(ptr %t20, ptr %a23, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t25 = icmp sge i64 %t24, 0 + br label %logic.rend6739 +logic.rend6739: + br label %logic.end6736 +logic.end6736: + %t26 = phi i1 [ false, %logic.from6734 ], [ %t25, %logic.rend6739 ] + br i1 %t26, label %then6740, label %endif6742 +then6740: + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic6743, label %ok6744 +panic6743: + call void @finch_panic(ptr @.str.4359, i64 3719, ptr @.str.4360) + unreachable +ok6744: + %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 26 + %t30 = getelementptr inbounds %S.cimport.CImports, ptr %t29, i32 0, i32 1 + %t31 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + %t34 = call i64 @finch_map_find(ptr %t30, ptr %a33, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t35 = icmp slt i64 %t34, 0 + br i1 %t35, label %map.missing6745, label %map.found6746 +map.missing6745: + store { ptr, i64, i64 } zeroinitializer, ptr %a36 + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_buf_str(ptr %a36, ptr %a37, i32 1) + call void @finch_map_missing(ptr @.str.4361, i64 3719, ptr %a36) + unreachable +map.found6746: + %t38 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t30, i32 0, i32 0 + %t39 = load ptr, ptr %t38 + %t40 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t39, i64 %t34 + %t41 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t40, i32 0, i32 2 + %t42 = load %S.cimport.CConst, ptr %t41 + store %S.cimport.CConst %t42, ptr %a43 + call void @finch.copy.S_cimport_CConst(ptr %a44, ptr %a43) + %t45 = load %S.cimport.CConst, ptr %a44 + store %S.cimport.CConst %t45, ptr %a46 + %t47 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 0 + %t48 = load i1, ptr %t47 + br i1 %t48, label %then6747, label %endif6749 +then6747: + %t49 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t50 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 3 + %t51 = load { ptr, i64, i64 }, ptr %t50 + %t52 = call { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %t51) + %t53 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t52, 0 + %t54 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4362, i64 5, i64 0 }) + %t55 = insertvalue %S.gen.Val %t53, %S.ast.Type %t54, 1 + %t56 = insertvalue %S.gen.Val %t55, i1 true, 3 + %t57 = insertvalue %S.gen.Ref %t49, %S.gen.Val %t56, 2 + call void @finch.drop.S_cimport_CConst(ptr %a46) + ret %S.gen.Ref %t57 +endif6749: + %t58 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t59 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 1 + %t60 = load i64, ptr %t59 + call void @finch_str_from_int(ptr %a61, i64 %t60) + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t62, 0 + %t64 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4363, i64 3, i64 0 }) + %t65 = insertvalue %S.gen.Val %t63, %S.ast.Type %t64, 1 + %t66 = insertvalue %S.gen.Val %t65, i1 true, 3 + %t67 = insertvalue %S.gen.Ref %t58, %S.gen.Val %t66, 2 + call void @finch.drop.S_cimport_CConst(ptr %a46) + ret %S.gen.Ref %t67 +endif6742: + %t68 = load i64, ptr %a14 + %t69 = icmp slt i64 %t68, 0 + br label %logic.from6750 +logic.from6750: + br i1 %t69, label %logic.rhs6751, label %logic.end6752 +logic.rhs6751: + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic6753, label %ok6754 +panic6753: + call void @finch_panic(ptr @.str.4364, i64 3726, ptr @.str.4365) + unreachable +ok6754: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 26 + %t73 = getelementptr inbounds %S.cimport.CImports, ptr %t72, i32 0, i32 2 + %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + store { ptr, i64, i64 } %t75, ptr %a76 + %t77 = call i64 @finch_map_find(ptr %t73, ptr %a76, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t78 = icmp sge i64 %t77, 0 + %t79 = xor i1 %t78, true + br label %logic.rend6755 +logic.rend6755: + br label %logic.end6752 +logic.end6752: + %t80 = phi i1 [ false, %logic.from6750 ], [ %t79, %logic.rend6755 ] + br label %logic.from6756 +logic.from6756: + br i1 %t80, label %logic.rhs6757, label %logic.end6758 +logic.rhs6757: + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic6759, label %ok6760 +panic6759: + call void @finch_panic(ptr @.str.4366, i64 3726, ptr @.str.4367) + unreachable +ok6760: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 26 + %t84 = getelementptr inbounds %S.cimport.CImports, ptr %t83, i32 0, i32 0 + store { ptr, i64, i64 } { ptr @.str.4368, i64 7, i64 0 }, ptr %a85 + %t86 = call i64 @finch_map_find(ptr %t84, ptr %a85, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t87 = icmp sge i64 %t86, 0 + br label %logic.rend6761 +logic.rend6761: + br label %logic.end6758 +logic.end6758: + %t88 = phi i1 [ false, %logic.from6756 ], [ %t87, %logic.rend6761 ] + br label %logic.from6762 +logic.from6762: + br i1 %t88, label %logic.rhs6763, label %logic.end6764 +logic.rhs6763: + %t89 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t90 = load { ptr, i64, i64 }, ptr %t89 + store { ptr, i64, i64 } %t90, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.4369, i64 5, i64 0 }, ptr %a92 + %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) + %t94 = icmp ne i32 %t93, 0 + br label %logic.from6765 +logic.from6765: + br i1 %t94, label %logic.end6767, label %logic.rhs6766 +logic.rhs6766: + %t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.4370, i64 6, i64 0 }, ptr %a98 + %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) + %t100 = icmp ne i32 %t99, 0 + br label %logic.rend6768 +logic.rend6768: + br label %logic.end6767 +logic.end6767: + %t101 = phi i1 [ true, %logic.from6765 ], [ %t100, %logic.rend6768 ] + br label %logic.from6769 +logic.from6769: + br i1 %t101, label %logic.end6771, label %logic.rhs6770 +logic.rhs6770: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.4371, i64 6, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br label %logic.rend6772 +logic.rend6772: + br label %logic.end6771 +logic.end6771: + %t108 = phi i1 [ true, %logic.from6769 ], [ %t107, %logic.rend6772 ] + br label %logic.rend6773 +logic.rend6773: + br label %logic.end6764 +logic.end6764: + %t109 = phi i1 [ false, %logic.from6762 ], [ %t108, %logic.rend6773 ] + br i1 %t109, label %then6774, label %endif6776 +then6774: + store { ptr, i64, i64 } { ptr @.str.4372, i64 1, i64 0 }, ptr %a110 + %t111 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.4373, i64 5, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br i1 %t116, label %then6777, label %else6778 +then6777: + %t117 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.4374, i64 1, i64 0 }, ptr %a110 + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_drop(ptr %a118) + br label %endif6779 +else6778: + %t119 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t120 = load { ptr, i64, i64 }, ptr %t119 + store { ptr, i64, i64 } %t120, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.4375, i64 6, i64 0 }, ptr %a122 + %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) + %t124 = icmp ne i32 %t123, 0 + br i1 %t124, label %then6780, label %endif6782 +then6780: + %t125 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.4376, i64 1, i64 0 }, ptr %a110 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_drop(ptr %a126) + br label %endif6782 +endif6782: + br label %endif6779 +endif6779: + %t127 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t128 = load ptr, ptr %a1 + %t129 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.4377, i64 31, i64 0 }, ptr %a131 + store { ptr, i64, i64 } %t129, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t133, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.4378, i64 1, i64 0 }, ptr %a136 + call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) + store { ptr, i64, i64 } %t133, ptr %a137 + call void @finch_str_drop(ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a134 + %t139 = call { ptr, i64, i64 } @finch.gen.op(ptr %t128, { ptr, i64, i64 } %t138) + store { ptr, i64, i64 } %t138, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t142 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4379, i64 3, i64 0 }) + %t143 = insertvalue %S.gen.Val %t141, %S.ast.Type %t142, 1 + %t144 = insertvalue %S.gen.Ref %t127, %S.gen.Val %t143, 2 + call void @finch_str_drop(ptr %a110) + ret %S.gen.Ref %t144 +endif6776: + %t145 = load i64, ptr %a14 + %t146 = icmp slt i64 %t145, 0 + br label %logic.from6783 +logic.from6783: + br i1 %t146, label %logic.rhs6784, label %logic.end6785 +logic.rhs6784: + %t147 = load ptr, ptr %a1 + %t148 = icmp eq ptr %t147, null + br i1 %t148, label %panic6786, label %ok6787 +panic6786: + call void @finch_panic(ptr @.str.4380, i64 3735, ptr @.str.4381) + unreachable +ok6787: + %t149 = getelementptr inbounds %S.gen.Gen, ptr %t147, i32 0, i32 26 + %t150 = getelementptr inbounds %S.cimport.CImports, ptr %t149, i32 0, i32 2 + %t151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t152, ptr %a153 + %t154 = call i64 @finch_map_find(ptr %t150, ptr %a153, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t155 = icmp sge i64 %t154, 0 + br label %logic.rend6788 +logic.rend6788: + br label %logic.end6785 +logic.end6785: + %t156 = phi i1 [ false, %logic.from6783 ], [ %t155, %logic.rend6788 ] + br i1 %t156, label %then6789, label %endif6791 +then6789: + %t157 = load ptr, ptr %a1 + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic6792, label %ok6793 +panic6792: + call void @finch_panic(ptr @.str.4382, i64 3736, ptr @.str.4383) + unreachable +ok6793: + %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 26 + %t161 = getelementptr inbounds %S.cimport.CImports, ptr %t160, i32 0, i32 2 + %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t163 = load { ptr, i64, i64 }, ptr %t162 + store { ptr, i64, i64 } %t163, ptr %a164 + %t165 = call i64 @finch_map_find(ptr %t161, ptr %a164, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t166 = icmp slt i64 %t165, 0 + br i1 %t166, label %map.missing6794, label %map.found6795 +map.missing6794: + store { ptr, i64, i64 } zeroinitializer, ptr %a167 + store { ptr, i64, i64 } %t163, ptr %a168 + call void @finch_buf_str(ptr %a167, ptr %a168, i32 1) + call void @finch_map_missing(ptr @.str.4384, i64 3736, ptr %a167) + unreachable +map.found6795: + %t169 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t161, i32 0, i32 0 + %t170 = load ptr, ptr %t169 + %t171 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t170, i64 %t165 + %t172 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t171, i32 0, i32 2 + %t173 = load %S.ast.Type, ptr %t172 + %t174 = load %S.ast.Node, ptr %a2 + %t175 = call %S.ast.Type @finch.gen.resolve(ptr %t157, %S.ast.Type %t173, %S.ast.Node %t174) + store %S.ast.Type %t175, ptr %a176 + %t177 = load ptr, ptr %a1 + %t178 = icmp eq ptr %t177, null + br i1 %t178, label %panic6796, label %ok6797 +panic6796: + call void @finch_panic(ptr @.str.4385, i64 3737, ptr @.str.4386) + unreachable +ok6797: + %t179 = getelementptr inbounds %S.gen.Gen, ptr %t177, i32 0, i32 40 + %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 + %t181 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t182 = load { ptr, i64, i64 }, ptr %t181 + store { ptr, i64, i64 } { ptr @.str.4387, i64 2, i64 0 }, ptr %a184 + store { ptr, i64, i64 } %t182, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a183 + store i64 -1, ptr %a187 + %t188 = load i64, ptr %t180 + %t189 = load ptr, ptr %t179 + store i64 0, ptr %a190 + br label %find.cond6798 +find.cond6798: + %t191 = load i64, ptr %a190 + %t192 = icmp slt i64 %t191, %t188 + br i1 %t192, label %find.body6799, label %find.end6802 +find.body6799: + %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t189, i64 %t191 + %t194 = load { ptr, i64, i64 }, ptr %t193 + store { ptr, i64, i64 } %t194, ptr %a195 + store { ptr, i64, i64 } %t186, ptr %a196 + %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) + %t198 = icmp ne i32 %t197, 0 + br i1 %t198, label %find.hit6800, label %find.next6801 +find.hit6800: + store i64 %t191, ptr %a187 + br label %find.end6802 +find.next6801: + %t199 = add i64 %t191, 1 + store i64 %t199, ptr %a190 + br label %find.cond6798 +find.end6802: + store { ptr, i64, i64 } %t186, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load i64, ptr %a187 + %t202 = icmp sge i64 %t201, 0 + %t203 = xor i1 %t202, true + br i1 %t203, label %then6803, label %endif6805 +then6803: + %t204 = load ptr, ptr %a1 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic6806, label %ok6807 +panic6806: + call void @finch_panic(ptr @.str.4388, i64 3738, ptr @.str.4389) + unreachable +ok6807: + %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 40 + %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 + %t208 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t209 = load { ptr, i64, i64 }, ptr %t208 + store { ptr, i64, i64 } { ptr @.str.4390, i64 2, i64 0 }, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + %t213 = load { ptr, i64, i64 }, ptr %a210 + %t214 = load i64, ptr %t207 + %t215 = add i64 %t214, 1 + call void @finch_arr_reserve(ptr %t206, i64 %t215, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t216 = load ptr, ptr %t206 + %t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i64 %t214 + store { ptr, i64, i64 } %t213, ptr %t217 + store i64 %t215, ptr %t207 + %t218 = load ptr, ptr %a1 + %t219 = icmp eq ptr %t218, null + br i1 %t219, label %panic6808, label %ok6809 +panic6808: + call void @finch_panic(ptr @.str.4391, i64 3739, ptr @.str.4392) + unreachable +ok6809: + %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 2 + %t221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t220, i32 0, i32 1 + %t222 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t223 = load { ptr, i64, i64 }, ptr %t222 + store { ptr, i64, i64 } { ptr @.str.4393, i64 1, i64 0 }, ptr %a225 + store { ptr, i64, i64 } %t223, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a224 + store { ptr, i64, i64 } %t227, ptr %a229 + store { ptr, i64, i64 } { ptr @.str.4394, i64 19, i64 0 }, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + store { ptr, i64, i64 } %t227, ptr %a231 + call void @finch_str_drop(ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a228 + %t233 = load ptr, ptr %a1 + %t234 = load %S.ast.Type, ptr %a176 + %t235 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t233, %S.ast.Type %t234) + store { ptr, i64, i64 } %t232, ptr %a237 + store { ptr, i64, i64 } %t235, ptr %a238 + call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) + store { ptr, i64, i64 } %t232, ptr %a239 + call void @finch_str_drop(ptr %a239) + store { ptr, i64, i64 } %t235, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = load { ptr, i64, i64 }, ptr %a236 + %t242 = load i64, ptr %t221 + %t243 = add i64 %t242, 1 + call void @finch_arr_reserve(ptr %t220, i64 %t243, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t244 = load ptr, ptr %t220 + %t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i64 %t242 + store { ptr, i64, i64 } %t241, ptr %t245 + store i64 %t243, ptr %t221 + br label %endif6805 +endif6805: + %t246 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t247 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t248 = load { ptr, i64, i64 }, ptr %t247 + store { ptr, i64, i64 } { ptr @.str.4395, i64 1, i64 0 }, ptr %a250 + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + %t252 = load { ptr, i64, i64 }, ptr %a249 + %t253 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t252, 0 + %t254 = load %S.ast.Type, ptr %a176 + store %S.ast.Type %t254, ptr %a255 + call void @finch.copy.S_ast_Type(ptr %a256, ptr %a255) + %t257 = load %S.ast.Type, ptr %a256 + %t258 = insertvalue %S.gen.Place %t253, %S.ast.Type %t257, 1 + %t259 = insertvalue %S.gen.Ref %t246, %S.gen.Place %t258, 1 + call void @finch.drop.S_ast_Type(ptr %a176) + ret %S.gen.Ref %t259 +endif6791: + %t260 = load i64, ptr %a14 + %t261 = icmp slt i64 %t260, 0 + br i1 %t261, label %then6810, label %endif6812 +then6810: + %t262 = load ptr, ptr %a1 + %t263 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = call i1 @finch.gen.imports(ptr %t262, { ptr, i64, i64 } %t264) + br i1 %t265, label %then6813, label %endif6815 +then6813: + %t266 = load ptr, ptr %a1 + %t267 = load %S.ast.Node, ptr %a2 + %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t269 = load { ptr, i64, i64 }, ptr %t268 + store { ptr, i64, i64 } { ptr @.str.4396, i64 1, i64 0 }, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t273, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.4397, i64 43, i64 0 }, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + %t279 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t280 = load { ptr, i64, i64 }, ptr %t279 + store { ptr, i64, i64 } %t278, ptr %a282 + store { ptr, i64, i64 } %t280, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t278, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + store { ptr, i64, i64 } %t285, ptr %a287 + store { ptr, i64, i64 } { ptr @.str.4398, i64 10, i64 0 }, ptr %a288 + call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) + store { ptr, i64, i64 } %t285, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a286 + call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t290) + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + br label %endif6815 +endif6815: + %t292 = load ptr, ptr %a1 + %t293 = load %S.ast.Node, ptr %a2 + %t294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t295 = load { ptr, i64, i64 }, ptr %t294 + store { ptr, i64, i64 } { ptr @.str.4399, i64 28, i64 0 }, ptr %a297 + store { ptr, i64, i64 } %t295, ptr %a298 + call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t299, ptr %a301 + store { ptr, i64, i64 } { ptr @.str.4400, i64 1, i64 0 }, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t299, ptr %a303 + call void @finch_str_drop(ptr %a303) + %t304 = load { ptr, i64, i64 }, ptr %a300 + call void @finch.gen.fail(ptr %t292, %S.ast.Node %t293, { ptr, i64, i64 } %t304) + store { ptr, i64, i64 } %t304, ptr %a305 + call void @finch_str_drop(ptr %a305) + br label %endif6812 +endif6812: + %t306 = load ptr, ptr %a1 + %t307 = load i64, ptr %a14 + %t308 = call %S.gen.Var @finch.gen.varAt(ptr %t306, i64 %t307) + store %S.gen.Var %t308, ptr %a309 + %t310 = load ptr, ptr %a1 + %t311 = load %S.ast.Node, ptr %a2 + %t312 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t313 = load i64, ptr %t312 + %t314 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 + %t316 = load i64, ptr %t315 + %t317 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 1 + %t318 = load %S.ast.Type, ptr %t317 + %t319 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t318) + store { ptr, i64, i64 } { ptr @.str.4401, i64 9, i64 0 }, ptr %a321 + store { ptr, i64, i64 } %t319, ptr %a322 + call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) + store { ptr, i64, i64 } %t319, ptr %a323 + call void @finch_str_drop(ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t324, ptr %a326 + store { ptr, i64, i64 } { ptr @.str.4402, i64 1, i64 0 }, ptr %a327 + call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) + store { ptr, i64, i64 } %t324, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a325 + %t330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t331 = load { ptr, i64, i64 }, ptr %t330 + store { ptr, i64, i64 } %t329, ptr %a333 + store { ptr, i64, i64 } %t331, ptr %a334 + call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) + store { ptr, i64, i64 } %t329, ptr %a335 + call void @finch_str_drop(ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a332 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.4403, i64 4, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t336, ptr %a340 + call void @finch_str_drop(ptr %a340) + %t341 = load { ptr, i64, i64 }, ptr %a337 + %t342 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 7 + %t343 = load { ptr, i64, i64 }, ptr %t342 + %t344 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 8 + %t345 = load i64, ptr %t344 + %t346 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 9 + %t347 = load i64, ptr %t346 + call void @finch.gen.noteRef(ptr %t310, %S.ast.Node %t311, i64 %t313, i64 %t316, { ptr, i64, i64 } %t341, { ptr, i64, i64 } %t343, i64 %t345, i64 %t347) + store { ptr, i64, i64 } %t341, ptr %a348 + call void @finch_str_drop(ptr %a348) + %t349 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t350 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 2 + %t351 = load { ptr, i64, i64 }, ptr %t350 + store { ptr, i64, i64 } %t351, ptr %a352 + call void @finch_str_copy(ptr %a353, ptr %a352) + %t354 = load { ptr, i64, i64 }, ptr %a353 + %t355 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t354, 0 + %t356 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 1 + %t357 = load %S.ast.Type, ptr %t356 + store %S.ast.Type %t357, ptr %a358 + call void @finch.copy.S_ast_Type(ptr %a359, ptr %a358) + %t360 = load %S.ast.Type, ptr %a359 + %t361 = insertvalue %S.gen.Place %t355, %S.ast.Type %t360, 1 + %t362 = insertvalue %S.gen.Ref %t349, %S.gen.Place %t361, 1 + call void @finch.drop.S_gen_Var(ptr %a309) + ret %S.gen.Ref %t362 +endif6733: + %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t364 = load { ptr, i64, i64 }, ptr %t363 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.4404, i64 6, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br i1 %t368, label %then6816, label %endif6818 +then6816: + %t369 = load ptr, ptr %a1 + %t370 = load %S.ast.Node, ptr %a2 + %t371 = load i1, ptr %a3 + %t372 = call %S.gen.Ref @finch.gen.member(ptr %t369, %S.ast.Node %t370, i1 %t371) + ret %S.gen.Ref %t372 +endif6818: + %t373 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t374 = load { ptr, i64, i64 }, ptr %t373 + store { ptr, i64, i64 } %t374, ptr %a375 + store { ptr, i64, i64 } { ptr @.str.4405, i64 5, i64 0 }, ptr %a376 + %t377 = call i32 @finch_str_eq(ptr %a375, ptr %a376) + %t378 = icmp ne i32 %t377, 0 + br i1 %t378, label %then6819, label %endif6821 +then6819: + %t379 = load ptr, ptr %a1 + %t380 = load %S.ast.Node, ptr %a2 + %t381 = load i1, ptr %a3 + %t382 = call %S.gen.Ref @finch.gen.index(ptr %t379, %S.ast.Node %t380, i1 %t381) + ret %S.gen.Ref %t382 +endif6821: + %t383 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t384 = load ptr, ptr %a1 + %t385 = load %S.ast.Node, ptr %a2 + %t386 = call %S.gen.Val @finch.gen.expr(ptr %t384, %S.ast.Node %t385) + %t387 = insertvalue %S.gen.Ref %t383, %S.gen.Val %t386, 2 + ret %S.gen.Ref %t387 +} + +define internal { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca i64, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4407, i64 1, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then6822, label %endif6824 +then6822: + %t13 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4408, i64 1, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a14 + %t18 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t17, ptr %a6 + store { ptr, i64, i64 } %t18, ptr %a19 + call void @finch_str_drop(ptr %a19) + br label %endif6824 +endif6824: + %t20 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.4410, i64 1, i64 0 }, ptr %a23 + %t24 = call i64 @finch_str_find(ptr %a21, ptr %a23) + %t25 = icmp sge i64 %t24, 0 + %t26 = xor i1 %t25, true + br i1 %t26, label %then6825, label %endif6827 +then6825: + %t27 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.4412, i64 1, i64 0 }, ptr %a30 + %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) + store i64 %t31, ptr %a32 + %t33 = load i64, ptr %a32 + %t34 = icmp slt i64 %t33, 0 + br i1 %t34, label %then6828, label %endif6830 +then6828: + %t35 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.4414, i64 1, i64 0 }, ptr %a38 + %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) + store i64 %t39, ptr %a32 + br label %endif6830 +endif6830: + %t40 = load i64, ptr %a32 + %t41 = icmp slt i64 %t40, 0 + br i1 %t41, label %then6831, label %endif6833 +then6831: + %t42 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t42, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.4415, i64 2, i64 0 }, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a43 + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t46 +endif6833: + %t47 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t47, ptr %a48 + %t50 = load i64, ptr %a32 + call void @finch_str_sub(ptr %a49, ptr %a48, i64 0, i64 %t50, ptr @.str.4416, i64 3776) + %t51 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.4417, i64 2, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + %t57 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t57, ptr %a58 + %t60 = load i64, ptr %a32 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t62 = load i64, ptr %t61 + call void @finch_str_sub(ptr %a59, ptr %a58, i64 %t60, i64 %t62, ptr @.str.4418, i64 3776) + %t63 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t56, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t56, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t69 +endif6827: + %t70 = load { ptr, i64, i64 }, ptr %a6 + ret { ptr, i64, i64 } %t70 +} + +define internal i64 @finch.gen.enumNamed(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4419, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from6834 +logic.from6834: + br i1 %t8, label %logic.rhs6835, label %logic.end6836 +logic.rhs6835: + %t9 = load ptr, ptr %a1 + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) + %t13 = icmp slt i64 %t12, 0 + br label %logic.rend6837 +logic.rend6837: + br label %logic.end6836 +logic.end6836: + %t14 = phi i1 [ false, %logic.from6834 ], [ %t13, %logic.rend6837 ] + br i1 %t14, label %then6838, label %endif6840 +then6838: + %t15 = load ptr, ptr %a1 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic6841, label %ok6842 +panic6841: + call void @finch_panic(ptr @.str.4420, i64 3784, ptr @.str.4421) + unreachable +ok6842: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = call i64 @finch.gen.findEnum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) + ret i64 %t22 +endif6840: + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.4422, i64 6, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.from6843 +logic.from6843: + br i1 %t28, label %logic.rhs6844, label %logic.end6845 +logic.rhs6844: + %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 0, %t31 + br i1 %t32, label %range6846, label %inrange6847 +range6846: + call void @finch_panic_index(ptr @.str.4423, i64 3786, i64 0, i64 %t31) + unreachable +inrange6847: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 + %t36 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.4424, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.rend6848 +logic.rend6848: + br label %logic.end6845 +logic.end6845: + %t41 = phi i1 [ false, %logic.from6843 ], [ %t40, %logic.rend6848 ] + br label %logic.from6849 +logic.from6849: + br i1 %t41, label %logic.rhs6850, label %logic.end6851 +logic.rhs6850: + %t42 = load ptr, ptr %a1 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 0, %t45 + br i1 %t46, label %range6852, label %inrange6853 +range6852: + call void @finch_panic_index(ptr @.str.4425, i64 3786, i64 0, i64 %t45) + unreachable +inrange6853: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 + %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) + %t52 = icmp slt i64 %t51, 0 + br label %logic.rend6854 +logic.rend6854: + br label %logic.end6851 +logic.end6851: + %t53 = phi i1 [ false, %logic.from6849 ], [ %t52, %logic.rend6854 ] + br label %logic.from6855 +logic.from6855: + br i1 %t53, label %logic.rhs6856, label %logic.end6857 +logic.rhs6856: + %t54 = load ptr, ptr %a1 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t56 = load { ptr, i64, i64 }, ptr %t55 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 0, %t57 + br i1 %t58, label %range6858, label %inrange6859 +range6858: + call void @finch_panic_index(ptr @.str.4426, i64 3786, i64 0, i64 %t57) + unreachable +inrange6859: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 + %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) + br label %logic.rend6860 +logic.rend6860: + br label %logic.end6857 +logic.end6857: + %t64 = phi i1 [ false, %logic.from6855 ], [ %t63, %logic.rend6860 ] + br i1 %t64, label %then6861, label %endif6863 +then6861: + %t65 = load ptr, ptr %a1 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t67 = load { ptr, i64, i64 }, ptr %t66 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 0, %t68 + br i1 %t69, label %range6864, label %inrange6865 +range6864: + call void @finch_panic_index(ptr @.str.4427, i64 3787, i64 0, i64 %t68) + unreachable +inrange6865: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 + %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + %t76 = call i64 @finch.gen.findEnum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) + ret i64 %t76 +endif6863: + ret i64 -1 +} + +define internal i64 @finch.gen.sumNamed(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4428, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from6866 +logic.from6866: + br i1 %t8, label %logic.rhs6867, label %logic.end6868 +logic.rhs6867: + %t9 = load ptr, ptr %a1 + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) + %t13 = icmp slt i64 %t12, 0 + br label %logic.rend6869 +logic.rend6869: + br label %logic.end6868 +logic.end6868: + %t14 = phi i1 [ false, %logic.from6866 ], [ %t13, %logic.rend6869 ] + br i1 %t14, label %then6870, label %endif6872 +then6870: + %t15 = load ptr, ptr %a1 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic6873, label %ok6874 +panic6873: + call void @finch_panic(ptr @.str.4429, i64 3795, ptr @.str.4430) + unreachable +ok6874: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = call i64 @finch.gen.findSum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) + ret i64 %t22 +endif6872: + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.4431, i64 6, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.from6875 +logic.from6875: + br i1 %t28, label %logic.rhs6876, label %logic.end6877 +logic.rhs6876: + %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 0, %t31 + br i1 %t32, label %range6878, label %inrange6879 +range6878: + call void @finch_panic_index(ptr @.str.4432, i64 3797, i64 0, i64 %t31) + unreachable +inrange6879: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 + %t36 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.4433, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.rend6880 +logic.rend6880: + br label %logic.end6877 +logic.end6877: + %t41 = phi i1 [ false, %logic.from6875 ], [ %t40, %logic.rend6880 ] + br label %logic.from6881 +logic.from6881: + br i1 %t41, label %logic.rhs6882, label %logic.end6883 +logic.rhs6882: + %t42 = load ptr, ptr %a1 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 0, %t45 + br i1 %t46, label %range6884, label %inrange6885 +range6884: + call void @finch_panic_index(ptr @.str.4434, i64 3797, i64 0, i64 %t45) + unreachable +inrange6885: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 + %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) + %t52 = icmp slt i64 %t51, 0 + br label %logic.rend6886 +logic.rend6886: + br label %logic.end6883 +logic.end6883: + %t53 = phi i1 [ false, %logic.from6881 ], [ %t52, %logic.rend6886 ] + br label %logic.from6887 +logic.from6887: + br i1 %t53, label %logic.rhs6888, label %logic.end6889 +logic.rhs6888: + %t54 = load ptr, ptr %a1 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t56 = load { ptr, i64, i64 }, ptr %t55 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 0, %t57 + br i1 %t58, label %range6890, label %inrange6891 +range6890: + call void @finch_panic_index(ptr @.str.4435, i64 3797, i64 0, i64 %t57) + unreachable +inrange6891: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 + %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) + br label %logic.rend6892 +logic.rend6892: + br label %logic.end6889 +logic.end6889: + %t64 = phi i1 [ false, %logic.from6887 ], [ %t63, %logic.rend6892 ] + br i1 %t64, label %then6893, label %endif6895 +then6893: + %t65 = load ptr, ptr %a1 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t67 = load { ptr, i64, i64 }, ptr %t66 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 0, %t68 + br i1 %t69, label %range6896, label %inrange6897 +range6896: + call void @finch_panic_index(ptr @.str.4436, i64 3798, i64 0, i64 %t68) + unreachable +inrange6897: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 + %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + %t76 = call i64 @finch.gen.findSum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) + ret i64 %t76 +endif6895: + ret i64 -1 +} + +define internal i64 @finch.gen.sumVariant(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a15 = alloca %S.gen.SumDef, align 16 + %a16 = alloca %S.gen.SumDef, align 16 + %a18 = alloca %S.gen.SumDef, align 16 + %a22 = alloca i64, align 16 + %a25 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca i64, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic6898, label %ok6899 +panic6898: + call void @finch_panic(ptr @.str.4437, i64 3804, ptr @.str.4438) + unreachable +ok6899: + %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 22 + %t8 = load i64, ptr %a2 + %t9 = load { ptr, i64, i64 }, ptr %t7 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range6900, label %inrange6901 +range6900: + call void @finch_panic_index(ptr @.str.4439, i64 3804, i64 %t8, i64 %t10) + unreachable +inrange6901: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.gen.SumDef, ptr %t12, i64 %t8 + %t14 = load %S.gen.SumDef, ptr %t13 + store %S.gen.SumDef %t14, ptr %a15 + call void @finch.copy.S_gen_SumDef(ptr %a16, ptr %a15) + %t17 = load %S.gen.SumDef, ptr %a16 + store %S.gen.SumDef %t17, ptr %a18 + %t19 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 2 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %a3 + store i64 -1, ptr %a22 + %t23 = load i64, ptr %t20 + %t24 = load ptr, ptr %t19 + store i64 0, ptr %a25 + br label %find.cond6902 +find.cond6902: + %t26 = load i64, ptr %a25 + %t27 = icmp slt i64 %t26, %t23 + br i1 %t27, label %find.body6903, label %find.end6906 +find.body6903: + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } %t21, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br i1 %t33, label %find.hit6904, label %find.next6905 +find.hit6904: + store i64 %t26, ptr %a22 + br label %find.end6906 +find.next6905: + %t34 = add i64 %t26, 1 + store i64 %t34, ptr %a25 + br label %find.cond6902 +find.end6906: + %t35 = load i64, ptr %a22 + store i64 %t35, ptr %a36 + %t37 = load i64, ptr %a36 + %t38 = icmp slt i64 %t37, 0 + br i1 %t38, label %then6907, label %endif6909 +then6907: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a4 + %t41 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.4440, i64 9, i64 0 }, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t46, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.4441, i64 17, i64 0 }, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + %t52 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t51, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t51, ptr %a56 + call void @finch_str_drop(ptr %a56) + %t57 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } %t57, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.4442, i64 11, i64 0 }, ptr %a60 + call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) + store { ptr, i64, i64 } %t57, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load { ptr, i64, i64 }, ptr %a58 + %t63 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 2 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4443, i64 2, i64 0 }, ptr %a65 + call void @finch_str_join(ptr %a66, ptr %t63, ptr %a65) + %t67 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t62, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t62, ptr %a71 + call void @finch_str_drop(ptr %a71) + store { ptr, i64, i64 } %t67, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.4444, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif6909 +endif6909: + %t80 = load i64, ptr %a36 + call void @finch.drop.S_gen_SumDef(ptr %a18) + ret i64 %t80 +} + +define internal %S.gen.Val @finch.gen.sumMake(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a16 = alloca %S.gen.SumDef, align 16 + %a17 = alloca %S.gen.SumDef, align 16 + %a19 = alloca %S.gen.SumDef, align 16 + %a25 = alloca i64, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca i64, align 16 + %a178 = alloca %S.ast.Node, align 16 + %a179 = alloca %S.ast.Node, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic6910, label %ok6911 +panic6910: + call void @finch_panic(ptr @.str.4445, i64 3814, ptr @.str.4446) + unreachable +ok6911: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 22 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range6912, label %inrange6913 +range6912: + call void @finch_panic_index(ptr @.str.4447, i64 3814, i64 %t9, i64 %t11) + unreachable +inrange6913: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.SumDef, ptr %t13, i64 %t9 + %t15 = load %S.gen.SumDef, ptr %t14 + store %S.gen.SumDef %t15, ptr %a16 + call void @finch.copy.S_gen_SumDef(ptr %a17, ptr %a16) + %t18 = load %S.gen.SumDef, ptr %a17 + store %S.gen.SumDef %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = load i64, ptr %a2 + %t22 = load { ptr, i64, i64 }, ptr %a3 + %t23 = load %S.ast.Node, ptr %a5 + %t24 = call i64 @finch.gen.sumVariant(ptr %t20, i64 %t21, { ptr, i64, i64 } %t22, %S.ast.Node %t23) + store i64 %t24, ptr %a25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 + %t29 = load i64, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %t28 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 %t29, %t31 + br i1 %t32, label %range6914, label %inrange6915 +range6914: + call void @finch_panic_index(ptr @.str.4448, i64 3816, i64 %t29, i64 %t31) + unreachable +inrange6915: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds i64, ptr %t33, i64 %t29 + %t35 = load i64, ptr %t34 + %t36 = icmp ne i64 %t27, %t35 + br i1 %t36, label %then6916, label %endif6918 +then6916: + %t37 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 + %t38 = load i64, ptr %a25 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range6919, label %inrange6920 +range6919: + call void @finch_panic_index(ptr @.str.4449, i64 3817, i64 %t38, i64 %t40) + unreachable +inrange6920: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds i64, ptr %t42, i64 %t38 + %t44 = load i64, ptr %t43 + %t45 = icmp eq i64 %t44, 0 + br i1 %t45, label %then6921, label %endif6923 +then6921: + %t46 = load ptr, ptr %a1 + %t47 = load %S.ast.Node, ptr %a5 + %t48 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.4450, i64 22, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a49 + %t53 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t52, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t52, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t59, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.4451, i64 1, i64 0 }, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + store { ptr, i64, i64 } %t59, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a60 + %t65 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t64, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t64, ptr %a69 + call void @finch_str_drop(ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a66 + call void @finch.gen.fail(ptr %t46, %S.ast.Node %t47, { ptr, i64, i64 } %t70) + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + br label %endif6923 +endif6923: + %t72 = load ptr, ptr %a1 + %t73 = load %S.ast.Node, ptr %a5 + %t74 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.4452, i64 7, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a75 + %t79 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 + %t80 = load i64, ptr %a25 + %t81 = load { ptr, i64, i64 }, ptr %t79 + %t82 = extractvalue { ptr, i64, i64 } %t81, 1 + %t83 = icmp uge i64 %t80, %t82 + br i1 %t83, label %range6924, label %inrange6925 +range6924: + call void @finch_panic_index(ptr @.str.4453, i64 3820, i64 %t80, i64 %t82) + unreachable +inrange6925: + %t84 = extractvalue { ptr, i64, i64 } %t81, 0 + %t85 = getelementptr inbounds i64, ptr %t84, i64 %t80 + %t86 = load i64, ptr %t85 + call void @finch_str_from_int(ptr %a87, i64 %t86) + %t88 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t78, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t78, ptr %a92 + call void @finch_str_drop(ptr %a92) + store { ptr, i64, i64 } %t88, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t94, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.4454, i64 19, i64 0 }, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a95 + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t101 = load i64, ptr %t100 + call void @finch_str_from_int(ptr %a102, i64 %t101) + %t103 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t99, ptr %a105 + store { ptr, i64, i64 } %t103, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t99, ptr %a107 + call void @finch_str_drop(ptr %a107) + store { ptr, i64, i64 } %t103, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a104 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.4455, i64 2, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t109, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + %t115 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t114, ptr %a118 + store { ptr, i64, i64 } %t116, ptr %a119 + call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) + store { ptr, i64, i64 } %t114, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.4456, i64 1, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t126, ptr %a129 + store { ptr, i64, i64 } %t127, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t126, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t132, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.4457, i64 5, i64 0 }, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + call void @finch.gen.fail(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t137) + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_drop(ptr %a138) + br label %endif6918 +endif6918: + store { ptr, i64, i64 } zeroinitializer, ptr %a139 + store { ptr, i64, i64 } zeroinitializer, ptr %a140 + %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 + %t142 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.4458, i64 3, i64 0 }, 0 + %t143 = load i64, ptr %a25 + call void @finch_str_from_int(ptr %a144, i64 %t143) + %t145 = load { ptr, i64, i64 }, ptr %a144 + %t146 = insertvalue %S.ast.Node %t142, { ptr, i64, i64 } %t145, 4 + %t147 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 11 + %t148 = load i64, ptr %t147 + %t149 = insertvalue %S.ast.Node %t146, i64 %t148, 11 + %t150 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 + %t151 = load i64, ptr %t150 + %t152 = insertvalue %S.ast.Node %t149, i64 %t151, 12 + %t153 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 13 + %t154 = load i64, ptr %t153 + %t155 = insertvalue %S.ast.Node %t152, i64 %t154, 13 + %t156 = load i64, ptr %t141 + %t157 = add i64 %t156, 1 + call void @finch_arr_reserve(ptr %a139, i64 %t157, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t158 = load ptr, ptr %a139 + %t159 = getelementptr inbounds %S.ast.Node, ptr %t158, i64 %t156 + store %S.ast.Node %t155, ptr %t159 + store i64 %t157, ptr %t141 + %t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %a140, i32 0, i32 1 + %t161 = load i64, ptr %t160 + %t162 = add i64 %t161, 1 + call void @finch_arr_reserve(ptr %a140, i64 %t162, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t163 = load ptr, ptr %a140 + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i64 %t161 + store { ptr, i64, i64 } { ptr @.str.4459, i64 3, i64 0 }, ptr %t164 + store i64 %t162, ptr %t160 + %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t166 = load i64, ptr %t165 + store i64 0, ptr %a167 + br label %for.cond6926 +for.cond6926: + %t168 = load i64, ptr %a167 + %t169 = icmp slt i64 %t168, %t166 + br i1 %t169, label %for.body6927, label %for.end6929 +for.body6927: + %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 + %t171 = load i64, ptr %a167 + %t172 = load { ptr, i64, i64 }, ptr %a4 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 %t171, %t173 + br i1 %t174, label %range6930, label %inrange6931 +range6930: + call void @finch_panic_index(ptr @.str.4460, i64 3827, i64 %t171, i64 %t173) + unreachable +inrange6931: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t171 + %t177 = load %S.ast.Node, ptr %t176 + store %S.ast.Node %t177, ptr %a178 + call void @finch.copy.S_ast_Node(ptr %a179, ptr %a178) + %t180 = load %S.ast.Node, ptr %a179 + %t181 = load i64, ptr %t170 + %t182 = add i64 %t181, 1 + call void @finch_arr_reserve(ptr %a139, i64 %t182, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t183 = load ptr, ptr %a139 + %t184 = getelementptr inbounds %S.ast.Node, ptr %t183, i64 %t181 + store %S.ast.Node %t180, ptr %t184 + store i64 %t182, ptr %t170 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %a140, i32 0, i32 1 + %t186 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t186, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.4461, i64 1, i64 0 }, ptr %a189 + call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a187 + %t191 = load i64, ptr %a167 + call void @finch_str_from_int(ptr %a192, i64 %t191) + %t193 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } %t190, ptr %a195 + store { ptr, i64, i64 } %t193, ptr %a196 + call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) + store { ptr, i64, i64 } %t190, ptr %a197 + call void @finch_str_drop(ptr %a197) + store { ptr, i64, i64 } %t193, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a194 + %t200 = load i64, ptr %t185 + %t201 = add i64 %t200, 1 + call void @finch_arr_reserve(ptr %a140, i64 %t201, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t202 = load ptr, ptr %a140 + %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 %t200 + store { ptr, i64, i64 } %t199, ptr %t203 + store i64 %t201, ptr %t185 + br label %for.step6928 +for.step6928: + %t204 = load i64, ptr %a167 + %t205 = add i64 %t204, 1 + store i64 %t205, ptr %a167 + br label %for.cond6926 +for.end6929: + %t206 = load ptr, ptr %a1 + %t207 = load %S.ast.Node, ptr %a5 + %t208 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 + %t209 = load i64, ptr %t208 + %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t211 = load i64, ptr %t210 + %t212 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t213 = load { ptr, i64, i64 }, ptr %t212 + store { ptr, i64, i64 } { ptr @.str.4462, i64 9, i64 0 }, ptr %a215 + store { ptr, i64, i64 } %t213, ptr %a216 + call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t217, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.4463, i64 1, i64 0 }, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t217, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + %t223 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t222, ptr %a225 + store { ptr, i64, i64 } %t223, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t222, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + store { ptr, i64, i64 } %t228, ptr %a230 + store { ptr, i64, i64 } { ptr @.str.4464, i64 4, i64 0 }, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t228, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + call void @finch.gen.noteRef(ptr %t206, %S.ast.Node %t207, i64 %t209, i64 %t211, { ptr, i64, i64 } %t233, { ptr, i64, i64 } { ptr @.str.4465, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t233, ptr %a234 + call void @finch_str_drop(ptr %a234) + %t235 = load ptr, ptr %a1 + %t236 = load ptr, ptr %a1 + %t237 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = call i64 @finch.gen.findStruct(ptr %t236, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t240) + %t242 = load { ptr, i64, i64 }, ptr %a139 + %t243 = load { ptr, i64, i64 }, ptr %a140 + %t244 = load %S.ast.Node, ptr %a5 + %t245 = call %S.gen.Val @finch.gen.construct(ptr %t235, i64 %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, %S.ast.Node %t244) + call void @finch.drop.arr_str(ptr %a140) + call void @finch.drop.arr_S_ast_Node(ptr %a139) + call void @finch.drop.S_gen_SumDef(ptr %a19) + ret %S.gen.Val %t245 +} + +define internal %S.gen.SumPat @finch.gen.sumPattern(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a14 = alloca %S.gen.SumDef, align 16 + %a15 = alloca %S.gen.SumDef, align 16 + %a17 = alloca %S.gen.SumDef, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca i64, align 16 + %a124 = alloca %S.ast.Node, align 16 + %a125 = alloca %S.ast.Node, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca i64, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca i64, align 16 + %a251 = alloca %S.ast.Node, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic6932, label %ok6933 +panic6932: + call void @finch_panic(ptr @.str.4466, i64 3836, ptr @.str.4467) + unreachable +ok6933: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 + %t7 = load i64, ptr %a3 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range6934, label %inrange6935 +range6934: + call void @finch_panic_index(ptr @.str.4468, i64 3836, i64 %t7, i64 %t9) + unreachable +inrange6935: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.SumDef, ptr %t11, i64 %t7 + %t13 = load %S.gen.SumDef, ptr %t12 + store %S.gen.SumDef %t13, ptr %a14 + call void @finch.copy.S_gen_SumDef(ptr %a15, ptr %a14) + %t16 = load %S.gen.SumDef, ptr %a15 + store %S.gen.SumDef %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.4469, i64 0, i64 0 }, ptr %a18 + store { ptr, i64, i64 } zeroinitializer, ptr %a19 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.4470, i64 3, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br label %logic.from6936 +logic.from6936: + br i1 %t25, label %logic.rhs6937, label %logic.end6938 +logic.rhs6937: + %t26 = load ptr, ptr %a1 + %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = call i64 @finch.gen.lookup(ptr %t26, { ptr, i64, i64 } %t28) + %t30 = icmp slt i64 %t29, 0 + br label %logic.rend6939 +logic.rend6939: + br label %logic.end6938 +logic.end6938: + %t31 = phi i1 [ false, %logic.from6936 ], [ %t30, %logic.rend6939 ] + br i1 %t31, label %then6940, label %else6941 +then6940: + %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_copy(ptr %a35, ptr %a34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + %t37 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t36, ptr %a18 + store { ptr, i64, i64 } %t37, ptr %a38 + call void @finch_str_drop(ptr %a38) + br label %endif6942 +else6941: + %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.4471, i64 4, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then6943, label %else6944 +then6943: + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t46 = load { ptr, i64, i64 }, ptr %t45 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_copy(ptr %a48, ptr %a47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + %t50 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t49, ptr %a18 + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t53, ptr %a54 + call void @finch.copy.arr_S_ast_Node(ptr %a55, ptr %a54) + %t56 = load { ptr, i64, i64 }, ptr %a55 + %t57 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t56, ptr %a19 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch.drop.arr_S_ast_Node(ptr %a58) + br label %endif6945 +else6944: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.4472, i64 6, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br label %logic.from6946 +logic.from6946: + br i1 %t64, label %logic.rhs6947, label %logic.end6948 +logic.rhs6947: + %t65 = load ptr, ptr %a1 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t67 = load { ptr, i64, i64 }, ptr %t66 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 0, %t68 + br i1 %t69, label %range6949, label %inrange6950 +range6949: + call void @finch_panic_index(ptr @.str.4473, i64 3844, i64 0, i64 %t68) + unreachable +inrange6950: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 + %t72 = load %S.ast.Node, ptr %t71 + %t73 = call i64 @finch.gen.sumNamed(ptr %t65, %S.ast.Node %t72) + %t74 = load i64, ptr %a3 + %t75 = icmp eq i64 %t73, %t74 + br label %logic.rend6951 +logic.rend6951: + br label %logic.end6948 +logic.end6948: + %t76 = phi i1 [ false, %logic.from6946 ], [ %t75, %logic.rend6951 ] + br i1 %t76, label %then6952, label %else6953 +then6952: + %t77 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t78 = load { ptr, i64, i64 }, ptr %t77 + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_copy(ptr %a80, ptr %a79) + %t81 = load { ptr, i64, i64 }, ptr %a80 + %t82 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t81, ptr %a18 + store { ptr, i64, i64 } %t82, ptr %a83 + call void @finch_str_drop(ptr %a83) + br label %endif6954 +else6953: + %t84 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.4474, i64 6, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + br label %logic.from6955 +logic.from6955: + br i1 %t89, label %logic.rhs6956, label %logic.end6957 +logic.rhs6956: + %t90 = load ptr, ptr %a1 + %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t92 = load { ptr, i64, i64 }, ptr %t91 + %t93 = extractvalue { ptr, i64, i64 } %t92, 1 + %t94 = icmp uge i64 0, %t93 + br i1 %t94, label %range6958, label %inrange6959 +range6958: + call void @finch_panic_index(ptr @.str.4475, i64 3846, i64 0, i64 %t93) + unreachable +inrange6959: + %t95 = extractvalue { ptr, i64, i64 } %t92, 0 + %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 0 + %t97 = load %S.ast.Node, ptr %t96 + %t98 = call i64 @finch.gen.sumNamed(ptr %t90, %S.ast.Node %t97) + %t99 = load i64, ptr %a3 + %t100 = icmp eq i64 %t98, %t99 + br label %logic.rend6960 +logic.rend6960: + br label %logic.end6957 +logic.end6957: + %t101 = phi i1 [ false, %logic.from6955 ], [ %t100, %logic.rend6960 ] + br i1 %t101, label %then6961, label %else6962 +then6961: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch_str_copy(ptr %a105, ptr %a104) + %t106 = load { ptr, i64, i64 }, ptr %a105 + %t107 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t106, ptr %a18 + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t109, i32 0, i32 1 + %t111 = load i64, ptr %t110 + store i64 1, ptr %a112 + br label %for.cond6964 +for.cond6964: + %t113 = load i64, ptr %a112 + %t114 = icmp slt i64 %t113, %t111 + br i1 %t114, label %for.body6965, label %for.end6967 +for.body6965: + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t117 = load i64, ptr %a112 + %t118 = load { ptr, i64, i64 }, ptr %t116 + %t119 = extractvalue { ptr, i64, i64 } %t118, 1 + %t120 = icmp uge i64 %t117, %t119 + br i1 %t120, label %range6968, label %inrange6969 +range6968: + call void @finch_panic_index(ptr @.str.4476, i64 3849, i64 %t117, i64 %t119) + unreachable +inrange6969: + %t121 = extractvalue { ptr, i64, i64 } %t118, 0 + %t122 = getelementptr inbounds %S.ast.Node, ptr %t121, i64 %t117 + %t123 = load %S.ast.Node, ptr %t122 + store %S.ast.Node %t123, ptr %a124 + call void @finch.copy.S_ast_Node(ptr %a125, ptr %a124) + %t126 = load %S.ast.Node, ptr %a125 + %t127 = load i64, ptr %t115 + %t128 = add i64 %t127, 1 + call void @finch_arr_reserve(ptr %a19, i64 %t128, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t129 = load ptr, ptr %a19 + %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 %t127 + store %S.ast.Node %t126, ptr %t130 + store i64 %t128, ptr %t115 + br label %for.step6966 +for.step6966: + %t131 = load i64, ptr %a112 + %t132 = add i64 %t131, 1 + store i64 %t132, ptr %a112 + br label %for.cond6964 +for.end6967: + br label %endif6963 +else6962: + %t133 = load ptr, ptr %a1 + %t134 = load %S.ast.Node, ptr %a2 + %t135 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 1 + %t136 = load { ptr, i64, i64 }, ptr %t135 + store { ptr, i64, i64 } { ptr @.str.4477, i64 33, i64 0 }, ptr %a138 + store { ptr, i64, i64 } %t136, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + %t140 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t140, ptr %a142 + store { ptr, i64, i64 } { ptr @.str.4478, i64 10, i64 0 }, ptr %a143 + call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) + store { ptr, i64, i64 } %t140, ptr %a144 + call void @finch_str_drop(ptr %a144) + %t145 = load { ptr, i64, i64 }, ptr %a141 + %t146 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 2 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4479, i64 2, i64 0 }, ptr %a148 + call void @finch_str_join(ptr %a149, ptr %t146, ptr %a148) + %t150 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t145, ptr %a152 + store { ptr, i64, i64 } %t150, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t145, ptr %a154 + call void @finch_str_drop(ptr %a154) + store { ptr, i64, i64 } %t150, ptr %a155 + call void @finch_str_drop(ptr %a155) + %t156 = load { ptr, i64, i64 }, ptr %a151 + store { ptr, i64, i64 } %t156, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.4480, i64 1, i64 0 }, ptr %a159 + call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) + store { ptr, i64, i64 } %t156, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a157 + call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } %t161) + store { ptr, i64, i64 } %t161, ptr %a162 + call void @finch_str_drop(ptr %a162) + br label %endif6963 +endif6963: + br label %endif6954 +endif6954: + br label %endif6945 +endif6945: + br label %endif6942 +endif6942: + %t163 = load ptr, ptr %a1 + %t164 = load i64, ptr %a3 + %t165 = load { ptr, i64, i64 }, ptr %a18 + %t166 = load %S.ast.Node, ptr %a2 + %t167 = call i64 @finch.gen.sumVariant(ptr %t163, i64 %t164, { ptr, i64, i64 } %t165, %S.ast.Node %t166) + store i64 %t167, ptr %a168 + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 + %t172 = load i64, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %t171 + %t174 = extractvalue { ptr, i64, i64 } %t173, 1 + %t175 = icmp uge i64 %t172, %t174 + br i1 %t175, label %range6970, label %inrange6971 +range6970: + call void @finch_panic_index(ptr @.str.4481, i64 3855, i64 %t172, i64 %t174) + unreachable +inrange6971: + %t176 = extractvalue { ptr, i64, i64 } %t173, 0 + %t177 = getelementptr inbounds i64, ptr %t176, i64 %t172 + %t178 = load i64, ptr %t177 + %t179 = icmp ne i64 %t170, %t178 + br i1 %t179, label %then6972, label %endif6974 +then6972: + %t180 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 + %t181 = load i64, ptr %a168 + %t182 = load { ptr, i64, i64 }, ptr %t180 + %t183 = extractvalue { ptr, i64, i64 } %t182, 1 + %t184 = icmp uge i64 %t181, %t183 + br i1 %t184, label %range6975, label %inrange6976 +range6975: + call void @finch_panic_index(ptr @.str.4482, i64 3856, i64 %t181, i64 %t183) + unreachable +inrange6976: + %t185 = extractvalue { ptr, i64, i64 } %t182, 0 + %t186 = getelementptr inbounds i64, ptr %t185, i64 %t181 + %t187 = load i64, ptr %t186 + %t188 = icmp eq i64 %t187, 0 + br i1 %t188, label %then6977, label %endif6979 +then6977: + %t189 = load ptr, ptr %a1 + %t190 = load %S.ast.Node, ptr %a2 + %t191 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t191, ptr %a193 + store { ptr, i64, i64 } { ptr @.str.4483, i64 27, i64 0 }, ptr %a194 + call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a192 + %t196 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t195, ptr %a198 + store { ptr, i64, i64 } %t196, ptr %a199 + call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) + store { ptr, i64, i64 } %t195, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load { ptr, i64, i64 }, ptr %a197 + call void @finch.gen.fail(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t201) + store { ptr, i64, i64 } %t201, ptr %a202 + call void @finch_str_drop(ptr %a202) + br label %endif6979 +endif6979: + %t203 = load ptr, ptr %a1 + %t204 = load %S.ast.Node, ptr %a2 + %t205 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t205, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.4484, i64 7, i64 0 }, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + %t209 = load { ptr, i64, i64 }, ptr %a206 + %t210 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 + %t211 = load i64, ptr %a168 + %t212 = load { ptr, i64, i64 }, ptr %t210 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 %t211, %t213 + br i1 %t214, label %range6980, label %inrange6981 +range6980: + call void @finch_panic_index(ptr @.str.4485, i64 3859, i64 %t211, i64 %t213) + unreachable +inrange6981: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds i64, ptr %t215, i64 %t211 + %t217 = load i64, ptr %t216 + call void @finch_str_from_int(ptr %a218, i64 %t217) + %t219 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t209, ptr %a221 + store { ptr, i64, i64 } %t219, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + store { ptr, i64, i64 } %t209, ptr %a223 + call void @finch_str_drop(ptr %a223) + store { ptr, i64, i64 } %t219, ptr %a224 + call void @finch_str_drop(ptr %a224) + %t225 = load { ptr, i64, i64 }, ptr %a220 + store { ptr, i64, i64 } %t225, ptr %a227 + store { ptr, i64, i64 } { ptr @.str.4486, i64 27, i64 0 }, ptr %a228 + call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228) + store { ptr, i64, i64 } %t225, ptr %a229 + call void @finch_str_drop(ptr %a229) + %t230 = load { ptr, i64, i64 }, ptr %a226 + %t231 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t230, ptr %a233 + store { ptr, i64, i64 } %t231, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t230, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t236, ptr %a238 + store { ptr, i64, i64 } { ptr @.str.4487, i64 27, i64 0 }, ptr %a239 + call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) + store { ptr, i64, i64 } %t236, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = load { ptr, i64, i64 }, ptr %a237 + call void @finch.gen.fail(ptr %t203, %S.ast.Node %t204, { ptr, i64, i64 } %t241) + store { ptr, i64, i64 } %t241, ptr %a242 + call void @finch_str_drop(ptr %a242) + br label %endif6974 +endif6974: + store i64 0, ptr %a243 + br label %each.cond6982 +each.cond6982: + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t245 = load i64, ptr %t244 + %t246 = load i64, ptr %a243 + %t247 = icmp slt i64 %t246, %t245 + br i1 %t247, label %each.body6983, label %each.end6985 +each.body6983: + %t248 = load ptr, ptr %a19 + %t249 = getelementptr inbounds %S.ast.Node, ptr %t248, i64 %t246 + %t250 = load %S.ast.Node, ptr %t249 + store %S.ast.Node %t250, ptr %a251 + %t252 = getelementptr inbounds %S.ast.Node, ptr %a251, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.4488, i64 3, i64 0 }, ptr %a255 + %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) + %t257 = icmp eq i32 %t256, 0 + br i1 %t257, label %then6986, label %endif6988 +then6986: + %t258 = load ptr, ptr %a1 + %t259 = load %S.ast.Node, ptr %a251 + call void @finch.gen.fail(ptr %t258, %S.ast.Node %t259, { ptr, i64, i64 } { ptr @.str.4489, i64 50, i64 0 }) + br label %endif6988 +endif6988: + br label %each.step6984 +each.step6984: + %t260 = load i64, ptr %a243 + %t261 = add i64 %t260, 1 + store i64 %t261, ptr %a243 + br label %each.cond6982 +each.end6985: + %t262 = load i64, ptr %a168 + %t263 = insertvalue %S.gen.SumPat zeroinitializer, i64 %t262, 0 + %t264 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t264, ptr %a265 + call void @finch.copy.arr_S_ast_Node(ptr %a266, ptr %a265) + %t267 = load { ptr, i64, i64 }, ptr %a266 + %t268 = insertvalue %S.gen.SumPat %t263, { ptr, i64, i64 } %t267, 1 + call void @finch.drop.arr_S_ast_Node(ptr %a19) + call void @finch_str_drop(ptr %a18) + call void @finch.drop.S_gen_SumDef(ptr %a17) + ret %S.gen.SumPat %t268 +} + +define internal %S.gen.Val @finch.gen.enumValue(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a14 = alloca %S.gen.EnumDef, align 16 + %a15 = alloca %S.gen.EnumDef, align 16 + %a17 = alloca %S.gen.EnumDef, align 16 + %a22 = alloca i64, align 16 + %a25 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca i64, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic6989, label %ok6990 +panic6989: + call void @finch_panic(ptr @.str.4490, i64 3871, ptr @.str.4491) + unreachable +ok6990: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 + %t7 = load i64, ptr %a3 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range6991, label %inrange6992 +range6991: + call void @finch_panic_index(ptr @.str.4492, i64 3871, i64 %t7, i64 %t9) + unreachable +inrange6992: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 + %t13 = load %S.gen.EnumDef, ptr %t12 + store %S.gen.EnumDef %t13, ptr %a14 + call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) + %t16 = load %S.gen.EnumDef, ptr %a15 + store %S.gen.EnumDef %t16, ptr %a17 + %t18 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store i64 -1, ptr %a22 + %t23 = load i64, ptr %t19 + %t24 = load ptr, ptr %t18 + store i64 0, ptr %a25 + br label %find.cond6993 +find.cond6993: + %t26 = load i64, ptr %a25 + %t27 = icmp slt i64 %t26, %t23 + br i1 %t27, label %find.body6994, label %find.end6997 +find.body6994: + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } %t21, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br i1 %t33, label %find.hit6995, label %find.next6996 +find.hit6995: + store i64 %t26, ptr %a22 + br label %find.end6997 +find.next6996: + %t34 = add i64 %t26, 1 + store i64 %t34, ptr %a25 + br label %find.cond6993 +find.end6997: + %t35 = load i64, ptr %a22 + store i64 %t35, ptr %a36 + %t37 = load i64, ptr %a36 + %t38 = icmp slt i64 %t37, 0 + br i1 %t38, label %then6998, label %endif7000 +then6998: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a2 + %t41 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.4493, i64 9, i64 0 }, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t46, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.4494, i64 17, i64 0 }, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t51, ptr %a55 + store { ptr, i64, i64 } %t53, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t51, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t58, ptr %a60 + store { ptr, i64, i64 } { ptr @.str.4495, i64 11, i64 0 }, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + %t64 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4496, i64 2, i64 0 }, ptr %a66 + call void @finch_str_join(ptr %a67, ptr %t64, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t63, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t63, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t68, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.4497, i64 1, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t79) + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif7000 +endif7000: + %t81 = load ptr, ptr %a1 + %t82 = load %S.ast.Node, ptr %a2 + %t83 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t84 = load i64, ptr %t83 + %t85 = add i64 %t84, 1 + %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load i64, ptr %t87 + %t89 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t90 = load { ptr, i64, i64 }, ptr %t89 + store { ptr, i64, i64 } { ptr @.str.4498, i64 9, i64 0 }, ptr %a92 + store { ptr, i64, i64 } %t90, ptr %a93 + call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } %t94, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.4499, i64 1, i64 0 }, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a95 + %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t101 = load { ptr, i64, i64 }, ptr %t100 + store { ptr, i64, i64 } %t99, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t99, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.4500, i64 3, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t113 = load i64, ptr %a36 + %t114 = load { ptr, i64, i64 }, ptr %t112 + %t115 = extractvalue { ptr, i64, i64 } %t114, 1 + %t116 = icmp uge i64 %t113, %t115 + br i1 %t116, label %range7001, label %inrange7002 +range7001: + call void @finch_panic_index(ptr @.str.4501, i64 3876, i64 %t113, i64 %t115) + unreachable +inrange7002: + %t117 = extractvalue { ptr, i64, i64 } %t114, 0 + %t118 = getelementptr inbounds i64, ptr %t117, i64 %t113 + %t119 = load i64, ptr %t118 + call void @finch_str_from_int(ptr %a120, i64 %t119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t111, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t111, ptr %a125 + call void @finch_str_drop(ptr %a125) + store { ptr, i64, i64 } %t121, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t127, ptr %a129 + store { ptr, i64, i64 } { ptr @.str.4502, i64 4, i64 0 }, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t127, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + call void @finch.gen.noteRef(ptr %t81, %S.ast.Node %t82, i64 %t85, i64 %t88, { ptr, i64, i64 } %t132, { ptr, i64, i64 } { ptr @.str.4503, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t132, ptr %a133 + call void @finch_str_drop(ptr %a133) + %t134 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t135 = load i64, ptr %a36 + %t136 = load { ptr, i64, i64 }, ptr %t134 + %t137 = extractvalue { ptr, i64, i64 } %t136, 1 + %t138 = icmp uge i64 %t135, %t137 + br i1 %t138, label %range7003, label %inrange7004 +range7003: + call void @finch_panic_index(ptr @.str.4504, i64 3877, i64 %t135, i64 %t137) + unreachable +inrange7004: + %t139 = extractvalue { ptr, i64, i64 } %t136, 0 + %t140 = getelementptr inbounds i64, ptr %t139, i64 %t135 + %t141 = load i64, ptr %t140 + call void @finch_str_from_int(ptr %a142, i64 %t141) + %t143 = load { ptr, i64, i64 }, ptr %a142 + %t144 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t143, 0 + %t145 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4505, i64 4, i64 0 }, 0 + %t146 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t147 = load { ptr, i64, i64 }, ptr %t146 + store { ptr, i64, i64 } %t147, ptr %a148 + call void @finch_str_copy(ptr %a149, ptr %a148) + %t150 = load { ptr, i64, i64 }, ptr %a149 + %t151 = insertvalue %S.ast.Type %t145, { ptr, i64, i64 } %t150, 2 + %t152 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 + %t153 = load { ptr, i64, i64 }, ptr %t152 + store { ptr, i64, i64 } %t153, ptr %a154 + call void @finch_str_copy(ptr %a155, ptr %a154) + %t156 = load { ptr, i64, i64 }, ptr %a155 + %t157 = insertvalue %S.ast.Type %t151, { ptr, i64, i64 } %t156, 3 + %t158 = insertvalue %S.gen.Val %t144, %S.ast.Type %t157, 1 + call void @finch.drop.S_gen_EnumDef(ptr %a17) + ret %S.gen.Val %t158 +} + +define internal %S.gen.Ref @finch.gen.member(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a13 = alloca i64, align 16 + %a25 = alloca i64, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca i64, align 16 + %a157 = alloca %S.gen.Ref, align 16 + %a161 = alloca %S.ast.Type, align 16 + %a162 = alloca %S.ast.Type, align 16 + %a164 = alloca %S.ast.Type, align 16 + %a170 = alloca %S.ast.Type, align 16 + %a171 = alloca %S.ast.Type, align 16 + %a174 = alloca %S.ast.Type, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca %S.ast.Type, align 16 + %a239 = alloca %S.ast.Type, align 16 + %a241 = alloca %S.ast.Type, align 16 + %a242 = alloca i1, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca i64, align 16 + %a268 = alloca i64, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca %S.ast.Type, align 16 + %a297 = alloca %S.ast.Type, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca %S.ast.Type, align 16 + %a330 = alloca %S.ast.Type, align 16 + %a335 = alloca %S.gen.Ref, align 16 + %a337 = alloca %S.ast.Type, align 16 + %a338 = alloca %S.ast.Type, align 16 + %a341 = alloca %S.ast.Type, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca %S.ast.Type, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a613 = alloca { ptr, i64, i64 }, align 16 + %a614 = alloca { ptr, i64, i64 }, align 16 + %a616 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a618 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca %S.gen.StructDef, align 16 + %a693 = alloca %S.gen.StructDef, align 16 + %a695 = alloca %S.gen.StructDef, align 16 + %a700 = alloca i64, align 16 + %a703 = alloca i64, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca i64, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a746 = alloca { ptr, i64, i64 }, align 16 + %a748 = alloca { ptr, i64, i64 }, align 16 + %a749 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca %S.ast.Type, align 16 + %a769 = alloca %S.ast.Type, align 16 + %a771 = alloca %S.ast.Type, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca { ptr, i64, i64 }, align 16 + %a813 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a817 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a832 = alloca { ptr, i64, i64 }, align 16 + %a842 = alloca { ptr, i64, i64 }, align 16 + %a844 = alloca { ptr, i64, i64 }, align 16 + %a845 = alloca { ptr, i64, i64 }, align 16 + %a846 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a852 = alloca { ptr, i64, i64 }, align 16 + %a855 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca { ptr, i64, i64 }, align 16 + %a860 = alloca %S.ast.Type, align 16 + %a861 = alloca %S.ast.Type, align 16 + %a869 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a871 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a882 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a885 = alloca { ptr, i64, i64 }, align 16 + %a887 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca { ptr, i64, i64 }, align 16 + %a900 = alloca { ptr, i64, i64 }, align 16 + %a902 = alloca { ptr, i64, i64 }, align 16 + %a903 = alloca { ptr, i64, i64 }, align 16 + %a904 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a912 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a917 = alloca %S.ast.Type, align 16 + %a918 = alloca %S.ast.Type, align 16 + %a921 = alloca %S.gen.Val, align 16 + %a935 = alloca %S.ast.Type, align 16 + %a936 = alloca %S.ast.Type, align 16 + %a941 = alloca %S.gen.Val, align 16 + %a947 = alloca %S.gen.Val, align 16 + %a948 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range7005, label %inrange7006 +range7005: + call void @finch_panic_index(ptr @.str.4506, i64 3881, i64 0, i64 %t7) + unreachable +inrange7006: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call i64 @finch.gen.sumNamed(ptr %t4, %S.ast.Node %t11) + store i64 %t12, ptr %a13 + %t14 = load i64, ptr %a13 + %t15 = icmp sge i64 %t14, 0 + br i1 %t15, label %then7007, label %endif7009 +then7007: + %t16 = load i1, ptr %a3 + br i1 %t16, label %then7010, label %endif7012 +then7010: + %t17 = load ptr, ptr %a1 + %t18 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t17, %S.ast.Node %t18, { ptr, i64, i64 } { ptr @.str.4507, i64 37, i64 0 }) + br label %endif7012 +endif7012: + %t19 = load ptr, ptr %a1 + %t20 = load i64, ptr %a13 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load %S.ast.Node, ptr %a2 + %t24 = call i64 @finch.gen.sumVariant(ptr %t19, i64 %t20, { ptr, i64, i64 } %t22, %S.ast.Node %t23) + store i64 %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic7013, label %ok7014 +panic7013: + call void @finch_panic(ptr @.str.4508, i64 3887, ptr @.str.4509) + unreachable +ok7014: + %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 22 + %t29 = load i64, ptr %a13 + %t30 = load { ptr, i64, i64 }, ptr %t28 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 %t29, %t31 + br i1 %t32, label %range7015, label %inrange7016 +range7015: + call void @finch_panic_index(ptr @.str.4510, i64 3887, i64 %t29, i64 %t31) + unreachable +inrange7016: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.gen.SumDef, ptr %t33, i64 %t29 + %t35 = getelementptr inbounds %S.gen.SumDef, ptr %t34, i32 0, i32 3 + %t36 = load i64, ptr %a25 + %t37 = load { ptr, i64, i64 }, ptr %t35 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range7017, label %inrange7018 +range7017: + call void @finch_panic_index(ptr @.str.4511, i64 3887, i64 %t36, i64 %t38) + unreachable +inrange7018: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds i64, ptr %t40, i64 %t36 + %t42 = load i64, ptr %t41 + %t43 = icmp sgt i64 %t42, 0 + br i1 %t43, label %then7019, label %endif7021 +then7019: + %t44 = load ptr, ptr %a1 + %t45 = load %S.ast.Node, ptr %a2 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.4512, i64 7, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a48 + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic7022, label %ok7023 +panic7022: + call void @finch_panic(ptr @.str.4513, i64 3888, ptr @.str.4514) + unreachable +ok7023: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 22 + %t55 = load i64, ptr %a13 + %t56 = load { ptr, i64, i64 }, ptr %t54 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 %t55, %t57 + br i1 %t58, label %range7024, label %inrange7025 +range7024: + call void @finch_panic_index(ptr @.str.4515, i64 3888, i64 %t55, i64 %t57) + unreachable +inrange7025: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds %S.gen.SumDef, ptr %t59, i64 %t55 + %t61 = getelementptr inbounds %S.gen.SumDef, ptr %t60, i32 0, i32 3 + %t62 = load i64, ptr %a25 + %t63 = load { ptr, i64, i64 }, ptr %t61 + %t64 = extractvalue { ptr, i64, i64 } %t63, 1 + %t65 = icmp uge i64 %t62, %t64 + br i1 %t65, label %range7026, label %inrange7027 +range7026: + call void @finch_panic_index(ptr @.str.4516, i64 3888, i64 %t62, i64 %t64) + unreachable +inrange7027: + %t66 = extractvalue { ptr, i64, i64 } %t63, 0 + %t67 = getelementptr inbounds i64, ptr %t66, i64 %t62 + %t68 = load i64, ptr %t67 + call void @finch_str_from_int(ptr %a69, i64 %t68) + %t70 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t51, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t51, ptr %a74 + call void @finch_str_drop(ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t76, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.4517, i64 11, i64 0 }, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + store { ptr, i64, i64 } %t76, ptr %a80 + call void @finch_str_drop(ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a77 + %t82 = load ptr, ptr %a1 + %t83 = icmp eq ptr %t82, null + br i1 %t83, label %panic7028, label %ok7029 +panic7028: + call void @finch_panic(ptr @.str.4518, i64 3888, ptr @.str.4519) + unreachable +ok7029: + %t84 = getelementptr inbounds %S.gen.Gen, ptr %t82, i32 0, i32 22 + %t85 = load i64, ptr %a13 + %t86 = load { ptr, i64, i64 }, ptr %t84 + %t87 = extractvalue { ptr, i64, i64 } %t86, 1 + %t88 = icmp uge i64 %t85, %t87 + br i1 %t88, label %range7030, label %inrange7031 +range7030: + call void @finch_panic_index(ptr @.str.4520, i64 3888, i64 %t85, i64 %t87) + unreachable +inrange7031: + %t89 = extractvalue { ptr, i64, i64 } %t86, 0 + %t90 = getelementptr inbounds %S.gen.SumDef, ptr %t89, i64 %t85 + %t91 = getelementptr inbounds %S.gen.SumDef, ptr %t90, i32 0, i32 1 + %t92 = load { ptr, i64, i64 }, ptr %t91 + store { ptr, i64, i64 } %t81, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t81, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.4521, i64 1, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.4522, i64 5, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t109, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + call void @finch.gen.fail(ptr %t44, %S.ast.Node %t45, { ptr, i64, i64 } %t114) + store { ptr, i64, i64 } %t114, ptr %a115 + call void @finch_str_drop(ptr %a115) + br label %endif7021 +endif7021: + store { ptr, i64, i64 } zeroinitializer, ptr %a116 + %t117 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t118 = load ptr, ptr %a1 + %t119 = load i64, ptr %a13 + %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %t120 + %t122 = load { ptr, i64, i64 }, ptr %a116 + %t123 = load %S.ast.Node, ptr %a2 + %t124 = call %S.gen.Val @finch.gen.sumMake(ptr %t118, i64 %t119, { ptr, i64, i64 } %t121, { ptr, i64, i64 } %t122, %S.ast.Node %t123) + %t125 = insertvalue %S.gen.Ref %t117, %S.gen.Val %t124, 2 + call void @finch.drop.arr_S_ast_Node(ptr %a116) + ret %S.gen.Ref %t125 +endif7009: + %t126 = load ptr, ptr %a1 + %t127 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t128 = load { ptr, i64, i64 }, ptr %t127 + %t129 = extractvalue { ptr, i64, i64 } %t128, 1 + %t130 = icmp uge i64 0, %t129 + br i1 %t130, label %range7032, label %inrange7033 +range7032: + call void @finch_panic_index(ptr @.str.4523, i64 3893, i64 0, i64 %t129) + unreachable +inrange7033: + %t131 = extractvalue { ptr, i64, i64 } %t128, 0 + %t132 = getelementptr inbounds %S.ast.Node, ptr %t131, i64 0 + %t133 = load %S.ast.Node, ptr %t132 + %t134 = call i64 @finch.gen.enumNamed(ptr %t126, %S.ast.Node %t133) + store i64 %t134, ptr %a135 + %t136 = load i64, ptr %a135 + %t137 = icmp sge i64 %t136, 0 + br i1 %t137, label %then7034, label %endif7036 +then7034: + %t138 = load i1, ptr %a3 + br i1 %t138, label %then7037, label %endif7039 +then7037: + %t139 = load ptr, ptr %a1 + %t140 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t139, %S.ast.Node %t140, { ptr, i64, i64 } { ptr @.str.4524, i64 37, i64 0 }) + br label %endif7039 +endif7039: + %t141 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t142 = load ptr, ptr %a1 + %t143 = load %S.ast.Node, ptr %a2 + %t144 = load i64, ptr %a135 + %t145 = call %S.gen.Val @finch.gen.enumValue(ptr %t142, %S.ast.Node %t143, i64 %t144) + %t146 = insertvalue %S.gen.Ref %t141, %S.gen.Val %t145, 2 + ret %S.gen.Ref %t146 +endif7036: + %t147 = load ptr, ptr %a1 + %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t149 = load { ptr, i64, i64 }, ptr %t148 + %t150 = extractvalue { ptr, i64, i64 } %t149, 1 + %t151 = icmp uge i64 0, %t150 + br i1 %t151, label %range7040, label %inrange7041 +range7040: + call void @finch_panic_index(ptr @.str.4525, i64 3900, i64 0, i64 %t150) + unreachable +inrange7041: + %t152 = extractvalue { ptr, i64, i64 } %t149, 0 + %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 0 + %t154 = load %S.ast.Node, ptr %t153 + %t155 = load i1, ptr %a3 + %t156 = call %S.gen.Ref @finch.gen.ref(ptr %t147, %S.ast.Node %t154, i1 %t155) + store %S.gen.Ref %t156, ptr %a157 + %t158 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t159 = getelementptr inbounds %S.gen.Val, ptr %t158, i32 0, i32 1 + %t160 = load %S.ast.Type, ptr %t159 + store %S.ast.Type %t160, ptr %a161 + call void @finch.copy.S_ast_Type(ptr %a162, ptr %a161) + %t163 = load %S.ast.Type, ptr %a162 + store %S.ast.Type %t163, ptr %a164 + %t165 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t166 = load i1, ptr %t165 + br i1 %t166, label %then7042, label %endif7044 +then7042: + %t167 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t168 = getelementptr inbounds %S.gen.Place, ptr %t167, i32 0, i32 1 + %t169 = load %S.ast.Type, ptr %t168 + store %S.ast.Type %t169, ptr %a170 + call void @finch.copy.S_ast_Type(ptr %a171, ptr %a170) + %t172 = load %S.ast.Type, ptr %a171 + %t173 = load %S.ast.Type, ptr %a164 + store %S.ast.Type %t172, ptr %a164 + store %S.ast.Type %t173, ptr %a174 + call void @finch.drop.S_ast_Type(ptr %a174) + br label %endif7044 +endif7044: + %t175 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t176 = load { ptr, i64, i64 }, ptr %t175 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.4526, i64 3, i64 0 }, ptr %a178 + %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %then7045, label %endif7047 +then7045: + %t181 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t182 = getelementptr inbounds %S.gen.Val, ptr %t181, i32 0, i32 0 + %t183 = load { ptr, i64, i64 }, ptr %t182 + store { ptr, i64, i64 } %t183, ptr %a184 + call void @finch_str_copy(ptr %a185, ptr %a184) + %t186 = load { ptr, i64, i64 }, ptr %a185 + store { ptr, i64, i64 } %t186, ptr %a187 + %t188 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t189 = load i1, ptr %t188 + br i1 %t189, label %then7048, label %endif7050 +then7048: + %t190 = load ptr, ptr %a1 + %t191 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + %t194 = call { ptr, i64, i64 } @finch.gen.load(ptr %t190, { ptr, i64, i64 } { ptr @.str.4527, i64 3, i64 0 }, { ptr, i64, i64 } %t193) + %t195 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t194, ptr %a187 + store { ptr, i64, i64 } %t195, ptr %a196 + call void @finch_str_drop(ptr %a196) + br label %endif7050 +endif7050: + %t197 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 + %t199 = load i64, ptr %t198 + %t200 = icmp eq i64 %t199, 0 + br i1 %t200, label %then7051, label %endif7053 +then7051: + %t201 = load ptr, ptr %a1 + %t202 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t201, %S.ast.Node %t202, { ptr, i64, i64 } { ptr @.str.4528, i64 57, i64 0 }) + br label %endif7053 +endif7053: + %t203 = load ptr, ptr %a1 + %t204 = load ptr, ptr %a1 + %t205 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.4529, i64 12, i64 0 }, ptr %a207 + store { ptr, i64, i64 } %t205, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + %t209 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t209, ptr %a211 + store { ptr, i64, i64 } { ptr @.str.4530, i64 6, i64 0 }, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t209, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + %t215 = call { ptr, i64, i64 } @finch.gen.op(ptr %t204, { ptr, i64, i64 } %t214) + store { ptr, i64, i64 } %t214, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t218 = load { ptr, i64, i64 }, ptr %t217 + store { ptr, i64, i64 } { ptr @.str.4531, i64 6, i64 0 }, ptr %a220 + store { ptr, i64, i64 } %t218, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.4532, i64 18, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t203, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t227, %S.ast.Node %t228) + store { ptr, i64, i64 } %t215, ptr %a229 + call void @finch_str_drop(ptr %a229) + store { ptr, i64, i64 } %t227, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t232 = load { ptr, i64, i64 }, ptr %t231 + %t233 = extractvalue { ptr, i64, i64 } %t232, 1 + %t234 = icmp uge i64 0, %t233 + br i1 %t234, label %range7054, label %inrange7055 +range7054: + call void @finch_panic_index(ptr @.str.4533, i64 3914, i64 0, i64 %t233) + unreachable +inrange7055: + %t235 = extractvalue { ptr, i64, i64 } %t232, 0 + %t236 = getelementptr inbounds %S.ast.Type, ptr %t235, i64 0 + %t237 = load %S.ast.Type, ptr %t236 + store %S.ast.Type %t237, ptr %a238 + call void @finch.copy.S_ast_Type(ptr %a239, ptr %a238) + %t240 = load %S.ast.Type, ptr %a239 + store %S.ast.Type %t240, ptr %a241 + store i1 false, ptr %a242 + %t243 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 + %t244 = load { ptr, i64, i64 }, ptr %t243 + store { ptr, i64, i64 } %t244, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.4534, i64 6, i64 0 }, ptr %a246 + %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) + %t248 = icmp ne i32 %t247, 0 + br i1 %t248, label %then7056, label %endif7058 +then7056: + %t249 = load ptr, ptr %a1 + %t250 = icmp eq ptr %t249, null + br i1 %t250, label %panic7059, label %ok7060 +panic7059: + call void @finch_panic(ptr @.str.4535, i64 3917, ptr @.str.4536) + unreachable +ok7060: + %t251 = getelementptr inbounds %S.gen.Gen, ptr %t249, i32 0, i32 16 + %t252 = load ptr, ptr %a1 + %t253 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 3 + %t254 = load { ptr, i64, i64 }, ptr %t253 + %t255 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 2 + %t256 = load { ptr, i64, i64 }, ptr %t255 + %t257 = call i64 @finch.gen.findStruct(ptr %t252, { ptr, i64, i64 } %t254, { ptr, i64, i64 } %t256) + %t258 = load { ptr, i64, i64 }, ptr %t251 + %t259 = extractvalue { ptr, i64, i64 } %t258, 1 + %t260 = icmp uge i64 %t257, %t259 + br i1 %t260, label %range7061, label %inrange7062 +range7061: + call void @finch_panic_index(ptr @.str.4537, i64 3917, i64 %t257, i64 %t259) + unreachable +inrange7062: + %t261 = extractvalue { ptr, i64, i64 } %t258, 0 + %t262 = getelementptr inbounds %S.gen.StructDef, ptr %t261, i64 %t257 + %t263 = getelementptr inbounds %S.gen.StructDef, ptr %t262, i32 0, i32 11 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + store i64 -1, ptr %a265 + %t266 = load i64, ptr %t264 + %t267 = load ptr, ptr %t263 + store i64 0, ptr %a268 + br label %find.cond7063 +find.cond7063: + %t269 = load i64, ptr %a268 + %t270 = icmp slt i64 %t269, %t266 + br i1 %t270, label %find.body7064, label %find.end7067 +find.body7064: + %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i64 %t269 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } %t272, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.4538, i64 5, i64 0 }, ptr %a274 + %t275 = call i32 @finch_str_eq(ptr %a273, ptr %a274) + %t276 = icmp ne i32 %t275, 0 + br i1 %t276, label %find.hit7065, label %find.next7066 +find.hit7065: + store i64 %t269, ptr %a265 + br label %find.end7067 +find.next7066: + %t277 = add i64 %t269, 1 + store i64 %t277, ptr %a268 + br label %find.cond7063 +find.end7067: + %t278 = load i64, ptr %a265 + %t279 = icmp sge i64 %t278, 0 + store i1 %t279, ptr %a242 + br label %endif7058 +endif7058: + %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.4539, i64 5, i64 0 }, ptr %a283 + %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) + %t285 = icmp ne i32 %t284, 0 + br label %logic.from7068 +logic.from7068: + br i1 %t285, label %logic.rhs7069, label %logic.end7070 +logic.rhs7069: + %t286 = load i1, ptr %a242 + %t287 = xor i1 %t286, true + br label %logic.rend7071 +logic.rend7071: + br label %logic.end7070 +logic.end7070: + %t288 = phi i1 [ false, %logic.from7068 ], [ %t287, %logic.rend7071 ] + br i1 %t288, label %then7072, label %endif7074 +then7072: + %t289 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t290 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_copy(ptr %a292, ptr %a291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + %t294 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t293, 0 + %t295 = load %S.ast.Type, ptr %a241 + store %S.ast.Type %t295, ptr %a296 + call void @finch.copy.S_ast_Type(ptr %a297, ptr %a296) + %t298 = load %S.ast.Type, ptr %a297 + %t299 = insertvalue %S.gen.Place %t294, %S.ast.Type %t298, 1 + %t300 = insertvalue %S.gen.Ref %t289, %S.gen.Place %t299, 1 + call void @finch.drop.S_ast_Type(ptr %a241) + call void @finch_str_drop(ptr %a187) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t300 +endif7074: + %t301 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store { ptr, i64, i64 } %t302, ptr %a303 + store { ptr, i64, i64 } { ptr @.str.4540, i64 6, i64 0 }, ptr %a304 + %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) + %t306 = icmp eq i32 %t305, 0 + br i1 %t306, label %then7075, label %endif7077 +then7075: + %t307 = load ptr, ptr %a1 + %t308 = load %S.ast.Node, ptr %a2 + %t309 = load %S.ast.Type, ptr %a164 + %t310 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t309) + store { ptr, i64, i64 } { ptr @.str.4541, i64 2, i64 0 }, ptr %a312 + store { ptr, i64, i64 } %t310, ptr %a313 + call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) + store { ptr, i64, i64 } %t310, ptr %a314 + call void @finch_str_drop(ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a311 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.4542, i64 43, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + call void @finch.gen.fail(ptr %t307, %S.ast.Node %t308, { ptr, i64, i64 } %t320) + store { ptr, i64, i64 } %t320, ptr %a321 + call void @finch_str_drop(ptr %a321) + br label %endif7077 +endif7077: + %t322 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t323 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t323, ptr %a324 + call void @finch_str_copy(ptr %a325, ptr %a324) + %t326 = load { ptr, i64, i64 }, ptr %a325 + %t327 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t326, 0 + %t328 = load %S.ast.Type, ptr %a241 + store %S.ast.Type %t328, ptr %a329 + call void @finch.copy.S_ast_Type(ptr %a330, ptr %a329) + %t331 = load %S.ast.Type, ptr %a330 + %t332 = insertvalue %S.gen.Place %t327, %S.ast.Type %t331, 1 + %t333 = insertvalue %S.gen.Ref %t322, %S.gen.Place %t332, 1 + %t334 = load %S.gen.Ref, ptr %a157 + store %S.gen.Ref %t333, ptr %a157 + store %S.gen.Ref %t334, ptr %a335 + call void @finch.drop.S_gen_Ref(ptr %a335) + %t336 = load %S.ast.Type, ptr %a241 + store %S.ast.Type %t336, ptr %a337 + call void @finch.copy.S_ast_Type(ptr %a338, ptr %a337) + %t339 = load %S.ast.Type, ptr %a338 + %t340 = load %S.ast.Type, ptr %a164 + store %S.ast.Type %t339, ptr %a164 + store %S.ast.Type %t340, ptr %a341 + call void @finch.drop.S_ast_Type(ptr %a341) + call void @finch.drop.S_ast_Type(ptr %a241) + call void @finch_str_drop(ptr %a187) + br label %endif7047 +endif7047: + %t342 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t343 = load { ptr, i64, i64 }, ptr %t342 + store { ptr, i64, i64 } %t343, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.4543, i64 5, i64 0 }, ptr %a345 + %t346 = call i32 @finch_str_eq(ptr %a344, ptr %a345) + %t347 = icmp ne i32 %t346, 0 + br i1 %t347, label %then7078, label %endif7080 +then7078: + %t348 = load i1, ptr %a3 + br i1 %t348, label %then7081, label %endif7083 +then7081: + %t349 = load ptr, ptr %a1 + %t350 = load %S.ast.Node, ptr %a2 + %t351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t352 = load { ptr, i64, i64 }, ptr %t351 + store { ptr, i64, i64 } { ptr @.str.4544, i64 1, i64 0 }, ptr %a354 + store { ptr, i64, i64 } %t352, ptr %a355 + call void @finch_str_concat(ptr %a353, ptr %a354, ptr %a355) + %t356 = load { ptr, i64, i64 }, ptr %a353 + store { ptr, i64, i64 } %t356, ptr %a358 + store { ptr, i64, i64 } { ptr @.str.4545, i64 26, i64 0 }, ptr %a359 + call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) + store { ptr, i64, i64 } %t356, ptr %a360 + call void @finch_str_drop(ptr %a360) + %t361 = load { ptr, i64, i64 }, ptr %a357 + call void @finch.gen.fail(ptr %t349, %S.ast.Node %t350, { ptr, i64, i64 } %t361) + store { ptr, i64, i64 } %t361, ptr %a362 + call void @finch_str_drop(ptr %a362) + br label %endif7083 +endif7083: + %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t364 = load { ptr, i64, i64 }, ptr %t363 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.4546, i64 3, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br i1 %t368, label %then7084, label %endif7086 +then7084: + %t369 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t370 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 4 + %t371 = load i64, ptr %t370 + call void @finch_str_from_int(ptr %a372, i64 %t371) + %t373 = load { ptr, i64, i64 }, ptr %a372 + %t374 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t373, 0 + %t375 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4547, i64 3, i64 0 }) + %t376 = insertvalue %S.gen.Val %t374, %S.ast.Type %t375, 1 + %t377 = insertvalue %S.gen.Val %t376, i1 true, 3 + %t378 = insertvalue %S.gen.Ref %t369, %S.gen.Val %t377, 2 + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t378 +endif7086: + %t379 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t380 = load { ptr, i64, i64 }, ptr %t379 + store { ptr, i64, i64 } %t380, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.4548, i64 3, i64 0 }, ptr %a382 + %t383 = call i32 @finch_str_eq(ptr %a381, ptr %a382) + %t384 = icmp eq i32 %t383, 0 + br i1 %t384, label %then7087, label %endif7089 +then7087: + %t385 = load ptr, ptr %a1 + %t386 = load %S.ast.Node, ptr %a2 + %t387 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t388 = load { ptr, i64, i64 }, ptr %t387 + store { ptr, i64, i64 } { ptr @.str.4549, i64 34, i64 0 }, ptr %a390 + store { ptr, i64, i64 } %t388, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a389 + store { ptr, i64, i64 } %t392, ptr %a394 + store { ptr, i64, i64 } { ptr @.str.4550, i64 1, i64 0 }, ptr %a395 + call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) + store { ptr, i64, i64 } %t392, ptr %a396 + call void @finch_str_drop(ptr %a396) + %t397 = load { ptr, i64, i64 }, ptr %a393 + call void @finch.gen.fail(ptr %t385, %S.ast.Node %t386, { ptr, i64, i64 } %t397) + store { ptr, i64, i64 } %t397, ptr %a398 + call void @finch_str_drop(ptr %a398) + br label %endif7089 +endif7089: + %t399 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t400 = load i1, ptr %t399 + %t401 = xor i1 %t400, true + br i1 %t401, label %then7090, label %endif7092 +then7090: + %t402 = load ptr, ptr %a1 + %t403 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4551, i64 48, i64 0 }) + br label %endif7092 +endif7092: + %t404 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t405 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t406 = getelementptr inbounds %S.gen.Place, ptr %t405, i32 0, i32 0 + %t407 = load { ptr, i64, i64 }, ptr %t406 + store { ptr, i64, i64 } %t407, ptr %a408 + call void @finch_str_copy(ptr %a409, ptr %a408) + %t410 = load { ptr, i64, i64 }, ptr %a409 + %t411 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t410, 0 + %t412 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t413 = load { ptr, i64, i64 }, ptr %t412 + %t414 = extractvalue { ptr, i64, i64 } %t413, 1 + %t415 = icmp uge i64 0, %t414 + br i1 %t415, label %range7093, label %inrange7094 +range7093: + call void @finch_panic_index(ptr @.str.4552, i64 3941, i64 0, i64 %t414) + unreachable +inrange7094: + %t416 = extractvalue { ptr, i64, i64 } %t413, 0 + %t417 = getelementptr inbounds %S.ast.Type, ptr %t416, i64 0 + %t418 = load %S.ast.Type, ptr %t417 + %t419 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t418) + %t420 = insertvalue %S.gen.Val %t411, %S.ast.Type %t419, 1 + %t421 = insertvalue %S.gen.Ref %t404, %S.gen.Val %t420, 2 + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t421 +endif7080: + %t422 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t423 = load { ptr, i64, i64 }, ptr %t422 + store { ptr, i64, i64 } %t423, ptr %a424 + store { ptr, i64, i64 } { ptr @.str.4553, i64 5, i64 0 }, ptr %a425 + %t426 = call i32 @finch_str_eq(ptr %a424, ptr %a425) + %t427 = icmp ne i32 %t426, 0 + br label %logic.from7095 +logic.from7095: + br i1 %t427, label %logic.end7097, label %logic.rhs7096 +logic.rhs7096: + %t428 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t429 = load { ptr, i64, i64 }, ptr %t428 + store { ptr, i64, i64 } %t429, ptr %a430 + store { ptr, i64, i64 } { ptr @.str.4554, i64 3, i64 0 }, ptr %a431 + %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) + %t433 = icmp ne i32 %t432, 0 + br label %logic.rend7098 +logic.rend7098: + br label %logic.end7097 +logic.end7097: + %t434 = phi i1 [ true, %logic.from7095 ], [ %t433, %logic.rend7098 ] + br label %logic.from7099 +logic.from7099: + br i1 %t434, label %logic.rhs7100, label %logic.end7101 +logic.rhs7100: + %t435 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t436 = load { ptr, i64, i64 }, ptr %t435 + store { ptr, i64, i64 } %t436, ptr %a437 + store { ptr, i64, i64 } { ptr @.str.4555, i64 3, i64 0 }, ptr %a438 + %t439 = call i32 @finch_str_eq(ptr %a437, ptr %a438) + %t440 = icmp ne i32 %t439, 0 + br label %logic.rend7102 +logic.rend7102: + br label %logic.end7101 +logic.end7101: + %t441 = phi i1 [ false, %logic.from7099 ], [ %t440, %logic.rend7102 ] + br i1 %t441, label %then7103, label %endif7105 +then7103: + %t442 = load i1, ptr %a3 + br i1 %t442, label %then7106, label %endif7108 +then7106: + %t443 = load ptr, ptr %a1 + %t444 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t443, %S.ast.Node %t444, { ptr, i64, i64 } { ptr @.str.4556, i64 30, i64 0 }) + br label %endif7108 +endif7108: + %t445 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t446 = load i1, ptr %t445 + %t447 = xor i1 %t446, true + br label %logic.from7109 +logic.from7109: + br i1 %t447, label %logic.rhs7110, label %logic.end7111 +logic.rhs7110: + %t448 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t449 = getelementptr inbounds %S.gen.Val, ptr %t448, i32 0, i32 2 + %t450 = load i1, ptr %t449 + br label %logic.rend7112 +logic.rend7112: + br label %logic.end7111 +logic.end7111: + %t451 = phi i1 [ false, %logic.from7109 ], [ %t450, %logic.rend7112 ] + br label %logic.from7113 +logic.from7113: + br i1 %t451, label %logic.rhs7114, label %logic.end7115 +logic.rhs7114: + %t452 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t453 = getelementptr inbounds %S.gen.Val, ptr %t452, i32 0, i32 0 + %t454 = load { ptr, i64, i64 }, ptr %t453 + store { ptr, i64, i64 } %t454, ptr %a455 + store { ptr, i64, i64 } { ptr @.str.4558, i64 1, i64 0 }, ptr %a457 + %t458 = call i32 @finch_str_starts(ptr %a455, ptr %a457) + %t459 = icmp ne i32 %t458, 0 + br label %logic.rend7116 +logic.rend7116: + br label %logic.end7115 +logic.end7115: + %t460 = phi i1 [ false, %logic.from7113 ], [ %t459, %logic.rend7116 ] + br i1 %t460, label %then7117, label %endif7119 +then7117: + %t461 = load ptr, ptr %a1 + %t462 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t461, %S.ast.Node %t462, { ptr, i64, i64 } { ptr @.str.4559, i64 53, i64 0 }) + br label %endif7119 +endif7119: + %t463 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t464 = getelementptr inbounds %S.gen.Val, ptr %t463, i32 0, i32 0 + %t465 = load { ptr, i64, i64 }, ptr %t464 + store { ptr, i64, i64 } %t465, ptr %a466 + call void @finch_str_copy(ptr %a467, ptr %a466) + %t468 = load { ptr, i64, i64 }, ptr %a467 + store { ptr, i64, i64 } %t468, ptr %a469 + %t470 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t471 = load i1, ptr %t470 + br i1 %t471, label %then7120, label %endif7122 +then7120: + %t472 = load ptr, ptr %a1 + %t473 = load ptr, ptr %a1 + %t474 = load %S.ast.Type, ptr %a164 + %t475 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t473, %S.ast.Type %t474) + %t476 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t477 = getelementptr inbounds %S.gen.Place, ptr %t476, i32 0, i32 0 + %t478 = load { ptr, i64, i64 }, ptr %t477 + %t479 = call { ptr, i64, i64 } @finch.gen.load(ptr %t472, { ptr, i64, i64 } %t475, { ptr, i64, i64 } %t478) + store { ptr, i64, i64 } %t475, ptr %a480 + call void @finch_str_drop(ptr %a480) + %t481 = load { ptr, i64, i64 }, ptr %a469 + store { ptr, i64, i64 } %t479, ptr %a469 + store { ptr, i64, i64 } %t481, ptr %a482 + call void @finch_str_drop(ptr %a482) + br label %endif7122 +endif7122: + %t483 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t484 = load { ptr, i64, i64 }, ptr %t483 + store { ptr, i64, i64 } %t484, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.4560, i64 3, i64 0 }, ptr %a486 + %t487 = call i32 @finch_str_eq(ptr %a485, ptr %a486) + %t488 = icmp ne i32 %t487, 0 + br i1 %t488, label %then7123, label %endif7125 +then7123: + %t489 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t490 = load ptr, ptr %a1 + %t491 = load { ptr, i64, i64 }, ptr %a469 + %t492 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t490, { ptr, i64, i64 } %t491) + %t493 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t492, 0 + %t494 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4561, i64 4, i64 0 }) + %t495 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t494) + store %S.ast.Type %t494, ptr %a496 + call void @finch.drop.S_ast_Type(ptr %a496) + %t497 = insertvalue %S.gen.Val %t493, %S.ast.Type %t495, 1 + %t498 = insertvalue %S.gen.Ref %t489, %S.gen.Val %t497, 2 + call void @finch_str_drop(ptr %a469) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t498 +endif7125: + %t499 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t500 = load ptr, ptr %a1 + %t501 = load { ptr, i64, i64 }, ptr %a469 + store { ptr, i64, i64 } { ptr @.str.4562, i64 31, i64 0 }, ptr %a503 + store { ptr, i64, i64 } %t501, ptr %a504 + call void @finch_str_concat(ptr %a502, ptr %a503, ptr %a504) + %t505 = load { ptr, i64, i64 }, ptr %a502 + store { ptr, i64, i64 } %t505, ptr %a507 + store { ptr, i64, i64 } { ptr @.str.4563, i64 3, i64 0 }, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t505, ptr %a509 + call void @finch_str_drop(ptr %a509) + %t510 = load { ptr, i64, i64 }, ptr %a506 + %t511 = call { ptr, i64, i64 } @finch.gen.op(ptr %t500, { ptr, i64, i64 } %t510) + store { ptr, i64, i64 } %t510, ptr %a512 + call void @finch_str_drop(ptr %a512) + %t513 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t511, 0 + %t514 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t515 = load { ptr, i64, i64 }, ptr %t514 + %t516 = extractvalue { ptr, i64, i64 } %t515, 1 + %t517 = icmp uge i64 0, %t516 + br i1 %t517, label %range7126, label %inrange7127 +range7126: + call void @finch_panic_index(ptr @.str.4564, i64 3959, i64 0, i64 %t516) + unreachable +inrange7127: + %t518 = extractvalue { ptr, i64, i64 } %t515, 0 + %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 + %t520 = load %S.ast.Type, ptr %t519 + %t521 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t520) + %t522 = insertvalue %S.gen.Val %t513, %S.ast.Type %t521, 1 + %t523 = insertvalue %S.gen.Ref %t499, %S.gen.Val %t522, 2 + call void @finch_str_drop(ptr %a469) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t523 +endif7105: + %t524 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t525 = load { ptr, i64, i64 }, ptr %t524 + store { ptr, i64, i64 } %t525, ptr %a526 + store { ptr, i64, i64 } { ptr @.str.4565, i64 5, i64 0 }, ptr %a527 + %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) + %t529 = icmp ne i32 %t528, 0 + br label %logic.from7128 +logic.from7128: + br i1 %t529, label %logic.end7130, label %logic.rhs7129 +logic.rhs7129: + %t530 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t531 = load { ptr, i64, i64 }, ptr %t530 + store { ptr, i64, i64 } %t531, ptr %a532 + store { ptr, i64, i64 } { ptr @.str.4566, i64 3, i64 0 }, ptr %a533 + %t534 = call i32 @finch_str_eq(ptr %a532, ptr %a533) + %t535 = icmp ne i32 %t534, 0 + br label %logic.rend7131 +logic.rend7131: + br label %logic.end7130 +logic.end7130: + %t536 = phi i1 [ true, %logic.from7128 ], [ %t535, %logic.rend7131 ] + br label %logic.from7132 +logic.from7132: + br i1 %t536, label %logic.end7134, label %logic.rhs7133 +logic.rhs7133: + %t537 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t538 = load { ptr, i64, i64 }, ptr %t537 + store { ptr, i64, i64 } %t538, ptr %a539 + store { ptr, i64, i64 } { ptr @.str.4567, i64 3, i64 0 }, ptr %a540 + %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) + %t542 = icmp ne i32 %t541, 0 + br label %logic.rend7135 +logic.rend7135: + br label %logic.end7134 +logic.end7134: + %t543 = phi i1 [ true, %logic.from7132 ], [ %t542, %logic.rend7135 ] + br i1 %t543, label %then7136, label %endif7138 +then7136: + %t544 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t545 = load { ptr, i64, i64 }, ptr %t544 + store { ptr, i64, i64 } %t545, ptr %a546 + store { ptr, i64, i64 } { ptr @.str.4568, i64 3, i64 0 }, ptr %a547 + %t548 = call i32 @finch_str_eq(ptr %a546, ptr %a547) + %t549 = icmp eq i32 %t548, 0 + br i1 %t549, label %then7139, label %endif7141 +then7139: + %t550 = load ptr, ptr %a1 + %t551 = load %S.ast.Node, ptr %a2 + %t552 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t553 = load { ptr, i64, i64 }, ptr %t552 + store { ptr, i64, i64 } { ptr @.str.4569, i64 37, i64 0 }, ptr %a555 + store { ptr, i64, i64 } %t553, ptr %a556 + call void @finch_str_concat(ptr %a554, ptr %a555, ptr %a556) + %t557 = load { ptr, i64, i64 }, ptr %a554 + store { ptr, i64, i64 } %t557, ptr %a559 + store { ptr, i64, i64 } { ptr @.str.4570, i64 1, i64 0 }, ptr %a560 + call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) + store { ptr, i64, i64 } %t557, ptr %a561 + call void @finch_str_drop(ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a558 + call void @finch.gen.fail(ptr %t550, %S.ast.Node %t551, { ptr, i64, i64 } %t562) + store { ptr, i64, i64 } %t562, ptr %a563 + call void @finch_str_drop(ptr %a563) + br label %endif7141 +endif7141: + %t564 = load i1, ptr %a3 + br i1 %t564, label %then7142, label %endif7144 +then7142: + %t565 = load ptr, ptr %a1 + %t566 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t565, %S.ast.Node %t566, { ptr, i64, i64 } { ptr @.str.4571, i64 48, i64 0 }) + br label %endif7144 +endif7144: + %t567 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t568 = load i1, ptr %t567 + br i1 %t568, label %then7145, label %endif7147 +then7145: + %t569 = load ptr, ptr %a1 + %t570 = load ptr, ptr %a1 + %t571 = load %S.ast.Type, ptr %a164 + %t572 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t570, %S.ast.Type %t571) + store { ptr, i64, i64 } { ptr @.str.4572, i64 23, i64 0 }, ptr %a574 + store { ptr, i64, i64 } %t572, ptr %a575 + call void @finch_str_concat(ptr %a573, ptr %a574, ptr %a575) + store { ptr, i64, i64 } %t572, ptr %a576 + call void @finch_str_drop(ptr %a576) + %t577 = load { ptr, i64, i64 }, ptr %a573 + store { ptr, i64, i64 } %t577, ptr %a579 + store { ptr, i64, i64 } { ptr @.str.4573, i64 6, i64 0 }, ptr %a580 + call void @finch_str_concat(ptr %a578, ptr %a579, ptr %a580) + store { ptr, i64, i64 } %t577, ptr %a581 + call void @finch_str_drop(ptr %a581) + %t582 = load { ptr, i64, i64 }, ptr %a578 + %t583 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t584 = getelementptr inbounds %S.gen.Place, ptr %t583, i32 0, i32 0 + %t585 = load { ptr, i64, i64 }, ptr %t584 + store { ptr, i64, i64 } %t582, ptr %a587 + store { ptr, i64, i64 } %t585, ptr %a588 + call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588) + store { ptr, i64, i64 } %t582, ptr %a589 + call void @finch_str_drop(ptr %a589) + %t590 = load { ptr, i64, i64 }, ptr %a586 + store { ptr, i64, i64 } %t590, ptr %a592 + store { ptr, i64, i64 } { ptr @.str.4574, i64 14, i64 0 }, ptr %a593 + call void @finch_str_concat(ptr %a591, ptr %a592, ptr %a593) + store { ptr, i64, i64 } %t590, ptr %a594 + call void @finch_str_drop(ptr %a594) + %t595 = load { ptr, i64, i64 }, ptr %a591 + %t596 = call { ptr, i64, i64 } @finch.gen.op(ptr %t569, { ptr, i64, i64 } %t595) + store { ptr, i64, i64 } %t595, ptr %a597 + call void @finch_str_drop(ptr %a597) + store { ptr, i64, i64 } %t596, ptr %a598 + %t599 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t600 = load ptr, ptr %a1 + %t601 = load { ptr, i64, i64 }, ptr %a598 + %t602 = call { ptr, i64, i64 } @finch.gen.load(ptr %t600, { ptr, i64, i64 } { ptr @.str.4575, i64 3, i64 0 }, { ptr, i64, i64 } %t601) + %t603 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t602, 0 + %t604 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4576, i64 3, i64 0 }) + %t605 = insertvalue %S.gen.Val %t603, %S.ast.Type %t604, 1 + %t606 = insertvalue %S.gen.Ref %t599, %S.gen.Val %t605, 2 + call void @finch_str_drop(ptr %a598) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t606 +endif7147: + %t607 = load ptr, ptr %a1 + %t608 = load ptr, ptr %a1 + %t609 = load %S.ast.Type, ptr %a164 + %t610 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t608, %S.ast.Type %t609) + store { ptr, i64, i64 } { ptr @.str.4577, i64 13, i64 0 }, ptr %a612 + store { ptr, i64, i64 } %t610, ptr %a613 + call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) + store { ptr, i64, i64 } %t610, ptr %a614 + call void @finch_str_drop(ptr %a614) + %t615 = load { ptr, i64, i64 }, ptr %a611 + store { ptr, i64, i64 } %t615, ptr %a617 + store { ptr, i64, i64 } { ptr @.str.4578, i64 1, i64 0 }, ptr %a618 + call void @finch_str_concat(ptr %a616, ptr %a617, ptr %a618) + store { ptr, i64, i64 } %t615, ptr %a619 + call void @finch_str_drop(ptr %a619) + %t620 = load { ptr, i64, i64 }, ptr %a616 + %t621 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t622 = getelementptr inbounds %S.gen.Val, ptr %t621, i32 0, i32 0 + %t623 = load { ptr, i64, i64 }, ptr %t622 + store { ptr, i64, i64 } %t620, ptr %a625 + store { ptr, i64, i64 } %t623, ptr %a626 + call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626) + store { ptr, i64, i64 } %t620, ptr %a627 + call void @finch_str_drop(ptr %a627) + %t628 = load { ptr, i64, i64 }, ptr %a624 + store { ptr, i64, i64 } %t628, ptr %a630 + store { ptr, i64, i64 } { ptr @.str.4579, i64 3, i64 0 }, ptr %a631 + call void @finch_str_concat(ptr %a629, ptr %a630, ptr %a631) + store { ptr, i64, i64 } %t628, ptr %a632 + call void @finch_str_drop(ptr %a632) + %t633 = load { ptr, i64, i64 }, ptr %a629 + %t634 = call { ptr, i64, i64 } @finch.gen.op(ptr %t607, { ptr, i64, i64 } %t633) + store { ptr, i64, i64 } %t633, ptr %a635 + call void @finch_str_drop(ptr %a635) + store { ptr, i64, i64 } %t634, ptr %a636 + %t637 = load ptr, ptr %a1 + %t638 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t639 = load %S.gen.Val, ptr %t638 + call void @finch.gen.release(ptr %t637, %S.gen.Val %t639) + %t640 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t641 = load { ptr, i64, i64 }, ptr %a636 + store { ptr, i64, i64 } %t641, ptr %a642 + call void @finch_str_copy(ptr %a643, ptr %a642) + %t644 = load { ptr, i64, i64 }, ptr %a643 + %t645 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t644, 0 + %t646 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4580, i64 3, i64 0 }) + %t647 = insertvalue %S.gen.Val %t645, %S.ast.Type %t646, 1 + %t648 = insertvalue %S.gen.Ref %t640, %S.gen.Val %t647, 2 + call void @finch_str_drop(ptr %a636) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t648 +endif7138: + %t649 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t650 = load { ptr, i64, i64 }, ptr %t649 + store { ptr, i64, i64 } %t650, ptr %a651 + store { ptr, i64, i64 } { ptr @.str.4581, i64 6, i64 0 }, ptr %a652 + %t653 = call i32 @finch_str_eq(ptr %a651, ptr %a652) + %t654 = icmp eq i32 %t653, 0 + br i1 %t654, label %then7148, label %endif7150 +then7148: + %t655 = load ptr, ptr %a1 + %t656 = load %S.ast.Node, ptr %a2 + %t657 = load %S.ast.Type, ptr %a164 + %t658 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t657) + store { ptr, i64, i64 } %t658, ptr %a660 + store { ptr, i64, i64 } { ptr @.str.4582, i64 21, i64 0 }, ptr %a661 + call void @finch_str_concat(ptr %a659, ptr %a660, ptr %a661) + store { ptr, i64, i64 } %t658, ptr %a662 + call void @finch_str_drop(ptr %a662) + %t663 = load { ptr, i64, i64 }, ptr %a659 + %t664 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t665 = load { ptr, i64, i64 }, ptr %t664 + store { ptr, i64, i64 } %t663, ptr %a667 + store { ptr, i64, i64 } %t665, ptr %a668 + call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) + store { ptr, i64, i64 } %t663, ptr %a669 + call void @finch_str_drop(ptr %a669) + %t670 = load { ptr, i64, i64 }, ptr %a666 + store { ptr, i64, i64 } %t670, ptr %a672 + store { ptr, i64, i64 } { ptr @.str.4583, i64 2, i64 0 }, ptr %a673 + call void @finch_str_concat(ptr %a671, ptr %a672, ptr %a673) + store { ptr, i64, i64 } %t670, ptr %a674 + call void @finch_str_drop(ptr %a674) + %t675 = load { ptr, i64, i64 }, ptr %a671 + call void @finch.gen.fail(ptr %t655, %S.ast.Node %t656, { ptr, i64, i64 } %t675) + store { ptr, i64, i64 } %t675, ptr %a676 + call void @finch_str_drop(ptr %a676) + br label %endif7150 +endif7150: + %t677 = load ptr, ptr %a1 + %t678 = icmp eq ptr %t677, null + br i1 %t678, label %panic7151, label %ok7152 +panic7151: + call void @finch_panic(ptr @.str.4584, i64 3979, ptr @.str.4585) + unreachable +ok7152: + %t679 = getelementptr inbounds %S.gen.Gen, ptr %t677, i32 0, i32 16 + %t680 = load ptr, ptr %a1 + %t681 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 3 + %t682 = load { ptr, i64, i64 }, ptr %t681 + %t683 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 2 + %t684 = load { ptr, i64, i64 }, ptr %t683 + %t685 = call i64 @finch.gen.findStruct(ptr %t680, { ptr, i64, i64 } %t682, { ptr, i64, i64 } %t684) + %t686 = load { ptr, i64, i64 }, ptr %t679 + %t687 = extractvalue { ptr, i64, i64 } %t686, 1 + %t688 = icmp uge i64 %t685, %t687 + br i1 %t688, label %range7153, label %inrange7154 +range7153: + call void @finch_panic_index(ptr @.str.4586, i64 3979, i64 %t685, i64 %t687) + unreachable +inrange7154: + %t689 = extractvalue { ptr, i64, i64 } %t686, 0 + %t690 = getelementptr inbounds %S.gen.StructDef, ptr %t689, i64 %t685 + %t691 = load %S.gen.StructDef, ptr %t690 + store %S.gen.StructDef %t691, ptr %a692 + call void @finch.copy.S_gen_StructDef(ptr %a693, ptr %a692) + %t694 = load %S.gen.StructDef, ptr %a693 + store %S.gen.StructDef %t694, ptr %a695 + %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 11 + %t697 = getelementptr inbounds { ptr, i64, i64 }, ptr %t696, i32 0, i32 1 + %t698 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t699 = load { ptr, i64, i64 }, ptr %t698 + store i64 -1, ptr %a700 + %t701 = load i64, ptr %t697 + %t702 = load ptr, ptr %t696 + store i64 0, ptr %a703 + br label %find.cond7155 +find.cond7155: + %t704 = load i64, ptr %a703 + %t705 = icmp slt i64 %t704, %t701 + br i1 %t705, label %find.body7156, label %find.end7159 +find.body7156: + %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 + %t707 = load { ptr, i64, i64 }, ptr %t706 + store { ptr, i64, i64 } %t707, ptr %a708 + store { ptr, i64, i64 } %t699, ptr %a709 + %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) + %t711 = icmp ne i32 %t710, 0 + br i1 %t711, label %find.hit7157, label %find.next7158 +find.hit7157: + store i64 %t704, ptr %a700 + br label %find.end7159 +find.next7158: + %t712 = add i64 %t704, 1 + store i64 %t712, ptr %a703 + br label %find.cond7155 +find.end7159: + %t713 = load i64, ptr %a700 + store i64 %t713, ptr %a714 + %t715 = load i64, ptr %a714 + %t716 = icmp slt i64 %t715, 0 + br i1 %t716, label %then7160, label %endif7162 +then7160: + %t717 = load ptr, ptr %a1 + %t718 = load %S.ast.Node, ptr %a2 + %t719 = load %S.ast.Type, ptr %a164 + %t720 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t719) + store { ptr, i64, i64 } { ptr @.str.4587, i64 11, i64 0 }, ptr %a722 + store { ptr, i64, i64 } %t720, ptr %a723 + call void @finch_str_concat(ptr %a721, ptr %a722, ptr %a723) + store { ptr, i64, i64 } %t720, ptr %a724 + call void @finch_str_drop(ptr %a724) + %t725 = load { ptr, i64, i64 }, ptr %a721 + store { ptr, i64, i64 } %t725, ptr %a727 + store { ptr, i64, i64 } { ptr @.str.4588, i64 15, i64 0 }, ptr %a728 + call void @finch_str_concat(ptr %a726, ptr %a727, ptr %a728) + store { ptr, i64, i64 } %t725, ptr %a729 + call void @finch_str_drop(ptr %a729) + %t730 = load { ptr, i64, i64 }, ptr %a726 + %t731 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t732 = load { ptr, i64, i64 }, ptr %t731 + store { ptr, i64, i64 } %t730, ptr %a734 + store { ptr, i64, i64 } %t732, ptr %a735 + call void @finch_str_concat(ptr %a733, ptr %a734, ptr %a735) + store { ptr, i64, i64 } %t730, ptr %a736 + call void @finch_str_drop(ptr %a736) + %t737 = load { ptr, i64, i64 }, ptr %a733 + store { ptr, i64, i64 } %t737, ptr %a739 + store { ptr, i64, i64 } { ptr @.str.4589, i64 11, i64 0 }, ptr %a740 + call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) + store { ptr, i64, i64 } %t737, ptr %a741 + call void @finch_str_drop(ptr %a741) + %t742 = load { ptr, i64, i64 }, ptr %a738 + %t743 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 11 + %t744 = getelementptr inbounds { ptr, i64, i64 }, ptr %t743, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4590, i64 2, i64 0 }, ptr %a745 + call void @finch_str_join(ptr %a746, ptr %t743, ptr %a745) + %t747 = load { ptr, i64, i64 }, ptr %a746 + store { ptr, i64, i64 } %t742, ptr %a749 + store { ptr, i64, i64 } %t747, ptr %a750 + call void @finch_str_concat(ptr %a748, ptr %a749, ptr %a750) + store { ptr, i64, i64 } %t742, ptr %a751 + call void @finch_str_drop(ptr %a751) + store { ptr, i64, i64 } %t747, ptr %a752 + call void @finch_str_drop(ptr %a752) + %t753 = load { ptr, i64, i64 }, ptr %a748 + store { ptr, i64, i64 } %t753, ptr %a755 + store { ptr, i64, i64 } { ptr @.str.4591, i64 1, i64 0 }, ptr %a756 + call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) + store { ptr, i64, i64 } %t753, ptr %a757 + call void @finch_str_drop(ptr %a757) + %t758 = load { ptr, i64, i64 }, ptr %a754 + call void @finch.gen.fail(ptr %t717, %S.ast.Node %t718, { ptr, i64, i64 } %t758) + store { ptr, i64, i64 } %t758, ptr %a759 + call void @finch_str_drop(ptr %a759) + br label %endif7162 +endif7162: + %t760 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 12 + %t761 = load i64, ptr %a714 + %t762 = load { ptr, i64, i64 }, ptr %t760 + %t763 = extractvalue { ptr, i64, i64 } %t762, 1 + %t764 = icmp uge i64 %t761, %t763 + br i1 %t764, label %range7163, label %inrange7164 +range7163: + call void @finch_panic_index(ptr @.str.4592, i64 3984, i64 %t761, i64 %t763) + unreachable +inrange7164: + %t765 = extractvalue { ptr, i64, i64 } %t762, 0 + %t766 = getelementptr inbounds %S.ast.Type, ptr %t765, i64 %t761 + %t767 = load %S.ast.Type, ptr %t766 + store %S.ast.Type %t767, ptr %a768 + call void @finch.copy.S_ast_Type(ptr %a769, ptr %a768) + %t770 = load %S.ast.Type, ptr %a769 + store %S.ast.Type %t770, ptr %a771 + %t772 = load ptr, ptr %a1 + %t773 = load %S.ast.Node, ptr %a2 + %t774 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t775 = load i64, ptr %t774 + %t776 = add i64 %t775, 1 + %t777 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t778 = getelementptr inbounds { ptr, i64, i64 }, ptr %t777, i32 0, i32 1 + %t779 = load i64, ptr %t778 + %t780 = load %S.ast.Type, ptr %a771 + %t781 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t780) + store { ptr, i64, i64 } { ptr @.str.4593, i64 9, i64 0 }, ptr %a783 + store { ptr, i64, i64 } %t781, ptr %a784 + call void @finch_str_concat(ptr %a782, ptr %a783, ptr %a784) + store { ptr, i64, i64 } %t781, ptr %a785 + call void @finch_str_drop(ptr %a785) + %t786 = load { ptr, i64, i64 }, ptr %a782 + store { ptr, i64, i64 } %t786, ptr %a788 + store { ptr, i64, i64 } { ptr @.str.4594, i64 1, i64 0 }, ptr %a789 + call void @finch_str_concat(ptr %a787, ptr %a788, ptr %a789) + store { ptr, i64, i64 } %t786, ptr %a790 + call void @finch_str_drop(ptr %a790) + %t791 = load { ptr, i64, i64 }, ptr %a787 + %t792 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t793 = load { ptr, i64, i64 }, ptr %t792 + store { ptr, i64, i64 } %t791, ptr %a795 + store { ptr, i64, i64 } %t793, ptr %a796 + call void @finch_str_concat(ptr %a794, ptr %a795, ptr %a796) + store { ptr, i64, i64 } %t791, ptr %a797 + call void @finch_str_drop(ptr %a797) + %t798 = load { ptr, i64, i64 }, ptr %a794 + store { ptr, i64, i64 } %t798, ptr %a800 + store { ptr, i64, i64 } { ptr @.str.4595, i64 4, i64 0 }, ptr %a801 + call void @finch_str_concat(ptr %a799, ptr %a800, ptr %a801) + store { ptr, i64, i64 } %t798, ptr %a802 + call void @finch_str_drop(ptr %a802) + %t803 = load { ptr, i64, i64 }, ptr %a799 + call void @finch.gen.noteRef(ptr %t772, %S.ast.Node %t773, i64 %t776, i64 %t779, { ptr, i64, i64 } %t803, { ptr, i64, i64 } { ptr @.str.4596, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t803, ptr %a804 + call void @finch_str_drop(ptr %a804) + %t805 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t806 = load i1, ptr %t805 + br i1 %t806, label %then7165, label %endif7167 +then7165: + %t807 = load ptr, ptr %a1 + %t808 = load ptr, ptr %a1 + %t809 = load %S.ast.Type, ptr %a164 + %t810 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t808, %S.ast.Type %t809) + store { ptr, i64, i64 } { ptr @.str.4597, i64 23, i64 0 }, ptr %a812 + store { ptr, i64, i64 } %t810, ptr %a813 + call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813) + store { ptr, i64, i64 } %t810, ptr %a814 + call void @finch_str_drop(ptr %a814) + %t815 = load { ptr, i64, i64 }, ptr %a811 + store { ptr, i64, i64 } %t815, ptr %a817 + store { ptr, i64, i64 } { ptr @.str.4598, i64 6, i64 0 }, ptr %a818 + call void @finch_str_concat(ptr %a816, ptr %a817, ptr %a818) + store { ptr, i64, i64 } %t815, ptr %a819 + call void @finch_str_drop(ptr %a819) + %t820 = load { ptr, i64, i64 }, ptr %a816 + %t821 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t822 = getelementptr inbounds %S.gen.Place, ptr %t821, i32 0, i32 0 + %t823 = load { ptr, i64, i64 }, ptr %t822 + store { ptr, i64, i64 } %t820, ptr %a825 + store { ptr, i64, i64 } %t823, ptr %a826 + call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) + store { ptr, i64, i64 } %t820, ptr %a827 + call void @finch_str_drop(ptr %a827) + %t828 = load { ptr, i64, i64 }, ptr %a824 + store { ptr, i64, i64 } %t828, ptr %a830 + store { ptr, i64, i64 } { ptr @.str.4599, i64 13, i64 0 }, ptr %a831 + call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) + store { ptr, i64, i64 } %t828, ptr %a832 + call void @finch_str_drop(ptr %a832) + %t833 = load { ptr, i64, i64 }, ptr %a829 + %t834 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 3 + %t835 = load i64, ptr %a714 + %t836 = load { ptr, i64, i64 }, ptr %t834 + %t837 = extractvalue { ptr, i64, i64 } %t836, 1 + %t838 = icmp uge i64 %t835, %t837 + br i1 %t838, label %range7168, label %inrange7169 +range7168: + call void @finch_panic_index(ptr @.str.4600, i64 3987, i64 %t835, i64 %t837) + unreachable +inrange7169: + %t839 = extractvalue { ptr, i64, i64 } %t836, 0 + %t840 = getelementptr inbounds i64, ptr %t839, i64 %t835 + %t841 = load i64, ptr %t840 + call void @finch_str_from_int(ptr %a842, i64 %t841) + %t843 = load { ptr, i64, i64 }, ptr %a842 + store { ptr, i64, i64 } %t833, ptr %a845 + store { ptr, i64, i64 } %t843, ptr %a846 + call void @finch_str_concat(ptr %a844, ptr %a845, ptr %a846) + store { ptr, i64, i64 } %t833, ptr %a847 + call void @finch_str_drop(ptr %a847) + store { ptr, i64, i64 } %t843, ptr %a848 + call void @finch_str_drop(ptr %a848) + %t849 = load { ptr, i64, i64 }, ptr %a844 + %t850 = call { ptr, i64, i64 } @finch.gen.op(ptr %t807, { ptr, i64, i64 } %t849) + store { ptr, i64, i64 } %t849, ptr %a851 + call void @finch_str_drop(ptr %a851) + store { ptr, i64, i64 } %t850, ptr %a852 + %t853 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t854 = load { ptr, i64, i64 }, ptr %a852 + store { ptr, i64, i64 } %t854, ptr %a855 + call void @finch_str_copy(ptr %a856, ptr %a855) + %t857 = load { ptr, i64, i64 }, ptr %a856 + %t858 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t857, 0 + %t859 = load %S.ast.Type, ptr %a771 + store %S.ast.Type %t859, ptr %a860 + call void @finch.copy.S_ast_Type(ptr %a861, ptr %a860) + %t862 = load %S.ast.Type, ptr %a861 + %t863 = insertvalue %S.gen.Place %t858, %S.ast.Type %t862, 1 + %t864 = insertvalue %S.gen.Ref %t853, %S.gen.Place %t863, 1 + call void @finch_str_drop(ptr %a852) + call void @finch.drop.S_ast_Type(ptr %a771) + call void @finch.drop.S_gen_StructDef(ptr %a695) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t864 +endif7167: + %t865 = load ptr, ptr %a1 + %t866 = load ptr, ptr %a1 + %t867 = load %S.ast.Type, ptr %a164 + %t868 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t866, %S.ast.Type %t867) + store { ptr, i64, i64 } { ptr @.str.4601, i64 13, i64 0 }, ptr %a870 + store { ptr, i64, i64 } %t868, ptr %a871 + call void @finch_str_concat(ptr %a869, ptr %a870, ptr %a871) + store { ptr, i64, i64 } %t868, ptr %a872 + call void @finch_str_drop(ptr %a872) + %t873 = load { ptr, i64, i64 }, ptr %a869 + store { ptr, i64, i64 } %t873, ptr %a875 + store { ptr, i64, i64 } { ptr @.str.4602, i64 1, i64 0 }, ptr %a876 + call void @finch_str_concat(ptr %a874, ptr %a875, ptr %a876) + store { ptr, i64, i64 } %t873, ptr %a877 + call void @finch_str_drop(ptr %a877) + %t878 = load { ptr, i64, i64 }, ptr %a874 + %t879 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t880 = getelementptr inbounds %S.gen.Val, ptr %t879, i32 0, i32 0 + %t881 = load { ptr, i64, i64 }, ptr %t880 + store { ptr, i64, i64 } %t878, ptr %a883 + store { ptr, i64, i64 } %t881, ptr %a884 + call void @finch_str_concat(ptr %a882, ptr %a883, ptr %a884) + store { ptr, i64, i64 } %t878, ptr %a885 + call void @finch_str_drop(ptr %a885) + %t886 = load { ptr, i64, i64 }, ptr %a882 + store { ptr, i64, i64 } %t886, ptr %a888 + store { ptr, i64, i64 } { ptr @.str.4603, i64 2, i64 0 }, ptr %a889 + call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889) + store { ptr, i64, i64 } %t886, ptr %a890 + call void @finch_str_drop(ptr %a890) + %t891 = load { ptr, i64, i64 }, ptr %a887 + %t892 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 3 + %t893 = load i64, ptr %a714 + %t894 = load { ptr, i64, i64 }, ptr %t892 + %t895 = extractvalue { ptr, i64, i64 } %t894, 1 + %t896 = icmp uge i64 %t893, %t895 + br i1 %t896, label %range7170, label %inrange7171 +range7170: + call void @finch_panic_index(ptr @.str.4604, i64 3990, i64 %t893, i64 %t895) + unreachable +inrange7171: + %t897 = extractvalue { ptr, i64, i64 } %t894, 0 + %t898 = getelementptr inbounds i64, ptr %t897, i64 %t893 + %t899 = load i64, ptr %t898 + call void @finch_str_from_int(ptr %a900, i64 %t899) + %t901 = load { ptr, i64, i64 }, ptr %a900 + store { ptr, i64, i64 } %t891, ptr %a903 + store { ptr, i64, i64 } %t901, ptr %a904 + call void @finch_str_concat(ptr %a902, ptr %a903, ptr %a904) + store { ptr, i64, i64 } %t891, ptr %a905 + call void @finch_str_drop(ptr %a905) + store { ptr, i64, i64 } %t901, ptr %a906 + call void @finch_str_drop(ptr %a906) + %t907 = load { ptr, i64, i64 }, ptr %a902 + %t908 = call { ptr, i64, i64 } @finch.gen.op(ptr %t865, { ptr, i64, i64 } %t907) + store { ptr, i64, i64 } %t907, ptr %a909 + call void @finch_str_drop(ptr %a909) + store { ptr, i64, i64 } %t908, ptr %a910 + %t911 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t911, ptr %a912 + call void @finch_str_copy(ptr %a913, ptr %a912) + %t914 = load { ptr, i64, i64 }, ptr %a913 + %t915 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t914, 0 + %t916 = load %S.ast.Type, ptr %a771 + store %S.ast.Type %t916, ptr %a917 + call void @finch.copy.S_ast_Type(ptr %a918, ptr %a917) + %t919 = load %S.ast.Type, ptr %a918 + %t920 = insertvalue %S.gen.Val %t915, %S.ast.Type %t919, 1 + store %S.gen.Val %t920, ptr %a921 + %t922 = load ptr, ptr %a1 + %t923 = load %S.ast.Type, ptr %a771 + %t924 = call i1 @finch.gen.owning(ptr %t922, %S.ast.Type %t923) + br label %logic.from7172 +logic.from7172: + br i1 %t924, label %logic.rhs7173, label %logic.end7174 +logic.rhs7173: + %t925 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t926 = getelementptr inbounds %S.gen.Val, ptr %t925, i32 0, i32 2 + %t927 = load i1, ptr %t926 + br label %logic.rend7175 +logic.rend7175: + br label %logic.end7174 +logic.end7174: + %t928 = phi i1 [ false, %logic.from7172 ], [ %t927, %logic.rend7175 ] + br i1 %t928, label %then7176, label %endif7178 +then7176: + %t929 = load ptr, ptr %a1 + %t930 = load { ptr, i64, i64 }, ptr %a910 + %t931 = load %S.ast.Type, ptr %a771 + %t932 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t929, { ptr, i64, i64 } %t930, %S.ast.Type %t931) + %t933 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t932, 0 + %t934 = load %S.ast.Type, ptr %a771 + store %S.ast.Type %t934, ptr %a935 + call void @finch.copy.S_ast_Type(ptr %a936, ptr %a935) + %t937 = load %S.ast.Type, ptr %a936 + %t938 = insertvalue %S.gen.Val %t933, %S.ast.Type %t937, 1 + %t939 = insertvalue %S.gen.Val %t938, i1 true, 2 + %t940 = load %S.gen.Val, ptr %a921 + store %S.gen.Val %t939, ptr %a921 + store %S.gen.Val %t940, ptr %a941 + call void @finch.drop.S_gen_Val(ptr %a941) + br label %endif7178 +endif7178: + %t942 = load ptr, ptr %a1 + %t943 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t944 = load %S.gen.Val, ptr %t943 + call void @finch.gen.release(ptr %t942, %S.gen.Val %t944) + %t945 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t946 = load %S.gen.Val, ptr %a921 + store %S.gen.Val %t946, ptr %a947 + call void @finch.copy.S_gen_Val(ptr %a948, ptr %a947) + %t949 = load %S.gen.Val, ptr %a948 + %t950 = insertvalue %S.gen.Ref %t945, %S.gen.Val %t949, 2 + call void @finch.drop.S_gen_Val(ptr %a921) + call void @finch_str_drop(ptr %a910) + call void @finch.drop.S_ast_Type(ptr %a771) + call void @finch.drop.S_gen_StructDef(ptr %a695) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t950 +} + +define internal %S.gen.Ref @finch.gen.index(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a14 = alloca %S.gen.Ref, align 16 + %a20 = alloca i64, align 16 + %a32 = alloca %S.gen.Ref, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range7179, label %inrange7180 +range7179: + call void @finch_panic_index(ptr @.str.4605, i64 4000, i64 0, i64 %t7) + unreachable +inrange7180: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = load i1, ptr %a3 + %t13 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 %t12) + store %S.gen.Ref %t13, ptr %a14 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic7181, label %ok7182 +panic7181: + call void @finch_panic(ptr @.str.4606, i64 4001, ptr @.str.4607) + unreachable +ok7182: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 11 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + store i64 %t19, ptr %a20 + %t21 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 + %t22 = load i1, ptr %t21 + %t23 = xor i1 %t22, true + br i1 %t23, label %then7183, label %endif7185 +then7183: + %t24 = load ptr, ptr %a1 + %t25 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 + %t26 = load %S.gen.Val, ptr %t25 + call void @finch.gen.hold(ptr %t24, %S.gen.Val %t26) + br label %endif7185 +endif7185: + %t27 = load ptr, ptr %a1 + %t28 = load %S.ast.Node, ptr %a2 + %t29 = load %S.gen.Ref, ptr %a14 + %t30 = load i1, ptr %a3 + %t31 = call %S.gen.Ref @finch.gen.indexOf(ptr %t27, %S.ast.Node %t28, %S.gen.Ref %t29, i1 %t30) + store %S.gen.Ref %t31, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = load i64, ptr %a20 + call void @finch.gen.heldEnd(ptr %t33, i64 %t34) + %t35 = load %S.gen.Ref, ptr %a32 + call void @finch.drop.S_gen_Ref(ptr %a14) + ret %S.gen.Ref %t35 +} + +define internal %S.gen.Ref @finch.gen.indexOf(ptr %p0, %S.ast.Node %p1, %S.gen.Ref %p2, i1 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.Ref, align 16 + %a4 = alloca i1, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a9 = alloca %S.ast.Type, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca %S.gen.Val, align 16 + %a54 = alloca %S.ast.Type, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca %S.gen.Val, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca %S.ast.Type, align 16 + %a140 = alloca %S.ast.Type, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca %S.ast.Type, align 16 + %a180 = alloca %S.ast.Type, align 16 + %a182 = alloca %S.ast.Type, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a220 = alloca %S.ast.Type, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca %S.ast.Type, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca %S.ast.Type, align 16 + %a263 = alloca %S.ast.Type, align 16 + %a266 = alloca %S.ast.Type, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca %S.ast.Type, align 16 + %a386 = alloca %S.ast.Type, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca %S.ast.Type, align 16 + %a405 = alloca %S.ast.Type, align 16 + %a408 = alloca %S.gen.Val, align 16 + %a422 = alloca %S.ast.Type, align 16 + %a423 = alloca %S.ast.Type, align 16 + %a428 = alloca %S.gen.Val, align 16 + %a434 = alloca %S.gen.Val, align 16 + %a435 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.Ref %p2, ptr %a3 + store i1 %p3, ptr %a4 + %t5 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t6 = getelementptr inbounds %S.gen.Val, ptr %t5, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %t6 + store %S.ast.Type %t7, ptr %a8 + call void @finch.copy.S_ast_Type(ptr %a9, ptr %a8) + %t10 = load %S.ast.Type, ptr %a9 + store %S.ast.Type %t10, ptr %a11 + %t12 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t13 = load i1, ptr %t12 + br i1 %t13, label %then7186, label %endif7188 +then7186: + %t14 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t15 = getelementptr inbounds %S.gen.Place, ptr %t14, i32 0, i32 1 + %t16 = load %S.ast.Type, ptr %t15 + store %S.ast.Type %t16, ptr %a17 + call void @finch.copy.S_ast_Type(ptr %a18, ptr %a17) + %t19 = load %S.ast.Type, ptr %a18 + %t20 = load %S.ast.Type, ptr %a11 + store %S.ast.Type %t19, ptr %a11 + store %S.ast.Type %t20, ptr %a21 + call void @finch.drop.S_ast_Type(ptr %a21) + br label %endif7188 +endif7188: + %t22 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.4608, i64 3, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then7189, label %endif7191 +then7189: + %t28 = load ptr, ptr %a1 + %t29 = load %S.ast.Node, ptr %a2 + %t30 = load %S.gen.Ref, ptr %a3 + %t31 = load %S.ast.Type, ptr %a11 + %t32 = load i1, ptr %a4 + %t33 = call %S.gen.Ref @finch.gen.mapIndex(ptr %t28, %S.ast.Node %t29, %S.gen.Ref %t30, %S.ast.Type %t31, i1 %t32) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t33 +endif7191: + %t34 = load ptr, ptr %a1 + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 1, %t38 + br i1 %t39, label %range7192, label %inrange7193 +range7192: + call void @finch_panic_index(ptr @.str.4609, i64 4018, i64 1, i64 %t38) + unreachable +inrange7193: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 + %t42 = load %S.ast.Node, ptr %t41 + %t43 = call %S.gen.Val @finch.gen.expr(ptr %t35, %S.ast.Node %t42) + %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4610, i64 3, i64 0 }) + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range7194, label %inrange7195 +range7194: + call void @finch_panic_index(ptr @.str.4611, i64 4018, i64 1, i64 %t47) + unreachable +inrange7195: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 + %t51 = load %S.ast.Node, ptr %t50 + %t52 = call %S.gen.Val @finch.gen.coerce(ptr %t34, %S.gen.Val %t43, %S.ast.Type %t44, %S.ast.Node %t51, { ptr, i64, i64 } { ptr @.str.4612, i64 8, i64 0 }) + store %S.gen.Val %t43, ptr %a53 + call void @finch.drop.S_gen_Val(ptr %a53) + store %S.ast.Type %t44, ptr %a54 + call void @finch.drop.S_ast_Type(ptr %a54) + %t55 = extractvalue %S.gen.Val %t52, 0 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_copy(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + store %S.gen.Val %t52, ptr %a59 + call void @finch.drop.S_gen_Val(ptr %a59) + store { ptr, i64, i64 } %t58, ptr %a60 + %t61 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.4613, i64 5, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br i1 %t66, label %then7196, label %endif7198 +then7196: + store { ptr, i64, i64 } { ptr @.str.4614, i64 0, i64 0 }, ptr %a67 + %t68 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t69 = load i1, ptr %t68 + br i1 %t69, label %then7199, label %else7200 +then7199: + %t70 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t71 = getelementptr inbounds %S.gen.Place, ptr %t70, i32 0, i32 0 + %t72 = load { ptr, i64, i64 }, ptr %t71 + store { ptr, i64, i64 } %t72, ptr %a73 + call void @finch_str_copy(ptr %a74, ptr %a73) + %t75 = load { ptr, i64, i64 }, ptr %a74 + %t76 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t75, ptr %a67 + store { ptr, i64, i64 } %t76, ptr %a77 + call void @finch_str_drop(ptr %a77) + br label %endif7201 +else7200: + %t78 = load ptr, ptr %a1 + %t79 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t80 = load %S.gen.Val, ptr %t79 + %t81 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t78, %S.gen.Val %t80) + %t82 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t81, ptr %a67 + store { ptr, i64, i64 } %t82, ptr %a83 + call void @finch_str_drop(ptr %a83) + br label %endif7201 +endif7201: + %t84 = load ptr, ptr %a1 + %t85 = load { ptr, i64, i64 }, ptr %a60 + %t86 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 4 + %t87 = load i64, ptr %t86 + call void @finch_str_from_int(ptr %a88, i64 %t87) + %t89 = load { ptr, i64, i64 }, ptr %a88 + %t90 = load %S.ast.Node, ptr %a2 + call void @finch.gen.boundsCheck(ptr %t84, { ptr, i64, i64 } %t85, { ptr, i64, i64 } %t89, %S.ast.Node %t90) + store { ptr, i64, i64 } %t89, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load ptr, ptr %a1 + %t93 = load ptr, ptr %a1 + %t94 = load %S.ast.Type, ptr %a11 + %t95 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t93, %S.ast.Type %t94) + store { ptr, i64, i64 } { ptr @.str.4615, i64 23, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.4616, i64 6, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + store { ptr, i64, i64 } %t100, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a101 + %t106 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t105, ptr %a108 + store { ptr, i64, i64 } %t106, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t105, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t111, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.4617, i64 13, i64 0 }, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t111, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a112 + %t117 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t116, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t116, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + %t123 = call { ptr, i64, i64 } @finch.gen.op(ptr %t92, { ptr, i64, i64 } %t122) + store { ptr, i64, i64 } %t122, ptr %a124 + call void @finch_str_drop(ptr %a124) + store { ptr, i64, i64 } %t123, ptr %a125 + %t126 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t127 = load { ptr, i64, i64 }, ptr %a125 + store { ptr, i64, i64 } %t127, ptr %a128 + call void @finch_str_copy(ptr %a129, ptr %a128) + %t130 = load { ptr, i64, i64 }, ptr %a129 + %t131 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t130, 0 + %t132 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t133 = load { ptr, i64, i64 }, ptr %t132 + %t134 = extractvalue { ptr, i64, i64 } %t133, 1 + %t135 = icmp uge i64 0, %t134 + br i1 %t135, label %range7202, label %inrange7203 +range7202: + call void @finch_panic_index(ptr @.str.4618, i64 4028, i64 0, i64 %t134) + unreachable +inrange7203: + %t136 = extractvalue { ptr, i64, i64 } %t133, 0 + %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 0 + %t138 = load %S.ast.Type, ptr %t137 + store %S.ast.Type %t138, ptr %a139 + call void @finch.copy.S_ast_Type(ptr %a140, ptr %a139) + %t141 = load %S.ast.Type, ptr %a140 + %t142 = insertvalue %S.gen.Place %t131, %S.ast.Type %t141, 1 + %t143 = insertvalue %S.gen.Ref %t126, %S.gen.Place %t142, 1 + call void @finch_str_drop(ptr %a125) + call void @finch_str_drop(ptr %a67) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t143 +endif7198: + %t144 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t145 = load { ptr, i64, i64 }, ptr %t144 + store { ptr, i64, i64 } %t145, ptr %a146 + store { ptr, i64, i64 } { ptr @.str.4619, i64 3, i64 0 }, ptr %a147 + %t148 = call i32 @finch_str_eq(ptr %a146, ptr %a147) + %t149 = icmp ne i32 %t148, 0 + br i1 %t149, label %then7204, label %endif7206 +then7204: + %t150 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 + %t152 = load i64, ptr %t151 + %t153 = icmp eq i64 %t152, 0 + br i1 %t153, label %then7207, label %endif7209 +then7207: + %t154 = load ptr, ptr %a1 + %t155 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } { ptr @.str.4620, i64 57, i64 0 }) + br label %endif7209 +endif7209: + %t156 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t157 = getelementptr inbounds %S.gen.Val, ptr %t156, i32 0, i32 0 + %t158 = load { ptr, i64, i64 }, ptr %t157 + store { ptr, i64, i64 } %t158, ptr %a159 + call void @finch_str_copy(ptr %a160, ptr %a159) + %t161 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t161, ptr %a162 + %t163 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t164 = load i1, ptr %t163 + br i1 %t164, label %then7210, label %endif7212 +then7210: + %t165 = load ptr, ptr %a1 + %t166 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t167 = getelementptr inbounds %S.gen.Place, ptr %t166, i32 0, i32 0 + %t168 = load { ptr, i64, i64 }, ptr %t167 + %t169 = call { ptr, i64, i64 } @finch.gen.load(ptr %t165, { ptr, i64, i64 } { ptr @.str.4621, i64 3, i64 0 }, { ptr, i64, i64 } %t168) + %t170 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t169, ptr %a162 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_drop(ptr %a171) + br label %endif7212 +endif7212: + %t172 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t173 = load { ptr, i64, i64 }, ptr %t172 + %t174 = extractvalue { ptr, i64, i64 } %t173, 1 + %t175 = icmp uge i64 0, %t174 + br i1 %t175, label %range7213, label %inrange7214 +range7213: + call void @finch_panic_index(ptr @.str.4622, i64 4038, i64 0, i64 %t174) + unreachable +inrange7214: + %t176 = extractvalue { ptr, i64, i64 } %t173, 0 + %t177 = getelementptr inbounds %S.ast.Type, ptr %t176, i64 0 + %t178 = load %S.ast.Type, ptr %t177 + store %S.ast.Type %t178, ptr %a179 + call void @finch.copy.S_ast_Type(ptr %a180, ptr %a179) + %t181 = load %S.ast.Type, ptr %a180 + store %S.ast.Type %t181, ptr %a182 + %t183 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t184 = load ptr, ptr %a1 + %t185 = load ptr, ptr %a1 + %t186 = load %S.ast.Type, ptr %a182 + %t187 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t185, %S.ast.Type %t186) + store { ptr, i64, i64 } { ptr @.str.4623, i64 23, i64 0 }, ptr %a189 + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.4624, i64 6, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load { ptr, i64, i64 }, ptr %a193 + %t198 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t197, ptr %a200 + store { ptr, i64, i64 } %t198, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + store { ptr, i64, i64 } %t197, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t203, ptr %a205 + store { ptr, i64, i64 } { ptr @.str.4625, i64 6, i64 0 }, ptr %a206 + call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) + store { ptr, i64, i64 } %t203, ptr %a207 + call void @finch_str_drop(ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a204 + %t209 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t208, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t208, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + %t215 = call { ptr, i64, i64 } @finch.gen.op(ptr %t184, { ptr, i64, i64 } %t214) + store { ptr, i64, i64 } %t214, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t215, 0 + %t218 = load %S.ast.Type, ptr %a182 + store %S.ast.Type %t218, ptr %a219 + call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) + %t221 = load %S.ast.Type, ptr %a220 + %t222 = insertvalue %S.gen.Place %t217, %S.ast.Type %t221, 1 + %t223 = insertvalue %S.gen.Ref %t183, %S.gen.Place %t222, 1 + call void @finch.drop.S_ast_Type(ptr %a182) + call void @finch_str_drop(ptr %a162) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t223 +endif7206: + %t224 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t225 = load { ptr, i64, i64 }, ptr %t224 + store { ptr, i64, i64 } %t225, ptr %a226 + store { ptr, i64, i64 } { ptr @.str.4626, i64 5, i64 0 }, ptr %a227 + %t228 = call i32 @finch_str_eq(ptr %a226, ptr %a227) + %t229 = icmp eq i32 %t228, 0 + br label %logic.from7215 +logic.from7215: + br i1 %t229, label %logic.rhs7216, label %logic.end7217 +logic.rhs7216: + %t230 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t231 = load { ptr, i64, i64 }, ptr %t230 + store { ptr, i64, i64 } %t231, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.4627, i64 3, i64 0 }, ptr %a233 + %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) + %t235 = icmp eq i32 %t234, 0 + br label %logic.rend7218 +logic.rend7218: + br label %logic.end7217 +logic.end7217: + %t236 = phi i1 [ false, %logic.from7215 ], [ %t235, %logic.rend7218 ] + br i1 %t236, label %then7219, label %endif7221 +then7219: + %t237 = load ptr, ptr %a1 + %t238 = load %S.ast.Node, ptr %a2 + %t239 = load %S.ast.Type, ptr %a11 + %t240 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t239) + store { ptr, i64, i64 } { ptr @.str.4628, i64 46, i64 0 }, ptr %a242 + store { ptr, i64, i64 } %t240, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t240, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + call void @finch.gen.fail(ptr %t237, %S.ast.Node %t238, { ptr, i64, i64 } %t245) + store { ptr, i64, i64 } %t245, ptr %a246 + call void @finch_str_drop(ptr %a246) + br label %endif7221 +endif7221: + %t247 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4629, i64 4, i64 0 }) + store %S.ast.Type %t247, ptr %a248 + %t249 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t250 = load { ptr, i64, i64 }, ptr %t249 + store { ptr, i64, i64 } %t250, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.4630, i64 5, i64 0 }, ptr %a252 + %t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252) + %t254 = icmp ne i32 %t253, 0 + br i1 %t254, label %then7222, label %endif7224 +then7222: + %t255 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t256 = load { ptr, i64, i64 }, ptr %t255 + %t257 = extractvalue { ptr, i64, i64 } %t256, 1 + %t258 = icmp uge i64 0, %t257 + br i1 %t258, label %range7225, label %inrange7226 +range7225: + call void @finch_panic_index(ptr @.str.4631, i64 4046, i64 0, i64 %t257) + unreachable +inrange7226: + %t259 = extractvalue { ptr, i64, i64 } %t256, 0 + %t260 = getelementptr inbounds %S.ast.Type, ptr %t259, i64 0 + %t261 = load %S.ast.Type, ptr %t260 + store %S.ast.Type %t261, ptr %a262 + call void @finch.copy.S_ast_Type(ptr %a263, ptr %a262) + %t264 = load %S.ast.Type, ptr %a263 + %t265 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t264, ptr %a248 + store %S.ast.Type %t265, ptr %a266 + call void @finch.drop.S_ast_Type(ptr %a266) + br label %endif7224 +endif7224: + %t267 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t268, ptr %a269 + store { ptr, i64, i64 } { ptr @.str.4632, i64 3, i64 0 }, ptr %a270 + %t271 = call i32 @finch_str_eq(ptr %a269, ptr %a270) + %t272 = icmp ne i32 %t271, 0 + br label %logic.from7227 +logic.from7227: + br i1 %t272, label %logic.rhs7228, label %logic.end7229 +logic.rhs7228: + %t273 = load i1, ptr %a4 + br label %logic.rend7230 +logic.rend7230: + br label %logic.end7229 +logic.end7229: + %t274 = phi i1 [ false, %logic.from7227 ], [ %t273, %logic.rend7230 ] + br i1 %t274, label %then7231, label %endif7233 +then7231: + %t275 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t276 = load i1, ptr %t275 + %t277 = xor i1 %t276, true + br i1 %t277, label %then7234, label %endif7236 +then7234: + %t278 = load ptr, ptr %a1 + %t279 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t278, %S.ast.Node %t279, { ptr, i64, i64 } { ptr @.str.4633, i64 44, i64 0 }) + br label %endif7236 +endif7236: + %t280 = load ptr, ptr %a1 + %t281 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t282 = getelementptr inbounds %S.gen.Place, ptr %t281, i32 0, i32 0 + %t283 = load { ptr, i64, i64 }, ptr %t282 + store { ptr, i64, i64 } { ptr @.str.4634, i64 29, i64 0 }, ptr %a285 + store { ptr, i64, i64 } %t283, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + %t287 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t287, ptr %a289 + store { ptr, i64, i64 } { ptr @.str.4635, i64 1, i64 0 }, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t287, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + call void @finch.gen.emit(ptr %t280, { ptr, i64, i64 } %t292) + store { ptr, i64, i64 } %t292, ptr %a293 + call void @finch_str_drop(ptr %a293) + br label %endif7233 +endif7233: + %t294 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t295 = getelementptr inbounds %S.gen.Val, ptr %t294, i32 0, i32 0 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_copy(ptr %a298, ptr %a297) + %t299 = load { ptr, i64, i64 }, ptr %a298 + store { ptr, i64, i64 } %t299, ptr %a300 + %t301 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t302 = load i1, ptr %t301 + br i1 %t302, label %then7237, label %endif7239 +then7237: + %t303 = load ptr, ptr %a1 + %t304 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t305 = getelementptr inbounds %S.gen.Place, ptr %t304, i32 0, i32 0 + %t306 = load { ptr, i64, i64 }, ptr %t305 + %t307 = call { ptr, i64, i64 } @finch.gen.load(ptr %t303, { ptr, i64, i64 } { ptr @.str.4636, i64 17, i64 0 }, { ptr, i64, i64 } %t306) + %t308 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } %t307, ptr %a300 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif7239 +endif7239: + %t310 = load ptr, ptr %a1 + %t311 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.4637, i64 31, i64 0 }, ptr %a313 + store { ptr, i64, i64 } %t311, ptr %a314 + call void @finch_str_concat(ptr %a312, ptr %a313, ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a312 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.4638, i64 3, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + %t321 = call { ptr, i64, i64 } @finch.gen.op(ptr %t310, { ptr, i64, i64 } %t320) + store { ptr, i64, i64 } %t320, ptr %a322 + call void @finch_str_drop(ptr %a322) + store { ptr, i64, i64 } %t321, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = load { ptr, i64, i64 }, ptr %a60 + %t326 = load { ptr, i64, i64 }, ptr %a323 + %t327 = load %S.ast.Node, ptr %a2 + call void @finch.gen.boundsCheck(ptr %t324, { ptr, i64, i64 } %t325, { ptr, i64, i64 } %t326, %S.ast.Node %t327) + %t328 = load ptr, ptr %a1 + %t329 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.4639, i64 31, i64 0 }, ptr %a331 + store { ptr, i64, i64 } %t329, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + %t333 = load { ptr, i64, i64 }, ptr %a330 + store { ptr, i64, i64 } %t333, ptr %a335 + store { ptr, i64, i64 } { ptr @.str.4640, i64 3, i64 0 }, ptr %a336 + call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336) + store { ptr, i64, i64 } %t333, ptr %a337 + call void @finch_str_drop(ptr %a337) + %t338 = load { ptr, i64, i64 }, ptr %a334 + %t339 = call { ptr, i64, i64 } @finch.gen.op(ptr %t328, { ptr, i64, i64 } %t338) + store { ptr, i64, i64 } %t338, ptr %a340 + call void @finch_str_drop(ptr %a340) + store { ptr, i64, i64 } %t339, ptr %a341 + %t342 = load ptr, ptr %a1 + %t343 = load ptr, ptr %a1 + %t344 = load %S.ast.Type, ptr %a248 + %t345 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t343, %S.ast.Type %t344) + store { ptr, i64, i64 } { ptr @.str.4641, i64 23, i64 0 }, ptr %a347 + store { ptr, i64, i64 } %t345, ptr %a348 + call void @finch_str_concat(ptr %a346, ptr %a347, ptr %a348) + store { ptr, i64, i64 } %t345, ptr %a349 + call void @finch_str_drop(ptr %a349) + %t350 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t350, ptr %a352 + store { ptr, i64, i64 } { ptr @.str.4642, i64 6, i64 0 }, ptr %a353 + call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) + store { ptr, i64, i64 } %t350, ptr %a354 + call void @finch_str_drop(ptr %a354) + %t355 = load { ptr, i64, i64 }, ptr %a351 + %t356 = load { ptr, i64, i64 }, ptr %a341 + store { ptr, i64, i64 } %t355, ptr %a358 + store { ptr, i64, i64 } %t356, ptr %a359 + call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) + store { ptr, i64, i64 } %t355, ptr %a360 + call void @finch_str_drop(ptr %a360) + %t361 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t361, ptr %a363 + store { ptr, i64, i64 } { ptr @.str.4643, i64 6, i64 0 }, ptr %a364 + call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) + store { ptr, i64, i64 } %t361, ptr %a365 + call void @finch_str_drop(ptr %a365) + %t366 = load { ptr, i64, i64 }, ptr %a362 + %t367 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t366, ptr %a369 + store { ptr, i64, i64 } %t367, ptr %a370 + call void @finch_str_concat(ptr %a368, ptr %a369, ptr %a370) + store { ptr, i64, i64 } %t366, ptr %a371 + call void @finch_str_drop(ptr %a371) + %t372 = load { ptr, i64, i64 }, ptr %a368 + %t373 = call { ptr, i64, i64 } @finch.gen.op(ptr %t342, { ptr, i64, i64 } %t372) + store { ptr, i64, i64 } %t372, ptr %a374 + call void @finch_str_drop(ptr %a374) + store { ptr, i64, i64 } %t373, ptr %a375 + %t376 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t377 = load i1, ptr %t376 + br i1 %t377, label %then7240, label %endif7242 +then7240: + %t378 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t379 = load { ptr, i64, i64 }, ptr %a375 + store { ptr, i64, i64 } %t379, ptr %a380 + call void @finch_str_copy(ptr %a381, ptr %a380) + %t382 = load { ptr, i64, i64 }, ptr %a381 + %t383 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t382, 0 + %t384 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t384, ptr %a385 + call void @finch.copy.S_ast_Type(ptr %a386, ptr %a385) + %t387 = load %S.ast.Type, ptr %a386 + %t388 = insertvalue %S.gen.Place %t383, %S.ast.Type %t387, 1 + %t389 = insertvalue %S.gen.Ref %t378, %S.gen.Place %t388, 1 + call void @finch_str_drop(ptr %a375) + call void @finch_str_drop(ptr %a341) + call void @finch_str_drop(ptr %a323) + call void @finch_str_drop(ptr %a300) + call void @finch.drop.S_ast_Type(ptr %a248) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t389 +endif7242: + %t390 = load ptr, ptr %a1 + %t391 = load ptr, ptr %a1 + %t392 = load %S.ast.Type, ptr %a248 + %t393 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t391, %S.ast.Type %t392) + %t394 = load { ptr, i64, i64 }, ptr %a375 + %t395 = call { ptr, i64, i64 } @finch.gen.load(ptr %t390, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t394) + store { ptr, i64, i64 } %t393, ptr %a396 + call void @finch_str_drop(ptr %a396) + store { ptr, i64, i64 } %t395, ptr %a397 + %t398 = load { ptr, i64, i64 }, ptr %a397 + store { ptr, i64, i64 } %t398, ptr %a399 + call void @finch_str_copy(ptr %a400, ptr %a399) + %t401 = load { ptr, i64, i64 }, ptr %a400 + %t402 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t401, 0 + %t403 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t403, ptr %a404 + call void @finch.copy.S_ast_Type(ptr %a405, ptr %a404) + %t406 = load %S.ast.Type, ptr %a405 + %t407 = insertvalue %S.gen.Val %t402, %S.ast.Type %t406, 1 + store %S.gen.Val %t407, ptr %a408 + %t409 = load ptr, ptr %a1 + %t410 = load %S.ast.Type, ptr %a248 + %t411 = call i1 @finch.gen.owning(ptr %t409, %S.ast.Type %t410) + br label %logic.from7243 +logic.from7243: + br i1 %t411, label %logic.rhs7244, label %logic.end7245 +logic.rhs7244: + %t412 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t413 = getelementptr inbounds %S.gen.Val, ptr %t412, i32 0, i32 2 + %t414 = load i1, ptr %t413 + br label %logic.rend7246 +logic.rend7246: + br label %logic.end7245 +logic.end7245: + %t415 = phi i1 [ false, %logic.from7243 ], [ %t414, %logic.rend7246 ] + br i1 %t415, label %then7247, label %endif7249 +then7247: + %t416 = load ptr, ptr %a1 + %t417 = load { ptr, i64, i64 }, ptr %a397 + %t418 = load %S.ast.Type, ptr %a248 + %t419 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t416, { ptr, i64, i64 } %t417, %S.ast.Type %t418) + %t420 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t419, 0 + %t421 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t421, ptr %a422 + call void @finch.copy.S_ast_Type(ptr %a423, ptr %a422) + %t424 = load %S.ast.Type, ptr %a423 + %t425 = insertvalue %S.gen.Val %t420, %S.ast.Type %t424, 1 + %t426 = insertvalue %S.gen.Val %t425, i1 true, 2 + %t427 = load %S.gen.Val, ptr %a408 + store %S.gen.Val %t426, ptr %a408 + store %S.gen.Val %t427, ptr %a428 + call void @finch.drop.S_gen_Val(ptr %a428) + br label %endif7249 +endif7249: + %t429 = load ptr, ptr %a1 + %t430 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t431 = load %S.gen.Val, ptr %t430 + call void @finch.gen.release(ptr %t429, %S.gen.Val %t431) + %t432 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t433 = load %S.gen.Val, ptr %a408 + store %S.gen.Val %t433, ptr %a434 + call void @finch.copy.S_gen_Val(ptr %a435, ptr %a434) + %t436 = load %S.gen.Val, ptr %a435 + %t437 = insertvalue %S.gen.Ref %t432, %S.gen.Val %t436, 2 + call void @finch.drop.S_gen_Val(ptr %a408) + call void @finch_str_drop(ptr %a397) + call void @finch_str_drop(ptr %a375) + call void @finch_str_drop(ptr %a341) + call void @finch_str_drop(ptr %a323) + call void @finch_str_drop(ptr %a300) + call void @finch.drop.S_ast_Type(ptr %a248) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t437 +} + +define internal void @finch.gen.checkArgs(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca i64, align 16 + %a13 = alloca i64, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load i64, ptr %a3 + %t10 = sub i64 %t8, %t9 + store i64 %t10, ptr %a11 + %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + store i64 0, ptr %a13 + br label %each.cond7250 +each.cond7250: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = load i64, ptr %a13 + %t17 = icmp slt i64 %t16, %t15 + br i1 %t17, label %each.body7251, label %each.end7253 +each.body7251: + %t18 = load ptr, ptr %t12 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = icmp sgt i64 %t23, 0 + br i1 %t24, label %then7254, label %endif7256 +then7254: + %t25 = load ptr, ptr %a1 + %t26 = load %S.ast.Node, ptr %a2 + %t27 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.4644, i64 17, i64 0 }, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t31, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.4645, i64 36, i64 0 }, ptr %a34 + call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) + store { ptr, i64, i64 } %t31, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a32 + call void @finch.gen.fail(ptr %t25, %S.ast.Node %t26, { ptr, i64, i64 } %t36) + store { ptr, i64, i64 } %t36, ptr %a37 + call void @finch_str_drop(ptr %a37) + br label %endif7256 +endif7256: + br label %each.step7252 +each.step7252: + %t38 = load i64, ptr %a13 + %t39 = add i64 %t38, 1 + store i64 %t39, ptr %a13 + br label %each.cond7250 +each.end7253: + %t40 = load i64, ptr %a11 + %t41 = load i64, ptr %a4 + %t42 = icmp ne i64 %t40, %t41 + br i1 %t42, label %then7257, label %endif7259 +then7257: + %t43 = load ptr, ptr %a1 + %t44 = load %S.ast.Node, ptr %a2 + %t45 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4646, i64 1, i64 0 }, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.4647, i64 8, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + %t55 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a56, i64 %t55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a59 + store { ptr, i64, i64 } %t57, ptr %a60 + call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) + store { ptr, i64, i64 } %t54, ptr %a61 + call void @finch_str_drop(ptr %a61) + store { ptr, i64, i64 } %t57, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a58 + store { ptr, i64, i64 } %t63, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.4648, i64 22, i64 0 }, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t63, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a64 + %t69 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a70, i64 %t69) + %t71 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a73 + store { ptr, i64, i64 } %t71, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t68, ptr %a75 + call void @finch_str_drop(ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.fail(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t77) + store { ptr, i64, i64 } %t77, ptr %a78 + call void @finch_str_drop(ptr %a78) + br label %endif7259 +endif7259: + ret void +} + +define internal %S.gen.Val @finch.gen.strArg(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca %S.gen.Val, align 16 + %a13 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load ptr, ptr %a1 + %t6 = load %S.ast.Node, ptr %a2 + %t7 = call %S.gen.Val @finch.gen.expr(ptr %t5, %S.ast.Node %t6) + %t8 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4649, i64 3, i64 0 }) + %t9 = load %S.ast.Node, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %a3 + %t11 = call %S.gen.Val @finch.gen.coerce(ptr %t4, %S.gen.Val %t7, %S.ast.Type %t8, %S.ast.Node %t9, { ptr, i64, i64 } %t10) + store %S.gen.Val %t7, ptr %a12 + call void @finch.drop.S_gen_Val(ptr %a12) + store %S.ast.Type %t8, ptr %a13 + call void @finch.drop.S_ast_Type(ptr %a13) + ret %S.gen.Val %t11 +} + +define internal { ptr, i64, i64 } @finch.gen.strOut(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t2, { ptr, i64, i64 } { ptr @.str.4650, i64 17, i64 0 }) + ret { ptr, i64, i64 } %t3 +} + +define internal { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca i64, align 16 + %a36 = alloca i64, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.4651, i64 3, i64 0 }, ptr %a4 + %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) + %t6 = icmp ne i32 %t5, 0 + br i1 %t6, label %then7260, label %endif7262 +then7260: + ret { ptr, i64, i64 } { ptr @.str.4652, i64 3, i64 0 } +endif7262: + %t7 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4653, i64 3, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then7263, label %endif7265 +then7263: + ret { ptr, i64, i64 } { ptr @.str.4654, i64 5, i64 0 } +endif7265: + %t12 = mul i64 13, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t13 = call ptr @finch_alloc(i64 %t12) + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 0 + store { ptr, i64, i64 } { ptr @.str.4655, i64 3, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 1 + store { ptr, i64, i64 } { ptr @.str.4656, i64 5, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 2 + store { ptr, i64, i64 } { ptr @.str.4657, i64 4, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 3 + store { ptr, i64, i64 } { ptr @.str.4658, i64 4, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 4 + store { ptr, i64, i64 } { ptr @.str.4659, i64 2, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 5 + store { ptr, i64, i64 } { ptr @.str.4660, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 6 + store { ptr, i64, i64 } { ptr @.str.4661, i64 3, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 7 + store { ptr, i64, i64 } { ptr @.str.4662, i64 2, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 8 + store { ptr, i64, i64 } { ptr @.str.4663, i64 3, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 9 + store { ptr, i64, i64 } { ptr @.str.4664, i64 3, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 10 + store { ptr, i64, i64 } { ptr @.str.4665, i64 3, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 11 + store { ptr, i64, i64 } { ptr @.str.4666, i64 3, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 12 + store { ptr, i64, i64 } { ptr @.str.4667, i64 3, i64 0 }, ptr %t26 + %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t13, 0 + %t28 = insertvalue { ptr, i64, i64 } %t27, i64 13, 1 + %t29 = insertvalue { ptr, i64, i64 } %t28, i64 13, 2 + store { ptr, i64, i64 } %t29, ptr %a30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a33 + %t34 = load i64, ptr %t31 + %t35 = load ptr, ptr %a30 + store i64 0, ptr %a36 + br label %find.cond7266 +find.cond7266: + %t37 = load i64, ptr %a36 + %t38 = icmp slt i64 %t37, %t34 + br i1 %t38, label %find.body7267, label %find.end7270 +find.body7267: + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t37 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } %t32, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %find.hit7268, label %find.next7269 +find.hit7268: + store i64 %t37, ptr %a33 + br label %find.end7270 +find.next7269: + %t45 = add i64 %t37, 1 + store i64 %t45, ptr %a36 + br label %find.cond7266 +find.end7270: + %t46 = load i64, ptr %a33 + %t47 = icmp sge i64 %t46, 0 + br i1 %t47, label %then7271, label %endif7273 +then7271: + %t48 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t48, ptr %a49 + call void @finch_str_copy(ptr %a50, ptr %a49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } %t51 +endif7273: + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } { ptr @.str.4668, i64 0, i64 0 } +} + +define internal %S.gen.Val @finch.gen.convert(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.gen.Val, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca %S.ast.Type, align 16 + %a139 = alloca %S.ast.Type, align 16 + %a140 = alloca %S.ast.Type, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca %S.ast.Type, align 16 + %a226 = alloca %S.ast.Type, align 16 + %a227 = alloca %S.ast.Type, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca %S.ast.Type, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a309 = alloca %S.ast.Type, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca %S.ast.Type, align 16 + %a365 = alloca %S.ast.Type, align 16 + %a366 = alloca %S.ast.Type, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca %S.ast.Type, align 16 + %a387 = alloca %S.ast.Type, align 16 + %a388 = alloca %S.ast.Type, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca %S.ast.Type, align 16 + %a418 = alloca %S.ast.Type, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca %S.ast.Type, align 16 + %a453 = alloca %S.ast.Type, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca %S.ast.Type, align 16 + %a512 = alloca %S.ast.Type, align 16 + %a527 = alloca %S.ast.Type, align 16 + %a528 = alloca %S.ast.Type, align 16 + %a541 = alloca %S.ast.Type, align 16 + %a542 = alloca %S.ast.Type, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca %S.ast.Type, align 16 + %a585 = alloca %S.ast.Type, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a615 = alloca %S.ast.Type, align 16 + %a616 = alloca %S.ast.Type, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca %S.ast.Type, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a644 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca %S.ast.Type, align 16 + %a651 = alloca %S.ast.Type, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca %S.ast.Type, align 16 + %a689 = alloca %S.ast.Type, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a731 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a737 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Node, ptr %a2 + %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 0, i64 1, { ptr, i64, i64 } %t7) + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t10 = load { ptr, i64, i64 }, ptr %t9 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 0, %t11 + br i1 %t12, label %range7274, label %inrange7275 +range7274: + call void @finch_panic_index(ptr @.str.4669, i64 4116, i64 0, i64 %t11) + unreachable +inrange7275: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.ast.Node, ptr %t13, i64 0 + %t15 = load %S.ast.Node, ptr %t14 + %t16 = call %S.gen.Val @finch.gen.expr(ptr %t8, %S.ast.Node %t15) + store %S.gen.Val %t16, ptr %a17 + %t18 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 1 + %t19 = load %S.ast.Type, ptr %t18 + store %S.ast.Type %t19, ptr %a20 + call void @finch.copy.S_ast_Type(ptr %a21, ptr %a20) + %t22 = load %S.ast.Type, ptr %a21 + store %S.ast.Type %t22, ptr %a23 + %t24 = load %S.ast.Type, ptr %a23 + %t25 = load %S.ast.Type, ptr %a3 + %t26 = call i1 @finch.ast.same(%S.ast.Type %t24, %S.ast.Type %t25) + br i1 %t26, label %then7276, label %endif7278 +then7276: + %t27 = load %S.gen.Val, ptr %a17 + call void @finch.drop.S_ast_Type(ptr %a23) + ret %S.gen.Val %t27 +endif7278: + %t28 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.4670, i64 3, i64 0 }, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br label %logic.from7279 +logic.from7279: + br i1 %t33, label %logic.rhs7280, label %logic.end7281 +logic.rhs7280: + %t34 = load %S.ast.Type, ptr %a3 + %t35 = call i1 @finch.gen.isNumber(%S.ast.Type %t34) + br label %logic.rend7282 +logic.rend7282: + br label %logic.end7281 +logic.end7281: + %t36 = phi i1 [ false, %logic.from7279 ], [ %t35, %logic.rend7282 ] + br label %logic.from7283 +logic.from7283: + br i1 %t36, label %logic.rhs7284, label %logic.end7285 +logic.rhs7284: + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic7286, label %ok7287 +panic7286: + call void @finch_panic(ptr @.str.4671, i64 4121, ptr @.str.4672) + unreachable +ok7287: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 41 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = load %S.ast.Node, ptr %a2 + %t42 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t41) + store { ptr, i64, i64 } %t40, ptr %a43 + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + store { ptr, i64, i64 } %t42, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %logic.rend7288 +logic.rend7288: + br label %logic.end7285 +logic.end7285: + %t48 = phi i1 [ false, %logic.from7283 ], [ %t46, %logic.rend7288 ] + br i1 %t48, label %then7289, label %endif7291 +then7289: + %t49 = load ptr, ptr %a1 + %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.4673, i64 17, i64 0 }) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.4674, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4675, i64 15, i64 0 }, { ptr, i64, i64 } %t53) + %t54 = load %S.ast.Type, ptr %a3 + %t55 = call i1 @finch.gen.isInt(%S.ast.Type %t54) + br i1 %t55, label %then7292, label %endif7294 +then7292: + %t56 = load ptr, ptr %a1 + %t57 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t56, { ptr, i64, i64 } { ptr @.str.4676, i64 3, i64 0 }) + store { ptr, i64, i64 } %t57, ptr %a58 + %t59 = load ptr, ptr %a1 + %t60 = load { ptr, i64, i64 }, ptr %a58 + call void @finch.gen.store(ptr %t59, { ptr, i64, i64 } { ptr @.str.4677, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.4678, i64 1, i64 0 }, { ptr, i64, i64 } %t60) + %t61 = load ptr, ptr %a1 + %t62 = load ptr, ptr %a1 + %t63 = load %S.gen.Val, ptr %a17 + %t64 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t62, %S.gen.Val %t63) + store { ptr, i64, i64 } { ptr @.str.4679, i64 32, i64 0 }, ptr %a66 + store { ptr, i64, i64 } %t64, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.4680, i64 6, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load { ptr, i64, i64 }, ptr %a58 + store { ptr, i64, i64 } %t74, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t74, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.4681, i64 6, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t85, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.4682, i64 1, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + %t97 = call { ptr, i64, i64 } @finch.gen.op(ptr %t61, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a98 + call void @finch_str_drop(ptr %a98) + store { ptr, i64, i64 } %t97, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.4683, i64 12, i64 0 }, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.4684, i64 3, i64 0 }, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t105, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t110) + store { ptr, i64, i64 } %t110, ptr %a112 + call void @finch_str_drop(ptr %a112) + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic7295, label %ok7296 +panic7295: + call void @finch_panic(ptr @.str.4685, i64 4129, ptr @.str.4686) + unreachable +ok7296: + %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 42 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t111, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load ptr, ptr %a1 + %t119 = load { ptr, i64, i64 }, ptr %a51 + %t120 = call { ptr, i64, i64 } @finch.gen.load(ptr %t118, { ptr, i64, i64 } { ptr @.str.4687, i64 17, i64 0 }, { ptr, i64, i64 } %t119) + %t121 = load ptr, ptr %a1 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic7297, label %ok7298 +panic7297: + call void @finch_panic(ptr @.str.4688, i64 4130, ptr @.str.4689) + unreachable +ok7298: + %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 43 + %t124 = load { ptr, i64, i64 }, ptr %t123 + store { ptr, i64, i64 } %t120, ptr %t123 + store { ptr, i64, i64 } %t124, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load ptr, ptr %a1 + %t127 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t126, %S.gen.Val %t127) + %t128 = load ptr, ptr %a1 + %t129 = load ptr, ptr %a1 + %t130 = load { ptr, i64, i64 }, ptr %a58 + %t131 = call { ptr, i64, i64 } @finch.gen.load(ptr %t129, { ptr, i64, i64 } { ptr @.str.4690, i64 3, i64 0 }, { ptr, i64, i64 } %t130) + %t132 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4691, i64 3, i64 0 }) + %t133 = load %S.ast.Type, ptr %a3 + %t134 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t128, { ptr, i64, i64 } %t131, %S.ast.Type %t132, %S.ast.Type %t133) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + store %S.ast.Type %t132, ptr %a136 + call void @finch.drop.S_ast_Type(ptr %a136) + %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t134, 0 + %t138 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t138, ptr %a139 + call void @finch.copy.S_ast_Type(ptr %a140, ptr %a139) + %t141 = load %S.ast.Type, ptr %a140 + %t142 = insertvalue %S.gen.Val %t137, %S.ast.Type %t141, 1 + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a58) + call void @finch_str_drop(ptr %a51) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t142 +endif7294: + %t143 = load ptr, ptr %a1 + %t144 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t143, { ptr, i64, i64 } { ptr @.str.4692, i64 6, i64 0 }) + store { ptr, i64, i64 } %t144, ptr %a145 + %t146 = load ptr, ptr %a1 + %t147 = load { ptr, i64, i64 }, ptr %a145 + call void @finch.gen.store(ptr %t146, { ptr, i64, i64 } { ptr @.str.4693, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.4694, i64 3, i64 0 }, { ptr, i64, i64 } %t147) + %t148 = load ptr, ptr %a1 + %t149 = load ptr, ptr %a1 + %t150 = load %S.gen.Val, ptr %a17 + %t151 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t149, %S.gen.Val %t150) + store { ptr, i64, i64 } { ptr @.str.4695, i64 34, i64 0 }, ptr %a153 + store { ptr, i64, i64 } %t151, ptr %a154 + call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154) + store { ptr, i64, i64 } %t151, ptr %a155 + call void @finch_str_drop(ptr %a155) + %t156 = load { ptr, i64, i64 }, ptr %a152 + store { ptr, i64, i64 } %t156, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.4696, i64 6, i64 0 }, ptr %a159 + call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) + store { ptr, i64, i64 } %t156, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a157 + %t162 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t161, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t161, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t167, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4697, i64 6, i64 0 }, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t167, ptr %a171 + call void @finch_str_drop(ptr %a171) + %t172 = load { ptr, i64, i64 }, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t172, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t172, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.4698, i64 1, i64 0 }, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t178, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t148, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + store { ptr, i64, i64 } %t184, ptr %a186 + %t187 = load ptr, ptr %a1 + %t188 = load { ptr, i64, i64 }, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.4699, i64 12, i64 0 }, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a189 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.4700, i64 3, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load { ptr, i64, i64 }, ptr %a193 + %t198 = call { ptr, i64, i64 } @finch.gen.op(ptr %t187, { ptr, i64, i64 } %t197) + store { ptr, i64, i64 } %t197, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load ptr, ptr %a1 + %t201 = icmp eq ptr %t200, null + br i1 %t201, label %panic7299, label %ok7300 +panic7299: + call void @finch_panic(ptr @.str.4701, i64 4137, ptr @.str.4702) + unreachable +ok7300: + %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 42 + %t203 = load { ptr, i64, i64 }, ptr %t202 + store { ptr, i64, i64 } %t198, ptr %t202 + store { ptr, i64, i64 } %t203, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load ptr, ptr %a1 + %t206 = load { ptr, i64, i64 }, ptr %a51 + %t207 = call { ptr, i64, i64 } @finch.gen.load(ptr %t205, { ptr, i64, i64 } { ptr @.str.4703, i64 17, i64 0 }, { ptr, i64, i64 } %t206) + %t208 = load ptr, ptr %a1 + %t209 = icmp eq ptr %t208, null + br i1 %t209, label %panic7301, label %ok7302 +panic7301: + call void @finch_panic(ptr @.str.4704, i64 4138, ptr @.str.4705) + unreachable +ok7302: + %t210 = getelementptr inbounds %S.gen.Gen, ptr %t208, i32 0, i32 43 + %t211 = load { ptr, i64, i64 }, ptr %t210 + store { ptr, i64, i64 } %t207, ptr %t210 + store { ptr, i64, i64 } %t211, ptr %a212 + call void @finch_str_drop(ptr %a212) + %t213 = load ptr, ptr %a1 + %t214 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t213, %S.gen.Val %t214) + %t215 = load ptr, ptr %a1 + %t216 = load ptr, ptr %a1 + %t217 = load { ptr, i64, i64 }, ptr %a145 + %t218 = call { ptr, i64, i64 } @finch.gen.load(ptr %t216, { ptr, i64, i64 } { ptr @.str.4706, i64 6, i64 0 }, { ptr, i64, i64 } %t217) + %t219 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4707, i64 5, i64 0 }) + %t220 = load %S.ast.Type, ptr %a3 + %t221 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t215, { ptr, i64, i64 } %t218, %S.ast.Type %t219, %S.ast.Type %t220) + store { ptr, i64, i64 } %t218, ptr %a222 + call void @finch_str_drop(ptr %a222) + store %S.ast.Type %t219, ptr %a223 + call void @finch.drop.S_ast_Type(ptr %a223) + %t224 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t221, 0 + %t225 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t225, ptr %a226 + call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) + %t228 = load %S.ast.Type, ptr %a227 + %t229 = insertvalue %S.gen.Val %t224, %S.ast.Type %t228, 1 + call void @finch_str_drop(ptr %a186) + call void @finch_str_drop(ptr %a145) + call void @finch_str_drop(ptr %a51) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t229 +endif7291: + %t230 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t231 = load { ptr, i64, i64 }, ptr %t230 + store { ptr, i64, i64 } %t231, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.4708, i64 3, i64 0 }, ptr %a233 + %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) + %t235 = icmp ne i32 %t234, 0 + br label %logic.from7303 +logic.from7303: + br i1 %t235, label %logic.rhs7304, label %logic.end7305 +logic.rhs7304: + %t236 = load %S.ast.Type, ptr %a3 + %t237 = call i1 @finch.gen.isNumber(%S.ast.Type %t236) + br label %logic.rend7306 +logic.rend7306: + br label %logic.end7305 +logic.end7305: + %t238 = phi i1 [ false, %logic.from7303 ], [ %t237, %logic.rend7306 ] + br i1 %t238, label %then7307, label %endif7309 +then7307: + %t239 = load ptr, ptr %a1 + %t240 = load ptr, ptr %a1 + %t241 = icmp eq ptr %t240, null + br i1 %t241, label %panic7310, label %ok7311 +panic7310: + call void @finch_panic(ptr @.str.4709, i64 4143, ptr @.str.4710) + unreachable +ok7311: + %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 1 + %t243 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t244 = load i64, ptr %t243 + %t245 = load { ptr, i64, i64 }, ptr %t242 + %t246 = extractvalue { ptr, i64, i64 } %t245, 1 + %t247 = icmp uge i64 %t244, %t246 + br i1 %t247, label %range7312, label %inrange7313 +range7312: + call void @finch_panic_index(ptr @.str.4711, i64 4143, i64 %t244, i64 %t246) + unreachable +inrange7313: + %t248 = extractvalue { ptr, i64, i64 } %t245, 0 + %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t244 + %t250 = load { ptr, i64, i64 }, ptr %t249 + %t251 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t239, { ptr, i64, i64 } %t250) + store { ptr, i64, i64 } %t251, ptr %a252 + %t253 = load %S.ast.Type, ptr %a3 + %t254 = call i1 @finch.gen.isInt(%S.ast.Type %t253) + br i1 %t254, label %then7314, label %endif7316 +then7314: + %t255 = load ptr, ptr %a1 + %t256 = load ptr, ptr %a1 + %t257 = load %S.gen.Val, ptr %a17 + %t258 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t256, %S.gen.Val %t257) + store { ptr, i64, i64 } { ptr @.str.4712, i64 31, i64 0 }, ptr %a260 + store { ptr, i64, i64 } %t258, ptr %a261 + call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) + store { ptr, i64, i64 } %t258, ptr %a262 + call void @finch_str_drop(ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a259 + store { ptr, i64, i64 } %t263, ptr %a265 + store { ptr, i64, i64 } { ptr @.str.4713, i64 6, i64 0 }, ptr %a266 + call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) + store { ptr, i64, i64 } %t263, ptr %a267 + call void @finch_str_drop(ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a264 + %t269 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t268, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t268, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.4714, i64 6, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + store { ptr, i64, i64 } %t274, ptr %a278 + call void @finch_str_drop(ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a275 + %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t281 = load i64, ptr %t280 + call void @finch_str_from_int(ptr %a282, i64 %t281) + %t283 = load { ptr, i64, i64 }, ptr %a282 + store { ptr, i64, i64 } %t279, ptr %a285 + store { ptr, i64, i64 } %t283, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t279, ptr %a287 + call void @finch_str_drop(ptr %a287) + store { ptr, i64, i64 } %t283, ptr %a288 + call void @finch_str_drop(ptr %a288) + %t289 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t289, ptr %a291 + store { ptr, i64, i64 } { ptr @.str.4715, i64 1, i64 0 }, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + store { ptr, i64, i64 } %t289, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load { ptr, i64, i64 }, ptr %a290 + %t295 = call { ptr, i64, i64 } @finch.gen.op(ptr %t255, { ptr, i64, i64 } %t294) + store { ptr, i64, i64 } %t294, ptr %a296 + call void @finch_str_drop(ptr %a296) + store { ptr, i64, i64 } %t295, ptr %a297 + %t298 = load ptr, ptr %a1 + %t299 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t298, %S.gen.Val %t299) + %t300 = load ptr, ptr %a1 + %t301 = load { ptr, i64, i64 }, ptr %a297 + %t302 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4716, i64 3, i64 0 }) + %t303 = load %S.ast.Type, ptr %a3 + %t304 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t300, { ptr, i64, i64 } %t301, %S.ast.Type %t302, %S.ast.Type %t303) + store %S.ast.Type %t302, ptr %a305 + call void @finch.drop.S_ast_Type(ptr %a305) + %t306 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0 + %t307 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t307, ptr %a308 + call void @finch.copy.S_ast_Type(ptr %a309, ptr %a308) + %t310 = load %S.ast.Type, ptr %a309 + %t311 = insertvalue %S.gen.Val %t306, %S.ast.Type %t310, 1 + call void @finch_str_drop(ptr %a297) + call void @finch_str_drop(ptr %a252) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t311 +endif7316: + %t312 = load ptr, ptr %a1 + %t313 = load ptr, ptr %a1 + %t314 = load %S.gen.Val, ptr %a17 + %t315 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t313, %S.gen.Val %t314) + store { ptr, i64, i64 } { ptr @.str.4717, i64 36, i64 0 }, ptr %a317 + store { ptr, i64, i64 } %t315, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + store { ptr, i64, i64 } %t320, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.4718, i64 6, i64 0 }, ptr %a323 + call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) + store { ptr, i64, i64 } %t320, ptr %a324 + call void @finch_str_drop(ptr %a324) + %t325 = load { ptr, i64, i64 }, ptr %a321 + %t326 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t325, ptr %a328 + store { ptr, i64, i64 } %t326, ptr %a329 + call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) + store { ptr, i64, i64 } %t325, ptr %a330 + call void @finch_str_drop(ptr %a330) + %t331 = load { ptr, i64, i64 }, ptr %a327 + store { ptr, i64, i64 } %t331, ptr %a333 + store { ptr, i64, i64 } { ptr @.str.4719, i64 6, i64 0 }, ptr %a334 + call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) + store { ptr, i64, i64 } %t331, ptr %a335 + call void @finch_str_drop(ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a332 + %t337 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t338 = load i64, ptr %t337 + call void @finch_str_from_int(ptr %a339, i64 %t338) + %t340 = load { ptr, i64, i64 }, ptr %a339 + store { ptr, i64, i64 } %t336, ptr %a342 + store { ptr, i64, i64 } %t340, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t336, ptr %a344 + call void @finch_str_drop(ptr %a344) + store { ptr, i64, i64 } %t340, ptr %a345 + call void @finch_str_drop(ptr %a345) + %t346 = load { ptr, i64, i64 }, ptr %a341 + store { ptr, i64, i64 } %t346, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.4720, i64 1, i64 0 }, ptr %a349 + call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) + store { ptr, i64, i64 } %t346, ptr %a350 + call void @finch_str_drop(ptr %a350) + %t351 = load { ptr, i64, i64 }, ptr %a347 + %t352 = call { ptr, i64, i64 } @finch.gen.op(ptr %t312, { ptr, i64, i64 } %t351) + store { ptr, i64, i64 } %t351, ptr %a353 + call void @finch_str_drop(ptr %a353) + store { ptr, i64, i64 } %t352, ptr %a354 + %t355 = load ptr, ptr %a1 + %t356 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t355, %S.gen.Val %t356) + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a354 + %t359 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4721, i64 5, i64 0 }) + %t360 = load %S.ast.Type, ptr %a3 + %t361 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359, %S.ast.Type %t360) + store %S.ast.Type %t359, ptr %a362 + call void @finch.drop.S_ast_Type(ptr %a362) + %t363 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t361, 0 + %t364 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t364, ptr %a365 + call void @finch.copy.S_ast_Type(ptr %a366, ptr %a365) + %t367 = load %S.ast.Type, ptr %a366 + %t368 = insertvalue %S.gen.Val %t363, %S.ast.Type %t367, 1 + call void @finch_str_drop(ptr %a354) + call void @finch_str_drop(ptr %a252) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t368 +endif7309: + %t369 = load %S.ast.Type, ptr %a3 + %t370 = call i1 @finch.gen.isInt(%S.ast.Type %t369) + br label %logic.from7317 +logic.from7317: + br i1 %t370, label %logic.rhs7318, label %logic.end7319 +logic.rhs7318: + %t371 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t372 = load { ptr, i64, i64 }, ptr %t371 + store { ptr, i64, i64 } %t372, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.4722, i64 4, i64 0 }, ptr %a374 + %t375 = call i32 @finch_str_eq(ptr %a373, ptr %a374) + %t376 = icmp ne i32 %t375, 0 + br label %logic.rend7320 +logic.rend7320: + br label %logic.end7319 +logic.end7319: + %t377 = phi i1 [ false, %logic.from7317 ], [ %t376, %logic.rend7320 ] + br i1 %t377, label %then7321, label %endif7323 +then7321: + %t378 = load ptr, ptr %a1 + %t379 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t380 = load { ptr, i64, i64 }, ptr %t379 + %t381 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4723, i64 3, i64 0 }) + %t382 = load %S.ast.Type, ptr %a3 + %t383 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t378, { ptr, i64, i64 } %t380, %S.ast.Type %t381, %S.ast.Type %t382) + store %S.ast.Type %t381, ptr %a384 + call void @finch.drop.S_ast_Type(ptr %a384) + %t385 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t383, 0 + %t386 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t386, ptr %a387 + call void @finch.copy.S_ast_Type(ptr %a388, ptr %a387) + %t389 = load %S.ast.Type, ptr %a388 + %t390 = insertvalue %S.gen.Val %t385, %S.ast.Type %t389, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t390 +endif7323: + %t391 = load %S.ast.Type, ptr %a3 + %t392 = call i1 @finch.gen.isInt(%S.ast.Type %t391) + br label %logic.from7324 +logic.from7324: + br i1 %t392, label %logic.end7326, label %logic.rhs7325 +logic.rhs7325: + %t393 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t394 = load { ptr, i64, i64 }, ptr %t393 + store { ptr, i64, i64 } %t394, ptr %a395 + store { ptr, i64, i64 } { ptr @.str.4724, i64 4, i64 0 }, ptr %a396 + %t397 = call i32 @finch_str_eq(ptr %a395, ptr %a396) + %t398 = icmp ne i32 %t397, 0 + br label %logic.rend7327 +logic.rend7327: + br label %logic.end7326 +logic.end7326: + %t399 = phi i1 [ true, %logic.from7324 ], [ %t398, %logic.rend7327 ] + br i1 %t399, label %then7328, label %endif7330 +then7328: + %t400 = load %S.ast.Type, ptr %a23 + %t401 = call i1 @finch.gen.isInt(%S.ast.Type %t400) + br label %logic.from7331 +logic.from7331: + br i1 %t401, label %logic.end7333, label %logic.rhs7332 +logic.rhs7332: + %t402 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t403 = load { ptr, i64, i64 }, ptr %t402 + store { ptr, i64, i64 } %t403, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.4725, i64 4, i64 0 }, ptr %a405 + %t406 = call i32 @finch_str_eq(ptr %a404, ptr %a405) + %t407 = icmp ne i32 %t406, 0 + br label %logic.rend7334 +logic.rend7334: + br label %logic.end7333 +logic.end7333: + %t408 = phi i1 [ true, %logic.from7331 ], [ %t407, %logic.rend7334 ] + br i1 %t408, label %then7335, label %endif7337 +then7335: + %t409 = load ptr, ptr %a1 + %t410 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t411 = load { ptr, i64, i64 }, ptr %t410 + %t412 = load %S.ast.Type, ptr %a23 + %t413 = load %S.ast.Type, ptr %a3 + %t414 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t409, { ptr, i64, i64 } %t411, %S.ast.Type %t412, %S.ast.Type %t413) + %t415 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t414, 0 + %t416 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t416, ptr %a417 + call void @finch.copy.S_ast_Type(ptr %a418, ptr %a417) + %t419 = load %S.ast.Type, ptr %a418 + %t420 = insertvalue %S.gen.Val %t415, %S.ast.Type %t419, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t420 +endif7337: + %t421 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t422 = load { ptr, i64, i64 }, ptr %t421 + store { ptr, i64, i64 } %t422, ptr %a423 + store { ptr, i64, i64 } { ptr @.str.4726, i64 4, i64 0 }, ptr %a424 + %t425 = call i32 @finch_str_eq(ptr %a423, ptr %a424) + %t426 = icmp ne i32 %t425, 0 + br i1 %t426, label %then7338, label %endif7340 +then7338: + %t427 = load ptr, ptr %a1 + %t428 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t429 = load { ptr, i64, i64 }, ptr %t428 + store { ptr, i64, i64 } { ptr @.str.4727, i64 8, i64 0 }, ptr %a431 + store { ptr, i64, i64 } %t429, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + %t433 = load { ptr, i64, i64 }, ptr %a430 + store { ptr, i64, i64 } %t433, ptr %a435 + store { ptr, i64, i64 } { ptr @.str.4728, i64 4, i64 0 }, ptr %a436 + call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) + store { ptr, i64, i64 } %t433, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a434 + %t439 = load ptr, ptr %a1 + %t440 = load %S.ast.Type, ptr %a3 + %t441 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t439, %S.ast.Type %t440) + store { ptr, i64, i64 } %t438, ptr %a443 + store { ptr, i64, i64 } %t441, ptr %a444 + call void @finch_str_concat(ptr %a442, ptr %a443, ptr %a444) + store { ptr, i64, i64 } %t438, ptr %a445 + call void @finch_str_drop(ptr %a445) + store { ptr, i64, i64 } %t441, ptr %a446 + call void @finch_str_drop(ptr %a446) + %t447 = load { ptr, i64, i64 }, ptr %a442 + %t448 = call { ptr, i64, i64 } @finch.gen.op(ptr %t427, { ptr, i64, i64 } %t447) + store { ptr, i64, i64 } %t447, ptr %a449 + call void @finch_str_drop(ptr %a449) + %t450 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t448, 0 + %t451 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t451, ptr %a452 + call void @finch.copy.S_ast_Type(ptr %a453, ptr %a452) + %t454 = load %S.ast.Type, ptr %a453 + %t455 = insertvalue %S.gen.Val %t450, %S.ast.Type %t454, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t455 +endif7340: + %t456 = load %S.ast.Type, ptr %a23 + %t457 = call i1 @finch.gen.isFloat(%S.ast.Type %t456) + br label %logic.from7341 +logic.from7341: + br i1 %t457, label %logic.rhs7342, label %logic.end7343 +logic.rhs7342: + %t458 = load %S.ast.Type, ptr %a3 + %t459 = call i1 @finch.gen.isInt(%S.ast.Type %t458) + br label %logic.rend7344 +logic.rend7344: + br label %logic.end7343 +logic.end7343: + %t460 = phi i1 [ false, %logic.from7341 ], [ %t459, %logic.rend7344 ] + br i1 %t460, label %then7345, label %endif7347 +then7345: + store { ptr, i64, i64 } { ptr @.str.4729, i64 6, i64 0 }, ptr %a461 + %t462 = load %S.ast.Type, ptr %a3 + %t463 = call i1 @finch.gen.isSigned(%S.ast.Type %t462) + br i1 %t463, label %then7348, label %endif7350 +then7348: + %t464 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } { ptr @.str.4730, i64 6, i64 0 }, ptr %a461 + store { ptr, i64, i64 } %t464, ptr %a465 + call void @finch_str_drop(ptr %a465) + br label %endif7350 +endif7350: + %t466 = load ptr, ptr %a1 + %t467 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } %t467, ptr %a469 + store { ptr, i64, i64 } { ptr @.str.4731, i64 1, i64 0 }, ptr %a470 + call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) + %t471 = load { ptr, i64, i64 }, ptr %a468 + %t472 = load ptr, ptr %a1 + %t473 = load %S.ast.Type, ptr %a23 + %t474 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t472, %S.ast.Type %t473) + store { ptr, i64, i64 } %t471, ptr %a476 + store { ptr, i64, i64 } %t474, ptr %a477 + call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) + store { ptr, i64, i64 } %t471, ptr %a478 + call void @finch_str_drop(ptr %a478) + store { ptr, i64, i64 } %t474, ptr %a479 + call void @finch_str_drop(ptr %a479) + %t480 = load { ptr, i64, i64 }, ptr %a475 + store { ptr, i64, i64 } %t480, ptr %a482 + store { ptr, i64, i64 } { ptr @.str.4732, i64 1, i64 0 }, ptr %a483 + call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) + store { ptr, i64, i64 } %t480, ptr %a484 + call void @finch_str_drop(ptr %a484) + %t485 = load { ptr, i64, i64 }, ptr %a481 + %t486 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t487 = load { ptr, i64, i64 }, ptr %t486 + store { ptr, i64, i64 } %t485, ptr %a489 + store { ptr, i64, i64 } %t487, ptr %a490 + call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) + store { ptr, i64, i64 } %t485, ptr %a491 + call void @finch_str_drop(ptr %a491) + %t492 = load { ptr, i64, i64 }, ptr %a488 + store { ptr, i64, i64 } %t492, ptr %a494 + store { ptr, i64, i64 } { ptr @.str.4733, i64 4, i64 0 }, ptr %a495 + call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) + store { ptr, i64, i64 } %t492, ptr %a496 + call void @finch_str_drop(ptr %a496) + %t497 = load { ptr, i64, i64 }, ptr %a493 + %t498 = load ptr, ptr %a1 + %t499 = load %S.ast.Type, ptr %a3 + %t500 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t498, %S.ast.Type %t499) + store { ptr, i64, i64 } %t497, ptr %a502 + store { ptr, i64, i64 } %t500, ptr %a503 + call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) + store { ptr, i64, i64 } %t497, ptr %a504 + call void @finch_str_drop(ptr %a504) + store { ptr, i64, i64 } %t500, ptr %a505 + call void @finch_str_drop(ptr %a505) + %t506 = load { ptr, i64, i64 }, ptr %a501 + %t507 = call { ptr, i64, i64 } @finch.gen.op(ptr %t466, { ptr, i64, i64 } %t506) + store { ptr, i64, i64 } %t506, ptr %a508 + call void @finch_str_drop(ptr %a508) + %t509 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t507, 0 + %t510 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t510, ptr %a511 + call void @finch.copy.S_ast_Type(ptr %a512, ptr %a511) + %t513 = load %S.ast.Type, ptr %a512 + %t514 = insertvalue %S.gen.Val %t509, %S.ast.Type %t513, 1 + call void @finch_str_drop(ptr %a461) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t514 +endif7347: + br label %endif7330 +endif7330: + %t515 = load %S.ast.Type, ptr %a3 + %t516 = call i1 @finch.gen.isFloat(%S.ast.Type %t515) + br i1 %t516, label %then7351, label %endif7353 +then7351: + %t517 = load %S.ast.Type, ptr %a23 + %t518 = call i1 @finch.gen.isInt(%S.ast.Type %t517) + br i1 %t518, label %then7354, label %endif7356 +then7354: + %t519 = load ptr, ptr %a1 + %t520 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t521 = load { ptr, i64, i64 }, ptr %t520 + %t522 = load %S.ast.Type, ptr %a23 + %t523 = load %S.ast.Type, ptr %a3 + %t524 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t519, { ptr, i64, i64 } %t521, %S.ast.Type %t522, %S.ast.Type %t523) + %t525 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t524, 0 + %t526 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t526, ptr %a527 + call void @finch.copy.S_ast_Type(ptr %a528, ptr %a527) + %t529 = load %S.ast.Type, ptr %a528 + %t530 = insertvalue %S.gen.Val %t525, %S.ast.Type %t529, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t530 +endif7356: + %t531 = load %S.ast.Type, ptr %a23 + %t532 = call i1 @finch.gen.isFloat(%S.ast.Type %t531) + br i1 %t532, label %then7357, label %endif7359 +then7357: + %t533 = load ptr, ptr %a1 + %t534 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t535 = load { ptr, i64, i64 }, ptr %t534 + %t536 = load %S.ast.Type, ptr %a23 + %t537 = load %S.ast.Type, ptr %a3 + %t538 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t533, { ptr, i64, i64 } %t535, %S.ast.Type %t536, %S.ast.Type %t537) + %t539 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t538, 0 + %t540 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t540, ptr %a541 + call void @finch.copy.S_ast_Type(ptr %a542, ptr %a541) + %t543 = load %S.ast.Type, ptr %a542 + %t544 = insertvalue %S.gen.Val %t539, %S.ast.Type %t543, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t544 +endif7359: + br label %endif7353 +endif7353: + %t545 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t546 = load { ptr, i64, i64 }, ptr %t545 + store { ptr, i64, i64 } %t546, ptr %a547 + store { ptr, i64, i64 } { ptr @.str.4734, i64 4, i64 0 }, ptr %a548 + %t549 = call i32 @finch_str_eq(ptr %a547, ptr %a548) + %t550 = icmp ne i32 %t549, 0 + br label %logic.from7360 +logic.from7360: + br i1 %t550, label %logic.rhs7361, label %logic.end7362 +logic.rhs7361: + %t551 = load %S.ast.Type, ptr %a23 + %t552 = call i1 @finch.gen.isInt(%S.ast.Type %t551) + br label %logic.rend7363 +logic.rend7363: + br label %logic.end7362 +logic.end7362: + %t553 = phi i1 [ false, %logic.from7360 ], [ %t552, %logic.rend7363 ] + br i1 %t553, label %then7364, label %endif7366 +then7364: + %t554 = load ptr, ptr %a1 + %t555 = load ptr, ptr %a1 + %t556 = load %S.ast.Type, ptr %a23 + %t557 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t555, %S.ast.Type %t556) + store { ptr, i64, i64 } { ptr @.str.4735, i64 8, i64 0 }, ptr %a559 + store { ptr, i64, i64 } %t557, ptr %a560 + call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) + store { ptr, i64, i64 } %t557, ptr %a561 + call void @finch_str_drop(ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a558 + store { ptr, i64, i64 } %t562, ptr %a564 + store { ptr, i64, i64 } { ptr @.str.4736, i64 1, i64 0 }, ptr %a565 + call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) + store { ptr, i64, i64 } %t562, ptr %a566 + call void @finch_str_drop(ptr %a566) + %t567 = load { ptr, i64, i64 }, ptr %a563 + %t568 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t569 = load { ptr, i64, i64 }, ptr %t568 + store { ptr, i64, i64 } %t567, ptr %a571 + store { ptr, i64, i64 } %t569, ptr %a572 + call void @finch_str_concat(ptr %a570, ptr %a571, ptr %a572) + store { ptr, i64, i64 } %t567, ptr %a573 + call void @finch_str_drop(ptr %a573) + %t574 = load { ptr, i64, i64 }, ptr %a570 + store { ptr, i64, i64 } %t574, ptr %a576 + store { ptr, i64, i64 } { ptr @.str.4737, i64 3, i64 0 }, ptr %a577 + call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577) + store { ptr, i64, i64 } %t574, ptr %a578 + call void @finch_str_drop(ptr %a578) + %t579 = load { ptr, i64, i64 }, ptr %a575 + %t580 = call { ptr, i64, i64 } @finch.gen.op(ptr %t554, { ptr, i64, i64 } %t579) + store { ptr, i64, i64 } %t579, ptr %a581 + call void @finch_str_drop(ptr %a581) + %t582 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t580, 0 + %t583 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t583, ptr %a584 + call void @finch.copy.S_ast_Type(ptr %a585, ptr %a584) + %t586 = load %S.ast.Type, ptr %a585 + %t587 = insertvalue %S.gen.Val %t582, %S.ast.Type %t586, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t587 +endif7366: + %t588 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t589 = load { ptr, i64, i64 }, ptr %t588 + store { ptr, i64, i64 } %t589, ptr %a590 + store { ptr, i64, i64 } { ptr @.str.4738, i64 3, i64 0 }, ptr %a591 + %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) + %t593 = icmp ne i32 %t592, 0 + br label %logic.from7367 +logic.from7367: + br i1 %t593, label %logic.rhs7368, label %logic.end7369 +logic.rhs7368: + %t594 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t595 = load { ptr, i64, i64 }, ptr %t594 + store { ptr, i64, i64 } %t595, ptr %a596 + store { ptr, i64, i64 } { ptr @.str.4739, i64 3, i64 0 }, ptr %a597 + %t598 = call i32 @finch_str_eq(ptr %a596, ptr %a597) + %t599 = icmp ne i32 %t598, 0 + br label %logic.from7370 +logic.from7370: + br i1 %t599, label %logic.end7372, label %logic.rhs7371 +logic.rhs7371: + %t600 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t601 = load { ptr, i64, i64 }, ptr %t600 + store { ptr, i64, i64 } %t601, ptr %a602 + store { ptr, i64, i64 } { ptr @.str.4740, i64 4, i64 0 }, ptr %a603 + %t604 = call i32 @finch_str_eq(ptr %a602, ptr %a603) + %t605 = icmp ne i32 %t604, 0 + br label %logic.rend7373 +logic.rend7373: + br label %logic.end7372 +logic.end7372: + %t606 = phi i1 [ true, %logic.from7370 ], [ %t605, %logic.rend7373 ] + br label %logic.rend7374 +logic.rend7374: + br label %logic.end7369 +logic.end7369: + %t607 = phi i1 [ false, %logic.from7367 ], [ %t606, %logic.rend7374 ] + br i1 %t607, label %then7375, label %endif7377 +then7375: + %t608 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t609 = load { ptr, i64, i64 }, ptr %t608 + store { ptr, i64, i64 } %t609, ptr %a610 + call void @finch_str_copy(ptr %a611, ptr %a610) + %t612 = load { ptr, i64, i64 }, ptr %a611 + %t613 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t612, 0 + %t614 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t614, ptr %a615 + call void @finch.copy.S_ast_Type(ptr %a616, ptr %a615) + %t617 = load %S.ast.Type, ptr %a616 + %t618 = insertvalue %S.gen.Val %t613, %S.ast.Type %t617, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t618 +endif7377: + %t619 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t620 = load { ptr, i64, i64 }, ptr %t619 + store { ptr, i64, i64 } %t620, ptr %a621 + store { ptr, i64, i64 } { ptr @.str.4741, i64 3, i64 0 }, ptr %a622 + %t623 = call i32 @finch_str_eq(ptr %a621, ptr %a622) + %t624 = icmp ne i32 %t623, 0 + br label %logic.from7378 +logic.from7378: + br i1 %t624, label %logic.rhs7379, label %logic.end7380 +logic.rhs7379: + %t625 = load %S.ast.Type, ptr %a23 + %t626 = call i1 @finch.gen.isInt(%S.ast.Type %t625) + br label %logic.rend7381 +logic.rend7381: + br label %logic.end7380 +logic.end7380: + %t627 = phi i1 [ false, %logic.from7378 ], [ %t626, %logic.rend7381 ] + br i1 %t627, label %then7382, label %endif7384 +then7382: + %t628 = load ptr, ptr %a1 + %t629 = load ptr, ptr %a1 + %t630 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t631 = load { ptr, i64, i64 }, ptr %t630 + %t632 = load %S.ast.Type, ptr %a23 + %t633 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4743, i64 3, i64 0 }) + %t634 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t629, { ptr, i64, i64 } %t631, %S.ast.Type %t632, %S.ast.Type %t633) + store %S.ast.Type %t633, ptr %a635 + call void @finch.drop.S_ast_Type(ptr %a635) + store { ptr, i64, i64 } { ptr @.str.4742, i64 13, i64 0 }, ptr %a637 + store { ptr, i64, i64 } %t634, ptr %a638 + call void @finch_str_concat(ptr %a636, ptr %a637, ptr %a638) + store { ptr, i64, i64 } %t634, ptr %a639 + call void @finch_str_drop(ptr %a639) + %t640 = load { ptr, i64, i64 }, ptr %a636 + store { ptr, i64, i64 } %t640, ptr %a642 + store { ptr, i64, i64 } { ptr @.str.4744, i64 7, i64 0 }, ptr %a643 + call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643) + store { ptr, i64, i64 } %t640, ptr %a644 + call void @finch_str_drop(ptr %a644) + %t645 = load { ptr, i64, i64 }, ptr %a641 + %t646 = call { ptr, i64, i64 } @finch.gen.op(ptr %t628, { ptr, i64, i64 } %t645) + store { ptr, i64, i64 } %t645, ptr %a647 + call void @finch_str_drop(ptr %a647) + %t648 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t646, 0 + %t649 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t649, ptr %a650 + call void @finch.copy.S_ast_Type(ptr %a651, ptr %a650) + %t652 = load %S.ast.Type, ptr %a651 + %t653 = insertvalue %S.gen.Val %t648, %S.ast.Type %t652, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t653 +endif7384: + %t654 = load %S.ast.Type, ptr %a3 + %t655 = call i1 @finch.gen.isInt(%S.ast.Type %t654) + br label %logic.from7385 +logic.from7385: + br i1 %t655, label %logic.rhs7386, label %logic.end7387 +logic.rhs7386: + %t656 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t657 = load { ptr, i64, i64 }, ptr %t656 + store { ptr, i64, i64 } %t657, ptr %a658 + store { ptr, i64, i64 } { ptr @.str.4745, i64 3, i64 0 }, ptr %a659 + %t660 = call i32 @finch_str_eq(ptr %a658, ptr %a659) + %t661 = icmp ne i32 %t660, 0 + br label %logic.rend7388 +logic.rend7388: + br label %logic.end7387 +logic.end7387: + %t662 = phi i1 [ false, %logic.from7385 ], [ %t661, %logic.rend7388 ] + br i1 %t662, label %then7389, label %endif7391 +then7389: + %t663 = load ptr, ptr %a1 + %t664 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t665 = load { ptr, i64, i64 }, ptr %t664 + store { ptr, i64, i64 } { ptr @.str.4746, i64 13, i64 0 }, ptr %a667 + store { ptr, i64, i64 } %t665, ptr %a668 + call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) + %t669 = load { ptr, i64, i64 }, ptr %a666 + store { ptr, i64, i64 } %t669, ptr %a671 + store { ptr, i64, i64 } { ptr @.str.4747, i64 4, i64 0 }, ptr %a672 + call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672) + store { ptr, i64, i64 } %t669, ptr %a673 + call void @finch_str_drop(ptr %a673) + %t674 = load { ptr, i64, i64 }, ptr %a670 + %t675 = load ptr, ptr %a1 + %t676 = load %S.ast.Type, ptr %a3 + %t677 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t675, %S.ast.Type %t676) + store { ptr, i64, i64 } %t674, ptr %a679 + store { ptr, i64, i64 } %t677, ptr %a680 + call void @finch_str_concat(ptr %a678, ptr %a679, ptr %a680) + store { ptr, i64, i64 } %t674, ptr %a681 + call void @finch_str_drop(ptr %a681) + store { ptr, i64, i64 } %t677, ptr %a682 + call void @finch_str_drop(ptr %a682) + %t683 = load { ptr, i64, i64 }, ptr %a678 + %t684 = call { ptr, i64, i64 } @finch.gen.op(ptr %t663, { ptr, i64, i64 } %t683) + store { ptr, i64, i64 } %t683, ptr %a685 + call void @finch_str_drop(ptr %a685) + %t686 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t684, 0 + %t687 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t687, ptr %a688 + call void @finch.copy.S_ast_Type(ptr %a689, ptr %a688) + %t690 = load %S.ast.Type, ptr %a689 + %t691 = insertvalue %S.gen.Val %t686, %S.ast.Type %t690, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t691 +endif7391: + %t692 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t693 = load { ptr, i64, i64 }, ptr %t692 + store { ptr, i64, i64 } %t693, ptr %a694 + store { ptr, i64, i64 } { ptr @.str.4748, i64 3, i64 0 }, ptr %a695 + %t696 = call i32 @finch_str_eq(ptr %a694, ptr %a695) + %t697 = icmp ne i32 %t696, 0 + br label %logic.from7392 +logic.from7392: + br i1 %t697, label %logic.rhs7393, label %logic.end7394 +logic.rhs7393: + %t698 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t699 = load { ptr, i64, i64 }, ptr %t698 + store { ptr, i64, i64 } %t699, ptr %a700 + store { ptr, i64, i64 } { ptr @.str.4749, i64 3, i64 0 }, ptr %a701 + %t702 = call i32 @finch_str_eq(ptr %a700, ptr %a701) + %t703 = icmp ne i32 %t702, 0 + br label %logic.rend7395 +logic.rend7395: + br label %logic.end7394 +logic.end7394: + %t704 = phi i1 [ false, %logic.from7392 ], [ %t703, %logic.rend7395 ] + br i1 %t704, label %then7396, label %endif7398 +then7396: + %t705 = load ptr, ptr %a1 + %t706 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t707 = load { ptr, i64, i64 }, ptr %t706 + %t708 = extractvalue { ptr, i64, i64 } %t707, 1 + %t709 = icmp uge i64 0, %t708 + br i1 %t709, label %range7399, label %inrange7400 +range7399: + call void @finch_panic_index(ptr @.str.4750, i64 4192, i64 0, i64 %t708) + unreachable +inrange7400: + %t710 = extractvalue { ptr, i64, i64 } %t707, 0 + %t711 = getelementptr inbounds %S.ast.Node, ptr %t710, i64 0 + %t712 = load %S.ast.Node, ptr %t711 + call void @finch.gen.fail(ptr %t705, %S.ast.Node %t712, { ptr, i64, i64 } { ptr @.str.4751, i64 70, i64 0 }) + br label %endif7398 +endif7398: + %t713 = load ptr, ptr %a1 + %t714 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t715 = load { ptr, i64, i64 }, ptr %t714 + %t716 = extractvalue { ptr, i64, i64 } %t715, 1 + %t717 = icmp uge i64 0, %t716 + br i1 %t717, label %range7401, label %inrange7402 +range7401: + call void @finch_panic_index(ptr @.str.4752, i64 4194, i64 0, i64 %t716) + unreachable +inrange7402: + %t718 = extractvalue { ptr, i64, i64 } %t715, 0 + %t719 = getelementptr inbounds %S.ast.Node, ptr %t718, i64 0 + %t720 = load %S.ast.Node, ptr %t719 + %t721 = load %S.ast.Type, ptr %a23 + %t722 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t721) + store { ptr, i64, i64 } { ptr @.str.4753, i64 11, i64 0 }, ptr %a724 + store { ptr, i64, i64 } %t722, ptr %a725 + call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725) + store { ptr, i64, i64 } %t722, ptr %a726 + call void @finch_str_drop(ptr %a726) + %t727 = load { ptr, i64, i64 }, ptr %a723 + store { ptr, i64, i64 } %t727, ptr %a729 + store { ptr, i64, i64 } { ptr @.str.4754, i64 6, i64 0 }, ptr %a730 + call void @finch_str_concat(ptr %a728, ptr %a729, ptr %a730) + store { ptr, i64, i64 } %t727, ptr %a731 + call void @finch_str_drop(ptr %a731) + %t732 = load { ptr, i64, i64 }, ptr %a728 + %t733 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t734 = load { ptr, i64, i64 }, ptr %t733 + store { ptr, i64, i64 } %t732, ptr %a736 + store { ptr, i64, i64 } %t734, ptr %a737 + call void @finch_str_concat(ptr %a735, ptr %a736, ptr %a737) + store { ptr, i64, i64 } %t732, ptr %a738 + call void @finch_str_drop(ptr %a738) + %t739 = load { ptr, i64, i64 }, ptr %a735 + call void @finch.gen.fail(ptr %t713, %S.ast.Node %t720, { ptr, i64, i64 } %t739) + store { ptr, i64, i64 } %t739, ptr %a740 + call void @finch_str_drop(ptr %a740) + %t741 = load %S.gen.Val, ptr %a17 + call void @finch.drop.S_ast_Type(ptr %a23) + ret %S.gen.Val %t741 +} + +define internal i64 @finch.gen.sizeBytes(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4755, i64 6, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then7403, label %endif7405 +then7403: + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic7406, label %ok7407 +panic7406: + call void @finch_panic(ptr @.str.4756, i64 4227, ptr @.str.4757) + unreachable +ok7407: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 16 + %t12 = load ptr, ptr %a1 + %t13 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = call i64 @finch.gen.findStruct(ptr %t12, { ptr, i64, i64 } %t14, { ptr, i64, i64 } %t16) + %t18 = load { ptr, i64, i64 }, ptr %t11 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 %t17, %t19 + br i1 %t20, label %range7408, label %inrange7409 +range7408: + call void @finch_panic_index(ptr @.str.4758, i64 4227, i64 %t17, i64 %t19) + unreachable +inrange7409: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.gen.StructDef, ptr %t21, i64 %t17 + %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i32 0, i32 9 + %t24 = load i64, ptr %t23 + ret i64 %t24 +endif7405: + %t25 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.4759, i64 5, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br i1 %t30, label %then7410, label %endif7412 +then7410: + %t31 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t32 = load i64, ptr %t31 + %t33 = load ptr, ptr %a1 + %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 0, %t36 + br i1 %t37, label %range7413, label %inrange7414 +range7413: + call void @finch_panic_index(ptr @.str.4760, i64 4230, i64 0, i64 %t36) + unreachable +inrange7414: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds %S.ast.Type, ptr %t38, i64 0 + %t40 = load %S.ast.Type, ptr %t39 + %t41 = call i64 @finch.gen.sizeBytes(ptr %t33, %S.ast.Type %t40) + %t42 = mul i64 %t32, %t41 + ret i64 %t42 +endif7412: + %t43 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.4761, i64 3, i64 0 }, ptr %a46 + %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) + %t48 = icmp ne i32 %t47, 0 + br label %logic.from7415 +logic.from7415: + br i1 %t48, label %logic.end7417, label %logic.rhs7416 +logic.rhs7416: + %t49 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.4762, i64 3, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br label %logic.rend7418 +logic.rend7418: + br label %logic.end7417 +logic.end7417: + %t55 = phi i1 [ true, %logic.from7415 ], [ %t54, %logic.rend7418 ] + br i1 %t55, label %then7419, label %endif7421 +then7419: + ret i64 8 +endif7421: + %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.4763, i64 5, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br i1 %t61, label %then7422, label %endif7424 +then7422: + ret i64 8 +endif7424: + %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.4764, i64 3, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) + %t67 = icmp ne i32 %t66, 0 + br i1 %t67, label %then7425, label %endif7427 +then7425: + ret i64 4 +endif7427: + %t68 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t69 = load { ptr, i64, i64 }, ptr %t68 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.4765, i64 4, i64 0 }, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %then7428, label %endif7430 +then7428: + ret i64 1 +endif7430: + %t74 = load %S.ast.Type, ptr %a2 + %t75 = call i64 @finch.gen.bitsOf(%S.ast.Type %t74) + %t76 = sdiv i64 %t75, 8 + ret i64 %t76 +} + +define internal void @finch.drop.arr_S_gen_Leaf(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.leavesOf(ptr %p0, %S.ast.Type %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca %S.gen.StructDef, align 16 + %a27 = alloca %S.gen.StructDef, align 16 + %a29 = alloca %S.gen.StructDef, align 16 + %a33 = alloca i64, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca i64, align 16 + %a65 = alloca %S.gen.Leaf, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca i64, align 16 + %a94 = alloca i64, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca i64, align 16 + %a120 = alloca %S.gen.Leaf, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store i64 %p2, ptr %a3 + store { ptr, i64, i64 } zeroinitializer, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.4766, i64 6, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp ne i32 %t9, 0 + br i1 %t10, label %then7431, label %else7432 +then7431: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic7434, label %ok7435 +panic7434: + call void @finch_panic(ptr @.str.4767, i64 4251, ptr @.str.4768) + unreachable +ok7435: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 16 + %t14 = load ptr, ptr %a1 + %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = call i64 @finch.gen.findStruct(ptr %t14, { ptr, i64, i64 } %t16, { ptr, i64, i64 } %t18) + %t20 = load { ptr, i64, i64 }, ptr %t13 + %t21 = extractvalue { ptr, i64, i64 } %t20, 1 + %t22 = icmp uge i64 %t19, %t21 + br i1 %t22, label %range7436, label %inrange7437 +range7436: + call void @finch_panic_index(ptr @.str.4769, i64 4251, i64 %t19, i64 %t21) + unreachable +inrange7437: + %t23 = extractvalue { ptr, i64, i64 } %t20, 0 + %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i64 %t19 + %t25 = load %S.gen.StructDef, ptr %t24 + store %S.gen.StructDef %t25, ptr %a26 + call void @finch.copy.S_gen_StructDef(ptr %a27, ptr %a26) + %t28 = load %S.gen.StructDef, ptr %a27 + store %S.gen.StructDef %t28, ptr %a29 + %t30 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 + %t32 = load i64, ptr %t31 + store i64 0, ptr %a33 + br label %for.cond7438 +for.cond7438: + %t34 = load i64, ptr %a33 + %t35 = icmp slt i64 %t34, %t32 + br i1 %t35, label %for.body7439, label %for.end7441 +for.body7439: + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 + %t38 = load i64, ptr %a33 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range7442, label %inrange7443 +range7442: + call void @finch_panic_index(ptr @.str.4770, i64 4253, i64 %t38, i64 %t40) + unreachable +inrange7443: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.ast.Type, ptr %t42, i64 %t38 + %t44 = load %S.ast.Type, ptr %t43 + %t45 = load i64, ptr %a3 + %t46 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 4 + %t47 = load i64, ptr %a33 + %t48 = load { ptr, i64, i64 }, ptr %t46 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range7444, label %inrange7445 +range7444: + call void @finch_panic_index(ptr @.str.4771, i64 4253, i64 %t47, i64 %t49) + unreachable +inrange7445: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds i64, ptr %t51, i64 %t47 + %t53 = load i64, ptr %t52 + %t54 = add i64 %t45, %t53 + %t55 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t36, %S.ast.Type %t44, i64 %t54) + store { ptr, i64, i64 } %t55, ptr %a56 + store i64 0, ptr %a57 + br label %each.cond7446 +each.cond7446: + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a56, i32 0, i32 1 + %t59 = load i64, ptr %t58 + %t60 = load i64, ptr %a57 + %t61 = icmp slt i64 %t60, %t59 + br i1 %t61, label %each.body7447, label %each.end7449 +each.body7447: + %t62 = load ptr, ptr %a56 + %t63 = getelementptr inbounds %S.gen.Leaf, ptr %t62, i64 %t60 + %t64 = load %S.gen.Leaf, ptr %t63 + store %S.gen.Leaf %t64, ptr %a65 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t67 = load %S.gen.Leaf, ptr %a65 + %t68 = load i64, ptr %t66 + %t69 = add i64 %t68, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t69, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) + %t70 = load ptr, ptr %a4 + %t71 = getelementptr inbounds %S.gen.Leaf, ptr %t70, i64 %t68 + store %S.gen.Leaf %t67, ptr %t71 + store i64 %t69, ptr %t66 + br label %each.step7448 +each.step7448: + %t72 = load i64, ptr %a57 + %t73 = add i64 %t72, 1 + store i64 %t73, ptr %a57 + br label %each.cond7446 +each.end7449: + call void @finch.drop.arr_S_gen_Leaf(ptr %a56) + br label %for.step7440 +for.step7440: + %t74 = load i64, ptr %a33 + %t75 = add i64 %t74, 1 + store i64 %t75, ptr %a33 + br label %for.cond7438 +for.end7441: + call void @finch.drop.S_gen_StructDef(ptr %a29) + br label %endif7433 +else7432: + %t76 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t77 = load { ptr, i64, i64 }, ptr %t76 + store { ptr, i64, i64 } %t77, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.4772, i64 5, i64 0 }, ptr %a79 + %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) + %t81 = icmp ne i32 %t80, 0 + br i1 %t81, label %then7450, label %else7451 +then7450: + %t82 = load ptr, ptr %a1 + %t83 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t84 = load { ptr, i64, i64 }, ptr %t83 + %t85 = extractvalue { ptr, i64, i64 } %t84, 1 + %t86 = icmp uge i64 0, %t85 + br i1 %t86, label %range7453, label %inrange7454 +range7453: + call void @finch_panic_index(ptr @.str.4773, i64 4258, i64 0, i64 %t85) + unreachable +inrange7454: + %t87 = extractvalue { ptr, i64, i64 } %t84, 0 + %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i64 0 + %t89 = load %S.ast.Type, ptr %t88 + %t90 = call i64 @finch.gen.sizeBytes(ptr %t82, %S.ast.Type %t89) + store i64 %t90, ptr %a91 + %t92 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t93 = load i64, ptr %t92 + store i64 0, ptr %a94 + br label %for.cond7455 +for.cond7455: + %t95 = load i64, ptr %a94 + %t96 = icmp slt i64 %t95, %t93 + br i1 %t96, label %for.body7456, label %for.end7458 +for.body7456: + %t97 = load ptr, ptr %a1 + %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t99 = load { ptr, i64, i64 }, ptr %t98 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 0, %t100 + br i1 %t101, label %range7459, label %inrange7460 +range7459: + call void @finch_panic_index(ptr @.str.4774, i64 4260, i64 0, i64 %t100) + unreachable +inrange7460: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 + %t104 = load %S.ast.Type, ptr %t103 + %t105 = load i64, ptr %a3 + %t106 = load i64, ptr %a94 + %t107 = load i64, ptr %a91 + %t108 = mul i64 %t106, %t107 + %t109 = add i64 %t105, %t108 + %t110 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t97, %S.ast.Type %t104, i64 %t109) + store { ptr, i64, i64 } %t110, ptr %a111 + store i64 0, ptr %a112 + br label %each.cond7461 +each.cond7461: + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = load i64, ptr %a112 + %t116 = icmp slt i64 %t115, %t114 + br i1 %t116, label %each.body7462, label %each.end7464 +each.body7462: + %t117 = load ptr, ptr %a111 + %t118 = getelementptr inbounds %S.gen.Leaf, ptr %t117, i64 %t115 + %t119 = load %S.gen.Leaf, ptr %t118 + store %S.gen.Leaf %t119, ptr %a120 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t122 = load %S.gen.Leaf, ptr %a120 + %t123 = load i64, ptr %t121 + %t124 = add i64 %t123, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t124, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) + %t125 = load ptr, ptr %a4 + %t126 = getelementptr inbounds %S.gen.Leaf, ptr %t125, i64 %t123 + store %S.gen.Leaf %t122, ptr %t126 + store i64 %t124, ptr %t121 + br label %each.step7463 +each.step7463: + %t127 = load i64, ptr %a112 + %t128 = add i64 %t127, 1 + store i64 %t128, ptr %a112 + br label %each.cond7461 +each.end7464: + call void @finch.drop.arr_S_gen_Leaf(ptr %a111) + br label %for.step7457 +for.step7457: + %t129 = load i64, ptr %a94 + %t130 = add i64 %t129, 1 + store i64 %t130, ptr %a94 + br label %for.cond7455 +for.end7458: + br label %endif7452 +else7451: + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t132 = load i64, ptr %a3 + %t133 = insertvalue %S.gen.Leaf zeroinitializer, i64 %t132, 0 + %t134 = load ptr, ptr %a1 + %t135 = load %S.ast.Type, ptr %a2 + %t136 = call i64 @finch.gen.sizeBytes(ptr %t134, %S.ast.Type %t135) + %t137 = insertvalue %S.gen.Leaf %t133, i64 %t136, 1 + %t138 = load %S.ast.Type, ptr %a2 + %t139 = call i1 @finch.gen.isFloat(%S.ast.Type %t138) + %t140 = insertvalue %S.gen.Leaf %t137, i1 %t139, 2 + %t141 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t142 = load { ptr, i64, i64 }, ptr %t141 + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.4775, i64 5, i64 0 }, ptr %a144 + %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) + %t146 = icmp ne i32 %t145, 0 + %t147 = insertvalue %S.gen.Leaf %t140, i1 %t146, 3 + %t148 = load i64, ptr %t131 + %t149 = add i64 %t148, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t149, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) + %t150 = load ptr, ptr %a4 + %t151 = getelementptr inbounds %S.gen.Leaf, ptr %t150, i64 %t148 + store %S.gen.Leaf %t147, ptr %t151 + store i64 %t149, ptr %t131 + br label %endif7452 +endif7452: + br label %endif7433 +endif7433: + %t152 = load { ptr, i64, i64 }, ptr %a4 + ret { ptr, i64, i64 } %t152 +} + +define internal void @finch.copy.S_gen_Abi(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Abi, ptr %src + store %S.gen.Abi %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_str(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal %S.gen.Abi @finch.gen.classifyArm64(ptr %p0, %S.ast.Type %p1, %S.gen.Abi %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.gen.Abi, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca %S.gen.Abi, align 16 + %a8 = alloca %S.gen.Abi, align 16 + %a10 = alloca %S.gen.Abi, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i1, align 16 + %a23 = alloca i64, align 16 + %a31 = alloca %S.gen.Leaf, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca i64, align 16 + %a102 = alloca %S.gen.Leaf, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.gen.Abi %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = load %S.gen.Abi, ptr %a3 + store %S.gen.Abi %t6, ptr %a7 + call void @finch.copy.S_gen_Abi(ptr %a8, ptr %a7) + %t9 = load %S.gen.Abi, ptr %a8 + store %S.gen.Abi %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load %S.ast.Type, ptr %a2 + %t13 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t11, %S.ast.Type %t12, i64 0) + store { ptr, i64, i64 } %t13, ptr %a14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp sgt i64 %t16, 0 + br label %logic.from7465 +logic.from7465: + br i1 %t17, label %logic.rhs7466, label %logic.end7467 +logic.rhs7466: + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp sle i64 %t19, 4 + br label %logic.rend7468 +logic.rend7468: + br label %logic.end7467 +logic.end7467: + %t21 = phi i1 [ false, %logic.from7465 ], [ %t20, %logic.rend7468 ] + store i1 %t21, ptr %a22 + store i64 0, ptr %a23 + br label %each.cond7469 +each.cond7469: + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = load i64, ptr %a23 + %t27 = icmp slt i64 %t26, %t25 + br i1 %t27, label %each.body7470, label %each.end7472 +each.body7470: + %t28 = load ptr, ptr %a14 + %t29 = getelementptr inbounds %S.gen.Leaf, ptr %t28, i64 %t26 + %t30 = load %S.gen.Leaf, ptr %t29 + store %S.gen.Leaf %t30, ptr %a31 + %t32 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 2 + %t33 = load i1, ptr %t32 + %t34 = xor i1 %t33, true + br label %logic.from7473 +logic.from7473: + br i1 %t34, label %logic.end7475, label %logic.rhs7474 +logic.rhs7474: + %t35 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 3 + %t36 = load i1, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %a14 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 0, %t38 + br i1 %t39, label %range7476, label %inrange7477 +range7476: + call void @finch_panic_index(ptr @.str.4776, i64 4277, i64 0, i64 %t38) + unreachable +inrange7477: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.gen.Leaf, ptr %t40, i64 0 + %t42 = getelementptr inbounds %S.gen.Leaf, ptr %t41, i32 0, i32 3 + %t43 = load i1, ptr %t42 + %t44 = icmp ne i1 %t36, %t43 + br label %logic.rend7478 +logic.rend7478: + br label %logic.end7475 +logic.end7475: + %t45 = phi i1 [ true, %logic.from7473 ], [ %t44, %logic.rend7478 ] + br i1 %t45, label %then7479, label %endif7481 +then7479: + store i1 false, ptr %a22 + br label %endif7481 +endif7481: + br label %each.step7471 +each.step7471: + %t46 = load i64, ptr %a23 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a23 + br label %each.cond7469 +each.end7472: + %t48 = load i1, ptr %a22 + br i1 %t48, label %then7482, label %endif7484 +then7482: + store { ptr, i64, i64 } { ptr @.str.4777, i64 5, i64 0 }, ptr %a49 + %t50 = load { ptr, i64, i64 }, ptr %a14 + %t51 = extractvalue { ptr, i64, i64 } %t50, 1 + %t52 = icmp uge i64 0, %t51 + br i1 %t52, label %range7485, label %inrange7486 +range7485: + call void @finch_panic_index(ptr @.str.4778, i64 4283, i64 0, i64 %t51) + unreachable +inrange7486: + %t53 = extractvalue { ptr, i64, i64 } %t50, 0 + %t54 = getelementptr inbounds %S.gen.Leaf, ptr %t53, i64 0 + %t55 = getelementptr inbounds %S.gen.Leaf, ptr %t54, i32 0, i32 3 + %t56 = load i1, ptr %t55 + br i1 %t56, label %then7487, label %endif7489 +then7487: + %t57 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.4779, i64 6, i64 0 }, ptr %a49 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch_str_drop(ptr %a58) + br label %endif7489 +endif7489: + %t59 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } { ptr @.str.4780, i64 6, i64 0 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i32 0, i32 1 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t65 = load i64, ptr %t64 + call void @finch_str_from_int(ptr %a66, i64 %t65) + %t67 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.4781, i64 1, i64 0 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.4782, i64 3, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t77, ptr %a80 + store { ptr, i64, i64 } %t78, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.4783, i64 1, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + %t89 = load i64, ptr %t63 + %t90 = add i64 %t89, 1 + call void @finch_arr_reserve(ptr %t62, i64 %t90, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t91 = load ptr, ptr %t62 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t89 + store { ptr, i64, i64 } %t88, ptr %t92 + store i64 %t90, ptr %t63 + store { ptr, i64, i64 } zeroinitializer, ptr %a93 + store i64 0, ptr %a94 + br label %each.cond7490 +each.cond7490: + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t96 = load i64, ptr %t95 + %t97 = load i64, ptr %a94 + %t98 = icmp slt i64 %t97, %t96 + br i1 %t98, label %each.body7491, label %each.end7493 +each.body7491: + %t99 = load ptr, ptr %a14 + %t100 = getelementptr inbounds %S.gen.Leaf, ptr %t99, i64 %t97 + %t101 = load %S.gen.Leaf, ptr %t100 + store %S.gen.Leaf %t101, ptr %a102 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 + %t104 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_copy(ptr %a106, ptr %a105) + %t107 = load { ptr, i64, i64 }, ptr %a106 + %t108 = load i64, ptr %t103 + %t109 = add i64 %t108, 1 + call void @finch_arr_reserve(ptr %a93, i64 %t109, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t110 = load ptr, ptr %a93 + %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i64 %t108 + store { ptr, i64, i64 } %t107, ptr %t111 + store i64 %t109, ptr %t103 + br label %each.step7492 +each.step7492: + %t112 = load i64, ptr %a94 + %t113 = add i64 %t112, 1 + store i64 %t113, ptr %a94 + br label %each.cond7490 +each.end7493: + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4785, i64 2, i64 0 }, ptr %a115 + call void @finch_str_join(ptr %a116, ptr %a93, ptr %a115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.4784, i64 2, i64 0 }, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t122, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.4786, i64 2, i64 0 }, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + store { ptr, i64, i64 } %t122, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a123 + %t128 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t129 = load { ptr, i64, i64 }, ptr %t128 + store { ptr, i64, i64 } %t127, ptr %t128 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load %S.gen.Abi, ptr %a10 + call void @finch.drop.arr_str(ptr %a93) + call void @finch_str_drop(ptr %a49) + call void @finch.drop.arr_S_gen_Leaf(ptr %a14) + ret %S.gen.Abi %t131 +endif7484: + %t132 = load i64, ptr %a4 + %t133 = icmp sgt i64 %t132, 16 + br i1 %t133, label %then7494, label %endif7496 +then7494: + %t134 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 + %t135 = load { ptr, i64, i64 }, ptr %t134 + store { ptr, i64, i64 } { ptr @.str.4787, i64 8, i64 0 }, ptr %t134 + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load %S.gen.Abi, ptr %a10 + call void @finch.drop.arr_S_gen_Leaf(ptr %a14) + ret %S.gen.Abi %t137 +endif7496: + %t138 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 + %t139 = load { ptr, i64, i64 }, ptr %t138 + store { ptr, i64, i64 } { ptr @.str.4788, i64 6, i64 0 }, ptr %t138 + store { ptr, i64, i64 } %t139, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load i64, ptr %a5 + %t142 = icmp sge i64 %t141, 16 + br i1 %t142, label %then7497, label %else7498 +then7497: + %t143 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 + %t145 = load i64, ptr %t144 + %t146 = add i64 %t145, 1 + call void @finch_arr_reserve(ptr %t143, i64 %t146, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t147 = load ptr, ptr %t143 + %t148 = getelementptr inbounds { ptr, i64, i64 }, ptr %t147, i64 %t145 + store { ptr, i64, i64 } { ptr @.str.4789, i64 4, i64 0 }, ptr %t148 + store i64 %t146, ptr %t144 + %t149 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } { ptr @.str.4790, i64 4, i64 0 }, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + call void @finch_str_drop(ptr %a151) + br label %endif7499 +else7498: + %t152 = load i64, ptr %a4 + %t153 = icmp sle i64 %t152, 8 + br i1 %t153, label %then7500, label %else7501 +then7500: + %t154 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 + %t156 = load i64, ptr %t155 + %t157 = add i64 %t156, 1 + call void @finch_arr_reserve(ptr %t154, i64 %t157, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t158 = load ptr, ptr %t154 + %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i64 %t156 + store { ptr, i64, i64 } { ptr @.str.4791, i64 3, i64 0 }, ptr %t159 + store i64 %t157, ptr %t155 + %t160 = load i64, ptr %a4 + %t161 = mul i64 %t160, 8 + call void @finch_str_from_int(ptr %a162, i64 %t161) + %t163 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.4792, i64 1, i64 0 }, ptr %a165 + store { ptr, i64, i64 } %t163, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t170 = load { ptr, i64, i64 }, ptr %t169 + store { ptr, i64, i64 } %t168, ptr %t169 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_drop(ptr %a171) + br label %endif7502 +else7501: + %t172 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i32 0, i32 1 + %t174 = load i64, ptr %t173 + %t175 = add i64 %t174, 1 + call void @finch_arr_reserve(ptr %t172, i64 %t175, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t176 = load ptr, ptr %t172 + %t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 %t174 + store { ptr, i64, i64 } { ptr @.str.4793, i64 9, i64 0 }, ptr %t177 + store i64 %t175, ptr %t173 + %t178 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t179 = load { ptr, i64, i64 }, ptr %t178 + store { ptr, i64, i64 } { ptr @.str.4794, i64 9, i64 0 }, ptr %t178 + store { ptr, i64, i64 } %t179, ptr %a180 + call void @finch_str_drop(ptr %a180) + br label %endif7502 +endif7502: + br label %endif7499 +endif7499: + %t181 = load %S.gen.Abi, ptr %a10 + call void @finch.drop.arr_S_gen_Leaf(ptr %a14) + ret %S.gen.Abi %t181 +} + +define internal void @finch.drop.S_gen_Abi(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal %S.gen.Abi @finch.gen.classify(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.gen.Abi, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca %S.gen.StructDef, align 16 + %a28 = alloca %S.gen.StructDef, align 16 + %a30 = alloca %S.gen.StructDef, align 16 + %a33 = alloca i64, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca i64, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca i64, align 16 + %a145 = alloca %S.gen.Leaf, align 16 + %a148 = alloca i64, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca i64, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca i64, align 16 + %a210 = alloca i64, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = insertvalue %S.gen.Abi zeroinitializer, { ptr, i64, i64 } { ptr @.str.4795, i64 6, i64 0 }, 0 + store %S.gen.Abi %t3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.4796, i64 6, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp eq i32 %t9, 0 + br i1 %t10, label %then7503, label %endif7505 +then7503: + %t11 = load %S.gen.Abi, ptr %a4 + ret %S.gen.Abi %t11 +endif7505: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic7506, label %ok7507 +panic7506: + call void @finch_panic(ptr @.str.4797, i64 4318, ptr @.str.4798) + unreachable +ok7507: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call i64 @finch.gen.findStruct(ptr %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t19) + %t21 = load { ptr, i64, i64 }, ptr %t14 + %t22 = extractvalue { ptr, i64, i64 } %t21, 1 + %t23 = icmp uge i64 %t20, %t22 + br i1 %t23, label %range7508, label %inrange7509 +range7508: + call void @finch_panic_index(ptr @.str.4799, i64 4318, i64 %t20, i64 %t22) + unreachable +inrange7509: + %t24 = extractvalue { ptr, i64, i64 } %t21, 0 + %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 + %t26 = load %S.gen.StructDef, ptr %t25 + store %S.gen.StructDef %t26, ptr %a27 + call void @finch.copy.S_gen_StructDef(ptr %a28, ptr %a27) + %t29 = load %S.gen.StructDef, ptr %a28 + store %S.gen.StructDef %t29, ptr %a30 + %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 9 + %t32 = load i64, ptr %t31 + store i64 %t32, ptr %a33 + %t34 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 + store i64 8, ptr %t34 + %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 + %t36 = load i64, ptr %t35 + %t37 = icmp sgt i64 %t36, 8 + br i1 %t37, label %then7510, label %endif7512 +then7510: + %t38 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 + %t39 = load i64, ptr %t38 + %t40 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 + store i64 %t39, ptr %t40 + br label %endif7512 +endif7512: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic7513, label %ok7514 +panic7513: + call void @finch_panic(ptr @.str.4800, i64 4324, ptr @.str.4801) + unreachable +ok7514: + %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 31 + %t44 = getelementptr inbounds %S.platform.Target, ptr %t43, i32 0, i32 4 + %t45 = load i1, ptr %t44 + br i1 %t45, label %then7515, label %endif7517 +then7515: + %t46 = load ptr, ptr %a1 + %t47 = load %S.ast.Type, ptr %a2 + %t48 = load %S.gen.Abi, ptr %a4 + %t49 = load i64, ptr %a33 + %t50 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 + %t51 = load i64, ptr %t50 + %t52 = call %S.gen.Abi @finch.gen.classifyArm64(ptr %t46, %S.ast.Type %t47, %S.gen.Abi %t48, i64 %t49, i64 %t51) + call void @finch.drop.S_gen_StructDef(ptr %a30) + call void @finch.drop.S_gen_Abi(ptr %a4) + ret %S.gen.Abi %t52 +endif7517: + %t53 = load ptr, ptr %a1 + %t54 = icmp eq ptr %t53, null + br i1 %t54, label %panic7518, label %ok7519 +panic7518: + call void @finch_panic(ptr @.str.4802, i64 4327, ptr @.str.4803) + unreachable +ok7519: + %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 31 + %t56 = getelementptr inbounds %S.platform.Target, ptr %t55, i32 0, i32 1 + %t57 = load i1, ptr %t56 + br i1 %t57, label %then7520, label %endif7522 +then7520: + %t58 = load i64, ptr %a33 + %t59 = icmp eq i64 %t58, 1 + br label %logic.from7523 +logic.from7523: + br i1 %t59, label %logic.end7525, label %logic.rhs7524 +logic.rhs7524: + %t60 = load i64, ptr %a33 + %t61 = icmp eq i64 %t60, 2 + br label %logic.rend7526 +logic.rend7526: + br label %logic.end7525 +logic.end7525: + %t62 = phi i1 [ true, %logic.from7523 ], [ %t61, %logic.rend7526 ] + br label %logic.from7527 +logic.from7527: + br i1 %t62, label %logic.end7529, label %logic.rhs7528 +logic.rhs7528: + %t63 = load i64, ptr %a33 + %t64 = icmp eq i64 %t63, 4 + br label %logic.rend7530 +logic.rend7530: + br label %logic.end7529 +logic.end7529: + %t65 = phi i1 [ true, %logic.from7527 ], [ %t64, %logic.rend7530 ] + br label %logic.from7531 +logic.from7531: + br i1 %t65, label %logic.end7533, label %logic.rhs7532 +logic.rhs7532: + %t66 = load i64, ptr %a33 + %t67 = icmp eq i64 %t66, 8 + br label %logic.rend7534 +logic.rend7534: + br label %logic.end7533 +logic.end7533: + %t68 = phi i1 [ true, %logic.from7531 ], [ %t67, %logic.rend7534 ] + br i1 %t68, label %then7535, label %else7536 +then7535: + %t69 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t70 = load { ptr, i64, i64 }, ptr %t69 + store { ptr, i64, i64 } { ptr @.str.4804, i64 6, i64 0 }, ptr %t69 + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 + %t74 = load i64, ptr %a33 + %t75 = mul i64 %t74, 8 + call void @finch_str_from_int(ptr %a76, i64 %t75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.4805, i64 1, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load i64, ptr %t73 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %t72, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %t72 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 + store { ptr, i64, i64 } %t82, ptr %t86 + store i64 %t84, ptr %t73 + %t87 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t88 = load { ptr, i64, i64 }, ptr %t87 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 0, %t89 + br i1 %t90, label %range7538, label %inrange7539 +range7538: + call void @finch_panic_index(ptr @.str.4806, i64 4333, i64 0, i64 %t89) + unreachable +inrange7539: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 0 + %t93 = load { ptr, i64, i64 }, ptr %t92 + %t94 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t93, ptr %a95 + call void @finch_str_copy(ptr %a96, ptr %a95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + %t98 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t97, ptr %t94 + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_drop(ptr %a99) + br label %endif7537 +else7536: + %t100 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t101 = load { ptr, i64, i64 }, ptr %t100 + store { ptr, i64, i64 } { ptr @.str.4807, i64 8, i64 0 }, ptr %t100 + store { ptr, i64, i64 } %t101, ptr %a102 + call void @finch_str_drop(ptr %a102) + br label %endif7537 +endif7537: + %t103 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t103 +endif7522: + %t104 = load i64, ptr %a33 + %t105 = icmp sgt i64 %t104, 16 + br label %logic.from7540 +logic.from7540: + br i1 %t105, label %logic.end7542, label %logic.rhs7541 +logic.rhs7541: + %t106 = load i64, ptr %a33 + %t107 = icmp eq i64 %t106, 0 + br label %logic.rend7543 +logic.rend7543: + br label %logic.end7542 +logic.end7542: + %t108 = phi i1 [ true, %logic.from7540 ], [ %t107, %logic.rend7543 ] + br i1 %t108, label %then7544, label %endif7546 +then7544: + %t109 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } { ptr @.str.4808, i64 6, i64 0 }, ptr %t109 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t112 +endif7546: + %t113 = load ptr, ptr %a1 + %t114 = load %S.ast.Type, ptr %a2 + %t115 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t113, %S.ast.Type %t114, i64 0) + store { ptr, i64, i64 } %t115, ptr %a116 + %t117 = load i64, ptr %a33 + %t118 = add i64 %t117, 7 + %t119 = sdiv i64 %t118, 8 + store i64 %t119, ptr %a120 + %t121 = mul i64 2, ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64) + %t122 = call ptr @finch_alloc(i64 %t121) + %t123 = getelementptr inbounds i64, ptr %t122, i64 0 + store i64 0, ptr %t123 + %t124 = getelementptr inbounds i64, ptr %t122, i64 1 + store i64 0, ptr %t124 + %t125 = insertvalue { ptr, i64, i64 } undef, ptr %t122, 0 + %t126 = insertvalue { ptr, i64, i64 } %t125, i64 2, 1 + %t127 = insertvalue { ptr, i64, i64 } %t126, i64 2, 2 + store { ptr, i64, i64 } %t127, ptr %a128 + %t129 = mul i64 2, ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64) + %t130 = call ptr @finch_alloc(i64 %t129) + %t131 = getelementptr inbounds i1, ptr %t130, i64 0 + store i1 false, ptr %t131 + %t132 = getelementptr inbounds i1, ptr %t130, i64 1 + store i1 false, ptr %t132 + %t133 = insertvalue { ptr, i64, i64 } undef, ptr %t130, 0 + %t134 = insertvalue { ptr, i64, i64 } %t133, i64 2, 1 + %t135 = insertvalue { ptr, i64, i64 } %t134, i64 2, 2 + store { ptr, i64, i64 } %t135, ptr %a136 + store i64 0, ptr %a137 + br label %each.cond7547 +each.cond7547: + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %a116, i32 0, i32 1 + %t139 = load i64, ptr %t138 + %t140 = load i64, ptr %a137 + %t141 = icmp slt i64 %t140, %t139 + br i1 %t141, label %each.body7548, label %each.end7550 +each.body7548: + %t142 = load ptr, ptr %a116 + %t143 = getelementptr inbounds %S.gen.Leaf, ptr %t142, i64 %t140 + %t144 = load %S.gen.Leaf, ptr %t143 + store %S.gen.Leaf %t144, ptr %a145 + %t146 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 1 + %t147 = load i64, ptr %t146 + store i64 %t147, ptr %a148 + %t149 = load i64, ptr %a148 + %t150 = icmp sgt i64 %t149, 8 + br i1 %t150, label %then7551, label %endif7553 +then7551: + store i64 8, ptr %a148 + br label %endif7553 +endif7553: + %t151 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 + %t152 = load i64, ptr %t151 + %t153 = load i64, ptr %a148 + %t154 = icmp eq i64 %t153, 0 + br i1 %t154, label %panic7554, label %ok7555 +panic7554: + call void @finch_panic(ptr @.str.4809, i64 4352, ptr @.str.4810) + unreachable +ok7555: + %t155 = srem i64 %t152, %t153 + %t156 = icmp ne i64 %t155, 0 + br i1 %t156, label %then7556, label %endif7558 +then7556: + %t157 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t158 = load { ptr, i64, i64 }, ptr %t157 + store { ptr, i64, i64 } { ptr @.str.4811, i64 6, i64 0 }, ptr %t157 + store { ptr, i64, i64 } %t158, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.arr_bool(ptr %a136) + call void @finch.drop.arr_int(ptr %a128) + call void @finch.drop.arr_S_gen_Leaf(ptr %a116) + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t160 +endif7558: + %t161 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 + %t162 = load i64, ptr %t161 + %t163 = sdiv i64 %t162, 8 + store i64 %t163, ptr %a164 + %t165 = load i64, ptr %a164 + %t166 = load { ptr, i64, i64 }, ptr %a128 + %t167 = extractvalue { ptr, i64, i64 } %t166, 1 + %t168 = icmp uge i64 %t165, %t167 + br i1 %t168, label %range7559, label %inrange7560 +range7559: + call void @finch_panic_index(ptr @.str.4812, i64 4357, i64 %t165, i64 %t167) + unreachable +inrange7560: + %t169 = extractvalue { ptr, i64, i64 } %t166, 0 + %t170 = getelementptr inbounds i64, ptr %t169, i64 %t165 + %t171 = load i64, ptr %t170 + %t172 = icmp eq i64 %t171, 1 + br label %logic.from7561 +logic.from7561: + br i1 %t172, label %logic.end7563, label %logic.rhs7562 +logic.rhs7562: + %t173 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 2 + %t174 = load i1, ptr %t173 + %t175 = xor i1 %t174, true + br label %logic.rend7564 +logic.rend7564: + br label %logic.end7563 +logic.end7563: + %t176 = phi i1 [ true, %logic.from7561 ], [ %t175, %logic.rend7564 ] + br i1 %t176, label %then7565, label %else7566 +then7565: + %t177 = load i64, ptr %a164 + %t178 = load { ptr, i64, i64 }, ptr %a128 + %t179 = extractvalue { ptr, i64, i64 } %t178, 1 + %t180 = icmp uge i64 %t177, %t179 + br i1 %t180, label %range7568, label %inrange7569 +range7568: + call void @finch_panic_index(ptr @.str.4813, i64 4358, i64 %t177, i64 %t179) + unreachable +inrange7569: + %t181 = extractvalue { ptr, i64, i64 } %t178, 0 + %t182 = getelementptr inbounds i64, ptr %t181, i64 %t177 + store i64 1, ptr %t182 + br label %endif7567 +else7566: + %t183 = load i64, ptr %a164 + %t184 = load { ptr, i64, i64 }, ptr %a128 + %t185 = extractvalue { ptr, i64, i64 } %t184, 1 + %t186 = icmp uge i64 %t183, %t185 + br i1 %t186, label %range7570, label %inrange7571 +range7570: + call void @finch_panic_index(ptr @.str.4814, i64 4360, i64 %t183, i64 %t185) + unreachable +inrange7571: + %t187 = extractvalue { ptr, i64, i64 } %t184, 0 + %t188 = getelementptr inbounds i64, ptr %t187, i64 %t183 + store i64 2, ptr %t188 + br label %endif7567 +endif7567: + %t189 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 3 + %t190 = load i1, ptr %t189 + br i1 %t190, label %then7572, label %endif7574 +then7572: + %t191 = load i64, ptr %a164 + %t192 = load { ptr, i64, i64 }, ptr %a136 + %t193 = extractvalue { ptr, i64, i64 } %t192, 1 + %t194 = icmp uge i64 %t191, %t193 + br i1 %t194, label %range7575, label %inrange7576 +range7575: + call void @finch_panic_index(ptr @.str.4815, i64 4363, i64 %t191, i64 %t193) + unreachable +inrange7576: + %t195 = extractvalue { ptr, i64, i64 } %t192, 0 + %t196 = getelementptr inbounds i1, ptr %t195, i64 %t191 + store i1 true, ptr %t196 + br label %endif7574 +endif7574: + br label %each.step7549 +each.step7549: + %t197 = load i64, ptr %a137 + %t198 = add i64 %t197, 1 + store i64 %t198, ptr %a137 + br label %each.cond7547 +each.end7550: + %t199 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t200 = load { ptr, i64, i64 }, ptr %t199 + store { ptr, i64, i64 } { ptr @.str.4816, i64 6, i64 0 }, ptr %t199 + store { ptr, i64, i64 } %t200, ptr %a201 + call void @finch_str_drop(ptr %a201) + %t202 = load i64, ptr %a120 + store i64 0, ptr %a203 + br label %for.cond7577 +for.cond7577: + %t204 = load i64, ptr %a203 + %t205 = icmp slt i64 %t204, %t202 + br i1 %t205, label %for.body7578, label %for.end7580 +for.body7578: + %t206 = load i64, ptr %a33 + %t207 = load i64, ptr %a203 + %t208 = mul i64 8, %t207 + %t209 = sub i64 %t206, %t208 + store i64 %t209, ptr %a210 + %t211 = load i64, ptr %a210 + %t212 = icmp sgt i64 %t211, 8 + br i1 %t212, label %then7581, label %endif7583 +then7581: + store i64 8, ptr %a210 + br label %endif7583 +endif7583: + %t213 = load i64, ptr %a203 + %t214 = load { ptr, i64, i64 }, ptr %a128 + %t215 = extractvalue { ptr, i64, i64 } %t214, 1 + %t216 = icmp uge i64 %t213, %t215 + br i1 %t216, label %range7584, label %inrange7585 +range7584: + call void @finch_panic_index(ptr @.str.4817, i64 4372, i64 %t213, i64 %t215) + unreachable +inrange7585: + %t217 = extractvalue { ptr, i64, i64 } %t214, 0 + %t218 = getelementptr inbounds i64, ptr %t217, i64 %t213 + %t219 = load i64, ptr %t218 + %t220 = icmp eq i64 %t219, 2 + br i1 %t220, label %then7586, label %else7587 +then7586: + %t221 = load i64, ptr %a203 + %t222 = load { ptr, i64, i64 }, ptr %a136 + %t223 = extractvalue { ptr, i64, i64 } %t222, 1 + %t224 = icmp uge i64 %t221, %t223 + br i1 %t224, label %range7589, label %inrange7590 +range7589: + call void @finch_panic_index(ptr @.str.4818, i64 4373, i64 %t221, i64 %t223) + unreachable +inrange7590: + %t225 = extractvalue { ptr, i64, i64 } %t222, 0 + %t226 = getelementptr inbounds i1, ptr %t225, i64 %t221 + %t227 = load i1, ptr %t226 + br i1 %t227, label %then7591, label %else7592 +then7591: + %t228 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i32 0, i32 1 + %t230 = load i64, ptr %t229 + %t231 = add i64 %t230, 1 + call void @finch_arr_reserve(ptr %t228, i64 %t231, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t232 = load ptr, ptr %t228 + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 %t230 + store { ptr, i64, i64 } { ptr @.str.4819, i64 6, i64 0 }, ptr %t233 + store i64 %t231, ptr %t229 + br label %endif7593 +else7592: + %t234 = load i64, ptr %a210 + %t235 = icmp sgt i64 %t234, 4 + br i1 %t235, label %then7594, label %else7595 +then7594: + %t236 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1 + %t238 = load i64, ptr %t237 + %t239 = add i64 %t238, 1 + call void @finch_arr_reserve(ptr %t236, i64 %t239, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t240 = load ptr, ptr %t236 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i64 %t238 + store { ptr, i64, i64 } { ptr @.str.4820, i64 11, i64 0 }, ptr %t241 + store i64 %t239, ptr %t237 + br label %endif7596 +else7595: + %t242 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 + %t244 = load i64, ptr %t243 + %t245 = add i64 %t244, 1 + call void @finch_arr_reserve(ptr %t242, i64 %t245, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t246 = load ptr, ptr %t242 + %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 + store { ptr, i64, i64 } { ptr @.str.4821, i64 5, i64 0 }, ptr %t247 + store i64 %t245, ptr %t243 + br label %endif7596 +endif7596: + br label %endif7593 +endif7593: + br label %endif7588 +else7587: + %t248 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 + %t250 = load i64, ptr %a210 + %t251 = mul i64 %t250, 8 + call void @finch_str_from_int(ptr %a252, i64 %t251) + %t253 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } { ptr @.str.4822, i64 1, i64 0 }, ptr %a255 + store { ptr, i64, i64 } %t253, ptr %a256 + call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) + store { ptr, i64, i64 } %t253, ptr %a257 + call void @finch_str_drop(ptr %a257) + %t258 = load { ptr, i64, i64 }, ptr %a254 + %t259 = load i64, ptr %t249 + %t260 = add i64 %t259, 1 + call void @finch_arr_reserve(ptr %t248, i64 %t260, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t261 = load ptr, ptr %t248 + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t261, i64 %t259 + store { ptr, i64, i64 } %t258, ptr %t262 + store i64 %t260, ptr %t249 + br label %endif7588 +endif7588: + br label %for.step7579 +for.step7579: + %t263 = load i64, ptr %a203 + %t264 = add i64 %t263, 1 + store i64 %t264, ptr %a203 + br label %for.cond7577 +for.end7580: + %t265 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1 + %t267 = load i64, ptr %t266 + %t268 = icmp eq i64 %t267, 1 + br i1 %t268, label %then7597, label %else7598 +then7597: + %t269 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t270 = load { ptr, i64, i64 }, ptr %t269 + %t271 = extractvalue { ptr, i64, i64 } %t270, 1 + %t272 = icmp uge i64 0, %t271 + br i1 %t272, label %range7600, label %inrange7601 +range7600: + call void @finch_panic_index(ptr @.str.4823, i64 4385, i64 0, i64 %t271) + unreachable +inrange7601: + %t273 = extractvalue { ptr, i64, i64 } %t270, 0 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 0 + %t275 = load { ptr, i64, i64 }, ptr %t274 + %t276 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t275, ptr %a277 + call void @finch_str_copy(ptr %a278, ptr %a277) + %t279 = load { ptr, i64, i64 }, ptr %a278 + %t280 = load { ptr, i64, i64 }, ptr %t276 + store { ptr, i64, i64 } %t279, ptr %t276 + store { ptr, i64, i64 } %t280, ptr %a281 + call void @finch_str_drop(ptr %a281) + br label %endif7599 +else7598: + %t282 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4825, i64 2, i64 0 }, ptr %a284 + call void @finch_str_join(ptr %a285, ptr %t282, ptr %a284) + %t286 = load { ptr, i64, i64 }, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.4824, i64 2, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t286, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.4826, i64 2, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 + %t298 = load { ptr, i64, i64 }, ptr %t297 + store { ptr, i64, i64 } %t296, ptr %t297 + store { ptr, i64, i64 } %t298, ptr %a299 + call void @finch_str_drop(ptr %a299) + br label %endif7599 +endif7599: + %t300 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.arr_bool(ptr %a136) + call void @finch.drop.arr_int(ptr %a128) + call void @finch.drop.arr_S_gen_Leaf(ptr %a116) + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t300 +} + +define internal %S.gen.Plan @finch.gen.makePlan(ptr %p0, %S.ast.Type %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.gen.Plan, align 16 + %a5 = alloca i64, align 16 + %a6 = alloca i64, align 16 + %a12 = alloca %S.gen.Abi, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca i64, align 16 + %a76 = alloca %S.ast.Type, align 16 + %a80 = alloca %S.gen.Abi, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca i64, align 16 + %a88 = alloca i64, align 16 + %a90 = alloca i64, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca %S.gen.Abi, align 16 + %a155 = alloca %S.gen.Abi, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.gen.Plan zeroinitializer, ptr %a4 + store i64 6, ptr %a5 + store i64 8, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = load %S.ast.Type, ptr %a2 + %t9 = call %S.gen.Abi @finch.gen.classify(ptr %t7, %S.ast.Type %t8) + %t10 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t11 = load %S.gen.Abi, ptr %t10 + store %S.gen.Abi %t9, ptr %t10 + store %S.gen.Abi %t11, ptr %a12 + call void @finch.drop.S_gen_Abi(ptr %a12) + %t13 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } { ptr @.str.4827, i64 4, i64 0 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.4828, i64 4, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp eq i32 %t20, 0 + br i1 %t21, label %then7602, label %endif7604 +then7602: + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Type, ptr %a2 + %t24 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t22, %S.ast.Type %t23) + %t25 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t24, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + call void @finch_str_drop(ptr %a27) + br label %endif7604 +endif7604: + %t28 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t29 = getelementptr inbounds %S.gen.Abi, ptr %t28, i32 0, i32 0 + %t30 = load { ptr, i64, i64 }, ptr %t29 + store { ptr, i64, i64 } %t30, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.4829, i64 8, i64 0 }, ptr %a32 + %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) + %t34 = icmp ne i32 %t33, 0 + br i1 %t34, label %then7605, label %endif7607 +then7605: + %t35 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t36 = getelementptr inbounds %S.gen.Abi, ptr %t35, i32 0, i32 0 + %t37 = load { ptr, i64, i64 }, ptr %t36 + store { ptr, i64, i64 } { ptr @.str.4830, i64 6, i64 0 }, ptr %t36 + store { ptr, i64, i64 } %t37, ptr %a38 + call void @finch_str_drop(ptr %a38) + br label %endif7607 +endif7607: + %t39 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t40 = getelementptr inbounds %S.gen.Abi, ptr %t39, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.4831, i64 6, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br i1 %t45, label %then7608, label %else7609 +then7608: + %t46 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 3 + store i1 true, ptr %t46 + %t47 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + %t48 = load { ptr, i64, i64 }, ptr %t47 + store { ptr, i64, i64 } { ptr @.str.4832, i64 4, i64 0 }, ptr %t47 + store { ptr, i64, i64 } %t48, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load i64, ptr %a5 + %t51 = sub i64 %t50, 1 + store i64 %t51, ptr %a5 + br label %endif7610 +else7609: + %t52 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t53 = getelementptr inbounds %S.gen.Abi, ptr %t52, i32 0, i32 0 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.4833, i64 6, i64 0 }, ptr %a56 + %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) + %t58 = icmp ne i32 %t57, 0 + br i1 %t58, label %then7611, label %endif7613 +then7611: + %t59 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t60 = getelementptr inbounds %S.gen.Abi, ptr %t59, i32 0, i32 2 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t61, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + %t66 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t65, ptr %t62 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + br label %endif7613 +endif7613: + br label %endif7610 +endif7610: + store i64 0, ptr %a68 + br label %each.cond7614 +each.cond7614: + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = load i64, ptr %a68 + %t72 = icmp slt i64 %t71, %t70 + br i1 %t72, label %each.body7615, label %each.end7617 +each.body7615: + %t73 = load ptr, ptr %a3 + %t74 = getelementptr inbounds %S.ast.Type, ptr %t73, i64 %t71 + %t75 = load %S.ast.Type, ptr %t74 + store %S.ast.Type %t75, ptr %a76 + %t77 = load ptr, ptr %a1 + %t78 = load %S.ast.Type, ptr %a76 + %t79 = call %S.gen.Abi @finch.gen.classify(ptr %t77, %S.ast.Type %t78) + store %S.gen.Abi %t79, ptr %a80 + %t81 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t82, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.4834, i64 6, i64 0 }, ptr %a84 + %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) + %t86 = icmp ne i32 %t85, 0 + br i1 %t86, label %then7618, label %else7619 +then7618: + store i64 0, ptr %a87 + store i64 0, ptr %a88 + %t89 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 1 + store i64 0, ptr %a90 + br label %each.cond7621 +each.cond7621: + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 + %t92 = load i64, ptr %t91 + %t93 = load i64, ptr %a90 + %t94 = icmp slt i64 %t93, %t92 + br i1 %t94, label %each.body7622, label %each.end7624 +each.body7622: + %t95 = load ptr, ptr %t89 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t93 + %t97 = load { ptr, i64, i64 }, ptr %t96 + store { ptr, i64, i64 } %t97, ptr %a98 + %t99 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t99, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.4836, i64 1, i64 0 }, ptr %a102 + %t103 = call i32 @finch_str_starts(ptr %a100, ptr %a102) + %t104 = icmp ne i32 %t103, 0 + br i1 %t104, label %then7625, label %else7626 +then7625: + %t105 = load i64, ptr %a87 + %t106 = add i64 %t105, 1 + store i64 %t106, ptr %a87 + br label %endif7627 +else7626: + %t107 = load i64, ptr %a88 + %t108 = add i64 %t107, 1 + store i64 %t108, ptr %a88 + br label %endif7627 +endif7627: + br label %each.step7623 +each.step7623: + %t109 = load i64, ptr %a90 + %t110 = add i64 %t109, 1 + store i64 %t110, ptr %a90 + br label %each.cond7621 +each.end7624: + %t111 = load ptr, ptr %a1 + %t112 = icmp eq ptr %t111, null + br i1 %t112, label %panic7628, label %ok7629 +panic7628: + call void @finch_panic(ptr @.str.4837, i64 4425, ptr @.str.4838) + unreachable +ok7629: + %t113 = getelementptr inbounds %S.gen.Gen, ptr %t111, i32 0, i32 31 + %t114 = getelementptr inbounds %S.platform.Target, ptr %t113, i32 0, i32 1 + %t115 = load i1, ptr %t114 + br label %logic.from7630 +logic.from7630: + br i1 %t115, label %logic.end7632, label %logic.rhs7631 +logic.rhs7631: + %t116 = load ptr, ptr %a1 + %t117 = icmp eq ptr %t116, null + br i1 %t117, label %panic7633, label %ok7634 +panic7633: + call void @finch_panic(ptr @.str.4839, i64 4425, ptr @.str.4840) + unreachable +ok7634: + %t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 31 + %t119 = getelementptr inbounds %S.platform.Target, ptr %t118, i32 0, i32 4 + %t120 = load i1, ptr %t119 + br label %logic.rend7635 +logic.rend7635: + br label %logic.end7632 +logic.end7632: + %t121 = phi i1 [ true, %logic.from7630 ], [ %t120, %logic.rend7635 ] + br label %logic.from7636 +logic.from7636: + br i1 %t121, label %logic.end7638, label %logic.rhs7637 +logic.rhs7637: + %t122 = load i64, ptr %a87 + %t123 = load i64, ptr %a5 + %t124 = icmp sle i64 %t122, %t123 + br label %logic.from7639 +logic.from7639: + br i1 %t124, label %logic.rhs7640, label %logic.end7641 +logic.rhs7640: + %t125 = load i64, ptr %a88 + %t126 = load i64, ptr %a6 + %t127 = icmp sle i64 %t125, %t126 + br label %logic.rend7642 +logic.rend7642: + br label %logic.end7641 +logic.end7641: + %t128 = phi i1 [ false, %logic.from7639 ], [ %t127, %logic.rend7642 ] + br label %logic.rend7643 +logic.rend7643: + br label %logic.end7638 +logic.end7638: + %t129 = phi i1 [ true, %logic.from7636 ], [ %t128, %logic.rend7643 ] + br i1 %t129, label %then7644, label %else7645 +then7644: + %t130 = load i64, ptr %a87 + %t131 = load i64, ptr %a5 + %t132 = sub i64 %t131, %t130 + store i64 %t132, ptr %a5 + %t133 = load i64, ptr %a88 + %t134 = load i64, ptr %a6 + %t135 = sub i64 %t134, %t133 + store i64 %t135, ptr %a6 + br label %endif7646 +else7645: + %t136 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 + %t137 = load { ptr, i64, i64 }, ptr %t136 + store { ptr, i64, i64 } { ptr @.str.4841, i64 6, i64 0 }, ptr %t136 + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_drop(ptr %a138) + br label %endif7646 +endif7646: + br label %endif7620 +else7619: + %t139 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 + %t140 = load { ptr, i64, i64 }, ptr %t139 + store { ptr, i64, i64 } %t140, ptr %a141 + store { ptr, i64, i64 } { ptr @.str.4842, i64 6, i64 0 }, ptr %a142 + %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) + %t144 = icmp ne i32 %t143, 0 + br i1 %t144, label %then7647, label %endif7649 +then7647: + %t145 = load %S.ast.Type, ptr %a76 + %t146 = call i1 @finch.gen.isFloat(%S.ast.Type %t145) + br i1 %t146, label %then7650, label %else7651 +then7650: + %t147 = load i64, ptr %a6 + %t148 = sub i64 %t147, 1 + store i64 %t148, ptr %a6 + br label %endif7652 +else7651: + %t149 = load i64, ptr %a5 + %t150 = sub i64 %t149, 1 + store i64 %t150, ptr %a5 + br label %endif7652 +endif7652: + br label %endif7649 +endif7649: + br label %endif7620 +endif7620: + %t151 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 1 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load %S.gen.Abi, ptr %a80 + store %S.gen.Abi %t153, ptr %a154 + call void @finch.copy.S_gen_Abi(ptr %a155, ptr %a154) + %t156 = load %S.gen.Abi, ptr %a155 + %t157 = load i64, ptr %t152 + %t158 = add i64 %t157, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t158, i64 ptrtoint (ptr getelementptr (%S.gen.Abi, ptr null, i32 1) to i64)) + %t159 = load ptr, ptr %t151 + %t160 = getelementptr inbounds %S.gen.Abi, ptr %t159, i64 %t157 + store %S.gen.Abi %t156, ptr %t160 + store i64 %t158, ptr %t152 + call void @finch.drop.S_gen_Abi(ptr %a80) + br label %each.step7616 +each.step7616: + %t161 = load i64, ptr %a68 + %t162 = add i64 %t161, 1 + store i64 %t162, ptr %a68 + br label %each.cond7614 +each.end7617: + %t163 = load %S.gen.Plan, ptr %a4 + ret %S.gen.Plan %t163 +} + +define internal void @finch.gen.checkByValue(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca %S.gen.StructDef, align 16 + %a28 = alloca %S.gen.StructDef, align 16 + %a30 = alloca %S.gen.StructDef, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4843, i64 6, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp eq i32 %t10, 0 + br i1 %t11, label %then7653, label %endif7655 +then7653: + ret void +endif7655: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic7656, label %ok7657 +panic7656: + call void @finch_panic(ptr @.str.4844, i64 4447, ptr @.str.4845) + unreachable +ok7657: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 3 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call i64 @finch.gen.findStruct(ptr %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t19) + %t21 = load { ptr, i64, i64 }, ptr %t14 + %t22 = extractvalue { ptr, i64, i64 } %t21, 1 + %t23 = icmp uge i64 %t20, %t22 + br i1 %t23, label %range7658, label %inrange7659 +range7658: + call void @finch_panic_index(ptr @.str.4846, i64 4447, i64 %t20, i64 %t22) + unreachable +inrange7659: + %t24 = extractvalue { ptr, i64, i64 } %t21, 0 + %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 + %t26 = load %S.gen.StructDef, ptr %t25 + store %S.gen.StructDef %t26, ptr %a27 + call void @finch.copy.S_gen_StructDef(ptr %a28, ptr %a27) + %t29 = load %S.gen.StructDef, ptr %a28 + store %S.gen.StructDef %t29, ptr %a30 + %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 2 + %t32 = load i1, ptr %t31 + %t33 = xor i1 %t32, true + br i1 %t33, label %then7660, label %endif7662 +then7660: + %t34 = load ptr, ptr %a1 + %t35 = load %S.ast.Node, ptr %a2 + %t36 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.4847, i64 16, i64 0 }, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.4848, i64 2, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t45, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t45, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.4849, i64 18, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + %t57 = load %S.ast.Type, ptr %a4 + %t58 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t57) + store { ptr, i64, i64 } %t56, ptr %a60 + store { ptr, i64, i64 } %t58, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t56, ptr %a62 + call void @finch_str_drop(ptr %a62) + store { ptr, i64, i64 } %t58, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t64, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.4850, i64 20, i64 0 }, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + call void @finch.gen.fail(ptr %t34, %S.ast.Node %t35, { ptr, i64, i64 } %t69) + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_drop(ptr %a70) + br label %endif7662 +endif7662: + %t71 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1 + %t73 = load i64, ptr %t72 + %t74 = icmp sgt i64 %t73, 0 + br i1 %t74, label %then7663, label %endif7665 +then7663: + %t75 = load ptr, ptr %a1 + %t76 = load %S.ast.Node, ptr %a2 + %t77 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.4851, i64 16, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t81, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.4852, i64 2, i64 0 }, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t81, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a82 + %t87 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t86, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t86, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4853, i64 12, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load %S.ast.Type, ptr %a4 + %t99 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t98) + store { ptr, i64, i64 } %t97, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t97, ptr %a103 + call void @finch_str_drop(ptr %a103) + store { ptr, i64, i64 } %t99, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.4854, i64 40, i64 0 }, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t105, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t110, ptr %a114 + store { ptr, i64, i64 } %t112, ptr %a115 + call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) + store { ptr, i64, i64 } %t110, ptr %a116 + call void @finch_str_drop(ptr %a116) + %t117 = load { ptr, i64, i64 }, ptr %a113 + call void @finch.gen.fail(ptr %t75, %S.ast.Node %t76, { ptr, i64, i64 } %t117) + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_drop(ptr %a118) + br label %endif7665 +endif7665: + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret void +} + +define internal i1 @finch.gen.cPlain(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + %t3 = call i1 @finch.gen.isNumber(%S.ast.Type %t2) + br label %logic.from7666 +logic.from7666: + br i1 %t3, label %logic.end7668, label %logic.rhs7667 +logic.rhs7667: + %t4 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4855, i64 4, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.rend7669 +logic.rend7669: + br label %logic.end7668 +logic.end7668: + %t10 = phi i1 [ true, %logic.from7666 ], [ %t9, %logic.rend7669 ] + br label %logic.from7670 +logic.from7670: + br i1 %t10, label %logic.end7672, label %logic.rhs7671 +logic.rhs7671: + %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.4856, i64 4, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.rend7673 +logic.rend7673: + br label %logic.end7672 +logic.end7672: + %t17 = phi i1 [ true, %logic.from7670 ], [ %t16, %logic.rend7673 ] + br label %logic.from7674 +logic.from7674: + br i1 %t17, label %logic.end7676, label %logic.rhs7675 +logic.rhs7675: + %t18 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.4857, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend7677 +logic.rend7677: + br label %logic.end7676 +logic.end7676: + %t24 = phi i1 [ true, %logic.from7674 ], [ %t23, %logic.rend7677 ] + ret i1 %t24 +} + +define internal void @finch.gen.checkExport(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.FnSig, align 16 + %a23 = alloca i64, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca i64, align 16 + %a106 = alloca %S.gen.FnSig, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.FnSig %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 2 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = icmp sgt i64 %t6, 0 + br i1 %t7, label %then7678, label %endif7680 +then7678: + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.4858, i64 59, i64 0 }) + br label %endif7680 +endif7680: + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 7 + %t11 = load i1, ptr %t10 + br i1 %t11, label %then7681, label %endif7683 +then7681: + %t12 = load ptr, ptr %a1 + %t13 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t12, %S.ast.Node %t13, { ptr, i64, i64 } { ptr @.str.4859, i64 74, i64 0 }) + br label %endif7683 +endif7683: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 3 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp sgt i64 %t16, 0 + br i1 %t17, label %then7684, label %endif7686 +then7684: + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.4860, i64 29, i64 0 }) + br label %endif7686 +endif7686: + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load i64, ptr %t21 + store i64 0, ptr %a23 + br label %for.cond7687 +for.cond7687: + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, %t22 + br i1 %t25, label %for.body7688, label %for.end7690 +for.body7688: + %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 + %t27 = load i64, ptr %a23 + %t28 = load { ptr, i64, i64 }, ptr %t26 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 %t27, %t29 + br i1 %t30, label %range7691, label %inrange7692 +range7691: + call void @finch_panic_index(ptr @.str.4861, i64 4472, i64 %t27, i64 %t29) + unreachable +inrange7692: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 %t27 + %t33 = load %S.ast.Type, ptr %t32 + %t34 = call i1 @finch.gen.cPlain(%S.ast.Type %t33) + %t35 = xor i1 %t34, true + br i1 %t35, label %then7693, label %endif7695 +then7693: + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t38 = load i64, ptr %a23 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range7696, label %inrange7697 +range7696: + call void @finch_panic_index(ptr @.str.4862, i64 4473, i64 %t38, i64 %t40) + unreachable +inrange7697: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t38 + %t44 = load %S.ast.Node, ptr %t43 + %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 + %t46 = load i64, ptr %a23 + %t47 = load { ptr, i64, i64 }, ptr %t45 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = icmp uge i64 %t46, %t48 + br i1 %t49, label %range7698, label %inrange7699 +range7698: + call void @finch_panic_index(ptr @.str.4864, i64 4473, i64 %t46, i64 %t48) + unreachable +inrange7699: + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = getelementptr inbounds %S.ast.Type, ptr %t50, i64 %t46 + %t52 = load %S.ast.Type, ptr %t51 + %t53 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t52) + store { ptr, i64, i64 } { ptr @.str.4863, i64 66, i64 0 }, ptr %a55 + store { ptr, i64, i64 } %t53, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t53, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t58, ptr %a60 + store { ptr, i64, i64 } { ptr @.str.4865, i64 50, i64 0 }, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + call void @finch.gen.fail(ptr %t36, %S.ast.Node %t44, { ptr, i64, i64 } %t63) + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_drop(ptr %a64) + br label %endif7695 +endif7695: + br label %for.step7689 +for.step7689: + %t65 = load i64, ptr %a23 + %t66 = add i64 %t65, 1 + store i64 %t66, ptr %a23 + br label %for.cond7687 +for.end7690: + %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 + %t68 = getelementptr inbounds %S.ast.Type, ptr %t67, i32 0, i32 0 + %t69 = load { ptr, i64, i64 }, ptr %t68 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.4866, i64 4, i64 0 }, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp eq i32 %t72, 0 + br label %logic.from7700 +logic.from7700: + br i1 %t73, label %logic.rhs7701, label %logic.end7702 +logic.rhs7701: + %t74 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 + %t75 = load %S.ast.Type, ptr %t74 + %t76 = call i1 @finch.gen.cPlain(%S.ast.Type %t75) + %t77 = xor i1 %t76, true + br label %logic.rend7703 +logic.rend7703: + br label %logic.end7702 +logic.end7702: + %t78 = phi i1 [ false, %logic.from7700 ], [ %t77, %logic.rend7703 ] + br i1 %t78, label %then7704, label %endif7706 +then7704: + %t79 = load ptr, ptr %a1 + %t80 = load %S.ast.Node, ptr %a2 + %t81 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 + %t82 = load %S.ast.Type, ptr %t81 + %t83 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t82) + store { ptr, i64, i64 } { ptr @.str.4867, i64 69, i64 0 }, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.4868, i64 1, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + call void @finch.gen.fail(ptr %t79, %S.ast.Node %t80, { ptr, i64, i64 } %t93) + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + br label %endif7706 +endif7706: + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic7707, label %ok7708 +panic7707: + call void @finch_panic(ptr @.str.4869, i64 4479, ptr @.str.4870) + unreachable +ok7708: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 15 + store i64 0, ptr %a98 + br label %each.cond7709 +each.cond7709: + %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i32 0, i32 1 + %t100 = load i64, ptr %t99 + %t101 = load i64, ptr %a98 + %t102 = icmp slt i64 %t101, %t100 + br i1 %t102, label %each.body7710, label %each.end7712 +each.body7710: + %t103 = load ptr, ptr %t97 + %t104 = getelementptr inbounds %S.gen.FnSig, ptr %t103, i64 %t101 + %t105 = load %S.gen.FnSig, ptr %t104 + store %S.gen.FnSig %t105, ptr %a106 + %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 5 + %t108 = load i1, ptr %t107 + br label %logic.from7713 +logic.from7713: + br i1 %t108, label %logic.rhs7714, label %logic.end7715 +logic.rhs7714: + %t109 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 1 + %t110 = load { ptr, i64, i64 }, ptr %t109 + %t111 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t110, ptr %a113 + store { ptr, i64, i64 } %t112, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br label %logic.rend7716 +logic.rend7716: + br label %logic.end7715 +logic.end7715: + %t117 = phi i1 [ false, %logic.from7713 ], [ %t116, %logic.rend7716 ] + br i1 %t117, label %then7717, label %endif7719 +then7717: + %t118 = load ptr, ptr %a1 + %t119 = load %S.ast.Node, ptr %a2 + %t120 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %t120 + store { ptr, i64, i64 } { ptr @.str.4871, i64 1, i64 0 }, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t125, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.4872, i64 38, i64 0 }, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t125, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.fail(ptr %t118, %S.ast.Node %t119, { ptr, i64, i64 } %t130) + store { ptr, i64, i64 } %t130, ptr %a131 + call void @finch_str_drop(ptr %a131) + br label %endif7719 +endif7719: + br label %each.step7711 +each.step7711: + %t132 = load i64, ptr %a98 + %t133 = add i64 %t132, 1 + store i64 %t133, ptr %a98 + br label %each.cond7709 +each.end7712: + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %p0, %S.gen.FnSig %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.FnSig, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca %S.gen.Saved, align 16 + %a11 = alloca i64, align 16 + %a22 = alloca %S.ast.Type, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.ast.Type, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.FnSig %p1, ptr %a2 + store { ptr, i64, i64 } zeroinitializer, ptr %a3 + store { ptr, i64, i64 } zeroinitializer, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t5) + store %S.gen.Saved %t6, ptr %a7 + %t8 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + store i64 0, ptr %a11 + br label %for.cond7720 +for.cond7720: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t10 + br i1 %t13, label %for.body7721, label %for.end7723 +for.body7721: + %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 + %t15 = load i64, ptr %a11 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range7724, label %inrange7725 +range7724: + call void @finch_panic_index(ptr @.str.4873, i64 4492, i64 %t15, i64 %t17) + unreachable +inrange7725: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.ast.Type, ptr %t19, i64 %t15 + %t21 = load %S.ast.Type, ptr %t20 + store %S.ast.Type %t21, ptr %a22 + call void @finch.copy.S_ast_Type(ptr %a23, ptr %a22) + %t24 = load %S.ast.Type, ptr %a23 + store %S.ast.Type %t24, ptr %a25 + %t26 = getelementptr inbounds %S.ast.Type, ptr %a25, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.4874, i64 4, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %then7726, label %else7727 +then7726: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t33 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a34, i64 %t33) + %t35 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.4875, i64 13, i64 0 }, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load i64, ptr %t32 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a3, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a3 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } %t40, ptr %t44 + store i64 %t42, ptr %t32 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t46 = load ptr, ptr %a1 + %t47 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a48, i64 %t47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.4877, i64 13, i64 0 }, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.4878, i64 3, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + %t60 = call { ptr, i64, i64 } @finch.gen.op(ptr %t46, { ptr, i64, i64 } %t59) + store { ptr, i64, i64 } %t59, ptr %a61 + call void @finch_str_drop(ptr %a61) + store { ptr, i64, i64 } { ptr @.str.4876, i64 3, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = load i64, ptr %t45 + %t68 = add i64 %t67, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t68, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t69 = load ptr, ptr %a4 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t67 + store { ptr, i64, i64 } %t66, ptr %t70 + store i64 %t68, ptr %t45 + br label %endif7728 +else7727: + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t72 = load ptr, ptr %a1 + %t73 = load %S.ast.Type, ptr %a25 + %t74 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t72, %S.ast.Type %t73) + %t75 = load ptr, ptr %a1 + %t76 = load %S.ast.Type, ptr %a25 + %t77 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t75, %S.ast.Type %t76) + store { ptr, i64, i64 } %t74, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t74, ptr %a81 + call void @finch_str_drop(ptr %a81) + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.4879, i64 3, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + %t89 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t88, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a92 + %t98 = load i64, ptr %t71 + %t99 = add i64 %t98, 1 + call void @finch_arr_reserve(ptr %a3, i64 %t99, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t100 = load ptr, ptr %a3 + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t98 + store { ptr, i64, i64 } %t97, ptr %t101 + store i64 %t99, ptr %t71 + %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t103 = load ptr, ptr %a1 + %t104 = load %S.ast.Type, ptr %a25 + %t105 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t103, %S.ast.Type %t104) + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.4880, i64 3, i64 0 }, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t105, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a112, i64 %t111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t110, ptr %a117 + call void @finch_str_drop(ptr %a117) + store { ptr, i64, i64 } %t113, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a114 + %t120 = load i64, ptr %t102 + %t121 = add i64 %t120, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t121, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t122 = load ptr, ptr %a4 + %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 %t120 + store { ptr, i64, i64 } %t119, ptr %t123 + store i64 %t121, ptr %t102 + br label %endif7728 +endif7728: + call void @finch.drop.S_ast_Type(ptr %a25) + br label %for.step7722 +for.step7722: + %t124 = load i64, ptr %a11 + %t125 = add i64 %t124, 1 + store i64 %t125, ptr %a11 + br label %for.cond7720 +for.end7723: + %t126 = load ptr, ptr %a1 + %t127 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t128 = load %S.ast.Type, ptr %t127 + %t129 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t126, %S.ast.Type %t128) + store { ptr, i64, i64 } { ptr @.str.4881, i64 5, i64 0 }, ptr %a131 + store { ptr, i64, i64 } %t129, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + store { ptr, i64, i64 } %t129, ptr %a133 + call void @finch_str_drop(ptr %a133) + %t134 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t134, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.4882, i64 1, i64 0 }, ptr %a137 + call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) + store { ptr, i64, i64 } %t134, ptr %a138 + call void @finch_str_drop(ptr %a138) + %t139 = load { ptr, i64, i64 }, ptr %a135 + %t140 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 + %t141 = load { ptr, i64, i64 }, ptr %t140 + store { ptr, i64, i64 } %t139, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t139, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.4883, i64 1, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4884, i64 2, i64 0 }, ptr %a153 + call void @finch_str_join(ptr %a154, ptr %a4, ptr %a153) + %t155 = load { ptr, i64, i64 }, ptr %a154 + store { ptr, i64, i64 } %t151, ptr %a157 + store { ptr, i64, i64 } %t155, ptr %a158 + call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) + store { ptr, i64, i64 } %t151, ptr %a159 + call void @finch_str_drop(ptr %a159) + store { ptr, i64, i64 } %t155, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a156 + store { ptr, i64, i64 } %t161, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.4885, i64 1, i64 0 }, ptr %a164 + call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) + store { ptr, i64, i64 } %t161, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.4886, i64 4, i64 0 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4887, i64 0, i64 0 }, ptr %a169 + %t170 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t171 = getelementptr inbounds %S.ast.Type, ptr %t170, i32 0, i32 0 + %t172 = load { ptr, i64, i64 }, ptr %t171 + store { ptr, i64, i64 } %t172, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.4888, i64 4, i64 0 }, ptr %a174 + %t175 = call i32 @finch_str_eq(ptr %a173, ptr %a174) + %t176 = icmp ne i32 %t175, 0 + br i1 %t176, label %then7729, label %else7730 +then7729: + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a167 + call void @finch.gen.emit(ptr %t177, { ptr, i64, i64 } %t178) + %t179 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t179, { ptr, i64, i64 } { ptr @.str.4889, i64 8, i64 0 }) + br label %endif7731 +else7730: + %t180 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t181 = getelementptr inbounds %S.ast.Type, ptr %t180, i32 0, i32 0 + %t182 = load { ptr, i64, i64 }, ptr %t181 + store { ptr, i64, i64 } %t182, ptr %a183 + store { ptr, i64, i64 } { ptr @.str.4890, i64 4, i64 0 }, ptr %a184 + %t185 = call i32 @finch_str_eq(ptr %a183, ptr %a184) + %t186 = icmp ne i32 %t185, 0 + br i1 %t186, label %then7732, label %else7733 +then7732: + %t187 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4891, i64 2, i64 0 }, ptr %a168 + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch_str_drop(ptr %a188) + %t189 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4892, i64 8, i64 0 }, ptr %a169 + store { ptr, i64, i64 } %t189, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load ptr, ptr %a1 + %t192 = load ptr, ptr %a1 + %t193 = load ptr, ptr %a1 + %t194 = load { ptr, i64, i64 }, ptr %a167 + %t195 = call { ptr, i64, i64 } @finch.gen.op(ptr %t193, { ptr, i64, i64 } %t194) + store { ptr, i64, i64 } { ptr @.str.4894, i64 8, i64 0 }, ptr %a197 + store { ptr, i64, i64 } %t195, ptr %a198 + call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) + store { ptr, i64, i64 } %t195, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } %t200, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.4895, i64 6, i64 0 }, ptr %a203 + call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) + store { ptr, i64, i64 } %t200, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a201 + %t206 = call { ptr, i64, i64 } @finch.gen.op(ptr %t192, { ptr, i64, i64 } %t205) + store { ptr, i64, i64 } %t205, ptr %a207 + call void @finch_str_drop(ptr %a207) + store { ptr, i64, i64 } { ptr @.str.4893, i64 7, i64 0 }, ptr %a209 + store { ptr, i64, i64 } %t206, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + store { ptr, i64, i64 } %t206, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a208 + call void @finch.gen.emit(ptr %t191, { ptr, i64, i64 } %t212) + store { ptr, i64, i64 } %t212, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %endif7734 +else7733: + %t214 = load ptr, ptr %a1 + %t215 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t216 = load %S.ast.Type, ptr %t215 + %t217 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t214, %S.ast.Type %t216) + %t218 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t217, ptr %a168 + store { ptr, i64, i64 } %t218, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load ptr, ptr %a1 + %t221 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t222 = load %S.ast.Type, ptr %t221 + %t223 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t220, %S.ast.Type %t222) + %t224 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t223, ptr %a169 + store { ptr, i64, i64 } %t224, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load ptr, ptr %a1 + %t227 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4896, i64 4, i64 0 }, ptr %a229 + store { ptr, i64, i64 } %t227, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a228 + store { ptr, i64, i64 } %t231, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.4897, i64 1, i64 0 }, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t231, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + %t237 = load ptr, ptr %a1 + %t238 = load { ptr, i64, i64 }, ptr %a167 + %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t237, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t236, ptr %a241 + store { ptr, i64, i64 } %t239, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + store { ptr, i64, i64 } %t236, ptr %a243 + call void @finch_str_drop(ptr %a243) + store { ptr, i64, i64 } %t239, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.emit(ptr %t226, { ptr, i64, i64 } %t245) + store { ptr, i64, i64 } %t245, ptr %a246 + call void @finch_str_drop(ptr %a246) + br label %endif7734 +endif7734: + br label %endif7731 +endif7731: + store { ptr, i64, i64 } { ptr @.str.4898, i64 0, i64 0 }, ptr %a247 + %t248 = load ptr, ptr %a1 + %t249 = icmp eq ptr %t248, null + br i1 %t249, label %panic7735, label %ok7736 +panic7735: + call void @finch_panic(ptr @.str.4899, i64 4517, ptr @.str.4900) + unreachable +ok7736: + %t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 31 + %t251 = getelementptr inbounds %S.platform.Target, ptr %t250, i32 0, i32 1 + %t252 = load i1, ptr %t251 + br i1 %t252, label %then7737, label %endif7739 +then7737: + %t253 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.4901, i64 10, i64 0 }, ptr %a247 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_drop(ptr %a254) + br label %endif7739 +endif7739: + %t255 = load ptr, ptr %a1 + %t256 = load %S.gen.Saved, ptr %a7 + %t257 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.4902, i64 6, i64 0 }, ptr %a259 + store { ptr, i64, i64 } %t257, ptr %a260 + call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a258 + %t262 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t261, ptr %a264 + store { ptr, i64, i64 } %t262, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + store { ptr, i64, i64 } %t261, ptr %a266 + call void @finch_str_drop(ptr %a266) + %t267 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t267, ptr %a269 + store { ptr, i64, i64 } { ptr @.str.4903, i64 1, i64 0 }, ptr %a270 + call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) + store { ptr, i64, i64 } %t267, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load { ptr, i64, i64 }, ptr %a268 + %t273 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t272, ptr %a275 + store { ptr, i64, i64 } %t273, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t272, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + store { ptr, i64, i64 } %t278, ptr %a280 + store { ptr, i64, i64 } { ptr @.str.4904, i64 2, i64 0 }, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } %t283, ptr %a287 + store { ptr, i64, i64 } %t285, ptr %a288 + call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) + store { ptr, i64, i64 } %t283, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a286 + store { ptr, i64, i64 } %t290, ptr %a292 + store { ptr, i64, i64 } { ptr @.str.4905, i64 1, i64 0 }, ptr %a293 + call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293) + store { ptr, i64, i64 } %t290, ptr %a294 + call void @finch_str_drop(ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a291 + %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4906, i64 2, i64 0 }, ptr %a297 + call void @finch_str_join(ptr %a298, ptr %a3, ptr %a297) + %t299 = load { ptr, i64, i64 }, ptr %a298 + store { ptr, i64, i64 } %t295, ptr %a301 + store { ptr, i64, i64 } %t299, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t295, ptr %a303 + call void @finch_str_drop(ptr %a303) + store { ptr, i64, i64 } %t299, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } %t305, ptr %a307 + store { ptr, i64, i64 } { ptr @.str.4907, i64 1, i64 0 }, ptr %a308 + call void @finch_str_concat(ptr %a306, ptr %a307, ptr %a308) + store { ptr, i64, i64 } %t305, ptr %a309 + call void @finch_str_drop(ptr %a309) + %t310 = load { ptr, i64, i64 }, ptr %a306 + call void @finch.gen.endHelper(ptr %t255, %S.gen.Saved %t256, { ptr, i64, i64 } %t310) + store { ptr, i64, i64 } %t310, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 + %t313 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t313, ptr %a314 + call void @finch_str_copy(ptr %a315, ptr %a314) + %t316 = load { ptr, i64, i64 }, ptr %a315 + call void @finch_str_drop(ptr %a247) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a168) + call void @finch_str_drop(ptr %a167) + call void @finch.drop.S_gen_Saved(ptr %a7) + call void @finch.drop.arr_str(ptr %a4) + call void @finch.drop.arr_str(ptr %a3) + ret { ptr, i64, i64 } %t316 +} + +define internal void @finch.drop.arr_S_gen_Abi(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond7862 +n.cond7862: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body7863, label %n.end7864 +n.body7863: + %t7 = getelementptr inbounds %S.gen.Abi, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Abi(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond7862 +n.end7864: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Plan(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 0 + call void @finch.drop.S_gen_Abi(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_gen_Abi(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.cThunk(ptr %p0, i64 %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a14 = alloca %S.gen.FnSig, align 16 + %a15 = alloca %S.gen.FnSig, align 16 + %a17 = alloca %S.gen.FnSig, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i64, align 16 + %a51 = alloca i64, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca i64, align 16 + %a108 = alloca %S.ast.Type, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca %S.gen.Plan, align 16 + %a276 = alloca %S.gen.Saved, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca i64, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca i64, align 16 + %a318 = alloca %S.ast.Type, align 16 + %a319 = alloca %S.ast.Type, align 16 + %a321 = alloca %S.ast.Type, align 16 + %a330 = alloca %S.gen.Abi, align 16 + %a331 = alloca %S.gen.Abi, align 16 + %a333 = alloca %S.gen.Abi, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca i64, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a544 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a648 = alloca { ptr, i64, i64 }, align 16 + %a649 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a653 = alloca { ptr, i64, i64 }, align 16 + %a654 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a684 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a737 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a793 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a803 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a805 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a808 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a810 = alloca { ptr, i64, i64 }, align 16 + %a813 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic7740, label %ok7741 +panic7740: + call void @finch_panic(ptr @.str.4908, i64 4526, ptr @.str.4909) + unreachable +ok7741: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 + %t7 = load i64, ptr %a2 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range7742, label %inrange7743 +range7742: + call void @finch_panic_index(ptr @.str.4910, i64 4526, i64 %t7, i64 %t9) + unreachable +inrange7743: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.FnSig, ptr %t11, i64 %t7 + %t13 = load %S.gen.FnSig, ptr %t12 + store %S.gen.FnSig %t13, ptr %a14 + call void @finch.copy.S_gen_FnSig(ptr %a15, ptr %a14) + %t16 = load %S.gen.FnSig, ptr %a15 + store %S.gen.FnSig %t16, ptr %a17 + %t18 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t19) + store { ptr, i64, i64 } { ptr @.str.4911, i64 9, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t20, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.4912, i64 1, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t30, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t30, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a38 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic7744, label %ok7745 +panic7744: + call void @finch_panic(ptr @.str.4913, i64 4528, ptr @.str.4914) + unreachable +ok7745: + %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 40 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 + %t43 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.4915, i64 2, i64 0 }, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a44 + store i64 -1, ptr %a48 + %t49 = load i64, ptr %t42 + %t50 = load ptr, ptr %t41 + store i64 0, ptr %a51 + br label %find.cond7746 +find.cond7746: + %t52 = load i64, ptr %a51 + %t53 = icmp slt i64 %t52, %t49 + br i1 %t53, label %find.body7747, label %find.end7750 +find.body7747: + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 + %t55 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t55, ptr %a56 + store { ptr, i64, i64 } %t47, ptr %a57 + %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) + %t59 = icmp ne i32 %t58, 0 + br i1 %t59, label %find.hit7748, label %find.next7749 +find.hit7748: + store i64 %t52, ptr %a48 + br label %find.end7750 +find.next7749: + %t60 = add i64 %t52, 1 + store i64 %t60, ptr %a51 + br label %find.cond7746 +find.end7750: + store { ptr, i64, i64 } %t47, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load i64, ptr %a48 + %t63 = icmp sge i64 %t62, 0 + br i1 %t63, label %then7751, label %endif7753 +then7751: + %t64 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.drop.S_gen_FnSig(ptr %a17) + ret { ptr, i64, i64 } %t64 +endif7753: + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic7754, label %ok7755 +panic7754: + call void @finch_panic(ptr @.str.4916, i64 4531, ptr @.str.4917) + unreachable +ok7755: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 40 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 + %t69 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.4918, i64 2, i64 0 }, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a70 + %t74 = load i64, ptr %t68 + %t75 = add i64 %t74, 1 + call void @finch_arr_reserve(ptr %t67, i64 %t75, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t76 = load ptr, ptr %t67 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 + store { ptr, i64, i64 } %t73, ptr %t77 + store i64 %t75, ptr %t68 + %t78 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 2 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i32 0, i32 1 + %t80 = load i64, ptr %t79 + %t81 = icmp sgt i64 %t80, 0 + br label %logic.from7756 +logic.from7756: + br i1 %t81, label %logic.end7758, label %logic.rhs7757 +logic.rhs7757: + %t82 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 9 + %t83 = load i1, ptr %t82 + br label %logic.rend7759 +logic.rend7759: + br label %logic.end7758 +logic.end7758: + %t84 = phi i1 [ true, %logic.from7756 ], [ %t83, %logic.rend7759 ] + br i1 %t84, label %then7760, label %endif7762 +then7760: + %t85 = load ptr, ptr %a1 + %t86 = load %S.ast.Node, ptr %a3 + %t87 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t88 = load { ptr, i64, i64 }, ptr %t87 + store { ptr, i64, i64 } { ptr @.str.4919, i64 5, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4920, i64 81, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + call void @finch.gen.fail(ptr %t85, %S.ast.Node %t86, { ptr, i64, i64 } %t97) + store { ptr, i64, i64 } %t97, ptr %a98 + call void @finch_str_drop(ptr %a98) + br label %endif7762 +endif7762: + %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + store i64 0, ptr %a100 + br label %each.cond7763 +each.cond7763: + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 + %t102 = load i64, ptr %t101 + %t103 = load i64, ptr %a100 + %t104 = icmp slt i64 %t103, %t102 + br i1 %t104, label %each.body7764, label %each.end7766 +each.body7764: + %t105 = load ptr, ptr %t99 + %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t103 + %t107 = load %S.ast.Type, ptr %t106 + store %S.ast.Type %t107, ptr %a108 + %t109 = load %S.ast.Type, ptr %a108 + %t110 = call i1 @finch.gen.isNumber(%S.ast.Type %t109) + br label %logic.from7767 +logic.from7767: + br i1 %t110, label %logic.end7769, label %logic.rhs7768 +logic.rhs7768: + %t111 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.4921, i64 4, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br label %logic.rend7770 +logic.rend7770: + br label %logic.end7769 +logic.end7769: + %t117 = phi i1 [ true, %logic.from7767 ], [ %t116, %logic.rend7770 ] + br label %logic.from7771 +logic.from7771: + br i1 %t117, label %logic.end7773, label %logic.rhs7772 +logic.rhs7772: + %t118 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t119 = load { ptr, i64, i64 }, ptr %t118 + store { ptr, i64, i64 } %t119, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.4922, i64 4, i64 0 }, ptr %a121 + %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) + %t123 = icmp ne i32 %t122, 0 + br label %logic.rend7774 +logic.rend7774: + br label %logic.end7773 +logic.end7773: + %t124 = phi i1 [ true, %logic.from7771 ], [ %t123, %logic.rend7774 ] + br label %logic.from7775 +logic.from7775: + br i1 %t124, label %logic.end7777, label %logic.rhs7776 +logic.rhs7776: + %t125 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t126, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.4923, i64 3, i64 0 }, ptr %a128 + %t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128) + %t130 = icmp ne i32 %t129, 0 + br label %logic.rend7778 +logic.rend7778: + br label %logic.end7777 +logic.end7777: + %t131 = phi i1 [ true, %logic.from7775 ], [ %t130, %logic.rend7778 ] + br label %logic.from7779 +logic.from7779: + br i1 %t131, label %logic.end7781, label %logic.rhs7780 +logic.rhs7780: + %t132 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.4924, i64 6, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp ne i32 %t136, 0 + br label %logic.from7782 +logic.from7782: + br i1 %t137, label %logic.rhs7783, label %logic.end7784 +logic.rhs7783: + %t138 = load ptr, ptr %a1 + %t139 = icmp eq ptr %t138, null + br i1 %t139, label %panic7785, label %ok7786 +panic7785: + call void @finch_panic(ptr @.str.4925, i64 4536, ptr @.str.4926) + unreachable +ok7786: + %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 + %t141 = load ptr, ptr %a1 + %t142 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 3 + %t143 = load { ptr, i64, i64 }, ptr %t142 + %t144 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 2 + %t145 = load { ptr, i64, i64 }, ptr %t144 + %t146 = call i64 @finch.gen.findStruct(ptr %t141, { ptr, i64, i64 } %t143, { ptr, i64, i64 } %t145) + %t147 = load { ptr, i64, i64 }, ptr %t140 + %t148 = extractvalue { ptr, i64, i64 } %t147, 1 + %t149 = icmp uge i64 %t146, %t148 + br i1 %t149, label %range7787, label %inrange7788 +range7787: + call void @finch_panic_index(ptr @.str.4927, i64 4536, i64 %t146, i64 %t148) + unreachable +inrange7788: + %t150 = extractvalue { ptr, i64, i64 } %t147, 0 + %t151 = getelementptr inbounds %S.gen.StructDef, ptr %t150, i64 %t146 + %t152 = getelementptr inbounds %S.gen.StructDef, ptr %t151, i32 0, i32 2 + %t153 = load i1, ptr %t152 + br label %logic.rend7789 +logic.rend7789: + br label %logic.end7784 +logic.end7784: + %t154 = phi i1 [ false, %logic.from7782 ], [ %t153, %logic.rend7789 ] + br label %logic.rend7790 +logic.rend7790: + br label %logic.end7781 +logic.end7781: + %t155 = phi i1 [ true, %logic.from7779 ], [ %t154, %logic.rend7790 ] + %t156 = xor i1 %t155, true + br i1 %t156, label %then7791, label %endif7793 +then7791: + %t157 = load ptr, ptr %a1 + %t158 = load %S.ast.Node, ptr %a3 + %t159 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + store { ptr, i64, i64 } { ptr @.str.4928, i64 5, i64 0 }, ptr %a162 + store { ptr, i64, i64 } %t160, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + store { ptr, i64, i64 } %t164, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.4929, i64 95, i64 0 }, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t164, ptr %a168 + call void @finch_str_drop(ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a165 + %t170 = load %S.ast.Type, ptr %a108 + %t171 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t170) + store { ptr, i64, i64 } %t169, ptr %a173 + store { ptr, i64, i64 } %t171, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t169, ptr %a175 + call void @finch_str_drop(ptr %a175) + store { ptr, i64, i64 } %t171, ptr %a176 + call void @finch_str_drop(ptr %a176) + %t177 = load { ptr, i64, i64 }, ptr %a172 + call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t177) + store { ptr, i64, i64 } %t177, ptr %a178 + call void @finch_str_drop(ptr %a178) + br label %endif7793 +endif7793: + br label %each.step7765 +each.step7765: + %t179 = load i64, ptr %a100 + %t180 = add i64 %t179, 1 + store i64 %t180, ptr %a100 + br label %each.cond7763 +each.end7766: + %t181 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t182 = load %S.ast.Type, ptr %t181 + %t183 = call i1 @finch.gen.isNumber(%S.ast.Type %t182) + br label %logic.from7794 +logic.from7794: + br i1 %t183, label %logic.end7796, label %logic.rhs7795 +logic.rhs7795: + %t184 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t185 = getelementptr inbounds %S.ast.Type, ptr %t184, i32 0, i32 0 + %t186 = load { ptr, i64, i64 }, ptr %t185 + store { ptr, i64, i64 } %t186, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.4930, i64 4, i64 0 }, ptr %a188 + %t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188) + %t190 = icmp ne i32 %t189, 0 + br label %logic.rend7797 +logic.rend7797: + br label %logic.end7796 +logic.end7796: + %t191 = phi i1 [ true, %logic.from7794 ], [ %t190, %logic.rend7797 ] + br label %logic.from7798 +logic.from7798: + br i1 %t191, label %logic.end7800, label %logic.rhs7799 +logic.rhs7799: + %t192 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i32 0, i32 0 + %t194 = load { ptr, i64, i64 }, ptr %t193 + store { ptr, i64, i64 } %t194, ptr %a195 + store { ptr, i64, i64 } { ptr @.str.4931, i64 4, i64 0 }, ptr %a196 + %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) + %t198 = icmp ne i32 %t197, 0 + br label %logic.rend7801 +logic.rend7801: + br label %logic.end7800 +logic.end7800: + %t199 = phi i1 [ true, %logic.from7798 ], [ %t198, %logic.rend7801 ] + br label %logic.from7802 +logic.from7802: + br i1 %t199, label %logic.end7804, label %logic.rhs7803 +logic.rhs7803: + %t200 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 + %t202 = load { ptr, i64, i64 }, ptr %t201 + store { ptr, i64, i64 } %t202, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.4932, i64 3, i64 0 }, ptr %a204 + %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) + %t206 = icmp ne i32 %t205, 0 + br label %logic.rend7805 +logic.rend7805: + br label %logic.end7804 +logic.end7804: + %t207 = phi i1 [ true, %logic.from7802 ], [ %t206, %logic.rend7805 ] + br label %logic.from7806 +logic.from7806: + br i1 %t207, label %logic.end7808, label %logic.rhs7807 +logic.rhs7807: + %t208 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t209 = getelementptr inbounds %S.ast.Type, ptr %t208, i32 0, i32 0 + %t210 = load { ptr, i64, i64 }, ptr %t209 + store { ptr, i64, i64 } %t210, ptr %a211 + store { ptr, i64, i64 } { ptr @.str.4933, i64 4, i64 0 }, ptr %a212 + %t213 = call i32 @finch_str_eq(ptr %a211, ptr %a212) + %t214 = icmp ne i32 %t213, 0 + br label %logic.rend7809 +logic.rend7809: + br label %logic.end7808 +logic.end7808: + %t215 = phi i1 [ true, %logic.from7806 ], [ %t214, %logic.rend7809 ] + br label %logic.from7810 +logic.from7810: + br i1 %t215, label %logic.end7812, label %logic.rhs7811 +logic.rhs7811: + %t216 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t217 = getelementptr inbounds %S.ast.Type, ptr %t216, i32 0, i32 0 + %t218 = load { ptr, i64, i64 }, ptr %t217 + store { ptr, i64, i64 } %t218, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.4934, i64 6, i64 0 }, ptr %a220 + %t221 = call i32 @finch_str_eq(ptr %a219, ptr %a220) + %t222 = icmp ne i32 %t221, 0 + br label %logic.from7813 +logic.from7813: + br i1 %t222, label %logic.rhs7814, label %logic.end7815 +logic.rhs7814: + %t223 = load ptr, ptr %a1 + %t224 = icmp eq ptr %t223, null + br i1 %t224, label %panic7816, label %ok7817 +panic7816: + call void @finch_panic(ptr @.str.4935, i64 4540, ptr @.str.4936) + unreachable +ok7817: + %t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 16 + %t226 = load ptr, ptr %a1 + %t227 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t228 = getelementptr inbounds %S.ast.Type, ptr %t227, i32 0, i32 3 + %t229 = load { ptr, i64, i64 }, ptr %t228 + %t230 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t231 = getelementptr inbounds %S.ast.Type, ptr %t230, i32 0, i32 2 + %t232 = load { ptr, i64, i64 }, ptr %t231 + %t233 = call i64 @finch.gen.findStruct(ptr %t226, { ptr, i64, i64 } %t229, { ptr, i64, i64 } %t232) + %t234 = load { ptr, i64, i64 }, ptr %t225 + %t235 = extractvalue { ptr, i64, i64 } %t234, 1 + %t236 = icmp uge i64 %t233, %t235 + br i1 %t236, label %range7818, label %inrange7819 +range7818: + call void @finch_panic_index(ptr @.str.4937, i64 4540, i64 %t233, i64 %t235) + unreachable +inrange7819: + %t237 = extractvalue { ptr, i64, i64 } %t234, 0 + %t238 = getelementptr inbounds %S.gen.StructDef, ptr %t237, i64 %t233 + %t239 = getelementptr inbounds %S.gen.StructDef, ptr %t238, i32 0, i32 2 + %t240 = load i1, ptr %t239 + br label %logic.rend7820 +logic.rend7820: + br label %logic.end7815 +logic.end7815: + %t241 = phi i1 [ false, %logic.from7813 ], [ %t240, %logic.rend7820 ] + br label %logic.rend7821 +logic.rend7821: + br label %logic.end7812 +logic.end7812: + %t242 = phi i1 [ true, %logic.from7810 ], [ %t241, %logic.rend7821 ] + %t243 = xor i1 %t242, true + br i1 %t243, label %then7822, label %endif7824 +then7822: + %t244 = load ptr, ptr %a1 + %t245 = load %S.ast.Node, ptr %a3 + %t246 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t247 = load { ptr, i64, i64 }, ptr %t246 + store { ptr, i64, i64 } { ptr @.str.4938, i64 5, i64 0 }, ptr %a249 + store { ptr, i64, i64 } %t247, ptr %a250 + call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a248 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.4939, i64 38, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + %t257 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t258 = load %S.ast.Type, ptr %t257 + %t259 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t258) + store { ptr, i64, i64 } %t256, ptr %a261 + store { ptr, i64, i64 } %t259, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + store { ptr, i64, i64 } %t256, ptr %a263 + call void @finch_str_drop(ptr %a263) + store { ptr, i64, i64 } %t259, ptr %a264 + call void @finch_str_drop(ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a260 + call void @finch.gen.fail(ptr %t244, %S.ast.Node %t245, { ptr, i64, i64 } %t265) + store { ptr, i64, i64 } %t265, ptr %a266 + call void @finch_str_drop(ptr %a266) + br label %endif7824 +endif7824: + %t267 = load ptr, ptr %a1 + %t268 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t269 = load %S.ast.Type, ptr %t268 + %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + %t271 = load { ptr, i64, i64 }, ptr %t270 + %t272 = call %S.gen.Plan @finch.gen.makePlan(ptr %t267, %S.ast.Type %t269, { ptr, i64, i64 } %t271) + store %S.gen.Plan %t272, ptr %a273 + %t274 = load ptr, ptr %a1 + %t275 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t274) + store %S.gen.Saved %t275, ptr %a276 + store { ptr, i64, i64 } zeroinitializer, ptr %a277 + store i64 0, ptr %a278 + store { ptr, i64, i64 } { ptr @.str.4940, i64 0, i64 0 }, ptr %a279 + %t280 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 + %t281 = load i1, ptr %t280 + br i1 %t281, label %then7825, label %endif7827 +then7825: + %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t283 = load ptr, ptr %a1 + %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t285 = load %S.ast.Type, ptr %t284 + %t286 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t283, %S.ast.Type %t285) + store { ptr, i64, i64 } { ptr @.str.4941, i64 9, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t286, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.4942, i64 14, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load i64, ptr %t282 + %t298 = add i64 %t297, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t298, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t299 = load ptr, ptr %a277 + %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t299, i64 %t297 + store { ptr, i64, i64 } %t296, ptr %t300 + store i64 %t298, ptr %t282 + %t301 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.4943, i64 3, i64 0 }, ptr %a279 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + store i64 1, ptr %a278 + br label %endif7827 +endif7827: + store { ptr, i64, i64 } zeroinitializer, ptr %a303 + %t304 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t304, i32 0, i32 1 + %t306 = load i64, ptr %t305 + store i64 0, ptr %a307 + br label %for.cond7828 +for.cond7828: + %t308 = load i64, ptr %a307 + %t309 = icmp slt i64 %t308, %t306 + br i1 %t309, label %for.body7829, label %for.end7831 +for.body7829: + %t310 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + %t311 = load i64, ptr %a307 + %t312 = load { ptr, i64, i64 }, ptr %t310 + %t313 = extractvalue { ptr, i64, i64 } %t312, 1 + %t314 = icmp uge i64 %t311, %t313 + br i1 %t314, label %range7832, label %inrange7833 +range7832: + call void @finch_panic_index(ptr @.str.4944, i64 4555, i64 %t311, i64 %t313) + unreachable +inrange7833: + %t315 = extractvalue { ptr, i64, i64 } %t312, 0 + %t316 = getelementptr inbounds %S.ast.Type, ptr %t315, i64 %t311 + %t317 = load %S.ast.Type, ptr %t316 + store %S.ast.Type %t317, ptr %a318 + call void @finch.copy.S_ast_Type(ptr %a319, ptr %a318) + %t320 = load %S.ast.Type, ptr %a319 + store %S.ast.Type %t320, ptr %a321 + %t322 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 1 + %t323 = load i64, ptr %a307 + %t324 = load { ptr, i64, i64 }, ptr %t322 + %t325 = extractvalue { ptr, i64, i64 } %t324, 1 + %t326 = icmp uge i64 %t323, %t325 + br i1 %t326, label %range7834, label %inrange7835 +range7834: + call void @finch_panic_index(ptr @.str.4945, i64 4556, i64 %t323, i64 %t325) + unreachable +inrange7835: + %t327 = extractvalue { ptr, i64, i64 } %t324, 0 + %t328 = getelementptr inbounds %S.gen.Abi, ptr %t327, i64 %t323 + %t329 = load %S.gen.Abi, ptr %t328 + store %S.gen.Abi %t329, ptr %a330 + call void @finch.copy.S_gen_Abi(ptr %a331, ptr %a330) + %t332 = load %S.gen.Abi, ptr %a331 + store %S.gen.Abi %t332, ptr %a333 + %t334 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t335, ptr %a336 + store { ptr, i64, i64 } { ptr @.str.4946, i64 6, i64 0 }, ptr %a337 + %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) + %t339 = icmp ne i32 %t338, 0 + br i1 %t339, label %then7836, label %else7837 +then7836: + %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t341 = load ptr, ptr %a1 + %t342 = load %S.ast.Type, ptr %a321 + %t343 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t341, %S.ast.Type %t342) + store { ptr, i64, i64 } { ptr @.str.4947, i64 10, i64 0 }, ptr %a345 + store { ptr, i64, i64 } %t343, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t343, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = load { ptr, i64, i64 }, ptr %a344 + store { ptr, i64, i64 } %t348, ptr %a350 + store { ptr, i64, i64 } { ptr @.str.4948, i64 8, i64 0 }, ptr %a351 + call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) + store { ptr, i64, i64 } %t348, ptr %a352 + call void @finch_str_drop(ptr %a352) + %t353 = load { ptr, i64, i64 }, ptr %a349 + %t354 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 3 + %t355 = load i64, ptr %t354 + call void @finch_str_from_int(ptr %a356, i64 %t355) + %t357 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } %t353, ptr %a359 + store { ptr, i64, i64 } %t357, ptr %a360 + call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) + store { ptr, i64, i64 } %t353, ptr %a361 + call void @finch_str_drop(ptr %a361) + store { ptr, i64, i64 } %t357, ptr %a362 + call void @finch_str_drop(ptr %a362) + %t363 = load { ptr, i64, i64 }, ptr %a358 + store { ptr, i64, i64 } %t363, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.4949, i64 3, i64 0 }, ptr %a366 + call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366) + store { ptr, i64, i64 } %t363, ptr %a367 + call void @finch_str_drop(ptr %a367) + %t368 = load { ptr, i64, i64 }, ptr %a364 + %t369 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a370, i64 %t369) + %t371 = load { ptr, i64, i64 }, ptr %a370 + store { ptr, i64, i64 } %t368, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t368, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t371, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a372 + %t378 = load i64, ptr %t340 + %t379 = add i64 %t378, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t379, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t380 = load ptr, ptr %a277 + %t381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t380, i64 %t378 + store { ptr, i64, i64 } %t377, ptr %t381 + store i64 %t379, ptr %t340 + %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t383 = load ptr, ptr %a1 + %t384 = load %S.ast.Type, ptr %a321 + %t385 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t383, %S.ast.Type %t384) + store { ptr, i64, i64 } %t385, ptr %a387 + store { ptr, i64, i64 } { ptr @.str.4950, i64 1, i64 0 }, ptr %a388 + call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) + store { ptr, i64, i64 } %t385, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a386 + %t391 = load ptr, ptr %a1 + %t392 = load ptr, ptr %a1 + %t393 = load %S.ast.Type, ptr %a321 + %t394 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t392, %S.ast.Type %t393) + %t395 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a396, i64 %t395) + %t397 = load { ptr, i64, i64 }, ptr %a396 + store { ptr, i64, i64 } { ptr @.str.4951, i64 2, i64 0 }, ptr %a399 + store { ptr, i64, i64 } %t397, ptr %a400 + call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) + store { ptr, i64, i64 } %t397, ptr %a401 + call void @finch_str_drop(ptr %a401) + %t402 = load { ptr, i64, i64 }, ptr %a398 + %t403 = call { ptr, i64, i64 } @finch.gen.load(ptr %t391, { ptr, i64, i64 } %t394, { ptr, i64, i64 } %t402) + store { ptr, i64, i64 } %t394, ptr %a404 + call void @finch_str_drop(ptr %a404) + store { ptr, i64, i64 } %t402, ptr %a405 + call void @finch_str_drop(ptr %a405) + store { ptr, i64, i64 } %t390, ptr %a407 + store { ptr, i64, i64 } %t403, ptr %a408 + call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408) + store { ptr, i64, i64 } %t390, ptr %a409 + call void @finch_str_drop(ptr %a409) + store { ptr, i64, i64 } %t403, ptr %a410 + call void @finch_str_drop(ptr %a410) + %t411 = load { ptr, i64, i64 }, ptr %a406 + %t412 = load i64, ptr %t382 + %t413 = add i64 %t412, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t413, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t414 = load ptr, ptr %a303 + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t412 + store { ptr, i64, i64 } %t411, ptr %t415 + store i64 %t413, ptr %t382 + %t416 = load i64, ptr %a278 + %t417 = add i64 %t416, 1 + store i64 %t417, ptr %a278 + br label %endif7838 +else7837: + %t418 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 + %t419 = load { ptr, i64, i64 }, ptr %t418 + store { ptr, i64, i64 } %t419, ptr %a420 + store { ptr, i64, i64 } { ptr @.str.4952, i64 8, i64 0 }, ptr %a421 + %t422 = call i32 @finch_str_eq(ptr %a420, ptr %a421) + %t423 = icmp ne i32 %t422, 0 + br i1 %t423, label %then7839, label %else7840 +then7839: + %t424 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t425 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a426, i64 %t425) + %t427 = load { ptr, i64, i64 }, ptr %a426 + store { ptr, i64, i64 } { ptr @.str.4953, i64 6, i64 0 }, ptr %a429 + store { ptr, i64, i64 } %t427, ptr %a430 + call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) + store { ptr, i64, i64 } %t427, ptr %a431 + call void @finch_str_drop(ptr %a431) + %t432 = load { ptr, i64, i64 }, ptr %a428 + %t433 = load i64, ptr %t424 + %t434 = add i64 %t433, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t434, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t435 = load ptr, ptr %a277 + %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %t435, i64 %t433 + store { ptr, i64, i64 } %t432, ptr %t436 + store i64 %t434, ptr %t424 + %t437 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t438 = load ptr, ptr %a1 + %t439 = load %S.ast.Type, ptr %a321 + %t440 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t438, %S.ast.Type %t439) + store { ptr, i64, i64 } %t440, ptr %a442 + store { ptr, i64, i64 } { ptr @.str.4954, i64 1, i64 0 }, ptr %a443 + call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443) + store { ptr, i64, i64 } %t440, ptr %a444 + call void @finch_str_drop(ptr %a444) + %t445 = load { ptr, i64, i64 }, ptr %a441 + %t446 = load ptr, ptr %a1 + %t447 = load ptr, ptr %a1 + %t448 = load %S.ast.Type, ptr %a321 + %t449 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t447, %S.ast.Type %t448) + %t450 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a451, i64 %t450) + %t452 = load { ptr, i64, i64 }, ptr %a451 + store { ptr, i64, i64 } { ptr @.str.4955, i64 2, i64 0 }, ptr %a454 + store { ptr, i64, i64 } %t452, ptr %a455 + call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) + store { ptr, i64, i64 } %t452, ptr %a456 + call void @finch_str_drop(ptr %a456) + %t457 = load { ptr, i64, i64 }, ptr %a453 + %t458 = call { ptr, i64, i64 } @finch.gen.load(ptr %t446, { ptr, i64, i64 } %t449, { ptr, i64, i64 } %t457) + store { ptr, i64, i64 } %t449, ptr %a459 + call void @finch_str_drop(ptr %a459) + store { ptr, i64, i64 } %t457, ptr %a460 + call void @finch_str_drop(ptr %a460) + store { ptr, i64, i64 } %t445, ptr %a462 + store { ptr, i64, i64 } %t458, ptr %a463 + call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) + store { ptr, i64, i64 } %t445, ptr %a464 + call void @finch_str_drop(ptr %a464) + store { ptr, i64, i64 } %t458, ptr %a465 + call void @finch_str_drop(ptr %a465) + %t466 = load { ptr, i64, i64 }, ptr %a461 + %t467 = load i64, ptr %t437 + %t468 = add i64 %t467, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t468, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t469 = load ptr, ptr %a303 + %t470 = getelementptr inbounds { ptr, i64, i64 }, ptr %t469, i64 %t467 + store { ptr, i64, i64 } %t466, ptr %t470 + store i64 %t468, ptr %t437 + %t471 = load i64, ptr %a278 + %t472 = add i64 %t471, 1 + store i64 %t472, ptr %a278 + br label %endif7841 +else7840: + %t473 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 + %t474 = load { ptr, i64, i64 }, ptr %t473 + store { ptr, i64, i64 } %t474, ptr %a475 + store { ptr, i64, i64 } { ptr @.str.4956, i64 6, i64 0 }, ptr %a476 + %t477 = call i32 @finch_str_eq(ptr %a475, ptr %a476) + %t478 = icmp ne i32 %t477, 0 + br i1 %t478, label %then7842, label %else7843 +then7842: + %t479 = load ptr, ptr %a1 + %t480 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t479, { ptr, i64, i64 } { ptr @.str.4957, i64 9, i64 0 }) + store { ptr, i64, i64 } %t480, ptr %a481 + %t482 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 + %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 + %t484 = load i64, ptr %t483 + store i64 0, ptr %a485 + br label %for.cond7845 +for.cond7845: + %t486 = load i64, ptr %a485 + %t487 = icmp slt i64 %t486, %t484 + br i1 %t487, label %for.body7846, label %for.end7848 +for.body7846: + %t488 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t489 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 + %t490 = load i64, ptr %a485 + %t491 = load { ptr, i64, i64 }, ptr %t489 + %t492 = extractvalue { ptr, i64, i64 } %t491, 1 + %t493 = icmp uge i64 %t490, %t492 + br i1 %t493, label %range7849, label %inrange7850 +range7849: + call void @finch_panic_index(ptr @.str.4958, i64 4568, i64 %t490, i64 %t492) + unreachable +inrange7850: + %t494 = extractvalue { ptr, i64, i64 } %t491, 0 + %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i64 %t490 + %t496 = load { ptr, i64, i64 }, ptr %t495 + store { ptr, i64, i64 } %t496, ptr %a498 + store { ptr, i64, i64 } { ptr @.str.4959, i64 3, i64 0 }, ptr %a499 + call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499) + %t500 = load { ptr, i64, i64 }, ptr %a497 + %t501 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a502, i64 %t501) + %t503 = load { ptr, i64, i64 }, ptr %a502 + store { ptr, i64, i64 } %t500, ptr %a505 + store { ptr, i64, i64 } %t503, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t500, ptr %a507 + call void @finch_str_drop(ptr %a507) + store { ptr, i64, i64 } %t503, ptr %a508 + call void @finch_str_drop(ptr %a508) + %t509 = load { ptr, i64, i64 }, ptr %a504 + %t510 = load i64, ptr %t488 + %t511 = add i64 %t510, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t511, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t512 = load ptr, ptr %a277 + %t513 = getelementptr inbounds { ptr, i64, i64 }, ptr %t512, i64 %t510 + store { ptr, i64, i64 } %t509, ptr %t513 + store i64 %t511, ptr %t488 + %t514 = load ptr, ptr %a1 + %t515 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 + %t516 = load i64, ptr %a485 + %t517 = load { ptr, i64, i64 }, ptr %t515 + %t518 = extractvalue { ptr, i64, i64 } %t517, 1 + %t519 = icmp uge i64 %t516, %t518 + br i1 %t519, label %range7851, label %inrange7852 +range7851: + call void @finch_panic_index(ptr @.str.4960, i64 4569, i64 %t516, i64 %t518) + unreachable +inrange7852: + %t520 = extractvalue { ptr, i64, i64 } %t517, 0 + %t521 = getelementptr inbounds { ptr, i64, i64 }, ptr %t520, i64 %t516 + %t522 = load { ptr, i64, i64 }, ptr %t521 + %t523 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a524, i64 %t523) + %t525 = load { ptr, i64, i64 }, ptr %a524 + store { ptr, i64, i64 } { ptr @.str.4961, i64 2, i64 0 }, ptr %a527 + store { ptr, i64, i64 } %t525, ptr %a528 + call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) + store { ptr, i64, i64 } %t525, ptr %a529 + call void @finch_str_drop(ptr %a529) + %t530 = load { ptr, i64, i64 }, ptr %a526 + %t531 = load ptr, ptr %a1 + %t532 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } { ptr @.str.4962, i64 31, i64 0 }, ptr %a534 + store { ptr, i64, i64 } %t532, ptr %a535 + call void @finch_str_concat(ptr %a533, ptr %a534, ptr %a535) + %t536 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } %t536, ptr %a538 + store { ptr, i64, i64 } { ptr @.str.4963, i64 6, i64 0 }, ptr %a539 + call void @finch_str_concat(ptr %a537, ptr %a538, ptr %a539) + store { ptr, i64, i64 } %t536, ptr %a540 + call void @finch_str_drop(ptr %a540) + %t541 = load { ptr, i64, i64 }, ptr %a537 + %t542 = load i64, ptr %a485 + %t543 = mul i64 8, %t542 + call void @finch_str_from_int(ptr %a544, i64 %t543) + %t545 = load { ptr, i64, i64 }, ptr %a544 + store { ptr, i64, i64 } %t541, ptr %a547 + store { ptr, i64, i64 } %t545, ptr %a548 + call void @finch_str_concat(ptr %a546, ptr %a547, ptr %a548) + store { ptr, i64, i64 } %t541, ptr %a549 + call void @finch_str_drop(ptr %a549) + store { ptr, i64, i64 } %t545, ptr %a550 + call void @finch_str_drop(ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a546 + %t552 = call { ptr, i64, i64 } @finch.gen.op(ptr %t531, { ptr, i64, i64 } %t551) + store { ptr, i64, i64 } %t551, ptr %a553 + call void @finch_str_drop(ptr %a553) + call void @finch.gen.store(ptr %t514, { ptr, i64, i64 } %t522, { ptr, i64, i64 } %t530, { ptr, i64, i64 } %t552) + store { ptr, i64, i64 } %t530, ptr %a554 + call void @finch_str_drop(ptr %a554) + store { ptr, i64, i64 } %t552, ptr %a555 + call void @finch_str_drop(ptr %a555) + %t556 = load i64, ptr %a278 + %t557 = add i64 %t556, 1 + store i64 %t557, ptr %a278 + br label %for.step7847 +for.step7847: + %t558 = load i64, ptr %a485 + %t559 = add i64 %t558, 1 + store i64 %t559, ptr %a485 + br label %for.cond7845 +for.end7848: + %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t561 = load ptr, ptr %a1 + %t562 = load %S.ast.Type, ptr %a321 + %t563 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t561, %S.ast.Type %t562) + store { ptr, i64, i64 } %t563, ptr %a565 + store { ptr, i64, i64 } { ptr @.str.4964, i64 1, i64 0 }, ptr %a566 + call void @finch_str_concat(ptr %a564, ptr %a565, ptr %a566) + store { ptr, i64, i64 } %t563, ptr %a567 + call void @finch_str_drop(ptr %a567) + %t568 = load { ptr, i64, i64 }, ptr %a564 + %t569 = load ptr, ptr %a1 + %t570 = load ptr, ptr %a1 + %t571 = load %S.ast.Type, ptr %a321 + %t572 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t570, %S.ast.Type %t571) + %t573 = load { ptr, i64, i64 }, ptr %a481 + %t574 = call { ptr, i64, i64 } @finch.gen.load(ptr %t569, { ptr, i64, i64 } %t572, { ptr, i64, i64 } %t573) + store { ptr, i64, i64 } %t572, ptr %a575 + call void @finch_str_drop(ptr %a575) + store { ptr, i64, i64 } %t568, ptr %a577 + store { ptr, i64, i64 } %t574, ptr %a578 + call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578) + store { ptr, i64, i64 } %t568, ptr %a579 + call void @finch_str_drop(ptr %a579) + store { ptr, i64, i64 } %t574, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = load { ptr, i64, i64 }, ptr %a576 + %t582 = load i64, ptr %t560 + %t583 = add i64 %t582, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t583, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t584 = load ptr, ptr %a303 + %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i64 %t582 + store { ptr, i64, i64 } %t581, ptr %t585 + store i64 %t583, ptr %t560 + call void @finch_str_drop(ptr %a481) + br label %endif7844 +else7843: + %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t587 = load ptr, ptr %a1 + %t588 = load %S.ast.Type, ptr %a321 + %t589 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t587, %S.ast.Type %t588) + %t590 = load ptr, ptr %a1 + %t591 = load %S.ast.Type, ptr %a321 + %t592 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t590, %S.ast.Type %t591) + store { ptr, i64, i64 } %t589, ptr %a594 + store { ptr, i64, i64 } %t592, ptr %a595 + call void @finch_str_concat(ptr %a593, ptr %a594, ptr %a595) + store { ptr, i64, i64 } %t589, ptr %a596 + call void @finch_str_drop(ptr %a596) + store { ptr, i64, i64 } %t592, ptr %a597 + call void @finch_str_drop(ptr %a597) + %t598 = load { ptr, i64, i64 }, ptr %a593 + store { ptr, i64, i64 } %t598, ptr %a600 + store { ptr, i64, i64 } { ptr @.str.4965, i64 3, i64 0 }, ptr %a601 + call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601) + store { ptr, i64, i64 } %t598, ptr %a602 + call void @finch_str_drop(ptr %a602) + %t603 = load { ptr, i64, i64 }, ptr %a599 + %t604 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a605, i64 %t604) + %t606 = load { ptr, i64, i64 }, ptr %a605 + store { ptr, i64, i64 } %t603, ptr %a608 + store { ptr, i64, i64 } %t606, ptr %a609 + call void @finch_str_concat(ptr %a607, ptr %a608, ptr %a609) + store { ptr, i64, i64 } %t603, ptr %a610 + call void @finch_str_drop(ptr %a610) + store { ptr, i64, i64 } %t606, ptr %a611 + call void @finch_str_drop(ptr %a611) + %t612 = load { ptr, i64, i64 }, ptr %a607 + %t613 = load i64, ptr %t586 + %t614 = add i64 %t613, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t614, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t615 = load ptr, ptr %a277 + %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %t615, i64 %t613 + store { ptr, i64, i64 } %t612, ptr %t616 + store i64 %t614, ptr %t586 + %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t618 = load ptr, ptr %a1 + %t619 = load %S.ast.Type, ptr %a321 + %t620 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t618, %S.ast.Type %t619) + store { ptr, i64, i64 } %t620, ptr %a622 + store { ptr, i64, i64 } { ptr @.str.4966, i64 3, i64 0 }, ptr %a623 + call void @finch_str_concat(ptr %a621, ptr %a622, ptr %a623) + store { ptr, i64, i64 } %t620, ptr %a624 + call void @finch_str_drop(ptr %a624) + %t625 = load { ptr, i64, i64 }, ptr %a621 + %t626 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a627, i64 %t626) + %t628 = load { ptr, i64, i64 }, ptr %a627 + store { ptr, i64, i64 } %t625, ptr %a630 + store { ptr, i64, i64 } %t628, ptr %a631 + call void @finch_str_concat(ptr %a629, ptr %a630, ptr %a631) + store { ptr, i64, i64 } %t625, ptr %a632 + call void @finch_str_drop(ptr %a632) + store { ptr, i64, i64 } %t628, ptr %a633 + call void @finch_str_drop(ptr %a633) + %t634 = load { ptr, i64, i64 }, ptr %a629 + %t635 = load i64, ptr %t617 + %t636 = add i64 %t635, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t636, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t637 = load ptr, ptr %a303 + %t638 = getelementptr inbounds { ptr, i64, i64 }, ptr %t637, i64 %t635 + store { ptr, i64, i64 } %t634, ptr %t638 + store i64 %t636, ptr %t617 + %t639 = load i64, ptr %a278 + %t640 = add i64 %t639, 1 + store i64 %t640, ptr %a278 + br label %endif7844 +endif7844: + br label %endif7841 +endif7841: + br label %endif7838 +endif7838: + call void @finch.drop.S_gen_Abi(ptr %a333) + call void @finch.drop.S_ast_Type(ptr %a321) + br label %for.step7830 +for.step7830: + %t641 = load i64, ptr %a307 + %t642 = add i64 %t641, 1 + store i64 %t642, ptr %a307 + br label %for.cond7828 +for.end7831: + %t643 = load ptr, ptr %a1 + %t644 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t645 = load %S.ast.Type, ptr %t644 + %t646 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t643, %S.ast.Type %t645) + store { ptr, i64, i64 } { ptr @.str.4967, i64 5, i64 0 }, ptr %a648 + store { ptr, i64, i64 } %t646, ptr %a649 + call void @finch_str_concat(ptr %a647, ptr %a648, ptr %a649) + store { ptr, i64, i64 } %t646, ptr %a650 + call void @finch_str_drop(ptr %a650) + %t651 = load { ptr, i64, i64 }, ptr %a647 + store { ptr, i64, i64 } %t651, ptr %a653 + store { ptr, i64, i64 } { ptr @.str.4968, i64 1, i64 0 }, ptr %a654 + call void @finch_str_concat(ptr %a652, ptr %a653, ptr %a654) + store { ptr, i64, i64 } %t651, ptr %a655 + call void @finch_str_drop(ptr %a655) + %t656 = load { ptr, i64, i64 }, ptr %a652 + %t657 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 11 + %t658 = load { ptr, i64, i64 }, ptr %t657 + store { ptr, i64, i64 } %t656, ptr %a660 + store { ptr, i64, i64 } %t658, ptr %a661 + call void @finch_str_concat(ptr %a659, ptr %a660, ptr %a661) + store { ptr, i64, i64 } %t656, ptr %a662 + call void @finch_str_drop(ptr %a662) + %t663 = load { ptr, i64, i64 }, ptr %a659 + store { ptr, i64, i64 } %t663, ptr %a665 + store { ptr, i64, i64 } { ptr @.str.4969, i64 1, i64 0 }, ptr %a666 + call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) + store { ptr, i64, i64 } %t663, ptr %a667 + call void @finch_str_drop(ptr %a667) + %t668 = load { ptr, i64, i64 }, ptr %a664 + %t669 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4970, i64 2, i64 0 }, ptr %a670 + call void @finch_str_join(ptr %a671, ptr %a303, ptr %a670) + %t672 = load { ptr, i64, i64 }, ptr %a671 + store { ptr, i64, i64 } %t668, ptr %a674 + store { ptr, i64, i64 } %t672, ptr %a675 + call void @finch_str_concat(ptr %a673, ptr %a674, ptr %a675) + store { ptr, i64, i64 } %t668, ptr %a676 + call void @finch_str_drop(ptr %a676) + store { ptr, i64, i64 } %t672, ptr %a677 + call void @finch_str_drop(ptr %a677) + %t678 = load { ptr, i64, i64 }, ptr %a673 + store { ptr, i64, i64 } %t678, ptr %a680 + store { ptr, i64, i64 } { ptr @.str.4971, i64 1, i64 0 }, ptr %a681 + call void @finch_str_concat(ptr %a679, ptr %a680, ptr %a681) + store { ptr, i64, i64 } %t678, ptr %a682 + call void @finch_str_drop(ptr %a682) + %t683 = load { ptr, i64, i64 }, ptr %a679 + store { ptr, i64, i64 } %t683, ptr %a684 + store { ptr, i64, i64 } { ptr @.str.4972, i64 0, i64 0 }, ptr %a685 + %t686 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t687 = getelementptr inbounds %S.ast.Type, ptr %t686, i32 0, i32 0 + %t688 = load { ptr, i64, i64 }, ptr %t687 + store { ptr, i64, i64 } %t688, ptr %a689 + store { ptr, i64, i64 } { ptr @.str.4973, i64 4, i64 0 }, ptr %a690 + %t691 = call i32 @finch_str_eq(ptr %a689, ptr %a690) + %t692 = icmp ne i32 %t691, 0 + br i1 %t692, label %then7853, label %else7854 +then7853: + %t693 = load ptr, ptr %a1 + %t694 = load { ptr, i64, i64 }, ptr %a684 + call void @finch.gen.emit(ptr %t693, { ptr, i64, i64 } %t694) + %t695 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t695, { ptr, i64, i64 } { ptr @.str.4974, i64 8, i64 0 }) + br label %endif7855 +else7854: + %t696 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 + %t697 = load i1, ptr %t696 + br i1 %t697, label %then7856, label %else7857 +then7856: + %t698 = load ptr, ptr %a1 + %t699 = load ptr, ptr %a1 + %t700 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t701 = load %S.ast.Type, ptr %t700 + %t702 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t699, %S.ast.Type %t701) + %t703 = load ptr, ptr %a1 + %t704 = load { ptr, i64, i64 }, ptr %a684 + %t705 = call { ptr, i64, i64 } @finch.gen.op(ptr %t703, { ptr, i64, i64 } %t704) + %t706 = load { ptr, i64, i64 }, ptr %a279 + call void @finch.gen.store(ptr %t698, { ptr, i64, i64 } %t702, { ptr, i64, i64 } %t705, { ptr, i64, i64 } %t706) + store { ptr, i64, i64 } %t702, ptr %a707 + call void @finch_str_drop(ptr %a707) + store { ptr, i64, i64 } %t705, ptr %a708 + call void @finch_str_drop(ptr %a708) + %t709 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t709, { ptr, i64, i64 } { ptr @.str.4975, i64 8, i64 0 }) + br label %endif7858 +else7857: + %t710 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 + %t711 = getelementptr inbounds %S.gen.Abi, ptr %t710, i32 0, i32 0 + %t712 = load { ptr, i64, i64 }, ptr %t711 + store { ptr, i64, i64 } %t712, ptr %a713 + store { ptr, i64, i64 } { ptr @.str.4976, i64 6, i64 0 }, ptr %a714 + %t715 = call i32 @finch_str_eq(ptr %a713, ptr %a714) + %t716 = icmp ne i32 %t715, 0 + br i1 %t716, label %then7859, label %else7860 +then7859: + %t717 = load ptr, ptr %a1 + %t718 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t717, { ptr, i64, i64 } { ptr @.str.4977, i64 9, i64 0 }) + store { ptr, i64, i64 } %t718, ptr %a719 + %t720 = load ptr, ptr %a1 + %t721 = load ptr, ptr %a1 + %t722 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t723 = load %S.ast.Type, ptr %t722 + %t724 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t721, %S.ast.Type %t723) + %t725 = load ptr, ptr %a1 + %t726 = load { ptr, i64, i64 }, ptr %a684 + %t727 = call { ptr, i64, i64 } @finch.gen.op(ptr %t725, { ptr, i64, i64 } %t726) + %t728 = load { ptr, i64, i64 }, ptr %a719 + call void @finch.gen.store(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t727, { ptr, i64, i64 } %t728) + store { ptr, i64, i64 } %t724, ptr %a729 + call void @finch_str_drop(ptr %a729) + store { ptr, i64, i64 } %t727, ptr %a730 + call void @finch_str_drop(ptr %a730) + %t731 = load ptr, ptr %a1 + %t732 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 + %t733 = getelementptr inbounds %S.gen.Abi, ptr %t732, i32 0, i32 2 + %t734 = load { ptr, i64, i64 }, ptr %t733 + store { ptr, i64, i64 } { ptr @.str.4978, i64 4, i64 0 }, ptr %a736 + store { ptr, i64, i64 } %t734, ptr %a737 + call void @finch_str_concat(ptr %a735, ptr %a736, ptr %a737) + %t738 = load { ptr, i64, i64 }, ptr %a735 + store { ptr, i64, i64 } %t738, ptr %a740 + store { ptr, i64, i64 } { ptr @.str.4979, i64 1, i64 0 }, ptr %a741 + call void @finch_str_concat(ptr %a739, ptr %a740, ptr %a741) + store { ptr, i64, i64 } %t738, ptr %a742 + call void @finch_str_drop(ptr %a742) + %t743 = load { ptr, i64, i64 }, ptr %a739 + %t744 = load ptr, ptr %a1 + %t745 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 + %t746 = getelementptr inbounds %S.gen.Abi, ptr %t745, i32 0, i32 2 + %t747 = load { ptr, i64, i64 }, ptr %t746 + %t748 = load { ptr, i64, i64 }, ptr %a719 + %t749 = call { ptr, i64, i64 } @finch.gen.load(ptr %t744, { ptr, i64, i64 } %t747, { ptr, i64, i64 } %t748) + store { ptr, i64, i64 } %t743, ptr %a751 + store { ptr, i64, i64 } %t749, ptr %a752 + call void @finch_str_concat(ptr %a750, ptr %a751, ptr %a752) + store { ptr, i64, i64 } %t743, ptr %a753 + call void @finch_str_drop(ptr %a753) + store { ptr, i64, i64 } %t749, ptr %a754 + call void @finch_str_drop(ptr %a754) + %t755 = load { ptr, i64, i64 }, ptr %a750 + call void @finch.gen.emit(ptr %t731, { ptr, i64, i64 } %t755) + store { ptr, i64, i64 } %t755, ptr %a756 + call void @finch_str_drop(ptr %a756) + call void @finch_str_drop(ptr %a719) + br label %endif7861 +else7860: + %t757 = load ptr, ptr %a1 + %t758 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t759 = load %S.ast.Type, ptr %t758 + %t760 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t757, %S.ast.Type %t759) + %t761 = load { ptr, i64, i64 }, ptr %a685 + store { ptr, i64, i64 } %t760, ptr %a685 + store { ptr, i64, i64 } %t761, ptr %a762 + call void @finch_str_drop(ptr %a762) + %t763 = load ptr, ptr %a1 + %t764 = load ptr, ptr %a1 + %t765 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t766 = load %S.ast.Type, ptr %t765 + %t767 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t764, %S.ast.Type %t766) + store { ptr, i64, i64 } { ptr @.str.4980, i64 4, i64 0 }, ptr %a769 + store { ptr, i64, i64 } %t767, ptr %a770 + call void @finch_str_concat(ptr %a768, ptr %a769, ptr %a770) + store { ptr, i64, i64 } %t767, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a768 + store { ptr, i64, i64 } %t772, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.4981, i64 1, i64 0 }, ptr %a775 + call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) + store { ptr, i64, i64 } %t772, ptr %a776 + call void @finch_str_drop(ptr %a776) + %t777 = load { ptr, i64, i64 }, ptr %a773 + %t778 = load ptr, ptr %a1 + %t779 = load { ptr, i64, i64 }, ptr %a684 + %t780 = call { ptr, i64, i64 } @finch.gen.op(ptr %t778, { ptr, i64, i64 } %t779) + store { ptr, i64, i64 } %t777, ptr %a782 + store { ptr, i64, i64 } %t780, ptr %a783 + call void @finch_str_concat(ptr %a781, ptr %a782, ptr %a783) + store { ptr, i64, i64 } %t777, ptr %a784 + call void @finch_str_drop(ptr %a784) + store { ptr, i64, i64 } %t780, ptr %a785 + call void @finch_str_drop(ptr %a785) + %t786 = load { ptr, i64, i64 }, ptr %a781 + call void @finch.gen.emit(ptr %t763, { ptr, i64, i64 } %t786) + store { ptr, i64, i64 } %t786, ptr %a787 + call void @finch_str_drop(ptr %a787) + br label %endif7861 +endif7861: + br label %endif7858 +endif7858: + br label %endif7855 +endif7855: + %t788 = load ptr, ptr %a1 + %t789 = load %S.gen.Saved, ptr %a276 + %t790 = load { ptr, i64, i64 }, ptr %a685 + store { ptr, i64, i64 } { ptr @.str.4982, i64 15, i64 0 }, ptr %a792 + store { ptr, i64, i64 } %t790, ptr %a793 + call void @finch_str_concat(ptr %a791, ptr %a792, ptr %a793) + %t794 = load { ptr, i64, i64 }, ptr %a791 + store { ptr, i64, i64 } %t794, ptr %a796 + store { ptr, i64, i64 } { ptr @.str.4983, i64 1, i64 0 }, ptr %a797 + call void @finch_str_concat(ptr %a795, ptr %a796, ptr %a797) + store { ptr, i64, i64 } %t794, ptr %a798 + call void @finch_str_drop(ptr %a798) + %t799 = load { ptr, i64, i64 }, ptr %a795 + %t800 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 2 + %t801 = load { ptr, i64, i64 }, ptr %t800 + store { ptr, i64, i64 } %t799, ptr %a803 + store { ptr, i64, i64 } %t801, ptr %a804 + call void @finch_str_concat(ptr %a802, ptr %a803, ptr %a804) + store { ptr, i64, i64 } %t799, ptr %a805 + call void @finch_str_drop(ptr %a805) + %t806 = load { ptr, i64, i64 }, ptr %a802 + store { ptr, i64, i64 } %t806, ptr %a808 + store { ptr, i64, i64 } { ptr @.str.4984, i64 1, i64 0 }, ptr %a809 + call void @finch_str_concat(ptr %a807, ptr %a808, ptr %a809) + store { ptr, i64, i64 } %t806, ptr %a810 + call void @finch_str_drop(ptr %a810) + %t811 = load { ptr, i64, i64 }, ptr %a807 + %t812 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } %t811, ptr %a814 + store { ptr, i64, i64 } %t812, ptr %a815 + call void @finch_str_concat(ptr %a813, ptr %a814, ptr %a815) + store { ptr, i64, i64 } %t811, ptr %a816 + call void @finch_str_drop(ptr %a816) + %t817 = load { ptr, i64, i64 }, ptr %a813 + store { ptr, i64, i64 } %t817, ptr %a819 + store { ptr, i64, i64 } { ptr @.str.4985, i64 1, i64 0 }, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t817, ptr %a821 + call void @finch_str_drop(ptr %a821) + %t822 = load { ptr, i64, i64 }, ptr %a818 + %t823 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4986, i64 2, i64 0 }, ptr %a824 + call void @finch_str_join(ptr %a825, ptr %a277, ptr %a824) + %t826 = load { ptr, i64, i64 }, ptr %a825 + store { ptr, i64, i64 } %t822, ptr %a828 + store { ptr, i64, i64 } %t826, ptr %a829 + call void @finch_str_concat(ptr %a827, ptr %a828, ptr %a829) + store { ptr, i64, i64 } %t822, ptr %a830 + call void @finch_str_drop(ptr %a830) + store { ptr, i64, i64 } %t826, ptr %a831 + call void @finch_str_drop(ptr %a831) + %t832 = load { ptr, i64, i64 }, ptr %a827 + store { ptr, i64, i64 } %t832, ptr %a834 + store { ptr, i64, i64 } { ptr @.str.4987, i64 1, i64 0 }, ptr %a835 + call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) + store { ptr, i64, i64 } %t832, ptr %a836 + call void @finch_str_drop(ptr %a836) + %t837 = load { ptr, i64, i64 }, ptr %a833 + call void @finch.gen.endHelper(ptr %t788, %S.gen.Saved %t789, { ptr, i64, i64 } %t837) + store { ptr, i64, i64 } %t837, ptr %a838 + call void @finch_str_drop(ptr %a838) + %t839 = load { ptr, i64, i64 }, ptr %a38 + call void @finch_str_drop(ptr %a685) + call void @finch_str_drop(ptr %a684) + call void @finch.drop.arr_str(ptr %a303) + call void @finch_str_drop(ptr %a279) + call void @finch.drop.arr_str(ptr %a277) + call void @finch.drop.S_gen_Saved(ptr %a276) + call void @finch.drop.S_gen_Plan(ptr %a273) + call void @finch.drop.S_gen_FnSig(ptr %a17) + ret { ptr, i64, i64 } %t839 +} + +define internal %S.gen.Val @finch.gen.enumFrom(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a14 = alloca %S.gen.EnumDef, align 16 + %a15 = alloca %S.gen.EnumDef, align 16 + %a17 = alloca %S.gen.EnumDef, align 16 + %a31 = alloca %S.gen.Val, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca %S.ast.Type, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca i64, align 16 + %a85 = alloca i64, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.ast.Type, align 16 + %a135 = alloca %S.ast.Type, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca i64, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca %S.ast.Type, align 16 + %a244 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic7865, label %ok7866 +panic7865: + call void @finch_panic(ptr @.str.4988, i64 4601, ptr @.str.4989) + unreachable +ok7866: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 + %t7 = load i64, ptr %a3 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range7867, label %inrange7868 +range7867: + call void @finch_panic_index(ptr @.str.4990, i64 4601, i64 %t7, i64 %t9) + unreachable +inrange7868: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 + %t13 = load %S.gen.EnumDef, ptr %t12 + store %S.gen.EnumDef %t13, ptr %a14 + call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) + %t16 = load %S.gen.EnumDef, ptr %a15 + store %S.gen.EnumDef %t16, ptr %a17 + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + call void @finch.gen.checkArgs(ptr %t18, %S.ast.Node %t19, i64 0, i64 1, { ptr, i64, i64 } %t21) + %t22 = load ptr, ptr %a1 + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t24 = load { ptr, i64, i64 }, ptr %t23 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 0, %t25 + br i1 %t26, label %range7869, label %inrange7870 +range7869: + call void @finch_panic_index(ptr @.str.4991, i64 4603, i64 0, i64 %t25) + unreachable +inrange7870: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 0 + %t29 = load %S.ast.Node, ptr %t28 + %t30 = call %S.gen.Val @finch.gen.expr(ptr %t22, %S.ast.Node %t29) + store %S.gen.Val %t30, ptr %a31 + %t32 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 + %t33 = load %S.ast.Type, ptr %t32 + %t34 = call i1 @finch.gen.isInt(%S.ast.Type %t33) + %t35 = xor i1 %t34, true + br i1 %t35, label %then7871, label %endif7873 +then7871: + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 0, %t39 + br i1 %t40, label %range7874, label %inrange7875 +range7874: + call void @finch_panic_index(ptr @.str.4992, i64 4605, i64 0, i64 %t39) + unreachable +inrange7875: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 0 + %t43 = load %S.ast.Node, ptr %t42 + %t44 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.4993, i64 54, i64 0 }, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a46 + %t50 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 + %t51 = load %S.ast.Type, ptr %t50 + %t52 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t51) + store { ptr, i64, i64 } %t49, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t49, ptr %a56 + call void @finch_str_drop(ptr %a56) + store { ptr, i64, i64 } %t52, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a53 + call void @finch.gen.fail(ptr %t36, %S.ast.Node %t43, { ptr, i64, i64 } %t58) + store { ptr, i64, i64 } %t58, ptr %a59 + call void @finch_str_drop(ptr %a59) + br label %endif7873 +endif7873: + %t60 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4994, i64 4, i64 0 }, 0 + %t61 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + %t66 = insertvalue %S.ast.Type %t60, { ptr, i64, i64 } %t65, 2 + %t67 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 + %t68 = load { ptr, i64, i64 }, ptr %t67 + store { ptr, i64, i64 } %t68, ptr %a69 + call void @finch_str_copy(ptr %a70, ptr %a69) + %t71 = load { ptr, i64, i64 }, ptr %a70 + %t72 = insertvalue %S.ast.Type %t66, { ptr, i64, i64 } %t71, 3 + store %S.ast.Type %t72, ptr %a73 + %t74 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 3 + %t75 = load i1, ptr %t74 + br i1 %t75, label %then7876, label %endif7878 +then7876: + %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + %t81 = call i64 @finch_str_to_int(ptr %a80, ptr @.str.4995, i64 4609) + store i64 -1, ptr %a82 + %t83 = load i64, ptr %t77 + %t84 = load ptr, ptr %t76 + store i64 0, ptr %a85 + br label %find.cond7879 +find.cond7879: + %t86 = load i64, ptr %a85 + %t87 = icmp slt i64 %t86, %t83 + br i1 %t87, label %find.body7880, label %find.end7883 +find.body7880: + %t88 = getelementptr inbounds i64, ptr %t84, i64 %t86 + %t89 = load i64, ptr %t88 + %t90 = icmp eq i64 %t89, %t81 + br i1 %t90, label %find.hit7881, label %find.next7882 +find.hit7881: + store i64 %t86, ptr %a82 + br label %find.end7883 +find.next7882: + %t91 = add i64 %t86, 1 + store i64 %t91, ptr %a85 + br label %find.cond7879 +find.end7883: + %t92 = load i64, ptr %a82 + %t93 = icmp sge i64 %t92, 0 + %t94 = xor i1 %t93, true + br i1 %t94, label %then7884, label %endif7886 +then7884: + %t95 = load ptr, ptr %a1 + %t96 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t97 = load { ptr, i64, i64 }, ptr %t96 + %t98 = extractvalue { ptr, i64, i64 } %t97, 1 + %t99 = icmp uge i64 0, %t98 + br i1 %t99, label %range7887, label %inrange7888 +range7887: + call void @finch_panic_index(ptr @.str.4996, i64 4610, i64 0, i64 %t98) + unreachable +inrange7888: + %t100 = extractvalue { ptr, i64, i64 } %t97, 0 + %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 0 + %t102 = load %S.ast.Node, ptr %t101 + %t103 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.4997, i64 37, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a105 + %t109 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } %t108, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t108, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.fail(ptr %t95, %S.ast.Node %t102, { ptr, i64, i64 } %t115) + store { ptr, i64, i64 } %t115, ptr %a116 + call void @finch_str_drop(ptr %a116) + br label %endif7886 +endif7886: + %t117 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t118 = load { ptr, i64, i64 }, ptr %t117 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_copy(ptr %a120, ptr %a119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + %t122 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t121, 0 + %t123 = load %S.ast.Type, ptr %a73 + store %S.ast.Type %t123, ptr %a124 + call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) + %t126 = load %S.ast.Type, ptr %a125 + %t127 = insertvalue %S.gen.Val %t122, %S.ast.Type %t126, 1 + call void @finch.drop.S_ast_Type(ptr %a73) + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.S_gen_EnumDef(ptr %a17) + ret %S.gen.Val %t127 +endif7878: + %t128 = load ptr, ptr %a1 + %t129 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t130 = load { ptr, i64, i64 }, ptr %t129 + %t131 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 + %t132 = load %S.ast.Type, ptr %t131 + %t133 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4998, i64 3, i64 0 }) + %t134 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t128, { ptr, i64, i64 } %t130, %S.ast.Type %t132, %S.ast.Type %t133) + store %S.ast.Type %t133, ptr %a135 + call void @finch.drop.S_ast_Type(ptr %a135) + store { ptr, i64, i64 } %t134, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.4999, i64 0, i64 0 }, ptr %a137 + %t138 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 + %t140 = load i64, ptr %t139 + store i64 0, ptr %a141 + br label %for.cond7889 +for.cond7889: + %t142 = load i64, ptr %a141 + %t143 = icmp slt i64 %t142, %t140 + br i1 %t143, label %for.body7890, label %for.end7892 +for.body7890: + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.5000, i64 12, i64 0 }, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + %t149 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t149, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.5001, i64 2, i64 0 }, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + store { ptr, i64, i64 } %t149, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a150 + %t155 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t156 = load i64, ptr %a141 + %t157 = load { ptr, i64, i64 }, ptr %t155 + %t158 = extractvalue { ptr, i64, i64 } %t157, 1 + %t159 = icmp uge i64 %t156, %t158 + br i1 %t159, label %range7893, label %inrange7894 +range7893: + call void @finch_panic_index(ptr @.str.5002, i64 4617, i64 %t156, i64 %t158) + unreachable +inrange7894: + %t160 = extractvalue { ptr, i64, i64 } %t157, 0 + %t161 = getelementptr inbounds i64, ptr %t160, i64 %t156 + %t162 = load i64, ptr %t161 + call void @finch_str_from_int(ptr %a163, i64 %t162) + %t164 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t154, ptr %a166 + store { ptr, i64, i64 } %t164, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t154, ptr %a168 + call void @finch_str_drop(ptr %a168) + store { ptr, i64, i64 } %t164, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load { ptr, i64, i64 }, ptr %a165 + %t171 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t170) + store { ptr, i64, i64 } %t170, ptr %a172 + call void @finch_str_drop(ptr %a172) + store { ptr, i64, i64 } %t171, ptr %a173 + %t174 = load i64, ptr %a141 + %t175 = icmp eq i64 %t174, 0 + br i1 %t175, label %then7895, label %else7896 +then7895: + %t176 = load { ptr, i64, i64 }, ptr %a173 + store { ptr, i64, i64 } %t176, ptr %a177 + call void @finch_str_copy(ptr %a178, ptr %a177) + %t179 = load { ptr, i64, i64 }, ptr %a178 + %t180 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t179, ptr %a137 + store { ptr, i64, i64 } %t180, ptr %a181 + call void @finch_str_drop(ptr %a181) + br label %endif7897 +else7896: + %t182 = load ptr, ptr %a1 + %t183 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.5003, i64 6, i64 0 }, ptr %a185 + store { ptr, i64, i64 } %t183, ptr %a186 + call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a184 + store { ptr, i64, i64 } %t187, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.5004, i64 2, i64 0 }, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + %t193 = load { ptr, i64, i64 }, ptr %a173 + store { ptr, i64, i64 } %t192, ptr %a195 + store { ptr, i64, i64 } %t193, ptr %a196 + call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) + store { ptr, i64, i64 } %t192, ptr %a197 + call void @finch_str_drop(ptr %a197) + %t198 = load { ptr, i64, i64 }, ptr %a194 + %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t182, { ptr, i64, i64 } %t198) + store { ptr, i64, i64 } %t198, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t199, ptr %a137 + store { ptr, i64, i64 } %t201, ptr %a202 + call void @finch_str_drop(ptr %a202) + br label %endif7897 +endif7897: + call void @finch_str_drop(ptr %a173) + br label %for.step7891 +for.step7891: + %t203 = load i64, ptr %a141 + %t204 = add i64 %t203, 1 + store i64 %t204, ptr %a141 + br label %for.cond7889 +for.end7892: + %t205 = load ptr, ptr %a1 + %t206 = load ptr, ptr %a1 + %t207 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.5005, i64 7, i64 0 }, ptr %a209 + store { ptr, i64, i64 } %t207, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t211, ptr %a213 + store { ptr, i64, i64 } { ptr @.str.5006, i64 6, i64 0 }, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + store { ptr, i64, i64 } %t211, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a212 + %t217 = call { ptr, i64, i64 } @finch.gen.op(ptr %t206, { ptr, i64, i64 } %t216) + store { ptr, i64, i64 } %t216, ptr %a218 + call void @finch_str_drop(ptr %a218) + %t219 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t220 = load { ptr, i64, i64 }, ptr %t219 + store { ptr, i64, i64 } { ptr @.str.5007, i64 32, i64 0 }, ptr %a222 + store { ptr, i64, i64 } %t220, ptr %a223 + call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) + %t224 = load { ptr, i64, i64 }, ptr %a221 + %t225 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t205, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t224, %S.ast.Node %t225) + store { ptr, i64, i64 } %t217, ptr %a226 + call void @finch_str_drop(ptr %a226) + store { ptr, i64, i64 } %t224, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load ptr, ptr %a1 + %t229 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.5008, i64 10, i64 0 }, ptr %a231 + store { ptr, i64, i64 } %t229, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.5009, i64 7, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t228, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t238, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t239, 0 + %t242 = load %S.ast.Type, ptr %a73 + store %S.ast.Type %t242, ptr %a243 + call void @finch.copy.S_ast_Type(ptr %a244, ptr %a243) + %t245 = load %S.ast.Type, ptr %a244 + %t246 = insertvalue %S.gen.Val %t241, %S.ast.Type %t245, 1 + call void @finch_str_drop(ptr %a137) + call void @finch_str_drop(ptr %a136) + call void @finch.drop.S_ast_Type(ptr %a73) + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.S_gen_EnumDef(ptr %a17) + ret %S.gen.Val %t246 +} + +define internal { ptr, i64, i64 } @finch.gen.cExt(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.5010, i64 4, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from7898 +logic.from7898: + br i1 %t8, label %logic.end7900, label %logic.rhs7899 +logic.rhs7899: + %t9 = load %S.ast.Type, ptr %a2 + %t10 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t9) + br label %logic.rend7901 +logic.rend7901: + br label %logic.end7900 +logic.end7900: + %t11 = phi i1 [ true, %logic.from7898 ], [ %t10, %logic.rend7901 ] + br i1 %t11, label %then7902, label %endif7904 +then7902: + %t12 = load %S.ast.Type, ptr %a2 + %t13 = call i64 @finch.gen.bitsOf(%S.ast.Type %t12) + %t14 = icmp slt i64 %t13, 32 + br i1 %t14, label %then7905, label %endif7907 +then7905: + ret { ptr, i64, i64 } { ptr @.str.5011, i64 8, i64 0 } +endif7907: + br label %endif7904 +endif7904: + %t15 = load %S.ast.Type, ptr %a2 + %t16 = call i1 @finch.gen.isSigned(%S.ast.Type %t15) + br label %logic.from7908 +logic.from7908: + br i1 %t16, label %logic.end7910, label %logic.rhs7909 +logic.rhs7909: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5012, i64 4, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.from7911 +logic.from7911: + br i1 %t22, label %logic.rhs7912, label %logic.end7913 +logic.rhs7912: + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic7914, label %ok7915 +panic7914: + call void @finch_panic(ptr @.str.5013, i64 4637, ptr @.str.5014) + unreachable +ok7915: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 31 + %t26 = load %S.platform.Target, ptr %t25 + %t27 = call i1 @finch.platform.charIsSigned(%S.platform.Target %t26) + br label %logic.rend7916 +logic.rend7916: + br label %logic.end7913 +logic.end7913: + %t28 = phi i1 [ false, %logic.from7911 ], [ %t27, %logic.rend7916 ] + br label %logic.rend7917 +logic.rend7917: + br label %logic.end7910 +logic.end7910: + %t29 = phi i1 [ true, %logic.from7908 ], [ %t28, %logic.rend7917 ] + br label %logic.from7918 +logic.from7918: + br i1 %t29, label %logic.rhs7919, label %logic.end7920 +logic.rhs7919: + %t30 = load %S.ast.Type, ptr %a2 + %t31 = call i64 @finch.gen.bitsOf(%S.ast.Type %t30) + %t32 = icmp slt i64 %t31, 32 + br label %logic.rend7921 +logic.rend7921: + br label %logic.end7920 +logic.end7920: + %t33 = phi i1 [ false, %logic.from7918 ], [ %t32, %logic.rend7921 ] + br i1 %t33, label %then7922, label %endif7924 +then7922: + ret { ptr, i64, i64 } { ptr @.str.5015, i64 8, i64 0 } +endif7924: + %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.5016, i64 4, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.from7925 +logic.from7925: + br i1 %t39, label %logic.rhs7926, label %logic.end7927 +logic.rhs7926: + %t40 = load %S.ast.Type, ptr %a2 + %t41 = call i64 @finch.gen.bitsOf(%S.ast.Type %t40) + %t42 = icmp slt i64 %t41, 32 + br label %logic.rend7928 +logic.rend7928: + br label %logic.end7927 +logic.end7927: + %t43 = phi i1 [ false, %logic.from7925 ], [ %t42, %logic.rend7928 ] + br i1 %t43, label %then7929, label %endif7931 +then7929: + ret { ptr, i64, i64 } { ptr @.str.5017, i64 8, i64 0 } +endif7931: + ret { ptr, i64, i64 } { ptr @.str.5018, i64 0, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.gen.cLL(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.5019, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then7932, label %endif7934 +then7932: + ret { ptr, i64, i64 } { ptr @.str.5020, i64 3, i64 0 } +endif7934: + %t9 = load ptr, ptr %a1 + %t10 = load %S.ast.Type, ptr %a2 + %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t9, %S.ast.Type %t10) + ret { ptr, i64, i64 } %t11 +} + +define internal %S.gen.Val @finch.gen.callC(ptr %p0, %S.ast.Node %p1, %S.cimport.CFunc %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.cimport.CFunc, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca i64, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca i64, align 16 + %a235 = alloca %S.ast.Type, align 16 + %a240 = alloca %S.ast.Type, align 16 + %a248 = alloca %S.ast.Type, align 16 + %a249 = alloca %S.ast.Type, align 16 + %a261 = alloca %S.gen.Plan, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca i64, align 16 + %a327 = alloca i64, align 16 + %a342 = alloca %S.ast.Type, align 16 + %a343 = alloca %S.ast.Type, align 16 + %a345 = alloca %S.ast.Type, align 16 + %a354 = alloca %S.gen.Abi, align 16 + %a355 = alloca %S.gen.Abi, align 16 + %a357 = alloca %S.gen.Abi, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca %S.gen.Val, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca %S.gen.Val, align 16 + %a406 = alloca %S.gen.Val, align 16 + %a407 = alloca %S.gen.Val, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca i64, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a648 = alloca { ptr, i64, i64 }, align 16 + %a649 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca %S.gen.Val, align 16 + %a699 = alloca %S.ast.Type, align 16 + %a700 = alloca %S.ast.Type, align 16 + %a702 = alloca %S.ast.Type, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca %S.gen.Val, align 16 + %a721 = alloca %S.gen.Val, align 16 + %a731 = alloca { ptr, i64, i64 }, align 16 + %a732 = alloca { ptr, i64, i64 }, align 16 + %a737 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca %S.ast.Type, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca %S.ast.Type, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca %S.ast.Type, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a803 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca %S.ast.Type, align 16 + %a817 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca %S.ast.Type, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca %S.ast.Type, align 16 + %a841 = alloca { ptr, i64, i64 }, align 16 + %a842 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a844 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a850 = alloca { ptr, i64, i64 }, align 16 + %a860 = alloca { ptr, i64, i64 }, align 16 + %a861 = alloca { ptr, i64, i64 }, align 16 + %a863 = alloca { ptr, i64, i64 }, align 16 + %a864 = alloca { ptr, i64, i64 }, align 16 + %a868 = alloca { ptr, i64, i64 }, align 16 + %a869 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a886 = alloca { ptr, i64, i64 }, align 16 + %a893 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a897 = alloca i64, align 16 + %a900 = alloca i64, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a920 = alloca { ptr, i64, i64 }, align 16 + %a921 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca { ptr, i64, i64 }, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a939 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a944 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a949 = alloca { ptr, i64, i64 }, align 16 + %a950 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a955 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a964 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a966 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a970 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a973 = alloca { ptr, i64, i64 }, align 16 + %a974 = alloca { ptr, i64, i64 }, align 16 + %a975 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a977 = alloca { ptr, i64, i64 }, align 16 + %a980 = alloca { ptr, i64, i64 }, align 16 + %a981 = alloca { ptr, i64, i64 }, align 16 + %a982 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a986 = alloca { ptr, i64, i64 }, align 16 + %a987 = alloca { ptr, i64, i64 }, align 16 + %a988 = alloca { ptr, i64, i64 }, align 16 + %a994 = alloca { ptr, i64, i64 }, align 16 + %a998 = alloca { ptr, i64, i64 }, align 16 + %a999 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1002 = alloca { ptr, i64, i64 }, align 16 + %a1003 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1007 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1010 = alloca { ptr, i64, i64 }, align 16 + %a1012 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1015 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1022 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1025 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1027 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1032 = alloca { ptr, i64, i64 }, align 16 + %a1033 = alloca { ptr, i64, i64 }, align 16 + %a1036 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca { ptr, i64, i64 }, align 16 + %a1038 = alloca { ptr, i64, i64 }, align 16 + %a1039 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1042 = alloca { ptr, i64, i64 }, align 16 + %a1043 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1048 = alloca { ptr, i64, i64 }, align 16 + %a1049 = alloca { ptr, i64, i64 }, align 16 + %a1050 = alloca { ptr, i64, i64 }, align 16 + %a1051 = alloca { ptr, i64, i64 }, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1054 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1060 = alloca { ptr, i64, i64 }, align 16 + %a1062 = alloca { ptr, i64, i64 }, align 16 + %a1063 = alloca { ptr, i64, i64 }, align 16 + %a1064 = alloca { ptr, i64, i64 }, align 16 + %a1065 = alloca { ptr, i64, i64 }, align 16 + %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 + %a1069 = alloca { ptr, i64, i64 }, align 16 + %a1070 = alloca { ptr, i64, i64 }, align 16 + %a1071 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1076 = alloca { ptr, i64, i64 }, align 16 + %a1077 = alloca { ptr, i64, i64 }, align 16 + %a1086 = alloca %S.ast.Type, align 16 + %a1087 = alloca %S.ast.Type, align 16 + %a1103 = alloca { ptr, i64, i64 }, align 16 + %a1106 = alloca %S.ast.Type, align 16 + %a1107 = alloca %S.ast.Type, align 16 + %a1113 = alloca { ptr, i64, i64 }, align 16 + %a1120 = alloca { ptr, i64, i64 }, align 16 + %a1121 = alloca { ptr, i64, i64 }, align 16 + %a1126 = alloca { ptr, i64, i64 }, align 16 + %a1139 = alloca { ptr, i64, i64 }, align 16 + %a1142 = alloca %S.ast.Type, align 16 + %a1143 = alloca %S.ast.Type, align 16 + %a1148 = alloca { ptr, i64, i64 }, align 16 + %a1149 = alloca { ptr, i64, i64 }, align 16 + %a1154 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca { ptr, i64, i64 }, align 16 + %a1160 = alloca { ptr, i64, i64 }, align 16 + %a1161 = alloca { ptr, i64, i64 }, align 16 + %a1163 = alloca { ptr, i64, i64 }, align 16 + %a1164 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca { ptr, i64, i64 }, align 16 + %a1166 = alloca { ptr, i64, i64 }, align 16 + %a1169 = alloca { ptr, i64, i64 }, align 16 + %a1170 = alloca { ptr, i64, i64 }, align 16 + %a1171 = alloca { ptr, i64, i64 }, align 16 + %a1172 = alloca { ptr, i64, i64 }, align 16 + %a1174 = alloca { ptr, i64, i64 }, align 16 + %a1175 = alloca { ptr, i64, i64 }, align 16 + %a1176 = alloca { ptr, i64, i64 }, align 16 + %a1177 = alloca { ptr, i64, i64 }, align 16 + %a1179 = alloca { ptr, i64, i64 }, align 16 + %a1185 = alloca %S.ast.Type, align 16 + %a1186 = alloca %S.ast.Type, align 16 + %a1190 = alloca { ptr, i64, i64 }, align 16 + %a1191 = alloca { ptr, i64, i64 }, align 16 + %a1195 = alloca %S.ast.Type, align 16 + %a1196 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.cimport.CFunc %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic7935, label %ok7936 +panic7935: + call void @finch_panic(ptr @.str.5021, i64 4654, ptr @.str.5022) + unreachable +ok7936: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + br i1 %t7, label %then7937, label %endif7939 +then7937: + store { ptr, i64, i64 } zeroinitializer, ptr %a8 + %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + store i64 0, ptr %a10 + br label %each.cond7940 +each.cond7940: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = load i64, ptr %a10 + %t14 = icmp slt i64 %t13, %t12 + br i1 %t14, label %each.body7941, label %each.end7943 +each.body7941: + %t15 = load ptr, ptr %t9 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 + %t17 = load %S.ast.Type, ptr %t16 + store %S.ast.Type %t17, ptr %a18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t20 = load %S.ast.Type, ptr %a18 + %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) + %t22 = load i64, ptr %t19 + %t23 = add i64 %t22, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t23, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t24 = load ptr, ptr %a8 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t22 + store { ptr, i64, i64 } %t21, ptr %t25 + store i64 %t23, ptr %t19 + br label %each.step7942 +each.step7942: + %t26 = load i64, ptr %a10 + %t27 = add i64 %t26, 1 + store i64 %t27, ptr %a10 + br label %each.cond7940 +each.end7943: + %t28 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t29 = load i1, ptr %t28 + br i1 %t29, label %then7944, label %endif7946 +then7944: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %a8 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } { ptr @.str.5023, i64 3, i64 0 }, ptr %t34 + store i64 %t32, ptr %t30 + br label %endif7946 +endif7946: + %t35 = load ptr, ptr %a1 + %t36 = load %S.ast.Node, ptr %a2 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t38 = load i64, ptr %t37 + %t39 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 + %t41 = load i64, ptr %t40 + %t42 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 1 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store { ptr, i64, i64 } { ptr @.str.5024, i64 17, i64 0 }, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.5025, i64 7, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 + %t54 = load %S.ast.Type, ptr %t53 + %t55 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t54) + store { ptr, i64, i64 } %t52, ptr %a57 + store { ptr, i64, i64 } %t55, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t52, ptr %a59 + call void @finch_str_drop(ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.5026, i64 1, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t68 = load { ptr, i64, i64 }, ptr %t67 + store { ptr, i64, i64 } %t66, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t66, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.5027, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5028, i64 2, i64 0 }, ptr %a80 + call void @finch_str_join(ptr %a81, ptr %a8, ptr %a80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t78, ptr %a84 + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t78, ptr %a86 + call void @finch_str_drop(ptr %a86) + store { ptr, i64, i64 } %t82, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.5029, i64 5, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + call void @finch.gen.noteRef(ptr %t35, %S.ast.Node %t36, i64 %t38, i64 %t41, { ptr, i64, i64 } %t93, { ptr, i64, i64 } { ptr @.str.5030, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + call void @finch.drop.arr_str(ptr %a8) + br label %endif7939 +endif7939: + %t95 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 + %t97 = load i64, ptr %t96 + %t98 = icmp sgt i64 %t97, 0 + br i1 %t98, label %then7947, label %endif7949 +then7947: + %t99 = load ptr, ptr %a1 + %t100 = load %S.ast.Node, ptr %a2 + %t101 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } { ptr @.str.5031, i64 16, i64 0 }, ptr %a104 + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.5032, i64 35, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 + %t113 = load { ptr, i64, i64 }, ptr %t112 + store { ptr, i64, i64 } %t111, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t111, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a114 + call void @finch.gen.fail(ptr %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t118) + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_drop(ptr %a119) + br label %endif7949 +endif7949: + %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t120, i32 0, i32 1 + %t122 = load i64, ptr %t121 + store i64 %t122, ptr %a123 + %t124 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t125 = load i1, ptr %t124 + br i1 %t125, label %then7950, label %else7951 +then7950: + %t126 = load i64, ptr %a123 + %t127 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1 + %t129 = load i64, ptr %t128 + %t130 = icmp slt i64 %t126, %t129 + br i1 %t130, label %then7953, label %endif7955 +then7953: + %t131 = load ptr, ptr %a1 + %t132 = load %S.ast.Node, ptr %a2 + %t133 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t134 = load { ptr, i64, i64 }, ptr %t133 + store { ptr, i64, i64 } { ptr @.str.5033, i64 1, i64 0 }, ptr %a136 + store { ptr, i64, i64 } %t134, ptr %a137 + call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a135 + store { ptr, i64, i64 } %t138, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.5034, i64 17, i64 0 }, ptr %a141 + call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) + store { ptr, i64, i64 } %t138, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a139 + %t144 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 + %t146 = load i64, ptr %t145 + call void @finch_str_from_int(ptr %a147, i64 %t146) + %t148 = load { ptr, i64, i64 }, ptr %a147 + store { ptr, i64, i64 } %t143, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + store { ptr, i64, i64 } %t143, ptr %a152 + call void @finch_str_drop(ptr %a152) + store { ptr, i64, i64 } %t148, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t154, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.5035, i64 22, i64 0 }, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t154, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load { ptr, i64, i64 }, ptr %a155 + %t160 = load i64, ptr %a123 + call void @finch_str_from_int(ptr %a161, i64 %t160) + %t162 = load { ptr, i64, i64 }, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t159, ptr %a166 + call void @finch_str_drop(ptr %a166) + store { ptr, i64, i64 } %t162, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a163 + call void @finch.gen.fail(ptr %t131, %S.ast.Node %t132, { ptr, i64, i64 } %t168) + store { ptr, i64, i64 } %t168, ptr %a169 + call void @finch_str_drop(ptr %a169) + br label %endif7955 +endif7955: + br label %endif7952 +else7951: + %t170 = load i64, ptr %a123 + %t171 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 + %t173 = load i64, ptr %t172 + %t174 = icmp ne i64 %t170, %t173 + br i1 %t174, label %then7956, label %endif7958 +then7956: + %t175 = load ptr, ptr %a1 + %t176 = load %S.ast.Node, ptr %a2 + %t177 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t178 = load { ptr, i64, i64 }, ptr %t177 + store { ptr, i64, i64 } { ptr @.str.5036, i64 1, i64 0 }, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.5037, i64 8, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 + %t190 = load i64, ptr %t189 + call void @finch_str_from_int(ptr %a191, i64 %t190) + %t192 = load { ptr, i64, i64 }, ptr %a191 + store { ptr, i64, i64 } %t187, ptr %a194 + store { ptr, i64, i64 } %t192, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t187, ptr %a196 + call void @finch_str_drop(ptr %a196) + store { ptr, i64, i64 } %t192, ptr %a197 + call void @finch_str_drop(ptr %a197) + %t198 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t198, ptr %a200 + store { ptr, i64, i64 } { ptr @.str.5038, i64 22, i64 0 }, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + store { ptr, i64, i64 } %t198, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a199 + %t204 = load i64, ptr %a123 + call void @finch_str_from_int(ptr %a205, i64 %t204) + %t206 = load { ptr, i64, i64 }, ptr %a205 + store { ptr, i64, i64 } %t203, ptr %a208 + store { ptr, i64, i64 } %t206, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t203, ptr %a210 + call void @finch_str_drop(ptr %a210) + store { ptr, i64, i64 } %t206, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a207 + call void @finch.gen.fail(ptr %t175, %S.ast.Node %t176, { ptr, i64, i64 } %t212) + store { ptr, i64, i64 } %t212, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %endif7958 +endif7958: + br label %endif7952 +endif7952: + %t214 = load ptr, ptr %a1 + %t215 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 + %t216 = load %S.ast.Type, ptr %t215 + %t217 = load %S.ast.Node, ptr %a2 + %t218 = call %S.ast.Type @finch.gen.resolve(ptr %t214, %S.ast.Type %t216, %S.ast.Node %t217) + store %S.ast.Type %t218, ptr %a219 + %t220 = load ptr, ptr %a1 + %t221 = load %S.ast.Node, ptr %a2 + %t222 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t223 = load { ptr, i64, i64 }, ptr %t222 + %t224 = load %S.ast.Type, ptr %a219 + call void @finch.gen.checkByValue(ptr %t220, %S.ast.Node %t221, { ptr, i64, i64 } %t223, %S.ast.Type %t224, { ptr, i64, i64 } { ptr @.str.5039, i64 7, i64 0 }) + store { ptr, i64, i64 } zeroinitializer, ptr %a225 + %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + store i64 0, ptr %a227 + br label %each.cond7959 +each.cond7959: + %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i32 0, i32 1 + %t229 = load i64, ptr %t228 + %t230 = load i64, ptr %a227 + %t231 = icmp slt i64 %t230, %t229 + br i1 %t231, label %each.body7960, label %each.end7962 +each.body7960: + %t232 = load ptr, ptr %t226 + %t233 = getelementptr inbounds %S.ast.Type, ptr %t232, i64 %t230 + %t234 = load %S.ast.Type, ptr %t233 + store %S.ast.Type %t234, ptr %a235 + %t236 = load ptr, ptr %a1 + %t237 = load %S.ast.Type, ptr %a235 + %t238 = load %S.ast.Node, ptr %a2 + %t239 = call %S.ast.Type @finch.gen.resolve(ptr %t236, %S.ast.Type %t237, %S.ast.Node %t238) + store %S.ast.Type %t239, ptr %a240 + %t241 = load ptr, ptr %a1 + %t242 = load %S.ast.Node, ptr %a2 + %t243 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t244 = load { ptr, i64, i64 }, ptr %t243 + %t245 = load %S.ast.Type, ptr %a240 + call void @finch.gen.checkByValue(ptr %t241, %S.ast.Node %t242, { ptr, i64, i64 } %t244, %S.ast.Type %t245, { ptr, i64, i64 } { ptr @.str.5040, i64 5, i64 0 }) + %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %a225, i32 0, i32 1 + %t247 = load %S.ast.Type, ptr %a240 + store %S.ast.Type %t247, ptr %a248 + call void @finch.copy.S_ast_Type(ptr %a249, ptr %a248) + %t250 = load %S.ast.Type, ptr %a249 + %t251 = load i64, ptr %t246 + %t252 = add i64 %t251, 1 + call void @finch_arr_reserve(ptr %a225, i64 %t252, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t253 = load ptr, ptr %a225 + %t254 = getelementptr inbounds %S.ast.Type, ptr %t253, i64 %t251 + store %S.ast.Type %t250, ptr %t254 + store i64 %t252, ptr %t246 + call void @finch.drop.S_ast_Type(ptr %a240) + br label %each.step7961 +each.step7961: + %t255 = load i64, ptr %a227 + %t256 = add i64 %t255, 1 + store i64 %t256, ptr %a227 + br label %each.cond7959 +each.end7962: + %t257 = load ptr, ptr %a1 + %t258 = load %S.ast.Type, ptr %a219 + %t259 = load { ptr, i64, i64 }, ptr %a225 + %t260 = call %S.gen.Plan @finch.gen.makePlan(ptr %t257, %S.ast.Type %t258, { ptr, i64, i64 } %t259) + store %S.gen.Plan %t260, ptr %a261 + store { ptr, i64, i64 } zeroinitializer, ptr %a262 + store { ptr, i64, i64 } zeroinitializer, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.5041, i64 0, i64 0 }, ptr %a264 + %t265 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 + %t266 = load i1, ptr %t265 + br i1 %t266, label %then7963, label %endif7965 +then7963: + %t267 = load ptr, ptr %a1 + %t268 = load ptr, ptr %a1 + %t269 = load %S.ast.Type, ptr %a219 + %t270 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t268, %S.ast.Type %t269) + %t271 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t267, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t271, ptr %a264 + store { ptr, i64, i64 } %t273, ptr %a274 + call void @finch_str_drop(ptr %a274) + %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t276 = load ptr, ptr %a1 + %t277 = load %S.ast.Type, ptr %a219 + %t278 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t276, %S.ast.Type %t277) + store { ptr, i64, i64 } { ptr @.str.5042, i64 9, i64 0 }, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t283, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.5043, i64 10, i64 0 }, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = load i64, ptr %t275 + %t290 = add i64 %t289, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t290, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t291 = load ptr, ptr %a262 + %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i64 %t289 + store { ptr, i64, i64 } %t288, ptr %t292 + store i64 %t290, ptr %t275 + %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t294 = load ptr, ptr %a1 + %t295 = load %S.ast.Type, ptr %a219 + %t296 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t294, %S.ast.Type %t295) + store { ptr, i64, i64 } { ptr @.str.5044, i64 9, i64 0 }, ptr %a298 + store { ptr, i64, i64 } %t296, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + store { ptr, i64, i64 } %t296, ptr %a300 + call void @finch_str_drop(ptr %a300) + %t301 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } %t301, ptr %a303 + store { ptr, i64, i64 } { ptr @.str.5045, i64 11, i64 0 }, ptr %a304 + call void @finch_str_concat(ptr %a302, ptr %a303, ptr %a304) + store { ptr, i64, i64 } %t301, ptr %a305 + call void @finch_str_drop(ptr %a305) + %t306 = load { ptr, i64, i64 }, ptr %a302 + %t307 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t306, ptr %a309 + store { ptr, i64, i64 } %t307, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t306, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = load { ptr, i64, i64 }, ptr %a308 + %t313 = load i64, ptr %t293 + %t314 = add i64 %t313, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t314, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t315 = load ptr, ptr %a263 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t315, i64 %t313 + store { ptr, i64, i64 } %t312, ptr %t316 + store i64 %t314, ptr %t293 + br label %endif7965 +endif7965: + store { ptr, i64, i64 } zeroinitializer, ptr %a317 + %t318 = load ptr, ptr %a1 + %t319 = icmp eq ptr %t318, null + br i1 %t319, label %panic7966, label %ok7967 +panic7966: + call void @finch_panic(ptr @.str.5046, i64 4693, ptr @.str.5047) + unreachable +ok7967: + %t320 = getelementptr inbounds %S.gen.Gen, ptr %t318, i32 0, i32 11 + %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i32 0, i32 1 + %t322 = load i64, ptr %t321 + store i64 %t322, ptr %a323 + %t324 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %t324, i32 0, i32 1 + %t326 = load i64, ptr %t325 + store i64 0, ptr %a327 + br label %for.cond7968 +for.cond7968: + %t328 = load i64, ptr %a327 + %t329 = icmp slt i64 %t328, %t326 + br i1 %t329, label %for.body7969, label %for.end7971 +for.body7969: + %t330 = load i64, ptr %a327 + %t331 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 + %t333 = load i64, ptr %t332 + %t334 = icmp slt i64 %t330, %t333 + br i1 %t334, label %then7972, label %endif7974 +then7972: + %t335 = load i64, ptr %a327 + %t336 = load { ptr, i64, i64 }, ptr %a225 + %t337 = extractvalue { ptr, i64, i64 } %t336, 1 + %t338 = icmp uge i64 %t335, %t337 + br i1 %t338, label %range7975, label %inrange7976 +range7975: + call void @finch_panic_index(ptr @.str.5048, i64 4696, i64 %t335, i64 %t337) + unreachable +inrange7976: + %t339 = extractvalue { ptr, i64, i64 } %t336, 0 + %t340 = getelementptr inbounds %S.ast.Type, ptr %t339, i64 %t335 + %t341 = load %S.ast.Type, ptr %t340 + store %S.ast.Type %t341, ptr %a342 + call void @finch.copy.S_ast_Type(ptr %a343, ptr %a342) + %t344 = load %S.ast.Type, ptr %a343 + store %S.ast.Type %t344, ptr %a345 + %t346 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 1 + %t347 = load i64, ptr %a327 + %t348 = load { ptr, i64, i64 }, ptr %t346 + %t349 = extractvalue { ptr, i64, i64 } %t348, 1 + %t350 = icmp uge i64 %t347, %t349 + br i1 %t350, label %range7977, label %inrange7978 +range7977: + call void @finch_panic_index(ptr @.str.5049, i64 4697, i64 %t347, i64 %t349) + unreachable +inrange7978: + %t351 = extractvalue { ptr, i64, i64 } %t348, 0 + %t352 = getelementptr inbounds %S.gen.Abi, ptr %t351, i64 %t347 + %t353 = load %S.gen.Abi, ptr %t352 + store %S.gen.Abi %t353, ptr %a354 + call void @finch.copy.S_gen_Abi(ptr %a355, ptr %a354) + %t356 = load %S.gen.Abi, ptr %a355 + store %S.gen.Abi %t356, ptr %a357 + %t358 = load ptr, ptr %a1 + %t359 = load ptr, ptr %a1 + %t360 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t361 = load i64, ptr %a327 + %t362 = load { ptr, i64, i64 }, ptr %t360 + %t363 = extractvalue { ptr, i64, i64 } %t362, 1 + %t364 = icmp uge i64 %t361, %t363 + br i1 %t364, label %range7979, label %inrange7980 +range7979: + call void @finch_panic_index(ptr @.str.5050, i64 4698, i64 %t361, i64 %t363) + unreachable +inrange7980: + %t365 = extractvalue { ptr, i64, i64 } %t362, 0 + %t366 = getelementptr inbounds %S.ast.Node, ptr %t365, i64 %t361 + %t367 = load %S.ast.Node, ptr %t366 + %t368 = load %S.ast.Type, ptr %a345 + %t369 = call %S.gen.Val @finch.gen.exprWant(ptr %t359, %S.ast.Node %t367, %S.ast.Type %t368) + %t370 = load %S.ast.Type, ptr %a345 + %t371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t372 = load i64, ptr %a327 + %t373 = load { ptr, i64, i64 }, ptr %t371 + %t374 = extractvalue { ptr, i64, i64 } %t373, 1 + %t375 = icmp uge i64 %t372, %t374 + br i1 %t375, label %range7981, label %inrange7982 +range7981: + call void @finch_panic_index(ptr @.str.5051, i64 4698, i64 %t372, i64 %t374) + unreachable +inrange7982: + %t376 = extractvalue { ptr, i64, i64 } %t373, 0 + %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i64 %t372 + %t378 = load %S.ast.Node, ptr %t377 + %t379 = load i64, ptr %a327 + %t380 = add i64 %t379, 1 + call void @finch_str_from_int(ptr %a381, i64 %t380) + %t382 = load { ptr, i64, i64 }, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.5052, i64 9, i64 0 }, ptr %a384 + store { ptr, i64, i64 } %t382, ptr %a385 + call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) + store { ptr, i64, i64 } %t382, ptr %a386 + call void @finch_str_drop(ptr %a386) + %t387 = load { ptr, i64, i64 }, ptr %a383 + store { ptr, i64, i64 } %t387, ptr %a389 + store { ptr, i64, i64 } { ptr @.str.5053, i64 4, i64 0 }, ptr %a390 + call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) + store { ptr, i64, i64 } %t387, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a388 + %t393 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t394 = load { ptr, i64, i64 }, ptr %t393 + store { ptr, i64, i64 } %t392, ptr %a396 + store { ptr, i64, i64 } %t394, ptr %a397 + call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) + store { ptr, i64, i64 } %t392, ptr %a398 + call void @finch_str_drop(ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a395 + %t400 = call %S.gen.Val @finch.gen.coerce(ptr %t358, %S.gen.Val %t369, %S.ast.Type %t370, %S.ast.Node %t378, { ptr, i64, i64 } %t399) + store %S.gen.Val %t369, ptr %a401 + call void @finch.drop.S_gen_Val(ptr %a401) + store { ptr, i64, i64 } %t399, ptr %a402 + call void @finch_str_drop(ptr %a402) + store %S.gen.Val %t400, ptr %a403 + %t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 + %t405 = load %S.gen.Val, ptr %a403 + store %S.gen.Val %t405, ptr %a406 + call void @finch.copy.S_gen_Val(ptr %a407, ptr %a406) + %t408 = load %S.gen.Val, ptr %a407 + %t409 = load i64, ptr %t404 + %t410 = add i64 %t409, 1 + call void @finch_arr_reserve(ptr %a317, i64 %t410, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t411 = load ptr, ptr %a317 + %t412 = getelementptr inbounds %S.gen.Val, ptr %t411, i64 %t409 + store %S.gen.Val %t408, ptr %t412 + store i64 %t410, ptr %t404 + %t413 = load ptr, ptr %a1 + %t414 = load %S.gen.Val, ptr %a403 + call void @finch.gen.hold(ptr %t413, %S.gen.Val %t414) + %t415 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t416, ptr %a417 + store { ptr, i64, i64 } { ptr @.str.5054, i64 6, i64 0 }, ptr %a418 + %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) + %t420 = icmp ne i32 %t419, 0 + br i1 %t420, label %then7983, label %else7984 +then7983: + %t421 = load ptr, ptr %a1 + %t422 = load ptr, ptr %a1 + %t423 = load %S.ast.Type, ptr %a345 + %t424 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t422, %S.ast.Type %t423) + %t425 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t421, { ptr, i64, i64 } %t424) + store { ptr, i64, i64 } %t424, ptr %a426 + call void @finch_str_drop(ptr %a426) + store { ptr, i64, i64 } %t425, ptr %a427 + %t428 = load ptr, ptr %a1 + %t429 = load ptr, ptr %a1 + %t430 = load %S.ast.Type, ptr %a345 + %t431 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t429, %S.ast.Type %t430) + %t432 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t433 = load { ptr, i64, i64 }, ptr %t432 + %t434 = load { ptr, i64, i64 }, ptr %a427 + call void @finch.gen.store(ptr %t428, { ptr, i64, i64 } %t431, { ptr, i64, i64 } %t433, { ptr, i64, i64 } %t434) + store { ptr, i64, i64 } %t431, ptr %a435 + call void @finch_str_drop(ptr %a435) + %t436 = load ptr, ptr %a1 + %t437 = load %S.ast.Type, ptr %a345 + %t438 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t436, %S.ast.Type %t437) + store { ptr, i64, i64 } { ptr @.str.5055, i64 10, i64 0 }, ptr %a440 + store { ptr, i64, i64 } %t438, ptr %a441 + call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) + store { ptr, i64, i64 } %t438, ptr %a442 + call void @finch_str_drop(ptr %a442) + %t443 = load { ptr, i64, i64 }, ptr %a439 + store { ptr, i64, i64 } %t443, ptr %a445 + store { ptr, i64, i64 } { ptr @.str.5056, i64 8, i64 0 }, ptr %a446 + call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) + store { ptr, i64, i64 } %t443, ptr %a447 + call void @finch_str_drop(ptr %a447) + %t448 = load { ptr, i64, i64 }, ptr %a444 + %t449 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 3 + %t450 = load i64, ptr %t449 + call void @finch_str_from_int(ptr %a451, i64 %t450) + %t452 = load { ptr, i64, i64 }, ptr %a451 + store { ptr, i64, i64 } %t448, ptr %a454 + store { ptr, i64, i64 } %t452, ptr %a455 + call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) + store { ptr, i64, i64 } %t448, ptr %a456 + call void @finch_str_drop(ptr %a456) + store { ptr, i64, i64 } %t452, ptr %a457 + call void @finch_str_drop(ptr %a457) + %t458 = load { ptr, i64, i64 }, ptr %a453 + store { ptr, i64, i64 } %t458, ptr %a459 + %t460 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t461 = load { ptr, i64, i64 }, ptr %a459 + store { ptr, i64, i64 } %t461, ptr %a462 + call void @finch_str_copy(ptr %a463, ptr %a462) + %t464 = load { ptr, i64, i64 }, ptr %a463 + %t465 = load i64, ptr %t460 + %t466 = add i64 %t465, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t466, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t467 = load ptr, ptr %a262 + %t468 = getelementptr inbounds { ptr, i64, i64 }, ptr %t467, i64 %t465 + store { ptr, i64, i64 } %t464, ptr %t468 + store i64 %t466, ptr %t460 + %t469 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t470 = load { ptr, i64, i64 }, ptr %a459 + store { ptr, i64, i64 } %t470, ptr %a472 + store { ptr, i64, i64 } { ptr @.str.5057, i64 1, i64 0 }, ptr %a473 + call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a471 + %t475 = load { ptr, i64, i64 }, ptr %a427 + store { ptr, i64, i64 } %t474, ptr %a477 + store { ptr, i64, i64 } %t475, ptr %a478 + call void @finch_str_concat(ptr %a476, ptr %a477, ptr %a478) + store { ptr, i64, i64 } %t474, ptr %a479 + call void @finch_str_drop(ptr %a479) + %t480 = load { ptr, i64, i64 }, ptr %a476 + %t481 = load i64, ptr %t469 + %t482 = add i64 %t481, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t482, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t483 = load ptr, ptr %a263 + %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 %t481 + store { ptr, i64, i64 } %t480, ptr %t484 + store i64 %t482, ptr %t469 + call void @finch_str_drop(ptr %a459) + call void @finch_str_drop(ptr %a427) + br label %endif7985 +else7984: + %t485 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 + %t486 = load { ptr, i64, i64 }, ptr %t485 + store { ptr, i64, i64 } %t486, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.5058, i64 8, i64 0 }, ptr %a488 + %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) + %t490 = icmp ne i32 %t489, 0 + br i1 %t490, label %then7986, label %else7987 +then7986: + %t491 = load ptr, ptr %a1 + %t492 = load ptr, ptr %a1 + %t493 = load %S.ast.Type, ptr %a345 + %t494 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t492, %S.ast.Type %t493) + %t495 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t491, { ptr, i64, i64 } %t494) + store { ptr, i64, i64 } %t494, ptr %a496 + call void @finch_str_drop(ptr %a496) + store { ptr, i64, i64 } %t495, ptr %a497 + %t498 = load ptr, ptr %a1 + %t499 = load ptr, ptr %a1 + %t500 = load %S.ast.Type, ptr %a345 + %t501 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t499, %S.ast.Type %t500) + %t502 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t503 = load { ptr, i64, i64 }, ptr %t502 + %t504 = load { ptr, i64, i64 }, ptr %a497 + call void @finch.gen.store(ptr %t498, { ptr, i64, i64 } %t501, { ptr, i64, i64 } %t503, { ptr, i64, i64 } %t504) + store { ptr, i64, i64 } %t501, ptr %a505 + call void @finch_str_drop(ptr %a505) + %t506 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t507 = load i64, ptr %t506 + %t508 = add i64 %t507, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t508, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t509 = load ptr, ptr %a262 + %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i64 %t507 + store { ptr, i64, i64 } { ptr @.str.5059, i64 3, i64 0 }, ptr %t510 + store i64 %t508, ptr %t506 + %t511 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t512 = load { ptr, i64, i64 }, ptr %a497 + store { ptr, i64, i64 } { ptr @.str.5060, i64 4, i64 0 }, ptr %a514 + store { ptr, i64, i64 } %t512, ptr %a515 + call void @finch_str_concat(ptr %a513, ptr %a514, ptr %a515) + %t516 = load { ptr, i64, i64 }, ptr %a513 + %t517 = load i64, ptr %t511 + %t518 = add i64 %t517, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t518, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t519 = load ptr, ptr %a263 + %t520 = getelementptr inbounds { ptr, i64, i64 }, ptr %t519, i64 %t517 + store { ptr, i64, i64 } %t516, ptr %t520 + store i64 %t518, ptr %t511 + call void @finch_str_drop(ptr %a497) + br label %endif7988 +else7987: + %t521 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 + %t522 = load { ptr, i64, i64 }, ptr %t521 + store { ptr, i64, i64 } %t522, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.5061, i64 6, i64 0 }, ptr %a524 + %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) + %t526 = icmp ne i32 %t525, 0 + br i1 %t526, label %then7989, label %else7990 +then7989: + %t527 = load ptr, ptr %a1 + %t528 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t527, { ptr, i64, i64 } { ptr @.str.5062, i64 9, i64 0 }) + store { ptr, i64, i64 } %t528, ptr %a529 + %t530 = load ptr, ptr %a1 + %t531 = load ptr, ptr %a1 + %t532 = load %S.ast.Type, ptr %a345 + %t533 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t531, %S.ast.Type %t532) + %t534 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t535 = load { ptr, i64, i64 }, ptr %t534 + %t536 = load { ptr, i64, i64 }, ptr %a529 + call void @finch.gen.store(ptr %t530, { ptr, i64, i64 } %t533, { ptr, i64, i64 } %t535, { ptr, i64, i64 } %t536) + store { ptr, i64, i64 } %t533, ptr %a537 + call void @finch_str_drop(ptr %a537) + %t538 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t539 = getelementptr inbounds { ptr, i64, i64 }, ptr %t538, i32 0, i32 1 + %t540 = load i64, ptr %t539 + store i64 0, ptr %a541 + br label %for.cond7992 +for.cond7992: + %t542 = load i64, ptr %a541 + %t543 = icmp slt i64 %t542, %t540 + br i1 %t543, label %for.body7993, label %for.end7995 +for.body7993: + %t544 = load ptr, ptr %a1 + %t545 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t546 = load i64, ptr %a541 + %t547 = load { ptr, i64, i64 }, ptr %t545 + %t548 = extractvalue { ptr, i64, i64 } %t547, 1 + %t549 = icmp uge i64 %t546, %t548 + br i1 %t549, label %range7996, label %inrange7997 +range7996: + call void @finch_panic_index(ptr @.str.5063, i64 4716, i64 %t546, i64 %t548) + unreachable +inrange7997: + %t550 = extractvalue { ptr, i64, i64 } %t547, 0 + %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %t550, i64 %t546 + %t552 = load { ptr, i64, i64 }, ptr %t551 + %t553 = load ptr, ptr %a1 + %t554 = load { ptr, i64, i64 }, ptr %a529 + store { ptr, i64, i64 } { ptr @.str.5064, i64 31, i64 0 }, ptr %a556 + store { ptr, i64, i64 } %t554, ptr %a557 + call void @finch_str_concat(ptr %a555, ptr %a556, ptr %a557) + %t558 = load { ptr, i64, i64 }, ptr %a555 + store { ptr, i64, i64 } %t558, ptr %a560 + store { ptr, i64, i64 } { ptr @.str.5065, i64 6, i64 0 }, ptr %a561 + call void @finch_str_concat(ptr %a559, ptr %a560, ptr %a561) + store { ptr, i64, i64 } %t558, ptr %a562 + call void @finch_str_drop(ptr %a562) + %t563 = load { ptr, i64, i64 }, ptr %a559 + %t564 = load i64, ptr %a541 + %t565 = mul i64 8, %t564 + call void @finch_str_from_int(ptr %a566, i64 %t565) + %t567 = load { ptr, i64, i64 }, ptr %a566 + store { ptr, i64, i64 } %t563, ptr %a569 + store { ptr, i64, i64 } %t567, ptr %a570 + call void @finch_str_concat(ptr %a568, ptr %a569, ptr %a570) + store { ptr, i64, i64 } %t563, ptr %a571 + call void @finch_str_drop(ptr %a571) + store { ptr, i64, i64 } %t567, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a568 + %t574 = call { ptr, i64, i64 } @finch.gen.op(ptr %t553, { ptr, i64, i64 } %t573) + store { ptr, i64, i64 } %t573, ptr %a575 + call void @finch_str_drop(ptr %a575) + %t576 = call { ptr, i64, i64 } @finch.gen.load(ptr %t544, { ptr, i64, i64 } %t552, { ptr, i64, i64 } %t574) + store { ptr, i64, i64 } %t574, ptr %a577 + call void @finch_str_drop(ptr %a577) + store { ptr, i64, i64 } %t576, ptr %a578 + %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t580 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t581 = load i64, ptr %a541 + %t582 = load { ptr, i64, i64 }, ptr %t580 + %t583 = extractvalue { ptr, i64, i64 } %t582, 1 + %t584 = icmp uge i64 %t581, %t583 + br i1 %t584, label %range7998, label %inrange7999 +range7998: + call void @finch_panic_index(ptr @.str.5066, i64 4717, i64 %t581, i64 %t583) + unreachable +inrange7999: + %t585 = extractvalue { ptr, i64, i64 } %t582, 0 + %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %t585, i64 %t581 + %t587 = load { ptr, i64, i64 }, ptr %t586 + store { ptr, i64, i64 } %t587, ptr %a588 + call void @finch_str_copy(ptr %a589, ptr %a588) + %t590 = load { ptr, i64, i64 }, ptr %a589 + %t591 = load i64, ptr %t579 + %t592 = add i64 %t591, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t592, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t593 = load ptr, ptr %a262 + %t594 = getelementptr inbounds { ptr, i64, i64 }, ptr %t593, i64 %t591 + store { ptr, i64, i64 } %t590, ptr %t594 + store i64 %t592, ptr %t579 + %t595 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t596 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t597 = load i64, ptr %a541 + %t598 = load { ptr, i64, i64 }, ptr %t596 + %t599 = extractvalue { ptr, i64, i64 } %t598, 1 + %t600 = icmp uge i64 %t597, %t599 + br i1 %t600, label %range8000, label %inrange8001 +range8000: + call void @finch_panic_index(ptr @.str.5067, i64 4718, i64 %t597, i64 %t599) + unreachable +inrange8001: + %t601 = extractvalue { ptr, i64, i64 } %t598, 0 + %t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %t601, i64 %t597 + %t603 = load { ptr, i64, i64 }, ptr %t602 + store { ptr, i64, i64 } %t603, ptr %a605 + store { ptr, i64, i64 } { ptr @.str.5068, i64 1, i64 0 }, ptr %a606 + call void @finch_str_concat(ptr %a604, ptr %a605, ptr %a606) + %t607 = load { ptr, i64, i64 }, ptr %a604 + %t608 = load { ptr, i64, i64 }, ptr %a578 + store { ptr, i64, i64 } %t607, ptr %a610 + store { ptr, i64, i64 } %t608, ptr %a611 + call void @finch_str_concat(ptr %a609, ptr %a610, ptr %a611) + store { ptr, i64, i64 } %t607, ptr %a612 + call void @finch_str_drop(ptr %a612) + %t613 = load { ptr, i64, i64 }, ptr %a609 + %t614 = load i64, ptr %t595 + %t615 = add i64 %t614, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t615, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t616 = load ptr, ptr %a263 + %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %t616, i64 %t614 + store { ptr, i64, i64 } %t613, ptr %t617 + store i64 %t615, ptr %t595 + call void @finch_str_drop(ptr %a578) + br label %for.step7994 +for.step7994: + %t618 = load i64, ptr %a541 + %t619 = add i64 %t618, 1 + store i64 %t619, ptr %a541 + br label %for.cond7992 +for.end7995: + call void @finch_str_drop(ptr %a529) + br label %endif7991 +else7990: + %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t621 = load ptr, ptr %a1 + %t622 = load %S.ast.Type, ptr %a345 + %t623 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t621, %S.ast.Type %t622) + %t624 = load ptr, ptr %a1 + %t625 = load %S.ast.Type, ptr %a345 + %t626 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t624, %S.ast.Type %t625) + store { ptr, i64, i64 } %t623, ptr %a628 + store { ptr, i64, i64 } %t626, ptr %a629 + call void @finch_str_concat(ptr %a627, ptr %a628, ptr %a629) + store { ptr, i64, i64 } %t623, ptr %a630 + call void @finch_str_drop(ptr %a630) + store { ptr, i64, i64 } %t626, ptr %a631 + call void @finch_str_drop(ptr %a631) + %t632 = load { ptr, i64, i64 }, ptr %a627 + %t633 = load i64, ptr %t620 + %t634 = add i64 %t633, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t634, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t635 = load ptr, ptr %a262 + %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t633 + store { ptr, i64, i64 } %t632, ptr %t636 + store i64 %t634, ptr %t620 + %t637 = getelementptr inbounds %S.ast.Type, ptr %a345, i32 0, i32 0 + %t638 = load { ptr, i64, i64 }, ptr %t637 + store { ptr, i64, i64 } %t638, ptr %a639 + store { ptr, i64, i64 } { ptr @.str.5069, i64 3, i64 0 }, ptr %a640 + %t641 = call i32 @finch_str_eq(ptr %a639, ptr %a640) + %t642 = icmp ne i32 %t641, 0 + br i1 %t642, label %then8002, label %else8003 +then8002: + %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t644 = load ptr, ptr %a1 + %t645 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t646 = load { ptr, i64, i64 }, ptr %t645 + %t647 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t644, { ptr, i64, i64 } %t646) + store { ptr, i64, i64 } { ptr @.str.5070, i64 4, i64 0 }, ptr %a649 + store { ptr, i64, i64 } %t647, ptr %a650 + call void @finch_str_concat(ptr %a648, ptr %a649, ptr %a650) + store { ptr, i64, i64 } %t647, ptr %a651 + call void @finch_str_drop(ptr %a651) + %t652 = load { ptr, i64, i64 }, ptr %a648 + %t653 = load i64, ptr %t643 + %t654 = add i64 %t653, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t654, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t655 = load ptr, ptr %a263 + %t656 = getelementptr inbounds { ptr, i64, i64 }, ptr %t655, i64 %t653 + store { ptr, i64, i64 } %t652, ptr %t656 + store i64 %t654, ptr %t643 + br label %endif8004 +else8003: + %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t658 = load ptr, ptr %a1 + %t659 = load %S.ast.Type, ptr %a345 + %t660 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t658, %S.ast.Type %t659) + %t661 = load ptr, ptr %a1 + %t662 = load %S.ast.Type, ptr %a345 + %t663 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t661, %S.ast.Type %t662) + store { ptr, i64, i64 } %t660, ptr %a665 + store { ptr, i64, i64 } %t663, ptr %a666 + call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) + store { ptr, i64, i64 } %t660, ptr %a667 + call void @finch_str_drop(ptr %a667) + store { ptr, i64, i64 } %t663, ptr %a668 + call void @finch_str_drop(ptr %a668) + %t669 = load { ptr, i64, i64 }, ptr %a664 + store { ptr, i64, i64 } %t669, ptr %a671 + store { ptr, i64, i64 } { ptr @.str.5071, i64 1, i64 0 }, ptr %a672 + call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672) + store { ptr, i64, i64 } %t669, ptr %a673 + call void @finch_str_drop(ptr %a673) + %t674 = load { ptr, i64, i64 }, ptr %a670 + %t675 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t676 = load { ptr, i64, i64 }, ptr %t675 + store { ptr, i64, i64 } %t674, ptr %a678 + store { ptr, i64, i64 } %t676, ptr %a679 + call void @finch_str_concat(ptr %a677, ptr %a678, ptr %a679) + store { ptr, i64, i64 } %t674, ptr %a680 + call void @finch_str_drop(ptr %a680) + %t681 = load { ptr, i64, i64 }, ptr %a677 + %t682 = load i64, ptr %t657 + %t683 = add i64 %t682, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t683, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t684 = load ptr, ptr %a263 + %t685 = getelementptr inbounds { ptr, i64, i64 }, ptr %t684, i64 %t682 + store { ptr, i64, i64 } %t681, ptr %t685 + store i64 %t683, ptr %t657 + br label %endif8004 +endif8004: + br label %endif7991 +endif7991: + br label %endif7988 +endif7988: + br label %endif7985 +endif7985: + call void @finch.drop.S_gen_Val(ptr %a403) + call void @finch.drop.S_gen_Abi(ptr %a357) + call void @finch.drop.S_ast_Type(ptr %a345) + br label %for.step7970 +endif7974: + %t686 = load ptr, ptr %a1 + %t687 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t688 = load i64, ptr %a327 + %t689 = load { ptr, i64, i64 }, ptr %t687 + %t690 = extractvalue { ptr, i64, i64 } %t689, 1 + %t691 = icmp uge i64 %t688, %t690 + br i1 %t691, label %range8005, label %inrange8006 +range8005: + call void @finch_panic_index(ptr @.str.5072, i64 4731, i64 %t688, i64 %t690) + unreachable +inrange8006: + %t692 = extractvalue { ptr, i64, i64 } %t689, 0 + %t693 = getelementptr inbounds %S.ast.Node, ptr %t692, i64 %t688 + %t694 = load %S.ast.Node, ptr %t693 + %t695 = call %S.gen.Val @finch.gen.expr(ptr %t686, %S.ast.Node %t694) + store %S.gen.Val %t695, ptr %a696 + %t697 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 1 + %t698 = load %S.ast.Type, ptr %t697 + store %S.ast.Type %t698, ptr %a699 + call void @finch.copy.S_ast_Type(ptr %a700, ptr %a699) + %t701 = load %S.ast.Type, ptr %a700 + store %S.ast.Type %t701, ptr %a702 + %t703 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t704 = load { ptr, i64, i64 }, ptr %t703 + store { ptr, i64, i64 } %t704, ptr %a705 + store { ptr, i64, i64 } { ptr @.str.5073, i64 4, i64 0 }, ptr %a706 + %t707 = call i32 @finch_str_eq(ptr %a705, ptr %a706) + %t708 = icmp ne i32 %t707, 0 + br i1 %t708, label %then8007, label %endif8009 +then8007: + %t709 = load ptr, ptr %a1 + %t710 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t711 = load i64, ptr %a327 + %t712 = load { ptr, i64, i64 }, ptr %t710 + %t713 = extractvalue { ptr, i64, i64 } %t712, 1 + %t714 = icmp uge i64 %t711, %t713 + br i1 %t714, label %range8010, label %inrange8011 +range8010: + call void @finch_panic_index(ptr @.str.5074, i64 4734, i64 %t711, i64 %t713) + unreachable +inrange8011: + %t715 = extractvalue { ptr, i64, i64 } %t712, 0 + %t716 = getelementptr inbounds %S.ast.Node, ptr %t715, i64 %t711 + %t717 = load %S.ast.Node, ptr %t716 + call void @finch.gen.fail(ptr %t709, %S.ast.Node %t717, { ptr, i64, i64 } { ptr @.str.5075, i64 23, i64 0 }) + br label %endif8009 +endif8009: + %t718 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 + %t719 = load %S.gen.Val, ptr %a696 + store %S.gen.Val %t719, ptr %a720 + call void @finch.copy.S_gen_Val(ptr %a721, ptr %a720) + %t722 = load %S.gen.Val, ptr %a721 + %t723 = load i64, ptr %t718 + %t724 = add i64 %t723, 1 + call void @finch_arr_reserve(ptr %a317, i64 %t724, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t725 = load ptr, ptr %a317 + %t726 = getelementptr inbounds %S.gen.Val, ptr %t725, i64 %t723 + store %S.gen.Val %t722, ptr %t726 + store i64 %t724, ptr %t718 + %t727 = load ptr, ptr %a1 + %t728 = load %S.gen.Val, ptr %a696 + call void @finch.gen.hold(ptr %t727, %S.gen.Val %t728) + %t729 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t730 = load { ptr, i64, i64 }, ptr %t729 + store { ptr, i64, i64 } %t730, ptr %a731 + store { ptr, i64, i64 } { ptr @.str.5076, i64 6, i64 0 }, ptr %a732 + %t733 = call i32 @finch_str_eq(ptr %a731, ptr %a732) + %t734 = icmp ne i32 %t733, 0 + br label %logic.from8012 +logic.from8012: + br i1 %t734, label %logic.end8014, label %logic.rhs8013 +logic.rhs8013: + %t735 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t736 = load { ptr, i64, i64 }, ptr %t735 + store { ptr, i64, i64 } %t736, ptr %a737 + store { ptr, i64, i64 } { ptr @.str.5077, i64 5, i64 0 }, ptr %a738 + %t739 = call i32 @finch_str_eq(ptr %a737, ptr %a738) + %t740 = icmp ne i32 %t739, 0 + br label %logic.rend8015 +logic.rend8015: + br label %logic.end8014 +logic.end8014: + %t741 = phi i1 [ true, %logic.from8012 ], [ %t740, %logic.rend8015 ] + br i1 %t741, label %then8016, label %endif8018 +then8016: + %t742 = load ptr, ptr %a1 + %t743 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t744 = load i64, ptr %a327 + %t745 = load { ptr, i64, i64 }, ptr %t743 + %t746 = extractvalue { ptr, i64, i64 } %t745, 1 + %t747 = icmp uge i64 %t744, %t746 + br i1 %t747, label %range8019, label %inrange8020 +range8019: + call void @finch_panic_index(ptr @.str.5078, i64 4739, i64 %t744, i64 %t746) + unreachable +inrange8020: + %t748 = extractvalue { ptr, i64, i64 } %t745, 0 + %t749 = getelementptr inbounds %S.ast.Node, ptr %t748, i64 %t744 + %t750 = load %S.ast.Node, ptr %t749 + call void @finch.gen.fail(ptr %t742, %S.ast.Node %t750, { ptr, i64, i64 } { ptr @.str.5079, i64 68, i64 0 }) + br label %endif8018 +endif8018: + %t751 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 + %t752 = load { ptr, i64, i64 }, ptr %t751 + store { ptr, i64, i64 } %t752, ptr %a753 + call void @finch_str_copy(ptr %a754, ptr %a753) + %t755 = load { ptr, i64, i64 }, ptr %a754 + store { ptr, i64, i64 } %t755, ptr %a756 + %t757 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t758 = load { ptr, i64, i64 }, ptr %t757 + store { ptr, i64, i64 } %t758, ptr %a759 + store { ptr, i64, i64 } { ptr @.str.5080, i64 3, i64 0 }, ptr %a760 + %t761 = call i32 @finch_str_eq(ptr %a759, ptr %a760) + %t762 = icmp ne i32 %t761, 0 + br i1 %t762, label %then8021, label %else8022 +then8021: + %t763 = load ptr, ptr %a1 + %t764 = load { ptr, i64, i64 }, ptr %a756 + %t765 = load %S.ast.Type, ptr %a702 + %t766 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5081, i64 5, i64 0 }) + %t767 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t763, { ptr, i64, i64 } %t764, %S.ast.Type %t765, %S.ast.Type %t766) + store %S.ast.Type %t766, ptr %a768 + call void @finch.drop.S_ast_Type(ptr %a768) + %t769 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t767, ptr %a756 + store { ptr, i64, i64 } %t769, ptr %a770 + call void @finch_str_drop(ptr %a770) + %t771 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5082, i64 5, i64 0 }) + %t772 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t771, ptr %a702 + store %S.ast.Type %t772, ptr %a773 + call void @finch.drop.S_ast_Type(ptr %a773) + br label %endif8023 +else8022: + %t774 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t775 = load { ptr, i64, i64 }, ptr %t774 + store { ptr, i64, i64 } %t775, ptr %a776 + store { ptr, i64, i64 } { ptr @.str.5083, i64 3, i64 0 }, ptr %a777 + %t778 = call i32 @finch_str_eq(ptr %a776, ptr %a777) + %t779 = icmp ne i32 %t778, 0 + br i1 %t779, label %then8024, label %else8025 +then8024: + %t780 = load ptr, ptr %a1 + %t781 = load { ptr, i64, i64 }, ptr %a756 + %t782 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t780, { ptr, i64, i64 } %t781) + %t783 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t782, ptr %a756 + store { ptr, i64, i64 } %t783, ptr %a784 + call void @finch_str_drop(ptr %a784) + %t785 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5084, i64 3, i64 0 }) + %t786 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t785, ptr %a702 + store %S.ast.Type %t786, ptr %a787 + call void @finch.drop.S_ast_Type(ptr %a787) + br label %endif8026 +else8025: + %t788 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t789 = load { ptr, i64, i64 }, ptr %t788 + store { ptr, i64, i64 } %t789, ptr %a790 + store { ptr, i64, i64 } { ptr @.str.5085, i64 4, i64 0 }, ptr %a791 + %t792 = call i32 @finch_str_eq(ptr %a790, ptr %a791) + %t793 = icmp ne i32 %t792, 0 + br i1 %t793, label %then8027, label %else8028 +then8027: + %t794 = load ptr, ptr %a1 + %t795 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 + %t796 = load { ptr, i64, i64 }, ptr %t795 + store { ptr, i64, i64 } { ptr @.str.5086, i64 8, i64 0 }, ptr %a798 + store { ptr, i64, i64 } %t796, ptr %a799 + call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799) + %t800 = load { ptr, i64, i64 }, ptr %a797 + store { ptr, i64, i64 } %t800, ptr %a802 + store { ptr, i64, i64 } { ptr @.str.5087, i64 7, i64 0 }, ptr %a803 + call void @finch_str_concat(ptr %a801, ptr %a802, ptr %a803) + store { ptr, i64, i64 } %t800, ptr %a804 + call void @finch_str_drop(ptr %a804) + %t805 = load { ptr, i64, i64 }, ptr %a801 + %t806 = call { ptr, i64, i64 } @finch.gen.op(ptr %t794, { ptr, i64, i64 } %t805) + store { ptr, i64, i64 } %t805, ptr %a807 + call void @finch_str_drop(ptr %a807) + %t808 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t806, ptr %a756 + store { ptr, i64, i64 } %t808, ptr %a809 + call void @finch_str_drop(ptr %a809) + %t810 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5088, i64 3, i64 0 }) + %t811 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t810, ptr %a702 + store %S.ast.Type %t811, ptr %a812 + call void @finch.drop.S_ast_Type(ptr %a812) + br label %endif8029 +else8028: + %t813 = load %S.ast.Type, ptr %a702 + %t814 = call i1 @finch.gen.isInt(%S.ast.Type %t813) + br label %logic.from8030 +logic.from8030: + br i1 %t814, label %logic.end8032, label %logic.rhs8031 +logic.rhs8031: + %t815 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t816 = load { ptr, i64, i64 }, ptr %t815 + store { ptr, i64, i64 } %t816, ptr %a817 + store { ptr, i64, i64 } { ptr @.str.5089, i64 4, i64 0 }, ptr %a818 + %t819 = call i32 @finch_str_eq(ptr %a817, ptr %a818) + %t820 = icmp ne i32 %t819, 0 + br label %logic.rend8033 +logic.rend8033: + br label %logic.end8032 +logic.end8032: + %t821 = phi i1 [ true, %logic.from8030 ], [ %t820, %logic.rend8033 ] + br label %logic.from8034 +logic.from8034: + br i1 %t821, label %logic.rhs8035, label %logic.end8036 +logic.rhs8035: + %t822 = load %S.ast.Type, ptr %a702 + %t823 = call i64 @finch.gen.bitsOf(%S.ast.Type %t822) + %t824 = icmp slt i64 %t823, 32 + br label %logic.rend8037 +logic.rend8037: + br label %logic.end8036 +logic.end8036: + %t825 = phi i1 [ false, %logic.from8034 ], [ %t824, %logic.rend8037 ] + br i1 %t825, label %then8038, label %endif8040 +then8038: + %t826 = load ptr, ptr %a1 + %t827 = load { ptr, i64, i64 }, ptr %a756 + %t828 = load %S.ast.Type, ptr %a702 + %t829 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5090, i64 3, i64 0 }) + %t830 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t826, { ptr, i64, i64 } %t827, %S.ast.Type %t828, %S.ast.Type %t829) + store %S.ast.Type %t829, ptr %a831 + call void @finch.drop.S_ast_Type(ptr %a831) + %t832 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t830, ptr %a756 + store { ptr, i64, i64 } %t832, ptr %a833 + call void @finch_str_drop(ptr %a833) + %t834 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5091, i64 3, i64 0 }) + %t835 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t834, ptr %a702 + store %S.ast.Type %t835, ptr %a836 + call void @finch.drop.S_ast_Type(ptr %a836) + br label %endif8040 +endif8040: + br label %endif8029 +endif8029: + br label %endif8026 +endif8026: + br label %endif8023 +endif8023: + %t837 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t838 = load ptr, ptr %a1 + %t839 = load %S.ast.Type, ptr %a702 + %t840 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t838, %S.ast.Type %t839) + store { ptr, i64, i64 } %t840, ptr %a842 + store { ptr, i64, i64 } { ptr @.str.5092, i64 1, i64 0 }, ptr %a843 + call void @finch_str_concat(ptr %a841, ptr %a842, ptr %a843) + store { ptr, i64, i64 } %t840, ptr %a844 + call void @finch_str_drop(ptr %a844) + %t845 = load { ptr, i64, i64 }, ptr %a841 + %t846 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t845, ptr %a848 + store { ptr, i64, i64 } %t846, ptr %a849 + call void @finch_str_concat(ptr %a847, ptr %a848, ptr %a849) + store { ptr, i64, i64 } %t845, ptr %a850 + call void @finch_str_drop(ptr %a850) + %t851 = load { ptr, i64, i64 }, ptr %a847 + %t852 = load i64, ptr %t837 + %t853 = add i64 %t852, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t853, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t854 = load ptr, ptr %a263 + %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i64 %t852 + store { ptr, i64, i64 } %t851, ptr %t855 + store i64 %t853, ptr %t837 + call void @finch_str_drop(ptr %a756) + call void @finch.drop.S_ast_Type(ptr %a702) + call void @finch.drop.S_gen_Val(ptr %a696) + br label %for.step7970 +for.step7970: + %t856 = load i64, ptr %a327 + %t857 = add i64 %t856, 1 + store i64 %t857, ptr %a327 + br label %for.cond7968 +for.end7971: + %t858 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 2 + %t859 = load { ptr, i64, i64 }, ptr %t858 + store { ptr, i64, i64 } %t859, ptr %a860 + call void @finch_str_copy(ptr %a861, ptr %a860) + %t862 = load { ptr, i64, i64 }, ptr %a861 + store { ptr, i64, i64 } %t862, ptr %a863 + store { ptr, i64, i64 } { ptr @.str.5093, i64 0, i64 0 }, ptr %a864 + %t865 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 + %t866 = getelementptr inbounds %S.gen.Abi, ptr %t865, i32 0, i32 0 + %t867 = load { ptr, i64, i64 }, ptr %t866 + store { ptr, i64, i64 } %t867, ptr %a868 + store { ptr, i64, i64 } { ptr @.str.5094, i64 6, i64 0 }, ptr %a869 + %t870 = call i32 @finch_str_eq(ptr %a868, ptr %a869) + %t871 = icmp ne i32 %t870, 0 + br i1 %t871, label %then8041, label %endif8043 +then8041: + %t872 = load ptr, ptr %a1 + %t873 = load %S.ast.Type, ptr %a219 + %t874 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t872, %S.ast.Type %t873) + %t875 = load { ptr, i64, i64 }, ptr %a864 + store { ptr, i64, i64 } %t874, ptr %a864 + store { ptr, i64, i64 } %t875, ptr %a876 + call void @finch_str_drop(ptr %a876) + br label %endif8043 +endif8043: + store { ptr, i64, i64 } { ptr @.str.5095, i64 0, i64 0 }, ptr %a877 + %t878 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t879 = load i1, ptr %t878 + br i1 %t879, label %then8044, label %endif8046 +then8044: + %t880 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.5096, i64 5, i64 0 }, ptr %a877 + store { ptr, i64, i64 } %t880, ptr %a881 + call void @finch_str_drop(ptr %a881) + %t882 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t883 = load i64, ptr %t882 + %t884 = icmp eq i64 %t883, 0 + br i1 %t884, label %then8047, label %endif8049 +then8047: + %t885 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.5097, i64 3, i64 0 }, ptr %a877 + store { ptr, i64, i64 } %t885, ptr %a886 + call void @finch_str_drop(ptr %a886) + br label %endif8049 +endif8049: + br label %endif8046 +endif8046: + %t887 = load ptr, ptr %a1 + %t888 = icmp eq ptr %t887, null + br i1 %t888, label %panic8050, label %ok8051 +panic8050: + call void @finch_panic(ptr @.str.5098, i64 4770, ptr @.str.5099) + unreachable +ok8051: + %t889 = getelementptr inbounds %S.gen.Gen, ptr %t887, i32 0, i32 40 + %t890 = getelementptr inbounds { ptr, i64, i64 }, ptr %t889, i32 0, i32 1 + %t891 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t892 = load { ptr, i64, i64 }, ptr %t891 + store { ptr, i64, i64 } { ptr @.str.5100, i64 2, i64 0 }, ptr %a894 + store { ptr, i64, i64 } %t892, ptr %a895 + call void @finch_str_concat(ptr %a893, ptr %a894, ptr %a895) + %t896 = load { ptr, i64, i64 }, ptr %a893 + store i64 -1, ptr %a897 + %t898 = load i64, ptr %t890 + %t899 = load ptr, ptr %t889 + store i64 0, ptr %a900 + br label %find.cond8052 +find.cond8052: + %t901 = load i64, ptr %a900 + %t902 = icmp slt i64 %t901, %t898 + br i1 %t902, label %find.body8053, label %find.end8056 +find.body8053: + %t903 = getelementptr inbounds { ptr, i64, i64 }, ptr %t899, i64 %t901 + %t904 = load { ptr, i64, i64 }, ptr %t903 + store { ptr, i64, i64 } %t904, ptr %a905 + store { ptr, i64, i64 } %t896, ptr %a906 + %t907 = call i32 @finch_str_eq(ptr %a905, ptr %a906) + %t908 = icmp ne i32 %t907, 0 + br i1 %t908, label %find.hit8054, label %find.next8055 +find.hit8054: + store i64 %t901, ptr %a897 + br label %find.end8056 +find.next8055: + %t909 = add i64 %t901, 1 + store i64 %t909, ptr %a900 + br label %find.cond8052 +find.end8056: + store { ptr, i64, i64 } %t896, ptr %a910 + call void @finch_str_drop(ptr %a910) + %t911 = load i64, ptr %a897 + %t912 = icmp sge i64 %t911, 0 + %t913 = xor i1 %t912, true + br i1 %t913, label %then8057, label %endif8059 +then8057: + %t914 = load ptr, ptr %a1 + %t915 = icmp eq ptr %t914, null + br i1 %t915, label %panic8060, label %ok8061 +panic8060: + call void @finch_panic(ptr @.str.5101, i64 4771, ptr @.str.5102) + unreachable +ok8061: + %t916 = getelementptr inbounds %S.gen.Gen, ptr %t914, i32 0, i32 40 + %t917 = getelementptr inbounds { ptr, i64, i64 }, ptr %t916, i32 0, i32 1 + %t918 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t919 = load { ptr, i64, i64 }, ptr %t918 + store { ptr, i64, i64 } { ptr @.str.5103, i64 2, i64 0 }, ptr %a921 + store { ptr, i64, i64 } %t919, ptr %a922 + call void @finch_str_concat(ptr %a920, ptr %a921, ptr %a922) + %t923 = load { ptr, i64, i64 }, ptr %a920 + %t924 = load i64, ptr %t917 + %t925 = add i64 %t924, 1 + call void @finch_arr_reserve(ptr %t916, i64 %t925, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t926 = load ptr, ptr %t916 + %t927 = getelementptr inbounds { ptr, i64, i64 }, ptr %t926, i64 %t924 + store { ptr, i64, i64 } %t923, ptr %t927 + store i64 %t925, ptr %t917 + %t928 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t929 = load { ptr, i64, i64 }, ptr %t928 + %t930 = call i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %t929) + %t931 = xor i1 %t930, true + br i1 %t931, label %then8062, label %endif8064 +then8062: + %t932 = load ptr, ptr %a1 + %t933 = icmp eq ptr %t932, null + br i1 %t933, label %panic8065, label %ok8066 +panic8065: + call void @finch_panic(ptr @.str.5104, i64 4773, ptr @.str.5105) + unreachable +ok8066: + %t934 = getelementptr inbounds %S.gen.Gen, ptr %t932, i32 0, i32 2 + %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t934, i32 0, i32 1 + %t936 = load { ptr, i64, i64 }, ptr %a864 + store { ptr, i64, i64 } { ptr @.str.5106, i64 7, i64 0 }, ptr %a938 + store { ptr, i64, i64 } %t936, ptr %a939 + call void @finch_str_concat(ptr %a937, ptr %a938, ptr %a939) + %t940 = load { ptr, i64, i64 }, ptr %a937 + store { ptr, i64, i64 } %t940, ptr %a942 + store { ptr, i64, i64 } { ptr @.str.5107, i64 1, i64 0 }, ptr %a943 + call void @finch_str_concat(ptr %a941, ptr %a942, ptr %a943) + store { ptr, i64, i64 } %t940, ptr %a944 + call void @finch_str_drop(ptr %a944) + %t945 = load { ptr, i64, i64 }, ptr %a941 + %t946 = load { ptr, i64, i64 }, ptr %a863 + store { ptr, i64, i64 } %t945, ptr %a948 + store { ptr, i64, i64 } %t946, ptr %a949 + call void @finch_str_concat(ptr %a947, ptr %a948, ptr %a949) + store { ptr, i64, i64 } %t945, ptr %a950 + call void @finch_str_drop(ptr %a950) + %t951 = load { ptr, i64, i64 }, ptr %a947 + store { ptr, i64, i64 } %t951, ptr %a953 + store { ptr, i64, i64 } { ptr @.str.5108, i64 2, i64 0 }, ptr %a954 + call void @finch_str_concat(ptr %a952, ptr %a953, ptr %a954) + store { ptr, i64, i64 } %t951, ptr %a955 + call void @finch_str_drop(ptr %a955) + %t956 = load { ptr, i64, i64 }, ptr %a952 + %t957 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t958 = load { ptr, i64, i64 }, ptr %t957 + store { ptr, i64, i64 } %t956, ptr %a960 + store { ptr, i64, i64 } %t958, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t956, ptr %a962 + call void @finch_str_drop(ptr %a962) + %t963 = load { ptr, i64, i64 }, ptr %a959 + store { ptr, i64, i64 } %t963, ptr %a965 + store { ptr, i64, i64 } { ptr @.str.5109, i64 1, i64 0 }, ptr %a966 + call void @finch_str_concat(ptr %a964, ptr %a965, ptr %a966) + store { ptr, i64, i64 } %t963, ptr %a967 + call void @finch_str_drop(ptr %a967) + %t968 = load { ptr, i64, i64 }, ptr %a964 + %t969 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5110, i64 2, i64 0 }, ptr %a970 + call void @finch_str_join(ptr %a971, ptr %a262, ptr %a970) + %t972 = load { ptr, i64, i64 }, ptr %a971 + store { ptr, i64, i64 } %t968, ptr %a974 + store { ptr, i64, i64 } %t972, ptr %a975 + call void @finch_str_concat(ptr %a973, ptr %a974, ptr %a975) + store { ptr, i64, i64 } %t968, ptr %a976 + call void @finch_str_drop(ptr %a976) + store { ptr, i64, i64 } %t972, ptr %a977 + call void @finch_str_drop(ptr %a977) + %t978 = load { ptr, i64, i64 }, ptr %a973 + %t979 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } %t978, ptr %a981 + store { ptr, i64, i64 } %t979, ptr %a982 + call void @finch_str_concat(ptr %a980, ptr %a981, ptr %a982) + store { ptr, i64, i64 } %t978, ptr %a983 + call void @finch_str_drop(ptr %a983) + %t984 = load { ptr, i64, i64 }, ptr %a980 + store { ptr, i64, i64 } %t984, ptr %a986 + store { ptr, i64, i64 } { ptr @.str.5111, i64 1, i64 0 }, ptr %a987 + call void @finch_str_concat(ptr %a985, ptr %a986, ptr %a987) + store { ptr, i64, i64 } %t984, ptr %a988 + call void @finch_str_drop(ptr %a988) + %t989 = load { ptr, i64, i64 }, ptr %a985 + %t990 = load i64, ptr %t935 + %t991 = add i64 %t990, 1 + call void @finch_arr_reserve(ptr %t934, i64 %t991, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t992 = load ptr, ptr %t934 + %t993 = getelementptr inbounds { ptr, i64, i64 }, ptr %t992, i64 %t990 + store { ptr, i64, i64 } %t989, ptr %t993 + store i64 %t991, ptr %t935 + br label %endif8064 +endif8064: + br label %endif8059 +endif8059: + store { ptr, i64, i64 } { ptr @.str.5112, i64 0, i64 0 }, ptr %a994 + %t995 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t996 = load i1, ptr %t995 + br i1 %t996, label %then8067, label %endif8069 +then8067: + %t997 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5114, i64 2, i64 0 }, ptr %a998 + call void @finch_str_join(ptr %a999, ptr %a262, ptr %a998) + %t1000 = load { ptr, i64, i64 }, ptr %a999 + store { ptr, i64, i64 } { ptr @.str.5113, i64 2, i64 0 }, ptr %a1002 + store { ptr, i64, i64 } %t1000, ptr %a1003 + call void @finch_str_concat(ptr %a1001, ptr %a1002, ptr %a1003) + store { ptr, i64, i64 } %t1000, ptr %a1004 + call void @finch_str_drop(ptr %a1004) + %t1005 = load { ptr, i64, i64 }, ptr %a1001 + %t1006 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } %t1005, ptr %a1008 + store { ptr, i64, i64 } %t1006, ptr %a1009 + call void @finch_str_concat(ptr %a1007, ptr %a1008, ptr %a1009) + store { ptr, i64, i64 } %t1005, ptr %a1010 + call void @finch_str_drop(ptr %a1010) + %t1011 = load { ptr, i64, i64 }, ptr %a1007 + store { ptr, i64, i64 } %t1011, ptr %a1013 + store { ptr, i64, i64 } { ptr @.str.5115, i64 1, i64 0 }, ptr %a1014 + call void @finch_str_concat(ptr %a1012, ptr %a1013, ptr %a1014) + store { ptr, i64, i64 } %t1011, ptr %a1015 + call void @finch_str_drop(ptr %a1015) + %t1016 = load { ptr, i64, i64 }, ptr %a1012 + %t1017 = load { ptr, i64, i64 }, ptr %a994 + store { ptr, i64, i64 } %t1016, ptr %a994 + store { ptr, i64, i64 } %t1017, ptr %a1018 + call void @finch_str_drop(ptr %a1018) + br label %endif8069 +endif8069: + %t1019 = load { ptr, i64, i64 }, ptr %a864 + store { ptr, i64, i64 } { ptr @.str.5116, i64 4, i64 0 }, ptr %a1021 + store { ptr, i64, i64 } %t1019, ptr %a1022 + call void @finch_str_concat(ptr %a1020, ptr %a1021, ptr %a1022) + %t1023 = load { ptr, i64, i64 }, ptr %a1020 + store { ptr, i64, i64 } %t1023, ptr %a1025 + store { ptr, i64, i64 } { ptr @.str.5117, i64 1, i64 0 }, ptr %a1026 + call void @finch_str_concat(ptr %a1024, ptr %a1025, ptr %a1026) + store { ptr, i64, i64 } %t1023, ptr %a1027 + call void @finch_str_drop(ptr %a1027) + %t1028 = load { ptr, i64, i64 }, ptr %a1024 + %t1029 = load { ptr, i64, i64 }, ptr %a863 + store { ptr, i64, i64 } %t1028, ptr %a1031 + store { ptr, i64, i64 } %t1029, ptr %a1032 + call void @finch_str_concat(ptr %a1030, ptr %a1031, ptr %a1032) + store { ptr, i64, i64 } %t1028, ptr %a1033 + call void @finch_str_drop(ptr %a1033) + %t1034 = load { ptr, i64, i64 }, ptr %a1030 + %t1035 = load { ptr, i64, i64 }, ptr %a994 + store { ptr, i64, i64 } %t1034, ptr %a1037 + store { ptr, i64, i64 } %t1035, ptr %a1038 + call void @finch_str_concat(ptr %a1036, ptr %a1037, ptr %a1038) + store { ptr, i64, i64 } %t1034, ptr %a1039 + call void @finch_str_drop(ptr %a1039) + %t1040 = load { ptr, i64, i64 }, ptr %a1036 + store { ptr, i64, i64 } %t1040, ptr %a1042 + store { ptr, i64, i64 } { ptr @.str.5118, i64 2, i64 0 }, ptr %a1043 + call void @finch_str_concat(ptr %a1041, ptr %a1042, ptr %a1043) + store { ptr, i64, i64 } %t1040, ptr %a1044 + call void @finch_str_drop(ptr %a1044) + %t1045 = load { ptr, i64, i64 }, ptr %a1041 + %t1046 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t1047 = load { ptr, i64, i64 }, ptr %t1046 + store { ptr, i64, i64 } %t1045, ptr %a1049 + store { ptr, i64, i64 } %t1047, ptr %a1050 + call void @finch_str_concat(ptr %a1048, ptr %a1049, ptr %a1050) + store { ptr, i64, i64 } %t1045, ptr %a1051 + call void @finch_str_drop(ptr %a1051) + %t1052 = load { ptr, i64, i64 }, ptr %a1048 + store { ptr, i64, i64 } %t1052, ptr %a1054 + store { ptr, i64, i64 } { ptr @.str.5119, i64 1, i64 0 }, ptr %a1055 + call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) + store { ptr, i64, i64 } %t1052, ptr %a1056 + call void @finch_str_drop(ptr %a1056) + %t1057 = load { ptr, i64, i64 }, ptr %a1053 + %t1058 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5120, i64 2, i64 0 }, ptr %a1059 + call void @finch_str_join(ptr %a1060, ptr %a263, ptr %a1059) + %t1061 = load { ptr, i64, i64 }, ptr %a1060 + store { ptr, i64, i64 } %t1057, ptr %a1063 + store { ptr, i64, i64 } %t1061, ptr %a1064 + call void @finch_str_concat(ptr %a1062, ptr %a1063, ptr %a1064) + store { ptr, i64, i64 } %t1057, ptr %a1065 + call void @finch_str_drop(ptr %a1065) + store { ptr, i64, i64 } %t1061, ptr %a1066 + call void @finch_str_drop(ptr %a1066) + %t1067 = load { ptr, i64, i64 }, ptr %a1062 + store { ptr, i64, i64 } %t1067, ptr %a1069 + store { ptr, i64, i64 } { ptr @.str.5121, i64 1, i64 0 }, ptr %a1070 + call void @finch_str_concat(ptr %a1068, ptr %a1069, ptr %a1070) + store { ptr, i64, i64 } %t1067, ptr %a1071 + call void @finch_str_drop(ptr %a1071) + %t1072 = load { ptr, i64, i64 }, ptr %a1068 + store { ptr, i64, i64 } %t1072, ptr %a1073 + %t1074 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 + %t1075 = load { ptr, i64, i64 }, ptr %t1074 + store { ptr, i64, i64 } %t1075, ptr %a1076 + store { ptr, i64, i64 } { ptr @.str.5122, i64 4, i64 0 }, ptr %a1077 + %t1078 = call i32 @finch_str_eq(ptr %a1076, ptr %a1077) + %t1079 = icmp ne i32 %t1078, 0 + br i1 %t1079, label %then8070, label %endif8072 +then8070: + %t1080 = load ptr, ptr %a1 + %t1081 = load { ptr, i64, i64 }, ptr %a1073 + call void @finch.gen.emit(ptr %t1080, { ptr, i64, i64 } %t1081) + %t1082 = load ptr, ptr %a1 + %t1083 = load { ptr, i64, i64 }, ptr %a317 + %t1084 = load i64, ptr %a323 + call void @finch.gen.releaseAll(ptr %t1082, { ptr, i64, i64 } %t1083, i64 %t1084) + %t1085 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1085, ptr %a1086 + call void @finch.copy.S_ast_Type(ptr %a1087, ptr %a1086) + %t1088 = load %S.ast.Type, ptr %a1087 + %t1089 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1088, 1 + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1089 +endif8072: + %t1090 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 + %t1091 = load i1, ptr %t1090 + br i1 %t1091, label %then8073, label %endif8075 +then8073: + %t1092 = load ptr, ptr %a1 + %t1093 = load { ptr, i64, i64 }, ptr %a1073 + call void @finch.gen.emit(ptr %t1092, { ptr, i64, i64 } %t1093) + %t1094 = load ptr, ptr %a1 + %t1095 = load { ptr, i64, i64 }, ptr %a317 + %t1096 = load i64, ptr %a323 + call void @finch.gen.releaseAll(ptr %t1094, { ptr, i64, i64 } %t1095, i64 %t1096) + %t1097 = load ptr, ptr %a1 + %t1098 = load ptr, ptr %a1 + %t1099 = load %S.ast.Type, ptr %a219 + %t1100 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1098, %S.ast.Type %t1099) + %t1101 = load { ptr, i64, i64 }, ptr %a264 + %t1102 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1097, { ptr, i64, i64 } %t1100, { ptr, i64, i64 } %t1101) + store { ptr, i64, i64 } %t1100, ptr %a1103 + call void @finch_str_drop(ptr %a1103) + %t1104 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1102, 0 + %t1105 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1105, ptr %a1106 + call void @finch.copy.S_ast_Type(ptr %a1107, ptr %a1106) + %t1108 = load %S.ast.Type, ptr %a1107 + %t1109 = insertvalue %S.gen.Val %t1104, %S.ast.Type %t1108, 1 + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1109 +endif8075: + %t1110 = load ptr, ptr %a1 + %t1111 = load { ptr, i64, i64 }, ptr %a1073 + %t1112 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1110, { ptr, i64, i64 } %t1111) + store { ptr, i64, i64 } %t1112, ptr %a1113 + %t1114 = load ptr, ptr %a1 + %t1115 = load { ptr, i64, i64 }, ptr %a317 + %t1116 = load i64, ptr %a323 + call void @finch.gen.releaseAll(ptr %t1114, { ptr, i64, i64 } %t1115, i64 %t1116) + %t1117 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 + %t1118 = getelementptr inbounds %S.gen.Abi, ptr %t1117, i32 0, i32 0 + %t1119 = load { ptr, i64, i64 }, ptr %t1118 + store { ptr, i64, i64 } %t1119, ptr %a1120 + store { ptr, i64, i64 } { ptr @.str.5123, i64 6, i64 0 }, ptr %a1121 + %t1122 = call i32 @finch_str_eq(ptr %a1120, ptr %a1121) + %t1123 = icmp ne i32 %t1122, 0 + br i1 %t1123, label %then8076, label %endif8078 +then8076: + %t1124 = load ptr, ptr %a1 + %t1125 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1124, { ptr, i64, i64 } { ptr @.str.5124, i64 9, i64 0 }) + store { ptr, i64, i64 } %t1125, ptr %a1126 + %t1127 = load ptr, ptr %a1 + %t1128 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 + %t1129 = getelementptr inbounds %S.gen.Abi, ptr %t1128, i32 0, i32 2 + %t1130 = load { ptr, i64, i64 }, ptr %t1129 + %t1131 = load { ptr, i64, i64 }, ptr %a1113 + %t1132 = load { ptr, i64, i64 }, ptr %a1126 + call void @finch.gen.store(ptr %t1127, { ptr, i64, i64 } %t1130, { ptr, i64, i64 } %t1131, { ptr, i64, i64 } %t1132) + %t1133 = load ptr, ptr %a1 + %t1134 = load ptr, ptr %a1 + %t1135 = load %S.ast.Type, ptr %a219 + %t1136 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1134, %S.ast.Type %t1135) + %t1137 = load { ptr, i64, i64 }, ptr %a1126 + %t1138 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1133, { ptr, i64, i64 } %t1136, { ptr, i64, i64 } %t1137) + store { ptr, i64, i64 } %t1136, ptr %a1139 + call void @finch_str_drop(ptr %a1139) + %t1140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1138, 0 + %t1141 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1141, ptr %a1142 + call void @finch.copy.S_ast_Type(ptr %a1143, ptr %a1142) + %t1144 = load %S.ast.Type, ptr %a1143 + %t1145 = insertvalue %S.gen.Val %t1140, %S.ast.Type %t1144, 1 + call void @finch_str_drop(ptr %a1126) + call void @finch_str_drop(ptr %a1113) + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1145 +endif8078: + %t1146 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 + %t1147 = load { ptr, i64, i64 }, ptr %t1146 + store { ptr, i64, i64 } %t1147, ptr %a1148 + store { ptr, i64, i64 } { ptr @.str.5125, i64 3, i64 0 }, ptr %a1149 + %t1150 = call i32 @finch_str_eq(ptr %a1148, ptr %a1149) + %t1151 = icmp ne i32 %t1150, 0 + br i1 %t1151, label %then8079, label %endif8081 +then8079: + %t1152 = load ptr, ptr %a1 + %t1153 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1152) + store { ptr, i64, i64 } %t1153, ptr %a1154 + %t1155 = load ptr, ptr %a1 + %t1156 = load { ptr, i64, i64 }, ptr %a1154 + call void @finch.gen.store(ptr %t1155, { ptr, i64, i64 } { ptr @.str.5126, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5127, i64 15, i64 0 }, { ptr, i64, i64 } %t1156) + %t1157 = load ptr, ptr %a1 + %t1158 = load { ptr, i64, i64 }, ptr %a1154 + store { ptr, i64, i64 } { ptr @.str.5128, i64 32, i64 0 }, ptr %a1160 + store { ptr, i64, i64 } %t1158, ptr %a1161 + call void @finch_str_concat(ptr %a1159, ptr %a1160, ptr %a1161) + %t1162 = load { ptr, i64, i64 }, ptr %a1159 + store { ptr, i64, i64 } %t1162, ptr %a1164 + store { ptr, i64, i64 } { ptr @.str.5129, i64 6, i64 0 }, ptr %a1165 + call void @finch_str_concat(ptr %a1163, ptr %a1164, ptr %a1165) + store { ptr, i64, i64 } %t1162, ptr %a1166 + call void @finch_str_drop(ptr %a1166) + %t1167 = load { ptr, i64, i64 }, ptr %a1163 + %t1168 = load { ptr, i64, i64 }, ptr %a1113 + store { ptr, i64, i64 } %t1167, ptr %a1170 + store { ptr, i64, i64 } %t1168, ptr %a1171 + call void @finch_str_concat(ptr %a1169, ptr %a1170, ptr %a1171) + store { ptr, i64, i64 } %t1167, ptr %a1172 + call void @finch_str_drop(ptr %a1172) + %t1173 = load { ptr, i64, i64 }, ptr %a1169 + store { ptr, i64, i64 } %t1173, ptr %a1175 + store { ptr, i64, i64 } { ptr @.str.5130, i64 1, i64 0 }, ptr %a1176 + call void @finch_str_concat(ptr %a1174, ptr %a1175, ptr %a1176) + store { ptr, i64, i64 } %t1173, ptr %a1177 + call void @finch_str_drop(ptr %a1177) + %t1178 = load { ptr, i64, i64 }, ptr %a1174 + call void @finch.gen.emit(ptr %t1157, { ptr, i64, i64 } %t1178) + store { ptr, i64, i64 } %t1178, ptr %a1179 + call void @finch_str_drop(ptr %a1179) + %t1180 = load ptr, ptr %a1 + %t1181 = load { ptr, i64, i64 }, ptr %a1154 + %t1182 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1180, { ptr, i64, i64 } { ptr @.str.5131, i64 17, i64 0 }, { ptr, i64, i64 } %t1181) + %t1183 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1182, 0 + %t1184 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1184, ptr %a1185 + call void @finch.copy.S_ast_Type(ptr %a1186, ptr %a1185) + %t1187 = load %S.ast.Type, ptr %a1186 + %t1188 = insertvalue %S.gen.Val %t1183, %S.ast.Type %t1187, 1 + call void @finch_str_drop(ptr %a1154) + call void @finch_str_drop(ptr %a1113) + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1188 +endif8081: + %t1189 = load { ptr, i64, i64 }, ptr %a1113 + store { ptr, i64, i64 } %t1189, ptr %a1190 + call void @finch_str_copy(ptr %a1191, ptr %a1190) + %t1192 = load { ptr, i64, i64 }, ptr %a1191 + %t1193 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1192, 0 + %t1194 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1194, ptr %a1195 + call void @finch.copy.S_ast_Type(ptr %a1196, ptr %a1195) + %t1197 = load %S.ast.Type, ptr %a1196 + %t1198 = insertvalue %S.gen.Val %t1193, %S.ast.Type %t1197, 1 + call void @finch_str_drop(ptr %a1113) + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1198 +} + +define internal void @finch.gen.releaseAll(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a12 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 0, ptr %a4 + br label %each.cond8082 +each.cond8082: + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = load i64, ptr %a4 + %t8 = icmp slt i64 %t7, %t6 + br i1 %t8, label %each.body8083, label %each.end8085 +each.body8083: + %t9 = load ptr, ptr %a2 + %t10 = getelementptr inbounds %S.gen.Val, ptr %t9, i64 %t7 + %t11 = load %S.gen.Val, ptr %t10 + store %S.gen.Val %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = load %S.gen.Val, ptr %a12 + call void @finch.gen.release(ptr %t13, %S.gen.Val %t14) + br label %each.step8084 +each.step8084: + %t15 = load i64, ptr %a4 + %t16 = add i64 %t15, 1 + store i64 %t16, ptr %a4 + br label %each.cond8082 +each.end8085: + %t17 = load ptr, ptr %a1 + %t18 = load i64, ptr %a3 + call void @finch.gen.heldEnd(ptr %t17, i64 %t18) + ret void +} + +define internal i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca i64, align 16 + %a18 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.5132, i64 6, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.5133, i64 6, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.5134, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.5135, i64 4, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.5136, i64 5, i64 0 }, ptr %t8 + %t9 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t10 = insertvalue { ptr, i64, i64 } %t9, i64 5, 1 + %t11 = insertvalue { ptr, i64, i64 } %t10, i64 5, 2 + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 + %t14 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a15 + %t16 = load i64, ptr %t13 + %t17 = load ptr, ptr %a12 + store i64 0, ptr %a18 + br label %find.cond8086 +find.cond8086: + %t19 = load i64, ptr %a18 + %t20 = icmp slt i64 %t19, %t16 + br i1 %t20, label %find.body8087, label %find.end8090 +find.body8087: + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t19 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } %t14, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %find.hit8088, label %find.next8089 +find.hit8088: + store i64 %t19, ptr %a15 + br label %find.end8090 +find.next8089: + %t27 = add i64 %t19, 1 + store i64 %t27, ptr %a18 + br label %find.cond8086 +find.end8090: + %t28 = load i64, ptr %a15 + %t29 = icmp sge i64 %t28, 0 + call void @finch.drop.arr_str(ptr %a12) + ret i1 %t29 +} + +define internal { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca i64, align 16 + %a65 = alloca i64, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca i64, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.5137, i64 6, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.5138, i64 4, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.5139, i64 7, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.5140, i64 5, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.5141, i64 5, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.5142, i64 7, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.5143, i64 4, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.5144, i64 3, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.5145, i64 3, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.5146, i64 3, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.5147, i64 5, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.5148, i64 4, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.5149, i64 6, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.5150, i64 4, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.5151, i64 5, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.5152, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 + store { ptr, i64, i64 } { ptr @.str.5153, i64 4, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 + store { ptr, i64, i64 } { ptr @.str.5154, i64 6, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 + store { ptr, i64, i64 } { ptr @.str.5155, i64 6, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 + store { ptr, i64, i64 } { ptr @.str.5156, i64 6, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 + store { ptr, i64, i64 } { ptr @.str.5157, i64 4, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 + store { ptr, i64, i64 } { ptr @.str.5158, i64 5, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 + store { ptr, i64, i64 } { ptr @.str.5159, i64 6, i64 0 }, ptr %t26 + %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t28 = insertvalue { ptr, i64, i64 } %t27, i64 23, 1 + %t29 = insertvalue { ptr, i64, i64 } %t28, i64 23, 2 + store { ptr, i64, i64 } %t29, ptr %a30 + %t31 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t32 = call ptr @finch_alloc(i64 %t31) + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 0 + store { ptr, i64, i64 } { ptr @.str.5160, i64 7, i64 0 }, ptr %t33 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 1 + store { ptr, i64, i64 } { ptr @.str.5161, i64 7, i64 0 }, ptr %t34 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 2 + store { ptr, i64, i64 } { ptr @.str.5162, i64 7, i64 0 }, ptr %t35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 3 + store { ptr, i64, i64 } { ptr @.str.5163, i64 7, i64 0 }, ptr %t36 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 4 + store { ptr, i64, i64 } { ptr @.str.5164, i64 7, i64 0 }, ptr %t37 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 5 + store { ptr, i64, i64 } { ptr @.str.5165, i64 7, i64 0 }, ptr %t38 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 6 + store { ptr, i64, i64 } { ptr @.str.5166, i64 6, i64 0 }, ptr %t39 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 7 + store { ptr, i64, i64 } { ptr @.str.5167, i64 6, i64 0 }, ptr %t40 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 8 + store { ptr, i64, i64 } { ptr @.str.5168, i64 6, i64 0 }, ptr %t41 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 9 + store { ptr, i64, i64 } { ptr @.str.5169, i64 6, i64 0 }, ptr %t42 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 10 + store { ptr, i64, i64 } { ptr @.str.5170, i64 6, i64 0 }, ptr %t43 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 11 + store { ptr, i64, i64 } { ptr @.str.5171, i64 6, i64 0 }, ptr %t44 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 12 + store { ptr, i64, i64 } { ptr @.str.5172, i64 8, i64 0 }, ptr %t45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 13 + store { ptr, i64, i64 } { ptr @.str.5173, i64 8, i64 0 }, ptr %t46 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 14 + store { ptr, i64, i64 } { ptr @.str.5174, i64 8, i64 0 }, ptr %t47 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 15 + store { ptr, i64, i64 } { ptr @.str.5175, i64 8, i64 0 }, ptr %t48 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 16 + store { ptr, i64, i64 } { ptr @.str.5176, i64 8, i64 0 }, ptr %t49 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 17 + store { ptr, i64, i64 } { ptr @.str.5177, i64 8, i64 0 }, ptr %t50 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 18 + store { ptr, i64, i64 } { ptr @.str.5178, i64 8, i64 0 }, ptr %t51 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 19 + store { ptr, i64, i64 } { ptr @.str.5179, i64 8, i64 0 }, ptr %t52 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 20 + store { ptr, i64, i64 } { ptr @.str.5180, i64 6, i64 0 }, ptr %t53 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 21 + store { ptr, i64, i64 } { ptr @.str.5181, i64 8, i64 0 }, ptr %t54 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 22 + store { ptr, i64, i64 } { ptr @.str.5182, i64 8, i64 0 }, ptr %t55 + %t56 = insertvalue { ptr, i64, i64 } undef, ptr %t32, 0 + %t57 = insertvalue { ptr, i64, i64 } %t56, i64 23, 1 + %t58 = insertvalue { ptr, i64, i64 } %t57, i64 23, 2 + store { ptr, i64, i64 } %t58, ptr %a59 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t61 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a62 + %t63 = load i64, ptr %t60 + %t64 = load ptr, ptr %a30 + store i64 0, ptr %a65 + br label %find.cond8091 +find.cond8091: + %t66 = load i64, ptr %a65 + %t67 = icmp slt i64 %t66, %t63 + br i1 %t67, label %find.body8092, label %find.end8095 +find.body8092: + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t66 + %t69 = load { ptr, i64, i64 }, ptr %t68 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } %t61, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %find.hit8093, label %find.next8094 +find.hit8093: + store i64 %t66, ptr %a62 + br label %find.end8095 +find.next8094: + %t74 = add i64 %t66, 1 + store i64 %t74, ptr %a65 + br label %find.cond8091 +find.end8095: + %t75 = load i64, ptr %a62 + store i64 %t75, ptr %a76 + %t77 = load i64, ptr %a76 + %t78 = icmp slt i64 %t77, 0 + br i1 %t78, label %then8096, label %endif8098 +then8096: + call void @finch.drop.arr_str(ptr %a59) + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } { ptr @.str.5183, i64 0, i64 0 } +endif8098: + %t79 = load i64, ptr %a76 + %t80 = load { ptr, i64, i64 }, ptr %a59 + %t81 = extractvalue { ptr, i64, i64 } %t80, 1 + %t82 = icmp uge i64 %t79, %t81 + br i1 %t82, label %range8099, label %inrange8100 +range8099: + call void @finch_panic_index(ptr @.str.5185, i64 4830, i64 %t79, i64 %t81) + unreachable +inrange8100: + %t83 = extractvalue { ptr, i64, i64 } %t80, 0 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t79 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } { ptr @.str.5184, i64 28, i64 0 }, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.5186, i64 14, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.drop.arr_str(ptr %a59) + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } %t94 +} + +define internal void @finch.drop.S_docs_Doc(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal void @finch.drop.arr_S_docs_Doc(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond8110 +n.cond8110: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body8111, label %n.end8112 +n.body8111: + %t7 = getelementptr inbounds %S.docs.Doc, ptr %t1, i64 %t5 + call void @finch.drop.S_docs_Doc(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond8110 +n.end8112: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal %S.gen.Val @finch.gen.call(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca %S.docs.Doc, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i64, align 16 + %a62 = alloca %S.gen.Val, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca %S.ast.Node, align 16 + %a110 = alloca %S.ast.Node, align 16 + %a112 = alloca %S.ast.Node, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca i64, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca %S.gen.Place, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca %S.gen.Val, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca i1, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a220 = alloca %S.ast.Type, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca %S.ast.Type, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca %S.ast.Type, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca %S.ast.Type, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca %S.ast.Type, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca %S.gen.Val, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a615 = alloca { ptr, i64, i64 }, align 16 + %a616 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a654 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a684 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a686 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a697 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a704 = alloca { ptr, i64, i64 }, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a763 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a766 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a779 = alloca { ptr, i64, i64 }, align 16 + %a780 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a810 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca %S.gen.Val, align 16 + %a832 = alloca i64, align 16 + %a844 = alloca %S.gen.Val, align 16 + %a850 = alloca { ptr, i64, i64 }, align 16 + %a854 = alloca { ptr, i64, i64 }, align 16 + %a861 = alloca { ptr, i64, i64 }, align 16 + %a862 = alloca { ptr, i64, i64 }, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a868 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a878 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a880 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a885 = alloca { ptr, i64, i64 }, align 16 + %a886 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca { ptr, i64, i64 }, align 16 + %a891 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a896 = alloca { ptr, i64, i64 }, align 16 + %a897 = alloca { ptr, i64, i64 }, align 16 + %a899 = alloca { ptr, i64, i64 }, align 16 + %a900 = alloca { ptr, i64, i64 }, align 16 + %a901 = alloca { ptr, i64, i64 }, align 16 + %a902 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a911 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a914 = alloca { ptr, i64, i64 }, align 16 + %a915 = alloca { ptr, i64, i64 }, align 16 + %a916 = alloca { ptr, i64, i64 }, align 16 + %a919 = alloca { ptr, i64, i64 }, align 16 + %a924 = alloca { ptr, i64, i64 }, align 16 + %a932 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a945 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a956 = alloca { ptr, i64, i64 }, align 16 + %a957 = alloca { ptr, i64, i64 }, align 16 + %a958 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a963 = alloca { ptr, i64, i64 }, align 16 + %a970 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a972 = alloca { ptr, i64, i64 }, align 16 + %a974 = alloca { ptr, i64, i64 }, align 16 + %a975 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a977 = alloca { ptr, i64, i64 }, align 16 + %a980 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a986 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca %S.gen.Val, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1007 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1011 = alloca { ptr, i64, i64 }, align 16 + %a1012 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1022 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1025 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1027 = alloca { ptr, i64, i64 }, align 16 + %a1028 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca { ptr, i64, i64 }, align 16 + %a1038 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1049 = alloca { ptr, i64, i64 }, align 16 + %a1050 = alloca { ptr, i64, i64 }, align 16 + %a1051 = alloca { ptr, i64, i64 }, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1054 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1060 = alloca { ptr, i64, i64 }, align 16 + %a1061 = alloca { ptr, i64, i64 }, align 16 + %a1062 = alloca { ptr, i64, i64 }, align 16 + %a1064 = alloca { ptr, i64, i64 }, align 16 + %a1065 = alloca { ptr, i64, i64 }, align 16 + %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1070 = alloca { ptr, i64, i64 }, align 16 + %a1071 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 + %a1075 = alloca { ptr, i64, i64 }, align 16 + %a1076 = alloca { ptr, i64, i64 }, align 16 + %a1078 = alloca { ptr, i64, i64 }, align 16 + %a1079 = alloca { ptr, i64, i64 }, align 16 + %a1080 = alloca { ptr, i64, i64 }, align 16 + %a1081 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca { ptr, i64, i64 }, align 16 + %a1097 = alloca { ptr, i64, i64 }, align 16 + %a1101 = alloca %S.ast.Type, align 16 + %a1108 = alloca { ptr, i64, i64 }, align 16 + %a1109 = alloca { ptr, i64, i64 }, align 16 + %a1110 = alloca { ptr, i64, i64 }, align 16 + %a1112 = alloca { ptr, i64, i64 }, align 16 + %a1113 = alloca { ptr, i64, i64 }, align 16 + %a1114 = alloca { ptr, i64, i64 }, align 16 + %a1115 = alloca { ptr, i64, i64 }, align 16 + %a1118 = alloca { ptr, i64, i64 }, align 16 + %a1119 = alloca { ptr, i64, i64 }, align 16 + %a1123 = alloca %S.ast.Type, align 16 + %a1128 = alloca { ptr, i64, i64 }, align 16 + %a1129 = alloca { ptr, i64, i64 }, align 16 + %a1130 = alloca { ptr, i64, i64 }, align 16 + %a1132 = alloca { ptr, i64, i64 }, align 16 + %a1133 = alloca { ptr, i64, i64 }, align 16 + %a1134 = alloca { ptr, i64, i64 }, align 16 + %a1135 = alloca { ptr, i64, i64 }, align 16 + %a1138 = alloca { ptr, i64, i64 }, align 16 + %a1143 = alloca { ptr, i64, i64 }, align 16 + %a1144 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca %S.gen.Val, align 16 + %a1162 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca { ptr, i64, i64 }, align 16 + %a1166 = alloca { ptr, i64, i64 }, align 16 + %a1167 = alloca { ptr, i64, i64 }, align 16 + %a1169 = alloca { ptr, i64, i64 }, align 16 + %a1170 = alloca { ptr, i64, i64 }, align 16 + %a1171 = alloca { ptr, i64, i64 }, align 16 + %a1172 = alloca { ptr, i64, i64 }, align 16 + %a1177 = alloca { ptr, i64, i64 }, align 16 + %a1178 = alloca { ptr, i64, i64 }, align 16 + %a1179 = alloca { ptr, i64, i64 }, align 16 + %a1180 = alloca { ptr, i64, i64 }, align 16 + %a1181 = alloca { ptr, i64, i64 }, align 16 + %a1183 = alloca { ptr, i64, i64 }, align 16 + %a1184 = alloca { ptr, i64, i64 }, align 16 + %a1185 = alloca { ptr, i64, i64 }, align 16 + %a1186 = alloca { ptr, i64, i64 }, align 16 + %a1188 = alloca { ptr, i64, i64 }, align 16 + %a1191 = alloca { ptr, i64, i64 }, align 16 + %a1192 = alloca { ptr, i64, i64 }, align 16 + %a1193 = alloca { ptr, i64, i64 }, align 16 + %a1195 = alloca { ptr, i64, i64 }, align 16 + %a1196 = alloca { ptr, i64, i64 }, align 16 + %a1197 = alloca { ptr, i64, i64 }, align 16 + %a1198 = alloca { ptr, i64, i64 }, align 16 + %a1201 = alloca { ptr, i64, i64 }, align 16 + %a1202 = alloca { ptr, i64, i64 }, align 16 + %a1206 = alloca %S.ast.Type, align 16 + %a1210 = alloca { ptr, i64, i64 }, align 16 + %a1211 = alloca { ptr, i64, i64 }, align 16 + %a1217 = alloca { ptr, i64, i64 }, align 16 + %a1218 = alloca { ptr, i64, i64 }, align 16 + %a1243 = alloca %S.gen.Val, align 16 + %a1244 = alloca %S.ast.Type, align 16 + %a1245 = alloca %S.gen.Val, align 16 + %a1249 = alloca { ptr, i64, i64 }, align 16 + %a1250 = alloca { ptr, i64, i64 }, align 16 + %a1251 = alloca { ptr, i64, i64 }, align 16 + %a1253 = alloca { ptr, i64, i64 }, align 16 + %a1254 = alloca { ptr, i64, i64 }, align 16 + %a1255 = alloca { ptr, i64, i64 }, align 16 + %a1256 = alloca { ptr, i64, i64 }, align 16 + %a1259 = alloca { ptr, i64, i64 }, align 16 + %a1260 = alloca { ptr, i64, i64 }, align 16 + %a1263 = alloca { ptr, i64, i64 }, align 16 + %a1266 = alloca { ptr, i64, i64 }, align 16 + %a1267 = alloca { ptr, i64, i64 }, align 16 + %a1268 = alloca { ptr, i64, i64 }, align 16 + %a1270 = alloca { ptr, i64, i64 }, align 16 + %a1271 = alloca { ptr, i64, i64 }, align 16 + %a1272 = alloca { ptr, i64, i64 }, align 16 + %a1273 = alloca { ptr, i64, i64 }, align 16 + %a1275 = alloca { ptr, i64, i64 }, align 16 + %a1279 = alloca { ptr, i64, i64 }, align 16 + %a1280 = alloca { ptr, i64, i64 }, align 16 + %a1285 = alloca %S.gen.Val, align 16 + %a1303 = alloca %S.gen.Val, align 16 + %a1306 = alloca { ptr, i64, i64 }, align 16 + %a1309 = alloca { ptr, i64, i64 }, align 16 + %a1310 = alloca { ptr, i64, i64 }, align 16 + %a1311 = alloca { ptr, i64, i64 }, align 16 + %a1313 = alloca { ptr, i64, i64 }, align 16 + %a1314 = alloca { ptr, i64, i64 }, align 16 + %a1315 = alloca { ptr, i64, i64 }, align 16 + %a1316 = alloca { ptr, i64, i64 }, align 16 + %a1321 = alloca { ptr, i64, i64 }, align 16 + %a1322 = alloca { ptr, i64, i64 }, align 16 + %a1323 = alloca { ptr, i64, i64 }, align 16 + %a1324 = alloca { ptr, i64, i64 }, align 16 + %a1325 = alloca { ptr, i64, i64 }, align 16 + %a1327 = alloca { ptr, i64, i64 }, align 16 + %a1328 = alloca { ptr, i64, i64 }, align 16 + %a1329 = alloca { ptr, i64, i64 }, align 16 + %a1330 = alloca { ptr, i64, i64 }, align 16 + %a1332 = alloca { ptr, i64, i64 }, align 16 + %a1343 = alloca { ptr, i64, i64 }, align 16 + %a1344 = alloca { ptr, i64, i64 }, align 16 + %a1359 = alloca %S.gen.Val, align 16 + %a1365 = alloca { ptr, i64, i64 }, align 16 + %a1366 = alloca { ptr, i64, i64 }, align 16 + %a1367 = alloca { ptr, i64, i64 }, align 16 + %a1368 = alloca { ptr, i64, i64 }, align 16 + %a1370 = alloca { ptr, i64, i64 }, align 16 + %a1371 = alloca { ptr, i64, i64 }, align 16 + %a1372 = alloca { ptr, i64, i64 }, align 16 + %a1373 = alloca { ptr, i64, i64 }, align 16 + %a1376 = alloca { ptr, i64, i64 }, align 16 + %a1377 = alloca { ptr, i64, i64 }, align 16 + %a1387 = alloca { ptr, i64, i64 }, align 16 + %a1388 = alloca { ptr, i64, i64 }, align 16 + %a1390 = alloca { ptr, i64, i64 }, align 16 + %a1391 = alloca { ptr, i64, i64 }, align 16 + %a1399 = alloca { ptr, i64, i64 }, align 16 + %a1400 = alloca { ptr, i64, i64 }, align 16 + %a1415 = alloca %S.gen.Val, align 16 + %a1419 = alloca { ptr, i64, i64 }, align 16 + %a1420 = alloca { ptr, i64, i64 }, align 16 + %a1449 = alloca { ptr, i64, i64 }, align 16 + %a1452 = alloca { ptr, i64, i64 }, align 16 + %a1457 = alloca { ptr, i64, i64 }, align 16 + %a1458 = alloca { ptr, i64, i64 }, align 16 + %a1459 = alloca { ptr, i64, i64 }, align 16 + %a1461 = alloca { ptr, i64, i64 }, align 16 + %a1462 = alloca { ptr, i64, i64 }, align 16 + %a1463 = alloca { ptr, i64, i64 }, align 16 + %a1464 = alloca { ptr, i64, i64 }, align 16 + %a1467 = alloca { ptr, i64, i64 }, align 16 + %a1470 = alloca { ptr, i64, i64 }, align 16 + %a1491 = alloca { ptr, i64, i64 }, align 16 + %a1492 = alloca { ptr, i64, i64 }, align 16 + %a1493 = alloca { ptr, i64, i64 }, align 16 + %a1495 = alloca { ptr, i64, i64 }, align 16 + %a1496 = alloca { ptr, i64, i64 }, align 16 + %a1497 = alloca { ptr, i64, i64 }, align 16 + %a1498 = alloca { ptr, i64, i64 }, align 16 + %a1500 = alloca { ptr, i64, i64 }, align 16 + %a1510 = alloca i64, align 16 + %a1521 = alloca { ptr, i64, i64 }, align 16 + %a1522 = alloca { ptr, i64, i64 }, align 16 + %a1523 = alloca { ptr, i64, i64 }, align 16 + %a1525 = alloca { ptr, i64, i64 }, align 16 + %a1526 = alloca { ptr, i64, i64 }, align 16 + %a1527 = alloca { ptr, i64, i64 }, align 16 + %a1528 = alloca { ptr, i64, i64 }, align 16 + %a1530 = alloca { ptr, i64, i64 }, align 16 + %a1543 = alloca i64, align 16 + %a1567 = alloca { ptr, i64, i64 }, align 16 + %a1568 = alloca { ptr, i64, i64 }, align 16 + %a1569 = alloca { ptr, i64, i64 }, align 16 + %a1571 = alloca { ptr, i64, i64 }, align 16 + %a1572 = alloca { ptr, i64, i64 }, align 16 + %a1573 = alloca { ptr, i64, i64 }, align 16 + %a1574 = alloca { ptr, i64, i64 }, align 16 + %a1577 = alloca { ptr, i64, i64 }, align 16 + %a1578 = alloca { ptr, i64, i64 }, align 16 + %a1579 = alloca { ptr, i64, i64 }, align 16 + %a1580 = alloca { ptr, i64, i64 }, align 16 + %a1582 = alloca { ptr, i64, i64 }, align 16 + %a1583 = alloca { ptr, i64, i64 }, align 16 + %a1584 = alloca { ptr, i64, i64 }, align 16 + %a1585 = alloca { ptr, i64, i64 }, align 16 + %a1587 = alloca { ptr, i64, i64 }, align 16 + %a1588 = alloca { ptr, i64, i64 }, align 16 + %a1591 = alloca i64, align 16 + %a1599 = alloca %S.ast.Type, align 16 + %a1620 = alloca %S.ast.Type, align 16 + %a1641 = alloca i64, align 16 + %a1654 = alloca %S.gen.StructDef, align 16 + %a1655 = alloca %S.gen.StructDef, align 16 + %a1657 = alloca %S.gen.StructDef, align 16 + %a1685 = alloca %S.ast.Node, align 16 + %a1686 = alloca %S.ast.Node, align 16 + %a1688 = alloca %S.ast.Node, align 16 + %a1697 = alloca { ptr, i64, i64 }, align 16 + %a1698 = alloca { ptr, i64, i64 }, align 16 + %a1699 = alloca { ptr, i64, i64 }, align 16 + %a1701 = alloca { ptr, i64, i64 }, align 16 + %a1702 = alloca { ptr, i64, i64 }, align 16 + %a1703 = alloca { ptr, i64, i64 }, align 16 + %a1704 = alloca { ptr, i64, i64 }, align 16 + %a1708 = alloca { ptr, i64, i64 }, align 16 + %a1709 = alloca { ptr, i64, i64 }, align 16 + %a1711 = alloca { ptr, i64, i64 }, align 16 + %a1712 = alloca { ptr, i64, i64 }, align 16 + %a1713 = alloca { ptr, i64, i64 }, align 16 + %a1714 = alloca { ptr, i64, i64 }, align 16 + %a1715 = alloca { ptr, i64, i64 }, align 16 + %a1717 = alloca { ptr, i64, i64 }, align 16 + %a1718 = alloca { ptr, i64, i64 }, align 16 + %a1719 = alloca { ptr, i64, i64 }, align 16 + %a1720 = alloca { ptr, i64, i64 }, align 16 + %a1737 = alloca { ptr, i64, i64 }, align 16 + %a1753 = alloca i64, align 16 + %a1765 = alloca { ptr, i64, i64 }, align 16 + %a1775 = alloca { ptr, i64, i64 }, align 16 + %a1778 = alloca { ptr, i64, i64 }, align 16 + %a1779 = alloca { ptr, i64, i64 }, align 16 + %a1806 = alloca { ptr, i64, i64 }, align 16 + %a1807 = alloca { ptr, i64, i64 }, align 16 + %a1808 = alloca { ptr, i64, i64 }, align 16 + %a1810 = alloca { ptr, i64, i64 }, align 16 + %a1811 = alloca { ptr, i64, i64 }, align 16 + %a1812 = alloca { ptr, i64, i64 }, align 16 + %a1813 = alloca { ptr, i64, i64 }, align 16 + %a1815 = alloca { ptr, i64, i64 }, align 16 + %a1819 = alloca { ptr, i64, i64 }, align 16 + %a1820 = alloca { ptr, i64, i64 }, align 16 + %a1821 = alloca { ptr, i64, i64 }, align 16 + %a1823 = alloca { ptr, i64, i64 }, align 16 + %a1824 = alloca { ptr, i64, i64 }, align 16 + %a1825 = alloca { ptr, i64, i64 }, align 16 + %a1826 = alloca { ptr, i64, i64 }, align 16 + %a1830 = alloca { ptr, i64, i64 }, align 16 + %a1831 = alloca { ptr, i64, i64 }, align 16 + %a1832 = alloca { ptr, i64, i64 }, align 16 + %a1833 = alloca { ptr, i64, i64 }, align 16 + %a1834 = alloca { ptr, i64, i64 }, align 16 + %a1836 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic8101, label %ok8102 +panic8101: + call void @finch_panic(ptr @.str.5187, i64 4835, ptr @.str.5188) + unreachable +ok8102: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 + %t12 = load i1, ptr %t11 + br label %logic.from8103 +logic.from8103: + br i1 %t12, label %logic.rhs8104, label %logic.end8105 +logic.rhs8104: + %t13 = load { ptr, i64, i64 }, ptr %a8 + %t14 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t13) + br label %logic.rend8106 +logic.rend8106: + br label %logic.end8105 +logic.end8105: + %t15 = phi i1 [ false, %logic.from8103 ], [ %t14, %logic.rend8106 ] + br i1 %t15, label %then8107, label %endif8109 +then8107: + %t16 = call { ptr, i64, i64 } @finch.docs.builtins() + %t17 = load { ptr, i64, i64 }, ptr %a8 + %t18 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t16, { ptr, i64, i64 } %t17) + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch.drop.arr_S_docs_Doc(ptr %a19) + store %S.docs.Doc %t18, ptr %a20 + %t21 = getelementptr inbounds %S.docs.Doc, ptr %a20, i32 0, i32 0 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = icmp sgt i64 %t23, 0 + br i1 %t24, label %then8113, label %endif8115 +then8113: + %t25 = load ptr, ptr %a1 + %t26 = load %S.ast.Node, ptr %a2 + %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t28 = load i64, ptr %t27 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = load %S.docs.Doc, ptr %a20 + %t32 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t31) + call void @finch.gen.noteRef(ptr %t25, %S.ast.Node %t26, i64 %t28, i64 %t30, { ptr, i64, i64 } %t32, { ptr, i64, i64 } { ptr @.str.5189, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + br label %endif8115 +endif8115: + call void @finch.drop.S_docs_Doc(ptr %a20) + br label %endif8109 +endif8109: + %t34 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.5190, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then8116, label %endif8118 +then8116: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.5191, i64 86, i64 0 }) + br label %endif8118 +endif8118: + %t41 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.5192, i64 5, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br i1 %t45, label %then8119, label %endif8121 +then8119: + %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 + %t48 = load i64, ptr %t47 + store i64 0, ptr %a49 + br label %for.cond8122 +for.cond8122: + %t50 = load i64, ptr %a49 + %t51 = icmp slt i64 %t50, %t48 + br i1 %t51, label %for.body8123, label %for.end8125 +for.body8123: + %t52 = load ptr, ptr %a1 + %t53 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t54 = load i64, ptr %a49 + %t55 = load { ptr, i64, i64 }, ptr %t53 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range8126, label %inrange8127 +range8126: + call void @finch_panic_index(ptr @.str.5193, i64 4846, i64 %t54, i64 %t56) + unreachable +inrange8127: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 + %t60 = load %S.ast.Node, ptr %t59 + %t61 = call %S.gen.Val @finch.gen.expr(ptr %t52, %S.ast.Node %t60) + store %S.gen.Val %t61, ptr %a62 + %t63 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 1 + %t64 = getelementptr inbounds %S.ast.Type, ptr %t63, i32 0, i32 0 + %t65 = load { ptr, i64, i64 }, ptr %t64 + store { ptr, i64, i64 } %t65, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.5194, i64 4, i64 0 }, ptr %a67 + %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) + %t69 = icmp ne i32 %t68, 0 + br i1 %t69, label %then8128, label %endif8130 +then8128: + %t70 = load ptr, ptr %a1 + %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t72 = load i64, ptr %a49 + %t73 = load { ptr, i64, i64 }, ptr %t71 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 %t72, %t74 + br i1 %t75, label %range8131, label %inrange8132 +range8131: + call void @finch_panic_index(ptr @.str.5195, i64 4848, i64 %t72, i64 %t74) + unreachable +inrange8132: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 %t72 + %t78 = load %S.ast.Node, ptr %t77 + call void @finch.gen.fail(ptr %t70, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5196, i64 53, i64 0 }) + br label %endif8130 +endif8130: + %t79 = load i64, ptr %a49 + %t80 = icmp sgt i64 %t79, 0 + br i1 %t80, label %then8133, label %endif8135 +then8133: + %t81 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t81, { ptr, i64, i64 } { ptr @.str.5197, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5198, i64 0, i64 0 }) + br label %endif8135 +endif8135: + %t82 = load ptr, ptr %a1 + %t83 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 0 + %t84 = load { ptr, i64, i64 }, ptr %t83 + %t85 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 1 + %t86 = load %S.ast.Type, ptr %t85 + call void @finch.gen.emitPrint(ptr %t82, { ptr, i64, i64 } %t84, %S.ast.Type %t86, i1 false) + %t87 = load ptr, ptr %a1 + %t88 = load %S.gen.Val, ptr %a62 + call void @finch.gen.release(ptr %t87, %S.gen.Val %t88) + call void @finch.drop.S_gen_Val(ptr %a62) + br label %for.step8124 +for.step8124: + %t89 = load i64, ptr %a49 + %t90 = add i64 %t89, 1 + store i64 %t90, ptr %a49 + br label %for.cond8122 +for.end8125: + %t91 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t91, { ptr, i64, i64 } { ptr @.str.5199, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5200, i64 0, i64 0 }) + %t92 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5201, i64 4, i64 0 }) + %t93 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t92, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t93 +endif8121: + %t94 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t94, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.5202, i64 4, i64 0 }, ptr %a96 + %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) + %t98 = icmp ne i32 %t97, 0 + br i1 %t98, label %then8136, label %endif8138 +then8136: + %t99 = load ptr, ptr %a1 + %t100 = load %S.ast.Node, ptr %a2 + %t101 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t99, %S.ast.Node %t100, i64 0, i64 1, { ptr, i64, i64 } %t101) + %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t103 = load { ptr, i64, i64 }, ptr %t102 + %t104 = extractvalue { ptr, i64, i64 } %t103, 1 + %t105 = icmp uge i64 0, %t104 + br i1 %t105, label %range8139, label %inrange8140 +range8139: + call void @finch_panic_index(ptr @.str.5203, i64 4861, i64 0, i64 %t104) + unreachable +inrange8140: + %t106 = extractvalue { ptr, i64, i64 } %t103, 0 + %t107 = getelementptr inbounds %S.ast.Node, ptr %t106, i64 0 + %t108 = load %S.ast.Node, ptr %t107 + store %S.ast.Node %t108, ptr %a109 + call void @finch.copy.S_ast_Node(ptr %a110, ptr %a109) + %t111 = load %S.ast.Node, ptr %a110 + store %S.ast.Node %t111, ptr %a112 + %t113 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t114 = load { ptr, i64, i64 }, ptr %t113 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.5204, i64 3, i64 0 }, ptr %a116 + %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) + %t118 = icmp ne i32 %t117, 0 + br label %logic.from8141 +logic.from8141: + br i1 %t118, label %logic.rhs8142, label %logic.end8143 +logic.rhs8142: + %t119 = load ptr, ptr %a1 + %t120 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %t120 + %t122 = call i64 @finch.gen.lookup(ptr %t119, { ptr, i64, i64 } %t121) + %t123 = icmp slt i64 %t122, 0 + br label %logic.rend8144 +logic.rend8144: + br label %logic.end8143 +logic.end8143: + %t124 = phi i1 [ false, %logic.from8141 ], [ %t123, %logic.rend8144 ] + br i1 %t124, label %then8145, label %endif8147 +then8145: + %t125 = load ptr, ptr %a1 + %t126 = load ptr, ptr %a1 + %t127 = icmp eq ptr %t126, null + br i1 %t127, label %panic8148, label %ok8149 +panic8148: + call void @finch_panic(ptr @.str.5205, i64 4863, ptr @.str.5206) + unreachable +ok8149: + %t128 = getelementptr inbounds %S.gen.Gen, ptr %t126, i32 0, i32 14 + %t129 = load { ptr, i64, i64 }, ptr %t128 + %t130 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 + %t131 = load { ptr, i64, i64 }, ptr %t130 + %t132 = call i64 @finch.gen.findFn(ptr %t125, { ptr, i64, i64 } %t129, { ptr, i64, i64 } %t131) + store i64 %t132, ptr %a133 + %t134 = load i64, ptr %a133 + %t135 = icmp sge i64 %t134, 0 + br i1 %t135, label %then8150, label %endif8152 +then8150: + %t136 = load ptr, ptr %a1 + %t137 = load i64, ptr %a133 + %t138 = load %S.ast.Node, ptr %a112 + %t139 = call { ptr, i64, i64 } @finch.gen.cThunk(ptr %t136, i64 %t137, %S.ast.Node %t138) + %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t141 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5207, i64 3, i64 0 }) + %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 + call void @finch.drop.S_ast_Node(ptr %a112) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t142 +endif8152: + br label %endif8147 +endif8147: + %t143 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t144 = load { ptr, i64, i64 }, ptr %t143 + store { ptr, i64, i64 } %t144, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.5208, i64 3, i64 0 }, ptr %a146 + %t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146) + %t148 = icmp eq i32 %t147, 0 + br label %logic.from8153 +logic.from8153: + br i1 %t148, label %logic.rhs8154, label %logic.end8155 +logic.rhs8154: + %t149 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.5209, i64 6, i64 0 }, ptr %a152 + %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) + %t154 = icmp eq i32 %t153, 0 + br label %logic.rend8156 +logic.rend8156: + br label %logic.end8155 +logic.end8155: + %t155 = phi i1 [ false, %logic.from8153 ], [ %t154, %logic.rend8156 ] + br label %logic.from8157 +logic.from8157: + br i1 %t155, label %logic.rhs8158, label %logic.end8159 +logic.rhs8158: + %t156 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.5210, i64 5, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) + %t161 = icmp eq i32 %t160, 0 + br label %logic.rend8160 +logic.rend8160: + br label %logic.end8159 +logic.end8159: + %t162 = phi i1 [ false, %logic.from8157 ], [ %t161, %logic.rend8160 ] + br i1 %t162, label %then8161, label %endif8163 +then8161: + %t163 = load ptr, ptr %a1 + %t164 = load %S.ast.Node, ptr %a112 + call void @finch.gen.fail(ptr %t163, %S.ast.Node %t164, { ptr, i64, i64 } { ptr @.str.5211, i64 63, i64 0 }) + br label %endif8163 +endif8163: + %t165 = load ptr, ptr %a1 + %t166 = load %S.ast.Node, ptr %a112 + %t167 = call %S.gen.Place @finch.gen.place(ptr %t165, %S.ast.Node %t166, i1 true) + store %S.gen.Place %t167, ptr %a168 + %t169 = getelementptr inbounds %S.gen.Place, ptr %a168, i32 0, i32 0 + %t170 = load { ptr, i64, i64 }, ptr %t169 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_copy(ptr %a172, ptr %a171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + %t174 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t173, 0 + %t175 = getelementptr inbounds %S.gen.Place, ptr %a168, i32 0, i32 1 + %t176 = load %S.ast.Type, ptr %t175 + %t177 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t176) + %t178 = insertvalue %S.gen.Val %t174, %S.ast.Type %t177, 1 + call void @finch.drop.S_gen_Place(ptr %a168) + call void @finch.drop.S_ast_Node(ptr %a112) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t178 +endif8138: + %t179 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t179, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5212, i64 3, i64 0 }, ptr %a181 + %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + br i1 %t183, label %then8164, label %endif8166 +then8164: + %t184 = load ptr, ptr %a1 + %t185 = load %S.ast.Node, ptr %a2 + %t186 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t184, %S.ast.Node %t185, i64 0, i64 1, { ptr, i64, i64 } %t186) + %t187 = load ptr, ptr %a1 + %t188 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t189 = load { ptr, i64, i64 }, ptr %t188 + %t190 = extractvalue { ptr, i64, i64 } %t189, 1 + %t191 = icmp uge i64 0, %t190 + br i1 %t191, label %range8167, label %inrange8168 +range8167: + call void @finch_panic_index(ptr @.str.5213, i64 4876, i64 0, i64 %t190) + unreachable +inrange8168: + %t192 = extractvalue { ptr, i64, i64 } %t189, 0 + %t193 = getelementptr inbounds %S.ast.Node, ptr %t192, i64 0 + %t194 = load %S.ast.Node, ptr %t193 + %t195 = call %S.gen.Val @finch.gen.expr(ptr %t187, %S.ast.Node %t194) + store %S.gen.Val %t195, ptr %a196 + %t197 = load ptr, ptr %a1 + %t198 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t197) + store { ptr, i64, i64 } %t198, ptr %a199 + %t200 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 + %t202 = load { ptr, i64, i64 }, ptr %t201 + store { ptr, i64, i64 } %t202, ptr %a203 + call void @finch_str_copy(ptr %a204, ptr %a203) + %t205 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t205, ptr %a206 + store i1 false, ptr %a207 + %t208 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.5214, i64 3, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br i1 %t212, label %then8169, label %else8170 +then8169: + %t213 = load ptr, ptr %a1 + %t214 = load %S.gen.Val, ptr %a196 + %t215 = call { ptr, i64, i64 } @finch.gen.own(ptr %t213, %S.gen.Val %t214) + %t216 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t215, 0 + %t217 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t218 = load %S.ast.Type, ptr %t217 + store %S.ast.Type %t218, ptr %a219 + call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) + %t221 = load %S.ast.Type, ptr %a220 + %t222 = insertvalue %S.gen.Val %t216, %S.ast.Type %t221, 1 + %t223 = insertvalue %S.gen.Val %t222, i1 true, 2 + call void @finch_str_drop(ptr %a206) + call void @finch_str_drop(ptr %a199) + call void @finch.drop.S_gen_Val(ptr %a196) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t223 +else8170: + %t224 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t225 = load %S.ast.Type, ptr %t224 + %t226 = call i1 @finch.gen.isSigned(%S.ast.Type %t225) + br i1 %t226, label %then8172, label %else8173 +then8172: + %t227 = load ptr, ptr %a1 + %t228 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5215, i64 34, i64 0 }, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.5216, i64 6, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + store { ptr, i64, i64 } %t232, ptr %a236 + call void @finch_str_drop(ptr %a236) + %t237 = load { ptr, i64, i64 }, ptr %a233 + %t238 = load ptr, ptr %a1 + %t239 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t242 = load %S.ast.Type, ptr %t241 + %t243 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5217, i64 3, i64 0 }) + %t244 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t238, { ptr, i64, i64 } %t240, %S.ast.Type %t242, %S.ast.Type %t243) + store %S.ast.Type %t243, ptr %a245 + call void @finch.drop.S_ast_Type(ptr %a245) + store { ptr, i64, i64 } %t237, ptr %a247 + store { ptr, i64, i64 } %t244, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t237, ptr %a249 + call void @finch_str_drop(ptr %a249) + store { ptr, i64, i64 } %t244, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.5218, i64 1, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + call void @finch.gen.emit(ptr %t227, { ptr, i64, i64 } %t256) + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch_str_drop(ptr %a257) + br label %endif8174 +else8173: + %t258 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t259 = load %S.ast.Type, ptr %t258 + %t260 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t259) + br i1 %t260, label %then8175, label %else8176 +then8175: + %t261 = load ptr, ptr %a1 + %t262 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5219, i64 35, i64 0 }, ptr %a264 + store { ptr, i64, i64 } %t262, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t266, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.5220, i64 6, i64 0 }, ptr %a269 + call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) + store { ptr, i64, i64 } %t266, ptr %a270 + call void @finch_str_drop(ptr %a270) + %t271 = load { ptr, i64, i64 }, ptr %a267 + %t272 = load ptr, ptr %a1 + %t273 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t274 = load { ptr, i64, i64 }, ptr %t273 + %t275 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t276 = load %S.ast.Type, ptr %t275 + %t277 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5221, i64 3, i64 0 }) + %t278 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t272, { ptr, i64, i64 } %t274, %S.ast.Type %t276, %S.ast.Type %t277) + store %S.ast.Type %t277, ptr %a279 + call void @finch.drop.S_ast_Type(ptr %a279) + store { ptr, i64, i64 } %t271, ptr %a281 + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) + store { ptr, i64, i64 } %t271, ptr %a283 + call void @finch_str_drop(ptr %a283) + store { ptr, i64, i64 } %t278, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a280 + store { ptr, i64, i64 } %t285, ptr %a287 + store { ptr, i64, i64 } { ptr @.str.5222, i64 1, i64 0 }, ptr %a288 + call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) + store { ptr, i64, i64 } %t285, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a286 + call void @finch.gen.emit(ptr %t261, { ptr, i64, i64 } %t290) + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + br label %endif8177 +else8176: + %t292 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t293 = load %S.ast.Type, ptr %t292 + %t294 = call i1 @finch.gen.isFloat(%S.ast.Type %t293) + br i1 %t294, label %then8178, label %else8179 +then8178: + %t295 = load ptr, ptr %a1 + %t296 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5223, i64 36, i64 0 }, ptr %a298 + store { ptr, i64, i64 } %t296, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } %t300, ptr %a302 + store { ptr, i64, i64 } { ptr @.str.5224, i64 9, i64 0 }, ptr %a303 + call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) + store { ptr, i64, i64 } %t300, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load { ptr, i64, i64 }, ptr %a301 + %t306 = load ptr, ptr %a1 + %t307 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t308 = load { ptr, i64, i64 }, ptr %t307 + %t309 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t310 = load %S.ast.Type, ptr %t309 + %t311 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5225, i64 5, i64 0 }) + %t312 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t306, { ptr, i64, i64 } %t308, %S.ast.Type %t310, %S.ast.Type %t311) + store %S.ast.Type %t311, ptr %a313 + call void @finch.drop.S_ast_Type(ptr %a313) + store { ptr, i64, i64 } %t305, ptr %a315 + store { ptr, i64, i64 } %t312, ptr %a316 + call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) + store { ptr, i64, i64 } %t305, ptr %a317 + call void @finch_str_drop(ptr %a317) + store { ptr, i64, i64 } %t312, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a314 + store { ptr, i64, i64 } %t319, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.5226, i64 1, i64 0 }, ptr %a322 + call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) + store { ptr, i64, i64 } %t319, ptr %a323 + call void @finch_str_drop(ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a320 + call void @finch.gen.emit(ptr %t295, { ptr, i64, i64 } %t324) + store { ptr, i64, i64 } %t324, ptr %a325 + call void @finch_str_drop(ptr %a325) + br label %endif8180 +else8179: + %t326 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t326, ptr %a327 + store { ptr, i64, i64 } { ptr @.str.5227, i64 4, i64 0 }, ptr %a328 + %t329 = call i32 @finch_str_eq(ptr %a327, ptr %a328) + %t330 = icmp ne i32 %t329, 0 + br i1 %t330, label %then8181, label %else8182 +then8181: + %t331 = load ptr, ptr %a1 + %t332 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5228, i64 35, i64 0 }, ptr %a334 + store { ptr, i64, i64 } %t332, ptr %a335 + call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a333 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.5229, i64 13, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t336, ptr %a340 + call void @finch_str_drop(ptr %a340) + %t341 = load { ptr, i64, i64 }, ptr %a337 + %t342 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t343 = load { ptr, i64, i64 }, ptr %t342 + store { ptr, i64, i64 } %t341, ptr %a345 + store { ptr, i64, i64 } %t343, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t341, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = load { ptr, i64, i64 }, ptr %a344 + store { ptr, i64, i64 } %t348, ptr %a350 + store { ptr, i64, i64 } { ptr @.str.5230, i64 1, i64 0 }, ptr %a351 + call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) + store { ptr, i64, i64 } %t348, ptr %a352 + call void @finch_str_drop(ptr %a352) + %t353 = load { ptr, i64, i64 }, ptr %a349 + call void @finch.gen.emit(ptr %t331, { ptr, i64, i64 } %t353) + store { ptr, i64, i64 } %t353, ptr %a354 + call void @finch_str_drop(ptr %a354) + br label %endif8183 +else8182: + %t355 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t355, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.5231, i64 4, i64 0 }, ptr %a357 + %t358 = call i32 @finch_str_eq(ptr %a356, ptr %a357) + %t359 = icmp ne i32 %t358, 0 + br i1 %t359, label %then8184, label %else8185 +then8184: + %t360 = load ptr, ptr %a1 + %t361 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t362 = load { ptr, i64, i64 }, ptr %t361 + store { ptr, i64, i64 } { ptr @.str.5232, i64 8, i64 0 }, ptr %a364 + store { ptr, i64, i64 } %t362, ptr %a365 + call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) + %t366 = load { ptr, i64, i64 }, ptr %a363 + store { ptr, i64, i64 } %t366, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.5233, i64 7, i64 0 }, ptr %a369 + call void @finch_str_concat(ptr %a367, ptr %a368, ptr %a369) + store { ptr, i64, i64 } %t366, ptr %a370 + call void @finch_str_drop(ptr %a370) + %t371 = load { ptr, i64, i64 }, ptr %a367 + %t372 = call { ptr, i64, i64 } @finch.gen.op(ptr %t360, { ptr, i64, i64 } %t371) + store { ptr, i64, i64 } %t371, ptr %a373 + call void @finch_str_drop(ptr %a373) + store { ptr, i64, i64 } %t372, ptr %a374 + %t375 = load ptr, ptr %a1 + %t376 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5234, i64 35, i64 0 }, ptr %a378 + store { ptr, i64, i64 } %t376, ptr %a379 + call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) + %t380 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t380, ptr %a382 + store { ptr, i64, i64 } { ptr @.str.5235, i64 6, i64 0 }, ptr %a383 + call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383) + store { ptr, i64, i64 } %t380, ptr %a384 + call void @finch_str_drop(ptr %a384) + %t385 = load { ptr, i64, i64 }, ptr %a381 + %t386 = load { ptr, i64, i64 }, ptr %a374 + store { ptr, i64, i64 } %t385, ptr %a388 + store { ptr, i64, i64 } %t386, ptr %a389 + call void @finch_str_concat(ptr %a387, ptr %a388, ptr %a389) + store { ptr, i64, i64 } %t385, ptr %a390 + call void @finch_str_drop(ptr %a390) + %t391 = load { ptr, i64, i64 }, ptr %a387 + store { ptr, i64, i64 } %t391, ptr %a393 + store { ptr, i64, i64 } { ptr @.str.5236, i64 1, i64 0 }, ptr %a394 + call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394) + store { ptr, i64, i64 } %t391, ptr %a395 + call void @finch_str_drop(ptr %a395) + %t396 = load { ptr, i64, i64 }, ptr %a392 + call void @finch.gen.emit(ptr %t375, { ptr, i64, i64 } %t396) + store { ptr, i64, i64 } %t396, ptr %a397 + call void @finch_str_drop(ptr %a397) + call void @finch_str_drop(ptr %a374) + br label %endif8186 +else8185: + %t398 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t398, ptr %a399 + store { ptr, i64, i64 } { ptr @.str.5237, i64 3, i64 0 }, ptr %a400 + %t401 = call i32 @finch_str_eq(ptr %a399, ptr %a400) + %t402 = icmp ne i32 %t401, 0 + br i1 %t402, label %then8187, label %else8188 +then8187: + %t403 = load ptr, ptr %a1 + %t404 = load { ptr, i64, i64 }, ptr %a199 + call void @finch.gen.store(ptr %t403, { ptr, i64, i64 } { ptr @.str.5238, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5239, i64 15, i64 0 }, { ptr, i64, i64 } %t404) + %t405 = load ptr, ptr %a1 + %t406 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5240, i64 32, i64 0 }, ptr %a408 + store { ptr, i64, i64 } %t406, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + %t410 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t410, ptr %a412 + store { ptr, i64, i64 } { ptr @.str.5241, i64 6, i64 0 }, ptr %a413 + call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) + store { ptr, i64, i64 } %t410, ptr %a414 + call void @finch_str_drop(ptr %a414) + %t415 = load { ptr, i64, i64 }, ptr %a411 + %t416 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t417 = load { ptr, i64, i64 }, ptr %t416 + store { ptr, i64, i64 } %t415, ptr %a419 + store { ptr, i64, i64 } %t417, ptr %a420 + call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420) + store { ptr, i64, i64 } %t415, ptr %a421 + call void @finch_str_drop(ptr %a421) + %t422 = load { ptr, i64, i64 }, ptr %a418 + store { ptr, i64, i64 } %t422, ptr %a424 + store { ptr, i64, i64 } { ptr @.str.5242, i64 1, i64 0 }, ptr %a425 + call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) + store { ptr, i64, i64 } %t422, ptr %a426 + call void @finch_str_drop(ptr %a426) + %t427 = load { ptr, i64, i64 }, ptr %a423 + call void @finch.gen.emit(ptr %t405, { ptr, i64, i64 } %t427) + store { ptr, i64, i64 } %t427, ptr %a428 + call void @finch_str_drop(ptr %a428) + store i1 true, ptr %a207 + br label %endif8189 +else8188: + %t429 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t429, ptr %a430 + store { ptr, i64, i64 } { ptr @.str.5243, i64 5, i64 0 }, ptr %a431 + %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) + %t433 = icmp ne i32 %t432, 0 + br label %logic.from8190 +logic.from8190: + br i1 %t433, label %logic.rhs8191, label %logic.end8192 +logic.rhs8191: + %t434 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t435 = getelementptr inbounds %S.ast.Type, ptr %t434, i32 0, i32 1 + %t436 = load { ptr, i64, i64 }, ptr %t435 + %t437 = extractvalue { ptr, i64, i64 } %t436, 1 + %t438 = icmp uge i64 0, %t437 + br i1 %t438, label %range8193, label %inrange8194 +range8193: + call void @finch_panic_index(ptr @.str.5244, i64 4898, i64 0, i64 %t437) + unreachable +inrange8194: + %t439 = extractvalue { ptr, i64, i64 } %t436, 0 + %t440 = getelementptr inbounds %S.ast.Type, ptr %t439, i64 0 + %t441 = getelementptr inbounds %S.ast.Type, ptr %t440, i32 0, i32 0 + %t442 = load { ptr, i64, i64 }, ptr %t441 + store { ptr, i64, i64 } %t442, ptr %a443 + store { ptr, i64, i64 } { ptr @.str.5245, i64 2, i64 0 }, ptr %a444 + %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) + %t446 = icmp ne i32 %t445, 0 + br label %logic.from8195 +logic.from8195: + br i1 %t446, label %logic.end8197, label %logic.rhs8196 +logic.rhs8196: + %t447 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t448 = getelementptr inbounds %S.ast.Type, ptr %t447, i32 0, i32 1 + %t449 = load { ptr, i64, i64 }, ptr %t448 + %t450 = extractvalue { ptr, i64, i64 } %t449, 1 + %t451 = icmp uge i64 0, %t450 + br i1 %t451, label %range8198, label %inrange8199 +range8198: + call void @finch_panic_index(ptr @.str.5246, i64 4898, i64 0, i64 %t450) + unreachable +inrange8199: + %t452 = extractvalue { ptr, i64, i64 } %t449, 0 + %t453 = getelementptr inbounds %S.ast.Type, ptr %t452, i64 0 + %t454 = getelementptr inbounds %S.ast.Type, ptr %t453, i32 0, i32 0 + %t455 = load { ptr, i64, i64 }, ptr %t454 + store { ptr, i64, i64 } %t455, ptr %a456 + store { ptr, i64, i64 } { ptr @.str.5247, i64 4, i64 0 }, ptr %a457 + %t458 = call i32 @finch_str_eq(ptr %a456, ptr %a457) + %t459 = icmp ne i32 %t458, 0 + br label %logic.rend8200 +logic.rend8200: + br label %logic.end8197 +logic.end8197: + %t460 = phi i1 [ true, %logic.from8195 ], [ %t459, %logic.rend8200 ] + br label %logic.rend8201 +logic.rend8201: + br label %logic.end8192 +logic.end8192: + %t461 = phi i1 [ false, %logic.from8190 ], [ %t460, %logic.rend8201 ] + br i1 %t461, label %then8202, label %else8203 +then8202: + %t462 = load ptr, ptr %a1 + %t463 = load { ptr, i64, i64 }, ptr %a199 + call void @finch.gen.store(ptr %t462, { ptr, i64, i64 } { ptr @.str.5248, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5249, i64 15, i64 0 }, { ptr, i64, i64 } %t463) + %t464 = load ptr, ptr %a1 + %t465 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5250, i64 36, i64 0 }, ptr %a467 + store { ptr, i64, i64 } %t465, ptr %a468 + call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) + %t469 = load { ptr, i64, i64 }, ptr %a466 + store { ptr, i64, i64 } %t469, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.5251, i64 6, i64 0 }, ptr %a472 + call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) + store { ptr, i64, i64 } %t469, ptr %a473 + call void @finch_str_drop(ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a470 + %t475 = load ptr, ptr %a1 + %t476 = load %S.gen.Val, ptr %a196 + %t477 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t475, %S.gen.Val %t476) + store { ptr, i64, i64 } %t474, ptr %a479 + store { ptr, i64, i64 } %t477, ptr %a480 + call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480) + store { ptr, i64, i64 } %t474, ptr %a481 + call void @finch_str_drop(ptr %a481) + store { ptr, i64, i64 } %t477, ptr %a482 + call void @finch_str_drop(ptr %a482) + %t483 = load { ptr, i64, i64 }, ptr %a478 + store { ptr, i64, i64 } %t483, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.5252, i64 1, i64 0 }, ptr %a486 + call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) + store { ptr, i64, i64 } %t483, ptr %a487 + call void @finch_str_drop(ptr %a487) + %t488 = load { ptr, i64, i64 }, ptr %a484 + call void @finch.gen.emit(ptr %t464, { ptr, i64, i64 } %t488) + store { ptr, i64, i64 } %t488, ptr %a489 + call void @finch_str_drop(ptr %a489) + %t490 = load ptr, ptr %a1 + %t491 = load %S.gen.Val, ptr %a196 + call void @finch.gen.release(ptr %t490, %S.gen.Val %t491) + br label %endif8204 +else8203: + %t492 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t492, ptr %a493 + store { ptr, i64, i64 } { ptr @.str.5253, i64 4, i64 0 }, ptr %a494 + %t495 = call i32 @finch_str_eq(ptr %a493, ptr %a494) + %t496 = icmp ne i32 %t495, 0 + br label %logic.from8205 +logic.from8205: + br i1 %t496, label %logic.end8207, label %logic.rhs8206 +logic.rhs8206: + %t497 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t497, ptr %a498 + store { ptr, i64, i64 } { ptr @.str.5254, i64 4, i64 0 }, ptr %a499 + %t500 = call i32 @finch_str_eq(ptr %a498, ptr %a499) + %t501 = icmp ne i32 %t500, 0 + br label %logic.rend8208 +logic.rend8208: + br label %logic.end8207 +logic.end8207: + %t502 = phi i1 [ true, %logic.from8205 ], [ %t501, %logic.rend8208 ] + br label %logic.from8209 +logic.from8209: + br i1 %t502, label %logic.end8211, label %logic.rhs8210 +logic.rhs8210: + %t503 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t503, ptr %a504 + store { ptr, i64, i64 } { ptr @.str.5255, i64 5, i64 0 }, ptr %a505 + %t506 = call i32 @finch_str_eq(ptr %a504, ptr %a505) + %t507 = icmp ne i32 %t506, 0 + br label %logic.rend8212 +logic.rend8212: + br label %logic.end8211 +logic.end8211: + %t508 = phi i1 [ true, %logic.from8209 ], [ %t507, %logic.rend8212 ] + br label %logic.from8213 +logic.from8213: + br i1 %t508, label %logic.end8215, label %logic.rhs8214 +logic.rhs8214: + %t509 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t509, ptr %a510 + store { ptr, i64, i64 } { ptr @.str.5256, i64 3, i64 0 }, ptr %a511 + %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) + %t513 = icmp ne i32 %t512, 0 + br label %logic.rend8216 +logic.rend8216: + br label %logic.end8215 +logic.end8215: + %t514 = phi i1 [ true, %logic.from8213 ], [ %t513, %logic.rend8216 ] + br label %logic.from8217 +logic.from8217: + br i1 %t514, label %logic.end8219, label %logic.rhs8218 +logic.rhs8218: + %t515 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t515, ptr %a516 + store { ptr, i64, i64 } { ptr @.str.5257, i64 6, i64 0 }, ptr %a517 + %t518 = call i32 @finch_str_eq(ptr %a516, ptr %a517) + %t519 = icmp ne i32 %t518, 0 + br label %logic.rend8220 +logic.rend8220: + br label %logic.end8219 +logic.end8219: + %t520 = phi i1 [ true, %logic.from8217 ], [ %t519, %logic.rend8220 ] + br label %logic.from8221 +logic.from8221: + br i1 %t520, label %logic.end8223, label %logic.rhs8222 +logic.rhs8222: + %t521 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t521, ptr %a522 + store { ptr, i64, i64 } { ptr @.str.5258, i64 4, i64 0 }, ptr %a523 + %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) + %t525 = icmp ne i32 %t524, 0 + br label %logic.rend8224 +logic.rend8224: + br label %logic.end8223 +logic.end8223: + %t526 = phi i1 [ true, %logic.from8221 ], [ %t525, %logic.rend8224 ] + br i1 %t526, label %then8225, label %else8226 +then8225: + %t527 = load ptr, ptr %a1 + %t528 = load { ptr, i64, i64 }, ptr %a199 + call void @finch.gen.store(ptr %t527, { ptr, i64, i64 } { ptr @.str.5259, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5260, i64 15, i64 0 }, { ptr, i64, i64 } %t528) + %t529 = load ptr, ptr %a1 + %t530 = load { ptr, i64, i64 }, ptr %a199 + %t531 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t532 = load { ptr, i64, i64 }, ptr %t531 + %t533 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t534 = load %S.ast.Type, ptr %t533 + call void @finch.gen.emitFormat(ptr %t529, { ptr, i64, i64 } %t530, { ptr, i64, i64 } %t532, %S.ast.Type %t534, i1 false) + %t535 = load ptr, ptr %a1 + %t536 = load %S.gen.Val, ptr %a196 + call void @finch.gen.release(ptr %t535, %S.gen.Val %t536) + br label %endif8227 +else8226: + %t537 = load ptr, ptr %a1 + %t538 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t539 = load { ptr, i64, i64 }, ptr %t538 + %t540 = extractvalue { ptr, i64, i64 } %t539, 1 + %t541 = icmp uge i64 0, %t540 + br i1 %t541, label %range8228, label %inrange8229 +range8228: + call void @finch_panic_index(ptr @.str.5261, i64 4908, i64 0, i64 %t540) + unreachable +inrange8229: + %t542 = extractvalue { ptr, i64, i64 } %t539, 0 + %t543 = getelementptr inbounds %S.ast.Node, ptr %t542, i64 0 + %t544 = load %S.ast.Node, ptr %t543 + %t545 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t546 = load %S.ast.Type, ptr %t545 + %t547 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t546) + store { ptr, i64, i64 } { ptr @.str.5262, i64 11, i64 0 }, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + store { ptr, i64, i64 } %t547, ptr %a551 + call void @finch_str_drop(ptr %a551) + %t552 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t552, ptr %a554 + store { ptr, i64, i64 } { ptr @.str.5263, i64 9, i64 0 }, ptr %a555 + call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) + store { ptr, i64, i64 } %t552, ptr %a556 + call void @finch_str_drop(ptr %a556) + %t557 = load { ptr, i64, i64 }, ptr %a553 + call void @finch.gen.fail(ptr %t537, %S.ast.Node %t544, { ptr, i64, i64 } %t557) + store { ptr, i64, i64 } %t557, ptr %a558 + call void @finch_str_drop(ptr %a558) + br label %endif8227 +endif8227: + br label %endif8204 +endif8204: + br label %endif8189 +endif8189: + br label %endif8186 +endif8186: + br label %endif8183 +endif8183: + br label %endif8180 +endif8180: + br label %endif8177 +endif8177: + br label %endif8174 +endif8174: + br label %endif8171 +endif8171: + %t559 = load ptr, ptr %a1 + %t560 = load { ptr, i64, i64 }, ptr %a199 + %t561 = call { ptr, i64, i64 } @finch.gen.load(ptr %t559, { ptr, i64, i64 } { ptr @.str.5264, i64 17, i64 0 }, { ptr, i64, i64 } %t560) + %t562 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t561, 0 + %t563 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5265, i64 3, i64 0 }) + %t564 = insertvalue %S.gen.Val %t562, %S.ast.Type %t563, 1 + %t565 = load i1, ptr %a207 + %t566 = xor i1 %t565, true + %t567 = insertvalue %S.gen.Val %t564, i1 %t566, 2 + call void @finch_str_drop(ptr %a206) + call void @finch_str_drop(ptr %a199) + call void @finch.drop.S_gen_Val(ptr %a196) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t567 +endif8166: + %t568 = load { ptr, i64, i64 }, ptr %a8 + %t569 = call { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %t568) + store { ptr, i64, i64 } %t569, ptr %a570 + %t571 = getelementptr inbounds { ptr, i64, i64 }, ptr %a570, i32 0, i32 1 + %t572 = load i64, ptr %t571 + %t573 = icmp sgt i64 %t572, 0 + br i1 %t573, label %then8230, label %endif8232 +then8230: + %t574 = load ptr, ptr %a1 + %t575 = load %S.ast.Node, ptr %a2 + %t576 = load { ptr, i64, i64 }, ptr %a570 + %t577 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %t576) + %t578 = call %S.gen.Val @finch.gen.convert(ptr %t574, %S.ast.Node %t575, %S.ast.Type %t577) + store %S.ast.Type %t577, ptr %a579 + call void @finch.drop.S_ast_Type(ptr %a579) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t578 +endif8232: + %t580 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t580, ptr %a581 + store { ptr, i64, i64 } { ptr @.str.5266, i64 9, i64 0 }, ptr %a582 + %t583 = call i32 @finch_str_eq(ptr %a581, ptr %a582) + %t584 = icmp ne i32 %t583, 0 + br label %logic.from8233 +logic.from8233: + br i1 %t584, label %logic.end8235, label %logic.rhs8234 +logic.rhs8234: + %t585 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t585, ptr %a586 + store { ptr, i64, i64 } { ptr @.str.5267, i64 11, i64 0 }, ptr %a587 + %t588 = call i32 @finch_str_eq(ptr %a586, ptr %a587) + %t589 = icmp ne i32 %t588, 0 + br label %logic.rend8236 +logic.rend8236: + br label %logic.end8235 +logic.end8235: + %t590 = phi i1 [ true, %logic.from8233 ], [ %t589, %logic.rend8236 ] + br i1 %t590, label %then8237, label %endif8239 +then8237: + %t591 = load ptr, ptr %a1 + %t592 = load %S.ast.Node, ptr %a2 + %t593 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t591, %S.ast.Node %t592, i64 0, i64 1, { ptr, i64, i64 } %t593) + %t594 = load ptr, ptr %a1 + %t595 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t596 = load { ptr, i64, i64 }, ptr %t595 + %t597 = extractvalue { ptr, i64, i64 } %t596, 1 + %t598 = icmp uge i64 0, %t597 + br i1 %t598, label %range8240, label %inrange8241 +range8240: + call void @finch_panic_index(ptr @.str.5268, i64 4918, i64 0, i64 %t597) + unreachable +inrange8241: + %t599 = extractvalue { ptr, i64, i64 } %t596, 0 + %t600 = getelementptr inbounds %S.ast.Node, ptr %t599, i64 0 + %t601 = load %S.ast.Node, ptr %t600 + %t602 = call %S.gen.Val @finch.gen.strArg(ptr %t594, %S.ast.Node %t601, { ptr, i64, i64 } { ptr @.str.5269, i64 13, i64 0 }) + store %S.gen.Val %t602, ptr %a603 + %t604 = load ptr, ptr %a1 + %t605 = load %S.gen.Val, ptr %a603 + %t606 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t604, %S.gen.Val %t605) + store { ptr, i64, i64 } %t606, ptr %a607 + %t608 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t608, ptr %a609 + store { ptr, i64, i64 } { ptr @.str.5270, i64 11, i64 0 }, ptr %a610 + %t611 = call i32 @finch_str_eq(ptr %a609, ptr %a610) + %t612 = icmp ne i32 %t611, 0 + br i1 %t612, label %then8242, label %endif8244 +then8242: + %t613 = load ptr, ptr %a1 + %t614 = load { ptr, i64, i64 }, ptr %a607 + store { ptr, i64, i64 } { ptr @.str.5271, i64 32, i64 0 }, ptr %a616 + store { ptr, i64, i64 } %t614, ptr %a617 + call void @finch_str_concat(ptr %a615, ptr %a616, ptr %a617) + %t618 = load { ptr, i64, i64 }, ptr %a615 + store { ptr, i64, i64 } %t618, ptr %a620 + store { ptr, i64, i64 } { ptr @.str.5272, i64 1, i64 0 }, ptr %a621 + call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) + store { ptr, i64, i64 } %t618, ptr %a622 + call void @finch_str_drop(ptr %a622) + %t623 = load { ptr, i64, i64 }, ptr %a619 + %t624 = call { ptr, i64, i64 } @finch.gen.op(ptr %t613, { ptr, i64, i64 } %t623) + store { ptr, i64, i64 } %t623, ptr %a625 + call void @finch_str_drop(ptr %a625) + store { ptr, i64, i64 } %t624, ptr %a626 + %t627 = load ptr, ptr %a1 + %t628 = load %S.gen.Val, ptr %a603 + call void @finch.gen.release(ptr %t627, %S.gen.Val %t628) + %t629 = load ptr, ptr %a1 + %t630 = load { ptr, i64, i64 }, ptr %a626 + store { ptr, i64, i64 } { ptr @.str.5273, i64 12, i64 0 }, ptr %a632 + store { ptr, i64, i64 } %t630, ptr %a633 + call void @finch_str_concat(ptr %a631, ptr %a632, ptr %a633) + %t634 = load { ptr, i64, i64 }, ptr %a631 + store { ptr, i64, i64 } %t634, ptr %a636 + store { ptr, i64, i64 } { ptr @.str.5274, i64 3, i64 0 }, ptr %a637 + call void @finch_str_concat(ptr %a635, ptr %a636, ptr %a637) + store { ptr, i64, i64 } %t634, ptr %a638 + call void @finch_str_drop(ptr %a638) + %t639 = load { ptr, i64, i64 }, ptr %a635 + %t640 = call { ptr, i64, i64 } @finch.gen.op(ptr %t629, { ptr, i64, i64 } %t639) + store { ptr, i64, i64 } %t639, ptr %a641 + call void @finch_str_drop(ptr %a641) + %t642 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t640, 0 + %t643 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5275, i64 4, i64 0 }) + %t644 = insertvalue %S.gen.Val %t642, %S.ast.Type %t643, 1 + call void @finch_str_drop(ptr %a626) + call void @finch_str_drop(ptr %a607) + call void @finch.drop.S_gen_Val(ptr %a603) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t644 +endif8244: + %t645 = load ptr, ptr %a1 + %t646 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t645) + store { ptr, i64, i64 } %t646, ptr %a647 + %t648 = load ptr, ptr %a1 + %t649 = icmp eq ptr %t648, null + br i1 %t649, label %panic8245, label %ok8246 +panic8245: + call void @finch_panic(ptr @.str.5276, i64 4926, ptr @.str.5277) + unreachable +ok8246: + %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 41 + %t651 = load { ptr, i64, i64 }, ptr %t650 + %t652 = load %S.ast.Node, ptr %a2 + %t653 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t652) + store { ptr, i64, i64 } %t651, ptr %a654 + store { ptr, i64, i64 } %t653, ptr %a655 + %t656 = call i32 @finch_str_eq(ptr %a654, ptr %a655) + %t657 = icmp ne i32 %t656, 0 + store { ptr, i64, i64 } %t653, ptr %a658 + call void @finch_str_drop(ptr %a658) + br i1 %t657, label %then8247, label %endif8249 +then8247: + %t659 = load ptr, ptr %a1 + %t660 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t659, { ptr, i64, i64 } { ptr @.str.5278, i64 17, i64 0 }) + store { ptr, i64, i64 } %t660, ptr %a661 + %t662 = load ptr, ptr %a1 + %t663 = load { ptr, i64, i64 }, ptr %a647 + call void @finch.gen.store(ptr %t662, { ptr, i64, i64 } { ptr @.str.5279, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5280, i64 15, i64 0 }, { ptr, i64, i64 } %t663) + %t664 = load ptr, ptr %a1 + %t665 = load { ptr, i64, i64 }, ptr %a661 + call void @finch.gen.store(ptr %t664, { ptr, i64, i64 } { ptr @.str.5281, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5282, i64 15, i64 0 }, { ptr, i64, i64 } %t665) + %t666 = load ptr, ptr %a1 + %t667 = load { ptr, i64, i64 }, ptr %a647 + store { ptr, i64, i64 } { ptr @.str.5283, i64 34, i64 0 }, ptr %a669 + store { ptr, i64, i64 } %t667, ptr %a670 + call void @finch_str_concat(ptr %a668, ptr %a669, ptr %a670) + %t671 = load { ptr, i64, i64 }, ptr %a668 + store { ptr, i64, i64 } %t671, ptr %a673 + store { ptr, i64, i64 } { ptr @.str.5284, i64 6, i64 0 }, ptr %a674 + call void @finch_str_concat(ptr %a672, ptr %a673, ptr %a674) + store { ptr, i64, i64 } %t671, ptr %a675 + call void @finch_str_drop(ptr %a675) + %t676 = load { ptr, i64, i64 }, ptr %a672 + %t677 = load { ptr, i64, i64 }, ptr %a607 + store { ptr, i64, i64 } %t676, ptr %a679 + store { ptr, i64, i64 } %t677, ptr %a680 + call void @finch_str_concat(ptr %a678, ptr %a679, ptr %a680) + store { ptr, i64, i64 } %t676, ptr %a681 + call void @finch_str_drop(ptr %a681) + %t682 = load { ptr, i64, i64 }, ptr %a678 + store { ptr, i64, i64 } %t682, ptr %a684 + store { ptr, i64, i64 } { ptr @.str.5285, i64 6, i64 0 }, ptr %a685 + call void @finch_str_concat(ptr %a683, ptr %a684, ptr %a685) + store { ptr, i64, i64 } %t682, ptr %a686 + call void @finch_str_drop(ptr %a686) + %t687 = load { ptr, i64, i64 }, ptr %a683 + %t688 = load { ptr, i64, i64 }, ptr %a661 + store { ptr, i64, i64 } %t687, ptr %a690 + store { ptr, i64, i64 } %t688, ptr %a691 + call void @finch_str_concat(ptr %a689, ptr %a690, ptr %a691) + store { ptr, i64, i64 } %t687, ptr %a692 + call void @finch_str_drop(ptr %a692) + %t693 = load { ptr, i64, i64 }, ptr %a689 + store { ptr, i64, i64 } %t693, ptr %a695 + store { ptr, i64, i64 } { ptr @.str.5286, i64 1, i64 0 }, ptr %a696 + call void @finch_str_concat(ptr %a694, ptr %a695, ptr %a696) + store { ptr, i64, i64 } %t693, ptr %a697 + call void @finch_str_drop(ptr %a697) + %t698 = load { ptr, i64, i64 }, ptr %a694 + %t699 = call { ptr, i64, i64 } @finch.gen.op(ptr %t666, { ptr, i64, i64 } %t698) + store { ptr, i64, i64 } %t698, ptr %a700 + call void @finch_str_drop(ptr %a700) + store { ptr, i64, i64 } %t699, ptr %a701 + %t702 = load ptr, ptr %a1 + %t703 = load { ptr, i64, i64 }, ptr %a701 + store { ptr, i64, i64 } { ptr @.str.5287, i64 12, i64 0 }, ptr %a705 + store { ptr, i64, i64 } %t703, ptr %a706 + call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) + %t707 = load { ptr, i64, i64 }, ptr %a704 + store { ptr, i64, i64 } %t707, ptr %a709 + store { ptr, i64, i64 } { ptr @.str.5288, i64 3, i64 0 }, ptr %a710 + call void @finch_str_concat(ptr %a708, ptr %a709, ptr %a710) + store { ptr, i64, i64 } %t707, ptr %a711 + call void @finch_str_drop(ptr %a711) + %t712 = load { ptr, i64, i64 }, ptr %a708 + %t713 = call { ptr, i64, i64 } @finch.gen.op(ptr %t702, { ptr, i64, i64 } %t712) + store { ptr, i64, i64 } %t712, ptr %a714 + call void @finch_str_drop(ptr %a714) + %t715 = load ptr, ptr %a1 + %t716 = icmp eq ptr %t715, null + br i1 %t716, label %panic8250, label %ok8251 +panic8250: + call void @finch_panic(ptr @.str.5289, i64 4931, ptr @.str.5290) + unreachable +ok8251: + %t717 = getelementptr inbounds %S.gen.Gen, ptr %t715, i32 0, i32 42 + %t718 = load { ptr, i64, i64 }, ptr %t717 + store { ptr, i64, i64 } %t713, ptr %t717 + store { ptr, i64, i64 } %t718, ptr %a719 + call void @finch_str_drop(ptr %a719) + %t720 = load ptr, ptr %a1 + %t721 = load { ptr, i64, i64 }, ptr %a661 + %t722 = call { ptr, i64, i64 } @finch.gen.load(ptr %t720, { ptr, i64, i64 } { ptr @.str.5291, i64 17, i64 0 }, { ptr, i64, i64 } %t721) + %t723 = load ptr, ptr %a1 + %t724 = icmp eq ptr %t723, null + br i1 %t724, label %panic8252, label %ok8253 +panic8252: + call void @finch_panic(ptr @.str.5292, i64 4932, ptr @.str.5293) + unreachable +ok8253: + %t725 = getelementptr inbounds %S.gen.Gen, ptr %t723, i32 0, i32 43 + %t726 = load { ptr, i64, i64 }, ptr %t725 + store { ptr, i64, i64 } %t722, ptr %t725 + store { ptr, i64, i64 } %t726, ptr %a727 + call void @finch_str_drop(ptr %a727) + %t728 = load ptr, ptr %a1 + %t729 = load %S.gen.Val, ptr %a603 + call void @finch.gen.release(ptr %t728, %S.gen.Val %t729) + %t730 = load ptr, ptr %a1 + %t731 = load { ptr, i64, i64 }, ptr %a647 + %t732 = call { ptr, i64, i64 } @finch.gen.load(ptr %t730, { ptr, i64, i64 } { ptr @.str.5294, i64 17, i64 0 }, { ptr, i64, i64 } %t731) + %t733 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t732, 0 + %t734 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5295, i64 3, i64 0 }) + %t735 = insertvalue %S.gen.Val %t733, %S.ast.Type %t734, 1 + %t736 = insertvalue %S.gen.Val %t735, i1 true, 2 + call void @finch_str_drop(ptr %a701) + call void @finch_str_drop(ptr %a661) + call void @finch_str_drop(ptr %a647) + call void @finch_str_drop(ptr %a607) + call void @finch.drop.S_gen_Val(ptr %a603) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t736 +endif8249: + %t737 = load ptr, ptr %a1 + %t738 = load ptr, ptr %a1 + %t739 = icmp eq ptr %t738, null + br i1 %t739, label %panic8254, label %ok8255 +panic8254: + call void @finch_panic(ptr @.str.5296, i64 4936, ptr @.str.5297) + unreachable +ok8255: + %t740 = getelementptr inbounds %S.gen.Gen, ptr %t738, i32 0, i32 1 + %t741 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t742 = load i64, ptr %t741 + %t743 = load { ptr, i64, i64 }, ptr %t740 + %t744 = extractvalue { ptr, i64, i64 } %t743, 1 + %t745 = icmp uge i64 %t742, %t744 + br i1 %t745, label %range8256, label %inrange8257 +range8256: + call void @finch_panic_index(ptr @.str.5298, i64 4936, i64 %t742, i64 %t744) + unreachable +inrange8257: + %t746 = extractvalue { ptr, i64, i64 } %t743, 0 + %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i64 %t742 + %t748 = load { ptr, i64, i64 }, ptr %t747 + %t749 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t737, { ptr, i64, i64 } %t748) + store { ptr, i64, i64 } %t749, ptr %a750 + %t751 = load ptr, ptr %a1 + %t752 = load { ptr, i64, i64 }, ptr %a647 + store { ptr, i64, i64 } { ptr @.str.5299, i64 31, i64 0 }, ptr %a754 + store { ptr, i64, i64 } %t752, ptr %a755 + call void @finch_str_concat(ptr %a753, ptr %a754, ptr %a755) + %t756 = load { ptr, i64, i64 }, ptr %a753 + store { ptr, i64, i64 } %t756, ptr %a758 + store { ptr, i64, i64 } { ptr @.str.5300, i64 6, i64 0 }, ptr %a759 + call void @finch_str_concat(ptr %a757, ptr %a758, ptr %a759) + store { ptr, i64, i64 } %t756, ptr %a760 + call void @finch_str_drop(ptr %a760) + %t761 = load { ptr, i64, i64 }, ptr %a757 + %t762 = load { ptr, i64, i64 }, ptr %a607 + store { ptr, i64, i64 } %t761, ptr %a764 + store { ptr, i64, i64 } %t762, ptr %a765 + call void @finch_str_concat(ptr %a763, ptr %a764, ptr %a765) + store { ptr, i64, i64 } %t761, ptr %a766 + call void @finch_str_drop(ptr %a766) + %t767 = load { ptr, i64, i64 }, ptr %a763 + store { ptr, i64, i64 } %t767, ptr %a769 + store { ptr, i64, i64 } { ptr @.str.5301, i64 6, i64 0 }, ptr %a770 + call void @finch_str_concat(ptr %a768, ptr %a769, ptr %a770) + store { ptr, i64, i64 } %t767, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a768 + %t773 = load { ptr, i64, i64 }, ptr %a750 + store { ptr, i64, i64 } %t772, ptr %a775 + store { ptr, i64, i64 } %t773, ptr %a776 + call void @finch_str_concat(ptr %a774, ptr %a775, ptr %a776) + store { ptr, i64, i64 } %t772, ptr %a777 + call void @finch_str_drop(ptr %a777) + %t778 = load { ptr, i64, i64 }, ptr %a774 + store { ptr, i64, i64 } %t778, ptr %a780 + store { ptr, i64, i64 } { ptr @.str.5302, i64 6, i64 0 }, ptr %a781 + call void @finch_str_concat(ptr %a779, ptr %a780, ptr %a781) + store { ptr, i64, i64 } %t778, ptr %a782 + call void @finch_str_drop(ptr %a782) + %t783 = load { ptr, i64, i64 }, ptr %a779 + %t784 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t785 = load i64, ptr %t784 + call void @finch_str_from_int(ptr %a786, i64 %t785) + %t787 = load { ptr, i64, i64 }, ptr %a786 + store { ptr, i64, i64 } %t783, ptr %a789 + store { ptr, i64, i64 } %t787, ptr %a790 + call void @finch_str_concat(ptr %a788, ptr %a789, ptr %a790) + store { ptr, i64, i64 } %t783, ptr %a791 + call void @finch_str_drop(ptr %a791) + store { ptr, i64, i64 } %t787, ptr %a792 + call void @finch_str_drop(ptr %a792) + %t793 = load { ptr, i64, i64 }, ptr %a788 + store { ptr, i64, i64 } %t793, ptr %a795 + store { ptr, i64, i64 } { ptr @.str.5303, i64 1, i64 0 }, ptr %a796 + call void @finch_str_concat(ptr %a794, ptr %a795, ptr %a796) + store { ptr, i64, i64 } %t793, ptr %a797 + call void @finch_str_drop(ptr %a797) + %t798 = load { ptr, i64, i64 }, ptr %a794 + call void @finch.gen.emit(ptr %t751, { ptr, i64, i64 } %t798) + store { ptr, i64, i64 } %t798, ptr %a799 + call void @finch_str_drop(ptr %a799) + %t800 = load ptr, ptr %a1 + %t801 = load %S.gen.Val, ptr %a603 + call void @finch.gen.release(ptr %t800, %S.gen.Val %t801) + %t802 = load ptr, ptr %a1 + %t803 = load { ptr, i64, i64 }, ptr %a647 + %t804 = call { ptr, i64, i64 } @finch.gen.load(ptr %t802, { ptr, i64, i64 } { ptr @.str.5304, i64 17, i64 0 }, { ptr, i64, i64 } %t803) + %t805 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t804, 0 + %t806 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5305, i64 3, i64 0 }) + %t807 = insertvalue %S.gen.Val %t805, %S.ast.Type %t806, 1 + %t808 = insertvalue %S.gen.Val %t807, i1 true, 2 + call void @finch_str_drop(ptr %a750) + call void @finch_str_drop(ptr %a647) + call void @finch_str_drop(ptr %a607) + call void @finch.drop.S_gen_Val(ptr %a603) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t808 +endif8239: + %t809 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t809, ptr %a810 + store { ptr, i64, i64 } { ptr @.str.5306, i64 10, i64 0 }, ptr %a811 + %t812 = call i32 @finch_str_eq(ptr %a810, ptr %a811) + %t813 = icmp ne i32 %t812, 0 + br i1 %t813, label %then8258, label %endif8260 +then8258: + %t814 = load ptr, ptr %a1 + %t815 = load %S.ast.Node, ptr %a2 + %t816 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t814, %S.ast.Node %t815, i64 0, i64 2, { ptr, i64, i64 } %t816) + %t817 = load ptr, ptr %a1 + %t818 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t819 = load { ptr, i64, i64 }, ptr %t818 + %t820 = extractvalue { ptr, i64, i64 } %t819, 1 + %t821 = icmp uge i64 0, %t820 + br i1 %t821, label %range8261, label %inrange8262 +range8261: + call void @finch_panic_index(ptr @.str.5307, i64 4943, i64 0, i64 %t820) + unreachable +inrange8262: + %t822 = extractvalue { ptr, i64, i64 } %t819, 0 + %t823 = getelementptr inbounds %S.ast.Node, ptr %t822, i64 0 + %t824 = load %S.ast.Node, ptr %t823 + %t825 = call %S.gen.Val @finch.gen.strArg(ptr %t817, %S.ast.Node %t824, { ptr, i64, i64 } { ptr @.str.5308, i64 13, i64 0 }) + store %S.gen.Val %t825, ptr %a826 + %t827 = load ptr, ptr %a1 + %t828 = icmp eq ptr %t827, null + br i1 %t828, label %panic8263, label %ok8264 +panic8263: + call void @finch_panic(ptr @.str.5309, i64 4944, ptr @.str.5310) + unreachable +ok8264: + %t829 = getelementptr inbounds %S.gen.Gen, ptr %t827, i32 0, i32 11 + %t830 = getelementptr inbounds { ptr, i64, i64 }, ptr %t829, i32 0, i32 1 + %t831 = load i64, ptr %t830 + store i64 %t831, ptr %a832 + %t833 = load ptr, ptr %a1 + %t834 = load %S.gen.Val, ptr %a826 + call void @finch.gen.hold(ptr %t833, %S.gen.Val %t834) + %t835 = load ptr, ptr %a1 + %t836 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t837 = load { ptr, i64, i64 }, ptr %t836 + %t838 = extractvalue { ptr, i64, i64 } %t837, 1 + %t839 = icmp uge i64 1, %t838 + br i1 %t839, label %range8265, label %inrange8266 +range8265: + call void @finch_panic_index(ptr @.str.5311, i64 4946, i64 1, i64 %t838) + unreachable +inrange8266: + %t840 = extractvalue { ptr, i64, i64 } %t837, 0 + %t841 = getelementptr inbounds %S.ast.Node, ptr %t840, i64 1 + %t842 = load %S.ast.Node, ptr %t841 + %t843 = call %S.gen.Val @finch.gen.strArg(ptr %t835, %S.ast.Node %t842, { ptr, i64, i64 } { ptr @.str.5312, i64 8, i64 0 }) + store %S.gen.Val %t843, ptr %a844 + %t845 = load ptr, ptr %a1 + %t846 = load i64, ptr %a832 + call void @finch.gen.heldEnd(ptr %t845, i64 %t846) + %t847 = load ptr, ptr %a1 + %t848 = load %S.gen.Val, ptr %a826 + %t849 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t847, %S.gen.Val %t848) + store { ptr, i64, i64 } %t849, ptr %a850 + %t851 = load ptr, ptr %a1 + %t852 = load %S.gen.Val, ptr %a844 + %t853 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t851, %S.gen.Val %t852) + store { ptr, i64, i64 } %t853, ptr %a854 + %t855 = load ptr, ptr %a1 + %t856 = icmp eq ptr %t855, null + br i1 %t856, label %panic8267, label %ok8268 +panic8267: + call void @finch_panic(ptr @.str.5313, i64 4950, ptr @.str.5314) + unreachable +ok8268: + %t857 = getelementptr inbounds %S.gen.Gen, ptr %t855, i32 0, i32 41 + %t858 = load { ptr, i64, i64 }, ptr %t857 + %t859 = load %S.ast.Node, ptr %a2 + %t860 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t859) + store { ptr, i64, i64 } %t858, ptr %a861 + store { ptr, i64, i64 } %t860, ptr %a862 + %t863 = call i32 @finch_str_eq(ptr %a861, ptr %a862) + %t864 = icmp ne i32 %t863, 0 + store { ptr, i64, i64 } %t860, ptr %a865 + call void @finch_str_drop(ptr %a865) + br i1 %t864, label %then8269, label %endif8271 +then8269: + %t866 = load ptr, ptr %a1 + %t867 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t866, { ptr, i64, i64 } { ptr @.str.5315, i64 17, i64 0 }) + store { ptr, i64, i64 } %t867, ptr %a868 + %t869 = load ptr, ptr %a1 + %t870 = load { ptr, i64, i64 }, ptr %a868 + call void @finch.gen.store(ptr %t869, { ptr, i64, i64 } { ptr @.str.5316, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5317, i64 15, i64 0 }, { ptr, i64, i64 } %t870) + %t871 = load ptr, ptr %a1 + %t872 = load { ptr, i64, i64 }, ptr %a850 + store { ptr, i64, i64 } { ptr @.str.5318, i64 35, i64 0 }, ptr %a874 + store { ptr, i64, i64 } %t872, ptr %a875 + call void @finch_str_concat(ptr %a873, ptr %a874, ptr %a875) + %t876 = load { ptr, i64, i64 }, ptr %a873 + store { ptr, i64, i64 } %t876, ptr %a878 + store { ptr, i64, i64 } { ptr @.str.5319, i64 6, i64 0 }, ptr %a879 + call void @finch_str_concat(ptr %a877, ptr %a878, ptr %a879) + store { ptr, i64, i64 } %t876, ptr %a880 + call void @finch_str_drop(ptr %a880) + %t881 = load { ptr, i64, i64 }, ptr %a877 + %t882 = load { ptr, i64, i64 }, ptr %a854 + store { ptr, i64, i64 } %t881, ptr %a884 + store { ptr, i64, i64 } %t882, ptr %a885 + call void @finch_str_concat(ptr %a883, ptr %a884, ptr %a885) + store { ptr, i64, i64 } %t881, ptr %a886 + call void @finch_str_drop(ptr %a886) + %t887 = load { ptr, i64, i64 }, ptr %a883 + store { ptr, i64, i64 } %t887, ptr %a889 + store { ptr, i64, i64 } { ptr @.str.5320, i64 6, i64 0 }, ptr %a890 + call void @finch_str_concat(ptr %a888, ptr %a889, ptr %a890) + store { ptr, i64, i64 } %t887, ptr %a891 + call void @finch_str_drop(ptr %a891) + %t892 = load { ptr, i64, i64 }, ptr %a888 + %t893 = load { ptr, i64, i64 }, ptr %a868 + store { ptr, i64, i64 } %t892, ptr %a895 + store { ptr, i64, i64 } %t893, ptr %a896 + call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) + store { ptr, i64, i64 } %t892, ptr %a897 + call void @finch_str_drop(ptr %a897) + %t898 = load { ptr, i64, i64 }, ptr %a894 + store { ptr, i64, i64 } %t898, ptr %a900 + store { ptr, i64, i64 } { ptr @.str.5321, i64 1, i64 0 }, ptr %a901 + call void @finch_str_concat(ptr %a899, ptr %a900, ptr %a901) + store { ptr, i64, i64 } %t898, ptr %a902 + call void @finch_str_drop(ptr %a902) + %t903 = load { ptr, i64, i64 }, ptr %a899 + %t904 = call { ptr, i64, i64 } @finch.gen.op(ptr %t871, { ptr, i64, i64 } %t903) + store { ptr, i64, i64 } %t903, ptr %a905 + call void @finch_str_drop(ptr %a905) + store { ptr, i64, i64 } %t904, ptr %a906 + %t907 = load ptr, ptr %a1 + %t908 = load { ptr, i64, i64 }, ptr %a906 + store { ptr, i64, i64 } { ptr @.str.5322, i64 12, i64 0 }, ptr %a910 + store { ptr, i64, i64 } %t908, ptr %a911 + call void @finch_str_concat(ptr %a909, ptr %a910, ptr %a911) + %t912 = load { ptr, i64, i64 }, ptr %a909 + store { ptr, i64, i64 } %t912, ptr %a914 + store { ptr, i64, i64 } { ptr @.str.5323, i64 3, i64 0 }, ptr %a915 + call void @finch_str_concat(ptr %a913, ptr %a914, ptr %a915) + store { ptr, i64, i64 } %t912, ptr %a916 + call void @finch_str_drop(ptr %a916) + %t917 = load { ptr, i64, i64 }, ptr %a913 + %t918 = call { ptr, i64, i64 } @finch.gen.op(ptr %t907, { ptr, i64, i64 } %t917) + store { ptr, i64, i64 } %t917, ptr %a919 + call void @finch_str_drop(ptr %a919) + %t920 = load ptr, ptr %a1 + %t921 = icmp eq ptr %t920, null + br i1 %t921, label %panic8272, label %ok8273 +panic8272: + call void @finch_panic(ptr @.str.5324, i64 4954, ptr @.str.5325) + unreachable +ok8273: + %t922 = getelementptr inbounds %S.gen.Gen, ptr %t920, i32 0, i32 42 + %t923 = load { ptr, i64, i64 }, ptr %t922 + store { ptr, i64, i64 } %t918, ptr %t922 + store { ptr, i64, i64 } %t923, ptr %a924 + call void @finch_str_drop(ptr %a924) + %t925 = load ptr, ptr %a1 + %t926 = load { ptr, i64, i64 }, ptr %a868 + %t927 = call { ptr, i64, i64 } @finch.gen.load(ptr %t925, { ptr, i64, i64 } { ptr @.str.5326, i64 17, i64 0 }, { ptr, i64, i64 } %t926) + %t928 = load ptr, ptr %a1 + %t929 = icmp eq ptr %t928, null + br i1 %t929, label %panic8274, label %ok8275 +panic8274: + call void @finch_panic(ptr @.str.5327, i64 4955, ptr @.str.5328) + unreachable +ok8275: + %t930 = getelementptr inbounds %S.gen.Gen, ptr %t928, i32 0, i32 43 + %t931 = load { ptr, i64, i64 }, ptr %t930 + store { ptr, i64, i64 } %t927, ptr %t930 + store { ptr, i64, i64 } %t931, ptr %a932 + call void @finch_str_drop(ptr %a932) + %t933 = load ptr, ptr %a1 + %t934 = load %S.gen.Val, ptr %a826 + call void @finch.gen.release(ptr %t933, %S.gen.Val %t934) + %t935 = load ptr, ptr %a1 + %t936 = load %S.gen.Val, ptr %a844 + call void @finch.gen.release(ptr %t935, %S.gen.Val %t936) + %t937 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5329, i64 4, i64 0 }) + %t938 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t937, 1 + call void @finch_str_drop(ptr %a906) + call void @finch_str_drop(ptr %a868) + call void @finch_str_drop(ptr %a854) + call void @finch_str_drop(ptr %a850) + call void @finch.drop.S_gen_Val(ptr %a844) + call void @finch.drop.S_gen_Val(ptr %a826) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t938 +endif8271: + %t939 = load ptr, ptr %a1 + %t940 = load { ptr, i64, i64 }, ptr %a850 + store { ptr, i64, i64 } { ptr @.str.5330, i64 31, i64 0 }, ptr %a942 + store { ptr, i64, i64 } %t940, ptr %a943 + call void @finch_str_concat(ptr %a941, ptr %a942, ptr %a943) + %t944 = load { ptr, i64, i64 }, ptr %a941 + store { ptr, i64, i64 } %t944, ptr %a946 + store { ptr, i64, i64 } { ptr @.str.5331, i64 6, i64 0 }, ptr %a947 + call void @finch_str_concat(ptr %a945, ptr %a946, ptr %a947) + store { ptr, i64, i64 } %t944, ptr %a948 + call void @finch_str_drop(ptr %a948) + %t949 = load { ptr, i64, i64 }, ptr %a945 + %t950 = load { ptr, i64, i64 }, ptr %a854 + store { ptr, i64, i64 } %t949, ptr %a952 + store { ptr, i64, i64 } %t950, ptr %a953 + call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) + store { ptr, i64, i64 } %t949, ptr %a954 + call void @finch_str_drop(ptr %a954) + %t955 = load { ptr, i64, i64 }, ptr %a951 + store { ptr, i64, i64 } %t955, ptr %a957 + store { ptr, i64, i64 } { ptr @.str.5332, i64 1, i64 0 }, ptr %a958 + call void @finch_str_concat(ptr %a956, ptr %a957, ptr %a958) + store { ptr, i64, i64 } %t955, ptr %a959 + call void @finch_str_drop(ptr %a959) + %t960 = load { ptr, i64, i64 }, ptr %a956 + %t961 = call { ptr, i64, i64 } @finch.gen.op(ptr %t939, { ptr, i64, i64 } %t960) + store { ptr, i64, i64 } %t960, ptr %a962 + call void @finch_str_drop(ptr %a962) + store { ptr, i64, i64 } %t961, ptr %a963 + %t964 = load ptr, ptr %a1 + %t965 = load %S.gen.Val, ptr %a826 + call void @finch.gen.release(ptr %t964, %S.gen.Val %t965) + %t966 = load ptr, ptr %a1 + %t967 = load %S.gen.Val, ptr %a844 + call void @finch.gen.release(ptr %t966, %S.gen.Val %t967) + %t968 = load ptr, ptr %a1 + %t969 = load { ptr, i64, i64 }, ptr %a963 + store { ptr, i64, i64 } { ptr @.str.5333, i64 12, i64 0 }, ptr %a971 + store { ptr, i64, i64 } %t969, ptr %a972 + call void @finch_str_concat(ptr %a970, ptr %a971, ptr %a972) + %t973 = load { ptr, i64, i64 }, ptr %a970 + store { ptr, i64, i64 } %t973, ptr %a975 + store { ptr, i64, i64 } { ptr @.str.5334, i64 3, i64 0 }, ptr %a976 + call void @finch_str_concat(ptr %a974, ptr %a975, ptr %a976) + store { ptr, i64, i64 } %t973, ptr %a977 + call void @finch_str_drop(ptr %a977) + %t978 = load { ptr, i64, i64 }, ptr %a974 + %t979 = call { ptr, i64, i64 } @finch.gen.op(ptr %t968, { ptr, i64, i64 } %t978) + store { ptr, i64, i64 } %t978, ptr %a980 + call void @finch_str_drop(ptr %a980) + %t981 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t979, 0 + %t982 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5335, i64 4, i64 0 }) + %t983 = insertvalue %S.gen.Val %t981, %S.ast.Type %t982, 1 + call void @finch_str_drop(ptr %a963) + call void @finch_str_drop(ptr %a854) + call void @finch_str_drop(ptr %a850) + call void @finch.drop.S_gen_Val(ptr %a844) + call void @finch.drop.S_gen_Val(ptr %a826) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t983 +endif8260: + %t984 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t984, ptr %a985 + store { ptr, i64, i64 } { ptr @.str.5336, i64 11, i64 0 }, ptr %a986 + %t987 = call i32 @finch_str_eq(ptr %a985, ptr %a986) + %t988 = icmp ne i32 %t987, 0 + br i1 %t988, label %then8276, label %endif8278 +then8276: + %t989 = load ptr, ptr %a1 + %t990 = load %S.ast.Node, ptr %a2 + %t991 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t989, %S.ast.Node %t990, i64 0, i64 1, { ptr, i64, i64 } %t991) + %t992 = load ptr, ptr %a1 + %t993 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t994 = load { ptr, i64, i64 }, ptr %t993 + %t995 = extractvalue { ptr, i64, i64 } %t994, 1 + %t996 = icmp uge i64 0, %t995 + br i1 %t996, label %range8279, label %inrange8280 +range8279: + call void @finch_panic_index(ptr @.str.5337, i64 4967, i64 0, i64 %t995) + unreachable +inrange8280: + %t997 = extractvalue { ptr, i64, i64 } %t994, 0 + %t998 = getelementptr inbounds %S.ast.Node, ptr %t997, i64 0 + %t999 = load %S.ast.Node, ptr %t998 + %t1000 = call %S.gen.Val @finch.gen.strArg(ptr %t992, %S.ast.Node %t999, { ptr, i64, i64 } { ptr @.str.5338, i64 13, i64 0 }) + store %S.gen.Val %t1000, ptr %a1001 + %t1002 = load ptr, ptr %a1 + %t1003 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1002) + store { ptr, i64, i64 } %t1003, ptr %a1004 + %t1005 = load ptr, ptr %a1 + %t1006 = load { ptr, i64, i64 }, ptr %a1004 + store { ptr, i64, i64 } { ptr @.str.5339, i64 30, i64 0 }, ptr %a1008 + store { ptr, i64, i64 } %t1006, ptr %a1009 + call void @finch_str_concat(ptr %a1007, ptr %a1008, ptr %a1009) + %t1010 = load { ptr, i64, i64 }, ptr %a1007 + store { ptr, i64, i64 } %t1010, ptr %a1012 + store { ptr, i64, i64 } { ptr @.str.5340, i64 6, i64 0 }, ptr %a1013 + call void @finch_str_concat(ptr %a1011, ptr %a1012, ptr %a1013) + store { ptr, i64, i64 } %t1010, ptr %a1014 + call void @finch_str_drop(ptr %a1014) + %t1015 = load { ptr, i64, i64 }, ptr %a1011 + %t1016 = load ptr, ptr %a1 + %t1017 = load %S.gen.Val, ptr %a1001 + %t1018 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1016, %S.gen.Val %t1017) + store { ptr, i64, i64 } %t1015, ptr %a1020 + store { ptr, i64, i64 } %t1018, ptr %a1021 + call void @finch_str_concat(ptr %a1019, ptr %a1020, ptr %a1021) + store { ptr, i64, i64 } %t1015, ptr %a1022 + call void @finch_str_drop(ptr %a1022) + store { ptr, i64, i64 } %t1018, ptr %a1023 + call void @finch_str_drop(ptr %a1023) + %t1024 = load { ptr, i64, i64 }, ptr %a1019 + store { ptr, i64, i64 } %t1024, ptr %a1026 + store { ptr, i64, i64 } { ptr @.str.5341, i64 1, i64 0 }, ptr %a1027 + call void @finch_str_concat(ptr %a1025, ptr %a1026, ptr %a1027) + store { ptr, i64, i64 } %t1024, ptr %a1028 + call void @finch_str_drop(ptr %a1028) + %t1029 = load { ptr, i64, i64 }, ptr %a1025 + call void @finch.gen.emit(ptr %t1005, { ptr, i64, i64 } %t1029) + store { ptr, i64, i64 } %t1029, ptr %a1030 + call void @finch_str_drop(ptr %a1030) + %t1031 = load ptr, ptr %a1 + %t1032 = icmp eq ptr %t1031, null + br i1 %t1032, label %panic8281, label %ok8282 +panic8281: + call void @finch_panic(ptr @.str.5342, i64 4970, ptr @.str.5343) + unreachable +ok8282: + %t1033 = getelementptr inbounds %S.gen.Gen, ptr %t1031, i32 0, i32 41 + %t1034 = load { ptr, i64, i64 }, ptr %t1033 + %t1035 = load %S.ast.Node, ptr %a2 + %t1036 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t1035) + store { ptr, i64, i64 } %t1034, ptr %a1037 + store { ptr, i64, i64 } %t1036, ptr %a1038 + %t1039 = call i32 @finch_str_eq(ptr %a1037, ptr %a1038) + %t1040 = icmp ne i32 %t1039, 0 + store { ptr, i64, i64 } %t1036, ptr %a1041 + call void @finch_str_drop(ptr %a1041) + br i1 %t1040, label %then8283, label %endif8285 +then8283: + %t1042 = load ptr, ptr %a1 + %t1043 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1042, { ptr, i64, i64 } { ptr @.str.5344, i64 17, i64 0 }) + store { ptr, i64, i64 } %t1043, ptr %a1044 + %t1045 = load ptr, ptr %a1 + %t1046 = load { ptr, i64, i64 }, ptr %a1044 + call void @finch.gen.store(ptr %t1045, { ptr, i64, i64 } { ptr @.str.5345, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5346, i64 15, i64 0 }, { ptr, i64, i64 } %t1046) + %t1047 = load ptr, ptr %a1 + %t1048 = load { ptr, i64, i64 }, ptr %a1004 + store { ptr, i64, i64 } { ptr @.str.5347, i64 36, i64 0 }, ptr %a1050 + store { ptr, i64, i64 } %t1048, ptr %a1051 + call void @finch_str_concat(ptr %a1049, ptr %a1050, ptr %a1051) + %t1052 = load { ptr, i64, i64 }, ptr %a1049 + store { ptr, i64, i64 } %t1052, ptr %a1054 + store { ptr, i64, i64 } { ptr @.str.5348, i64 6, i64 0 }, ptr %a1055 + call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) + store { ptr, i64, i64 } %t1052, ptr %a1056 + call void @finch_str_drop(ptr %a1056) + %t1057 = load { ptr, i64, i64 }, ptr %a1053 + %t1058 = load { ptr, i64, i64 }, ptr %a1044 + store { ptr, i64, i64 } %t1057, ptr %a1060 + store { ptr, i64, i64 } %t1058, ptr %a1061 + call void @finch_str_concat(ptr %a1059, ptr %a1060, ptr %a1061) + store { ptr, i64, i64 } %t1057, ptr %a1062 + call void @finch_str_drop(ptr %a1062) + %t1063 = load { ptr, i64, i64 }, ptr %a1059 + store { ptr, i64, i64 } %t1063, ptr %a1065 + store { ptr, i64, i64 } { ptr @.str.5349, i64 1, i64 0 }, ptr %a1066 + call void @finch_str_concat(ptr %a1064, ptr %a1065, ptr %a1066) + store { ptr, i64, i64 } %t1063, ptr %a1067 + call void @finch_str_drop(ptr %a1067) + %t1068 = load { ptr, i64, i64 }, ptr %a1064 + %t1069 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1047, { ptr, i64, i64 } %t1068) + store { ptr, i64, i64 } %t1068, ptr %a1070 + call void @finch_str_drop(ptr %a1070) + store { ptr, i64, i64 } %t1069, ptr %a1071 + %t1072 = load ptr, ptr %a1 + %t1073 = load { ptr, i64, i64 }, ptr %a1071 + store { ptr, i64, i64 } { ptr @.str.5350, i64 12, i64 0 }, ptr %a1075 + store { ptr, i64, i64 } %t1073, ptr %a1076 + call void @finch_str_concat(ptr %a1074, ptr %a1075, ptr %a1076) + %t1077 = load { ptr, i64, i64 }, ptr %a1074 + store { ptr, i64, i64 } %t1077, ptr %a1079 + store { ptr, i64, i64 } { ptr @.str.5351, i64 3, i64 0 }, ptr %a1080 + call void @finch_str_concat(ptr %a1078, ptr %a1079, ptr %a1080) + store { ptr, i64, i64 } %t1077, ptr %a1081 + call void @finch_str_drop(ptr %a1081) + %t1082 = load { ptr, i64, i64 }, ptr %a1078 + %t1083 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1072, { ptr, i64, i64 } %t1082) + store { ptr, i64, i64 } %t1082, ptr %a1084 + call void @finch_str_drop(ptr %a1084) + %t1085 = load ptr, ptr %a1 + %t1086 = icmp eq ptr %t1085, null + br i1 %t1086, label %panic8286, label %ok8287 +panic8286: + call void @finch_panic(ptr @.str.5352, i64 4974, ptr @.str.5353) + unreachable +ok8287: + %t1087 = getelementptr inbounds %S.gen.Gen, ptr %t1085, i32 0, i32 42 + %t1088 = load { ptr, i64, i64 }, ptr %t1087 + store { ptr, i64, i64 } %t1083, ptr %t1087 + store { ptr, i64, i64 } %t1088, ptr %a1089 + call void @finch_str_drop(ptr %a1089) + %t1090 = load ptr, ptr %a1 + %t1091 = load { ptr, i64, i64 }, ptr %a1044 + %t1092 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1090, { ptr, i64, i64 } { ptr @.str.5354, i64 17, i64 0 }, { ptr, i64, i64 } %t1091) + %t1093 = load ptr, ptr %a1 + %t1094 = icmp eq ptr %t1093, null + br i1 %t1094, label %panic8288, label %ok8289 +panic8288: + call void @finch_panic(ptr @.str.5355, i64 4975, ptr @.str.5356) + unreachable +ok8289: + %t1095 = getelementptr inbounds %S.gen.Gen, ptr %t1093, i32 0, i32 43 + %t1096 = load { ptr, i64, i64 }, ptr %t1095 + store { ptr, i64, i64 } %t1092, ptr %t1095 + store { ptr, i64, i64 } %t1096, ptr %a1097 + call void @finch_str_drop(ptr %a1097) + %t1098 = load ptr, ptr %a1 + %t1099 = load { ptr, i64, i64 }, ptr %a1004 + %t1100 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5357, i64 3, i64 0 }) + call void @finch.gen.dropAt(ptr %t1098, { ptr, i64, i64 } %t1099, %S.ast.Type %t1100) + store %S.ast.Type %t1100, ptr %a1101 + call void @finch.drop.S_ast_Type(ptr %a1101) + %t1102 = load ptr, ptr %a1 + %t1103 = load %S.gen.Val, ptr %a1001 + call void @finch.gen.release(ptr %t1102, %S.gen.Val %t1103) + %t1104 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5358, i64 4, i64 0 }) + %t1105 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1104, 1 + call void @finch_str_drop(ptr %a1071) + call void @finch_str_drop(ptr %a1044) + call void @finch_str_drop(ptr %a1004) + call void @finch.drop.S_gen_Val(ptr %a1001) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1105 +endif8285: + %t1106 = load ptr, ptr %a1 + %t1107 = load { ptr, i64, i64 }, ptr %a1004 + store { ptr, i64, i64 } { ptr @.str.5359, i64 32, i64 0 }, ptr %a1109 + store { ptr, i64, i64 } %t1107, ptr %a1110 + call void @finch_str_concat(ptr %a1108, ptr %a1109, ptr %a1110) + %t1111 = load { ptr, i64, i64 }, ptr %a1108 + store { ptr, i64, i64 } %t1111, ptr %a1113 + store { ptr, i64, i64 } { ptr @.str.5360, i64 1, i64 0 }, ptr %a1114 + call void @finch_str_concat(ptr %a1112, ptr %a1113, ptr %a1114) + store { ptr, i64, i64 } %t1111, ptr %a1115 + call void @finch_str_drop(ptr %a1115) + %t1116 = load { ptr, i64, i64 }, ptr %a1112 + %t1117 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1106, { ptr, i64, i64 } %t1116) + store { ptr, i64, i64 } %t1116, ptr %a1118 + call void @finch_str_drop(ptr %a1118) + store { ptr, i64, i64 } %t1117, ptr %a1119 + %t1120 = load ptr, ptr %a1 + %t1121 = load { ptr, i64, i64 }, ptr %a1004 + %t1122 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5361, i64 3, i64 0 }) + call void @finch.gen.dropAt(ptr %t1120, { ptr, i64, i64 } %t1121, %S.ast.Type %t1122) + store %S.ast.Type %t1122, ptr %a1123 + call void @finch.drop.S_ast_Type(ptr %a1123) + %t1124 = load ptr, ptr %a1 + %t1125 = load %S.gen.Val, ptr %a1001 + call void @finch.gen.release(ptr %t1124, %S.gen.Val %t1125) + %t1126 = load ptr, ptr %a1 + %t1127 = load { ptr, i64, i64 }, ptr %a1119 + store { ptr, i64, i64 } { ptr @.str.5362, i64 12, i64 0 }, ptr %a1129 + store { ptr, i64, i64 } %t1127, ptr %a1130 + call void @finch_str_concat(ptr %a1128, ptr %a1129, ptr %a1130) + %t1131 = load { ptr, i64, i64 }, ptr %a1128 + store { ptr, i64, i64 } %t1131, ptr %a1133 + store { ptr, i64, i64 } { ptr @.str.5363, i64 3, i64 0 }, ptr %a1134 + call void @finch_str_concat(ptr %a1132, ptr %a1133, ptr %a1134) + store { ptr, i64, i64 } %t1131, ptr %a1135 + call void @finch_str_drop(ptr %a1135) + %t1136 = load { ptr, i64, i64 }, ptr %a1132 + %t1137 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1126, { ptr, i64, i64 } %t1136) + store { ptr, i64, i64 } %t1136, ptr %a1138 + call void @finch_str_drop(ptr %a1138) + %t1139 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1137, 0 + %t1140 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5364, i64 4, i64 0 }) + %t1141 = insertvalue %S.gen.Val %t1139, %S.ast.Type %t1140, 1 + call void @finch_str_drop(ptr %a1119) + call void @finch_str_drop(ptr %a1004) + call void @finch.drop.S_gen_Val(ptr %a1001) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1141 +endif8278: + %t1142 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1142, ptr %a1143 + store { ptr, i64, i64 } { ptr @.str.5365, i64 5, i64 0 }, ptr %a1144 + %t1145 = call i32 @finch_str_eq(ptr %a1143, ptr %a1144) + %t1146 = icmp ne i32 %t1145, 0 + br i1 %t1146, label %then8290, label %endif8292 +then8290: + %t1147 = load ptr, ptr %a1 + %t1148 = load %S.ast.Node, ptr %a2 + %t1149 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1147, %S.ast.Node %t1148, i64 0, i64 1, { ptr, i64, i64 } %t1149) + %t1150 = load ptr, ptr %a1 + %t1151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1152 = load { ptr, i64, i64 }, ptr %t1151 + %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 + %t1154 = icmp uge i64 0, %t1153 + br i1 %t1154, label %range8293, label %inrange8294 +range8293: + call void @finch_panic_index(ptr @.str.5366, i64 4987, i64 0, i64 %t1153) + unreachable +inrange8294: + %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 + %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 0 + %t1157 = load %S.ast.Node, ptr %t1156 + %t1158 = call %S.gen.Val @finch.gen.strArg(ptr %t1150, %S.ast.Node %t1157, { ptr, i64, i64 } { ptr @.str.5367, i64 11, i64 0 }) + store %S.gen.Val %t1158, ptr %a1159 + %t1160 = load ptr, ptr %a1 + %t1161 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1160) + store { ptr, i64, i64 } %t1161, ptr %a1162 + %t1163 = load ptr, ptr %a1 + %t1164 = load { ptr, i64, i64 }, ptr %a1162 + store { ptr, i64, i64 } { ptr @.str.5368, i64 30, i64 0 }, ptr %a1166 + store { ptr, i64, i64 } %t1164, ptr %a1167 + call void @finch_str_concat(ptr %a1165, ptr %a1166, ptr %a1167) + %t1168 = load { ptr, i64, i64 }, ptr %a1165 + store { ptr, i64, i64 } %t1168, ptr %a1170 + store { ptr, i64, i64 } { ptr @.str.5369, i64 6, i64 0 }, ptr %a1171 + call void @finch_str_concat(ptr %a1169, ptr %a1170, ptr %a1171) + store { ptr, i64, i64 } %t1168, ptr %a1172 + call void @finch_str_drop(ptr %a1172) + %t1173 = load { ptr, i64, i64 }, ptr %a1169 + %t1174 = load ptr, ptr %a1 + %t1175 = load %S.gen.Val, ptr %a1159 + %t1176 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1174, %S.gen.Val %t1175) + store { ptr, i64, i64 } %t1173, ptr %a1178 + store { ptr, i64, i64 } %t1176, ptr %a1179 + call void @finch_str_concat(ptr %a1177, ptr %a1178, ptr %a1179) + store { ptr, i64, i64 } %t1173, ptr %a1180 + call void @finch_str_drop(ptr %a1180) + store { ptr, i64, i64 } %t1176, ptr %a1181 + call void @finch_str_drop(ptr %a1181) + %t1182 = load { ptr, i64, i64 }, ptr %a1177 + store { ptr, i64, i64 } %t1182, ptr %a1184 + store { ptr, i64, i64 } { ptr @.str.5370, i64 1, i64 0 }, ptr %a1185 + call void @finch_str_concat(ptr %a1183, ptr %a1184, ptr %a1185) + store { ptr, i64, i64 } %t1182, ptr %a1186 + call void @finch_str_drop(ptr %a1186) + %t1187 = load { ptr, i64, i64 }, ptr %a1183 + call void @finch.gen.emit(ptr %t1163, { ptr, i64, i64 } %t1187) + store { ptr, i64, i64 } %t1187, ptr %a1188 + call void @finch_str_drop(ptr %a1188) + %t1189 = load ptr, ptr %a1 + %t1190 = load { ptr, i64, i64 }, ptr %a1162 + store { ptr, i64, i64 } { ptr @.str.5371, i64 26, i64 0 }, ptr %a1192 + store { ptr, i64, i64 } %t1190, ptr %a1193 + call void @finch_str_concat(ptr %a1191, ptr %a1192, ptr %a1193) + %t1194 = load { ptr, i64, i64 }, ptr %a1191 + store { ptr, i64, i64 } %t1194, ptr %a1196 + store { ptr, i64, i64 } { ptr @.str.5372, i64 1, i64 0 }, ptr %a1197 + call void @finch_str_concat(ptr %a1195, ptr %a1196, ptr %a1197) + store { ptr, i64, i64 } %t1194, ptr %a1198 + call void @finch_str_drop(ptr %a1198) + %t1199 = load { ptr, i64, i64 }, ptr %a1195 + %t1200 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1189, { ptr, i64, i64 } %t1199) + store { ptr, i64, i64 } %t1199, ptr %a1201 + call void @finch_str_drop(ptr %a1201) + store { ptr, i64, i64 } %t1200, ptr %a1202 + %t1203 = load ptr, ptr %a1 + %t1204 = load { ptr, i64, i64 }, ptr %a1162 + %t1205 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5373, i64 3, i64 0 }) + call void @finch.gen.dropAt(ptr %t1203, { ptr, i64, i64 } %t1204, %S.ast.Type %t1205) + store %S.ast.Type %t1205, ptr %a1206 + call void @finch.drop.S_ast_Type(ptr %a1206) + %t1207 = load ptr, ptr %a1 + %t1208 = load %S.gen.Val, ptr %a1159 + call void @finch.gen.release(ptr %t1207, %S.gen.Val %t1208) + %t1209 = load { ptr, i64, i64 }, ptr %a1202 + store { ptr, i64, i64 } %t1209, ptr %a1210 + call void @finch_str_copy(ptr %a1211, ptr %a1210) + %t1212 = load { ptr, i64, i64 }, ptr %a1211 + %t1213 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1212, 0 + %t1214 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5374, i64 3, i64 0 }) + %t1215 = insertvalue %S.gen.Val %t1213, %S.ast.Type %t1214, 1 + call void @finch_str_drop(ptr %a1202) + call void @finch_str_drop(ptr %a1162) + call void @finch.drop.S_gen_Val(ptr %a1159) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1215 +endif8292: + %t1216 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1216, ptr %a1217 + store { ptr, i64, i64 } { ptr @.str.5375, i64 4, i64 0 }, ptr %a1218 + %t1219 = call i32 @finch_str_eq(ptr %a1217, ptr %a1218) + %t1220 = icmp ne i32 %t1219, 0 + br i1 %t1220, label %then8295, label %endif8297 +then8295: + %t1221 = load ptr, ptr %a1 + %t1222 = load %S.ast.Node, ptr %a2 + %t1223 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1221, %S.ast.Node %t1222, i64 0, i64 1, { ptr, i64, i64 } %t1223) + %t1224 = load ptr, ptr %a1 + %t1225 = load ptr, ptr %a1 + %t1226 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1227 = load { ptr, i64, i64 }, ptr %t1226 + %t1228 = extractvalue { ptr, i64, i64 } %t1227, 1 + %t1229 = icmp uge i64 0, %t1228 + br i1 %t1229, label %range8298, label %inrange8299 +range8298: + call void @finch_panic_index(ptr @.str.5376, i64 4997, i64 0, i64 %t1228) + unreachable +inrange8299: + %t1230 = extractvalue { ptr, i64, i64 } %t1227, 0 + %t1231 = getelementptr inbounds %S.ast.Node, ptr %t1230, i64 0 + %t1232 = load %S.ast.Node, ptr %t1231 + %t1233 = call %S.gen.Val @finch.gen.expr(ptr %t1225, %S.ast.Node %t1232) + %t1234 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5377, i64 3, i64 0 }) + %t1235 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1236 = load { ptr, i64, i64 }, ptr %t1235 + %t1237 = extractvalue { ptr, i64, i64 } %t1236, 1 + %t1238 = icmp uge i64 0, %t1237 + br i1 %t1238, label %range8300, label %inrange8301 +range8300: + call void @finch_panic_index(ptr @.str.5378, i64 4997, i64 0, i64 %t1237) + unreachable +inrange8301: + %t1239 = extractvalue { ptr, i64, i64 } %t1236, 0 + %t1240 = getelementptr inbounds %S.ast.Node, ptr %t1239, i64 0 + %t1241 = load %S.ast.Node, ptr %t1240 + %t1242 = call %S.gen.Val @finch.gen.coerce(ptr %t1224, %S.gen.Val %t1233, %S.ast.Type %t1234, %S.ast.Node %t1241, { ptr, i64, i64 } { ptr @.str.5379, i64 13, i64 0 }) + store %S.gen.Val %t1233, ptr %a1243 + call void @finch.drop.S_gen_Val(ptr %a1243) + store %S.ast.Type %t1234, ptr %a1244 + call void @finch.drop.S_ast_Type(ptr %a1244) + store %S.gen.Val %t1242, ptr %a1245 + %t1246 = load ptr, ptr %a1 + %t1247 = getelementptr inbounds %S.gen.Val, ptr %a1245, i32 0, i32 0 + %t1248 = load { ptr, i64, i64 }, ptr %t1247 + store { ptr, i64, i64 } { ptr @.str.5380, i64 10, i64 0 }, ptr %a1250 + store { ptr, i64, i64 } %t1248, ptr %a1251 + call void @finch_str_concat(ptr %a1249, ptr %a1250, ptr %a1251) + %t1252 = load { ptr, i64, i64 }, ptr %a1249 + store { ptr, i64, i64 } %t1252, ptr %a1254 + store { ptr, i64, i64 } { ptr @.str.5381, i64 7, i64 0 }, ptr %a1255 + call void @finch_str_concat(ptr %a1253, ptr %a1254, ptr %a1255) + store { ptr, i64, i64 } %t1252, ptr %a1256 + call void @finch_str_drop(ptr %a1256) + %t1257 = load { ptr, i64, i64 }, ptr %a1253 + %t1258 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1246, { ptr, i64, i64 } %t1257) + store { ptr, i64, i64 } %t1257, ptr %a1259 + call void @finch_str_drop(ptr %a1259) + store { ptr, i64, i64 } %t1258, ptr %a1260 + %t1261 = load ptr, ptr %a1 + %t1262 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1261, { ptr, i64, i64 } { ptr @.str.5382, i64 26, i64 0 }) + store { ptr, i64, i64 } %t1262, ptr %a1263 + %t1264 = load ptr, ptr %a1 + %t1265 = load { ptr, i64, i64 }, ptr %a1260 + store { ptr, i64, i64 } { ptr @.str.5383, i64 20, i64 0 }, ptr %a1267 + store { ptr, i64, i64 } %t1265, ptr %a1268 + call void @finch_str_concat(ptr %a1266, ptr %a1267, ptr %a1268) + %t1269 = load { ptr, i64, i64 }, ptr %a1266 + store { ptr, i64, i64 } %t1269, ptr %a1271 + store { ptr, i64, i64 } { ptr @.str.5384, i64 1, i64 0 }, ptr %a1272 + call void @finch_str_concat(ptr %a1270, ptr %a1271, ptr %a1272) + store { ptr, i64, i64 } %t1269, ptr %a1273 + call void @finch_str_drop(ptr %a1273) + %t1274 = load { ptr, i64, i64 }, ptr %a1270 + call void @finch.gen.emit(ptr %t1264, { ptr, i64, i64 } %t1274) + store { ptr, i64, i64 } %t1274, ptr %a1275 + call void @finch_str_drop(ptr %a1275) + %t1276 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5385, i64 4, i64 0 }) + %t1277 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1276, 1 + call void @finch_str_drop(ptr %a1263) + call void @finch_str_drop(ptr %a1260) + call void @finch.drop.S_gen_Val(ptr %a1245) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1277 +endif8297: + %t1278 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1278, ptr %a1279 + store { ptr, i64, i64 } { ptr @.str.5386, i64 5, i64 0 }, ptr %a1280 + %t1281 = call i32 @finch_str_eq(ptr %a1279, ptr %a1280) + %t1282 = icmp ne i32 %t1281, 0 + br i1 %t1282, label %then8302, label %endif8304 +then8302: + %t1283 = load ptr, ptr %a1 + %t1284 = call %S.gen.Val @finch.gen.strConst(ptr %t1283, { ptr, i64, i64 } { ptr @.str.5387, i64 0, i64 0 }) + store %S.gen.Val %t1284, ptr %a1285 + %t1286 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1286, i32 0, i32 1 + %t1288 = load i64, ptr %t1287 + %t1289 = icmp sgt i64 %t1288, 0 + br i1 %t1289, label %then8305, label %endif8307 +then8305: + %t1290 = load ptr, ptr %a1 + %t1291 = load %S.ast.Node, ptr %a2 + %t1292 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1290, %S.ast.Node %t1291, i64 0, i64 1, { ptr, i64, i64 } %t1292) + %t1293 = load ptr, ptr %a1 + %t1294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1295 = load { ptr, i64, i64 }, ptr %t1294 + %t1296 = extractvalue { ptr, i64, i64 } %t1295, 1 + %t1297 = icmp uge i64 0, %t1296 + br i1 %t1297, label %range8308, label %inrange8309 +range8308: + call void @finch_panic_index(ptr @.str.5388, i64 5007, i64 0, i64 %t1296) + unreachable +inrange8309: + %t1298 = extractvalue { ptr, i64, i64 } %t1295, 0 + %t1299 = getelementptr inbounds %S.ast.Node, ptr %t1298, i64 0 + %t1300 = load %S.ast.Node, ptr %t1299 + %t1301 = call %S.gen.Val @finch.gen.strArg(ptr %t1293, %S.ast.Node %t1300, { ptr, i64, i64 } { ptr @.str.5389, i64 12, i64 0 }) + %t1302 = load %S.gen.Val, ptr %a1285 + store %S.gen.Val %t1301, ptr %a1285 + store %S.gen.Val %t1302, ptr %a1303 + call void @finch.drop.S_gen_Val(ptr %a1303) + br label %endif8307 +endif8307: + %t1304 = load ptr, ptr %a1 + %t1305 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1304) + store { ptr, i64, i64 } %t1305, ptr %a1306 + %t1307 = load ptr, ptr %a1 + %t1308 = load { ptr, i64, i64 }, ptr %a1306 + store { ptr, i64, i64 } { ptr @.str.5390, i64 27, i64 0 }, ptr %a1310 + store { ptr, i64, i64 } %t1308, ptr %a1311 + call void @finch_str_concat(ptr %a1309, ptr %a1310, ptr %a1311) + %t1312 = load { ptr, i64, i64 }, ptr %a1309 + store { ptr, i64, i64 } %t1312, ptr %a1314 + store { ptr, i64, i64 } { ptr @.str.5391, i64 6, i64 0 }, ptr %a1315 + call void @finch_str_concat(ptr %a1313, ptr %a1314, ptr %a1315) + store { ptr, i64, i64 } %t1312, ptr %a1316 + call void @finch_str_drop(ptr %a1316) + %t1317 = load { ptr, i64, i64 }, ptr %a1313 + %t1318 = load ptr, ptr %a1 + %t1319 = load %S.gen.Val, ptr %a1285 + %t1320 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1318, %S.gen.Val %t1319) + store { ptr, i64, i64 } %t1317, ptr %a1322 + store { ptr, i64, i64 } %t1320, ptr %a1323 + call void @finch_str_concat(ptr %a1321, ptr %a1322, ptr %a1323) + store { ptr, i64, i64 } %t1317, ptr %a1324 + call void @finch_str_drop(ptr %a1324) + store { ptr, i64, i64 } %t1320, ptr %a1325 + call void @finch_str_drop(ptr %a1325) + %t1326 = load { ptr, i64, i64 }, ptr %a1321 + store { ptr, i64, i64 } %t1326, ptr %a1328 + store { ptr, i64, i64 } { ptr @.str.5392, i64 1, i64 0 }, ptr %a1329 + call void @finch_str_concat(ptr %a1327, ptr %a1328, ptr %a1329) + store { ptr, i64, i64 } %t1326, ptr %a1330 + call void @finch_str_drop(ptr %a1330) + %t1331 = load { ptr, i64, i64 }, ptr %a1327 + call void @finch.gen.emit(ptr %t1307, { ptr, i64, i64 } %t1331) + store { ptr, i64, i64 } %t1331, ptr %a1332 + call void @finch_str_drop(ptr %a1332) + %t1333 = load ptr, ptr %a1 + %t1334 = load %S.gen.Val, ptr %a1285 + call void @finch.gen.release(ptr %t1333, %S.gen.Val %t1334) + %t1335 = load ptr, ptr %a1 + %t1336 = load { ptr, i64, i64 }, ptr %a1306 + %t1337 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1335, { ptr, i64, i64 } { ptr @.str.5393, i64 17, i64 0 }, { ptr, i64, i64 } %t1336) + %t1338 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1337, 0 + %t1339 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5394, i64 3, i64 0 }) + %t1340 = insertvalue %S.gen.Val %t1338, %S.ast.Type %t1339, 1 + %t1341 = insertvalue %S.gen.Val %t1340, i1 true, 2 + call void @finch_str_drop(ptr %a1306) + call void @finch.drop.S_gen_Val(ptr %a1285) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1341 +endif8304: + %t1342 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1342, ptr %a1343 + store { ptr, i64, i64 } { ptr @.str.5395, i64 3, i64 0 }, ptr %a1344 + %t1345 = call i32 @finch_str_eq(ptr %a1343, ptr %a1344) + %t1346 = icmp ne i32 %t1345, 0 + br i1 %t1346, label %then8310, label %endif8312 +then8310: + %t1347 = load ptr, ptr %a1 + %t1348 = load %S.ast.Node, ptr %a2 + %t1349 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1347, %S.ast.Node %t1348, i64 0, i64 1, { ptr, i64, i64 } %t1349) + %t1350 = load ptr, ptr %a1 + %t1351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1352 = load { ptr, i64, i64 }, ptr %t1351 + %t1353 = extractvalue { ptr, i64, i64 } %t1352, 1 + %t1354 = icmp uge i64 0, %t1353 + br i1 %t1354, label %range8313, label %inrange8314 +range8313: + call void @finch_panic_index(ptr @.str.5396, i64 5016, i64 0, i64 %t1353) + unreachable +inrange8314: + %t1355 = extractvalue { ptr, i64, i64 } %t1352, 0 + %t1356 = getelementptr inbounds %S.ast.Node, ptr %t1355, i64 0 + %t1357 = load %S.ast.Node, ptr %t1356 + %t1358 = call %S.gen.Val @finch.gen.expr(ptr %t1350, %S.ast.Node %t1357) + store %S.gen.Val %t1358, ptr %a1359 + %t1360 = load ptr, ptr %a1 + %t1361 = load ptr, ptr %a1 + %t1362 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 + %t1363 = load %S.ast.Type, ptr %t1362 + %t1364 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1361, %S.ast.Type %t1363) + store { ptr, i64, i64 } { ptr @.str.5397, i64 26, i64 0 }, ptr %a1366 + store { ptr, i64, i64 } %t1364, ptr %a1367 + call void @finch_str_concat(ptr %a1365, ptr %a1366, ptr %a1367) + store { ptr, i64, i64 } %t1364, ptr %a1368 + call void @finch_str_drop(ptr %a1368) + %t1369 = load { ptr, i64, i64 }, ptr %a1365 + store { ptr, i64, i64 } %t1369, ptr %a1371 + store { ptr, i64, i64 } { ptr @.str.5398, i64 1, i64 0 }, ptr %a1372 + call void @finch_str_concat(ptr %a1370, ptr %a1371, ptr %a1372) + store { ptr, i64, i64 } %t1369, ptr %a1373 + call void @finch_str_drop(ptr %a1373) + %t1374 = load { ptr, i64, i64 }, ptr %a1370 + %t1375 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1360, { ptr, i64, i64 } %t1374) + store { ptr, i64, i64 } %t1374, ptr %a1376 + call void @finch_str_drop(ptr %a1376) + store { ptr, i64, i64 } %t1375, ptr %a1377 + %t1378 = load ptr, ptr %a1 + %t1379 = load ptr, ptr %a1 + %t1380 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 + %t1381 = load %S.ast.Type, ptr %t1380 + %t1382 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1379, %S.ast.Type %t1381) + %t1383 = load ptr, ptr %a1 + %t1384 = load %S.gen.Val, ptr %a1359 + %t1385 = call { ptr, i64, i64 } @finch.gen.own(ptr %t1383, %S.gen.Val %t1384) + %t1386 = load { ptr, i64, i64 }, ptr %a1377 + call void @finch.gen.store(ptr %t1378, { ptr, i64, i64 } %t1382, { ptr, i64, i64 } %t1385, { ptr, i64, i64 } %t1386) + store { ptr, i64, i64 } %t1382, ptr %a1387 + call void @finch_str_drop(ptr %a1387) + store { ptr, i64, i64 } %t1385, ptr %a1388 + call void @finch_str_drop(ptr %a1388) + %t1389 = load { ptr, i64, i64 }, ptr %a1377 + store { ptr, i64, i64 } %t1389, ptr %a1390 + call void @finch_str_copy(ptr %a1391, ptr %a1390) + %t1392 = load { ptr, i64, i64 }, ptr %a1391 + %t1393 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1392, 0 + %t1394 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 + %t1395 = load %S.ast.Type, ptr %t1394 + %t1396 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t1395) + %t1397 = insertvalue %S.gen.Val %t1393, %S.ast.Type %t1396, 1 + call void @finch_str_drop(ptr %a1377) + call void @finch.drop.S_gen_Val(ptr %a1359) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1397 +endif8312: + %t1398 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1398, ptr %a1399 + store { ptr, i64, i64 } { ptr @.str.5399, i64 4, i64 0 }, ptr %a1400 + %t1401 = call i32 @finch_str_eq(ptr %a1399, ptr %a1400) + %t1402 = icmp ne i32 %t1401, 0 + br i1 %t1402, label %then8315, label %endif8317 +then8315: + %t1403 = load ptr, ptr %a1 + %t1404 = load %S.ast.Node, ptr %a2 + %t1405 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1403, %S.ast.Node %t1404, i64 0, i64 1, { ptr, i64, i64 } %t1405) + %t1406 = load ptr, ptr %a1 + %t1407 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1408 = load { ptr, i64, i64 }, ptr %t1407 + %t1409 = extractvalue { ptr, i64, i64 } %t1408, 1 + %t1410 = icmp uge i64 0, %t1409 + br i1 %t1410, label %range8318, label %inrange8319 +range8318: + call void @finch_panic_index(ptr @.str.5400, i64 5023, i64 0, i64 %t1409) + unreachable +inrange8319: + %t1411 = extractvalue { ptr, i64, i64 } %t1408, 0 + %t1412 = getelementptr inbounds %S.ast.Node, ptr %t1411, i64 0 + %t1413 = load %S.ast.Node, ptr %t1412 + %t1414 = call %S.gen.Val @finch.gen.expr(ptr %t1406, %S.ast.Node %t1413) + store %S.gen.Val %t1414, ptr %a1415 + %t1416 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1417 = getelementptr inbounds %S.ast.Type, ptr %t1416, i32 0, i32 0 + %t1418 = load { ptr, i64, i64 }, ptr %t1417 + store { ptr, i64, i64 } %t1418, ptr %a1419 + store { ptr, i64, i64 } { ptr @.str.5401, i64 3, i64 0 }, ptr %a1420 + %t1421 = call i32 @finch_str_eq(ptr %a1419, ptr %a1420) + %t1422 = icmp eq i32 %t1421, 0 + br i1 %t1422, label %then8320, label %endif8322 +then8320: + %t1423 = load ptr, ptr %a1 + %t1424 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1425 = load { ptr, i64, i64 }, ptr %t1424 + %t1426 = extractvalue { ptr, i64, i64 } %t1425, 1 + %t1427 = icmp uge i64 0, %t1426 + br i1 %t1427, label %range8323, label %inrange8324 +range8323: + call void @finch_panic_index(ptr @.str.5402, i64 5025, i64 0, i64 %t1426) + unreachable +inrange8324: + %t1428 = extractvalue { ptr, i64, i64 } %t1425, 0 + %t1429 = getelementptr inbounds %S.ast.Node, ptr %t1428, i64 0 + %t1430 = load %S.ast.Node, ptr %t1429 + call void @finch.gen.fail(ptr %t1423, %S.ast.Node %t1430, { ptr, i64, i64 } { ptr @.str.5403, i64 119, i64 0 }) + br label %endif8322 +endif8322: + %t1431 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1432 = getelementptr inbounds %S.ast.Type, ptr %t1431, i32 0, i32 1 + %t1433 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1432, i32 0, i32 1 + %t1434 = load i64, ptr %t1433 + %t1435 = icmp sgt i64 %t1434, 0 + br label %logic.from8325 +logic.from8325: + br i1 %t1435, label %logic.rhs8326, label %logic.end8327 +logic.rhs8326: + %t1436 = load ptr, ptr %a1 + %t1437 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1438 = getelementptr inbounds %S.ast.Type, ptr %t1437, i32 0, i32 1 + %t1439 = load { ptr, i64, i64 }, ptr %t1438 + %t1440 = extractvalue { ptr, i64, i64 } %t1439, 1 + %t1441 = icmp uge i64 0, %t1440 + br i1 %t1441, label %range8328, label %inrange8329 +range8328: + call void @finch_panic_index(ptr @.str.5404, i64 5027, i64 0, i64 %t1440) + unreachable +inrange8329: + %t1442 = extractvalue { ptr, i64, i64 } %t1439, 0 + %t1443 = getelementptr inbounds %S.ast.Type, ptr %t1442, i64 0 + %t1444 = load %S.ast.Type, ptr %t1443 + %t1445 = call i1 @finch.gen.owning(ptr %t1436, %S.ast.Type %t1444) + br label %logic.rend8330 +logic.rend8330: + br label %logic.end8327 +logic.end8327: + %t1446 = phi i1 [ false, %logic.from8325 ], [ %t1445, %logic.rend8330 ] + br i1 %t1446, label %then8331, label %endif8333 +then8331: + %t1447 = load ptr, ptr %a1 + %t1448 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1447, { ptr, i64, i64 } { ptr @.str.5405, i64 9, i64 0 }) + store { ptr, i64, i64 } %t1448, ptr %a1449 + %t1450 = load ptr, ptr %a1 + %t1451 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1450, { ptr, i64, i64 } { ptr @.str.5406, i64 9, i64 0 }) + store { ptr, i64, i64 } %t1451, ptr %a1452 + %t1453 = load ptr, ptr %a1 + %t1454 = load ptr, ptr %a1 + %t1455 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 + %t1456 = load { ptr, i64, i64 }, ptr %t1455 + store { ptr, i64, i64 } { ptr @.str.5407, i64 12, i64 0 }, ptr %a1458 + store { ptr, i64, i64 } %t1456, ptr %a1459 + call void @finch_str_concat(ptr %a1457, ptr %a1458, ptr %a1459) + %t1460 = load { ptr, i64, i64 }, ptr %a1457 + store { ptr, i64, i64 } %t1460, ptr %a1462 + store { ptr, i64, i64 } { ptr @.str.5408, i64 6, i64 0 }, ptr %a1463 + call void @finch_str_concat(ptr %a1461, ptr %a1462, ptr %a1463) + store { ptr, i64, i64 } %t1460, ptr %a1464 + call void @finch_str_drop(ptr %a1464) + %t1465 = load { ptr, i64, i64 }, ptr %a1461 + %t1466 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1454, { ptr, i64, i64 } %t1465) + store { ptr, i64, i64 } %t1465, ptr %a1467 + call void @finch_str_drop(ptr %a1467) + %t1468 = load { ptr, i64, i64 }, ptr %a1452 + %t1469 = load { ptr, i64, i64 }, ptr %a1449 + call void @finch.gen.condBr(ptr %t1453, { ptr, i64, i64 } %t1466, { ptr, i64, i64 } %t1468, { ptr, i64, i64 } %t1469) + store { ptr, i64, i64 } %t1466, ptr %a1470 + call void @finch_str_drop(ptr %a1470) + %t1471 = load ptr, ptr %a1 + %t1472 = load { ptr, i64, i64 }, ptr %a1449 + call void @finch.gen.label(ptr %t1471, { ptr, i64, i64 } %t1472) + %t1473 = load ptr, ptr %a1 + %t1474 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 + %t1475 = load { ptr, i64, i64 }, ptr %t1474 + %t1476 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1477 = getelementptr inbounds %S.ast.Type, ptr %t1476, i32 0, i32 1 + %t1478 = load { ptr, i64, i64 }, ptr %t1477 + %t1479 = extractvalue { ptr, i64, i64 } %t1478, 1 + %t1480 = icmp uge i64 0, %t1479 + br i1 %t1480, label %range8334, label %inrange8335 +range8334: + call void @finch_panic_index(ptr @.str.5409, i64 5032, i64 0, i64 %t1479) + unreachable +inrange8335: + %t1481 = extractvalue { ptr, i64, i64 } %t1478, 0 + %t1482 = getelementptr inbounds %S.ast.Type, ptr %t1481, i64 0 + %t1483 = load %S.ast.Type, ptr %t1482 + call void @finch.gen.dropAt(ptr %t1473, { ptr, i64, i64 } %t1475, %S.ast.Type %t1483) + %t1484 = load ptr, ptr %a1 + %t1485 = load { ptr, i64, i64 }, ptr %a1452 + call void @finch.gen.br(ptr %t1484, { ptr, i64, i64 } %t1485) + %t1486 = load ptr, ptr %a1 + %t1487 = load { ptr, i64, i64 }, ptr %a1452 + call void @finch.gen.label(ptr %t1486, { ptr, i64, i64 } %t1487) + call void @finch_str_drop(ptr %a1452) + call void @finch_str_drop(ptr %a1449) + br label %endif8333 +endif8333: + %t1488 = load ptr, ptr %a1 + %t1489 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 + %t1490 = load { ptr, i64, i64 }, ptr %t1489 + store { ptr, i64, i64 } { ptr @.str.5410, i64 20, i64 0 }, ptr %a1492 + store { ptr, i64, i64 } %t1490, ptr %a1493 + call void @finch_str_concat(ptr %a1491, ptr %a1492, ptr %a1493) + %t1494 = load { ptr, i64, i64 }, ptr %a1491 + store { ptr, i64, i64 } %t1494, ptr %a1496 + store { ptr, i64, i64 } { ptr @.str.5411, i64 1, i64 0 }, ptr %a1497 + call void @finch_str_concat(ptr %a1495, ptr %a1496, ptr %a1497) + store { ptr, i64, i64 } %t1494, ptr %a1498 + call void @finch_str_drop(ptr %a1498) + %t1499 = load { ptr, i64, i64 }, ptr %a1495 + call void @finch.gen.emit(ptr %t1488, { ptr, i64, i64 } %t1499) + store { ptr, i64, i64 } %t1499, ptr %a1500 + call void @finch_str_drop(ptr %a1500) + %t1501 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5412, i64 4, i64 0 }) + %t1502 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1501, 1 + call void @finch.drop.S_gen_Val(ptr %a1415) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1502 +endif8317: + %t1503 = load ptr, ptr %a1 + %t1504 = load ptr, ptr %a1 + %t1505 = icmp eq ptr %t1504, null + br i1 %t1505, label %panic8336, label %ok8337 +panic8336: + call void @finch_panic(ptr @.str.5413, i64 5039, ptr @.str.5414) + unreachable +ok8337: + %t1506 = getelementptr inbounds %S.gen.Gen, ptr %t1504, i32 0, i32 14 + %t1507 = load { ptr, i64, i64 }, ptr %t1506 + %t1508 = load { ptr, i64, i64 }, ptr %a8 + %t1509 = call i64 @finch.gen.findFn(ptr %t1503, { ptr, i64, i64 } %t1507, { ptr, i64, i64 } %t1508) + store i64 %t1509, ptr %a1510 + %t1511 = load i64, ptr %a1510 + %t1512 = icmp sge i64 %t1511, 0 + br i1 %t1512, label %then8338, label %endif8340 +then8338: + %t1513 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t1514 = getelementptr inbounds %S.ast.Type, ptr %t1513, i32 0, i32 1 + %t1515 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1514, i32 0, i32 1 + %t1516 = load i64, ptr %t1515 + %t1517 = icmp sgt i64 %t1516, 0 + br i1 %t1517, label %then8341, label %endif8343 +then8341: + %t1518 = load ptr, ptr %a1 + %t1519 = load %S.ast.Node, ptr %a2 + %t1520 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5415, i64 1, i64 0 }, ptr %a1522 + store { ptr, i64, i64 } %t1520, ptr %a1523 + call void @finch_str_concat(ptr %a1521, ptr %a1522, ptr %a1523) + %t1524 = load { ptr, i64, i64 }, ptr %a1521 + store { ptr, i64, i64 } %t1524, ptr %a1526 + store { ptr, i64, i64 } { ptr @.str.5416, i64 47, i64 0 }, ptr %a1527 + call void @finch_str_concat(ptr %a1525, ptr %a1526, ptr %a1527) + store { ptr, i64, i64 } %t1524, ptr %a1528 + call void @finch_str_drop(ptr %a1528) + %t1529 = load { ptr, i64, i64 }, ptr %a1525 + call void @finch.gen.fail(ptr %t1518, %S.ast.Node %t1519, { ptr, i64, i64 } %t1529) + store { ptr, i64, i64 } %t1529, ptr %a1530 + call void @finch_str_drop(ptr %a1530) + br label %endif8343 +endif8343: + %t1531 = load ptr, ptr %a1 + %t1532 = load i64, ptr %a1510 + %t1533 = load %S.ast.Node, ptr %a2 + %t1534 = load { ptr, i64, i64 }, ptr %a8 + %t1535 = call %S.gen.Val @finch.gen.callFn(ptr %t1531, i64 %t1532, %S.ast.Node %t1533, i64 0, { ptr, i64, i64 } %t1534, { ptr, i64, i64 } { ptr @.str.5417, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5418, i64 0, i64 0 }) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1535 +endif8340: + %t1536 = load ptr, ptr %a1 + %t1537 = load ptr, ptr %a1 + %t1538 = icmp eq ptr %t1537, null + br i1 %t1538, label %panic8344, label %ok8345 +panic8344: + call void @finch_panic(ptr @.str.5419, i64 5046, ptr @.str.5420) + unreachable +ok8345: + %t1539 = getelementptr inbounds %S.gen.Gen, ptr %t1537, i32 0, i32 14 + %t1540 = load { ptr, i64, i64 }, ptr %t1539 + %t1541 = load { ptr, i64, i64 }, ptr %a8 + %t1542 = call i64 @finch.gen.findTemplate(ptr %t1536, { ptr, i64, i64 } %t1540, { ptr, i64, i64 } %t1541, { ptr, i64, i64 } { ptr @.str.5421, i64 0, i64 0 }, i1 false) + store i64 %t1542, ptr %a1543 + %t1544 = load i64, ptr %a1543 + %t1545 = icmp sge i64 %t1544, 0 + br i1 %t1545, label %then8346, label %endif8348 +then8346: + %t1546 = load ptr, ptr %a1 + %t1547 = load %S.ast.Node, ptr %a2 + %t1548 = load i64, ptr %a1543 + %t1549 = load { ptr, i64, i64 }, ptr %a8 + %t1550 = call %S.gen.Val @finch.gen.genericCall(ptr %t1546, %S.ast.Node %t1547, i64 %t1548, i64 0, { ptr, i64, i64 } %t1549) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1550 +endif8348: + %t1551 = load ptr, ptr %a1 + %t1552 = load ptr, ptr %a1 + %t1553 = icmp eq ptr %t1552, null + br i1 %t1553, label %panic8349, label %ok8350 +panic8349: + call void @finch_panic(ptr @.str.5422, i64 5050, ptr @.str.5423) + unreachable +ok8350: + %t1554 = getelementptr inbounds %S.gen.Gen, ptr %t1552, i32 0, i32 14 + %t1555 = load { ptr, i64, i64 }, ptr %t1554 + %t1556 = load { ptr, i64, i64 }, ptr %a8 + %t1557 = call i64 @finch.gen.findTemplate(ptr %t1551, { ptr, i64, i64 } %t1555, { ptr, i64, i64 } %t1556, { ptr, i64, i64 } { ptr @.str.5424, i64 0, i64 0 }, i1 true) + %t1558 = icmp sge i64 %t1557, 0 + br i1 %t1558, label %then8351, label %endif8353 +then8351: + %t1559 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t1560 = getelementptr inbounds %S.ast.Type, ptr %t1559, i32 0, i32 1 + %t1561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1560, i32 0, i32 1 + %t1562 = load i64, ptr %t1561 + %t1563 = icmp eq i64 %t1562, 0 + br i1 %t1563, label %then8354, label %endif8356 +then8354: + %t1564 = load ptr, ptr %a1 + %t1565 = load %S.ast.Node, ptr %a2 + %t1566 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5425, i64 1, i64 0 }, ptr %a1568 + store { ptr, i64, i64 } %t1566, ptr %a1569 + call void @finch_str_concat(ptr %a1567, ptr %a1568, ptr %a1569) + %t1570 = load { ptr, i64, i64 }, ptr %a1567 + store { ptr, i64, i64 } %t1570, ptr %a1572 + store { ptr, i64, i64 } { ptr @.str.5426, i64 42, i64 0 }, ptr %a1573 + call void @finch_str_concat(ptr %a1571, ptr %a1572, ptr %a1573) + store { ptr, i64, i64 } %t1570, ptr %a1574 + call void @finch_str_drop(ptr %a1574) + %t1575 = load { ptr, i64, i64 }, ptr %a1571 + %t1576 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1575, ptr %a1578 + store { ptr, i64, i64 } %t1576, ptr %a1579 + call void @finch_str_concat(ptr %a1577, ptr %a1578, ptr %a1579) + store { ptr, i64, i64 } %t1575, ptr %a1580 + call void @finch_str_drop(ptr %a1580) + %t1581 = load { ptr, i64, i64 }, ptr %a1577 + store { ptr, i64, i64 } %t1581, ptr %a1583 + store { ptr, i64, i64 } { ptr @.str.5427, i64 10, i64 0 }, ptr %a1584 + call void @finch_str_concat(ptr %a1582, ptr %a1583, ptr %a1584) + store { ptr, i64, i64 } %t1581, ptr %a1585 + call void @finch_str_drop(ptr %a1585) + %t1586 = load { ptr, i64, i64 }, ptr %a1582 + call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1586) + store { ptr, i64, i64 } %t1586, ptr %a1587 + call void @finch_str_drop(ptr %a1587) + br label %endif8356 +endif8356: + store { ptr, i64, i64 } zeroinitializer, ptr %a1588 + %t1589 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t1590 = getelementptr inbounds %S.ast.Type, ptr %t1589, i32 0, i32 1 + store i64 0, ptr %a1591 + br label %each.cond8357 +each.cond8357: + %t1592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1590, i32 0, i32 1 + %t1593 = load i64, ptr %t1592 + %t1594 = load i64, ptr %a1591 + %t1595 = icmp slt i64 %t1594, %t1593 + br i1 %t1595, label %each.body8358, label %each.end8360 +each.body8358: + %t1596 = load ptr, ptr %t1590 + %t1597 = getelementptr inbounds %S.ast.Type, ptr %t1596, i64 %t1594 + %t1598 = load %S.ast.Type, ptr %t1597 + store %S.ast.Type %t1598, ptr %a1599 + %t1600 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1588, i32 0, i32 1 + %t1601 = load ptr, ptr %a1 + %t1602 = load %S.ast.Type, ptr %a1599 + %t1603 = load %S.ast.Node, ptr %a2 + %t1604 = call %S.ast.Type @finch.gen.resolve(ptr %t1601, %S.ast.Type %t1602, %S.ast.Node %t1603) + %t1605 = load i64, ptr %t1600 + %t1606 = add i64 %t1605, 1 + call void @finch_arr_reserve(ptr %a1588, i64 %t1606, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t1607 = load ptr, ptr %a1588 + %t1608 = getelementptr inbounds %S.ast.Type, ptr %t1607, i64 %t1605 + store %S.ast.Type %t1604, ptr %t1608 + store i64 %t1606, ptr %t1600 + br label %each.step8359 +each.step8359: + %t1609 = load i64, ptr %a1591 + %t1610 = add i64 %t1609, 1 + store i64 %t1610, ptr %a1591 + br label %each.cond8357 +each.end8360: + %t1611 = load ptr, ptr %a1 + %t1612 = load ptr, ptr %a1 + %t1613 = icmp eq ptr %t1612, null + br i1 %t1613, label %panic8361, label %ok8362 +panic8361: + call void @finch_panic(ptr @.str.5428, i64 5059, ptr @.str.5429) + unreachable +ok8362: + %t1614 = getelementptr inbounds %S.gen.Gen, ptr %t1612, i32 0, i32 14 + %t1615 = load { ptr, i64, i64 }, ptr %t1614 + %t1616 = load { ptr, i64, i64 }, ptr %a8 + %t1617 = load { ptr, i64, i64 }, ptr %a1588 + %t1618 = load %S.ast.Node, ptr %a2 + %t1619 = call %S.ast.Type @finch.gen.instStruct(ptr %t1611, { ptr, i64, i64 } %t1615, { ptr, i64, i64 } %t1616, { ptr, i64, i64 } %t1617, %S.ast.Node %t1618) + store %S.ast.Type %t1619, ptr %a1620 + %t1621 = load ptr, ptr %a1 + %t1622 = load ptr, ptr %a1 + %t1623 = getelementptr inbounds %S.ast.Type, ptr %a1620, i32 0, i32 3 + %t1624 = load { ptr, i64, i64 }, ptr %t1623 + %t1625 = getelementptr inbounds %S.ast.Type, ptr %a1620, i32 0, i32 2 + %t1626 = load { ptr, i64, i64 }, ptr %t1625 + %t1627 = call i64 @finch.gen.findStruct(ptr %t1622, { ptr, i64, i64 } %t1624, { ptr, i64, i64 } %t1626) + %t1628 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1629 = load { ptr, i64, i64 }, ptr %t1628 + %t1630 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t1631 = load { ptr, i64, i64 }, ptr %t1630 + %t1632 = load %S.ast.Node, ptr %a2 + %t1633 = call %S.gen.Val @finch.gen.construct(ptr %t1621, i64 %t1627, { ptr, i64, i64 } %t1629, { ptr, i64, i64 } %t1631, %S.ast.Node %t1632) + call void @finch.drop.S_ast_Type(ptr %a1620) + call void @finch.drop.arr_S_ast_Type(ptr %a1588) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1633 +endif8353: + %t1634 = load ptr, ptr %a1 + %t1635 = load ptr, ptr %a1 + %t1636 = icmp eq ptr %t1635, null + br i1 %t1636, label %panic8363, label %ok8364 +panic8363: + call void @finch_panic(ptr @.str.5430, i64 5062, ptr @.str.5431) + unreachable +ok8364: + %t1637 = getelementptr inbounds %S.gen.Gen, ptr %t1635, i32 0, i32 14 + %t1638 = load { ptr, i64, i64 }, ptr %t1637 + %t1639 = load { ptr, i64, i64 }, ptr %a8 + %t1640 = call i64 @finch.gen.findStruct(ptr %t1634, { ptr, i64, i64 } %t1638, { ptr, i64, i64 } %t1639) + store i64 %t1640, ptr %a1641 + %t1642 = load i64, ptr %a1641 + %t1643 = icmp sge i64 %t1642, 0 + br i1 %t1643, label %then8365, label %endif8367 +then8365: + %t1644 = load ptr, ptr %a1 + %t1645 = icmp eq ptr %t1644, null + br i1 %t1645, label %panic8368, label %ok8369 +panic8368: + call void @finch_panic(ptr @.str.5432, i64 5064, ptr @.str.5433) + unreachable +ok8369: + %t1646 = getelementptr inbounds %S.gen.Gen, ptr %t1644, i32 0, i32 16 + %t1647 = load i64, ptr %a1641 + %t1648 = load { ptr, i64, i64 }, ptr %t1646 + %t1649 = extractvalue { ptr, i64, i64 } %t1648, 1 + %t1650 = icmp uge i64 %t1647, %t1649 + br i1 %t1650, label %range8370, label %inrange8371 +range8370: + call void @finch_panic_index(ptr @.str.5434, i64 5064, i64 %t1647, i64 %t1649) + unreachable +inrange8371: + %t1651 = extractvalue { ptr, i64, i64 } %t1648, 0 + %t1652 = getelementptr inbounds %S.gen.StructDef, ptr %t1651, i64 %t1647 + %t1653 = load %S.gen.StructDef, ptr %t1652 + store %S.gen.StructDef %t1653, ptr %a1654 + call void @finch.copy.S_gen_StructDef(ptr %a1655, ptr %a1654) + %t1656 = load %S.gen.StructDef, ptr %a1655 + store %S.gen.StructDef %t1656, ptr %a1657 + %t1658 = load ptr, ptr %a1 + %t1659 = icmp eq ptr %t1658, null + br i1 %t1659, label %panic8372, label %ok8373 +panic8372: + call void @finch_panic(ptr @.str.5435, i64 5065, ptr @.str.5436) + unreachable +ok8373: + %t1660 = getelementptr inbounds %S.gen.Gen, ptr %t1658, i32 0, i32 28 + %t1661 = load i1, ptr %t1660 + br label %logic.from8374 +logic.from8374: + br i1 %t1661, label %logic.rhs8375, label %logic.end8376 +logic.rhs8375: + %t1662 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 2 + %t1663 = load i1, ptr %t1662 + %t1664 = xor i1 %t1663, true + br label %logic.rend8377 +logic.rend8377: + br label %logic.end8376 +logic.end8376: + %t1665 = phi i1 [ false, %logic.from8374 ], [ %t1664, %logic.rend8377 ] + br i1 %t1665, label %then8378, label %endif8380 +then8378: + %t1666 = load ptr, ptr %a1 + %t1667 = icmp eq ptr %t1666, null + br i1 %t1667, label %panic8381, label %ok8382 +panic8381: + call void @finch_panic(ptr @.str.5437, i64 5066, ptr @.str.5438) + unreachable +ok8382: + %t1668 = getelementptr inbounds %S.gen.Gen, ptr %t1666, i32 0, i32 0 + %t1669 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 13 + %t1670 = load i64, ptr %t1669 + %t1671 = load { ptr, i64, i64 }, ptr %t1668 + %t1672 = extractvalue { ptr, i64, i64 } %t1671, 1 + %t1673 = icmp uge i64 %t1670, %t1672 + br i1 %t1673, label %range8383, label %inrange8384 +range8383: + call void @finch_panic_index(ptr @.str.5439, i64 5066, i64 %t1670, i64 %t1672) + unreachable +inrange8384: + %t1674 = extractvalue { ptr, i64, i64 } %t1671, 0 + %t1675 = getelementptr inbounds %S.ast.Program, ptr %t1674, i64 %t1670 + %t1676 = getelementptr inbounds %S.ast.Program, ptr %t1675, i32 0, i32 6 + %t1677 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 14 + %t1678 = load i64, ptr %t1677 + %t1679 = load { ptr, i64, i64 }, ptr %t1676 + %t1680 = extractvalue { ptr, i64, i64 } %t1679, 1 + %t1681 = icmp uge i64 %t1678, %t1680 + br i1 %t1681, label %range8385, label %inrange8386 +range8385: + call void @finch_panic_index(ptr @.str.5440, i64 5066, i64 %t1678, i64 %t1680) + unreachable +inrange8386: + %t1682 = extractvalue { ptr, i64, i64 } %t1679, 0 + %t1683 = getelementptr inbounds %S.ast.Node, ptr %t1682, i64 %t1678 + %t1684 = load %S.ast.Node, ptr %t1683 + store %S.ast.Node %t1684, ptr %a1685 + call void @finch.copy.S_ast_Node(ptr %a1686, ptr %a1685) + %t1687 = load %S.ast.Node, ptr %a1686 + store %S.ast.Node %t1687, ptr %a1688 + %t1689 = load ptr, ptr %a1 + %t1690 = load %S.ast.Node, ptr %a2 + %t1691 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t1692 = load i64, ptr %t1691 + %t1693 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t1694 = load i64, ptr %t1693 + %t1695 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 1 + %t1696 = load { ptr, i64, i64 }, ptr %t1695 + store { ptr, i64, i64 } { ptr @.str.5441, i64 16, i64 0 }, ptr %a1698 + store { ptr, i64, i64 } %t1696, ptr %a1699 + call void @finch_str_concat(ptr %a1697, ptr %a1698, ptr %a1699) + %t1700 = load { ptr, i64, i64 }, ptr %a1697 + store { ptr, i64, i64 } %t1700, ptr %a1702 + store { ptr, i64, i64 } { ptr @.str.5442, i64 3, i64 0 }, ptr %a1703 + call void @finch_str_concat(ptr %a1701, ptr %a1702, ptr %a1703) + store { ptr, i64, i64 } %t1700, ptr %a1704 + call void @finch_str_drop(ptr %a1704) + %t1705 = load { ptr, i64, i64 }, ptr %a1701 + %t1706 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 11 + %t1707 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1706, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5443, i64 2, i64 0 }, ptr %a1708 + call void @finch_str_join(ptr %a1709, ptr %t1706, ptr %a1708) + %t1710 = load { ptr, i64, i64 }, ptr %a1709 + store { ptr, i64, i64 } %t1705, ptr %a1712 + store { ptr, i64, i64 } %t1710, ptr %a1713 + call void @finch_str_concat(ptr %a1711, ptr %a1712, ptr %a1713) + store { ptr, i64, i64 } %t1705, ptr %a1714 + call void @finch_str_drop(ptr %a1714) + store { ptr, i64, i64 } %t1710, ptr %a1715 + call void @finch_str_drop(ptr %a1715) + %t1716 = load { ptr, i64, i64 }, ptr %a1711 + store { ptr, i64, i64 } %t1716, ptr %a1718 + store { ptr, i64, i64 } { ptr @.str.5444, i64 6, i64 0 }, ptr %a1719 + call void @finch_str_concat(ptr %a1717, ptr %a1718, ptr %a1719) + store { ptr, i64, i64 } %t1716, ptr %a1720 + call void @finch_str_drop(ptr %a1720) + %t1721 = load { ptr, i64, i64 }, ptr %a1717 + %t1722 = load ptr, ptr %a1 + %t1723 = icmp eq ptr %t1722, null + br i1 %t1723, label %panic8387, label %ok8388 +panic8387: + call void @finch_panic(ptr @.str.5445, i64 5067, ptr @.str.5446) + unreachable +ok8388: + %t1724 = getelementptr inbounds %S.gen.Gen, ptr %t1722, i32 0, i32 1 + %t1725 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 13 + %t1726 = load i64, ptr %t1725 + %t1727 = load { ptr, i64, i64 }, ptr %t1724 + %t1728 = extractvalue { ptr, i64, i64 } %t1727, 1 + %t1729 = icmp uge i64 %t1726, %t1728 + br i1 %t1729, label %range8389, label %inrange8390 +range8389: + call void @finch_panic_index(ptr @.str.5447, i64 5067, i64 %t1726, i64 %t1728) + unreachable +inrange8390: + %t1730 = extractvalue { ptr, i64, i64 } %t1727, 0 + %t1731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1730, i64 %t1726 + %t1732 = load { ptr, i64, i64 }, ptr %t1731 + %t1733 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 11 + %t1734 = load i64, ptr %t1733 + %t1735 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 12 + %t1736 = load i64, ptr %t1735 + call void @finch.gen.noteRef(ptr %t1689, %S.ast.Node %t1690, i64 %t1692, i64 %t1694, { ptr, i64, i64 } %t1721, { ptr, i64, i64 } %t1732, i64 %t1734, i64 %t1736) + store { ptr, i64, i64 } %t1721, ptr %a1737 + call void @finch_str_drop(ptr %a1737) + call void @finch.drop.S_ast_Node(ptr %a1688) + br label %endif8380 +endif8380: + %t1738 = load ptr, ptr %a1 + %t1739 = load i64, ptr %a1641 + %t1740 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1741 = load { ptr, i64, i64 }, ptr %t1740 + %t1742 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t1743 = load { ptr, i64, i64 }, ptr %t1742 + %t1744 = load %S.ast.Node, ptr %a2 + %t1745 = call %S.gen.Val @finch.gen.construct(ptr %t1738, i64 %t1739, { ptr, i64, i64 } %t1741, { ptr, i64, i64 } %t1743, %S.ast.Node %t1744) + call void @finch.drop.S_gen_StructDef(ptr %a1657) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1745 +endif8367: + %t1746 = load ptr, ptr %a1 + %t1747 = load ptr, ptr %a1 + %t1748 = icmp eq ptr %t1747, null + br i1 %t1748, label %panic8391, label %ok8392 +panic8391: + call void @finch_panic(ptr @.str.5448, i64 5071, ptr @.str.5449) + unreachable +ok8392: + %t1749 = getelementptr inbounds %S.gen.Gen, ptr %t1747, i32 0, i32 14 + %t1750 = load { ptr, i64, i64 }, ptr %t1749 + %t1751 = load { ptr, i64, i64 }, ptr %a8 + %t1752 = call i64 @finch.gen.findEnum(ptr %t1746, { ptr, i64, i64 } %t1750, { ptr, i64, i64 } %t1751) + store i64 %t1752, ptr %a1753 + %t1754 = load i64, ptr %a1753 + %t1755 = icmp sge i64 %t1754, 0 + br i1 %t1755, label %then8393, label %endif8395 +then8393: + %t1756 = load ptr, ptr %a1 + %t1757 = load %S.ast.Node, ptr %a2 + %t1758 = load i64, ptr %a1753 + %t1759 = call %S.gen.Val @finch.gen.enumFrom(ptr %t1756, %S.ast.Node %t1757, i64 %t1758) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1759 +endif8395: + %t1760 = load ptr, ptr %a1 + %t1761 = icmp eq ptr %t1760, null + br i1 %t1761, label %panic8396, label %ok8397 +panic8396: + call void @finch_panic(ptr @.str.5450, i64 5075, ptr @.str.5451) + unreachable +ok8397: + %t1762 = getelementptr inbounds %S.gen.Gen, ptr %t1760, i32 0, i32 26 + %t1763 = getelementptr inbounds %S.cimport.CImports, ptr %t1762, i32 0, i32 0 + %t1764 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1764, ptr %a1765 + %t1766 = call i64 @finch_map_find(ptr %t1763, ptr %a1765, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t1767 = icmp sge i64 %t1766, 0 + br i1 %t1767, label %then8398, label %endif8400 +then8398: + %t1768 = load ptr, ptr %a1 + %t1769 = load %S.ast.Node, ptr %a2 + %t1770 = load ptr, ptr %a1 + %t1771 = icmp eq ptr %t1770, null + br i1 %t1771, label %panic8401, label %ok8402 +panic8401: + call void @finch_panic(ptr @.str.5452, i64 5076, ptr @.str.5453) + unreachable +ok8402: + %t1772 = getelementptr inbounds %S.gen.Gen, ptr %t1770, i32 0, i32 26 + %t1773 = getelementptr inbounds %S.cimport.CImports, ptr %t1772, i32 0, i32 0 + %t1774 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1774, ptr %a1775 + %t1776 = call i64 @finch_map_find(ptr %t1773, ptr %a1775, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t1777 = icmp slt i64 %t1776, 0 + br i1 %t1777, label %map.missing8403, label %map.found8404 +map.missing8403: + store { ptr, i64, i64 } zeroinitializer, ptr %a1778 + store { ptr, i64, i64 } %t1774, ptr %a1779 + call void @finch_buf_str(ptr %a1778, ptr %a1779, i32 1) + call void @finch_map_missing(ptr @.str.5454, i64 5076, ptr %a1778) + unreachable +map.found8404: + %t1780 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t1773, i32 0, i32 0 + %t1781 = load ptr, ptr %t1780 + %t1782 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1781, i64 %t1776 + %t1783 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1782, i32 0, i32 2 + %t1784 = load %S.cimport.CFunc, ptr %t1783 + %t1785 = call %S.gen.Val @finch.gen.callC(ptr %t1768, %S.ast.Node %t1769, %S.cimport.CFunc %t1784) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1785 +endif8400: + %t1786 = load ptr, ptr %a1 + %t1787 = load { ptr, i64, i64 }, ptr %a8 + %t1788 = call i64 @finch.gen.findStruct(ptr %t1786, { ptr, i64, i64 } { ptr @.str.5455, i64 1, i64 0 }, { ptr, i64, i64 } %t1787) + store i64 %t1788, ptr %a1641 + %t1789 = load i64, ptr %a1641 + %t1790 = icmp sge i64 %t1789, 0 + br i1 %t1790, label %then8405, label %endif8407 +then8405: + %t1791 = load ptr, ptr %a1 + %t1792 = load i64, ptr %a1641 + %t1793 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1794 = load { ptr, i64, i64 }, ptr %t1793 + %t1795 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t1796 = load { ptr, i64, i64 }, ptr %t1795 + %t1797 = load %S.ast.Node, ptr %a2 + %t1798 = call %S.gen.Val @finch.gen.construct(ptr %t1791, i64 %t1792, { ptr, i64, i64 } %t1794, { ptr, i64, i64 } %t1796, %S.ast.Node %t1797) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1798 +endif8407: + %t1799 = load ptr, ptr %a1 + %t1800 = load { ptr, i64, i64 }, ptr %a8 + %t1801 = call i64 @finch.gen.lookup(ptr %t1799, { ptr, i64, i64 } %t1800) + %t1802 = icmp sge i64 %t1801, 0 + br i1 %t1802, label %then8408, label %endif8410 +then8408: + %t1803 = load ptr, ptr %a1 + %t1804 = load %S.ast.Node, ptr %a2 + %t1805 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5456, i64 1, i64 0 }, ptr %a1807 + store { ptr, i64, i64 } %t1805, ptr %a1808 + call void @finch_str_concat(ptr %a1806, ptr %a1807, ptr %a1808) + %t1809 = load { ptr, i64, i64 }, ptr %a1806 + store { ptr, i64, i64 } %t1809, ptr %a1811 + store { ptr, i64, i64 } { ptr @.str.5457, i64 31, i64 0 }, ptr %a1812 + call void @finch_str_concat(ptr %a1810, ptr %a1811, ptr %a1812) + store { ptr, i64, i64 } %t1809, ptr %a1813 + call void @finch_str_drop(ptr %a1813) + %t1814 = load { ptr, i64, i64 }, ptr %a1810 + call void @finch.gen.fail(ptr %t1803, %S.ast.Node %t1804, { ptr, i64, i64 } %t1814) + store { ptr, i64, i64 } %t1814, ptr %a1815 + call void @finch_str_drop(ptr %a1815) + br label %endif8410 +endif8410: + %t1816 = load ptr, ptr %a1 + %t1817 = load %S.ast.Node, ptr %a2 + %t1818 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5458, i64 28, i64 0 }, ptr %a1820 + store { ptr, i64, i64 } %t1818, ptr %a1821 + call void @finch_str_concat(ptr %a1819, ptr %a1820, ptr %a1821) + %t1822 = load { ptr, i64, i64 }, ptr %a1819 + store { ptr, i64, i64 } %t1822, ptr %a1824 + store { ptr, i64, i64 } { ptr @.str.5459, i64 1, i64 0 }, ptr %a1825 + call void @finch_str_concat(ptr %a1823, ptr %a1824, ptr %a1825) + store { ptr, i64, i64 } %t1822, ptr %a1826 + call void @finch_str_drop(ptr %a1826) + %t1827 = load { ptr, i64, i64 }, ptr %a1823 + %t1828 = load { ptr, i64, i64 }, ptr %a8 + %t1829 = call { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %t1828) + store { ptr, i64, i64 } %t1827, ptr %a1831 + store { ptr, i64, i64 } %t1829, ptr %a1832 + call void @finch_str_concat(ptr %a1830, ptr %a1831, ptr %a1832) + store { ptr, i64, i64 } %t1827, ptr %a1833 + call void @finch_str_drop(ptr %a1833) + store { ptr, i64, i64 } %t1829, ptr %a1834 + call void @finch_str_drop(ptr %a1834) + %t1835 = load { ptr, i64, i64 }, ptr %a1830 + call void @finch.gen.fail(ptr %t1816, %S.ast.Node %t1817, { ptr, i64, i64 } %t1835) + store { ptr, i64, i64 } %t1835, ptr %a1836 + call void @finch_str_drop(ptr %a1836) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val zeroinitializer +} + +define internal %S.gen.Val @finch.gen.callFn(ptr %p0, i64 %p1, %S.ast.Node %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, { ptr, i64, i64 } %p6) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.gen.FnSig, align 16 + %a19 = alloca %S.gen.FnSig, align 16 + %a21 = alloca %S.gen.FnSig, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca i64, align 16 + %a70 = alloca i64, align 16 + %a83 = alloca %S.ast.Node, align 16 + %a84 = alloca %S.ast.Node, align 16 + %a86 = alloca %S.ast.Node, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca %S.gen.Val, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.gen.Val, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca %S.ast.Type, align 16 + %a166 = alloca %S.ast.Type, align 16 + %a171 = alloca %S.gen.Val, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca %S.gen.Val, align 16 + %a204 = alloca %S.gen.Val, align 16 + %a220 = alloca %S.gen.Val, align 16 + %a221 = alloca i64, align 16 + %a229 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store { ptr, i64, i64 } %p5, ptr %a6 + store { ptr, i64, i64 } %p6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic8411, label %ok8412 +panic8411: + call void @finch_panic(ptr @.str.5460, i64 5090, ptr @.str.5461) + unreachable +ok8412: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 15 + %t11 = load i64, ptr %a2 + %t12 = load { ptr, i64, i64 }, ptr %t10 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range8413, label %inrange8414 +range8413: + call void @finch_panic_index(ptr @.str.5462, i64 5090, i64 %t11, i64 %t13) + unreachable +inrange8414: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.gen.FnSig, ptr %t15, i64 %t11 + %t17 = load %S.gen.FnSig, ptr %t16 + store %S.gen.FnSig %t17, ptr %a18 + call void @finch.copy.S_gen_FnSig(ptr %a19, ptr %a18) + %t20 = load %S.gen.FnSig, ptr %a19 + store %S.gen.FnSig %t20, ptr %a21 + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 0 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = icmp eq i64 %t24, 0 + br label %logic.from8415 +logic.from8415: + br i1 %t25, label %logic.rhs8416, label %logic.end8417 +logic.rhs8416: + %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 1 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.5463, i64 4, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend8418 +logic.rend8418: + br label %logic.end8417 +logic.end8417: + %t32 = phi i1 [ false, %logic.from8415 ], [ %t31, %logic.rend8418 ] + br i1 %t32, label %then8419, label %endif8421 +then8419: + %t33 = load ptr, ptr %a1 + %t34 = load %S.ast.Node, ptr %a3 + call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } { ptr @.str.5464, i64 52, i64 0 }) + br label %endif8421 +endif8421: + %t35 = load ptr, ptr %a1 + %t36 = load %S.ast.Node, ptr %a3 + %t37 = load %S.gen.FnSig, ptr %a21 + call void @finch.gen.noteCall(ptr %t35, %S.ast.Node %t36, %S.gen.FnSig %t37) + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Node, ptr %a3 + %t40 = load i64, ptr %a4 + %t41 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 + %t43 = load i64, ptr %t42 + %t44 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.checkArgs(ptr %t38, %S.ast.Node %t39, i64 %t40, i64 %t43, { ptr, i64, i64 } %t44) + store { ptr, i64, i64 } zeroinitializer, ptr %a45 + %t46 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 2 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 + %t48 = load i64, ptr %t47 + %t49 = icmp sgt i64 %t48, 0 + br i1 %t49, label %then8422, label %endif8424 +then8422: + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 + %t51 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.5465, i64 4, i64 0 }, ptr %a53 + store { ptr, i64, i64 } %t51, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a52 + %t56 = load i64, ptr %t50 + %t57 = add i64 %t56, 1 + call void @finch_arr_reserve(ptr %a45, i64 %t57, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t58 = load ptr, ptr %a45 + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t56 + store { ptr, i64, i64 } %t55, ptr %t59 + store i64 %t57, ptr %t50 + br label %endif8424 +endif8424: + store { ptr, i64, i64 } zeroinitializer, ptr %a60 + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic8425, label %ok8426 +panic8425: + call void @finch_panic(ptr @.str.5466, i64 5101, ptr @.str.5467) + unreachable +ok8426: + %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 11 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + %t65 = load i64, ptr %t64 + store i64 %t65, ptr %a66 + %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 + %t69 = load i64, ptr %t68 + store i64 0, ptr %a70 + br label %for.cond8427 +for.cond8427: + %t71 = load i64, ptr %a70 + %t72 = icmp slt i64 %t71, %t69 + br i1 %t72, label %for.body8428, label %for.end8430 +for.body8428: + %t73 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t74 = load i64, ptr %a4 + %t75 = load i64, ptr %a70 + %t76 = add i64 %t74, %t75 + %t77 = load { ptr, i64, i64 }, ptr %t73 + %t78 = extractvalue { ptr, i64, i64 } %t77, 1 + %t79 = icmp uge i64 %t76, %t78 + br i1 %t79, label %range8431, label %inrange8432 +range8431: + call void @finch_panic_index(ptr @.str.5468, i64 5103, i64 %t76, i64 %t78) + unreachable +inrange8432: + %t80 = extractvalue { ptr, i64, i64 } %t77, 0 + %t81 = getelementptr inbounds %S.ast.Node, ptr %t80, i64 %t76 + %t82 = load %S.ast.Node, ptr %t81 + store %S.ast.Node %t82, ptr %a83 + call void @finch.copy.S_ast_Node(ptr %a84, ptr %a83) + %t85 = load %S.ast.Node, ptr %a84 + store %S.ast.Node %t85, ptr %a86 + %t87 = load ptr, ptr %a1 + %t88 = load ptr, ptr %a1 + %t89 = load %S.ast.Node, ptr %a86 + %t90 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t91 = load i64, ptr %a70 + %t92 = load { ptr, i64, i64 }, ptr %t90 + %t93 = extractvalue { ptr, i64, i64 } %t92, 1 + %t94 = icmp uge i64 %t91, %t93 + br i1 %t94, label %range8433, label %inrange8434 +range8433: + call void @finch_panic_index(ptr @.str.5469, i64 5104, i64 %t91, i64 %t93) + unreachable +inrange8434: + %t95 = extractvalue { ptr, i64, i64 } %t92, 0 + %t96 = getelementptr inbounds %S.ast.Type, ptr %t95, i64 %t91 + %t97 = load %S.ast.Type, ptr %t96 + %t98 = call %S.gen.Val @finch.gen.exprWant(ptr %t88, %S.ast.Node %t89, %S.ast.Type %t97) + %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t100 = load i64, ptr %a70 + %t101 = load { ptr, i64, i64 }, ptr %t99 + %t102 = extractvalue { ptr, i64, i64 } %t101, 1 + %t103 = icmp uge i64 %t100, %t102 + br i1 %t103, label %range8435, label %inrange8436 +range8435: + call void @finch_panic_index(ptr @.str.5470, i64 5104, i64 %t100, i64 %t102) + unreachable +inrange8436: + %t104 = extractvalue { ptr, i64, i64 } %t101, 0 + %t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 %t100 + %t106 = load %S.ast.Type, ptr %t105 + %t107 = load %S.ast.Node, ptr %a86 + %t108 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 14 + %t109 = load i64, ptr %a70 + %t110 = load { ptr, i64, i64 }, ptr %t108 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range8437, label %inrange8438 +range8437: + call void @finch_panic_index(ptr @.str.5472, i64 5104, i64 %t109, i64 %t111) + unreachable +inrange8438: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i64 %t109 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } { ptr @.str.5471, i64 10, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.5473, i64 1, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = call %S.gen.Val @finch.gen.coerce(ptr %t87, %S.gen.Val %t98, %S.ast.Type %t106, %S.ast.Node %t107, { ptr, i64, i64 } %t124) + store %S.gen.Val %t98, ptr %a126 + call void @finch.drop.S_gen_Val(ptr %a126) + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_drop(ptr %a127) + store %S.gen.Val %t125, ptr %a128 + %t129 = load ptr, ptr %a1 + %t130 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t131 = load i64, ptr %a70 + %t132 = load { ptr, i64, i64 }, ptr %t130 + %t133 = extractvalue { ptr, i64, i64 } %t132, 1 + %t134 = icmp uge i64 %t131, %t133 + br i1 %t134, label %range8439, label %inrange8440 +range8439: + call void @finch_panic_index(ptr @.str.5474, i64 5106, i64 %t131, i64 %t133) + unreachable +inrange8440: + %t135 = extractvalue { ptr, i64, i64 } %t132, 0 + %t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i64 %t131 + %t137 = load %S.ast.Type, ptr %t136 + %t138 = call i1 @finch.gen.owning(ptr %t129, %S.ast.Type %t137) + br label %logic.from8441 +logic.from8441: + br i1 %t138, label %logic.rhs8442, label %logic.end8443 +logic.rhs8442: + %t139 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 + %t140 = load i1, ptr %t139 + %t141 = xor i1 %t140, true + br label %logic.rend8444 +logic.rend8444: + br label %logic.end8443 +logic.end8443: + %t142 = phi i1 [ false, %logic.from8441 ], [ %t141, %logic.rend8444 ] + br label %logic.from8445 +logic.from8445: + br i1 %t142, label %logic.rhs8446, label %logic.end8447 +logic.rhs8446: + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t144 = load i64, ptr %t143 + %t145 = icmp sgt i64 %t144, 0 + br label %logic.rend8448 +logic.rend8448: + br label %logic.end8447 +logic.end8447: + %t146 = phi i1 [ false, %logic.from8445 ], [ %t145, %logic.rend8448 ] + br label %logic.from8449 +logic.from8449: + br i1 %t146, label %logic.rhs8450, label %logic.end8451 +logic.rhs8450: + %t147 = load %S.ast.Node, ptr %a86 + %t148 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t147) + %t149 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t148, ptr %a150 + store { ptr, i64, i64 } %t149, ptr %a151 + %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + store { ptr, i64, i64 } %t148, ptr %a154 + call void @finch_str_drop(ptr %a154) + br label %logic.rend8452 +logic.rend8452: + br label %logic.end8451 +logic.end8451: + %t155 = phi i1 [ false, %logic.from8449 ], [ %t153, %logic.rend8452 ] + br i1 %t155, label %then8453, label %endif8455 +then8453: + %t156 = load ptr, ptr %a1 + %t157 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 + %t158 = load { ptr, i64, i64 }, ptr %t157 + %t159 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 1 + %t160 = load %S.ast.Type, ptr %t159 + %t161 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t156, { ptr, i64, i64 } %t158, %S.ast.Type %t160) + %t162 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t161, 0 + %t163 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 1 + %t164 = load %S.ast.Type, ptr %t163 + store %S.ast.Type %t164, ptr %a165 + call void @finch.copy.S_ast_Type(ptr %a166, ptr %a165) + %t167 = load %S.ast.Type, ptr %a166 + %t168 = insertvalue %S.gen.Val %t162, %S.ast.Type %t167, 1 + %t169 = insertvalue %S.gen.Val %t168, i1 true, 2 + %t170 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t169, ptr %a128 + store %S.gen.Val %t170, ptr %a171 + call void @finch.drop.S_gen_Val(ptr %a171) + br label %endif8455 +endif8455: + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 + %t173 = load ptr, ptr %a1 + %t174 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t175 = load i64, ptr %a70 + %t176 = load { ptr, i64, i64 }, ptr %t174 + %t177 = extractvalue { ptr, i64, i64 } %t176, 1 + %t178 = icmp uge i64 %t175, %t177 + br i1 %t178, label %range8456, label %inrange8457 +range8456: + call void @finch_panic_index(ptr @.str.5475, i64 5109, i64 %t175, i64 %t177) + unreachable +inrange8457: + %t179 = extractvalue { ptr, i64, i64 } %t176, 0 + %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i64 %t175 + %t181 = load %S.ast.Type, ptr %t180 + %t182 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t181) + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.5476, i64 1, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 + %t189 = load { ptr, i64, i64 }, ptr %t188 + store { ptr, i64, i64 } %t187, ptr %a191 + store { ptr, i64, i64 } %t189, ptr %a192 + call void @finch_str_concat(ptr %a190, ptr %a191, ptr %a192) + store { ptr, i64, i64 } %t187, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = load { ptr, i64, i64 }, ptr %a190 + %t195 = load i64, ptr %t172 + %t196 = add i64 %t195, 1 + call void @finch_arr_reserve(ptr %a45, i64 %t196, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t197 = load ptr, ptr %a45 + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i64 %t195 + store { ptr, i64, i64 } %t194, ptr %t198 + store i64 %t196, ptr %t172 + %t199 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 + %t200 = load i1, ptr %t199 + br i1 %t200, label %then8458, label %endif8460 +then8458: + %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 + %t202 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t202, ptr %a203 + call void @finch.copy.S_gen_Val(ptr %a204, ptr %a203) + %t205 = load %S.gen.Val, ptr %a204 + %t206 = load i64, ptr %t201 + %t207 = add i64 %t206, 1 + call void @finch_arr_reserve(ptr %a60, i64 %t207, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t208 = load ptr, ptr %a60 + %t209 = getelementptr inbounds %S.gen.Val, ptr %t208, i64 %t206 + store %S.gen.Val %t205, ptr %t209 + store i64 %t207, ptr %t201 + br label %endif8460 +endif8460: + %t210 = load ptr, ptr %a1 + %t211 = load %S.gen.Val, ptr %a128 + call void @finch.gen.hold(ptr %t210, %S.gen.Val %t211) + call void @finch.drop.S_gen_Val(ptr %a128) + call void @finch.drop.S_ast_Node(ptr %a86) + br label %for.step8429 +for.step8429: + %t212 = load i64, ptr %a70 + %t213 = add i64 %t212, 1 + store i64 %t213, ptr %a70 + br label %for.cond8427 +for.end8430: + %t214 = load ptr, ptr %a1 + %t215 = load %S.gen.FnSig, ptr %a21 + %t216 = load %S.ast.Node, ptr %a3 + %t217 = load { ptr, i64, i64 }, ptr %a45 + %t218 = load { ptr, i64, i64 }, ptr %a5 + %t219 = call %S.gen.Val @finch.gen.emitCall(ptr %t214, %S.gen.FnSig %t215, %S.ast.Node %t216, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t218) + store %S.gen.Val %t219, ptr %a220 + store i64 0, ptr %a221 + br label %each.cond8461 +each.cond8461: + %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 + %t223 = load i64, ptr %t222 + %t224 = load i64, ptr %a221 + %t225 = icmp slt i64 %t224, %t223 + br i1 %t225, label %each.body8462, label %each.end8464 +each.body8462: + %t226 = load ptr, ptr %a60 + %t227 = getelementptr inbounds %S.gen.Val, ptr %t226, i64 %t224 + %t228 = load %S.gen.Val, ptr %t227 + store %S.gen.Val %t228, ptr %a229 + %t230 = load ptr, ptr %a1 + %t231 = load %S.gen.Val, ptr %a229 + call void @finch.gen.release(ptr %t230, %S.gen.Val %t231) + br label %each.step8463 +each.step8463: + %t232 = load i64, ptr %a221 + %t233 = add i64 %t232, 1 + store i64 %t233, ptr %a221 + br label %each.cond8461 +each.end8464: + %t234 = load ptr, ptr %a1 + %t235 = load i64, ptr %a66 + call void @finch.gen.heldEnd(ptr %t234, i64 %t235) + %t236 = load %S.gen.Val, ptr %a220 + call void @finch.drop.arr_S_gen_Val(ptr %a60) + call void @finch.drop.arr_str(ptr %a45) + call void @finch.drop.S_gen_FnSig(ptr %a21) + ret %S.gen.Val %t236 +} + +define internal %S.gen.Val @finch.gen.emitCall(ptr %p0, %S.gen.FnSig %p1, %S.ast.Node %p2, { ptr, i64, i64 } %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.FnSig, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca %S.ast.Type, align 16 + %a201 = alloca %S.ast.Type, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca %S.ast.Type, align 16 + %a235 = alloca %S.ast.Type, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca %S.ast.Type, align 16 + %a255 = alloca %S.ast.Type, align 16 + %a264 = alloca %S.ast.Type, align 16 + %a265 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.gen.FnSig %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 + %t7 = load i1, ptr %t6 + br label %logic.from8465 +logic.from8465: + br i1 %t7, label %logic.rhs8466, label %logic.end8467 +logic.rhs8466: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic8468, label %ok8469 +panic8468: + call void @finch_panic(ptr @.str.5477, i64 5125, ptr @.str.5478) + unreachable +ok8469: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 41 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = load %S.ast.Node, ptr %a3 + %t13 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t12) + store { ptr, i64, i64 } %t11, ptr %a14 + store { ptr, i64, i64 } %t13, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp eq i32 %t16, 0 + store { ptr, i64, i64 } %t13, ptr %a18 + call void @finch_str_drop(ptr %a18) + br label %logic.rend8470 +logic.rend8470: + br label %logic.end8467 +logic.end8467: + %t19 = phi i1 [ false, %logic.from8465 ], [ %t17, %logic.rend8470 ] + br i1 %t19, label %then8471, label %endif8473 +then8471: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Node, ptr %a3 + %t22 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.5479, i64 1, i64 0 }, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.5480, i64 39, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t31, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t31, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.5481, i64 19, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + %t43 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t42, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t42, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.5482, i64 27, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t53, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t53, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t59, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.5483, i64 5, i64 0 }, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + store { ptr, i64, i64 } %t59, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a60 + call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } %t64) + store { ptr, i64, i64 } %t64, ptr %a65 + call void @finch_str_drop(ptr %a65) + br label %endif8473 +endif8473: + %t66 = load ptr, ptr %a1 + %t67 = load %S.gen.FnSig, ptr %a2 + %t68 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t66, %S.gen.FnSig %t67) + store { ptr, i64, i64 } { ptr @.str.5484, i64 5, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.5485, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t78, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t78, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.5486, i64 1, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5487, i64 2, i64 0 }, ptr %a92 + call void @finch_str_join(ptr %a93, ptr %a4, ptr %a92) + %t94 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t90, ptr %a96 + store { ptr, i64, i64 } %t94, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t90, ptr %a98 + call void @finch_str_drop(ptr %a98) + store { ptr, i64, i64 } %t94, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.5488, i64 1, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + store { ptr, i64, i64 } %t100, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a101 + store { ptr, i64, i64 } %t105, ptr %a106 + %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 + %t108 = load i1, ptr %t107 + br i1 %t108, label %then8474, label %endif8476 +then8474: + %t109 = load ptr, ptr %a1 + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t109, { ptr, i64, i64 } %t110) + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load ptr, ptr %a1 + %t114 = load ptr, ptr %a1 + %t115 = load %S.gen.FnSig, ptr %a2 + %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t114, %S.gen.FnSig %t115) + store { ptr, i64, i64 } { ptr @.str.5489, i64 13, i64 0 }, ptr %a118 + store { ptr, i64, i64 } %t116, ptr %a119 + call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) + store { ptr, i64, i64 } %t116, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.5490, i64 1, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t126, ptr %a129 + store { ptr, i64, i64 } %t127, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t126, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t132, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.5491, i64 3, i64 0 }, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + %t138 = call { ptr, i64, i64 } @finch.gen.op(ptr %t113, { ptr, i64, i64 } %t137) + store { ptr, i64, i64 } %t137, ptr %a139 + call void @finch_str_drop(ptr %a139) + store { ptr, i64, i64 } %t138, ptr %a140 + %t141 = load ptr, ptr %a1 + %t142 = load { ptr, i64, i64 }, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.5492, i64 7, i64 0 }, ptr %a144 + store { ptr, i64, i64 } %t142, ptr %a145 + call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a143 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.5493, i64 6, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = call { ptr, i64, i64 } @finch.gen.op(ptr %t141, { ptr, i64, i64 } %t151) + store { ptr, i64, i64 } %t151, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load ptr, ptr %a1 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic8477, label %ok8478 +panic8477: + call void @finch_panic(ptr @.str.5494, i64 5132, ptr @.str.5495) + unreachable +ok8478: + %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 42 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t152, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load ptr, ptr %a1 + %t160 = load ptr, ptr %a1 + %t161 = load %S.gen.FnSig, ptr %a2 + %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t160, %S.gen.FnSig %t161) + store { ptr, i64, i64 } { ptr @.str.5496, i64 13, i64 0 }, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t162, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t167, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.5497, i64 1, i64 0 }, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t167, ptr %a171 + call void @finch_str_drop(ptr %a171) + %t172 = load { ptr, i64, i64 }, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t172, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t172, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5498, i64 3, i64 0 }, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t178, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t159, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load ptr, ptr %a1 + %t187 = icmp eq ptr %t186, null + br i1 %t187, label %panic8479, label %ok8480 +panic8479: + call void @finch_panic(ptr @.str.5499, i64 5133, ptr @.str.5500) + unreachable +ok8480: + %t188 = getelementptr inbounds %S.gen.Gen, ptr %t186, i32 0, i32 43 + %t189 = load { ptr, i64, i64 }, ptr %t188 + store { ptr, i64, i64 } %t184, ptr %t188 + store { ptr, i64, i64 } %t189, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t192 = getelementptr inbounds %S.ast.Type, ptr %t191, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + store { ptr, i64, i64 } %t193, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.5501, i64 4, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br i1 %t197, label %then8481, label %endif8483 +then8481: + %t198 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t199 = load %S.ast.Type, ptr %t198 + store %S.ast.Type %t199, ptr %a200 + call void @finch.copy.S_ast_Type(ptr %a201, ptr %a200) + %t202 = load %S.ast.Type, ptr %a201 + %t203 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t202, 1 + call void @finch_str_drop(ptr %a140) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t203 +endif8483: + %t204 = load ptr, ptr %a1 + %t205 = load ptr, ptr %a1 + %t206 = load %S.gen.FnSig, ptr %a2 + %t207 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t205, %S.gen.FnSig %t206) + store { ptr, i64, i64 } { ptr @.str.5502, i64 13, i64 0 }, ptr %a209 + store { ptr, i64, i64 } %t207, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + store { ptr, i64, i64 } %t207, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t212, ptr %a214 + store { ptr, i64, i64 } { ptr @.str.5503, i64 1, i64 0 }, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t212, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + %t218 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t217, ptr %a220 + store { ptr, i64, i64 } %t218, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t217, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.5504, i64 3, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t204, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t228, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t229, 0 + %t232 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t233 = load %S.ast.Type, ptr %t232 + store %S.ast.Type %t233, ptr %a234 + call void @finch.copy.S_ast_Type(ptr %a235, ptr %a234) + %t236 = load %S.ast.Type, ptr %a235 + %t237 = insertvalue %S.gen.Val %t231, %S.ast.Type %t236, 1 + %t238 = load ptr, ptr %a1 + %t239 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t240 = load %S.ast.Type, ptr %t239 + %t241 = call i1 @finch.gen.owning(ptr %t238, %S.ast.Type %t240) + %t242 = insertvalue %S.gen.Val %t237, i1 %t241, 2 + call void @finch_str_drop(ptr %a140) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t242 +endif8476: + %t243 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i32 0, i32 0 + %t245 = load { ptr, i64, i64 }, ptr %t244 + store { ptr, i64, i64 } %t245, ptr %a246 + store { ptr, i64, i64 } { ptr @.str.5505, i64 4, i64 0 }, ptr %a247 + %t248 = call i32 @finch_str_eq(ptr %a246, ptr %a247) + %t249 = icmp ne i32 %t248, 0 + br i1 %t249, label %then8484, label %endif8486 +then8484: + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a106 + call void @finch.gen.emit(ptr %t250, { ptr, i64, i64 } %t251) + %t252 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t253 = load %S.ast.Type, ptr %t252 + store %S.ast.Type %t253, ptr %a254 + call void @finch.copy.S_ast_Type(ptr %a255, ptr %a254) + %t256 = load %S.ast.Type, ptr %a255 + %t257 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t256, 1 + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t257 +endif8486: + %t258 = load ptr, ptr %a1 + %t259 = load { ptr, i64, i64 }, ptr %a106 + %t260 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t259) + %t261 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t260, 0 + %t262 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t263 = load %S.ast.Type, ptr %t262 + store %S.ast.Type %t263, ptr %a264 + call void @finch.copy.S_ast_Type(ptr %a265, ptr %a264) + %t266 = load %S.ast.Type, ptr %a265 + %t267 = insertvalue %S.gen.Val %t261, %S.ast.Type %t266, 1 + %t268 = load ptr, ptr %a1 + %t269 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t270 = load %S.ast.Type, ptr %t269 + %t271 = call i1 @finch.gen.owning(ptr %t268, %S.ast.Type %t270) + %t272 = insertvalue %S.gen.Val %t267, i1 %t271, 2 + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t272 +} + +define internal %S.gen.Val @finch.gen.construct(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a16 = alloca %S.gen.StructDef, align 16 + %a17 = alloca %S.gen.StructDef, align 16 + %a19 = alloca %S.gen.StructDef, align 16 + %a20 = alloca %S.ast.Node, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a44 = alloca %S.ast.Node, align 16 + %a47 = alloca %S.ast.Node, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca %S.ast.Type, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca i1, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca i64, align 16 + %a95 = alloca i64, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca i64, align 16 + %a196 = alloca i64, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca i64, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca i64, align 16 + %a294 = alloca i64, align 16 + %a305 = alloca %S.ast.Type, align 16 + %a306 = alloca %S.ast.Type, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a309 = alloca %S.gen.Val, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca %S.gen.Val, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca %S.gen.Val, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca %S.gen.Val, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca %S.gen.Val, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca %S.ast.Type, align 16 + %a562 = alloca %S.ast.Type, align 16 + %a566 = alloca %S.gen.Val, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a644 = alloca %S.ast.Type, align 16 + %a645 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic8487, label %ok8488 +panic8487: + call void @finch_panic(ptr @.str.5506, i64 5147, ptr @.str.5507) + unreachable +ok8488: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range8489, label %inrange8490 +range8489: + call void @finch_panic_index(ptr @.str.5508, i64 5147, i64 %t9, i64 %t11) + unreachable +inrange8490: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 + %t15 = load %S.gen.StructDef, ptr %t14 + store %S.gen.StructDef %t15, ptr %a16 + call void @finch.copy.S_gen_StructDef(ptr %a17, ptr %a16) + %t18 = load %S.gen.StructDef, ptr %a17 + store %S.gen.StructDef %t18, ptr %a19 + store %S.ast.Node zeroinitializer, ptr %a20 + %t21 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 + %t22 = load i1, ptr %t21 + %t23 = xor i1 %t22, true + br i1 %t23, label %then8491, label %endif8493 +then8491: + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic8494, label %ok8495 +panic8494: + call void @finch_panic(ptr @.str.5509, i64 5150, ptr @.str.5510) + unreachable +ok8495: + %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 13 + %t28 = load i64, ptr %t27 + %t29 = load { ptr, i64, i64 }, ptr %t26 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range8496, label %inrange8497 +range8496: + call void @finch_panic_index(ptr @.str.5511, i64 5150, i64 %t28, i64 %t30) + unreachable +inrange8497: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 + %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 + %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 14 + %t36 = load i64, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %t34 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range8498, label %inrange8499 +range8498: + call void @finch_panic_index(ptr @.str.5512, i64 5150, i64 %t36, i64 %t38) + unreachable +inrange8499: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 + %t42 = load %S.ast.Node, ptr %t41 + store %S.ast.Node %t42, ptr %a43 + call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) + %t45 = load %S.ast.Node, ptr %a44 + %t46 = load %S.ast.Node, ptr %a20 + store %S.ast.Node %t45, ptr %a20 + store %S.ast.Node %t46, ptr %a47 + call void @finch.drop.S_ast_Node(ptr %a47) + br label %endif8493 +endif8493: + %t48 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.5513, i64 6, i64 0 }, 0 + %t49 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_copy(ptr %a52, ptr %a51) + %t53 = load { ptr, i64, i64 }, ptr %a52 + %t54 = insertvalue %S.ast.Type %t48, { ptr, i64, i64 } %t53, 2 + %t55 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 + %t56 = load { ptr, i64, i64 }, ptr %t55 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_copy(ptr %a58, ptr %a57) + %t59 = load { ptr, i64, i64 }, ptr %a58 + %t60 = insertvalue %S.ast.Type %t54, { ptr, i64, i64 } %t59, 3 + store %S.ast.Type %t60, ptr %a61 + %t62 = load ptr, ptr %a1 + %t63 = load %S.ast.Type, ptr %a61 + %t64 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t62, %S.ast.Type %t63) + store { ptr, i64, i64 } %t64, ptr %a65 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t67 = load i64, ptr %t66 + %t68 = icmp sgt i64 %t67, 0 + br label %logic.from8500 +logic.from8500: + br i1 %t68, label %logic.rhs8501, label %logic.end8502 +logic.rhs8501: + %t69 = load { ptr, i64, i64 }, ptr %a4 + %t70 = extractvalue { ptr, i64, i64 } %t69, 1 + %t71 = icmp uge i64 0, %t70 + br i1 %t71, label %range8503, label %inrange8504 +range8503: + call void @finch_panic_index(ptr @.str.5514, i64 5154, i64 0, i64 %t70) + unreachable +inrange8504: + %t72 = extractvalue { ptr, i64, i64 } %t69, 0 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i64 0 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = icmp sgt i64 %t75, 0 + br label %logic.rend8505 +logic.rend8505: + br label %logic.end8502 +logic.end8502: + %t77 = phi i1 [ false, %logic.from8500 ], [ %t76, %logic.rend8505 ] + store i1 %t77, ptr %a78 + store { ptr, i64, i64 } zeroinitializer, ptr %a79 + %t80 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i32 0, i32 1 + %t82 = load i64, ptr %t81 + store i64 0, ptr %a83 + br label %for.cond8506 +for.cond8506: + %t84 = load i64, ptr %a83 + %t85 = icmp slt i64 %t84, %t82 + br i1 %t85, label %for.body8507, label %for.end8509 +for.body8507: + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %a79, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %a79, i64 %t88, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %a79 + %t90 = getelementptr inbounds i64, ptr %t89, i64 %t87 + store i64 -1, ptr %t90 + store i64 %t88, ptr %t86 + br label %for.step8508 +for.step8508: + %t91 = load i64, ptr %a83 + %t92 = add i64 %t91, 1 + store i64 %t92, ptr %a83 + br label %for.cond8506 +for.end8509: + %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t94 = load i64, ptr %t93 + store i64 0, ptr %a95 + br label %for.cond8510 +for.cond8510: + %t96 = load i64, ptr %a95 + %t97 = icmp slt i64 %t96, %t94 + br i1 %t97, label %for.body8511, label %for.end8513 +for.body8511: + %t98 = load i64, ptr %a95 + %t99 = load { ptr, i64, i64 }, ptr %a4 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 %t98, %t100 + br i1 %t101, label %range8514, label %inrange8515 +range8514: + call void @finch_panic_index(ptr @.str.5515, i64 5160, i64 %t98, i64 %t100) + unreachable +inrange8515: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t98 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 + %t105 = load i64, ptr %t104 + %t106 = icmp sgt i64 %t105, 0 + %t107 = load i1, ptr %a78 + %t108 = icmp ne i1 %t106, %t107 + br i1 %t108, label %then8516, label %endif8518 +then8516: + %t109 = load ptr, ptr %a1 + %t110 = load i64, ptr %a95 + %t111 = load { ptr, i64, i64 }, ptr %a3 + %t112 = extractvalue { ptr, i64, i64 } %t111, 1 + %t113 = icmp uge i64 %t110, %t112 + br i1 %t113, label %range8519, label %inrange8520 +range8519: + call void @finch_panic_index(ptr @.str.5516, i64 5161, i64 %t110, i64 %t112) + unreachable +inrange8520: + %t114 = extractvalue { ptr, i64, i64 } %t111, 0 + %t115 = getelementptr inbounds %S.ast.Node, ptr %t114, i64 %t110 + %t116 = load %S.ast.Node, ptr %t115 + call void @finch.gen.fail(ptr %t109, %S.ast.Node %t116, { ptr, i64, i64 } { ptr @.str.5517, i64 69, i64 0 }) + br label %endif8518 +endif8518: + %t117 = load i1, ptr %a78 + %t118 = xor i1 %t117, true + br i1 %t118, label %then8521, label %endif8523 +then8521: + %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t120 = load i64, ptr %t119 + %t121 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t121, i32 0, i32 1 + %t123 = load i64, ptr %t122 + %t124 = icmp ne i64 %t120, %t123 + br i1 %t124, label %then8524, label %endif8526 +then8524: + %t125 = load ptr, ptr %a1 + %t126 = load %S.ast.Node, ptr %a5 + %t127 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.5518, i64 5, i64 0 }, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a129 + %t133 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load i64, ptr %t134 + call void @finch_str_from_int(ptr %a136, i64 %t135) + %t137 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t132, ptr %a139 + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t132, ptr %a141 + call void @finch_str_drop(ptr %a141) + store { ptr, i64, i64 } %t137, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a138 + store { ptr, i64, i64 } %t143, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.5519, i64 17, i64 0 }, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + store { ptr, i64, i64 } %t143, ptr %a147 + call void @finch_str_drop(ptr %a147) + %t148 = load { ptr, i64, i64 }, ptr %a144 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t150 = load i64, ptr %t149 + call void @finch_str_from_int(ptr %a151, i64 %t150) + %t152 = load { ptr, i64, i64 }, ptr %a151 + store { ptr, i64, i64 } %t148, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t148, ptr %a156 + call void @finch_str_drop(ptr %a156) + store { ptr, i64, i64 } %t152, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a153 + store { ptr, i64, i64 } %t158, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.5520, i64 23, i64 0 }, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t158, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a159 + %t164 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t165 = load { ptr, i64, i64 }, ptr %t164 + store { ptr, i64, i64 } %t163, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + store { ptr, i64, i64 } %t163, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t170, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.5521, i64 15, i64 0 }, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t170, ptr %a174 + call void @finch_str_drop(ptr %a174) + %t175 = load { ptr, i64, i64 }, ptr %a171 + call void @finch.gen.fail(ptr %t125, %S.ast.Node %t126, { ptr, i64, i64 } %t175) + store { ptr, i64, i64 } %t175, ptr %a176 + call void @finch_str_drop(ptr %a176) + br label %endif8526 +endif8526: + %t177 = load i64, ptr %a95 + %t178 = load i64, ptr %a95 + %t179 = load { ptr, i64, i64 }, ptr %a79 + %t180 = extractvalue { ptr, i64, i64 } %t179, 1 + %t181 = icmp uge i64 %t178, %t180 + br i1 %t181, label %range8527, label %inrange8528 +range8527: + call void @finch_panic_index(ptr @.str.5522, i64 5167, i64 %t178, i64 %t180) + unreachable +inrange8528: + %t182 = extractvalue { ptr, i64, i64 } %t179, 0 + %t183 = getelementptr inbounds i64, ptr %t182, i64 %t178 + store i64 %t177, ptr %t183 + br label %for.step8512 +endif8523: + %t184 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i32 0, i32 1 + %t186 = load i64, ptr %a95 + %t187 = load { ptr, i64, i64 }, ptr %a4 + %t188 = extractvalue { ptr, i64, i64 } %t187, 1 + %t189 = icmp uge i64 %t186, %t188 + br i1 %t189, label %range8529, label %inrange8530 +range8529: + call void @finch_panic_index(ptr @.str.5523, i64 5170, i64 %t186, i64 %t188) + unreachable +inrange8530: + %t190 = extractvalue { ptr, i64, i64 } %t187, 0 + %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i64 %t186 + %t192 = load { ptr, i64, i64 }, ptr %t191 + store i64 -1, ptr %a193 + %t194 = load i64, ptr %t185 + %t195 = load ptr, ptr %t184 + store i64 0, ptr %a196 + br label %find.cond8531 +find.cond8531: + %t197 = load i64, ptr %a196 + %t198 = icmp slt i64 %t197, %t194 + br i1 %t198, label %find.body8532, label %find.end8535 +find.body8532: + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t195, i64 %t197 + %t200 = load { ptr, i64, i64 }, ptr %t199 + store { ptr, i64, i64 } %t200, ptr %a201 + store { ptr, i64, i64 } %t192, ptr %a202 + %t203 = call i32 @finch_str_eq(ptr %a201, ptr %a202) + %t204 = icmp ne i32 %t203, 0 + br i1 %t204, label %find.hit8533, label %find.next8534 +find.hit8533: + store i64 %t197, ptr %a193 + br label %find.end8535 +find.next8534: + %t205 = add i64 %t197, 1 + store i64 %t205, ptr %a196 + br label %find.cond8531 +find.end8535: + %t206 = load i64, ptr %a193 + store i64 %t206, ptr %a207 + %t208 = load i64, ptr %a207 + %t209 = icmp slt i64 %t208, 0 + br i1 %t209, label %then8536, label %endif8538 +then8536: + %t210 = load ptr, ptr %a1 + %t211 = load i64, ptr %a95 + %t212 = load { ptr, i64, i64 }, ptr %a3 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 %t211, %t213 + br i1 %t214, label %range8539, label %inrange8540 +range8539: + call void @finch_panic_index(ptr @.str.5524, i64 5172, i64 %t211, i64 %t213) + unreachable +inrange8540: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 %t211 + %t217 = load %S.ast.Node, ptr %t216 + %t218 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t219 = load { ptr, i64, i64 }, ptr %t218 + store { ptr, i64, i64 } %t219, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.5525, i64 15, i64 0 }, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a220 + %t224 = load i64, ptr %a95 + %t225 = load { ptr, i64, i64 }, ptr %a4 + %t226 = extractvalue { ptr, i64, i64 } %t225, 1 + %t227 = icmp uge i64 %t224, %t226 + br i1 %t227, label %range8541, label %inrange8542 +range8541: + call void @finch_panic_index(ptr @.str.5526, i64 5172, i64 %t224, i64 %t226) + unreachable +inrange8542: + %t228 = extractvalue { ptr, i64, i64 } %t225, 0 + %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i64 %t224 + %t230 = load { ptr, i64, i64 }, ptr %t229 + store { ptr, i64, i64 } %t223, ptr %a232 + store { ptr, i64, i64 } %t230, ptr %a233 + call void @finch_str_concat(ptr %a231, ptr %a232, ptr %a233) + store { ptr, i64, i64 } %t223, ptr %a234 + call void @finch_str_drop(ptr %a234) + %t235 = load { ptr, i64, i64 }, ptr %a231 + store { ptr, i64, i64 } %t235, ptr %a237 + store { ptr, i64, i64 } { ptr @.str.5527, i64 1, i64 0 }, ptr %a238 + call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) + store { ptr, i64, i64 } %t235, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a236 + call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t240) + store { ptr, i64, i64 } %t240, ptr %a241 + call void @finch_str_drop(ptr %a241) + br label %endif8538 +endif8538: + %t242 = load i64, ptr %a207 + %t243 = load { ptr, i64, i64 }, ptr %a79 + %t244 = extractvalue { ptr, i64, i64 } %t243, 1 + %t245 = icmp uge i64 %t242, %t244 + br i1 %t245, label %range8543, label %inrange8544 +range8543: + call void @finch_panic_index(ptr @.str.5528, i64 5174, i64 %t242, i64 %t244) + unreachable +inrange8544: + %t246 = extractvalue { ptr, i64, i64 } %t243, 0 + %t247 = getelementptr inbounds i64, ptr %t246, i64 %t242 + %t248 = load i64, ptr %t247 + %t249 = icmp sge i64 %t248, 0 + br i1 %t249, label %then8545, label %endif8547 +then8545: + %t250 = load ptr, ptr %a1 + %t251 = load i64, ptr %a95 + %t252 = load { ptr, i64, i64 }, ptr %a3 + %t253 = extractvalue { ptr, i64, i64 } %t252, 1 + %t254 = icmp uge i64 %t251, %t253 + br i1 %t254, label %range8548, label %inrange8549 +range8548: + call void @finch_panic_index(ptr @.str.5529, i64 5175, i64 %t251, i64 %t253) + unreachable +inrange8549: + %t255 = extractvalue { ptr, i64, i64 } %t252, 0 + %t256 = getelementptr inbounds %S.ast.Node, ptr %t255, i64 %t251 + %t257 = load %S.ast.Node, ptr %t256 + %t258 = load i64, ptr %a95 + %t259 = load { ptr, i64, i64 }, ptr %a4 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 %t258, %t260 + br i1 %t261, label %range8550, label %inrange8551 +range8550: + call void @finch_panic_index(ptr @.str.5531, i64 5175, i64 %t258, i64 %t260) + unreachable +inrange8551: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 %t258 + %t264 = load { ptr, i64, i64 }, ptr %t263 + store { ptr, i64, i64 } { ptr @.str.5530, i64 11, i64 0 }, ptr %a266 + store { ptr, i64, i64 } %t264, ptr %a267 + call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a265 + store { ptr, i64, i64 } %t268, ptr %a270 + store { ptr, i64, i64 } { ptr @.str.5532, i64 16, i64 0 }, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t268, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + call void @finch.gen.fail(ptr %t250, %S.ast.Node %t257, { ptr, i64, i64 } %t273) + store { ptr, i64, i64 } %t273, ptr %a274 + call void @finch_str_drop(ptr %a274) + br label %endif8547 +endif8547: + %t275 = load i64, ptr %a95 + %t276 = load i64, ptr %a207 + %t277 = load { ptr, i64, i64 }, ptr %a79 + %t278 = extractvalue { ptr, i64, i64 } %t277, 1 + %t279 = icmp uge i64 %t276, %t278 + br i1 %t279, label %range8552, label %inrange8553 +range8552: + call void @finch_panic_index(ptr @.str.5533, i64 5177, i64 %t276, i64 %t278) + unreachable +inrange8553: + %t280 = extractvalue { ptr, i64, i64 } %t277, 0 + %t281 = getelementptr inbounds i64, ptr %t280, i64 %t276 + store i64 %t275, ptr %t281 + br label %for.step8512 +for.step8512: + %t282 = load i64, ptr %a95 + %t283 = add i64 %t282, 1 + store i64 %t283, ptr %a95 + br label %for.cond8510 +for.end8513: + store { ptr, i64, i64 } { ptr @.str.5534, i64 15, i64 0 }, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = icmp eq ptr %t285, null + br i1 %t286, label %panic8554, label %ok8555 +panic8554: + call void @finch_panic(ptr @.str.5535, i64 5180, ptr @.str.5536) + unreachable +ok8555: + %t287 = getelementptr inbounds %S.gen.Gen, ptr %t285, i32 0, i32 11 + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i32 0, i32 1 + %t289 = load i64, ptr %t288 + store i64 %t289, ptr %a290 + %t291 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i32 0, i32 1 + %t293 = load i64, ptr %t292 + store i64 0, ptr %a294 + br label %for.cond8556 +for.cond8556: + %t295 = load i64, ptr %a294 + %t296 = icmp slt i64 %t295, %t293 + br i1 %t296, label %for.body8557, label %for.end8559 +for.body8557: + %t297 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 12 + %t298 = load i64, ptr %a294 + %t299 = load { ptr, i64, i64 }, ptr %t297 + %t300 = extractvalue { ptr, i64, i64 } %t299, 1 + %t301 = icmp uge i64 %t298, %t300 + br i1 %t301, label %range8560, label %inrange8561 +range8560: + call void @finch_panic_index(ptr @.str.5537, i64 5182, i64 %t298, i64 %t300) + unreachable +inrange8561: + %t302 = extractvalue { ptr, i64, i64 } %t299, 0 + %t303 = getelementptr inbounds %S.ast.Type, ptr %t302, i64 %t298 + %t304 = load %S.ast.Type, ptr %t303 + store %S.ast.Type %t304, ptr %a305 + call void @finch.copy.S_ast_Type(ptr %a306, ptr %a305) + %t307 = load %S.ast.Type, ptr %a306 + store %S.ast.Type %t307, ptr %a308 + store %S.gen.Val zeroinitializer, ptr %a309 + %t310 = load i64, ptr %a294 + %t311 = load { ptr, i64, i64 }, ptr %a79 + %t312 = extractvalue { ptr, i64, i64 } %t311, 1 + %t313 = icmp uge i64 %t310, %t312 + br i1 %t313, label %range8562, label %inrange8563 +range8562: + call void @finch_panic_index(ptr @.str.5538, i64 5184, i64 %t310, i64 %t312) + unreachable +inrange8563: + %t314 = extractvalue { ptr, i64, i64 } %t311, 0 + %t315 = getelementptr inbounds i64, ptr %t314, i64 %t310 + %t316 = load i64, ptr %t315 + %t317 = icmp sge i64 %t316, 0 + br i1 %t317, label %then8564, label %else8565 +then8564: + %t318 = load ptr, ptr %a1 + %t319 = load ptr, ptr %a1 + %t320 = load i64, ptr %a294 + %t321 = load { ptr, i64, i64 }, ptr %a79 + %t322 = extractvalue { ptr, i64, i64 } %t321, 1 + %t323 = icmp uge i64 %t320, %t322 + br i1 %t323, label %range8567, label %inrange8568 +range8567: + call void @finch_panic_index(ptr @.str.5539, i64 5185, i64 %t320, i64 %t322) + unreachable +inrange8568: + %t324 = extractvalue { ptr, i64, i64 } %t321, 0 + %t325 = getelementptr inbounds i64, ptr %t324, i64 %t320 + %t326 = load i64, ptr %t325 + %t327 = load { ptr, i64, i64 }, ptr %a3 + %t328 = extractvalue { ptr, i64, i64 } %t327, 1 + %t329 = icmp uge i64 %t326, %t328 + br i1 %t329, label %range8569, label %inrange8570 +range8569: + call void @finch_panic_index(ptr @.str.5540, i64 5185, i64 %t326, i64 %t328) + unreachable +inrange8570: + %t330 = extractvalue { ptr, i64, i64 } %t327, 0 + %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 + %t332 = load %S.ast.Node, ptr %t331 + %t333 = load %S.ast.Type, ptr %a308 + %t334 = call %S.gen.Val @finch.gen.exprWant(ptr %t319, %S.ast.Node %t332, %S.ast.Type %t333) + %t335 = load %S.ast.Type, ptr %a308 + %t336 = load i64, ptr %a294 + %t337 = load { ptr, i64, i64 }, ptr %a79 + %t338 = extractvalue { ptr, i64, i64 } %t337, 1 + %t339 = icmp uge i64 %t336, %t338 + br i1 %t339, label %range8571, label %inrange8572 +range8571: + call void @finch_panic_index(ptr @.str.5541, i64 5185, i64 %t336, i64 %t338) + unreachable +inrange8572: + %t340 = extractvalue { ptr, i64, i64 } %t337, 0 + %t341 = getelementptr inbounds i64, ptr %t340, i64 %t336 + %t342 = load i64, ptr %t341 + %t343 = load { ptr, i64, i64 }, ptr %a3 + %t344 = extractvalue { ptr, i64, i64 } %t343, 1 + %t345 = icmp uge i64 %t342, %t344 + br i1 %t345, label %range8573, label %inrange8574 +range8573: + call void @finch_panic_index(ptr @.str.5542, i64 5185, i64 %t342, i64 %t344) + unreachable +inrange8574: + %t346 = extractvalue { ptr, i64, i64 } %t343, 0 + %t347 = getelementptr inbounds %S.ast.Node, ptr %t346, i64 %t342 + %t348 = load %S.ast.Node, ptr %t347 + %t349 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t350 = load i64, ptr %a294 + %t351 = load { ptr, i64, i64 }, ptr %t349 + %t352 = extractvalue { ptr, i64, i64 } %t351, 1 + %t353 = icmp uge i64 %t350, %t352 + br i1 %t353, label %range8575, label %inrange8576 +range8575: + call void @finch_panic_index(ptr @.str.5544, i64 5185, i64 %t350, i64 %t352) + unreachable +inrange8576: + %t354 = extractvalue { ptr, i64, i64 } %t351, 0 + %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i64 %t350 + %t356 = load { ptr, i64, i64 }, ptr %t355 + store { ptr, i64, i64 } { ptr @.str.5543, i64 11, i64 0 }, ptr %a358 + store { ptr, i64, i64 } %t356, ptr %a359 + call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) + %t360 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t360, ptr %a362 + store { ptr, i64, i64 } { ptr @.str.5545, i64 1, i64 0 }, ptr %a363 + call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) + store { ptr, i64, i64 } %t360, ptr %a364 + call void @finch_str_drop(ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a361 + %t366 = call %S.gen.Val @finch.gen.coerce(ptr %t318, %S.gen.Val %t334, %S.ast.Type %t335, %S.ast.Node %t348, { ptr, i64, i64 } %t365) + store %S.gen.Val %t334, ptr %a367 + call void @finch.drop.S_gen_Val(ptr %a367) + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load %S.gen.Val, ptr %a309 + store %S.gen.Val %t366, ptr %a309 + store %S.gen.Val %t369, ptr %a370 + call void @finch.drop.S_gen_Val(ptr %a370) + br label %endif8566 +else8565: + %t371 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 + %t372 = load i1, ptr %t371 + %t373 = xor i1 %t372, true + br label %logic.from8577 +logic.from8577: + br i1 %t373, label %logic.rhs8578, label %logic.end8579 +logic.rhs8578: + %t374 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 + %t375 = load i64, ptr %a294 + %t376 = load { ptr, i64, i64 }, ptr %t374 + %t377 = extractvalue { ptr, i64, i64 } %t376, 1 + %t378 = icmp uge i64 %t375, %t377 + br i1 %t378, label %range8580, label %inrange8581 +range8580: + call void @finch_panic_index(ptr @.str.5546, i64 5186, i64 %t375, i64 %t377) + unreachable +inrange8581: + %t379 = extractvalue { ptr, i64, i64 } %t376, 0 + %t380 = getelementptr inbounds %S.ast.Node, ptr %t379, i64 %t375 + %t381 = getelementptr inbounds %S.ast.Node, ptr %t380, i32 0, i32 9 + %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %t381, i32 0, i32 1 + %t383 = load i64, ptr %t382 + %t384 = icmp sgt i64 %t383, 0 + br label %logic.rend8582 +logic.rend8582: + br label %logic.end8579 +logic.end8579: + %t385 = phi i1 [ false, %logic.from8577 ], [ %t384, %logic.rend8582 ] + br i1 %t385, label %then8583, label %else8584 +then8583: + %t386 = load ptr, ptr %a1 + %t387 = icmp eq ptr %t386, null + br i1 %t387, label %panic8586, label %ok8587 +panic8586: + call void @finch_panic(ptr @.str.5547, i64 5188, ptr @.str.5548) + unreachable +ok8587: + %t388 = getelementptr inbounds %S.gen.Gen, ptr %t386, i32 0, i32 10 + %t389 = load { ptr, i64, i64 }, ptr %t388 + store { ptr, i64, i64 } %t389, ptr %a390 + call void @finch.copy.arr_S_gen_Scope(ptr %a391, ptr %a390) + %t392 = load { ptr, i64, i64 }, ptr %a391 + store { ptr, i64, i64 } %t392, ptr %a393 + %t394 = load ptr, ptr %a1 + %t395 = icmp eq ptr %t394, null + br i1 %t395, label %panic8588, label %ok8589 +panic8588: + call void @finch_panic(ptr @.str.5549, i64 5189, ptr @.str.5550) + unreachable +ok8589: + %t396 = getelementptr inbounds %S.gen.Gen, ptr %t394, i32 0, i32 14 + %t397 = load { ptr, i64, i64 }, ptr %t396 + store { ptr, i64, i64 } %t397, ptr %a398 + call void @finch_str_copy(ptr %a399, ptr %a398) + %t400 = load { ptr, i64, i64 }, ptr %a399 + store { ptr, i64, i64 } %t400, ptr %a401 + %t402 = load ptr, ptr %a1 + %t403 = icmp eq ptr %t402, null + br i1 %t403, label %panic8590, label %ok8591 +panic8590: + call void @finch_panic(ptr @.str.5551, i64 5190, ptr @.str.5552) + unreachable +ok8591: + %t404 = getelementptr inbounds %S.gen.Gen, ptr %t402, i32 0, i32 18 + %t405 = load { ptr, i64, i64 }, ptr %t404 + store { ptr, i64, i64 } %t405, ptr %a406 + call void @finch.copy.arr_str(ptr %a407, ptr %a406) + %t408 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t408, ptr %a409 + %t410 = load ptr, ptr %a1 + %t411 = icmp eq ptr %t410, null + br i1 %t411, label %panic8592, label %ok8593 +panic8592: + call void @finch_panic(ptr @.str.5553, i64 5191, ptr @.str.5554) + unreachable +ok8593: + %t412 = getelementptr inbounds %S.gen.Gen, ptr %t410, i32 0, i32 19 + %t413 = load { ptr, i64, i64 }, ptr %t412 + store { ptr, i64, i64 } %t413, ptr %a414 + call void @finch.copy.arr_S_ast_Type(ptr %a415, ptr %a414) + %t416 = load { ptr, i64, i64 }, ptr %a415 + store { ptr, i64, i64 } %t416, ptr %a417 + %t418 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 6 + %t419 = load { ptr, i64, i64 }, ptr %t418 + %t420 = load ptr, ptr %a1 + %t421 = icmp eq ptr %t420, null + br i1 %t421, label %panic8594, label %ok8595 +panic8594: + call void @finch_panic(ptr @.str.5555, i64 5192, ptr @.str.5556) + unreachable +ok8595: + %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 18 + store { ptr, i64, i64 } %t419, ptr %a423 + call void @finch.copy.arr_str(ptr %a424, ptr %a423) + %t425 = load { ptr, i64, i64 }, ptr %a424 + %t426 = load { ptr, i64, i64 }, ptr %t422 + store { ptr, i64, i64 } %t425, ptr %t422 + store { ptr, i64, i64 } %t426, ptr %a427 + call void @finch.drop.arr_str(ptr %a427) + %t428 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 7 + %t429 = load { ptr, i64, i64 }, ptr %t428 + %t430 = load ptr, ptr %a1 + %t431 = icmp eq ptr %t430, null + br i1 %t431, label %panic8596, label %ok8597 +panic8596: + call void @finch_panic(ptr @.str.5557, i64 5193, ptr @.str.5558) + unreachable +ok8597: + %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 19 + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch.copy.arr_S_ast_Type(ptr %a434, ptr %a433) + %t435 = load { ptr, i64, i64 }, ptr %a434 + %t436 = load { ptr, i64, i64 }, ptr %t432 + store { ptr, i64, i64 } %t435, ptr %t432 + store { ptr, i64, i64 } %t436, ptr %a437 + call void @finch.drop.arr_S_ast_Type(ptr %a437) + store { ptr, i64, i64 } zeroinitializer, ptr %a438 + %t439 = load { ptr, i64, i64 }, ptr %a438 + %t440 = load ptr, ptr %a1 + %t441 = icmp eq ptr %t440, null + br i1 %t441, label %panic8598, label %ok8599 +panic8598: + call void @finch_panic(ptr @.str.5559, i64 5195, ptr @.str.5560) + unreachable +ok8599: + %t442 = getelementptr inbounds %S.gen.Gen, ptr %t440, i32 0, i32 10 + store { ptr, i64, i64 } %t439, ptr %a443 + call void @finch.copy.arr_S_gen_Scope(ptr %a444, ptr %a443) + %t445 = load { ptr, i64, i64 }, ptr %a444 + %t446 = load { ptr, i64, i64 }, ptr %t442 + store { ptr, i64, i64 } %t445, ptr %t442 + store { ptr, i64, i64 } %t446, ptr %a447 + call void @finch.drop.arr_S_gen_Scope(ptr %a447) + %t448 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t448) + %t449 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 + %t450 = load { ptr, i64, i64 }, ptr %t449 + %t451 = load ptr, ptr %a1 + %t452 = icmp eq ptr %t451, null + br i1 %t452, label %panic8600, label %ok8601 +panic8600: + call void @finch_panic(ptr @.str.5561, i64 5197, ptr @.str.5562) + unreachable +ok8601: + %t453 = getelementptr inbounds %S.gen.Gen, ptr %t451, i32 0, i32 14 + store { ptr, i64, i64 } %t450, ptr %a454 + call void @finch_str_copy(ptr %a455, ptr %a454) + %t456 = load { ptr, i64, i64 }, ptr %a455 + %t457 = load { ptr, i64, i64 }, ptr %t453 + store { ptr, i64, i64 } %t456, ptr %t453 + store { ptr, i64, i64 } %t457, ptr %a458 + call void @finch_str_drop(ptr %a458) + %t459 = load ptr, ptr %a1 + %t460 = load ptr, ptr %a1 + %t461 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 + %t462 = load i64, ptr %a294 + %t463 = load { ptr, i64, i64 }, ptr %t461 + %t464 = extractvalue { ptr, i64, i64 } %t463, 1 + %t465 = icmp uge i64 %t462, %t464 + br i1 %t465, label %range8602, label %inrange8603 +range8602: + call void @finch_panic_index(ptr @.str.5563, i64 5198, i64 %t462, i64 %t464) + unreachable +inrange8603: + %t466 = extractvalue { ptr, i64, i64 } %t463, 0 + %t467 = getelementptr inbounds %S.ast.Node, ptr %t466, i64 %t462 + %t468 = getelementptr inbounds %S.ast.Node, ptr %t467, i32 0, i32 9 + %t469 = load { ptr, i64, i64 }, ptr %t468 + %t470 = extractvalue { ptr, i64, i64 } %t469, 1 + %t471 = icmp uge i64 0, %t470 + br i1 %t471, label %range8604, label %inrange8605 +range8604: + call void @finch_panic_index(ptr @.str.5564, i64 5198, i64 0, i64 %t470) + unreachable +inrange8605: + %t472 = extractvalue { ptr, i64, i64 } %t469, 0 + %t473 = getelementptr inbounds %S.ast.Node, ptr %t472, i64 0 + %t474 = load %S.ast.Node, ptr %t473 + %t475 = load %S.ast.Type, ptr %a308 + %t476 = call %S.gen.Val @finch.gen.exprWant(ptr %t460, %S.ast.Node %t474, %S.ast.Type %t475) + %t477 = load %S.ast.Type, ptr %a308 + %t478 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 + %t479 = load i64, ptr %a294 + %t480 = load { ptr, i64, i64 }, ptr %t478 + %t481 = extractvalue { ptr, i64, i64 } %t480, 1 + %t482 = icmp uge i64 %t479, %t481 + br i1 %t482, label %range8606, label %inrange8607 +range8606: + call void @finch_panic_index(ptr @.str.5565, i64 5198, i64 %t479, i64 %t481) + unreachable +inrange8607: + %t483 = extractvalue { ptr, i64, i64 } %t480, 0 + %t484 = getelementptr inbounds %S.ast.Node, ptr %t483, i64 %t479 + %t485 = getelementptr inbounds %S.ast.Node, ptr %t484, i32 0, i32 9 + %t486 = load { ptr, i64, i64 }, ptr %t485 + %t487 = extractvalue { ptr, i64, i64 } %t486, 1 + %t488 = icmp uge i64 0, %t487 + br i1 %t488, label %range8608, label %inrange8609 +range8608: + call void @finch_panic_index(ptr @.str.5566, i64 5198, i64 0, i64 %t487) + unreachable +inrange8609: + %t489 = extractvalue { ptr, i64, i64 } %t486, 0 + %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 + %t491 = load %S.ast.Node, ptr %t490 + %t492 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t493 = load i64, ptr %a294 + %t494 = load { ptr, i64, i64 }, ptr %t492 + %t495 = extractvalue { ptr, i64, i64 } %t494, 1 + %t496 = icmp uge i64 %t493, %t495 + br i1 %t496, label %range8610, label %inrange8611 +range8610: + call void @finch_panic_index(ptr @.str.5568, i64 5198, i64 %t493, i64 %t495) + unreachable +inrange8611: + %t497 = extractvalue { ptr, i64, i64 } %t494, 0 + %t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i64 %t493 + %t499 = load { ptr, i64, i64 }, ptr %t498 + store { ptr, i64, i64 } { ptr @.str.5567, i64 16, i64 0 }, ptr %a501 + store { ptr, i64, i64 } %t499, ptr %a502 + call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) + %t503 = load { ptr, i64, i64 }, ptr %a500 + store { ptr, i64, i64 } %t503, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.5569, i64 1, i64 0 }, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t503, ptr %a507 + call void @finch_str_drop(ptr %a507) + %t508 = load { ptr, i64, i64 }, ptr %a504 + %t509 = call %S.gen.Val @finch.gen.coerce(ptr %t459, %S.gen.Val %t476, %S.ast.Type %t477, %S.ast.Node %t491, { ptr, i64, i64 } %t508) + store %S.gen.Val %t476, ptr %a510 + call void @finch.drop.S_gen_Val(ptr %a510) + store { ptr, i64, i64 } %t508, ptr %a511 + call void @finch_str_drop(ptr %a511) + %t512 = load %S.gen.Val, ptr %a309 + store %S.gen.Val %t509, ptr %a309 + store %S.gen.Val %t512, ptr %a513 + call void @finch.drop.S_gen_Val(ptr %a513) + %t514 = load { ptr, i64, i64 }, ptr %a401 + %t515 = load ptr, ptr %a1 + %t516 = icmp eq ptr %t515, null + br i1 %t516, label %panic8612, label %ok8613 +panic8612: + call void @finch_panic(ptr @.str.5570, i64 5199, ptr @.str.5571) + unreachable +ok8613: + %t517 = getelementptr inbounds %S.gen.Gen, ptr %t515, i32 0, i32 14 + store { ptr, i64, i64 } %t514, ptr %a518 + call void @finch_str_copy(ptr %a519, ptr %a518) + %t520 = load { ptr, i64, i64 }, ptr %a519 + %t521 = load { ptr, i64, i64 }, ptr %t517 + store { ptr, i64, i64 } %t520, ptr %t517 + store { ptr, i64, i64 } %t521, ptr %a522 + call void @finch_str_drop(ptr %a522) + %t523 = load { ptr, i64, i64 }, ptr %a409 + %t524 = load ptr, ptr %a1 + %t525 = icmp eq ptr %t524, null + br i1 %t525, label %panic8614, label %ok8615 +panic8614: + call void @finch_panic(ptr @.str.5572, i64 5200, ptr @.str.5573) + unreachable +ok8615: + %t526 = getelementptr inbounds %S.gen.Gen, ptr %t524, i32 0, i32 18 + store { ptr, i64, i64 } %t523, ptr %a527 + call void @finch.copy.arr_str(ptr %a528, ptr %a527) + %t529 = load { ptr, i64, i64 }, ptr %a528 + %t530 = load { ptr, i64, i64 }, ptr %t526 + store { ptr, i64, i64 } %t529, ptr %t526 + store { ptr, i64, i64 } %t530, ptr %a531 + call void @finch.drop.arr_str(ptr %a531) + %t532 = load { ptr, i64, i64 }, ptr %a417 + %t533 = load ptr, ptr %a1 + %t534 = icmp eq ptr %t533, null + br i1 %t534, label %panic8616, label %ok8617 +panic8616: + call void @finch_panic(ptr @.str.5574, i64 5201, ptr @.str.5575) + unreachable +ok8617: + %t535 = getelementptr inbounds %S.gen.Gen, ptr %t533, i32 0, i32 19 + store { ptr, i64, i64 } %t532, ptr %a536 + call void @finch.copy.arr_S_ast_Type(ptr %a537, ptr %a536) + %t538 = load { ptr, i64, i64 }, ptr %a537 + %t539 = load { ptr, i64, i64 }, ptr %t535 + store { ptr, i64, i64 } %t538, ptr %t535 + store { ptr, i64, i64 } %t539, ptr %a540 + call void @finch.drop.arr_S_ast_Type(ptr %a540) + %t541 = load { ptr, i64, i64 }, ptr %a393 + %t542 = load ptr, ptr %a1 + %t543 = icmp eq ptr %t542, null + br i1 %t543, label %panic8618, label %ok8619 +panic8618: + call void @finch_panic(ptr @.str.5576, i64 5202, ptr @.str.5577) + unreachable +ok8619: + %t544 = getelementptr inbounds %S.gen.Gen, ptr %t542, i32 0, i32 10 + store { ptr, i64, i64 } %t541, ptr %a545 + call void @finch.copy.arr_S_gen_Scope(ptr %a546, ptr %a545) + %t547 = load { ptr, i64, i64 }, ptr %a546 + %t548 = load { ptr, i64, i64 }, ptr %t544 + store { ptr, i64, i64 } %t547, ptr %t544 + store { ptr, i64, i64 } %t548, ptr %a549 + call void @finch.drop.arr_S_gen_Scope(ptr %a549) + call void @finch.drop.arr_S_gen_Scope(ptr %a438) + call void @finch.drop.arr_S_ast_Type(ptr %a417) + call void @finch.drop.arr_str(ptr %a409) + call void @finch_str_drop(ptr %a401) + call void @finch.drop.arr_S_gen_Scope(ptr %a393) + br label %endif8585 +else8584: + call void @finch.drop.S_gen_Val(ptr %a309) + call void @finch.drop.S_ast_Type(ptr %a308) + br label %for.step8558 +endif8585: + br label %endif8566 +endif8566: + %t550 = load ptr, ptr %a1 + %t551 = load %S.gen.Val, ptr %a309 + %t552 = call { ptr, i64, i64 } @finch.gen.own(ptr %t550, %S.gen.Val %t551) + store { ptr, i64, i64 } %t552, ptr %a553 + %t554 = load ptr, ptr %a1 + %t555 = load { ptr, i64, i64 }, ptr %a553 + store { ptr, i64, i64 } %t555, ptr %a556 + call void @finch_str_copy(ptr %a557, ptr %a556) + %t558 = load { ptr, i64, i64 }, ptr %a557 + %t559 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t558, 0 + %t560 = load %S.ast.Type, ptr %a308 + store %S.ast.Type %t560, ptr %a561 + call void @finch.copy.S_ast_Type(ptr %a562, ptr %a561) + %t563 = load %S.ast.Type, ptr %a562 + %t564 = insertvalue %S.gen.Val %t559, %S.ast.Type %t563, 1 + %t565 = insertvalue %S.gen.Val %t564, i1 true, 2 + call void @finch.gen.hold(ptr %t554, %S.gen.Val %t565) + store %S.gen.Val %t565, ptr %a566 + call void @finch.drop.S_gen_Val(ptr %a566) + %t567 = load ptr, ptr %a1 + %t568 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.5578, i64 12, i64 0 }, ptr %a570 + store { ptr, i64, i64 } %t568, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + %t572 = load { ptr, i64, i64 }, ptr %a569 + store { ptr, i64, i64 } %t572, ptr %a574 + store { ptr, i64, i64 } { ptr @.str.5579, i64 1, i64 0 }, ptr %a575 + call void @finch_str_concat(ptr %a573, ptr %a574, ptr %a575) + store { ptr, i64, i64 } %t572, ptr %a576 + call void @finch_str_drop(ptr %a576) + %t577 = load { ptr, i64, i64 }, ptr %a573 + %t578 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t577, ptr %a580 + store { ptr, i64, i64 } %t578, ptr %a581 + call void @finch_str_concat(ptr %a579, ptr %a580, ptr %a581) + store { ptr, i64, i64 } %t577, ptr %a582 + call void @finch_str_drop(ptr %a582) + %t583 = load { ptr, i64, i64 }, ptr %a579 + store { ptr, i64, i64 } %t583, ptr %a585 + store { ptr, i64, i64 } { ptr @.str.5580, i64 2, i64 0 }, ptr %a586 + call void @finch_str_concat(ptr %a584, ptr %a585, ptr %a586) + store { ptr, i64, i64 } %t583, ptr %a587 + call void @finch_str_drop(ptr %a587) + %t588 = load { ptr, i64, i64 }, ptr %a584 + %t589 = load ptr, ptr %a1 + %t590 = load %S.ast.Type, ptr %a308 + %t591 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t589, %S.ast.Type %t590) + store { ptr, i64, i64 } %t588, ptr %a593 + store { ptr, i64, i64 } %t591, ptr %a594 + call void @finch_str_concat(ptr %a592, ptr %a593, ptr %a594) + store { ptr, i64, i64 } %t588, ptr %a595 + call void @finch_str_drop(ptr %a595) + store { ptr, i64, i64 } %t591, ptr %a596 + call void @finch_str_drop(ptr %a596) + %t597 = load { ptr, i64, i64 }, ptr %a592 + store { ptr, i64, i64 } %t597, ptr %a599 + store { ptr, i64, i64 } { ptr @.str.5581, i64 1, i64 0 }, ptr %a600 + call void @finch_str_concat(ptr %a598, ptr %a599, ptr %a600) + store { ptr, i64, i64 } %t597, ptr %a601 + call void @finch_str_drop(ptr %a601) + %t602 = load { ptr, i64, i64 }, ptr %a598 + %t603 = load { ptr, i64, i64 }, ptr %a553 + store { ptr, i64, i64 } %t602, ptr %a605 + store { ptr, i64, i64 } %t603, ptr %a606 + call void @finch_str_concat(ptr %a604, ptr %a605, ptr %a606) + store { ptr, i64, i64 } %t602, ptr %a607 + call void @finch_str_drop(ptr %a607) + %t608 = load { ptr, i64, i64 }, ptr %a604 + store { ptr, i64, i64 } %t608, ptr %a610 + store { ptr, i64, i64 } { ptr @.str.5582, i64 2, i64 0 }, ptr %a611 + call void @finch_str_concat(ptr %a609, ptr %a610, ptr %a611) + store { ptr, i64, i64 } %t608, ptr %a612 + call void @finch_str_drop(ptr %a612) + %t613 = load { ptr, i64, i64 }, ptr %a609 + %t614 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 3 + %t615 = load i64, ptr %a294 + %t616 = load { ptr, i64, i64 }, ptr %t614 + %t617 = extractvalue { ptr, i64, i64 } %t616, 1 + %t618 = icmp uge i64 %t615, %t617 + br i1 %t618, label %range8620, label %inrange8621 +range8620: + call void @finch_panic_index(ptr @.str.5583, i64 5208, i64 %t615, i64 %t617) + unreachable +inrange8621: + %t619 = extractvalue { ptr, i64, i64 } %t616, 0 + %t620 = getelementptr inbounds i64, ptr %t619, i64 %t615 + %t621 = load i64, ptr %t620 + call void @finch_str_from_int(ptr %a622, i64 %t621) + %t623 = load { ptr, i64, i64 }, ptr %a622 + store { ptr, i64, i64 } %t613, ptr %a625 + store { ptr, i64, i64 } %t623, ptr %a626 + call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626) + store { ptr, i64, i64 } %t613, ptr %a627 + call void @finch_str_drop(ptr %a627) + store { ptr, i64, i64 } %t623, ptr %a628 + call void @finch_str_drop(ptr %a628) + %t629 = load { ptr, i64, i64 }, ptr %a624 + %t630 = call { ptr, i64, i64 } @finch.gen.op(ptr %t567, { ptr, i64, i64 } %t629) + store { ptr, i64, i64 } %t629, ptr %a631 + call void @finch_str_drop(ptr %a631) + %t632 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t630, ptr %a284 + store { ptr, i64, i64 } %t632, ptr %a633 + call void @finch_str_drop(ptr %a633) + call void @finch_str_drop(ptr %a553) + call void @finch.drop.S_gen_Val(ptr %a309) + call void @finch.drop.S_ast_Type(ptr %a308) + br label %for.step8558 +for.step8558: + %t634 = load i64, ptr %a294 + %t635 = add i64 %t634, 1 + store i64 %t635, ptr %a294 + br label %for.cond8556 +for.end8559: + %t636 = load ptr, ptr %a1 + %t637 = load i64, ptr %a290 + call void @finch.gen.heldEnd(ptr %t636, i64 %t637) + %t638 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t638, ptr %a639 + call void @finch_str_copy(ptr %a640, ptr %a639) + %t641 = load { ptr, i64, i64 }, ptr %a640 + %t642 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t641, 0 + %t643 = load %S.ast.Type, ptr %a61 + store %S.ast.Type %t643, ptr %a644 + call void @finch.copy.S_ast_Type(ptr %a645, ptr %a644) + %t646 = load %S.ast.Type, ptr %a645 + %t647 = insertvalue %S.gen.Val %t642, %S.ast.Type %t646, 1 + %t648 = load ptr, ptr %a1 + %t649 = load %S.ast.Type, ptr %a61 + %t650 = call i1 @finch.gen.owning(ptr %t648, %S.ast.Type %t649) + %t651 = insertvalue %S.gen.Val %t647, i1 %t650, 2 + call void @finch_str_drop(ptr %a284) + call void @finch.drop.arr_int(ptr %a79) + call void @finch_str_drop(ptr %a65) + call void @finch.drop.S_ast_Type(ptr %a61) + call void @finch.drop.S_ast_Node(ptr %a20) + call void @finch.drop.S_gen_StructDef(ptr %a19) + ret %S.gen.Val %t651 +} + +define internal void @finch.gen.noteMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca %S.docs.Doc, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic8622, label %ok8623 +panic8622: + call void @finch_panic(ptr @.str.5584, i64 5218, ptr @.str.5585) + unreachable +ok8623: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + %t8 = xor i1 %t7, true + br i1 %t8, label %then8624, label %endif8626 +then8624: + ret void +endif8626: + %t9 = load { ptr, i64, i64 }, ptr %a3 + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t9, { ptr, i64, i64 } %t11) + store %S.docs.Doc %t12, ptr %a13 + %t14 = getelementptr inbounds %S.docs.Doc, ptr %a13, i32 0, i32 0 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp sgt i64 %t16, 0 + br i1 %t17, label %then8627, label %endif8629 +then8627: + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t21 = load i64, ptr %t20 + %t22 = add i64 %t21, 1 + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = load %S.docs.Doc, ptr %a13 + %t27 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t26) + call void @finch.gen.noteRef(ptr %t18, %S.ast.Node %t19, i64 %t22, i64 %t25, { ptr, i64, i64 } %t27, { ptr, i64, i64 } { ptr @.str.5586, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_drop(ptr %a28) + br label %endif8629 +endif8629: + call void @finch.drop.S_docs_Doc(ptr %a13) + ret void +} + +define internal %S.gen.Val @finch.gen.method(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.ast.Node, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca %S.ast.Node, align 16 + %a17 = alloca i64, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca i64, align 16 + %a36 = alloca %S.ast.Node, align 16 + %a37 = alloca %S.ast.Node, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca i64, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca i64, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca i64, align 16 + %a165 = alloca i64, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca i64, align 16 + %a184 = alloca %S.ast.Node, align 16 + %a185 = alloca %S.ast.Node, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca i64, align 16 + %a247 = alloca i64, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca %S.gen.Ref, align 16 + %a266 = alloca i64, align 16 + %a270 = alloca %S.ast.Type, align 16 + %a271 = alloca %S.ast.Type, align 16 + %a273 = alloca %S.ast.Type, align 16 + %a279 = alloca %S.ast.Type, align 16 + %a280 = alloca %S.ast.Type, align 16 + %a283 = alloca %S.ast.Type, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca i64, align 16 + %a307 = alloca i64, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca %S.gen.Val, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca %S.gen.Val, align 16 + %a372 = alloca %S.gen.Val, align 16 + %a374 = alloca %S.gen.Val, align 16 + %a384 = alloca %S.ast.Type, align 16 + %a385 = alloca %S.ast.Type, align 16 + %a389 = alloca %S.gen.Val, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca %S.gen.Val, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca i64, align 16 + %a438 = alloca i64, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca %S.gen.Val, align 16 + %a497 = alloca %S.ast.Type, align 16 + %a498 = alloca %S.ast.Type, align 16 + %a500 = alloca %S.ast.Type, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca i1, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca %S.ast.Type, align 16 + %a579 = alloca %S.ast.Type, align 16 + %a582 = alloca %S.ast.Type, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca i64, align 16 + %a644 = alloca { ptr, i64, i64 }, align 16 + %a645 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca i64, align 16 + %a686 = alloca i64, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca i64, align 16 + %a719 = alloca %S.gen.FnSig, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a732 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a763 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a780 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a793 = alloca { ptr, i64, i64 }, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a808 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca { ptr, i64, i64 }, align 16 + %a813 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a832 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a837 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a839 = alloca { ptr, i64, i64 }, align 16 + %a842 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a845 = alloca { ptr, i64, i64 }, align 16 + %a846 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a852 = alloca { ptr, i64, i64 }, align 16 + %a853 = alloca { ptr, i64, i64 }, align 16 + %a854 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a871 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca { ptr, i64, i64 }, align 16 + %a891 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a896 = alloca { ptr, i64, i64 }, align 16 + %a897 = alloca { ptr, i64, i64 }, align 16 + %a898 = alloca { ptr, i64, i64 }, align 16 + %a899 = alloca { ptr, i64, i64 }, align 16 + %a901 = alloca { ptr, i64, i64 }, align 16 + %a902 = alloca { ptr, i64, i64 }, align 16 + %a903 = alloca { ptr, i64, i64 }, align 16 + %a904 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a916 = alloca i64, align 16 + %a923 = alloca %S.gen.Var, align 16 + %a928 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a930 = alloca { ptr, i64, i64 }, align 16 + %a932 = alloca { ptr, i64, i64 }, align 16 + %a933 = alloca { ptr, i64, i64 }, align 16 + %a934 = alloca { ptr, i64, i64 }, align 16 + %a935 = alloca { ptr, i64, i64 }, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a958 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a968 = alloca { ptr, i64, i64 }, align 16 + %a969 = alloca %S.gen.Val, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a991 = alloca { ptr, i64, i64 }, align 16 + %a992 = alloca { ptr, i64, i64 }, align 16 + %a994 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t4 = load { ptr, i64, i64 }, ptr %t3 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 0, %t5 + br i1 %t6, label %range8630, label %inrange8631 +range8630: + call void @finch_panic_index(ptr @.str.5587, i64 5228, i64 0, i64 %t5) + unreachable +inrange8631: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 + %t9 = load %S.ast.Node, ptr %t8 + store %S.ast.Node %t9, ptr %a10 + call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) + %t12 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = load %S.ast.Node, ptr %a13 + %t16 = call i64 @finch.gen.sumNamed(ptr %t14, %S.ast.Node %t15) + store i64 %t16, ptr %a17 + %t18 = load i64, ptr %a17 + %t19 = icmp sge i64 %t18, 0 + br i1 %t19, label %then8632, label %endif8634 +then8632: + store { ptr, i64, i64 } zeroinitializer, ptr %a20 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + store i64 1, ptr %a24 + br label %for.cond8635 +for.cond8635: + %t25 = load i64, ptr %a24 + %t26 = icmp slt i64 %t25, %t23 + br i1 %t26, label %for.body8636, label %for.end8638 +for.body8636: + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t29 = load i64, ptr %a24 + %t30 = load { ptr, i64, i64 }, ptr %t28 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 %t29, %t31 + br i1 %t32, label %range8639, label %inrange8640 +range8639: + call void @finch_panic_index(ptr @.str.5588, i64 5233, i64 %t29, i64 %t31) + unreachable +inrange8640: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t29 + %t35 = load %S.ast.Node, ptr %t34 + store %S.ast.Node %t35, ptr %a36 + call void @finch.copy.S_ast_Node(ptr %a37, ptr %a36) + %t38 = load %S.ast.Node, ptr %a37 + %t39 = load i64, ptr %t27 + %t40 = add i64 %t39, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t40, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t41 = load ptr, ptr %a20 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 %t39 + store %S.ast.Node %t38, ptr %t42 + store i64 %t40, ptr %t27 + br label %for.step8637 +for.step8637: + %t43 = load i64, ptr %a24 + %t44 = add i64 %t43, 1 + store i64 %t44, ptr %a24 + br label %for.cond8635 +for.end8638: + %t45 = load ptr, ptr %a1 + %t46 = load i64, ptr %a17 + %t47 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t48 = load { ptr, i64, i64 }, ptr %t47 + %t49 = load { ptr, i64, i64 }, ptr %a20 + %t50 = load %S.ast.Node, ptr %a2 + %t51 = call %S.gen.Val @finch.gen.sumMake(ptr %t45, i64 %t46, { ptr, i64, i64 } %t48, { ptr, i64, i64 } %t49, %S.ast.Node %t50) + call void @finch.drop.arr_S_ast_Node(ptr %a20) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t51 +endif8634: + %t52 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t53, ptr %a54 + store { ptr, i64, i64 } { ptr @.str.5589, i64 3, i64 0 }, ptr %a55 + %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) + %t57 = icmp ne i32 %t56, 0 + br label %logic.from8641 +logic.from8641: + br i1 %t57, label %logic.rhs8642, label %logic.end8643 +logic.rhs8642: + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = call i64 @finch.gen.lookup(ptr %t58, { ptr, i64, i64 } %t60) + %t62 = icmp slt i64 %t61, 0 + br label %logic.rend8644 +logic.rend8644: + br label %logic.end8643 +logic.end8643: + %t63 = phi i1 [ false, %logic.from8641 ], [ %t62, %logic.rend8644 ] + br i1 %t63, label %then8645, label %endif8647 +then8645: + %t64 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 + %t65 = load { ptr, i64, i64 }, ptr %t64 + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_copy(ptr %a67, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t68, ptr %a69 + %t70 = load ptr, ptr %a1 + %t71 = load { ptr, i64, i64 }, ptr %a69 + %t72 = call i1 @finch.gen.imports(ptr %t70, { ptr, i64, i64 } %t71) + %t73 = xor i1 %t72, true + br i1 %t73, label %then8648, label %endif8650 +then8648: + %t74 = load ptr, ptr %a1 + %t75 = load %S.ast.Node, ptr %a13 + %t76 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.5590, i64 38, i64 0 }, ptr %a78 + store { ptr, i64, i64 } %t76, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.5591, i64 32, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t85, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.5592, i64 13, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + call void @finch.gen.fail(ptr %t74, %S.ast.Node %t75, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %endif8650 +endif8650: + %t98 = load ptr, ptr %a1 + %t99 = load { ptr, i64, i64 }, ptr %a69 + %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t101 = load { ptr, i64, i64 }, ptr %t100 + %t102 = call i64 @finch.gen.findFn(ptr %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t101) + store i64 %t102, ptr %a103 + %t104 = load i64, ptr %a103 + %t105 = icmp sge i64 %t104, 0 + br i1 %t105, label %then8651, label %endif8653 +then8651: + %t106 = load ptr, ptr %a1 + %t107 = load i64, ptr %a103 + %t108 = load %S.ast.Node, ptr %a2 + %t109 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.5593, i64 1, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a110 + %t114 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } %t113, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t113, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a116 + %t121 = call %S.gen.Val @finch.gen.callFn(ptr %t106, i64 %t107, %S.ast.Node %t108, i64 1, { ptr, i64, i64 } %t120, { ptr, i64, i64 } { ptr @.str.5594, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5595, i64 0, i64 0 }) + store { ptr, i64, i64 } %t120, ptr %a122 + call void @finch_str_drop(ptr %a122) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t121 +endif8653: + %t123 = load ptr, ptr %a1 + %t124 = load { ptr, i64, i64 }, ptr %a69 + %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t126 = load { ptr, i64, i64 }, ptr %t125 + %t127 = call i64 @finch.gen.findTemplate(ptr %t123, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } { ptr @.str.5596, i64 0, i64 0 }, i1 false) + store i64 %t127, ptr %a128 + %t129 = load i64, ptr %a128 + %t130 = icmp sge i64 %t129, 0 + br i1 %t130, label %then8654, label %endif8656 +then8654: + %t131 = load ptr, ptr %a1 + %t132 = load %S.ast.Node, ptr %a2 + %t133 = load i64, ptr %a128 + %t134 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t134, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.5597, i64 1, i64 0 }, ptr %a137 + call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a135 + %t139 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t140 = load { ptr, i64, i64 }, ptr %t139 + store { ptr, i64, i64 } %t138, ptr %a142 + store { ptr, i64, i64 } %t140, ptr %a143 + call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) + store { ptr, i64, i64 } %t138, ptr %a144 + call void @finch_str_drop(ptr %a144) + %t145 = load { ptr, i64, i64 }, ptr %a141 + %t146 = call %S.gen.Val @finch.gen.genericCall(ptr %t131, %S.ast.Node %t132, i64 %t133, i64 1, { ptr, i64, i64 } %t145) + store { ptr, i64, i64 } %t145, ptr %a147 + call void @finch_str_drop(ptr %a147) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t146 +endif8656: + %t148 = load ptr, ptr %a1 + %t149 = load { ptr, i64, i64 }, ptr %a69 + %t150 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t151 = load { ptr, i64, i64 }, ptr %t150 + %t152 = call i64 @finch.gen.findEnum(ptr %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t151) + store i64 %t152, ptr %a153 + %t154 = load i64, ptr %a153 + %t155 = icmp sge i64 %t154, 0 + br i1 %t155, label %then8657, label %endif8659 +then8657: + %t156 = load ptr, ptr %a1 + %t157 = load %S.ast.Node, ptr %a2 + %t158 = load i64, ptr %a153 + %t159 = call %S.gen.Val @finch.gen.enumFrom(ptr %t156, %S.ast.Node %t157, i64 %t158) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t159 +endif8659: + %t160 = load ptr, ptr %a1 + %t161 = load { ptr, i64, i64 }, ptr %a69 + %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = call i64 @finch.gen.findStruct(ptr %t160, { ptr, i64, i64 } %t161, { ptr, i64, i64 } %t163) + store i64 %t164, ptr %a165 + %t166 = load i64, ptr %a165 + %t167 = icmp sge i64 %t166, 0 + br i1 %t167, label %then8660, label %endif8662 +then8660: + store { ptr, i64, i64 } zeroinitializer, ptr %a168 + %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 + %t171 = load i64, ptr %t170 + store i64 1, ptr %a172 + br label %for.cond8663 +for.cond8663: + %t173 = load i64, ptr %a172 + %t174 = icmp slt i64 %t173, %t171 + br i1 %t174, label %for.body8664, label %for.end8666 +for.body8664: + %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 + %t176 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t177 = load i64, ptr %a172 + %t178 = load { ptr, i64, i64 }, ptr %t176 + %t179 = extractvalue { ptr, i64, i64 } %t178, 1 + %t180 = icmp uge i64 %t177, %t179 + br i1 %t180, label %range8667, label %inrange8668 +range8667: + call void @finch_panic_index(ptr @.str.5598, i64 5258, i64 %t177, i64 %t179) + unreachable +inrange8668: + %t181 = extractvalue { ptr, i64, i64 } %t178, 0 + %t182 = getelementptr inbounds %S.ast.Node, ptr %t181, i64 %t177 + %t183 = load %S.ast.Node, ptr %t182 + store %S.ast.Node %t183, ptr %a184 + call void @finch.copy.S_ast_Node(ptr %a185, ptr %a184) + %t186 = load %S.ast.Node, ptr %a185 + %t187 = load i64, ptr %t175 + %t188 = add i64 %t187, 1 + call void @finch_arr_reserve(ptr %a168, i64 %t188, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t189 = load ptr, ptr %a168 + %t190 = getelementptr inbounds %S.ast.Node, ptr %t189, i64 %t187 + store %S.ast.Node %t186, ptr %t190 + store i64 %t188, ptr %t175 + br label %for.step8665 +for.step8665: + %t191 = load i64, ptr %a172 + %t192 = add i64 %t191, 1 + store i64 %t192, ptr %a172 + br label %for.cond8663 +for.end8666: + %t193 = load ptr, ptr %a1 + %t194 = load i64, ptr %a165 + %t195 = load { ptr, i64, i64 }, ptr %a168 + %t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t197 = load { ptr, i64, i64 }, ptr %t196 + %t198 = load %S.ast.Node, ptr %a2 + %t199 = call %S.gen.Val @finch.gen.construct(ptr %t193, i64 %t194, { ptr, i64, i64 } %t195, { ptr, i64, i64 } %t197, %S.ast.Node %t198) + call void @finch.drop.arr_S_ast_Node(ptr %a168) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t199 +endif8662: + %t200 = load ptr, ptr %a1 + %t201 = load %S.ast.Node, ptr %a2 + %t202 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.5599, i64 12, i64 0 }, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + %t206 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t206, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.5600, i64 35, i64 0 }, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t206, ptr %a210 + call void @finch_str_drop(ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a207 + %t212 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t213 = load { ptr, i64, i64 }, ptr %t212 + store { ptr, i64, i64 } %t211, ptr %a215 + store { ptr, i64, i64 } %t213, ptr %a216 + call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) + store { ptr, i64, i64 } %t211, ptr %a217 + call void @finch_str_drop(ptr %a217) + %t218 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t218, ptr %a220 + store { ptr, i64, i64 } { ptr @.str.5601, i64 1, i64 0 }, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t218, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.fail(ptr %t200, %S.ast.Node %t201, { ptr, i64, i64 } %t223) + store { ptr, i64, i64 } %t223, ptr %a224 + call void @finch_str_drop(ptr %a224) + call void @finch_str_drop(ptr %a69) + br label %endif8647 +endif8647: + %t225 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t226 = call ptr @finch_alloc(i64 %t225) + %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 0 + store { ptr, i64, i64 } { ptr @.str.5602, i64 4, i64 0 }, ptr %t227 + %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 1 + store { ptr, i64, i64 } { ptr @.str.5603, i64 3, i64 0 }, ptr %t228 + %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 2 + store { ptr, i64, i64 } { ptr @.str.5604, i64 6, i64 0 }, ptr %t229 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 3 + store { ptr, i64, i64 } { ptr @.str.5605, i64 6, i64 0 }, ptr %t230 + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 4 + store { ptr, i64, i64 } { ptr @.str.5606, i64 5, i64 0 }, ptr %t231 + %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 5 + store { ptr, i64, i64 } { ptr @.str.5607, i64 6, i64 0 }, ptr %t232 + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 6 + store { ptr, i64, i64 } { ptr @.str.5608, i64 4, i64 0 }, ptr %t233 + %t234 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 7 + store { ptr, i64, i64 } { ptr @.str.5609, i64 7, i64 0 }, ptr %t234 + %t235 = insertvalue { ptr, i64, i64 } undef, ptr %t226, 0 + %t236 = insertvalue { ptr, i64, i64 } %t235, i64 8, 1 + %t237 = insertvalue { ptr, i64, i64 } %t236, i64 8, 2 + store { ptr, i64, i64 } %t237, ptr %a238 + %t239 = load ptr, ptr %a1 + %t240 = load %S.ast.Node, ptr %a13 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 + %t242 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t243 = load { ptr, i64, i64 }, ptr %t242 + store i64 -1, ptr %a244 + %t245 = load i64, ptr %t241 + %t246 = load ptr, ptr %a238 + store i64 0, ptr %a247 + br label %find.cond8669 +find.cond8669: + %t248 = load i64, ptr %a247 + %t249 = icmp slt i64 %t248, %t245 + br i1 %t249, label %find.body8670, label %find.end8673 +find.body8670: + %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t248 + %t251 = load { ptr, i64, i64 }, ptr %t250 + store { ptr, i64, i64 } %t251, ptr %a252 + store { ptr, i64, i64 } %t243, ptr %a253 + %t254 = call i32 @finch_str_eq(ptr %a252, ptr %a253) + %t255 = icmp ne i32 %t254, 0 + br i1 %t255, label %find.hit8671, label %find.next8672 +find.hit8671: + store i64 %t248, ptr %a244 + br label %find.end8673 +find.next8672: + %t256 = add i64 %t248, 1 + store i64 %t256, ptr %a247 + br label %find.cond8669 +find.end8673: + %t257 = load i64, ptr %a244 + %t258 = icmp sge i64 %t257, 0 + %t259 = call %S.gen.Ref @finch.gen.ref(ptr %t239, %S.ast.Node %t240, i1 %t258) + store %S.gen.Ref %t259, ptr %a260 + %t261 = load ptr, ptr %a1 + %t262 = icmp eq ptr %t261, null + br i1 %t262, label %panic8674, label %ok8675 +panic8674: + call void @finch_panic(ptr @.str.5610, i64 5266, ptr @.str.5611) + unreachable +ok8675: + %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 11 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + %t265 = load i64, ptr %t264 + store i64 %t265, ptr %a266 + %t267 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t268 = getelementptr inbounds %S.gen.Val, ptr %t267, i32 0, i32 1 + %t269 = load %S.ast.Type, ptr %t268 + store %S.ast.Type %t269, ptr %a270 + call void @finch.copy.S_ast_Type(ptr %a271, ptr %a270) + %t272 = load %S.ast.Type, ptr %a271 + store %S.ast.Type %t272, ptr %a273 + %t274 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t275 = load i1, ptr %t274 + br i1 %t275, label %then8676, label %endif8678 +then8676: + %t276 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t277 = getelementptr inbounds %S.gen.Place, ptr %t276, i32 0, i32 1 + %t278 = load %S.ast.Type, ptr %t277 + store %S.ast.Type %t278, ptr %a279 + call void @finch.copy.S_ast_Type(ptr %a280, ptr %a279) + %t281 = load %S.ast.Type, ptr %a280 + %t282 = load %S.ast.Type, ptr %a273 + store %S.ast.Type %t281, ptr %a273 + store %S.ast.Type %t282, ptr %a283 + call void @finch.drop.S_ast_Type(ptr %a283) + br label %endif8678 +endif8678: + %t284 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + store { ptr, i64, i64 } { ptr @.str.5612, i64 5, i64 0 }, ptr %a287 + %t288 = call i32 @finch_str_eq(ptr %a286, ptr %a287) + %t289 = icmp ne i32 %t288, 0 + br i1 %t289, label %then8679, label %endif8681 +then8679: + store { ptr, i64, i64 } { ptr @.str.5613, i64 0, i64 0 }, ptr %a290 + %t291 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t292 = load i1, ptr %t291 + br i1 %t292, label %then8682, label %else8683 +then8682: + %t293 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t294 = getelementptr inbounds %S.gen.Place, ptr %t293, i32 0, i32 0 + %t295 = load { ptr, i64, i64 }, ptr %t294 + store { ptr, i64, i64 } %t295, ptr %a296 + call void @finch_str_copy(ptr %a297, ptr %a296) + %t298 = load { ptr, i64, i64 }, ptr %a297 + %t299 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t298, ptr %a290 + store { ptr, i64, i64 } %t299, ptr %a300 + call void @finch_str_drop(ptr %a300) + br label %endif8684 +else8683: + %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 + %t302 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t303 = load { ptr, i64, i64 }, ptr %t302 + store i64 -1, ptr %a304 + %t305 = load i64, ptr %t301 + %t306 = load ptr, ptr %a238 + store i64 0, ptr %a307 + br label %find.cond8685 +find.cond8685: + %t308 = load i64, ptr %a307 + %t309 = icmp slt i64 %t308, %t305 + br i1 %t309, label %find.body8686, label %find.end8689 +find.body8686: + %t310 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 %t308 + %t311 = load { ptr, i64, i64 }, ptr %t310 + store { ptr, i64, i64 } %t311, ptr %a312 + store { ptr, i64, i64 } %t303, ptr %a313 + %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) + %t315 = icmp ne i32 %t314, 0 + br i1 %t315, label %find.hit8687, label %find.next8688 +find.hit8687: + store i64 %t308, ptr %a304 + br label %find.end8689 +find.next8688: + %t316 = add i64 %t308, 1 + store i64 %t316, ptr %a307 + br label %find.cond8685 +find.end8689: + %t317 = load i64, ptr %a304 + %t318 = icmp sge i64 %t317, 0 + br i1 %t318, label %then8690, label %endif8692 +then8690: + %t319 = load ptr, ptr %a1 + %t320 = load %S.ast.Node, ptr %a2 + %t321 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t322 = load { ptr, i64, i64 }, ptr %t321 + store { ptr, i64, i64 } %t322, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.5614, i64 63, i64 0 }, ptr %a325 + call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) + %t326 = load { ptr, i64, i64 }, ptr %a323 + call void @finch.gen.fail(ptr %t319, %S.ast.Node %t320, { ptr, i64, i64 } %t326) + store { ptr, i64, i64 } %t326, ptr %a327 + call void @finch_str_drop(ptr %a327) + br label %endif8692 +endif8692: + %t328 = load ptr, ptr %a1 + %t329 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t330 = load %S.gen.Val, ptr %t329 + %t331 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t328, %S.gen.Val %t330) + %t332 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t331, ptr %a290 + store { ptr, i64, i64 } %t332, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t335 = getelementptr inbounds %S.gen.Val, ptr %t334, i32 0, i32 2 + %t336 = load i1, ptr %t335 + br i1 %t336, label %then8693, label %endif8695 +then8693: + %t337 = load ptr, ptr %a1 + %t338 = load { ptr, i64, i64 }, ptr %a290 + %t339 = load %S.ast.Type, ptr %a273 + call void @finch.gen.holdAddr(ptr %t337, { ptr, i64, i64 } %t338, %S.ast.Type %t339) + br label %endif8695 +endif8695: + br label %endif8684 +endif8684: + %t340 = load ptr, ptr %a1 + %t341 = load %S.ast.Node, ptr %a2 + %t342 = call { ptr, i64, i64 } @finch.docs.arrayMethods() + call void @finch.gen.noteMethod(ptr %t340, %S.ast.Node %t341, { ptr, i64, i64 } %t342) + store { ptr, i64, i64 } %t342, ptr %a343 + call void @finch.drop.arr_S_docs_Doc(ptr %a343) + %t344 = load ptr, ptr %a1 + %t345 = load %S.ast.Node, ptr %a2 + %t346 = load { ptr, i64, i64 }, ptr %a290 + %t347 = load %S.ast.Type, ptr %a273 + %t348 = call %S.gen.Val @finch.gen.arrayMethod(ptr %t344, %S.ast.Node %t345, { ptr, i64, i64 } %t346, %S.ast.Type %t347) + store %S.gen.Val %t348, ptr %a349 + %t350 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t351 = load i1, ptr %t350 + %t352 = xor i1 %t351, true + br label %logic.from8696 +logic.from8696: + br i1 %t352, label %logic.rhs8697, label %logic.end8698 +logic.rhs8697: + %t353 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t354 = getelementptr inbounds %S.gen.Val, ptr %t353, i32 0, i32 2 + %t355 = load i1, ptr %t354 + br label %logic.rend8699 +logic.rend8699: + br label %logic.end8698 +logic.end8698: + %t356 = phi i1 [ false, %logic.from8696 ], [ %t355, %logic.rend8699 ] + br i1 %t356, label %then8700, label %endif8702 +then8700: + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a290 + %t359 = load %S.ast.Type, ptr %a273 + call void @finch.gen.dropAt(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359) + br label %endif8702 +endif8702: + %t360 = load ptr, ptr %a1 + %t361 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t360, i64 %t361) + %t362 = load %S.gen.Val, ptr %a349 + call void @finch_str_drop(ptr %a290) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t362 +endif8681: + %t363 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t364 = load { ptr, i64, i64 }, ptr %t363 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.5615, i64 3, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br i1 %t368, label %then8703, label %endif8705 +then8703: + %t369 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t370 = load %S.gen.Val, ptr %t369 + store %S.gen.Val %t370, ptr %a371 + call void @finch.copy.S_gen_Val(ptr %a372, ptr %a371) + %t373 = load %S.gen.Val, ptr %a372 + store %S.gen.Val %t373, ptr %a374 + %t375 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t376 = load i1, ptr %t375 + br i1 %t376, label %then8706, label %endif8708 +then8706: + %t377 = load ptr, ptr %a1 + %t378 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t379 = getelementptr inbounds %S.gen.Place, ptr %t378, i32 0, i32 0 + %t380 = load { ptr, i64, i64 }, ptr %t379 + %t381 = call { ptr, i64, i64 } @finch.gen.load(ptr %t377, { ptr, i64, i64 } { ptr @.str.5616, i64 17, i64 0 }, { ptr, i64, i64 } %t380) + %t382 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t381, 0 + %t383 = load %S.ast.Type, ptr %a273 + store %S.ast.Type %t383, ptr %a384 + call void @finch.copy.S_ast_Type(ptr %a385, ptr %a384) + %t386 = load %S.ast.Type, ptr %a385 + %t387 = insertvalue %S.gen.Val %t382, %S.ast.Type %t386, 1 + %t388 = load %S.gen.Val, ptr %a374 + store %S.gen.Val %t387, ptr %a374 + store %S.gen.Val %t388, ptr %a389 + call void @finch.drop.S_gen_Val(ptr %a389) + br label %endif8708 +endif8708: + %t390 = load ptr, ptr %a1 + %t391 = load %S.ast.Node, ptr %a2 + %t392 = call { ptr, i64, i64 } @finch.docs.strMethods() + call void @finch.gen.noteMethod(ptr %t390, %S.ast.Node %t391, { ptr, i64, i64 } %t392) + store { ptr, i64, i64 } %t392, ptr %a393 + call void @finch.drop.arr_S_docs_Doc(ptr %a393) + %t394 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t395 = load i1, ptr %t394 + %t396 = xor i1 %t395, true + br i1 %t396, label %then8709, label %endif8711 +then8709: + %t397 = load ptr, ptr %a1 + %t398 = load %S.gen.Val, ptr %a374 + call void @finch.gen.hold(ptr %t397, %S.gen.Val %t398) + br label %endif8711 +endif8711: + %t399 = load ptr, ptr %a1 + %t400 = load %S.ast.Node, ptr %a2 + %t401 = load ptr, ptr %a1 + %t402 = load %S.gen.Val, ptr %a374 + %t403 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t401, %S.gen.Val %t402) + %t404 = call %S.gen.Val @finch.gen.strMethod(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t403) + store { ptr, i64, i64 } %t403, ptr %a405 + call void @finch_str_drop(ptr %a405) + store %S.gen.Val %t404, ptr %a406 + %t407 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t408 = load i1, ptr %t407 + %t409 = xor i1 %t408, true + br i1 %t409, label %then8712, label %endif8714 +then8712: + %t410 = load ptr, ptr %a1 + %t411 = load %S.gen.Val, ptr %a374 + call void @finch.gen.release(ptr %t410, %S.gen.Val %t411) + br label %endif8714 +endif8714: + %t412 = load ptr, ptr %a1 + %t413 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t412, i64 %t413) + %t414 = load %S.gen.Val, ptr %a406 + call void @finch.drop.S_gen_Val(ptr %a374) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t414 +endif8705: + %t415 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t416, ptr %a417 + store { ptr, i64, i64 } { ptr @.str.5617, i64 3, i64 0 }, ptr %a418 + %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) + %t420 = icmp ne i32 %t419, 0 + br i1 %t420, label %then8715, label %endif8717 +then8715: + store { ptr, i64, i64 } { ptr @.str.5618, i64 0, i64 0 }, ptr %a421 + %t422 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t423 = load i1, ptr %t422 + br i1 %t423, label %then8718, label %else8719 +then8718: + %t424 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t425 = getelementptr inbounds %S.gen.Place, ptr %t424, i32 0, i32 0 + %t426 = load { ptr, i64, i64 }, ptr %t425 + store { ptr, i64, i64 } %t426, ptr %a427 + call void @finch_str_copy(ptr %a428, ptr %a427) + %t429 = load { ptr, i64, i64 }, ptr %a428 + %t430 = load { ptr, i64, i64 }, ptr %a421 + store { ptr, i64, i64 } %t429, ptr %a421 + store { ptr, i64, i64 } %t430, ptr %a431 + call void @finch_str_drop(ptr %a431) + br label %endif8720 +else8719: + %t432 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 + %t433 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t434 = load { ptr, i64, i64 }, ptr %t433 + store i64 -1, ptr %a435 + %t436 = load i64, ptr %t432 + %t437 = load ptr, ptr %a238 + store i64 0, ptr %a438 + br label %find.cond8721 +find.cond8721: + %t439 = load i64, ptr %a438 + %t440 = icmp slt i64 %t439, %t436 + br i1 %t440, label %find.body8722, label %find.end8725 +find.body8722: + %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t437, i64 %t439 + %t442 = load { ptr, i64, i64 }, ptr %t441 + store { ptr, i64, i64 } %t442, ptr %a443 + store { ptr, i64, i64 } %t434, ptr %a444 + %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) + %t446 = icmp ne i32 %t445, 0 + br i1 %t446, label %find.hit8723, label %find.next8724 +find.hit8723: + store i64 %t439, ptr %a435 + br label %find.end8725 +find.next8724: + %t447 = add i64 %t439, 1 + store i64 %t447, ptr %a438 + br label %find.cond8721 +find.end8725: + %t448 = load i64, ptr %a435 + %t449 = icmp sge i64 %t448, 0 + br i1 %t449, label %then8726, label %endif8728 +then8726: + %t450 = load ptr, ptr %a1 + %t451 = load %S.ast.Node, ptr %a2 + %t452 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t453 = load { ptr, i64, i64 }, ptr %t452 + store { ptr, i64, i64 } %t453, ptr %a455 + store { ptr, i64, i64 } { ptr @.str.5619, i64 61, i64 0 }, ptr %a456 + call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) + %t457 = load { ptr, i64, i64 }, ptr %a454 + call void @finch.gen.fail(ptr %t450, %S.ast.Node %t451, { ptr, i64, i64 } %t457) + store { ptr, i64, i64 } %t457, ptr %a458 + call void @finch_str_drop(ptr %a458) + br label %endif8728 +endif8728: + %t459 = load ptr, ptr %a1 + %t460 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t461 = load %S.gen.Val, ptr %t460 + %t462 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t459, %S.gen.Val %t461) + %t463 = load { ptr, i64, i64 }, ptr %a421 + store { ptr, i64, i64 } %t462, ptr %a421 + store { ptr, i64, i64 } %t463, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t466 = getelementptr inbounds %S.gen.Val, ptr %t465, i32 0, i32 2 + %t467 = load i1, ptr %t466 + br i1 %t467, label %then8729, label %endif8731 +then8729: + %t468 = load ptr, ptr %a1 + %t469 = load { ptr, i64, i64 }, ptr %a421 + %t470 = load %S.ast.Type, ptr %a273 + call void @finch.gen.holdAddr(ptr %t468, { ptr, i64, i64 } %t469, %S.ast.Type %t470) + br label %endif8731 +endif8731: + br label %endif8720 +endif8720: + %t471 = load ptr, ptr %a1 + %t472 = load %S.ast.Node, ptr %a2 + %t473 = call { ptr, i64, i64 } @finch.docs.mapMethods() + call void @finch.gen.noteMethod(ptr %t471, %S.ast.Node %t472, { ptr, i64, i64 } %t473) + store { ptr, i64, i64 } %t473, ptr %a474 + call void @finch.drop.arr_S_docs_Doc(ptr %a474) + %t475 = load ptr, ptr %a1 + %t476 = load %S.ast.Node, ptr %a2 + %t477 = load { ptr, i64, i64 }, ptr %a421 + %t478 = load %S.ast.Type, ptr %a273 + %t479 = call %S.gen.Val @finch.gen.mapMethod(ptr %t475, %S.ast.Node %t476, { ptr, i64, i64 } %t477, %S.ast.Type %t478) + store %S.gen.Val %t479, ptr %a480 + %t481 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t482 = load i1, ptr %t481 + %t483 = xor i1 %t482, true + br label %logic.from8732 +logic.from8732: + br i1 %t483, label %logic.rhs8733, label %logic.end8734 +logic.rhs8733: + %t484 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t485 = getelementptr inbounds %S.gen.Val, ptr %t484, i32 0, i32 2 + %t486 = load i1, ptr %t485 + br label %logic.rend8735 +logic.rend8735: + br label %logic.end8734 +logic.end8734: + %t487 = phi i1 [ false, %logic.from8732 ], [ %t486, %logic.rend8735 ] + br i1 %t487, label %then8736, label %endif8738 +then8736: + %t488 = load ptr, ptr %a1 + %t489 = load { ptr, i64, i64 }, ptr %a421 + %t490 = load %S.ast.Type, ptr %a273 + call void @finch.gen.dropAt(ptr %t488, { ptr, i64, i64 } %t489, %S.ast.Type %t490) + br label %endif8738 +endif8738: + %t491 = load ptr, ptr %a1 + %t492 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t491, i64 %t492) + %t493 = load %S.gen.Val, ptr %a480 + call void @finch_str_drop(ptr %a421) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t493 +endif8717: + %t494 = load ptr, ptr %a1 + %t495 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t494, i64 %t495) + %t496 = load %S.ast.Type, ptr %a273 + store %S.ast.Type %t496, ptr %a497 + call void @finch.copy.S_ast_Type(ptr %a498, ptr %a497) + %t499 = load %S.ast.Type, ptr %a498 + store %S.ast.Type %t499, ptr %a500 + store { ptr, i64, i64 } { ptr @.str.5620, i64 0, i64 0 }, ptr %a501 + store i1 false, ptr %a502 + %t503 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t504 = load { ptr, i64, i64 }, ptr %t503 + store { ptr, i64, i64 } %t504, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.5621, i64 3, i64 0 }, ptr %a506 + %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) + %t508 = icmp ne i32 %t507, 0 + br label %logic.from8739 +logic.from8739: + br i1 %t508, label %logic.rhs8740, label %logic.end8741 +logic.rhs8740: + %t509 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 + %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i32 0, i32 1 + %t511 = load i64, ptr %t510 + %t512 = icmp sgt i64 %t511, 0 + br label %logic.rend8742 +logic.rend8742: + br label %logic.end8741 +logic.end8741: + %t513 = phi i1 [ false, %logic.from8739 ], [ %t512, %logic.rend8742 ] + br label %logic.from8743 +logic.from8743: + br i1 %t513, label %logic.rhs8744, label %logic.end8745 +logic.rhs8744: + %t514 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 + %t515 = load { ptr, i64, i64 }, ptr %t514 + %t516 = extractvalue { ptr, i64, i64 } %t515, 1 + %t517 = icmp uge i64 0, %t516 + br i1 %t517, label %range8746, label %inrange8747 +range8746: + call void @finch_panic_index(ptr @.str.5622, i64 5333, i64 0, i64 %t516) + unreachable +inrange8747: + %t518 = extractvalue { ptr, i64, i64 } %t515, 0 + %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 + %t520 = getelementptr inbounds %S.ast.Type, ptr %t519, i32 0, i32 0 + %t521 = load { ptr, i64, i64 }, ptr %t520 + store { ptr, i64, i64 } %t521, ptr %a522 + store { ptr, i64, i64 } { ptr @.str.5623, i64 6, i64 0 }, ptr %a523 + %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) + %t525 = icmp ne i32 %t524, 0 + br label %logic.rend8748 +logic.rend8748: + br label %logic.end8745 +logic.end8745: + %t526 = phi i1 [ false, %logic.from8743 ], [ %t525, %logic.rend8748 ] + br i1 %t526, label %then8749, label %else8750 +then8749: + %t527 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t528 = getelementptr inbounds %S.gen.Val, ptr %t527, i32 0, i32 0 + %t529 = load { ptr, i64, i64 }, ptr %t528 + store { ptr, i64, i64 } %t529, ptr %a530 + call void @finch_str_copy(ptr %a531, ptr %a530) + %t532 = load { ptr, i64, i64 }, ptr %a531 + store { ptr, i64, i64 } %t532, ptr %a533 + %t534 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t535 = load i1, ptr %t534 + br i1 %t535, label %then8752, label %endif8754 +then8752: + %t536 = load ptr, ptr %a1 + %t537 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t538 = getelementptr inbounds %S.gen.Place, ptr %t537, i32 0, i32 0 + %t539 = load { ptr, i64, i64 }, ptr %t538 + %t540 = call { ptr, i64, i64 } @finch.gen.load(ptr %t536, { ptr, i64, i64 } { ptr @.str.5624, i64 3, i64 0 }, { ptr, i64, i64 } %t539) + %t541 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } %t540, ptr %a533 + store { ptr, i64, i64 } %t541, ptr %a542 + call void @finch_str_drop(ptr %a542) + br label %endif8754 +endif8754: + %t543 = load ptr, ptr %a1 + %t544 = load ptr, ptr %a1 + %t545 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } { ptr @.str.5625, i64 12, i64 0 }, ptr %a547 + store { ptr, i64, i64 } %t545, ptr %a548 + call void @finch_str_concat(ptr %a546, ptr %a547, ptr %a548) + %t549 = load { ptr, i64, i64 }, ptr %a546 + store { ptr, i64, i64 } %t549, ptr %a551 + store { ptr, i64, i64 } { ptr @.str.5626, i64 6, i64 0 }, ptr %a552 + call void @finch_str_concat(ptr %a550, ptr %a551, ptr %a552) + store { ptr, i64, i64 } %t549, ptr %a553 + call void @finch_str_drop(ptr %a553) + %t554 = load { ptr, i64, i64 }, ptr %a550 + %t555 = call { ptr, i64, i64 } @finch.gen.op(ptr %t544, { ptr, i64, i64 } %t554) + store { ptr, i64, i64 } %t554, ptr %a556 + call void @finch_str_drop(ptr %a556) + %t557 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t558 = load { ptr, i64, i64 }, ptr %t557 + store { ptr, i64, i64 } { ptr @.str.5627, i64 8, i64 0 }, ptr %a560 + store { ptr, i64, i64 } %t558, ptr %a561 + call void @finch_str_concat(ptr %a559, ptr %a560, ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a559 + store { ptr, i64, i64 } %t562, ptr %a564 + store { ptr, i64, i64 } { ptr @.str.5628, i64 20, i64 0 }, ptr %a565 + call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) + store { ptr, i64, i64 } %t562, ptr %a566 + call void @finch_str_drop(ptr %a566) + %t567 = load { ptr, i64, i64 }, ptr %a563 + %t568 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t543, { ptr, i64, i64 } %t555, { ptr, i64, i64 } %t567, %S.ast.Node %t568) + store { ptr, i64, i64 } %t555, ptr %a569 + call void @finch_str_drop(ptr %a569) + store { ptr, i64, i64 } %t567, ptr %a570 + call void @finch_str_drop(ptr %a570) + %t571 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 + %t572 = load { ptr, i64, i64 }, ptr %t571 + %t573 = extractvalue { ptr, i64, i64 } %t572, 1 + %t574 = icmp uge i64 0, %t573 + br i1 %t574, label %range8755, label %inrange8756 +range8755: + call void @finch_panic_index(ptr @.str.5629, i64 5339, i64 0, i64 %t573) + unreachable +inrange8756: + %t575 = extractvalue { ptr, i64, i64 } %t572, 0 + %t576 = getelementptr inbounds %S.ast.Type, ptr %t575, i64 0 + %t577 = load %S.ast.Type, ptr %t576 + store %S.ast.Type %t577, ptr %a578 + call void @finch.copy.S_ast_Type(ptr %a579, ptr %a578) + %t580 = load %S.ast.Type, ptr %a579 + %t581 = load %S.ast.Type, ptr %a500 + store %S.ast.Type %t580, ptr %a500 + store %S.ast.Type %t581, ptr %a582 + call void @finch.drop.S_ast_Type(ptr %a582) + %t583 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } %t583, ptr %a584 + call void @finch_str_copy(ptr %a585, ptr %a584) + %t586 = load { ptr, i64, i64 }, ptr %a585 + %t587 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t586, ptr %a501 + store { ptr, i64, i64 } %t587, ptr %a588 + call void @finch_str_drop(ptr %a588) + call void @finch_str_drop(ptr %a533) + br label %endif8751 +else8750: + %t589 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t590 = load { ptr, i64, i64 }, ptr %t589 + store { ptr, i64, i64 } %t590, ptr %a591 + store { ptr, i64, i64 } { ptr @.str.5630, i64 6, i64 0 }, ptr %a592 + %t593 = call i32 @finch_str_eq(ptr %a591, ptr %a592) + %t594 = icmp ne i32 %t593, 0 + br label %logic.from8757 +logic.from8757: + br i1 %t594, label %logic.end8759, label %logic.rhs8758 +logic.rhs8758: + %t595 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t596 = load { ptr, i64, i64 }, ptr %t595 + store { ptr, i64, i64 } %t596, ptr %a597 + store { ptr, i64, i64 } { ptr @.str.5631, i64 4, i64 0 }, ptr %a598 + %t599 = call i32 @finch_str_eq(ptr %a597, ptr %a598) + %t600 = icmp ne i32 %t599, 0 + br label %logic.rend8760 +logic.rend8760: + br label %logic.end8759 +logic.end8759: + %t601 = phi i1 [ true, %logic.from8757 ], [ %t600, %logic.rend8760 ] + br i1 %t601, label %then8761, label %endif8763 +then8761: + %t602 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t603 = load i1, ptr %t602 + br i1 %t603, label %then8764, label %else8765 +then8764: + %t604 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t605 = getelementptr inbounds %S.gen.Place, ptr %t604, i32 0, i32 0 + %t606 = load { ptr, i64, i64 }, ptr %t605 + store { ptr, i64, i64 } %t606, ptr %a607 + call void @finch_str_copy(ptr %a608, ptr %a607) + %t609 = load { ptr, i64, i64 }, ptr %a608 + %t610 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t609, ptr %a501 + store { ptr, i64, i64 } %t610, ptr %a611 + call void @finch_str_drop(ptr %a611) + br label %endif8766 +else8765: + %t612 = load ptr, ptr %a1 + %t613 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t614 = load %S.gen.Val, ptr %t613 + %t615 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t612, %S.gen.Val %t614) + %t616 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t615, ptr %a501 + store { ptr, i64, i64 } %t616, ptr %a617 + call void @finch_str_drop(ptr %a617) + store i1 true, ptr %a502 + br label %endif8766 +endif8766: + br label %endif8763 +endif8763: + br label %endif8751 +endif8751: + %t618 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t619 = load { ptr, i64, i64 }, ptr %t618 + store { ptr, i64, i64 } %t619, ptr %a620 + store { ptr, i64, i64 } { ptr @.str.5632, i64 6, i64 0 }, ptr %a621 + %t622 = call i32 @finch_str_eq(ptr %a620, ptr %a621) + %t623 = icmp ne i32 %t622, 0 + br label %logic.from8767 +logic.from8767: + br i1 %t623, label %logic.end8769, label %logic.rhs8768 +logic.rhs8768: + %t624 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t625 = load { ptr, i64, i64 }, ptr %t624 + store { ptr, i64, i64 } %t625, ptr %a626 + store { ptr, i64, i64 } { ptr @.str.5633, i64 4, i64 0 }, ptr %a627 + %t628 = call i32 @finch_str_eq(ptr %a626, ptr %a627) + %t629 = icmp ne i32 %t628, 0 + br label %logic.rend8770 +logic.rend8770: + br label %logic.end8769 +logic.end8769: + %t630 = phi i1 [ true, %logic.from8767 ], [ %t629, %logic.rend8770 ] + br i1 %t630, label %then8771, label %endif8773 +then8771: + %t631 = load ptr, ptr %a1 + %t632 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t633 = load { ptr, i64, i64 }, ptr %t632 + %t634 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t635 = load { ptr, i64, i64 }, ptr %t634 + %t636 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t637 = load { ptr, i64, i64 }, ptr %t636 + %t638 = call i64 @finch.gen.findMethod(ptr %t631, { ptr, i64, i64 } %t633, { ptr, i64, i64 } %t635, { ptr, i64, i64 } %t637) + store i64 %t638, ptr %a639 + %t640 = load i64, ptr %a639 + %t641 = icmp slt i64 %t640, 0 + br label %logic.from8774 +logic.from8774: + br i1 %t641, label %logic.rhs8775, label %logic.end8776 +logic.rhs8775: + %t642 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t643 = load { ptr, i64, i64 }, ptr %t642 + store { ptr, i64, i64 } %t643, ptr %a644 + store { ptr, i64, i64 } { ptr @.str.5634, i64 6, i64 0 }, ptr %a645 + %t646 = call i32 @finch_str_eq(ptr %a644, ptr %a645) + %t647 = icmp ne i32 %t646, 0 + br label %logic.rend8777 +logic.rend8777: + br label %logic.end8776 +logic.end8776: + %t648 = phi i1 [ false, %logic.from8774 ], [ %t647, %logic.rend8777 ] + br i1 %t648, label %then8778, label %endif8780 +then8778: + %t649 = load ptr, ptr %a1 + %t650 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t651 = load { ptr, i64, i64 }, ptr %t650 + %t652 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t653 = load { ptr, i64, i64 }, ptr %t652 + %t654 = call i64 @finch.gen.findStruct(ptr %t649, { ptr, i64, i64 } %t651, { ptr, i64, i64 } %t653) + store i64 %t654, ptr %a655 + %t656 = load ptr, ptr %a1 + %t657 = icmp eq ptr %t656, null + br i1 %t657, label %panic8781, label %ok8782 +panic8781: + call void @finch_panic(ptr @.str.5635, i64 5353, ptr @.str.5636) + unreachable +ok8782: + %t658 = getelementptr inbounds %S.gen.Gen, ptr %t656, i32 0, i32 16 + %t659 = load i64, ptr %a655 + %t660 = load { ptr, i64, i64 }, ptr %t658 + %t661 = extractvalue { ptr, i64, i64 } %t660, 1 + %t662 = icmp uge i64 %t659, %t661 + br i1 %t662, label %range8783, label %inrange8784 +range8783: + call void @finch_panic_index(ptr @.str.5637, i64 5353, i64 %t659, i64 %t661) + unreachable +inrange8784: + %t663 = extractvalue { ptr, i64, i64 } %t660, 0 + %t664 = getelementptr inbounds %S.gen.StructDef, ptr %t663, i64 %t659 + %t665 = getelementptr inbounds %S.gen.StructDef, ptr %t664, i32 0, i32 5 + %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 + %t667 = load i64, ptr %t666 + %t668 = icmp sgt i64 %t667, 0 + br i1 %t668, label %then8785, label %endif8787 +then8785: + %t669 = load ptr, ptr %a1 + %t670 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t671 = load { ptr, i64, i64 }, ptr %t670 + %t672 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t673 = load { ptr, i64, i64 }, ptr %t672 + %t674 = load ptr, ptr %a1 + %t675 = icmp eq ptr %t674, null + br i1 %t675, label %panic8788, label %ok8789 +panic8788: + call void @finch_panic(ptr @.str.5638, i64 5354, ptr @.str.5639) + unreachable +ok8789: + %t676 = getelementptr inbounds %S.gen.Gen, ptr %t674, i32 0, i32 16 + %t677 = load i64, ptr %a655 + %t678 = load { ptr, i64, i64 }, ptr %t676 + %t679 = extractvalue { ptr, i64, i64 } %t678, 1 + %t680 = icmp uge i64 %t677, %t679 + br i1 %t680, label %range8790, label %inrange8791 +range8790: + call void @finch_panic_index(ptr @.str.5640, i64 5354, i64 %t677, i64 %t679) + unreachable +inrange8791: + %t681 = extractvalue { ptr, i64, i64 } %t678, 0 + %t682 = getelementptr inbounds %S.gen.StructDef, ptr %t681, i64 %t677 + %t683 = getelementptr inbounds %S.gen.StructDef, ptr %t682, i32 0, i32 5 + %t684 = load { ptr, i64, i64 }, ptr %t683 + %t685 = call i64 @finch.gen.findTemplate(ptr %t669, { ptr, i64, i64 } %t671, { ptr, i64, i64 } %t673, { ptr, i64, i64 } %t684, i1 false) + store i64 %t685, ptr %a686 + %t687 = load i64, ptr %a686 + %t688 = icmp sge i64 %t687, 0 + br i1 %t688, label %then8792, label %endif8794 +then8792: + %t689 = load ptr, ptr %a1 + %t690 = load i64, ptr %a686 + %t691 = load ptr, ptr %a1 + %t692 = icmp eq ptr %t691, null + br i1 %t692, label %panic8795, label %ok8796 +panic8795: + call void @finch_panic(ptr @.str.5641, i64 5356, ptr @.str.5642) + unreachable +ok8796: + %t693 = getelementptr inbounds %S.gen.Gen, ptr %t691, i32 0, i32 16 + %t694 = load i64, ptr %a655 + %t695 = load { ptr, i64, i64 }, ptr %t693 + %t696 = extractvalue { ptr, i64, i64 } %t695, 1 + %t697 = icmp uge i64 %t694, %t696 + br i1 %t697, label %range8797, label %inrange8798 +range8797: + call void @finch_panic_index(ptr @.str.5643, i64 5356, i64 %t694, i64 %t696) + unreachable +inrange8798: + %t698 = extractvalue { ptr, i64, i64 } %t695, 0 + %t699 = getelementptr inbounds %S.gen.StructDef, ptr %t698, i64 %t694 + %t700 = getelementptr inbounds %S.gen.StructDef, ptr %t699, i32 0, i32 7 + %t701 = load { ptr, i64, i64 }, ptr %t700 + %t702 = load %S.ast.Type, ptr %a500 + %t703 = load %S.ast.Node, ptr %a2 + %t704 = call i64 @finch.gen.instFn(ptr %t689, i64 %t690, { ptr, i64, i64 } %t701, %S.ast.Type %t702, %S.ast.Node %t703) + store i64 %t704, ptr %a639 + br label %endif8794 +endif8794: + br label %endif8787 +endif8787: + br label %endif8780 +endif8780: + %t705 = load i64, ptr %a639 + %t706 = icmp slt i64 %t705, 0 + br i1 %t706, label %then8799, label %endif8801 +then8799: + store { ptr, i64, i64 } zeroinitializer, ptr %a707 + %t708 = load ptr, ptr %a1 + %t709 = icmp eq ptr %t708, null + br i1 %t709, label %panic8802, label %ok8803 +panic8802: + call void @finch_panic(ptr @.str.5644, i64 5362, ptr @.str.5645) + unreachable +ok8803: + %t710 = getelementptr inbounds %S.gen.Gen, ptr %t708, i32 0, i32 15 + store i64 0, ptr %a711 + br label %each.cond8804 +each.cond8804: + %t712 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i32 0, i32 1 + %t713 = load i64, ptr %t712 + %t714 = load i64, ptr %a711 + %t715 = icmp slt i64 %t714, %t713 + br i1 %t715, label %each.body8805, label %each.end8807 +each.body8805: + %t716 = load ptr, ptr %t710 + %t717 = getelementptr inbounds %S.gen.FnSig, ptr %t716, i64 %t714 + %t718 = load %S.gen.FnSig, ptr %t717 + store %S.gen.FnSig %t718, ptr %a719 + %t720 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 2 + %t721 = load { ptr, i64, i64 }, ptr %t720 + %t722 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t723 = load { ptr, i64, i64 }, ptr %t722 + store { ptr, i64, i64 } %t721, ptr %a724 + store { ptr, i64, i64 } %t723, ptr %a725 + %t726 = call i32 @finch_str_eq(ptr %a724, ptr %a725) + %t727 = icmp ne i32 %t726, 0 + br label %logic.from8808 +logic.from8808: + br i1 %t727, label %logic.rhs8809, label %logic.end8810 +logic.rhs8809: + %t728 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 3 + %t729 = load { ptr, i64, i64 }, ptr %t728 + %t730 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t731 = load { ptr, i64, i64 }, ptr %t730 + store { ptr, i64, i64 } %t729, ptr %a732 + store { ptr, i64, i64 } %t731, ptr %a733 + %t734 = call i32 @finch_str_eq(ptr %a732, ptr %a733) + %t735 = icmp ne i32 %t734, 0 + br label %logic.rend8811 +logic.rend8811: + br label %logic.end8810 +logic.end8810: + %t736 = phi i1 [ false, %logic.from8808 ], [ %t735, %logic.rend8811 ] + br i1 %t736, label %then8812, label %endif8814 +then8812: + %t737 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 + %t738 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 1 + %t739 = load { ptr, i64, i64 }, ptr %t738 + store { ptr, i64, i64 } %t739, ptr %a740 + call void @finch_str_copy(ptr %a741, ptr %a740) + %t742 = load { ptr, i64, i64 }, ptr %a741 + %t743 = load i64, ptr %t737 + %t744 = add i64 %t743, 1 + call void @finch_arr_reserve(ptr %a707, i64 %t744, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t745 = load ptr, ptr %a707 + %t746 = getelementptr inbounds { ptr, i64, i64 }, ptr %t745, i64 %t743 + store { ptr, i64, i64 } %t742, ptr %t746 + store i64 %t744, ptr %t737 + br label %endif8814 +endif8814: + br label %each.step8806 +each.step8806: + %t747 = load i64, ptr %a711 + %t748 = add i64 %t747, 1 + store i64 %t748, ptr %a711 + br label %each.cond8804 +each.end8807: + %t749 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 + %t750 = load i64, ptr %t749 + %t751 = icmp eq i64 %t750, 0 + br i1 %t751, label %then8815, label %endif8817 +then8815: + %t752 = load ptr, ptr %a1 + %t753 = load %S.ast.Node, ptr %a2 + %t754 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t755 = load { ptr, i64, i64 }, ptr %t754 + store { ptr, i64, i64 } { ptr @.str.5646, i64 4, i64 0 }, ptr %a757 + store { ptr, i64, i64 } %t755, ptr %a758 + call void @finch_str_concat(ptr %a756, ptr %a757, ptr %a758) + %t759 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t759, ptr %a761 + store { ptr, i64, i64 } { ptr @.str.5647, i64 1, i64 0 }, ptr %a762 + call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) + store { ptr, i64, i64 } %t759, ptr %a763 + call void @finch_str_drop(ptr %a763) + %t764 = load { ptr, i64, i64 }, ptr %a760 + %t765 = load %S.ast.Type, ptr %a500 + %t766 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t765) + store { ptr, i64, i64 } %t764, ptr %a768 + store { ptr, i64, i64 } %t766, ptr %a769 + call void @finch_str_concat(ptr %a767, ptr %a768, ptr %a769) + store { ptr, i64, i64 } %t764, ptr %a770 + call void @finch_str_drop(ptr %a770) + store { ptr, i64, i64 } %t766, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t772, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.5648, i64 34, i64 0 }, ptr %a775 + call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) + store { ptr, i64, i64 } %t772, ptr %a776 + call void @finch_str_drop(ptr %a776) + %t777 = load { ptr, i64, i64 }, ptr %a773 + %t778 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t779 = load { ptr, i64, i64 }, ptr %t778 + store { ptr, i64, i64 } %t777, ptr %a781 + store { ptr, i64, i64 } %t779, ptr %a782 + call void @finch_str_concat(ptr %a780, ptr %a781, ptr %a782) + store { ptr, i64, i64 } %t777, ptr %a783 + call void @finch_str_drop(ptr %a783) + %t784 = load { ptr, i64, i64 }, ptr %a780 + store { ptr, i64, i64 } %t784, ptr %a786 + store { ptr, i64, i64 } { ptr @.str.5649, i64 1, i64 0 }, ptr %a787 + call void @finch_str_concat(ptr %a785, ptr %a786, ptr %a787) + store { ptr, i64, i64 } %t784, ptr %a788 + call void @finch_str_drop(ptr %a788) + %t789 = load { ptr, i64, i64 }, ptr %a785 + %t790 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t791 = load { ptr, i64, i64 }, ptr %t790 + store { ptr, i64, i64 } %t789, ptr %a793 + store { ptr, i64, i64 } %t791, ptr %a794 + call void @finch_str_concat(ptr %a792, ptr %a793, ptr %a794) + store { ptr, i64, i64 } %t789, ptr %a795 + call void @finch_str_drop(ptr %a795) + %t796 = load { ptr, i64, i64 }, ptr %a792 + store { ptr, i64, i64 } %t796, ptr %a798 + store { ptr, i64, i64 } { ptr @.str.5650, i64 13, i64 0 }, ptr %a799 + call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799) + store { ptr, i64, i64 } %t796, ptr %a800 + call void @finch_str_drop(ptr %a800) + %t801 = load { ptr, i64, i64 }, ptr %a797 + call void @finch.gen.fail(ptr %t752, %S.ast.Node %t753, { ptr, i64, i64 } %t801) + store { ptr, i64, i64 } %t801, ptr %a802 + call void @finch_str_drop(ptr %a802) + br label %endif8817 +endif8817: + %t803 = load ptr, ptr %a1 + %t804 = load %S.ast.Node, ptr %a2 + %t805 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t806 = load { ptr, i64, i64 }, ptr %t805 + store { ptr, i64, i64 } { ptr @.str.5651, i64 4, i64 0 }, ptr %a808 + store { ptr, i64, i64 } %t806, ptr %a809 + call void @finch_str_concat(ptr %a807, ptr %a808, ptr %a809) + %t810 = load { ptr, i64, i64 }, ptr %a807 + store { ptr, i64, i64 } %t810, ptr %a812 + store { ptr, i64, i64 } { ptr @.str.5652, i64 1, i64 0 }, ptr %a813 + call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813) + store { ptr, i64, i64 } %t810, ptr %a814 + call void @finch_str_drop(ptr %a814) + %t815 = load { ptr, i64, i64 }, ptr %a811 + %t816 = load %S.ast.Type, ptr %a500 + %t817 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t816) + store { ptr, i64, i64 } %t815, ptr %a819 + store { ptr, i64, i64 } %t817, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t815, ptr %a821 + call void @finch_str_drop(ptr %a821) + store { ptr, i64, i64 } %t817, ptr %a822 + call void @finch_str_drop(ptr %a822) + %t823 = load { ptr, i64, i64 }, ptr %a818 + store { ptr, i64, i64 } %t823, ptr %a825 + store { ptr, i64, i64 } { ptr @.str.5653, i64 16, i64 0 }, ptr %a826 + call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) + store { ptr, i64, i64 } %t823, ptr %a827 + call void @finch_str_drop(ptr %a827) + %t828 = load { ptr, i64, i64 }, ptr %a824 + %t829 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t830 = load { ptr, i64, i64 }, ptr %t829 + store { ptr, i64, i64 } %t828, ptr %a832 + store { ptr, i64, i64 } %t830, ptr %a833 + call void @finch_str_concat(ptr %a831, ptr %a832, ptr %a833) + store { ptr, i64, i64 } %t828, ptr %a834 + call void @finch_str_drop(ptr %a834) + %t835 = load { ptr, i64, i64 }, ptr %a831 + store { ptr, i64, i64 } %t835, ptr %a837 + store { ptr, i64, i64 } { ptr @.str.5654, i64 11, i64 0 }, ptr %a838 + call void @finch_str_concat(ptr %a836, ptr %a837, ptr %a838) + store { ptr, i64, i64 } %t835, ptr %a839 + call void @finch_str_drop(ptr %a839) + %t840 = load { ptr, i64, i64 }, ptr %a836 + %t841 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5655, i64 2, i64 0 }, ptr %a842 + call void @finch_str_join(ptr %a843, ptr %a707, ptr %a842) + %t844 = load { ptr, i64, i64 }, ptr %a843 + store { ptr, i64, i64 } %t840, ptr %a846 + store { ptr, i64, i64 } %t844, ptr %a847 + call void @finch_str_concat(ptr %a845, ptr %a846, ptr %a847) + store { ptr, i64, i64 } %t840, ptr %a848 + call void @finch_str_drop(ptr %a848) + store { ptr, i64, i64 } %t844, ptr %a849 + call void @finch_str_drop(ptr %a849) + %t850 = load { ptr, i64, i64 }, ptr %a845 + store { ptr, i64, i64 } %t850, ptr %a852 + store { ptr, i64, i64 } { ptr @.str.5656, i64 1, i64 0 }, ptr %a853 + call void @finch_str_concat(ptr %a851, ptr %a852, ptr %a853) + store { ptr, i64, i64 } %t850, ptr %a854 + call void @finch_str_drop(ptr %a854) + %t855 = load { ptr, i64, i64 }, ptr %a851 + call void @finch.gen.fail(ptr %t803, %S.ast.Node %t804, { ptr, i64, i64 } %t855) + store { ptr, i64, i64 } %t855, ptr %a856 + call void @finch_str_drop(ptr %a856) + call void @finch.drop.arr_str(ptr %a707) + br label %endif8801 +endif8801: + %t857 = load ptr, ptr %a1 + %t858 = icmp eq ptr %t857, null + br i1 %t858, label %panic8818, label %ok8819 +panic8818: + call void @finch_panic(ptr @.str.5657, i64 5373, ptr @.str.5658) + unreachable +ok8819: + %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 15 + %t860 = load i64, ptr %a639 + %t861 = load { ptr, i64, i64 }, ptr %t859 + %t862 = extractvalue { ptr, i64, i64 } %t861, 1 + %t863 = icmp uge i64 %t860, %t862 + br i1 %t863, label %range8820, label %inrange8821 +range8820: + call void @finch_panic_index(ptr @.str.5659, i64 5373, i64 %t860, i64 %t862) + unreachable +inrange8821: + %t864 = extractvalue { ptr, i64, i64 } %t861, 0 + %t865 = getelementptr inbounds %S.gen.FnSig, ptr %t864, i64 %t860 + %t866 = getelementptr inbounds %S.gen.FnSig, ptr %t865, i32 0, i32 10 + %t867 = load i1, ptr %t866 + br label %logic.from8822 +logic.from8822: + br i1 %t867, label %logic.rhs8823, label %logic.end8824 +logic.rhs8823: + %t868 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t869 = load { ptr, i64, i64 }, ptr %t868 + store { ptr, i64, i64 } %t869, ptr %a870 + store { ptr, i64, i64 } { ptr @.str.5660, i64 6, i64 0 }, ptr %a871 + %t872 = call i32 @finch_str_eq(ptr %a870, ptr %a871) + %t873 = icmp ne i32 %t872, 0 + br label %logic.from8825 +logic.from8825: + br i1 %t873, label %logic.end8827, label %logic.rhs8826 +logic.rhs8826: + %t874 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t875 = load { ptr, i64, i64 }, ptr %t874 + store { ptr, i64, i64 } %t875, ptr %a876 + store { ptr, i64, i64 } { ptr @.str.5661, i64 4, i64 0 }, ptr %a877 + %t878 = call i32 @finch_str_eq(ptr %a876, ptr %a877) + %t879 = icmp ne i32 %t878, 0 + br label %logic.rend8828 +logic.rend8828: + br label %logic.end8827 +logic.end8827: + %t880 = phi i1 [ true, %logic.from8825 ], [ %t879, %logic.rend8828 ] + br label %logic.rend8829 +logic.rend8829: + br label %logic.end8824 +logic.end8824: + %t881 = phi i1 [ false, %logic.from8822 ], [ %t880, %logic.rend8829 ] + br i1 %t881, label %then8830, label %endif8832 +then8830: + %t882 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t883 = load i1, ptr %t882 + %t884 = xor i1 %t883, true + br i1 %t884, label %then8833, label %endif8835 +then8833: + %t885 = load ptr, ptr %a1 + %t886 = load %S.ast.Node, ptr %a2 + %t887 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t888 = load { ptr, i64, i64 }, ptr %t887 + store { ptr, i64, i64 } %t888, ptr %a890 + store { ptr, i64, i64 } { ptr @.str.5662, i64 28, i64 0 }, ptr %a891 + call void @finch_str_concat(ptr %a889, ptr %a890, ptr %a891) + %t892 = load { ptr, i64, i64 }, ptr %a889 + %t893 = load %S.ast.Type, ptr %a500 + %t894 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t893) + store { ptr, i64, i64 } %t892, ptr %a896 + store { ptr, i64, i64 } %t894, ptr %a897 + call void @finch_str_concat(ptr %a895, ptr %a896, ptr %a897) + store { ptr, i64, i64 } %t892, ptr %a898 + call void @finch_str_drop(ptr %a898) + store { ptr, i64, i64 } %t894, ptr %a899 + call void @finch_str_drop(ptr %a899) + %t900 = load { ptr, i64, i64 }, ptr %a895 + store { ptr, i64, i64 } %t900, ptr %a902 + store { ptr, i64, i64 } { ptr @.str.5663, i64 30, i64 0 }, ptr %a903 + call void @finch_str_concat(ptr %a901, ptr %a902, ptr %a903) + store { ptr, i64, i64 } %t900, ptr %a904 + call void @finch_str_drop(ptr %a904) + %t905 = load { ptr, i64, i64 }, ptr %a901 + call void @finch.gen.fail(ptr %t885, %S.ast.Node %t886, { ptr, i64, i64 } %t905) + store { ptr, i64, i64 } %t905, ptr %a906 + call void @finch_str_drop(ptr %a906) + br label %endif8835 +endif8835: + %t907 = load %S.ast.Node, ptr %a13 + %t908 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t907) + store { ptr, i64, i64 } %t908, ptr %a909 + %t910 = getelementptr inbounds { ptr, i64, i64 }, ptr %a909, i32 0, i32 1 + %t911 = load i64, ptr %t910 + %t912 = icmp sgt i64 %t911, 0 + br i1 %t912, label %then8836, label %endif8838 +then8836: + %t913 = load ptr, ptr %a1 + %t914 = load { ptr, i64, i64 }, ptr %a909 + %t915 = call i64 @finch.gen.lookup(ptr %t913, { ptr, i64, i64 } %t914) + store i64 %t915, ptr %a916 + %t917 = load i64, ptr %a916 + %t918 = icmp sge i64 %t917, 0 + br label %logic.from8839 +logic.from8839: + br i1 %t918, label %logic.rhs8840, label %logic.end8841 +logic.rhs8840: + %t919 = load ptr, ptr %a1 + %t920 = load i64, ptr %a916 + %t921 = call %S.gen.Var @finch.gen.varAt(ptr %t919, i64 %t920) + %t922 = extractvalue %S.gen.Var %t921, 3 + store %S.gen.Var %t921, ptr %a923 + call void @finch.drop.S_gen_Var(ptr %a923) + br label %logic.rend8842 +logic.rend8842: + br label %logic.end8841 +logic.end8841: + %t924 = phi i1 [ false, %logic.from8839 ], [ %t922, %logic.rend8842 ] + br i1 %t924, label %then8843, label %endif8845 +then8843: + %t925 = load ptr, ptr %a1 + %t926 = load %S.ast.Node, ptr %a2 + %t927 = load { ptr, i64, i64 }, ptr %a909 + store { ptr, i64, i64 } { ptr @.str.5664, i64 19, i64 0 }, ptr %a929 + store { ptr, i64, i64 } %t927, ptr %a930 + call void @finch_str_concat(ptr %a928, ptr %a929, ptr %a930) + %t931 = load { ptr, i64, i64 }, ptr %a928 + store { ptr, i64, i64 } %t931, ptr %a933 + store { ptr, i64, i64 } { ptr @.str.5665, i64 18, i64 0 }, ptr %a934 + call void @finch_str_concat(ptr %a932, ptr %a933, ptr %a934) + store { ptr, i64, i64 } %t931, ptr %a935 + call void @finch_str_drop(ptr %a935) + %t936 = load { ptr, i64, i64 }, ptr %a932 + call void @finch.gen.fail(ptr %t925, %S.ast.Node %t926, { ptr, i64, i64 } %t936) + store { ptr, i64, i64 } %t936, ptr %a937 + call void @finch_str_drop(ptr %a937) + br label %endif8845 +endif8845: + br label %endif8838 +endif8838: + call void @finch_str_drop(ptr %a909) + br label %endif8832 +endif8832: + %t938 = load i1, ptr %a502 + br label %logic.from8846 +logic.from8846: + br i1 %t938, label %logic.rhs8847, label %logic.end8848 +logic.rhs8847: + %t939 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t940 = getelementptr inbounds %S.gen.Val, ptr %t939, i32 0, i32 2 + %t941 = load i1, ptr %t940 + br label %logic.rend8849 +logic.rend8849: + br label %logic.end8848 +logic.end8848: + %t942 = phi i1 [ false, %logic.from8846 ], [ %t941, %logic.rend8849 ] + br i1 %t942, label %then8850, label %endif8852 +then8850: + %t943 = load ptr, ptr %a1 + %t944 = load { ptr, i64, i64 }, ptr %a501 + %t945 = load %S.ast.Type, ptr %a500 + call void @finch.gen.holdAddr(ptr %t943, { ptr, i64, i64 } %t944, %S.ast.Type %t945) + br label %endif8852 +endif8852: + %t946 = load ptr, ptr %a1 + %t947 = load i64, ptr %a639 + %t948 = load %S.ast.Node, ptr %a2 + %t949 = load %S.ast.Type, ptr %a500 + %t950 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t949) + store { ptr, i64, i64 } %t950, ptr %a952 + store { ptr, i64, i64 } { ptr @.str.5666, i64 1, i64 0 }, ptr %a953 + call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) + store { ptr, i64, i64 } %t950, ptr %a954 + call void @finch_str_drop(ptr %a954) + %t955 = load { ptr, i64, i64 }, ptr %a951 + %t956 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t957 = load { ptr, i64, i64 }, ptr %t956 + store { ptr, i64, i64 } %t955, ptr %a959 + store { ptr, i64, i64 } %t957, ptr %a960 + call void @finch_str_concat(ptr %a958, ptr %a959, ptr %a960) + store { ptr, i64, i64 } %t955, ptr %a961 + call void @finch_str_drop(ptr %a961) + %t962 = load { ptr, i64, i64 }, ptr %a958 + %t963 = load { ptr, i64, i64 }, ptr %a501 + %t964 = load %S.ast.Node, ptr %a13 + %t965 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t964) + %t966 = call %S.gen.Val @finch.gen.callFn(ptr %t946, i64 %t947, %S.ast.Node %t948, i64 1, { ptr, i64, i64 } %t962, { ptr, i64, i64 } %t963, { ptr, i64, i64 } %t965) + store { ptr, i64, i64 } %t962, ptr %a967 + call void @finch_str_drop(ptr %a967) + store { ptr, i64, i64 } %t965, ptr %a968 + call void @finch_str_drop(ptr %a968) + store %S.gen.Val %t966, ptr %a969 + %t970 = load i1, ptr %a502 + br label %logic.from8853 +logic.from8853: + br i1 %t970, label %logic.rhs8854, label %logic.end8855 +logic.rhs8854: + %t971 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t972 = getelementptr inbounds %S.gen.Val, ptr %t971, i32 0, i32 2 + %t973 = load i1, ptr %t972 + br label %logic.rend8856 +logic.rend8856: + br label %logic.end8855 +logic.end8855: + %t974 = phi i1 [ false, %logic.from8853 ], [ %t973, %logic.rend8856 ] + br label %logic.from8857 +logic.from8857: + br i1 %t974, label %logic.rhs8858, label %logic.end8859 +logic.rhs8858: + %t975 = load ptr, ptr %a1 + %t976 = load %S.ast.Type, ptr %a500 + %t977 = call i1 @finch.gen.owning(ptr %t975, %S.ast.Type %t976) + br label %logic.rend8860 +logic.rend8860: + br label %logic.end8859 +logic.end8859: + %t978 = phi i1 [ false, %logic.from8857 ], [ %t977, %logic.rend8860 ] + br i1 %t978, label %then8861, label %endif8863 +then8861: + %t979 = load ptr, ptr %a1 + %t980 = load { ptr, i64, i64 }, ptr %a501 + %t981 = load %S.ast.Type, ptr %a500 + call void @finch.gen.dropAt(ptr %t979, { ptr, i64, i64 } %t980, %S.ast.Type %t981) + br label %endif8863 +endif8863: + %t982 = load ptr, ptr %a1 + %t983 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t982, i64 %t983) + %t984 = load %S.gen.Val, ptr %a969 + call void @finch_str_drop(ptr %a501) + call void @finch.drop.S_ast_Type(ptr %a500) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t984 +endif8773: + %t985 = load ptr, ptr %a1 + %t986 = load %S.ast.Node, ptr %a2 + %t987 = load %S.ast.Type, ptr %a273 + %t988 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t987) + store { ptr, i64, i64 } %t988, ptr %a990 + store { ptr, i64, i64 } { ptr @.str.5667, i64 15, i64 0 }, ptr %a991 + call void @finch_str_concat(ptr %a989, ptr %a990, ptr %a991) + store { ptr, i64, i64 } %t988, ptr %a992 + call void @finch_str_drop(ptr %a992) + %t993 = load { ptr, i64, i64 }, ptr %a989 + call void @finch.gen.fail(ptr %t985, %S.ast.Node %t986, { ptr, i64, i64 } %t993) + store { ptr, i64, i64 } %t993, ptr %a994 + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a501) + call void @finch.drop.S_ast_Type(ptr %a500) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val zeroinitializer +} + +define internal void @finch.gen.need(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Node, ptr %a2 + %t6 = load i64, ptr %a3 + %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %t7 + call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 1, i64 %t6, { ptr, i64, i64 } %t8) + ret void +} + +define internal %S.gen.Val @finch.gen.arrayMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a12 = alloca %S.ast.Type, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a15 = alloca %S.ast.Type, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca %S.gen.Val, align 16 + %a70 = alloca %S.gen.Val, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca %S.ast.Type, align 16 + %a260 = alloca %S.ast.Type, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca %S.gen.Val, align 16 + %a315 = alloca %S.gen.Val, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca %S.ast.Type, align 16 + %a420 = alloca %S.ast.Type, align 16 + %a423 = alloca %S.gen.Val, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca %S.ast.Type, align 16 + %a435 = alloca %S.ast.Type, align 16 + %a440 = alloca %S.gen.Val, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca %S.gen.Val, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca %S.gen.Val, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a615 = alloca %S.gen.Val, align 16 + %a616 = alloca %S.ast.Type, align 16 + %a618 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca %S.gen.Val, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a644 = alloca %S.gen.Val, align 16 + %a646 = alloca %S.gen.Val, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a687 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a699 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a702 = alloca { ptr, i64, i64 }, align 16 + %a704 = alloca { ptr, i64, i64 }, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a716 = alloca { ptr, i64, i64 }, align 16 + %a717 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a744 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a746 = alloca { ptr, i64, i64 }, align 16 + %a747 = alloca { ptr, i64, i64 }, align 16 + %a749 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a766 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca %S.gen.Val, align 16 + %a792 = alloca %S.ast.Type, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca %S.gen.Val, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a805 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a832 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a837 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a841 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a844 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a852 = alloca { ptr, i64, i64 }, align 16 + %a853 = alloca { ptr, i64, i64 }, align 16 + %a854 = alloca { ptr, i64, i64 }, align 16 + %a857 = alloca { ptr, i64, i64 }, align 16 + %a858 = alloca { ptr, i64, i64 }, align 16 + %a859 = alloca { ptr, i64, i64 }, align 16 + %a860 = alloca { ptr, i64, i64 }, align 16 + %a862 = alloca { ptr, i64, i64 }, align 16 + %a863 = alloca { ptr, i64, i64 }, align 16 + %a864 = alloca { ptr, i64, i64 }, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a871 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a878 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca %S.ast.Type, align 16 + %a889 = alloca %S.ast.Type, align 16 + %a897 = alloca { ptr, i64, i64 }, align 16 + %a898 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca %S.gen.Val, align 16 + %a923 = alloca %S.ast.Type, align 16 + %a925 = alloca { ptr, i64, i64 }, align 16 + %a926 = alloca { ptr, i64, i64 }, align 16 + %a928 = alloca %S.gen.Val, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a936 = alloca { ptr, i64, i64 }, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a940 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a949 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a963 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a966 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a968 = alloca { ptr, i64, i64 }, align 16 + %a970 = alloca { ptr, i64, i64 }, align 16 + %a974 = alloca { ptr, i64, i64 }, align 16 + %a975 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a987 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a991 = alloca { ptr, i64, i64 }, align 16 + %a992 = alloca { ptr, i64, i64 }, align 16 + %a994 = alloca { ptr, i64, i64 }, align 16 + %a995 = alloca { ptr, i64, i64 }, align 16 + %a996 = alloca { ptr, i64, i64 }, align 16 + %a997 = alloca { ptr, i64, i64 }, align 16 + %a1000 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1005 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1010 = alloca { ptr, i64, i64 }, align 16 + %a1012 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1015 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1025 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1034 = alloca { ptr, i64, i64 }, align 16 + %a1035 = alloca { ptr, i64, i64 }, align 16 + %a1036 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca { ptr, i64, i64 }, align 16 + %a1040 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1045 = alloca { ptr, i64, i64 }, align 16 + %a1046 = alloca { ptr, i64, i64 }, align 16 + %a1047 = alloca { ptr, i64, i64 }, align 16 + %a1049 = alloca { ptr, i64, i64 }, align 16 + %a1050 = alloca { ptr, i64, i64 }, align 16 + %a1051 = alloca { ptr, i64, i64 }, align 16 + %a1052 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1057 = alloca { ptr, i64, i64 }, align 16 + %a1058 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1061 = alloca { ptr, i64, i64 }, align 16 + %a1062 = alloca { ptr, i64, i64 }, align 16 + %a1063 = alloca { ptr, i64, i64 }, align 16 + %a1064 = alloca { ptr, i64, i64 }, align 16 + %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 + %a1075 = alloca { ptr, i64, i64 }, align 16 + %a1078 = alloca { ptr, i64, i64 }, align 16 + %a1079 = alloca { ptr, i64, i64 }, align 16 + %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1086 = alloca { ptr, i64, i64 }, align 16 + %a1087 = alloca { ptr, i64, i64 }, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca { ptr, i64, i64 }, align 16 + %a1092 = alloca { ptr, i64, i64 }, align 16 + %a1093 = alloca { ptr, i64, i64 }, align 16 + %a1094 = alloca { ptr, i64, i64 }, align 16 + %a1095 = alloca { ptr, i64, i64 }, align 16 + %a1097 = alloca { ptr, i64, i64 }, align 16 + %a1098 = alloca { ptr, i64, i64 }, align 16 + %a1099 = alloca { ptr, i64, i64 }, align 16 + %a1100 = alloca { ptr, i64, i64 }, align 16 + %a1103 = alloca { ptr, i64, i64 }, align 16 + %a1104 = alloca { ptr, i64, i64 }, align 16 + %a1105 = alloca { ptr, i64, i64 }, align 16 + %a1106 = alloca { ptr, i64, i64 }, align 16 + %a1109 = alloca { ptr, i64, i64 }, align 16 + %a1110 = alloca { ptr, i64, i64 }, align 16 + %a1115 = alloca { ptr, i64, i64 }, align 16 + %a1120 = alloca { ptr, i64, i64 }, align 16 + %a1134 = alloca { ptr, i64, i64 }, align 16 + %a1135 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca %S.gen.Val, align 16 + %a1160 = alloca %S.ast.Type, align 16 + %a1162 = alloca { ptr, i64, i64 }, align 16 + %a1163 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca %S.gen.Val, align 16 + %a1166 = alloca { ptr, i64, i64 }, align 16 + %a1186 = alloca %S.gen.Val, align 16 + %a1187 = alloca %S.ast.Type, align 16 + %a1189 = alloca { ptr, i64, i64 }, align 16 + %a1190 = alloca { ptr, i64, i64 }, align 16 + %a1192 = alloca %S.gen.Val, align 16 + %a1193 = alloca { ptr, i64, i64 }, align 16 + %a1197 = alloca { ptr, i64, i64 }, align 16 + %a1200 = alloca { ptr, i64, i64 }, align 16 + %a1201 = alloca { ptr, i64, i64 }, align 16 + %a1202 = alloca { ptr, i64, i64 }, align 16 + %a1204 = alloca { ptr, i64, i64 }, align 16 + %a1205 = alloca { ptr, i64, i64 }, align 16 + %a1206 = alloca { ptr, i64, i64 }, align 16 + %a1207 = alloca { ptr, i64, i64 }, align 16 + %a1210 = alloca { ptr, i64, i64 }, align 16 + %a1211 = alloca { ptr, i64, i64 }, align 16 + %a1214 = alloca { ptr, i64, i64 }, align 16 + %a1215 = alloca { ptr, i64, i64 }, align 16 + %a1216 = alloca { ptr, i64, i64 }, align 16 + %a1218 = alloca { ptr, i64, i64 }, align 16 + %a1219 = alloca { ptr, i64, i64 }, align 16 + %a1220 = alloca { ptr, i64, i64 }, align 16 + %a1221 = alloca { ptr, i64, i64 }, align 16 + %a1224 = alloca { ptr, i64, i64 }, align 16 + %a1225 = alloca { ptr, i64, i64 }, align 16 + %a1226 = alloca { ptr, i64, i64 }, align 16 + %a1227 = alloca { ptr, i64, i64 }, align 16 + %a1230 = alloca { ptr, i64, i64 }, align 16 + %a1231 = alloca { ptr, i64, i64 }, align 16 + %a1234 = alloca { ptr, i64, i64 }, align 16 + %a1235 = alloca { ptr, i64, i64 }, align 16 + %a1236 = alloca { ptr, i64, i64 }, align 16 + %a1238 = alloca { ptr, i64, i64 }, align 16 + %a1239 = alloca { ptr, i64, i64 }, align 16 + %a1240 = alloca { ptr, i64, i64 }, align 16 + %a1241 = alloca { ptr, i64, i64 }, align 16 + %a1244 = alloca { ptr, i64, i64 }, align 16 + %a1245 = alloca { ptr, i64, i64 }, align 16 + %a1246 = alloca { ptr, i64, i64 }, align 16 + %a1247 = alloca { ptr, i64, i64 }, align 16 + %a1250 = alloca { ptr, i64, i64 }, align 16 + %a1251 = alloca { ptr, i64, i64 }, align 16 + %a1256 = alloca { ptr, i64, i64 }, align 16 + %a1257 = alloca { ptr, i64, i64 }, align 16 + %a1258 = alloca { ptr, i64, i64 }, align 16 + %a1260 = alloca { ptr, i64, i64 }, align 16 + %a1261 = alloca { ptr, i64, i64 }, align 16 + %a1262 = alloca { ptr, i64, i64 }, align 16 + %a1263 = alloca { ptr, i64, i64 }, align 16 + %a1266 = alloca { ptr, i64, i64 }, align 16 + %a1267 = alloca { ptr, i64, i64 }, align 16 + %a1268 = alloca { ptr, i64, i64 }, align 16 + %a1269 = alloca { ptr, i64, i64 }, align 16 + %a1272 = alloca { ptr, i64, i64 }, align 16 + %a1273 = alloca { ptr, i64, i64 }, align 16 + %a1274 = alloca { ptr, i64, i64 }, align 16 + %a1275 = alloca { ptr, i64, i64 }, align 16 + %a1276 = alloca { ptr, i64, i64 }, align 16 + %a1278 = alloca { ptr, i64, i64 }, align 16 + %a1279 = alloca { ptr, i64, i64 }, align 16 + %a1280 = alloca { ptr, i64, i64 }, align 16 + %a1281 = alloca { ptr, i64, i64 }, align 16 + %a1284 = alloca { ptr, i64, i64 }, align 16 + %a1285 = alloca { ptr, i64, i64 }, align 16 + %a1286 = alloca { ptr, i64, i64 }, align 16 + %a1287 = alloca { ptr, i64, i64 }, align 16 + %a1290 = alloca { ptr, i64, i64 }, align 16 + %a1292 = alloca { ptr, i64, i64 }, align 16 + %a1295 = alloca { ptr, i64, i64 }, align 16 + %a1296 = alloca { ptr, i64, i64 }, align 16 + %a1297 = alloca { ptr, i64, i64 }, align 16 + %a1299 = alloca { ptr, i64, i64 }, align 16 + %a1300 = alloca { ptr, i64, i64 }, align 16 + %a1301 = alloca { ptr, i64, i64 }, align 16 + %a1302 = alloca { ptr, i64, i64 }, align 16 + %a1305 = alloca { ptr, i64, i64 }, align 16 + %a1306 = alloca { ptr, i64, i64 }, align 16 + %a1307 = alloca { ptr, i64, i64 }, align 16 + %a1308 = alloca { ptr, i64, i64 }, align 16 + %a1311 = alloca { ptr, i64, i64 }, align 16 + %a1312 = alloca { ptr, i64, i64 }, align 16 + %a1315 = alloca { ptr, i64, i64 }, align 16 + %a1318 = alloca { ptr, i64, i64 }, align 16 + %a1319 = alloca { ptr, i64, i64 }, align 16 + %a1320 = alloca { ptr, i64, i64 }, align 16 + %a1322 = alloca { ptr, i64, i64 }, align 16 + %a1323 = alloca { ptr, i64, i64 }, align 16 + %a1324 = alloca { ptr, i64, i64 }, align 16 + %a1325 = alloca { ptr, i64, i64 }, align 16 + %a1328 = alloca { ptr, i64, i64 }, align 16 + %a1329 = alloca { ptr, i64, i64 }, align 16 + %a1330 = alloca { ptr, i64, i64 }, align 16 + %a1331 = alloca { ptr, i64, i64 }, align 16 + %a1333 = alloca { ptr, i64, i64 }, align 16 + %a1334 = alloca { ptr, i64, i64 }, align 16 + %a1335 = alloca { ptr, i64, i64 }, align 16 + %a1336 = alloca { ptr, i64, i64 }, align 16 + %a1341 = alloca { ptr, i64, i64 }, align 16 + %a1342 = alloca { ptr, i64, i64 }, align 16 + %a1343 = alloca { ptr, i64, i64 }, align 16 + %a1344 = alloca { ptr, i64, i64 }, align 16 + %a1345 = alloca { ptr, i64, i64 }, align 16 + %a1347 = alloca { ptr, i64, i64 }, align 16 + %a1348 = alloca { ptr, i64, i64 }, align 16 + %a1349 = alloca { ptr, i64, i64 }, align 16 + %a1350 = alloca { ptr, i64, i64 }, align 16 + %a1352 = alloca { ptr, i64, i64 }, align 16 + %a1356 = alloca { ptr, i64, i64 }, align 16 + %a1360 = alloca { ptr, i64, i64 }, align 16 + %a1364 = alloca { ptr, i64, i64 }, align 16 + %a1367 = alloca { ptr, i64, i64 }, align 16 + %a1368 = alloca { ptr, i64, i64 }, align 16 + %a1369 = alloca { ptr, i64, i64 }, align 16 + %a1371 = alloca { ptr, i64, i64 }, align 16 + %a1372 = alloca { ptr, i64, i64 }, align 16 + %a1373 = alloca { ptr, i64, i64 }, align 16 + %a1374 = alloca { ptr, i64, i64 }, align 16 + %a1377 = alloca { ptr, i64, i64 }, align 16 + %a1378 = alloca { ptr, i64, i64 }, align 16 + %a1379 = alloca { ptr, i64, i64 }, align 16 + %a1380 = alloca { ptr, i64, i64 }, align 16 + %a1382 = alloca { ptr, i64, i64 }, align 16 + %a1383 = alloca { ptr, i64, i64 }, align 16 + %a1384 = alloca { ptr, i64, i64 }, align 16 + %a1385 = alloca { ptr, i64, i64 }, align 16 + %a1393 = alloca { ptr, i64, i64 }, align 16 + %a1394 = alloca { ptr, i64, i64 }, align 16 + %a1395 = alloca { ptr, i64, i64 }, align 16 + %a1396 = alloca { ptr, i64, i64 }, align 16 + %a1399 = alloca { ptr, i64, i64 }, align 16 + %a1400 = alloca { ptr, i64, i64 }, align 16 + %a1403 = alloca { ptr, i64, i64 }, align 16 + %a1404 = alloca { ptr, i64, i64 }, align 16 + %a1405 = alloca { ptr, i64, i64 }, align 16 + %a1407 = alloca { ptr, i64, i64 }, align 16 + %a1408 = alloca { ptr, i64, i64 }, align 16 + %a1409 = alloca { ptr, i64, i64 }, align 16 + %a1410 = alloca { ptr, i64, i64 }, align 16 + %a1413 = alloca { ptr, i64, i64 }, align 16 + %a1414 = alloca { ptr, i64, i64 }, align 16 + %a1415 = alloca { ptr, i64, i64 }, align 16 + %a1416 = alloca { ptr, i64, i64 }, align 16 + %a1418 = alloca { ptr, i64, i64 }, align 16 + %a1419 = alloca { ptr, i64, i64 }, align 16 + %a1420 = alloca { ptr, i64, i64 }, align 16 + %a1421 = alloca { ptr, i64, i64 }, align 16 + %a1425 = alloca { ptr, i64, i64 }, align 16 + %a1426 = alloca { ptr, i64, i64 }, align 16 + %a1427 = alloca { ptr, i64, i64 }, align 16 + %a1429 = alloca { ptr, i64, i64 }, align 16 + %a1430 = alloca { ptr, i64, i64 }, align 16 + %a1431 = alloca { ptr, i64, i64 }, align 16 + %a1432 = alloca { ptr, i64, i64 }, align 16 + %a1440 = alloca { ptr, i64, i64 }, align 16 + %a1441 = alloca { ptr, i64, i64 }, align 16 + %a1442 = alloca { ptr, i64, i64 }, align 16 + %a1443 = alloca { ptr, i64, i64 }, align 16 + %a1446 = alloca { ptr, i64, i64 }, align 16 + %a1447 = alloca { ptr, i64, i64 }, align 16 + %a1448 = alloca { ptr, i64, i64 }, align 16 + %a1449 = alloca { ptr, i64, i64 }, align 16 + %a1450 = alloca { ptr, i64, i64 }, align 16 + %a1451 = alloca { ptr, i64, i64 }, align 16 + %a1454 = alloca { ptr, i64, i64 }, align 16 + %a1455 = alloca { ptr, i64, i64 }, align 16 + %a1467 = alloca %S.ast.Type, align 16 + %a1468 = alloca %S.ast.Type, align 16 + %a1473 = alloca { ptr, i64, i64 }, align 16 + %a1474 = alloca { ptr, i64, i64 }, align 16 + %a1481 = alloca { ptr, i64, i64 }, align 16 + %a1482 = alloca { ptr, i64, i64 }, align 16 + %a1484 = alloca { ptr, i64, i64 }, align 16 + %a1489 = alloca { ptr, i64, i64 }, align 16 + %a1490 = alloca { ptr, i64, i64 }, align 16 + %a1495 = alloca { ptr, i64, i64 }, align 16 + %a1496 = alloca { ptr, i64, i64 }, align 16 + %a1505 = alloca { ptr, i64, i64 }, align 16 + %a1509 = alloca { ptr, i64, i64 }, align 16 + %a1513 = alloca { ptr, i64, i64 }, align 16 + %a1516 = alloca { ptr, i64, i64 }, align 16 + %a1517 = alloca { ptr, i64, i64 }, align 16 + %a1518 = alloca { ptr, i64, i64 }, align 16 + %a1520 = alloca { ptr, i64, i64 }, align 16 + %a1521 = alloca { ptr, i64, i64 }, align 16 + %a1522 = alloca { ptr, i64, i64 }, align 16 + %a1523 = alloca { ptr, i64, i64 }, align 16 + %a1526 = alloca { ptr, i64, i64 }, align 16 + %a1527 = alloca { ptr, i64, i64 }, align 16 + %a1528 = alloca { ptr, i64, i64 }, align 16 + %a1529 = alloca { ptr, i64, i64 }, align 16 + %a1531 = alloca { ptr, i64, i64 }, align 16 + %a1532 = alloca { ptr, i64, i64 }, align 16 + %a1533 = alloca { ptr, i64, i64 }, align 16 + %a1534 = alloca { ptr, i64, i64 }, align 16 + %a1539 = alloca { ptr, i64, i64 }, align 16 + %a1540 = alloca { ptr, i64, i64 }, align 16 + %a1541 = alloca { ptr, i64, i64 }, align 16 + %a1542 = alloca { ptr, i64, i64 }, align 16 + %a1543 = alloca { ptr, i64, i64 }, align 16 + %a1545 = alloca { ptr, i64, i64 }, align 16 + %a1546 = alloca { ptr, i64, i64 }, align 16 + %a1547 = alloca { ptr, i64, i64 }, align 16 + %a1548 = alloca { ptr, i64, i64 }, align 16 + %a1551 = alloca { ptr, i64, i64 }, align 16 + %a1552 = alloca { ptr, i64, i64 }, align 16 + %a1553 = alloca { ptr, i64, i64 }, align 16 + %a1554 = alloca { ptr, i64, i64 }, align 16 + %a1556 = alloca { ptr, i64, i64 }, align 16 + %a1557 = alloca { ptr, i64, i64 }, align 16 + %a1558 = alloca { ptr, i64, i64 }, align 16 + %a1559 = alloca { ptr, i64, i64 }, align 16 + %a1561 = alloca { ptr, i64, i64 }, align 16 + %a1567 = alloca { ptr, i64, i64 }, align 16 + %a1568 = alloca { ptr, i64, i64 }, align 16 + %a1569 = alloca { ptr, i64, i64 }, align 16 + %a1571 = alloca { ptr, i64, i64 }, align 16 + %a1572 = alloca { ptr, i64, i64 }, align 16 + %a1573 = alloca { ptr, i64, i64 }, align 16 + %a1574 = alloca { ptr, i64, i64 }, align 16 + %a1576 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range8864, label %inrange8865 +range8864: + call void @finch_panic_index(ptr @.str.5668, i64 5404, i64 0, i64 %t7) + unreachable +inrange8865: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 + %t11 = load %S.ast.Type, ptr %t10 + store %S.ast.Type %t11, ptr %a12 + call void @finch.copy.S_ast_Type(ptr %a13, ptr %a12) + %t14 = load %S.ast.Type, ptr %a13 + store %S.ast.Type %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Type, ptr %a15 + %t18 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t16, %S.ast.Type %t17) + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + call void @finch_str_copy(ptr %a23, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5669, i64 46, i64 0 }, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t31, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.5670, i64 14, i64 0 }, ptr %a34 + call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) + store { ptr, i64, i64 } %t31, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a32 + %t37 = call { ptr, i64, i64 } @finch.gen.op(ptr %t26, { ptr, i64, i64 } %t36) + store { ptr, i64, i64 } %t36, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t37, ptr %a39 + %t40 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.5671, i64 4, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then8866, label %endif8868 +then8866: + %t45 = load ptr, ptr %a1 + %t46 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t45, %S.ast.Node %t46, i64 1) + %t47 = load ptr, ptr %a1 + %t48 = load ptr, ptr %a1 + %t49 = load ptr, ptr %a1 + %t50 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t51 = load { ptr, i64, i64 }, ptr %t50 + %t52 = extractvalue { ptr, i64, i64 } %t51, 1 + %t53 = icmp uge i64 1, %t52 + br i1 %t53, label %range8869, label %inrange8870 +range8869: + call void @finch_panic_index(ptr @.str.5672, i64 5410, i64 1, i64 %t52) + unreachable +inrange8870: + %t54 = extractvalue { ptr, i64, i64 } %t51, 0 + %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 1 + %t56 = load %S.ast.Node, ptr %t55 + %t57 = load %S.ast.Type, ptr %a15 + %t58 = call %S.gen.Val @finch.gen.exprWant(ptr %t49, %S.ast.Node %t56, %S.ast.Type %t57) + %t59 = load %S.ast.Type, ptr %a15 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 1, %t62 + br i1 %t63, label %range8871, label %inrange8872 +range8871: + call void @finch_panic_index(ptr @.str.5673, i64 5410, i64 1, i64 %t62) + unreachable +inrange8872: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 1 + %t66 = load %S.ast.Node, ptr %t65 + %t67 = call %S.gen.Val @finch.gen.coerce(ptr %t48, %S.gen.Val %t58, %S.ast.Type %t59, %S.ast.Node %t66, { ptr, i64, i64 } { ptr @.str.5674, i64 11, i64 0 }) + store %S.gen.Val %t58, ptr %a68 + call void @finch.drop.S_gen_Val(ptr %a68) + %t69 = call { ptr, i64, i64 } @finch.gen.own(ptr %t47, %S.gen.Val %t67) + store %S.gen.Val %t67, ptr %a70 + call void @finch.drop.S_gen_Val(ptr %a70) + store { ptr, i64, i64 } %t69, ptr %a71 + %t72 = load ptr, ptr %a1 + %t73 = load { ptr, i64, i64 }, ptr %a39 + %t74 = call { ptr, i64, i64 } @finch.gen.load(ptr %t72, { ptr, i64, i64 } { ptr @.str.5675, i64 3, i64 0 }, { ptr, i64, i64 } %t73) + store { ptr, i64, i64 } %t74, ptr %a75 + %t76 = load ptr, ptr %a1 + %t77 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.5676, i64 8, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t81, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.5677, i64 3, i64 0 }, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t81, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a82 + %t87 = call { ptr, i64, i64 } @finch.gen.op(ptr %t76, { ptr, i64, i64 } %t86) + store { ptr, i64, i64 } %t86, ptr %a88 + call void @finch_str_drop(ptr %a88) + store { ptr, i64, i64 } %t87, ptr %a89 + %t90 = load ptr, ptr %a1 + %t91 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5678, i64 33, i64 0 }, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t95, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.5679, i64 6, i64 0 }, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + %t101 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t100, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t100, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.5680, i64 6, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = load ptr, ptr %a1 + %t113 = load %S.ast.Type, ptr %a15 + %t114 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t112, %S.ast.Type %t113) + store { ptr, i64, i64 } %t111, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t111, ptr %a118 + call void @finch_str_drop(ptr %a118) + store { ptr, i64, i64 } %t114, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t120, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.5681, i64 1, i64 0 }, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t120, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + call void @finch.gen.emit(ptr %t90, { ptr, i64, i64 } %t125) + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load ptr, ptr %a1 + %t128 = load { ptr, i64, i64 }, ptr %a3 + %t129 = call { ptr, i64, i64 } @finch.gen.load(ptr %t127, { ptr, i64, i64 } { ptr @.str.5682, i64 3, i64 0 }, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t129, ptr %a130 + %t131 = load ptr, ptr %a1 + %t132 = load { ptr, i64, i64 }, ptr %a19 + %t133 = load { ptr, i64, i64 }, ptr %a71 + %t134 = load ptr, ptr %a1 + %t135 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5683, i64 23, i64 0 }, ptr %a137 + store { ptr, i64, i64 } %t135, ptr %a138 + call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) + %t139 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t139, ptr %a141 + store { ptr, i64, i64 } { ptr @.str.5684, i64 6, i64 0 }, ptr %a142 + call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142) + store { ptr, i64, i64 } %t139, ptr %a143 + call void @finch_str_drop(ptr %a143) + %t144 = load { ptr, i64, i64 }, ptr %a140 + %t145 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t144, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.5685, i64 6, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t155, ptr %a158 + store { ptr, i64, i64 } %t156, ptr %a159 + call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) + store { ptr, i64, i64 } %t155, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a157 + %t162 = call { ptr, i64, i64 } @finch.gen.op(ptr %t134, { ptr, i64, i64 } %t161) + store { ptr, i64, i64 } %t161, ptr %a163 + call void @finch_str_drop(ptr %a163) + call void @finch.gen.store(ptr %t131, { ptr, i64, i64 } %t132, { ptr, i64, i64 } %t133, { ptr, i64, i64 } %t162) + store { ptr, i64, i64 } %t162, ptr %a164 + call void @finch_str_drop(ptr %a164) + %t165 = load ptr, ptr %a1 + %t166 = load { ptr, i64, i64 }, ptr %a89 + %t167 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.store(ptr %t165, { ptr, i64, i64 } { ptr @.str.5686, i64 3, i64 0 }, { ptr, i64, i64 } %t166, { ptr, i64, i64 } %t167) + %t168 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5687, i64 4, i64 0 }) + %t169 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t168, 1 + call void @finch_str_drop(ptr %a130) + call void @finch_str_drop(ptr %a89) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a71) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t169 +endif8868: + %t170 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.5688, i64 3, i64 0 }, ptr %a172 + %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) + %t174 = icmp ne i32 %t173, 0 + br i1 %t174, label %then8873, label %endif8875 +then8873: + %t175 = load ptr, ptr %a1 + %t176 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t175, %S.ast.Node %t176, i64 0) + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a39 + %t179 = call { ptr, i64, i64 } @finch.gen.load(ptr %t177, { ptr, i64, i64 } { ptr @.str.5689, i64 3, i64 0 }, { ptr, i64, i64 } %t178) + store { ptr, i64, i64 } %t179, ptr %a180 + %t181 = load ptr, ptr %a1 + %t182 = load ptr, ptr %a1 + %t183 = load { ptr, i64, i64 }, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5690, i64 12, i64 0 }, ptr %a185 + store { ptr, i64, i64 } %t183, ptr %a186 + call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a184 + store { ptr, i64, i64 } %t187, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.5691, i64 3, i64 0 }, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + %t193 = call { ptr, i64, i64 } @finch.gen.op(ptr %t182, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a194 + call void @finch_str_drop(ptr %a194) + %t195 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t181, { ptr, i64, i64 } %t193, { ptr, i64, i64 } { ptr @.str.5692, i64 23, i64 0 }, %S.ast.Node %t195) + store { ptr, i64, i64 } %t193, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load ptr, ptr %a1 + %t198 = load { ptr, i64, i64 }, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5693, i64 8, i64 0 }, ptr %a200 + store { ptr, i64, i64 } %t198, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + %t202 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t202, ptr %a204 + store { ptr, i64, i64 } { ptr @.str.5694, i64 3, i64 0 }, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + %t208 = call { ptr, i64, i64 } @finch.gen.op(ptr %t197, { ptr, i64, i64 } %t207) + store { ptr, i64, i64 } %t207, ptr %a209 + call void @finch_str_drop(ptr %a209) + store { ptr, i64, i64 } %t208, ptr %a210 + %t211 = load ptr, ptr %a1 + %t212 = load { ptr, i64, i64 }, ptr %a3 + %t213 = call { ptr, i64, i64 } @finch.gen.load(ptr %t211, { ptr, i64, i64 } { ptr @.str.5695, i64 3, i64 0 }, { ptr, i64, i64 } %t212) + store { ptr, i64, i64 } %t213, ptr %a214 + %t215 = load ptr, ptr %a1 + %t216 = load { ptr, i64, i64 }, ptr %a19 + %t217 = load ptr, ptr %a1 + %t218 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5696, i64 23, i64 0 }, ptr %a220 + store { ptr, i64, i64 } %t218, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.5697, i64 6, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t227, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t227, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.5698, i64 6, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + %t239 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } %t238, ptr %a241 + store { ptr, i64, i64 } %t239, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + store { ptr, i64, i64 } %t238, ptr %a243 + call void @finch_str_drop(ptr %a243) + %t244 = load { ptr, i64, i64 }, ptr %a240 + %t245 = call { ptr, i64, i64 } @finch.gen.op(ptr %t217, { ptr, i64, i64 } %t244) + store { ptr, i64, i64 } %t244, ptr %a246 + call void @finch_str_drop(ptr %a246) + %t247 = call { ptr, i64, i64 } @finch.gen.load(ptr %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t245) + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_drop(ptr %a248) + store { ptr, i64, i64 } %t247, ptr %a249 + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a210 + %t252 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.store(ptr %t250, { ptr, i64, i64 } { ptr @.str.5699, i64 3, i64 0 }, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252) + %t253 = load { ptr, i64, i64 }, ptr %a249 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_copy(ptr %a255, ptr %a254) + %t256 = load { ptr, i64, i64 }, ptr %a255 + %t257 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t256, 0 + %t258 = load %S.ast.Type, ptr %a15 + store %S.ast.Type %t258, ptr %a259 + call void @finch.copy.S_ast_Type(ptr %a260, ptr %a259) + %t261 = load %S.ast.Type, ptr %a260 + %t262 = insertvalue %S.gen.Val %t257, %S.ast.Type %t261, 1 + %t263 = load ptr, ptr %a1 + %t264 = load %S.ast.Type, ptr %a15 + %t265 = call i1 @finch.gen.owning(ptr %t263, %S.ast.Type %t264) + %t266 = insertvalue %S.gen.Val %t262, i1 %t265, 2 + call void @finch_str_drop(ptr %a249) + call void @finch_str_drop(ptr %a214) + call void @finch_str_drop(ptr %a210) + call void @finch_str_drop(ptr %a180) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t266 +endif8875: + %t267 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t267, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.5700, i64 5, i64 0 }, ptr %a269 + %t270 = call i32 @finch_str_eq(ptr %a268, ptr %a269) + %t271 = icmp ne i32 %t270, 0 + br i1 %t271, label %then8876, label %endif8878 +then8876: + %t272 = load ptr, ptr %a1 + %t273 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t272, %S.ast.Node %t273, i64 0) + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a3 + %t276 = load %S.ast.Type, ptr %a4 + call void @finch.gen.dropFrom(ptr %t274, { ptr, i64, i64 } %t275, %S.ast.Type %t276, { ptr, i64, i64 } { ptr @.str.5701, i64 1, i64 0 }) + %t277 = load ptr, ptr %a1 + %t278 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.store(ptr %t277, { ptr, i64, i64 } { ptr @.str.5702, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5703, i64 1, i64 0 }, { ptr, i64, i64 } %t278) + %t279 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5704, i64 4, i64 0 }) + %t280 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t279, 1 + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t280 +endif8878: + %t281 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t281, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.5705, i64 4, i64 0 }, ptr %a283 + %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) + %t285 = icmp ne i32 %t284, 0 + br label %logic.from8879 +logic.from8879: + br i1 %t285, label %logic.end8881, label %logic.rhs8880 +logic.rhs8880: + %t286 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t286, ptr %a287 + store { ptr, i64, i64 } { ptr @.str.5706, i64 8, i64 0 }, ptr %a288 + %t289 = call i32 @finch_str_eq(ptr %a287, ptr %a288) + %t290 = icmp ne i32 %t289, 0 + br label %logic.rend8882 +logic.rend8882: + br label %logic.end8881 +logic.end8881: + %t291 = phi i1 [ true, %logic.from8879 ], [ %t290, %logic.rend8882 ] + br i1 %t291, label %then8883, label %endif8885 +then8883: + %t292 = load ptr, ptr %a1 + %t293 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t292, %S.ast.Node %t293, i64 1) + %t294 = load ptr, ptr %a1 + %t295 = load ptr, ptr %a1 + %t296 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t297 = load { ptr, i64, i64 }, ptr %t296 + %t298 = extractvalue { ptr, i64, i64 } %t297, 1 + %t299 = icmp uge i64 1, %t298 + br i1 %t299, label %range8886, label %inrange8887 +range8886: + call void @finch_panic_index(ptr @.str.5707, i64 5437, i64 1, i64 %t298) + unreachable +inrange8887: + %t300 = extractvalue { ptr, i64, i64 } %t297, 0 + %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i64 1 + %t302 = load %S.ast.Node, ptr %t301 + %t303 = load %S.ast.Type, ptr %a15 + %t304 = call %S.gen.Val @finch.gen.exprWant(ptr %t295, %S.ast.Node %t302, %S.ast.Type %t303) + %t305 = load %S.ast.Type, ptr %a15 + %t306 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t307 = load { ptr, i64, i64 }, ptr %t306 + %t308 = extractvalue { ptr, i64, i64 } %t307, 1 + %t309 = icmp uge i64 1, %t308 + br i1 %t309, label %range8888, label %inrange8889 +range8888: + call void @finch_panic_index(ptr @.str.5708, i64 5437, i64 1, i64 %t308) + unreachable +inrange8889: + %t310 = extractvalue { ptr, i64, i64 } %t307, 0 + %t311 = getelementptr inbounds %S.ast.Node, ptr %t310, i64 1 + %t312 = load %S.ast.Node, ptr %t311 + %t313 = call %S.gen.Val @finch.gen.coerce(ptr %t294, %S.gen.Val %t304, %S.ast.Type %t305, %S.ast.Node %t312, { ptr, i64, i64 } { ptr @.str.5709, i64 21, i64 0 }) + store %S.gen.Val %t304, ptr %a314 + call void @finch.drop.S_gen_Val(ptr %a314) + store %S.gen.Val %t313, ptr %a315 + %t316 = load ptr, ptr %a1 + %t317 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t316, { ptr, i64, i64 } { ptr @.str.5710, i64 3, i64 0 }) + store { ptr, i64, i64 } %t317, ptr %a318 + %t319 = load ptr, ptr %a1 + %t320 = load { ptr, i64, i64 }, ptr %a318 + call void @finch.gen.store(ptr %t319, { ptr, i64, i64 } { ptr @.str.5711, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5712, i64 2, i64 0 }, { ptr, i64, i64 } %t320) + %t321 = load ptr, ptr %a1 + %t322 = load { ptr, i64, i64 }, ptr %a39 + %t323 = call { ptr, i64, i64 } @finch.gen.load(ptr %t321, { ptr, i64, i64 } { ptr @.str.5713, i64 3, i64 0 }, { ptr, i64, i64 } %t322) + store { ptr, i64, i64 } %t323, ptr %a324 + %t325 = load ptr, ptr %a1 + %t326 = load { ptr, i64, i64 }, ptr %a3 + %t327 = call { ptr, i64, i64 } @finch.gen.load(ptr %t325, { ptr, i64, i64 } { ptr @.str.5714, i64 3, i64 0 }, { ptr, i64, i64 } %t326) + store { ptr, i64, i64 } %t327, ptr %a328 + %t329 = load ptr, ptr %a1 + %t330 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t329, { ptr, i64, i64 } { ptr @.str.5715, i64 3, i64 0 }) + store { ptr, i64, i64 } %t330, ptr %a331 + %t332 = load ptr, ptr %a1 + %t333 = load { ptr, i64, i64 }, ptr %a331 + call void @finch.gen.store(ptr %t332, { ptr, i64, i64 } { ptr @.str.5716, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5717, i64 1, i64 0 }, { ptr, i64, i64 } %t333) + %t334 = load ptr, ptr %a1 + %t335 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t334, { ptr, i64, i64 } { ptr @.str.5718, i64 9, i64 0 }) + store { ptr, i64, i64 } %t335, ptr %a336 + %t337 = load ptr, ptr %a1 + %t338 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t337, { ptr, i64, i64 } { ptr @.str.5719, i64 9, i64 0 }) + store { ptr, i64, i64 } %t338, ptr %a339 + %t340 = load ptr, ptr %a1 + %t341 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t340, { ptr, i64, i64 } { ptr @.str.5720, i64 8, i64 0 }) + store { ptr, i64, i64 } %t341, ptr %a342 + %t343 = load ptr, ptr %a1 + %t344 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t343, { ptr, i64, i64 } { ptr @.str.5721, i64 9, i64 0 }) + store { ptr, i64, i64 } %t344, ptr %a345 + %t346 = load ptr, ptr %a1 + %t347 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t346, { ptr, i64, i64 } { ptr @.str.5722, i64 8, i64 0 }) + store { ptr, i64, i64 } %t347, ptr %a348 + %t349 = load ptr, ptr %a1 + %t350 = load { ptr, i64, i64 }, ptr %a336 + call void @finch.gen.br(ptr %t349, { ptr, i64, i64 } %t350) + %t351 = load ptr, ptr %a1 + %t352 = load { ptr, i64, i64 }, ptr %a336 + call void @finch.gen.label(ptr %t351, { ptr, i64, i64 } %t352) + %t353 = load ptr, ptr %a1 + %t354 = load { ptr, i64, i64 }, ptr %a331 + %t355 = call { ptr, i64, i64 } @finch.gen.load(ptr %t353, { ptr, i64, i64 } { ptr @.str.5723, i64 3, i64 0 }, { ptr, i64, i64 } %t354) + store { ptr, i64, i64 } %t355, ptr %a356 + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.5724, i64 13, i64 0 }, ptr %a360 + store { ptr, i64, i64 } %t358, ptr %a361 + call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) + %t362 = load { ptr, i64, i64 }, ptr %a359 + store { ptr, i64, i64 } %t362, ptr %a364 + store { ptr, i64, i64 } { ptr @.str.5725, i64 2, i64 0 }, ptr %a365 + call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) + store { ptr, i64, i64 } %t362, ptr %a366 + call void @finch_str_drop(ptr %a366) + %t367 = load { ptr, i64, i64 }, ptr %a363 + %t368 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t367, ptr %a370 + store { ptr, i64, i64 } %t368, ptr %a371 + call void @finch_str_concat(ptr %a369, ptr %a370, ptr %a371) + store { ptr, i64, i64 } %t367, ptr %a372 + call void @finch_str_drop(ptr %a372) + %t373 = load { ptr, i64, i64 }, ptr %a369 + %t374 = call { ptr, i64, i64 } @finch.gen.op(ptr %t357, { ptr, i64, i64 } %t373) + store { ptr, i64, i64 } %t373, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t374, ptr %a376 + %t377 = load ptr, ptr %a1 + %t378 = load { ptr, i64, i64 }, ptr %a376 + %t379 = load { ptr, i64, i64 }, ptr %a339 + %t380 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.gen.condBr(ptr %t377, { ptr, i64, i64 } %t378, { ptr, i64, i64 } %t379, { ptr, i64, i64 } %t380) + %t381 = load ptr, ptr %a1 + %t382 = load { ptr, i64, i64 }, ptr %a339 + call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) + %t383 = load ptr, ptr %a1 + %t384 = load { ptr, i64, i64 }, ptr %a19 + %t385 = load ptr, ptr %a1 + %t386 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5726, i64 23, i64 0 }, ptr %a388 + store { ptr, i64, i64 } %t386, ptr %a389 + call void @finch_str_concat(ptr %a387, ptr %a388, ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a387 + store { ptr, i64, i64 } %t390, ptr %a392 + store { ptr, i64, i64 } { ptr @.str.5727, i64 6, i64 0 }, ptr %a393 + call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) + store { ptr, i64, i64 } %t390, ptr %a394 + call void @finch_str_drop(ptr %a394) + %t395 = load { ptr, i64, i64 }, ptr %a391 + %t396 = load { ptr, i64, i64 }, ptr %a328 + store { ptr, i64, i64 } %t395, ptr %a398 + store { ptr, i64, i64 } %t396, ptr %a399 + call void @finch_str_concat(ptr %a397, ptr %a398, ptr %a399) + store { ptr, i64, i64 } %t395, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = load { ptr, i64, i64 }, ptr %a397 + store { ptr, i64, i64 } %t401, ptr %a403 + store { ptr, i64, i64 } { ptr @.str.5728, i64 6, i64 0 }, ptr %a404 + call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) + store { ptr, i64, i64 } %t401, ptr %a405 + call void @finch_str_drop(ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a402 + %t407 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } %t406, ptr %a409 + store { ptr, i64, i64 } %t407, ptr %a410 + call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410) + store { ptr, i64, i64 } %t406, ptr %a411 + call void @finch_str_drop(ptr %a411) + %t412 = load { ptr, i64, i64 }, ptr %a408 + %t413 = call { ptr, i64, i64 } @finch.gen.op(ptr %t385, { ptr, i64, i64 } %t412) + store { ptr, i64, i64 } %t412, ptr %a414 + call void @finch_str_drop(ptr %a414) + %t415 = call { ptr, i64, i64 } @finch.gen.load(ptr %t383, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t413) + store { ptr, i64, i64 } %t413, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t415, 0 + %t418 = load %S.ast.Type, ptr %a15 + store %S.ast.Type %t418, ptr %a419 + call void @finch.copy.S_ast_Type(ptr %a420, ptr %a419) + %t421 = load %S.ast.Type, ptr %a420 + %t422 = insertvalue %S.gen.Val %t417, %S.ast.Type %t421, 1 + store %S.gen.Val %t422, ptr %a423 + %t424 = load ptr, ptr %a1 + %t425 = load %S.gen.Val, ptr %a423 + %t426 = getelementptr inbounds %S.gen.Val, ptr %a315, i32 0, i32 0 + %t427 = load { ptr, i64, i64 }, ptr %t426 + store { ptr, i64, i64 } %t427, ptr %a428 + call void @finch_str_copy(ptr %a429, ptr %a428) + %t430 = load { ptr, i64, i64 }, ptr %a429 + %t431 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t430, 0 + %t432 = getelementptr inbounds %S.gen.Val, ptr %a315, i32 0, i32 1 + %t433 = load %S.ast.Type, ptr %t432 + store %S.ast.Type %t433, ptr %a434 + call void @finch.copy.S_ast_Type(ptr %a435, ptr %a434) + %t436 = load %S.ast.Type, ptr %a435 + %t437 = insertvalue %S.gen.Val %t431, %S.ast.Type %t436, 1 + %t438 = load %S.ast.Node, ptr %a2 + %t439 = call %S.gen.Val @finch.gen.compare(ptr %t424, { ptr, i64, i64 } { ptr @.str.5729, i64 2, i64 0 }, %S.gen.Val %t425, %S.gen.Val %t437, %S.ast.Node %t438) + store %S.gen.Val %t437, ptr %a440 + call void @finch.drop.S_gen_Val(ptr %a440) + %t441 = extractvalue %S.gen.Val %t439, 0 + store { ptr, i64, i64 } %t441, ptr %a442 + call void @finch_str_copy(ptr %a443, ptr %a442) + %t444 = load { ptr, i64, i64 }, ptr %a443 + store %S.gen.Val %t439, ptr %a445 + call void @finch.drop.S_gen_Val(ptr %a445) + store { ptr, i64, i64 } %t444, ptr %a446 + %t447 = load ptr, ptr %a1 + %t448 = load { ptr, i64, i64 }, ptr %a446 + %t449 = load { ptr, i64, i64 }, ptr %a342 + %t450 = load { ptr, i64, i64 }, ptr %a345 + call void @finch.gen.condBr(ptr %t447, { ptr, i64, i64 } %t448, { ptr, i64, i64 } %t449, { ptr, i64, i64 } %t450) + %t451 = load ptr, ptr %a1 + %t452 = load { ptr, i64, i64 }, ptr %a342 + call void @finch.gen.label(ptr %t451, { ptr, i64, i64 } %t452) + %t453 = load ptr, ptr %a1 + %t454 = load { ptr, i64, i64 }, ptr %a356 + %t455 = load { ptr, i64, i64 }, ptr %a318 + call void @finch.gen.store(ptr %t453, { ptr, i64, i64 } { ptr @.str.5730, i64 3, i64 0 }, { ptr, i64, i64 } %t454, { ptr, i64, i64 } %t455) + %t456 = load ptr, ptr %a1 + %t457 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.gen.br(ptr %t456, { ptr, i64, i64 } %t457) + %t458 = load ptr, ptr %a1 + %t459 = load { ptr, i64, i64 }, ptr %a345 + call void @finch.gen.label(ptr %t458, { ptr, i64, i64 } %t459) + %t460 = load ptr, ptr %a1 + %t461 = load ptr, ptr %a1 + %t462 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.5732, i64 8, i64 0 }, ptr %a464 + store { ptr, i64, i64 } %t462, ptr %a465 + call void @finch_str_concat(ptr %a463, ptr %a464, ptr %a465) + %t466 = load { ptr, i64, i64 }, ptr %a463 + store { ptr, i64, i64 } %t466, ptr %a468 + store { ptr, i64, i64 } { ptr @.str.5733, i64 3, i64 0 }, ptr %a469 + call void @finch_str_concat(ptr %a467, ptr %a468, ptr %a469) + store { ptr, i64, i64 } %t466, ptr %a470 + call void @finch_str_drop(ptr %a470) + %t471 = load { ptr, i64, i64 }, ptr %a467 + %t472 = call { ptr, i64, i64 } @finch.gen.op(ptr %t461, { ptr, i64, i64 } %t471) + store { ptr, i64, i64 } %t471, ptr %a473 + call void @finch_str_drop(ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a331 + call void @finch.gen.store(ptr %t460, { ptr, i64, i64 } { ptr @.str.5731, i64 3, i64 0 }, { ptr, i64, i64 } %t472, { ptr, i64, i64 } %t474) + store { ptr, i64, i64 } %t472, ptr %a475 + call void @finch_str_drop(ptr %a475) + %t476 = load ptr, ptr %a1 + %t477 = load { ptr, i64, i64 }, ptr %a336 + call void @finch.gen.br(ptr %t476, { ptr, i64, i64 } %t477) + %t478 = load ptr, ptr %a1 + %t479 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.gen.label(ptr %t478, { ptr, i64, i64 } %t479) + %t480 = load ptr, ptr %a1 + %t481 = load %S.gen.Val, ptr %a315 + call void @finch.gen.release(ptr %t480, %S.gen.Val %t481) + %t482 = load ptr, ptr %a1 + %t483 = load { ptr, i64, i64 }, ptr %a318 + %t484 = call { ptr, i64, i64 } @finch.gen.load(ptr %t482, { ptr, i64, i64 } { ptr @.str.5734, i64 3, i64 0 }, { ptr, i64, i64 } %t483) + store { ptr, i64, i64 } %t484, ptr %a485 + %t486 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t486, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.5735, i64 4, i64 0 }, ptr %a488 + %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) + %t490 = icmp ne i32 %t489, 0 + br i1 %t490, label %then8890, label %endif8892 +then8890: + %t491 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } %t491, ptr %a492 + call void @finch_str_copy(ptr %a493, ptr %a492) + %t494 = load { ptr, i64, i64 }, ptr %a493 + %t495 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t494, 0 + %t496 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5736, i64 3, i64 0 }) + %t497 = insertvalue %S.gen.Val %t495, %S.ast.Type %t496, 1 + call void @finch_str_drop(ptr %a485) + call void @finch_str_drop(ptr %a446) + call void @finch.drop.S_gen_Val(ptr %a423) + call void @finch_str_drop(ptr %a376) + call void @finch_str_drop(ptr %a356) + call void @finch_str_drop(ptr %a348) + call void @finch_str_drop(ptr %a345) + call void @finch_str_drop(ptr %a342) + call void @finch_str_drop(ptr %a339) + call void @finch_str_drop(ptr %a336) + call void @finch_str_drop(ptr %a331) + call void @finch_str_drop(ptr %a328) + call void @finch_str_drop(ptr %a324) + call void @finch_str_drop(ptr %a318) + call void @finch.drop.S_gen_Val(ptr %a315) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t497 +endif8892: + %t498 = load ptr, ptr %a1 + %t499 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.5737, i64 13, i64 0 }, ptr %a501 + store { ptr, i64, i64 } %t499, ptr %a502 + call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) + %t503 = load { ptr, i64, i64 }, ptr %a500 + store { ptr, i64, i64 } %t503, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.5738, i64 3, i64 0 }, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t503, ptr %a507 + call void @finch_str_drop(ptr %a507) + %t508 = load { ptr, i64, i64 }, ptr %a504 + %t509 = call { ptr, i64, i64 } @finch.gen.op(ptr %t498, { ptr, i64, i64 } %t508) + store { ptr, i64, i64 } %t508, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t509, 0 + %t512 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5739, i64 4, i64 0 }) + %t513 = insertvalue %S.gen.Val %t511, %S.ast.Type %t512, 1 + call void @finch_str_drop(ptr %a485) + call void @finch_str_drop(ptr %a446) + call void @finch.drop.S_gen_Val(ptr %a423) + call void @finch_str_drop(ptr %a376) + call void @finch_str_drop(ptr %a356) + call void @finch_str_drop(ptr %a348) + call void @finch_str_drop(ptr %a345) + call void @finch_str_drop(ptr %a342) + call void @finch_str_drop(ptr %a339) + call void @finch_str_drop(ptr %a336) + call void @finch_str_drop(ptr %a331) + call void @finch_str_drop(ptr %a328) + call void @finch_str_drop(ptr %a324) + call void @finch_str_drop(ptr %a318) + call void @finch.drop.S_gen_Val(ptr %a315) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t513 +endif8885: + %t514 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t514, ptr %a515 + store { ptr, i64, i64 } { ptr @.str.5740, i64 4, i64 0 }, ptr %a516 + %t517 = call i32 @finch_str_eq(ptr %a515, ptr %a516) + %t518 = icmp ne i32 %t517, 0 + br i1 %t518, label %then8893, label %endif8895 +then8893: + %t519 = load ptr, ptr %a1 + %t520 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t519, %S.ast.Node %t520, i64 1) + %t521 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 + %t522 = load { ptr, i64, i64 }, ptr %t521 + store { ptr, i64, i64 } %t522, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.5741, i64 3, i64 0 }, ptr %a524 + %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) + %t526 = icmp eq i32 %t525, 0 + br i1 %t526, label %then8896, label %endif8898 +then8896: + %t527 = load ptr, ptr %a1 + %t528 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t527, %S.ast.Node %t528, { ptr, i64, i64 } { ptr @.str.5742, i64 31, i64 0 }) + br label %endif8898 +endif8898: + %t529 = load ptr, ptr %a1 + %t530 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t531 = load { ptr, i64, i64 }, ptr %t530 + %t532 = extractvalue { ptr, i64, i64 } %t531, 1 + %t533 = icmp uge i64 1, %t532 + br i1 %t533, label %range8899, label %inrange8900 +range8899: + call void @finch_panic_index(ptr @.str.5743, i64 5477, i64 1, i64 %t532) + unreachable +inrange8900: + %t534 = extractvalue { ptr, i64, i64 } %t531, 0 + %t535 = getelementptr inbounds %S.ast.Node, ptr %t534, i64 1 + %t536 = load %S.ast.Node, ptr %t535 + %t537 = call %S.gen.Val @finch.gen.strArg(ptr %t529, %S.ast.Node %t536, { ptr, i64, i64 } { ptr @.str.5744, i64 13, i64 0 }) + store %S.gen.Val %t537, ptr %a538 + %t539 = load ptr, ptr %a1 + %t540 = load %S.gen.Val, ptr %a538 + %t541 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t539, %S.gen.Val %t540) + store { ptr, i64, i64 } %t541, ptr %a542 + %t543 = load ptr, ptr %a1 + %t544 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t543) + store { ptr, i64, i64 } %t544, ptr %a545 + %t546 = load ptr, ptr %a1 + %t547 = load { ptr, i64, i64 }, ptr %a545 + store { ptr, i64, i64 } { ptr @.str.5745, i64 30, i64 0 }, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t551, ptr %a553 + store { ptr, i64, i64 } { ptr @.str.5746, i64 6, i64 0 }, ptr %a554 + call void @finch_str_concat(ptr %a552, ptr %a553, ptr %a554) + store { ptr, i64, i64 } %t551, ptr %a555 + call void @finch_str_drop(ptr %a555) + %t556 = load { ptr, i64, i64 }, ptr %a552 + %t557 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t556, ptr %a559 + store { ptr, i64, i64 } %t557, ptr %a560 + call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) + store { ptr, i64, i64 } %t556, ptr %a561 + call void @finch_str_drop(ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a558 + store { ptr, i64, i64 } %t562, ptr %a564 + store { ptr, i64, i64 } { ptr @.str.5747, i64 6, i64 0 }, ptr %a565 + call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) + store { ptr, i64, i64 } %t562, ptr %a566 + call void @finch_str_drop(ptr %a566) + %t567 = load { ptr, i64, i64 }, ptr %a563 + %t568 = load { ptr, i64, i64 }, ptr %a542 + store { ptr, i64, i64 } %t567, ptr %a570 + store { ptr, i64, i64 } %t568, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + store { ptr, i64, i64 } %t567, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a569 + store { ptr, i64, i64 } %t573, ptr %a575 + store { ptr, i64, i64 } { ptr @.str.5748, i64 1, i64 0 }, ptr %a576 + call void @finch_str_concat(ptr %a574, ptr %a575, ptr %a576) + store { ptr, i64, i64 } %t573, ptr %a577 + call void @finch_str_drop(ptr %a577) + %t578 = load { ptr, i64, i64 }, ptr %a574 + call void @finch.gen.emit(ptr %t546, { ptr, i64, i64 } %t578) + store { ptr, i64, i64 } %t578, ptr %a579 + call void @finch_str_drop(ptr %a579) + %t580 = load ptr, ptr %a1 + %t581 = load %S.gen.Val, ptr %a538 + call void @finch.gen.release(ptr %t580, %S.gen.Val %t581) + %t582 = load ptr, ptr %a1 + %t583 = load { ptr, i64, i64 }, ptr %a545 + %t584 = call { ptr, i64, i64 } @finch.gen.load(ptr %t582, { ptr, i64, i64 } { ptr @.str.5749, i64 17, i64 0 }, { ptr, i64, i64 } %t583) + %t585 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t584, 0 + %t586 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5750, i64 3, i64 0 }) + %t587 = insertvalue %S.gen.Val %t585, %S.ast.Type %t586, 1 + %t588 = insertvalue %S.gen.Val %t587, i1 true, 2 + call void @finch_str_drop(ptr %a545) + call void @finch_str_drop(ptr %a542) + call void @finch.drop.S_gen_Val(ptr %a538) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t588 +endif8895: + %t589 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t589, ptr %a590 + store { ptr, i64, i64 } { ptr @.str.5751, i64 6, i64 0 }, ptr %a591 + %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) + %t593 = icmp ne i32 %t592, 0 + br i1 %t593, label %then8901, label %endif8903 +then8901: + %t594 = load ptr, ptr %a1 + %t595 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t594, %S.ast.Node %t595, i64 2) + %t596 = load ptr, ptr %a1 + %t597 = load ptr, ptr %a1 + %t598 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t599 = load { ptr, i64, i64 }, ptr %t598 + %t600 = extractvalue { ptr, i64, i64 } %t599, 1 + %t601 = icmp uge i64 1, %t600 + br i1 %t601, label %range8904, label %inrange8905 +range8904: + call void @finch_panic_index(ptr @.str.5752, i64 5486, i64 1, i64 %t600) + unreachable +inrange8905: + %t602 = extractvalue { ptr, i64, i64 } %t599, 0 + %t603 = getelementptr inbounds %S.ast.Node, ptr %t602, i64 1 + %t604 = load %S.ast.Node, ptr %t603 + %t605 = call %S.gen.Val @finch.gen.expr(ptr %t597, %S.ast.Node %t604) + %t606 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5753, i64 3, i64 0 }) + %t607 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t608 = load { ptr, i64, i64 }, ptr %t607 + %t609 = extractvalue { ptr, i64, i64 } %t608, 1 + %t610 = icmp uge i64 1, %t609 + br i1 %t610, label %range8906, label %inrange8907 +range8906: + call void @finch_panic_index(ptr @.str.5754, i64 5486, i64 1, i64 %t609) + unreachable +inrange8907: + %t611 = extractvalue { ptr, i64, i64 } %t608, 0 + %t612 = getelementptr inbounds %S.ast.Node, ptr %t611, i64 1 + %t613 = load %S.ast.Node, ptr %t612 + %t614 = call %S.gen.Val @finch.gen.coerce(ptr %t596, %S.gen.Val %t605, %S.ast.Type %t606, %S.ast.Node %t613, { ptr, i64, i64 } { ptr @.str.5755, i64 12, i64 0 }) + store %S.gen.Val %t605, ptr %a615 + call void @finch.drop.S_gen_Val(ptr %a615) + store %S.ast.Type %t606, ptr %a616 + call void @finch.drop.S_ast_Type(ptr %a616) + %t617 = extractvalue %S.gen.Val %t614, 0 + store { ptr, i64, i64 } %t617, ptr %a618 + call void @finch_str_copy(ptr %a619, ptr %a618) + %t620 = load { ptr, i64, i64 }, ptr %a619 + store %S.gen.Val %t614, ptr %a621 + call void @finch.drop.S_gen_Val(ptr %a621) + store { ptr, i64, i64 } %t620, ptr %a622 + %t623 = load ptr, ptr %a1 + %t624 = load ptr, ptr %a1 + %t625 = load ptr, ptr %a1 + %t626 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t627 = load { ptr, i64, i64 }, ptr %t626 + %t628 = extractvalue { ptr, i64, i64 } %t627, 1 + %t629 = icmp uge i64 2, %t628 + br i1 %t629, label %range8908, label %inrange8909 +range8908: + call void @finch_panic_index(ptr @.str.5756, i64 5487, i64 2, i64 %t628) + unreachable +inrange8909: + %t630 = extractvalue { ptr, i64, i64 } %t627, 0 + %t631 = getelementptr inbounds %S.ast.Node, ptr %t630, i64 2 + %t632 = load %S.ast.Node, ptr %t631 + %t633 = load %S.ast.Type, ptr %a15 + %t634 = call %S.gen.Val @finch.gen.exprWant(ptr %t625, %S.ast.Node %t632, %S.ast.Type %t633) + %t635 = load %S.ast.Type, ptr %a15 + %t636 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t637 = load { ptr, i64, i64 }, ptr %t636 + %t638 = extractvalue { ptr, i64, i64 } %t637, 1 + %t639 = icmp uge i64 2, %t638 + br i1 %t639, label %range8910, label %inrange8911 +range8910: + call void @finch_panic_index(ptr @.str.5757, i64 5487, i64 2, i64 %t638) + unreachable +inrange8911: + %t640 = extractvalue { ptr, i64, i64 } %t637, 0 + %t641 = getelementptr inbounds %S.ast.Node, ptr %t640, i64 2 + %t642 = load %S.ast.Node, ptr %t641 + %t643 = call %S.gen.Val @finch.gen.coerce(ptr %t624, %S.gen.Val %t634, %S.ast.Type %t635, %S.ast.Node %t642, { ptr, i64, i64 } { ptr @.str.5758, i64 11, i64 0 }) + store %S.gen.Val %t634, ptr %a644 + call void @finch.drop.S_gen_Val(ptr %a644) + %t645 = call { ptr, i64, i64 } @finch.gen.own(ptr %t623, %S.gen.Val %t643) + store %S.gen.Val %t643, ptr %a646 + call void @finch.drop.S_gen_Val(ptr %a646) + store { ptr, i64, i64 } %t645, ptr %a647 + %t648 = load ptr, ptr %a1 + %t649 = load ptr, ptr %a1 + %t650 = icmp eq ptr %t649, null + br i1 %t650, label %panic8912, label %ok8913 +panic8912: + call void @finch_panic(ptr @.str.5759, i64 5488, ptr @.str.5760) + unreachable +ok8913: + %t651 = getelementptr inbounds %S.gen.Gen, ptr %t649, i32 0, i32 1 + %t652 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t653 = load i64, ptr %t652 + %t654 = load { ptr, i64, i64 }, ptr %t651 + %t655 = extractvalue { ptr, i64, i64 } %t654, 1 + %t656 = icmp uge i64 %t653, %t655 + br i1 %t656, label %range8914, label %inrange8915 +range8914: + call void @finch_panic_index(ptr @.str.5761, i64 5488, i64 %t653, i64 %t655) + unreachable +inrange8915: + %t657 = extractvalue { ptr, i64, i64 } %t654, 0 + %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i64 %t653 + %t659 = load { ptr, i64, i64 }, ptr %t658 + %t660 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t648, { ptr, i64, i64 } %t659) + store { ptr, i64, i64 } %t660, ptr %a661 + %t662 = load ptr, ptr %a1 + %t663 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5762, i64 36, i64 0 }, ptr %a665 + store { ptr, i64, i64 } %t663, ptr %a666 + call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) + %t667 = load { ptr, i64, i64 }, ptr %a664 + store { ptr, i64, i64 } %t667, ptr %a669 + store { ptr, i64, i64 } { ptr @.str.5763, i64 6, i64 0 }, ptr %a670 + call void @finch_str_concat(ptr %a668, ptr %a669, ptr %a670) + store { ptr, i64, i64 } %t667, ptr %a671 + call void @finch_str_drop(ptr %a671) + %t672 = load { ptr, i64, i64 }, ptr %a668 + %t673 = load { ptr, i64, i64 }, ptr %a622 + store { ptr, i64, i64 } %t672, ptr %a675 + store { ptr, i64, i64 } %t673, ptr %a676 + call void @finch_str_concat(ptr %a674, ptr %a675, ptr %a676) + store { ptr, i64, i64 } %t672, ptr %a677 + call void @finch_str_drop(ptr %a677) + %t678 = load { ptr, i64, i64 }, ptr %a674 + store { ptr, i64, i64 } %t678, ptr %a680 + store { ptr, i64, i64 } { ptr @.str.5764, i64 6, i64 0 }, ptr %a681 + call void @finch_str_concat(ptr %a679, ptr %a680, ptr %a681) + store { ptr, i64, i64 } %t678, ptr %a682 + call void @finch_str_drop(ptr %a682) + %t683 = load { ptr, i64, i64 }, ptr %a679 + %t684 = load ptr, ptr %a1 + %t685 = load %S.ast.Type, ptr %a15 + %t686 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t684, %S.ast.Type %t685) + store { ptr, i64, i64 } %t683, ptr %a688 + store { ptr, i64, i64 } %t686, ptr %a689 + call void @finch_str_concat(ptr %a687, ptr %a688, ptr %a689) + store { ptr, i64, i64 } %t683, ptr %a690 + call void @finch_str_drop(ptr %a690) + store { ptr, i64, i64 } %t686, ptr %a691 + call void @finch_str_drop(ptr %a691) + %t692 = load { ptr, i64, i64 }, ptr %a687 + store { ptr, i64, i64 } %t692, ptr %a694 + store { ptr, i64, i64 } { ptr @.str.5765, i64 6, i64 0 }, ptr %a695 + call void @finch_str_concat(ptr %a693, ptr %a694, ptr %a695) + store { ptr, i64, i64 } %t692, ptr %a696 + call void @finch_str_drop(ptr %a696) + %t697 = load { ptr, i64, i64 }, ptr %a693 + %t698 = load { ptr, i64, i64 }, ptr %a661 + store { ptr, i64, i64 } %t697, ptr %a700 + store { ptr, i64, i64 } %t698, ptr %a701 + call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) + store { ptr, i64, i64 } %t697, ptr %a702 + call void @finch_str_drop(ptr %a702) + %t703 = load { ptr, i64, i64 }, ptr %a699 + store { ptr, i64, i64 } %t703, ptr %a705 + store { ptr, i64, i64 } { ptr @.str.5766, i64 6, i64 0 }, ptr %a706 + call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) + store { ptr, i64, i64 } %t703, ptr %a707 + call void @finch_str_drop(ptr %a707) + %t708 = load { ptr, i64, i64 }, ptr %a704 + %t709 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t710 = load i64, ptr %t709 + call void @finch_str_from_int(ptr %a711, i64 %t710) + %t712 = load { ptr, i64, i64 }, ptr %a711 + store { ptr, i64, i64 } %t708, ptr %a714 + store { ptr, i64, i64 } %t712, ptr %a715 + call void @finch_str_concat(ptr %a713, ptr %a714, ptr %a715) + store { ptr, i64, i64 } %t708, ptr %a716 + call void @finch_str_drop(ptr %a716) + store { ptr, i64, i64 } %t712, ptr %a717 + call void @finch_str_drop(ptr %a717) + %t718 = load { ptr, i64, i64 }, ptr %a713 + store { ptr, i64, i64 } %t718, ptr %a720 + store { ptr, i64, i64 } { ptr @.str.5767, i64 1, i64 0 }, ptr %a721 + call void @finch_str_concat(ptr %a719, ptr %a720, ptr %a721) + store { ptr, i64, i64 } %t718, ptr %a722 + call void @finch_str_drop(ptr %a722) + %t723 = load { ptr, i64, i64 }, ptr %a719 + call void @finch.gen.emit(ptr %t662, { ptr, i64, i64 } %t723) + store { ptr, i64, i64 } %t723, ptr %a724 + call void @finch_str_drop(ptr %a724) + %t725 = load ptr, ptr %a1 + %t726 = load { ptr, i64, i64 }, ptr %a3 + %t727 = call { ptr, i64, i64 } @finch.gen.load(ptr %t725, { ptr, i64, i64 } { ptr @.str.5768, i64 3, i64 0 }, { ptr, i64, i64 } %t726) + store { ptr, i64, i64 } %t727, ptr %a728 + %t729 = load ptr, ptr %a1 + %t730 = load { ptr, i64, i64 }, ptr %a19 + %t731 = load { ptr, i64, i64 }, ptr %a647 + %t732 = load ptr, ptr %a1 + %t733 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5769, i64 23, i64 0 }, ptr %a735 + store { ptr, i64, i64 } %t733, ptr %a736 + call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) + %t737 = load { ptr, i64, i64 }, ptr %a734 + store { ptr, i64, i64 } %t737, ptr %a739 + store { ptr, i64, i64 } { ptr @.str.5770, i64 6, i64 0 }, ptr %a740 + call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) + store { ptr, i64, i64 } %t737, ptr %a741 + call void @finch_str_drop(ptr %a741) + %t742 = load { ptr, i64, i64 }, ptr %a738 + %t743 = load { ptr, i64, i64 }, ptr %a728 + store { ptr, i64, i64 } %t742, ptr %a745 + store { ptr, i64, i64 } %t743, ptr %a746 + call void @finch_str_concat(ptr %a744, ptr %a745, ptr %a746) + store { ptr, i64, i64 } %t742, ptr %a747 + call void @finch_str_drop(ptr %a747) + %t748 = load { ptr, i64, i64 }, ptr %a744 + store { ptr, i64, i64 } %t748, ptr %a750 + store { ptr, i64, i64 } { ptr @.str.5771, i64 6, i64 0 }, ptr %a751 + call void @finch_str_concat(ptr %a749, ptr %a750, ptr %a751) + store { ptr, i64, i64 } %t748, ptr %a752 + call void @finch_str_drop(ptr %a752) + %t753 = load { ptr, i64, i64 }, ptr %a749 + %t754 = load { ptr, i64, i64 }, ptr %a622 + store { ptr, i64, i64 } %t753, ptr %a756 + store { ptr, i64, i64 } %t754, ptr %a757 + call void @finch_str_concat(ptr %a755, ptr %a756, ptr %a757) + store { ptr, i64, i64 } %t753, ptr %a758 + call void @finch_str_drop(ptr %a758) + %t759 = load { ptr, i64, i64 }, ptr %a755 + %t760 = call { ptr, i64, i64 } @finch.gen.op(ptr %t732, { ptr, i64, i64 } %t759) + store { ptr, i64, i64 } %t759, ptr %a761 + call void @finch_str_drop(ptr %a761) + call void @finch.gen.store(ptr %t729, { ptr, i64, i64 } %t730, { ptr, i64, i64 } %t731, { ptr, i64, i64 } %t760) + store { ptr, i64, i64 } %t760, ptr %a762 + call void @finch_str_drop(ptr %a762) + %t763 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5772, i64 4, i64 0 }) + %t764 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t763, 1 + call void @finch_str_drop(ptr %a728) + call void @finch_str_drop(ptr %a661) + call void @finch_str_drop(ptr %a647) + call void @finch_str_drop(ptr %a622) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t764 +endif8903: + %t765 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t765, ptr %a766 + store { ptr, i64, i64 } { ptr @.str.5773, i64 6, i64 0 }, ptr %a767 + %t768 = call i32 @finch_str_eq(ptr %a766, ptr %a767) + %t769 = icmp ne i32 %t768, 0 + br i1 %t769, label %then8916, label %endif8918 +then8916: + %t770 = load ptr, ptr %a1 + %t771 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t770, %S.ast.Node %t771, i64 1) + %t772 = load ptr, ptr %a1 + %t773 = load ptr, ptr %a1 + %t774 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t775 = load { ptr, i64, i64 }, ptr %t774 + %t776 = extractvalue { ptr, i64, i64 } %t775, 1 + %t777 = icmp uge i64 1, %t776 + br i1 %t777, label %range8919, label %inrange8920 +range8919: + call void @finch_panic_index(ptr @.str.5774, i64 5496, i64 1, i64 %t776) + unreachable +inrange8920: + %t778 = extractvalue { ptr, i64, i64 } %t775, 0 + %t779 = getelementptr inbounds %S.ast.Node, ptr %t778, i64 1 + %t780 = load %S.ast.Node, ptr %t779 + %t781 = call %S.gen.Val @finch.gen.expr(ptr %t773, %S.ast.Node %t780) + %t782 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5775, i64 3, i64 0 }) + %t783 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t784 = load { ptr, i64, i64 }, ptr %t783 + %t785 = extractvalue { ptr, i64, i64 } %t784, 1 + %t786 = icmp uge i64 1, %t785 + br i1 %t786, label %range8921, label %inrange8922 +range8921: + call void @finch_panic_index(ptr @.str.5776, i64 5496, i64 1, i64 %t785) + unreachable +inrange8922: + %t787 = extractvalue { ptr, i64, i64 } %t784, 0 + %t788 = getelementptr inbounds %S.ast.Node, ptr %t787, i64 1 + %t789 = load %S.ast.Node, ptr %t788 + %t790 = call %S.gen.Val @finch.gen.coerce(ptr %t772, %S.gen.Val %t781, %S.ast.Type %t782, %S.ast.Node %t789, { ptr, i64, i64 } { ptr @.str.5777, i64 12, i64 0 }) + store %S.gen.Val %t781, ptr %a791 + call void @finch.drop.S_gen_Val(ptr %a791) + store %S.ast.Type %t782, ptr %a792 + call void @finch.drop.S_ast_Type(ptr %a792) + %t793 = extractvalue %S.gen.Val %t790, 0 + store { ptr, i64, i64 } %t793, ptr %a794 + call void @finch_str_copy(ptr %a795, ptr %a794) + %t796 = load { ptr, i64, i64 }, ptr %a795 + store %S.gen.Val %t790, ptr %a797 + call void @finch.drop.S_gen_Val(ptr %a797) + store { ptr, i64, i64 } %t796, ptr %a798 + %t799 = load ptr, ptr %a1 + %t800 = load { ptr, i64, i64 }, ptr %a798 + %t801 = load ptr, ptr %a1 + %t802 = load { ptr, i64, i64 }, ptr %a39 + %t803 = call { ptr, i64, i64 } @finch.gen.load(ptr %t801, { ptr, i64, i64 } { ptr @.str.5778, i64 3, i64 0 }, { ptr, i64, i64 } %t802) + %t804 = load %S.ast.Node, ptr %a2 + call void @finch.gen.boundsCheck(ptr %t799, { ptr, i64, i64 } %t800, { ptr, i64, i64 } %t803, %S.ast.Node %t804) + store { ptr, i64, i64 } %t803, ptr %a805 + call void @finch_str_drop(ptr %a805) + %t806 = load ptr, ptr %a1 + %t807 = load { ptr, i64, i64 }, ptr %a3 + %t808 = call { ptr, i64, i64 } @finch.gen.load(ptr %t806, { ptr, i64, i64 } { ptr @.str.5779, i64 3, i64 0 }, { ptr, i64, i64 } %t807) + store { ptr, i64, i64 } %t808, ptr %a809 + %t810 = load ptr, ptr %a1 + %t811 = load { ptr, i64, i64 }, ptr %a19 + %t812 = load ptr, ptr %a1 + %t813 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5780, i64 23, i64 0 }, ptr %a815 + store { ptr, i64, i64 } %t813, ptr %a816 + call void @finch_str_concat(ptr %a814, ptr %a815, ptr %a816) + %t817 = load { ptr, i64, i64 }, ptr %a814 + store { ptr, i64, i64 } %t817, ptr %a819 + store { ptr, i64, i64 } { ptr @.str.5781, i64 6, i64 0 }, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t817, ptr %a821 + call void @finch_str_drop(ptr %a821) + %t822 = load { ptr, i64, i64 }, ptr %a818 + %t823 = load { ptr, i64, i64 }, ptr %a809 + store { ptr, i64, i64 } %t822, ptr %a825 + store { ptr, i64, i64 } %t823, ptr %a826 + call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) + store { ptr, i64, i64 } %t822, ptr %a827 + call void @finch_str_drop(ptr %a827) + %t828 = load { ptr, i64, i64 }, ptr %a824 + store { ptr, i64, i64 } %t828, ptr %a830 + store { ptr, i64, i64 } { ptr @.str.5782, i64 6, i64 0 }, ptr %a831 + call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) + store { ptr, i64, i64 } %t828, ptr %a832 + call void @finch_str_drop(ptr %a832) + %t833 = load { ptr, i64, i64 }, ptr %a829 + %t834 = load { ptr, i64, i64 }, ptr %a798 + store { ptr, i64, i64 } %t833, ptr %a836 + store { ptr, i64, i64 } %t834, ptr %a837 + call void @finch_str_concat(ptr %a835, ptr %a836, ptr %a837) + store { ptr, i64, i64 } %t833, ptr %a838 + call void @finch_str_drop(ptr %a838) + %t839 = load { ptr, i64, i64 }, ptr %a835 + %t840 = call { ptr, i64, i64 } @finch.gen.op(ptr %t812, { ptr, i64, i64 } %t839) + store { ptr, i64, i64 } %t839, ptr %a841 + call void @finch_str_drop(ptr %a841) + %t842 = call { ptr, i64, i64 } @finch.gen.load(ptr %t810, { ptr, i64, i64 } %t811, { ptr, i64, i64 } %t840) + store { ptr, i64, i64 } %t840, ptr %a843 + call void @finch_str_drop(ptr %a843) + store { ptr, i64, i64 } %t842, ptr %a844 + %t845 = load ptr, ptr %a1 + %t846 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5783, i64 36, i64 0 }, ptr %a848 + store { ptr, i64, i64 } %t846, ptr %a849 + call void @finch_str_concat(ptr %a847, ptr %a848, ptr %a849) + %t850 = load { ptr, i64, i64 }, ptr %a847 + store { ptr, i64, i64 } %t850, ptr %a852 + store { ptr, i64, i64 } { ptr @.str.5784, i64 6, i64 0 }, ptr %a853 + call void @finch_str_concat(ptr %a851, ptr %a852, ptr %a853) + store { ptr, i64, i64 } %t850, ptr %a854 + call void @finch_str_drop(ptr %a854) + %t855 = load { ptr, i64, i64 }, ptr %a851 + %t856 = load { ptr, i64, i64 }, ptr %a798 + store { ptr, i64, i64 } %t855, ptr %a858 + store { ptr, i64, i64 } %t856, ptr %a859 + call void @finch_str_concat(ptr %a857, ptr %a858, ptr %a859) + store { ptr, i64, i64 } %t855, ptr %a860 + call void @finch_str_drop(ptr %a860) + %t861 = load { ptr, i64, i64 }, ptr %a857 + store { ptr, i64, i64 } %t861, ptr %a863 + store { ptr, i64, i64 } { ptr @.str.5785, i64 6, i64 0 }, ptr %a864 + call void @finch_str_concat(ptr %a862, ptr %a863, ptr %a864) + store { ptr, i64, i64 } %t861, ptr %a865 + call void @finch_str_drop(ptr %a865) + %t866 = load { ptr, i64, i64 }, ptr %a862 + %t867 = load ptr, ptr %a1 + %t868 = load %S.ast.Type, ptr %a15 + %t869 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t867, %S.ast.Type %t868) + store { ptr, i64, i64 } %t866, ptr %a871 + store { ptr, i64, i64 } %t869, ptr %a872 + call void @finch_str_concat(ptr %a870, ptr %a871, ptr %a872) + store { ptr, i64, i64 } %t866, ptr %a873 + call void @finch_str_drop(ptr %a873) + store { ptr, i64, i64 } %t869, ptr %a874 + call void @finch_str_drop(ptr %a874) + %t875 = load { ptr, i64, i64 }, ptr %a870 + store { ptr, i64, i64 } %t875, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.5786, i64 1, i64 0 }, ptr %a878 + call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878) + store { ptr, i64, i64 } %t875, ptr %a879 + call void @finch_str_drop(ptr %a879) + %t880 = load { ptr, i64, i64 }, ptr %a876 + call void @finch.gen.emit(ptr %t845, { ptr, i64, i64 } %t880) + store { ptr, i64, i64 } %t880, ptr %a881 + call void @finch_str_drop(ptr %a881) + %t882 = load { ptr, i64, i64 }, ptr %a844 + store { ptr, i64, i64 } %t882, ptr %a883 + call void @finch_str_copy(ptr %a884, ptr %a883) + %t885 = load { ptr, i64, i64 }, ptr %a884 + %t886 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t885, 0 + %t887 = load %S.ast.Type, ptr %a15 + store %S.ast.Type %t887, ptr %a888 + call void @finch.copy.S_ast_Type(ptr %a889, ptr %a888) + %t890 = load %S.ast.Type, ptr %a889 + %t891 = insertvalue %S.gen.Val %t886, %S.ast.Type %t890, 1 + %t892 = load ptr, ptr %a1 + %t893 = load %S.ast.Type, ptr %a15 + %t894 = call i1 @finch.gen.owning(ptr %t892, %S.ast.Type %t893) + %t895 = insertvalue %S.gen.Val %t891, i1 %t894, 2 + call void @finch_str_drop(ptr %a844) + call void @finch_str_drop(ptr %a809) + call void @finch_str_drop(ptr %a798) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t895 +endif8918: + %t896 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t896, ptr %a897 + store { ptr, i64, i64 } { ptr @.str.5787, i64 6, i64 0 }, ptr %a898 + %t899 = call i32 @finch_str_eq(ptr %a897, ptr %a898) + %t900 = icmp ne i32 %t899, 0 + br i1 %t900, label %then8923, label %endif8925 +then8923: + %t901 = load ptr, ptr %a1 + %t902 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t901, %S.ast.Node %t902, i64 1) + %t903 = load ptr, ptr %a1 + %t904 = load ptr, ptr %a1 + %t905 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t906 = load { ptr, i64, i64 }, ptr %t905 + %t907 = extractvalue { ptr, i64, i64 } %t906, 1 + %t908 = icmp uge i64 1, %t907 + br i1 %t908, label %range8926, label %inrange8927 +range8926: + call void @finch_panic_index(ptr @.str.5788, i64 5505, i64 1, i64 %t907) + unreachable +inrange8927: + %t909 = extractvalue { ptr, i64, i64 } %t906, 0 + %t910 = getelementptr inbounds %S.ast.Node, ptr %t909, i64 1 + %t911 = load %S.ast.Node, ptr %t910 + %t912 = call %S.gen.Val @finch.gen.expr(ptr %t904, %S.ast.Node %t911) + %t913 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5789, i64 3, i64 0 }) + %t914 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t915 = load { ptr, i64, i64 }, ptr %t914 + %t916 = extractvalue { ptr, i64, i64 } %t915, 1 + %t917 = icmp uge i64 1, %t916 + br i1 %t917, label %range8928, label %inrange8929 +range8928: + call void @finch_panic_index(ptr @.str.5790, i64 5505, i64 1, i64 %t916) + unreachable +inrange8929: + %t918 = extractvalue { ptr, i64, i64 } %t915, 0 + %t919 = getelementptr inbounds %S.ast.Node, ptr %t918, i64 1 + %t920 = load %S.ast.Node, ptr %t919 + %t921 = call %S.gen.Val @finch.gen.coerce(ptr %t903, %S.gen.Val %t912, %S.ast.Type %t913, %S.ast.Node %t920, { ptr, i64, i64 } { ptr @.str.5791, i64 14, i64 0 }) + store %S.gen.Val %t912, ptr %a922 + call void @finch.drop.S_gen_Val(ptr %a922) + store %S.ast.Type %t913, ptr %a923 + call void @finch.drop.S_ast_Type(ptr %a923) + %t924 = extractvalue %S.gen.Val %t921, 0 + store { ptr, i64, i64 } %t924, ptr %a925 + call void @finch_str_copy(ptr %a926, ptr %a925) + %t927 = load { ptr, i64, i64 }, ptr %a926 + store %S.gen.Val %t921, ptr %a928 + call void @finch.drop.S_gen_Val(ptr %a928) + store { ptr, i64, i64 } %t927, ptr %a929 + %t930 = load ptr, ptr %a1 + %t931 = load { ptr, i64, i64 }, ptr %a3 + %t932 = load %S.ast.Type, ptr %a4 + %t933 = load { ptr, i64, i64 }, ptr %a929 + call void @finch.gen.dropFrom(ptr %t930, { ptr, i64, i64 } %t931, %S.ast.Type %t932, { ptr, i64, i64 } %t933) + %t934 = load ptr, ptr %a1 + %t935 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5792, i64 32, i64 0 }, ptr %a937 + store { ptr, i64, i64 } %t935, ptr %a938 + call void @finch_str_concat(ptr %a936, ptr %a937, ptr %a938) + %t939 = load { ptr, i64, i64 }, ptr %a936 + store { ptr, i64, i64 } %t939, ptr %a941 + store { ptr, i64, i64 } { ptr @.str.5793, i64 6, i64 0 }, ptr %a942 + call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) + store { ptr, i64, i64 } %t939, ptr %a943 + call void @finch_str_drop(ptr %a943) + %t944 = load { ptr, i64, i64 }, ptr %a940 + %t945 = load { ptr, i64, i64 }, ptr %a929 + store { ptr, i64, i64 } %t944, ptr %a947 + store { ptr, i64, i64 } %t945, ptr %a948 + call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948) + store { ptr, i64, i64 } %t944, ptr %a949 + call void @finch_str_drop(ptr %a949) + %t950 = load { ptr, i64, i64 }, ptr %a946 + store { ptr, i64, i64 } %t950, ptr %a952 + store { ptr, i64, i64 } { ptr @.str.5794, i64 6, i64 0 }, ptr %a953 + call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) + store { ptr, i64, i64 } %t950, ptr %a954 + call void @finch_str_drop(ptr %a954) + %t955 = load { ptr, i64, i64 }, ptr %a951 + %t956 = load ptr, ptr %a1 + %t957 = load %S.ast.Type, ptr %a15 + %t958 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t956, %S.ast.Type %t957) + store { ptr, i64, i64 } %t955, ptr %a960 + store { ptr, i64, i64 } %t958, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t955, ptr %a962 + call void @finch_str_drop(ptr %a962) + store { ptr, i64, i64 } %t958, ptr %a963 + call void @finch_str_drop(ptr %a963) + %t964 = load { ptr, i64, i64 }, ptr %a959 + store { ptr, i64, i64 } %t964, ptr %a966 + store { ptr, i64, i64 } { ptr @.str.5795, i64 1, i64 0 }, ptr %a967 + call void @finch_str_concat(ptr %a965, ptr %a966, ptr %a967) + store { ptr, i64, i64 } %t964, ptr %a968 + call void @finch_str_drop(ptr %a968) + %t969 = load { ptr, i64, i64 }, ptr %a965 + call void @finch.gen.emit(ptr %t934, { ptr, i64, i64 } %t969) + store { ptr, i64, i64 } %t969, ptr %a970 + call void @finch_str_drop(ptr %a970) + %t971 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5796, i64 4, i64 0 }) + %t972 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t971, 1 + call void @finch_str_drop(ptr %a929) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t972 +endif8925: + %t973 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t973, ptr %a974 + store { ptr, i64, i64 } { ptr @.str.5797, i64 7, i64 0 }, ptr %a975 + %t976 = call i32 @finch_str_eq(ptr %a974, ptr %a975) + %t977 = icmp ne i32 %t976, 0 + br i1 %t977, label %then8930, label %endif8932 +then8930: + %t978 = load ptr, ptr %a1 + %t979 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t978, %S.ast.Node %t979, i64 0) + %t980 = load ptr, ptr %a1 + %t981 = load { ptr, i64, i64 }, ptr %a39 + %t982 = call { ptr, i64, i64 } @finch.gen.load(ptr %t980, { ptr, i64, i64 } { ptr @.str.5798, i64 3, i64 0 }, { ptr, i64, i64 } %t981) + store { ptr, i64, i64 } %t982, ptr %a983 + %t984 = load ptr, ptr %a1 + %t985 = load { ptr, i64, i64 }, ptr %a3 + %t986 = call { ptr, i64, i64 } @finch.gen.load(ptr %t984, { ptr, i64, i64 } { ptr @.str.5799, i64 3, i64 0 }, { ptr, i64, i64 } %t985) + store { ptr, i64, i64 } %t986, ptr %a987 + %t988 = load ptr, ptr %a1 + %t989 = load { ptr, i64, i64 }, ptr %a983 + store { ptr, i64, i64 } { ptr @.str.5800, i64 9, i64 0 }, ptr %a991 + store { ptr, i64, i64 } %t989, ptr %a992 + call void @finch_str_concat(ptr %a990, ptr %a991, ptr %a992) + %t993 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t993, ptr %a995 + store { ptr, i64, i64 } { ptr @.str.5801, i64 3, i64 0 }, ptr %a996 + call void @finch_str_concat(ptr %a994, ptr %a995, ptr %a996) + store { ptr, i64, i64 } %t993, ptr %a997 + call void @finch_str_drop(ptr %a997) + %t998 = load { ptr, i64, i64 }, ptr %a994 + %t999 = call { ptr, i64, i64 } @finch.gen.op(ptr %t988, { ptr, i64, i64 } %t998) + store { ptr, i64, i64 } %t998, ptr %a1000 + call void @finch_str_drop(ptr %a1000) + store { ptr, i64, i64 } %t999, ptr %a1001 + %t1002 = load ptr, ptr %a1 + %t1003 = load { ptr, i64, i64 }, ptr %a1001 + %t1004 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1002, { ptr, i64, i64 } %t1003) + store { ptr, i64, i64 } %t1004, ptr %a1005 + %t1006 = load ptr, ptr %a1 + %t1007 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5802, i64 23, i64 0 }, ptr %a1009 + store { ptr, i64, i64 } %t1007, ptr %a1010 + call void @finch_str_concat(ptr %a1008, ptr %a1009, ptr %a1010) + %t1011 = load { ptr, i64, i64 }, ptr %a1008 + store { ptr, i64, i64 } %t1011, ptr %a1013 + store { ptr, i64, i64 } { ptr @.str.5803, i64 6, i64 0 }, ptr %a1014 + call void @finch_str_concat(ptr %a1012, ptr %a1013, ptr %a1014) + store { ptr, i64, i64 } %t1011, ptr %a1015 + call void @finch_str_drop(ptr %a1015) + %t1016 = load { ptr, i64, i64 }, ptr %a1012 + %t1017 = load { ptr, i64, i64 }, ptr %a987 + store { ptr, i64, i64 } %t1016, ptr %a1019 + store { ptr, i64, i64 } %t1017, ptr %a1020 + call void @finch_str_concat(ptr %a1018, ptr %a1019, ptr %a1020) + store { ptr, i64, i64 } %t1016, ptr %a1021 + call void @finch_str_drop(ptr %a1021) + %t1022 = load { ptr, i64, i64 }, ptr %a1018 + store { ptr, i64, i64 } %t1022, ptr %a1024 + store { ptr, i64, i64 } { ptr @.str.5804, i64 6, i64 0 }, ptr %a1025 + call void @finch_str_concat(ptr %a1023, ptr %a1024, ptr %a1025) + store { ptr, i64, i64 } %t1022, ptr %a1026 + call void @finch_str_drop(ptr %a1026) + %t1027 = load { ptr, i64, i64 }, ptr %a1023 + %t1028 = load { ptr, i64, i64 }, ptr %a1005 + %t1029 = extractvalue { ptr, i64, i64 } %t1028, 1 + %t1030 = icmp uge i64 3, %t1029 + br i1 %t1030, label %range8933, label %inrange8934 +range8933: + call void @finch_panic_index(ptr @.str.5805, i64 5516, i64 3, i64 %t1029) + unreachable +inrange8934: + %t1031 = extractvalue { ptr, i64, i64 } %t1028, 0 + %t1032 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1031, i64 3 + %t1033 = load { ptr, i64, i64 }, ptr %t1032 + store { ptr, i64, i64 } %t1027, ptr %a1035 + store { ptr, i64, i64 } %t1033, ptr %a1036 + call void @finch_str_concat(ptr %a1034, ptr %a1035, ptr %a1036) + store { ptr, i64, i64 } %t1027, ptr %a1037 + call void @finch_str_drop(ptr %a1037) + %t1038 = load { ptr, i64, i64 }, ptr %a1034 + %t1039 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1006, { ptr, i64, i64 } %t1038) + store { ptr, i64, i64 } %t1038, ptr %a1040 + call void @finch_str_drop(ptr %a1040) + store { ptr, i64, i64 } %t1039, ptr %a1041 + %t1042 = load ptr, ptr %a1 + %t1043 = load ptr, ptr %a1 + %t1044 = load { ptr, i64, i64 }, ptr %a983 + store { ptr, i64, i64 } { ptr @.str.5807, i64 8, i64 0 }, ptr %a1046 + store { ptr, i64, i64 } %t1044, ptr %a1047 + call void @finch_str_concat(ptr %a1045, ptr %a1046, ptr %a1047) + %t1048 = load { ptr, i64, i64 }, ptr %a1045 + store { ptr, i64, i64 } %t1048, ptr %a1050 + store { ptr, i64, i64 } { ptr @.str.5808, i64 3, i64 0 }, ptr %a1051 + call void @finch_str_concat(ptr %a1049, ptr %a1050, ptr %a1051) + store { ptr, i64, i64 } %t1048, ptr %a1052 + call void @finch_str_drop(ptr %a1052) + %t1053 = load { ptr, i64, i64 }, ptr %a1049 + %t1054 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1043, { ptr, i64, i64 } %t1053) + store { ptr, i64, i64 } %t1053, ptr %a1055 + call void @finch_str_drop(ptr %a1055) + store { ptr, i64, i64 } { ptr @.str.5806, i64 8, i64 0 }, ptr %a1057 + store { ptr, i64, i64 } %t1054, ptr %a1058 + call void @finch_str_concat(ptr %a1056, ptr %a1057, ptr %a1058) + store { ptr, i64, i64 } %t1054, ptr %a1059 + call void @finch_str_drop(ptr %a1059) + %t1060 = load { ptr, i64, i64 }, ptr %a1056 + store { ptr, i64, i64 } %t1060, ptr %a1062 + store { ptr, i64, i64 } { ptr @.str.5809, i64 2, i64 0 }, ptr %a1063 + call void @finch_str_concat(ptr %a1061, ptr %a1062, ptr %a1063) + store { ptr, i64, i64 } %t1060, ptr %a1064 + call void @finch_str_drop(ptr %a1064) + %t1065 = load { ptr, i64, i64 }, ptr %a1061 + %t1066 = load { ptr, i64, i64 }, ptr %a1005 + %t1067 = extractvalue { ptr, i64, i64 } %t1066, 1 + %t1068 = icmp uge i64 3, %t1067 + br i1 %t1068, label %range8935, label %inrange8936 +range8935: + call void @finch_panic_index(ptr @.str.5810, i64 5517, i64 3, i64 %t1067) + unreachable +inrange8936: + %t1069 = extractvalue { ptr, i64, i64 } %t1066, 0 + %t1070 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1069, i64 3 + %t1071 = load { ptr, i64, i64 }, ptr %t1070 + store { ptr, i64, i64 } %t1065, ptr %a1073 + store { ptr, i64, i64 } %t1071, ptr %a1074 + call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) + store { ptr, i64, i64 } %t1065, ptr %a1075 + call void @finch_str_drop(ptr %a1075) + %t1076 = load { ptr, i64, i64 }, ptr %a1072 + %t1077 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1042, { ptr, i64, i64 } %t1076) + store { ptr, i64, i64 } %t1076, ptr %a1078 + call void @finch_str_drop(ptr %a1078) + store { ptr, i64, i64 } %t1077, ptr %a1079 + %t1080 = load ptr, ptr %a1 + %t1081 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5811, i64 23, i64 0 }, ptr %a1083 + store { ptr, i64, i64 } %t1081, ptr %a1084 + call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084) + %t1085 = load { ptr, i64, i64 }, ptr %a1082 + store { ptr, i64, i64 } %t1085, ptr %a1087 + store { ptr, i64, i64 } { ptr @.str.5812, i64 6, i64 0 }, ptr %a1088 + call void @finch_str_concat(ptr %a1086, ptr %a1087, ptr %a1088) + store { ptr, i64, i64 } %t1085, ptr %a1089 + call void @finch_str_drop(ptr %a1089) + %t1090 = load { ptr, i64, i64 }, ptr %a1086 + %t1091 = load { ptr, i64, i64 }, ptr %a987 + store { ptr, i64, i64 } %t1090, ptr %a1093 + store { ptr, i64, i64 } %t1091, ptr %a1094 + call void @finch_str_concat(ptr %a1092, ptr %a1093, ptr %a1094) + store { ptr, i64, i64 } %t1090, ptr %a1095 + call void @finch_str_drop(ptr %a1095) + %t1096 = load { ptr, i64, i64 }, ptr %a1092 + store { ptr, i64, i64 } %t1096, ptr %a1098 + store { ptr, i64, i64 } { ptr @.str.5813, i64 6, i64 0 }, ptr %a1099 + call void @finch_str_concat(ptr %a1097, ptr %a1098, ptr %a1099) + store { ptr, i64, i64 } %t1096, ptr %a1100 + call void @finch_str_drop(ptr %a1100) + %t1101 = load { ptr, i64, i64 }, ptr %a1097 + %t1102 = load { ptr, i64, i64 }, ptr %a1079 + store { ptr, i64, i64 } %t1101, ptr %a1104 + store { ptr, i64, i64 } %t1102, ptr %a1105 + call void @finch_str_concat(ptr %a1103, ptr %a1104, ptr %a1105) + store { ptr, i64, i64 } %t1101, ptr %a1106 + call void @finch_str_drop(ptr %a1106) + %t1107 = load { ptr, i64, i64 }, ptr %a1103 + %t1108 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1080, { ptr, i64, i64 } %t1107) + store { ptr, i64, i64 } %t1107, ptr %a1109 + call void @finch_str_drop(ptr %a1109) + store { ptr, i64, i64 } %t1108, ptr %a1110 + %t1111 = load ptr, ptr %a1 + %t1112 = load { ptr, i64, i64 }, ptr %a19 + %t1113 = load { ptr, i64, i64 }, ptr %a1041 + %t1114 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1111, { ptr, i64, i64 } %t1112, { ptr, i64, i64 } %t1113) + store { ptr, i64, i64 } %t1114, ptr %a1115 + %t1116 = load ptr, ptr %a1 + %t1117 = load { ptr, i64, i64 }, ptr %a19 + %t1118 = load { ptr, i64, i64 }, ptr %a1110 + %t1119 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1116, { ptr, i64, i64 } %t1117, { ptr, i64, i64 } %t1118) + store { ptr, i64, i64 } %t1119, ptr %a1120 + %t1121 = load ptr, ptr %a1 + %t1122 = load { ptr, i64, i64 }, ptr %a19 + %t1123 = load { ptr, i64, i64 }, ptr %a1120 + %t1124 = load { ptr, i64, i64 }, ptr %a1041 + call void @finch.gen.store(ptr %t1121, { ptr, i64, i64 } %t1122, { ptr, i64, i64 } %t1123, { ptr, i64, i64 } %t1124) + %t1125 = load ptr, ptr %a1 + %t1126 = load { ptr, i64, i64 }, ptr %a19 + %t1127 = load { ptr, i64, i64 }, ptr %a1115 + %t1128 = load { ptr, i64, i64 }, ptr %a1110 + call void @finch.gen.store(ptr %t1125, { ptr, i64, i64 } %t1126, { ptr, i64, i64 } %t1127, { ptr, i64, i64 } %t1128) + %t1129 = load ptr, ptr %a1 + %t1130 = load { ptr, i64, i64 }, ptr %a1005 + call void @finch.gen.loopEnd(ptr %t1129, { ptr, i64, i64 } %t1130) + %t1131 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5814, i64 4, i64 0 }) + %t1132 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1131, 1 + call void @finch_str_drop(ptr %a1120) + call void @finch_str_drop(ptr %a1115) + call void @finch_str_drop(ptr %a1110) + call void @finch_str_drop(ptr %a1079) + call void @finch_str_drop(ptr %a1041) + call void @finch.drop.arr_str(ptr %a1005) + call void @finch_str_drop(ptr %a1001) + call void @finch_str_drop(ptr %a987) + call void @finch_str_drop(ptr %a983) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t1132 +endif8932: + %t1133 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t1133, ptr %a1134 + store { ptr, i64, i64 } { ptr @.str.5815, i64 5, i64 0 }, ptr %a1135 + %t1136 = call i32 @finch_str_eq(ptr %a1134, ptr %a1135) + %t1137 = icmp ne i32 %t1136, 0 + br i1 %t1137, label %then8937, label %endif8939 +then8937: + %t1138 = load ptr, ptr %a1 + %t1139 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t1138, %S.ast.Node %t1139, i64 2) + %t1140 = load ptr, ptr %a1 + %t1141 = load ptr, ptr %a1 + %t1142 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1143 = load { ptr, i64, i64 }, ptr %t1142 + %t1144 = extractvalue { ptr, i64, i64 } %t1143, 1 + %t1145 = icmp uge i64 1, %t1144 + br i1 %t1145, label %range8940, label %inrange8941 +range8940: + call void @finch_panic_index(ptr @.str.5816, i64 5528, i64 1, i64 %t1144) + unreachable +inrange8941: + %t1146 = extractvalue { ptr, i64, i64 } %t1143, 0 + %t1147 = getelementptr inbounds %S.ast.Node, ptr %t1146, i64 1 + %t1148 = load %S.ast.Node, ptr %t1147 + %t1149 = call %S.gen.Val @finch.gen.expr(ptr %t1141, %S.ast.Node %t1148) + %t1150 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5817, i64 3, i64 0 }) + %t1151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1152 = load { ptr, i64, i64 }, ptr %t1151 + %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 + %t1154 = icmp uge i64 1, %t1153 + br i1 %t1154, label %range8942, label %inrange8943 +range8942: + call void @finch_panic_index(ptr @.str.5818, i64 5528, i64 1, i64 %t1153) + unreachable +inrange8943: + %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 + %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 1 + %t1157 = load %S.ast.Node, ptr %t1156 + %t1158 = call %S.gen.Val @finch.gen.coerce(ptr %t1140, %S.gen.Val %t1149, %S.ast.Type %t1150, %S.ast.Node %t1157, { ptr, i64, i64 } { ptr @.str.5819, i64 9, i64 0 }) + store %S.gen.Val %t1149, ptr %a1159 + call void @finch.drop.S_gen_Val(ptr %a1159) + store %S.ast.Type %t1150, ptr %a1160 + call void @finch.drop.S_ast_Type(ptr %a1160) + %t1161 = extractvalue %S.gen.Val %t1158, 0 + store { ptr, i64, i64 } %t1161, ptr %a1162 + call void @finch_str_copy(ptr %a1163, ptr %a1162) + %t1164 = load { ptr, i64, i64 }, ptr %a1163 + store %S.gen.Val %t1158, ptr %a1165 + call void @finch.drop.S_gen_Val(ptr %a1165) + store { ptr, i64, i64 } %t1164, ptr %a1166 + %t1167 = load ptr, ptr %a1 + %t1168 = load ptr, ptr %a1 + %t1169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1170 = load { ptr, i64, i64 }, ptr %t1169 + %t1171 = extractvalue { ptr, i64, i64 } %t1170, 1 + %t1172 = icmp uge i64 2, %t1171 + br i1 %t1172, label %range8944, label %inrange8945 +range8944: + call void @finch_panic_index(ptr @.str.5820, i64 5529, i64 2, i64 %t1171) + unreachable +inrange8945: + %t1173 = extractvalue { ptr, i64, i64 } %t1170, 0 + %t1174 = getelementptr inbounds %S.ast.Node, ptr %t1173, i64 2 + %t1175 = load %S.ast.Node, ptr %t1174 + %t1176 = call %S.gen.Val @finch.gen.expr(ptr %t1168, %S.ast.Node %t1175) + %t1177 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5821, i64 3, i64 0 }) + %t1178 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1179 = load { ptr, i64, i64 }, ptr %t1178 + %t1180 = extractvalue { ptr, i64, i64 } %t1179, 1 + %t1181 = icmp uge i64 2, %t1180 + br i1 %t1181, label %range8946, label %inrange8947 +range8946: + call void @finch_panic_index(ptr @.str.5822, i64 5529, i64 2, i64 %t1180) + unreachable +inrange8947: + %t1182 = extractvalue { ptr, i64, i64 } %t1179, 0 + %t1183 = getelementptr inbounds %S.ast.Node, ptr %t1182, i64 2 + %t1184 = load %S.ast.Node, ptr %t1183 + %t1185 = call %S.gen.Val @finch.gen.coerce(ptr %t1167, %S.gen.Val %t1176, %S.ast.Type %t1177, %S.ast.Node %t1184, { ptr, i64, i64 } { ptr @.str.5823, i64 7, i64 0 }) + store %S.gen.Val %t1176, ptr %a1186 + call void @finch.drop.S_gen_Val(ptr %a1186) + store %S.ast.Type %t1177, ptr %a1187 + call void @finch.drop.S_ast_Type(ptr %a1187) + %t1188 = extractvalue %S.gen.Val %t1185, 0 + store { ptr, i64, i64 } %t1188, ptr %a1189 + call void @finch_str_copy(ptr %a1190, ptr %a1189) + %t1191 = load { ptr, i64, i64 }, ptr %a1190 + store %S.gen.Val %t1185, ptr %a1192 + call void @finch.drop.S_gen_Val(ptr %a1192) + store { ptr, i64, i64 } %t1191, ptr %a1193 + %t1194 = load ptr, ptr %a1 + %t1195 = load { ptr, i64, i64 }, ptr %a39 + %t1196 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1194, { ptr, i64, i64 } { ptr @.str.5824, i64 3, i64 0 }, { ptr, i64, i64 } %t1195) + store { ptr, i64, i64 } %t1196, ptr %a1197 + %t1198 = load ptr, ptr %a1 + %t1199 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } { ptr @.str.5825, i64 13, i64 0 }, ptr %a1201 + store { ptr, i64, i64 } %t1199, ptr %a1202 + call void @finch_str_concat(ptr %a1200, ptr %a1201, ptr %a1202) + %t1203 = load { ptr, i64, i64 }, ptr %a1200 + store { ptr, i64, i64 } %t1203, ptr %a1205 + store { ptr, i64, i64 } { ptr @.str.5826, i64 3, i64 0 }, ptr %a1206 + call void @finch_str_concat(ptr %a1204, ptr %a1205, ptr %a1206) + store { ptr, i64, i64 } %t1203, ptr %a1207 + call void @finch_str_drop(ptr %a1207) + %t1208 = load { ptr, i64, i64 }, ptr %a1204 + %t1209 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1198, { ptr, i64, i64 } %t1208) + store { ptr, i64, i64 } %t1208, ptr %a1210 + call void @finch_str_drop(ptr %a1210) + store { ptr, i64, i64 } %t1209, ptr %a1211 + %t1212 = load ptr, ptr %a1 + %t1213 = load { ptr, i64, i64 }, ptr %a1193 + store { ptr, i64, i64 } { ptr @.str.5827, i64 13, i64 0 }, ptr %a1215 + store { ptr, i64, i64 } %t1213, ptr %a1216 + call void @finch_str_concat(ptr %a1214, ptr %a1215, ptr %a1216) + %t1217 = load { ptr, i64, i64 }, ptr %a1214 + store { ptr, i64, i64 } %t1217, ptr %a1219 + store { ptr, i64, i64 } { ptr @.str.5828, i64 2, i64 0 }, ptr %a1220 + call void @finch_str_concat(ptr %a1218, ptr %a1219, ptr %a1220) + store { ptr, i64, i64 } %t1217, ptr %a1221 + call void @finch_str_drop(ptr %a1221) + %t1222 = load { ptr, i64, i64 }, ptr %a1218 + %t1223 = load { ptr, i64, i64 }, ptr %a1197 + store { ptr, i64, i64 } %t1222, ptr %a1225 + store { ptr, i64, i64 } %t1223, ptr %a1226 + call void @finch_str_concat(ptr %a1224, ptr %a1225, ptr %a1226) + store { ptr, i64, i64 } %t1222, ptr %a1227 + call void @finch_str_drop(ptr %a1227) + %t1228 = load { ptr, i64, i64 }, ptr %a1224 + %t1229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1212, { ptr, i64, i64 } %t1228) + store { ptr, i64, i64 } %t1228, ptr %a1230 + call void @finch_str_drop(ptr %a1230) + store { ptr, i64, i64 } %t1229, ptr %a1231 + %t1232 = load ptr, ptr %a1 + %t1233 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } { ptr @.str.5829, i64 13, i64 0 }, ptr %a1235 + store { ptr, i64, i64 } %t1233, ptr %a1236 + call void @finch_str_concat(ptr %a1234, ptr %a1235, ptr %a1236) + %t1237 = load { ptr, i64, i64 }, ptr %a1234 + store { ptr, i64, i64 } %t1237, ptr %a1239 + store { ptr, i64, i64 } { ptr @.str.5830, i64 2, i64 0 }, ptr %a1240 + call void @finch_str_concat(ptr %a1238, ptr %a1239, ptr %a1240) + store { ptr, i64, i64 } %t1237, ptr %a1241 + call void @finch_str_drop(ptr %a1241) + %t1242 = load { ptr, i64, i64 }, ptr %a1238 + %t1243 = load { ptr, i64, i64 }, ptr %a1193 + store { ptr, i64, i64 } %t1242, ptr %a1245 + store { ptr, i64, i64 } %t1243, ptr %a1246 + call void @finch_str_concat(ptr %a1244, ptr %a1245, ptr %a1246) + store { ptr, i64, i64 } %t1242, ptr %a1247 + call void @finch_str_drop(ptr %a1247) + %t1248 = load { ptr, i64, i64 }, ptr %a1244 + %t1249 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1232, { ptr, i64, i64 } %t1248) + store { ptr, i64, i64 } %t1248, ptr %a1250 + call void @finch_str_drop(ptr %a1250) + store { ptr, i64, i64 } %t1249, ptr %a1251 + %t1252 = load ptr, ptr %a1 + %t1253 = load ptr, ptr %a1 + %t1254 = load ptr, ptr %a1 + %t1255 = load { ptr, i64, i64 }, ptr %a1211 + store { ptr, i64, i64 } { ptr @.str.5832, i64 6, i64 0 }, ptr %a1257 + store { ptr, i64, i64 } %t1255, ptr %a1258 + call void @finch_str_concat(ptr %a1256, ptr %a1257, ptr %a1258) + %t1259 = load { ptr, i64, i64 }, ptr %a1256 + store { ptr, i64, i64 } %t1259, ptr %a1261 + store { ptr, i64, i64 } { ptr @.str.5833, i64 2, i64 0 }, ptr %a1262 + call void @finch_str_concat(ptr %a1260, ptr %a1261, ptr %a1262) + store { ptr, i64, i64 } %t1259, ptr %a1263 + call void @finch_str_drop(ptr %a1263) + %t1264 = load { ptr, i64, i64 }, ptr %a1260 + %t1265 = load { ptr, i64, i64 }, ptr %a1231 + store { ptr, i64, i64 } %t1264, ptr %a1267 + store { ptr, i64, i64 } %t1265, ptr %a1268 + call void @finch_str_concat(ptr %a1266, ptr %a1267, ptr %a1268) + store { ptr, i64, i64 } %t1264, ptr %a1269 + call void @finch_str_drop(ptr %a1269) + %t1270 = load { ptr, i64, i64 }, ptr %a1266 + %t1271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1254, { ptr, i64, i64 } %t1270) + store { ptr, i64, i64 } %t1270, ptr %a1272 + call void @finch_str_drop(ptr %a1272) + store { ptr, i64, i64 } { ptr @.str.5831, i64 6, i64 0 }, ptr %a1274 + store { ptr, i64, i64 } %t1271, ptr %a1275 + call void @finch_str_concat(ptr %a1273, ptr %a1274, ptr %a1275) + store { ptr, i64, i64 } %t1271, ptr %a1276 + call void @finch_str_drop(ptr %a1276) + %t1277 = load { ptr, i64, i64 }, ptr %a1273 + store { ptr, i64, i64 } %t1277, ptr %a1279 + store { ptr, i64, i64 } { ptr @.str.5834, i64 2, i64 0 }, ptr %a1280 + call void @finch_str_concat(ptr %a1278, ptr %a1279, ptr %a1280) + store { ptr, i64, i64 } %t1277, ptr %a1281 + call void @finch_str_drop(ptr %a1281) + %t1282 = load { ptr, i64, i64 }, ptr %a1278 + %t1283 = load { ptr, i64, i64 }, ptr %a1251 + store { ptr, i64, i64 } %t1282, ptr %a1285 + store { ptr, i64, i64 } %t1283, ptr %a1286 + call void @finch_str_concat(ptr %a1284, ptr %a1285, ptr %a1286) + store { ptr, i64, i64 } %t1282, ptr %a1287 + call void @finch_str_drop(ptr %a1287) + %t1288 = load { ptr, i64, i64 }, ptr %a1284 + %t1289 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1253, { ptr, i64, i64 } %t1288) + store { ptr, i64, i64 } %t1288, ptr %a1290 + call void @finch_str_drop(ptr %a1290) + %t1291 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t1252, { ptr, i64, i64 } %t1289, { ptr, i64, i64 } { ptr @.str.5835, i64 33, i64 0 }, %S.ast.Node %t1291) + store { ptr, i64, i64 } %t1289, ptr %a1292 + call void @finch_str_drop(ptr %a1292) + %t1293 = load ptr, ptr %a1 + %t1294 = load { ptr, i64, i64 }, ptr %a1193 + store { ptr, i64, i64 } { ptr @.str.5836, i64 8, i64 0 }, ptr %a1296 + store { ptr, i64, i64 } %t1294, ptr %a1297 + call void @finch_str_concat(ptr %a1295, ptr %a1296, ptr %a1297) + %t1298 = load { ptr, i64, i64 }, ptr %a1295 + store { ptr, i64, i64 } %t1298, ptr %a1300 + store { ptr, i64, i64 } { ptr @.str.5837, i64 2, i64 0 }, ptr %a1301 + call void @finch_str_concat(ptr %a1299, ptr %a1300, ptr %a1301) + store { ptr, i64, i64 } %t1298, ptr %a1302 + call void @finch_str_drop(ptr %a1302) + %t1303 = load { ptr, i64, i64 }, ptr %a1299 + %t1304 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } %t1303, ptr %a1306 + store { ptr, i64, i64 } %t1304, ptr %a1307 + call void @finch_str_concat(ptr %a1305, ptr %a1306, ptr %a1307) + store { ptr, i64, i64 } %t1303, ptr %a1308 + call void @finch_str_drop(ptr %a1308) + %t1309 = load { ptr, i64, i64 }, ptr %a1305 + %t1310 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1293, { ptr, i64, i64 } %t1309) + store { ptr, i64, i64 } %t1309, ptr %a1311 + call void @finch_str_drop(ptr %a1311) + store { ptr, i64, i64 } %t1310, ptr %a1312 + %t1313 = load ptr, ptr %a1 + %t1314 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1313, { ptr, i64, i64 } { ptr @.str.5838, i64 17, i64 0 }) + store { ptr, i64, i64 } %t1314, ptr %a1315 + %t1316 = load ptr, ptr %a1 + %t1317 = load { ptr, i64, i64 }, ptr %a1315 + store { ptr, i64, i64 } { ptr @.str.5839, i64 30, i64 0 }, ptr %a1319 + store { ptr, i64, i64 } %t1317, ptr %a1320 + call void @finch_str_concat(ptr %a1318, ptr %a1319, ptr %a1320) + %t1321 = load { ptr, i64, i64 }, ptr %a1318 + store { ptr, i64, i64 } %t1321, ptr %a1323 + store { ptr, i64, i64 } { ptr @.str.5840, i64 6, i64 0 }, ptr %a1324 + call void @finch_str_concat(ptr %a1322, ptr %a1323, ptr %a1324) + store { ptr, i64, i64 } %t1321, ptr %a1325 + call void @finch_str_drop(ptr %a1325) + %t1326 = load { ptr, i64, i64 }, ptr %a1322 + %t1327 = load { ptr, i64, i64 }, ptr %a1312 + store { ptr, i64, i64 } %t1326, ptr %a1329 + store { ptr, i64, i64 } %t1327, ptr %a1330 + call void @finch_str_concat(ptr %a1328, ptr %a1329, ptr %a1330) + store { ptr, i64, i64 } %t1326, ptr %a1331 + call void @finch_str_drop(ptr %a1331) + %t1332 = load { ptr, i64, i64 }, ptr %a1328 + store { ptr, i64, i64 } %t1332, ptr %a1334 + store { ptr, i64, i64 } { ptr @.str.5841, i64 6, i64 0 }, ptr %a1335 + call void @finch_str_concat(ptr %a1333, ptr %a1334, ptr %a1335) + store { ptr, i64, i64 } %t1332, ptr %a1336 + call void @finch_str_drop(ptr %a1336) + %t1337 = load { ptr, i64, i64 }, ptr %a1333 + %t1338 = load ptr, ptr %a1 + %t1339 = load %S.ast.Type, ptr %a15 + %t1340 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1338, %S.ast.Type %t1339) + store { ptr, i64, i64 } %t1337, ptr %a1342 + store { ptr, i64, i64 } %t1340, ptr %a1343 + call void @finch_str_concat(ptr %a1341, ptr %a1342, ptr %a1343) + store { ptr, i64, i64 } %t1337, ptr %a1344 + call void @finch_str_drop(ptr %a1344) + store { ptr, i64, i64 } %t1340, ptr %a1345 + call void @finch_str_drop(ptr %a1345) + %t1346 = load { ptr, i64, i64 }, ptr %a1341 + store { ptr, i64, i64 } %t1346, ptr %a1348 + store { ptr, i64, i64 } { ptr @.str.5842, i64 1, i64 0 }, ptr %a1349 + call void @finch_str_concat(ptr %a1347, ptr %a1348, ptr %a1349) + store { ptr, i64, i64 } %t1346, ptr %a1350 + call void @finch_str_drop(ptr %a1350) + %t1351 = load { ptr, i64, i64 }, ptr %a1347 + call void @finch.gen.emit(ptr %t1316, { ptr, i64, i64 } %t1351) + store { ptr, i64, i64 } %t1351, ptr %a1352 + call void @finch_str_drop(ptr %a1352) + %t1353 = load ptr, ptr %a1 + %t1354 = load { ptr, i64, i64 }, ptr %a3 + %t1355 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1353, { ptr, i64, i64 } { ptr @.str.5843, i64 3, i64 0 }, { ptr, i64, i64 } %t1354) + store { ptr, i64, i64 } %t1355, ptr %a1356 + %t1357 = load ptr, ptr %a1 + %t1358 = load { ptr, i64, i64 }, ptr %a1315 + %t1359 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1357, { ptr, i64, i64 } { ptr @.str.5844, i64 3, i64 0 }, { ptr, i64, i64 } %t1358) + store { ptr, i64, i64 } %t1359, ptr %a1360 + %t1361 = load ptr, ptr %a1 + %t1362 = load { ptr, i64, i64 }, ptr %a1312 + %t1363 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1361, { ptr, i64, i64 } %t1362) + store { ptr, i64, i64 } %t1363, ptr %a1364 + %t1365 = load ptr, ptr %a1 + %t1366 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5845, i64 23, i64 0 }, ptr %a1368 + store { ptr, i64, i64 } %t1366, ptr %a1369 + call void @finch_str_concat(ptr %a1367, ptr %a1368, ptr %a1369) + %t1370 = load { ptr, i64, i64 }, ptr %a1367 + store { ptr, i64, i64 } %t1370, ptr %a1372 + store { ptr, i64, i64 } { ptr @.str.5846, i64 6, i64 0 }, ptr %a1373 + call void @finch_str_concat(ptr %a1371, ptr %a1372, ptr %a1373) + store { ptr, i64, i64 } %t1370, ptr %a1374 + call void @finch_str_drop(ptr %a1374) + %t1375 = load { ptr, i64, i64 }, ptr %a1371 + %t1376 = load { ptr, i64, i64 }, ptr %a1360 + store { ptr, i64, i64 } %t1375, ptr %a1378 + store { ptr, i64, i64 } %t1376, ptr %a1379 + call void @finch_str_concat(ptr %a1377, ptr %a1378, ptr %a1379) + store { ptr, i64, i64 } %t1375, ptr %a1380 + call void @finch_str_drop(ptr %a1380) + %t1381 = load { ptr, i64, i64 }, ptr %a1377 + store { ptr, i64, i64 } %t1381, ptr %a1383 + store { ptr, i64, i64 } { ptr @.str.5847, i64 6, i64 0 }, ptr %a1384 + call void @finch_str_concat(ptr %a1382, ptr %a1383, ptr %a1384) + store { ptr, i64, i64 } %t1381, ptr %a1385 + call void @finch_str_drop(ptr %a1385) + %t1386 = load { ptr, i64, i64 }, ptr %a1382 + %t1387 = load { ptr, i64, i64 }, ptr %a1364 + %t1388 = extractvalue { ptr, i64, i64 } %t1387, 1 + %t1389 = icmp uge i64 3, %t1388 + br i1 %t1389, label %range8948, label %inrange8949 +range8948: + call void @finch_panic_index(ptr @.str.5848, i64 5541, i64 3, i64 %t1388) + unreachable +inrange8949: + %t1390 = extractvalue { ptr, i64, i64 } %t1387, 0 + %t1391 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1390, i64 3 + %t1392 = load { ptr, i64, i64 }, ptr %t1391 + store { ptr, i64, i64 } %t1386, ptr %a1394 + store { ptr, i64, i64 } %t1392, ptr %a1395 + call void @finch_str_concat(ptr %a1393, ptr %a1394, ptr %a1395) + store { ptr, i64, i64 } %t1386, ptr %a1396 + call void @finch_str_drop(ptr %a1396) + %t1397 = load { ptr, i64, i64 }, ptr %a1393 + %t1398 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1365, { ptr, i64, i64 } %t1397) + store { ptr, i64, i64 } %t1397, ptr %a1399 + call void @finch_str_drop(ptr %a1399) + store { ptr, i64, i64 } %t1398, ptr %a1400 + %t1401 = load ptr, ptr %a1 + %t1402 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5849, i64 23, i64 0 }, ptr %a1404 + store { ptr, i64, i64 } %t1402, ptr %a1405 + call void @finch_str_concat(ptr %a1403, ptr %a1404, ptr %a1405) + %t1406 = load { ptr, i64, i64 }, ptr %a1403 + store { ptr, i64, i64 } %t1406, ptr %a1408 + store { ptr, i64, i64 } { ptr @.str.5850, i64 6, i64 0 }, ptr %a1409 + call void @finch_str_concat(ptr %a1407, ptr %a1408, ptr %a1409) + store { ptr, i64, i64 } %t1406, ptr %a1410 + call void @finch_str_drop(ptr %a1410) + %t1411 = load { ptr, i64, i64 }, ptr %a1407 + %t1412 = load { ptr, i64, i64 }, ptr %a1356 + store { ptr, i64, i64 } %t1411, ptr %a1414 + store { ptr, i64, i64 } %t1412, ptr %a1415 + call void @finch_str_concat(ptr %a1413, ptr %a1414, ptr %a1415) + store { ptr, i64, i64 } %t1411, ptr %a1416 + call void @finch_str_drop(ptr %a1416) + %t1417 = load { ptr, i64, i64 }, ptr %a1413 + store { ptr, i64, i64 } %t1417, ptr %a1419 + store { ptr, i64, i64 } { ptr @.str.5851, i64 6, i64 0 }, ptr %a1420 + call void @finch_str_concat(ptr %a1418, ptr %a1419, ptr %a1420) + store { ptr, i64, i64 } %t1417, ptr %a1421 + call void @finch_str_drop(ptr %a1421) + %t1422 = load { ptr, i64, i64 }, ptr %a1418 + %t1423 = load ptr, ptr %a1 + %t1424 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } { ptr @.str.5852, i64 8, i64 0 }, ptr %a1426 + store { ptr, i64, i64 } %t1424, ptr %a1427 + call void @finch_str_concat(ptr %a1425, ptr %a1426, ptr %a1427) + %t1428 = load { ptr, i64, i64 }, ptr %a1425 + store { ptr, i64, i64 } %t1428, ptr %a1430 + store { ptr, i64, i64 } { ptr @.str.5853, i64 2, i64 0 }, ptr %a1431 + call void @finch_str_concat(ptr %a1429, ptr %a1430, ptr %a1431) + store { ptr, i64, i64 } %t1428, ptr %a1432 + call void @finch_str_drop(ptr %a1432) + %t1433 = load { ptr, i64, i64 }, ptr %a1429 + %t1434 = load { ptr, i64, i64 }, ptr %a1364 + %t1435 = extractvalue { ptr, i64, i64 } %t1434, 1 + %t1436 = icmp uge i64 3, %t1435 + br i1 %t1436, label %range8950, label %inrange8951 +range8950: + call void @finch_panic_index(ptr @.str.5854, i64 5542, i64 3, i64 %t1435) + unreachable +inrange8951: + %t1437 = extractvalue { ptr, i64, i64 } %t1434, 0 + %t1438 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1437, i64 3 + %t1439 = load { ptr, i64, i64 }, ptr %t1438 + store { ptr, i64, i64 } %t1433, ptr %a1441 + store { ptr, i64, i64 } %t1439, ptr %a1442 + call void @finch_str_concat(ptr %a1440, ptr %a1441, ptr %a1442) + store { ptr, i64, i64 } %t1433, ptr %a1443 + call void @finch_str_drop(ptr %a1443) + %t1444 = load { ptr, i64, i64 }, ptr %a1440 + %t1445 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1423, { ptr, i64, i64 } %t1444) + store { ptr, i64, i64 } %t1444, ptr %a1446 + call void @finch_str_drop(ptr %a1446) + store { ptr, i64, i64 } %t1422, ptr %a1448 + store { ptr, i64, i64 } %t1445, ptr %a1449 + call void @finch_str_concat(ptr %a1447, ptr %a1448, ptr %a1449) + store { ptr, i64, i64 } %t1422, ptr %a1450 + call void @finch_str_drop(ptr %a1450) + store { ptr, i64, i64 } %t1445, ptr %a1451 + call void @finch_str_drop(ptr %a1451) + %t1452 = load { ptr, i64, i64 }, ptr %a1447 + %t1453 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1401, { ptr, i64, i64 } %t1452) + store { ptr, i64, i64 } %t1452, ptr %a1454 + call void @finch_str_drop(ptr %a1454) + store { ptr, i64, i64 } %t1453, ptr %a1455 + %t1456 = load ptr, ptr %a1 + %t1457 = load { ptr, i64, i64 }, ptr %a1400 + %t1458 = load { ptr, i64, i64 }, ptr %a1455 + %t1459 = load %S.ast.Type, ptr %a15 + call void @finch.gen.copyAt(ptr %t1456, { ptr, i64, i64 } %t1457, { ptr, i64, i64 } %t1458, %S.ast.Type %t1459) + %t1460 = load ptr, ptr %a1 + %t1461 = load { ptr, i64, i64 }, ptr %a1364 + call void @finch.gen.loopEnd(ptr %t1460, { ptr, i64, i64 } %t1461) + %t1462 = load ptr, ptr %a1 + %t1463 = load { ptr, i64, i64 }, ptr %a1315 + %t1464 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1462, { ptr, i64, i64 } { ptr @.str.5855, i64 17, i64 0 }, { ptr, i64, i64 } %t1463) + %t1465 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1464, 0 + %t1466 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t1466, ptr %a1467 + call void @finch.copy.S_ast_Type(ptr %a1468, ptr %a1467) + %t1469 = load %S.ast.Type, ptr %a1468 + %t1470 = insertvalue %S.gen.Val %t1465, %S.ast.Type %t1469, 1 + %t1471 = insertvalue %S.gen.Val %t1470, i1 true, 2 + call void @finch_str_drop(ptr %a1455) + call void @finch_str_drop(ptr %a1400) + call void @finch.drop.arr_str(ptr %a1364) + call void @finch_str_drop(ptr %a1360) + call void @finch_str_drop(ptr %a1356) + call void @finch_str_drop(ptr %a1315) + call void @finch_str_drop(ptr %a1312) + call void @finch_str_drop(ptr %a1251) + call void @finch_str_drop(ptr %a1231) + call void @finch_str_drop(ptr %a1211) + call void @finch_str_drop(ptr %a1197) + call void @finch_str_drop(ptr %a1193) + call void @finch_str_drop(ptr %a1166) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t1471 +endif8939: + %t1472 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t1472, ptr %a1473 + store { ptr, i64, i64 } { ptr @.str.5856, i64 4, i64 0 }, ptr %a1474 + %t1475 = call i32 @finch_str_eq(ptr %a1473, ptr %a1474) + %t1476 = icmp ne i32 %t1475, 0 + br i1 %t1476, label %then8952, label %endif8954 +then8952: + %t1477 = load ptr, ptr %a1 + %t1478 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t1477, %S.ast.Node %t1478, i64 0) + %t1479 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 + %t1480 = load { ptr, i64, i64 }, ptr %t1479 + store { ptr, i64, i64 } %t1480, ptr %a1481 + call void @finch_str_copy(ptr %a1482, ptr %a1481) + %t1483 = load { ptr, i64, i64 }, ptr %a1482 + store { ptr, i64, i64 } %t1483, ptr %a1484 + %t1485 = load %S.ast.Type, ptr %a15 + %t1486 = call i1 @finch.gen.isNumber(%S.ast.Type %t1485) + %t1487 = xor i1 %t1486, true + br label %logic.from8955 +logic.from8955: + br i1 %t1487, label %logic.rhs8956, label %logic.end8957 +logic.rhs8956: + %t1488 = load { ptr, i64, i64 }, ptr %a1484 + store { ptr, i64, i64 } %t1488, ptr %a1489 + store { ptr, i64, i64 } { ptr @.str.5857, i64 4, i64 0 }, ptr %a1490 + %t1491 = call i32 @finch_str_eq(ptr %a1489, ptr %a1490) + %t1492 = icmp eq i32 %t1491, 0 + br label %logic.rend8958 +logic.rend8958: + br label %logic.end8957 +logic.end8957: + %t1493 = phi i1 [ false, %logic.from8955 ], [ %t1492, %logic.rend8958 ] + br label %logic.from8959 +logic.from8959: + br i1 %t1493, label %logic.rhs8960, label %logic.end8961 +logic.rhs8960: + %t1494 = load { ptr, i64, i64 }, ptr %a1484 + store { ptr, i64, i64 } %t1494, ptr %a1495 + store { ptr, i64, i64 } { ptr @.str.5858, i64 3, i64 0 }, ptr %a1496 + %t1497 = call i32 @finch_str_eq(ptr %a1495, ptr %a1496) + %t1498 = icmp eq i32 %t1497, 0 + br label %logic.rend8962 +logic.rend8962: + br label %logic.end8961 +logic.end8961: + %t1499 = phi i1 [ false, %logic.from8959 ], [ %t1498, %logic.rend8962 ] + br i1 %t1499, label %then8963, label %endif8965 +then8963: + %t1500 = load ptr, ptr %a1 + %t1501 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t1500, %S.ast.Node %t1501, { ptr, i64, i64 } { ptr @.str.5859, i64 47, i64 0 }) + br label %endif8965 +endif8965: + %t1502 = load ptr, ptr %a1 + %t1503 = load %S.ast.Type, ptr %a15 + %t1504 = call { ptr, i64, i64 } @finch.gen.cmpFn(ptr %t1502, %S.ast.Type %t1503) + store { ptr, i64, i64 } %t1504, ptr %a1505 + %t1506 = load ptr, ptr %a1 + %t1507 = load { ptr, i64, i64 }, ptr %a39 + %t1508 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1506, { ptr, i64, i64 } { ptr @.str.5860, i64 3, i64 0 }, { ptr, i64, i64 } %t1507) + store { ptr, i64, i64 } %t1508, ptr %a1509 + %t1510 = load ptr, ptr %a1 + %t1511 = load { ptr, i64, i64 }, ptr %a3 + %t1512 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1510, { ptr, i64, i64 } { ptr @.str.5861, i64 3, i64 0 }, { ptr, i64, i64 } %t1511) + store { ptr, i64, i64 } %t1512, ptr %a1513 + %t1514 = load ptr, ptr %a1 + %t1515 = load { ptr, i64, i64 }, ptr %a1513 + store { ptr, i64, i64 } { ptr @.str.5862, i64 21, i64 0 }, ptr %a1517 + store { ptr, i64, i64 } %t1515, ptr %a1518 + call void @finch_str_concat(ptr %a1516, ptr %a1517, ptr %a1518) + %t1519 = load { ptr, i64, i64 }, ptr %a1516 + store { ptr, i64, i64 } %t1519, ptr %a1521 + store { ptr, i64, i64 } { ptr @.str.5863, i64 6, i64 0 }, ptr %a1522 + call void @finch_str_concat(ptr %a1520, ptr %a1521, ptr %a1522) + store { ptr, i64, i64 } %t1519, ptr %a1523 + call void @finch_str_drop(ptr %a1523) + %t1524 = load { ptr, i64, i64 }, ptr %a1520 + %t1525 = load { ptr, i64, i64 }, ptr %a1509 + store { ptr, i64, i64 } %t1524, ptr %a1527 + store { ptr, i64, i64 } %t1525, ptr %a1528 + call void @finch_str_concat(ptr %a1526, ptr %a1527, ptr %a1528) + store { ptr, i64, i64 } %t1524, ptr %a1529 + call void @finch_str_drop(ptr %a1529) + %t1530 = load { ptr, i64, i64 }, ptr %a1526 + store { ptr, i64, i64 } %t1530, ptr %a1532 + store { ptr, i64, i64 } { ptr @.str.5864, i64 6, i64 0 }, ptr %a1533 + call void @finch_str_concat(ptr %a1531, ptr %a1532, ptr %a1533) + store { ptr, i64, i64 } %t1530, ptr %a1534 + call void @finch_str_drop(ptr %a1534) + %t1535 = load { ptr, i64, i64 }, ptr %a1531 + %t1536 = load ptr, ptr %a1 + %t1537 = load %S.ast.Type, ptr %a15 + %t1538 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1536, %S.ast.Type %t1537) + store { ptr, i64, i64 } %t1535, ptr %a1540 + store { ptr, i64, i64 } %t1538, ptr %a1541 + call void @finch_str_concat(ptr %a1539, ptr %a1540, ptr %a1541) + store { ptr, i64, i64 } %t1535, ptr %a1542 + call void @finch_str_drop(ptr %a1542) + store { ptr, i64, i64 } %t1538, ptr %a1543 + call void @finch_str_drop(ptr %a1543) + %t1544 = load { ptr, i64, i64 }, ptr %a1539 + store { ptr, i64, i64 } %t1544, ptr %a1546 + store { ptr, i64, i64 } { ptr @.str.5865, i64 6, i64 0 }, ptr %a1547 + call void @finch_str_concat(ptr %a1545, ptr %a1546, ptr %a1547) + store { ptr, i64, i64 } %t1544, ptr %a1548 + call void @finch_str_drop(ptr %a1548) + %t1549 = load { ptr, i64, i64 }, ptr %a1545 + %t1550 = load { ptr, i64, i64 }, ptr %a1505 + store { ptr, i64, i64 } %t1549, ptr %a1552 + store { ptr, i64, i64 } %t1550, ptr %a1553 + call void @finch_str_concat(ptr %a1551, ptr %a1552, ptr %a1553) + store { ptr, i64, i64 } %t1549, ptr %a1554 + call void @finch_str_drop(ptr %a1554) + %t1555 = load { ptr, i64, i64 }, ptr %a1551 + store { ptr, i64, i64 } %t1555, ptr %a1557 + store { ptr, i64, i64 } { ptr @.str.5866, i64 1, i64 0 }, ptr %a1558 + call void @finch_str_concat(ptr %a1556, ptr %a1557, ptr %a1558) + store { ptr, i64, i64 } %t1555, ptr %a1559 + call void @finch_str_drop(ptr %a1559) + %t1560 = load { ptr, i64, i64 }, ptr %a1556 + call void @finch.gen.emit(ptr %t1514, { ptr, i64, i64 } %t1560) + store { ptr, i64, i64 } %t1560, ptr %a1561 + call void @finch_str_drop(ptr %a1561) + %t1562 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5867, i64 4, i64 0 }) + %t1563 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1562, 1 + call void @finch_str_drop(ptr %a1513) + call void @finch_str_drop(ptr %a1509) + call void @finch_str_drop(ptr %a1505) + call void @finch_str_drop(ptr %a1484) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t1563 +endif8954: + %t1564 = load ptr, ptr %a1 + %t1565 = load %S.ast.Node, ptr %a2 + %t1566 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.5868, i64 24, i64 0 }, ptr %a1568 + store { ptr, i64, i64 } %t1566, ptr %a1569 + call void @finch_str_concat(ptr %a1567, ptr %a1568, ptr %a1569) + %t1570 = load { ptr, i64, i64 }, ptr %a1567 + store { ptr, i64, i64 } %t1570, ptr %a1572 + store { ptr, i64, i64 } { ptr @.str.5869, i64 96, i64 0 }, ptr %a1573 + call void @finch_str_concat(ptr %a1571, ptr %a1572, ptr %a1573) + store { ptr, i64, i64 } %t1570, ptr %a1574 + call void @finch_str_drop(ptr %a1574) + %t1575 = load { ptr, i64, i64 }, ptr %a1571 + call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1575) + store { ptr, i64, i64 } %t1575, ptr %a1576 + call void @finch_str_drop(ptr %a1576) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val zeroinitializer +} + +define internal void @finch.gen.dropFrom(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca %S.ast.Type, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a15 = alloca %S.ast.Type, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range8966, label %inrange8967 +range8966: + call void @finch_panic_index(ptr @.str.5870, i64 5565, i64 0, i64 %t7) + unreachable +inrange8967: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 + %t11 = load %S.ast.Type, ptr %t10 + store %S.ast.Type %t11, ptr %a12 + call void @finch.copy.S_ast_Type(ptr %a13, ptr %a12) + %t14 = load %S.ast.Type, ptr %a13 + store %S.ast.Type %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Type, ptr %a15 + %t18 = call i1 @finch.gen.owning(ptr %t16, %S.ast.Type %t17) + %t19 = xor i1 %t18, true + br i1 %t19, label %then8968, label %endif8970 +then8968: + call void @finch.drop.S_ast_Type(ptr %a15) + ret void +endif8970: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Type, ptr %a15 + %t22 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t20, %S.ast.Type %t21) + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = load ptr, ptr %a1 + %t26 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.5872, i64 46, i64 0 }, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.5873, i64 14, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + %t36 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t35) + store { ptr, i64, i64 } %t35, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = call { ptr, i64, i64 } @finch.gen.load(ptr %t24, { ptr, i64, i64 } { ptr @.str.5871, i64 3, i64 0 }, { ptr, i64, i64 } %t36) + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_drop(ptr %a39) + store { ptr, i64, i64 } %t38, ptr %a40 + %t41 = load ptr, ptr %a1 + %t42 = load { ptr, i64, i64 }, ptr %a2 + %t43 = call { ptr, i64, i64 } @finch.gen.load(ptr %t41, { ptr, i64, i64 } { ptr @.str.5874, i64 3, i64 0 }, { ptr, i64, i64 } %t42) + store { ptr, i64, i64 } %t43, ptr %a44 + %t45 = load ptr, ptr %a1 + %t46 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.5875, i64 13, i64 0 }, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.5876, i64 2, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t55, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t45, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t61, ptr %a63 + call void @finch_str_drop(ptr %a63) + store { ptr, i64, i64 } %t62, ptr %a64 + %t65 = load ptr, ptr %a1 + %t66 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.5877, i64 13, i64 0 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.5878, i64 3, i64 0 }, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t70, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + %t76 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t75) + store { ptr, i64, i64 } %t75, ptr %a77 + call void @finch_str_drop(ptr %a77) + store { ptr, i64, i64 } %t76, ptr %a78 + %t79 = load ptr, ptr %a1 + %t80 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.5879, i64 10, i64 0 }, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t84, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.5880, i64 6, i64 0 }, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + %t90 = load ptr, ptr %a1 + %t91 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.5881, i64 10, i64 0 }, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t95, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.5882, i64 13, i64 0 }, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + %t101 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t100, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t100, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + %t107 = call { ptr, i64, i64 } @finch.gen.op(ptr %t90, { ptr, i64, i64 } %t106) + store { ptr, i64, i64 } %t106, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t89, ptr %a110 + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t89, ptr %a112 + call void @finch_str_drop(ptr %a112) + store { ptr, i64, i64 } %t107, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.5883, i64 6, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t119, ptr %a122 + store { ptr, i64, i64 } %t120, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t119, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + %t126 = call { ptr, i64, i64 } @finch.gen.op(ptr %t79, { ptr, i64, i64 } %t125) + store { ptr, i64, i64 } %t125, ptr %a127 + call void @finch_str_drop(ptr %a127) + store { ptr, i64, i64 } %t126, ptr %a128 + %t129 = load ptr, ptr %a1 + %t130 = load ptr, ptr %a1 + %t131 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.5884, i64 8, i64 0 }, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t135, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.5885, i64 2, i64 0 }, ptr %a138 + call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) + store { ptr, i64, i64 } %t135, ptr %a139 + call void @finch_str_drop(ptr %a139) + %t140 = load { ptr, i64, i64 }, ptr %a136 + %t141 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t140, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t140, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + %t147 = call { ptr, i64, i64 } @finch.gen.op(ptr %t130, { ptr, i64, i64 } %t146) + store { ptr, i64, i64 } %t146, ptr %a148 + call void @finch_str_drop(ptr %a148) + %t149 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t129, { ptr, i64, i64 } %t147) + store { ptr, i64, i64 } %t147, ptr %a150 + call void @finch_str_drop(ptr %a150) + store { ptr, i64, i64 } %t149, ptr %a151 + %t152 = load ptr, ptr %a1 + %t153 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.5886, i64 23, i64 0 }, ptr %a155 + store { ptr, i64, i64 } %t153, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a154 + store { ptr, i64, i64 } %t157, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.5887, i64 6, i64 0 }, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t157, ptr %a161 + call void @finch_str_drop(ptr %a161) + %t162 = load { ptr, i64, i64 }, ptr %a158 + %t163 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t162, ptr %a165 + store { ptr, i64, i64 } %t163, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t162, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + store { ptr, i64, i64 } %t168, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.5888, i64 6, i64 0 }, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t168, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a169 + %t174 = load ptr, ptr %a1 + %t175 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.5889, i64 8, i64 0 }, ptr %a177 + store { ptr, i64, i64 } %t175, ptr %a178 + call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a176 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.5890, i64 2, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + store { ptr, i64, i64 } %t179, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a180 + %t185 = load { ptr, i64, i64 }, ptr %a151 + %t186 = extractvalue { ptr, i64, i64 } %t185, 1 + %t187 = icmp uge i64 3, %t186 + br i1 %t187, label %range8971, label %inrange8972 +range8971: + call void @finch_panic_index(ptr @.str.5891, i64 5576, i64 3, i64 %t186) + unreachable +inrange8972: + %t188 = extractvalue { ptr, i64, i64 } %t185, 0 + %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i64 3 + %t190 = load { ptr, i64, i64 }, ptr %t189 + store { ptr, i64, i64 } %t184, ptr %a192 + store { ptr, i64, i64 } %t190, ptr %a193 + call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) + store { ptr, i64, i64 } %t184, ptr %a194 + call void @finch_str_drop(ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a191 + %t196 = call { ptr, i64, i64 } @finch.gen.op(ptr %t174, { ptr, i64, i64 } %t195) + store { ptr, i64, i64 } %t195, ptr %a197 + call void @finch_str_drop(ptr %a197) + store { ptr, i64, i64 } %t173, ptr %a199 + store { ptr, i64, i64 } %t196, ptr %a200 + call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) + store { ptr, i64, i64 } %t173, ptr %a201 + call void @finch_str_drop(ptr %a201) + store { ptr, i64, i64 } %t196, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a198 + %t204 = call { ptr, i64, i64 } @finch.gen.op(ptr %t152, { ptr, i64, i64 } %t203) + store { ptr, i64, i64 } %t203, ptr %a205 + call void @finch_str_drop(ptr %a205) + store { ptr, i64, i64 } %t204, ptr %a206 + %t207 = load ptr, ptr %a1 + %t208 = load { ptr, i64, i64 }, ptr %a206 + %t209 = load %S.ast.Type, ptr %a15 + call void @finch.gen.dropAt(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t209) + %t210 = load ptr, ptr %a1 + %t211 = load { ptr, i64, i64 }, ptr %a151 + call void @finch.gen.loopEnd(ptr %t210, { ptr, i64, i64 } %t211) + call void @finch_str_drop(ptr %a206) + call void @finch.drop.arr_str(ptr %a151) + call void @finch_str_drop(ptr %a128) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a64) + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a40) + call void @finch_str_drop(ptr %a23) + call void @finch.drop.S_ast_Type(ptr %a15) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.cmpFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.5892, i64 11, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic8973, label %ok8974 +panic8973: + call void @finch_panic(ptr @.str.5893, i64 5584, ptr @.str.5894) + unreachable +ok8974: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then8975, label %endif8977 +then8975: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif8977: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic8978, label %ok8979 +panic8978: + call void @finch_panic(ptr @.str.5895, i64 5587, ptr @.str.5896) + unreachable +ok8979: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.5897, i64 0, i64 0 }, ptr %a33 + %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.5898, i64 3, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br i1 %t39, label %then8980, label %else8981 +then8980: + %t40 = load ptr, ptr %a1 + %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t40, { ptr, i64, i64 } { ptr @.str.5899, i64 39, i64 0 }) + store { ptr, i64, i64 } %t41, ptr %a42 + %t43 = load ptr, ptr %a1 + %t44 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.5900, i64 10, i64 0 }, ptr %a46 + store { ptr, i64, i64 } %t44, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.5901, i64 7, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = call { ptr, i64, i64 } @finch.gen.op(ptr %t43, { ptr, i64, i64 } %t53) + store { ptr, i64, i64 } %t53, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t54, ptr %a33 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_drop(ptr %a57) + call void @finch_str_drop(ptr %a42) + br label %endif8982 +else8981: + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Type, ptr %a2 + %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) + store { ptr, i64, i64 } %t60, ptr %a61 + %t62 = load ptr, ptr %a1 + %t63 = load { ptr, i64, i64 }, ptr %a61 + %t64 = call { ptr, i64, i64 } @finch.gen.load(ptr %t62, { ptr, i64, i64 } %t63, { ptr, i64, i64 } { ptr @.str.5902, i64 2, i64 0 }) + store { ptr, i64, i64 } %t64, ptr %a65 + %t66 = load ptr, ptr %a1 + %t67 = load { ptr, i64, i64 }, ptr %a61 + %t68 = call { ptr, i64, i64 } @finch.gen.load(ptr %t66, { ptr, i64, i64 } %t67, { ptr, i64, i64 } { ptr @.str.5903, i64 2, i64 0 }) + store { ptr, i64, i64 } %t68, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.5904, i64 0, i64 0 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.5905, i64 0, i64 0 }, ptr %a71 + %t72 = load %S.ast.Type, ptr %a2 + %t73 = call i1 @finch.gen.isFloat(%S.ast.Type %t72) + br i1 %t73, label %then8983, label %else8984 +then8983: + %t74 = load ptr, ptr %a1 + %t75 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.5906, i64 9, i64 0 }, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.5907, i64 1, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + %t85 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t84, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t84, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t90, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.5908, i64 2, i64 0 }, ptr %a93 + call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) + store { ptr, i64, i64 } %t90, ptr %a94 + call void @finch_str_drop(ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a91 + %t96 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t95, ptr %a98 + store { ptr, i64, i64 } %t96, ptr %a99 + call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) + store { ptr, i64, i64 } %t95, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a97 + %t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t74, { ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t101, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t102, ptr %a70 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load ptr, ptr %a1 + %t107 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.5909, i64 9, i64 0 }, ptr %a109 + store { ptr, i64, i64 } %t107, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t111, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.5910, i64 1, i64 0 }, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t111, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a112 + %t117 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t116, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t116, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t122, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.5911, i64 2, i64 0 }, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + store { ptr, i64, i64 } %t122, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a123 + %t128 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t127, ptr %a130 + store { ptr, i64, i64 } %t128, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + store { ptr, i64, i64 } %t127, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a129 + %t134 = call { ptr, i64, i64 } @finch.gen.op(ptr %t106, { ptr, i64, i64 } %t133) + store { ptr, i64, i64 } %t133, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t134, ptr %a71 + store { ptr, i64, i64 } %t136, ptr %a137 + call void @finch_str_drop(ptr %a137) + br label %endif8985 +else8984: + %t138 = load ptr, ptr %a1 + %t139 = load %S.ast.Type, ptr %a2 + %t140 = call i1 @finch.gen.isSigned(%S.ast.Type %t139) + %t141 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5913, i64 1, i64 0 }, i1 %t140) + store { ptr, i64, i64 } { ptr @.str.5912, i64 5, i64 0 }, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.5914, i64 1, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t151, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t151, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + store { ptr, i64, i64 } %t157, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.5915, i64 1, i64 0 }, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t157, ptr %a161 + call void @finch_str_drop(ptr %a161) + %t162 = load { ptr, i64, i64 }, ptr %a158 + %t163 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t162, ptr %a165 + store { ptr, i64, i64 } %t163, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t162, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + store { ptr, i64, i64 } %t168, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.5916, i64 2, i64 0 }, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t168, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a169 + %t174 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t173, ptr %a176 + store { ptr, i64, i64 } %t174, ptr %a177 + call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) + store { ptr, i64, i64 } %t173, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a175 + %t180 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t179) + store { ptr, i64, i64 } %t179, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t180, ptr %a70 + store { ptr, i64, i64 } %t182, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load ptr, ptr %a1 + %t185 = load %S.ast.Type, ptr %a2 + %t186 = call i1 @finch.gen.isSigned(%S.ast.Type %t185) + %t187 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5918, i64 1, i64 0 }, i1 %t186) + store { ptr, i64, i64 } { ptr @.str.5917, i64 5, i64 0 }, ptr %a189 + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.5919, i64 1, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load { ptr, i64, i64 }, ptr %a193 + %t198 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t197, ptr %a200 + store { ptr, i64, i64 } %t198, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + store { ptr, i64, i64 } %t197, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t203, ptr %a205 + store { ptr, i64, i64 } { ptr @.str.5920, i64 1, i64 0 }, ptr %a206 + call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) + store { ptr, i64, i64 } %t203, ptr %a207 + call void @finch_str_drop(ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a204 + %t209 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t208, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t208, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } %t214, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.5921, i64 2, i64 0 }, ptr %a217 + call void @finch_str_concat(ptr %a215, ptr %a216, ptr %a217) + store { ptr, i64, i64 } %t214, ptr %a218 + call void @finch_str_drop(ptr %a218) + %t219 = load { ptr, i64, i64 }, ptr %a215 + %t220 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t219, ptr %a222 + store { ptr, i64, i64 } %t220, ptr %a223 + call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) + store { ptr, i64, i64 } %t219, ptr %a224 + call void @finch_str_drop(ptr %a224) + %t225 = load { ptr, i64, i64 }, ptr %a221 + %t226 = call { ptr, i64, i64 } @finch.gen.op(ptr %t184, { ptr, i64, i64 } %t225) + store { ptr, i64, i64 } %t225, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t226, ptr %a71 + store { ptr, i64, i64 } %t228, ptr %a229 + call void @finch_str_drop(ptr %a229) + br label %endif8985 +endif8985: + %t230 = load ptr, ptr %a1 + %t231 = load ptr, ptr %a1 + %t232 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.5923, i64 8, i64 0 }, ptr %a234 + store { ptr, i64, i64 } %t232, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a233 + store { ptr, i64, i64 } %t236, ptr %a238 + store { ptr, i64, i64 } { ptr @.str.5924, i64 7, i64 0 }, ptr %a239 + call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) + store { ptr, i64, i64 } %t236, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = load { ptr, i64, i64 }, ptr %a237 + %t242 = call { ptr, i64, i64 } @finch.gen.op(ptr %t231, { ptr, i64, i64 } %t241) + store { ptr, i64, i64 } %t241, ptr %a243 + call void @finch_str_drop(ptr %a243) + store { ptr, i64, i64 } { ptr @.str.5922, i64 8, i64 0 }, ptr %a245 + store { ptr, i64, i64 } %t242, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t242, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + store { ptr, i64, i64 } %t248, ptr %a250 + store { ptr, i64, i64 } { ptr @.str.5925, i64 2, i64 0 }, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t248, ptr %a252 + call void @finch_str_drop(ptr %a252) + %t253 = load { ptr, i64, i64 }, ptr %a249 + %t254 = load ptr, ptr %a1 + %t255 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.5926, i64 8, i64 0 }, ptr %a257 + store { ptr, i64, i64 } %t255, ptr %a258 + call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) + %t259 = load { ptr, i64, i64 }, ptr %a256 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.5927, i64 7, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + store { ptr, i64, i64 } %t259, ptr %a263 + call void @finch_str_drop(ptr %a263) + %t264 = load { ptr, i64, i64 }, ptr %a260 + %t265 = call { ptr, i64, i64 } @finch.gen.op(ptr %t254, { ptr, i64, i64 } %t264) + store { ptr, i64, i64 } %t264, ptr %a266 + call void @finch_str_drop(ptr %a266) + store { ptr, i64, i64 } %t253, ptr %a268 + store { ptr, i64, i64 } %t265, ptr %a269 + call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) + store { ptr, i64, i64 } %t253, ptr %a270 + call void @finch_str_drop(ptr %a270) + store { ptr, i64, i64 } %t265, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load { ptr, i64, i64 }, ptr %a267 + %t273 = call { ptr, i64, i64 } @finch.gen.op(ptr %t230, { ptr, i64, i64 } %t272) + store { ptr, i64, i64 } %t272, ptr %a274 + call void @finch_str_drop(ptr %a274) + %t275 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t273, ptr %a33 + store { ptr, i64, i64 } %t275, ptr %a276 + call void @finch_str_drop(ptr %a276) + call void @finch_str_drop(ptr %a71) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a69) + call void @finch_str_drop(ptr %a65) + call void @finch_str_drop(ptr %a61) + br label %endif8982 +endif8982: + %t277 = load ptr, ptr %a1 + %t278 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.5928, i64 8, i64 0 }, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + %t282 = load { ptr, i64, i64 }, ptr %a279 + call void @finch.gen.emit(ptr %t277, { ptr, i64, i64 } %t282) + store { ptr, i64, i64 } %t282, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load ptr, ptr %a1 + %t285 = load %S.gen.Saved, ptr %a32 + %t286 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.5929, i64 20, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t290, ptr %a292 + store { ptr, i64, i64 } { ptr @.str.5930, i64 16, i64 0 }, ptr %a293 + call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293) + store { ptr, i64, i64 } %t290, ptr %a294 + call void @finch_str_drop(ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a291 + call void @finch.gen.endHelper(ptr %t284, %S.gen.Saved %t285, { ptr, i64, i64 } %t295) + store { ptr, i64, i64 } %t295, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a10 + call void @finch_str_drop(ptr %a33) + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t297 +} + +define internal %S.gen.Val @finch.gen.strMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca %S.gen.Val, align 16 + %a54 = alloca %S.ast.Type, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca %S.gen.Val, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca %S.gen.Val, align 16 + %a81 = alloca %S.ast.Type, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca %S.gen.Val, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca %S.gen.Val, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca %S.gen.Val, align 16 + %a446 = alloca i64, align 16 + %a458 = alloca %S.gen.Val, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca %S.gen.Val, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca %S.ast.Type, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca %S.gen.Val, align 16 + %a621 = alloca %S.ast.Type, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca %S.gen.Val, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a634 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a645 = alloca { ptr, i64, i64 }, align 16 + %a646 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a648 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a653 = alloca { ptr, i64, i64 }, align 16 + %a654 = alloca { ptr, i64, i64 }, align 16 + %a656 = alloca { ptr, i64, i64 }, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a686 = alloca { ptr, i64, i64 }, align 16 + %a687 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a697 = alloca { ptr, i64, i64 }, align 16 + %a698 = alloca { ptr, i64, i64 }, align 16 + %a699 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca %S.ast.Type, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a716 = alloca { ptr, i64, i64 }, align 16 + %a718 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + call void @finch_str_copy(ptr %a7, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load ptr, ptr %a1 + %t11 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t10) + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic8986, label %ok8987 +panic8986: + call void @finch_panic(ptr @.str.5931, i64 5616, ptr @.str.5932) + unreachable +ok8987: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 1 + %t17 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t18 = load i64, ptr %t17 + %t19 = load { ptr, i64, i64 }, ptr %t16 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range8988, label %inrange8989 +range8988: + call void @finch_panic_index(ptr @.str.5933, i64 5616, i64 %t18, i64 %t20) + unreachable +inrange8989: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 + %t24 = load { ptr, i64, i64 }, ptr %t23 + %t25 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t13, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.5934, i64 3, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %then8990, label %endif8992 +then8990: + %t32 = load ptr, ptr %a1 + %t33 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t32, %S.ast.Node %t33, i64 2) + %t34 = load ptr, ptr %a1 + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 1, %t38 + br i1 %t39, label %range8993, label %inrange8994 +range8993: + call void @finch_panic_index(ptr @.str.5935, i64 5619, i64 1, i64 %t38) + unreachable +inrange8994: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 + %t42 = load %S.ast.Node, ptr %t41 + %t43 = call %S.gen.Val @finch.gen.expr(ptr %t35, %S.ast.Node %t42) + %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5936, i64 3, i64 0 }) + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range8995, label %inrange8996 +range8995: + call void @finch_panic_index(ptr @.str.5937, i64 5619, i64 1, i64 %t47) + unreachable +inrange8996: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 + %t51 = load %S.ast.Node, ptr %t50 + %t52 = call %S.gen.Val @finch.gen.coerce(ptr %t34, %S.gen.Val %t43, %S.ast.Type %t44, %S.ast.Node %t51, { ptr, i64, i64 } { ptr @.str.5938, i64 9, i64 0 }) + store %S.gen.Val %t43, ptr %a53 + call void @finch.drop.S_gen_Val(ptr %a53) + store %S.ast.Type %t44, ptr %a54 + call void @finch.drop.S_ast_Type(ptr %a54) + %t55 = extractvalue %S.gen.Val %t52, 0 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_copy(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + store %S.gen.Val %t52, ptr %a59 + call void @finch.drop.S_gen_Val(ptr %a59) + store { ptr, i64, i64 } %t58, ptr %a60 + %t61 = load ptr, ptr %a1 + %t62 = load ptr, ptr %a1 + %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = extractvalue { ptr, i64, i64 } %t64, 1 + %t66 = icmp uge i64 2, %t65 + br i1 %t66, label %range8997, label %inrange8998 +range8997: + call void @finch_panic_index(ptr @.str.5939, i64 5620, i64 2, i64 %t65) + unreachable +inrange8998: + %t67 = extractvalue { ptr, i64, i64 } %t64, 0 + %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 2 + %t69 = load %S.ast.Node, ptr %t68 + %t70 = call %S.gen.Val @finch.gen.expr(ptr %t62, %S.ast.Node %t69) + %t71 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5940, i64 3, i64 0 }) + %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 2, %t74 + br i1 %t75, label %range8999, label %inrange9000 +range8999: + call void @finch_panic_index(ptr @.str.5941, i64 5620, i64 2, i64 %t74) + unreachable +inrange9000: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 2 + %t78 = load %S.ast.Node, ptr %t77 + %t79 = call %S.gen.Val @finch.gen.coerce(ptr %t61, %S.gen.Val %t70, %S.ast.Type %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5942, i64 7, i64 0 }) + store %S.gen.Val %t70, ptr %a80 + call void @finch.drop.S_gen_Val(ptr %a80) + store %S.ast.Type %t71, ptr %a81 + call void @finch.drop.S_ast_Type(ptr %a81) + %t82 = extractvalue %S.gen.Val %t79, 0 + store { ptr, i64, i64 } %t82, ptr %a83 + call void @finch_str_copy(ptr %a84, ptr %a83) + %t85 = load { ptr, i64, i64 }, ptr %a84 + store %S.gen.Val %t79, ptr %a86 + call void @finch.drop.S_gen_Val(ptr %a86) + store { ptr, i64, i64 } %t85, ptr %a87 + %t88 = load ptr, ptr %a1 + %t89 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.5943, i64 29, i64 0 }, ptr %a91 + store { ptr, i64, i64 } %t89, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.5944, i64 6, i64 0 }, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + %t99 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t98, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t98, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.5945, i64 6, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t109, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t109, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + store { ptr, i64, i64 } %t115, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.5946, i64 6, i64 0 }, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t115, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a116 + %t121 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t120, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t120, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t126, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.5947, i64 6, i64 0 }, ptr %a129 + call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) + store { ptr, i64, i64 } %t126, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load { ptr, i64, i64 }, ptr %a127 + %t132 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t131, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t131, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.5948, i64 6, i64 0 }, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t137, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t144 = load i64, ptr %t143 + call void @finch_str_from_int(ptr %a145, i64 %t144) + %t146 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t142, ptr %a148 + store { ptr, i64, i64 } %t146, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t142, ptr %a150 + call void @finch_str_drop(ptr %a150) + store { ptr, i64, i64 } %t146, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a147 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.5949, i64 1, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } %t157) + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load ptr, ptr %a1 + %t160 = load { ptr, i64, i64 }, ptr %a12 + %t161 = call { ptr, i64, i64 } @finch.gen.load(ptr %t159, { ptr, i64, i64 } { ptr @.str.5950, i64 17, i64 0 }, { ptr, i64, i64 } %t160) + %t162 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t161, 0 + %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5951, i64 3, i64 0 }) + %t164 = insertvalue %S.gen.Val %t162, %S.ast.Type %t163, 1 + %t165 = insertvalue %S.gen.Val %t164, i1 true, 2 + call void @finch_str_drop(ptr %a87) + call void @finch_str_drop(ptr %a60) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t165 +endif8992: + %t166 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.5952, i64 4, i64 0 }, ptr %a168 + %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) + %t170 = icmp ne i32 %t169, 0 + br label %logic.from9001 +logic.from9001: + br i1 %t170, label %logic.end9003, label %logic.rhs9002 +logic.rhs9002: + %t171 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.5953, i64 8, i64 0 }, ptr %a173 + %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) + %t175 = icmp ne i32 %t174, 0 + br label %logic.rend9004 +logic.rend9004: + br label %logic.end9003 +logic.end9003: + %t176 = phi i1 [ true, %logic.from9001 ], [ %t175, %logic.rend9004 ] + br label %logic.from9005 +logic.from9005: + br i1 %t176, label %logic.end9007, label %logic.rhs9006 +logic.rhs9006: + %t177 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t177, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.5954, i64 11, i64 0 }, ptr %a179 + %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) + %t181 = icmp ne i32 %t180, 0 + br label %logic.rend9008 +logic.rend9008: + br label %logic.end9007 +logic.end9007: + %t182 = phi i1 [ true, %logic.from9005 ], [ %t181, %logic.rend9008 ] + br label %logic.from9009 +logic.from9009: + br i1 %t182, label %logic.end9011, label %logic.rhs9010 +logic.rhs9010: + %t183 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t183, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.5955, i64 9, i64 0 }, ptr %a185 + %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) + %t187 = icmp ne i32 %t186, 0 + br label %logic.rend9012 +logic.rend9012: + br label %logic.end9011 +logic.end9011: + %t188 = phi i1 [ true, %logic.from9009 ], [ %t187, %logic.rend9012 ] + br i1 %t188, label %then9013, label %endif9015 +then9013: + %t189 = load ptr, ptr %a1 + %t190 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t189, %S.ast.Node %t190, i64 1) + %t191 = load ptr, ptr %a1 + %t192 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t193 = load { ptr, i64, i64 }, ptr %t192 + %t194 = extractvalue { ptr, i64, i64 } %t193, 1 + %t195 = icmp uge i64 1, %t194 + br i1 %t195, label %range9016, label %inrange9017 +range9016: + call void @finch_panic_index(ptr @.str.5956, i64 5626, i64 1, i64 %t194) + unreachable +inrange9017: + %t196 = extractvalue { ptr, i64, i64 } %t193, 0 + %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 1 + %t198 = load %S.ast.Node, ptr %t197 + %t199 = call %S.gen.Val @finch.gen.strArg(ptr %t191, %S.ast.Node %t198, { ptr, i64, i64 } { ptr @.str.5957, i64 20, i64 0 }) + store %S.gen.Val %t199, ptr %a200 + %t201 = load ptr, ptr %a1 + %t202 = load %S.gen.Val, ptr %a200 + %t203 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t201, %S.gen.Val %t202) + store { ptr, i64, i64 } %t203, ptr %a204 + %t205 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t205, ptr %a206 + store { ptr, i64, i64 } { ptr @.str.5958, i64 4, i64 0 }, ptr %a207 + %t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207) + %t209 = icmp ne i32 %t208, 0 + br i1 %t209, label %then9018, label %endif9020 +then9018: + %t210 = load ptr, ptr %a1 + %t211 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5959, i64 29, i64 0 }, ptr %a213 + store { ptr, i64, i64 } %t211, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.5960, i64 6, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load { ptr, i64, i64 }, ptr %a216 + %t221 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t220, ptr %a223 + store { ptr, i64, i64 } %t221, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t220, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load { ptr, i64, i64 }, ptr %a222 + store { ptr, i64, i64 } %t226, ptr %a228 + store { ptr, i64, i64 } { ptr @.str.5961, i64 1, i64 0 }, ptr %a229 + call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) + store { ptr, i64, i64 } %t226, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a227 + %t232 = call { ptr, i64, i64 } @finch.gen.op(ptr %t210, { ptr, i64, i64 } %t231) + store { ptr, i64, i64 } %t231, ptr %a233 + call void @finch_str_drop(ptr %a233) + store { ptr, i64, i64 } %t232, ptr %a234 + %t235 = load ptr, ptr %a1 + %t236 = load %S.gen.Val, ptr %a200 + call void @finch.gen.release(ptr %t235, %S.gen.Val %t236) + %t237 = load { ptr, i64, i64 }, ptr %a234 + store { ptr, i64, i64 } %t237, ptr %a238 + call void @finch_str_copy(ptr %a239, ptr %a238) + %t240 = load { ptr, i64, i64 }, ptr %a239 + %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t240, 0 + %t242 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5962, i64 3, i64 0 }) + %t243 = insertvalue %S.gen.Val %t241, %S.ast.Type %t242, 1 + call void @finch_str_drop(ptr %a234) + call void @finch_str_drop(ptr %a204) + call void @finch.drop.S_gen_Val(ptr %a200) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t243 +endif9020: + %t244 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t244, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.5963, i64 8, i64 0 }, ptr %a246 + %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) + %t248 = icmp ne i32 %t247, 0 + br i1 %t248, label %then9021, label %endif9023 +then9021: + %t249 = load ptr, ptr %a1 + %t250 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5964, i64 29, i64 0 }, ptr %a252 + store { ptr, i64, i64 } %t250, ptr %a253 + call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a251 + store { ptr, i64, i64 } %t254, ptr %a256 + store { ptr, i64, i64 } { ptr @.str.5965, i64 6, i64 0 }, ptr %a257 + call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) + store { ptr, i64, i64 } %t254, ptr %a258 + call void @finch_str_drop(ptr %a258) + %t259 = load { ptr, i64, i64 }, ptr %a255 + %t260 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t259, ptr %a262 + store { ptr, i64, i64 } %t260, ptr %a263 + call void @finch_str_concat(ptr %a261, ptr %a262, ptr %a263) + store { ptr, i64, i64 } %t259, ptr %a264 + call void @finch_str_drop(ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a261 + store { ptr, i64, i64 } %t265, ptr %a267 + store { ptr, i64, i64 } { ptr @.str.5966, i64 1, i64 0 }, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t265, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + %t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t249, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a272 + call void @finch_str_drop(ptr %a272) + store { ptr, i64, i64 } %t271, ptr %a273 + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.5967, i64 13, i64 0 }, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t279, ptr %a281 + store { ptr, i64, i64 } { ptr @.str.5968, i64 3, i64 0 }, ptr %a282 + call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) + store { ptr, i64, i64 } %t279, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a280 + %t285 = call { ptr, i64, i64 } @finch.gen.op(ptr %t274, { ptr, i64, i64 } %t284) + store { ptr, i64, i64 } %t284, ptr %a286 + call void @finch_str_drop(ptr %a286) + store { ptr, i64, i64 } %t285, ptr %a287 + %t288 = load ptr, ptr %a1 + %t289 = load %S.gen.Val, ptr %a200 + call void @finch.gen.release(ptr %t288, %S.gen.Val %t289) + %t290 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_copy(ptr %a292, ptr %a291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + %t294 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t293, 0 + %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5969, i64 4, i64 0 }) + %t296 = insertvalue %S.gen.Val %t294, %S.ast.Type %t295, 1 + call void @finch_str_drop(ptr %a287) + call void @finch_str_drop(ptr %a273) + call void @finch_str_drop(ptr %a204) + call void @finch.drop.S_gen_Val(ptr %a200) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t296 +endif9023: + store { ptr, i64, i64 } { ptr @.str.5970, i64 17, i64 0 }, ptr %a297 + %t298 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t298, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.5971, i64 9, i64 0 }, ptr %a300 + %t301 = call i32 @finch_str_eq(ptr %a299, ptr %a300) + %t302 = icmp ne i32 %t301, 0 + br i1 %t302, label %then9024, label %endif9026 +then9024: + %t303 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.5972, i64 15, i64 0 }, ptr %a297 + store { ptr, i64, i64 } %t303, ptr %a304 + call void @finch_str_drop(ptr %a304) + br label %endif9026 +endif9026: + %t305 = load ptr, ptr %a1 + %t306 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.5973, i64 9, i64 0 }, ptr %a308 + store { ptr, i64, i64 } %t306, ptr %a309 + call void @finch_str_concat(ptr %a307, ptr %a308, ptr %a309) + %t310 = load { ptr, i64, i64 }, ptr %a307 + store { ptr, i64, i64 } %t310, ptr %a312 + store { ptr, i64, i64 } { ptr @.str.5974, i64 5, i64 0 }, ptr %a313 + call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) + store { ptr, i64, i64 } %t310, ptr %a314 + call void @finch_str_drop(ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a311 + %t316 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t315, ptr %a318 + store { ptr, i64, i64 } %t316, ptr %a319 + call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) + store { ptr, i64, i64 } %t315, ptr %a320 + call void @finch_str_drop(ptr %a320) + %t321 = load { ptr, i64, i64 }, ptr %a317 + store { ptr, i64, i64 } %t321, ptr %a323 + store { ptr, i64, i64 } { ptr @.str.5975, i64 6, i64 0 }, ptr %a324 + call void @finch_str_concat(ptr %a322, ptr %a323, ptr %a324) + store { ptr, i64, i64 } %t321, ptr %a325 + call void @finch_str_drop(ptr %a325) + %t326 = load { ptr, i64, i64 }, ptr %a322 + %t327 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t326, ptr %a329 + store { ptr, i64, i64 } %t327, ptr %a330 + call void @finch_str_concat(ptr %a328, ptr %a329, ptr %a330) + store { ptr, i64, i64 } %t326, ptr %a331 + call void @finch_str_drop(ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a328 + store { ptr, i64, i64 } %t332, ptr %a334 + store { ptr, i64, i64 } { ptr @.str.5976, i64 1, i64 0 }, ptr %a335 + call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) + store { ptr, i64, i64 } %t332, ptr %a336 + call void @finch_str_drop(ptr %a336) + %t337 = load { ptr, i64, i64 }, ptr %a333 + %t338 = call { ptr, i64, i64 } @finch.gen.op(ptr %t305, { ptr, i64, i64 } %t337) + store { ptr, i64, i64 } %t337, ptr %a339 + call void @finch_str_drop(ptr %a339) + store { ptr, i64, i64 } %t338, ptr %a340 + %t341 = load ptr, ptr %a1 + %t342 = load { ptr, i64, i64 }, ptr %a340 + store { ptr, i64, i64 } { ptr @.str.5977, i64 12, i64 0 }, ptr %a344 + store { ptr, i64, i64 } %t342, ptr %a345 + call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) + %t346 = load { ptr, i64, i64 }, ptr %a343 + store { ptr, i64, i64 } %t346, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.5978, i64 3, i64 0 }, ptr %a349 + call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) + store { ptr, i64, i64 } %t346, ptr %a350 + call void @finch_str_drop(ptr %a350) + %t351 = load { ptr, i64, i64 }, ptr %a347 + %t352 = call { ptr, i64, i64 } @finch.gen.op(ptr %t341, { ptr, i64, i64 } %t351) + store { ptr, i64, i64 } %t351, ptr %a353 + call void @finch_str_drop(ptr %a353) + store { ptr, i64, i64 } %t352, ptr %a354 + %t355 = load ptr, ptr %a1 + %t356 = load %S.gen.Val, ptr %a200 + call void @finch.gen.release(ptr %t355, %S.gen.Val %t356) + %t357 = load { ptr, i64, i64 }, ptr %a354 + store { ptr, i64, i64 } %t357, ptr %a358 + call void @finch_str_copy(ptr %a359, ptr %a358) + %t360 = load { ptr, i64, i64 }, ptr %a359 + %t361 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t360, 0 + %t362 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5979, i64 4, i64 0 }) + %t363 = insertvalue %S.gen.Val %t361, %S.ast.Type %t362, 1 + call void @finch_str_drop(ptr %a354) + call void @finch_str_drop(ptr %a340) + call void @finch_str_drop(ptr %a297) + call void @finch_str_drop(ptr %a204) + call void @finch.drop.S_gen_Val(ptr %a200) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t363 +endif9015: + %t364 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.5980, i64 4, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br label %logic.from9027 +logic.from9027: + br i1 %t368, label %logic.end9029, label %logic.rhs9028 +logic.rhs9028: + %t369 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t369, ptr %a370 + store { ptr, i64, i64 } { ptr @.str.5981, i64 5, i64 0 }, ptr %a371 + %t372 = call i32 @finch_str_eq(ptr %a370, ptr %a371) + %t373 = icmp ne i32 %t372, 0 + br label %logic.rend9030 +logic.rend9030: + br label %logic.end9029 +logic.end9029: + %t374 = phi i1 [ true, %logic.from9027 ], [ %t373, %logic.rend9030 ] + br label %logic.from9031 +logic.from9031: + br i1 %t374, label %logic.end9033, label %logic.rhs9032 +logic.rhs9032: + %t375 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t375, ptr %a376 + store { ptr, i64, i64 } { ptr @.str.5982, i64 5, i64 0 }, ptr %a377 + %t378 = call i32 @finch_str_eq(ptr %a376, ptr %a377) + %t379 = icmp ne i32 %t378, 0 + br label %logic.rend9034 +logic.rend9034: + br label %logic.end9033 +logic.end9033: + %t380 = phi i1 [ true, %logic.from9031 ], [ %t379, %logic.rend9034 ] + br i1 %t380, label %then9035, label %endif9037 +then9035: + %t381 = load ptr, ptr %a1 + %t382 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t381, %S.ast.Node %t382, i64 0) + %t383 = load ptr, ptr %a1 + %t384 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.5983, i64 21, i64 0 }, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + %t388 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t388, ptr %a390 + store { ptr, i64, i64 } { ptr @.str.5984, i64 5, i64 0 }, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t388, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + %t394 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t393, ptr %a396 + store { ptr, i64, i64 } %t394, ptr %a397 + call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) + store { ptr, i64, i64 } %t393, ptr %a398 + call void @finch_str_drop(ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a395 + store { ptr, i64, i64 } %t399, ptr %a401 + store { ptr, i64, i64 } { ptr @.str.5985, i64 6, i64 0 }, ptr %a402 + call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) + store { ptr, i64, i64 } %t399, ptr %a403 + call void @finch_str_drop(ptr %a403) + %t404 = load { ptr, i64, i64 }, ptr %a400 + %t405 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t404, ptr %a407 + store { ptr, i64, i64 } %t405, ptr %a408 + call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408) + store { ptr, i64, i64 } %t404, ptr %a409 + call void @finch_str_drop(ptr %a409) + %t410 = load { ptr, i64, i64 }, ptr %a406 + store { ptr, i64, i64 } %t410, ptr %a412 + store { ptr, i64, i64 } { ptr @.str.5986, i64 1, i64 0 }, ptr %a413 + call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) + store { ptr, i64, i64 } %t410, ptr %a414 + call void @finch_str_drop(ptr %a414) + %t415 = load { ptr, i64, i64 }, ptr %a411 + call void @finch.gen.emit(ptr %t383, { ptr, i64, i64 } %t415) + store { ptr, i64, i64 } %t415, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = load ptr, ptr %a1 + %t418 = load { ptr, i64, i64 }, ptr %a12 + %t419 = call { ptr, i64, i64 } @finch.gen.load(ptr %t417, { ptr, i64, i64 } { ptr @.str.5987, i64 17, i64 0 }, { ptr, i64, i64 } %t418) + %t420 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t419, 0 + %t421 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5988, i64 3, i64 0 }) + %t422 = insertvalue %S.gen.Val %t420, %S.ast.Type %t421, 1 + %t423 = insertvalue %S.gen.Val %t422, i1 true, 2 + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t423 +endif9037: + %t424 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t424, ptr %a425 + store { ptr, i64, i64 } { ptr @.str.5989, i64 7, i64 0 }, ptr %a426 + %t427 = call i32 @finch_str_eq(ptr %a425, ptr %a426) + %t428 = icmp ne i32 %t427, 0 + br i1 %t428, label %then9038, label %endif9040 +then9038: + %t429 = load ptr, ptr %a1 + %t430 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t429, %S.ast.Node %t430, i64 2) + %t431 = load ptr, ptr %a1 + %t432 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t433 = load { ptr, i64, i64 }, ptr %t432 + %t434 = extractvalue { ptr, i64, i64 } %t433, 1 + %t435 = icmp uge i64 1, %t434 + br i1 %t435, label %range9041, label %inrange9042 +range9041: + call void @finch_panic_index(ptr @.str.5990, i64 5655, i64 1, i64 %t434) + unreachable +inrange9042: + %t436 = extractvalue { ptr, i64, i64 } %t433, 0 + %t437 = getelementptr inbounds %S.ast.Node, ptr %t436, i64 1 + %t438 = load %S.ast.Node, ptr %t437 + %t439 = call %S.gen.Val @finch.gen.strArg(ptr %t431, %S.ast.Node %t438, { ptr, i64, i64 } { ptr @.str.5991, i64 19, i64 0 }) + store %S.gen.Val %t439, ptr %a440 + %t441 = load ptr, ptr %a1 + %t442 = icmp eq ptr %t441, null + br i1 %t442, label %panic9043, label %ok9044 +panic9043: + call void @finch_panic(ptr @.str.5992, i64 5656, ptr @.str.5993) + unreachable +ok9044: + %t443 = getelementptr inbounds %S.gen.Gen, ptr %t441, i32 0, i32 11 + %t444 = getelementptr inbounds { ptr, i64, i64 }, ptr %t443, i32 0, i32 1 + %t445 = load i64, ptr %t444 + store i64 %t445, ptr %a446 + %t447 = load ptr, ptr %a1 + %t448 = load %S.gen.Val, ptr %a440 + call void @finch.gen.hold(ptr %t447, %S.gen.Val %t448) + %t449 = load ptr, ptr %a1 + %t450 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t451 = load { ptr, i64, i64 }, ptr %t450 + %t452 = extractvalue { ptr, i64, i64 } %t451, 1 + %t453 = icmp uge i64 2, %t452 + br i1 %t453, label %range9045, label %inrange9046 +range9045: + call void @finch_panic_index(ptr @.str.5994, i64 5658, i64 2, i64 %t452) + unreachable +inrange9046: + %t454 = extractvalue { ptr, i64, i64 } %t451, 0 + %t455 = getelementptr inbounds %S.ast.Node, ptr %t454, i64 2 + %t456 = load %S.ast.Node, ptr %t455 + %t457 = call %S.gen.Val @finch.gen.strArg(ptr %t449, %S.ast.Node %t456, { ptr, i64, i64 } { ptr @.str.5995, i64 12, i64 0 }) + store %S.gen.Val %t457, ptr %a458 + %t459 = load ptr, ptr %a1 + %t460 = load i64, ptr %a446 + call void @finch.gen.heldEnd(ptr %t459, i64 %t460) + %t461 = load ptr, ptr %a1 + %t462 = load %S.gen.Val, ptr %a440 + %t463 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t461, %S.gen.Val %t462) + store { ptr, i64, i64 } %t463, ptr %a464 + %t465 = load ptr, ptr %a1 + %t466 = load %S.gen.Val, ptr %a458 + %t467 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t465, %S.gen.Val %t466) + store { ptr, i64, i64 } %t467, ptr %a468 + %t469 = load ptr, ptr %a1 + %t470 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.5996, i64 33, i64 0 }, ptr %a472 + store { ptr, i64, i64 } %t470, ptr %a473 + call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a471 + store { ptr, i64, i64 } %t474, ptr %a476 + store { ptr, i64, i64 } { ptr @.str.5997, i64 6, i64 0 }, ptr %a477 + call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) + store { ptr, i64, i64 } %t474, ptr %a478 + call void @finch_str_drop(ptr %a478) + %t479 = load { ptr, i64, i64 }, ptr %a475 + %t480 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t479, ptr %a482 + store { ptr, i64, i64 } %t480, ptr %a483 + call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) + store { ptr, i64, i64 } %t479, ptr %a484 + call void @finch_str_drop(ptr %a484) + %t485 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t485, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.5998, i64 6, i64 0 }, ptr %a488 + call void @finch_str_concat(ptr %a486, ptr %a487, ptr %a488) + store { ptr, i64, i64 } %t485, ptr %a489 + call void @finch_str_drop(ptr %a489) + %t490 = load { ptr, i64, i64 }, ptr %a486 + %t491 = load { ptr, i64, i64 }, ptr %a464 + store { ptr, i64, i64 } %t490, ptr %a493 + store { ptr, i64, i64 } %t491, ptr %a494 + call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) + store { ptr, i64, i64 } %t490, ptr %a495 + call void @finch_str_drop(ptr %a495) + %t496 = load { ptr, i64, i64 }, ptr %a492 + store { ptr, i64, i64 } %t496, ptr %a498 + store { ptr, i64, i64 } { ptr @.str.5999, i64 6, i64 0 }, ptr %a499 + call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499) + store { ptr, i64, i64 } %t496, ptr %a500 + call void @finch_str_drop(ptr %a500) + %t501 = load { ptr, i64, i64 }, ptr %a497 + %t502 = load { ptr, i64, i64 }, ptr %a468 + store { ptr, i64, i64 } %t501, ptr %a504 + store { ptr, i64, i64 } %t502, ptr %a505 + call void @finch_str_concat(ptr %a503, ptr %a504, ptr %a505) + store { ptr, i64, i64 } %t501, ptr %a506 + call void @finch_str_drop(ptr %a506) + %t507 = load { ptr, i64, i64 }, ptr %a503 + store { ptr, i64, i64 } %t507, ptr %a509 + store { ptr, i64, i64 } { ptr @.str.6000, i64 1, i64 0 }, ptr %a510 + call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510) + store { ptr, i64, i64 } %t507, ptr %a511 + call void @finch_str_drop(ptr %a511) + %t512 = load { ptr, i64, i64 }, ptr %a508 + call void @finch.gen.emit(ptr %t469, { ptr, i64, i64 } %t512) + store { ptr, i64, i64 } %t512, ptr %a513 + call void @finch_str_drop(ptr %a513) + %t514 = load ptr, ptr %a1 + %t515 = load %S.gen.Val, ptr %a440 + call void @finch.gen.release(ptr %t514, %S.gen.Val %t515) + %t516 = load ptr, ptr %a1 + %t517 = load %S.gen.Val, ptr %a458 + call void @finch.gen.release(ptr %t516, %S.gen.Val %t517) + %t518 = load ptr, ptr %a1 + %t519 = load { ptr, i64, i64 }, ptr %a12 + %t520 = call { ptr, i64, i64 } @finch.gen.load(ptr %t518, { ptr, i64, i64 } { ptr @.str.6001, i64 17, i64 0 }, { ptr, i64, i64 } %t519) + %t521 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t520, 0 + %t522 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6002, i64 3, i64 0 }) + %t523 = insertvalue %S.gen.Val %t521, %S.ast.Type %t522, 1 + %t524 = insertvalue %S.gen.Val %t523, i1 true, 2 + call void @finch_str_drop(ptr %a468) + call void @finch_str_drop(ptr %a464) + call void @finch.drop.S_gen_Val(ptr %a458) + call void @finch.drop.S_gen_Val(ptr %a440) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t524 +endif9040: + %t525 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t525, ptr %a526 + store { ptr, i64, i64 } { ptr @.str.6003, i64 5, i64 0 }, ptr %a527 + %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) + %t529 = icmp ne i32 %t528, 0 + br i1 %t529, label %then9047, label %endif9049 +then9047: + %t530 = load ptr, ptr %a1 + %t531 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t530, %S.ast.Node %t531, i64 1) + %t532 = load ptr, ptr %a1 + %t533 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t534 = load { ptr, i64, i64 }, ptr %t533 + %t535 = extractvalue { ptr, i64, i64 } %t534, 1 + %t536 = icmp uge i64 1, %t535 + br i1 %t536, label %range9050, label %inrange9051 +range9050: + call void @finch_panic_index(ptr @.str.6004, i64 5669, i64 1, i64 %t535) + unreachable +inrange9051: + %t537 = extractvalue { ptr, i64, i64 } %t534, 0 + %t538 = getelementptr inbounds %S.ast.Node, ptr %t537, i64 1 + %t539 = load %S.ast.Node, ptr %t538 + %t540 = call %S.gen.Val @finch.gen.strArg(ptr %t532, %S.ast.Node %t539, { ptr, i64, i64 } { ptr @.str.6005, i64 13, i64 0 }) + store %S.gen.Val %t540, ptr %a541 + %t542 = load ptr, ptr %a1 + %t543 = load %S.gen.Val, ptr %a541 + %t544 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t542, %S.gen.Val %t543) + store { ptr, i64, i64 } %t544, ptr %a545 + %t546 = load ptr, ptr %a1 + %t547 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t546) + store { ptr, i64, i64 } %t547, ptr %a548 + %t549 = load ptr, ptr %a1 + %t550 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } { ptr @.str.6006, i64 31, i64 0 }, ptr %a552 + store { ptr, i64, i64 } %t550, ptr %a553 + call void @finch_str_concat(ptr %a551, ptr %a552, ptr %a553) + %t554 = load { ptr, i64, i64 }, ptr %a551 + store { ptr, i64, i64 } %t554, ptr %a556 + store { ptr, i64, i64 } { ptr @.str.6007, i64 6, i64 0 }, ptr %a557 + call void @finch_str_concat(ptr %a555, ptr %a556, ptr %a557) + store { ptr, i64, i64 } %t554, ptr %a558 + call void @finch_str_drop(ptr %a558) + %t559 = load { ptr, i64, i64 }, ptr %a555 + %t560 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t559, ptr %a562 + store { ptr, i64, i64 } %t560, ptr %a563 + call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) + store { ptr, i64, i64 } %t559, ptr %a564 + call void @finch_str_drop(ptr %a564) + %t565 = load { ptr, i64, i64 }, ptr %a561 + store { ptr, i64, i64 } %t565, ptr %a567 + store { ptr, i64, i64 } { ptr @.str.6008, i64 6, i64 0 }, ptr %a568 + call void @finch_str_concat(ptr %a566, ptr %a567, ptr %a568) + store { ptr, i64, i64 } %t565, ptr %a569 + call void @finch_str_drop(ptr %a569) + %t570 = load { ptr, i64, i64 }, ptr %a566 + %t571 = load { ptr, i64, i64 }, ptr %a545 + store { ptr, i64, i64 } %t570, ptr %a573 + store { ptr, i64, i64 } %t571, ptr %a574 + call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) + store { ptr, i64, i64 } %t570, ptr %a575 + call void @finch_str_drop(ptr %a575) + %t576 = load { ptr, i64, i64 }, ptr %a572 + store { ptr, i64, i64 } %t576, ptr %a578 + store { ptr, i64, i64 } { ptr @.str.6009, i64 1, i64 0 }, ptr %a579 + call void @finch_str_concat(ptr %a577, ptr %a578, ptr %a579) + store { ptr, i64, i64 } %t576, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = load { ptr, i64, i64 }, ptr %a577 + call void @finch.gen.emit(ptr %t549, { ptr, i64, i64 } %t581) + store { ptr, i64, i64 } %t581, ptr %a582 + call void @finch_str_drop(ptr %a582) + %t583 = load ptr, ptr %a1 + %t584 = load %S.gen.Val, ptr %a541 + call void @finch.gen.release(ptr %t583, %S.gen.Val %t584) + %t585 = load ptr, ptr %a1 + %t586 = load { ptr, i64, i64 }, ptr %a548 + %t587 = call { ptr, i64, i64 } @finch.gen.load(ptr %t585, { ptr, i64, i64 } { ptr @.str.6010, i64 17, i64 0 }, { ptr, i64, i64 } %t586) + %t588 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t587, 0 + %t589 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6011, i64 3, i64 0 }) + %t590 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t589) + store %S.ast.Type %t589, ptr %a591 + call void @finch.drop.S_ast_Type(ptr %a591) + %t592 = insertvalue %S.gen.Val %t588, %S.ast.Type %t590, 1 + %t593 = insertvalue %S.gen.Val %t592, i1 true, 2 + call void @finch_str_drop(ptr %a548) + call void @finch_str_drop(ptr %a545) + call void @finch.drop.S_gen_Val(ptr %a541) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t593 +endif9049: + %t594 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t594, ptr %a595 + store { ptr, i64, i64 } { ptr @.str.6012, i64 6, i64 0 }, ptr %a596 + %t597 = call i32 @finch_str_eq(ptr %a595, ptr %a596) + %t598 = icmp ne i32 %t597, 0 + br i1 %t598, label %then9052, label %endif9054 +then9052: + %t599 = load ptr, ptr %a1 + %t600 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t599, %S.ast.Node %t600, i64 1) + %t601 = load ptr, ptr %a1 + %t602 = load ptr, ptr %a1 + %t603 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t604 = load { ptr, i64, i64 }, ptr %t603 + %t605 = extractvalue { ptr, i64, i64 } %t604, 1 + %t606 = icmp uge i64 1, %t605 + br i1 %t606, label %range9055, label %inrange9056 +range9055: + call void @finch_panic_index(ptr @.str.6013, i64 5678, i64 1, i64 %t605) + unreachable +inrange9056: + %t607 = extractvalue { ptr, i64, i64 } %t604, 0 + %t608 = getelementptr inbounds %S.ast.Node, ptr %t607, i64 1 + %t609 = load %S.ast.Node, ptr %t608 + %t610 = call %S.gen.Val @finch.gen.expr(ptr %t602, %S.ast.Node %t609) + %t611 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6014, i64 3, i64 0 }) + %t612 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t613 = load { ptr, i64, i64 }, ptr %t612 + %t614 = extractvalue { ptr, i64, i64 } %t613, 1 + %t615 = icmp uge i64 1, %t614 + br i1 %t615, label %range9057, label %inrange9058 +range9057: + call void @finch_panic_index(ptr @.str.6015, i64 5678, i64 1, i64 %t614) + unreachable +inrange9058: + %t616 = extractvalue { ptr, i64, i64 } %t613, 0 + %t617 = getelementptr inbounds %S.ast.Node, ptr %t616, i64 1 + %t618 = load %S.ast.Node, ptr %t617 + %t619 = call %S.gen.Val @finch.gen.coerce(ptr %t601, %S.gen.Val %t610, %S.ast.Type %t611, %S.ast.Node %t618, { ptr, i64, i64 } { ptr @.str.6016, i64 9, i64 0 }) + store %S.gen.Val %t610, ptr %a620 + call void @finch.drop.S_gen_Val(ptr %a620) + store %S.ast.Type %t611, ptr %a621 + call void @finch.drop.S_ast_Type(ptr %a621) + %t622 = extractvalue %S.gen.Val %t619, 0 + store { ptr, i64, i64 } %t622, ptr %a623 + call void @finch_str_copy(ptr %a624, ptr %a623) + %t625 = load { ptr, i64, i64 }, ptr %a624 + store %S.gen.Val %t619, ptr %a626 + call void @finch.drop.S_gen_Val(ptr %a626) + store { ptr, i64, i64 } %t625, ptr %a627 + %t628 = load ptr, ptr %a1 + %t629 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.6017, i64 32, i64 0 }, ptr %a631 + store { ptr, i64, i64 } %t629, ptr %a632 + call void @finch_str_concat(ptr %a630, ptr %a631, ptr %a632) + %t633 = load { ptr, i64, i64 }, ptr %a630 + store { ptr, i64, i64 } %t633, ptr %a635 + store { ptr, i64, i64 } { ptr @.str.6018, i64 6, i64 0 }, ptr %a636 + call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636) + store { ptr, i64, i64 } %t633, ptr %a637 + call void @finch_str_drop(ptr %a637) + %t638 = load { ptr, i64, i64 }, ptr %a634 + %t639 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t638, ptr %a641 + store { ptr, i64, i64 } %t639, ptr %a642 + call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) + store { ptr, i64, i64 } %t638, ptr %a643 + call void @finch_str_drop(ptr %a643) + %t644 = load { ptr, i64, i64 }, ptr %a640 + store { ptr, i64, i64 } %t644, ptr %a646 + store { ptr, i64, i64 } { ptr @.str.6019, i64 6, i64 0 }, ptr %a647 + call void @finch_str_concat(ptr %a645, ptr %a646, ptr %a647) + store { ptr, i64, i64 } %t644, ptr %a648 + call void @finch_str_drop(ptr %a648) + %t649 = load { ptr, i64, i64 }, ptr %a645 + %t650 = load { ptr, i64, i64 }, ptr %a627 + store { ptr, i64, i64 } %t649, ptr %a652 + store { ptr, i64, i64 } %t650, ptr %a653 + call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) + store { ptr, i64, i64 } %t649, ptr %a654 + call void @finch_str_drop(ptr %a654) + %t655 = load { ptr, i64, i64 }, ptr %a651 + store { ptr, i64, i64 } %t655, ptr %a657 + store { ptr, i64, i64 } { ptr @.str.6020, i64 1, i64 0 }, ptr %a658 + call void @finch_str_concat(ptr %a656, ptr %a657, ptr %a658) + store { ptr, i64, i64 } %t655, ptr %a659 + call void @finch_str_drop(ptr %a659) + %t660 = load { ptr, i64, i64 }, ptr %a656 + call void @finch.gen.emit(ptr %t628, { ptr, i64, i64 } %t660) + store { ptr, i64, i64 } %t660, ptr %a661 + call void @finch_str_drop(ptr %a661) + %t662 = load ptr, ptr %a1 + %t663 = load { ptr, i64, i64 }, ptr %a12 + %t664 = call { ptr, i64, i64 } @finch.gen.load(ptr %t662, { ptr, i64, i64 } { ptr @.str.6021, i64 17, i64 0 }, { ptr, i64, i64 } %t663) + %t665 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t664, 0 + %t666 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6022, i64 3, i64 0 }) + %t667 = insertvalue %S.gen.Val %t665, %S.ast.Type %t666, 1 + %t668 = insertvalue %S.gen.Val %t667, i1 true, 2 + call void @finch_str_drop(ptr %a627) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t668 +endif9054: + %t669 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t669, ptr %a670 + store { ptr, i64, i64 } { ptr @.str.6023, i64 5, i64 0 }, ptr %a671 + %t672 = call i32 @finch_str_eq(ptr %a670, ptr %a671) + %t673 = icmp ne i32 %t672, 0 + br i1 %t673, label %then9059, label %endif9061 +then9059: + %t674 = load ptr, ptr %a1 + %t675 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t674, %S.ast.Node %t675, i64 0) + %t676 = load ptr, ptr %a1 + %t677 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t676) + store { ptr, i64, i64 } %t677, ptr %a678 + %t679 = load ptr, ptr %a1 + %t680 = load { ptr, i64, i64 }, ptr %a678 + store { ptr, i64, i64 } { ptr @.str.6024, i64 36, i64 0 }, ptr %a682 + store { ptr, i64, i64 } %t680, ptr %a683 + call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) + %t684 = load { ptr, i64, i64 }, ptr %a681 + store { ptr, i64, i64 } %t684, ptr %a686 + store { ptr, i64, i64 } { ptr @.str.6025, i64 6, i64 0 }, ptr %a687 + call void @finch_str_concat(ptr %a685, ptr %a686, ptr %a687) + store { ptr, i64, i64 } %t684, ptr %a688 + call void @finch_str_drop(ptr %a688) + %t689 = load { ptr, i64, i64 }, ptr %a685 + %t690 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t689, ptr %a692 + store { ptr, i64, i64 } %t690, ptr %a693 + call void @finch_str_concat(ptr %a691, ptr %a692, ptr %a693) + store { ptr, i64, i64 } %t689, ptr %a694 + call void @finch_str_drop(ptr %a694) + %t695 = load { ptr, i64, i64 }, ptr %a691 + store { ptr, i64, i64 } %t695, ptr %a697 + store { ptr, i64, i64 } { ptr @.str.6026, i64 1, i64 0 }, ptr %a698 + call void @finch_str_concat(ptr %a696, ptr %a697, ptr %a698) + store { ptr, i64, i64 } %t695, ptr %a699 + call void @finch_str_drop(ptr %a699) + %t700 = load { ptr, i64, i64 }, ptr %a696 + call void @finch.gen.emit(ptr %t679, { ptr, i64, i64 } %t700) + store { ptr, i64, i64 } %t700, ptr %a701 + call void @finch_str_drop(ptr %a701) + %t702 = load ptr, ptr %a1 + %t703 = load { ptr, i64, i64 }, ptr %a678 + %t704 = call { ptr, i64, i64 } @finch.gen.load(ptr %t702, { ptr, i64, i64 } { ptr @.str.6027, i64 17, i64 0 }, { ptr, i64, i64 } %t703) + %t705 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t704, 0 + %t706 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6028, i64 2, i64 0 }) + %t707 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t706) + store %S.ast.Type %t706, ptr %a708 + call void @finch.drop.S_ast_Type(ptr %a708) + %t709 = insertvalue %S.gen.Val %t705, %S.ast.Type %t707, 1 + %t710 = insertvalue %S.gen.Val %t709, i1 true, 2 + call void @finch_str_drop(ptr %a678) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t710 +endif9061: + %t711 = load ptr, ptr %a1 + %t712 = load %S.ast.Node, ptr %a2 + %t713 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6029, i64 21, i64 0 }, ptr %a715 + store { ptr, i64, i64 } %t713, ptr %a716 + call void @finch_str_concat(ptr %a714, ptr %a715, ptr %a716) + %t717 = load { ptr, i64, i64 }, ptr %a714 + store { ptr, i64, i64 } %t717, ptr %a719 + store { ptr, i64, i64 } { ptr @.str.6030, i64 106, i64 0 }, ptr %a720 + call void @finch_str_concat(ptr %a718, ptr %a719, ptr %a720) + store { ptr, i64, i64 } %t717, ptr %a721 + call void @finch_str_drop(ptr %a721) + %t722 = load { ptr, i64, i64 }, ptr %a718 + call void @finch.gen.fail(ptr %t711, %S.ast.Node %t712, { ptr, i64, i64 } %t722) + store { ptr, i64, i64 } %t722, ptr %a723 + call void @finch_str_drop(ptr %a723) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val zeroinitializer +} + +define internal { ptr, i64, i64 } @finch.gen.runtimeDecls() { +entry: + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %t1 = mul i64 74, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6031, i64 54, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6032, i64 65, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 + store { ptr, i64, i64 } { ptr @.str.6033, i64 29, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 + store { ptr, i64, i64 } { ptr @.str.6034, i64 38, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 + store { ptr, i64, i64 } { ptr @.str.6035, i64 33, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 + store { ptr, i64, i64 } { ptr @.str.6036, i64 33, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 + store { ptr, i64, i64 } { ptr @.str.6037, i64 33, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 + store { ptr, i64, i64 } { ptr @.str.6038, i64 32, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 + store { ptr, i64, i64 } { ptr @.str.6039, i64 45, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 + store { ptr, i64, i64 } { ptr @.str.6040, i64 35, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 + store { ptr, i64, i64 } { ptr @.str.6041, i64 36, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 + store { ptr, i64, i64 } { ptr @.str.6042, i64 42, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 + store { ptr, i64, i64 } { ptr @.str.6043, i64 37, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 + store { ptr, i64, i64 } { ptr @.str.6044, i64 38, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 + store { ptr, i64, i64 } { ptr @.str.6045, i64 42, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 + store { ptr, i64, i64 } { ptr @.str.6046, i64 38, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 + store { ptr, i64, i64 } { ptr @.str.6047, i64 37, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 + store { ptr, i64, i64 } { ptr @.str.6048, i64 42, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 + store { ptr, i64, i64 } { ptr @.str.6049, i64 42, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 + store { ptr, i64, i64 } { ptr @.str.6050, i64 34, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 + store { ptr, i64, i64 } { ptr @.str.6051, i64 42, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 + store { ptr, i64, i64 } { ptr @.str.6052, i64 43, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 22 + store { ptr, i64, i64 } { ptr @.str.6053, i64 47, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 23 + store { ptr, i64, i64 } { ptr @.str.6054, i64 50, i64 0 }, ptr %t26 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 24 + store { ptr, i64, i64 } { ptr @.str.6055, i64 43, i64 0 }, ptr %t27 + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 25 + store { ptr, i64, i64 } { ptr @.str.6056, i64 44, i64 0 }, ptr %t28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 26 + store { ptr, i64, i64 } { ptr @.str.6057, i64 49, i64 0 }, ptr %t29 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 27 + store { ptr, i64, i64 } { ptr @.str.6058, i64 57, i64 0 }, ptr %t30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 28 + store { ptr, i64, i64 } { ptr @.str.6059, i64 37, i64 0 }, ptr %t31 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 29 + store { ptr, i64, i64 } { ptr @.str.6060, i64 39, i64 0 }, ptr %t32 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 30 + store { ptr, i64, i64 } { ptr @.str.6061, i64 37, i64 0 }, ptr %t33 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 31 + store { ptr, i64, i64 } { ptr @.str.6062, i64 38, i64 0 }, ptr %t34 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 32 + store { ptr, i64, i64 } { ptr @.str.6063, i64 39, i64 0 }, ptr %t35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 33 + store { ptr, i64, i64 } { ptr @.str.6064, i64 39, i64 0 }, ptr %t36 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 34 + store { ptr, i64, i64 } { ptr @.str.6065, i64 51, i64 0 }, ptr %t37 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 35 + store { ptr, i64, i64 } { ptr @.str.6066, i64 44, i64 0 }, ptr %t38 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 36 + store { ptr, i64, i64 } { ptr @.str.6067, i64 43, i64 0 }, ptr %t39 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 37 + store { ptr, i64, i64 } { ptr @.str.6068, i64 45, i64 0 }, ptr %t40 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 38 + store { ptr, i64, i64 } { ptr @.str.6069, i64 44, i64 0 }, ptr %t41 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 39 + store { ptr, i64, i64 } { ptr @.str.6070, i64 52, i64 0 }, ptr %t42 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 40 + store { ptr, i64, i64 } { ptr @.str.6071, i64 57, i64 0 }, ptr %t43 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 41 + store { ptr, i64, i64 } { ptr @.str.6072, i64 48, i64 0 }, ptr %t44 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 42 + store { ptr, i64, i64 } { ptr @.str.6073, i64 34, i64 0 }, ptr %t45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 43 + store { ptr, i64, i64 } { ptr @.str.6074, i64 48, i64 0 }, ptr %t46 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 44 + store { ptr, i64, i64 } { ptr @.str.6075, i64 60, i64 0 }, ptr %t47 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 45 + store { ptr, i64, i64 } { ptr @.str.6076, i64 55, i64 0 }, ptr %t48 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 46 + store { ptr, i64, i64 } { ptr @.str.6077, i64 46, i64 0 }, ptr %t49 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 47 + store { ptr, i64, i64 } { ptr @.str.6078, i64 48, i64 0 }, ptr %t50 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 48 + store { ptr, i64, i64 } { ptr @.str.6079, i64 43, i64 0 }, ptr %t51 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 49 + store { ptr, i64, i64 } { ptr @.str.6080, i64 45, i64 0 }, ptr %t52 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 50 + store { ptr, i64, i64 } { ptr @.str.6081, i64 59, i64 0 }, ptr %t53 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 51 + store { ptr, i64, i64 } { ptr @.str.6082, i64 49, i64 0 }, ptr %t54 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 52 + store { ptr, i64, i64 } { ptr @.str.6083, i64 39, i64 0 }, ptr %t55 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 53 + store { ptr, i64, i64 } { ptr @.str.6084, i64 39, i64 0 }, ptr %t56 + %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 54 + store { ptr, i64, i64 } { ptr @.str.6085, i64 35, i64 0 }, ptr %t57 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 55 + store { ptr, i64, i64 } { ptr @.str.6086, i64 35, i64 0 }, ptr %t58 + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 56 + store { ptr, i64, i64 } { ptr @.str.6087, i64 45, i64 0 }, ptr %t59 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 57 + store { ptr, i64, i64 } { ptr @.str.6088, i64 47, i64 0 }, ptr %t60 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 58 + store { ptr, i64, i64 } { ptr @.str.6089, i64 47, i64 0 }, ptr %t61 + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 59 + store { ptr, i64, i64 } { ptr @.str.6090, i64 48, i64 0 }, ptr %t62 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 60 + store { ptr, i64, i64 } { ptr @.str.6091, i64 44, i64 0 }, ptr %t63 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 61 + store { ptr, i64, i64 } { ptr @.str.6092, i64 37, i64 0 }, ptr %t64 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 62 + store { ptr, i64, i64 } { ptr @.str.6093, i64 49, i64 0 }, ptr %t65 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 63 + store { ptr, i64, i64 } { ptr @.str.6094, i64 39, i64 0 }, ptr %t66 + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 64 + store { ptr, i64, i64 } { ptr @.str.6095, i64 29, i64 0 }, ptr %t67 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 65 + store { ptr, i64, i64 } { ptr @.str.6096, i64 35, i64 0 }, ptr %t68 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 66 + store { ptr, i64, i64 } { ptr @.str.6097, i64 29, i64 0 }, ptr %t69 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 67 + store { ptr, i64, i64 } { ptr @.str.6098, i64 24, i64 0 }, ptr %t70 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 68 + store { ptr, i64, i64 } { ptr @.str.6099, i64 40, i64 0 }, ptr %t71 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 69 + store { ptr, i64, i64 } { ptr @.str.6100, i64 33, i64 0 }, ptr %t72 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 70 + store { ptr, i64, i64 } { ptr @.str.6101, i64 34, i64 0 }, ptr %t73 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 71 + store { ptr, i64, i64 } { ptr @.str.6102, i64 44, i64 0 }, ptr %t74 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 72 + store { ptr, i64, i64 } { ptr @.str.6103, i64 32, i64 0 }, ptr %t75 + %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 73 + store { ptr, i64, i64 } { ptr @.str.6104, i64 23, i64 0 }, ptr %t76 + %t77 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t78 = insertvalue { ptr, i64, i64 } %t77, i64 74, 1 + %t79 = insertvalue { ptr, i64, i64 } %t78, i64 74, 2 + store { ptr, i64, i64 } %t79, ptr %a80 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a80, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6105, i64 1, i64 0 }, ptr %a82 + call void @finch_str_join(ptr %a83, ptr %a80, ptr %a82) + %t84 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t84, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.6106, i64 1, i64 0 }, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + call void @finch.drop.arr_str(ptr %a80) + ret { ptr, i64, i64 } %t89 +} + +define internal { ptr, i64, i64 } @finch.gen.assemble(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6107, i64 52, i64 0 }, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic9062, label %ok9063 +panic9062: + call void @finch_panic(ptr @.str.6108, i64 5776, ptr @.str.6109) + unreachable +ok9063: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 31 + %t6 = getelementptr inbounds %S.platform.Target, ptr %t5, i32 0, i32 5 + %t7 = load i1, ptr %t6 + br label %logic.from9064 +logic.from9064: + br i1 %t7, label %logic.end9066, label %logic.rhs9065 +logic.rhs9065: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic9067, label %ok9068 +panic9067: + call void @finch_panic(ptr @.str.6110, i64 5776, ptr @.str.6111) + unreachable +ok9068: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 31 + %t11 = getelementptr inbounds %S.platform.Target, ptr %t10, i32 0, i32 1 + %t12 = load i1, ptr %t11 + br label %logic.rend9069 +logic.rend9069: + br label %logic.end9066 +logic.end9066: + %t13 = phi i1 [ true, %logic.from9064 ], [ %t12, %logic.rend9069 ] + br i1 %t13, label %then9070, label %endif9072 +then9070: + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6112, i64 17, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic9073, label %ok9074 +panic9073: + call void @finch_panic(ptr @.str.6113, i64 5777, ptr @.str.6114) + unreachable +ok9074: + %t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 31 + %t22 = getelementptr inbounds %S.platform.Target, ptr %t21, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t18, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t18, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6115, i64 3, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a2 + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_str_drop(ptr %a35) + br label %endif9072 +endif9072: + %t36 = load { ptr, i64, i64 }, ptr %a2 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic9075, label %ok9076 +panic9075: + call void @finch_panic(ptr @.str.6116, i64 5779, ptr @.str.6117) + unreachable +ok9076: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 2 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6118, i64 1, i64 0 }, ptr %a41 + call void @finch_str_join(ptr %a42, ptr %t39, ptr %a41) + %t43 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t36, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6119, i64 2, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = call { ptr, i64, i64 } @finch.gen.runtimeDecls() + store { ptr, i64, i64 } %t53, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t53, ptr %a58 + call void @finch_str_drop(ptr %a58) + store { ptr, i64, i64 } %t54, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.6120, i64 1, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t65, ptr %a2 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic9077, label %ok9078 +panic9077: + call void @finch_panic(ptr @.str.6121, i64 5780, ptr @.str.6122) + unreachable +ok9078: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 30 + %t71 = load i1, ptr %t70 + br i1 %t71, label %then9079, label %endif9081 +then9079: + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6123, i64 62, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a73 + %t77 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a2 + store { ptr, i64, i64 } %t77, ptr %a78 + call void @finch_str_drop(ptr %a78) + br label %endif9081 +endif9081: + %t79 = load { ptr, i64, i64 }, ptr %a2 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic9082, label %ok9083 +panic9082: + call void @finch_panic(ptr @.str.6124, i64 5783, ptr @.str.6125) + unreachable +ok9083: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 3 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6126, i64 1, i64 0 }, ptr %a84 + call void @finch_str_join(ptr %a85, ptr %t82, ptr %a84) + %t86 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t79, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t86, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + %t92 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t91, ptr %a2 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic9084, label %ok9085 +panic9084: + call void @finch_panic(ptr @.str.6127, i64 5784, ptr @.str.6128) + unreachable +ok9085: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 30 + %t97 = load i1, ptr %t96 + br i1 %t97, label %then9086, label %endif9088 +then9086: + %t98 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6129, i64 1, i64 0 }, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a99 + %t103 = load ptr, ptr %a1 + %t104 = call { ptr, i64, i64 } @finch.gen.dbgModule(ptr %t103) + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a105 + %t111 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t110, ptr %a2 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + br label %endif9088 +endif9088: + %t113 = load { ptr, i64, i64 }, ptr %a2 + ret { ptr, i64, i64 } %t113 +} + +define internal void @finch.copy.arr_S_ast_Program(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond9089 +n.cond9089: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body9090, label %n.end9091 +n.body9090: + %t8 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.ast.Program, ptr %t2, i64 %t6 + call void @finch.copy.S_ast_Program(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond9089 +n.end9091: + ret void +} + +define internal void @finch.copy.S_cimport_CFunc(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CFunc, ptr %src + store %S.cimport.CFunc %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 2 + call void @finch.copy.S_ast_Type(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_S_ast_Type(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 5 + %t11 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 5 + call void @finch_str_copy(ptr %t10, ptr %t11) + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CFunc(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9092 +n.cond9092: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9093, label %n.end9094 +n.body9093: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9095, label %entry.next9096 +entry.live9095: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CFunc(ptr %t17, ptr %t18) + br label %entry.next9096 +entry.next9096: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9092 +n.end9094: + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CConst(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9097 +n.cond9097: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9098, label %n.end9099 +n.body9098: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9100, label %entry.next9101 +entry.live9100: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CConst(ptr %t17, ptr %t18) + br label %entry.next9101 +entry.next9101: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9097 +n.end9099: + ret void +} + +define internal void @finch.copy.map_str_S_ast_Type(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9102 +n.cond9102: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9103, label %n.end9104 +n.body9103: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9105, label %entry.next9106 +entry.live9105: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_ast_Type(ptr %t17, ptr %t18) + br label %entry.next9106 +entry.next9106: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9102 +n.end9104: + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CStruct(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9107 +n.cond9107: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9108, label %n.end9109 +n.body9108: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9110, label %entry.next9111 +entry.live9110: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CStruct(ptr %t17, ptr %t18) + br label %entry.next9111 +entry.next9111: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9107 +n.end9109: + ret void +} + +define internal void @finch.copy.S_cimport_CImports(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CImports, ptr %src + store %S.cimport.CImports %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 0 + call void @finch.copy.map_str_S_cimport_CFunc(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 1 + call void @finch.copy.map_str_S_cimport_CConst(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 2 + call void @finch.copy.map_str_S_ast_Type(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 3 + call void @finch.copy.map_str_S_cimport_CStruct(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + ret void +} + +define internal void @finch.drop.arr_S_gen_Pending(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9180 +n.cond9180: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9181, label %n.end9182 +n.body9181: + %t7 = getelementptr inbounds %S.gen.Pending, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Pending(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9180 +n.end9182: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_Loop(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9183 +n.cond9183: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9184, label %n.end9185 +n.body9184: + %t7 = getelementptr inbounds %S.gen.Loop, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Loop(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9183 +n.end9185: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_FnSig(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9186 +n.cond9186: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9187, label %n.end9188 +n.body9187: + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_FnSig(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9186 +n.end9188: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_StructDef(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9189 +n.cond9189: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9190, label %n.end9191 +n.body9190: + %t7 = getelementptr inbounds %S.gen.StructDef, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_StructDef(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9189 +n.end9191: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_Template(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9192 +n.cond9192: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9193, label %n.end9194 +n.body9193: + %t7 = getelementptr inbounds %S.gen.Template, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Template(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9192 +n.end9194: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_EnumDef(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9195 +n.cond9195: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9196, label %n.end9197 +n.body9196: + %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_EnumDef(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9195 +n.end9197: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_SumDef(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9198 +n.cond9198: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9199, label %n.end9200 +n.body9199: + %t7 = getelementptr inbounds %S.gen.SumDef, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_SumDef(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9198 +n.end9200: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.map_str_int(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9201 +n.cond9201: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9202, label %n.end9203 +n.body9202: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live9204, label %entry.next9205 +entry.live9204: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 2 + br label %entry.next9205 +entry.next9205: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond9201 +n.end9203: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Gen(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_ast_Program(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_str(ptr %t5) + %t6 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 10 + call void @finch.drop.arr_S_gen_Scope(ptr %t7) + %t8 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 11 + call void @finch.drop.arr_S_gen_Pending(ptr %t8) + %t9 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 12 + call void @finch.drop.arr_S_gen_Loop(ptr %t9) + %t10 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 13 + call void @finch.drop.S_gen_FnSig(ptr %t10) + %t11 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 14 + call void @finch_str_drop(ptr %t11) + %t12 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 15 + call void @finch.drop.arr_S_gen_FnSig(ptr %t12) + %t13 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 16 + call void @finch.drop.arr_S_gen_StructDef(ptr %t13) + %t14 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 17 + call void @finch.drop.arr_S_gen_Template(ptr %t14) + %t15 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 18 + call void @finch.drop.arr_str(ptr %t15) + %t16 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 19 + call void @finch.drop.arr_S_ast_Type(ptr %t16) + %t17 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 20 + call void @finch_str_drop(ptr %t17) + %t18 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 21 + call void @finch.drop.arr_S_gen_EnumDef(ptr %t18) + %t19 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 22 + call void @finch.drop.arr_S_gen_SumDef(ptr %t19) + %t20 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 23 + call void @finch.drop.arr_str(ptr %t20) + %t21 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 24 + call void @finch.drop.arr_str(ptr %t21) + %t22 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 26 + call void @finch.drop.S_cimport_CImports(ptr %t22) + %t23 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 29 + call void @finch.drop.arr_str(ptr %t23) + %t24 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 31 + call void @finch.drop.S_platform_Target(ptr %t24) + %t25 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 32 + call void @finch_str_drop(ptr %t25) + %t26 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 33 + call void @finch.drop.arr_str(ptr %t26) + %t27 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 34 + call void @finch.drop.map_str_int(ptr %t27) + %t28 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 35 + call void @finch.drop.arr_int(ptr %t28) + %t29 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 40 + call void @finch.drop.arr_str(ptr %t29) + %t30 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 41 + call void @finch_str_drop(ptr %t30) + %t31 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 42 + call void @finch_str_drop(ptr %t31) + %t32 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 43 + call void @finch_str_drop(ptr %t32) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, %S.cimport.CImports %p2, %S.gen.Options %p3) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.cimport.CImports, align 16 + %a4 = alloca %S.gen.Options, align 16 + %a7 = alloca i1, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.cimport.CImports, align 16 + %a20 = alloca %S.cimport.CImports, align 16 + %a34 = alloca %S.platform.Target, align 16 + %a35 = alloca %S.platform.Target, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca %S.gen.Gen, align 16 + %a46 = alloca ptr, align 16 + %a75 = alloca i64, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca i64, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca i64, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca i64, align 16 + %a269 = alloca %S.gen.FnSig, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca %S.gen.FnSig, align 16 + %a318 = alloca %S.gen.FnSig, align 16 + %a320 = alloca %S.gen.FnSig, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.cimport.CImports %p2, ptr %a3 + store %S.gen.Options %p3, ptr %a4 + %t5 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 + %t6 = load i1, ptr %t5 + store i1 %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch.copy.arr_S_ast_Program(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + %t12 = insertvalue %S.gen.Gen zeroinitializer, { ptr, i64, i64 } %t11, 0 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch.copy.arr_str(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.gen.Gen %t12, { ptr, i64, i64 } %t16, 1 + %t18 = load %S.cimport.CImports, ptr %a3 + store %S.cimport.CImports %t18, ptr %a19 + call void @finch.copy.S_cimport_CImports(ptr %a20, ptr %a19) + %t21 = load %S.cimport.CImports, ptr %a20 + %t22 = insertvalue %S.gen.Gen %t17, %S.cimport.CImports %t21, 26 + %t23 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 + %t24 = load i1, ptr %t23 + %t25 = insertvalue %S.gen.Gen %t22, i1 %t24, 27 + %t26 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 1 + %t27 = load i1, ptr %t26 + %t28 = insertvalue %S.gen.Gen %t25, i1 %t27, 28 + %t29 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 2 + %t30 = load i1, ptr %t29 + %t31 = insertvalue %S.gen.Gen %t28, i1 %t30, 30 + %t32 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 4 + %t33 = load %S.platform.Target, ptr %t32 + store %S.platform.Target %t33, ptr %a34 + call void @finch.copy.S_platform_Target(ptr %a35, ptr %a34) + %t36 = load %S.platform.Target, ptr %a35 + %t37 = insertvalue %S.gen.Gen %t31, %S.platform.Target %t36, 31 + %t38 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 3 + %t39 = load { ptr, i64, i64 }, ptr %t38 + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch_str_copy(ptr %a41, ptr %a40) + %t42 = load { ptr, i64, i64 }, ptr %a41 + %t43 = insertvalue %S.gen.Gen %t37, { ptr, i64, i64 } %t42, 32 + %t44 = insertvalue %S.gen.Gen %t43, i64 -1, 36 + store %S.gen.Gen %t44, ptr %a45 + store ptr %a45, ptr %a46 + %t47 = load ptr, ptr %a46 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic9112, label %ok9113 +panic9112: + call void @finch_panic(ptr @.str.6130, i64 5794, ptr @.str.6131) + unreachable +ok9113: + %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 30 + %t50 = load i1, ptr %t49 + br i1 %t50, label %then9114, label %endif9116 +then9114: + %t51 = load ptr, ptr %a46 + %t52 = icmp eq ptr %t51, null + br i1 %t52, label %panic9117, label %ok9118 +panic9117: + call void @finch_panic(ptr @.str.6132, i64 5796, ptr @.str.6133) + unreachable +ok9118: + %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 33 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = add i64 %t55, 1 + call void @finch_arr_reserve(ptr %t53, i64 %t56, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t57 = load ptr, ptr %t53 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i64 %t55 + store { ptr, i64, i64 } { ptr @.str.6134, i64 0, i64 0 }, ptr %t58 + store i64 %t56, ptr %t54 + %t59 = load ptr, ptr %a46 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic9119, label %ok9120 +panic9119: + call void @finch_panic(ptr @.str.6135, i64 5797, ptr @.str.6136) + unreachable +ok9120: + %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 33 + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1 + %t63 = load i64, ptr %t62 + %t64 = add i64 %t63, 1 + call void @finch_arr_reserve(ptr %t61, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t65 = load ptr, ptr %t61 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 + store { ptr, i64, i64 } { ptr @.str.6137, i64 33, i64 0 }, ptr %t66 + store i64 %t64, ptr %t62 + %t67 = load ptr, ptr %a46 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic9121, label %ok9122 +panic9121: + call void @finch_panic(ptr @.str.6138, i64 5798, ptr @.str.6139) + unreachable +ok9122: + %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 33 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 + %t71 = load i64, ptr %t70 + %t72 = add i64 %t71, 1 + call void @finch_arr_reserve(ptr %t69, i64 %t72, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t73 = load ptr, ptr %t69 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t71 + store { ptr, i64, i64 } { ptr @.str.6140, i64 38, i64 0 }, ptr %t74 + store i64 %t72, ptr %t70 + store i64 0, ptr %a75 + br label %each.cond9123 +each.cond9123: + %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t77 = load i64, ptr %t76 + %t78 = load i64, ptr %a75 + %t79 = icmp slt i64 %t78, %t77 + br i1 %t79, label %each.body9124, label %each.end9126 +each.body9124: + %t80 = load ptr, ptr %a2 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i64 %t78 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t82, ptr %a83 + %t84 = load ptr, ptr %a46 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic9127, label %ok9128 +panic9127: + call void @finch_panic(ptr @.str.6141, i64 5800, ptr @.str.6142) + unreachable +ok9128: + %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 35 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load ptr, ptr %a46 + %t89 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.6143, i64 19, i64 0 }, ptr %a91 + store { ptr, i64, i64 } %t89, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.6144, i64 15, i64 0 }, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + %t99 = load ptr, ptr %a46 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic9129, label %ok9130 +panic9129: + call void @finch_panic(ptr @.str.6145, i64 5800, ptr @.str.6146) + unreachable +ok9130: + %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 32 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } %t98, ptr %a104 + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + store { ptr, i64, i64 } %t98, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6147, i64 2, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a108 + %t113 = call i64 @finch.gen.md(ptr %t88, { ptr, i64, i64 } %t112) + store { ptr, i64, i64 } %t112, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load i64, ptr %t87 + %t116 = add i64 %t115, 1 + call void @finch_arr_reserve(ptr %t86, i64 %t116, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t117 = load ptr, ptr %t86 + %t118 = getelementptr inbounds i64, ptr %t117, i64 %t115 + store i64 %t113, ptr %t118 + store i64 %t116, ptr %t87 + br label %each.step9125 +each.step9125: + %t119 = load i64, ptr %a75 + %t120 = add i64 %t119, 1 + store i64 %t120, ptr %a75 + br label %each.cond9123 +each.end9126: + %t121 = load ptr, ptr %a46 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic9131, label %ok9132 +panic9131: + call void @finch_panic(ptr @.str.6149, i64 5802, ptr @.str.6150) + unreachable +ok9132: + %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 35 + %t124 = load { ptr, i64, i64 }, ptr %t123 + %t125 = extractvalue { ptr, i64, i64 } %t124, 1 + %t126 = icmp uge i64 0, %t125 + br i1 %t126, label %range9133, label %inrange9134 +range9133: + call void @finch_panic_index(ptr @.str.6151, i64 5802, i64 0, i64 %t125) + unreachable +inrange9134: + %t127 = extractvalue { ptr, i64, i64 } %t124, 0 + %t128 = getelementptr inbounds i64, ptr %t127, i64 0 + %t129 = load i64, ptr %t128 + call void @finch_str_from_int(ptr %a130, i64 %t129) + %t131 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6148, i64 52, i64 0 }, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.6152, i64 84, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = load ptr, ptr %a46 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic9135, label %ok9136 +panic9135: + call void @finch_panic(ptr @.str.6153, i64 5802, ptr @.str.6154) + unreachable +ok9136: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 33 + %t145 = load { ptr, i64, i64 }, ptr %t144 + %t146 = extractvalue { ptr, i64, i64 } %t145, 1 + %t147 = icmp uge i64 0, %t146 + br i1 %t147, label %range9137, label %inrange9138 +range9137: + call void @finch_panic_index(ptr @.str.6155, i64 5802, i64 0, i64 %t146) + unreachable +inrange9138: + %t148 = extractvalue { ptr, i64, i64 } %t145, 0 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i64 0 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } %t141, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + call void @finch_str_drop(ptr %a151) + br label %endif9116 +endif9116: + %t152 = load ptr, ptr %a46 + call void @finch.gen.declare(ptr %t152) + %t153 = load ptr, ptr %a46 + %t154 = call i64 @finch.gen.findFn(ptr %t153, { ptr, i64, i64 } { ptr @.str.6156, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6157, i64 4, i64 0 }) + store i64 %t154, ptr %a155 + %t156 = load i1, ptr %a7 + br i1 %t156, label %then9139, label %else9140 +then9139: + %t157 = load i64, ptr %a155 + %t158 = icmp sge i64 %t157, 0 + br i1 %t158, label %then9142, label %endif9144 +then9142: + %t159 = load ptr, ptr %a46 + %t160 = load ptr, ptr %a46 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic9145, label %ok9146 +panic9145: + call void @finch_panic(ptr @.str.6158, i64 5808, ptr @.str.6159) + unreachable +ok9146: + %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 0 + %t163 = load ptr, ptr %a46 + %t164 = icmp eq ptr %t163, null + br i1 %t164, label %panic9147, label %ok9148 +panic9147: + call void @finch_panic(ptr @.str.6160, i64 5808, ptr @.str.6161) + unreachable +ok9148: + %t165 = getelementptr inbounds %S.gen.Gen, ptr %t163, i32 0, i32 15 + %t166 = load i64, ptr %a155 + %t167 = load { ptr, i64, i64 }, ptr %t165 + %t168 = extractvalue { ptr, i64, i64 } %t167, 1 + %t169 = icmp uge i64 %t166, %t168 + br i1 %t169, label %range9149, label %inrange9150 +range9149: + call void @finch_panic_index(ptr @.str.6162, i64 5808, i64 %t166, i64 %t168) + unreachable +inrange9150: + %t170 = extractvalue { ptr, i64, i64 } %t167, 0 + %t171 = getelementptr inbounds %S.gen.FnSig, ptr %t170, i64 %t166 + %t172 = getelementptr inbounds %S.gen.FnSig, ptr %t171, i32 0, i32 16 + %t173 = load i64, ptr %t172 + %t174 = load { ptr, i64, i64 }, ptr %t162 + %t175 = extractvalue { ptr, i64, i64 } %t174, 1 + %t176 = icmp uge i64 %t173, %t175 + br i1 %t176, label %range9151, label %inrange9152 +range9151: + call void @finch_panic_index(ptr @.str.6163, i64 5808, i64 %t173, i64 %t175) + unreachable +inrange9152: + %t177 = extractvalue { ptr, i64, i64 } %t174, 0 + %t178 = getelementptr inbounds %S.ast.Program, ptr %t177, i64 %t173 + %t179 = getelementptr inbounds %S.ast.Program, ptr %t178, i32 0, i32 8 + %t180 = load ptr, ptr %a46 + %t181 = icmp eq ptr %t180, null + br i1 %t181, label %panic9153, label %ok9154 +panic9153: + call void @finch_panic(ptr @.str.6164, i64 5808, ptr @.str.6165) + unreachable +ok9154: + %t182 = getelementptr inbounds %S.gen.Gen, ptr %t180, i32 0, i32 15 + %t183 = load i64, ptr %a155 + %t184 = load { ptr, i64, i64 }, ptr %t182 + %t185 = extractvalue { ptr, i64, i64 } %t184, 1 + %t186 = icmp uge i64 %t183, %t185 + br i1 %t186, label %range9155, label %inrange9156 +range9155: + call void @finch_panic_index(ptr @.str.6166, i64 5808, i64 %t183, i64 %t185) + unreachable +inrange9156: + %t187 = extractvalue { ptr, i64, i64 } %t184, 0 + %t188 = getelementptr inbounds %S.gen.FnSig, ptr %t187, i64 %t183 + %t189 = getelementptr inbounds %S.gen.FnSig, ptr %t188, i32 0, i32 17 + %t190 = load i64, ptr %t189 + %t191 = load { ptr, i64, i64 }, ptr %t179 + %t192 = extractvalue { ptr, i64, i64 } %t191, 1 + %t193 = icmp uge i64 %t190, %t192 + br i1 %t193, label %range9157, label %inrange9158 +range9157: + call void @finch_panic_index(ptr @.str.6167, i64 5808, i64 %t190, i64 %t192) + unreachable +inrange9158: + %t194 = extractvalue { ptr, i64, i64 } %t191, 0 + %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t190 + %t196 = load %S.ast.Node, ptr %t195 + call void @finch.gen.fail(ptr %t159, %S.ast.Node %t196, { ptr, i64, i64 } { ptr @.str.6168, i64 82, i64 0 }) + br label %endif9144 +endif9144: + br label %endif9141 +else9140: + %t197 = load i64, ptr %a155 + %t198 = icmp slt i64 %t197, 0 + br i1 %t198, label %then9159, label %endif9161 +then9159: + %t199 = load { ptr, i64, i64 }, ptr %a2 + %t200 = extractvalue { ptr, i64, i64 } %t199, 1 + %t201 = icmp uge i64 0, %t200 + br i1 %t201, label %range9162, label %inrange9163 +range9162: + call void @finch_panic_index(ptr @.str.6169, i64 5811, i64 0, i64 %t200) + unreachable +inrange9163: + %t202 = extractvalue { ptr, i64, i64 } %t199, 0 + %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 0 + %t204 = load { ptr, i64, i64 }, ptr %t203 + store { ptr, i64, i64 } %t204, ptr %a206 + store { ptr, i64, i64 } { ptr @.str.6170, i64 64, i64 0 }, ptr %a207 + call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a205 + %t209 = extractvalue { ptr, i64, i64 } %t208, 1 + %t210 = trunc i64 %t209 to i32 + %t211 = extractvalue { ptr, i64, i64 } %t208, 0 + %t212 = icmp eq ptr %t211, null + %t213 = select i1 %t212, ptr @.str.6171, ptr %t211 + %t214 = call i32 (ptr, ...) @printf(ptr @.str.6172, i32 %t210, ptr %t213) + store { ptr, i64, i64 } %t208, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = call i32 (ptr, ...) @printf(ptr @.str.6173) + %t217 = trunc i64 1 to i32 + %t218 = call i32 @fflush(ptr null) + call void @exit(i32 %t217) + br label %endif9161 +endif9161: + br label %endif9141 +endif9141: + store i64 0, ptr %a219 + br label %while.cond9164 +while.cond9164: + %t220 = load i64, ptr %a219 + %t221 = load ptr, ptr %a46 + %t222 = icmp eq ptr %t221, null + br i1 %t222, label %panic9167, label %ok9168 +panic9167: + call void @finch_panic(ptr @.str.6174, i64 5816, ptr @.str.6175) + unreachable +ok9168: + %t223 = getelementptr inbounds %S.gen.Gen, ptr %t221, i32 0, i32 15 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 + %t225 = load i64, ptr %t224 + %t226 = icmp slt i64 %t220, %t225 + br i1 %t226, label %while.body9165, label %while.end9166 +while.body9165: + %t227 = load ptr, ptr %a46 + %t228 = load i64, ptr %a219 + call void @finch.gen.define(ptr %t227, i64 %t228) + %t229 = load i64, ptr %a219 + %t230 = add i64 %t229, 1 + store i64 %t230, ptr %a219 + br label %while.cond9164 +while.end9166: + %t231 = load ptr, ptr %a46 + %t232 = icmp eq ptr %t231, null + br i1 %t232, label %panic9169, label %ok9170 +panic9169: + call void @finch_panic(ptr @.str.6176, i64 5820, ptr @.str.6177) + unreachable +ok9170: + %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 28 + %t234 = load i1, ptr %t233 + br i1 %t234, label %then9171, label %endif9173 +then9171: + %t235 = load ptr, ptr %a46 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic9174, label %ok9175 +panic9174: + call void @finch_panic(ptr @.str.6178, i64 5821, ptr @.str.6179) + unreachable +ok9175: + %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = extractvalue { ptr, i64, i64 } %t238, 1 + %t240 = icmp uge i64 0, %t239 + br i1 %t240, label %range9176, label %inrange9177 +range9176: + call void @finch_panic_index(ptr @.str.6180, i64 5821, i64 0, i64 %t239) + unreachable +inrange9177: + %t241 = extractvalue { ptr, i64, i64 } %t238, 0 + %t242 = getelementptr inbounds %S.ast.Program, ptr %t241, i64 0 + %t243 = getelementptr inbounds %S.ast.Program, ptr %t242, i32 0, i32 2 + %t244 = load { ptr, i64, i64 }, ptr %t243 + store { ptr, i64, i64 } %t244, ptr %a245 + call void @finch.copy.arr_str(ptr %a246, ptr %a245) + %t247 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t247, ptr %a248 + %t249 = load ptr, ptr %a46 + %t250 = load { ptr, i64, i64 }, ptr %a248 + call void @finch.gen.indexAll(ptr %t249, { ptr, i64, i64 } %t250) + %t251 = load ptr, ptr %a46 + %t252 = icmp eq ptr %t251, null + br i1 %t252, label %panic9178, label %ok9179 +panic9178: + call void @finch_panic(ptr @.str.6181, i64 5823, ptr @.str.6182) + unreachable +ok9179: + %t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 29 + %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6183, i64 1, i64 0 }, ptr %a255 + call void @finch_str_join(ptr %a256, ptr %t253, ptr %a255) + %t257 = load { ptr, i64, i64 }, ptr %a256 + call void @finch.drop.arr_str(ptr %a248) + call void @finch.drop.S_gen_Gen(ptr %a45) + ret { ptr, i64, i64 } %t257 +endif9173: + %t258 = load ptr, ptr %a46 + %t259 = icmp eq ptr %t258, null + br i1 %t259, label %panic9206, label %ok9207 +panic9206: + call void @finch_panic(ptr @.str.6184, i64 5825, ptr @.str.6185) + unreachable +ok9207: + %t260 = getelementptr inbounds %S.gen.Gen, ptr %t258, i32 0, i32 15 + store i64 0, ptr %a261 + br label %each.cond9208 +each.cond9208: + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 + %t263 = load i64, ptr %t262 + %t264 = load i64, ptr %a261 + %t265 = icmp slt i64 %t264, %t263 + br i1 %t265, label %each.body9209, label %each.end9211 +each.body9209: + %t266 = load ptr, ptr %t260 + %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i64 %t264 + %t268 = load %S.gen.FnSig, ptr %t267 + store %S.gen.FnSig %t268, ptr %a269 + %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a269, i32 0, i32 5 + %t271 = load i1, ptr %t270 + br i1 %t271, label %then9212, label %endif9214 +then9212: + %t272 = load ptr, ptr %a46 + %t273 = load %S.gen.FnSig, ptr %a269 + %t274 = call { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %t272, %S.gen.FnSig %t273) + store { ptr, i64, i64 } %t274, ptr %a275 + call void @finch_str_drop(ptr %a275) + br label %endif9214 +endif9214: + br label %each.step9210 +each.step9210: + %t276 = load i64, ptr %a261 + %t277 = add i64 %t276, 1 + store i64 %t277, ptr %a261 + br label %each.cond9208 +each.end9211: + %t278 = load i1, ptr %a7 + br i1 %t278, label %then9215, label %endif9217 +then9215: + store { ptr, i64, i64 } { ptr @.str.6186, i64 0, i64 0 }, ptr %a279 + %t280 = load ptr, ptr %a46 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic9218, label %ok9219 +panic9218: + call void @finch_panic(ptr @.str.6187, i64 5833, ptr @.str.6188) + unreachable +ok9219: + %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 31 + %t283 = getelementptr inbounds %S.platform.Target, ptr %t282, i32 0, i32 1 + %t284 = load i1, ptr %t283 + br i1 %t284, label %then9220, label %endif9222 +then9220: + %t285 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6189, i64 10, i64 0 }, ptr %a279 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + br label %endif9222 +endif9222: + %t287 = load ptr, ptr %a46 + %t288 = icmp eq ptr %t287, null + br i1 %t288, label %panic9223, label %ok9224 +panic9223: + call void @finch_panic(ptr @.str.6190, i64 5836, ptr @.str.6191) + unreachable +ok9224: + %t289 = getelementptr inbounds %S.gen.Gen, ptr %t287, i32 0, i32 3 + %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 + %t291 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6192, i64 6, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t295, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.6193, i64 107, i64 0 }, ptr %a298 + call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) + store { ptr, i64, i64 } %t295, ptr %a299 + call void @finch_str_drop(ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a296 + %t301 = load i64, ptr %t290 + %t302 = add i64 %t301, 1 + call void @finch_arr_reserve(ptr %t289, i64 %t302, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t303 = load ptr, ptr %t289 + %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t303, i64 %t301 + store { ptr, i64, i64 } %t300, ptr %t304 + store i64 %t302, ptr %t290 + %t305 = load ptr, ptr %a46 + %t306 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t305) + call void @finch_str_drop(ptr %a279) + call void @finch.drop.S_gen_Gen(ptr %a45) + ret { ptr, i64, i64 } %t306 +endif9217: + %t307 = load ptr, ptr %a46 + %t308 = icmp eq ptr %t307, null + br i1 %t308, label %panic9225, label %ok9226 +panic9225: + call void @finch_panic(ptr @.str.6194, i64 5840, ptr @.str.6195) + unreachable +ok9226: + %t309 = getelementptr inbounds %S.gen.Gen, ptr %t307, i32 0, i32 15 + %t310 = load i64, ptr %a155 + %t311 = load { ptr, i64, i64 }, ptr %t309 + %t312 = extractvalue { ptr, i64, i64 } %t311, 1 + %t313 = icmp uge i64 %t310, %t312 + br i1 %t313, label %range9227, label %inrange9228 +range9227: + call void @finch_panic_index(ptr @.str.6196, i64 5840, i64 %t310, i64 %t312) + unreachable +inrange9228: + %t314 = extractvalue { ptr, i64, i64 } %t311, 0 + %t315 = getelementptr inbounds %S.gen.FnSig, ptr %t314, i64 %t310 + %t316 = load %S.gen.FnSig, ptr %t315 + store %S.gen.FnSig %t316, ptr %a317 + call void @finch.copy.S_gen_FnSig(ptr %a318, ptr %a317) + %t319 = load %S.gen.FnSig, ptr %a318 + store %S.gen.FnSig %t319, ptr %a320 + %t321 = load ptr, ptr %a46 + %t322 = load %S.gen.FnSig, ptr %a320 + %t323 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t321, %S.gen.FnSig %t322) + store { ptr, i64, i64 } { ptr @.str.6197, i64 5, i64 0 }, ptr %a325 + store { ptr, i64, i64 } %t323, ptr %a326 + call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) + store { ptr, i64, i64 } %t323, ptr %a327 + call void @finch_str_drop(ptr %a327) + %t328 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6198, i64 1, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + store { ptr, i64, i64 } %t328, ptr %a332 + call void @finch_str_drop(ptr %a332) + %t333 = load { ptr, i64, i64 }, ptr %a329 + %t334 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 11 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t333, ptr %a337 + store { ptr, i64, i64 } %t335, ptr %a338 + call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) + store { ptr, i64, i64 } %t333, ptr %a339 + call void @finch_str_drop(ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t340, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.6199, i64 1, i64 0 }, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t340, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load { ptr, i64, i64 }, ptr %a341 + store { ptr, i64, i64 } %t345, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6200, i64 0, i64 0 }, ptr %a347 + %t348 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 13 + %t349 = getelementptr inbounds { ptr, i64, i64 }, ptr %t348, i32 0, i32 1 + %t350 = load i64, ptr %t349 + %t351 = icmp eq i64 %t350, 1 + br i1 %t351, label %then9229, label %endif9231 +then9229: + %t352 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6201, i64 133, i64 0 }, ptr %a347 + store { ptr, i64, i64 } %t352, ptr %a353 + call void @finch_str_drop(ptr %a353) + %t354 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t354, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.6202, i64 20, i64 0 }, ptr %a357 + call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a355 + %t359 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t358, ptr %a346 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + br label %endif9231 +endif9231: + %t361 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t361, ptr %a363 + store { ptr, i64, i64 } { ptr @.str.6203, i64 1, i64 0 }, ptr %a364 + call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a362 + %t366 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t365, ptr %a346 + store { ptr, i64, i64 } %t366, ptr %a367 + call void @finch_str_drop(ptr %a367) + store { ptr, i64, i64 } { ptr @.str.6204, i64 12, i64 0 }, ptr %a368 + %t369 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 9 + %t370 = load i1, ptr %t369 + br i1 %t370, label %then9232, label %else9233 +then9232: + %t371 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6205, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + %t375 = load { ptr, i64, i64 }, ptr %a372 + %t376 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t375, ptr %a346 + store { ptr, i64, i64 } %t376, ptr %a377 + call void @finch_str_drop(ptr %a377) + %t378 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t378, ptr %a380 + store { ptr, i64, i64 } { ptr @.str.6206, i64 2, i64 0 }, ptr %a381 + call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a379 + %t383 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t382, ptr %a385 + store { ptr, i64, i64 } %t383, ptr %a386 + call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) + store { ptr, i64, i64 } %t382, ptr %a387 + call void @finch_str_drop(ptr %a387) + %t388 = load { ptr, i64, i64 }, ptr %a384 + store { ptr, i64, i64 } %t388, ptr %a390 + store { ptr, i64, i64 } { ptr @.str.6207, i64 1, i64 0 }, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t388, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + %t394 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t393, ptr %a347 + store { ptr, i64, i64 } %t394, ptr %a395 + call void @finch_str_drop(ptr %a395) + %t396 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6208, i64 0, i64 0 }, ptr %a346 + store { ptr, i64, i64 } %t396, ptr %a397 + call void @finch_str_drop(ptr %a397) + %t398 = load ptr, ptr %a46 + %t399 = load %S.gen.FnSig, ptr %a320 + %t400 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t398, %S.gen.FnSig %t399) + store { ptr, i64, i64 } %t400, ptr %a401 + %t402 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t402, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.6209, i64 21, i64 0 }, ptr %a405 + call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a403 + %t407 = load { ptr, i64, i64 }, ptr %a401 + store { ptr, i64, i64 } %t406, ptr %a409 + store { ptr, i64, i64 } %t407, ptr %a410 + call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410) + store { ptr, i64, i64 } %t406, ptr %a411 + call void @finch_str_drop(ptr %a411) + %t412 = load { ptr, i64, i64 }, ptr %a408 + store { ptr, i64, i64 } %t412, ptr %a414 + store { ptr, i64, i64 } { ptr @.str.6210, i64 62, i64 0 }, ptr %a415 + call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) + store { ptr, i64, i64 } %t412, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a413 + %t418 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t417, ptr %a347 + store { ptr, i64, i64 } %t418, ptr %a419 + call void @finch_str_drop(ptr %a419) + %t420 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t420, ptr %a422 + store { ptr, i64, i64 } { ptr @.str.6211, i64 20, i64 0 }, ptr %a423 + call void @finch_str_concat(ptr %a421, ptr %a422, ptr %a423) + %t424 = load { ptr, i64, i64 }, ptr %a421 + %t425 = load { ptr, i64, i64 }, ptr %a401 + store { ptr, i64, i64 } %t424, ptr %a427 + store { ptr, i64, i64 } %t425, ptr %a428 + call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) + store { ptr, i64, i64 } %t424, ptr %a429 + call void @finch_str_drop(ptr %a429) + %t430 = load { ptr, i64, i64 }, ptr %a426 + store { ptr, i64, i64 } %t430, ptr %a432 + store { ptr, i64, i64 } { ptr @.str.6212, i64 78, i64 0 }, ptr %a433 + call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) + store { ptr, i64, i64 } %t430, ptr %a434 + call void @finch_str_drop(ptr %a434) + %t435 = load { ptr, i64, i64 }, ptr %a431 + %t436 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t435, ptr %a347 + store { ptr, i64, i64 } %t436, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t438, ptr %a440 + store { ptr, i64, i64 } { ptr @.str.6213, i64 62, i64 0 }, ptr %a441 + call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) + %t442 = load { ptr, i64, i64 }, ptr %a439 + %t443 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t442, ptr %a347 + store { ptr, i64, i64 } %t443, ptr %a444 + call void @finch_str_drop(ptr %a444) + %t445 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 + %t446 = getelementptr inbounds %S.ast.Type, ptr %t445, i32 0, i32 0 + %t447 = load { ptr, i64, i64 }, ptr %t446 + store { ptr, i64, i64 } %t447, ptr %a448 + store { ptr, i64, i64 } { ptr @.str.6214, i64 3, i64 0 }, ptr %a449 + %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) + %t451 = icmp ne i32 %t450, 0 + br i1 %t451, label %then9235, label %endif9237 +then9235: + %t452 = load { ptr, i64, i64 }, ptr %a401 + store { ptr, i64, i64 } { ptr @.str.6215, i64 20, i64 0 }, ptr %a454 + store { ptr, i64, i64 } %t452, ptr %a455 + call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) + %t456 = load { ptr, i64, i64 }, ptr %a453 + store { ptr, i64, i64 } %t456, ptr %a458 + store { ptr, i64, i64 } { ptr @.str.6216, i64 53, i64 0 }, ptr %a459 + call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459) + store { ptr, i64, i64 } %t456, ptr %a460 + call void @finch_str_drop(ptr %a460) + %t461 = load { ptr, i64, i64 }, ptr %a457 + %t462 = load { ptr, i64, i64 }, ptr %a368 + store { ptr, i64, i64 } %t461, ptr %a368 + store { ptr, i64, i64 } %t462, ptr %a463 + call void @finch_str_drop(ptr %a463) + br label %endif9237 +endif9237: + call void @finch_str_drop(ptr %a401) + br label %endif9234 +else9233: + %t464 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 + %t465 = getelementptr inbounds %S.ast.Type, ptr %t464, i32 0, i32 0 + %t466 = load { ptr, i64, i64 }, ptr %t465 + store { ptr, i64, i64 } %t466, ptr %a467 + store { ptr, i64, i64 } { ptr @.str.6217, i64 3, i64 0 }, ptr %a468 + %t469 = call i32 @finch_str_eq(ptr %a467, ptr %a468) + %t470 = icmp ne i32 %t469, 0 + br i1 %t470, label %then9238, label %endif9240 +then9238: + %t471 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6218, i64 5, i64 0 }, ptr %a473 + store { ptr, i64, i64 } %t471, ptr %a474 + call void @finch_str_concat(ptr %a472, ptr %a473, ptr %a474) + %t475 = load { ptr, i64, i64 }, ptr %a472 + %t476 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t475, ptr %a346 + store { ptr, i64, i64 } %t476, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = load { ptr, i64, i64 }, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.6219, i64 46, i64 0 }, ptr %a368 + store { ptr, i64, i64 } %t478, ptr %a479 + call void @finch_str_drop(ptr %a479) + br label %endif9240 +endif9240: + br label %endif9234 +endif9234: + %t480 = load ptr, ptr %a46 + %t481 = icmp eq ptr %t480, null + br i1 %t481, label %panic9241, label %ok9242 +panic9241: + call void @finch_panic(ptr @.str.6220, i64 5865, ptr @.str.6221) + unreachable +ok9242: + %t482 = getelementptr inbounds %S.gen.Gen, ptr %t480, i32 0, i32 3 + %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 + %t484 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6222, i64 48, i64 0 }, ptr %a486 + store { ptr, i64, i64 } %t484, ptr %a487 + call void @finch_str_concat(ptr %a485, ptr %a486, ptr %a487) + %t488 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } %t488, ptr %a490 + store { ptr, i64, i64 } { ptr @.str.6223, i64 2, i64 0 }, ptr %a491 + call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491) + store { ptr, i64, i64 } %t488, ptr %a492 + call void @finch_str_drop(ptr %a492) + %t493 = load { ptr, i64, i64 }, ptr %a489 + %t494 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t493, ptr %a496 + store { ptr, i64, i64 } %t494, ptr %a497 + call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497) + store { ptr, i64, i64 } %t493, ptr %a498 + call void @finch_str_drop(ptr %a498) + %t499 = load { ptr, i64, i64 }, ptr %a495 + store { ptr, i64, i64 } %t499, ptr %a501 + store { ptr, i64, i64 } { ptr @.str.6224, i64 1, i64 0 }, ptr %a502 + call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) + store { ptr, i64, i64 } %t499, ptr %a503 + call void @finch_str_drop(ptr %a503) + %t504 = load { ptr, i64, i64 }, ptr %a500 + %t505 = load { ptr, i64, i64 }, ptr %a368 + store { ptr, i64, i64 } %t504, ptr %a507 + store { ptr, i64, i64 } %t505, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t504, ptr %a509 + call void @finch_str_drop(ptr %a509) + %t510 = load { ptr, i64, i64 }, ptr %a506 + store { ptr, i64, i64 } %t510, ptr %a512 + store { ptr, i64, i64 } { ptr @.str.6225, i64 2, i64 0 }, ptr %a513 + call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) + store { ptr, i64, i64 } %t510, ptr %a514 + call void @finch_str_drop(ptr %a514) + %t515 = load { ptr, i64, i64 }, ptr %a511 + %t516 = load i64, ptr %t483 + %t517 = add i64 %t516, 1 + call void @finch_arr_reserve(ptr %t482, i64 %t517, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t518 = load ptr, ptr %t482 + %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 %t516 + store { ptr, i64, i64 } %t515, ptr %t519 + store i64 %t517, ptr %t483 + %t520 = load ptr, ptr %a46 + %t521 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t520) + call void @finch_str_drop(ptr %a368) + call void @finch_str_drop(ptr %a347) + call void @finch_str_drop(ptr %a346) + call void @finch.drop.S_gen_FnSig(ptr %a320) + call void @finch.drop.S_gen_Gen(ptr %a45) + ret { ptr, i64, i64 } %t521 +} + +define internal %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + %t8 = insertvalue %S.docs.Doc zeroinitializer, { ptr, i64, i64 } %t7, 0 + %t9 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + %t13 = insertvalue %S.docs.Doc %t8, { ptr, i64, i64 } %t12, 1 + %t14 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_copy(ptr %a16, ptr %a15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + %t18 = insertvalue %S.docs.Doc %t13, { ptr, i64, i64 } %t17, 2 + ret %S.docs.Doc %t18 +} + +define internal { ptr, i64, i64 } @finch.docs.builtins() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6226, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6227, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6228, i64 78, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6229, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6230, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.6231, i64 77, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6232, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6233, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6234, i64 121, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6235, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6236, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.6237, i64 83, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6238, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6239, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6240, i64 29, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6241, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6242, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6243, i64 73, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6244, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6245, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6246, i64 98, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6247, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6248, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.6249, i64 66, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6250, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6251, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6252, i64 48, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6253, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6254, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6255, i64 77, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6256, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6257, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6258, i64 66, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6259, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6260, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6261, i64 73, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6262, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6263, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6264, i64 61, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6265, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6266, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6267, i64 130, i64 0 }) + %t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6268, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6269, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6270, i64 75, i64 0 }) + %t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6271, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6272, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6273, i64 29, i64 0 }) + %t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6274, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6275, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6276, i64 26, i64 0 }) + %t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6277, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6278, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6279, i64 88, i64 0 }) + %t19 = mul i64 18, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t20 = call ptr @finch_alloc(i64 %t19) + %t21 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 0 + store %S.docs.Doc %t1, ptr %t21 + %t22 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 1 + store %S.docs.Doc %t2, ptr %t22 + %t23 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 2 + store %S.docs.Doc %t3, ptr %t23 + %t24 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 3 + store %S.docs.Doc %t4, ptr %t24 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 4 + store %S.docs.Doc %t5, ptr %t25 + %t26 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 5 + store %S.docs.Doc %t6, ptr %t26 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 6 + store %S.docs.Doc %t7, ptr %t27 + %t28 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 7 + store %S.docs.Doc %t8, ptr %t28 + %t29 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 8 + store %S.docs.Doc %t9, ptr %t29 + %t30 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 9 + store %S.docs.Doc %t10, ptr %t30 + %t31 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 10 + store %S.docs.Doc %t11, ptr %t31 + %t32 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 11 + store %S.docs.Doc %t12, ptr %t32 + %t33 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 12 + store %S.docs.Doc %t13, ptr %t33 + %t34 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 13 + store %S.docs.Doc %t14, ptr %t34 + %t35 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 14 + store %S.docs.Doc %t15, ptr %t35 + %t36 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 15 + store %S.docs.Doc %t16, ptr %t36 + %t37 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 16 + store %S.docs.Doc %t17, ptr %t37 + %t38 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 17 + store %S.docs.Doc %t18, ptr %t38 + %t39 = insertvalue { ptr, i64, i64 } undef, ptr %t20, 0 + %t40 = insertvalue { ptr, i64, i64 } %t39, i64 18, 1 + %t41 = insertvalue { ptr, i64, i64 } %t40, i64 18, 2 + ret { ptr, i64, i64 } %t41 +} + +define internal { ptr, i64, i64 } @finch.docs.arrayMethods() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6280, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6281, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6282, i64 23, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6283, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6284, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6285, i64 40, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6286, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6287, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6288, i64 18, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6289, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6290, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6291, i64 43, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6292, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6293, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6294, i64 38, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6295, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6296, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6297, i64 37, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6298, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6299, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6300, i64 19, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6301, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6302, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6303, i64 46, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6304, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6305, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6306, i64 22, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6307, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6308, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6309, i64 18, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6310, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6311, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6312, i64 37, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6313, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6314, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6315, i64 18, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6316, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6317, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6318, i64 45, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6319, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6320, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6321, i64 47, i64 0 }) + %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t16 = call ptr @finch_alloc(i64 %t15) + %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 + store %S.docs.Doc %t1, ptr %t17 + %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 + store %S.docs.Doc %t2, ptr %t18 + %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 + store %S.docs.Doc %t3, ptr %t19 + %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 + store %S.docs.Doc %t4, ptr %t20 + %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 + store %S.docs.Doc %t5, ptr %t21 + %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 + store %S.docs.Doc %t6, ptr %t22 + %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 + store %S.docs.Doc %t7, ptr %t23 + %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 + store %S.docs.Doc %t8, ptr %t24 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 + store %S.docs.Doc %t9, ptr %t25 + %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 + store %S.docs.Doc %t10, ptr %t26 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 + store %S.docs.Doc %t11, ptr %t27 + %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 + store %S.docs.Doc %t12, ptr %t28 + %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 + store %S.docs.Doc %t13, ptr %t29 + %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 + store %S.docs.Doc %t14, ptr %t30 + %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 + %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 + %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.docs.strMethods() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6322, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6323, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 20, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6325, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6326, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6327, i64 59, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6328, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6329, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.6330, i64 29, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6331, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6332, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6333, i64 22, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6334, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6335, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 24, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6337, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6338, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6339, i64 27, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6340, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6341, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6342, i64 25, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6343, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6344, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6345, i64 62, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6346, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6347, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6348, i64 41, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6349, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6350, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6351, i64 24, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6352, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6353, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6354, i64 24, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6355, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6356, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6357, i64 26, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6358, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6359, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6360, i64 17, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6361, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6362, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6363, i64 22, i64 0 }) + %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t16 = call ptr @finch_alloc(i64 %t15) + %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 + store %S.docs.Doc %t1, ptr %t17 + %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 + store %S.docs.Doc %t2, ptr %t18 + %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 + store %S.docs.Doc %t3, ptr %t19 + %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 + store %S.docs.Doc %t4, ptr %t20 + %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 + store %S.docs.Doc %t5, ptr %t21 + %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 + store %S.docs.Doc %t6, ptr %t22 + %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 + store %S.docs.Doc %t7, ptr %t23 + %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 + store %S.docs.Doc %t8, ptr %t24 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 + store %S.docs.Doc %t9, ptr %t25 + %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 + store %S.docs.Doc %t10, ptr %t26 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 + store %S.docs.Doc %t11, ptr %t27 + %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 + store %S.docs.Doc %t12, ptr %t28 + %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 + store %S.docs.Doc %t13, ptr %t29 + %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 + store %S.docs.Doc %t14, ptr %t30 + %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 + %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 + %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.docs.mapMethods() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6364, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6365, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6366, i64 19, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6367, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6368, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6369, i64 22, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6370, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6371, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6372, i64 53, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6373, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6374, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6375, i64 52, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6376, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6377, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6378, i64 19, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6379, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6380, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6381, i64 39, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6382, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6383, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6384, i64 47, i64 0 }) + %t8 = mul i64 7, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t9 = call ptr @finch_alloc(i64 %t8) + %t10 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 0 + store %S.docs.Doc %t1, ptr %t10 + %t11 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 1 + store %S.docs.Doc %t2, ptr %t11 + %t12 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 2 + store %S.docs.Doc %t3, ptr %t12 + %t13 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 3 + store %S.docs.Doc %t4, ptr %t13 + %t14 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 4 + store %S.docs.Doc %t5, ptr %t14 + %t15 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 5 + store %S.docs.Doc %t6, ptr %t15 + %t16 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 6 + store %S.docs.Doc %t7, ptr %t16 + %t17 = insertvalue { ptr, i64, i64 } undef, ptr %t9, 0 + %t18 = insertvalue { ptr, i64, i64 } %t17, i64 7, 1 + %t19 = insertvalue { ptr, i64, i64 } %t18, i64 7, 2 + ret { ptr, i64, i64 } %t19 +} + +define internal { ptr, i64, i64 } @finch.docs.keywords() { +entry: + + %t1 = mul i64 22, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6385, i64 2, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6386, i64 6, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 + store { ptr, i64, i64 } { ptr @.str.6387, i64 2, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 + store { ptr, i64, i64 } { ptr @.str.6388, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 + store { ptr, i64, i64 } { ptr @.str.6389, i64 5, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 + store { ptr, i64, i64 } { ptr @.str.6390, i64 3, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 + store { ptr, i64, i64 } { ptr @.str.6391, i64 2, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 + store { ptr, i64, i64 } { ptr @.str.6392, i64 5, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 + store { ptr, i64, i64 } { ptr @.str.6393, i64 8, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 + store { ptr, i64, i64 } { ptr @.str.6394, i64 4, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 + store { ptr, i64, i64 } { ptr @.str.6395, i64 5, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 + store { ptr, i64, i64 } { ptr @.str.6396, i64 4, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 + store { ptr, i64, i64 } { ptr @.str.6397, i64 6, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 + store { ptr, i64, i64 } { ptr @.str.6398, i64 4, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 + store { ptr, i64, i64 } { ptr @.str.6399, i64 6, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 + store { ptr, i64, i64 } { ptr @.str.6400, i64 4, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 + store { ptr, i64, i64 } { ptr @.str.6401, i64 5, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 + store { ptr, i64, i64 } { ptr @.str.6402, i64 6, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 + store { ptr, i64, i64 } { ptr @.str.6403, i64 5, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 + store { ptr, i64, i64 } { ptr @.str.6404, i64 2, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 + store { ptr, i64, i64 } { ptr @.str.6405, i64 3, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 + store { ptr, i64, i64 } { ptr @.str.6406, i64 4, i64 0 }, ptr %t24 + %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t26 = insertvalue { ptr, i64, i64 } %t25, i64 22, 1 + %t27 = insertvalue { ptr, i64, i64 } %t26, i64 22, 2 + ret { ptr, i64, i64 } %t27 +} + +define internal { ptr, i64, i64 } @finch.docs.typeNames() { +entry: + + %t1 = mul i64 17, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6407, i64 3, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6408, i64 5, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 + store { ptr, i64, i64 } { ptr @.str.6409, i64 4, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 + store { ptr, i64, i64 } { ptr @.str.6410, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 + store { ptr, i64, i64 } { ptr @.str.6411, i64 3, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 + store { ptr, i64, i64 } { ptr @.str.6412, i64 3, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 + store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 + store { ptr, i64, i64 } { ptr @.str.6414, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 + store { ptr, i64, i64 } { ptr @.str.6415, i64 3, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 + store { ptr, i64, i64 } { ptr @.str.6416, i64 3, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 + store { ptr, i64, i64 } { ptr @.str.6417, i64 3, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 + store { ptr, i64, i64 } { ptr @.str.6418, i64 2, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 + store { ptr, i64, i64 } { ptr @.str.6419, i64 3, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 + store { ptr, i64, i64 } { ptr @.str.6420, i64 3, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 + store { ptr, i64, i64 } { ptr @.str.6421, i64 3, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 + store { ptr, i64, i64 } { ptr @.str.6422, i64 3, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 + store { ptr, i64, i64 } { ptr @.str.6423, i64 3, i64 0 }, ptr %t19 + %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t21 = insertvalue { ptr, i64, i64 } %t20, i64 17, 1 + %t22 = insertvalue { ptr, i64, i64 } %t21, i64 17, 2 + ret { ptr, i64, i64 } %t22 +} + +define internal void @finch.copy.S_docs_Doc(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.docs.Doc, ptr %src + store %S.docs.Doc %t1, ptr %dst + %t2 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca %S.docs.Doc, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca %S.docs.Doc, align 16 + %a21 = alloca %S.docs.Doc, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond9243 +each.cond9243: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body9244, label %each.end9246 +each.body9244: + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 + %t10 = load %S.docs.Doc, ptr %t9 + store %S.docs.Doc %t10, ptr %a11 + %t12 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } %t14, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br i1 %t18, label %then9247, label %endif9249 +then9247: + %t19 = load %S.docs.Doc, ptr %a11 + store %S.docs.Doc %t19, ptr %a20 + call void @finch.copy.S_docs_Doc(ptr %a21, ptr %a20) + %t22 = load %S.docs.Doc, ptr %a21 + ret %S.docs.Doc %t22 +endif9249: + br label %each.step9245 +each.step9245: + %t23 = load i64, ptr %a3 + %t24 = add i64 %t23, 1 + store i64 %t24, ptr %a3 + br label %each.cond9243 +each.end9246: + ret %S.docs.Doc zeroinitializer +} + +define internal { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %p0) { +entry: + %a1 = alloca %S.docs.Doc, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + store %S.docs.Doc %p0, ptr %a1 + %t2 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 1 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } { ptr @.str.6424, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t3, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6425, i64 5, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + %t13 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 2 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t12, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t12, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + ret { ptr, i64, i64 } %t19 +} + +define internal { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %p0) { +entry: + %a1 = alloca %S.C.CXString, align 16 + %a3 = alloca [32 x i8], align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca [32 x i8], align 16 + store %S.C.CXString %p0, ptr %a1 + %t2 = load %S.C.CXString, ptr %a1 + store %S.C.CXString %t2, ptr %a3 + %t4 = getelementptr inbounds i8, ptr %a3, i64 0 + %t5 = load i64, ptr %t4 + %t6 = getelementptr inbounds i8, ptr %a3, i64 8 + %t7 = load i64, ptr %t6 + %t8 = call ptr @clang_getCString(i64 %t5, i64 %t7) + store { ptr, i64, i64 } zeroinitializer, ptr %a9 + call void @finch_str_from_c(ptr %a9, ptr %t8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t13, ptr %a14 + %t15 = load %S.C.CXString, ptr %a1 + store %S.C.CXString %t15, ptr %a16 + %t17 = getelementptr inbounds i8, ptr %a16, i64 0 + %t18 = load i64, ptr %t17 + %t19 = getelementptr inbounds i8, ptr %a16, i64 8 + %t20 = load i64, ptr %t19 + call void @clang_disposeString(i64 %t18, i64 %t20) + %t21 = load { ptr, i64, i64 }, ptr %a14 + ret { ptr, i64, i64 } %t21 +} + +define internal %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t2, ptr %a3 + call void @finch.copy.S_ast_Type(ptr %a4, ptr %a3) + %t5 = load %S.ast.Type, ptr %a4 + %t6 = insertvalue %S.cimport.Mapped zeroinitializer, %S.ast.Type %t5, 0 + %t7 = insertvalue %S.cimport.Mapped %t6, i1 true, 2 + ret %S.cimport.Mapped %t7 +} + +define internal %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.cimport.Mapped zeroinitializer, { ptr, i64, i64 } %t5, 1 + %t7 = insertvalue %S.cimport.Mapped %t6, i1 false, 2 + ret %S.cimport.Mapped %t7 +} + +define internal %S.ast.Type @finch.cimport.fixed(%S.ast.Type %p0, i64 %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca i64, align 16 + %a6 = alloca %S.ast.Type, align 16 + %a10 = alloca %S.ast.Type, align 16 + %a11 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6426, i64 5, i64 0 }, 0 + %t4 = load i64, ptr %a2 + %t5 = insertvalue %S.ast.Type %t3, i64 %t4, 4 + store %S.ast.Type %t5, ptr %a6 + %t7 = getelementptr inbounds %S.ast.Type, ptr %a6, i32 0, i32 1 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 + %t9 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t9, ptr %a10 + call void @finch.copy.S_ast_Type(ptr %a11, ptr %a10) + %t12 = load %S.ast.Type, ptr %a11 + %t13 = load i64, ptr %t8 + %t14 = add i64 %t13, 1 + call void @finch_arr_reserve(ptr %t7, i64 %t14, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t15 = load ptr, ptr %t7 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 + store %S.ast.Type %t12, ptr %t16 + store i64 %t14, ptr %t8 + %t17 = load %S.ast.Type, ptr %a6 + ret %S.ast.Type %t17 +} + +define internal { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca i1, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca i64, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t3, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6427, i64 15, i64 0 }, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + %t9 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a10, i64 %t9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t8, ptr %a15 + call void @finch_str_drop(ptr %a15) + store { ptr, i64, i64 } %t11, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6428, i64 4, i64 0 }, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.6429, i64 13, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t29, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.6430, i64 2, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t43, ptr %a44 + %t45 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.6431, i64 0, i64 0 }, ptr %a47 + %t48 = call i32 @finch_write_file(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + %t50 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6432, i64 12, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a51 + %t55 = load { ptr, i64, i64 }, ptr %a44 + %t56 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t54, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t54, ptr %a60 + call void @finch_str_drop(ptr %a60) + store { ptr, i64, i64 } %t56, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t62, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.6433, i64 4, i64 0 }, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + %t68 = load { ptr, i64, i64 }, ptr %a23 + %t69 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t68) + store { ptr, i64, i64 } %t67, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t67, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t69, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t75, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.6434, i64 3, i64 0 }, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = call { ptr, i64, i64 } @finch.host.nullDevice() + store { ptr, i64, i64 } %t80, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t80, ptr %a85 + call void @finch_str_drop(ptr %a85) + store { ptr, i64, i64 } %t81, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a82 + %t88 = call i64 @finch.host.run({ ptr, i64, i64 } %t87) + store { ptr, i64, i64 } %t87, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a44 + call void @finch.host.remove({ ptr, i64, i64 } %t90) + %t91 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i32 @finch_file_exists(ptr %a92) + %t94 = icmp ne i32 %t93, 0 + %t95 = xor i1 %t94, true + br i1 %t95, label %then9250, label %endif9252 +then9250: + %t96 = load { ptr, i64, i64 }, ptr %a2 + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a23) + ret { ptr, i64, i64 } %t96 +endif9252: + store i1 false, ptr %a97 + %t98 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_read_file(ptr %a100, ptr %a99, ptr @.str.6435, i64 114) + %t101 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t101, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.6437, i64 1, i64 0 }, ptr %a104 + call void @finch_str_split(ptr %a105, ptr %a102, ptr %a104) + %t106 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } %t101, ptr %a107 + call void @finch_str_drop(ptr %a107) + store { ptr, i64, i64 } %t106, ptr %a108 + store i64 0, ptr %a109 + br label %each.cond9253 +each.cond9253: + %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %a108, i32 0, i32 1 + %t111 = load i64, ptr %t110 + %t112 = load i64, ptr %a109 + %t113 = icmp slt i64 %t112, %t111 + br i1 %t113, label %each.body9254, label %each.end9256 +each.body9254: + %t114 = load ptr, ptr %a108 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 %t112 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + %t118 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_trim(ptr %a120, ptr %a119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t121, ptr %a122 + %t123 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t123, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.6440, i64 34, i64 0 }, ptr %a126 + %t127 = call i32 @finch_str_starts(ptr %a124, ptr %a126) + %t128 = icmp ne i32 %t127, 0 + br i1 %t128, label %then9257, label %endif9259 +then9257: + store i1 true, ptr %a97 + call void @finch_str_drop(ptr %a122) + br label %each.step9255 +endif9259: + %t129 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t129, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6442, i64 19, i64 0 }, ptr %a132 + %t133 = call i32 @finch_str_starts(ptr %a130, ptr %a132) + %t134 = icmp ne i32 %t133, 0 + br i1 %t134, label %then9260, label %endif9262 +then9260: + call void @finch_str_drop(ptr %a122) + br label %each.end9256 +endif9262: + %t135 = load i1, ptr %a97 + %t136 = xor i1 %t135, true + br label %logic.from9263 +logic.from9263: + br i1 %t136, label %logic.end9265, label %logic.rhs9264 +logic.rhs9264: + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 + %t138 = load i64, ptr %t137 + %t139 = icmp eq i64 %t138, 0 + br label %logic.rend9266 +logic.rend9266: + br label %logic.end9265 +logic.end9265: + %t140 = phi i1 [ true, %logic.from9263 ], [ %t139, %logic.rend9266 ] + br i1 %t140, label %then9267, label %endif9269 +then9267: + call void @finch_str_drop(ptr %a122) + br label %each.step9255 +endif9269: + %t141 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t141, ptr %a142 + store { ptr, i64, i64 } { ptr @.str.6444, i64 22, i64 0 }, ptr %a144 + %t145 = call i32 @finch_str_ends(ptr %a142, ptr %a144) + %t146 = icmp ne i32 %t145, 0 + br i1 %t146, label %then9270, label %else9271 +then9270: + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t148 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t148, ptr %a149 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 + %t152 = load i64, ptr %t151 + %t153 = sub i64 %t152, 22 + call void @finch_str_sub(ptr %a150, ptr %a149, i64 0, i64 %t153, ptr @.str.6446, i64 128) + %t154 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } { ptr @.str.6445, i64 11, i64 0 }, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t154, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load { ptr, i64, i64 }, ptr %a155 + %t160 = load i64, ptr %t147 + %t161 = add i64 %t160, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t161, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t162 = load ptr, ptr %a2 + %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i64 %t160 + store { ptr, i64, i64 } %t159, ptr %t163 + store i64 %t161, ptr %t147 + br label %endif9272 +else9271: + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t165 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.6447, i64 8, i64 0 }, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a166 + %t170 = load i64, ptr %t164 + %t171 = add i64 %t170, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t171, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t172 = load ptr, ptr %a2 + %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i64 %t170 + store { ptr, i64, i64 } %t169, ptr %t173 + store i64 %t171, ptr %t164 + br label %endif9272 +endif9272: + call void @finch_str_drop(ptr %a122) + br label %each.step9255 +each.step9255: + %t174 = load i64, ptr %a109 + %t175 = add i64 %t174, 1 + store i64 %t175, ptr %a109 + br label %each.cond9253 +each.end9256: + call void @finch.drop.arr_str(ptr %a108) + %t176 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.host.remove({ ptr, i64, i64 } %t176) + %t177 = load { ptr, i64, i64 }, ptr %a2 + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a23) + ret { ptr, i64, i64 } %t177 +} + +define internal { ptr, i64, i64 } @finch.cimport.recordName(ptr %p0, %S.C.CXType %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXType, align 16 + %a3 = alloca %S.C.CXCursor, align 16 + %a5 = alloca %S.C.CXType, align 16 + %a7 = alloca %S.C.CXCursor, align 16 + %a9 = alloca %S.C.CXCursor, align 16 + %a11 = alloca [32 x i8], align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca %S.C.CXCursor, align 16 + %a42 = alloca [32 x i8], align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca i32, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXType %p1, ptr %a2 + %t4 = load %S.C.CXType, ptr %a2 + store %S.C.CXType %t4, ptr %a5 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a3, ptr byval(%S.C.CXType) align 8 %a5) + %t6 = load %S.C.CXCursor, ptr %a3 + store %S.C.CXCursor %t6, ptr %a7 + %t8 = load %S.C.CXCursor, ptr %a7 + store %S.C.CXCursor %t8, ptr %a9 + %t10 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a9) + store { i64, i64 } %t10, ptr %a11 + %t12 = load %S.C.CXString, ptr %a11 + %t13 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t12) + store { ptr, i64, i64 } %t13, ptr %a14 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic9273, label %ok9274 +panic9273: + call void @finch_panic(ptr @.str.6448, i64 143, ptr @.str.6449) + unreachable +ok9274: + %t17 = getelementptr inbounds %S.cimport.Importer, ptr %t15, i32 0, i32 3 + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = call i64 @finch_map_find(ptr %t17, ptr %a19, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t21 = icmp sge i64 %t20, 0 + br i1 %t21, label %then9275, label %endif9277 +then9275: + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic9278, label %ok9279 +panic9278: + call void @finch_panic(ptr @.str.6450, i64 144, ptr @.str.6451) + unreachable +ok9279: + %t24 = getelementptr inbounds %S.cimport.Importer, ptr %t22, i32 0, i32 3 + %t25 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = call i64 @finch_map_find(ptr %t24, ptr %a26, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t28 = icmp slt i64 %t27, 0 + br i1 %t28, label %map.missing9280, label %map.found9281 +map.missing9280: + store { ptr, i64, i64 } zeroinitializer, ptr %a29 + store { ptr, i64, i64 } %t25, ptr %a30 + call void @finch_buf_str(ptr %a29, ptr %a30, i32 1) + call void @finch_map_missing(ptr @.str.6452, i64 144, ptr %a29) + unreachable +map.found9281: + %t31 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t24, i32 0, i32 0 + %t32 = load ptr, ptr %t31 + %t33 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t32, i64 %t27 + %t34 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t33, i32 0, i32 2 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + call void @finch_str_drop(ptr %a14) + ret { ptr, i64, i64 } %t38 +endif9277: + %t39 = load %S.C.CXCursor, ptr %a7 + store %S.C.CXCursor %t39, ptr %a40 + %t41 = call { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8 %a40) + store { i64, i64 } %t41, ptr %a42 + %t43 = load %S.C.CXString, ptr %a42 + %t44 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t43) + store { ptr, i64, i64 } %t44, ptr %a45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = icmp eq i64 %t47, 0 + br label %logic.from9282 +logic.from9282: + br i1 %t48, label %logic.end9284, label %logic.rhs9283 +logic.rhs9283: + %t49 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6454, i64 1, i64 0 }, ptr %a52 + %t53 = call i64 @finch_str_find(ptr %a50, ptr %a52) + %t54 = icmp sge i64 %t53, 0 + br label %logic.rend9285 +logic.rend9285: + br label %logic.end9284 +logic.end9284: + %t55 = phi i1 [ true, %logic.from9282 ], [ %t54, %logic.rend9285 ] + br i1 %t55, label %then9286, label %endif9288 +then9286: + %t56 = load ptr, ptr %a1 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic9289, label %ok9290 +panic9289: + call void @finch_panic(ptr @.str.6455, i64 148, ptr @.str.6456) + unreachable +ok9290: + %t58 = getelementptr inbounds %S.cimport.Importer, ptr %t56, i32 0, i32 5 + %t59 = load i64, ptr %t58 + %t60 = add i64 %t59, 1 + store i64 %t60, ptr %t58 + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic9291, label %ok9292 +panic9291: + call void @finch_panic(ptr @.str.6458, i64 149, ptr @.str.6459) + unreachable +ok9292: + %t63 = getelementptr inbounds %S.cimport.Importer, ptr %t61, i32 0, i32 5 + %t64 = load i64, ptr %t63 + call void @finch_str_from_int(ptr %a65, i64 %t64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.6457, i64 12, i64 0 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t71, ptr %a45 + store { ptr, i64, i64 } %t72, ptr %a73 + call void @finch_str_drop(ptr %a73) + br label %endif9288 +endif9288: + %t74 = load { ptr, i64, i64 }, ptr %a45 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic9293, label %ok9294 +panic9293: + call void @finch_panic(ptr @.str.6460, i64 151, ptr @.str.6461) + unreachable +ok9294: + %t77 = getelementptr inbounds %S.cimport.Importer, ptr %t75, i32 0, i32 3 + %t78 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t78, ptr %a79 + store i32 0, ptr %a80 + %t81 = call i64 @finch_map_slot(ptr %t77, ptr %a79, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a80) + %t82 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t77, i32 0, i32 0 + %t83 = load ptr, ptr %t82 + %t84 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i64 %t81 + %t85 = load i32, ptr %a80 + %t86 = icmp ne i32 %t85, 0 + br i1 %t86, label %map.new9295, label %map.have9296 +map.new9295: + %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 1 + call void @finch_str_copy(ptr %t87, ptr %a79) + %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t88 + br label %map.have9296 +map.have9296: + %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t84, i32 0, i32 2 + store { ptr, i64, i64 } %t74, ptr %a90 + call void @finch_str_copy(ptr %a91, ptr %a90) + %t92 = load { ptr, i64, i64 }, ptr %a91 + %t93 = load { ptr, i64, i64 }, ptr %t89 + store { ptr, i64, i64 } %t92, ptr %t89 + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a45 + call void @finch_str_drop(ptr %a14) + ret { ptr, i64, i64 } %t95 +} + +define internal i32 @finch.c.cimport.visitField(ptr byval(%S.C.CXCursor) align 8 %c0, ptr %c1) { +entry: + + %t1 = load %S.C.CXCursor, ptr %c0 + %t2 = call i32 @finch.cimport.visitField(%S.C.CXCursor %t1, ptr %c1) + ret i32 %t2 +} + +define internal { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %p0, %S.C.CXType %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXType, align 16 + %a3 = alloca %S.C.CXType, align 16 + %a5 = alloca %S.C.CXType, align 16 + %a7 = alloca %S.C.CXType, align 16 + %a8 = alloca %S.C.CXCursor, align 16 + %a10 = alloca %S.C.CXType, align 16 + %a12 = alloca %S.C.CXCursor, align 16 + %a14 = alloca %S.C.CXCursor, align 16 + %a16 = alloca [32 x i8], align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca %S.C.CXType, align 16 + %a44 = alloca i64, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca i32, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca %S.C.CXType, align 16 + %a73 = alloca %S.cimport.CStruct, align 16 + %a75 = alloca %S.C.CXCursor, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca %S.cimport.FieldCtx, align 16 + %a86 = alloca %S.C.CXType, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca i32, align 16 + %a117 = alloca %S.cimport.CStruct, align 16 + %a118 = alloca %S.cimport.CStruct, align 16 + %a121 = alloca %S.cimport.CStruct, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXType %p1, ptr %a2 + %t4 = load %S.C.CXType, ptr %a2 + store %S.C.CXType %t4, ptr %a5 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a3, ptr byval(%S.C.CXType) align 8 %a5) + %t6 = load %S.C.CXType, ptr %a3 + store %S.C.CXType %t6, ptr %a7 + %t9 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t9, ptr %a10 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a8, ptr byval(%S.C.CXType) align 8 %a10) + %t11 = load %S.C.CXCursor, ptr %a8 + store %S.C.CXCursor %t11, ptr %a12 + %t13 = load %S.C.CXCursor, ptr %a12 + store %S.C.CXCursor %t13, ptr %a14 + %t15 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a14) + store { i64, i64 } %t15, ptr %a16 + %t17 = load %S.C.CXString, ptr %a16 + %t18 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t17) + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = load %S.C.CXType, ptr %a7 + %t22 = call { ptr, i64, i64 } @finch.cimport.recordName(ptr %t20, %S.C.CXType %t21) + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic9297, label %ok9298 +panic9297: + call void @finch_panic(ptr @.str.6462, i64 161, ptr @.str.6463) + unreachable +ok9298: + %t26 = getelementptr inbounds %S.cimport.Importer, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds %S.cimport.CImports, ptr %t26, i32 0, i32 3 + %t28 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t28, ptr %a29 + %t30 = call i64 @finch_map_find(ptr %t27, ptr %a29, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t31 = icmp sge i64 %t30, 0 + br label %logic.from9299 +logic.from9299: + br i1 %t31, label %logic.end9301, label %logic.rhs9300 +logic.rhs9300: + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic9302, label %ok9303 +panic9302: + call void @finch_panic(ptr @.str.6464, i64 161, ptr @.str.6465) + unreachable +ok9303: + %t34 = getelementptr inbounds %S.cimport.Importer, ptr %t32, i32 0, i32 4 + %t35 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t35, ptr %a36 + %t37 = call i64 @finch_map_find(ptr %t34, ptr %a36, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t38 = icmp sge i64 %t37, 0 + br label %logic.rend9304 +logic.rend9304: + br label %logic.end9301 +logic.end9301: + %t39 = phi i1 [ true, %logic.from9299 ], [ %t38, %logic.rend9304 ] + br i1 %t39, label %then9305, label %endif9307 +then9305: + %t40 = load { ptr, i64, i64 }, ptr %a23 + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t40 +endif9307: + %t41 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t41, ptr %a42 + %t43 = call i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8 %a42) + store i64 %t43, ptr %a44 + %t45 = load i64, ptr %a44 + %t46 = icmp slt i64 %t45, 0 + br i1 %t46, label %then9308, label %endif9310 +then9308: + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } { ptr @.str.6466, i64 0, i64 0 } +endif9310: + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic9311, label %ok9312 +panic9311: + call void @finch_panic(ptr @.str.6467, i64 168, ptr @.str.6468) + unreachable +ok9312: + %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 4 + %t50 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t50, ptr %a51 + store i32 0, ptr %a52 + %t53 = call i64 @finch_map_slot(ptr %t49, ptr %a51, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a52) + %t54 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t49, i32 0, i32 0 + %t55 = load ptr, ptr %t54 + %t56 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t55, i64 %t53 + %t57 = load i32, ptr %a52 + %t58 = icmp ne i32 %t57, 0 + br i1 %t58, label %map.new9313, label %map.have9314 +map.new9313: + %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 1 + call void @finch_str_copy(ptr %t59, ptr %a51) + %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 + store i1 false, ptr %t60 + br label %map.have9314 +map.have9314: + %t61 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t56, i32 0, i32 2 + store i1 true, ptr %t61 + %t62 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + %t66 = insertvalue %S.cimport.CStruct zeroinitializer, { ptr, i64, i64 } %t65, 0 + %t67 = load i64, ptr %a44 + %t68 = insertvalue %S.cimport.CStruct %t66, i64 %t67, 2 + %t69 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t69, ptr %a70 + %t71 = call i64 @clang_Type_getAlignOf(ptr byval(%S.C.CXType) align 8 %a70) + %t72 = insertvalue %S.cimport.CStruct %t68, i64 %t71, 3 + store %S.cimport.CStruct %t72, ptr %a73 + %t74 = load %S.C.CXCursor, ptr %a12 + store %S.C.CXCursor %t74, ptr %a75 + %t76 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a75) + %t77 = icmp eq i32 %t76, 3 + br i1 %t77, label %then9315, label %endif9317 +then9315: + %t78 = getelementptr inbounds %S.cimport.CStruct, ptr %a73, i32 0, i32 4 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } { ptr @.str.6469, i64 12, i64 0 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif9317 +endif9317: + %t81 = load ptr, ptr %a1 + %t82 = insertvalue %S.cimport.FieldCtx zeroinitializer, ptr %t81, 0 + %t83 = insertvalue %S.cimport.FieldCtx %t82, ptr %a73, 1 + store %S.cimport.FieldCtx %t83, ptr %a84 + %t85 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t85, ptr %a86 + %t87 = call i32 @clang_Type_visitFields(ptr byval(%S.C.CXType) align 8 %a86, ptr @finch.c.cimport.visitField, ptr %a84) + %t88 = load ptr, ptr %a1 + %t89 = icmp eq ptr %t88, null + br i1 %t89, label %panic9318, label %ok9319 +panic9318: + call void @finch_panic(ptr @.str.6470, i64 176, ptr @.str.6471) + unreachable +ok9319: + %t90 = getelementptr inbounds %S.cimport.Importer, ptr %t88, i32 0, i32 4 + %t91 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i64 @finch_map_find(ptr %t90, ptr %a92, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t94 = icmp sge i64 %t93, 0 + br i1 %t94, label %remove.hit9320, label %remove.end9321 +remove.hit9320: + %t95 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t90, i32 0, i32 0 + %t96 = load ptr, ptr %t95 + %t97 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t96, i64 %t93 + %t98 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t97, i32 0, i32 1 + call void @finch_str_drop(ptr %t98) + %t99 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t97, i32 0, i32 2 + call void @finch_map_remove_at(ptr %t90, i64 %t93, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64)) + br label %remove.end9321 +remove.end9321: + %t100 = load %S.cimport.CStruct, ptr %a73 + %t101 = load ptr, ptr %a1 + %t102 = icmp eq ptr %t101, null + br i1 %t102, label %panic9322, label %ok9323 +panic9322: + call void @finch_panic(ptr @.str.6472, i64 177, ptr @.str.6473) + unreachable +ok9323: + %t103 = getelementptr inbounds %S.cimport.Importer, ptr %t101, i32 0, i32 0 + %t104 = getelementptr inbounds %S.cimport.CImports, ptr %t103, i32 0, i32 3 + %t105 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t105, ptr %a106 + store i32 0, ptr %a107 + %t108 = call i64 @finch_map_slot(ptr %t104, ptr %a106, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a107) + %t109 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t104, i32 0, i32 0 + %t110 = load ptr, ptr %t109 + %t111 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t110, i64 %t108 + %t112 = load i32, ptr %a107 + %t113 = icmp ne i32 %t112, 0 + br i1 %t113, label %map.new9324, label %map.have9325 +map.new9324: + %t114 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 1 + call void @finch_str_copy(ptr %t114, ptr %a106) + %t115 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 + store %S.cimport.CStruct zeroinitializer, ptr %t115 + br label %map.have9325 +map.have9325: + %t116 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t111, i32 0, i32 2 + store %S.cimport.CStruct %t100, ptr %a117 + call void @finch.copy.S_cimport_CStruct(ptr %a118, ptr %a117) + %t119 = load %S.cimport.CStruct, ptr %a118 + %t120 = load %S.cimport.CStruct, ptr %t116 + store %S.cimport.CStruct %t119, ptr %t116 + store %S.cimport.CStruct %t120, ptr %a121 + call void @finch.drop.S_cimport_CStruct(ptr %a121) + %t122 = load ptr, ptr %a1 + %t123 = icmp eq ptr %t122, null + br i1 %t123, label %panic9326, label %ok9327 +panic9326: + call void @finch_panic(ptr @.str.6474, i64 178, ptr @.str.6475) + unreachable +ok9327: + %t124 = getelementptr inbounds %S.cimport.Importer, ptr %t122, i32 0, i32 0 + %t125 = getelementptr inbounds %S.cimport.CImports, ptr %t124, i32 0, i32 4 + %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %t125, i32 0, i32 1 + %t127 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t127, ptr %a128 + call void @finch_str_copy(ptr %a129, ptr %a128) + %t130 = load { ptr, i64, i64 }, ptr %a129 + %t131 = load i64, ptr %t126 + %t132 = add i64 %t131, 1 + call void @finch_arr_reserve(ptr %t125, i64 %t132, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t133 = load ptr, ptr %t125 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i64 %t131 + store { ptr, i64, i64 } %t130, ptr %t134 + store i64 %t132, ptr %t126 + %t135 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.S_cimport_CStruct(ptr %a73) + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t135 +} + +define internal void @finch.drop.S_cimport_Mapped(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Mapped, ptr %a, i32 0, i32 0 + call void @finch.drop.S_ast_Type(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.Mapped, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal i32 @finch.cimport.visitField(%S.C.CXCursor %p0, ptr %p1) { +entry: + %a1 = alloca %S.C.CXCursor, align 16 + %a2 = alloca ptr, align 16 + %a4 = alloca ptr, align 16 + %a6 = alloca %S.C.CXCursor, align 16 + %a8 = alloca [32 x i8], align 16 + %a12 = alloca %S.cimport.CField, align 16 + %a13 = alloca %S.C.CXType, align 16 + %a14 = alloca %S.C.CXType, align 16 + %a16 = alloca %S.C.CXCursor, align 16 + %a18 = alloca %S.C.CXType, align 16 + %a20 = alloca %S.C.CXType, align 16 + %a22 = alloca %S.C.CXCursor, align 16 + %a27 = alloca %S.C.CXType, align 16 + %a31 = alloca %S.C.CXType, align 16 + %a35 = alloca %S.C.CXCursor, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca %S.C.CXCursor, align 16 + %a52 = alloca %S.C.CXType, align 16 + %a54 = alloca %S.C.CXCursor, align 16 + %a65 = alloca %S.cimport.Mapped, align 16 + %a71 = alloca %S.ast.Type, align 16 + %a72 = alloca %S.ast.Type, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a98 = alloca %S.cimport.CField, align 16 + %a99 = alloca %S.cimport.CField, align 16 + store %S.C.CXCursor %p0, ptr %a1 + store ptr %p1, ptr %a2 + %t3 = load ptr, ptr %a2 + store ptr %t3, ptr %a4 + %t5 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t5, ptr %a6 + %t7 = call { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8 %a6) + store { i64, i64 } %t7, ptr %a8 + %t9 = load %S.C.CXString, ptr %a8 + %t10 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t9) + %t11 = insertvalue %S.cimport.CField zeroinitializer, { ptr, i64, i64 } %t10, 0 + store %S.cimport.CField %t11, ptr %a12 + %t15 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t15, ptr %a16 + call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a14, ptr byval(%S.C.CXCursor) align 8 %a16) + %t17 = load %S.C.CXType, ptr %a14 + store %S.C.CXType %t17, ptr %a18 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a13, ptr byval(%S.C.CXType) align 8 %a18) + %t19 = load %S.C.CXType, ptr %a13 + store %S.C.CXType %t19, ptr %a20 + %t21 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t21, ptr %a22 + %t23 = call i64 @clang_Cursor_getOffsetOfField(ptr byval(%S.C.CXCursor) align 8 %a22) + %t24 = sdiv i64 %t23, 8 + %t25 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 2 + store i64 %t24, ptr %t25 + %t26 = load %S.C.CXType, ptr %a20 + store %S.C.CXType %t26, ptr %a27 + %t28 = call i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8 %a27) + %t29 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 3 + store i64 %t28, ptr %t29 + %t30 = load %S.C.CXType, ptr %a20 + store %S.C.CXType %t30, ptr %a31 + %t32 = call i64 @clang_Type_getAlignOf(ptr byval(%S.C.CXType) align 8 %a31) + %t33 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 4 + store i64 %t32, ptr %t33 + %t34 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t34, ptr %a35 + %t36 = call i32 @clang_Cursor_isBitField(ptr byval(%S.C.CXCursor) align 8 %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %then9328, label %else9329 +then9328: + %t38 = load ptr, ptr %a4 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic9331, label %ok9332 +panic9331: + call void @finch_panic(ptr @.str.6477, i64 195, ptr @.str.6478) + unreachable +ok9332: + %t40 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t38, i32 0, i32 1 + %t41 = load ptr, ptr %t40 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic9333, label %ok9334 +panic9333: + call void @finch_panic(ptr @.str.6479, i64 195, ptr @.str.6480) + unreachable +ok9334: + %t43 = getelementptr inbounds %S.cimport.CStruct, ptr %t41, i32 0, i32 4 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } { ptr @.str.6476, i64 14, i64 0 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + store i1 true, ptr %t46 + br label %endif9330 +else9329: + %t47 = getelementptr inbounds %S.C.CXType, ptr %a20, i32 0, i32 0 + %t48 = load i32, ptr %t47 + %t49 = icmp eq i32 %t48, 105 + br label %logic.from9335 +logic.from9335: + br i1 %t49, label %logic.rhs9336, label %logic.end9337 +logic.rhs9336: + %t51 = load %S.C.CXType, ptr %a20 + store %S.C.CXType %t51, ptr %a52 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a50, ptr byval(%S.C.CXType) align 8 %a52) + %t53 = load %S.C.CXCursor, ptr %a50 + store %S.C.CXCursor %t53, ptr %a54 + %t55 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a54) + %t56 = icmp eq i32 %t55, 3 + br label %logic.rend9338 +logic.rend9338: + br label %logic.end9337 +logic.end9337: + %t57 = phi i1 [ false, %logic.from9335 ], [ %t56, %logic.rend9338 ] + br i1 %t57, label %then9339, label %else9340 +then9339: + %t58 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + store i1 true, ptr %t58 + br label %endif9341 +else9340: + %t59 = load ptr, ptr %a4 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic9342, label %ok9343 +panic9342: + call void @finch_panic(ptr @.str.6481, i64 200, ptr @.str.6482) + unreachable +ok9343: + %t61 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t59, i32 0, i32 0 + %t62 = load ptr, ptr %t61 + %t63 = load %S.C.CXType, ptr %a20 + %t64 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t62, %S.C.CXType %t63, i1 false, i1 false) + store %S.cimport.Mapped %t64, ptr %a65 + %t66 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 2 + %t67 = load i1, ptr %t66 + br i1 %t67, label %then9344, label %else9345 +then9344: + %t68 = getelementptr inbounds %S.cimport.Mapped, ptr %a65, i32 0, i32 0 + %t69 = load %S.ast.Type, ptr %t68 + %t70 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 1 + store %S.ast.Type %t69, ptr %a71 + call void @finch.copy.S_ast_Type(ptr %a72, ptr %a71) + %t73 = load %S.ast.Type, ptr %a72 + %t74 = load %S.ast.Type, ptr %t70 + store %S.ast.Type %t73, ptr %t70 + store %S.ast.Type %t74, ptr %a75 + call void @finch.drop.S_ast_Type(ptr %a75) + br label %endif9346 +else9345: + %t76 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + store i1 true, ptr %t76 + br label %endif9346 +endif9346: + call void @finch.drop.S_cimport_Mapped(ptr %a65) + br label %endif9341 +endif9341: + br label %endif9330 +endif9330: + %t77 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + %t78 = load i1, ptr %t77 + br i1 %t78, label %then9347, label %endif9349 +then9347: + %t79 = load ptr, ptr %a4 + %t80 = icmp eq ptr %t79, null + br i1 %t80, label %panic9350, label %ok9351 +panic9350: + call void @finch_panic(ptr @.str.6483, i64 208, ptr @.str.6484) + unreachable +ok9351: + %t81 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t79, i32 0, i32 1 + %t82 = load ptr, ptr %t81 + %t83 = icmp eq ptr %t82, null + br i1 %t83, label %panic9352, label %ok9353 +panic9352: + call void @finch_panic(ptr @.str.6485, i64 208, ptr @.str.6486) + unreachable +ok9353: + %t84 = getelementptr inbounds %S.cimport.CStruct, ptr %t82, i32 0, i32 5 + store i1 true, ptr %t84 + br label %endif9349 +endif9349: + %t85 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 0 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = icmp eq i64 %t87, 0 + br i1 %t88, label %then9354, label %endif9356 +then9354: + %t89 = getelementptr inbounds %S.cimport.CField, ptr %a12, i32 0, i32 5 + store i1 true, ptr %t89 + br label %endif9356 +endif9356: + %t90 = load ptr, ptr %a4 + %t91 = icmp eq ptr %t90, null + br i1 %t91, label %panic9357, label %ok9358 +panic9357: + call void @finch_panic(ptr @.str.6487, i64 213, ptr @.str.6488) + unreachable +ok9358: + %t92 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t90, i32 0, i32 1 + %t93 = load ptr, ptr %t92 + %t94 = icmp eq ptr %t93, null + br i1 %t94, label %panic9359, label %ok9360 +panic9359: + call void @finch_panic(ptr @.str.6489, i64 213, ptr @.str.6490) + unreachable +ok9360: + %t95 = getelementptr inbounds %S.cimport.CStruct, ptr %t93, i32 0, i32 1 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 + %t97 = load %S.cimport.CField, ptr %a12 + store %S.cimport.CField %t97, ptr %a98 + call void @finch.copy.S_cimport_CField(ptr %a99, ptr %a98) + %t100 = load %S.cimport.CField, ptr %a99 + %t101 = load i64, ptr %t96 + %t102 = add i64 %t101, 1 + call void @finch_arr_reserve(ptr %t95, i64 %t102, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) + %t103 = load ptr, ptr %t95 + %t104 = getelementptr inbounds %S.cimport.CField, ptr %t103, i64 %t101 + store %S.cimport.CField %t100, ptr %t104 + store i64 %t102, ptr %t96 + call void @finch.drop.S_cimport_CField(ptr %a12) + ret i32 1 +} + +define internal %S.cimport.Mapped @finch.cimport.sized(i64 %p0, i1 %p1) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i1, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a26 = alloca %S.ast.Type, align 16 + %a29 = alloca %S.ast.Type, align 16 + %a35 = alloca %S.ast.Type, align 16 + %a38 = alloca %S.ast.Type, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store i1 %p1, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = icmp eq i64 %t3, 1 + br i1 %t4, label %then9361, label %endif9363 +then9361: + %t5 = load i1, ptr %a2 + br i1 %t5, label %then9364, label %endif9366 +then9364: + %t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6491, i64 2, i64 0 }) + %t7 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t6) + store %S.ast.Type %t6, ptr %a8 + call void @finch.drop.S_ast_Type(ptr %a8) + ret %S.cimport.Mapped %t7 +endif9366: + %t9 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6492, i64 2, i64 0 }) + %t10 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t9) + store %S.ast.Type %t9, ptr %a11 + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.cimport.Mapped %t10 +endif9363: + %t12 = load i64, ptr %a1 + %t13 = icmp eq i64 %t12, 2 + br i1 %t13, label %then9367, label %endif9369 +then9367: + %t14 = load i1, ptr %a2 + br i1 %t14, label %then9370, label %endif9372 +then9370: + %t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6493, i64 3, i64 0 }) + %t16 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t15) + store %S.ast.Type %t15, ptr %a17 + call void @finch.drop.S_ast_Type(ptr %a17) + ret %S.cimport.Mapped %t16 +endif9372: + %t18 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6494, i64 3, i64 0 }) + %t19 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t18) + store %S.ast.Type %t18, ptr %a20 + call void @finch.drop.S_ast_Type(ptr %a20) + ret %S.cimport.Mapped %t19 +endif9369: + %t21 = load i64, ptr %a1 + %t22 = icmp eq i64 %t21, 4 + br i1 %t22, label %then9373, label %endif9375 +then9373: + %t23 = load i1, ptr %a2 + br i1 %t23, label %then9376, label %endif9378 +then9376: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6495, i64 3, i64 0 }) + %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) + store %S.ast.Type %t24, ptr %a26 + call void @finch.drop.S_ast_Type(ptr %a26) + ret %S.cimport.Mapped %t25 +endif9378: + %t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }) + %t28 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t27) + store %S.ast.Type %t27, ptr %a29 + call void @finch.drop.S_ast_Type(ptr %a29) + ret %S.cimport.Mapped %t28 +endif9375: + %t30 = load i64, ptr %a1 + %t31 = icmp eq i64 %t30, 8 + br i1 %t31, label %then9379, label %endif9381 +then9379: + %t32 = load i1, ptr %a2 + br i1 %t32, label %then9382, label %endif9384 +then9382: + %t33 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6497, i64 3, i64 0 }) + %t34 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t33) + store %S.ast.Type %t33, ptr %a35 + call void @finch.drop.S_ast_Type(ptr %a35) + ret %S.cimport.Mapped %t34 +endif9384: + %t36 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6498, i64 3, i64 0 }) + %t37 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t36) + store %S.ast.Type %t36, ptr %a38 + call void @finch.drop.S_ast_Type(ptr %a38) + ret %S.cimport.Mapped %t37 +endif9381: + %t39 = load i64, ptr %a1 + %t40 = mul i64 %t39, 8 + call void @finch_str_from_int(ptr %a41, i64 %t40) + %t42 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.6499, i64 7, i64 0 }, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + store { ptr, i64, i64 } %t42, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.6500, i64 11, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t52) + store { ptr, i64, i64 } %t52, ptr %a54 + call void @finch_str_drop(ptr %a54) + ret %S.cimport.Mapped %t53 +} + +define internal %S.cimport.Mapped @finch.cimport.mapType(ptr %p0, %S.C.CXType %p1, i1 %p2, i1 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXType, align 16 + %a3 = alloca i1, align 16 + %a4 = alloca i1, align 16 + %a5 = alloca %S.C.CXType, align 16 + %a7 = alloca %S.C.CXType, align 16 + %a9 = alloca %S.C.CXType, align 16 + %a11 = alloca %S.C.CXType, align 16 + %a13 = alloca i64, align 16 + %a16 = alloca i32, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a26 = alloca %S.ast.Type, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a80 = alloca %S.ast.Type, align 16 + %a83 = alloca %S.C.CXType, align 16 + %a84 = alloca %S.C.CXType, align 16 + %a86 = alloca %S.C.CXType, align 16 + %a88 = alloca %S.C.CXType, align 16 + %a90 = alloca %S.C.CXType, align 16 + %a103 = alloca %S.C.CXType, align 16 + %a109 = alloca %S.ast.Type, align 16 + %a123 = alloca %S.ast.Type, align 16 + %a127 = alloca %S.cimport.Mapped, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca %S.ast.Type, align 16 + %a154 = alloca %S.ast.Type, align 16 + %a157 = alloca %S.C.CXCursor, align 16 + %a159 = alloca %S.C.CXType, align 16 + %a161 = alloca %S.C.CXCursor, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca %S.ast.Type, align 16 + %a185 = alloca %S.C.CXType, align 16 + %a187 = alloca %S.C.CXType, align 16 + %a190 = alloca %S.cimport.Mapped, align 16 + %a198 = alloca %S.C.CXType, align 16 + %a202 = alloca %S.ast.Type, align 16 + %a207 = alloca %S.C.CXType, align 16 + %a209 = alloca [32 x i8], align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXType %p1, ptr %a2 + store i1 %p2, ptr %a3 + store i1 %p3, ptr %a4 + %t6 = load %S.C.CXType, ptr %a2 + store %S.C.CXType %t6, ptr %a7 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a5, ptr byval(%S.C.CXType) align 8 %a7) + %t8 = load %S.C.CXType, ptr %a5 + store %S.C.CXType %t8, ptr %a9 + %t10 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t10, ptr %a11 + %t12 = call i64 @clang_Type_getSizeOf(ptr byval(%S.C.CXType) align 8 %a11) + store i64 %t12, ptr %a13 + %t14 = getelementptr inbounds %S.C.CXType, ptr %a9, i32 0, i32 0 + %t15 = load i32, ptr %t14 + store i32 %t15, ptr %a16 + %t17 = load i32, ptr %a16 + %t18 = icmp eq i32 %t17, 2 + br i1 %t18, label %then9385, label %endif9387 +then9385: + %t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6501, i64 4, i64 0 }) + %t20 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t19) + store %S.ast.Type %t19, ptr %a21 + call void @finch.drop.S_ast_Type(ptr %a21) + ret %S.cimport.Mapped %t20 +endif9387: + %t22 = load i32, ptr %a16 + %t23 = icmp eq i32 %t22, 3 + br i1 %t23, label %then9388, label %endif9390 +then9388: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6502, i64 4, i64 0 }) + %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) + store %S.ast.Type %t24, ptr %a26 + call void @finch.drop.S_ast_Type(ptr %a26) + ret %S.cimport.Mapped %t25 +endif9390: + %t27 = load i32, ptr %a16 + %t28 = icmp eq i32 %t27, 13 + br label %logic.from9391 +logic.from9391: + br i1 %t28, label %logic.end9393, label %logic.rhs9392 +logic.rhs9392: + %t29 = load i32, ptr %a16 + %t30 = icmp eq i32 %t29, 4 + br label %logic.rend9394 +logic.rend9394: + br label %logic.end9393 +logic.end9393: + %t31 = phi i1 [ true, %logic.from9391 ], [ %t30, %logic.rend9394 ] + br i1 %t31, label %then9395, label %endif9397 +then9395: + %t32 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6503, i64 4, i64 0 }) + %t33 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t32) + store %S.ast.Type %t32, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + ret %S.cimport.Mapped %t33 +endif9397: + %t35 = load i32, ptr %a16 + %t36 = icmp eq i32 %t35, 14 + br label %logic.from9398 +logic.from9398: + br i1 %t36, label %logic.end9400, label %logic.rhs9399 +logic.rhs9399: + %t37 = load i32, ptr %a16 + %t38 = icmp eq i32 %t37, 16 + br label %logic.rend9401 +logic.rend9401: + br label %logic.end9400 +logic.end9400: + %t39 = phi i1 [ true, %logic.from9398 ], [ %t38, %logic.rend9401 ] + br label %logic.from9402 +logic.from9402: + br i1 %t39, label %logic.end9404, label %logic.rhs9403 +logic.rhs9403: + %t40 = load i32, ptr %a16 + %t41 = icmp eq i32 %t40, 17 + br label %logic.rend9405 +logic.rend9405: + br label %logic.end9404 +logic.end9404: + %t42 = phi i1 [ true, %logic.from9402 ], [ %t41, %logic.rend9405 ] + br label %logic.from9406 +logic.from9406: + br i1 %t42, label %logic.end9408, label %logic.rhs9407 +logic.rhs9407: + %t43 = load i32, ptr %a16 + %t44 = icmp eq i32 %t43, 18 + br label %logic.rend9409 +logic.rend9409: + br label %logic.end9408 +logic.end9408: + %t45 = phi i1 [ true, %logic.from9406 ], [ %t44, %logic.rend9409 ] + br label %logic.from9410 +logic.from9410: + br i1 %t45, label %logic.end9412, label %logic.rhs9411 +logic.rhs9411: + %t46 = load i32, ptr %a16 + %t47 = icmp eq i32 %t46, 19 + br label %logic.rend9413 +logic.rend9413: + br label %logic.end9412 +logic.end9412: + %t48 = phi i1 [ true, %logic.from9410 ], [ %t47, %logic.rend9413 ] + br i1 %t48, label %then9414, label %endif9416 +then9414: + %t49 = load i64, ptr %a13 + %t50 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t49, i1 true) + ret %S.cimport.Mapped %t50 +endif9416: + %t51 = load i32, ptr %a16 + %t52 = icmp eq i32 %t51, 5 + br label %logic.from9417 +logic.from9417: + br i1 %t52, label %logic.end9419, label %logic.rhs9418 +logic.rhs9418: + %t53 = load i32, ptr %a16 + %t54 = icmp eq i32 %t53, 8 + br label %logic.rend9420 +logic.rend9420: + br label %logic.end9419 +logic.end9419: + %t55 = phi i1 [ true, %logic.from9417 ], [ %t54, %logic.rend9420 ] + br label %logic.from9421 +logic.from9421: + br i1 %t55, label %logic.end9423, label %logic.rhs9422 +logic.rhs9422: + %t56 = load i32, ptr %a16 + %t57 = icmp eq i32 %t56, 9 + br label %logic.rend9424 +logic.rend9424: + br label %logic.end9423 +logic.end9423: + %t58 = phi i1 [ true, %logic.from9421 ], [ %t57, %logic.rend9424 ] + br label %logic.from9425 +logic.from9425: + br i1 %t58, label %logic.end9427, label %logic.rhs9426 +logic.rhs9426: + %t59 = load i32, ptr %a16 + %t60 = icmp eq i32 %t59, 10 + br label %logic.rend9428 +logic.rend9428: + br label %logic.end9427 +logic.end9427: + %t61 = phi i1 [ true, %logic.from9425 ], [ %t60, %logic.rend9428 ] + br label %logic.from9429 +logic.from9429: + br i1 %t61, label %logic.end9431, label %logic.rhs9430 +logic.rhs9430: + %t62 = load i32, ptr %a16 + %t63 = icmp eq i32 %t62, 11 + br label %logic.rend9432 +logic.rend9432: + br label %logic.end9431 +logic.end9431: + %t64 = phi i1 [ true, %logic.from9429 ], [ %t63, %logic.rend9432 ] + br i1 %t64, label %then9433, label %endif9435 +then9433: + %t65 = load i64, ptr %a13 + %t66 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t65, i1 false) + ret %S.cimport.Mapped %t66 +endif9435: + %t67 = load i32, ptr %a16 + %t68 = icmp eq i32 %t67, 106 + br i1 %t68, label %then9436, label %endif9438 +then9436: + %t69 = load i64, ptr %a13 + %t70 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t69, i1 true) + ret %S.cimport.Mapped %t70 +endif9438: + %t71 = load i32, ptr %a16 + %t72 = icmp eq i32 %t71, 21 + br i1 %t72, label %then9439, label %endif9441 +then9439: + %t73 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6504, i64 3, i64 0 }) + %t74 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t73) + store %S.ast.Type %t73, ptr %a75 + call void @finch.drop.S_ast_Type(ptr %a75) + ret %S.cimport.Mapped %t74 +endif9441: + %t76 = load i32, ptr %a16 + %t77 = icmp eq i32 %t76, 22 + br i1 %t77, label %then9442, label %endif9444 +then9442: + %t78 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6505, i64 5, i64 0 }) + %t79 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t78) + store %S.ast.Type %t78, ptr %a80 + call void @finch.drop.S_ast_Type(ptr %a80) + ret %S.cimport.Mapped %t79 +endif9444: + %t81 = load i32, ptr %a16 + %t82 = icmp eq i32 %t81, 101 + br i1 %t82, label %then9445, label %endif9447 +then9445: + %t85 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t85, ptr %a86 + call void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16 %a84, ptr byval(%S.C.CXType) align 8 %a86) + %t87 = load %S.C.CXType, ptr %a84 + store %S.C.CXType %t87, ptr %a88 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a83, ptr byval(%S.C.CXType) align 8 %a88) + %t89 = load %S.C.CXType, ptr %a83 + store %S.C.CXType %t89, ptr %a90 + %t91 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t92 = load i32, ptr %t91 + %t93 = icmp eq i32 %t92, 13 + br label %logic.from9448 +logic.from9448: + br i1 %t93, label %logic.end9450, label %logic.rhs9449 +logic.rhs9449: + %t94 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t95 = load i32, ptr %t94 + %t96 = icmp eq i32 %t95, 4 + br label %logic.rend9451 +logic.rend9451: + br label %logic.end9450 +logic.end9450: + %t97 = phi i1 [ true, %logic.from9448 ], [ %t96, %logic.rend9451 ] + br label %logic.from9452 +logic.from9452: + br i1 %t97, label %logic.rhs9453, label %logic.end9454 +logic.rhs9453: + %t98 = load i1, ptr %a3 + br label %logic.rend9455 +logic.rend9455: + br label %logic.end9454 +logic.end9454: + %t99 = phi i1 [ false, %logic.from9452 ], [ %t98, %logic.rend9455 ] + br i1 %t99, label %then9456, label %endif9458 +then9456: + %t100 = load i1, ptr %a4 + %t101 = xor i1 %t100, true + br label %logic.from9459 +logic.from9459: + br i1 %t101, label %logic.end9461, label %logic.rhs9460 +logic.rhs9460: + %t102 = load %S.C.CXType, ptr %a90 + store %S.C.CXType %t102, ptr %a103 + %t104 = call i32 @clang_isConstQualifiedType(ptr byval(%S.C.CXType) align 8 %a103) + %t105 = icmp ne i32 %t104, 0 + br label %logic.rend9462 +logic.rend9462: + br label %logic.end9461 +logic.end9461: + %t106 = phi i1 [ true, %logic.from9459 ], [ %t105, %logic.rend9462 ] + br i1 %t106, label %then9463, label %endif9465 +then9463: + %t107 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6506, i64 3, i64 0 }) + %t108 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t107) + store %S.ast.Type %t107, ptr %a109 + call void @finch.drop.S_ast_Type(ptr %a109) + ret %S.cimport.Mapped %t108 +endif9465: + br label %endif9458 +endif9458: + %t110 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t111 = load i32, ptr %t110 + %t112 = icmp eq i32 %t111, 2 + br label %logic.from9466 +logic.from9466: + br i1 %t112, label %logic.end9468, label %logic.rhs9467 +logic.rhs9467: + %t113 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t114 = load i32, ptr %t113 + %t115 = icmp eq i32 %t114, 111 + br label %logic.rend9469 +logic.rend9469: + br label %logic.end9468 +logic.end9468: + %t116 = phi i1 [ true, %logic.from9466 ], [ %t115, %logic.rend9469 ] + br label %logic.from9470 +logic.from9470: + br i1 %t116, label %logic.end9472, label %logic.rhs9471 +logic.rhs9471: + %t117 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t118 = load i32, ptr %t117 + %t119 = icmp eq i32 %t118, 110 + br label %logic.rend9473 +logic.rend9473: + br label %logic.end9472 +logic.end9472: + %t120 = phi i1 [ true, %logic.from9470 ], [ %t119, %logic.rend9473 ] + br i1 %t120, label %then9474, label %endif9476 +then9474: + %t121 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6507, i64 3, i64 0 }) + %t122 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t121) + store %S.ast.Type %t121, ptr %a123 + call void @finch.drop.S_ast_Type(ptr %a123) + ret %S.cimport.Mapped %t122 +endif9476: + %t124 = load ptr, ptr %a1 + %t125 = load %S.C.CXType, ptr %a90 + %t126 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t124, %S.C.CXType %t125, i1 false, i1 false) + store %S.cimport.Mapped %t126, ptr %a127 + %t128 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 2 + %t129 = load i1, ptr %t128 + %t130 = xor i1 %t129, true + br label %logic.from9477 +logic.from9477: + br i1 %t130, label %logic.end9479, label %logic.rhs9478 +logic.rhs9478: + %t131 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 + %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.6508, i64 4, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp ne i32 %t136, 0 + br label %logic.rend9480 +logic.rend9480: + br label %logic.end9479 +logic.end9479: + %t138 = phi i1 [ true, %logic.from9477 ], [ %t137, %logic.rend9480 ] + br label %logic.from9481 +logic.from9481: + br i1 %t138, label %logic.end9483, label %logic.rhs9482 +logic.rhs9482: + %t139 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 + %t140 = getelementptr inbounds %S.ast.Type, ptr %t139, i32 0, i32 0 + %t141 = load { ptr, i64, i64 }, ptr %t140 + store { ptr, i64, i64 } %t141, ptr %a142 + store { ptr, i64, i64 } { ptr @.str.6509, i64 5, i64 0 }, ptr %a143 + %t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143) + %t145 = icmp ne i32 %t144, 0 + br label %logic.rend9484 +logic.rend9484: + br label %logic.end9483 +logic.end9483: + %t146 = phi i1 [ true, %logic.from9481 ], [ %t145, %logic.rend9484 ] + br i1 %t146, label %then9485, label %endif9487 +then9485: + %t147 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6510, i64 3, i64 0 }) + %t148 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t147) + store %S.ast.Type %t147, ptr %a149 + call void @finch.drop.S_ast_Type(ptr %a149) + call void @finch.drop.S_cimport_Mapped(ptr %a127) + ret %S.cimport.Mapped %t148 +endif9487: + %t150 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 + %t151 = load %S.ast.Type, ptr %t150 + %t152 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t151) + %t153 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t152) + store %S.ast.Type %t152, ptr %a154 + call void @finch.drop.S_ast_Type(ptr %a154) + call void @finch.drop.S_cimport_Mapped(ptr %a127) + ret %S.cimport.Mapped %t153 +endif9447: + %t155 = load i32, ptr %a16 + %t156 = icmp eq i32 %t155, 105 + br i1 %t156, label %then9488, label %endif9490 +then9488: + %t158 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t158, ptr %a159 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a157, ptr byval(%S.C.CXType) align 8 %a159) + %t160 = load %S.C.CXCursor, ptr %a157 + store %S.C.CXCursor %t160, ptr %a161 + %t162 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a161) + %t163 = icmp eq i32 %t162, 3 + br i1 %t163, label %then9491, label %endif9493 +then9491: + %t164 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6511, i64 23, i64 0 }) + ret %S.cimport.Mapped %t164 +endif9493: + %t165 = load ptr, ptr %a1 + %t166 = load %S.C.CXType, ptr %a9 + %t167 = call { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %t165, %S.C.CXType %t166) + store { ptr, i64, i64 } %t167, ptr %a168 + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = icmp eq i64 %t170, 0 + br i1 %t171, label %then9494, label %endif9496 +then9494: + %t172 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6512, i64 36, i64 0 }) + call void @finch_str_drop(ptr %a168) + ret %S.cimport.Mapped %t172 +endif9496: + %t173 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6513, i64 5, i64 0 }, 0 + %t174 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t174, ptr %a175 + call void @finch_str_copy(ptr %a176, ptr %a175) + %t177 = load { ptr, i64, i64 }, ptr %a176 + %t178 = insertvalue %S.ast.Type %t173, { ptr, i64, i64 } %t177, 2 + %t179 = insertvalue %S.ast.Type %t178, { ptr, i64, i64 } { ptr @.str.6514, i64 1, i64 0 }, 3 + %t180 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t179) + store %S.ast.Type %t179, ptr %a181 + call void @finch.drop.S_ast_Type(ptr %a181) + call void @finch_str_drop(ptr %a168) + ret %S.cimport.Mapped %t180 +endif9490: + %t182 = load i32, ptr %a16 + %t183 = icmp eq i32 %t182, 112 + br i1 %t183, label %then9497, label %endif9499 +then9497: + %t184 = load ptr, ptr %a1 + %t186 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t186, ptr %a187 + call void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16 %a185, ptr byval(%S.C.CXType) align 8 %a187) + %t188 = load %S.C.CXType, ptr %a185 + %t189 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t184, %S.C.CXType %t188, i1 false, i1 false) + store %S.cimport.Mapped %t189, ptr %a190 + %t191 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 2 + %t192 = load i1, ptr %t191 + %t193 = xor i1 %t192, true + br i1 %t193, label %then9500, label %endif9502 +then9500: + %t194 = load %S.cimport.Mapped, ptr %a190 + ret %S.cimport.Mapped %t194 +endif9502: + %t195 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 0 + %t196 = load %S.ast.Type, ptr %t195 + %t197 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t197, ptr %a198 + %t199 = call i64 @clang_getArraySize(ptr byval(%S.C.CXType) align 8 %a198) + %t200 = call %S.ast.Type @finch.cimport.fixed(%S.ast.Type %t196, i64 %t199) + %t201 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t200) + store %S.ast.Type %t200, ptr %a202 + call void @finch.drop.S_ast_Type(ptr %a202) + call void @finch.drop.S_cimport_Mapped(ptr %a190) + ret %S.cimport.Mapped %t201 +endif9499: + %t203 = load i32, ptr %a16 + %t204 = icmp eq i32 %t203, 23 + br i1 %t204, label %then9503, label %endif9505 +then9503: + %t205 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6515, i64 16, i64 0 }) + ret %S.cimport.Mapped %t205 +endif9505: + %t206 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t206, ptr %a207 + %t208 = call { i64, i64 } @clang_getTypeSpelling(ptr byval(%S.C.CXType) align 8 %a207) + store { i64, i64 } %t208, ptr %a209 + %t210 = load %S.C.CXString, ptr %a209 + %t211 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t210) + store { ptr, i64, i64 } { ptr @.str.6516, i64 17, i64 0 }, ptr %a213 + store { ptr, i64, i64 } %t211, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + store { ptr, i64, i64 } %t211, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t216, ptr %a218 + store { ptr, i64, i64 } { ptr @.str.6517, i64 1, i64 0 }, ptr %a219 + call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a217 + %t222 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t221) + store { ptr, i64, i64 } %t221, ptr %a223 + call void @finch_str_drop(ptr %a223) + ret %S.cimport.Mapped %t222 +} + +define internal %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca i64, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i64, align 16 + %a49 = alloca i1, align 16 + %a50 = alloca i64, align 16 + %a62 = alloca i8, align 16 + %a63 = alloca i64, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + store i64 10, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6519, i64 2, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_starts(ptr %a9, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from9506 +logic.from9506: + br i1 %t13, label %logic.end9508, label %logic.rhs9507 +logic.rhs9507: + %t14 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6521, i64 2, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br label %logic.rend9509 +logic.rend9509: + br label %logic.end9508 +logic.end9508: + %t20 = phi i1 [ true, %logic.from9506 ], [ %t19, %logic.rend9509 ] + br i1 %t20, label %then9510, label %else9511 +then9510: + store i64 16, ptr %a7 + %t21 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t21, ptr %a22 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t25 = load i64, ptr %t24 + call void @finch_str_sub(ptr %a23, ptr %a22, i64 2, i64 %t25, ptr @.str.6522, i64 331) + %t26 = load { ptr, i64, i64 }, ptr %a23 + %t27 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t26, ptr %a6 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_drop(ptr %a28) + br label %endif9512 +else9511: + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = icmp sgt i64 %t30, 1 + br label %logic.from9513 +logic.from9513: + br i1 %t31, label %logic.rhs9514, label %logic.end9515 +logic.rhs9514: + %t32 = load { ptr, i64, i64 }, ptr %a6 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 0, %t33 + br i1 %t34, label %range9516, label %inrange9517 +range9516: + call void @finch_panic_index(ptr @.str.6523, i64 332, i64 0, i64 %t33) + unreachable +inrange9517: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds i8, ptr %t35, i64 0 + %t37 = load i8, ptr %t36 + %t38 = icmp eq i8 %t37, 48 + br label %logic.rend9518 +logic.rend9518: + br label %logic.end9515 +logic.end9515: + %t39 = phi i1 [ false, %logic.from9513 ], [ %t38, %logic.rend9518 ] + br i1 %t39, label %then9519, label %endif9521 +then9519: + store i64 8, ptr %a7 + %t40 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t40, ptr %a41 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t44 = load i64, ptr %t43 + call void @finch_str_sub(ptr %a42, ptr %a41, i64 1, i64 %t44, ptr @.str.6524, i64 334) + %t45 = load { ptr, i64, i64 }, ptr %a42 + %t46 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t45, ptr %a6 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %endif9521 +endif9521: + br label %endif9512 +endif9512: + store i64 0, ptr %a48 + store i1 false, ptr %a49 + store i64 0, ptr %a50 + br label %while.cond9522 +while.cond9522: + %t51 = load i64, ptr %a50 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t53 = load i64, ptr %t52 + %t54 = icmp slt i64 %t51, %t53 + br i1 %t54, label %while.body9523, label %while.end9524 +while.body9523: + %t55 = load i64, ptr %a50 + %t56 = load { ptr, i64, i64 }, ptr %a6 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 %t55, %t57 + br i1 %t58, label %range9525, label %inrange9526 +range9525: + call void @finch_panic_index(ptr @.str.6525, i64 340, i64 %t55, i64 %t57) + unreachable +inrange9526: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds i8, ptr %t59, i64 %t55 + %t61 = load i8, ptr %t60 + store i8 %t61, ptr %a62 + store i64 99, ptr %a63 + %t64 = load i8, ptr %a62 + %t65 = icmp uge i8 %t64, 48 + br label %logic.from9527 +logic.from9527: + br i1 %t65, label %logic.rhs9528, label %logic.end9529 +logic.rhs9528: + %t66 = load i8, ptr %a62 + %t67 = icmp ule i8 %t66, 57 + br label %logic.rend9530 +logic.rend9530: + br label %logic.end9529 +logic.end9529: + %t68 = phi i1 [ false, %logic.from9527 ], [ %t67, %logic.rend9530 ] + br i1 %t68, label %then9531, label %else9532 +then9531: + %t69 = load i8, ptr %a62 + %t70 = zext i8 %t69 to i64 + %t71 = zext i8 48 to i64 + %t72 = sub i64 %t70, %t71 + store i64 %t72, ptr %a63 + br label %endif9533 +else9532: + %t73 = load i8, ptr %a62 + %t74 = icmp uge i8 %t73, 97 + br label %logic.from9534 +logic.from9534: + br i1 %t74, label %logic.rhs9535, label %logic.end9536 +logic.rhs9535: + %t75 = load i8, ptr %a62 + %t76 = icmp ule i8 %t75, 102 + br label %logic.rend9537 +logic.rend9537: + br label %logic.end9536 +logic.end9536: + %t77 = phi i1 [ false, %logic.from9534 ], [ %t76, %logic.rend9537 ] + br i1 %t77, label %then9538, label %else9539 +then9538: + %t78 = load i8, ptr %a62 + %t79 = zext i8 %t78 to i64 + %t80 = zext i8 97 to i64 + %t81 = sub i64 %t79, %t80 + %t82 = add i64 %t81, 10 + store i64 %t82, ptr %a63 + br label %endif9540 +else9539: + %t83 = load i8, ptr %a62 + %t84 = icmp uge i8 %t83, 65 + br label %logic.from9541 +logic.from9541: + br i1 %t84, label %logic.rhs9542, label %logic.end9543 +logic.rhs9542: + %t85 = load i8, ptr %a62 + %t86 = icmp ule i8 %t85, 70 + br label %logic.rend9544 +logic.rend9544: + br label %logic.end9543 +logic.end9543: + %t87 = phi i1 [ false, %logic.from9541 ], [ %t86, %logic.rend9544 ] + br i1 %t87, label %then9545, label %endif9547 +then9545: + %t88 = load i8, ptr %a62 + %t89 = zext i8 %t88 to i64 + %t90 = zext i8 65 to i64 + %t91 = sub i64 %t89, %t90 + %t92 = add i64 %t91, 10 + store i64 %t92, ptr %a63 + br label %endif9547 +endif9547: + br label %endif9540 +endif9540: + br label %endif9533 +endif9533: + %t93 = load i64, ptr %a63 + %t94 = load i64, ptr %a7 + %t95 = icmp sge i64 %t93, %t94 + br i1 %t95, label %then9548, label %endif9550 +then9548: + br label %while.end9524 +endif9550: + %t96 = load i64, ptr %a48 + %t97 = load i64, ptr %a7 + %t98 = mul i64 %t96, %t97 + %t99 = load i64, ptr %a63 + %t100 = add i64 %t98, %t99 + store i64 %t100, ptr %a48 + store i1 true, ptr %a49 + %t101 = load i64, ptr %a50 + %t102 = add i64 %t101, 1 + store i64 %t102, ptr %a50 + br label %while.cond9522 +while.end9524: + br label %while.cond9551 +while.cond9551: + %t103 = load i64, ptr %a50 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t105 = load i64, ptr %t104 + %t106 = icmp slt i64 %t103, %t105 + br i1 %t106, label %while.body9552, label %while.end9553 +while.body9552: + store { ptr, i64, i64 } { ptr @.str.6526, i64 4, i64 0 }, ptr %a107 + %t109 = load i64, ptr %a50 + %t110 = load { ptr, i64, i64 }, ptr %a6 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range9554, label %inrange9555 +range9554: + call void @finch_panic_index(ptr @.str.6528, i64 358, i64 %t109, i64 %t111) + unreachable +inrange9555: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds i8, ptr %t113, i64 %t109 + %t115 = load i8, ptr %t114 + call void @finch_str_from_char(ptr %a116, i8 signext %t115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t117, ptr %a118 + %t119 = call i64 @finch_str_find(ptr %a107, ptr %a118) + %t120 = icmp sge i64 %t119, 0 + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = xor i1 %t120, true + br i1 %t122, label %then9556, label %endif9558 +then9556: + call void @finch_str_drop(ptr %a6) + ret %S.cimport.Number zeroinitializer +endif9558: + %t123 = load i64, ptr %a50 + %t124 = add i64 %t123, 1 + store i64 %t124, ptr %a50 + br label %while.cond9551 +while.end9553: + %t125 = load i1, ptr %a49 + %t126 = xor i1 %t125, true + br label %logic.from9559 +logic.from9559: + br i1 %t126, label %logic.rhs9560, label %logic.end9561 +logic.rhs9560: + %t127 = load i64, ptr %a7 + %t128 = icmp ne i64 %t127, 8 + br label %logic.rend9562 +logic.rend9562: + br label %logic.end9561 +logic.end9561: + %t129 = phi i1 [ false, %logic.from9559 ], [ %t128, %logic.rend9562 ] + br i1 %t129, label %then9563, label %endif9565 +then9563: + call void @finch_str_drop(ptr %a6) + ret %S.cimport.Number zeroinitializer +endif9565: + %t130 = load i64, ptr %a48 + %t131 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t130, 1 + %t132 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t131, 0 + %t133 = insertvalue %S.cimport.Number %t132, i1 true, 1 + call void @finch_str_drop(ptr %a6) + ret %S.cimport.Number %t133 +} + +define internal %S.cimport.Number @finch.cimport.macroValue(ptr %p0, %S.C.CXCursor %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXCursor, align 16 + %a3 = alloca ptr, align 16 + %a4 = alloca i32, align 16 + %a9 = alloca %S.C.CXSourceRange, align 16 + %a11 = alloca %S.C.CXCursor, align 16 + %a13 = alloca %S.C.CXSourceRange, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca i64, align 16 + %a24 = alloca %S.C.CXToken, align 16 + %a36 = alloca %S.C.CXToken, align 16 + %a38 = alloca [32 x i8], align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca i1, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca i1, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca double, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca double, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca %S.cimport.Number, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXCursor %p1, ptr %a2 + store ptr null, ptr %a3 + store i32 0, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic9566, label %ok9567 +panic9566: + call void @finch_panic(ptr @.str.6529, i64 373, ptr @.str.6530) + unreachable +ok9567: + %t7 = getelementptr inbounds %S.cimport.Importer, ptr %t5, i32 0, i32 1 + %t8 = load ptr, ptr %t7 + %t10 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t10, ptr %a11 + call void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16 %a9, ptr byval(%S.C.CXCursor) align 8 %a11) + %t12 = load %S.C.CXSourceRange, ptr %a9 + store %S.C.CXSourceRange %t12, ptr %a13 + call void @clang_tokenize(ptr %t8, ptr byval(%S.C.CXSourceRange) align 8 %a13, ptr %a3, ptr %a4) + store { ptr, i64, i64 } zeroinitializer, ptr %a14 + %t15 = load i32, ptr %a4 + %t16 = zext i32 %t15 to i64 + store i64 1, ptr %a17 + br label %for.cond9568 +for.cond9568: + %t18 = load i64, ptr %a17 + %t19 = icmp slt i64 %t18, %t16 + br i1 %t19, label %for.body9569, label %for.end9571 +for.body9569: + %t20 = load i64, ptr %a17 + %t21 = load ptr, ptr %a3 + %t22 = getelementptr inbounds %S.C.CXToken, ptr %t21, i64 %t20 + %t23 = load %S.C.CXToken, ptr %t22 + store %S.C.CXToken %t23, ptr %a24 + %t25 = call i32 @clang_getTokenKind(ptr byval(%S.C.CXToken) align 8 %a24) + %t26 = icmp eq i32 %t25, 4 + br i1 %t26, label %then9572, label %endif9574 +then9572: + br label %for.step9570 +endif9574: + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic9575, label %ok9576 +panic9575: + call void @finch_panic(ptr @.str.6531, i64 379, ptr @.str.6532) + unreachable +ok9576: + %t30 = getelementptr inbounds %S.cimport.Importer, ptr %t28, i32 0, i32 1 + %t31 = load ptr, ptr %t30 + %t32 = load i64, ptr %a17 + %t33 = load ptr, ptr %a3 + %t34 = getelementptr inbounds %S.C.CXToken, ptr %t33, i64 %t32 + %t35 = load %S.C.CXToken, ptr %t34 + store %S.C.CXToken %t35, ptr %a36 + %t37 = call { i64, i64 } @clang_getTokenSpelling(ptr %t31, ptr byval(%S.C.CXToken) align 8 %a36) + store { i64, i64 } %t37, ptr %a38 + %t39 = load %S.C.CXString, ptr %a38 + %t40 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t39) + %t41 = load i64, ptr %t27 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a14, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a14 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } %t40, ptr %t44 + store i64 %t42, ptr %t27 + br label %for.step9570 +for.step9570: + %t45 = load i64, ptr %a17 + %t46 = add i64 %t45, 1 + store i64 %t46, ptr %a17 + br label %for.cond9568 +for.end9571: + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic9577, label %ok9578 +panic9577: + call void @finch_panic(ptr @.str.6533, i64 381, ptr @.str.6534) + unreachable +ok9578: + %t49 = getelementptr inbounds %S.cimport.Importer, ptr %t47, i32 0, i32 1 + %t50 = load ptr, ptr %t49 + %t51 = load ptr, ptr %a3 + %t52 = load i32, ptr %a4 + call void @clang_disposeTokens(ptr %t50, ptr %t51, i32 %t52) + br label %while.cond9579 +while.cond9579: + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t54 = load i64, ptr %t53 + %t55 = icmp sge i64 %t54, 2 + br label %logic.from9582 +logic.from9582: + br i1 %t55, label %logic.rhs9583, label %logic.end9584 +logic.rhs9583: + %t56 = load { ptr, i64, i64 }, ptr %a14 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 0, %t57 + br i1 %t58, label %range9585, label %inrange9586 +range9585: + call void @finch_panic_index(ptr @.str.6535, i64 383, i64 0, i64 %t57) + unreachable +inrange9586: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 0 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.6536, i64 1, i64 0 }, ptr %a63 + %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) + %t65 = icmp ne i32 %t64, 0 + br label %logic.rend9587 +logic.rend9587: + br label %logic.end9584 +logic.end9584: + %t66 = phi i1 [ false, %logic.from9582 ], [ %t65, %logic.rend9587 ] + br label %logic.from9588 +logic.from9588: + br i1 %t66, label %logic.rhs9589, label %logic.end9590 +logic.rhs9589: + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t68 = load i64, ptr %t67 + %t69 = sub i64 %t68, 1 + %t70 = load { ptr, i64, i64 }, ptr %a14 + %t71 = extractvalue { ptr, i64, i64 } %t70, 1 + %t72 = icmp uge i64 %t69, %t71 + br i1 %t72, label %range9591, label %inrange9592 +range9591: + call void @finch_panic_index(ptr @.str.6537, i64 383, i64 %t69, i64 %t71) + unreachable +inrange9592: + %t73 = extractvalue { ptr, i64, i64 } %t70, 0 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t69 + %t75 = load { ptr, i64, i64 }, ptr %t74 + store { ptr, i64, i64 } %t75, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.6538, i64 1, i64 0 }, ptr %a77 + %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) + %t79 = icmp ne i32 %t78, 0 + br label %logic.rend9593 +logic.rend9593: + br label %logic.end9590 +logic.end9590: + %t80 = phi i1 [ false, %logic.from9588 ], [ %t79, %logic.rend9593 ] + br i1 %t80, label %while.body9580, label %while.end9581 +while.body9580: + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t82 = load i64, ptr %t81 + %t83 = icmp uge i64 0, %t82 + br i1 %t83, label %range9594, label %inrange9595 +range9594: + call void @finch_panic_index(ptr @.str.6539, i64 384, i64 0, i64 %t82) + unreachable +inrange9595: + %t84 = load ptr, ptr %a14 + %t85 = getelementptr inbounds { ptr, i64, i64 }, ptr %t84, i64 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + store { ptr, i64, i64 } %t86, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t89 = load i64, ptr %t88 + %t90 = icmp eq i64 %t89, 0 + br i1 %t90, label %panic9596, label %ok9597 +panic9596: + call void @finch_panic(ptr @.str.6540, i64 385, ptr @.str.6541) + unreachable +ok9597: + %t91 = sub i64 %t89, 1 + %t92 = load ptr, ptr %a14 + %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t91 + %t94 = load { ptr, i64, i64 }, ptr %t93 + store i64 %t91, ptr %t88 + store { ptr, i64, i64 } %t94, ptr %a95 + call void @finch_str_drop(ptr %a95) + br label %while.cond9579 +while.end9581: + store i1 false, ptr %a96 + %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t98 = load i64, ptr %t97 + %t99 = icmp eq i64 %t98, 2 + br label %logic.from9598 +logic.from9598: + br i1 %t99, label %logic.rhs9599, label %logic.end9600 +logic.rhs9599: + %t100 = load { ptr, i64, i64 }, ptr %a14 + %t101 = extractvalue { ptr, i64, i64 } %t100, 1 + %t102 = icmp uge i64 0, %t101 + br i1 %t102, label %range9601, label %inrange9602 +range9601: + call void @finch_panic_index(ptr @.str.6542, i64 388, i64 0, i64 %t101) + unreachable +inrange9602: + %t103 = extractvalue { ptr, i64, i64 } %t100, 0 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 0 + %t105 = load { ptr, i64, i64 }, ptr %t104 + store { ptr, i64, i64 } %t105, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.6543, i64 1, i64 0 }, ptr %a107 + %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) + %t109 = icmp ne i32 %t108, 0 + br label %logic.rend9603 +logic.rend9603: + br label %logic.end9600 +logic.end9600: + %t110 = phi i1 [ false, %logic.from9598 ], [ %t109, %logic.rend9603 ] + br i1 %t110, label %then9604, label %endif9606 +then9604: + store i1 true, ptr %a96 + %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t112 = load i64, ptr %t111 + %t113 = icmp uge i64 0, %t112 + br i1 %t113, label %range9607, label %inrange9608 +range9607: + call void @finch_panic_index(ptr @.str.6544, i64 390, i64 0, i64 %t112) + unreachable +inrange9608: + %t114 = load ptr, ptr %a14 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 0 + %t116 = load { ptr, i64, i64 }, ptr %t115 + call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + br label %endif9606 +endif9606: + %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t119 = load i64, ptr %t118 + %t120 = icmp ne i64 %t119, 1 + br i1 %t120, label %then9609, label %endif9611 +then9609: + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number zeroinitializer +endif9611: + %t121 = load { ptr, i64, i64 }, ptr %a14 + %t122 = extractvalue { ptr, i64, i64 } %t121, 1 + %t123 = icmp uge i64 0, %t122 + br i1 %t123, label %range9612, label %inrange9613 +range9612: + call void @finch_panic_index(ptr @.str.6545, i64 395, i64 0, i64 %t122) + unreachable +inrange9613: + %t124 = extractvalue { ptr, i64, i64 } %t121, 0 + %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 0 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t126, ptr %a127 + call void @finch_str_copy(ptr %a128, ptr %a127) + %t129 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t129, ptr %a130 + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a130, i32 0, i32 1 + %t132 = load i64, ptr %t131 + %t133 = icmp eq i64 %t132, 0 + br label %logic.from9614 +logic.from9614: + br i1 %t133, label %logic.end9616, label %logic.rhs9615 +logic.rhs9615: + %t134 = load { ptr, i64, i64 }, ptr %a130 + %t135 = extractvalue { ptr, i64, i64 } %t134, 1 + %t136 = icmp uge i64 0, %t135 + br i1 %t136, label %range9617, label %inrange9618 +range9617: + call void @finch_panic_index(ptr @.str.6546, i64 396, i64 0, i64 %t135) + unreachable +inrange9618: + %t137 = extractvalue { ptr, i64, i64 } %t134, 0 + %t138 = getelementptr inbounds i8, ptr %t137, i64 0 + %t139 = load i8, ptr %t138 + %t140 = icmp uge i8 %t139, 48 + br label %logic.from9619 +logic.from9619: + br i1 %t140, label %logic.rhs9620, label %logic.end9621 +logic.rhs9620: + %t141 = load { ptr, i64, i64 }, ptr %a130 + %t142 = extractvalue { ptr, i64, i64 } %t141, 1 + %t143 = icmp uge i64 0, %t142 + br i1 %t143, label %range9622, label %inrange9623 +range9622: + call void @finch_panic_index(ptr @.str.6547, i64 396, i64 0, i64 %t142) + unreachable +inrange9623: + %t144 = extractvalue { ptr, i64, i64 } %t141, 0 + %t145 = getelementptr inbounds i8, ptr %t144, i64 0 + %t146 = load i8, ptr %t145 + %t147 = icmp ule i8 %t146, 57 + br label %logic.rend9624 +logic.rend9624: + br label %logic.end9621 +logic.end9621: + %t148 = phi i1 [ false, %logic.from9619 ], [ %t147, %logic.rend9624 ] + br label %logic.from9625 +logic.from9625: + br i1 %t148, label %logic.end9627, label %logic.rhs9626 +logic.rhs9626: + %t149 = load { ptr, i64, i64 }, ptr %a130 + %t150 = extractvalue { ptr, i64, i64 } %t149, 1 + %t151 = icmp uge i64 0, %t150 + br i1 %t151, label %range9628, label %inrange9629 +range9628: + call void @finch_panic_index(ptr @.str.6548, i64 396, i64 0, i64 %t150) + unreachable +inrange9629: + %t152 = extractvalue { ptr, i64, i64 } %t149, 0 + %t153 = getelementptr inbounds i8, ptr %t152, i64 0 + %t154 = load i8, ptr %t153 + %t155 = icmp eq i8 %t154, 46 + br label %logic.rend9630 +logic.rend9630: + br label %logic.end9627 +logic.end9627: + %t156 = phi i1 [ true, %logic.from9625 ], [ %t155, %logic.rend9630 ] + %t157 = xor i1 %t156, true + br label %logic.rend9631 +logic.rend9631: + br label %logic.end9616 +logic.end9616: + %t158 = phi i1 [ true, %logic.from9614 ], [ %t157, %logic.rend9631 ] + br i1 %t158, label %then9632, label %endif9634 +then9632: + call void @finch_str_drop(ptr %a130) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number zeroinitializer +endif9634: + %t159 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.6550, i64 1, i64 0 }, ptr %a162 + %t163 = call i64 @finch_str_find(ptr %a160, ptr %a162) + %t164 = icmp sge i64 %t163, 0 + br label %logic.from9635 +logic.from9635: + br i1 %t164, label %logic.end9637, label %logic.rhs9636 +logic.rhs9636: + %t165 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t165, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.6552, i64 1, i64 0 }, ptr %a168 + %t169 = call i64 @finch_str_find(ptr %a166, ptr %a168) + %t170 = icmp sge i64 %t169, 0 + br label %logic.rend9638 +logic.rend9638: + br label %logic.end9637 +logic.end9637: + %t171 = phi i1 [ true, %logic.from9635 ], [ %t170, %logic.rend9638 ] + br label %logic.from9639 +logic.from9639: + br i1 %t171, label %logic.end9641, label %logic.rhs9640 +logic.rhs9640: + %t172 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t172, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.6554, i64 1, i64 0 }, ptr %a175 + %t176 = call i64 @finch_str_find(ptr %a173, ptr %a175) + %t177 = icmp sge i64 %t176, 0 + br label %logic.rend9642 +logic.rend9642: + br label %logic.end9641 +logic.end9641: + %t178 = phi i1 [ true, %logic.from9639 ], [ %t177, %logic.rend9642 ] + br label %logic.from9643 +logic.from9643: + br i1 %t178, label %logic.rhs9644, label %logic.end9645 +logic.rhs9644: + %t179 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t179, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.6556, i64 2, i64 0 }, ptr %a182 + %t183 = call i32 @finch_str_starts(ptr %a180, ptr %a182) + %t184 = icmp ne i32 %t183, 0 + %t185 = xor i1 %t184, true + br label %logic.rend9646 +logic.rend9646: + br label %logic.end9645 +logic.end9645: + %t186 = phi i1 [ false, %logic.from9643 ], [ %t185, %logic.rend9646 ] + store i1 %t186, ptr %a187 + %t188 = load i1, ptr %a187 + br i1 %t188, label %then9647, label %endif9649 +then9647: + %t189 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t189, ptr %a190 + call void @finch_str_copy(ptr %a191, ptr %a190) + %t192 = load { ptr, i64, i64 }, ptr %a191 + store { ptr, i64, i64 } %t192, ptr %a193 + br label %while.cond9650 +while.cond9650: + %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 + %t195 = load i64, ptr %t194 + %t196 = icmp sgt i64 %t195, 0 + br label %logic.from9653 +logic.from9653: + br i1 %t196, label %logic.rhs9654, label %logic.end9655 +logic.rhs9654: + store { ptr, i64, i64 } { ptr @.str.6557, i64 4, i64 0 }, ptr %a197 + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 + %t200 = load i64, ptr %t199 + %t201 = sub i64 %t200, 1 + %t202 = load { ptr, i64, i64 }, ptr %a193 + %t203 = extractvalue { ptr, i64, i64 } %t202, 1 + %t204 = icmp uge i64 %t201, %t203 + br i1 %t204, label %range9656, label %inrange9657 +range9656: + call void @finch_panic_index(ptr @.str.6559, i64 402, i64 %t201, i64 %t203) + unreachable +inrange9657: + %t205 = extractvalue { ptr, i64, i64 } %t202, 0 + %t206 = getelementptr inbounds i8, ptr %t205, i64 %t201 + %t207 = load i8, ptr %t206 + call void @finch_str_from_char(ptr %a208, i8 signext %t207) + %t209 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t209, ptr %a210 + %t211 = call i64 @finch_str_find(ptr %a197, ptr %a210) + %t212 = icmp sge i64 %t211, 0 + store { ptr, i64, i64 } %t209, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %logic.rend9658 +logic.rend9658: + br label %logic.end9655 +logic.end9655: + %t214 = phi i1 [ false, %logic.from9653 ], [ %t212, %logic.rend9658 ] + br i1 %t214, label %while.body9651, label %while.end9652 +while.body9651: + %t215 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t215, ptr %a216 + %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %a193, i32 0, i32 1 + %t219 = load i64, ptr %t218 + %t220 = sub i64 %t219, 1 + call void @finch_str_sub(ptr %a217, ptr %a216, i64 0, i64 %t220, ptr @.str.6560, i64 403) + %t221 = load { ptr, i64, i64 }, ptr %a217 + %t222 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t221, ptr %a193 + store { ptr, i64, i64 } %t222, ptr %a223 + call void @finch_str_drop(ptr %a223) + br label %while.cond9650 +while.end9652: + %t224 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } zeroinitializer, ptr %a225 + store double 0.0, ptr %a226 + store { ptr, i64, i64 } %t224, ptr %a227 + %t228 = call i32 @finch_str_try_float(ptr %a227, ptr %a226, ptr %a225) + %t229 = icmp eq i32 %t228, 0 + %t230 = load { ptr, i64, i64 }, ptr %a225 + %t231 = load double, ptr %a226 + br i1 %t229, label %or.failed9659, label %or.ok9660 +or.failed9659: + store { ptr, i64, i64 } %t230, ptr %a232 + call void @finch_str_drop(ptr %a232) + call void @finch_str_drop(ptr %a193) + call void @finch_str_drop(ptr %a130) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number zeroinitializer +or.ok9660: + store double %t231, ptr %a233 + %t234 = load i1, ptr %a96 + br i1 %t234, label %then9661, label %endif9663 +then9661: + %t235 = load double, ptr %a233 + %t236 = fsub double 0.0, %t235 + store double %t236, ptr %a233 + br label %endif9663 +endif9663: + %t237 = insertvalue %S.cimport.CConst zeroinitializer, i1 true, 0 + %t238 = load double, ptr %a233 + %t239 = insertvalue %S.cimport.CConst %t237, double %t238, 2 + %t240 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t240, ptr %a241 + call void @finch_str_copy(ptr %a242, ptr %a241) + %t243 = load { ptr, i64, i64 }, ptr %a242 + %t244 = insertvalue %S.cimport.CConst %t239, { ptr, i64, i64 } %t243, 3 + %t245 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t244, 0 + %t246 = insertvalue %S.cimport.Number %t245, i1 true, 1 + call void @finch_str_drop(ptr %a193) + call void @finch_str_drop(ptr %a130) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number %t246 +endif9649: + %t247 = load { ptr, i64, i64 }, ptr %a130 + %t248 = call %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %t247) + store %S.cimport.Number %t248, ptr %a249 + %t250 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 1 + %t251 = load i1, ptr %t250 + br label %logic.from9664 +logic.from9664: + br i1 %t251, label %logic.rhs9665, label %logic.end9666 +logic.rhs9665: + %t252 = load i1, ptr %a96 + br label %logic.rend9667 +logic.rend9667: + br label %logic.end9666 +logic.end9666: + %t253 = phi i1 [ false, %logic.from9664 ], [ %t252, %logic.rend9667 ] + br i1 %t253, label %then9668, label %endif9670 +then9668: + %t254 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 + %t255 = getelementptr inbounds %S.cimport.CConst, ptr %t254, i32 0, i32 1 + %t256 = load i64, ptr %t255 + %t257 = sub i64 0, %t256 + %t258 = getelementptr inbounds %S.cimport.Number, ptr %a249, i32 0, i32 0 + %t259 = getelementptr inbounds %S.cimport.CConst, ptr %t258, i32 0, i32 1 + store i64 %t257, ptr %t259 + br label %endif9670 +endif9670: + %t260 = load %S.cimport.Number, ptr %a249 + call void @finch_str_drop(ptr %a130) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number %t260 +} + +define internal i32 @finch.cimport.visitTop(%S.C.CXCursor %p0, %S.C.CXCursor %p1, ptr %p2) { +entry: + %a1 = alloca %S.C.CXCursor, align 16 + %a2 = alloca %S.C.CXCursor, align 16 + %a3 = alloca ptr, align 16 + %a5 = alloca ptr, align 16 + store %S.C.CXCursor %p0, ptr %a1 + store %S.C.CXCursor %p1, ptr %a2 + store ptr %p2, ptr %a3 + %t4 = load ptr, ptr %a3 + store ptr %t4, ptr %a5 + %t6 = load ptr, ptr %a5 + %t7 = load %S.C.CXCursor, ptr %a1 + call void @finch.cimport.visit(ptr %t6, %S.C.CXCursor %t7) + ret i32 1 +} + +define internal i32 @finch.c.cimport.visitTop(ptr byval(%S.C.CXCursor) align 8 %c0, ptr byval(%S.C.CXCursor) align 8 %c1, ptr %c2) { +entry: + + %t1 = load %S.C.CXCursor, ptr %c0 + %t2 = load %S.C.CXCursor, ptr %c1 + %t3 = call i32 @finch.cimport.visitTop(%S.C.CXCursor %t1, %S.C.CXCursor %t2, ptr %c2) + ret i32 %t3 +} + +define internal void @finch.drop.S_cimport_Number(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Number, ptr %a, i32 0, i32 0 + call void @finch.drop.S_cimport_CConst(ptr %t1) + ret void +} + +define internal void @finch.cimport.visit(ptr %p0, %S.C.CXCursor %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXCursor, align 16 + %a4 = alloca %S.C.CXCursor, align 16 + %a6 = alloca [32 x i8], align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca %S.C.CXCursor, align 16 + %a13 = alloca i32, align 16 + %a16 = alloca %S.C.CXType, align 16 + %a17 = alloca %S.C.CXType, align 16 + %a19 = alloca %S.C.CXCursor, align 16 + %a21 = alloca %S.C.CXType, align 16 + %a23 = alloca %S.C.CXType, align 16 + %a27 = alloca %S.C.CXCursor, align 16 + %a29 = alloca %S.C.CXType, align 16 + %a31 = alloca %S.C.CXCursor, align 16 + %a33 = alloca [32 x i8], align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca i1, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca i32, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca %S.cimport.CFunc, align 16 + %a125 = alloca %S.C.CXCursor, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca i32, align 16 + %a148 = alloca %S.cimport.CFunc, align 16 + %a149 = alloca %S.cimport.CFunc, align 16 + %a152 = alloca %S.cimport.CFunc, align 16 + %a153 = alloca %S.C.CXType, align 16 + %a154 = alloca %S.C.CXType, align 16 + %a156 = alloca %S.C.CXCursor, align 16 + %a158 = alloca %S.C.CXType, align 16 + %a160 = alloca %S.C.CXType, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca i32, align 16 + %a184 = alloca %S.cimport.CFunc, align 16 + %a185 = alloca %S.cimport.CFunc, align 16 + %a188 = alloca %S.cimport.CFunc, align 16 + %a190 = alloca %S.C.CXType, align 16 + %a192 = alloca %S.C.CXType, align 16 + %a195 = alloca %S.cimport.Mapped, align 16 + %a201 = alloca %S.ast.Type, align 16 + %a202 = alloca %S.ast.Type, align 16 + %a205 = alloca %S.ast.Type, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca %S.C.CXType, align 16 + %a218 = alloca i64, align 16 + %a220 = alloca i64, align 16 + %a228 = alloca %S.C.CXType, align 16 + %a230 = alloca %S.C.CXType, align 16 + %a235 = alloca %S.cimport.Mapped, align 16 + %a242 = alloca %S.ast.Type, align 16 + %a243 = alloca %S.ast.Type, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca %S.C.CXType, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca i32, align 16 + %a281 = alloca %S.cimport.CFunc, align 16 + %a282 = alloca %S.cimport.CFunc, align 16 + %a285 = alloca %S.cimport.CFunc, align 16 + %a289 = alloca %S.C.CXCursor, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca %S.C.CXType, align 16 + %a304 = alloca %S.C.CXCursor, align 16 + %a307 = alloca %S.cimport.Mapped, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca i32, align 16 + %a328 = alloca %S.ast.Type, align 16 + %a329 = alloca %S.ast.Type, align 16 + %a332 = alloca %S.ast.Type, align 16 + %a336 = alloca %S.C.CXCursor, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca %S.C.CXCursor, align 16 + %a354 = alloca [32 x i8], align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca i32, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca %S.C.CXCursor, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca %S.C.CXCursor, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca i32, align 16 + %a425 = alloca %S.cimport.CConst, align 16 + %a429 = alloca %S.C.CXCursor, align 16 + %a433 = alloca %S.C.CXCursor, align 16 + %a440 = alloca %S.cimport.Number, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca i32, align 16 + %a471 = alloca %S.cimport.CConst, align 16 + %a472 = alloca %S.cimport.CConst, align 16 + %a475 = alloca %S.cimport.CConst, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXCursor %p1, ptr %a2 + %t3 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t3, ptr %a4 + %t5 = call { i64, i64 } @clang_getCursorSpelling(ptr byval(%S.C.CXCursor) align 8 %a4) + store { i64, i64 } %t5, ptr %a6 + %t7 = load %S.C.CXString, ptr %a6 + %t8 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t7) + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t10, ptr %a11 + %t12 = call i32 @clang_getCursorKind(ptr byval(%S.C.CXCursor) align 8 %a11) + store i32 %t12, ptr %a13 + %t14 = load i32, ptr %a13 + %t15 = icmp eq i32 %t14, 20 + br i1 %t15, label %then9671, label %else9672 +then9671: + %t18 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t18, ptr %a19 + call void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16 %a17, ptr byval(%S.C.CXCursor) align 8 %a19) + %t20 = load %S.C.CXType, ptr %a17 + store %S.C.CXType %t20, ptr %a21 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a16, ptr byval(%S.C.CXType) align 8 %a21) + %t22 = load %S.C.CXType, ptr %a16 + store %S.C.CXType %t22, ptr %a23 + %t24 = getelementptr inbounds %S.C.CXType, ptr %a23, i32 0, i32 0 + %t25 = load i32, ptr %t24 + %t26 = icmp eq i32 %t25, 105 + br i1 %t26, label %then9674, label %endif9676 +then9674: + %t28 = load %S.C.CXType, ptr %a23 + store %S.C.CXType %t28, ptr %a29 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a27, ptr byval(%S.C.CXType) align 8 %a29) + %t30 = load %S.C.CXCursor, ptr %a27 + store %S.C.CXCursor %t30, ptr %a31 + %t32 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a31) + store { i64, i64 } %t32, ptr %a33 + %t34 = load %S.C.CXString, ptr %a33 + %t35 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t34) + store { ptr, i64, i64 } %t35, ptr %a36 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic9677, label %ok9678 +panic9677: + call void @finch_panic(ptr @.str.6561, i64 437, ptr @.str.6562) + unreachable +ok9678: + %t39 = getelementptr inbounds %S.cimport.Importer, ptr %t37, i32 0, i32 3 + %t40 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t40, ptr %a41 + %t42 = call i64 @finch_map_find(ptr %t39, ptr %a41, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t43 = icmp sge i64 %t42, 0 + br label %logic.from9679 +logic.from9679: + br i1 %t43, label %logic.rhs9680, label %logic.end9681 +logic.rhs9680: + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic9682, label %ok9683 +panic9682: + call void @finch_panic(ptr @.str.6563, i64 437, ptr @.str.6564) + unreachable +ok9683: + %t46 = getelementptr inbounds %S.cimport.Importer, ptr %t44, i32 0, i32 0 + %t47 = getelementptr inbounds %S.cimport.CImports, ptr %t46, i32 0, i32 3 + %t48 = load ptr, ptr %a1 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic9684, label %ok9685 +panic9684: + call void @finch_panic(ptr @.str.6565, i64 437, ptr @.str.6566) + unreachable +ok9685: + %t50 = getelementptr inbounds %S.cimport.Importer, ptr %t48, i32 0, i32 3 + %t51 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t54 = icmp slt i64 %t53, 0 + br i1 %t54, label %map.missing9686, label %map.found9687 +map.missing9686: + store { ptr, i64, i64 } zeroinitializer, ptr %a55 + store { ptr, i64, i64 } %t51, ptr %a56 + call void @finch_buf_str(ptr %a55, ptr %a56, i32 1) + call void @finch_map_missing(ptr @.str.6567, i64 437, ptr %a55) + unreachable +map.found9687: + %t57 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t50, i32 0, i32 0 + %t58 = load ptr, ptr %t57 + %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t58, i64 %t53 + %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t59, i32 0, i32 2 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + %t63 = call i64 @finch_map_find(ptr %t47, ptr %a62, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t64 = icmp sge i64 %t63, 0 + br label %logic.rend9688 +logic.rend9688: + br label %logic.end9681 +logic.end9681: + %t65 = phi i1 [ false, %logic.from9679 ], [ %t64, %logic.rend9688 ] + store i1 %t65, ptr %a66 + %t67 = load i1, ptr %a66 + %t68 = xor i1 %t67, true + br label %logic.from9689 +logic.from9689: + br i1 %t68, label %logic.rhs9690, label %logic.end9691 +logic.rhs9690: + %t69 = load ptr, ptr %a1 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic9692, label %ok9693 +panic9692: + call void @finch_panic(ptr @.str.6568, i64 438, ptr @.str.6569) + unreachable +ok9693: + %t71 = getelementptr inbounds %S.cimport.Importer, ptr %t69, i32 0, i32 0 + %t72 = getelementptr inbounds %S.cimport.CImports, ptr %t71, i32 0, i32 3 + %t73 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t73, ptr %a74 + %t75 = call i64 @finch_map_find(ptr %t72, ptr %a74, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t76 = icmp sge i64 %t75, 0 + %t77 = xor i1 %t76, true + br label %logic.rend9694 +logic.rend9694: + br label %logic.end9691 +logic.end9691: + %t78 = phi i1 [ false, %logic.from9689 ], [ %t77, %logic.rend9694 ] + br i1 %t78, label %then9695, label %endif9697 +then9695: + %t79 = load { ptr, i64, i64 }, ptr %a9 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic9698, label %ok9699 +panic9698: + call void @finch_panic(ptr @.str.6570, i64 439, ptr @.str.6571) + unreachable +ok9699: + %t82 = getelementptr inbounds %S.cimport.Importer, ptr %t80, i32 0, i32 3 + %t83 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t83, ptr %a84 + store i32 0, ptr %a85 + %t86 = call i64 @finch_map_slot(ptr %t82, ptr %a84, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a85) + %t87 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t82, i32 0, i32 0 + %t88 = load ptr, ptr %t87 + %t89 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t88, i64 %t86 + %t90 = load i32, ptr %a85 + %t91 = icmp ne i32 %t90, 0 + br i1 %t91, label %map.new9700, label %map.have9701 +map.new9700: + %t92 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 1 + call void @finch_str_copy(ptr %t92, ptr %a84) + %t93 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t93 + br label %map.have9701 +map.have9701: + %t94 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t89, i32 0, i32 2 + store { ptr, i64, i64 } %t79, ptr %a95 + call void @finch_str_copy(ptr %a96, ptr %a95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + %t98 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t97, ptr %t94 + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_drop(ptr %a99) + br label %endif9697 +endif9697: + call void @finch_str_drop(ptr %a36) + br label %endif9676 +endif9676: + br label %endif9673 +else9672: + %t100 = load i32, ptr %a13 + %t101 = icmp eq i32 %t100, 8 + br i1 %t101, label %then9702, label %else9703 +then9702: + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic9705, label %ok9706 +panic9705: + call void @finch_panic(ptr @.str.6572, i64 443, ptr @.str.6573) + unreachable +ok9706: + %t104 = getelementptr inbounds %S.cimport.Importer, ptr %t102, i32 0, i32 0 + %t105 = getelementptr inbounds %S.cimport.CImports, ptr %t104, i32 0, i32 0 + %t106 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t106, ptr %a107 + %t108 = call i64 @finch_map_find(ptr %t105, ptr %a107, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t109 = icmp sge i64 %t108, 0 + br i1 %t109, label %then9707, label %endif9709 +then9707: + call void @finch_str_drop(ptr %a9) + ret void +endif9709: + %t110 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_copy(ptr %a112, ptr %a111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + %t114 = insertvalue %S.cimport.CFunc zeroinitializer, { ptr, i64, i64 } %t113, 0 + %t115 = load ptr, ptr %a1 + %t116 = icmp eq ptr %t115, null + br i1 %t116, label %panic9710, label %ok9711 +panic9710: + call void @finch_panic(ptr @.str.6574, i64 446, ptr @.str.6575) + unreachable +ok9711: + %t117 = getelementptr inbounds %S.cimport.Importer, ptr %t115, i32 0, i32 2 + %t118 = load { ptr, i64, i64 }, ptr %t117 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_copy(ptr %a120, ptr %a119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + %t122 = insertvalue %S.cimport.CFunc %t114, { ptr, i64, i64 } %t121, 1 + store %S.cimport.CFunc %t122, ptr %a123 + %t124 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t124, ptr %a125 + %t126 = call i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8 %a125) + %t127 = icmp eq i32 %t126, 3 + br i1 %t127, label %then9712, label %endif9714 +then9712: + %t128 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + %t129 = load { ptr, i64, i64 }, ptr %t128 + store { ptr, i64, i64 } { ptr @.str.6576, i64 62, i64 0 }, ptr %t128 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load %S.cimport.CFunc, ptr %a123 + %t132 = load ptr, ptr %a1 + %t133 = icmp eq ptr %t132, null + br i1 %t133, label %panic9715, label %ok9716 +panic9715: + call void @finch_panic(ptr @.str.6577, i64 449, ptr @.str.6578) + unreachable +ok9716: + %t134 = getelementptr inbounds %S.cimport.Importer, ptr %t132, i32 0, i32 0 + %t135 = getelementptr inbounds %S.cimport.CImports, ptr %t134, i32 0, i32 0 + %t136 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t136, ptr %a137 + store i32 0, ptr %a138 + %t139 = call i64 @finch_map_slot(ptr %t135, ptr %a137, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a138) + %t140 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t135, i32 0, i32 0 + %t141 = load ptr, ptr %t140 + %t142 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t141, i64 %t139 + %t143 = load i32, ptr %a138 + %t144 = icmp ne i32 %t143, 0 + br i1 %t144, label %map.new9717, label %map.have9718 +map.new9717: + %t145 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 1 + call void @finch_str_copy(ptr %t145, ptr %a137) + %t146 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 + store %S.cimport.CFunc zeroinitializer, ptr %t146 + br label %map.have9718 +map.have9718: + %t147 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t142, i32 0, i32 2 + store %S.cimport.CFunc %t131, ptr %a148 + call void @finch.copy.S_cimport_CFunc(ptr %a149, ptr %a148) + %t150 = load %S.cimport.CFunc, ptr %a149 + %t151 = load %S.cimport.CFunc, ptr %t147 + store %S.cimport.CFunc %t150, ptr %t147 + store %S.cimport.CFunc %t151, ptr %a152 + call void @finch.drop.S_cimport_CFunc(ptr %a152) + call void @finch.drop.S_cimport_CFunc(ptr %a123) + call void @finch_str_drop(ptr %a9) + ret void +endif9714: + %t155 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t155, ptr %a156 + call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a154, ptr byval(%S.C.CXCursor) align 8 %a156) + %t157 = load %S.C.CXType, ptr %a154 + store %S.C.CXType %t157, ptr %a158 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a153, ptr byval(%S.C.CXType) align 8 %a158) + %t159 = load %S.C.CXType, ptr %a153 + store %S.C.CXType %t159, ptr %a160 + %t161 = getelementptr inbounds %S.C.CXType, ptr %a160, i32 0, i32 0 + %t162 = load i32, ptr %t161 + %t163 = icmp eq i32 %t162, 110 + br i1 %t163, label %then9719, label %endif9721 +then9719: + %t164 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + %t165 = load { ptr, i64, i64 }, ptr %t164 + store { ptr, i64, i64 } { ptr @.str.6579, i64 42, i64 0 }, ptr %t164 + store { ptr, i64, i64 } %t165, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load %S.cimport.CFunc, ptr %a123 + %t168 = load ptr, ptr %a1 + %t169 = icmp eq ptr %t168, null + br i1 %t169, label %panic9722, label %ok9723 +panic9722: + call void @finch_panic(ptr @.str.6580, i64 455, ptr @.str.6581) + unreachable +ok9723: + %t170 = getelementptr inbounds %S.cimport.Importer, ptr %t168, i32 0, i32 0 + %t171 = getelementptr inbounds %S.cimport.CImports, ptr %t170, i32 0, i32 0 + %t172 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t172, ptr %a173 + store i32 0, ptr %a174 + %t175 = call i64 @finch_map_slot(ptr %t171, ptr %a173, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a174) + %t176 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t171, i32 0, i32 0 + %t177 = load ptr, ptr %t176 + %t178 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t177, i64 %t175 + %t179 = load i32, ptr %a174 + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %map.new9724, label %map.have9725 +map.new9724: + %t181 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 1 + call void @finch_str_copy(ptr %t181, ptr %a173) + %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 + store %S.cimport.CFunc zeroinitializer, ptr %t182 + br label %map.have9725 +map.have9725: + %t183 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t178, i32 0, i32 2 + store %S.cimport.CFunc %t167, ptr %a184 + call void @finch.copy.S_cimport_CFunc(ptr %a185, ptr %a184) + %t186 = load %S.cimport.CFunc, ptr %a185 + %t187 = load %S.cimport.CFunc, ptr %t183 + store %S.cimport.CFunc %t186, ptr %t183 + store %S.cimport.CFunc %t187, ptr %a188 + call void @finch.drop.S_cimport_CFunc(ptr %a188) + call void @finch.drop.S_cimport_CFunc(ptr %a123) + call void @finch_str_drop(ptr %a9) + ret void +endif9721: + %t189 = load ptr, ptr %a1 + %t191 = load %S.C.CXType, ptr %a160 + store %S.C.CXType %t191, ptr %a192 + call void @clang_getResultType(ptr sret(%S.C.CXType) align 16 %a190, ptr byval(%S.C.CXType) align 8 %a192) + %t193 = load %S.C.CXType, ptr %a190 + %t194 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t189, %S.C.CXType %t193, i1 true, i1 false) + store %S.cimport.Mapped %t194, ptr %a195 + %t196 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 2 + %t197 = load i1, ptr %t196 + br i1 %t197, label %then9726, label %else9727 +then9726: + %t198 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 0 + %t199 = load %S.ast.Type, ptr %t198 + %t200 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 2 + store %S.ast.Type %t199, ptr %a201 + call void @finch.copy.S_ast_Type(ptr %a202, ptr %a201) + %t203 = load %S.ast.Type, ptr %a202 + %t204 = load %S.ast.Type, ptr %t200 + store %S.ast.Type %t203, ptr %t200 + store %S.ast.Type %t204, ptr %a205 + call void @finch.drop.S_ast_Type(ptr %a205) + br label %endif9728 +else9727: + %t206 = getelementptr inbounds %S.cimport.Mapped, ptr %a195, i32 0, i32 1 + %t207 = load { ptr, i64, i64 }, ptr %t206 + %t208 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + store { ptr, i64, i64 } %t207, ptr %a209 + call void @finch_str_copy(ptr %a210, ptr %a209) + %t211 = load { ptr, i64, i64 }, ptr %a210 + %t212 = load { ptr, i64, i64 }, ptr %t208 + store { ptr, i64, i64 } %t211, ptr %t208 + store { ptr, i64, i64 } %t212, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %endif9728 +endif9728: + %t214 = load %S.C.CXType, ptr %a160 + store %S.C.CXType %t214, ptr %a215 + %t216 = call i32 @clang_getNumArgTypes(ptr byval(%S.C.CXType) align 8 %a215) + %t217 = sext i32 %t216 to i64 + store i64 %t217, ptr %a218 + %t219 = load i64, ptr %a218 + store i64 0, ptr %a220 + br label %for.cond9729 +for.cond9729: + %t221 = load i64, ptr %a220 + %t222 = icmp slt i64 %t221, %t219 + br i1 %t222, label %for.body9730, label %for.end9732 +for.body9730: + %t223 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 + %t225 = load i64, ptr %t224 + %t226 = icmp sgt i64 %t225, 0 + br i1 %t226, label %then9733, label %endif9735 +then9733: + br label %for.end9732 +endif9735: + %t227 = load ptr, ptr %a1 + %t229 = load %S.C.CXType, ptr %a160 + store %S.C.CXType %t229, ptr %a230 + %t231 = load i64, ptr %a220 + %t232 = trunc i64 %t231 to i32 + call void @clang_getArgType(ptr sret(%S.C.CXType) align 16 %a228, ptr byval(%S.C.CXType) align 8 %a230, i32 %t232) + %t233 = load %S.C.CXType, ptr %a228 + %t234 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t227, %S.C.CXType %t233, i1 true, i1 true) + store %S.cimport.Mapped %t234, ptr %a235 + %t236 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 2 + %t237 = load i1, ptr %t236 + br i1 %t237, label %then9736, label %else9737 +then9736: + %t238 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 3 + %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i32 0, i32 1 + %t240 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 0 + %t241 = load %S.ast.Type, ptr %t240 + store %S.ast.Type %t241, ptr %a242 + call void @finch.copy.S_ast_Type(ptr %a243, ptr %a242) + %t244 = load %S.ast.Type, ptr %a243 + %t245 = load i64, ptr %t239 + %t246 = add i64 %t245, 1 + call void @finch_arr_reserve(ptr %t238, i64 %t246, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t247 = load ptr, ptr %t238 + %t248 = getelementptr inbounds %S.ast.Type, ptr %t247, i64 %t245 + store %S.ast.Type %t244, ptr %t248 + store i64 %t246, ptr %t239 + br label %endif9738 +else9737: + %t249 = getelementptr inbounds %S.cimport.Mapped, ptr %a235, i32 0, i32 1 + %t250 = load { ptr, i64, i64 }, ptr %t249 + %t251 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 5 + store { ptr, i64, i64 } %t250, ptr %a252 + call void @finch_str_copy(ptr %a253, ptr %a252) + %t254 = load { ptr, i64, i64 }, ptr %a253 + %t255 = load { ptr, i64, i64 }, ptr %t251 + store { ptr, i64, i64 } %t254, ptr %t251 + store { ptr, i64, i64 } %t255, ptr %a256 + call void @finch_str_drop(ptr %a256) + br label %endif9738 +endif9738: + call void @finch.drop.S_cimport_Mapped(ptr %a235) + br label %for.step9731 +for.step9731: + %t257 = load i64, ptr %a220 + %t258 = add i64 %t257, 1 + store i64 %t258, ptr %a220 + br label %for.cond9729 +for.end9732: + %t259 = load %S.C.CXType, ptr %a160 + store %S.C.CXType %t259, ptr %a260 + %t261 = call i32 @clang_isFunctionTypeVariadic(ptr byval(%S.C.CXType) align 8 %a260) + %t262 = icmp ne i32 %t261, 0 + %t263 = getelementptr inbounds %S.cimport.CFunc, ptr %a123, i32 0, i32 4 + store i1 %t262, ptr %t263 + %t264 = load %S.cimport.CFunc, ptr %a123 + %t265 = load ptr, ptr %a1 + %t266 = icmp eq ptr %t265, null + br i1 %t266, label %panic9739, label %ok9740 +panic9739: + call void @finch_panic(ptr @.str.6582, i64 477, ptr @.str.6583) + unreachable +ok9740: + %t267 = getelementptr inbounds %S.cimport.Importer, ptr %t265, i32 0, i32 0 + %t268 = getelementptr inbounds %S.cimport.CImports, ptr %t267, i32 0, i32 0 + %t269 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t269, ptr %a270 + store i32 0, ptr %a271 + %t272 = call i64 @finch_map_slot(ptr %t268, ptr %a270, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a271) + %t273 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t268, i32 0, i32 0 + %t274 = load ptr, ptr %t273 + %t275 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t274, i64 %t272 + %t276 = load i32, ptr %a271 + %t277 = icmp ne i32 %t276, 0 + br i1 %t277, label %map.new9741, label %map.have9742 +map.new9741: + %t278 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 1 + call void @finch_str_copy(ptr %t278, ptr %a270) + %t279 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 + store %S.cimport.CFunc zeroinitializer, ptr %t279 + br label %map.have9742 +map.have9742: + %t280 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t275, i32 0, i32 2 + store %S.cimport.CFunc %t264, ptr %a281 + call void @finch.copy.S_cimport_CFunc(ptr %a282, ptr %a281) + %t283 = load %S.cimport.CFunc, ptr %a282 + %t284 = load %S.cimport.CFunc, ptr %t280 + store %S.cimport.CFunc %t283, ptr %t280 + store %S.cimport.CFunc %t284, ptr %a285 + call void @finch.drop.S_cimport_CFunc(ptr %a285) + call void @finch.drop.S_cimport_Mapped(ptr %a195) + call void @finch.drop.S_cimport_CFunc(ptr %a123) + br label %endif9704 +else9703: + %t286 = load i32, ptr %a13 + %t287 = icmp eq i32 %t286, 9 + br i1 %t287, label %then9743, label %else9744 +then9743: + %t288 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t288, ptr %a289 + %t290 = call i32 @clang_Cursor_getStorageClass(ptr byval(%S.C.CXCursor) align 8 %a289) + %t291 = icmp ne i32 %t290, 2 + br label %logic.from9746 +logic.from9746: + br i1 %t291, label %logic.end9748, label %logic.rhs9747 +logic.rhs9747: + %t292 = load ptr, ptr %a1 + %t293 = icmp eq ptr %t292, null + br i1 %t293, label %panic9749, label %ok9750 +panic9749: + call void @finch_panic(ptr @.str.6584, i64 479, ptr @.str.6585) + unreachable +ok9750: + %t294 = getelementptr inbounds %S.cimport.Importer, ptr %t292, i32 0, i32 0 + %t295 = getelementptr inbounds %S.cimport.CImports, ptr %t294, i32 0, i32 2 + %t296 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t296, ptr %a297 + %t298 = call i64 @finch_map_find(ptr %t295, ptr %a297, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t299 = icmp sge i64 %t298, 0 + br label %logic.rend9751 +logic.rend9751: + br label %logic.end9748 +logic.end9748: + %t300 = phi i1 [ true, %logic.from9746 ], [ %t299, %logic.rend9751 ] + br i1 %t300, label %then9752, label %endif9754 +then9752: + call void @finch_str_drop(ptr %a9) + ret void +endif9754: + %t301 = load ptr, ptr %a1 + %t303 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t303, ptr %a304 + call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a302, ptr byval(%S.C.CXCursor) align 8 %a304) + %t305 = load %S.C.CXType, ptr %a302 + %t306 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t301, %S.C.CXType %t305, i1 false, i1 false) + store %S.cimport.Mapped %t306, ptr %a307 + %t308 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 2 + %t309 = load i1, ptr %t308 + br i1 %t309, label %then9755, label %endif9757 +then9755: + %t310 = getelementptr inbounds %S.cimport.Mapped, ptr %a307, i32 0, i32 0 + %t311 = load %S.ast.Type, ptr %t310 + %t312 = load ptr, ptr %a1 + %t313 = icmp eq ptr %t312, null + br i1 %t313, label %panic9758, label %ok9759 +panic9758: + call void @finch_panic(ptr @.str.6586, i64 484, ptr @.str.6587) + unreachable +ok9759: + %t314 = getelementptr inbounds %S.cimport.Importer, ptr %t312, i32 0, i32 0 + %t315 = getelementptr inbounds %S.cimport.CImports, ptr %t314, i32 0, i32 2 + %t316 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t316, ptr %a317 + store i32 0, ptr %a318 + %t319 = call i64 @finch_map_slot(ptr %t315, ptr %a317, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a318) + %t320 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t315, i32 0, i32 0 + %t321 = load ptr, ptr %t320 + %t322 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t321, i64 %t319 + %t323 = load i32, ptr %a318 + %t324 = icmp ne i32 %t323, 0 + br i1 %t324, label %map.new9760, label %map.have9761 +map.new9760: + %t325 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 1 + call void @finch_str_copy(ptr %t325, ptr %a317) + %t326 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 + store %S.ast.Type zeroinitializer, ptr %t326 + br label %map.have9761 +map.have9761: + %t327 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t322, i32 0, i32 2 + store %S.ast.Type %t311, ptr %a328 + call void @finch.copy.S_ast_Type(ptr %a329, ptr %a328) + %t330 = load %S.ast.Type, ptr %a329 + %t331 = load %S.ast.Type, ptr %t327 + store %S.ast.Type %t330, ptr %t327 + store %S.ast.Type %t331, ptr %a332 + call void @finch.drop.S_ast_Type(ptr %a332) + br label %endif9757 +endif9757: + call void @finch.drop.S_cimport_Mapped(ptr %a307) + br label %endif9745 +else9744: + %t333 = load i32, ptr %a13 + %t334 = icmp eq i32 %t333, 2 + br i1 %t334, label %then9762, label %else9763 +then9762: + %t335 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t335, ptr %a336 + %t337 = call i32 @clang_isCursorDefinition(ptr byval(%S.C.CXCursor) align 8 %a336) + %t338 = icmp ne i32 %t337, 0 + br label %logic.from9765 +logic.from9765: + br i1 %t338, label %logic.rhs9766, label %logic.end9767 +logic.rhs9766: + %t339 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t340 = load i64, ptr %t339 + %t341 = icmp sgt i64 %t340, 0 + br label %logic.rend9768 +logic.rend9768: + br label %logic.end9767 +logic.end9767: + %t342 = phi i1 [ false, %logic.from9765 ], [ %t341, %logic.rend9768 ] + br label %logic.from9769 +logic.from9769: + br i1 %t342, label %logic.rhs9770, label %logic.end9771 +logic.rhs9770: + %t343 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t343, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.6589, i64 1, i64 0 }, ptr %a346 + %t347 = call i64 @finch_str_find(ptr %a344, ptr %a346) + %t348 = icmp sge i64 %t347, 0 + %t349 = xor i1 %t348, true + br label %logic.rend9772 +logic.rend9772: + br label %logic.end9771 +logic.end9771: + %t350 = phi i1 [ false, %logic.from9769 ], [ %t349, %logic.rend9772 ] + br i1 %t350, label %then9773, label %endif9775 +then9773: + %t351 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t351, ptr %a352 + %t353 = call { i64, i64 } @clang_getCursorUSR(ptr byval(%S.C.CXCursor) align 8 %a352) + store { i64, i64 } %t353, ptr %a354 + %t355 = load %S.C.CXString, ptr %a354 + %t356 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t355) + store { ptr, i64, i64 } %t356, ptr %a357 + %t358 = load ptr, ptr %a1 + %t359 = icmp eq ptr %t358, null + br i1 %t359, label %panic9776, label %ok9777 +panic9776: + call void @finch_panic(ptr @.str.6590, i64 489, ptr @.str.6591) + unreachable +ok9777: + %t360 = getelementptr inbounds %S.cimport.Importer, ptr %t358, i32 0, i32 3 + %t361 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t361, ptr %a362 + %t363 = call i64 @finch_map_find(ptr %t360, ptr %a362, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t364 = icmp sge i64 %t363, 0 + %t365 = xor i1 %t364, true + br i1 %t365, label %then9778, label %endif9780 +then9778: + %t366 = load { ptr, i64, i64 }, ptr %a9 + %t367 = load ptr, ptr %a1 + %t368 = icmp eq ptr %t367, null + br i1 %t368, label %panic9781, label %ok9782 +panic9781: + call void @finch_panic(ptr @.str.6592, i64 490, ptr @.str.6593) + unreachable +ok9782: + %t369 = getelementptr inbounds %S.cimport.Importer, ptr %t367, i32 0, i32 3 + %t370 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t370, ptr %a371 + store i32 0, ptr %a372 + %t373 = call i64 @finch_map_slot(ptr %t369, ptr %a371, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a372) + %t374 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t369, i32 0, i32 0 + %t375 = load ptr, ptr %t374 + %t376 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t375, i64 %t373 + %t377 = load i32, ptr %a372 + %t378 = icmp ne i32 %t377, 0 + br i1 %t378, label %map.new9783, label %map.have9784 +map.new9783: + %t379 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 1 + call void @finch_str_copy(ptr %t379, ptr %a371) + %t380 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t380 + br label %map.have9784 +map.have9784: + %t381 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t376, i32 0, i32 2 + store { ptr, i64, i64 } %t366, ptr %a382 + call void @finch_str_copy(ptr %a383, ptr %a382) + %t384 = load { ptr, i64, i64 }, ptr %a383 + %t385 = load { ptr, i64, i64 }, ptr %t381 + store { ptr, i64, i64 } %t384, ptr %t381 + store { ptr, i64, i64 } %t385, ptr %a386 + call void @finch_str_drop(ptr %a386) + br label %endif9780 +endif9780: + call void @finch_str_drop(ptr %a357) + br label %endif9775 +endif9775: + br label %endif9764 +else9763: + %t387 = load i32, ptr %a13 + %t388 = icmp eq i32 %t387, 5 + br i1 %t388, label %then9785, label %else9786 +then9785: + %t389 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t389, ptr %a390 + %t391 = load ptr, ptr %a1 + %t392 = call i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8 %a390, ptr @finch.c.cimport.visitTop, ptr %t391) + br label %endif9787 +else9786: + %t393 = load i32, ptr %a13 + %t394 = icmp eq i32 %t393, 7 + br i1 %t394, label %then9788, label %else9789 +then9788: + %t395 = load ptr, ptr %a1 + %t396 = icmp eq ptr %t395, null + br i1 %t396, label %panic9791, label %ok9792 +panic9791: + call void @finch_panic(ptr @.str.6594, i64 496, ptr @.str.6595) + unreachable +ok9792: + %t397 = getelementptr inbounds %S.cimport.Importer, ptr %t395, i32 0, i32 0 + %t398 = getelementptr inbounds %S.cimport.CImports, ptr %t397, i32 0, i32 1 + %t399 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t399, ptr %a400 + %t401 = call i64 @finch_map_find(ptr %t398, ptr %a400, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t402 = icmp sge i64 %t401, 0 + %t403 = xor i1 %t402, true + br i1 %t403, label %then9793, label %endif9795 +then9793: + %t404 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t404, ptr %a405 + %t406 = call i64 @clang_getEnumConstantDeclValue(ptr byval(%S.C.CXCursor) align 8 %a405) + %t407 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t406, 1 + %t408 = load ptr, ptr %a1 + %t409 = icmp eq ptr %t408, null + br i1 %t409, label %panic9796, label %ok9797 +panic9796: + call void @finch_panic(ptr @.str.6596, i64 497, ptr @.str.6597) + unreachable +ok9797: + %t410 = getelementptr inbounds %S.cimport.Importer, ptr %t408, i32 0, i32 0 + %t411 = getelementptr inbounds %S.cimport.CImports, ptr %t410, i32 0, i32 1 + %t412 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t412, ptr %a413 + store i32 0, ptr %a414 + %t415 = call i64 @finch_map_slot(ptr %t411, ptr %a413, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a414) + %t416 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t411, i32 0, i32 0 + %t417 = load ptr, ptr %t416 + %t418 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t417, i64 %t415 + %t419 = load i32, ptr %a414 + %t420 = icmp ne i32 %t419, 0 + br i1 %t420, label %map.new9798, label %map.have9799 +map.new9798: + %t421 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 1 + call void @finch_str_copy(ptr %t421, ptr %a413) + %t422 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 + store %S.cimport.CConst zeroinitializer, ptr %t422 + br label %map.have9799 +map.have9799: + %t423 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t418, i32 0, i32 2 + %t424 = load %S.cimport.CConst, ptr %t423 + store %S.cimport.CConst %t407, ptr %t423 + store %S.cimport.CConst %t424, ptr %a425 + call void @finch.drop.S_cimport_CConst(ptr %a425) + br label %endif9795 +endif9795: + br label %endif9790 +else9789: + %t426 = load i32, ptr %a13 + %t427 = icmp eq i32 %t426, 501 + br i1 %t427, label %then9800, label %endif9802 +then9800: + %t428 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t428, ptr %a429 + %t430 = call i32 @clang_Cursor_isMacroBuiltin(ptr byval(%S.C.CXCursor) align 8 %a429) + %t431 = icmp ne i32 %t430, 0 + br label %logic.from9803 +logic.from9803: + br i1 %t431, label %logic.end9805, label %logic.rhs9804 +logic.rhs9804: + %t432 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t432, ptr %a433 + %t434 = call i32 @clang_Cursor_isMacroFunctionLike(ptr byval(%S.C.CXCursor) align 8 %a433) + %t435 = icmp ne i32 %t434, 0 + br label %logic.rend9806 +logic.rend9806: + br label %logic.end9805 +logic.end9805: + %t436 = phi i1 [ true, %logic.from9803 ], [ %t435, %logic.rend9806 ] + br i1 %t436, label %then9807, label %endif9809 +then9807: + call void @finch_str_drop(ptr %a9) + ret void +endif9809: + %t437 = load ptr, ptr %a1 + %t438 = load %S.C.CXCursor, ptr %a2 + %t439 = call %S.cimport.Number @finch.cimport.macroValue(ptr %t437, %S.C.CXCursor %t438) + store %S.cimport.Number %t439, ptr %a440 + %t441 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 1 + %t442 = load i1, ptr %t441 + br label %logic.from9810 +logic.from9810: + br i1 %t442, label %logic.rhs9811, label %logic.end9812 +logic.rhs9811: + %t443 = load ptr, ptr %a1 + %t444 = icmp eq ptr %t443, null + br i1 %t444, label %panic9813, label %ok9814 +panic9813: + call void @finch_panic(ptr @.str.6598, i64 504, ptr @.str.6599) + unreachable +ok9814: + %t445 = getelementptr inbounds %S.cimport.Importer, ptr %t443, i32 0, i32 0 + %t446 = getelementptr inbounds %S.cimport.CImports, ptr %t445, i32 0, i32 1 + %t447 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t447, ptr %a448 + %t449 = call i64 @finch_map_find(ptr %t446, ptr %a448, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t450 = icmp sge i64 %t449, 0 + %t451 = xor i1 %t450, true + br label %logic.rend9815 +logic.rend9815: + br label %logic.end9812 +logic.end9812: + %t452 = phi i1 [ false, %logic.from9810 ], [ %t451, %logic.rend9815 ] + br i1 %t452, label %then9816, label %endif9818 +then9816: + %t453 = getelementptr inbounds %S.cimport.Number, ptr %a440, i32 0, i32 0 + %t454 = load %S.cimport.CConst, ptr %t453 + %t455 = load ptr, ptr %a1 + %t456 = icmp eq ptr %t455, null + br i1 %t456, label %panic9819, label %ok9820 +panic9819: + call void @finch_panic(ptr @.str.6600, i64 505, ptr @.str.6601) + unreachable +ok9820: + %t457 = getelementptr inbounds %S.cimport.Importer, ptr %t455, i32 0, i32 0 + %t458 = getelementptr inbounds %S.cimport.CImports, ptr %t457, i32 0, i32 1 + %t459 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t459, ptr %a460 + store i32 0, ptr %a461 + %t462 = call i64 @finch_map_slot(ptr %t458, ptr %a460, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a461) + %t463 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t458, i32 0, i32 0 + %t464 = load ptr, ptr %t463 + %t465 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t464, i64 %t462 + %t466 = load i32, ptr %a461 + %t467 = icmp ne i32 %t466, 0 + br i1 %t467, label %map.new9821, label %map.have9822 +map.new9821: + %t468 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 1 + call void @finch_str_copy(ptr %t468, ptr %a460) + %t469 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 + store %S.cimport.CConst zeroinitializer, ptr %t469 + br label %map.have9822 +map.have9822: + %t470 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t465, i32 0, i32 2 + store %S.cimport.CConst %t454, ptr %a471 + call void @finch.copy.S_cimport_CConst(ptr %a472, ptr %a471) + %t473 = load %S.cimport.CConst, ptr %a472 + %t474 = load %S.cimport.CConst, ptr %t470 + store %S.cimport.CConst %t473, ptr %t470 + store %S.cimport.CConst %t474, ptr %a475 + call void @finch.drop.S_cimport_CConst(ptr %a475) + br label %endif9818 +endif9818: + call void @finch.drop.S_cimport_Number(ptr %a440) + br label %endif9802 +endif9802: + br label %endif9790 +endif9790: + br label %endif9787 +endif9787: + br label %endif9764 +endif9764: + br label %endif9745 +endif9745: + br label %endif9704 +endif9704: + br label %endif9673 +endif9673: + call void @finch_str_drop(ptr %a9) + ret void +} + +define internal void @finch.drop.map_str_str(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9826 +n.cond9826: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9827, label %n.end9828 +n.body9827: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live9829, label %entry.next9830 +entry.live9829: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 2 + call void @finch_str_drop(ptr %t13) + br label %entry.next9830 +entry.next9830: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond9826 +n.end9828: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.map_str_bool(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9831 +n.cond9831: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9832, label %n.end9833 +n.body9832: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live9834, label %entry.next9835 +entry.live9834: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 2 + br label %entry.next9835 +entry.next9835: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond9831 +n.end9833: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_Importer(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 0 + call void @finch.drop.S_cimport_CImports(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 3 + call void @finch.drop.map_str_str(ptr %t3) + %t4 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 4 + call void @finch.drop.map_str_bool(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_ptr(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i1 %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i1, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca %S.cimport.Importer, align 16 + %a12 = alloca %S.cimport.CImports, align 16 + %a13 = alloca %S.cimport.CImports, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca i64, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca i64, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca i64, align 16 + %a113 = alloca ptr, align 16 + %a114 = alloca i64, align 16 + %a122 = alloca %S.cimport.Header, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca %S.C.CXUnsavedFile, align 16 + %a138 = alloca ptr, align 16 + %a140 = alloca i64, align 16 + %a153 = alloca i32, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca i64, align 16 + %a183 = alloca i64, align 16 + %a190 = alloca ptr, align 16 + %a196 = alloca [32 x i8], align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca %S.C.CXCursor, align 16 + %a321 = alloca %S.C.CXCursor, align 16 + %a329 = alloca %S.cimport.CImports, align 16 + %a330 = alloca %S.cimport.CImports, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i1 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store %S.cimport.Importer zeroinitializer, ptr %a6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = icmp eq i64 %t8, 0 + br i1 %t9, label %then9823, label %endif9825 +then9823: + %t10 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 + %t11 = load %S.cimport.CImports, ptr %t10 + store %S.cimport.CImports %t11, ptr %a12 + call void @finch.copy.S_cimport_CImports(ptr %a13, ptr %a12) + %t14 = load %S.cimport.CImports, ptr %a13 + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t15 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t16 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t15, %S.cimport.CImports %t14, 1 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t16 +endif9825: + %t17 = mul i64 3, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t18 = call ptr @finch_alloc(i64 %t17) + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 0 + store { ptr, i64, i64 } { ptr @.str.6602, i64 2, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 + store { ptr, i64, i64 } { ptr @.str.6603, i64 1, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 2 + store { ptr, i64, i64 } { ptr @.str.6604, i64 10, i64 0 }, ptr %t21 + %t22 = insertvalue { ptr, i64, i64 } undef, ptr %t18, 0 + %t23 = insertvalue { ptr, i64, i64 } %t22, i64 3, 1 + %t24 = insertvalue { ptr, i64, i64 } %t23, i64 3, 2 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = icmp sgt i64 %t27, 0 + br i1 %t28, label %then9836, label %endif9838 +then9836: + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t30 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6605, i64 9, i64 0 }, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a31 + %t35 = load i64, ptr %t29 + %t36 = add i64 %t35, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t36, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t37 = load ptr, ptr %a25 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t35 + store { ptr, i64, i64 } %t34, ptr %t38 + store i64 %t36, ptr %t29 + br label %endif9838 +endif9838: + %t39 = load i1, ptr %a4 + br i1 %t39, label %then9839, label %endif9841 +then9839: + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t41 = load i64, ptr %t40 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a25 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } { ptr @.str.6606, i64 19, i64 0 }, ptr %t44 + store i64 %t42, ptr %t40 + br label %endif9841 +endif9841: + store i64 0, ptr %a45 + br label %each.cond9842 +each.cond9842: + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = load i64, ptr %a45 + %t49 = icmp slt i64 %t48, %t47 + br i1 %t49, label %each.body9843, label %each.end9845 +each.body9843: + %t50 = load ptr, ptr %a2 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t55 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.6607, i64 2, i64 0 }, ptr %a57 + store { ptr, i64, i64 } %t55, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a56 + %t60 = load i64, ptr %t54 + %t61 = add i64 %t60, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t61, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t62 = load ptr, ptr %a25 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 %t60 + store { ptr, i64, i64 } %t59, ptr %t63 + store i64 %t61, ptr %t54 + br label %each.step9844 +each.step9844: + %t64 = load i64, ptr %a45 + %t65 = add i64 %t64, 1 + store i64 %t65, ptr %a45 + br label %each.cond9842 +each.end9845: + %t66 = load { ptr, i64, i64 }, ptr %a5 + %t67 = call { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %t66) + store { ptr, i64, i64 } %t67, ptr %a68 + store i64 0, ptr %a69 + br label %each.cond9846 +each.cond9846: + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a68, i32 0, i32 1 + %t71 = load i64, ptr %t70 + %t72 = load i64, ptr %a69 + %t73 = icmp slt i64 %t72, %t71 + br i1 %t73, label %each.body9847, label %each.end9849 +each.body9847: + %t74 = load ptr, ptr %a68 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 %t72 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } %t76, ptr %a77 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t79 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_copy(ptr %a81, ptr %a80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + %t83 = load i64, ptr %t78 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %a25 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 + store { ptr, i64, i64 } %t82, ptr %t86 + store i64 %t84, ptr %t78 + br label %each.step9848 +each.step9848: + %t87 = load i64, ptr %a69 + %t88 = add i64 %t87, 1 + store i64 %t88, ptr %a69 + br label %each.cond9846 +each.end9849: + call void @finch.drop.arr_str(ptr %a68) + store { ptr, i64, i64 } zeroinitializer, ptr %a89 + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t91 = load i64, ptr %t90 + store i64 0, ptr %a92 + br label %for.cond9850 +for.cond9850: + %t93 = load i64, ptr %a92 + %t94 = icmp slt i64 %t93, %t91 + br i1 %t94, label %for.body9851, label %for.end9853 +for.body9851: + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 + %t96 = load i64, ptr %a92 + %t97 = load { ptr, i64, i64 }, ptr %a25 + %t98 = extractvalue { ptr, i64, i64 } %t97, 1 + %t99 = icmp uge i64 %t96, %t98 + br i1 %t99, label %range9854, label %inrange9855 +range9854: + call void @finch_panic_index(ptr @.str.6608, i64 532, i64 %t96, i64 %t98) + unreachable +inrange9855: + %t100 = extractvalue { ptr, i64, i64 } %t97, 0 + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t96 + %t102 = load { ptr, i64, i64 }, ptr %t101 + %t103 = extractvalue { ptr, i64, i64 } %t102, 0 + %t104 = icmp eq ptr %t103, null + %t105 = select i1 %t104, ptr @.str.6609, ptr %t103 + %t106 = load i64, ptr %t95 + %t107 = add i64 %t106, 1 + call void @finch_arr_reserve(ptr %a89, i64 %t107, i64 ptrtoint (ptr getelementptr (ptr, ptr null, i32 1) to i64)) + %t108 = load ptr, ptr %a89 + %t109 = getelementptr inbounds ptr, ptr %t108, i64 %t106 + store ptr %t105, ptr %t109 + store i64 %t107, ptr %t95 + br label %for.step9852 +for.step9852: + %t110 = load i64, ptr %a92 + %t111 = add i64 %t110, 1 + store i64 %t111, ptr %a92 + br label %for.cond9850 +for.end9853: + %t112 = call ptr @clang_createIndex(i32 0, i32 0) + store ptr %t112, ptr %a113 + store i64 0, ptr %a114 + br label %each.cond9856 +each.cond9856: + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = load i64, ptr %a114 + %t118 = icmp slt i64 %t117, %t116 + br i1 %t118, label %each.body9857, label %each.end9859 +each.body9857: + %t119 = load ptr, ptr %a1 + %t120 = getelementptr inbounds %S.cimport.Header, ptr %t119, i64 %t117 + %t121 = load %S.cimport.Header, ptr %t120 + store %S.cimport.Header %t121, ptr %a122 + %t123 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t124 = load { ptr, i64, i64 }, ptr %t123 + store { ptr, i64, i64 } { ptr @.str.6610, i64 10, i64 0 }, ptr %a126 + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a125 + store { ptr, i64, i64 } %t128, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6611, i64 2, i64 0 }, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + store { ptr, i64, i64 } %t128, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t133, ptr %a134 + %t135 = load { ptr, i64, i64 }, ptr %a134 + %t136 = call %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } { ptr @.str.6612, i64 14, i64 0 }, { ptr, i64, i64 } %t135) + store %S.C.CXUnsavedFile %t136, ptr %a137 + store ptr null, ptr %a138 + %t139 = or i64 1, 64 + store i64 %t139, ptr %a140 + %t141 = load ptr, ptr %a113 + %t142 = extractvalue { ptr, i64, i64 } { ptr @.str.6613, i64 14, i64 0 }, 0 + %t143 = icmp eq ptr %t142, null + %t144 = select i1 %t143, ptr @.str.6614, ptr %t142 + %t145 = load { ptr, i64, i64 }, ptr %a89 + %t146 = extractvalue { ptr, i64, i64 } %t145, 0 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 + %t148 = load i64, ptr %t147 + %t149 = trunc i64 %t148 to i32 + %t150 = load i64, ptr %a140 + %t151 = trunc i64 %t150 to i32 + %t152 = call i32 @clang_parseTranslationUnit2(ptr %t141, ptr %t144, ptr %t146, i32 %t149, ptr %a137, i32 1, i32 %t151, ptr %a138) + store i32 %t152, ptr %a153 + %t154 = load i32, ptr %a153 + %t155 = icmp ne i32 %t154, 0 + br label %logic.from9860 +logic.from9860: + br i1 %t155, label %logic.end9862, label %logic.rhs9861 +logic.rhs9861: + %t156 = load ptr, ptr %a138 + %t157 = icmp eq ptr %t156, null + br label %logic.rend9863 +logic.rend9863: + br label %logic.end9862 +logic.end9862: + %t158 = phi i1 [ true, %logic.from9860 ], [ %t157, %logic.rend9863 ] + br i1 %t158, label %then9864, label %endif9866 +then9864: + %t159 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6615, i64 33, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t166 = load { ptr, i64, i64 }, ptr %t165 + store { ptr, i64, i64 } %t164, ptr %a168 + store { ptr, i64, i64 } %t166, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t164, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t171, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.6616, i64 1, i64 0 }, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t171, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a172 + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t177 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t176, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t177 +endif9866: + %t178 = load ptr, ptr %a138 + %t179 = call i32 @clang_getNumDiagnostics(ptr %t178) + %t180 = zext i32 %t179 to i64 + store i64 %t180, ptr %a181 + %t182 = load i64, ptr %a181 + store i64 0, ptr %a183 + br label %for.cond9867 +for.cond9867: + %t184 = load i64, ptr %a183 + %t185 = icmp slt i64 %t184, %t182 + br i1 %t185, label %for.body9868, label %for.end9870 +for.body9868: + %t186 = load ptr, ptr %a138 + %t187 = load i64, ptr %a183 + %t188 = trunc i64 %t187 to i32 + %t189 = call ptr @clang_getDiagnostic(ptr %t186, i32 %t188) + store ptr %t189, ptr %a190 + %t191 = load ptr, ptr %a190 + %t192 = call i32 @clang_getDiagnosticSeverity(ptr %t191) + %t193 = icmp sge i32 %t192, 3 + br i1 %t193, label %then9871, label %endif9873 +then9871: + %t194 = load ptr, ptr %a190 + %t195 = call { i64, i64 } @clang_getDiagnosticSpelling(ptr %t194) + store { i64, i64 } %t195, ptr %a196 + %t197 = load %S.C.CXString, ptr %a196 + %t198 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t197) + store { ptr, i64, i64 } %t198, ptr %a199 + %t200 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t200) + %t201 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t201, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.6618, i64 14, i64 0 }, ptr %a204 + %t205 = call i64 @finch_str_find(ptr %a202, ptr %a204) + %t206 = icmp sge i64 %t205, 0 + br i1 %t206, label %then9874, label %endif9876 +then9874: + %t207 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t207, ptr %a208 + %t210 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t210, ptr %a211 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a199, i32 0, i32 1 + %t214 = load i64, ptr %t213 + call void @finch_str_sub(ptr %a212, ptr %a211, i64 1, i64 %t214, ptr @.str.6620, i64 552) + %t215 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t215, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.6622, i64 1, i64 0 }, ptr %a218 + %t219 = call i64 @finch_str_find(ptr %a216, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = add i64 %t219, 1 + call void @finch_str_sub(ptr %a209, ptr %a208, i64 1, i64 %t221, ptr @.str.6619, i64 552) + %t222 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t222, ptr %a223 + %t224 = load { ptr, i64, i64 }, ptr %a223 + %t225 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t226 = load { ptr, i64, i64 }, ptr %t225 + store { ptr, i64, i64 } %t224, ptr %a227 + store { ptr, i64, i64 } %t226, ptr %a228 + %t229 = call i32 @finch_str_eq(ptr %a227, ptr %a228) + %t230 = icmp ne i32 %t229, 0 + br i1 %t230, label %then9877, label %endif9879 +then9877: + %t231 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t232 = load { ptr, i64, i64 }, ptr %t231 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.6623, i64 34, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a233 + %t237 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + store { ptr, i64, i64 } %t236, ptr %a240 + store { ptr, i64, i64 } %t238, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t236, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + store { ptr, i64, i64 } %t243, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.6624, i64 1, i64 0 }, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t243, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + call void @finch_str_drop(ptr %a223) + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t249 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t248, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t249 +endif9879: + %t250 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t251 = load { ptr, i64, i64 }, ptr %t250 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.6625, i64 34, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + %t255 = load { ptr, i64, i64 }, ptr %a252 + %t256 = load { ptr, i64, i64 }, ptr %a223 + store { ptr, i64, i64 } %t255, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t261, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.6626, i64 10, i64 0 }, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t261, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + %t267 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t266, ptr %a270 + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t266, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + store { ptr, i64, i64 } %t273, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.6627, i64 60, i64 0 }, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + call void @finch_str_drop(ptr %a223) + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t279 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t278, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t279 +endif9876: + %t280 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a283 + store { ptr, i64, i64 } { ptr @.str.6628, i64 19, i64 0 }, ptr %a284 + call void @finch_str_concat(ptr %a282, ptr %a283, ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a282 + %t286 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t285, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t285, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t292, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.6629, i64 16, i64 0 }, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t292, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a293 + %t298 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t297, ptr %a300 + store { ptr, i64, i64 } %t298, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t297, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + call void @finch_str_drop(ptr %a199) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t304 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t303, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t304 +endif9873: + %t305 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t305) + br label %for.step9869 +for.step9869: + %t306 = load i64, ptr %a183 + %t307 = add i64 %t306, 1 + store i64 %t307, ptr %a183 + br label %for.cond9867 +for.end9870: + %t308 = load ptr, ptr %a138 + %t309 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1 + store ptr %t308, ptr %t309 + %t310 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t311 = load { ptr, i64, i64 }, ptr %t310 + %t312 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2 + store { ptr, i64, i64 } %t311, ptr %a313 + call void @finch_str_copy(ptr %a314, ptr %a313) + %t315 = load { ptr, i64, i64 }, ptr %a314 + %t316 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t315, ptr %t312 + store { ptr, i64, i64 } %t316, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t319 = load ptr, ptr %a138 + call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a318, ptr %t319) + %t320 = load %S.C.CXCursor, ptr %a318 + store %S.C.CXCursor %t320, ptr %a321 + %t322 = call i32 @clang_visitChildren(ptr byval(%S.C.CXCursor) align 8 %a321, ptr @finch.c.cimport.visitTop, ptr %a6) + %t323 = load ptr, ptr %a138 + call void @clang_disposeTranslationUnit(ptr %t323) + call void @finch_str_drop(ptr %a134) + br label %each.step9858 +each.step9858: + %t324 = load i64, ptr %a114 + %t325 = add i64 %t324, 1 + store i64 %t325, ptr %a114 + br label %each.cond9856 +each.end9859: + %t326 = load ptr, ptr %a113 + call void @clang_disposeIndex(ptr %t326) + %t327 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 + %t328 = load %S.cimport.CImports, ptr %t327 + store %S.cimport.CImports %t328, ptr %a329 + call void @finch.copy.S_cimport_CImports(ptr %a330, ptr %a329) + %t331 = load %S.cimport.CImports, ptr %a330 + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t332 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t333 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t332, %S.cimport.CImports %t331, 1 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t333 +} + +define internal %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + %t4 = extractvalue { ptr, i64, i64 } %t3, 0 + %t5 = icmp eq ptr %t4, null + %t6 = select i1 %t5, ptr @.str.6630, ptr %t4 + %t7 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = extractvalue { ptr, i64, i64 } %t8, 0 + %t10 = icmp eq ptr %t9, null + %t11 = select i1 %t10, ptr @.str.6631, ptr %t9 + %t12 = insertvalue %S.C.CXUnsavedFile %t7, ptr %t11, 1 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = insertvalue %S.C.CXUnsavedFile %t12, i64 %t14, 2 + ret %S.C.CXUnsavedFile %t15 +} + +define internal { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6634, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6635, i64 4, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6632, i64 1, i64 0 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.6636, i64 1, i64 0 }, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + ret { ptr, i64, i64 } %t17 +} + +define internal i64 @finch.host.run({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a4 + call void @finch_str_copy(ptr %a3, ptr %a4) + %t5 = call i64 @finch_shell(ptr %a3) + call void @finch_str_drop(ptr %a3) + ret i64 %t5 +} + +define internal { ptr, i64, i64 } @finch.host.nullDevice() { +entry: + + ret { ptr, i64, i64 } { ptr @.str.6637, i64 9, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.host.tempDir() { +entry: + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6638, i64 6, i64 0 }, 0 + %t2 = icmp eq ptr %t1, null + %t3 = select i1 %t2, ptr @.str.6639, ptr %t1 + %t4 = call ptr @getenv(ptr %t3) + store { ptr, i64, i64 } zeroinitializer, ptr %a5 + call void @finch_str_from_c(ptr %a5, ptr %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br i1 %t13, label %then9880, label %endif9882 +then9880: + %t14 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6641, i64 1, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_ends(ptr %a15, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then9883, label %endif9885 +then9883: + %t20 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t20, ptr %a21 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = sub i64 %t24, 1 + call void @finch_str_sub(ptr %a22, ptr %a21, i64 0, i64 %t25, ptr @.str.6642, i64 31) + %t26 = load { ptr, i64, i64 }, ptr %a22 + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t26 +endif9885: + %t27 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t27 +endif9882: + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } { ptr @.str.6643, i64 4, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.host.pathSeparator() { +entry: + + ret { ptr, i64, i64 } { ptr @.str.6644, i64 1, i64 0 } +} + +define internal i64 @finch.host.pid() { +entry: + + %t1 = call i32 @getpid() + %t2 = sext i32 %t1 to i64 + ret i64 %t2 +} + +define internal { ptr, i64, i64 } @finch.host.cwd() { +entry: + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6645, i64 3, i64 0 }, 0 + %t2 = icmp eq ptr %t1, null + %t3 = select i1 %t2, ptr @.str.6646, ptr %t1 + %t4 = call ptr @getenv(ptr %t3) + store { ptr, i64, i64 } zeroinitializer, ptr %a5 + call void @finch_str_from_c(ptr %a5, ptr %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + ret { ptr, i64, i64 } %t9 +} + +define internal { ptr, i64, i64 } @finch.host.cacheDir() { +entry: + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6647, i64 14, i64 0 }, 0 + %t2 = icmp eq ptr %t1, null + %t3 = select i1 %t2, ptr @.str.6648, ptr %t1 + %t4 = call ptr @getenv(ptr %t3) + store { ptr, i64, i64 } zeroinitializer, ptr %a5 + call void @finch_str_from_c(ptr %a5, ptr %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br i1 %t13, label %then9886, label %endif9888 +then9886: + %t14 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6649, i64 6, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t18 +endif9888: + %t19 = extractvalue { ptr, i64, i64 } { ptr @.str.6650, i64 4, i64 0 }, 0 + %t20 = icmp eq ptr %t19, null + %t21 = select i1 %t20, ptr @.str.6651, ptr %t19 + %t22 = call ptr @getenv(ptr %t21) + store { ptr, i64, i64 } zeroinitializer, ptr %a23 + call void @finch_str_from_c(ptr %a23, ptr %t22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = icmp sgt i64 %t30, 0 + br i1 %t31, label %then9889, label %endif9891 +then9889: + %t32 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.6652, i64 13, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a33 + call void @finch_str_drop(ptr %a28) + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t36 +endif9891: + %t37 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.6653, i64 12, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + call void @finch_str_drop(ptr %a28) + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t42 +} + +define internal void @finch.host.binaryStdio() { +entry: + + ret void +} + +define internal void @finch.host.makeDirs({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) + store { ptr, i64, i64 } { ptr @.str.6654, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t3, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t8, ptr %a10 + call void @finch_str_copy(ptr %a9, ptr %a10) + %t11 = call i64 @finch_shell(ptr %a9) + call void @finch_str_drop(ptr %a9) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + ret void +} + +define internal void @finch.host.remove({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a4 + call void @finch_str_copy(ptr %a3, ptr %a4) + %t5 = call i32 @finch_delete_file(ptr %a3) + call void @finch_str_drop(ptr %a3) + %t6 = icmp ne i32 %t5, 0 + ret void +} + +define internal void @finch.host.removeTree({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) + store { ptr, i64, i64 } { ptr @.str.6655, i64 7, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t3, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t8, ptr %a10 + call void @finch_str_copy(ptr %a9, ptr %a10) + %t11 = call i64 @finch_shell(ptr %a9) + call void @finch_str_drop(ptr %a9) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + ret void +} + +define internal void @finch.host.move({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t3) + store { ptr, i64, i64 } { ptr @.str.6656, i64 3, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.6657, i64 1, i64 0 }, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t9, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a10 + %t15 = load { ptr, i64, i64 }, ptr %a2 + %t16 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t14, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t14, ptr %a20 + call void @finch_str_drop(ptr %a20) + store { ptr, i64, i64 } %t16, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t22, ptr %a24 + call void @finch_str_copy(ptr %a23, ptr %a24) + %t25 = call i64 @finch_shell(ptr %a23) + call void @finch_str_drop(ptr %a23) + store { ptr, i64, i64 } %t22, ptr %a26 + call void @finch_str_drop(ptr %a26) + ret void +} + +define internal { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_trim(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6660, i64 1, i64 0 }, ptr %a8 + call void @finch_str_split(ptr %a9, ptr %a6, ptr %a8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t5, ptr %a11 + call void @finch_str_drop(ptr %a11) + store { ptr, i64, i64 } %t10, ptr %a12 + %t13 = load { ptr, i64, i64 }, ptr %a12 + %t14 = extractvalue { ptr, i64, i64 } %t13, 1 + %t15 = icmp uge i64 0, %t14 + br i1 %t15, label %range9892, label %inrange9893 +range9892: + call void @finch_panic_index(ptr @.str.6661, i64 21, i64 0, i64 %t14) + unreachable +inrange9893: + %t16 = extractvalue { ptr, i64, i64 } %t13, 0 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + call void @finch_str_trim(ptr %a20, ptr %a19) + %t21 = load { ptr, i64, i64 }, ptr %a20 + call void @finch.drop.arr_str(ptr %a12) + ret { ptr, i64, i64 } %t21 +} + +define internal { ptr, i64, i64 } @finch.platform.hostTriple() { +entry: + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %t1 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t1, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6663, i64 14, i64 0 }, ptr %a4 + call void @finch_str_concat(ptr %a2, ptr %a3, ptr %a4) + store { ptr, i64, i64 } %t1, ptr %a5 + call void @finch_str_drop(ptr %a5) + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a8, i64 %t7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t6, ptr %a13 + call void @finch_str_drop(ptr %a13) + store { ptr, i64, i64 } %t9, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6664, i64 4, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = load { ptr, i64, i64 }, ptr %a21 + %t23 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t22) + store { ptr, i64, i64 } { ptr @.str.6665, i64 21, i64 0 }, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6666, i64 4, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = call { ptr, i64, i64 } @finch.host.nullDevice() + store { ptr, i64, i64 } %t33, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + %t41 = call i64 @finch.host.run({ ptr, i64, i64 } %t40) + store { ptr, i64, i64 } %t40, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } zeroinitializer, ptr %a45 + store { ptr, i64, i64 } zeroinitializer, ptr %a46 + %t47 = call i32 @finch_try_read_file(ptr %a45, ptr %a44, ptr %a46) + %t48 = icmp eq i32 %t47, 0 + %t49 = load { ptr, i64, i64 }, ptr %a46 + %t50 = load { ptr, i64, i64 }, ptr %a45 + br i1 %t48, label %or.failed9894, label %or.ok9895 +or.failed9894: + store { ptr, i64, i64 } %t49, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %or.bend9896 +or.bend9896: + br label %or.end9897 +or.ok9895: + br label %or.end9897 +or.end9897: + %t52 = phi { ptr, i64, i64 } [ { ptr @.str.6667, i64 0, i64 0 }, %or.bend9896 ], [ %t50, %or.ok9895 ] + store { ptr, i64, i64 } %t52, ptr %a53 + %t54 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.host.remove({ ptr, i64, i64 } %t54) + %t55 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_trim(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + %t59 = extractvalue { ptr, i64, i64 } %t58, 1 + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = icmp eq i64 %t59, 0 + br i1 %t61, label %then9898, label %endif9900 +then9898: + call void @finch_str_drop(ptr %a53) + call void @finch_str_drop(ptr %a21) + ret { ptr, i64, i64 } { ptr @.str.6669, i64 24, i64 0 } +endif9900: + %t62 = load { ptr, i64, i64 }, ptr %a53 + %t63 = call { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %t62) + call void @finch_str_drop(ptr %a53) + call void @finch_str_drop(ptr %a21) + ret { ptr, i64, i64 } %t63 +} + +define internal %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca %S.platform.Target, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca i1, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca i1, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca i1, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = call { ptr, i64, i64 } @finch.platform.hostTriple() + store { ptr, i64, i64 } %t2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp eq i64 %t10, 0 + br i1 %t11, label %then9901, label %else9902 +then9901: + %t12 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + %t16 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t15, ptr %a8 + store { ptr, i64, i64 } %t16, ptr %a17 + call void @finch_str_drop(ptr %a17) + br label %endif9903 +else9902: + %t18 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6670, i64 7, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br i1 %t22, label %then9904, label %else9905 +then9904: + %t23 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6671, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch_str_drop(ptr %a24) + br label %endif9906 +else9905: + %t25 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.6672, i64 5, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br i1 %t29, label %then9907, label %else9908 +then9907: + %t30 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6673, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t30, ptr %a31 + call void @finch_str_drop(ptr %a31) + br label %endif9909 +else9908: + %t32 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.6674, i64 5, i64 0 }, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br label %logic.from9910 +logic.from9910: + br i1 %t36, label %logic.end9912, label %logic.rhs9911 +logic.rhs9911: + %t37 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t37, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.6675, i64 7, i64 0 }, ptr %a39 + %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) + %t41 = icmp ne i32 %t40, 0 + br label %logic.rend9913 +logic.rend9913: + br label %logic.end9912 +logic.end9912: + %t42 = phi i1 [ true, %logic.from9910 ], [ %t41, %logic.rend9913 ] + br label %logic.from9914 +logic.from9914: + br i1 %t42, label %logic.end9916, label %logic.rhs9915 +logic.rhs9915: + %t43 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.6676, i64 11, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp ne i32 %t46, 0 + br label %logic.rend9917 +logic.rend9917: + br label %logic.end9916 +logic.end9916: + %t48 = phi i1 [ true, %logic.from9914 ], [ %t47, %logic.rend9917 ] + br i1 %t48, label %then9918, label %else9919 +then9918: + %t49 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6677, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t49, ptr %a50 + call void @finch_str_drop(ptr %a50) + br label %endif9920 +else9919: + %t51 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t51, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6678, i64 5, i64 0 }, ptr %a53 + %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) + %t55 = icmp ne i32 %t54, 0 + br i1 %t55, label %then9921, label %endif9923 +then9921: + %t56 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.6680, i64 7, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_starts(ptr %a57, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.from9924 +logic.from9924: + br i1 %t61, label %logic.end9926, label %logic.rhs9925 +logic.rhs9925: + %t62 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6682, i64 5, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_starts(ptr %a63, ptr %a65) + %t67 = icmp ne i32 %t66, 0 + br label %logic.rend9927 +logic.rend9927: + br label %logic.end9926 +logic.end9926: + %t68 = phi i1 [ true, %logic.from9924 ], [ %t67, %logic.rend9927 ] + br i1 %t68, label %then9928, label %else9929 +then9928: + %t69 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6683, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_drop(ptr %a70) + br label %endif9930 +else9929: + %t71 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6684, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_drop(ptr %a72) + br label %endif9930 +endif9930: + br label %endif9923 +endif9923: + br label %endif9920 +endif9920: + br label %endif9909 +endif9909: + br label %endif9906 +endif9906: + br label %endif9903 +endif9903: + %t73 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t73, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6685, i64 22, i64 0 }, ptr %a75 + %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + br i1 %t77, label %then9931, label %endif9933 +then9931: + %t78 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6686, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif9933 +endif9933: + %t80 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t80, ptr %a81 + call void @finch_str_copy(ptr %a82, ptr %a81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = insertvalue %S.platform.Target zeroinitializer, { ptr, i64, i64 } %t83, 0 + store %S.platform.Target %t84, ptr %a85 + %t86 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.6688, i64 7, i64 0 }, ptr %a89 + %t90 = call i64 @finch_str_find(ptr %a87, ptr %a89) + %t91 = icmp sge i64 %t90, 0 + br label %logic.from9934 +logic.from9934: + br i1 %t91, label %logic.end9936, label %logic.rhs9935 +logic.rhs9935: + %t92 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t92, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.6690, i64 5, i64 0 }, ptr %a95 + %t96 = call i64 @finch_str_find(ptr %a93, ptr %a95) + %t97 = icmp sge i64 %t96, 0 + br label %logic.rend9937 +logic.rend9937: + br label %logic.end9936 +logic.end9936: + %t98 = phi i1 [ true, %logic.from9934 ], [ %t97, %logic.rend9937 ] + br label %logic.from9938 +logic.from9938: + br i1 %t98, label %logic.end9940, label %logic.rhs9939 +logic.rhs9939: + %t99 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t99, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6692, i64 4, i64 0 }, ptr %a102 + %t103 = call i64 @finch_str_find(ptr %a100, ptr %a102) + %t104 = icmp sge i64 %t103, 0 + br label %logic.rend9941 +logic.rend9941: + br label %logic.end9940 +logic.end9940: + %t105 = phi i1 [ true, %logic.from9938 ], [ %t104, %logic.rend9941 ] + br label %logic.from9942 +logic.from9942: + br i1 %t105, label %logic.end9944, label %logic.rhs9943 +logic.rhs9943: + %t106 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.6694, i64 5, i64 0 }, ptr %a109 + %t110 = call i64 @finch_str_find(ptr %a107, ptr %a109) + %t111 = icmp sge i64 %t110, 0 + br label %logic.rend9945 +logic.rend9945: + br label %logic.end9944 +logic.end9944: + %t112 = phi i1 [ true, %logic.from9942 ], [ %t111, %logic.rend9945 ] + %t113 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + store i1 %t112, ptr %t113 + %t114 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.6696, i64 4, i64 0 }, ptr %a117 + %t118 = call i64 @finch_str_find(ptr %a115, ptr %a117) + %t119 = icmp sge i64 %t118, 0 + %t120 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 2 + store i1 %t119, ptr %t120 + %t121 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.6698, i64 5, i64 0 }, ptr %a124 + %t125 = call i64 @finch_str_find(ptr %a122, ptr %a124) + %t126 = icmp sge i64 %t125, 0 + br label %logic.from9946 +logic.from9946: + br i1 %t126, label %logic.end9948, label %logic.rhs9947 +logic.rhs9947: + %t127 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t127, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.6700, i64 6, i64 0 }, ptr %a130 + %t131 = call i64 @finch_str_find(ptr %a128, ptr %a130) + %t132 = icmp sge i64 %t131, 0 + br label %logic.rend9949 +logic.rend9949: + br label %logic.end9948 +logic.end9948: + %t133 = phi i1 [ true, %logic.from9946 ], [ %t132, %logic.rend9949 ] + br label %logic.from9950 +logic.from9950: + br i1 %t133, label %logic.end9952, label %logic.rhs9951 +logic.rhs9951: + %t134 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t134, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.6702, i64 5, i64 0 }, ptr %a137 + %t138 = call i64 @finch_str_find(ptr %a135, ptr %a137) + %t139 = icmp sge i64 %t138, 0 + br label %logic.rend9953 +logic.rend9953: + br label %logic.end9952 +logic.end9952: + %t140 = phi i1 [ true, %logic.from9950 ], [ %t139, %logic.rend9953 ] + %t141 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + store i1 %t140, ptr %t141 + %t142 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.6704, i64 7, i64 0 }, ptr %a145 + %t146 = call i32 @finch_str_starts(ptr %a143, ptr %a145) + %t147 = icmp ne i32 %t146, 0 + br label %logic.from9954 +logic.from9954: + br i1 %t147, label %logic.end9956, label %logic.rhs9955 +logic.rhs9955: + %t148 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.6706, i64 5, i64 0 }, ptr %a151 + %t152 = call i32 @finch_str_starts(ptr %a149, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + br label %logic.rend9957 +logic.rend9957: + br label %logic.end9956 +logic.end9956: + %t154 = phi i1 [ true, %logic.from9954 ], [ %t153, %logic.rend9957 ] + %t155 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + store i1 %t154, ptr %t155 + %t156 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t156, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.6708, i64 7, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_starts(ptr %a157, ptr %a159) + %t161 = icmp ne i32 %t160, 0 + br label %logic.from9958 +logic.from9958: + br i1 %t161, label %logic.end9960, label %logic.rhs9959 +logic.rhs9959: + %t162 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t162, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.6710, i64 5, i64 0 }, ptr %a165 + %t166 = call i32 @finch_str_starts(ptr %a163, ptr %a165) + %t167 = icmp ne i32 %t166, 0 + br label %logic.rend9961 +logic.rend9961: + br label %logic.end9960 +logic.end9960: + %t168 = phi i1 [ true, %logic.from9958 ], [ %t167, %logic.rend9961 ] + store i1 %t168, ptr %a169 + %t170 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.6712, i64 5, i64 0 }, ptr %a173 + %t174 = call i64 @finch_str_find(ptr %a171, ptr %a173) + %t175 = icmp sge i64 %t174, 0 + br label %logic.from9962 +logic.from9962: + br i1 %t175, label %logic.end9964, label %logic.rhs9963 +logic.rhs9963: + %t176 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.6714, i64 6, i64 0 }, ptr %a179 + %t180 = call i64 @finch_str_find(ptr %a177, ptr %a179) + %t181 = icmp sge i64 %t180, 0 + br label %logic.rend9965 +logic.rend9965: + br label %logic.end9964 +logic.end9964: + %t182 = phi i1 [ true, %logic.from9962 ], [ %t181, %logic.rend9965 ] + store i1 %t182, ptr %a183 + %t184 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } { ptr @.str.6716, i64 7, i64 0 }, ptr %a187 + %t188 = call i64 @finch_str_find(ptr %a185, ptr %a187) + %t189 = icmp sge i64 %t188, 0 + br label %logic.from9966 +logic.from9966: + br i1 %t189, label %logic.end9968, label %logic.rhs9967 +logic.rhs9967: + %t190 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t190, ptr %a191 + store { ptr, i64, i64 } { ptr @.str.6718, i64 5, i64 0 }, ptr %a193 + %t194 = call i64 @finch_str_find(ptr %a191, ptr %a193) + %t195 = icmp sge i64 %t194, 0 + br label %logic.rend9969 +logic.rend9969: + br label %logic.end9968 +logic.end9968: + %t196 = phi i1 [ true, %logic.from9966 ], [ %t195, %logic.rend9969 ] + br label %logic.from9970 +logic.from9970: + br i1 %t196, label %logic.end9972, label %logic.rhs9971 +logic.rhs9971: + %t197 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t197, ptr %a198 + store { ptr, i64, i64 } { ptr @.str.6720, i64 4, i64 0 }, ptr %a200 + %t201 = call i64 @finch_str_find(ptr %a198, ptr %a200) + %t202 = icmp sge i64 %t201, 0 + br label %logic.rend9973 +logic.rend9973: + br label %logic.end9972 +logic.end9972: + %t203 = phi i1 [ true, %logic.from9970 ], [ %t202, %logic.rend9973 ] + store i1 %t203, ptr %a204 + %t205 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t206 = load i1, ptr %t205 + %t207 = load i1, ptr %a204 + %t208 = icmp ne i1 %t206, %t207 + br label %logic.from9974 +logic.from9974: + br i1 %t208, label %logic.end9976, label %logic.rhs9975 +logic.rhs9975: + %t209 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t210 = load i1, ptr %t209 + %t211 = load i1, ptr %a183 + %t212 = icmp ne i1 %t210, %t211 + br label %logic.rend9977 +logic.rend9977: + br label %logic.end9976 +logic.end9976: + %t213 = phi i1 [ true, %logic.from9974 ], [ %t212, %logic.rend9977 ] + br label %logic.from9978 +logic.from9978: + br i1 %t213, label %logic.end9980, label %logic.rhs9979 +logic.rhs9979: + %t214 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t215 = load i1, ptr %t214 + %t216 = load i1, ptr %a169 + %t217 = icmp ne i1 %t215, %t216 + br label %logic.rend9981 +logic.rend9981: + br label %logic.end9980 +logic.end9980: + %t218 = phi i1 [ true, %logic.from9978 ], [ %t217, %logic.rend9981 ] + %t219 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + store i1 %t218, ptr %t219 + %t220 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t221 = load { ptr, i64, i64 }, ptr %t220 + store { ptr, i64, i64 } { ptr @.str.6721, i64 0, i64 0 }, ptr %t220 + store { ptr, i64, i64 } %t221, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t224 = load i1, ptr %t223 + br i1 %t224, label %then9982, label %endif9984 +then9982: + %t225 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t226 = load { ptr, i64, i64 }, ptr %t225 + store { ptr, i64, i64 } { ptr @.str.6722, i64 4, i64 0 }, ptr %t225 + store { ptr, i64, i64 } %t226, ptr %a227 + call void @finch_str_drop(ptr %a227) + br label %endif9984 +endif9984: + %t228 = extractvalue { ptr, i64, i64 } { ptr @.str.6723, i64 8, i64 0 }, 0 + %t229 = icmp eq ptr %t228, null + %t230 = select i1 %t229, ptr @.str.6724, ptr %t228 + %t231 = call ptr @getenv(ptr %t230) + store { ptr, i64, i64 } zeroinitializer, ptr %a232 + call void @finch_str_from_c(ptr %a232, ptr %t231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t233, ptr %a234 + call void @finch_str_copy(ptr %a235, ptr %a234) + %t236 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t236, ptr %a237 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %a237, i32 0, i32 1 + %t239 = load i64, ptr %t238 + %t240 = icmp sgt i64 %t239, 0 + br i1 %t240, label %then9985, label %else9986 +then9985: + %t241 = load { ptr, i64, i64 }, ptr %a237 + %t242 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + store { ptr, i64, i64 } %t241, ptr %a243 + call void @finch_str_copy(ptr %a244, ptr %a243) + %t245 = load { ptr, i64, i64 }, ptr %a244 + %t246 = load { ptr, i64, i64 }, ptr %t242 + store { ptr, i64, i64 } %t245, ptr %t242 + store { ptr, i64, i64 } %t246, ptr %a247 + call void @finch_str_drop(ptr %a247) + br label %endif9987 +else9986: + %t248 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t249 = load i1, ptr %t248 + br label %logic.from9988 +logic.from9988: + br i1 %t249, label %logic.rhs9989, label %logic.end9990 +logic.rhs9989: + %t250 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t251 = load i1, ptr %t250 + br label %logic.rend9991 +logic.rend9991: + br label %logic.end9990 +logic.end9990: + %t252 = phi i1 [ false, %logic.from9988 ], [ %t251, %logic.rend9991 ] + br i1 %t252, label %then9992, label %else9993 +then9992: + %t253 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t254 = load { ptr, i64, i64 }, ptr %t253 + store { ptr, i64, i64 } { ptr @.str.6725, i64 22, i64 0 }, ptr %t253 + store { ptr, i64, i64 } %t254, ptr %a255 + call void @finch_str_drop(ptr %a255) + br label %endif9994 +else9993: + %t256 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t257 = load i1, ptr %t256 + br label %logic.from9995 +logic.from9995: + br i1 %t257, label %logic.rhs9996, label %logic.end9997 +logic.rhs9996: + %t258 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t259 = load i1, ptr %t258 + br label %logic.rend9998 +logic.rend9998: + br label %logic.end9997 +logic.end9997: + %t260 = phi i1 [ false, %logic.from9995 ], [ %t259, %logic.rend9998 ] + br label %logic.from9999 +logic.from9999: + br i1 %t260, label %logic.rhs10000, label %logic.end10001 +logic.rhs10000: + %t261 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t262 = load i1, ptr %t261 + %t263 = xor i1 %t262, true + br label %logic.rend10002 +logic.rend10002: + br label %logic.end10001 +logic.end10001: + %t264 = phi i1 [ false, %logic.from9999 ], [ %t263, %logic.rend10002 ] + br i1 %t264, label %then10003, label %else10004 +then10003: + %t265 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t266 = load { ptr, i64, i64 }, ptr %t265 + store { ptr, i64, i64 } { ptr @.str.6726, i64 21, i64 0 }, ptr %t265 + store { ptr, i64, i64 } %t266, ptr %a267 + call void @finch_str_drop(ptr %a267) + br label %endif10005 +else10004: + %t268 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t269 = load i1, ptr %t268 + br i1 %t269, label %then10006, label %else10007 +then10006: + %t270 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6727, i64 15, i64 0 }, ptr %a272 + store { ptr, i64, i64 } %t270, ptr %a273 + call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a271 + %t275 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t276 = load { ptr, i64, i64 }, ptr %t275 + store { ptr, i64, i64 } %t274, ptr %t275 + store { ptr, i64, i64 } %t276, ptr %a277 + call void @finch_str_drop(ptr %a277) + br label %endif10008 +else10007: + %t278 = call { ptr, i64, i64 } @finch.host.pathSeparator() + store { ptr, i64, i64 } %t278, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6728, i64 1, i64 0 }, ptr %a280 + %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) + %t282 = icmp ne i32 %t281, 0 + store { ptr, i64, i64 } %t278, ptr %a283 + call void @finch_str_drop(ptr %a283) + br i1 %t282, label %then10009, label %else10010 +then10009: + %t284 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } { ptr @.str.6729, i64 5, i64 0 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + br label %endif10011 +else10010: + %t287 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t288 = load { ptr, i64, i64 }, ptr %t287 + store { ptr, i64, i64 } { ptr @.str.6730, i64 2, i64 0 }, ptr %t287 + store { ptr, i64, i64 } %t288, ptr %a289 + call void @finch_str_drop(ptr %a289) + br label %endif10011 +endif10011: + br label %endif10008 +endif10008: + br label %endif10005 +endif10005: + br label %endif9994 +endif9994: + br label %endif9987 +endif9987: + %t290 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t291 = load i1, ptr %t290 + br label %logic.from10012 +logic.from10012: + br i1 %t291, label %logic.rhs10013, label %logic.end10014 +logic.rhs10013: + %t292 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t293 = load i1, ptr %t292 + br label %logic.rend10015 +logic.rend10015: + br label %logic.end10014 +logic.end10014: + %t294 = phi i1 [ false, %logic.from10012 ], [ %t293, %logic.rend10015 ] + br i1 %t294, label %then10016, label %else10017 +then10016: + %t295 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } { ptr @.str.6731, i64 5, i64 0 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_drop(ptr %a297) + br label %endif10018 +else10017: + %t298 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t299 = load i1, ptr %t298 + br label %logic.from10019 +logic.from10019: + br i1 %t299, label %logic.rhs10020, label %logic.end10021 +logic.rhs10020: + %t300 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t301 = load i1, ptr %t300 + br label %logic.rend10022 +logic.rend10022: + br label %logic.end10021 +logic.end10021: + %t302 = phi i1 [ false, %logic.from10019 ], [ %t301, %logic.rend10022 ] + br label %logic.from10023 +logic.from10023: + br i1 %t302, label %logic.rhs10024, label %logic.end10025 +logic.rhs10024: + %t303 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t304 = load i1, ptr %t303 + %t305 = xor i1 %t304, true + br label %logic.rend10026 +logic.rend10026: + br label %logic.end10025 +logic.end10025: + %t306 = phi i1 [ false, %logic.from10023 ], [ %t305, %logic.rend10026 ] + br i1 %t306, label %then10027, label %endif10029 +then10027: + %t307 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t308 = load { ptr, i64, i64 }, ptr %t307 + store { ptr, i64, i64 } { ptr @.str.6732, i64 13, i64 0 }, ptr %t307 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10029 +endif10029: + br label %endif10018 +endif10018: + %t310 = load %S.platform.Target, ptr %a85 + call void @finch_str_drop(ptr %a237) + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a3) + ret %S.platform.Target %t310 +} + +define internal i1 @finch.platform.charIsSigned(%S.platform.Target %p0) { +entry: + %a1 = alloca %S.platform.Target, align 16 + store %S.platform.Target %p0, ptr %a1 + %t2 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 4 + %t3 = load i1, ptr %t2 + %t4 = xor i1 %t3, true + br label %logic.from10030 +logic.from10030: + br i1 %t4, label %logic.end10032, label %logic.rhs10031 +logic.rhs10031: + %t5 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 3 + %t6 = load i1, ptr %t5 + br label %logic.rend10033 +logic.rend10033: + br label %logic.end10032 +logic.end10032: + %t7 = phi i1 [ true, %logic.from10030 ], [ %t6, %logic.rend10033 ] + br label %logic.from10034 +logic.from10034: + br i1 %t7, label %logic.end10036, label %logic.rhs10035 +logic.rhs10035: + %t8 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 1 + %t9 = load i1, ptr %t8 + br label %logic.rend10037 +logic.rend10037: + br label %logic.end10036 +logic.end10036: + %t10 = phi i1 [ true, %logic.from10034 ], [ %t9, %logic.rend10037 ] + ret i1 %t10 +} + +define internal { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i32, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca i8, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i32 2166136261, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond10038 +each.cond10038: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body10039, label %each.end10041 +each.body10039: + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds i8, ptr %t8, i64 %t6 + %t10 = load i8, ptr %t9 + store i8 %t10, ptr %a11 + %t12 = load i32, ptr %a2 + %t13 = load i8, ptr %a11 + %t14 = zext i8 %t13 to i32 + %t15 = xor i32 %t12, %t14 + %t16 = mul i32 %t15, 16777619 + store i32 %t16, ptr %a2 + br label %each.step10040 +each.step10040: + %t17 = load i64, ptr %a3 + %t18 = add i64 %t17, 1 + store i64 %t18, ptr %a3 + br label %each.cond10038 +each.end10041: + store { ptr, i64, i64 } { ptr @.str.6733, i64 16, i64 0 }, ptr %a19 + store { ptr, i64, i64 } zeroinitializer, ptr %a20 + store i64 0, ptr %a21 + br label %for.cond10042 +for.cond10042: + %t22 = load i64, ptr %a21 + %t23 = icmp slt i64 %t22, 8 + br i1 %t23, label %for.body10043, label %for.end10045 +for.body10043: + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t25 = load i32, ptr %a2 + %t26 = load i64, ptr %a21 + %t27 = mul i64 4, %t26 + %t28 = sub i64 28, %t27 + %t29 = trunc i64 %t28 to i32 + %t30 = lshr i32 %t25, %t29 + %t31 = and i32 %t30, 15 + %t32 = zext i32 %t31 to i64 + %t33 = load { ptr, i64, i64 }, ptr %a19 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range10046, label %inrange10047 +range10046: + call void @finch_panic_index(ptr @.str.6734, i64 16, i64 %t32, i64 %t34) + unreachable +inrange10047: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 + %t38 = load i8, ptr %t37 + call void @finch_str_from_char(ptr %a39, i8 signext %t38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + %t41 = load i64, ptr %t24 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a20 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } %t40, ptr %t44 + store i64 %t42, ptr %t24 + br label %for.step10044 +for.step10044: + %t45 = load i64, ptr %a21 + %t46 = add i64 %t45, 1 + store i64 %t46, ptr %a21 + br label %for.cond10042 +for.end10045: + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6735, i64 0, i64 0 }, ptr %a48 + call void @finch_str_join(ptr %a49, ptr %a20, ptr %a48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + call void @finch.drop.arr_str(ptr %a20) + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t50 +} + +define internal { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) + ret { ptr, i64, i64 } %t3 +} + +define internal { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %p0, %S.platform.Target %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.platform.Target, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca i64, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.platform.Target %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6737, i64 10, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_ends(ptr %a4, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then10048, label %endif10050 +then10048: + %t9 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t9, ptr %a10 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = sub i64 %t13, 10 + call void @finch_str_sub(ptr %a11, ptr %a10, i64 0, i64 %t14, ptr @.str.6739, i64 28) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_drop(ptr %a17) + store { ptr, i64, i64 } { ptr @.str.6738, i64 11, i64 0 }, ptr %a19 + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t16, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + ret { ptr, i64, i64 } %t22 +endif10050: + %t23 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 + %t24 = load i1, ptr %t23 + %t25 = xor i1 %t24, true + br i1 %t25, label %then10051, label %endif10053 +then10051: + %t26 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.6740, i64 17, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a33, i64 %t32) + %t34 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t31, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t31, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.6741, i64 4, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t45, ptr %a46 + %t47 = load { ptr, i64, i64 }, ptr %a1 + %t48 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t47) + store { ptr, i64, i64 } { ptr @.str.6742, i64 18, i64 0 }, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t53, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.6743, i64 3, i64 0 }, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t53, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + %t59 = load { ptr, i64, i64 }, ptr %a46 + %t60 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t59) + store { ptr, i64, i64 } %t58, ptr %a62 + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t58, ptr %a64 + call void @finch_str_drop(ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.6744, i64 4, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = call { ptr, i64, i64 } @finch.host.nullDevice() + store { ptr, i64, i64 } %t71, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + store { ptr, i64, i64 } %t72, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a73 + %t79 = call i64 @finch.host.run({ ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a80 + call void @finch_str_drop(ptr %a80) + store i64 %t79, ptr %a81 + %t82 = load i64, ptr %a81 + %t83 = icmp eq i64 %t82, 0 + br label %logic.from10054 +logic.from10054: + br i1 %t83, label %logic.rhs10055, label %logic.end10056 +logic.rhs10055: + %t84 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t84, ptr %a85 + %t86 = call i32 @finch_file_exists(ptr %a85) + %t87 = icmp ne i32 %t86, 0 + br label %logic.rend10057 +logic.rend10057: + br label %logic.end10056 +logic.end10056: + %t88 = phi i1 [ false, %logic.from10054 ], [ %t87, %logic.rend10057 ] + br i1 %t88, label %then10058, label %endif10060 +then10058: + %t89 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t89, ptr %a90 + store { ptr, i64, i64 } zeroinitializer, ptr %a91 + store { ptr, i64, i64 } zeroinitializer, ptr %a92 + %t93 = call i32 @finch_try_read_file(ptr %a91, ptr %a90, ptr %a92) + %t94 = icmp eq i32 %t93, 0 + %t95 = load { ptr, i64, i64 }, ptr %a92 + %t96 = load { ptr, i64, i64 }, ptr %a91 + br i1 %t94, label %or.failed10061, label %or.ok10062 +or.failed10061: + store { ptr, i64, i64 } %t95, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %or.bend10063 +or.bend10063: + br label %or.end10064 +or.ok10062: + br label %or.end10064 +or.end10064: + %t98 = phi { ptr, i64, i64 } [ { ptr @.str.6745, i64 0, i64 0 }, %or.bend10063 ], [ %t96, %or.ok10062 ] + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_trim(ptr %a100, ptr %a99) + %t101 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + store { ptr, i64, i64 } %t101, ptr %a103 + %t104 = load { ptr, i64, i64 }, ptr %a46 + call void @finch.host.remove({ ptr, i64, i64 } %t104) + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %a103, i32 0, i32 1 + %t106 = load i64, ptr %t105 + %t107 = icmp sgt i64 %t106, 0 + br i1 %t107, label %then10065, label %endif10067 +then10065: + %t108 = load { ptr, i64, i64 }, ptr %a103 + call void @finch_str_drop(ptr %a46) + ret { ptr, i64, i64 } %t108 +endif10067: + call void @finch_str_drop(ptr %a103) + br label %endif10060 +endif10060: + call void @finch_str_drop(ptr %a46) + br label %endif10053 +endif10053: + %t109 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6747, i64 2, i64 0 }, ptr %a111 + store { ptr, i64, i64 } %t109, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a110 + %t114 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t113) + store { ptr, i64, i64 } %t113, ptr %a115 + call void @finch_str_drop(ptr %a115) + ret { ptr, i64, i64 } %t114 +} + +define internal { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca i64, align 16 + %a35 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6749, i64 1, i64 0 }, ptr %a10 + %t11 = call i64 @finch_str_find(ptr %a8, ptr %a10) + store i64 %t11, ptr %a12 + br label %while.cond10068 +while.cond10068: + %t13 = load i64, ptr %a12 + %t14 = icmp sge i64 %t13, 0 + br i1 %t14, label %while.body10069, label %while.end10070 +while.body10069: + %t15 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t15, ptr %a16 + %t18 = load i64, ptr %a12 + %t19 = add i64 %t18, 1 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t21 = load i64, ptr %t20 + call void @finch_str_sub(ptr %a17, ptr %a16, i64 %t19, i64 %t21, ptr @.str.6750, i64 49) + %t22 = load { ptr, i64, i64 }, ptr %a17 + %t23 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t22, ptr %a6 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.6752, i64 1, i64 0 }, ptr %a28 + %t29 = call i64 @finch_str_find(ptr %a26, ptr %a28) + store i64 %t29, ptr %a12 + br label %while.cond10068 +while.end10070: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t31 = load i64, ptr %t30 + store i64 %t31, ptr %a32 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t34 = load i64, ptr %t33 + store i64 0, ptr %a35 + br label %for.cond10071 +for.cond10071: + %t36 = load i64, ptr %a35 + %t37 = icmp slt i64 %t36, %t34 + br i1 %t37, label %for.body10072, label %for.end10074 +for.body10072: + %t38 = load i64, ptr %a35 + %t39 = load { ptr, i64, i64 }, ptr %a6 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range10075, label %inrange10076 +range10075: + call void @finch_panic_index(ptr @.str.6753, i64 54, i64 %t38, i64 %t40) + unreachable +inrange10076: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 + %t44 = load i8, ptr %t43 + %t45 = icmp eq i8 %t44, 46 + br i1 %t45, label %then10077, label %endif10079 +then10077: + %t46 = load i64, ptr %a35 + store i64 %t46, ptr %a32 + br label %endif10079 +endif10079: + br label %for.step10073 +for.step10073: + %t47 = load i64, ptr %a35 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a35 + br label %for.cond10071 +for.end10074: + %t49 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t49, ptr %a50 + %t52 = load i64, ptr %a32 + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6754, i64 58) + %t53 = load { ptr, i64, i64 }, ptr %a51 + %t54 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t53, ptr %a6 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_drop(ptr %a55) + br label %while.cond10080 +while.cond10080: + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t57 = load i64, ptr %t56 + %t58 = icmp sgt i64 %t57, 0 + br label %logic.from10083 +logic.from10083: + br i1 %t58, label %logic.rhs10084, label %logic.end10085 +logic.rhs10084: + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t60 = load i64, ptr %t59 + %t61 = sub i64 %t60, 1 + %t62 = load { ptr, i64, i64 }, ptr %a6 + %t63 = extractvalue { ptr, i64, i64 } %t62, 1 + %t64 = icmp uge i64 %t61, %t63 + br i1 %t64, label %range10086, label %inrange10087 +range10086: + call void @finch_panic_index(ptr @.str.6755, i64 59, i64 %t61, i64 %t63) + unreachable +inrange10087: + %t65 = extractvalue { ptr, i64, i64 } %t62, 0 + %t66 = getelementptr inbounds i8, ptr %t65, i64 %t61 + %t67 = load i8, ptr %t66 + %t68 = icmp uge i8 %t67, 48 + br label %logic.rend10088 +logic.rend10088: + br label %logic.end10085 +logic.end10085: + %t69 = phi i1 [ false, %logic.from10083 ], [ %t68, %logic.rend10088 ] + br label %logic.from10089 +logic.from10089: + br i1 %t69, label %logic.rhs10090, label %logic.end10091 +logic.rhs10090: + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t71 = load i64, ptr %t70 + %t72 = sub i64 %t71, 1 + %t73 = load { ptr, i64, i64 }, ptr %a6 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 %t72, %t74 + br i1 %t75, label %range10092, label %inrange10093 +range10092: + call void @finch_panic_index(ptr @.str.6756, i64 59, i64 %t72, i64 %t74) + unreachable +inrange10093: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds i8, ptr %t76, i64 %t72 + %t78 = load i8, ptr %t77 + %t79 = icmp ule i8 %t78, 57 + br label %logic.rend10094 +logic.rend10094: + br label %logic.end10091 +logic.end10091: + %t80 = phi i1 [ false, %logic.from10089 ], [ %t79, %logic.rend10094 ] + br i1 %t80, label %while.body10081, label %while.end10082 +while.body10081: + %t81 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t81, ptr %a82 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t85 = load i64, ptr %t84 + %t86 = sub i64 %t85, 1 + call void @finch_str_sub(ptr %a83, ptr %a82, i64 0, i64 %t86, ptr @.str.6757, i64 60) + %t87 = load { ptr, i64, i64 }, ptr %a83 + %t88 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t87, ptr %a6 + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_drop(ptr %a89) + br label %while.cond10080 +while.end10082: + %t90 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t90, ptr %a91 + call void @finch_str_lower(ptr %a92, ptr %a91) + %t93 = load { ptr, i64, i64 }, ptr %a92 + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t93 +} + +define internal void @finch.linker.Names.add(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = icmp sgt i64 %t3, 0 + br label %logic.from10095 +logic.from10095: + br i1 %t4, label %logic.rhs10096, label %logic.end10097 +logic.rhs10096: + %t5 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a8 + %t9 = load i64, ptr %t6 + %t10 = load ptr, ptr %t5 + store i64 0, ptr %a11 + br label %find.cond10098 +find.cond10098: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t9 + br i1 %t13, label %find.body10099, label %find.end10102 +find.body10099: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } %t7, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %find.hit10100, label %find.next10101 +find.hit10100: + store i64 %t12, ptr %a8 + br label %find.end10102 +find.next10101: + %t20 = add i64 %t12, 1 + store i64 %t20, ptr %a11 + br label %find.cond10098 +find.end10102: + %t21 = load i64, ptr %a8 + %t22 = icmp sge i64 %t21, 0 + %t23 = xor i1 %t22, true + br label %logic.rend10103 +logic.rend10103: + br label %logic.end10097 +logic.end10097: + %t24 = phi i1 [ false, %logic.from10095 ], [ %t23, %logic.rend10103 ] + br i1 %t24, label %then10104, label %endif10106 +then10104: + %t25 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 + %t27 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_copy(ptr %a29, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + %t31 = load i64, ptr %t26 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %t25, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %t25 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } %t30, ptr %t34 + store i64 %t32, ptr %t26 + br label %endif10106 +endif10106: + ret void +} + +define internal { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = call i64 @finch_str_find(ptr %a5, ptr %a8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br i1 %t12, label %then10107, label %endif10109 +then10107: + ret { ptr, i64, i64 } { ptr @.str.6760, i64 0, i64 0 } +endif10109: + %t13 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t13, ptr %a14 + %t16 = load i64, ptr %a10 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = add i64 %t16, %t18 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t21 = load i64, ptr %t20 + call void @finch_str_sub(ptr %a15, ptr %a14, i64 %t19, i64 %t21, ptr @.str.6761, i64 81) + %t22 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t22, ptr %a23 + store i64 0, ptr %a24 + br label %while.cond10110 +while.cond10110: + %t25 = load i64, ptr %a24 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = icmp slt i64 %t25, %t27 + br label %logic.from10113 +logic.from10113: + br i1 %t28, label %logic.rhs10114, label %logic.end10115 +logic.rhs10114: + %t29 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t29, ptr %a30 + %t32 = load i64, ptr %a24 + %t33 = load { ptr, i64, i64 }, ptr %a23 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range10116, label %inrange10117 +range10116: + call void @finch_panic_index(ptr @.str.6763, i64 83, i64 %t32, i64 %t34) + unreachable +inrange10117: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 + %t38 = load i8, ptr %t37 + call void @finch_str_from_char(ptr %a39, i8 signext %t38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t40, ptr %a41 + %t42 = call i64 @finch_str_find(ptr %a30, ptr %a41) + %t43 = icmp sge i64 %t42, 0 + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = xor i1 %t43, true + br label %logic.rend10118 +logic.rend10118: + br label %logic.end10115 +logic.end10115: + %t46 = phi i1 [ false, %logic.from10113 ], [ %t45, %logic.rend10118 ] + br i1 %t46, label %while.body10111, label %while.end10112 +while.body10111: + %t47 = load i64, ptr %a24 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a24 + br label %while.cond10110 +while.end10112: + %t49 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t49, ptr %a50 + %t52 = load i64, ptr %a24 + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6764, i64 86) + %t53 = load { ptr, i64, i64 }, ptr %a51 + call void @finch_str_drop(ptr %a23) + ret { ptr, i64, i64 } %t53 +} + +define internal void @finch.drop.S_linker_Names(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.linker.Names, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + ret void +} + +define internal void @finch.drop.arr_S_linker_Names(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10222 +n.cond10222: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10223, label %n.end10224 +n.body10223: + %t7 = getelementptr inbounds %S.linker.Names, ptr %t1, i64 %t5 + call void @finch.drop.S_linker_Names(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10222 +n.end10224: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal i64 @finch.linker.linkFailed({ ptr, i64, i64 } %p0, %S.cimport.CImports %p1, %S.platform.Target %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.cimport.CImports, align 16 + %a3 = alloca %S.platform.Target, align 16 + %a4 = alloca %S.linker.Names, align 16 + %a5 = alloca %S.linker.Names, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca i64, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca i64, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca i64, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca i64, align 16 + %a238 = alloca i64, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca i64, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca i64, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca i64, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.cimport.CImports %p1, ptr %a2 + store %S.platform.Target %p2, ptr %a3 + store %S.linker.Names zeroinitializer, ptr %a4 + store %S.linker.Names zeroinitializer, ptr %a5 + %t6 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.6766, i64 1, i64 0 }, ptr %a9 + call void @finch_str_split(ptr %a10, ptr %a7, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t11, ptr %a12 + store i64 0, ptr %a13 + br label %each.cond10119 +each.cond10119: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = load i64, ptr %a13 + %t17 = icmp slt i64 %t16, %t15 + br i1 %t17, label %each.body10120, label %each.end10122 +each.body10120: + %t18 = load ptr, ptr %a12 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_trim(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.6769, i64 24, i64 0 }, ptr %a30 + %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) + %t32 = icmp sge i64 %t31, 0 + br i1 %t32, label %then10123, label %else10124 +then10123: + %t33 = load { ptr, i64, i64 }, ptr %a26 + %t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6770, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6771, i64 1, i64 0 }) + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t34) + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_str_drop(ptr %a35) + br label %endif10125 +else10124: + %t36 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.6773, i64 18, i64 0 }, ptr %a39 + %t40 = call i64 @finch_str_find(ptr %a37, ptr %a39) + %t41 = icmp sge i64 %t40, 0 + br i1 %t41, label %then10126, label %else10127 +then10126: + %t42 = load { ptr, i64, i64 }, ptr %a26 + %t43 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t42, { ptr, i64, i64 } { ptr @.str.6774, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6775, i64 2, i64 0 }) + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t43) + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_drop(ptr %a44) + br label %endif10128 +else10127: + %t45 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.6777, i64 27, i64 0 }, ptr %a48 + %t49 = call i64 @finch_str_find(ptr %a46, ptr %a48) + %t50 = icmp sge i64 %t49, 0 + br i1 %t50, label %then10129, label %else10130 +then10129: + %t51 = load { ptr, i64, i64 }, ptr %a26 + %t52 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t51, { ptr, i64, i64 } { ptr @.str.6778, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6779, i64 3, i64 0 }) + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t52) + store { ptr, i64, i64 } %t52, ptr %a53 + call void @finch_str_drop(ptr %a53) + br label %endif10131 +else10130: + %t54 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t54, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.6781, i64 14, i64 0 }, ptr %a57 + %t58 = call i64 @finch_str_find(ptr %a55, ptr %a57) + %t59 = icmp sge i64 %t58, 0 + br i1 %t59, label %then10132, label %else10133 +then10132: + %t60 = load { ptr, i64, i64 }, ptr %a26 + %t61 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t60, { ptr, i64, i64 } { ptr @.str.6782, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6783, i64 4, i64 0 }) + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t61, ptr %a62 + call void @finch_str_drop(ptr %a62) + br label %endif10134 +else10133: + %t63 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t63, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.6785, i64 24, i64 0 }, ptr %a66 + %t67 = call i64 @finch_str_find(ptr %a64, ptr %a66) + %t68 = icmp sge i64 %t67, 0 + br i1 %t68, label %then10135, label %else10136 +then10135: + %t69 = load { ptr, i64, i64 }, ptr %a26 + %t70 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t69, { ptr, i64, i64 } { ptr @.str.6786, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6787, i64 4, i64 0 }) + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t70) + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + br label %endif10137 +else10136: + %t72 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t72, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.6789, i64 13, i64 0 }, ptr %a75 + %t76 = call i64 @finch_str_find(ptr %a73, ptr %a75) + %t77 = icmp sge i64 %t76, 0 + br i1 %t77, label %then10138, label %else10139 +then10138: + %t78 = load { ptr, i64, i64 }, ptr %a26 + %t79 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.6790, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6791, i64 1, i64 0 }) + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t79) + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif10140 +else10139: + %t81 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.6793, i64 11, i64 0 }, ptr %a84 + %t85 = call i64 @finch_str_find(ptr %a82, ptr %a84) + %t86 = icmp sge i64 %t85, 0 + br label %logic.from10141 +logic.from10141: + br i1 %t86, label %logic.rhs10142, label %logic.end10143 +logic.rhs10142: + %t87 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t87, ptr %a88 + store { ptr, i64, i64 } { ptr @.str.6795, i64 9, i64 0 }, ptr %a90 + %t91 = call i64 @finch_str_find(ptr %a88, ptr %a90) + %t92 = icmp sge i64 %t91, 0 + br label %logic.rend10144 +logic.rend10144: + br label %logic.end10143 +logic.end10143: + %t93 = phi i1 [ false, %logic.from10141 ], [ %t92, %logic.rend10144 ] + br i1 %t93, label %then10145, label %else10146 +then10145: + %t94 = load { ptr, i64, i64 }, ptr %a26 + %t95 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t94, { ptr, i64, i64 } { ptr @.str.6796, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6797, i64 1, i64 0 }) + store { ptr, i64, i64 } %t95, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.6798, i64 10, i64 0 }, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t100) + store { ptr, i64, i64 } %t100, ptr %a101 + call void @finch_str_drop(ptr %a101) + br label %endif10147 +else10146: + %t102 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.6800, i64 1, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_starts(ptr %a103, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br label %logic.from10148 +logic.from10148: + br i1 %t107, label %logic.rhs10149, label %logic.end10150 +logic.rhs10149: + %t108 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6802, i64 19, i64 0 }, ptr %a111 + %t112 = call i64 @finch_str_find(ptr %a109, ptr %a111) + %t113 = icmp sge i64 %t112, 0 + br label %logic.rend10151 +logic.rend10151: + br label %logic.end10150 +logic.end10150: + %t114 = phi i1 [ false, %logic.from10148 ], [ %t113, %logic.rend10151 ] + br i1 %t114, label %then10152, label %endif10154 +then10152: + %t115 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t115, ptr %a116 + %t118 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t118, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.6805, i64 19, i64 0 }, ptr %a121 + %t122 = call i64 @finch_str_find(ptr %a119, ptr %a121) + call void @finch_str_sub(ptr %a117, ptr %a116, i64 1, i64 %t122, ptr @.str.6803, i64 111) + %t123 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t123, ptr %a124 + %t125 = getelementptr inbounds %S.platform.Target, ptr %a3, i32 0, i32 3 + %t126 = load i1, ptr %t125 + br label %logic.from10155 +logic.from10155: + br i1 %t126, label %logic.rhs10156, label %logic.end10157 +logic.rhs10156: + %t127 = load { ptr, i64, i64 }, ptr %a124 + store { ptr, i64, i64 } %t127, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.6807, i64 1, i64 0 }, ptr %a130 + %t131 = call i32 @finch_str_starts(ptr %a128, ptr %a130) + %t132 = icmp ne i32 %t131, 0 + br label %logic.rend10158 +logic.rend10158: + br label %logic.end10157 +logic.end10157: + %t133 = phi i1 [ false, %logic.from10155 ], [ %t132, %logic.rend10158 ] + br i1 %t133, label %then10159, label %endif10161 +then10159: + %t134 = load { ptr, i64, i64 }, ptr %a124 + store { ptr, i64, i64 } %t134, ptr %a135 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1 + %t138 = load i64, ptr %t137 + call void @finch_str_sub(ptr %a136, ptr %a135, i64 1, i64 %t138, ptr @.str.6808, i64 113) + %t139 = load { ptr, i64, i64 }, ptr %a136 + %t140 = load { ptr, i64, i64 }, ptr %a124 + store { ptr, i64, i64 } %t139, ptr %a124 + store { ptr, i64, i64 } %t140, ptr %a141 + call void @finch_str_drop(ptr %a141) + br label %endif10161 +endif10161: + %t142 = load { ptr, i64, i64 }, ptr %a124 + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t142) + call void @finch_str_drop(ptr %a124) + br label %endif10154 +endif10154: + br label %endif10147 +endif10147: + br label %endif10140 +endif10140: + br label %endif10137 +endif10137: + br label %endif10134 +endif10134: + br label %endif10131 +endif10131: + br label %endif10128 +endif10128: + br label %endif10125 +endif10125: + call void @finch_str_drop(ptr %a26) + br label %each.step10121 +each.step10121: + %t143 = load i64, ptr %a13 + %t144 = add i64 %t143, 1 + store i64 %t144, ptr %a13 + br label %each.cond10119 +each.end10122: + call void @finch.drop.arr_str(ptr %a12) + %t145 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1 + %t147 = load i64, ptr %t146 + %t148 = icmp eq i64 %t147, 0 + br label %logic.from10162 +logic.from10162: + br i1 %t148, label %logic.rhs10163, label %logic.end10164 +logic.rhs10163: + %t149 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 + %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t149, i32 0, i32 1 + %t151 = load i64, ptr %t150 + %t152 = icmp eq i64 %t151, 0 + br label %logic.rend10165 +logic.rend10165: + br label %logic.end10164 +logic.end10164: + %t153 = phi i1 [ false, %logic.from10162 ], [ %t152, %logic.rend10165 ] + br i1 %t153, label %then10166, label %endif10168 +then10166: + %t154 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t154, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.6809, i64 21, i64 0 }, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + %t159 = extractvalue { ptr, i64, i64 } %t158, 1 + %t160 = trunc i64 %t159 to i32 + %t161 = extractvalue { ptr, i64, i64 } %t158, 0 + %t162 = icmp eq ptr %t161, null + %t163 = select i1 %t162, ptr @.str.6810, ptr %t161 + %t164 = call i32 (ptr, ...) @printf(ptr @.str.6811, i32 %t160, ptr %t163) + store { ptr, i64, i64 } %t158, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = call i32 (ptr, ...) @printf(ptr @.str.6812) + call void @finch.drop.S_linker_Names(ptr %a5) + call void @finch.drop.S_linker_Names(ptr %a4) + ret i64 1 +endif10168: + %t167 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 + store i64 0, ptr %a168 + br label %each.cond10169 +each.cond10169: + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = load i64, ptr %a168 + %t172 = icmp slt i64 %t171, %t170 + br i1 %t172, label %each.body10170, label %each.end10172 +each.body10170: + %t173 = load ptr, ptr %t167 + %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 %t171 + %t175 = load { ptr, i64, i64 }, ptr %t174 + store { ptr, i64, i64 } %t175, ptr %a176 + %t177 = load { ptr, i64, i64 }, ptr %a176 + store { ptr, i64, i64 } { ptr @.str.6813, i64 20, i64 0 }, ptr %a179 + store { ptr, i64, i64 } %t177, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t181, ptr %a183 + store { ptr, i64, i64 } { ptr @.str.6814, i64 62, i64 0 }, ptr %a184 + call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) + store { ptr, i64, i64 } %t181, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a182 + %t187 = extractvalue { ptr, i64, i64 } %t186, 1 + %t188 = trunc i64 %t187 to i32 + %t189 = extractvalue { ptr, i64, i64 } %t186, 0 + %t190 = icmp eq ptr %t189, null + %t191 = select i1 %t190, ptr @.str.6815, ptr %t189 + %t192 = call i32 (ptr, ...) @printf(ptr @.str.6816, i32 %t188, ptr %t191) + store { ptr, i64, i64 } %t186, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = call i32 (ptr, ...) @printf(ptr @.str.6817) + br label %each.step10171 +each.step10171: + %t195 = load i64, ptr %a168 + %t196 = add i64 %t195, 1 + store i64 %t196, ptr %a168 + br label %each.cond10169 +each.end10172: + store { ptr, i64, i64 } zeroinitializer, ptr %a197 + store { ptr, i64, i64 } zeroinitializer, ptr %a198 + %t199 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 + store i64 0, ptr %a200 + br label %each.cond10173 +each.cond10173: + %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i32 0, i32 1 + %t202 = load i64, ptr %t201 + %t203 = load i64, ptr %a200 + %t204 = icmp slt i64 %t203, %t202 + br i1 %t204, label %each.body10174, label %each.end10176 +each.body10174: + %t205 = load ptr, ptr %t199 + %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i64 %t203 + %t207 = load { ptr, i64, i64 }, ptr %t206 + store { ptr, i64, i64 } %t207, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.6818, i64 0, i64 0 }, ptr %a209 + %t210 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 + %t211 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t211, ptr %a212 + %t213 = call i64 @finch_map_find(ptr %t210, ptr %a212, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t214 = icmp sge i64 %t213, 0 + br i1 %t214, label %then10177, label %endif10179 +then10177: + %t215 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 + %t216 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t216, ptr %a217 + %t218 = call i64 @finch_map_find(ptr %t215, ptr %a217, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t219 = icmp slt i64 %t218, 0 + br i1 %t219, label %map.missing10180, label %map.found10181 +map.missing10180: + store { ptr, i64, i64 } zeroinitializer, ptr %a220 + store { ptr, i64, i64 } %t216, ptr %a221 + call void @finch_buf_str(ptr %a220, ptr %a221, i32 1) + call void @finch_map_missing(ptr @.str.6819, i64 131, ptr %a220) + unreachable +map.found10181: + %t222 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t215, i32 0, i32 0 + %t223 = load ptr, ptr %t222 + %t224 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t223, i64 %t218 + %t225 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t224, i32 0, i32 2 + %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %t225, i32 0, i32 1 + %t227 = load { ptr, i64, i64 }, ptr %t226 + store { ptr, i64, i64 } %t227, ptr %a228 + call void @finch_str_copy(ptr %a229, ptr %a228) + %t230 = load { ptr, i64, i64 }, ptr %a229 + %t231 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t230, ptr %a209 + store { ptr, i64, i64 } %t231, ptr %a232 + call void @finch_str_drop(ptr %a232) + br label %endif10179 +endif10179: + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t234 = load { ptr, i64, i64 }, ptr %a209 + store i64 -1, ptr %a235 + %t236 = load i64, ptr %t233 + %t237 = load ptr, ptr %a197 + store i64 0, ptr %a238 + br label %find.cond10182 +find.cond10182: + %t239 = load i64, ptr %a238 + %t240 = icmp slt i64 %t239, %t236 + br i1 %t240, label %find.body10183, label %find.end10186 +find.body10183: + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t239 + %t242 = load { ptr, i64, i64 }, ptr %t241 + store { ptr, i64, i64 } %t242, ptr %a243 + store { ptr, i64, i64 } %t234, ptr %a244 + %t245 = call i32 @finch_str_eq(ptr %a243, ptr %a244) + %t246 = icmp ne i32 %t245, 0 + br i1 %t246, label %find.hit10184, label %find.next10185 +find.hit10184: + store i64 %t239, ptr %a235 + br label %find.end10186 +find.next10185: + %t247 = add i64 %t239, 1 + store i64 %t247, ptr %a238 + br label %find.cond10182 +find.end10186: + %t248 = load i64, ptr %a235 + store i64 %t248, ptr %a249 + %t250 = load i64, ptr %a249 + %t251 = icmp slt i64 %t250, 0 + br i1 %t251, label %then10187, label %endif10189 +then10187: + %t252 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t253 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_copy(ptr %a255, ptr %a254) + %t256 = load { ptr, i64, i64 }, ptr %a255 + %t257 = load i64, ptr %t252 + %t258 = add i64 %t257, 1 + call void @finch_arr_reserve(ptr %a197, i64 %t258, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t259 = load ptr, ptr %a197 + %t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i64 %t257 + store { ptr, i64, i64 } %t256, ptr %t260 + store i64 %t258, ptr %t252 + %t261 = getelementptr inbounds { ptr, i64, i64 }, ptr %a198, i32 0, i32 1 + %t262 = load i64, ptr %t261 + %t263 = add i64 %t262, 1 + call void @finch_arr_reserve(ptr %a198, i64 %t263, i64 ptrtoint (ptr getelementptr (%S.linker.Names, ptr null, i32 1) to i64)) + %t264 = load ptr, ptr %a198 + %t265 = getelementptr inbounds %S.linker.Names, ptr %t264, i64 %t262 + store %S.linker.Names zeroinitializer, ptr %t265 + store i64 %t263, ptr %t261 + %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t267 = load i64, ptr %t266 + %t268 = sub i64 %t267, 1 + store i64 %t268, ptr %a249 + br label %endif10189 +endif10189: + %t269 = load i64, ptr %a249 + %t270 = load { ptr, i64, i64 }, ptr %a198 + %t271 = extractvalue { ptr, i64, i64 } %t270, 1 + %t272 = icmp uge i64 %t269, %t271 + br i1 %t272, label %range10190, label %inrange10191 +range10190: + call void @finch_panic_index(ptr @.str.6820, i64 139, i64 %t269, i64 %t271) + unreachable +inrange10191: + %t273 = extractvalue { ptr, i64, i64 } %t270, 0 + %t274 = getelementptr inbounds %S.linker.Names, ptr %t273, i64 %t269 + %t275 = load { ptr, i64, i64 }, ptr %a208 + call void @finch.linker.Names.add(ptr %t274, { ptr, i64, i64 } %t275) + call void @finch_str_drop(ptr %a209) + br label %each.step10175 +each.step10175: + %t276 = load i64, ptr %a200 + %t277 = add i64 %t276, 1 + store i64 %t277, ptr %a200 + br label %each.cond10173 +each.end10176: + %t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t279 = load i64, ptr %t278 + store i64 0, ptr %a280 + br label %for.cond10192 +for.cond10192: + %t281 = load i64, ptr %a280 + %t282 = icmp slt i64 %t281, %t279 + br i1 %t282, label %for.body10193, label %for.end10195 +for.body10193: + %t283 = load i64, ptr %a280 + %t284 = load { ptr, i64, i64 }, ptr %a198 + %t285 = extractvalue { ptr, i64, i64 } %t284, 1 + %t286 = icmp uge i64 %t283, %t285 + br i1 %t286, label %range10196, label %inrange10197 +range10196: + call void @finch_panic_index(ptr @.str.6821, i64 142, i64 %t283, i64 %t285) + unreachable +inrange10197: + %t287 = extractvalue { ptr, i64, i64 } %t284, 0 + %t288 = getelementptr inbounds %S.linker.Names, ptr %t287, i64 %t283 + %t289 = getelementptr inbounds %S.linker.Names, ptr %t288, i32 0, i32 0 + %t290 = load { ptr, i64, i64 }, ptr %t289 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch.copy.arr_str(ptr %a292, ptr %a291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t293, ptr %a294 + store { ptr, i64, i64 } zeroinitializer, ptr %a295 + %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t297 = load i64, ptr %t296 + store i64 0, ptr %a298 + br label %for.cond10198 +for.cond10198: + %t299 = load i64, ptr %a298 + %t300 = icmp slt i64 %t299, %t297 + br i1 %t300, label %for.body10199, label %for.end10201 +for.body10199: + %t301 = load i64, ptr %a298 + %t302 = icmp slt i64 %t301, 3 + br i1 %t302, label %then10202, label %endif10204 +then10202: + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 + %t304 = load i64, ptr %a298 + %t305 = load { ptr, i64, i64 }, ptr %a294 + %t306 = extractvalue { ptr, i64, i64 } %t305, 1 + %t307 = icmp uge i64 %t304, %t306 + br i1 %t307, label %range10205, label %inrange10206 +range10205: + call void @finch_panic_index(ptr @.str.6822, i64 146, i64 %t304, i64 %t306) + unreachable +inrange10206: + %t308 = extractvalue { ptr, i64, i64 } %t305, 0 + %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t304 + %t310 = load { ptr, i64, i64 }, ptr %t309 + store { ptr, i64, i64 } %t310, ptr %a311 + call void @finch_str_copy(ptr %a312, ptr %a311) + %t313 = load { ptr, i64, i64 }, ptr %a312 + %t314 = load i64, ptr %t303 + %t315 = add i64 %t314, 1 + call void @finch_arr_reserve(ptr %a295, i64 %t315, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t316 = load ptr, ptr %a295 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i64 %t314 + store { ptr, i64, i64 } %t313, ptr %t317 + store i64 %t315, ptr %t303 + br label %endif10204 +endif10204: + br label %for.step10200 +for.step10200: + %t318 = load i64, ptr %a298 + %t319 = add i64 %t318, 1 + store i64 %t319, ptr %a298 + br label %for.cond10198 +for.end10201: + %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6823, i64 2, i64 0 }, ptr %a321 + call void @finch_str_join(ptr %a322, ptr %a295, ptr %a321) + %t323 = load { ptr, i64, i64 }, ptr %a322 + store { ptr, i64, i64 } %t323, ptr %a324 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t326 = load i64, ptr %t325 + %t327 = icmp sgt i64 %t326, 3 + br i1 %t327, label %then10207, label %endif10209 +then10207: + %t328 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6824, i64 5, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a329 + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t334 = load i64, ptr %t333 + %t335 = sub i64 %t334, 3 + call void @finch_str_from_int(ptr %a336, i64 %t335) + %t337 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t332, ptr %a339 + store { ptr, i64, i64 } %t337, ptr %a340 + call void @finch_str_concat(ptr %a338, ptr %a339, ptr %a340) + store { ptr, i64, i64 } %t332, ptr %a341 + call void @finch_str_drop(ptr %a341) + store { ptr, i64, i64 } %t337, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load { ptr, i64, i64 }, ptr %a338 + store { ptr, i64, i64 } %t343, ptr %a345 + store { ptr, i64, i64 } { ptr @.str.6825, i64 5, i64 0 }, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t343, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = load { ptr, i64, i64 }, ptr %a344 + %t349 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t348, ptr %a324 + store { ptr, i64, i64 } %t349, ptr %a350 + call void @finch_str_drop(ptr %a350) + br label %endif10209 +endif10209: + %t351 = load i64, ptr %a280 + %t352 = load { ptr, i64, i64 }, ptr %a197 + %t353 = extractvalue { ptr, i64, i64 } %t352, 1 + %t354 = icmp uge i64 %t351, %t353 + br i1 %t354, label %range10210, label %inrange10211 +range10210: + call void @finch_panic_index(ptr @.str.6826, i64 153, i64 %t351, i64 %t353) + unreachable +inrange10211: + %t355 = extractvalue { ptr, i64, i64 } %t352, 0 + %t356 = getelementptr inbounds { ptr, i64, i64 }, ptr %t355, i64 %t351 + %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 + %t358 = load i64, ptr %t357 + %t359 = icmp eq i64 %t358, 0 + br i1 %t359, label %then10212, label %endif10214 +then10212: + %t360 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.6827, i64 25, i64 0 }, ptr %a362 + store { ptr, i64, i64 } %t360, ptr %a363 + call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a361 + %t365 = extractvalue { ptr, i64, i64 } %t364, 1 + %t366 = trunc i64 %t365 to i32 + %t367 = extractvalue { ptr, i64, i64 } %t364, 0 + %t368 = icmp eq ptr %t367, null + %t369 = select i1 %t368, ptr @.str.6828, ptr %t367 + %t370 = call i32 (ptr, ...) @printf(ptr @.str.6829, i32 %t366, ptr %t369) + store { ptr, i64, i64 } %t364, ptr %a371 + call void @finch_str_drop(ptr %a371) + %t372 = call i32 (ptr, ...) @printf(ptr @.str.6830) + call void @finch_str_drop(ptr %a324) + call void @finch.drop.arr_str(ptr %a295) + call void @finch.drop.arr_str(ptr %a294) + br label %for.step10194 +endif10214: + store { ptr, i64, i64 } { ptr @.str.6831, i64 4, i64 0 }, ptr %a373 + %t374 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t375 = load i64, ptr %t374 + %t376 = icmp eq i64 %t375, 1 + br i1 %t376, label %then10215, label %endif10217 +then10215: + %t377 = load { ptr, i64, i64 }, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.6832, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } %t377, ptr %a378 + call void @finch_str_drop(ptr %a378) + br label %endif10217 +endif10217: + %t379 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.6833, i64 7, i64 0 }, ptr %a381 + store { ptr, i64, i64 } %t379, ptr %a382 + call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) + %t383 = load { ptr, i64, i64 }, ptr %a380 + store { ptr, i64, i64 } %t383, ptr %a385 + store { ptr, i64, i64 } { ptr @.str.6834, i64 1, i64 0 }, ptr %a386 + call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) + store { ptr, i64, i64 } %t383, ptr %a387 + call void @finch_str_drop(ptr %a387) + %t388 = load { ptr, i64, i64 }, ptr %a384 + %t389 = load { ptr, i64, i64 }, ptr %a373 + store { ptr, i64, i64 } %t388, ptr %a391 + store { ptr, i64, i64 } %t389, ptr %a392 + call void @finch_str_concat(ptr %a390, ptr %a391, ptr %a392) + store { ptr, i64, i64 } %t388, ptr %a393 + call void @finch_str_drop(ptr %a393) + %t394 = load { ptr, i64, i64 }, ptr %a390 + store { ptr, i64, i64 } %t394, ptr %a396 + store { ptr, i64, i64 } { ptr @.str.6835, i64 7, i64 0 }, ptr %a397 + call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) + store { ptr, i64, i64 } %t394, ptr %a398 + call void @finch_str_drop(ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a395 + %t400 = load i64, ptr %a280 + %t401 = load { ptr, i64, i64 }, ptr %a197 + %t402 = extractvalue { ptr, i64, i64 } %t401, 1 + %t403 = icmp uge i64 %t400, %t402 + br i1 %t403, label %range10218, label %inrange10219 +range10218: + call void @finch_panic_index(ptr @.str.6836, i64 161, i64 %t400, i64 %t402) + unreachable +inrange10219: + %t404 = extractvalue { ptr, i64, i64 } %t401, 0 + %t405 = getelementptr inbounds { ptr, i64, i64 }, ptr %t404, i64 %t400 + %t406 = load { ptr, i64, i64 }, ptr %t405 + store { ptr, i64, i64 } %t399, ptr %a408 + store { ptr, i64, i64 } %t406, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + store { ptr, i64, i64 } %t399, ptr %a410 + call void @finch_str_drop(ptr %a410) + %t411 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t411, ptr %a413 + store { ptr, i64, i64 } { ptr @.str.6837, i64 31, i64 0 }, ptr %a414 + call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) + store { ptr, i64, i64 } %t411, ptr %a415 + call void @finch_str_drop(ptr %a415) + %t416 = load { ptr, i64, i64 }, ptr %a412 + %t417 = extractvalue { ptr, i64, i64 } %t416, 1 + %t418 = trunc i64 %t417 to i32 + %t419 = extractvalue { ptr, i64, i64 } %t416, 0 + %t420 = icmp eq ptr %t419, null + %t421 = select i1 %t420, ptr @.str.6838, ptr %t419 + %t422 = call i32 (ptr, ...) @printf(ptr @.str.6839, i32 %t418, ptr %t421) + store { ptr, i64, i64 } %t416, ptr %a423 + call void @finch_str_drop(ptr %a423) + %t424 = call i32 (ptr, ...) @printf(ptr @.str.6840) + %t425 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 1 + %t426 = trunc i64 %t425 to i32 + %t427 = extractvalue { ptr, i64, i64 } { ptr @.str.6841, i64 74, i64 0 }, 0 + %t428 = icmp eq ptr %t427, null + %t429 = select i1 %t428, ptr @.str.6842, ptr %t427 + %t430 = call i32 (ptr, ...) @printf(ptr @.str.6843, i32 %t426, ptr %t429) + %t431 = call i32 (ptr, ...) @printf(ptr @.str.6844) + %t432 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 1 + %t433 = trunc i64 %t432 to i32 + %t434 = extractvalue { ptr, i64, i64 } { ptr @.str.6845, i64 66, i64 0 }, 0 + %t435 = icmp eq ptr %t434, null + %t436 = select i1 %t435, ptr @.str.6846, ptr %t434 + %t437 = call i32 (ptr, ...) @printf(ptr @.str.6847, i32 %t433, ptr %t436) + %t438 = call i32 (ptr, ...) @printf(ptr @.str.6848) + %t439 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 1 + %t440 = trunc i64 %t439 to i32 + %t441 = extractvalue { ptr, i64, i64 } { ptr @.str.6849, i64 0, i64 0 }, 0 + %t442 = icmp eq ptr %t441, null + %t443 = select i1 %t442, ptr @.str.6850, ptr %t441 + %t444 = call i32 (ptr, ...) @printf(ptr @.str.6851, i32 %t440, ptr %t443) + %t445 = call i32 (ptr, ...) @printf(ptr @.str.6852) + %t446 = load i64, ptr %a280 + %t447 = load { ptr, i64, i64 }, ptr %a197 + %t448 = extractvalue { ptr, i64, i64 } %t447, 1 + %t449 = icmp uge i64 %t446, %t448 + br i1 %t449, label %range10220, label %inrange10221 +range10220: + call void @finch_panic_index(ptr @.str.6854, i64 165, i64 %t446, i64 %t448) + unreachable +inrange10221: + %t450 = extractvalue { ptr, i64, i64 } %t447, 0 + %t451 = getelementptr inbounds { ptr, i64, i64 }, ptr %t450, i64 %t446 + %t452 = load { ptr, i64, i64 }, ptr %t451 + %t453 = call { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %t452) + store { ptr, i64, i64 } { ptr @.str.6853, i64 12, i64 0 }, ptr %a455 + store { ptr, i64, i64 } %t453, ptr %a456 + call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) + store { ptr, i64, i64 } %t453, ptr %a457 + call void @finch_str_drop(ptr %a457) + %t458 = load { ptr, i64, i64 }, ptr %a454 + store { ptr, i64, i64 } %t458, ptr %a460 + store { ptr, i64, i64 } { ptr @.str.6855, i64 1, i64 0 }, ptr %a461 + call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) + store { ptr, i64, i64 } %t458, ptr %a462 + call void @finch_str_drop(ptr %a462) + %t463 = load { ptr, i64, i64 }, ptr %a459 + %t464 = extractvalue { ptr, i64, i64 } %t463, 1 + %t465 = trunc i64 %t464 to i32 + %t466 = extractvalue { ptr, i64, i64 } %t463, 0 + %t467 = icmp eq ptr %t466, null + %t468 = select i1 %t467, ptr @.str.6856, ptr %t466 + %t469 = call i32 (ptr, ...) @printf(ptr @.str.6857, i32 %t465, ptr %t468) + store { ptr, i64, i64 } %t463, ptr %a470 + call void @finch_str_drop(ptr %a470) + %t471 = call i32 (ptr, ...) @printf(ptr @.str.6858) + %t472 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 1 + %t473 = trunc i64 %t472 to i32 + %t474 = extractvalue { ptr, i64, i64 } { ptr @.str.6859, i64 0, i64 0 }, 0 + %t475 = icmp eq ptr %t474, null + %t476 = select i1 %t475, ptr @.str.6860, ptr %t474 + %t477 = call i32 (ptr, ...) @printf(ptr @.str.6861, i32 %t473, ptr %t476) + %t478 = call i32 (ptr, ...) @printf(ptr @.str.6862) + call void @finch_str_drop(ptr %a373) + call void @finch_str_drop(ptr %a324) + call void @finch.drop.arr_str(ptr %a295) + call void @finch.drop.arr_str(ptr %a294) + br label %for.step10194 +for.step10194: + %t479 = load i64, ptr %a280 + %t480 = add i64 %t479, 1 + store i64 %t480, ptr %a280 + br label %for.cond10192 +for.end10195: + call void @finch.drop.arr_S_linker_Names(ptr %a198) + call void @finch.drop.arr_str(ptr %a197) + call void @finch.drop.S_linker_Names(ptr %a5) + call void @finch.drop.S_linker_Names(ptr %a4) + ret i64 1 +} + +define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %p0, %S.platform.Target %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.platform.Target, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca i64, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.platform.Target %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } zeroinitializer, ptr %a6 + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + %t8 = call i32 @finch_try_read_file(ptr %a6, ptr %a5, ptr %a7) + %t9 = icmp eq i32 %t8, 0 + %t10 = load { ptr, i64, i64 }, ptr %a7 + %t11 = load { ptr, i64, i64 }, ptr %a6 + br i1 %t9, label %try.failed10225, label %try.ok10226 +try.failed10225: + %t12 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t10, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t12 +try.ok10226: + store { ptr, i64, i64 } %t11, ptr %a13 + %t14 = call { ptr, i64, i64 } @finch.host.cacheDir() + store { ptr, i64, i64 } %t14, ptr %a15 + %t16 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.6863, i64 4, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a17 + %t21 = load { ptr, i64, i64 }, ptr %a13 + %t22 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t21, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a23 + %t27 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 + %t28 = load { ptr, i64, i64 }, ptr %t27 + store { ptr, i64, i64 } %t26, ptr %a30 + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t26, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t33, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.6864, i64 3, i64 0 }, ptr %a36 + call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a34 + %t39 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t38) + store { ptr, i64, i64 } %t38, ptr %a40 + call void @finch_str_drop(ptr %a40) + store { ptr, i64, i64 } %t20, ptr %a42 + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t20, ptr %a44 + call void @finch_str_drop(ptr %a44) + store { ptr, i64, i64 } %t39, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t46, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.6865, i64 2, i64 0 }, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t53, ptr %a54 + %t55 = call i32 @finch_file_exists(ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then10227, label %endif10229 +then10227: + %t57 = load { ptr, i64, i64 }, ptr %a52 + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a13) + %t58 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t59 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t58, { ptr, i64, i64 } %t57, 1 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t59 +endif10229: + %t60 = load { ptr, i64, i64 }, ptr %a15 + call void @finch.host.makeDirs({ ptr, i64, i64 } %t60) + %t61 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6866, i64 5, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a62 + %t66 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a67, i64 %t66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t65, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t68, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.6867, i64 6, i64 0 }, ptr %a76 + %t77 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t78 = load i1, ptr %t77 + br i1 %t78, label %then10230, label %endif10232 +then10230: + %t79 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.6868, i64 0, i64 0 }, ptr %a76 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif10232 +endif10232: + %t81 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t81, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.6869, i64 4, i64 0 }, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t85, ptr %a86 + %t87 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t87, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.6870, i64 4, i64 0 }, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a88 + %t92 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t91, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.6871, i64 4, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = load { ptr, i64, i64 }, ptr %a1 + %t104 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } %t110, ptr %a112 + store { ptr, i64, i64 } { ptr @.str.6872, i64 4, i64 0 }, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t110, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + %t116 = load { ptr, i64, i64 }, ptr %a75 + %t117 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t115, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t115, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t117, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.6873, i64 3, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = load { ptr, i64, i64 }, ptr %a86 + %t130 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t129) + store { ptr, i64, i64 } %t128, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t128, ptr %a134 + call void @finch_str_drop(ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a131 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.6874, i64 5, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = call i64 @finch.host.run({ ptr, i64, i64 } %t141) + store { ptr, i64, i64 } %t141, ptr %a143 + call void @finch_str_drop(ptr %a143) + store i64 %t142, ptr %a144 + %t145 = load i64, ptr %a144 + %t146 = icmp ne i64 %t145, 0 + br i1 %t146, label %then10233, label %endif10235 +then10233: + %t147 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t147, ptr %a148 + store { ptr, i64, i64 } zeroinitializer, ptr %a149 + store { ptr, i64, i64 } zeroinitializer, ptr %a150 + %t151 = call i32 @finch_try_read_file(ptr %a149, ptr %a148, ptr %a150) + %t152 = icmp eq i32 %t151, 0 + %t153 = load { ptr, i64, i64 }, ptr %a150 + %t154 = load { ptr, i64, i64 }, ptr %a149 + br i1 %t152, label %or.failed10236, label %or.ok10237 +or.failed10236: + store { ptr, i64, i64 } %t153, ptr %a155 + call void @finch_str_drop(ptr %a155) + br label %or.bend10238 +or.bend10238: + br label %or.end10239 +or.ok10237: + br label %or.end10239 +or.end10239: + %t156 = phi { ptr, i64, i64 } [ { ptr @.str.6875, i64 0, i64 0 }, %or.bend10238 ], [ %t154, %or.ok10237 ] + store { ptr, i64, i64 } %t156, ptr %a157 + %t158 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.host.remove({ ptr, i64, i64 } %t158) + %t159 = load { ptr, i64, i64 }, ptr %a86 + call void @finch.host.remove({ ptr, i64, i64 } %t159) + %t160 = load { ptr, i64, i64 }, ptr %a157 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6876, i64 46, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t164, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + store { ptr, i64, i64 } %t164, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t170, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.6877, i64 30, i64 0 }, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t170, ptr %a174 + call void @finch_str_drop(ptr %a174) + %t175 = load { ptr, i64, i64 }, ptr %a171 + call void @finch_str_drop(ptr %a157) + call void @finch_str_drop(ptr %a86) + call void @finch_str_drop(ptr %a76) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a52) + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a13) + %t176 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t175, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t176 +endif10235: + %t177 = load { ptr, i64, i64 }, ptr %a86 + call void @finch.host.remove({ ptr, i64, i64 } %t177) + %t178 = load { ptr, i64, i64 }, ptr %a75 + %t179 = load { ptr, i64, i64 }, ptr %a52 + call void @finch.host.move({ ptr, i64, i64 } %t178, { ptr, i64, i64 } %t179) + %t180 = load { ptr, i64, i64 }, ptr %a52 + call void @finch_str_drop(ptr %a86) + call void @finch_str_drop(ptr %a76) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a13) + %t181 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t182 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t181, { ptr, i64, i64 } %t180, 1 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t182 +} + +define internal i64 @finch.linker.build(%S.linker.Build %p0, %S.platform.Target %p1, %S.cimport.CImports %p2) { +entry: + %a1 = alloca %S.linker.Build, align 16 + %a2 = alloca %S.platform.Target, align 16 + %a3 = alloca %S.cimport.CImports, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca i64, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca i64, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca i64, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca i64, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca i64, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + store %S.linker.Build %p0, ptr %a1 + store %S.platform.Target %p1, ptr %a2 + store %S.cimport.CImports %p2, ptr %a3 + %t4 = extractvalue { ptr, i64, i64 } { ptr @.str.6878, i64 11, i64 0 }, 0 + %t5 = icmp eq ptr %t4, null + %t6 = select i1 %t5, ptr @.str.6879, ptr %t4 + %t7 = call ptr @getenv(ptr %t6) + store { ptr, i64, i64 } zeroinitializer, ptr %a8 + call void @finch_str_from_c(ptr %a8, ptr %t7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = icmp eq i64 %t15, 0 + br i1 %t16, label %then10240, label %endif10242 +then10240: + %t17 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.6880, i64 5, i64 0 }, ptr %a13 + store { ptr, i64, i64 } %t17, ptr %a18 + call void @finch_str_drop(ptr %a18) + br label %endif10242 +endif10242: + %t19 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t19, ptr %a20 + call void @finch_str_copy(ptr %a21, ptr %a20) + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 + %t25 = load i1, ptr %t24 + br i1 %t25, label %then10243, label %else10244 +then10243: + %t26 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 7 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_copy(ptr %a29, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + %t31 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t30, ptr %a23 + store { ptr, i64, i64 } %t31, ptr %a32 + call void @finch_str_drop(ptr %a32) + br label %endif10245 +else10244: + %t33 = extractvalue { ptr, i64, i64 } { ptr @.str.6881, i64 8, i64 0 }, 0 + %t34 = icmp eq ptr %t33, null + %t35 = select i1 %t34, ptr @.str.6882, ptr %t33 + %t36 = call ptr @getenv(ptr %t35) + store { ptr, i64, i64 } zeroinitializer, ptr %a37 + call void @finch_str_from_c(ptr %a37, ptr %t36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp sgt i64 %t39, 0 + br i1 %t40, label %then10246, label %endif10248 +then10246: + %t41 = extractvalue { ptr, i64, i64 } { ptr @.str.6883, i64 8, i64 0 }, 0 + %t42 = icmp eq ptr %t41, null + %t43 = select i1 %t42, ptr @.str.6884, ptr %t41 + %t44 = call ptr @getenv(ptr %t43) + store { ptr, i64, i64 } zeroinitializer, ptr %a45 + call void @finch_str_from_c(ptr %a45, ptr %t44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_copy(ptr %a48, ptr %a47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + %t50 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t49, ptr %a23 + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %endif10248 +endif10248: + br label %endif10245 +endif10245: + %t52 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 2 + %t53 = load { ptr, i64, i64 }, ptr %t52 + %t54 = load %S.platform.Target, ptr %a2 + %t55 = load { ptr, i64, i64 }, ptr %a23 + %t56 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %t53, %S.platform.Target %t54, { ptr, i64, i64 } %t55) + %t57 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 0 + %t58 = xor i1 %t57, true + %t59 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 2 + %t60 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 1 + br i1 %t58, label %or.failed10249, label %or.ok10250 +or.failed10249: + store { ptr, i64, i64 } %t59, ptr %a61 + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = extractvalue { ptr, i64, i64 } %t62, 1 + %t64 = trunc i64 %t63 to i32 + %t65 = extractvalue { ptr, i64, i64 } %t62, 0 + %t66 = icmp eq ptr %t65, null + %t67 = select i1 %t66, ptr @.str.6885, ptr %t65 + %t68 = call i32 (ptr, ...) @printf(ptr @.str.6886, i32 %t64, ptr %t67) + %t69 = call i32 (ptr, ...) @printf(ptr @.str.6887) + call void @finch_str_drop(ptr %a61) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +or.ok10250: + store { ptr, i64, i64 } %t60, ptr %a70 + %t71 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t72 = load { ptr, i64, i64 }, ptr %t71 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6888, i64 3, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t76, ptr %a77 + %t78 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.6889, i64 2, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a80 + store { ptr, i64, i64 } %t83, ptr %a84 + %t85 = load { ptr, i64, i64 }, ptr %a77 + %t86 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } %t85, ptr %a88 + store { ptr, i64, i64 } %t87, ptr %a89 + %t90 = call i32 @finch_write_file(ptr %a88, ptr %a89) + %t91 = icmp ne i32 %t90, 0 + store { ptr, i64, i64 } { ptr @.str.6890, i64 0, i64 0 }, ptr %a92 + %t93 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 + %t94 = load i1, ptr %t93 + br label %logic.from10251 +logic.from10251: + br i1 %t94, label %logic.end10253, label %logic.rhs10252 +logic.rhs10252: + %t95 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t96 = load i1, ptr %t95 + br label %logic.rend10254 +logic.rend10254: + br label %logic.end10253 +logic.end10253: + %t97 = phi i1 [ true, %logic.from10251 ], [ %t96, %logic.rend10254 ] + br i1 %t97, label %then10255, label %endif10257 +then10255: + %t98 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 + %t99 = load { ptr, i64, i64 }, ptr %t98 + store { ptr, i64, i64 } { ptr @.str.6891, i64 10, i64 0 }, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a100 + %t104 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t103, ptr %a92 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + br label %endif10257 +endif10257: + %t106 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6892, i64 4, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load { ptr, i64, i64 }, ptr %a13 + %t114 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t113, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.6893, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3 + %t125 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t123, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t123, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4 + %t132 = load { ptr, i64, i64 }, ptr %t131 + store { ptr, i64, i64 } %t130, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t130, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.6894, i64 7, i64 0 }, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t137, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + %t143 = load { ptr, i64, i64 }, ptr %a77 + %t144 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t143) + store { ptr, i64, i64 } %t142, ptr %a146 + store { ptr, i64, i64 } %t144, ptr %a147 + call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) + store { ptr, i64, i64 } %t142, ptr %a148 + call void @finch_str_drop(ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.6895, i64 4, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load { ptr, i64, i64 }, ptr %a84 + %t157 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t156) + store { ptr, i64, i64 } %t155, ptr %a159 + store { ptr, i64, i64 } %t157, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t155, ptr %a161 + call void @finch_str_drop(ptr %a161) + store { ptr, i64, i64 } %t157, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a158 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.6896, i64 3, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = load { ptr, i64, i64 }, ptr %a112 + %t170 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t169) + store { ptr, i64, i64 } %t168, ptr %a172 + store { ptr, i64, i64 } %t170, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t168, ptr %a174 + call void @finch_str_drop(ptr %a174) + store { ptr, i64, i64 } %t170, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } %t176, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.6897, i64 5, i64 0 }, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t176, ptr %a180 + call void @finch_str_drop(ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a177 + %t182 = call i64 @finch.host.run({ ptr, i64, i64 } %t181) + store { ptr, i64, i64 } %t181, ptr %a183 + call void @finch_str_drop(ptr %a183) + store i64 %t182, ptr %a184 + %t185 = load { ptr, i64, i64 }, ptr %a77 + call void @finch.host.remove({ ptr, i64, i64 } %t185) + %t186 = load i64, ptr %a184 + %t187 = icmp ne i64 %t186, 0 + br i1 %t187, label %then10258, label %endif10260 +then10258: + %t188 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t188, ptr %a189 + store { ptr, i64, i64 } zeroinitializer, ptr %a190 + store { ptr, i64, i64 } zeroinitializer, ptr %a191 + %t192 = call i32 @finch_try_read_file(ptr %a190, ptr %a189, ptr %a191) + %t193 = icmp eq i32 %t192, 0 + %t194 = load { ptr, i64, i64 }, ptr %a191 + %t195 = load { ptr, i64, i64 }, ptr %a190 + br i1 %t193, label %or.failed10261, label %or.ok10262 +or.failed10261: + store { ptr, i64, i64 } %t194, ptr %a196 + call void @finch_str_drop(ptr %a196) + br label %or.bend10263 +or.bend10263: + br label %or.end10264 +or.ok10262: + br label %or.end10264 +or.end10264: + %t197 = phi { ptr, i64, i64 } [ { ptr @.str.6898, i64 0, i64 0 }, %or.bend10263 ], [ %t195, %or.ok10262 ] + %t198 = extractvalue { ptr, i64, i64 } %t197, 1 + %t199 = trunc i64 %t198 to i32 + %t200 = extractvalue { ptr, i64, i64 } %t197, 0 + %t201 = icmp eq ptr %t200, null + %t202 = select i1 %t201, ptr @.str.6899, ptr %t200 + %t203 = call i32 (ptr, ...) @printf(ptr @.str.6900, i32 %t199, ptr %t202) + store { ptr, i64, i64 } %t197, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = call i32 (ptr, ...) @printf(ptr @.str.6901) + %t206 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 1 + %t207 = trunc i64 %t206 to i32 + %t208 = extractvalue { ptr, i64, i64 } { ptr @.str.6902, i64 46, i64 0 }, 0 + %t209 = icmp eq ptr %t208, null + %t210 = select i1 %t209, ptr @.str.6903, ptr %t208 + %t211 = call i32 (ptr, ...) @printf(ptr @.str.6904, i32 %t207, ptr %t210) + %t212 = call i32 (ptr, ...) @printf(ptr @.str.6905) + %t213 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t213) + %t214 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t214) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +endif10260: + %t215 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.6906, i64 1, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + %t219 = load { ptr, i64, i64 }, ptr %a216 + %t220 = load { ptr, i64, i64 }, ptr %a84 + %t221 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t220) + store { ptr, i64, i64 } %t219, ptr %a223 + store { ptr, i64, i64 } %t221, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t219, ptr %a225 + call void @finch_str_drop(ptr %a225) + store { ptr, i64, i64 } %t221, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a222 + store { ptr, i64, i64 } %t227, ptr %a229 + store { ptr, i64, i64 } { ptr @.str.6907, i64 1, i64 0 }, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + store { ptr, i64, i64 } %t227, ptr %a231 + call void @finch_str_drop(ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a228 + %t233 = load { ptr, i64, i64 }, ptr %a70 + %t234 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t233) + store { ptr, i64, i64 } %t232, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t232, ptr %a238 + call void @finch_str_drop(ptr %a238) + store { ptr, i64, i64 } %t234, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t240, ptr %a242 + store { ptr, i64, i64 } { ptr @.str.6908, i64 4, i64 0 }, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t240, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + %t246 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t247 = load { ptr, i64, i64 }, ptr %t246 + %t248 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t247) + store { ptr, i64, i64 } %t245, ptr %a250 + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t245, ptr %a252 + call void @finch_str_drop(ptr %a252) + store { ptr, i64, i64 } %t248, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a249 + store { ptr, i64, i64 } %t254, ptr %a255 + %t256 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2 + %t257 = load i1, ptr %t256 + %t258 = xor i1 %t257, true + br i1 %t258, label %then10265, label %endif10267 +then10265: + %t259 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.6909, i64 4, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a260 + %t264 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t263, ptr %a255 + store { ptr, i64, i64 } %t264, ptr %a265 + call void @finch_str_drop(ptr %a265) + br label %endif10267 +endif10267: + %t266 = extractvalue { ptr, i64, i64 } { ptr @.str.6910, i64 13, i64 0 }, 0 + %t267 = icmp eq ptr %t266, null + %t268 = select i1 %t267, ptr @.str.6911, ptr %t266 + %t269 = call ptr @getenv(ptr %t268) + store { ptr, i64, i64 } zeroinitializer, ptr %a270 + call void @finch_str_from_c(ptr %a270, ptr %t269) + %t271 = load { ptr, i64, i64 }, ptr %a270 + %t272 = extractvalue { ptr, i64, i64 } %t271, 1 + %t273 = icmp sgt i64 %t272, 0 + br i1 %t273, label %then10268, label %endif10270 +then10268: + %t274 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.6912, i64 1, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a275 + %t279 = extractvalue { ptr, i64, i64 } { ptr @.str.6913, i64 13, i64 0 }, 0 + %t280 = icmp eq ptr %t279, null + %t281 = select i1 %t280, ptr @.str.6914, ptr %t279 + %t282 = call ptr @getenv(ptr %t281) + store { ptr, i64, i64 } zeroinitializer, ptr %a283 + call void @finch_str_from_c(ptr %a283, ptr %t282) + %t284 = load { ptr, i64, i64 }, ptr %a283 + store { ptr, i64, i64 } %t278, ptr %a286 + store { ptr, i64, i64 } %t284, ptr %a287 + call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287) + store { ptr, i64, i64 } %t278, ptr %a288 + call void @finch_str_drop(ptr %a288) + %t289 = load { ptr, i64, i64 }, ptr %a285 + %t290 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t289, ptr %a255 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + br label %endif10270 +endif10270: + %t292 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5 + %t293 = load i1, ptr %t292 + br i1 %t293, label %then10271, label %endif10273 +then10271: + %t294 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3 + %t295 = load i1, ptr %t294 + br i1 %t295, label %then10274, label %else10275 +then10274: + %t296 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.6915, i64 12, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + %t301 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t300, ptr %a255 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + br label %endif10276 +else10275: + %t303 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t303, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.6916, i64 8, i64 0 }, ptr %a306 + call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a304 + %t308 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t307, ptr %a255 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10276 +endif10276: + br label %endif10273 +endif10273: + store { ptr, i64, i64 } zeroinitializer, ptr %a310 + %t311 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6 + store i64 0, ptr %a312 + br label %each.cond10277 +each.cond10277: + %t313 = getelementptr inbounds { ptr, i64, i64 }, ptr %t311, i32 0, i32 1 + %t314 = load i64, ptr %t313 + %t315 = load i64, ptr %a312 + %t316 = icmp slt i64 %t315, %t314 + br i1 %t316, label %each.body10278, label %each.end10280 +each.body10278: + %t317 = load ptr, ptr %t311 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i64 %t315 + %t319 = load { ptr, i64, i64 }, ptr %t318 + store { ptr, i64, i64 } %t319, ptr %a320 + %t321 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t321, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.6918, i64 2, i64 0 }, ptr %a324 + %t325 = call i32 @finch_str_ends(ptr %a322, ptr %a324) + %t326 = icmp ne i32 %t325, 0 + br i1 %t326, label %then10281, label %else10282 +then10281: + %t327 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t328 = load { ptr, i64, i64 }, ptr %t327 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6919, i64 1, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a329 + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t334 = load i64, ptr %t333 + call void @finch_str_from_int(ptr %a335, i64 %t334) + %t336 = load { ptr, i64, i64 }, ptr %a335 + store { ptr, i64, i64 } %t332, ptr %a338 + store { ptr, i64, i64 } %t336, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t332, ptr %a340 + call void @finch_str_drop(ptr %a340) + store { ptr, i64, i64 } %t336, ptr %a341 + call void @finch_str_drop(ptr %a341) + %t342 = load { ptr, i64, i64 }, ptr %a337 + store { ptr, i64, i64 } %t342, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.6920, i64 2, i64 0 }, ptr %a345 + call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) + store { ptr, i64, i64 } %t342, ptr %a346 + call void @finch_str_drop(ptr %a346) + %t347 = load { ptr, i64, i64 }, ptr %a343 + store { ptr, i64, i64 } %t347, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.6921, i64 6, i64 0 }, ptr %a349 + %t350 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t351 = load i1, ptr %t350 + br i1 %t351, label %then10284, label %endif10286 +then10284: + %t352 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } { ptr @.str.6922, i64 0, i64 0 }, ptr %a349 + store { ptr, i64, i64 } %t352, ptr %a353 + call void @finch_str_drop(ptr %a353) + br label %endif10286 +endif10286: + %t354 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t354, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.6923, i64 4, i64 0 }, ptr %a357 + call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a355 + %t359 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } %t358, ptr %a361 + store { ptr, i64, i64 } %t359, ptr %a362 + call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) + store { ptr, i64, i64 } %t358, ptr %a363 + call void @finch_str_drop(ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a360 + store { ptr, i64, i64 } %t364, ptr %a366 + store { ptr, i64, i64 } { ptr @.str.6924, i64 4, i64 0 }, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t364, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a365 + %t370 = load { ptr, i64, i64 }, ptr %a320 + %t371 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t370) + store { ptr, i64, i64 } %t369, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t369, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t371, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a372 + store { ptr, i64, i64 } %t377, ptr %a379 + store { ptr, i64, i64 } { ptr @.str.6925, i64 4, i64 0 }, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + %t383 = load { ptr, i64, i64 }, ptr %a348 + %t384 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t383) + store { ptr, i64, i64 } %t382, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + store { ptr, i64, i64 } %t382, ptr %a388 + call void @finch_str_drop(ptr %a388) + store { ptr, i64, i64 } %t384, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t390, ptr %a392 + store { ptr, i64, i64 } { ptr @.str.6926, i64 3, i64 0 }, ptr %a393 + call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) + store { ptr, i64, i64 } %t390, ptr %a394 + call void @finch_str_drop(ptr %a394) + %t395 = load { ptr, i64, i64 }, ptr %a391 + %t396 = load { ptr, i64, i64 }, ptr %a112 + %t397 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t396) + store { ptr, i64, i64 } %t395, ptr %a399 + store { ptr, i64, i64 } %t397, ptr %a400 + call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) + store { ptr, i64, i64 } %t395, ptr %a401 + call void @finch_str_drop(ptr %a401) + store { ptr, i64, i64 } %t397, ptr %a402 + call void @finch_str_drop(ptr %a402) + %t403 = load { ptr, i64, i64 }, ptr %a398 + store { ptr, i64, i64 } %t403, ptr %a405 + store { ptr, i64, i64 } { ptr @.str.6927, i64 5, i64 0 }, ptr %a406 + call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406) + store { ptr, i64, i64 } %t403, ptr %a407 + call void @finch_str_drop(ptr %a407) + %t408 = load { ptr, i64, i64 }, ptr %a404 + %t409 = call i64 @finch.host.run({ ptr, i64, i64 } %t408) + store { ptr, i64, i64 } %t408, ptr %a410 + call void @finch_str_drop(ptr %a410) + store i64 %t409, ptr %a411 + %t412 = load i64, ptr %a411 + %t413 = icmp ne i64 %t412, 0 + br i1 %t413, label %then10287, label %endif10289 +then10287: + %t414 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t414, ptr %a415 + store { ptr, i64, i64 } zeroinitializer, ptr %a416 + store { ptr, i64, i64 } zeroinitializer, ptr %a417 + %t418 = call i32 @finch_try_read_file(ptr %a416, ptr %a415, ptr %a417) + %t419 = icmp eq i32 %t418, 0 + %t420 = load { ptr, i64, i64 }, ptr %a417 + %t421 = load { ptr, i64, i64 }, ptr %a416 + br i1 %t419, label %or.failed10290, label %or.ok10291 +or.failed10290: + store { ptr, i64, i64 } %t420, ptr %a422 + call void @finch_str_drop(ptr %a422) + br label %or.bend10292 +or.bend10292: + br label %or.end10293 +or.ok10291: + br label %or.end10293 +or.end10293: + %t423 = phi { ptr, i64, i64 } [ { ptr @.str.6928, i64 0, i64 0 }, %or.bend10292 ], [ %t421, %or.ok10291 ] + store { ptr, i64, i64 } %t423, ptr %a425 + store { ptr, i64, i64 } { ptr @.str.6929, i64 24, i64 0 }, ptr %a426 + call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) + store { ptr, i64, i64 } %t423, ptr %a427 + call void @finch_str_drop(ptr %a427) + %t428 = load { ptr, i64, i64 }, ptr %a424 + %t429 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t428, ptr %a431 + store { ptr, i64, i64 } %t429, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t428, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = extractvalue { ptr, i64, i64 } %t434, 1 + %t436 = trunc i64 %t435 to i32 + %t437 = extractvalue { ptr, i64, i64 } %t434, 0 + %t438 = icmp eq ptr %t437, null + %t439 = select i1 %t438, ptr @.str.6930, ptr %t437 + %t440 = call i32 (ptr, ...) @printf(ptr @.str.6931, i32 %t436, ptr %t439) + store { ptr, i64, i64 } %t434, ptr %a441 + call void @finch_str_drop(ptr %a441) + %t442 = call i32 (ptr, ...) @printf(ptr @.str.6932) + %t443 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t443) + %t444 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t444) + %t445 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.host.remove({ ptr, i64, i64 } %t445) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +endif10289: + %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t447 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t447, ptr %a448 + call void @finch_str_copy(ptr %a449, ptr %a448) + %t450 = load { ptr, i64, i64 }, ptr %a449 + %t451 = load i64, ptr %t446 + %t452 = add i64 %t451, 1 + call void @finch_arr_reserve(ptr %a310, i64 %t452, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t453 = load ptr, ptr %a310 + %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t451 + store { ptr, i64, i64 } %t450, ptr %t454 + store i64 %t452, ptr %t446 + %t455 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t455, ptr %a457 + store { ptr, i64, i64 } { ptr @.str.6933, i64 1, i64 0 }, ptr %a458 + call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) + %t459 = load { ptr, i64, i64 }, ptr %a456 + %t460 = load { ptr, i64, i64 }, ptr %a348 + %t461 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t460) + store { ptr, i64, i64 } %t459, ptr %a463 + store { ptr, i64, i64 } %t461, ptr %a464 + call void @finch_str_concat(ptr %a462, ptr %a463, ptr %a464) + store { ptr, i64, i64 } %t459, ptr %a465 + call void @finch_str_drop(ptr %a465) + store { ptr, i64, i64 } %t461, ptr %a466 + call void @finch_str_drop(ptr %a466) + %t467 = load { ptr, i64, i64 }, ptr %a462 + %t468 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t467, ptr %a255 + store { ptr, i64, i64 } %t468, ptr %a469 + call void @finch_str_drop(ptr %a469) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + br label %endif10283 +else10282: + %t470 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t470, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.6935, i64 2, i64 0 }, ptr %a473 + %t474 = call i32 @finch_str_ends(ptr %a471, ptr %a473) + %t475 = icmp ne i32 %t474, 0 + br label %logic.from10294 +logic.from10294: + br i1 %t475, label %logic.end10296, label %logic.rhs10295 +logic.rhs10295: + %t476 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t476, ptr %a477 + store { ptr, i64, i64 } { ptr @.str.6937, i64 2, i64 0 }, ptr %a479 + %t480 = call i32 @finch_str_ends(ptr %a477, ptr %a479) + %t481 = icmp ne i32 %t480, 0 + br label %logic.rend10297 +logic.rend10297: + br label %logic.end10296 +logic.end10296: + %t482 = phi i1 [ true, %logic.from10294 ], [ %t481, %logic.rend10297 ] + br i1 %t482, label %then10298, label %else10299 +then10298: + %t483 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t483, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.6938, i64 1, i64 0 }, ptr %a486 + call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) + %t487 = load { ptr, i64, i64 }, ptr %a484 + %t488 = load { ptr, i64, i64 }, ptr %a320 + %t489 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t488) + store { ptr, i64, i64 } %t487, ptr %a491 + store { ptr, i64, i64 } %t489, ptr %a492 + call void @finch_str_concat(ptr %a490, ptr %a491, ptr %a492) + store { ptr, i64, i64 } %t487, ptr %a493 + call void @finch_str_drop(ptr %a493) + store { ptr, i64, i64 } %t489, ptr %a494 + call void @finch_str_drop(ptr %a494) + %t495 = load { ptr, i64, i64 }, ptr %a490 + %t496 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t495, ptr %a255 + store { ptr, i64, i64 } %t496, ptr %a497 + call void @finch_str_drop(ptr %a497) + br label %endif10300 +else10299: + %t498 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t498, ptr %a500 + store { ptr, i64, i64 } { ptr @.str.6939, i64 1, i64 0 }, ptr %a501 + call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) + %t502 = load { ptr, i64, i64 }, ptr %a499 + %t503 = load { ptr, i64, i64 }, ptr %a320 + %t504 = load %S.platform.Target, ptr %a2 + %t505 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t503, %S.platform.Target %t504) + store { ptr, i64, i64 } %t502, ptr %a507 + store { ptr, i64, i64 } %t505, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t502, ptr %a509 + call void @finch_str_drop(ptr %a509) + store { ptr, i64, i64 } %t505, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a506 + %t512 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t511, ptr %a255 + store { ptr, i64, i64 } %t512, ptr %a513 + call void @finch_str_drop(ptr %a513) + br label %endif10300 +endif10300: + br label %endif10283 +endif10283: + br label %each.step10279 +each.step10279: + %t514 = load i64, ptr %a312 + %t515 = add i64 %t514, 1 + store i64 %t515, ptr %a312 + br label %each.cond10277 +each.end10280: + %t516 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t516, ptr %a518 + store { ptr, i64, i64 } { ptr @.str.6940, i64 3, i64 0 }, ptr %a519 + call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519) + %t520 = load { ptr, i64, i64 }, ptr %a517 + %t521 = load { ptr, i64, i64 }, ptr %a112 + %t522 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t521) + store { ptr, i64, i64 } %t520, ptr %a524 + store { ptr, i64, i64 } %t522, ptr %a525 + call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) + store { ptr, i64, i64 } %t520, ptr %a526 + call void @finch_str_drop(ptr %a526) + store { ptr, i64, i64 } %t522, ptr %a527 + call void @finch_str_drop(ptr %a527) + %t528 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t528, ptr %a530 + store { ptr, i64, i64 } { ptr @.str.6941, i64 5, i64 0 }, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + %t534 = call i64 @finch.host.run({ ptr, i64, i64 } %t533) + store { ptr, i64, i64 } %t533, ptr %a535 + call void @finch_str_drop(ptr %a535) + store i64 %t534, ptr %a536 + %t537 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t537, ptr %a538 + store { ptr, i64, i64 } zeroinitializer, ptr %a539 + store { ptr, i64, i64 } zeroinitializer, ptr %a540 + %t541 = call i32 @finch_try_read_file(ptr %a539, ptr %a538, ptr %a540) + %t542 = icmp eq i32 %t541, 0 + %t543 = load { ptr, i64, i64 }, ptr %a540 + %t544 = load { ptr, i64, i64 }, ptr %a539 + br i1 %t542, label %or.failed10301, label %or.ok10302 +or.failed10301: + store { ptr, i64, i64 } %t543, ptr %a545 + call void @finch_str_drop(ptr %a545) + br label %or.bend10303 +or.bend10303: + br label %or.end10304 +or.ok10302: + br label %or.end10304 +or.end10304: + %t546 = phi { ptr, i64, i64 } [ { ptr @.str.6942, i64 0, i64 0 }, %or.bend10303 ], [ %t544, %or.ok10302 ] + store { ptr, i64, i64 } %t546, ptr %a547 + %t548 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t548) + %t549 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t549) + store i64 0, ptr %a550 + br label %each.cond10305 +each.cond10305: + %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t552 = load i64, ptr %t551 + %t553 = load i64, ptr %a550 + %t554 = icmp slt i64 %t553, %t552 + br i1 %t554, label %each.body10306, label %each.end10308 +each.body10306: + %t555 = load ptr, ptr %a310 + %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t555, i64 %t553 + %t557 = load { ptr, i64, i64 }, ptr %t556 + store { ptr, i64, i64 } %t557, ptr %a558 + %t559 = load { ptr, i64, i64 }, ptr %a558 + call void @finch.host.remove({ ptr, i64, i64 } %t559) + br label %each.step10307 +each.step10307: + %t560 = load i64, ptr %a550 + %t561 = add i64 %t560, 1 + store i64 %t561, ptr %a550 + br label %each.cond10305 +each.end10308: + %t562 = load i64, ptr %a536 + %t563 = icmp eq i64 %t562, 127 + br i1 %t563, label %then10309, label %endif10311 +then10309: + %t564 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.6943, i64 42, i64 0 }, ptr %a566 + store { ptr, i64, i64 } %t564, ptr %a567 + call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) + %t568 = load { ptr, i64, i64 }, ptr %a565 + store { ptr, i64, i64 } %t568, ptr %a570 + store { ptr, i64, i64 } { ptr @.str.6944, i64 32, i64 0 }, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + store { ptr, i64, i64 } %t568, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a569 + %t574 = extractvalue { ptr, i64, i64 } %t573, 1 + %t575 = trunc i64 %t574 to i32 + %t576 = extractvalue { ptr, i64, i64 } %t573, 0 + %t577 = icmp eq ptr %t576, null + %t578 = select i1 %t577, ptr @.str.6945, ptr %t576 + %t579 = call i32 (ptr, ...) @printf(ptr @.str.6946, i32 %t575, ptr %t578) + store { ptr, i64, i64 } %t573, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = call i32 (ptr, ...) @printf(ptr @.str.6947) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +endif10311: + %t582 = load i64, ptr %a536 + %t583 = icmp ne i64 %t582, 0 + br i1 %t583, label %then10312, label %endif10314 +then10312: + %t584 = load { ptr, i64, i64 }, ptr %a547 + %t585 = load %S.cimport.CImports, ptr %a3 + %t586 = load %S.platform.Target, ptr %a2 + %t587 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t584, %S.cimport.CImports %t585, %S.platform.Target %t586) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 %t587 +endif10314: + %t588 = getelementptr inbounds { ptr, i64, i64 }, ptr %a547, i32 0, i32 1 + %t589 = load i64, ptr %t588 + %t590 = icmp sgt i64 %t589, 0 + br i1 %t590, label %then10315, label %endif10317 +then10315: + %t591 = load { ptr, i64, i64 }, ptr %a547 + %t592 = extractvalue { ptr, i64, i64 } %t591, 1 + %t593 = trunc i64 %t592 to i32 + %t594 = extractvalue { ptr, i64, i64 } %t591, 0 + %t595 = icmp eq ptr %t594, null + %t596 = select i1 %t595, ptr @.str.6948, ptr %t594 + %t597 = call i32 (ptr, ...) @printf(ptr @.str.6949, i32 %t593, ptr %t596) + %t598 = call i32 (ptr, ...) @printf(ptr @.str.6950) + br label %endif10317 +endif10317: + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 0 +} + +define internal i64 @finch.lsp.hexval(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 48 + br label %logic.from10318 +logic.from10318: + br i1 %t3, label %logic.rhs10319, label %logic.end10320 +logic.rhs10319: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 57 + br label %logic.rend10321 +logic.rend10321: + br label %logic.end10320 +logic.end10320: + %t6 = phi i1 [ false, %logic.from10318 ], [ %t5, %logic.rend10321 ] + br i1 %t6, label %then10322, label %endif10324 +then10322: + %t7 = load i8, ptr %a1 + %t8 = zext i8 %t7 to i64 + %t9 = zext i8 48 to i64 + %t10 = sub i64 %t8, %t9 + ret i64 %t10 +endif10324: + %t11 = load i8, ptr %a1 + %t12 = icmp uge i8 %t11, 97 + br label %logic.from10325 +logic.from10325: + br i1 %t12, label %logic.rhs10326, label %logic.end10327 +logic.rhs10326: + %t13 = load i8, ptr %a1 + %t14 = icmp ule i8 %t13, 102 + br label %logic.rend10328 +logic.rend10328: + br label %logic.end10327 +logic.end10327: + %t15 = phi i1 [ false, %logic.from10325 ], [ %t14, %logic.rend10328 ] + br i1 %t15, label %then10329, label %endif10331 +then10329: + %t16 = load i8, ptr %a1 + %t17 = zext i8 %t16 to i64 + %t18 = zext i8 97 to i64 + %t19 = sub i64 %t17, %t18 + %t20 = add i64 %t19, 10 + ret i64 %t20 +endif10331: + %t21 = load i8, ptr %a1 + %t22 = icmp uge i8 %t21, 65 + br label %logic.from10332 +logic.from10332: + br i1 %t22, label %logic.rhs10333, label %logic.end10334 +logic.rhs10333: + %t23 = load i8, ptr %a1 + %t24 = icmp ule i8 %t23, 70 + br label %logic.rend10335 +logic.rend10335: + br label %logic.end10334 +logic.end10334: + %t25 = phi i1 [ false, %logic.from10332 ], [ %t24, %logic.rend10335 ] + br i1 %t25, label %then10336, label %endif10338 +then10336: + %t26 = load i8, ptr %a1 + %t27 = zext i8 %t26 to i64 + %t28 = zext i8 65 to i64 + %t29 = sub i64 %t27, %t28 + %t30 = add i64 %t29, 10 + ret i64 %t30 +endif10338: + ret i64 -1 +} + +define internal void @finch.drop.arr_u8(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i64, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6952, i64 7, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then10339, label %endif10341 +then10339: + %t13 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t13, ptr %a14 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t17 = load i64, ptr %t16 + call void @finch_str_sub(ptr %a15, ptr %a14, i64 7, i64 %t17, ptr @.str.6953, i64 114) + %t18 = load { ptr, i64, i64 }, ptr %a15 + %t19 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t18, ptr %a6 + store { ptr, i64, i64 } %t19, ptr %a20 + call void @finch_str_drop(ptr %a20) + br label %endif10341 +endif10341: + store { ptr, i64, i64 } zeroinitializer, ptr %a21 + store i64 0, ptr %a22 + br label %while.cond10342 +while.cond10342: + %t23 = load i64, ptr %a22 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = icmp slt i64 %t23, %t25 + br i1 %t26, label %while.body10343, label %while.end10344 +while.body10343: + %t27 = load i64, ptr %a22 + %t28 = load { ptr, i64, i64 }, ptr %a6 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 %t27, %t29 + br i1 %t30, label %range10345, label %inrange10346 +range10345: + call void @finch_panic_index(ptr @.str.6954, i64 119, i64 %t27, i64 %t29) + unreachable +inrange10346: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds i8, ptr %t31, i64 %t27 + %t33 = load i8, ptr %t32 + %t34 = icmp eq i8 %t33, 37 + br label %logic.from10347 +logic.from10347: + br i1 %t34, label %logic.rhs10348, label %logic.end10349 +logic.rhs10348: + %t35 = load i64, ptr %a22 + %t36 = add i64 %t35, 2 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 0 + %t40 = icmp slt i64 %t36, %t39 + br label %logic.rend10350 +logic.rend10350: + br label %logic.end10349 +logic.end10349: + %t41 = phi i1 [ false, %logic.from10347 ], [ %t40, %logic.rend10350 ] + br label %logic.from10351 +logic.from10351: + br i1 %t41, label %logic.rhs10352, label %logic.end10353 +logic.rhs10352: + %t42 = load i64, ptr %a22 + %t43 = add i64 %t42, 1 + %t44 = load { ptr, i64, i64 }, ptr %a6 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 %t43, %t45 + br i1 %t46, label %range10354, label %inrange10355 +range10354: + call void @finch_panic_index(ptr @.str.6955, i64 119, i64 %t43, i64 %t45) + unreachable +inrange10355: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 + %t49 = load i8, ptr %t48 + %t50 = call i64 @finch.lsp.hexval(i8 %t49) + %t51 = icmp sge i64 %t50, 0 + br label %logic.rend10356 +logic.rend10356: + br label %logic.end10353 +logic.end10353: + %t52 = phi i1 [ false, %logic.from10351 ], [ %t51, %logic.rend10356 ] + br label %logic.from10357 +logic.from10357: + br i1 %t52, label %logic.rhs10358, label %logic.end10359 +logic.rhs10358: + %t53 = load i64, ptr %a22 + %t54 = add i64 %t53, 2 + %t55 = load { ptr, i64, i64 }, ptr %a6 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range10360, label %inrange10361 +range10360: + call void @finch_panic_index(ptr @.str.6956, i64 119, i64 %t54, i64 %t56) + unreachable +inrange10361: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 + %t60 = load i8, ptr %t59 + %t61 = call i64 @finch.lsp.hexval(i8 %t60) + %t62 = icmp sge i64 %t61, 0 + br label %logic.rend10362 +logic.rend10362: + br label %logic.end10359 +logic.end10359: + %t63 = phi i1 [ false, %logic.from10357 ], [ %t62, %logic.rend10362 ] + br i1 %t63, label %then10363, label %else10364 +then10363: + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 + %t65 = load i64, ptr %a22 + %t66 = add i64 %t65, 1 + %t67 = load { ptr, i64, i64 }, ptr %a6 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 %t66, %t68 + br i1 %t69, label %range10366, label %inrange10367 +range10366: + call void @finch_panic_index(ptr @.str.6957, i64 120, i64 %t66, i64 %t68) + unreachable +inrange10367: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds i8, ptr %t70, i64 %t66 + %t72 = load i8, ptr %t71 + %t73 = call i64 @finch.lsp.hexval(i8 %t72) + %t74 = mul i64 %t73, 16 + %t75 = load i64, ptr %a22 + %t76 = add i64 %t75, 2 + %t77 = load { ptr, i64, i64 }, ptr %a6 + %t78 = extractvalue { ptr, i64, i64 } %t77, 1 + %t79 = icmp uge i64 %t76, %t78 + br i1 %t79, label %range10368, label %inrange10369 +range10368: + call void @finch_panic_index(ptr @.str.6958, i64 120, i64 %t76, i64 %t78) + unreachable +inrange10369: + %t80 = extractvalue { ptr, i64, i64 } %t77, 0 + %t81 = getelementptr inbounds i8, ptr %t80, i64 %t76 + %t82 = load i8, ptr %t81 + %t83 = call i64 @finch.lsp.hexval(i8 %t82) + %t84 = add i64 %t74, %t83 + %t85 = trunc i64 %t84 to i8 + %t86 = load i64, ptr %t64 + %t87 = add i64 %t86, 1 + call void @finch_arr_reserve(ptr %a21, i64 %t87, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t88 = load ptr, ptr %a21 + %t89 = getelementptr inbounds i8, ptr %t88, i64 %t86 + store i8 %t85, ptr %t89 + store i64 %t87, ptr %t64 + %t90 = load i64, ptr %a22 + %t91 = add i64 %t90, 3 + store i64 %t91, ptr %a22 + br label %endif10365 +else10364: + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 + %t93 = load i64, ptr %a22 + %t94 = load { ptr, i64, i64 }, ptr %a6 + %t95 = extractvalue { ptr, i64, i64 } %t94, 1 + %t96 = icmp uge i64 %t93, %t95 + br i1 %t96, label %range10370, label %inrange10371 +range10370: + call void @finch_panic_index(ptr @.str.6959, i64 123, i64 %t93, i64 %t95) + unreachable +inrange10371: + %t97 = extractvalue { ptr, i64, i64 } %t94, 0 + %t98 = getelementptr inbounds i8, ptr %t97, i64 %t93 + %t99 = load i8, ptr %t98 + %t100 = load i64, ptr %t92 + %t101 = add i64 %t100, 1 + call void @finch_arr_reserve(ptr %a21, i64 %t101, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t102 = load ptr, ptr %a21 + %t103 = getelementptr inbounds i8, ptr %t102, i64 %t100 + store i8 %t99, ptr %t103 + store i64 %t101, ptr %t92 + %t104 = load i64, ptr %a22 + %t105 = add i64 %t104, 1 + store i64 %t105, ptr %a22 + br label %endif10365 +endif10365: + br label %while.cond10342 +while.end10344: + %t106 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } zeroinitializer, ptr %a107 + store { ptr, i64, i64 } %t106, ptr %a108 + call void @finch_str_from_bytes(ptr %a107, ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a107 + call void @finch.drop.arr_u8(ptr %a21) + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t109 +} + +define internal { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a18 = alloca i8, align 16 + %a21 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6960, i64 16, i64 0 }, ptr %a2 + %t3 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t4 = call ptr @finch_alloc(i64 %t3) + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 + store { ptr, i64, i64 } { ptr @.str.6961, i64 7, i64 0 }, ptr %t5 + %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 1 + %t8 = insertvalue { ptr, i64, i64 } %t7, i64 1, 2 + store { ptr, i64, i64 } %t8, ptr %a9 + store i64 0, ptr %a10 + br label %each.cond10372 +each.cond10372: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = load i64, ptr %a10 + %t14 = icmp slt i64 %t13, %t12 + br i1 %t14, label %each.body10373, label %each.end10375 +each.body10373: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds i8, ptr %t15, i64 %t13 + %t17 = load i8, ptr %t16 + store i8 %t17, ptr %a18 + %t19 = load i8, ptr %a18 + %t20 = zext i8 %t19 to i64 + store i64 %t20, ptr %a21 + %t22 = load i8, ptr %a18 + %t23 = icmp uge i8 %t22, 97 + br label %logic.from10376 +logic.from10376: + br i1 %t23, label %logic.rhs10377, label %logic.end10378 +logic.rhs10377: + %t24 = load i8, ptr %a18 + %t25 = icmp ule i8 %t24, 122 + br label %logic.rend10379 +logic.rend10379: + br label %logic.end10378 +logic.end10378: + %t26 = phi i1 [ false, %logic.from10376 ], [ %t25, %logic.rend10379 ] + br label %logic.from10380 +logic.from10380: + br i1 %t26, label %logic.end10382, label %logic.rhs10381 +logic.rhs10381: + %t27 = load i8, ptr %a18 + %t28 = icmp uge i8 %t27, 65 + br label %logic.from10383 +logic.from10383: + br i1 %t28, label %logic.rhs10384, label %logic.end10385 +logic.rhs10384: + %t29 = load i8, ptr %a18 + %t30 = icmp ule i8 %t29, 90 + br label %logic.rend10386 +logic.rend10386: + br label %logic.end10385 +logic.end10385: + %t31 = phi i1 [ false, %logic.from10383 ], [ %t30, %logic.rend10386 ] + br label %logic.rend10387 +logic.rend10387: + br label %logic.end10382 +logic.end10382: + %t32 = phi i1 [ true, %logic.from10380 ], [ %t31, %logic.rend10387 ] + br label %logic.from10388 +logic.from10388: + br i1 %t32, label %logic.end10390, label %logic.rhs10389 +logic.rhs10389: + %t33 = load i8, ptr %a18 + %t34 = icmp uge i8 %t33, 48 + br label %logic.from10391 +logic.from10391: + br i1 %t34, label %logic.rhs10392, label %logic.end10393 +logic.rhs10392: + %t35 = load i8, ptr %a18 + %t36 = icmp ule i8 %t35, 57 + br label %logic.rend10394 +logic.rend10394: + br label %logic.end10393 +logic.end10393: + %t37 = phi i1 [ false, %logic.from10391 ], [ %t36, %logic.rend10394 ] + br label %logic.rend10395 +logic.rend10395: + br label %logic.end10390 +logic.end10390: + %t38 = phi i1 [ true, %logic.from10388 ], [ %t37, %logic.rend10395 ] + br label %logic.from10396 +logic.from10396: + br i1 %t38, label %logic.end10398, label %logic.rhs10397 +logic.rhs10397: + store { ptr, i64, i64 } { ptr @.str.6962, i64 5, i64 0 }, ptr %a39 + %t41 = load i8, ptr %a18 + call void @finch_str_from_char(ptr %a42, i8 signext %t41) + %t43 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t43, ptr %a44 + %t45 = call i64 @finch_str_find(ptr %a39, ptr %a44) + %t46 = icmp sge i64 %t45, 0 + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %logic.rend10399 +logic.rend10399: + br label %logic.end10398 +logic.end10398: + %t48 = phi i1 [ true, %logic.from10396 ], [ %t46, %logic.rend10399 ] + br i1 %t48, label %then10400, label %else10401 +then10400: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t50 = load i8, ptr %a18 + call void @finch_str_from_char(ptr %a51, i8 signext %t50) + %t52 = load { ptr, i64, i64 }, ptr %a51 + %t53 = load i64, ptr %t49 + %t54 = add i64 %t53, 1 + call void @finch_arr_reserve(ptr %a9, i64 %t54, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t55 = load ptr, ptr %a9 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i64 %t53 + store { ptr, i64, i64 } %t52, ptr %t56 + store i64 %t54, ptr %t49 + br label %endif10402 +else10401: + %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t58 = load i64, ptr %a21 + %t59 = sdiv i64 %t58, 16 + %t60 = srem i64 %t59, 16 + %t61 = load { ptr, i64, i64 }, ptr %a2 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 %t60, %t62 + br i1 %t63, label %range10403, label %inrange10404 +range10403: + call void @finch_panic_index(ptr @.str.6965, i64 138, i64 %t60, i64 %t62) + unreachable +inrange10404: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 + %t66 = load i8, ptr %t65 + call void @finch_str_from_char(ptr %a67, i8 signext %t66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.6964, i64 1, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + %t74 = load i64, ptr %a21 + %t75 = srem i64 %t74, 16 + %t76 = load { ptr, i64, i64 }, ptr %a2 + %t77 = extractvalue { ptr, i64, i64 } %t76, 1 + %t78 = icmp uge i64 %t75, %t77 + br i1 %t78, label %range10405, label %inrange10406 +range10405: + call void @finch_panic_index(ptr @.str.6966, i64 138, i64 %t75, i64 %t77) + unreachable +inrange10406: + %t79 = extractvalue { ptr, i64, i64 } %t76, 0 + %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 + %t81 = load i8, ptr %t80 + call void @finch_str_from_char(ptr %a82, i8 signext %t81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t73, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t73, ptr %a87 + call void @finch_str_drop(ptr %a87) + store { ptr, i64, i64 } %t83, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a84 + %t90 = load i64, ptr %t57 + %t91 = add i64 %t90, 1 + call void @finch_arr_reserve(ptr %a9, i64 %t91, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t92 = load ptr, ptr %a9 + %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t90 + store { ptr, i64, i64 } %t89, ptr %t93 + store i64 %t91, ptr %t57 + br label %endif10402 +endif10402: + br label %each.step10374 +each.step10374: + %t94 = load i64, ptr %a10 + %t95 = add i64 %t94, 1 + store i64 %t95, ptr %a10 + br label %each.cond10372 +each.end10375: + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6967, i64 0, i64 0 }, ptr %a97 + call void @finch_str_join(ptr %a98, ptr %a9, ptr %a97) + %t99 = load { ptr, i64, i64 }, ptr %a98 + call void @finch.drop.arr_str(ptr %a9) + call void @finch_str_drop(ptr %a2) + ret { ptr, i64, i64 } %t99 +} + +define internal { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + store i64 0, ptr %a3 + br label %while.cond10407 +while.cond10407: + %t4 = load i64, ptr %a3 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = icmp slt i64 %t4, %t6 + br i1 %t7, label %while.body10408, label %while.end10409 +while.body10408: + %t8 = load i64, ptr %a3 + %t9 = load { ptr, i64, i64 }, ptr %a1 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range10410, label %inrange10411 +range10410: + call void @finch_panic_index(ptr @.str.6968, i64 149, i64 %t8, i64 %t10) + unreachable +inrange10411: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 + %t14 = load i8, ptr %t13 + %t15 = icmp eq i8 %t14, 92 + br label %logic.from10412 +logic.from10412: + br i1 %t15, label %logic.rhs10413, label %logic.end10414 +logic.rhs10413: + %t16 = load i64, ptr %a3 + %t17 = add i64 %t16, 1 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp slt i64 %t17, %t19 + br label %logic.rend10415 +logic.rend10415: + br label %logic.end10414 +logic.end10414: + %t21 = phi i1 [ false, %logic.from10412 ], [ %t20, %logic.rend10415 ] + br i1 %t21, label %then10416, label %else10417 +then10416: + %t22 = load i64, ptr %a3 + %t23 = add i64 %t22, 1 + %t24 = load { ptr, i64, i64 }, ptr %a1 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range10419, label %inrange10420 +range10419: + call void @finch_panic_index(ptr @.str.6969, i64 150, i64 %t23, i64 %t25) + unreachable +inrange10420: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 + %t29 = load i8, ptr %t28 + %t30 = icmp eq i8 %t29, 110 + br i1 %t30, label %then10421, label %else10422 +then10421: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = add i64 %t32, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t33, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t34 = load ptr, ptr %a2 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i64 %t32 + store { ptr, i64, i64 } { ptr @.str.6970, i64 1, i64 0 }, ptr %t35 + store i64 %t33, ptr %t31 + br label %endif10423 +else10422: + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t37 = load i64, ptr %a3 + %t38 = add i64 %t37, 1 + %t39 = load { ptr, i64, i64 }, ptr %a1 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range10424, label %inrange10425 +range10424: + call void @finch_panic_index(ptr @.str.6971, i64 153, i64 %t38, i64 %t40) + unreachable +inrange10425: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 + %t44 = load i8, ptr %t43 + call void @finch_str_from_char(ptr %a45, i8 signext %t44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + %t47 = load i64, ptr %t36 + %t48 = add i64 %t47, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t49 = load ptr, ptr %a2 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 + store { ptr, i64, i64 } %t46, ptr %t50 + store i64 %t48, ptr %t36 + br label %endif10423 +endif10423: + %t51 = load i64, ptr %a3 + %t52 = add i64 %t51, 2 + store i64 %t52, ptr %a3 + br label %endif10418 +else10417: + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t54 = load i64, ptr %a3 + %t55 = load { ptr, i64, i64 }, ptr %a1 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range10426, label %inrange10427 +range10426: + call void @finch_panic_index(ptr @.str.6972, i64 157, i64 %t54, i64 %t56) + unreachable +inrange10427: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 + %t60 = load i8, ptr %t59 + call void @finch_str_from_char(ptr %a61, i8 signext %t60) + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = load i64, ptr %t53 + %t64 = add i64 %t63, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t65 = load ptr, ptr %a2 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 + store { ptr, i64, i64 } %t62, ptr %t66 + store i64 %t64, ptr %t53 + %t67 = load i64, ptr %a3 + %t68 = add i64 %t67, 1 + store i64 %t68, ptr %a3 + br label %endif10418 +endif10418: + br label %while.cond10407 +while.end10409: + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6973, i64 0, i64 0 }, ptr %a70 + call void @finch_str_join(ptr %a71, ptr %a2, ptr %a70) + %t72 = load { ptr, i64, i64 }, ptr %a71 + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t72 +} + +define internal { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %p0, i64 %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6975, i64 1, i64 0 }, ptr %a6 + call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load i64, ptr %a2 + %t11 = icmp sge i64 %t10, 1 + br label %logic.from10428 +logic.from10428: + br i1 %t11, label %logic.rhs10429, label %logic.end10430 +logic.rhs10429: + %t12 = load i64, ptr %a2 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sle i64 %t12, %t14 + br label %logic.rend10431 +logic.rend10431: + br label %logic.end10430 +logic.end10430: + %t16 = phi i1 [ false, %logic.from10428 ], [ %t15, %logic.rend10431 ] + br i1 %t16, label %then10432, label %endif10434 +then10432: + %t17 = load i64, ptr %a2 + %t18 = sub i64 %t17, 1 + %t19 = load { ptr, i64, i64 }, ptr %a9 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range10435, label %inrange10436 +range10435: + call void @finch_panic_index(ptr @.str.6976, i64 167, i64 %t18, i64 %t20) + unreachable +inrange10436: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + call void @finch.drop.arr_str(ptr %a9) + ret { ptr, i64, i64 } %t27 +endif10434: + call void @finch.drop.arr_str(ptr %a9) + ret { ptr, i64, i64 } { ptr @.str.6977, i64 0, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.lsp.readLine() { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i32, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } zeroinitializer, ptr %a1 + br label %while.cond10437 +while.cond10437: + br label %while.body10438 +while.body10438: + %t2 = call i32 @getchar() + store i32 %t2, ptr %a3 + %t4 = load i32, ptr %a3 + %t5 = icmp slt i32 %t4, 0 + br i1 %t5, label %then10440, label %endif10442 +then10440: + call void @finch.drop.arr_u8(ptr %a1) + ret { ptr, i64, i64 } { ptr @.str.6978, i64 0, i64 0 } +endif10442: + %t6 = load i32, ptr %a3 + %t7 = icmp eq i32 %t6, 10 + br i1 %t7, label %then10443, label %endif10445 +then10443: + br label %while.end10439 +endif10445: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t9 = load i32, ptr %a3 + %t10 = trunc i32 %t9 to i8 + %t11 = load i64, ptr %t8 + %t12 = add i64 %t11, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t12, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t13 = load ptr, ptr %a1 + %t14 = getelementptr inbounds i8, ptr %t13, i64 %t11 + store i8 %t10, ptr %t14 + store i64 %t12, ptr %t8 + br label %while.cond10437 +while.end10439: + %t15 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a16 + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_from_bytes(ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.6980, i64 1, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_ends(ptr %a21, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br i1 %t25, label %then10446, label %endif10448 +then10446: + %t26 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t26, ptr %a27 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = sub i64 %t30, 1 + call void @finch_str_sub(ptr %a28, ptr %a27, i64 0, i64 %t31, ptr @.str.6981, i64 188) + %t32 = load { ptr, i64, i64 }, ptr %a28 + %t33 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t32, ptr %a19 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_drop(ptr %a34) + br label %endif10448 +endif10448: + %t35 = load { ptr, i64, i64 }, ptr %a19 + call void @finch.drop.arr_u8(ptr %a1) + ret { ptr, i64, i64 } %t35 +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() { +entry: + %a1 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca i64, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca i64, align 16 + %a45 = alloca i32, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + store i64 0, ptr %a1 + br label %while.cond10449 +while.cond10449: + br label %while.body10450 +while.body10450: + %t2 = call { ptr, i64, i64 } @finch.lsp.readLine() + store { ptr, i64, i64 } %t2, ptr %a3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = icmp eq i64 %t5, 0 + br i1 %t6, label %then10452, label %endif10454 +then10452: + %t7 = load i64, ptr %a1 + %t8 = icmp sgt i64 %t7, 0 + br i1 %t8, label %then10455, label %endif10457 +then10455: + call void @finch_str_drop(ptr %a3) + br label %while.end10451 +endif10457: + %t9 = call ptr @finch_std_stream(i32 0) + %t10 = call i32 @feof(ptr %t9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then10458, label %endif10460 +then10458: + call void @finch_str_drop(ptr %a3) + %t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6982, i64 32, i64 0 }, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t12 +endif10460: + call void @finch_str_drop(ptr %a3) + br label %while.cond10449 +endif10454: + %t13 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.6984, i64 15, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_starts(ptr %a14, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br i1 %t18, label %then10461, label %endif10463 +then10461: + %t19 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t19, ptr %a20 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t23 = load i64, ptr %t22 + call void @finch_str_sub(ptr %a21, ptr %a20, i64 15, i64 %t23, ptr @.str.6985, i64 208) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_trim(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + store { ptr, i64, i64 } zeroinitializer, ptr %a29 + store i64 0, ptr %a30 + store { ptr, i64, i64 } %t27, ptr %a31 + %t32 = call i32 @finch_str_try_int(ptr %a31, ptr %a30, ptr %a29) + %t33 = icmp eq i32 %t32, 0 + %t34 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load i64, ptr %a30 + br i1 %t33, label %or.failed10464, label %or.ok10465 +or.failed10464: + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_drop(ptr %a37) + br label %or.bend10466 +or.bend10466: + br label %or.end10467 +or.ok10465: + br label %or.end10467 +or.end10467: + %t38 = phi i64 [ 0, %or.bend10466 ], [ %t36, %or.ok10465 ] + store i64 %t38, ptr %a1 + br label %endif10463 +endif10463: + call void @finch_str_drop(ptr %a3) + br label %while.cond10449 +while.end10451: + store { ptr, i64, i64 } zeroinitializer, ptr %a39 + %t40 = load i64, ptr %a1 + store i64 0, ptr %a41 + br label %for.cond10468 +for.cond10468: + %t42 = load i64, ptr %a41 + %t43 = icmp slt i64 %t42, %t40 + br i1 %t43, label %for.body10469, label %for.end10471 +for.body10469: + %t44 = call i32 @getchar() + store i32 %t44, ptr %a45 + %t46 = load i32, ptr %a45 + %t47 = icmp slt i32 %t46, 0 + br i1 %t47, label %then10472, label %endif10474 +then10472: + call void @finch.drop.arr_u8(ptr %a39) + %t48 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6987, i64 25, i64 0 }, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t48 +endif10474: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a39, i32 0, i32 1 + %t50 = load i32, ptr %a45 + %t51 = trunc i32 %t50 to i8 + %t52 = load i64, ptr %t49 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %a39, i64 %t53, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %a39 + %t55 = getelementptr inbounds i8, ptr %t54, i64 %t52 + store i8 %t51, ptr %t55 + store i64 %t53, ptr %t49 + br label %for.step10470 +for.step10470: + %t56 = load i64, ptr %a41 + %t57 = add i64 %t56, 1 + store i64 %t57, ptr %a41 + br label %for.cond10468 +for.end10471: + %t58 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } zeroinitializer, ptr %a59 + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_from_bytes(ptr %a59, ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a59 + %t62 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %t61) + %t63 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 0 + %t64 = xor i1 %t63, true + %t65 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 2 + %t66 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 1 + store { ptr, i64, i64 } %t61, ptr %a67 + call void @finch_str_drop(ptr %a67) + br i1 %t64, label %try.failed10475, label %try.ok10476 +try.failed10475: + call void @finch.drop.arr_u8(ptr %a39) + %t68 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t65, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t68 +try.ok10476: + call void @finch.drop.arr_u8(ptr %a39) + %t69 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t70 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t69, %S.json.Json %t66, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t70 +} + +define internal void @finch.lsp.send(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = load %S.json.Json, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %t2) + store { ptr, i64, i64 } %t3, ptr %a4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + call void @finch_str_from_int(ptr %a7, i64 %t6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.6988, i64 16, i64 0 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6989, i64 4, i64 0 }, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load { ptr, i64, i64 }, ptr %a19 + %t21 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t20, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load { ptr, i64, i64 }, ptr %a26 + %t28 = extractvalue { ptr, i64, i64 } %t27, 0 + %t29 = icmp eq ptr %t28, null + %t30 = select i1 %t29, ptr @.str.6990, ptr %t28 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = call ptr @finch_std_stream(i32 1) + %t34 = call i64 @fwrite(ptr %t30, i64 1, i64 %t32, ptr %t33) + %t35 = call ptr @finch_std_stream(i32 1) + %t36 = call i32 @fflush(ptr %t35) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a19) + call void @finch_str_drop(ptr %a4) + ret void +} + +define internal void @finch.drop.arr_S_json_Json(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10477 +n.cond10477: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10478, label %n.end10479 +n.body10478: + %t7 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t5 + call void @finch.drop.S_json_Json(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10477 +n.end10479: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_json_Json(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_S_json_Json(ptr %t2) + %t3 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t3) + ret void +} + +define internal void @finch.lsp.reply(%S.json.Json %p0, %S.json.Json %p1) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca %S.json.Json, align 16 + %a4 = alloca %S.json.Json, align 16 + %a6 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + store %S.json.Json %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t3, ptr %a4 + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6992, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6991, i64 7, i64 0 }, %S.json.Json %t5) + store %S.json.Json %t5, ptr %a6 + call void @finch.drop.S_json_Json(ptr %a6) + %t7 = load %S.json.Json, ptr %a1 + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6993, i64 2, i64 0 }, %S.json.Json %t7) + %t8 = load %S.json.Json, ptr %a2 + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6994, i64 6, i64 0 }, %S.json.Json %t8) + %t9 = load %S.json.Json, ptr %a4 + call void @finch.lsp.send(%S.json.Json %t9) + call void @finch.drop.S_json_Json(ptr %a4) + ret void +} + +define internal void @finch.lsp.notify({ ptr, i64, i64 } %p0, %S.json.Json %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.json.Json, align 16 + %a4 = alloca %S.json.Json, align 16 + %a6 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.json.Json %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t3, ptr %a4 + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.6996, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6995, i64 7, i64 0 }, %S.json.Json %t5) + store %S.json.Json %t5, ptr %a6 + call void @finch.drop.S_json_Json(ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a1 + %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6997, i64 6, i64 0 }, %S.json.Json %t8) + store %S.json.Json %t8, ptr %a9 + call void @finch.drop.S_json_Json(ptr %a9) + %t10 = load %S.json.Json, ptr %a2 + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6998, i64 6, i64 0 }, %S.json.Json %t10) + %t11 = load %S.json.Json, ptr %a4 + call void @finch.lsp.send(%S.json.Json %t11) + call void @finch.drop.S_json_Json(ptr %a4) + ret void +} + +define internal %S.json.Json @finch.lsp.num(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + store i64 %p0, ptr %a1 + %t2 = load i64, ptr %a1 + %t3 = sitofp i64 %t2 to double + %t4 = call %S.json.Json @finch.json.new_number(double %t3) + ret %S.json.Json %t4 +} + +define internal %S.json.Json @finch.lsp.position(i64 %p0, i64 %p1) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i64, align 16 + %a4 = alloca %S.json.Json, align 16 + %a7 = alloca %S.json.Json, align 16 + %a10 = alloca %S.json.Json, align 16 + store i64 %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t3, ptr %a4 + %t5 = load i64, ptr %a1 + %t6 = call %S.json.Json @finch.lsp.num(i64 %t5) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.6999, i64 4, i64 0 }, %S.json.Json %t6) + store %S.json.Json %t6, ptr %a7 + call void @finch.drop.S_json_Json(ptr %a7) + %t8 = load i64, ptr %a2 + %t9 = call %S.json.Json @finch.lsp.num(i64 %t8) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7000, i64 9, i64 0 }, %S.json.Json %t9) + store %S.json.Json %t9, ptr %a10 + call void @finch.drop.S_json_Json(ptr %a10) + %t11 = load %S.json.Json, ptr %a4 + ret %S.json.Json %t11 +} + +define internal %S.json.Json @finch.lsp.range(i64 %p0, i64 %p1, i64 %p2) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a5 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + %a13 = alloca %S.json.Json, align 16 + store i64 %p0, ptr %a1 + store i64 %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t4, ptr %a5 + %t6 = load i64, ptr %a1 + %t7 = load i64, ptr %a2 + %t8 = call %S.json.Json @finch.lsp.position(i64 %t6, i64 %t7) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7001, i64 5, i64 0 }, %S.json.Json %t8) + store %S.json.Json %t8, ptr %a9 + call void @finch.drop.S_json_Json(ptr %a9) + %t10 = load i64, ptr %a1 + %t11 = load i64, ptr %a3 + %t12 = call %S.json.Json @finch.lsp.position(i64 %t10, i64 %t11) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7002, i64 3, i64 0 }, %S.json.Json %t12) + store %S.json.Json %t12, ptr %a13 + call void @finch.drop.S_json_Json(ptr %a13) + %t14 = load %S.json.Json, ptr %a5 + ret %S.json.Json %t14 +} + +define internal { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.7004, i64 1, i64 0 }, ptr %a5 + call void @finch_str_split(ptr %a6, ptr %a3, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + ret { ptr, i64, i64 } %t7 +} + +define internal i64 @finch.lsp.intOf({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a3 + store i64 0, ptr %a4 + store { ptr, i64, i64 } %t2, ptr %a5 + %t6 = call i32 @finch_str_try_int(ptr %a5, ptr %a4, ptr %a3) + %t7 = icmp eq i32 %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a3 + %t9 = load i64, ptr %a4 + br i1 %t7, label %or.failed10480, label %or.ok10481 +or.failed10480: + store { ptr, i64, i64 } %t8, ptr %a10 + call void @finch_str_drop(ptr %a10) + br label %or.bend10482 +or.bend10482: + br label %or.end10483 +or.ok10481: + br label %or.end10483 +or.end10483: + %t11 = phi i64 [ 0, %or.bend10482 ], [ %t9, %or.ok10481 ] + ret i64 %t11 +} + +define internal %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca i64, align 16 + %a56 = alloca i64, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca i64, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.7006, i64 9, i64 0 }, ptr %a5 + %t6 = call i64 @finch_str_find(ptr %a3, ptr %a5) + store i64 %t6, ptr %a7 + %t8 = load i64, ptr %a7 + %t9 = icmp slt i64 %t8, 0 + br i1 %t9, label %then10484, label %endif10486 +then10484: + ret %S.lsp.Diag zeroinitializer +endif10486: + %t10 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t10, ptr %a11 + %t13 = load i64, ptr %a7 + call void @finch_str_sub(ptr %a12, ptr %a11, i64 0, i64 %t13, ptr @.str.7007, i64 280) + %t14 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t14, ptr %a15 + %t16 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t16, ptr %a17 + %t19 = load i64, ptr %a7 + %t20 = add i64 %t19, 9 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t22 = load i64, ptr %t21 + call void @finch_str_sub(ptr %a18, ptr %a17, i64 %t20, i64 %t22, ptr @.str.7008, i64 281) + %t23 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t23, ptr %a24 + %t25 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.7010, i64 1, i64 0 }, ptr %a28 + call void @finch_str_split(ptr %a29, ptr %a26, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t30, ptr %a31 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = icmp slt i64 %t33, 3 + br i1 %t34, label %then10487, label %endif10489 +then10487: + call void @finch.drop.arr_str(ptr %a31) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a15) + ret %S.lsp.Diag zeroinitializer +endif10489: + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t36 = load i64, ptr %t35 + %t37 = sub i64 %t36, 1 + %t38 = load { ptr, i64, i64 }, ptr %a31 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 %t37, %t39 + br i1 %t40, label %range10490, label %inrange10491 +range10490: + call void @finch_panic_index(ptr @.str.7011, i64 287, i64 %t37, i64 %t39) + unreachable +inrange10491: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t37 + %t43 = load { ptr, i64, i64 }, ptr %t42 + %t44 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t43) + store i64 %t44, ptr %a45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = sub i64 %t47, 2 + %t49 = load { ptr, i64, i64 }, ptr %a31 + %t50 = extractvalue { ptr, i64, i64 } %t49, 1 + %t51 = icmp uge i64 %t48, %t50 + br i1 %t51, label %range10492, label %inrange10493 +range10492: + call void @finch_panic_index(ptr @.str.7012, i64 288, i64 %t48, i64 %t50) + unreachable +inrange10493: + %t52 = extractvalue { ptr, i64, i64 } %t49, 0 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t48 + %t54 = load { ptr, i64, i64 }, ptr %t53 + %t55 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t54) + store i64 %t55, ptr %a56 + store { ptr, i64, i64 } zeroinitializer, ptr %a57 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t59 = load i64, ptr %t58 + %t60 = sub i64 %t59, 2 + store i64 0, ptr %a61 + br label %for.cond10494 +for.cond10494: + %t62 = load i64, ptr %a61 + %t63 = icmp slt i64 %t62, %t60 + br i1 %t63, label %for.body10495, label %for.end10497 +for.body10495: + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 + %t65 = load i64, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a31 + %t67 = extractvalue { ptr, i64, i64 } %t66, 1 + %t68 = icmp uge i64 %t65, %t67 + br i1 %t68, label %range10498, label %inrange10499 +range10498: + call void @finch_panic_index(ptr @.str.7013, i64 291, i64 %t65, i64 %t67) + unreachable +inrange10499: + %t69 = extractvalue { ptr, i64, i64 } %t66, 0 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t65 + %t71 = load { ptr, i64, i64 }, ptr %t70 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_copy(ptr %a73, ptr %a72) + %t74 = load { ptr, i64, i64 }, ptr %a73 + %t75 = load i64, ptr %t64 + %t76 = add i64 %t75, 1 + call void @finch_arr_reserve(ptr %a57, i64 %t76, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t77 = load ptr, ptr %a57 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i64 %t75 + store { ptr, i64, i64 } %t74, ptr %t78 + store i64 %t76, ptr %t64 + br label %for.step10496 +for.step10496: + %t79 = load i64, ptr %a61 + %t80 = add i64 %t79, 1 + store i64 %t80, ptr %a61 + br label %for.cond10494 +for.end10497: + %t81 = insertvalue %S.lsp.Diag zeroinitializer, i1 true, 0 + %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7014, i64 1, i64 0 }, ptr %a83 + call void @finch_str_join(ptr %a84, ptr %a57, ptr %a83) + %t85 = load { ptr, i64, i64 }, ptr %a84 + %t86 = insertvalue %S.lsp.Diag %t81, { ptr, i64, i64 } %t85, 1 + %t87 = load i64, ptr %a56 + %t88 = insertvalue %S.lsp.Diag %t86, i64 %t87, 2 + %t89 = load i64, ptr %a45 + %t90 = insertvalue %S.lsp.Diag %t88, i64 %t89, 3 + %t91 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t91, ptr %a92 + call void @finch_str_copy(ptr %a93, ptr %a92) + %t94 = load { ptr, i64, i64 }, ptr %a93 + %t95 = insertvalue %S.lsp.Diag %t90, { ptr, i64, i64 } %t94, 4 + call void @finch.drop.arr_str(ptr %a57) + call void @finch.drop.arr_str(ptr %a31) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a15) + ret %S.lsp.Diag %t95 +} + +define internal void @finch.drop.S_lsp_Diag(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Diag, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Diag, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.lsp.Analysis, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca i64, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca %S.lsp.Diag, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.lsp.Analysis zeroinitializer, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.7016, i64 1, i64 0 }, ptr %a6 + call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store i64 0, ptr %a10 + br label %each.cond10500 +each.cond10500: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = load i64, ptr %a10 + %t14 = icmp slt i64 %t13, %t12 + br i1 %t14, label %each.body10501, label %each.end10503 +each.body10501: + %t15 = load ptr, ptr %a9 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.7018, i64 1, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_starts(ptr %a20, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br i1 %t24, label %then10504, label %else10505 +then10504: + %t25 = load { ptr, i64, i64 }, ptr %a18 + %t26 = call { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %t25) + store { ptr, i64, i64 } %t26, ptr %a27 + %t28 = load { ptr, i64, i64 }, ptr %a27 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 0, %t29 + br i1 %t30, label %range10507, label %inrange10508 +range10507: + call void @finch_panic_index(ptr @.str.7019, i64 301, i64 0, i64 %t29) + unreachable +inrange10508: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i64 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_copy(ptr %a35, ptr %a34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t36, ptr %a37 + %t38 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t38, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.7020, i64 2, i64 0 }, ptr %a40 + %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br label %logic.from10509 +logic.from10509: + br i1 %t42, label %logic.rhs10510, label %logic.end10511 +logic.rhs10510: + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t44 = load i64, ptr %t43 + %t45 = icmp sge i64 %t44, 9 + br label %logic.rend10512 +logic.rend10512: + br label %logic.end10511 +logic.end10511: + %t46 = phi i1 [ false, %logic.from10509 ], [ %t45, %logic.rend10512 ] + br i1 %t46, label %then10513, label %else10514 +then10513: + %t47 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 0 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1 + %t49 = load { ptr, i64, i64 }, ptr %a27 + %t50 = extractvalue { ptr, i64, i64 } %t49, 1 + %t51 = icmp uge i64 1, %t50 + br i1 %t51, label %range10516, label %inrange10517 +range10516: + call void @finch_panic_index(ptr @.str.7021, i64 303, i64 1, i64 %t50) + unreachable +inrange10517: + %t52 = extractvalue { ptr, i64, i64 } %t49, 0 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 1 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_copy(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + %t58 = insertvalue %S.lsp.Ref zeroinitializer, { ptr, i64, i64 } %t57, 0 + %t59 = load { ptr, i64, i64 }, ptr %a27 + %t60 = extractvalue { ptr, i64, i64 } %t59, 1 + %t61 = icmp uge i64 2, %t60 + br i1 %t61, label %range10518, label %inrange10519 +range10518: + call void @finch_panic_index(ptr @.str.7022, i64 303, i64 2, i64 %t60) + unreachable +inrange10519: + %t62 = extractvalue { ptr, i64, i64 } %t59, 0 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 2 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t64) + %t66 = insertvalue %S.lsp.Ref %t58, i64 %t65, 1 + %t67 = load { ptr, i64, i64 }, ptr %a27 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 3, %t68 + br i1 %t69, label %range10520, label %inrange10521 +range10520: + call void @finch_panic_index(ptr @.str.7023, i64 303, i64 3, i64 %t68) + unreachable +inrange10521: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 3 + %t72 = load { ptr, i64, i64 }, ptr %t71 + %t73 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t72) + %t74 = insertvalue %S.lsp.Ref %t66, i64 %t73, 2 + %t75 = load { ptr, i64, i64 }, ptr %a27 + %t76 = extractvalue { ptr, i64, i64 } %t75, 1 + %t77 = icmp uge i64 4, %t76 + br i1 %t77, label %range10522, label %inrange10523 +range10522: + call void @finch_panic_index(ptr @.str.7024, i64 303, i64 4, i64 %t76) + unreachable +inrange10523: + %t78 = extractvalue { ptr, i64, i64 } %t75, 0 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 4 + %t80 = load { ptr, i64, i64 }, ptr %t79 + %t81 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t80) + %t82 = insertvalue %S.lsp.Ref %t74, i64 %t81, 3 + %t83 = load { ptr, i64, i64 }, ptr %a27 + %t84 = extractvalue { ptr, i64, i64 } %t83, 1 + %t85 = icmp uge i64 5, %t84 + br i1 %t85, label %range10524, label %inrange10525 +range10524: + call void @finch_panic_index(ptr @.str.7025, i64 303, i64 5, i64 %t84) + unreachable +inrange10525: + %t86 = extractvalue { ptr, i64, i64 } %t83, 0 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 5 + %t88 = load { ptr, i64, i64 }, ptr %t87 + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_copy(ptr %a90, ptr %a89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = insertvalue %S.lsp.Ref %t82, { ptr, i64, i64 } %t91, 4 + %t93 = load { ptr, i64, i64 }, ptr %a27 + %t94 = extractvalue { ptr, i64, i64 } %t93, 1 + %t95 = icmp uge i64 6, %t94 + br i1 %t95, label %range10526, label %inrange10527 +range10526: + call void @finch_panic_index(ptr @.str.7026, i64 303, i64 6, i64 %t94) + unreachable +inrange10527: + %t96 = extractvalue { ptr, i64, i64 } %t93, 0 + %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 6 + %t98 = load { ptr, i64, i64 }, ptr %t97 + %t99 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t98) + %t100 = insertvalue %S.lsp.Ref %t92, i64 %t99, 5 + %t101 = load { ptr, i64, i64 }, ptr %a27 + %t102 = extractvalue { ptr, i64, i64 } %t101, 1 + %t103 = icmp uge i64 7, %t102 + br i1 %t103, label %range10528, label %inrange10529 +range10528: + call void @finch_panic_index(ptr @.str.7027, i64 303, i64 7, i64 %t102) + unreachable +inrange10529: + %t104 = extractvalue { ptr, i64, i64 } %t101, 0 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 7 + %t106 = load { ptr, i64, i64 }, ptr %t105 + %t107 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t106) + %t108 = insertvalue %S.lsp.Ref %t100, i64 %t107, 6 + %t109 = load { ptr, i64, i64 }, ptr %a27 + %t110 = extractvalue { ptr, i64, i64 } %t109, 1 + %t111 = icmp uge i64 8, %t110 + br i1 %t111, label %range10530, label %inrange10531 +range10530: + call void @finch_panic_index(ptr @.str.7028, i64 303, i64 8, i64 %t110) + unreachable +inrange10531: + %t112 = extractvalue { ptr, i64, i64 } %t109, 0 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 8 + %t114 = load { ptr, i64, i64 }, ptr %t113 + %t115 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t114) + %t116 = insertvalue %S.lsp.Ref %t108, { ptr, i64, i64 } %t115, 7 + %t117 = load i64, ptr %t48 + %t118 = add i64 %t117, 1 + call void @finch_arr_reserve(ptr %t47, i64 %t118, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) + %t119 = load ptr, ptr %t47 + %t120 = getelementptr inbounds %S.lsp.Ref, ptr %t119, i64 %t117 + store %S.lsp.Ref %t116, ptr %t120 + store i64 %t118, ptr %t48 + br label %endif10515 +else10514: + %t121 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.7029, i64 2, i64 0 }, ptr %a123 + %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) + %t125 = icmp ne i32 %t124, 0 + br label %logic.from10532 +logic.from10532: + br i1 %t125, label %logic.rhs10533, label %logic.end10534 +logic.rhs10533: + %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t127 = load i64, ptr %t126 + %t128 = icmp sge i64 %t127, 9 + br label %logic.rend10535 +logic.rend10535: + br label %logic.end10534 +logic.end10534: + %t129 = phi i1 [ false, %logic.from10532 ], [ %t128, %logic.rend10535 ] + br i1 %t129, label %then10536, label %else10537 +then10536: + %t130 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 1 + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 + %t132 = load { ptr, i64, i64 }, ptr %a27 + %t133 = extractvalue { ptr, i64, i64 } %t132, 1 + %t134 = icmp uge i64 1, %t133 + br i1 %t134, label %range10539, label %inrange10540 +range10539: + call void @finch_panic_index(ptr @.str.7030, i64 305, i64 1, i64 %t133) + unreachable +inrange10540: + %t135 = extractvalue { ptr, i64, i64 } %t132, 0 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i64 1 + %t137 = load { ptr, i64, i64 }, ptr %t136 + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_copy(ptr %a139, ptr %a138) + %t140 = load { ptr, i64, i64 }, ptr %a139 + %t141 = insertvalue %S.lsp.VarRec zeroinitializer, { ptr, i64, i64 } %t140, 0 + %t142 = load { ptr, i64, i64 }, ptr %a27 + %t143 = extractvalue { ptr, i64, i64 } %t142, 1 + %t144 = icmp uge i64 2, %t143 + br i1 %t144, label %range10541, label %inrange10542 +range10541: + call void @finch_panic_index(ptr @.str.7031, i64 305, i64 2, i64 %t143) + unreachable +inrange10542: + %t145 = extractvalue { ptr, i64, i64 } %t142, 0 + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 2 + %t147 = load { ptr, i64, i64 }, ptr %t146 + store { ptr, i64, i64 } %t147, ptr %a148 + call void @finch_str_copy(ptr %a149, ptr %a148) + %t150 = load { ptr, i64, i64 }, ptr %a149 + %t151 = insertvalue %S.lsp.VarRec %t141, { ptr, i64, i64 } %t150, 1 + %t152 = load { ptr, i64, i64 }, ptr %a27 + %t153 = extractvalue { ptr, i64, i64 } %t152, 1 + %t154 = icmp uge i64 3, %t153 + br i1 %t154, label %range10543, label %inrange10544 +range10543: + call void @finch_panic_index(ptr @.str.7032, i64 305, i64 3, i64 %t153) + unreachable +inrange10544: + %t155 = extractvalue { ptr, i64, i64 } %t152, 0 + %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i64 3 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_copy(ptr %a159, ptr %a158) + %t160 = load { ptr, i64, i64 }, ptr %a159 + %t161 = insertvalue %S.lsp.VarRec %t151, { ptr, i64, i64 } %t160, 2 + %t162 = load { ptr, i64, i64 }, ptr %a27 + %t163 = extractvalue { ptr, i64, i64 } %t162, 1 + %t164 = icmp uge i64 4, %t163 + br i1 %t164, label %range10545, label %inrange10546 +range10545: + call void @finch_panic_index(ptr @.str.7033, i64 305, i64 4, i64 %t163) + unreachable +inrange10546: + %t165 = extractvalue { ptr, i64, i64 } %t162, 0 + %t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %t165, i64 4 + %t167 = load { ptr, i64, i64 }, ptr %t166 + %t168 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t167) + %t169 = insertvalue %S.lsp.VarRec %t161, i64 %t168, 3 + %t170 = load { ptr, i64, i64 }, ptr %a27 + %t171 = extractvalue { ptr, i64, i64 } %t170, 1 + %t172 = icmp uge i64 5, %t171 + br i1 %t172, label %range10547, label %inrange10548 +range10547: + call void @finch_panic_index(ptr @.str.7034, i64 305, i64 5, i64 %t171) + unreachable +inrange10548: + %t173 = extractvalue { ptr, i64, i64 } %t170, 0 + %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 5 + %t175 = load { ptr, i64, i64 }, ptr %t174 + %t176 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t175) + %t177 = insertvalue %S.lsp.VarRec %t169, i64 %t176, 4 + %t178 = load { ptr, i64, i64 }, ptr %a27 + %t179 = extractvalue { ptr, i64, i64 } %t178, 1 + %t180 = icmp uge i64 6, %t179 + br i1 %t180, label %range10549, label %inrange10550 +range10549: + call void @finch_panic_index(ptr @.str.7035, i64 305, i64 6, i64 %t179) + unreachable +inrange10550: + %t181 = extractvalue { ptr, i64, i64 } %t178, 0 + %t182 = getelementptr inbounds { ptr, i64, i64 }, ptr %t181, i64 6 + %t183 = load { ptr, i64, i64 }, ptr %t182 + store { ptr, i64, i64 } %t183, ptr %a184 + call void @finch_str_copy(ptr %a185, ptr %a184) + %t186 = load { ptr, i64, i64 }, ptr %a185 + %t187 = insertvalue %S.lsp.VarRec %t177, { ptr, i64, i64 } %t186, 5 + %t188 = load { ptr, i64, i64 }, ptr %a27 + %t189 = extractvalue { ptr, i64, i64 } %t188, 1 + %t190 = icmp uge i64 7, %t189 + br i1 %t190, label %range10551, label %inrange10552 +range10551: + call void @finch_panic_index(ptr @.str.7036, i64 305, i64 7, i64 %t189) + unreachable +inrange10552: + %t191 = extractvalue { ptr, i64, i64 } %t188, 0 + %t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %t191, i64 7 + %t193 = load { ptr, i64, i64 }, ptr %t192 + %t194 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t193) + %t195 = insertvalue %S.lsp.VarRec %t187, i64 %t194, 6 + %t196 = load { ptr, i64, i64 }, ptr %a27 + %t197 = extractvalue { ptr, i64, i64 } %t196, 1 + %t198 = icmp uge i64 8, %t197 + br i1 %t198, label %range10553, label %inrange10554 +range10553: + call void @finch_panic_index(ptr @.str.7037, i64 305, i64 8, i64 %t197) + unreachable +inrange10554: + %t199 = extractvalue { ptr, i64, i64 } %t196, 0 + %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 8 + %t201 = load { ptr, i64, i64 }, ptr %t200 + %t202 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t201) + %t203 = insertvalue %S.lsp.VarRec %t195, i64 %t202, 7 + %t204 = load i64, ptr %t131 + %t205 = add i64 %t204, 1 + call void @finch_arr_reserve(ptr %t130, i64 %t205, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) + %t206 = load ptr, ptr %t130 + %t207 = getelementptr inbounds %S.lsp.VarRec, ptr %t206, i64 %t204 + store %S.lsp.VarRec %t203, ptr %t207 + store i64 %t205, ptr %t131 + br label %endif10538 +else10537: + %t208 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.7038, i64 2, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br label %logic.from10555 +logic.from10555: + br i1 %t212, label %logic.rhs10556, label %logic.end10557 +logic.rhs10556: + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t214 = load i64, ptr %t213 + %t215 = icmp sge i64 %t214, 10 + br label %logic.rend10558 +logic.rend10558: + br label %logic.end10557 +logic.end10557: + %t216 = phi i1 [ false, %logic.from10555 ], [ %t215, %logic.rend10558 ] + br i1 %t216, label %then10559, label %else10560 +then10559: + %t217 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 2 + %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %t217, i32 0, i32 1 + %t219 = load { ptr, i64, i64 }, ptr %a27 + %t220 = extractvalue { ptr, i64, i64 } %t219, 1 + %t221 = icmp uge i64 1, %t220 + br i1 %t221, label %range10562, label %inrange10563 +range10562: + call void @finch_panic_index(ptr @.str.7039, i64 307, i64 1, i64 %t220) + unreachable +inrange10563: + %t222 = extractvalue { ptr, i64, i64 } %t219, 0 + %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i64 1 + %t224 = load { ptr, i64, i64 }, ptr %t223 + store { ptr, i64, i64 } %t224, ptr %a225 + call void @finch_str_copy(ptr %a226, ptr %a225) + %t227 = load { ptr, i64, i64 }, ptr %a226 + %t228 = insertvalue %S.lsp.FnRec zeroinitializer, { ptr, i64, i64 } %t227, 0 + %t229 = load { ptr, i64, i64 }, ptr %a27 + %t230 = extractvalue { ptr, i64, i64 } %t229, 1 + %t231 = icmp uge i64 2, %t230 + br i1 %t231, label %range10564, label %inrange10565 +range10564: + call void @finch_panic_index(ptr @.str.7040, i64 307, i64 2, i64 %t230) + unreachable +inrange10565: + %t232 = extractvalue { ptr, i64, i64 } %t229, 0 + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 2 + %t234 = load { ptr, i64, i64 }, ptr %t233 + store { ptr, i64, i64 } %t234, ptr %a235 + call void @finch_str_copy(ptr %a236, ptr %a235) + %t237 = load { ptr, i64, i64 }, ptr %a236 + %t238 = insertvalue %S.lsp.FnRec %t228, { ptr, i64, i64 } %t237, 1 + %t239 = load { ptr, i64, i64 }, ptr %a27 + %t240 = extractvalue { ptr, i64, i64 } %t239, 1 + %t241 = icmp uge i64 3, %t240 + br i1 %t241, label %range10566, label %inrange10567 +range10566: + call void @finch_panic_index(ptr @.str.7041, i64 307, i64 3, i64 %t240) + unreachable +inrange10567: + %t242 = extractvalue { ptr, i64, i64 } %t239, 0 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 3 + %t244 = load { ptr, i64, i64 }, ptr %t243 + store { ptr, i64, i64 } %t244, ptr %a245 + call void @finch_str_copy(ptr %a246, ptr %a245) + %t247 = load { ptr, i64, i64 }, ptr %a246 + %t248 = insertvalue %S.lsp.FnRec %t238, { ptr, i64, i64 } %t247, 2 + %t249 = load { ptr, i64, i64 }, ptr %a27 + %t250 = extractvalue { ptr, i64, i64 } %t249, 1 + %t251 = icmp uge i64 4, %t250 + br i1 %t251, label %range10568, label %inrange10569 +range10568: + call void @finch_panic_index(ptr @.str.7042, i64 307, i64 4, i64 %t250) + unreachable +inrange10569: + %t252 = extractvalue { ptr, i64, i64 } %t249, 0 + %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i64 4 + %t254 = load { ptr, i64, i64 }, ptr %t253 + store { ptr, i64, i64 } %t254, ptr %a255 + call void @finch_str_copy(ptr %a256, ptr %a255) + %t257 = load { ptr, i64, i64 }, ptr %a256 + %t258 = insertvalue %S.lsp.FnRec %t248, { ptr, i64, i64 } %t257, 3 + %t259 = load { ptr, i64, i64 }, ptr %a27 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 5, %t260 + br i1 %t261, label %range10570, label %inrange10571 +range10570: + call void @finch_panic_index(ptr @.str.7043, i64 307, i64 5, i64 %t260) + unreachable +inrange10571: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 5 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t264) + %t266 = insertvalue %S.lsp.FnRec %t258, i64 %t265, 4 + %t267 = load { ptr, i64, i64 }, ptr %a27 + %t268 = extractvalue { ptr, i64, i64 } %t267, 1 + %t269 = icmp uge i64 6, %t268 + br i1 %t269, label %range10572, label %inrange10573 +range10572: + call void @finch_panic_index(ptr @.str.7044, i64 307, i64 6, i64 %t268) + unreachable +inrange10573: + %t270 = extractvalue { ptr, i64, i64 } %t267, 0 + %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i64 6 + %t272 = load { ptr, i64, i64 }, ptr %t271 + %t273 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t272) + %t274 = insertvalue %S.lsp.FnRec %t266, i64 %t273, 5 + %t275 = load { ptr, i64, i64 }, ptr %a27 + %t276 = extractvalue { ptr, i64, i64 } %t275, 1 + %t277 = icmp uge i64 7, %t276 + br i1 %t277, label %range10574, label %inrange10575 +range10574: + call void @finch_panic_index(ptr @.str.7045, i64 307, i64 7, i64 %t276) + unreachable +inrange10575: + %t278 = extractvalue { ptr, i64, i64 } %t275, 0 + %t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i64 7 + %t280 = load { ptr, i64, i64 }, ptr %t279 + %t281 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t280) + %t282 = insertvalue %S.lsp.FnRec %t274, i64 %t281, 6 + %t283 = load { ptr, i64, i64 }, ptr %a27 + %t284 = extractvalue { ptr, i64, i64 } %t283, 1 + %t285 = icmp uge i64 8, %t284 + br i1 %t285, label %range10576, label %inrange10577 +range10576: + call void @finch_panic_index(ptr @.str.7046, i64 307, i64 8, i64 %t284) + unreachable +inrange10577: + %t286 = extractvalue { ptr, i64, i64 } %t283, 0 + %t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t286, i64 8 + %t288 = load { ptr, i64, i64 }, ptr %t287 + %t289 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t288) + %t290 = insertvalue %S.lsp.FnRec %t282, { ptr, i64, i64 } %t289, 7 + %t291 = load { ptr, i64, i64 }, ptr %a27 + %t292 = extractvalue { ptr, i64, i64 } %t291, 1 + %t293 = icmp uge i64 9, %t292 + br i1 %t293, label %range10578, label %inrange10579 +range10578: + call void @finch_panic_index(ptr @.str.7047, i64 307, i64 9, i64 %t292) + unreachable +inrange10579: + %t294 = extractvalue { ptr, i64, i64 } %t291, 0 + %t295 = getelementptr inbounds { ptr, i64, i64 }, ptr %t294, i64 9 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.7049, i64 1, i64 0 }, ptr %a299 + call void @finch_str_split(ptr %a300, ptr %a297, ptr %a299) + %t301 = load { ptr, i64, i64 }, ptr %a300 + %t302 = insertvalue %S.lsp.FnRec %t290, { ptr, i64, i64 } %t301, 8 + %t303 = load i64, ptr %t218 + %t304 = add i64 %t303, 1 + call void @finch_arr_reserve(ptr %t217, i64 %t304, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) + %t305 = load ptr, ptr %t217 + %t306 = getelementptr inbounds %S.lsp.FnRec, ptr %t305, i64 %t303 + store %S.lsp.FnRec %t302, ptr %t306 + store i64 %t304, ptr %t218 + br label %endif10561 +else10560: + %t307 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t307, ptr %a308 + store { ptr, i64, i64 } { ptr @.str.7050, i64 2, i64 0 }, ptr %a309 + %t310 = call i32 @finch_str_eq(ptr %a308, ptr %a309) + %t311 = icmp ne i32 %t310, 0 + br label %logic.from10580 +logic.from10580: + br i1 %t311, label %logic.rhs10581, label %logic.end10582 +logic.rhs10581: + %t312 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t313 = load i64, ptr %t312 + %t314 = icmp sge i64 %t313, 6 + br label %logic.rend10583 +logic.rend10583: + br label %logic.end10582 +logic.end10582: + %t315 = phi i1 [ false, %logic.from10580 ], [ %t314, %logic.rend10583 ] + br i1 %t315, label %then10584, label %else10585 +then10584: + %t316 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i32 0, i32 1 + %t318 = load { ptr, i64, i64 }, ptr %a27 + %t319 = extractvalue { ptr, i64, i64 } %t318, 1 + %t320 = icmp uge i64 1, %t319 + br i1 %t320, label %range10587, label %inrange10588 +range10587: + call void @finch_panic_index(ptr @.str.7051, i64 309, i64 1, i64 %t319) + unreachable +inrange10588: + %t321 = extractvalue { ptr, i64, i64 } %t318, 0 + %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i64 1 + %t323 = load { ptr, i64, i64 }, ptr %t322 + store { ptr, i64, i64 } %t323, ptr %a324 + call void @finch_str_copy(ptr %a325, ptr %a324) + %t326 = load { ptr, i64, i64 }, ptr %a325 + %t327 = insertvalue %S.lsp.StructRec zeroinitializer, { ptr, i64, i64 } %t326, 0 + %t328 = load { ptr, i64, i64 }, ptr %a27 + %t329 = extractvalue { ptr, i64, i64 } %t328, 1 + %t330 = icmp uge i64 2, %t329 + br i1 %t330, label %range10589, label %inrange10590 +range10589: + call void @finch_panic_index(ptr @.str.7052, i64 309, i64 2, i64 %t329) + unreachable +inrange10590: + %t331 = extractvalue { ptr, i64, i64 } %t328, 0 + %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i64 2 + %t333 = load { ptr, i64, i64 }, ptr %t332 + store { ptr, i64, i64 } %t333, ptr %a334 + call void @finch_str_copy(ptr %a335, ptr %a334) + %t336 = load { ptr, i64, i64 }, ptr %a335 + %t337 = insertvalue %S.lsp.StructRec %t327, { ptr, i64, i64 } %t336, 1 + %t338 = load { ptr, i64, i64 }, ptr %a27 + %t339 = extractvalue { ptr, i64, i64 } %t338, 1 + %t340 = icmp uge i64 3, %t339 + br i1 %t340, label %range10591, label %inrange10592 +range10591: + call void @finch_panic_index(ptr @.str.7053, i64 309, i64 3, i64 %t339) + unreachable +inrange10592: + %t341 = extractvalue { ptr, i64, i64 } %t338, 0 + %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 3 + %t343 = load { ptr, i64, i64 }, ptr %t342 + store { ptr, i64, i64 } %t343, ptr %a344 + call void @finch_str_copy(ptr %a345, ptr %a344) + %t346 = load { ptr, i64, i64 }, ptr %a345 + %t347 = insertvalue %S.lsp.StructRec %t337, { ptr, i64, i64 } %t346, 2 + %t348 = load { ptr, i64, i64 }, ptr %a27 + %t349 = extractvalue { ptr, i64, i64 } %t348, 1 + %t350 = icmp uge i64 4, %t349 + br i1 %t350, label %range10593, label %inrange10594 +range10593: + call void @finch_panic_index(ptr @.str.7054, i64 309, i64 4, i64 %t349) + unreachable +inrange10594: + %t351 = extractvalue { ptr, i64, i64 } %t348, 0 + %t352 = getelementptr inbounds { ptr, i64, i64 }, ptr %t351, i64 4 + %t353 = load { ptr, i64, i64 }, ptr %t352 + %t354 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t353) + %t355 = insertvalue %S.lsp.StructRec %t347, i64 %t354, 3 + %t356 = load { ptr, i64, i64 }, ptr %a27 + %t357 = extractvalue { ptr, i64, i64 } %t356, 1 + %t358 = icmp uge i64 5, %t357 + br i1 %t358, label %range10595, label %inrange10596 +range10595: + call void @finch_panic_index(ptr @.str.7055, i64 309, i64 5, i64 %t357) + unreachable +inrange10596: + %t359 = extractvalue { ptr, i64, i64 } %t356, 0 + %t360 = getelementptr inbounds { ptr, i64, i64 }, ptr %t359, i64 5 + %t361 = load { ptr, i64, i64 }, ptr %t360 + %t362 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t361) + %t363 = insertvalue %S.lsp.StructRec %t355, i64 %t362, 4 + %t364 = load i64, ptr %t317 + %t365 = add i64 %t364, 1 + call void @finch_arr_reserve(ptr %t316, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) + %t366 = load ptr, ptr %t316 + %t367 = getelementptr inbounds %S.lsp.StructRec, ptr %t366, i64 %t364 + store %S.lsp.StructRec %t363, ptr %t367 + store i64 %t365, ptr %t317 + br label %endif10586 +else10585: + %t368 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t368, ptr %a369 + store { ptr, i64, i64 } { ptr @.str.7056, i64 3, i64 0 }, ptr %a370 + %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) + %t372 = icmp ne i32 %t371, 0 + br label %logic.from10597 +logic.from10597: + br i1 %t372, label %logic.rhs10598, label %logic.end10599 +logic.rhs10598: + %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t374 = load i64, ptr %t373 + %t375 = icmp sge i64 %t374, 5 + br label %logic.rend10600 +logic.rend10600: + br label %logic.end10599 +logic.end10599: + %t376 = phi i1 [ false, %logic.from10597 ], [ %t375, %logic.rend10600 ] + br label %logic.from10601 +logic.from10601: + br i1 %t376, label %logic.rhs10602, label %logic.end10603 +logic.rhs10602: + %t377 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %t377, i32 0, i32 1 + %t379 = load i64, ptr %t378 + %t380 = icmp sgt i64 %t379, 0 + br label %logic.rend10604 +logic.rend10604: + br label %logic.end10603 +logic.end10603: + %t381 = phi i1 [ false, %logic.from10601 ], [ %t380, %logic.rend10604 ] + br i1 %t381, label %then10605, label %else10606 +then10605: + %t382 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %t382, i32 0, i32 1 + %t384 = load i64, ptr %t383 + %t385 = sub i64 %t384, 1 + store i64 %t385, ptr %a386 + %t387 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t388 = load i64, ptr %a386 + %t389 = load { ptr, i64, i64 }, ptr %t387 + %t390 = extractvalue { ptr, i64, i64 } %t389, 1 + %t391 = icmp uge i64 %t388, %t390 + br i1 %t391, label %range10608, label %inrange10609 +range10608: + call void @finch_panic_index(ptr @.str.7057, i64 312, i64 %t388, i64 %t390) + unreachable +inrange10609: + %t392 = extractvalue { ptr, i64, i64 } %t389, 0 + %t393 = getelementptr inbounds %S.lsp.StructRec, ptr %t392, i64 %t388 + %t394 = getelementptr inbounds %S.lsp.StructRec, ptr %t393, i32 0, i32 5 + %t395 = getelementptr inbounds { ptr, i64, i64 }, ptr %t394, i32 0, i32 1 + %t396 = load { ptr, i64, i64 }, ptr %a27 + %t397 = extractvalue { ptr, i64, i64 } %t396, 1 + %t398 = icmp uge i64 3, %t397 + br i1 %t398, label %range10610, label %inrange10611 +range10610: + call void @finch_panic_index(ptr @.str.7058, i64 312, i64 3, i64 %t397) + unreachable +inrange10611: + %t399 = extractvalue { ptr, i64, i64 } %t396, 0 + %t400 = getelementptr inbounds { ptr, i64, i64 }, ptr %t399, i64 3 + %t401 = load { ptr, i64, i64 }, ptr %t400 + store { ptr, i64, i64 } %t401, ptr %a402 + call void @finch_str_copy(ptr %a403, ptr %a402) + %t404 = load { ptr, i64, i64 }, ptr %a403 + %t405 = load i64, ptr %t395 + %t406 = add i64 %t405, 1 + call void @finch_arr_reserve(ptr %t394, i64 %t406, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t407 = load ptr, ptr %t394 + %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %t407, i64 %t405 + store { ptr, i64, i64 } %t404, ptr %t408 + store i64 %t406, ptr %t395 + %t409 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t410 = load i64, ptr %a386 + %t411 = load { ptr, i64, i64 }, ptr %t409 + %t412 = extractvalue { ptr, i64, i64 } %t411, 1 + %t413 = icmp uge i64 %t410, %t412 + br i1 %t413, label %range10612, label %inrange10613 +range10612: + call void @finch_panic_index(ptr @.str.7059, i64 313, i64 %t410, i64 %t412) + unreachable +inrange10613: + %t414 = extractvalue { ptr, i64, i64 } %t411, 0 + %t415 = getelementptr inbounds %S.lsp.StructRec, ptr %t414, i64 %t410 + %t416 = getelementptr inbounds %S.lsp.StructRec, ptr %t415, i32 0, i32 6 + %t417 = getelementptr inbounds { ptr, i64, i64 }, ptr %t416, i32 0, i32 1 + %t418 = load { ptr, i64, i64 }, ptr %a27 + %t419 = extractvalue { ptr, i64, i64 } %t418, 1 + %t420 = icmp uge i64 4, %t419 + br i1 %t420, label %range10614, label %inrange10615 +range10614: + call void @finch_panic_index(ptr @.str.7060, i64 313, i64 4, i64 %t419) + unreachable +inrange10615: + %t421 = extractvalue { ptr, i64, i64 } %t418, 0 + %t422 = getelementptr inbounds { ptr, i64, i64 }, ptr %t421, i64 4 + %t423 = load { ptr, i64, i64 }, ptr %t422 + store { ptr, i64, i64 } %t423, ptr %a424 + call void @finch_str_copy(ptr %a425, ptr %a424) + %t426 = load { ptr, i64, i64 }, ptr %a425 + %t427 = load i64, ptr %t417 + %t428 = add i64 %t427, 1 + call void @finch_arr_reserve(ptr %t416, i64 %t428, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t429 = load ptr, ptr %t416 + %t430 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i64 %t427 + store { ptr, i64, i64 } %t426, ptr %t430 + store i64 %t428, ptr %t417 + br label %endif10607 +else10606: + %t431 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t431, ptr %a432 + store { ptr, i64, i64 } { ptr @.str.7061, i64 2, i64 0 }, ptr %a433 + %t434 = call i32 @finch_str_eq(ptr %a432, ptr %a433) + %t435 = icmp ne i32 %t434, 0 + br label %logic.from10616 +logic.from10616: + br i1 %t435, label %logic.rhs10617, label %logic.end10618 +logic.rhs10617: + %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t437 = load i64, ptr %t436 + %t438 = icmp sge i64 %t437, 7 + br label %logic.rend10619 +logic.rend10619: + br label %logic.end10618 +logic.end10618: + %t439 = phi i1 [ false, %logic.from10616 ], [ %t438, %logic.rend10619 ] + br i1 %t439, label %then10620, label %else10621 +then10620: + %t440 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 4 + %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t440, i32 0, i32 1 + %t442 = load { ptr, i64, i64 }, ptr %a27 + %t443 = extractvalue { ptr, i64, i64 } %t442, 1 + %t444 = icmp uge i64 1, %t443 + br i1 %t444, label %range10623, label %inrange10624 +range10623: + call void @finch_panic_index(ptr @.str.7062, i64 315, i64 1, i64 %t443) + unreachable +inrange10624: + %t445 = extractvalue { ptr, i64, i64 } %t442, 0 + %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i64 1 + %t447 = load { ptr, i64, i64 }, ptr %t446 + store { ptr, i64, i64 } %t447, ptr %a448 + call void @finch_str_copy(ptr %a449, ptr %a448) + %t450 = load { ptr, i64, i64 }, ptr %a449 + %t451 = insertvalue %S.lsp.EnumRec zeroinitializer, { ptr, i64, i64 } %t450, 0 + %t452 = load { ptr, i64, i64 }, ptr %a27 + %t453 = extractvalue { ptr, i64, i64 } %t452, 1 + %t454 = icmp uge i64 2, %t453 + br i1 %t454, label %range10625, label %inrange10626 +range10625: + call void @finch_panic_index(ptr @.str.7063, i64 315, i64 2, i64 %t453) + unreachable +inrange10626: + %t455 = extractvalue { ptr, i64, i64 } %t452, 0 + %t456 = getelementptr inbounds { ptr, i64, i64 }, ptr %t455, i64 2 + %t457 = load { ptr, i64, i64 }, ptr %t456 + store { ptr, i64, i64 } %t457, ptr %a458 + call void @finch_str_copy(ptr %a459, ptr %a458) + %t460 = load { ptr, i64, i64 }, ptr %a459 + %t461 = insertvalue %S.lsp.EnumRec %t451, { ptr, i64, i64 } %t460, 1 + %t462 = load { ptr, i64, i64 }, ptr %a27 + %t463 = extractvalue { ptr, i64, i64 } %t462, 1 + %t464 = icmp uge i64 3, %t463 + br i1 %t464, label %range10627, label %inrange10628 +range10627: + call void @finch_panic_index(ptr @.str.7064, i64 315, i64 3, i64 %t463) + unreachable +inrange10628: + %t465 = extractvalue { ptr, i64, i64 } %t462, 0 + %t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 3 + %t467 = load { ptr, i64, i64 }, ptr %t466 + store { ptr, i64, i64 } %t467, ptr %a468 + call void @finch_str_copy(ptr %a469, ptr %a468) + %t470 = load { ptr, i64, i64 }, ptr %a469 + %t471 = insertvalue %S.lsp.EnumRec %t461, { ptr, i64, i64 } %t470, 2 + %t472 = load { ptr, i64, i64 }, ptr %a27 + %t473 = extractvalue { ptr, i64, i64 } %t472, 1 + %t474 = icmp uge i64 4, %t473 + br i1 %t474, label %range10629, label %inrange10630 +range10629: + call void @finch_panic_index(ptr @.str.7065, i64 315, i64 4, i64 %t473) + unreachable +inrange10630: + %t475 = extractvalue { ptr, i64, i64 } %t472, 0 + %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 4 + %t477 = load { ptr, i64, i64 }, ptr %t476 + %t478 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t477) + %t479 = insertvalue %S.lsp.EnumRec %t471, i64 %t478, 3 + %t480 = load { ptr, i64, i64 }, ptr %a27 + %t481 = extractvalue { ptr, i64, i64 } %t480, 1 + %t482 = icmp uge i64 5, %t481 + br i1 %t482, label %range10631, label %inrange10632 +range10631: + call void @finch_panic_index(ptr @.str.7066, i64 315, i64 5, i64 %t481) + unreachable +inrange10632: + %t483 = extractvalue { ptr, i64, i64 } %t480, 0 + %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 5 + %t485 = load { ptr, i64, i64 }, ptr %t484 + %t486 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t485) + %t487 = insertvalue %S.lsp.EnumRec %t479, i64 %t486, 4 + %t488 = load { ptr, i64, i64 }, ptr %a27 + %t489 = extractvalue { ptr, i64, i64 } %t488, 1 + %t490 = icmp uge i64 6, %t489 + br i1 %t490, label %range10633, label %inrange10634 +range10633: + call void @finch_panic_index(ptr @.str.7067, i64 315, i64 6, i64 %t489) + unreachable +inrange10634: + %t491 = extractvalue { ptr, i64, i64 } %t488, 0 + %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 6 + %t493 = load { ptr, i64, i64 }, ptr %t492 + store { ptr, i64, i64 } %t493, ptr %a494 + store { ptr, i64, i64 } { ptr @.str.7069, i64 1, i64 0 }, ptr %a496 + call void @finch_str_split(ptr %a497, ptr %a494, ptr %a496) + %t498 = load { ptr, i64, i64 }, ptr %a497 + %t499 = insertvalue %S.lsp.EnumRec %t487, { ptr, i64, i64 } %t498, 5 + %t500 = load i64, ptr %t441 + %t501 = add i64 %t500, 1 + call void @finch_arr_reserve(ptr %t440, i64 %t501, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) + %t502 = load ptr, ptr %t440 + %t503 = getelementptr inbounds %S.lsp.EnumRec, ptr %t502, i64 %t500 + store %S.lsp.EnumRec %t499, ptr %t503 + store i64 %t501, ptr %t441 + br label %endif10622 +else10621: + %t504 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t504, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.7070, i64 2, i64 0 }, ptr %a506 + %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) + %t508 = icmp ne i32 %t507, 0 + br label %logic.from10635 +logic.from10635: + br i1 %t508, label %logic.rhs10636, label %logic.end10637 +logic.rhs10636: + %t509 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t510 = load i64, ptr %t509 + %t511 = icmp sge i64 %t510, 2 + br label %logic.rend10638 +logic.rend10638: + br label %logic.end10637 +logic.end10637: + %t512 = phi i1 [ false, %logic.from10635 ], [ %t511, %logic.rend10638 ] + br i1 %t512, label %then10639, label %endif10641 +then10639: + %t513 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 5 + %t514 = getelementptr inbounds { ptr, i64, i64 }, ptr %t513, i32 0, i32 1 + %t515 = load { ptr, i64, i64 }, ptr %a27 + %t516 = extractvalue { ptr, i64, i64 } %t515, 1 + %t517 = icmp uge i64 1, %t516 + br i1 %t517, label %range10642, label %inrange10643 +range10642: + call void @finch_panic_index(ptr @.str.7071, i64 317, i64 1, i64 %t516) + unreachable +inrange10643: + %t518 = extractvalue { ptr, i64, i64 } %t515, 0 + %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 1 + %t520 = load { ptr, i64, i64 }, ptr %t519 + store { ptr, i64, i64 } %t520, ptr %a521 + call void @finch_str_copy(ptr %a522, ptr %a521) + %t523 = load { ptr, i64, i64 }, ptr %a522 + %t524 = load i64, ptr %t514 + %t525 = add i64 %t524, 1 + call void @finch_arr_reserve(ptr %t513, i64 %t525, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t526 = load ptr, ptr %t513 + %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t524 + store { ptr, i64, i64 } %t523, ptr %t527 + store i64 %t525, ptr %t514 + br label %endif10641 +endif10641: + br label %endif10622 +endif10622: + br label %endif10607 +endif10607: + br label %endif10586 +endif10586: + br label %endif10561 +endif10561: + br label %endif10538 +endif10538: + br label %endif10515 +endif10515: + call void @finch_str_drop(ptr %a37) + call void @finch.drop.arr_str(ptr %a27) + br label %endif10506 +else10505: + %t528 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t529 = getelementptr inbounds %S.lsp.Diag, ptr %t528, i32 0, i32 0 + %t530 = load i1, ptr %t529 + %t531 = xor i1 %t530, true + br i1 %t531, label %then10644, label %endif10646 +then10644: + %t532 = load { ptr, i64, i64 }, ptr %a18 + %t533 = call %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %t532) + %t534 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t535 = load %S.lsp.Diag, ptr %t534 + store %S.lsp.Diag %t533, ptr %t534 + store %S.lsp.Diag %t535, ptr %a536 + call void @finch.drop.S_lsp_Diag(ptr %a536) + br label %endif10646 +endif10646: + br label %endif10506 +endif10506: + br label %each.step10502 +each.step10502: + %t537 = load i64, ptr %a10 + %t538 = add i64 %t537, 1 + store i64 %t538, ptr %a10 + br label %each.cond10500 +each.end10503: + call void @finch.drop.arr_str(ptr %a9) + %t539 = load %S.lsp.Analysis, ptr %a2 + ret %S.lsp.Analysis %t539 +} + +define internal void @finch.copy.S_lsp_Ref(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.Ref, ptr %src + store %S.lsp.Ref %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 4 + %t5 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 7 + %t7 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal void @finch.copy.arr_S_lsp_Ref(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10667 +n.cond10667: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10668, label %n.end10669 +n.body10668: + %t8 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.Ref, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_Ref(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10667 +n.end10669: + ret void +} + +define internal void @finch.copy.S_lsp_VarRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.VarRec, ptr %src + store %S.lsp.VarRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 5 + %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 5 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.arr_S_lsp_VarRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10670 +n.cond10670: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10671, label %n.end10672 +n.body10671: + %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_VarRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10670 +n.end10672: + ret void +} + +define internal void @finch.copy.S_lsp_FnRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.FnRec, ptr %src + store %S.lsp.FnRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 7 + %t11 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 8 + %t13 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 8 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + ret void +} + +define internal void @finch.copy.arr_S_lsp_FnRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10673 +n.cond10673: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10674, label %n.end10675 +n.body10674: + %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_FnRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10673 +n.end10675: + ret void +} + +define internal void @finch.copy.S_lsp_StructRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.StructRec, ptr %src + store %S.lsp.StructRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 5 + %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 6 + %t11 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + ret void +} + +define internal void @finch.copy.arr_S_lsp_StructRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10676 +n.cond10676: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10677, label %n.end10678 +n.body10677: + %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_StructRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10676 +n.end10678: + ret void +} + +define internal void @finch.copy.S_lsp_EnumRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.EnumRec, ptr %src + store %S.lsp.EnumRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 5 + %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.arr_S_lsp_EnumRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10679 +n.cond10679: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10680, label %n.end10681 +n.body10680: + %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_EnumRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10679 +n.end10681: + ret void +} + +define internal void @finch.copy.S_lsp_Diag(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.Diag, ptr %src + store %S.lsp.Diag %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 1 + %t3 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 4 + %t5 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.copy.S_lsp_Analysis(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.Analysis, ptr %src + store %S.lsp.Analysis %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 0 + call void @finch.copy.arr_S_lsp_Ref(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_lsp_VarRec(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_S_lsp_FnRec(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_S_lsp_StructRec(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_S_lsp_EnumRec(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 6 + %t15 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 6 + call void @finch.copy.S_lsp_Diag(ptr %t14, ptr %t15) + ret void +} + +define internal void @finch.drop.S_lsp_Ref(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal void @finch.drop.arr_S_lsp_Ref(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10682 +n.cond10682: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10683, label %n.end10684 +n.body10683: + %t7 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_Ref(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10682 +n.end10684: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_VarRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 5 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_S_lsp_VarRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10685 +n.cond10685: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10686, label %n.end10687 +n.body10686: + %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_VarRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10685 +n.end10687: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_FnRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 8 + call void @finch.drop.arr_str(ptr %t6) + ret void +} + +define internal void @finch.drop.arr_S_lsp_FnRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10688 +n.cond10688: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10689, label %n.end10690 +n.body10689: + %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_FnRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10688 +n.end10690: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_StructRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t5) + ret void +} + +define internal void @finch.drop.arr_S_lsp_StructRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10691 +n.cond10691: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10692, label %n.end10693 +n.body10692: + %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_StructRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10691 +n.end10693: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_EnumRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_S_lsp_EnumRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10694 +n.cond10694: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10695, label %n.end10696 +n.body10695: + %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_EnumRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10694 +n.end10696: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_Analysis(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_lsp_Ref(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_lsp_VarRec(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_S_lsp_FnRec(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_S_lsp_StructRec(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_S_lsp_EnumRec(ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 6 + call void @finch.drop.S_lsp_Diag(ptr %t7) + ret void +} + +define internal void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca i64, align 16 + %a14 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca %S.lsp.Analysis, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca i32, align 16 + %a188 = alloca %S.lsp.Analysis, align 16 + %a189 = alloca %S.lsp.Analysis, align 16 + %a192 = alloca %S.lsp.Analysis, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca %S.lsp.Analysis, align 16 + %a211 = alloca %S.lsp.Analysis, align 16 + %a213 = alloca %S.lsp.Analysis, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca i32, align 16 + %a272 = alloca %S.lsp.Analysis, align 16 + %a273 = alloca %S.lsp.Analysis, align 16 + %a276 = alloca %S.lsp.Analysis, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 + %t3 = load { ptr, i64, i64 }, ptr %t2 + call void @finch.host.makeDirs({ ptr, i64, i64 } %t3) + store { ptr, i64, i64 } { ptr @.str.7072, i64 0, i64 0 }, ptr %a4 + store i64 0, ptr %a5 + %t6 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + %t8 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + call void @finch_arr_make(ptr %a7, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a7 + store i64 0, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 2 + %t13 = load i64, ptr %t12 + store i64 0, ptr %a14 + br label %n.cond10647 +n.cond10647: + %t15 = load i64, ptr %a14 + %t16 = icmp slt i64 %t15, %t13 + br i1 %t16, label %n.body10648, label %n.end10649 +n.body10648: + %t17 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 + %t18 = load ptr, ptr %t17 + %t19 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t18, i64 %t15 + %t20 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 0 + %t21 = load i64, ptr %t20 + %t22 = icmp ne i64 %t21, 0 + br i1 %t22, label %entry.live10650, label %entry.next10651 +entry.live10650: + %t23 = load i64, ptr %a11 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t23 + %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 1 + call void @finch_str_copy(ptr %t24, ptr %t25) + %t26 = add i64 %t23, 1 + store i64 %t26, ptr %a11 + br label %entry.next10651 +entry.next10651: + %t27 = load i64, ptr %a14 + %t28 = add i64 %t27, 1 + store i64 %t28, ptr %a14 + br label %n.cond10647 +n.end10649: + %t29 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t29, ptr %a30 + store i64 0, ptr %a31 + br label %each.cond10652 +each.cond10652: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = load i64, ptr %a31 + %t35 = icmp slt i64 %t34, %t33 + br i1 %t35, label %each.body10653, label %each.end10655 +each.body10653: + %t36 = load ptr, ptr %a30 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i64 %t34 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.7073, i64 4, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a42 + %t46 = load i64, ptr %a5 + call void @finch_str_from_int(ptr %a47, i64 %t46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t45, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.7074, i64 4, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t59, ptr %a60 + %t61 = load { ptr, i64, i64 }, ptr %a60 + %t62 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t63 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t63, ptr %a64 + %t65 = call i64 @finch_map_find(ptr %t62, ptr %a64, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t66 = icmp slt i64 %t65, 0 + br i1 %t66, label %map.missing10656, label %map.found10657 +map.missing10656: + store { ptr, i64, i64 } zeroinitializer, ptr %a67 + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_buf_str(ptr %a67, ptr %a68, i32 1) + call void @finch_map_missing(ptr @.str.7075, i64 333, ptr %a67) + unreachable +map.found10657: + %t69 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t62, i32 0, i32 0 + %t70 = load ptr, ptr %t69 + %t71 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t70, i64 %t65 + %t72 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t71, i32 0, i32 2 + %t73 = load { ptr, i64, i64 }, ptr %t72 + store { ptr, i64, i64 } %t61, ptr %a74 + store { ptr, i64, i64 } %t73, ptr %a75 + %t76 = call i32 @finch_write_file(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + %t78 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t78, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.7076, i64 11, i64 0 }, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a79 + %t83 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.7077, i64 1, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a84 + %t88 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t87, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t87, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + %t94 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t93) + store { ptr, i64, i64 } %t93, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t82, ptr %a97 + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t82, ptr %a99 + call void @finch_str_drop(ptr %a99) + store { ptr, i64, i64 } %t94, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a96 + %t102 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t101, ptr %a4 + store { ptr, i64, i64 } %t102, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load i64, ptr %a5 + %t105 = add i64 %t104, 1 + store i64 %t105, ptr %a5 + call void @finch_str_drop(ptr %a60) + br label %each.step10654 +each.step10654: + %t106 = load i64, ptr %a31 + %t107 = add i64 %t106, 1 + store i64 %t107, ptr %a31 + br label %each.cond10652 +each.end10655: + call void @finch.drop.arr_str(ptr %a30) + %t108 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 + %t109 = load { ptr, i64, i64 }, ptr %t108 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.7078, i64 8, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t113, ptr %a114 + %t115 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 0 + %t116 = load { ptr, i64, i64 }, ptr %t115 + %t117 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t117, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.7079, i64 7, i64 0 }, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + %t123 = load { ptr, i64, i64 }, ptr %a1 + %t124 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t123) + store { ptr, i64, i64 } %t122, ptr %a126 + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t122, ptr %a128 + call void @finch_str_drop(ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a125 + %t131 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t130, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.7080, i64 3, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = load { ptr, i64, i64 }, ptr %a114 + %t143 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t142) + store { ptr, i64, i64 } %t141, ptr %a145 + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + store { ptr, i64, i64 } %t141, ptr %a147 + call void @finch_str_drop(ptr %a147) + store { ptr, i64, i64 } %t143, ptr %a148 + call void @finch_str_drop(ptr %a148) + %t149 = load { ptr, i64, i64 }, ptr %a144 + store { ptr, i64, i64 } %t149, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.7081, i64 5, i64 0 }, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + store { ptr, i64, i64 } %t149, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a150 + %t155 = call i64 @finch.host.run({ ptr, i64, i64 } %t154) + store { ptr, i64, i64 } %t154, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a114 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } zeroinitializer, ptr %a159 + store { ptr, i64, i64 } zeroinitializer, ptr %a160 + %t161 = call i32 @finch_try_read_file(ptr %a159, ptr %a158, ptr %a160) + %t162 = icmp eq i32 %t161, 0 + %t163 = load { ptr, i64, i64 }, ptr %a160 + %t164 = load { ptr, i64, i64 }, ptr %a159 + br i1 %t162, label %or.failed10658, label %or.ok10659 +or.failed10658: + store { ptr, i64, i64 } %t163, ptr %a165 + call void @finch_str_drop(ptr %a165) + br label %or.bend10660 +or.bend10660: + br label %or.end10661 +or.ok10659: + br label %or.end10661 +or.end10661: + %t166 = phi { ptr, i64, i64 } [ { ptr @.str.7082, i64 0, i64 0 }, %or.bend10660 ], [ %t164, %or.ok10659 ] + %t167 = call %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %t166) + store { ptr, i64, i64 } %t166, ptr %a168 + call void @finch_str_drop(ptr %a168) + store %S.lsp.Analysis %t167, ptr %a169 + %t170 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 6 + %t171 = getelementptr inbounds %S.lsp.Diag, ptr %t170, i32 0, i32 0 + %t172 = load i1, ptr %t171 + %t173 = xor i1 %t172, true + br i1 %t173, label %then10662, label %else10663 +then10662: + %t174 = load %S.lsp.Analysis, ptr %a169 + %t175 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t176 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t176, ptr %a177 + store i32 0, ptr %a178 + %t179 = call i64 @finch_map_slot(ptr %t175, ptr %a177, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a178) + %t180 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t175, i32 0, i32 0 + %t181 = load ptr, ptr %t180 + %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t181, i64 %t179 + %t183 = load i32, ptr %a178 + %t184 = icmp ne i32 %t183, 0 + br i1 %t184, label %map.new10665, label %map.have10666 +map.new10665: + %t185 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 1 + call void @finch_str_copy(ptr %t185, ptr %a177) + %t186 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 + store %S.lsp.Analysis zeroinitializer, ptr %t186 + br label %map.have10666 +map.have10666: + %t187 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 + store %S.lsp.Analysis %t174, ptr %a188 + call void @finch.copy.S_lsp_Analysis(ptr %a189, ptr %a188) + %t190 = load %S.lsp.Analysis, ptr %a189 + %t191 = load %S.lsp.Analysis, ptr %t187 + store %S.lsp.Analysis %t190, ptr %t187 + store %S.lsp.Analysis %t191, ptr %a192 + call void @finch.drop.S_lsp_Analysis(ptr %a192) + br label %endif10664 +else10663: + %t193 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t194 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t194, ptr %a195 + %t196 = call i64 @finch_map_find(ptr %t193, ptr %a195, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t197 = icmp sge i64 %t196, 0 + br i1 %t197, label %then10697, label %endif10699 +then10697: + %t198 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t199 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t199, ptr %a200 + %t201 = call i64 @finch_map_find(ptr %t198, ptr %a200, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t202 = icmp slt i64 %t201, 0 + br i1 %t202, label %map.missing10700, label %map.found10701 +map.missing10700: + store { ptr, i64, i64 } zeroinitializer, ptr %a203 + store { ptr, i64, i64 } %t199, ptr %a204 + call void @finch_buf_str(ptr %a203, ptr %a204, i32 1) + call void @finch_map_missing(ptr @.str.7083, i64 344, ptr %a203) + unreachable +map.found10701: + %t205 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t198, i32 0, i32 0 + %t206 = load ptr, ptr %t205 + %t207 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t206, i64 %t201 + %t208 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t207, i32 0, i32 2 + %t209 = load %S.lsp.Analysis, ptr %t208 + store %S.lsp.Analysis %t209, ptr %a210 + call void @finch.copy.S_lsp_Analysis(ptr %a211, ptr %a210) + %t212 = load %S.lsp.Analysis, ptr %a211 + store %S.lsp.Analysis %t212, ptr %a213 + %t214 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 2 + %t215 = load { ptr, i64, i64 }, ptr %t214 + %t216 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 2 + store { ptr, i64, i64 } %t215, ptr %a217 + call void @finch.copy.arr_S_lsp_FnRec(ptr %a218, ptr %a217) + %t219 = load { ptr, i64, i64 }, ptr %a218 + %t220 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t219, ptr %t216 + store { ptr, i64, i64 } %t220, ptr %a221 + call void @finch.drop.arr_S_lsp_FnRec(ptr %a221) + %t222 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 3 + %t223 = load { ptr, i64, i64 }, ptr %t222 + %t224 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 3 + store { ptr, i64, i64 } %t223, ptr %a225 + call void @finch.copy.arr_S_lsp_StructRec(ptr %a226, ptr %a225) + %t227 = load { ptr, i64, i64 }, ptr %a226 + %t228 = load { ptr, i64, i64 }, ptr %t224 + store { ptr, i64, i64 } %t227, ptr %t224 + store { ptr, i64, i64 } %t228, ptr %a229 + call void @finch.drop.arr_S_lsp_StructRec(ptr %a229) + %t230 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 4 + %t231 = load { ptr, i64, i64 }, ptr %t230 + %t232 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 4 + store { ptr, i64, i64 } %t231, ptr %a233 + call void @finch.copy.arr_S_lsp_EnumRec(ptr %a234, ptr %a233) + %t235 = load { ptr, i64, i64 }, ptr %a234 + %t236 = load { ptr, i64, i64 }, ptr %t232 + store { ptr, i64, i64 } %t235, ptr %t232 + store { ptr, i64, i64 } %t236, ptr %a237 + call void @finch.drop.arr_S_lsp_EnumRec(ptr %a237) + %t238 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 1 + %t239 = load { ptr, i64, i64 }, ptr %t238 + %t240 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 1 + store { ptr, i64, i64 } %t239, ptr %a241 + call void @finch.copy.arr_S_lsp_VarRec(ptr %a242, ptr %a241) + %t243 = load { ptr, i64, i64 }, ptr %a242 + %t244 = load { ptr, i64, i64 }, ptr %t240 + store { ptr, i64, i64 } %t243, ptr %t240 + store { ptr, i64, i64 } %t244, ptr %a245 + call void @finch.drop.arr_S_lsp_VarRec(ptr %a245) + %t246 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 + %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i32 0, i32 1 + %t248 = load i64, ptr %t247 + %t249 = icmp eq i64 %t248, 0 + br i1 %t249, label %then10702, label %endif10704 +then10702: + %t250 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 5 + %t251 = load { ptr, i64, i64 }, ptr %t250 + %t252 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 + store { ptr, i64, i64 } %t251, ptr %a253 + call void @finch.copy.arr_str(ptr %a254, ptr %a253) + %t255 = load { ptr, i64, i64 }, ptr %a254 + %t256 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t255, ptr %t252 + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch.drop.arr_str(ptr %a257) + br label %endif10704 +endif10704: + call void @finch.drop.S_lsp_Analysis(ptr %a213) + br label %endif10699 +endif10699: + br label %endif10664 +endif10664: + %t258 = load %S.lsp.Analysis, ptr %a169 + %t259 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t260 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t260, ptr %a261 + store i32 0, ptr %a262 + %t263 = call i64 @finch_map_slot(ptr %t259, ptr %a261, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a262) + %t264 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t259, i32 0, i32 0 + %t265 = load ptr, ptr %t264 + %t266 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t265, i64 %t263 + %t267 = load i32, ptr %a262 + %t268 = icmp ne i32 %t267, 0 + br i1 %t268, label %map.new10705, label %map.have10706 +map.new10705: + %t269 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 1 + call void @finch_str_copy(ptr %t269, ptr %a261) + %t270 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 + store %S.lsp.Analysis zeroinitializer, ptr %t270 + br label %map.have10706 +map.have10706: + %t271 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 + store %S.lsp.Analysis %t258, ptr %a272 + call void @finch.copy.S_lsp_Analysis(ptr %a273, ptr %a272) + %t274 = load %S.lsp.Analysis, ptr %a273 + %t275 = load %S.lsp.Analysis, ptr %t271 + store %S.lsp.Analysis %t274, ptr %t271 + store %S.lsp.Analysis %t275, ptr %a276 + call void @finch.drop.S_lsp_Analysis(ptr %a276) + %t277 = load { ptr, i64, i64 }, ptr %a1 + %t278 = load %S.lsp.Analysis, ptr %a169 + call void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %t277, %S.lsp.Analysis %t278) + call void @finch.drop.S_lsp_Analysis(ptr %a169) + call void @finch_str_drop(ptr %a114) + call void @finch_str_drop(ptr %a4) + ret void +} + +define internal void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %p0, %S.lsp.Analysis %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.lsp.Analysis, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca i64, align 16 + %a29 = alloca i64, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca i64, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca %S.json.Json, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca i64, align 16 + %a88 = alloca i64, align 16 + %a92 = alloca %S.json.Json, align 16 + %a98 = alloca %S.json.Json, align 16 + %a100 = alloca %S.json.Json, align 16 + %a102 = alloca %S.json.Json, align 16 + %a107 = alloca %S.json.Json, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca %S.json.Json, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.json.Json, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.lsp.Analysis %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + %t7 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t8 = call ptr @finch_alloc(i64 %t7) + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 0 + store { ptr, i64, i64 } %t6, ptr %t9 + %t10 = insertvalue { ptr, i64, i64 } undef, ptr %t8, 0 + %t11 = insertvalue { ptr, i64, i64 } %t10, i64 1, 1 + %t12 = insertvalue { ptr, i64, i64 } %t11, i64 1, 2 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 + store i64 0, ptr %a15 + br label %each.cond10707 +each.cond10707: + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t17 = load i64, ptr %t16 + %t18 = load i64, ptr %a15 + %t19 = icmp slt i64 %t18, %t17 + br i1 %t19, label %each.body10708, label %each.end10710 +each.body10708: + %t20 = load ptr, ptr %t14 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t25 = load { ptr, i64, i64 }, ptr %a23 + store i64 -1, ptr %a26 + %t27 = load i64, ptr %t24 + %t28 = load ptr, ptr %a13 + store i64 0, ptr %a29 + br label %find.cond10711 +find.cond10711: + %t30 = load i64, ptr %a29 + %t31 = icmp slt i64 %t30, %t27 + br i1 %t31, label %find.body10712, label %find.end10715 +find.body10712: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } %t25, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %find.hit10713, label %find.next10714 +find.hit10713: + store i64 %t30, ptr %a26 + br label %find.end10715 +find.next10714: + %t38 = add i64 %t30, 1 + store i64 %t38, ptr %a29 + br label %find.cond10711 +find.end10715: + %t39 = load i64, ptr %a26 + %t40 = icmp sge i64 %t39, 0 + %t41 = xor i1 %t40, true + br i1 %t41, label %then10716, label %endif10718 +then10716: + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t43 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_copy(ptr %a45, ptr %a44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + %t47 = load i64, ptr %t42 + %t48 = add i64 %t47, 1 + call void @finch_arr_reserve(ptr %a13, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t49 = load ptr, ptr %a13 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 + store { ptr, i64, i64 } %t46, ptr %t50 + store i64 %t48, ptr %t42 + br label %endif10718 +endif10718: + br label %each.step10709 +each.step10709: + %t51 = load i64, ptr %a15 + %t52 = add i64 %t51, 1 + store i64 %t52, ptr %a15 + br label %each.cond10707 +each.end10710: + store { ptr, i64, i64 } zeroinitializer, ptr %a53 + store i64 0, ptr %a54 + br label %each.cond10719 +each.cond10719: + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = load i64, ptr %a54 + %t58 = icmp slt i64 %t57, %t56 + br i1 %t58, label %each.body10720, label %each.end10722 +each.body10720: + %t59 = load ptr, ptr %a13 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 %t57 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + %t63 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t63, ptr %a64 + %t65 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t66 = getelementptr inbounds %S.lsp.Diag, ptr %t65, i32 0, i32 0 + %t67 = load i1, ptr %t66 + br label %logic.from10723 +logic.from10723: + br i1 %t67, label %logic.rhs10724, label %logic.end10725 +logic.rhs10724: + %t68 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t69 = getelementptr inbounds %S.lsp.Diag, ptr %t68, i32 0, i32 1 + %t70 = load { ptr, i64, i64 }, ptr %t69 + %t71 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } %t71, ptr %a73 + %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) + %t75 = icmp ne i32 %t74, 0 + br label %logic.rend10726 +logic.rend10726: + br label %logic.end10725 +logic.end10725: + %t76 = phi i1 [ false, %logic.from10723 ], [ %t75, %logic.rend10726 ] + br i1 %t76, label %then10727, label %endif10729 +then10727: + %t77 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t78 = getelementptr inbounds %S.lsp.Diag, ptr %t77, i32 0, i32 2 + %t79 = load i64, ptr %t78 + %t80 = sub i64 %t79, 1 + store i64 %t80, ptr %a81 + %t82 = load i64, ptr %a81 + %t83 = icmp slt i64 %t82, 0 + br i1 %t83, label %then10730, label %endif10732 +then10730: + store i64 0, ptr %a81 + br label %endif10732 +endif10732: + %t84 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t85 = getelementptr inbounds %S.lsp.Diag, ptr %t84, i32 0, i32 3 + %t86 = load i64, ptr %t85 + %t87 = sub i64 %t86, 1 + store i64 %t87, ptr %a88 + %t89 = load i64, ptr %a88 + %t90 = icmp slt i64 %t89, 0 + br i1 %t90, label %then10733, label %endif10735 +then10733: + store i64 0, ptr %a88 + br label %endif10735 +endif10735: + %t91 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t91, ptr %a92 + %t93 = load i64, ptr %a81 + %t94 = load i64, ptr %a88 + %t95 = load i64, ptr %a88 + %t96 = add i64 %t95, 1 + %t97 = call %S.json.Json @finch.lsp.range(i64 %t93, i64 %t94, i64 %t96) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7084, i64 5, i64 0 }, %S.json.Json %t97) + store %S.json.Json %t97, ptr %a98 + call void @finch.drop.S_json_Json(ptr %a98) + %t99 = call %S.json.Json @finch.lsp.num(i64 1) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7085, i64 8, i64 0 }, %S.json.Json %t99) + store %S.json.Json %t99, ptr %a100 + call void @finch.drop.S_json_Json(ptr %a100) + %t101 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7087, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7086, i64 6, i64 0 }, %S.json.Json %t101) + store %S.json.Json %t101, ptr %a102 + call void @finch.drop.S_json_Json(ptr %a102) + %t103 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t104 = getelementptr inbounds %S.lsp.Diag, ptr %t103, i32 0, i32 4 + %t105 = load { ptr, i64, i64 }, ptr %t104 + %t106 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t105) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7088, i64 7, i64 0 }, %S.json.Json %t106) + store %S.json.Json %t106, ptr %a107 + call void @finch.drop.S_json_Json(ptr %a107) + %t108 = load %S.json.Json, ptr %a92 + call void @finch.json.Json.push(ptr %a64, %S.json.Json %t108) + %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 + %t110 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_copy(ptr %a112, ptr %a111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + %t114 = load i64, ptr %t109 + %t115 = add i64 %t114, 1 + call void @finch_arr_reserve(ptr %a53, i64 %t115, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t116 = load ptr, ptr %a53 + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t116, i64 %t114 + store { ptr, i64, i64 } %t113, ptr %t117 + store i64 %t115, ptr %t109 + call void @finch.drop.S_json_Json(ptr %a92) + br label %endif10729 +endif10729: + %t118 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t118, ptr %a119 + %t120 = load { ptr, i64, i64 }, ptr %a62 + %t121 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t120) + %t122 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t121) + store { ptr, i64, i64 } %t121, ptr %a123 + call void @finch_str_drop(ptr %a123) + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7089, i64 3, i64 0 }, %S.json.Json %t122) + store %S.json.Json %t122, ptr %a124 + call void @finch.drop.S_json_Json(ptr %a124) + %t125 = load %S.json.Json, ptr %a64 + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7090, i64 11, i64 0 }, %S.json.Json %t125) + %t126 = load %S.json.Json, ptr %a119 + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7091, i64 31, i64 0 }, %S.json.Json %t126) + call void @finch.drop.S_json_Json(ptr %a119) + call void @finch.drop.S_json_Json(ptr %a64) + br label %each.step10721 +each.step10721: + %t127 = load i64, ptr %a54 + %t128 = add i64 %t127, 1 + store i64 %t128, ptr %a54 + br label %each.cond10719 +each.end10722: + %t129 = load { ptr, i64, i64 }, ptr %a53 + %t130 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 + store { ptr, i64, i64 } %t129, ptr %a131 + call void @finch.copy.arr_str(ptr %a132, ptr %a131) + %t133 = load { ptr, i64, i64 }, ptr %a132 + %t134 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t133, ptr %t130 + store { ptr, i64, i64 } %t134, ptr %a135 + call void @finch.drop.arr_str(ptr %a135) + call void @finch.drop.arr_str(ptr %a53) + call void @finch.drop.arr_str(ptr %a13) + ret void +} + +define internal i64 @finch.lsp.refAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a19 = alloca %S.lsp.Ref, align 16 + %a20 = alloca %S.lsp.Ref, align 16 + %a22 = alloca %S.lsp.Ref, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond10736 +for.cond10736: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body10737, label %for.end10739 +for.body10737: + %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t12 = load i64, ptr %a8 + %t13 = load { ptr, i64, i64 }, ptr %t11 + %t14 = extractvalue { ptr, i64, i64 } %t13, 1 + %t15 = icmp uge i64 %t12, %t14 + br i1 %t15, label %range10740, label %inrange10741 +range10740: + call void @finch_panic_index(ptr @.str.7092, i64 397, i64 %t12, i64 %t14) + unreachable +inrange10741: + %t16 = extractvalue { ptr, i64, i64 } %t13, 0 + %t17 = getelementptr inbounds %S.lsp.Ref, ptr %t16, i64 %t12 + %t18 = load %S.lsp.Ref, ptr %t17 + store %S.lsp.Ref %t18, ptr %a19 + call void @finch.copy.S_lsp_Ref(ptr %a20, ptr %a19) + %t21 = load %S.lsp.Ref, ptr %a20 + store %S.lsp.Ref %t21, ptr %a22 + %t23 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = load i64, ptr %a3 + %t26 = icmp eq i64 %t24, %t25 + br label %logic.from10742 +logic.from10742: + br i1 %t26, label %logic.rhs10743, label %logic.end10744 +logic.rhs10743: + %t27 = load i64, ptr %a4 + %t28 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 + %t29 = load i64, ptr %t28 + %t30 = icmp sge i64 %t27, %t29 + br label %logic.rend10745 +logic.rend10745: + br label %logic.end10744 +logic.end10744: + %t31 = phi i1 [ false, %logic.from10742 ], [ %t30, %logic.rend10745 ] + br label %logic.from10746 +logic.from10746: + br i1 %t31, label %logic.rhs10747, label %logic.end10748 +logic.rhs10747: + %t32 = load i64, ptr %a4 + %t33 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 + %t34 = load i64, ptr %t33 + %t35 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 3 + %t36 = load i64, ptr %t35 + %t37 = add i64 %t34, %t36 + %t38 = icmp sle i64 %t32, %t37 + br label %logic.rend10749 +logic.rend10749: + br label %logic.end10748 +logic.end10748: + %t39 = phi i1 [ false, %logic.from10746 ], [ %t38, %logic.rend10749 ] + br label %logic.from10750 +logic.from10750: + br i1 %t39, label %logic.rhs10751, label %logic.end10752 +logic.rhs10751: + %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend10753 +logic.rend10753: + br label %logic.end10752 +logic.end10752: + %t47 = phi i1 [ false, %logic.from10750 ], [ %t46, %logic.rend10753 ] + br i1 %t47, label %then10754, label %endif10756 +then10754: + %t48 = load i64, ptr %a8 + call void @finch.drop.S_lsp_Ref(ptr %a22) + ret i64 %t48 +endif10756: + call void @finch.drop.S_lsp_Ref(ptr %a22) + br label %for.step10738 +for.step10738: + %t49 = load i64, ptr %a8 + %t50 = add i64 %t49, 1 + store i64 %t50, ptr %a8 + br label %for.cond10736 +for.end10739: + ret i64 -1 +} + +define internal %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a10 = alloca i64, align 16 + %a15 = alloca %S.json.Json, align 16 + %a17 = alloca %S.json.Json, align 16 + %a28 = alloca %S.json.Json, align 16 + %a30 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = load %S.lsp.Analysis, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = load i64, ptr %a3 + %t8 = load i64, ptr %a4 + %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br i1 %t12, label %then10757, label %endif10759 +then10757: + %t13 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t13 +endif10759: + %t14 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t14, ptr %a15 + %t16 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7094, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7093, i64 4, i64 0 }, %S.json.Json %t16) + store %S.json.Json %t16, ptr %a17 + call void @finch.drop.S_json_Json(ptr %a17) + %t18 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t19 = load i64, ptr %a10 + %t20 = load { ptr, i64, i64 }, ptr %t18 + %t21 = extractvalue { ptr, i64, i64 } %t20, 1 + %t22 = icmp uge i64 %t19, %t21 + br i1 %t22, label %range10760, label %inrange10761 +range10760: + call void @finch_panic_index(ptr @.str.7096, i64 412, i64 %t19, i64 %t21) + unreachable +inrange10761: + %t23 = extractvalue { ptr, i64, i64 } %t20, 0 + %t24 = getelementptr inbounds %S.lsp.Ref, ptr %t23, i64 %t19 + %t25 = getelementptr inbounds %S.lsp.Ref, ptr %t24, i32 0, i32 7 + %t26 = load { ptr, i64, i64 }, ptr %t25 + %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7095, i64 5, i64 0 }, %S.json.Json %t27) + store %S.json.Json %t27, ptr %a28 + call void @finch.drop.S_json_Json(ptr %a28) + %t29 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t29, ptr %a30 + %t31 = load %S.json.Json, ptr %a15 + call void @finch.json.Json.set(ptr %a30, { ptr, i64, i64 } { ptr @.str.7097, i64 8, i64 0 }, %S.json.Json %t31) + %t32 = load %S.json.Json, ptr %a30 + call void @finch.drop.S_json_Json(ptr %a15) + ret %S.json.Json %t32 +} + +define internal %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a10 = alloca i64, align 16 + %a34 = alloca %S.lsp.Ref, align 16 + %a35 = alloca %S.lsp.Ref, align 16 + %a37 = alloca %S.lsp.Ref, align 16 + %a39 = alloca %S.json.Json, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca %S.json.Json, align 16 + %a56 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = load %S.lsp.Analysis, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = load i64, ptr %a3 + %t8 = load i64, ptr %a4 + %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br label %logic.from10762 +logic.from10762: + br i1 %t12, label %logic.end10764, label %logic.rhs10763 +logic.rhs10763: + %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t14 = load i64, ptr %a10 + %t15 = load { ptr, i64, i64 }, ptr %t13 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 %t14, %t16 + br i1 %t17, label %range10765, label %inrange10766 +range10765: + call void @finch_panic_index(ptr @.str.7098, i64 420, i64 %t14, i64 %t16) + unreachable +inrange10766: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.lsp.Ref, ptr %t18, i64 %t14 + %t20 = getelementptr inbounds %S.lsp.Ref, ptr %t19, i32 0, i32 4 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = icmp eq i64 %t22, 0 + br label %logic.rend10767 +logic.rend10767: + br label %logic.end10764 +logic.end10764: + %t24 = phi i1 [ true, %logic.from10762 ], [ %t23, %logic.rend10767 ] + br i1 %t24, label %then10768, label %endif10770 +then10768: + %t25 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t25 +endif10770: + %t26 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t27 = load i64, ptr %a10 + %t28 = load { ptr, i64, i64 }, ptr %t26 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 %t27, %t29 + br i1 %t30, label %range10771, label %inrange10772 +range10771: + call void @finch_panic_index(ptr @.str.7099, i64 423, i64 %t27, i64 %t29) + unreachable +inrange10772: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.lsp.Ref, ptr %t31, i64 %t27 + %t33 = load %S.lsp.Ref, ptr %t32 + store %S.lsp.Ref %t33, ptr %a34 + call void @finch.copy.S_lsp_Ref(ptr %a35, ptr %a34) + %t36 = load %S.lsp.Ref, ptr %a35 + store %S.lsp.Ref %t36, ptr %a37 + %t38 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t38, ptr %a39 + %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 4 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t41) + %t43 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t42) + store { ptr, i64, i64 } %t42, ptr %a44 + call void @finch_str_drop(ptr %a44) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7100, i64 3, i64 0 }, %S.json.Json %t43) + store %S.json.Json %t43, ptr %a45 + call void @finch.drop.S_json_Json(ptr %a45) + %t46 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 5 + %t47 = load i64, ptr %t46 + %t48 = sub i64 %t47, 1 + %t49 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 + %t50 = load i64, ptr %t49 + %t51 = sub i64 %t50, 1 + %t52 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 + %t53 = load i64, ptr %t52 + %t54 = sub i64 %t53, 1 + %t55 = call %S.json.Json @finch.lsp.range(i64 %t48, i64 %t51, i64 %t54) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7101, i64 5, i64 0 }, %S.json.Json %t55) + store %S.json.Json %t55, ptr %a56 + call void @finch.drop.S_json_Json(ptr %a56) + %t57 = load %S.json.Json, ptr %a39 + call void @finch.drop.S_lsp_Ref(ptr %a37) + ret %S.json.Json %t57 +} + +define internal %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.json.Json, align 16 + %a6 = alloca i64, align 16 + %a14 = alloca %S.lsp.FnRec, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca %S.json.Json, align 16 + %a61 = alloca i64, align 16 + %a69 = alloca %S.lsp.StructRec, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca %S.json.Json, align 16 + %a95 = alloca i64, align 16 + %a103 = alloca %S.lsp.EnumRec, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t3, ptr %a4 + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a6 + br label %each.cond10773 +each.cond10773: + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load i64, ptr %a6 + %t10 = icmp slt i64 %t9, %t8 + br i1 %t10, label %each.body10774, label %each.end10776 +each.body10774: + %t11 = load ptr, ptr %t5 + %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %t11, i64 %t9 + %t13 = load %S.lsp.FnRec, ptr %t12 + store %S.lsp.FnRec %t13, ptr %a14 + %t15 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 3 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } %t17, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp eq i32 %t20, 0 + br i1 %t21, label %then10777, label %endif10779 +then10777: + br label %each.step10775 +endif10779: + store i64 12, ptr %a22 + %t23 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = icmp sgt i64 %t31, 0 + br i1 %t32, label %then10780, label %endif10782 +then10780: + store i64 6, ptr %a22 + %t33 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.7102, i64 1, i64 0 }, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a35 + %t39 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t38, ptr %a42 + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t38, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t45, ptr %a28 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %endif10782 +endif10782: + %t48 = load { ptr, i64, i64 }, ptr %a28 + %t49 = load i64, ptr %a22 + %t50 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 4 + %t51 = load i64, ptr %t50 + %t52 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 5 + %t53 = load i64, ptr %t52 + %t54 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 6 + %t55 = load i64, ptr %t54 + %t56 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t48, i64 %t49, i64 %t51, i64 %t53, i64 %t55) + call void @finch.json.Json.push(ptr %a4, %S.json.Json %t56) + store %S.json.Json %t56, ptr %a57 + call void @finch.drop.S_json_Json(ptr %a57) + call void @finch_str_drop(ptr %a28) + br label %each.step10775 +each.step10775: + %t58 = load i64, ptr %a6 + %t59 = add i64 %t58, 1 + store i64 %t59, ptr %a6 + br label %each.cond10773 +each.end10776: + %t60 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a61 + br label %each.cond10783 +each.cond10783: + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 + %t63 = load i64, ptr %t62 + %t64 = load i64, ptr %a61 + %t65 = icmp slt i64 %t64, %t63 + br i1 %t65, label %each.body10784, label %each.end10786 +each.body10784: + %t66 = load ptr, ptr %t60 + %t67 = getelementptr inbounds %S.lsp.StructRec, ptr %t66, i64 %t64 + %t68 = load %S.lsp.StructRec, ptr %t67 + store %S.lsp.StructRec %t68, ptr %a69 + %t70 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 2 + %t71 = load { ptr, i64, i64 }, ptr %t70 + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } %t72, ptr %a74 + %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) + %t76 = icmp ne i32 %t75, 0 + br i1 %t76, label %then10787, label %endif10789 +then10787: + %t77 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 1 + %t78 = load { ptr, i64, i64 }, ptr %t77 + %t79 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 + %t80 = load i64, ptr %t79 + %t81 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 4 + %t82 = load i64, ptr %t81 + %t83 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 + %t84 = load i64, ptr %t83 + %t85 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 5 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = add i64 %t84, %t87 + %t89 = add i64 %t88, 1 + %t90 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t78, i64 23, i64 %t80, i64 %t82, i64 %t89) + call void @finch.json.Json.push(ptr %a4, %S.json.Json %t90) + store %S.json.Json %t90, ptr %a91 + call void @finch.drop.S_json_Json(ptr %a91) + br label %endif10789 +endif10789: + br label %each.step10785 +each.step10785: + %t92 = load i64, ptr %a61 + %t93 = add i64 %t92, 1 + store i64 %t93, ptr %a61 + br label %each.cond10783 +each.end10786: + %t94 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a95 + br label %each.cond10790 +each.cond10790: + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t97 = load i64, ptr %t96 + %t98 = load i64, ptr %a95 + %t99 = icmp slt i64 %t98, %t97 + br i1 %t99, label %each.body10791, label %each.end10793 +each.body10791: + %t100 = load ptr, ptr %t94 + %t101 = getelementptr inbounds %S.lsp.EnumRec, ptr %t100, i64 %t98 + %t102 = load %S.lsp.EnumRec, ptr %t101 + store %S.lsp.EnumRec %t102, ptr %a103 + %t104 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 2 + %t105 = load { ptr, i64, i64 }, ptr %t104 + %t106 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } %t106, ptr %a108 + %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) + %t110 = icmp ne i32 %t109, 0 + br i1 %t110, label %then10794, label %endif10796 +then10794: + %t111 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 1 + %t112 = load { ptr, i64, i64 }, ptr %t111 + %t113 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 + %t114 = load i64, ptr %t113 + %t115 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 4 + %t116 = load i64, ptr %t115 + %t117 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 + %t118 = load i64, ptr %t117 + %t119 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 5 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 + %t121 = load i64, ptr %t120 + %t122 = add i64 %t118, %t121 + %t123 = add i64 %t122, 1 + %t124 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t112, i64 10, i64 %t114, i64 %t116, i64 %t123) + call void @finch.json.Json.push(ptr %a4, %S.json.Json %t124) + store %S.json.Json %t124, ptr %a125 + call void @finch.drop.S_json_Json(ptr %a125) + br label %endif10796 +endif10796: + br label %each.step10792 +each.step10792: + %t126 = load i64, ptr %a95 + %t127 = add i64 %t126, 1 + store i64 %t127, ptr %a95 + br label %each.cond10790 +each.end10793: + %t128 = load %S.json.Json, ptr %a4 + ret %S.json.Json %t128 +} + +define internal %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %p0, i64 %p1, i64 %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca %S.json.Json, align 16 + %a10 = alloca %S.json.Json, align 16 + %a13 = alloca %S.json.Json, align 16 + %a15 = alloca %S.json.Json, align 16 + %a19 = alloca %S.json.Json, align 16 + %a22 = alloca %S.json.Json, align 16 + %a31 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a1 + %t9 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t8) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7103, i64 4, i64 0 }, %S.json.Json %t9) + store %S.json.Json %t9, ptr %a10 + call void @finch.drop.S_json_Json(ptr %a10) + %t11 = load i64, ptr %a2 + %t12 = call %S.json.Json @finch.lsp.num(i64 %t11) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7104, i64 4, i64 0 }, %S.json.Json %t12) + store %S.json.Json %t12, ptr %a13 + call void @finch.drop.S_json_Json(ptr %a13) + %t14 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t14, ptr %a15 + %t16 = load i64, ptr %a3 + %t17 = sub i64 %t16, 1 + %t18 = call %S.json.Json @finch.lsp.position(i64 %t17, i64 0) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7105, i64 5, i64 0 }, %S.json.Json %t18) + store %S.json.Json %t18, ptr %a19 + call void @finch.drop.S_json_Json(ptr %a19) + %t20 = load i64, ptr %a5 + %t21 = call %S.json.Json @finch.lsp.position(i64 %t20, i64 0) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7106, i64 3, i64 0 }, %S.json.Json %t21) + store %S.json.Json %t21, ptr %a22 + call void @finch.drop.S_json_Json(ptr %a22) + %t23 = load %S.json.Json, ptr %a15 + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7107, i64 5, i64 0 }, %S.json.Json %t23) + %t24 = load i64, ptr %a3 + %t25 = sub i64 %t24, 1 + %t26 = load i64, ptr %a4 + %t27 = sub i64 %t26, 1 + %t28 = load i64, ptr %a4 + %t29 = sub i64 %t28, 1 + %t30 = call %S.json.Json @finch.lsp.range(i64 %t25, i64 %t27, i64 %t29) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7108, i64 14, i64 0 }, %S.json.Json %t30) + store %S.json.Json %t30, ptr %a31 + call void @finch.drop.S_json_Json(ptr %a31) + %t32 = load %S.json.Json, ptr %a7 + call void @finch.drop.S_json_Json(ptr %a15) + ret %S.json.Json %t32 +} + +define internal %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + %a12 = alloca %S.json.Json, align 16 + %a18 = alloca %S.json.Json, align 16 + %a23 = alloca %S.json.Json, align 16 + %a25 = alloca %S.json.Json, align 16 + %a28 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a1 + %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7109, i64 5, i64 0 }, %S.json.Json %t8) + store %S.json.Json %t8, ptr %a9 + call void @finch.drop.S_json_Json(ptr %a9) + %t10 = load i64, ptr %a2 + %t11 = call %S.json.Json @finch.lsp.num(i64 %t10) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7110, i64 4, i64 0 }, %S.json.Json %t11) + store %S.json.Json %t11, ptr %a12 + call void @finch.drop.S_json_Json(ptr %a12) + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sgt i64 %t14, 0 + br i1 %t15, label %then10797, label %endif10799 +then10797: + %t16 = load { ptr, i64, i64 }, ptr %a3 + %t17 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t16) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7111, i64 6, i64 0 }, %S.json.Json %t17) + store %S.json.Json %t17, ptr %a18 + call void @finch.drop.S_json_Json(ptr %a18) + br label %endif10799 +endif10799: + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t20 = load i64, ptr %t19 + %t21 = icmp sgt i64 %t20, 0 + br i1 %t21, label %then10800, label %endif10802 +then10800: + %t22 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t22, ptr %a23 + %t24 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7113, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7112, i64 4, i64 0 }, %S.json.Json %t24) + store %S.json.Json %t24, ptr %a25 + call void @finch.drop.S_json_Json(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a4 + %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7114, i64 5, i64 0 }, %S.json.Json %t27) + store %S.json.Json %t27, ptr %a28 + call void @finch.drop.S_json_Json(ptr %a28) + %t29 = load %S.json.Json, ptr %a23 + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7115, i64 13, i64 0 }, %S.json.Json %t29) + call void @finch.drop.S_json_Json(ptr %a23) + br label %endif10802 +endif10802: + %t30 = load %S.json.Json, ptr %a6 + ret %S.json.Json %t30 +} + +define internal i1 @finch.lsp.isWordChar(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 97 + br label %logic.from10803 +logic.from10803: + br i1 %t3, label %logic.rhs10804, label %logic.end10805 +logic.rhs10804: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 122 + br label %logic.rend10806 +logic.rend10806: + br label %logic.end10805 +logic.end10805: + %t6 = phi i1 [ false, %logic.from10803 ], [ %t5, %logic.rend10806 ] + br label %logic.from10807 +logic.from10807: + br i1 %t6, label %logic.end10809, label %logic.rhs10808 +logic.rhs10808: + %t7 = load i8, ptr %a1 + %t8 = icmp uge i8 %t7, 65 + br label %logic.from10810 +logic.from10810: + br i1 %t8, label %logic.rhs10811, label %logic.end10812 +logic.rhs10811: + %t9 = load i8, ptr %a1 + %t10 = icmp ule i8 %t9, 90 + br label %logic.rend10813 +logic.rend10813: + br label %logic.end10812 +logic.end10812: + %t11 = phi i1 [ false, %logic.from10810 ], [ %t10, %logic.rend10813 ] + br label %logic.rend10814 +logic.rend10814: + br label %logic.end10809 +logic.end10809: + %t12 = phi i1 [ true, %logic.from10807 ], [ %t11, %logic.rend10814 ] + br label %logic.from10815 +logic.from10815: + br i1 %t12, label %logic.end10817, label %logic.rhs10816 +logic.rhs10816: + %t13 = load i8, ptr %a1 + %t14 = icmp uge i8 %t13, 48 + br label %logic.from10818 +logic.from10818: + br i1 %t14, label %logic.rhs10819, label %logic.end10820 +logic.rhs10819: + %t15 = load i8, ptr %a1 + %t16 = icmp ule i8 %t15, 57 + br label %logic.rend10821 +logic.rend10821: + br label %logic.end10820 +logic.end10820: + %t17 = phi i1 [ false, %logic.from10818 ], [ %t16, %logic.rend10821 ] + br label %logic.rend10822 +logic.rend10822: + br label %logic.end10817 +logic.end10817: + %t18 = phi i1 [ true, %logic.from10815 ], [ %t17, %logic.rend10822 ] + br label %logic.from10823 +logic.from10823: + br i1 %t18, label %logic.end10825, label %logic.rhs10824 +logic.rhs10824: + %t19 = load i8, ptr %a1 + %t20 = icmp eq i8 %t19, 95 + br label %logic.rend10826 +logic.rend10826: + br label %logic.end10825 +logic.end10825: + %t21 = phi i1 [ true, %logic.from10823 ], [ %t20, %logic.rend10826 ] + ret i1 %t21 +} + +define internal void @finch.lsp.methodItems(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca %S.docs.Doc, align 16 + %a12 = alloca i64, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.json.Json, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond10827 +each.cond10827: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body10828, label %each.end10830 +each.body10828: + %t8 = load ptr, ptr %a2 + %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 + %t10 = load %S.docs.Doc, ptr %t9 + store %S.docs.Doc %t10, ptr %a11 + store i64 2, ptr %a12 + %t13 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.7117, i64 1, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then10831, label %endif10833 +then10831: + store i64 5, ptr %a12 + br label %endif10833 +endif10833: + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic10834, label %ok10835 +panic10834: + call void @finch_panic(ptr @.str.7118, i64 497, ptr @.str.7119) + unreachable +ok10835: + %t22 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = load i64, ptr %a12 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 + %t26 = load { ptr, i64, i64 }, ptr %t25 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 2 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t23, i64 %t24, { ptr, i64, i64 } %t26, { ptr, i64, i64 } %t28) + call void @finch.json.Json.push(ptr %t20, %S.json.Json %t29) + store %S.json.Json %t29, ptr %a30 + call void @finch.drop.S_json_Json(ptr %a30) + br label %each.step10829 +each.step10829: + %t31 = load i64, ptr %a3 + %t32 = add i64 %t31, 1 + store i64 %t32, ptr %a3 + br label %each.cond10827 +each.end10830: + ret void +} + +define internal %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca %S.lsp.VarRec, align 16 + %a7 = alloca i64, align 16 + %a15 = alloca %S.lsp.VarRec, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca %S.lsp.VarRec, align 16 + %a44 = alloca %S.lsp.VarRec, align 16 + %a47 = alloca %S.lsp.VarRec, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i64 %p3, ptr %a4 + store %S.lsp.VarRec zeroinitializer, ptr %a5 + %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 + store i64 0, ptr %a7 + br label %each.cond10836 +each.cond10836: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load i64, ptr %a7 + %t11 = icmp slt i64 %t10, %t9 + br i1 %t11, label %each.body10837, label %each.end10839 +each.body10837: + %t12 = load ptr, ptr %t6 + %t13 = getelementptr inbounds %S.lsp.VarRec, ptr %t12, i64 %t10 + %t14 = load %S.lsp.VarRec, ptr %t13 + store %S.lsp.VarRec %t14, ptr %a15 + %t16 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } %t18, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.from10840 +logic.from10840: + br i1 %t22, label %logic.rhs10841, label %logic.end10842 +logic.rhs10841: + %t23 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 3 + %t24 = load i64, ptr %t23 + %t25 = load i64, ptr %a4 + %t26 = icmp sle i64 %t24, %t25 + br label %logic.rend10843 +logic.rend10843: + br label %logic.end10842 +logic.end10842: + %t27 = phi i1 [ false, %logic.from10840 ], [ %t26, %logic.rend10843 ] + br label %logic.from10844 +logic.from10844: + br i1 %t27, label %logic.rhs10845, label %logic.end10846 +logic.rhs10845: + %t28 = load i64, ptr %a4 + %t29 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 7 + %t30 = load i64, ptr %t29 + %t31 = add i64 %t30, 1 + %t32 = icmp sle i64 %t28, %t31 + br label %logic.rend10847 +logic.rend10847: + br label %logic.end10846 +logic.end10846: + %t33 = phi i1 [ false, %logic.from10844 ], [ %t32, %logic.rend10847 ] + br label %logic.from10848 +logic.from10848: + br i1 %t33, label %logic.rhs10849, label %logic.end10850 +logic.rhs10849: + %t34 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 5 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } %t36, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.rend10851 +logic.rend10851: + br label %logic.end10850 +logic.end10850: + %t41 = phi i1 [ false, %logic.from10848 ], [ %t40, %logic.rend10851 ] + br i1 %t41, label %then10852, label %endif10854 +then10852: + %t42 = load %S.lsp.VarRec, ptr %a15 + store %S.lsp.VarRec %t42, ptr %a43 + call void @finch.copy.S_lsp_VarRec(ptr %a44, ptr %a43) + %t45 = load %S.lsp.VarRec, ptr %a44 + %t46 = load %S.lsp.VarRec, ptr %a5 + store %S.lsp.VarRec %t45, ptr %a5 + store %S.lsp.VarRec %t46, ptr %a47 + call void @finch.drop.S_lsp_VarRec(ptr %a47) + br label %endif10854 +endif10854: + br label %each.step10838 +each.step10838: + %t48 = load i64, ptr %a7 + %t49 = add i64 %t48, 1 + store i64 %t49, ptr %a7 + br label %each.cond10836 +each.end10839: + %t50 = load %S.lsp.VarRec, ptr %a5 + ret %S.lsp.VarRec %t50 +} + +define internal void @finch.drop.S_lsp_Names(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Names, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + ret void +} + +define internal %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca %S.json.Json, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca i64, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca i64, align 16 + %a56 = alloca i1, align 16 + %a60 = alloca i64, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca i1, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca i64, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca i64, align 16 + %a125 = alloca i64, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca i64, align 16 + %a146 = alloca %S.lsp.FnRec, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca %S.json.Json, align 16 + %a168 = alloca i64, align 16 + %a176 = alloca %S.lsp.StructRec, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca %S.json.Json, align 16 + %a198 = alloca i64, align 16 + %a206 = alloca %S.lsp.EnumRec, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca %S.json.Json, align 16 + %a230 = alloca i64, align 16 + %a238 = alloca %S.lsp.EnumRec, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca %S.lsp.VarRec, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca i64, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca %S.json.Json, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca %S.lsp.VarRec, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca i64, align 16 + %a387 = alloca %S.lsp.StructRec, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca i64, align 16 + %a418 = alloca %S.json.Json, align 16 + %a424 = alloca i64, align 16 + %a432 = alloca %S.lsp.FnRec, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca %S.json.Json, align 16 + %a450 = alloca %S.lsp.Names, align 16 + %a452 = alloca i64, align 16 + %a460 = alloca %S.lsp.VarRec, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca %S.json.Json, align 16 + %a492 = alloca i64, align 16 + %a500 = alloca %S.lsp.FnRec, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca %S.json.Json, align 16 + %a525 = alloca i64, align 16 + %a533 = alloca %S.lsp.StructRec, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca %S.json.Json, align 16 + %a558 = alloca i64, align 16 + %a566 = alloca %S.lsp.EnumRec, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca %S.json.Json, align 16 + %a591 = alloca i64, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca %S.json.Json, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca i64, align 16 + %a617 = alloca %S.docs.Doc, align 16 + %a628 = alloca %S.json.Json, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca i64, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a646 = alloca %S.json.Json, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca i64, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = load i64, ptr %a4 + %t10 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t8, i64 %t9) + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load i64, ptr %a5 + %t13 = sub i64 %t12, 1 + store i64 %t13, ptr %a14 + %t15 = load i64, ptr %a14 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t17 = load i64, ptr %t16 + %t18 = icmp sgt i64 %t15, %t17 + br i1 %t18, label %then10855, label %endif10857 +then10855: + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t20 = load i64, ptr %t19 + store i64 %t20, ptr %a14 + br label %endif10857 +endif10857: + %t21 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t21, ptr %a22 + %t24 = load i64, ptr %a14 + call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.7120, i64 519) + %t25 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 + %t28 = load i64, ptr %t27 + store i64 %t28, ptr %a29 + br label %while.cond10858 +while.cond10858: + %t30 = load i64, ptr %a29 + %t31 = icmp sgt i64 %t30, 0 + br label %logic.from10861 +logic.from10861: + br i1 %t31, label %logic.rhs10862, label %logic.end10863 +logic.rhs10862: + %t32 = load i64, ptr %a29 + %t33 = sub i64 %t32, 1 + %t34 = load { ptr, i64, i64 }, ptr %a26 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 %t33, %t35 + br i1 %t36, label %range10864, label %inrange10865 +range10864: + call void @finch_panic_index(ptr @.str.7121, i64 522, i64 %t33, i64 %t35) + unreachable +inrange10865: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds i8, ptr %t37, i64 %t33 + %t39 = load i8, ptr %t38 + %t40 = call i1 @finch.lsp.isWordChar(i8 %t39) + br label %logic.rend10866 +logic.rend10866: + br label %logic.end10863 +logic.end10863: + %t41 = phi i1 [ false, %logic.from10861 ], [ %t40, %logic.rend10866 ] + br i1 %t41, label %while.body10859, label %while.end10860 +while.body10859: + %t42 = load i64, ptr %a29 + %t43 = sub i64 %t42, 1 + store i64 %t43, ptr %a29 + br label %while.cond10858 +while.end10860: + %t44 = load i64, ptr %a29 + %t45 = icmp sgt i64 %t44, 0 + br label %logic.from10867 +logic.from10867: + br i1 %t45, label %logic.rhs10868, label %logic.end10869 +logic.rhs10868: + %t46 = load i64, ptr %a29 + %t47 = sub i64 %t46, 1 + %t48 = load { ptr, i64, i64 }, ptr %a26 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range10870, label %inrange10871 +range10870: + call void @finch_panic_index(ptr @.str.7122, i64 525, i64 %t47, i64 %t49) + unreachable +inrange10871: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 + %t53 = load i8, ptr %t52 + %t54 = icmp eq i8 %t53, 46 + br label %logic.rend10872 +logic.rend10872: + br label %logic.end10869 +logic.end10869: + %t55 = phi i1 [ false, %logic.from10867 ], [ %t54, %logic.rend10872 ] + store i1 %t55, ptr %a56 + %t57 = load i1, ptr %a56 + br i1 %t57, label %then10873, label %endif10875 +then10873: + %t58 = load i64, ptr %a29 + %t59 = sub i64 %t58, 1 + store i64 %t59, ptr %a60 + br label %while.cond10876 +while.cond10876: + %t61 = load i64, ptr %a60 + %t62 = icmp sgt i64 %t61, 0 + br label %logic.from10879 +logic.from10879: + br i1 %t62, label %logic.rhs10880, label %logic.end10881 +logic.rhs10880: + %t63 = load i64, ptr %a60 + %t64 = sub i64 %t63, 1 + %t65 = load { ptr, i64, i64 }, ptr %a26 + %t66 = extractvalue { ptr, i64, i64 } %t65, 1 + %t67 = icmp uge i64 %t64, %t66 + br i1 %t67, label %range10882, label %inrange10883 +range10882: + call void @finch_panic_index(ptr @.str.7123, i64 528, i64 %t64, i64 %t66) + unreachable +inrange10883: + %t68 = extractvalue { ptr, i64, i64 } %t65, 0 + %t69 = getelementptr inbounds i8, ptr %t68, i64 %t64 + %t70 = load i8, ptr %t69 + %t71 = call i1 @finch.lsp.isWordChar(i8 %t70) + br label %logic.from10884 +logic.from10884: + br i1 %t71, label %logic.end10886, label %logic.rhs10885 +logic.rhs10885: + %t72 = load i64, ptr %a60 + %t73 = sub i64 %t72, 1 + %t74 = load { ptr, i64, i64 }, ptr %a26 + %t75 = extractvalue { ptr, i64, i64 } %t74, 1 + %t76 = icmp uge i64 %t73, %t75 + br i1 %t76, label %range10887, label %inrange10888 +range10887: + call void @finch_panic_index(ptr @.str.7124, i64 528, i64 %t73, i64 %t75) + unreachable +inrange10888: + %t77 = extractvalue { ptr, i64, i64 } %t74, 0 + %t78 = getelementptr inbounds i8, ptr %t77, i64 %t73 + %t79 = load i8, ptr %t78 + %t80 = icmp eq i8 %t79, 91 + br label %logic.rend10889 +logic.rend10889: + br label %logic.end10886 +logic.end10886: + %t81 = phi i1 [ true, %logic.from10884 ], [ %t80, %logic.rend10889 ] + br label %logic.from10890 +logic.from10890: + br i1 %t81, label %logic.end10892, label %logic.rhs10891 +logic.rhs10891: + %t82 = load i64, ptr %a60 + %t83 = sub i64 %t82, 1 + %t84 = load { ptr, i64, i64 }, ptr %a26 + %t85 = extractvalue { ptr, i64, i64 } %t84, 1 + %t86 = icmp uge i64 %t83, %t85 + br i1 %t86, label %range10893, label %inrange10894 +range10893: + call void @finch_panic_index(ptr @.str.7125, i64 528, i64 %t83, i64 %t85) + unreachable +inrange10894: + %t87 = extractvalue { ptr, i64, i64 } %t84, 0 + %t88 = getelementptr inbounds i8, ptr %t87, i64 %t83 + %t89 = load i8, ptr %t88 + %t90 = icmp eq i8 %t89, 93 + br label %logic.rend10895 +logic.rend10895: + br label %logic.end10892 +logic.end10892: + %t91 = phi i1 [ true, %logic.from10890 ], [ %t90, %logic.rend10895 ] + br label %logic.rend10896 +logic.rend10896: + br label %logic.end10881 +logic.end10881: + %t92 = phi i1 [ false, %logic.from10879 ], [ %t91, %logic.rend10896 ] + br i1 %t92, label %while.body10877, label %while.end10878 +while.body10877: + %t93 = load i64, ptr %a60 + %t94 = sub i64 %t93, 1 + store i64 %t94, ptr %a60 + br label %while.cond10876 +while.end10878: + %t95 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t95, ptr %a96 + %t98 = load i64, ptr %a60 + %t99 = load i64, ptr %a29 + %t100 = sub i64 %t99, 1 + call void @finch_str_sub(ptr %a97, ptr %a96, i64 %t98, i64 %t100, ptr @.str.7126, i64 531) + %t101 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t101, ptr %a102 + store i1 false, ptr %a103 + %t104 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t104, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.7128, i64 1, i64 0 }, ptr %a107 + %t108 = call i64 @finch_str_find(ptr %a105, ptr %a107) + store i64 %t108, ptr %a109 + %t110 = load i64, ptr %a109 + %t111 = icmp sge i64 %t110, 0 + br i1 %t111, label %then10897, label %endif10899 +then10897: + %t112 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t112, ptr %a113 + %t115 = load i64, ptr %a109 + call void @finch_str_sub(ptr %a114, ptr %a113, i64 0, i64 %t115, ptr @.str.7129, i64 535) + %t116 = load { ptr, i64, i64 }, ptr %a114 + %t117 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t116, ptr %a102 + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_drop(ptr %a118) + store i1 true, ptr %a103 + br label %endif10899 +endif10899: + %t119 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %a102 + store i64 -1, ptr %a122 + %t123 = load i64, ptr %t120 + %t124 = load ptr, ptr %t119 + store i64 0, ptr %a125 + br label %find.cond10900 +find.cond10900: + %t126 = load i64, ptr %a125 + %t127 = icmp slt i64 %t126, %t123 + br i1 %t127, label %find.body10901, label %find.end10904 +find.body10901: + %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 %t126 + %t129 = load { ptr, i64, i64 }, ptr %t128 + store { ptr, i64, i64 } %t129, ptr %a130 + store { ptr, i64, i64 } %t121, ptr %a131 + %t132 = call i32 @finch_str_eq(ptr %a130, ptr %a131) + %t133 = icmp ne i32 %t132, 0 + br i1 %t133, label %find.hit10902, label %find.next10903 +find.hit10902: + store i64 %t126, ptr %a122 + br label %find.end10904 +find.next10903: + %t134 = add i64 %t126, 1 + store i64 %t134, ptr %a125 + br label %find.cond10900 +find.end10904: + %t135 = load i64, ptr %a122 + %t136 = icmp sge i64 %t135, 0 + br i1 %t136, label %then10905, label %endif10907 +then10905: + %t137 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a138 + br label %each.cond10908 +each.cond10908: + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 + %t140 = load i64, ptr %t139 + %t141 = load i64, ptr %a138 + %t142 = icmp slt i64 %t141, %t140 + br i1 %t142, label %each.body10909, label %each.end10911 +each.body10909: + %t143 = load ptr, ptr %t137 + %t144 = getelementptr inbounds %S.lsp.FnRec, ptr %t143, i64 %t141 + %t145 = load %S.lsp.FnRec, ptr %t144 + store %S.lsp.FnRec %t145, ptr %a146 + %t147 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 0 + %t148 = load { ptr, i64, i64 }, ptr %t147 + %t149 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t148, ptr %a150 + store { ptr, i64, i64 } %t149, ptr %a151 + %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + br label %logic.from10912 +logic.from10912: + br i1 %t153, label %logic.rhs10913, label %logic.end10914 +logic.rhs10913: + %t154 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 2 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 + %t156 = load i64, ptr %t155 + %t157 = icmp eq i64 %t156, 0 + br label %logic.rend10915 +logic.rend10915: + br label %logic.end10914 +logic.end10914: + %t158 = phi i1 [ false, %logic.from10912 ], [ %t157, %logic.rend10915 ] + br i1 %t158, label %then10916, label %endif10918 +then10916: + %t159 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + %t161 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 7 + %t162 = load { ptr, i64, i64 }, ptr %t161 + %t163 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t160, i64 3, { ptr, i64, i64 } %t162, { ptr, i64, i64 } { ptr @.str.7130, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t163) + store %S.json.Json %t163, ptr %a164 + call void @finch.drop.S_json_Json(ptr %a164) + br label %endif10918 +endif10918: + br label %each.step10910 +each.step10910: + %t165 = load i64, ptr %a138 + %t166 = add i64 %t165, 1 + store i64 %t166, ptr %a138 + br label %each.cond10908 +each.end10911: + %t167 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a168 + br label %each.cond10919 +each.cond10919: + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = load i64, ptr %a168 + %t172 = icmp slt i64 %t171, %t170 + br i1 %t172, label %each.body10920, label %each.end10922 +each.body10920: + %t173 = load ptr, ptr %t167 + %t174 = getelementptr inbounds %S.lsp.StructRec, ptr %t173, i64 %t171 + %t175 = load %S.lsp.StructRec, ptr %t174 + store %S.lsp.StructRec %t175, ptr %a176 + %t177 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 0 + %t178 = load { ptr, i64, i64 }, ptr %t177 + %t179 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } %t179, ptr %a181 + %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + br i1 %t183, label %then10923, label %endif10925 +then10923: + %t184 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 + %t185 = load { ptr, i64, i64 }, ptr %t184 + %t186 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 + %t187 = load { ptr, i64, i64 }, ptr %t186 + store { ptr, i64, i64 } { ptr @.str.7131, i64 7, i64 0 }, ptr %a189 + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a188 + %t192 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t185, i64 22, { ptr, i64, i64 } %t191, { ptr, i64, i64 } { ptr @.str.7132, i64 0, i64 0 }) + store { ptr, i64, i64 } %t191, ptr %a193 + call void @finch_str_drop(ptr %a193) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t192) + store %S.json.Json %t192, ptr %a194 + call void @finch.drop.S_json_Json(ptr %a194) + br label %endif10925 +endif10925: + br label %each.step10921 +each.step10921: + %t195 = load i64, ptr %a168 + %t196 = add i64 %t195, 1 + store i64 %t196, ptr %a168 + br label %each.cond10919 +each.end10922: + %t197 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a198 + br label %each.cond10926 +each.cond10926: + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 + %t200 = load i64, ptr %t199 + %t201 = load i64, ptr %a198 + %t202 = icmp slt i64 %t201, %t200 + br i1 %t202, label %each.body10927, label %each.end10929 +each.body10927: + %t203 = load ptr, ptr %t197 + %t204 = getelementptr inbounds %S.lsp.EnumRec, ptr %t203, i64 %t201 + %t205 = load %S.lsp.EnumRec, ptr %t204 + store %S.lsp.EnumRec %t205, ptr %a206 + %t207 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 0 + %t208 = load { ptr, i64, i64 }, ptr %t207 + %t209 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t208, ptr %a210 + store { ptr, i64, i64 } %t209, ptr %a211 + %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) + %t213 = icmp ne i32 %t212, 0 + br i1 %t213, label %then10930, label %endif10932 +then10930: + %t214 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 + %t215 = load { ptr, i64, i64 }, ptr %t214 + %t216 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } { ptr @.str.7133, i64 5, i64 0 }, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a218 + %t222 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t215, i64 13, { ptr, i64, i64 } %t221, { ptr, i64, i64 } { ptr @.str.7134, i64 0, i64 0 }) + store { ptr, i64, i64 } %t221, ptr %a223 + call void @finch_str_drop(ptr %a223) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t222) + store %S.json.Json %t222, ptr %a224 + call void @finch.drop.S_json_Json(ptr %a224) + br label %endif10932 +endif10932: + br label %each.step10928 +each.step10928: + %t225 = load i64, ptr %a198 + %t226 = add i64 %t225, 1 + store i64 %t226, ptr %a198 + br label %each.cond10926 +each.end10929: + %t227 = load %S.json.Json, ptr %a7 + %t228 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t227) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t228 +endif10907: + %t229 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a230 + br label %each.cond10933 +each.cond10933: + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 + %t232 = load i64, ptr %t231 + %t233 = load i64, ptr %a230 + %t234 = icmp slt i64 %t233, %t232 + br i1 %t234, label %each.body10934, label %each.end10936 +each.body10934: + %t235 = load ptr, ptr %t229 + %t236 = getelementptr inbounds %S.lsp.EnumRec, ptr %t235, i64 %t233 + %t237 = load %S.lsp.EnumRec, ptr %t236 + store %S.lsp.EnumRec %t237, ptr %a238 + %t239 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t240, ptr %a242 + store { ptr, i64, i64 } %t241, ptr %a243 + %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) + %t245 = icmp ne i32 %t244, 0 + br label %logic.from10937 +logic.from10937: + br i1 %t245, label %logic.rhs10938, label %logic.end10939 +logic.rhs10938: + %t246 = load %S.lsp.Analysis, ptr %a1 + %t247 = load { ptr, i64, i64 }, ptr %a3 + %t248 = load { ptr, i64, i64 }, ptr %a102 + %t249 = load i64, ptr %a4 + %t250 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t246, { ptr, i64, i64 } %t247, { ptr, i64, i64 } %t248, i64 %t249) + %t251 = extractvalue %S.lsp.VarRec %t250, 0 + store { ptr, i64, i64 } %t251, ptr %a252 + call void @finch_str_copy(ptr %a253, ptr %a252) + %t254 = load { ptr, i64, i64 }, ptr %a253 + store %S.lsp.VarRec %t250, ptr %a255 + call void @finch.drop.S_lsp_VarRec(ptr %a255) + %t256 = extractvalue { ptr, i64, i64 } %t254, 1 + store { ptr, i64, i64 } %t254, ptr %a257 + call void @finch_str_drop(ptr %a257) + %t258 = icmp eq i64 %t256, 0 + br label %logic.rend10940 +logic.rend10940: + br label %logic.end10939 +logic.end10939: + %t259 = phi i1 [ false, %logic.from10937 ], [ %t258, %logic.rend10940 ] + br i1 %t259, label %then10941, label %endif10943 +then10941: + %t260 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 5 + store i64 0, ptr %a261 + br label %each.cond10944 +each.cond10944: + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 + %t263 = load i64, ptr %t262 + %t264 = load i64, ptr %a261 + %t265 = icmp slt i64 %t264, %t263 + br i1 %t265, label %each.body10945, label %each.end10947 +each.body10945: + %t266 = load ptr, ptr %t260 + %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t266, i64 %t264 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t268, ptr %a269 + %t270 = load { ptr, i64, i64 }, ptr %a269 + %t271 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } %t272, ptr %a274 + store { ptr, i64, i64 } { ptr @.str.7135, i64 1, i64 0 }, ptr %a275 + call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) + %t276 = load { ptr, i64, i64 }, ptr %a273 + %t277 = load { ptr, i64, i64 }, ptr %a269 + store { ptr, i64, i64 } %t276, ptr %a279 + store { ptr, i64, i64 } %t277, ptr %a280 + call void @finch_str_concat(ptr %a278, ptr %a279, ptr %a280) + store { ptr, i64, i64 } %t276, ptr %a281 + call void @finch_str_drop(ptr %a281) + %t282 = load { ptr, i64, i64 }, ptr %a278 + %t283 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t270, i64 20, { ptr, i64, i64 } %t282, { ptr, i64, i64 } { ptr @.str.7136, i64 0, i64 0 }) + store { ptr, i64, i64 } %t282, ptr %a284 + call void @finch_str_drop(ptr %a284) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t283) + store %S.json.Json %t283, ptr %a285 + call void @finch.drop.S_json_Json(ptr %a285) + br label %each.step10946 +each.step10946: + %t286 = load i64, ptr %a261 + %t287 = add i64 %t286, 1 + store i64 %t287, ptr %a261 + br label %each.cond10944 +each.end10947: + %t288 = load %S.json.Json, ptr %a7 + %t289 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t288) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t289 +endif10943: + br label %each.step10935 +each.step10935: + %t290 = load i64, ptr %a230 + %t291 = add i64 %t290, 1 + store i64 %t291, ptr %a230 + br label %each.cond10933 +each.end10936: + %t292 = load %S.lsp.Analysis, ptr %a1 + %t293 = load { ptr, i64, i64 }, ptr %a3 + %t294 = load { ptr, i64, i64 }, ptr %a102 + %t295 = load i64, ptr %a4 + %t296 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t292, { ptr, i64, i64 } %t293, { ptr, i64, i64 } %t294, i64 %t295) + %t297 = extractvalue %S.lsp.VarRec %t296, 1 + store { ptr, i64, i64 } %t297, ptr %a298 + call void @finch_str_copy(ptr %a299, ptr %a298) + %t300 = load { ptr, i64, i64 }, ptr %a299 + store %S.lsp.VarRec %t296, ptr %a301 + call void @finch.drop.S_lsp_VarRec(ptr %a301) + store { ptr, i64, i64 } %t300, ptr %a302 + %t303 = load i1, ptr %a103 + br label %logic.from10948 +logic.from10948: + br i1 %t303, label %logic.rhs10949, label %logic.end10950 +logic.rhs10949: + %t304 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t304, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.7138, i64 2, i64 0 }, ptr %a307 + %t308 = call i32 @finch_str_starts(ptr %a305, ptr %a307) + %t309 = icmp ne i32 %t308, 0 + br label %logic.rend10951 +logic.rend10951: + br label %logic.end10950 +logic.end10950: + %t310 = phi i1 [ false, %logic.from10948 ], [ %t309, %logic.rend10951 ] + br i1 %t310, label %then10952, label %else10953 +then10952: + %t311 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t311, ptr %a312 + %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 + %t315 = load i64, ptr %t314 + call void @finch_str_sub(ptr %a313, ptr %a312, i64 2, i64 %t315, ptr @.str.7139, i64 569) + %t316 = load { ptr, i64, i64 }, ptr %a313 + %t317 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t316, ptr %a302 + store { ptr, i64, i64 } %t317, ptr %a318 + call void @finch_str_drop(ptr %a318) + br label %endif10954 +else10953: + %t319 = load i1, ptr %a103 + br label %logic.from10955 +logic.from10955: + br i1 %t319, label %logic.rhs10956, label %logic.end10957 +logic.rhs10956: + %t320 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t320, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.7140, i64 3, i64 0 }, ptr %a322 + %t323 = call i32 @finch_str_eq(ptr %a321, ptr %a322) + %t324 = icmp ne i32 %t323, 0 + br label %logic.rend10958 +logic.rend10958: + br label %logic.end10957 +logic.end10957: + %t325 = phi i1 [ false, %logic.from10955 ], [ %t324, %logic.rend10958 ] + br i1 %t325, label %then10959, label %endif10961 +then10959: + %t326 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } { ptr @.str.7141, i64 4, i64 0 }, ptr %a302 + store { ptr, i64, i64 } %t326, ptr %a327 + call void @finch_str_drop(ptr %a327) + br label %endif10961 +endif10961: + br label %endif10954 +endif10954: + %t328 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t328, ptr %a329 + store { ptr, i64, i64 } { ptr @.str.7143, i64 4, i64 0 }, ptr %a331 + %t332 = call i32 @finch_str_starts(ptr %a329, ptr %a331) + %t333 = icmp ne i32 %t332, 0 + br label %logic.from10962 +logic.from10962: + br i1 %t333, label %logic.rhs10963, label %logic.end10964 +logic.rhs10963: + %t334 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t334, ptr %a335 + store { ptr, i64, i64 } { ptr @.str.7145, i64 1, i64 0 }, ptr %a337 + %t338 = call i32 @finch_str_ends(ptr %a335, ptr %a337) + %t339 = icmp ne i32 %t338, 0 + br label %logic.rend10965 +logic.rend10965: + br label %logic.end10964 +logic.end10964: + %t340 = phi i1 [ false, %logic.from10962 ], [ %t339, %logic.rend10965 ] + br i1 %t340, label %then10966, label %endif10968 +then10966: + %t341 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t341, ptr %a342 + %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 + %t345 = load i64, ptr %t344 + %t346 = sub i64 %t345, 1 + call void @finch_str_sub(ptr %a343, ptr %a342, i64 4, i64 %t346, ptr @.str.7146, i64 574) + %t347 = load { ptr, i64, i64 }, ptr %a343 + %t348 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t347, ptr %a302 + store { ptr, i64, i64 } %t348, ptr %a349 + call void @finch_str_drop(ptr %a349) + br label %endif10968 +endif10968: + %t350 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t350, ptr %a351 + store { ptr, i64, i64 } { ptr @.str.7148, i64 2, i64 0 }, ptr %a353 + %t354 = call i32 @finch_str_starts(ptr %a351, ptr %a353) + %t355 = icmp ne i32 %t354, 0 + br i1 %t355, label %then10969, label %else10970 +then10969: + %t356 = call { ptr, i64, i64 } @finch.docs.arrayMethods() + call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t356) + store { ptr, i64, i64 } %t356, ptr %a357 + call void @finch.drop.arr_S_docs_Doc(ptr %a357) + br label %endif10971 +else10970: + %t358 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t358, ptr %a359 + store { ptr, i64, i64 } { ptr @.str.7149, i64 3, i64 0 }, ptr %a360 + %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) + %t362 = icmp ne i32 %t361, 0 + br i1 %t362, label %then10972, label %else10973 +then10972: + %t363 = call { ptr, i64, i64 } @finch.docs.strMethods() + call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t363) + store { ptr, i64, i64 } %t363, ptr %a364 + call void @finch.drop.arr_S_docs_Doc(ptr %a364) + br label %endif10974 +else10973: + %t365 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t365, ptr %a366 + store { ptr, i64, i64 } { ptr @.str.7151, i64 4, i64 0 }, ptr %a368 + %t369 = call i32 @finch_str_starts(ptr %a366, ptr %a368) + %t370 = icmp ne i32 %t369, 0 + br i1 %t370, label %then10975, label %else10976 +then10975: + %t371 = call { ptr, i64, i64 } @finch.docs.mapMethods() + call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t371) + store { ptr, i64, i64 } %t371, ptr %a372 + call void @finch.drop.arr_S_docs_Doc(ptr %a372) + br label %endif10977 +else10976: + %t373 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t373, ptr %a374 + call void @finch_str_copy(ptr %a375, ptr %a374) + %t376 = load { ptr, i64, i64 }, ptr %a375 + store { ptr, i64, i64 } %t376, ptr %a377 + %t378 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a379 + br label %each.cond10978 +each.cond10978: + %t380 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 + %t381 = load i64, ptr %t380 + %t382 = load i64, ptr %a379 + %t383 = icmp slt i64 %t382, %t381 + br i1 %t383, label %each.body10979, label %each.end10981 +each.body10979: + %t384 = load ptr, ptr %t378 + %t385 = getelementptr inbounds %S.lsp.StructRec, ptr %t384, i64 %t382 + %t386 = load %S.lsp.StructRec, ptr %t385 + store %S.lsp.StructRec %t386, ptr %a387 + %t388 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 1 + %t389 = load { ptr, i64, i64 }, ptr %t388 + %t390 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t389, ptr %a391 + store { ptr, i64, i64 } %t390, ptr %a392 + %t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392) + %t394 = icmp ne i32 %t393, 0 + br i1 %t394, label %then10982, label %endif10984 +then10982: + %t395 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 + %t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %t395, i32 0, i32 1 + %t397 = load i64, ptr %t396 + store i64 0, ptr %a398 + br label %for.cond10985 +for.cond10985: + %t399 = load i64, ptr %a398 + %t400 = icmp slt i64 %t399, %t397 + br i1 %t400, label %for.body10986, label %for.end10988 +for.body10986: + %t401 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 + %t402 = load i64, ptr %a398 + %t403 = load { ptr, i64, i64 }, ptr %t401 + %t404 = extractvalue { ptr, i64, i64 } %t403, 1 + %t405 = icmp uge i64 %t402, %t404 + br i1 %t405, label %range10989, label %inrange10990 +range10989: + call void @finch_panic_index(ptr @.str.7152, i64 587, i64 %t402, i64 %t404) + unreachable +inrange10990: + %t406 = extractvalue { ptr, i64, i64 } %t403, 0 + %t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i64 %t402 + %t408 = load { ptr, i64, i64 }, ptr %t407 + %t409 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 6 + %t410 = load i64, ptr %a398 + %t411 = load { ptr, i64, i64 }, ptr %t409 + %t412 = extractvalue { ptr, i64, i64 } %t411, 1 + %t413 = icmp uge i64 %t410, %t412 + br i1 %t413, label %range10991, label %inrange10992 +range10991: + call void @finch_panic_index(ptr @.str.7153, i64 587, i64 %t410, i64 %t412) + unreachable +inrange10992: + %t414 = extractvalue { ptr, i64, i64 } %t411, 0 + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t410 + %t416 = load { ptr, i64, i64 }, ptr %t415 + %t417 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t408, i64 5, { ptr, i64, i64 } %t416, { ptr, i64, i64 } { ptr @.str.7154, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t417) + store %S.json.Json %t417, ptr %a418 + call void @finch.drop.S_json_Json(ptr %a418) + br label %for.step10987 +for.step10987: + %t419 = load i64, ptr %a398 + %t420 = add i64 %t419, 1 + store i64 %t420, ptr %a398 + br label %for.cond10985 +for.end10988: + br label %endif10984 +endif10984: + br label %each.step10980 +each.step10980: + %t421 = load i64, ptr %a379 + %t422 = add i64 %t421, 1 + store i64 %t422, ptr %a379 + br label %each.cond10978 +each.end10981: + %t423 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a424 + br label %each.cond10993 +each.cond10993: + %t425 = getelementptr inbounds { ptr, i64, i64 }, ptr %t423, i32 0, i32 1 + %t426 = load i64, ptr %t425 + %t427 = load i64, ptr %a424 + %t428 = icmp slt i64 %t427, %t426 + br i1 %t428, label %each.body10994, label %each.end10996 +each.body10994: + %t429 = load ptr, ptr %t423 + %t430 = getelementptr inbounds %S.lsp.FnRec, ptr %t429, i64 %t427 + %t431 = load %S.lsp.FnRec, ptr %t430 + store %S.lsp.FnRec %t431, ptr %a432 + %t433 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 2 + %t434 = load { ptr, i64, i64 }, ptr %t433 + %t435 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t434, ptr %a436 + store { ptr, i64, i64 } %t435, ptr %a437 + %t438 = call i32 @finch_str_eq(ptr %a436, ptr %a437) + %t439 = icmp ne i32 %t438, 0 + br i1 %t439, label %then10997, label %endif10999 +then10997: + %t440 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 1 + %t441 = load { ptr, i64, i64 }, ptr %t440 + %t442 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 7 + %t443 = load { ptr, i64, i64 }, ptr %t442 + %t444 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t441, i64 2, { ptr, i64, i64 } %t443, { ptr, i64, i64 } { ptr @.str.7155, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t444) + store %S.json.Json %t444, ptr %a445 + call void @finch.drop.S_json_Json(ptr %a445) + br label %endif10999 +endif10999: + br label %each.step10995 +each.step10995: + %t446 = load i64, ptr %a424 + %t447 = add i64 %t446, 1 + store i64 %t447, ptr %a424 + br label %each.cond10993 +each.end10996: + call void @finch_str_drop(ptr %a377) + br label %endif10977 +endif10977: + br label %endif10974 +endif10974: + br label %endif10971 +endif10971: + %t448 = load %S.json.Json, ptr %a7 + %t449 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t448) + call void @finch_str_drop(ptr %a302) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t449 +endif10875: + store %S.lsp.Names zeroinitializer, ptr %a450 + %t451 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 + store i64 0, ptr %a452 + br label %each.cond11000 +each.cond11000: + %t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %t451, i32 0, i32 1 + %t454 = load i64, ptr %t453 + %t455 = load i64, ptr %a452 + %t456 = icmp slt i64 %t455, %t454 + br i1 %t456, label %each.body11001, label %each.end11003 +each.body11001: + %t457 = load ptr, ptr %t451 + %t458 = getelementptr inbounds %S.lsp.VarRec, ptr %t457, i64 %t455 + %t459 = load %S.lsp.VarRec, ptr %t458 + store %S.lsp.VarRec %t459, ptr %a460 + %t461 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 3 + %t462 = load i64, ptr %t461 + %t463 = load i64, ptr %a4 + %t464 = icmp sle i64 %t462, %t463 + br label %logic.from11004 +logic.from11004: + br i1 %t464, label %logic.rhs11005, label %logic.end11006 +logic.rhs11005: + %t465 = load i64, ptr %a4 + %t466 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 7 + %t467 = load i64, ptr %t466 + %t468 = add i64 %t467, 1 + %t469 = icmp sle i64 %t465, %t468 + br label %logic.rend11007 +logic.rend11007: + br label %logic.end11006 +logic.end11006: + %t470 = phi i1 [ false, %logic.from11004 ], [ %t469, %logic.rend11007 ] + br label %logic.from11008 +logic.from11008: + br i1 %t470, label %logic.rhs11009, label %logic.end11010 +logic.rhs11009: + %t471 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 5 + %t472 = load { ptr, i64, i64 }, ptr %t471 + %t473 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t472, ptr %a474 + store { ptr, i64, i64 } %t473, ptr %a475 + %t476 = call i32 @finch_str_eq(ptr %a474, ptr %a475) + %t477 = icmp ne i32 %t476, 0 + br label %logic.rend11011 +logic.rend11011: + br label %logic.end11010 +logic.end11010: + %t478 = phi i1 [ false, %logic.from11008 ], [ %t477, %logic.rend11011 ] + br label %logic.from11012 +logic.from11012: + br i1 %t478, label %logic.rhs11013, label %logic.end11014 +logic.rhs11013: + %t479 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 + %t480 = load { ptr, i64, i64 }, ptr %t479 + %t481 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t480) + br label %logic.rend11015 +logic.rend11015: + br label %logic.end11014 +logic.end11014: + %t482 = phi i1 [ false, %logic.from11012 ], [ %t481, %logic.rend11015 ] + br i1 %t482, label %then11016, label %endif11018 +then11016: + %t483 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 + %t484 = load { ptr, i64, i64 }, ptr %t483 + %t485 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 1 + %t486 = load { ptr, i64, i64 }, ptr %t485 + %t487 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t484, i64 6, { ptr, i64, i64 } %t486, { ptr, i64, i64 } { ptr @.str.7156, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t487) + store %S.json.Json %t487, ptr %a488 + call void @finch.drop.S_json_Json(ptr %a488) + br label %endif11018 +endif11018: + br label %each.step11002 +each.step11002: + %t489 = load i64, ptr %a452 + %t490 = add i64 %t489, 1 + store i64 %t490, ptr %a452 + br label %each.cond11000 +each.end11003: + %t491 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a492 + br label %each.cond11019 +each.cond11019: + %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i32 0, i32 1 + %t494 = load i64, ptr %t493 + %t495 = load i64, ptr %a492 + %t496 = icmp slt i64 %t495, %t494 + br i1 %t496, label %each.body11020, label %each.end11022 +each.body11020: + %t497 = load ptr, ptr %t491 + %t498 = getelementptr inbounds %S.lsp.FnRec, ptr %t497, i64 %t495 + %t499 = load %S.lsp.FnRec, ptr %t498 + store %S.lsp.FnRec %t499, ptr %a500 + %t501 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 2 + %t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t501, i32 0, i32 1 + %t503 = load i64, ptr %t502 + %t504 = icmp eq i64 %t503, 0 + br label %logic.from11023 +logic.from11023: + br i1 %t504, label %logic.rhs11024, label %logic.end11025 +logic.rhs11024: + %t505 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 0 + %t506 = load { ptr, i64, i64 }, ptr %t505 + store { ptr, i64, i64 } %t506, ptr %a507 + store { ptr, i64, i64 } { ptr @.str.7157, i64 0, i64 0 }, ptr %a508 + %t509 = call i32 @finch_str_eq(ptr %a507, ptr %a508) + %t510 = icmp ne i32 %t509, 0 + br label %logic.rend11026 +logic.rend11026: + br label %logic.end11025 +logic.end11025: + %t511 = phi i1 [ false, %logic.from11023 ], [ %t510, %logic.rend11026 ] + br label %logic.from11027 +logic.from11027: + br i1 %t511, label %logic.rhs11028, label %logic.end11029 +logic.rhs11028: + %t512 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 + %t513 = load { ptr, i64, i64 }, ptr %t512 + %t514 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t513) + br label %logic.rend11030 +logic.rend11030: + br label %logic.end11029 +logic.end11029: + %t515 = phi i1 [ false, %logic.from11027 ], [ %t514, %logic.rend11030 ] + br i1 %t515, label %then11031, label %endif11033 +then11031: + %t516 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 + %t517 = load { ptr, i64, i64 }, ptr %t516 + %t518 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 7 + %t519 = load { ptr, i64, i64 }, ptr %t518 + %t520 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t517, i64 3, { ptr, i64, i64 } %t519, { ptr, i64, i64 } { ptr @.str.7158, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t520) + store %S.json.Json %t520, ptr %a521 + call void @finch.drop.S_json_Json(ptr %a521) + br label %endif11033 +endif11033: + br label %each.step11021 +each.step11021: + %t522 = load i64, ptr %a492 + %t523 = add i64 %t522, 1 + store i64 %t523, ptr %a492 + br label %each.cond11019 +each.end11022: + %t524 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a525 + br label %each.cond11034 +each.cond11034: + %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t524, i32 0, i32 1 + %t527 = load i64, ptr %t526 + %t528 = load i64, ptr %a525 + %t529 = icmp slt i64 %t528, %t527 + br i1 %t529, label %each.body11035, label %each.end11037 +each.body11035: + %t530 = load ptr, ptr %t524 + %t531 = getelementptr inbounds %S.lsp.StructRec, ptr %t530, i64 %t528 + %t532 = load %S.lsp.StructRec, ptr %t531 + store %S.lsp.StructRec %t532, ptr %a533 + %t534 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 0 + %t535 = load { ptr, i64, i64 }, ptr %t534 + store { ptr, i64, i64 } %t535, ptr %a536 + store { ptr, i64, i64 } { ptr @.str.7159, i64 0, i64 0 }, ptr %a537 + %t538 = call i32 @finch_str_eq(ptr %a536, ptr %a537) + %t539 = icmp ne i32 %t538, 0 + br label %logic.from11038 +logic.from11038: + br i1 %t539, label %logic.rhs11039, label %logic.end11040 +logic.rhs11039: + %t540 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 + %t541 = load { ptr, i64, i64 }, ptr %t540 + %t542 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t541) + br label %logic.rend11041 +logic.rend11041: + br label %logic.end11040 +logic.end11040: + %t543 = phi i1 [ false, %logic.from11038 ], [ %t542, %logic.rend11041 ] + br i1 %t543, label %then11042, label %endif11044 +then11042: + %t544 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 + %t545 = load { ptr, i64, i64 }, ptr %t544 + %t546 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 + %t547 = load { ptr, i64, i64 }, ptr %t546 + store { ptr, i64, i64 } { ptr @.str.7160, i64 7, i64 0 }, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a548 + %t552 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t545, i64 22, { ptr, i64, i64 } %t551, { ptr, i64, i64 } { ptr @.str.7161, i64 0, i64 0 }) + store { ptr, i64, i64 } %t551, ptr %a553 + call void @finch_str_drop(ptr %a553) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t552) + store %S.json.Json %t552, ptr %a554 + call void @finch.drop.S_json_Json(ptr %a554) + br label %endif11044 +endif11044: + br label %each.step11036 +each.step11036: + %t555 = load i64, ptr %a525 + %t556 = add i64 %t555, 1 + store i64 %t556, ptr %a525 + br label %each.cond11034 +each.end11037: + %t557 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a558 + br label %each.cond11045 +each.cond11045: + %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i32 0, i32 1 + %t560 = load i64, ptr %t559 + %t561 = load i64, ptr %a558 + %t562 = icmp slt i64 %t561, %t560 + br i1 %t562, label %each.body11046, label %each.end11048 +each.body11046: + %t563 = load ptr, ptr %t557 + %t564 = getelementptr inbounds %S.lsp.EnumRec, ptr %t563, i64 %t561 + %t565 = load %S.lsp.EnumRec, ptr %t564 + store %S.lsp.EnumRec %t565, ptr %a566 + %t567 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 0 + %t568 = load { ptr, i64, i64 }, ptr %t567 + store { ptr, i64, i64 } %t568, ptr %a569 + store { ptr, i64, i64 } { ptr @.str.7162, i64 0, i64 0 }, ptr %a570 + %t571 = call i32 @finch_str_eq(ptr %a569, ptr %a570) + %t572 = icmp ne i32 %t571, 0 + br label %logic.from11049 +logic.from11049: + br i1 %t572, label %logic.rhs11050, label %logic.end11051 +logic.rhs11050: + %t573 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 + %t574 = load { ptr, i64, i64 }, ptr %t573 + %t575 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t574) + br label %logic.rend11052 +logic.rend11052: + br label %logic.end11051 +logic.end11051: + %t576 = phi i1 [ false, %logic.from11049 ], [ %t575, %logic.rend11052 ] + br i1 %t576, label %then11053, label %endif11055 +then11053: + %t577 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 + %t578 = load { ptr, i64, i64 }, ptr %t577 + %t579 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 + %t580 = load { ptr, i64, i64 }, ptr %t579 + store { ptr, i64, i64 } { ptr @.str.7163, i64 5, i64 0 }, ptr %a582 + store { ptr, i64, i64 } %t580, ptr %a583 + call void @finch_str_concat(ptr %a581, ptr %a582, ptr %a583) + %t584 = load { ptr, i64, i64 }, ptr %a581 + %t585 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t578, i64 13, { ptr, i64, i64 } %t584, { ptr, i64, i64 } { ptr @.str.7164, i64 0, i64 0 }) + store { ptr, i64, i64 } %t584, ptr %a586 + call void @finch_str_drop(ptr %a586) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t585) + store %S.json.Json %t585, ptr %a587 + call void @finch.drop.S_json_Json(ptr %a587) + br label %endif11055 +endif11055: + br label %each.step11047 +each.step11047: + %t588 = load i64, ptr %a558 + %t589 = add i64 %t588, 1 + store i64 %t589, ptr %a558 + br label %each.cond11045 +each.end11048: + %t590 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 + store i64 0, ptr %a591 + br label %each.cond11056 +each.cond11056: + %t592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t590, i32 0, i32 1 + %t593 = load i64, ptr %t592 + %t594 = load i64, ptr %a591 + %t595 = icmp slt i64 %t594, %t593 + br i1 %t595, label %each.body11057, label %each.end11059 +each.body11057: + %t596 = load ptr, ptr %t590 + %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 + %t598 = load { ptr, i64, i64 }, ptr %t597 + store { ptr, i64, i64 } %t598, ptr %a599 + %t600 = load { ptr, i64, i64 }, ptr %a599 + %t601 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t600) + br i1 %t601, label %then11060, label %endif11062 +then11060: + %t602 = load { ptr, i64, i64 }, ptr %a599 + %t603 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t602, i64 9, { ptr, i64, i64 } { ptr @.str.7165, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.7166, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t603) + store %S.json.Json %t603, ptr %a604 + call void @finch.drop.S_json_Json(ptr %a604) + br label %endif11062 +endif11062: + br label %each.step11058 +each.step11058: + %t605 = load i64, ptr %a591 + %t606 = add i64 %t605, 1 + store i64 %t606, ptr %a591 + br label %each.cond11056 +each.end11059: + %t607 = call { ptr, i64, i64 } @finch.docs.builtins() + store { ptr, i64, i64 } %t607, ptr %a608 + store i64 0, ptr %a609 + br label %each.cond11063 +each.cond11063: + %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a608, i32 0, i32 1 + %t611 = load i64, ptr %t610 + %t612 = load i64, ptr %a609 + %t613 = icmp slt i64 %t612, %t611 + br i1 %t613, label %each.body11064, label %each.end11066 +each.body11064: + %t614 = load ptr, ptr %a608 + %t615 = getelementptr inbounds %S.docs.Doc, ptr %t614, i64 %t612 + %t616 = load %S.docs.Doc, ptr %t615 + store %S.docs.Doc %t616, ptr %a617 + %t618 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 + %t619 = load { ptr, i64, i64 }, ptr %t618 + %t620 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t619) + br i1 %t620, label %then11067, label %endif11069 +then11067: + %t621 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 + %t622 = load { ptr, i64, i64 }, ptr %t621 + %t623 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 1 + %t624 = load { ptr, i64, i64 }, ptr %t623 + %t625 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 2 + %t626 = load { ptr, i64, i64 }, ptr %t625 + %t627 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t622, i64 3, { ptr, i64, i64 } %t624, { ptr, i64, i64 } %t626) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t627) + store %S.json.Json %t627, ptr %a628 + call void @finch.drop.S_json_Json(ptr %a628) + br label %endif11069 +endif11069: + br label %each.step11065 +each.step11065: + %t629 = load i64, ptr %a609 + %t630 = add i64 %t629, 1 + store i64 %t630, ptr %a609 + br label %each.cond11063 +each.end11066: + call void @finch.drop.arr_S_docs_Doc(ptr %a608) + %t631 = call { ptr, i64, i64 } @finch.docs.keywords() + store { ptr, i64, i64 } %t631, ptr %a632 + store i64 0, ptr %a633 + br label %each.cond11070 +each.cond11070: + %t634 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 + %t635 = load i64, ptr %t634 + %t636 = load i64, ptr %a633 + %t637 = icmp slt i64 %t636, %t635 + br i1 %t637, label %each.body11071, label %each.end11073 +each.body11071: + %t638 = load ptr, ptr %a632 + %t639 = getelementptr inbounds { ptr, i64, i64 }, ptr %t638, i64 %t636 + %t640 = load { ptr, i64, i64 }, ptr %t639 + store { ptr, i64, i64 } %t640, ptr %a641 + %t642 = load { ptr, i64, i64 }, ptr %a641 + %t643 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t642) + br i1 %t643, label %then11074, label %endif11076 +then11074: + %t644 = load { ptr, i64, i64 }, ptr %a641 + %t645 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t644, i64 14, { ptr, i64, i64 } { ptr @.str.7167, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7168, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t645) + store %S.json.Json %t645, ptr %a646 + call void @finch.drop.S_json_Json(ptr %a646) + br label %endif11076 +endif11076: + br label %each.step11072 +each.step11072: + %t647 = load i64, ptr %a633 + %t648 = add i64 %t647, 1 + store i64 %t648, ptr %a633 + br label %each.cond11070 +each.end11073: + call void @finch.drop.arr_str(ptr %a632) + %t649 = call { ptr, i64, i64 } @finch.docs.typeNames() + store { ptr, i64, i64 } %t649, ptr %a650 + store i64 0, ptr %a651 + br label %each.cond11077 +each.cond11077: + %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %a650, i32 0, i32 1 + %t653 = load i64, ptr %t652 + %t654 = load i64, ptr %a651 + %t655 = icmp slt i64 %t654, %t653 + br i1 %t655, label %each.body11078, label %each.end11080 +each.body11078: + %t656 = load ptr, ptr %a650 + %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %t656, i64 %t654 + %t658 = load { ptr, i64, i64 }, ptr %t657 + store { ptr, i64, i64 } %t658, ptr %a659 + %t660 = load { ptr, i64, i64 }, ptr %a659 + %t661 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t660) + br i1 %t661, label %then11081, label %endif11083 +then11081: + %t662 = load { ptr, i64, i64 }, ptr %a659 + %t663 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t662, i64 25, { ptr, i64, i64 } { ptr @.str.7169, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7170, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t663) + store %S.json.Json %t663, ptr %a664 + call void @finch.drop.S_json_Json(ptr %a664) + br label %endif11083 +endif11083: + br label %each.step11079 +each.step11079: + %t665 = load i64, ptr %a651 + %t666 = add i64 %t665, 1 + store i64 %t666, ptr %a651 + br label %each.cond11077 +each.end11080: + call void @finch.drop.arr_str(ptr %a650) + %t667 = load %S.json.Json, ptr %a7 + %t668 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t667) + call void @finch.drop.S_lsp_Names(ptr %a450) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t668 +} + +define internal i1 @finch.lsp.Names.add(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a5 + %t6 = load i64, ptr %t3 + %t7 = load ptr, ptr %t2 + store i64 0, ptr %a8 + br label %find.cond11084 +find.cond11084: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t6 + br i1 %t10, label %find.body11085, label %find.end11088 +find.body11085: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } %t4, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %find.hit11086, label %find.next11087 +find.hit11086: + store i64 %t9, ptr %a5 + br label %find.end11088 +find.next11087: + %t17 = add i64 %t9, 1 + store i64 %t17, ptr %a8 + br label %find.cond11084 +find.end11088: + %t18 = load i64, ptr %a5 + %t19 = icmp sge i64 %t18, 0 + br i1 %t19, label %then11089, label %endif11091 +then11089: + ret i1 false +endif11091: + %t20 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + ret i1 true +} + +define internal %S.json.Json @finch.lsp.completionList(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t2, ptr %a3 + %t4 = call %S.json.Json @finch.json.new_bool(i1 false) + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7171, i64 12, i64 0 }, %S.json.Json %t4) + store %S.json.Json %t4, ptr %a5 + call void @finch.drop.S_json_Json(ptr %a5) + %t6 = load %S.json.Json, ptr %a1 + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7172, i64 5, i64 0 }, %S.json.Json %t6) + %t7 = load %S.json.Json, ptr %a3 + ret %S.json.Json %t7 +} + +define internal %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca i64, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca i64, align 16 + %a26 = alloca i64, align 16 + %a27 = alloca i64, align 16 + %a31 = alloca i64, align 16 + %a41 = alloca i8, align 16 + %a74 = alloca i64, align 16 + %a76 = alloca i64, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca i64, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca %S.lsp.VarRec, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca i64, align 16 + %a188 = alloca %S.lsp.FnRec, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca %S.json.Json, align 16 + %a209 = alloca %S.json.Json, align 16 + %a211 = alloca %S.json.Json, align 16 + %a213 = alloca i64, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca %S.json.Json, align 16 + %a229 = alloca %S.json.Json, align 16 + %a235 = alloca %S.json.Json, align 16 + %a238 = alloca %S.json.Json, align 16 + %a241 = alloca %S.json.Json, align 16 + %a244 = alloca %S.json.Json, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca %S.docs.Doc, align 16 + %a258 = alloca %S.json.Json, align 16 + %a262 = alloca %S.json.Json, align 16 + %a266 = alloca %S.json.Json, align 16 + %a268 = alloca %S.json.Json, align 16 + %a271 = alloca %S.json.Json, align 16 + %a274 = alloca %S.json.Json, align 16 + %a277 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = load i64, ptr %a4 + %t8 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t6, i64 %t7) + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load i64, ptr %a5 + %t11 = sub i64 %t10, 1 + store i64 %t11, ptr %a12 + %t13 = load i64, ptr %a12 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = icmp sgt i64 %t13, %t15 + br i1 %t16, label %then11092, label %endif11094 +then11092: + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t18 = load i64, ptr %t17 + store i64 %t18, ptr %a12 + br label %endif11094 +endif11094: + %t19 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t19, ptr %a20 + %t22 = load i64, ptr %a12 + call void @finch_str_sub(ptr %a21, ptr %a20, i64 0, i64 %t22, ptr @.str.7173, i64 671) + %t23 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t23, ptr %a24 + store i64 0, ptr %a25 + store i64 0, ptr %a26 + store i64 -1, ptr %a27 + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %a24, i32 0, i32 1 + %t29 = load i64, ptr %t28 + %t30 = sub i64 %t29, 1 + store i64 %t30, ptr %a31 + br label %while.cond11095 +while.cond11095: + %t32 = load i64, ptr %a31 + %t33 = icmp sge i64 %t32, 0 + br i1 %t33, label %while.body11096, label %while.end11097 +while.body11096: + %t34 = load i64, ptr %a31 + %t35 = load { ptr, i64, i64 }, ptr %a24 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 %t34, %t36 + br i1 %t37, label %range11098, label %inrange11099 +range11098: + call void @finch_panic_index(ptr @.str.7174, i64 678, i64 %t34, i64 %t36) + unreachable +inrange11099: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds i8, ptr %t38, i64 %t34 + %t40 = load i8, ptr %t39 + store i8 %t40, ptr %a41 + %t42 = load i8, ptr %a41 + %t43 = icmp eq i8 %t42, 41 + br label %logic.from11100 +logic.from11100: + br i1 %t43, label %logic.end11102, label %logic.rhs11101 +logic.rhs11101: + %t44 = load i8, ptr %a41 + %t45 = icmp eq i8 %t44, 93 + br label %logic.rend11103 +logic.rend11103: + br label %logic.end11102 +logic.end11102: + %t46 = phi i1 [ true, %logic.from11100 ], [ %t45, %logic.rend11103 ] + br i1 %t46, label %then11104, label %else11105 +then11104: + %t47 = load i64, ptr %a25 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a25 + br label %endif11106 +else11105: + %t49 = load i8, ptr %a41 + %t50 = icmp eq i8 %t49, 40 + br label %logic.from11107 +logic.from11107: + br i1 %t50, label %logic.end11109, label %logic.rhs11108 +logic.rhs11108: + %t51 = load i8, ptr %a41 + %t52 = icmp eq i8 %t51, 91 + br label %logic.rend11110 +logic.rend11110: + br label %logic.end11109 +logic.end11109: + %t53 = phi i1 [ true, %logic.from11107 ], [ %t52, %logic.rend11110 ] + br i1 %t53, label %then11111, label %else11112 +then11111: + %t54 = load i64, ptr %a25 + %t55 = icmp eq i64 %t54, 0 + br i1 %t55, label %then11114, label %else11115 +then11114: + %t56 = load i8, ptr %a41 + %t57 = icmp eq i8 %t56, 40 + br i1 %t57, label %then11117, label %endif11119 +then11117: + %t58 = load i64, ptr %a31 + store i64 %t58, ptr %a27 + br label %while.end11097 +endif11119: + br label %endif11116 +else11115: + %t59 = load i64, ptr %a25 + %t60 = sub i64 %t59, 1 + store i64 %t60, ptr %a25 + br label %endif11116 +endif11116: + br label %endif11113 +else11112: + %t61 = load i8, ptr %a41 + %t62 = icmp eq i8 %t61, 44 + br label %logic.from11120 +logic.from11120: + br i1 %t62, label %logic.rhs11121, label %logic.end11122 +logic.rhs11121: + %t63 = load i64, ptr %a25 + %t64 = icmp eq i64 %t63, 0 + br label %logic.rend11123 +logic.rend11123: + br label %logic.end11122 +logic.end11122: + %t65 = phi i1 [ false, %logic.from11120 ], [ %t64, %logic.rend11123 ] + br i1 %t65, label %then11124, label %endif11126 +then11124: + %t66 = load i64, ptr %a26 + %t67 = add i64 %t66, 1 + store i64 %t67, ptr %a26 + br label %endif11126 +endif11126: + br label %endif11113 +endif11113: + br label %endif11106 +endif11106: + %t68 = load i64, ptr %a31 + %t69 = sub i64 %t68, 1 + store i64 %t69, ptr %a31 + br label %while.cond11095 +while.end11097: + %t70 = load i64, ptr %a27 + %t71 = icmp slt i64 %t70, 0 + br i1 %t71, label %then11127, label %endif11129 +then11127: + %t72 = call %S.json.Json @finch.json.new_null() + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t72 +endif11129: + %t73 = load i64, ptr %a27 + store i64 %t73, ptr %a74 + %t75 = load i64, ptr %a74 + store i64 %t75, ptr %a76 + br label %while.cond11130 +while.cond11130: + %t77 = load i64, ptr %a76 + %t78 = icmp sgt i64 %t77, 0 + br label %logic.from11133 +logic.from11133: + br i1 %t78, label %logic.rhs11134, label %logic.end11135 +logic.rhs11134: + %t79 = load i64, ptr %a76 + %t80 = sub i64 %t79, 1 + %t81 = load { ptr, i64, i64 }, ptr %a24 + %t82 = extractvalue { ptr, i64, i64 } %t81, 1 + %t83 = icmp uge i64 %t80, %t82 + br i1 %t83, label %range11136, label %inrange11137 +range11136: + call void @finch_panic_index(ptr @.str.7175, i64 700, i64 %t80, i64 %t82) + unreachable +inrange11137: + %t84 = extractvalue { ptr, i64, i64 } %t81, 0 + %t85 = getelementptr inbounds i8, ptr %t84, i64 %t80 + %t86 = load i8, ptr %t85 + %t87 = call i1 @finch.lsp.isWordChar(i8 %t86) + br label %logic.rend11138 +logic.rend11138: + br label %logic.end11135 +logic.end11135: + %t88 = phi i1 [ false, %logic.from11133 ], [ %t87, %logic.rend11138 ] + br i1 %t88, label %while.body11131, label %while.end11132 +while.body11131: + %t89 = load i64, ptr %a76 + %t90 = sub i64 %t89, 1 + store i64 %t90, ptr %a76 + br label %while.cond11130 +while.end11132: + %t91 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t91, ptr %a92 + %t94 = load i64, ptr %a76 + %t95 = load i64, ptr %a74 + call void @finch_str_sub(ptr %a93, ptr %a92, i64 %t94, i64 %t95, ptr @.str.7176, i64 703) + %t96 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t96, ptr %a97 + %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1 + %t99 = load i64, ptr %t98 + %t100 = icmp eq i64 %t99, 0 + br i1 %t100, label %then11139, label %endif11141 +then11139: + %t101 = call %S.json.Json @finch.json.new_null() + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t101 +endif11141: + store { ptr, i64, i64 } { ptr @.str.7177, i64 0, i64 0 }, ptr %a102 + %t103 = load i64, ptr %a76 + %t104 = icmp sgt i64 %t103, 0 + br label %logic.from11142 +logic.from11142: + br i1 %t104, label %logic.rhs11143, label %logic.end11144 +logic.rhs11143: + %t105 = load i64, ptr %a76 + %t106 = sub i64 %t105, 1 + %t107 = load { ptr, i64, i64 }, ptr %a24 + %t108 = extractvalue { ptr, i64, i64 } %t107, 1 + %t109 = icmp uge i64 %t106, %t108 + br i1 %t109, label %range11145, label %inrange11146 +range11145: + call void @finch_panic_index(ptr @.str.7178, i64 708, i64 %t106, i64 %t108) + unreachable +inrange11146: + %t110 = extractvalue { ptr, i64, i64 } %t107, 0 + %t111 = getelementptr inbounds i8, ptr %t110, i64 %t106 + %t112 = load i8, ptr %t111 + %t113 = icmp eq i8 %t112, 46 + br label %logic.rend11147 +logic.rend11147: + br label %logic.end11144 +logic.end11144: + %t114 = phi i1 [ false, %logic.from11142 ], [ %t113, %logic.rend11147 ] + br i1 %t114, label %then11148, label %endif11150 +then11148: + %t115 = load i64, ptr %a76 + %t116 = sub i64 %t115, 1 + store i64 %t116, ptr %a117 + br label %while.cond11151 +while.cond11151: + %t118 = load i64, ptr %a117 + %t119 = icmp sgt i64 %t118, 0 + br label %logic.from11154 +logic.from11154: + br i1 %t119, label %logic.rhs11155, label %logic.end11156 +logic.rhs11155: + %t120 = load i64, ptr %a117 + %t121 = sub i64 %t120, 1 + %t122 = load { ptr, i64, i64 }, ptr %a24 + %t123 = extractvalue { ptr, i64, i64 } %t122, 1 + %t124 = icmp uge i64 %t121, %t123 + br i1 %t124, label %range11157, label %inrange11158 +range11157: + call void @finch_panic_index(ptr @.str.7179, i64 711, i64 %t121, i64 %t123) + unreachable +inrange11158: + %t125 = extractvalue { ptr, i64, i64 } %t122, 0 + %t126 = getelementptr inbounds i8, ptr %t125, i64 %t121 + %t127 = load i8, ptr %t126 + %t128 = call i1 @finch.lsp.isWordChar(i8 %t127) + br label %logic.rend11159 +logic.rend11159: + br label %logic.end11156 +logic.end11156: + %t129 = phi i1 [ false, %logic.from11154 ], [ %t128, %logic.rend11159 ] + br i1 %t129, label %while.body11152, label %while.end11153 +while.body11152: + %t130 = load i64, ptr %a117 + %t131 = sub i64 %t130, 1 + store i64 %t131, ptr %a117 + br label %while.cond11151 +while.end11153: + %t132 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t132, ptr %a133 + %t135 = load i64, ptr %a117 + %t136 = load i64, ptr %a76 + %t137 = sub i64 %t136, 1 + call void @finch_str_sub(ptr %a134, ptr %a133, i64 %t135, i64 %t137, ptr @.str.7180, i64 714) + %t138 = load { ptr, i64, i64 }, ptr %a134 + store { ptr, i64, i64 } %t138, ptr %a139 + %t140 = load %S.lsp.Analysis, ptr %a1 + %t141 = load { ptr, i64, i64 }, ptr %a3 + %t142 = load { ptr, i64, i64 }, ptr %a139 + %t143 = load i64, ptr %a4 + %t144 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t140, { ptr, i64, i64 } %t141, { ptr, i64, i64 } %t142, i64 %t143) + %t145 = extractvalue %S.lsp.VarRec %t144, 1 + store { ptr, i64, i64 } %t145, ptr %a146 + call void @finch_str_copy(ptr %a147, ptr %a146) + %t148 = load { ptr, i64, i64 }, ptr %a147 + store %S.lsp.VarRec %t144, ptr %a149 + call void @finch.drop.S_lsp_VarRec(ptr %a149) + store { ptr, i64, i64 } %t148, ptr %a150 + %t151 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t151, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.7182, i64 4, i64 0 }, ptr %a154 + %t155 = call i32 @finch_str_starts(ptr %a152, ptr %a154) + %t156 = icmp ne i32 %t155, 0 + br label %logic.from11160 +logic.from11160: + br i1 %t156, label %logic.rhs11161, label %logic.end11162 +logic.rhs11161: + %t157 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.7184, i64 1, i64 0 }, ptr %a160 + %t161 = call i32 @finch_str_ends(ptr %a158, ptr %a160) + %t162 = icmp ne i32 %t161, 0 + br label %logic.rend11163 +logic.rend11163: + br label %logic.end11162 +logic.end11162: + %t163 = phi i1 [ false, %logic.from11160 ], [ %t162, %logic.rend11163 ] + br i1 %t163, label %then11164, label %endif11166 +then11164: + %t164 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t164, ptr %a165 + %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %a150, i32 0, i32 1 + %t168 = load i64, ptr %t167 + %t169 = sub i64 %t168, 1 + call void @finch_str_sub(ptr %a166, ptr %a165, i64 4, i64 %t169, ptr @.str.7185, i64 717) + %t170 = load { ptr, i64, i64 }, ptr %a166 + %t171 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t170, ptr %a150 + store { ptr, i64, i64 } %t171, ptr %a172 + call void @finch_str_drop(ptr %a172) + br label %endif11166 +endif11166: + %t173 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t173, ptr %a174 + call void @finch_str_copy(ptr %a175, ptr %a174) + %t176 = load { ptr, i64, i64 }, ptr %a175 + %t177 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t176, ptr %a102 + store { ptr, i64, i64 } %t177, ptr %a178 + call void @finch_str_drop(ptr %a178) + call void @finch_str_drop(ptr %a150) + call void @finch_str_drop(ptr %a139) + br label %endif11150 +endif11150: + %t179 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a180 + br label %each.cond11167 +each.cond11167: + %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 + %t182 = load i64, ptr %t181 + %t183 = load i64, ptr %a180 + %t184 = icmp slt i64 %t183, %t182 + br i1 %t184, label %each.body11168, label %each.end11170 +each.body11168: + %t185 = load ptr, ptr %t179 + %t186 = getelementptr inbounds %S.lsp.FnRec, ptr %t185, i64 %t183 + %t187 = load %S.lsp.FnRec, ptr %t186 + store %S.lsp.FnRec %t187, ptr %a188 + %t189 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 1 + %t190 = load { ptr, i64, i64 }, ptr %t189 + %t191 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t190, ptr %a192 + store { ptr, i64, i64 } %t191, ptr %a193 + %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) + %t195 = icmp ne i32 %t194, 0 + br label %logic.from11171 +logic.from11171: + br i1 %t195, label %logic.rhs11172, label %logic.end11173 +logic.rhs11172: + %t196 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 2 + %t197 = load { ptr, i64, i64 }, ptr %t196 + %t198 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t197, ptr %a199 + store { ptr, i64, i64 } %t198, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp ne i32 %t201, 0 + br label %logic.rend11174 +logic.rend11174: + br label %logic.end11173 +logic.end11173: + %t203 = phi i1 [ false, %logic.from11171 ], [ %t202, %logic.rend11174 ] + br i1 %t203, label %then11175, label %endif11177 +then11175: + %t204 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t204, ptr %a205 + %t206 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 7 + %t207 = load { ptr, i64, i64 }, ptr %t206 + %t208 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t207) + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7186, i64 5, i64 0 }, %S.json.Json %t208) + store %S.json.Json %t208, ptr %a209 + call void @finch.drop.S_json_Json(ptr %a209) + %t210 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t210, ptr %a211 + %t212 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 8 + store i64 0, ptr %a213 + br label %each.cond11178 +each.cond11178: + %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 + %t215 = load i64, ptr %t214 + %t216 = load i64, ptr %a213 + %t217 = icmp slt i64 %t216, %t215 + br i1 %t217, label %each.body11179, label %each.end11181 +each.body11179: + %t218 = load ptr, ptr %t212 + %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t216 + %t220 = load { ptr, i64, i64 }, ptr %t219 + store { ptr, i64, i64 } %t220, ptr %a221 + %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a221, i32 0, i32 1 + %t223 = load i64, ptr %t222 + %t224 = icmp sgt i64 %t223, 0 + br i1 %t224, label %then11182, label %endif11184 +then11182: + %t225 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t225, ptr %a226 + %t227 = load { ptr, i64, i64 }, ptr %a221 + %t228 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t227) + call void @finch.json.Json.set(ptr %a226, { ptr, i64, i64 } { ptr @.str.7187, i64 5, i64 0 }, %S.json.Json %t228) + store %S.json.Json %t228, ptr %a229 + call void @finch.drop.S_json_Json(ptr %a229) + %t230 = load %S.json.Json, ptr %a226 + call void @finch.json.Json.push(ptr %a211, %S.json.Json %t230) + call void @finch.drop.S_json_Json(ptr %a226) + br label %endif11184 +endif11184: + br label %each.step11180 +each.step11180: + %t231 = load i64, ptr %a213 + %t232 = add i64 %t231, 1 + store i64 %t232, ptr %a213 + br label %each.cond11178 +each.end11181: + %t233 = load %S.json.Json, ptr %a211 + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7188, i64 10, i64 0 }, %S.json.Json %t233) + %t234 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t234, ptr %a235 + %t236 = load %S.json.Json, ptr %a205 + call void @finch.json.Json.push(ptr %a235, %S.json.Json %t236) + %t237 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t237, ptr %a238 + %t239 = load %S.json.Json, ptr %a235 + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7189, i64 10, i64 0 }, %S.json.Json %t239) + %t240 = call %S.json.Json @finch.lsp.num(i64 0) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7190, i64 15, i64 0 }, %S.json.Json %t240) + store %S.json.Json %t240, ptr %a241 + call void @finch.drop.S_json_Json(ptr %a241) + %t242 = load i64, ptr %a26 + %t243 = call %S.json.Json @finch.lsp.num(i64 %t242) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7191, i64 15, i64 0 }, %S.json.Json %t243) + store %S.json.Json %t243, ptr %a244 + call void @finch.drop.S_json_Json(ptr %a244) + %t245 = load %S.json.Json, ptr %a238 + call void @finch.drop.S_json_Json(ptr %a235) + call void @finch.drop.S_json_Json(ptr %a211) + call void @finch.drop.S_json_Json(ptr %a205) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t245 +endif11177: + br label %each.step11169 +each.step11169: + %t246 = load i64, ptr %a180 + %t247 = add i64 %t246, 1 + store i64 %t247, ptr %a180 + br label %each.cond11167 +each.end11170: + %t248 = call { ptr, i64, i64 } @finch.docs.builtins() + %t249 = load { ptr, i64, i64 }, ptr %a97 + %t250 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t248, { ptr, i64, i64 } %t249) + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch.drop.arr_S_docs_Doc(ptr %a251) + store %S.docs.Doc %t250, ptr %a252 + %t253 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 0 + %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 + %t255 = load i64, ptr %t254 + %t256 = icmp sgt i64 %t255, 0 + br i1 %t256, label %then11185, label %endif11187 +then11185: + %t257 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t257, ptr %a258 + %t259 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 1 + %t260 = load { ptr, i64, i64 }, ptr %t259 + %t261 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t260) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7192, i64 5, i64 0 }, %S.json.Json %t261) + store %S.json.Json %t261, ptr %a262 + call void @finch.drop.S_json_Json(ptr %a262) + %t263 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 2 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t264) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7193, i64 13, i64 0 }, %S.json.Json %t265) + store %S.json.Json %t265, ptr %a266 + call void @finch.drop.S_json_Json(ptr %a266) + %t267 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t267, ptr %a268 + %t269 = load %S.json.Json, ptr %a258 + call void @finch.json.Json.push(ptr %a268, %S.json.Json %t269) + %t270 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t270, ptr %a271 + %t272 = load %S.json.Json, ptr %a268 + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7194, i64 10, i64 0 }, %S.json.Json %t272) + %t273 = call %S.json.Json @finch.lsp.num(i64 0) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7195, i64 15, i64 0 }, %S.json.Json %t273) + store %S.json.Json %t273, ptr %a274 + call void @finch.drop.S_json_Json(ptr %a274) + %t275 = load i64, ptr %a26 + %t276 = call %S.json.Json @finch.lsp.num(i64 %t275) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7196, i64 15, i64 0 }, %S.json.Json %t276) + store %S.json.Json %t276, ptr %a277 + call void @finch.drop.S_json_Json(ptr %a277) + %t278 = load %S.json.Json, ptr %a271 + call void @finch.drop.S_json_Json(ptr %a268) + call void @finch.drop.S_json_Json(ptr %a258) + call void @finch.drop.S_docs_Doc(ptr %a252) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t278 +endif11187: + %t279 = call %S.json.Json @finch.json.new_null() + call void @finch.drop.S_docs_Doc(ptr %a252) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t279 +} + +define internal { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7197, i64 12, i64 0 }) + store %S.json.Json %t2, ptr %a3 + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7198, i64 4, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a3) + store %S.json.Json %t4, ptr %a5 + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7199, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a5) + ret { ptr, i64, i64 } %t6 +} + +define internal { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7200, i64 12, i64 0 }) + store %S.json.Json %t2, ptr %a3 + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7201, i64 3, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a3) + store %S.json.Json %t4, ptr %a5 + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7202, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a5) + %t7 = call { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %t6) + store { ptr, i64, i64 } %t6, ptr %a8 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t7 +} + +define internal void @finch.lsp.Server.answer(ptr %self, %S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.json.Json, align 16 + %a18 = alloca %S.json.Json, align 16 + %a20 = alloca %S.json.Json, align 16 + %a22 = alloca %S.json.Json, align 16 + %a24 = alloca %S.json.Json, align 16 + %a26 = alloca %S.json.Json, align 16 + %a28 = alloca %S.json.Json, align 16 + %a30 = alloca %S.json.Json, align 16 + %a34 = alloca %S.json.Json, align 16 + %a36 = alloca %S.json.Json, align 16 + %a38 = alloca %S.json.Json, align 16 + %a40 = alloca %S.json.Json, align 16 + %a44 = alloca %S.json.Json, align 16 + %a47 = alloca %S.json.Json, align 16 + %a49 = alloca %S.json.Json, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.json.Json, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca i32, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca %S.json.Json, align 16 + %a106 = alloca %S.json.Json, align 16 + %a108 = alloca %S.json.Json, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca i32, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca %S.json.Json, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca %S.json.Json, align 16 + %a184 = alloca %S.json.Json, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca %S.json.Json, align 16 + %a212 = alloca %S.json.Json, align 16 + %a215 = alloca i64, align 16 + %a217 = alloca %S.json.Json, align 16 + %a219 = alloca %S.json.Json, align 16 + %a222 = alloca i64, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca %S.json.Json, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca %S.lsp.Analysis, align 16 + %a245 = alloca %S.lsp.Analysis, align 16 + %a247 = alloca %S.lsp.Analysis, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca %S.json.Json, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca %S.json.Json, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca %S.json.Json, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca %S.json.Json, align 16 + %a322 = alloca %S.json.Json, align 16 + %a328 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7203, i64 6, i64 0 }) + store %S.json.Json %t2, ptr %a3 + %t4 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a3, { ptr, i64, i64 } { ptr @.str.7204, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a3) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7205, i64 6, i64 0 }) + store %S.json.Json %t6, ptr %a7 + %t8 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7206, i64 2, i64 0 }) + store %S.json.Json %t8, ptr %a9 + %t10 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.7207, i64 10, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br i1 %t14, label %match.arm11189, label %match.next11190 +match.arm11189: + %t15 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t15, ptr %a16 + %t17 = call %S.json.Json @finch.lsp.num(i64 1) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7208, i64 16, i64 0 }, %S.json.Json %t17) + store %S.json.Json %t17, ptr %a18 + call void @finch.drop.S_json_Json(ptr %a18) + %t19 = call %S.json.Json @finch.json.new_bool(i1 true) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7209, i64 13, i64 0 }, %S.json.Json %t19) + store %S.json.Json %t19, ptr %a20 + call void @finch.drop.S_json_Json(ptr %a20) + %t21 = call %S.json.Json @finch.json.new_bool(i1 true) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7210, i64 18, i64 0 }, %S.json.Json %t21) + store %S.json.Json %t21, ptr %a22 + call void @finch.drop.S_json_Json(ptr %a22) + %t23 = call %S.json.Json @finch.json.new_bool(i1 true) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7211, i64 22, i64 0 }, %S.json.Json %t23) + store %S.json.Json %t23, ptr %a24 + call void @finch.drop.S_json_Json(ptr %a24) + %t25 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t25, ptr %a26 + %t27 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t27, ptr %a28 + %t29 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7212, i64 1, i64 0 }) + call void @finch.json.Json.push(ptr %a28, %S.json.Json %t29) + store %S.json.Json %t29, ptr %a30 + call void @finch.drop.S_json_Json(ptr %a30) + %t31 = load %S.json.Json, ptr %a28 + call void @finch.json.Json.set(ptr %a26, { ptr, i64, i64 } { ptr @.str.7213, i64 17, i64 0 }, %S.json.Json %t31) + %t32 = load %S.json.Json, ptr %a26 + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7214, i64 18, i64 0 }, %S.json.Json %t32) + %t33 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t33, ptr %a34 + %t35 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t35, ptr %a36 + %t37 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7215, i64 1, i64 0 }) + call void @finch.json.Json.push(ptr %a36, %S.json.Json %t37) + store %S.json.Json %t37, ptr %a38 + call void @finch.drop.S_json_Json(ptr %a38) + %t39 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7216, i64 1, i64 0 }) + call void @finch.json.Json.push(ptr %a36, %S.json.Json %t39) + store %S.json.Json %t39, ptr %a40 + call void @finch.drop.S_json_Json(ptr %a40) + %t41 = load %S.json.Json, ptr %a36 + call void @finch.json.Json.set(ptr %a34, { ptr, i64, i64 } { ptr @.str.7217, i64 17, i64 0 }, %S.json.Json %t41) + %t42 = load %S.json.Json, ptr %a34 + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7218, i64 21, i64 0 }, %S.json.Json %t42) + %t43 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t43, ptr %a44 + %t45 = load %S.json.Json, ptr %a16 + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7219, i64 12, i64 0 }, %S.json.Json %t45) + %t46 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t46, ptr %a47 + %t48 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7221, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a47, { ptr, i64, i64 } { ptr @.str.7220, i64 4, i64 0 }, %S.json.Json %t48) + store %S.json.Json %t48, ptr %a49 + call void @finch.drop.S_json_Json(ptr %a49) + %t50 = load %S.json.Json, ptr %a47 + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7222, i64 10, i64 0 }, %S.json.Json %t50) + %t51 = load %S.json.Json, ptr %a9 + %t52 = load %S.json.Json, ptr %a44 + call void @finch.lsp.reply(%S.json.Json %t51, %S.json.Json %t52) + call void @finch.drop.S_json_Json(ptr %a47) + call void @finch.drop.S_json_Json(ptr %a44) + call void @finch.drop.S_json_Json(ptr %a36) + call void @finch.drop.S_json_Json(ptr %a34) + call void @finch.drop.S_json_Json(ptr %a28) + call void @finch.drop.S_json_Json(ptr %a26) + call void @finch.drop.S_json_Json(ptr %a16) + br label %match.end11188 +match.next11190: + store { ptr, i64, i64 } %t10, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.7223, i64 8, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %match.arm11191, label %match.next11192 +match.arm11191: + %t57 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 6 + store i1 true, ptr %t57 + %t58 = load %S.json.Json, ptr %a9 + %t59 = call %S.json.Json @finch.json.new_null() + call void @finch.lsp.reply(%S.json.Json %t58, %S.json.Json %t59) + store %S.json.Json %t59, ptr %a60 + call void @finch.drop.S_json_Json(ptr %a60) + br label %match.end11188 +match.next11192: + store { ptr, i64, i64 } %t10, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.7224, i64 4, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br i1 %t64, label %match.arm11193, label %match.next11194 +match.arm11193: + %t65 = trunc i64 0 to i32 + %t66 = call i32 @fflush(ptr null) + call void @exit(i32 %t65) + br label %match.end11188 +match.next11194: + store { ptr, i64, i64 } %t10, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.7225, i64 20, i64 0 }, ptr %a68 + %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) + %t70 = icmp ne i32 %t69, 0 + br i1 %t70, label %match.arm11195, label %match.next11196 +match.arm11195: + %t71 = load %S.json.Json, ptr %a7 + %t72 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t71) + store { ptr, i64, i64 } %t72, ptr %a73 + %t74 = load %S.json.Json, ptr %a7 + %t75 = call { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %t74) + %t76 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a78 + store i32 0, ptr %a79 + %t80 = call i64 @finch_map_slot(ptr %t76, ptr %a78, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a79) + %t81 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t76, i32 0, i32 0 + %t82 = load ptr, ptr %t81 + %t83 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t82, i64 %t80 + %t84 = load i32, ptr %a79 + %t85 = icmp ne i32 %t84, 0 + br i1 %t85, label %map.new11197, label %map.have11198 +map.new11197: + %t86 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 1 + call void @finch_str_copy(ptr %t86, ptr %a78) + %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t87 + br label %map.have11198 +map.have11198: + %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t75, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a73 + call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t91) + call void @finch_str_drop(ptr %a73) + br label %match.end11188 +match.next11196: + store { ptr, i64, i64 } %t10, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.7226, i64 22, i64 0 }, ptr %a93 + %t94 = call i32 @finch_str_eq(ptr %a92, ptr %a93) + %t95 = icmp ne i32 %t94, 0 + br i1 %t95, label %match.arm11199, label %match.next11200 +match.arm11199: + %t96 = load %S.json.Json, ptr %a7 + %t97 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t96) + store { ptr, i64, i64 } %t97, ptr %a98 + %t99 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7227, i64 14, i64 0 }) + store %S.json.Json %t99, ptr %a100 + %t101 = call i64 @finch.json.Json.len(ptr %a100) + %t102 = icmp sgt i64 %t101, 0 + br i1 %t102, label %then11201, label %endif11203 +then11201: + %t103 = call i64 @finch.json.Json.len(ptr %a100) + %t104 = sub i64 %t103, 1 + %t105 = call %S.json.Json @finch.json.Json.at(ptr %a100, i64 %t104) + store %S.json.Json %t105, ptr %a106 + %t107 = call %S.json.Json @finch.json.Json.get(ptr %a106, { ptr, i64, i64 } { ptr @.str.7228, i64 4, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a106) + store %S.json.Json %t107, ptr %a108 + %t109 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a108, { ptr, i64, i64 } { ptr @.str.7229, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a108) + %t110 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t111 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t111, ptr %a112 + store i32 0, ptr %a113 + %t114 = call i64 @finch_map_slot(ptr %t110, ptr %a112, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a113) + %t115 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t110, i32 0, i32 0 + %t116 = load ptr, ptr %t115 + %t117 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t116, i64 %t114 + %t118 = load i32, ptr %a113 + %t119 = icmp ne i32 %t118, 0 + br i1 %t119, label %map.new11204, label %map.have11205 +map.new11204: + %t120 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 1 + call void @finch_str_copy(ptr %t120, ptr %a112) + %t121 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t121 + br label %map.have11205 +map.have11205: + %t122 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 + %t123 = load { ptr, i64, i64 }, ptr %t122 + store { ptr, i64, i64 } %t109, ptr %t122 + store { ptr, i64, i64 } %t123, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a98 + call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t125) + br label %endif11203 +endif11203: + call void @finch.drop.S_json_Json(ptr %a100) + call void @finch_str_drop(ptr %a98) + br label %match.end11188 +match.next11200: + store { ptr, i64, i64 } %t10, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.7230, i64 20, i64 0 }, ptr %a127 + %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) + %t129 = icmp ne i32 %t128, 0 + br i1 %t129, label %match.arm11206, label %match.next11207 +match.arm11206: + %t130 = load %S.json.Json, ptr %a7 + %t131 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t130) + store { ptr, i64, i64 } %t131, ptr %a132 + %t133 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t134 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t134, ptr %a135 + %t136 = call i64 @finch_map_find(ptr %t133, ptr %a135, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t137 = icmp sge i64 %t136, 0 + br i1 %t137, label %then11208, label %endif11210 +then11208: + %t138 = load { ptr, i64, i64 }, ptr %a132 + call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t138) + br label %endif11210 +endif11210: + call void @finch_str_drop(ptr %a132) + br label %match.end11188 +match.next11207: + store { ptr, i64, i64 } %t10, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.7231, i64 21, i64 0 }, ptr %a140 + %t141 = call i32 @finch_str_eq(ptr %a139, ptr %a140) + %t142 = icmp ne i32 %t141, 0 + br i1 %t142, label %match.arm11211, label %match.next11212 +match.arm11211: + %t143 = load %S.json.Json, ptr %a7 + %t144 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t143) + store { ptr, i64, i64 } %t144, ptr %a145 + %t146 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t147 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t147, ptr %a148 + %t149 = call i64 @finch_map_find(ptr %t146, ptr %a148, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t150 = icmp sge i64 %t149, 0 + br i1 %t150, label %remove.hit11213, label %remove.end11214 +remove.hit11213: + %t151 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t146, i32 0, i32 0 + %t152 = load ptr, ptr %t151 + %t153 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t152, i64 %t149 + %t154 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 1 + call void @finch_str_drop(ptr %t154) + %t155 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 2 + call void @finch_str_drop(ptr %t155) + call void @finch_map_remove_at(ptr %t146, i64 %t149, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64)) + br label %remove.end11214 +remove.end11214: + %t156 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t157 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t157, ptr %a158 + %t159 = call i64 @finch_map_find(ptr %t156, ptr %a158, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t160 = icmp sge i64 %t159, 0 + br i1 %t160, label %remove.hit11215, label %remove.end11216 +remove.hit11215: + %t161 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t156, i32 0, i32 0 + %t162 = load ptr, ptr %t161 + %t163 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t162, i64 %t159 + %t164 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 1 + call void @finch_str_drop(ptr %t164) + %t165 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 2 + call void @finch.drop.S_lsp_Analysis(ptr %t165) + call void @finch_map_remove_at(ptr %t156, i64 %t159, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) + br label %remove.end11216 +remove.end11216: + %t166 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t167 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t167, ptr %a168 + %t169 = call i64 @finch_map_find(ptr %t166, ptr %a168, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t170 = icmp sge i64 %t169, 0 + br i1 %t170, label %remove.hit11217, label %remove.end11218 +remove.hit11217: + %t171 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t166, i32 0, i32 0 + %t172 = load ptr, ptr %t171 + %t173 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t172, i64 %t169 + %t174 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 1 + call void @finch_str_drop(ptr %t174) + %t175 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 2 + call void @finch.drop.S_lsp_Analysis(ptr %t175) + call void @finch_map_remove_at(ptr %t166, i64 %t169, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) + br label %remove.end11218 +remove.end11218: + %t176 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t176, ptr %a177 + %t178 = load { ptr, i64, i64 }, ptr %a145 + %t179 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t178) + %t180 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t179) + store { ptr, i64, i64 } %t179, ptr %a181 + call void @finch_str_drop(ptr %a181) + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7232, i64 3, i64 0 }, %S.json.Json %t180) + store %S.json.Json %t180, ptr %a182 + call void @finch.drop.S_json_Json(ptr %a182) + %t183 = call %S.json.Json @finch.json.new_list() + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7233, i64 11, i64 0 }, %S.json.Json %t183) + store %S.json.Json %t183, ptr %a184 + call void @finch.drop.S_json_Json(ptr %a184) + %t185 = load %S.json.Json, ptr %a177 + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7234, i64 31, i64 0 }, %S.json.Json %t185) + call void @finch.drop.S_json_Json(ptr %a177) + call void @finch_str_drop(ptr %a145) + br label %match.end11188 +match.next11212: + store { ptr, i64, i64 } %t10, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.7235, i64 18, i64 0 }, ptr %a187 + %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) + %t189 = icmp ne i32 %t188, 0 + br i1 %t189, label %match.arm11219, label %match.or11221 +match.or11221: + store { ptr, i64, i64 } %t10, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.7236, i64 23, i64 0 }, ptr %a191 + %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) + %t193 = icmp ne i32 %t192, 0 + br i1 %t193, label %match.arm11219, label %match.or11222 +match.or11222: + store { ptr, i64, i64 } %t10, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.7237, i64 23, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br i1 %t197, label %match.arm11219, label %match.or11223 +match.or11223: + store { ptr, i64, i64 } %t10, ptr %a198 + store { ptr, i64, i64 } { ptr @.str.7238, i64 27, i64 0 }, ptr %a199 + %t200 = call i32 @finch_str_eq(ptr %a198, ptr %a199) + %t201 = icmp ne i32 %t200, 0 + br i1 %t201, label %match.arm11219, label %match.or11224 +match.or11224: + store { ptr, i64, i64 } %t10, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.7239, i64 26, i64 0 }, ptr %a203 + %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) + %t205 = icmp ne i32 %t204, 0 + br i1 %t205, label %match.arm11219, label %match.next11220 +match.arm11219: + %t206 = load %S.json.Json, ptr %a7 + %t207 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t206) + store { ptr, i64, i64 } %t207, ptr %a208 + %t209 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7240, i64 8, i64 0 }) + store %S.json.Json %t209, ptr %a210 + %t211 = call %S.json.Json @finch.json.Json.get(ptr %a210, { ptr, i64, i64 } { ptr @.str.7241, i64 4, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a210) + store %S.json.Json %t211, ptr %a212 + %t213 = call i64 @finch.json.Json.int_or(ptr %a212, i64 0) + call void @finch.drop.S_json_Json(ptr %a212) + %t214 = add i64 %t213, 1 + store i64 %t214, ptr %a215 + %t216 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7242, i64 8, i64 0 }) + store %S.json.Json %t216, ptr %a217 + %t218 = call %S.json.Json @finch.json.Json.get(ptr %a217, { ptr, i64, i64 } { ptr @.str.7243, i64 9, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a217) + store %S.json.Json %t218, ptr %a219 + %t220 = call i64 @finch.json.Json.int_or(ptr %a219, i64 0) + call void @finch.drop.S_json_Json(ptr %a219) + %t221 = add i64 %t220, 1 + store i64 %t221, ptr %a222 + %t223 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t224 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t224, ptr %a225 + %t226 = call i64 @finch_map_find(ptr %t223, ptr %a225, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t227 = icmp sge i64 %t226, 0 + %t228 = xor i1 %t227, true + br i1 %t228, label %then11225, label %endif11227 +then11225: + %t229 = load %S.json.Json, ptr %a9 + %t230 = call %S.json.Json @finch.json.new_null() + call void @finch.lsp.reply(%S.json.Json %t229, %S.json.Json %t230) + store %S.json.Json %t230, ptr %a231 + call void @finch.drop.S_json_Json(ptr %a231) + call void @finch_str_drop(ptr %a208) + call void @finch.drop.S_json_Json(ptr %a9) + call void @finch.drop.S_json_Json(ptr %a7) + call void @finch_str_drop(ptr %a5) + ret void +endif11227: + %t232 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t233 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t233, ptr %a234 + %t235 = call i64 @finch_map_find(ptr %t232, ptr %a234, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t236 = icmp slt i64 %t235, 0 + br i1 %t236, label %map.missing11228, label %map.found11229 +map.missing11228: + store { ptr, i64, i64 } zeroinitializer, ptr %a237 + store { ptr, i64, i64 } %t233, ptr %a238 + call void @finch_buf_str(ptr %a237, ptr %a238, i32 1) + call void @finch_map_missing(ptr @.str.7244, i64 842, ptr %a237) + unreachable +map.found11229: + %t239 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t232, i32 0, i32 0 + %t240 = load ptr, ptr %t239 + %t241 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t240, i64 %t235 + %t242 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t241, i32 0, i32 2 + %t243 = load %S.lsp.Analysis, ptr %t242 + store %S.lsp.Analysis %t243, ptr %a244 + call void @finch.copy.S_lsp_Analysis(ptr %a245, ptr %a244) + %t246 = load %S.lsp.Analysis, ptr %a245 + store %S.lsp.Analysis %t246, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.7245, i64 0, i64 0 }, ptr %a248 + %t249 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t250 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t250, ptr %a251 + %t252 = call i64 @finch_map_find(ptr %t249, ptr %a251, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t253 = icmp sge i64 %t252, 0 + br i1 %t253, label %then11230, label %endif11232 +then11230: + %t254 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t255 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t255, ptr %a256 + %t257 = call i64 @finch_map_find(ptr %t254, ptr %a256, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t258 = icmp slt i64 %t257, 0 + br i1 %t258, label %map.missing11233, label %map.found11234 +map.missing11233: + store { ptr, i64, i64 } zeroinitializer, ptr %a259 + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_buf_str(ptr %a259, ptr %a260, i32 1) + call void @finch_map_missing(ptr @.str.7246, i64 845, ptr %a259) + unreachable +map.found11234: + %t261 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t254, i32 0, i32 0 + %t262 = load ptr, ptr %t261 + %t263 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t262, i64 %t257 + %t264 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t263, i32 0, i32 2 + %t265 = load { ptr, i64, i64 }, ptr %t264 + store { ptr, i64, i64 } %t265, ptr %a266 + call void @finch_str_copy(ptr %a267, ptr %a266) + %t268 = load { ptr, i64, i64 }, ptr %a267 + %t269 = load { ptr, i64, i64 }, ptr %a248 + store { ptr, i64, i64 } %t268, ptr %a248 + store { ptr, i64, i64 } %t269, ptr %a270 + call void @finch_str_drop(ptr %a270) + br label %endif11232 +endif11232: + %t271 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t271, ptr %a272 + store { ptr, i64, i64 } { ptr @.str.7247, i64 18, i64 0 }, ptr %a273 + %t274 = call i32 @finch_str_eq(ptr %a272, ptr %a273) + %t275 = icmp ne i32 %t274, 0 + br i1 %t275, label %match.arm11236, label %match.next11237 +match.arm11236: + %t276 = load %S.json.Json, ptr %a9 + %t277 = load %S.lsp.Analysis, ptr %a247 + %t278 = load { ptr, i64, i64 }, ptr %a208 + %t279 = load i64, ptr %a215 + %t280 = load i64, ptr %a222 + %t281 = call %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %t277, { ptr, i64, i64 } %t278, i64 %t279, i64 %t280) + call void @finch.lsp.reply(%S.json.Json %t276, %S.json.Json %t281) + store %S.json.Json %t281, ptr %a282 + call void @finch.drop.S_json_Json(ptr %a282) + br label %match.end11235 +match.next11237: + store { ptr, i64, i64 } %t271, ptr %a283 + store { ptr, i64, i64 } { ptr @.str.7248, i64 23, i64 0 }, ptr %a284 + %t285 = call i32 @finch_str_eq(ptr %a283, ptr %a284) + %t286 = icmp ne i32 %t285, 0 + br i1 %t286, label %match.arm11238, label %match.next11239 +match.arm11238: + %t287 = load %S.json.Json, ptr %a9 + %t288 = load %S.lsp.Analysis, ptr %a247 + %t289 = load { ptr, i64, i64 }, ptr %a208 + %t290 = load i64, ptr %a215 + %t291 = load i64, ptr %a222 + %t292 = call %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %t288, { ptr, i64, i64 } %t289, i64 %t290, i64 %t291) + call void @finch.lsp.reply(%S.json.Json %t287, %S.json.Json %t292) + store %S.json.Json %t292, ptr %a293 + call void @finch.drop.S_json_Json(ptr %a293) + br label %match.end11235 +match.next11239: + store { ptr, i64, i64 } %t271, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.7249, i64 23, i64 0 }, ptr %a295 + %t296 = call i32 @finch_str_eq(ptr %a294, ptr %a295) + %t297 = icmp ne i32 %t296, 0 + br i1 %t297, label %match.arm11240, label %match.next11241 +match.arm11240: + %t298 = load %S.json.Json, ptr %a9 + %t299 = load %S.lsp.Analysis, ptr %a247 + %t300 = load { ptr, i64, i64 }, ptr %a248 + %t301 = load { ptr, i64, i64 }, ptr %a208 + %t302 = load i64, ptr %a215 + %t303 = load i64, ptr %a222 + %t304 = call %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %t299, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t301, i64 %t302, i64 %t303) + call void @finch.lsp.reply(%S.json.Json %t298, %S.json.Json %t304) + store %S.json.Json %t304, ptr %a305 + call void @finch.drop.S_json_Json(ptr %a305) + br label %match.end11235 +match.next11241: + store { ptr, i64, i64 } %t271, ptr %a306 + store { ptr, i64, i64 } { ptr @.str.7250, i64 27, i64 0 }, ptr %a307 + %t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307) + %t309 = icmp ne i32 %t308, 0 + br i1 %t309, label %match.arm11242, label %match.next11243 +match.arm11242: + %t310 = load %S.json.Json, ptr %a9 + %t311 = load %S.lsp.Analysis, ptr %a247 + %t312 = load { ptr, i64, i64 }, ptr %a208 + %t313 = call %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %t311, { ptr, i64, i64 } %t312) + call void @finch.lsp.reply(%S.json.Json %t310, %S.json.Json %t313) + store %S.json.Json %t313, ptr %a314 + call void @finch.drop.S_json_Json(ptr %a314) + br label %match.end11235 +match.next11243: + br label %match.arm11244 +match.arm11244: + %t315 = load %S.json.Json, ptr %a9 + %t316 = load %S.lsp.Analysis, ptr %a247 + %t317 = load { ptr, i64, i64 }, ptr %a248 + %t318 = load { ptr, i64, i64 }, ptr %a208 + %t319 = load i64, ptr %a215 + %t320 = load i64, ptr %a222 + %t321 = call %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %t316, { ptr, i64, i64 } %t317, { ptr, i64, i64 } %t318, i64 %t319, i64 %t320) + call void @finch.lsp.reply(%S.json.Json %t315, %S.json.Json %t321) + store %S.json.Json %t321, ptr %a322 + call void @finch.drop.S_json_Json(ptr %a322) + br label %match.end11235 +match.end11235: + call void @finch_str_drop(ptr %a248) + call void @finch.drop.S_lsp_Analysis(ptr %a247) + call void @finch_str_drop(ptr %a208) + br label %match.end11188 +match.next11220: + br label %match.arm11246 +match.arm11246: + %t323 = getelementptr inbounds %S.json.Json, ptr %a9, i32 0, i32 0 + %t324 = load i32, ptr %t323 + %t325 = icmp ne i32 %t324, 0 + br i1 %t325, label %then11248, label %endif11250 +then11248: + %t326 = load %S.json.Json, ptr %a9 + %t327 = call %S.json.Json @finch.json.new_null() + call void @finch.lsp.reply(%S.json.Json %t326, %S.json.Json %t327) + store %S.json.Json %t327, ptr %a328 + call void @finch.drop.S_json_Json(ptr %a328) + br label %endif11250 +endif11250: + br label %match.end11188 +match.end11188: + call void @finch.drop.S_json_Json(ptr %a9) + call void @finch.drop.S_json_Json(ptr %a7) + call void @finch_str_drop(ptr %a5) + ret void +} + +define internal void @finch.drop.map_str_S_lsp_Analysis(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond11256 +n.cond11256: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body11257, label %n.end11258 +n.body11257: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live11259, label %entry.next11260 +entry.live11259: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_lsp_Analysis(ptr %t13) + br label %entry.next11260 +entry.next11260: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond11256 +n.end11258: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_Server(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 2 + call void @finch.drop.map_str_str(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 3 + call void @finch.drop.map_str_S_lsp_Analysis(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 4 + call void @finch.drop.map_str_S_lsp_Analysis(ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + ret void +} + +define internal i64 @finch.lsp.run({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca %S.lsp.Server, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + call void @finch.host.binaryStdio() + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.lsp.Server zeroinitializer, { ptr, i64, i64 } %t5, 0 + %t7 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.7251, i64 11, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + %t13 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a14, i64 %t13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a16 + %t22 = insertvalue %S.lsp.Server %t6, { ptr, i64, i64 } %t21, 1 + store %S.lsp.Server %t22, ptr %a23 + br label %while.cond11251 +while.cond11251: + br label %while.body11252 +while.body11252: + %t24 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() + %t25 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 0 + %t26 = xor i1 %t25, true + %t27 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 2 + %t28 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 1 + br i1 %t26, label %or.failed11254, label %or.ok11255 +or.failed11254: + store { ptr, i64, i64 } %t27, ptr %a29 + call void @finch_str_drop(ptr %a29) + br label %while.end11253 +or.ok11255: + store %S.json.Json %t28, ptr %a30 + %t31 = load %S.json.Json, ptr %a30 + call void @finch.lsp.Server.answer(ptr %a23, %S.json.Json %t31) + call void @finch.drop.S_json_Json(ptr %a30) + br label %while.cond11251 +while.end11253: + %t32 = getelementptr inbounds %S.lsp.Server, ptr %a23, i32 0, i32 1 + %t33 = load { ptr, i64, i64 }, ptr %t32 + call void @finch.host.removeTree({ ptr, i64, i64 } %t33) + call void @finch.drop.S_lsp_Server(ptr %a23) + ret i64 0 +} + +define internal %S.json.Json @finch.json.new_null() { +entry: + + %t1 = insertvalue %S.json.Json zeroinitializer, i32 0, 0 + ret %S.json.Json %t1 +} + +define internal %S.json.Json @finch.json.new_bool(i1 %p0) { +entry: + %a1 = alloca i1, align 16 + store i1 %p0, ptr %a1 + %t2 = insertvalue %S.json.Json zeroinitializer, i32 1, 0 + %t3 = load i1, ptr %a1 + %t4 = insertvalue %S.json.Json %t2, i1 %t3, 1 + ret %S.json.Json %t4 +} + +define internal %S.json.Json @finch.json.new_number(double %p0) { +entry: + %a1 = alloca double, align 16 + store double %p0, ptr %a1 + %t2 = insertvalue %S.json.Json zeroinitializer, i32 2, 0 + %t3 = load double, ptr %a1 + %t4 = insertvalue %S.json.Json %t2, double %t3, 2 + ret %S.json.Json %t4 +} + +define internal %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = insertvalue %S.json.Json zeroinitializer, i32 3, 0 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + %t7 = insertvalue %S.json.Json %t2, { ptr, i64, i64 } %t6, 3 + ret %S.json.Json %t7 +} + +define internal %S.json.Json @finch.json.new_list() { +entry: + + %t1 = insertvalue %S.json.Json zeroinitializer, i32 4, 0 + ret %S.json.Json %t1 +} + +define internal %S.json.Json @finch.json.new_object() { +entry: + + %t1 = insertvalue %S.json.Json zeroinitializer, i32 5, 0 + ret %S.json.Json %t1 +} + +define internal i1 @finch.json.Json.is_null(ptr %self) { +entry: + + %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t2 = load i32, ptr %t1 + %t3 = icmp eq i32 %t2, 0 + ret i1 %t3 +} + +define internal i64 @finch.json.Json.len(ptr %self) { +entry: + + %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t2 = load i32, ptr %t1 + %t3 = icmp eq i32 %t2, 4 + br i1 %t3, label %match.arm11262, label %match.or11264 +match.or11264: + %t4 = icmp eq i32 %t2, 5 + br i1 %t4, label %match.arm11262, label %match.next11263 +match.arm11262: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + br label %match.from11265 +match.from11265: + br label %match.end11261 +match.next11263: + %t8 = icmp eq i32 %t2, 3 + br i1 %t8, label %match.arm11266, label %match.next11267 +match.arm11266: + %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load i64, ptr %t10 + br label %match.from11268 +match.from11268: + br label %match.end11261 +match.next11267: + br label %match.arm11269 +match.arm11269: + br label %match.from11271 +match.from11271: + br label %match.end11261 +match.end11261: + %t12 = phi i64 [ %t7, %match.from11265 ], [ %t11, %match.from11268 ], [ 0, %match.from11271 ] + ret i64 %t12 +} + +define internal i1 @finch.json.Json.has(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 5 + br label %logic.from11272 +logic.from11272: + br i1 %t4, label %logic.rhs11273, label %logic.end11274 +logic.rhs11273: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a8 + %t9 = load i64, ptr %t6 + %t10 = load ptr, ptr %t5 + store i64 0, ptr %a11 + br label %find.cond11275 +find.cond11275: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t9 + br i1 %t13, label %find.body11276, label %find.end11279 +find.body11276: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } %t7, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %find.hit11277, label %find.next11278 +find.hit11277: + store i64 %t12, ptr %a8 + br label %find.end11279 +find.next11278: + %t20 = add i64 %t12, 1 + store i64 %t20, ptr %a11 + br label %find.cond11275 +find.end11279: + %t21 = load i64, ptr %a8 + %t22 = icmp sge i64 %t21, 0 + br label %logic.rend11280 +logic.rend11280: + br label %logic.end11274 +logic.end11274: + %t23 = phi i1 [ false, %logic.from11272 ], [ %t22, %logic.rend11280 ] + ret i1 %t23 +} + +define internal void @finch.copy.arr_S_json_Json(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond11294 +n.cond11294: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body11295, label %n.end11296 +n.body11295: + %t8 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.json.Json, ptr %t2, i64 %t6 + call void @finch.copy.S_json_Json(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond11294 +n.end11296: + ret void +} + +define internal void @finch.copy.S_json_Json(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.json.Json, ptr %src + store %S.json.Json %t1, ptr %dst + %t2 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 3 + %t3 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 4 + %t5 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_S_json_Json(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 5 + %t7 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + ret void +} + +define internal %S.json.Json @finch.json.Json.get(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a12 = alloca i64, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca i64, align 16 + %a35 = alloca %S.json.Json, align 16 + %a36 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp ne i32 %t3, 5 + br i1 %t4, label %then11281, label %endif11283 +then11281: + %t5 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t5 +endif11283: + %t6 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a9 + %t10 = load i64, ptr %t7 + %t11 = load ptr, ptr %t6 + store i64 0, ptr %a12 + br label %find.cond11284 +find.cond11284: + %t13 = load i64, ptr %a12 + %t14 = icmp slt i64 %t13, %t10 + br i1 %t14, label %find.body11285, label %find.end11288 +find.body11285: + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i64 %t13 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } %t8, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br i1 %t20, label %find.hit11286, label %find.next11287 +find.hit11286: + store i64 %t13, ptr %a9 + br label %find.end11288 +find.next11287: + %t21 = add i64 %t13, 1 + store i64 %t21, ptr %a12 + br label %find.cond11284 +find.end11288: + %t22 = load i64, ptr %a9 + store i64 %t22, ptr %a23 + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, 0 + br i1 %t25, label %then11289, label %endif11291 +then11289: + %t26 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t26 +endif11291: + %t27 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t28 = load i64, ptr %a23 + %t29 = load { ptr, i64, i64 }, ptr %t27 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range11292, label %inrange11293 +range11292: + call void @finch_panic_index(ptr @.str.7252, i64 84, i64 %t28, i64 %t30) + unreachable +inrange11293: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.json.Json, ptr %t32, i64 %t28 + %t34 = load %S.json.Json, ptr %t33 + store %S.json.Json %t34, ptr %a35 + call void @finch.copy.S_json_Json(ptr %a36, ptr %a35) + %t37 = load %S.json.Json, ptr %a36 + ret %S.json.Json %t37 +} + +define internal %S.json.Json @finch.json.Json.at(ptr %self, i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a23 = alloca %S.json.Json, align 16 + %a24 = alloca %S.json.Json, align 16 + store i64 %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp ne i32 %t3, 4 + br label %logic.from11297 +logic.from11297: + br i1 %t4, label %logic.end11299, label %logic.rhs11298 +logic.rhs11298: + %t5 = load i64, ptr %a1 + %t6 = icmp slt i64 %t5, 0 + br label %logic.rend11300 +logic.rend11300: + br label %logic.end11299 +logic.end11299: + %t7 = phi i1 [ true, %logic.from11297 ], [ %t6, %logic.rend11300 ] + br label %logic.from11301 +logic.from11301: + br i1 %t7, label %logic.end11303, label %logic.rhs11302 +logic.rhs11302: + %t8 = load i64, ptr %a1 + %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = icmp sge i64 %t8, %t11 + br label %logic.rend11304 +logic.rend11304: + br label %logic.end11303 +logic.end11303: + %t13 = phi i1 [ true, %logic.from11301 ], [ %t12, %logic.rend11304 ] + br i1 %t13, label %then11305, label %endif11307 +then11305: + %t14 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t14 +endif11307: + %t15 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t16 = load i64, ptr %a1 + %t17 = load { ptr, i64, i64 }, ptr %t15 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range11308, label %inrange11309 +range11308: + call void @finch_panic_index(ptr @.str.7253, i64 92, i64 %t16, i64 %t18) + unreachable +inrange11309: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.json.Json, ptr %t20, i64 %t16 + %t22 = load %S.json.Json, ptr %t21 + store %S.json.Json %t22, ptr %a23 + call void @finch.copy.S_json_Json(ptr %a24, ptr %a23) + %t25 = load %S.json.Json, ptr %a24 + ret %S.json.Json %t25 +} + +define internal { ptr, i64, i64 } @finch.json.Json.str_or(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 3 + br i1 %t4, label %then11310, label %endif11312 +then11310: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + ret { ptr, i64, i64 } %t9 +endif11312: + %t10 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + ret { ptr, i64, i64 } %t13 +} + +define internal double @finch.json.Json.float_or(ptr %self, double %p0) { +entry: + %a1 = alloca double, align 16 + store double %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 2 + br i1 %t4, label %then11313, label %endif11315 +then11313: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 + %t6 = load double, ptr %t5 + ret double %t6 +endif11315: + %t7 = load double, ptr %a1 + ret double %t7 +} + +define internal i64 @finch.json.Json.int_or(ptr %self, i64 %p0) { +entry: + %a1 = alloca i64, align 16 + store i64 %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 2 + br i1 %t4, label %then11316, label %endif11318 +then11316: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 + %t6 = load double, ptr %t5 + %t7 = fptosi double %t6 to i64 + ret i64 %t7 +endif11318: + %t8 = load i64, ptr %a1 + ret i64 %t8 +} + +define internal i1 @finch.json.Json.bool_or(ptr %self, i1 %p0) { +entry: + %a1 = alloca i1, align 16 + store i1 %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 1 + br i1 %t4, label %then11319, label %endif11321 +then11319: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 1 + %t6 = load i1, ptr %t5 + ret i1 %t6 +endif11321: + %t7 = load i1, ptr %a1 + ret i1 %t7 +} + +define internal { ptr, i64, i64 } @finch.json.Json.names(ptr %self) { +entry: + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t2 = load { ptr, i64, i64 }, ptr %t1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch.copy.arr_str(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + ret { ptr, i64, i64 } %t5 +} + +define internal void @finch.json.Json.push(ptr %self, %S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + %a6 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 + %t4 = load %S.json.Json, ptr %a1 + store %S.json.Json %t4, ptr %a5 + call void @finch.copy.S_json_Json(ptr %a6, ptr %a5) + %t7 = load %S.json.Json, ptr %a6 + %t8 = load i64, ptr %t3 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %t2, i64 %t9, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %t2 + %t11 = getelementptr inbounds %S.json.Json, ptr %t10, i64 %t8 + store %S.json.Json %t7, ptr %t11 + store i64 %t9, ptr %t3 + ret void +} + +define internal void @finch.json.Json.set(ptr %self, { ptr, i64, i64 } %p0, %S.json.Json %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.json.Json, align 16 + %a6 = alloca i64, align 16 + %a9 = alloca i64, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca i64, align 16 + %a31 = alloca %S.json.Json, align 16 + %a32 = alloca %S.json.Json, align 16 + %a35 = alloca %S.json.Json, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.json.Json, align 16 + %a50 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.json.Json %p1, ptr %a2 + %t3 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 + %t5 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a6 + %t7 = load i64, ptr %t4 + %t8 = load ptr, ptr %t3 + store i64 0, ptr %a9 + br label %find.cond11322 +find.cond11322: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t7 + br i1 %t11, label %find.body11323, label %find.end11326 +find.body11323: + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t10 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } %t5, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br i1 %t17, label %find.hit11324, label %find.next11325 +find.hit11324: + store i64 %t10, ptr %a6 + br label %find.end11326 +find.next11325: + %t18 = add i64 %t10, 1 + store i64 %t18, ptr %a9 + br label %find.cond11322 +find.end11326: + %t19 = load i64, ptr %a6 + store i64 %t19, ptr %a20 + %t21 = load i64, ptr %a20 + %t22 = icmp sge i64 %t21, 0 + br i1 %t22, label %then11327, label %endif11329 +then11327: + %t23 = load %S.json.Json, ptr %a2 + %t24 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t25 = load i64, ptr %a20 + %t26 = load { ptr, i64, i64 }, ptr %t24 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 %t25, %t27 + br i1 %t28, label %range11330, label %inrange11331 +range11330: + call void @finch_panic_index(ptr @.str.7254, i64 140, i64 %t25, i64 %t27) + unreachable +inrange11331: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds %S.json.Json, ptr %t29, i64 %t25 + store %S.json.Json %t23, ptr %a31 + call void @finch.copy.S_json_Json(ptr %a32, ptr %a31) + %t33 = load %S.json.Json, ptr %a32 + %t34 = load %S.json.Json, ptr %t30 + store %S.json.Json %t33, ptr %t30 + store %S.json.Json %t34, ptr %a35 + call void @finch.drop.S_json_Json(ptr %a35) + ret void +endif11329: + %t36 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_copy(ptr %a40, ptr %a39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + %t42 = load i64, ptr %t37 + %t43 = add i64 %t42, 1 + call void @finch_arr_reserve(ptr %t36, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t44 = load ptr, ptr %t36 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 + store { ptr, i64, i64 } %t41, ptr %t45 + store i64 %t43, ptr %t37 + %t46 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 + %t48 = load %S.json.Json, ptr %a2 + store %S.json.Json %t48, ptr %a49 + call void @finch.copy.S_json_Json(ptr %a50, ptr %a49) + %t51 = load %S.json.Json, ptr %a50 + %t52 = load i64, ptr %t47 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %t46, i64 %t53, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %t46 + %t55 = getelementptr inbounds %S.json.Json, ptr %t54, i64 %t52 + store %S.json.Json %t51, ptr %t55 + store i64 %t53, ptr %t47 + ret void +} + +define internal { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a17 = alloca i8, align 16 + %a20 = alloca i64, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.7255, i64 1, i64 0 }, ptr %t4 + %t5 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t6 = insertvalue { ptr, i64, i64 } %t5, i64 1, 1 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 2 + store { ptr, i64, i64 } %t7, ptr %a8 + store i64 0, ptr %a9 + br label %each.cond11332 +each.cond11332: + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = load i64, ptr %a9 + %t13 = icmp slt i64 %t12, %t11 + br i1 %t13, label %each.body11333, label %each.end11335 +each.body11333: + %t14 = load ptr, ptr %a1 + %t15 = getelementptr inbounds i8, ptr %t14, i64 %t12 + %t16 = load i8, ptr %t15 + store i8 %t16, ptr %a17 + %t18 = load i8, ptr %a17 + %t19 = zext i8 %t18 to i64 + store i64 %t19, ptr %a20 + %t21 = load i8, ptr %a17 + %t22 = icmp eq i8 %t21, 34 + br i1 %t22, label %then11336, label %else11337 +then11336: + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = add i64 %t24, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t25, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t26 = load ptr, ptr %a8 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t24 + store { ptr, i64, i64 } { ptr @.str.7256, i64 2, i64 0 }, ptr %t27 + store i64 %t25, ptr %t23 + br label %endif11338 +else11337: + %t28 = load i8, ptr %a17 + %t29 = icmp eq i8 %t28, 92 + br i1 %t29, label %then11339, label %else11340 +then11339: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %a8 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } { ptr @.str.7257, i64 2, i64 0 }, ptr %t34 + store i64 %t32, ptr %t30 + br label %endif11341 +else11340: + %t35 = load i8, ptr %a17 + %t36 = icmp eq i8 %t35, 10 + br i1 %t36, label %then11342, label %else11343 +then11342: + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t40 = load ptr, ptr %a8 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 + store { ptr, i64, i64 } { ptr @.str.7258, i64 2, i64 0 }, ptr %t41 + store i64 %t39, ptr %t37 + br label %endif11344 +else11343: + %t42 = load i8, ptr %a17 + %t43 = icmp eq i8 %t42, 13 + br i1 %t43, label %then11345, label %else11346 +then11345: + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = add i64 %t45, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t47 = load ptr, ptr %a8 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 + store { ptr, i64, i64 } { ptr @.str.7259, i64 2, i64 0 }, ptr %t48 + store i64 %t46, ptr %t44 + br label %endif11347 +else11346: + %t49 = load i8, ptr %a17 + %t50 = icmp eq i8 %t49, 9 + br i1 %t50, label %then11348, label %else11349 +then11348: + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %a8 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 + store { ptr, i64, i64 } { ptr @.str.7260, i64 2, i64 0 }, ptr %t55 + store i64 %t53, ptr %t51 + br label %endif11350 +else11349: + %t56 = load i64, ptr %a20 + %t57 = icmp slt i64 %t56, 32 + br i1 %t57, label %then11351, label %else11352 +then11351: + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t59 = load i64, ptr %a20 + %t60 = sdiv i64 %t59, 16 + %t61 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t60) + store { ptr, i64, i64 } { ptr @.str.7261, i64 4, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = load i64, ptr %a20 + %t68 = srem i64 %t67, 16 + %t69 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t68) + store { ptr, i64, i64 } %t66, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t66, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t69, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a70 + %t76 = load i64, ptr %t58 + %t77 = add i64 %t76, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t77, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t78 = load ptr, ptr %a8 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 %t76 + store { ptr, i64, i64 } %t75, ptr %t79 + store i64 %t77, ptr %t58 + br label %endif11353 +else11352: + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t81 = load i8, ptr %a17 + call void @finch_str_from_char(ptr %a82, i8 signext %t81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = load i64, ptr %t80 + %t85 = add i64 %t84, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t85, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t86 = load ptr, ptr %a8 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 %t84 + store { ptr, i64, i64 } %t83, ptr %t87 + store i64 %t85, ptr %t80 + br label %endif11353 +endif11353: + br label %endif11350 +endif11350: + br label %endif11347 +endif11347: + br label %endif11344 +endif11344: + br label %endif11341 +endif11341: + br label %endif11338 +endif11338: + br label %each.step11334 +each.step11334: + %t88 = load i64, ptr %a9 + %t89 = add i64 %t88, 1 + store i64 %t89, ptr %a9 + br label %each.cond11332 +each.end11335: + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t91 = load i64, ptr %t90 + %t92 = add i64 %t91, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t92, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t93 = load ptr, ptr %a8 + %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91 + store { ptr, i64, i64 } { ptr @.str.7262, i64 1, i64 0 }, ptr %t94 + store i64 %t92, ptr %t90 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7263, i64 0, i64 0 }, ptr %a96 + call void @finch_str_join(ptr %a97, ptr %a8, ptr %a96) + %t98 = load { ptr, i64, i64 }, ptr %a97 + call void @finch.drop.arr_str(ptr %a8) + ret { ptr, i64, i64 } %t98 +} + +define internal { ptr, i64, i64 } @finch.json.hexdigit(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.7264, i64 16, i64 0 }, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 %t3, %t5 + br i1 %t6, label %range11354, label %inrange11355 +range11354: + call void @finch_panic_index(ptr @.str.7265, i64 175, i64 %t3, i64 %t5) + unreachable +inrange11355: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds i8, ptr %t7, i64 %t3 + %t9 = load i8, ptr %t8 + call void @finch_str_from_char(ptr %a10, i8 signext %t9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + call void @finch_str_drop(ptr %a2) + ret { ptr, i64, i64 } %t11 +} + +define internal { ptr, i64, i64 } @finch.json.number_text(double %p0) { +entry: + %a1 = alloca double, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store double %p0, ptr %a1 + %t2 = load double, ptr %a1 + %t3 = load double, ptr %a1 + %t4 = fptosi double %t3 to i64 + %t5 = sitofp i64 %t4 to double + %t6 = fcmp oeq double %t2, %t5 + br label %logic.from11356 +logic.from11356: + br i1 %t6, label %logic.rhs11357, label %logic.end11358 +logic.rhs11357: + %t7 = load double, ptr %a1 + %t8 = fneg double 1000000000000000.0 + %t9 = fcmp ogt double %t7, %t8 + br label %logic.rend11359 +logic.rend11359: + br label %logic.end11358 +logic.end11358: + %t10 = phi i1 [ false, %logic.from11356 ], [ %t9, %logic.rend11359 ] + br label %logic.from11360 +logic.from11360: + br i1 %t10, label %logic.rhs11361, label %logic.end11362 +logic.rhs11361: + %t11 = load double, ptr %a1 + %t12 = fcmp olt double %t11, 1000000000000000.0 + br label %logic.rend11363 +logic.rend11363: + br label %logic.end11362 +logic.end11362: + %t13 = phi i1 [ false, %logic.from11360 ], [ %t12, %logic.rend11363 ] + br i1 %t13, label %then11364, label %endif11366 +then11364: + %t14 = load double, ptr %a1 + %t15 = fptosi double %t14 to i64 + call void @finch_str_from_int(ptr %a16, i64 %t15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t17 +endif11366: + %t18 = load double, ptr %a1 + call void @finch_str_from_float(ptr %a19, double %t18) + %t20 = load { ptr, i64, i64 }, ptr %a19 + ret { ptr, i64, i64 } %t20 +} + +define internal void @finch.json.write(%S.json.Json %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, ptr %p3) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca ptr, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca i64, align 16 + %a113 = alloca i64, align 16 + %a114 = alloca %S.json.Json, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca i64, align 16 + %a203 = alloca i64, align 16 + %a204 = alloca %S.json.Json, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store ptr %p3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.7266, i64 0, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7267, i64 0, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7268, i64 1, i64 0 }, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.7269, i64 1, i64 0 }, ptr %a8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp sgt i64 %t10, 0 + br i1 %t11, label %then11367, label %endif11369 +then11367: + %t12 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7270, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a3 + %t15 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + %t20 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t19, ptr %a6 + store { ptr, i64, i64 } %t20, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.7271, i64 2, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_drop(ptr %a23) + br label %endif11369 +endif11369: + %t24 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 0 + %t25 = load i32, ptr %t24 + %t26 = icmp eq i32 %t25, 0 + br i1 %t26, label %match.arm11371, label %match.next11372 +match.arm11371: + %t27 = load ptr, ptr %a4 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic11373, label %ok11374 +panic11373: + call void @finch_panic(ptr @.str.7272, i64 200, ptr @.str.7273) + unreachable +ok11374: + %t29 = getelementptr inbounds %S.json.Writer, ptr %t27, i32 0, i32 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %t29, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %t29 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } { ptr @.str.7274, i64 4, i64 0 }, ptr %t34 + store i64 %t32, ptr %t30 + br label %match.end11370 +match.next11372: + %t35 = icmp eq i32 %t25, 1 + br i1 %t35, label %match.arm11375, label %match.next11376 +match.arm11375: + %t36 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 1 + %t37 = load i1, ptr %t36 + br i1 %t37, label %then11377, label %else11378 +then11377: + %t38 = load ptr, ptr %a4 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic11380, label %ok11381 +panic11380: + call void @finch_panic(ptr @.str.7275, i64 203, ptr @.str.7276) + unreachable +ok11381: + %t40 = getelementptr inbounds %S.json.Writer, ptr %t38, i32 0, i32 0 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = add i64 %t42, 1 + call void @finch_arr_reserve(ptr %t40, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t44 = load ptr, ptr %t40 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 + store { ptr, i64, i64 } { ptr @.str.7277, i64 4, i64 0 }, ptr %t45 + store i64 %t43, ptr %t41 + br label %endif11379 +else11378: + %t46 = load ptr, ptr %a4 + %t47 = icmp eq ptr %t46, null + br i1 %t47, label %panic11382, label %ok11383 +panic11382: + call void @finch_panic(ptr @.str.7278, i64 205, ptr @.str.7279) + unreachable +ok11383: + %t48 = getelementptr inbounds %S.json.Writer, ptr %t46, i32 0, i32 0 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 + %t50 = load i64, ptr %t49 + %t51 = add i64 %t50, 1 + call void @finch_arr_reserve(ptr %t48, i64 %t51, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t52 = load ptr, ptr %t48 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t50 + store { ptr, i64, i64 } { ptr @.str.7280, i64 5, i64 0 }, ptr %t53 + store i64 %t51, ptr %t49 + br label %endif11379 +endif11379: + br label %match.end11370 +match.next11376: + %t54 = icmp eq i32 %t25, 2 + br i1 %t54, label %match.arm11384, label %match.next11385 +match.arm11384: + %t55 = load ptr, ptr %a4 + %t56 = icmp eq ptr %t55, null + br i1 %t56, label %panic11386, label %ok11387 +panic11386: + call void @finch_panic(ptr @.str.7281, i64 208, ptr @.str.7282) + unreachable +ok11387: + %t57 = getelementptr inbounds %S.json.Writer, ptr %t55, i32 0, i32 0 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 + %t59 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 2 + %t60 = load double, ptr %t59 + %t61 = call { ptr, i64, i64 } @finch.json.number_text(double %t60) + %t62 = load i64, ptr %t58 + %t63 = add i64 %t62, 1 + call void @finch_arr_reserve(ptr %t57, i64 %t63, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t64 = load ptr, ptr %t57 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62 + store { ptr, i64, i64 } %t61, ptr %t65 + store i64 %t63, ptr %t58 + br label %match.end11370 +match.next11385: + %t66 = icmp eq i32 %t25, 3 + br i1 %t66, label %match.arm11388, label %match.next11389 +match.arm11388: + %t67 = load ptr, ptr %a4 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic11390, label %ok11391 +panic11390: + call void @finch_panic(ptr @.str.7283, i64 209, ptr @.str.7284) + unreachable +ok11391: + %t69 = getelementptr inbounds %S.json.Writer, ptr %t67, i32 0, i32 0 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 + %t71 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 3 + %t72 = load { ptr, i64, i64 }, ptr %t71 + %t73 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t72) + %t74 = load i64, ptr %t70 + %t75 = add i64 %t74, 1 + call void @finch_arr_reserve(ptr %t69, i64 %t75, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t76 = load ptr, ptr %t69 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 + store { ptr, i64, i64 } %t73, ptr %t77 + store i64 %t75, ptr %t70 + br label %match.end11370 +match.next11389: + %t78 = icmp eq i32 %t25, 4 + br i1 %t78, label %match.arm11392, label %match.next11393 +match.arm11392: + %t79 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 + %t81 = load i64, ptr %t80 + %t82 = icmp eq i64 %t81, 0 + br i1 %t82, label %then11394, label %endif11396 +then11394: + %t83 = load ptr, ptr %a4 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic11397, label %ok11398 +panic11397: + call void @finch_panic(ptr @.str.7285, i64 212, ptr @.str.7286) + unreachable +ok11398: + %t85 = getelementptr inbounds %S.json.Writer, ptr %t83, i32 0, i32 0 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %t85, i64 %t88, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %t85 + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i64 %t87 + store { ptr, i64, i64 } { ptr @.str.7287, i64 2, i64 0 }, ptr %t90 + store i64 %t88, ptr %t86 + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a7) + call void @finch_str_drop(ptr %a6) + call void @finch_str_drop(ptr %a5) + ret void +endif11396: + %t91 = load ptr, ptr %a4 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic11399, label %ok11400 +panic11399: + call void @finch_panic(ptr @.str.7288, i64 215, ptr @.str.7289) + unreachable +ok11400: + %t93 = getelementptr inbounds %S.json.Writer, ptr %t91, i32 0, i32 0 + %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 + %t95 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7290, i64 1, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a96 + %t100 = load i64, ptr %t94 + %t101 = add i64 %t100, 1 + call void @finch_arr_reserve(ptr %t93, i64 %t101, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t102 = load ptr, ptr %t93 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t100 + store { ptr, i64, i64 } %t99, ptr %t103 + store i64 %t101, ptr %t94 + %t104 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a105 + br label %each.cond11401 +each.cond11401: + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t107 = load i64, ptr %t106 + %t108 = load i64, ptr %a105 + %t109 = icmp slt i64 %t108, %t107 + br i1 %t109, label %each.body11402, label %each.end11404 +each.body11402: + %t110 = load ptr, ptr %t104 + %t111 = getelementptr inbounds %S.json.Json, ptr %t110, i64 %t108 + %t112 = load %S.json.Json, ptr %t111 + store i64 %t108, ptr %a113 + store %S.json.Json %t112, ptr %a114 + %t115 = load i64, ptr %a113 + %t116 = icmp sgt i64 %t115, 0 + br i1 %t116, label %then11405, label %endif11407 +then11405: + %t117 = load ptr, ptr %a4 + %t118 = icmp eq ptr %t117, null + br i1 %t118, label %panic11408, label %ok11409 +panic11408: + call void @finch_panic(ptr @.str.7291, i64 218, ptr @.str.7292) + unreachable +ok11409: + %t119 = getelementptr inbounds %S.json.Writer, ptr %t117, i32 0, i32 0 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %a7 + %t122 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t121, ptr %a124 + store { ptr, i64, i64 } %t122, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a123 + %t127 = load i64, ptr %t120 + %t128 = add i64 %t127, 1 + call void @finch_arr_reserve(ptr %t119, i64 %t128, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t129 = load ptr, ptr %t119 + %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i64 %t127 + store { ptr, i64, i64 } %t126, ptr %t130 + store i64 %t128, ptr %t120 + br label %endif11407 +endif11407: + %t131 = load ptr, ptr %a4 + %t132 = icmp eq ptr %t131, null + br i1 %t132, label %panic11410, label %ok11411 +panic11410: + call void @finch_panic(ptr @.str.7293, i64 220, ptr @.str.7294) + unreachable +ok11411: + %t133 = getelementptr inbounds %S.json.Writer, ptr %t131, i32 0, i32 0 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_copy(ptr %a137, ptr %a136) + %t138 = load { ptr, i64, i64 }, ptr %a137 + %t139 = load i64, ptr %t134 + %t140 = add i64 %t139, 1 + call void @finch_arr_reserve(ptr %t133, i64 %t140, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t141 = load ptr, ptr %t133 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i64 %t139 + store { ptr, i64, i64 } %t138, ptr %t142 + store i64 %t140, ptr %t134 + %t143 = load %S.json.Json, ptr %a114 + %t144 = load { ptr, i64, i64 }, ptr %a2 + %t145 = load { ptr, i64, i64 }, ptr %a6 + %t146 = load ptr, ptr %a4 + call void @finch.json.write(%S.json.Json %t143, { ptr, i64, i64 } %t144, { ptr, i64, i64 } %t145, ptr %t146) + br label %each.step11403 +each.step11403: + %t147 = load i64, ptr %a105 + %t148 = add i64 %t147, 1 + store i64 %t148, ptr %a105 + br label %each.cond11401 +each.end11404: + %t149 = load ptr, ptr %a4 + %t150 = icmp eq ptr %t149, null + br i1 %t150, label %panic11412, label %ok11413 +panic11412: + call void @finch_panic(ptr @.str.7295, i64 223, ptr @.str.7296) + unreachable +ok11413: + %t151 = getelementptr inbounds %S.json.Writer, ptr %t149, i32 0, i32 0 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load { ptr, i64, i64 }, ptr %a5 + %t154 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t153, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t158, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.7297, i64 1, i64 0 }, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t158, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a159 + %t164 = load i64, ptr %t152 + %t165 = add i64 %t164, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t165, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t166 = load ptr, ptr %t151 + %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i64 %t164 + store { ptr, i64, i64 } %t163, ptr %t167 + store i64 %t165, ptr %t152 + br label %match.end11370 +match.next11393: + %t168 = icmp eq i32 %t25, 5 + br i1 %t168, label %match.arm11414, label %match.next11415 +match.arm11414: + %t169 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 + %t171 = load i64, ptr %t170 + %t172 = icmp eq i64 %t171, 0 + br i1 %t172, label %then11416, label %endif11418 +then11416: + %t173 = load ptr, ptr %a4 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic11419, label %ok11420 +panic11419: + call void @finch_panic(ptr @.str.7298, i64 227, ptr @.str.7299) + unreachable +ok11420: + %t175 = getelementptr inbounds %S.json.Writer, ptr %t173, i32 0, i32 0 + %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i32 0, i32 1 + %t177 = load i64, ptr %t176 + %t178 = add i64 %t177, 1 + call void @finch_arr_reserve(ptr %t175, i64 %t178, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t179 = load ptr, ptr %t175 + %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t177 + store { ptr, i64, i64 } { ptr @.str.7300, i64 2, i64 0 }, ptr %t180 + store i64 %t178, ptr %t176 + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a7) + call void @finch_str_drop(ptr %a6) + call void @finch_str_drop(ptr %a5) + ret void +endif11418: + %t181 = load ptr, ptr %a4 + %t182 = icmp eq ptr %t181, null + br i1 %t182, label %panic11421, label %ok11422 +panic11421: + call void @finch_panic(ptr @.str.7301, i64 230, ptr @.str.7302) + unreachable +ok11422: + %t183 = getelementptr inbounds %S.json.Writer, ptr %t181, i32 0, i32 0 + %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 + %t185 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7303, i64 1, i64 0 }, ptr %a187 + store { ptr, i64, i64 } %t185, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + %t189 = load { ptr, i64, i64 }, ptr %a186 + %t190 = load i64, ptr %t184 + %t191 = add i64 %t190, 1 + call void @finch_arr_reserve(ptr %t183, i64 %t191, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t192 = load ptr, ptr %t183 + %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t192, i64 %t190 + store { ptr, i64, i64 } %t189, ptr %t193 + store i64 %t191, ptr %t184 + %t194 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a195 + br label %each.cond11423 +each.cond11423: + %t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 + %t197 = load i64, ptr %t196 + %t198 = load i64, ptr %a195 + %t199 = icmp slt i64 %t198, %t197 + br i1 %t199, label %each.body11424, label %each.end11426 +each.body11424: + %t200 = load ptr, ptr %t194 + %t201 = getelementptr inbounds %S.json.Json, ptr %t200, i64 %t198 + %t202 = load %S.json.Json, ptr %t201 + store i64 %t198, ptr %a203 + store %S.json.Json %t202, ptr %a204 + %t205 = load i64, ptr %a203 + %t206 = icmp sgt i64 %t205, 0 + br i1 %t206, label %then11427, label %endif11429 +then11427: + %t207 = load ptr, ptr %a4 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic11430, label %ok11431 +panic11430: + call void @finch_panic(ptr @.str.7304, i64 233, ptr @.str.7305) + unreachable +ok11431: + %t209 = getelementptr inbounds %S.json.Writer, ptr %t207, i32 0, i32 0 + %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 + %t211 = load { ptr, i64, i64 }, ptr %a7 + %t212 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t211, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a213 + %t217 = load i64, ptr %t210 + %t218 = add i64 %t217, 1 + call void @finch_arr_reserve(ptr %t209, i64 %t218, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t219 = load ptr, ptr %t209 + %t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %t219, i64 %t217 + store { ptr, i64, i64 } %t216, ptr %t220 + store i64 %t218, ptr %t210 + br label %endif11429 +endif11429: + %t221 = load ptr, ptr %a4 + %t222 = icmp eq ptr %t221, null + br i1 %t222, label %panic11432, label %ok11433 +panic11432: + call void @finch_panic(ptr @.str.7306, i64 235, ptr @.str.7307) + unreachable +ok11433: + %t223 = getelementptr inbounds %S.json.Writer, ptr %t221, i32 0, i32 0 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 + %t225 = load { ptr, i64, i64 }, ptr %a6 + %t226 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 5 + %t227 = load i64, ptr %a203 + %t228 = load { ptr, i64, i64 }, ptr %t226 + %t229 = extractvalue { ptr, i64, i64 } %t228, 1 + %t230 = icmp uge i64 %t227, %t229 + br i1 %t230, label %range11434, label %inrange11435 +range11434: + call void @finch_panic_index(ptr @.str.7308, i64 235, i64 %t227, i64 %t229) + unreachable +inrange11435: + %t231 = extractvalue { ptr, i64, i64 } %t228, 0 + %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i64 %t227 + %t233 = load { ptr, i64, i64 }, ptr %t232 + %t234 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t233) + store { ptr, i64, i64 } %t225, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t234, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a235 + %t240 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t239, ptr %a242 + store { ptr, i64, i64 } %t240, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t239, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + %t246 = load i64, ptr %t224 + %t247 = add i64 %t246, 1 + call void @finch_arr_reserve(ptr %t223, i64 %t247, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t248 = load ptr, ptr %t223 + %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t246 + store { ptr, i64, i64 } %t245, ptr %t249 + store i64 %t247, ptr %t224 + %t250 = load %S.json.Json, ptr %a204 + %t251 = load { ptr, i64, i64 }, ptr %a2 + %t252 = load { ptr, i64, i64 }, ptr %a6 + %t253 = load ptr, ptr %a4 + call void @finch.json.write(%S.json.Json %t250, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252, ptr %t253) + br label %each.step11425 +each.step11425: + %t254 = load i64, ptr %a195 + %t255 = add i64 %t254, 1 + store i64 %t255, ptr %a195 + br label %each.cond11423 +each.end11426: + %t256 = load ptr, ptr %a4 + %t257 = icmp eq ptr %t256, null + br i1 %t257, label %panic11436, label %ok11437 +panic11436: + call void @finch_panic(ptr @.str.7309, i64 238, ptr @.str.7310) + unreachable +ok11437: + %t258 = getelementptr inbounds %S.json.Writer, ptr %t256, i32 0, i32 0 + %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 + %t260 = load { ptr, i64, i64 }, ptr %a5 + %t261 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t260, ptr %a263 + store { ptr, i64, i64 } %t261, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a262 + store { ptr, i64, i64 } %t265, ptr %a267 + store { ptr, i64, i64 } { ptr @.str.7311, i64 1, i64 0 }, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t265, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + %t271 = load i64, ptr %t259 + %t272 = add i64 %t271, 1 + call void @finch_arr_reserve(ptr %t258, i64 %t272, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t273 = load ptr, ptr %t258 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 + store { ptr, i64, i64 } %t270, ptr %t274 + store i64 %t272, ptr %t259 + br label %match.end11370 +match.next11415: + br i1 true, label %panic11438, label %ok11439 +panic11438: + call void @finch_panic(ptr @.str.7312, i64 199, ptr @.str.7313) + unreachable +ok11439: + unreachable +match.end11370: + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a7) + call void @finch_str_drop(ptr %a6) + call void @finch_str_drop(ptr %a5) + ret void +} + +define internal void @finch.drop.S_json_Writer(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.json.Writer, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + ret void +} + +define internal { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca %S.json.Writer, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + store %S.json.Writer zeroinitializer, ptr %a2 + %t3 = load %S.json.Json, ptr %a1 + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7314, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7315, i64 0, i64 0 }, ptr %a2) + %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7316, i64 0, i64 0 }, ptr %a6 + call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.drop.S_json_Writer(ptr %a2) + ret { ptr, i64, i64 } %t8 +} + +define internal { ptr, i64, i64 } @finch.json.pretty(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca %S.json.Writer, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + store %S.json.Writer zeroinitializer, ptr %a2 + %t3 = load %S.json.Json, ptr %a1 + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7317, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.7318, i64 0, i64 0 }, ptr %a2) + %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7319, i64 0, i64 0 }, ptr %a6 + call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.drop.S_json_Writer(ptr %a2) + ret { ptr, i64, i64 } %t8 +} + +define internal { ptr, i64, i64 } @finch.json.where(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 1, ptr %a2 + store i64 1, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic11440, label %ok11441 +panic11440: + call void @finch_panic(ptr @.str.7320, i64 268, ptr @.str.7321) + unreachable +ok11441: + %t6 = getelementptr inbounds %S.json.Reader, ptr %t4, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond11442 +for.cond11442: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body11443, label %for.end11445 +for.body11443: + %t11 = load i64, ptr %a8 + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic11446, label %ok11447 +panic11446: + call void @finch_panic(ptr @.str.7322, i64 269, ptr @.str.7323) + unreachable +ok11447: + %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp slt i64 %t11, %t16 + br label %logic.from11448 +logic.from11448: + br i1 %t17, label %logic.rhs11449, label %logic.end11450 +logic.rhs11449: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic11451, label %ok11452 +panic11451: + call void @finch_panic(ptr @.str.7324, i64 269, ptr @.str.7325) + unreachable +ok11452: + %t20 = getelementptr inbounds %S.json.Reader, ptr %t18, i32 0, i32 0 + %t21 = load i64, ptr %a8 + %t22 = load { ptr, i64, i64 }, ptr %t20 + %t23 = extractvalue { ptr, i64, i64 } %t22, 1 + %t24 = icmp uge i64 %t21, %t23 + br i1 %t24, label %range11453, label %inrange11454 +range11453: + call void @finch_panic_index(ptr @.str.7326, i64 269, i64 %t21, i64 %t23) + unreachable +inrange11454: + %t25 = extractvalue { ptr, i64, i64 } %t22, 0 + %t26 = getelementptr inbounds i8, ptr %t25, i64 %t21 + %t27 = load i8, ptr %t26 + %t28 = icmp eq i8 %t27, 10 + br label %logic.rend11455 +logic.rend11455: + br label %logic.end11450 +logic.end11450: + %t29 = phi i1 [ false, %logic.from11448 ], [ %t28, %logic.rend11455 ] + br i1 %t29, label %then11456, label %else11457 +then11456: + %t30 = load i64, ptr %a2 + %t31 = add i64 %t30, 1 + store i64 %t31, ptr %a2 + store i64 1, ptr %a3 + br label %endif11458 +else11457: + %t32 = load i64, ptr %a3 + %t33 = add i64 %t32, 1 + store i64 %t33, ptr %a3 + br label %endif11458 +endif11458: + br label %for.step11444 +for.step11444: + %t34 = load i64, ptr %a8 + %t35 = add i64 %t34, 1 + store i64 %t35, ptr %a8 + br label %for.cond11442 +for.end11445: + %t36 = load i64, ptr %a2 + call void @finch_str_from_int(ptr %a37, i64 %t36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.7327, i64 5, i64 0 }, ptr %a40 + store { ptr, i64, i64 } %t38, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t43, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.7328, i64 9, i64 0 }, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + %t49 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a50, i64 %t49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a53 + store { ptr, i64, i64 } %t51, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t48, ptr %a55 + call void @finch_str_drop(ptr %a55) + store { ptr, i64, i64 } %t51, ptr %a56 + call void @finch_str_drop(ptr %a56) + %t57 = load { ptr, i64, i64 }, ptr %a52 + ret { ptr, i64, i64 } %t57 +} + +define internal i8 @finch.json.peek(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11459, label %ok11460 +panic11459: + call void @finch_panic(ptr @.str.7329, i64 280, ptr @.str.7330) + unreachable +ok11460: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11461, label %ok11462 +panic11461: + call void @finch_panic(ptr @.str.7331, i64 280, ptr @.str.7332) + unreachable +ok11462: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp slt i64 %t5, %t10 + br i1 %t11, label %then11463, label %endif11465 +then11463: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic11466, label %ok11467 +panic11466: + call void @finch_panic(ptr @.str.7333, i64 281, ptr @.str.7334) + unreachable +ok11467: + %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic11468, label %ok11469 +panic11468: + call void @finch_panic(ptr @.str.7335, i64 281, ptr @.str.7336) + unreachable +ok11469: + %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = load { ptr, i64, i64 }, ptr %t14 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range11470, label %inrange11471 +range11470: + call void @finch_panic_index(ptr @.str.7337, i64 281, i64 %t18, i64 %t20) + unreachable +inrange11471: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 + %t24 = load i8, ptr %t23 + ret i8 %t24 +endif11465: + %t25 = trunc i64 0 to i8 + ret i8 %t25 +} + +define internal void @finch.json.skip_space(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + br label %while.cond11472 +while.cond11472: + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11475, label %ok11476 +panic11475: + call void @finch_panic(ptr @.str.7338, i64 287, ptr @.str.7339) + unreachable +ok11476: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11477, label %ok11478 +panic11477: + call void @finch_panic(ptr @.str.7340, i64 287, ptr @.str.7341) + unreachable +ok11478: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp slt i64 %t5, %t10 + br label %logic.from11479 +logic.from11479: + br i1 %t11, label %logic.rhs11480, label %logic.end11481 +logic.rhs11480: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic11482, label %ok11483 +panic11482: + call void @finch_panic(ptr @.str.7342, i64 287, ptr @.str.7343) + unreachable +ok11483: + %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic11484, label %ok11485 +panic11484: + call void @finch_panic(ptr @.str.7344, i64 287, ptr @.str.7345) + unreachable +ok11485: + %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = load { ptr, i64, i64 }, ptr %t14 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range11486, label %inrange11487 +range11486: + call void @finch_panic_index(ptr @.str.7346, i64 287, i64 %t18, i64 %t20) + unreachable +inrange11487: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 + %t24 = load i8, ptr %t23 + %t25 = icmp eq i8 %t24, 32 + br label %logic.from11488 +logic.from11488: + br i1 %t25, label %logic.end11490, label %logic.rhs11489 +logic.rhs11489: + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic11491, label %ok11492 +panic11491: + call void @finch_panic(ptr @.str.7347, i64 287, ptr @.str.7348) + unreachable +ok11492: + %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 0 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic11493, label %ok11494 +panic11493: + call void @finch_panic(ptr @.str.7349, i64 287, ptr @.str.7350) + unreachable +ok11494: + %t31 = getelementptr inbounds %S.json.Reader, ptr %t29, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = load { ptr, i64, i64 }, ptr %t28 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range11495, label %inrange11496 +range11495: + call void @finch_panic_index(ptr @.str.7351, i64 287, i64 %t32, i64 %t34) + unreachable +inrange11496: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 + %t38 = load i8, ptr %t37 + %t39 = icmp eq i8 %t38, 10 + br label %logic.rend11497 +logic.rend11497: + br label %logic.end11490 +logic.end11490: + %t40 = phi i1 [ true, %logic.from11488 ], [ %t39, %logic.rend11497 ] + br label %logic.from11498 +logic.from11498: + br i1 %t40, label %logic.end11500, label %logic.rhs11499 +logic.rhs11499: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic11501, label %ok11502 +panic11501: + call void @finch_panic(ptr @.str.7352, i64 287, ptr @.str.7353) + unreachable +ok11502: + %t43 = getelementptr inbounds %S.json.Reader, ptr %t41, i32 0, i32 0 + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic11503, label %ok11504 +panic11503: + call void @finch_panic(ptr @.str.7354, i64 287, ptr @.str.7355) + unreachable +ok11504: + %t46 = getelementptr inbounds %S.json.Reader, ptr %t44, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = load { ptr, i64, i64 }, ptr %t43 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range11505, label %inrange11506 +range11505: + call void @finch_panic_index(ptr @.str.7356, i64 287, i64 %t47, i64 %t49) + unreachable +inrange11506: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 + %t53 = load i8, ptr %t52 + %t54 = icmp eq i8 %t53, 9 + br label %logic.rend11507 +logic.rend11507: + br label %logic.end11500 +logic.end11500: + %t55 = phi i1 [ true, %logic.from11498 ], [ %t54, %logic.rend11507 ] + br label %logic.from11508 +logic.from11508: + br i1 %t55, label %logic.end11510, label %logic.rhs11509 +logic.rhs11509: + %t56 = load ptr, ptr %a1 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic11511, label %ok11512 +panic11511: + call void @finch_panic(ptr @.str.7357, i64 287, ptr @.str.7358) + unreachable +ok11512: + %t58 = getelementptr inbounds %S.json.Reader, ptr %t56, i32 0, i32 0 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic11513, label %ok11514 +panic11513: + call void @finch_panic(ptr @.str.7359, i64 287, ptr @.str.7360) + unreachable +ok11514: + %t61 = getelementptr inbounds %S.json.Reader, ptr %t59, i32 0, i32 1 + %t62 = load i64, ptr %t61 + %t63 = load { ptr, i64, i64 }, ptr %t58 + %t64 = extractvalue { ptr, i64, i64 } %t63, 1 + %t65 = icmp uge i64 %t62, %t64 + br i1 %t65, label %range11515, label %inrange11516 +range11515: + call void @finch_panic_index(ptr @.str.7361, i64 287, i64 %t62, i64 %t64) + unreachable +inrange11516: + %t66 = extractvalue { ptr, i64, i64 } %t63, 0 + %t67 = getelementptr inbounds i8, ptr %t66, i64 %t62 + %t68 = load i8, ptr %t67 + %t69 = icmp eq i8 %t68, 13 + br label %logic.rend11517 +logic.rend11517: + br label %logic.end11510 +logic.end11510: + %t70 = phi i1 [ true, %logic.from11508 ], [ %t69, %logic.rend11517 ] + br label %logic.rend11518 +logic.rend11518: + br label %logic.end11481 +logic.end11481: + %t71 = phi i1 [ false, %logic.from11479 ], [ %t70, %logic.rend11518 ] + br i1 %t71, label %while.body11473, label %while.end11474 +while.body11473: + %t72 = load ptr, ptr %a1 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic11519, label %ok11520 +panic11519: + call void @finch_panic(ptr @.str.7362, i64 288, ptr @.str.7363) + unreachable +ok11520: + %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = add i64 %t75, 1 + store i64 %t76, ptr %t74 + br label %while.cond11472 +while.end11474: + ret void +} + +define internal { ptr, i64, i64 } @finch.json.unexpected(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic11521, label %ok11522 +panic11521: + call void @finch_panic(ptr @.str.7364, i64 293, ptr @.str.7365) + unreachable +ok11522: + %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic11523, label %ok11524 +panic11523: + call void @finch_panic(ptr @.str.7366, i64 293, ptr @.str.7367) + unreachable +ok11524: + %t9 = getelementptr inbounds %S.json.Reader, ptr %t7, i32 0, i32 0 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = icmp sge i64 %t6, %t11 + br i1 %t12, label %then11525, label %endif11527 +then11525: + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.7368, i64 26, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.7369, i64 12, i64 0 }, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + %t23 = load ptr, ptr %a1 + %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) + store { ptr, i64, i64 } %t22, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t22, ptr %a28 + call void @finch_str_drop(ptr %a28) + store { ptr, i64, i64 } %t24, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.7370, i64 1, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + ret { ptr, i64, i64 } %t35 +endif11527: + %t36 = load ptr, ptr %a1 + %t37 = icmp eq ptr %t36, null + br i1 %t37, label %panic11528, label %ok11529 +panic11528: + call void @finch_panic(ptr @.str.7372, i64 296, ptr @.str.7373) + unreachable +ok11529: + %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic11530, label %ok11531 +panic11530: + call void @finch_panic(ptr @.str.7374, i64 296, ptr @.str.7375) + unreachable +ok11531: + %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = load { ptr, i64, i64 }, ptr %t38 + %t44 = extractvalue { ptr, i64, i64 } %t43, 1 + %t45 = icmp uge i64 %t42, %t44 + br i1 %t45, label %range11532, label %inrange11533 +range11532: + call void @finch_panic_index(ptr @.str.7376, i64 296, i64 %t42, i64 %t44) + unreachable +inrange11533: + %t46 = extractvalue { ptr, i64, i64 } %t43, 0 + %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 + %t48 = load i8, ptr %t47 + call void @finch_str_from_char(ptr %a49, i8 signext %t48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.7371, i64 13, i64 0 }, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.7377, i64 8, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t60, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.7378, i64 12, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load ptr, ptr %a1 + %t73 = call { ptr, i64, i64 } @finch.json.where(ptr %t72) + store { ptr, i64, i64 } %t71, ptr %a75 + store { ptr, i64, i64 } %t73, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t71, ptr %a77 + call void @finch_str_drop(ptr %a77) + store { ptr, i64, i64 } %t73, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.7379, i64 1, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + ret { ptr, i64, i64 } %t84 +} + +define internal i1 @finch.json.comes(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic11534, label %ok11535 +panic11534: + call void @finch_panic(ptr @.str.7380, i64 301, ptr @.str.7381) + unreachable +ok11535: + %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic11536, label %ok11537 +panic11536: + call void @finch_panic(ptr @.str.7382, i64 301, ptr @.str.7383) + unreachable +ok11537: + %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = sub i64 %t7, %t11 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sge i64 %t12, %t14 + br label %logic.from11538 +logic.from11538: + br i1 %t15, label %logic.rhs11539, label %logic.end11540 +logic.rhs11539: + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic11541, label %ok11542 +panic11541: + call void @finch_panic(ptr @.str.7384, i64 301, ptr @.str.7385) + unreachable +ok11542: + %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic11543, label %ok11544 +panic11543: + call void @finch_panic(ptr @.str.7387, i64 301, ptr @.str.7388) + unreachable +ok11544: + %t24 = getelementptr inbounds %S.json.Reader, ptr %t22, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic11545, label %ok11546 +panic11545: + call void @finch_panic(ptr @.str.7389, i64 301, ptr @.str.7390) + unreachable +ok11546: + %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 1 + %t29 = load i64, ptr %t28 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t29, %t31 + call void @finch_str_sub(ptr %a21, ptr %a20, i64 %t25, i64 %t32, ptr @.str.7386, i64 301) + %t33 = load { ptr, i64, i64 }, ptr %a21 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a35 + store { ptr, i64, i64 } %t34, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + store { ptr, i64, i64 } %t33, ptr %a39 + call void @finch_str_drop(ptr %a39) + br label %logic.rend11547 +logic.rend11547: + br label %logic.end11540 +logic.end11540: + %t40 = phi i1 [ false, %logic.from11538 ], [ %t38, %logic.rend11547 ] + ret i1 %t40 +} + +define internal { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call i1 @finch.json.comes(ptr %t3, { ptr, i64, i64 } %t4) + %t6 = xor i1 %t5, true + br i1 %t6, label %then11548, label %endif11550 +then11548: + %t7 = load ptr, ptr %a1 + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.7391, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.7392, i64 1, i64 0 }, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + %t18 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t7, { ptr, i64, i64 } %t17) + store { ptr, i64, i64 } %t17, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = insertvalue { i1, i8, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t18, 2 + ret { i1, i8, { ptr, i64, i64 } } %t20 +endif11550: + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic11551, label %ok11552 +panic11551: + call void @finch_panic(ptr @.str.7393, i64 308, ptr @.str.7394) + unreachable +ok11552: + %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 + %t26 = load i64, ptr %t25 + %t27 = add i64 %t26, %t22 + store i64 %t27, ptr %t25 + ret { i1, i8, { ptr, i64, i64 } } { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer } +} + +define internal i64 @finch.json.hex_value(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 48 + br label %logic.from11553 +logic.from11553: + br i1 %t3, label %logic.rhs11554, label %logic.end11555 +logic.rhs11554: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 57 + br label %logic.rend11556 +logic.rend11556: + br label %logic.end11555 +logic.end11555: + %t6 = phi i1 [ false, %logic.from11553 ], [ %t5, %logic.rend11556 ] + br i1 %t6, label %then11557, label %endif11559 +then11557: + %t7 = load i8, ptr %a1 + %t8 = zext i8 %t7 to i64 + %t9 = zext i8 48 to i64 + %t10 = sub i64 %t8, %t9 + ret i64 %t10 +endif11559: + %t11 = load i8, ptr %a1 + %t12 = icmp uge i8 %t11, 97 + br label %logic.from11560 +logic.from11560: + br i1 %t12, label %logic.rhs11561, label %logic.end11562 +logic.rhs11561: + %t13 = load i8, ptr %a1 + %t14 = icmp ule i8 %t13, 102 + br label %logic.rend11563 +logic.rend11563: + br label %logic.end11562 +logic.end11562: + %t15 = phi i1 [ false, %logic.from11560 ], [ %t14, %logic.rend11563 ] + br i1 %t15, label %then11564, label %endif11566 +then11564: + %t16 = load i8, ptr %a1 + %t17 = zext i8 %t16 to i64 + %t18 = zext i8 97 to i64 + %t19 = sub i64 %t17, %t18 + %t20 = add i64 %t19, 10 + ret i64 %t20 +endif11566: + %t21 = load i8, ptr %a1 + %t22 = icmp uge i8 %t21, 65 + br label %logic.from11567 +logic.from11567: + br i1 %t22, label %logic.rhs11568, label %logic.end11569 +logic.rhs11568: + %t23 = load i8, ptr %a1 + %t24 = icmp ule i8 %t23, 70 + br label %logic.rend11570 +logic.rend11570: + br label %logic.end11569 +logic.end11569: + %t25 = phi i1 [ false, %logic.from11567 ], [ %t24, %logic.rend11570 ] + br i1 %t25, label %then11571, label %endif11573 +then11571: + %t26 = load i8, ptr %a1 + %t27 = zext i8 %t26 to i64 + %t28 = zext i8 65 to i64 + %t29 = sub i64 %t27, %t28 + %t30 = add i64 %t29, 10 + ret i64 %t30 +endif11573: + ret i64 -1 +} + +define internal { ptr, i64, i64 } @finch.json.utf8(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = icmp slt i64 %t3, 128 + br i1 %t4, label %then11574, label %else11575 +then11574: + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t6 = load i64, ptr %a1 + %t7 = trunc i64 %t6 to i8 + %t8 = load i64, ptr %t5 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t9, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a2 + %t11 = getelementptr inbounds i8, ptr %t10, i64 %t8 + store i8 %t7, ptr %t11 + store i64 %t9, ptr %t5 + br label %endif11576 +else11575: + %t12 = load i64, ptr %a1 + %t13 = icmp slt i64 %t12, 2048 + br i1 %t13, label %then11577, label %else11578 +then11577: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t15 = load i64, ptr %a1 + %t16 = sdiv i64 %t15, 64 + %t17 = add i64 192, %t16 + %t18 = trunc i64 %t17 to i8 + %t19 = load i64, ptr %t14 + %t20 = add i64 %t19, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t20, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t21 = load ptr, ptr %a2 + %t22 = getelementptr inbounds i8, ptr %t21, i64 %t19 + store i8 %t18, ptr %t22 + store i64 %t20, ptr %t14 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t24 = load i64, ptr %a1 + %t25 = srem i64 %t24, 64 + %t26 = add i64 128, %t25 + %t27 = trunc i64 %t26 to i8 + %t28 = load i64, ptr %t23 + %t29 = add i64 %t28, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t29, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t30 = load ptr, ptr %a2 + %t31 = getelementptr inbounds i8, ptr %t30, i64 %t28 + store i8 %t27, ptr %t31 + store i64 %t29, ptr %t23 + br label %endif11579 +else11578: + %t32 = load i64, ptr %a1 + %t33 = icmp slt i64 %t32, 65536 + br i1 %t33, label %then11580, label %else11581 +then11580: + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t35 = load i64, ptr %a1 + %t36 = sdiv i64 %t35, 4096 + %t37 = add i64 224, %t36 + %t38 = trunc i64 %t37 to i8 + %t39 = load i64, ptr %t34 + %t40 = add i64 %t39, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t40, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t41 = load ptr, ptr %a2 + %t42 = getelementptr inbounds i8, ptr %t41, i64 %t39 + store i8 %t38, ptr %t42 + store i64 %t40, ptr %t34 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t44 = load i64, ptr %a1 + %t45 = sdiv i64 %t44, 64 + %t46 = srem i64 %t45, 64 + %t47 = add i64 128, %t46 + %t48 = trunc i64 %t47 to i8 + %t49 = load i64, ptr %t43 + %t50 = add i64 %t49, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t50, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t51 = load ptr, ptr %a2 + %t52 = getelementptr inbounds i8, ptr %t51, i64 %t49 + store i8 %t48, ptr %t52 + store i64 %t50, ptr %t43 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t54 = load i64, ptr %a1 + %t55 = srem i64 %t54, 64 + %t56 = add i64 128, %t55 + %t57 = trunc i64 %t56 to i8 + %t58 = load i64, ptr %t53 + %t59 = add i64 %t58, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t59, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t60 = load ptr, ptr %a2 + %t61 = getelementptr inbounds i8, ptr %t60, i64 %t58 + store i8 %t57, ptr %t61 + store i64 %t59, ptr %t53 + br label %endif11582 +else11581: + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t63 = load i64, ptr %a1 + %t64 = sdiv i64 %t63, 262144 + %t65 = add i64 240, %t64 + %t66 = trunc i64 %t65 to i8 + %t67 = load i64, ptr %t62 + %t68 = add i64 %t67, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t68, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t69 = load ptr, ptr %a2 + %t70 = getelementptr inbounds i8, ptr %t69, i64 %t67 + store i8 %t66, ptr %t70 + store i64 %t68, ptr %t62 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t72 = load i64, ptr %a1 + %t73 = sdiv i64 %t72, 4096 + %t74 = srem i64 %t73, 64 + %t75 = add i64 128, %t74 + %t76 = trunc i64 %t75 to i8 + %t77 = load i64, ptr %t71 + %t78 = add i64 %t77, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t78, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t79 = load ptr, ptr %a2 + %t80 = getelementptr inbounds i8, ptr %t79, i64 %t77 + store i8 %t76, ptr %t80 + store i64 %t78, ptr %t71 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t82 = load i64, ptr %a1 + %t83 = sdiv i64 %t82, 64 + %t84 = srem i64 %t83, 64 + %t85 = add i64 128, %t84 + %t86 = trunc i64 %t85 to i8 + %t87 = load i64, ptr %t81 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t88, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %a2 + %t90 = getelementptr inbounds i8, ptr %t89, i64 %t87 + store i8 %t86, ptr %t90 + store i64 %t88, ptr %t81 + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t92 = load i64, ptr %a1 + %t93 = srem i64 %t92, 64 + %t94 = add i64 128, %t93 + %t95 = trunc i64 %t94 to i8 + %t96 = load i64, ptr %t91 + %t97 = add i64 %t96, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t97, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t98 = load ptr, ptr %a2 + %t99 = getelementptr inbounds i8, ptr %t98, i64 %t96 + store i8 %t95, ptr %t99 + store i64 %t97, ptr %t91 + br label %endif11582 +endif11582: + br label %endif11579 +endif11579: + br label %endif11576 +endif11576: + %t100 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } zeroinitializer, ptr %a101 + store { ptr, i64, i64 } %t100, ptr %a102 + call void @finch_str_from_bytes(ptr %a101, ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a101 + call void @finch.drop.arr_u8(ptr %a2) + ret { ptr, i64, i64 } %t103 +} + +define internal { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 0, ptr %a2 + store i64 0, ptr %a3 + br label %for.cond11583 +for.cond11583: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, 4 + br i1 %t5, label %for.body11584, label %for.end11586 +for.body11584: + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11587, label %ok11588 +panic11587: + call void @finch_panic(ptr @.str.7395, i64 348, ptr @.str.7396) + unreachable +ok11588: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic11589, label %ok11590 +panic11589: + call void @finch_panic(ptr @.str.7397, i64 348, ptr @.str.7398) + unreachable +ok11590: + %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sge i64 %t9, %t14 + br label %logic.from11591 +logic.from11591: + br i1 %t15, label %logic.end11593, label %logic.rhs11592 +logic.rhs11592: + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic11594, label %ok11595 +panic11594: + call void @finch_panic(ptr @.str.7399, i64 348, ptr @.str.7400) + unreachable +ok11595: + %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic11596, label %ok11597 +panic11596: + call void @finch_panic(ptr @.str.7401, i64 348, ptr @.str.7402) + unreachable +ok11597: + %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %t18 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 %t22, %t24 + br i1 %t25, label %range11598, label %inrange11599 +range11598: + call void @finch_panic_index(ptr @.str.7403, i64 348, i64 %t22, i64 %t24) + unreachable +inrange11599: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds i8, ptr %t26, i64 %t22 + %t28 = load i8, ptr %t27 + %t29 = call i64 @finch.json.hex_value(i8 %t28) + %t30 = icmp slt i64 %t29, 0 + br label %logic.rend11600 +logic.rend11600: + br label %logic.end11593 +logic.end11593: + %t31 = phi i1 [ true, %logic.from11591 ], [ %t30, %logic.rend11600 ] + br i1 %t31, label %then11601, label %endif11603 +then11601: + %t32 = load ptr, ptr %a1 + %t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.7404, i64 19, i64 0 }) + %t34 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t33, 2 + ret { i1, i64, { ptr, i64, i64 } } %t34 +endif11603: + %t35 = load i64, ptr %a2 + %t36 = mul i64 %t35, 16 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic11604, label %ok11605 +panic11604: + call void @finch_panic(ptr @.str.7405, i64 351, ptr @.str.7406) + unreachable +ok11605: + %t39 = getelementptr inbounds %S.json.Reader, ptr %t37, i32 0, i32 0 + %t40 = load ptr, ptr %a1 + %t41 = icmp eq ptr %t40, null + br i1 %t41, label %panic11606, label %ok11607 +panic11606: + call void @finch_panic(ptr @.str.7407, i64 351, ptr @.str.7408) + unreachable +ok11607: + %t42 = getelementptr inbounds %S.json.Reader, ptr %t40, i32 0, i32 1 + %t43 = load i64, ptr %t42 + %t44 = load { ptr, i64, i64 }, ptr %t39 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 %t43, %t45 + br i1 %t46, label %range11608, label %inrange11609 +range11608: + call void @finch_panic_index(ptr @.str.7409, i64 351, i64 %t43, i64 %t45) + unreachable +inrange11609: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 + %t49 = load i8, ptr %t48 + %t50 = call i64 @finch.json.hex_value(i8 %t49) + %t51 = add i64 %t36, %t50 + store i64 %t51, ptr %a2 + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic11610, label %ok11611 +panic11610: + call void @finch_panic(ptr @.str.7410, i64 352, ptr @.str.7411) + unreachable +ok11611: + %t54 = getelementptr inbounds %S.json.Reader, ptr %t52, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = add i64 %t55, 1 + store i64 %t56, ptr %t54 + br label %for.step11585 +for.step11585: + %t57 = load i64, ptr %a3 + %t58 = add i64 %t57, 1 + store i64 %t58, ptr %a3 + br label %for.cond11583 +for.end11586: + %t59 = load i64, ptr %a2 + %t60 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t61 = insertvalue { i1, i64, { ptr, i64, i64 } } %t60, i64 %t59, 1 + ret { i1, i64, { ptr, i64, i64 } } %t61 +} + +define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i8, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca i8, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca i64, align 16 + %a216 = alloca i64, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11612, label %ok11613 +panic11612: + call void @finch_panic(ptr @.str.7412, i64 358, ptr @.str.7413) + unreachable +ok11613: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = add i64 %t5, 1 + store i64 %t6, ptr %t4 + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic11614, label %ok11615 +panic11614: + call void @finch_panic(ptr @.str.7414, i64 360, ptr @.str.7415) + unreachable +ok11615: + %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 + %t11 = load i64, ptr %t10 + store i64 %t11, ptr %a12 + br label %while.cond11616 +while.cond11616: + br label %while.body11617 +while.body11617: + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic11619, label %ok11620 +panic11619: + call void @finch_panic(ptr @.str.7416, i64 362, ptr @.str.7417) + unreachable +ok11620: + %t15 = getelementptr inbounds %S.json.Reader, ptr %t13, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic11621, label %ok11622 +panic11621: + call void @finch_panic(ptr @.str.7418, i64 362, ptr @.str.7419) + unreachable +ok11622: + %t19 = getelementptr inbounds %S.json.Reader, ptr %t17, i32 0, i32 0 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load i64, ptr %t20 + %t22 = icmp sge i64 %t16, %t21 + br i1 %t22, label %then11623, label %endif11625 +then11623: + %t23 = load ptr, ptr %a1 + %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) + store { ptr, i64, i64 } { ptr @.str.7420, i64 30, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.7421, i64 1, i64 0 }, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + call void @finch.drop.arr_str(ptr %a7) + %t35 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t34, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t35 +endif11625: + %t36 = load ptr, ptr %a1 + %t37 = icmp eq ptr %t36, null + br i1 %t37, label %panic11626, label %ok11627 +panic11626: + call void @finch_panic(ptr @.str.7422, i64 365, ptr @.str.7423) + unreachable +ok11627: + %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic11628, label %ok11629 +panic11628: + call void @finch_panic(ptr @.str.7424, i64 365, ptr @.str.7425) + unreachable +ok11629: + %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = load { ptr, i64, i64 }, ptr %t38 + %t44 = extractvalue { ptr, i64, i64 } %t43, 1 + %t45 = icmp uge i64 %t42, %t44 + br i1 %t45, label %range11630, label %inrange11631 +range11630: + call void @finch_panic_index(ptr @.str.7426, i64 365, i64 %t42, i64 %t44) + unreachable +inrange11631: + %t46 = extractvalue { ptr, i64, i64 } %t43, 0 + %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 + %t48 = load i8, ptr %t47 + store i8 %t48, ptr %a49 + %t50 = load i8, ptr %a49 + %t51 = icmp eq i8 %t50, 34 + br i1 %t51, label %then11632, label %endif11634 +then11632: + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t53 = load ptr, ptr %a1 + %t54 = icmp eq ptr %t53, null + br i1 %t54, label %panic11635, label %ok11636 +panic11635: + call void @finch_panic(ptr @.str.7427, i64 367, ptr @.str.7428) + unreachable +ok11636: + %t55 = getelementptr inbounds %S.json.Reader, ptr %t53, i32 0, i32 0 + %t56 = load { ptr, i64, i64 }, ptr %t55 + store { ptr, i64, i64 } %t56, ptr %a57 + %t59 = load i64, ptr %a12 + %t60 = load ptr, ptr %a1 + %t61 = icmp eq ptr %t60, null + br i1 %t61, label %panic11637, label %ok11638 +panic11637: + call void @finch_panic(ptr @.str.7430, i64 367, ptr @.str.7431) + unreachable +ok11638: + %t62 = getelementptr inbounds %S.json.Reader, ptr %t60, i32 0, i32 1 + %t63 = load i64, ptr %t62 + call void @finch_str_sub(ptr %a58, ptr %a57, i64 %t59, i64 %t63, ptr @.str.7429, i64 367) + %t64 = load { ptr, i64, i64 }, ptr %a58 + %t65 = load i64, ptr %t52 + %t66 = add i64 %t65, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t66, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t67 = load ptr, ptr %a7 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i64 %t65 + store { ptr, i64, i64 } %t64, ptr %t68 + store i64 %t66, ptr %t52 + %t69 = load ptr, ptr %a1 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic11639, label %ok11640 +panic11639: + call void @finch_panic(ptr @.str.7432, i64 368, ptr @.str.7433) + unreachable +ok11640: + %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 1 + %t72 = load i64, ptr %t71 + %t73 = add i64 %t72, 1 + store i64 %t73, ptr %t71 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7434, i64 0, i64 0 }, ptr %a75 + call void @finch_str_join(ptr %a76, ptr %a7, ptr %a75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + call void @finch.drop.arr_str(ptr %a7) + %t78 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t79 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t78, { ptr, i64, i64 } %t77, 1 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t79 +endif11634: + %t80 = load i8, ptr %a49 + %t81 = zext i8 %t80 to i64 + %t82 = icmp slt i64 %t81, 32 + br i1 %t82, label %then11641, label %endif11643 +then11641: + %t83 = load ptr, ptr %a1 + %t84 = call { ptr, i64, i64 } @finch.json.where(ptr %t83) + store { ptr, i64, i64 } { ptr @.str.7435, i64 55, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.7436, i64 1, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.drop.arr_str(ptr %a7) + %t95 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t94, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t95 +endif11643: + %t96 = load i8, ptr %a49 + %t97 = icmp ne i8 %t96, 92 + br i1 %t97, label %then11644, label %endif11646 +then11644: + %t98 = load ptr, ptr %a1 + %t99 = icmp eq ptr %t98, null + br i1 %t99, label %panic11647, label %ok11648 +panic11647: + call void @finch_panic(ptr @.str.7437, i64 375, ptr @.str.7438) + unreachable +ok11648: + %t100 = getelementptr inbounds %S.json.Reader, ptr %t98, i32 0, i32 1 + %t101 = load i64, ptr %t100 + %t102 = add i64 %t101, 1 + store i64 %t102, ptr %t100 + br label %while.cond11616 +endif11646: + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic11649, label %ok11650 +panic11649: + call void @finch_panic(ptr @.str.7439, i64 378, ptr @.str.7440) + unreachable +ok11650: + %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a108 + %t110 = load i64, ptr %a12 + %t111 = load ptr, ptr %a1 + %t112 = icmp eq ptr %t111, null + br i1 %t112, label %panic11651, label %ok11652 +panic11651: + call void @finch_panic(ptr @.str.7442, i64 378, ptr @.str.7443) + unreachable +ok11652: + %t113 = getelementptr inbounds %S.json.Reader, ptr %t111, i32 0, i32 1 + %t114 = load i64, ptr %t113 + call void @finch_str_sub(ptr %a109, ptr %a108, i64 %t110, i64 %t114, ptr @.str.7441, i64 378) + %t115 = load { ptr, i64, i64 }, ptr %a109 + %t116 = load i64, ptr %t103 + %t117 = add i64 %t116, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t117, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t118 = load ptr, ptr %a7 + %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t118, i64 %t116 + store { ptr, i64, i64 } %t115, ptr %t119 + store i64 %t117, ptr %t103 + %t120 = load ptr, ptr %a1 + %t121 = icmp eq ptr %t120, null + br i1 %t121, label %panic11653, label %ok11654 +panic11653: + call void @finch_panic(ptr @.str.7444, i64 379, ptr @.str.7445) + unreachable +ok11654: + %t122 = getelementptr inbounds %S.json.Reader, ptr %t120, i32 0, i32 1 + %t123 = load i64, ptr %t122 + %t124 = add i64 %t123, 1 + store i64 %t124, ptr %t122 + %t125 = load ptr, ptr %a1 + %t126 = call i8 @finch.json.peek(ptr %t125) + store i8 %t126, ptr %a127 + %t128 = load ptr, ptr %a1 + %t129 = icmp eq ptr %t128, null + br i1 %t129, label %panic11655, label %ok11656 +panic11655: + call void @finch_panic(ptr @.str.7446, i64 381, ptr @.str.7447) + unreachable +ok11656: + %t130 = getelementptr inbounds %S.json.Reader, ptr %t128, i32 0, i32 1 + %t131 = load i64, ptr %t130 + %t132 = add i64 %t131, 1 + store i64 %t132, ptr %t130 + %t133 = load i8, ptr %a127 + %t134 = icmp eq i8 %t133, 110 + br i1 %t134, label %then11657, label %else11658 +then11657: + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = add i64 %t136, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t137, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t138 = load ptr, ptr %a7 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i64 %t136 + store { ptr, i64, i64 } { ptr @.str.7448, i64 1, i64 0 }, ptr %t139 + store i64 %t137, ptr %t135 + br label %endif11659 +else11658: + %t140 = load i8, ptr %a127 + %t141 = icmp eq i8 %t140, 116 + br i1 %t141, label %then11660, label %else11661 +then11660: + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t143 = load i64, ptr %t142 + %t144 = add i64 %t143, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t144, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t145 = load ptr, ptr %a7 + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 %t143 + store { ptr, i64, i64 } { ptr @.str.7449, i64 1, i64 0 }, ptr %t146 + store i64 %t144, ptr %t142 + br label %endif11662 +else11661: + %t147 = load i8, ptr %a127 + %t148 = icmp eq i8 %t147, 114 + br i1 %t148, label %then11663, label %else11664 +then11663: + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t150 = load i64, ptr %t149 + %t151 = add i64 %t150, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t151, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t152 = load ptr, ptr %a7 + %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i64 %t150 + store { ptr, i64, i64 } { ptr @.str.7450, i64 1, i64 0 }, ptr %t153 + store i64 %t151, ptr %t149 + br label %endif11665 +else11664: + %t154 = load i8, ptr %a127 + %t155 = icmp eq i8 %t154, 98 + br i1 %t155, label %then11666, label %else11667 +then11666: + %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t157 = call { ptr, i64, i64 } @finch.json.utf8(i64 8) + %t158 = load i64, ptr %t156 + %t159 = add i64 %t158, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t159, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t160 = load ptr, ptr %a7 + %t161 = getelementptr inbounds { ptr, i64, i64 }, ptr %t160, i64 %t158 + store { ptr, i64, i64 } %t157, ptr %t161 + store i64 %t159, ptr %t156 + br label %endif11668 +else11667: + %t162 = load i8, ptr %a127 + %t163 = icmp eq i8 %t162, 102 + br i1 %t163, label %then11669, label %else11670 +then11669: + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t165 = call { ptr, i64, i64 } @finch.json.utf8(i64 12) + %t166 = load i64, ptr %t164 + %t167 = add i64 %t166, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t167, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t168 = load ptr, ptr %a7 + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t168, i64 %t166 + store { ptr, i64, i64 } %t165, ptr %t169 + store i64 %t167, ptr %t164 + br label %endif11671 +else11670: + %t170 = load i8, ptr %a127 + %t171 = icmp eq i8 %t170, 34 + br label %logic.from11672 +logic.from11672: + br i1 %t171, label %logic.end11674, label %logic.rhs11673 +logic.rhs11673: + %t172 = load i8, ptr %a127 + %t173 = icmp eq i8 %t172, 92 + br label %logic.rend11675 +logic.rend11675: + br label %logic.end11674 +logic.end11674: + %t174 = phi i1 [ true, %logic.from11672 ], [ %t173, %logic.rend11675 ] + br label %logic.from11676 +logic.from11676: + br i1 %t174, label %logic.end11678, label %logic.rhs11677 +logic.rhs11677: + %t175 = load i8, ptr %a127 + %t176 = icmp eq i8 %t175, 47 + br label %logic.rend11679 +logic.rend11679: + br label %logic.end11678 +logic.end11678: + %t177 = phi i1 [ true, %logic.from11676 ], [ %t176, %logic.rend11679 ] + br i1 %t177, label %then11680, label %else11681 +then11680: + %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t179 = load i8, ptr %a127 + call void @finch_str_from_char(ptr %a180, i8 signext %t179) + %t181 = load { ptr, i64, i64 }, ptr %a180 + %t182 = load i64, ptr %t178 + %t183 = add i64 %t182, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t183, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t184 = load ptr, ptr %a7 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 + store { ptr, i64, i64 } %t181, ptr %t185 + store i64 %t183, ptr %t178 + br label %endif11682 +else11681: + %t186 = load i8, ptr %a127 + %t187 = icmp eq i8 %t186, 117 + br i1 %t187, label %then11683, label %else11684 +then11683: + %t188 = load ptr, ptr %a1 + %t189 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t188) + %t190 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 0 + %t191 = xor i1 %t190, true + %t192 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 2 + %t193 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 1 + br i1 %t191, label %try.failed11686, label %try.ok11687 +try.failed11686: + call void @finch.drop.arr_str(ptr %a7) + %t194 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t192, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t194 +try.ok11687: + store i64 %t193, ptr %a195 + %t196 = load i64, ptr %a195 + %t197 = icmp sge i64 %t196, 55296 + br label %logic.from11688 +logic.from11688: + br i1 %t197, label %logic.rhs11689, label %logic.end11690 +logic.rhs11689: + %t198 = load i64, ptr %a195 + %t199 = icmp slt i64 %t198, 56320 + br label %logic.rend11691 +logic.rend11691: + br label %logic.end11690 +logic.end11690: + %t200 = phi i1 [ false, %logic.from11688 ], [ %t199, %logic.rend11691 ] + br label %logic.from11692 +logic.from11692: + br i1 %t200, label %logic.rhs11693, label %logic.end11694 +logic.rhs11693: + %t201 = load ptr, ptr %a1 + %t202 = call i1 @finch.json.comes(ptr %t201, { ptr, i64, i64 } { ptr @.str.7451, i64 2, i64 0 }) + br label %logic.rend11695 +logic.rend11695: + br label %logic.end11694 +logic.end11694: + %t203 = phi i1 [ false, %logic.from11692 ], [ %t202, %logic.rend11695 ] + br i1 %t203, label %then11696, label %endif11698 +then11696: + %t204 = load ptr, ptr %a1 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic11699, label %ok11700 +panic11699: + call void @finch_panic(ptr @.str.7452, i64 398, ptr @.str.7453) + unreachable +ok11700: + %t206 = getelementptr inbounds %S.json.Reader, ptr %t204, i32 0, i32 1 + %t207 = load i64, ptr %t206 + %t208 = add i64 %t207, 2 + store i64 %t208, ptr %t206 + %t209 = load ptr, ptr %a1 + %t210 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t209) + %t211 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 0 + %t212 = xor i1 %t211, true + %t213 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 2 + %t214 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 1 + br i1 %t212, label %try.failed11701, label %try.ok11702 +try.failed11701: + call void @finch.drop.arr_str(ptr %a7) + %t215 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t213, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t215 +try.ok11702: + store i64 %t214, ptr %a216 + %t217 = load i64, ptr %a195 + %t218 = sub i64 %t217, 55296 + %t219 = mul i64 %t218, 1024 + %t220 = add i64 65536, %t219 + %t221 = load i64, ptr %a216 + %t222 = sub i64 %t221, 56320 + %t223 = add i64 %t220, %t222 + store i64 %t223, ptr %a195 + br label %endif11698 +endif11698: + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t225 = load i64, ptr %a195 + %t226 = call { ptr, i64, i64 } @finch.json.utf8(i64 %t225) + %t227 = load i64, ptr %t224 + %t228 = add i64 %t227, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t228, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t229 = load ptr, ptr %a7 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i64 %t227 + store { ptr, i64, i64 } %t226, ptr %t230 + store i64 %t228, ptr %t224 + br label %endif11685 +else11684: + %t231 = load i8, ptr %a127 + call void @finch_str_from_char(ptr %a232, i8 signext %t231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.7454, i64 22, i64 0 }, ptr %a235 + store { ptr, i64, i64 } %t233, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + store { ptr, i64, i64 } %t238, ptr %a240 + store { ptr, i64, i64 } { ptr @.str.7455, i64 12, i64 0 }, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t238, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + %t244 = load ptr, ptr %a1 + %t245 = call { ptr, i64, i64 } @finch.json.where(ptr %t244) + store { ptr, i64, i64 } %t243, ptr %a247 + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t243, ptr %a249 + call void @finch_str_drop(ptr %a249) + store { ptr, i64, i64 } %t245, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.7456, i64 1, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + call void @finch.drop.arr_str(ptr %a7) + %t257 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t256, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t257 +endif11685: + br label %endif11682 +endif11682: + br label %endif11671 +endif11671: + br label %endif11668 +endif11668: + br label %endif11665 +endif11665: + br label %endif11662 +endif11662: + br label %endif11659 +endif11659: + %t258 = load ptr, ptr %a1 + %t259 = icmp eq ptr %t258, null + br i1 %t259, label %panic11703, label %ok11704 +panic11703: + call void @finch_panic(ptr @.str.7457, i64 406, ptr @.str.7458) + unreachable +ok11704: + %t260 = getelementptr inbounds %S.json.Reader, ptr %t258, i32 0, i32 1 + %t261 = load i64, ptr %t260 + store i64 %t261, ptr %a12 + br label %while.cond11616 +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca i64, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca double, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca double, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11705, label %ok11706 +panic11705: + call void @finch_panic(ptr @.str.7459, i64 411, ptr @.str.7460) + unreachable +ok11706: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + store i64 %t5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = call i8 @finch.json.peek(ptr %t7) + %t9 = icmp eq i8 %t8, 45 + br i1 %t9, label %then11707, label %endif11709 +then11707: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic11710, label %ok11711 +panic11710: + call void @finch_panic(ptr @.str.7461, i64 413, ptr @.str.7462) + unreachable +ok11711: + %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + store i64 %t14, ptr %t12 + br label %endif11709 +endif11709: + br label %while.cond11712 +while.cond11712: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic11715, label %ok11716 +panic11715: + call void @finch_panic(ptr @.str.7463, i64 415, ptr @.str.7464) + unreachable +ok11716: + %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic11717, label %ok11718 +panic11717: + call void @finch_panic(ptr @.str.7465, i64 415, ptr @.str.7466) + unreachable +ok11718: + %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 0 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = icmp slt i64 %t18, %t23 + br label %logic.from11719 +logic.from11719: + br i1 %t24, label %logic.rhs11720, label %logic.end11721 +logic.rhs11720: + %t25 = load ptr, ptr %a1 + %t26 = icmp eq ptr %t25, null + br i1 %t26, label %panic11722, label %ok11723 +panic11722: + call void @finch_panic(ptr @.str.7467, i64 415, ptr @.str.7468) + unreachable +ok11723: + %t27 = getelementptr inbounds %S.json.Reader, ptr %t25, i32 0, i32 0 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic11724, label %ok11725 +panic11724: + call void @finch_panic(ptr @.str.7469, i64 415, ptr @.str.7470) + unreachable +ok11725: + %t30 = getelementptr inbounds %S.json.Reader, ptr %t28, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = load { ptr, i64, i64 }, ptr %t27 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range11726, label %inrange11727 +range11726: + call void @finch_panic_index(ptr @.str.7471, i64 415, i64 %t31, i64 %t33) + unreachable +inrange11727: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds i8, ptr %t35, i64 %t31 + %t37 = load i8, ptr %t36 + %t38 = icmp uge i8 %t37, 48 + br label %logic.from11728 +logic.from11728: + br i1 %t38, label %logic.rhs11729, label %logic.end11730 +logic.rhs11729: + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic11731, label %ok11732 +panic11731: + call void @finch_panic(ptr @.str.7472, i64 415, ptr @.str.7473) + unreachable +ok11732: + %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 0 + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic11733, label %ok11734 +panic11733: + call void @finch_panic(ptr @.str.7474, i64 415, ptr @.str.7475) + unreachable +ok11734: + %t44 = getelementptr inbounds %S.json.Reader, ptr %t42, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = load { ptr, i64, i64 }, ptr %t41 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 %t45, %t47 + br i1 %t48, label %range11735, label %inrange11736 +range11735: + call void @finch_panic_index(ptr @.str.7476, i64 415, i64 %t45, i64 %t47) + unreachable +inrange11736: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds i8, ptr %t49, i64 %t45 + %t51 = load i8, ptr %t50 + %t52 = icmp ule i8 %t51, 57 + br label %logic.rend11737 +logic.rend11737: + br label %logic.end11730 +logic.end11730: + %t53 = phi i1 [ false, %logic.from11728 ], [ %t52, %logic.rend11737 ] + br label %logic.from11738 +logic.from11738: + br i1 %t53, label %logic.end11740, label %logic.rhs11739 +logic.rhs11739: + %t54 = load ptr, ptr %a1 + %t55 = icmp eq ptr %t54, null + br i1 %t55, label %panic11741, label %ok11742 +panic11741: + call void @finch_panic(ptr @.str.7477, i64 415, ptr @.str.7478) + unreachable +ok11742: + %t56 = getelementptr inbounds %S.json.Reader, ptr %t54, i32 0, i32 0 + %t57 = load ptr, ptr %a1 + %t58 = icmp eq ptr %t57, null + br i1 %t58, label %panic11743, label %ok11744 +panic11743: + call void @finch_panic(ptr @.str.7479, i64 415, ptr @.str.7480) + unreachable +ok11744: + %t59 = getelementptr inbounds %S.json.Reader, ptr %t57, i32 0, i32 1 + %t60 = load i64, ptr %t59 + %t61 = load { ptr, i64, i64 }, ptr %t56 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 %t60, %t62 + br i1 %t63, label %range11745, label %inrange11746 +range11745: + call void @finch_panic_index(ptr @.str.7481, i64 415, i64 %t60, i64 %t62) + unreachable +inrange11746: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 + %t66 = load i8, ptr %t65 + %t67 = icmp eq i8 %t66, 46 + br label %logic.rend11747 +logic.rend11747: + br label %logic.end11740 +logic.end11740: + %t68 = phi i1 [ true, %logic.from11738 ], [ %t67, %logic.rend11747 ] + br label %logic.from11748 +logic.from11748: + br i1 %t68, label %logic.end11750, label %logic.rhs11749 +logic.rhs11749: + %t69 = load ptr, ptr %a1 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic11751, label %ok11752 +panic11751: + call void @finch_panic(ptr @.str.7482, i64 415, ptr @.str.7483) + unreachable +ok11752: + %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 0 + %t72 = load ptr, ptr %a1 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic11753, label %ok11754 +panic11753: + call void @finch_panic(ptr @.str.7484, i64 415, ptr @.str.7485) + unreachable +ok11754: + %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = load { ptr, i64, i64 }, ptr %t71 + %t77 = extractvalue { ptr, i64, i64 } %t76, 1 + %t78 = icmp uge i64 %t75, %t77 + br i1 %t78, label %range11755, label %inrange11756 +range11755: + call void @finch_panic_index(ptr @.str.7486, i64 415, i64 %t75, i64 %t77) + unreachable +inrange11756: + %t79 = extractvalue { ptr, i64, i64 } %t76, 0 + %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 + %t81 = load i8, ptr %t80 + %t82 = icmp eq i8 %t81, 101 + br label %logic.rend11757 +logic.rend11757: + br label %logic.end11750 +logic.end11750: + %t83 = phi i1 [ true, %logic.from11748 ], [ %t82, %logic.rend11757 ] + br label %logic.from11758 +logic.from11758: + br i1 %t83, label %logic.end11760, label %logic.rhs11759 +logic.rhs11759: + %t84 = load ptr, ptr %a1 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic11761, label %ok11762 +panic11761: + call void @finch_panic(ptr @.str.7487, i64 415, ptr @.str.7488) + unreachable +ok11762: + %t86 = getelementptr inbounds %S.json.Reader, ptr %t84, i32 0, i32 0 + %t87 = load ptr, ptr %a1 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic11763, label %ok11764 +panic11763: + call void @finch_panic(ptr @.str.7489, i64 415, ptr @.str.7490) + unreachable +ok11764: + %t89 = getelementptr inbounds %S.json.Reader, ptr %t87, i32 0, i32 1 + %t90 = load i64, ptr %t89 + %t91 = load { ptr, i64, i64 }, ptr %t86 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 %t90, %t92 + br i1 %t93, label %range11765, label %inrange11766 +range11765: + call void @finch_panic_index(ptr @.str.7491, i64 415, i64 %t90, i64 %t92) + unreachable +inrange11766: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds i8, ptr %t94, i64 %t90 + %t96 = load i8, ptr %t95 + %t97 = icmp eq i8 %t96, 69 + br label %logic.rend11767 +logic.rend11767: + br label %logic.end11760 +logic.end11760: + %t98 = phi i1 [ true, %logic.from11758 ], [ %t97, %logic.rend11767 ] + br label %logic.from11768 +logic.from11768: + br i1 %t98, label %logic.end11770, label %logic.rhs11769 +logic.rhs11769: + %t99 = load ptr, ptr %a1 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic11771, label %ok11772 +panic11771: + call void @finch_panic(ptr @.str.7492, i64 415, ptr @.str.7493) + unreachable +ok11772: + %t101 = getelementptr inbounds %S.json.Reader, ptr %t99, i32 0, i32 0 + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic11773, label %ok11774 +panic11773: + call void @finch_panic(ptr @.str.7494, i64 415, ptr @.str.7495) + unreachable +ok11774: + %t104 = getelementptr inbounds %S.json.Reader, ptr %t102, i32 0, i32 1 + %t105 = load i64, ptr %t104 + %t106 = load { ptr, i64, i64 }, ptr %t101 + %t107 = extractvalue { ptr, i64, i64 } %t106, 1 + %t108 = icmp uge i64 %t105, %t107 + br i1 %t108, label %range11775, label %inrange11776 +range11775: + call void @finch_panic_index(ptr @.str.7496, i64 415, i64 %t105, i64 %t107) + unreachable +inrange11776: + %t109 = extractvalue { ptr, i64, i64 } %t106, 0 + %t110 = getelementptr inbounds i8, ptr %t109, i64 %t105 + %t111 = load i8, ptr %t110 + %t112 = icmp eq i8 %t111, 43 + br label %logic.rend11777 +logic.rend11777: + br label %logic.end11770 +logic.end11770: + %t113 = phi i1 [ true, %logic.from11768 ], [ %t112, %logic.rend11777 ] + br label %logic.from11778 +logic.from11778: + br i1 %t113, label %logic.end11780, label %logic.rhs11779 +logic.rhs11779: + %t114 = load ptr, ptr %a1 + %t115 = icmp eq ptr %t114, null + br i1 %t115, label %panic11781, label %ok11782 +panic11781: + call void @finch_panic(ptr @.str.7497, i64 415, ptr @.str.7498) + unreachable +ok11782: + %t116 = getelementptr inbounds %S.json.Reader, ptr %t114, i32 0, i32 0 + %t117 = load ptr, ptr %a1 + %t118 = icmp eq ptr %t117, null + br i1 %t118, label %panic11783, label %ok11784 +panic11783: + call void @finch_panic(ptr @.str.7499, i64 415, ptr @.str.7500) + unreachable +ok11784: + %t119 = getelementptr inbounds %S.json.Reader, ptr %t117, i32 0, i32 1 + %t120 = load i64, ptr %t119 + %t121 = load { ptr, i64, i64 }, ptr %t116 + %t122 = extractvalue { ptr, i64, i64 } %t121, 1 + %t123 = icmp uge i64 %t120, %t122 + br i1 %t123, label %range11785, label %inrange11786 +range11785: + call void @finch_panic_index(ptr @.str.7501, i64 415, i64 %t120, i64 %t122) + unreachable +inrange11786: + %t124 = extractvalue { ptr, i64, i64 } %t121, 0 + %t125 = getelementptr inbounds i8, ptr %t124, i64 %t120 + %t126 = load i8, ptr %t125 + %t127 = icmp eq i8 %t126, 45 + br label %logic.rend11787 +logic.rend11787: + br label %logic.end11780 +logic.end11780: + %t128 = phi i1 [ true, %logic.from11778 ], [ %t127, %logic.rend11787 ] + br label %logic.rend11788 +logic.rend11788: + br label %logic.end11721 +logic.end11721: + %t129 = phi i1 [ false, %logic.from11719 ], [ %t128, %logic.rend11788 ] + br i1 %t129, label %while.body11713, label %while.end11714 +while.body11713: + %t130 = load ptr, ptr %a1 + %t131 = icmp eq ptr %t130, null + br i1 %t131, label %panic11789, label %ok11790 +panic11789: + call void @finch_panic(ptr @.str.7502, i64 416, ptr @.str.7503) + unreachable +ok11790: + %t132 = getelementptr inbounds %S.json.Reader, ptr %t130, i32 0, i32 1 + %t133 = load i64, ptr %t132 + %t134 = add i64 %t133, 1 + store i64 %t134, ptr %t132 + br label %while.cond11712 +while.end11714: + %t135 = load ptr, ptr %a1 + %t136 = icmp eq ptr %t135, null + br i1 %t136, label %panic11791, label %ok11792 +panic11791: + call void @finch_panic(ptr @.str.7504, i64 418, ptr @.str.7505) + unreachable +ok11792: + %t137 = getelementptr inbounds %S.json.Reader, ptr %t135, i32 0, i32 0 + %t138 = load { ptr, i64, i64 }, ptr %t137 + store { ptr, i64, i64 } %t138, ptr %a139 + %t141 = load i64, ptr %a6 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic11793, label %ok11794 +panic11793: + call void @finch_panic(ptr @.str.7507, i64 418, ptr @.str.7508) + unreachable +ok11794: + %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 + %t145 = load i64, ptr %t144 + call void @finch_str_sub(ptr %a140, ptr %a139, i64 %t141, i64 %t145, ptr @.str.7506, i64 418) + %t146 = load { ptr, i64, i64 }, ptr %a140 + store { ptr, i64, i64 } zeroinitializer, ptr %a147 + store double 0.0, ptr %a148 + store { ptr, i64, i64 } %t146, ptr %a149 + %t150 = call i32 @finch_str_try_float(ptr %a149, ptr %a148, ptr %a147) + %t151 = icmp eq i32 %t150, 0 + %t152 = load { ptr, i64, i64 }, ptr %a147 + store { ptr, i64, i64 } %t146, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load double, ptr %a148 + br i1 %t151, label %or.failed11795, label %or.ok11796 +or.failed11795: + store { ptr, i64, i64 } %t152, ptr %a155 + %t156 = load i64, ptr %a6 + %t157 = load ptr, ptr %a1 + %t158 = icmp eq ptr %t157, null + br i1 %t158, label %panic11797, label %ok11798 +panic11797: + call void @finch_panic(ptr @.str.7509, i64 419, ptr @.str.7510) + unreachable +ok11798: + %t159 = getelementptr inbounds %S.json.Reader, ptr %t157, i32 0, i32 1 + store i64 %t156, ptr %t159 + %t160 = load ptr, ptr %a1 + %t161 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t160, { ptr, i64, i64 } { ptr @.str.7511, i64 8, i64 0 }) + call void @finch_str_drop(ptr %a155) + %t162 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t161, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t162 +or.ok11796: + store double %t154, ptr %a163 + %t164 = load double, ptr %a163 + %t165 = call %S.json.Json @finch.json.new_number(double %t164) + %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t167 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t166, %S.json.Json %t165, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t167 +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a5 = alloca i8, align 16 + %a22 = alloca %S.json.Json, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca %S.json.Json, align 16 + %a103 = alloca %S.json.Json, align 16 + %a128 = alloca %S.json.Json, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t2) + %t3 = load ptr, ptr %a1 + %t4 = call i8 @finch.json.peek(ptr %t3) + store i8 %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11799, label %ok11800 +panic11799: + call void @finch_panic(ptr @.str.7512, i64 428, ptr @.str.7513) + unreachable +ok11800: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic11801, label %ok11802 +panic11801: + call void @finch_panic(ptr @.str.7514, i64 428, ptr @.str.7515) + unreachable +ok11802: + %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sge i64 %t9, %t14 + br i1 %t15, label %then11803, label %endif11805 +then11803: + %t16 = load ptr, ptr %a1 + %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7516, i64 7, i64 0 }) + %t18 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t17, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t18 +endif11805: + %t19 = load i8, ptr %a5 + %t20 = icmp eq i8 %t19, 123 + br i1 %t20, label %then11806, label %endif11808 +then11806: + %t21 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t21, ptr %a22 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic11809, label %ok11810 +panic11809: + call void @finch_panic(ptr @.str.7517, i64 433, ptr @.str.7518) + unreachable +ok11810: + %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 + %t26 = load i64, ptr %t25 + %t27 = add i64 %t26, 1 + store i64 %t27, ptr %t25 + %t28 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t28) + %t29 = load ptr, ptr %a1 + %t30 = call i8 @finch.json.peek(ptr %t29) + %t31 = icmp eq i8 %t30, 125 + br i1 %t31, label %then11811, label %endif11813 +then11811: + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic11814, label %ok11815 +panic11814: + call void @finch_panic(ptr @.str.7519, i64 436, ptr @.str.7520) + unreachable +ok11815: + %t34 = getelementptr inbounds %S.json.Reader, ptr %t32, i32 0, i32 1 + %t35 = load i64, ptr %t34 + %t36 = add i64 %t35, 1 + store i64 %t36, ptr %t34 + %t37 = load %S.json.Json, ptr %a22 + %t38 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t39 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t38, %S.json.Json %t37, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t39 +endif11813: + br label %while.cond11816 +while.cond11816: + br label %while.body11817 +while.body11817: + %t40 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t40) + %t41 = load ptr, ptr %a1 + %t42 = call i8 @finch.json.peek(ptr %t41) + %t43 = icmp ne i8 %t42, 34 + br i1 %t43, label %then11819, label %endif11821 +then11819: + %t44 = load ptr, ptr %a1 + %t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7521, i64 15, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a22) + %t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t45, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46 +endif11821: + %t47 = load ptr, ptr %a1 + %t48 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t47) + %t49 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 0 + %t50 = xor i1 %t49, true + %t51 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 2 + %t52 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 1 + br i1 %t50, label %try.failed11822, label %try.ok11823 +try.failed11822: + call void @finch.drop.S_json_Json(ptr %a22) + %t53 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t51, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t53 +try.ok11823: + store { ptr, i64, i64 } %t52, ptr %a54 + %t55 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t55) + %t56 = load ptr, ptr %a1 + %t57 = call i8 @finch.json.peek(ptr %t56) + %t58 = icmp ne i8 %t57, 58 + br i1 %t58, label %then11824, label %endif11826 +then11824: + %t59 = load ptr, ptr %a1 + %t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7522, i64 3, i64 0 }) + call void @finch_str_drop(ptr %a54) + call void @finch.drop.S_json_Json(ptr %a22) + %t61 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t60, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t61 +endif11826: + %t62 = load ptr, ptr %a1 + %t63 = icmp eq ptr %t62, null + br i1 %t63, label %panic11827, label %ok11828 +panic11827: + call void @finch_panic(ptr @.str.7523, i64 449, ptr @.str.7524) + unreachable +ok11828: + %t64 = getelementptr inbounds %S.json.Reader, ptr %t62, i32 0, i32 1 + %t65 = load i64, ptr %t64 + %t66 = add i64 %t65, 1 + store i64 %t66, ptr %t64 + %t67 = load ptr, ptr %a1 + %t68 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t67) + %t69 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 0 + %t70 = xor i1 %t69, true + %t71 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 2 + %t72 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 1 + br i1 %t70, label %try.failed11829, label %try.ok11830 +try.failed11829: + call void @finch_str_drop(ptr %a54) + call void @finch.drop.S_json_Json(ptr %a22) + %t73 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t71, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t73 +try.ok11830: + store %S.json.Json %t72, ptr %a74 + %t75 = load { ptr, i64, i64 }, ptr %a54 + %t76 = load %S.json.Json, ptr %a74 + call void @finch.json.Json.set(ptr %a22, { ptr, i64, i64 } %t75, %S.json.Json %t76) + %t77 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t77) + %t78 = load ptr, ptr %a1 + %t79 = call i8 @finch.json.peek(ptr %t78) + %t80 = icmp eq i8 %t79, 44 + br i1 %t80, label %then11831, label %endif11833 +then11831: + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic11834, label %ok11835 +panic11834: + call void @finch_panic(ptr @.str.7525, i64 454, ptr @.str.7526) + unreachable +ok11835: + %t83 = getelementptr inbounds %S.json.Reader, ptr %t81, i32 0, i32 1 + %t84 = load i64, ptr %t83 + %t85 = add i64 %t84, 1 + store i64 %t85, ptr %t83 + call void @finch.drop.S_json_Json(ptr %a74) + call void @finch_str_drop(ptr %a54) + br label %while.cond11816 +endif11833: + %t86 = load ptr, ptr %a1 + %t87 = call i8 @finch.json.peek(ptr %t86) + %t88 = icmp eq i8 %t87, 125 + br i1 %t88, label %then11836, label %endif11838 +then11836: + %t89 = load ptr, ptr %a1 + %t90 = icmp eq ptr %t89, null + br i1 %t90, label %panic11839, label %ok11840 +panic11839: + call void @finch_panic(ptr @.str.7527, i64 458, ptr @.str.7528) + unreachable +ok11840: + %t91 = getelementptr inbounds %S.json.Reader, ptr %t89, i32 0, i32 1 + %t92 = load i64, ptr %t91 + %t93 = add i64 %t92, 1 + store i64 %t93, ptr %t91 + %t94 = load %S.json.Json, ptr %a22 + call void @finch.drop.S_json_Json(ptr %a74) + call void @finch_str_drop(ptr %a54) + %t95 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t96 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t95, %S.json.Json %t94, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t96 +endif11838: + %t97 = load ptr, ptr %a1 + %t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7529, i64 10, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a74) + call void @finch_str_drop(ptr %a54) + call void @finch.drop.S_json_Json(ptr %a22) + %t99 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t98, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t99 +endif11808: + %t100 = load i8, ptr %a5 + %t101 = icmp eq i8 %t100, 91 + br i1 %t101, label %then11841, label %endif11843 +then11841: + %t102 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t102, ptr %a103 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic11844, label %ok11845 +panic11844: + call void @finch_panic(ptr @.str.7530, i64 466, ptr @.str.7531) + unreachable +ok11845: + %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 1 + %t107 = load i64, ptr %t106 + %t108 = add i64 %t107, 1 + store i64 %t108, ptr %t106 + %t109 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t109) + %t110 = load ptr, ptr %a1 + %t111 = call i8 @finch.json.peek(ptr %t110) + %t112 = icmp eq i8 %t111, 93 + br i1 %t112, label %then11846, label %endif11848 +then11846: + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic11849, label %ok11850 +panic11849: + call void @finch_panic(ptr @.str.7532, i64 469, ptr @.str.7533) + unreachable +ok11850: + %t115 = getelementptr inbounds %S.json.Reader, ptr %t113, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = add i64 %t116, 1 + store i64 %t117, ptr %t115 + %t118 = load %S.json.Json, ptr %a103 + %t119 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t120 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t119, %S.json.Json %t118, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t120 +endif11848: + br label %while.cond11851 +while.cond11851: + br label %while.body11852 +while.body11852: + %t121 = load ptr, ptr %a1 + %t122 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t121) + %t123 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 0 + %t124 = xor i1 %t123, true + %t125 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 2 + %t126 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 1 + br i1 %t124, label %try.failed11854, label %try.ok11855 +try.failed11854: + call void @finch.drop.S_json_Json(ptr %a103) + %t127 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t125, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t127 +try.ok11855: + store %S.json.Json %t126, ptr %a128 + %t129 = load %S.json.Json, ptr %a128 + call void @finch.json.Json.push(ptr %a103, %S.json.Json %t129) + %t130 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t130) + %t131 = load ptr, ptr %a1 + %t132 = call i8 @finch.json.peek(ptr %t131) + %t133 = icmp eq i8 %t132, 44 + br i1 %t133, label %then11856, label %endif11858 +then11856: + %t134 = load ptr, ptr %a1 + %t135 = icmp eq ptr %t134, null + br i1 %t135, label %panic11859, label %ok11860 +panic11859: + call void @finch_panic(ptr @.str.7534, i64 477, ptr @.str.7535) + unreachable +ok11860: + %t136 = getelementptr inbounds %S.json.Reader, ptr %t134, i32 0, i32 1 + %t137 = load i64, ptr %t136 + %t138 = add i64 %t137, 1 + store i64 %t138, ptr %t136 + call void @finch.drop.S_json_Json(ptr %a128) + br label %while.cond11851 +endif11858: + %t139 = load ptr, ptr %a1 + %t140 = call i8 @finch.json.peek(ptr %t139) + %t141 = icmp eq i8 %t140, 93 + br i1 %t141, label %then11861, label %endif11863 +then11861: + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic11864, label %ok11865 +panic11864: + call void @finch_panic(ptr @.str.7536, i64 481, ptr @.str.7537) + unreachable +ok11865: + %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 + %t145 = load i64, ptr %t144 + %t146 = add i64 %t145, 1 + store i64 %t146, ptr %t144 + %t147 = load %S.json.Json, ptr %a103 + call void @finch.drop.S_json_Json(ptr %a128) + %t148 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t149 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t148, %S.json.Json %t147, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t149 +endif11863: + %t150 = load ptr, ptr %a1 + %t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7538, i64 10, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a128) + call void @finch.drop.S_json_Json(ptr %a103) + %t152 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t151, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t152 +endif11843: + %t153 = load i8, ptr %a5 + %t154 = icmp eq i8 %t153, 34 + br i1 %t154, label %then11866, label %endif11868 +then11866: + %t155 = load ptr, ptr %a1 + %t156 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t155) + %t157 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 0 + %t158 = xor i1 %t157, true + %t159 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 2 + %t160 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 1 + br i1 %t158, label %try.failed11869, label %try.ok11870 +try.failed11869: + %t161 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t159, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t161 +try.ok11870: + store { ptr, i64, i64 } %t160, ptr %a162 + %t163 = load { ptr, i64, i64 }, ptr %a162 + %t164 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t163) + call void @finch_str_drop(ptr %a162) + %t165 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t165, %S.json.Json %t164, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t166 +endif11868: + %t167 = load i8, ptr %a5 + %t168 = icmp eq i8 %t167, 116 + br i1 %t168, label %then11871, label %endif11873 +then11871: + %t169 = load ptr, ptr %a1 + %t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7539, i64 4, i64 0 }) + %t171 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 0 + %t172 = xor i1 %t171, true + %t173 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 2 + br i1 %t172, label %try.failed11874, label %try.ok11875 +try.failed11874: + %t174 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t173, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t174 +try.ok11875: + %t175 = call %S.json.Json @finch.json.new_bool(i1 true) + %t176 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t177 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t176, %S.json.Json %t175, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t177 +endif11873: + %t178 = load i8, ptr %a5 + %t179 = icmp eq i8 %t178, 102 + br i1 %t179, label %then11876, label %endif11878 +then11876: + %t180 = load ptr, ptr %a1 + %t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7540, i64 5, i64 0 }) + %t182 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 0 + %t183 = xor i1 %t182, true + %t184 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 2 + br i1 %t183, label %try.failed11879, label %try.ok11880 +try.failed11879: + %t185 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t184, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t185 +try.ok11880: + %t186 = call %S.json.Json @finch.json.new_bool(i1 false) + %t187 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t188 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t187, %S.json.Json %t186, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t188 +endif11878: + %t189 = load i8, ptr %a5 + %t190 = icmp eq i8 %t189, 110 + br i1 %t190, label %then11881, label %endif11883 +then11881: + %t191 = load ptr, ptr %a1 + %t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7541, i64 4, i64 0 }) + %t193 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 0 + %t194 = xor i1 %t193, true + %t195 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 2 + br i1 %t194, label %try.failed11884, label %try.ok11885 +try.failed11884: + %t196 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t195, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t196 +try.ok11885: + %t197 = call %S.json.Json @finch.json.new_null() + %t198 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t199 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t198, %S.json.Json %t197, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t199 +endif11883: + %t200 = load i8, ptr %a5 + %t201 = icmp eq i8 %t200, 45 + br label %logic.from11886 +logic.from11886: + br i1 %t201, label %logic.end11888, label %logic.rhs11887 +logic.rhs11887: + %t202 = load i8, ptr %a5 + %t203 = icmp uge i8 %t202, 48 + br label %logic.from11889 +logic.from11889: + br i1 %t203, label %logic.rhs11890, label %logic.end11891 +logic.rhs11890: + %t204 = load i8, ptr %a5 + %t205 = icmp ule i8 %t204, 57 + br label %logic.rend11892 +logic.rend11892: + br label %logic.end11891 +logic.end11891: + %t206 = phi i1 [ false, %logic.from11889 ], [ %t205, %logic.rend11892 ] + br label %logic.rend11893 +logic.rend11893: + br label %logic.end11888 +logic.end11888: + %t207 = phi i1 [ true, %logic.from11886 ], [ %t206, %logic.rend11893 ] + br i1 %t207, label %then11894, label %endif11896 +then11894: + %t208 = load ptr, ptr %a1 + %t209 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %t208) + %t210 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 0 + %t211 = xor i1 %t210, true + %t212 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 2 + %t213 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 1 + br i1 %t211, label %try.failed11897, label %try.ok11898 +try.failed11897: + %t214 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t212, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t214 +try.ok11898: + %t215 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t216 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t215, %S.json.Json %t213, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t216 +endif11896: + %t217 = load ptr, ptr %a1 + %t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7542, i64 7, i64 0 }) + %t219 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t218, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t219 +} + +define internal void @finch.drop.S_json_Reader(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.json.Reader, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + ret void +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca %S.json.Reader, align 16 + %a14 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.json.Reader zeroinitializer, { ptr, i64, i64 } %t5, 0 + store %S.json.Reader %t6, ptr %a7 + %t8 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %a7) + %t9 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 0 + %t10 = xor i1 %t9, true + %t11 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 2 + %t12 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 1 + br i1 %t10, label %try.failed11899, label %try.ok11900 +try.failed11899: + call void @finch.drop.S_json_Reader(ptr %a7) + %t13 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t11, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t13 +try.ok11900: + store %S.json.Json %t12, ptr %a14 + call void @finch.json.skip_space(ptr %a7) + %t15 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 0 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp slt i64 %t16, %t19 + br i1 %t20, label %then11901, label %endif11903 +then11901: + %t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7543, i64 19, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a14) + call void @finch.drop.S_json_Reader(ptr %a7) + %t22 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t21, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t22 +endif11903: + %t23 = load %S.json.Json, ptr %a14 + call void @finch.drop.S_json_Reader(ptr %a7) + %t24 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t25 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, %S.json.Json %t23, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t25 +} + +define internal { ptr, i64, i64 } @finch.embedded.names() { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } zeroinitializer, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = add i64 %t3, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t5 = load ptr, ptr %a1 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 + store { ptr, i64, i64 } { ptr @.str.7544, i64 18, i64 0 }, ptr %t6 + store i64 %t4, ptr %t2 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 + store { ptr, i64, i64 } { ptr @.str.7545, i64 12, i64 0 }, ptr %t11 + store i64 %t9, ptr %t7 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 + store { ptr, i64, i64 } { ptr @.str.7546, i64 12, i64 0 }, ptr %t16 + store i64 %t14, ptr %t12 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = add i64 %t18, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + store { ptr, i64, i64 } { ptr @.str.7547, i64 12, i64 0 }, ptr %t21 + store i64 %t19, ptr %t17 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = add i64 %t23, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t25 = load ptr, ptr %a1 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 + store { ptr, i64, i64 } { ptr @.str.7548, i64 20, i64 0 }, ptr %t26 + store i64 %t24, ptr %t22 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = add i64 %t28, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t30 = load ptr, ptr %a1 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 + store { ptr, i64, i64 } { ptr @.str.7549, i64 12, i64 0 }, ptr %t31 + store i64 %t29, ptr %t27 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = add i64 %t33, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 + store { ptr, i64, i64 } { ptr @.str.7550, i64 20, i64 0 }, ptr %t36 + store i64 %t34, ptr %t32 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t40 = load ptr, ptr %a1 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 + store { ptr, i64, i64 } { ptr @.str.7551, i64 15, i64 0 }, ptr %t41 + store i64 %t39, ptr %t37 + %t42 = load { ptr, i64, i64 }, ptr %a1 + ret { ptr, i64, i64 } %t42 +} + +define internal { ptr, i64, i64 } @finch.embedded.texts() { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } zeroinitializer, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = add i64 %t3, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t5 = load ptr, ptr %a1 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 + store { ptr, i64, i64 } { ptr @.str.7552, i64 24981, i64 0 }, ptr %t6 + store i64 %t4, ptr %t2 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 + store { ptr, i64, i64 } { ptr @.str.7553, i64 12884, i64 0 }, ptr %t11 + store i64 %t9, ptr %t7 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 + store { ptr, i64, i64 } { ptr @.str.7554, i64 2846, i64 0 }, ptr %t16 + store i64 %t14, ptr %t12 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = add i64 %t18, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + store { ptr, i64, i64 } { ptr @.str.7555, i64 1406, i64 0 }, ptr %t21 + store i64 %t19, ptr %t17 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = add i64 %t23, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t25 = load ptr, ptr %a1 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 + store { ptr, i64, i64 } { ptr @.str.7556, i64 995, i64 0 }, ptr %t26 + store i64 %t24, ptr %t22 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = add i64 %t28, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t30 = load ptr, ptr %a1 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 + store { ptr, i64, i64 } { ptr @.str.7557, i64 2539, i64 0 }, ptr %t31 + store i64 %t29, ptr %t27 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = add i64 %t33, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 + store { ptr, i64, i64 } { ptr @.str.7558, i64 1792, i64 0 }, ptr %t36 + store i64 %t34, ptr %t32 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t40 = load ptr, ptr %a1 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 + store { ptr, i64, i64 } { ptr @.str.7559, i64 365, i64 0 }, ptr %t41 + store i64 %t39, ptr %t37 + %t42 = load { ptr, i64, i64 }, ptr %a1 + ret { ptr, i64, i64 } %t42 +} + +define i32 @main(i32 %argc, ptr %argv) { +entry: + %args = alloca { ptr, i64, i64 } + call void @finch_args(ptr %args, i32 %argc, ptr %argv) + %a = load { ptr, i64, i64 }, ptr %args + %r = call i64 @finch.main.main({ ptr, i64, i64 } %a) + %code = trunc i64 %r to i32 + ret i32 %code +} + diff --git a/bootstrap/winbuild.sh b/bootstrap/winbuild.sh new file mode 100755 index 0000000..03e1910 --- /dev/null +++ b/bootstrap/winbuild.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# Builds build/win/finch.exe from bootstrap/windows-x86_64.ll on Linux (to try the Windows compiler under Wine): +# bootstrap/winbuild.sh +set -eu +cd "$(dirname "$0")/.." +mkdir -p build/win +"$1/bin/x86_64-w64-mingw32-clang" -O1 -w bootstrap/windows-x86_64.ll runtime/finch_rt.c -o build/win/finch.exe "$2/bin/libclang.dll" +cp "$2/bin/libclang.dll" build/win/ diff --git a/bootstrap/windows-x86_64.ll b/bootstrap/windows-x86_64.ll new file mode 100644 index 0000000..aa59ea6 --- /dev/null +++ b/bootstrap/windows-x86_64.ll @@ -0,0 +1,117654 @@ +; generated by the Finch compiler written in Finch + +target triple = "x86_64-w64-mingw32" + +%S.main.Loader = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.lexer.Token = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1 } +%S.lexer.Lexer = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } +%S.ast.Type = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } +%S.ast.Node = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64 } +%S.ast.Program = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.parser.Parser = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 } } +%S.gen.Var = type { { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, i64, i1, i1, { ptr, i64, i64 }, i64, i64 } +%S.platform.Target = type { { ptr, i64, i64 }, i1, i1, i1, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Options = type { i1, i1, i1, { ptr, i64, i64 }, %S.platform.Target } +%S.gen.Template = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i1, i1 } +%S.gen.Binds = type { { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.EnumDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Cleanup = type { i1, i64 } +%S.gen.SumDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.SumPat = type { i64, { ptr, i64, i64 } } +%S.gen.Scope = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Pending = type { { ptr, i64, i64 }, %S.ast.Type, i1 } +%S.gen.Loop = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64 } +%S.gen.FnSig = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i1, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64 } +%S.gen.StructDef = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1 } +%S.gen.Val = type { { ptr, i64, i64 }, %S.ast.Type, i1, i1 } +%S.gen.Place = type { { ptr, i64, i64 }, %S.ast.Type } +%S.gen.Ref = type { i1, %S.gen.Place, %S.gen.Val } +%S.cimport.CImports = type { { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Gen = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i1, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.gen.FnSig, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, %S.cimport.CImports, i1, i1, { ptr, i64, i64 }, i1, %S.platform.Target, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, i64, i64 } +%S.gen.Saved = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i1, i64 } +%S.gen.SizeAlign = type { i64, i64 } +%S.gen.Fallible = type { %S.gen.Val, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.gen.Abi = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64 } +%S.gen.Leaf = type { i64, i64, i1, i1 } +%S.gen.Plan = type { %S.gen.Abi, { ptr, i64, i64 }, { ptr, i64, i64 }, i1 } +%S.docs.Doc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.cimport.CFunc = type { { ptr, i64, i64 }, { ptr, i64, i64 }, %S.ast.Type, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } +%S.cimport.CConst = type { i1, i64, double, { ptr, i64, i64 } } +%S.cimport.CField = type { { ptr, i64, i64 }, %S.ast.Type, i64, i64, i64, i1 } +%S.cimport.CStruct = type { { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i1 } +%S.cimport.Header = type { { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.cimport.Mapped = type { %S.ast.Type, { ptr, i64, i64 }, i1 } +%S.cimport.Importer = type { %S.cimport.CImports, ptr, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, i64 } +%S.cimport.FieldCtx = type { ptr, ptr } +%S.cimport.Number = type { %S.cimport.CConst, i1 } +%S.linker.Names = type { { ptr, i64, i64 } } +%S.linker.Build = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i1, { ptr, i64, i64 } } +%S.lsp.Ref = type { { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } +%S.lsp.VarRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, i64, i64 } +%S.lsp.FnRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.lsp.StructRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.lsp.EnumRec = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } +%S.lsp.Diag = type { i1, { ptr, i64, i64 }, i64, i64, { ptr, i64, i64 } } +%S.lsp.Analysis = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 }, %S.lsp.Diag } +%S.lsp.Server = type { { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64, i64, ptr, i64, i64 }, { ptr, i64, i64 }, i1 } +%S.lsp.Names = type { { ptr, i64, i64 } } +%S.json.Json = type { i32, i1, double, { ptr, i64, i64 }, { ptr, i64, i64 }, { ptr, i64, i64 } } +%S.json.Writer = type { { ptr, i64, i64 } } +%S.json.Reader = type { { ptr, i64, i64 }, i64 } +%S.C.threadlocinfo = type { ptr, i32, i32 } +%S.C._locale_tstruct = type { ptr, ptr } +%S.C.div_t = type { i32, i32 } +%S.C.ldiv_t = type { i32, i32 } +%S.C._CRT_DOUBLE = type { double } +%S.C._LDOUBLE = type { [10 x i8] } +%S.C._CRT_FLOAT = type { float } +%S.C.lldiv_t = type { i64, i64 } +%S.C._HEAPINFO = type { ptr, i64, i32, [4 x i8] } +%S.C.CXString = type { ptr, i32, [4 x i8] } +%S.C.CXStringSet = type { ptr, i32, [4 x i8] } +%S.C.__timeb64 = type { i64, i16, i16, i16, [2 x i8] } +%S.C.__timeb32 = type { i32, i16, i16, i16, [2 x i8] } +%S.C.timeb = type { i64, i16, i16, i16, [2 x i8] } +%S.C.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32 } +%S.C._timespec32 = type { i32, i32 } +%S.C._timespec64 = type { i64, i32, [4 x i8] } +%S.C.timespec = type { i64, i32, [4 x i8] } +%S.C.timeval = type { i32, i32 } +%S.C.timezone = type { i32, i32 } +%S.C.CXFileUniqueID = type { [3 x i64] } +%S.C.CXSourceLocation = type { [2 x ptr], i32, [4 x i8] } +%S.C.CXSourceRange = type { [2 x ptr], i32, i32 } +%S.C.CXSourceRangeList = type { i32, [4 x i8], ptr } +%S.C.CXIndexOptions = type { i32, i8, i8, [10 x i8], ptr, ptr } +%S.C.CXUnsavedFile = type { ptr, ptr, i32, [4 x i8] } +%S.C.CXTUResourceUsageEntry = type { i32, i32 } +%S.C.CXTUResourceUsage = type { ptr, i32, [4 x i8], ptr } +%S.C.CXCursor = type { i32, i32, [3 x ptr] } +%S.C.CXVersion = type { i32, i32, i32 } +%S.C.CXPlatformAvailability = type { %S.C.CXString, %S.C.CXVersion, %S.C.CXVersion, %S.C.CXVersion, i32, %S.C.CXString } +%S.C.CXType = type { i32, [4 x i8], [2 x ptr] } +%S.C.CXToken = type { [4 x i32], ptr } +%S.C.CXCompletionResult = type { i32, [4 x i8], ptr } +%S.C.CXCodeCompleteResults = type { ptr, i32, [4 x i8] } +%S.C.CXCursorAndRangeVisitor = type { ptr, ptr } +%S.C.CXIdxLoc = type { [2 x ptr], i32, [4 x i8] } +%S.C.CXIdxAttrInfo = type { i32, [4 x i8], %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxEntityInfo = type { i32, i32, i32, [4 x i8], ptr, ptr, %S.C.CXCursor, ptr, i32, [4 x i8] } +%S.C.CXIdxContainerInfo = type { %S.C.CXCursor } +%S.C.CXIdxDeclInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr, ptr, i32, i32, i32, [4 x i8], ptr, i32, [4 x i8], ptr, i32, i32 } +%S.C.CXIdxObjCContainerDeclInfo = type { ptr, i32, [4 x i8] } +%S.C.CXIdxBaseClassInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxObjCProtocolRefInfo = type { ptr, %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxObjCProtocolRefListInfo = type { ptr, i32, [4 x i8] } +%S.C.CXIdxObjCInterfaceDeclInfo = type { ptr, ptr, ptr } +%S.C.CXIdxObjCCategoryDeclInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc, ptr } +%S.C.CXIdxObjCPropertyDeclInfo = type { ptr, ptr, ptr } +%S.C.CXIdxIBOutletCollectionAttrInfo = type { ptr, ptr, %S.C.CXCursor, %S.C.CXIdxLoc } +%S.C.CXIdxCXXClassDeclInfo = type { ptr, ptr, i32, [4 x i8] } +%S.C.IndexerCallbacks = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } +%S.C.FILE = type { ptr } +%S.C._onexit_table_t = type { ptr, ptr, ptr } +%S.C._finddata32_t = type { i32, i32, i32, i32, i32, [260 x i8] } +%S.C._finddata32i64_t = type { i32, i32, i32, i32, i64, [260 x i8], [4 x i8] } +%S.C.__finddata64_t = type { i32, [4 x i8], i64, i64, i64, i64, [260 x i8], [4 x i8] } +%S.C._finddata64i32_t = type { i32, [4 x i8], i64, i64, i64, i32, [260 x i8] } +%S.C._wfinddata32_t = type { i32, i32, i32, i32, i32, [260 x i16] } +%S.C._wfinddata32i64_t = type { i32, i32, i32, i32, i64, [260 x i16] } +%S.C._wfinddata64i32_t = type { i32, [4 x i8], i64, i64, i64, i32, [260 x i16], [4 x i8] } +%S.C._wfinddata64_t = type { i32, [4 x i8], i64, i64, i64, i64, [260 x i16] } +%S.C._diskfree_t = type { i32, i32, i32, i32 } +@.str.1 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.2 = private unnamed_addr constant [2 x i8] c".\00" +@.str.3 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.4 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.5 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.7 = private unnamed_addr constant [3 x i8] c"./\00" +@.str.8 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.9 = private unnamed_addr constant [2 x i8] c".\00" +@.str.10 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.11 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.12 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" +@.str.13 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.14 = private unnamed_addr constant [37 x i8] c"used .overlayFiles on a null pointer\00" +@.str.15 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.16 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.17 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.18 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.19 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.20 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.21 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.22 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.23 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.24 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.25 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.26 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.27 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.28 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.29 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.30 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.31 = private unnamed_addr constant [30 x i8] c"used .paths on a null pointer\00" +@.str.32 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.33 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.34 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.35 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.36 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.37 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.38 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.39 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.40 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.41 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.42 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.43 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.44 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.45 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.46 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.47 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.48 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.49 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.50 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.51 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.52 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.53 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.54 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.55 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.56 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.57 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.58 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.59 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.60 = private unnamed_addr constant [27 x i8] c"used .os on a null pointer\00" +@.str.61 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.62 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.63 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.64 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.65 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.66 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.67 = private unnamed_addr constant [28 x i8] c"used .std on a null pointer\00" +@.str.68 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.69 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.70 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.71 = private unnamed_addr constant [37 x i8] c"used .overlayPaths on a null pointer\00" +@.str.72 = private unnamed_addr constant [31 x i8] c"error: can't find the module '\00" +@.str.73 = private unnamed_addr constant [15 x i8] c"' (looked for \00" +@.str.74 = private unnamed_addr constant [2 x i8] c")\00" +@.str.75 = private unnamed_addr constant [1 x i8] c"\00" +@.str.76 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.77 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.78 = private unnamed_addr constant [20 x i8] c"error: can't open '\00" +@.str.79 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.80 = private unnamed_addr constant [1 x i8] c"\00" +@.str.81 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.82 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.83 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.84 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.85 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.86 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.87 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.88 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.89 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.90 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" +@.str.91 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.92 = private unnamed_addr constant [31 x i8] c"used .loaded on a null pointer\00" +@.str.93 = private unnamed_addr constant [42 x i8] c"Finch -- the compiler is written in Finch\00" +@.str.94 = private unnamed_addr constant [1 x i8] c"\00" +@.str.95 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.96 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.97 = private unnamed_addr constant [7 x i8] c"usage:\00" +@.str.98 = private unnamed_addr constant [1 x i8] c"\00" +@.str.99 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.100 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.101 = private unnamed_addr constant [61 x i8] c" finch run [args...] build and run a program\00" +@.str.102 = private unnamed_addr constant [1 x i8] c"\00" +@.str.103 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.104 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.105 = private unnamed_addr constant [53 x i8] c" finch build [-o name] build a program\00" +@.str.106 = private unnamed_addr constant [1 x i8] c"\00" +@.str.107 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.108 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.109 = private unnamed_addr constant [55 x i8] c" finch ir print the LLVM IR\00" +@.str.110 = private unnamed_addr constant [1 x i8] c"\00" +@.str.111 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.112 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.113 = private unnamed_addr constant [54 x i8] c" finch version show the version\00" +@.str.114 = private unnamed_addr constant [1 x i8] c"\00" +@.str.115 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.116 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.117 = private unnamed_addr constant [91 x i8] c" finch lsp the language server, for editors (VS Code, Kate, ...)\00" +@.str.118 = private unnamed_addr constant [1 x i8] c"\00" +@.str.119 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.120 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.121 = private unnamed_addr constant [9 x i8] c"options:\00" +@.str.122 = private unnamed_addr constant [1 x i8] c"\00" +@.str.123 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.124 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.125 = private unnamed_addr constant [54 x i8] c" -O0 no optimization (faster to build)\00" +@.str.126 = private unnamed_addr constant [1 x i8] c"\00" +@.str.127 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.128 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.129 = private unnamed_addr constant [77 x i8] c" -l link a library (the same as link \22lib\22 in the program)\00" +@.str.130 = private unnamed_addr constant [1 x i8] c"\00" +@.str.131 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.132 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.133 = private unnamed_addr constant [58 x i8] c" -I look for imported C headers there too\00" +@.str.134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.135 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.136 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.137 = private unnamed_addr constant [67 x i8] c" -g debug info (for gdb and lldb; use -O0 with it)\00" +@.str.138 = private unnamed_addr constant [1 x i8] c"\00" +@.str.139 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.140 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.141 = private unnamed_addr constant [102 x i8] c" --target build for another system: windows, linux, arm64 (Linux), macos, or an LLVM triple\00" +@.str.142 = private unnamed_addr constant [1 x i8] c"\00" +@.str.143 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.144 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.145 = private unnamed_addr constant [8 x i8] c"/files-\00" +@.str.146 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.147 = private unnamed_addr constant [6 x i8] c"/done\00" +@.str.148 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.149 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.150 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.151 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.152 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.153 = private unnamed_addr constant [6 x i8] c"/done\00" +@.str.154 = private unnamed_addr constant [1 x i8] c"\00" +@.str.155 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.156 = private unnamed_addr constant [8 x i8] c"version\00" +@.str.157 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.158 = private unnamed_addr constant [10 x i8] c"--version\00" +@.str.159 = private unnamed_addr constant [47 x i8] c"Finch 2.4.0 (the compiler is written in Finch)\00" +@.str.160 = private unnamed_addr constant [1 x i8] c"\00" +@.str.161 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.162 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.163 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.164 = private unnamed_addr constant [4 x i8] c"lsp\00" +@.str.165 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.166 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.167 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.168 = private unnamed_addr constant [6 x i8] c"build\00" +@.str.169 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.170 = private unnamed_addr constant [3 x i8] c"ir\00" +@.str.171 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.172 = private unnamed_addr constant [1 x i8] c"\00" +@.str.173 = private unnamed_addr constant [4 x i8] c"-O2\00" +@.str.174 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.175 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.176 = private unnamed_addr constant [3 x i8] c"-o\00" +@.str.177 = private unnamed_addr constant [6 x i8] c"build\00" +@.str.178 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.179 = private unnamed_addr constant [9 x i8] c"--shared\00" +@.str.180 = private unnamed_addr constant [6 x i8] c"build\00" +@.str.181 = private unnamed_addr constant [4 x i8] c"-O0\00" +@.str.182 = private unnamed_addr constant [4 x i8] c"-O0\00" +@.str.183 = private unnamed_addr constant [3 x i8] c"-l\00" +@.str.184 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.185 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.186 = private unnamed_addr constant [3 x i8] c"-l\00" +@.str.187 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.188 = private unnamed_addr constant [3 x i8] c"-I\00" +@.str.189 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.190 = private unnamed_addr constant [10 x i8] c"--overlay\00" +@.str.191 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.192 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.193 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.194 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.195 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.196 = private unnamed_addr constant [3 x i8] c"-g\00" +@.str.197 = private unnamed_addr constant [9 x i8] c"--target\00" +@.str.198 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.199 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.200 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.201 = private unnamed_addr constant [12 x i8] c"/finch_run_\00" +@.str.202 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.203 = private unnamed_addr constant [5 x i8] c".dll\00" +@.str.204 = private unnamed_addr constant [4 x i8] c"lib\00" +@.str.205 = private unnamed_addr constant [7 x i8] c".dylib\00" +@.str.206 = private unnamed_addr constant [4 x i8] c"lib\00" +@.str.207 = private unnamed_addr constant [4 x i8] c".so\00" +@.str.208 = private unnamed_addr constant [6 x i8] c"linux\00" +@.str.209 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.210 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.211 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.212 = private unnamed_addr constant [8 x i8] c"/../std\00" +@.str.213 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.214 = private unnamed_addr constant [5 x i8] c"/std\00" +@.str.215 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.216 = private unnamed_addr constant [20 x i8] c"/../share/finch/std\00" +@.str.217 = private unnamed_addr constant [4 x i8] c"std\00" +@.str.218 = private unnamed_addr constant [10 x i8] c"/path.fch\00" +@.str.219 = private unnamed_addr constant [5 x i8] c"/std\00" +@.str.220 = private unnamed_addr constant [11 x i8] c"FINCH_PATH\00" +@.str.221 = private unnamed_addr constant [1 x i8] c"\00" +declare ptr @getenv(ptr) +@.str.222 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.223 = private unnamed_addr constant [1 x i8] c"\00" +@.str.224 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.225 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.226 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.227 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.228 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.229 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.230 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.231 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.232 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.233 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.234 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.235 = private unnamed_addr constant [1 x i8] c"\00" +@.str.236 = private unnamed_addr constant [1 x i8] c"\00" +@.str.237 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.238 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.239 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.240 = private unnamed_addr constant [3 x i8] c"ir\00" +@.str.241 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.242 = private unnamed_addr constant [1 x i8] c"\00" +@.str.243 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.244 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.245 = private unnamed_addr constant [9 x i8] c"FINCH_RT\00" +@.str.246 = private unnamed_addr constant [1 x i8] c"\00" +@.str.247 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.248 = private unnamed_addr constant [23 x i8] c"/../runtime/finch_rt.c\00" +@.str.249 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.250 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00" +@.str.251 = private unnamed_addr constant [13 x i8] c"src/main.fch\00" +@.str.252 = private unnamed_addr constant [35 x i8] c"/../share/finch/runtime/finch_rt.c\00" +@.str.253 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.254 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.255 = private unnamed_addr constant [20 x i8] c"/runtime/finch_rt.c\00" +@.str.256 = private unnamed_addr constant [1 x i8] c"\00" +@.str.257 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.258 = private unnamed_addr constant [4 x i8] c" -g\00" +@.str.259 = private unnamed_addr constant [4 x i8] c"run\00" +@.str.260 = private unnamed_addr constant [2 x i8] c" \00" +@.str.261 = private unnamed_addr constant [2 x i8] c" \00" +@.str.262 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.263 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.264 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.265 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.266 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.267 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.268 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.269 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.270 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.271 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.272 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.273 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.274 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.275 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.276 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.277 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.278 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.279 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.280 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.281 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.282 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.283 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.284 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" +@.str.285 = private unnamed_addr constant [2 x i8] c":\00" +@.str.286 = private unnamed_addr constant [2 x i8] c":\00" +@.str.287 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.288 = private unnamed_addr constant [1 x i8] c"\00" +@.str.289 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.290 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.291 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.292 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.293 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.294 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.295 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.296 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.297 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.298 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.299 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.300 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.301 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.302 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.303 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.304 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.305 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.306 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.307 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.308 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.309 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.310 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" +@.str.311 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.312 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.313 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.314 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.315 = private unnamed_addr constant [3 x i8] c"->\00" +@.str.316 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.317 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.318 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.319 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.320 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.321 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.322 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.323 = private unnamed_addr constant [3 x i8] c"||\00" +@.str.324 = private unnamed_addr constant [3 x i8] c"..\00" +@.str.325 = private unnamed_addr constant [3 x i8] c":=\00" +@.str.326 = private unnamed_addr constant [3 x i8] c"+=\00" +@.str.327 = private unnamed_addr constant [3 x i8] c"-=\00" +@.str.328 = private unnamed_addr constant [3 x i8] c"*=\00" +@.str.329 = private unnamed_addr constant [3 x i8] c"/=\00" +@.str.330 = private unnamed_addr constant [3 x i8] c"%=\00" +@.str.331 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.332 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.333 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.334 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.335 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.336 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.337 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.338 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.339 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.340 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.341 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.342 = private unnamed_addr constant [23 x i8] c"(){}[],.:+-*/%&|^~<>=!\00" +@.str.343 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.344 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.345 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.346 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.347 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.348 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.349 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.350 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.351 = private unnamed_addr constant [1 x i8] c"\00" +@.str.352 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.353 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.354 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.355 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.356 = private unnamed_addr constant [17 x i8] c"unknown escape \5C\00" +@.str.357 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.358 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.359 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.360 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.361 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.362 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.363 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.364 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.365 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.366 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.367 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.368 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.369 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.370 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.371 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.372 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.373 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.374 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.375 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.376 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.377 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.378 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.379 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.380 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.381 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.382 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.383 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.384 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.385 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.386 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.387 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.388 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.389 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.390 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.391 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.392 = private unnamed_addr constant [37 x i8] c"comment is never closed (missing */)\00" +@.str.393 = private unnamed_addr constant [1 x i8] c"\00" +@.str.394 = private unnamed_addr constant [1 x i8] c"\00" +@.str.395 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.396 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.397 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.398 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.399 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.400 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" +@.str.401 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.402 = private unnamed_addr constant [27 x i8] c"used .nl on a null pointer\00" +@.str.403 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.404 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.405 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.406 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.407 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.408 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.409 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.410 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.411 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.412 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.413 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.414 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.415 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.416 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.417 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.418 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.419 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.420 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.421 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.422 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.423 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.424 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.425 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.426 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.427 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.428 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.429 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.430 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.431 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.432 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.433 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.434 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.435 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.436 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.437 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.438 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.439 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.440 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.441 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.442 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.443 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.444 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.445 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.446 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.447 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.448 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.449 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.450 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.451 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.452 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.453 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.454 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.455 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.456 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.457 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.458 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.459 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.460 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.461 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.463 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.464 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.465 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.466 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.467 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.468 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.469 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.470 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.471 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.472 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.473 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.474 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.475 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.476 = private unnamed_addr constant [1 x i8] c"\00" +@.str.477 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.478 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.479 = private unnamed_addr constant [35 x i8] c"string is never closed (missing \22)\00" +@.str.480 = private unnamed_addr constant [33 x i8] c"char is never closed (missing ')\00" +@.str.481 = private unnamed_addr constant [1 x i8] c"\00" +@.str.482 = private unnamed_addr constant [45 x i8] c"a char holds exactly one character, like 'a'\00" +@.str.483 = private unnamed_addr constant [1 x i8] c"\00" +@.str.484 = private unnamed_addr constant [75 x i8] c" (names use only a-z, A-Z, 0-9 and _; other letters only go inside \22text\22)\00" +@.str.485 = private unnamed_addr constant [23 x i8] c"unexpected character '\00" +@.str.486 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.487 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.488 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.489 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.490 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.491 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.492 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.493 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.494 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.495 = private unnamed_addr constant [1 x i8] c"\00" +@.str.496 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.497 = private unnamed_addr constant [29 x i8] c"used .line on a null pointer\00" +@.str.498 = private unnamed_addr constant [14 x i8] c"src/lexer.fch\00" +@.str.499 = private unnamed_addr constant [28 x i8] c"used .col on a null pointer\00" +@.str.500 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.501 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.502 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.503 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.504 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.505 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.506 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.507 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.508 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.509 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.510 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.511 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.512 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.513 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.514 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.515 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.516 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.517 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.518 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.519 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.520 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.521 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.522 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.523 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.524 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.525 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.526 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.527 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.528 = private unnamed_addr constant [12 x i8] c"src/ast.fch\00" +@.str.529 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.530 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.531 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.532 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.533 = private unnamed_addr constant [2 x i8] c".\00" +@.str.534 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.535 = private unnamed_addr constant [8 x i8] c"nothing\00" +@.str.536 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.537 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" +@.str.538 = private unnamed_addr constant [2 x i8] c":\00" +@.str.539 = private unnamed_addr constant [2 x i8] c":\00" +@.str.540 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.541 = private unnamed_addr constant [1 x i8] c"\00" +@.str.542 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.543 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.544 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.545 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.546 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.547 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.548 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.549 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.550 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.551 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.552 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.553 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.554 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.555 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.556 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.557 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.558 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.559 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.560 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.561 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.562 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.563 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.564 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.565 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.566 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.567 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.568 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.569 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.570 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.571 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.572 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.573 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.574 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.575 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.576 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.577 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.578 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.579 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.580 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.581 = private unnamed_addr constant [12 x i8] c"end of file\00" +@.str.582 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.583 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.584 = private unnamed_addr constant [9 x i8] c"a number\00" +@.str.585 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.586 = private unnamed_addr constant [9 x i8] c"a string\00" +@.str.587 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.588 = private unnamed_addr constant [7 x i8] c"a char\00" +@.str.589 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.590 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.591 = private unnamed_addr constant [10 x i8] c"expected \00" +@.str.592 = private unnamed_addr constant [9 x i8] c", found \00" +@.str.593 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.594 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.595 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.596 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.597 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.598 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.599 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.600 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.601 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.602 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.603 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.604 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.605 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.606 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" +@.str.607 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.608 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.609 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.610 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.611 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.612 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.613 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.614 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.615 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.616 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.617 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.618 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.619 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.620 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.621 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.622 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.623 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.624 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.625 = private unnamed_addr constant [37 x i8] c"']' (an array type looks like []int)\00" +@.str.626 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.627 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.628 = private unnamed_addr constant [57 x i8] c" (expected a type like int, str, []int or a struct name)\00" +@.str.629 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.630 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.631 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.632 = private unnamed_addr constant [40 x i8] c"']' (a map type looks like map[str]int)\00" +@.str.633 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.634 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.635 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.636 = private unnamed_addr constant [4 x i8] c"']'\00" +@.str.637 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.638 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.639 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.640 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.641 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.642 = private unnamed_addr constant [2 x i8] c".\00" +@.str.643 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.644 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.645 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.646 = private unnamed_addr constant [2 x i8] c",\00" +@.str.647 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.648 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" +@.str.649 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.650 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.651 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.652 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.653 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.654 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.655 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.656 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.657 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.658 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.659 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.660 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.661 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.662 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.663 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.664 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.665 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.666 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.667 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.668 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.669 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.670 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.671 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.672 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.673 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.674 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.675 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.676 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.677 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.678 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.679 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.680 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.681 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.682 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.683 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.684 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.685 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.686 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.687 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.688 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.689 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.690 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.691 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.692 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.693 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.694 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.695 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.696 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.697 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.698 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.699 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.700 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.701 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.702 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.703 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.704 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.705 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.706 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.707 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.708 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.709 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.710 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.711 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.712 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.713 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.714 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.715 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.716 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.717 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.718 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.719 = private unnamed_addr constant [2 x i8] c".\00" +@.str.720 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.721 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.722 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.723 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.724 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.725 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.726 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.727 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.728 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.729 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.730 = private unnamed_addr constant [38 x i8] c" (put each statement on its own line)\00" +@.str.731 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.732 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.733 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.734 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.735 = private unnamed_addr constant [29 x i8] c"used .path on a null pointer\00" +@.str.736 = private unnamed_addr constant [2 x i8] c":\00" +@.str.737 = private unnamed_addr constant [2 x i8] c":\00" +@.str.738 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.739 = private unnamed_addr constant [52 x i8] c"expected a module name or a C header after 'import'\00" +@.str.740 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.741 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.742 = private unnamed_addr constant [43 x i8] c"a library name in quotes, like link \22glfw\22\00" +@.str.743 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.744 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.745 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.746 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.747 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.748 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.749 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.750 = private unnamed_addr constant [4 x i8] c"lib\00" +@.str.751 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.752 = private unnamed_addr constant [4 x i8] c".so\00" +@.str.753 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.754 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.755 = private unnamed_addr constant [66 x i8] c"write just the library's name: for libglfw.so that's link \22glfw\22\00" +@.str.756 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.757 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.758 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.759 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.760 = private unnamed_addr constant [7 x i8] c"'enum'\00" +@.str.761 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.762 = private unnamed_addr constant [13 x i8] c"an enum name\00" +@.str.763 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.764 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.765 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.766 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.767 = private unnamed_addr constant [38 x i8] c"an enum is never closed (missing '}')\00" +@.str.768 = private unnamed_addr constant [8 x i8] c"variant\00" +@.str.769 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.770 = private unnamed_addr constant [25 x i8] c"a variant name, like Red\00" +@.str.771 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.772 = private unnamed_addr constant [2 x i8] c")\00" +@.str.773 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.774 = private unnamed_addr constant [2 x i8] c",\00" +@.str.775 = private unnamed_addr constant [2 x i8] c")\00" +@.str.776 = private unnamed_addr constant [36 x i8] c"')' after the values of the variant\00" +@.str.777 = private unnamed_addr constant [13 x i8] c"the variant \00" +@.str.778 = private unnamed_addr constant [28 x i8] c" has empty () : write just \00" +@.str.779 = private unnamed_addr constant [21 x i8] c" if it holds nothing\00" +@.str.780 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.781 = private unnamed_addr constant [53 x i8] c"a variant can't have both values inside and a number\00" +@.str.782 = private unnamed_addr constant [1 x i8] c"\00" +@.str.783 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.784 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.785 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.786 = private unnamed_addr constant [31 x i8] c"a whole number, like Ok = 200\00" +@.str.787 = private unnamed_addr constant [2 x i8] c",\00" +@.str.788 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.789 = private unnamed_addr constant [17 x i8] c" has no variants\00" +@.str.790 = private unnamed_addr constant [55 x i8] c"an enum whose variants hold values can't number them (\00" +@.str.791 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.792 = private unnamed_addr constant [2 x i8] c")\00" +@.str.793 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.794 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.795 = private unnamed_addr constant [4 x i8] c"tag\00" +@.str.796 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.797 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.798 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.799 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.800 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.801 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.802 = private unnamed_addr constant [8 x i8] c"'match'\00" +@.str.803 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.804 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.805 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.806 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.807 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.808 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.809 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.810 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.811 = private unnamed_addr constant [38 x i8] c"a match is never closed (missing '}')\00" +@.str.812 = private unnamed_addr constant [4 x i8] c"arm\00" +@.str.813 = private unnamed_addr constant [9 x i8] c"patterns\00" +@.str.814 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.815 = private unnamed_addr constant [2 x i8] c",\00" +@.str.816 = private unnamed_addr constant [3 x i8] c"->\00" +@.str.817 = private unnamed_addr constant [58 x i8] c"'->' after the value to match, like Red -> print(\22red\22)\00" +@.str.818 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.819 = private unnamed_addr constant [2 x i8] c",\00" +@.str.820 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.821 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.822 = private unnamed_addr constant [31 x i8] c"a match needs at least one arm\00" +@.str.823 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.824 = private unnamed_addr constant [4 x i8] c"'['\00" +@.str.825 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.826 = private unnamed_addr constant [30 x i8] c"a type parameter name, like T\00" +@.str.827 = private unnamed_addr constant [2 x i8] c",\00" +@.str.828 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.829 = private unnamed_addr constant [30 x i8] c"']' after the type parameters\00" +@.str.830 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.831 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.832 = private unnamed_addr constant [9 x i8] c"'struct'\00" +@.str.833 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.834 = private unnamed_addr constant [14 x i8] c"a struct name\00" +@.str.835 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.836 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.837 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.838 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.839 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.840 = private unnamed_addr constant [39 x i8] c"a struct is never closed (missing '}')\00" +@.str.841 = private unnamed_addr constant [6 x i8] c"field\00" +@.str.842 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.843 = private unnamed_addr constant [29 x i8] c" (a field looks like: int x)\00" +@.str.844 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.845 = private unnamed_addr constant [13 x i8] c"a field name\00" +@.str.846 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.847 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.848 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.849 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.850 = private unnamed_addr constant [69 x i8] c"functions start with 'fn', like: fn add(int a, int b) -> int { ... }\00" +@.str.851 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.852 = private unnamed_addr constant [27 x i8] c"'fn', 'struct' or 'import'\00" +@.str.853 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.854 = private unnamed_addr constant [16 x i8] c"a function name\00" +@.str.855 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.856 = private unnamed_addr constant [2 x i8] c".\00" +@.str.857 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.858 = private unnamed_addr constant [14 x i8] c"a method name\00" +@.str.859 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.860 = private unnamed_addr constant [4 x i8] c"'('\00" +@.str.861 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.862 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.863 = private unnamed_addr constant [2 x i8] c")\00" +@.str.864 = private unnamed_addr constant [6 x i8] c"param\00" +@.str.865 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.866 = private unnamed_addr constant [17 x i8] c"a parameter name\00" +@.str.867 = private unnamed_addr constant [2 x i8] c",\00" +@.str.868 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.869 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.870 = private unnamed_addr constant [2 x i8] c")\00" +@.str.871 = private unnamed_addr constant [4 x i8] c"')'\00" +@.str.872 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.873 = private unnamed_addr constant [3 x i8] c"->\00" +@.str.874 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.875 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.876 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.877 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.878 = private unnamed_addr constant [62 x i8] c" (after '->' comes a type, or ! for a function that can fail)\00" +@.str.879 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.880 = private unnamed_addr constant [6 x i8] c"block\00" +@.str.881 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.882 = private unnamed_addr constant [4 x i8] c"'{'\00" +@.str.883 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.884 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.885 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.886 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.887 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.888 = private unnamed_addr constant [4 x i8] c"eof\00" +@.str.889 = private unnamed_addr constant [36 x i8] c"a '{' is never closed (missing '}')\00" +@.str.890 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.891 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.892 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.893 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.894 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.895 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.896 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.897 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.898 = private unnamed_addr constant [21 x i8] c"a loop variable name\00" +@.str.899 = private unnamed_addr constant [2 x i8] c",\00" +@.str.900 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.901 = private unnamed_addr constant [28 x i8] c"a second loop variable name\00" +@.str.902 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.903 = private unnamed_addr constant [5 x i8] c"'in'\00" +@.str.904 = private unnamed_addr constant [3 x i8] c"..\00" +@.str.905 = private unnamed_addr constant [56 x i8] c"a range of numbers has one loop variable: for i in 0..n\00" +@.str.906 = private unnamed_addr constant [5 x i8] c"each\00" +@.str.907 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.908 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.909 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.910 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.911 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.912 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.913 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.914 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.915 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.916 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.917 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" +@.str.918 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.919 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.920 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.921 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.922 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.923 = private unnamed_addr constant [49 x i8] c"' can't be used here in the self-hosted compiler\00" +@.str.924 = private unnamed_addr constant [5 x i8] c"decl\00" +@.str.925 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.926 = private unnamed_addr constant [16 x i8] c"a variable name\00" +@.str.927 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.928 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.929 = private unnamed_addr constant [3 x i8] c":=\00" +@.str.930 = private unnamed_addr constant [5 x i8] c"decl\00" +@.str.931 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.932 = private unnamed_addr constant [3 x i8] c"+=\00" +@.str.933 = private unnamed_addr constant [3 x i8] c"-=\00" +@.str.934 = private unnamed_addr constant [3 x i8] c"*=\00" +@.str.935 = private unnamed_addr constant [3 x i8] c"/=\00" +@.str.936 = private unnamed_addr constant [3 x i8] c"%=\00" +@.str.937 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.938 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.939 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.940 = private unnamed_addr constant [67 x i8] c"only a variable, a field, an element or p.value can be assigned to\00" +@.str.941 = private unnamed_addr constant [7 x i8] c"assign\00" +@.str.942 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.943 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" +@.str.944 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.945 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.946 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.947 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.948 = private unnamed_addr constant [38 x i8] c"this value is computed but never used\00" +@.str.949 = private unnamed_addr constant [5 x i8] c"expr\00" +@.str.950 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.951 = private unnamed_addr constant [29 x i8] c"used .file on a null pointer\00" +@.str.952 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.953 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.954 = private unnamed_addr constant [5 x i8] c"'if'\00" +@.str.955 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.956 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.957 = private unnamed_addr constant [3 x i8] c"||\00" +@.str.958 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.959 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.960 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.961 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.962 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.963 = private unnamed_addr constant [2 x i8] c">\00" +@.str.964 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.965 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.966 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.967 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.968 = private unnamed_addr constant [2 x i8] c"^\00" +@.str.969 = private unnamed_addr constant [2 x i8] c"*\00" +@.str.970 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.971 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.972 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.973 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.974 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.975 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.976 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.977 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.978 = private unnamed_addr constant [7 x i8] c"binary\00" +@.str.979 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.980 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.981 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.982 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.983 = private unnamed_addr constant [2 x i8] c"~\00" +@.str.984 = private unnamed_addr constant [6 x i8] c"unary\00" +@.str.985 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.986 = private unnamed_addr constant [4 x i8] c"'('\00" +@.str.987 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.988 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.989 = private unnamed_addr constant [2 x i8] c")\00" +@.str.990 = private unnamed_addr constant [2 x i8] c")\00" +@.str.991 = private unnamed_addr constant [1 x i8] c"\00" +@.str.992 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.993 = private unnamed_addr constant [2 x i8] c":\00" +@.str.994 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.995 = private unnamed_addr constant [30 x i8] c"used .names on a null pointer\00" +@.str.996 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.997 = private unnamed_addr constant [29 x i8] c"used .kids on a null pointer\00" +@.str.998 = private unnamed_addr constant [2 x i8] c",\00" +@.str.999 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1000 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1001 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1002 = private unnamed_addr constant [4 x i8] c"')'\00" +@.str.1003 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1004 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.1005 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.1006 = private unnamed_addr constant [17 x i8] c"a name after '.'\00" +@.str.1007 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1008 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.1009 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1010 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.1011 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1012 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1013 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1014 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1015 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1016 = private unnamed_addr constant [4 x i8] c"']'\00" +@.str.1017 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1018 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1019 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1020 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1021 = private unnamed_addr constant [7 x i8] c"string\00" +@.str.1022 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1023 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.1024 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1025 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1026 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1027 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1028 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1029 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1030 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1031 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1032 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1033 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1034 = private unnamed_addr constant [4 x i8] c"')'\00" +@.str.1035 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.1036 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1037 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1038 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1039 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1040 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1041 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1042 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1043 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1044 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1045 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1046 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1047 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1048 = private unnamed_addr constant [42 x i8] c"':' (a map entry looks like \22key\22: value)\00" +@.str.1049 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1050 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1051 = private unnamed_addr constant [30 x i8] c"used .depth on a null pointer\00" +@.str.1052 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1053 = private unnamed_addr constant [4 x i8] c"']'\00" +@.str.1054 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.1055 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1056 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1057 = private unnamed_addr constant [29 x i8] c"used .toks on a null pointer\00" +@.str.1058 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1059 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.1060 = private unnamed_addr constant [15 x i8] c"src/parser.fch\00" +@.str.1061 = private unnamed_addr constant [6 x i8] c"ident\00" +@.str.1062 = private unnamed_addr constant [6 x i8] c"targs\00" +@.str.1063 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1064 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1065 = private unnamed_addr constant [29 x i8] c"']' after the type arguments\00" +@.str.1066 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.1067 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1068 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.1069 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.1070 = private unnamed_addr constant [12 x i8] c"unexpected \00" +@.str.1071 = private unnamed_addr constant [20 x i8] c" (expected a value)\00" +@.str.1072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1073 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.1074 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" +@.str.1075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1076 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1077 = private unnamed_addr constant [3 x i8] c"\5Cn\00" +@.str.1078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1079 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1080 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1082 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.1083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1084 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1085 = private unnamed_addr constant [4 x i8] c"@R\09\00" +@.str.1086 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1087 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1089 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1090 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1091 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1092 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1093 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1094 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1095 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1096 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1097 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1099 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1100 = private unnamed_addr constant [4 x i8] c"fn \00" +@.str.1101 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1102 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1103 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1104 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1105 = private unnamed_addr constant [6 x i8] c" -> !\00" +@.str.1106 = private unnamed_addr constant [5 x i8] c" -> \00" +@.str.1107 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.1108 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1109 = private unnamed_addr constant [5 x i8] c" -> \00" +@.str.1110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1111 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.1112 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.1113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1114 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1117 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.1118 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.1119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1120 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1123 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1124 = private unnamed_addr constant [4 x i8] c"@I\09\00" +@.str.1125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1126 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.1127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1128 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1132 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1133 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1134 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1135 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1136 = private unnamed_addr constant [4 x i8] c"@F\09\00" +@.str.1137 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1138 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1139 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1141 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1143 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1144 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1145 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1146 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1147 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1148 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.1149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1150 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.1151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1152 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1154 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1156 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1157 = private unnamed_addr constant [4 x i8] c"@F\09\00" +@.str.1158 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1159 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1160 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1162 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1164 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1165 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1166 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1167 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1168 = private unnamed_addr constant [4 x i8] c"fn \00" +@.str.1169 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1170 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1171 = private unnamed_addr constant [7 x i8] c"](...)\00" +@.str.1172 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1174 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1176 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1180 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1181 = private unnamed_addr constant [4 x i8] c"@S\09\00" +@.str.1182 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1183 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1185 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1186 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1187 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1188 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1189 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1190 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1191 = private unnamed_addr constant [5 x i8] c"@SF\09\00" +@.str.1192 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1193 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1195 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1197 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1198 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1199 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1200 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1201 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1202 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1203 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1204 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1205 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1206 = private unnamed_addr constant [4 x i8] c"@E\09\00" +@.str.1207 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1208 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1209 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1210 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1211 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1212 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1213 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1215 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1216 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1217 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.1218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1219 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.1220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1221 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1222 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1223 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.1224 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1225 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1226 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.1227 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1229 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1230 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1231 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1232 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1233 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.1234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1235 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.1236 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1237 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.1238 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1240 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1242 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.1243 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1244 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1245 = private unnamed_addr constant [3 x i8] c" \00" +@.str.1246 = private unnamed_addr constant [9 x i8] c", !dbg !\00" +@.str.1247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1248 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1249 = private unnamed_addr constant [3 x i8] c" \00" +@.str.1250 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1251 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1252 = private unnamed_addr constant [3 x i8] c"%t\00" +@.str.1253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1254 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1256 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" +@.str.1257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1258 = private unnamed_addr constant [28 x i8] c"used .lbl on a null pointer\00" +@.str.1259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1260 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1261 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1263 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1265 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1266 = private unnamed_addr constant [11 x i8] c"br label %\00" +@.str.1267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1268 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1269 = private unnamed_addr constant [7 x i8] c"br i1 \00" +@.str.1270 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1271 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1273 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1275 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1276 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1277 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1278 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1279 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1280 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1281 = private unnamed_addr constant [3 x i8] c" \00" +@.str.1282 = private unnamed_addr constant [11 x i8] c" = alloca \00" +@.str.1283 = private unnamed_addr constant [11 x i8] c", align 16\00" +@.str.1284 = private unnamed_addr constant [9 x i8] c" = load \00" +@.str.1285 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1286 = private unnamed_addr constant [7 x i8] c"store \00" +@.str.1287 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1288 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1289 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.1290 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1291 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.1292 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.1293 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1294 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.1295 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.1296 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.1297 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.1298 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1299 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.1300 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1301 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1302 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.1303 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.1304 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.1305 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.1306 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1307 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.1308 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.1309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1310 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1311 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1313 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1315 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1316 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1318 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1319 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1321 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1322 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1323 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1324 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1326 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1327 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1329 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1331 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1332 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1333 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1335 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1337 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1338 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1339 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1340 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.1341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1342 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.1343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1344 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1345 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1346 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1347 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1348 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1349 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1350 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1351 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1352 = private unnamed_addr constant [64 x i8] c"a map key must be a whole number, a char, a bool or a str, not \00" +@.str.1353 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1354 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1355 = private unnamed_addr constant [42 x i8] c"a map value can't have the type 'nothing'\00" +@.str.1356 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.1357 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.1358 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1359 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1360 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1361 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.1362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1363 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.1364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1365 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.1366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1367 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.1368 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1369 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1370 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.1371 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1372 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" +@.str.1373 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1374 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1375 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1376 = private unnamed_addr constant [29 x i8] c"there is no C struct named '\00" +@.str.1377 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1378 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1379 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1381 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.1382 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1383 = private unnamed_addr constant [37 x i8] c"' is not imported here (add: import \00" +@.str.1384 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1385 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1386 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1387 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1388 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.1389 = private unnamed_addr constant [25 x i8] c"there is no type named '\00" +@.str.1390 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.1391 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1392 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1393 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1394 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1395 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1396 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1397 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1399 = private unnamed_addr constant [2 x i8] c",\00" +@.str.1400 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1401 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1402 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1403 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1404 = private unnamed_addr constant [5 x i8] c"main\00" +@.str.1405 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1406 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1407 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1408 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.1409 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1410 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.1411 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.1412 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1413 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1414 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1415 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.1416 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1417 = private unnamed_addr constant [38 x i8] c"{ ptr, i64, i64, i64, ptr, i64, i64 }\00" +@.str.1418 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.1419 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1420 = private unnamed_addr constant [4 x i8] c" x \00" +@.str.1421 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1422 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1423 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1424 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1425 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1426 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1427 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1428 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1429 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1430 = private unnamed_addr constant [4 x i8] c"%S.\00" +@.str.1431 = private unnamed_addr constant [2 x i8] c".\00" +@.str.1432 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.1433 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.1434 = private unnamed_addr constant [7 x i8] c"{ i1, \00" +@.str.1435 = private unnamed_addr constant [22 x i8] c", { ptr, i64, i64 } }\00" +@.str.1436 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1437 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1438 = private unnamed_addr constant [2 x i8] c":\00" +@.str.1439 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1440 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1441 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.1442 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1443 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1444 = private unnamed_addr constant [4 x i8] c"0.0\00" +@.str.1445 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1446 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1447 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1448 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.1449 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" +@.str.1450 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" +@.str.1451 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1452 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1453 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1454 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1455 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1456 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1458 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1459 = private unnamed_addr constant [5 x i8] c"arr_\00" +@.str.1460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1461 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1462 = private unnamed_addr constant [5 x i8] c"map_\00" +@.str.1463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1464 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.1465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1466 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1467 = private unnamed_addr constant [3 x i8] c"E_\00" +@.str.1468 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.1469 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1470 = private unnamed_addr constant [3 x i8] c"S_\00" +@.str.1471 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.1472 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" +@.str.1473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1476 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" +@.str.1477 = private unnamed_addr constant [7 x i8] c"@.str.\00" +@.str.1478 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1479 = private unnamed_addr constant [29 x i8] c"used .nstr on a null pointer\00" +@.str.1480 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.1481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1482 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.1483 = private unnamed_addr constant [35 x i8] c" = private unnamed_addr constant [\00" +@.str.1484 = private unnamed_addr constant [10 x i8] c" x i8] c\22\00" +@.str.1485 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1486 = private unnamed_addr constant [5 x i8] c"\5C00\22\00" +@.str.1487 = private unnamed_addr constant [7 x i8] c"{ ptr \00" +@.str.1488 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1489 = private unnamed_addr constant [10 x i8] c", i64 0 }\00" +@.str.1490 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1491 = private unnamed_addr constant [6 x i8] c"panic\00" +@.str.1492 = private unnamed_addr constant [3 x i8] c"ok\00" +@.str.1493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1494 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1496 = private unnamed_addr constant [28 x i8] c"call void @finch_panic(ptr \00" +@.str.1497 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1498 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1499 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1500 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.1501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1502 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1503 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.1504 = private unnamed_addr constant [8 x i8] c"inrange\00" +@.str.1505 = private unnamed_addr constant [14 x i8] c"icmp uge i64 \00" +@.str.1506 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1508 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.1509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1510 = private unnamed_addr constant [34 x i8] c"call void @finch_panic_index(ptr \00" +@.str.1511 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1512 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1513 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1514 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1515 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.1516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1517 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1519 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1521 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1523 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1525 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1527 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1529 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1530 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1531 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1532 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1533 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1535 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1537 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1539 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.1540 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" +@.str.1541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1542 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1543 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1544 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1546 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1547 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.1548 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" +@.str.1549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1550 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.1551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1552 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.1553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1554 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.1555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1556 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1558 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.1559 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1560 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1561 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.1562 = private unnamed_addr constant [7 x i8] c"n.cond\00" +@.str.1563 = private unnamed_addr constant [7 x i8] c"n.body\00" +@.str.1564 = private unnamed_addr constant [6 x i8] c"n.end\00" +@.str.1565 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1566 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.1567 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1568 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1569 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1570 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1571 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.1572 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.1573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1574 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1575 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1576 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1577 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" +@.str.1578 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1579 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1580 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1581 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1582 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1583 = private unnamed_addr constant [11 x i8] c"call void \00" +@.str.1584 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.1585 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1586 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1587 = private unnamed_addr constant [13 x i8] c"@finch.copy.\00" +@.str.1588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1589 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1591 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1592 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1593 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1594 = private unnamed_addr constant [56 x i8] c"call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 \00" +@.str.1595 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1596 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1597 = private unnamed_addr constant [5 x i8] c"%dst\00" +@.str.1598 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1599 = private unnamed_addr constant [5 x i8] c"%src\00" +@.str.1600 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1601 = private unnamed_addr constant [65 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1\00" +@.str.1602 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1603 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1604 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1606 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1607 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1608 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1610 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1611 = private unnamed_addr constant [56 x i8] c"call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 \00" +@.str.1612 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1615 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1616 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1617 = private unnamed_addr constant [25 x i8] c", ptr %src, i32 0, i32 2\00" +@.str.1618 = private unnamed_addr constant [5 x i8] c"%src\00" +@.str.1619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1620 = private unnamed_addr constant [5 x i8] c"%dst\00" +@.str.1621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1622 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.1623 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.1624 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.1625 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1626 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1627 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1628 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" +@.str.1629 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1630 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1633 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1634 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1635 = private unnamed_addr constant [5 x i8] c"%src\00" +@.str.1636 = private unnamed_addr constant [5 x i8] c"%dst\00" +@.str.1637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1638 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1639 = private unnamed_addr constant [24 x i8] c", ptr %dst, i32 0, i32 \00" +@.str.1640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1641 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1642 = private unnamed_addr constant [24 x i8] c", ptr %src, i32 0, i32 \00" +@.str.1643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1644 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1645 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.1646 = private unnamed_addr constant [22 x i8] c"define internal void \00" +@.str.1647 = private unnamed_addr constant [21 x i8] c"(ptr %dst, ptr %src)\00" +@.str.1648 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1649 = private unnamed_addr constant [31 x i8] c"call void @finch_str_drop(ptr \00" +@.str.1650 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1651 = private unnamed_addr constant [11 x i8] c"call void \00" +@.str.1652 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.1653 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1654 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1655 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.1656 = private unnamed_addr constant [13 x i8] c"@finch.drop.\00" +@.str.1657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1658 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1660 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1661 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1662 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1663 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1664 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1665 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1666 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00" +@.str.1667 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1668 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1669 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1670 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1671 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_free(ptr %a)\00" +@.str.1672 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1674 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1675 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1676 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1677 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00" +@.str.1678 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1679 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1680 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.1681 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.1682 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.1683 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1684 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1685 = private unnamed_addr constant [34 x i8] c"call void @finch_map_free(ptr %a)\00" +@.str.1686 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1687 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1690 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1691 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1694 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.1695 = private unnamed_addr constant [22 x i8] c"define internal void \00" +@.str.1696 = private unnamed_addr constant [9 x i8] c"(ptr %a)\00" +@.str.1697 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1698 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1699 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1700 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1702 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1703 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1704 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1705 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1707 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1709 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.1710 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1711 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.1712 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1713 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1714 = private unnamed_addr constant [36 x i8] c" = call i32 (ptr, ...) @printf(ptr \00" +@.str.1715 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1716 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.1717 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1718 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.1719 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.1720 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1721 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.1722 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1723 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1724 = private unnamed_addr constant [5 x i8] c"%lld\00" +@.str.1725 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1726 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1727 = private unnamed_addr constant [5 x i8] c"%llu\00" +@.str.1728 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1729 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.1730 = private unnamed_addr constant [3 x i8] c"%g\00" +@.str.1731 = private unnamed_addr constant [8 x i8] c"double \00" +@.str.1732 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1733 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1734 = private unnamed_addr constant [9 x i8] c"sext i8 \00" +@.str.1735 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.1736 = private unnamed_addr constant [5 x i8] c"'%c'\00" +@.str.1737 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1738 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.1739 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1740 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1741 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.1742 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1743 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.1744 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1745 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1746 = private unnamed_addr constant [3 x i8] c"%s\00" +@.str.1747 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.1748 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1749 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.1750 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.1751 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.1752 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.1753 = private unnamed_addr constant [7 x i8] c"\22%.*s\22\00" +@.str.1754 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1755 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1756 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.1757 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1758 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1759 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1760 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.1761 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.1762 = private unnamed_addr constant [9 x i8] c"ptr.null\00" +@.str.1763 = private unnamed_addr constant [9 x i8] c"ptr.addr\00" +@.str.1764 = private unnamed_addr constant [9 x i8] c"ptr.done\00" +@.str.1765 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1766 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1767 = private unnamed_addr constant [7 x i8] c"0x%llx\00" +@.str.1768 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1769 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str.1770 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str.1771 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1772 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1773 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1774 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.1775 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.1776 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.1777 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_print(ptr \00" +@.str.1778 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1779 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_add(ptr \00" +@.str.1780 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1781 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1782 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1783 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.1784 = private unnamed_addr constant [2 x i8] c"1\00" +@.str.1785 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_int(ptr \00" +@.str.1786 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1787 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.1788 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1789 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_uint(ptr \00" +@.str.1790 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1791 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.1792 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1793 = private unnamed_addr constant [32 x i8] c"call void @finch_buf_float(ptr \00" +@.str.1794 = private unnamed_addr constant [10 x i8] c", double \00" +@.str.1795 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.1796 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1797 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.1798 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_char(ptr \00" +@.str.1799 = private unnamed_addr constant [6 x i8] c", i8 \00" +@.str.1800 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.1801 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1802 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.1803 = private unnamed_addr constant [31 x i8] c"call void @finch_buf_bool(ptr \00" +@.str.1804 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.1805 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.1806 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.1807 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1808 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.1809 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_str(ptr \00" +@.str.1810 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1811 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.1812 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1813 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1814 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.1815 = private unnamed_addr constant [30 x i8] c"call void @finch_buf_ptr(ptr \00" +@.str.1816 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1817 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1818 = private unnamed_addr constant [11 x i8] c"call void \00" +@.str.1819 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.1820 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1821 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1822 = private unnamed_addr constant [15 x i8] c"@finch.format.\00" +@.str.1823 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1824 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1825 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1826 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.1827 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.1828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1829 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.1830 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1831 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1832 = private unnamed_addr constant [63 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1\00" +@.str.1833 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1834 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.1835 = private unnamed_addr constant [4 x i8] c"sep\00" +@.str.1836 = private unnamed_addr constant [5 x i8] c"item\00" +@.str.1837 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" +@.str.1838 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1839 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1840 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1841 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1842 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1843 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.1844 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.1845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1846 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1847 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1848 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.1849 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.1850 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1851 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.1852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1853 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.1854 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1855 = private unnamed_addr constant [11 x i8] c"enum.other\00" +@.str.1856 = private unnamed_addr constant [10 x i8] c"enum.done\00" +@.str.1857 = private unnamed_addr constant [7 x i8] c"enum.v\00" +@.str.1858 = private unnamed_addr constant [5 x i8] c"i32 \00" +@.str.1859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1860 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1862 = private unnamed_addr constant [12 x i8] c"switch i32 \00" +@.str.1863 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1864 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.1865 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1866 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.1867 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1868 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1870 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1871 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1872 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1873 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1874 = private unnamed_addr constant [40 x i8] c"call void @finch_buf_int(ptr %buf, i64 \00" +@.str.1875 = private unnamed_addr constant [10 x i8] c"sext i32 \00" +@.str.1876 = private unnamed_addr constant [8 x i8] c" to i64\00" +@.str.1877 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1878 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1879 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1880 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.1881 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1882 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1883 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.1884 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1885 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.1886 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1887 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1888 = private unnamed_addr constant [23 x i8] c", ptr %a, i32 0, i32 2\00" +@.str.1889 = private unnamed_addr constant [3 x i8] c"%a\00" +@.str.1890 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1891 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.1892 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.1893 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.1894 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1895 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.1896 = private unnamed_addr constant [4 x i8] c"sep\00" +@.str.1897 = private unnamed_addr constant [5 x i8] c"item\00" +@.str.1898 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1899 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1900 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1901 = private unnamed_addr constant [3 x i8] c"i1\00" +@.str.1902 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.1903 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1904 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1905 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1906 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1907 = private unnamed_addr constant [3 x i8] c": \00" +@.str.1908 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1909 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1911 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1912 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.1913 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.1914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1915 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.1916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1918 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1919 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1920 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.1921 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1922 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1923 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1924 = private unnamed_addr constant [10 x i8] c"sum.other\00" +@.str.1925 = private unnamed_addr constant [9 x i8] c"sum.done\00" +@.str.1926 = private unnamed_addr constant [6 x i8] c"sum.v\00" +@.str.1927 = private unnamed_addr constant [5 x i8] c"i64 \00" +@.str.1928 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1929 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1930 = private unnamed_addr constant [12 x i8] c"switch i64 \00" +@.str.1931 = private unnamed_addr constant [10 x i8] c", label %\00" +@.str.1932 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.1933 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1934 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.1935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1936 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.1937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1938 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1940 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1941 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1942 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1943 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1944 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1945 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1946 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1947 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1948 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1949 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1950 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1951 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1953 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1954 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1955 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1956 = private unnamed_addr constant [4 x i8] c"(?)\00" +@.str.1957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1958 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.1959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1960 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1961 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.1962 = private unnamed_addr constant [3 x i8] c", \00" +@.str.1963 = private unnamed_addr constant [1 x i8] c"\00" +@.str.1964 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1966 = private unnamed_addr constant [3 x i8] c": \00" +@.str.1967 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.1968 = private unnamed_addr constant [22 x i8] c", ptr %a, i32 0, i32 \00" +@.str.1969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1970 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1971 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.1973 = private unnamed_addr constant [5 x i8] c"%buf\00" +@.str.1974 = private unnamed_addr constant [2 x i8] c")\00" +@.str.1975 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.1976 = private unnamed_addr constant [22 x i8] c"define internal void \00" +@.str.1977 = private unnamed_addr constant [19 x i8] c"(ptr %buf, ptr %a)\00" +@.str.1978 = private unnamed_addr constant [7 x i8] c"trunc \00" +@.str.1979 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1980 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1981 = private unnamed_addr constant [6 x i8] c"sext \00" +@.str.1982 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1983 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1984 = private unnamed_addr constant [6 x i8] c"zext \00" +@.str.1985 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1986 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1987 = private unnamed_addr constant [7 x i8] c"fpext \00" +@.str.1988 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1989 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1990 = private unnamed_addr constant [9 x i8] c"fptrunc \00" +@.str.1991 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1992 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1993 = private unnamed_addr constant [8 x i8] c"sitofp \00" +@.str.1994 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1995 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1996 = private unnamed_addr constant [8 x i8] c"uitofp \00" +@.str.1997 = private unnamed_addr constant [2 x i8] c" \00" +@.str.1998 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.1999 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2000 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2001 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2002 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2003 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2004 = private unnamed_addr constant [12 x i8] c"the number \00" +@.str.2005 = private unnamed_addr constant [17 x i8] c" doesn't fit in \00" +@.str.2006 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2007 = private unnamed_addr constant [3 x i8] c".0\00" +@.str.2008 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2009 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2010 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2011 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2012 = private unnamed_addr constant [10 x i8] c" must be \00" +@.str.2013 = private unnamed_addr constant [15 x i8] c", but this is \00" +@.str.2014 = private unnamed_addr constant [7 x i8] c" (use \00" +@.str.2015 = private unnamed_addr constant [17 x i8] c"(...) to convert\00" +@.str.2016 = private unnamed_addr constant [27 x i8] c", it cuts off the fraction\00" +@.str.2017 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2018 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2019 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2020 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2021 = private unnamed_addr constant [35 x i8] c" (turn it into text with str(...))\00" +@.str.2022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2023 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2025 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2027 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2028 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2030 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2032 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2034 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2036 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2037 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2038 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2040 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2042 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2044 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2046 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2048 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2051 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2054 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2057 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2059 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2060 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2062 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2064 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2065 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2067 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.2068 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.2069 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2070 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2071 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2072 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2073 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2074 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.2075 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.2076 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.2077 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.2078 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.2079 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.2080 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.2081 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.2082 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2083 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.2084 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.2085 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.2086 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.2087 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.2088 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.2089 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.2090 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.2091 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.2092 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2093 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.2094 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.2095 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.2096 = private unnamed_addr constant [19 x i8] c"a variable named '\00" +@.str.2097 = private unnamed_addr constant [22 x i8] c"' already exists here\00" +@.str.2098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2099 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2100 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2101 = private unnamed_addr constant [36 x i8] c"' is already the name of a function\00" +@.str.2102 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2103 = private unnamed_addr constant [39 x i8] c"' is a built-in name, pick another one\00" +@.str.2104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2105 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2107 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2109 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2110 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2112 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2113 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2114 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2116 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.2117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2118 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.2119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2120 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2121 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.2122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2123 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.2124 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.2125 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2126 = private unnamed_addr constant [2 x i8] c"$\00" +@.str.2127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2128 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2129 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2130 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.2131 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2133 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.2134 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2136 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.2137 = private unnamed_addr constant [4 x i8] c"@V\09\00" +@.str.2138 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2139 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2141 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.2142 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2143 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2144 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2145 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2146 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2147 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.2148 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2149 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2150 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.2151 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.2152 = private unnamed_addr constant [2 x i8] c" \00" +@.str.2153 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.2154 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2156 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2157 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2158 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.2159 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2160 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2161 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2162 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2164 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.2165 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2166 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2168 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2169 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2170 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2172 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2173 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2175 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2177 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2179 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2181 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2182 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2183 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2186 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2187 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2189 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.2190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2191 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2192 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2195 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.2196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2197 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.2198 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2199 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.2200 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2201 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.2202 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.2203 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.2204 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.2205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2206 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2207 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.2208 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.2209 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.2210 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.2211 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.2212 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.2213 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.2214 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.2215 = private unnamed_addr constant [7 x i8] c"assign\00" +@.str.2216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2217 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.2218 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2219 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" +@.str.2220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2221 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.2222 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.2223 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2224 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2225 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2226 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2227 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2228 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2229 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2230 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2231 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2232 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2233 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2234 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2235 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2236 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2238 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2239 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2240 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2241 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2242 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2243 = private unnamed_addr constant [13 x i8] c"the struct '\00" +@.str.2244 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2245 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2246 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2247 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2248 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2249 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2250 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2251 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2252 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2254 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2255 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2256 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2258 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2259 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2260 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2261 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2262 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2264 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2265 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2266 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2267 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2268 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2269 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2270 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2271 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2272 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2273 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2274 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2275 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.2276 = private unnamed_addr constant [18 x i8] c" has the variant \00" +@.str.2277 = private unnamed_addr constant [7 x i8] c" twice\00" +@.str.2278 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2279 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.2280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2281 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2283 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2284 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2285 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2286 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2287 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2288 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2289 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.2290 = private unnamed_addr constant [18 x i8] c" has the variant \00" +@.str.2291 = private unnamed_addr constant [7 x i8] c" twice\00" +@.str.2292 = private unnamed_addr constant [17 x i8] c"two variants of \00" +@.str.2293 = private unnamed_addr constant [18 x i8] c" have the number \00" +@.str.2294 = private unnamed_addr constant [21 x i8] c" (give each its own)\00" +@.str.2295 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2296 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.2297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2298 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.2299 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2300 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2301 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2302 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2303 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.2304 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2306 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2307 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2308 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2310 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2313 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2315 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2316 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2318 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2319 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2320 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2321 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2322 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2323 = private unnamed_addr constant [11 x i8] c"function '\00" +@.str.2324 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2325 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2326 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2327 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2328 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" +@.str.2329 = private unnamed_addr constant [54 x i8] c"' here (a method goes in the same file as its struct)\00" +@.str.2330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2331 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2332 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2333 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2335 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2336 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2337 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2338 = private unnamed_addr constant [12 x i8] c"the method \00" +@.str.2339 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2340 = private unnamed_addr constant [18 x i8] c" is defined twice\00" +@.str.2341 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2342 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2343 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2344 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2345 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.2346 = private unnamed_addr constant [27 x i8] c"there is no struct named '\00" +@.str.2347 = private unnamed_addr constant [77 x i8] c"' here (a method goes in the same file as its struct, or on a struct from C)\00" +@.str.2348 = private unnamed_addr constant [12 x i8] c"the method \00" +@.str.2349 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2350 = private unnamed_addr constant [18 x i8] c" is defined twice\00" +@.str.2351 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2352 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2353 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2354 = private unnamed_addr constant [12 x i8] c"the struct \00" +@.str.2355 = private unnamed_addr constant [29 x i8] c" already has a field named '\00" +@.str.2356 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2358 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2359 = private unnamed_addr constant [11 x i8] c"function '\00" +@.str.2360 = private unnamed_addr constant [19 x i8] c"' is defined twice\00" +@.str.2361 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2362 = private unnamed_addr constant [44 x i8] c"' is a built-in function, pick another name\00" +@.str.2363 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2364 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2365 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2367 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2368 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2369 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2370 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2371 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2372 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2373 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2375 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.2376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2377 = private unnamed_addr constant [23 x i8] c"'self' is already the \00" +@.str.2378 = private unnamed_addr constant [25 x i8] c" the method is called on\00" +@.str.2379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2381 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2382 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2383 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2385 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2387 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2389 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2390 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2392 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2393 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2394 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2395 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2396 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2397 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2398 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2399 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2401 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2402 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.2403 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2405 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2407 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2408 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" +@.str.2409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2410 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2412 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2413 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2414 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2415 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2417 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2418 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2421 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.2422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2424 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2427 = private unnamed_addr constant [27 x i8] c"used .mm on a null pointer\00" +@.str.2428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2429 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2431 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2433 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2436 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2437 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2441 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2442 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2444 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2445 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2446 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2449 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2450 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2451 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2452 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2453 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2455 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2456 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2457 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2458 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2459 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2460 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2461 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2462 = private unnamed_addr constant [35 x i8] c"there is no generic struct named '\00" +@.str.2463 = private unnamed_addr constant [29 x i8] c"' (a struct written struct \00" +@.str.2464 = private unnamed_addr constant [35 x i8] c"[T] { ... } takes type arguments)\00" +@.str.2465 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2466 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2467 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2468 = private unnamed_addr constant [8 x i8] c" takes \00" +@.str.2469 = private unnamed_addr constant [25 x i8] c" type argument(s), like \00" +@.str.2470 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2471 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2472 = private unnamed_addr constant [12 x i8] c"], but got \00" +@.str.2473 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2474 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.2475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2476 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2477 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2478 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2479 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2480 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2481 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2482 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2483 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2484 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.2485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2486 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2487 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2489 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2490 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2491 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2492 = private unnamed_addr constant [8 x i8] c"@finch.\00" +@.str.2493 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2494 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2496 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2498 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2500 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2502 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2504 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2506 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2508 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2509 = private unnamed_addr constant [18 x i8] c" (while building \00" +@.str.2510 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2512 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2517 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2519 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2521 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2523 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2525 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2527 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2529 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2530 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.2531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2532 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" +@.str.2533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2534 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2535 = private unnamed_addr constant [30 x i8] c"used .types on a null pointer\00" +@.str.2536 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2538 = private unnamed_addr constant [30 x i8] c"used .bound on a null pointer\00" +@.str.2539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2540 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2541 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2542 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.2543 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2544 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2545 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2546 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2547 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2548 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2550 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2551 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.2552 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2554 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2556 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2558 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2559 = private unnamed_addr constant [34 x i8] c"used .templates on a null pointer\00" +@.str.2560 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2562 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2565 = private unnamed_addr constant [8 x i8] c" takes \00" +@.str.2566 = private unnamed_addr constant [28 x i8] c" type argument(s), but got \00" +@.str.2567 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2568 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2569 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2570 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2571 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2572 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.2573 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2574 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2575 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2577 = private unnamed_addr constant [30 x i8] c"this has no type to work out \00" +@.str.2578 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2579 = private unnamed_addr constant [6 x i8] c" from\00" +@.str.2580 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2581 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2582 = private unnamed_addr constant [17 x i8] c"can't tell what \00" +@.str.2583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2584 = private unnamed_addr constant [25 x i8] c" is here; write it out: \00" +@.str.2585 = private unnamed_addr constant [11 x i8] c"[int](...)\00" +@.str.2586 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2588 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2591 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2593 = private unnamed_addr constant [11 x i8] c"argument '\00" +@.str.2594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2595 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.2596 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2597 = private unnamed_addr constant [2 x i8] c" \00" +@.str.2598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2599 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.2600 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2601 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2602 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2603 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2605 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2606 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2607 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2608 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2609 = private unnamed_addr constant [7 x i8] c" x i8]\00" +@.str.2610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2611 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2612 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2613 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2614 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2615 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2616 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2617 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2619 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2620 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2622 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.2623 = private unnamed_addr constant [7 x i8] c" x i8]\00" +@.str.2624 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2625 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2626 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2627 = private unnamed_addr constant [50 x i8] c"has fields Finch can't see (unions or bit fields)\00" +@.str.2628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2629 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2630 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2632 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2633 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2634 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2635 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2636 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2638 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2639 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2641 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.2642 = private unnamed_addr constant [6 x i8] c"%S.C.\00" +@.str.2643 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str.2644 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2645 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.2646 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2647 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2648 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2649 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2650 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2651 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2652 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2653 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2654 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2655 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2656 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2658 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2660 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2661 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2662 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2663 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2664 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2665 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2666 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2667 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2668 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2670 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2671 = private unnamed_addr constant [18 x i8] c" (while building \00" +@.str.2672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2673 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2674 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2675 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2676 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2677 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2678 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2679 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.2680 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2681 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.2682 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2683 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.2684 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2685 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.2686 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2687 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2689 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2690 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2691 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2693 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2694 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2695 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2696 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2697 = private unnamed_addr constant [12 x i8] c"the struct \00" +@.str.2698 = private unnamed_addr constant [27 x i8] c" contains itself; use ptr[\00" +@.str.2699 = private unnamed_addr constant [8 x i8] c"] or []\00" +@.str.2700 = private unnamed_addr constant [16 x i8] c" for that field\00" +@.str.2701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2702 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2703 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2705 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2706 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2707 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2710 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2711 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2712 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2713 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2714 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2715 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2716 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2717 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2718 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2719 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2720 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2721 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2722 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2724 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2725 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2726 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2727 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2728 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.2729 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2730 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2731 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2732 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2733 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.2734 = private unnamed_addr constant [4 x i8] c"%S.\00" +@.str.2735 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2736 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2737 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2738 = private unnamed_addr constant [2 x i8] c".\00" +@.str.2739 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2740 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2742 = private unnamed_addr constant [11 x i8] c" = type { \00" +@.str.2743 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2744 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.2745 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2746 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2747 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2748 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2749 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2750 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2752 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.2753 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2754 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2755 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.2756 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.2757 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.2758 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.2759 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.2760 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.2761 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2762 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.2763 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2764 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2765 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2766 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.2767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2768 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2770 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2772 = private unnamed_addr constant [43 x i8] c"!DIDerivedType(tag: DW_TAG_member, name: \22\00" +@.str.2773 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" +@.str.2774 = private unnamed_addr constant [10 x i8] c", file: !\00" +@.str.2775 = private unnamed_addr constant [9 x i8] c", line: \00" +@.str.2776 = private unnamed_addr constant [13 x i8] c", baseType: \00" +@.str.2777 = private unnamed_addr constant [9 x i8] c", size: \00" +@.str.2778 = private unnamed_addr constant [11 x i8] c", offset: \00" +@.str.2779 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2780 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" +@.str.2781 = private unnamed_addr constant [10 x i8] c"\22, size: \00" +@.str.2782 = private unnamed_addr constant [13 x i8] c", encoding: \00" +@.str.2783 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2784 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.2785 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2786 = private unnamed_addr constant [3 x i8] c"T:\00" +@.str.2787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2788 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2790 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2791 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2792 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2793 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.2794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2795 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2796 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.2797 = private unnamed_addr constant [15 x i8] c"DW_ATE_boolean\00" +@.str.2798 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2799 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2800 = private unnamed_addr constant [19 x i8] c"DW_ATE_signed_char\00" +@.str.2801 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2802 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2803 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" +@.str.2804 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2805 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.2806 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" +@.str.2807 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2808 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.2809 = private unnamed_addr constant [13 x i8] c"DW_ATE_float\00" +@.str.2810 = private unnamed_addr constant [16 x i8] c"DW_ATE_unsigned\00" +@.str.2811 = private unnamed_addr constant [14 x i8] c"DW_ATE_signed\00" +@.str.2812 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.2813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2814 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.2815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2816 = private unnamed_addr constant [22 x i8] c"!DIEnumerator(name: \22\00" +@.str.2817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2818 = private unnamed_addr constant [11 x i8] c"\22, value: \00" +@.str.2819 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2820 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2821 = private unnamed_addr constant [55 x i8] c"!DICompositeType(tag: DW_TAG_enumeration_type, name: \22\00" +@.str.2822 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2823 = private unnamed_addr constant [25 x i8] c", size: 32, elements: !{\00" +@.str.2824 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2825 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2826 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2827 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2828 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2829 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2831 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" +@.str.2832 = private unnamed_addr constant [12 x i8] c", size: 64)\00" +@.str.2833 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2834 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2836 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.2837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2838 = private unnamed_addr constant [20 x i8] c"!DISubrange(count: \00" +@.str.2839 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2840 = private unnamed_addr constant [52 x i8] c"!DICompositeType(tag: DW_TAG_array_type, baseType: \00" +@.str.2841 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2842 = private unnamed_addr constant [9 x i8] c", size: \00" +@.str.2843 = private unnamed_addr constant [16 x i8] c", elements: !{!\00" +@.str.2844 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2845 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2846 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2847 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2848 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.2849 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2850 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.2851 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.2852 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2853 = private unnamed_addr constant [52 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: \00" +@.str.2854 = private unnamed_addr constant [12 x i8] c", size: 64)\00" +@.str.2855 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2856 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.2857 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.2858 = private unnamed_addr constant [4 x i8] c"cap\00" +@.str.2859 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" +@.str.2860 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2861 = private unnamed_addr constant [38 x i8] c", size: 192, align: 64, elements: !{!\00" +@.str.2862 = private unnamed_addr constant [4 x i8] c", !\00" +@.str.2863 = private unnamed_addr constant [4 x i8] c", !\00" +@.str.2864 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2865 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2866 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2867 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2868 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.2869 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.2870 = private unnamed_addr constant [67 x i8] c"!DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)\00" +@.str.2871 = private unnamed_addr constant [8 x i8] c"entries\00" +@.str.2872 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.2873 = private unnamed_addr constant [5 x i8] c"used\00" +@.str.2874 = private unnamed_addr constant [4 x i8] c"cap\00" +@.str.2875 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.2876 = private unnamed_addr constant [5 x i8] c"icap\00" +@.str.2877 = private unnamed_addr constant [5 x i8] c"adds\00" +@.str.2878 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2879 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2880 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" +@.str.2881 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2882 = private unnamed_addr constant [37 x i8] c", size: 448, align: 64, elements: !{\00" +@.str.2883 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2884 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2886 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2887 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2888 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.2889 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2890 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.2891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2892 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2893 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2894 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2896 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2897 = private unnamed_addr constant [53 x i8] c"!DICompositeType(tag: DW_TAG_structure_type, name: \22\00" +@.str.2898 = private unnamed_addr constant [11 x i8] c"\22, file: !\00" +@.str.2899 = private unnamed_addr constant [9 x i8] c", size: \00" +@.str.2900 = private unnamed_addr constant [25 x i8] c", align: 8, elements: !{\00" +@.str.2901 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2902 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2904 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2905 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2906 = private unnamed_addr constant [21 x i8] c"!DIBasicType(name: \22\00" +@.str.2907 = private unnamed_addr constant [40 x i8] c"\22, size: 64, encoding: DW_ATE_unsigned)\00" +@.str.2908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2909 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2912 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2913 = private unnamed_addr constant [3 x i8] c"L:\00" +@.str.2914 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2915 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.2916 = private unnamed_addr constant [2 x i8] c":\00" +@.str.2917 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2918 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.2919 = private unnamed_addr constant [2 x i8] c":\00" +@.str.2920 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2921 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2923 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2924 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2925 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2926 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2927 = private unnamed_addr constant [19 x i8] c"!DILocation(line: \00" +@.str.2928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2929 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.2930 = private unnamed_addr constant [11 x i8] c", column: \00" +@.str.2931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2932 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.2933 = private unnamed_addr constant [11 x i8] c", scope: !\00" +@.str.2934 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2935 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2936 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2938 = private unnamed_addr constant [32 x i8] c"used .mdcache on a null pointer\00" +@.str.2939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2940 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.2941 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.2942 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2943 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.2944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2945 = private unnamed_addr constant [28 x i8] c"!DISubroutineType(types: !{\00" +@.str.2946 = private unnamed_addr constant [3 x i8] c", \00" +@.str.2947 = private unnamed_addr constant [3 x i8] c"})\00" +@.str.2948 = private unnamed_addr constant [31 x i8] c"distinct !DISubprogram(name: \22\00" +@.str.2949 = private unnamed_addr constant [18 x i8] c"\22, linkageName: \22\00" +@.str.2950 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2951 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" +@.str.2952 = private unnamed_addr constant [10 x i8] c", file: !\00" +@.str.2953 = private unnamed_addr constant [9 x i8] c", line: \00" +@.str.2954 = private unnamed_addr constant [10 x i8] c", type: !\00" +@.str.2955 = private unnamed_addr constant [14 x i8] c", scopeLine: \00" +@.str.2956 = private unnamed_addr constant [88 x i8] c", flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagLocalToUnit, unit: !0)\00" +@.str.2957 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2958 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.2959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2960 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2961 = private unnamed_addr constant [1 x i8] c"\00" +@.str.2962 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2963 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.2964 = private unnamed_addr constant [8 x i8] c", arg: \00" +@.str.2965 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2966 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.2967 = private unnamed_addr constant [25 x i8] c"!DILocalVariable(name: \22\00" +@.str.2968 = private unnamed_addr constant [12 x i8] c"\22, scope: !\00" +@.str.2969 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2970 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.2971 = private unnamed_addr constant [10 x i8] c", file: !\00" +@.str.2972 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2973 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.2974 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2975 = private unnamed_addr constant [9 x i8] c", line: \00" +@.str.2976 = private unnamed_addr constant [10 x i8] c", type: !\00" +@.str.2977 = private unnamed_addr constant [2 x i8] c")\00" +@.str.2978 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2979 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.2980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2981 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.2982 = private unnamed_addr constant [42 x i8] c"call void @llvm.dbg.declare(metadata ptr \00" +@.str.2983 = private unnamed_addr constant [13 x i8] c", metadata !\00" +@.str.2984 = private unnamed_addr constant [28 x i8] c", metadata !DIExpression())\00" +@.str.2985 = private unnamed_addr constant [21 x i8] c"!llvm.dbg.cu = !{!0}\00" +@.str.2986 = private unnamed_addr constant [31 x i8] c"!llvm.module.flags = !{!1, !2}\00" +@.str.2987 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2988 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2989 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.2990 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.2991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2992 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.2993 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2994 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.2995 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.2996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2997 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.2998 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.2999 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3000 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3001 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3002 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3003 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3004 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.3005 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3006 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3007 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3008 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.3009 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3010 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3011 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3012 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.3013 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3014 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3015 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.3016 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3017 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3018 = private unnamed_addr constant [18 x i8] c" (while building \00" +@.str.3019 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3020 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3021 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3022 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3023 = private unnamed_addr constant [33 x i8] c"used .instNote on a null pointer\00" +@.str.3024 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3025 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.3026 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3027 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3028 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3030 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3032 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3033 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.3034 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3035 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.3036 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3037 = private unnamed_addr constant [28 x i8] c"used .tmp on a null pointer\00" +@.str.3038 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3039 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3040 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3041 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.3042 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3043 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.3044 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3045 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.3046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3047 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.3048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3049 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.3050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3051 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.3052 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3053 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.3054 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3055 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3056 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3057 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3058 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3059 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3060 = private unnamed_addr constant [10 x i8] c"ptr %self\00" +@.str.3061 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3062 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3063 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3064 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3066 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3068 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3070 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3072 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.3073 = private unnamed_addr constant [6 x i8] c"%self\00" +@.str.3074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3075 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.3076 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.3077 = private unnamed_addr constant [6 x i8] c"%self\00" +@.str.3078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3079 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3080 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3081 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3082 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3083 = private unnamed_addr constant [4 x i8] c" %p\00" +@.str.3084 = private unnamed_addr constant [3 x i8] c"%p\00" +@.str.3085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3086 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3087 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3088 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3089 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.3090 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3091 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3092 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3093 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.3094 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3095 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3096 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3099 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3100 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3102 = private unnamed_addr constant [31 x i8] c"used .dbgArg on a null pointer\00" +@.str.3103 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3105 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3107 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3108 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3109 = private unnamed_addr constant [11 x i8] c"function '\00" +@.str.3110 = private unnamed_addr constant [39 x i8] c"' can reach its end without returning \00" +@.str.3111 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3112 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3114 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3115 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3117 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3118 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" +@.str.3119 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.3120 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3121 = private unnamed_addr constant [8 x i8] c" !dbg !\00" +@.str.3122 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3123 = private unnamed_addr constant [33 x i8] c"used .dbgScope on a null pointer\00" +@.str.3124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.3126 = private unnamed_addr constant [17 x i8] c"define internal \00" +@.str.3127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3128 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3129 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3131 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3132 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.3133 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3134 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3135 = private unnamed_addr constant [11 x i8] c" {\0Aentry:\0A\00" +@.str.3136 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3137 = private unnamed_addr constant [32 x i8] c"used .allocas on a null pointer\00" +@.str.3138 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.3139 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.3140 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3141 = private unnamed_addr constant [29 x i8] c"used .body on a null pointer\00" +@.str.3142 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.3143 = private unnamed_addr constant [4 x i8] c"\0A}\0A\00" +@.str.3144 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3145 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3146 = private unnamed_addr constant [67 x i8] c"this code can never run (it comes after return, break or continue)\00" +@.str.3147 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3148 = private unnamed_addr constant [32 x i8] c"used .dbgLine on a null pointer\00" +@.str.3149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3150 = private unnamed_addr constant [31 x i8] c"used .dbgCol on a null pointer\00" +@.str.3151 = private unnamed_addr constant [6 x i8] c"block\00" +@.str.3152 = private unnamed_addr constant [5 x i8] c"decl\00" +@.str.3153 = private unnamed_addr constant [7 x i8] c"assign\00" +@.str.3154 = private unnamed_addr constant [5 x i8] c"expr\00" +@.str.3155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3156 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.3157 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3159 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.3160 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.3161 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.3162 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.3163 = private unnamed_addr constant [5 x i8] c"each\00" +@.str.3164 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.3165 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.3166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3167 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3168 = private unnamed_addr constant [34 x i8] c"defer inside defer is not allowed\00" +@.str.3169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3170 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3171 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3172 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3173 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3175 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3177 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3178 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3179 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3182 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3183 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3185 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.3186 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.3187 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.3188 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3189 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3190 = private unnamed_addr constant [28 x i8] c" can't be used inside defer\00" +@.str.3191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3192 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3193 = private unnamed_addr constant [32 x i8] c" can only be used inside a loop\00" +@.str.3194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3195 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3197 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3198 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3199 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.3200 = private unnamed_addr constant [19 x i8] c"unknown statement \00" +@.str.3201 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3202 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3204 = private unnamed_addr constant [47 x i8] c"this gives back nothing, so it can't be stored\00" +@.str.3205 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3206 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3207 = private unnamed_addr constant [35 x i8] c"null needs a type, like: ptr[int] \00" +@.str.3208 = private unnamed_addr constant [8 x i8] c" = null\00" +@.str.3209 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3210 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3211 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3212 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3213 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3214 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3215 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.3216 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3217 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3218 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.3219 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3221 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3222 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3223 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" +@.str.3224 = private unnamed_addr constant [19 x i8] c"' (create it with \00" +@.str.3225 = private unnamed_addr constant [9 x i8] c" := ...)\00" +@.str.3226 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" +@.str.3227 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" +@.str.3228 = private unnamed_addr constant [10 x i8] c"the value\00" +@.str.3229 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3230 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3231 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3232 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.3233 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3234 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3235 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3236 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3237 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3238 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3239 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3240 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3241 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3242 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3243 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3244 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3245 = private unnamed_addr constant [12 x i8] c"a condition\00" +@.str.3246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3247 = private unnamed_addr constant [5 x i8] c"then\00" +@.str.3248 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.3249 = private unnamed_addr constant [6 x i8] c"endif\00" +@.str.3250 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3251 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3252 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3253 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3254 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3255 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3256 = private unnamed_addr constant [11 x i8] c"while.cond\00" +@.str.3257 = private unnamed_addr constant [11 x i8] c"while.body\00" +@.str.3258 = private unnamed_addr constant [10 x i8] c"while.end\00" +@.str.3259 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3260 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3262 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.3263 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3264 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3265 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3266 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3267 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3269 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3270 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3271 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3272 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3273 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3274 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3275 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3276 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.3277 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.3278 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.3279 = private unnamed_addr constant [5 x i8] c"each\00" +@.str.3280 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3281 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3282 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3283 = private unnamed_addr constant [21 x i8] c"the start of a range\00" +@.str.3284 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3285 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3286 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3287 = private unnamed_addr constant [19 x i8] c"the end of a range\00" +@.str.3288 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3289 = private unnamed_addr constant [9 x i8] c"for.cond\00" +@.str.3290 = private unnamed_addr constant [9 x i8] c"for.body\00" +@.str.3291 = private unnamed_addr constant [9 x i8] c"for.step\00" +@.str.3292 = private unnamed_addr constant [8 x i8] c"for.end\00" +@.str.3293 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3294 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3295 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3296 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3297 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3299 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3301 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3302 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3303 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3304 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3306 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3307 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3308 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3309 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3310 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3312 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3313 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3314 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3315 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3316 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3317 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3318 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3319 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3320 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3321 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3322 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" +@.str.3323 = private unnamed_addr constant [9 x i8] c"map.cond\00" +@.str.3324 = private unnamed_addr constant [10 x i8] c"map.check\00" +@.str.3325 = private unnamed_addr constant [9 x i8] c"map.body\00" +@.str.3326 = private unnamed_addr constant [9 x i8] c"map.step\00" +@.str.3327 = private unnamed_addr constant [8 x i8] c"map.end\00" +@.str.3328 = private unnamed_addr constant [12 x i8] c"map.changed\00" +@.str.3329 = private unnamed_addr constant [9 x i8] c"map.same\00" +@.str.3330 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3331 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3332 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3333 = private unnamed_addr constant [15 x i8] c", i32 0, i32 6\00" +@.str.3334 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.3335 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3336 = private unnamed_addr constant [34 x i8] c"call void @finch_map_changed(ptr \00" +@.str.3337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3338 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.3339 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3340 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3341 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3342 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3344 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3345 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3346 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3347 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3348 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3349 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" +@.str.3350 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3351 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3352 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3353 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.3354 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3356 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3358 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3360 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3362 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3363 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3365 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3366 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3367 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3368 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3369 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3370 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3371 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3372 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3373 = private unnamed_addr constant [6 x i8] c"$list\00" +@.str.3374 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3375 = private unnamed_addr constant [30 x i8] c"used .nvars on a null pointer\00" +@.str.3376 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3377 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3378 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3379 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3380 = private unnamed_addr constant [56 x i8] c"for ... in needs an array, a str or a map, but this is \00" +@.str.3381 = private unnamed_addr constant [37 x i8] c" (for a range of numbers write 0..n)\00" +@.str.3382 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.3383 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3386 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3387 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3388 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3389 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3390 = private unnamed_addr constant [10 x i8] c"each.cond\00" +@.str.3391 = private unnamed_addr constant [10 x i8] c"each.body\00" +@.str.3392 = private unnamed_addr constant [10 x i8] c"each.step\00" +@.str.3393 = private unnamed_addr constant [9 x i8] c"each.end\00" +@.str.3394 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3395 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" +@.str.3396 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.3397 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3398 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3399 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3400 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.3401 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3402 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3403 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3405 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3407 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3408 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3409 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3410 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3412 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3413 = private unnamed_addr constant [30 x i8] c"used .loops on a null pointer\00" +@.str.3414 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3415 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.3416 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3417 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3418 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3419 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3421 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3422 = private unnamed_addr constant [34 x i8] c"return can't be used inside defer\00" +@.str.3423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3424 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.3425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3426 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.3427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3429 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3430 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3431 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3432 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3433 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3435 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3436 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3437 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3438 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3439 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3440 = private unnamed_addr constant [65 x i8] c"' can't fail, so it can't return an error (make it fallible: -> \00" +@.str.3441 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3442 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.3443 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3444 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3446 = private unnamed_addr constant [18 x i8] c"the error message\00" +@.str.3447 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3449 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3450 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3451 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3453 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3454 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" +@.str.3455 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.3456 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3457 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3458 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3459 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3460 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3461 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3462 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3463 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3464 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3465 = private unnamed_addr constant [47 x i8] c"' doesn't return a value (it has no '-> type')\00" +@.str.3466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3467 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3468 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3469 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3470 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3471 = private unnamed_addr constant [54 x i8] c" { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer }\00" +@.str.3472 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.3473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3474 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3475 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3477 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3478 = private unnamed_addr constant [15 x i8] c"' must return \00" +@.str.3479 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3480 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3482 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3483 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3484 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3485 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3486 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3487 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3488 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3489 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3490 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3491 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3493 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3494 = private unnamed_addr constant [32 x i8] c"used .deferOn on a null pointer\00" +@.str.3495 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3496 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3497 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3498 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3500 = private unnamed_addr constant [35 x i8] c"used .deferLimit on a null pointer\00" +@.str.3501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3502 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3503 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3505 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3506 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3507 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3508 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3512 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.3513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3517 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3519 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3521 = private unnamed_addr constant [19 x i8] c"the returned value\00" +@.str.3522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3523 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3524 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3526 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3527 = private unnamed_addr constant [29 x i8] c" zeroinitializer, i1 true, 0\00" +@.str.3528 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3530 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3531 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3532 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3534 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3535 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3536 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3537 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3539 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3540 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3541 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3543 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3544 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3545 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3546 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3547 = private unnamed_addr constant [8 x i8] c"{ i64, \00" +@.str.3548 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3549 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3550 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3551 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.3552 = private unnamed_addr constant [30 x i8] c"ptrtoint (ptr getelementptr (\00" +@.str.3553 = private unnamed_addr constant [27 x i8] c", ptr null, i32 1) to i64)\00" +@.str.3554 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.3555 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3556 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3557 = private unnamed_addr constant [15 x i8] c", i32 0, i32 0\00" +@.str.3558 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3559 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3560 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3561 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3562 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3563 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str.3564 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3566 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3567 = private unnamed_addr constant [2 x i8] c"1\00" +@.str.3568 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.3569 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3570 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3571 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3573 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.3574 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_find(\00" +@.str.3575 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3576 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3577 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.3578 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.3579 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3580 = private unnamed_addr constant [26 x i8] c"call i64 @finch_map_slot(\00" +@.str.3581 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3582 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3583 = private unnamed_addr constant [8 x i8] c"map.new\00" +@.str.3584 = private unnamed_addr constant [9 x i8] c"map.have\00" +@.str.3585 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.3586 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.3587 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3589 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3590 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3591 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3593 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3594 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3595 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3596 = private unnamed_addr constant [8 x i8] c"the key\00" +@.str.3597 = private unnamed_addr constant [45 x i8] c"this is a temporary map, it can't be changed\00" +@.str.3598 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3599 = private unnamed_addr constant [12 x i8] c"map.missing\00" +@.str.3600 = private unnamed_addr constant [10 x i8] c"map.found\00" +@.str.3601 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.3602 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3603 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3604 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3605 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.3606 = private unnamed_addr constant [34 x i8] c"call void @finch_map_missing(ptr \00" +@.str.3607 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3608 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.3609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3610 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3611 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3612 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3613 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3614 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3615 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3616 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3617 = private unnamed_addr constant [53 x i8] c"an empty [:] needs a type, like: map[str]int m = [:]\00" +@.str.3618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3619 = private unnamed_addr constant [6 x i8] c"unary\00" +@.str.3620 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.3621 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3622 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3623 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3624 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3625 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3626 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3627 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3628 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3629 = private unnamed_addr constant [36 x i8] c"a map key needs a value with a type\00" +@.str.3630 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3631 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3632 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3633 = private unnamed_addr constant [38 x i8] c"a map value needs a value with a type\00" +@.str.3634 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3635 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.3636 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3637 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3639 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3642 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3644 = private unnamed_addr constant [22 x i8] c"every key of this map\00" +@.str.3645 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3646 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3647 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3648 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3649 = private unnamed_addr constant [24 x i8] c"every value of this map\00" +@.str.3650 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3651 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3652 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3653 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3654 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.3655 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.3656 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.3657 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.3658 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3660 = private unnamed_addr constant [8 x i8] c"the key\00" +@.str.3661 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" +@.str.3662 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3663 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.3664 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3665 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.3666 = private unnamed_addr constant [11 x i8] c"remove.hit\00" +@.str.3667 = private unnamed_addr constant [11 x i8] c"remove.end\00" +@.str.3668 = private unnamed_addr constant [36 x i8] c"call void @finch_map_remove_at(ptr \00" +@.str.3669 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3670 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3671 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3672 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3673 = private unnamed_addr constant [10 x i8] c"get.found\00" +@.str.3674 = private unnamed_addr constant [12 x i8] c"get.missing\00" +@.str.3675 = private unnamed_addr constant [9 x i8] c"get.fend\00" +@.str.3676 = private unnamed_addr constant [9 x i8] c"get.mend\00" +@.str.3677 = private unnamed_addr constant [8 x i8] c"get.end\00" +@.str.3678 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3679 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3680 = private unnamed_addr constant [12 x i8] c"the default\00" +@.str.3681 = private unnamed_addr constant [5 x i8] c"phi \00" +@.str.3682 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.3683 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3684 = private unnamed_addr constant [7 x i8] c" ], [ \00" +@.str.3685 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3686 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.3687 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.3688 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3689 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3690 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3691 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" +@.str.3692 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3693 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.3694 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.3695 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.3696 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3697 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3698 = private unnamed_addr constant [32 x i8] c"call void @finch_map_clear(ptr \00" +@.str.3699 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3700 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3701 = private unnamed_addr constant [5 x i8] c"keys\00" +@.str.3702 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.3703 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.3704 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3705 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3706 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.3707 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3708 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3709 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3710 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.3711 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" +@.str.3712 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3713 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3714 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3715 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.3716 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3717 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3718 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.3719 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3720 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3721 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3722 = private unnamed_addr constant [15 x i8] c", i32 0, i32 2\00" +@.str.3723 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3724 = private unnamed_addr constant [11 x i8] c"entry.live\00" +@.str.3725 = private unnamed_addr constant [11 x i8] c"entry.next\00" +@.str.3726 = private unnamed_addr constant [13 x i8] c"icmp ne i64 \00" +@.str.3727 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3728 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.3729 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3730 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.3731 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.3732 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.3733 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.3734 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.3735 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.3736 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.3737 = private unnamed_addr constant [22 x i8] c"a map has no method '\00" +@.str.3738 = private unnamed_addr constant [50 x i8] c"' (it has: has, get, remove, clear, keys, values)\00" +@.str.3739 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3740 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3741 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3742 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.3743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3744 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.3745 = private unnamed_addr constant [23 x i8] c"' is not a variant of \00" +@.str.3746 = private unnamed_addr constant [11 x i8] c" (it has: \00" +@.str.3747 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3748 = private unnamed_addr constant [2 x i8] c")\00" +@.str.3749 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3750 = private unnamed_addr constant [13 x i8] c"this pattern\00" +@.str.3751 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3752 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3753 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3755 = private unnamed_addr constant [31 x i8] c"there is nothing to match here\00" +@.str.3756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3757 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.3758 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3759 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.3760 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.3761 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3762 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3763 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3764 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.3765 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3766 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3767 = private unnamed_addr constant [10 x i8] c"match.end\00" +@.str.3768 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3770 = private unnamed_addr constant [73 x i8] c"this arm can never be used: 'else' already takes everything that is left\00" +@.str.3771 = private unnamed_addr constant [10 x i8] c"match.arm\00" +@.str.3772 = private unnamed_addr constant [11 x i8] c"match.next\00" +@.str.3773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3774 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3775 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3777 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00" +@.str.3778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3779 = private unnamed_addr constant [53 x i8] c"an arm with several variants can't name their values\00" +@.str.3780 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.3781 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3782 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3783 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3784 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3785 = private unnamed_addr constant [50 x i8] c"this variant is already handled by an earlier arm\00" +@.str.3786 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.3787 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3788 = private unnamed_addr constant [9 x i8] c"match.or\00" +@.str.3789 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3790 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.3791 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3792 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3793 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.3794 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3795 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.3796 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3798 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3799 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.3800 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3801 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3803 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3804 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3806 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3807 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3808 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3809 = private unnamed_addr constant [53 x i8] c"an arm of a match that gives a value has to give one\00" +@.str.3810 = private unnamed_addr constant [58 x i8] c"this arm (the arms of a match have to give the same type)\00" +@.str.3811 = private unnamed_addr constant [11 x i8] c"match.from\00" +@.str.3812 = private unnamed_addr constant [6 x i8] c"block\00" +@.str.3813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3814 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3816 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.3817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3819 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.3820 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3821 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3822 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00" +@.str.3823 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3824 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00" +@.str.3825 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.3826 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3827 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.3828 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3829 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3830 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3831 = private unnamed_addr constant [27 x i8] c"this match doesn't handle \00" +@.str.3832 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3833 = private unnamed_addr constant [30 x i8] c" (add them, or an 'else' arm)\00" +@.str.3834 = private unnamed_addr constant [12 x i8] c"a match on \00" +@.str.3835 = private unnamed_addr constant [55 x i8] c" needs an 'else' arm for everything that is not listed\00" +@.str.3836 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.3837 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" +@.str.3838 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3840 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3841 = private unnamed_addr constant [12 x i8] c"unreachable\00" +@.str.3842 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3843 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3844 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3845 = private unnamed_addr constant [5 x i8] c"phi \00" +@.str.3846 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3847 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3848 = private unnamed_addr constant [3 x i8] c"[ \00" +@.str.3849 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3850 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3851 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3852 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.3853 = private unnamed_addr constant [3 x i8] c", \00" +@.str.3854 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.3855 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.3856 = private unnamed_addr constant [81 x i8] c"only a function call can fail; 'or' and 'try' go after one, like int(text) or 0\00" +@.str.3857 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3858 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.3859 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3860 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3862 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3863 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3864 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.3865 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3866 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3867 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3868 = private unnamed_addr constant [1 x i8] c"\00" +@.str.3869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3870 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3871 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3872 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3873 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3874 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3875 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3876 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.3877 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3878 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.3879 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3880 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.3881 = private unnamed_addr constant [51 x i8] c"this call can't fail, so it needs no 'or' or 'try'\00" +@.str.3882 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3883 = private unnamed_addr constant [32 x i8] c"used .inDefer on a null pointer\00" +@.str.3884 = private unnamed_addr constant [31 x i8] c"try can't be used inside defer\00" +@.str.3885 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3886 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3887 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3888 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3889 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3890 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3892 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3893 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3894 = private unnamed_addr constant [30 x i8] c"try passes the error on, so '\00" +@.str.3895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3896 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3897 = private unnamed_addr constant [32 x i8] c"' must be able to fail too (-> \00" +@.str.3898 = private unnamed_addr constant [56 x i8] c"); or handle it here: ... or / ... or { ... }\00" +@.str.3899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3900 = private unnamed_addr constant [11 x i8] c"try.failed\00" +@.str.3901 = private unnamed_addr constant [7 x i8] c"try.ok\00" +@.str.3902 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.3903 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3904 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3905 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3906 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.3907 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3908 = private unnamed_addr constant [28 x i8] c"used .cur on a null pointer\00" +@.str.3909 = private unnamed_addr constant [37 x i8] c" zeroinitializer, { ptr, i64, i64 } \00" +@.str.3910 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.3911 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3912 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3914 = private unnamed_addr constant [10 x i8] c"or.failed\00" +@.str.3915 = private unnamed_addr constant [6 x i8] c"or.ok\00" +@.str.3916 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.3917 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3918 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3919 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3920 = private unnamed_addr constant [29 x i8] c"used .term on a null pointer\00" +@.str.3921 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3922 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3923 = private unnamed_addr constant [143 x i8] c"this block must leave with return, break, continue or exit(...): after a failure there is no value to go on with (or give one: ... or )\00" +@.str.3924 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3925 = private unnamed_addr constant [7 x i8] c"or.end\00" +@.str.3926 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3927 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3928 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3929 = private unnamed_addr constant [99 x i8] c"this call gives back no value, so there is nothing to replace; handle the failure with or { ... }\00" +@.str.3930 = private unnamed_addr constant [4 x i8] c"err\00" +@.str.3931 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3932 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3934 = private unnamed_addr constant [21 x i8] c"the value after 'or'\00" +@.str.3935 = private unnamed_addr constant [8 x i8] c"or.bend\00" +@.str.3936 = private unnamed_addr constant [7 x i8] c"or.end\00" +@.str.3937 = private unnamed_addr constant [5 x i8] c"phi \00" +@.str.3938 = private unnamed_addr constant [4 x i8] c" [ \00" +@.str.3939 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3940 = private unnamed_addr constant [7 x i8] c" ], [ \00" +@.str.3941 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.3942 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.3943 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3944 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3945 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3946 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3947 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.3948 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3949 = private unnamed_addr constant [3 x i8] c"0X\00" +@.str.3950 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3951 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3952 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3953 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.3954 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3955 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.3956 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3957 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3958 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.3959 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3960 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.3961 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.3962 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3963 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3964 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.3965 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.3966 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.3967 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.3968 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.3969 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.3970 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.3971 = private unnamed_addr constant [6 x i8] c"unary\00" +@.str.3972 = private unnamed_addr constant [7 x i8] c"binary\00" +@.str.3973 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.3974 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.3975 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.3976 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3977 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.3978 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.3979 = private unnamed_addr constant [20 x i8] c"unknown expression \00" +@.str.3980 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3981 = private unnamed_addr constant [2 x i8] c"!\00" +@.str.3982 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3983 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3984 = private unnamed_addr constant [20 x i8] c"the value after '!'\00" +@.str.3985 = private unnamed_addr constant [8 x i8] c"xor i1 \00" +@.str.3986 = private unnamed_addr constant [7 x i8] c", true\00" +@.str.3987 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.3988 = private unnamed_addr constant [2 x i8] c"~\00" +@.str.3989 = private unnamed_addr constant [46 x i8] c"'~' flips the bits of a whole number, not of \00" +@.str.3990 = private unnamed_addr constant [5 x i8] c"xor \00" +@.str.3991 = private unnamed_addr constant [2 x i8] c" \00" +@.str.3992 = private unnamed_addr constant [5 x i8] c", -1\00" +@.str.3993 = private unnamed_addr constant [35 x i8] c" can't be negative (it's unsigned)\00" +@.str.3994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3995 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.3996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.3997 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.3998 = private unnamed_addr constant [5 x i8] c"sub \00" +@.str.3999 = private unnamed_addr constant [5 x i8] c" 0, \00" +@.str.4000 = private unnamed_addr constant [6 x i8] c"fneg \00" +@.str.4001 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4002 = private unnamed_addr constant [27 x i8] c"can't put '-' in front of \00" +@.str.4003 = private unnamed_addr constant [12 x i8] c"can't use '\00" +@.str.4004 = private unnamed_addr constant [6 x i8] c"' on \00" +@.str.4005 = private unnamed_addr constant [6 x i8] c" and \00" +@.str.4006 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4007 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4008 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4009 = private unnamed_addr constant [49 x i8] c" (turn the other side into text first: str(...))\00" +@.str.4010 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4011 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.4012 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4013 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4014 = private unnamed_addr constant [27 x i8] c" (for true/false use '&&')\00" +@.str.4015 = private unnamed_addr constant [27 x i8] c" (for true/false use '||')\00" +@.str.4016 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4017 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.4018 = private unnamed_addr constant [2 x i8] c"^\00" +@.str.4019 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.4020 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.4021 = private unnamed_addr constant [44 x i8] c" (bit operators work on whole numbers only)\00" +@.str.4022 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4023 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4024 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4025 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4026 = private unnamed_addr constant [32 x i8] c" (compare the parts one by one)\00" +@.str.4027 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4028 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4029 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4030 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4031 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4032 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4033 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4034 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4035 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4036 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4037 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4038 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4039 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4040 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4041 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4042 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4043 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4044 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4045 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4046 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4047 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4048 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4050 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4051 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4052 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4053 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4054 = private unnamed_addr constant [28 x i8] c"used .lit on a null pointer\00" +@.str.4055 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4056 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4057 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4058 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4059 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4060 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4061 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4062 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4064 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4065 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4066 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4068 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4069 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4070 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4071 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4072 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4073 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4074 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4075 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4076 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4077 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4078 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4079 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4080 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4081 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4082 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4083 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4084 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4085 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4086 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4087 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4088 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4089 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4090 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4091 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4092 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4093 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4094 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4095 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4096 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4097 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4098 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4099 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4100 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4102 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4103 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4105 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4106 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4107 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4109 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4111 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4112 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4113 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4114 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4115 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4116 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4117 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4118 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4119 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4120 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4122 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4123 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4125 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4126 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4127 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4128 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4129 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4131 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4133 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4134 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4136 = private unnamed_addr constant [26 x i8] c"used .v on a null pointer\00" +@.str.4137 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4138 = private unnamed_addr constant [27 x i8] c"used .ty on a null pointer\00" +@.str.4139 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4140 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4142 = private unnamed_addr constant [30 x i8] c"used .value on a null pointer\00" +@.str.4143 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4144 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4145 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4146 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4147 = private unnamed_addr constant [33 x i8] c"call void @finch_str_concat(ptr \00" +@.str.4148 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4149 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4150 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4151 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4152 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4153 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4154 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.4155 = private unnamed_addr constant [2 x i8] c"*\00" +@.str.4156 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.4157 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4158 = private unnamed_addr constant [2 x i8] c"&\00" +@.str.4159 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.4160 = private unnamed_addr constant [2 x i8] c"^\00" +@.str.4161 = private unnamed_addr constant [3 x i8] c"<<\00" +@.str.4162 = private unnamed_addr constant [3 x i8] c">>\00" +@.str.4163 = private unnamed_addr constant [4 x i8] c"add\00" +@.str.4164 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.4165 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str.4166 = private unnamed_addr constant [5 x i8] c"sdiv\00" +@.str.4167 = private unnamed_addr constant [5 x i8] c"srem\00" +@.str.4168 = private unnamed_addr constant [4 x i8] c"and\00" +@.str.4169 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.4170 = private unnamed_addr constant [4 x i8] c"xor\00" +@.str.4171 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str.4172 = private unnamed_addr constant [5 x i8] c"ashr\00" +@.str.4173 = private unnamed_addr constant [4 x i8] c"add\00" +@.str.4174 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.4175 = private unnamed_addr constant [4 x i8] c"mul\00" +@.str.4176 = private unnamed_addr constant [5 x i8] c"udiv\00" +@.str.4177 = private unnamed_addr constant [5 x i8] c"urem\00" +@.str.4178 = private unnamed_addr constant [4 x i8] c"and\00" +@.str.4179 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.4180 = private unnamed_addr constant [4 x i8] c"xor\00" +@.str.4181 = private unnamed_addr constant [4 x i8] c"shl\00" +@.str.4182 = private unnamed_addr constant [5 x i8] c"lshr\00" +@.str.4183 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.4184 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4185 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4186 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.4187 = private unnamed_addr constant [9 x i8] c"icmp eq \00" +@.str.4188 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4189 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4190 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.4191 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4192 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4193 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4194 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4195 = private unnamed_addr constant [2 x i8] c"+\00" +@.str.4196 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.4197 = private unnamed_addr constant [2 x i8] c"*\00" +@.str.4198 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.4199 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4200 = private unnamed_addr constant [5 x i8] c"fadd\00" +@.str.4201 = private unnamed_addr constant [5 x i8] c"fsub\00" +@.str.4202 = private unnamed_addr constant [5 x i8] c"fmul\00" +@.str.4203 = private unnamed_addr constant [5 x i8] c"fdiv\00" +@.str.4204 = private unnamed_addr constant [5 x i8] c"frem\00" +@.str.4205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4206 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4207 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4208 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4209 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4210 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4211 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4212 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4213 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4214 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4215 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4216 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4217 = private unnamed_addr constant [60 x i8] c"a str is never null; to check for empty text use s.len == 0\00" +@.str.4218 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4219 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4220 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4221 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4222 = private unnamed_addr constant [6 x i8] c" ptr \00" +@.str.4223 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4224 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4225 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4226 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4227 = private unnamed_addr constant [28 x i8] c"call i32 @finch_str_eq(ptr \00" +@.str.4228 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4229 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4230 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4231 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4232 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4233 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4234 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str.4235 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4236 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4237 = private unnamed_addr constant [29 x i8] c"call i64 @finch_str_cmp(ptr \00" +@.str.4238 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4239 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4240 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4241 = private unnamed_addr constant [6 x i8] c" i64 \00" +@.str.4242 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4243 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4244 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4245 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4246 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.4247 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.4248 = private unnamed_addr constant [2 x i8] c">\00" +@.str.4249 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.4250 = private unnamed_addr constant [4 x i8] c"oeq\00" +@.str.4251 = private unnamed_addr constant [4 x i8] c"une\00" +@.str.4252 = private unnamed_addr constant [4 x i8] c"olt\00" +@.str.4253 = private unnamed_addr constant [4 x i8] c"ole\00" +@.str.4254 = private unnamed_addr constant [4 x i8] c"ogt\00" +@.str.4255 = private unnamed_addr constant [4 x i8] c"oge\00" +@.str.4256 = private unnamed_addr constant [6 x i8] c"fcmp \00" +@.str.4257 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4258 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4259 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4260 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4261 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4262 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4263 = private unnamed_addr constant [116 x i8] c"enums can only be compared with == and != (to go through them in order, give the variants numbers and use int(...))\00" +@.str.4264 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4265 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4266 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4267 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4268 = private unnamed_addr constant [6 x i8] c" i32 \00" +@.str.4269 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4270 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4271 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4272 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4273 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4274 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.4275 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4276 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4277 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4278 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4279 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4280 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4281 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.4282 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.4283 = private unnamed_addr constant [2 x i8] c">\00" +@.str.4284 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.4285 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4286 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4287 = private unnamed_addr constant [4 x i8] c"ult\00" +@.str.4288 = private unnamed_addr constant [4 x i8] c"ule\00" +@.str.4289 = private unnamed_addr constant [4 x i8] c"ugt\00" +@.str.4290 = private unnamed_addr constant [4 x i8] c"uge\00" +@.str.4291 = private unnamed_addr constant [3 x i8] c"eq\00" +@.str.4292 = private unnamed_addr constant [3 x i8] c"ne\00" +@.str.4293 = private unnamed_addr constant [4 x i8] c"slt\00" +@.str.4294 = private unnamed_addr constant [4 x i8] c"sle\00" +@.str.4295 = private unnamed_addr constant [4 x i8] c"sgt\00" +@.str.4296 = private unnamed_addr constant [4 x i8] c"sge\00" +@.str.4297 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4298 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.4299 = private unnamed_addr constant [3 x i8] c"||\00" +@.str.4300 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4301 = private unnamed_addr constant [11 x i8] c"logic.from\00" +@.str.4302 = private unnamed_addr constant [10 x i8] c"logic.rhs\00" +@.str.4303 = private unnamed_addr constant [10 x i8] c"logic.end\00" +@.str.4304 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.4305 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4306 = private unnamed_addr constant [11 x i8] c"logic.rend\00" +@.str.4307 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.4308 = private unnamed_addr constant [3 x i8] c"&&\00" +@.str.4309 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.4310 = private unnamed_addr constant [10 x i8] c"phi i1 [ \00" +@.str.4311 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.4312 = private unnamed_addr constant [7 x i8] c" ], [ \00" +@.str.4313 = private unnamed_addr constant [4 x i8] c", %\00" +@.str.4314 = private unnamed_addr constant [3 x i8] c" ]\00" +@.str.4315 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4316 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4317 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4318 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.4319 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4320 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.4321 = private unnamed_addr constant [3 x i8] c"!=\00" +@.str.4322 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.4323 = private unnamed_addr constant [3 x i8] c"<=\00" +@.str.4324 = private unnamed_addr constant [2 x i8] c">\00" +@.str.4325 = private unnamed_addr constant [3 x i8] c">=\00" +@.str.4326 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4327 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4328 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4329 = private unnamed_addr constant [48 x i8] c"an empty [] needs a type, like: []int nums = []\00" +@.str.4330 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4331 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.4332 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4333 = private unnamed_addr constant [28 x i8] c"every element of this array\00" +@.str.4334 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4335 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4336 = private unnamed_addr constant [9 x i8] c"mul i64 \00" +@.str.4337 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4338 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" +@.str.4339 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4340 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4341 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4342 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4343 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4344 = private unnamed_addr constant [42 x i8] c"insertvalue { ptr, i64, i64 } undef, ptr \00" +@.str.4345 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4346 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" +@.str.4347 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4348 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.4349 = private unnamed_addr constant [31 x i8] c"insertvalue { ptr, i64, i64 } \00" +@.str.4350 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4351 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.4352 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4353 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" +@.str.4354 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4355 = private unnamed_addr constant [61 x i8] c"this is a temporary value, it can't be changed or pointed to\00" +@.str.4356 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4357 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4358 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4359 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4360 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4361 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4362 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4363 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4364 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4365 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4367 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4368 = private unnamed_addr constant [8 x i8] c"fprintf\00" +@.str.4369 = private unnamed_addr constant [6 x i8] c"stdin\00" +@.str.4370 = private unnamed_addr constant [7 x i8] c"stdout\00" +@.str.4371 = private unnamed_addr constant [7 x i8] c"stderr\00" +@.str.4372 = private unnamed_addr constant [2 x i8] c"2\00" +@.str.4373 = private unnamed_addr constant [6 x i8] c"stdin\00" +@.str.4374 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4375 = private unnamed_addr constant [7 x i8] c"stdout\00" +@.str.4376 = private unnamed_addr constant [2 x i8] c"1\00" +@.str.4377 = private unnamed_addr constant [32 x i8] c"call ptr @finch_std_stream(i32 \00" +@.str.4378 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4379 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4380 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4381 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4382 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4383 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.4384 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4385 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4386 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4387 = private unnamed_addr constant [3 x i8] c"g:\00" +@.str.4388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4389 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4390 = private unnamed_addr constant [3 x i8] c"g:\00" +@.str.4391 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4392 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.4393 = private unnamed_addr constant [2 x i8] c"@\00" +@.str.4394 = private unnamed_addr constant [20 x i8] c" = external global \00" +@.str.4395 = private unnamed_addr constant [2 x i8] c"@\00" +@.str.4396 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4397 = private unnamed_addr constant [44 x i8] c"' is a module; use something from it, like \00" +@.str.4398 = private unnamed_addr constant [11 x i8] c".name(...)\00" +@.str.4399 = private unnamed_addr constant [29 x i8] c"there is no variable named '\00" +@.str.4400 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4401 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4402 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4403 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4404 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4405 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.4406 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4407 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4408 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4410 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4411 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4412 = private unnamed_addr constant [2 x i8] c"e\00" +@.str.4413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4414 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.4415 = private unnamed_addr constant [3 x i8] c".0\00" +@.str.4416 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4417 = private unnamed_addr constant [3 x i8] c".0\00" +@.str.4418 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4419 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4420 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4421 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.4422 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4423 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4424 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4425 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4426 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4427 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4428 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4429 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4430 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.4431 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4433 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4436 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4437 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4438 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4440 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.4441 = private unnamed_addr constant [18 x i8] c" has no variant '\00" +@.str.4442 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.4443 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4444 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4446 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4449 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4450 = private unnamed_addr constant [23 x i8] c" holds nothing: write \00" +@.str.4451 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4452 = private unnamed_addr constant [8 x i8] c" holds \00" +@.str.4453 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4454 = private unnamed_addr constant [20 x i8] c" value(s), but got \00" +@.str.4455 = private unnamed_addr constant [3 x i8] c": \00" +@.str.4456 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4457 = private unnamed_addr constant [6 x i8] c"(...)\00" +@.str.4458 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4459 = private unnamed_addr constant [4 x i8] c"tag\00" +@.str.4460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4461 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.4462 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4463 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4464 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4465 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4467 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4469 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4470 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4471 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.4472 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.4473 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4474 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.4475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4476 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4477 = private unnamed_addr constant [34 x i8] c"this pattern is not a variant of \00" +@.str.4478 = private unnamed_addr constant [11 x i8] c" (it has: \00" +@.str.4479 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4480 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4481 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4482 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4483 = private unnamed_addr constant [28 x i8] c" holds nothing: write just \00" +@.str.4484 = private unnamed_addr constant [8 x i8] c" holds \00" +@.str.4485 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4486 = private unnamed_addr constant [28 x i8] c" value(s): name them, like \00" +@.str.4487 = private unnamed_addr constant [28 x i8] c"(x), or use _ to ignore one\00" +@.str.4488 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.4489 = private unnamed_addr constant [51 x i8] c"write a name to hold the value (or _ to ignore it)\00" +@.str.4490 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4491 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.4492 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4493 = private unnamed_addr constant [10 x i8] c"the enum \00" +@.str.4494 = private unnamed_addr constant [18 x i8] c" has no variant '\00" +@.str.4495 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.4496 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4497 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4498 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4499 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4500 = private unnamed_addr constant [4 x i8] c" = \00" +@.str.4501 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4502 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4503 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4504 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4505 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4507 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00" +@.str.4508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4509 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4510 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4512 = private unnamed_addr constant [8 x i8] c" holds \00" +@.str.4513 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4514 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4517 = private unnamed_addr constant [12 x i8] c" value(s): \00" +@.str.4518 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4519 = private unnamed_addr constant [29 x i8] c"used .sums on a null pointer\00" +@.str.4520 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4521 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4522 = private unnamed_addr constant [6 x i8] c"(...)\00" +@.str.4523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4524 = private unnamed_addr constant [38 x i8] c"a variant of an enum can't be changed\00" +@.str.4525 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4526 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4527 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4528 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" +@.str.4529 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.4530 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.4531 = private unnamed_addr constant [7 x i8] c"used .\00" +@.str.4532 = private unnamed_addr constant [19 x i8] c" on a null pointer\00" +@.str.4533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4534 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4535 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4536 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4538 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.4539 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.4540 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4541 = private unnamed_addr constant [3 x i8] c"a \00" +@.str.4542 = private unnamed_addr constant [44 x i8] c" only has '.value' (the thing it points to)\00" +@.str.4543 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4544 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4545 = private unnamed_addr constant [27 x i8] c" can't be changed directly\00" +@.str.4546 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.4547 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4548 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4549 = private unnamed_addr constant [35 x i8] c"an array has .len and .ptr, not '.\00" +@.str.4550 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4551 = private unnamed_addr constant [49 x i8] c".ptr of a temporary value would point to nothing\00" +@.str.4552 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4553 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4554 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4555 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4556 = private unnamed_addr constant [31 x i8] c".ptr can't be changed directly\00" +@.str.4557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4558 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.4559 = private unnamed_addr constant [54 x i8] c".ptr of a temporary value would point to freed memory\00" +@.str.4560 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4561 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4562 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.4563 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4565 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4566 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4567 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.4568 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.4569 = private unnamed_addr constant [38 x i8] c"an array, map or str has .len, not '.\00" +@.str.4570 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4571 = private unnamed_addr constant [49 x i8] c".len can't be changed directly (use push or pop)\00" +@.str.4572 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4573 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4574 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.4575 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4576 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4577 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.4578 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4579 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.4580 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4581 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4582 = private unnamed_addr constant [22 x i8] c" has no fields (no '.\00" +@.str.4583 = private unnamed_addr constant [3 x i8] c"')\00" +@.str.4584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4585 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4586 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4587 = private unnamed_addr constant [12 x i8] c"the struct \00" +@.str.4588 = private unnamed_addr constant [16 x i8] c" has no field '\00" +@.str.4589 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.4590 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4591 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4592 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4593 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.4594 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4595 = private unnamed_addr constant [5 x i8] c"\0A```\00" +@.str.4596 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4597 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4598 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4599 = private unnamed_addr constant [14 x i8] c", i32 0, i32 \00" +@.str.4600 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4601 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.4602 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4603 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4604 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4605 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4606 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4607 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.4608 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.4609 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4610 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4611 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4612 = private unnamed_addr constant [9 x i8] c"an index\00" +@.str.4613 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4614 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4615 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4616 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4617 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00" +@.str.4618 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4619 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4620 = private unnamed_addr constant [58 x i8] c"this ptr has no type, so Finch doesn't know what's inside\00" +@.str.4621 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4623 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4624 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4625 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4626 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4627 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4628 = private unnamed_addr constant [47 x i8] c"[ ] works on arrays, str and pointers, not on \00" +@.str.4629 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4630 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.4631 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4632 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4633 = private unnamed_addr constant [45 x i8] c"this is a temporary str, it can't be changed\00" +@.str.4634 = private unnamed_addr constant [30 x i8] c"call void @finch_str_own(ptr \00" +@.str.4635 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4636 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4637 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.4638 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.4639 = private unnamed_addr constant [32 x i8] c"extractvalue { ptr, i64, i64 } \00" +@.str.4640 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4641 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.4642 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4643 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4644 = private unnamed_addr constant [18 x i8] c"named arguments (\00" +@.str.4645 = private unnamed_addr constant [37 x i8] c": ...) are only for creating structs\00" +@.str.4646 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4647 = private unnamed_addr constant [9 x i8] c"' takes \00" +@.str.4648 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" +@.str.4649 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4650 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4651 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4652 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4653 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.4654 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4655 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4656 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4657 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4658 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4659 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.4660 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.4661 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.4662 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.4663 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.4664 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.4665 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.4666 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4667 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4668 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4669 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4670 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4671 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4672 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.4673 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4674 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4675 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.4676 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4677 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4678 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.4679 = private unnamed_addr constant [33 x i8] c"call i32 @finch_str_try_int(ptr \00" +@.str.4680 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4681 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4682 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4683 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.4684 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4685 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4686 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.4687 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4688 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4689 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.4690 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4691 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4692 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4693 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4694 = private unnamed_addr constant [4 x i8] c"0.0\00" +@.str.4695 = private unnamed_addr constant [35 x i8] c"call i32 @finch_str_try_float(ptr \00" +@.str.4696 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4697 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4698 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4699 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.4700 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4701 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4702 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.4703 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.4704 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4705 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.4706 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4707 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4708 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4709 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4710 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.4711 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4712 = private unnamed_addr constant [32 x i8] c"call i64 @finch_str_to_int(ptr \00" +@.str.4713 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4714 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4715 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4716 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4717 = private unnamed_addr constant [37 x i8] c"call double @finch_str_to_float(ptr \00" +@.str.4718 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.4719 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4720 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4721 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4722 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4723 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.4724 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4725 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4726 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4727 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.4728 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.4729 = private unnamed_addr constant [7 x i8] c"fptoui\00" +@.str.4730 = private unnamed_addr constant [7 x i8] c"fptosi\00" +@.str.4731 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4732 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4733 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.4734 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4735 = private unnamed_addr constant [9 x i8] c"icmp ne \00" +@.str.4736 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4737 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4738 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4739 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4740 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.4741 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4742 = private unnamed_addr constant [14 x i8] c"inttoptr i64 \00" +@.str.4743 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.4744 = private unnamed_addr constant [8 x i8] c" to ptr\00" +@.str.4745 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4746 = private unnamed_addr constant [14 x i8] c"ptrtoint ptr \00" +@.str.4747 = private unnamed_addr constant [5 x i8] c" to \00" +@.str.4748 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4749 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4750 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4751 = private unnamed_addr constant [71 x i8] c"use .ptr to get a str's address (it is only valid while the str lives)\00" +@.str.4752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4753 = private unnamed_addr constant [12 x i8] c"can't turn \00" +@.str.4754 = private unnamed_addr constant [7 x i8] c" into \00" +@.str.4755 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4757 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4758 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4759 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4760 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4761 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4762 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.4763 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4764 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.4765 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4766 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4767 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4768 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4769 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4770 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4771 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4772 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.4773 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4775 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4777 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4778 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4779 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4780 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4781 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.4782 = private unnamed_addr constant [4 x i8] c" x \00" +@.str.4783 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.4784 = private unnamed_addr constant [3 x i8] c"{ \00" +@.str.4785 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4786 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.4787 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4788 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4789 = private unnamed_addr constant [5 x i8] c"i128\00" +@.str.4790 = private unnamed_addr constant [5 x i8] c"i128\00" +@.str.4791 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.4792 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4793 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" +@.str.4794 = private unnamed_addr constant [10 x i8] c"[2 x i64]\00" +@.str.4795 = private unnamed_addr constant [7 x i8] c"direct\00" +@.str.4796 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4797 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4798 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4799 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4800 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4801 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4802 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4803 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4804 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4805 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4806 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4807 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4808 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4809 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4810 = private unnamed_addr constant [17 x i8] c"division by zero\00" +@.str.4811 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4812 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4813 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4814 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4815 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4816 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4817 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4819 = private unnamed_addr constant [7 x i8] c"double\00" +@.str.4820 = private unnamed_addr constant [12 x i8] c"<2 x float>\00" +@.str.4821 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.4822 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4823 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4824 = private unnamed_addr constant [3 x i8] c"{ \00" +@.str.4825 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4826 = private unnamed_addr constant [3 x i8] c" }\00" +@.str.4827 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4828 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4829 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4830 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4831 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4832 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4833 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4834 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4835 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4836 = private unnamed_addr constant [2 x i8] c"i\00" +@.str.4837 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4838 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4839 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4840 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4841 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4842 = private unnamed_addr constant [7 x i8] c"direct\00" +@.str.4843 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4844 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4845 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4846 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4847 = private unnamed_addr constant [17 x i8] c"the C function '\00" +@.str.4848 = private unnamed_addr constant [3 x i8] c"' \00" +@.str.4849 = private unnamed_addr constant [19 x i8] c" the Finch struct \00" +@.str.4850 = private unnamed_addr constant [21 x i8] c", which C can't take\00" +@.str.4851 = private unnamed_addr constant [17 x i8] c"the C function '\00" +@.str.4852 = private unnamed_addr constant [3 x i8] c"' \00" +@.str.4853 = private unnamed_addr constant [13 x i8] c" the struct \00" +@.str.4854 = private unnamed_addr constant [41 x i8] c" by value, which Finch can't do yet: it \00" +@.str.4855 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4856 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4857 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4858 = private unnamed_addr constant [60 x i8] c"methods can't be exported (export a plain fn that calls it)\00" +@.str.4859 = private unnamed_addr constant [75 x i8] c"an export fn can't fail (C has no errors as values): handle them inside it\00" +@.str.4860 = private unnamed_addr constant [30 x i8] c"an export fn can't be generic\00" +@.str.4861 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4862 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4863 = private unnamed_addr constant [67 x i8] c"an export fn takes numbers, bool, char and pointers only (this is \00" +@.str.4864 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4865 = private unnamed_addr constant [51 x i8] c"; pass text as ptr[char] and make it a str inside)\00" +@.str.4866 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4867 = private unnamed_addr constant [70 x i8] c"an export fn returns nothing, a number, bool, char or a pointer (not \00" +@.str.4868 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4869 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4870 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.4871 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.4872 = private unnamed_addr constant [39 x i8] c"' is exported twice (from two modules)\00" +@.str.4873 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4874 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4875 = private unnamed_addr constant [14 x i8] c"i8 zeroext %e\00" +@.str.4876 = private unnamed_addr constant [4 x i8] c"i1 \00" +@.str.4877 = private unnamed_addr constant [14 x i8] c"icmp ne i8 %e\00" +@.str.4878 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.4879 = private unnamed_addr constant [4 x i8] c" %e\00" +@.str.4880 = private unnamed_addr constant [4 x i8] c" %e\00" +@.str.4881 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.4882 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4883 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4884 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4885 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4886 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4887 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4888 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4889 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.4890 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4891 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.4892 = private unnamed_addr constant [9 x i8] c" zeroext\00" +@.str.4893 = private unnamed_addr constant [8 x i8] c"ret i8 \00" +@.str.4894 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.4895 = private unnamed_addr constant [7 x i8] c" to i8\00" +@.str.4896 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.4897 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4898 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4899 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4900 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.4901 = private unnamed_addr constant [11 x i8] c" dllexport\00" +@.str.4902 = private unnamed_addr constant [7 x i8] c"define\00" +@.str.4903 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4904 = private unnamed_addr constant [3 x i8] c" @\00" +@.str.4905 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4906 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4907 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4908 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4909 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.4910 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4911 = private unnamed_addr constant [10 x i8] c"@finch.c.\00" +@.str.4912 = private unnamed_addr constant [2 x i8] c".\00" +@.str.4913 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4914 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4915 = private unnamed_addr constant [3 x i8] c"t:\00" +@.str.4916 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4917 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.4918 = private unnamed_addr constant [3 x i8] c"t:\00" +@.str.4919 = private unnamed_addr constant [6 x i8] c"addr(\00" +@.str.4920 = private unnamed_addr constant [82 x i8] c") gives C a function pointer, so it can't be a method or a function that can fail\00" +@.str.4921 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4922 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4923 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4924 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4925 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4926 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4927 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4928 = private unnamed_addr constant [6 x i8] c"addr(\00" +@.str.4929 = private unnamed_addr constant [96 x i8] c") gives C a function pointer, so its parameters must be C types (numbers, ptr, C structs), not \00" +@.str.4930 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.4931 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.4932 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.4933 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4934 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.4935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4936 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.4937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4938 = private unnamed_addr constant [6 x i8] c"addr(\00" +@.str.4939 = private unnamed_addr constant [39 x i8] c"): a function given to C can't return \00" +@.str.4940 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4941 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" +@.str.4942 = private unnamed_addr constant [15 x i8] c") align 16 %c0\00" +@.str.4943 = private unnamed_addr constant [4 x i8] c"%c0\00" +@.str.4944 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4945 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4946 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.4947 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" +@.str.4948 = private unnamed_addr constant [9 x i8] c") align \00" +@.str.4949 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4950 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4951 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.4952 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.4953 = private unnamed_addr constant [7 x i8] c"ptr %c\00" +@.str.4954 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4955 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.4956 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4957 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.4958 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4959 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4960 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4961 = private unnamed_addr constant [3 x i8] c"%c\00" +@.str.4962 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str.4963 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.4964 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4965 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4966 = private unnamed_addr constant [4 x i8] c" %c\00" +@.str.4967 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.4968 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4969 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4970 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4971 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4972 = private unnamed_addr constant [1 x i8] c"\00" +@.str.4973 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.4974 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.4975 = private unnamed_addr constant [9 x i8] c"ret void\00" +@.str.4976 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.4977 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.4978 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.4979 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4980 = private unnamed_addr constant [5 x i8] c"ret \00" +@.str.4981 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4982 = private unnamed_addr constant [16 x i8] c"define internal\00" +@.str.4983 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4984 = private unnamed_addr constant [2 x i8] c" \00" +@.str.4985 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.4986 = private unnamed_addr constant [3 x i8] c", \00" +@.str.4987 = private unnamed_addr constant [2 x i8] c")\00" +@.str.4988 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4989 = private unnamed_addr constant [30 x i8] c"used .enums on a null pointer\00" +@.str.4990 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4991 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4992 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4993 = private unnamed_addr constant [55 x i8] c"(...) turns a whole number into the enum, but this is \00" +@.str.4994 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.4995 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4996 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.4997 = private unnamed_addr constant [38 x i8] c" is not the number of any variant of \00" +@.str.4998 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.4999 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5000 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.5001 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5002 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5003 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str.5004 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5005 = private unnamed_addr constant [8 x i8] c"xor i1 \00" +@.str.5006 = private unnamed_addr constant [7 x i8] c", true\00" +@.str.5007 = private unnamed_addr constant [33 x i8] c"this number is not a variant of \00" +@.str.5008 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.5009 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5010 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5011 = private unnamed_addr constant [9 x i8] c" zeroext\00" +@.str.5012 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5014 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.5015 = private unnamed_addr constant [9 x i8] c" signext\00" +@.str.5016 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5017 = private unnamed_addr constant [9 x i8] c" zeroext\00" +@.str.5018 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5019 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5020 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5021 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5022 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5023 = private unnamed_addr constant [4 x i8] c"...\00" +@.str.5024 = private unnamed_addr constant [18 x i8] c"C function from `\00" +@.str.5025 = private unnamed_addr constant [8 x i8] c"`\0A```c\0A\00" +@.str.5026 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5027 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5028 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5029 = private unnamed_addr constant [6 x i8] c")\0A```\00" +@.str.5030 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5031 = private unnamed_addr constant [17 x i8] c"the C function '\00" +@.str.5032 = private unnamed_addr constant [36 x i8] c"' can't be used from Finch yet: it \00" +@.str.5033 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5034 = private unnamed_addr constant [18 x i8] c"' takes at least \00" +@.str.5035 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" +@.str.5036 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5037 = private unnamed_addr constant [9 x i8] c"' takes \00" +@.str.5038 = private unnamed_addr constant [23 x i8] c" argument(s), but got \00" +@.str.5039 = private unnamed_addr constant [8 x i8] c"returns\00" +@.str.5040 = private unnamed_addr constant [6 x i8] c"takes\00" +@.str.5041 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5042 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" +@.str.5043 = private unnamed_addr constant [11 x i8] c") align 16\00" +@.str.5044 = private unnamed_addr constant [10 x i8] c"ptr sret(\00" +@.str.5045 = private unnamed_addr constant [12 x i8] c") align 16 \00" +@.str.5046 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5047 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5048 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5049 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5050 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5051 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5052 = private unnamed_addr constant [10 x i8] c"argument \00" +@.str.5053 = private unnamed_addr constant [5 x i8] c" of \00" +@.str.5054 = private unnamed_addr constant [7 x i8] c"memory\00" +@.str.5055 = private unnamed_addr constant [11 x i8] c"ptr byval(\00" +@.str.5056 = private unnamed_addr constant [9 x i8] c") align \00" +@.str.5057 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5058 = private unnamed_addr constant [9 x i8] c"indirect\00" +@.str.5059 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5060 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.5061 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.5062 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.5063 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5064 = private unnamed_addr constant [32 x i8] c"getelementptr inbounds i8, ptr \00" +@.str.5065 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5066 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5067 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5068 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5069 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5070 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.5071 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5072 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5073 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5074 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5075 = private unnamed_addr constant [24 x i8] c"this gives back nothing\00" +@.str.5076 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5077 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5078 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5079 = private unnamed_addr constant [69 x i8] c"structs and arrays can't be passed to the '...' part of a C function\00" +@.str.5080 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.5081 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.5082 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.5083 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5084 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5085 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5086 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5087 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5088 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.5089 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5090 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.5091 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.5092 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5093 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5094 = private unnamed_addr constant [7 x i8] c"direct\00" +@.str.5095 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5096 = private unnamed_addr constant [6 x i8] c", ...\00" +@.str.5097 = private unnamed_addr constant [4 x i8] c"...\00" +@.str.5098 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5099 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.5100 = private unnamed_addr constant [3 x i8] c"f:\00" +@.str.5101 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5102 = private unnamed_addr constant [30 x i8] c"used .cdone on a null pointer\00" +@.str.5103 = private unnamed_addr constant [3 x i8] c"f:\00" +@.str.5104 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5105 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.5106 = private unnamed_addr constant [8 x i8] c"declare\00" +@.str.5107 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5108 = private unnamed_addr constant [3 x i8] c" @\00" +@.str.5109 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5110 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5111 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5112 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5113 = private unnamed_addr constant [3 x i8] c" (\00" +@.str.5114 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5115 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5116 = private unnamed_addr constant [5 x i8] c"call\00" +@.str.5117 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5118 = private unnamed_addr constant [3 x i8] c" @\00" +@.str.5119 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5120 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5121 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5122 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5123 = private unnamed_addr constant [7 x i8] c"expand\00" +@.str.5124 = private unnamed_addr constant [10 x i8] c"[32 x i8]\00" +@.str.5125 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5126 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5127 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5128 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" +@.str.5129 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5130 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5131 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5132 = private unnamed_addr constant [7 x i8] c"printf\00" +@.str.5133 = private unnamed_addr constant [7 x i8] c"fflush\00" +@.str.5134 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.5135 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.5136 = private unnamed_addr constant [6 x i8] c"qsort\00" +@.str.5137 = private unnamed_addr constant [7 x i8] c"printf\00" +@.str.5138 = private unnamed_addr constant [5 x i8] c"puts\00" +@.str.5139 = private unnamed_addr constant [8 x i8] c"putchar\00" +@.str.5140 = private unnamed_addr constant [6 x i8] c"scanf\00" +@.str.5141 = private unnamed_addr constant [6 x i8] c"fopen\00" +@.str.5142 = private unnamed_addr constant [8 x i8] c"getchar\00" +@.str.5143 = private unnamed_addr constant [5 x i8] c"sqrt\00" +@.str.5144 = private unnamed_addr constant [4 x i8] c"pow\00" +@.str.5145 = private unnamed_addr constant [4 x i8] c"sin\00" +@.str.5146 = private unnamed_addr constant [4 x i8] c"cos\00" +@.str.5147 = private unnamed_addr constant [6 x i8] c"floor\00" +@.str.5148 = private unnamed_addr constant [5 x i8] c"fabs\00" +@.str.5149 = private unnamed_addr constant [7 x i8] c"malloc\00" +@.str.5150 = private unnamed_addr constant [5 x i8] c"rand\00" +@.str.5151 = private unnamed_addr constant [6 x i8] c"srand\00" +@.str.5152 = private unnamed_addr constant [4 x i8] c"abs\00" +@.str.5153 = private unnamed_addr constant [5 x i8] c"atoi\00" +@.str.5154 = private unnamed_addr constant [7 x i8] c"strlen\00" +@.str.5155 = private unnamed_addr constant [7 x i8] c"strcpy\00" +@.str.5156 = private unnamed_addr constant [7 x i8] c"memcpy\00" +@.str.5157 = private unnamed_addr constant [5 x i8] c"time\00" +@.str.5158 = private unnamed_addr constant [6 x i8] c"sleep\00" +@.str.5159 = private unnamed_addr constant [7 x i8] c"usleep\00" +@.str.5160 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5161 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5162 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5163 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5164 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5165 = private unnamed_addr constant [8 x i8] c"stdio.h\00" +@.str.5166 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5167 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5168 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5169 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5170 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5171 = private unnamed_addr constant [7 x i8] c"math.h\00" +@.str.5172 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5173 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5174 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5175 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5176 = private unnamed_addr constant [9 x i8] c"stdlib.h\00" +@.str.5177 = private unnamed_addr constant [9 x i8] c"string.h\00" +@.str.5178 = private unnamed_addr constant [9 x i8] c"string.h\00" +@.str.5179 = private unnamed_addr constant [9 x i8] c"string.h\00" +@.str.5180 = private unnamed_addr constant [7 x i8] c"time.h\00" +@.str.5181 = private unnamed_addr constant [9 x i8] c"unistd.h\00" +@.str.5182 = private unnamed_addr constant [9 x i8] c"unistd.h\00" +@.str.5183 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5184 = private unnamed_addr constant [29 x i8] c" (it's from C: add import \22\00" +@.str.5185 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5186 = private unnamed_addr constant [15 x i8] c"\22 at the top)\00" +@.str.5187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5188 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5189 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5190 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.5191 = private unnamed_addr constant [87 x i8] c"error(...) makes an error to return from a function that can fail: return error(\22...\22)\00" +@.str.5192 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.5193 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5194 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5195 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5196 = private unnamed_addr constant [54 x i8] c"this gives back nothing, so there is nothing to print\00" +@.str.5197 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5198 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5199 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.5200 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5201 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5202 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.5203 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5204 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.5205 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5206 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5207 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5208 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.5209 = private unnamed_addr constant [7 x i8] c"member\00" +@.str.5210 = private unnamed_addr constant [6 x i8] c"index\00" +@.str.5211 = private unnamed_addr constant [64 x i8] c"addr(...) needs a variable, a field or an element, like addr(x)\00" +@.str.5212 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5213 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5214 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5215 = private unnamed_addr constant [35 x i8] c"call void @finch_str_from_int(ptr \00" +@.str.5216 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5217 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5218 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5219 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_uint(ptr \00" +@.str.5220 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5221 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.5222 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5223 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_float(ptr \00" +@.str.5224 = private unnamed_addr constant [10 x i8] c", double \00" +@.str.5225 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.5226 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5227 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5228 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_char(ptr \00" +@.str.5229 = private unnamed_addr constant [14 x i8] c", i8 signext \00" +@.str.5230 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5231 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5232 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5233 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5234 = private unnamed_addr constant [36 x i8] c"call void @finch_str_from_bool(ptr \00" +@.str.5235 = private unnamed_addr constant [7 x i8] c", i32 \00" +@.str.5236 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5237 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5238 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5239 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5240 = private unnamed_addr constant [33 x i8] c"call void @finch_str_from_c(ptr \00" +@.str.5241 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5242 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5243 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5244 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5245 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.5246 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5247 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5248 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5249 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5250 = private unnamed_addr constant [37 x i8] c"call void @finch_str_from_bytes(ptr \00" +@.str.5251 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5252 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5253 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5254 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5255 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5256 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.5257 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5258 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5259 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5260 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5261 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5262 = private unnamed_addr constant [12 x i8] c"can't turn \00" +@.str.5263 = private unnamed_addr constant [10 x i8] c" into str\00" +@.str.5264 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5265 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5266 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.5267 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.5268 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5269 = private unnamed_addr constant [14 x i8] c"the file name\00" +@.str.5270 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.5271 = private unnamed_addr constant [33 x i8] c"call i32 @finch_file_exists(ptr \00" +@.str.5272 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5273 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5274 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5275 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5276 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5277 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5278 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5279 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5280 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5281 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5282 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5283 = private unnamed_addr constant [35 x i8] c"call i32 @finch_try_read_file(ptr \00" +@.str.5284 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5285 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5286 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5287 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.5288 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5289 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5290 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5291 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5292 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5293 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5294 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5295 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5296 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5297 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5298 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5299 = private unnamed_addr constant [32 x i8] c"call void @finch_read_file(ptr \00" +@.str.5300 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5301 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5302 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5303 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5304 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5305 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5306 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.5307 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5308 = private unnamed_addr constant [14 x i8] c"the file name\00" +@.str.5309 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5310 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5311 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5312 = private unnamed_addr constant [9 x i8] c"the text\00" +@.str.5313 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5314 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5315 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5316 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5317 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5318 = private unnamed_addr constant [36 x i8] c"call i32 @finch_try_write_file(ptr \00" +@.str.5319 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5320 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5321 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5322 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.5323 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5324 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5325 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5326 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5327 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5328 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5329 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5330 = private unnamed_addr constant [32 x i8] c"call i32 @finch_write_file(ptr \00" +@.str.5331 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5332 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5333 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5334 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5335 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5336 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.5337 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5338 = private unnamed_addr constant [14 x i8] c"the file name\00" +@.str.5339 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" +@.str.5340 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5341 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5342 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5343 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5344 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5345 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5346 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5347 = private unnamed_addr constant [37 x i8] c"call i32 @finch_try_delete_file(ptr \00" +@.str.5348 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5349 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5350 = private unnamed_addr constant [13 x i8] c"icmp eq i32 \00" +@.str.5351 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5352 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5353 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5354 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5355 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5356 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5357 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5358 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5359 = private unnamed_addr constant [33 x i8] c"call i32 @finch_delete_file(ptr \00" +@.str.5360 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5361 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5362 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5363 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5364 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5365 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.5366 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5367 = private unnamed_addr constant [12 x i8] c"the command\00" +@.str.5368 = private unnamed_addr constant [31 x i8] c"call void @finch_str_copy(ptr \00" +@.str.5369 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5370 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5371 = private unnamed_addr constant [27 x i8] c"call i64 @finch_shell(ptr \00" +@.str.5372 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5373 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5374 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5375 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.5376 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5377 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5378 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5379 = private unnamed_addr constant [14 x i8] c"the exit code\00" +@.str.5380 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.5381 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5382 = private unnamed_addr constant [27 x i8] c"call i32 @fflush(ptr null)\00" +@.str.5383 = private unnamed_addr constant [21 x i8] c"call void @exit(i32 \00" +@.str.5384 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5385 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5386 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.5387 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5388 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5389 = private unnamed_addr constant [13 x i8] c"the question\00" +@.str.5390 = private unnamed_addr constant [28 x i8] c"call void @finch_input(ptr \00" +@.str.5391 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5392 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5393 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5394 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5395 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.5396 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5397 = private unnamed_addr constant [27 x i8] c"call ptr @finch_alloc(i64 \00" +@.str.5398 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5399 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.5400 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5401 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5402 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5403 = private unnamed_addr constant [120 x i8] c"free(...) is only for pointers from new(...) or C; arrays, str and structs are freed by Finch at the end of their block\00" +@.str.5404 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5405 = private unnamed_addr constant [10 x i8] c"free.drop\00" +@.str.5406 = private unnamed_addr constant [10 x i8] c"free.done\00" +@.str.5407 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.5408 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.5409 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5410 = private unnamed_addr constant [21 x i8] c"call void @free(ptr \00" +@.str.5411 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5412 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5413 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5414 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5415 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5416 = private unnamed_addr constant [48 x i8] c"' is not generic, so it takes no type arguments\00" +@.str.5417 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5418 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5419 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5420 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5421 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5422 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5423 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5424 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5425 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5426 = private unnamed_addr constant [43 x i8] c"' is generic, so say which type it holds: \00" +@.str.5427 = private unnamed_addr constant [11 x i8] c"[int](...)\00" +@.str.5428 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5429 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5430 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5431 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5432 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5433 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5434 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5435 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5436 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5437 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5438 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.5439 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5440 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5441 = private unnamed_addr constant [17 x i8] c"```finch\0Astruct \00" +@.str.5442 = private unnamed_addr constant [4 x i8] c" { \00" +@.str.5443 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5444 = private unnamed_addr constant [7 x i8] c" }\0A```\00" +@.str.5445 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5446 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5447 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5448 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5449 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5450 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5451 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.5452 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5453 = private unnamed_addr constant [27 x i8] c"used .ci on a null pointer\00" +@.str.5454 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5455 = private unnamed_addr constant [2 x i8] c"C\00" +@.str.5456 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5457 = private unnamed_addr constant [32 x i8] c"' is a variable, not a function\00" +@.str.5458 = private unnamed_addr constant [29 x i8] c"there is no function named '\00" +@.str.5459 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5460 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5461 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.5462 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5463 = private unnamed_addr constant [5 x i8] c"main\00" +@.str.5464 = private unnamed_addr constant [53 x i8] c"main can't be called, it is where the program starts\00" +@.str.5465 = private unnamed_addr constant [5 x i8] c"ptr \00" +@.str.5466 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5467 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5468 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5469 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5470 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5471 = private unnamed_addr constant [11 x i8] c"argument '\00" +@.str.5472 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5473 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5474 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5475 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5476 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5477 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5478 = private unnamed_addr constant [32 x i8] c"used .ftarget on a null pointer\00" +@.str.5479 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5480 = private unnamed_addr constant [40 x i8] c"' can fail, so say what happens then: \00" +@.str.5481 = private unnamed_addr constant [20 x i8] c"(...) or , \00" +@.str.5482 = private unnamed_addr constant [28 x i8] c"(...) or { ... }, or try \00" +@.str.5483 = private unnamed_addr constant [6 x i8] c"(...)\00" +@.str.5484 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.5485 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5486 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.5487 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5488 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5489 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.5490 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5491 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5492 = private unnamed_addr constant [8 x i8] c"xor i1 \00" +@.str.5493 = private unnamed_addr constant [7 x i8] c", true\00" +@.str.5494 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5495 = private unnamed_addr constant [32 x i8] c"used .ffailed on a null pointer\00" +@.str.5496 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.5497 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5498 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.5499 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5500 = private unnamed_addr constant [29 x i8] c"used .fmsg on a null pointer\00" +@.str.5501 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5502 = private unnamed_addr constant [14 x i8] c"extractvalue \00" +@.str.5503 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5504 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5505 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5506 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5507 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5508 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5509 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5510 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.5511 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5512 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5513 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5514 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5515 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5516 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5517 = private unnamed_addr constant [70 x i8] c"give either all fields by name (x: 1, y: 2) or none (1, 2), not a mix\00" +@.str.5518 = private unnamed_addr constant [6 x i8] c" has \00" +@.str.5519 = private unnamed_addr constant [18 x i8] c" fields, but got \00" +@.str.5520 = private unnamed_addr constant [24 x i8] c" values (or name them: \00" +@.str.5521 = private unnamed_addr constant [16 x i8] c"(field: value))\00" +@.str.5522 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5523 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5524 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5525 = private unnamed_addr constant [16 x i8] c" has no field '\00" +@.str.5526 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5527 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5528 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5529 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5530 = private unnamed_addr constant [12 x i8] c"the field '\00" +@.str.5531 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5532 = private unnamed_addr constant [17 x i8] c"' is given twice\00" +@.str.5533 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5534 = private unnamed_addr constant [16 x i8] c"zeroinitializer\00" +@.str.5535 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5536 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5537 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5538 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5539 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5540 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5541 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5542 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5543 = private unnamed_addr constant [12 x i8] c"the field '\00" +@.str.5544 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5545 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5546 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5547 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5548 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.5549 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5550 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5551 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5552 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.5553 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5554 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.5555 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5556 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.5557 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5558 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.5559 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5560 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.5561 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5562 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5563 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5564 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5565 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5566 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5567 = private unnamed_addr constant [17 x i8] c"the default of '\00" +@.str.5568 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5569 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5570 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5571 = private unnamed_addr constant [31 x i8] c"used .module on a null pointer\00" +@.str.5572 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5573 = private unnamed_addr constant [31 x i8] c"used .tnames on a null pointer\00" +@.str.5574 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5575 = private unnamed_addr constant [30 x i8] c"used .targs on a null pointer\00" +@.str.5576 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5577 = private unnamed_addr constant [31 x i8] c"used .scopes on a null pointer\00" +@.str.5578 = private unnamed_addr constant [13 x i8] c"insertvalue \00" +@.str.5579 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5580 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5581 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5582 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5583 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5584 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5585 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.5586 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5587 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5588 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5589 = private unnamed_addr constant [4 x i8] c"var\00" +@.str.5590 = private unnamed_addr constant [39 x i8] c"there is no variable or module named '\00" +@.str.5591 = private unnamed_addr constant [33 x i8] c"' (to use a module, add import \00" +@.str.5592 = private unnamed_addr constant [14 x i8] c" at the top)\00" +@.str.5593 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5594 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5595 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5596 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5597 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5598 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5599 = private unnamed_addr constant [13 x i8] c"the module '\00" +@.str.5600 = private unnamed_addr constant [36 x i8] c"' has no function or struct named '\00" +@.str.5601 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.5602 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.5603 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.5604 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.5605 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.5606 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.5607 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.5608 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.5609 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.5610 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5611 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5612 = private unnamed_addr constant [6 x i8] c"array\00" +@.str.5613 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5614 = private unnamed_addr constant [64 x i8] c"() would change a temporary array; store it in a variable first\00" +@.str.5615 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5616 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5617 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.5618 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5619 = private unnamed_addr constant [62 x i8] c"() would change a temporary map; store it in a variable first\00" +@.str.5620 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5621 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5622 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5623 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5624 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5625 = private unnamed_addr constant [13 x i8] c"icmp eq ptr \00" +@.str.5626 = private unnamed_addr constant [7 x i8] c", null\00" +@.str.5627 = private unnamed_addr constant [9 x i8] c"called .\00" +@.str.5628 = private unnamed_addr constant [21 x i8] c"() on a null pointer\00" +@.str.5629 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5630 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5631 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5632 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5633 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5634 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5635 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5636 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5637 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5638 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5639 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5640 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5641 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5642 = private unnamed_addr constant [32 x i8] c"used .structs on a null pointer\00" +@.str.5643 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5644 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5645 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.5646 = private unnamed_addr constant [5 x i8] c"the \00" +@.str.5647 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5648 = private unnamed_addr constant [35 x i8] c" has no methods; add one with fn \00" +@.str.5649 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5650 = private unnamed_addr constant [14 x i8] c"(...) { ... }\00" +@.str.5651 = private unnamed_addr constant [5 x i8] c"the \00" +@.str.5652 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5653 = private unnamed_addr constant [17 x i8] c" has no method '\00" +@.str.5654 = private unnamed_addr constant [12 x i8] c"' (it has: \00" +@.str.5655 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5656 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5657 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5658 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.5659 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5660 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.5661 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.5662 = private unnamed_addr constant [29 x i8] c"() would change a temporary \00" +@.str.5663 = private unnamed_addr constant [31 x i8] c"; store it in a variable first\00" +@.str.5664 = private unnamed_addr constant [20 x i8] c"the loop variable '\00" +@.str.5665 = private unnamed_addr constant [19 x i8] c"' can't be changed\00" +@.str.5666 = private unnamed_addr constant [2 x i8] c".\00" +@.str.5667 = private unnamed_addr constant [16 x i8] c" has no methods\00" +@.str.5668 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5669 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" +@.str.5670 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.5671 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.5672 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5673 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5674 = private unnamed_addr constant [12 x i8] c"the element\00" +@.str.5675 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5676 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5677 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5678 = private unnamed_addr constant [34 x i8] c"call void @finch_arr_reserve(ptr \00" +@.str.5679 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5680 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5681 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5682 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5683 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5684 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5685 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5686 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5687 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5688 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.5689 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5690 = private unnamed_addr constant [13 x i8] c"icmp eq i64 \00" +@.str.5691 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5692 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.5693 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5694 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5695 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5696 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5697 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5698 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5699 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5700 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.5701 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.5702 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5703 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.5704 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5705 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5706 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.5707 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5708 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5709 = private unnamed_addr constant [22 x i8] c"the value to look for\00" +@.str.5710 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5711 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5712 = private unnamed_addr constant [3 x i8] c"-1\00" +@.str.5713 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5714 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5715 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5716 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5717 = private unnamed_addr constant [2 x i8] c"0\00" +@.str.5718 = private unnamed_addr constant [10 x i8] c"find.cond\00" +@.str.5719 = private unnamed_addr constant [10 x i8] c"find.body\00" +@.str.5720 = private unnamed_addr constant [9 x i8] c"find.hit\00" +@.str.5721 = private unnamed_addr constant [10 x i8] c"find.next\00" +@.str.5722 = private unnamed_addr constant [9 x i8] c"find.end\00" +@.str.5723 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5724 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5725 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5726 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5727 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5728 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5729 = private unnamed_addr constant [3 x i8] c"==\00" +@.str.5730 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5731 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5732 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5733 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5734 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5735 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5736 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5737 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" +@.str.5738 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5739 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5740 = private unnamed_addr constant [5 x i8] c"join\00" +@.str.5741 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5742 = private unnamed_addr constant [32 x i8] c"join() works on an array of str\00" +@.str.5743 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5744 = private unnamed_addr constant [14 x i8] c"the separator\00" +@.str.5745 = private unnamed_addr constant [31 x i8] c"call void @finch_str_join(ptr \00" +@.str.5746 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5747 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5748 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5749 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5750 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5751 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.5752 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5753 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5754 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5755 = private unnamed_addr constant [13 x i8] c"the position\00" +@.str.5756 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5757 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5758 = private unnamed_addr constant [12 x i8] c"the element\00" +@.str.5759 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5760 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5761 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5762 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_insert_gap(ptr \00" +@.str.5763 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5764 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5765 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5766 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5767 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5768 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5769 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5770 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5771 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5772 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5773 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.5774 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5775 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5776 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5777 = private unnamed_addr constant [13 x i8] c"the position\00" +@.str.5778 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5779 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5780 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5781 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5782 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5783 = private unnamed_addr constant [37 x i8] c"call void @finch_arr_remove_gap(ptr \00" +@.str.5784 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5785 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5786 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5787 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.5788 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5789 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5790 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5791 = private unnamed_addr constant [15 x i8] c"the new length\00" +@.str.5792 = private unnamed_addr constant [33 x i8] c"call void @finch_arr_resize(ptr \00" +@.str.5793 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5794 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5795 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5796 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5797 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.5798 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5799 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5800 = private unnamed_addr constant [10 x i8] c"sdiv i64 \00" +@.str.5801 = private unnamed_addr constant [4 x i8] c", 2\00" +@.str.5802 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5803 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5804 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5805 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5806 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5807 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5808 = private unnamed_addr constant [4 x i8] c", 1\00" +@.str.5809 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5810 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5811 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5812 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5813 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5814 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5815 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str.5816 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5817 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5818 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5819 = private unnamed_addr constant [10 x i8] c"the start\00" +@.str.5820 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5821 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5822 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5823 = private unnamed_addr constant [8 x i8] c"the end\00" +@.str.5824 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5825 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5826 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5827 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" +@.str.5828 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5829 = private unnamed_addr constant [14 x i8] c"icmp sgt i64 \00" +@.str.5830 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5831 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str.5832 = private unnamed_addr constant [7 x i8] c"or i1 \00" +@.str.5833 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5834 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5835 = private unnamed_addr constant [34 x i8] c"slice(start, end) is out of range\00" +@.str.5836 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5837 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5838 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5839 = private unnamed_addr constant [31 x i8] c"call void @finch_arr_make(ptr \00" +@.str.5840 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5841 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5842 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5843 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5844 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5845 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5846 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5847 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5848 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5849 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5850 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5851 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5852 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5853 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5854 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5855 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5856 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.5857 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.5858 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5859 = private unnamed_addr constant [48 x i8] c"sort() works on arrays of numbers, chars or str\00" +@.str.5860 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5861 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5862 = private unnamed_addr constant [22 x i8] c"call void @qsort(ptr \00" +@.str.5863 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5864 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5865 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5866 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5867 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.5868 = private unnamed_addr constant [25 x i8] c"an array has no method '\00" +@.str.5869 = private unnamed_addr constant [97 x i8] c"' (it has: push, pop, insert, remove, clear, resize, find, contains, join, slice, reverse, sort)\00" +@.str.5870 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5871 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.5872 = private unnamed_addr constant [47 x i8] c"getelementptr inbounds { ptr, i64, i64 }, ptr \00" +@.str.5873 = private unnamed_addr constant [15 x i8] c", i32 0, i32 1\00" +@.str.5874 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.5875 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5876 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5877 = private unnamed_addr constant [14 x i8] c"icmp slt i64 \00" +@.str.5878 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5879 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.5880 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5881 = private unnamed_addr constant [11 x i8] c"select i1 \00" +@.str.5882 = private unnamed_addr constant [14 x i8] c", i64 0, i64 \00" +@.str.5883 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5884 = private unnamed_addr constant [9 x i8] c"sub i64 \00" +@.str.5885 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5886 = private unnamed_addr constant [24 x i8] c"getelementptr inbounds \00" +@.str.5887 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5888 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5889 = private unnamed_addr constant [9 x i8] c"add i64 \00" +@.str.5890 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5891 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5892 = private unnamed_addr constant [12 x i8] c"@finch.cmp.\00" +@.str.5893 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5894 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.5895 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5896 = private unnamed_addr constant [29 x i8] c"used .done on a null pointer\00" +@.str.5897 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5898 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5899 = private unnamed_addr constant [40 x i8] c"call i64 @finch_str_cmp(ptr %x, ptr %y)\00" +@.str.5900 = private unnamed_addr constant [11 x i8] c"trunc i64 \00" +@.str.5901 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5902 = private unnamed_addr constant [3 x i8] c"%x\00" +@.str.5903 = private unnamed_addr constant [3 x i8] c"%y\00" +@.str.5904 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5905 = private unnamed_addr constant [1 x i8] c"\00" +@.str.5906 = private unnamed_addr constant [10 x i8] c"fcmp olt \00" +@.str.5907 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5908 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5909 = private unnamed_addr constant [10 x i8] c"fcmp ogt \00" +@.str.5910 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5911 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5912 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.5913 = private unnamed_addr constant [2 x i8] c"<\00" +@.str.5914 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5915 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5916 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5917 = private unnamed_addr constant [6 x i8] c"icmp \00" +@.str.5918 = private unnamed_addr constant [2 x i8] c">\00" +@.str.5919 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5920 = private unnamed_addr constant [2 x i8] c" \00" +@.str.5921 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5922 = private unnamed_addr constant [9 x i8] c"sub i32 \00" +@.str.5923 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5924 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5925 = private unnamed_addr constant [3 x i8] c", \00" +@.str.5926 = private unnamed_addr constant [9 x i8] c"zext i1 \00" +@.str.5927 = private unnamed_addr constant [8 x i8] c" to i32\00" +@.str.5928 = private unnamed_addr constant [9 x i8] c"ret i32 \00" +@.str.5929 = private unnamed_addr constant [21 x i8] c"define internal i32 \00" +@.str.5930 = private unnamed_addr constant [17 x i8] c"(ptr %x, ptr %y)\00" +@.str.5931 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5932 = private unnamed_addr constant [30 x i8] c"used .files on a null pointer\00" +@.str.5933 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5934 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.5935 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5936 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5937 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5938 = private unnamed_addr constant [10 x i8] c"the start\00" +@.str.5939 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5940 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5941 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5942 = private unnamed_addr constant [8 x i8] c"the end\00" +@.str.5943 = private unnamed_addr constant [30 x i8] c"call void @finch_str_sub(ptr \00" +@.str.5944 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5945 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5946 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5947 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5948 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.5949 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5950 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5951 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5952 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5953 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.5954 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str.5955 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.5956 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5957 = private unnamed_addr constant [21 x i8] c"the text to look for\00" +@.str.5958 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.5959 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" +@.str.5960 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5961 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5962 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.5963 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.5964 = private unnamed_addr constant [30 x i8] c"call i64 @finch_str_find(ptr \00" +@.str.5965 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5966 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5967 = private unnamed_addr constant [14 x i8] c"icmp sge i64 \00" +@.str.5968 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5969 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5970 = private unnamed_addr constant [18 x i8] c"@finch_str_starts\00" +@.str.5971 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.5972 = private unnamed_addr constant [16 x i8] c"@finch_str_ends\00" +@.str.5973 = private unnamed_addr constant [10 x i8] c"call i32 \00" +@.str.5974 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.5975 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5976 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5977 = private unnamed_addr constant [13 x i8] c"icmp ne i32 \00" +@.str.5978 = private unnamed_addr constant [4 x i8] c", 0\00" +@.str.5979 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.5980 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str.5981 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str.5982 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str.5983 = private unnamed_addr constant [22 x i8] c"call void @finch_str_\00" +@.str.5984 = private unnamed_addr constant [6 x i8] c"(ptr \00" +@.str.5985 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5986 = private unnamed_addr constant [2 x i8] c")\00" +@.str.5987 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.5988 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.5989 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str.5990 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5991 = private unnamed_addr constant [20 x i8] c"the text to replace\00" +@.str.5992 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5993 = private unnamed_addr constant [32 x i8] c"used .pending on a null pointer\00" +@.str.5994 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.5995 = private unnamed_addr constant [13 x i8] c"the new text\00" +@.str.5996 = private unnamed_addr constant [34 x i8] c"call void @finch_str_replace(ptr \00" +@.str.5997 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5998 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.5999 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6000 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6001 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6002 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6003 = private unnamed_addr constant [6 x i8] c"split\00" +@.str.6004 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6005 = private unnamed_addr constant [14 x i8] c"the separator\00" +@.str.6006 = private unnamed_addr constant [32 x i8] c"call void @finch_str_split(ptr \00" +@.str.6007 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6008 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6009 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6010 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6011 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6012 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str.6013 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6014 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6015 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6016 = private unnamed_addr constant [10 x i8] c"the count\00" +@.str.6017 = private unnamed_addr constant [33 x i8] c"call void @finch_str_repeat(ptr \00" +@.str.6018 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6019 = private unnamed_addr constant [7 x i8] c", i64 \00" +@.str.6020 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6021 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6022 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6023 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str.6024 = private unnamed_addr constant [37 x i8] c"call void @finch_bytes_from_str(ptr \00" +@.str.6025 = private unnamed_addr constant [7 x i8] c", ptr \00" +@.str.6026 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6027 = private unnamed_addr constant [18 x i8] c"{ ptr, i64, i64 }\00" +@.str.6028 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6029 = private unnamed_addr constant [22 x i8] c"a str has no method '\00" +@.str.6030 = private unnamed_addr constant [107 x i8] c"' (it has: sub, find, contains, starts_with, ends_with, split, trim, upper, lower, replace, repeat, bytes)\00" +@.str.6031 = private unnamed_addr constant [55 x i8] c"declare void @finch_panic(ptr, i64, ptr) noreturn cold\00" +@.str.6032 = private unnamed_addr constant [66 x i8] c"declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold\00" +@.str.6033 = private unnamed_addr constant [30 x i8] c"declare ptr @finch_alloc(i64)\00" +@.str.6034 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_copy(ptr, ptr)\00" +@.str.6035 = private unnamed_addr constant [34 x i8] c"declare void @finch_str_drop(ptr)\00" +@.str.6036 = private unnamed_addr constant [34 x i8] c"declare void @finch_arr_free(ptr)\00" +@.str.6037 = private unnamed_addr constant [34 x i8] c"declare void @finch_map_free(ptr)\00" +@.str.6038 = private unnamed_addr constant [33 x i8] c"declare void @finch_str_own(ptr)\00" +@.str.6039 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_concat(ptr, ptr, ptr)\00" +@.str.6040 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_str_eq(ptr, ptr)\00" +@.str.6041 = private unnamed_addr constant [37 x i8] c"declare i64 @finch_str_cmp(ptr, ptr)\00" +@.str.6042 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_add(ptr, ptr, i64)\00" +@.str.6043 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_int(ptr, i64)\00" +@.str.6044 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_uint(ptr, i64)\00" +@.str.6045 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_float(ptr, double)\00" +@.str.6046 = private unnamed_addr constant [39 x i8] c"declare void @finch_buf_bool(ptr, i32)\00" +@.str.6047 = private unnamed_addr constant [38 x i8] c"declare void @finch_buf_ptr(ptr, ptr)\00" +@.str.6048 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_char(ptr, i8, i32)\00" +@.str.6049 = private unnamed_addr constant [43 x i8] c"declare void @finch_buf_str(ptr, ptr, i32)\00" +@.str.6050 = private unnamed_addr constant [35 x i8] c"declare void @finch_buf_print(ptr)\00" +@.str.6051 = private unnamed_addr constant [43 x i8] c"declare void @finch_str_from_int(ptr, i64)\00" +@.str.6052 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_uint(ptr, i64)\00" +@.str.6053 = private unnamed_addr constant [48 x i8] c"declare void @finch_str_from_float(ptr, double)\00" +@.str.6054 = private unnamed_addr constant [51 x i8] c"declare void @finch_str_from_char(ptr, i8 signext)\00" +@.str.6055 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_from_bool(ptr, i32)\00" +@.str.6056 = private unnamed_addr constant [45 x i8] c"declare i64 @finch_str_to_int(ptr, ptr, i64)\00" +@.str.6057 = private unnamed_addr constant [50 x i8] c"declare double @finch_str_to_float(ptr, ptr, i64)\00" +@.str.6058 = private unnamed_addr constant [58 x i8] c"declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64)\00" +@.str.6059 = private unnamed_addr constant [38 x i8] c"declare i64 @finch_str_find(ptr, ptr)\00" +@.str.6060 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_str_starts(ptr, ptr)\00" +@.str.6061 = private unnamed_addr constant [38 x i8] c"declare i32 @finch_str_ends(ptr, ptr)\00" +@.str.6062 = private unnamed_addr constant [39 x i8] c"declare void @finch_str_trim(ptr, ptr)\00" +@.str.6063 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_upper(ptr, ptr)\00" +@.str.6064 = private unnamed_addr constant [40 x i8] c"declare void @finch_str_lower(ptr, ptr)\00" +@.str.6065 = private unnamed_addr constant [52 x i8] c"declare void @finch_str_replace(ptr, ptr, ptr, ptr)\00" +@.str.6066 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_split(ptr, ptr, ptr)\00" +@.str.6067 = private unnamed_addr constant [44 x i8] c"declare void @finch_str_join(ptr, ptr, ptr)\00" +@.str.6068 = private unnamed_addr constant [46 x i8] c"declare void @finch_str_repeat(ptr, ptr, i64)\00" +@.str.6069 = private unnamed_addr constant [45 x i8] c"declare void @finch_bytes_from_str(ptr, ptr)\00" +@.str.6070 = private unnamed_addr constant [53 x i8] c"declare i64 @finch_map_find(ptr, ptr, i64, i64, i32)\00" +@.str.6071 = private unnamed_addr constant [58 x i8] c"declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr)\00" +@.str.6072 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_remove_at(ptr, i64, i64)\00" +@.str.6073 = private unnamed_addr constant [35 x i8] c"declare void @finch_map_clear(ptr)\00" +@.str.6074 = private unnamed_addr constant [49 x i8] c"declare void @finch_map_clone_raw(ptr, ptr, i64)\00" +@.str.6075 = private unnamed_addr constant [61 x i8] c"declare void @finch_map_missing(ptr, i64, ptr) noreturn cold\00" +@.str.6076 = private unnamed_addr constant [56 x i8] c"declare void @finch_map_changed(ptr, i64) noreturn cold\00" +@.str.6077 = private unnamed_addr constant [47 x i8] c"declare void @finch_arr_reserve(ptr, i64, i64)\00" +@.str.6078 = private unnamed_addr constant [49 x i8] c"declare void @finch_arr_clone_raw(ptr, ptr, i64)\00" +@.str.6079 = private unnamed_addr constant [44 x i8] c"declare void @finch_arr_make(ptr, i64, i64)\00" +@.str.6080 = private unnamed_addr constant [46 x i8] c"declare void @finch_arr_resize(ptr, i64, i64)\00" +@.str.6081 = private unnamed_addr constant [60 x i8] c"declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64)\00" +@.str.6082 = private unnamed_addr constant [50 x i8] c"declare void @finch_arr_remove_gap(ptr, i64, i64)\00" +@.str.6083 = private unnamed_addr constant [40 x i8] c"declare void @qsort(ptr, i64, i64, ptr)\00" +@.str.6084 = private unnamed_addr constant [40 x i8] c"declare void @finch_args(ptr, i32, ptr)\00" +@.str.6085 = private unnamed_addr constant [36 x i8] c"declare void @finch_input(ptr, ptr)\00" +@.str.6086 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_file_exists(ptr)\00" +@.str.6087 = private unnamed_addr constant [46 x i8] c"declare i32 @finch_str_try_int(ptr, ptr, ptr)\00" +@.str.6088 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_str_try_float(ptr, ptr, ptr)\00" +@.str.6089 = private unnamed_addr constant [48 x i8] c"declare i32 @finch_try_read_file(ptr, ptr, ptr)\00" +@.str.6090 = private unnamed_addr constant [49 x i8] c"declare i32 @finch_try_write_file(ptr, ptr, ptr)\00" +@.str.6091 = private unnamed_addr constant [45 x i8] c"declare i32 @finch_try_delete_file(ptr, ptr)\00" +@.str.6092 = private unnamed_addr constant [38 x i8] c"declare void @finch_report_error(ptr)\00" +@.str.6093 = private unnamed_addr constant [50 x i8] c"declare void @finch_read_file(ptr, ptr, ptr, i64)\00" +@.str.6094 = private unnamed_addr constant [40 x i8] c"declare i32 @finch_write_file(ptr, ptr)\00" +@.str.6095 = private unnamed_addr constant [30 x i8] c"declare i64 @finch_shell(ptr)\00" +@.str.6096 = private unnamed_addr constant [36 x i8] c"declare i32 @finch_delete_file(ptr)\00" +@.str.6097 = private unnamed_addr constant [30 x i8] c"declare i32 @printf(ptr, ...)\00" +@.str.6098 = private unnamed_addr constant [25 x i8] c"declare i32 @fflush(ptr)\00" +@.str.6099 = private unnamed_addr constant [41 x i8] c"declare void @finch_str_from_c(ptr, ptr)\00" +@.str.6100 = private unnamed_addr constant [34 x i8] c"declare void @finch_on_fatal(ptr)\00" +@.str.6101 = private unnamed_addr constant [35 x i8] c"declare ptr @finch_std_stream(i32)\00" +@.str.6102 = private unnamed_addr constant [45 x i8] c"declare void @finch_str_from_bytes(ptr, ptr)\00" +@.str.6103 = private unnamed_addr constant [33 x i8] c"declare void @exit(i32) noreturn\00" +@.str.6104 = private unnamed_addr constant [24 x i8] c"declare void @free(ptr)\00" +@.str.6105 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6106 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6107 = private unnamed_addr constant [53 x i8] c"; generated by the Finch compiler written in Finch\0A\0A\00" +@.str.6108 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6109 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6110 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6111 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6112 = private unnamed_addr constant [18 x i8] c"target triple = \22\00" +@.str.6113 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6114 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6115 = private unnamed_addr constant [4 x i8] c"\22\0A\0A\00" +@.str.6116 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6117 = private unnamed_addr constant [29 x i8] c"used .head on a null pointer\00" +@.str.6118 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6119 = private unnamed_addr constant [3 x i8] c"\0A\0A\00" +@.str.6120 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6121 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6122 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6123 = private unnamed_addr constant [63 x i8] c"declare void @llvm.dbg.declare(metadata, metadata, metadata)\0A\0A\00" +@.str.6124 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6125 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6126 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6127 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6128 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6129 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6130 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6131 = private unnamed_addr constant [30 x i8] c"used .debug on a null pointer\00" +@.str.6132 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6133 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6134 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6135 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6136 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6137 = private unnamed_addr constant [34 x i8] c"!{i32 7, !\22Dwarf Version\22, i32 4}\00" +@.str.6138 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6139 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6140 = private unnamed_addr constant [39 x i8] c"!{i32 2, !\22Debug Info Version\22, i32 3}\00" +@.str.6141 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6142 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6143 = private unnamed_addr constant [20 x i8] c"!DIFile(filename: \22\00" +@.str.6144 = private unnamed_addr constant [16 x i8] c"\22, directory: \22\00" +@.str.6145 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6146 = private unnamed_addr constant [28 x i8] c"used .cwd on a null pointer\00" +@.str.6147 = private unnamed_addr constant [3 x i8] c"\22)\00" +@.str.6148 = private unnamed_addr constant [53 x i8] c"distinct !DICompileUnit(language: DW_LANG_C, file: !\00" +@.str.6149 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6150 = private unnamed_addr constant [32 x i8] c"used .mdfiles on a null pointer\00" +@.str.6151 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6152 = private unnamed_addr constant [85 x i8] c", producer: \22finch\22, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)\00" +@.str.6153 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6154 = private unnamed_addr constant [27 x i8] c"used .md on a null pointer\00" +@.str.6155 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6156 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6157 = private unnamed_addr constant [5 x i8] c"main\00" +@.str.6158 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6159 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6160 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6161 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6162 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6163 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6164 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6165 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6166 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6167 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6168 = private unnamed_addr constant [83 x i8] c"a library (--shared) has no main: the program that loads it calls its 'export fn's\00" +@.str.6169 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6170 = private unnamed_addr constant [65 x i8] c":1:1: error: there is no main function (add 'fn main() { ... }')\00" +@.str.6171 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6172 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6173 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6174 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6175 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6176 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6177 = private unnamed_addr constant [30 x i8] c"used .index on a null pointer\00" +@.str.6178 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6179 = private unnamed_addr constant [30 x i8] c"used .progs on a null pointer\00" +@.str.6180 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6181 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6182 = private unnamed_addr constant [28 x i8] c"used .idx on a null pointer\00" +@.str.6183 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6184 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6185 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6186 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6187 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6188 = private unnamed_addr constant [27 x i8] c"used .tg on a null pointer\00" +@.str.6189 = private unnamed_addr constant [11 x i8] c" dllexport\00" +@.str.6190 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6191 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6192 = private unnamed_addr constant [7 x i8] c"define\00" +@.str.6193 = private unnamed_addr constant [108 x i8] c" void @finch_module_on_fatal(ptr %handler) {\0Aentry:\0A call void @finch_on_fatal(ptr %handler)\0A ret void\0A}\0A\00" +@.str.6194 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6195 = private unnamed_addr constant [29 x i8] c"used .sigs on a null pointer\00" +@.str.6196 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6197 = private unnamed_addr constant [6 x i8] c"call \00" +@.str.6198 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6199 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6200 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6201 = private unnamed_addr constant [134 x i8] c" %args = alloca { ptr, i64, i64 }\0A call void @finch_args(ptr %args, i32 %argc, ptr %argv)\0A %a = load { ptr, i64, i64 }, ptr %args\0A\00" +@.str.6202 = private unnamed_addr constant [21 x i8] c"{ ptr, i64, i64 } %a\00" +@.str.6203 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6204 = private unnamed_addr constant [13 x i8] c" ret i32 0\0A\00" +@.str.6205 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6206 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6207 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6208 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6209 = private unnamed_addr constant [22 x i8] c" %ok = extractvalue \00" +@.str.6210 = private unnamed_addr constant [63 x i8] c" %r, 0\0A br i1 %ok, label %main.ok, label %main.bad\0Amain.bad:\0A\00" +@.str.6211 = private unnamed_addr constant [21 x i8] c" %m = extractvalue \00" +@.str.6212 = private unnamed_addr constant [79 x i8] c" %r, 2\0A %mp = alloca { ptr, i64, i64 }\0A store { ptr, i64, i64 } %m, ptr %mp\0A\00" +@.str.6213 = private unnamed_addr constant [63 x i8] c" call void @finch_report_error(ptr %mp)\0A ret i32 1\0Amain.ok:\0A\00" +@.str.6214 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6215 = private unnamed_addr constant [21 x i8] c" %v = extractvalue \00" +@.str.6216 = private unnamed_addr constant [54 x i8] c" %r, 1\0A %code = trunc i64 %v to i32\0A ret i32 %code\0A\00" +@.str.6217 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6218 = private unnamed_addr constant [6 x i8] c"%r = \00" +@.str.6219 = private unnamed_addr constant [47 x i8] c" %code = trunc i64 %r to i32\0A ret i32 %code\0A\00" +@.str.6220 = private unnamed_addr constant [12 x i8] c"src/gen.fch\00" +@.str.6221 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6222 = private unnamed_addr constant [49 x i8] c"define i32 @main(i32 %argc, ptr %argv) {\0Aentry:\0A\00" +@.str.6223 = private unnamed_addr constant [3 x i8] c" \00" +@.str.6224 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6225 = private unnamed_addr constant [3 x i8] c"}\0A\00" +@.str.6226 = private unnamed_addr constant [6 x i8] c"print\00" +@.str.6227 = private unnamed_addr constant [17 x i8] c"print(a, b, ...)\00" +@.str.6228 = private unnamed_addr constant [79 x i8] c"Prints the values separated by spaces, then a new line. Works with every type.\00" +@.str.6229 = private unnamed_addr constant [6 x i8] c"input\00" +@.str.6230 = private unnamed_addr constant [32 x i8] c"input(str question = \22\22) -> str\00" +@.str.6231 = private unnamed_addr constant [78 x i8] c"Shows the question and reads one line typed by the user, without the newline.\00" +@.str.6232 = private unnamed_addr constant [10 x i8] c"read_file\00" +@.str.6233 = private unnamed_addr constant [27 x i8] c"read_file(str path) -> str\00" +@.str.6234 = private unnamed_addr constant [122 x i8] c"The whole file as text. Stops the program if it can't be read, unless handled: read_file(p) or { ... }, try read_file(p).\00" +@.str.6235 = private unnamed_addr constant [11 x i8] c"write_file\00" +@.str.6236 = private unnamed_addr constant [39 x i8] c"write_file(str path, str text) -> bool\00" +@.str.6237 = private unnamed_addr constant [84 x i8] c"Writes (replaces) the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6238 = private unnamed_addr constant [12 x i8] c"file_exists\00" +@.str.6239 = private unnamed_addr constant [30 x i8] c"file_exists(str path) -> bool\00" +@.str.6240 = private unnamed_addr constant [30 x i8] c"Is there a file at this path?\00" +@.str.6241 = private unnamed_addr constant [12 x i8] c"delete_file\00" +@.str.6242 = private unnamed_addr constant [30 x i8] c"delete_file(str path) -> bool\00" +@.str.6243 = private unnamed_addr constant [74 x i8] c"Deletes the file. true if it worked; with or / try, the reason it didn't.\00" +@.str.6244 = private unnamed_addr constant [6 x i8] c"error\00" +@.str.6245 = private unnamed_addr constant [19 x i8] c"error(str message)\00" +@.str.6246 = private unnamed_addr constant [99 x i8] c"The failure a fallible function returns: return error(\22...\22). The caller handles it with or / try.\00" +@.str.6247 = private unnamed_addr constant [6 x i8] c"shell\00" +@.str.6248 = private unnamed_addr constant [26 x i8] c"shell(str command) -> int\00" +@.str.6249 = private unnamed_addr constant [67 x i8] c"Runs a command in the system's shell and gives back its exit code.\00" +@.str.6250 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.6251 = private unnamed_addr constant [15 x i8] c"exit(int code)\00" +@.str.6252 = private unnamed_addr constant [49 x i8] c"Ends the program right away with this exit code.\00" +@.str.6253 = private unnamed_addr constant [5 x i8] c"addr\00" +@.str.6254 = private unnamed_addr constant [18 x i8] c"addr(x) -> ptr[T]\00" +@.str.6255 = private unnamed_addr constant [78 x i8] c"A pointer to a variable, field or element. addr(function) gives C a callback.\00" +@.str.6256 = private unnamed_addr constant [4 x i8] c"new\00" +@.str.6257 = private unnamed_addr constant [21 x i8] c"new(value) -> ptr[T]\00" +@.str.6258 = private unnamed_addr constant [67 x i8] c"Puts a copy of the value on the heap. Give it back with free(...).\00" +@.str.6259 = private unnamed_addr constant [5 x i8] c"free\00" +@.str.6260 = private unnamed_addr constant [12 x i8] c"free(ptr p)\00" +@.str.6261 = private unnamed_addr constant [74 x i8] c"Gives back memory from new(...) (or from C), freeing what the value owns.\00" +@.str.6262 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6263 = private unnamed_addr constant [14 x i8] c"str(x) -> str\00" +@.str.6264 = private unnamed_addr constant [62 x i8] c"Turns a number, bool, char, []u8 or C char pointer into text.\00" +@.str.6265 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6266 = private unnamed_addr constant [14 x i8] c"int(x) -> int\00" +@.str.6267 = private unnamed_addr constant [131 x i8] c"Converts to a whole number: cuts off fractions, parses text (stops the program if it isn't a number, unless handled: int(s) or 0).\00" +@.str.6268 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6269 = private unnamed_addr constant [18 x i8] c"float(x) -> float\00" +@.str.6270 = private unnamed_addr constant [76 x i8] c"Converts to a decimal number; parses text (int(s) or 0.0 handles bad text).\00" +@.str.6271 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6272 = private unnamed_addr constant [20 x i8] c"char(int n) -> char\00" +@.str.6273 = private unnamed_addr constant [30 x i8] c"The character with this code.\00" +@.str.6274 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6275 = private unnamed_addr constant [20 x i8] c"bool(int n) -> bool\00" +@.str.6276 = private unnamed_addr constant [27 x i8] c"true for any number but 0.\00" +@.str.6277 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6278 = private unnamed_addr constant [14 x i8] c"ptr(x) -> ptr\00" +@.str.6279 = private unnamed_addr constant [89 x i8] c"An untyped pointer: from a typed pointer, or from a number (an address or offset for C).\00" +@.str.6280 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6281 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6282 = private unnamed_addr constant [24 x i8] c"The number of elements.\00" +@.str.6283 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6284 = private unnamed_addr constant [15 x i8] c".ptr -> ptr[T]\00" +@.str.6285 = private unnamed_addr constant [41 x i8] c"The address of the first element, for C.\00" +@.str.6286 = private unnamed_addr constant [5 x i8] c"push\00" +@.str.6287 = private unnamed_addr constant [10 x i8] c"push(T x)\00" +@.str.6288 = private unnamed_addr constant [19 x i8] c"Adds x at the end.\00" +@.str.6289 = private unnamed_addr constant [4 x i8] c"pop\00" +@.str.6290 = private unnamed_addr constant [11 x i8] c"pop() -> T\00" +@.str.6291 = private unnamed_addr constant [44 x i8] c"Removes the last element and gives it back.\00" +@.str.6292 = private unnamed_addr constant [7 x i8] c"insert\00" +@.str.6293 = private unnamed_addr constant [19 x i8] c"insert(int i, T x)\00" +@.str.6294 = private unnamed_addr constant [39 x i8] c"Puts x at position i, moving the rest.\00" +@.str.6295 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6296 = private unnamed_addr constant [19 x i8] c"remove(int i) -> T\00" +@.str.6297 = private unnamed_addr constant [38 x i8] c"Removes position i and gives it back.\00" +@.str.6298 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6299 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6300 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6301 = private unnamed_addr constant [7 x i8] c"resize\00" +@.str.6302 = private unnamed_addr constant [14 x i8] c"resize(int n)\00" +@.str.6303 = private unnamed_addr constant [47 x i8] c"Makes the array n long; new elements are zero.\00" +@.str.6304 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6305 = private unnamed_addr constant [17 x i8] c"find(T x) -> int\00" +@.str.6306 = private unnamed_addr constant [23 x i8] c"The index of x, or -1.\00" +@.str.6307 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6308 = private unnamed_addr constant [22 x i8] c"contains(T x) -> bool\00" +@.str.6309 = private unnamed_addr constant [19 x i8] c"Is x in the array?\00" +@.str.6310 = private unnamed_addr constant [5 x i8] c"sort\00" +@.str.6311 = private unnamed_addr constant [7 x i8] c"sort()\00" +@.str.6312 = private unnamed_addr constant [38 x i8] c"Sorts in place (numbers, chars, str).\00" +@.str.6313 = private unnamed_addr constant [8 x i8] c"reverse\00" +@.str.6314 = private unnamed_addr constant [10 x i8] c"reverse()\00" +@.str.6315 = private unnamed_addr constant [19 x i8] c"Reverses in place.\00" +@.str.6316 = private unnamed_addr constant [6 x i8] c"slice\00" +@.str.6317 = private unnamed_addr constant [33 x i8] c"slice(int start, int end) -> []T\00" +@.str.6318 = private unnamed_addr constant [46 x i8] c"A new array with the elements start to end-1.\00" +@.str.6319 = private unnamed_addr constant [5 x i8] c"join\00" +@.str.6320 = private unnamed_addr constant [21 x i8] c"join(str sep) -> str\00" +@.str.6321 = private unnamed_addr constant [48 x i8] c"For []str: one text with sep between the parts.\00" +@.str.6322 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6323 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6324 = private unnamed_addr constant [21 x i8] c"The number of bytes.\00" +@.str.6325 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6326 = private unnamed_addr constant [18 x i8] c".ptr -> ptr[char]\00" +@.str.6327 = private unnamed_addr constant [60 x i8] c"The address of the text, for C (valid while the str lives).\00" +@.str.6328 = private unnamed_addr constant [4 x i8] c"sub\00" +@.str.6329 = private unnamed_addr constant [31 x i8] c"sub(int start, int end) -> str\00" +@.str.6330 = private unnamed_addr constant [30 x i8] c"The part from start to end-1.\00" +@.str.6331 = private unnamed_addr constant [5 x i8] c"find\00" +@.str.6332 = private unnamed_addr constant [19 x i8] c"find(str t) -> int\00" +@.str.6333 = private unnamed_addr constant [23 x i8] c"Where t starts, or -1.\00" +@.str.6334 = private unnamed_addr constant [9 x i8] c"contains\00" +@.str.6335 = private unnamed_addr constant [24 x i8] c"contains(str t) -> bool\00" +@.str.6336 = private unnamed_addr constant [25 x i8] c"Does the text contain t?\00" +@.str.6337 = private unnamed_addr constant [12 x i8] c"starts_with\00" +@.str.6338 = private unnamed_addr constant [27 x i8] c"starts_with(str t) -> bool\00" +@.str.6339 = private unnamed_addr constant [28 x i8] c"Does the text start with t?\00" +@.str.6340 = private unnamed_addr constant [10 x i8] c"ends_with\00" +@.str.6341 = private unnamed_addr constant [25 x i8] c"ends_with(str t) -> bool\00" +@.str.6342 = private unnamed_addr constant [26 x i8] c"Does the text end with t?\00" +@.str.6343 = private unnamed_addr constant [6 x i8] c"split\00" +@.str.6344 = private unnamed_addr constant [24 x i8] c"split(str sep) -> []str\00" +@.str.6345 = private unnamed_addr constant [63 x i8] c"The parts between each sep; split(\22\22) gives single characters.\00" +@.str.6346 = private unnamed_addr constant [5 x i8] c"trim\00" +@.str.6347 = private unnamed_addr constant [14 x i8] c"trim() -> str\00" +@.str.6348 = private unnamed_addr constant [42 x i8] c"Without spaces and newlines at both ends.\00" +@.str.6349 = private unnamed_addr constant [6 x i8] c"upper\00" +@.str.6350 = private unnamed_addr constant [15 x i8] c"upper() -> str\00" +@.str.6351 = private unnamed_addr constant [25 x i8] c"With a-z changed to A-Z.\00" +@.str.6352 = private unnamed_addr constant [6 x i8] c"lower\00" +@.str.6353 = private unnamed_addr constant [15 x i8] c"lower() -> str\00" +@.str.6354 = private unnamed_addr constant [25 x i8] c"With A-Z changed to a-z.\00" +@.str.6355 = private unnamed_addr constant [8 x i8] c"replace\00" +@.str.6356 = private unnamed_addr constant [33 x i8] c"replace(str from, str to) -> str\00" +@.str.6357 = private unnamed_addr constant [27 x i8] c"Every from replaced by to.\00" +@.str.6358 = private unnamed_addr constant [7 x i8] c"repeat\00" +@.str.6359 = private unnamed_addr constant [21 x i8] c"repeat(int n) -> str\00" +@.str.6360 = private unnamed_addr constant [18 x i8] c"The text n times.\00" +@.str.6361 = private unnamed_addr constant [6 x i8] c"bytes\00" +@.str.6362 = private unnamed_addr constant [16 x i8] c"bytes() -> []u8\00" +@.str.6363 = private unnamed_addr constant [23 x i8] c"The bytes of the text.\00" +@.str.6364 = private unnamed_addr constant [4 x i8] c"len\00" +@.str.6365 = private unnamed_addr constant [12 x i8] c".len -> int\00" +@.str.6366 = private unnamed_addr constant [20 x i8] c"The number of keys.\00" +@.str.6367 = private unnamed_addr constant [4 x i8] c"has\00" +@.str.6368 = private unnamed_addr constant [19 x i8] c"has(K key) -> bool\00" +@.str.6369 = private unnamed_addr constant [23 x i8] c"Is the key in the map?\00" +@.str.6370 = private unnamed_addr constant [4 x i8] c"get\00" +@.str.6371 = private unnamed_addr constant [27 x i8] c"get(K key, V default) -> V\00" +@.str.6372 = private unnamed_addr constant [54 x i8] c"The value for key, or default if the key isn't there.\00" +@.str.6373 = private unnamed_addr constant [7 x i8] c"remove\00" +@.str.6374 = private unnamed_addr constant [22 x i8] c"remove(K key) -> bool\00" +@.str.6375 = private unnamed_addr constant [53 x i8] c"Removes the key and its value; true if it was there.\00" +@.str.6376 = private unnamed_addr constant [6 x i8] c"clear\00" +@.str.6377 = private unnamed_addr constant [8 x i8] c"clear()\00" +@.str.6378 = private unnamed_addr constant [20 x i8] c"Removes everything.\00" +@.str.6379 = private unnamed_addr constant [5 x i8] c"keys\00" +@.str.6380 = private unnamed_addr constant [14 x i8] c"keys() -> []K\00" +@.str.6381 = private unnamed_addr constant [40 x i8] c"The keys, in the order they were added.\00" +@.str.6382 = private unnamed_addr constant [7 x i8] c"values\00" +@.str.6383 = private unnamed_addr constant [16 x i8] c"values() -> []V\00" +@.str.6384 = private unnamed_addr constant [48 x i8] c"The values, in the order their keys were added.\00" +@.str.6385 = private unnamed_addr constant [3 x i8] c"fn\00" +@.str.6386 = private unnamed_addr constant [7 x i8] c"return\00" +@.str.6387 = private unnamed_addr constant [3 x i8] c"if\00" +@.str.6388 = private unnamed_addr constant [5 x i8] c"else\00" +@.str.6389 = private unnamed_addr constant [6 x i8] c"while\00" +@.str.6390 = private unnamed_addr constant [4 x i8] c"for\00" +@.str.6391 = private unnamed_addr constant [3 x i8] c"in\00" +@.str.6392 = private unnamed_addr constant [6 x i8] c"break\00" +@.str.6393 = private unnamed_addr constant [9 x i8] c"continue\00" +@.str.6394 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.6395 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.6396 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.6397 = private unnamed_addr constant [7 x i8] c"import\00" +@.str.6398 = private unnamed_addr constant [5 x i8] c"link\00" +@.str.6399 = private unnamed_addr constant [7 x i8] c"struct\00" +@.str.6400 = private unnamed_addr constant [5 x i8] c"enum\00" +@.str.6401 = private unnamed_addr constant [6 x i8] c"match\00" +@.str.6402 = private unnamed_addr constant [7 x i8] c"export\00" +@.str.6403 = private unnamed_addr constant [6 x i8] c"defer\00" +@.str.6404 = private unnamed_addr constant [3 x i8] c"or\00" +@.str.6405 = private unnamed_addr constant [4 x i8] c"try\00" +@.str.6406 = private unnamed_addr constant [5 x i8] c"self\00" +@.str.6407 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6408 = private unnamed_addr constant [6 x i8] c"float\00" +@.str.6409 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6410 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6411 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6412 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6413 = private unnamed_addr constant [4 x i8] c"map\00" +@.str.6414 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6415 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6416 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6417 = private unnamed_addr constant [4 x i8] c"i64\00" +@.str.6418 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6419 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6420 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6421 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6422 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6423 = private unnamed_addr constant [4 x i8] c"f64\00" +@.str.6424 = private unnamed_addr constant [10 x i8] c"```finch\0A\00" +@.str.6425 = private unnamed_addr constant [6 x i8] c"\0A```\0A\00" +declare ptr @clang_getCString(ptr) +declare void @clang_disposeString(ptr) +@.str.6426 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6427 = private unnamed_addr constant [16 x i8] c"/finch_cc_dirs_\00" +@.str.6428 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6429 = private unnamed_addr constant [14 x i8] c"/finch_empty_\00" +@.str.6430 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6431 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6432 = private unnamed_addr constant [13 x i8] c" -E -v -x c \00" +@.str.6433 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6434 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6435 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6436 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6437 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6438 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6439 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6440 = private unnamed_addr constant [35 x i8] c"#include <...> search starts here:\00" +@.str.6441 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6442 = private unnamed_addr constant [20 x i8] c"End of search list.\00" +@.str.6443 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6444 = private unnamed_addr constant [23 x i8] c" (framework directory)\00" +@.str.6445 = private unnamed_addr constant [12 x i8] c"-iframework\00" +@.str.6446 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6447 = private unnamed_addr constant [9 x i8] c"-isystem\00" +declare void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16, ptr) +declare void @clang_getCursorUSR(ptr sret(%S.C.CXString) align 16, ptr) +@.str.6448 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6449 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6450 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6451 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6452 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +declare void @clang_getCursorSpelling(ptr sret(%S.C.CXString) align 16, ptr) +@.str.6453 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6454 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6455 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6456 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6457 = private unnamed_addr constant [13 x i8] c"anon_struct_\00" +@.str.6458 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6459 = private unnamed_addr constant [29 x i8] c"used .anon on a null pointer\00" +@.str.6460 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6461 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16, ptr) +@.str.6462 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6463 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6464 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6465 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +declare i64 @clang_Type_getSizeOf(ptr) +@.str.6466 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6467 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6468 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +declare i64 @clang_Type_getAlignOf(ptr) +declare i32 @clang_getCursorKind(ptr) +@.str.6469 = private unnamed_addr constant [13 x i8] c"is a C union\00" +declare i32 @clang_Type_visitFields(ptr, ptr, ptr) +@.str.6470 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6471 = private unnamed_addr constant [33 x i8] c"used .defining on a null pointer\00" +@.str.6472 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6473 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6474 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6475 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare void @clang_getCursorType(ptr sret(%S.C.CXType) align 16, ptr) +declare i64 @clang_Cursor_getOffsetOfField(ptr) +declare i32 @clang_Cursor_isBitField(ptr) +@.str.6476 = private unnamed_addr constant [15 x i8] c"has bit fields\00" +@.str.6477 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6478 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6479 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6480 = private unnamed_addr constant [36 x i8] c"used .unsupported on a null pointer\00" +@.str.6481 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6482 = private unnamed_addr constant [28 x i8] c"used .imp on a null pointer\00" +@.str.6483 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6484 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6485 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6486 = private unnamed_addr constant [34 x i8] c"used .hasHidden on a null pointer\00" +@.str.6487 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6488 = private unnamed_addr constant [26 x i8] c"used .s on a null pointer\00" +@.str.6489 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6490 = private unnamed_addr constant [31 x i8] c"used .fields on a null pointer\00" +@.str.6491 = private unnamed_addr constant [3 x i8] c"i8\00" +@.str.6492 = private unnamed_addr constant [3 x i8] c"u8\00" +@.str.6493 = private unnamed_addr constant [4 x i8] c"i16\00" +@.str.6494 = private unnamed_addr constant [4 x i8] c"u16\00" +@.str.6495 = private unnamed_addr constant [4 x i8] c"i32\00" +@.str.6496 = private unnamed_addr constant [4 x i8] c"u32\00" +@.str.6497 = private unnamed_addr constant [4 x i8] c"int\00" +@.str.6498 = private unnamed_addr constant [4 x i8] c"u64\00" +@.str.6499 = private unnamed_addr constant [8 x i8] c"uses a \00" +@.str.6500 = private unnamed_addr constant [12 x i8] c"-bit number\00" +@.str.6501 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6502 = private unnamed_addr constant [5 x i8] c"bool\00" +@.str.6503 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.6504 = private unnamed_addr constant [4 x i8] c"f32\00" +@.str.6505 = private unnamed_addr constant [6 x i8] c"float\00" +declare void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16, ptr) +declare i32 @clang_isConstQualifiedType(ptr) +@.str.6506 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.6507 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6508 = private unnamed_addr constant [5 x i8] c"void\00" +@.str.6509 = private unnamed_addr constant [6 x i8] c"fixed\00" +@.str.6510 = private unnamed_addr constant [4 x i8] c"ptr\00" +@.str.6511 = private unnamed_addr constant [24 x i8] c"uses a C union by value\00" +@.str.6512 = private unnamed_addr constant [37 x i8] c"uses an incomplete C struct by value\00" +@.str.6513 = private unnamed_addr constant [6 x i8] c"named\00" +@.str.6514 = private unnamed_addr constant [2 x i8] c"C\00" +declare void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16, ptr) +declare i64 @clang_getArraySize(ptr) +@.str.6515 = private unnamed_addr constant [17 x i8] c"uses long double\00" +@.str.6516 = private unnamed_addr constant [18 x i8] c"uses the C type '\00" +declare void @clang_getTypeSpelling(ptr sret(%S.C.CXString) align 16, ptr) +@.str.6517 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6518 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6519 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6520 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6521 = private unnamed_addr constant [3 x i8] c"0X\00" +@.str.6522 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6523 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6524 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6525 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6526 = private unnamed_addr constant [5 x i8] c"uUlL\00" +@.str.6527 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6528 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6529 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6530 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16, ptr) +declare void @clang_tokenize(ptr, ptr, ptr, ptr) +declare i32 @clang_getTokenKind(ptr) +@.str.6531 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6532 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare void @clang_getTokenSpelling(ptr sret(%S.C.CXString) align 16, ptr, ptr) +@.str.6533 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6534 = private unnamed_addr constant [27 x i8] c"used .tu on a null pointer\00" +declare void @clang_disposeTokens(ptr, ptr, i32) +@.str.6535 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6536 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.6537 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6538 = private unnamed_addr constant [2 x i8] c")\00" +@.str.6539 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6540 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6541 = private unnamed_addr constant [24 x i8] c"pop() on an empty array\00" +@.str.6542 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6543 = private unnamed_addr constant [2 x i8] c"-\00" +@.str.6544 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6545 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6546 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6547 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6548 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6549 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6550 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6551 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6552 = private unnamed_addr constant [2 x i8] c"e\00" +@.str.6553 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6554 = private unnamed_addr constant [2 x i8] c"E\00" +@.str.6555 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6556 = private unnamed_addr constant [3 x i8] c"0x\00" +@.str.6557 = private unnamed_addr constant [5 x i8] c"fFlL\00" +@.str.6558 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6559 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6560 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +declare void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16, ptr) +@.str.6561 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6562 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6563 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6564 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6565 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6566 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6567 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6568 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6569 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6570 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6571 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6572 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6573 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6574 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6575 = private unnamed_addr constant [31 x i8] c"used .header on a null pointer\00" +declare i32 @clang_Cursor_getStorageClass(ptr) +@.str.6576 = private unnamed_addr constant [63 x i8] c"is a static inline C function (it has no code to link against)\00" +@.str.6577 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6578 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6579 = private unnamed_addr constant [43 x i8] c"has no parameter list in its C declaration\00" +@.str.6580 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6581 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare void @clang_getResultType(ptr sret(%S.C.CXType) align 16, ptr) +declare i32 @clang_getNumArgTypes(ptr) +declare void @clang_getArgType(ptr sret(%S.C.CXType) align 16, ptr, i32) +declare i32 @clang_isFunctionTypeVariadic(ptr) +@.str.6582 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6583 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6584 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6585 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6586 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6587 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_isCursorDefinition(ptr) +@.str.6588 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6589 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6590 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6591 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +@.str.6592 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6593 = private unnamed_addr constant [36 x i8] c"used .recordNames on a null pointer\00" +declare i32 @clang_visitChildren(ptr, ptr, ptr) +@.str.6594 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6595 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i64 @clang_getEnumConstantDeclValue(ptr) +@.str.6596 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6597 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +declare i32 @clang_Cursor_isMacroBuiltin(ptr) +declare i32 @clang_Cursor_isMacroFunctionLike(ptr) +@.str.6598 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6599 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6600 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6601 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.6602 = private unnamed_addr constant [3 x i8] c"-x\00" +@.str.6603 = private unnamed_addr constant [2 x i8] c"c\00" +@.str.6604 = private unnamed_addr constant [11 x i8] c"-std=gnu11\00" +@.str.6605 = private unnamed_addr constant [10 x i8] c"--target=\00" +@.str.6606 = private unnamed_addr constant [20 x i8] c"-D_USE_MATH_DEFINES\00" +@.str.6607 = private unnamed_addr constant [3 x i8] c"-I\00" +@.str.6608 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6609 = private unnamed_addr constant [1 x i8] c"\00" +declare ptr @clang_createIndex(i32, i32) +@.str.6610 = private unnamed_addr constant [11 x i8] c"#include \22\00" +@.str.6611 = private unnamed_addr constant [3 x i8] c"\22\0A\00" +@.str.6612 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" +@.str.6613 = private unnamed_addr constant [15 x i8] c"finch_import.c\00" +@.str.6614 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @clang_parseTranslationUnit2(ptr, ptr, ptr, i32, ptr, i32, i32, ptr) +@.str.6615 = private unnamed_addr constant [34 x i8] c": error: couldn't read C header '\00" +@.str.6616 = private unnamed_addr constant [2 x i8] c"'\00" +declare i32 @clang_getNumDiagnostics(ptr) +declare ptr @clang_getDiagnostic(ptr, i32) +declare i32 @clang_getDiagnosticSeverity(ptr) +declare void @clang_getDiagnosticSpelling(ptr sret(%S.C.CXString) align 16, ptr) +declare void @clang_disposeDiagnostic(ptr) +@.str.6617 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6618 = private unnamed_addr constant [15 x i8] c"file not found\00" +@.str.6619 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6620 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6621 = private unnamed_addr constant [16 x i8] c"src/cimport.fch\00" +@.str.6622 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6623 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" +@.str.6624 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6625 = private unnamed_addr constant [35 x i8] c": error: can't find the C header '\00" +@.str.6626 = private unnamed_addr constant [11 x i8] c"', which '\00" +@.str.6627 = private unnamed_addr constant [61 x i8] c"' includes (is its library's development package installed?)\00" +@.str.6628 = private unnamed_addr constant [20 x i8] c": error: C header '\00" +@.str.6629 = private unnamed_addr constant [17 x i8] c"' has an error: \00" +declare void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16, ptr) +declare void @clang_disposeTranslationUnit(ptr) +declare void @clang_disposeIndex(ptr) +@.str.6630 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6631 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6632 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6633 = private unnamed_addr constant [21 x i8] c"src/host_windows.fch\00" +@.str.6634 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6635 = private unnamed_addr constant [3 x i8] c"\5C\22\00" +@.str.6636 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6637 = private unnamed_addr constant [21 x i8] c"src/host_windows.fch\00" +@.str.6638 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6639 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.6640 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6641 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6642 = private unnamed_addr constant [4 x i8] c"NUL\00" +@.str.6643 = private unnamed_addr constant [5 x i8] c"TEMP\00" +@.str.6644 = private unnamed_addr constant [4 x i8] c"TMP\00" +@.str.6645 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6646 = private unnamed_addr constant [21 x i8] c"src/host_windows.fch\00" +@.str.6647 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.6648 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6649 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6650 = private unnamed_addr constant [2 x i8] c";\00" +declare i32 @getpid() +declare ptr @_getcwd(ptr, i32) +@.str.6651 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6652 = private unnamed_addr constant [21 x i8] c"src/host_windows.fch\00" +@.str.6653 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.6654 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6655 = private unnamed_addr constant [13 x i8] c"LOCALAPPDATA\00" +@.str.6656 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6657 = private unnamed_addr constant [21 x i8] c"src/host_windows.fch\00" +@.str.6658 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.6659 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6660 = private unnamed_addr constant [7 x i8] c"/finch\00" +@.str.6661 = private unnamed_addr constant [13 x i8] c"/finch-cache\00" +declare i32 @_setmode(i32, i32) +@.str.6662 = private unnamed_addr constant [21 x i8] c"src/host_windows.fch\00" +@.str.6663 = private unnamed_addr constant [2 x i8] c"\5C\00" +@.str.6664 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6665 = private unnamed_addr constant [21 x i8] c"src/host_windows.fch\00" +@.str.6666 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6667 = private unnamed_addr constant [21 x i8] c"src/host_windows.fch\00" +@.str.6668 = private unnamed_addr constant [2 x i8] c":\00" +@.str.6669 = private unnamed_addr constant [21 x i8] c"src/host_windows.fch\00" +@.str.6670 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @_mkdir(ptr) +@.str.6671 = private unnamed_addr constant [14 x i8] c"\22rmdir /s /q \00" +@.str.6672 = private unnamed_addr constant [9 x i8] c" 2> NUL\22\00" +@.str.6673 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6674 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @rename(ptr, ptr) +@.str.6675 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6676 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6677 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6678 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6679 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6680 = private unnamed_addr constant [15 x i8] c"/finch_triple_\00" +@.str.6681 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6682 = private unnamed_addr constant [22 x i8] c"clang -dumpmachine > \00" +@.str.6683 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6684 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6685 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6686 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6687 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6688 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" +@.str.6689 = private unnamed_addr constant [6 x i8] c"linux\00" +@.str.6690 = private unnamed_addr constant [25 x i8] c"x86_64-unknown-linux-gnu\00" +@.str.6691 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6692 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6693 = private unnamed_addr constant [12 x i8] c"linux-arm64\00" +@.str.6694 = private unnamed_addr constant [26 x i8] c"aarch64-unknown-linux-gnu\00" +@.str.6695 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.6696 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6697 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6698 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6699 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6700 = private unnamed_addr constant [25 x i8] c"arm64-apple-macosx14.0.0\00" +@.str.6701 = private unnamed_addr constant [26 x i8] c"x86_64-apple-macosx14.0.0\00" +@.str.6702 = private unnamed_addr constant [23 x i8] c"x86_64-w64-windows-gnu\00" +@.str.6703 = private unnamed_addr constant [19 x i8] c"x86_64-w64-mingw32\00" +@.str.6704 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6705 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6706 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6707 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6708 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6709 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6710 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6711 = private unnamed_addr constant [6 x i8] c"win32\00" +@.str.6712 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6713 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6714 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6715 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6716 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6717 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6718 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6719 = private unnamed_addr constant [6 x i8] c"macos\00" +@.str.6720 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6721 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6722 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6723 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6724 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6725 = private unnamed_addr constant [8 x i8] c"aarch64\00" +@.str.6726 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6727 = private unnamed_addr constant [6 x i8] c"arm64\00" +@.str.6728 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6729 = private unnamed_addr constant [6 x i8] c"apple\00" +@.str.6730 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6731 = private unnamed_addr constant [7 x i8] c"darwin\00" +@.str.6732 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6733 = private unnamed_addr constant [8 x i8] c"windows\00" +@.str.6734 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6735 = private unnamed_addr constant [6 x i8] c"mingw\00" +@.str.6736 = private unnamed_addr constant [17 x i8] c"src/platform.fch\00" +@.str.6737 = private unnamed_addr constant [5 x i8] c"msvc\00" +@.str.6738 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6739 = private unnamed_addr constant [5 x i8] c".exe\00" +@.str.6740 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6741 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6742 = private unnamed_addr constant [23 x i8] c"x86_64-w64-mingw32-gcc\00" +@.str.6743 = private unnamed_addr constant [22 x i8] c"aarch64-linux-gnu-gcc\00" +@.str.6744 = private unnamed_addr constant [16 x i8] c"clang --target=\00" +@.str.6745 = private unnamed_addr constant [2 x i8] c";\00" +@.str.6746 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6747 = private unnamed_addr constant [3 x i8] c"cc\00" +@.str.6748 = private unnamed_addr constant [6 x i8] c"wine \00" +@.str.6749 = private unnamed_addr constant [14 x i8] c"qemu-aarch64 \00" +@.str.6750 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.6751 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6752 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6753 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6754 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6755 = private unnamed_addr constant [12 x i8] c"-framework \00" +@.str.6756 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6757 = private unnamed_addr constant [18 x i8] c"/finch_pkg_flags_\00" +@.str.6758 = private unnamed_addr constant [5 x i8] c".txt\00" +@.str.6759 = private unnamed_addr constant [19 x i8] c"pkg-config --libs \00" +@.str.6760 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6761 = private unnamed_addr constant [5 x i8] c" 2> \00" +@.str.6762 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6763 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6764 = private unnamed_addr constant [3 x i8] c"-l\00" +@.str.6765 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6766 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6767 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6768 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6769 = private unnamed_addr constant [2 x i8] c"/\00" +@.str.6770 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6771 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6772 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6773 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6774 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6775 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6776 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6777 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6778 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6779 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6780 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6781 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6782 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6783 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6784 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6785 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6786 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6787 = private unnamed_addr constant [25 x i8] c"undefined reference to `\00" +@.str.6788 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6789 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6790 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6791 = private unnamed_addr constant [19 x i8] c"undefined symbol: \00" +@.str.6792 = private unnamed_addr constant [3 x i8] c" \0A\00" +@.str.6793 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6794 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6795 = private unnamed_addr constant [28 x i8] c"unresolved external symbol \00" +@.str.6796 = private unnamed_addr constant [4 x i8] c" \0A\0D\00" +@.str.6797 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6798 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6799 = private unnamed_addr constant [15 x i8] c"cannot find -l\00" +@.str.6800 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" +@.str.6801 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6802 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6803 = private unnamed_addr constant [25 x i8] c"library not found for -l\00" +@.str.6804 = private unnamed_addr constant [5 x i8] c": \0A\0D\00" +@.str.6805 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6806 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6807 = private unnamed_addr constant [14 x i8] c"ld: library '\00" +@.str.6808 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6809 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6810 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6811 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6812 = private unnamed_addr constant [10 x i8] c"not found\00" +@.str.6813 = private unnamed_addr constant [12 x i8] c"framework '\00" +@.str.6814 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.6815 = private unnamed_addr constant [11 x i8] c".framework\00" +@.str.6816 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6817 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6818 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6819 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6820 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6821 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6822 = private unnamed_addr constant [20 x i8] c"\22, referenced from:\00" +@.str.6823 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6824 = private unnamed_addr constant [2 x i8] c"_\00" +@.str.6825 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6826 = private unnamed_addr constant [22 x i8] c"error: linking failed\00" +@.str.6827 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6828 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6829 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6830 = private unnamed_addr constant [21 x i8] c"error: the library '\00" +@.str.6831 = private unnamed_addr constant [63 x i8] c"' wasn't found. Is it installed? (on Nix: add it to shell.nix)\00" +@.str.6832 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6833 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6834 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6835 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6836 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6837 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6838 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6839 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6840 = private unnamed_addr constant [3 x i8] c", \00" +@.str.6841 = private unnamed_addr constant [6 x i8] c" and \00" +@.str.6842 = private unnamed_addr constant [6 x i8] c" more\00" +@.str.6843 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6844 = private unnamed_addr constant [26 x i8] c"error: no code found for \00" +@.str.6845 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6846 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6847 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6848 = private unnamed_addr constant [5 x i8] c"come\00" +@.str.6849 = private unnamed_addr constant [6 x i8] c"comes\00" +@.str.6850 = private unnamed_addr constant [8 x i8] c"error: \00" +@.str.6851 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6852 = private unnamed_addr constant [8 x i8] c" from \22\00" +@.str.6853 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6854 = private unnamed_addr constant [32 x i8] c"\22, but its library isn't linked\00" +@.str.6855 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6856 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6857 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6858 = private unnamed_addr constant [75 x i8] c" the header only says the functions exist; their code lives in a library.\00" +@.str.6859 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6860 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6861 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6862 = private unnamed_addr constant [67 x i8] c" add this at the top of your file (with the library's real name):\00" +@.str.6863 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6864 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6865 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6866 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6867 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6868 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6869 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6870 = private unnamed_addr constant [13 x i8] c" link \22\00" +@.str.6871 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6872 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.6873 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6874 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6875 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6876 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6877 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6878 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6879 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6880 = private unnamed_addr constant [5 x i8] c"/rt-\00" +@.str.6881 = private unnamed_addr constant [4 x i8] c"2.5\00" +@.str.6882 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6883 = private unnamed_addr constant [6 x i8] c".part\00" +@.str.6884 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6885 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6886 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6887 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6888 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6889 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6890 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6891 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6892 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6893 = private unnamed_addr constant [47 x i8] c"error: couldn't build the Finch runtime with '\00" +@.str.6894 = private unnamed_addr constant [31 x i8] c"' (is a C compiler installed?)\00" +@.str.6895 = private unnamed_addr constant [12 x i8] c"FINCH_CLANG\00" +@.str.6896 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6897 = private unnamed_addr constant [6 x i8] c"clang\00" +@.str.6898 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6899 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6900 = private unnamed_addr constant [9 x i8] c"FINCH_CC\00" +@.str.6901 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6902 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6903 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6904 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6905 = private unnamed_addr constant [4 x i8] c".ll\00" +@.str.6906 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6907 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6908 = private unnamed_addr constant [11 x i8] c" --target=\00" +@.str.6909 = private unnamed_addr constant [5 x i8] c".log\00" +@.str.6910 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6911 = private unnamed_addr constant [8 x i8] c" -w -c \00" +@.str.6912 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6913 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6914 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6915 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6916 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6917 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6918 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6919 = private unnamed_addr constant [47 x i8] c"error: clang couldn't compile the program's IR\00" +@.str.6920 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6921 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6922 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6923 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6924 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6925 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6926 = private unnamed_addr constant [5 x i8] c" -lm\00" +@.str.6927 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6928 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6929 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6930 = private unnamed_addr constant [14 x i8] c"FINCH_LDFLAGS\00" +@.str.6931 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6932 = private unnamed_addr constant [13 x i8] c" -dynamiclib\00" +@.str.6933 = private unnamed_addr constant [9 x i8] c" -shared\00" +@.str.6934 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6935 = private unnamed_addr constant [3 x i8] c".c\00" +@.str.6936 = private unnamed_addr constant [2 x i8] c".\00" +@.str.6937 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6938 = private unnamed_addr constant [7 x i8] c" -fPIC\00" +@.str.6939 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6940 = private unnamed_addr constant [5 x i8] c" -O2\00" +@.str.6941 = private unnamed_addr constant [5 x i8] c" -c \00" +@.str.6942 = private unnamed_addr constant [5 x i8] c" -o \00" +@.str.6943 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6944 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6945 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6946 = private unnamed_addr constant [25 x i8] c"error: couldn't compile \00" +@.str.6947 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6948 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6949 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6950 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6951 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6952 = private unnamed_addr constant [3 x i8] c".o\00" +@.str.6953 = private unnamed_addr constant [15 x i8] c"src/linker.fch\00" +@.str.6954 = private unnamed_addr constant [3 x i8] c".a\00" +@.str.6955 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6956 = private unnamed_addr constant [2 x i8] c" \00" +@.str.6957 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.6958 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.6959 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6960 = private unnamed_addr constant [43 x i8] c"error: no C compiler found to link with ('\00" +@.str.6961 = private unnamed_addr constant [33 x i8] c"'; install one, or set FINCH_CC)\00" +@.str.6962 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6963 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6964 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6965 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6966 = private unnamed_addr constant [5 x i8] c"%.*s\00" +@.str.6967 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6968 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6969 = private unnamed_addr constant [8 x i8] c"file://\00" +@.str.6970 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6971 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6972 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6973 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6974 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6975 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6976 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6977 = private unnamed_addr constant [17 x i8] c"0123456789ABCDEF\00" +@.str.6978 = private unnamed_addr constant [8 x i8] c"file://\00" +@.str.6979 = private unnamed_addr constant [6 x i8] c"/-_.~\00" +@.str.6980 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6981 = private unnamed_addr constant [2 x i8] c"%\00" +@.str.6982 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6983 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6984 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6985 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6986 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6987 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6988 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6989 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6990 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6991 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6992 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.6993 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6994 = private unnamed_addr constant [1 x i8] c"\00" +declare i32 @getchar() +@.str.6995 = private unnamed_addr constant [1 x i8] c"\00" +@.str.6996 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.6997 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.6998 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +declare i32 @feof(ptr) +@.str.6999 = private unnamed_addr constant [33 x i8] c"the editor closed the connection\00" +@.str.7000 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7001 = private unnamed_addr constant [16 x i8] c"Content-Length:\00" +@.str.7002 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7003 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7004 = private unnamed_addr constant [26 x i8] c"the message was cut short\00" +@.str.7005 = private unnamed_addr constant [17 x i8] c"Content-Length: \00" +@.str.7006 = private unnamed_addr constant [5 x i8] c"\0D\0A\0D\0A\00" +@.str.7007 = private unnamed_addr constant [1 x i8] c"\00" +declare i64 @fwrite(ptr, i64, i64, ptr) +@.str.7008 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.7009 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.7010 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.7011 = private unnamed_addr constant [7 x i8] c"result\00" +@.str.7012 = private unnamed_addr constant [8 x i8] c"jsonrpc\00" +@.str.7013 = private unnamed_addr constant [4 x i8] c"2.0\00" +@.str.7014 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.7015 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.7016 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7017 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7018 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7019 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7020 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7021 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7022 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7023 = private unnamed_addr constant [10 x i8] c": error: \00" +@.str.7024 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7025 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7026 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7027 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7028 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7029 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7030 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7031 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7032 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7033 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7034 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7035 = private unnamed_addr constant [2 x i8] c"@\00" +@.str.7036 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7037 = private unnamed_addr constant [3 x i8] c"@R\00" +@.str.7038 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7039 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7040 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7041 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7042 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7043 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7044 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7045 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7046 = private unnamed_addr constant [3 x i8] c"@V\00" +@.str.7047 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7048 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7049 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7050 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7051 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7052 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7053 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7054 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7055 = private unnamed_addr constant [3 x i8] c"@F\00" +@.str.7056 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7057 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7058 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7059 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7060 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7061 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7062 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7063 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7064 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7065 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7066 = private unnamed_addr constant [2 x i8] c"|\00" +@.str.7067 = private unnamed_addr constant [3 x i8] c"@S\00" +@.str.7068 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7069 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7070 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7071 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7072 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7073 = private unnamed_addr constant [4 x i8] c"@SF\00" +@.str.7074 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7075 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7076 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7077 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7078 = private unnamed_addr constant [3 x i8] c"@E\00" +@.str.7079 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7080 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7081 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7082 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7083 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7084 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7085 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7086 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7087 = private unnamed_addr constant [3 x i8] c"@I\00" +@.str.7088 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7089 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7090 = private unnamed_addr constant [5 x i8] c"/doc\00" +@.str.7091 = private unnamed_addr constant [5 x i8] c".fch\00" +@.str.7092 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7093 = private unnamed_addr constant [12 x i8] c" --overlay \00" +@.str.7094 = private unnamed_addr constant [2 x i8] c"=\00" +@.str.7095 = private unnamed_addr constant [9 x i8] c"/out.txt\00" +@.str.7096 = private unnamed_addr constant [8 x i8] c" index \00" +@.str.7097 = private unnamed_addr constant [4 x i8] c" > \00" +@.str.7098 = private unnamed_addr constant [6 x i8] c" 2>&1\00" +@.str.7099 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7100 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7101 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7102 = private unnamed_addr constant [9 x i8] c"severity\00" +@.str.7103 = private unnamed_addr constant [7 x i8] c"source\00" +@.str.7104 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7105 = private unnamed_addr constant [8 x i8] c"message\00" +@.str.7106 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7107 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7108 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7109 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7110 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7111 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7112 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7113 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7114 = private unnamed_addr constant [9 x i8] c"contents\00" +@.str.7115 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7116 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7117 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7118 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7119 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7120 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7121 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7122 = private unnamed_addr constant [6 x i8] c"start\00" +@.str.7123 = private unnamed_addr constant [4 x i8] c"end\00" +@.str.7124 = private unnamed_addr constant [6 x i8] c"range\00" +@.str.7125 = private unnamed_addr constant [15 x i8] c"selectionRange\00" +@.str.7126 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7127 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7128 = private unnamed_addr constant [7 x i8] c"detail\00" +@.str.7129 = private unnamed_addr constant [5 x i8] c"kind\00" +@.str.7130 = private unnamed_addr constant [9 x i8] c"markdown\00" +@.str.7131 = private unnamed_addr constant [6 x i8] c"value\00" +@.str.7132 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7133 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7134 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7135 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7136 = private unnamed_addr constant [33 x i8] c"called .push() on a null pointer\00" +@.str.7137 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7138 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7139 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7140 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7141 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7142 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7143 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7144 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7145 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.7146 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7147 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7148 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7149 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7150 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7151 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7152 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7153 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7154 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7155 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7156 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7157 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7158 = private unnamed_addr constant [5 x i8] c"char\00" +@.str.7159 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7160 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7161 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7162 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7163 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7164 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7165 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7166 = private unnamed_addr constant [4 x i8] c"str\00" +@.str.7167 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7168 = private unnamed_addr constant [5 x i8] c"map[\00" +@.str.7169 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7170 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7171 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7172 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7173 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7174 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7175 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7176 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7177 = private unnamed_addr constant [8 x i8] c"struct \00" +@.str.7178 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7179 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7180 = private unnamed_addr constant [6 x i8] c"enum \00" +@.str.7181 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7182 = private unnamed_addr constant [7 x i8] c"module\00" +@.str.7183 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7184 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7185 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7186 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7187 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7188 = private unnamed_addr constant [13 x i8] c"isIncomplete\00" +@.str.7189 = private unnamed_addr constant [6 x i8] c"items\00" +@.str.7190 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7191 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7192 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7193 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7194 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7195 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7196 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7197 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7198 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7199 = private unnamed_addr constant [5 x i8] c"ptr[\00" +@.str.7200 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7201 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7202 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7203 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7204 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7205 = private unnamed_addr constant [11 x i8] c"parameters\00" +@.str.7206 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7207 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7208 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7209 = private unnamed_addr constant [6 x i8] c"label\00" +@.str.7210 = private unnamed_addr constant [14 x i8] c"documentation\00" +@.str.7211 = private unnamed_addr constant [11 x i8] c"signatures\00" +@.str.7212 = private unnamed_addr constant [16 x i8] c"activeSignature\00" +@.str.7213 = private unnamed_addr constant [16 x i8] c"activeParameter\00" +@.str.7214 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7215 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7216 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7217 = private unnamed_addr constant [13 x i8] c"textDocument\00" +@.str.7218 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7219 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7220 = private unnamed_addr constant [7 x i8] c"method\00" +@.str.7221 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7222 = private unnamed_addr constant [7 x i8] c"params\00" +@.str.7223 = private unnamed_addr constant [3 x i8] c"id\00" +@.str.7224 = private unnamed_addr constant [11 x i8] c"initialize\00" +@.str.7225 = private unnamed_addr constant [17 x i8] c"textDocumentSync\00" +@.str.7226 = private unnamed_addr constant [14 x i8] c"hoverProvider\00" +@.str.7227 = private unnamed_addr constant [19 x i8] c"definitionProvider\00" +@.str.7228 = private unnamed_addr constant [23 x i8] c"documentSymbolProvider\00" +@.str.7229 = private unnamed_addr constant [2 x i8] c".\00" +@.str.7230 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7231 = private unnamed_addr constant [19 x i8] c"completionProvider\00" +@.str.7232 = private unnamed_addr constant [2 x i8] c"(\00" +@.str.7233 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7234 = private unnamed_addr constant [18 x i8] c"triggerCharacters\00" +@.str.7235 = private unnamed_addr constant [22 x i8] c"signatureHelpProvider\00" +@.str.7236 = private unnamed_addr constant [13 x i8] c"capabilities\00" +@.str.7237 = private unnamed_addr constant [5 x i8] c"name\00" +@.str.7238 = private unnamed_addr constant [6 x i8] c"finch\00" +@.str.7239 = private unnamed_addr constant [11 x i8] c"serverInfo\00" +@.str.7240 = private unnamed_addr constant [9 x i8] c"shutdown\00" +@.str.7241 = private unnamed_addr constant [5 x i8] c"exit\00" +@.str.7242 = private unnamed_addr constant [21 x i8] c"textDocument/didOpen\00" +@.str.7243 = private unnamed_addr constant [23 x i8] c"textDocument/didChange\00" +@.str.7244 = private unnamed_addr constant [15 x i8] c"contentChanges\00" +@.str.7245 = private unnamed_addr constant [5 x i8] c"text\00" +@.str.7246 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7247 = private unnamed_addr constant [21 x i8] c"textDocument/didSave\00" +@.str.7248 = private unnamed_addr constant [22 x i8] c"textDocument/didClose\00" +@.str.7249 = private unnamed_addr constant [4 x i8] c"uri\00" +@.str.7250 = private unnamed_addr constant [12 x i8] c"diagnostics\00" +@.str.7251 = private unnamed_addr constant [32 x i8] c"textDocument/publishDiagnostics\00" +@.str.7252 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7253 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7254 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7255 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7256 = private unnamed_addr constant [27 x i8] c"textDocument/signatureHelp\00" +@.str.7257 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7258 = private unnamed_addr constant [5 x i8] c"line\00" +@.str.7259 = private unnamed_addr constant [9 x i8] c"position\00" +@.str.7260 = private unnamed_addr constant [10 x i8] c"character\00" +@.str.7261 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7262 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7263 = private unnamed_addr constant [12 x i8] c"src/lsp.fch\00" +@.str.7264 = private unnamed_addr constant [19 x i8] c"textDocument/hover\00" +@.str.7265 = private unnamed_addr constant [24 x i8] c"textDocument/definition\00" +@.str.7266 = private unnamed_addr constant [24 x i8] c"textDocument/completion\00" +@.str.7267 = private unnamed_addr constant [28 x i8] c"textDocument/documentSymbol\00" +@.str.7268 = private unnamed_addr constant [12 x i8] c"/finch_lsp_\00" +@.str.7269 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7270 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7271 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7272 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7273 = private unnamed_addr constant [3 x i8] c"\5C\22\00" +@.str.7274 = private unnamed_addr constant [3 x i8] c"\5C\5C\00" +@.str.7275 = private unnamed_addr constant [3 x i8] c"\5Cn\00" +@.str.7276 = private unnamed_addr constant [3 x i8] c"\5Cr\00" +@.str.7277 = private unnamed_addr constant [3 x i8] c"\5Ct\00" +@.str.7278 = private unnamed_addr constant [5 x i8] c"\5Cu00\00" +@.str.7279 = private unnamed_addr constant [2 x i8] c"\22\00" +@.str.7280 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7281 = private unnamed_addr constant [17 x i8] c"0123456789abcdef\00" +@.str.7282 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7283 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7284 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7285 = private unnamed_addr constant [2 x i8] c",\00" +@.str.7286 = private unnamed_addr constant [2 x i8] c":\00" +@.str.7287 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7288 = private unnamed_addr constant [3 x i8] c": \00" +@.str.7289 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7290 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7291 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7292 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7293 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7294 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.7295 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7296 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7297 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7298 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7299 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7300 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7301 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7302 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7303 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7304 = private unnamed_addr constant [3 x i8] c"[]\00" +@.str.7305 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7306 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7307 = private unnamed_addr constant [2 x i8] c"[\00" +@.str.7308 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7309 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7310 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7311 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7312 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7313 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7314 = private unnamed_addr constant [2 x i8] c"]\00" +@.str.7315 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7316 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7317 = private unnamed_addr constant [3 x i8] c"{}\00" +@.str.7318 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7319 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7320 = private unnamed_addr constant [2 x i8] c"{\00" +@.str.7321 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7322 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7323 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7324 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7325 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7326 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7327 = private unnamed_addr constant [28 x i8] c"used .out on a null pointer\00" +@.str.7328 = private unnamed_addr constant [2 x i8] c"}\00" +@.str.7329 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7330 = private unnamed_addr constant [36 x i8] c"no arm of this match fits the value\00" +@.str.7331 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7332 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7333 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7334 = private unnamed_addr constant [3 x i8] c" \00" +@.str.7335 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7336 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7337 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7338 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7339 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7340 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7341 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7342 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7343 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7344 = private unnamed_addr constant [6 x i8] c"line \00" +@.str.7345 = private unnamed_addr constant [10 x i8] c", column \00" +@.str.7346 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7347 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7348 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7349 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7350 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7351 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7352 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7353 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7354 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7355 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7356 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7357 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7358 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7359 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7360 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7361 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7362 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7363 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7364 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7365 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7366 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7367 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7368 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7369 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7370 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7371 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7372 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7373 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7374 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7375 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7376 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7377 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7378 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7379 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7380 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7381 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7382 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7383 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7384 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7385 = private unnamed_addr constant [27 x i8] c"json: the text ends where \00" +@.str.7386 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7387 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7388 = private unnamed_addr constant [14 x i8] c"json: found '\00" +@.str.7389 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7390 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7391 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7392 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7393 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7394 = private unnamed_addr constant [9 x i8] c"' where \00" +@.str.7395 = private unnamed_addr constant [13 x i8] c" should be (\00" +@.str.7396 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7397 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7398 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7399 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7400 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7401 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7402 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7403 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7404 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7405 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7406 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7407 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7408 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7409 = private unnamed_addr constant [2 x i8] c"'\00" +@.str.7410 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7411 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7412 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7413 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7414 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7415 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7416 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7417 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7418 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7419 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7420 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7421 = private unnamed_addr constant [20 x i8] c"a hexadecimal digit\00" +@.str.7422 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7423 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7424 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7425 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7426 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7427 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7428 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7429 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7430 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7431 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7432 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7433 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7434 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7435 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7436 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7437 = private unnamed_addr constant [31 x i8] c"json: a text is never closed (\00" +@.str.7438 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7439 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7440 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7441 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7442 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7443 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7444 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7445 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7446 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7447 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7448 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7449 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7450 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7451 = private unnamed_addr constant [1 x i8] c"\00" +@.str.7452 = private unnamed_addr constant [56 x i8] c"json: a line break or control character inside a text (\00" +@.str.7453 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7454 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7455 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7456 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7457 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7458 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7459 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7460 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7461 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7462 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7463 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7464 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7465 = private unnamed_addr constant [2 x i8] c"\0A\00" +@.str.7466 = private unnamed_addr constant [2 x i8] c"\09\00" +@.str.7467 = private unnamed_addr constant [2 x i8] c"\0D\00" +@.str.7468 = private unnamed_addr constant [3 x i8] c"\5Cu\00" +@.str.7469 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7470 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7471 = private unnamed_addr constant [23 x i8] c"json: unknown escape \5C\00" +@.str.7472 = private unnamed_addr constant [13 x i8] c" in a text (\00" +@.str.7473 = private unnamed_addr constant [2 x i8] c")\00" +@.str.7474 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7475 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7476 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7477 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7478 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7479 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7480 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7481 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7482 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7483 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7484 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7485 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7486 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7487 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7488 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7489 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7490 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7491 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7492 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7493 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7494 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7495 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7496 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7497 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7498 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7499 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7500 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7501 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7502 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7503 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7504 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7505 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7506 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7507 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7508 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7509 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7510 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7511 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7512 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7513 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7514 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7515 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7516 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7517 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7518 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7519 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7520 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7521 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7522 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7523 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7524 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7525 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7526 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7527 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7528 = private unnamed_addr constant [9 x i8] c"a number\00" +@.str.7529 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7530 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7531 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7532 = private unnamed_addr constant [28 x i8] c"used .src on a null pointer\00" +@.str.7533 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7534 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7535 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7536 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7537 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7538 = private unnamed_addr constant [16 x i8] c"a key in quotes\00" +@.str.7539 = private unnamed_addr constant [4 x i8] c"':'\00" +@.str.7540 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7541 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7542 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7543 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7544 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7545 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7546 = private unnamed_addr constant [11 x i8] c"',' or '}'\00" +@.str.7547 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7548 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7549 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7550 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7551 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7552 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7553 = private unnamed_addr constant [22 x i8] c"build/../std/json.fch\00" +@.str.7554 = private unnamed_addr constant [26 x i8] c"used .i on a null pointer\00" +@.str.7555 = private unnamed_addr constant [11 x i8] c"',' or ']'\00" +@.str.7556 = private unnamed_addr constant [5 x i8] c"true\00" +@.str.7557 = private unnamed_addr constant [6 x i8] c"false\00" +@.str.7558 = private unnamed_addr constant [5 x i8] c"null\00" +@.str.7559 = private unnamed_addr constant [8 x i8] c"a value\00" +@.str.7560 = private unnamed_addr constant [20 x i8] c"the end of the text\00" +@.str.7561 = private unnamed_addr constant [19 x i8] c"runtime/finch_rt.c\00" +@.str.7562 = private unnamed_addr constant [13 x i8] c"std/json.fch\00" +@.str.7563 = private unnamed_addr constant [13 x i8] c"std/path.fch\00" +@.str.7564 = private unnamed_addr constant [13 x i8] c"std/proc.fch\00" +@.str.7565 = private unnamed_addr constant [21 x i8] c"std/proc_windows.fch\00" +@.str.7566 = private unnamed_addr constant [13 x i8] c"std/time.fch\00" +@.str.7567 = private unnamed_addr constant [21 x i8] c"std/time_windows.fch\00" +@.str.7568 = private unnamed_addr constant [16 x i8] c"std/finch_win.h\00" +@.str.7569 = private unnamed_addr constant [24982 x i8] c"// The Finch runtime: string and array helpers, input, files and runtime errors.\0A// It is embedded in the compiler, compiled once into a cache folder, and linked\0A// statically into every Finch program. Everything here is plain C with no state.\0A//\0A// Layout shared with the compiler (src/codegen.cpp):\0A// str = { char *ptr; int64 len; int64 cap } ptr is always NUL-terminated\0A// cap > 0 : heap memory owned by the value (cap bytes allocated)\0A// cap == 0 : a string literal, valid forever, never written to\0A// cap == -1: borrowed from C, must be copied before it is kept\0A// []T = { T *ptr; int64 len; int64 cap } owns ptr when cap > 0\0A// map[K]V: see \22maps\22 below\0A\0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#include \0A#ifndef _WIN32\0A#include \0A#endif\0A\0Atypedef struct {\0A char *ptr;\0A int64_t len;\0A int64_t cap;\0A} FStr;\0A\0Atypedef struct {\0A void *ptr;\0A int64_t len;\0A int64_t cap;\0A} FArr;\0A\0Astatic char empty[1] = \22\22;\0A\0A// ---------- runtime errors ----------\0A\0A// A program that loads Finch libraries (finch build --shared) can take runtime errors over\0A// instead of the process exiting: finch_module_on_fatal(handler) in each library. The handler\0A// gets the message and must not return (longjmp out, or exit itself).\0Astatic void (*fatal_hook)(const char *msg);\0Avoid finch_on_fatal(void (*hook)(const char *msg)) { fatal_hook = hook; }\0A\0Astatic __attribute__((noreturn)) void fatal(const char *msg) {\0A if (fatal_hook) fatal_hook(msg);\0A fflush(stdout);\0A fprintf(stderr, \22%s\5Cn\22, msg);\0A exit(1);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic(const char *file, int64_t line, const char *msg) {\0A char full[1024];\0A snprintf(full, sizeof full, \22%s:%lld: runtime error: %s\22, file, (long long)line, msg);\0A fflush(stdout);\0A fatal(full);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_panic_index(const char *file, int64_t line, int64_t i, int64_t len) {\0A char msg[128];\0A snprintf(msg, sizeof msg, \22index %lld is out of range (the length is %lld)\22, (long long)i, (long long)len);\0A finch_panic(file, line, msg);\0A}\0A\0Astatic void *must(void *p) {\0A if (!p) {\0A fflush(stdout);\0A fatal(\22runtime error: out of memory\22);\0A }\0A return p;\0A}\0A\0Avoid *finch_alloc(int64_t n) { return must(malloc(n ? (size_t)n : 1)); }\0Avoid *finch_zalloc(int64_t n) { return must(calloc(1, n ? (size_t)n : 1)); }\0A\0A// ---------- strings ----------\0A\0Astatic void str_heap(FStr *out, const char *p, int64_t len) {\0A char *m = finch_alloc(len + 1);\0A if (len) memcpy(m, p, (size_t)len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void str_static(FStr *out, const char *lit) {\0A out->ptr = (char *)lit;\0A out->len = (int64_t)strlen(lit);\0A out->cap = 0;\0A}\0A\0A// A copy that can be kept: literals are shared, everything else is duplicated.\0Avoid finch_str_copy(FStr *out, const FStr *s) {\0A if (s->cap == 0) *out = *s;\0A else str_heap(out, s->ptr, s->len);\0A}\0A\0A// Make `s` writable (before s[i] = c).\0Avoid finch_str_own(FStr *s) {\0A if (s->cap > 0) return;\0A FStr t;\0A str_heap(&t, s->ptr, s->len);\0A *s = t;\0A}\0A\0Avoid finch_str_drop(FStr *s) {\0A if (s->cap > 0) free(s->ptr);\0A}\0A\0Avoid finch_str_from_c(FStr *out, const char *p) {\0A if (!p) {\0A str_static(out, empty);\0A return;\0A }\0A out->ptr = (char *)p;\0A out->len = (int64_t)strlen(p);\0A out->cap = -1;\0A}\0A\0Avoid finch_str_concat(FStr *out, const FStr *a, const FStr *b) {\0A int64_t len = a->len + b->len;\0A char *m = finch_alloc(len + 1);\0A memcpy(m, a->ptr, (size_t)a->len);\0A memcpy(m + a->len, b->ptr, (size_t)b->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Aint finch_str_eq(const FStr *a, const FStr *b) {\0A return a->len == b->len && memcmp(a->ptr, b->ptr, (size_t)a->len) == 0;\0A}\0A\0Aint64_t finch_str_cmp(const FStr *a, const FStr *b) {\0A int64_t n = a->len < b->len ? a->len : b->len;\0A int c = memcmp(a->ptr, b->ptr, (size_t)n);\0A if (c) return c < 0 ? -1 : 1;\0A return a->len < b->len ? -1 : a->len > b->len;\0A}\0A\0Avoid finch_str_from_int(FStr *out, int64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%lld\22, (long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_uint(FStr *out, uint64_t v) {\0A char buf[32];\0A int n = snprintf(buf, sizeof buf, \22%llu\22, (unsigned long long)v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_float(FStr *out, double v) {\0A char buf[64];\0A int n = snprintf(buf, sizeof buf, \22%g\22, v);\0A str_heap(out, buf, n);\0A}\0A\0Avoid finch_str_from_char(FStr *out, char c) { str_heap(out, &c, 1); }\0A\0Avoid finch_str_from_bool(FStr *out, int b) { str_static(out, b ? \22true\22 : \22false\22); }\0A\0Astatic void number_error(char *msg, size_t size, const FStr *s, const char *kind) {\0A snprintf(msg, size, \22can't turn \5C\22%.*s\5C\22 into %s\22, (int)(s->len > 100 ? 100 : s->len), s->ptr ? s->ptr : \22\22, kind);\0A}\0A\0Astatic int parse_int(const FStr *s, int64_t *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A errno = 0;\0A long long v = strtoll(p, &end, 10);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end || errno == ERANGE);\0A}\0A\0Astatic int parse_float(const FStr *s, double *out) {\0A const char *p = s->ptr ? s->ptr : \22\22;\0A while (isspace((unsigned char)*p)) p++;\0A char *end;\0A double v = strtod(p, &end);\0A while (isspace((unsigned char)*end)) end++;\0A *out = v;\0A return !(end == p || *end);\0A}\0A\0Aint64_t finch_str_to_int(const FStr *s, const char *file, int64_t line) {\0A int64_t v;\0A if (!parse_int(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0Adouble finch_str_to_float(const FStr *s, const char *file, int64_t line) {\0A double v;\0A if (!parse_float(s, &v)) {\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A finch_panic(file, line, msg);\0A }\0A return v;\0A}\0A\0A// ---------- errors as values: int(s) or 0, try read_file(p) ... ----------\0A// Each gives back 1 on success; on failure 0, with the message in *err.\0A\0Astatic void set_error(FStr *err, const char *msg) { str_heap(err, msg, (int64_t)strlen(msg)); }\0A\0Aint finch_str_try_int(const FStr *s, int64_t *out, FStr *err) {\0A if (parse_int(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22int\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Aint finch_str_try_float(const FStr *s, double *out, FStr *err) {\0A if (parse_float(s, out)) return 1;\0A char msg[200];\0A number_error(msg, sizeof msg, s, \22float\22);\0A set_error(err, msg);\0A *out = 0;\0A return 0;\0A}\0A\0Astatic void file_error(FStr *err, const char *what, const FStr *path) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't %s the file \5C\22%.*s\5C\22: %s\22, what, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr ? path->ptr : \22\22, strerror(errno));\0A set_error(err, msg);\0A}\0A\0A// when `fn main() -> !` fails\0Avoid finch_report_error(const FStr *msg) {\0A fflush(stdout);\0A fprintf(stderr, \22error: %.*s\5Cn\22, (int)msg->len, msg->ptr ? msg->ptr : \22\22);\0A}\0A\0Avoid finch_str_sub(FStr *out, const FStr *s, int64_t start, int64_t end, const char *file, int64_t line) {\0A if (start < 0 || end > s->len || start > end) {\0A char msg[160];\0A snprintf(msg, sizeof msg, \22sub(%lld, %lld) is out of range (the length is %lld)\22, (long long)start,\0A (long long)end, (long long)s->len);\0A finch_panic(file, line, msg);\0A }\0A str_heap(out, s->ptr + start, end - start);\0A}\0A\0Aint64_t finch_str_find(const FStr *s, const FStr *t) {\0A if (t->len == 0) return 0;\0A for (int64_t i = 0; i + t->len <= s->len; i++)\0A if (s->ptr[i] == t->ptr[0] && memcmp(s->ptr + i, t->ptr, (size_t)t->len) == 0) return i;\0A return -1;\0A}\0A\0Aint finch_str_starts(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Aint finch_str_ends(const FStr *s, const FStr *t) {\0A return t->len <= s->len && memcmp(s->ptr + s->len - t->len, t->ptr, (size_t)t->len) == 0;\0A}\0A\0Avoid finch_str_trim(FStr *out, const FStr *s) {\0A int64_t a = 0, b = s->len;\0A while (a < b && isspace((unsigned char)s->ptr[a])) a++;\0A while (b > a && isspace((unsigned char)s->ptr[b - 1])) b--;\0A str_heap(out, s->ptr + a, b - a);\0A}\0A\0Avoid finch_str_upper(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)toupper((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_lower(FStr *out, const FStr *s) {\0A str_heap(out, s->ptr, s->len);\0A for (int64_t i = 0; i < out->len; i++) out->ptr[i] = (char)tolower((unsigned char)out->ptr[i]);\0A}\0A\0Avoid finch_str_replace(FStr *out, const FStr *s, const FStr *from, const FStr *to) {\0A if (from->len == 0) {\0A str_heap(out, s->ptr, s->len);\0A return;\0A }\0A int64_t count = 0;\0A for (int64_t i = 0; i + from->len <= s->len;) {\0A if (memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A count++;\0A i += from->len;\0A } else {\0A i++;\0A }\0A }\0A int64_t len = s->len + count * (to->len - from->len);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < s->len;) {\0A if (i + from->len <= s->len && memcmp(s->ptr + i, from->ptr, (size_t)from->len) == 0) {\0A memcpy(w, to->ptr, (size_t)to->len);\0A w += to->len;\0A i += from->len;\0A } else {\0A *w++ = s->ptr[i++];\0A }\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len);\0A\0A// \22a,b,,c\22.split(\22,\22) -> [\22a\22, \22b\22, \22\22, \22c\22]; split(\22\22) gives single characters.\0Avoid finch_str_split(FArr *out, const FStr *s, const FStr *sep) {\0A out->ptr = NULL;\0A out->len = out->cap = 0;\0A if (sep->len == 0) {\0A for (int64_t i = 0; i < s->len; i++) arr_push_str(out, s->ptr + i, 1);\0A return;\0A }\0A int64_t start = 0;\0A for (int64_t i = 0; i + sep->len <= s->len;) {\0A if (memcmp(s->ptr + i, sep->ptr, (size_t)sep->len) == 0) {\0A arr_push_str(out, s->ptr + start, i - start);\0A i += sep->len;\0A start = i;\0A } else {\0A i++;\0A }\0A }\0A arr_push_str(out, s->ptr + start, s->len - start);\0A}\0A\0Avoid finch_str_join(FStr *out, const FArr *parts, const FStr *sep) {\0A const FStr *p = parts->ptr;\0A int64_t len = 0;\0A for (int64_t i = 0; i < parts->len; i++) len += p[i].len + (i ? sep->len : 0);\0A char *m = finch_alloc(len + 1), *w = m;\0A for (int64_t i = 0; i < parts->len; i++) {\0A if (i) {\0A memcpy(w, sep->ptr, (size_t)sep->len);\0A w += sep->len;\0A }\0A memcpy(w, p[i].ptr, (size_t)p[i].len);\0A w += p[i].len;\0A }\0A *w = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_repeat(FStr *out, const FStr *s, int64_t n) {\0A if (n < 0) n = 0;\0A int64_t len = s->len * n;\0A char *m = finch_alloc(len + 1);\0A for (int64_t i = 0; i < n; i++) memcpy(m + i * s->len, s->ptr, (size_t)s->len);\0A m[len] = 0;\0A out->ptr = m;\0A out->len = len;\0A out->cap = len + 1;\0A}\0A\0Avoid finch_str_from_bytes(FStr *out, const FArr *bytes) { str_heap(out, bytes->ptr, bytes->len); }\0A\0A// ---------- building text: print(x) and str(x) of arrays, maps and structs ----------\0A// A buffer starts as an empty str and grows on the heap.\0A\0Avoid finch_buf_add(FStr *b, const char *p, int64_t n) {\0A if (b->len + n + 1 > b->cap) {\0A int64_t cap = b->cap > 0 ? b->cap * 2 : 32;\0A while (cap < b->len + n + 1) cap *= 2;\0A b->ptr = must(realloc(b->cap > 0 ? b->ptr : NULL, (size_t)cap));\0A b->cap = cap;\0A }\0A if (n) memcpy(b->ptr + b->len, p, (size_t)n);\0A b->len += n;\0A b->ptr[b->len] = 0;\0A}\0A\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) __attribute__((format(printf, 2, 3)));\0Astatic void buf_fmt(FStr *b, const char *fmt, ...) {\0A char t[64];\0A va_list ap;\0A va_start(ap, fmt);\0A int n = vsnprintf(t, sizeof t, fmt, ap);\0A va_end(ap);\0A finch_buf_add(b, t, n);\0A}\0A\0Avoid finch_buf_int(FStr *b, int64_t v) { buf_fmt(b, \22%lld\22, (long long)v); }\0Avoid finch_buf_uint(FStr *b, uint64_t v) { buf_fmt(b, \22%llu\22, (unsigned long long)v); }\0Avoid finch_buf_float(FStr *b, double v) { buf_fmt(b, \22%g\22, v); }\0Avoid finch_buf_bool(FStr *b, int v) { finch_buf_add(b, v ? \22true\22 : \22false\22, v ? 4 : 5); }\0Avoid finch_buf_ptr(FStr *b, const void *p) {\0A if (p) buf_fmt(b, \220x%llx\22, (unsigned long long)(uintptr_t)p);\0A else finch_buf_add(b, \22null\22, 4);\0A}\0A\0Avoid finch_buf_char(FStr *b, char c, int quoted) {\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A finch_buf_add(b, &c, 1);\0A if (quoted) finch_buf_add(b, \22'\22, 1);\0A}\0A\0Avoid finch_buf_str(FStr *b, const FStr *s, int quoted) {\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A finch_buf_add(b, s->ptr, s->len);\0A if (quoted) finch_buf_add(b, \22\5C\22\22, 1);\0A}\0A\0A// print the buffer and free it\0Avoid finch_buf_print(FStr *b) {\0A if (b->len) fwrite(b->ptr, 1, (size_t)b->len, stdout);\0A if (b->cap > 0) free(b->ptr);\0A}\0A\0A// ---------- arrays ----------\0A\0Avoid finch_arr_reserve(FArr *a, int64_t need, int64_t es) {\0A if (need <= a->cap) return;\0A int64_t cap = a->cap * 2;\0A if (cap < 4) cap = 4;\0A if (cap < need) cap = need;\0A a->ptr = must(realloc(a->cap > 0 ? a->ptr : NULL, (size_t)(cap * es)));\0A a->cap = cap;\0A}\0A\0Avoid finch_arr_make(FArr *out, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A out->ptr = len ? finch_zalloc(len * es) : NULL;\0A out->len = len;\0A out->cap = len;\0A}\0A\0A// grow or shrink to `len`; new elements are zero\0Avoid finch_arr_resize(FArr *a, int64_t len, int64_t es) {\0A if (len < 0) len = 0;\0A finch_arr_reserve(a, len, es);\0A if (len > a->len) memset((char *)a->ptr + a->len * es, 0, (size_t)((len - a->len) * es));\0A a->len = len;\0A}\0A\0A// a byte-for-byte copy of the elements (the compiler deep-copies owning elements afterwards)\0Avoid finch_arr_clone_raw(FArr *out, const FArr *a, int64_t es) {\0A out->len = a->len;\0A out->cap = a->len;\0A out->ptr = a->len ? finch_alloc(a->len * es) : NULL;\0A if (a->len) memcpy(out->ptr, a->ptr, (size_t)(a->len * es));\0A}\0A\0Avoid finch_arr_free(FArr *a) {\0A if (a->cap > 0) free(a->ptr);\0A}\0A\0A// open a hole at i (0 <= i <= len), len grows by one\0Avoid finch_arr_insert_gap(FArr *a, int64_t i, int64_t es, const char *file, int64_t line) {\0A if (i < 0 || i > a->len) finch_panic_index(file, line, i, a->len);\0A finch_arr_reserve(a, a->len + 1, es);\0A char *p = a->ptr;\0A memmove(p + (i + 1) * es, p + i * es, (size_t)((a->len - i) * es));\0A a->len++;\0A}\0A\0A// close the hole at i (the element was already moved out), len shrinks by one\0Avoid finch_arr_remove_gap(FArr *a, int64_t i, int64_t es) {\0A char *p = a->ptr;\0A memmove(p + i * es, p + (i + 1) * es, (size_t)((a->len - i - 1) * es));\0A a->len--;\0A}\0A\0Astatic void arr_push_str(FArr *a, const char *p, int64_t len) {\0A finch_arr_reserve(a, a->len + 1, (int64_t)sizeof(FStr));\0A str_heap((FStr *)a->ptr + a->len, p, len);\0A a->len++;\0A}\0A\0Avoid finch_bytes_from_str(FArr *out, const FStr *s) {\0A out->len = out->cap = s->len;\0A out->ptr = s->len ? finch_alloc(s->len) : NULL;\0A if (s->len) memcpy(out->ptr, s->ptr, (size_t)s->len);\0A}\0A\0A// ---------- program arguments, input and files ----------\0A\0Avoid finch_args(FArr *out, int argc, char **argv) {\0A out->len = out->cap = argc;\0A out->ptr = finch_alloc((int64_t)sizeof(FStr) * (argc ? argc : 1));\0A for (int i = 0; i < argc; i++) str_heap((FStr *)out->ptr + i, argv[i], (int64_t)strlen(argv[i]));\0A}\0A\0A// input(\22Name? \22) prints the prompt and reads one line, without the newline.\0Avoid finch_input(FStr *out, const FStr *prompt) {\0A if (prompt->len) fwrite(prompt->ptr, 1, (size_t)prompt->len, stdout);\0A fflush(stdout);\0A // read one line of any length (getline isn't available everywhere)\0A size_t size = 128, n = 0;\0A char *line = finch_alloc((int64_t)size);\0A int c, got = 0;\0A while ((c = fgetc(stdin)) != EOF) {\0A got = 1;\0A if (c == '\5Cn') break;\0A if (n + 1 >= size) line = must(realloc(line, size *= 2));\0A line[n++] = (char)c;\0A }\0A if (!got) {\0A free(line);\0A str_static(out, empty);\0A return;\0A }\0A while (n > 0 && line[n - 1] == '\5Cr') n--;\0A line[n] = 0;\0A out->ptr = line;\0A out->len = (int64_t)n;\0A out->cap = (int64_t)size;\0A}\0A\0Aint finch_file_exists(const FStr *path) {\0A FILE *f = fopen(path->ptr, \22rb\22);\0A if (f) fclose(f);\0A return f != NULL;\0A}\0A\0Aint finch_try_read_file(FStr *out, const FStr *path, FStr *err) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A file_error(err, \22read\22, path);\0A return 0;\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A return 1;\0A}\0A\0Avoid finch_read_file(FStr *out, const FStr *path, const char *file, int64_t line) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22rb\22);\0A if (!f) {\0A char msg[300];\0A snprintf(msg, sizeof msg, \22can't read the file \5C\22%.*s\5C\22: %s\22, (int)(path->len > 200 ? 200 : path->len),\0A path->ptr, strerror(errno));\0A finch_panic(file, line, msg);\0A }\0A fseek(f, 0, SEEK_END);\0A long size = ftell(f);\0A fseek(f, 0, SEEK_SET);\0A char *m = finch_alloc(size + 1);\0A size_t got = fread(m, 1, (size_t)size, f);\0A fclose(f);\0A m[got] = 0;\0A out->ptr = m;\0A out->len = (int64_t)got;\0A out->cap = size + 1;\0A}\0A\0A// shell(\22ls -l\22): run a command, give back its exit code\0Aint64_t finch_shell(const FStr *cmd) {\0A fflush(stdout);\0A int status = system(cmd->ptr ? cmd->ptr : \22\22);\0A#ifdef _WIN32\0A return status; // Windows gives the exit code directly\0A#else\0A if (status == -1) return -1;\0A if (WIFEXITED(status)) return WEXITSTATUS(status);\0A return 128 + (WIFSIGNALED(status) ? WTERMSIG(status) : 0);\0A#endif\0A}\0A\0Aint finch_delete_file(const FStr *path) { return remove(path->ptr ? path->ptr : \22\22) == 0; }\0A\0Aint finch_try_delete_file(const FStr *path, FStr *err) {\0A if (remove(path->ptr ? path->ptr : \22\22) == 0) return 1;\0A file_error(err, \22delete\22, path);\0A return 0;\0A}\0A\0A// stdin/stdout/stderr are macros on some systems (Windows), so Finch asks for them here\0Avoid *finch_std_stream(int i) { return i == 0 ? (void *)stdin : i == 1 ? (void *)stdout : (void *)stderr; }\0A\0Aint finch_write_file(const FStr *path, const FStr *text) {\0A FILE *f = fopen(path->ptr ? path->ptr : \22\22, \22wb\22);\0A if (!f) return 0;\0A size_t put = text->len ? fwrite(text->ptr, 1, (size_t)text->len, f) : 0;\0A return fclose(f) == 0 && put == (size_t)text->len;\0A}\0A\0Aint finch_try_write_file(const FStr *path, const FStr *text, FStr *err) {\0A errno = 0;\0A if (finch_write_file(path, text)) return 1;\0A if (!errno) errno = EIO;\0A file_error(err, \22write\22, path);\0A return 0;\0A}\0A\0A// ---------- maps ----------\0A// map[K]V = { entries; len; used; cap; index; icap; adds }\0A// entries: `used` slots of es bytes, each { uint64 hash; K key; V value }, in insertion order.\0A// A removed entry keeps its slot (hash 0) until the next resize packs the slots.\0A// index: icap slots (a power of two, at least 2 * cap): -1 empty, -2 removed, else an entry number.\0A// adds: how many keys were ever added; a `for` over the map stops with an error if it changes.\0A// The compiler stores, copies and drops keys and values; the runtime only finds and places entries.\0A// Keys are compared byte for byte (numbers, chars, bools) or as text (kstr).\0A\0Atypedef struct {\0A char *entries;\0A int64_t len, used, cap;\0A int64_t *index;\0A int64_t icap;\0A int64_t adds;\0A} FMap;\0A\0Astatic uint64_t map_hash(const void *key, int64_t ks, int kstr) {\0A const unsigned char *p;\0A size_t n;\0A if (kstr) {\0A const FStr *s = key;\0A p = (const unsigned char *)s->ptr;\0A n = (size_t)s->len;\0A } else {\0A p = key;\0A n = (size_t)ks;\0A }\0A uint64_t h = 1469598103934665603ULL; // FNV-1a, then mixed so the low bits spread well\0A for (size_t i = 0; i < n; i++) {\0A h ^= p[i];\0A h *= 1099511628211ULL;\0A }\0A h ^= h >> 31;\0A h *= 0xbf58476d1ce4e5b9ULL;\0A h ^= h >> 29;\0A return h | 1; // 0 marks a removed entry\0A}\0A\0Astatic int map_key_eq(const char *a, const void *b, int64_t ks, int kstr) {\0A if (!kstr) return memcmp(a, b, (size_t)ks) == 0;\0A const FStr *x = (const FStr *)a, *y = b;\0A return x->len == y->len && (x->len == 0 || memcmp(x->ptr, y->ptr, (size_t)x->len) == 0);\0A}\0A\0Astatic void map_reindex(FMap *m, int64_t es) {\0A if (m->len != m->used) { // pack the slots of removed entries away\0A int64_t j = 0;\0A for (int64_t i = 0; i < m->used; i++) {\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == 0) continue;\0A if (i != j) memmove(m->entries + j * es, e, (size_t)es);\0A j++;\0A }\0A m->used = j;\0A }\0A int64_t icap = 16;\0A while (icap < m->cap * 2) icap *= 2;\0A free(m->index);\0A m->index = finch_alloc(icap * (int64_t)sizeof(int64_t));\0A memset(m->index, 0xff, (size_t)icap * sizeof(int64_t));\0A m->icap = icap;\0A for (int64_t i = 0; i < m->used; i++) {\0A uint64_t h = *(uint64_t *)(m->entries + i * es);\0A int64_t s = (int64_t)(h & (uint64_t)(icap - 1));\0A while (m->index[s] != -1) s = (s + 1) & (icap - 1);\0A m->index[s] = i;\0A }\0A}\0A\0A// the entry number of `key`, or -1\0Aint64_t finch_map_find(const FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr) {\0A if (m->len == 0) return -1;\0A uint64_t h = map_hash(key, ks, kstr);\0A for (int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));; s = (s + 1) & (m->icap - 1)) {\0A int64_t i = m->index[s];\0A if (i == -1) return -1;\0A if (i < 0) continue;\0A char *e = m->entries + i * es;\0A if (*(uint64_t *)e == h && map_key_eq(e + 8, key, ks, kstr)) return i;\0A }\0A}\0A\0A// The entry for `key`. A new one is zeroed except its hash (*added = 1); the compiler then stores the key.\0Aint64_t finch_map_slot(FMap *m, const void *key, int64_t es, int64_t ks, int32_t kstr, int32_t *added) {\0A int64_t i = finch_map_find(m, key, es, ks, kstr);\0A *added = i < 0;\0A if (i >= 0) return i;\0A if (m->used == m->cap) {\0A if (m->len * 4 < m->cap * 3) { // many removed slots: pack them instead of growing\0A map_reindex(m, es);\0A } else {\0A m->cap = m->cap ? m->cap * 2 : 8;\0A m->entries = must(realloc(m->entries, (size_t)(m->cap * es)));\0A map_reindex(m, es);\0A }\0A }\0A uint64_t h = map_hash(key, ks, kstr);\0A i = m->used++;\0A char *e = m->entries + i * es;\0A memset(e, 0, (size_t)es);\0A *(uint64_t *)e = h;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] >= 0) s = (s + 1) & (m->icap - 1);\0A m->index[s] = i;\0A m->len++;\0A m->adds++;\0A return i;\0A}\0A\0A// Forget entry i (its key and value were already dropped by the compiler).\0Avoid finch_map_remove_at(FMap *m, int64_t i, int64_t es) {\0A char *e = m->entries + i * es;\0A uint64_t h = *(uint64_t *)e;\0A int64_t s = (int64_t)(h & (uint64_t)(m->icap - 1));\0A while (m->index[s] != i) s = (s + 1) & (m->icap - 1);\0A m->index[s] = -2;\0A *(uint64_t *)e = 0;\0A if (--m->len == 0) {\0A m->used = 0;\0A memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A }\0A}\0A\0Avoid finch_map_clear(FMap *m) {\0A m->len = m->used = 0;\0A if (m->index) memset(m->index, 0xff, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0Avoid finch_map_free(FMap *m) {\0A free(m->entries);\0A free(m->index);\0A}\0A\0A// A copy of the slots and the index; the compiler then copies the keys and values that own memory.\0Avoid finch_map_clone_raw(FMap *out, const FMap *m, int64_t es) {\0A *out = *m;\0A if (!m->cap) return;\0A out->entries = finch_alloc(m->cap * es);\0A memcpy(out->entries, m->entries, (size_t)(m->used * es));\0A out->index = finch_alloc(m->icap * (int64_t)sizeof(int64_t));\0A memcpy(out->index, m->index, (size_t)m->icap * sizeof(int64_t));\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_changed(const char *file, int64_t line) {\0A finch_panic(file, line, \22a key was added to the map while looping over it (collect the new keys, and add them after the loop)\22);\0A}\0A\0A__attribute__((noreturn, cold)) void finch_map_missing(const char *file, int64_t line, const FStr *key) {\0A char msg[200];\0A snprintf(msg, sizeof msg, \22the key %.*s is not in the map (check with .has(key), or use .get(key, default))\22,\0A (int)(key->len > 100 ? 100 : key->len), key->ptr ? key->ptr : \22\22);\0A finch_panic(file, line, msg);\0A}\0A\00" +@.str.7570 = private unnamed_addr constant [12885 x i8] c"// JSON: read it, build it, write it.\0A//\0A// import json\0A//\0A// doc := try json.parse(\22{\5C\22name\5C\22: \5C\22Finch\5C\22, \5C\22tags\5C\22: [\5C\22fast\5C\22, \5C\22small\5C\22], \5C\22stars\5C\22: 5}\22)\0A// print(doc.get(\22name\22).str_or(\22\22)) Finch\0A// print(doc.get(\22tags\22).at(1).str_or(\22\22)) small\0A// print(doc.get(\22stars\22).int_or(0)) 5\0A// print(doc.get(\22missing\22).is_null()) true (a missing key is null, so chains never fail)\0A//\0A// out := json.new_object()\0A// out.set(\22ok\22, json.new_bool(true))\0A// list := json.new_list()\0A// list.push(json.new_number(1.5))\0A// out.set(\22values\22, list)\0A// print(json.stringify(out)) {\22ok\22:true,\22values\22:[1.5]}\0A// print(json.pretty(out)) the same, over several lines\0A\0Aenum Kind { Null, Bool, Number, Text, List, Object }\0A\0A// One JSON value. `kind` says which of the other fields it uses: flag for Bool, num for Number,\0A// text for Text, items for List, and items with keys (the same length, in the same order) for Object.\0Astruct Json {\0A Kind kind\0A bool flag\0A float num\0A str text\0A []Json items\0A []str keys\0A}\0A\0Afn new_null() -> Json {\0A return Json(kind: Kind.Null)\0A}\0A\0Afn new_bool(bool b) -> Json {\0A return Json(kind: Kind.Bool, flag: b)\0A}\0A\0Afn new_number(float n) -> Json {\0A return Json(kind: Kind.Number, num: n)\0A}\0A\0Afn new_text(str s) -> Json {\0A return Json(kind: Kind.Text, text: s)\0A}\0A\0Afn new_list() -> Json {\0A return Json(kind: Kind.List)\0A}\0A\0Afn new_object() -> Json {\0A return Json(kind: Kind.Object)\0A}\0A\0A// ---------- looking inside ----------\0A\0Afn Json.is_null() -> bool {\0A return self.kind == Kind.Null\0A}\0A\0A// the number of elements of a list, of keys of an object, of bytes of a text; 0 for the rest\0Afn Json.len() -> int {\0A return match self.kind {\0A List, Object -> self.items.len\0A Text -> self.text.len\0A else -> 0\0A }\0A}\0A\0Afn Json.has(str key) -> bool {\0A return self.kind == Kind.Object && self.keys.contains(key)\0A}\0A\0A// the value of a key of an object; null if there is none (or this is not an object)\0Afn Json.get(str key) -> Json {\0A if self.kind != Kind.Object {\0A return new_null()\0A }\0A i := self.keys.find(key)\0A if i < 0 {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the element of a list; null if there is none\0Afn Json.at(int i) -> Json {\0A if self.kind != Kind.List || i < 0 || i >= self.items.len {\0A return new_null()\0A }\0A return self.items[i]\0A}\0A\0A// the value if it is of that kind, else what was given\0Afn Json.str_or(str fallback) -> str {\0A if self.kind == Kind.Text {\0A return self.text\0A }\0A return fallback\0A}\0A\0Afn Json.float_or(float fallback) -> float {\0A if self.kind == Kind.Number {\0A return self.num\0A }\0A return fallback\0A}\0A\0Afn Json.int_or(int fallback) -> int {\0A if self.kind == Kind.Number {\0A return int(self.num)\0A }\0A return fallback\0A}\0A\0Afn Json.bool_or(bool fallback) -> bool {\0A if self.kind == Kind.Bool {\0A return self.flag\0A }\0A return fallback\0A}\0A\0A// the keys of an object, in the order they were written\0Afn Json.names() -> []str {\0A return self.keys\0A}\0A\0A// ---------- building ----------\0A\0A// add to the end of a list\0Afn Json.push(Json v) {\0A self.items.push(v)\0A}\0A\0A// give a key a value in an object; a key that is already there is replaced\0Afn Json.set(str key, Json v) {\0A i := self.keys.find(key)\0A if i >= 0 {\0A self.items[i] = v\0A return\0A }\0A self.keys.push(key)\0A self.items.push(v)\0A}\0A\0A// ---------- writing ----------\0A\0Afn quote(str s) -> str {\0A []str parts = [\22\5C\22\22]\0A for c in s {\0A n := int(c)\0A if c == '\22' {\0A parts.push(\22\5C\5C\5C\22\22)\0A } else if c == '\5C\5C' {\0A parts.push(\22\5C\5C\5C\5C\22)\0A } else if c == '\5Cn' {\0A parts.push(\22\5C\5Cn\22)\0A } else if c == '\5Cr' {\0A parts.push(\22\5C\5Cr\22)\0A } else if c == '\5Ct' {\0A parts.push(\22\5C\5Ct\22)\0A } else if n < 32 {\0A parts.push(\22\5C\5Cu00\22 + hexdigit(n / 16) + hexdigit(n % 16))\0A } else {\0A parts.push(str(c))\0A }\0A }\0A parts.push(\22\5C\22\22)\0A return parts.join(\22\22)\0A}\0A\0Afn hexdigit(int n) -> str {\0A digits := \220123456789abcdef\22\0A return str(digits[n])\0A}\0A\0Afn number_text(float n) -> str {\0A if n == float(int(n)) && n > -1000000000000000.0 && n < 1000000000000000.0 {\0A return str(int(n))\0A }\0A return str(n)\0A}\0A\0Astruct Writer {\0A []str out\0A}\0A\0Afn write(Json j, str indent, str pad, ptr[Writer] w) {\0A nl := \22\22\0A inner := \22\22\0A sep := \22,\22\0A colon := \22:\22\0A if indent.len > 0 {\0A nl = \22\5Cn\22\0A inner = pad + indent\0A colon = \22: \22\0A }\0A match j.kind {\0A Null -> w.out.push(\22null\22)\0A Bool -> {\0A if j.flag {\0A w.out.push(\22true\22)\0A } else {\0A w.out.push(\22false\22)\0A }\0A }\0A Number -> w.out.push(number_text(j.num))\0A Text -> w.out.push(quote(j.text))\0A List -> {\0A if j.items.len == 0 {\0A w.out.push(\22[]\22)\0A return\0A }\0A w.out.push(\22[\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22]\22)\0A }\0A Object -> {\0A if j.items.len == 0 {\0A w.out.push(\22{}\22)\0A return\0A }\0A w.out.push(\22{\22 + nl)\0A for i, item in j.items {\0A if i > 0 {\0A w.out.push(sep + nl)\0A }\0A w.out.push(inner + quote(j.keys[i]) + colon)\0A write(item, indent, inner, w)\0A }\0A w.out.push(nl + pad + \22}\22)\0A }\0A }\0A}\0A\0A// the value as text on one line\0Afn stringify(Json j) -> str {\0A w := Writer()\0A write(j, \22\22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// the value as text over several lines, indented by two spaces\0Afn pretty(Json j) -> str {\0A w := Writer()\0A write(j, \22 \22, \22\22, addr(w))\0A return w.out.join(\22\22)\0A}\0A\0A// ---------- reading ----------\0A\0Astruct Reader {\0A str src\0A int i\0A}\0A\0A// the line and column of a position, for a message\0Afn where(ptr[Reader] r) -> str {\0A line := 1\0A col := 1\0A for k in 0..r.i {\0A if k < r.src.len && r.src[k] == '\5Cn' {\0A line += 1\0A col = 1\0A } else {\0A col += 1\0A }\0A }\0A return \22line \22 + str(line) + \22, column \22 + str(col)\0A}\0A\0Afn peek(ptr[Reader] r) -> char {\0A if r.i < r.src.len {\0A return r.src[r.i]\0A }\0A return char(0)\0A}\0A\0Afn skip_space(ptr[Reader] r) {\0A while r.i < r.src.len && (r.src[r.i] == ' ' || r.src[r.i] == '\5Cn' || r.src[r.i] == '\5Ct' || r.src[r.i] == '\5Cr') {\0A r.i += 1\0A }\0A}\0A\0Afn unexpected(ptr[Reader] r, str wanted) -> str {\0A if r.i >= r.src.len {\0A return \22json: the text ends where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A }\0A return \22json: found '\22 + str(r.src[r.i]) + \22' where \22 + wanted + \22 should be (\22 + where(r) + \22)\22\0A}\0A\0A// does `word` come next?\0Afn comes(ptr[Reader] r, str word) -> bool {\0A return r.src.len - r.i >= word.len && r.src.sub(r.i, r.i + word.len) == word\0A}\0A\0Afn expect_word(ptr[Reader] r, str word) -> ! {\0A if !comes(r, word) {\0A return error(unexpected(r, \22'\22 + word + \22'\22))\0A }\0A r.i += word.len\0A}\0A\0Afn hex_value(char c) -> int {\0A if c >= '0' && c <= '9' {\0A return int(c) - int('0')\0A }\0A if c >= 'a' && c <= 'f' {\0A return int(c) - int('a') + 10\0A }\0A if c >= 'A' && c <= 'F' {\0A return int(c) - int('A') + 10\0A }\0A return -1\0A}\0A\0A// a code point as UTF-8\0Afn utf8(int cp) -> str {\0A []u8 b\0A if cp < 128 {\0A b.push(u8(cp))\0A } else if cp < 2048 {\0A b.push(u8(192 + cp / 64))\0A b.push(u8(128 + cp % 64))\0A } else if cp < 65536 {\0A b.push(u8(224 + cp / 4096))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A } else {\0A b.push(u8(240 + cp / 262144))\0A b.push(u8(128 + (cp / 4096) % 64))\0A b.push(u8(128 + (cp / 64) % 64))\0A b.push(u8(128 + cp % 64))\0A }\0A return str(b)\0A}\0A\0Afn read_hex4(ptr[Reader] r) -> int! {\0A n := 0\0A for k in 0..4 {\0A if r.i >= r.src.len || hex_value(r.src[r.i]) < 0 {\0A return error(unexpected(r, \22a hexadecimal digit\22))\0A }\0A n = n * 16 + hex_value(r.src[r.i])\0A r.i += 1\0A }\0A return n\0A}\0A\0Afn read_string(ptr[Reader] r) -> str! {\0A r.i += 1 // the opening quote\0A []str parts\0A start := r.i\0A while true {\0A if r.i >= r.src.len {\0A return error(\22json: a text is never closed (\22 + where(r) + \22)\22)\0A }\0A c := r.src[r.i]\0A if c == '\22' {\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A return parts.join(\22\22)\0A }\0A if int(c) < 32 {\0A return error(\22json: a line break or control character inside a text (\22 + where(r) + \22)\22)\0A }\0A if c != '\5C\5C' {\0A r.i += 1\0A continue\0A }\0A parts.push(r.src.sub(start, r.i))\0A r.i += 1\0A e := peek(r)\0A r.i += 1\0A if e == 'n' {\0A parts.push(\22\5Cn\22)\0A } else if e == 't' {\0A parts.push(\22\5Ct\22)\0A } else if e == 'r' {\0A parts.push(\22\5Cr\22)\0A } else if e == 'b' {\0A parts.push(utf8(8))\0A } else if e == 'f' {\0A parts.push(utf8(12))\0A } else if e == '\22' || e == '\5C\5C' || e == '/' {\0A parts.push(str(e))\0A } else if e == 'u' {\0A cp := try read_hex4(r)\0A // a pair of \F0\9F\98\80 stands for one character above U+FFFF\0A if cp >= 55296 && cp < 56320 && comes(r, \22\5C\5Cu\22) {\0A r.i += 2\0A low := try read_hex4(r)\0A cp = 65536 + (cp - 55296) * 1024 + (low - 56320)\0A }\0A parts.push(utf8(cp))\0A } else {\0A return error(\22json: unknown escape \5C\5C\22 + str(e) + \22 in a text (\22 + where(r) + \22)\22)\0A }\0A start = r.i\0A }\0A}\0A\0Afn read_number(ptr[Reader] r) -> Json! {\0A start := r.i\0A if peek(r) == '-' {\0A r.i += 1\0A }\0A while r.i < r.src.len && ((r.src[r.i] >= '0' && r.src[r.i] <= '9') || r.src[r.i] == '.' || r.src[r.i] == 'e' || r.src[r.i] == 'E' || r.src[r.i] == '+' || r.src[r.i] == '-') {\0A r.i += 1\0A }\0A n := float(r.src.sub(start, r.i)) or {\0A r.i = start\0A return error(unexpected(r, \22a number\22))\0A }\0A return new_number(n)\0A}\0A\0Afn read_value(ptr[Reader] r) -> Json! {\0A skip_space(r)\0A c := peek(r)\0A if r.i >= r.src.len {\0A return error(unexpected(r, \22a value\22))\0A }\0A if c == '{' {\0A obj := new_object()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A while true {\0A skip_space(r)\0A if peek(r) != '\22' {\0A return error(unexpected(r, \22a key in quotes\22))\0A }\0A key := try read_string(r)\0A skip_space(r)\0A if peek(r) != ':' {\0A return error(unexpected(r, \22':'\22))\0A }\0A r.i += 1\0A v := try read_value(r)\0A obj.set(key, v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == '}' {\0A r.i += 1\0A return obj\0A }\0A return error(unexpected(r, \22',' or '}'\22))\0A }\0A }\0A if c == '[' {\0A list := new_list()\0A r.i += 1\0A skip_space(r)\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A while true {\0A v := try read_value(r)\0A list.push(v)\0A skip_space(r)\0A if peek(r) == ',' {\0A r.i += 1\0A continue\0A }\0A if peek(r) == ']' {\0A r.i += 1\0A return list\0A }\0A return error(unexpected(r, \22',' or ']'\22))\0A }\0A }\0A if c == '\22' {\0A s := try read_string(r)\0A return new_text(s)\0A }\0A if c == 't' {\0A try expect_word(r, \22true\22)\0A return new_bool(true)\0A }\0A if c == 'f' {\0A try expect_word(r, \22false\22)\0A return new_bool(false)\0A }\0A if c == 'n' {\0A try expect_word(r, \22null\22)\0A return new_null()\0A }\0A if c == '-' || (c >= '0' && c <= '9') {\0A return try read_number(r)\0A }\0A return error(unexpected(r, \22a value\22))\0A}\0A\0A// the JSON in `text`; an error with the line and column where it went wrong\0Afn parse(str text) -> Json! {\0A r := Reader(src: text)\0A v := try read_value(addr(r))\0A skip_space(addr(r))\0A if r.i < r.src.len {\0A return error(unexpected(addr(r), \22the end of the text\22))\0A }\0A return v\0A}\0A\00" +@.str.7571 = private unnamed_addr constant [2847 x i8] c"// Paths, as text. Elements are separated by \22/\22.\0A//\0A// import path\0A// path.join(\22a\22, \22b.txt\22) a/b.txt\0A// path.base(\22/tmp/x/a.tar.gz\22) a.tar.gz path.stem(...) a.tar path.ext(...) .gz\0A// path.dir(\22/tmp/x/a.txt\22) /tmp/x\0A// path.clean(\22a//b/../c/./d\22) a/c/d\0A\0A// a and b with one separator between; an absolute b replaces a\0Afn join(str a, str b) -> str {\0A if a.len == 0 {\0A return b\0A }\0A if b.len == 0 {\0A return a\0A }\0A if b[0] == '/' {\0A return b\0A }\0A if a[a.len - 1] == '/' {\0A return a + b\0A }\0A return a + \22/\22 + b\0A}\0A\0Afn is_abs(str p) -> bool {\0A return p.len > 0 && p[0] == '/'\0A}\0A\0A// the last element: \22a/b.txt\22 -> \22b.txt\22, \22a/b/\22 -> \22b\22, \22\22 -> \22.\22, \22/\22 -> \22/\22\0Afn base(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A if end == 1 && p[0] == '/' {\0A return \22/\22\0A }\0A start := end\0A while start > 0 && p[start - 1] != '/' {\0A start -= 1\0A }\0A return p.sub(start, end)\0A}\0A\0A// everything before the last element: \22a/b.txt\22 -> \22a\22, \22b.txt\22 -> \22.\22, \22/b\22 -> \22/\22\0Afn dir(str p) -> str {\0A end := p.len\0A while end > 1 && p[end - 1] == '/' {\0A end -= 1\0A }\0A i := end\0A while i > 0 && p[i - 1] != '/' {\0A i -= 1\0A }\0A if i == 0 {\0A return \22.\22\0A }\0A while i > 1 && p[i - 1] == '/' {\0A i -= 1\0A }\0A return p.sub(0, i)\0A}\0A\0A// the part of the last element from its last dot: \22a.tar.gz\22 -> \22.gz\22; \22\22 when there is none\0Afn ext(str p) -> str {\0A b := base(p)\0A i := b.len\0A while i > 0 && b[i - 1] != '.' {\0A i -= 1\0A }\0A if i <= 1 { // no dot, or a name that only starts with one (.bashrc)\0A return \22\22\0A }\0A return b.sub(i - 1, b.len)\0A}\0A\0A// the last element without its extension\0Afn stem(str p) -> str {\0A b := base(p)\0A e := ext(p)\0A return b.sub(0, b.len - e.len)\0A}\0A\0A// the elements of a path: \22/a/b/c\22 -> [\22a\22, \22b\22, \22c\22]\0Afn parts(str p) -> []str {\0A []str out\0A for piece in p.split(\22/\22) {\0A if piece.len > 0 {\0A out.push(piece)\0A }\0A }\0A return out\0A}\0A\0A// the shortest path with the same meaning: no \22//\22, no \22.\22, and \22..\22 resolved where it can be\0Afn clean(str p) -> str {\0A if p.len == 0 {\0A return \22.\22\0A }\0A abs := is_abs(p)\0A []str out\0A for piece in parts(p) {\0A if piece == \22.\22 {\0A continue\0A }\0A if piece == \22..\22 {\0A if out.len > 0 && out[out.len - 1] != \22..\22 {\0A out.pop()\0A } else if !abs {\0A out.push(\22..\22)\0A }\0A continue\0A }\0A out.push(piece)\0A }\0A joined := out.join(\22/\22)\0A if abs {\0A return \22/\22 + joined\0A }\0A if joined.len == 0 {\0A return \22.\22\0A }\0A return joined\0A}\0A\00" +@.str.7572 = private unnamed_addr constant [1407 x i8] c"// Programs: run a command, read what it printed, look at the environment.\0A//\0A// import proc\0A// code := proc.run(\22make\22) the exit code; what the command prints goes to the screen\0A// text := try proc.output(\22git describe\22) what the command printed; an error if it failed\0A// proc.env(\22HOME\22, \22/\22) an environment variable, or the second value if it is not set\0Aimport \22stdlib.h\22\0Aimport \22unistd.h\22\0Aimport \22time.h\22\0A\0A// run a command; its output goes to the screen. Gives its exit code.\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0A// run a command and give what it printed. Fails, with its output as the message, if it exits with an error.\0Afn output(str command) -> str! {\0A tmp := \22/tmp/finch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(\22(\22 + command + \22) > '\22 + tmp + \22' 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0A// the folder the program is running in\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7573 = private unnamed_addr constant [996 x i8] c"// Programs, for Windows. The same functions as proc.fch (that file is for Linux and macOS).\0Aimport \22stdlib.h\22\0Aimport \22process.h\22\0Aimport \22direct.h\22\0Aimport \22time.h\22\0A\0Afn run(str command) -> int {\0A return shell(command)\0A}\0A\0Afn output(str command) -> str! {\0A tmp := proc_env(\22TEMP\22, \22.\22) + \22\5C\5Cfinch_out_\22 + str(getpid()) + \22_\22 + str(int(time(null)))\0A code := shell(command + \22 > \5C\22\22 + tmp + \22\5C\22 2>&1\22)\0A text := read_file(tmp) or \22\22\0A delete_file(tmp)\0A if code != 0 {\0A return error(\22'\22 + command + \22' exited with code \22 + str(code) + \22: \22 + text.trim())\0A }\0A return text\0A}\0A\0Afn proc_env(str name, str fallback) -> str {\0A v := getenv(name)\0A if v.len == 0 {\0A return fallback\0A }\0A return v\0A}\0A\0Afn env(str name, str fallback) -> str {\0A return proc_env(name, fallback)\0A}\0A\0Afn pid() -> int {\0A return int(getpid())\0A}\0A\0Afn cwd() -> str {\0A []char buf\0A for i in 0..4096 {\0A buf.push(char(0))\0A }\0A getcwd(buf.ptr, 4096)\0A return str(buf.ptr)\0A}\0A\00" +@.str.7574 = private unnamed_addr constant [2540 x i8] c"// Time: the clock, sleeping, and dates.\0A//\0A// import time\0A// start := time.millis() milliseconds from a clock that only goes forward (to measure with)\0A// time.sleep(250) wait a quarter of a second\0A// time.now() seconds since 1970-01-01 00:00 UTC\0A// d := time.date(time.now()) the parts: d.year, d.month, d.day, d.hour, d.minute, d.second\0A// time.format(time.now(), \22%Y-%m-%d %H:%M\22) as text, in the computer's time zone\0Aimport \22time.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0A// seconds since 1970-01-01 00:00 UTC\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward: for measuring how long something took\0Afn millis() -> int {\0A timespec ts\0A clock_gettime(CLOCK_MONOTONIC, addr(ts))\0A return int(ts.tv_sec) * 1000 + int(ts.tv_nsec) / 1000000\0A}\0A\0Afn sleep(int ms) {\0A timespec ts\0A ts.tv_sec = ms / 1000\0A ts.tv_nsec = (ms % 1000) * 1000000\0A nanosleep(addr(ts), null)\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0A// the date and time of a moment, in UTC\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A gmtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// the date and time of a moment, in the computer's time zone\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A return parts(t)\0A}\0A\0A// a moment as text, in the computer's time zone: %Y year, %m month, %d day, %H hour, %M minute, %S second\0A// (the rest of C's strftime works too: %A weekday name, %B month name, ...)\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A localtime_r(addr(stamp), addr(t))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0A// the number of days in a month (month is 1 to 12)\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7575 = private unnamed_addr constant [1793 x i8] c"// Time, for Windows. The same functions as time.fch (that file is for Linux and macOS).\0Aimport \22time.h\22\0Aimport \22finch_win.h\22\0A\0Astruct Date {\0A int year\0A int month // 1 to 12\0A int day // 1 to 31\0A int hour\0A int minute\0A int second\0A int weekday // 0 is Sunday\0A int yearday // 1 to 366\0A}\0A\0Afn now() -> int {\0A return int(time(null))\0A}\0A\0A// milliseconds on a clock that only goes forward (the performance counter: GetTickCount64 ticks every 15 ms)\0Afn millis() -> int {\0A i64 count = 0\0A i64 freq = 1\0A QueryPerformanceFrequency(addr(freq))\0A QueryPerformanceCounter(addr(count))\0A return int(count / freq) * 1000 + int(count % freq) * 1000 / int(freq)\0A}\0A\0Afn sleep(int ms) {\0A Sleep(u32(ms))\0A}\0A\0Afn parts(tm t) -> Date {\0A return Date(year: int(t.tm_year) + 1900, month: int(t.tm_mon) + 1, day: int(t.tm_mday), hour: int(t.tm_hour),\0A minute: int(t.tm_min), second: int(t.tm_sec), weekday: int(t.tm_wday), yearday: int(t.tm_yday) + 1)\0A}\0A\0Afn date(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _gmtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn local(int unix) -> Date {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A return parts(t)\0A}\0A\0Afn format(int unix, str pattern) -> str {\0A tm t\0A i64 stamp = unix\0A _localtime64_s(addr(t), addr(stamp))\0A []char buf\0A for i in 0..256 {\0A buf.push(char(0))\0A }\0A strftime(buf.ptr, 256, pattern, addr(t))\0A return str(buf.ptr)\0A}\0A\0Afn days_in_month(int year, int month) -> int {\0A if month == 2 {\0A if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) {\0A return 29\0A }\0A return 28\0A }\0A if month == 4 || month == 6 || month == 9 || month == 11 {\0A return 30\0A }\0A return 31\0A}\0A\00" +@.str.7576 = private unnamed_addr constant [366 x i8] c"/* The Windows functions std/time_windows.fch needs. Declared here, not by including :\0A libclang can't parse that header with MinGW's intrinsics. Both are in kernel32. */\0Aunsigned long long GetTickCount64(void);\0Avoid Sleep(unsigned long milliseconds);\0Aint QueryPerformanceCounter(long long *count);\0Aint QueryPerformanceFrequency(long long *frequency);\0A\00" + +declare void @finch_panic(ptr, i64, ptr) noreturn cold +declare void @finch_panic_index(ptr, i64, i64, i64) noreturn cold +declare ptr @finch_alloc(i64) +declare void @finch_str_copy(ptr, ptr) +declare void @finch_str_drop(ptr) +declare void @finch_arr_free(ptr) +declare void @finch_map_free(ptr) +declare void @finch_str_own(ptr) +declare void @finch_str_concat(ptr, ptr, ptr) +declare i32 @finch_str_eq(ptr, ptr) +declare i64 @finch_str_cmp(ptr, ptr) +declare void @finch_buf_add(ptr, ptr, i64) +declare void @finch_buf_int(ptr, i64) +declare void @finch_buf_uint(ptr, i64) +declare void @finch_buf_float(ptr, double) +declare void @finch_buf_bool(ptr, i32) +declare void @finch_buf_ptr(ptr, ptr) +declare void @finch_buf_char(ptr, i8, i32) +declare void @finch_buf_str(ptr, ptr, i32) +declare void @finch_buf_print(ptr) +declare void @finch_str_from_int(ptr, i64) +declare void @finch_str_from_uint(ptr, i64) +declare void @finch_str_from_float(ptr, double) +declare void @finch_str_from_char(ptr, i8 signext) +declare void @finch_str_from_bool(ptr, i32) +declare i64 @finch_str_to_int(ptr, ptr, i64) +declare double @finch_str_to_float(ptr, ptr, i64) +declare void @finch_str_sub(ptr, ptr, i64, i64, ptr, i64) +declare i64 @finch_str_find(ptr, ptr) +declare i32 @finch_str_starts(ptr, ptr) +declare i32 @finch_str_ends(ptr, ptr) +declare void @finch_str_trim(ptr, ptr) +declare void @finch_str_upper(ptr, ptr) +declare void @finch_str_lower(ptr, ptr) +declare void @finch_str_replace(ptr, ptr, ptr, ptr) +declare void @finch_str_split(ptr, ptr, ptr) +declare void @finch_str_join(ptr, ptr, ptr) +declare void @finch_str_repeat(ptr, ptr, i64) +declare void @finch_bytes_from_str(ptr, ptr) +declare i64 @finch_map_find(ptr, ptr, i64, i64, i32) +declare i64 @finch_map_slot(ptr, ptr, i64, i64, i32, ptr) +declare void @finch_map_remove_at(ptr, i64, i64) +declare void @finch_map_clear(ptr) +declare void @finch_map_clone_raw(ptr, ptr, i64) +declare void @finch_map_missing(ptr, i64, ptr) noreturn cold +declare void @finch_map_changed(ptr, i64) noreturn cold +declare void @finch_arr_reserve(ptr, i64, i64) +declare void @finch_arr_clone_raw(ptr, ptr, i64) +declare void @finch_arr_make(ptr, i64, i64) +declare void @finch_arr_resize(ptr, i64, i64) +declare void @finch_arr_insert_gap(ptr, i64, i64, ptr, i64) +declare void @finch_arr_remove_gap(ptr, i64, i64) +declare void @qsort(ptr, i64, i64, ptr) +declare void @finch_args(ptr, i32, ptr) +declare void @finch_input(ptr, ptr) +declare i32 @finch_file_exists(ptr) +declare i32 @finch_str_try_int(ptr, ptr, ptr) +declare i32 @finch_str_try_float(ptr, ptr, ptr) +declare i32 @finch_try_read_file(ptr, ptr, ptr) +declare i32 @finch_try_write_file(ptr, ptr, ptr) +declare i32 @finch_try_delete_file(ptr, ptr) +declare void @finch_report_error(ptr) +declare void @finch_read_file(ptr, ptr, ptr, i64) +declare i32 @finch_write_file(ptr, ptr) +declare i64 @finch_shell(ptr) +declare i32 @finch_delete_file(ptr) +declare i32 @printf(ptr, ...) +declare i32 @fflush(ptr) +declare void @finch_str_from_c(ptr, ptr) +declare void @finch_on_fatal(ptr) +declare ptr @finch_std_stream(i32) +declare void @finch_str_from_bytes(ptr, ptr) +declare void @exit(i32) noreturn +declare void @free(ptr) + +define internal { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = sub i64 %t3, 1 + store i64 %t4, ptr %a5 + br label %while.cond1 +while.cond1: + %t6 = load i64, ptr %a5 + %t7 = icmp sge i64 %t6, 0 + br label %logic.from4 +logic.from4: + br i1 %t7, label %logic.rhs5, label %logic.end6 +logic.rhs5: + %t8 = load i64, ptr %a5 + %t9 = load { ptr, i64, i64 }, ptr %a1 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range7, label %inrange8 +range7: + call void @finch_panic_index(ptr @.str.1, i64 22, i64 %t8, i64 %t10) + unreachable +inrange8: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 + %t14 = load i8, ptr %t13 + %t15 = icmp ne i8 %t14, 47 + br label %logic.rend9 +logic.rend9: + br label %logic.end6 +logic.end6: + %t16 = phi i1 [ false, %logic.from4 ], [ %t15, %logic.rend9 ] + br i1 %t16, label %while.body2, label %while.end3 +while.body2: + %t17 = load i64, ptr %a5 + %t18 = sub i64 %t17, 1 + store i64 %t18, ptr %a5 + br label %while.cond1 +while.end3: + %t19 = load i64, ptr %a5 + %t20 = icmp slt i64 %t19, 0 + br i1 %t20, label %then10, label %endif12 +then10: + ret { ptr, i64, i64 } { ptr @.str.2, i64 1, i64 0 } +endif12: + %t21 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t21, ptr %a22 + %t24 = load i64, ptr %a5 + call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.3, i64 28) + %t25 = load { ptr, i64, i64 }, ptr %a23 + ret { ptr, i64, i64 } %t25 +} + +define internal { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca i64, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + %t5 = load { ptr, i64, i64 }, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t5) + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + store { ptr, i64, i64 } %t6, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = add i64 %t7, 1 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t11 = load i64, ptr %t10 + call void @finch_str_sub(ptr %a4, ptr %a3, i64 %t9, i64 %t11, ptr @.str.4, i64 32) + %t12 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load { ptr, i64, i64 }, ptr %a1 + %t15 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t14) + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.5, i64 1, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + br label %logic.from13 +logic.from13: + br i1 %t19, label %logic.rhs14, label %logic.end15 +logic.rhs14: + %t21 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.7, i64 2, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_starts(ptr %a22, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + %t27 = xor i1 %t26, true + br label %logic.rend16 +logic.rend16: + br label %logic.end15 +logic.end15: + %t28 = phi i1 [ false, %logic.from13 ], [ %t27, %logic.rend16 ] + br i1 %t28, label %then17, label %endif19 +then17: + %t29 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_copy(ptr %a31, ptr %a30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + %t33 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t32, ptr %a13 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_drop(ptr %a34) + br label %endif19 +endif19: + %t35 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.9, i64 1, i64 0 }, ptr %a38 + %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) + store i64 %t39, ptr %a40 + %t41 = load i64, ptr %a40 + %t42 = icmp sgt i64 %t41, 0 + br i1 %t42, label %then20, label %endif22 +then20: + %t43 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t43, ptr %a44 + %t46 = load i64, ptr %a40 + call void @finch_str_sub(ptr %a45, ptr %a44, i64 0, i64 %t46, ptr @.str.10, i64 38) + %t47 = load { ptr, i64, i64 }, ptr %a45 + call void @finch_str_drop(ptr %a13) + ret { ptr, i64, i64 } %t47 +endif22: + %t48 = load { ptr, i64, i64 }, ptr %a13 + ret { ptr, i64, i64 } %t48 +} + +define internal { ptr, i64, i64 } @finch.main.textOfFile(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i64, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic23, label %ok24 +panic23: + call void @finch_panic(ptr @.str.11, i64 55, ptr @.str.12) + unreachable +ok24: + %t5 = getelementptr inbounds %S.main.Loader, ptr %t3, i32 0, i32 6 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a8 + %t9 = load i64, ptr %t6 + %t10 = load ptr, ptr %t5 + store i64 0, ptr %a11 + br label %find.cond25 +find.cond25: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t9 + br i1 %t13, label %find.body26, label %find.end29 +find.body26: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } %t7, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %find.hit27, label %find.next28 +find.hit27: + store i64 %t12, ptr %a8 + br label %find.end29 +find.next28: + %t20 = add i64 %t12, 1 + store i64 %t20, ptr %a11 + br label %find.cond25 +find.end29: + %t21 = load i64, ptr %a8 + store i64 %t21, ptr %a22 + %t23 = load i64, ptr %a22 + %t24 = icmp sge i64 %t23, 0 + br i1 %t24, label %then30, label %endif32 +then30: + %t25 = load ptr, ptr %a1 + %t26 = icmp eq ptr %t25, null + br i1 %t26, label %panic33, label %ok34 +panic33: + call void @finch_panic(ptr @.str.13, i64 57, ptr @.str.14) + unreachable +ok34: + %t27 = getelementptr inbounds %S.main.Loader, ptr %t25, i32 0, i32 7 + %t28 = load i64, ptr %a22 + %t29 = load { ptr, i64, i64 }, ptr %t27 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range35, label %inrange36 +range35: + call void @finch_panic_index(ptr @.str.15, i64 57, i64 %t28, i64 %t30) + unreachable +inrange36: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 %t28 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_read_file(ptr %a36, ptr %a35, ptr @.str.16, i64 57) + %t37 = load { ptr, i64, i64 }, ptr %a36 + ret { ptr, i64, i64 } %t37 +endif32: + %t38 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_read_file(ptr %a40, ptr %a39, ptr @.str.17, i64 59) + %t41 = load { ptr, i64, i64 }, ptr %a40 + ret { ptr, i64, i64 } %t41 +} + +define internal { ptr, i64, i64 } @finch.main.findModule(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca i64, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t4) + store { ptr, i64, i64 } %t5, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.18, i64 1, i64 0 }, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t5, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + %t11 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t10, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t10, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.19, i64 4, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t21, ptr %a22 + %t23 = load { ptr, i64, i64 }, ptr %a2 + %t24 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t23) + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.20, i64 1, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t29, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.21, i64 1, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic37, label %ok38 +panic37: + call void @finch_panic(ptr @.str.22, i64 67, ptr @.str.23) + unreachable +ok38: + %t43 = getelementptr inbounds %S.main.Loader, ptr %t41, i32 0, i32 3 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t40, ptr %a46 + store { ptr, i64, i64 } %t44, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + store { ptr, i64, i64 } %t40, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.24, i64 4, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t54, ptr %a55 + %t56 = call i32 @finch_file_exists(ptr %a55) + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = icmp ne i32 %t56, 0 + br i1 %t58, label %then39, label %endif41 +then39: + %t59 = load { ptr, i64, i64 }, ptr %a2 + %t60 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t59) + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.25, i64 1, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t65, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t65, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.26, i64 1, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + %t77 = load ptr, ptr %a1 + %t78 = icmp eq ptr %t77, null + br i1 %t78, label %panic42, label %ok43 +panic42: + call void @finch_panic(ptr @.str.27, i64 68, ptr @.str.28) + unreachable +ok43: + %t79 = getelementptr inbounds %S.main.Loader, ptr %t77, i32 0, i32 3 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t76, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t76, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.29, i64 4, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t90 +endif41: + %t91 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i32 @finch_file_exists(ptr %a92) + %t94 = icmp ne i32 %t93, 0 + br i1 %t94, label %then44, label %endif46 +then44: + %t95 = load { ptr, i64, i64 }, ptr %a22 + ret { ptr, i64, i64 } %t95 +endif46: + %t96 = load ptr, ptr %a1 + %t97 = icmp eq ptr %t96, null + br i1 %t97, label %panic47, label %ok48 +panic47: + call void @finch_panic(ptr @.str.30, i64 73, ptr @.str.31) + unreachable +ok48: + %t98 = getelementptr inbounds %S.main.Loader, ptr %t96, i32 0, i32 5 + store i64 0, ptr %a99 + br label %each.cond49 +each.cond49: + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 + %t101 = load i64, ptr %t100 + %t102 = load i64, ptr %a99 + %t103 = icmp slt i64 %t102, %t101 + br i1 %t103, label %each.body50, label %each.end52 +each.body50: + %t104 = load ptr, ptr %t98 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 %t102 + %t106 = load { ptr, i64, i64 }, ptr %t105 + store { ptr, i64, i64 } %t106, ptr %a107 + %t108 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t108, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.32, i64 1, i64 0 }, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a109 + %t113 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t112, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t112, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a114 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.33, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = load ptr, ptr %a1 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic53, label %ok54 +panic53: + call void @finch_panic(ptr @.str.34, i64 74, ptr @.str.35) + unreachable +ok54: + %t126 = getelementptr inbounds %S.main.Loader, ptr %t124, i32 0, i32 3 + %t127 = load { ptr, i64, i64 }, ptr %t126 + store { ptr, i64, i64 } %t123, ptr %a129 + store { ptr, i64, i64 } %t127, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t123, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t132, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.36, i64 4, i64 0 }, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a138 + %t139 = call i32 @finch_file_exists(ptr %a138) + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = icmp ne i32 %t139, 0 + br i1 %t141, label %then55, label %endif57 +then55: + %t142 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t142, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.37, i64 1, i64 0 }, ptr %a145 + call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a143 + %t147 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t146, ptr %a149 + store { ptr, i64, i64 } %t147, ptr %a150 + call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) + store { ptr, i64, i64 } %t146, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a148 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.38, i64 1, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic58, label %ok59 +panic58: + call void @finch_panic(ptr @.str.39, i64 75, ptr @.str.40) + unreachable +ok59: + %t160 = getelementptr inbounds %S.main.Loader, ptr %t158, i32 0, i32 3 + %t161 = load { ptr, i64, i64 }, ptr %t160 + store { ptr, i64, i64 } %t157, ptr %a163 + store { ptr, i64, i64 } %t161, ptr %a164 + call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) + store { ptr, i64, i64 } %t157, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t166, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.41, i64 4, i64 0 }, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t166, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t171 +endif57: + %t172 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t172, ptr %a174 + store { ptr, i64, i64 } { ptr @.str.42, i64 1, i64 0 }, ptr %a175 + call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a173 + %t177 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t176, ptr %a179 + store { ptr, i64, i64 } %t177, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + store { ptr, i64, i64 } %t176, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.43, i64 4, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + store { ptr, i64, i64 } %t187, ptr %a188 + %t189 = call i32 @finch_file_exists(ptr %a188) + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = icmp ne i32 %t189, 0 + br i1 %t191, label %then60, label %endif62 +then60: + %t192 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.44, i64 1, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + %t196 = load { ptr, i64, i64 }, ptr %a193 + %t197 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t196, ptr %a199 + store { ptr, i64, i64 } %t197, ptr %a200 + call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) + store { ptr, i64, i64 } %t196, ptr %a201 + call void @finch_str_drop(ptr %a201) + %t202 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t202, ptr %a204 + store { ptr, i64, i64 } { ptr @.str.45, i64 4, i64 0 }, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t207 +endif62: + br label %each.step51 +each.step51: + %t208 = load i64, ptr %a99 + %t209 = add i64 %t208, 1 + store i64 %t209, ptr %a99 + br label %each.cond49 +each.end52: + %t210 = load ptr, ptr %a1 + %t211 = icmp eq ptr %t210, null + br i1 %t211, label %panic63, label %ok64 +panic63: + call void @finch_panic(ptr @.str.46, i64 81, ptr @.str.47) + unreachable +ok64: + %t212 = getelementptr inbounds %S.main.Loader, ptr %t210, i32 0, i32 4 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 + %t214 = load i64, ptr %t213 + %t215 = icmp sgt i64 %t214, 0 + br i1 %t215, label %then65, label %endif67 +then65: + %t216 = load ptr, ptr %a1 + %t217 = icmp eq ptr %t216, null + br i1 %t217, label %panic68, label %ok69 +panic68: + call void @finch_panic(ptr @.str.48, i64 82, ptr @.str.49) + unreachable +ok69: + %t218 = getelementptr inbounds %S.main.Loader, ptr %t216, i32 0, i32 4 + %t219 = load { ptr, i64, i64 }, ptr %t218 + store { ptr, i64, i64 } %t219, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.50, i64 1, i64 0 }, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a220 + %t224 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t223, ptr %a226 + store { ptr, i64, i64 } %t224, ptr %a227 + call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) + store { ptr, i64, i64 } %t223, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = load { ptr, i64, i64 }, ptr %a225 + store { ptr, i64, i64 } %t229, ptr %a231 + store { ptr, i64, i64 } { ptr @.str.51, i64 1, i64 0 }, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + store { ptr, i64, i64 } %t229, ptr %a233 + call void @finch_str_drop(ptr %a233) + %t234 = load { ptr, i64, i64 }, ptr %a230 + %t235 = load ptr, ptr %a1 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic70, label %ok71 +panic70: + call void @finch_panic(ptr @.str.52, i64 82, ptr @.str.53) + unreachable +ok71: + %t237 = getelementptr inbounds %S.main.Loader, ptr %t235, i32 0, i32 3 + %t238 = load { ptr, i64, i64 }, ptr %t237 + store { ptr, i64, i64 } %t234, ptr %a240 + store { ptr, i64, i64 } %t238, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t234, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + store { ptr, i64, i64 } %t243, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.54, i64 4, i64 0 }, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t243, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + store { ptr, i64, i64 } %t248, ptr %a249 + %t250 = call i32 @finch_file_exists(ptr %a249) + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_drop(ptr %a251) + %t252 = icmp ne i32 %t250, 0 + br i1 %t252, label %then72, label %endif74 +then72: + %t253 = load ptr, ptr %a1 + %t254 = icmp eq ptr %t253, null + br i1 %t254, label %panic75, label %ok76 +panic75: + call void @finch_panic(ptr @.str.55, i64 83, ptr @.str.56) + unreachable +ok76: + %t255 = getelementptr inbounds %S.main.Loader, ptr %t253, i32 0, i32 4 + %t256 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t256, ptr %a258 + store { ptr, i64, i64 } { ptr @.str.57, i64 1, i64 0 }, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + %t260 = load { ptr, i64, i64 }, ptr %a257 + %t261 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t260, ptr %a263 + store { ptr, i64, i64 } %t261, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t260, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + store { ptr, i64, i64 } %t266, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.58, i64 1, i64 0 }, ptr %a269 + call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) + store { ptr, i64, i64 } %t266, ptr %a270 + call void @finch_str_drop(ptr %a270) + %t271 = load { ptr, i64, i64 }, ptr %a267 + %t272 = load ptr, ptr %a1 + %t273 = icmp eq ptr %t272, null + br i1 %t273, label %panic77, label %ok78 +panic77: + call void @finch_panic(ptr @.str.59, i64 83, ptr @.str.60) + unreachable +ok78: + %t274 = getelementptr inbounds %S.main.Loader, ptr %t272, i32 0, i32 3 + %t275 = load { ptr, i64, i64 }, ptr %t274 + store { ptr, i64, i64 } %t271, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + store { ptr, i64, i64 } %t271, ptr %a279 + call void @finch_str_drop(ptr %a279) + %t280 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.61, i64 4, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t280, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t285 +endif74: + %t286 = load ptr, ptr %a1 + %t287 = icmp eq ptr %t286, null + br i1 %t287, label %panic79, label %ok80 +panic79: + call void @finch_panic(ptr @.str.62, i64 85, ptr @.str.63) + unreachable +ok80: + %t288 = getelementptr inbounds %S.main.Loader, ptr %t286, i32 0, i32 4 + %t289 = load { ptr, i64, i64 }, ptr %t288 + store { ptr, i64, i64 } %t289, ptr %a291 + store { ptr, i64, i64 } { ptr @.str.64, i64 1, i64 0 }, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + %t293 = load { ptr, i64, i64 }, ptr %a290 + %t294 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t293, ptr %a296 + store { ptr, i64, i64 } %t294, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + store { ptr, i64, i64 } %t293, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a295 + store { ptr, i64, i64 } %t299, ptr %a301 + store { ptr, i64, i64 } { ptr @.str.65, i64 4, i64 0 }, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t299, ptr %a303 + call void @finch_str_drop(ptr %a303) + %t304 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } %t304, ptr %a305 + %t306 = call i32 @finch_file_exists(ptr %a305) + store { ptr, i64, i64 } %t304, ptr %a307 + call void @finch_str_drop(ptr %a307) + %t308 = icmp ne i32 %t306, 0 + br i1 %t308, label %then81, label %endif83 +then81: + %t309 = load ptr, ptr %a1 + %t310 = icmp eq ptr %t309, null + br i1 %t310, label %panic84, label %ok85 +panic84: + call void @finch_panic(ptr @.str.66, i64 86, ptr @.str.67) + unreachable +ok85: + %t311 = getelementptr inbounds %S.main.Loader, ptr %t309, i32 0, i32 4 + %t312 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t312, ptr %a314 + store { ptr, i64, i64 } { ptr @.str.68, i64 1, i64 0 }, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + %t316 = load { ptr, i64, i64 }, ptr %a313 + %t317 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t316, ptr %a319 + store { ptr, i64, i64 } %t317, ptr %a320 + call void @finch_str_concat(ptr %a318, ptr %a319, ptr %a320) + store { ptr, i64, i64 } %t316, ptr %a321 + call void @finch_str_drop(ptr %a321) + %t322 = load { ptr, i64, i64 }, ptr %a318 + store { ptr, i64, i64 } %t322, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.69, i64 4, i64 0 }, ptr %a325 + call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) + store { ptr, i64, i64 } %t322, ptr %a326 + call void @finch_str_drop(ptr %a326) + %t327 = load { ptr, i64, i64 }, ptr %a323 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t327 +endif83: + br label %endif67 +endif67: + %t328 = load { ptr, i64, i64 }, ptr %a22 + ret { ptr, i64, i64 } %t328 +} + +define internal void @finch.drop.S_lexer_Token(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lexer.Token, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lexer.Token, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal void @finch.drop.arr_S_lexer_Token(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond107 +n.cond107: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body108, label %n.end109 +n.body108: + %t7 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t5 + call void @finch.drop.S_lexer_Token(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond107 +n.end109: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.copy.arr_str(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond110 +n.cond110: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body111, label %n.end112 +n.body111: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 %t6 + call void @finch_str_copy(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond110 +n.end112: + ret void +} + +define internal void @finch.copy.arr_S_ast_Type(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond118 +n.cond118: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body119, label %n.end120 +n.body119: + %t8 = getelementptr inbounds %S.ast.Type, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.ast.Type, ptr %t2, i64 %t6 + call void @finch.copy.S_ast_Type(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond118 +n.end120: + ret void +} + +define internal void @finch.copy.S_ast_Type(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.ast.Type, ptr %src + store %S.ast.Type %t1, ptr %dst + %t2 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_ast_Type(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.ast.Type, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.ast.Type, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.S_ast_Node(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.ast.Node, ptr %src + store %S.ast.Node %t1, ptr %dst + %t2 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 5 + call void @finch.copy.S_ast_Type(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 9 + %t15 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 9 + call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.ast.Node, ptr %dst, i32 0, i32 10 + %t17 = getelementptr inbounds %S.ast.Node, ptr %src, i32 0, i32 10 + call void @finch.copy.arr_str(ptr %t16, ptr %t17) + ret void +} + +define internal void @finch.copy.arr_S_ast_Node(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond115 +n.cond115: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body116, label %n.end117 +n.body116: + %t8 = getelementptr inbounds %S.ast.Node, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.ast.Node, ptr %t2, i64 %t6 + call void @finch.copy.S_ast_Node(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond115 +n.end117: + ret void +} + +define internal void @finch.copy.S_ast_Program(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.ast.Program, ptr %src + store %S.ast.Program %t1, ptr %dst + %t2 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 6 + %t15 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_S_ast_Node(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 7 + %t17 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 7 + call void @finch.copy.arr_S_ast_Node(ptr %t16, ptr %t17) + %t18 = getelementptr inbounds %S.ast.Program, ptr %dst, i32 0, i32 8 + %t19 = getelementptr inbounds %S.ast.Program, ptr %src, i32 0, i32 8 + call void @finch.copy.arr_S_ast_Node(ptr %t18, ptr %t19) + ret void +} + +define internal void @finch.drop.arr_str(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond137 +n.cond137: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body138, label %n.end139 +n.body138: + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1, i64 %t5 + call void @finch_str_drop(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond137 +n.end139: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_ast_Type(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond143 +n.cond143: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body144, label %n.end145 +n.body144: + %t7 = getelementptr inbounds %S.ast.Type, ptr %t1, i64 %t5 + call void @finch.drop.S_ast_Type(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond143 +n.end145: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_ast_Type(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_ast_Type(ptr %t2) + %t3 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.ast.Type, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.drop.S_ast_Node(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 5 + call void @finch.drop.S_ast_Type(ptr %t6) + %t7 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 9 + call void @finch.drop.arr_S_ast_Node(ptr %t7) + %t8 = getelementptr inbounds %S.ast.Node, ptr %a, i32 0, i32 10 + call void @finch.drop.arr_str(ptr %t8) + ret void +} + +define internal void @finch.drop.arr_S_ast_Node(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond140 +n.cond140: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body141, label %n.end142 +n.body141: + %t7 = getelementptr inbounds %S.ast.Node, ptr %t1, i64 %t5 + call void @finch.drop.S_ast_Node(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond140 +n.end142: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_ast_Program(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_str(ptr %t5) + %t6 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_S_ast_Node(ptr %t7) + %t8 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_S_ast_Node(ptr %t8) + %t9 = getelementptr inbounds %S.ast.Program, ptr %a, i32 0, i32 8 + call void @finch.drop.arr_S_ast_Node(ptr %t9) + ret void +} + +define internal void @finch.main.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca i64, align 16 + %a17 = alloca i64, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca i64, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca %S.ast.Program, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca %S.ast.Program, align 16 + %a139 = alloca %S.ast.Program, align 16 + %a145 = alloca i64, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca i64, align 16 + %a162 = alloca i64, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = call i32 @finch_file_exists(ptr %a5) + %t7 = icmp ne i32 %t6, 0 + %t8 = xor i1 %t7, true + br label %logic.from86 +logic.from86: + br i1 %t8, label %logic.rhs87, label %logic.end88 +logic.rhs87: + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic89, label %ok90 +panic89: + call void @finch_panic(ptr @.str.70, i64 93, ptr @.str.71) + unreachable +ok90: + %t11 = getelementptr inbounds %S.main.Loader, ptr %t9, i32 0, i32 6 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a14 + %t15 = load i64, ptr %t12 + %t16 = load ptr, ptr %t11 + store i64 0, ptr %a17 + br label %find.cond91 +find.cond91: + %t18 = load i64, ptr %a17 + %t19 = icmp slt i64 %t18, %t15 + br i1 %t19, label %find.body92, label %find.end95 +find.body92: + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 %t18 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } %t13, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br i1 %t25, label %find.hit93, label %find.next94 +find.hit93: + store i64 %t18, ptr %a14 + br label %find.end95 +find.next94: + %t26 = add i64 %t18, 1 + store i64 %t26, ptr %a17 + br label %find.cond91 +find.end95: + %t27 = load i64, ptr %a14 + %t28 = icmp sge i64 %t27, 0 + %t29 = xor i1 %t28, true + br label %logic.rend96 +logic.rend96: + br label %logic.end88 +logic.end88: + %t30 = phi i1 [ false, %logic.from86 ], [ %t29, %logic.rend96 ] + br i1 %t30, label %then97, label %endif99 +then97: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = icmp sgt i64 %t32, 0 + br i1 %t33, label %then100, label %else101 +then100: + %t34 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.72, i64 30, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.73, i64 14, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + %t44 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t43, ptr %a46 + store { ptr, i64, i64 } %t44, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + store { ptr, i64, i64 } %t43, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.74, i64 1, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + %t55 = extractvalue { ptr, i64, i64 } %t54, 1 + %t56 = trunc i64 %t55 to i32 + %t57 = extractvalue { ptr, i64, i64 } %t54, 0 + %t58 = icmp eq ptr %t57, null + %t59 = select i1 %t58, ptr @.str.75, ptr %t57 + %t60 = call i32 (ptr, ...) @printf(ptr @.str.76, i32 %t56, ptr %t59) + store { ptr, i64, i64 } %t54, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = call i32 (ptr, ...) @printf(ptr @.str.77) + br label %endif102 +else101: + %t63 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.78, i64 19, i64 0 }, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t67, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.79, i64 1, i64 0 }, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + %t73 = extractvalue { ptr, i64, i64 } %t72, 1 + %t74 = trunc i64 %t73 to i32 + %t75 = extractvalue { ptr, i64, i64 } %t72, 0 + %t76 = icmp eq ptr %t75, null + %t77 = select i1 %t76, ptr @.str.80, ptr %t75 + %t78 = call i32 (ptr, ...) @printf(ptr @.str.81, i32 %t74, ptr %t77) + store { ptr, i64, i64 } %t72, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = call i32 (ptr, ...) @printf(ptr @.str.82) + br label %endif102 +endif102: + %t81 = trunc i64 1 to i32 + %t82 = call i32 @fflush(ptr null) + call void @exit(i32 %t81) + br label %endif99 +endif99: + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a2 + %t85 = call { ptr, i64, i64 } @finch.main.textOfFile(ptr %t83, { ptr, i64, i64 } %t84) + store { ptr, i64, i64 } %t85, ptr %a86 + %t87 = load ptr, ptr %a1 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic103, label %ok104 +panic103: + call void @finch_panic(ptr @.str.83, i64 102, ptr @.str.84) + unreachable +ok104: + %t89 = getelementptr inbounds %S.main.Loader, ptr %t87, i32 0, i32 1 + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 + %t91 = load i64, ptr %t90 + store i64 %t91, ptr %a92 + %t93 = load ptr, ptr %a1 + %t94 = icmp eq ptr %t93, null + br i1 %t94, label %panic105, label %ok106 +panic105: + call void @finch_panic(ptr @.str.85, i64 103, ptr @.str.86) + unreachable +ok106: + %t95 = getelementptr inbounds %S.main.Loader, ptr %t93, i32 0, i32 1 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 + %t97 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t97, ptr %a98 + call void @finch_str_copy(ptr %a99, ptr %a98) + %t100 = load { ptr, i64, i64 }, ptr %a99 + %t101 = load i64, ptr %t96 + %t102 = add i64 %t101, 1 + call void @finch_arr_reserve(ptr %t95, i64 %t102, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t103 = load ptr, ptr %t95 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i64 %t101 + store { ptr, i64, i64 } %t100, ptr %t104 + store i64 %t102, ptr %t96 + %t105 = load { ptr, i64, i64 }, ptr %a86 + %t106 = load { ptr, i64, i64 }, ptr %a2 + %t107 = call { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %t105, { ptr, i64, i64 } %t106) + %t108 = load i64, ptr %a92 + %t109 = load { ptr, i64, i64 }, ptr %a2 + %t110 = call %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %t107, i64 %t108, { ptr, i64, i64 } %t109) + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch.drop.arr_S_lexer_Token(ptr %a111) + store %S.ast.Program %t110, ptr %a112 + %t113 = load { ptr, i64, i64 }, ptr %a3 + %t114 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 0 + store { ptr, i64, i64 } %t113, ptr %a115 + call void @finch_str_copy(ptr %a116, ptr %a115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + %t118 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } %t117, ptr %t114 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a2 + %t121 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 1 + store { ptr, i64, i64 } %t120, ptr %a122 + call void @finch_str_copy(ptr %a123, ptr %a122) + %t124 = load { ptr, i64, i64 }, ptr %a123 + %t125 = load { ptr, i64, i64 }, ptr %t121 + store { ptr, i64, i64 } %t124, ptr %t121 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = getelementptr inbounds %S.ast.Program, ptr %a112, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a129 + call void @finch.copy.arr_str(ptr %a130, ptr %a129) + %t131 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t131, ptr %a132 + %t133 = load ptr, ptr %a1 + %t134 = icmp eq ptr %t133, null + br i1 %t134, label %panic113, label %ok114 +panic113: + call void @finch_panic(ptr @.str.87, i64 108, ptr @.str.88) + unreachable +ok114: + %t135 = getelementptr inbounds %S.main.Loader, ptr %t133, i32 0, i32 0 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 + %t137 = load %S.ast.Program, ptr %a112 + store %S.ast.Program %t137, ptr %a138 + call void @finch.copy.S_ast_Program(ptr %a139, ptr %a138) + %t140 = load %S.ast.Program, ptr %a139 + %t141 = load i64, ptr %t136 + %t142 = add i64 %t141, 1 + call void @finch_arr_reserve(ptr %t135, i64 %t142, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) + %t143 = load ptr, ptr %t135 + %t144 = getelementptr inbounds %S.ast.Program, ptr %t143, i64 %t141 + store %S.ast.Program %t140, ptr %t144 + store i64 %t142, ptr %t136 + store i64 0, ptr %a145 + br label %each.cond121 +each.cond121: + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + %t147 = load i64, ptr %t146 + %t148 = load i64, ptr %a145 + %t149 = icmp slt i64 %t148, %t147 + br i1 %t149, label %each.body122, label %each.end124 +each.body122: + %t150 = load ptr, ptr %a132 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t148 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t152, ptr %a153 + %t154 = load ptr, ptr %a1 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic125, label %ok126 +panic125: + call void @finch_panic(ptr @.str.89, i64 110, ptr @.str.90) + unreachable +ok126: + %t156 = getelementptr inbounds %S.main.Loader, ptr %t154, i32 0, i32 2 + %t157 = getelementptr inbounds { ptr, i64, i64 }, ptr %t156, i32 0, i32 1 + %t158 = load { ptr, i64, i64 }, ptr %a153 + store i64 -1, ptr %a159 + %t160 = load i64, ptr %t157 + %t161 = load ptr, ptr %t156 + store i64 0, ptr %a162 + br label %find.cond127 +find.cond127: + %t163 = load i64, ptr %a162 + %t164 = icmp slt i64 %t163, %t160 + br i1 %t164, label %find.body128, label %find.end131 +find.body128: + %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i64 %t163 + %t166 = load { ptr, i64, i64 }, ptr %t165 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } %t158, ptr %a168 + %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) + %t170 = icmp ne i32 %t169, 0 + br i1 %t170, label %find.hit129, label %find.next130 +find.hit129: + store i64 %t163, ptr %a159 + br label %find.end131 +find.next130: + %t171 = add i64 %t163, 1 + store i64 %t171, ptr %a162 + br label %find.cond127 +find.end131: + %t172 = load i64, ptr %a159 + %t173 = icmp sge i64 %t172, 0 + %t174 = xor i1 %t173, true + br i1 %t174, label %then132, label %endif134 +then132: + %t175 = load ptr, ptr %a1 + %t176 = icmp eq ptr %t175, null + br i1 %t176, label %panic135, label %ok136 +panic135: + call void @finch_panic(ptr @.str.91, i64 111, ptr @.str.92) + unreachable +ok136: + %t177 = getelementptr inbounds %S.main.Loader, ptr %t175, i32 0, i32 2 + %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 + %t179 = load { ptr, i64, i64 }, ptr %a153 + store { ptr, i64, i64 } %t179, ptr %a180 + call void @finch_str_copy(ptr %a181, ptr %a180) + %t182 = load { ptr, i64, i64 }, ptr %a181 + %t183 = load i64, ptr %t178 + %t184 = add i64 %t183, 1 + call void @finch_arr_reserve(ptr %t177, i64 %t184, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t185 = load ptr, ptr %t177 + %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i64 %t183 + store { ptr, i64, i64 } %t182, ptr %t186 + store i64 %t184, ptr %t178 + %t187 = load ptr, ptr %a1 + %t188 = load ptr, ptr %a1 + %t189 = load { ptr, i64, i64 }, ptr %a2 + %t190 = load { ptr, i64, i64 }, ptr %a153 + %t191 = call { ptr, i64, i64 } @finch.main.findModule(ptr %t188, { ptr, i64, i64 } %t189, { ptr, i64, i64 } %t190) + %t192 = load { ptr, i64, i64 }, ptr %a153 + call void @finch.main.load(ptr %t187, { ptr, i64, i64 } %t191, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t191, ptr %a193 + call void @finch_str_drop(ptr %a193) + br label %endif134 +endif134: + br label %each.step123 +each.step123: + %t194 = load i64, ptr %a145 + %t195 = add i64 %t194, 1 + store i64 %t195, ptr %a145 + br label %each.cond121 +each.end124: + call void @finch.drop.arr_str(ptr %a132) + call void @finch.drop.S_ast_Program(ptr %a112) + call void @finch_str_drop(ptr %a86) + ret void +} + +define internal void @finch.main.usage() { +entry: + + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 1 + %t2 = trunc i64 %t1 to i32 + %t3 = extractvalue { ptr, i64, i64 } { ptr @.str.93, i64 41, i64 0 }, 0 + %t4 = icmp eq ptr %t3, null + %t5 = select i1 %t4, ptr @.str.94, ptr %t3 + %t6 = call i32 (ptr, ...) @printf(ptr @.str.95, i32 %t2, ptr %t5) + %t7 = call i32 (ptr, ...) @printf(ptr @.str.96) + %t8 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 1 + %t9 = trunc i64 %t8 to i32 + %t10 = extractvalue { ptr, i64, i64 } { ptr @.str.97, i64 6, i64 0 }, 0 + %t11 = icmp eq ptr %t10, null + %t12 = select i1 %t11, ptr @.str.98, ptr %t10 + %t13 = call i32 (ptr, ...) @printf(ptr @.str.99, i32 %t9, ptr %t12) + %t14 = call i32 (ptr, ...) @printf(ptr @.str.100) + %t15 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 1 + %t16 = trunc i64 %t15 to i32 + %t17 = extractvalue { ptr, i64, i64 } { ptr @.str.101, i64 60, i64 0 }, 0 + %t18 = icmp eq ptr %t17, null + %t19 = select i1 %t18, ptr @.str.102, ptr %t17 + %t20 = call i32 (ptr, ...) @printf(ptr @.str.103, i32 %t16, ptr %t19) + %t21 = call i32 (ptr, ...) @printf(ptr @.str.104) + %t22 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 1 + %t23 = trunc i64 %t22 to i32 + %t24 = extractvalue { ptr, i64, i64 } { ptr @.str.105, i64 52, i64 0 }, 0 + %t25 = icmp eq ptr %t24, null + %t26 = select i1 %t25, ptr @.str.106, ptr %t24 + %t27 = call i32 (ptr, ...) @printf(ptr @.str.107, i32 %t23, ptr %t26) + %t28 = call i32 (ptr, ...) @printf(ptr @.str.108) + %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 1 + %t30 = trunc i64 %t29 to i32 + %t31 = extractvalue { ptr, i64, i64 } { ptr @.str.109, i64 54, i64 0 }, 0 + %t32 = icmp eq ptr %t31, null + %t33 = select i1 %t32, ptr @.str.110, ptr %t31 + %t34 = call i32 (ptr, ...) @printf(ptr @.str.111, i32 %t30, ptr %t33) + %t35 = call i32 (ptr, ...) @printf(ptr @.str.112) + %t36 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 1 + %t37 = trunc i64 %t36 to i32 + %t38 = extractvalue { ptr, i64, i64 } { ptr @.str.113, i64 53, i64 0 }, 0 + %t39 = icmp eq ptr %t38, null + %t40 = select i1 %t39, ptr @.str.114, ptr %t38 + %t41 = call i32 (ptr, ...) @printf(ptr @.str.115, i32 %t37, ptr %t40) + %t42 = call i32 (ptr, ...) @printf(ptr @.str.116) + %t43 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 1 + %t44 = trunc i64 %t43 to i32 + %t45 = extractvalue { ptr, i64, i64 } { ptr @.str.117, i64 90, i64 0 }, 0 + %t46 = icmp eq ptr %t45, null + %t47 = select i1 %t46, ptr @.str.118, ptr %t45 + %t48 = call i32 (ptr, ...) @printf(ptr @.str.119, i32 %t44, ptr %t47) + %t49 = call i32 (ptr, ...) @printf(ptr @.str.120) + %t50 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 1 + %t51 = trunc i64 %t50 to i32 + %t52 = extractvalue { ptr, i64, i64 } { ptr @.str.121, i64 8, i64 0 }, 0 + %t53 = icmp eq ptr %t52, null + %t54 = select i1 %t53, ptr @.str.122, ptr %t52 + %t55 = call i32 (ptr, ...) @printf(ptr @.str.123, i32 %t51, ptr %t54) + %t56 = call i32 (ptr, ...) @printf(ptr @.str.124) + %t57 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 1 + %t58 = trunc i64 %t57 to i32 + %t59 = extractvalue { ptr, i64, i64 } { ptr @.str.125, i64 53, i64 0 }, 0 + %t60 = icmp eq ptr %t59, null + %t61 = select i1 %t60, ptr @.str.126, ptr %t59 + %t62 = call i32 (ptr, ...) @printf(ptr @.str.127, i32 %t58, ptr %t61) + %t63 = call i32 (ptr, ...) @printf(ptr @.str.128) + %t64 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 1 + %t65 = trunc i64 %t64 to i32 + %t66 = extractvalue { ptr, i64, i64 } { ptr @.str.129, i64 76, i64 0 }, 0 + %t67 = icmp eq ptr %t66, null + %t68 = select i1 %t67, ptr @.str.130, ptr %t66 + %t69 = call i32 (ptr, ...) @printf(ptr @.str.131, i32 %t65, ptr %t68) + %t70 = call i32 (ptr, ...) @printf(ptr @.str.132) + %t71 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 1 + %t72 = trunc i64 %t71 to i32 + %t73 = extractvalue { ptr, i64, i64 } { ptr @.str.133, i64 57, i64 0 }, 0 + %t74 = icmp eq ptr %t73, null + %t75 = select i1 %t74, ptr @.str.134, ptr %t73 + %t76 = call i32 (ptr, ...) @printf(ptr @.str.135, i32 %t72, ptr %t75) + %t77 = call i32 (ptr, ...) @printf(ptr @.str.136) + %t78 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 1 + %t79 = trunc i64 %t78 to i32 + %t80 = extractvalue { ptr, i64, i64 } { ptr @.str.137, i64 66, i64 0 }, 0 + %t81 = icmp eq ptr %t80, null + %t82 = select i1 %t81, ptr @.str.138, ptr %t80 + %t83 = call i32 (ptr, ...) @printf(ptr @.str.139, i32 %t79, ptr %t82) + %t84 = call i32 (ptr, ...) @printf(ptr @.str.140) + %t85 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 1 + %t86 = trunc i64 %t85 to i32 + %t87 = extractvalue { ptr, i64, i64 } { ptr @.str.141, i64 101, i64 0 }, 0 + %t88 = icmp eq ptr %t87, null + %t89 = select i1 %t88, ptr @.str.142, ptr %t87 + %t90 = call i32 (ptr, ...) @printf(ptr @.str.143, i32 %t86, ptr %t89) + %t91 = call i32 (ptr, ...) @printf(ptr @.str.144) + %t92 = trunc i64 1 to i32 + %t93 = call i32 @fflush(ptr null) + call void @exit(i32 %t92) + ret void +} + +define internal { ptr, i64, i64 } @finch.main.unpack() { +entry: + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca i64, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %t1 = call { ptr, i64, i64 } @finch.embedded.names() + store { ptr, i64, i64 } %t1, ptr %a2 + %t3 = call { ptr, i64, i64 } @finch.host.cacheDir() + store { ptr, i64, i64 } %t3, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.145, i64 7, i64 0 }, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + %t9 = call { ptr, i64, i64 } @finch.embedded.texts() + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.146, i64 1, i64 0 }, ptr %a12 + call void @finch_str_join(ptr %a13, ptr %a10, ptr %a12) + %t14 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.drop.arr_str(ptr %a10) + %t15 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t14) + store { ptr, i64, i64 } %t14, ptr %a16 + call void @finch_str_drop(ptr %a16) + store { ptr, i64, i64 } %t8, ptr %a18 + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t8, ptr %a20 + call void @finch_str_drop(ptr %a20) + store { ptr, i64, i64 } %t15, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.147, i64 5, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t28, ptr %a29 + %t30 = call i32 @finch_file_exists(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = icmp ne i32 %t30, 0 + br i1 %t32, label %then146, label %endif148 +then146: + %t33 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t33 +endif148: + %t34 = call { ptr, i64, i64 } @finch.embedded.texts() + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t37 = load i64, ptr %t36 + store i64 0, ptr %a38 + br label %for.cond149 +for.cond149: + %t39 = load i64, ptr %a38 + %t40 = icmp slt i64 %t39, %t37 + br i1 %t40, label %for.body150, label %for.end152 +for.body150: + %t41 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.148, i64 1, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a42 + %t46 = load i64, ptr %a38 + %t47 = load { ptr, i64, i64 }, ptr %a2 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = icmp uge i64 %t46, %t48 + br i1 %t49, label %range153, label %inrange154 +range153: + call void @finch_panic_index(ptr @.str.149, i64 144, i64 %t46, i64 %t48) + unreachable +inrange154: + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t46 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t45, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t45, ptr %a56 + call void @finch_str_drop(ptr %a56) + %t57 = load { ptr, i64, i64 }, ptr %a53 + %t58 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t57) + store { ptr, i64, i64 } %t57, ptr %a59 + call void @finch_str_drop(ptr %a59) + call void @finch.host.makeDirs({ ptr, i64, i64 } %t58) + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.150, i64 1, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a62 + %t66 = load i64, ptr %a38 + %t67 = load { ptr, i64, i64 }, ptr %a2 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 %t66, %t68 + br i1 %t69, label %range155, label %inrange156 +range155: + call void @finch_panic_index(ptr @.str.151, i64 145, i64 %t66, i64 %t68) + unreachable +inrange156: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 %t66 + %t72 = load { ptr, i64, i64 }, ptr %t71 + store { ptr, i64, i64 } %t65, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t65, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = load i64, ptr %a38 + %t79 = load { ptr, i64, i64 }, ptr %a35 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range157, label %inrange158 +range157: + call void @finch_panic_index(ptr @.str.152, i64 145, i64 %t78, i64 %t80) + unreachable +inrange158: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i64 %t78 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } %t77, ptr %a85 + store { ptr, i64, i64 } %t84, ptr %a86 + %t87 = call i32 @finch_write_file(ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t77, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = icmp ne i32 %t87, 0 + br label %for.step151 +for.step151: + %t90 = load i64, ptr %a38 + %t91 = add i64 %t90, 1 + store i64 %t91, ptr %a38 + br label %for.cond149 +for.end152: + %t92 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.153, i64 5, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.154, i64 0, i64 0 }, ptr %a98 + %t99 = call i32 @finch_write_file(ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t96, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = icmp ne i32 %t99, 0 + %t102 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.arr_str(ptr %a35) + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t102 +} + +define internal void @finch.drop.S_cimport_Header(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Header, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.Header, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal void @finch.drop.arr_S_cimport_Header(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond403 +n.cond403: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body404, label %n.end405 +n.body404: + %t7 = getelementptr inbounds %S.cimport.Header, ptr %t1, i64 %t5 + call void @finch.drop.S_cimport_Header(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond403 +n.end405: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_ast_Program(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond406 +n.cond406: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body407, label %n.end408 +n.body407: + %t7 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t5 + call void @finch.drop.S_ast_Program(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond406 +n.end408: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_main_Loader(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_ast_Program(ptr %t1) + %t2 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + %t3 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t7) + %t8 = getelementptr inbounds %S.main.Loader, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_str(ptr %t8) + ret void +} + +define internal void @finch.drop.S_platform_Target(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 6 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.platform.Target, ptr %a, i32 0, i32 8 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.copy.S_platform_Target(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.platform.Target, ptr %src + store %S.platform.Target %t1, ptr %dst + %t2 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 6 + %t5 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 6 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 7 + %t7 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.platform.Target, ptr %dst, i32 0, i32 8 + %t9 = getelementptr inbounds %S.platform.Target, ptr %src, i32 0, i32 8 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.drop.S_gen_Options(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Options, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Options, ptr %a, i32 0, i32 4 + call void @finch.drop.S_platform_Target(ptr %t2) + ret void +} + +define internal void @finch.drop.S_cimport_CFunc(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 2 + call void @finch.drop.S_ast_Type(ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_S_ast_Type(ptr %t4) + %t5 = getelementptr inbounds %S.cimport.CFunc, ptr %a, i32 0, i32 5 + call void @finch_str_drop(ptr %t5) + ret void +} + +define internal void @finch.drop.map_str_S_cimport_CFunc(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond416 +n.cond416: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body417, label %n.end418 +n.body417: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live419, label %entry.next420 +entry.live419: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_cimport_CFunc(ptr %t13) + br label %entry.next420 +entry.next420: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond416 +n.end418: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CConst(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CConst, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t1) + ret void +} + +define internal void @finch.drop.map_str_S_cimport_CConst(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond421 +n.cond421: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body422, label %n.end423 +n.body422: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live424, label %entry.next425 +entry.live424: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_cimport_CConst(ptr %t13) + br label %entry.next425 +entry.next425: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond421 +n.end423: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.map_str_S_ast_Type(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond426 +n.cond426: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body427, label %n.end428 +n.body427: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live429, label %entry.next430 +entry.live429: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_ast_Type(ptr %t13) + br label %entry.next430 +entry.next430: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond426 +n.end428: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CField(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CField, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CField, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal void @finch.drop.arr_S_cimport_CField(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond436 +n.cond436: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body437, label %n.end438 +n.body437: + %t7 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t5 + call void @finch.drop.S_cimport_CField(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond436 +n.end438: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CStruct(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_cimport_CField(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.CStruct, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal void @finch.drop.map_str_S_cimport_CStruct(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond431 +n.cond431: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body432, label %n.end433 +n.body432: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live434, label %entry.next435 +entry.live434: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_cimport_CStruct(ptr %t13) + br label %entry.next435 +entry.next435: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond431 +n.end433: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_CImports(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 0 + call void @finch.drop.map_str_S_cimport_CFunc(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 1 + call void @finch.drop.map_str_S_cimport_CConst(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 2 + call void @finch.drop.map_str_S_ast_Type(ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 3 + call void @finch.drop.map_str_S_cimport_CStruct(ptr %t4) + %t5 = getelementptr inbounds %S.cimport.CImports, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_str(ptr %t5) + ret void +} + +define internal void @finch.drop.S_linker_Build(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.linker.Build, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t6) + ret void +} + +define internal i64 @finch.main.main({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca i1, align 16 + %a105 = alloca i1, align 16 + %a106 = alloca i1, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca i64, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca %S.platform.Target, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a450 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca %S.main.Loader, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca i64, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca i64, align 16 + %a615 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a645 = alloca i64, align 16 + %a653 = alloca %S.ast.Program, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca i64, align 16 + %a663 = alloca i64, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca i64, align 16 + %a700 = alloca i64, align 16 + %a703 = alloca i64, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca i64, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a780 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a803 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca %S.cimport.CImports, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a866 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca %S.platform.Target, align 16 + %a876 = alloca %S.platform.Target, align 16 + %a880 = alloca %S.gen.Options, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a907 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a921 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca { ptr, i64, i64 }, align 16 + %a923 = alloca { ptr, i64, i64 }, align 16 + %a924 = alloca { ptr, i64, i64 }, align 16 + %a927 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a940 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a978 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a984 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a986 = alloca { ptr, i64, i64 }, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a993 = alloca { ptr, i64, i64 }, align 16 + %a996 = alloca { ptr, i64, i64 }, align 16 + %a997 = alloca { ptr, i64, i64 }, align 16 + %a998 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1003 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca %S.linker.Build, align 16 + %a1040 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1045 = alloca i64, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 + %a1069 = alloca { ptr, i64, i64 }, align 16 + %a1070 = alloca { ptr, i64, i64 }, align 16 + %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 + %a1075 = alloca { ptr, i64, i64 }, align 16 + %a1078 = alloca { ptr, i64, i64 }, align 16 + %a1079 = alloca { ptr, i64, i64 }, align 16 + %a1081 = alloca { ptr, i64, i64 }, align 16 + %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1085 = alloca { ptr, i64, i64 }, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca i64, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = icmp eq i64 %t3, 2 + br label %logic.from159 +logic.from159: + br i1 %t4, label %logic.rhs160, label %logic.end161 +logic.rhs160: + %t5 = load { ptr, i64, i64 }, ptr %a1 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 1, %t6 + br i1 %t7, label %range162, label %inrange163 +range162: + call void @finch_panic_index(ptr @.str.155, i64 152, i64 1, i64 %t6) + unreachable +inrange163: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 1 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.156, i64 7, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br label %logic.from164 +logic.from164: + br i1 %t14, label %logic.end166, label %logic.rhs165 +logic.rhs165: + %t15 = load { ptr, i64, i64 }, ptr %a1 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 1, %t16 + br i1 %t17, label %range167, label %inrange168 +range167: + call void @finch_panic_index(ptr @.str.157, i64 152, i64 1, i64 %t16) + unreachable +inrange168: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.158, i64 9, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br label %logic.rend169 +logic.rend169: + br label %logic.end166 +logic.end166: + %t25 = phi i1 [ true, %logic.from164 ], [ %t24, %logic.rend169 ] + br label %logic.rend170 +logic.rend170: + br label %logic.end161 +logic.end161: + %t26 = phi i1 [ false, %logic.from159 ], [ %t25, %logic.rend170 ] + br i1 %t26, label %then171, label %endif173 +then171: + %t27 = extractvalue { ptr, i64, i64 } { ptr @.str.159, i64 46, i64 0 }, 1 + %t28 = trunc i64 %t27 to i32 + %t29 = extractvalue { ptr, i64, i64 } { ptr @.str.159, i64 46, i64 0 }, 0 + %t30 = icmp eq ptr %t29, null + %t31 = select i1 %t30, ptr @.str.160, ptr %t29 + %t32 = call i32 (ptr, ...) @printf(ptr @.str.161, i32 %t28, ptr %t31) + %t33 = call i32 (ptr, ...) @printf(ptr @.str.162) + ret i64 0 +endif173: + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t35 = load i64, ptr %t34 + %t36 = icmp eq i64 %t35, 2 + br label %logic.from174 +logic.from174: + br i1 %t36, label %logic.rhs175, label %logic.end176 +logic.rhs175: + %t37 = load { ptr, i64, i64 }, ptr %a1 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 1, %t38 + br i1 %t39, label %range177, label %inrange178 +range177: + call void @finch_panic_index(ptr @.str.163, i64 156, i64 1, i64 %t38) + unreachable +inrange178: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t42, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.164, i64 3, i64 0 }, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend179 +logic.rend179: + br label %logic.end176 +logic.end176: + %t47 = phi i1 [ false, %logic.from174 ], [ %t46, %logic.rend179 ] + br i1 %t47, label %then180, label %endif182 +then180: + %t48 = load { ptr, i64, i64 }, ptr %a1 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 0, %t49 + br i1 %t50, label %range183, label %inrange184 +range183: + call void @finch_panic_index(ptr @.str.165, i64 157, i64 0, i64 %t49) + unreachable +inrange184: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 0 + %t53 = load { ptr, i64, i64 }, ptr %t52 + %t54 = call i64 @finch.lsp.run({ ptr, i64, i64 } %t53) + ret i64 %t54 +endif182: + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = icmp slt i64 %t56, 3 + br i1 %t57, label %then185, label %endif187 +then185: + call void @finch.main.usage() + br label %endif187 +endif187: + %t58 = load { ptr, i64, i64 }, ptr %a1 + %t59 = extractvalue { ptr, i64, i64 } %t58, 1 + %t60 = icmp uge i64 1, %t59 + br i1 %t60, label %range188, label %inrange189 +range188: + call void @finch_panic_index(ptr @.str.166, i64 162, i64 1, i64 %t59) + unreachable +inrange189: + %t61 = extractvalue { ptr, i64, i64 } %t58, 0 + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i64 1 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_copy(ptr %a65, ptr %a64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t66, ptr %a67 + %t68 = load { ptr, i64, i64 }, ptr %a1 + %t69 = extractvalue { ptr, i64, i64 } %t68, 1 + %t70 = icmp uge i64 2, %t69 + br i1 %t70, label %range190, label %inrange191 +range190: + call void @finch_panic_index(ptr @.str.167, i64 163, i64 2, i64 %t69) + unreachable +inrange191: + %t71 = extractvalue { ptr, i64, i64 } %t68, 0 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 2 + %t73 = load { ptr, i64, i64 }, ptr %t72 + store { ptr, i64, i64 } %t73, ptr %a74 + call void @finch_str_copy(ptr %a75, ptr %a74) + %t76 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t76, ptr %a77 + %t78 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t78, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.168, i64 5, i64 0 }, ptr %a80 + %t81 = call i32 @finch_str_eq(ptr %a79, ptr %a80) + %t82 = icmp eq i32 %t81, 0 + br label %logic.from192 +logic.from192: + br i1 %t82, label %logic.rhs193, label %logic.end194 +logic.rhs193: + %t83 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t83, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.169, i64 3, i64 0 }, ptr %a85 + %t86 = call i32 @finch_str_eq(ptr %a84, ptr %a85) + %t87 = icmp eq i32 %t86, 0 + br label %logic.rend195 +logic.rend195: + br label %logic.end194 +logic.end194: + %t88 = phi i1 [ false, %logic.from192 ], [ %t87, %logic.rend195 ] + br label %logic.from196 +logic.from196: + br i1 %t88, label %logic.rhs197, label %logic.end198 +logic.rhs197: + %t89 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t89, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.170, i64 2, i64 0 }, ptr %a91 + %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) + %t93 = icmp eq i32 %t92, 0 + br label %logic.rend199 +logic.rend199: + br label %logic.end198 +logic.end198: + %t94 = phi i1 [ false, %logic.from196 ], [ %t93, %logic.rend199 ] + br label %logic.from200 +logic.from200: + br i1 %t94, label %logic.rhs201, label %logic.end202 +logic.rhs201: + %t95 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.171, i64 5, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp eq i32 %t98, 0 + br label %logic.rend203 +logic.rend203: + br label %logic.end202 +logic.end202: + %t100 = phi i1 [ false, %logic.from200 ], [ %t99, %logic.rend203 ] + br i1 %t100, label %then204, label %endif206 +then204: + call void @finch.main.usage() + br label %endif206 +endif206: + %t101 = load { ptr, i64, i64 }, ptr %a77 + %t102 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t102, ptr %a103 + store i1 false, ptr %a104 + store i1 false, ptr %a105 + store i1 false, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.172, i64 0, i64 0 }, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.173, i64 3, i64 0 }, ptr %a108 + store { ptr, i64, i64 } zeroinitializer, ptr %a109 + store { ptr, i64, i64 } zeroinitializer, ptr %a110 + store { ptr, i64, i64 } zeroinitializer, ptr %a111 + store { ptr, i64, i64 } zeroinitializer, ptr %a112 + store { ptr, i64, i64 } zeroinitializer, ptr %a113 + store i64 3, ptr %a114 + br label %while.cond207 +while.cond207: + %t115 = load i64, ptr %a114 + %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t117 = load i64, ptr %t116 + %t118 = icmp slt i64 %t115, %t117 + br i1 %t118, label %while.body208, label %while.end209 +while.body208: + %t119 = load i64, ptr %a114 + %t120 = load { ptr, i64, i64 }, ptr %a1 + %t121 = extractvalue { ptr, i64, i64 } %t120, 1 + %t122 = icmp uge i64 %t119, %t121 + br i1 %t122, label %range210, label %inrange211 +range210: + call void @finch_panic_index(ptr @.str.174, i64 180, i64 %t119, i64 %t121) + unreachable +inrange211: + %t123 = extractvalue { ptr, i64, i64 } %t120, 0 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 %t119 + %t125 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t128, ptr %a129 + %t130 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t130, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.175, i64 3, i64 0 }, ptr %a132 + %t133 = call i32 @finch_str_eq(ptr %a131, ptr %a132) + %t134 = icmp ne i32 %t133, 0 + br label %logic.from212 +logic.from212: + br i1 %t134, label %logic.rhs213, label %logic.end214 +logic.rhs213: + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = icmp sgt i64 %t136, 0 + br label %logic.rend215 +logic.rend215: + br label %logic.end214 +logic.end214: + %t138 = phi i1 [ false, %logic.from212 ], [ %t137, %logic.rend215 ] + br i1 %t138, label %then216, label %else217 +then216: + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t140 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t140, ptr %a141 + call void @finch_str_copy(ptr %a142, ptr %a141) + %t143 = load { ptr, i64, i64 }, ptr %a142 + %t144 = load i64, ptr %t139 + %t145 = add i64 %t144, 1 + call void @finch_arr_reserve(ptr %a113, i64 %t145, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t146 = load ptr, ptr %a113 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t144 + store { ptr, i64, i64 } %t143, ptr %t147 + store i64 %t145, ptr %t139 + br label %endif218 +else217: + %t148 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.176, i64 2, i64 0 }, ptr %a150 + %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) + %t152 = icmp ne i32 %t151, 0 + br label %logic.from219 +logic.from219: + br i1 %t152, label %logic.rhs220, label %logic.end221 +logic.rhs220: + %t153 = load i64, ptr %a114 + %t154 = add i64 %t153, 1 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t156 = load i64, ptr %t155 + %t157 = icmp slt i64 %t154, %t156 + br label %logic.rend222 +logic.rend222: + br label %logic.end221 +logic.end221: + %t158 = phi i1 [ false, %logic.from219 ], [ %t157, %logic.rend222 ] + br label %logic.from223 +logic.from223: + br i1 %t158, label %logic.rhs224, label %logic.end225 +logic.rhs224: + %t159 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.177, i64 5, i64 0 }, ptr %a161 + %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) + %t163 = icmp ne i32 %t162, 0 + br label %logic.rend226 +logic.rend226: + br label %logic.end225 +logic.end225: + %t164 = phi i1 [ false, %logic.from223 ], [ %t163, %logic.rend226 ] + br i1 %t164, label %then227, label %else228 +then227: + %t165 = load i64, ptr %a114 + %t166 = add i64 %t165, 1 + %t167 = load { ptr, i64, i64 }, ptr %a1 + %t168 = extractvalue { ptr, i64, i64 } %t167, 1 + %t169 = icmp uge i64 %t166, %t168 + br i1 %t169, label %range230, label %inrange231 +range230: + call void @finch_panic_index(ptr @.str.178, i64 184, i64 %t166, i64 %t168) + unreachable +inrange231: + %t170 = extractvalue { ptr, i64, i64 } %t167, 0 + %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i64 %t166 + %t172 = load { ptr, i64, i64 }, ptr %t171 + store { ptr, i64, i64 } %t172, ptr %a173 + call void @finch_str_copy(ptr %a174, ptr %a173) + %t175 = load { ptr, i64, i64 }, ptr %a174 + %t176 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t175, ptr %a103 + store { ptr, i64, i64 } %t176, ptr %a177 + call void @finch_str_drop(ptr %a177) + store i1 true, ptr %a104 + %t178 = load i64, ptr %a114 + %t179 = add i64 %t178, 1 + store i64 %t179, ptr %a114 + br label %endif229 +else228: + %t180 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t180, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.179, i64 8, i64 0 }, ptr %a182 + %t183 = call i32 @finch_str_eq(ptr %a181, ptr %a182) + %t184 = icmp ne i32 %t183, 0 + br label %logic.from232 +logic.from232: + br i1 %t184, label %logic.rhs233, label %logic.end234 +logic.rhs233: + %t185 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t185, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.180, i64 5, i64 0 }, ptr %a187 + %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) + %t189 = icmp ne i32 %t188, 0 + br label %logic.rend235 +logic.rend235: + br label %logic.end234 +logic.end234: + %t190 = phi i1 [ false, %logic.from232 ], [ %t189, %logic.rend235 ] + br i1 %t190, label %then236, label %else237 +then236: + store i1 true, ptr %a105 + br label %endif238 +else237: + %t191 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t191, ptr %a192 + store { ptr, i64, i64 } { ptr @.str.181, i64 3, i64 0 }, ptr %a193 + %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) + %t195 = icmp ne i32 %t194, 0 + br i1 %t195, label %then239, label %else240 +then239: + %t196 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.182, i64 3, i64 0 }, ptr %a108 + store { ptr, i64, i64 } %t196, ptr %a197 + call void @finch_str_drop(ptr %a197) + br label %endif241 +else240: + %t198 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t198, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.183, i64 2, i64 0 }, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp ne i32 %t201, 0 + br label %logic.from242 +logic.from242: + br i1 %t202, label %logic.rhs243, label %logic.end244 +logic.rhs243: + %t203 = load i64, ptr %a114 + %t204 = add i64 %t203, 1 + %t205 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t206 = load i64, ptr %t205 + %t207 = icmp slt i64 %t204, %t206 + br label %logic.rend245 +logic.rend245: + br label %logic.end244 +logic.end244: + %t208 = phi i1 [ false, %logic.from242 ], [ %t207, %logic.rend245 ] + br i1 %t208, label %then246, label %else247 +then246: + %t209 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 + %t210 = load i64, ptr %a114 + %t211 = add i64 %t210, 1 + %t212 = load { ptr, i64, i64 }, ptr %a1 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 %t211, %t213 + br i1 %t214, label %range249, label %inrange250 +range249: + call void @finch_panic_index(ptr @.str.184, i64 192, i64 %t211, i64 %t213) + unreachable +inrange250: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds { ptr, i64, i64 }, ptr %t215, i64 %t211 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t217, ptr %a218 + call void @finch_str_copy(ptr %a219, ptr %a218) + %t220 = load { ptr, i64, i64 }, ptr %a219 + %t221 = load i64, ptr %t209 + %t222 = add i64 %t221, 1 + call void @finch_arr_reserve(ptr %a109, i64 %t222, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t223 = load ptr, ptr %a109 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i64 %t221 + store { ptr, i64, i64 } %t220, ptr %t224 + store i64 %t222, ptr %t209 + %t225 = load i64, ptr %a114 + %t226 = add i64 %t225, 1 + store i64 %t226, ptr %a114 + br label %endif248 +else247: + %t227 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t227, ptr %a228 + store { ptr, i64, i64 } { ptr @.str.186, i64 2, i64 0 }, ptr %a230 + %t231 = call i32 @finch_str_starts(ptr %a228, ptr %a230) + %t232 = icmp ne i32 %t231, 0 + br label %logic.from251 +logic.from251: + br i1 %t232, label %logic.rhs252, label %logic.end253 +logic.rhs252: + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t234 = load i64, ptr %t233 + %t235 = icmp sgt i64 %t234, 2 + br label %logic.rend254 +logic.rend254: + br label %logic.end253 +logic.end253: + %t236 = phi i1 [ false, %logic.from251 ], [ %t235, %logic.rend254 ] + br i1 %t236, label %then255, label %else256 +then255: + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %a109, i32 0, i32 1 + %t238 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t238, ptr %a239 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t242 = load i64, ptr %t241 + call void @finch_str_sub(ptr %a240, ptr %a239, i64 2, i64 %t242, ptr @.str.187, i64 195) + %t243 = load { ptr, i64, i64 }, ptr %a240 + %t244 = load i64, ptr %t237 + %t245 = add i64 %t244, 1 + call void @finch_arr_reserve(ptr %a109, i64 %t245, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t246 = load ptr, ptr %a109 + %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 + store { ptr, i64, i64 } %t243, ptr %t247 + store i64 %t245, ptr %t237 + br label %endif257 +else256: + %t248 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t248, ptr %a249 + store { ptr, i64, i64 } { ptr @.str.188, i64 2, i64 0 }, ptr %a250 + %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) + %t252 = icmp ne i32 %t251, 0 + br label %logic.from258 +logic.from258: + br i1 %t252, label %logic.rhs259, label %logic.end260 +logic.rhs259: + %t253 = load i64, ptr %a114 + %t254 = add i64 %t253, 1 + %t255 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t256 = load i64, ptr %t255 + %t257 = icmp slt i64 %t254, %t256 + br label %logic.rend261 +logic.rend261: + br label %logic.end260 +logic.end260: + %t258 = phi i1 [ false, %logic.from258 ], [ %t257, %logic.rend261 ] + br i1 %t258, label %then262, label %else263 +then262: + %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %a110, i32 0, i32 1 + %t260 = load i64, ptr %a114 + %t261 = add i64 %t260, 1 + %t262 = load { ptr, i64, i64 }, ptr %a1 + %t263 = extractvalue { ptr, i64, i64 } %t262, 1 + %t264 = icmp uge i64 %t261, %t263 + br i1 %t264, label %range265, label %inrange266 +range265: + call void @finch_panic_index(ptr @.str.189, i64 197, i64 %t261, i64 %t263) + unreachable +inrange266: + %t265 = extractvalue { ptr, i64, i64 } %t262, 0 + %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i64 %t261 + %t267 = load { ptr, i64, i64 }, ptr %t266 + store { ptr, i64, i64 } %t267, ptr %a268 + call void @finch_str_copy(ptr %a269, ptr %a268) + %t270 = load { ptr, i64, i64 }, ptr %a269 + %t271 = load i64, ptr %t259 + %t272 = add i64 %t271, 1 + call void @finch_arr_reserve(ptr %a110, i64 %t272, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t273 = load ptr, ptr %a110 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 + store { ptr, i64, i64 } %t270, ptr %t274 + store i64 %t272, ptr %t259 + %t275 = load i64, ptr %a114 + %t276 = add i64 %t275, 1 + store i64 %t276, ptr %a114 + br label %endif264 +else263: + %t277 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t277, ptr %a278 + store { ptr, i64, i64 } { ptr @.str.190, i64 9, i64 0 }, ptr %a279 + %t280 = call i32 @finch_str_eq(ptr %a278, ptr %a279) + %t281 = icmp ne i32 %t280, 0 + br label %logic.from267 +logic.from267: + br i1 %t281, label %logic.rhs268, label %logic.end269 +logic.rhs268: + %t282 = load i64, ptr %a114 + %t283 = add i64 %t282, 1 + %t284 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t285 = load i64, ptr %t284 + %t286 = icmp slt i64 %t283, %t285 + br label %logic.rend270 +logic.rend270: + br label %logic.end269 +logic.end269: + %t287 = phi i1 [ false, %logic.from267 ], [ %t286, %logic.rend270 ] + br i1 %t287, label %then271, label %else272 +then271: + %t288 = load i64, ptr %a114 + %t289 = add i64 %t288, 1 + %t290 = load { ptr, i64, i64 }, ptr %a1 + %t291 = extractvalue { ptr, i64, i64 } %t290, 1 + %t292 = icmp uge i64 %t289, %t291 + br i1 %t292, label %range274, label %inrange275 +range274: + call void @finch_panic_index(ptr @.str.191, i64 200, i64 %t289, i64 %t291) + unreachable +inrange275: + %t293 = extractvalue { ptr, i64, i64 } %t290, 0 + %t294 = getelementptr inbounds { ptr, i64, i64 }, ptr %t293, i64 %t289 + %t295 = load { ptr, i64, i64 }, ptr %t294 + store { ptr, i64, i64 } %t295, ptr %a296 + store { ptr, i64, i64 } { ptr @.str.193, i64 1, i64 0 }, ptr %a298 + call void @finch_str_split(ptr %a299, ptr %a296, ptr %a298) + %t300 = load { ptr, i64, i64 }, ptr %a299 + store { ptr, i64, i64 } %t300, ptr %a301 + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 + %t303 = load { ptr, i64, i64 }, ptr %a301 + %t304 = extractvalue { ptr, i64, i64 } %t303, 1 + %t305 = icmp uge i64 0, %t304 + br i1 %t305, label %range276, label %inrange277 +range276: + call void @finch_panic_index(ptr @.str.194, i64 201, i64 0, i64 %t304) + unreachable +inrange277: + %t306 = extractvalue { ptr, i64, i64 } %t303, 0 + %t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 0 + %t308 = load { ptr, i64, i64 }, ptr %t307 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_copy(ptr %a310, ptr %a309) + %t311 = load { ptr, i64, i64 }, ptr %a310 + %t312 = load i64, ptr %t302 + %t313 = add i64 %t312, 1 + call void @finch_arr_reserve(ptr %a111, i64 %t313, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t314 = load ptr, ptr %a111 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 %t312 + store { ptr, i64, i64 } %t311, ptr %t315 + store i64 %t313, ptr %t302 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %a112, i32 0, i32 1 + %t317 = load { ptr, i64, i64 }, ptr %a301 + %t318 = extractvalue { ptr, i64, i64 } %t317, 1 + %t319 = icmp uge i64 1, %t318 + br i1 %t319, label %range278, label %inrange279 +range278: + call void @finch_panic_index(ptr @.str.195, i64 202, i64 1, i64 %t318) + unreachable +inrange279: + %t320 = extractvalue { ptr, i64, i64 } %t317, 0 + %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i64 1 + %t322 = load { ptr, i64, i64 }, ptr %t321 + store { ptr, i64, i64 } %t322, ptr %a323 + call void @finch_str_copy(ptr %a324, ptr %a323) + %t325 = load { ptr, i64, i64 }, ptr %a324 + %t326 = load i64, ptr %t316 + %t327 = add i64 %t326, 1 + call void @finch_arr_reserve(ptr %a112, i64 %t327, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t328 = load ptr, ptr %a112 + %t329 = getelementptr inbounds { ptr, i64, i64 }, ptr %t328, i64 %t326 + store { ptr, i64, i64 } %t325, ptr %t329 + store i64 %t327, ptr %t316 + %t330 = load i64, ptr %a114 + %t331 = add i64 %t330, 1 + store i64 %t331, ptr %a114 + call void @finch.drop.arr_str(ptr %a301) + br label %endif273 +else272: + %t332 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t332, ptr %a333 + store { ptr, i64, i64 } { ptr @.str.196, i64 2, i64 0 }, ptr %a334 + %t335 = call i32 @finch_str_eq(ptr %a333, ptr %a334) + %t336 = icmp ne i32 %t335, 0 + br i1 %t336, label %then280, label %else281 +then280: + store i1 true, ptr %a106 + br label %endif282 +else281: + %t337 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t337, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.197, i64 8, i64 0 }, ptr %a339 + %t340 = call i32 @finch_str_eq(ptr %a338, ptr %a339) + %t341 = icmp ne i32 %t340, 0 + br label %logic.from283 +logic.from283: + br i1 %t341, label %logic.rhs284, label %logic.end285 +logic.rhs284: + %t342 = load i64, ptr %a114 + %t343 = add i64 %t342, 1 + %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t345 = load i64, ptr %t344 + %t346 = icmp slt i64 %t343, %t345 + br label %logic.rend286 +logic.rend286: + br label %logic.end285 +logic.end285: + %t347 = phi i1 [ false, %logic.from283 ], [ %t346, %logic.rend286 ] + br i1 %t347, label %then287, label %else288 +then287: + %t348 = load i64, ptr %a114 + %t349 = add i64 %t348, 1 + %t350 = load { ptr, i64, i64 }, ptr %a1 + %t351 = extractvalue { ptr, i64, i64 } %t350, 1 + %t352 = icmp uge i64 %t349, %t351 + br i1 %t352, label %range290, label %inrange291 +range290: + call void @finch_panic_index(ptr @.str.198, i64 207, i64 %t349, i64 %t351) + unreachable +inrange291: + %t353 = extractvalue { ptr, i64, i64 } %t350, 0 + %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i64 %t349 + %t355 = load { ptr, i64, i64 }, ptr %t354 + store { ptr, i64, i64 } %t355, ptr %a356 + call void @finch_str_copy(ptr %a357, ptr %a356) + %t358 = load { ptr, i64, i64 }, ptr %a357 + %t359 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t358, ptr %a107 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + %t361 = load i64, ptr %a114 + %t362 = add i64 %t361, 1 + store i64 %t362, ptr %a114 + br label %endif289 +else288: + %t363 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t363, ptr %a364 + store { ptr, i64, i64 } { ptr @.str.199, i64 3, i64 0 }, ptr %a365 + %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) + %t367 = icmp ne i32 %t366, 0 + br i1 %t367, label %then292, label %else293 +then292: + %t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t369 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t369, ptr %a370 + call void @finch_str_copy(ptr %a371, ptr %a370) + %t372 = load { ptr, i64, i64 }, ptr %a371 + %t373 = load i64, ptr %t368 + %t374 = add i64 %t373, 1 + call void @finch_arr_reserve(ptr %a113, i64 %t374, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t375 = load ptr, ptr %a113 + %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t373 + store { ptr, i64, i64 } %t372, ptr %t376 + store i64 %t374, ptr %t368 + br label %endif294 +else293: + call void @finch.main.usage() + br label %endif294 +endif294: + br label %endif289 +endif289: + br label %endif282 +endif282: + br label %endif273 +endif273: + br label %endif264 +endif264: + br label %endif257 +endif257: + br label %endif248 +endif248: + br label %endif241 +endif241: + br label %endif238 +endif238: + br label %endif229 +endif229: + br label %endif218 +endif218: + %t377 = load i64, ptr %a114 + %t378 = add i64 %t377, 1 + store i64 %t378, ptr %a114 + call void @finch_str_drop(ptr %a129) + br label %while.cond207 +while.end209: + %t379 = load { ptr, i64, i64 }, ptr %a107 + %t380 = call %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %t379) + store %S.platform.Target %t380, ptr %a381 + %t382 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t382, ptr %a383 + store { ptr, i64, i64 } { ptr @.str.200, i64 3, i64 0 }, ptr %a384 + %t385 = call i32 @finch_str_eq(ptr %a383, ptr %a384) + %t386 = icmp ne i32 %t385, 0 + br i1 %t386, label %then295, label %else296 +then295: + %t387 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t387, ptr %a389 + store { ptr, i64, i64 } { ptr @.str.201, i64 11, i64 0 }, ptr %a390 + call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) + store { ptr, i64, i64 } %t387, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a388 + %t393 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a394, i64 %t393) + %t395 = load { ptr, i64, i64 }, ptr %a394 + store { ptr, i64, i64 } %t392, ptr %a397 + store { ptr, i64, i64 } %t395, ptr %a398 + call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) + store { ptr, i64, i64 } %t392, ptr %a399 + call void @finch_str_drop(ptr %a399) + store { ptr, i64, i64 } %t395, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = load { ptr, i64, i64 }, ptr %a396 + store { ptr, i64, i64 } %t401, ptr %a403 + store { ptr, i64, i64 } { ptr @.str.202, i64 1, i64 0 }, ptr %a404 + call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) + store { ptr, i64, i64 } %t401, ptr %a405 + call void @finch_str_drop(ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a402 + %t407 = load { ptr, i64, i64 }, ptr %a77 + %t408 = call { ptr, i64, i64 } @finch.main.stem({ ptr, i64, i64 } %t407) + store { ptr, i64, i64 } %t406, ptr %a410 + store { ptr, i64, i64 } %t408, ptr %a411 + call void @finch_str_concat(ptr %a409, ptr %a410, ptr %a411) + store { ptr, i64, i64 } %t406, ptr %a412 + call void @finch_str_drop(ptr %a412) + store { ptr, i64, i64 } %t408, ptr %a413 + call void @finch_str_drop(ptr %a413) + %t414 = load { ptr, i64, i64 }, ptr %a409 + %t415 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 6 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t414, ptr %a418 + store { ptr, i64, i64 } %t416, ptr %a419 + call void @finch_str_concat(ptr %a417, ptr %a418, ptr %a419) + store { ptr, i64, i64 } %t414, ptr %a420 + call void @finch_str_drop(ptr %a420) + %t421 = load { ptr, i64, i64 }, ptr %a417 + %t422 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t421, ptr %a103 + store { ptr, i64, i64 } %t422, ptr %a423 + call void @finch_str_drop(ptr %a423) + br label %endif297 +else296: + %t424 = load i1, ptr %a105 + br label %logic.from298 +logic.from298: + br i1 %t424, label %logic.rhs299, label %logic.end300 +logic.rhs299: + %t425 = load i1, ptr %a104 + %t426 = xor i1 %t425, true + br label %logic.rend301 +logic.rend301: + br label %logic.end300 +logic.end300: + %t427 = phi i1 [ false, %logic.from298 ], [ %t426, %logic.rend301 ] + br i1 %t427, label %then302, label %else303 +then302: + %t428 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t429 = load i1, ptr %t428 + br i1 %t429, label %then305, label %else306 +then305: + %t430 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t430, ptr %a432 + store { ptr, i64, i64 } { ptr @.str.203, i64 4, i64 0 }, ptr %a433 + call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a431 + %t435 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t434, ptr %a103 + store { ptr, i64, i64 } %t435, ptr %a436 + call void @finch_str_drop(ptr %a436) + br label %endif307 +else306: + %t437 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 3 + %t438 = load i1, ptr %t437 + br i1 %t438, label %then308, label %else309 +then308: + %t439 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.204, i64 3, i64 0 }, ptr %a441 + store { ptr, i64, i64 } %t439, ptr %a442 + call void @finch_str_concat(ptr %a440, ptr %a441, ptr %a442) + %t443 = load { ptr, i64, i64 }, ptr %a440 + store { ptr, i64, i64 } %t443, ptr %a445 + store { ptr, i64, i64 } { ptr @.str.205, i64 6, i64 0 }, ptr %a446 + call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) + store { ptr, i64, i64 } %t443, ptr %a447 + call void @finch_str_drop(ptr %a447) + %t448 = load { ptr, i64, i64 }, ptr %a444 + %t449 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t448, ptr %a103 + store { ptr, i64, i64 } %t449, ptr %a450 + call void @finch_str_drop(ptr %a450) + br label %endif310 +else309: + %t451 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.206, i64 3, i64 0 }, ptr %a453 + store { ptr, i64, i64 } %t451, ptr %a454 + call void @finch_str_concat(ptr %a452, ptr %a453, ptr %a454) + %t455 = load { ptr, i64, i64 }, ptr %a452 + store { ptr, i64, i64 } %t455, ptr %a457 + store { ptr, i64, i64 } { ptr @.str.207, i64 3, i64 0 }, ptr %a458 + call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) + store { ptr, i64, i64 } %t455, ptr %a459 + call void @finch_str_drop(ptr %a459) + %t460 = load { ptr, i64, i64 }, ptr %a456 + %t461 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t460, ptr %a103 + store { ptr, i64, i64 } %t461, ptr %a462 + call void @finch_str_drop(ptr %a462) + br label %endif310 +endif310: + br label %endif307 +endif307: + br label %endif304 +else303: + %t463 = load i1, ptr %a104 + %t464 = xor i1 %t463, true + br i1 %t464, label %then311, label %endif313 +then311: + %t465 = load { ptr, i64, i64 }, ptr %a103 + %t466 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 6 + %t467 = load { ptr, i64, i64 }, ptr %t466 + store { ptr, i64, i64 } %t465, ptr %a469 + store { ptr, i64, i64 } %t467, ptr %a470 + call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) + %t471 = load { ptr, i64, i64 }, ptr %a468 + %t472 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t471, ptr %a103 + store { ptr, i64, i64 } %t472, ptr %a473 + call void @finch_str_drop(ptr %a473) + br label %endif313 +endif313: + br label %endif304 +endif304: + br label %endif297 +endif297: + store %S.main.Loader zeroinitializer, ptr %a474 + %t475 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 + %t476 = load { ptr, i64, i64 }, ptr %t475 + store { ptr, i64, i64 } { ptr @.str.208, i64 5, i64 0 }, ptr %t475 + store { ptr, i64, i64 } %t476, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t479 = load i1, ptr %t478 + br i1 %t479, label %then314, label %else315 +then314: + %t480 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 + %t481 = load { ptr, i64, i64 }, ptr %t480 + store { ptr, i64, i64 } { ptr @.str.209, i64 7, i64 0 }, ptr %t480 + store { ptr, i64, i64 } %t481, ptr %a482 + call void @finch_str_drop(ptr %a482) + br label %endif316 +else315: + %t483 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 3 + %t484 = load i1, ptr %t483 + br i1 %t484, label %then317, label %endif319 +then317: + %t485 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 3 + %t486 = load { ptr, i64, i64 }, ptr %t485 + store { ptr, i64, i64 } { ptr @.str.210, i64 5, i64 0 }, ptr %t485 + store { ptr, i64, i64 } %t486, ptr %a487 + call void @finch_str_drop(ptr %a487) + br label %endif319 +endif319: + br label %endif316 +endif316: + %t488 = load { ptr, i64, i64 }, ptr %a1 + %t489 = extractvalue { ptr, i64, i64 } %t488, 1 + %t490 = icmp uge i64 0, %t489 + br i1 %t490, label %range320, label %inrange321 +range320: + call void @finch_panic_index(ptr @.str.211, i64 238, i64 0, i64 %t489) + unreachable +inrange321: + %t491 = extractvalue { ptr, i64, i64 } %t488, 0 + %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 0 + %t493 = load { ptr, i64, i64 }, ptr %t492 + %t494 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t493) + store { ptr, i64, i64 } %t494, ptr %a496 + store { ptr, i64, i64 } { ptr @.str.212, i64 7, i64 0 }, ptr %a497 + call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497) + store { ptr, i64, i64 } %t494, ptr %a498 + call void @finch_str_drop(ptr %a498) + %t499 = load { ptr, i64, i64 }, ptr %a495 + %t500 = load { ptr, i64, i64 }, ptr %a1 + %t501 = extractvalue { ptr, i64, i64 } %t500, 1 + %t502 = icmp uge i64 0, %t501 + br i1 %t502, label %range322, label %inrange323 +range322: + call void @finch_panic_index(ptr @.str.213, i64 238, i64 0, i64 %t501) + unreachable +inrange323: + %t503 = extractvalue { ptr, i64, i64 } %t500, 0 + %t504 = getelementptr inbounds { ptr, i64, i64 }, ptr %t503, i64 0 + %t505 = load { ptr, i64, i64 }, ptr %t504 + %t506 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t505) + store { ptr, i64, i64 } %t506, ptr %a508 + store { ptr, i64, i64 } { ptr @.str.214, i64 4, i64 0 }, ptr %a509 + call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) + store { ptr, i64, i64 } %t506, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a507 + %t512 = load { ptr, i64, i64 }, ptr %a1 + %t513 = extractvalue { ptr, i64, i64 } %t512, 1 + %t514 = icmp uge i64 0, %t513 + br i1 %t514, label %range324, label %inrange325 +range324: + call void @finch_panic_index(ptr @.str.215, i64 238, i64 0, i64 %t513) + unreachable +inrange325: + %t515 = extractvalue { ptr, i64, i64 } %t512, 0 + %t516 = getelementptr inbounds { ptr, i64, i64 }, ptr %t515, i64 0 + %t517 = load { ptr, i64, i64 }, ptr %t516 + %t518 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t517) + store { ptr, i64, i64 } %t518, ptr %a520 + store { ptr, i64, i64 } { ptr @.str.216, i64 19, i64 0 }, ptr %a521 + call void @finch_str_concat(ptr %a519, ptr %a520, ptr %a521) + store { ptr, i64, i64 } %t518, ptr %a522 + call void @finch_str_drop(ptr %a522) + %t523 = load { ptr, i64, i64 }, ptr %a519 + %t524 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t525 = call ptr @finch_alloc(i64 %t524) + %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 0 + store { ptr, i64, i64 } %t499, ptr %t526 + %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 1 + store { ptr, i64, i64 } %t511, ptr %t527 + %t528 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 2 + store { ptr, i64, i64 } %t523, ptr %t528 + %t529 = getelementptr inbounds { ptr, i64, i64 }, ptr %t525, i64 3 + store { ptr, i64, i64 } { ptr @.str.217, i64 3, i64 0 }, ptr %t529 + %t530 = insertvalue { ptr, i64, i64 } undef, ptr %t525, 0 + %t531 = insertvalue { ptr, i64, i64 } %t530, i64 4, 1 + %t532 = insertvalue { ptr, i64, i64 } %t531, i64 4, 2 + store { ptr, i64, i64 } %t532, ptr %a533 + store i64 0, ptr %a534 + br label %each.cond326 +each.cond326: + %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %a533, i32 0, i32 1 + %t536 = load i64, ptr %t535 + %t537 = load i64, ptr %a534 + %t538 = icmp slt i64 %t537, %t536 + br i1 %t538, label %each.body327, label %each.end329 +each.body327: + %t539 = load ptr, ptr %a533 + %t540 = getelementptr inbounds { ptr, i64, i64 }, ptr %t539, i64 %t537 + %t541 = load { ptr, i64, i64 }, ptr %t540 + store { ptr, i64, i64 } %t541, ptr %a542 + %t543 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + %t544 = getelementptr inbounds { ptr, i64, i64 }, ptr %t543, i32 0, i32 1 + %t545 = load i64, ptr %t544 + %t546 = icmp eq i64 %t545, 0 + br label %logic.from330 +logic.from330: + br i1 %t546, label %logic.rhs331, label %logic.end332 +logic.rhs331: + %t547 = load { ptr, i64, i64 }, ptr %a542 + store { ptr, i64, i64 } %t547, ptr %a549 + store { ptr, i64, i64 } { ptr @.str.218, i64 9, i64 0 }, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t551, ptr %a552 + %t553 = call i32 @finch_file_exists(ptr %a552) + store { ptr, i64, i64 } %t551, ptr %a554 + call void @finch_str_drop(ptr %a554) + %t555 = icmp ne i32 %t553, 0 + br label %logic.rend333 +logic.rend333: + br label %logic.end332 +logic.end332: + %t556 = phi i1 [ false, %logic.from330 ], [ %t555, %logic.rend333 ] + br i1 %t556, label %then334, label %endif336 +then334: + %t557 = load { ptr, i64, i64 }, ptr %a542 + %t558 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + store { ptr, i64, i64 } %t557, ptr %a559 + call void @finch_str_copy(ptr %a560, ptr %a559) + %t561 = load { ptr, i64, i64 }, ptr %a560 + %t562 = load { ptr, i64, i64 }, ptr %t558 + store { ptr, i64, i64 } %t561, ptr %t558 + store { ptr, i64, i64 } %t562, ptr %a563 + call void @finch_str_drop(ptr %a563) + br label %endif336 +endif336: + br label %each.step328 +each.step328: + %t564 = load i64, ptr %a534 + %t565 = add i64 %t564, 1 + store i64 %t565, ptr %a534 + br label %each.cond326 +each.end329: + call void @finch.drop.arr_str(ptr %a533) + %t566 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + %t567 = getelementptr inbounds { ptr, i64, i64 }, ptr %t566, i32 0, i32 1 + %t568 = load i64, ptr %t567 + %t569 = icmp eq i64 %t568, 0 + br i1 %t569, label %then337, label %endif339 +then337: + %t570 = call { ptr, i64, i64 } @finch.main.unpack() + store { ptr, i64, i64 } %t570, ptr %a572 + store { ptr, i64, i64 } { ptr @.str.219, i64 4, i64 0 }, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + store { ptr, i64, i64 } %t570, ptr %a574 + call void @finch_str_drop(ptr %a574) + %t575 = load { ptr, i64, i64 }, ptr %a571 + %t576 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 4 + %t577 = load { ptr, i64, i64 }, ptr %t576 + store { ptr, i64, i64 } %t575, ptr %t576 + store { ptr, i64, i64 } %t577, ptr %a578 + call void @finch_str_drop(ptr %a578) + br label %endif339 +endif339: + %t579 = load { ptr, i64, i64 }, ptr %a111 + %t580 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 6 + store { ptr, i64, i64 } %t579, ptr %a581 + call void @finch.copy.arr_str(ptr %a582, ptr %a581) + %t583 = load { ptr, i64, i64 }, ptr %a582 + %t584 = load { ptr, i64, i64 }, ptr %t580 + store { ptr, i64, i64 } %t583, ptr %t580 + store { ptr, i64, i64 } %t584, ptr %a585 + call void @finch.drop.arr_str(ptr %a585) + %t586 = load { ptr, i64, i64 }, ptr %a112 + %t587 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 7 + store { ptr, i64, i64 } %t586, ptr %a588 + call void @finch.copy.arr_str(ptr %a589, ptr %a588) + %t590 = load { ptr, i64, i64 }, ptr %a589 + %t591 = load { ptr, i64, i64 }, ptr %t587 + store { ptr, i64, i64 } %t590, ptr %t587 + store { ptr, i64, i64 } %t591, ptr %a592 + call void @finch.drop.arr_str(ptr %a592) + %t593 = extractvalue { ptr, i64, i64 } { ptr @.str.220, i64 10, i64 0 }, 0 + %t594 = icmp eq ptr %t593, null + %t595 = select i1 %t594, ptr @.str.221, ptr %t593 + %t596 = call ptr @getenv(ptr %t595) + store { ptr, i64, i64 } zeroinitializer, ptr %a597 + call void @finch_str_from_c(ptr %a597, ptr %t596) + %t598 = load { ptr, i64, i64 }, ptr %a597 + store { ptr, i64, i64 } %t598, ptr %a599 + %t601 = call { ptr, i64, i64 } @finch.host.pathSeparator() + store { ptr, i64, i64 } %t601, ptr %a602 + call void @finch_str_split(ptr %a603, ptr %a599, ptr %a602) + store { ptr, i64, i64 } %t601, ptr %a604 + call void @finch_str_drop(ptr %a604) + %t605 = load { ptr, i64, i64 }, ptr %a603 + store { ptr, i64, i64 } %t605, ptr %a606 + store i64 0, ptr %a607 + br label %each.cond340 +each.cond340: + %t608 = getelementptr inbounds { ptr, i64, i64 }, ptr %a606, i32 0, i32 1 + %t609 = load i64, ptr %t608 + %t610 = load i64, ptr %a607 + %t611 = icmp slt i64 %t610, %t609 + br i1 %t611, label %each.body341, label %each.end343 +each.body341: + %t612 = load ptr, ptr %a606 + %t613 = getelementptr inbounds { ptr, i64, i64 }, ptr %t612, i64 %t610 + %t614 = load { ptr, i64, i64 }, ptr %t613 + store { ptr, i64, i64 } %t614, ptr %a615 + %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %a615, i32 0, i32 1 + %t617 = load i64, ptr %t616 + %t618 = icmp sgt i64 %t617, 0 + br i1 %t618, label %then344, label %endif346 +then344: + %t619 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 5 + %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %t619, i32 0, i32 1 + %t621 = load { ptr, i64, i64 }, ptr %a615 + store { ptr, i64, i64 } %t621, ptr %a622 + call void @finch_str_copy(ptr %a623, ptr %a622) + %t624 = load { ptr, i64, i64 }, ptr %a623 + %t625 = load i64, ptr %t620 + %t626 = add i64 %t625, 1 + call void @finch_arr_reserve(ptr %t619, i64 %t626, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t627 = load ptr, ptr %t619 + %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 + store { ptr, i64, i64 } %t624, ptr %t628 + store i64 %t626, ptr %t620 + br label %endif346 +endif346: + br label %each.step342 +each.step342: + %t629 = load i64, ptr %a607 + %t630 = add i64 %t629, 1 + store i64 %t630, ptr %a607 + br label %each.cond340 +each.end343: + call void @finch.drop.arr_str(ptr %a606) + %t631 = load { ptr, i64, i64 }, ptr %a77 + call void @finch.main.load(ptr %a474, { ptr, i64, i64 } %t631, { ptr, i64, i64 } { ptr @.str.223, i64 0, i64 0 }) + store { ptr, i64, i64 } zeroinitializer, ptr %a632 + store { ptr, i64, i64 } zeroinitializer, ptr %a633 + %t634 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t634, ptr %a635 + call void @finch.copy.arr_str(ptr %a636, ptr %a635) + %t637 = load { ptr, i64, i64 }, ptr %a636 + store { ptr, i64, i64 } %t637, ptr %a638 + %t639 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t639, ptr %a640 + call void @finch.copy.arr_str(ptr %a641, ptr %a640) + %t642 = load { ptr, i64, i64 }, ptr %a641 + store { ptr, i64, i64 } %t642, ptr %a643 + %t644 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 + store i64 0, ptr %a645 + br label %each.cond347 +each.cond347: + %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t644, i32 0, i32 1 + %t647 = load i64, ptr %t646 + %t648 = load i64, ptr %a645 + %t649 = icmp slt i64 %t648, %t647 + br i1 %t649, label %each.body348, label %each.end350 +each.body348: + %t650 = load ptr, ptr %t644 + %t651 = getelementptr inbounds %S.ast.Program, ptr %t650, i64 %t648 + %t652 = load %S.ast.Program, ptr %t651 + store %S.ast.Program %t652, ptr %a653 + %t654 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 1 + %t655 = load { ptr, i64, i64 }, ptr %t654 + %t656 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t655) + store { ptr, i64, i64 } %t656, ptr %a657 + %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %a638, i32 0, i32 1 + %t659 = load { ptr, i64, i64 }, ptr %a657 + store i64 -1, ptr %a660 + %t661 = load i64, ptr %t658 + %t662 = load ptr, ptr %a638 + store i64 0, ptr %a663 + br label %find.cond351 +find.cond351: + %t664 = load i64, ptr %a663 + %t665 = icmp slt i64 %t664, %t661 + br i1 %t665, label %find.body352, label %find.end355 +find.body352: + %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t662, i64 %t664 + %t667 = load { ptr, i64, i64 }, ptr %t666 + store { ptr, i64, i64 } %t667, ptr %a668 + store { ptr, i64, i64 } %t659, ptr %a669 + %t670 = call i32 @finch_str_eq(ptr %a668, ptr %a669) + %t671 = icmp ne i32 %t670, 0 + br i1 %t671, label %find.hit353, label %find.next354 +find.hit353: + store i64 %t664, ptr %a660 + br label %find.end355 +find.next354: + %t672 = add i64 %t664, 1 + store i64 %t672, ptr %a663 + br label %find.cond351 +find.end355: + %t673 = load i64, ptr %a660 + %t674 = icmp sge i64 %t673, 0 + %t675 = xor i1 %t674, true + br i1 %t675, label %then356, label %endif358 +then356: + %t676 = getelementptr inbounds { ptr, i64, i64 }, ptr %a638, i32 0, i32 1 + %t677 = load { ptr, i64, i64 }, ptr %a657 + store { ptr, i64, i64 } %t677, ptr %a678 + call void @finch_str_copy(ptr %a679, ptr %a678) + %t680 = load { ptr, i64, i64 }, ptr %a679 + %t681 = load i64, ptr %t676 + %t682 = add i64 %t681, 1 + call void @finch_arr_reserve(ptr %a638, i64 %t682, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t683 = load ptr, ptr %a638 + %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 + store { ptr, i64, i64 } %t680, ptr %t684 + store i64 %t682, ptr %t676 + br label %endif358 +endif358: + %t685 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t686 = getelementptr inbounds { ptr, i64, i64 }, ptr %t685, i32 0, i32 1 + %t687 = load i64, ptr %t686 + store i64 0, ptr %a688 + br label %for.cond359 +for.cond359: + %t689 = load i64, ptr %a688 + %t690 = icmp slt i64 %t689, %t687 + br i1 %t690, label %for.body360, label %for.end362 +for.body360: + %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %a633, i32 0, i32 1 + %t692 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t693 = load i64, ptr %a688 + %t694 = load { ptr, i64, i64 }, ptr %t692 + %t695 = extractvalue { ptr, i64, i64 } %t694, 1 + %t696 = icmp uge i64 %t693, %t695 + br i1 %t696, label %range363, label %inrange364 +range363: + call void @finch_panic_index(ptr @.str.224, i64 266, i64 %t693, i64 %t695) + unreachable +inrange364: + %t697 = extractvalue { ptr, i64, i64 } %t694, 0 + %t698 = getelementptr inbounds { ptr, i64, i64 }, ptr %t697, i64 %t693 + %t699 = load { ptr, i64, i64 }, ptr %t698 + store i64 -1, ptr %a700 + %t701 = load i64, ptr %t691 + %t702 = load ptr, ptr %a633 + store i64 0, ptr %a703 + br label %find.cond365 +find.cond365: + %t704 = load i64, ptr %a703 + %t705 = icmp slt i64 %t704, %t701 + br i1 %t705, label %find.body366, label %find.end369 +find.body366: + %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 + %t707 = load { ptr, i64, i64 }, ptr %t706 + store { ptr, i64, i64 } %t707, ptr %a708 + store { ptr, i64, i64 } %t699, ptr %a709 + %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) + %t711 = icmp ne i32 %t710, 0 + br i1 %t711, label %find.hit367, label %find.next368 +find.hit367: + store i64 %t704, ptr %a700 + br label %find.end369 +find.next368: + %t712 = add i64 %t704, 1 + store i64 %t712, ptr %a703 + br label %find.cond365 +find.end369: + %t713 = load i64, ptr %a700 + %t714 = icmp sge i64 %t713, 0 + %t715 = xor i1 %t714, true + br i1 %t715, label %then370, label %endif372 +then370: + %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a633, i32 0, i32 1 + %t717 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t718 = load i64, ptr %a688 + %t719 = load { ptr, i64, i64 }, ptr %t717 + %t720 = extractvalue { ptr, i64, i64 } %t719, 1 + %t721 = icmp uge i64 %t718, %t720 + br i1 %t721, label %range373, label %inrange374 +range373: + call void @finch_panic_index(ptr @.str.225, i64 267, i64 %t718, i64 %t720) + unreachable +inrange374: + %t722 = extractvalue { ptr, i64, i64 } %t719, 0 + %t723 = getelementptr inbounds { ptr, i64, i64 }, ptr %t722, i64 %t718 + %t724 = load { ptr, i64, i64 }, ptr %t723 + store { ptr, i64, i64 } %t724, ptr %a725 + call void @finch_str_copy(ptr %a726, ptr %a725) + %t727 = load { ptr, i64, i64 }, ptr %a726 + %t728 = load i64, ptr %t716 + %t729 = add i64 %t728, 1 + call void @finch_arr_reserve(ptr %a633, i64 %t729, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t730 = load ptr, ptr %a633 + %t731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t730, i64 %t728 + store { ptr, i64, i64 } %t727, ptr %t731 + store i64 %t729, ptr %t716 + %t732 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 + %t733 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 3 + %t734 = load i64, ptr %a688 + %t735 = load { ptr, i64, i64 }, ptr %t733 + %t736 = extractvalue { ptr, i64, i64 } %t735, 1 + %t737 = icmp uge i64 %t734, %t736 + br i1 %t737, label %range375, label %inrange376 +range375: + call void @finch_panic_index(ptr @.str.226, i64 268, i64 %t734, i64 %t736) + unreachable +inrange376: + %t738 = extractvalue { ptr, i64, i64 } %t735, 0 + %t739 = getelementptr inbounds { ptr, i64, i64 }, ptr %t738, i64 %t734 + %t740 = load { ptr, i64, i64 }, ptr %t739 + store { ptr, i64, i64 } %t740, ptr %a741 + call void @finch_str_copy(ptr %a742, ptr %a741) + %t743 = load { ptr, i64, i64 }, ptr %a742 + %t744 = insertvalue %S.cimport.Header zeroinitializer, { ptr, i64, i64 } %t743, 0 + %t745 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 4 + %t746 = load i64, ptr %a688 + %t747 = load { ptr, i64, i64 }, ptr %t745 + %t748 = extractvalue { ptr, i64, i64 } %t747, 1 + %t749 = icmp uge i64 %t746, %t748 + br i1 %t749, label %range377, label %inrange378 +range377: + call void @finch_panic_index(ptr @.str.227, i64 268, i64 %t746, i64 %t748) + unreachable +inrange378: + %t750 = extractvalue { ptr, i64, i64 } %t747, 0 + %t751 = getelementptr inbounds { ptr, i64, i64 }, ptr %t750, i64 %t746 + %t752 = load { ptr, i64, i64 }, ptr %t751 + store { ptr, i64, i64 } %t752, ptr %a753 + call void @finch_str_copy(ptr %a754, ptr %a753) + %t755 = load { ptr, i64, i64 }, ptr %a754 + %t756 = insertvalue %S.cimport.Header %t744, { ptr, i64, i64 } %t755, 1 + %t757 = load i64, ptr %t732 + %t758 = add i64 %t757, 1 + call void @finch_arr_reserve(ptr %a632, i64 %t758, i64 ptrtoint (ptr getelementptr (%S.cimport.Header, ptr null, i32 1) to i64)) + %t759 = load ptr, ptr %a632 + %t760 = getelementptr inbounds %S.cimport.Header, ptr %t759, i64 %t757 + store %S.cimport.Header %t756, ptr %t760 + store i64 %t758, ptr %t732 + br label %endif372 +endif372: + br label %for.step361 +for.step361: + %t761 = load i64, ptr %a688 + %t762 = add i64 %t761, 1 + store i64 %t762, ptr %a688 + br label %for.cond359 +for.end362: + %t763 = getelementptr inbounds %S.ast.Program, ptr %a653, i32 0, i32 5 + store i64 0, ptr %a764 + br label %each.cond379 +each.cond379: + %t765 = getelementptr inbounds { ptr, i64, i64 }, ptr %t763, i32 0, i32 1 + %t766 = load i64, ptr %t765 + %t767 = load i64, ptr %a764 + %t768 = icmp slt i64 %t767, %t766 + br i1 %t768, label %each.body380, label %each.end382 +each.body380: + %t769 = load ptr, ptr %t763 + %t770 = getelementptr inbounds { ptr, i64, i64 }, ptr %t769, i64 %t767 + %t771 = load { ptr, i64, i64 }, ptr %t770 + store { ptr, i64, i64 } %t771, ptr %a772 + %t773 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t773, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.229, i64 2, i64 0 }, ptr %a776 + %t777 = call i32 @finch_str_ends(ptr %a774, ptr %a776) + %t778 = icmp ne i32 %t777, 0 + br label %logic.from383 +logic.from383: + br i1 %t778, label %logic.end385, label %logic.rhs384 +logic.rhs384: + %t779 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t779, ptr %a780 + store { ptr, i64, i64 } { ptr @.str.231, i64 2, i64 0 }, ptr %a782 + %t783 = call i32 @finch_str_ends(ptr %a780, ptr %a782) + %t784 = icmp ne i32 %t783, 0 + br label %logic.rend386 +logic.rend386: + br label %logic.end385 +logic.end385: + %t785 = phi i1 [ true, %logic.from383 ], [ %t784, %logic.rend386 ] + br label %logic.from387 +logic.from387: + br i1 %t785, label %logic.end389, label %logic.rhs388 +logic.rhs388: + %t786 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t786, ptr %a787 + store { ptr, i64, i64 } { ptr @.str.233, i64 2, i64 0 }, ptr %a789 + %t790 = call i32 @finch_str_ends(ptr %a787, ptr %a789) + %t791 = icmp ne i32 %t790, 0 + br label %logic.rend390 +logic.rend390: + br label %logic.end389 +logic.end389: + %t792 = phi i1 [ true, %logic.from387 ], [ %t791, %logic.rend390 ] + br i1 %t792, label %then391, label %else392 +then391: + %t793 = getelementptr inbounds { ptr, i64, i64 }, ptr %a643, i32 0, i32 1 + %t794 = load { ptr, i64, i64 }, ptr %a657 + store { ptr, i64, i64 } %t794, ptr %a796 + store { ptr, i64, i64 } { ptr @.str.234, i64 1, i64 0 }, ptr %a797 + call void @finch_str_concat(ptr %a795, ptr %a796, ptr %a797) + %t798 = load { ptr, i64, i64 }, ptr %a795 + %t799 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t798, ptr %a801 + store { ptr, i64, i64 } %t799, ptr %a802 + call void @finch_str_concat(ptr %a800, ptr %a801, ptr %a802) + store { ptr, i64, i64 } %t798, ptr %a803 + call void @finch_str_drop(ptr %a803) + %t804 = load { ptr, i64, i64 }, ptr %a800 + %t805 = load i64, ptr %t793 + %t806 = add i64 %t805, 1 + call void @finch_arr_reserve(ptr %a643, i64 %t806, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t807 = load ptr, ptr %a643 + %t808 = getelementptr inbounds { ptr, i64, i64 }, ptr %t807, i64 %t805 + store { ptr, i64, i64 } %t804, ptr %t808 + store i64 %t806, ptr %t793 + br label %endif393 +else392: + %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a643, i32 0, i32 1 + %t810 = load { ptr, i64, i64 }, ptr %a772 + store { ptr, i64, i64 } %t810, ptr %a811 + call void @finch_str_copy(ptr %a812, ptr %a811) + %t813 = load { ptr, i64, i64 }, ptr %a812 + %t814 = load i64, ptr %t809 + %t815 = add i64 %t814, 1 + call void @finch_arr_reserve(ptr %a643, i64 %t815, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t816 = load ptr, ptr %a643 + %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t814 + store { ptr, i64, i64 } %t813, ptr %t817 + store i64 %t815, ptr %t809 + br label %endif393 +endif393: + br label %each.step381 +each.step381: + %t818 = load i64, ptr %a764 + %t819 = add i64 %t818, 1 + store i64 %t819, ptr %a764 + br label %each.cond379 +each.end382: + call void @finch_str_drop(ptr %a657) + br label %each.step349 +each.step349: + %t820 = load i64, ptr %a645 + %t821 = add i64 %t820, 1 + store i64 %t821, ptr %a645 + br label %each.cond347 +each.end350: + store { ptr, i64, i64 } { ptr @.str.235, i64 0, i64 0 }, ptr %a822 + %t823 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 5 + %t824 = load i1, ptr %t823 + br label %logic.from394 +logic.from394: + br i1 %t824, label %logic.end396, label %logic.rhs395 +logic.rhs395: + %t825 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t826 = load i1, ptr %t825 + br label %logic.rend397 +logic.rend397: + br label %logic.end396 +logic.end396: + %t827 = phi i1 [ true, %logic.from394 ], [ %t826, %logic.rend397 ] + br i1 %t827, label %then398, label %endif400 +then398: + %t828 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 0 + %t829 = load { ptr, i64, i64 }, ptr %t828 + store { ptr, i64, i64 } %t829, ptr %a830 + call void @finch_str_copy(ptr %a831, ptr %a830) + %t832 = load { ptr, i64, i64 }, ptr %a831 + %t833 = load { ptr, i64, i64 }, ptr %a822 + store { ptr, i64, i64 } %t832, ptr %a822 + store { ptr, i64, i64 } %t833, ptr %a834 + call void @finch_str_drop(ptr %a834) + br label %endif400 +endif400: + %t835 = load { ptr, i64, i64 }, ptr %a632 + %t836 = load { ptr, i64, i64 }, ptr %a638 + %t837 = load { ptr, i64, i64 }, ptr %a822 + %t838 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 1 + %t839 = load i1, ptr %t838 + %t840 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 7 + %t841 = load { ptr, i64, i64 }, ptr %t840 + %t842 = call { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %t835, { ptr, i64, i64 } %t836, { ptr, i64, i64 } %t837, i1 %t839, { ptr, i64, i64 } %t841) + %t843 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 0 + %t844 = xor i1 %t843, true + %t845 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 2 + %t846 = extractvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t842, 1 + br i1 %t844, label %or.failed401, label %or.ok402 +or.failed401: + store { ptr, i64, i64 } %t845, ptr %a847 + %t848 = load { ptr, i64, i64 }, ptr %a847 + %t849 = extractvalue { ptr, i64, i64 } %t848, 1 + %t850 = trunc i64 %t849 to i32 + %t851 = extractvalue { ptr, i64, i64 } %t848, 0 + %t852 = icmp eq ptr %t851, null + %t853 = select i1 %t852, ptr @.str.236, ptr %t851 + %t854 = call i32 (ptr, ...) @printf(ptr @.str.237, i32 %t850, ptr %t853) + %t855 = call i32 (ptr, ...) @printf(ptr @.str.238) + call void @finch_str_drop(ptr %a847) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 1 +or.ok402: + store %S.cimport.CImports %t846, ptr %a856 + %t857 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 0 + %t858 = load { ptr, i64, i64 }, ptr %t857 + %t859 = getelementptr inbounds %S.main.Loader, ptr %a474, i32 0, i32 1 + %t860 = load { ptr, i64, i64 }, ptr %t859 + %t861 = load %S.cimport.CImports, ptr %a856 + %t862 = load i1, ptr %a105 + %t863 = insertvalue %S.gen.Options zeroinitializer, i1 %t862, 0 + %t864 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t864, ptr %a865 + store { ptr, i64, i64 } { ptr @.str.239, i64 5, i64 0 }, ptr %a866 + %t867 = call i32 @finch_str_eq(ptr %a865, ptr %a866) + %t868 = icmp ne i32 %t867, 0 + %t869 = insertvalue %S.gen.Options %t863, i1 %t868, 1 + %t870 = load i1, ptr %a106 + %t871 = insertvalue %S.gen.Options %t869, i1 %t870, 2 + %t872 = call { ptr, i64, i64 } @finch.host.cwd() + %t873 = insertvalue %S.gen.Options %t871, { ptr, i64, i64 } %t872, 3 + %t874 = load %S.platform.Target, ptr %a381 + store %S.platform.Target %t874, ptr %a875 + call void @finch.copy.S_platform_Target(ptr %a876, ptr %a875) + %t877 = load %S.platform.Target, ptr %a876 + %t878 = insertvalue %S.gen.Options %t873, %S.platform.Target %t877, 4 + %t879 = call { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %t858, { ptr, i64, i64 } %t860, %S.cimport.CImports %t861, %S.gen.Options %t878) + store %S.gen.Options %t878, ptr %a880 + call void @finch.drop.S_gen_Options(ptr %a880) + store { ptr, i64, i64 } %t879, ptr %a881 + %t882 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t882, ptr %a883 + store { ptr, i64, i64 } { ptr @.str.240, i64 2, i64 0 }, ptr %a884 + %t885 = call i32 @finch_str_eq(ptr %a883, ptr %a884) + %t886 = icmp ne i32 %t885, 0 + br label %logic.from409 +logic.from409: + br i1 %t886, label %logic.end411, label %logic.rhs410 +logic.rhs410: + %t887 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t887, ptr %a888 + store { ptr, i64, i64 } { ptr @.str.241, i64 5, i64 0 }, ptr %a889 + %t890 = call i32 @finch_str_eq(ptr %a888, ptr %a889) + %t891 = icmp ne i32 %t890, 0 + br label %logic.rend412 +logic.rend412: + br label %logic.end411 +logic.end411: + %t892 = phi i1 [ true, %logic.from409 ], [ %t891, %logic.rend412 ] + br i1 %t892, label %then413, label %endif415 +then413: + %t893 = load { ptr, i64, i64 }, ptr %a881 + %t894 = extractvalue { ptr, i64, i64 } %t893, 1 + %t895 = trunc i64 %t894 to i32 + %t896 = extractvalue { ptr, i64, i64 } %t893, 0 + %t897 = icmp eq ptr %t896, null + %t898 = select i1 %t897, ptr @.str.242, ptr %t896 + %t899 = call i32 (ptr, ...) @printf(ptr @.str.243, i32 %t895, ptr %t898) + %t900 = call i32 (ptr, ...) @printf(ptr @.str.244) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 0 +endif415: + %t901 = extractvalue { ptr, i64, i64 } { ptr @.str.245, i64 8, i64 0 }, 0 + %t902 = icmp eq ptr %t901, null + %t903 = select i1 %t902, ptr @.str.246, ptr %t901 + %t904 = call ptr @getenv(ptr %t903) + store { ptr, i64, i64 } zeroinitializer, ptr %a905 + call void @finch_str_from_c(ptr %a905, ptr %t904) + %t906 = load { ptr, i64, i64 }, ptr %a905 + store { ptr, i64, i64 } %t906, ptr %a907 + call void @finch_str_copy(ptr %a908, ptr %a907) + %t909 = load { ptr, i64, i64 }, ptr %a908 + store { ptr, i64, i64 } %t909, ptr %a910 + %t911 = getelementptr inbounds { ptr, i64, i64 }, ptr %a910, i32 0, i32 1 + %t912 = load i64, ptr %t911 + %t913 = icmp eq i64 %t912, 0 + br i1 %t913, label %then439, label %endif441 +then439: + %t914 = load { ptr, i64, i64 }, ptr %a1 + %t915 = extractvalue { ptr, i64, i64 } %t914, 1 + %t916 = icmp uge i64 0, %t915 + br i1 %t916, label %range442, label %inrange443 +range442: + call void @finch_panic_index(ptr @.str.247, i64 296, i64 0, i64 %t915) + unreachable +inrange443: + %t917 = extractvalue { ptr, i64, i64 } %t914, 0 + %t918 = getelementptr inbounds { ptr, i64, i64 }, ptr %t917, i64 0 + %t919 = load { ptr, i64, i64 }, ptr %t918 + %t920 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t919) + store { ptr, i64, i64 } %t920, ptr %a922 + store { ptr, i64, i64 } { ptr @.str.248, i64 22, i64 0 }, ptr %a923 + call void @finch_str_concat(ptr %a921, ptr %a922, ptr %a923) + store { ptr, i64, i64 } %t920, ptr %a924 + call void @finch_str_drop(ptr %a924) + %t925 = load { ptr, i64, i64 }, ptr %a921 + %t926 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t925, ptr %a910 + store { ptr, i64, i64 } %t926, ptr %a927 + call void @finch_str_drop(ptr %a927) + br label %endif441 +endif441: + %t928 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t928, ptr %a929 + %t930 = call i32 @finch_file_exists(ptr %a929) + %t931 = icmp ne i32 %t930, 0 + %t932 = xor i1 %t931, true + br i1 %t932, label %then444, label %endif446 +then444: + %t933 = load { ptr, i64, i64 }, ptr %a1 + %t934 = extractvalue { ptr, i64, i64 } %t933, 1 + %t935 = icmp uge i64 0, %t934 + br i1 %t935, label %range447, label %inrange448 +range447: + call void @finch_panic_index(ptr @.str.249, i64 299, i64 0, i64 %t934) + unreachable +inrange448: + %t936 = extractvalue { ptr, i64, i64 } %t933, 0 + %t937 = getelementptr inbounds { ptr, i64, i64 }, ptr %t936, i64 0 + %t938 = load { ptr, i64, i64 }, ptr %t937 + %t939 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t938) + store { ptr, i64, i64 } %t939, ptr %a941 + store { ptr, i64, i64 } { ptr @.str.250, i64 19, i64 0 }, ptr %a942 + call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) + store { ptr, i64, i64 } %t939, ptr %a943 + call void @finch_str_drop(ptr %a943) + %t944 = load { ptr, i64, i64 }, ptr %a940 + %t945 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t944, ptr %a910 + store { ptr, i64, i64 } %t945, ptr %a946 + call void @finch_str_drop(ptr %a946) + br label %endif446 +endif446: + %t947 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t947, ptr %a948 + %t949 = call i32 @finch_file_exists(ptr %a948) + %t950 = icmp ne i32 %t949, 0 + %t951 = xor i1 %t950, true + br i1 %t951, label %then449, label %endif451 +then449: + %t952 = load { ptr, i64, i64 }, ptr %a1 + %t953 = extractvalue { ptr, i64, i64 } %t952, 1 + %t954 = icmp uge i64 0, %t953 + br i1 %t954, label %range452, label %inrange453 +range452: + call void @finch_panic_index(ptr @.str.251, i64 302, i64 0, i64 %t953) + unreachable +inrange453: + %t955 = extractvalue { ptr, i64, i64 } %t952, 0 + %t956 = getelementptr inbounds { ptr, i64, i64 }, ptr %t955, i64 0 + %t957 = load { ptr, i64, i64 }, ptr %t956 + %t958 = call { ptr, i64, i64 } @finch.main.dirOf({ ptr, i64, i64 } %t957) + store { ptr, i64, i64 } %t958, ptr %a960 + store { ptr, i64, i64 } { ptr @.str.252, i64 34, i64 0 }, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t958, ptr %a962 + call void @finch_str_drop(ptr %a962) + %t963 = load { ptr, i64, i64 }, ptr %a959 + %t964 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t963, ptr %a910 + store { ptr, i64, i64 } %t964, ptr %a965 + call void @finch_str_drop(ptr %a965) + br label %endif451 +endif451: + %t966 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t966, ptr %a967 + %t968 = call i32 @finch_file_exists(ptr %a967) + %t969 = icmp ne i32 %t968, 0 + %t970 = xor i1 %t969, true + br label %logic.from454 +logic.from454: + br i1 %t970, label %logic.rhs455, label %logic.end456 +logic.rhs455: + store { ptr, i64, i64 } { ptr @.str.253, i64 18, i64 0 }, ptr %a971 + %t972 = call i32 @finch_file_exists(ptr %a971) + %t973 = icmp ne i32 %t972, 0 + br label %logic.rend457 +logic.rend457: + br label %logic.end456 +logic.end456: + %t974 = phi i1 [ false, %logic.from454 ], [ %t973, %logic.rend457 ] + br i1 %t974, label %then458, label %endif460 +then458: + %t975 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } { ptr @.str.254, i64 18, i64 0 }, ptr %a910 + store { ptr, i64, i64 } %t975, ptr %a976 + call void @finch_str_drop(ptr %a976) + br label %endif460 +endif460: + %t977 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t977, ptr %a978 + %t979 = call i32 @finch_file_exists(ptr %a978) + %t980 = icmp ne i32 %t979, 0 + %t981 = xor i1 %t980, true + br i1 %t981, label %then461, label %endif463 +then461: + %t982 = call { ptr, i64, i64 } @finch.main.unpack() + store { ptr, i64, i64 } %t982, ptr %a984 + store { ptr, i64, i64 } { ptr @.str.255, i64 19, i64 0 }, ptr %a985 + call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) + store { ptr, i64, i64 } %t982, ptr %a986 + call void @finch_str_drop(ptr %a986) + %t987 = load { ptr, i64, i64 }, ptr %a983 + %t988 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t987, ptr %a910 + store { ptr, i64, i64 } %t988, ptr %a989 + call void @finch_str_drop(ptr %a989) + br label %endif463 +endif463: + store { ptr, i64, i64 } { ptr @.str.256, i64 0, i64 0 }, ptr %a990 + %t991 = load i1, ptr %a105 + br i1 %t991, label %then464, label %endif466 +then464: + %t992 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } { ptr @.str.257, i64 6, i64 0 }, ptr %a990 + store { ptr, i64, i64 } %t992, ptr %a993 + call void @finch_str_drop(ptr %a993) + br label %endif466 +endif466: + %t994 = load i1, ptr %a106 + br i1 %t994, label %then467, label %endif469 +then467: + %t995 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t995, ptr %a997 + store { ptr, i64, i64 } { ptr @.str.258, i64 3, i64 0 }, ptr %a998 + call void @finch_str_concat(ptr %a996, ptr %a997, ptr %a998) + %t999 = load { ptr, i64, i64 }, ptr %a996 + %t1000 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t999, ptr %a990 + store { ptr, i64, i64 } %t1000, ptr %a1001 + call void @finch_str_drop(ptr %a1001) + br label %endif469 +endif469: + %t1002 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t1002, ptr %a1003 + call void @finch_str_copy(ptr %a1004, ptr %a1003) + %t1005 = load { ptr, i64, i64 }, ptr %a1004 + %t1006 = insertvalue %S.linker.Build zeroinitializer, { ptr, i64, i64 } %t1005, 0 + %t1007 = load { ptr, i64, i64 }, ptr %a881 + store { ptr, i64, i64 } %t1007, ptr %a1008 + call void @finch_str_copy(ptr %a1009, ptr %a1008) + %t1010 = load { ptr, i64, i64 }, ptr %a1009 + %t1011 = insertvalue %S.linker.Build %t1006, { ptr, i64, i64 } %t1010, 1 + %t1012 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t1012, ptr %a1013 + call void @finch_str_copy(ptr %a1014, ptr %a1013) + %t1015 = load { ptr, i64, i64 }, ptr %a1014 + %t1016 = insertvalue %S.linker.Build %t1011, { ptr, i64, i64 } %t1015, 2 + %t1017 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t1017, ptr %a1018 + call void @finch_str_copy(ptr %a1019, ptr %a1018) + %t1020 = load { ptr, i64, i64 }, ptr %a1019 + %t1021 = insertvalue %S.linker.Build %t1016, { ptr, i64, i64 } %t1020, 3 + %t1022 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t1022, ptr %a1023 + call void @finch_str_copy(ptr %a1024, ptr %a1023) + %t1025 = load { ptr, i64, i64 }, ptr %a1024 + %t1026 = insertvalue %S.linker.Build %t1021, { ptr, i64, i64 } %t1025, 4 + %t1027 = load i1, ptr %a105 + %t1028 = insertvalue %S.linker.Build %t1026, i1 %t1027, 5 + %t1029 = load { ptr, i64, i64 }, ptr %a643 + store { ptr, i64, i64 } %t1029, ptr %a1030 + call void @finch.copy.arr_str(ptr %a1031, ptr %a1030) + %t1032 = load { ptr, i64, i64 }, ptr %a1031 + %t1033 = insertvalue %S.linker.Build %t1028, { ptr, i64, i64 } %t1032, 6 + %t1034 = load %S.platform.Target, ptr %a381 + %t1035 = load %S.cimport.CImports, ptr %a856 + %t1036 = call i64 @finch.linker.build(%S.linker.Build %t1033, %S.platform.Target %t1034, %S.cimport.CImports %t1035) + store %S.linker.Build %t1033, ptr %a1037 + call void @finch.drop.S_linker_Build(ptr %a1037) + %t1038 = icmp ne i64 %t1036, 0 + br i1 %t1038, label %then470, label %endif472 +then470: + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 1 +endif472: + %t1039 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t1039, ptr %a1040 + store { ptr, i64, i64 } { ptr @.str.259, i64 3, i64 0 }, ptr %a1041 + %t1042 = call i32 @finch_str_eq(ptr %a1040, ptr %a1041) + %t1043 = icmp ne i32 %t1042, 0 + br i1 %t1043, label %then473, label %endif475 +then473: + store { ptr, i64, i64 } zeroinitializer, ptr %a1044 + store i64 0, ptr %a1045 + br label %each.cond476 +each.cond476: + %t1046 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t1047 = load i64, ptr %t1046 + %t1048 = load i64, ptr %a1045 + %t1049 = icmp slt i64 %t1048, %t1047 + br i1 %t1049, label %each.body477, label %each.end479 +each.body477: + %t1050 = load ptr, ptr %a113 + %t1051 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1050, i64 %t1048 + %t1052 = load { ptr, i64, i64 }, ptr %t1051 + store { ptr, i64, i64 } %t1052, ptr %a1053 + %t1054 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + %t1055 = load { ptr, i64, i64 }, ptr %a1053 + %t1056 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1055) + %t1057 = load i64, ptr %t1054 + %t1058 = add i64 %t1057, 1 + call void @finch_arr_reserve(ptr %a1044, i64 %t1058, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1059 = load ptr, ptr %a1044 + %t1060 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1059, i64 %t1057 + store { ptr, i64, i64 } %t1056, ptr %t1060 + store i64 %t1058, ptr %t1054 + br label %each.step478 +each.step478: + %t1061 = load i64, ptr %a1045 + %t1062 = add i64 %t1061, 1 + store i64 %t1062, ptr %a1045 + br label %each.cond476 +each.end479: + %t1063 = getelementptr inbounds %S.platform.Target, ptr %a381, i32 0, i32 8 + %t1064 = load { ptr, i64, i64 }, ptr %t1063 + %t1065 = load { ptr, i64, i64 }, ptr %a103 + %t1066 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t1065) + store { ptr, i64, i64 } %t1064, ptr %a1068 + store { ptr, i64, i64 } %t1066, ptr %a1069 + call void @finch_str_concat(ptr %a1067, ptr %a1068, ptr %a1069) + store { ptr, i64, i64 } %t1066, ptr %a1070 + call void @finch_str_drop(ptr %a1070) + %t1071 = load { ptr, i64, i64 }, ptr %a1067 + store { ptr, i64, i64 } %t1071, ptr %a1073 + store { ptr, i64, i64 } { ptr @.str.260, i64 1, i64 0 }, ptr %a1074 + call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) + store { ptr, i64, i64 } %t1071, ptr %a1075 + call void @finch_str_drop(ptr %a1075) + %t1076 = load { ptr, i64, i64 }, ptr %a1072 + %t1077 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1044, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.261, i64 1, i64 0 }, ptr %a1078 + call void @finch_str_join(ptr %a1079, ptr %a1044, ptr %a1078) + %t1080 = load { ptr, i64, i64 }, ptr %a1079 + store { ptr, i64, i64 } %t1076, ptr %a1082 + store { ptr, i64, i64 } %t1080, ptr %a1083 + call void @finch_str_concat(ptr %a1081, ptr %a1082, ptr %a1083) + store { ptr, i64, i64 } %t1076, ptr %a1084 + call void @finch_str_drop(ptr %a1084) + store { ptr, i64, i64 } %t1080, ptr %a1085 + call void @finch_str_drop(ptr %a1085) + %t1086 = load { ptr, i64, i64 }, ptr %a1081 + %t1087 = call i64 @finch.host.run({ ptr, i64, i64 } %t1086) + store { ptr, i64, i64 } %t1086, ptr %a1088 + call void @finch_str_drop(ptr %a1088) + store i64 %t1087, ptr %a1089 + %t1090 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.host.remove({ ptr, i64, i64 } %t1090) + %t1091 = load i64, ptr %a1089 + call void @finch.drop.arr_str(ptr %a1044) + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 %t1091 +endif475: + call void @finch_str_drop(ptr %a990) + call void @finch_str_drop(ptr %a910) + call void @finch_str_drop(ptr %a881) + call void @finch.drop.S_cimport_CImports(ptr %a856) + call void @finch_str_drop(ptr %a822) + call void @finch.drop.arr_str(ptr %a643) + call void @finch.drop.arr_str(ptr %a638) + call void @finch.drop.arr_str(ptr %a633) + call void @finch.drop.arr_S_cimport_Header(ptr %a632) + call void @finch.drop.S_main_Loader(ptr %a474) + call void @finch.drop.S_platform_Target(ptr %a381) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.arr_str(ptr %a112) + call void @finch.drop.arr_str(ptr %a111) + call void @finch.drop.arr_str(ptr %a110) + call void @finch.drop.arr_str(ptr %a109) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a103) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a67) + ret i64 0 +} + +define internal i1 @finch.lexer.isAlpha(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 97 + br label %logic.from480 +logic.from480: + br i1 %t3, label %logic.rhs481, label %logic.end482 +logic.rhs481: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 122 + br label %logic.rend483 +logic.rend483: + br label %logic.end482 +logic.end482: + %t6 = phi i1 [ false, %logic.from480 ], [ %t5, %logic.rend483 ] + br label %logic.from484 +logic.from484: + br i1 %t6, label %logic.end486, label %logic.rhs485 +logic.rhs485: + %t7 = load i8, ptr %a1 + %t8 = icmp uge i8 %t7, 65 + br label %logic.from487 +logic.from487: + br i1 %t8, label %logic.rhs488, label %logic.end489 +logic.rhs488: + %t9 = load i8, ptr %a1 + %t10 = icmp ule i8 %t9, 90 + br label %logic.rend490 +logic.rend490: + br label %logic.end489 +logic.end489: + %t11 = phi i1 [ false, %logic.from487 ], [ %t10, %logic.rend490 ] + br label %logic.rend491 +logic.rend491: + br label %logic.end486 +logic.end486: + %t12 = phi i1 [ true, %logic.from484 ], [ %t11, %logic.rend491 ] + br label %logic.from492 +logic.from492: + br i1 %t12, label %logic.end494, label %logic.rhs493 +logic.rhs493: + %t13 = load i8, ptr %a1 + %t14 = icmp eq i8 %t13, 95 + br label %logic.rend495 +logic.rend495: + br label %logic.end494 +logic.end494: + %t15 = phi i1 [ true, %logic.from492 ], [ %t14, %logic.rend495 ] + ret i1 %t15 +} + +define internal i1 @finch.lexer.isDigit(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 48 + br label %logic.from496 +logic.from496: + br i1 %t3, label %logic.rhs497, label %logic.end498 +logic.rhs497: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 57 + br label %logic.rend499 +logic.rend499: + br label %logic.end498 +logic.end498: + %t6 = phi i1 [ false, %logic.from496 ], [ %t5, %logic.rend499 ] + ret i1 %t6 +} + +define internal i1 @finch.lexer.isHex(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = call i1 @finch.lexer.isDigit(i8 %t2) + br label %logic.from500 +logic.from500: + br i1 %t3, label %logic.end502, label %logic.rhs501 +logic.rhs501: + %t4 = load i8, ptr %a1 + %t5 = icmp uge i8 %t4, 97 + br label %logic.from503 +logic.from503: + br i1 %t5, label %logic.rhs504, label %logic.end505 +logic.rhs504: + %t6 = load i8, ptr %a1 + %t7 = icmp ule i8 %t6, 102 + br label %logic.rend506 +logic.rend506: + br label %logic.end505 +logic.end505: + %t8 = phi i1 [ false, %logic.from503 ], [ %t7, %logic.rend506 ] + br label %logic.rend507 +logic.rend507: + br label %logic.end502 +logic.end502: + %t9 = phi i1 [ true, %logic.from500 ], [ %t8, %logic.rend507 ] + br label %logic.from508 +logic.from508: + br i1 %t9, label %logic.end510, label %logic.rhs509 +logic.rhs509: + %t10 = load i8, ptr %a1 + %t11 = icmp uge i8 %t10, 65 + br label %logic.from511 +logic.from511: + br i1 %t11, label %logic.rhs512, label %logic.end513 +logic.rhs512: + %t12 = load i8, ptr %a1 + %t13 = icmp ule i8 %t12, 70 + br label %logic.rend514 +logic.rend514: + br label %logic.end513 +logic.end513: + %t14 = phi i1 [ false, %logic.from511 ], [ %t13, %logic.rend514 ] + br label %logic.rend515 +logic.rend515: + br label %logic.end510 +logic.end510: + %t15 = phi i1 [ true, %logic.from508 ], [ %t14, %logic.rend515 ] + ret i1 %t15 +} + +define internal i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca i64, align 16 + %a34 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 21, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.262, i64 2, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.263, i64 6, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.264, i64 2, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.265, i64 4, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.266, i64 5, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.267, i64 3, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.268, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.269, i64 5, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.270, i64 8, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.271, i64 4, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.272, i64 5, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.273, i64 4, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.274, i64 6, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.275, i64 4, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.276, i64 6, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.277, i64 5, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 + store { ptr, i64, i64 } { ptr @.str.278, i64 2, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 + store { ptr, i64, i64 } { ptr @.str.279, i64 3, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 + store { ptr, i64, i64 } { ptr @.str.280, i64 4, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 + store { ptr, i64, i64 } { ptr @.str.281, i64 5, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 + store { ptr, i64, i64 } { ptr @.str.282, i64 6, i64 0 }, ptr %t24 + %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t26 = insertvalue { ptr, i64, i64 } %t25, i64 21, 1 + %t27 = insertvalue { ptr, i64, i64 } %t26, i64 21, 2 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 + %t30 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a31 + %t32 = load i64, ptr %t29 + %t33 = load ptr, ptr %a28 + store i64 0, ptr %a34 + br label %find.cond516 +find.cond516: + %t35 = load i64, ptr %a34 + %t36 = icmp slt i64 %t35, %t32 + br i1 %t36, label %find.body517, label %find.end520 +find.body517: + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t35 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + store { ptr, i64, i64 } %t30, ptr %a40 + %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br i1 %t42, label %find.hit518, label %find.next519 +find.hit518: + store i64 %t35, ptr %a31 + br label %find.end520 +find.next519: + %t43 = add i64 %t35, 1 + store i64 %t43, ptr %a34 + br label %find.cond516 +find.end520: + %t44 = load i64, ptr %a31 + %t45 = icmp sge i64 %t44, 0 + call void @finch.drop.arr_str(ptr %a28) + ret i1 %t45 +} + +define internal void @finch.lexer.fail(ptr %p0, i64 %p1, i64 %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store i64 %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic521, label %ok522 +panic521: + call void @finch_panic(ptr @.str.283, i64 41, ptr @.str.284) + unreachable +ok522: + %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %t7 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.285, i64 1, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + %t13 = load i64, ptr %a2 + call void @finch_str_from_int(ptr %a14, i64 %t13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.286, i64 1, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a28, i64 %t27) + %t29 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t26, ptr %a33 + call void @finch_str_drop(ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.287, i64 9, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t40, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t40, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = trunc i64 %t47 to i32 + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = icmp eq ptr %t49, null + %t51 = select i1 %t50, ptr @.str.288, ptr %t49 + %t52 = call i32 (ptr, ...) @printf(ptr @.str.289, i32 %t48, ptr %t51) + store { ptr, i64, i64 } %t46, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = call i32 (ptr, ...) @printf(ptr @.str.290) + %t55 = trunc i64 1 to i32 + %t56 = call i32 @fflush(ptr null) + call void @exit(i32 %t55) + ret void +} + +define internal i8 @finch.lexer.peek(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic523, label %ok524 +panic523: + call void @finch_panic(ptr @.str.291, i64 46, ptr @.str.292) + unreachable +ok524: + %t5 = getelementptr inbounds %S.lexer.Lexer, ptr %t3, i32 0, i32 2 + %t6 = load i64, ptr %t5 + %t7 = load i64, ptr %a2 + %t8 = add i64 %t6, %t7 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic525, label %ok526 +panic525: + call void @finch_panic(ptr @.str.293, i64 46, ptr @.str.294) + unreachable +ok526: + %t11 = getelementptr inbounds %S.lexer.Lexer, ptr %t9, i32 0, i32 0 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = icmp slt i64 %t8, %t13 + br i1 %t14, label %then527, label %endif529 +then527: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic530, label %ok531 +panic530: + call void @finch_panic(ptr @.str.295, i64 47, ptr @.str.296) + unreachable +ok531: + %t17 = getelementptr inbounds %S.lexer.Lexer, ptr %t15, i32 0, i32 0 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic532, label %ok533 +panic532: + call void @finch_panic(ptr @.str.297, i64 47, ptr @.str.298) + unreachable +ok533: + %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 2 + %t21 = load i64, ptr %t20 + %t22 = load i64, ptr %a2 + %t23 = add i64 %t21, %t22 + %t24 = load { ptr, i64, i64 }, ptr %t17 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range534, label %inrange535 +range534: + call void @finch_panic_index(ptr @.str.299, i64 47, i64 %t23, i64 %t25) + unreachable +inrange535: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 + %t29 = load i8, ptr %t28 + ret i8 %t29 +endif529: + %t30 = trunc i64 0 to i8 + ret i8 %t30 +} + +define internal void @finch.lexer.advance(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a15 = alloca i8, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic536, label %ok537 +panic536: + call void @finch_panic(ptr @.str.300, i64 53, ptr @.str.301) + unreachable +ok537: + %t4 = getelementptr inbounds %S.lexer.Lexer, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic538, label %ok539 +panic538: + call void @finch_panic(ptr @.str.302, i64 53, ptr @.str.303) + unreachable +ok539: + %t7 = getelementptr inbounds %S.lexer.Lexer, ptr %t5, i32 0, i32 2 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range540, label %inrange541 +range540: + call void @finch_panic_index(ptr @.str.304, i64 53, i64 %t8, i64 %t10) + unreachable +inrange541: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 + %t14 = load i8, ptr %t13 + store i8 %t14, ptr %a15 + %t16 = load i8, ptr %a15 + %t17 = icmp eq i8 %t16, 10 + br i1 %t17, label %then542, label %else543 +then542: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic545, label %ok546 +panic545: + call void @finch_panic(ptr @.str.305, i64 55, ptr @.str.306) + unreachable +ok546: + %t20 = getelementptr inbounds %S.lexer.Lexer, ptr %t18, i32 0, i32 3 + %t21 = load i64, ptr %t20 + %t22 = add i64 %t21, 1 + store i64 %t22, ptr %t20 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic547, label %ok548 +panic547: + call void @finch_panic(ptr @.str.307, i64 56, ptr @.str.308) + unreachable +ok548: + %t25 = getelementptr inbounds %S.lexer.Lexer, ptr %t23, i32 0, i32 4 + store i64 1, ptr %t25 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic549, label %ok550 +panic549: + call void @finch_panic(ptr @.str.309, i64 57, ptr @.str.310) + unreachable +ok550: + %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 5 + store i1 true, ptr %t28 + br label %endif544 +else543: + %t29 = load i8, ptr %a15 + %t30 = zext i8 %t29 to i64 + %t31 = and i64 %t30, 192 + %t32 = icmp ne i64 %t31, 128 + br i1 %t32, label %then551, label %endif553 +then551: + %t33 = load ptr, ptr %a1 + %t34 = icmp eq ptr %t33, null + br i1 %t34, label %panic554, label %ok555 +panic554: + call void @finch_panic(ptr @.str.311, i64 59, ptr @.str.312) + unreachable +ok555: + %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 4 + %t36 = load i64, ptr %t35 + %t37 = add i64 %t36, 1 + store i64 %t37, ptr %t35 + br label %endif553 +endif553: + br label %endif544 +endif544: + %t38 = load ptr, ptr %a1 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic556, label %ok557 +panic556: + call void @finch_panic(ptr @.str.313, i64 61, ptr @.str.314) + unreachable +ok557: + %t40 = getelementptr inbounds %S.lexer.Lexer, ptr %t38, i32 0, i32 2 + %t41 = load i64, ptr %t40 + %t42 = add i64 %t41, 1 + store i64 %t42, ptr %t40 + ret void +} + +define internal { ptr, i64, i64 } @finch.lexer.operator(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca i64, align 16 + %a57 = alloca i64, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.315, i64 2, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.316, i64 2, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.317, i64 2, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.318, i64 2, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.319, i64 2, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.320, i64 2, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.321, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.322, i64 2, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.323, i64 2, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.324, i64 2, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.325, i64 2, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.326, i64 2, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.327, i64 2, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.328, i64 2, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.329, i64 2, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.330, i64 2, i64 0 }, ptr %t19 + %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 + %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic558, label %ok559 +panic558: + call void @finch_panic(ptr @.str.331, i64 67, ptr @.str.332) + unreachable +ok559: + %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 2 + %t27 = load i64, ptr %t26 + %t28 = add i64 %t27, 1 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic560, label %ok561 +panic560: + call void @finch_panic(ptr @.str.333, i64 67, ptr @.str.334) + unreachable +ok561: + %t31 = getelementptr inbounds %S.lexer.Lexer, ptr %t29, i32 0, i32 0 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = icmp slt i64 %t28, %t33 + br i1 %t34, label %then562, label %endif564 +then562: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic565, label %ok566 +panic565: + call void @finch_panic(ptr @.str.335, i64 68, ptr @.str.336) + unreachable +ok566: + %t37 = getelementptr inbounds %S.lexer.Lexer, ptr %t35, i32 0, i32 0 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic567, label %ok568 +panic567: + call void @finch_panic(ptr @.str.338, i64 68, ptr @.str.339) + unreachable +ok568: + %t43 = getelementptr inbounds %S.lexer.Lexer, ptr %t41, i32 0, i32 2 + %t44 = load i64, ptr %t43 + %t45 = load ptr, ptr %a1 + %t46 = icmp eq ptr %t45, null + br i1 %t46, label %panic569, label %ok570 +panic569: + call void @finch_panic(ptr @.str.340, i64 68, ptr @.str.341) + unreachable +ok570: + %t47 = getelementptr inbounds %S.lexer.Lexer, ptr %t45, i32 0, i32 2 + %t48 = load i64, ptr %t47 + %t49 = add i64 %t48, 2 + call void @finch_str_sub(ptr %a40, ptr %a39, i64 %t44, i64 %t49, ptr @.str.337, i64 68) + %t50 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 + %t53 = load { ptr, i64, i64 }, ptr %a51 + store i64 -1, ptr %a54 + %t55 = load i64, ptr %t52 + %t56 = load ptr, ptr %a23 + store i64 0, ptr %a57 + br label %find.cond571 +find.cond571: + %t58 = load i64, ptr %a57 + %t59 = icmp slt i64 %t58, %t55 + br i1 %t59, label %find.body572, label %find.end575 +find.body572: + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t56, i64 %t58 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + store { ptr, i64, i64 } %t53, ptr %a63 + %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) + %t65 = icmp ne i32 %t64, 0 + br i1 %t65, label %find.hit573, label %find.next574 +find.hit573: + store i64 %t58, ptr %a54 + br label %find.end575 +find.next574: + %t66 = add i64 %t58, 1 + store i64 %t66, ptr %a57 + br label %find.cond571 +find.end575: + %t67 = load i64, ptr %a54 + %t68 = icmp sge i64 %t67, 0 + br i1 %t68, label %then576, label %endif578 +then576: + %t69 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.drop.arr_str(ptr %a23) + ret { ptr, i64, i64 } %t69 +endif578: + call void @finch_str_drop(ptr %a51) + br label %endif564 +endif564: + store { ptr, i64, i64 } { ptr @.str.342, i64 22, i64 0 }, ptr %a70 + %t71 = load ptr, ptr %a1 + %t72 = icmp eq ptr %t71, null + br i1 %t72, label %panic579, label %ok580 +panic579: + call void @finch_panic(ptr @.str.343, i64 74, ptr @.str.344) + unreachable +ok580: + %t73 = getelementptr inbounds %S.lexer.Lexer, ptr %t71, i32 0, i32 0 + %t74 = load { ptr, i64, i64 }, ptr %t73 + store { ptr, i64, i64 } %t74, ptr %a75 + %t77 = load ptr, ptr %a1 + %t78 = icmp eq ptr %t77, null + br i1 %t78, label %panic581, label %ok582 +panic581: + call void @finch_panic(ptr @.str.346, i64 74, ptr @.str.347) + unreachable +ok582: + %t79 = getelementptr inbounds %S.lexer.Lexer, ptr %t77, i32 0, i32 2 + %t80 = load i64, ptr %t79 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic583, label %ok584 +panic583: + call void @finch_panic(ptr @.str.348, i64 74, ptr @.str.349) + unreachable +ok584: + %t83 = getelementptr inbounds %S.lexer.Lexer, ptr %t81, i32 0, i32 2 + %t84 = load i64, ptr %t83 + %t85 = add i64 %t84, 1 + call void @finch_str_sub(ptr %a76, ptr %a75, i64 %t80, i64 %t85, ptr @.str.345, i64 74) + %t86 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t86, ptr %a87 + %t88 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t88, ptr %a89 + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i64 @finch_str_find(ptr %a89, ptr %a92) + %t94 = icmp sge i64 %t93, 0 + br i1 %t94, label %then585, label %endif587 +then585: + %t95 = load { ptr, i64, i64 }, ptr %a87 + call void @finch_str_drop(ptr %a70) + call void @finch.drop.arr_str(ptr %a23) + ret { ptr, i64, i64 } %t95 +endif587: + call void @finch_str_drop(ptr %a87) + call void @finch_str_drop(ptr %a70) + call void @finch.drop.arr_str(ptr %a23) + ret { ptr, i64, i64 } { ptr @.str.351, i64 0, i64 0 } +} + +define internal i8 @finch.lexer.escape(ptr %p0, i8 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i8, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i8 %p1, ptr %a2 + %t3 = load i8, ptr %a2 + %t4 = icmp eq i8 %t3, 110 + br i1 %t4, label %then588, label %endif590 +then588: + ret i8 10 +endif590: + %t5 = load i8, ptr %a2 + %t6 = icmp eq i8 %t5, 116 + br i1 %t6, label %then591, label %endif593 +then591: + ret i8 9 +endif593: + %t7 = load i8, ptr %a2 + %t8 = icmp eq i8 %t7, 114 + br i1 %t8, label %then594, label %endif596 +then594: + ret i8 13 +endif596: + %t9 = load i8, ptr %a2 + %t10 = icmp eq i8 %t9, 48 + br i1 %t10, label %then597, label %endif599 +then597: + %t11 = trunc i64 0 to i8 + ret i8 %t11 +endif599: + %t12 = load i8, ptr %a2 + %t13 = icmp eq i8 %t12, 92 + br label %logic.from600 +logic.from600: + br i1 %t13, label %logic.end602, label %logic.rhs601 +logic.rhs601: + %t14 = load i8, ptr %a2 + %t15 = icmp eq i8 %t14, 34 + br label %logic.rend603 +logic.rend603: + br label %logic.end602 +logic.end602: + %t16 = phi i1 [ true, %logic.from600 ], [ %t15, %logic.rend603 ] + br label %logic.from604 +logic.from604: + br i1 %t16, label %logic.end606, label %logic.rhs605 +logic.rhs605: + %t17 = load i8, ptr %a2 + %t18 = icmp eq i8 %t17, 39 + br label %logic.rend607 +logic.rend607: + br label %logic.end606 +logic.end606: + %t19 = phi i1 [ true, %logic.from604 ], [ %t18, %logic.rend607 ] + br i1 %t19, label %then608, label %endif610 +then608: + %t20 = load i8, ptr %a2 + ret i8 %t20 +endif610: + %t21 = load ptr, ptr %a1 + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic611, label %ok612 +panic611: + call void @finch_panic(ptr @.str.352, i64 97, ptr @.str.353) + unreachable +ok612: + %t24 = getelementptr inbounds %S.lexer.Lexer, ptr %t22, i32 0, i32 3 + %t25 = load i64, ptr %t24 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic613, label %ok614 +panic613: + call void @finch_panic(ptr @.str.354, i64 97, ptr @.str.355) + unreachable +ok614: + %t28 = getelementptr inbounds %S.lexer.Lexer, ptr %t26, i32 0, i32 4 + %t29 = load i64, ptr %t28 + %t30 = sub i64 %t29, 1 + %t31 = load i8, ptr %a2 + call void @finch_str_from_char(ptr %a32, i8 signext %t31) + %t33 = load { ptr, i64, i64 }, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.356, i64 16, i64 0 }, ptr %a35 + store { ptr, i64, i64 } %t33, ptr %a36 + call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a34 + call void @finch.lexer.fail(ptr %t21, i64 %t25, i64 %t30, { ptr, i64, i64 } %t38) + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load i8, ptr %a2 + ret i8 %t40 +} + +define internal void @finch.copy.S_lexer_Token(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lexer.Token, ptr %src + store %S.lexer.Token %t1, ptr %dst + %t2 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lexer.Token, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lexer.Token, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.drop.S_lexer_Lexer(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lexer.Lexer, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lexer.Lexer, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.lexer.lex({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca %S.lexer.Lexer, align 16 + %a18 = alloca ptr, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca i8, align 16 + %a98 = alloca i64, align 16 + %a103 = alloca i64, align 16 + %a169 = alloca %S.lexer.Token, align 16 + %a177 = alloca i64, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca i8, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca i8, align 16 + %a471 = alloca i8, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca i64, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca i64, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca %S.lexer.Token, align 16 + %a593 = alloca %S.lexer.Token, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + %t7 = insertvalue %S.lexer.Lexer zeroinitializer, { ptr, i64, i64 } %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch_str_copy(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + %t12 = insertvalue %S.lexer.Lexer %t7, { ptr, i64, i64 } %t11, 1 + %t13 = insertvalue %S.lexer.Lexer %t12, i64 0, 2 + %t14 = insertvalue %S.lexer.Lexer %t13, i64 1, 3 + %t15 = insertvalue %S.lexer.Lexer %t14, i64 1, 4 + %t16 = insertvalue %S.lexer.Lexer %t15, i1 true, 5 + store %S.lexer.Lexer %t16, ptr %a17 + store ptr %a17, ptr %a18 + store { ptr, i64, i64 } zeroinitializer, ptr %a19 + br label %while.cond615 +while.cond615: + %t20 = load ptr, ptr %a18 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic618, label %ok619 +panic618: + call void @finch_panic(ptr @.str.357, i64 105, ptr @.str.358) + unreachable +ok619: + %t22 = getelementptr inbounds %S.lexer.Lexer, ptr %t20, i32 0, i32 2 + %t23 = load i64, ptr %t22 + %t24 = load ptr, ptr %a18 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic620, label %ok621 +panic620: + call void @finch_panic(ptr @.str.359, i64 105, ptr @.str.360) + unreachable +ok621: + %t26 = getelementptr inbounds %S.lexer.Lexer, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = icmp slt i64 %t23, %t28 + br i1 %t29, label %while.body616, label %while.end617 +while.body616: + %t30 = load ptr, ptr %a18 + %t31 = icmp eq ptr %t30, null + br i1 %t31, label %panic622, label %ok623 +panic622: + call void @finch_panic(ptr @.str.361, i64 106, ptr @.str.362) + unreachable +ok623: + %t32 = getelementptr inbounds %S.lexer.Lexer, ptr %t30, i32 0, i32 0 + %t33 = load ptr, ptr %a18 + %t34 = icmp eq ptr %t33, null + br i1 %t34, label %panic624, label %ok625 +panic624: + call void @finch_panic(ptr @.str.363, i64 106, ptr @.str.364) + unreachable +ok625: + %t35 = getelementptr inbounds %S.lexer.Lexer, ptr %t33, i32 0, i32 2 + %t36 = load i64, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %t32 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range626, label %inrange627 +range626: + call void @finch_panic_index(ptr @.str.365, i64 106, i64 %t36, i64 %t38) + unreachable +inrange627: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds i8, ptr %t40, i64 %t36 + %t42 = load i8, ptr %t41 + store i8 %t42, ptr %a43 + %t44 = load i8, ptr %a43 + %t45 = icmp eq i8 %t44, 32 + br label %logic.from628 +logic.from628: + br i1 %t45, label %logic.end630, label %logic.rhs629 +logic.rhs629: + %t46 = load i8, ptr %a43 + %t47 = icmp eq i8 %t46, 9 + br label %logic.rend631 +logic.rend631: + br label %logic.end630 +logic.end630: + %t48 = phi i1 [ true, %logic.from628 ], [ %t47, %logic.rend631 ] + br label %logic.from632 +logic.from632: + br i1 %t48, label %logic.end634, label %logic.rhs633 +logic.rhs633: + %t49 = load i8, ptr %a43 + %t50 = icmp eq i8 %t49, 10 + br label %logic.rend635 +logic.rend635: + br label %logic.end634 +logic.end634: + %t51 = phi i1 [ true, %logic.from632 ], [ %t50, %logic.rend635 ] + br label %logic.from636 +logic.from636: + br i1 %t51, label %logic.end638, label %logic.rhs637 +logic.rhs637: + %t52 = load i8, ptr %a43 + %t53 = icmp eq i8 %t52, 13 + br label %logic.rend639 +logic.rend639: + br label %logic.end638 +logic.end638: + %t54 = phi i1 [ true, %logic.from636 ], [ %t53, %logic.rend639 ] + br i1 %t54, label %then640, label %endif642 +then640: + %t55 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t55) + br label %while.cond615 +endif642: + %t56 = load i8, ptr %a43 + %t57 = icmp eq i8 %t56, 47 + br label %logic.from643 +logic.from643: + br i1 %t57, label %logic.rhs644, label %logic.end645 +logic.rhs644: + %t58 = load ptr, ptr %a18 + %t59 = call i8 @finch.lexer.peek(ptr %t58, i64 1) + %t60 = icmp eq i8 %t59, 47 + br label %logic.rend646 +logic.rend646: + br label %logic.end645 +logic.end645: + %t61 = phi i1 [ false, %logic.from643 ], [ %t60, %logic.rend646 ] + br i1 %t61, label %then647, label %endif649 +then647: + br label %while.cond650 +while.cond650: + %t62 = load ptr, ptr %a18 + %t63 = icmp eq ptr %t62, null + br i1 %t63, label %panic653, label %ok654 +panic653: + call void @finch_panic(ptr @.str.366, i64 112, ptr @.str.367) + unreachable +ok654: + %t64 = getelementptr inbounds %S.lexer.Lexer, ptr %t62, i32 0, i32 2 + %t65 = load i64, ptr %t64 + %t66 = load ptr, ptr %a18 + %t67 = icmp eq ptr %t66, null + br i1 %t67, label %panic655, label %ok656 +panic655: + call void @finch_panic(ptr @.str.368, i64 112, ptr @.str.369) + unreachable +ok656: + %t68 = getelementptr inbounds %S.lexer.Lexer, ptr %t66, i32 0, i32 0 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = icmp slt i64 %t65, %t70 + br label %logic.from657 +logic.from657: + br i1 %t71, label %logic.rhs658, label %logic.end659 +logic.rhs658: + %t72 = load ptr, ptr %a18 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic660, label %ok661 +panic660: + call void @finch_panic(ptr @.str.370, i64 112, ptr @.str.371) + unreachable +ok661: + %t74 = getelementptr inbounds %S.lexer.Lexer, ptr %t72, i32 0, i32 0 + %t75 = load ptr, ptr %a18 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic662, label %ok663 +panic662: + call void @finch_panic(ptr @.str.372, i64 112, ptr @.str.373) + unreachable +ok663: + %t77 = getelementptr inbounds %S.lexer.Lexer, ptr %t75, i32 0, i32 2 + %t78 = load i64, ptr %t77 + %t79 = load { ptr, i64, i64 }, ptr %t74 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range664, label %inrange665 +range664: + call void @finch_panic_index(ptr @.str.374, i64 112, i64 %t78, i64 %t80) + unreachable +inrange665: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds i8, ptr %t82, i64 %t78 + %t84 = load i8, ptr %t83 + %t85 = icmp ne i8 %t84, 10 + br label %logic.rend666 +logic.rend666: + br label %logic.end659 +logic.end659: + %t86 = phi i1 [ false, %logic.from657 ], [ %t85, %logic.rend666 ] + br i1 %t86, label %while.body651, label %while.end652 +while.body651: + %t87 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t87) + br label %while.cond650 +while.end652: + br label %while.cond615 +endif649: + %t88 = load i8, ptr %a43 + %t89 = icmp eq i8 %t88, 47 + br label %logic.from667 +logic.from667: + br i1 %t89, label %logic.rhs668, label %logic.end669 +logic.rhs668: + %t90 = load ptr, ptr %a18 + %t91 = call i8 @finch.lexer.peek(ptr %t90, i64 1) + %t92 = icmp eq i8 %t91, 42 + br label %logic.rend670 +logic.rend670: + br label %logic.end669 +logic.end669: + %t93 = phi i1 [ false, %logic.from667 ], [ %t92, %logic.rend670 ] + br i1 %t93, label %then671, label %endif673 +then671: + %t94 = load ptr, ptr %a18 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic674, label %ok675 +panic674: + call void @finch_panic(ptr @.str.375, i64 118, ptr @.str.376) + unreachable +ok675: + %t96 = getelementptr inbounds %S.lexer.Lexer, ptr %t94, i32 0, i32 3 + %t97 = load i64, ptr %t96 + store i64 %t97, ptr %a98 + %t99 = load ptr, ptr %a18 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic676, label %ok677 +panic676: + call void @finch_panic(ptr @.str.377, i64 119, ptr @.str.378) + unreachable +ok677: + %t101 = getelementptr inbounds %S.lexer.Lexer, ptr %t99, i32 0, i32 4 + %t102 = load i64, ptr %t101 + store i64 %t102, ptr %a103 + %t104 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t104) + %t105 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t105) + br label %while.cond678 +while.cond678: + %t106 = load ptr, ptr %a18 + %t107 = icmp eq ptr %t106, null + br i1 %t107, label %panic681, label %ok682 +panic681: + call void @finch_panic(ptr @.str.379, i64 122, ptr @.str.380) + unreachable +ok682: + %t108 = getelementptr inbounds %S.lexer.Lexer, ptr %t106, i32 0, i32 2 + %t109 = load i64, ptr %t108 + %t110 = load ptr, ptr %a18 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic683, label %ok684 +panic683: + call void @finch_panic(ptr @.str.381, i64 122, ptr @.str.382) + unreachable +ok684: + %t112 = getelementptr inbounds %S.lexer.Lexer, ptr %t110, i32 0, i32 0 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = icmp slt i64 %t109, %t114 + br label %logic.from685 +logic.from685: + br i1 %t115, label %logic.rhs686, label %logic.end687 +logic.rhs686: + %t116 = load ptr, ptr %a18 + %t117 = icmp eq ptr %t116, null + br i1 %t117, label %panic688, label %ok689 +panic688: + call void @finch_panic(ptr @.str.383, i64 122, ptr @.str.384) + unreachable +ok689: + %t118 = getelementptr inbounds %S.lexer.Lexer, ptr %t116, i32 0, i32 0 + %t119 = load ptr, ptr %a18 + %t120 = icmp eq ptr %t119, null + br i1 %t120, label %panic690, label %ok691 +panic690: + call void @finch_panic(ptr @.str.385, i64 122, ptr @.str.386) + unreachable +ok691: + %t121 = getelementptr inbounds %S.lexer.Lexer, ptr %t119, i32 0, i32 2 + %t122 = load i64, ptr %t121 + %t123 = load { ptr, i64, i64 }, ptr %t118 + %t124 = extractvalue { ptr, i64, i64 } %t123, 1 + %t125 = icmp uge i64 %t122, %t124 + br i1 %t125, label %range692, label %inrange693 +range692: + call void @finch_panic_index(ptr @.str.387, i64 122, i64 %t122, i64 %t124) + unreachable +inrange693: + %t126 = extractvalue { ptr, i64, i64 } %t123, 0 + %t127 = getelementptr inbounds i8, ptr %t126, i64 %t122 + %t128 = load i8, ptr %t127 + %t129 = icmp eq i8 %t128, 42 + br label %logic.from694 +logic.from694: + br i1 %t129, label %logic.rhs695, label %logic.end696 +logic.rhs695: + %t130 = load ptr, ptr %a18 + %t131 = call i8 @finch.lexer.peek(ptr %t130, i64 1) + %t132 = icmp eq i8 %t131, 47 + br label %logic.rend697 +logic.rend697: + br label %logic.end696 +logic.end696: + %t133 = phi i1 [ false, %logic.from694 ], [ %t132, %logic.rend697 ] + %t134 = xor i1 %t133, true + br label %logic.rend698 +logic.rend698: + br label %logic.end687 +logic.end687: + %t135 = phi i1 [ false, %logic.from685 ], [ %t134, %logic.rend698 ] + br i1 %t135, label %while.body679, label %while.end680 +while.body679: + %t136 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t136) + br label %while.cond678 +while.end680: + %t137 = load ptr, ptr %a18 + %t138 = icmp eq ptr %t137, null + br i1 %t138, label %panic699, label %ok700 +panic699: + call void @finch_panic(ptr @.str.388, i64 125, ptr @.str.389) + unreachable +ok700: + %t139 = getelementptr inbounds %S.lexer.Lexer, ptr %t137, i32 0, i32 2 + %t140 = load i64, ptr %t139 + %t141 = load ptr, ptr %a18 + %t142 = icmp eq ptr %t141, null + br i1 %t142, label %panic701, label %ok702 +panic701: + call void @finch_panic(ptr @.str.390, i64 125, ptr @.str.391) + unreachable +ok702: + %t143 = getelementptr inbounds %S.lexer.Lexer, ptr %t141, i32 0, i32 0 + %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 + %t145 = load i64, ptr %t144 + %t146 = icmp sge i64 %t140, %t145 + br i1 %t146, label %then703, label %endif705 +then703: + %t147 = load ptr, ptr %a18 + %t148 = load i64, ptr %a98 + %t149 = load i64, ptr %a103 + call void @finch.lexer.fail(ptr %t147, i64 %t148, i64 %t149, { ptr, i64, i64 } { ptr @.str.392, i64 36, i64 0 }) + br label %endif705 +endif705: + %t150 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t150) + %t151 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t151) + br label %while.cond615 +endif673: + %t152 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.393, i64 0, i64 0 }, 0 + %t153 = insertvalue %S.lexer.Token %t152, { ptr, i64, i64 } { ptr @.str.394, i64 0, i64 0 }, 1 + %t154 = load ptr, ptr %a18 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic706, label %ok707 +panic706: + call void @finch_panic(ptr @.str.395, i64 133, ptr @.str.396) + unreachable +ok707: + %t156 = getelementptr inbounds %S.lexer.Lexer, ptr %t154, i32 0, i32 3 + %t157 = load i64, ptr %t156 + %t158 = insertvalue %S.lexer.Token %t153, i64 %t157, 2 + %t159 = load ptr, ptr %a18 + %t160 = icmp eq ptr %t159, null + br i1 %t160, label %panic708, label %ok709 +panic708: + call void @finch_panic(ptr @.str.397, i64 133, ptr @.str.398) + unreachable +ok709: + %t161 = getelementptr inbounds %S.lexer.Lexer, ptr %t159, i32 0, i32 4 + %t162 = load i64, ptr %t161 + %t163 = insertvalue %S.lexer.Token %t158, i64 %t162, 3 + %t164 = load ptr, ptr %a18 + %t165 = icmp eq ptr %t164, null + br i1 %t165, label %panic710, label %ok711 +panic710: + call void @finch_panic(ptr @.str.399, i64 133, ptr @.str.400) + unreachable +ok711: + %t166 = getelementptr inbounds %S.lexer.Lexer, ptr %t164, i32 0, i32 5 + %t167 = load i1, ptr %t166 + %t168 = insertvalue %S.lexer.Token %t163, i1 %t167, 4 + store %S.lexer.Token %t168, ptr %a169 + %t170 = load ptr, ptr %a18 + %t171 = icmp eq ptr %t170, null + br i1 %t171, label %panic712, label %ok713 +panic712: + call void @finch_panic(ptr @.str.401, i64 134, ptr @.str.402) + unreachable +ok713: + %t172 = getelementptr inbounds %S.lexer.Lexer, ptr %t170, i32 0, i32 5 + store i1 false, ptr %t172 + %t173 = load ptr, ptr %a18 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic714, label %ok715 +panic714: + call void @finch_panic(ptr @.str.403, i64 135, ptr @.str.404) + unreachable +ok715: + %t175 = getelementptr inbounds %S.lexer.Lexer, ptr %t173, i32 0, i32 2 + %t176 = load i64, ptr %t175 + store i64 %t176, ptr %a177 + %t178 = load i8, ptr %a43 + %t179 = call i1 @finch.lexer.isAlpha(i8 %t178) + br i1 %t179, label %then716, label %else717 +then716: + br label %while.cond719 +while.cond719: + %t180 = load ptr, ptr %a18 + %t181 = icmp eq ptr %t180, null + br i1 %t181, label %panic722, label %ok723 +panic722: + call void @finch_panic(ptr @.str.405, i64 137, ptr @.str.406) + unreachable +ok723: + %t182 = getelementptr inbounds %S.lexer.Lexer, ptr %t180, i32 0, i32 2 + %t183 = load i64, ptr %t182 + %t184 = load ptr, ptr %a18 + %t185 = icmp eq ptr %t184, null + br i1 %t185, label %panic724, label %ok725 +panic724: + call void @finch_panic(ptr @.str.407, i64 137, ptr @.str.408) + unreachable +ok725: + %t186 = getelementptr inbounds %S.lexer.Lexer, ptr %t184, i32 0, i32 0 + %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t186, i32 0, i32 1 + %t188 = load i64, ptr %t187 + %t189 = icmp slt i64 %t183, %t188 + br label %logic.from726 +logic.from726: + br i1 %t189, label %logic.rhs727, label %logic.end728 +logic.rhs727: + %t190 = load ptr, ptr %a18 + %t191 = icmp eq ptr %t190, null + br i1 %t191, label %panic729, label %ok730 +panic729: + call void @finch_panic(ptr @.str.409, i64 137, ptr @.str.410) + unreachable +ok730: + %t192 = getelementptr inbounds %S.lexer.Lexer, ptr %t190, i32 0, i32 0 + %t193 = load ptr, ptr %a18 + %t194 = icmp eq ptr %t193, null + br i1 %t194, label %panic731, label %ok732 +panic731: + call void @finch_panic(ptr @.str.411, i64 137, ptr @.str.412) + unreachable +ok732: + %t195 = getelementptr inbounds %S.lexer.Lexer, ptr %t193, i32 0, i32 2 + %t196 = load i64, ptr %t195 + %t197 = load { ptr, i64, i64 }, ptr %t192 + %t198 = extractvalue { ptr, i64, i64 } %t197, 1 + %t199 = icmp uge i64 %t196, %t198 + br i1 %t199, label %range733, label %inrange734 +range733: + call void @finch_panic_index(ptr @.str.413, i64 137, i64 %t196, i64 %t198) + unreachable +inrange734: + %t200 = extractvalue { ptr, i64, i64 } %t197, 0 + %t201 = getelementptr inbounds i8, ptr %t200, i64 %t196 + %t202 = load i8, ptr %t201 + %t203 = call i1 @finch.lexer.isAlpha(i8 %t202) + br label %logic.from735 +logic.from735: + br i1 %t203, label %logic.end737, label %logic.rhs736 +logic.rhs736: + %t204 = load ptr, ptr %a18 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic738, label %ok739 +panic738: + call void @finch_panic(ptr @.str.414, i64 137, ptr @.str.415) + unreachable +ok739: + %t206 = getelementptr inbounds %S.lexer.Lexer, ptr %t204, i32 0, i32 0 + %t207 = load ptr, ptr %a18 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic740, label %ok741 +panic740: + call void @finch_panic(ptr @.str.416, i64 137, ptr @.str.417) + unreachable +ok741: + %t209 = getelementptr inbounds %S.lexer.Lexer, ptr %t207, i32 0, i32 2 + %t210 = load i64, ptr %t209 + %t211 = load { ptr, i64, i64 }, ptr %t206 + %t212 = extractvalue { ptr, i64, i64 } %t211, 1 + %t213 = icmp uge i64 %t210, %t212 + br i1 %t213, label %range742, label %inrange743 +range742: + call void @finch_panic_index(ptr @.str.418, i64 137, i64 %t210, i64 %t212) + unreachable +inrange743: + %t214 = extractvalue { ptr, i64, i64 } %t211, 0 + %t215 = getelementptr inbounds i8, ptr %t214, i64 %t210 + %t216 = load i8, ptr %t215 + %t217 = call i1 @finch.lexer.isDigit(i8 %t216) + br label %logic.rend744 +logic.rend744: + br label %logic.end737 +logic.end737: + %t218 = phi i1 [ true, %logic.from735 ], [ %t217, %logic.rend744 ] + br label %logic.rend745 +logic.rend745: + br label %logic.end728 +logic.end728: + %t219 = phi i1 [ false, %logic.from726 ], [ %t218, %logic.rend745 ] + br i1 %t219, label %while.body720, label %while.end721 +while.body720: + %t220 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t220) + br label %while.cond719 +while.end721: + %t221 = load ptr, ptr %a18 + %t222 = icmp eq ptr %t221, null + br i1 %t222, label %panic746, label %ok747 +panic746: + call void @finch_panic(ptr @.str.419, i64 140, ptr @.str.420) + unreachable +ok747: + %t223 = getelementptr inbounds %S.lexer.Lexer, ptr %t221, i32 0, i32 0 + %t224 = load { ptr, i64, i64 }, ptr %t223 + store { ptr, i64, i64 } %t224, ptr %a225 + %t227 = load i64, ptr %a177 + %t228 = load ptr, ptr %a18 + %t229 = icmp eq ptr %t228, null + br i1 %t229, label %panic748, label %ok749 +panic748: + call void @finch_panic(ptr @.str.422, i64 140, ptr @.str.423) + unreachable +ok749: + %t230 = getelementptr inbounds %S.lexer.Lexer, ptr %t228, i32 0, i32 2 + %t231 = load i64, ptr %t230 + call void @finch_str_sub(ptr %a226, ptr %a225, i64 %t227, i64 %t231, ptr @.str.421, i64 140) + %t232 = load { ptr, i64, i64 }, ptr %a226 + %t233 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t234 = load { ptr, i64, i64 }, ptr %t233 + store { ptr, i64, i64 } %t232, ptr %t233 + store { ptr, i64, i64 } %t234, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t237 = load { ptr, i64, i64 }, ptr %t236 + store { ptr, i64, i64 } { ptr @.str.424, i64 5, i64 0 }, ptr %t236 + store { ptr, i64, i64 } %t237, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = call i1 @finch.lexer.isKeyword({ ptr, i64, i64 } %t240) + br i1 %t241, label %then750, label %endif752 +then750: + %t242 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t243 = load { ptr, i64, i64 }, ptr %t242 + %t244 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + store { ptr, i64, i64 } %t243, ptr %a245 + call void @finch_str_copy(ptr %a246, ptr %a245) + %t247 = load { ptr, i64, i64 }, ptr %a246 + %t248 = load { ptr, i64, i64 }, ptr %t244 + store { ptr, i64, i64 } %t247, ptr %t244 + store { ptr, i64, i64 } %t248, ptr %a249 + call void @finch_str_drop(ptr %a249) + br label %endif752 +endif752: + br label %endif718 +else717: + %t250 = load i8, ptr %a43 + %t251 = call i1 @finch.lexer.isDigit(i8 %t250) + br i1 %t251, label %then753, label %else754 +then753: + %t252 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } { ptr @.str.425, i64 3, i64 0 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_drop(ptr %a254) + %t255 = load i8, ptr %a43 + %t256 = icmp eq i8 %t255, 48 + br label %logic.from756 +logic.from756: + br i1 %t256, label %logic.rhs757, label %logic.end758 +logic.rhs757: + %t257 = load ptr, ptr %a18 + %t258 = call i8 @finch.lexer.peek(ptr %t257, i64 1) + %t259 = icmp eq i8 %t258, 120 + br label %logic.from759 +logic.from759: + br i1 %t259, label %logic.end761, label %logic.rhs760 +logic.rhs760: + %t260 = load ptr, ptr %a18 + %t261 = call i8 @finch.lexer.peek(ptr %t260, i64 1) + %t262 = icmp eq i8 %t261, 88 + br label %logic.rend762 +logic.rend762: + br label %logic.end761 +logic.end761: + %t263 = phi i1 [ true, %logic.from759 ], [ %t262, %logic.rend762 ] + br label %logic.rend763 +logic.rend763: + br label %logic.end758 +logic.end758: + %t264 = phi i1 [ false, %logic.from756 ], [ %t263, %logic.rend763 ] + br i1 %t264, label %then764, label %else765 +then764: + %t265 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t265) + %t266 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t266) + br label %while.cond767 +while.cond767: + %t267 = load ptr, ptr %a18 + %t268 = icmp eq ptr %t267, null + br i1 %t268, label %panic770, label %ok771 +panic770: + call void @finch_panic(ptr @.str.426, i64 150, ptr @.str.427) + unreachable +ok771: + %t269 = getelementptr inbounds %S.lexer.Lexer, ptr %t267, i32 0, i32 2 + %t270 = load i64, ptr %t269 + %t271 = load ptr, ptr %a18 + %t272 = icmp eq ptr %t271, null + br i1 %t272, label %panic772, label %ok773 +panic772: + call void @finch_panic(ptr @.str.428, i64 150, ptr @.str.429) + unreachable +ok773: + %t273 = getelementptr inbounds %S.lexer.Lexer, ptr %t271, i32 0, i32 0 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 + %t275 = load i64, ptr %t274 + %t276 = icmp slt i64 %t270, %t275 + br label %logic.from774 +logic.from774: + br i1 %t276, label %logic.rhs775, label %logic.end776 +logic.rhs775: + %t277 = load ptr, ptr %a18 + %t278 = icmp eq ptr %t277, null + br i1 %t278, label %panic777, label %ok778 +panic777: + call void @finch_panic(ptr @.str.430, i64 150, ptr @.str.431) + unreachable +ok778: + %t279 = getelementptr inbounds %S.lexer.Lexer, ptr %t277, i32 0, i32 0 + %t280 = load ptr, ptr %a18 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic779, label %ok780 +panic779: + call void @finch_panic(ptr @.str.432, i64 150, ptr @.str.433) + unreachable +ok780: + %t282 = getelementptr inbounds %S.lexer.Lexer, ptr %t280, i32 0, i32 2 + %t283 = load i64, ptr %t282 + %t284 = load { ptr, i64, i64 }, ptr %t279 + %t285 = extractvalue { ptr, i64, i64 } %t284, 1 + %t286 = icmp uge i64 %t283, %t285 + br i1 %t286, label %range781, label %inrange782 +range781: + call void @finch_panic_index(ptr @.str.434, i64 150, i64 %t283, i64 %t285) + unreachable +inrange782: + %t287 = extractvalue { ptr, i64, i64 } %t284, 0 + %t288 = getelementptr inbounds i8, ptr %t287, i64 %t283 + %t289 = load i8, ptr %t288 + %t290 = call i1 @finch.lexer.isHex(i8 %t289) + br label %logic.from783 +logic.from783: + br i1 %t290, label %logic.end785, label %logic.rhs784 +logic.rhs784: + %t291 = load ptr, ptr %a18 + %t292 = icmp eq ptr %t291, null + br i1 %t292, label %panic786, label %ok787 +panic786: + call void @finch_panic(ptr @.str.435, i64 150, ptr @.str.436) + unreachable +ok787: + %t293 = getelementptr inbounds %S.lexer.Lexer, ptr %t291, i32 0, i32 0 + %t294 = load ptr, ptr %a18 + %t295 = icmp eq ptr %t294, null + br i1 %t295, label %panic788, label %ok789 +panic788: + call void @finch_panic(ptr @.str.437, i64 150, ptr @.str.438) + unreachable +ok789: + %t296 = getelementptr inbounds %S.lexer.Lexer, ptr %t294, i32 0, i32 2 + %t297 = load i64, ptr %t296 + %t298 = load { ptr, i64, i64 }, ptr %t293 + %t299 = extractvalue { ptr, i64, i64 } %t298, 1 + %t300 = icmp uge i64 %t297, %t299 + br i1 %t300, label %range790, label %inrange791 +range790: + call void @finch_panic_index(ptr @.str.439, i64 150, i64 %t297, i64 %t299) + unreachable +inrange791: + %t301 = extractvalue { ptr, i64, i64 } %t298, 0 + %t302 = getelementptr inbounds i8, ptr %t301, i64 %t297 + %t303 = load i8, ptr %t302 + %t304 = icmp eq i8 %t303, 95 + br label %logic.rend792 +logic.rend792: + br label %logic.end785 +logic.end785: + %t305 = phi i1 [ true, %logic.from783 ], [ %t304, %logic.rend792 ] + br label %logic.rend793 +logic.rend793: + br label %logic.end776 +logic.end776: + %t306 = phi i1 [ false, %logic.from774 ], [ %t305, %logic.rend793 ] + br i1 %t306, label %while.body768, label %while.end769 +while.body768: + %t307 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t307) + br label %while.cond767 +while.end769: + br label %endif766 +else765: + br label %while.cond794 +while.cond794: + %t308 = load ptr, ptr %a18 + %t309 = icmp eq ptr %t308, null + br i1 %t309, label %panic797, label %ok798 +panic797: + call void @finch_panic(ptr @.str.440, i64 154, ptr @.str.441) + unreachable +ok798: + %t310 = getelementptr inbounds %S.lexer.Lexer, ptr %t308, i32 0, i32 2 + %t311 = load i64, ptr %t310 + %t312 = load ptr, ptr %a18 + %t313 = icmp eq ptr %t312, null + br i1 %t313, label %panic799, label %ok800 +panic799: + call void @finch_panic(ptr @.str.442, i64 154, ptr @.str.443) + unreachable +ok800: + %t314 = getelementptr inbounds %S.lexer.Lexer, ptr %t312, i32 0, i32 0 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 + %t316 = load i64, ptr %t315 + %t317 = icmp slt i64 %t311, %t316 + br label %logic.from801 +logic.from801: + br i1 %t317, label %logic.rhs802, label %logic.end803 +logic.rhs802: + %t318 = load ptr, ptr %a18 + %t319 = icmp eq ptr %t318, null + br i1 %t319, label %panic804, label %ok805 +panic804: + call void @finch_panic(ptr @.str.444, i64 154, ptr @.str.445) + unreachable +ok805: + %t320 = getelementptr inbounds %S.lexer.Lexer, ptr %t318, i32 0, i32 0 + %t321 = load ptr, ptr %a18 + %t322 = icmp eq ptr %t321, null + br i1 %t322, label %panic806, label %ok807 +panic806: + call void @finch_panic(ptr @.str.446, i64 154, ptr @.str.447) + unreachable +ok807: + %t323 = getelementptr inbounds %S.lexer.Lexer, ptr %t321, i32 0, i32 2 + %t324 = load i64, ptr %t323 + %t325 = load { ptr, i64, i64 }, ptr %t320 + %t326 = extractvalue { ptr, i64, i64 } %t325, 1 + %t327 = icmp uge i64 %t324, %t326 + br i1 %t327, label %range808, label %inrange809 +range808: + call void @finch_panic_index(ptr @.str.448, i64 154, i64 %t324, i64 %t326) + unreachable +inrange809: + %t328 = extractvalue { ptr, i64, i64 } %t325, 0 + %t329 = getelementptr inbounds i8, ptr %t328, i64 %t324 + %t330 = load i8, ptr %t329 + %t331 = call i1 @finch.lexer.isDigit(i8 %t330) + br label %logic.from810 +logic.from810: + br i1 %t331, label %logic.end812, label %logic.rhs811 +logic.rhs811: + %t332 = load ptr, ptr %a18 + %t333 = icmp eq ptr %t332, null + br i1 %t333, label %panic813, label %ok814 +panic813: + call void @finch_panic(ptr @.str.449, i64 154, ptr @.str.450) + unreachable +ok814: + %t334 = getelementptr inbounds %S.lexer.Lexer, ptr %t332, i32 0, i32 0 + %t335 = load ptr, ptr %a18 + %t336 = icmp eq ptr %t335, null + br i1 %t336, label %panic815, label %ok816 +panic815: + call void @finch_panic(ptr @.str.451, i64 154, ptr @.str.452) + unreachable +ok816: + %t337 = getelementptr inbounds %S.lexer.Lexer, ptr %t335, i32 0, i32 2 + %t338 = load i64, ptr %t337 + %t339 = load { ptr, i64, i64 }, ptr %t334 + %t340 = extractvalue { ptr, i64, i64 } %t339, 1 + %t341 = icmp uge i64 %t338, %t340 + br i1 %t341, label %range817, label %inrange818 +range817: + call void @finch_panic_index(ptr @.str.453, i64 154, i64 %t338, i64 %t340) + unreachable +inrange818: + %t342 = extractvalue { ptr, i64, i64 } %t339, 0 + %t343 = getelementptr inbounds i8, ptr %t342, i64 %t338 + %t344 = load i8, ptr %t343 + %t345 = icmp eq i8 %t344, 95 + br label %logic.rend819 +logic.rend819: + br label %logic.end812 +logic.end812: + %t346 = phi i1 [ true, %logic.from810 ], [ %t345, %logic.rend819 ] + br label %logic.rend820 +logic.rend820: + br label %logic.end803 +logic.end803: + %t347 = phi i1 [ false, %logic.from801 ], [ %t346, %logic.rend820 ] + br i1 %t347, label %while.body795, label %while.end796 +while.body795: + %t348 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t348) + br label %while.cond794 +while.end796: + %t349 = load ptr, ptr %a18 + %t350 = call i8 @finch.lexer.peek(ptr %t349, i64 0) + %t351 = icmp eq i8 %t350, 46 + br label %logic.from821 +logic.from821: + br i1 %t351, label %logic.rhs822, label %logic.end823 +logic.rhs822: + %t352 = load ptr, ptr %a18 + %t353 = call i8 @finch.lexer.peek(ptr %t352, i64 1) + %t354 = call i1 @finch.lexer.isDigit(i8 %t353) + br label %logic.rend824 +logic.rend824: + br label %logic.end823 +logic.end823: + %t355 = phi i1 [ false, %logic.from821 ], [ %t354, %logic.rend824 ] + br i1 %t355, label %then825, label %endif827 +then825: + %t356 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t357 = load { ptr, i64, i64 }, ptr %t356 + store { ptr, i64, i64 } { ptr @.str.454, i64 5, i64 0 }, ptr %t356 + store { ptr, i64, i64 } %t357, ptr %a358 + call void @finch_str_drop(ptr %a358) + %t359 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t359) + br label %while.cond828 +while.cond828: + %t360 = load ptr, ptr %a18 + %t361 = icmp eq ptr %t360, null + br i1 %t361, label %panic831, label %ok832 +panic831: + call void @finch_panic(ptr @.str.455, i64 160, ptr @.str.456) + unreachable +ok832: + %t362 = getelementptr inbounds %S.lexer.Lexer, ptr %t360, i32 0, i32 2 + %t363 = load i64, ptr %t362 + %t364 = load ptr, ptr %a18 + %t365 = icmp eq ptr %t364, null + br i1 %t365, label %panic833, label %ok834 +panic833: + call void @finch_panic(ptr @.str.457, i64 160, ptr @.str.458) + unreachable +ok834: + %t366 = getelementptr inbounds %S.lexer.Lexer, ptr %t364, i32 0, i32 0 + %t367 = getelementptr inbounds { ptr, i64, i64 }, ptr %t366, i32 0, i32 1 + %t368 = load i64, ptr %t367 + %t369 = icmp slt i64 %t363, %t368 + br label %logic.from835 +logic.from835: + br i1 %t369, label %logic.rhs836, label %logic.end837 +logic.rhs836: + %t370 = load ptr, ptr %a18 + %t371 = icmp eq ptr %t370, null + br i1 %t371, label %panic838, label %ok839 +panic838: + call void @finch_panic(ptr @.str.459, i64 160, ptr @.str.460) + unreachable +ok839: + %t372 = getelementptr inbounds %S.lexer.Lexer, ptr %t370, i32 0, i32 0 + %t373 = load ptr, ptr %a18 + %t374 = icmp eq ptr %t373, null + br i1 %t374, label %panic840, label %ok841 +panic840: + call void @finch_panic(ptr @.str.461, i64 160, ptr @.str.462) + unreachable +ok841: + %t375 = getelementptr inbounds %S.lexer.Lexer, ptr %t373, i32 0, i32 2 + %t376 = load i64, ptr %t375 + %t377 = load { ptr, i64, i64 }, ptr %t372 + %t378 = extractvalue { ptr, i64, i64 } %t377, 1 + %t379 = icmp uge i64 %t376, %t378 + br i1 %t379, label %range842, label %inrange843 +range842: + call void @finch_panic_index(ptr @.str.463, i64 160, i64 %t376, i64 %t378) + unreachable +inrange843: + %t380 = extractvalue { ptr, i64, i64 } %t377, 0 + %t381 = getelementptr inbounds i8, ptr %t380, i64 %t376 + %t382 = load i8, ptr %t381 + %t383 = call i1 @finch.lexer.isDigit(i8 %t382) + br label %logic.from844 +logic.from844: + br i1 %t383, label %logic.end846, label %logic.rhs845 +logic.rhs845: + %t384 = load ptr, ptr %a18 + %t385 = icmp eq ptr %t384, null + br i1 %t385, label %panic847, label %ok848 +panic847: + call void @finch_panic(ptr @.str.464, i64 160, ptr @.str.465) + unreachable +ok848: + %t386 = getelementptr inbounds %S.lexer.Lexer, ptr %t384, i32 0, i32 0 + %t387 = load ptr, ptr %a18 + %t388 = icmp eq ptr %t387, null + br i1 %t388, label %panic849, label %ok850 +panic849: + call void @finch_panic(ptr @.str.466, i64 160, ptr @.str.467) + unreachable +ok850: + %t389 = getelementptr inbounds %S.lexer.Lexer, ptr %t387, i32 0, i32 2 + %t390 = load i64, ptr %t389 + %t391 = load { ptr, i64, i64 }, ptr %t386 + %t392 = extractvalue { ptr, i64, i64 } %t391, 1 + %t393 = icmp uge i64 %t390, %t392 + br i1 %t393, label %range851, label %inrange852 +range851: + call void @finch_panic_index(ptr @.str.468, i64 160, i64 %t390, i64 %t392) + unreachable +inrange852: + %t394 = extractvalue { ptr, i64, i64 } %t391, 0 + %t395 = getelementptr inbounds i8, ptr %t394, i64 %t390 + %t396 = load i8, ptr %t395 + %t397 = icmp eq i8 %t396, 95 + br label %logic.rend853 +logic.rend853: + br label %logic.end846 +logic.end846: + %t398 = phi i1 [ true, %logic.from844 ], [ %t397, %logic.rend853 ] + br label %logic.rend854 +logic.rend854: + br label %logic.end837 +logic.end837: + %t399 = phi i1 [ false, %logic.from835 ], [ %t398, %logic.rend854 ] + br i1 %t399, label %while.body829, label %while.end830 +while.body829: + %t400 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t400) + br label %while.cond828 +while.end830: + br label %endif827 +endif827: + br label %endif766 +endif766: + %t401 = load ptr, ptr %a18 + %t402 = icmp eq ptr %t401, null + br i1 %t402, label %panic855, label %ok856 +panic855: + call void @finch_panic(ptr @.str.469, i64 165, ptr @.str.470) + unreachable +ok856: + %t403 = getelementptr inbounds %S.lexer.Lexer, ptr %t401, i32 0, i32 0 + %t404 = load { ptr, i64, i64 }, ptr %t403 + store { ptr, i64, i64 } %t404, ptr %a405 + %t407 = load i64, ptr %a177 + %t408 = load ptr, ptr %a18 + %t409 = icmp eq ptr %t408, null + br i1 %t409, label %panic857, label %ok858 +panic857: + call void @finch_panic(ptr @.str.472, i64 165, ptr @.str.473) + unreachable +ok858: + %t410 = getelementptr inbounds %S.lexer.Lexer, ptr %t408, i32 0, i32 2 + %t411 = load i64, ptr %t410 + call void @finch_str_sub(ptr %a406, ptr %a405, i64 %t407, i64 %t411, ptr @.str.471, i64 165) + %t412 = load { ptr, i64, i64 }, ptr %a406 + store { ptr, i64, i64 } %t412, ptr %a413 + store { ptr, i64, i64 } { ptr @.str.475, i64 1, i64 0 }, ptr %a415 + store { ptr, i64, i64 } { ptr @.str.476, i64 0, i64 0 }, ptr %a416 + call void @finch_str_replace(ptr %a414, ptr %a413, ptr %a415, ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a414 + store { ptr, i64, i64 } %t412, ptr %a418 + call void @finch_str_drop(ptr %a418) + %t419 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t420 = load { ptr, i64, i64 }, ptr %t419 + store { ptr, i64, i64 } %t417, ptr %t419 + store { ptr, i64, i64 } %t420, ptr %a421 + call void @finch_str_drop(ptr %a421) + br label %endif755 +else754: + %t422 = load i8, ptr %a43 + %t423 = icmp eq i8 %t422, 34 + br label %logic.from859 +logic.from859: + br i1 %t423, label %logic.end861, label %logic.rhs860 +logic.rhs860: + %t424 = load i8, ptr %a43 + %t425 = icmp eq i8 %t424, 39 + br label %logic.rend862 +logic.rend862: + br label %logic.end861 +logic.end861: + %t426 = phi i1 [ true, %logic.from859 ], [ %t425, %logic.rend862 ] + br i1 %t426, label %then863, label %else864 +then863: + %t427 = load i8, ptr %a43 + store i8 %t427, ptr %a428 + %t429 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t430 = load { ptr, i64, i64 }, ptr %t429 + store { ptr, i64, i64 } { ptr @.str.477, i64 6, i64 0 }, ptr %t429 + store { ptr, i64, i64 } %t430, ptr %a431 + call void @finch_str_drop(ptr %a431) + %t432 = load i8, ptr %a428 + %t433 = icmp eq i8 %t432, 39 + br i1 %t433, label %then866, label %endif868 +then866: + %t434 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + %t435 = load { ptr, i64, i64 }, ptr %t434 + store { ptr, i64, i64 } { ptr @.str.478, i64 4, i64 0 }, ptr %t434 + store { ptr, i64, i64 } %t435, ptr %a436 + call void @finch_str_drop(ptr %a436) + br label %endif868 +endif868: + %t437 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t437) + store { ptr, i64, i64 } zeroinitializer, ptr %a438 + br label %while.cond869 +while.cond869: + %t439 = load ptr, ptr %a18 + %t440 = call i8 @finch.lexer.peek(ptr %t439, i64 0) + %t441 = load i8, ptr %a428 + %t442 = icmp ne i8 %t440, %t441 + br i1 %t442, label %while.body870, label %while.end871 +while.body870: + %t443 = load ptr, ptr %a18 + %t444 = call i8 @finch.lexer.peek(ptr %t443, i64 0) + %t445 = trunc i64 0 to i8 + %t446 = icmp eq i8 %t444, %t445 + br label %logic.from872 +logic.from872: + br i1 %t446, label %logic.end874, label %logic.rhs873 +logic.rhs873: + %t447 = load ptr, ptr %a18 + %t448 = call i8 @finch.lexer.peek(ptr %t447, i64 0) + %t449 = icmp eq i8 %t448, 10 + br label %logic.rend875 +logic.rend875: + br label %logic.end874 +logic.end874: + %t450 = phi i1 [ true, %logic.from872 ], [ %t449, %logic.rend875 ] + br i1 %t450, label %then876, label %endif878 +then876: + %t451 = load i8, ptr %a428 + %t452 = icmp eq i8 %t451, 34 + br i1 %t452, label %then879, label %endif881 +then879: + %t453 = load ptr, ptr %a18 + %t454 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t455 = load i64, ptr %t454 + %t456 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t457 = load i64, ptr %t456 + call void @finch.lexer.fail(ptr %t453, i64 %t455, i64 %t457, { ptr, i64, i64 } { ptr @.str.479, i64 34, i64 0 }) + br label %endif881 +endif881: + %t458 = load ptr, ptr %a18 + %t459 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t460 = load i64, ptr %t459 + %t461 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t462 = load i64, ptr %t461 + call void @finch.lexer.fail(ptr %t458, i64 %t460, i64 %t462, { ptr, i64, i64 } { ptr @.str.480, i64 32, i64 0 }) + br label %endif878 +endif878: + %t463 = load ptr, ptr %a18 + %t464 = call i8 @finch.lexer.peek(ptr %t463, i64 0) + store i8 %t464, ptr %a465 + %t466 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t466) + %t467 = load i8, ptr %a465 + %t468 = icmp eq i8 %t467, 92 + br i1 %t468, label %then882, label %endif884 +then882: + %t469 = load ptr, ptr %a18 + %t470 = call i8 @finch.lexer.peek(ptr %t469, i64 0) + store i8 %t470, ptr %a471 + %t472 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t472) + %t473 = load ptr, ptr %a18 + %t474 = load i8, ptr %a471 + %t475 = call i8 @finch.lexer.escape(ptr %t473, i8 %t474) + store i8 %t475, ptr %a465 + br label %endif884 +endif884: + %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 + %t477 = load i8, ptr %a465 + call void @finch_str_from_char(ptr %a478, i8 signext %t477) + %t479 = load { ptr, i64, i64 }, ptr %a478 + %t480 = load i64, ptr %t476 + %t481 = add i64 %t480, 1 + call void @finch_arr_reserve(ptr %a438, i64 %t481, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t482 = load ptr, ptr %a438 + %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i64 %t480 + store { ptr, i64, i64 } %t479, ptr %t483 + store i64 %t481, ptr %t476 + br label %while.cond869 +while.end871: + %t484 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t484) + %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %a438, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.481, i64 0, i64 0 }, ptr %a486 + call void @finch_str_join(ptr %a487, ptr %a438, ptr %a486) + %t488 = load { ptr, i64, i64 }, ptr %a487 + %t489 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t490 = load { ptr, i64, i64 }, ptr %t489 + store { ptr, i64, i64 } %t488, ptr %t489 + store { ptr, i64, i64 } %t490, ptr %a491 + call void @finch_str_drop(ptr %a491) + %t492 = load i8, ptr %a428 + %t493 = icmp eq i8 %t492, 39 + br label %logic.from885 +logic.from885: + br i1 %t493, label %logic.rhs886, label %logic.end887 +logic.rhs886: + %t494 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i32 0, i32 1 + %t496 = load i64, ptr %t495 + %t497 = icmp ne i64 %t496, 1 + br label %logic.rend888 +logic.rend888: + br label %logic.end887 +logic.end887: + %t498 = phi i1 [ false, %logic.from885 ], [ %t497, %logic.rend888 ] + br i1 %t498, label %then889, label %endif891 +then889: + %t499 = load ptr, ptr %a18 + %t500 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t501 = load i64, ptr %t500 + %t502 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t503 = load i64, ptr %t502 + call void @finch.lexer.fail(ptr %t499, i64 %t501, i64 %t503, { ptr, i64, i64 } { ptr @.str.482, i64 44, i64 0 }) + br label %endif891 +endif891: + call void @finch.drop.arr_str(ptr %a438) + br label %endif865 +else864: + %t504 = load ptr, ptr %a18 + %t505 = call { ptr, i64, i64 } @finch.lexer.operator(ptr %t504) + store { ptr, i64, i64 } %t505, ptr %a506 + %t507 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 + %t508 = load i64, ptr %t507 + %t509 = icmp eq i64 %t508, 0 + br i1 %t509, label %then892, label %endif894 +then892: + store i64 1, ptr %a510 + %t511 = load i8, ptr %a43 + %t512 = zext i8 %t511 to i64 + %t513 = and i64 %t512, 224 + %t514 = icmp eq i64 %t513, 192 + br i1 %t514, label %then895, label %else896 +then895: + store i64 2, ptr %a510 + br label %endif897 +else896: + %t515 = load i8, ptr %a43 + %t516 = zext i8 %t515 to i64 + %t517 = and i64 %t516, 240 + %t518 = icmp eq i64 %t517, 224 + br i1 %t518, label %then898, label %else899 +then898: + store i64 3, ptr %a510 + br label %endif900 +else899: + %t519 = load i8, ptr %a43 + %t520 = zext i8 %t519 to i64 + %t521 = and i64 %t520, 248 + %t522 = icmp eq i64 %t521, 240 + br i1 %t522, label %then901, label %endif903 +then901: + store i64 4, ptr %a510 + br label %endif903 +endif903: + br label %endif900 +endif900: + br label %endif897 +endif897: + store { ptr, i64, i64 } { ptr @.str.483, i64 0, i64 0 }, ptr %a523 + %t524 = load i8, ptr %a43 + %t525 = zext i8 %t524 to i64 + %t526 = icmp sge i64 %t525, 128 + br i1 %t526, label %then904, label %endif906 +then904: + %t527 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.484, i64 74, i64 0 }, ptr %a523 + store { ptr, i64, i64 } %t527, ptr %a528 + call void @finch_str_drop(ptr %a528) + br label %endif906 +endif906: + %t529 = load ptr, ptr %a18 + %t530 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 2 + %t531 = load i64, ptr %t530 + %t532 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 3 + %t533 = load i64, ptr %t532 + %t534 = load ptr, ptr %a18 + %t535 = icmp eq ptr %t534, null + br i1 %t535, label %panic907, label %ok908 +panic907: + call void @finch_panic(ptr @.str.486, i64 211, ptr @.str.487) + unreachable +ok908: + %t536 = getelementptr inbounds %S.lexer.Lexer, ptr %t534, i32 0, i32 0 + %t537 = load { ptr, i64, i64 }, ptr %t536 + store { ptr, i64, i64 } %t537, ptr %a538 + %t540 = load ptr, ptr %a18 + %t541 = icmp eq ptr %t540, null + br i1 %t541, label %panic909, label %ok910 +panic909: + call void @finch_panic(ptr @.str.489, i64 211, ptr @.str.490) + unreachable +ok910: + %t542 = getelementptr inbounds %S.lexer.Lexer, ptr %t540, i32 0, i32 2 + %t543 = load i64, ptr %t542 + %t544 = load ptr, ptr %a18 + %t545 = icmp eq ptr %t544, null + br i1 %t545, label %panic911, label %ok912 +panic911: + call void @finch_panic(ptr @.str.491, i64 211, ptr @.str.492) + unreachable +ok912: + %t546 = getelementptr inbounds %S.lexer.Lexer, ptr %t544, i32 0, i32 2 + %t547 = load i64, ptr %t546 + %t548 = load i64, ptr %a510 + %t549 = add i64 %t547, %t548 + call void @finch_str_sub(ptr %a539, ptr %a538, i64 %t543, i64 %t549, ptr @.str.488, i64 211) + %t550 = load { ptr, i64, i64 }, ptr %a539 + store { ptr, i64, i64 } { ptr @.str.485, i64 22, i64 0 }, ptr %a552 + store { ptr, i64, i64 } %t550, ptr %a553 + call void @finch_str_concat(ptr %a551, ptr %a552, ptr %a553) + store { ptr, i64, i64 } %t550, ptr %a554 + call void @finch_str_drop(ptr %a554) + %t555 = load { ptr, i64, i64 }, ptr %a551 + store { ptr, i64, i64 } %t555, ptr %a557 + store { ptr, i64, i64 } { ptr @.str.493, i64 1, i64 0 }, ptr %a558 + call void @finch_str_concat(ptr %a556, ptr %a557, ptr %a558) + store { ptr, i64, i64 } %t555, ptr %a559 + call void @finch_str_drop(ptr %a559) + %t560 = load { ptr, i64, i64 }, ptr %a556 + %t561 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t560, ptr %a563 + store { ptr, i64, i64 } %t561, ptr %a564 + call void @finch_str_concat(ptr %a562, ptr %a563, ptr %a564) + store { ptr, i64, i64 } %t560, ptr %a565 + call void @finch_str_drop(ptr %a565) + %t566 = load { ptr, i64, i64 }, ptr %a562 + call void @finch.lexer.fail(ptr %t529, i64 %t531, i64 %t533, { ptr, i64, i64 } %t566) + store { ptr, i64, i64 } %t566, ptr %a567 + call void @finch_str_drop(ptr %a567) + call void @finch_str_drop(ptr %a523) + br label %endif894 +endif894: + %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %a506, i32 0, i32 1 + %t569 = load i64, ptr %t568 + store i64 0, ptr %a570 + br label %for.cond913 +for.cond913: + %t571 = load i64, ptr %a570 + %t572 = icmp slt i64 %t571, %t569 + br i1 %t572, label %for.body914, label %for.end916 +for.body914: + %t573 = load ptr, ptr %a18 + call void @finch.lexer.advance(ptr %t573) + br label %for.step915 +for.step915: + %t574 = load i64, ptr %a570 + %t575 = add i64 %t574, 1 + store i64 %t575, ptr %a570 + br label %for.cond913 +for.end916: + %t576 = load { ptr, i64, i64 }, ptr %a506 + %t577 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 0 + store { ptr, i64, i64 } %t576, ptr %a578 + call void @finch_str_copy(ptr %a579, ptr %a578) + %t580 = load { ptr, i64, i64 }, ptr %a579 + %t581 = load { ptr, i64, i64 }, ptr %t577 + store { ptr, i64, i64 } %t580, ptr %t577 + store { ptr, i64, i64 } %t581, ptr %a582 + call void @finch_str_drop(ptr %a582) + %t583 = load { ptr, i64, i64 }, ptr %a506 + %t584 = getelementptr inbounds %S.lexer.Token, ptr %a169, i32 0, i32 1 + store { ptr, i64, i64 } %t583, ptr %a585 + call void @finch_str_copy(ptr %a586, ptr %a585) + %t587 = load { ptr, i64, i64 }, ptr %a586 + %t588 = load { ptr, i64, i64 }, ptr %t584 + store { ptr, i64, i64 } %t587, ptr %t584 + store { ptr, i64, i64 } %t588, ptr %a589 + call void @finch_str_drop(ptr %a589) + call void @finch_str_drop(ptr %a506) + br label %endif865 +endif865: + br label %endif755 +endif755: + br label %endif718 +endif718: + %t590 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t591 = load %S.lexer.Token, ptr %a169 + store %S.lexer.Token %t591, ptr %a592 + call void @finch.copy.S_lexer_Token(ptr %a593, ptr %a592) + %t594 = load %S.lexer.Token, ptr %a593 + %t595 = load i64, ptr %t590 + %t596 = add i64 %t595, 1 + call void @finch_arr_reserve(ptr %a19, i64 %t596, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) + %t597 = load ptr, ptr %a19 + %t598 = getelementptr inbounds %S.lexer.Token, ptr %t597, i64 %t595 + store %S.lexer.Token %t594, ptr %t598 + store i64 %t596, ptr %t590 + call void @finch.drop.S_lexer_Token(ptr %a169) + br label %while.cond615 +while.end617: + %t599 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t600 = insertvalue %S.lexer.Token zeroinitializer, { ptr, i64, i64 } { ptr @.str.494, i64 3, i64 0 }, 0 + %t601 = insertvalue %S.lexer.Token %t600, { ptr, i64, i64 } { ptr @.str.495, i64 0, i64 0 }, 1 + %t602 = load ptr, ptr %a18 + %t603 = icmp eq ptr %t602, null + br i1 %t603, label %panic917, label %ok918 +panic917: + call void @finch_panic(ptr @.str.496, i64 221, ptr @.str.497) + unreachable +ok918: + %t604 = getelementptr inbounds %S.lexer.Lexer, ptr %t602, i32 0, i32 3 + %t605 = load i64, ptr %t604 + %t606 = insertvalue %S.lexer.Token %t601, i64 %t605, 2 + %t607 = load ptr, ptr %a18 + %t608 = icmp eq ptr %t607, null + br i1 %t608, label %panic919, label %ok920 +panic919: + call void @finch_panic(ptr @.str.498, i64 221, ptr @.str.499) + unreachable +ok920: + %t609 = getelementptr inbounds %S.lexer.Lexer, ptr %t607, i32 0, i32 4 + %t610 = load i64, ptr %t609 + %t611 = insertvalue %S.lexer.Token %t606, i64 %t610, 3 + %t612 = insertvalue %S.lexer.Token %t611, i1 true, 4 + %t613 = load i64, ptr %t599 + %t614 = add i64 %t613, 1 + call void @finch_arr_reserve(ptr %a19, i64 %t614, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) + %t615 = load ptr, ptr %a19 + %t616 = getelementptr inbounds %S.lexer.Token, ptr %t615, i64 %t613 + store %S.lexer.Token %t612, ptr %t616 + store i64 %t614, ptr %t599 + %t617 = load { ptr, i64, i64 }, ptr %a19 + call void @finch.drop.S_lexer_Lexer(ptr %a17) + ret { ptr, i64, i64 } %t617 +} + +define internal %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t5, 0 + ret %S.ast.Type %t6 +} + +define internal %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a7 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.500, i64 5, i64 0 }, 0 + store %S.ast.Type %t2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t6, ptr %a7 + call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) + %t9 = load %S.ast.Type, ptr %a8 + %t10 = load i64, ptr %t5 + %t11 = add i64 %t10, 1 + call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t12 = load ptr, ptr %t4 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 + store %S.ast.Type %t9, ptr %t13 + store i64 %t11, ptr %t5 + %t14 = load %S.ast.Type, ptr %a3 + ret %S.ast.Type %t14 +} + +define internal %S.ast.Type @finch.ast.mapOf(%S.ast.Type %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a9 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a19 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.501, i64 3, i64 0 }, 0 + store %S.ast.Type %t3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t7, ptr %a8 + call void @finch.copy.S_ast_Type(ptr %a9, ptr %a8) + %t10 = load %S.ast.Type, ptr %a9 + %t11 = load i64, ptr %t6 + %t12 = add i64 %t11, 1 + call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t13 = load ptr, ptr %t5 + %t14 = getelementptr inbounds %S.ast.Type, ptr %t13, i64 %t11 + store %S.ast.Type %t10, ptr %t14 + store i64 %t12, ptr %t6 + %t15 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %a2 + store %S.ast.Type %t17, ptr %a18 + call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) + %t20 = load %S.ast.Type, ptr %a19 + %t21 = load i64, ptr %t16 + %t22 = add i64 %t21, 1 + call void @finch_arr_reserve(ptr %t15, i64 %t22, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t23 = load ptr, ptr %t15 + %t24 = getelementptr inbounds %S.ast.Type, ptr %t23, i64 %t21 + store %S.ast.Type %t20, ptr %t24 + store i64 %t22, ptr %t16 + %t25 = load %S.ast.Type, ptr %a4 + ret %S.ast.Type %t25 +} + +define internal %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a7 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.502, i64 3, i64 0 }, 0 + store %S.ast.Type %t2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t6, ptr %a7 + call void @finch.copy.S_ast_Type(ptr %a8, ptr %a7) + %t9 = load %S.ast.Type, ptr %a8 + %t10 = load i64, ptr %t5 + %t11 = add i64 %t10, 1 + call void @finch_arr_reserve(ptr %t4, i64 %t11, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t12 = load ptr, ptr %t4 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 %t10 + store %S.ast.Type %t9, ptr %t13 + store i64 %t11, ptr %t5 + %t14 = load %S.ast.Type, ptr %a3 + ret %S.ast.Type %t14 +} + +define internal i1 @finch.ast.same(%S.ast.Type %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca i64, align 16 + store %S.ast.Type %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t4, ptr %a7 + store { ptr, i64, i64 } %t6, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp eq i32 %t9, 0 + br i1 %t10, label %then921, label %endif923 +then921: + ret i1 false +endif923: + %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.503, i64 6, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from924 +logic.from924: + br i1 %t16, label %logic.end926, label %logic.rhs925 +logic.rhs925: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.504, i64 5, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.rend927 +logic.rend927: + br label %logic.end926 +logic.end926: + %t23 = phi i1 [ true, %logic.from924 ], [ %t22, %logic.rend927 ] + br label %logic.from928 +logic.from928: + br i1 %t23, label %logic.end930, label %logic.rhs929 +logic.rhs929: + %t24 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t25 = load { ptr, i64, i64 }, ptr %t24 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.505, i64 4, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend931 +logic.rend931: + br label %logic.end930 +logic.end930: + %t30 = phi i1 [ true, %logic.from928 ], [ %t29, %logic.rend931 ] + br i1 %t30, label %then932, label %endif934 +then932: + %t31 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t32 = load { ptr, i64, i64 }, ptr %t31 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t32, ptr %a35 + store { ptr, i64, i64 } %t34, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.from935 +logic.from935: + br i1 %t38, label %logic.rhs936, label %logic.end937 +logic.rhs936: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t40, ptr %a43 + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend938 +logic.rend938: + br label %logic.end937 +logic.end937: + %t47 = phi i1 [ false, %logic.from935 ], [ %t46, %logic.rend938 ] + ret i1 %t47 +endif934: + %t48 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t49 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.506, i64 5, i64 0 }, ptr %a51 + %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) + %t53 = icmp ne i32 %t52, 0 + br label %logic.from939 +logic.from939: + br i1 %t53, label %logic.rhs940, label %logic.end941 +logic.rhs940: + %t54 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 + %t55 = load i64, ptr %t54 + %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t57 = load i64, ptr %t56 + %t58 = icmp ne i64 %t55, %t57 + br label %logic.rend942 +logic.rend942: + br label %logic.end941 +logic.end941: + %t59 = phi i1 [ false, %logic.from939 ], [ %t58, %logic.rend942 ] + br i1 %t59, label %then943, label %endif945 +then943: + ret i1 false +endif945: + %t60 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.507, i64 5, i64 0 }, ptr %a63 + %t64 = call i32 @finch_str_eq(ptr %a62, ptr %a63) + %t65 = icmp ne i32 %t64, 0 + br label %logic.from946 +logic.from946: + br i1 %t65, label %logic.end948, label %logic.rhs947 +logic.rhs947: + %t66 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t67 = load { ptr, i64, i64 }, ptr %t66 + store { ptr, i64, i64 } %t67, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.508, i64 3, i64 0 }, ptr %a69 + %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) + %t71 = icmp ne i32 %t70, 0 + br label %logic.rend949 +logic.rend949: + br label %logic.end948 +logic.end948: + %t72 = phi i1 [ true, %logic.from946 ], [ %t71, %logic.rend949 ] + br label %logic.from950 +logic.from950: + br i1 %t72, label %logic.end952, label %logic.rhs951 +logic.rhs951: + %t73 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t74 = load { ptr, i64, i64 }, ptr %t73 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.509, i64 3, i64 0 }, ptr %a76 + %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) + %t78 = icmp ne i32 %t77, 0 + br label %logic.rend953 +logic.rend953: + br label %logic.end952 +logic.end952: + %t79 = phi i1 [ true, %logic.from950 ], [ %t78, %logic.rend953 ] + br label %logic.from954 +logic.from954: + br i1 %t79, label %logic.end956, label %logic.rhs955 +logic.rhs955: + %t80 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t81 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.510, i64 5, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.rend957 +logic.rend957: + br label %logic.end956 +logic.end956: + %t86 = phi i1 [ true, %logic.from954 ], [ %t85, %logic.rend957 ] + br i1 %t86, label %then958, label %endif960 +then958: + %t87 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 + %t89 = load i64, ptr %t88 + %t90 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t90, i32 0, i32 1 + %t92 = load i64, ptr %t91 + %t93 = icmp ne i64 %t89, %t92 + br i1 %t93, label %then961, label %endif963 +then961: + ret i1 false +endif963: + %t94 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load i64, ptr %t95 + store i64 0, ptr %a97 + br label %for.cond964 +for.cond964: + %t98 = load i64, ptr %a97 + %t99 = icmp slt i64 %t98, %t96 + br i1 %t99, label %for.body965, label %for.end967 +for.body965: + %t100 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t101 = load i64, ptr %a97 + %t102 = load { ptr, i64, i64 }, ptr %t100 + %t103 = extractvalue { ptr, i64, i64 } %t102, 1 + %t104 = icmp uge i64 %t101, %t103 + br i1 %t104, label %range968, label %inrange969 +range968: + call void @finch_panic_index(ptr @.str.511, i64 54, i64 %t101, i64 %t103) + unreachable +inrange969: + %t105 = extractvalue { ptr, i64, i64 } %t102, 0 + %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t101 + %t107 = load %S.ast.Type, ptr %t106 + %t108 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t109 = load i64, ptr %a97 + %t110 = load { ptr, i64, i64 }, ptr %t108 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range970, label %inrange971 +range970: + call void @finch_panic_index(ptr @.str.512, i64 54, i64 %t109, i64 %t111) + unreachable +inrange971: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds %S.ast.Type, ptr %t113, i64 %t109 + %t115 = load %S.ast.Type, ptr %t114 + %t116 = call i1 @finch.ast.same(%S.ast.Type %t107, %S.ast.Type %t115) + %t117 = xor i1 %t116, true + br i1 %t117, label %then972, label %endif974 +then972: + ret i1 false +endif974: + br label %for.step966 +for.step966: + %t118 = load i64, ptr %a97 + %t119 = add i64 %t118, 1 + store i64 %t119, ptr %a97 + br label %for.cond964 +for.end967: + ret i1 true +endif960: + ret i1 true +} + +define internal { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.513, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then975, label %endif977 +then975: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 0, %t10 + br i1 %t11, label %range978, label %inrange979 +range978: + call void @finch_panic_index(ptr @.str.515, i64 65, i64 0, i64 %t10) + unreachable +inrange979: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 + %t14 = load %S.ast.Type, ptr %t13 + %t15 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t14) + store { ptr, i64, i64 } { ptr @.str.514, i64 2, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t20 +endif977: + %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.516, i64 5, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then980, label %endif982 +then980: + %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 4 + %t28 = load i64, ptr %t27 + call void @finch_str_from_int(ptr %a29, i64 %t28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } { ptr @.str.517, i64 1, i64 0 }, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.518, i64 1, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + %t43 = extractvalue { ptr, i64, i64 } %t42, 1 + %t44 = icmp uge i64 0, %t43 + br i1 %t44, label %range983, label %inrange984 +range983: + call void @finch_panic_index(ptr @.str.519, i64 68, i64 0, i64 %t43) + unreachable +inrange984: + %t45 = extractvalue { ptr, i64, i64 } %t42, 0 + %t46 = getelementptr inbounds %S.ast.Type, ptr %t45, i64 0 + %t47 = load %S.ast.Type, ptr %t46 + %t48 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t47) + store { ptr, i64, i64 } %t40, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t40, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + ret { ptr, i64, i64 } %t54 +endif982: + %t55 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t56 = load { ptr, i64, i64 }, ptr %t55 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.520, i64 3, i64 0 }, ptr %a58 + %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) + %t60 = icmp ne i32 %t59, 0 + br i1 %t60, label %then985, label %endif987 +then985: + %t61 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = extractvalue { ptr, i64, i64 } %t62, 1 + %t64 = icmp uge i64 0, %t63 + br i1 %t64, label %range988, label %inrange989 +range988: + call void @finch_panic_index(ptr @.str.522, i64 71, i64 0, i64 %t63) + unreachable +inrange989: + %t65 = extractvalue { ptr, i64, i64 } %t62, 0 + %t66 = getelementptr inbounds %S.ast.Type, ptr %t65, i64 0 + %t67 = load %S.ast.Type, ptr %t66 + %t68 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t67) + store { ptr, i64, i64 } { ptr @.str.521, i64 4, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.523, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t80 = load { ptr, i64, i64 }, ptr %t79 + %t81 = extractvalue { ptr, i64, i64 } %t80, 1 + %t82 = icmp uge i64 1, %t81 + br i1 %t82, label %range990, label %inrange991 +range990: + call void @finch_panic_index(ptr @.str.524, i64 71, i64 1, i64 %t81) + unreachable +inrange991: + %t83 = extractvalue { ptr, i64, i64 } %t80, 0 + %t84 = getelementptr inbounds %S.ast.Type, ptr %t83, i64 1 + %t85 = load %S.ast.Type, ptr %t84 + %t86 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t85) + store { ptr, i64, i64 } %t78, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t78, ptr %a90 + call void @finch_str_drop(ptr %a90) + store { ptr, i64, i64 } %t86, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a87 + ret { ptr, i64, i64 } %t92 +endif987: + %t93 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t94 = load { ptr, i64, i64 }, ptr %t93 + store { ptr, i64, i64 } %t94, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.525, i64 3, i64 0 }, ptr %a96 + %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) + %t98 = icmp ne i32 %t97, 0 + br i1 %t98, label %then992, label %endif994 +then992: + %t99 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 + %t101 = load i64, ptr %t100 + %t102 = icmp eq i64 %t101, 0 + br i1 %t102, label %then995, label %endif997 +then995: + ret { ptr, i64, i64 } { ptr @.str.526, i64 3, i64 0 } +endif997: + %t103 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t104 = load { ptr, i64, i64 }, ptr %t103 + %t105 = extractvalue { ptr, i64, i64 } %t104, 1 + %t106 = icmp uge i64 0, %t105 + br i1 %t106, label %range998, label %inrange999 +range998: + call void @finch_panic_index(ptr @.str.528, i64 77, i64 0, i64 %t105) + unreachable +inrange999: + %t107 = extractvalue { ptr, i64, i64 } %t104, 0 + %t108 = getelementptr inbounds %S.ast.Type, ptr %t107, i64 0 + %t109 = load %S.ast.Type, ptr %t108 + %t110 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t109) + store { ptr, i64, i64 } { ptr @.str.527, i64 4, i64 0 }, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t110, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + store { ptr, i64, i64 } %t115, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.529, i64 1, i64 0 }, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t115, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a116 + ret { ptr, i64, i64 } %t120 +endif994: + %t121 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t122 = load { ptr, i64, i64 }, ptr %t121 + store { ptr, i64, i64 } %t122, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.530, i64 6, i64 0 }, ptr %a124 + %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) + %t126 = icmp ne i32 %t125, 0 + br label %logic.from1000 +logic.from1000: + br i1 %t126, label %logic.end1002, label %logic.rhs1001 +logic.rhs1001: + %t127 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a129 + store { ptr, i64, i64 } { ptr @.str.531, i64 5, i64 0 }, ptr %a130 + %t131 = call i32 @finch_str_eq(ptr %a129, ptr %a130) + %t132 = icmp ne i32 %t131, 0 + br label %logic.rend1003 +logic.rend1003: + br label %logic.end1002 +logic.end1002: + %t133 = phi i1 [ true, %logic.from1000 ], [ %t132, %logic.rend1003 ] + br label %logic.from1004 +logic.from1004: + br i1 %t133, label %logic.end1006, label %logic.rhs1005 +logic.rhs1005: + %t134 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t135 = load { ptr, i64, i64 }, ptr %t134 + store { ptr, i64, i64 } %t135, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.532, i64 4, i64 0 }, ptr %a137 + %t138 = call i32 @finch_str_eq(ptr %a136, ptr %a137) + %t139 = icmp ne i32 %t138, 0 + br label %logic.rend1007 +logic.rend1007: + br label %logic.end1006 +logic.end1006: + %t140 = phi i1 [ true, %logic.from1004 ], [ %t139, %logic.rend1007 ] + br i1 %t140, label %then1008, label %endif1010 +then1008: + %t141 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 + %t143 = load i64, ptr %t142 + %t144 = icmp sgt i64 %t143, 0 + br i1 %t144, label %then1011, label %endif1013 +then1011: + %t145 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t146 = load { ptr, i64, i64 }, ptr %t145 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.533, i64 1, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a147 + %t151 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t150, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t150, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + ret { ptr, i64, i64 } %t157 +endif1013: + %t158 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t159, ptr %a160 + call void @finch_str_copy(ptr %a161, ptr %a160) + %t162 = load { ptr, i64, i64 }, ptr %a161 + ret { ptr, i64, i64 } %t162 +endif1010: + %t163 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t164 = load { ptr, i64, i64 }, ptr %t163 + store { ptr, i64, i64 } %t164, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.534, i64 4, i64 0 }, ptr %a166 + %t167 = call i32 @finch_str_eq(ptr %a165, ptr %a166) + %t168 = icmp ne i32 %t167, 0 + br i1 %t168, label %then1014, label %endif1016 +then1014: + ret { ptr, i64, i64 } { ptr @.str.535, i64 7, i64 0 } +endif1016: + %t169 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t170 = load { ptr, i64, i64 }, ptr %t169 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_copy(ptr %a172, ptr %a171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + ret { ptr, i64, i64 } %t173 +} + +define internal void @finch.parser.fail(ptr %p0, %S.lexer.Token %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.lexer.Token, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.lexer.Token %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic1017, label %ok1018 +panic1017: + call void @finch_panic(ptr @.str.536, i64 14, ptr @.str.537) + unreachable +ok1018: + %t6 = getelementptr inbounds %S.parser.Parser, ptr %t4, i32 0, i32 4 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.538, i64 1, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + %t12 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 2 + %t13 = load i64, ptr %t12 + call void @finch_str_from_int(ptr %a14, i64 %t13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t11, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t11, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.539, i64 1, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = getelementptr inbounds %S.lexer.Token, ptr %a2, i32 0, i32 3 + %t28 = load i64, ptr %t27 + call void @finch_str_from_int(ptr %a29, i64 %t28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t26, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t26, ptr %a34 + call void @finch_str_drop(ptr %a34) + store { ptr, i64, i64 } %t30, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t36, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.540, i64 9, i64 0 }, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t36, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + %t42 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t41, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a43 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = trunc i64 %t48 to i32 + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = icmp eq ptr %t50, null + %t52 = select i1 %t51, ptr @.str.541, ptr %t50 + %t53 = call i32 (ptr, ...) @printf(ptr @.str.542, i32 %t49, ptr %t52) + store { ptr, i64, i64 } %t47, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = call i32 (ptr, ...) @printf(ptr @.str.543) + %t56 = trunc i64 1 to i32 + %t57 = call i32 @fflush(ptr null) + call void @exit(i32 %t56) + ret void +} + +define internal %S.lexer.Token @finch.parser.cur(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a15 = alloca %S.lexer.Token, align 16 + %a16 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1019, label %ok1020 +panic1019: + call void @finch_panic(ptr @.str.544, i64 19, ptr @.str.545) + unreachable +ok1020: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic1021, label %ok1022 +panic1021: + call void @finch_panic(ptr @.str.546, i64 19, ptr @.str.547) + unreachable +ok1022: + %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range1023, label %inrange1024 +range1023: + call void @finch_panic_index(ptr @.str.548, i64 19, i64 %t8, i64 %t10) + unreachable +inrange1024: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 + %t14 = load %S.lexer.Token, ptr %t13 + store %S.lexer.Token %t14, ptr %a15 + call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) + %t17 = load %S.lexer.Token, ptr %a16 + ret %S.lexer.Token %t17 +} + +define internal { ptr, i64, i64 } @finch.parser.curKind(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1025, label %ok1026 +panic1025: + call void @finch_panic(ptr @.str.549, i64 23, ptr @.str.550) + unreachable +ok1026: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic1027, label %ok1028 +panic1027: + call void @finch_panic(ptr @.str.551, i64 23, ptr @.str.552) + unreachable +ok1028: + %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range1029, label %inrange1030 +range1029: + call void @finch_panic_index(ptr @.str.553, i64 23, i64 %t8, i64 %t10) + unreachable +inrange1030: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 + %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i32 0, i32 0 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + call void @finch_str_copy(ptr %a17, ptr %a16) + %t18 = load { ptr, i64, i64 }, ptr %a17 + ret { ptr, i64, i64 } %t18 +} + +define internal { ptr, i64, i64 } @finch.parser.peekKind(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a9 = alloca i64, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic1031, label %ok1032 +panic1031: + call void @finch_panic(ptr @.str.554, i64 27, ptr @.str.555) + unreachable +ok1032: + %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = load i64, ptr %a2 + %t8 = add i64 %t6, %t7 + store i64 %t8, ptr %a9 + %t10 = load i64, ptr %a9 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic1033, label %ok1034 +panic1033: + call void @finch_panic(ptr @.str.556, i64 28, ptr @.str.557) + unreachable +ok1034: + %t13 = getelementptr inbounds %S.parser.Parser, ptr %t11, i32 0, i32 0 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = icmp sge i64 %t10, %t15 + br i1 %t16, label %then1035, label %endif1037 +then1035: + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic1038, label %ok1039 +panic1038: + call void @finch_panic(ptr @.str.558, i64 29, ptr @.str.559) + unreachable +ok1039: + %t19 = getelementptr inbounds %S.parser.Parser, ptr %t17, i32 0, i32 0 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load i64, ptr %t20 + %t22 = sub i64 %t21, 1 + store i64 %t22, ptr %a9 + br label %endif1037 +endif1037: + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic1040, label %ok1041 +panic1040: + call void @finch_panic(ptr @.str.560, i64 31, ptr @.str.561) + unreachable +ok1041: + %t25 = getelementptr inbounds %S.parser.Parser, ptr %t23, i32 0, i32 0 + %t26 = load i64, ptr %a9 + %t27 = load { ptr, i64, i64 }, ptr %t25 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 %t26, %t28 + br i1 %t29, label %range1042, label %inrange1043 +range1042: + call void @finch_panic_index(ptr @.str.562, i64 31, i64 %t26, i64 %t28) + unreachable +inrange1043: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds %S.lexer.Token, ptr %t30, i64 %t26 + %t32 = getelementptr inbounds %S.lexer.Token, ptr %t31, i32 0, i32 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_copy(ptr %a35, ptr %a34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + ret { ptr, i64, i64 } %t36 +} + +define internal i1 @finch.parser.at(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic1044, label %ok1045 +panic1044: + call void @finch_panic(ptr @.str.563, i64 35, ptr @.str.564) + unreachable +ok1045: + %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1046, label %ok1047 +panic1046: + call void @finch_panic(ptr @.str.565, i64 35, ptr @.str.566) + unreachable +ok1047: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load { ptr, i64, i64 }, ptr %t5 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range1048, label %inrange1049 +range1048: + call void @finch_panic_index(ptr @.str.567, i64 35, i64 %t9, i64 %t11) + unreachable +inrange1049: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 + %t15 = getelementptr inbounds %S.lexer.Token, ptr %t14, i32 0, i32 0 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } %t17, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + ret i1 %t21 +} + +define internal %S.lexer.Token @finch.parser.next(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a15 = alloca %S.lexer.Token, align 16 + %a16 = alloca %S.lexer.Token, align 16 + %a18 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1050, label %ok1051 +panic1050: + call void @finch_panic(ptr @.str.568, i64 39, ptr @.str.569) + unreachable +ok1051: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 0 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic1052, label %ok1053 +panic1052: + call void @finch_panic(ptr @.str.570, i64 39, ptr @.str.571) + unreachable +ok1053: + %t7 = getelementptr inbounds %S.parser.Parser, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load { ptr, i64, i64 }, ptr %t4 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range1054, label %inrange1055 +range1054: + call void @finch_panic_index(ptr @.str.572, i64 39, i64 %t8, i64 %t10) + unreachable +inrange1055: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.lexer.Token, ptr %t12, i64 %t8 + %t14 = load %S.lexer.Token, ptr %t13 + store %S.lexer.Token %t14, ptr %a15 + call void @finch.copy.S_lexer_Token(ptr %a16, ptr %a15) + %t17 = load %S.lexer.Token, ptr %a16 + store %S.lexer.Token %t17, ptr %a18 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic1056, label %ok1057 +panic1056: + call void @finch_panic(ptr @.str.573, i64 40, ptr @.str.574) + unreachable +ok1057: + %t21 = getelementptr inbounds %S.parser.Parser, ptr %t19, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = add i64 %t22, 1 + store i64 %t23, ptr %t21 + %t24 = load %S.lexer.Token, ptr %a18 + ret %S.lexer.Token %t24 +} + +define internal i1 @finch.parser.accept(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } %t4) + br i1 %t5, label %then1058, label %endif1060 +then1058: + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1061, label %ok1062 +panic1061: + call void @finch_panic(ptr @.str.575, i64 46, ptr @.str.576) + unreachable +ok1062: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = add i64 %t9, 1 + store i64 %t10, ptr %t8 + ret i1 true +endif1060: + ret i1 false +} + +define internal { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %p0) { +entry: + %a1 = alloca %S.lexer.Token, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + store %S.lexer.Token %p0, ptr %a1 + %t2 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.577, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then1063, label %endif1065 +then1063: + %t8 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } { ptr @.str.578, i64 1, i64 0 }, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.579, i64 1, i64 0 }, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + ret { ptr, i64, i64 } %t18 +endif1065: + %t19 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.580, i64 3, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br i1 %t24, label %then1066, label %endif1068 +then1066: + ret { ptr, i64, i64 } { ptr @.str.581, i64 11, i64 0 } +endif1068: + %t25 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.582, i64 3, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br label %logic.from1069 +logic.from1069: + br i1 %t30, label %logic.end1071, label %logic.rhs1070 +logic.rhs1070: + %t31 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.583, i64 5, i64 0 }, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br label %logic.rend1072 +logic.rend1072: + br label %logic.end1071 +logic.end1071: + %t37 = phi i1 [ true, %logic.from1069 ], [ %t36, %logic.rend1072 ] + br i1 %t37, label %then1073, label %endif1075 +then1073: + ret { ptr, i64, i64 } { ptr @.str.584, i64 8, i64 0 } +endif1075: + %t38 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t39 = load { ptr, i64, i64 }, ptr %t38 + store { ptr, i64, i64 } %t39, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.585, i64 6, i64 0 }, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br i1 %t43, label %then1076, label %endif1078 +then1076: + ret { ptr, i64, i64 } { ptr @.str.586, i64 8, i64 0 } +endif1078: + %t44 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.587, i64 4, i64 0 }, ptr %a47 + %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + br i1 %t49, label %then1079, label %endif1081 +then1079: + ret { ptr, i64, i64 } { ptr @.str.588, i64 6, i64 0 } +endif1081: + %t50 = getelementptr inbounds %S.lexer.Token, ptr %a1, i32 0, i32 0 + %t51 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } { ptr @.str.589, i64 1, i64 0 }, ptr %a53 + store { ptr, i64, i64 } %t51, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.590, i64 1, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + ret { ptr, i64, i64 } %t60 +} + +define internal %S.lexer.Token @finch.parser.expect(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca %S.lexer.Token, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca %S.lexer.Token, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load { ptr, i64, i64 }, ptr %a2 + %t6 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } %t5) + %t7 = xor i1 %t6, true + br i1 %t7, label %then1082, label %endif1084 +then1082: + %t8 = load ptr, ptr %a1 + %t9 = load ptr, ptr %a1 + %t10 = call %S.lexer.Token @finch.parser.cur(ptr %t9) + %t11 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.591, i64 9, i64 0 }, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.592, i64 8, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + %t21 = load ptr, ptr %a1 + %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) + %t23 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t22) + store %S.lexer.Token %t22, ptr %a24 + call void @finch.drop.S_lexer_Token(ptr %a24) + store { ptr, i64, i64 } %t20, ptr %a26 + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t20, ptr %a28 + call void @finch_str_drop(ptr %a28) + store { ptr, i64, i64 } %t23, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.parser.fail(ptr %t8, %S.lexer.Token %t10, { ptr, i64, i64 } %t30) + store %S.lexer.Token %t10, ptr %a31 + call void @finch.drop.S_lexer_Token(ptr %a31) + store { ptr, i64, i64 } %t30, ptr %a32 + call void @finch_str_drop(ptr %a32) + br label %endif1084 +endif1084: + %t33 = load ptr, ptr %a1 + %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) + ret %S.lexer.Token %t34 +} + +define internal i1 @finch.parser.sameLine(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1085, label %ok1086 +panic1085: + call void @finch_panic(ptr @.str.593, i64 79, ptr @.str.594) + unreachable +ok1086: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 2 + %t5 = load i64, ptr %t4 + %t6 = icmp sgt i64 %t5, 0 + br label %logic.from1087 +logic.from1087: + br i1 %t6, label %logic.end1089, label %logic.rhs1088 +logic.rhs1088: + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic1090, label %ok1091 +panic1090: + call void @finch_panic(ptr @.str.595, i64 79, ptr @.str.596) + unreachable +ok1091: + %t9 = getelementptr inbounds %S.parser.Parser, ptr %t7, i32 0, i32 0 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic1092, label %ok1093 +panic1092: + call void @finch_panic(ptr @.str.597, i64 79, ptr @.str.598) + unreachable +ok1093: + %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = load { ptr, i64, i64 }, ptr %t9 + %t15 = extractvalue { ptr, i64, i64 } %t14, 1 + %t16 = icmp uge i64 %t13, %t15 + br i1 %t16, label %range1094, label %inrange1095 +range1094: + call void @finch_panic_index(ptr @.str.599, i64 79, i64 %t13, i64 %t15) + unreachable +inrange1095: + %t17 = extractvalue { ptr, i64, i64 } %t14, 0 + %t18 = getelementptr inbounds %S.lexer.Token, ptr %t17, i64 %t13 + %t19 = getelementptr inbounds %S.lexer.Token, ptr %t18, i32 0, i32 4 + %t20 = load i1, ptr %t19 + %t21 = xor i1 %t20, true + br label %logic.rend1096 +logic.rend1096: + br label %logic.end1089 +logic.end1089: + %t22 = phi i1 [ true, %logic.from1087 ], [ %t21, %logic.rend1096 ] + ret i1 %t22 +} + +define internal %S.ast.Node @finch.parser.node(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.lexer.Token, align 16 + %a17 = alloca %S.lexer.Token, align 16 + %a19 = alloca %S.lexer.Token, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic1097, label %ok1098 +panic1097: + call void @finch_panic(ptr @.str.600, i64 83, ptr @.str.601) + unreachable +ok1098: + %t5 = getelementptr inbounds %S.parser.Parser, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1099, label %ok1100 +panic1099: + call void @finch_panic(ptr @.str.602, i64 83, ptr @.str.603) + unreachable +ok1100: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load { ptr, i64, i64 }, ptr %t5 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range1101, label %inrange1102 +range1101: + call void @finch_panic_index(ptr @.str.604, i64 83, i64 %t9, i64 %t11) + unreachable +inrange1102: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.lexer.Token, ptr %t13, i64 %t9 + %t15 = load %S.lexer.Token, ptr %t14 + store %S.lexer.Token %t15, ptr %a16 + call void @finch.copy.S_lexer_Token(ptr %a17, ptr %a16) + %t18 = load %S.lexer.Token, ptr %a17 + store %S.lexer.Token %t18, ptr %a19 + %t20 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t20, ptr %a21 + call void @finch_str_copy(ptr %a22, ptr %a21) + %t23 = load { ptr, i64, i64 }, ptr %a22 + %t24 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } %t23, 0 + %t25 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 2 + %t26 = load i64, ptr %t25 + %t27 = insertvalue %S.ast.Node %t24, i64 %t26, 11 + %t28 = getelementptr inbounds %S.lexer.Token, ptr %a19, i32 0, i32 3 + %t29 = load i64, ptr %t28 + %t30 = insertvalue %S.ast.Node %t27, i64 %t29, 12 + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic1103, label %ok1104 +panic1103: + call void @finch_panic(ptr @.str.605, i64 84, ptr @.str.606) + unreachable +ok1104: + %t33 = getelementptr inbounds %S.parser.Parser, ptr %t31, i32 0, i32 3 + %t34 = load i64, ptr %t33 + %t35 = insertvalue %S.ast.Node %t30, i64 %t34, 13 + call void @finch.drop.S_lexer_Token(ptr %a19) + ret %S.ast.Node %t35 +} + +define internal i1 @finch.parser.isTypeName({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca i64, align 16 + %a29 = alloca i64, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 16, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.607, i64 3, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.608, i64 5, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.609, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.610, i64 4, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.611, i64 3, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.612, i64 3, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.613, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.614, i64 3, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.615, i64 3, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.616, i64 3, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.617, i64 2, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.618, i64 3, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.619, i64 3, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.620, i64 3, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.621, i64 3, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.622, i64 3, i64 0 }, ptr %t19 + %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t21 = insertvalue { ptr, i64, i64 } %t20, i64 16, 1 + %t22 = insertvalue { ptr, i64, i64 } %t21, i64 16, 2 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 + %t25 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a26 + %t27 = load i64, ptr %t24 + %t28 = load ptr, ptr %a23 + store i64 0, ptr %a29 + br label %find.cond1105 +find.cond1105: + %t30 = load i64, ptr %a29 + %t31 = icmp slt i64 %t30, %t27 + br i1 %t31, label %find.body1106, label %find.end1109 +find.body1106: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } %t25, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %find.hit1107, label %find.next1108 +find.hit1107: + store i64 %t30, ptr %a26 + br label %find.end1109 +find.next1108: + %t38 = add i64 %t30, 1 + store i64 %t38, ptr %a29 + br label %find.cond1105 +find.end1109: + %t39 = load i64, ptr %a26 + %t40 = icmp sge i64 %t39, 0 + call void @finch.drop.arr_str(ptr %a23) + ret i1 %t40 +} + +define internal %S.ast.Type @finch.parser.parseType(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca %S.lexer.Token, align 16 + %a10 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.lexer.Token, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca %S.lexer.Token, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca %S.lexer.Token, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca %S.lexer.Token, align 16 + %a54 = alloca %S.ast.Type, align 16 + %a57 = alloca %S.lexer.Token, align 16 + %a62 = alloca %S.ast.Type, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca %S.ast.Type, align 16 + %a77 = alloca %S.ast.Type, align 16 + %a80 = alloca %S.lexer.Token, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca %S.lexer.Token, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca %S.lexer.Token, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca %S.lexer.Token, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca %S.lexer.Token, align 16 + %a165 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.accept(ptr %t2, { ptr, i64, i64 } { ptr @.str.623, i64 1, i64 0 }) + br i1 %t3, label %then1110, label %endif1112 +then1110: + %t4 = load ptr, ptr %a1 + %t5 = call %S.lexer.Token @finch.parser.expect(ptr %t4, { ptr, i64, i64 } { ptr @.str.624, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.625, i64 36, i64 0 }) + store %S.lexer.Token %t5, ptr %a6 + call void @finch.drop.S_lexer_Token(ptr %a6) + %t7 = load ptr, ptr %a1 + %t8 = call %S.ast.Type @finch.parser.parseType(ptr %t7) + %t9 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t8) + store %S.ast.Type %t8, ptr %a10 + call void @finch.drop.S_ast_Type(ptr %a10) + ret %S.ast.Type %t9 +endif1112: + %t11 = load ptr, ptr %a1 + %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.626, i64 5, i64 0 }) + %t13 = xor i1 %t12, true + br i1 %t13, label %then1113, label %endif1115 +then1113: + %t14 = load ptr, ptr %a1 + %t15 = load ptr, ptr %a1 + %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) + %t17 = load ptr, ptr %a1 + %t18 = call %S.lexer.Token @finch.parser.cur(ptr %t17) + %t19 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t18) + store %S.lexer.Token %t18, ptr %a20 + call void @finch.drop.S_lexer_Token(ptr %a20) + store { ptr, i64, i64 } { ptr @.str.627, i64 11, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t19, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.628, i64 56, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + call void @finch.parser.fail(ptr %t14, %S.lexer.Token %t16, { ptr, i64, i64 } %t30) + store %S.lexer.Token %t16, ptr %a31 + call void @finch.drop.S_lexer_Token(ptr %a31) + store { ptr, i64, i64 } %t30, ptr %a32 + call void @finch_str_drop(ptr %a32) + br label %endif1115 +endif1115: + %t33 = load ptr, ptr %a1 + %t34 = call %S.lexer.Token @finch.parser.next(ptr %t33) + %t35 = extractvalue %S.lexer.Token %t34, 1 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + store %S.lexer.Token %t34, ptr %a39 + call void @finch.drop.S_lexer_Token(ptr %a39) + store { ptr, i64, i64 } %t38, ptr %a40 + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.629, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.from1116 +logic.from1116: + br i1 %t45, label %logic.rhs1117, label %logic.end1118 +logic.rhs1117: + %t46 = load ptr, ptr %a1 + %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.630, i64 1, i64 0 }) + br label %logic.rend1119 +logic.rend1119: + br label %logic.end1118 +logic.end1118: + %t48 = phi i1 [ false, %logic.from1116 ], [ %t47, %logic.rend1119 ] + br i1 %t48, label %then1120, label %endif1122 +then1120: + %t49 = load ptr, ptr %a1 + %t50 = call %S.lexer.Token @finch.parser.next(ptr %t49) + store %S.lexer.Token %t50, ptr %a51 + call void @finch.drop.S_lexer_Token(ptr %a51) + %t52 = load ptr, ptr %a1 + %t53 = call %S.ast.Type @finch.parser.parseType(ptr %t52) + store %S.ast.Type %t53, ptr %a54 + %t55 = load ptr, ptr %a1 + %t56 = call %S.lexer.Token @finch.parser.expect(ptr %t55, { ptr, i64, i64 } { ptr @.str.631, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.632, i64 39, i64 0 }) + store %S.lexer.Token %t56, ptr %a57 + call void @finch.drop.S_lexer_Token(ptr %a57) + %t58 = load %S.ast.Type, ptr %a54 + %t59 = load ptr, ptr %a1 + %t60 = call %S.ast.Type @finch.parser.parseType(ptr %t59) + %t61 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t58, %S.ast.Type %t60) + store %S.ast.Type %t60, ptr %a62 + call void @finch.drop.S_ast_Type(ptr %a62) + call void @finch.drop.S_ast_Type(ptr %a54) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t61 +endif1122: + %t63 = load { ptr, i64, i64 }, ptr %a40 + %t64 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t63) + br i1 %t64, label %then1123, label %endif1125 +then1123: + %t65 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t65, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.633, i64 3, i64 0 }, ptr %a67 + %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) + %t69 = icmp ne i32 %t68, 0 + br label %logic.from1126 +logic.from1126: + br i1 %t69, label %logic.rhs1127, label %logic.end1128 +logic.rhs1127: + %t70 = load ptr, ptr %a1 + %t71 = call i1 @finch.parser.accept(ptr %t70, { ptr, i64, i64 } { ptr @.str.634, i64 1, i64 0 }) + br label %logic.rend1129 +logic.rend1129: + br label %logic.end1128 +logic.end1128: + %t72 = phi i1 [ false, %logic.from1126 ], [ %t71, %logic.rend1129 ] + br i1 %t72, label %then1130, label %endif1132 +then1130: + %t73 = load ptr, ptr %a1 + %t74 = call %S.ast.Type @finch.parser.parseType(ptr %t73) + %t75 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t74) + store %S.ast.Type %t74, ptr %a76 + call void @finch.drop.S_ast_Type(ptr %a76) + store %S.ast.Type %t75, ptr %a77 + %t78 = load ptr, ptr %a1 + %t79 = call %S.lexer.Token @finch.parser.expect(ptr %t78, { ptr, i64, i64 } { ptr @.str.635, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.636, i64 3, i64 0 }) + store %S.lexer.Token %t79, ptr %a80 + call void @finch.drop.S_lexer_Token(ptr %a80) + %t81 = load %S.ast.Type, ptr %a77 + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t81 +endif1132: + %t82 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t82, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.637, i64 3, i64 0 }, ptr %a84 + %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) + %t86 = icmp ne i32 %t85, 0 + br i1 %t86, label %then1133, label %endif1135 +then1133: + %t87 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.638, i64 3, i64 0 }) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t87 +endif1135: + %t88 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t88, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.639, i64 3, i64 0 }, ptr %a90 + %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then1136, label %endif1138 +then1136: + %t93 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.640, i64 5, i64 0 }) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t93 +endif1138: + %t94 = load { ptr, i64, i64 }, ptr %a40 + %t95 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t94) + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t95 +endif1125: + %t96 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.641, i64 5, i64 0 }, 0 + %t97 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t97, ptr %a98 + call void @finch_str_copy(ptr %a99, ptr %a98) + %t100 = load { ptr, i64, i64 }, ptr %a99 + %t101 = insertvalue %S.ast.Type %t96, { ptr, i64, i64 } %t100, 2 + store %S.ast.Type %t101, ptr %a102 + %t103 = load ptr, ptr %a1 + %t104 = call i1 @finch.parser.at(ptr %t103, { ptr, i64, i64 } { ptr @.str.642, i64 1, i64 0 }) + br label %logic.from1139 +logic.from1139: + br i1 %t104, label %logic.rhs1140, label %logic.end1141 +logic.rhs1140: + %t105 = load ptr, ptr %a1 + %t106 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t105, i64 1) + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.643, i64 5, i64 0 }, ptr %a108 + %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) + %t110 = icmp ne i32 %t109, 0 + store { ptr, i64, i64 } %t106, ptr %a111 + call void @finch_str_drop(ptr %a111) + br label %logic.rend1142 +logic.rend1142: + br label %logic.end1141 +logic.end1141: + %t112 = phi i1 [ false, %logic.from1139 ], [ %t110, %logic.rend1142 ] + br i1 %t112, label %then1143, label %endif1145 +then1143: + %t113 = load ptr, ptr %a1 + %t114 = call %S.lexer.Token @finch.parser.next(ptr %t113) + store %S.lexer.Token %t114, ptr %a115 + call void @finch.drop.S_lexer_Token(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a40 + %t117 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 3 + store { ptr, i64, i64 } %t116, ptr %a118 + call void @finch_str_copy(ptr %a119, ptr %a118) + %t120 = load { ptr, i64, i64 }, ptr %a119 + %t121 = load { ptr, i64, i64 }, ptr %t117 + store { ptr, i64, i64 } %t120, ptr %t117 + store { ptr, i64, i64 } %t121, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load ptr, ptr %a1 + %t124 = call %S.lexer.Token @finch.parser.next(ptr %t123) + %t125 = extractvalue %S.lexer.Token %t124, 1 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + store %S.lexer.Token %t124, ptr %a129 + call void @finch.drop.S_lexer_Token(ptr %a129) + %t130 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 2 + %t131 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t128, ptr %t130 + store { ptr, i64, i64 } %t131, ptr %a132 + call void @finch_str_drop(ptr %a132) + br label %endif1145 +endif1145: + %t133 = load ptr, ptr %a1 + %t134 = call i1 @finch.parser.at(ptr %t133, { ptr, i64, i64 } { ptr @.str.644, i64 1, i64 0 }) + br label %logic.from1146 +logic.from1146: + br i1 %t134, label %logic.rhs1147, label %logic.end1148 +logic.rhs1147: + %t135 = load ptr, ptr %a1 + %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) + %t137 = extractvalue %S.lexer.Token %t136, 4 + store %S.lexer.Token %t136, ptr %a138 + call void @finch.drop.S_lexer_Token(ptr %a138) + %t139 = xor i1 %t137, true + br label %logic.rend1149 +logic.rend1149: + br label %logic.end1148 +logic.end1148: + %t140 = phi i1 [ false, %logic.from1146 ], [ %t139, %logic.rend1149 ] + br label %logic.from1150 +logic.from1150: + br i1 %t140, label %logic.rhs1151, label %logic.end1152 +logic.rhs1151: + %t141 = load ptr, ptr %a1 + %t142 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t141, i64 1) + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.645, i64 1, i64 0 }, ptr %a144 + %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) + %t146 = icmp eq i32 %t145, 0 + store { ptr, i64, i64 } %t142, ptr %a147 + call void @finch_str_drop(ptr %a147) + br label %logic.rend1153 +logic.rend1153: + br label %logic.end1152 +logic.end1152: + %t148 = phi i1 [ false, %logic.from1150 ], [ %t146, %logic.rend1153 ] + br i1 %t148, label %then1154, label %endif1156 +then1154: + %t149 = load ptr, ptr %a1 + %t150 = call %S.lexer.Token @finch.parser.next(ptr %t149) + store %S.lexer.Token %t150, ptr %a151 + call void @finch.drop.S_lexer_Token(ptr %a151) + br label %while.cond1157 +while.cond1157: + br label %while.body1158 +while.body1158: + %t152 = getelementptr inbounds %S.ast.Type, ptr %a102, i32 0, i32 1 + %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i32 0, i32 1 + %t154 = load ptr, ptr %a1 + %t155 = call %S.ast.Type @finch.parser.parseType(ptr %t154) + %t156 = load i64, ptr %t153 + %t157 = add i64 %t156, 1 + call void @finch_arr_reserve(ptr %t152, i64 %t157, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t158 = load ptr, ptr %t152 + %t159 = getelementptr inbounds %S.ast.Type, ptr %t158, i64 %t156 + store %S.ast.Type %t155, ptr %t159 + store i64 %t157, ptr %t153 + %t160 = load ptr, ptr %a1 + %t161 = call i1 @finch.parser.accept(ptr %t160, { ptr, i64, i64 } { ptr @.str.646, i64 1, i64 0 }) + %t162 = xor i1 %t161, true + br i1 %t162, label %then1160, label %endif1162 +then1160: + br label %while.end1159 +endif1162: + br label %while.cond1157 +while.end1159: + %t163 = load ptr, ptr %a1 + %t164 = call %S.lexer.Token @finch.parser.expect(ptr %t163, { ptr, i64, i64 } { ptr @.str.647, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.648, i64 28, i64 0 }) + store %S.lexer.Token %t164, ptr %a165 + call void @finch.drop.S_lexer_Token(ptr %a165) + br label %endif1156 +endif1156: + %t166 = load %S.ast.Type, ptr %a102 + call void @finch_str_drop(ptr %a40) + ret %S.ast.Type %t166 +} + +define internal i1 @finch.parser.genericDeclAhead(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca i64, align 16 + %a27 = alloca i64, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.649, i64 5, i64 0 }) + %t4 = xor i1 %t3, true + br label %logic.from1163 +logic.from1163: + br i1 %t4, label %logic.end1165, label %logic.rhs1164 +logic.rhs1164: + %t5 = load ptr, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t5, i64 1) + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.650, i64 1, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp eq i32 %t9, 0 + store { ptr, i64, i64 } %t6, ptr %a11 + call void @finch_str_drop(ptr %a11) + br label %logic.rend1166 +logic.rend1166: + br label %logic.end1165 +logic.end1165: + %t12 = phi i1 [ true, %logic.from1163 ], [ %t10, %logic.rend1166 ] + br label %logic.from1167 +logic.from1167: + br i1 %t12, label %logic.end1169, label %logic.rhs1168 +logic.rhs1168: + %t13 = load ptr, ptr %a1 + %t14 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t13, i64 2) + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.651, i64 1, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + store { ptr, i64, i64 } %t14, ptr %a19 + call void @finch_str_drop(ptr %a19) + br label %logic.rend1170 +logic.rend1170: + br label %logic.end1169 +logic.end1169: + %t20 = phi i1 [ true, %logic.from1167 ], [ %t18, %logic.rend1170 ] + br i1 %t20, label %then1171, label %endif1173 +then1171: + ret i1 false +endif1173: + store i64 0, ptr %a21 + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic1174, label %ok1175 +panic1174: + call void @finch_panic(ptr @.str.652, i64 148, ptr @.str.653) + unreachable +ok1175: + %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = add i64 %t25, 1 + store i64 %t26, ptr %a27 + br label %while.cond1176 +while.cond1176: + %t28 = load i64, ptr %a27 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic1179, label %ok1180 +panic1179: + call void @finch_panic(ptr @.str.654, i64 149, ptr @.str.655) + unreachable +ok1180: + %t31 = getelementptr inbounds %S.parser.Parser, ptr %t29, i32 0, i32 0 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = icmp slt i64 %t28, %t33 + br i1 %t34, label %while.body1177, label %while.end1178 +while.body1177: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic1181, label %ok1182 +panic1181: + call void @finch_panic(ptr @.str.656, i64 150, ptr @.str.657) + unreachable +ok1182: + %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 0 + %t38 = load i64, ptr %a27 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range1183, label %inrange1184 +range1183: + call void @finch_panic_index(ptr @.str.658, i64 150, i64 %t38, i64 %t40) + unreachable +inrange1184: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.lexer.Token, ptr %t42, i64 %t38 + %t44 = getelementptr inbounds %S.lexer.Token, ptr %t43, i32 0, i32 0 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch_str_copy(ptr %a47, ptr %a46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t48, ptr %a49 + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.659, i64 1, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then1185, label %else1186 +then1185: + %t55 = load i64, ptr %a21 + %t56 = add i64 %t55, 1 + store i64 %t56, ptr %a21 + br label %endif1187 +else1186: + %t57 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.660, i64 1, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br i1 %t61, label %then1188, label %else1189 +then1188: + %t62 = load i64, ptr %a21 + %t63 = sub i64 %t62, 1 + store i64 %t63, ptr %a21 + %t64 = load i64, ptr %a21 + %t65 = icmp eq i64 %t64, 0 + br i1 %t65, label %then1191, label %endif1193 +then1191: + %t66 = load i64, ptr %a27 + %t67 = add i64 %t66, 1 + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic1194, label %ok1195 +panic1194: + call void @finch_panic(ptr @.str.661, i64 156, ptr @.str.662) + unreachable +ok1195: + %t70 = getelementptr inbounds %S.parser.Parser, ptr %t68, i32 0, i32 0 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 + %t72 = load i64, ptr %t71 + %t73 = icmp slt i64 %t67, %t72 + br label %logic.from1196 +logic.from1196: + br i1 %t73, label %logic.rhs1197, label %logic.end1198 +logic.rhs1197: + %t74 = load ptr, ptr %a1 + %t75 = icmp eq ptr %t74, null + br i1 %t75, label %panic1199, label %ok1200 +panic1199: + call void @finch_panic(ptr @.str.663, i64 156, ptr @.str.664) + unreachable +ok1200: + %t76 = getelementptr inbounds %S.parser.Parser, ptr %t74, i32 0, i32 0 + %t77 = load i64, ptr %a27 + %t78 = add i64 %t77, 1 + %t79 = load { ptr, i64, i64 }, ptr %t76 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range1201, label %inrange1202 +range1201: + call void @finch_panic_index(ptr @.str.665, i64 156, i64 %t78, i64 %t80) + unreachable +inrange1202: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds %S.lexer.Token, ptr %t82, i64 %t78 + %t84 = getelementptr inbounds %S.lexer.Token, ptr %t83, i32 0, i32 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.666, i64 5, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + br label %logic.rend1203 +logic.rend1203: + br label %logic.end1198 +logic.end1198: + %t90 = phi i1 [ false, %logic.from1196 ], [ %t89, %logic.rend1203 ] + br label %logic.from1204 +logic.from1204: + br i1 %t90, label %logic.rhs1205, label %logic.end1206 +logic.rhs1205: + %t91 = load ptr, ptr %a1 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic1207, label %ok1208 +panic1207: + call void @finch_panic(ptr @.str.667, i64 156, ptr @.str.668) + unreachable +ok1208: + %t93 = getelementptr inbounds %S.parser.Parser, ptr %t91, i32 0, i32 0 + %t94 = load i64, ptr %a27 + %t95 = add i64 %t94, 1 + %t96 = load { ptr, i64, i64 }, ptr %t93 + %t97 = extractvalue { ptr, i64, i64 } %t96, 1 + %t98 = icmp uge i64 %t95, %t97 + br i1 %t98, label %range1209, label %inrange1210 +range1209: + call void @finch_panic_index(ptr @.str.669, i64 156, i64 %t95, i64 %t97) + unreachable +inrange1210: + %t99 = extractvalue { ptr, i64, i64 } %t96, 0 + %t100 = getelementptr inbounds %S.lexer.Token, ptr %t99, i64 %t95 + %t101 = getelementptr inbounds %S.lexer.Token, ptr %t100, i32 0, i32 4 + %t102 = load i1, ptr %t101 + %t103 = xor i1 %t102, true + br label %logic.rend1211 +logic.rend1211: + br label %logic.end1206 +logic.end1206: + %t104 = phi i1 [ false, %logic.from1204 ], [ %t103, %logic.rend1211 ] + call void @finch_str_drop(ptr %a49) + ret i1 %t104 +endif1193: + br label %endif1190 +else1189: + %t105 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t105, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.670, i64 3, i64 0 }, ptr %a107 + %t108 = call i32 @finch_str_eq(ptr %a106, ptr %a107) + %t109 = icmp ne i32 %t108, 0 + br label %logic.from1212 +logic.from1212: + br i1 %t109, label %logic.end1214, label %logic.rhs1213 +logic.rhs1213: + %t110 = load ptr, ptr %a1 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic1215, label %ok1216 +panic1215: + call void @finch_panic(ptr @.str.671, i64 158, ptr @.str.672) + unreachable +ok1216: + %t112 = getelementptr inbounds %S.parser.Parser, ptr %t110, i32 0, i32 0 + %t113 = load i64, ptr %a27 + %t114 = load { ptr, i64, i64 }, ptr %t112 + %t115 = extractvalue { ptr, i64, i64 } %t114, 1 + %t116 = icmp uge i64 %t113, %t115 + br i1 %t116, label %range1217, label %inrange1218 +range1217: + call void @finch_panic_index(ptr @.str.673, i64 158, i64 %t113, i64 %t115) + unreachable +inrange1218: + %t117 = extractvalue { ptr, i64, i64 } %t114, 0 + %t118 = getelementptr inbounds %S.lexer.Token, ptr %t117, i64 %t113 + %t119 = getelementptr inbounds %S.lexer.Token, ptr %t118, i32 0, i32 4 + %t120 = load i1, ptr %t119 + br label %logic.from1219 +logic.from1219: + br i1 %t120, label %logic.rhs1220, label %logic.end1221 +logic.rhs1220: + %t121 = load i64, ptr %a21 + %t122 = icmp eq i64 %t121, 0 + br label %logic.rend1222 +logic.rend1222: + br label %logic.end1221 +logic.end1221: + %t123 = phi i1 [ false, %logic.from1219 ], [ %t122, %logic.rend1222 ] + br label %logic.rend1223 +logic.rend1223: + br label %logic.end1214 +logic.end1214: + %t124 = phi i1 [ true, %logic.from1212 ], [ %t123, %logic.rend1223 ] + br i1 %t124, label %then1224, label %endif1226 +then1224: + call void @finch_str_drop(ptr %a49) + ret i1 false +endif1226: + br label %endif1190 +endif1190: + br label %endif1187 +endif1187: + %t125 = load i64, ptr %a27 + %t126 = add i64 %t125, 1 + store i64 %t126, ptr %a27 + call void @finch_str_drop(ptr %a49) + br label %while.cond1176 +while.end1178: + ret i1 false +} + +define internal i1 @finch.parser.genericCallAheadFrom(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a9 = alloca i1, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic1227, label %ok1228 +panic1227: + call void @finch_panic(ptr @.str.674, i64 168, ptr @.str.675) + unreachable +ok1228: + %t4 = getelementptr inbounds %S.parser.Parser, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = sub i64 %t5, 1 + store i64 %t6, ptr %t4 + %t7 = load ptr, ptr %a1 + %t8 = call i1 @finch.parser.genericCallAhead(ptr %t7) + store i1 %t8, ptr %a9 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic1229, label %ok1230 +panic1229: + call void @finch_panic(ptr @.str.676, i64 170, ptr @.str.677) + unreachable +ok1230: + %t12 = getelementptr inbounds %S.parser.Parser, ptr %t10, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + store i64 %t14, ptr %t12 + %t15 = load i1, ptr %a9 + ret i1 %t15 +} + +define internal i1 @finch.parser.genericCallAhead(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca i64, align 16 + %a39 = alloca i64, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t2, i64 1) + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.678, i64 1, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp eq i32 %t6, 0 + store { ptr, i64, i64 } %t3, ptr %a8 + call void @finch_str_drop(ptr %a8) + br label %logic.from1231 +logic.from1231: + br i1 %t7, label %logic.end1233, label %logic.rhs1232 +logic.rhs1232: + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic1234, label %ok1235 +panic1234: + call void @finch_panic(ptr @.str.679, i64 176, ptr @.str.680) + unreachable +ok1235: + %t11 = getelementptr inbounds %S.parser.Parser, ptr %t9, i32 0, i32 0 + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic1236, label %ok1237 +panic1236: + call void @finch_panic(ptr @.str.681, i64 176, ptr @.str.682) + unreachable +ok1237: + %t14 = getelementptr inbounds %S.parser.Parser, ptr %t12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = add i64 %t15, 1 + %t17 = load { ptr, i64, i64 }, ptr %t11 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range1238, label %inrange1239 +range1238: + call void @finch_panic_index(ptr @.str.683, i64 176, i64 %t16, i64 %t18) + unreachable +inrange1239: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.lexer.Token, ptr %t20, i64 %t16 + %t22 = getelementptr inbounds %S.lexer.Token, ptr %t21, i32 0, i32 4 + %t23 = load i1, ptr %t22 + br label %logic.rend1240 +logic.rend1240: + br label %logic.end1233 +logic.end1233: + %t24 = phi i1 [ true, %logic.from1231 ], [ %t23, %logic.rend1240 ] + br label %logic.from1241 +logic.from1241: + br i1 %t24, label %logic.end1243, label %logic.rhs1242 +logic.rhs1242: + %t25 = load ptr, ptr %a1 + %t26 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t25, i64 2) + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.684, i64 1, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + br label %logic.rend1244 +logic.rend1244: + br label %logic.end1243 +logic.end1243: + %t32 = phi i1 [ true, %logic.from1241 ], [ %t30, %logic.rend1244 ] + br i1 %t32, label %then1245, label %endif1247 +then1245: + ret i1 false +endif1247: + store i64 0, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic1248, label %ok1249 +panic1248: + call void @finch_panic(ptr @.str.685, i64 180, ptr @.str.686) + unreachable +ok1249: + %t36 = getelementptr inbounds %S.parser.Parser, ptr %t34, i32 0, i32 1 + %t37 = load i64, ptr %t36 + %t38 = add i64 %t37, 1 + store i64 %t38, ptr %a39 + br label %while.cond1250 +while.cond1250: + %t40 = load i64, ptr %a39 + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic1253, label %ok1254 +panic1253: + call void @finch_panic(ptr @.str.687, i64 181, ptr @.str.688) + unreachable +ok1254: + %t43 = getelementptr inbounds %S.parser.Parser, ptr %t41, i32 0, i32 0 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = icmp slt i64 %t40, %t45 + br i1 %t46, label %while.body1251, label %while.end1252 +while.body1251: + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic1255, label %ok1256 +panic1255: + call void @finch_panic(ptr @.str.689, i64 182, ptr @.str.690) + unreachable +ok1256: + %t49 = getelementptr inbounds %S.parser.Parser, ptr %t47, i32 0, i32 0 + %t50 = load i64, ptr %a39 + %t51 = load { ptr, i64, i64 }, ptr %t49 + %t52 = extractvalue { ptr, i64, i64 } %t51, 1 + %t53 = icmp uge i64 %t50, %t52 + br i1 %t53, label %range1257, label %inrange1258 +range1257: + call void @finch_panic_index(ptr @.str.691, i64 182, i64 %t50, i64 %t52) + unreachable +inrange1258: + %t54 = extractvalue { ptr, i64, i64 } %t51, 0 + %t55 = getelementptr inbounds %S.lexer.Token, ptr %t54, i64 %t50 + %t56 = getelementptr inbounds %S.lexer.Token, ptr %t55, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch_str_copy(ptr %a59, ptr %a58) + %t60 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t60, ptr %a61 + %t62 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.692, i64 1, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br i1 %t66, label %then1259, label %else1260 +then1259: + %t67 = load i64, ptr %a33 + %t68 = add i64 %t67, 1 + store i64 %t68, ptr %a33 + br label %endif1261 +else1260: + %t69 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.693, i64 1, i64 0 }, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %then1262, label %else1263 +then1262: + %t74 = load i64, ptr %a33 + %t75 = sub i64 %t74, 1 + store i64 %t75, ptr %a33 + %t76 = load i64, ptr %a33 + %t77 = icmp eq i64 %t76, 0 + br i1 %t77, label %then1265, label %endif1267 +then1265: + %t78 = load i64, ptr %a39 + %t79 = add i64 %t78, 1 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic1268, label %ok1269 +panic1268: + call void @finch_panic(ptr @.str.694, i64 188, ptr @.str.695) + unreachable +ok1269: + %t82 = getelementptr inbounds %S.parser.Parser, ptr %t80, i32 0, i32 0 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 + %t84 = load i64, ptr %t83 + %t85 = icmp slt i64 %t79, %t84 + br label %logic.from1270 +logic.from1270: + br i1 %t85, label %logic.rhs1271, label %logic.end1272 +logic.rhs1271: + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic1273, label %ok1274 +panic1273: + call void @finch_panic(ptr @.str.696, i64 188, ptr @.str.697) + unreachable +ok1274: + %t88 = getelementptr inbounds %S.parser.Parser, ptr %t86, i32 0, i32 0 + %t89 = load i64, ptr %a39 + %t90 = add i64 %t89, 1 + %t91 = load { ptr, i64, i64 }, ptr %t88 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 %t90, %t92 + br i1 %t93, label %range1275, label %inrange1276 +range1275: + call void @finch_panic_index(ptr @.str.698, i64 188, i64 %t90, i64 %t92) + unreachable +inrange1276: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds %S.lexer.Token, ptr %t94, i64 %t90 + %t96 = getelementptr inbounds %S.lexer.Token, ptr %t95, i32 0, i32 0 + %t97 = load { ptr, i64, i64 }, ptr %t96 + store { ptr, i64, i64 } %t97, ptr %a98 + store { ptr, i64, i64 } { ptr @.str.699, i64 1, i64 0 }, ptr %a99 + %t100 = call i32 @finch_str_eq(ptr %a98, ptr %a99) + %t101 = icmp ne i32 %t100, 0 + br label %logic.rend1277 +logic.rend1277: + br label %logic.end1272 +logic.end1272: + %t102 = phi i1 [ false, %logic.from1270 ], [ %t101, %logic.rend1277 ] + br label %logic.from1278 +logic.from1278: + br i1 %t102, label %logic.rhs1279, label %logic.end1280 +logic.rhs1279: + %t103 = load ptr, ptr %a1 + %t104 = icmp eq ptr %t103, null + br i1 %t104, label %panic1281, label %ok1282 +panic1281: + call void @finch_panic(ptr @.str.700, i64 188, ptr @.str.701) + unreachable +ok1282: + %t105 = getelementptr inbounds %S.parser.Parser, ptr %t103, i32 0, i32 0 + %t106 = load i64, ptr %a39 + %t107 = add i64 %t106, 1 + %t108 = load { ptr, i64, i64 }, ptr %t105 + %t109 = extractvalue { ptr, i64, i64 } %t108, 1 + %t110 = icmp uge i64 %t107, %t109 + br i1 %t110, label %range1283, label %inrange1284 +range1283: + call void @finch_panic_index(ptr @.str.702, i64 188, i64 %t107, i64 %t109) + unreachable +inrange1284: + %t111 = extractvalue { ptr, i64, i64 } %t108, 0 + %t112 = getelementptr inbounds %S.lexer.Token, ptr %t111, i64 %t107 + %t113 = getelementptr inbounds %S.lexer.Token, ptr %t112, i32 0, i32 4 + %t114 = load i1, ptr %t113 + %t115 = xor i1 %t114, true + br label %logic.rend1285 +logic.rend1285: + br label %logic.end1280 +logic.end1280: + %t116 = phi i1 [ false, %logic.from1278 ], [ %t115, %logic.rend1285 ] + call void @finch_str_drop(ptr %a61) + ret i1 %t116 +endif1267: + br label %endif1264 +else1263: + %t117 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t117, ptr %a118 + store { ptr, i64, i64 } { ptr @.str.703, i64 3, i64 0 }, ptr %a119 + %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) + %t121 = icmp ne i32 %t120, 0 + br label %logic.from1286 +logic.from1286: + br i1 %t121, label %logic.end1288, label %logic.rhs1287 +logic.rhs1287: + %t122 = load ptr, ptr %a1 + %t123 = icmp eq ptr %t122, null + br i1 %t123, label %panic1289, label %ok1290 +panic1289: + call void @finch_panic(ptr @.str.704, i64 190, ptr @.str.705) + unreachable +ok1290: + %t124 = getelementptr inbounds %S.parser.Parser, ptr %t122, i32 0, i32 0 + %t125 = load i64, ptr %a39 + %t126 = load { ptr, i64, i64 }, ptr %t124 + %t127 = extractvalue { ptr, i64, i64 } %t126, 1 + %t128 = icmp uge i64 %t125, %t127 + br i1 %t128, label %range1291, label %inrange1292 +range1291: + call void @finch_panic_index(ptr @.str.706, i64 190, i64 %t125, i64 %t127) + unreachable +inrange1292: + %t129 = extractvalue { ptr, i64, i64 } %t126, 0 + %t130 = getelementptr inbounds %S.lexer.Token, ptr %t129, i64 %t125 + %t131 = getelementptr inbounds %S.lexer.Token, ptr %t130, i32 0, i32 4 + %t132 = load i1, ptr %t131 + br label %logic.rend1293 +logic.rend1293: + br label %logic.end1288 +logic.end1288: + %t133 = phi i1 [ true, %logic.from1286 ], [ %t132, %logic.rend1293 ] + br i1 %t133, label %then1294, label %endif1296 +then1294: + call void @finch_str_drop(ptr %a61) + ret i1 false +endif1296: + br label %endif1264 +endif1264: + br label %endif1261 +endif1261: + %t134 = load i64, ptr %a39 + %t135 = add i64 %t134, 1 + store i64 %t135, ptr %a39 + call void @finch_str_drop(ptr %a61) + br label %while.cond1250 +while.end1252: + ret i1 false +} + +define internal i1 @finch.parser.atDeclaration(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.lexer.Token, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca %S.lexer.Token, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.genericDeclAhead(ptr %t2) + br i1 %t3, label %then1297, label %endif1299 +then1297: + ret i1 true +endif1299: + %t4 = load ptr, ptr %a1 + %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.707, i64 1, i64 0 }) + br i1 %t5, label %then1300, label %endif1302 +then1300: + %t6 = load ptr, ptr %a1 + %t7 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t6, i64 1) + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.708, i64 1, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + store { ptr, i64, i64 } %t7, ptr %a12 + call void @finch_str_drop(ptr %a12) + ret i1 %t11 +endif1302: + %t13 = load ptr, ptr %a1 + %t14 = call i1 @finch.parser.at(ptr %t13, { ptr, i64, i64 } { ptr @.str.709, i64 5, i64 0 }) + %t15 = xor i1 %t14, true + br i1 %t15, label %then1303, label %endif1305 +then1303: + ret i1 false +endif1305: + %t16 = load ptr, ptr %a1 + %t17 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t16, i64 1) + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.710, i64 5, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br i1 %t23, label %then1306, label %endif1308 +then1306: + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic1309, label %ok1310 +panic1309: + call void @finch_panic(ptr @.str.711, i64 210, ptr @.str.712) + unreachable +ok1310: + %t26 = getelementptr inbounds %S.parser.Parser, ptr %t24, i32 0, i32 0 + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic1311, label %ok1312 +panic1311: + call void @finch_panic(ptr @.str.713, i64 210, ptr @.str.714) + unreachable +ok1312: + %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = add i64 %t30, 1 + %t32 = load { ptr, i64, i64 }, ptr %t26 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range1313, label %inrange1314 +range1313: + call void @finch_panic_index(ptr @.str.715, i64 210, i64 %t31, i64 %t33) + unreachable +inrange1314: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.lexer.Token, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.lexer.Token, ptr %t36, i32 0, i32 4 + %t38 = load i1, ptr %t37 + %t39 = xor i1 %t38, true + call void @finch_str_drop(ptr %a18) + ret i1 %t39 +endif1308: + %t40 = load ptr, ptr %a1 + %t41 = call %S.lexer.Token @finch.parser.cur(ptr %t40) + %t42 = extractvalue %S.lexer.Token %t41, 1 + store { ptr, i64, i64 } %t42, ptr %a43 + call void @finch_str_copy(ptr %a44, ptr %a43) + %t45 = load { ptr, i64, i64 }, ptr %a44 + store %S.lexer.Token %t41, ptr %a46 + call void @finch.drop.S_lexer_Token(ptr %a46) + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.716, i64 3, i64 0 }, ptr %a48 + %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) + %t50 = icmp ne i32 %t49, 0 + store { ptr, i64, i64 } %t45, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %logic.from1315 +logic.from1315: + br i1 %t50, label %logic.end1317, label %logic.rhs1316 +logic.rhs1316: + %t52 = load ptr, ptr %a1 + %t53 = call %S.lexer.Token @finch.parser.cur(ptr %t52) + %t54 = extractvalue %S.lexer.Token %t53, 1 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_copy(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + store %S.lexer.Token %t53, ptr %a58 + call void @finch.drop.S_lexer_Token(ptr %a58) + store { ptr, i64, i64 } %t57, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.717, i64 3, i64 0 }, ptr %a60 + %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) + %t62 = icmp ne i32 %t61, 0 + store { ptr, i64, i64 } %t57, ptr %a63 + call void @finch_str_drop(ptr %a63) + br label %logic.rend1318 +logic.rend1318: + br label %logic.end1317 +logic.end1317: + %t64 = phi i1 [ true, %logic.from1315 ], [ %t62, %logic.rend1318 ] + br label %logic.from1319 +logic.from1319: + br i1 %t64, label %logic.rhs1320, label %logic.end1321 +logic.rhs1320: + %t65 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t65, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.718, i64 1, i64 0 }, ptr %a67 + %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) + %t69 = icmp ne i32 %t68, 0 + br label %logic.rend1322 +logic.rend1322: + br label %logic.end1321 +logic.end1321: + %t70 = phi i1 [ false, %logic.from1319 ], [ %t69, %logic.rend1322 ] + br i1 %t70, label %then1323, label %endif1325 +then1323: + call void @finch_str_drop(ptr %a18) + ret i1 true +endif1325: + %t71 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t71, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.719, i64 1, i64 0 }, ptr %a73 + %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) + %t75 = icmp ne i32 %t74, 0 + br label %logic.from1326 +logic.from1326: + br i1 %t75, label %logic.rhs1327, label %logic.end1328 +logic.rhs1327: + %t76 = load ptr, ptr %a1 + %t77 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t76, i64 2) + store { ptr, i64, i64 } %t77, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.720, i64 5, i64 0 }, ptr %a79 + %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) + %t81 = icmp ne i32 %t80, 0 + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + br label %logic.rend1329 +logic.rend1329: + br label %logic.end1328 +logic.end1328: + %t83 = phi i1 [ false, %logic.from1326 ], [ %t81, %logic.rend1329 ] + br label %logic.from1330 +logic.from1330: + br i1 %t83, label %logic.rhs1331, label %logic.end1332 +logic.rhs1331: + %t84 = load ptr, ptr %a1 + %t85 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t84, i64 3) + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.721, i64 5, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + br label %logic.rend1333 +logic.rend1333: + br label %logic.end1332 +logic.end1332: + %t91 = phi i1 [ false, %logic.from1330 ], [ %t89, %logic.rend1333 ] + br label %logic.from1334 +logic.from1334: + br i1 %t91, label %logic.rhs1335, label %logic.end1336 +logic.rhs1335: + %t92 = load ptr, ptr %a1 + %t93 = icmp eq ptr %t92, null + br i1 %t93, label %panic1337, label %ok1338 +panic1337: + call void @finch_panic(ptr @.str.722, i64 215, ptr @.str.723) + unreachable +ok1338: + %t94 = getelementptr inbounds %S.parser.Parser, ptr %t92, i32 0, i32 0 + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic1339, label %ok1340 +panic1339: + call void @finch_panic(ptr @.str.724, i64 215, ptr @.str.725) + unreachable +ok1340: + %t97 = getelementptr inbounds %S.parser.Parser, ptr %t95, i32 0, i32 1 + %t98 = load i64, ptr %t97 + %t99 = add i64 %t98, 3 + %t100 = load { ptr, i64, i64 }, ptr %t94 + %t101 = extractvalue { ptr, i64, i64 } %t100, 1 + %t102 = icmp uge i64 %t99, %t101 + br i1 %t102, label %range1341, label %inrange1342 +range1341: + call void @finch_panic_index(ptr @.str.726, i64 215, i64 %t99, i64 %t101) + unreachable +inrange1342: + %t103 = extractvalue { ptr, i64, i64 } %t100, 0 + %t104 = getelementptr inbounds %S.lexer.Token, ptr %t103, i64 %t99 + %t105 = getelementptr inbounds %S.lexer.Token, ptr %t104, i32 0, i32 4 + %t106 = load i1, ptr %t105 + %t107 = xor i1 %t106, true + br label %logic.rend1343 +logic.rend1343: + br label %logic.end1336 +logic.end1336: + %t108 = phi i1 [ false, %logic.from1334 ], [ %t107, %logic.rend1343 ] + call void @finch_str_drop(ptr %a18) + ret i1 %t108 +} + +define internal void @finch.parser.endOfStatement(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a10 = alloca %S.lexer.Token, align 16 + %a18 = alloca %S.lexer.Token, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca %S.lexer.Token, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.727, i64 1, i64 0 }) + br label %logic.from1344 +logic.from1344: + br i1 %t3, label %logic.end1346, label %logic.rhs1345 +logic.rhs1345: + %t4 = load ptr, ptr %a1 + %t5 = call i1 @finch.parser.at(ptr %t4, { ptr, i64, i64 } { ptr @.str.728, i64 3, i64 0 }) + br label %logic.rend1347 +logic.rend1347: + br label %logic.end1346 +logic.end1346: + %t6 = phi i1 [ true, %logic.from1344 ], [ %t5, %logic.rend1347 ] + br label %logic.from1348 +logic.from1348: + br i1 %t6, label %logic.end1350, label %logic.rhs1349 +logic.rhs1349: + %t7 = load ptr, ptr %a1 + %t8 = call %S.lexer.Token @finch.parser.cur(ptr %t7) + %t9 = extractvalue %S.lexer.Token %t8, 4 + store %S.lexer.Token %t8, ptr %a10 + call void @finch.drop.S_lexer_Token(ptr %a10) + br label %logic.rend1351 +logic.rend1351: + br label %logic.end1350 +logic.end1350: + %t11 = phi i1 [ true, %logic.from1348 ], [ %t9, %logic.rend1351 ] + br i1 %t11, label %then1352, label %endif1354 +then1352: + ret void +endif1354: + %t12 = load ptr, ptr %a1 + %t13 = load ptr, ptr %a1 + %t14 = call %S.lexer.Token @finch.parser.cur(ptr %t13) + %t15 = load ptr, ptr %a1 + %t16 = call %S.lexer.Token @finch.parser.cur(ptr %t15) + %t17 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t16) + store %S.lexer.Token %t16, ptr %a18 + call void @finch.drop.S_lexer_Token(ptr %a18) + store { ptr, i64, i64 } { ptr @.str.729, i64 11, i64 0 }, ptr %a20 + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t17, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.730, i64 37, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + call void @finch.parser.fail(ptr %t12, %S.lexer.Token %t14, { ptr, i64, i64 } %t28) + store %S.lexer.Token %t14, ptr %a29 + call void @finch.drop.S_lexer_Token(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a30 + call void @finch_str_drop(ptr %a30) + ret void +} + +define internal %S.ast.Program @finch.parser.parseProgram(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Program, align 16 + %a10 = alloca %S.lexer.Token, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca %S.lexer.Token, align 16 + %a87 = alloca %S.lexer.Token, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca %S.lexer.Token, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca i1, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca %S.ast.Node, align 16 + %a170 = alloca %S.ast.Node, align 16 + %a171 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Program zeroinitializer, ptr %a2 + br label %while.cond1355 +while.cond1355: + %t3 = load ptr, ptr %a1 + %t4 = call i1 @finch.parser.at(ptr %t3, { ptr, i64, i64 } { ptr @.str.731, i64 3, i64 0 }) + %t5 = xor i1 %t4, true + br i1 %t5, label %while.body1356, label %while.end1357 +while.body1356: + %t6 = load ptr, ptr %a1 + %t7 = call i1 @finch.parser.at(ptr %t6, { ptr, i64, i64 } { ptr @.str.732, i64 6, i64 0 }) + br i1 %t7, label %then1358, label %else1359 +then1358: + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.next(ptr %t8) + store %S.lexer.Token %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.733, i64 6, i64 0 }) + br i1 %t12, label %then1361, label %else1362 +then1361: + %t13 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 4 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic1364, label %ok1365 +panic1364: + call void @finch_panic(ptr @.str.734, i64 233, ptr @.str.735) + unreachable +ok1365: + %t17 = getelementptr inbounds %S.parser.Parser, ptr %t15, i32 0, i32 4 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.736, i64 1, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a19 + %t23 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 2 + %t24 = load i64, ptr %t23 + call void @finch_str_from_int(ptr %a25, i64 %t24) + %t26 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t22, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t22, ptr %a30 + call void @finch_str_drop(ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.737, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = getelementptr inbounds %S.lexer.Token, ptr %a10, i32 0, i32 3 + %t39 = load i64, ptr %t38 + call void @finch_str_from_int(ptr %a40, i64 %t39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t37, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t37, ptr %a45 + call void @finch_str_drop(ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a42 + %t48 = load i64, ptr %t14 + %t49 = add i64 %t48, 1 + call void @finch_arr_reserve(ptr %t13, i64 %t49, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t50 = load ptr, ptr %t13 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 + store { ptr, i64, i64 } %t47, ptr %t51 + store i64 %t49, ptr %t14 + %t52 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 3 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 + %t54 = load ptr, ptr %a1 + %t55 = call %S.lexer.Token @finch.parser.next(ptr %t54) + %t56 = extractvalue %S.lexer.Token %t55, 1 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_copy(ptr %a58, ptr %a57) + %t59 = load { ptr, i64, i64 }, ptr %a58 + store %S.lexer.Token %t55, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + %t61 = load i64, ptr %t53 + %t62 = add i64 %t61, 1 + call void @finch_arr_reserve(ptr %t52, i64 %t62, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t63 = load ptr, ptr %t52 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i64 %t61 + store { ptr, i64, i64 } %t59, ptr %t64 + store i64 %t62, ptr %t53 + br label %endif1363 +else1362: + %t65 = load ptr, ptr %a1 + %t66 = call i1 @finch.parser.at(ptr %t65, { ptr, i64, i64 } { ptr @.str.738, i64 5, i64 0 }) + %t67 = xor i1 %t66, true + br i1 %t67, label %then1366, label %endif1368 +then1366: + %t68 = load ptr, ptr %a1 + %t69 = load %S.lexer.Token, ptr %a10 + call void @finch.parser.fail(ptr %t68, %S.lexer.Token %t69, { ptr, i64, i64 } { ptr @.str.739, i64 51, i64 0 }) + br label %endif1368 +endif1368: + %t70 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 2 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 + %t72 = load ptr, ptr %a1 + %t73 = call %S.lexer.Token @finch.parser.next(ptr %t72) + %t74 = extractvalue %S.lexer.Token %t73, 1 + store { ptr, i64, i64 } %t74, ptr %a75 + call void @finch_str_copy(ptr %a76, ptr %a75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + store %S.lexer.Token %t73, ptr %a78 + call void @finch.drop.S_lexer_Token(ptr %a78) + %t79 = load i64, ptr %t71 + %t80 = add i64 %t79, 1 + call void @finch_arr_reserve(ptr %t70, i64 %t80, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t81 = load ptr, ptr %t70 + %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %t81, i64 %t79 + store { ptr, i64, i64 } %t77, ptr %t82 + store i64 %t80, ptr %t71 + br label %endif1363 +endif1363: + call void @finch.drop.S_lexer_Token(ptr %a10) + br label %endif1360 +else1359: + %t83 = load ptr, ptr %a1 + %t84 = call i1 @finch.parser.at(ptr %t83, { ptr, i64, i64 } { ptr @.str.740, i64 4, i64 0 }) + br i1 %t84, label %then1369, label %else1370 +then1369: + %t85 = load ptr, ptr %a1 + %t86 = call %S.lexer.Token @finch.parser.next(ptr %t85) + store %S.lexer.Token %t86, ptr %a87 + %t88 = load ptr, ptr %a1 + %t89 = call %S.lexer.Token @finch.parser.expect(ptr %t88, { ptr, i64, i64 } { ptr @.str.741, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.742, i64 42, i64 0 }) + %t90 = extractvalue %S.lexer.Token %t89, 1 + store { ptr, i64, i64 } %t90, ptr %a91 + call void @finch_str_copy(ptr %a92, ptr %a91) + %t93 = load { ptr, i64, i64 }, ptr %a92 + store %S.lexer.Token %t89, ptr %a94 + call void @finch.drop.S_lexer_Token(ptr %a94) + store { ptr, i64, i64 } %t93, ptr %a95 + %t96 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.744, i64 2, i64 0 }, ptr %a99 + %t100 = call i32 @finch_str_ends(ptr %a97, ptr %a99) + %t101 = icmp ne i32 %t100, 0 + br label %logic.from1372 +logic.from1372: + br i1 %t101, label %logic.end1374, label %logic.rhs1373 +logic.rhs1373: + %t102 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.746, i64 2, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_ends(ptr %a103, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br label %logic.rend1375 +logic.rend1375: + br label %logic.end1374 +logic.end1374: + %t108 = phi i1 [ true, %logic.from1372 ], [ %t107, %logic.rend1375 ] + br label %logic.from1376 +logic.from1376: + br i1 %t108, label %logic.end1378, label %logic.rhs1377 +logic.rhs1377: + %t109 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t109, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.748, i64 2, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_ends(ptr %a110, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br label %logic.rend1379 +logic.rend1379: + br label %logic.end1378 +logic.end1378: + %t115 = phi i1 [ true, %logic.from1376 ], [ %t114, %logic.rend1379 ] + store i1 %t115, ptr %a116 + %t117 = load i1, ptr %a116 + %t118 = xor i1 %t117, true + br label %logic.from1380 +logic.from1380: + br i1 %t118, label %logic.rhs1381, label %logic.end1382 +logic.rhs1381: + %t119 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t119, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.750, i64 3, i64 0 }, ptr %a122 + %t123 = call i32 @finch_str_starts(ptr %a120, ptr %a122) + %t124 = icmp ne i32 %t123, 0 + br label %logic.from1383 +logic.from1383: + br i1 %t124, label %logic.end1385, label %logic.rhs1384 +logic.rhs1384: + %t125 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t125, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.752, i64 3, i64 0 }, ptr %a128 + %t129 = call i64 @finch_str_find(ptr %a126, ptr %a128) + %t130 = icmp sge i64 %t129, 0 + br label %logic.rend1386 +logic.rend1386: + br label %logic.end1385 +logic.end1385: + %t131 = phi i1 [ true, %logic.from1383 ], [ %t130, %logic.rend1386 ] + br label %logic.from1387 +logic.from1387: + br i1 %t131, label %logic.end1389, label %logic.rhs1388 +logic.rhs1388: + %t132 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t132, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.754, i64 1, i64 0 }, ptr %a135 + %t136 = call i64 @finch_str_find(ptr %a133, ptr %a135) + %t137 = icmp sge i64 %t136, 0 + br label %logic.rend1390 +logic.rend1390: + br label %logic.end1389 +logic.end1389: + %t138 = phi i1 [ true, %logic.from1387 ], [ %t137, %logic.rend1390 ] + br label %logic.rend1391 +logic.rend1391: + br label %logic.end1382 +logic.end1382: + %t139 = phi i1 [ false, %logic.from1380 ], [ %t138, %logic.rend1391 ] + br i1 %t139, label %then1392, label %endif1394 +then1392: + %t140 = load ptr, ptr %a1 + %t141 = load %S.lexer.Token, ptr %a87 + call void @finch.parser.fail(ptr %t140, %S.lexer.Token %t141, { ptr, i64, i64 } { ptr @.str.755, i64 65, i64 0 }) + br label %endif1394 +endif1394: + %t142 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 5 + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t142, i32 0, i32 1 + %t144 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t144, ptr %a145 + call void @finch_str_copy(ptr %a146, ptr %a145) + %t147 = load { ptr, i64, i64 }, ptr %a146 + %t148 = load i64, ptr %t143 + %t149 = add i64 %t148, 1 + call void @finch_arr_reserve(ptr %t142, i64 %t149, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t150 = load ptr, ptr %t142 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i64 %t148 + store { ptr, i64, i64 } %t147, ptr %t151 + store i64 %t149, ptr %t143 + call void @finch_str_drop(ptr %a95) + call void @finch.drop.S_lexer_Token(ptr %a87) + br label %endif1371 +else1370: + %t152 = load ptr, ptr %a1 + %t153 = call i1 @finch.parser.at(ptr %t152, { ptr, i64, i64 } { ptr @.str.756, i64 6, i64 0 }) + br i1 %t153, label %then1395, label %else1396 +then1395: + %t154 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 + %t156 = load ptr, ptr %a1 + %t157 = call %S.ast.Node @finch.parser.parseStruct(ptr %t156) + %t158 = load i64, ptr %t155 + %t159 = add i64 %t158, 1 + call void @finch_arr_reserve(ptr %t154, i64 %t159, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t160 = load ptr, ptr %t154 + %t161 = getelementptr inbounds %S.ast.Node, ptr %t160, i64 %t158 + store %S.ast.Node %t157, ptr %t161 + store i64 %t159, ptr %t155 + br label %endif1397 +else1396: + %t162 = load ptr, ptr %a1 + %t163 = call i1 @finch.parser.at(ptr %t162, { ptr, i64, i64 } { ptr @.str.757, i64 4, i64 0 }) + br i1 %t163, label %then1398, label %else1399 +then1398: + %t164 = load ptr, ptr %a1 + %t165 = call %S.ast.Node @finch.parser.parseEnum(ptr %t164) + store %S.ast.Node %t165, ptr %a166 + %t167 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 7 + %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t169 = load %S.ast.Node, ptr %a166 + store %S.ast.Node %t169, ptr %a170 + call void @finch.copy.S_ast_Node(ptr %a171, ptr %a170) + %t172 = load %S.ast.Node, ptr %a171 + %t173 = load i64, ptr %t168 + %t174 = add i64 %t173, 1 + call void @finch_arr_reserve(ptr %t167, i64 %t174, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t175 = load ptr, ptr %t167 + %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t173 + store %S.ast.Node %t172, ptr %t176 + store i64 %t174, ptr %t168 + %t177 = getelementptr inbounds %S.ast.Node, ptr %a166, i32 0, i32 6 + %t178 = load i1, ptr %t177 + br i1 %t178, label %then1401, label %endif1403 +then1401: + %t179 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 6 + %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 + %t181 = load %S.ast.Node, ptr %a166 + %t182 = call %S.ast.Node @finch.parser.sumStruct(%S.ast.Node %t181) + %t183 = load i64, ptr %t180 + %t184 = add i64 %t183, 1 + call void @finch_arr_reserve(ptr %t179, i64 %t184, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t185 = load ptr, ptr %t179 + %t186 = getelementptr inbounds %S.ast.Node, ptr %t185, i64 %t183 + store %S.ast.Node %t182, ptr %t186 + store i64 %t184, ptr %t180 + br label %endif1403 +endif1403: + call void @finch.drop.S_ast_Node(ptr %a166) + br label %endif1400 +else1399: + %t187 = getelementptr inbounds %S.ast.Program, ptr %a2, i32 0, i32 8 + %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 + %t189 = load ptr, ptr %a1 + %t190 = call %S.ast.Node @finch.parser.parseFn(ptr %t189) + %t191 = load i64, ptr %t188 + %t192 = add i64 %t191, 1 + call void @finch_arr_reserve(ptr %t187, i64 %t192, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t193 = load ptr, ptr %t187 + %t194 = getelementptr inbounds %S.ast.Node, ptr %t193, i64 %t191 + store %S.ast.Node %t190, ptr %t194 + store i64 %t192, ptr %t188 + br label %endif1400 +endif1400: + br label %endif1397 +endif1397: + br label %endif1371 +endif1371: + br label %endif1360 +endif1360: + br label %while.cond1355 +while.end1357: + %t195 = load %S.ast.Program, ptr %a2 + ret %S.ast.Program %t195 +} + +define internal %S.ast.Node @finch.parser.parseEnum(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca %S.lexer.Token, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca %S.lexer.Token, align 16 + %a29 = alloca %S.lexer.Token, align 16 + %a32 = alloca %S.ast.Node, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca %S.lexer.Token, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca %S.ast.Node, align 16 + %a56 = alloca %S.ast.Type, align 16 + %a60 = alloca %S.ast.Node, align 16 + %a61 = alloca %S.ast.Node, align 16 + %a72 = alloca %S.lexer.Token, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca %S.lexer.Token, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca %S.lexer.Token, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca %S.lexer.Token, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca %S.ast.Node, align 16 + %a138 = alloca %S.ast.Node, align 16 + %a150 = alloca %S.lexer.Token, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca %S.lexer.Token, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca i64, align 16 + %a182 = alloca %S.ast.Node, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca %S.lexer.Token, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.758, i64 4, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.759, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.760, i64 6, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.761, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.762, i64 12, i64 0 }) + %t10 = extractvalue %S.lexer.Token %t9, 1 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store %S.lexer.Token %t9, ptr %a14 + call void @finch.drop.S_lexer_Token(ptr %a14) + %t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t13, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load ptr, ptr %a1 + %t19 = call %S.lexer.Token @finch.parser.expect(ptr %t18, { ptr, i64, i64 } { ptr @.str.763, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.764, i64 3, i64 0 }) + store %S.lexer.Token %t19, ptr %a20 + call void @finch.drop.S_lexer_Token(ptr %a20) + br label %while.cond1404 +while.cond1404: + %t21 = load ptr, ptr %a1 + %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.765, i64 1, i64 0 }) + %t23 = xor i1 %t22, true + br i1 %t23, label %while.body1405, label %while.end1406 +while.body1405: + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.766, i64 3, i64 0 }) + br i1 %t25, label %then1407, label %endif1409 +then1407: + %t26 = load ptr, ptr %a1 + %t27 = load ptr, ptr %a1 + %t28 = call %S.lexer.Token @finch.parser.cur(ptr %t27) + call void @finch.parser.fail(ptr %t26, %S.lexer.Token %t28, { ptr, i64, i64 } { ptr @.str.767, i64 37, i64 0 }) + store %S.lexer.Token %t28, ptr %a29 + call void @finch.drop.S_lexer_Token(ptr %a29) + br label %endif1409 +endif1409: + %t30 = load ptr, ptr %a1 + %t31 = call %S.ast.Node @finch.parser.node(ptr %t30, { ptr, i64, i64 } { ptr @.str.768, i64 7, i64 0 }) + store %S.ast.Node %t31, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = call %S.lexer.Token @finch.parser.expect(ptr %t33, { ptr, i64, i64 } { ptr @.str.769, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.770, i64 24, i64 0 }) + %t35 = extractvalue %S.lexer.Token %t34, 1 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + store %S.lexer.Token %t34, ptr %a39 + call void @finch.drop.S_lexer_Token(ptr %a39) + %t40 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t38, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load ptr, ptr %a1 + %t44 = call i1 @finch.parser.accept(ptr %t43, { ptr, i64, i64 } { ptr @.str.771, i64 1, i64 0 }) + br i1 %t44, label %then1410, label %endif1412 +then1410: + %t45 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 + store i1 true, ptr %t45 + br label %while.cond1413 +while.cond1413: + %t46 = load ptr, ptr %a1 + %t47 = call i1 @finch.parser.at(ptr %t46, { ptr, i64, i64 } { ptr @.str.772, i64 1, i64 0 }) + %t48 = xor i1 %t47, true + br i1 %t48, label %while.body1414, label %while.end1415 +while.body1414: + %t49 = load ptr, ptr %a1 + %t50 = call %S.ast.Node @finch.parser.node(ptr %t49, { ptr, i64, i64 } { ptr @.str.773, i64 5, i64 0 }) + store %S.ast.Node %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = call %S.ast.Type @finch.parser.parseType(ptr %t52) + %t54 = getelementptr inbounds %S.ast.Node, ptr %a51, i32 0, i32 5 + %t55 = load %S.ast.Type, ptr %t54 + store %S.ast.Type %t53, ptr %t54 + store %S.ast.Type %t55, ptr %a56 + call void @finch.drop.S_ast_Type(ptr %a56) + %t57 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 9 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 + %t59 = load %S.ast.Node, ptr %a51 + store %S.ast.Node %t59, ptr %a60 + call void @finch.copy.S_ast_Node(ptr %a61, ptr %a60) + %t62 = load %S.ast.Node, ptr %a61 + %t63 = load i64, ptr %t58 + %t64 = add i64 %t63, 1 + call void @finch_arr_reserve(ptr %t57, i64 %t64, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t65 = load ptr, ptr %t57 + %t66 = getelementptr inbounds %S.ast.Node, ptr %t65, i64 %t63 + store %S.ast.Node %t62, ptr %t66 + store i64 %t64, ptr %t58 + %t67 = load ptr, ptr %a1 + %t68 = call i1 @finch.parser.accept(ptr %t67, { ptr, i64, i64 } { ptr @.str.774, i64 1, i64 0 }) + %t69 = xor i1 %t68, true + br i1 %t69, label %then1416, label %endif1418 +then1416: + call void @finch.drop.S_ast_Node(ptr %a51) + br label %while.end1415 +endif1418: + call void @finch.drop.S_ast_Node(ptr %a51) + br label %while.cond1413 +while.end1415: + %t70 = load ptr, ptr %a1 + %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.775, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.776, i64 35, i64 0 }) + store %S.lexer.Token %t71, ptr %a72 + call void @finch.drop.S_lexer_Token(ptr %a72) + %t73 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 9 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = icmp eq i64 %t75, 0 + br i1 %t76, label %then1419, label %endif1421 +then1419: + %t77 = load ptr, ptr %a1 + %t78 = load ptr, ptr %a1 + %t79 = call %S.lexer.Token @finch.parser.cur(ptr %t78) + %t80 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 + %t81 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } { ptr @.str.777, i64 12, i64 0 }, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.778, i64 27, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 1 + %t92 = load { ptr, i64, i64 }, ptr %t91 + store { ptr, i64, i64 } %t90, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t90, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.779, i64 20, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + call void @finch.parser.fail(ptr %t77, %S.lexer.Token %t79, { ptr, i64, i64 } %t102) + store %S.lexer.Token %t79, ptr %a103 + call void @finch.drop.S_lexer_Token(ptr %a103) + store { ptr, i64, i64 } %t102, ptr %a104 + call void @finch_str_drop(ptr %a104) + br label %endif1421 +endif1421: + br label %endif1412 +endif1412: + %t105 = load ptr, ptr %a1 + %t106 = call i1 @finch.parser.accept(ptr %t105, { ptr, i64, i64 } { ptr @.str.780, i64 1, i64 0 }) + br i1 %t106, label %then1422, label %endif1424 +then1422: + %t107 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 + %t108 = load i1, ptr %t107 + br i1 %t108, label %then1425, label %endif1427 +then1425: + %t109 = load ptr, ptr %a1 + %t110 = load ptr, ptr %a1 + %t111 = call %S.lexer.Token @finch.parser.cur(ptr %t110) + call void @finch.parser.fail(ptr %t109, %S.lexer.Token %t111, { ptr, i64, i64 } { ptr @.str.781, i64 52, i64 0 }) + store %S.lexer.Token %t111, ptr %a112 + call void @finch.drop.S_lexer_Token(ptr %a112) + br label %endif1427 +endif1427: + store { ptr, i64, i64 } { ptr @.str.782, i64 0, i64 0 }, ptr %a113 + %t114 = load ptr, ptr %a1 + %t115 = call i1 @finch.parser.accept(ptr %t114, { ptr, i64, i64 } { ptr @.str.783, i64 1, i64 0 }) + br i1 %t115, label %then1428, label %endif1430 +then1428: + %t116 = load { ptr, i64, i64 }, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.784, i64 1, i64 0 }, ptr %a113 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + br label %endif1430 +endif1430: + %t118 = load { ptr, i64, i64 }, ptr %a113 + %t119 = load ptr, ptr %a1 + %t120 = call %S.lexer.Token @finch.parser.expect(ptr %t119, { ptr, i64, i64 } { ptr @.str.785, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.786, i64 30, i64 0 }) + %t121 = extractvalue %S.lexer.Token %t120, 1 + store { ptr, i64, i64 } %t121, ptr %a122 + call void @finch_str_copy(ptr %a123, ptr %a122) + %t124 = load { ptr, i64, i64 }, ptr %a123 + store %S.lexer.Token %t120, ptr %a125 + call void @finch.drop.S_lexer_Token(ptr %a125) + store { ptr, i64, i64 } %t118, ptr %a127 + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = getelementptr inbounds %S.ast.Node, ptr %a32, i32 0, i32 4 + %t132 = load { ptr, i64, i64 }, ptr %t131 + store { ptr, i64, i64 } %t130, ptr %t131 + store { ptr, i64, i64 } %t132, ptr %a133 + call void @finch_str_drop(ptr %a133) + call void @finch_str_drop(ptr %a113) + br label %endif1424 +endif1424: + %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 + %t136 = load %S.ast.Node, ptr %a32 + store %S.ast.Node %t136, ptr %a137 + call void @finch.copy.S_ast_Node(ptr %a138, ptr %a137) + %t139 = load %S.ast.Node, ptr %a138 + %t140 = load i64, ptr %t135 + %t141 = add i64 %t140, 1 + call void @finch_arr_reserve(ptr %t134, i64 %t141, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t142 = load ptr, ptr %t134 + %t143 = getelementptr inbounds %S.ast.Node, ptr %t142, i64 %t140 + store %S.ast.Node %t139, ptr %t143 + store i64 %t141, ptr %t135 + %t144 = load ptr, ptr %a1 + %t145 = call i1 @finch.parser.accept(ptr %t144, { ptr, i64, i64 } { ptr @.str.787, i64 1, i64 0 }) + %t146 = xor i1 %t145, true + br i1 %t146, label %then1431, label %endif1433 +then1431: + %t147 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t147) + br label %endif1433 +endif1433: + call void @finch.drop.S_ast_Node(ptr %a32) + br label %while.cond1404 +while.end1406: + %t148 = load ptr, ptr %a1 + %t149 = call %S.lexer.Token @finch.parser.next(ptr %t148) + store %S.lexer.Token %t149, ptr %a150 + call void @finch.drop.S_lexer_Token(ptr %a150) + %t151 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load i64, ptr %t152 + %t154 = icmp eq i64 %t153, 0 + br i1 %t154, label %then1434, label %endif1436 +then1434: + %t155 = load ptr, ptr %a1 + %t156 = load ptr, ptr %a1 + %t157 = call %S.lexer.Token @finch.parser.cur(ptr %t156) + %t158 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } { ptr @.str.788, i64 9, i64 0 }, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.789, i64 16, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + call void @finch.parser.fail(ptr %t155, %S.lexer.Token %t157, { ptr, i64, i64 } %t168) + store %S.lexer.Token %t157, ptr %a169 + call void @finch.drop.S_lexer_Token(ptr %a169) + store { ptr, i64, i64 } %t168, ptr %a170 + call void @finch_str_drop(ptr %a170) + br label %endif1436 +endif1436: + %t171 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 6 + %t172 = load i1, ptr %t171 + br i1 %t172, label %then1437, label %endif1439 +then1437: + %t173 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + store i64 0, ptr %a174 + br label %each.cond1440 +each.cond1440: + %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i32 0, i32 1 + %t176 = load i64, ptr %t175 + %t177 = load i64, ptr %a174 + %t178 = icmp slt i64 %t177, %t176 + br i1 %t178, label %each.body1441, label %each.end1443 +each.body1441: + %t179 = load ptr, ptr %t173 + %t180 = getelementptr inbounds %S.ast.Node, ptr %t179, i64 %t177 + %t181 = load %S.ast.Node, ptr %t180 + store %S.ast.Node %t181, ptr %a182 + %t183 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 4 + %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 + %t185 = load i64, ptr %t184 + %t186 = icmp sgt i64 %t185, 0 + br i1 %t186, label %then1444, label %endif1446 +then1444: + %t187 = load ptr, ptr %a1 + %t188 = load ptr, ptr %a1 + %t189 = call %S.lexer.Token @finch.parser.cur(ptr %t188) + %t190 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 1 + %t191 = load { ptr, i64, i64 }, ptr %t190 + store { ptr, i64, i64 } { ptr @.str.790, i64 54, i64 0 }, ptr %a193 + store { ptr, i64, i64 } %t191, ptr %a194 + call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } %t195, ptr %a197 + store { ptr, i64, i64 } { ptr @.str.791, i64 3, i64 0 }, ptr %a198 + call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) + store { ptr, i64, i64 } %t195, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a196 + %t201 = getelementptr inbounds %S.ast.Node, ptr %a182, i32 0, i32 4 + %t202 = load { ptr, i64, i64 }, ptr %t201 + store { ptr, i64, i64 } %t200, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t200, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t207, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.792, i64 1, i64 0 }, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + store { ptr, i64, i64 } %t207, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a208 + call void @finch.parser.fail(ptr %t187, %S.lexer.Token %t189, { ptr, i64, i64 } %t212) + store %S.lexer.Token %t189, ptr %a213 + call void @finch.drop.S_lexer_Token(ptr %a213) + store { ptr, i64, i64 } %t212, ptr %a214 + call void @finch_str_drop(ptr %a214) + br label %endif1446 +endif1446: + br label %each.step1442 +each.step1442: + %t215 = load i64, ptr %a174 + %t216 = add i64 %t215, 1 + store i64 %t216, ptr %a174 + br label %each.cond1440 +each.end1443: + br label %endif1439 +endif1439: + %t217 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t217 +} + +define internal %S.ast.Node @finch.parser.sumStruct(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.ast.Node, align 16 + %a30 = alloca %S.ast.Node, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a38 = alloca %S.ast.Node, align 16 + %a39 = alloca %S.ast.Node, align 16 + %a46 = alloca i64, align 16 + %a54 = alloca %S.ast.Node, align 16 + %a58 = alloca i64, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca %S.ast.Node, align 16 + %a98 = alloca %S.ast.Type, align 16 + %a99 = alloca %S.ast.Type, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a106 = alloca %S.ast.Node, align 16 + %a107 = alloca %S.ast.Node, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.793, i64 6, i64 0 }, 0 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + %t8 = insertvalue %S.ast.Node %t2, { ptr, i64, i64 } %t7, 1 + %t9 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 + %t10 = load i64, ptr %t9 + %t11 = insertvalue %S.ast.Node %t8, i64 %t10, 11 + %t12 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 + %t13 = load i64, ptr %t12 + %t14 = insertvalue %S.ast.Node %t11, i64 %t13, 12 + %t15 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 + %t16 = load i64, ptr %t15 + %t17 = insertvalue %S.ast.Node %t14, i64 %t16, 13 + store %S.ast.Node %t17, ptr %a18 + %t19 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.794, i64 5, i64 0 }, 0 + %t20 = insertvalue %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.795, i64 3, i64 0 }, 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 + %t22 = load i64, ptr %t21 + %t23 = insertvalue %S.ast.Node %t20, i64 %t22, 11 + %t24 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 + %t25 = load i64, ptr %t24 + %t26 = insertvalue %S.ast.Node %t23, i64 %t25, 12 + %t27 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 + %t28 = load i64, ptr %t27 + %t29 = insertvalue %S.ast.Node %t26, i64 %t28, 13 + store %S.ast.Node %t29, ptr %a30 + %t31 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.796, i64 3, i64 0 }) + %t32 = getelementptr inbounds %S.ast.Node, ptr %a30, i32 0, i32 5 + %t33 = load %S.ast.Type, ptr %t32 + store %S.ast.Type %t31, ptr %t32 + store %S.ast.Type %t33, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + %t35 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i32 0, i32 1 + %t37 = load %S.ast.Node, ptr %a30 + store %S.ast.Node %t37, ptr %a38 + call void @finch.copy.S_ast_Node(ptr %a39, ptr %a38) + %t40 = load %S.ast.Node, ptr %a39 + %t41 = load i64, ptr %t36 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %t35, i64 %t42, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %t35 + %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 + store %S.ast.Node %t40, ptr %t44 + store i64 %t42, ptr %t36 + %t45 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 + store i64 0, ptr %a46 + br label %each.cond1447 +each.cond1447: + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 + %t48 = load i64, ptr %t47 + %t49 = load i64, ptr %a46 + %t50 = icmp slt i64 %t49, %t48 + br i1 %t50, label %each.body1448, label %each.end1450 +each.body1448: + %t51 = load ptr, ptr %t45 + %t52 = getelementptr inbounds %S.ast.Node, ptr %t51, i64 %t49 + %t53 = load %S.ast.Node, ptr %t52 + store %S.ast.Node %t53, ptr %a54 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 9 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 + %t57 = load i64, ptr %t56 + store i64 0, ptr %a58 + br label %for.cond1451 +for.cond1451: + %t59 = load i64, ptr %a58 + %t60 = icmp slt i64 %t59, %t57 + br i1 %t60, label %for.body1452, label %for.end1454 +for.body1452: + %t61 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.797, i64 5, i64 0 }, 0 + %t62 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 1 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.798, i64 1, i64 0 }, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a64 + %t68 = load i64, ptr %a58 + call void @finch_str_from_int(ptr %a69, i64 %t68) + %t70 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t67, ptr %a74 + call void @finch_str_drop(ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a71 + %t77 = insertvalue %S.ast.Node %t61, { ptr, i64, i64 } %t76, 1 + %t78 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 11 + %t79 = load i64, ptr %t78 + %t80 = insertvalue %S.ast.Node %t77, i64 %t79, 11 + %t81 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 12 + %t82 = load i64, ptr %t81 + %t83 = insertvalue %S.ast.Node %t80, i64 %t82, 12 + %t84 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 13 + %t85 = load i64, ptr %t84 + %t86 = insertvalue %S.ast.Node %t83, i64 %t85, 13 + store %S.ast.Node %t86, ptr %a87 + %t88 = getelementptr inbounds %S.ast.Node, ptr %a54, i32 0, i32 9 + %t89 = load i64, ptr %a58 + %t90 = load { ptr, i64, i64 }, ptr %t88 + %t91 = extractvalue { ptr, i64, i64 } %t90, 1 + %t92 = icmp uge i64 %t89, %t91 + br i1 %t92, label %range1455, label %inrange1456 +range1455: + call void @finch_panic_index(ptr @.str.799, i64 333, i64 %t89, i64 %t91) + unreachable +inrange1456: + %t93 = extractvalue { ptr, i64, i64 } %t90, 0 + %t94 = getelementptr inbounds %S.ast.Node, ptr %t93, i64 %t89 + %t95 = getelementptr inbounds %S.ast.Node, ptr %t94, i32 0, i32 5 + %t96 = load %S.ast.Type, ptr %t95 + %t97 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 5 + store %S.ast.Type %t96, ptr %a98 + call void @finch.copy.S_ast_Type(ptr %a99, ptr %a98) + %t100 = load %S.ast.Type, ptr %a99 + %t101 = load %S.ast.Type, ptr %t97 + store %S.ast.Type %t100, ptr %t97 + store %S.ast.Type %t101, ptr %a102 + call void @finch.drop.S_ast_Type(ptr %a102) + %t103 = getelementptr inbounds %S.ast.Node, ptr %a18, i32 0, i32 9 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 + %t105 = load %S.ast.Node, ptr %a87 + store %S.ast.Node %t105, ptr %a106 + call void @finch.copy.S_ast_Node(ptr %a107, ptr %a106) + %t108 = load %S.ast.Node, ptr %a107 + %t109 = load i64, ptr %t104 + %t110 = add i64 %t109, 1 + call void @finch_arr_reserve(ptr %t103, i64 %t110, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t111 = load ptr, ptr %t103 + %t112 = getelementptr inbounds %S.ast.Node, ptr %t111, i64 %t109 + store %S.ast.Node %t108, ptr %t112 + store i64 %t110, ptr %t104 + call void @finch.drop.S_ast_Node(ptr %a87) + br label %for.step1453 +for.step1453: + %t113 = load i64, ptr %a58 + %t114 = add i64 %t113, 1 + store i64 %t114, ptr %a58 + br label %for.cond1451 +for.end1454: + br label %each.step1449 +each.step1449: + %t115 = load i64, ptr %a46 + %t116 = add i64 %t115, 1 + store i64 %t116, ptr %a46 + br label %each.cond1447 +each.end1450: + %t117 = load %S.ast.Node, ptr %a18 + call void @finch.drop.S_ast_Node(ptr %a30) + ret %S.ast.Node %t117 +} + +define internal %S.ast.Node @finch.parser.parseMatch(ptr %p0, i1 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i1, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.lexer.Token, align 16 + %a21 = alloca %S.lexer.Token, align 16 + %a26 = alloca i64, align 16 + %a38 = alloca %S.lexer.Token, align 16 + %a41 = alloca %S.ast.Node, align 16 + %a44 = alloca %S.ast.Node, align 16 + %a62 = alloca %S.ast.Node, align 16 + %a63 = alloca %S.ast.Node, align 16 + %a71 = alloca %S.lexer.Token, align 16 + %a105 = alloca %S.ast.Node, align 16 + %a106 = alloca %S.ast.Node, align 16 + %a122 = alloca %S.lexer.Token, align 16 + %a130 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + store i1 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call %S.ast.Node @finch.parser.node(ptr %t3, { ptr, i64, i64 } { ptr @.str.800, i64 5, i64 0 }) + store %S.ast.Node %t4, ptr %a5 + %t6 = load i1, ptr %a2 + %t7 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 6 + store i1 %t6, ptr %t7 + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.801, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.802, i64 7, i64 0 }) + store %S.lexer.Token %t9, ptr %a10 + call void @finch.drop.S_lexer_Token(ptr %a10) + %t11 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i32 0, i32 1 + %t13 = load ptr, ptr %a1 + %t14 = call %S.ast.Node @finch.parser.parseExpr(ptr %t13) + %t15 = load i64, ptr %t12 + %t16 = add i64 %t15, 1 + call void @finch_arr_reserve(ptr %t11, i64 %t16, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t17 = load ptr, ptr %t11 + %t18 = getelementptr inbounds %S.ast.Node, ptr %t17, i64 %t15 + store %S.ast.Node %t14, ptr %t18 + store i64 %t16, ptr %t12 + %t19 = load ptr, ptr %a1 + %t20 = call %S.lexer.Token @finch.parser.expect(ptr %t19, { ptr, i64, i64 } { ptr @.str.803, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.804, i64 3, i64 0 }) + store %S.lexer.Token %t20, ptr %a21 + call void @finch.drop.S_lexer_Token(ptr %a21) + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic1457, label %ok1458 +panic1457: + call void @finch_panic(ptr @.str.805, i64 348, ptr @.str.806) + unreachable +ok1458: + %t24 = getelementptr inbounds %S.parser.Parser, ptr %t22, i32 0, i32 2 + %t25 = load i64, ptr %t24 + store i64 %t25, ptr %a26 + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic1459, label %ok1460 +panic1459: + call void @finch_panic(ptr @.str.807, i64 349, ptr @.str.808) + unreachable +ok1460: + %t29 = getelementptr inbounds %S.parser.Parser, ptr %t27, i32 0, i32 2 + store i64 0, ptr %t29 + br label %while.cond1461 +while.cond1461: + %t30 = load ptr, ptr %a1 + %t31 = call i1 @finch.parser.at(ptr %t30, { ptr, i64, i64 } { ptr @.str.809, i64 1, i64 0 }) + %t32 = xor i1 %t31, true + br i1 %t32, label %while.body1462, label %while.end1463 +while.body1462: + %t33 = load ptr, ptr %a1 + %t34 = call i1 @finch.parser.at(ptr %t33, { ptr, i64, i64 } { ptr @.str.810, i64 3, i64 0 }) + br i1 %t34, label %then1464, label %endif1466 +then1464: + %t35 = load ptr, ptr %a1 + %t36 = load ptr, ptr %a1 + %t37 = call %S.lexer.Token @finch.parser.cur(ptr %t36) + call void @finch.parser.fail(ptr %t35, %S.lexer.Token %t37, { ptr, i64, i64 } { ptr @.str.811, i64 37, i64 0 }) + store %S.lexer.Token %t37, ptr %a38 + call void @finch.drop.S_lexer_Token(ptr %a38) + br label %endif1466 +endif1466: + %t39 = load ptr, ptr %a1 + %t40 = call %S.ast.Node @finch.parser.node(ptr %t39, { ptr, i64, i64 } { ptr @.str.812, i64 3, i64 0 }) + store %S.ast.Node %t40, ptr %a41 + %t42 = load ptr, ptr %a1 + %t43 = call %S.ast.Node @finch.parser.node(ptr %t42, { ptr, i64, i64 } { ptr @.str.813, i64 8, i64 0 }) + store %S.ast.Node %t43, ptr %a44 + %t45 = load ptr, ptr %a1 + %t46 = call i1 @finch.parser.accept(ptr %t45, { ptr, i64, i64 } { ptr @.str.814, i64 4, i64 0 }) + br i1 %t46, label %then1467, label %else1468 +then1467: + %t47 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 6 + store i1 true, ptr %t47 + br label %endif1469 +else1468: + br label %while.cond1470 +while.cond1470: + br label %while.body1471 +while.body1471: + %t48 = getelementptr inbounds %S.ast.Node, ptr %a44, i32 0, i32 9 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 + %t50 = load ptr, ptr %a1 + %t51 = call %S.ast.Node @finch.parser.parseExpr(ptr %t50) + %t52 = load i64, ptr %t49 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %t48, i64 %t53, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %t48 + %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 %t52 + store %S.ast.Node %t51, ptr %t55 + store i64 %t53, ptr %t49 + %t56 = load ptr, ptr %a1 + %t57 = call i1 @finch.parser.accept(ptr %t56, { ptr, i64, i64 } { ptr @.str.815, i64 1, i64 0 }) + %t58 = xor i1 %t57, true + br i1 %t58, label %then1473, label %endif1475 +then1473: + br label %while.end1472 +endif1475: + br label %while.cond1470 +while.end1472: + br label %endif1469 +endif1469: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i32 0, i32 1 + %t61 = load %S.ast.Node, ptr %a44 + store %S.ast.Node %t61, ptr %a62 + call void @finch.copy.S_ast_Node(ptr %a63, ptr %a62) + %t64 = load %S.ast.Node, ptr %a63 + %t65 = load i64, ptr %t60 + %t66 = add i64 %t65, 1 + call void @finch_arr_reserve(ptr %t59, i64 %t66, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t67 = load ptr, ptr %t59 + %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 %t65 + store %S.ast.Node %t64, ptr %t68 + store i64 %t66, ptr %t60 + %t69 = load ptr, ptr %a1 + %t70 = call %S.lexer.Token @finch.parser.expect(ptr %t69, { ptr, i64, i64 } { ptr @.str.816, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.817, i64 57, i64 0 }) + store %S.lexer.Token %t70, ptr %a71 + call void @finch.drop.S_lexer_Token(ptr %a71) + %t72 = load ptr, ptr %a1 + %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.818, i64 1, i64 0 }) + br label %logic.from1476 +logic.from1476: + br i1 %t73, label %logic.rhs1477, label %logic.end1478 +logic.rhs1477: + %t74 = load i1, ptr %a2 + %t75 = xor i1 %t74, true + br label %logic.rend1479 +logic.rend1479: + br label %logic.end1478 +logic.end1478: + %t76 = phi i1 [ false, %logic.from1476 ], [ %t75, %logic.rend1479 ] + br i1 %t76, label %then1480, label %else1481 +then1480: + %t77 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 + %t79 = load ptr, ptr %a1 + %t80 = call %S.ast.Node @finch.parser.parseBlock(ptr %t79) + %t81 = load i64, ptr %t78 + %t82 = add i64 %t81, 1 + call void @finch_arr_reserve(ptr %t77, i64 %t82, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t83 = load ptr, ptr %t77 + %t84 = getelementptr inbounds %S.ast.Node, ptr %t83, i64 %t81 + store %S.ast.Node %t80, ptr %t84 + store i64 %t82, ptr %t78 + br label %endif1482 +else1481: + %t85 = load i1, ptr %a2 + br i1 %t85, label %then1483, label %else1484 +then1483: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load ptr, ptr %a1 + %t89 = call %S.ast.Node @finch.parser.parseExpr(ptr %t88) + %t90 = load i64, ptr %t87 + %t91 = add i64 %t90, 1 + call void @finch_arr_reserve(ptr %t86, i64 %t91, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t92 = load ptr, ptr %t86 + %t93 = getelementptr inbounds %S.ast.Node, ptr %t92, i64 %t90 + store %S.ast.Node %t89, ptr %t93 + store i64 %t91, ptr %t87 + br label %endif1485 +else1484: + %t94 = getelementptr inbounds %S.ast.Node, ptr %a41, i32 0, i32 9 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load ptr, ptr %a1 + %t97 = call %S.ast.Node @finch.parser.parseStatement(ptr %t96) + %t98 = load i64, ptr %t95 + %t99 = add i64 %t98, 1 + call void @finch_arr_reserve(ptr %t94, i64 %t99, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t100 = load ptr, ptr %t94 + %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 + store %S.ast.Node %t97, ptr %t101 + store i64 %t99, ptr %t95 + br label %endif1485 +endif1485: + br label %endif1482 +endif1482: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i32 0, i32 1 + %t104 = load %S.ast.Node, ptr %a41 + store %S.ast.Node %t104, ptr %a105 + call void @finch.copy.S_ast_Node(ptr %a106, ptr %a105) + %t107 = load %S.ast.Node, ptr %a106 + %t108 = load i64, ptr %t103 + %t109 = add i64 %t108, 1 + call void @finch_arr_reserve(ptr %t102, i64 %t109, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t110 = load ptr, ptr %t102 + %t111 = getelementptr inbounds %S.ast.Node, ptr %t110, i64 %t108 + store %S.ast.Node %t107, ptr %t111 + store i64 %t109, ptr %t103 + %t112 = load ptr, ptr %a1 + %t113 = call i1 @finch.parser.accept(ptr %t112, { ptr, i64, i64 } { ptr @.str.819, i64 1, i64 0 }) + %t114 = xor i1 %t113, true + br i1 %t114, label %then1486, label %endif1488 +then1486: + %t115 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t115) + br label %endif1488 +endif1488: + call void @finch.drop.S_ast_Node(ptr %a44) + call void @finch.drop.S_ast_Node(ptr %a41) + br label %while.cond1461 +while.end1463: + %t116 = load i64, ptr %a26 + %t117 = load ptr, ptr %a1 + %t118 = icmp eq ptr %t117, null + br i1 %t118, label %panic1489, label %ok1490 +panic1489: + call void @finch_panic(ptr @.str.820, i64 380, ptr @.str.821) + unreachable +ok1490: + %t119 = getelementptr inbounds %S.parser.Parser, ptr %t117, i32 0, i32 2 + store i64 %t116, ptr %t119 + %t120 = load ptr, ptr %a1 + %t121 = call %S.lexer.Token @finch.parser.next(ptr %t120) + store %S.lexer.Token %t121, ptr %a122 + call void @finch.drop.S_lexer_Token(ptr %a122) + %t123 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 9 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i32 0, i32 1 + %t125 = load i64, ptr %t124 + %t126 = icmp eq i64 %t125, 1 + br i1 %t126, label %then1491, label %endif1493 +then1491: + %t127 = load ptr, ptr %a1 + %t128 = load ptr, ptr %a1 + %t129 = call %S.lexer.Token @finch.parser.cur(ptr %t128) + call void @finch.parser.fail(ptr %t127, %S.lexer.Token %t129, { ptr, i64, i64 } { ptr @.str.822, i64 30, i64 0 }) + store %S.lexer.Token %t129, ptr %a130 + call void @finch.drop.S_lexer_Token(ptr %a130) + br label %endif1493 +endif1493: + %t131 = load %S.ast.Node, ptr %a5 + ret %S.ast.Node %t131 +} + +define internal { ptr, i64, i64 } @finch.parser.parseTParams(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.lexer.Token, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca %S.lexer.Token, align 16 + %a23 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.823, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.824, i64 3, i64 0 }) + store %S.lexer.Token %t4, ptr %a5 + call void @finch.drop.S_lexer_Token(ptr %a5) + br label %while.cond1494 +while.cond1494: + br label %while.body1495 +while.body1495: + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t7 = load ptr, ptr %a1 + %t8 = call %S.lexer.Token @finch.parser.expect(ptr %t7, { ptr, i64, i64 } { ptr @.str.825, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.826, i64 29, i64 0 }) + %t9 = extractvalue %S.lexer.Token %t8, 1 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store %S.lexer.Token %t8, ptr %a13 + call void @finch.drop.S_lexer_Token(ptr %a13) + %t14 = load i64, ptr %t6 + %t15 = add i64 %t14, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t15, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t16 = load ptr, ptr %a2 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 %t14 + store { ptr, i64, i64 } %t12, ptr %t17 + store i64 %t15, ptr %t6 + %t18 = load ptr, ptr %a1 + %t19 = call i1 @finch.parser.accept(ptr %t18, { ptr, i64, i64 } { ptr @.str.827, i64 1, i64 0 }) + %t20 = xor i1 %t19, true + br i1 %t20, label %then1497, label %endif1499 +then1497: + br label %while.end1496 +endif1499: + br label %while.cond1494 +while.end1496: + %t21 = load ptr, ptr %a1 + %t22 = call %S.lexer.Token @finch.parser.expect(ptr %t21, { ptr, i64, i64 } { ptr @.str.828, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.829, i64 29, i64 0 }) + store %S.lexer.Token %t22, ptr %a23 + call void @finch.drop.S_lexer_Token(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a2 + ret { ptr, i64, i64 } %t24 +} + +define internal %S.ast.Node @finch.parser.parseStruct(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca %S.lexer.Token, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca %S.lexer.Token, align 16 + %a36 = alloca %S.lexer.Token, align 16 + %a39 = alloca %S.ast.Node, align 16 + %a49 = alloca %S.lexer.Token, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca %S.ast.Type, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca %S.lexer.Token, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca %S.ast.Node, align 16 + %a91 = alloca %S.ast.Node, align 16 + %a100 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.830, i64 6, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.831, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.832, i64 8, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = load ptr, ptr %a1 + %t9 = call %S.lexer.Token @finch.parser.expect(ptr %t8, { ptr, i64, i64 } { ptr @.str.833, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.834, i64 13, i64 0 }) + %t10 = extractvalue %S.lexer.Token %t9, 1 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store %S.lexer.Token %t9, ptr %a14 + call void @finch.drop.S_lexer_Token(ptr %a14) + %t15 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t13, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load ptr, ptr %a1 + %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.835, i64 1, i64 0 }) + br i1 %t19, label %then1500, label %endif1502 +then1500: + %t20 = load ptr, ptr %a1 + %t21 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t20) + %t22 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t21, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch.drop.arr_str(ptr %a24) + br label %endif1502 +endif1502: + %t25 = load ptr, ptr %a1 + %t26 = call %S.lexer.Token @finch.parser.expect(ptr %t25, { ptr, i64, i64 } { ptr @.str.836, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.837, i64 3, i64 0 }) + store %S.lexer.Token %t26, ptr %a27 + call void @finch.drop.S_lexer_Token(ptr %a27) + br label %while.cond1503 +while.cond1503: + %t28 = load ptr, ptr %a1 + %t29 = call i1 @finch.parser.at(ptr %t28, { ptr, i64, i64 } { ptr @.str.838, i64 1, i64 0 }) + %t30 = xor i1 %t29, true + br i1 %t30, label %while.body1504, label %while.end1505 +while.body1504: + %t31 = load ptr, ptr %a1 + %t32 = call i1 @finch.parser.at(ptr %t31, { ptr, i64, i64 } { ptr @.str.839, i64 3, i64 0 }) + br i1 %t32, label %then1506, label %endif1508 +then1506: + %t33 = load ptr, ptr %a1 + %t34 = load ptr, ptr %a1 + %t35 = call %S.lexer.Token @finch.parser.cur(ptr %t34) + call void @finch.parser.fail(ptr %t33, %S.lexer.Token %t35, { ptr, i64, i64 } { ptr @.str.840, i64 38, i64 0 }) + store %S.lexer.Token %t35, ptr %a36 + call void @finch.drop.S_lexer_Token(ptr %a36) + br label %endif1508 +endif1508: + %t37 = load ptr, ptr %a1 + %t38 = call %S.ast.Node @finch.parser.node(ptr %t37, { ptr, i64, i64 } { ptr @.str.841, i64 5, i64 0 }) + store %S.ast.Node %t38, ptr %a39 + %t40 = load ptr, ptr %a1 + %t41 = call i1 @finch.parser.atDeclaration(ptr %t40) + %t42 = xor i1 %t41, true + br i1 %t42, label %then1509, label %endif1511 +then1509: + %t43 = load ptr, ptr %a1 + %t44 = load ptr, ptr %a1 + %t45 = call %S.lexer.Token @finch.parser.cur(ptr %t44) + %t46 = load ptr, ptr %a1 + %t47 = call %S.lexer.Token @finch.parser.cur(ptr %t46) + %t48 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t47) + store %S.lexer.Token %t47, ptr %a49 + call void @finch.drop.S_lexer_Token(ptr %a49) + store { ptr, i64, i64 } { ptr @.str.842, i64 11, i64 0 }, ptr %a51 + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.843, i64 28, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + call void @finch.parser.fail(ptr %t43, %S.lexer.Token %t45, { ptr, i64, i64 } %t59) + store %S.lexer.Token %t45, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + store { ptr, i64, i64 } %t59, ptr %a61 + call void @finch_str_drop(ptr %a61) + br label %endif1511 +endif1511: + %t62 = load ptr, ptr %a1 + %t63 = call %S.ast.Type @finch.parser.parseType(ptr %t62) + %t64 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 5 + %t65 = load %S.ast.Type, ptr %t64 + store %S.ast.Type %t63, ptr %t64 + store %S.ast.Type %t65, ptr %a66 + call void @finch.drop.S_ast_Type(ptr %a66) + %t67 = load ptr, ptr %a1 + %t68 = call %S.lexer.Token @finch.parser.expect(ptr %t67, { ptr, i64, i64 } { ptr @.str.844, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.845, i64 12, i64 0 }) + %t69 = extractvalue %S.lexer.Token %t68, 1 + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_copy(ptr %a71, ptr %a70) + %t72 = load { ptr, i64, i64 }, ptr %a71 + store %S.lexer.Token %t68, ptr %a73 + call void @finch.drop.S_lexer_Token(ptr %a73) + %t74 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + store { ptr, i64, i64 } %t72, ptr %t74 + store { ptr, i64, i64 } %t75, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load ptr, ptr %a1 + %t78 = call i1 @finch.parser.accept(ptr %t77, { ptr, i64, i64 } { ptr @.str.846, i64 1, i64 0 }) + br i1 %t78, label %then1512, label %endif1514 +then1512: + %t79 = getelementptr inbounds %S.ast.Node, ptr %a39, i32 0, i32 9 + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 + %t81 = load ptr, ptr %a1 + %t82 = call %S.ast.Node @finch.parser.parseExpr(ptr %t81) + %t83 = load i64, ptr %t80 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %t79, i64 %t84, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %t79 + %t86 = getelementptr inbounds %S.ast.Node, ptr %t85, i64 %t83 + store %S.ast.Node %t82, ptr %t86 + store i64 %t84, ptr %t80 + br label %endif1514 +endif1514: + %t87 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %t87, i32 0, i32 1 + %t89 = load %S.ast.Node, ptr %a39 + store %S.ast.Node %t89, ptr %a90 + call void @finch.copy.S_ast_Node(ptr %a91, ptr %a90) + %t92 = load %S.ast.Node, ptr %a91 + %t93 = load i64, ptr %t88 + %t94 = add i64 %t93, 1 + call void @finch_arr_reserve(ptr %t87, i64 %t94, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t95 = load ptr, ptr %t87 + %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 %t93 + store %S.ast.Node %t92, ptr %t96 + store i64 %t94, ptr %t88 + %t97 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t97) + call void @finch.drop.S_ast_Node(ptr %a39) + br label %while.cond1503 +while.end1505: + %t98 = load ptr, ptr %a1 + %t99 = call %S.lexer.Token @finch.parser.next(ptr %t98) + store %S.lexer.Token %t99, ptr %a100 + call void @finch.drop.S_lexer_Token(ptr %a100) + %t101 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t101 +} + +define internal %S.ast.Node @finch.parser.parseFn(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.lexer.Token, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca %S.lexer.Token, align 16 + %a26 = alloca %S.lexer.Token, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca %S.lexer.Token, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca %S.lexer.Token, align 16 + %a77 = alloca %S.ast.Node, align 16 + %a82 = alloca %S.ast.Type, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca %S.lexer.Token, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca %S.ast.Node, align 16 + %a97 = alloca %S.ast.Node, align 16 + %a113 = alloca %S.lexer.Token, align 16 + %a117 = alloca %S.ast.Type, align 16 + %a127 = alloca %S.ast.Type, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca %S.lexer.Token, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca %S.lexer.Token, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.847, i64 2, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call i1 @finch.parser.accept(ptr %t5, { ptr, i64, i64 } { ptr @.str.848, i64 6, i64 0 }) + %t7 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 8 + store i1 %t6, ptr %t7 + %t8 = load ptr, ptr %a1 + %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.849, i64 5, i64 0 }) + br label %logic.from1515 +logic.from1515: + br i1 %t9, label %logic.rhs1516, label %logic.end1517 +logic.rhs1516: + %t10 = load ptr, ptr %a1 + %t11 = call %S.lexer.Token @finch.parser.cur(ptr %t10) + %t12 = extractvalue %S.lexer.Token %t11, 1 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store %S.lexer.Token %t11, ptr %a16 + call void @finch.drop.S_lexer_Token(ptr %a16) + %t17 = call i1 @finch.parser.isTypeName({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_drop(ptr %a18) + br label %logic.rend1518 +logic.rend1518: + br label %logic.end1517 +logic.end1517: + %t19 = phi i1 [ false, %logic.from1515 ], [ %t17, %logic.rend1518 ] + br i1 %t19, label %then1519, label %endif1521 +then1519: + %t20 = load ptr, ptr %a1 + %t21 = load ptr, ptr %a1 + %t22 = call %S.lexer.Token @finch.parser.cur(ptr %t21) + call void @finch.parser.fail(ptr %t20, %S.lexer.Token %t22, { ptr, i64, i64 } { ptr @.str.850, i64 68, i64 0 }) + store %S.lexer.Token %t22, ptr %a23 + call void @finch.drop.S_lexer_Token(ptr %a23) + br label %endif1521 +endif1521: + %t24 = load ptr, ptr %a1 + %t25 = call %S.lexer.Token @finch.parser.expect(ptr %t24, { ptr, i64, i64 } { ptr @.str.851, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.852, i64 26, i64 0 }) + store %S.lexer.Token %t25, ptr %a26 + call void @finch.drop.S_lexer_Token(ptr %a26) + %t27 = load ptr, ptr %a1 + %t28 = call %S.lexer.Token @finch.parser.expect(ptr %t27, { ptr, i64, i64 } { ptr @.str.853, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.854, i64 15, i64 0 }) + %t29 = extractvalue %S.lexer.Token %t28, 1 + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_copy(ptr %a31, ptr %a30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store %S.lexer.Token %t28, ptr %a33 + call void @finch.drop.S_lexer_Token(ptr %a33) + %t34 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t32, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load ptr, ptr %a1 + %t38 = call i1 @finch.parser.at(ptr %t37, { ptr, i64, i64 } { ptr @.str.855, i64 1, i64 0 }) + br i1 %t38, label %then1522, label %endif1524 +then1522: + %t39 = load ptr, ptr %a1 + %t40 = call { ptr, i64, i64 } @finch.parser.parseTParams(ptr %t39) + %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 3 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t40, ptr %t41 + store { ptr, i64, i64 } %t42, ptr %a43 + call void @finch.drop.arr_str(ptr %a43) + br label %endif1524 +endif1524: + %t44 = load ptr, ptr %a1 + %t45 = call i1 @finch.parser.accept(ptr %t44, { ptr, i64, i64 } { ptr @.str.856, i64 1, i64 0 }) + br i1 %t45, label %then1525, label %endif1527 +then1525: + %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + %t48 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t47, ptr %a49 + call void @finch_str_copy(ptr %a50, ptr %a49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + %t52 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t51, ptr %t48 + store { ptr, i64, i64 } %t52, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load ptr, ptr %a1 + %t55 = call %S.lexer.Token @finch.parser.expect(ptr %t54, { ptr, i64, i64 } { ptr @.str.857, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.858, i64 13, i64 0 }) + %t56 = extractvalue %S.lexer.Token %t55, 1 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_copy(ptr %a58, ptr %a57) + %t59 = load { ptr, i64, i64 }, ptr %a58 + store %S.lexer.Token %t55, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + %t61 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t59, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_drop(ptr %a63) + br label %endif1527 +endif1527: + %t64 = load ptr, ptr %a1 + %t65 = call %S.lexer.Token @finch.parser.expect(ptr %t64, { ptr, i64, i64 } { ptr @.str.859, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.860, i64 3, i64 0 }) + store %S.lexer.Token %t65, ptr %a66 + call void @finch.drop.S_lexer_Token(ptr %a66) + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic1528, label %ok1529 +panic1528: + call void @finch_panic(ptr @.str.861, i64 446, ptr @.str.862) + unreachable +ok1529: + %t69 = getelementptr inbounds %S.parser.Parser, ptr %t67, i32 0, i32 2 + %t70 = load i64, ptr %t69 + %t71 = add i64 %t70, 1 + store i64 %t71, ptr %t69 + %t72 = load ptr, ptr %a1 + %t73 = call i1 @finch.parser.at(ptr %t72, { ptr, i64, i64 } { ptr @.str.863, i64 1, i64 0 }) + %t74 = xor i1 %t73, true + br i1 %t74, label %then1530, label %endif1532 +then1530: + br label %while.cond1533 +while.cond1533: + br label %while.body1534 +while.body1534: + %t75 = load ptr, ptr %a1 + %t76 = call %S.ast.Node @finch.parser.node(ptr %t75, { ptr, i64, i64 } { ptr @.str.864, i64 5, i64 0 }) + store %S.ast.Node %t76, ptr %a77 + %t78 = load ptr, ptr %a1 + %t79 = call %S.ast.Type @finch.parser.parseType(ptr %t78) + %t80 = getelementptr inbounds %S.ast.Node, ptr %a77, i32 0, i32 5 + %t81 = load %S.ast.Type, ptr %t80 + store %S.ast.Type %t79, ptr %t80 + store %S.ast.Type %t81, ptr %a82 + call void @finch.drop.S_ast_Type(ptr %a82) + %t83 = load ptr, ptr %a1 + %t84 = call %S.lexer.Token @finch.parser.expect(ptr %t83, { ptr, i64, i64 } { ptr @.str.865, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.866, i64 16, i64 0 }) + %t85 = extractvalue %S.lexer.Token %t84, 1 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_copy(ptr %a87, ptr %a86) + %t88 = load { ptr, i64, i64 }, ptr %a87 + store %S.lexer.Token %t84, ptr %a89 + call void @finch.drop.S_lexer_Token(ptr %a89) + %t90 = getelementptr inbounds %S.ast.Node, ptr %a77, i32 0, i32 1 + %t91 = load { ptr, i64, i64 }, ptr %t90 + store { ptr, i64, i64 } %t88, ptr %t90 + store { ptr, i64, i64 } %t91, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 + %t95 = load %S.ast.Node, ptr %a77 + store %S.ast.Node %t95, ptr %a96 + call void @finch.copy.S_ast_Node(ptr %a97, ptr %a96) + %t98 = load %S.ast.Node, ptr %a97 + %t99 = load i64, ptr %t94 + %t100 = add i64 %t99, 1 + call void @finch_arr_reserve(ptr %t93, i64 %t100, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t101 = load ptr, ptr %t93 + %t102 = getelementptr inbounds %S.ast.Node, ptr %t101, i64 %t99 + store %S.ast.Node %t98, ptr %t102 + store i64 %t100, ptr %t94 + %t103 = load ptr, ptr %a1 + %t104 = call i1 @finch.parser.accept(ptr %t103, { ptr, i64, i64 } { ptr @.str.867, i64 1, i64 0 }) + %t105 = xor i1 %t104, true + br i1 %t105, label %then1536, label %endif1538 +then1536: + call void @finch.drop.S_ast_Node(ptr %a77) + br label %while.end1535 +endif1538: + call void @finch.drop.S_ast_Node(ptr %a77) + br label %while.cond1533 +while.end1535: + br label %endif1532 +endif1532: + %t106 = load ptr, ptr %a1 + %t107 = icmp eq ptr %t106, null + br i1 %t107, label %panic1539, label %ok1540 +panic1539: + call void @finch_panic(ptr @.str.868, i64 458, ptr @.str.869) + unreachable +ok1540: + %t108 = getelementptr inbounds %S.parser.Parser, ptr %t106, i32 0, i32 2 + %t109 = load i64, ptr %t108 + %t110 = sub i64 %t109, 1 + store i64 %t110, ptr %t108 + %t111 = load ptr, ptr %a1 + %t112 = call %S.lexer.Token @finch.parser.expect(ptr %t111, { ptr, i64, i64 } { ptr @.str.870, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.871, i64 3, i64 0 }) + store %S.lexer.Token %t112, ptr %a113 + call void @finch.drop.S_lexer_Token(ptr %a113) + %t114 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.872, i64 4, i64 0 }) + %t115 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 + %t116 = load %S.ast.Type, ptr %t115 + store %S.ast.Type %t114, ptr %t115 + store %S.ast.Type %t116, ptr %a117 + call void @finch.drop.S_ast_Type(ptr %a117) + %t118 = load ptr, ptr %a1 + %t119 = call i1 @finch.parser.accept(ptr %t118, { ptr, i64, i64 } { ptr @.str.873, i64 2, i64 0 }) + br i1 %t119, label %then1541, label %endif1543 +then1541: + %t120 = load ptr, ptr %a1 + %t121 = call i1 @finch.parser.at(ptr %t120, { ptr, i64, i64 } { ptr @.str.874, i64 1, i64 0 }) + %t122 = xor i1 %t121, true + br i1 %t122, label %then1544, label %endif1546 +then1544: + %t123 = load ptr, ptr %a1 + %t124 = call %S.ast.Type @finch.parser.parseType(ptr %t123) + %t125 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 + %t126 = load %S.ast.Type, ptr %t125 + store %S.ast.Type %t124, ptr %t125 + store %S.ast.Type %t126, ptr %a127 + call void @finch.drop.S_ast_Type(ptr %a127) + br label %endif1546 +endif1546: + %t128 = load ptr, ptr %a1 + %t129 = call i1 @finch.parser.accept(ptr %t128, { ptr, i64, i64 } { ptr @.str.875, i64 1, i64 0 }) + %t130 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 + store i1 %t129, ptr %t130 + %t131 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 7 + %t132 = load i1, ptr %t131 + %t133 = xor i1 %t132, true + br label %logic.from1547 +logic.from1547: + br i1 %t133, label %logic.rhs1548, label %logic.end1549 +logic.rhs1548: + %t134 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 5 + %t135 = getelementptr inbounds %S.ast.Type, ptr %t134, i32 0, i32 0 + %t136 = load { ptr, i64, i64 }, ptr %t135 + store { ptr, i64, i64 } %t136, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.876, i64 4, i64 0 }, ptr %a138 + %t139 = call i32 @finch_str_eq(ptr %a137, ptr %a138) + %t140 = icmp ne i32 %t139, 0 + br label %logic.rend1550 +logic.rend1550: + br label %logic.end1549 +logic.end1549: + %t141 = phi i1 [ false, %logic.from1547 ], [ %t140, %logic.rend1550 ] + br i1 %t141, label %then1551, label %endif1553 +then1551: + %t142 = load ptr, ptr %a1 + %t143 = load ptr, ptr %a1 + %t144 = call %S.lexer.Token @finch.parser.cur(ptr %t143) + %t145 = load ptr, ptr %a1 + %t146 = call %S.lexer.Token @finch.parser.cur(ptr %t145) + %t147 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t146) + store %S.lexer.Token %t146, ptr %a148 + call void @finch.drop.S_lexer_Token(ptr %a148) + store { ptr, i64, i64 } { ptr @.str.877, i64 11, i64 0 }, ptr %a150 + store { ptr, i64, i64 } %t147, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + store { ptr, i64, i64 } %t147, ptr %a152 + call void @finch_str_drop(ptr %a152) + %t153 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t153, ptr %a155 + store { ptr, i64, i64 } { ptr @.str.878, i64 61, i64 0 }, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + store { ptr, i64, i64 } %t153, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a154 + call void @finch.parser.fail(ptr %t142, %S.lexer.Token %t144, { ptr, i64, i64 } %t158) + store %S.lexer.Token %t144, ptr %a159 + call void @finch.drop.S_lexer_Token(ptr %a159) + store { ptr, i64, i64 } %t158, ptr %a160 + call void @finch_str_drop(ptr %a160) + br label %endif1553 +endif1553: + br label %endif1543 +endif1543: + %t161 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %t161, i32 0, i32 1 + %t163 = load ptr, ptr %a1 + %t164 = call %S.ast.Node @finch.parser.parseBlock(ptr %t163) + %t165 = load i64, ptr %t162 + %t166 = add i64 %t165, 1 + call void @finch_arr_reserve(ptr %t161, i64 %t166, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t167 = load ptr, ptr %t161 + %t168 = getelementptr inbounds %S.ast.Node, ptr %t167, i64 %t165 + store %S.ast.Node %t164, ptr %t168 + store i64 %t166, ptr %t162 + %t169 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t170 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 + %t172 = load i64, ptr %t171 + %t173 = sub i64 %t172, 1 + %t174 = load { ptr, i64, i64 }, ptr %t169 + %t175 = extractvalue { ptr, i64, i64 } %t174, 1 + %t176 = icmp uge i64 %t173, %t175 + br i1 %t176, label %range1554, label %inrange1555 +range1554: + call void @finch_panic_index(ptr @.str.879, i64 471, i64 %t173, i64 %t175) + unreachable +inrange1555: + %t177 = extractvalue { ptr, i64, i64 } %t174, 0 + %t178 = getelementptr inbounds %S.ast.Node, ptr %t177, i64 %t173 + %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i32 0, i32 14 + %t180 = load i64, ptr %t179 + %t181 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 + store i64 %t180, ptr %t181 + %t182 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t182 +} + +define internal %S.ast.Node @finch.parser.parseBlock(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + %a12 = alloca i64, align 16 + %a24 = alloca %S.lexer.Token, align 16 + %a41 = alloca %S.lexer.Token, align 16 + %a45 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.880, i64 5, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.881, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.882, i64 3, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic1556, label %ok1557 +panic1556: + call void @finch_panic(ptr @.str.883, i64 480, ptr @.str.884) + unreachable +ok1557: + %t10 = getelementptr inbounds %S.parser.Parser, ptr %t8, i32 0, i32 2 + %t11 = load i64, ptr %t10 + store i64 %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic1558, label %ok1559 +panic1558: + call void @finch_panic(ptr @.str.885, i64 481, ptr @.str.886) + unreachable +ok1559: + %t15 = getelementptr inbounds %S.parser.Parser, ptr %t13, i32 0, i32 2 + store i64 0, ptr %t15 + br label %while.cond1560 +while.cond1560: + %t16 = load ptr, ptr %a1 + %t17 = call i1 @finch.parser.at(ptr %t16, { ptr, i64, i64 } { ptr @.str.887, i64 1, i64 0 }) + %t18 = xor i1 %t17, true + br i1 %t18, label %while.body1561, label %while.end1562 +while.body1561: + %t19 = load ptr, ptr %a1 + %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.888, i64 3, i64 0 }) + br i1 %t20, label %then1563, label %endif1565 +then1563: + %t21 = load ptr, ptr %a1 + %t22 = load ptr, ptr %a1 + %t23 = call %S.lexer.Token @finch.parser.cur(ptr %t22) + call void @finch.parser.fail(ptr %t21, %S.lexer.Token %t23, { ptr, i64, i64 } { ptr @.str.889, i64 35, i64 0 }) + store %S.lexer.Token %t23, ptr %a24 + call void @finch.drop.S_lexer_Token(ptr %a24) + br label %endif1565 +endif1565: + %t25 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 + %t27 = load ptr, ptr %a1 + %t28 = call %S.ast.Node @finch.parser.parseStatement(ptr %t27) + %t29 = load i64, ptr %t26 + %t30 = add i64 %t29, 1 + call void @finch_arr_reserve(ptr %t25, i64 %t30, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t31 = load ptr, ptr %t25 + %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 %t29 + store %S.ast.Node %t28, ptr %t32 + store i64 %t30, ptr %t26 + %t33 = load ptr, ptr %a1 + call void @finch.parser.endOfStatement(ptr %t33) + br label %while.cond1560 +while.end1562: + %t34 = load i64, ptr %a12 + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic1566, label %ok1567 +panic1566: + call void @finch_panic(ptr @.str.890, i64 489, ptr @.str.891) + unreachable +ok1567: + %t37 = getelementptr inbounds %S.parser.Parser, ptr %t35, i32 0, i32 2 + store i64 %t34, ptr %t37 + %t38 = load ptr, ptr %a1 + %t39 = call %S.lexer.Token @finch.parser.cur(ptr %t38) + %t40 = extractvalue %S.lexer.Token %t39, 2 + store %S.lexer.Token %t39, ptr %a41 + call void @finch.drop.S_lexer_Token(ptr %a41) + %t42 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 14 + store i64 %t40, ptr %t42 + %t43 = load ptr, ptr %a1 + %t44 = call %S.lexer.Token @finch.parser.next(ptr %t43) + store %S.lexer.Token %t44, ptr %a45 + call void @finch.drop.S_lexer_Token(ptr %a45) + %t46 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t46 +} + +define internal %S.ast.Node @finch.parser.parseStatement(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Node, align 16 + %a22 = alloca %S.lexer.Token, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca %S.ast.Node, align 16 + %a50 = alloca %S.lexer.Token, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca %S.lexer.Token, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca %S.lexer.Token, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca %S.lexer.Token, align 16 + %a93 = alloca %S.lexer.Token, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.ast.Node, align 16 + %a131 = alloca %S.lexer.Token, align 16 + %a138 = alloca %S.lexer.Token, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca %S.ast.Node, align 16 + %a167 = alloca %S.lexer.Token, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca %S.ast.Node, align 16 + %a186 = alloca %S.lexer.Token, align 16 + %a192 = alloca %S.lexer.Token, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca %S.lexer.Token, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca %S.ast.Node, align 16 + %a250 = alloca %S.ast.Type, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca %S.lexer.Token, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca %S.ast.Node, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca %S.lexer.Token, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca %S.lexer.Token, align 16 + %a309 = alloca %S.lexer.Token, align 16 + %a312 = alloca %S.ast.Node, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca i64, align 16 + %a331 = alloca i64, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca %S.ast.Node, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca %S.lexer.Token, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca %S.ast.Node, align 16 + %a396 = alloca %S.ast.Node, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca %S.ast.Node, align 16 + %a456 = alloca %S.ast.Node, align 16 + %a457 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t2) + store { ptr, i64, i64 } %t3, ptr %a4 + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.892, i64 2, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then1568, label %endif1570 +then1568: + %t10 = load ptr, ptr %a1 + %t11 = call %S.ast.Node @finch.parser.parseIf(ptr %t10) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t11 +endif1570: + %t12 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.893, i64 5, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %then1571, label %endif1573 +then1571: + %t17 = load ptr, ptr %a1 + %t18 = call %S.ast.Node @finch.parser.node(ptr %t17, { ptr, i64, i64 } { ptr @.str.894, i64 5, i64 0 }) + store %S.ast.Node %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = call %S.lexer.Token @finch.parser.next(ptr %t20) + store %S.lexer.Token %t21, ptr %a22 + call void @finch.drop.S_lexer_Token(ptr %a22) + %t23 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 + %t25 = load ptr, ptr %a1 + %t26 = call %S.ast.Node @finch.parser.parseExpr(ptr %t25) + %t27 = load i64, ptr %t24 + %t28 = add i64 %t27, 1 + call void @finch_arr_reserve(ptr %t23, i64 %t28, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t29 = load ptr, ptr %t23 + %t30 = getelementptr inbounds %S.ast.Node, ptr %t29, i64 %t27 + store %S.ast.Node %t26, ptr %t30 + store i64 %t28, ptr %t24 + %t31 = getelementptr inbounds %S.ast.Node, ptr %a19, i32 0, i32 9 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t33 = load ptr, ptr %a1 + %t34 = call %S.ast.Node @finch.parser.parseBlock(ptr %t33) + %t35 = load i64, ptr %t32 + %t36 = add i64 %t35, 1 + call void @finch_arr_reserve(ptr %t31, i64 %t36, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t37 = load ptr, ptr %t31 + %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t35 + store %S.ast.Node %t34, ptr %t38 + store i64 %t36, ptr %t32 + %t39 = load %S.ast.Node, ptr %a19 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t39 +endif1573: + %t40 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.895, i64 3, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then1574, label %endif1576 +then1574: + %t45 = load ptr, ptr %a1 + %t46 = call %S.ast.Node @finch.parser.node(ptr %t45, { ptr, i64, i64 } { ptr @.str.896, i64 3, i64 0 }) + store %S.ast.Node %t46, ptr %a47 + %t48 = load ptr, ptr %a1 + %t49 = call %S.lexer.Token @finch.parser.next(ptr %t48) + store %S.lexer.Token %t49, ptr %a50 + call void @finch.drop.S_lexer_Token(ptr %a50) + %t51 = load ptr, ptr %a1 + %t52 = call %S.lexer.Token @finch.parser.expect(ptr %t51, { ptr, i64, i64 } { ptr @.str.897, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.898, i64 20, i64 0 }) + %t53 = extractvalue %S.lexer.Token %t52, 1 + store { ptr, i64, i64 } %t53, ptr %a54 + call void @finch_str_copy(ptr %a55, ptr %a54) + %t56 = load { ptr, i64, i64 }, ptr %a55 + store %S.lexer.Token %t52, ptr %a57 + call void @finch.drop.S_lexer_Token(ptr %a57) + %t58 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 1 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } %t56, ptr %t58 + store { ptr, i64, i64 } %t59, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load ptr, ptr %a1 + %t62 = call i1 @finch.parser.accept(ptr %t61, { ptr, i64, i64 } { ptr @.str.899, i64 1, i64 0 }) + br i1 %t62, label %then1577, label %endif1579 +then1577: + %t63 = load ptr, ptr %a1 + %t64 = call %S.lexer.Token @finch.parser.expect(ptr %t63, { ptr, i64, i64 } { ptr @.str.900, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.901, i64 27, i64 0 }) + %t65 = extractvalue %S.lexer.Token %t64, 1 + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_copy(ptr %a67, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store %S.lexer.Token %t64, ptr %a69 + call void @finch.drop.S_lexer_Token(ptr %a69) + %t70 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 + %t71 = load { ptr, i64, i64 }, ptr %t70 + store { ptr, i64, i64 } %t68, ptr %t70 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_drop(ptr %a72) + br label %endif1579 +endif1579: + %t73 = load ptr, ptr %a1 + %t74 = call %S.lexer.Token @finch.parser.expect(ptr %t73, { ptr, i64, i64 } { ptr @.str.902, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.903, i64 4, i64 0 }) + store %S.lexer.Token %t74, ptr %a75 + call void @finch.drop.S_lexer_Token(ptr %a75) + %t76 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = load ptr, ptr %a1 + %t79 = call %S.ast.Node @finch.parser.parseExpr(ptr %t78) + %t80 = load i64, ptr %t77 + %t81 = add i64 %t80, 1 + call void @finch_arr_reserve(ptr %t76, i64 %t81, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t82 = load ptr, ptr %t76 + %t83 = getelementptr inbounds %S.ast.Node, ptr %t82, i64 %t80 + store %S.ast.Node %t79, ptr %t83 + store i64 %t81, ptr %t77 + %t84 = load ptr, ptr %a1 + %t85 = call i1 @finch.parser.accept(ptr %t84, { ptr, i64, i64 } { ptr @.str.904, i64 2, i64 0 }) + br i1 %t85, label %then1580, label %else1581 +then1580: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 4 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load i64, ptr %t87 + %t89 = icmp sgt i64 %t88, 0 + br i1 %t89, label %then1583, label %endif1585 +then1583: + %t90 = load ptr, ptr %a1 + %t91 = load ptr, ptr %a1 + %t92 = call %S.lexer.Token @finch.parser.cur(ptr %t91) + call void @finch.parser.fail(ptr %t90, %S.lexer.Token %t92, { ptr, i64, i64 } { ptr @.str.905, i64 55, i64 0 }) + store %S.lexer.Token %t92, ptr %a93 + call void @finch.drop.S_lexer_Token(ptr %a93) + br label %endif1585 +endif1585: + %t94 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load ptr, ptr %a1 + %t97 = call %S.ast.Node @finch.parser.parseExpr(ptr %t96) + %t98 = load i64, ptr %t95 + %t99 = add i64 %t98, 1 + call void @finch_arr_reserve(ptr %t94, i64 %t99, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t100 = load ptr, ptr %t94 + %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 %t98 + store %S.ast.Node %t97, ptr %t101 + store i64 %t99, ptr %t95 + br label %endif1582 +else1581: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 0 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } { ptr @.str.906, i64 4, i64 0 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch_str_drop(ptr %a104) + br label %endif1582 +endif1582: + %t105 = getelementptr inbounds %S.ast.Node, ptr %a47, i32 0, i32 9 + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t105, i32 0, i32 1 + %t107 = load ptr, ptr %a1 + %t108 = call %S.ast.Node @finch.parser.parseBlock(ptr %t107) + %t109 = load i64, ptr %t106 + %t110 = add i64 %t109, 1 + call void @finch_arr_reserve(ptr %t105, i64 %t110, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t111 = load ptr, ptr %t105 + %t112 = getelementptr inbounds %S.ast.Node, ptr %t111, i64 %t109 + store %S.ast.Node %t108, ptr %t112 + store i64 %t110, ptr %t106 + %t113 = load %S.ast.Node, ptr %a47 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t113 +endif1576: + %t114 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.907, i64 5, i64 0 }, ptr %a116 + %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) + %t118 = icmp ne i32 %t117, 0 + br i1 %t118, label %then1586, label %endif1588 +then1586: + %t119 = load ptr, ptr %a1 + %t120 = call %S.ast.Node @finch.parser.parseMatch(ptr %t119, i1 false) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t120 +endif1588: + %t121 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.908, i64 6, i64 0 }, ptr %a123 + %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) + %t125 = icmp ne i32 %t124, 0 + br i1 %t125, label %then1589, label %endif1591 +then1589: + %t126 = load ptr, ptr %a1 + %t127 = call %S.ast.Node @finch.parser.node(ptr %t126, { ptr, i64, i64 } { ptr @.str.909, i64 6, i64 0 }) + store %S.ast.Node %t127, ptr %a128 + %t129 = load ptr, ptr %a1 + %t130 = call %S.lexer.Token @finch.parser.next(ptr %t129) + store %S.lexer.Token %t130, ptr %a131 + call void @finch.drop.S_lexer_Token(ptr %a131) + %t132 = load ptr, ptr %a1 + %t133 = call i1 @finch.parser.at(ptr %t132, { ptr, i64, i64 } { ptr @.str.910, i64 1, i64 0 }) + %t134 = xor i1 %t133, true + br label %logic.from1592 +logic.from1592: + br i1 %t134, label %logic.rhs1593, label %logic.end1594 +logic.rhs1593: + %t135 = load ptr, ptr %a1 + %t136 = call %S.lexer.Token @finch.parser.cur(ptr %t135) + %t137 = extractvalue %S.lexer.Token %t136, 4 + store %S.lexer.Token %t136, ptr %a138 + call void @finch.drop.S_lexer_Token(ptr %a138) + %t139 = xor i1 %t137, true + br label %logic.rend1595 +logic.rend1595: + br label %logic.end1594 +logic.end1594: + %t140 = phi i1 [ false, %logic.from1592 ], [ %t139, %logic.rend1595 ] + br i1 %t140, label %then1596, label %endif1598 +then1596: + %t141 = getelementptr inbounds %S.ast.Node, ptr %a128, i32 0, i32 9 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i32 0, i32 1 + %t143 = load ptr, ptr %a1 + %t144 = call %S.ast.Node @finch.parser.parseExpr(ptr %t143) + %t145 = load i64, ptr %t142 + %t146 = add i64 %t145, 1 + call void @finch_arr_reserve(ptr %t141, i64 %t146, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t147 = load ptr, ptr %t141 + %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 %t145 + store %S.ast.Node %t144, ptr %t148 + store i64 %t146, ptr %t142 + br label %endif1598 +endif1598: + %t149 = load %S.ast.Node, ptr %a128 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t149 +endif1591: + %t150 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t150, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.911, i64 5, i64 0 }, ptr %a152 + %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) + %t154 = icmp ne i32 %t153, 0 + br label %logic.from1599 +logic.from1599: + br i1 %t154, label %logic.end1601, label %logic.rhs1600 +logic.rhs1600: + %t155 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t155, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.912, i64 8, i64 0 }, ptr %a157 + %t158 = call i32 @finch_str_eq(ptr %a156, ptr %a157) + %t159 = icmp ne i32 %t158, 0 + br label %logic.rend1602 +logic.rend1602: + br label %logic.end1601 +logic.end1601: + %t160 = phi i1 [ true, %logic.from1599 ], [ %t159, %logic.rend1602 ] + br i1 %t160, label %then1603, label %endif1605 +then1603: + %t161 = load ptr, ptr %a1 + %t162 = load { ptr, i64, i64 }, ptr %a4 + %t163 = call %S.ast.Node @finch.parser.node(ptr %t161, { ptr, i64, i64 } %t162) + store %S.ast.Node %t163, ptr %a164 + %t165 = load ptr, ptr %a1 + %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) + store %S.lexer.Token %t166, ptr %a167 + call void @finch.drop.S_lexer_Token(ptr %a167) + %t168 = load %S.ast.Node, ptr %a164 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t168 +endif1605: + %t169 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t169, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.913, i64 1, i64 0 }, ptr %a171 + %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) + %t173 = icmp ne i32 %t172, 0 + br i1 %t173, label %then1606, label %endif1608 +then1606: + %t174 = load ptr, ptr %a1 + %t175 = call %S.ast.Node @finch.parser.parseBlock(ptr %t174) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t175 +endif1608: + %t176 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.914, i64 5, i64 0 }, ptr %a178 + %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %then1609, label %endif1611 +then1609: + %t181 = load ptr, ptr %a1 + %t182 = call %S.ast.Node @finch.parser.node(ptr %t181, { ptr, i64, i64 } { ptr @.str.915, i64 5, i64 0 }) + store %S.ast.Node %t182, ptr %a183 + %t184 = load ptr, ptr %a1 + %t185 = call %S.lexer.Token @finch.parser.next(ptr %t184) + store %S.lexer.Token %t185, ptr %a186 + call void @finch.drop.S_lexer_Token(ptr %a186) + %t187 = load ptr, ptr %a1 + %t188 = call i1 @finch.parser.at(ptr %t187, { ptr, i64, i64 } { ptr @.str.916, i64 5, i64 0 }) + br i1 %t188, label %then1612, label %endif1614 +then1612: + %t189 = load ptr, ptr %a1 + %t190 = load ptr, ptr %a1 + %t191 = call %S.lexer.Token @finch.parser.cur(ptr %t190) + call void @finch.parser.fail(ptr %t189, %S.lexer.Token %t191, { ptr, i64, i64 } { ptr @.str.917, i64 33, i64 0 }) + store %S.lexer.Token %t191, ptr %a192 + call void @finch.drop.S_lexer_Token(ptr %a192) + br label %endif1614 +endif1614: + %t193 = getelementptr inbounds %S.ast.Node, ptr %a183, i32 0, i32 9 + %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t193, i32 0, i32 1 + %t195 = load ptr, ptr %a1 + %t196 = call %S.ast.Node @finch.parser.parseStatement(ptr %t195) + %t197 = load i64, ptr %t194 + %t198 = add i64 %t197, 1 + call void @finch_arr_reserve(ptr %t193, i64 %t198, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t199 = load ptr, ptr %t193 + %t200 = getelementptr inbounds %S.ast.Node, ptr %t199, i64 %t197 + store %S.ast.Node %t196, ptr %t200 + store i64 %t198, ptr %t194 + %t201 = load %S.ast.Node, ptr %a183 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t201 +endif1611: + %t202 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t202, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.918, i64 2, i64 0 }, ptr %a204 + %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) + %t206 = icmp ne i32 %t205, 0 + br label %logic.from1615 +logic.from1615: + br i1 %t206, label %logic.end1617, label %logic.rhs1616 +logic.rhs1616: + %t207 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t207, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.919, i64 6, i64 0 }, ptr %a209 + %t210 = call i32 @finch_str_eq(ptr %a208, ptr %a209) + %t211 = icmp ne i32 %t210, 0 + br label %logic.rend1618 +logic.rend1618: + br label %logic.end1617 +logic.end1617: + %t212 = phi i1 [ true, %logic.from1615 ], [ %t211, %logic.rend1618 ] + br label %logic.from1619 +logic.from1619: + br i1 %t212, label %logic.end1621, label %logic.rhs1620 +logic.rhs1620: + %t213 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t213, ptr %a214 + store { ptr, i64, i64 } { ptr @.str.920, i64 6, i64 0 }, ptr %a215 + %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) + %t217 = icmp ne i32 %t216, 0 + br label %logic.rend1622 +logic.rend1622: + br label %logic.end1621 +logic.end1621: + %t218 = phi i1 [ true, %logic.from1619 ], [ %t217, %logic.rend1622 ] + br label %logic.from1623 +logic.from1623: + br i1 %t218, label %logic.end1625, label %logic.rhs1624 +logic.rhs1624: + %t219 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t219, ptr %a220 + store { ptr, i64, i64 } { ptr @.str.921, i64 4, i64 0 }, ptr %a221 + %t222 = call i32 @finch_str_eq(ptr %a220, ptr %a221) + %t223 = icmp ne i32 %t222, 0 + br label %logic.rend1626 +logic.rend1626: + br label %logic.end1625 +logic.end1625: + %t224 = phi i1 [ true, %logic.from1623 ], [ %t223, %logic.rend1626 ] + br i1 %t224, label %then1627, label %endif1629 +then1627: + %t225 = load ptr, ptr %a1 + %t226 = load ptr, ptr %a1 + %t227 = call %S.lexer.Token @finch.parser.cur(ptr %t226) + %t228 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.922, i64 1, i64 0 }, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.923, i64 48, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + store { ptr, i64, i64 } %t232, ptr %a236 + call void @finch_str_drop(ptr %a236) + %t237 = load { ptr, i64, i64 }, ptr %a233 + call void @finch.parser.fail(ptr %t225, %S.lexer.Token %t227, { ptr, i64, i64 } %t237) + store %S.lexer.Token %t227, ptr %a238 + call void @finch.drop.S_lexer_Token(ptr %a238) + store { ptr, i64, i64 } %t237, ptr %a239 + call void @finch_str_drop(ptr %a239) + br label %endif1629 +endif1629: + %t240 = load ptr, ptr %a1 + %t241 = call i1 @finch.parser.atDeclaration(ptr %t240) + br i1 %t241, label %then1630, label %endif1632 +then1630: + %t242 = load ptr, ptr %a1 + %t243 = call %S.ast.Node @finch.parser.node(ptr %t242, { ptr, i64, i64 } { ptr @.str.924, i64 4, i64 0 }) + store %S.ast.Node %t243, ptr %a244 + %t245 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 6 + store i1 true, ptr %t245 + %t246 = load ptr, ptr %a1 + %t247 = call %S.ast.Type @finch.parser.parseType(ptr %t246) + %t248 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 5 + %t249 = load %S.ast.Type, ptr %t248 + store %S.ast.Type %t247, ptr %t248 + store %S.ast.Type %t249, ptr %a250 + call void @finch.drop.S_ast_Type(ptr %a250) + %t251 = load ptr, ptr %a1 + %t252 = call %S.lexer.Token @finch.parser.expect(ptr %t251, { ptr, i64, i64 } { ptr @.str.925, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.926, i64 15, i64 0 }) + %t253 = extractvalue %S.lexer.Token %t252, 1 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_copy(ptr %a255, ptr %a254) + %t256 = load { ptr, i64, i64 }, ptr %a255 + store %S.lexer.Token %t252, ptr %a257 + call void @finch.drop.S_lexer_Token(ptr %a257) + %t258 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 1 + %t259 = load { ptr, i64, i64 }, ptr %t258 + store { ptr, i64, i64 } %t256, ptr %t258 + store { ptr, i64, i64 } %t259, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load ptr, ptr %a1 + %t262 = call i1 @finch.parser.accept(ptr %t261, { ptr, i64, i64 } { ptr @.str.927, i64 1, i64 0 }) + br i1 %t262, label %then1633, label %endif1635 +then1633: + %t263 = getelementptr inbounds %S.ast.Node, ptr %a244, i32 0, i32 9 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + %t265 = load ptr, ptr %a1 + %t266 = call %S.ast.Node @finch.parser.parseExpr(ptr %t265) + %t267 = load i64, ptr %t264 + %t268 = add i64 %t267, 1 + call void @finch_arr_reserve(ptr %t263, i64 %t268, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t269 = load ptr, ptr %t263 + %t270 = getelementptr inbounds %S.ast.Node, ptr %t269, i64 %t267 + store %S.ast.Node %t266, ptr %t270 + store i64 %t268, ptr %t264 + br label %endif1635 +endif1635: + %t271 = load %S.ast.Node, ptr %a244 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t271 +endif1632: + %t272 = load ptr, ptr %a1 + %t273 = call i1 @finch.parser.at(ptr %t272, { ptr, i64, i64 } { ptr @.str.928, i64 5, i64 0 }) + br label %logic.from1636 +logic.from1636: + br i1 %t273, label %logic.rhs1637, label %logic.end1638 +logic.rhs1637: + %t274 = load ptr, ptr %a1 + %t275 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t274, i64 1) + store { ptr, i64, i64 } %t275, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.929, i64 2, i64 0 }, ptr %a277 + %t278 = call i32 @finch_str_eq(ptr %a276, ptr %a277) + %t279 = icmp ne i32 %t278, 0 + store { ptr, i64, i64 } %t275, ptr %a280 + call void @finch_str_drop(ptr %a280) + br label %logic.rend1639 +logic.rend1639: + br label %logic.end1638 +logic.end1638: + %t281 = phi i1 [ false, %logic.from1636 ], [ %t279, %logic.rend1639 ] + br i1 %t281, label %then1640, label %endif1642 +then1640: + %t282 = load ptr, ptr %a1 + %t283 = call %S.ast.Node @finch.parser.node(ptr %t282, { ptr, i64, i64 } { ptr @.str.930, i64 4, i64 0 }) + store %S.ast.Node %t283, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = call %S.lexer.Token @finch.parser.next(ptr %t285) + %t287 = extractvalue %S.lexer.Token %t286, 1 + store { ptr, i64, i64 } %t287, ptr %a288 + call void @finch_str_copy(ptr %a289, ptr %a288) + %t290 = load { ptr, i64, i64 }, ptr %a289 + store %S.lexer.Token %t286, ptr %a291 + call void @finch.drop.S_lexer_Token(ptr %a291) + %t292 = getelementptr inbounds %S.ast.Node, ptr %a284, i32 0, i32 1 + %t293 = load { ptr, i64, i64 }, ptr %t292 + store { ptr, i64, i64 } %t290, ptr %t292 + store { ptr, i64, i64 } %t293, ptr %a294 + call void @finch_str_drop(ptr %a294) + %t295 = load ptr, ptr %a1 + %t296 = call %S.lexer.Token @finch.parser.next(ptr %t295) + store %S.lexer.Token %t296, ptr %a297 + call void @finch.drop.S_lexer_Token(ptr %a297) + %t298 = getelementptr inbounds %S.ast.Node, ptr %a284, i32 0, i32 9 + %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i32 0, i32 1 + %t300 = load ptr, ptr %a1 + %t301 = call %S.ast.Node @finch.parser.parseExpr(ptr %t300) + %t302 = load i64, ptr %t299 + %t303 = add i64 %t302, 1 + call void @finch_arr_reserve(ptr %t298, i64 %t303, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t304 = load ptr, ptr %t298 + %t305 = getelementptr inbounds %S.ast.Node, ptr %t304, i64 %t302 + store %S.ast.Node %t301, ptr %t305 + store i64 %t303, ptr %t299 + %t306 = load %S.ast.Node, ptr %a284 + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t306 +endif1642: + %t307 = load ptr, ptr %a1 + %t308 = call %S.lexer.Token @finch.parser.cur(ptr %t307) + store %S.lexer.Token %t308, ptr %a309 + %t310 = load ptr, ptr %a1 + %t311 = call %S.ast.Node @finch.parser.parseExpr(ptr %t310) + store %S.ast.Node %t311, ptr %a312 + %t313 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t314 = call ptr @finch_alloc(i64 %t313) + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 0 + store { ptr, i64, i64 } { ptr @.str.931, i64 1, i64 0 }, ptr %t315 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 1 + store { ptr, i64, i64 } { ptr @.str.932, i64 2, i64 0 }, ptr %t316 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 2 + store { ptr, i64, i64 } { ptr @.str.933, i64 2, i64 0 }, ptr %t317 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 3 + store { ptr, i64, i64 } { ptr @.str.934, i64 2, i64 0 }, ptr %t318 + %t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 4 + store { ptr, i64, i64 } { ptr @.str.935, i64 2, i64 0 }, ptr %t319 + %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 5 + store { ptr, i64, i64 } { ptr @.str.936, i64 2, i64 0 }, ptr %t320 + %t321 = insertvalue { ptr, i64, i64 } undef, ptr %t314, 0 + %t322 = insertvalue { ptr, i64, i64 } %t321, i64 6, 1 + %t323 = insertvalue { ptr, i64, i64 } %t322, i64 6, 2 + store { ptr, i64, i64 } %t323, ptr %a324 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a324, i32 0, i32 1 + %t326 = load ptr, ptr %a1 + %t327 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t326) + store i64 -1, ptr %a328 + %t329 = load i64, ptr %t325 + %t330 = load ptr, ptr %a324 + store i64 0, ptr %a331 + br label %find.cond1643 +find.cond1643: + %t332 = load i64, ptr %a331 + %t333 = icmp slt i64 %t332, %t329 + br i1 %t333, label %find.body1644, label %find.end1647 +find.body1644: + %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t330, i64 %t332 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t335, ptr %a336 + store { ptr, i64, i64 } %t327, ptr %a337 + %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) + %t339 = icmp ne i32 %t338, 0 + br i1 %t339, label %find.hit1645, label %find.next1646 +find.hit1645: + store i64 %t332, ptr %a328 + br label %find.end1647 +find.next1646: + %t340 = add i64 %t332, 1 + store i64 %t340, ptr %a331 + br label %find.cond1643 +find.end1647: + store { ptr, i64, i64 } %t327, ptr %a341 + call void @finch_str_drop(ptr %a341) + %t342 = load i64, ptr %a328 + %t343 = icmp sge i64 %t342, 0 + br label %logic.from1648 +logic.from1648: + br i1 %t343, label %logic.rhs1649, label %logic.end1650 +logic.rhs1649: + %t344 = load ptr, ptr %a1 + %t345 = call i1 @finch.parser.sameLine(ptr %t344) + br label %logic.rend1651 +logic.rend1651: + br label %logic.end1650 +logic.end1650: + %t346 = phi i1 [ false, %logic.from1648 ], [ %t345, %logic.rend1651 ] + br i1 %t346, label %then1652, label %endif1654 +then1652: + %t347 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t348 = load { ptr, i64, i64 }, ptr %t347 + store { ptr, i64, i64 } %t348, ptr %a349 + store { ptr, i64, i64 } { ptr @.str.937, i64 3, i64 0 }, ptr %a350 + %t351 = call i32 @finch_str_eq(ptr %a349, ptr %a350) + %t352 = icmp eq i32 %t351, 0 + br label %logic.from1655 +logic.from1655: + br i1 %t352, label %logic.rhs1656, label %logic.end1657 +logic.rhs1656: + %t353 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t354 = load { ptr, i64, i64 }, ptr %t353 + store { ptr, i64, i64 } %t354, ptr %a355 + store { ptr, i64, i64 } { ptr @.str.938, i64 6, i64 0 }, ptr %a356 + %t357 = call i32 @finch_str_eq(ptr %a355, ptr %a356) + %t358 = icmp eq i32 %t357, 0 + br label %logic.rend1658 +logic.rend1658: + br label %logic.end1657 +logic.end1657: + %t359 = phi i1 [ false, %logic.from1655 ], [ %t358, %logic.rend1658 ] + br label %logic.from1659 +logic.from1659: + br i1 %t359, label %logic.rhs1660, label %logic.end1661 +logic.rhs1660: + %t360 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t361 = load { ptr, i64, i64 }, ptr %t360 + store { ptr, i64, i64 } %t361, ptr %a362 + store { ptr, i64, i64 } { ptr @.str.939, i64 5, i64 0 }, ptr %a363 + %t364 = call i32 @finch_str_eq(ptr %a362, ptr %a363) + %t365 = icmp eq i32 %t364, 0 + br label %logic.rend1662 +logic.rend1662: + br label %logic.end1661 +logic.end1661: + %t366 = phi i1 [ false, %logic.from1659 ], [ %t365, %logic.rend1662 ] + br i1 %t366, label %then1663, label %endif1665 +then1663: + %t367 = load ptr, ptr %a1 + %t368 = load %S.lexer.Token, ptr %a309 + call void @finch.parser.fail(ptr %t367, %S.lexer.Token %t368, { ptr, i64, i64 } { ptr @.str.940, i64 66, i64 0 }) + br label %endif1665 +endif1665: + %t369 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.941, i64 6, i64 0 }, 0 + %t370 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 + %t371 = load i64, ptr %t370 + %t372 = insertvalue %S.ast.Node %t369, i64 %t371, 11 + %t373 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 3 + %t374 = load i64, ptr %t373 + %t375 = insertvalue %S.ast.Node %t372, i64 %t374, 12 + %t376 = load ptr, ptr %a1 + %t377 = icmp eq ptr %t376, null + br i1 %t377, label %panic1666, label %ok1667 +panic1666: + call void @finch_panic(ptr @.str.942, i64 584, ptr @.str.943) + unreachable +ok1667: + %t378 = getelementptr inbounds %S.parser.Parser, ptr %t376, i32 0, i32 3 + %t379 = load i64, ptr %t378 + %t380 = insertvalue %S.ast.Node %t375, i64 %t379, 13 + store %S.ast.Node %t380, ptr %a381 + %t382 = load ptr, ptr %a1 + %t383 = call %S.lexer.Token @finch.parser.next(ptr %t382) + %t384 = extractvalue %S.lexer.Token %t383, 0 + store { ptr, i64, i64 } %t384, ptr %a385 + call void @finch_str_copy(ptr %a386, ptr %a385) + %t387 = load { ptr, i64, i64 }, ptr %a386 + store %S.lexer.Token %t383, ptr %a388 + call void @finch.drop.S_lexer_Token(ptr %a388) + %t389 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 1 + %t390 = load { ptr, i64, i64 }, ptr %t389 + store { ptr, i64, i64 } %t387, ptr %t389 + store { ptr, i64, i64 } %t390, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 9 + %t393 = getelementptr inbounds { ptr, i64, i64 }, ptr %t392, i32 0, i32 1 + %t394 = load %S.ast.Node, ptr %a312 + store %S.ast.Node %t394, ptr %a395 + call void @finch.copy.S_ast_Node(ptr %a396, ptr %a395) + %t397 = load %S.ast.Node, ptr %a396 + %t398 = load i64, ptr %t393 + %t399 = add i64 %t398, 1 + call void @finch_arr_reserve(ptr %t392, i64 %t399, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t400 = load ptr, ptr %t392 + %t401 = getelementptr inbounds %S.ast.Node, ptr %t400, i64 %t398 + store %S.ast.Node %t397, ptr %t401 + store i64 %t399, ptr %t393 + %t402 = getelementptr inbounds %S.ast.Node, ptr %a381, i32 0, i32 9 + %t403 = getelementptr inbounds { ptr, i64, i64 }, ptr %t402, i32 0, i32 1 + %t404 = load ptr, ptr %a1 + %t405 = call %S.ast.Node @finch.parser.parseExpr(ptr %t404) + %t406 = load i64, ptr %t403 + %t407 = add i64 %t406, 1 + call void @finch_arr_reserve(ptr %t402, i64 %t407, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t408 = load ptr, ptr %t402 + %t409 = getelementptr inbounds %S.ast.Node, ptr %t408, i64 %t406 + store %S.ast.Node %t405, ptr %t409 + store i64 %t407, ptr %t403 + %t410 = load %S.ast.Node, ptr %a381 + call void @finch.drop.arr_str(ptr %a324) + call void @finch.drop.S_ast_Node(ptr %a312) + call void @finch.drop.S_lexer_Token(ptr %a309) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t410 +endif1654: + %t411 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t412 = load { ptr, i64, i64 }, ptr %t411 + store { ptr, i64, i64 } %t412, ptr %a413 + store { ptr, i64, i64 } { ptr @.str.944, i64 4, i64 0 }, ptr %a414 + %t415 = call i32 @finch_str_eq(ptr %a413, ptr %a414) + %t416 = icmp eq i32 %t415, 0 + br label %logic.from1668 +logic.from1668: + br i1 %t416, label %logic.rhs1669, label %logic.end1670 +logic.rhs1669: + %t417 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t418 = load { ptr, i64, i64 }, ptr %t417 + store { ptr, i64, i64 } %t418, ptr %a419 + store { ptr, i64, i64 } { ptr @.str.945, i64 6, i64 0 }, ptr %a420 + %t421 = call i32 @finch_str_eq(ptr %a419, ptr %a420) + %t422 = icmp eq i32 %t421, 0 + br label %logic.rend1671 +logic.rend1671: + br label %logic.end1670 +logic.end1670: + %t423 = phi i1 [ false, %logic.from1668 ], [ %t422, %logic.rend1671 ] + br label %logic.from1672 +logic.from1672: + br i1 %t423, label %logic.rhs1673, label %logic.end1674 +logic.rhs1673: + %t424 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t425 = load { ptr, i64, i64 }, ptr %t424 + store { ptr, i64, i64 } %t425, ptr %a426 + store { ptr, i64, i64 } { ptr @.str.946, i64 3, i64 0 }, ptr %a427 + %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) + %t429 = icmp eq i32 %t428, 0 + br label %logic.rend1675 +logic.rend1675: + br label %logic.end1674 +logic.end1674: + %t430 = phi i1 [ false, %logic.from1672 ], [ %t429, %logic.rend1675 ] + br label %logic.from1676 +logic.from1676: + br i1 %t430, label %logic.rhs1677, label %logic.end1678 +logic.rhs1677: + %t431 = getelementptr inbounds %S.ast.Node, ptr %a312, i32 0, i32 0 + %t432 = load { ptr, i64, i64 }, ptr %t431 + store { ptr, i64, i64 } %t432, ptr %a433 + store { ptr, i64, i64 } { ptr @.str.947, i64 2, i64 0 }, ptr %a434 + %t435 = call i32 @finch_str_eq(ptr %a433, ptr %a434) + %t436 = icmp eq i32 %t435, 0 + br label %logic.rend1679 +logic.rend1679: + br label %logic.end1678 +logic.end1678: + %t437 = phi i1 [ false, %logic.from1676 ], [ %t436, %logic.rend1679 ] + br i1 %t437, label %then1680, label %endif1682 +then1680: + %t438 = load ptr, ptr %a1 + %t439 = load %S.lexer.Token, ptr %a309 + call void @finch.parser.fail(ptr %t438, %S.lexer.Token %t439, { ptr, i64, i64 } { ptr @.str.948, i64 37, i64 0 }) + br label %endif1682 +endif1682: + %t440 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.949, i64 4, i64 0 }, 0 + %t441 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 2 + %t442 = load i64, ptr %t441 + %t443 = insertvalue %S.ast.Node %t440, i64 %t442, 11 + %t444 = getelementptr inbounds %S.lexer.Token, ptr %a309, i32 0, i32 3 + %t445 = load i64, ptr %t444 + %t446 = insertvalue %S.ast.Node %t443, i64 %t445, 12 + %t447 = load ptr, ptr %a1 + %t448 = icmp eq ptr %t447, null + br i1 %t448, label %panic1683, label %ok1684 +panic1683: + call void @finch_panic(ptr @.str.950, i64 593, ptr @.str.951) + unreachable +ok1684: + %t449 = getelementptr inbounds %S.parser.Parser, ptr %t447, i32 0, i32 3 + %t450 = load i64, ptr %t449 + %t451 = insertvalue %S.ast.Node %t446, i64 %t450, 13 + store %S.ast.Node %t451, ptr %a452 + %t453 = getelementptr inbounds %S.ast.Node, ptr %a452, i32 0, i32 9 + %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i32 0, i32 1 + %t455 = load %S.ast.Node, ptr %a312 + store %S.ast.Node %t455, ptr %a456 + call void @finch.copy.S_ast_Node(ptr %a457, ptr %a456) + %t458 = load %S.ast.Node, ptr %a457 + %t459 = load i64, ptr %t454 + %t460 = add i64 %t459, 1 + call void @finch_arr_reserve(ptr %t453, i64 %t460, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t461 = load ptr, ptr %t453 + %t462 = getelementptr inbounds %S.ast.Node, ptr %t461, i64 %t459 + store %S.ast.Node %t458, ptr %t462 + store i64 %t460, ptr %t454 + %t463 = load %S.ast.Node, ptr %a452 + call void @finch.drop.arr_str(ptr %a324) + call void @finch.drop.S_ast_Node(ptr %a312) + call void @finch.drop.S_lexer_Token(ptr %a309) + call void @finch_str_drop(ptr %a4) + ret %S.ast.Node %t463 +} + +define internal %S.ast.Node @finch.parser.parseIf(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.node(ptr %t2, { ptr, i64, i64 } { ptr @.str.952, i64 2, i64 0 }) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.lexer.Token @finch.parser.expect(ptr %t5, { ptr, i64, i64 } { ptr @.str.953, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.954, i64 4, i64 0 }) + store %S.lexer.Token %t6, ptr %a7 + call void @finch.drop.S_lexer_Token(ptr %a7) + %t8 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load ptr, ptr %a1 + %t11 = call %S.ast.Node @finch.parser.parseExpr(ptr %t10) + %t12 = load i64, ptr %t9 + %t13 = add i64 %t12, 1 + call void @finch_arr_reserve(ptr %t8, i64 %t13, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t14 = load ptr, ptr %t8 + %t15 = getelementptr inbounds %S.ast.Node, ptr %t14, i64 %t12 + store %S.ast.Node %t11, ptr %t15 + store i64 %t13, ptr %t9 + %t16 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 + %t18 = load ptr, ptr %a1 + %t19 = call %S.ast.Node @finch.parser.parseBlock(ptr %t18) + %t20 = load i64, ptr %t17 + %t21 = add i64 %t20, 1 + call void @finch_arr_reserve(ptr %t16, i64 %t21, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t22 = load ptr, ptr %t16 + %t23 = getelementptr inbounds %S.ast.Node, ptr %t22, i64 %t20 + store %S.ast.Node %t19, ptr %t23 + store i64 %t21, ptr %t17 + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.accept(ptr %t24, { ptr, i64, i64 } { ptr @.str.955, i64 4, i64 0 }) + br i1 %t25, label %then1685, label %endif1687 +then1685: + %t26 = load ptr, ptr %a1 + %t27 = call i1 @finch.parser.at(ptr %t26, { ptr, i64, i64 } { ptr @.str.956, i64 2, i64 0 }) + br i1 %t27, label %then1688, label %else1689 +then1688: + %t28 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 + %t30 = load ptr, ptr %a1 + %t31 = call %S.ast.Node @finch.parser.parseIf(ptr %t30) + %t32 = load i64, ptr %t29 + %t33 = add i64 %t32, 1 + call void @finch_arr_reserve(ptr %t28, i64 %t33, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t34 = load ptr, ptr %t28 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 + store %S.ast.Node %t31, ptr %t35 + store i64 %t33, ptr %t29 + br label %endif1690 +else1689: + %t36 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 9 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 + %t38 = load ptr, ptr %a1 + %t39 = call %S.ast.Node @finch.parser.parseBlock(ptr %t38) + %t40 = load i64, ptr %t37 + %t41 = add i64 %t40, 1 + call void @finch_arr_reserve(ptr %t36, i64 %t41, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t42 = load ptr, ptr %t36 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 + store %S.ast.Node %t39, ptr %t43 + store i64 %t41, ptr %t37 + br label %endif1690 +endif1690: + br label %endif1687 +endif1687: + %t44 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t44 +} + +define internal i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.957, i64 2, i64 0 }, ptr %a4 + %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) + %t6 = icmp ne i32 %t5, 0 + br i1 %t6, label %then1691, label %endif1693 +then1691: + ret i64 1 +endif1693: + %t7 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.958, i64 2, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then1694, label %endif1696 +then1694: + ret i64 2 +endif1696: + %t12 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.959, i64 2, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from1697 +logic.from1697: + br i1 %t16, label %logic.end1699, label %logic.rhs1698 +logic.rhs1698: + %t17 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.960, i64 2, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + br label %logic.rend1700 +logic.rend1700: + br label %logic.end1699 +logic.end1699: + %t22 = phi i1 [ true, %logic.from1697 ], [ %t21, %logic.rend1700 ] + br label %logic.from1701 +logic.from1701: + br i1 %t22, label %logic.end1703, label %logic.rhs1702 +logic.rhs1702: + %t23 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.961, i64 1, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.rend1704 +logic.rend1704: + br label %logic.end1703 +logic.end1703: + %t28 = phi i1 [ true, %logic.from1701 ], [ %t27, %logic.rend1704 ] + br label %logic.from1705 +logic.from1705: + br i1 %t28, label %logic.end1707, label %logic.rhs1706 +logic.rhs1706: + %t29 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.962, i64 2, i64 0 }, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br label %logic.rend1708 +logic.rend1708: + br label %logic.end1707 +logic.end1707: + %t34 = phi i1 [ true, %logic.from1705 ], [ %t33, %logic.rend1708 ] + br label %logic.from1709 +logic.from1709: + br i1 %t34, label %logic.end1711, label %logic.rhs1710 +logic.rhs1710: + %t35 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.963, i64 1, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.rend1712 +logic.rend1712: + br label %logic.end1711 +logic.end1711: + %t40 = phi i1 [ true, %logic.from1709 ], [ %t39, %logic.rend1712 ] + br label %logic.from1713 +logic.from1713: + br i1 %t40, label %logic.end1715, label %logic.rhs1714 +logic.rhs1714: + %t41 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.964, i64 2, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.rend1716 +logic.rend1716: + br label %logic.end1715 +logic.end1715: + %t46 = phi i1 [ true, %logic.from1713 ], [ %t45, %logic.rend1716 ] + br i1 %t46, label %then1717, label %endif1719 +then1717: + ret i64 3 +endif1719: + %t47 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t47, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.965, i64 1, i64 0 }, ptr %a49 + %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) + %t51 = icmp ne i32 %t50, 0 + br label %logic.from1720 +logic.from1720: + br i1 %t51, label %logic.end1722, label %logic.rhs1721 +logic.rhs1721: + %t52 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.966, i64 1, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br label %logic.rend1723 +logic.rend1723: + br label %logic.end1722 +logic.end1722: + %t57 = phi i1 [ true, %logic.from1720 ], [ %t56, %logic.rend1723 ] + br label %logic.from1724 +logic.from1724: + br i1 %t57, label %logic.end1726, label %logic.rhs1725 +logic.rhs1725: + %t58 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t58, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.967, i64 1, i64 0 }, ptr %a60 + %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) + %t62 = icmp ne i32 %t61, 0 + br label %logic.rend1727 +logic.rend1727: + br label %logic.end1726 +logic.end1726: + %t63 = phi i1 [ true, %logic.from1724 ], [ %t62, %logic.rend1727 ] + br label %logic.from1728 +logic.from1728: + br i1 %t63, label %logic.end1730, label %logic.rhs1729 +logic.rhs1729: + %t64 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.968, i64 1, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp ne i32 %t67, 0 + br label %logic.rend1731 +logic.rend1731: + br label %logic.end1730 +logic.end1730: + %t69 = phi i1 [ true, %logic.from1728 ], [ %t68, %logic.rend1731 ] + br i1 %t69, label %then1732, label %endif1734 +then1732: + ret i64 4 +endif1734: + %t70 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t70, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.969, i64 1, i64 0 }, ptr %a72 + %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) + %t74 = icmp ne i32 %t73, 0 + br label %logic.from1735 +logic.from1735: + br i1 %t74, label %logic.end1737, label %logic.rhs1736 +logic.rhs1736: + %t75 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t75, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.970, i64 1, i64 0 }, ptr %a77 + %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) + %t79 = icmp ne i32 %t78, 0 + br label %logic.rend1738 +logic.rend1738: + br label %logic.end1737 +logic.end1737: + %t80 = phi i1 [ true, %logic.from1735 ], [ %t79, %logic.rend1738 ] + br label %logic.from1739 +logic.from1739: + br i1 %t80, label %logic.end1741, label %logic.rhs1740 +logic.rhs1740: + %t81 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.971, i64 1, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.rend1742 +logic.rend1742: + br label %logic.end1741 +logic.end1741: + %t86 = phi i1 [ true, %logic.from1739 ], [ %t85, %logic.rend1742 ] + br label %logic.from1743 +logic.from1743: + br i1 %t86, label %logic.end1745, label %logic.rhs1744 +logic.rhs1744: + %t87 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t87, ptr %a88 + store { ptr, i64, i64 } { ptr @.str.972, i64 2, i64 0 }, ptr %a89 + %t90 = call i32 @finch_str_eq(ptr %a88, ptr %a89) + %t91 = icmp ne i32 %t90, 0 + br label %logic.rend1746 +logic.rend1746: + br label %logic.end1745 +logic.end1745: + %t92 = phi i1 [ true, %logic.from1743 ], [ %t91, %logic.rend1746 ] + br label %logic.from1747 +logic.from1747: + br i1 %t92, label %logic.end1749, label %logic.rhs1748 +logic.rhs1748: + %t93 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t93, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.973, i64 2, i64 0 }, ptr %a95 + %t96 = call i32 @finch_str_eq(ptr %a94, ptr %a95) + %t97 = icmp ne i32 %t96, 0 + br label %logic.rend1750 +logic.rend1750: + br label %logic.end1749 +logic.end1749: + %t98 = phi i1 [ true, %logic.from1747 ], [ %t97, %logic.rend1750 ] + br label %logic.from1751 +logic.from1751: + br i1 %t98, label %logic.end1753, label %logic.rhs1752 +logic.rhs1752: + %t99 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t99, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.974, i64 1, i64 0 }, ptr %a101 + %t102 = call i32 @finch_str_eq(ptr %a100, ptr %a101) + %t103 = icmp ne i32 %t102, 0 + br label %logic.rend1754 +logic.rend1754: + br label %logic.end1753 +logic.end1753: + %t104 = phi i1 [ true, %logic.from1751 ], [ %t103, %logic.rend1754 ] + br i1 %t104, label %then1755, label %endif1757 +then1755: + ret i64 5 +endif1757: + ret i64 0 +} + +define internal %S.ast.Node @finch.parser.parseExpr(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a15 = alloca %S.ast.Node, align 16 + %a18 = alloca %S.lexer.Token, align 16 + %a22 = alloca %S.ast.Node, align 16 + %a23 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.parseBinary(ptr %t2, i64 1) + store %S.ast.Node %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call i1 @finch.parser.sameLine(ptr %t5) + %t7 = xor i1 %t6, true + br label %logic.from1758 +logic.from1758: + br i1 %t7, label %logic.end1760, label %logic.rhs1759 +logic.rhs1759: + %t8 = load ptr, ptr %a1 + %t9 = call i1 @finch.parser.at(ptr %t8, { ptr, i64, i64 } { ptr @.str.975, i64 2, i64 0 }) + %t10 = xor i1 %t9, true + br label %logic.rend1761 +logic.rend1761: + br label %logic.end1760 +logic.end1760: + %t11 = phi i1 [ true, %logic.from1758 ], [ %t10, %logic.rend1761 ] + br i1 %t11, label %then1762, label %endif1764 +then1762: + %t12 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t12 +endif1764: + %t13 = load ptr, ptr %a1 + %t14 = call %S.ast.Node @finch.parser.node(ptr %t13, { ptr, i64, i64 } { ptr @.str.976, i64 2, i64 0 }) + store %S.ast.Node %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = call %S.lexer.Token @finch.parser.next(ptr %t16) + store %S.lexer.Token %t17, ptr %a18 + call void @finch.drop.S_lexer_Token(ptr %a18) + %t19 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t21, ptr %a22 + call void @finch.copy.S_ast_Node(ptr %a23, ptr %a22) + %t24 = load %S.ast.Node, ptr %a23 + %t25 = load i64, ptr %t20 + %t26 = add i64 %t25, 1 + call void @finch_arr_reserve(ptr %t19, i64 %t26, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t27 = load ptr, ptr %t19 + %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 %t25 + store %S.ast.Node %t24, ptr %t28 + store i64 %t26, ptr %t20 + %t29 = load ptr, ptr %a1 + %t30 = call i1 @finch.parser.at(ptr %t29, { ptr, i64, i64 } { ptr @.str.977, i64 1, i64 0 }) + br i1 %t30, label %then1765, label %else1766 +then1765: + %t31 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 6 + store i1 true, ptr %t31 + %t32 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i32 0, i32 1 + %t34 = load ptr, ptr %a1 + %t35 = call %S.ast.Node @finch.parser.parseBlock(ptr %t34) + %t36 = load i64, ptr %t33 + %t37 = add i64 %t36, 1 + call void @finch_arr_reserve(ptr %t32, i64 %t37, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t38 = load ptr, ptr %t32 + %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 %t36 + store %S.ast.Node %t35, ptr %t39 + store i64 %t37, ptr %t33 + br label %endif1767 +else1766: + %t40 = getelementptr inbounds %S.ast.Node, ptr %a15, i32 0, i32 9 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load ptr, ptr %a1 + %t43 = call %S.ast.Node @finch.parser.parseExpr(ptr %t42) + %t44 = load i64, ptr %t41 + %t45 = add i64 %t44, 1 + call void @finch_arr_reserve(ptr %t40, i64 %t45, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t46 = load ptr, ptr %t40 + %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 + store %S.ast.Node %t43, ptr %t47 + store i64 %t45, ptr %t41 + br label %endif1767 +endif1767: + %t48 = load %S.ast.Node, ptr %a15 + call void @finch.drop.S_ast_Node(ptr %a4) + ret %S.ast.Node %t48 +} + +define internal %S.ast.Node @finch.parser.parseBinary(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca %S.ast.Node, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.lexer.Token, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca %S.ast.Node, align 16 + %a38 = alloca %S.ast.Node, align 16 + %a55 = alloca %S.ast.Node, align 16 + %a56 = alloca %S.ast.Node, align 16 + %a59 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load i64, ptr %a2 + %t4 = icmp sgt i64 %t3, 5 + br i1 %t4, label %then1768, label %endif1770 +then1768: + %t5 = load ptr, ptr %a1 + %t6 = call %S.ast.Node @finch.parser.parseUnary(ptr %t5) + ret %S.ast.Node %t6 +endif1770: + %t7 = load ptr, ptr %a1 + %t8 = load i64, ptr %a2 + %t9 = add i64 %t8, 1 + %t10 = call %S.ast.Node @finch.parser.parseBinary(ptr %t7, i64 %t9) + store %S.ast.Node %t10, ptr %a11 + br label %while.cond1771 +while.cond1771: + %t12 = load ptr, ptr %a1 + %t13 = call i1 @finch.parser.sameLine(ptr %t12) + br label %logic.from1774 +logic.from1774: + br i1 %t13, label %logic.rhs1775, label %logic.end1776 +logic.rhs1775: + %t14 = load ptr, ptr %a1 + %t15 = call { ptr, i64, i64 } @finch.parser.curKind(ptr %t14) + %t16 = call i64 @finch.parser.binaryLevel({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load i64, ptr %a2 + %t19 = icmp eq i64 %t16, %t18 + br label %logic.rend1777 +logic.rend1777: + br label %logic.end1776 +logic.end1776: + %t20 = phi i1 [ false, %logic.from1774 ], [ %t19, %logic.rend1777 ] + br i1 %t20, label %while.body1772, label %while.end1773 +while.body1772: + %t21 = load ptr, ptr %a1 + %t22 = call %S.ast.Node @finch.parser.node(ptr %t21, { ptr, i64, i64 } { ptr @.str.978, i64 6, i64 0 }) + store %S.ast.Node %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = call %S.lexer.Token @finch.parser.next(ptr %t24) + %t26 = extractvalue %S.lexer.Token %t25, 0 + store { ptr, i64, i64 } %t26, ptr %a27 + call void @finch_str_copy(ptr %a28, ptr %a27) + %t29 = load { ptr, i64, i64 }, ptr %a28 + store %S.lexer.Token %t25, ptr %a30 + call void @finch.drop.S_lexer_Token(ptr %a30) + %t31 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t29, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 9 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 + %t36 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t36, ptr %a37 + call void @finch.copy.S_ast_Node(ptr %a38, ptr %a37) + %t39 = load %S.ast.Node, ptr %a38 + %t40 = load i64, ptr %t35 + %t41 = add i64 %t40, 1 + call void @finch_arr_reserve(ptr %t34, i64 %t41, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t42 = load ptr, ptr %t34 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t40 + store %S.ast.Node %t39, ptr %t43 + store i64 %t41, ptr %t35 + %t44 = getelementptr inbounds %S.ast.Node, ptr %a23, i32 0, i32 9 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 + %t46 = load ptr, ptr %a1 + %t47 = load i64, ptr %a2 + %t48 = add i64 %t47, 1 + %t49 = call %S.ast.Node @finch.parser.parseBinary(ptr %t46, i64 %t48) + %t50 = load i64, ptr %t45 + %t51 = add i64 %t50, 1 + call void @finch_arr_reserve(ptr %t44, i64 %t51, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t52 = load ptr, ptr %t44 + %t53 = getelementptr inbounds %S.ast.Node, ptr %t52, i64 %t50 + store %S.ast.Node %t49, ptr %t53 + store i64 %t51, ptr %t45 + %t54 = load %S.ast.Node, ptr %a23 + store %S.ast.Node %t54, ptr %a55 + call void @finch.copy.S_ast_Node(ptr %a56, ptr %a55) + %t57 = load %S.ast.Node, ptr %a56 + %t58 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t57, ptr %a11 + store %S.ast.Node %t58, ptr %a59 + call void @finch.drop.S_ast_Node(ptr %a59) + call void @finch.drop.S_ast_Node(ptr %a23) + br label %while.cond1771 +while.end1773: + %t60 = load %S.ast.Node, ptr %a11 + ret %S.ast.Node %t60 +} + +define internal %S.ast.Node @finch.parser.parseUnary(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca %S.ast.Node, align 16 + %a9 = alloca %S.lexer.Token, align 16 + %a29 = alloca %S.ast.Node, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca %S.lexer.Token, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call i1 @finch.parser.at(ptr %t2, { ptr, i64, i64 } { ptr @.str.979, i64 3, i64 0 }) + br i1 %t3, label %then1778, label %endif1780 +then1778: + %t4 = load ptr, ptr %a1 + %t5 = call %S.ast.Node @finch.parser.node(ptr %t4, { ptr, i64, i64 } { ptr @.str.980, i64 3, i64 0 }) + store %S.ast.Node %t5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = call %S.lexer.Token @finch.parser.next(ptr %t7) + store %S.lexer.Token %t8, ptr %a9 + call void @finch.drop.S_lexer_Token(ptr %a9) + %t10 = getelementptr inbounds %S.ast.Node, ptr %a6, i32 0, i32 9 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load ptr, ptr %a1 + %t13 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t12) + %t14 = load i64, ptr %t11 + %t15 = add i64 %t14, 1 + call void @finch_arr_reserve(ptr %t10, i64 %t15, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t16 = load ptr, ptr %t10 + %t17 = getelementptr inbounds %S.ast.Node, ptr %t16, i64 %t14 + store %S.ast.Node %t13, ptr %t17 + store i64 %t15, ptr %t11 + %t18 = load %S.ast.Node, ptr %a6 + ret %S.ast.Node %t18 +endif1780: + %t19 = load ptr, ptr %a1 + %t20 = call i1 @finch.parser.at(ptr %t19, { ptr, i64, i64 } { ptr @.str.981, i64 1, i64 0 }) + br label %logic.from1781 +logic.from1781: + br i1 %t20, label %logic.end1783, label %logic.rhs1782 +logic.rhs1782: + %t21 = load ptr, ptr %a1 + %t22 = call i1 @finch.parser.at(ptr %t21, { ptr, i64, i64 } { ptr @.str.982, i64 1, i64 0 }) + br label %logic.rend1784 +logic.rend1784: + br label %logic.end1783 +logic.end1783: + %t23 = phi i1 [ true, %logic.from1781 ], [ %t22, %logic.rend1784 ] + br label %logic.from1785 +logic.from1785: + br i1 %t23, label %logic.end1787, label %logic.rhs1786 +logic.rhs1786: + %t24 = load ptr, ptr %a1 + %t25 = call i1 @finch.parser.at(ptr %t24, { ptr, i64, i64 } { ptr @.str.983, i64 1, i64 0 }) + br label %logic.rend1788 +logic.rend1788: + br label %logic.end1787 +logic.end1787: + %t26 = phi i1 [ true, %logic.from1785 ], [ %t25, %logic.rend1788 ] + br i1 %t26, label %then1789, label %endif1791 +then1789: + %t27 = load ptr, ptr %a1 + %t28 = call %S.ast.Node @finch.parser.node(ptr %t27, { ptr, i64, i64 } { ptr @.str.984, i64 5, i64 0 }) + store %S.ast.Node %t28, ptr %a29 + %t30 = load ptr, ptr %a1 + %t31 = call %S.lexer.Token @finch.parser.next(ptr %t30) + %t32 = extractvalue %S.lexer.Token %t31, 0 + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_copy(ptr %a34, ptr %a33) + %t35 = load { ptr, i64, i64 }, ptr %a34 + store %S.lexer.Token %t31, ptr %a36 + call void @finch.drop.S_lexer_Token(ptr %a36) + %t37 = getelementptr inbounds %S.ast.Node, ptr %a29, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t35, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = getelementptr inbounds %S.ast.Node, ptr %a29, i32 0, i32 9 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load ptr, ptr %a1 + %t43 = call %S.ast.Node @finch.parser.parseUnary(ptr %t42) + %t44 = load i64, ptr %t41 + %t45 = add i64 %t44, 1 + call void @finch_arr_reserve(ptr %t40, i64 %t45, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t46 = load ptr, ptr %t40 + %t47 = getelementptr inbounds %S.ast.Node, ptr %t46, i64 %t44 + store %S.ast.Node %t43, ptr %t47 + store i64 %t45, ptr %t41 + %t48 = load %S.ast.Node, ptr %a29 + ret %S.ast.Node %t48 +endif1791: + %t49 = load ptr, ptr %a1 + %t50 = call %S.ast.Node @finch.parser.parsePostfix(ptr %t49) + ret %S.ast.Node %t50 +} + +define internal void @finch.parser.parseArgs(ptr %p0, ptr %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca ptr, align 16 + %a5 = alloca %S.lexer.Token, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.lexer.Token, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca %S.lexer.Token, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca %S.lexer.Token, align 16 + store ptr %p0, ptr %a1 + store ptr %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call %S.lexer.Token @finch.parser.expect(ptr %t3, { ptr, i64, i64 } { ptr @.str.985, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.986, i64 3, i64 0 }) + store %S.lexer.Token %t4, ptr %a5 + call void @finch.drop.S_lexer_Token(ptr %a5) + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic1792, label %ok1793 +panic1792: + call void @finch_panic(ptr @.str.987, i64 686, ptr @.str.988) + unreachable +ok1793: + %t8 = getelementptr inbounds %S.parser.Parser, ptr %t6, i32 0, i32 2 + %t9 = load i64, ptr %t8 + %t10 = add i64 %t9, 1 + store i64 %t10, ptr %t8 + %t11 = load ptr, ptr %a1 + %t12 = call i1 @finch.parser.at(ptr %t11, { ptr, i64, i64 } { ptr @.str.989, i64 1, i64 0 }) + %t13 = xor i1 %t12, true + br i1 %t13, label %then1794, label %endif1796 +then1794: + br label %while.cond1797 +while.cond1797: + %t14 = load ptr, ptr %a1 + %t15 = call i1 @finch.parser.at(ptr %t14, { ptr, i64, i64 } { ptr @.str.990, i64 1, i64 0 }) + %t16 = xor i1 %t15, true + br i1 %t16, label %while.body1798, label %while.end1799 +while.body1798: + store { ptr, i64, i64 } { ptr @.str.991, i64 0, i64 0 }, ptr %a17 + %t18 = load ptr, ptr %a1 + %t19 = call i1 @finch.parser.at(ptr %t18, { ptr, i64, i64 } { ptr @.str.992, i64 5, i64 0 }) + br label %logic.from1800 +logic.from1800: + br i1 %t19, label %logic.rhs1801, label %logic.end1802 +logic.rhs1801: + %t20 = load ptr, ptr %a1 + %t21 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t20, i64 1) + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.993, i64 1, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + store { ptr, i64, i64 } %t21, ptr %a26 + call void @finch_str_drop(ptr %a26) + br label %logic.rend1803 +logic.rend1803: + br label %logic.end1802 +logic.end1802: + %t27 = phi i1 [ false, %logic.from1800 ], [ %t25, %logic.rend1803 ] + br i1 %t27, label %then1804, label %endif1806 +then1804: + %t28 = load ptr, ptr %a1 + %t29 = call %S.lexer.Token @finch.parser.next(ptr %t28) + %t30 = extractvalue %S.lexer.Token %t29, 1 + store { ptr, i64, i64 } %t30, ptr %a31 + call void @finch_str_copy(ptr %a32, ptr %a31) + %t33 = load { ptr, i64, i64 }, ptr %a32 + store %S.lexer.Token %t29, ptr %a34 + call void @finch.drop.S_lexer_Token(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t33, ptr %a17 + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load ptr, ptr %a1 + %t38 = call %S.lexer.Token @finch.parser.next(ptr %t37) + store %S.lexer.Token %t38, ptr %a39 + call void @finch.drop.S_lexer_Token(ptr %a39) + br label %endif1806 +endif1806: + %t40 = load ptr, ptr %a2 + %t41 = icmp eq ptr %t40, null + br i1 %t41, label %panic1807, label %ok1808 +panic1807: + call void @finch_panic(ptr @.str.994, i64 694, ptr @.str.995) + unreachable +ok1808: + %t42 = getelementptr inbounds %S.ast.Node, ptr %t40, i32 0, i32 10 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 + %t44 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_copy(ptr %a46, ptr %a45) + %t47 = load { ptr, i64, i64 }, ptr %a46 + %t48 = load i64, ptr %t43 + %t49 = add i64 %t48, 1 + call void @finch_arr_reserve(ptr %t42, i64 %t49, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t50 = load ptr, ptr %t42 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 + store { ptr, i64, i64 } %t47, ptr %t51 + store i64 %t49, ptr %t43 + %t52 = load ptr, ptr %a2 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic1809, label %ok1810 +panic1809: + call void @finch_panic(ptr @.str.996, i64 695, ptr @.str.997) + unreachable +ok1810: + %t54 = getelementptr inbounds %S.ast.Node, ptr %t52, i32 0, i32 9 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 + %t56 = load ptr, ptr %a1 + %t57 = call %S.ast.Node @finch.parser.parseExpr(ptr %t56) + %t58 = load i64, ptr %t55 + %t59 = add i64 %t58, 1 + call void @finch_arr_reserve(ptr %t54, i64 %t59, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t60 = load ptr, ptr %t54 + %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i64 %t58 + store %S.ast.Node %t57, ptr %t61 + store i64 %t59, ptr %t55 + %t62 = load ptr, ptr %a1 + %t63 = call i1 @finch.parser.accept(ptr %t62, { ptr, i64, i64 } { ptr @.str.998, i64 1, i64 0 }) + %t64 = xor i1 %t63, true + br i1 %t64, label %then1811, label %endif1813 +then1811: + call void @finch_str_drop(ptr %a17) + br label %while.end1799 +endif1813: + call void @finch_str_drop(ptr %a17) + br label %while.cond1797 +while.end1799: + br label %endif1796 +endif1796: + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic1814, label %ok1815 +panic1814: + call void @finch_panic(ptr @.str.999, i64 701, ptr @.str.1000) + unreachable +ok1815: + %t67 = getelementptr inbounds %S.parser.Parser, ptr %t65, i32 0, i32 2 + %t68 = load i64, ptr %t67 + %t69 = sub i64 %t68, 1 + store i64 %t69, ptr %t67 + %t70 = load ptr, ptr %a1 + %t71 = call %S.lexer.Token @finch.parser.expect(ptr %t70, { ptr, i64, i64 } { ptr @.str.1001, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1002, i64 3, i64 0 }) + store %S.lexer.Token %t71, ptr %a72 + call void @finch.drop.S_lexer_Token(ptr %a72) + ret void +} + +define internal %S.ast.Node @finch.parser.parsePostfix(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a14 = alloca %S.lexer.Token, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca %S.lexer.Token, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca %S.ast.Node, align 16 + %a29 = alloca %S.ast.Node, align 16 + %a40 = alloca %S.lexer.Token, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca %S.ast.Node, align 16 + %a49 = alloca %S.ast.Node, align 16 + %a52 = alloca %S.ast.Node, align 16 + %a57 = alloca %S.ast.Node, align 16 + %a60 = alloca %S.lexer.Token, align 16 + %a69 = alloca %S.ast.Node, align 16 + %a70 = alloca %S.ast.Node, align 16 + %a91 = alloca %S.lexer.Token, align 16 + %a93 = alloca %S.ast.Node, align 16 + %a94 = alloca %S.ast.Node, align 16 + %a97 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.ast.Node @finch.parser.parsePrimary(ptr %t2) + store %S.ast.Node %t3, ptr %a4 + br label %while.cond1816 +while.cond1816: + %t5 = load ptr, ptr %a1 + %t6 = call i1 @finch.parser.sameLine(ptr %t5) + br i1 %t6, label %while.body1817, label %while.end1818 +while.body1817: + %t7 = load ptr, ptr %a1 + %t8 = call i1 @finch.parser.at(ptr %t7, { ptr, i64, i64 } { ptr @.str.1003, i64 1, i64 0 }) + br i1 %t8, label %then1819, label %else1820 +then1819: + %t9 = load ptr, ptr %a1 + %t10 = call %S.ast.Node @finch.parser.node(ptr %t9, { ptr, i64, i64 } { ptr @.str.1004, i64 6, i64 0 }) + store %S.ast.Node %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = call %S.lexer.Token @finch.parser.next(ptr %t12) + store %S.lexer.Token %t13, ptr %a14 + call void @finch.drop.S_lexer_Token(ptr %a14) + %t15 = load ptr, ptr %a1 + %t16 = call %S.lexer.Token @finch.parser.expect(ptr %t15, { ptr, i64, i64 } { ptr @.str.1005, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.1006, i64 16, i64 0 }) + %t17 = extractvalue %S.lexer.Token %t16, 1 + store { ptr, i64, i64 } %t17, ptr %a18 + call void @finch_str_copy(ptr %a19, ptr %a18) + %t20 = load { ptr, i64, i64 }, ptr %a19 + store %S.lexer.Token %t16, ptr %a21 + call void @finch.drop.S_lexer_Token(ptr %a21) + %t22 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 1 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t20, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 9 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 + %t27 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t27, ptr %a28 + call void @finch.copy.S_ast_Node(ptr %a29, ptr %a28) + %t30 = load %S.ast.Node, ptr %a29 + %t31 = load i64, ptr %t26 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %t25, i64 %t32, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %t25 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t31 + store %S.ast.Node %t30, ptr %t34 + store i64 %t32, ptr %t26 + %t35 = load ptr, ptr %a1 + %t36 = call i1 @finch.parser.at(ptr %t35, { ptr, i64, i64 } { ptr @.str.1007, i64 1, i64 0 }) + br label %logic.from1822 +logic.from1822: + br i1 %t36, label %logic.rhs1823, label %logic.end1824 +logic.rhs1823: + %t37 = load ptr, ptr %a1 + %t38 = call %S.lexer.Token @finch.parser.cur(ptr %t37) + %t39 = extractvalue %S.lexer.Token %t38, 4 + store %S.lexer.Token %t38, ptr %a40 + call void @finch.drop.S_lexer_Token(ptr %a40) + %t41 = xor i1 %t39, true + br label %logic.rend1825 +logic.rend1825: + br label %logic.end1824 +logic.end1824: + %t42 = phi i1 [ false, %logic.from1822 ], [ %t41, %logic.rend1825 ] + br i1 %t42, label %then1826, label %endif1828 +then1826: + %t43 = getelementptr inbounds %S.ast.Node, ptr %a11, i32 0, i32 0 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } { ptr @.str.1008, i64 6, i64 0 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load ptr, ptr %a1 + call void @finch.parser.parseArgs(ptr %t46, ptr %a11) + br label %endif1828 +endif1828: + %t47 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t47, ptr %a48 + call void @finch.copy.S_ast_Node(ptr %a49, ptr %a48) + %t50 = load %S.ast.Node, ptr %a49 + %t51 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t50, ptr %a4 + store %S.ast.Node %t51, ptr %a52 + call void @finch.drop.S_ast_Node(ptr %a52) + call void @finch.drop.S_ast_Node(ptr %a11) + br label %endif1821 +else1820: + %t53 = load ptr, ptr %a1 + %t54 = call i1 @finch.parser.at(ptr %t53, { ptr, i64, i64 } { ptr @.str.1009, i64 1, i64 0 }) + br i1 %t54, label %then1829, label %else1830 +then1829: + %t55 = load ptr, ptr %a1 + %t56 = call %S.ast.Node @finch.parser.node(ptr %t55, { ptr, i64, i64 } { ptr @.str.1010, i64 5, i64 0 }) + store %S.ast.Node %t56, ptr %a57 + %t58 = load ptr, ptr %a1 + %t59 = call %S.lexer.Token @finch.parser.next(ptr %t58) + store %S.lexer.Token %t59, ptr %a60 + call void @finch.drop.S_lexer_Token(ptr %a60) + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic1832, label %ok1833 +panic1832: + call void @finch_panic(ptr @.str.1011, i64 721, ptr @.str.1012) + unreachable +ok1833: + %t63 = getelementptr inbounds %S.parser.Parser, ptr %t61, i32 0, i32 2 + %t64 = load i64, ptr %t63 + %t65 = add i64 %t64, 1 + store i64 %t65, ptr %t63 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a57, i32 0, i32 9 + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i32 0, i32 1 + %t68 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t68, ptr %a69 + call void @finch.copy.S_ast_Node(ptr %a70, ptr %a69) + %t71 = load %S.ast.Node, ptr %a70 + %t72 = load i64, ptr %t67 + %t73 = add i64 %t72, 1 + call void @finch_arr_reserve(ptr %t66, i64 %t73, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t74 = load ptr, ptr %t66 + %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 %t72 + store %S.ast.Node %t71, ptr %t75 + store i64 %t73, ptr %t67 + %t76 = getelementptr inbounds %S.ast.Node, ptr %a57, i32 0, i32 9 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = load ptr, ptr %a1 + %t79 = call %S.ast.Node @finch.parser.parseExpr(ptr %t78) + %t80 = load i64, ptr %t77 + %t81 = add i64 %t80, 1 + call void @finch_arr_reserve(ptr %t76, i64 %t81, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t82 = load ptr, ptr %t76 + %t83 = getelementptr inbounds %S.ast.Node, ptr %t82, i64 %t80 + store %S.ast.Node %t79, ptr %t83 + store i64 %t81, ptr %t77 + %t84 = load ptr, ptr %a1 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic1834, label %ok1835 +panic1834: + call void @finch_panic(ptr @.str.1013, i64 724, ptr @.str.1014) + unreachable +ok1835: + %t86 = getelementptr inbounds %S.parser.Parser, ptr %t84, i32 0, i32 2 + %t87 = load i64, ptr %t86 + %t88 = sub i64 %t87, 1 + store i64 %t88, ptr %t86 + %t89 = load ptr, ptr %a1 + %t90 = call %S.lexer.Token @finch.parser.expect(ptr %t89, { ptr, i64, i64 } { ptr @.str.1015, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1016, i64 3, i64 0 }) + store %S.lexer.Token %t90, ptr %a91 + call void @finch.drop.S_lexer_Token(ptr %a91) + %t92 = load %S.ast.Node, ptr %a57 + store %S.ast.Node %t92, ptr %a93 + call void @finch.copy.S_ast_Node(ptr %a94, ptr %a93) + %t95 = load %S.ast.Node, ptr %a94 + %t96 = load %S.ast.Node, ptr %a4 + store %S.ast.Node %t95, ptr %a4 + store %S.ast.Node %t96, ptr %a97 + call void @finch.drop.S_ast_Node(ptr %a97) + call void @finch.drop.S_ast_Node(ptr %a57) + br label %endif1831 +else1830: + %t98 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t98 +endif1831: + br label %endif1821 +endif1821: + br label %while.cond1816 +while.end1818: + %t99 = load %S.ast.Node, ptr %a4 + ret %S.ast.Node %t99 +} + +define internal %S.ast.Node @finch.parser.parsePrimary(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a4 = alloca %S.lexer.Token, align 16 + %a7 = alloca %S.ast.Node, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca %S.lexer.Token, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca %S.lexer.Token, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca %S.lexer.Token, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.lexer.Token, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca %S.lexer.Token, align 16 + %a122 = alloca %S.ast.Node, align 16 + %a130 = alloca %S.lexer.Token, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca %S.lexer.Token, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca %S.lexer.Token, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca %S.lexer.Token, align 16 + %a219 = alloca %S.lexer.Token, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca %S.lexer.Token, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca %S.lexer.Token, align 16 + %a268 = alloca %S.ast.Type, align 16 + %a283 = alloca %S.lexer.Token, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca %S.lexer.Token, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call %S.lexer.Token @finch.parser.cur(ptr %t2) + store %S.lexer.Token %t3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.ast.Node @finch.parser.node(ptr %t5, { ptr, i64, i64 } { ptr @.str.1017, i64 0, i64 0 }) + store %S.ast.Node %t6, ptr %a7 + %t8 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.1018, i64 3, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.from1836 +logic.from1836: + br i1 %t18, label %logic.end1838, label %logic.rhs1837 +logic.rhs1837: + %t19 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1019, i64 5, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend1839 +logic.rend1839: + br label %logic.end1838 +logic.end1838: + %t24 = phi i1 [ true, %logic.from1836 ], [ %t23, %logic.rend1839 ] + br label %logic.from1840 +logic.from1840: + br i1 %t24, label %logic.end1842, label %logic.rhs1841 +logic.rhs1841: + %t25 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.1020, i64 4, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend1843 +logic.rend1843: + br label %logic.end1842 +logic.end1842: + %t30 = phi i1 [ true, %logic.from1840 ], [ %t29, %logic.rend1843 ] + br i1 %t30, label %then1844, label %endif1846 +then1844: + %t31 = load ptr, ptr %a1 + %t32 = call %S.lexer.Token @finch.parser.next(ptr %t31) + store %S.lexer.Token %t32, ptr %a33 + call void @finch.drop.S_lexer_Token(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a13 + %t35 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + store { ptr, i64, i64 } %t34, ptr %a36 + call void @finch_str_copy(ptr %a37, ptr %a36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + %t39 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t38, ptr %t35 + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 + store { ptr, i64, i64 } %t42, ptr %a44 + call void @finch_str_copy(ptr %a45, ptr %a44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + %t47 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t46, ptr %t43 + store { ptr, i64, i64 } %t47, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t49 +endif1846: + %t50 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.1021, i64 6, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then1847, label %endif1849 +then1847: + %t55 = load ptr, ptr %a1 + %t56 = call %S.lexer.Token @finch.parser.next(ptr %t55) + store %S.lexer.Token %t56, ptr %a57 + call void @finch.drop.S_lexer_Token(ptr %a57) + %t58 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } { ptr @.str.1022, i64 3, i64 0 }, ptr %t58 + store { ptr, i64, i64 } %t59, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 + store { ptr, i64, i64 } %t62, ptr %a64 + call void @finch_str_copy(ptr %a65, ptr %a64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + %t67 = load { ptr, i64, i64 }, ptr %t63 + store { ptr, i64, i64 } %t66, ptr %t63 + store { ptr, i64, i64 } %t67, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t69 +endif1849: + %t70 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t70, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.1023, i64 4, i64 0 }, ptr %a72 + %t73 = call i32 @finch_str_eq(ptr %a71, ptr %a72) + %t74 = icmp ne i32 %t73, 0 + br label %logic.from1850 +logic.from1850: + br i1 %t74, label %logic.end1852, label %logic.rhs1851 +logic.rhs1851: + %t75 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t75, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.1024, i64 5, i64 0 }, ptr %a77 + %t78 = call i32 @finch_str_eq(ptr %a76, ptr %a77) + %t79 = icmp ne i32 %t78, 0 + br label %logic.rend1853 +logic.rend1853: + br label %logic.end1852 +logic.end1852: + %t80 = phi i1 [ true, %logic.from1850 ], [ %t79, %logic.rend1853 ] + br i1 %t80, label %then1854, label %endif1856 +then1854: + %t81 = load ptr, ptr %a1 + %t82 = call %S.lexer.Token @finch.parser.next(ptr %t81) + store %S.lexer.Token %t82, ptr %a83 + call void @finch.drop.S_lexer_Token(ptr %a83) + %t84 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } { ptr @.str.1025, i64 4, i64 0 }, ptr %t84 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a13 + %t88 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 4 + store { ptr, i64, i64 } %t87, ptr %a89 + call void @finch_str_copy(ptr %a90, ptr %a89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t91, ptr %t88 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t94 +endif1856: + %t95 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.1026, i64 4, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then1857, label %endif1859 +then1857: + %t100 = load ptr, ptr %a1 + %t101 = call %S.lexer.Token @finch.parser.next(ptr %t100) + store %S.lexer.Token %t101, ptr %a102 + call void @finch.drop.S_lexer_Token(ptr %a102) + %t103 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } { ptr @.str.1027, i64 4, i64 0 }, ptr %t103 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t106 +endif1859: + %t107 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t107, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.1028, i64 1, i64 0 }, ptr %a109 + %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) + %t111 = icmp ne i32 %t110, 0 + br i1 %t111, label %then1860, label %endif1862 +then1860: + %t112 = load ptr, ptr %a1 + %t113 = call %S.lexer.Token @finch.parser.next(ptr %t112) + store %S.lexer.Token %t113, ptr %a114 + call void @finch.drop.S_lexer_Token(ptr %a114) + %t115 = load ptr, ptr %a1 + %t116 = icmp eq ptr %t115, null + br i1 %t116, label %panic1863, label %ok1864 +panic1863: + call void @finch_panic(ptr @.str.1029, i64 763, ptr @.str.1030) + unreachable +ok1864: + %t117 = getelementptr inbounds %S.parser.Parser, ptr %t115, i32 0, i32 2 + %t118 = load i64, ptr %t117 + %t119 = add i64 %t118, 1 + store i64 %t119, ptr %t117 + %t120 = load ptr, ptr %a1 + %t121 = call %S.ast.Node @finch.parser.parseExpr(ptr %t120) + store %S.ast.Node %t121, ptr %a122 + %t123 = load ptr, ptr %a1 + %t124 = icmp eq ptr %t123, null + br i1 %t124, label %panic1865, label %ok1866 +panic1865: + call void @finch_panic(ptr @.str.1031, i64 765, ptr @.str.1032) + unreachable +ok1866: + %t125 = getelementptr inbounds %S.parser.Parser, ptr %t123, i32 0, i32 2 + %t126 = load i64, ptr %t125 + %t127 = sub i64 %t126, 1 + store i64 %t127, ptr %t125 + %t128 = load ptr, ptr %a1 + %t129 = call %S.lexer.Token @finch.parser.expect(ptr %t128, { ptr, i64, i64 } { ptr @.str.1033, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1034, i64 3, i64 0 }) + store %S.lexer.Token %t129, ptr %a130 + call void @finch.drop.S_lexer_Token(ptr %a130) + %t131 = load %S.ast.Node, ptr %a122 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_ast_Node(ptr %a7) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t131 +endif1862: + %t132 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t132, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.1035, i64 5, i64 0 }, ptr %a134 + %t135 = call i32 @finch_str_eq(ptr %a133, ptr %a134) + %t136 = icmp ne i32 %t135, 0 + br i1 %t136, label %then1867, label %endif1869 +then1867: + %t137 = load ptr, ptr %a1 + %t138 = call %S.ast.Node @finch.parser.parseMatch(ptr %t137, i1 true) + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_ast_Node(ptr %a7) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t138 +endif1869: + %t139 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t139, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.1036, i64 1, i64 0 }, ptr %a141 + %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) + %t143 = icmp ne i32 %t142, 0 + br i1 %t143, label %then1870, label %endif1872 +then1870: + %t144 = load ptr, ptr %a1 + %t145 = call %S.lexer.Token @finch.parser.next(ptr %t144) + store %S.lexer.Token %t145, ptr %a146 + call void @finch.drop.S_lexer_Token(ptr %a146) + %t147 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t148 = load { ptr, i64, i64 }, ptr %t147 + store { ptr, i64, i64 } { ptr @.str.1037, i64 5, i64 0 }, ptr %t147 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load ptr, ptr %a1 + %t151 = icmp eq ptr %t150, null + br i1 %t151, label %panic1873, label %ok1874 +panic1873: + call void @finch_panic(ptr @.str.1038, i64 775, ptr @.str.1039) + unreachable +ok1874: + %t152 = getelementptr inbounds %S.parser.Parser, ptr %t150, i32 0, i32 2 + %t153 = load i64, ptr %t152 + %t154 = add i64 %t153, 1 + store i64 %t154, ptr %t152 + %t155 = load ptr, ptr %a1 + %t156 = call i1 @finch.parser.at(ptr %t155, { ptr, i64, i64 } { ptr @.str.1040, i64 1, i64 0 }) + br label %logic.from1875 +logic.from1875: + br i1 %t156, label %logic.rhs1876, label %logic.end1877 +logic.rhs1876: + %t157 = load ptr, ptr %a1 + %t158 = call { ptr, i64, i64 } @finch.parser.peekKind(ptr %t157, i64 1) + store { ptr, i64, i64 } %t158, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.1041, i64 1, i64 0 }, ptr %a160 + %t161 = call i32 @finch_str_eq(ptr %a159, ptr %a160) + %t162 = icmp ne i32 %t161, 0 + store { ptr, i64, i64 } %t158, ptr %a163 + call void @finch_str_drop(ptr %a163) + br label %logic.rend1878 +logic.rend1878: + br label %logic.end1877 +logic.end1877: + %t164 = phi i1 [ false, %logic.from1875 ], [ %t162, %logic.rend1878 ] + br i1 %t164, label %then1879, label %endif1881 +then1879: + %t165 = load ptr, ptr %a1 + %t166 = call %S.lexer.Token @finch.parser.next(ptr %t165) + store %S.lexer.Token %t166, ptr %a167 + call void @finch.drop.S_lexer_Token(ptr %a167) + %t168 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t169 = load { ptr, i64, i64 }, ptr %t168 + store { ptr, i64, i64 } { ptr @.str.1042, i64 3, i64 0 }, ptr %t168 + store { ptr, i64, i64 } %t169, ptr %a170 + call void @finch_str_drop(ptr %a170) + br label %endif1881 +endif1881: + br label %while.cond1882 +while.cond1882: + %t171 = load ptr, ptr %a1 + %t172 = call i1 @finch.parser.at(ptr %t171, { ptr, i64, i64 } { ptr @.str.1043, i64 1, i64 0 }) + %t173 = xor i1 %t172, true + br i1 %t173, label %while.body1883, label %while.end1884 +while.body1883: + %t174 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 + %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %t174, i32 0, i32 1 + %t176 = load ptr, ptr %a1 + %t177 = call %S.ast.Node @finch.parser.parseExpr(ptr %t176) + %t178 = load i64, ptr %t175 + %t179 = add i64 %t178, 1 + call void @finch_arr_reserve(ptr %t174, i64 %t179, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t180 = load ptr, ptr %t174 + %t181 = getelementptr inbounds %S.ast.Node, ptr %t180, i64 %t178 + store %S.ast.Node %t177, ptr %t181 + store i64 %t179, ptr %t175 + %t182 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 + %t184 = load i64, ptr %t183 + %t185 = icmp eq i64 %t184, 1 + br label %logic.from1885 +logic.from1885: + br i1 %t185, label %logic.rhs1886, label %logic.end1887 +logic.rhs1886: + %t186 = load ptr, ptr %a1 + %t187 = call i1 @finch.parser.at(ptr %t186, { ptr, i64, i64 } { ptr @.str.1044, i64 1, i64 0 }) + br label %logic.rend1888 +logic.rend1888: + br label %logic.end1887 +logic.end1887: + %t188 = phi i1 [ false, %logic.from1885 ], [ %t187, %logic.rend1888 ] + br i1 %t188, label %then1889, label %endif1891 +then1889: + %t189 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t190 = load { ptr, i64, i64 }, ptr %t189 + store { ptr, i64, i64 } { ptr @.str.1045, i64 3, i64 0 }, ptr %t189 + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_drop(ptr %a191) + br label %endif1891 +endif1891: + %t192 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + store { ptr, i64, i64 } %t193, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.1046, i64 3, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br i1 %t197, label %then1892, label %endif1894 +then1892: + %t198 = load ptr, ptr %a1 + %t199 = call %S.lexer.Token @finch.parser.expect(ptr %t198, { ptr, i64, i64 } { ptr @.str.1047, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1048, i64 41, i64 0 }) + store %S.lexer.Token %t199, ptr %a200 + call void @finch.drop.S_lexer_Token(ptr %a200) + %t201 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 9 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 + %t203 = load ptr, ptr %a1 + %t204 = call %S.ast.Node @finch.parser.parseExpr(ptr %t203) + %t205 = load i64, ptr %t202 + %t206 = add i64 %t205, 1 + call void @finch_arr_reserve(ptr %t201, i64 %t206, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t207 = load ptr, ptr %t201 + %t208 = getelementptr inbounds %S.ast.Node, ptr %t207, i64 %t205 + store %S.ast.Node %t204, ptr %t208 + store i64 %t206, ptr %t202 + br label %endif1894 +endif1894: + %t209 = load ptr, ptr %a1 + %t210 = call i1 @finch.parser.accept(ptr %t209, { ptr, i64, i64 } { ptr @.str.1049, i64 1, i64 0 }) + %t211 = xor i1 %t210, true + br i1 %t211, label %then1895, label %endif1897 +then1895: + br label %while.end1884 +endif1897: + br label %while.cond1882 +while.end1884: + %t212 = load ptr, ptr %a1 + %t213 = icmp eq ptr %t212, null + br i1 %t213, label %panic1898, label %ok1899 +panic1898: + call void @finch_panic(ptr @.str.1050, i64 793, ptr @.str.1051) + unreachable +ok1899: + %t214 = getelementptr inbounds %S.parser.Parser, ptr %t212, i32 0, i32 2 + %t215 = load i64, ptr %t214 + %t216 = sub i64 %t215, 1 + store i64 %t216, ptr %t214 + %t217 = load ptr, ptr %a1 + %t218 = call %S.lexer.Token @finch.parser.expect(ptr %t217, { ptr, i64, i64 } { ptr @.str.1052, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1053, i64 3, i64 0 }) + store %S.lexer.Token %t218, ptr %a219 + call void @finch.drop.S_lexer_Token(ptr %a219) + %t220 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t220 +endif1872: + %t221 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t221, ptr %a222 + store { ptr, i64, i64 } { ptr @.str.1054, i64 5, i64 0 }, ptr %a223 + %t224 = call i32 @finch_str_eq(ptr %a222, ptr %a223) + %t225 = icmp ne i32 %t224, 0 + br i1 %t225, label %then1900, label %endif1902 +then1900: + %t226 = load ptr, ptr %a1 + %t227 = call %S.lexer.Token @finch.parser.next(ptr %t226) + store %S.lexer.Token %t227, ptr %a228 + call void @finch.drop.S_lexer_Token(ptr %a228) + %t229 = getelementptr inbounds %S.lexer.Token, ptr %a4, i32 0, i32 1 + %t230 = load { ptr, i64, i64 }, ptr %t229 + %t231 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 1 + store { ptr, i64, i64 } %t230, ptr %a232 + call void @finch_str_copy(ptr %a233, ptr %a232) + %t234 = load { ptr, i64, i64 }, ptr %a233 + %t235 = load { ptr, i64, i64 }, ptr %t231 + store { ptr, i64, i64 } %t234, ptr %t231 + store { ptr, i64, i64 } %t235, ptr %a236 + call void @finch_str_drop(ptr %a236) + %t237 = load ptr, ptr %a1 + %t238 = call i1 @finch.parser.at(ptr %t237, { ptr, i64, i64 } { ptr @.str.1055, i64 1, i64 0 }) + br label %logic.from1903 +logic.from1903: + br i1 %t238, label %logic.rhs1904, label %logic.end1905 +logic.rhs1904: + %t239 = load ptr, ptr %a1 + %t240 = icmp eq ptr %t239, null + br i1 %t240, label %panic1906, label %ok1907 +panic1906: + call void @finch_panic(ptr @.str.1056, i64 800, ptr @.str.1057) + unreachable +ok1907: + %t241 = getelementptr inbounds %S.parser.Parser, ptr %t239, i32 0, i32 0 + %t242 = load ptr, ptr %a1 + %t243 = icmp eq ptr %t242, null + br i1 %t243, label %panic1908, label %ok1909 +panic1908: + call void @finch_panic(ptr @.str.1058, i64 800, ptr @.str.1059) + unreachable +ok1909: + %t244 = getelementptr inbounds %S.parser.Parser, ptr %t242, i32 0, i32 1 + %t245 = load i64, ptr %t244 + %t246 = sub i64 %t245, 1 + %t247 = load { ptr, i64, i64 }, ptr %t241 + %t248 = extractvalue { ptr, i64, i64 } %t247, 1 + %t249 = icmp uge i64 %t246, %t248 + br i1 %t249, label %range1910, label %inrange1911 +range1910: + call void @finch_panic_index(ptr @.str.1060, i64 800, i64 %t246, i64 %t248) + unreachable +inrange1911: + %t250 = extractvalue { ptr, i64, i64 } %t247, 0 + %t251 = getelementptr inbounds %S.lexer.Token, ptr %t250, i64 %t246 + %t252 = getelementptr inbounds %S.lexer.Token, ptr %t251, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.1061, i64 5, i64 0 }, ptr %a255 + %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) + %t257 = icmp ne i32 %t256, 0 + br label %logic.rend1912 +logic.rend1912: + br label %logic.end1905 +logic.end1905: + %t258 = phi i1 [ false, %logic.from1903 ], [ %t257, %logic.rend1912 ] + br label %logic.from1913 +logic.from1913: + br i1 %t258, label %logic.rhs1914, label %logic.end1915 +logic.rhs1914: + %t259 = load ptr, ptr %a1 + %t260 = call i1 @finch.parser.genericCallAheadFrom(ptr %t259) + br label %logic.rend1916 +logic.rend1916: + br label %logic.end1915 +logic.end1915: + %t261 = phi i1 [ false, %logic.from1913 ], [ %t260, %logic.rend1916 ] + br i1 %t261, label %then1917, label %endif1919 +then1917: + %t262 = load ptr, ptr %a1 + %t263 = call %S.lexer.Token @finch.parser.next(ptr %t262) + store %S.lexer.Token %t263, ptr %a264 + call void @finch.drop.S_lexer_Token(ptr %a264) + %t265 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1062, i64 5, i64 0 }, 0 + %t266 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 + %t267 = load %S.ast.Type, ptr %t266 + store %S.ast.Type %t265, ptr %t266 + store %S.ast.Type %t267, ptr %a268 + call void @finch.drop.S_ast_Type(ptr %a268) + br label %while.cond1920 +while.cond1920: + br label %while.body1921 +while.body1921: + %t269 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 5 + %t270 = getelementptr inbounds %S.ast.Type, ptr %t269, i32 0, i32 1 + %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i32 0, i32 1 + %t272 = load ptr, ptr %a1 + %t273 = call %S.ast.Type @finch.parser.parseType(ptr %t272) + %t274 = load i64, ptr %t271 + %t275 = add i64 %t274, 1 + call void @finch_arr_reserve(ptr %t270, i64 %t275, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t276 = load ptr, ptr %t270 + %t277 = getelementptr inbounds %S.ast.Type, ptr %t276, i64 %t274 + store %S.ast.Type %t273, ptr %t277 + store i64 %t275, ptr %t271 + %t278 = load ptr, ptr %a1 + %t279 = call i1 @finch.parser.accept(ptr %t278, { ptr, i64, i64 } { ptr @.str.1063, i64 1, i64 0 }) + %t280 = xor i1 %t279, true + br i1 %t280, label %then1923, label %endif1925 +then1923: + br label %while.end1922 +endif1925: + br label %while.cond1920 +while.end1922: + %t281 = load ptr, ptr %a1 + %t282 = call %S.lexer.Token @finch.parser.expect(ptr %t281, { ptr, i64, i64 } { ptr @.str.1064, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.1065, i64 28, i64 0 }) + store %S.lexer.Token %t282, ptr %a283 + call void @finch.drop.S_lexer_Token(ptr %a283) + %t284 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } { ptr @.str.1066, i64 4, i64 0 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + %t287 = load ptr, ptr %a1 + call void @finch.parser.parseArgs(ptr %t287, ptr %a7) + %t288 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t288 +endif1919: + %t289 = load ptr, ptr %a1 + %t290 = call i1 @finch.parser.at(ptr %t289, { ptr, i64, i64 } { ptr @.str.1067, i64 1, i64 0 }) + br label %logic.from1926 +logic.from1926: + br i1 %t290, label %logic.rhs1927, label %logic.end1928 +logic.rhs1927: + %t291 = load ptr, ptr %a1 + %t292 = call %S.lexer.Token @finch.parser.cur(ptr %t291) + %t293 = extractvalue %S.lexer.Token %t292, 4 + store %S.lexer.Token %t292, ptr %a294 + call void @finch.drop.S_lexer_Token(ptr %a294) + %t295 = xor i1 %t293, true + br label %logic.rend1929 +logic.rend1929: + br label %logic.end1928 +logic.end1928: + %t296 = phi i1 [ false, %logic.from1926 ], [ %t295, %logic.rend1929 ] + br i1 %t296, label %then1930, label %endif1932 +then1930: + %t297 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t298 = load { ptr, i64, i64 }, ptr %t297 + store { ptr, i64, i64 } { ptr @.str.1068, i64 4, i64 0 }, ptr %t297 + store { ptr, i64, i64 } %t298, ptr %a299 + call void @finch_str_drop(ptr %a299) + %t300 = load ptr, ptr %a1 + call void @finch.parser.parseArgs(ptr %t300, ptr %a7) + %t301 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t301 +endif1932: + %t302 = getelementptr inbounds %S.ast.Node, ptr %a7, i32 0, i32 0 + %t303 = load { ptr, i64, i64 }, ptr %t302 + store { ptr, i64, i64 } { ptr @.str.1069, i64 3, i64 0 }, ptr %t302 + store { ptr, i64, i64 } %t303, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t305 +endif1902: + %t306 = load ptr, ptr %a1 + %t307 = load %S.lexer.Token, ptr %a4 + %t308 = load %S.lexer.Token, ptr %a4 + %t309 = call { ptr, i64, i64 } @finch.parser.describe(%S.lexer.Token %t308) + store { ptr, i64, i64 } { ptr @.str.1070, i64 11, i64 0 }, ptr %a311 + store { ptr, i64, i64 } %t309, ptr %a312 + call void @finch_str_concat(ptr %a310, ptr %a311, ptr %a312) + store { ptr, i64, i64 } %t309, ptr %a313 + call void @finch_str_drop(ptr %a313) + %t314 = load { ptr, i64, i64 }, ptr %a310 + store { ptr, i64, i64 } %t314, ptr %a316 + store { ptr, i64, i64 } { ptr @.str.1071, i64 19, i64 0 }, ptr %a317 + call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) + store { ptr, i64, i64 } %t314, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a315 + call void @finch.parser.fail(ptr %t306, %S.lexer.Token %t307, { ptr, i64, i64 } %t319) + store { ptr, i64, i64 } %t319, ptr %a320 + call void @finch_str_drop(ptr %a320) + %t321 = load %S.ast.Node, ptr %a7 + call void @finch_str_drop(ptr %a13) + call void @finch.drop.S_lexer_Token(ptr %a4) + ret %S.ast.Node %t321 +} + +define internal void @finch.copy.arr_S_lexer_Token(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lexer.Token, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond1933 +n.cond1933: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body1934, label %n.end1935 +n.body1934: + %t8 = getelementptr inbounds %S.lexer.Token, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lexer.Token, ptr %t2, i64 %t6 + call void @finch.copy.S_lexer_Token(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond1933 +n.end1935: + ret void +} + +define internal void @finch.drop.S_parser_Parser(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.parser.Parser, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_lexer_Token(ptr %t1) + %t2 = getelementptr inbounds %S.parser.Parser, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal %S.ast.Program @finch.parser.parse({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.parser.Parser, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch.copy.arr_S_lexer_Token(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + %t8 = insertvalue %S.parser.Parser zeroinitializer, { ptr, i64, i64 } %t7, 0 + %t9 = insertvalue %S.parser.Parser %t8, i64 0, 1 + %t10 = insertvalue %S.parser.Parser %t9, i64 0, 2 + %t11 = load i64, ptr %a2 + %t12 = insertvalue %S.parser.Parser %t10, i64 %t11, 3 + %t13 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_copy(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.parser.Parser %t12, { ptr, i64, i64 } %t16, 4 + store %S.parser.Parser %t17, ptr %a18 + %t19 = call %S.ast.Program @finch.parser.parseProgram(ptr %a18) + call void @finch.drop.S_parser_Parser(ptr %a18) + ret %S.ast.Program %t19 +} + +define internal { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1073, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1074, i64 2, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.1076, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1077, i64 2, i64 0 }, ptr %a11 + call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a13 + call void @finch_str_drop(ptr %a13) + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1079, i64 1, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.1080, i64 1, i64 0 }, ptr %a17 + call void @finch_str_replace(ptr %a15, ptr %a14, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t18 +} + +define internal void @finch.gen.noteRef(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, i64 %p6, i64 %p7) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store { ptr, i64, i64 } %p5, ptr %a6 + store i64 %p6, ptr %a7 + store i64 %p7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic1936, label %ok1937 +panic1936: + call void @finch_panic(ptr @.str.1081, i64 232, ptr @.str.1082) + unreachable +ok1937: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 + %t12 = load i1, ptr %t11 + %t13 = xor i1 %t12, true + br i1 %t13, label %then1938, label %endif1940 +then1938: + ret void +endif1940: + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic1941, label %ok1942 +panic1941: + call void @finch_panic(ptr @.str.1083, i64 235, ptr @.str.1084) + unreachable +ok1942: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 29 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic1943, label %ok1944 +panic1943: + call void @finch_panic(ptr @.str.1086, i64 235, ptr @.str.1087) + unreachable +ok1944: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t22 = load i64, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %t20 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 %t22, %t24 + br i1 %t25, label %range1945, label %inrange1946 +range1945: + call void @finch_panic_index(ptr @.str.1088, i64 235, i64 %t22, i64 %t24) + unreachable +inrange1946: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 + %t28 = load { ptr, i64, i64 }, ptr %t27 + store { ptr, i64, i64 } { ptr @.str.1085, i64 3, i64 0 }, ptr %a30 + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.1089, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t39 = load i64, ptr %t38 + call void @finch_str_from_int(ptr %a40, i64 %t39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t37, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t37, ptr %a45 + call void @finch_str_drop(ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.1090, i64 1, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a54, i64 %t53) + %t55 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a57 + store { ptr, i64, i64 } %t55, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t52, ptr %a59 + call void @finch_str_drop(ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.1091, i64 1, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a68, i64 %t67) + %t69 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t66, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t69, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t75, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.1092, i64 1, i64 0 }, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t80, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t80, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t86, ptr %a88 + store { ptr, i64, i64 } { ptr @.str.1093, i64 1, i64 0 }, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t86, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + %t92 = load i64, ptr %a7 + call void @finch_str_from_int(ptr %a93, i64 %t92) + %t94 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a96 + store { ptr, i64, i64 } %t94, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t91, ptr %a98 + call void @finch_str_drop(ptr %a98) + store { ptr, i64, i64 } %t94, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.1094, i64 1, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + store { ptr, i64, i64 } %t100, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a101 + %t106 = load i64, ptr %a8 + call void @finch_str_from_int(ptr %a107, i64 %t106) + %t108 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t105, ptr %a110 + store { ptr, i64, i64 } %t108, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t105, ptr %a112 + call void @finch_str_drop(ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.1095, i64 1, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load { ptr, i64, i64 }, ptr %a5 + %t121 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t120) + store { ptr, i64, i64 } %t119, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t119, ptr %a125 + call void @finch_str_drop(ptr %a125) + store { ptr, i64, i64 } %t121, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a122 + %t128 = load i64, ptr %t17 + %t129 = add i64 %t128, 1 + call void @finch_arr_reserve(ptr %t16, i64 %t129, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t130 = load ptr, ptr %t16 + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i64 %t128 + store { ptr, i64, i64 } %t127, ptr %t131 + store i64 %t129, ptr %t17 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %p0) { +entry: + %a1 = alloca %S.gen.FnSig, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca i64, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + store %S.gen.FnSig %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 + %t5 = load i64, ptr %t4 + store i64 0, ptr %a6 + br label %for.cond1947 +for.cond1947: + %t7 = load i64, ptr %a6 + %t8 = icmp slt i64 %t7, %t5 + br i1 %t8, label %for.body1948, label %for.end1950 +for.body1948: + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 13 + %t11 = load i64, ptr %a6 + %t12 = load { ptr, i64, i64 }, ptr %t10 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range1951, label %inrange1952 +range1951: + call void @finch_panic_index(ptr @.str.1096, i64 242, i64 %t11, i64 %t13) + unreachable +inrange1952: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t11 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t17) + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1097, i64 1, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 14 + %t25 = load i64, ptr %a6 + %t26 = load { ptr, i64, i64 }, ptr %t24 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 %t25, %t27 + br i1 %t28, label %range1953, label %inrange1954 +range1953: + call void @finch_panic_index(ptr @.str.1098, i64 242, i64 %t25, i64 %t27) + unreachable +inrange1954: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t25 + %t31 = load { ptr, i64, i64 }, ptr %t30 + store { ptr, i64, i64 } %t23, ptr %a33 + store { ptr, i64, i64 } %t31, ptr %a34 + call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) + store { ptr, i64, i64 } %t23, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a32 + %t37 = load i64, ptr %t9 + %t38 = add i64 %t37, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t38, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t39 = load ptr, ptr %a2 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t37 + store { ptr, i64, i64 } %t36, ptr %t40 + store i64 %t38, ptr %t9 + br label %for.step1949 +for.step1949: + %t41 = load i64, ptr %a6 + %t42 = add i64 %t41, 1 + store i64 %t42, ptr %a6 + br label %for.cond1947 +for.end1950: + %t43 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_copy(ptr %a46, ptr %a45) + %t47 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t47, ptr %a48 + %t49 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 + %t51 = load i64, ptr %t50 + %t52 = icmp sgt i64 %t51, 0 + br i1 %t52, label %then1955, label %endif1957 +then1955: + %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 2 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.1099, i64 1, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a55 + %t59 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 1 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t58, ptr %a62 + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t58, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t65, ptr %a48 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + br label %endif1957 +endif1957: + %t68 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.1100, i64 3, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1101, i64 1, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1102, i64 2, i64 0 }, ptr %a79 + call void @finch_str_join(ptr %a80, ptr %a2, ptr %a79) + %t81 = load { ptr, i64, i64 }, ptr %a80 + store { ptr, i64, i64 } %t77, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t77, ptr %a85 + call void @finch_str_drop(ptr %a85) + store { ptr, i64, i64 } %t81, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t87, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.1103, i64 1, i64 0 }, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t87, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t92, ptr %a93 + %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 9 + %t95 = load i1, ptr %t94 + br i1 %t95, label %then1958, label %else1959 +then1958: + %t96 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t97 = getelementptr inbounds %S.ast.Type, ptr %t96, i32 0, i32 0 + %t98 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t98, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.1104, i64 4, i64 0 }, ptr %a100 + %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) + %t102 = icmp ne i32 %t101, 0 + br i1 %t102, label %then1961, label %else1962 +then1961: + %t103 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.1105, i64 5, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a104 + %t108 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t107, ptr %a93 + store { ptr, i64, i64 } %t108, ptr %a109 + call void @finch_str_drop(ptr %a109) + br label %endif1963 +else1962: + %t110 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t110, ptr %a112 + store { ptr, i64, i64 } { ptr @.str.1106, i64 4, i64 0 }, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a111 + %t115 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t116 = load %S.ast.Type, ptr %t115 + %t117 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t116) + store { ptr, i64, i64 } %t114, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t114, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t117, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.1107, i64 1, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t128, ptr %a93 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + br label %endif1963 +endif1963: + br label %endif1960 +else1959: + %t131 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.1108, i64 4, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp eq i32 %t136, 0 + br i1 %t137, label %then1964, label %endif1966 +then1964: + %t138 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t138, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.1109, i64 4, i64 0 }, ptr %a141 + call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a139 + %t143 = getelementptr inbounds %S.gen.FnSig, ptr %a1, i32 0, i32 12 + %t144 = load %S.ast.Type, ptr %t143 + %t145 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t144) + store { ptr, i64, i64 } %t142, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + store { ptr, i64, i64 } %t142, ptr %a149 + call void @finch_str_drop(ptr %a149) + store { ptr, i64, i64 } %t145, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a146 + %t152 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t151, ptr %a93 + store { ptr, i64, i64 } %t152, ptr %a153 + call void @finch_str_drop(ptr %a153) + br label %endif1966 +endif1966: + br label %endif1960 +endif1960: + %t154 = load { ptr, i64, i64 }, ptr %a93 + call void @finch_str_drop(ptr %a48) + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t154 +} + +define internal void @finch.gen.noteCall(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.FnSig, align 16 + %a11 = alloca i64, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca %S.ast.Node, align 16 + %a41 = alloca %S.ast.Node, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.FnSig %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic1967, label %ok1968 +panic1967: + call void @finch_panic(ptr @.str.1110, i64 263, ptr @.str.1111) + unreachable +ok1968: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + %t8 = xor i1 %t7, true + br i1 %t8, label %then1969, label %endif1971 +then1969: + ret void +endif1971: + %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t10 = load i64, ptr %t9 + store i64 %t10, ptr %a11 + %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1112, i64 6, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br i1 %t17, label %then1972, label %endif1974 +then1972: + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t19 = load i64, ptr %t18 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a11 + br label %endif1974 +endif1974: + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic1975, label %ok1976 +panic1975: + call void @finch_panic(ptr @.str.1113, i64 270, ptr @.str.1114) + unreachable +ok1976: + %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 0 + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 16 + %t25 = load i64, ptr %t24 + %t26 = load { ptr, i64, i64 }, ptr %t23 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 %t25, %t27 + br i1 %t28, label %range1977, label %inrange1978 +range1977: + call void @finch_panic_index(ptr @.str.1115, i64 270, i64 %t25, i64 %t27) + unreachable +inrange1978: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i64 %t25 + %t31 = getelementptr inbounds %S.ast.Program, ptr %t30, i32 0, i32 8 + %t32 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 17 + %t33 = load i64, ptr %t32 + %t34 = load { ptr, i64, i64 }, ptr %t31 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 %t33, %t35 + br i1 %t36, label %range1979, label %inrange1980 +range1979: + call void @finch_panic_index(ptr @.str.1116, i64 270, i64 %t33, i64 %t35) + unreachable +inrange1980: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 + %t39 = load %S.ast.Node, ptr %t38 + store %S.ast.Node %t39, ptr %a40 + call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) + %t42 = load %S.ast.Node, ptr %a41 + store %S.ast.Node %t42, ptr %a43 + %t44 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch_str_copy(ptr %a47, ptr %a46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t48, ptr %a49 + %t50 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 7 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = icmp sgt i64 %t52, 0 + br label %logic.from1981 +logic.from1981: + br i1 %t53, label %logic.rhs1982, label %logic.end1983 +logic.rhs1982: + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 2 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = icmp eq i64 %t56, 0 + br label %logic.rend1984 +logic.rend1984: + br label %logic.end1983 +logic.end1983: + %t58 = phi i1 [ false, %logic.from1981 ], [ %t57, %logic.rend1984 ] + br i1 %t58, label %then1985, label %endif1987 +then1985: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + call void @finch_str_copy(ptr %a62, ptr %a61) + %t63 = load { ptr, i64, i64 }, ptr %a62 + %t64 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t63, ptr %a49 + store { ptr, i64, i64 } %t64, ptr %a65 + call void @finch_str_drop(ptr %a65) + br label %endif1987 +endif1987: + %t66 = load ptr, ptr %a1 + %t67 = load %S.ast.Node, ptr %a2 + %t68 = load i64, ptr %a11 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a49, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = load %S.gen.FnSig, ptr %a3 + %t72 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t71) + store { ptr, i64, i64 } { ptr @.str.1117, i64 9, i64 0 }, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.1118, i64 4, i64 0 }, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load ptr, ptr %a1 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic1988, label %ok1989 +panic1988: + call void @finch_panic(ptr @.str.1119, i64 275, ptr @.str.1120) + unreachable +ok1989: + %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 1 + %t86 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 13 + %t87 = load i64, ptr %t86 + %t88 = load { ptr, i64, i64 }, ptr %t85 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 %t87, %t89 + br i1 %t90, label %range1990, label %inrange1991 +range1990: + call void @finch_panic_index(ptr @.str.1121, i64 275, i64 %t87, i64 %t89) + unreachable +inrange1991: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t87 + %t93 = load { ptr, i64, i64 }, ptr %t92 + %t94 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 11 + %t95 = load i64, ptr %t94 + %t96 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 12 + %t97 = load i64, ptr %t96 + %t98 = add i64 %t97, 3 + call void @finch.gen.noteRef(ptr %t66, %S.ast.Node %t67, i64 %t68, i64 %t70, { ptr, i64, i64 } %t82, { ptr, i64, i64 } %t93, i64 %t95, i64 %t98) + store { ptr, i64, i64 } %t82, ptr %a99 + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a49) + call void @finch.drop.S_ast_Node(ptr %a43) + ret void +} + +define internal void @finch.copy.arr_bool(ptr %dst, ptr %src) { +entry: + + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + ret void +} + +define internal void @finch.copy.S_gen_FnSig(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.FnSig, ptr %src + store %S.gen.FnSig %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 6 + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 7 + %t13 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 7 + call void @finch.copy.arr_S_ast_Type(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 8 + %t15 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 8 + call void @finch_str_copy(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 11 + %t17 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 11 + call void @finch_str_copy(ptr %t16, ptr %t17) + %t18 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 12 + %t19 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 12 + call void @finch.copy.S_ast_Type(ptr %t18, ptr %t19) + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 13 + %t21 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 13 + call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 14 + %t23 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 14 + call void @finch.copy.arr_str(ptr %t22, ptr %t23) + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %dst, i32 0, i32 15 + %t25 = getelementptr inbounds %S.gen.FnSig, ptr %src, i32 0, i32 15 + call void @finch.copy.arr_bool(ptr %t24, ptr %t25) + ret void +} + +define internal void @finch.drop.arr_bool(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_FnSig(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t5) + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_S_ast_Type(ptr %t6) + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 8 + call void @finch_str_drop(ptr %t7) + %t8 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 11 + call void @finch_str_drop(ptr %t8) + %t9 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 12 + call void @finch.drop.S_ast_Type(ptr %t9) + %t10 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 13 + call void @finch.drop.arr_S_ast_Type(ptr %t10) + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 14 + call void @finch.drop.arr_str(ptr %t11) + %t12 = getelementptr inbounds %S.gen.FnSig, ptr %a, i32 0, i32 15 + call void @finch.drop.arr_bool(ptr %t12) + ret void +} + +define internal void @finch.copy.S_gen_Template(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Template, ptr %src + store %S.gen.Template %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.Template, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.Template, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.drop.S_gen_Template(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Template, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + ret void +} + +define internal void @finch.copy.arr_int(ptr %dst, ptr %src) { +entry: + + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + ret void +} + +define internal void @finch.copy.S_gen_StructDef(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.StructDef, ptr %src + store %S.gen.StructDef %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 3 + %t7 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_int(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 4 + %t9 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_int(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 5 + %t11 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 5 + call void @finch_str_copy(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 6 + %t13 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 7 + %t15 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 7 + call void @finch.copy.arr_S_ast_Type(ptr %t14, ptr %t15) + %t16 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 8 + %t17 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 8 + call void @finch_str_copy(ptr %t16, ptr %t17) + %t18 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 11 + %t19 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 11 + call void @finch.copy.arr_str(ptr %t18, ptr %t19) + %t20 = getelementptr inbounds %S.gen.StructDef, ptr %dst, i32 0, i32 12 + %t21 = getelementptr inbounds %S.gen.StructDef, ptr %src, i32 0, i32 12 + call void @finch.copy.arr_S_ast_Type(ptr %t20, ptr %t21) + ret void +} + +define internal void @finch.drop.arr_int(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_StructDef(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_int(ptr %t3) + %t4 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_int(ptr %t4) + %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 5 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 7 + call void @finch.drop.arr_S_ast_Type(ptr %t7) + %t8 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 8 + call void @finch_str_drop(ptr %t8) + %t9 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 11 + call void @finch.drop.arr_str(ptr %t9) + %t10 = getelementptr inbounds %S.gen.StructDef, ptr %a, i32 0, i32 12 + call void @finch.drop.arr_S_ast_Type(ptr %t10) + ret void +} + +define internal void @finch.gen.indexAll(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca i64, align 16 + %a38 = alloca %S.gen.FnSig, align 16 + %a39 = alloca %S.gen.FnSig, align 16 + %a41 = alloca %S.gen.FnSig, align 16 + %a61 = alloca %S.ast.Node, align 16 + %a62 = alloca %S.ast.Node, align 16 + %a64 = alloca %S.ast.Node, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca i64, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca i64, align 16 + %a257 = alloca %S.gen.Template, align 16 + %a258 = alloca %S.gen.Template, align 16 + %a260 = alloca %S.gen.Template, align 16 + %a282 = alloca %S.ast.Node, align 16 + %a283 = alloca %S.ast.Node, align 16 + %a285 = alloca %S.ast.Node, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca i64, align 16 + %a448 = alloca %S.gen.StructDef, align 16 + %a449 = alloca %S.gen.StructDef, align 16 + %a451 = alloca %S.gen.StructDef, align 16 + %a478 = alloca %S.ast.Node, align 16 + %a479 = alloca %S.ast.Node, align 16 + %a481 = alloca %S.ast.Node, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a543 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca i64, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca i64, align 16 + %a651 = alloca i64, align 16 + %a659 = alloca %S.ast.Node, align 16 + %a660 = alloca %S.ast.Node, align 16 + %a662 = alloca %S.ast.Node, align 16 + %a663 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca i64, align 16 + %a674 = alloca %S.ast.Node, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a712 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a743 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a746 = alloca { ptr, i64, i64 }, align 16 + %a747 = alloca { ptr, i64, i64 }, align 16 + %a748 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a763 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a778 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond1992 +each.cond1992: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body1993, label %each.end1995 +each.body1993: + %t8 = load ptr, ptr %a2 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t6 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic1996, label %ok1997 +panic1996: + call void @finch_panic(ptr @.str.1122, i64 281, ptr @.str.1123) + unreachable +ok1997: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 29 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1124, i64 3, i64 0 }, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a17 + %t21 = load i64, ptr %t15 + %t22 = add i64 %t21, 1 + call void @finch_arr_reserve(ptr %t14, i64 %t22, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t23 = load ptr, ptr %t14 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i64 %t21 + store { ptr, i64, i64 } %t20, ptr %t24 + store i64 %t22, ptr %t15 + br label %each.step1994 +each.step1994: + %t25 = load i64, ptr %a3 + %t26 = add i64 %t25, 1 + store i64 %t26, ptr %a3 + br label %each.cond1992 +each.end1995: + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic1998, label %ok1999 +panic1998: + call void @finch_panic(ptr @.str.1125, i64 283, ptr @.str.1126) + unreachable +ok1999: + %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 15 + store i64 0, ptr %a30 + br label %each.cond2000 +each.cond2000: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = load i64, ptr %a30 + %t34 = icmp slt i64 %t33, %t32 + br i1 %t34, label %each.body2001, label %each.end2003 +each.body2001: + %t35 = load ptr, ptr %t29 + %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t33 + %t37 = load %S.gen.FnSig, ptr %t36 + store %S.gen.FnSig %t37, ptr %a38 + call void @finch.copy.S_gen_FnSig(ptr %a39, ptr %a38) + %t40 = load %S.gen.FnSig, ptr %a39 + store %S.gen.FnSig %t40, ptr %a41 + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic2004, label %ok2005 +panic2004: + call void @finch_panic(ptr @.str.1127, i64 284, ptr @.str.1128) + unreachable +ok2005: + %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 0 + %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 16 + %t46 = load i64, ptr %t45 + %t47 = load { ptr, i64, i64 }, ptr %t44 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = icmp uge i64 %t46, %t48 + br i1 %t49, label %range2006, label %inrange2007 +range2006: + call void @finch_panic_index(ptr @.str.1129, i64 284, i64 %t46, i64 %t48) + unreachable +inrange2007: + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = getelementptr inbounds %S.ast.Program, ptr %t50, i64 %t46 + %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i32 0, i32 8 + %t53 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 17 + %t54 = load i64, ptr %t53 + %t55 = load { ptr, i64, i64 }, ptr %t52 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range2008, label %inrange2009 +range2008: + call void @finch_panic_index(ptr @.str.1130, i64 284, i64 %t54, i64 %t56) + unreachable +inrange2009: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 + %t60 = load %S.ast.Node, ptr %t59 + store %S.ast.Node %t60, ptr %a61 + call void @finch.copy.S_ast_Node(ptr %a62, ptr %a61) + %t63 = load %S.ast.Node, ptr %a62 + store %S.ast.Node %t63, ptr %a64 + %t65 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 7 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 + %t67 = load i64, ptr %t66 + %t68 = icmp sgt i64 %t67, 0 + br i1 %t68, label %then2010, label %endif2012 +then2010: + call void @finch.drop.S_ast_Node(ptr %a64) + call void @finch.drop.S_gen_FnSig(ptr %a41) + br label %each.step2002 +endif2012: + store { ptr, i64, i64 } zeroinitializer, ptr %a69 + %t70 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i32 0, i32 1 + %t72 = load i64, ptr %t71 + store i64 0, ptr %a73 + br label %for.cond2013 +for.cond2013: + %t74 = load i64, ptr %a73 + %t75 = icmp slt i64 %t74, %t72 + br i1 %t75, label %for.body2014, label %for.end2016 +for.body2014: + %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 + %t77 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 13 + %t78 = load i64, ptr %a73 + %t79 = load { ptr, i64, i64 }, ptr %t77 + %t80 = extractvalue { ptr, i64, i64 } %t79, 1 + %t81 = icmp uge i64 %t78, %t80 + br i1 %t81, label %range2017, label %inrange2018 +range2017: + call void @finch_panic_index(ptr @.str.1131, i64 290, i64 %t78, i64 %t80) + unreachable +inrange2018: + %t82 = extractvalue { ptr, i64, i64 } %t79, 0 + %t83 = getelementptr inbounds %S.ast.Type, ptr %t82, i64 %t78 + %t84 = load %S.ast.Type, ptr %t83 + %t85 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t84) + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1132, i64 1, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 14 + %t92 = load i64, ptr %a73 + %t93 = load { ptr, i64, i64 }, ptr %t91 + %t94 = extractvalue { ptr, i64, i64 } %t93, 1 + %t95 = icmp uge i64 %t92, %t94 + br i1 %t95, label %range2019, label %inrange2020 +range2019: + call void @finch_panic_index(ptr @.str.1133, i64 290, i64 %t92, i64 %t94) + unreachable +inrange2020: + %t96 = extractvalue { ptr, i64, i64 } %t93, 0 + %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 %t92 + %t98 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t90, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t90, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + %t104 = load i64, ptr %t76 + %t105 = add i64 %t104, 1 + call void @finch_arr_reserve(ptr %a69, i64 %t105, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t106 = load ptr, ptr %a69 + %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t106, i64 %t104 + store { ptr, i64, i64 } %t103, ptr %t107 + store i64 %t105, ptr %t76 + br label %for.step2015 +for.step2015: + %t108 = load i64, ptr %a73 + %t109 = add i64 %t108, 1 + store i64 %t109, ptr %a73 + br label %for.cond2013 +for.end2016: + %t110 = load ptr, ptr %a1 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic2021, label %ok2022 +panic2021: + call void @finch_panic(ptr @.str.1134, i64 292, ptr @.str.1135) + unreachable +ok2022: + %t112 = getelementptr inbounds %S.gen.Gen, ptr %t110, i32 0, i32 29 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 + %t114 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 0 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } { ptr @.str.1136, i64 3, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.1137, i64 1, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 1 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t124, ptr %a128 + store { ptr, i64, i64 } %t126, ptr %a129 + call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) + store { ptr, i64, i64 } %t124, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t131, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.1138, i64 1, i64 0 }, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + %t137 = getelementptr inbounds %S.gen.FnSig, ptr %a41, i32 0, i32 2 + %t138 = load { ptr, i64, i64 }, ptr %t137 + store { ptr, i64, i64 } %t136, ptr %a140 + store { ptr, i64, i64 } %t138, ptr %a141 + call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) + store { ptr, i64, i64 } %t136, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a139 + store { ptr, i64, i64 } %t143, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.1139, i64 1, i64 0 }, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + store { ptr, i64, i64 } %t143, ptr %a147 + call void @finch_str_drop(ptr %a147) + %t148 = load { ptr, i64, i64 }, ptr %a144 + %t149 = load ptr, ptr %a1 + %t150 = icmp eq ptr %t149, null + br i1 %t150, label %panic2023, label %ok2024 +panic2023: + call void @finch_panic(ptr @.str.1140, i64 292, ptr @.str.1141) + unreachable +ok2024: + %t151 = getelementptr inbounds %S.gen.Gen, ptr %t149, i32 0, i32 1 + %t152 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 13 + %t153 = load i64, ptr %t152 + %t154 = load { ptr, i64, i64 }, ptr %t151 + %t155 = extractvalue { ptr, i64, i64 } %t154, 1 + %t156 = icmp uge i64 %t153, %t155 + br i1 %t156, label %range2025, label %inrange2026 +range2025: + call void @finch_panic_index(ptr @.str.1142, i64 292, i64 %t153, i64 %t155) + unreachable +inrange2026: + %t157 = extractvalue { ptr, i64, i64 } %t154, 0 + %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t157, i64 %t153 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t148, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + store { ptr, i64, i64 } %t148, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t164, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.1143, i64 1, i64 0 }, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t164, ptr %a168 + call void @finch_str_drop(ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a165 + %t170 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 11 + %t171 = load i64, ptr %t170 + call void @finch_str_from_int(ptr %a172, i64 %t171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + store { ptr, i64, i64 } %t169, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t169, ptr %a177 + call void @finch_str_drop(ptr %a177) + store { ptr, i64, i64 } %t173, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.1144, i64 1, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + store { ptr, i64, i64 } %t179, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a180 + %t185 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 12 + %t186 = load i64, ptr %t185 + call void @finch_str_from_int(ptr %a187, i64 %t186) + %t188 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t184, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t184, ptr %a192 + call void @finch_str_drop(ptr %a192) + store { ptr, i64, i64 } %t188, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = load { ptr, i64, i64 }, ptr %a189 + store { ptr, i64, i64 } %t194, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.1145, i64 1, i64 0 }, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t194, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + %t200 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 14 + %t201 = load i64, ptr %t200 + call void @finch_str_from_int(ptr %a202, i64 %t201) + %t203 = load { ptr, i64, i64 }, ptr %a202 + store { ptr, i64, i64 } %t199, ptr %a205 + store { ptr, i64, i64 } %t203, ptr %a206 + call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) + store { ptr, i64, i64 } %t199, ptr %a207 + call void @finch_str_drop(ptr %a207) + store { ptr, i64, i64 } %t203, ptr %a208 + call void @finch_str_drop(ptr %a208) + %t209 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t209, ptr %a211 + store { ptr, i64, i64 } { ptr @.str.1146, i64 1, i64 0 }, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t209, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + %t215 = load %S.gen.FnSig, ptr %a41 + %t216 = call { ptr, i64, i64 } @finch.gen.sigText(%S.gen.FnSig %t215) + %t217 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t216) + store { ptr, i64, i64 } %t216, ptr %a218 + call void @finch_str_drop(ptr %a218) + store { ptr, i64, i64 } %t214, ptr %a220 + store { ptr, i64, i64 } %t217, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t214, ptr %a222 + call void @finch_str_drop(ptr %a222) + store { ptr, i64, i64 } %t217, ptr %a223 + call void @finch_str_drop(ptr %a223) + %t224 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t224, ptr %a226 + store { ptr, i64, i64 } { ptr @.str.1147, i64 1, i64 0 }, ptr %a227 + call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) + store { ptr, i64, i64 } %t224, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = load { ptr, i64, i64 }, ptr %a225 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %a69, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1148, i64 1, i64 0 }, ptr %a231 + call void @finch_str_join(ptr %a232, ptr %a69, ptr %a231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t229, ptr %a235 + store { ptr, i64, i64 } %t233, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t229, ptr %a237 + call void @finch_str_drop(ptr %a237) + store { ptr, i64, i64 } %t233, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a234 + %t240 = load i64, ptr %t113 + %t241 = add i64 %t240, 1 + call void @finch_arr_reserve(ptr %t112, i64 %t241, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t242 = load ptr, ptr %t112 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 %t240 + store { ptr, i64, i64 } %t239, ptr %t243 + store i64 %t241, ptr %t113 + call void @finch.drop.arr_str(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a64) + call void @finch.drop.S_gen_FnSig(ptr %a41) + br label %each.step2002 +each.step2002: + %t244 = load i64, ptr %a30 + %t245 = add i64 %t244, 1 + store i64 %t245, ptr %a30 + br label %each.cond2000 +each.end2003: + %t246 = load ptr, ptr %a1 + %t247 = icmp eq ptr %t246, null + br i1 %t247, label %panic2027, label %ok2028 +panic2027: + call void @finch_panic(ptr @.str.1149, i64 294, ptr @.str.1150) + unreachable +ok2028: + %t248 = getelementptr inbounds %S.gen.Gen, ptr %t246, i32 0, i32 17 + store i64 0, ptr %a249 + br label %each.cond2029 +each.cond2029: + %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 + %t251 = load i64, ptr %t250 + %t252 = load i64, ptr %a249 + %t253 = icmp slt i64 %t252, %t251 + br i1 %t253, label %each.body2030, label %each.end2032 +each.body2030: + %t254 = load ptr, ptr %t248 + %t255 = getelementptr inbounds %S.gen.Template, ptr %t254, i64 %t252 + %t256 = load %S.gen.Template, ptr %t255 + store %S.gen.Template %t256, ptr %a257 + call void @finch.copy.S_gen_Template(ptr %a258, ptr %a257) + %t259 = load %S.gen.Template, ptr %a258 + store %S.gen.Template %t259, ptr %a260 + %t261 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 6 + %t262 = load i1, ptr %t261 + br i1 %t262, label %then2033, label %endif2035 +then2033: + call void @finch.drop.S_gen_Template(ptr %a260) + br label %each.step2031 +endif2035: + %t263 = load ptr, ptr %a1 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic2036, label %ok2037 +panic2036: + call void @finch_panic(ptr @.str.1151, i64 298, ptr @.str.1152) + unreachable +ok2037: + %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 0 + %t266 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 4 + %t267 = load i64, ptr %t266 + %t268 = load { ptr, i64, i64 }, ptr %t265 + %t269 = extractvalue { ptr, i64, i64 } %t268, 1 + %t270 = icmp uge i64 %t267, %t269 + br i1 %t270, label %range2038, label %inrange2039 +range2038: + call void @finch_panic_index(ptr @.str.1153, i64 298, i64 %t267, i64 %t269) + unreachable +inrange2039: + %t271 = extractvalue { ptr, i64, i64 } %t268, 0 + %t272 = getelementptr inbounds %S.ast.Program, ptr %t271, i64 %t267 + %t273 = getelementptr inbounds %S.ast.Program, ptr %t272, i32 0, i32 8 + %t274 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 5 + %t275 = load i64, ptr %t274 + %t276 = load { ptr, i64, i64 }, ptr %t273 + %t277 = extractvalue { ptr, i64, i64 } %t276, 1 + %t278 = icmp uge i64 %t275, %t277 + br i1 %t278, label %range2040, label %inrange2041 +range2040: + call void @finch_panic_index(ptr @.str.1154, i64 298, i64 %t275, i64 %t277) + unreachable +inrange2041: + %t279 = extractvalue { ptr, i64, i64 } %t276, 0 + %t280 = getelementptr inbounds %S.ast.Node, ptr %t279, i64 %t275 + %t281 = load %S.ast.Node, ptr %t280 + store %S.ast.Node %t281, ptr %a282 + call void @finch.copy.S_ast_Node(ptr %a283, ptr %a282) + %t284 = load %S.ast.Node, ptr %a283 + store %S.ast.Node %t284, ptr %a285 + %t286 = load ptr, ptr %a1 + %t287 = icmp eq ptr %t286, null + br i1 %t287, label %panic2042, label %ok2043 +panic2042: + call void @finch_panic(ptr @.str.1155, i64 299, ptr @.str.1156) + unreachable +ok2043: + %t288 = getelementptr inbounds %S.gen.Gen, ptr %t286, i32 0, i32 29 + %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t288, i32 0, i32 1 + %t290 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 0 + %t291 = load { ptr, i64, i64 }, ptr %t290 + store { ptr, i64, i64 } { ptr @.str.1157, i64 3, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t295, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.1158, i64 1, i64 0 }, ptr %a298 + call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) + store { ptr, i64, i64 } %t295, ptr %a299 + call void @finch_str_drop(ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a296 + %t301 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 1 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store { ptr, i64, i64 } %t300, ptr %a304 + store { ptr, i64, i64 } %t302, ptr %a305 + call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) + store { ptr, i64, i64 } %t300, ptr %a306 + call void @finch_str_drop(ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a303 + store { ptr, i64, i64 } %t307, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.1159, i64 1, i64 0 }, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t307, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = load { ptr, i64, i64 }, ptr %a308 + %t313 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 2 + %t314 = load { ptr, i64, i64 }, ptr %t313 + store { ptr, i64, i64 } %t312, ptr %a316 + store { ptr, i64, i64 } %t314, ptr %a317 + call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) + store { ptr, i64, i64 } %t312, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a315 + store { ptr, i64, i64 } %t319, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.1160, i64 1, i64 0 }, ptr %a322 + call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) + store { ptr, i64, i64 } %t319, ptr %a323 + call void @finch_str_drop(ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a320 + %t325 = load ptr, ptr %a1 + %t326 = icmp eq ptr %t325, null + br i1 %t326, label %panic2044, label %ok2045 +panic2044: + call void @finch_panic(ptr @.str.1161, i64 299, ptr @.str.1162) + unreachable +ok2045: + %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 1 + %t328 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 13 + %t329 = load i64, ptr %t328 + %t330 = load { ptr, i64, i64 }, ptr %t327 + %t331 = extractvalue { ptr, i64, i64 } %t330, 1 + %t332 = icmp uge i64 %t329, %t331 + br i1 %t332, label %range2046, label %inrange2047 +range2046: + call void @finch_panic_index(ptr @.str.1163, i64 299, i64 %t329, i64 %t331) + unreachable +inrange2047: + %t333 = extractvalue { ptr, i64, i64 } %t330, 0 + %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i64 %t329 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t324, ptr %a337 + store { ptr, i64, i64 } %t335, ptr %a338 + call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) + store { ptr, i64, i64 } %t324, ptr %a339 + call void @finch_str_drop(ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t340, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.1164, i64 1, i64 0 }, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t340, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load { ptr, i64, i64 }, ptr %a341 + %t346 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 11 + %t347 = load i64, ptr %t346 + call void @finch_str_from_int(ptr %a348, i64 %t347) + %t349 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t345, ptr %a351 + store { ptr, i64, i64 } %t349, ptr %a352 + call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) + store { ptr, i64, i64 } %t345, ptr %a353 + call void @finch_str_drop(ptr %a353) + store { ptr, i64, i64 } %t349, ptr %a354 + call void @finch_str_drop(ptr %a354) + %t355 = load { ptr, i64, i64 }, ptr %a350 + store { ptr, i64, i64 } %t355, ptr %a357 + store { ptr, i64, i64 } { ptr @.str.1165, i64 1, i64 0 }, ptr %a358 + call void @finch_str_concat(ptr %a356, ptr %a357, ptr %a358) + store { ptr, i64, i64 } %t355, ptr %a359 + call void @finch_str_drop(ptr %a359) + %t360 = load { ptr, i64, i64 }, ptr %a356 + %t361 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 12 + %t362 = load i64, ptr %t361 + call void @finch_str_from_int(ptr %a363, i64 %t362) + %t364 = load { ptr, i64, i64 }, ptr %a363 + store { ptr, i64, i64 } %t360, ptr %a366 + store { ptr, i64, i64 } %t364, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t360, ptr %a368 + call void @finch_str_drop(ptr %a368) + store { ptr, i64, i64 } %t364, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = load { ptr, i64, i64 }, ptr %a365 + store { ptr, i64, i64 } %t370, ptr %a372 + store { ptr, i64, i64 } { ptr @.str.1166, i64 1, i64 0 }, ptr %a373 + call void @finch_str_concat(ptr %a371, ptr %a372, ptr %a373) + store { ptr, i64, i64 } %t370, ptr %a374 + call void @finch_str_drop(ptr %a374) + %t375 = load { ptr, i64, i64 }, ptr %a371 + %t376 = getelementptr inbounds %S.ast.Node, ptr %a285, i32 0, i32 14 + %t377 = load i64, ptr %t376 + call void @finch_str_from_int(ptr %a378, i64 %t377) + %t379 = load { ptr, i64, i64 }, ptr %a378 + store { ptr, i64, i64 } %t375, ptr %a381 + store { ptr, i64, i64 } %t379, ptr %a382 + call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) + store { ptr, i64, i64 } %t375, ptr %a383 + call void @finch_str_drop(ptr %a383) + store { ptr, i64, i64 } %t379, ptr %a384 + call void @finch_str_drop(ptr %a384) + %t385 = load { ptr, i64, i64 }, ptr %a380 + store { ptr, i64, i64 } %t385, ptr %a387 + store { ptr, i64, i64 } { ptr @.str.1167, i64 1, i64 0 }, ptr %a388 + call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) + store { ptr, i64, i64 } %t385, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a386 + %t391 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 1 + %t392 = load { ptr, i64, i64 }, ptr %t391 + store { ptr, i64, i64 } { ptr @.str.1168, i64 3, i64 0 }, ptr %a394 + store { ptr, i64, i64 } %t392, ptr %a395 + call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) + %t396 = load { ptr, i64, i64 }, ptr %a393 + store { ptr, i64, i64 } %t396, ptr %a398 + store { ptr, i64, i64 } { ptr @.str.1169, i64 1, i64 0 }, ptr %a399 + call void @finch_str_concat(ptr %a397, ptr %a398, ptr %a399) + store { ptr, i64, i64 } %t396, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = load { ptr, i64, i64 }, ptr %a397 + %t402 = getelementptr inbounds %S.gen.Template, ptr %a260, i32 0, i32 3 + %t403 = getelementptr inbounds { ptr, i64, i64 }, ptr %t402, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1170, i64 2, i64 0 }, ptr %a404 + call void @finch_str_join(ptr %a405, ptr %t402, ptr %a404) + %t406 = load { ptr, i64, i64 }, ptr %a405 + store { ptr, i64, i64 } %t401, ptr %a408 + store { ptr, i64, i64 } %t406, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + store { ptr, i64, i64 } %t401, ptr %a410 + call void @finch_str_drop(ptr %a410) + store { ptr, i64, i64 } %t406, ptr %a411 + call void @finch_str_drop(ptr %a411) + %t412 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t412, ptr %a414 + store { ptr, i64, i64 } { ptr @.str.1171, i64 6, i64 0 }, ptr %a415 + call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) + store { ptr, i64, i64 } %t412, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a413 + %t418 = call { ptr, i64, i64 } @finch.gen.esc({ ptr, i64, i64 } %t417) + store { ptr, i64, i64 } %t417, ptr %a419 + call void @finch_str_drop(ptr %a419) + store { ptr, i64, i64 } %t390, ptr %a421 + store { ptr, i64, i64 } %t418, ptr %a422 + call void @finch_str_concat(ptr %a420, ptr %a421, ptr %a422) + store { ptr, i64, i64 } %t390, ptr %a423 + call void @finch_str_drop(ptr %a423) + store { ptr, i64, i64 } %t418, ptr %a424 + call void @finch_str_drop(ptr %a424) + %t425 = load { ptr, i64, i64 }, ptr %a420 + store { ptr, i64, i64 } %t425, ptr %a427 + store { ptr, i64, i64 } { ptr @.str.1172, i64 1, i64 0 }, ptr %a428 + call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) + store { ptr, i64, i64 } %t425, ptr %a429 + call void @finch_str_drop(ptr %a429) + %t430 = load { ptr, i64, i64 }, ptr %a426 + %t431 = load i64, ptr %t289 + %t432 = add i64 %t431, 1 + call void @finch_arr_reserve(ptr %t288, i64 %t432, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t433 = load ptr, ptr %t288 + %t434 = getelementptr inbounds { ptr, i64, i64 }, ptr %t433, i64 %t431 + store { ptr, i64, i64 } %t430, ptr %t434 + store i64 %t432, ptr %t289 + call void @finch.drop.S_ast_Node(ptr %a285) + call void @finch.drop.S_gen_Template(ptr %a260) + br label %each.step2031 +each.step2031: + %t435 = load i64, ptr %a249 + %t436 = add i64 %t435, 1 + store i64 %t436, ptr %a249 + br label %each.cond2029 +each.end2032: + %t437 = load ptr, ptr %a1 + %t438 = icmp eq ptr %t437, null + br i1 %t438, label %panic2048, label %ok2049 +panic2048: + call void @finch_panic(ptr @.str.1173, i64 301, ptr @.str.1174) + unreachable +ok2049: + %t439 = getelementptr inbounds %S.gen.Gen, ptr %t437, i32 0, i32 16 + store i64 0, ptr %a440 + br label %each.cond2050 +each.cond2050: + %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 + %t442 = load i64, ptr %t441 + %t443 = load i64, ptr %a440 + %t444 = icmp slt i64 %t443, %t442 + br i1 %t444, label %each.body2051, label %each.end2053 +each.body2051: + %t445 = load ptr, ptr %t439 + %t446 = getelementptr inbounds %S.gen.StructDef, ptr %t445, i64 %t443 + %t447 = load %S.gen.StructDef, ptr %t446 + store %S.gen.StructDef %t447, ptr %a448 + call void @finch.copy.S_gen_StructDef(ptr %a449, ptr %a448) + %t450 = load %S.gen.StructDef, ptr %a449 + store %S.gen.StructDef %t450, ptr %a451 + %t452 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 2 + %t453 = load i1, ptr %t452 + br label %logic.from2054 +logic.from2054: + br i1 %t453, label %logic.end2056, label %logic.rhs2055 +logic.rhs2055: + %t454 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 5 + %t455 = getelementptr inbounds { ptr, i64, i64 }, ptr %t454, i32 0, i32 1 + %t456 = load i64, ptr %t455 + %t457 = icmp sgt i64 %t456, 0 + br label %logic.rend2057 +logic.rend2057: + br label %logic.end2056 +logic.end2056: + %t458 = phi i1 [ true, %logic.from2054 ], [ %t457, %logic.rend2057 ] + br i1 %t458, label %then2058, label %endif2060 +then2058: + call void @finch.drop.S_gen_StructDef(ptr %a451) + br label %each.step2052 +endif2060: + %t459 = load ptr, ptr %a1 + %t460 = icmp eq ptr %t459, null + br i1 %t460, label %panic2061, label %ok2062 +panic2061: + call void @finch_panic(ptr @.str.1175, i64 305, ptr @.str.1176) + unreachable +ok2062: + %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 0 + %t462 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 13 + %t463 = load i64, ptr %t462 + %t464 = load { ptr, i64, i64 }, ptr %t461 + %t465 = extractvalue { ptr, i64, i64 } %t464, 1 + %t466 = icmp uge i64 %t463, %t465 + br i1 %t466, label %range2063, label %inrange2064 +range2063: + call void @finch_panic_index(ptr @.str.1177, i64 305, i64 %t463, i64 %t465) + unreachable +inrange2064: + %t467 = extractvalue { ptr, i64, i64 } %t464, 0 + %t468 = getelementptr inbounds %S.ast.Program, ptr %t467, i64 %t463 + %t469 = getelementptr inbounds %S.ast.Program, ptr %t468, i32 0, i32 6 + %t470 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 14 + %t471 = load i64, ptr %t470 + %t472 = load { ptr, i64, i64 }, ptr %t469 + %t473 = extractvalue { ptr, i64, i64 } %t472, 1 + %t474 = icmp uge i64 %t471, %t473 + br i1 %t474, label %range2065, label %inrange2066 +range2065: + call void @finch_panic_index(ptr @.str.1178, i64 305, i64 %t471, i64 %t473) + unreachable +inrange2066: + %t475 = extractvalue { ptr, i64, i64 } %t472, 0 + %t476 = getelementptr inbounds %S.ast.Node, ptr %t475, i64 %t471 + %t477 = load %S.ast.Node, ptr %t476 + store %S.ast.Node %t477, ptr %a478 + call void @finch.copy.S_ast_Node(ptr %a479, ptr %a478) + %t480 = load %S.ast.Node, ptr %a479 + store %S.ast.Node %t480, ptr %a481 + %t482 = load ptr, ptr %a1 + %t483 = icmp eq ptr %t482, null + br i1 %t483, label %panic2067, label %ok2068 +panic2067: + call void @finch_panic(ptr @.str.1179, i64 306, ptr @.str.1180) + unreachable +ok2068: + %t484 = getelementptr inbounds %S.gen.Gen, ptr %t482, i32 0, i32 29 + %t485 = getelementptr inbounds { ptr, i64, i64 }, ptr %t484, i32 0, i32 1 + %t486 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 + %t487 = load { ptr, i64, i64 }, ptr %t486 + store { ptr, i64, i64 } { ptr @.str.1181, i64 3, i64 0 }, ptr %a489 + store { ptr, i64, i64 } %t487, ptr %a490 + call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) + %t491 = load { ptr, i64, i64 }, ptr %a488 + store { ptr, i64, i64 } %t491, ptr %a493 + store { ptr, i64, i64 } { ptr @.str.1182, i64 1, i64 0 }, ptr %a494 + call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) + store { ptr, i64, i64 } %t491, ptr %a495 + call void @finch_str_drop(ptr %a495) + %t496 = load { ptr, i64, i64 }, ptr %a492 + %t497 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 1 + %t498 = load { ptr, i64, i64 }, ptr %t497 + store { ptr, i64, i64 } %t496, ptr %a500 + store { ptr, i64, i64 } %t498, ptr %a501 + call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) + store { ptr, i64, i64 } %t496, ptr %a502 + call void @finch_str_drop(ptr %a502) + %t503 = load { ptr, i64, i64 }, ptr %a499 + store { ptr, i64, i64 } %t503, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.1183, i64 1, i64 0 }, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t503, ptr %a507 + call void @finch_str_drop(ptr %a507) + %t508 = load { ptr, i64, i64 }, ptr %a504 + %t509 = load ptr, ptr %a1 + %t510 = icmp eq ptr %t509, null + br i1 %t510, label %panic2069, label %ok2070 +panic2069: + call void @finch_panic(ptr @.str.1184, i64 306, ptr @.str.1185) + unreachable +ok2070: + %t511 = getelementptr inbounds %S.gen.Gen, ptr %t509, i32 0, i32 1 + %t512 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 13 + %t513 = load i64, ptr %t512 + %t514 = load { ptr, i64, i64 }, ptr %t511 + %t515 = extractvalue { ptr, i64, i64 } %t514, 1 + %t516 = icmp uge i64 %t513, %t515 + br i1 %t516, label %range2071, label %inrange2072 +range2071: + call void @finch_panic_index(ptr @.str.1186, i64 306, i64 %t513, i64 %t515) + unreachable +inrange2072: + %t517 = extractvalue { ptr, i64, i64 } %t514, 0 + %t518 = getelementptr inbounds { ptr, i64, i64 }, ptr %t517, i64 %t513 + %t519 = load { ptr, i64, i64 }, ptr %t518 + store { ptr, i64, i64 } %t508, ptr %a521 + store { ptr, i64, i64 } %t519, ptr %a522 + call void @finch_str_concat(ptr %a520, ptr %a521, ptr %a522) + store { ptr, i64, i64 } %t508, ptr %a523 + call void @finch_str_drop(ptr %a523) + %t524 = load { ptr, i64, i64 }, ptr %a520 + store { ptr, i64, i64 } %t524, ptr %a526 + store { ptr, i64, i64 } { ptr @.str.1187, i64 1, i64 0 }, ptr %a527 + call void @finch_str_concat(ptr %a525, ptr %a526, ptr %a527) + store { ptr, i64, i64 } %t524, ptr %a528 + call void @finch_str_drop(ptr %a528) + %t529 = load { ptr, i64, i64 }, ptr %a525 + %t530 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 11 + %t531 = load i64, ptr %t530 + call void @finch_str_from_int(ptr %a532, i64 %t531) + %t533 = load { ptr, i64, i64 }, ptr %a532 + store { ptr, i64, i64 } %t529, ptr %a535 + store { ptr, i64, i64 } %t533, ptr %a536 + call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536) + store { ptr, i64, i64 } %t529, ptr %a537 + call void @finch_str_drop(ptr %a537) + store { ptr, i64, i64 } %t533, ptr %a538 + call void @finch_str_drop(ptr %a538) + %t539 = load { ptr, i64, i64 }, ptr %a534 + store { ptr, i64, i64 } %t539, ptr %a541 + store { ptr, i64, i64 } { ptr @.str.1188, i64 1, i64 0 }, ptr %a542 + call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) + store { ptr, i64, i64 } %t539, ptr %a543 + call void @finch_str_drop(ptr %a543) + %t544 = load { ptr, i64, i64 }, ptr %a540 + %t545 = getelementptr inbounds %S.ast.Node, ptr %a481, i32 0, i32 12 + %t546 = load i64, ptr %t545 + call void @finch_str_from_int(ptr %a547, i64 %t546) + %t548 = load { ptr, i64, i64 }, ptr %a547 + store { ptr, i64, i64 } %t544, ptr %a550 + store { ptr, i64, i64 } %t548, ptr %a551 + call void @finch_str_concat(ptr %a549, ptr %a550, ptr %a551) + store { ptr, i64, i64 } %t544, ptr %a552 + call void @finch_str_drop(ptr %a552) + store { ptr, i64, i64 } %t548, ptr %a553 + call void @finch_str_drop(ptr %a553) + %t554 = load { ptr, i64, i64 }, ptr %a549 + %t555 = load i64, ptr %t485 + %t556 = add i64 %t555, 1 + call void @finch_arr_reserve(ptr %t484, i64 %t556, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t557 = load ptr, ptr %t484 + %t558 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i64 %t555 + store { ptr, i64, i64 } %t554, ptr %t558 + store i64 %t556, ptr %t485 + %t559 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 11 + %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 + %t561 = load i64, ptr %t560 + store i64 0, ptr %a562 + br label %for.cond2073 +for.cond2073: + %t563 = load i64, ptr %a562 + %t564 = icmp slt i64 %t563, %t561 + br i1 %t564, label %for.body2074, label %for.end2076 +for.body2074: + %t565 = load ptr, ptr %a1 + %t566 = icmp eq ptr %t565, null + br i1 %t566, label %panic2077, label %ok2078 +panic2077: + call void @finch_panic(ptr @.str.1189, i64 308, ptr @.str.1190) + unreachable +ok2078: + %t567 = getelementptr inbounds %S.gen.Gen, ptr %t565, i32 0, i32 29 + %t568 = getelementptr inbounds { ptr, i64, i64 }, ptr %t567, i32 0, i32 1 + %t569 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 0 + %t570 = load { ptr, i64, i64 }, ptr %t569 + store { ptr, i64, i64 } { ptr @.str.1191, i64 4, i64 0 }, ptr %a572 + store { ptr, i64, i64 } %t570, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + %t574 = load { ptr, i64, i64 }, ptr %a571 + store { ptr, i64, i64 } %t574, ptr %a576 + store { ptr, i64, i64 } { ptr @.str.1192, i64 1, i64 0 }, ptr %a577 + call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577) + store { ptr, i64, i64 } %t574, ptr %a578 + call void @finch_str_drop(ptr %a578) + %t579 = load { ptr, i64, i64 }, ptr %a575 + %t580 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 1 + %t581 = load { ptr, i64, i64 }, ptr %t580 + store { ptr, i64, i64 } %t579, ptr %a583 + store { ptr, i64, i64 } %t581, ptr %a584 + call void @finch_str_concat(ptr %a582, ptr %a583, ptr %a584) + store { ptr, i64, i64 } %t579, ptr %a585 + call void @finch_str_drop(ptr %a585) + %t586 = load { ptr, i64, i64 }, ptr %a582 + store { ptr, i64, i64 } %t586, ptr %a588 + store { ptr, i64, i64 } { ptr @.str.1193, i64 1, i64 0 }, ptr %a589 + call void @finch_str_concat(ptr %a587, ptr %a588, ptr %a589) + store { ptr, i64, i64 } %t586, ptr %a590 + call void @finch_str_drop(ptr %a590) + %t591 = load { ptr, i64, i64 }, ptr %a587 + %t592 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 11 + %t593 = load i64, ptr %a562 + %t594 = load { ptr, i64, i64 }, ptr %t592 + %t595 = extractvalue { ptr, i64, i64 } %t594, 1 + %t596 = icmp uge i64 %t593, %t595 + br i1 %t596, label %range2079, label %inrange2080 +range2079: + call void @finch_panic_index(ptr @.str.1194, i64 308, i64 %t593, i64 %t595) + unreachable +inrange2080: + %t597 = extractvalue { ptr, i64, i64 } %t594, 0 + %t598 = getelementptr inbounds { ptr, i64, i64 }, ptr %t597, i64 %t593 + %t599 = load { ptr, i64, i64 }, ptr %t598 + store { ptr, i64, i64 } %t591, ptr %a601 + store { ptr, i64, i64 } %t599, ptr %a602 + call void @finch_str_concat(ptr %a600, ptr %a601, ptr %a602) + store { ptr, i64, i64 } %t591, ptr %a603 + call void @finch_str_drop(ptr %a603) + %t604 = load { ptr, i64, i64 }, ptr %a600 + store { ptr, i64, i64 } %t604, ptr %a606 + store { ptr, i64, i64 } { ptr @.str.1195, i64 1, i64 0 }, ptr %a607 + call void @finch_str_concat(ptr %a605, ptr %a606, ptr %a607) + store { ptr, i64, i64 } %t604, ptr %a608 + call void @finch_str_drop(ptr %a608) + %t609 = load { ptr, i64, i64 }, ptr %a605 + %t610 = getelementptr inbounds %S.gen.StructDef, ptr %a451, i32 0, i32 12 + %t611 = load i64, ptr %a562 + %t612 = load { ptr, i64, i64 }, ptr %t610 + %t613 = extractvalue { ptr, i64, i64 } %t612, 1 + %t614 = icmp uge i64 %t611, %t613 + br i1 %t614, label %range2081, label %inrange2082 +range2081: + call void @finch_panic_index(ptr @.str.1196, i64 308, i64 %t611, i64 %t613) + unreachable +inrange2082: + %t615 = extractvalue { ptr, i64, i64 } %t612, 0 + %t616 = getelementptr inbounds %S.ast.Type, ptr %t615, i64 %t611 + %t617 = load %S.ast.Type, ptr %t616 + %t618 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t617) + store { ptr, i64, i64 } %t609, ptr %a620 + store { ptr, i64, i64 } %t618, ptr %a621 + call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) + store { ptr, i64, i64 } %t609, ptr %a622 + call void @finch_str_drop(ptr %a622) + store { ptr, i64, i64 } %t618, ptr %a623 + call void @finch_str_drop(ptr %a623) + %t624 = load { ptr, i64, i64 }, ptr %a619 + %t625 = load i64, ptr %t568 + %t626 = add i64 %t625, 1 + call void @finch_arr_reserve(ptr %t567, i64 %t626, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t627 = load ptr, ptr %t567 + %t628 = getelementptr inbounds { ptr, i64, i64 }, ptr %t627, i64 %t625 + store { ptr, i64, i64 } %t624, ptr %t628 + store i64 %t626, ptr %t568 + br label %for.step2075 +for.step2075: + %t629 = load i64, ptr %a562 + %t630 = add i64 %t629, 1 + store i64 %t630, ptr %a562 + br label %for.cond2073 +for.end2076: + call void @finch.drop.S_ast_Node(ptr %a481) + call void @finch.drop.S_gen_StructDef(ptr %a451) + br label %each.step2052 +each.step2052: + %t631 = load i64, ptr %a440 + %t632 = add i64 %t631, 1 + store i64 %t632, ptr %a440 + br label %each.cond2050 +each.end2053: + %t633 = load ptr, ptr %a1 + %t634 = icmp eq ptr %t633, null + br i1 %t634, label %panic2083, label %ok2084 +panic2083: + call void @finch_panic(ptr @.str.1197, i64 311, ptr @.str.1198) + unreachable +ok2084: + %t635 = getelementptr inbounds %S.gen.Gen, ptr %t633, i32 0, i32 0 + %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i32 0, i32 1 + %t637 = load i64, ptr %t636 + store i64 0, ptr %a638 + br label %for.cond2085 +for.cond2085: + %t639 = load i64, ptr %a638 + %t640 = icmp slt i64 %t639, %t637 + br i1 %t640, label %for.body2086, label %for.end2088 +for.body2086: + %t641 = load ptr, ptr %a1 + %t642 = icmp eq ptr %t641, null + br i1 %t642, label %panic2089, label %ok2090 +panic2089: + call void @finch_panic(ptr @.str.1199, i64 312, ptr @.str.1200) + unreachable +ok2090: + %t643 = getelementptr inbounds %S.gen.Gen, ptr %t641, i32 0, i32 0 + %t644 = load i64, ptr %a638 + %t645 = load { ptr, i64, i64 }, ptr %t643 + %t646 = extractvalue { ptr, i64, i64 } %t645, 1 + %t647 = icmp uge i64 %t644, %t646 + br i1 %t647, label %range2091, label %inrange2092 +range2091: + call void @finch_panic_index(ptr @.str.1201, i64 312, i64 %t644, i64 %t646) + unreachable +inrange2092: + %t648 = extractvalue { ptr, i64, i64 } %t645, 0 + %t649 = getelementptr inbounds %S.ast.Program, ptr %t648, i64 %t644 + %t650 = getelementptr inbounds %S.ast.Program, ptr %t649, i32 0, i32 7 + store i64 0, ptr %a651 + br label %each.cond2093 +each.cond2093: + %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %t650, i32 0, i32 1 + %t653 = load i64, ptr %t652 + %t654 = load i64, ptr %a651 + %t655 = icmp slt i64 %t654, %t653 + br i1 %t655, label %each.body2094, label %each.end2096 +each.body2094: + %t656 = load ptr, ptr %t650 + %t657 = getelementptr inbounds %S.ast.Node, ptr %t656, i64 %t654 + %t658 = load %S.ast.Node, ptr %t657 + store %S.ast.Node %t658, ptr %a659 + call void @finch.copy.S_ast_Node(ptr %a660, ptr %a659) + %t661 = load %S.ast.Node, ptr %a660 + store %S.ast.Node %t661, ptr %a662 + store { ptr, i64, i64 } { ptr @.str.1202, i64 0, i64 0 }, ptr %a663 + store { ptr, i64, i64 } zeroinitializer, ptr %a664 + %t665 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 9 + store i64 0, ptr %a666 + br label %each.cond2097 +each.cond2097: + %t667 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 + %t668 = load i64, ptr %t667 + %t669 = load i64, ptr %a666 + %t670 = icmp slt i64 %t669, %t668 + br i1 %t670, label %each.body2098, label %each.end2100 +each.body2098: + %t671 = load ptr, ptr %t665 + %t672 = getelementptr inbounds %S.ast.Node, ptr %t671, i64 %t669 + %t673 = load %S.ast.Node, ptr %t672 + store %S.ast.Node %t673, ptr %a674 + %t675 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 + %t676 = getelementptr inbounds %S.ast.Node, ptr %a674, i32 0, i32 1 + %t677 = load { ptr, i64, i64 }, ptr %t676 + store { ptr, i64, i64 } %t677, ptr %a678 + call void @finch_str_copy(ptr %a679, ptr %a678) + %t680 = load { ptr, i64, i64 }, ptr %a679 + %t681 = load i64, ptr %t675 + %t682 = add i64 %t681, 1 + call void @finch_arr_reserve(ptr %a664, i64 %t682, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t683 = load ptr, ptr %a664 + %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %t683, i64 %t681 + store { ptr, i64, i64 } %t680, ptr %t684 + store i64 %t682, ptr %t675 + br label %each.step2099 +each.step2099: + %t685 = load i64, ptr %a666 + %t686 = add i64 %t685, 1 + store i64 %t686, ptr %a666 + br label %each.cond2097 +each.end2100: + %t687 = getelementptr inbounds { ptr, i64, i64 }, ptr %a664, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1203, i64 1, i64 0 }, ptr %a688 + call void @finch_str_join(ptr %a689, ptr %a664, ptr %a688) + %t690 = load { ptr, i64, i64 }, ptr %a689 + %t691 = load { ptr, i64, i64 }, ptr %a663 + store { ptr, i64, i64 } %t690, ptr %a663 + store { ptr, i64, i64 } %t691, ptr %a692 + call void @finch_str_drop(ptr %a692) + %t693 = load ptr, ptr %a1 + %t694 = icmp eq ptr %t693, null + br i1 %t694, label %panic2101, label %ok2102 +panic2101: + call void @finch_panic(ptr @.str.1204, i64 319, ptr @.str.1205) + unreachable +ok2102: + %t695 = getelementptr inbounds %S.gen.Gen, ptr %t693, i32 0, i32 29 + %t696 = getelementptr inbounds { ptr, i64, i64 }, ptr %t695, i32 0, i32 1 + %t697 = load ptr, ptr %a1 + %t698 = icmp eq ptr %t697, null + br i1 %t698, label %panic2103, label %ok2104 +panic2103: + call void @finch_panic(ptr @.str.1207, i64 319, ptr @.str.1208) + unreachable +ok2104: + %t699 = getelementptr inbounds %S.gen.Gen, ptr %t697, i32 0, i32 0 + %t700 = load i64, ptr %a638 + %t701 = load { ptr, i64, i64 }, ptr %t699 + %t702 = extractvalue { ptr, i64, i64 } %t701, 1 + %t703 = icmp uge i64 %t700, %t702 + br i1 %t703, label %range2105, label %inrange2106 +range2105: + call void @finch_panic_index(ptr @.str.1209, i64 319, i64 %t700, i64 %t702) + unreachable +inrange2106: + %t704 = extractvalue { ptr, i64, i64 } %t701, 0 + %t705 = getelementptr inbounds %S.ast.Program, ptr %t704, i64 %t700 + %t706 = getelementptr inbounds %S.ast.Program, ptr %t705, i32 0, i32 0 + %t707 = load { ptr, i64, i64 }, ptr %t706 + store { ptr, i64, i64 } { ptr @.str.1206, i64 3, i64 0 }, ptr %a709 + store { ptr, i64, i64 } %t707, ptr %a710 + call void @finch_str_concat(ptr %a708, ptr %a709, ptr %a710) + %t711 = load { ptr, i64, i64 }, ptr %a708 + store { ptr, i64, i64 } %t711, ptr %a713 + store { ptr, i64, i64 } { ptr @.str.1210, i64 1, i64 0 }, ptr %a714 + call void @finch_str_concat(ptr %a712, ptr %a713, ptr %a714) + store { ptr, i64, i64 } %t711, ptr %a715 + call void @finch_str_drop(ptr %a715) + %t716 = load { ptr, i64, i64 }, ptr %a712 + %t717 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 1 + %t718 = load { ptr, i64, i64 }, ptr %t717 + store { ptr, i64, i64 } %t716, ptr %a720 + store { ptr, i64, i64 } %t718, ptr %a721 + call void @finch_str_concat(ptr %a719, ptr %a720, ptr %a721) + store { ptr, i64, i64 } %t716, ptr %a722 + call void @finch_str_drop(ptr %a722) + %t723 = load { ptr, i64, i64 }, ptr %a719 + store { ptr, i64, i64 } %t723, ptr %a725 + store { ptr, i64, i64 } { ptr @.str.1211, i64 1, i64 0 }, ptr %a726 + call void @finch_str_concat(ptr %a724, ptr %a725, ptr %a726) + store { ptr, i64, i64 } %t723, ptr %a727 + call void @finch_str_drop(ptr %a727) + %t728 = load { ptr, i64, i64 }, ptr %a724 + %t729 = load ptr, ptr %a1 + %t730 = icmp eq ptr %t729, null + br i1 %t730, label %panic2107, label %ok2108 +panic2107: + call void @finch_panic(ptr @.str.1212, i64 319, ptr @.str.1213) + unreachable +ok2108: + %t731 = getelementptr inbounds %S.gen.Gen, ptr %t729, i32 0, i32 1 + %t732 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 13 + %t733 = load i64, ptr %t732 + %t734 = load { ptr, i64, i64 }, ptr %t731 + %t735 = extractvalue { ptr, i64, i64 } %t734, 1 + %t736 = icmp uge i64 %t733, %t735 + br i1 %t736, label %range2109, label %inrange2110 +range2109: + call void @finch_panic_index(ptr @.str.1214, i64 319, i64 %t733, i64 %t735) + unreachable +inrange2110: + %t737 = extractvalue { ptr, i64, i64 } %t734, 0 + %t738 = getelementptr inbounds { ptr, i64, i64 }, ptr %t737, i64 %t733 + %t739 = load { ptr, i64, i64 }, ptr %t738 + store { ptr, i64, i64 } %t728, ptr %a741 + store { ptr, i64, i64 } %t739, ptr %a742 + call void @finch_str_concat(ptr %a740, ptr %a741, ptr %a742) + store { ptr, i64, i64 } %t728, ptr %a743 + call void @finch_str_drop(ptr %a743) + %t744 = load { ptr, i64, i64 }, ptr %a740 + store { ptr, i64, i64 } %t744, ptr %a746 + store { ptr, i64, i64 } { ptr @.str.1215, i64 1, i64 0 }, ptr %a747 + call void @finch_str_concat(ptr %a745, ptr %a746, ptr %a747) + store { ptr, i64, i64 } %t744, ptr %a748 + call void @finch_str_drop(ptr %a748) + %t749 = load { ptr, i64, i64 }, ptr %a745 + %t750 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 11 + %t751 = load i64, ptr %t750 + call void @finch_str_from_int(ptr %a752, i64 %t751) + %t753 = load { ptr, i64, i64 }, ptr %a752 + store { ptr, i64, i64 } %t749, ptr %a755 + store { ptr, i64, i64 } %t753, ptr %a756 + call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) + store { ptr, i64, i64 } %t749, ptr %a757 + call void @finch_str_drop(ptr %a757) + store { ptr, i64, i64 } %t753, ptr %a758 + call void @finch_str_drop(ptr %a758) + %t759 = load { ptr, i64, i64 }, ptr %a754 + store { ptr, i64, i64 } %t759, ptr %a761 + store { ptr, i64, i64 } { ptr @.str.1216, i64 1, i64 0 }, ptr %a762 + call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) + store { ptr, i64, i64 } %t759, ptr %a763 + call void @finch_str_drop(ptr %a763) + %t764 = load { ptr, i64, i64 }, ptr %a760 + %t765 = getelementptr inbounds %S.ast.Node, ptr %a662, i32 0, i32 12 + %t766 = load i64, ptr %t765 + call void @finch_str_from_int(ptr %a767, i64 %t766) + %t768 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t764, ptr %a770 + store { ptr, i64, i64 } %t768, ptr %a771 + call void @finch_str_concat(ptr %a769, ptr %a770, ptr %a771) + store { ptr, i64, i64 } %t764, ptr %a772 + call void @finch_str_drop(ptr %a772) + store { ptr, i64, i64 } %t768, ptr %a773 + call void @finch_str_drop(ptr %a773) + %t774 = load { ptr, i64, i64 }, ptr %a769 + store { ptr, i64, i64 } %t774, ptr %a776 + store { ptr, i64, i64 } { ptr @.str.1217, i64 1, i64 0 }, ptr %a777 + call void @finch_str_concat(ptr %a775, ptr %a776, ptr %a777) + store { ptr, i64, i64 } %t774, ptr %a778 + call void @finch_str_drop(ptr %a778) + %t779 = load { ptr, i64, i64 }, ptr %a775 + %t780 = load { ptr, i64, i64 }, ptr %a663 + store { ptr, i64, i64 } %t779, ptr %a782 + store { ptr, i64, i64 } %t780, ptr %a783 + call void @finch_str_concat(ptr %a781, ptr %a782, ptr %a783) + store { ptr, i64, i64 } %t779, ptr %a784 + call void @finch_str_drop(ptr %a784) + %t785 = load { ptr, i64, i64 }, ptr %a781 + %t786 = load i64, ptr %t696 + %t787 = add i64 %t786, 1 + call void @finch_arr_reserve(ptr %t695, i64 %t787, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t788 = load ptr, ptr %t695 + %t789 = getelementptr inbounds { ptr, i64, i64 }, ptr %t788, i64 %t786 + store { ptr, i64, i64 } %t785, ptr %t789 + store i64 %t787, ptr %t696 + call void @finch.drop.arr_str(ptr %a664) + call void @finch_str_drop(ptr %a663) + call void @finch.drop.S_ast_Node(ptr %a662) + br label %each.step2095 +each.step2095: + %t790 = load i64, ptr %a651 + %t791 = add i64 %t790, 1 + store i64 %t791, ptr %a651 + br label %each.cond2093 +each.end2096: + br label %for.step2087 +for.step2087: + %t792 = load i64, ptr %a638 + %t793 = add i64 %t792, 1 + store i64 %t793, ptr %a638 + br label %for.cond2085 +for.end2088: + ret void +} + +define internal void @finch.gen.fail(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2111, label %ok2112 +panic2111: + call void @finch_panic(ptr @.str.1218, i64 325, ptr @.str.1219) + unreachable +ok2112: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + br label %logic.from2113 +logic.from2113: + br i1 %t7, label %logic.rhs2114, label %logic.end2115 +logic.rhs2114: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic2116, label %ok2117 +panic2116: + call void @finch_panic(ptr @.str.1220, i64 325, ptr @.str.1221) + unreachable +ok2117: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 29 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br label %logic.rend2118 +logic.rend2118: + br label %logic.end2115 +logic.end2115: + %t14 = phi i1 [ false, %logic.from2113 ], [ %t13, %logic.rend2118 ] + br i1 %t14, label %then2119, label %endif2121 +then2119: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic2122, label %ok2123 +panic2122: + call void @finch_panic(ptr @.str.1222, i64 326, ptr @.str.1223) + unreachable +ok2123: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 29 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1224, i64 1, i64 0 }, ptr %a19 + call void @finch_str_join(ptr %a20, ptr %t17, ptr %a19) + %t21 = load { ptr, i64, i64 }, ptr %a20 + %t22 = extractvalue { ptr, i64, i64 } %t21, 1 + %t23 = trunc i64 %t22 to i32 + %t24 = extractvalue { ptr, i64, i64 } %t21, 0 + %t25 = icmp eq ptr %t24, null + %t26 = select i1 %t25, ptr @.str.1225, ptr %t24 + %t27 = call i32 (ptr, ...) @printf(ptr @.str.1226, i32 %t23, ptr %t26) + store { ptr, i64, i64 } %t21, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = call i32 (ptr, ...) @printf(ptr @.str.1227) + br label %endif2121 +endif2121: + %t30 = load ptr, ptr %a1 + %t31 = icmp eq ptr %t30, null + br i1 %t31, label %panic2124, label %ok2125 +panic2124: + call void @finch_panic(ptr @.str.1228, i64 328, ptr @.str.1229) + unreachable +ok2125: + %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 1 + %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t34 = load i64, ptr %t33 + %t35 = load { ptr, i64, i64 }, ptr %t32 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 %t34, %t36 + br i1 %t37, label %range2126, label %inrange2127 +range2126: + call void @finch_panic_index(ptr @.str.1230, i64 328, i64 %t34, i64 %t36) + unreachable +inrange2127: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i64 %t34 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1231, i64 1, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a41 + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t46 = load i64, ptr %t45 + call void @finch_str_from_int(ptr %a47, i64 %t46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t44, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t44, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.1232, i64 1, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t61 = load i64, ptr %t60 + call void @finch_str_from_int(ptr %a62, i64 %t61) + %t63 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t59, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t59, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.1233, i64 9, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t74, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t74, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic2128, label %ok2129 +panic2128: + call void @finch_panic(ptr @.str.1234, i64 328, ptr @.str.1235) + unreachable +ok2129: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 20 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } %t80, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t80, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + %t90 = extractvalue { ptr, i64, i64 } %t89, 1 + %t91 = trunc i64 %t90 to i32 + %t92 = extractvalue { ptr, i64, i64 } %t89, 0 + %t93 = icmp eq ptr %t92, null + %t94 = select i1 %t93, ptr @.str.1236, ptr %t92 + %t95 = call i32 (ptr, ...) @printf(ptr @.str.1237, i32 %t91, ptr %t94) + store { ptr, i64, i64 } %t89, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = call i32 (ptr, ...) @printf(ptr @.str.1238) + %t98 = trunc i64 1 to i32 + %t99 = call i32 @fflush(ptr null) + call void @exit(i32 %t98) + ret void +} + +define internal void @finch.gen.emit(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2130, label %ok2131 +panic2130: + call void @finch_panic(ptr @.str.1239, i64 334, ptr @.str.1240) + unreachable +ok2131: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 36 + %t6 = load i64, ptr %t5 + %t7 = icmp sge i64 %t6, 0 + br label %logic.from2132 +logic.from2132: + br i1 %t7, label %logic.rhs2133, label %logic.end2134 +logic.rhs2133: + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1242, i64 5, i64 0 }, ptr %a11 + %t12 = call i64 @finch_str_find(ptr %a9, ptr %a11) + %t13 = icmp sge i64 %t12, 0 + br label %logic.rend2135 +logic.rend2135: + br label %logic.end2134 +logic.end2134: + %t14 = phi i1 [ false, %logic.from2132 ], [ %t13, %logic.rend2135 ] + br i1 %t14, label %then2136, label %endif2138 +then2136: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic2139, label %ok2140 +panic2139: + call void @finch_panic(ptr @.str.1243, i64 335, ptr @.str.1244) + unreachable +ok2140: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 4 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1245, i64 2, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1246, i64 8, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + %t29 = load ptr, ptr %a1 + %t30 = call i64 @finch.gen.dbgLocation(ptr %t29) + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t28, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t28, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + %t39 = load i64, ptr %t18 + %t40 = add i64 %t39, 1 + call void @finch_arr_reserve(ptr %t17, i64 %t40, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t41 = load ptr, ptr %t17 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t39 + store { ptr, i64, i64 } %t38, ptr %t42 + store i64 %t40, ptr %t18 + ret void +endif2138: + %t43 = load ptr, ptr %a1 + %t44 = icmp eq ptr %t43, null + br i1 %t44, label %panic2141, label %ok2142 +panic2141: + call void @finch_panic(ptr @.str.1247, i64 338, ptr @.str.1248) + unreachable +ok2142: + %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 4 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1249, i64 2, i64 0 }, ptr %a49 + store { ptr, i64, i64 } %t47, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a48 + %t52 = load i64, ptr %t46 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %t45, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %t45 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 + store { ptr, i64, i64 } %t51, ptr %t55 + store i64 %t53, ptr %t46 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.tmpName(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic2143, label %ok2144 +panic2143: + call void @finch_panic(ptr @.str.1250, i64 342, ptr @.str.1251) + unreachable +ok2144: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 6 + %t5 = load i64, ptr %t4 + %t6 = add i64 %t5, 1 + store i64 %t6, ptr %t4 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic2145, label %ok2146 +panic2145: + call void @finch_panic(ptr @.str.1253, i64 343, ptr @.str.1254) + unreachable +ok2146: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 6 + %t10 = load i64, ptr %t9 + call void @finch_str_from_int(ptr %a11, i64 %t10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1252, i64 2, i64 0 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + ret { ptr, i64, i64 } %t17 +} + +define internal { ptr, i64, i64 } @finch.gen.newLabel(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2147, label %ok2148 +panic2147: + call void @finch_panic(ptr @.str.1255, i64 347, ptr @.str.1256) + unreachable +ok2148: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 7 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + store i64 %t7, ptr %t5 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic2149, label %ok2150 +panic2149: + call void @finch_panic(ptr @.str.1257, i64 348, ptr @.str.1258) + unreachable +ok2150: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 7 + %t12 = load i64, ptr %t11 + call void @finch_str_from_int(ptr %a13, i64 %t12) + %t14 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t8, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + ret { ptr, i64, i64 } %t19 +} + +define internal void @finch.gen.label(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2151, label %ok2152 +panic2151: + call void @finch_panic(ptr @.str.1259, i64 352, ptr @.str.1260) + unreachable +ok2152: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 4 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1261, i64 1, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + %t12 = load i64, ptr %t6 + %t13 = add i64 %t12, 1 + call void @finch_arr_reserve(ptr %t5, i64 %t13, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t14 = load ptr, ptr %t5 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t12 + store { ptr, i64, i64 } %t11, ptr %t15 + store i64 %t13, ptr %t6 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic2153, label %ok2154 +panic2153: + call void @finch_panic(ptr @.str.1262, i64 353, ptr @.str.1263) + unreachable +ok2154: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 + store i1 false, ptr %t18 + ret void +} + +define internal void @finch.gen.br(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2155, label %ok2156 +panic2155: + call void @finch_panic(ptr @.str.1264, i64 357, ptr @.str.1265) + unreachable +ok2156: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 9 + %t6 = load i1, ptr %t5 + %t7 = xor i1 %t6, true + br i1 %t7, label %then2157, label %endif2159 +then2157: + %t8 = load ptr, ptr %a1 + %t9 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1266, i64 10, i64 0 }, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.emit(ptr %t8, { ptr, i64, i64 } %t13) + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic2160, label %ok2161 +panic2160: + call void @finch_panic(ptr @.str.1267, i64 359, ptr @.str.1268) + unreachable +ok2161: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 9 + store i1 true, ptr %t17 + br label %endif2159 +endif2159: + ret void +} + +define internal void @finch.gen.condBr(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1269, i64 6, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1270, i64 9, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t15, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1271, i64 9, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t26, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a28 + call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic2162, label %ok2163 +panic2162: + call void @finch_panic(ptr @.str.1272, i64 365, ptr @.str.1273) + unreachable +ok2163: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 9 + store i1 true, ptr %t36 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.alloca(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2164, label %ok2165 +panic2164: + call void @finch_panic(ptr @.str.1274, i64 369, ptr @.str.1275) + unreachable +ok2165: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 6 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + store i64 %t7, ptr %t5 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic2166, label %ok2167 +panic2166: + call void @finch_panic(ptr @.str.1277, i64 370, ptr @.str.1278) + unreachable +ok2167: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 6 + %t11 = load i64, ptr %t10 + call void @finch_str_from_int(ptr %a12, i64 %t11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1276, i64 2, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic2168, label %ok2169 +panic2168: + call void @finch_panic(ptr @.str.1279, i64 371, ptr @.str.1280) + unreachable +ok2169: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 5 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.1281, i64 2, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1282, i64 10, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1283, i64 10, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load i64, ptr %t23 + %t46 = add i64 %t45, 1 + call void @finch_arr_reserve(ptr %t22, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t47 = load ptr, ptr %t22 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 + store { ptr, i64, i64 } %t44, ptr %t48 + store i64 %t46, ptr %t23 + %t49 = load { ptr, i64, i64 }, ptr %a19 + ret { ptr, i64, i64 } %t49 +} + +define internal { ptr, i64, i64 } @finch.gen.load(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t4) + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1284, i64 8, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t12, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t12, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1285, i64 6, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + %t24 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t23, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t23, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.emit(ptr %t7, { ptr, i64, i64 } %t29) + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a6 + ret { ptr, i64, i64 } %t31 +} + +define internal void @finch.gen.store(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1286, i64 6, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1287, i64 1, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t15, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1288, i64 6, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + %t27 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t26, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a28 + call void @finch.gen.emit(ptr %t5, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.spill(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t6 = load %S.ast.Type, ptr %t5 + %t7 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t4, %S.ast.Type %t6) + %t8 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } %t7) + store { ptr, i64, i64 } %t7, ptr %a9 + call void @finch_str_drop(ptr %a9) + store { ptr, i64, i64 } %t8, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load ptr, ptr %a1 + %t13 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t14 = load %S.ast.Type, ptr %t13 + %t15 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t12, %S.ast.Type %t14) + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.store(ptr %t11, { ptr, i64, i64 } %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t20 +} + +define internal { ptr, i64, i64 } @finch.gen.op(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t3) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1289, i64 3, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t11, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t11, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.gen.emit(ptr %t6, { ptr, i64, i64 } %t17) + store { ptr, i64, i64 } %t17, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a5 + ret { ptr, i64, i64 } %t19 +} + +define internal i1 @finch.gen.has({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a5 + %t6 = load i64, ptr %t3 + %t7 = load ptr, ptr %a1 + store i64 0, ptr %a8 + br label %find.cond2170 +find.cond2170: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t6 + br i1 %t10, label %find.body2171, label %find.end2174 +find.body2171: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } %t4, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %find.hit2172, label %find.next2173 +find.hit2172: + store i64 %t9, ptr %a5 + br label %find.end2174 +find.next2173: + %t17 = add i64 %t9, 1 + store i64 %t17, ptr %a8 + br label %find.cond2170 +find.end2174: + %t18 = load i64, ptr %a5 + %t19 = icmp sge i64 %t18, 0 + ret i1 %t19 +} + +define internal %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } %t2) + ret %S.ast.Type %t3 +} + +define internal i1 @finch.gen.isSigned(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1290, i64 3, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br label %logic.from2175 +logic.from2175: + br i1 %t12, label %logic.end2177, label %logic.rhs2176 +logic.rhs2176: + %t13 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1291, i64 2, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br label %logic.rend2178 +logic.rend2178: + br label %logic.end2177 +logic.end2177: + %t18 = phi i1 [ true, %logic.from2175 ], [ %t17, %logic.rend2178 ] + br label %logic.from2179 +logic.from2179: + br i1 %t18, label %logic.end2181, label %logic.rhs2180 +logic.rhs2180: + %t19 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1292, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend2182 +logic.rend2182: + br label %logic.end2181 +logic.end2181: + %t24 = phi i1 [ true, %logic.from2179 ], [ %t23, %logic.rend2182 ] + br label %logic.from2183 +logic.from2183: + br i1 %t24, label %logic.end2185, label %logic.rhs2184 +logic.rhs2184: + %t25 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.1293, i64 3, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend2186 +logic.rend2186: + br label %logic.end2185 +logic.end2185: + %t30 = phi i1 [ true, %logic.from2183 ], [ %t29, %logic.rend2186 ] + call void @finch_str_drop(ptr %a7) + ret i1 %t30 +} + +define internal i1 @finch.gen.isUnsigned(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1294, i64 2, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br label %logic.from2187 +logic.from2187: + br i1 %t12, label %logic.end2189, label %logic.rhs2188 +logic.rhs2188: + %t13 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1295, i64 3, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br label %logic.rend2190 +logic.rend2190: + br label %logic.end2189 +logic.end2189: + %t18 = phi i1 [ true, %logic.from2187 ], [ %t17, %logic.rend2190 ] + br label %logic.from2191 +logic.from2191: + br i1 %t18, label %logic.end2193, label %logic.rhs2192 +logic.rhs2192: + %t19 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1296, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend2194 +logic.rend2194: + br label %logic.end2193 +logic.end2193: + %t24 = phi i1 [ true, %logic.from2191 ], [ %t23, %logic.rend2194 ] + br label %logic.from2195 +logic.from2195: + br i1 %t24, label %logic.end2197, label %logic.rhs2196 +logic.rhs2196: + %t25 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.1297, i64 3, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br label %logic.rend2198 +logic.rend2198: + br label %logic.end2197 +logic.end2197: + %t30 = phi i1 [ true, %logic.from2195 ], [ %t29, %logic.rend2198 ] + call void @finch_str_drop(ptr %a7) + ret i1 %t30 +} + +define internal i1 @finch.gen.isInt(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + %t3 = call i1 @finch.gen.isSigned(%S.ast.Type %t2) + br label %logic.from2199 +logic.from2199: + br i1 %t3, label %logic.end2201, label %logic.rhs2200 +logic.rhs2200: + %t4 = load %S.ast.Type, ptr %a1 + %t5 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t4) + br label %logic.rend2202 +logic.rend2202: + br label %logic.end2201 +logic.end2201: + %t6 = phi i1 [ true, %logic.from2199 ], [ %t5, %logic.rend2202 ] + ret i1 %t6 +} + +define internal i1 @finch.gen.isFloat(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.1298, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br label %logic.from2203 +logic.from2203: + br i1 %t7, label %logic.end2205, label %logic.rhs2204 +logic.rhs2204: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1299, i64 3, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.rend2206 +logic.rend2206: + br label %logic.end2205 +logic.end2205: + %t14 = phi i1 [ true, %logic.from2203 ], [ %t13, %logic.rend2206 ] + ret i1 %t14 +} + +define internal i1 @finch.gen.isNumber(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + %t3 = call i1 @finch.gen.isInt(%S.ast.Type %t2) + br label %logic.from2207 +logic.from2207: + br i1 %t3, label %logic.end2209, label %logic.rhs2208 +logic.rhs2208: + %t4 = load %S.ast.Type, ptr %a1 + %t5 = call i1 @finch.gen.isFloat(%S.ast.Type %t4) + br label %logic.rend2210 +logic.rend2210: + br label %logic.end2209 +logic.end2209: + %t6 = phi i1 [ true, %logic.from2207 ], [ %t5, %logic.rend2210 ] + ret i1 %t6 +} + +define internal i64 @finch.gen.bitsOf(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.1300, i64 4, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then2211, label %endif2213 +then2211: + call void @finch_str_drop(ptr %a7) + ret i64 1 +endif2213: + %t13 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1301, i64 4, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br label %logic.from2214 +logic.from2214: + br i1 %t17, label %logic.end2216, label %logic.rhs2215 +logic.rhs2215: + %t18 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.1302, i64 2, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.rend2217 +logic.rend2217: + br label %logic.end2216 +logic.end2216: + %t23 = phi i1 [ true, %logic.from2214 ], [ %t22, %logic.rend2217 ] + br label %logic.from2218 +logic.from2218: + br i1 %t23, label %logic.end2220, label %logic.rhs2219 +logic.rhs2219: + %t24 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1303, i64 2, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.rend2221 +logic.rend2221: + br label %logic.end2220 +logic.end2220: + %t29 = phi i1 [ true, %logic.from2218 ], [ %t28, %logic.rend2221 ] + br i1 %t29, label %then2222, label %endif2224 +then2222: + call void @finch_str_drop(ptr %a7) + ret i64 8 +endif2224: + %t30 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t30, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.1304, i64 3, i64 0 }, ptr %a32 + %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) + %t34 = icmp ne i32 %t33, 0 + br label %logic.from2225 +logic.from2225: + br i1 %t34, label %logic.end2227, label %logic.rhs2226 +logic.rhs2226: + %t35 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.1305, i64 3, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.rend2228 +logic.rend2228: + br label %logic.end2227 +logic.end2227: + %t40 = phi i1 [ true, %logic.from2225 ], [ %t39, %logic.rend2228 ] + br i1 %t40, label %then2229, label %endif2231 +then2229: + call void @finch_str_drop(ptr %a7) + ret i64 16 +endif2231: + %t41 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1306, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.from2232 +logic.from2232: + br i1 %t45, label %logic.end2234, label %logic.rhs2233 +logic.rhs2233: + %t46 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t46, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.1307, i64 3, i64 0 }, ptr %a48 + %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) + %t50 = icmp ne i32 %t49, 0 + br label %logic.rend2235 +logic.rend2235: + br label %logic.end2234 +logic.end2234: + %t51 = phi i1 [ true, %logic.from2232 ], [ %t50, %logic.rend2235 ] + br label %logic.from2236 +logic.from2236: + br i1 %t51, label %logic.end2238, label %logic.rhs2237 +logic.rhs2237: + %t52 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.1308, i64 3, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br label %logic.rend2239 +logic.rend2239: + br label %logic.end2238 +logic.end2238: + %t57 = phi i1 [ true, %logic.from2236 ], [ %t56, %logic.rend2239 ] + br i1 %t57, label %then2240, label %endif2242 +then2240: + call void @finch_str_drop(ptr %a7) + ret i64 32 +endif2242: + call void @finch_str_drop(ptr %a7) + ret i64 64 +} + +define internal i1 @finch.gen.widens(%S.ast.Type %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a1 + %t4 = call i1 @finch.gen.isInt(%S.ast.Type %t3) + %t5 = xor i1 %t4, true + br label %logic.from2243 +logic.from2243: + br i1 %t5, label %logic.end2245, label %logic.rhs2244 +logic.rhs2244: + %t6 = load %S.ast.Type, ptr %a2 + %t7 = call i1 @finch.gen.isInt(%S.ast.Type %t6) + %t8 = xor i1 %t7, true + br label %logic.rend2246 +logic.rend2246: + br label %logic.end2245 +logic.end2245: + %t9 = phi i1 [ true, %logic.from2243 ], [ %t8, %logic.rend2246 ] + br i1 %t9, label %then2247, label %endif2249 +then2247: + ret i1 false +endif2249: + %t10 = load %S.ast.Type, ptr %a1 + %t11 = call i1 @finch.gen.isSigned(%S.ast.Type %t10) + br label %logic.from2250 +logic.from2250: + br i1 %t11, label %logic.rhs2251, label %logic.end2252 +logic.rhs2251: + %t12 = load %S.ast.Type, ptr %a2 + %t13 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t12) + br label %logic.rend2253 +logic.rend2253: + br label %logic.end2252 +logic.end2252: + %t14 = phi i1 [ false, %logic.from2250 ], [ %t13, %logic.rend2253 ] + br i1 %t14, label %then2254, label %endif2256 +then2254: + ret i1 false +endif2256: + %t15 = load %S.ast.Type, ptr %a2 + %t16 = call i64 @finch.gen.bitsOf(%S.ast.Type %t15) + %t17 = load %S.ast.Type, ptr %a1 + %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) + %t19 = icmp sgt i64 %t16, %t18 + ret i1 %t19 +} + +define internal i1 @finch.gen.fits({ ptr, i64, i64 } %p0, %S.ast.Type %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a13 = alloca i64, align 16 + %a31 = alloca i64, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load %S.ast.Type, ptr %a3 + %t5 = call i1 @finch.gen.isInt(%S.ast.Type %t4) + %t6 = xor i1 %t5, true + br i1 %t6, label %then2257, label %endif2259 +then2257: + ret i1 false +endif2259: + %t7 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = call i64 @finch_str_to_int(ptr %a8, ptr @.str.1309, i64 464) + store i64 %t9, ptr %a10 + %t11 = load %S.ast.Type, ptr %a3 + %t12 = call i64 @finch.gen.bitsOf(%S.ast.Type %t11) + store i64 %t12, ptr %a13 + %t14 = load i64, ptr %a10 + %t15 = icmp slt i64 %t14, 0 + br i1 %t15, label %then2260, label %endif2262 +then2260: + %t16 = load %S.ast.Type, ptr %a3 + %t17 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t16) + br i1 %t17, label %then2263, label %endif2265 +then2263: + ret i1 false +endif2265: + %t18 = load i64, ptr %a13 + %t19 = icmp eq i64 %t18, 64 + br i1 %t19, label %then2266, label %endif2268 +then2266: + ret i1 true +endif2268: + %t20 = load i64, ptr %a10 + %t21 = load i64, ptr %a13 + %t22 = sub i64 %t21, 1 + %t23 = shl i64 1, %t22 + %t24 = sub i64 0, %t23 + %t25 = icmp sge i64 %t20, %t24 + ret i1 %t25 +endif2262: + %t26 = load i64, ptr %a13 + %t27 = icmp eq i64 %t26, 64 + br i1 %t27, label %then2269, label %endif2271 +then2269: + ret i1 true +endif2271: + %t28 = load i64, ptr %a13 + %t29 = shl i64 1, %t28 + %t30 = sub i64 %t29, 1 + store i64 %t30, ptr %a31 + %t32 = load %S.ast.Type, ptr %a3 + %t33 = call i1 @finch.gen.isSigned(%S.ast.Type %t32) + br i1 %t33, label %then2272, label %endif2274 +then2272: + %t34 = load i64, ptr %a13 + %t35 = sub i64 %t34, 1 + %t36 = shl i64 1, %t35 + %t37 = sub i64 %t36, 1 + store i64 %t37, ptr %a31 + br label %endif2274 +endif2274: + %t38 = load i64, ptr %a10 + %t39 = load i64, ptr %a31 + %t40 = icmp sle i64 %t38, %t39 + ret i1 %t40 +} + +define internal i64 @finch.gen.findStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2275, label %ok2276 +panic2275: + call void @finch_panic(ptr @.str.1310, i64 486, ptr @.str.1311) + unreachable +ok2276: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 16 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond2277 +for.cond2277: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body2278, label %for.end2280 +for.body2278: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic2281, label %ok2282 +panic2281: + call void @finch_panic(ptr @.str.1312, i64 487, ptr @.str.1313) + unreachable +ok2282: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range2283, label %inrange2284 +range2283: + call void @finch_panic_index(ptr @.str.1314, i64 487, i64 %t15, i64 %t17) + unreachable +inrange2284: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.StructDef, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.StructDef, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from2285 +logic.from2285: + br i1 %t27, label %logic.rhs2286, label %logic.end2287 +logic.rhs2286: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2288, label %ok2289 +panic2288: + call void @finch_panic(ptr @.str.1315, i64 487, ptr @.str.1316) + unreachable +ok2289: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range2290, label %inrange2291 +range2290: + call void @finch_panic_index(ptr @.str.1317, i64 487, i64 %t31, i64 %t33) + unreachable +inrange2291: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend2292 +logic.rend2292: + br label %logic.end2287 +logic.end2287: + %t44 = phi i1 [ false, %logic.from2285 ], [ %t43, %logic.rend2292 ] + br i1 %t44, label %then2293, label %endif2295 +then2293: + %t45 = load i64, ptr %a9 + ret i64 %t45 +endif2295: + br label %for.step2279 +for.step2279: + %t46 = load i64, ptr %a9 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a9 + br label %for.cond2277 +for.end2280: + ret i64 -1 +} + +define internal i64 @finch.gen.findEnum(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2296, label %ok2297 +panic2296: + call void @finch_panic(ptr @.str.1318, i64 495, ptr @.str.1319) + unreachable +ok2297: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond2298 +for.cond2298: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body2299, label %for.end2301 +for.body2299: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic2302, label %ok2303 +panic2302: + call void @finch_panic(ptr @.str.1320, i64 496, ptr @.str.1321) + unreachable +ok2303: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 21 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range2304, label %inrange2305 +range2304: + call void @finch_panic_index(ptr @.str.1322, i64 496, i64 %t15, i64 %t17) + unreachable +inrange2305: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.EnumDef, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from2306 +logic.from2306: + br i1 %t27, label %logic.rhs2307, label %logic.end2308 +logic.rhs2307: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2309, label %ok2310 +panic2309: + call void @finch_panic(ptr @.str.1323, i64 496, ptr @.str.1324) + unreachable +ok2310: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 21 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range2311, label %inrange2312 +range2311: + call void @finch_panic_index(ptr @.str.1325, i64 496, i64 %t31, i64 %t33) + unreachable +inrange2312: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.EnumDef, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend2313 +logic.rend2313: + br label %logic.end2308 +logic.end2308: + %t44 = phi i1 [ false, %logic.from2306 ], [ %t43, %logic.rend2313 ] + br i1 %t44, label %then2314, label %endif2316 +then2314: + %t45 = load i64, ptr %a9 + ret i64 %t45 +endif2316: + br label %for.step2300 +for.step2300: + %t46 = load i64, ptr %a9 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a9 + br label %for.cond2298 +for.end2301: + ret i64 -1 +} + +define internal i64 @finch.gen.findSum(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2317, label %ok2318 +panic2317: + call void @finch_panic(ptr @.str.1326, i64 504, ptr @.str.1327) + unreachable +ok2318: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond2319 +for.cond2319: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body2320, label %for.end2322 +for.body2320: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic2323, label %ok2324 +panic2323: + call void @finch_panic(ptr @.str.1328, i64 505, ptr @.str.1329) + unreachable +ok2324: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 22 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range2325, label %inrange2326 +range2325: + call void @finch_panic_index(ptr @.str.1330, i64 505, i64 %t15, i64 %t17) + unreachable +inrange2326: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.SumDef, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.SumDef, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from2327 +logic.from2327: + br i1 %t27, label %logic.rhs2328, label %logic.end2329 +logic.rhs2328: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2330, label %ok2331 +panic2330: + call void @finch_panic(ptr @.str.1331, i64 505, ptr @.str.1332) + unreachable +ok2331: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 22 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range2332, label %inrange2333 +range2332: + call void @finch_panic_index(ptr @.str.1333, i64 505, i64 %t31, i64 %t33) + unreachable +inrange2333: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.SumDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.SumDef, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend2334 +logic.rend2334: + br label %logic.end2329 +logic.end2329: + %t44 = phi i1 [ false, %logic.from2327 ], [ %t43, %logic.rend2334 ] + br i1 %t44, label %then2335, label %endif2337 +then2335: + %t45 = load i64, ptr %a9 + ret i64 %t45 +endif2337: + br label %for.step2321 +for.step2321: + %t46 = load i64, ptr %a9 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a9 + br label %for.cond2319 +for.end2322: + ret i64 -1 +} + +define internal i64 @finch.gen.progOf(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2338, label %ok2339 +panic2338: + call void @finch_panic(ptr @.str.1334, i64 513, ptr @.str.1335) + unreachable +ok2339: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond2340 +for.cond2340: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body2341, label %for.end2343 +for.body2341: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2344, label %ok2345 +panic2344: + call void @finch_panic(ptr @.str.1336, i64 514, ptr @.str.1337) + unreachable +ok2345: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 0 + %t14 = load i64, ptr %a8 + %t15 = load { ptr, i64, i64 }, ptr %t13 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 %t14, %t16 + br i1 %t17, label %range2346, label %inrange2347 +range2346: + call void @finch_panic_index(ptr @.str.1338, i64 514, i64 %t14, i64 %t16) + unreachable +inrange2347: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i64 %t14 + %t20 = getelementptr inbounds %S.ast.Program, ptr %t19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } %t22, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then2348, label %endif2350 +then2348: + %t27 = load i64, ptr %a8 + ret i64 %t27 +endif2350: + br label %for.step2342 +for.step2342: + %t28 = load i64, ptr %a8 + %t29 = add i64 %t28, 1 + store i64 %t29, ptr %a8 + br label %for.cond2340 +for.end2343: + ret i64 -1 +} + +define internal i1 @finch.gen.imports(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca i64, align 16 + %a23 = alloca i64, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2351, label %ok2352 +panic2351: + call void @finch_panic(ptr @.str.1339, i64 522, ptr @.str.1340) + unreachable +ok2352: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic2353, label %ok2354 +panic2353: + call void @finch_panic(ptr @.str.1341, i64 522, ptr @.str.1342) + unreachable +ok2354: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 14 + %t10 = load { ptr, i64, i64 }, ptr %t9 + %t11 = call i64 @finch.gen.progOf(ptr %t6, { ptr, i64, i64 } %t10) + %t12 = load { ptr, i64, i64 }, ptr %t5 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range2355, label %inrange2356 +range2355: + call void @finch_panic_index(ptr @.str.1343, i64 522, i64 %t11, i64 %t13) + unreachable +inrange2356: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Program, ptr %t15, i64 %t11 + %t17 = getelementptr inbounds %S.ast.Program, ptr %t16, i32 0, i32 2 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a20 + %t21 = load i64, ptr %t18 + %t22 = load ptr, ptr %t17 + store i64 0, ptr %a23 + br label %find.cond2357 +find.cond2357: + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, %t21 + br i1 %t25, label %find.body2358, label %find.end2361 +find.body2358: + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t24 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } %t19, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %find.hit2359, label %find.next2360 +find.hit2359: + store i64 %t24, ptr %a20 + br label %find.end2361 +find.next2360: + %t32 = add i64 %t24, 1 + store i64 %t32, ptr %a23 + br label %find.cond2357 +find.end2361: + %t33 = load i64, ptr %a20 + %t34 = icmp sge i64 %t33, 0 + ret i1 %t34 +} + +define internal %S.ast.Type @finch.gen.resolve(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca %S.ast.Type, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca %S.ast.Type, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca %S.ast.Type, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca %S.ast.Type, align 16 + %a142 = alloca %S.ast.Type, align 16 + %a155 = alloca %S.ast.Type, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca %S.ast.Type, align 16 + %a164 = alloca %S.ast.Type, align 16 + %a181 = alloca i64, align 16 + %a184 = alloca i64, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca i64, align 16 + %a209 = alloca i64, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca %S.ast.Type, align 16 + %a227 = alloca %S.ast.Type, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca i64, align 16 + %a243 = alloca %S.ast.Type, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.1344, i64 5, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then2362, label %endif2364 +then2362: + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 0, %t13 + br i1 %t14, label %range2365, label %inrange2366 +range2365: + call void @finch_panic_index(ptr @.str.1345, i64 527, i64 0, i64 %t13) + unreachable +inrange2366: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = load %S.ast.Node, ptr %a3 + %t19 = call %S.ast.Type @finch.gen.resolve(ptr %t10, %S.ast.Type %t17, %S.ast.Node %t18) + %t20 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t19) + store %S.ast.Type %t19, ptr %a21 + call void @finch.drop.S_ast_Type(ptr %a21) + ret %S.ast.Type %t20 +endif2364: + %t22 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1346, i64 3, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then2367, label %endif2369 +then2367: + %t28 = load ptr, ptr %a1 + %t29 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 0, %t31 + br i1 %t32, label %range2370, label %inrange2371 +range2370: + call void @finch_panic_index(ptr @.str.1347, i64 530, i64 0, i64 %t31) + unreachable +inrange2371: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Type, ptr %t33, i64 0 + %t35 = load %S.ast.Type, ptr %t34 + %t36 = load %S.ast.Node, ptr %a3 + %t37 = call %S.ast.Type @finch.gen.resolve(ptr %t28, %S.ast.Type %t35, %S.ast.Node %t36) + store %S.ast.Type %t37, ptr %a38 + %t39 = load %S.ast.Type, ptr %a38 + %t40 = call i1 @finch.gen.isInt(%S.ast.Type %t39) + %t41 = xor i1 %t40, true + br label %logic.from2372 +logic.from2372: + br i1 %t41, label %logic.rhs2373, label %logic.end2374 +logic.rhs2373: + %t42 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.1348, i64 4, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp eq i32 %t46, 0 + br label %logic.rend2375 +logic.rend2375: + br label %logic.end2374 +logic.end2374: + %t48 = phi i1 [ false, %logic.from2372 ], [ %t47, %logic.rend2375 ] + br label %logic.from2376 +logic.from2376: + br i1 %t48, label %logic.rhs2377, label %logic.end2378 +logic.rhs2377: + %t49 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.1349, i64 4, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp eq i32 %t53, 0 + br label %logic.rend2379 +logic.rend2379: + br label %logic.end2378 +logic.end2378: + %t55 = phi i1 [ false, %logic.from2376 ], [ %t54, %logic.rend2379 ] + br label %logic.from2380 +logic.from2380: + br i1 %t55, label %logic.rhs2381, label %logic.end2382 +logic.rhs2381: + %t56 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.1350, i64 3, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp eq i32 %t60, 0 + br label %logic.rend2383 +logic.rend2383: + br label %logic.end2382 +logic.end2382: + %t62 = phi i1 [ false, %logic.from2380 ], [ %t61, %logic.rend2383 ] + br label %logic.from2384 +logic.from2384: + br i1 %t62, label %logic.rhs2385, label %logic.end2386 +logic.rhs2385: + %t63 = getelementptr inbounds %S.ast.Type, ptr %a38, i32 0, i32 0 + %t64 = load { ptr, i64, i64 }, ptr %t63 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.1351, i64 4, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp eq i32 %t67, 0 + br label %logic.rend2387 +logic.rend2387: + br label %logic.end2386 +logic.end2386: + %t69 = phi i1 [ false, %logic.from2384 ], [ %t68, %logic.rend2387 ] + br i1 %t69, label %then2388, label %endif2390 +then2388: + %t70 = load ptr, ptr %a1 + %t71 = load %S.ast.Node, ptr %a3 + %t72 = load %S.ast.Type, ptr %a38 + %t73 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t72) + store { ptr, i64, i64 } { ptr @.str.1352, i64 63, i64 0 }, ptr %a75 + store { ptr, i64, i64 } %t73, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif2390 +endif2390: + %t80 = load ptr, ptr %a1 + %t81 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t82 = load { ptr, i64, i64 }, ptr %t81 + %t83 = extractvalue { ptr, i64, i64 } %t82, 1 + %t84 = icmp uge i64 1, %t83 + br i1 %t84, label %range2391, label %inrange2392 +range2391: + call void @finch_panic_index(ptr @.str.1353, i64 534, i64 1, i64 %t83) + unreachable +inrange2392: + %t85 = extractvalue { ptr, i64, i64 } %t82, 0 + %t86 = getelementptr inbounds %S.ast.Type, ptr %t85, i64 1 + %t87 = load %S.ast.Type, ptr %t86 + %t88 = load %S.ast.Node, ptr %a3 + %t89 = call %S.ast.Type @finch.gen.resolve(ptr %t80, %S.ast.Type %t87, %S.ast.Node %t88) + store %S.ast.Type %t89, ptr %a90 + %t91 = getelementptr inbounds %S.ast.Type, ptr %a90, i32 0, i32 0 + %t92 = load { ptr, i64, i64 }, ptr %t91 + store { ptr, i64, i64 } %t92, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.1354, i64 4, i64 0 }, ptr %a94 + %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) + %t96 = icmp ne i32 %t95, 0 + br i1 %t96, label %then2393, label %endif2395 +then2393: + %t97 = load ptr, ptr %a1 + %t98 = load %S.ast.Node, ptr %a3 + call void @finch.gen.fail(ptr %t97, %S.ast.Node %t98, { ptr, i64, i64 } { ptr @.str.1355, i64 41, i64 0 }) + br label %endif2395 +endif2395: + %t99 = load %S.ast.Type, ptr %a38 + %t100 = load %S.ast.Type, ptr %a90 + %t101 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t99, %S.ast.Type %t100) + call void @finch.drop.S_ast_Type(ptr %a90) + call void @finch.drop.S_ast_Type(ptr %a38) + ret %S.ast.Type %t101 +endif2369: + %t102 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.1356, i64 5, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br i1 %t107, label %then2396, label %endif2398 +then2396: + %t108 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1357, i64 5, i64 0 }, 0 + %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t110 = load i64, ptr %t109 + %t111 = insertvalue %S.ast.Type %t108, i64 %t110, 4 + store %S.ast.Type %t111, ptr %a112 + %t113 = getelementptr inbounds %S.ast.Type, ptr %a112, i32 0, i32 1 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i32 0, i32 1 + %t115 = load ptr, ptr %a1 + %t116 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t117 = load { ptr, i64, i64 }, ptr %t116 + %t118 = extractvalue { ptr, i64, i64 } %t117, 1 + %t119 = icmp uge i64 0, %t118 + br i1 %t119, label %range2399, label %inrange2400 +range2399: + call void @finch_panic_index(ptr @.str.1358, i64 542, i64 0, i64 %t118) + unreachable +inrange2400: + %t120 = extractvalue { ptr, i64, i64 } %t117, 0 + %t121 = getelementptr inbounds %S.ast.Type, ptr %t120, i64 0 + %t122 = load %S.ast.Type, ptr %t121 + %t123 = load %S.ast.Node, ptr %a3 + %t124 = call %S.ast.Type @finch.gen.resolve(ptr %t115, %S.ast.Type %t122, %S.ast.Node %t123) + %t125 = load i64, ptr %t114 + %t126 = add i64 %t125, 1 + call void @finch_arr_reserve(ptr %t113, i64 %t126, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t127 = load ptr, ptr %t113 + %t128 = getelementptr inbounds %S.ast.Type, ptr %t127, i64 %t125 + store %S.ast.Type %t124, ptr %t128 + store i64 %t126, ptr %t114 + %t129 = load %S.ast.Type, ptr %a112 + ret %S.ast.Type %t129 +endif2398: + %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t131 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t131, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.1359, i64 3, i64 0 }, ptr %a133 + %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) + %t135 = icmp ne i32 %t134, 0 + br i1 %t135, label %then2401, label %endif2403 +then2401: + %t136 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 + %t138 = load i64, ptr %t137 + %t139 = icmp eq i64 %t138, 0 + br i1 %t139, label %then2404, label %endif2406 +then2404: + %t140 = load %S.ast.Type, ptr %a2 + store %S.ast.Type %t140, ptr %a141 + call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) + %t143 = load %S.ast.Type, ptr %a142 + ret %S.ast.Type %t143 +endif2406: + %t144 = load ptr, ptr %a1 + %t145 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t146 = load { ptr, i64, i64 }, ptr %t145 + %t147 = extractvalue { ptr, i64, i64 } %t146, 1 + %t148 = icmp uge i64 0, %t147 + br i1 %t148, label %range2407, label %inrange2408 +range2407: + call void @finch_panic_index(ptr @.str.1360, i64 549, i64 0, i64 %t147) + unreachable +inrange2408: + %t149 = extractvalue { ptr, i64, i64 } %t146, 0 + %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 0 + %t151 = load %S.ast.Type, ptr %t150 + %t152 = load %S.ast.Node, ptr %a3 + %t153 = call %S.ast.Type @finch.gen.resolve(ptr %t144, %S.ast.Type %t151, %S.ast.Node %t152) + %t154 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t153) + store %S.ast.Type %t153, ptr %a155 + call void @finch.drop.S_ast_Type(ptr %a155) + ret %S.ast.Type %t154 +endif2403: + %t156 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.1361, i64 5, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) + %t161 = icmp eq i32 %t160, 0 + br i1 %t161, label %then2409, label %endif2411 +then2409: + %t162 = load %S.ast.Type, ptr %a2 + store %S.ast.Type %t162, ptr %a163 + call void @finch.copy.S_ast_Type(ptr %a164, ptr %a163) + %t165 = load %S.ast.Type, ptr %a164 + ret %S.ast.Type %t165 +endif2411: + %t166 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i32 0, i32 1 + %t168 = load i64, ptr %t167 + %t169 = icmp eq i64 %t168, 0 + br label %logic.from2412 +logic.from2412: + br i1 %t169, label %logic.rhs2413, label %logic.end2414 +logic.rhs2413: + %t170 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t171 = getelementptr inbounds { ptr, i64, i64 }, ptr %t170, i32 0, i32 1 + %t172 = load i64, ptr %t171 + %t173 = icmp eq i64 %t172, 0 + br label %logic.rend2415 +logic.rend2415: + br label %logic.end2414 +logic.end2414: + %t174 = phi i1 [ false, %logic.from2412 ], [ %t173, %logic.rend2415 ] + br label %logic.from2416 +logic.from2416: + br i1 %t174, label %logic.rhs2417, label %logic.end2418 +logic.rhs2417: + %t175 = load ptr, ptr %a1 + %t176 = icmp eq ptr %t175, null + br i1 %t176, label %panic2419, label %ok2420 +panic2419: + call void @finch_panic(ptr @.str.1362, i64 555, ptr @.str.1363) + unreachable +ok2420: + %t177 = getelementptr inbounds %S.gen.Gen, ptr %t175, i32 0, i32 18 + %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %t177, i32 0, i32 1 + %t179 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t180 = load { ptr, i64, i64 }, ptr %t179 + store i64 -1, ptr %a181 + %t182 = load i64, ptr %t178 + %t183 = load ptr, ptr %t177 + store i64 0, ptr %a184 + br label %find.cond2421 +find.cond2421: + %t185 = load i64, ptr %a184 + %t186 = icmp slt i64 %t185, %t182 + br i1 %t186, label %find.body2422, label %find.end2425 +find.body2422: + %t187 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i64 %t185 + %t188 = load { ptr, i64, i64 }, ptr %t187 + store { ptr, i64, i64 } %t188, ptr %a189 + store { ptr, i64, i64 } %t180, ptr %a190 + %t191 = call i32 @finch_str_eq(ptr %a189, ptr %a190) + %t192 = icmp ne i32 %t191, 0 + br i1 %t192, label %find.hit2423, label %find.next2424 +find.hit2423: + store i64 %t185, ptr %a181 + br label %find.end2425 +find.next2424: + %t193 = add i64 %t185, 1 + store i64 %t193, ptr %a184 + br label %find.cond2421 +find.end2425: + %t194 = load i64, ptr %a181 + %t195 = icmp sge i64 %t194, 0 + br label %logic.rend2426 +logic.rend2426: + br label %logic.end2418 +logic.end2418: + %t196 = phi i1 [ false, %logic.from2416 ], [ %t195, %logic.rend2426 ] + br i1 %t196, label %then2427, label %endif2429 +then2427: + %t197 = load ptr, ptr %a1 + %t198 = icmp eq ptr %t197, null + br i1 %t198, label %panic2430, label %ok2431 +panic2430: + call void @finch_panic(ptr @.str.1364, i64 556, ptr @.str.1365) + unreachable +ok2431: + %t199 = getelementptr inbounds %S.gen.Gen, ptr %t197, i32 0, i32 19 + %t200 = load ptr, ptr %a1 + %t201 = icmp eq ptr %t200, null + br i1 %t201, label %panic2432, label %ok2433 +panic2432: + call void @finch_panic(ptr @.str.1366, i64 556, ptr @.str.1367) + unreachable +ok2433: + %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 18 + %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i32 0, i32 1 + %t204 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t205 = load { ptr, i64, i64 }, ptr %t204 + store i64 -1, ptr %a206 + %t207 = load i64, ptr %t203 + %t208 = load ptr, ptr %t202 + store i64 0, ptr %a209 + br label %find.cond2434 +find.cond2434: + %t210 = load i64, ptr %a209 + %t211 = icmp slt i64 %t210, %t207 + br i1 %t211, label %find.body2435, label %find.end2438 +find.body2435: + %t212 = getelementptr inbounds { ptr, i64, i64 }, ptr %t208, i64 %t210 + %t213 = load { ptr, i64, i64 }, ptr %t212 + store { ptr, i64, i64 } %t213, ptr %a214 + store { ptr, i64, i64 } %t205, ptr %a215 + %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) + %t217 = icmp ne i32 %t216, 0 + br i1 %t217, label %find.hit2436, label %find.next2437 +find.hit2436: + store i64 %t210, ptr %a206 + br label %find.end2438 +find.next2437: + %t218 = add i64 %t210, 1 + store i64 %t218, ptr %a209 + br label %find.cond2434 +find.end2438: + %t219 = load i64, ptr %a206 + %t220 = load { ptr, i64, i64 }, ptr %t199 + %t221 = extractvalue { ptr, i64, i64 } %t220, 1 + %t222 = icmp uge i64 %t219, %t221 + br i1 %t222, label %range2439, label %inrange2440 +range2439: + call void @finch_panic_index(ptr @.str.1368, i64 556, i64 %t219, i64 %t221) + unreachable +inrange2440: + %t223 = extractvalue { ptr, i64, i64 } %t220, 0 + %t224 = getelementptr inbounds %S.ast.Type, ptr %t223, i64 %t219 + %t225 = load %S.ast.Type, ptr %t224 + store %S.ast.Type %t225, ptr %a226 + call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) + %t228 = load %S.ast.Type, ptr %a227 + ret %S.ast.Type %t228 +endif2429: + %t229 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 + %t231 = load i64, ptr %t230 + %t232 = icmp sgt i64 %t231, 0 + br i1 %t232, label %then2441, label %endif2443 +then2441: + store { ptr, i64, i64 } zeroinitializer, ptr %a233 + %t234 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + store i64 0, ptr %a235 + br label %each.cond2444 +each.cond2444: + %t236 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 + %t237 = load i64, ptr %t236 + %t238 = load i64, ptr %a235 + %t239 = icmp slt i64 %t238, %t237 + br i1 %t239, label %each.body2445, label %each.end2447 +each.body2445: + %t240 = load ptr, ptr %t234 + %t241 = getelementptr inbounds %S.ast.Type, ptr %t240, i64 %t238 + %t242 = load %S.ast.Type, ptr %t241 + store %S.ast.Type %t242, ptr %a243 + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a233, i32 0, i32 1 + %t245 = load ptr, ptr %a1 + %t246 = load %S.ast.Type, ptr %a243 + %t247 = load %S.ast.Node, ptr %a3 + %t248 = call %S.ast.Type @finch.gen.resolve(ptr %t245, %S.ast.Type %t246, %S.ast.Node %t247) + %t249 = load i64, ptr %t244 + %t250 = add i64 %t249, 1 + call void @finch_arr_reserve(ptr %a233, i64 %t250, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t251 = load ptr, ptr %a233 + %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i64 %t249 + store %S.ast.Type %t248, ptr %t252 + store i64 %t250, ptr %t244 + br label %each.step2446 +each.step2446: + %t253 = load i64, ptr %a235 + %t254 = add i64 %t253, 1 + store i64 %t254, ptr %a235 + br label %each.cond2444 +each.end2447: + %t255 = load ptr, ptr %a1 + %t256 = icmp eq ptr %t255, null + br i1 %t256, label %panic2448, label %ok2449 +panic2448: + call void @finch_panic(ptr @.str.1369, i64 564, ptr @.str.1370) + unreachable +ok2449: + %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 14 + %t258 = load { ptr, i64, i64 }, ptr %t257 + store { ptr, i64, i64 } %t258, ptr %a259 + call void @finch_str_copy(ptr %a260, ptr %a259) + %t261 = load { ptr, i64, i64 }, ptr %a260 + store { ptr, i64, i64 } %t261, ptr %a262 + %t263 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + %t265 = load i64, ptr %t264 + %t266 = icmp sgt i64 %t265, 0 + br i1 %t266, label %then2450, label %endif2452 +then2450: + %t267 = load ptr, ptr %a1 + %t268 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t269 = load { ptr, i64, i64 }, ptr %t268 + %t270 = call i1 @finch.gen.imports(ptr %t267, { ptr, i64, i64 } %t269) + %t271 = xor i1 %t270, true + br i1 %t271, label %then2453, label %endif2455 +then2453: + %t272 = load ptr, ptr %a1 + %t273 = load %S.ast.Node, ptr %a3 + %t274 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t275 = load { ptr, i64, i64 }, ptr %t274 + store { ptr, i64, i64 } { ptr @.str.1371, i64 1, i64 0 }, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t279, ptr %a281 + store { ptr, i64, i64 } { ptr @.str.1372, i64 36, i64 0 }, ptr %a282 + call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) + store { ptr, i64, i64 } %t279, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a280 + %t285 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t286 = load { ptr, i64, i64 }, ptr %t285 + store { ptr, i64, i64 } %t284, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t284, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.1373, i64 1, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + call void @finch.gen.fail(ptr %t272, %S.ast.Node %t273, { ptr, i64, i64 } %t296) + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_drop(ptr %a297) + br label %endif2455 +endif2455: + %t298 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t299 = load { ptr, i64, i64 }, ptr %t298 + store { ptr, i64, i64 } %t299, ptr %a300 + call void @finch_str_copy(ptr %a301, ptr %a300) + %t302 = load { ptr, i64, i64 }, ptr %a301 + %t303 = load { ptr, i64, i64 }, ptr %a262 + store { ptr, i64, i64 } %t302, ptr %a262 + store { ptr, i64, i64 } %t303, ptr %a304 + call void @finch_str_drop(ptr %a304) + br label %endif2452 +endif2452: + %t305 = load ptr, ptr %a1 + %t306 = load { ptr, i64, i64 }, ptr %a262 + %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t308 = load { ptr, i64, i64 }, ptr %t307 + %t309 = load { ptr, i64, i64 }, ptr %a233 + %t310 = load %S.ast.Node, ptr %a3 + %t311 = call %S.ast.Type @finch.gen.instStruct(ptr %t305, { ptr, i64, i64 } %t306, { ptr, i64, i64 } %t308, { ptr, i64, i64 } %t309, %S.ast.Node %t310) + call void @finch_str_drop(ptr %a262) + call void @finch.drop.arr_S_ast_Type(ptr %a233) + ret %S.ast.Type %t311 +endif2443: + %t312 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t313 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t313, ptr %a314 + store { ptr, i64, i64 } { ptr @.str.1374, i64 1, i64 0 }, ptr %a315 + %t316 = call i32 @finch_str_eq(ptr %a314, ptr %a315) + %t317 = icmp ne i32 %t316, 0 + br i1 %t317, label %then2456, label %endif2458 +then2456: + %t318 = load ptr, ptr %a1 + %t319 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t320 = load { ptr, i64, i64 }, ptr %t319 + %t321 = call i64 @finch.gen.findStruct(ptr %t318, { ptr, i64, i64 } { ptr @.str.1375, i64 1, i64 0 }, { ptr, i64, i64 } %t320) + %t322 = icmp slt i64 %t321, 0 + br i1 %t322, label %then2459, label %endif2461 +then2459: + %t323 = load ptr, ptr %a1 + %t324 = load %S.ast.Node, ptr %a3 + %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t326 = load { ptr, i64, i64 }, ptr %t325 + store { ptr, i64, i64 } { ptr @.str.1376, i64 28, i64 0 }, ptr %a328 + store { ptr, i64, i64 } %t326, ptr %a329 + call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) + %t330 = load { ptr, i64, i64 }, ptr %a327 + store { ptr, i64, i64 } %t330, ptr %a332 + store { ptr, i64, i64 } { ptr @.str.1377, i64 1, i64 0 }, ptr %a333 + call void @finch_str_concat(ptr %a331, ptr %a332, ptr %a333) + store { ptr, i64, i64 } %t330, ptr %a334 + call void @finch_str_drop(ptr %a334) + %t335 = load { ptr, i64, i64 }, ptr %a331 + call void @finch.gen.fail(ptr %t323, %S.ast.Node %t324, { ptr, i64, i64 } %t335) + store { ptr, i64, i64 } %t335, ptr %a336 + call void @finch_str_drop(ptr %a336) + br label %endif2461 +endif2461: + %t337 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1378, i64 6, i64 0 }, 0 + %t338 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t339 = load { ptr, i64, i64 }, ptr %t338 + store { ptr, i64, i64 } %t339, ptr %a340 + call void @finch_str_copy(ptr %a341, ptr %a340) + %t342 = load { ptr, i64, i64 }, ptr %a341 + %t343 = insertvalue %S.ast.Type %t337, { ptr, i64, i64 } %t342, 2 + %t344 = insertvalue %S.ast.Type %t343, { ptr, i64, i64 } { ptr @.str.1379, i64 1, i64 0 }, 3 + ret %S.ast.Type %t344 +endif2458: + %t345 = load ptr, ptr %a1 + %t346 = icmp eq ptr %t345, null + br i1 %t346, label %panic2462, label %ok2463 +panic2462: + call void @finch_panic(ptr @.str.1380, i64 579, ptr @.str.1381) + unreachable +ok2463: + %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 14 + %t348 = load { ptr, i64, i64 }, ptr %t347 + store { ptr, i64, i64 } %t348, ptr %a349 + call void @finch_str_copy(ptr %a350, ptr %a349) + %t351 = load { ptr, i64, i64 }, ptr %a350 + store { ptr, i64, i64 } %t351, ptr %a352 + %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t354 = getelementptr inbounds { ptr, i64, i64 }, ptr %t353, i32 0, i32 1 + %t355 = load i64, ptr %t354 + %t356 = icmp sgt i64 %t355, 0 + br i1 %t356, label %then2464, label %endif2466 +then2464: + %t357 = load ptr, ptr %a1 + %t358 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t359 = load { ptr, i64, i64 }, ptr %t358 + %t360 = call i1 @finch.gen.imports(ptr %t357, { ptr, i64, i64 } %t359) + %t361 = xor i1 %t360, true + br i1 %t361, label %then2467, label %endif2469 +then2467: + %t362 = load ptr, ptr %a1 + %t363 = load %S.ast.Node, ptr %a3 + %t364 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t365 = load { ptr, i64, i64 }, ptr %t364 + store { ptr, i64, i64 } { ptr @.str.1382, i64 1, i64 0 }, ptr %a367 + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a366 + store { ptr, i64, i64 } %t369, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1383, i64 36, i64 0 }, ptr %a372 + call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) + store { ptr, i64, i64 } %t369, ptr %a373 + call void @finch_str_drop(ptr %a373) + %t374 = load { ptr, i64, i64 }, ptr %a370 + %t375 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t376 = load { ptr, i64, i64 }, ptr %t375 + store { ptr, i64, i64 } %t374, ptr %a378 + store { ptr, i64, i64 } %t376, ptr %a379 + call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) + store { ptr, i64, i64 } %t374, ptr %a380 + call void @finch_str_drop(ptr %a380) + %t381 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t381, ptr %a383 + store { ptr, i64, i64 } { ptr @.str.1384, i64 1, i64 0 }, ptr %a384 + call void @finch_str_concat(ptr %a382, ptr %a383, ptr %a384) + store { ptr, i64, i64 } %t381, ptr %a385 + call void @finch_str_drop(ptr %a385) + %t386 = load { ptr, i64, i64 }, ptr %a382 + call void @finch.gen.fail(ptr %t362, %S.ast.Node %t363, { ptr, i64, i64 } %t386) + store { ptr, i64, i64 } %t386, ptr %a387 + call void @finch_str_drop(ptr %a387) + br label %endif2469 +endif2469: + %t388 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t389 = load { ptr, i64, i64 }, ptr %t388 + store { ptr, i64, i64 } %t389, ptr %a390 + call void @finch_str_copy(ptr %a391, ptr %a390) + %t392 = load { ptr, i64, i64 }, ptr %a391 + %t393 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t392, ptr %a352 + store { ptr, i64, i64 } %t393, ptr %a394 + call void @finch_str_drop(ptr %a394) + br label %endif2466 +endif2466: + %t395 = load ptr, ptr %a1 + %t396 = load { ptr, i64, i64 }, ptr %a352 + %t397 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t398 = load { ptr, i64, i64 }, ptr %t397 + %t399 = call i64 @finch.gen.findEnum(ptr %t395, { ptr, i64, i64 } %t396, { ptr, i64, i64 } %t398) + %t400 = icmp sge i64 %t399, 0 + br i1 %t400, label %then2470, label %endif2472 +then2470: + %t401 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1385, i64 4, i64 0 }, 0 + %t402 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t403 = load { ptr, i64, i64 }, ptr %t402 + store { ptr, i64, i64 } %t403, ptr %a404 + call void @finch_str_copy(ptr %a405, ptr %a404) + %t406 = load { ptr, i64, i64 }, ptr %a405 + %t407 = insertvalue %S.ast.Type %t401, { ptr, i64, i64 } %t406, 2 + %t408 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t408, ptr %a409 + call void @finch_str_copy(ptr %a410, ptr %a409) + %t411 = load { ptr, i64, i64 }, ptr %a410 + %t412 = insertvalue %S.ast.Type %t407, { ptr, i64, i64 } %t411, 3 + call void @finch_str_drop(ptr %a352) + ret %S.ast.Type %t412 +endif2472: + %t413 = load ptr, ptr %a1 + %t414 = load { ptr, i64, i64 }, ptr %a352 + %t415 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t416 = load { ptr, i64, i64 }, ptr %t415 + %t417 = call i64 @finch.gen.findStruct(ptr %t413, { ptr, i64, i64 } %t414, { ptr, i64, i64 } %t416) + %t418 = icmp slt i64 %t417, 0 + br i1 %t418, label %then2473, label %endif2475 +then2473: + %t419 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t420 = getelementptr inbounds { ptr, i64, i64 }, ptr %t419, i32 0, i32 1 + %t421 = load i64, ptr %t420 + %t422 = icmp eq i64 %t421, 0 + br label %logic.from2476 +logic.from2476: + br i1 %t422, label %logic.rhs2477, label %logic.end2478 +logic.rhs2477: + %t423 = load ptr, ptr %a1 + %t424 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t425 = load { ptr, i64, i64 }, ptr %t424 + %t426 = call i64 @finch.gen.findStruct(ptr %t423, { ptr, i64, i64 } { ptr @.str.1386, i64 1, i64 0 }, { ptr, i64, i64 } %t425) + %t427 = icmp sge i64 %t426, 0 + br label %logic.rend2479 +logic.rend2479: + br label %logic.end2478 +logic.end2478: + %t428 = phi i1 [ false, %logic.from2476 ], [ %t427, %logic.rend2479 ] + br i1 %t428, label %then2480, label %endif2482 +then2480: + %t429 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1387, i64 6, i64 0 }, 0 + %t430 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t431 = load { ptr, i64, i64 }, ptr %t430 + store { ptr, i64, i64 } %t431, ptr %a432 + call void @finch_str_copy(ptr %a433, ptr %a432) + %t434 = load { ptr, i64, i64 }, ptr %a433 + %t435 = insertvalue %S.ast.Type %t429, { ptr, i64, i64 } %t434, 2 + %t436 = insertvalue %S.ast.Type %t435, { ptr, i64, i64 } { ptr @.str.1388, i64 1, i64 0 }, 3 + call void @finch_str_drop(ptr %a352) + ret %S.ast.Type %t436 +endif2482: + %t437 = load ptr, ptr %a1 + %t438 = load %S.ast.Node, ptr %a3 + %t439 = load %S.ast.Type, ptr %a2 + %t440 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t439) + store { ptr, i64, i64 } { ptr @.str.1389, i64 24, i64 0 }, ptr %a442 + store { ptr, i64, i64 } %t440, ptr %a443 + call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443) + store { ptr, i64, i64 } %t440, ptr %a444 + call void @finch_str_drop(ptr %a444) + %t445 = load { ptr, i64, i64 }, ptr %a441 + store { ptr, i64, i64 } %t445, ptr %a447 + store { ptr, i64, i64 } { ptr @.str.1390, i64 1, i64 0 }, ptr %a448 + call void @finch_str_concat(ptr %a446, ptr %a447, ptr %a448) + store { ptr, i64, i64 } %t445, ptr %a449 + call void @finch_str_drop(ptr %a449) + %t450 = load { ptr, i64, i64 }, ptr %a446 + call void @finch.gen.fail(ptr %t437, %S.ast.Node %t438, { ptr, i64, i64 } %t450) + store { ptr, i64, i64 } %t450, ptr %a451 + call void @finch_str_drop(ptr %a451) + br label %endif2475 +endif2475: + %t452 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.1391, i64 6, i64 0 }, 0 + %t453 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t454 = load { ptr, i64, i64 }, ptr %t453 + store { ptr, i64, i64 } %t454, ptr %a455 + call void @finch_str_copy(ptr %a456, ptr %a455) + %t457 = load { ptr, i64, i64 }, ptr %a456 + %t458 = insertvalue %S.ast.Type %t452, { ptr, i64, i64 } %t457, 2 + %t459 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t459, ptr %a460 + call void @finch_str_copy(ptr %a461, ptr %a460) + %t462 = load { ptr, i64, i64 }, ptr %a461 + %t463 = insertvalue %S.ast.Type %t458, { ptr, i64, i64 } %t462, 3 + call void @finch_str_drop(ptr %a352) + ret %S.ast.Type %t463 +} + +define internal { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1393, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1394, i64 1, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.1396, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1397, i64 0, i64 0 }, ptr %a11 + call void @finch_str_replace(ptr %a9, ptr %a8, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a13 + call void @finch_str_drop(ptr %a13) + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1399, i64 1, i64 0 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.1400, i64 1, i64 0 }, ptr %a17 + call void @finch_str_replace(ptr %a15, ptr %a14, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1402, i64 1, i64 0 }, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.1403, i64 0, i64 0 }, ptr %a23 + call void @finch_str_replace(ptr %a21, ptr %a20, ptr %a22, ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t18, ptr %a25 + call void @finch_str_drop(ptr %a25) + ret { ptr, i64, i64 } %t24 +} + +define internal { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = icmp eq i64 %t3, 0 + br i1 %t4, label %then2483, label %endif2485 +then2483: + ret { ptr, i64, i64 } { ptr @.str.1404, i64 4, i64 0 } +endif2485: + %t5 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t5, ptr %a6 + call void @finch_str_copy(ptr %a7, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + ret { ptr, i64, i64 } %t8 +} + +define internal { ptr, i64, i64 } @finch.gen.llty(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1405, i64 4, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then2486, label %endif2488 +then2486: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1406, i64 2, i64 0 } +endif2488: + %t14 = load %S.ast.Type, ptr %a2 + %t15 = call i1 @finch.gen.isInt(%S.ast.Type %t14) + br label %logic.from2489 +logic.from2489: + br i1 %t15, label %logic.end2491, label %logic.rhs2490 +logic.rhs2490: + %t16 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1407, i64 4, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.rend2492 +logic.rend2492: + br label %logic.end2491 +logic.end2491: + %t21 = phi i1 [ true, %logic.from2489 ], [ %t20, %logic.rend2492 ] + br i1 %t21, label %then2493, label %endif2495 +then2493: + %t22 = load %S.ast.Type, ptr %a2 + %t23 = call i64 @finch.gen.bitsOf(%S.ast.Type %t22) + call void @finch_str_from_int(ptr %a24, i64 %t23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1408, i64 1, i64 0 }, ptr %a27 + store { ptr, i64, i64 } %t25, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t30 +endif2495: + %t31 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t31, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.1409, i64 5, i64 0 }, ptr %a33 + %t34 = call i32 @finch_str_eq(ptr %a32, ptr %a33) + %t35 = icmp ne i32 %t34, 0 + br i1 %t35, label %then2496, label %endif2498 +then2496: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1410, i64 6, i64 0 } +endif2498: + %t36 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.1411, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br i1 %t40, label %then2499, label %endif2501 +then2499: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1412, i64 5, i64 0 } +endif2501: + %t41 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1413, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.from2502 +logic.from2502: + br i1 %t45, label %logic.end2504, label %logic.rhs2503 +logic.rhs2503: + %t46 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t46, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.1414, i64 5, i64 0 }, ptr %a48 + %t49 = call i32 @finch_str_eq(ptr %a47, ptr %a48) + %t50 = icmp ne i32 %t49, 0 + br label %logic.rend2505 +logic.rend2505: + br label %logic.end2504 +logic.end2504: + %t51 = phi i1 [ true, %logic.from2502 ], [ %t50, %logic.rend2505 ] + br i1 %t51, label %then2506, label %endif2508 +then2506: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1415, i64 17, i64 0 } +endif2508: + %t52 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.1416, i64 3, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then2509, label %endif2511 +then2509: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1417, i64 37, i64 0 } +endif2511: + %t57 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.1418, i64 5, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br i1 %t61, label %then2512, label %endif2514 +then2512: + %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t63 = load i64, ptr %t62 + call void @finch_str_from_int(ptr %a64, i64 %t63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.1419, i64 1, i64 0 }, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t65, ptr %a69 + call void @finch_str_drop(ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.1420, i64 3, i64 0 }, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t70, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + %t76 = load ptr, ptr %a1 + %t77 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t78 = load { ptr, i64, i64 }, ptr %t77 + %t79 = extractvalue { ptr, i64, i64 } %t78, 1 + %t80 = icmp uge i64 0, %t79 + br i1 %t80, label %range2515, label %inrange2516 +range2515: + call void @finch_panic_index(ptr @.str.1421, i64 632, i64 0, i64 %t79) + unreachable +inrange2516: + %t81 = extractvalue { ptr, i64, i64 } %t78, 0 + %t82 = getelementptr inbounds %S.ast.Type, ptr %t81, i64 0 + %t83 = load %S.ast.Type, ptr %t82 + %t84 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t76, %S.ast.Type %t83) + store { ptr, i64, i64 } %t75, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t75, ptr %a88 + call void @finch_str_drop(ptr %a88) + store { ptr, i64, i64 } %t84, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t90, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.1422, i64 1, i64 0 }, ptr %a93 + call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) + store { ptr, i64, i64 } %t90, ptr %a94 + call void @finch_str_drop(ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a91 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t95 +endif2514: + %t96 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.1423, i64 4, i64 0 }, ptr %a98 + %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) + %t100 = icmp ne i32 %t99, 0 + br i1 %t100, label %then2517, label %endif2519 +then2517: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1424, i64 3, i64 0 } +endif2519: + %t101 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t101, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.1425, i64 3, i64 0 }, ptr %a103 + %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) + %t105 = icmp ne i32 %t104, 0 + br label %logic.from2520 +logic.from2520: + br i1 %t105, label %logic.end2522, label %logic.rhs2521 +logic.rhs2521: + %t106 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.1426, i64 4, i64 0 }, ptr %a108 + %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) + %t110 = icmp ne i32 %t109, 0 + br label %logic.rend2523 +logic.rend2523: + br label %logic.end2522 +logic.end2522: + %t111 = phi i1 [ true, %logic.from2520 ], [ %t110, %logic.rend2523 ] + br i1 %t111, label %then2524, label %endif2526 +then2524: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1427, i64 3, i64 0 } +endif2526: + %t112 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.1428, i64 4, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br i1 %t116, label %then2527, label %endif2529 +then2527: + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.1429, i64 4, i64 0 } +endif2529: + %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t118) + store { ptr, i64, i64 } { ptr @.str.1430, i64 3, i64 0 }, ptr %a121 + store { ptr, i64, i64 } %t119, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t124, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.1431, i64 1, i64 0 }, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load { ptr, i64, i64 }, ptr %a125 + %t130 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t131 = load { ptr, i64, i64 }, ptr %t130 + %t132 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t131) + store { ptr, i64, i64 } %t129, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t129, ptr %a136 + call void @finch_str_drop(ptr %a136) + store { ptr, i64, i64 } %t132, ptr %a137 + call void @finch_str_drop(ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a133 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t138 +} + +define internal { ptr, i64, i64 } @finch.gen.retTy(ptr %p0, %S.gen.FnSig %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.FnSig, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.FnSig %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 + %t4 = load i1, ptr %t3 + %t5 = xor i1 %t4, true + br i1 %t5, label %then2530, label %endif2532 +then2530: + %t6 = load ptr, ptr %a1 + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t8 = load %S.ast.Type, ptr %t7 + %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t6, %S.ast.Type %t8) + ret { ptr, i64, i64 } %t9 +endif2532: + store { ptr, i64, i64 } { ptr @.str.1432, i64 2, i64 0 }, ptr %a10 + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.1433, i64 4, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp eq i32 %t16, 0 + br i1 %t17, label %then2533, label %endif2535 +then2533: + %t18 = load ptr, ptr %a1 + %t19 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t20 = load %S.ast.Type, ptr %t19 + %t21 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t18, %S.ast.Type %t20) + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t21, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_drop(ptr %a23) + br label %endif2535 +endif2535: + %t24 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1434, i64 6, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1435, i64 21, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1436, i64 1, i64 0 }, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 11 + %t9 = load i64, ptr %t8 + call void @finch_str_from_int(ptr %a10, i64 %t9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t7, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t7, ptr %a15 + call void @finch_str_drop(ptr %a15) + store { ptr, i64, i64 } %t11, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.1437, i64 1, i64 0 }, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + %t23 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 12 + %t24 = load i64, ptr %t23 + call void @finch_str_from_int(ptr %a25, i64 %t24) + %t26 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t22, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t22, ptr %a30 + call void @finch_str_drop(ptr %a30) + store { ptr, i64, i64 } %t26, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.1438, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 13 + %t39 = load i64, ptr %t38 + call void @finch_str_from_int(ptr %a40, i64 %t39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t37, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t37, ptr %a45 + call void @finch_str_drop(ptr %a45) + store { ptr, i64, i64 } %t41, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a42 + ret { ptr, i64, i64 } %t47 +} + +define internal { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load %S.ast.Type, ptr %a1 + %t9 = call i1 @finch.gen.isInt(%S.ast.Type %t8) + br label %logic.from2536 +logic.from2536: + br i1 %t9, label %logic.end2538, label %logic.rhs2537 +logic.rhs2537: + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1439, i64 4, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br label %logic.rend2539 +logic.rend2539: + br label %logic.end2538 +logic.end2538: + %t15 = phi i1 [ true, %logic.from2536 ], [ %t14, %logic.rend2539 ] + br label %logic.from2540 +logic.from2540: + br i1 %t15, label %logic.end2542, label %logic.rhs2541 +logic.rhs2541: + %t16 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1440, i64 4, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.rend2543 +logic.rend2543: + br label %logic.end2542 +logic.end2542: + %t21 = phi i1 [ true, %logic.from2540 ], [ %t20, %logic.rend2543 ] + br i1 %t21, label %then2544, label %endif2546 +then2544: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1441, i64 1, i64 0 } +endif2546: + %t22 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1442, i64 4, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then2547, label %endif2549 +then2547: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1443, i64 5, i64 0 } +endif2549: + %t27 = load %S.ast.Type, ptr %a1 + %t28 = call i1 @finch.gen.isFloat(%S.ast.Type %t27) + br i1 %t28, label %then2550, label %endif2552 +then2550: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1444, i64 3, i64 0 } +endif2552: + %t29 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1445, i64 3, i64 0 }, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br label %logic.from2553 +logic.from2553: + br i1 %t33, label %logic.end2555, label %logic.rhs2554 +logic.rhs2554: + %t34 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1446, i64 4, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.rend2556 +logic.rend2556: + br label %logic.end2555 +logic.end2555: + %t39 = phi i1 [ true, %logic.from2553 ], [ %t38, %logic.rend2556 ] + br i1 %t39, label %then2557, label %endif2559 +then2557: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1447, i64 4, i64 0 } +endif2559: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.1448, i64 15, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.gen.sizeOf(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load %S.ast.Type, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t4) + store { ptr, i64, i64 } { ptr @.str.1449, i64 29, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t5, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t5, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1450, i64 26, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + ret { ptr, i64, i64 } %t15 +} + +define internal i1 @finch.gen.owning(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.1451, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from2560 +logic.from2560: + br i1 %t8, label %logic.end2562, label %logic.rhs2561 +logic.rhs2561: + %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1452, i64 5, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br label %logic.rend2563 +logic.rend2563: + br label %logic.end2562 +logic.end2562: + %t15 = phi i1 [ true, %logic.from2560 ], [ %t14, %logic.rend2563 ] + br label %logic.from2564 +logic.from2564: + br i1 %t15, label %logic.end2566, label %logic.rhs2565 +logic.rhs2565: + %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.1453, i64 3, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + br label %logic.rend2567 +logic.rend2567: + br label %logic.end2566 +logic.end2566: + %t22 = phi i1 [ true, %logic.from2564 ], [ %t21, %logic.rend2567 ] + br i1 %t22, label %then2568, label %endif2570 +then2568: + ret i1 true +endif2570: + %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1454, i64 6, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br i1 %t28, label %then2571, label %endif2573 +then2571: + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic2574, label %ok2575 +panic2574: + call void @finch_panic(ptr @.str.1455, i64 690, ptr @.str.1456) + unreachable +ok2575: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 16 + %t32 = load ptr, ptr %a1 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t34 = load { ptr, i64, i64 }, ptr %t33 + %t35 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t36 = load { ptr, i64, i64 }, ptr %t35 + %t37 = call i64 @finch.gen.findStruct(ptr %t32, { ptr, i64, i64 } %t34, { ptr, i64, i64 } %t36) + %t38 = load { ptr, i64, i64 }, ptr %t31 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 %t37, %t39 + br i1 %t40, label %range2576, label %inrange2577 +range2576: + call void @finch_panic_index(ptr @.str.1457, i64 690, i64 %t37, i64 %t39) + unreachable +inrange2577: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds %S.gen.StructDef, ptr %t41, i64 %t37 + %t43 = getelementptr inbounds %S.gen.StructDef, ptr %t42, i32 0, i32 16 + %t44 = load i1, ptr %t43 + ret i1 %t44 +endif2573: + ret i1 false +} + +define internal { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.1458, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then2578, label %endif2580 +then2578: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 0, %t10 + br i1 %t11, label %range2581, label %inrange2582 +range2581: + call void @finch_panic_index(ptr @.str.1460, i64 697, i64 0, i64 %t10) + unreachable +inrange2582: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.ast.Type, ptr %t12, i64 0 + %t14 = load %S.ast.Type, ptr %t13 + %t15 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t14) + store { ptr, i64, i64 } { ptr @.str.1459, i64 4, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t20 +endif2580: + %t21 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.1461, i64 3, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %then2583, label %endif2585 +then2583: + %t27 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 0, %t29 + br i1 %t30, label %range2586, label %inrange2587 +range2586: + call void @finch_panic_index(ptr @.str.1463, i64 700, i64 0, i64 %t29) + unreachable +inrange2587: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 0 + %t33 = load %S.ast.Type, ptr %t32 + %t34 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t33) + store { ptr, i64, i64 } { ptr @.str.1462, i64 4, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1464, i64 1, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 1 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range2588, label %inrange2589 +range2588: + call void @finch_panic_index(ptr @.str.1465, i64 700, i64 1, i64 %t47) + unreachable +inrange2589: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Type, ptr %t49, i64 1 + %t51 = load %S.ast.Type, ptr %t50 + %t52 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t51) + store { ptr, i64, i64 } %t44, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t44, ptr %a56 + call void @finch_str_drop(ptr %a56) + store { ptr, i64, i64 } %t52, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a53 + ret { ptr, i64, i64 } %t58 +endif2585: + %t59 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.1466, i64 4, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br i1 %t64, label %then2590, label %endif2592 +then2590: + %t65 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t66 = load { ptr, i64, i64 }, ptr %t65 + %t67 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t66) + store { ptr, i64, i64 } { ptr @.str.1467, i64 2, i64 0 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1468, i64 1, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t77, ptr %a81 + store { ptr, i64, i64 } %t79, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t77, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + ret { ptr, i64, i64 } %t84 +endif2592: + %t85 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1469, i64 6, i64 0 }, ptr %a88 + %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) + %t90 = icmp ne i32 %t89, 0 + br i1 %t90, label %then2593, label %endif2595 +then2593: + %t91 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 3 + %t92 = load { ptr, i64, i64 }, ptr %t91 + %t93 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t92) + store { ptr, i64, i64 } { ptr @.str.1470, i64 2, i64 0 }, ptr %a95 + store { ptr, i64, i64 } %t93, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.1471, i64 1, i64 0 }, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + %t104 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 2 + %t105 = load { ptr, i64, i64 }, ptr %t104 + %t106 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t105) + store { ptr, i64, i64 } %t103, ptr %a108 + store { ptr, i64, i64 } %t106, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t103, ptr %a110 + call void @finch_str_drop(ptr %a110) + store { ptr, i64, i64 } %t106, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a107 + ret { ptr, i64, i64 } %t112 +endif2595: + %t113 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t114 = load { ptr, i64, i64 }, ptr %t113 + store { ptr, i64, i64 } %t114, ptr %a115 + call void @finch_str_copy(ptr %a116, ptr %a115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + ret { ptr, i64, i64 } %t117 +} + +define internal { ptr, i64, i64 } @finch.gen.hex(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.1472, i64 16, i64 0 }, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = sdiv i64 %t3, 16 + %t5 = load { ptr, i64, i64 }, ptr %a2 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 %t4, %t6 + br i1 %t7, label %range2596, label %inrange2597 +range2596: + call void @finch_panic_index(ptr @.str.1473, i64 715, i64 %t4, i64 %t6) + unreachable +inrange2597: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds i8, ptr %t8, i64 %t4 + %t10 = load i8, ptr %t9 + call void @finch_str_from_char(ptr %a11, i8 signext %t10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + %t13 = load i64, ptr %a1 + %t14 = srem i64 %t13, 16 + %t15 = load { ptr, i64, i64 }, ptr %a2 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 %t14, %t16 + br i1 %t17, label %range2598, label %inrange2599 +range2598: + call void @finch_panic_index(ptr @.str.1474, i64 715, i64 %t14, i64 %t16) + unreachable +inrange2599: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds i8, ptr %t18, i64 %t14 + %t20 = load i8, ptr %t19 + call void @finch_str_from_char(ptr %a21, i8 signext %t20) + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t12, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t12, ptr %a26 + call void @finch_str_drop(ptr %a26) + store { ptr, i64, i64 } %t22, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a23 + call void @finch_str_drop(ptr %a2) + ret { ptr, i64, i64 } %t28 +} + +define internal { ptr, i64, i64 } @finch.gen.strGlobal(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca i64, align 16 + %a29 = alloca i8, align 16 + %a32 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2600, label %ok2601 +panic2600: + call void @finch_panic(ptr @.str.1475, i64 719, ptr @.str.1476) + unreachable +ok2601: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 8 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + store i64 %t7, ptr %t5 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic2602, label %ok2603 +panic2602: + call void @finch_panic(ptr @.str.1478, i64 720, ptr @.str.1479) + unreachable +ok2603: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 8 + %t11 = load i64, ptr %t10 + call void @finch_str_from_int(ptr %a12, i64 %t11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1477, i64 6, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } zeroinitializer, ptr %a20 + store i64 0, ptr %a21 + br label %each.cond2604 +each.cond2604: + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = load i64, ptr %a21 + %t25 = icmp slt i64 %t24, %t23 + br i1 %t25, label %each.body2605, label %each.end2607 +each.body2605: + %t26 = load ptr, ptr %a2 + %t27 = getelementptr inbounds i8, ptr %t26, i64 %t24 + %t28 = load i8, ptr %t27 + store i8 %t28, ptr %a29 + %t30 = load i8, ptr %a29 + %t31 = zext i8 %t30 to i64 + store i64 %t31, ptr %a32 + %t33 = load i64, ptr %a32 + %t34 = icmp slt i64 %t33, 0 + br i1 %t34, label %then2608, label %endif2610 +then2608: + %t35 = load i64, ptr %a32 + %t36 = add i64 %t35, 256 + store i64 %t36, ptr %a32 + br label %endif2610 +endif2610: + %t37 = load i64, ptr %a32 + %t38 = icmp sge i64 %t37, 32 + br label %logic.from2611 +logic.from2611: + br i1 %t38, label %logic.rhs2612, label %logic.end2613 +logic.rhs2612: + %t39 = load i64, ptr %a32 + %t40 = icmp slt i64 %t39, 127 + br label %logic.rend2614 +logic.rend2614: + br label %logic.end2613 +logic.end2613: + %t41 = phi i1 [ false, %logic.from2611 ], [ %t40, %logic.rend2614 ] + br label %logic.from2615 +logic.from2615: + br i1 %t41, label %logic.rhs2616, label %logic.end2617 +logic.rhs2616: + %t42 = load i8, ptr %a29 + %t43 = icmp ne i8 %t42, 34 + br label %logic.rend2618 +logic.rend2618: + br label %logic.end2617 +logic.end2617: + %t44 = phi i1 [ false, %logic.from2615 ], [ %t43, %logic.rend2618 ] + br label %logic.from2619 +logic.from2619: + br i1 %t44, label %logic.rhs2620, label %logic.end2621 +logic.rhs2620: + %t45 = load i8, ptr %a29 + %t46 = icmp ne i8 %t45, 92 + br label %logic.rend2622 +logic.rend2622: + br label %logic.end2621 +logic.end2621: + %t47 = phi i1 [ false, %logic.from2619 ], [ %t46, %logic.rend2622 ] + br i1 %t47, label %then2623, label %else2624 +then2623: + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t49 = load i8, ptr %a29 + call void @finch_str_from_char(ptr %a50, i8 signext %t49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + %t52 = load i64, ptr %t48 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %a20 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 + store { ptr, i64, i64 } %t51, ptr %t55 + store i64 %t53, ptr %t48 + br label %endif2625 +else2624: + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t57 = load i64, ptr %a32 + %t58 = call { ptr, i64, i64 } @finch.gen.hex(i64 %t57) + store { ptr, i64, i64 } { ptr @.str.1480, i64 1, i64 0 }, ptr %a60 + store { ptr, i64, i64 } %t58, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + %t64 = load i64, ptr %t56 + %t65 = add i64 %t64, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t65, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t66 = load ptr, ptr %a20 + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t66, i64 %t64 + store { ptr, i64, i64 } %t63, ptr %t67 + store i64 %t65, ptr %t56 + br label %endif2625 +endif2625: + br label %each.step2606 +each.step2606: + %t68 = load i64, ptr %a21 + %t69 = add i64 %t68, 1 + store i64 %t69, ptr %a21 + br label %each.cond2604 +each.end2607: + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic2626, label %ok2627 +panic2626: + call void @finch_panic(ptr @.str.1481, i64 733, ptr @.str.1482) + unreachable +ok2627: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 2 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 + %t74 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.1483, i64 34, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a75 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t80 = load i64, ptr %t79 + %t81 = add i64 %t80, 1 + call void @finch_str_from_int(ptr %a82, i64 %t81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t78, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t78, ptr %a87 + call void @finch_str_drop(ptr %a87) + store { ptr, i64, i64 } %t83, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a84 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.1484, i64 9, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1485, i64 0, i64 0 }, ptr %a96 + call void @finch_str_join(ptr %a97, ptr %a20, ptr %a96) + %t98 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t94, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t94, ptr %a102 + call void @finch_str_drop(ptr %a102) + store { ptr, i64, i64 } %t98, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.1486, i64 4, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = load i64, ptr %t73 + %t111 = add i64 %t110, 1 + call void @finch_arr_reserve(ptr %t72, i64 %t111, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t112 = load ptr, ptr %t72 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 %t110 + store { ptr, i64, i64 } %t109, ptr %t113 + store i64 %t111, ptr %t73 + %t114 = load { ptr, i64, i64 }, ptr %a19 + call void @finch.drop.arr_str(ptr %a20) + ret { ptr, i64, i64 } %t114 +} + +define internal %S.gen.Val @finch.gen.strConst(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t3, { ptr, i64, i64 } %t4) + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.1487, i64 6, i64 0 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t11, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.1488, i64 6, i64 0 }, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t11, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a12 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t18 = load i64, ptr %t17 + call void @finch_str_from_int(ptr %a19, i64 %t18) + %t20 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t16, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t16, ptr %a24 + call void @finch_str_drop(ptr %a24) + store { ptr, i64, i64 } %t20, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.1489, i64 9, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t31, 0 + %t33 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1490, i64 3, i64 0 }) + %t34 = insertvalue %S.gen.Val %t32, %S.ast.Type %t33, 1 + %t35 = insertvalue %S.gen.Val %t34, i1 true, 2 + call void @finch_str_drop(ptr %a6) + ret %S.gen.Val %t35 +} + +define internal void @finch.gen.panicIf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1491, i64 5, i64 0 }) + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1492, i64 2, i64 0 }) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load { ptr, i64, i64 }, ptr %a2 + %t13 = load { ptr, i64, i64 }, ptr %a7 + %t14 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.condBr(ptr %t11, { ptr, i64, i64 } %t12, { ptr, i64, i64 } %t13, { ptr, i64, i64 } %t14) + %t15 = load ptr, ptr %a1 + %t16 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.gen.label(ptr %t15, { ptr, i64, i64 } %t16) + %t17 = load ptr, ptr %a1 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2628, label %ok2629 +panic2628: + call void @finch_panic(ptr @.str.1493, i64 749, ptr @.str.1494) + unreachable +ok2629: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 + %t22 = load i64, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %t20 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 %t22, %t24 + br i1 %t25, label %range2630, label %inrange2631 +range2630: + call void @finch_panic_index(ptr @.str.1495, i64 749, i64 %t22, i64 %t24) + unreachable +inrange2631: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t22 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t17, { ptr, i64, i64 } %t28) + store { ptr, i64, i64 } %t29, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = load { ptr, i64, i64 }, ptr %a3 + %t33 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t31, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t33, ptr %a34 + %t35 = load ptr, ptr %a1 + %t36 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1496, i64 27, i64 0 }, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1497, i64 6, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 + %t47 = load i64, ptr %t46 + call void @finch_str_from_int(ptr %a48, i64 %t47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t45, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t45, ptr %a53 + call void @finch_str_drop(ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.1498, i64 6, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } %t60, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1499, i64 1, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + call void @finch.gen.emit(ptr %t35, { ptr, i64, i64 } %t71) + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t73, { ptr, i64, i64 } { ptr @.str.1500, i64 11, i64 0 }) + %t74 = load ptr, ptr %a1 + %t75 = icmp eq ptr %t74, null + br i1 %t75, label %panic2632, label %ok2633 +panic2632: + call void @finch_panic(ptr @.str.1501, i64 753, ptr @.str.1502) + unreachable +ok2633: + %t76 = getelementptr inbounds %S.gen.Gen, ptr %t74, i32 0, i32 9 + store i1 true, ptr %t76 + %t77 = load ptr, ptr %a1 + %t78 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.label(ptr %t77, { ptr, i64, i64 } %t78) + call void @finch_str_drop(ptr %a34) + call void @finch_str_drop(ptr %a30) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a7) + ret void +} + +define internal void @finch.gen.boundsCheck(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t5, { ptr, i64, i64 } { ptr @.str.1503, i64 5, i64 0 }) + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1504, i64 7, i64 0 }) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1505, i64 13, i64 0 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.1506, i64 2, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + %t22 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t21, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t21, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a23 + %t28 = call { ptr, i64, i64 } @finch.gen.op(ptr %t11, { ptr, i64, i64 } %t27) + store { ptr, i64, i64 } %t27, ptr %a29 + call void @finch_str_drop(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = load { ptr, i64, i64 }, ptr %a30 + %t33 = load { ptr, i64, i64 }, ptr %a7 + %t34 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.condBr(ptr %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33, { ptr, i64, i64 } %t34) + %t35 = load ptr, ptr %a1 + %t36 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.gen.label(ptr %t35, { ptr, i64, i64 } %t36) + %t37 = load ptr, ptr %a1 + %t38 = load ptr, ptr %a1 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic2634, label %ok2635 +panic2634: + call void @finch_panic(ptr @.str.1507, i64 763, ptr @.str.1508) + unreachable +ok2635: + %t40 = getelementptr inbounds %S.gen.Gen, ptr %t38, i32 0, i32 1 + %t41 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 13 + %t42 = load i64, ptr %t41 + %t43 = load { ptr, i64, i64 }, ptr %t40 + %t44 = extractvalue { ptr, i64, i64 } %t43, 1 + %t45 = icmp uge i64 %t42, %t44 + br i1 %t45, label %range2636, label %inrange2637 +range2636: + call void @finch_panic_index(ptr @.str.1509, i64 763, i64 %t42, i64 %t44) + unreachable +inrange2637: + %t46 = extractvalue { ptr, i64, i64 } %t43, 0 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t42 + %t48 = load { ptr, i64, i64 }, ptr %t47 + %t49 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t37, { ptr, i64, i64 } %t48) + store { ptr, i64, i64 } %t49, ptr %a50 + %t51 = load ptr, ptr %a1 + %t52 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.1510, i64 33, i64 0 }, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.1511, i64 6, i64 0 }, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t56, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = getelementptr inbounds %S.ast.Node, ptr %a4, i32 0, i32 11 + %t63 = load i64, ptr %t62 + call void @finch_str_from_int(ptr %a64, i64 %t63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t61, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t61, ptr %a69 + call void @finch_str_drop(ptr %a69) + store { ptr, i64, i64 } %t65, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.1512, i64 6, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + %t77 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t76, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t82, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.1513, i64 6, i64 0 }, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t82, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a83 + %t88 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t87, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t87, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.1514, i64 1, i64 0 }, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + call void @finch.gen.emit(ptr %t51, { ptr, i64, i64 } %t98) + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t100, { ptr, i64, i64 } { ptr @.str.1515, i64 11, i64 0 }) + %t101 = load ptr, ptr %a1 + %t102 = icmp eq ptr %t101, null + br i1 %t102, label %panic2638, label %ok2639 +panic2638: + call void @finch_panic(ptr @.str.1516, i64 766, ptr @.str.1517) + unreachable +ok2639: + %t103 = getelementptr inbounds %S.gen.Gen, ptr %t101, i32 0, i32 9 + store i1 true, ptr %t103 + %t104 = load ptr, ptr %a1 + %t105 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.label(ptr %t104, { ptr, i64, i64 } %t105) + call void @finch_str_drop(ptr %a50) + call void @finch_str_drop(ptr %a30) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a7) + ret void +} + +define internal %S.gen.Saved @finch.gen.beginHelper(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca %S.gen.Saved, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic2640, label %ok2641 +panic2640: + call void @finch_panic(ptr @.str.1518, i64 781, ptr @.str.1519) + unreachable +ok2641: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 4 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + call void @finch.copy.arr_str(ptr %a7, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + %t9 = insertvalue %S.gen.Saved zeroinitializer, { ptr, i64, i64 } %t8, 0 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic2642, label %ok2643 +panic2642: + call void @finch_panic(ptr @.str.1520, i64 781, ptr @.str.1521) + unreachable +ok2643: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 5 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch.copy.arr_str(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.gen.Saved %t9, { ptr, i64, i64 } %t16, 1 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2644, label %ok2645 +panic2644: + call void @finch_panic(ptr @.str.1522, i64 781, ptr @.str.1523) + unreachable +ok2645: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 6 + %t21 = load i64, ptr %t20 + %t22 = insertvalue %S.gen.Saved %t17, i64 %t21, 2 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic2646, label %ok2647 +panic2646: + call void @finch_panic(ptr @.str.1524, i64 781, ptr @.str.1525) + unreachable +ok2647: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 9 + %t26 = load i1, ptr %t25 + %t27 = insertvalue %S.gen.Saved %t22, i1 %t26, 3 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic2648, label %ok2649 +panic2648: + call void @finch_panic(ptr @.str.1526, i64 781, ptr @.str.1527) + unreachable +ok2649: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 36 + %t31 = load i64, ptr %t30 + %t32 = insertvalue %S.gen.Saved %t27, i64 %t31, 4 + store %S.gen.Saved %t32, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic2650, label %ok2651 +panic2650: + call void @finch_panic(ptr @.str.1528, i64 782, ptr @.str.1529) + unreachable +ok2651: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 36 + store i64 -1, ptr %t36 + store { ptr, i64, i64 } zeroinitializer, ptr %a37 + %t38 = load { ptr, i64, i64 }, ptr %a37 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic2652, label %ok2653 +panic2652: + call void @finch_panic(ptr @.str.1530, i64 784, ptr @.str.1531) + unreachable +ok2653: + %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 4 + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch.copy.arr_str(ptr %a43, ptr %a42) + %t44 = load { ptr, i64, i64 }, ptr %a43 + %t45 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t44, ptr %t41 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch.drop.arr_str(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a37 + %t48 = load ptr, ptr %a1 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic2654, label %ok2655 +panic2654: + call void @finch_panic(ptr @.str.1532, i64 785, ptr @.str.1533) + unreachable +ok2655: + %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 5 + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch.copy.arr_str(ptr %a52, ptr %a51) + %t53 = load { ptr, i64, i64 }, ptr %a52 + %t54 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } %t53, ptr %t50 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch.drop.arr_str(ptr %a55) + %t56 = load ptr, ptr %a1 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic2656, label %ok2657 +panic2656: + call void @finch_panic(ptr @.str.1534, i64 786, ptr @.str.1535) + unreachable +ok2657: + %t58 = getelementptr inbounds %S.gen.Gen, ptr %t56, i32 0, i32 6 + store i64 0, ptr %t58 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic2658, label %ok2659 +panic2658: + call void @finch_panic(ptr @.str.1536, i64 787, ptr @.str.1537) + unreachable +ok2659: + %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 9 + store i1 false, ptr %t61 + %t62 = load %S.gen.Saved, ptr %a33 + call void @finch.drop.arr_str(ptr %a37) + ret %S.gen.Saved %t62 +} + +define internal void @finch.gen.endHelper(ptr %p0, %S.gen.Saved %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Saved, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Saved %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic2660, label %ok2661 +panic2660: + call void @finch_panic(ptr @.str.1538, i64 792, ptr @.str.1539) + unreachable +ok2661: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 3 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1540, i64 10, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic2662, label %ok2663 +panic2662: + call void @finch_panic(ptr @.str.1541, i64 792, ptr @.str.1542) + unreachable +ok2663: + %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 5 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1543, i64 1, i64 0 }, ptr %a17 + call void @finch_str_join(ptr %a18, ptr %t15, ptr %a17) + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t12, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t12, ptr %a23 + call void @finch_str_drop(ptr %a23) + store { ptr, i64, i64 } %t19, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.1544, i64 1, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic2664, label %ok2665 +panic2664: + call void @finch_panic(ptr @.str.1545, i64 792, ptr @.str.1546) + unreachable +ok2665: + %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 4 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1547, i64 1, i64 0 }, ptr %a35 + call void @finch_str_join(ptr %a36, ptr %t33, ptr %a35) + %t37 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t30, ptr %a39 + store { ptr, i64, i64 } %t37, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t30, ptr %a41 + call void @finch_str_drop(ptr %a41) + store { ptr, i64, i64 } %t37, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } %t43, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.1548, i64 3, i64 0 }, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + %t49 = load i64, ptr %t7 + %t50 = add i64 %t49, 1 + call void @finch_arr_reserve(ptr %t6, i64 %t50, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t51 = load ptr, ptr %t6 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t51, i64 %t49 + store { ptr, i64, i64 } %t48, ptr %t52 + store i64 %t50, ptr %t7 + %t53 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 0 + %t54 = load { ptr, i64, i64 }, ptr %t53 + %t55 = load ptr, ptr %a1 + %t56 = icmp eq ptr %t55, null + br i1 %t56, label %panic2666, label %ok2667 +panic2666: + call void @finch_panic(ptr @.str.1549, i64 793, ptr @.str.1550) + unreachable +ok2667: + %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 4 + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch.copy.arr_str(ptr %a59, ptr %a58) + %t60 = load { ptr, i64, i64 }, ptr %a59 + %t61 = load { ptr, i64, i64 }, ptr %t57 + store { ptr, i64, i64 } %t60, ptr %t57 + store { ptr, i64, i64 } %t61, ptr %a62 + call void @finch.drop.arr_str(ptr %a62) + %t63 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 1 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic2668, label %ok2669 +panic2668: + call void @finch_panic(ptr @.str.1551, i64 794, ptr @.str.1552) + unreachable +ok2669: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 5 + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch.copy.arr_str(ptr %a69, ptr %a68) + %t70 = load { ptr, i64, i64 }, ptr %a69 + %t71 = load { ptr, i64, i64 }, ptr %t67 + store { ptr, i64, i64 } %t70, ptr %t67 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch.drop.arr_str(ptr %a72) + %t73 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 2 + %t74 = load i64, ptr %t73 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic2670, label %ok2671 +panic2670: + call void @finch_panic(ptr @.str.1553, i64 795, ptr @.str.1554) + unreachable +ok2671: + %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 6 + store i64 %t74, ptr %t77 + %t78 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 3 + %t79 = load i1, ptr %t78 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic2672, label %ok2673 +panic2672: + call void @finch_panic(ptr @.str.1555, i64 796, ptr @.str.1556) + unreachable +ok2673: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 9 + store i1 %t79, ptr %t82 + %t83 = getelementptr inbounds %S.gen.Saved, ptr %a2, i32 0, i32 4 + %t84 = load i64, ptr %t83 + %t85 = load ptr, ptr %a1 + %t86 = icmp eq ptr %t85, null + br i1 %t86, label %panic2674, label %ok2675 +panic2674: + call void @finch_panic(ptr @.str.1557, i64 797, ptr @.str.1558) + unreachable +ok2675: + %t87 = getelementptr inbounds %S.gen.Gen, ptr %t85, i32 0, i32 36 + store i64 %t84, ptr %t87 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.loopStart(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t3, { ptr, i64, i64 } { ptr @.str.1559, i64 3, i64 0 }) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.store(ptr %t6, { ptr, i64, i64 } { ptr @.str.1560, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1561, i64 1, i64 0 }, { ptr, i64, i64 } %t7) + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t8, { ptr, i64, i64 } { ptr @.str.1562, i64 6, i64 0 }) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t11, { ptr, i64, i64 } { ptr @.str.1563, i64 6, i64 0 }) + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t14, { ptr, i64, i64 } { ptr @.str.1564, i64 5, i64 0 }) + store { ptr, i64, i64 } %t15, ptr %a16 + %t17 = load ptr, ptr %a1 + %t18 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.br(ptr %t17, { ptr, i64, i64 } %t18) + %t19 = load ptr, ptr %a1 + %t20 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.label(ptr %t19, { ptr, i64, i64 } %t20) + %t21 = load ptr, ptr %a1 + %t22 = load { ptr, i64, i64 }, ptr %a5 + %t23 = call { ptr, i64, i64 } @finch.gen.load(ptr %t21, { ptr, i64, i64 } { ptr @.str.1565, i64 3, i64 0 }, { ptr, i64, i64 } %t22) + store { ptr, i64, i64 } %t23, ptr %a24 + %t25 = load ptr, ptr %a1 + %t26 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1566, i64 13, i64 0 }, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.1567, i64 2, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + %t36 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t35, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t35, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + %t42 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t41) + store { ptr, i64, i64 } %t41, ptr %a43 + call void @finch_str_drop(ptr %a43) + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = load ptr, ptr %a1 + %t46 = load { ptr, i64, i64 }, ptr %a44 + %t47 = load { ptr, i64, i64 }, ptr %a13 + %t48 = load { ptr, i64, i64 }, ptr %a16 + call void @finch.gen.condBr(ptr %t45, { ptr, i64, i64 } %t46, { ptr, i64, i64 } %t47, { ptr, i64, i64 } %t48) + %t49 = load ptr, ptr %a1 + %t50 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.gen.label(ptr %t49, { ptr, i64, i64 } %t50) + %t51 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t51, ptr %a52 + call void @finch_str_copy(ptr %a53, ptr %a52) + %t54 = load { ptr, i64, i64 }, ptr %a53 + %t55 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_copy(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + %t59 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t59, ptr %a60 + call void @finch_str_copy(ptr %a61, ptr %a60) + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_copy(ptr %a65, ptr %a64) + %t66 = load { ptr, i64, i64 }, ptr %a65 + %t67 = mul i64 4, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t68 = call ptr @finch_alloc(i64 %t67) + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 0 + store { ptr, i64, i64 } %t54, ptr %t69 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 1 + store { ptr, i64, i64 } %t58, ptr %t70 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 2 + store { ptr, i64, i64 } %t62, ptr %t71 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i64 3 + store { ptr, i64, i64 } %t66, ptr %t72 + %t73 = insertvalue { ptr, i64, i64 } undef, ptr %t68, 0 + %t74 = insertvalue { ptr, i64, i64 } %t73, i64 4, 1 + %t75 = insertvalue { ptr, i64, i64 } %t74, i64 4, 2 + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a16) + call void @finch_str_drop(ptr %a13) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a5) + ret { ptr, i64, i64 } %t75 +} + +define internal void @finch.gen.loopEnd(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 0, %t5 + br i1 %t6, label %range2676, label %inrange2677 +range2676: + call void @finch_panic_index(ptr @.str.1569, i64 817, i64 0, i64 %t5) + unreachable +inrange2677: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + %t10 = call { ptr, i64, i64 } @finch.gen.load(ptr %t3, { ptr, i64, i64 } { ptr @.str.1568, i64 3, i64 0 }, { ptr, i64, i64 } %t9) + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = load ptr, ptr %a1 + %t14 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1571, i64 8, i64 0 }, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t18, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.1572, i64 3, i64 0 }, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a19 + %t24 = call { ptr, i64, i64 } @finch.gen.op(ptr %t13, { ptr, i64, i64 } %t23) + store { ptr, i64, i64 } %t23, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a2 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 0, %t27 + br i1 %t28, label %range2678, label %inrange2679 +range2678: + call void @finch_panic_index(ptr @.str.1573, i64 818, i64 0, i64 %t27) + unreachable +inrange2679: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 + %t31 = load { ptr, i64, i64 }, ptr %t30 + call void @finch.gen.store(ptr %t12, { ptr, i64, i64 } { ptr @.str.1570, i64 3, i64 0 }, { ptr, i64, i64 } %t24, { ptr, i64, i64 } %t31) + store { ptr, i64, i64 } %t24, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load ptr, ptr %a1 + %t34 = load { ptr, i64, i64 }, ptr %a2 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 1, %t35 + br i1 %t36, label %range2680, label %inrange2681 +range2680: + call void @finch_panic_index(ptr @.str.1574, i64 819, i64 1, i64 %t35) + unreachable +inrange2681: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 1 + %t39 = load { ptr, i64, i64 }, ptr %t38 + call void @finch.gen.br(ptr %t33, { ptr, i64, i64 } %t39) + %t40 = load ptr, ptr %a1 + %t41 = load { ptr, i64, i64 }, ptr %a2 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 2, %t42 + br i1 %t43, label %range2682, label %inrange2683 +range2682: + call void @finch_panic_index(ptr @.str.1575, i64 820, i64 2, i64 %t42) + unreachable +inrange2683: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 2 + %t46 = load { ptr, i64, i64 }, ptr %t45 + call void @finch.gen.label(ptr %t40, { ptr, i64, i64 } %t46) + call void @finch_str_drop(ptr %a11) + ret void +} + +define internal void @finch.gen.copyAt(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.1576, i64 3, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp ne i32 %t9, 0 + br i1 %t10, label %then2684, label %else2685 +then2684: + %t11 = load ptr, ptr %a1 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1577, i64 30, i64 0 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.1578, i64 6, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + %t22 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t21, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t21, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t27, ptr %a29 + store { ptr, i64, i64 } { ptr @.str.1579, i64 1, i64 0 }, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t27, ptr %a31 + call void @finch_str_drop(ptr %a31) + %t32 = load { ptr, i64, i64 }, ptr %a28 + call void @finch.gen.emit(ptr %t11, { ptr, i64, i64 } %t32) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + br label %endif2686 +else2685: + %t34 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.1580, i64 5, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.from2687 +logic.from2687: + br i1 %t39, label %logic.end2689, label %logic.rhs2688 +logic.rhs2688: + %t40 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1581, i64 3, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.rend2690 +logic.rend2690: + br label %logic.end2689 +logic.end2689: + %t46 = phi i1 [ true, %logic.from2687 ], [ %t45, %logic.rend2690 ] + br label %logic.from2691 +logic.from2691: + br i1 %t46, label %logic.end2693, label %logic.rhs2692 +logic.rhs2692: + %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t48 = load { ptr, i64, i64 }, ptr %t47 + store { ptr, i64, i64 } %t48, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.1582, i64 6, i64 0 }, ptr %a50 + %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) + %t52 = icmp ne i32 %t51, 0 + br label %logic.from2694 +logic.from2694: + br i1 %t52, label %logic.rhs2695, label %logic.end2696 +logic.rhs2695: + %t53 = load ptr, ptr %a1 + %t54 = load %S.ast.Type, ptr %a4 + %t55 = call i1 @finch.gen.owning(ptr %t53, %S.ast.Type %t54) + br label %logic.rend2697 +logic.rend2697: + br label %logic.end2696 +logic.end2696: + %t56 = phi i1 [ false, %logic.from2694 ], [ %t55, %logic.rend2697 ] + br label %logic.rend2698 +logic.rend2698: + br label %logic.end2693 +logic.end2693: + %t57 = phi i1 [ true, %logic.from2691 ], [ %t56, %logic.rend2698 ] + br i1 %t57, label %then2699, label %else2700 +then2699: + %t58 = load ptr, ptr %a1 + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Type, ptr %a4 + %t61 = call { ptr, i64, i64 } @finch.gen.copyFn(ptr %t59, %S.ast.Type %t60) + store { ptr, i64, i64 } { ptr @.str.1583, i64 10, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1584, i64 5, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t71, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.1585, i64 6, i64 0 }, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t82, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t82, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.1586, i64 1, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + call void @finch.gen.emit(ptr %t58, { ptr, i64, i64 } %t93) + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + br label %endif2701 +else2700: + %t95 = load ptr, ptr %a1 + %t96 = load ptr, ptr %a1 + %t97 = load %S.ast.Type, ptr %a4 + %t98 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t97) + %t99 = load ptr, ptr %a1 + %t100 = load ptr, ptr %a1 + %t101 = load %S.ast.Type, ptr %a4 + %t102 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t100, %S.ast.Type %t101) + %t103 = load { ptr, i64, i64 }, ptr %a3 + %t104 = call { ptr, i64, i64 } @finch.gen.load(ptr %t99, { ptr, i64, i64 } %t102, { ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a2 + call void @finch.gen.store(ptr %t95, { ptr, i64, i64 } %t98, { ptr, i64, i64 } %t104, { ptr, i64, i64 } %t106) + store { ptr, i64, i64 } %t98, ptr %a107 + call void @finch_str_drop(ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + br label %endif2701 +endif2701: + br label %endif2686 +endif2686: + ret void +} + +define internal void @finch.drop.S_gen_Saved(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Saved, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Saved, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.copyFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.ast.Type, align 16 + %a47 = alloca %S.ast.Type, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca %S.gen.StructDef, align 16 + %a365 = alloca %S.gen.StructDef, align 16 + %a367 = alloca %S.gen.StructDef, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca i64, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.1587, i64 12, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2702, label %ok2703 +panic2702: + call void @finch_panic(ptr @.str.1588, i64 835, ptr @.str.1589) + unreachable +ok2703: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then2704, label %endif2706 +then2704: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif2706: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2707, label %ok2708 +panic2707: + call void @finch_panic(ptr @.str.1590, i64 838, ptr @.str.1591) + unreachable +ok2708: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1592, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then2709, label %else2710 +then2709: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range2712, label %inrange2713 +range2712: + call void @finch_panic_index(ptr @.str.1593, i64 841, i64 0, i64 %t41) + unreachable +inrange2713: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 + %t45 = load %S.ast.Type, ptr %t44 + store %S.ast.Type %t45, ptr %a46 + call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) + %t48 = load %S.ast.Type, ptr %a47 + store %S.ast.Type %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = load ptr, ptr %a1 + %t52 = load %S.ast.Type, ptr %a49 + %t53 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t51, %S.ast.Type %t52) + store { ptr, i64, i64 } { ptr @.str.1594, i64 55, i64 0 }, ptr %a55 + store { ptr, i64, i64 } %t53, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t53, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t58, ptr %a60 + store { ptr, i64, i64 } { ptr @.str.1595, i64 1, i64 0 }, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + call void @finch.gen.emit(ptr %t50, { ptr, i64, i64 } %t63) + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load ptr, ptr %a1 + %t66 = load %S.ast.Type, ptr %a49 + %t67 = call i1 @finch.gen.owning(ptr %t65, %S.ast.Type %t66) + br i1 %t67, label %then2714, label %endif2716 +then2714: + %t68 = load ptr, ptr %a1 + %t69 = call { ptr, i64, i64 } @finch.gen.load(ptr %t68, { ptr, i64, i64 } { ptr @.str.1596, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1597, i64 4, i64 0 }) + store { ptr, i64, i64 } %t69, ptr %a70 + %t71 = load ptr, ptr %a1 + %t72 = call { ptr, i64, i64 } @finch.gen.load(ptr %t71, { ptr, i64, i64 } { ptr @.str.1598, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1599, i64 4, i64 0 }) + store { ptr, i64, i64 } %t72, ptr %a73 + %t74 = load ptr, ptr %a1 + %t75 = load ptr, ptr %a1 + %t76 = call { ptr, i64, i64 } @finch.gen.op(ptr %t75, { ptr, i64, i64 } { ptr @.str.1601, i64 64, i64 0 }) + %t77 = call { ptr, i64, i64 } @finch.gen.load(ptr %t74, { ptr, i64, i64 } { ptr @.str.1600, i64 3, i64 0 }, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a78 + call void @finch_str_drop(ptr %a78) + store { ptr, i64, i64 } %t77, ptr %a79 + %t80 = load ptr, ptr %a1 + %t81 = load { ptr, i64, i64 }, ptr %a79 + %t82 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t80, { ptr, i64, i64 } %t81) + store { ptr, i64, i64 } %t82, ptr %a83 + %t84 = load ptr, ptr %a1 + %t85 = load ptr, ptr %a1 + %t86 = load %S.ast.Type, ptr %a49 + %t87 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t85, %S.ast.Type %t86) + store { ptr, i64, i64 } { ptr @.str.1602, i64 23, i64 0 }, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t87, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.1603, i64 6, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t97, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.1604, i64 6, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load { ptr, i64, i64 }, ptr %a83 + %t110 = extractvalue { ptr, i64, i64 } %t109, 1 + %t111 = icmp uge i64 3, %t110 + br i1 %t111, label %range2717, label %inrange2718 +range2717: + call void @finch_panic_index(ptr @.str.1605, i64 848, i64 3, i64 %t110) + unreachable +inrange2718: + %t112 = extractvalue { ptr, i64, i64 } %t109, 0 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 3 + %t114 = load { ptr, i64, i64 }, ptr %t113 + store { ptr, i64, i64 } %t108, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t108, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = call { ptr, i64, i64 } @finch.gen.op(ptr %t84, { ptr, i64, i64 } %t119) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t120, ptr %a122 + %t123 = load ptr, ptr %a1 + %t124 = load ptr, ptr %a1 + %t125 = load %S.ast.Type, ptr %a49 + %t126 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t124, %S.ast.Type %t125) + store { ptr, i64, i64 } { ptr @.str.1606, i64 23, i64 0 }, ptr %a128 + store { ptr, i64, i64 } %t126, ptr %a129 + call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) + store { ptr, i64, i64 } %t126, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t131, ptr %a133 + store { ptr, i64, i64 } { ptr @.str.1607, i64 6, i64 0 }, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + %t137 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t136, ptr %a139 + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t136, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + store { ptr, i64, i64 } %t142, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.1608, i64 6, i64 0 }, ptr %a145 + call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) + store { ptr, i64, i64 } %t142, ptr %a146 + call void @finch_str_drop(ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a143 + %t148 = load { ptr, i64, i64 }, ptr %a83 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 3, %t149 + br i1 %t150, label %range2719, label %inrange2720 +range2719: + call void @finch_panic_index(ptr @.str.1609, i64 849, i64 3, i64 %t149) + unreachable +inrange2720: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 3 + %t153 = load { ptr, i64, i64 }, ptr %t152 + store { ptr, i64, i64 } %t147, ptr %a155 + store { ptr, i64, i64 } %t153, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + store { ptr, i64, i64 } %t147, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a154 + %t159 = call { ptr, i64, i64 } @finch.gen.op(ptr %t123, { ptr, i64, i64 } %t158) + store { ptr, i64, i64 } %t158, ptr %a160 + call void @finch_str_drop(ptr %a160) + store { ptr, i64, i64 } %t159, ptr %a161 + %t162 = load ptr, ptr %a1 + %t163 = load { ptr, i64, i64 }, ptr %a122 + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = load %S.ast.Type, ptr %a49 + call void @finch.gen.copyAt(ptr %t162, { ptr, i64, i64 } %t163, { ptr, i64, i64 } %t164, %S.ast.Type %t165) + %t166 = load ptr, ptr %a1 + %t167 = load { ptr, i64, i64 }, ptr %a83 + call void @finch.gen.loopEnd(ptr %t166, { ptr, i64, i64 } %t167) + call void @finch_str_drop(ptr %a161) + call void @finch_str_drop(ptr %a122) + call void @finch.drop.arr_str(ptr %a83) + call void @finch_str_drop(ptr %a79) + call void @finch_str_drop(ptr %a73) + call void @finch_str_drop(ptr %a70) + br label %endif2716 +endif2716: + call void @finch.drop.S_ast_Type(ptr %a49) + br label %endif2711 +else2710: + %t168 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t169 = load { ptr, i64, i64 }, ptr %t168 + store { ptr, i64, i64 } %t169, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.1610, i64 3, i64 0 }, ptr %a171 + %t172 = call i32 @finch_str_eq(ptr %a170, ptr %a171) + %t173 = icmp ne i32 %t172, 0 + br i1 %t173, label %then2721, label %else2722 +then2721: + %t174 = load ptr, ptr %a1 + %t175 = load ptr, ptr %a1 + %t176 = load %S.ast.Type, ptr %a2 + %t177 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t175, %S.ast.Type %t176) + store { ptr, i64, i64 } { ptr @.str.1611, i64 55, i64 0 }, ptr %a179 + store { ptr, i64, i64 } %t177, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + store { ptr, i64, i64 } %t177, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.1612, i64 1, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + call void @finch.gen.emit(ptr %t174, { ptr, i64, i64 } %t187) + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch_str_drop(ptr %a188) + %t189 = load ptr, ptr %a1 + %t190 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t191 = load { ptr, i64, i64 }, ptr %t190 + %t192 = extractvalue { ptr, i64, i64 } %t191, 1 + %t193 = icmp uge i64 0, %t192 + br i1 %t193, label %range2724, label %inrange2725 +range2724: + call void @finch_panic_index(ptr @.str.1613, i64 855, i64 0, i64 %t192) + unreachable +inrange2725: + %t194 = extractvalue { ptr, i64, i64 } %t191, 0 + %t195 = getelementptr inbounds %S.ast.Type, ptr %t194, i64 0 + %t196 = load %S.ast.Type, ptr %t195 + %t197 = call i1 @finch.gen.owning(ptr %t189, %S.ast.Type %t196) + br label %logic.from2726 +logic.from2726: + br i1 %t197, label %logic.end2728, label %logic.rhs2727 +logic.rhs2727: + %t198 = load ptr, ptr %a1 + %t199 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t200 = load { ptr, i64, i64 }, ptr %t199 + %t201 = extractvalue { ptr, i64, i64 } %t200, 1 + %t202 = icmp uge i64 1, %t201 + br i1 %t202, label %range2729, label %inrange2730 +range2729: + call void @finch_panic_index(ptr @.str.1614, i64 855, i64 1, i64 %t201) + unreachable +inrange2730: + %t203 = extractvalue { ptr, i64, i64 } %t200, 0 + %t204 = getelementptr inbounds %S.ast.Type, ptr %t203, i64 1 + %t205 = load %S.ast.Type, ptr %t204 + %t206 = call i1 @finch.gen.owning(ptr %t198, %S.ast.Type %t205) + br label %logic.rend2731 +logic.rend2731: + br label %logic.end2728 +logic.end2728: + %t207 = phi i1 [ true, %logic.from2726 ], [ %t206, %logic.rend2731 ] + br i1 %t207, label %then2732, label %endif2734 +then2732: + %t208 = load ptr, ptr %a1 + %t209 = load ptr, ptr %a1 + %t210 = load ptr, ptr %a1 + %t211 = load %S.ast.Type, ptr %a2 + %t212 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t210, %S.ast.Type %t211) + store { ptr, i64, i64 } { ptr @.str.1616, i64 23, i64 0 }, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t212, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + store { ptr, i64, i64 } %t217, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.1617, i64 24, i64 0 }, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t217, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + %t223 = call { ptr, i64, i64 } @finch.gen.op(ptr %t209, { ptr, i64, i64 } %t222) + store { ptr, i64, i64 } %t222, ptr %a224 + call void @finch_str_drop(ptr %a224) + %t225 = call { ptr, i64, i64 } @finch.gen.load(ptr %t208, { ptr, i64, i64 } { ptr @.str.1615, i64 3, i64 0 }, { ptr, i64, i64 } %t223) + store { ptr, i64, i64 } %t223, ptr %a226 + call void @finch_str_drop(ptr %a226) + store { ptr, i64, i64 } %t225, ptr %a227 + %t228 = load ptr, ptr %a1 + %t229 = load { ptr, i64, i64 }, ptr %a227 + %t230 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t228, { ptr, i64, i64 } %t229) + store { ptr, i64, i64 } %t230, ptr %a231 + %t232 = load ptr, ptr %a1 + %t233 = load %S.ast.Type, ptr %a2 + %t234 = load { ptr, i64, i64 }, ptr %a231 + %t235 = extractvalue { ptr, i64, i64 } %t234, 1 + %t236 = icmp uge i64 3, %t235 + br i1 %t236, label %range2735, label %inrange2736 +range2735: + call void @finch_panic_index(ptr @.str.1619, i64 859, i64 3, i64 %t235) + unreachable +inrange2736: + %t237 = extractvalue { ptr, i64, i64 } %t234, 0 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 3 + %t239 = load { ptr, i64, i64 }, ptr %t238 + %t240 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t232, { ptr, i64, i64 } { ptr @.str.1618, i64 4, i64 0 }, %S.ast.Type %t233, { ptr, i64, i64 } %t239) + store { ptr, i64, i64 } %t240, ptr %a241 + %t242 = load ptr, ptr %a1 + %t243 = load %S.ast.Type, ptr %a2 + %t244 = load { ptr, i64, i64 }, ptr %a231 + %t245 = extractvalue { ptr, i64, i64 } %t244, 1 + %t246 = icmp uge i64 3, %t245 + br i1 %t246, label %range2737, label %inrange2738 +range2737: + call void @finch_panic_index(ptr @.str.1621, i64 860, i64 3, i64 %t245) + unreachable +inrange2738: + %t247 = extractvalue { ptr, i64, i64 } %t244, 0 + %t248 = getelementptr inbounds { ptr, i64, i64 }, ptr %t247, i64 3 + %t249 = load { ptr, i64, i64 }, ptr %t248 + %t250 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t242, { ptr, i64, i64 } { ptr @.str.1620, i64 4, i64 0 }, %S.ast.Type %t243, { ptr, i64, i64 } %t249) + store { ptr, i64, i64 } %t250, ptr %a251 + %t252 = load ptr, ptr %a1 + %t253 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t252, { ptr, i64, i64 } { ptr @.str.1622, i64 10, i64 0 }) + store { ptr, i64, i64 } %t253, ptr %a254 + %t255 = load ptr, ptr %a1 + %t256 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t255, { ptr, i64, i64 } { ptr @.str.1623, i64 10, i64 0 }) + store { ptr, i64, i64 } %t256, ptr %a257 + %t258 = load ptr, ptr %a1 + %t259 = load ptr, ptr %a1 + %t260 = load ptr, ptr %a1 + %t261 = load ptr, ptr %a1 + %t262 = load ptr, ptr %a1 + %t263 = load %S.ast.Type, ptr %a2 + %t264 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t262, %S.ast.Type %t263) + store { ptr, i64, i64 } { ptr @.str.1626, i64 23, i64 0 }, ptr %a266 + store { ptr, i64, i64 } %t264, ptr %a267 + call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) + store { ptr, i64, i64 } %t264, ptr %a268 + call void @finch_str_drop(ptr %a268) + %t269 = load { ptr, i64, i64 }, ptr %a265 + store { ptr, i64, i64 } %t269, ptr %a271 + store { ptr, i64, i64 } { ptr @.str.1627, i64 6, i64 0 }, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t269, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + %t275 = load { ptr, i64, i64 }, ptr %a241 + store { ptr, i64, i64 } %t274, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + store { ptr, i64, i64 } %t274, ptr %a279 + call void @finch_str_drop(ptr %a279) + %t280 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.1628, i64 14, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t280, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + %t286 = call { ptr, i64, i64 } @finch.gen.op(ptr %t261, { ptr, i64, i64 } %t285) + store { ptr, i64, i64 } %t285, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = call { ptr, i64, i64 } @finch.gen.load(ptr %t260, { ptr, i64, i64 } { ptr @.str.1625, i64 3, i64 0 }, { ptr, i64, i64 } %t286) + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_drop(ptr %a289) + store { ptr, i64, i64 } { ptr @.str.1624, i64 12, i64 0 }, ptr %a291 + store { ptr, i64, i64 } %t288, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + store { ptr, i64, i64 } %t288, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t294, ptr %a296 + store { ptr, i64, i64 } { ptr @.str.1629, i64 3, i64 0 }, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + store { ptr, i64, i64 } %t294, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a295 + %t300 = call { ptr, i64, i64 } @finch.gen.op(ptr %t259, { ptr, i64, i64 } %t299) + store { ptr, i64, i64 } %t299, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a254 + %t303 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.condBr(ptr %t258, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t302, { ptr, i64, i64 } %t303) + store { ptr, i64, i64 } %t300, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load ptr, ptr %a1 + %t306 = load { ptr, i64, i64 }, ptr %a254 + call void @finch.gen.label(ptr %t305, { ptr, i64, i64 } %t306) + %t307 = load ptr, ptr %a1 + %t308 = load ptr, ptr %a1 + %t309 = load { ptr, i64, i64 }, ptr %a251 + %t310 = load %S.ast.Type, ptr %a2 + %t311 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t308, { ptr, i64, i64 } %t309, %S.ast.Type %t310, i64 1) + %t312 = load ptr, ptr %a1 + %t313 = load { ptr, i64, i64 }, ptr %a241 + %t314 = load %S.ast.Type, ptr %a2 + %t315 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t312, { ptr, i64, i64 } %t313, %S.ast.Type %t314, i64 1) + %t316 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t317 = load { ptr, i64, i64 }, ptr %t316 + %t318 = extractvalue { ptr, i64, i64 } %t317, 1 + %t319 = icmp uge i64 0, %t318 + br i1 %t319, label %range2739, label %inrange2740 +range2739: + call void @finch_panic_index(ptr @.str.1630, i64 865, i64 0, i64 %t318) + unreachable +inrange2740: + %t320 = extractvalue { ptr, i64, i64 } %t317, 0 + %t321 = getelementptr inbounds %S.ast.Type, ptr %t320, i64 0 + %t322 = load %S.ast.Type, ptr %t321 + call void @finch.gen.copyAt(ptr %t307, { ptr, i64, i64 } %t311, { ptr, i64, i64 } %t315, %S.ast.Type %t322) + store { ptr, i64, i64 } %t311, ptr %a323 + call void @finch_str_drop(ptr %a323) + store { ptr, i64, i64 } %t315, ptr %a324 + call void @finch_str_drop(ptr %a324) + %t325 = load ptr, ptr %a1 + %t326 = load ptr, ptr %a1 + %t327 = load { ptr, i64, i64 }, ptr %a251 + %t328 = load %S.ast.Type, ptr %a2 + %t329 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t326, { ptr, i64, i64 } %t327, %S.ast.Type %t328, i64 2) + %t330 = load ptr, ptr %a1 + %t331 = load { ptr, i64, i64 }, ptr %a241 + %t332 = load %S.ast.Type, ptr %a2 + %t333 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t330, { ptr, i64, i64 } %t331, %S.ast.Type %t332, i64 2) + %t334 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t335 = load { ptr, i64, i64 }, ptr %t334 + %t336 = extractvalue { ptr, i64, i64 } %t335, 1 + %t337 = icmp uge i64 1, %t336 + br i1 %t337, label %range2741, label %inrange2742 +range2741: + call void @finch_panic_index(ptr @.str.1631, i64 866, i64 1, i64 %t336) + unreachable +inrange2742: + %t338 = extractvalue { ptr, i64, i64 } %t335, 0 + %t339 = getelementptr inbounds %S.ast.Type, ptr %t338, i64 1 + %t340 = load %S.ast.Type, ptr %t339 + call void @finch.gen.copyAt(ptr %t325, { ptr, i64, i64 } %t329, { ptr, i64, i64 } %t333, %S.ast.Type %t340) + store { ptr, i64, i64 } %t329, ptr %a341 + call void @finch_str_drop(ptr %a341) + store { ptr, i64, i64 } %t333, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load ptr, ptr %a1 + %t344 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.br(ptr %t343, { ptr, i64, i64 } %t344) + %t345 = load ptr, ptr %a1 + %t346 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.label(ptr %t345, { ptr, i64, i64 } %t346) + %t347 = load ptr, ptr %a1 + %t348 = load { ptr, i64, i64 }, ptr %a231 + call void @finch.gen.loopEnd(ptr %t347, { ptr, i64, i64 } %t348) + call void @finch_str_drop(ptr %a257) + call void @finch_str_drop(ptr %a254) + call void @finch_str_drop(ptr %a251) + call void @finch_str_drop(ptr %a241) + call void @finch.drop.arr_str(ptr %a231) + call void @finch_str_drop(ptr %a227) + br label %endif2734 +endif2734: + br label %endif2723 +else2722: + %t349 = load ptr, ptr %a1 + %t350 = icmp eq ptr %t349, null + br i1 %t350, label %panic2743, label %ok2744 +panic2743: + call void @finch_panic(ptr @.str.1632, i64 872, ptr @.str.1633) + unreachable +ok2744: + %t351 = getelementptr inbounds %S.gen.Gen, ptr %t349, i32 0, i32 16 + %t352 = load ptr, ptr %a1 + %t353 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t354 = load { ptr, i64, i64 }, ptr %t353 + %t355 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t356 = load { ptr, i64, i64 }, ptr %t355 + %t357 = call i64 @finch.gen.findStruct(ptr %t352, { ptr, i64, i64 } %t354, { ptr, i64, i64 } %t356) + %t358 = load { ptr, i64, i64 }, ptr %t351 + %t359 = extractvalue { ptr, i64, i64 } %t358, 1 + %t360 = icmp uge i64 %t357, %t359 + br i1 %t360, label %range2745, label %inrange2746 +range2745: + call void @finch_panic_index(ptr @.str.1634, i64 872, i64 %t357, i64 %t359) + unreachable +inrange2746: + %t361 = extractvalue { ptr, i64, i64 } %t358, 0 + %t362 = getelementptr inbounds %S.gen.StructDef, ptr %t361, i64 %t357 + %t363 = load %S.gen.StructDef, ptr %t362 + store %S.gen.StructDef %t363, ptr %a364 + call void @finch.copy.S_gen_StructDef(ptr %a365, ptr %a364) + %t366 = load %S.gen.StructDef, ptr %a365 + store %S.gen.StructDef %t366, ptr %a367 + %t368 = load ptr, ptr %a1 + %t369 = load %S.ast.Type, ptr %a2 + %t370 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t368, %S.ast.Type %t369) + store { ptr, i64, i64 } %t370, ptr %a371 + %t372 = load ptr, ptr %a1 + %t373 = load { ptr, i64, i64 }, ptr %a371 + %t374 = load ptr, ptr %a1 + %t375 = load { ptr, i64, i64 }, ptr %a371 + %t376 = call { ptr, i64, i64 } @finch.gen.load(ptr %t374, { ptr, i64, i64 } %t375, { ptr, i64, i64 } { ptr @.str.1635, i64 4, i64 0 }) + call void @finch.gen.store(ptr %t372, { ptr, i64, i64 } %t373, { ptr, i64, i64 } %t376, { ptr, i64, i64 } { ptr @.str.1636, i64 4, i64 0 }) + store { ptr, i64, i64 } %t376, ptr %a377 + call void @finch_str_drop(ptr %a377) + %t378 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 + %t379 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 + %t380 = load i64, ptr %t379 + store i64 0, ptr %a381 + br label %for.cond2747 +for.cond2747: + %t382 = load i64, ptr %a381 + %t383 = icmp slt i64 %t382, %t380 + br i1 %t383, label %for.body2748, label %for.end2750 +for.body2748: + %t384 = load ptr, ptr %a1 + %t385 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 + %t386 = load i64, ptr %a381 + %t387 = load { ptr, i64, i64 }, ptr %t385 + %t388 = extractvalue { ptr, i64, i64 } %t387, 1 + %t389 = icmp uge i64 %t386, %t388 + br i1 %t389, label %range2751, label %inrange2752 +range2751: + call void @finch_panic_index(ptr @.str.1637, i64 876, i64 %t386, i64 %t388) + unreachable +inrange2752: + %t390 = extractvalue { ptr, i64, i64 } %t387, 0 + %t391 = getelementptr inbounds %S.ast.Type, ptr %t390, i64 %t386 + %t392 = load %S.ast.Type, ptr %t391 + %t393 = call i1 @finch.gen.owning(ptr %t384, %S.ast.Type %t392) + br i1 %t393, label %then2753, label %endif2755 +then2753: + %t394 = load ptr, ptr %a1 + %t395 = load { ptr, i64, i64 }, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1638, i64 23, i64 0 }, ptr %a397 + store { ptr, i64, i64 } %t395, ptr %a398 + call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a396 + store { ptr, i64, i64 } %t399, ptr %a401 + store { ptr, i64, i64 } { ptr @.str.1639, i64 23, i64 0 }, ptr %a402 + call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) + store { ptr, i64, i64 } %t399, ptr %a403 + call void @finch_str_drop(ptr %a403) + %t404 = load { ptr, i64, i64 }, ptr %a400 + %t405 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 3 + %t406 = load i64, ptr %a381 + %t407 = load { ptr, i64, i64 }, ptr %t405 + %t408 = extractvalue { ptr, i64, i64 } %t407, 1 + %t409 = icmp uge i64 %t406, %t408 + br i1 %t409, label %range2756, label %inrange2757 +range2756: + call void @finch_panic_index(ptr @.str.1640, i64 877, i64 %t406, i64 %t408) + unreachable +inrange2757: + %t410 = extractvalue { ptr, i64, i64 } %t407, 0 + %t411 = getelementptr inbounds i64, ptr %t410, i64 %t406 + %t412 = load i64, ptr %t411 + call void @finch_str_from_int(ptr %a413, i64 %t412) + %t414 = load { ptr, i64, i64 }, ptr %a413 + store { ptr, i64, i64 } %t404, ptr %a416 + store { ptr, i64, i64 } %t414, ptr %a417 + call void @finch_str_concat(ptr %a415, ptr %a416, ptr %a417) + store { ptr, i64, i64 } %t404, ptr %a418 + call void @finch_str_drop(ptr %a418) + store { ptr, i64, i64 } %t414, ptr %a419 + call void @finch_str_drop(ptr %a419) + %t420 = load { ptr, i64, i64 }, ptr %a415 + %t421 = call { ptr, i64, i64 } @finch.gen.op(ptr %t394, { ptr, i64, i64 } %t420) + store { ptr, i64, i64 } %t420, ptr %a422 + call void @finch_str_drop(ptr %a422) + store { ptr, i64, i64 } %t421, ptr %a423 + %t424 = load ptr, ptr %a1 + %t425 = load { ptr, i64, i64 }, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1641, i64 23, i64 0 }, ptr %a427 + store { ptr, i64, i64 } %t425, ptr %a428 + call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) + %t429 = load { ptr, i64, i64 }, ptr %a426 + store { ptr, i64, i64 } %t429, ptr %a431 + store { ptr, i64, i64 } { ptr @.str.1642, i64 23, i64 0 }, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 3 + %t436 = load i64, ptr %a381 + %t437 = load { ptr, i64, i64 }, ptr %t435 + %t438 = extractvalue { ptr, i64, i64 } %t437, 1 + %t439 = icmp uge i64 %t436, %t438 + br i1 %t439, label %range2758, label %inrange2759 +range2758: + call void @finch_panic_index(ptr @.str.1643, i64 878, i64 %t436, i64 %t438) + unreachable +inrange2759: + %t440 = extractvalue { ptr, i64, i64 } %t437, 0 + %t441 = getelementptr inbounds i64, ptr %t440, i64 %t436 + %t442 = load i64, ptr %t441 + call void @finch_str_from_int(ptr %a443, i64 %t442) + %t444 = load { ptr, i64, i64 }, ptr %a443 + store { ptr, i64, i64 } %t434, ptr %a446 + store { ptr, i64, i64 } %t444, ptr %a447 + call void @finch_str_concat(ptr %a445, ptr %a446, ptr %a447) + store { ptr, i64, i64 } %t434, ptr %a448 + call void @finch_str_drop(ptr %a448) + store { ptr, i64, i64 } %t444, ptr %a449 + call void @finch_str_drop(ptr %a449) + %t450 = load { ptr, i64, i64 }, ptr %a445 + %t451 = call { ptr, i64, i64 } @finch.gen.op(ptr %t424, { ptr, i64, i64 } %t450) + store { ptr, i64, i64 } %t450, ptr %a452 + call void @finch_str_drop(ptr %a452) + store { ptr, i64, i64 } %t451, ptr %a453 + %t454 = load ptr, ptr %a1 + %t455 = load { ptr, i64, i64 }, ptr %a423 + %t456 = load { ptr, i64, i64 }, ptr %a453 + %t457 = getelementptr inbounds %S.gen.StructDef, ptr %a367, i32 0, i32 12 + %t458 = load i64, ptr %a381 + %t459 = load { ptr, i64, i64 }, ptr %t457 + %t460 = extractvalue { ptr, i64, i64 } %t459, 1 + %t461 = icmp uge i64 %t458, %t460 + br i1 %t461, label %range2760, label %inrange2761 +range2760: + call void @finch_panic_index(ptr @.str.1644, i64 879, i64 %t458, i64 %t460) + unreachable +inrange2761: + %t462 = extractvalue { ptr, i64, i64 } %t459, 0 + %t463 = getelementptr inbounds %S.ast.Type, ptr %t462, i64 %t458 + %t464 = load %S.ast.Type, ptr %t463 + call void @finch.gen.copyAt(ptr %t454, { ptr, i64, i64 } %t455, { ptr, i64, i64 } %t456, %S.ast.Type %t464) + call void @finch_str_drop(ptr %a453) + call void @finch_str_drop(ptr %a423) + br label %endif2755 +endif2755: + br label %for.step2749 +for.step2749: + %t465 = load i64, ptr %a381 + %t466 = add i64 %t465, 1 + store i64 %t466, ptr %a381 + br label %for.cond2747 +for.end2750: + call void @finch_str_drop(ptr %a371) + call void @finch.drop.S_gen_StructDef(ptr %a367) + br label %endif2723 +endif2723: + br label %endif2711 +endif2711: + %t467 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t467, { ptr, i64, i64 } { ptr @.str.1645, i64 8, i64 0 }) + %t468 = load ptr, ptr %a1 + %t469 = load %S.gen.Saved, ptr %a32 + %t470 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1646, i64 21, i64 0 }, ptr %a472 + store { ptr, i64, i64 } %t470, ptr %a473 + call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a471 + store { ptr, i64, i64 } %t474, ptr %a476 + store { ptr, i64, i64 } { ptr @.str.1647, i64 20, i64 0 }, ptr %a477 + call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) + store { ptr, i64, i64 } %t474, ptr %a478 + call void @finch_str_drop(ptr %a478) + %t479 = load { ptr, i64, i64 }, ptr %a475 + call void @finch.gen.endHelper(ptr %t468, %S.gen.Saved %t469, { ptr, i64, i64 } %t479) + store { ptr, i64, i64 } %t479, ptr %a480 + call void @finch_str_drop(ptr %a480) + %t481 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t481 +} + +define internal void @finch.drop.S_gen_Val(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Val, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Val, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.copyValue(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a24 = alloca %S.gen.Val, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + %t7 = xor i1 %t6, true + br i1 %t7, label %then2762, label %endif2764 +then2762: + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch_str_copy(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t11 +endif2764: + %t12 = load ptr, ptr %a1 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_copy(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t16, 0 + %t18 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t18, ptr %a19 + call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) + %t21 = load %S.ast.Type, ptr %a20 + %t22 = insertvalue %S.gen.Val %t17, %S.ast.Type %t21, 1 + %t23 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t12, %S.gen.Val %t22) + store %S.gen.Val %t22, ptr %a24 + call void @finch.drop.S_gen_Val(ptr %a24) + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = load ptr, ptr %a1 + %t28 = load %S.ast.Type, ptr %a3 + %t29 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t27, %S.ast.Type %t28) + %t30 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t26, { ptr, i64, i64 } %t29) + store { ptr, i64, i64 } %t29, ptr %a31 + call void @finch_str_drop(ptr %a31) + store { ptr, i64, i64 } %t30, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = load { ptr, i64, i64 }, ptr %a32 + %t35 = load { ptr, i64, i64 }, ptr %a25 + %t36 = load %S.ast.Type, ptr %a3 + call void @finch.gen.copyAt(ptr %t33, { ptr, i64, i64 } %t34, { ptr, i64, i64 } %t35, %S.ast.Type %t36) + %t37 = load ptr, ptr %a1 + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Type, ptr %a3 + %t40 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t38, %S.ast.Type %t39) + %t41 = load { ptr, i64, i64 }, ptr %a32 + %t42 = call { ptr, i64, i64 } @finch.gen.load(ptr %t37, { ptr, i64, i64 } %t40, { ptr, i64, i64 } %t41) + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_drop(ptr %a43) + call void @finch_str_drop(ptr %a32) + call void @finch_str_drop(ptr %a25) + ret { ptr, i64, i64 } %t42 +} + +define internal void @finch.gen.dropAt(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + %t7 = xor i1 %t6, true + br i1 %t7, label %then2765, label %endif2767 +then2765: + ret void +endif2767: + %t8 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1648, i64 3, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then2768, label %else2769 +then2768: + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1649, i64 30, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.1650, i64 1, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + call void @finch.gen.emit(ptr %t14, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_drop(ptr %a25) + br label %endif2770 +else2769: + %t26 = load ptr, ptr %a1 + %t27 = load ptr, ptr %a1 + %t28 = load %S.ast.Type, ptr %a3 + %t29 = call { ptr, i64, i64 } @finch.gen.dropFn(ptr %t27, %S.ast.Type %t28) + store { ptr, i64, i64 } { ptr @.str.1651, i64 10, i64 0 }, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } %t34, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.1652, i64 5, i64 0 }, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + %t40 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t39, ptr %a42 + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t39, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.1653, i64 1, i64 0 }, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t45, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + call void @finch.gen.emit(ptr %t26, { ptr, i64, i64 } %t50) + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %endif2770 +endif2770: + ret void +} + +define internal void @finch.gen.dropValue(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca %S.ast.Type, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.gen.Val, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + br i1 %t6, label %then2771, label %endif2773 +then2771: + %t7 = load ptr, ptr %a1 + %t8 = load ptr, ptr %a1 + %t9 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + %t13 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t12, 0 + %t14 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t14, ptr %a15 + call void @finch.copy.S_ast_Type(ptr %a16, ptr %a15) + %t17 = load %S.ast.Type, ptr %a16 + %t18 = insertvalue %S.gen.Val %t13, %S.ast.Type %t17, 1 + %t19 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t8, %S.gen.Val %t18) + store %S.gen.Val %t18, ptr %a20 + call void @finch.drop.S_gen_Val(ptr %a20) + %t21 = load %S.ast.Type, ptr %a3 + call void @finch.gen.dropAt(ptr %t7, { ptr, i64, i64 } %t19, %S.ast.Type %t21) + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_drop(ptr %a22) + br label %endif2773 +endif2773: + ret void +} + +define internal void @finch.gen.release(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 + %t4 = load i1, ptr %t3 + br label %logic.from2774 +logic.from2774: + br i1 %t4, label %logic.rhs2775, label %logic.end2776 +logic.rhs2775: + %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = icmp sgt i64 %t7, 0 + br label %logic.rend2777 +logic.rend2777: + br label %logic.end2776 +logic.end2776: + %t9 = phi i1 [ false, %logic.from2774 ], [ %t8, %logic.rend2777 ] + br label %logic.from2778 +logic.from2778: + br i1 %t9, label %logic.rhs2779, label %logic.end2780 +logic.rhs2779: + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true + br label %logic.rend2781 +logic.rend2781: + br label %logic.end2780 +logic.end2780: + %t14 = phi i1 [ false, %logic.from2778 ], [ %t13, %logic.rend2781 ] + br label %logic.from2782 +logic.from2782: + br i1 %t14, label %logic.rhs2783, label %logic.end2784 +logic.rhs2783: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2785 +logic.rend2785: + br label %logic.end2784 +logic.end2784: + %t19 = phi i1 [ false, %logic.from2782 ], [ %t18, %logic.rend2785 ] + br i1 %t19, label %then2786, label %endif2788 +then2786: + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t24 = load %S.ast.Type, ptr %t23 + call void @finch.gen.dropValue(ptr %t20, { ptr, i64, i64 } %t22, %S.ast.Type %t24) + br label %endif2788 +endif2788: + ret void +} + +define internal i1 @finch.gen.isConstant({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1655, i64 1, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_starts(ptr %a3, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + %t8 = xor i1 %t7, true + ret i1 %t8 +} + +define internal { ptr, i64, i64 } @finch.gen.dropFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.ast.Type, align 16 + %a47 = alloca %S.ast.Type, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.ast.Type, align 16 + %a127 = alloca %S.ast.Type, align 16 + %a135 = alloca %S.ast.Type, align 16 + %a136 = alloca %S.ast.Type, align 16 + %a138 = alloca %S.ast.Type, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca %S.gen.StructDef, align 16 + %a249 = alloca %S.gen.StructDef, align 16 + %a251 = alloca %S.gen.StructDef, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca i64, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.1656, i64 12, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2789, label %ok2790 +panic2789: + call void @finch_panic(ptr @.str.1657, i64 930, ptr @.str.1658) + unreachable +ok2790: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then2791, label %endif2793 +then2791: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif2793: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2794, label %ok2795 +panic2794: + call void @finch_panic(ptr @.str.1659, i64 933, ptr @.str.1660) + unreachable +ok2795: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1661, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then2796, label %else2797 +then2796: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range2799, label %inrange2800 +range2799: + call void @finch_panic_index(ptr @.str.1662, i64 936, i64 0, i64 %t41) + unreachable +inrange2800: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 + %t45 = load %S.ast.Type, ptr %t44 + store %S.ast.Type %t45, ptr %a46 + call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) + %t48 = load %S.ast.Type, ptr %a47 + store %S.ast.Type %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = load %S.ast.Type, ptr %a49 + %t52 = call i1 @finch.gen.owning(ptr %t50, %S.ast.Type %t51) + br i1 %t52, label %then2801, label %endif2803 +then2801: + %t53 = load ptr, ptr %a1 + %t54 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1663, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1664, i64 2, i64 0 }) + store { ptr, i64, i64 } %t54, ptr %a55 + %t56 = load ptr, ptr %a1 + %t57 = load ptr, ptr %a1 + %t58 = call { ptr, i64, i64 } @finch.gen.op(ptr %t57, { ptr, i64, i64 } { ptr @.str.1666, i64 62, i64 0 }) + %t59 = call { ptr, i64, i64 } @finch.gen.load(ptr %t56, { ptr, i64, i64 } { ptr @.str.1665, i64 3, i64 0 }, { ptr, i64, i64 } %t58) + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_drop(ptr %a60) + store { ptr, i64, i64 } %t59, ptr %a61 + %t62 = load ptr, ptr %a1 + %t63 = load { ptr, i64, i64 }, ptr %a61 + %t64 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t62, { ptr, i64, i64 } %t63) + store { ptr, i64, i64 } %t64, ptr %a65 + %t66 = load ptr, ptr %a1 + %t67 = load ptr, ptr %a1 + %t68 = load %S.ast.Type, ptr %a49 + %t69 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t67, %S.ast.Type %t68) + store { ptr, i64, i64 } { ptr @.str.1667, i64 23, i64 0 }, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.1668, i64 6, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + %t80 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t79, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t79, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1669, i64 6, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = load { ptr, i64, i64 }, ptr %a65 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 3, %t92 + br i1 %t93, label %range2804, label %inrange2805 +range2804: + call void @finch_panic_index(ptr @.str.1670, i64 941, i64 3, i64 %t92) + unreachable +inrange2805: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 3 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t90, ptr %a98 + store { ptr, i64, i64 } %t96, ptr %a99 + call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) + store { ptr, i64, i64 } %t90, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a97 + %t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t66, { ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t101, ptr %a103 + call void @finch_str_drop(ptr %a103) + store { ptr, i64, i64 } %t102, ptr %a104 + %t105 = load ptr, ptr %a1 + %t106 = load { ptr, i64, i64 }, ptr %a104 + %t107 = load %S.ast.Type, ptr %a49 + call void @finch.gen.dropAt(ptr %t105, { ptr, i64, i64 } %t106, %S.ast.Type %t107) + %t108 = load ptr, ptr %a1 + %t109 = load { ptr, i64, i64 }, ptr %a65 + call void @finch.gen.loopEnd(ptr %t108, { ptr, i64, i64 } %t109) + call void @finch_str_drop(ptr %a104) + call void @finch.drop.arr_str(ptr %a65) + call void @finch_str_drop(ptr %a61) + call void @finch_str_drop(ptr %a55) + br label %endif2803 +endif2803: + %t110 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t110, { ptr, i64, i64 } { ptr @.str.1671, i64 33, i64 0 }) + call void @finch.drop.S_ast_Type(ptr %a49) + br label %endif2798 +else2797: + %t111 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.1672, i64 3, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br i1 %t116, label %then2806, label %else2807 +then2806: + %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = extractvalue { ptr, i64, i64 } %t118, 1 + %t120 = icmp uge i64 0, %t119 + br i1 %t120, label %range2809, label %inrange2810 +range2809: + call void @finch_panic_index(ptr @.str.1673, i64 947, i64 0, i64 %t119) + unreachable +inrange2810: + %t121 = extractvalue { ptr, i64, i64 } %t118, 0 + %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 0 + %t123 = load %S.ast.Type, ptr %t122 + store %S.ast.Type %t123, ptr %a124 + call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) + %t126 = load %S.ast.Type, ptr %a125 + store %S.ast.Type %t126, ptr %a127 + %t128 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t129 = load { ptr, i64, i64 }, ptr %t128 + %t130 = extractvalue { ptr, i64, i64 } %t129, 1 + %t131 = icmp uge i64 1, %t130 + br i1 %t131, label %range2811, label %inrange2812 +range2811: + call void @finch_panic_index(ptr @.str.1674, i64 948, i64 1, i64 %t130) + unreachable +inrange2812: + %t132 = extractvalue { ptr, i64, i64 } %t129, 0 + %t133 = getelementptr inbounds %S.ast.Type, ptr %t132, i64 1 + %t134 = load %S.ast.Type, ptr %t133 + store %S.ast.Type %t134, ptr %a135 + call void @finch.copy.S_ast_Type(ptr %a136, ptr %a135) + %t137 = load %S.ast.Type, ptr %a136 + store %S.ast.Type %t137, ptr %a138 + %t139 = load ptr, ptr %a1 + %t140 = load %S.ast.Type, ptr %a127 + %t141 = call i1 @finch.gen.owning(ptr %t139, %S.ast.Type %t140) + br label %logic.from2813 +logic.from2813: + br i1 %t141, label %logic.end2815, label %logic.rhs2814 +logic.rhs2814: + %t142 = load ptr, ptr %a1 + %t143 = load %S.ast.Type, ptr %a138 + %t144 = call i1 @finch.gen.owning(ptr %t142, %S.ast.Type %t143) + br label %logic.rend2816 +logic.rend2816: + br label %logic.end2815 +logic.end2815: + %t145 = phi i1 [ true, %logic.from2813 ], [ %t144, %logic.rend2816 ] + br i1 %t145, label %then2817, label %endif2819 +then2817: + %t146 = load ptr, ptr %a1 + %t147 = load ptr, ptr %a1 + %t148 = load ptr, ptr %a1 + %t149 = load %S.ast.Type, ptr %a2 + %t150 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t148, %S.ast.Type %t149) + store { ptr, i64, i64 } { ptr @.str.1676, i64 23, i64 0 }, ptr %a152 + store { ptr, i64, i64 } %t150, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + store { ptr, i64, i64 } %t155, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.1677, i64 22, i64 0 }, ptr %a158 + call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) + store { ptr, i64, i64 } %t155, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load { ptr, i64, i64 }, ptr %a156 + %t161 = call { ptr, i64, i64 } @finch.gen.op(ptr %t147, { ptr, i64, i64 } %t160) + store { ptr, i64, i64 } %t160, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = call { ptr, i64, i64 } @finch.gen.load(ptr %t146, { ptr, i64, i64 } { ptr @.str.1675, i64 3, i64 0 }, { ptr, i64, i64 } %t161) + store { ptr, i64, i64 } %t161, ptr %a164 + call void @finch_str_drop(ptr %a164) + store { ptr, i64, i64 } %t163, ptr %a165 + %t166 = load ptr, ptr %a1 + %t167 = load { ptr, i64, i64 }, ptr %a165 + %t168 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t166, { ptr, i64, i64 } %t167) + store { ptr, i64, i64 } %t168, ptr %a169 + %t170 = load ptr, ptr %a1 + %t171 = load %S.ast.Type, ptr %a2 + %t172 = load { ptr, i64, i64 }, ptr %a169 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 3, %t173 + br i1 %t174, label %range2820, label %inrange2821 +range2820: + call void @finch_panic_index(ptr @.str.1679, i64 952, i64 3, i64 %t173) + unreachable +inrange2821: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i64 3 + %t177 = load { ptr, i64, i64 }, ptr %t176 + %t178 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t170, { ptr, i64, i64 } { ptr @.str.1678, i64 2, i64 0 }, %S.ast.Type %t171, { ptr, i64, i64 } %t177) + store { ptr, i64, i64 } %t178, ptr %a179 + %t180 = load ptr, ptr %a1 + %t181 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t180, { ptr, i64, i64 } { ptr @.str.1680, i64 10, i64 0 }) + store { ptr, i64, i64 } %t181, ptr %a182 + %t183 = load ptr, ptr %a1 + %t184 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t183, { ptr, i64, i64 } { ptr @.str.1681, i64 10, i64 0 }) + store { ptr, i64, i64 } %t184, ptr %a185 + %t186 = load ptr, ptr %a1 + %t187 = load ptr, ptr %a1 + %t188 = load ptr, ptr %a1 + %t189 = load ptr, ptr %a1 + %t190 = load { ptr, i64, i64 }, ptr %a179 + %t191 = load %S.ast.Type, ptr %a2 + %t192 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t189, { ptr, i64, i64 } %t190, %S.ast.Type %t191, i64 0) + %t193 = call { ptr, i64, i64 } @finch.gen.load(ptr %t188, { ptr, i64, i64 } { ptr @.str.1683, i64 3, i64 0 }, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a194 + call void @finch_str_drop(ptr %a194) + store { ptr, i64, i64 } { ptr @.str.1682, i64 12, i64 0 }, ptr %a196 + store { ptr, i64, i64 } %t193, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t193, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + store { ptr, i64, i64 } %t199, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.1684, i64 3, i64 0 }, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t199, ptr %a203 + call void @finch_str_drop(ptr %a203) + %t204 = load { ptr, i64, i64 }, ptr %a200 + %t205 = call { ptr, i64, i64 } @finch.gen.op(ptr %t187, { ptr, i64, i64 } %t204) + store { ptr, i64, i64 } %t204, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a182 + %t208 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.condBr(ptr %t186, { ptr, i64, i64 } %t205, { ptr, i64, i64 } %t207, { ptr, i64, i64 } %t208) + store { ptr, i64, i64 } %t205, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load ptr, ptr %a1 + %t211 = load { ptr, i64, i64 }, ptr %a182 + call void @finch.gen.label(ptr %t210, { ptr, i64, i64 } %t211) + %t212 = load ptr, ptr %a1 + %t213 = load ptr, ptr %a1 + %t214 = load { ptr, i64, i64 }, ptr %a179 + %t215 = load %S.ast.Type, ptr %a2 + %t216 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t213, { ptr, i64, i64 } %t214, %S.ast.Type %t215, i64 1) + %t217 = load %S.ast.Type, ptr %a127 + call void @finch.gen.dropAt(ptr %t212, { ptr, i64, i64 } %t216, %S.ast.Type %t217) + store { ptr, i64, i64 } %t216, ptr %a218 + call void @finch_str_drop(ptr %a218) + %t219 = load ptr, ptr %a1 + %t220 = load ptr, ptr %a1 + %t221 = load { ptr, i64, i64 }, ptr %a179 + %t222 = load %S.ast.Type, ptr %a2 + %t223 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t220, { ptr, i64, i64 } %t221, %S.ast.Type %t222, i64 2) + %t224 = load %S.ast.Type, ptr %a138 + call void @finch.gen.dropAt(ptr %t219, { ptr, i64, i64 } %t223, %S.ast.Type %t224) + store { ptr, i64, i64 } %t223, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load ptr, ptr %a1 + %t227 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.br(ptr %t226, { ptr, i64, i64 } %t227) + %t228 = load ptr, ptr %a1 + %t229 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.label(ptr %t228, { ptr, i64, i64 } %t229) + %t230 = load ptr, ptr %a1 + %t231 = load { ptr, i64, i64 }, ptr %a169 + call void @finch.gen.loopEnd(ptr %t230, { ptr, i64, i64 } %t231) + call void @finch_str_drop(ptr %a185) + call void @finch_str_drop(ptr %a182) + call void @finch_str_drop(ptr %a179) + call void @finch.drop.arr_str(ptr %a169) + call void @finch_str_drop(ptr %a165) + br label %endif2819 +endif2819: + %t232 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t232, { ptr, i64, i64 } { ptr @.str.1685, i64 33, i64 0 }) + call void @finch.drop.S_ast_Type(ptr %a138) + call void @finch.drop.S_ast_Type(ptr %a127) + br label %endif2808 +else2807: + %t233 = load ptr, ptr %a1 + %t234 = icmp eq ptr %t233, null + br i1 %t234, label %panic2822, label %ok2823 +panic2822: + call void @finch_panic(ptr @.str.1686, i64 965, ptr @.str.1687) + unreachable +ok2823: + %t235 = getelementptr inbounds %S.gen.Gen, ptr %t233, i32 0, i32 16 + %t236 = load ptr, ptr %a1 + %t237 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = call i64 @finch.gen.findStruct(ptr %t236, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t240) + %t242 = load { ptr, i64, i64 }, ptr %t235 + %t243 = extractvalue { ptr, i64, i64 } %t242, 1 + %t244 = icmp uge i64 %t241, %t243 + br i1 %t244, label %range2824, label %inrange2825 +range2824: + call void @finch_panic_index(ptr @.str.1688, i64 965, i64 %t241, i64 %t243) + unreachable +inrange2825: + %t245 = extractvalue { ptr, i64, i64 } %t242, 0 + %t246 = getelementptr inbounds %S.gen.StructDef, ptr %t245, i64 %t241 + %t247 = load %S.gen.StructDef, ptr %t246 + store %S.gen.StructDef %t247, ptr %a248 + call void @finch.copy.S_gen_StructDef(ptr %a249, ptr %a248) + %t250 = load %S.gen.StructDef, ptr %a249 + store %S.gen.StructDef %t250, ptr %a251 + %t252 = load ptr, ptr %a1 + %t253 = load %S.ast.Type, ptr %a2 + %t254 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t252, %S.ast.Type %t253) + store { ptr, i64, i64 } %t254, ptr %a255 + %t256 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 + %t257 = getelementptr inbounds { ptr, i64, i64 }, ptr %t256, i32 0, i32 1 + %t258 = load i64, ptr %t257 + store i64 0, ptr %a259 + br label %for.cond2826 +for.cond2826: + %t260 = load i64, ptr %a259 + %t261 = icmp slt i64 %t260, %t258 + br i1 %t261, label %for.body2827, label %for.end2829 +for.body2827: + %t262 = load ptr, ptr %a1 + %t263 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 + %t264 = load i64, ptr %a259 + %t265 = load { ptr, i64, i64 }, ptr %t263 + %t266 = extractvalue { ptr, i64, i64 } %t265, 1 + %t267 = icmp uge i64 %t264, %t266 + br i1 %t267, label %range2830, label %inrange2831 +range2830: + call void @finch_panic_index(ptr @.str.1689, i64 968, i64 %t264, i64 %t266) + unreachable +inrange2831: + %t268 = extractvalue { ptr, i64, i64 } %t265, 0 + %t269 = getelementptr inbounds %S.ast.Type, ptr %t268, i64 %t264 + %t270 = load %S.ast.Type, ptr %t269 + %t271 = call i1 @finch.gen.owning(ptr %t262, %S.ast.Type %t270) + br i1 %t271, label %then2832, label %endif2834 +then2832: + %t272 = load ptr, ptr %a1 + %t273 = load ptr, ptr %a1 + %t274 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } { ptr @.str.1690, i64 23, i64 0 }, ptr %a276 + store { ptr, i64, i64 } %t274, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a275 + store { ptr, i64, i64 } %t278, ptr %a280 + store { ptr, i64, i64 } { ptr @.str.1691, i64 21, i64 0 }, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + %t284 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 3 + %t285 = load i64, ptr %a259 + %t286 = load { ptr, i64, i64 }, ptr %t284 + %t287 = extractvalue { ptr, i64, i64 } %t286, 1 + %t288 = icmp uge i64 %t285, %t287 + br i1 %t288, label %range2835, label %inrange2836 +range2835: + call void @finch_panic_index(ptr @.str.1692, i64 969, i64 %t285, i64 %t287) + unreachable +inrange2836: + %t289 = extractvalue { ptr, i64, i64 } %t286, 0 + %t290 = getelementptr inbounds i64, ptr %t289, i64 %t285 + %t291 = load i64, ptr %t290 + call void @finch_str_from_int(ptr %a292, i64 %t291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t283, ptr %a295 + store { ptr, i64, i64 } %t293, ptr %a296 + call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) + store { ptr, i64, i64 } %t283, ptr %a297 + call void @finch_str_drop(ptr %a297) + store { ptr, i64, i64 } %t293, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a294 + %t300 = call { ptr, i64, i64 } @finch.gen.op(ptr %t273, { ptr, i64, i64 } %t299) + store { ptr, i64, i64 } %t299, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = getelementptr inbounds %S.gen.StructDef, ptr %a251, i32 0, i32 12 + %t303 = load i64, ptr %a259 + %t304 = load { ptr, i64, i64 }, ptr %t302 + %t305 = extractvalue { ptr, i64, i64 } %t304, 1 + %t306 = icmp uge i64 %t303, %t305 + br i1 %t306, label %range2837, label %inrange2838 +range2837: + call void @finch_panic_index(ptr @.str.1693, i64 969, i64 %t303, i64 %t305) + unreachable +inrange2838: + %t307 = extractvalue { ptr, i64, i64 } %t304, 0 + %t308 = getelementptr inbounds %S.ast.Type, ptr %t307, i64 %t303 + %t309 = load %S.ast.Type, ptr %t308 + call void @finch.gen.dropAt(ptr %t272, { ptr, i64, i64 } %t300, %S.ast.Type %t309) + store { ptr, i64, i64 } %t300, ptr %a310 + call void @finch_str_drop(ptr %a310) + br label %endif2834 +endif2834: + br label %for.step2828 +for.step2828: + %t311 = load i64, ptr %a259 + %t312 = add i64 %t311, 1 + store i64 %t312, ptr %a259 + br label %for.cond2826 +for.end2829: + call void @finch_str_drop(ptr %a255) + call void @finch.drop.S_gen_StructDef(ptr %a251) + br label %endif2808 +endif2808: + br label %endif2798 +endif2798: + %t313 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t313, { ptr, i64, i64 } { ptr @.str.1694, i64 8, i64 0 }) + %t314 = load ptr, ptr %a1 + %t315 = load %S.gen.Saved, ptr %a32 + %t316 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1695, i64 21, i64 0 }, ptr %a318 + store { ptr, i64, i64 } %t316, ptr %a319 + call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a317 + store { ptr, i64, i64 } %t320, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.1696, i64 8, i64 0 }, ptr %a323 + call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) + store { ptr, i64, i64 } %t320, ptr %a324 + call void @finch_str_drop(ptr %a324) + %t325 = load { ptr, i64, i64 }, ptr %a321 + call void @finch.gen.endHelper(ptr %t314, %S.gen.Saved %t315, { ptr, i64, i64 } %t325) + store { ptr, i64, i64 } %t325, ptr %a326 + call void @finch_str_drop(ptr %a326) + %t327 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t327 +} + +define internal void @finch.gen.hold(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.ast.Type, align 16 + %a33 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 + %t4 = load i1, ptr %t3 + br label %logic.from2839 +logic.from2839: + br i1 %t4, label %logic.rhs2840, label %logic.end2841 +logic.rhs2840: + %t5 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = icmp sgt i64 %t7, 0 + br label %logic.rend2842 +logic.rend2842: + br label %logic.end2841 +logic.end2841: + %t9 = phi i1 [ false, %logic.from2839 ], [ %t8, %logic.rend2842 ] + br label %logic.from2843 +logic.from2843: + br i1 %t9, label %logic.rhs2844, label %logic.end2845 +logic.rhs2844: + %t10 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i1 @finch.gen.isConstant({ ptr, i64, i64 } %t11) + %t13 = xor i1 %t12, true + br label %logic.rend2846 +logic.rend2846: + br label %logic.end2845 +logic.end2845: + %t14 = phi i1 [ false, %logic.from2843 ], [ %t13, %logic.rend2846 ] + br label %logic.from2847 +logic.from2847: + br i1 %t14, label %logic.rhs2848, label %logic.end2849 +logic.rhs2848: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call i1 @finch.gen.owning(ptr %t15, %S.ast.Type %t17) + br label %logic.rend2850 +logic.rend2850: + br label %logic.end2849 +logic.end2849: + %t19 = phi i1 [ false, %logic.from2847 ], [ %t18, %logic.rend2850 ] + br i1 %t19, label %then2851, label %endif2853 +then2851: + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic2854, label %ok2855 +panic2854: + call void @finch_panic(ptr @.str.1697, i64 982, ptr @.str.1698) + unreachable +ok2855: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 11 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t25 = load { ptr, i64, i64 }, ptr %t24 + store { ptr, i64, i64 } %t25, ptr %a26 + call void @finch_str_copy(ptr %a27, ptr %a26) + %t28 = load { ptr, i64, i64 }, ptr %a27 + %t29 = insertvalue %S.gen.Pending zeroinitializer, { ptr, i64, i64 } %t28, 0 + %t30 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t31 = load %S.ast.Type, ptr %t30 + store %S.ast.Type %t31, ptr %a32 + call void @finch.copy.S_ast_Type(ptr %a33, ptr %a32) + %t34 = load %S.ast.Type, ptr %a33 + %t35 = insertvalue %S.gen.Pending %t29, %S.ast.Type %t34, 1 + %t36 = insertvalue %S.gen.Pending %t35, i1 false, 2 + %t37 = load i64, ptr %t23 + %t38 = add i64 %t37, 1 + call void @finch_arr_reserve(ptr %t22, i64 %t38, i64 ptrtoint (ptr getelementptr (%S.gen.Pending, ptr null, i32 1) to i64)) + %t39 = load ptr, ptr %t22 + %t40 = getelementptr inbounds %S.gen.Pending, ptr %t39, i64 %t37 + store %S.gen.Pending %t36, ptr %t40 + store i64 %t38, ptr %t23 + br label %endif2853 +endif2853: + ret void +} + +define internal void @finch.gen.holdAddr(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.owning(ptr %t4, %S.ast.Type %t5) + br i1 %t6, label %then2856, label %endif2858 +then2856: + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic2859, label %ok2860 +panic2859: + call void @finch_panic(ptr @.str.1699, i64 988, ptr @.str.1700) + unreachable +ok2860: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 11 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t11, ptr %a12 + call void @finch_str_copy(ptr %a13, ptr %a12) + %t14 = load { ptr, i64, i64 }, ptr %a13 + %t15 = insertvalue %S.gen.Pending zeroinitializer, { ptr, i64, i64 } %t14, 0 + %t16 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t16, ptr %a17 + call void @finch.copy.S_ast_Type(ptr %a18, ptr %a17) + %t19 = load %S.ast.Type, ptr %a18 + %t20 = insertvalue %S.gen.Pending %t15, %S.ast.Type %t19, 1 + %t21 = insertvalue %S.gen.Pending %t20, i1 true, 2 + %t22 = load i64, ptr %t10 + %t23 = add i64 %t22, 1 + call void @finch_arr_reserve(ptr %t9, i64 %t23, i64 ptrtoint (ptr getelementptr (%S.gen.Pending, ptr null, i32 1) to i64)) + %t24 = load ptr, ptr %t9 + %t25 = getelementptr inbounds %S.gen.Pending, ptr %t24, i64 %t22 + store %S.gen.Pending %t21, ptr %t25 + store i64 %t23, ptr %t10 + br label %endif2858 +endif2858: + ret void +} + +define internal void @finch.copy.S_gen_Pending(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Pending, ptr %src + store %S.gen.Pending %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Pending, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Pending, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Pending, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Pending, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.drop.S_gen_Pending(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Pending, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Pending, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal void @finch.gen.dropPending(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a24 = alloca %S.gen.Pending, align 16 + %a25 = alloca %S.gen.Pending, align 16 + %a27 = alloca %S.gen.Pending, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2861, label %ok2862 +panic2861: + call void @finch_panic(ptr @.str.1701, i64 994, ptr @.str.1702) + unreachable +ok2862: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 %t7, ptr %a8 + br label %while.cond2863 +while.cond2863: + %t9 = load i64, ptr %a8 + %t10 = load i64, ptr %a2 + %t11 = icmp sgt i64 %t9, %t10 + br i1 %t11, label %while.body2864, label %while.end2865 +while.body2864: + %t12 = load i64, ptr %a8 + %t13 = sub i64 %t12, 1 + store i64 %t13, ptr %a8 + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic2866, label %ok2867 +panic2866: + call void @finch_panic(ptr @.str.1703, i64 997, ptr @.str.1704) + unreachable +ok2867: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 11 + %t17 = load i64, ptr %a8 + %t18 = load { ptr, i64, i64 }, ptr %t16 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 %t17, %t19 + br i1 %t20, label %range2868, label %inrange2869 +range2868: + call void @finch_panic_index(ptr @.str.1705, i64 997, i64 %t17, i64 %t19) + unreachable +inrange2869: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.gen.Pending, ptr %t21, i64 %t17 + %t23 = load %S.gen.Pending, ptr %t22 + store %S.gen.Pending %t23, ptr %a24 + call void @finch.copy.S_gen_Pending(ptr %a25, ptr %a24) + %t26 = load %S.gen.Pending, ptr %a25 + store %S.gen.Pending %t26, ptr %a27 + %t28 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 2 + %t29 = load i1, ptr %t28 + br i1 %t29, label %then2870, label %else2871 +then2870: + %t30 = load ptr, ptr %a1 + %t31 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 + %t32 = load { ptr, i64, i64 }, ptr %t31 + %t33 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 + %t34 = load %S.ast.Type, ptr %t33 + call void @finch.gen.dropAt(ptr %t30, { ptr, i64, i64 } %t32, %S.ast.Type %t34) + br label %endif2872 +else2871: + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 0 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = getelementptr inbounds %S.gen.Pending, ptr %a27, i32 0, i32 1 + %t39 = load %S.ast.Type, ptr %t38 + call void @finch.gen.dropValue(ptr %t35, { ptr, i64, i64 } %t37, %S.ast.Type %t39) + br label %endif2872 +endif2872: + call void @finch.drop.S_gen_Pending(ptr %a27) + br label %while.cond2863 +while.end2865: + ret void +} + +define internal void @finch.gen.heldEnd(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a20 = alloca %S.gen.Pending, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + br label %while.cond2873 +while.cond2873: + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic2876, label %ok2877 +panic2876: + call void @finch_panic(ptr @.str.1706, i64 1008, ptr @.str.1707) + unreachable +ok2877: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 11 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = load i64, ptr %a2 + %t9 = icmp sgt i64 %t7, %t8 + br i1 %t9, label %while.body2874, label %while.end2875 +while.body2874: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic2878, label %ok2879 +panic2878: + call void @finch_panic(ptr @.str.1708, i64 1009, ptr @.str.1709) + unreachable +ok2879: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 11 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp eq i64 %t14, 0 + br i1 %t15, label %panic2880, label %ok2881 +panic2880: + call void @finch_panic(ptr @.str.1710, i64 1009, ptr @.str.1711) + unreachable +ok2881: + %t16 = sub i64 %t14, 1 + %t17 = load ptr, ptr %t12 + %t18 = getelementptr inbounds %S.gen.Pending, ptr %t17, i64 %t16 + %t19 = load %S.gen.Pending, ptr %t18 + store i64 %t16, ptr %t13 + store %S.gen.Pending %t19, ptr %a20 + call void @finch.drop.S_gen_Pending(ptr %a20) + br label %while.cond2873 +while.end2875: + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.own(ptr %p0, %S.gen.Val %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t5 = load %S.ast.Type, ptr %t4 + %t6 = call i1 @finch.gen.owning(ptr %t3, %S.ast.Type %t5) + %t7 = xor i1 %t6, true + br label %logic.from2882 +logic.from2882: + br i1 %t7, label %logic.end2884, label %logic.rhs2883 +logic.rhs2883: + %t8 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 2 + %t9 = load i1, ptr %t8 + br label %logic.rend2885 +logic.rend2885: + br label %logic.end2884 +logic.end2884: + %t10 = phi i1 [ true, %logic.from2882 ], [ %t9, %logic.rend2885 ] + br i1 %t10, label %then2886, label %endif2888 +then2886: + %t11 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + ret { ptr, i64, i64 } %t15 +endif2888: + %t16 = load ptr, ptr %a1 + %t17 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t20 = load %S.ast.Type, ptr %t19 + %t21 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t16, { ptr, i64, i64 } %t18, %S.ast.Type %t20) + ret { ptr, i64, i64 } %t21 +} + +define internal void @finch.gen.printf(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load { ptr, i64, i64 }, ptr %a2 + %t6 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t4, { ptr, i64, i64 } %t5) + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = call { ptr, i64, i64 } @finch.gen.tmpName(ptr %t8) + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1712, i64 0, i64 0 }, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = icmp sgt i64 %t13, 0 + br i1 %t14, label %then2889, label %endif2891 +then2889: + %t15 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1713, i64 2, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + %t20 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t19, ptr %a11 + store { ptr, i64, i64 } %t20, ptr %a21 + call void @finch_str_drop(ptr %a21) + br label %endif2891 +endif2891: + %t22 = load ptr, ptr %a1 + %t23 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1714, i64 35, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a24 + %t28 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t27, ptr %a30 + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t27, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t33, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1715, i64 1, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + call void @finch.gen.emit(ptr %t22, { ptr, i64, i64 } %t44) + store { ptr, i64, i64 } %t44, ptr %a45 + call void @finch_str_drop(ptr %a45) + call void @finch_str_drop(ptr %a11) + call void @finch_str_drop(ptr %a10) + call void @finch_str_drop(ptr %a7) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.cstr(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1716, i64 31, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t8, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1717, i64 3, i64 0 }, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a9 + %t14 = call { ptr, i64, i64 } @finch.gen.op(ptr %t3, { ptr, i64, i64 } %t13) + store { ptr, i64, i64 } %t13, ptr %a15 + call void @finch_str_drop(ptr %a15) + store { ptr, i64, i64 } %t14, ptr %a16 + %t17 = load ptr, ptr %a1 + %t18 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.1718, i64 12, i64 0 }, ptr %a20 + store { ptr, i64, i64 } %t18, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.1719, i64 6, i64 0 }, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t22, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = load { ptr, i64, i64 }, ptr %a23 + %t28 = call { ptr, i64, i64 } @finch.gen.op(ptr %t17, { ptr, i64, i64 } %t27) + store { ptr, i64, i64 } %t27, ptr %a29 + call void @finch_str_drop(ptr %a29) + store { ptr, i64, i64 } %t28, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t31, { ptr, i64, i64 } { ptr @.str.1720, i64 0, i64 0 }) + store { ptr, i64, i64 } %t32, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = load { ptr, i64, i64 }, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.1721, i64 10, i64 0 }, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.1722, i64 6, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t44, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t44, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.1723, i64 6, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t55, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t34, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t61, ptr %a63 + call void @finch_str_drop(ptr %a63) + call void @finch_str_drop(ptr %a33) + call void @finch_str_drop(ptr %a30) + call void @finch_str_drop(ptr %a16) + ret { ptr, i64, i64 } %t62 +} + +define internal void @finch.gen.emitPrint(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i1 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca i1, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store i1 %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load %S.ast.Type, ptr %a3 + %t12 = call i1 @finch.gen.isSigned(%S.ast.Type %t11) + br i1 %t12, label %then2892, label %else2893 +then2892: + %t13 = load ptr, ptr %a1 + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a2 + %t16 = load %S.ast.Type, ptr %a3 + %t17 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1726, i64 3, i64 0 }) + %t18 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t14, { ptr, i64, i64 } %t15, %S.ast.Type %t16, %S.ast.Type %t17) + store %S.ast.Type %t17, ptr %a19 + call void @finch.drop.S_ast_Type(ptr %a19) + store { ptr, i64, i64 } { ptr @.str.1725, i64 4, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t18, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + call void @finch.gen.printf(ptr %t13, { ptr, i64, i64 } { ptr @.str.1724, i64 4, i64 0 }, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_drop(ptr %a25) + br label %endif2894 +else2893: + %t26 = load %S.ast.Type, ptr %a3 + %t27 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t26) + br i1 %t27, label %then2895, label %else2896 +then2895: + %t28 = load ptr, ptr %a1 + %t29 = load ptr, ptr %a1 + %t30 = load { ptr, i64, i64 }, ptr %a2 + %t31 = load %S.ast.Type, ptr %a3 + %t32 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1729, i64 3, i64 0 }) + %t33 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t29, { ptr, i64, i64 } %t30, %S.ast.Type %t31, %S.ast.Type %t32) + store %S.ast.Type %t32, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + store { ptr, i64, i64 } { ptr @.str.1728, i64 4, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + call void @finch.gen.printf(ptr %t28, { ptr, i64, i64 } { ptr @.str.1727, i64 4, i64 0 }, { ptr, i64, i64 } %t39) + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch_str_drop(ptr %a40) + br label %endif2897 +else2896: + %t41 = load %S.ast.Type, ptr %a3 + %t42 = call i1 @finch.gen.isFloat(%S.ast.Type %t41) + br i1 %t42, label %then2898, label %else2899 +then2898: + %t43 = load ptr, ptr %a1 + %t44 = load ptr, ptr %a1 + %t45 = load { ptr, i64, i64 }, ptr %a2 + %t46 = load %S.ast.Type, ptr %a3 + %t47 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1732, i64 5, i64 0 }) + %t48 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t44, { ptr, i64, i64 } %t45, %S.ast.Type %t46, %S.ast.Type %t47) + store %S.ast.Type %t47, ptr %a49 + call void @finch.drop.S_ast_Type(ptr %a49) + store { ptr, i64, i64 } { ptr @.str.1731, i64 7, i64 0 }, ptr %a51 + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + call void @finch.gen.printf(ptr %t43, { ptr, i64, i64 } { ptr @.str.1730, i64 2, i64 0 }, { ptr, i64, i64 } %t54) + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_drop(ptr %a55) + br label %endif2900 +else2899: + %t56 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.1733, i64 4, i64 0 }, ptr %a58 + %t59 = call i32 @finch_str_eq(ptr %a57, ptr %a58) + %t60 = icmp ne i32 %t59, 0 + br i1 %t60, label %then2901, label %else2902 +then2901: + %t61 = load ptr, ptr %a1 + %t62 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1734, i64 8, i64 0 }, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1735, i64 7, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = call { ptr, i64, i64 } @finch.gen.op(ptr %t61, { ptr, i64, i64 } %t71) + store { ptr, i64, i64 } %t71, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t72, ptr %a74 + %t75 = load i1, ptr %a4 + br i1 %t75, label %then2904, label %else2905 +then2904: + %t76 = load ptr, ptr %a1 + %t77 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1737, i64 4, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a78 + call void @finch.gen.printf(ptr %t76, { ptr, i64, i64 } { ptr @.str.1736, i64 4, i64 0 }, { ptr, i64, i64 } %t81) + store { ptr, i64, i64 } %t81, ptr %a82 + call void @finch_str_drop(ptr %a82) + br label %endif2906 +else2905: + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.1739, i64 4, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a85 + call void @finch.gen.printf(ptr %t83, { ptr, i64, i64 } { ptr @.str.1738, i64 2, i64 0 }, { ptr, i64, i64 } %t88) + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_drop(ptr %a89) + br label %endif2906 +endif2906: + call void @finch_str_drop(ptr %a74) + br label %endif2903 +else2902: + %t90 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t90, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.1740, i64 4, i64 0 }, ptr %a92 + %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) + %t94 = icmp ne i32 %t93, 0 + br i1 %t94, label %then2907, label %else2908 +then2907: + %t95 = load ptr, ptr %a1 + %t96 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t95, { ptr, i64, i64 } { ptr @.str.1741, i64 4, i64 0 }) + store { ptr, i64, i64 } %t96, ptr %a97 + %t98 = load ptr, ptr %a1 + %t99 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t98, { ptr, i64, i64 } { ptr @.str.1742, i64 5, i64 0 }) + store { ptr, i64, i64 } %t99, ptr %a100 + %t101 = load ptr, ptr %a1 + %t102 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1743, i64 10, i64 0 }, ptr %a104 + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.1744, i64 6, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t111, ptr %a114 + store { ptr, i64, i64 } %t112, ptr %a115 + call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) + store { ptr, i64, i64 } %t111, ptr %a116 + call void @finch_str_drop(ptr %a116) + %t117 = load { ptr, i64, i64 }, ptr %a113 + store { ptr, i64, i64 } %t117, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.1745, i64 6, i64 0 }, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + %t123 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t122, ptr %a125 + store { ptr, i64, i64 } %t123, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t122, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t101, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t128, ptr %a130 + call void @finch_str_drop(ptr %a130) + store { ptr, i64, i64 } %t129, ptr %a131 + %t132 = load ptr, ptr %a1 + %t133 = load { ptr, i64, i64 }, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.1747, i64 4, i64 0 }, ptr %a135 + store { ptr, i64, i64 } %t133, ptr %a136 + call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a134 + call void @finch.gen.printf(ptr %t132, { ptr, i64, i64 } { ptr @.str.1746, i64 2, i64 0 }, { ptr, i64, i64 } %t137) + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_drop(ptr %a138) + call void @finch_str_drop(ptr %a131) + call void @finch_str_drop(ptr %a100) + call void @finch_str_drop(ptr %a97) + br label %endif2909 +else2908: + %t139 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t139, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.1748, i64 3, i64 0 }, ptr %a141 + %t142 = call i32 @finch_str_eq(ptr %a140, ptr %a141) + %t143 = icmp ne i32 %t142, 0 + br i1 %t143, label %then2910, label %else2911 +then2910: + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1749, i64 31, i64 0 }, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + %t149 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t149, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.1750, i64 3, i64 0 }, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + store { ptr, i64, i64 } %t149, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a150 + %t155 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t154) + store { ptr, i64, i64 } %t154, ptr %a156 + call void @finch_str_drop(ptr %a156) + store { ptr, i64, i64 } %t155, ptr %a157 + %t158 = load ptr, ptr %a1 + %t159 = load { ptr, i64, i64 }, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.1751, i64 10, i64 0 }, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.1752, i64 7, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = call { ptr, i64, i64 } @finch.gen.op(ptr %t158, { ptr, i64, i64 } %t168) + store { ptr, i64, i64 } %t168, ptr %a170 + call void @finch_str_drop(ptr %a170) + store { ptr, i64, i64 } %t169, ptr %a171 + %t172 = load ptr, ptr %a1 + %t173 = load { ptr, i64, i64 }, ptr %a2 + %t174 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t172, { ptr, i64, i64 } %t173) + store { ptr, i64, i64 } %t174, ptr %a175 + %t176 = load i1, ptr %a4 + br i1 %t176, label %then2913, label %else2914 +then2913: + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.1754, i64 4, i64 0 }, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.1755, i64 6, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = load { ptr, i64, i64 }, ptr %a175 + store { ptr, i64, i64 } %t187, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t187, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load { ptr, i64, i64 }, ptr %a189 + call void @finch.gen.printf(ptr %t177, { ptr, i64, i64 } { ptr @.str.1753, i64 6, i64 0 }, { ptr, i64, i64 } %t193) + store { ptr, i64, i64 } %t193, ptr %a194 + call void @finch_str_drop(ptr %a194) + br label %endif2915 +else2914: + %t195 = load ptr, ptr %a1 + %t196 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.1757, i64 4, i64 0 }, ptr %a198 + store { ptr, i64, i64 } %t196, ptr %a199 + call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a197 + store { ptr, i64, i64 } %t200, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.1758, i64 6, i64 0 }, ptr %a203 + call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) + store { ptr, i64, i64 } %t200, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a201 + %t206 = load { ptr, i64, i64 }, ptr %a175 + store { ptr, i64, i64 } %t205, ptr %a208 + store { ptr, i64, i64 } %t206, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t205, ptr %a210 + call void @finch_str_drop(ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a207 + call void @finch.gen.printf(ptr %t195, { ptr, i64, i64 } { ptr @.str.1756, i64 4, i64 0 }, { ptr, i64, i64 } %t211) + store { ptr, i64, i64 } %t211, ptr %a212 + call void @finch_str_drop(ptr %a212) + br label %endif2915 +endif2915: + call void @finch_str_drop(ptr %a175) + call void @finch_str_drop(ptr %a171) + call void @finch_str_drop(ptr %a157) + br label %endif2912 +else2911: + %t213 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t213, ptr %a214 + store { ptr, i64, i64 } { ptr @.str.1759, i64 3, i64 0 }, ptr %a215 + %t216 = call i32 @finch_str_eq(ptr %a214, ptr %a215) + %t217 = icmp ne i32 %t216, 0 + br i1 %t217, label %then2916, label %else2917 +then2916: + %t218 = load ptr, ptr %a1 + %t219 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1760, i64 12, i64 0 }, ptr %a221 + store { ptr, i64, i64 } %t219, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a220 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.1761, i64 6, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t218, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t228, ptr %a230 + call void @finch_str_drop(ptr %a230) + store { ptr, i64, i64 } %t229, ptr %a231 + %t232 = load ptr, ptr %a1 + %t233 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t232, { ptr, i64, i64 } { ptr @.str.1762, i64 8, i64 0 }) + store { ptr, i64, i64 } %t233, ptr %a234 + %t235 = load ptr, ptr %a1 + %t236 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t235, { ptr, i64, i64 } { ptr @.str.1763, i64 8, i64 0 }) + store { ptr, i64, i64 } %t236, ptr %a237 + %t238 = load ptr, ptr %a1 + %t239 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t238, { ptr, i64, i64 } { ptr @.str.1764, i64 8, i64 0 }) + store { ptr, i64, i64 } %t239, ptr %a240 + %t241 = load ptr, ptr %a1 + %t242 = load { ptr, i64, i64 }, ptr %a231 + %t243 = load { ptr, i64, i64 }, ptr %a234 + %t244 = load { ptr, i64, i64 }, ptr %a237 + call void @finch.gen.condBr(ptr %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t244) + %t245 = load ptr, ptr %a1 + %t246 = load { ptr, i64, i64 }, ptr %a234 + call void @finch.gen.label(ptr %t245, { ptr, i64, i64 } %t246) + %t247 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t247, { ptr, i64, i64 } { ptr @.str.1765, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1766, i64 0, i64 0 }) + %t248 = load ptr, ptr %a1 + %t249 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.br(ptr %t248, { ptr, i64, i64 } %t249) + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a237 + call void @finch.gen.label(ptr %t250, { ptr, i64, i64 } %t251) + %t252 = load ptr, ptr %a1 + %t253 = load ptr, ptr %a1 + %t254 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1769, i64 13, i64 0 }, ptr %a256 + store { ptr, i64, i64 } %t254, ptr %a257 + call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) + %t258 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t258, ptr %a260 + store { ptr, i64, i64 } { ptr @.str.1770, i64 7, i64 0 }, ptr %a261 + call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) + store { ptr, i64, i64 } %t258, ptr %a262 + call void @finch_str_drop(ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a259 + %t264 = call { ptr, i64, i64 } @finch.gen.op(ptr %t253, { ptr, i64, i64 } %t263) + store { ptr, i64, i64 } %t263, ptr %a265 + call void @finch_str_drop(ptr %a265) + store { ptr, i64, i64 } { ptr @.str.1768, i64 4, i64 0 }, ptr %a267 + store { ptr, i64, i64 } %t264, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t264, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + call void @finch.gen.printf(ptr %t252, { ptr, i64, i64 } { ptr @.str.1767, i64 6, i64 0 }, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load ptr, ptr %a1 + %t273 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.br(ptr %t272, { ptr, i64, i64 } %t273) + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.label(ptr %t274, { ptr, i64, i64 } %t275) + call void @finch_str_drop(ptr %a240) + call void @finch_str_drop(ptr %a237) + call void @finch_str_drop(ptr %a234) + call void @finch_str_drop(ptr %a231) + br label %endif2918 +else2917: + %t276 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t276, ptr %a277 + store { ptr, i64, i64 } { ptr @.str.1771, i64 4, i64 0 }, ptr %a278 + %t279 = call i32 @finch_str_eq(ptr %a277, ptr %a278) + %t280 = icmp ne i32 %t279, 0 + br i1 %t280, label %then2919, label %else2920 +then2919: + %t281 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t281, { ptr, i64, i64 } { ptr @.str.1772, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1773, i64 0, i64 0 }) + br label %endif2921 +else2920: + %t282 = load ptr, ptr %a1 + %t283 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t282, { ptr, i64, i64 } { ptr @.str.1774, i64 17, i64 0 }) + store { ptr, i64, i64 } %t283, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = load { ptr, i64, i64 }, ptr %a284 + call void @finch.gen.store(ptr %t285, { ptr, i64, i64 } { ptr @.str.1775, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.1776, i64 15, i64 0 }, { ptr, i64, i64 } %t286) + %t287 = load ptr, ptr %a1 + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = load { ptr, i64, i64 }, ptr %a2 + %t290 = load %S.ast.Type, ptr %a3 + %t291 = load i1, ptr %a4 + call void @finch.gen.emitFormat(ptr %t287, { ptr, i64, i64 } %t288, { ptr, i64, i64 } %t289, %S.ast.Type %t290, i1 %t291) + %t292 = load ptr, ptr %a1 + %t293 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } { ptr @.str.1777, i64 31, i64 0 }, ptr %a295 + store { ptr, i64, i64 } %t293, ptr %a296 + call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a294 + store { ptr, i64, i64 } %t297, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.1778, i64 1, i64 0 }, ptr %a300 + call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) + store { ptr, i64, i64 } %t297, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a298 + call void @finch.gen.emit(ptr %t292, { ptr, i64, i64 } %t302) + store { ptr, i64, i64 } %t302, ptr %a303 + call void @finch_str_drop(ptr %a303) + call void @finch_str_drop(ptr %a284) + br label %endif2921 +endif2921: + br label %endif2918 +endif2918: + br label %endif2912 +endif2912: + br label %endif2909 +endif2909: + br label %endif2903 +endif2903: + br label %endif2900 +endif2900: + br label %endif2897 +endif2897: + br label %endif2894 +endif2894: + call void @finch_str_drop(ptr %a10) + ret void +} + +define internal void @finch.gen.bufText(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1779, i64 29, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t5, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t9, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1780, i64 6, i64 0 }, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t9, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a10 + %t15 = load ptr, ptr %a1 + %t16 = load { ptr, i64, i64 }, ptr %a3 + %t17 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t15, { ptr, i64, i64 } %t16) + store { ptr, i64, i64 } %t14, ptr %a19 + store { ptr, i64, i64 } %t17, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t14, ptr %a21 + call void @finch_str_drop(ptr %a21) + store { ptr, i64, i64 } %t17, ptr %a22 + call void @finch_str_drop(ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1781, i64 6, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t30 = load i64, ptr %t29 + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t28, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t28, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.1782, i64 1, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.emit(ptr %t4, { ptr, i64, i64 } %t43) + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_drop(ptr %a44) + ret void +} + +define internal void @finch.gen.emitFormat(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca i1, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca %S.ast.Type, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca %S.ast.Type, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca %S.ast.Type, align 16 + %a213 = alloca %S.ast.Type, align 16 + %a217 = alloca %S.gen.Val, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca %S.ast.Type, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a312 = alloca %S.gen.Val, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + call void @finch_str_copy(ptr %a9, ptr %a8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.1783, i64 1, i64 0 }, ptr %a12 + %t13 = load i1, ptr %a5 + br i1 %t13, label %then2922, label %endif2924 +then2922: + %t14 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.1784, i64 1, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_drop(ptr %a15) + br label %endif2924 +endif2924: + %t16 = load %S.ast.Type, ptr %a4 + %t17 = call i1 @finch.gen.isSigned(%S.ast.Type %t16) + br i1 %t17, label %then2925, label %else2926 +then2925: + %t18 = load ptr, ptr %a1 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1785, i64 29, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.1786, i64 6, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + %t29 = load ptr, ptr %a1 + %t30 = load { ptr, i64, i64 }, ptr %a3 + %t31 = load %S.ast.Type, ptr %a4 + %t32 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1787, i64 3, i64 0 }) + %t33 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t29, { ptr, i64, i64 } %t30, %S.ast.Type %t31, %S.ast.Type %t32) + store %S.ast.Type %t32, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + store { ptr, i64, i64 } %t28, ptr %a36 + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t28, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t33, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1788, i64 1, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + call void @finch.gen.emit(ptr %t18, { ptr, i64, i64 } %t45) + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch_str_drop(ptr %a46) + br label %endif2927 +else2926: + %t47 = load %S.ast.Type, ptr %a4 + %t48 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t47) + br i1 %t48, label %then2928, label %else2929 +then2928: + %t49 = load ptr, ptr %a1 + %t50 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1789, i64 30, i64 0 }, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.1790, i64 6, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + %t60 = load ptr, ptr %a1 + %t61 = load { ptr, i64, i64 }, ptr %a3 + %t62 = load %S.ast.Type, ptr %a4 + %t63 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1791, i64 3, i64 0 }) + %t64 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t60, { ptr, i64, i64 } %t61, %S.ast.Type %t62, %S.ast.Type %t63) + store %S.ast.Type %t63, ptr %a65 + call void @finch.drop.S_ast_Type(ptr %a65) + store { ptr, i64, i64 } %t59, ptr %a67 + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t59, ptr %a69 + call void @finch_str_drop(ptr %a69) + store { ptr, i64, i64 } %t64, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.1792, i64 1, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.emit(ptr %t49, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a77 + call void @finch_str_drop(ptr %a77) + br label %endif2930 +else2929: + %t78 = load %S.ast.Type, ptr %a4 + %t79 = call i1 @finch.gen.isFloat(%S.ast.Type %t78) + br i1 %t79, label %then2931, label %else2932 +then2931: + %t80 = load ptr, ptr %a1 + %t81 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1793, i64 31, i64 0 }, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.1794, i64 9, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = load ptr, ptr %a1 + %t92 = load { ptr, i64, i64 }, ptr %a3 + %t93 = load %S.ast.Type, ptr %a4 + %t94 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.1795, i64 5, i64 0 }) + %t95 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t91, { ptr, i64, i64 } %t92, %S.ast.Type %t93, %S.ast.Type %t94) + store %S.ast.Type %t94, ptr %a96 + call void @finch.drop.S_ast_Type(ptr %a96) + store { ptr, i64, i64 } %t90, ptr %a98 + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) + store { ptr, i64, i64 } %t90, ptr %a100 + call void @finch_str_drop(ptr %a100) + store { ptr, i64, i64 } %t95, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t102, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.1796, i64 1, i64 0 }, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + store { ptr, i64, i64 } %t102, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.gen.emit(ptr %t80, { ptr, i64, i64 } %t107) + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_drop(ptr %a108) + br label %endif2933 +else2932: + %t109 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t109, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.1797, i64 4, i64 0 }, ptr %a111 + %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) + %t113 = icmp ne i32 %t112, 0 + br i1 %t113, label %then2934, label %else2935 +then2934: + %t114 = load ptr, ptr %a1 + %t115 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1798, i64 30, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.1799, i64 5, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t124, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + store { ptr, i64, i64 } %t130, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.1800, i64 6, i64 0 }, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t130, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + %t136 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t135, ptr %a138 + store { ptr, i64, i64 } %t136, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t135, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t141, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.1801, i64 1, i64 0 }, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + call void @finch.gen.emit(ptr %t114, { ptr, i64, i64 } %t146) + store { ptr, i64, i64 } %t146, ptr %a147 + call void @finch_str_drop(ptr %a147) + br label %endif2936 +else2935: + %t148 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.1802, i64 4, i64 0 }, ptr %a150 + %t151 = call i32 @finch_str_eq(ptr %a149, ptr %a150) + %t152 = icmp ne i32 %t151, 0 + br i1 %t152, label %then2937, label %else2938 +then2937: + %t153 = load ptr, ptr %a1 + %t154 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1803, i64 30, i64 0 }, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t158, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.1804, i64 6, i64 0 }, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t158, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a159 + %t164 = load ptr, ptr %a1 + %t165 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.1805, i64 8, i64 0 }, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t169, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.1806, i64 7, i64 0 }, ptr %a172 + call void @finch_str_concat(ptr %a170, ptr %a171, ptr %a172) + store { ptr, i64, i64 } %t169, ptr %a173 + call void @finch_str_drop(ptr %a173) + %t174 = load { ptr, i64, i64 }, ptr %a170 + %t175 = call { ptr, i64, i64 } @finch.gen.op(ptr %t164, { ptr, i64, i64 } %t174) + store { ptr, i64, i64 } %t174, ptr %a176 + call void @finch_str_drop(ptr %a176) + store { ptr, i64, i64 } %t163, ptr %a178 + store { ptr, i64, i64 } %t175, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t163, ptr %a180 + call void @finch_str_drop(ptr %a180) + store { ptr, i64, i64 } %t175, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a177 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.1807, i64 1, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + call void @finch.gen.emit(ptr %t153, { ptr, i64, i64 } %t187) + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch_str_drop(ptr %a188) + br label %endif2939 +else2938: + %t189 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t189, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.1808, i64 3, i64 0 }, ptr %a191 + %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) + %t193 = icmp ne i32 %t192, 0 + br i1 %t193, label %then2940, label %else2941 +then2940: + %t194 = load ptr, ptr %a1 + %t195 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1809, i64 29, i64 0 }, ptr %a197 + store { ptr, i64, i64 } %t195, ptr %a198 + call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } %t199, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.1810, i64 6, i64 0 }, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t199, ptr %a203 + call void @finch_str_drop(ptr %a203) + %t204 = load { ptr, i64, i64 }, ptr %a200 + %t205 = load ptr, ptr %a1 + %t206 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t206, ptr %a207 + call void @finch_str_copy(ptr %a208, ptr %a207) + %t209 = load { ptr, i64, i64 }, ptr %a208 + %t210 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t209, 0 + %t211 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t211, ptr %a212 + call void @finch.copy.S_ast_Type(ptr %a213, ptr %a212) + %t214 = load %S.ast.Type, ptr %a213 + %t215 = insertvalue %S.gen.Val %t210, %S.ast.Type %t214, 1 + %t216 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t205, %S.gen.Val %t215) + store %S.gen.Val %t215, ptr %a217 + call void @finch.drop.S_gen_Val(ptr %a217) + store { ptr, i64, i64 } %t204, ptr %a219 + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t204, ptr %a221 + call void @finch_str_drop(ptr %a221) + store { ptr, i64, i64 } %t216, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.1811, i64 6, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t228, ptr %a231 + store { ptr, i64, i64 } %t229, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + store { ptr, i64, i64 } %t228, ptr %a233 + call void @finch_str_drop(ptr %a233) + %t234 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t234, ptr %a236 + store { ptr, i64, i64 } { ptr @.str.1812, i64 1, i64 0 }, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t234, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a235 + call void @finch.gen.emit(ptr %t194, { ptr, i64, i64 } %t239) + store { ptr, i64, i64 } %t239, ptr %a240 + call void @finch_str_drop(ptr %a240) + br label %endif2942 +else2941: + %t241 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t241, ptr %a242 + store { ptr, i64, i64 } { ptr @.str.1813, i64 3, i64 0 }, ptr %a243 + %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) + %t245 = icmp ne i32 %t244, 0 + br label %logic.from2943 +logic.from2943: + br i1 %t245, label %logic.end2945, label %logic.rhs2944 +logic.rhs2944: + %t246 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t246, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.1814, i64 4, i64 0 }, ptr %a248 + %t249 = call i32 @finch_str_eq(ptr %a247, ptr %a248) + %t250 = icmp ne i32 %t249, 0 + br label %logic.rend2946 +logic.rend2946: + br label %logic.end2945 +logic.end2945: + %t251 = phi i1 [ true, %logic.from2943 ], [ %t250, %logic.rend2946 ] + br i1 %t251, label %then2947, label %else2948 +then2947: + %t252 = load ptr, ptr %a1 + %t253 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.1815, i64 29, i64 0 }, ptr %a255 + store { ptr, i64, i64 } %t253, ptr %a256 + call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) + %t257 = load { ptr, i64, i64 }, ptr %a254 + store { ptr, i64, i64 } %t257, ptr %a259 + store { ptr, i64, i64 } { ptr @.str.1816, i64 6, i64 0 }, ptr %a260 + call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) + store { ptr, i64, i64 } %t257, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a258 + %t263 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t262, ptr %a265 + store { ptr, i64, i64 } %t263, ptr %a266 + call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) + store { ptr, i64, i64 } %t262, ptr %a267 + call void @finch_str_drop(ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t268, ptr %a270 + store { ptr, i64, i64 } { ptr @.str.1817, i64 1, i64 0 }, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t268, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + call void @finch.gen.emit(ptr %t252, { ptr, i64, i64 } %t273) + store { ptr, i64, i64 } %t273, ptr %a274 + call void @finch_str_drop(ptr %a274) + br label %endif2949 +else2948: + %t275 = load ptr, ptr %a1 + %t276 = load ptr, ptr %a1 + %t277 = load %S.ast.Type, ptr %a4 + %t278 = call { ptr, i64, i64 } @finch.gen.formatFn(ptr %t276, %S.ast.Type %t277) + store { ptr, i64, i64 } { ptr @.str.1818, i64 10, i64 0 }, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t283, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.1819, i64 5, i64 0 }, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t288, ptr %a291 + store { ptr, i64, i64 } %t289, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + store { ptr, i64, i64 } %t288, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t294, ptr %a296 + store { ptr, i64, i64 } { ptr @.str.1820, i64 6, i64 0 }, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + store { ptr, i64, i64 } %t294, ptr %a298 + call void @finch_str_drop(ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a295 + %t300 = load ptr, ptr %a1 + %t301 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_copy(ptr %a303, ptr %a302) + %t304 = load { ptr, i64, i64 }, ptr %a303 + %t305 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0 + %t306 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t306, ptr %a307 + call void @finch.copy.S_ast_Type(ptr %a308, ptr %a307) + %t309 = load %S.ast.Type, ptr %a308 + %t310 = insertvalue %S.gen.Val %t305, %S.ast.Type %t309, 1 + %t311 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t300, %S.gen.Val %t310) + store %S.gen.Val %t310, ptr %a312 + call void @finch.drop.S_gen_Val(ptr %a312) + store { ptr, i64, i64 } %t299, ptr %a314 + store { ptr, i64, i64 } %t311, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + store { ptr, i64, i64 } %t299, ptr %a316 + call void @finch_str_drop(ptr %a316) + store { ptr, i64, i64 } %t311, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load { ptr, i64, i64 }, ptr %a313 + store { ptr, i64, i64 } %t318, ptr %a320 + store { ptr, i64, i64 } { ptr @.str.1821, i64 1, i64 0 }, ptr %a321 + call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) + store { ptr, i64, i64 } %t318, ptr %a322 + call void @finch_str_drop(ptr %a322) + %t323 = load { ptr, i64, i64 }, ptr %a319 + call void @finch.gen.emit(ptr %t275, { ptr, i64, i64 } %t323) + store { ptr, i64, i64 } %t323, ptr %a324 + call void @finch_str_drop(ptr %a324) + br label %endif2949 +endif2949: + br label %endif2942 +endif2942: + br label %endif2939 +endif2939: + br label %endif2936 +endif2936: + br label %endif2933 +endif2933: + br label %endif2930 +endif2930: + br label %endif2927 +endif2927: + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a11) + ret void +} + +define internal void @finch.copy.S_gen_EnumDef(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.EnumDef, ptr %src + store %S.gen.EnumDef %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.EnumDef, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.EnumDef, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_int(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.drop.S_gen_EnumDef(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.gen.EnumDef, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_int(ptr %t4) + ret void +} + +define internal void @finch.copy.S_gen_SumDef(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.SumDef, ptr %src + store %S.gen.SumDef %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_int(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_int(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.gen.SumDef, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.gen.SumDef, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_S_ast_Node(ptr %t12, ptr %t13) + ret void +} + +define internal void @finch.drop.S_gen_SumDef(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_int(ptr %t4) + %t5 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_int(ptr %t5) + %t6 = getelementptr inbounds %S.gen.SumDef, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_S_ast_Node(ptr %t6) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.formatFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca %S.ast.Type, align 16 + %a47 = alloca %S.ast.Type, align 16 + %a49 = alloca %S.ast.Type, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca %S.gen.EnumDef, align 16 + %a174 = alloca %S.gen.EnumDef, align 16 + %a176 = alloca %S.gen.EnumDef, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca i64, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca i64, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca %S.gen.SumDef, align 16 + %a538 = alloca %S.gen.SumDef, align 16 + %a540 = alloca %S.gen.SumDef, align 16 + %a556 = alloca %S.gen.StructDef, align 16 + %a557 = alloca %S.gen.StructDef, align 16 + %a559 = alloca %S.gen.StructDef, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca i64, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a653 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a656 = alloca { ptr, i64, i64 }, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a663 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a684 = alloca { ptr, i64, i64 }, align 16 + %a686 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca i64, align 16 + %a731 = alloca i64, align 16 + %a747 = alloca i64, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca %S.gen.StructDef, align 16 + %a839 = alloca %S.gen.StructDef, align 16 + %a841 = alloca %S.gen.StructDef, align 16 + %a845 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a850 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a853 = alloca { ptr, i64, i64 }, align 16 + %a857 = alloca i64, align 16 + %a860 = alloca { ptr, i64, i64 }, align 16 + %a864 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a880 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a882 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a887 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a891 = alloca { ptr, i64, i64 }, align 16 + %a892 = alloca { ptr, i64, i64 }, align 16 + %a893 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a904 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a907 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a914 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a950 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a955 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.1822, i64 14, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic2950, label %ok2951 +panic2950: + call void @finch_panic(ptr @.str.1823, i64 1126, ptr @.str.1824) + unreachable +ok2951: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then2952, label %endif2954 +then2952: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif2954: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic2955, label %ok2956 +panic2955: + call void @finch_panic(ptr @.str.1825, i64 1129, ptr @.str.1826) + unreachable +ok2956: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + %t33 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.1827, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then2957, label %else2958 +then2957: + %t39 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range2960, label %inrange2961 +range2960: + call void @finch_panic_index(ptr @.str.1828, i64 1132, i64 0, i64 %t41) + unreachable +inrange2961: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Type, ptr %t43, i64 0 + %t45 = load %S.ast.Type, ptr %t44 + store %S.ast.Type %t45, ptr %a46 + call void @finch.copy.S_ast_Type(ptr %a47, ptr %a46) + %t48 = load %S.ast.Type, ptr %a47 + store %S.ast.Type %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = call { ptr, i64, i64 } @finch.gen.load(ptr %t50, { ptr, i64, i64 } { ptr @.str.1829, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1830, i64 2, i64 0 }) + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = load ptr, ptr %a1 + %t54 = load ptr, ptr %a1 + %t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t54, { ptr, i64, i64 } { ptr @.str.1832, i64 62, i64 0 }) + %t56 = call { ptr, i64, i64 } @finch.gen.load(ptr %t53, { ptr, i64, i64 } { ptr @.str.1831, i64 3, i64 0 }, { ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t55, ptr %a57 + call void @finch_str_drop(ptr %a57) + store { ptr, i64, i64 } %t56, ptr %a58 + %t59 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t59, { ptr, i64, i64 } { ptr @.str.1833, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1834, i64 1, i64 0 }) + %t60 = load ptr, ptr %a1 + %t61 = load { ptr, i64, i64 }, ptr %a58 + %t62 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t60, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t62, ptr %a63 + %t64 = load ptr, ptr %a1 + %t65 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t64, { ptr, i64, i64 } { ptr @.str.1835, i64 3, i64 0 }) + store { ptr, i64, i64 } %t65, ptr %a66 + %t67 = load ptr, ptr %a1 + %t68 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t67, { ptr, i64, i64 } { ptr @.str.1836, i64 4, i64 0 }) + store { ptr, i64, i64 } %t68, ptr %a69 + %t70 = load ptr, ptr %a1 + %t71 = load { ptr, i64, i64 }, ptr %a63 + %t72 = extractvalue { ptr, i64, i64 } %t71, 1 + %t73 = icmp uge i64 3, %t72 + br i1 %t73, label %range2962, label %inrange2963 +range2962: + call void @finch_panic_index(ptr @.str.1838, i64 1139, i64 3, i64 %t72) + unreachable +inrange2963: + %t74 = extractvalue { ptr, i64, i64 } %t71, 0 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 3 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } { ptr @.str.1837, i64 13, i64 0 }, ptr %a78 + store { ptr, i64, i64 } %t76, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.1839, i64 3, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = call { ptr, i64, i64 } @finch.gen.op(ptr %t70, { ptr, i64, i64 } %t85) + store { ptr, i64, i64 } %t85, ptr %a87 + call void @finch_str_drop(ptr %a87) + store { ptr, i64, i64 } %t86, ptr %a88 + %t89 = load ptr, ptr %a1 + %t90 = load { ptr, i64, i64 }, ptr %a88 + %t91 = load { ptr, i64, i64 }, ptr %a66 + %t92 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.condBr(ptr %t89, { ptr, i64, i64 } %t90, { ptr, i64, i64 } %t91, { ptr, i64, i64 } %t92) + %t93 = load ptr, ptr %a1 + %t94 = load { ptr, i64, i64 }, ptr %a66 + call void @finch.gen.label(ptr %t93, { ptr, i64, i64 } %t94) + %t95 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t95, { ptr, i64, i64 } { ptr @.str.1840, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1841, i64 2, i64 0 }) + %t96 = load ptr, ptr %a1 + %t97 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.br(ptr %t96, { ptr, i64, i64 } %t97) + %t98 = load ptr, ptr %a1 + %t99 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.label(ptr %t98, { ptr, i64, i64 } %t99) + %t100 = load ptr, ptr %a1 + %t101 = load ptr, ptr %a1 + %t102 = load %S.ast.Type, ptr %a49 + %t103 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t101, %S.ast.Type %t102) + store { ptr, i64, i64 } { ptr @.str.1842, i64 23, i64 0 }, ptr %a105 + store { ptr, i64, i64 } %t103, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + store { ptr, i64, i64 } %t108, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.1843, i64 6, i64 0 }, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t108, ptr %a112 + call void @finch_str_drop(ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a109 + %t114 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t113, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t113, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.1844, i64 6, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = load { ptr, i64, i64 }, ptr %a63 + %t126 = extractvalue { ptr, i64, i64 } %t125, 1 + %t127 = icmp uge i64 3, %t126 + br i1 %t127, label %range2964, label %inrange2965 +range2964: + call void @finch_panic_index(ptr @.str.1845, i64 1145, i64 3, i64 %t126) + unreachable +inrange2965: + %t128 = extractvalue { ptr, i64, i64 } %t125, 0 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i64 3 + %t130 = load { ptr, i64, i64 }, ptr %t129 + store { ptr, i64, i64 } %t124, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t124, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + %t136 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t135) + store { ptr, i64, i64 } %t135, ptr %a137 + call void @finch_str_drop(ptr %a137) + store { ptr, i64, i64 } %t136, ptr %a138 + %t139 = load ptr, ptr %a1 + %t140 = load ptr, ptr %a1 + %t141 = load ptr, ptr %a1 + %t142 = load %S.ast.Type, ptr %a49 + %t143 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t141, %S.ast.Type %t142) + %t144 = load { ptr, i64, i64 }, ptr %a138 + %t145 = call { ptr, i64, i64 } @finch.gen.load(ptr %t140, { ptr, i64, i64 } %t143, { ptr, i64, i64 } %t144) + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_drop(ptr %a146) + %t147 = load %S.ast.Type, ptr %a49 + call void @finch.gen.emitFormat(ptr %t139, { ptr, i64, i64 } { ptr @.str.1846, i64 4, i64 0 }, { ptr, i64, i64 } %t145, %S.ast.Type %t147, i1 true) + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_drop(ptr %a148) + %t149 = load ptr, ptr %a1 + %t150 = load { ptr, i64, i64 }, ptr %a63 + call void @finch.gen.loopEnd(ptr %t149, { ptr, i64, i64 } %t150) + %t151 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t151, { ptr, i64, i64 } { ptr @.str.1847, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1848, i64 1, i64 0 }) + call void @finch_str_drop(ptr %a138) + call void @finch_str_drop(ptr %a88) + call void @finch_str_drop(ptr %a69) + call void @finch_str_drop(ptr %a66) + call void @finch.drop.arr_str(ptr %a63) + call void @finch_str_drop(ptr %a58) + call void @finch_str_drop(ptr %a52) + call void @finch.drop.S_ast_Type(ptr %a49) + br label %endif2959 +else2958: + %t152 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t153 = load { ptr, i64, i64 }, ptr %t152 + store { ptr, i64, i64 } %t153, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.1849, i64 4, i64 0 }, ptr %a155 + %t156 = call i32 @finch_str_eq(ptr %a154, ptr %a155) + %t157 = icmp ne i32 %t156, 0 + br i1 %t157, label %then2966, label %else2967 +then2966: + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic2969, label %ok2970 +panic2969: + call void @finch_panic(ptr @.str.1850, i64 1151, ptr @.str.1851) + unreachable +ok2970: + %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 21 + %t161 = load ptr, ptr %a1 + %t162 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t165 = load { ptr, i64, i64 }, ptr %t164 + %t166 = call i64 @finch.gen.findEnum(ptr %t161, { ptr, i64, i64 } %t163, { ptr, i64, i64 } %t165) + %t167 = load { ptr, i64, i64 }, ptr %t160 + %t168 = extractvalue { ptr, i64, i64 } %t167, 1 + %t169 = icmp uge i64 %t166, %t168 + br i1 %t169, label %range2971, label %inrange2972 +range2971: + call void @finch_panic_index(ptr @.str.1852, i64 1151, i64 %t166, i64 %t168) + unreachable +inrange2972: + %t170 = extractvalue { ptr, i64, i64 } %t167, 0 + %t171 = getelementptr inbounds %S.gen.EnumDef, ptr %t170, i64 %t166 + %t172 = load %S.gen.EnumDef, ptr %t171 + store %S.gen.EnumDef %t172, ptr %a173 + call void @finch.copy.S_gen_EnumDef(ptr %a174, ptr %a173) + %t175 = load %S.gen.EnumDef, ptr %a174 + store %S.gen.EnumDef %t175, ptr %a176 + %t177 = load ptr, ptr %a1 + %t178 = call { ptr, i64, i64 } @finch.gen.load(ptr %t177, { ptr, i64, i64 } { ptr @.str.1853, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.1854, i64 2, i64 0 }) + store { ptr, i64, i64 } %t178, ptr %a179 + %t180 = load ptr, ptr %a1 + %t181 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t180, { ptr, i64, i64 } { ptr @.str.1855, i64 10, i64 0 }) + store { ptr, i64, i64 } %t181, ptr %a182 + %t183 = load ptr, ptr %a1 + %t184 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t183, { ptr, i64, i64 } { ptr @.str.1856, i64 9, i64 0 }) + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } zeroinitializer, ptr %a186 + store { ptr, i64, i64 } zeroinitializer, ptr %a187 + %t188 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 + %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 + %t190 = load i64, ptr %t189 + store i64 0, ptr %a191 + br label %for.cond2973 +for.cond2973: + %t192 = load i64, ptr %a191 + %t193 = icmp slt i64 %t192, %t190 + br i1 %t193, label %for.body2974, label %for.end2976 +for.body2974: + %t194 = getelementptr inbounds { ptr, i64, i64 }, ptr %a187, i32 0, i32 1 + %t195 = load ptr, ptr %a1 + %t196 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t195, { ptr, i64, i64 } { ptr @.str.1857, i64 6, i64 0 }) + %t197 = load i64, ptr %t194 + %t198 = add i64 %t197, 1 + call void @finch_arr_reserve(ptr %a187, i64 %t198, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t199 = load ptr, ptr %a187 + %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 %t197 + store { ptr, i64, i64 } %t196, ptr %t200 + store i64 %t198, ptr %t194 + %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a186, i32 0, i32 1 + %t202 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 3 + %t203 = load i64, ptr %a191 + %t204 = load { ptr, i64, i64 }, ptr %t202 + %t205 = extractvalue { ptr, i64, i64 } %t204, 1 + %t206 = icmp uge i64 %t203, %t205 + br i1 %t206, label %range2977, label %inrange2978 +range2977: + call void @finch_panic_index(ptr @.str.1859, i64 1159, i64 %t203, i64 %t205) + unreachable +inrange2978: + %t207 = extractvalue { ptr, i64, i64 } %t204, 0 + %t208 = getelementptr inbounds i64, ptr %t207, i64 %t203 + %t209 = load i64, ptr %t208 + call void @finch_str_from_int(ptr %a210, i64 %t209) + %t211 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.1858, i64 4, i64 0 }, ptr %a213 + store { ptr, i64, i64 } %t211, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + store { ptr, i64, i64 } %t211, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t216, ptr %a218 + store { ptr, i64, i64 } { ptr @.str.1860, i64 9, i64 0 }, ptr %a219 + call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a217 + %t222 = load i64, ptr %a191 + %t223 = load { ptr, i64, i64 }, ptr %a187 + %t224 = extractvalue { ptr, i64, i64 } %t223, 1 + %t225 = icmp uge i64 %t222, %t224 + br i1 %t225, label %range2979, label %inrange2980 +range2979: + call void @finch_panic_index(ptr @.str.1861, i64 1159, i64 %t222, i64 %t224) + unreachable +inrange2980: + %t226 = extractvalue { ptr, i64, i64 } %t223, 0 + %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 %t222 + %t228 = load { ptr, i64, i64 }, ptr %t227 + store { ptr, i64, i64 } %t221, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t221, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + %t234 = load i64, ptr %t201 + %t235 = add i64 %t234, 1 + call void @finch_arr_reserve(ptr %a186, i64 %t235, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t236 = load ptr, ptr %a186 + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i64 %t234 + store { ptr, i64, i64 } %t233, ptr %t237 + store i64 %t235, ptr %t201 + br label %for.step2975 +for.step2975: + %t238 = load i64, ptr %a191 + %t239 = add i64 %t238, 1 + store i64 %t239, ptr %a191 + br label %for.cond2973 +for.end2976: + %t240 = load ptr, ptr %a1 + %t241 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.1862, i64 11, i64 0 }, ptr %a243 + store { ptr, i64, i64 } %t241, ptr %a244 + call void @finch_str_concat(ptr %a242, ptr %a243, ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a242 + store { ptr, i64, i64 } %t245, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.1863, i64 9, i64 0 }, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t245, ptr %a249 + call void @finch_str_drop(ptr %a249) + %t250 = load { ptr, i64, i64 }, ptr %a246 + %t251 = load { ptr, i64, i64 }, ptr %a182 + store { ptr, i64, i64 } %t250, ptr %a253 + store { ptr, i64, i64 } %t251, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t250, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t256, ptr %a258 + store { ptr, i64, i64 } { ptr @.str.1864, i64 3, i64 0 }, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t256, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %a186, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1865, i64 1, i64 0 }, ptr %a263 + call void @finch_str_join(ptr %a264, ptr %a186, ptr %a263) + %t265 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t261, ptr %a267 + store { ptr, i64, i64 } %t265, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t261, ptr %a269 + call void @finch_str_drop(ptr %a269) + store { ptr, i64, i64 } %t265, ptr %a270 + call void @finch_str_drop(ptr %a270) + %t271 = load { ptr, i64, i64 }, ptr %a266 + store { ptr, i64, i64 } %t271, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.1866, i64 2, i64 0 }, ptr %a274 + call void @finch_str_concat(ptr %a272, ptr %a273, ptr %a274) + store { ptr, i64, i64 } %t271, ptr %a275 + call void @finch_str_drop(ptr %a275) + %t276 = load { ptr, i64, i64 }, ptr %a272 + call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t276) + store { ptr, i64, i64 } %t276, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load ptr, ptr %a1 + %t279 = icmp eq ptr %t278, null + br i1 %t279, label %panic2981, label %ok2982 +panic2981: + call void @finch_panic(ptr @.str.1867, i64 1162, ptr @.str.1868) + unreachable +ok2982: + %t280 = getelementptr inbounds %S.gen.Gen, ptr %t278, i32 0, i32 9 + store i1 true, ptr %t280 + %t281 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 + %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %t281, i32 0, i32 1 + %t283 = load i64, ptr %t282 + store i64 0, ptr %a284 + br label %for.cond2983 +for.cond2983: + %t285 = load i64, ptr %a284 + %t286 = icmp slt i64 %t285, %t283 + br i1 %t286, label %for.body2984, label %for.end2986 +for.body2984: + %t287 = load ptr, ptr %a1 + %t288 = load i64, ptr %a284 + %t289 = load { ptr, i64, i64 }, ptr %a187 + %t290 = extractvalue { ptr, i64, i64 } %t289, 1 + %t291 = icmp uge i64 %t288, %t290 + br i1 %t291, label %range2987, label %inrange2988 +range2987: + call void @finch_panic_index(ptr @.str.1869, i64 1164, i64 %t288, i64 %t290) + unreachable +inrange2988: + %t292 = extractvalue { ptr, i64, i64 } %t289, 0 + %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %t292, i64 %t288 + %t294 = load { ptr, i64, i64 }, ptr %t293 + call void @finch.gen.label(ptr %t287, { ptr, i64, i64 } %t294) + %t295 = load ptr, ptr %a1 + %t296 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 2 + %t297 = load i64, ptr %a284 + %t298 = load { ptr, i64, i64 }, ptr %t296 + %t299 = extractvalue { ptr, i64, i64 } %t298, 1 + %t300 = icmp uge i64 %t297, %t299 + br i1 %t300, label %range2989, label %inrange2990 +range2989: + call void @finch_panic_index(ptr @.str.1871, i64 1165, i64 %t297, i64 %t299) + unreachable +inrange2990: + %t301 = extractvalue { ptr, i64, i64 } %t298, 0 + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 %t297 + %t303 = load { ptr, i64, i64 }, ptr %t302 + call void @finch.gen.bufText(ptr %t295, { ptr, i64, i64 } { ptr @.str.1870, i64 4, i64 0 }, { ptr, i64, i64 } %t303) + %t304 = load ptr, ptr %a1 + %t305 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.br(ptr %t304, { ptr, i64, i64 } %t305) + br label %for.step2985 +for.step2985: + %t306 = load i64, ptr %a284 + %t307 = add i64 %t306, 1 + store i64 %t307, ptr %a284 + br label %for.cond2983 +for.end2986: + %t308 = load ptr, ptr %a1 + %t309 = load { ptr, i64, i64 }, ptr %a182 + call void @finch.gen.label(ptr %t308, { ptr, i64, i64 } %t309) + %t310 = load ptr, ptr %a1 + %t311 = getelementptr inbounds %S.gen.EnumDef, ptr %a176, i32 0, i32 1 + %t312 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t312, ptr %a314 + store { ptr, i64, i64 } { ptr @.str.1873, i64 1, i64 0 }, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + %t316 = load { ptr, i64, i64 }, ptr %a313 + call void @finch.gen.bufText(ptr %t310, { ptr, i64, i64 } { ptr @.str.1872, i64 4, i64 0 }, { ptr, i64, i64 } %t316) + store { ptr, i64, i64 } %t316, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load ptr, ptr %a1 + %t319 = load ptr, ptr %a1 + %t320 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.1875, i64 9, i64 0 }, ptr %a322 + store { ptr, i64, i64 } %t320, ptr %a323 + call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a321 + store { ptr, i64, i64 } %t324, ptr %a326 + store { ptr, i64, i64 } { ptr @.str.1876, i64 7, i64 0 }, ptr %a327 + call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) + store { ptr, i64, i64 } %t324, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a325 + %t330 = call { ptr, i64, i64 } @finch.gen.op(ptr %t319, { ptr, i64, i64 } %t329) + store { ptr, i64, i64 } %t329, ptr %a331 + call void @finch_str_drop(ptr %a331) + store { ptr, i64, i64 } { ptr @.str.1874, i64 39, i64 0 }, ptr %a333 + store { ptr, i64, i64 } %t330, ptr %a334 + call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) + store { ptr, i64, i64 } %t330, ptr %a335 + call void @finch_str_drop(ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a332 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.1877, i64 1, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t336, ptr %a340 + call void @finch_str_drop(ptr %a340) + %t341 = load { ptr, i64, i64 }, ptr %a337 + call void @finch.gen.emit(ptr %t318, { ptr, i64, i64 } %t341) + store { ptr, i64, i64 } %t341, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t343, { ptr, i64, i64 } { ptr @.str.1878, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1879, i64 1, i64 0 }) + %t344 = load ptr, ptr %a1 + %t345 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.br(ptr %t344, { ptr, i64, i64 } %t345) + %t346 = load ptr, ptr %a1 + %t347 = load { ptr, i64, i64 }, ptr %a185 + call void @finch.gen.label(ptr %t346, { ptr, i64, i64 } %t347) + call void @finch.drop.arr_str(ptr %a187) + call void @finch.drop.arr_str(ptr %a186) + call void @finch_str_drop(ptr %a185) + call void @finch_str_drop(ptr %a182) + call void @finch_str_drop(ptr %a179) + call void @finch.drop.S_gen_EnumDef(ptr %a176) + br label %endif2968 +else2967: + %t348 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t349 = load { ptr, i64, i64 }, ptr %t348 + store { ptr, i64, i64 } %t349, ptr %a350 + store { ptr, i64, i64 } { ptr @.str.1880, i64 3, i64 0 }, ptr %a351 + %t352 = call i32 @finch_str_eq(ptr %a350, ptr %a351) + %t353 = icmp ne i32 %t352, 0 + br i1 %t353, label %then2991, label %else2992 +then2991: + %t354 = load ptr, ptr %a1 + %t355 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t354, { ptr, i64, i64 } { ptr @.str.1881, i64 2, i64 0 }) + store { ptr, i64, i64 } %t355, ptr %a356 + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a356 + call void @finch.gen.store(ptr %t357, { ptr, i64, i64 } { ptr @.str.1882, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1883, i64 4, i64 0 }, { ptr, i64, i64 } %t358) + %t359 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t359, { ptr, i64, i64 } { ptr @.str.1884, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1885, i64 1, i64 0 }) + %t360 = load ptr, ptr %a1 + %t361 = load ptr, ptr %a1 + %t362 = load ptr, ptr %a1 + %t363 = load %S.ast.Type, ptr %a2 + %t364 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t362, %S.ast.Type %t363) + store { ptr, i64, i64 } { ptr @.str.1887, i64 23, i64 0 }, ptr %a366 + store { ptr, i64, i64 } %t364, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t364, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a365 + store { ptr, i64, i64 } %t369, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.1888, i64 22, i64 0 }, ptr %a372 + call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) + store { ptr, i64, i64 } %t369, ptr %a373 + call void @finch_str_drop(ptr %a373) + %t374 = load { ptr, i64, i64 }, ptr %a370 + %t375 = call { ptr, i64, i64 } @finch.gen.op(ptr %t361, { ptr, i64, i64 } %t374) + store { ptr, i64, i64 } %t374, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = call { ptr, i64, i64 } @finch.gen.load(ptr %t360, { ptr, i64, i64 } { ptr @.str.1886, i64 3, i64 0 }, { ptr, i64, i64 } %t375) + store { ptr, i64, i64 } %t375, ptr %a378 + call void @finch_str_drop(ptr %a378) + store { ptr, i64, i64 } %t377, ptr %a379 + %t380 = load ptr, ptr %a1 + %t381 = load { ptr, i64, i64 }, ptr %a379 + %t382 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t380, { ptr, i64, i64 } %t381) + store { ptr, i64, i64 } %t382, ptr %a383 + %t384 = load ptr, ptr %a1 + %t385 = load %S.ast.Type, ptr %a2 + %t386 = load { ptr, i64, i64 }, ptr %a383 + %t387 = extractvalue { ptr, i64, i64 } %t386, 1 + %t388 = icmp uge i64 3, %t387 + br i1 %t388, label %range2994, label %inrange2995 +range2994: + call void @finch_panic_index(ptr @.str.1890, i64 1181, i64 3, i64 %t387) + unreachable +inrange2995: + %t389 = extractvalue { ptr, i64, i64 } %t386, 0 + %t390 = getelementptr inbounds { ptr, i64, i64 }, ptr %t389, i64 3 + %t391 = load { ptr, i64, i64 }, ptr %t390 + %t392 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t384, { ptr, i64, i64 } { ptr @.str.1889, i64 2, i64 0 }, %S.ast.Type %t385, { ptr, i64, i64 } %t391) + store { ptr, i64, i64 } %t392, ptr %a393 + %t394 = load ptr, ptr %a1 + %t395 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t394, { ptr, i64, i64 } { ptr @.str.1891, i64 10, i64 0 }) + store { ptr, i64, i64 } %t395, ptr %a396 + %t397 = load ptr, ptr %a1 + %t398 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t397, { ptr, i64, i64 } { ptr @.str.1892, i64 10, i64 0 }) + store { ptr, i64, i64 } %t398, ptr %a399 + %t400 = load ptr, ptr %a1 + %t401 = load ptr, ptr %a1 + %t402 = load ptr, ptr %a1 + %t403 = load ptr, ptr %a1 + %t404 = load { ptr, i64, i64 }, ptr %a393 + %t405 = load %S.ast.Type, ptr %a2 + %t406 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t403, { ptr, i64, i64 } %t404, %S.ast.Type %t405, i64 0) + %t407 = call { ptr, i64, i64 } @finch.gen.load(ptr %t402, { ptr, i64, i64 } { ptr @.str.1894, i64 3, i64 0 }, { ptr, i64, i64 } %t406) + store { ptr, i64, i64 } %t406, ptr %a408 + call void @finch_str_drop(ptr %a408) + store { ptr, i64, i64 } { ptr @.str.1893, i64 12, i64 0 }, ptr %a410 + store { ptr, i64, i64 } %t407, ptr %a411 + call void @finch_str_concat(ptr %a409, ptr %a410, ptr %a411) + store { ptr, i64, i64 } %t407, ptr %a412 + call void @finch_str_drop(ptr %a412) + %t413 = load { ptr, i64, i64 }, ptr %a409 + store { ptr, i64, i64 } %t413, ptr %a415 + store { ptr, i64, i64 } { ptr @.str.1895, i64 3, i64 0 }, ptr %a416 + call void @finch_str_concat(ptr %a414, ptr %a415, ptr %a416) + store { ptr, i64, i64 } %t413, ptr %a417 + call void @finch_str_drop(ptr %a417) + %t418 = load { ptr, i64, i64 }, ptr %a414 + %t419 = call { ptr, i64, i64 } @finch.gen.op(ptr %t401, { ptr, i64, i64 } %t418) + store { ptr, i64, i64 } %t418, ptr %a420 + call void @finch_str_drop(ptr %a420) + %t421 = load { ptr, i64, i64 }, ptr %a396 + %t422 = load { ptr, i64, i64 }, ptr %a399 + call void @finch.gen.condBr(ptr %t400, { ptr, i64, i64 } %t419, { ptr, i64, i64 } %t421, { ptr, i64, i64 } %t422) + store { ptr, i64, i64 } %t419, ptr %a423 + call void @finch_str_drop(ptr %a423) + %t424 = load ptr, ptr %a1 + %t425 = load { ptr, i64, i64 }, ptr %a396 + call void @finch.gen.label(ptr %t424, { ptr, i64, i64 } %t425) + %t426 = load ptr, ptr %a1 + %t427 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t426, { ptr, i64, i64 } { ptr @.str.1896, i64 3, i64 0 }) + store { ptr, i64, i64 } %t427, ptr %a428 + %t429 = load ptr, ptr %a1 + %t430 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t429, { ptr, i64, i64 } { ptr @.str.1897, i64 4, i64 0 }) + store { ptr, i64, i64 } %t430, ptr %a431 + %t432 = load ptr, ptr %a1 + %t433 = load ptr, ptr %a1 + %t434 = load { ptr, i64, i64 }, ptr %a356 + %t435 = call { ptr, i64, i64 } @finch.gen.load(ptr %t433, { ptr, i64, i64 } { ptr @.str.1898, i64 2, i64 0 }, { ptr, i64, i64 } %t434) + %t436 = load { ptr, i64, i64 }, ptr %a431 + %t437 = load { ptr, i64, i64 }, ptr %a428 + call void @finch.gen.condBr(ptr %t432, { ptr, i64, i64 } %t435, { ptr, i64, i64 } %t436, { ptr, i64, i64 } %t437) + store { ptr, i64, i64 } %t435, ptr %a438 + call void @finch_str_drop(ptr %a438) + %t439 = load ptr, ptr %a1 + %t440 = load { ptr, i64, i64 }, ptr %a428 + call void @finch.gen.label(ptr %t439, { ptr, i64, i64 } %t440) + %t441 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t441, { ptr, i64, i64 } { ptr @.str.1899, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1900, i64 2, i64 0 }) + %t442 = load ptr, ptr %a1 + %t443 = load { ptr, i64, i64 }, ptr %a431 + call void @finch.gen.br(ptr %t442, { ptr, i64, i64 } %t443) + %t444 = load ptr, ptr %a1 + %t445 = load { ptr, i64, i64 }, ptr %a431 + call void @finch.gen.label(ptr %t444, { ptr, i64, i64 } %t445) + %t446 = load ptr, ptr %a1 + %t447 = load { ptr, i64, i64 }, ptr %a356 + call void @finch.gen.store(ptr %t446, { ptr, i64, i64 } { ptr @.str.1901, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.1902, i64 5, i64 0 }, { ptr, i64, i64 } %t447) + %t448 = load ptr, ptr %a1 + %t449 = load ptr, ptr %a1 + %t450 = load ptr, ptr %a1 + %t451 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t452 = load { ptr, i64, i64 }, ptr %t451 + %t453 = extractvalue { ptr, i64, i64 } %t452, 1 + %t454 = icmp uge i64 0, %t453 + br i1 %t454, label %range2996, label %inrange2997 +range2996: + call void @finch_panic_index(ptr @.str.1904, i64 1194, i64 0, i64 %t453) + unreachable +inrange2997: + %t455 = extractvalue { ptr, i64, i64 } %t452, 0 + %t456 = getelementptr inbounds %S.ast.Type, ptr %t455, i64 0 + %t457 = load %S.ast.Type, ptr %t456 + %t458 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t450, %S.ast.Type %t457) + %t459 = load ptr, ptr %a1 + %t460 = load { ptr, i64, i64 }, ptr %a393 + %t461 = load %S.ast.Type, ptr %a2 + %t462 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t459, { ptr, i64, i64 } %t460, %S.ast.Type %t461, i64 1) + %t463 = call { ptr, i64, i64 } @finch.gen.load(ptr %t449, { ptr, i64, i64 } %t458, { ptr, i64, i64 } %t462) + store { ptr, i64, i64 } %t458, ptr %a464 + call void @finch_str_drop(ptr %a464) + store { ptr, i64, i64 } %t462, ptr %a465 + call void @finch_str_drop(ptr %a465) + %t466 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t467 = load { ptr, i64, i64 }, ptr %t466 + %t468 = extractvalue { ptr, i64, i64 } %t467, 1 + %t469 = icmp uge i64 0, %t468 + br i1 %t469, label %range2998, label %inrange2999 +range2998: + call void @finch_panic_index(ptr @.str.1905, i64 1194, i64 0, i64 %t468) + unreachable +inrange2999: + %t470 = extractvalue { ptr, i64, i64 } %t467, 0 + %t471 = getelementptr inbounds %S.ast.Type, ptr %t470, i64 0 + %t472 = load %S.ast.Type, ptr %t471 + call void @finch.gen.emitFormat(ptr %t448, { ptr, i64, i64 } { ptr @.str.1903, i64 4, i64 0 }, { ptr, i64, i64 } %t463, %S.ast.Type %t472, i1 true) + store { ptr, i64, i64 } %t463, ptr %a473 + call void @finch_str_drop(ptr %a473) + %t474 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t474, { ptr, i64, i64 } { ptr @.str.1906, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1907, i64 2, i64 0 }) + %t475 = load ptr, ptr %a1 + %t476 = load ptr, ptr %a1 + %t477 = load ptr, ptr %a1 + %t478 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t479 = load { ptr, i64, i64 }, ptr %t478 + %t480 = extractvalue { ptr, i64, i64 } %t479, 1 + %t481 = icmp uge i64 1, %t480 + br i1 %t481, label %range3000, label %inrange3001 +range3000: + call void @finch_panic_index(ptr @.str.1909, i64 1196, i64 1, i64 %t480) + unreachable +inrange3001: + %t482 = extractvalue { ptr, i64, i64 } %t479, 0 + %t483 = getelementptr inbounds %S.ast.Type, ptr %t482, i64 1 + %t484 = load %S.ast.Type, ptr %t483 + %t485 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t477, %S.ast.Type %t484) + %t486 = load ptr, ptr %a1 + %t487 = load { ptr, i64, i64 }, ptr %a393 + %t488 = load %S.ast.Type, ptr %a2 + %t489 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t486, { ptr, i64, i64 } %t487, %S.ast.Type %t488, i64 2) + %t490 = call { ptr, i64, i64 } @finch.gen.load(ptr %t476, { ptr, i64, i64 } %t485, { ptr, i64, i64 } %t489) + store { ptr, i64, i64 } %t485, ptr %a491 + call void @finch_str_drop(ptr %a491) + store { ptr, i64, i64 } %t489, ptr %a492 + call void @finch_str_drop(ptr %a492) + %t493 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t494 = load { ptr, i64, i64 }, ptr %t493 + %t495 = extractvalue { ptr, i64, i64 } %t494, 1 + %t496 = icmp uge i64 1, %t495 + br i1 %t496, label %range3002, label %inrange3003 +range3002: + call void @finch_panic_index(ptr @.str.1910, i64 1196, i64 1, i64 %t495) + unreachable +inrange3003: + %t497 = extractvalue { ptr, i64, i64 } %t494, 0 + %t498 = getelementptr inbounds %S.ast.Type, ptr %t497, i64 1 + %t499 = load %S.ast.Type, ptr %t498 + call void @finch.gen.emitFormat(ptr %t475, { ptr, i64, i64 } { ptr @.str.1908, i64 4, i64 0 }, { ptr, i64, i64 } %t490, %S.ast.Type %t499, i1 true) + store { ptr, i64, i64 } %t490, ptr %a500 + call void @finch_str_drop(ptr %a500) + %t501 = load ptr, ptr %a1 + %t502 = load { ptr, i64, i64 }, ptr %a399 + call void @finch.gen.br(ptr %t501, { ptr, i64, i64 } %t502) + %t503 = load ptr, ptr %a1 + %t504 = load { ptr, i64, i64 }, ptr %a399 + call void @finch.gen.label(ptr %t503, { ptr, i64, i64 } %t504) + %t505 = load ptr, ptr %a1 + %t506 = load { ptr, i64, i64 }, ptr %a383 + call void @finch.gen.loopEnd(ptr %t505, { ptr, i64, i64 } %t506) + %t507 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t507, { ptr, i64, i64 } { ptr @.str.1911, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1912, i64 1, i64 0 }) + call void @finch_str_drop(ptr %a431) + call void @finch_str_drop(ptr %a428) + call void @finch_str_drop(ptr %a399) + call void @finch_str_drop(ptr %a396) + call void @finch_str_drop(ptr %a393) + call void @finch.drop.arr_str(ptr %a383) + call void @finch_str_drop(ptr %a379) + call void @finch_str_drop(ptr %a356) + br label %endif2993 +else2992: + %t508 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t509 = load { ptr, i64, i64 }, ptr %t508 + store { ptr, i64, i64 } %t509, ptr %a510 + store { ptr, i64, i64 } { ptr @.str.1913, i64 6, i64 0 }, ptr %a511 + %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) + %t513 = icmp ne i32 %t512, 0 + br label %logic.from3004 +logic.from3004: + br i1 %t513, label %logic.rhs3005, label %logic.end3006 +logic.rhs3005: + %t514 = load ptr, ptr %a1 + %t515 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t516 = load { ptr, i64, i64 }, ptr %t515 + %t517 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t518 = load { ptr, i64, i64 }, ptr %t517 + %t519 = call i64 @finch.gen.findSum(ptr %t514, { ptr, i64, i64 } %t516, { ptr, i64, i64 } %t518) + %t520 = icmp sge i64 %t519, 0 + br label %logic.rend3007 +logic.rend3007: + br label %logic.end3006 +logic.end3006: + %t521 = phi i1 [ false, %logic.from3004 ], [ %t520, %logic.rend3007 ] + br i1 %t521, label %then3008, label %else3009 +then3008: + %t522 = load ptr, ptr %a1 + %t523 = icmp eq ptr %t522, null + br i1 %t523, label %panic3011, label %ok3012 +panic3011: + call void @finch_panic(ptr @.str.1914, i64 1203, ptr @.str.1915) + unreachable +ok3012: + %t524 = getelementptr inbounds %S.gen.Gen, ptr %t522, i32 0, i32 22 + %t525 = load ptr, ptr %a1 + %t526 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t527 = load { ptr, i64, i64 }, ptr %t526 + %t528 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t529 = load { ptr, i64, i64 }, ptr %t528 + %t530 = call i64 @finch.gen.findSum(ptr %t525, { ptr, i64, i64 } %t527, { ptr, i64, i64 } %t529) + %t531 = load { ptr, i64, i64 }, ptr %t524 + %t532 = extractvalue { ptr, i64, i64 } %t531, 1 + %t533 = icmp uge i64 %t530, %t532 + br i1 %t533, label %range3013, label %inrange3014 +range3013: + call void @finch_panic_index(ptr @.str.1916, i64 1203, i64 %t530, i64 %t532) + unreachable +inrange3014: + %t534 = extractvalue { ptr, i64, i64 } %t531, 0 + %t535 = getelementptr inbounds %S.gen.SumDef, ptr %t534, i64 %t530 + %t536 = load %S.gen.SumDef, ptr %t535 + store %S.gen.SumDef %t536, ptr %a537 + call void @finch.copy.S_gen_SumDef(ptr %a538, ptr %a537) + %t539 = load %S.gen.SumDef, ptr %a538 + store %S.gen.SumDef %t539, ptr %a540 + %t541 = load ptr, ptr %a1 + %t542 = icmp eq ptr %t541, null + br i1 %t542, label %panic3015, label %ok3016 +panic3015: + call void @finch_panic(ptr @.str.1917, i64 1204, ptr @.str.1918) + unreachable +ok3016: + %t543 = getelementptr inbounds %S.gen.Gen, ptr %t541, i32 0, i32 16 + %t544 = load ptr, ptr %a1 + %t545 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t546 = load { ptr, i64, i64 }, ptr %t545 + %t547 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t548 = load { ptr, i64, i64 }, ptr %t547 + %t549 = call i64 @finch.gen.findStruct(ptr %t544, { ptr, i64, i64 } %t546, { ptr, i64, i64 } %t548) + %t550 = load { ptr, i64, i64 }, ptr %t543 + %t551 = extractvalue { ptr, i64, i64 } %t550, 1 + %t552 = icmp uge i64 %t549, %t551 + br i1 %t552, label %range3017, label %inrange3018 +range3017: + call void @finch_panic_index(ptr @.str.1919, i64 1204, i64 %t549, i64 %t551) + unreachable +inrange3018: + %t553 = extractvalue { ptr, i64, i64 } %t550, 0 + %t554 = getelementptr inbounds %S.gen.StructDef, ptr %t553, i64 %t549 + %t555 = load %S.gen.StructDef, ptr %t554 + store %S.gen.StructDef %t555, ptr %a556 + call void @finch.copy.S_gen_StructDef(ptr %a557, ptr %a556) + %t558 = load %S.gen.StructDef, ptr %a557 + store %S.gen.StructDef %t558, ptr %a559 + %t560 = load ptr, ptr %a1 + %t561 = load %S.ast.Type, ptr %a2 + %t562 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t560, %S.ast.Type %t561) + store { ptr, i64, i64 } %t562, ptr %a563 + %t564 = load ptr, ptr %a1 + %t565 = load ptr, ptr %a1 + %t566 = load { ptr, i64, i64 }, ptr %a563 + store { ptr, i64, i64 } { ptr @.str.1921, i64 23, i64 0 }, ptr %a568 + store { ptr, i64, i64 } %t566, ptr %a569 + call void @finch_str_concat(ptr %a567, ptr %a568, ptr %a569) + %t570 = load { ptr, i64, i64 }, ptr %a567 + store { ptr, i64, i64 } %t570, ptr %a572 + store { ptr, i64, i64 } { ptr @.str.1922, i64 21, i64 0 }, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + store { ptr, i64, i64 } %t570, ptr %a574 + call void @finch_str_drop(ptr %a574) + %t575 = load { ptr, i64, i64 }, ptr %a571 + %t576 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 3 + %t577 = load { ptr, i64, i64 }, ptr %t576 + %t578 = extractvalue { ptr, i64, i64 } %t577, 1 + %t579 = icmp uge i64 0, %t578 + br i1 %t579, label %range3019, label %inrange3020 +range3019: + call void @finch_panic_index(ptr @.str.1923, i64 1206, i64 0, i64 %t578) + unreachable +inrange3020: + %t580 = extractvalue { ptr, i64, i64 } %t577, 0 + %t581 = getelementptr inbounds i64, ptr %t580, i64 0 + %t582 = load i64, ptr %t581 + call void @finch_str_from_int(ptr %a583, i64 %t582) + %t584 = load { ptr, i64, i64 }, ptr %a583 + store { ptr, i64, i64 } %t575, ptr %a586 + store { ptr, i64, i64 } %t584, ptr %a587 + call void @finch_str_concat(ptr %a585, ptr %a586, ptr %a587) + store { ptr, i64, i64 } %t575, ptr %a588 + call void @finch_str_drop(ptr %a588) + store { ptr, i64, i64 } %t584, ptr %a589 + call void @finch_str_drop(ptr %a589) + %t590 = load { ptr, i64, i64 }, ptr %a585 + %t591 = call { ptr, i64, i64 } @finch.gen.op(ptr %t565, { ptr, i64, i64 } %t590) + store { ptr, i64, i64 } %t590, ptr %a592 + call void @finch_str_drop(ptr %a592) + %t593 = call { ptr, i64, i64 } @finch.gen.load(ptr %t564, { ptr, i64, i64 } { ptr @.str.1920, i64 3, i64 0 }, { ptr, i64, i64 } %t591) + store { ptr, i64, i64 } %t591, ptr %a594 + call void @finch_str_drop(ptr %a594) + store { ptr, i64, i64 } %t593, ptr %a595 + %t596 = load ptr, ptr %a1 + %t597 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t596, { ptr, i64, i64 } { ptr @.str.1924, i64 9, i64 0 }) + store { ptr, i64, i64 } %t597, ptr %a598 + %t599 = load ptr, ptr %a1 + %t600 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t599, { ptr, i64, i64 } { ptr @.str.1925, i64 8, i64 0 }) + store { ptr, i64, i64 } %t600, ptr %a601 + store { ptr, i64, i64 } zeroinitializer, ptr %a602 + store { ptr, i64, i64 } zeroinitializer, ptr %a603 + %t604 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 + %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i32 0, i32 1 + %t606 = load i64, ptr %t605 + store i64 0, ptr %a607 + br label %for.cond3021 +for.cond3021: + %t608 = load i64, ptr %a607 + %t609 = icmp slt i64 %t608, %t606 + br i1 %t609, label %for.body3022, label %for.end3024 +for.body3022: + %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a603, i32 0, i32 1 + %t611 = load ptr, ptr %a1 + %t612 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t611, { ptr, i64, i64 } { ptr @.str.1926, i64 5, i64 0 }) + %t613 = load i64, ptr %t610 + %t614 = add i64 %t613, 1 + call void @finch_arr_reserve(ptr %a603, i64 %t614, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t615 = load ptr, ptr %a603 + %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %t615, i64 %t613 + store { ptr, i64, i64 } %t612, ptr %t616 + store i64 %t614, ptr %t610 + %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %a602, i32 0, i32 1 + %t618 = load i64, ptr %a607 + call void @finch_str_from_int(ptr %a619, i64 %t618) + %t620 = load { ptr, i64, i64 }, ptr %a619 + store { ptr, i64, i64 } { ptr @.str.1927, i64 4, i64 0 }, ptr %a622 + store { ptr, i64, i64 } %t620, ptr %a623 + call void @finch_str_concat(ptr %a621, ptr %a622, ptr %a623) + store { ptr, i64, i64 } %t620, ptr %a624 + call void @finch_str_drop(ptr %a624) + %t625 = load { ptr, i64, i64 }, ptr %a621 + store { ptr, i64, i64 } %t625, ptr %a627 + store { ptr, i64, i64 } { ptr @.str.1928, i64 9, i64 0 }, ptr %a628 + call void @finch_str_concat(ptr %a626, ptr %a627, ptr %a628) + store { ptr, i64, i64 } %t625, ptr %a629 + call void @finch_str_drop(ptr %a629) + %t630 = load { ptr, i64, i64 }, ptr %a626 + %t631 = load i64, ptr %a607 + %t632 = load { ptr, i64, i64 }, ptr %a603 + %t633 = extractvalue { ptr, i64, i64 } %t632, 1 + %t634 = icmp uge i64 %t631, %t633 + br i1 %t634, label %range3025, label %inrange3026 +range3025: + call void @finch_panic_index(ptr @.str.1929, i64 1213, i64 %t631, i64 %t633) + unreachable +inrange3026: + %t635 = extractvalue { ptr, i64, i64 } %t632, 0 + %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t631 + %t637 = load { ptr, i64, i64 }, ptr %t636 + store { ptr, i64, i64 } %t630, ptr %a639 + store { ptr, i64, i64 } %t637, ptr %a640 + call void @finch_str_concat(ptr %a638, ptr %a639, ptr %a640) + store { ptr, i64, i64 } %t630, ptr %a641 + call void @finch_str_drop(ptr %a641) + %t642 = load { ptr, i64, i64 }, ptr %a638 + %t643 = load i64, ptr %t617 + %t644 = add i64 %t643, 1 + call void @finch_arr_reserve(ptr %a602, i64 %t644, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t645 = load ptr, ptr %a602 + %t646 = getelementptr inbounds { ptr, i64, i64 }, ptr %t645, i64 %t643 + store { ptr, i64, i64 } %t642, ptr %t646 + store i64 %t644, ptr %t617 + br label %for.step3023 +for.step3023: + %t647 = load i64, ptr %a607 + %t648 = add i64 %t647, 1 + store i64 %t648, ptr %a607 + br label %for.cond3021 +for.end3024: + %t649 = load ptr, ptr %a1 + %t650 = load { ptr, i64, i64 }, ptr %a595 + store { ptr, i64, i64 } { ptr @.str.1930, i64 11, i64 0 }, ptr %a652 + store { ptr, i64, i64 } %t650, ptr %a653 + call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) + %t654 = load { ptr, i64, i64 }, ptr %a651 + store { ptr, i64, i64 } %t654, ptr %a656 + store { ptr, i64, i64 } { ptr @.str.1931, i64 9, i64 0 }, ptr %a657 + call void @finch_str_concat(ptr %a655, ptr %a656, ptr %a657) + store { ptr, i64, i64 } %t654, ptr %a658 + call void @finch_str_drop(ptr %a658) + %t659 = load { ptr, i64, i64 }, ptr %a655 + %t660 = load { ptr, i64, i64 }, ptr %a598 + store { ptr, i64, i64 } %t659, ptr %a662 + store { ptr, i64, i64 } %t660, ptr %a663 + call void @finch_str_concat(ptr %a661, ptr %a662, ptr %a663) + store { ptr, i64, i64 } %t659, ptr %a664 + call void @finch_str_drop(ptr %a664) + %t665 = load { ptr, i64, i64 }, ptr %a661 + store { ptr, i64, i64 } %t665, ptr %a667 + store { ptr, i64, i64 } { ptr @.str.1932, i64 3, i64 0 }, ptr %a668 + call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) + store { ptr, i64, i64 } %t665, ptr %a669 + call void @finch_str_drop(ptr %a669) + %t670 = load { ptr, i64, i64 }, ptr %a666 + %t671 = getelementptr inbounds { ptr, i64, i64 }, ptr %a602, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.1933, i64 1, i64 0 }, ptr %a672 + call void @finch_str_join(ptr %a673, ptr %a602, ptr %a672) + %t674 = load { ptr, i64, i64 }, ptr %a673 + store { ptr, i64, i64 } %t670, ptr %a676 + store { ptr, i64, i64 } %t674, ptr %a677 + call void @finch_str_concat(ptr %a675, ptr %a676, ptr %a677) + store { ptr, i64, i64 } %t670, ptr %a678 + call void @finch_str_drop(ptr %a678) + store { ptr, i64, i64 } %t674, ptr %a679 + call void @finch_str_drop(ptr %a679) + %t680 = load { ptr, i64, i64 }, ptr %a675 + store { ptr, i64, i64 } %t680, ptr %a682 + store { ptr, i64, i64 } { ptr @.str.1934, i64 2, i64 0 }, ptr %a683 + call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) + store { ptr, i64, i64 } %t680, ptr %a684 + call void @finch_str_drop(ptr %a684) + %t685 = load { ptr, i64, i64 }, ptr %a681 + call void @finch.gen.emit(ptr %t649, { ptr, i64, i64 } %t685) + store { ptr, i64, i64 } %t685, ptr %a686 + call void @finch_str_drop(ptr %a686) + %t687 = load ptr, ptr %a1 + %t688 = icmp eq ptr %t687, null + br i1 %t688, label %panic3027, label %ok3028 +panic3027: + call void @finch_panic(ptr @.str.1935, i64 1216, ptr @.str.1936) + unreachable +ok3028: + %t689 = getelementptr inbounds %S.gen.Gen, ptr %t687, i32 0, i32 9 + store i1 true, ptr %t689 + %t690 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 + %t691 = getelementptr inbounds { ptr, i64, i64 }, ptr %t690, i32 0, i32 1 + %t692 = load i64, ptr %t691 + store i64 0, ptr %a693 + br label %for.cond3029 +for.cond3029: + %t694 = load i64, ptr %a693 + %t695 = icmp slt i64 %t694, %t692 + br i1 %t695, label %for.body3030, label %for.end3032 +for.body3030: + %t696 = load ptr, ptr %a1 + %t697 = load i64, ptr %a693 + %t698 = load { ptr, i64, i64 }, ptr %a603 + %t699 = extractvalue { ptr, i64, i64 } %t698, 1 + %t700 = icmp uge i64 %t697, %t699 + br i1 %t700, label %range3033, label %inrange3034 +range3033: + call void @finch_panic_index(ptr @.str.1937, i64 1218, i64 %t697, i64 %t699) + unreachable +inrange3034: + %t701 = extractvalue { ptr, i64, i64 } %t698, 0 + %t702 = getelementptr inbounds { ptr, i64, i64 }, ptr %t701, i64 %t697 + %t703 = load { ptr, i64, i64 }, ptr %t702 + call void @finch.gen.label(ptr %t696, { ptr, i64, i64 } %t703) + %t704 = load ptr, ptr %a1 + %t705 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 2 + %t706 = load i64, ptr %a693 + %t707 = load { ptr, i64, i64 }, ptr %t705 + %t708 = extractvalue { ptr, i64, i64 } %t707, 1 + %t709 = icmp uge i64 %t706, %t708 + br i1 %t709, label %range3035, label %inrange3036 +range3035: + call void @finch_panic_index(ptr @.str.1939, i64 1219, i64 %t706, i64 %t708) + unreachable +inrange3036: + %t710 = extractvalue { ptr, i64, i64 } %t707, 0 + %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i64 %t706 + %t712 = load { ptr, i64, i64 }, ptr %t711 + call void @finch.gen.bufText(ptr %t704, { ptr, i64, i64 } { ptr @.str.1938, i64 4, i64 0 }, { ptr, i64, i64 } %t712) + %t713 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 + %t714 = load i64, ptr %a693 + %t715 = load { ptr, i64, i64 }, ptr %t713 + %t716 = extractvalue { ptr, i64, i64 } %t715, 1 + %t717 = icmp uge i64 %t714, %t716 + br i1 %t717, label %range3037, label %inrange3038 +range3037: + call void @finch_panic_index(ptr @.str.1940, i64 1220, i64 %t714, i64 %t716) + unreachable +inrange3038: + %t718 = extractvalue { ptr, i64, i64 } %t715, 0 + %t719 = getelementptr inbounds i64, ptr %t718, i64 %t714 + %t720 = load i64, ptr %t719 + %t721 = icmp sgt i64 %t720, 0 + br i1 %t721, label %then3039, label %endif3041 +then3039: + %t722 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t722, { ptr, i64, i64 } { ptr @.str.1941, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1942, i64 1, i64 0 }) + %t723 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 3 + %t724 = load i64, ptr %a693 + %t725 = load { ptr, i64, i64 }, ptr %t723 + %t726 = extractvalue { ptr, i64, i64 } %t725, 1 + %t727 = icmp uge i64 %t724, %t726 + br i1 %t727, label %range3042, label %inrange3043 +range3042: + call void @finch_panic_index(ptr @.str.1943, i64 1222, i64 %t724, i64 %t726) + unreachable +inrange3043: + %t728 = extractvalue { ptr, i64, i64 } %t725, 0 + %t729 = getelementptr inbounds i64, ptr %t728, i64 %t724 + %t730 = load i64, ptr %t729 + store i64 0, ptr %a731 + br label %for.cond3044 +for.cond3044: + %t732 = load i64, ptr %a731 + %t733 = icmp slt i64 %t732, %t730 + br i1 %t733, label %for.body3045, label %for.end3047 +for.body3045: + %t734 = load i64, ptr %a731 + %t735 = icmp sgt i64 %t734, 0 + br i1 %t735, label %then3048, label %endif3050 +then3048: + %t736 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t736, { ptr, i64, i64 } { ptr @.str.1944, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1945, i64 2, i64 0 }) + br label %endif3050 +endif3050: + %t737 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 4 + %t738 = load i64, ptr %a693 + %t739 = load { ptr, i64, i64 }, ptr %t737 + %t740 = extractvalue { ptr, i64, i64 } %t739, 1 + %t741 = icmp uge i64 %t738, %t740 + br i1 %t741, label %range3051, label %inrange3052 +range3051: + call void @finch_panic_index(ptr @.str.1946, i64 1226, i64 %t738, i64 %t740) + unreachable +inrange3052: + %t742 = extractvalue { ptr, i64, i64 } %t739, 0 + %t743 = getelementptr inbounds i64, ptr %t742, i64 %t738 + %t744 = load i64, ptr %t743 + %t745 = load i64, ptr %a731 + %t746 = add i64 %t744, %t745 + store i64 %t746, ptr %a747 + %t748 = load ptr, ptr %a1 + %t749 = load { ptr, i64, i64 }, ptr %a563 + store { ptr, i64, i64 } { ptr @.str.1947, i64 23, i64 0 }, ptr %a751 + store { ptr, i64, i64 } %t749, ptr %a752 + call void @finch_str_concat(ptr %a750, ptr %a751, ptr %a752) + %t753 = load { ptr, i64, i64 }, ptr %a750 + store { ptr, i64, i64 } %t753, ptr %a755 + store { ptr, i64, i64 } { ptr @.str.1948, i64 21, i64 0 }, ptr %a756 + call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) + store { ptr, i64, i64 } %t753, ptr %a757 + call void @finch_str_drop(ptr %a757) + %t758 = load { ptr, i64, i64 }, ptr %a754 + %t759 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 3 + %t760 = load i64, ptr %a747 + %t761 = load { ptr, i64, i64 }, ptr %t759 + %t762 = extractvalue { ptr, i64, i64 } %t761, 1 + %t763 = icmp uge i64 %t760, %t762 + br i1 %t763, label %range3053, label %inrange3054 +range3053: + call void @finch_panic_index(ptr @.str.1949, i64 1227, i64 %t760, i64 %t762) + unreachable +inrange3054: + %t764 = extractvalue { ptr, i64, i64 } %t761, 0 + %t765 = getelementptr inbounds i64, ptr %t764, i64 %t760 + %t766 = load i64, ptr %t765 + call void @finch_str_from_int(ptr %a767, i64 %t766) + %t768 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t758, ptr %a770 + store { ptr, i64, i64 } %t768, ptr %a771 + call void @finch_str_concat(ptr %a769, ptr %a770, ptr %a771) + store { ptr, i64, i64 } %t758, ptr %a772 + call void @finch_str_drop(ptr %a772) + store { ptr, i64, i64 } %t768, ptr %a773 + call void @finch_str_drop(ptr %a773) + %t774 = load { ptr, i64, i64 }, ptr %a769 + %t775 = call { ptr, i64, i64 } @finch.gen.op(ptr %t748, { ptr, i64, i64 } %t774) + store { ptr, i64, i64 } %t774, ptr %a776 + call void @finch_str_drop(ptr %a776) + store { ptr, i64, i64 } %t775, ptr %a777 + %t778 = load ptr, ptr %a1 + %t779 = load ptr, ptr %a1 + %t780 = load ptr, ptr %a1 + %t781 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 12 + %t782 = load i64, ptr %a747 + %t783 = load { ptr, i64, i64 }, ptr %t781 + %t784 = extractvalue { ptr, i64, i64 } %t783, 1 + %t785 = icmp uge i64 %t782, %t784 + br i1 %t785, label %range3055, label %inrange3056 +range3055: + call void @finch_panic_index(ptr @.str.1951, i64 1228, i64 %t782, i64 %t784) + unreachable +inrange3056: + %t786 = extractvalue { ptr, i64, i64 } %t783, 0 + %t787 = getelementptr inbounds %S.ast.Type, ptr %t786, i64 %t782 + %t788 = load %S.ast.Type, ptr %t787 + %t789 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t780, %S.ast.Type %t788) + %t790 = load { ptr, i64, i64 }, ptr %a777 + %t791 = call { ptr, i64, i64 } @finch.gen.load(ptr %t779, { ptr, i64, i64 } %t789, { ptr, i64, i64 } %t790) + store { ptr, i64, i64 } %t789, ptr %a792 + call void @finch_str_drop(ptr %a792) + %t793 = getelementptr inbounds %S.gen.StructDef, ptr %a559, i32 0, i32 12 + %t794 = load i64, ptr %a747 + %t795 = load { ptr, i64, i64 }, ptr %t793 + %t796 = extractvalue { ptr, i64, i64 } %t795, 1 + %t797 = icmp uge i64 %t794, %t796 + br i1 %t797, label %range3057, label %inrange3058 +range3057: + call void @finch_panic_index(ptr @.str.1952, i64 1228, i64 %t794, i64 %t796) + unreachable +inrange3058: + %t798 = extractvalue { ptr, i64, i64 } %t795, 0 + %t799 = getelementptr inbounds %S.ast.Type, ptr %t798, i64 %t794 + %t800 = load %S.ast.Type, ptr %t799 + call void @finch.gen.emitFormat(ptr %t778, { ptr, i64, i64 } { ptr @.str.1950, i64 4, i64 0 }, { ptr, i64, i64 } %t791, %S.ast.Type %t800, i1 true) + store { ptr, i64, i64 } %t791, ptr %a801 + call void @finch_str_drop(ptr %a801) + call void @finch_str_drop(ptr %a777) + br label %for.step3046 +for.step3046: + %t802 = load i64, ptr %a731 + %t803 = add i64 %t802, 1 + store i64 %t803, ptr %a731 + br label %for.cond3044 +for.end3047: + %t804 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t804, { ptr, i64, i64 } { ptr @.str.1953, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1954, i64 1, i64 0 }) + br label %endif3041 +endif3041: + %t805 = load ptr, ptr %a1 + %t806 = load { ptr, i64, i64 }, ptr %a601 + call void @finch.gen.br(ptr %t805, { ptr, i64, i64 } %t806) + br label %for.step3031 +for.step3031: + %t807 = load i64, ptr %a693 + %t808 = add i64 %t807, 1 + store i64 %t808, ptr %a693 + br label %for.cond3029 +for.end3032: + %t809 = load ptr, ptr %a1 + %t810 = load { ptr, i64, i64 }, ptr %a598 + call void @finch.gen.label(ptr %t809, { ptr, i64, i64 } %t810) + %t811 = load ptr, ptr %a1 + %t812 = getelementptr inbounds %S.gen.SumDef, ptr %a540, i32 0, i32 1 + %t813 = load { ptr, i64, i64 }, ptr %t812 + store { ptr, i64, i64 } %t813, ptr %a815 + store { ptr, i64, i64 } { ptr @.str.1956, i64 3, i64 0 }, ptr %a816 + call void @finch_str_concat(ptr %a814, ptr %a815, ptr %a816) + %t817 = load { ptr, i64, i64 }, ptr %a814 + call void @finch.gen.bufText(ptr %t811, { ptr, i64, i64 } { ptr @.str.1955, i64 4, i64 0 }, { ptr, i64, i64 } %t817) + store { ptr, i64, i64 } %t817, ptr %a818 + call void @finch_str_drop(ptr %a818) + %t819 = load ptr, ptr %a1 + %t820 = load { ptr, i64, i64 }, ptr %a601 + call void @finch.gen.br(ptr %t819, { ptr, i64, i64 } %t820) + %t821 = load ptr, ptr %a1 + %t822 = load { ptr, i64, i64 }, ptr %a601 + call void @finch.gen.label(ptr %t821, { ptr, i64, i64 } %t822) + call void @finch.drop.arr_str(ptr %a603) + call void @finch.drop.arr_str(ptr %a602) + call void @finch_str_drop(ptr %a601) + call void @finch_str_drop(ptr %a598) + call void @finch_str_drop(ptr %a595) + call void @finch_str_drop(ptr %a563) + call void @finch.drop.S_gen_StructDef(ptr %a559) + call void @finch.drop.S_gen_SumDef(ptr %a540) + br label %endif3010 +else3009: + %t823 = load ptr, ptr %a1 + %t824 = icmp eq ptr %t823, null + br i1 %t824, label %panic3059, label %ok3060 +panic3059: + call void @finch_panic(ptr @.str.1957, i64 1239, ptr @.str.1958) + unreachable +ok3060: + %t825 = getelementptr inbounds %S.gen.Gen, ptr %t823, i32 0, i32 16 + %t826 = load ptr, ptr %a1 + %t827 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t828 = load { ptr, i64, i64 }, ptr %t827 + %t829 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t830 = load { ptr, i64, i64 }, ptr %t829 + %t831 = call i64 @finch.gen.findStruct(ptr %t826, { ptr, i64, i64 } %t828, { ptr, i64, i64 } %t830) + %t832 = load { ptr, i64, i64 }, ptr %t825 + %t833 = extractvalue { ptr, i64, i64 } %t832, 1 + %t834 = icmp uge i64 %t831, %t833 + br i1 %t834, label %range3061, label %inrange3062 +range3061: + call void @finch_panic_index(ptr @.str.1959, i64 1239, i64 %t831, i64 %t833) + unreachable +inrange3062: + %t835 = extractvalue { ptr, i64, i64 } %t832, 0 + %t836 = getelementptr inbounds %S.gen.StructDef, ptr %t835, i64 %t831 + %t837 = load %S.gen.StructDef, ptr %t836 + store %S.gen.StructDef %t837, ptr %a838 + call void @finch.copy.S_gen_StructDef(ptr %a839, ptr %a838) + %t840 = load %S.gen.StructDef, ptr %a839 + store %S.gen.StructDef %t840, ptr %a841 + %t842 = load ptr, ptr %a1 + %t843 = load %S.ast.Type, ptr %a2 + %t844 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t842, %S.ast.Type %t843) + store { ptr, i64, i64 } %t844, ptr %a845 + %t846 = load ptr, ptr %a1 + %t847 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 1 + %t848 = load { ptr, i64, i64 }, ptr %t847 + store { ptr, i64, i64 } %t848, ptr %a850 + store { ptr, i64, i64 } { ptr @.str.1961, i64 1, i64 0 }, ptr %a851 + call void @finch_str_concat(ptr %a849, ptr %a850, ptr %a851) + %t852 = load { ptr, i64, i64 }, ptr %a849 + call void @finch.gen.bufText(ptr %t846, { ptr, i64, i64 } { ptr @.str.1960, i64 4, i64 0 }, { ptr, i64, i64 } %t852) + store { ptr, i64, i64 } %t852, ptr %a853 + call void @finch_str_drop(ptr %a853) + %t854 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 + %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i32 0, i32 1 + %t856 = load i64, ptr %t855 + store i64 0, ptr %a857 + br label %for.cond3063 +for.cond3063: + %t858 = load i64, ptr %a857 + %t859 = icmp slt i64 %t858, %t856 + br i1 %t859, label %for.body3064, label %for.end3066 +for.body3064: + store { ptr, i64, i64 } { ptr @.str.1962, i64 2, i64 0 }, ptr %a860 + %t861 = load i64, ptr %a857 + %t862 = icmp eq i64 %t861, 0 + br i1 %t862, label %then3067, label %endif3069 +then3067: + %t863 = load { ptr, i64, i64 }, ptr %a860 + store { ptr, i64, i64 } { ptr @.str.1963, i64 0, i64 0 }, ptr %a860 + store { ptr, i64, i64 } %t863, ptr %a864 + call void @finch_str_drop(ptr %a864) + br label %endif3069 +endif3069: + %t865 = load ptr, ptr %a1 + %t866 = load { ptr, i64, i64 }, ptr %a860 + %t867 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 11 + %t868 = load i64, ptr %a857 + %t869 = load { ptr, i64, i64 }, ptr %t867 + %t870 = extractvalue { ptr, i64, i64 } %t869, 1 + %t871 = icmp uge i64 %t868, %t870 + br i1 %t871, label %range3070, label %inrange3071 +range3070: + call void @finch_panic_index(ptr @.str.1965, i64 1247, i64 %t868, i64 %t870) + unreachable +inrange3071: + %t872 = extractvalue { ptr, i64, i64 } %t869, 0 + %t873 = getelementptr inbounds { ptr, i64, i64 }, ptr %t872, i64 %t868 + %t874 = load { ptr, i64, i64 }, ptr %t873 + store { ptr, i64, i64 } %t866, ptr %a876 + store { ptr, i64, i64 } %t874, ptr %a877 + call void @finch_str_concat(ptr %a875, ptr %a876, ptr %a877) + %t878 = load { ptr, i64, i64 }, ptr %a875 + store { ptr, i64, i64 } %t878, ptr %a880 + store { ptr, i64, i64 } { ptr @.str.1966, i64 2, i64 0 }, ptr %a881 + call void @finch_str_concat(ptr %a879, ptr %a880, ptr %a881) + store { ptr, i64, i64 } %t878, ptr %a882 + call void @finch_str_drop(ptr %a882) + %t883 = load { ptr, i64, i64 }, ptr %a879 + call void @finch.gen.bufText(ptr %t865, { ptr, i64, i64 } { ptr @.str.1964, i64 4, i64 0 }, { ptr, i64, i64 } %t883) + store { ptr, i64, i64 } %t883, ptr %a884 + call void @finch_str_drop(ptr %a884) + %t885 = load ptr, ptr %a1 + %t886 = load { ptr, i64, i64 }, ptr %a845 + store { ptr, i64, i64 } { ptr @.str.1967, i64 23, i64 0 }, ptr %a888 + store { ptr, i64, i64 } %t886, ptr %a889 + call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889) + %t890 = load { ptr, i64, i64 }, ptr %a887 + store { ptr, i64, i64 } %t890, ptr %a892 + store { ptr, i64, i64 } { ptr @.str.1968, i64 21, i64 0 }, ptr %a893 + call void @finch_str_concat(ptr %a891, ptr %a892, ptr %a893) + store { ptr, i64, i64 } %t890, ptr %a894 + call void @finch_str_drop(ptr %a894) + %t895 = load { ptr, i64, i64 }, ptr %a891 + %t896 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 3 + %t897 = load i64, ptr %a857 + %t898 = load { ptr, i64, i64 }, ptr %t896 + %t899 = extractvalue { ptr, i64, i64 } %t898, 1 + %t900 = icmp uge i64 %t897, %t899 + br i1 %t900, label %range3072, label %inrange3073 +range3072: + call void @finch_panic_index(ptr @.str.1969, i64 1248, i64 %t897, i64 %t899) + unreachable +inrange3073: + %t901 = extractvalue { ptr, i64, i64 } %t898, 0 + %t902 = getelementptr inbounds i64, ptr %t901, i64 %t897 + %t903 = load i64, ptr %t902 + call void @finch_str_from_int(ptr %a904, i64 %t903) + %t905 = load { ptr, i64, i64 }, ptr %a904 + store { ptr, i64, i64 } %t895, ptr %a907 + store { ptr, i64, i64 } %t905, ptr %a908 + call void @finch_str_concat(ptr %a906, ptr %a907, ptr %a908) + store { ptr, i64, i64 } %t895, ptr %a909 + call void @finch_str_drop(ptr %a909) + store { ptr, i64, i64 } %t905, ptr %a910 + call void @finch_str_drop(ptr %a910) + %t911 = load { ptr, i64, i64 }, ptr %a906 + %t912 = call { ptr, i64, i64 } @finch.gen.op(ptr %t885, { ptr, i64, i64 } %t911) + store { ptr, i64, i64 } %t911, ptr %a913 + call void @finch_str_drop(ptr %a913) + store { ptr, i64, i64 } %t912, ptr %a914 + %t915 = load ptr, ptr %a1 + %t916 = load ptr, ptr %a1 + %t917 = load ptr, ptr %a1 + %t918 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 + %t919 = load i64, ptr %a857 + %t920 = load { ptr, i64, i64 }, ptr %t918 + %t921 = extractvalue { ptr, i64, i64 } %t920, 1 + %t922 = icmp uge i64 %t919, %t921 + br i1 %t922, label %range3074, label %inrange3075 +range3074: + call void @finch_panic_index(ptr @.str.1971, i64 1249, i64 %t919, i64 %t921) + unreachable +inrange3075: + %t923 = extractvalue { ptr, i64, i64 } %t920, 0 + %t924 = getelementptr inbounds %S.ast.Type, ptr %t923, i64 %t919 + %t925 = load %S.ast.Type, ptr %t924 + %t926 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t917, %S.ast.Type %t925) + %t927 = load { ptr, i64, i64 }, ptr %a914 + %t928 = call { ptr, i64, i64 } @finch.gen.load(ptr %t916, { ptr, i64, i64 } %t926, { ptr, i64, i64 } %t927) + store { ptr, i64, i64 } %t926, ptr %a929 + call void @finch_str_drop(ptr %a929) + %t930 = getelementptr inbounds %S.gen.StructDef, ptr %a841, i32 0, i32 12 + %t931 = load i64, ptr %a857 + %t932 = load { ptr, i64, i64 }, ptr %t930 + %t933 = extractvalue { ptr, i64, i64 } %t932, 1 + %t934 = icmp uge i64 %t931, %t933 + br i1 %t934, label %range3076, label %inrange3077 +range3076: + call void @finch_panic_index(ptr @.str.1972, i64 1249, i64 %t931, i64 %t933) + unreachable +inrange3077: + %t935 = extractvalue { ptr, i64, i64 } %t932, 0 + %t936 = getelementptr inbounds %S.ast.Type, ptr %t935, i64 %t931 + %t937 = load %S.ast.Type, ptr %t936 + call void @finch.gen.emitFormat(ptr %t915, { ptr, i64, i64 } { ptr @.str.1970, i64 4, i64 0 }, { ptr, i64, i64 } %t928, %S.ast.Type %t937, i1 true) + store { ptr, i64, i64 } %t928, ptr %a938 + call void @finch_str_drop(ptr %a938) + call void @finch_str_drop(ptr %a914) + call void @finch_str_drop(ptr %a860) + br label %for.step3065 +for.step3065: + %t939 = load i64, ptr %a857 + %t940 = add i64 %t939, 1 + store i64 %t940, ptr %a857 + br label %for.cond3063 +for.end3066: + %t941 = load ptr, ptr %a1 + call void @finch.gen.bufText(ptr %t941, { ptr, i64, i64 } { ptr @.str.1973, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.1974, i64 1, i64 0 }) + call void @finch_str_drop(ptr %a845) + call void @finch.drop.S_gen_StructDef(ptr %a841) + br label %endif3010 +endif3010: + br label %endif2993 +endif2993: + br label %endif2968 +endif2968: + br label %endif2959 +endif2959: + %t942 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t942, { ptr, i64, i64 } { ptr @.str.1975, i64 8, i64 0 }) + %t943 = load ptr, ptr %a1 + %t944 = load %S.gen.Saved, ptr %a32 + %t945 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.1976, i64 21, i64 0 }, ptr %a947 + store { ptr, i64, i64 } %t945, ptr %a948 + call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948) + %t949 = load { ptr, i64, i64 }, ptr %a946 + store { ptr, i64, i64 } %t949, ptr %a951 + store { ptr, i64, i64 } { ptr @.str.1977, i64 18, i64 0 }, ptr %a952 + call void @finch_str_concat(ptr %a950, ptr %a951, ptr %a952) + store { ptr, i64, i64 } %t949, ptr %a953 + call void @finch_str_drop(ptr %a953) + %t954 = load { ptr, i64, i64 }, ptr %a950 + call void @finch.gen.endHelper(ptr %t943, %S.gen.Saved %t944, { ptr, i64, i64 } %t954) + store { ptr, i64, i64 } %t954, ptr %a955 + call void @finch_str_drop(ptr %a955) + %t956 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t956 +} + +define internal { ptr, i64, i64 } @finch.gen.intCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a7 = alloca i64, align 16 + %a10 = alloca i64, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i64 @finch.gen.bitsOf(%S.ast.Type %t5) + store i64 %t6, ptr %a7 + %t8 = load %S.ast.Type, ptr %a4 + %t9 = call i64 @finch.gen.bitsOf(%S.ast.Type %t8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a7 + %t12 = load i64, ptr %a10 + %t13 = icmp eq i64 %t11, %t12 + br i1 %t13, label %then3078, label %endif3080 +then3078: + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_copy(ptr %a16, ptr %a15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t17 +endif3080: + %t18 = load i64, ptr %a10 + %t19 = load i64, ptr %a7 + %t20 = icmp slt i64 %t18, %t19 + br i1 %t20, label %then3081, label %endif3083 +then3081: + %t21 = load ptr, ptr %a1 + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Type, ptr %a3 + %t24 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t22, %S.ast.Type %t23) + store { ptr, i64, i64 } { ptr @.str.1978, i64 6, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.1979, i64 1, i64 0 }, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + %t35 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t34, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.1980, i64 4, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = load ptr, ptr %a1 + %t47 = load %S.ast.Type, ptr %a4 + %t48 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t46, %S.ast.Type %t47) + store { ptr, i64, i64 } %t45, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t45, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + %t55 = call { ptr, i64, i64 } @finch.gen.op(ptr %t21, { ptr, i64, i64 } %t54) + store { ptr, i64, i64 } %t54, ptr %a56 + call void @finch_str_drop(ptr %a56) + ret { ptr, i64, i64 } %t55 +endif3083: + %t57 = load %S.ast.Type, ptr %a3 + %t58 = call i1 @finch.gen.isSigned(%S.ast.Type %t57) + br i1 %t58, label %then3084, label %endif3086 +then3084: + %t59 = load ptr, ptr %a1 + %t60 = load ptr, ptr %a1 + %t61 = load %S.ast.Type, ptr %a3 + %t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t60, %S.ast.Type %t61) + store { ptr, i64, i64 } { ptr @.str.1981, i64 5, i64 0 }, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t67, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.1982, i64 1, i64 0 }, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + %t73 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t72, ptr %a75 + store { ptr, i64, i64 } %t73, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t72, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } %t78, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.1983, i64 4, i64 0 }, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + store { ptr, i64, i64 } %t78, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a79 + %t84 = load ptr, ptr %a1 + %t85 = load %S.ast.Type, ptr %a4 + %t86 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t84, %S.ast.Type %t85) + store { ptr, i64, i64 } %t83, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t83, ptr %a90 + call void @finch_str_drop(ptr %a90) + store { ptr, i64, i64 } %t86, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a87 + %t93 = call { ptr, i64, i64 } @finch.gen.op(ptr %t59, { ptr, i64, i64 } %t92) + store { ptr, i64, i64 } %t92, ptr %a94 + call void @finch_str_drop(ptr %a94) + ret { ptr, i64, i64 } %t93 +endif3086: + %t95 = load ptr, ptr %a1 + %t96 = load ptr, ptr %a1 + %t97 = load %S.ast.Type, ptr %a3 + %t98 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t97) + store { ptr, i64, i64 } { ptr @.str.1984, i64 5, i64 0 }, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.1985, i64 1, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t108, ptr %a111 + store { ptr, i64, i64 } %t109, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.1986, i64 4, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load ptr, ptr %a1 + %t121 = load %S.ast.Type, ptr %a4 + %t122 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t120, %S.ast.Type %t121) + store { ptr, i64, i64 } %t119, ptr %a124 + store { ptr, i64, i64 } %t122, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + store { ptr, i64, i64 } %t119, ptr %a126 + call void @finch_str_drop(ptr %a126) + store { ptr, i64, i64 } %t122, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a123 + %t129 = call { ptr, i64, i64 } @finch.gen.op(ptr %t95, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t128, ptr %a130 + call void @finch_str_drop(ptr %a130) + ret { ptr, i64, i64 } %t129 +} + +define internal { ptr, i64, i64 } @finch.gen.floatCast(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t8 = load { ptr, i64, i64 }, ptr %t7 + store { ptr, i64, i64 } %t6, ptr %a9 + store { ptr, i64, i64 } %t8, ptr %a10 + %t11 = call i32 @finch_str_eq(ptr %a9, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then3087, label %endif3089 +then3087: + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch_str_copy(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + ret { ptr, i64, i64 } %t16 +endif3089: + %t17 = load %S.ast.Type, ptr %a4 + %t18 = call i64 @finch.gen.bitsOf(%S.ast.Type %t17) + %t19 = load %S.ast.Type, ptr %a3 + %t20 = call i64 @finch.gen.bitsOf(%S.ast.Type %t19) + %t21 = icmp sgt i64 %t18, %t20 + br i1 %t21, label %then3090, label %endif3092 +then3090: + %t22 = load ptr, ptr %a1 + %t23 = load ptr, ptr %a1 + %t24 = load %S.ast.Type, ptr %a3 + %t25 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t23, %S.ast.Type %t24) + store { ptr, i64, i64 } { ptr @.str.1987, i64 6, i64 0 }, ptr %a27 + store { ptr, i64, i64 } %t25, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.1988, i64 1, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + %t36 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t35, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t35, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.1989, i64 4, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t41, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = load ptr, ptr %a1 + %t48 = load %S.ast.Type, ptr %a4 + %t49 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t47, %S.ast.Type %t48) + store { ptr, i64, i64 } %t46, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t46, ptr %a53 + call void @finch_str_drop(ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a50 + %t56 = call { ptr, i64, i64 } @finch.gen.op(ptr %t22, { ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t55, ptr %a57 + call void @finch_str_drop(ptr %a57) + ret { ptr, i64, i64 } %t56 +endif3092: + %t58 = load ptr, ptr %a1 + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Type, ptr %a3 + %t61 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t59, %S.ast.Type %t60) + store { ptr, i64, i64 } { ptr @.str.1990, i64 8, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.1991, i64 1, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t71, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.1992, i64 4, i64 0 }, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load ptr, ptr %a1 + %t84 = load %S.ast.Type, ptr %a4 + %t85 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t83, %S.ast.Type %t84) + store { ptr, i64, i64 } %t82, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t82, ptr %a89 + call void @finch_str_drop(ptr %a89) + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a86 + %t92 = call { ptr, i64, i64 } @finch.gen.op(ptr %t58, { ptr, i64, i64 } %t91) + store { ptr, i64, i64 } %t91, ptr %a93 + call void @finch_str_drop(ptr %a93) + ret { ptr, i64, i64 } %t92 +} + +define internal { ptr, i64, i64 } @finch.gen.intToFloat(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = load %S.ast.Type, ptr %a3 + %t6 = call i1 @finch.gen.isSigned(%S.ast.Type %t5) + br i1 %t6, label %then3093, label %endif3095 +then3093: + %t7 = load ptr, ptr %a1 + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Type, ptr %a3 + %t10 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t8, %S.ast.Type %t9) + store { ptr, i64, i64 } { ptr @.str.1993, i64 7, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t10, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1994, i64 1, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + %t21 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t20, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t20, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.1995, i64 4, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load ptr, ptr %a1 + %t33 = load %S.ast.Type, ptr %a4 + %t34 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t32, %S.ast.Type %t33) + store { ptr, i64, i64 } %t31, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t31, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t7, { ptr, i64, i64 } %t40) + store { ptr, i64, i64 } %t40, ptr %a42 + call void @finch_str_drop(ptr %a42) + ret { ptr, i64, i64 } %t41 +endif3095: + %t43 = load ptr, ptr %a1 + %t44 = load ptr, ptr %a1 + %t45 = load %S.ast.Type, ptr %a3 + %t46 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t44, %S.ast.Type %t45) + store { ptr, i64, i64 } { ptr @.str.1996, i64 7, i64 0 }, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.1997, i64 1, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + %t57 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t56, ptr %a59 + store { ptr, i64, i64 } %t57, ptr %a60 + call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) + store { ptr, i64, i64 } %t56, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load { ptr, i64, i64 }, ptr %a58 + store { ptr, i64, i64 } %t62, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.1998, i64 4, i64 0 }, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + %t68 = load ptr, ptr %a1 + %t69 = load %S.ast.Type, ptr %a4 + %t70 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t68, %S.ast.Type %t69) + store { ptr, i64, i64 } %t67, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t67, ptr %a74 + call void @finch_str_drop(ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a71 + %t77 = call { ptr, i64, i64 } @finch.gen.op(ptr %t43, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a78 + call void @finch_str_drop(ptr %a78) + ret { ptr, i64, i64 } %t77 +} + +define internal void @finch.copy.S_gen_Val(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Val, ptr %src + store %S.gen.Val %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Val, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Val, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal %S.gen.Val @finch.gen.coerce(ptr %p0, %S.gen.Val %p1, %S.ast.Type %p2, %S.ast.Node %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.Val, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca %S.gen.Val, align 16 + %a12 = alloca %S.gen.Val, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a31 = alloca %S.ast.Type, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca %S.ast.Type, align 16 + %a67 = alloca %S.ast.Type, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca %S.ast.Type, align 16 + %a93 = alloca %S.ast.Type, align 16 + %a110 = alloca %S.ast.Type, align 16 + %a111 = alloca %S.ast.Type, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca %S.ast.Type, align 16 + %a162 = alloca %S.ast.Type, align 16 + %a175 = alloca %S.ast.Type, align 16 + %a176 = alloca %S.ast.Type, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca %S.ast.Type, align 16 + %a203 = alloca %S.ast.Type, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca %S.ast.Type, align 16 + %a233 = alloca %S.ast.Type, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca %S.gen.Val, align 16 + %a348 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.gen.Val %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %t6 + %t8 = load %S.ast.Type, ptr %a3 + %t9 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t8) + br i1 %t9, label %then3096, label %endif3098 +then3096: + %t10 = load %S.gen.Val, ptr %a2 + store %S.gen.Val %t10, ptr %a11 + call void @finch.copy.S_gen_Val(ptr %a12, ptr %a11) + %t13 = load %S.gen.Val, ptr %a12 + ret %S.gen.Val %t13 +endif3098: + %t14 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t15 = getelementptr inbounds %S.ast.Type, ptr %t14, i32 0, i32 0 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.1999, i64 4, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.from3099 +logic.from3099: + br i1 %t20, label %logic.rhs3100, label %logic.end3101 +logic.rhs3100: + %t21 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.2000, i64 3, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br label %logic.rend3102 +logic.rend3102: + br label %logic.end3101 +logic.end3101: + %t27 = phi i1 [ false, %logic.from3099 ], [ %t26, %logic.rend3102 ] + br i1 %t27, label %then3103, label %endif3105 +then3103: + %t28 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.2001, i64 4, i64 0 }, 0 + %t29 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t29, ptr %a30 + call void @finch.copy.S_ast_Type(ptr %a31, ptr %a30) + %t32 = load %S.ast.Type, ptr %a31 + %t33 = insertvalue %S.gen.Val %t28, %S.ast.Type %t32, 1 + ret %S.gen.Val %t33 +endif3105: + %t34 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t35 = getelementptr inbounds %S.ast.Type, ptr %t34, i32 0, i32 0 + %t36 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.2002, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.from3106 +logic.from3106: + br i1 %t40, label %logic.rhs3107, label %logic.end3108 +logic.rhs3107: + %t41 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t42, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.2003, i64 3, i64 0 }, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend3109 +logic.rend3109: + br label %logic.end3108 +logic.end3108: + %t47 = phi i1 [ false, %logic.from3106 ], [ %t46, %logic.rend3109 ] + br label %logic.from3110 +logic.from3110: + br i1 %t47, label %logic.rhs3111, label %logic.end3112 +logic.rhs3111: + %t48 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t49 = getelementptr inbounds %S.ast.Type, ptr %t48, i32 0, i32 1 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i32 0, i32 1 + %t51 = load i64, ptr %t50 + %t52 = icmp eq i64 %t51, 0 + br label %logic.from3113 +logic.from3113: + br i1 %t52, label %logic.end3115, label %logic.rhs3114 +logic.rhs3114: + %t53 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = icmp eq i64 %t55, 0 + br label %logic.rend3116 +logic.rend3116: + br label %logic.end3115 +logic.end3115: + %t57 = phi i1 [ true, %logic.from3113 ], [ %t56, %logic.rend3116 ] + br label %logic.rend3117 +logic.rend3117: + br label %logic.end3112 +logic.end3112: + %t58 = phi i1 [ false, %logic.from3110 ], [ %t57, %logic.rend3117 ] + br i1 %t58, label %then3118, label %endif3120 +then3118: + %t59 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + call void @finch_str_copy(ptr %a62, ptr %a61) + %t63 = load { ptr, i64, i64 }, ptr %a62 + %t64 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t63, 0 + %t65 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t65, ptr %a66 + call void @finch.copy.S_ast_Type(ptr %a67, ptr %a66) + %t68 = load %S.ast.Type, ptr %a67 + %t69 = insertvalue %S.gen.Val %t64, %S.ast.Type %t68, 1 + ret %S.gen.Val %t69 +endif3120: + %t70 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t71 = load %S.ast.Type, ptr %t70 + %t72 = call i1 @finch.gen.isInt(%S.ast.Type %t71) + br label %logic.from3121 +logic.from3121: + br i1 %t72, label %logic.rhs3122, label %logic.end3123 +logic.rhs3122: + %t73 = load %S.ast.Type, ptr %a3 + %t74 = call i1 @finch.gen.isInt(%S.ast.Type %t73) + br label %logic.rend3124 +logic.rend3124: + br label %logic.end3123 +logic.end3123: + %t75 = phi i1 [ false, %logic.from3121 ], [ %t74, %logic.rend3124 ] + br i1 %t75, label %then3125, label %endif3127 +then3125: + %t76 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t77 = load i1, ptr %t76 + br label %logic.from3128 +logic.from3128: + br i1 %t77, label %logic.rhs3129, label %logic.end3130 +logic.rhs3129: + %t78 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + %t80 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t81 = load %S.ast.Type, ptr %t80 + %t82 = load %S.ast.Type, ptr %a3 + %t83 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t79, %S.ast.Type %t81, %S.ast.Type %t82) + br label %logic.rend3131 +logic.rend3131: + br label %logic.end3130 +logic.end3130: + %t84 = phi i1 [ false, %logic.from3128 ], [ %t83, %logic.rend3131 ] + br i1 %t84, label %then3132, label %endif3134 +then3132: + %t85 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t86, ptr %a87 + call void @finch_str_copy(ptr %a88, ptr %a87) + %t89 = load { ptr, i64, i64 }, ptr %a88 + %t90 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t89, 0 + %t91 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t91, ptr %a92 + call void @finch.copy.S_ast_Type(ptr %a93, ptr %a92) + %t94 = load %S.ast.Type, ptr %a93 + %t95 = insertvalue %S.gen.Val %t90, %S.ast.Type %t94, 1 + %t96 = insertvalue %S.gen.Val %t95, i1 true, 3 + ret %S.gen.Val %t96 +endif3134: + %t97 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t98 = load %S.ast.Type, ptr %t97 + %t99 = load %S.ast.Type, ptr %a3 + %t100 = call i1 @finch.gen.widens(%S.ast.Type %t98, %S.ast.Type %t99) + br i1 %t100, label %then3135, label %endif3137 +then3135: + %t101 = load ptr, ptr %a1 + %t102 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t103 = load { ptr, i64, i64 }, ptr %t102 + %t104 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t105 = load %S.ast.Type, ptr %t104 + %t106 = load %S.ast.Type, ptr %a3 + %t107 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t101, { ptr, i64, i64 } %t103, %S.ast.Type %t105, %S.ast.Type %t106) + %t108 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t107, 0 + %t109 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t109, ptr %a110 + call void @finch.copy.S_ast_Type(ptr %a111, ptr %a110) + %t112 = load %S.ast.Type, ptr %a111 + %t113 = insertvalue %S.gen.Val %t108, %S.ast.Type %t112, 1 + ret %S.gen.Val %t113 +endif3137: + %t114 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t115 = load i1, ptr %t114 + br i1 %t115, label %then3138, label %endif3140 +then3138: + %t116 = load ptr, ptr %a1 + %t117 = load %S.ast.Node, ptr %a4 + %t118 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t119 = load { ptr, i64, i64 }, ptr %t118 + store { ptr, i64, i64 } { ptr @.str.2004, i64 11, i64 0 }, ptr %a121 + store { ptr, i64, i64 } %t119, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.2005, i64 16, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = load %S.ast.Type, ptr %a3 + %t130 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t129) + store { ptr, i64, i64 } %t128, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t128, ptr %a134 + call void @finch_str_drop(ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a131 + call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } %t136) + store { ptr, i64, i64 } %t136, ptr %a137 + call void @finch_str_drop(ptr %a137) + br label %endif3140 +endif3140: + br label %endif3127 +endif3127: + %t138 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t139 = load %S.ast.Type, ptr %t138 + %t140 = call i1 @finch.gen.isInt(%S.ast.Type %t139) + br label %logic.from3141 +logic.from3141: + br i1 %t140, label %logic.rhs3142, label %logic.end3143 +logic.rhs3142: + %t141 = load %S.ast.Type, ptr %a3 + %t142 = call i1 @finch.gen.isFloat(%S.ast.Type %t141) + br label %logic.rend3144 +logic.rend3144: + br label %logic.end3143 +logic.end3143: + %t143 = phi i1 [ false, %logic.from3141 ], [ %t142, %logic.rend3144 ] + br i1 %t143, label %then3145, label %endif3147 +then3145: + %t144 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t145 = load i1, ptr %t144 + br label %logic.from3148 +logic.from3148: + br i1 %t145, label %logic.rhs3149, label %logic.end3150 +logic.rhs3149: + %t146 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t147 = load { ptr, i64, i64 }, ptr %t146 + store { ptr, i64, i64 } %t147, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.2006, i64 5, i64 0 }, ptr %a149 + %t150 = call i32 @finch_str_eq(ptr %a148, ptr %a149) + %t151 = icmp ne i32 %t150, 0 + br label %logic.rend3151 +logic.rend3151: + br label %logic.end3150 +logic.end3150: + %t152 = phi i1 [ false, %logic.from3148 ], [ %t151, %logic.rend3151 ] + br i1 %t152, label %then3152, label %endif3154 +then3152: + %t153 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t154 = load { ptr, i64, i64 }, ptr %t153 + store { ptr, i64, i64 } %t154, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.2007, i64 2, i64 0 }, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + %t159 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t158, 0 + %t160 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t160, ptr %a161 + call void @finch.copy.S_ast_Type(ptr %a162, ptr %a161) + %t163 = load %S.ast.Type, ptr %a162 + %t164 = insertvalue %S.gen.Val %t159, %S.ast.Type %t163, 1 + %t165 = insertvalue %S.gen.Val %t164, i1 true, 3 + ret %S.gen.Val %t165 +endif3154: + %t166 = load ptr, ptr %a1 + %t167 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t168 = load { ptr, i64, i64 }, ptr %t167 + %t169 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t170 = load %S.ast.Type, ptr %t169 + %t171 = load %S.ast.Type, ptr %a3 + %t172 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t166, { ptr, i64, i64 } %t168, %S.ast.Type %t170, %S.ast.Type %t171) + %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 + %t174 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t174, ptr %a175 + call void @finch.copy.S_ast_Type(ptr %a176, ptr %a175) + %t177 = load %S.ast.Type, ptr %a176 + %t178 = insertvalue %S.gen.Val %t173, %S.ast.Type %t177, 1 + ret %S.gen.Val %t178 +endif3147: + %t179 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i32 0, i32 0 + %t181 = load { ptr, i64, i64 }, ptr %t180 + store { ptr, i64, i64 } %t181, ptr %a182 + store { ptr, i64, i64 } { ptr @.str.2008, i64 3, i64 0 }, ptr %a183 + %t184 = call i32 @finch_str_eq(ptr %a182, ptr %a183) + %t185 = icmp ne i32 %t184, 0 + br label %logic.from3155 +logic.from3155: + br i1 %t185, label %logic.rhs3156, label %logic.end3157 +logic.rhs3156: + %t186 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t187 = load { ptr, i64, i64 }, ptr %t186 + store { ptr, i64, i64 } %t187, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.2009, i64 5, i64 0 }, ptr %a189 + %t190 = call i32 @finch_str_eq(ptr %a188, ptr %a189) + %t191 = icmp ne i32 %t190, 0 + br label %logic.rend3158 +logic.rend3158: + br label %logic.end3157 +logic.end3157: + %t192 = phi i1 [ false, %logic.from3155 ], [ %t191, %logic.rend3158 ] + br i1 %t192, label %then3159, label %endif3161 +then3159: + %t193 = load ptr, ptr %a1 + %t194 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t195 = load { ptr, i64, i64 }, ptr %t194 + %t196 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t197 = load %S.ast.Type, ptr %t196 + %t198 = load %S.ast.Type, ptr %a3 + %t199 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t193, { ptr, i64, i64 } %t195, %S.ast.Type %t197, %S.ast.Type %t198) + %t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t199, 0 + %t201 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t201, ptr %a202 + call void @finch.copy.S_ast_Type(ptr %a203, ptr %a202) + %t204 = load %S.ast.Type, ptr %a203 + %t205 = insertvalue %S.gen.Val %t200, %S.ast.Type %t204, 1 + ret %S.gen.Val %t205 +endif3161: + %t206 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t207 = getelementptr inbounds %S.ast.Type, ptr %t206, i32 0, i32 0 + %t208 = load { ptr, i64, i64 }, ptr %t207 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.2010, i64 5, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br label %logic.from3162 +logic.from3162: + br i1 %t212, label %logic.rhs3163, label %logic.end3164 +logic.rhs3163: + %t213 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t214 = load { ptr, i64, i64 }, ptr %t213 + store { ptr, i64, i64 } %t214, ptr %a215 + store { ptr, i64, i64 } { ptr @.str.2011, i64 3, i64 0 }, ptr %a216 + %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) + %t218 = icmp ne i32 %t217, 0 + br label %logic.rend3165 +logic.rend3165: + br label %logic.end3164 +logic.end3164: + %t219 = phi i1 [ false, %logic.from3162 ], [ %t218, %logic.rend3165 ] + br label %logic.from3166 +logic.from3166: + br i1 %t219, label %logic.rhs3167, label %logic.end3168 +logic.rhs3167: + %t220 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 3 + %t221 = load i1, ptr %t220 + br label %logic.rend3169 +logic.rend3169: + br label %logic.end3168 +logic.end3168: + %t222 = phi i1 [ false, %logic.from3166 ], [ %t221, %logic.rend3169 ] + br i1 %t222, label %then3170, label %endif3172 +then3170: + %t223 = load ptr, ptr %a1 + %t224 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 0 + %t225 = load { ptr, i64, i64 }, ptr %t224 + %t226 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t227 = load %S.ast.Type, ptr %t226 + %t228 = load %S.ast.Type, ptr %a3 + %t229 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t223, { ptr, i64, i64 } %t225, %S.ast.Type %t227, %S.ast.Type %t228) + %t230 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t229, 0 + %t231 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t231, ptr %a232 + call void @finch.copy.S_ast_Type(ptr %a233, ptr %a232) + %t234 = load %S.ast.Type, ptr %a233 + %t235 = insertvalue %S.gen.Val %t230, %S.ast.Type %t234, 1 + ret %S.gen.Val %t235 +endif3172: + %t236 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t236, ptr %a238 + store { ptr, i64, i64 } { ptr @.str.2012, i64 9, i64 0 }, ptr %a239 + call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a237 + %t241 = load %S.ast.Type, ptr %a3 + %t242 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t241) + store { ptr, i64, i64 } %t240, ptr %a244 + store { ptr, i64, i64 } %t242, ptr %a245 + call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) + store { ptr, i64, i64 } %t240, ptr %a246 + call void @finch_str_drop(ptr %a246) + store { ptr, i64, i64 } %t242, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a243 + store { ptr, i64, i64 } %t248, ptr %a250 + store { ptr, i64, i64 } { ptr @.str.2013, i64 14, i64 0 }, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t248, ptr %a252 + call void @finch_str_drop(ptr %a252) + %t253 = load { ptr, i64, i64 }, ptr %a249 + %t254 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t255 = load %S.ast.Type, ptr %t254 + %t256 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t255) + store { ptr, i64, i64 } %t253, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t253, ptr %a260 + call void @finch_str_drop(ptr %a260) + store { ptr, i64, i64 } %t256, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t262, ptr %a263 + %t264 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t265 = load %S.ast.Type, ptr %t264 + %t266 = call i1 @finch.gen.isNumber(%S.ast.Type %t265) + br label %logic.from3173 +logic.from3173: + br i1 %t266, label %logic.rhs3174, label %logic.end3175 +logic.rhs3174: + %t267 = load %S.ast.Type, ptr %a3 + %t268 = call i1 @finch.gen.isNumber(%S.ast.Type %t267) + br label %logic.rend3176 +logic.rend3176: + br label %logic.end3175 +logic.end3175: + %t269 = phi i1 [ false, %logic.from3173 ], [ %t268, %logic.rend3176 ] + br i1 %t269, label %then3177, label %endif3179 +then3177: + %t270 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t270, ptr %a272 + store { ptr, i64, i64 } { ptr @.str.2014, i64 6, i64 0 }, ptr %a273 + call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a271 + %t275 = load %S.ast.Type, ptr %a3 + %t276 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t275) + store { ptr, i64, i64 } %t274, ptr %a278 + store { ptr, i64, i64 } %t276, ptr %a279 + call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) + store { ptr, i64, i64 } %t274, ptr %a280 + call void @finch_str_drop(ptr %a280) + store { ptr, i64, i64 } %t276, ptr %a281 + call void @finch_str_drop(ptr %a281) + %t282 = load { ptr, i64, i64 }, ptr %a277 + store { ptr, i64, i64 } %t282, ptr %a284 + store { ptr, i64, i64 } { ptr @.str.2015, i64 16, i64 0 }, ptr %a285 + call void @finch_str_concat(ptr %a283, ptr %a284, ptr %a285) + store { ptr, i64, i64 } %t282, ptr %a286 + call void @finch_str_drop(ptr %a286) + %t287 = load { ptr, i64, i64 }, ptr %a283 + %t288 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t287, ptr %a263 + store { ptr, i64, i64 } %t288, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t291 = load %S.ast.Type, ptr %t290 + %t292 = call i1 @finch.gen.isFloat(%S.ast.Type %t291) + br label %logic.from3180 +logic.from3180: + br i1 %t292, label %logic.rhs3181, label %logic.end3182 +logic.rhs3181: + %t293 = load %S.ast.Type, ptr %a3 + %t294 = call i1 @finch.gen.isInt(%S.ast.Type %t293) + br label %logic.rend3183 +logic.rend3183: + br label %logic.end3182 +logic.end3182: + %t295 = phi i1 [ false, %logic.from3180 ], [ %t294, %logic.rend3183 ] + br i1 %t295, label %then3184, label %endif3186 +then3184: + %t296 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.2016, i64 26, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + %t301 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t300, ptr %a263 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + br label %endif3186 +endif3186: + %t303 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t303, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.2017, i64 1, i64 0 }, ptr %a306 + call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a304 + %t308 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t307, ptr %a263 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif3179 +endif3179: + %t310 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t311 = load { ptr, i64, i64 }, ptr %t310 + store { ptr, i64, i64 } %t311, ptr %a312 + store { ptr, i64, i64 } { ptr @.str.2018, i64 3, i64 0 }, ptr %a313 + %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) + %t315 = icmp ne i32 %t314, 0 + br label %logic.from3187 +logic.from3187: + br i1 %t315, label %logic.rhs3188, label %logic.end3189 +logic.rhs3188: + %t316 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t317 = load %S.ast.Type, ptr %t316 + %t318 = call i1 @finch.gen.isNumber(%S.ast.Type %t317) + br label %logic.from3190 +logic.from3190: + br i1 %t318, label %logic.end3192, label %logic.rhs3191 +logic.rhs3191: + %t319 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t320 = getelementptr inbounds %S.ast.Type, ptr %t319, i32 0, i32 0 + %t321 = load { ptr, i64, i64 }, ptr %t320 + store { ptr, i64, i64 } %t321, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.2019, i64 4, i64 0 }, ptr %a323 + %t324 = call i32 @finch_str_eq(ptr %a322, ptr %a323) + %t325 = icmp ne i32 %t324, 0 + br label %logic.rend3193 +logic.rend3193: + br label %logic.end3192 +logic.end3192: + %t326 = phi i1 [ true, %logic.from3190 ], [ %t325, %logic.rend3193 ] + br label %logic.from3194 +logic.from3194: + br i1 %t326, label %logic.end3196, label %logic.rhs3195 +logic.rhs3195: + %t327 = getelementptr inbounds %S.gen.Val, ptr %a2, i32 0, i32 1 + %t328 = getelementptr inbounds %S.ast.Type, ptr %t327, i32 0, i32 0 + %t329 = load { ptr, i64, i64 }, ptr %t328 + store { ptr, i64, i64 } %t329, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.2020, i64 4, i64 0 }, ptr %a331 + %t332 = call i32 @finch_str_eq(ptr %a330, ptr %a331) + %t333 = icmp ne i32 %t332, 0 + br label %logic.rend3197 +logic.rend3197: + br label %logic.end3196 +logic.end3196: + %t334 = phi i1 [ true, %logic.from3194 ], [ %t333, %logic.rend3197 ] + br label %logic.rend3198 +logic.rend3198: + br label %logic.end3189 +logic.end3189: + %t335 = phi i1 [ false, %logic.from3187 ], [ %t334, %logic.rend3198 ] + br i1 %t335, label %then3199, label %endif3201 +then3199: + %t336 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.2021, i64 34, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a337 + %t341 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t340, ptr %a263 + store { ptr, i64, i64 } %t341, ptr %a342 + call void @finch_str_drop(ptr %a342) + br label %endif3201 +endif3201: + %t343 = load ptr, ptr %a1 + %t344 = load %S.ast.Node, ptr %a4 + %t345 = load { ptr, i64, i64 }, ptr %a263 + call void @finch.gen.fail(ptr %t343, %S.ast.Node %t344, { ptr, i64, i64 } %t345) + %t346 = load %S.gen.Val, ptr %a2 + store %S.gen.Val %t346, ptr %a347 + call void @finch.copy.S_gen_Val(ptr %a348, ptr %a347) + %t349 = load %S.gen.Val, ptr %a348 + call void @finch_str_drop(ptr %a263) + ret %S.gen.Val %t349 +} + +define internal i64 @finch.gen.lookup(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a19 = alloca i64, align 16 + %a32 = alloca i64, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3202, label %ok3203 +panic3202: + call void @finch_panic(ptr @.str.2022, i64 1346, ptr @.str.2023) + unreachable +ok3203: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond3204 +for.cond3204: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body3205, label %for.end3207 +for.body3205: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic3208, label %ok3209 +panic3208: + call void @finch_panic(ptr @.str.2024, i64 1347, ptr @.str.2025) + unreachable +ok3209: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 10 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = sub i64 %t15, 1 + %t17 = load i64, ptr %a8 + %t18 = sub i64 %t16, %t17 + store i64 %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic3210, label %ok3211 +panic3210: + call void @finch_panic(ptr @.str.2026, i64 1348, ptr @.str.2027) + unreachable +ok3211: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 + %t23 = load i64, ptr %a19 + %t24 = load { ptr, i64, i64 }, ptr %t22 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range3212, label %inrange3213 +range3212: + call void @finch_panic_index(ptr @.str.2028, i64 1348, i64 %t23, i64 %t25) + unreachable +inrange3213: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 + %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t31 = load i64, ptr %t30 + store i64 0, ptr %a32 + br label %for.cond3214 +for.cond3214: + %t33 = load i64, ptr %a32 + %t34 = icmp slt i64 %t33, %t31 + br i1 %t34, label %for.body3215, label %for.end3217 +for.body3215: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic3218, label %ok3219 +panic3218: + call void @finch_panic(ptr @.str.2029, i64 1349, ptr @.str.2030) + unreachable +ok3219: + %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 10 + %t38 = load i64, ptr %a19 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range3220, label %inrange3221 +range3220: + call void @finch_panic_index(ptr @.str.2031, i64 1349, i64 %t38, i64 %t40) + unreachable +inrange3221: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.gen.Scope, ptr %t42, i64 %t38 + %t44 = getelementptr inbounds %S.gen.Scope, ptr %t43, i32 0, i32 0 + %t45 = load i64, ptr %a32 + %t46 = load { ptr, i64, i64 }, ptr %t44 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 %t45, %t47 + br i1 %t48, label %range3222, label %inrange3223 +range3222: + call void @finch_panic_index(ptr @.str.2032, i64 1349, i64 %t45, i64 %t47) + unreachable +inrange3223: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.gen.Var, ptr %t49, i64 %t45 + %t51 = getelementptr inbounds %S.gen.Var, ptr %t50, i32 0, i32 0 + %t52 = load { ptr, i64, i64 }, ptr %t51 + %t53 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t52, ptr %a54 + store { ptr, i64, i64 } %t53, ptr %a55 + %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) + %t57 = icmp ne i32 %t56, 0 + br i1 %t57, label %then3224, label %endif3226 +then3224: + %t58 = load ptr, ptr %a1 + %t59 = icmp eq ptr %t58, null + br i1 %t59, label %panic3227, label %ok3228 +panic3227: + call void @finch_panic(ptr @.str.2033, i64 1350, ptr @.str.2034) + unreachable +ok3228: + %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 44 + %t61 = load i1, ptr %t60 + br label %logic.from3229 +logic.from3229: + br i1 %t61, label %logic.rhs3230, label %logic.end3231 +logic.rhs3230: + %t62 = load ptr, ptr %a1 + %t63 = icmp eq ptr %t62, null + br i1 %t63, label %panic3232, label %ok3233 +panic3232: + call void @finch_panic(ptr @.str.2035, i64 1350, ptr @.str.2036) + unreachable +ok3233: + %t64 = getelementptr inbounds %S.gen.Gen, ptr %t62, i32 0, i32 10 + %t65 = load i64, ptr %a19 + %t66 = load { ptr, i64, i64 }, ptr %t64 + %t67 = extractvalue { ptr, i64, i64 } %t66, 1 + %t68 = icmp uge i64 %t65, %t67 + br i1 %t68, label %range3234, label %inrange3235 +range3234: + call void @finch_panic_index(ptr @.str.2037, i64 1350, i64 %t65, i64 %t67) + unreachable +inrange3235: + %t69 = extractvalue { ptr, i64, i64 } %t66, 0 + %t70 = getelementptr inbounds %S.gen.Scope, ptr %t69, i64 %t65 + %t71 = getelementptr inbounds %S.gen.Scope, ptr %t70, i32 0, i32 0 + %t72 = load i64, ptr %a32 + %t73 = load { ptr, i64, i64 }, ptr %t71 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 %t72, %t74 + br i1 %t75, label %range3236, label %inrange3237 +range3236: + call void @finch_panic_index(ptr @.str.2038, i64 1350, i64 %t72, i64 %t74) + unreachable +inrange3237: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.gen.Var, ptr %t76, i64 %t72 + %t78 = getelementptr inbounds %S.gen.Var, ptr %t77, i32 0, i32 4 + %t79 = load i64, ptr %t78 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic3238, label %ok3239 +panic3238: + call void @finch_panic(ptr @.str.2039, i64 1350, ptr @.str.2040) + unreachable +ok3239: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 45 + %t83 = load i64, ptr %t82 + %t84 = icmp sge i64 %t79, %t83 + br label %logic.rend3240 +logic.rend3240: + br label %logic.end3231 +logic.end3231: + %t85 = phi i1 [ false, %logic.from3229 ], [ %t84, %logic.rend3240 ] + br i1 %t85, label %then3241, label %endif3243 +then3241: + br label %for.step3216 +endif3243: + %t86 = load i64, ptr %a19 + %t87 = mul i64 %t86, 100000 + %t88 = load i64, ptr %a32 + %t89 = add i64 %t87, %t88 + ret i64 %t89 +endif3226: + br label %for.step3216 +for.step3216: + %t90 = load i64, ptr %a32 + %t91 = add i64 %t90, 1 + store i64 %t91, ptr %a32 + br label %for.cond3214 +for.end3217: + br label %for.step3206 +for.step3206: + %t92 = load i64, ptr %a8 + %t93 = add i64 %t92, 1 + store i64 %t93, ptr %a8 + br label %for.cond3204 +for.end3207: + ret i64 -1 +} + +define internal void @finch.copy.S_gen_Var(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Var, ptr %src + store %S.gen.Var %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.Var, ptr %dst, i32 0, i32 7 + %t9 = getelementptr inbounds %S.gen.Var, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal %S.gen.Var @finch.gen.varAt(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a22 = alloca %S.gen.Var, align 16 + %a23 = alloca %S.gen.Var, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3244, label %ok3245 +panic3244: + call void @finch_panic(ptr @.str.2041, i64 1361, ptr @.str.2042) + unreachable +ok3245: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = load i64, ptr %a2 + %t7 = sdiv i64 %t6, 100000 + %t8 = load { ptr, i64, i64 }, ptr %t5 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range3246, label %inrange3247 +range3246: + call void @finch_panic_index(ptr @.str.2043, i64 1361, i64 %t7, i64 %t9) + unreachable +inrange3247: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i64 %t7 + %t13 = getelementptr inbounds %S.gen.Scope, ptr %t12, i32 0, i32 0 + %t14 = load i64, ptr %a2 + %t15 = srem i64 %t14, 100000 + %t16 = load { ptr, i64, i64 }, ptr %t13 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range3248, label %inrange3249 +range3248: + call void @finch_panic_index(ptr @.str.2044, i64 1361, i64 %t15, i64 %t17) + unreachable +inrange3249: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.Var, ptr %t19, i64 %t15 + %t21 = load %S.gen.Var, ptr %t20 + store %S.gen.Var %t21, ptr %a22 + call void @finch.copy.S_gen_Var(ptr %a23, ptr %a22) + %t24 = load %S.gen.Var, ptr %a23 + ret %S.gen.Var %t24 +} + +define internal i64 @finch.gen.findFn(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic3250, label %ok3251 +panic3250: + call void @finch_panic(ptr @.str.2045, i64 1365, ptr @.str.2046) + unreachable +ok3251: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + store i64 0, ptr %a9 + br label %for.cond3252 +for.cond3252: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t8 + br i1 %t11, label %for.body3253, label %for.end3255 +for.body3253: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic3256, label %ok3257 +panic3256: + call void @finch_panic(ptr @.str.2047, i64 1366, ptr @.str.2048) + unreachable +ok3257: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 15 + %t15 = load i64, ptr %a9 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range3258, label %inrange3259 +range3258: + call void @finch_panic_index(ptr @.str.2049, i64 1366, i64 %t15, i64 %t17) + unreachable +inrange3259: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i64 %t15 + %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t22, ptr %a24 + store { ptr, i64, i64 } %t23, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from3260 +logic.from3260: + br i1 %t27, label %logic.rhs3261, label %logic.end3262 +logic.rhs3261: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic3263, label %ok3264 +panic3263: + call void @finch_panic(ptr @.str.2050, i64 1366, ptr @.str.2051) + unreachable +ok3264: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 15 + %t31 = load i64, ptr %a9 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range3265, label %inrange3266 +range3265: + call void @finch_panic_index(ptr @.str.2052, i64 1366, i64 %t31, i64 %t33) + unreachable +inrange3266: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.FnSig, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } %t39, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend3267 +logic.rend3267: + br label %logic.end3262 +logic.end3262: + %t44 = phi i1 [ false, %logic.from3260 ], [ %t43, %logic.rend3267 ] + br label %logic.from3268 +logic.from3268: + br i1 %t44, label %logic.rhs3269, label %logic.end3270 +logic.rhs3269: + %t45 = load ptr, ptr %a1 + %t46 = icmp eq ptr %t45, null + br i1 %t46, label %panic3271, label %ok3272 +panic3271: + call void @finch_panic(ptr @.str.2053, i64 1366, ptr @.str.2054) + unreachable +ok3272: + %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 15 + %t48 = load i64, ptr %a9 + %t49 = load { ptr, i64, i64 }, ptr %t47 + %t50 = extractvalue { ptr, i64, i64 } %t49, 1 + %t51 = icmp uge i64 %t48, %t50 + br i1 %t51, label %range3273, label %inrange3274 +range3273: + call void @finch_panic_index(ptr @.str.2055, i64 1366, i64 %t48, i64 %t50) + unreachable +inrange3274: + %t52 = extractvalue { ptr, i64, i64 } %t49, 0 + %t53 = getelementptr inbounds %S.gen.FnSig, ptr %t52, i64 %t48 + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 2 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = icmp eq i64 %t56, 0 + br label %logic.rend3275 +logic.rend3275: + br label %logic.end3270 +logic.end3270: + %t58 = phi i1 [ false, %logic.from3268 ], [ %t57, %logic.rend3275 ] + br i1 %t58, label %then3276, label %endif3278 +then3276: + %t59 = load i64, ptr %a9 + ret i64 %t59 +endif3278: + br label %for.step3254 +for.step3254: + %t60 = load i64, ptr %a9 + %t61 = add i64 %t60, 1 + store i64 %t61, ptr %a9 + br label %for.cond3252 +for.end3255: + ret i64 -1 +} + +define internal i64 @finch.gen.findMethod(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic3279, label %ok3280 +panic3279: + call void @finch_panic(ptr @.str.2056, i64 1374, ptr @.str.2057) + unreachable +ok3280: + %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 15 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 + %t9 = load i64, ptr %t8 + store i64 0, ptr %a10 + br label %for.cond3281 +for.cond3281: + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, %t9 + br i1 %t12, label %for.body3282, label %for.end3284 +for.body3282: + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic3285, label %ok3286 +panic3285: + call void @finch_panic(ptr @.str.2058, i64 1375, ptr @.str.2059) + unreachable +ok3286: + %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 15 + %t16 = load i64, ptr %a10 + %t17 = load { ptr, i64, i64 }, ptr %t15 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range3287, label %inrange3288 +range3287: + call void @finch_panic_index(ptr @.str.2060, i64 1375, i64 %t16, i64 %t18) + unreachable +inrange3288: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.gen.FnSig, ptr %t20, i64 %t16 + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %t21, i32 0, i32 3 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } %t24, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.from3289 +logic.from3289: + br i1 %t28, label %logic.rhs3290, label %logic.end3291 +logic.rhs3290: + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic3292, label %ok3293 +panic3292: + call void @finch_panic(ptr @.str.2061, i64 1375, ptr @.str.2062) + unreachable +ok3293: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 15 + %t32 = load i64, ptr %a10 + %t33 = load { ptr, i64, i64 }, ptr %t31 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range3294, label %inrange3295 +range3294: + call void @finch_panic_index(ptr @.str.2063, i64 1375, i64 %t32, i64 %t34) + unreachable +inrange3295: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i64 %t32 + %t38 = getelementptr inbounds %S.gen.FnSig, ptr %t37, i32 0, i32 2 + %t39 = load { ptr, i64, i64 }, ptr %t38 + %t40 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } %t40, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br label %logic.rend3296 +logic.rend3296: + br label %logic.end3291 +logic.end3291: + %t45 = phi i1 [ false, %logic.from3289 ], [ %t44, %logic.rend3296 ] + br label %logic.from3297 +logic.from3297: + br i1 %t45, label %logic.rhs3298, label %logic.end3299 +logic.rhs3298: + %t46 = load ptr, ptr %a1 + %t47 = icmp eq ptr %t46, null + br i1 %t47, label %panic3300, label %ok3301 +panic3300: + call void @finch_panic(ptr @.str.2064, i64 1375, ptr @.str.2065) + unreachable +ok3301: + %t48 = getelementptr inbounds %S.gen.Gen, ptr %t46, i32 0, i32 15 + %t49 = load i64, ptr %a10 + %t50 = load { ptr, i64, i64 }, ptr %t48 + %t51 = extractvalue { ptr, i64, i64 } %t50, 1 + %t52 = icmp uge i64 %t49, %t51 + br i1 %t52, label %range3302, label %inrange3303 +range3302: + call void @finch_panic_index(ptr @.str.2066, i64 1375, i64 %t49, i64 %t51) + unreachable +inrange3303: + %t53 = extractvalue { ptr, i64, i64 } %t50, 0 + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i64 %t49 + %t55 = getelementptr inbounds %S.gen.FnSig, ptr %t54, i32 0, i32 1 + %t56 = load { ptr, i64, i64 }, ptr %t55 + %t57 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } %t57, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.rend3304 +logic.rend3304: + br label %logic.end3299 +logic.end3299: + %t62 = phi i1 [ false, %logic.from3297 ], [ %t61, %logic.rend3304 ] + br i1 %t62, label %then3305, label %endif3307 +then3305: + %t63 = load i64, ptr %a10 + ret i64 %t63 +endif3307: + br label %for.step3283 +for.step3283: + %t64 = load i64, ptr %a10 + %t65 = add i64 %t64, 1 + store i64 %t65, ptr %a10 + br label %for.cond3281 +for.end3284: + ret i64 -1 +} + +define internal i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca i64, align 16 + %a41 = alloca i64, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 28, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.2067, i64 5, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.2068, i64 4, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.2069, i64 3, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.2070, i64 3, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.2071, i64 4, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.2072, i64 5, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.2073, i64 4, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.2074, i64 9, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.2075, i64 10, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.2076, i64 11, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.2077, i64 5, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.2078, i64 4, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.2079, i64 5, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.2080, i64 3, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.2081, i64 4, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.2082, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 + store { ptr, i64, i64 } { ptr @.str.2083, i64 11, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 + store { ptr, i64, i64 } { ptr @.str.2084, i64 2, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 + store { ptr, i64, i64 } { ptr @.str.2085, i64 3, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 + store { ptr, i64, i64 } { ptr @.str.2086, i64 3, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 + store { ptr, i64, i64 } { ptr @.str.2087, i64 3, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 + store { ptr, i64, i64 } { ptr @.str.2088, i64 2, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 + store { ptr, i64, i64 } { ptr @.str.2089, i64 3, i64 0 }, ptr %t26 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 23 + store { ptr, i64, i64 } { ptr @.str.2090, i64 3, i64 0 }, ptr %t27 + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 24 + store { ptr, i64, i64 } { ptr @.str.2091, i64 3, i64 0 }, ptr %t28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 25 + store { ptr, i64, i64 } { ptr @.str.2092, i64 3, i64 0 }, ptr %t29 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 26 + store { ptr, i64, i64 } { ptr @.str.2093, i64 3, i64 0 }, ptr %t30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 27 + store { ptr, i64, i64 } { ptr @.str.2094, i64 5, i64 0 }, ptr %t31 + %t32 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t33 = insertvalue { ptr, i64, i64 } %t32, i64 28, 1 + %t34 = insertvalue { ptr, i64, i64 } %t33, i64 28, 2 + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a35, i32 0, i32 1 + %t37 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a38 + %t39 = load i64, ptr %t36 + %t40 = load ptr, ptr %a35 + store i64 0, ptr %a41 + br label %find.cond3308 +find.cond3308: + %t42 = load i64, ptr %a41 + %t43 = icmp slt i64 %t42, %t39 + br i1 %t43, label %find.body3309, label %find.end3312 +find.body3309: + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t42 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } %t37, ptr %a47 + %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + br i1 %t49, label %find.hit3310, label %find.next3311 +find.hit3310: + store i64 %t42, ptr %a38 + br label %find.end3312 +find.next3311: + %t50 = add i64 %t42, 1 + store i64 %t50, ptr %a41 + br label %find.cond3308 +find.end3312: + %t51 = load i64, ptr %a38 + %t52 = icmp sge i64 %t51, 0 + call void @finch.drop.arr_str(ptr %a35) + ret i1 %t52 +} + +define internal { ptr, i64, i64 } @finch.gen.addVar(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4, i1 %p5, i1 %p6) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca i1, align 16 + %a7 = alloca i1, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca i64, align 16 + %a93 = alloca i1, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca %S.ast.Type, align 16 + %a142 = alloca %S.ast.Type, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca %S.ast.Node, align 16 + %a238 = alloca %S.ast.Node, align 16 + %a240 = alloca %S.ast.Node, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store i1 %p5, ptr %a6 + store i1 %p6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = load { ptr, i64, i64 }, ptr %a3 + %t10 = call i64 @finch.gen.lookup(ptr %t8, { ptr, i64, i64 } %t9) + %t11 = icmp sge i64 %t10, 0 + br label %logic.from3313 +logic.from3313: + br i1 %t11, label %logic.rhs3314, label %logic.end3315 +logic.rhs3314: + %t12 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.2095, i64 3, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp eq i32 %t15, 0 + br label %logic.rend3316 +logic.rend3316: + br label %logic.end3315 +logic.end3315: + %t17 = phi i1 [ false, %logic.from3313 ], [ %t16, %logic.rend3316 ] + br i1 %t17, label %then3317, label %endif3319 +then3317: + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + %t20 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2096, i64 18, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.2097, i64 21, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } %t29) + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_drop(ptr %a30) + br label %endif3319 +endif3319: + %t31 = load ptr, ptr %a1 + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic3320, label %ok3321 +panic3320: + call void @finch_panic(ptr @.str.2098, i64 1393, ptr @.str.2099) + unreachable +ok3321: + %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 14 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = load { ptr, i64, i64 }, ptr %a3 + %t37 = call i64 @finch.gen.findFn(ptr %t31, { ptr, i64, i64 } %t35, { ptr, i64, i64 } %t36) + %t38 = icmp sge i64 %t37, 0 + br i1 %t38, label %then3322, label %endif3324 +then3322: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a2 + %t41 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2100, i64 1, i64 0 }, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.2101, i64 35, i64 0 }, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t45, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t50) + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %endif3324 +endif3324: + %t52 = load { ptr, i64, i64 }, ptr %a3 + %t53 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t52) + br i1 %t53, label %then3325, label %endif3327 +then3325: + %t54 = load ptr, ptr %a1 + %t55 = load %S.ast.Node, ptr %a2 + %t56 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2102, i64 1, i64 0 }, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.2103, i64 38, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } %t65) + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_drop(ptr %a66) + br label %endif3327 +endif3327: + %t67 = load ptr, ptr %a1 + %t68 = load ptr, ptr %a1 + %t69 = load %S.ast.Type, ptr %a4 + %t70 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t68, %S.ast.Type %t69) + %t71 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t67, { ptr, i64, i64 } %t70) + store { ptr, i64, i64 } %t70, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t71, ptr %a73 + %t74 = load ptr, ptr %a1 + %t75 = load ptr, ptr %a1 + %t76 = load %S.ast.Type, ptr %a4 + %t77 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t75, %S.ast.Type %t76) + %t78 = load { ptr, i64, i64 }, ptr %a5 + %t79 = load { ptr, i64, i64 }, ptr %a73 + call void @finch.gen.store(ptr %t74, { ptr, i64, i64 } %t77, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t79) + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_drop(ptr %a80) + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic3328, label %ok3329 +panic3328: + call void @finch_panic(ptr @.str.2104, i64 1401, ptr @.str.2105) + unreachable +ok3329: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 10 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 + %t85 = load i64, ptr %t84 + %t86 = sub i64 %t85, 1 + store i64 %t86, ptr %a87 + %t88 = load i1, ptr %a7 + br label %logic.from3330 +logic.from3330: + br i1 %t88, label %logic.rhs3331, label %logic.end3332 +logic.rhs3331: + %t89 = load ptr, ptr %a1 + %t90 = load %S.ast.Type, ptr %a4 + %t91 = call i1 @finch.gen.owning(ptr %t89, %S.ast.Type %t90) + br label %logic.rend3333 +logic.rend3333: + br label %logic.end3332 +logic.end3332: + %t92 = phi i1 [ false, %logic.from3330 ], [ %t91, %logic.rend3333 ] + store i1 %t92, ptr %a93 + %t94 = load i1, ptr %a93 + br i1 %t94, label %then3334, label %endif3336 +then3334: + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic3337, label %ok3338 +panic3337: + call void @finch_panic(ptr @.str.2106, i64 1404, ptr @.str.2107) + unreachable +ok3338: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 10 + %t98 = load i64, ptr %a87 + %t99 = load { ptr, i64, i64 }, ptr %t97 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 %t98, %t100 + br i1 %t101, label %range3339, label %inrange3340 +range3339: + call void @finch_panic_index(ptr @.str.2108, i64 1404, i64 %t98, i64 %t100) + unreachable +inrange3340: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.gen.Scope, ptr %t102, i64 %t98 + %t104 = getelementptr inbounds %S.gen.Scope, ptr %t103, i32 0, i32 3 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t106 = insertvalue %S.gen.Cleanup zeroinitializer, i1 false, 0 + %t107 = load ptr, ptr %a1 + %t108 = icmp eq ptr %t107, null + br i1 %t108, label %panic3341, label %ok3342 +panic3341: + call void @finch_panic(ptr @.str.2109, i64 1404, ptr @.str.2110) + unreachable +ok3342: + %t109 = getelementptr inbounds %S.gen.Gen, ptr %t107, i32 0, i32 10 + %t110 = load i64, ptr %a87 + %t111 = load { ptr, i64, i64 }, ptr %t109 + %t112 = extractvalue { ptr, i64, i64 } %t111, 1 + %t113 = icmp uge i64 %t110, %t112 + br i1 %t113, label %range3343, label %inrange3344 +range3343: + call void @finch_panic_index(ptr @.str.2111, i64 1404, i64 %t110, i64 %t112) + unreachable +inrange3344: + %t114 = extractvalue { ptr, i64, i64 } %t111, 0 + %t115 = getelementptr inbounds %S.gen.Scope, ptr %t114, i64 %t110 + %t116 = getelementptr inbounds %S.gen.Scope, ptr %t115, i32 0, i32 0 + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t116, i32 0, i32 1 + %t118 = load i64, ptr %t117 + %t119 = insertvalue %S.gen.Cleanup %t106, i64 %t118, 1 + %t120 = load i64, ptr %t105 + %t121 = add i64 %t120, 1 + call void @finch_arr_reserve(ptr %t104, i64 %t121, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) + %t122 = load ptr, ptr %t104 + %t123 = getelementptr inbounds %S.gen.Cleanup, ptr %t122, i64 %t120 + store %S.gen.Cleanup %t119, ptr %t123 + store i64 %t121, ptr %t105 + br label %endif3336 +endif3336: + %t124 = load ptr, ptr %a1 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic3345, label %ok3346 +panic3345: + call void @finch_panic(ptr @.str.2112, i64 1406, ptr @.str.2113) + unreachable +ok3346: + %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 10 + %t127 = load i64, ptr %a87 + %t128 = load { ptr, i64, i64 }, ptr %t126 + %t129 = extractvalue { ptr, i64, i64 } %t128, 1 + %t130 = icmp uge i64 %t127, %t129 + br i1 %t130, label %range3347, label %inrange3348 +range3347: + call void @finch_panic_index(ptr @.str.2114, i64 1406, i64 %t127, i64 %t129) + unreachable +inrange3348: + %t131 = extractvalue { ptr, i64, i64 } %t128, 0 + %t132 = getelementptr inbounds %S.gen.Scope, ptr %t131, i64 %t127 + %t133 = getelementptr inbounds %S.gen.Scope, ptr %t132, i32 0, i32 0 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_copy(ptr %a137, ptr %a136) + %t138 = load { ptr, i64, i64 }, ptr %a137 + %t139 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } %t138, 0 + %t140 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t140, ptr %a141 + call void @finch.copy.S_ast_Type(ptr %a142, ptr %a141) + %t143 = load %S.ast.Type, ptr %a142 + %t144 = insertvalue %S.gen.Var %t139, %S.ast.Type %t143, 1 + %t145 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t145, ptr %a146 + call void @finch_str_copy(ptr %a147, ptr %a146) + %t148 = load { ptr, i64, i64 }, ptr %a147 + %t149 = insertvalue %S.gen.Var %t144, { ptr, i64, i64 } %t148, 2 + %t150 = load i1, ptr %a6 + %t151 = insertvalue %S.gen.Var %t149, i1 %t150, 3 + %t152 = load ptr, ptr %a1 + %t153 = icmp eq ptr %t152, null + br i1 %t153, label %panic3349, label %ok3350 +panic3349: + call void @finch_panic(ptr @.str.2115, i64 1406, ptr @.str.2116) + unreachable +ok3350: + %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 25 + %t155 = load i64, ptr %t154 + %t156 = insertvalue %S.gen.Var %t151, i64 %t155, 4 + %t157 = load i1, ptr %a93 + %t158 = insertvalue %S.gen.Var %t156, i1 %t157, 5 + %t159 = load ptr, ptr %a1 + %t160 = icmp eq ptr %t159, null + br i1 %t160, label %panic3351, label %ok3352 +panic3351: + call void @finch_panic(ptr @.str.2117, i64 1406, ptr @.str.2118) + unreachable +ok3352: + %t161 = getelementptr inbounds %S.gen.Gen, ptr %t159, i32 0, i32 1 + %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t163 = load i64, ptr %t162 + %t164 = load { ptr, i64, i64 }, ptr %t161 + %t165 = extractvalue { ptr, i64, i64 } %t164, 1 + %t166 = icmp uge i64 %t163, %t165 + br i1 %t166, label %range3353, label %inrange3354 +range3353: + call void @finch_panic_index(ptr @.str.2119, i64 1406, i64 %t163, i64 %t165) + unreachable +inrange3354: + %t167 = extractvalue { ptr, i64, i64 } %t164, 0 + %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i64 %t163 + %t169 = load { ptr, i64, i64 }, ptr %t168 + store { ptr, i64, i64 } %t169, ptr %a170 + call void @finch_str_copy(ptr %a171, ptr %a170) + %t172 = load { ptr, i64, i64 }, ptr %a171 + %t173 = insertvalue %S.gen.Var %t158, { ptr, i64, i64 } %t172, 7 + %t174 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t175 = load i64, ptr %t174 + %t176 = insertvalue %S.gen.Var %t173, i64 %t175, 8 + %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t178 = load i64, ptr %t177 + %t179 = insertvalue %S.gen.Var %t176, i64 %t178, 9 + %t180 = load i64, ptr %t134 + %t181 = add i64 %t180, 1 + call void @finch_arr_reserve(ptr %t133, i64 %t181, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) + %t182 = load ptr, ptr %t133 + %t183 = getelementptr inbounds %S.gen.Var, ptr %t182, i64 %t180 + store %S.gen.Var %t179, ptr %t183 + store i64 %t181, ptr %t134 + %t184 = load ptr, ptr %a1 + %t185 = icmp eq ptr %t184, null + br i1 %t185, label %panic3355, label %ok3356 +panic3355: + call void @finch_panic(ptr @.str.2120, i64 1407, ptr @.str.2121) + unreachable +ok3356: + %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 25 + %t187 = load i64, ptr %t186 + %t188 = add i64 %t187, 1 + store i64 %t188, ptr %t186 + %t189 = load ptr, ptr %a1 + %t190 = load %S.ast.Node, ptr %a2 + %t191 = load { ptr, i64, i64 }, ptr %a3 + %t192 = load %S.ast.Type, ptr %a4 + %t193 = load { ptr, i64, i64 }, ptr %a73 + call void @finch.gen.dbgVariable(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t191, %S.ast.Type %t192, { ptr, i64, i64 } %t193) + %t194 = load ptr, ptr %a1 + %t195 = icmp eq ptr %t194, null + br i1 %t195, label %panic3357, label %ok3358 +panic3357: + call void @finch_panic(ptr @.str.2122, i64 1409, ptr @.str.2123) + unreachable +ok3358: + %t196 = getelementptr inbounds %S.gen.Gen, ptr %t194, i32 0, i32 28 + %t197 = load i1, ptr %t196 + br label %logic.from3359 +logic.from3359: + br i1 %t197, label %logic.rhs3360, label %logic.end3361 +logic.rhs3360: + %t198 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t198, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.2124, i64 3, i64 0 }, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp eq i32 %t201, 0 + br label %logic.rend3362 +logic.rend3362: + br label %logic.end3361 +logic.end3361: + %t203 = phi i1 [ false, %logic.from3359 ], [ %t202, %logic.rend3362 ] + br label %logic.from3363 +logic.from3363: + br i1 %t203, label %logic.rhs3364, label %logic.end3365 +logic.rhs3364: + %t204 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t204, ptr %a205 + store { ptr, i64, i64 } { ptr @.str.2126, i64 1, i64 0 }, ptr %a207 + %t208 = call i32 @finch_str_starts(ptr %a205, ptr %a207) + %t209 = icmp ne i32 %t208, 0 + %t210 = xor i1 %t209, true + br label %logic.rend3366 +logic.rend3366: + br label %logic.end3365 +logic.end3365: + %t211 = phi i1 [ false, %logic.from3363 ], [ %t210, %logic.rend3366 ] + br i1 %t211, label %then3367, label %endif3369 +then3367: + %t212 = load ptr, ptr %a1 + %t213 = icmp eq ptr %t212, null + br i1 %t213, label %panic3370, label %ok3371 +panic3370: + call void @finch_panic(ptr @.str.2127, i64 1410, ptr @.str.2128) + unreachable +ok3371: + %t214 = getelementptr inbounds %S.gen.Gen, ptr %t212, i32 0, i32 0 + %t215 = load ptr, ptr %a1 + %t216 = icmp eq ptr %t215, null + br i1 %t216, label %panic3372, label %ok3373 +panic3372: + call void @finch_panic(ptr @.str.2129, i64 1410, ptr @.str.2130) + unreachable +ok3373: + %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 13 + %t218 = getelementptr inbounds %S.gen.FnSig, ptr %t217, i32 0, i32 16 + %t219 = load i64, ptr %t218 + %t220 = load { ptr, i64, i64 }, ptr %t214 + %t221 = extractvalue { ptr, i64, i64 } %t220, 1 + %t222 = icmp uge i64 %t219, %t221 + br i1 %t222, label %range3374, label %inrange3375 +range3374: + call void @finch_panic_index(ptr @.str.2131, i64 1410, i64 %t219, i64 %t221) + unreachable +inrange3375: + %t223 = extractvalue { ptr, i64, i64 } %t220, 0 + %t224 = getelementptr inbounds %S.ast.Program, ptr %t223, i64 %t219 + %t225 = getelementptr inbounds %S.ast.Program, ptr %t224, i32 0, i32 8 + %t226 = load ptr, ptr %a1 + %t227 = icmp eq ptr %t226, null + br i1 %t227, label %panic3376, label %ok3377 +panic3376: + call void @finch_panic(ptr @.str.2132, i64 1410, ptr @.str.2133) + unreachable +ok3377: + %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 13 + %t229 = getelementptr inbounds %S.gen.FnSig, ptr %t228, i32 0, i32 17 + %t230 = load i64, ptr %t229 + %t231 = load { ptr, i64, i64 }, ptr %t225 + %t232 = extractvalue { ptr, i64, i64 } %t231, 1 + %t233 = icmp uge i64 %t230, %t232 + br i1 %t233, label %range3378, label %inrange3379 +range3378: + call void @finch_panic_index(ptr @.str.2134, i64 1410, i64 %t230, i64 %t232) + unreachable +inrange3379: + %t234 = extractvalue { ptr, i64, i64 } %t231, 0 + %t235 = getelementptr inbounds %S.ast.Node, ptr %t234, i64 %t230 + %t236 = load %S.ast.Node, ptr %t235 + store %S.ast.Node %t236, ptr %a237 + call void @finch.copy.S_ast_Node(ptr %a238, ptr %a237) + %t239 = load %S.ast.Node, ptr %a238 + store %S.ast.Node %t239, ptr %a240 + %t241 = load ptr, ptr %a1 + %t242 = icmp eq ptr %t241, null + br i1 %t242, label %panic3380, label %ok3381 +panic3380: + call void @finch_panic(ptr @.str.2135, i64 1411, ptr @.str.2136) + unreachable +ok3381: + %t243 = getelementptr inbounds %S.gen.Gen, ptr %t241, i32 0, i32 29 + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 + %t245 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2137, i64 3, i64 0 }, ptr %a247 + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + %t249 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t249, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.2138, i64 1, i64 0 }, ptr %a252 + call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) + store { ptr, i64, i64 } %t249, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a250 + %t255 = load %S.ast.Type, ptr %a4 + %t256 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t255) + store { ptr, i64, i64 } %t254, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t254, ptr %a260 + call void @finch_str_drop(ptr %a260) + store { ptr, i64, i64 } %t256, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t262, ptr %a264 + store { ptr, i64, i64 } { ptr @.str.2139, i64 1, i64 0 }, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + store { ptr, i64, i64 } %t262, ptr %a266 + call void @finch_str_drop(ptr %a266) + %t267 = load { ptr, i64, i64 }, ptr %a263 + %t268 = load ptr, ptr %a1 + %t269 = icmp eq ptr %t268, null + br i1 %t269, label %panic3382, label %ok3383 +panic3382: + call void @finch_panic(ptr @.str.2140, i64 1411, ptr @.str.2141) + unreachable +ok3383: + %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 1 + %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t272 = load i64, ptr %t271 + %t273 = load { ptr, i64, i64 }, ptr %t270 + %t274 = extractvalue { ptr, i64, i64 } %t273, 1 + %t275 = icmp uge i64 %t272, %t274 + br i1 %t275, label %range3384, label %inrange3385 +range3384: + call void @finch_panic_index(ptr @.str.2142, i64 1411, i64 %t272, i64 %t274) + unreachable +inrange3385: + %t276 = extractvalue { ptr, i64, i64 } %t273, 0 + %t277 = getelementptr inbounds { ptr, i64, i64 }, ptr %t276, i64 %t272 + %t278 = load { ptr, i64, i64 }, ptr %t277 + store { ptr, i64, i64 } %t267, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t267, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t283, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.2143, i64 1, i64 0 }, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t290 = load i64, ptr %t289 + call void @finch_str_from_int(ptr %a291, i64 %t290) + %t292 = load { ptr, i64, i64 }, ptr %a291 + store { ptr, i64, i64 } %t288, ptr %a294 + store { ptr, i64, i64 } %t292, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t288, ptr %a296 + call void @finch_str_drop(ptr %a296) + store { ptr, i64, i64 } %t292, ptr %a297 + call void @finch_str_drop(ptr %a297) + %t298 = load { ptr, i64, i64 }, ptr %a293 + store { ptr, i64, i64 } %t298, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.2144, i64 1, i64 0 }, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t298, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + %t304 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t305 = load i64, ptr %t304 + call void @finch_str_from_int(ptr %a306, i64 %t305) + %t307 = load { ptr, i64, i64 }, ptr %a306 + store { ptr, i64, i64 } %t303, ptr %a309 + store { ptr, i64, i64 } %t307, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t303, ptr %a311 + call void @finch_str_drop(ptr %a311) + store { ptr, i64, i64 } %t307, ptr %a312 + call void @finch_str_drop(ptr %a312) + %t313 = load { ptr, i64, i64 }, ptr %a308 + store { ptr, i64, i64 } %t313, ptr %a315 + store { ptr, i64, i64 } { ptr @.str.2145, i64 1, i64 0 }, ptr %a316 + call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) + store { ptr, i64, i64 } %t313, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load { ptr, i64, i64 }, ptr %a314 + %t319 = load ptr, ptr %a1 + %t320 = icmp eq ptr %t319, null + br i1 %t320, label %panic3386, label %ok3387 +panic3386: + call void @finch_panic(ptr @.str.2146, i64 1411, ptr @.str.2147) + unreachable +ok3387: + %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 1 + %t322 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 13 + %t323 = load i64, ptr %t322 + %t324 = load { ptr, i64, i64 }, ptr %t321 + %t325 = extractvalue { ptr, i64, i64 } %t324, 1 + %t326 = icmp uge i64 %t323, %t325 + br i1 %t326, label %range3388, label %inrange3389 +range3388: + call void @finch_panic_index(ptr @.str.2148, i64 1411, i64 %t323, i64 %t325) + unreachable +inrange3389: + %t327 = extractvalue { ptr, i64, i64 } %t324, 0 + %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i64 %t323 + %t329 = load { ptr, i64, i64 }, ptr %t328 + store { ptr, i64, i64 } %t318, ptr %a331 + store { ptr, i64, i64 } %t329, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + store { ptr, i64, i64 } %t318, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = load { ptr, i64, i64 }, ptr %a330 + store { ptr, i64, i64 } %t334, ptr %a336 + store { ptr, i64, i64 } { ptr @.str.2149, i64 1, i64 0 }, ptr %a337 + call void @finch_str_concat(ptr %a335, ptr %a336, ptr %a337) + store { ptr, i64, i64 } %t334, ptr %a338 + call void @finch_str_drop(ptr %a338) + %t339 = load { ptr, i64, i64 }, ptr %a335 + %t340 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 11 + %t341 = load i64, ptr %t340 + call void @finch_str_from_int(ptr %a342, i64 %t341) + %t343 = load { ptr, i64, i64 }, ptr %a342 + store { ptr, i64, i64 } %t339, ptr %a345 + store { ptr, i64, i64 } %t343, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t339, ptr %a347 + call void @finch_str_drop(ptr %a347) + store { ptr, i64, i64 } %t343, ptr %a348 + call void @finch_str_drop(ptr %a348) + %t349 = load { ptr, i64, i64 }, ptr %a344 + store { ptr, i64, i64 } %t349, ptr %a351 + store { ptr, i64, i64 } { ptr @.str.2150, i64 1, i64 0 }, ptr %a352 + call void @finch_str_concat(ptr %a350, ptr %a351, ptr %a352) + store { ptr, i64, i64 } %t349, ptr %a353 + call void @finch_str_drop(ptr %a353) + %t354 = load { ptr, i64, i64 }, ptr %a350 + %t355 = getelementptr inbounds %S.ast.Node, ptr %a240, i32 0, i32 14 + %t356 = load i64, ptr %t355 + call void @finch_str_from_int(ptr %a357, i64 %t356) + %t358 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t354, ptr %a360 + store { ptr, i64, i64 } %t358, ptr %a361 + call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) + store { ptr, i64, i64 } %t354, ptr %a362 + call void @finch_str_drop(ptr %a362) + store { ptr, i64, i64 } %t358, ptr %a363 + call void @finch_str_drop(ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a359 + %t365 = load i64, ptr %t244 + %t366 = add i64 %t365, 1 + call void @finch_arr_reserve(ptr %t243, i64 %t366, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t367 = load ptr, ptr %t243 + %t368 = getelementptr inbounds { ptr, i64, i64 }, ptr %t367, i64 %t365 + store { ptr, i64, i64 } %t364, ptr %t368 + store i64 %t366, ptr %t244 + %t369 = load ptr, ptr %a1 + %t370 = load %S.ast.Node, ptr %a2 + %t371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t372 = load i64, ptr %t371 + %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t374 = load i64, ptr %t373 + %t375 = load %S.ast.Type, ptr %a4 + %t376 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t375) + store { ptr, i64, i64 } { ptr @.str.2151, i64 9, i64 0 }, ptr %a378 + store { ptr, i64, i64 } %t376, ptr %a379 + call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) + store { ptr, i64, i64 } %t376, ptr %a380 + call void @finch_str_drop(ptr %a380) + %t381 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t381, ptr %a383 + store { ptr, i64, i64 } { ptr @.str.2152, i64 1, i64 0 }, ptr %a384 + call void @finch_str_concat(ptr %a382, ptr %a383, ptr %a384) + store { ptr, i64, i64 } %t381, ptr %a385 + call void @finch_str_drop(ptr %a385) + %t386 = load { ptr, i64, i64 }, ptr %a382 + %t387 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t386, ptr %a389 + store { ptr, i64, i64 } %t387, ptr %a390 + call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) + store { ptr, i64, i64 } %t386, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a388 + store { ptr, i64, i64 } %t392, ptr %a394 + store { ptr, i64, i64 } { ptr @.str.2153, i64 4, i64 0 }, ptr %a395 + call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) + store { ptr, i64, i64 } %t392, ptr %a396 + call void @finch_str_drop(ptr %a396) + %t397 = load { ptr, i64, i64 }, ptr %a393 + call void @finch.gen.noteRef(ptr %t369, %S.ast.Node %t370, i64 %t372, i64 %t374, { ptr, i64, i64 } %t397, { ptr, i64, i64 } { ptr @.str.2154, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t397, ptr %a398 + call void @finch_str_drop(ptr %a398) + call void @finch.drop.S_ast_Node(ptr %a240) + br label %endif3369 +endif3369: + %t399 = load { ptr, i64, i64 }, ptr %a73 + ret { ptr, i64, i64 } %t399 +} + +define internal void @finch.gen.pushScope(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic3390, label %ok3391 +panic3390: + call void @finch_panic(ptr @.str.2155, i64 1418, ptr @.str.2156) + unreachable +ok3391: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 10 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = add i64 %t6, 1 + call void @finch_arr_reserve(ptr %t4, i64 %t7, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) + %t8 = load ptr, ptr %t4 + %t9 = getelementptr inbounds %S.gen.Scope, ptr %t8, i64 %t6 + store %S.gen.Scope zeroinitializer, ptr %t9 + store i64 %t7, ptr %t5 + ret void +} + +define internal void @finch.drop.S_gen_Var(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Var, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_S_gen_Var(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond3403 +n.cond3403: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body3404, label %n.end3405 +n.body3404: + %t7 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Var(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond3403 +n.end3405: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_Cleanup(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Scope(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_gen_Var(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_ast_Node(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_int(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Scope, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_S_gen_Cleanup(ptr %t4) + ret void +} + +define internal void @finch.gen.popScope(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a24 = alloca %S.gen.Scope, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic3392, label %ok3393 +panic3392: + call void @finch_panic(ptr @.str.2157, i64 1424, ptr @.str.2158) + unreachable +ok3393: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 9 + %t5 = load i1, ptr %t4 + %t6 = xor i1 %t5, true + br i1 %t6, label %then3394, label %endif3396 +then3394: + %t7 = load ptr, ptr %a1 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic3397, label %ok3398 +panic3397: + call void @finch_panic(ptr @.str.2159, i64 1425, ptr @.str.2160) + unreachable +ok3398: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = sub i64 %t12, 1 + call void @finch.gen.runCleanups(ptr %t7, i64 %t13) + br label %endif3396 +endif3396: + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic3399, label %ok3400 +panic3399: + call void @finch_panic(ptr @.str.2161, i64 1427, ptr @.str.2162) + unreachable +ok3400: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 10 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = icmp eq i64 %t18, 0 + br i1 %t19, label %panic3401, label %ok3402 +panic3401: + call void @finch_panic(ptr @.str.2163, i64 1427, ptr @.str.2164) + unreachable +ok3402: + %t20 = sub i64 %t18, 1 + %t21 = load ptr, ptr %t16 + %t22 = getelementptr inbounds %S.gen.Scope, ptr %t21, i64 %t20 + %t23 = load %S.gen.Scope, ptr %t22 + store i64 %t20, ptr %t17 + store %S.gen.Scope %t23, ptr %a24 + call void @finch.drop.S_gen_Scope(ptr %a24) + ret void +} + +define internal void @finch.gen.runCleanups(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a15 = alloca i64, align 16 + %a37 = alloca %S.gen.Cleanup, align 16 + %a59 = alloca %S.gen.Var, align 16 + %a60 = alloca %S.gen.Var, align 16 + %a62 = alloca %S.gen.Var, align 16 + %a75 = alloca i1, align 16 + %a80 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3406, label %ok3407 +panic3406: + call void @finch_panic(ptr @.str.2165, i64 1432, ptr @.str.2166) + unreachable +ok3407: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = load i64, ptr %a2 + %t7 = load { ptr, i64, i64 }, ptr %t5 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 %t6, %t8 + br i1 %t9, label %range3408, label %inrange3409 +range3408: + call void @finch_panic_index(ptr @.str.2167, i64 1432, i64 %t6, i64 %t8) + unreachable +inrange3409: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.gen.Scope, ptr %t10, i64 %t6 + %t12 = getelementptr inbounds %S.gen.Scope, ptr %t11, i32 0, i32 3 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + store i64 %t14, ptr %a15 + br label %while.cond3410 +while.cond3410: + %t16 = load i64, ptr %a15 + %t17 = icmp sgt i64 %t16, 0 + br i1 %t17, label %while.body3411, label %while.end3412 +while.body3411: + %t18 = load i64, ptr %a15 + %t19 = sub i64 %t18, 1 + store i64 %t19, ptr %a15 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic3413, label %ok3414 +panic3413: + call void @finch_panic(ptr @.str.2168, i64 1435, ptr @.str.2169) + unreachable +ok3414: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 10 + %t23 = load i64, ptr %a2 + %t24 = load { ptr, i64, i64 }, ptr %t22 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range3415, label %inrange3416 +range3415: + call void @finch_panic_index(ptr @.str.2170, i64 1435, i64 %t23, i64 %t25) + unreachable +inrange3416: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.gen.Scope, ptr %t27, i64 %t23 + %t29 = getelementptr inbounds %S.gen.Scope, ptr %t28, i32 0, i32 3 + %t30 = load i64, ptr %a15 + %t31 = load { ptr, i64, i64 }, ptr %t29 + %t32 = extractvalue { ptr, i64, i64 } %t31, 1 + %t33 = icmp uge i64 %t30, %t32 + br i1 %t33, label %range3417, label %inrange3418 +range3417: + call void @finch_panic_index(ptr @.str.2171, i64 1435, i64 %t30, i64 %t32) + unreachable +inrange3418: + %t34 = extractvalue { ptr, i64, i64 } %t31, 0 + %t35 = getelementptr inbounds %S.gen.Cleanup, ptr %t34, i64 %t30 + %t36 = load %S.gen.Cleanup, ptr %t35 + store %S.gen.Cleanup %t36, ptr %a37 + %t38 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 0 + %t39 = load i1, ptr %t38 + %t40 = xor i1 %t39, true + br i1 %t40, label %then3419, label %endif3421 +then3419: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic3422, label %ok3423 +panic3422: + call void @finch_panic(ptr @.str.2172, i64 1437, ptr @.str.2173) + unreachable +ok3423: + %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 10 + %t44 = load i64, ptr %a2 + %t45 = load { ptr, i64, i64 }, ptr %t43 + %t46 = extractvalue { ptr, i64, i64 } %t45, 1 + %t47 = icmp uge i64 %t44, %t46 + br i1 %t47, label %range3424, label %inrange3425 +range3424: + call void @finch_panic_index(ptr @.str.2174, i64 1437, i64 %t44, i64 %t46) + unreachable +inrange3425: + %t48 = extractvalue { ptr, i64, i64 } %t45, 0 + %t49 = getelementptr inbounds %S.gen.Scope, ptr %t48, i64 %t44 + %t50 = getelementptr inbounds %S.gen.Scope, ptr %t49, i32 0, i32 0 + %t51 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = load { ptr, i64, i64 }, ptr %t50 + %t54 = extractvalue { ptr, i64, i64 } %t53, 1 + %t55 = icmp uge i64 %t52, %t54 + br i1 %t55, label %range3426, label %inrange3427 +range3426: + call void @finch_panic_index(ptr @.str.2175, i64 1437, i64 %t52, i64 %t54) + unreachable +inrange3427: + %t56 = extractvalue { ptr, i64, i64 } %t53, 0 + %t57 = getelementptr inbounds %S.gen.Var, ptr %t56, i64 %t52 + %t58 = load %S.gen.Var, ptr %t57 + store %S.gen.Var %t58, ptr %a59 + call void @finch.copy.S_gen_Var(ptr %a60, ptr %a59) + %t61 = load %S.gen.Var, ptr %a60 + store %S.gen.Var %t61, ptr %a62 + %t63 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 6 + %t64 = load i1, ptr %t63 + %t65 = xor i1 %t64, true + br i1 %t65, label %then3428, label %endif3430 +then3428: + %t66 = load ptr, ptr %a1 + %t67 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 2 + %t68 = load { ptr, i64, i64 }, ptr %t67 + %t69 = getelementptr inbounds %S.gen.Var, ptr %a62, i32 0, i32 1 + %t70 = load %S.ast.Type, ptr %t69 + call void @finch.gen.dropAt(ptr %t66, { ptr, i64, i64 } %t68, %S.ast.Type %t70) + br label %endif3430 +endif3430: + call void @finch.drop.S_gen_Var(ptr %a62) + br label %while.cond3410 +endif3421: + %t71 = load ptr, ptr %a1 + %t72 = icmp eq ptr %t71, null + br i1 %t72, label %panic3431, label %ok3432 +panic3431: + call void @finch_panic(ptr @.str.2176, i64 1443, ptr @.str.2177) + unreachable +ok3432: + %t73 = getelementptr inbounds %S.gen.Gen, ptr %t71, i32 0, i32 44 + %t74 = load i1, ptr %t73 + store i1 %t74, ptr %a75 + %t76 = load ptr, ptr %a1 + %t77 = icmp eq ptr %t76, null + br i1 %t77, label %panic3433, label %ok3434 +panic3433: + call void @finch_panic(ptr @.str.2178, i64 1444, ptr @.str.2179) + unreachable +ok3434: + %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 45 + %t79 = load i64, ptr %t78 + store i64 %t79, ptr %a80 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic3435, label %ok3436 +panic3435: + call void @finch_panic(ptr @.str.2180, i64 1445, ptr @.str.2181) + unreachable +ok3436: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 44 + store i1 true, ptr %t83 + %t84 = load ptr, ptr %a1 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic3437, label %ok3438 +panic3437: + call void @finch_panic(ptr @.str.2182, i64 1446, ptr @.str.2183) + unreachable +ok3438: + %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 10 + %t87 = load i64, ptr %a2 + %t88 = load { ptr, i64, i64 }, ptr %t86 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 %t87, %t89 + br i1 %t90, label %range3439, label %inrange3440 +range3439: + call void @finch_panic_index(ptr @.str.2184, i64 1446, i64 %t87, i64 %t89) + unreachable +inrange3440: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds %S.gen.Scope, ptr %t91, i64 %t87 + %t93 = getelementptr inbounds %S.gen.Scope, ptr %t92, i32 0, i32 2 + %t94 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 + %t95 = load i64, ptr %t94 + %t96 = load { ptr, i64, i64 }, ptr %t93 + %t97 = extractvalue { ptr, i64, i64 } %t96, 1 + %t98 = icmp uge i64 %t95, %t97 + br i1 %t98, label %range3441, label %inrange3442 +range3441: + call void @finch_panic_index(ptr @.str.2185, i64 1446, i64 %t95, i64 %t97) + unreachable +inrange3442: + %t99 = extractvalue { ptr, i64, i64 } %t96, 0 + %t100 = getelementptr inbounds i64, ptr %t99, i64 %t95 + %t101 = load i64, ptr %t100 + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic3443, label %ok3444 +panic3443: + call void @finch_panic(ptr @.str.2186, i64 1446, ptr @.str.2187) + unreachable +ok3444: + %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 45 + store i64 %t101, ptr %t104 + %t105 = load ptr, ptr %a1 + %t106 = icmp eq ptr %t105, null + br i1 %t106, label %panic3445, label %ok3446 +panic3445: + call void @finch_panic(ptr @.str.2188, i64 1447, ptr @.str.2189) + unreachable +ok3446: + %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 46 + %t108 = load i64, ptr %t107 + %t109 = add i64 %t108, 1 + store i64 %t109, ptr %t107 + %t110 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t110) + %t111 = load ptr, ptr %a1 + %t112 = load ptr, ptr %a1 + %t113 = icmp eq ptr %t112, null + br i1 %t113, label %panic3447, label %ok3448 +panic3447: + call void @finch_panic(ptr @.str.2190, i64 1449, ptr @.str.2191) + unreachable +ok3448: + %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 10 + %t115 = load i64, ptr %a2 + %t116 = load { ptr, i64, i64 }, ptr %t114 + %t117 = extractvalue { ptr, i64, i64 } %t116, 1 + %t118 = icmp uge i64 %t115, %t117 + br i1 %t118, label %range3449, label %inrange3450 +range3449: + call void @finch_panic_index(ptr @.str.2192, i64 1449, i64 %t115, i64 %t117) + unreachable +inrange3450: + %t119 = extractvalue { ptr, i64, i64 } %t116, 0 + %t120 = getelementptr inbounds %S.gen.Scope, ptr %t119, i64 %t115 + %t121 = getelementptr inbounds %S.gen.Scope, ptr %t120, i32 0, i32 1 + %t122 = getelementptr inbounds %S.gen.Cleanup, ptr %a37, i32 0, i32 1 + %t123 = load i64, ptr %t122 + %t124 = load { ptr, i64, i64 }, ptr %t121 + %t125 = extractvalue { ptr, i64, i64 } %t124, 1 + %t126 = icmp uge i64 %t123, %t125 + br i1 %t126, label %range3451, label %inrange3452 +range3451: + call void @finch_panic_index(ptr @.str.2193, i64 1449, i64 %t123, i64 %t125) + unreachable +inrange3452: + %t127 = extractvalue { ptr, i64, i64 } %t124, 0 + %t128 = getelementptr inbounds %S.ast.Node, ptr %t127, i64 %t123 + %t129 = load %S.ast.Node, ptr %t128 + call void @finch.gen.stmt(ptr %t111, %S.ast.Node %t129) + %t130 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t130) + %t131 = load ptr, ptr %a1 + %t132 = icmp eq ptr %t131, null + br i1 %t132, label %panic3453, label %ok3454 +panic3453: + call void @finch_panic(ptr @.str.2194, i64 1451, ptr @.str.2195) + unreachable +ok3454: + %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 46 + %t134 = load i64, ptr %t133 + %t135 = sub i64 %t134, 1 + store i64 %t135, ptr %t133 + %t136 = load i1, ptr %a75 + %t137 = load ptr, ptr %a1 + %t138 = icmp eq ptr %t137, null + br i1 %t138, label %panic3455, label %ok3456 +panic3455: + call void @finch_panic(ptr @.str.2196, i64 1452, ptr @.str.2197) + unreachable +ok3456: + %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 44 + store i1 %t136, ptr %t139 + %t140 = load i64, ptr %a80 + %t141 = load ptr, ptr %a1 + %t142 = icmp eq ptr %t141, null + br i1 %t142, label %panic3457, label %ok3458 +panic3457: + call void @finch_panic(ptr @.str.2198, i64 1453, ptr @.str.2199) + unreachable +ok3458: + %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 45 + store i64 %t140, ptr %t143 + br label %while.cond3410 +while.end3412: + ret void +} + +define internal void @finch.gen.unwind(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a8 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic3459, label %ok3460 +panic3459: + call void @finch_panic(ptr @.str.2200, i64 1459, ptr @.str.2201) + unreachable +ok3460: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 10 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 %t7, ptr %a8 + br label %while.cond3461 +while.cond3461: + %t9 = load i64, ptr %a8 + %t10 = load i64, ptr %a2 + %t11 = icmp sgt i64 %t9, %t10 + br i1 %t11, label %while.body3462, label %while.end3463 +while.body3462: + %t12 = load i64, ptr %a8 + %t13 = sub i64 %t12, 1 + store i64 %t13, ptr %a8 + %t14 = load ptr, ptr %a1 + %t15 = load i64, ptr %a8 + call void @finch.gen.runCleanups(ptr %t14, i64 %t15) + br label %while.cond3461 +while.end3463: + ret void +} + +define internal void @finch.gen.endScope(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t2) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.2202, i64 3, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then3464, label %endif3466 +then3464: + %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 1 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + ret { ptr, i64, i64 } %t12 +endif3466: + %t13 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.2203, i64 6, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.from3467 +logic.from3467: + br i1 %t18, label %logic.end3469, label %logic.rhs3468 +logic.rhs3468: + %t19 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.2204, i64 5, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br label %logic.rend3470 +logic.rend3470: + br label %logic.end3469 +logic.end3469: + %t25 = phi i1 [ true, %logic.from3467 ], [ %t24, %logic.rend3470 ] + br i1 %t25, label %then3471, label %endif3473 +then3471: + %t26 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 + %t27 = load { ptr, i64, i64 }, ptr %t26 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 0, %t28 + br i1 %t29, label %range3474, label %inrange3475 +range3474: + call void @finch_panic_index(ptr @.str.2205, i64 1477, i64 0, i64 %t28) + unreachable +inrange3475: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds %S.ast.Node, ptr %t30, i64 0 + %t32 = load %S.ast.Node, ptr %t31 + %t33 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t32) + ret { ptr, i64, i64 } %t33 +endif3473: + ret { ptr, i64, i64 } { ptr @.str.2206, i64 0, i64 0 } +} + +define internal i1 @finch.gen.mutates(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i64, align 16 + %a51 = alloca i64, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca i64, align 16 + %a72 = alloca i64, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca i64, align 16 + %a143 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t5 = call ptr @finch_alloc(i64 %t4) + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 0 + store { ptr, i64, i64 } { ptr @.str.2207, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 1 + store { ptr, i64, i64 } { ptr @.str.2208, i64 3, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 2 + store { ptr, i64, i64 } { ptr @.str.2209, i64 6, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 3 + store { ptr, i64, i64 } { ptr @.str.2210, i64 6, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 4 + store { ptr, i64, i64 } { ptr @.str.2211, i64 5, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 5 + store { ptr, i64, i64 } { ptr @.str.2212, i64 6, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 6 + store { ptr, i64, i64 } { ptr @.str.2213, i64 4, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 7 + store { ptr, i64, i64 } { ptr @.str.2214, i64 7, i64 0 }, ptr %t13 + %t14 = insertvalue { ptr, i64, i64 } undef, ptr %t5, 0 + %t15 = insertvalue { ptr, i64, i64 } %t14, i64 8, 1 + %t16 = insertvalue { ptr, i64, i64 } %t15, i64 8, 2 + store { ptr, i64, i64 } %t16, ptr %a17 + %t18 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.2215, i64 6, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.from3476 +logic.from3476: + br i1 %t23, label %logic.rhs3477, label %logic.end3478 +logic.rhs3477: + %t24 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t25 = load { ptr, i64, i64 }, ptr %t24 + %t26 = extractvalue { ptr, i64, i64 } %t25, 1 + %t27 = icmp uge i64 0, %t26 + br i1 %t27, label %range3479, label %inrange3480 +range3479: + call void @finch_panic_index(ptr @.str.2216, i64 1484, i64 0, i64 %t26) + unreachable +inrange3480: + %t28 = extractvalue { ptr, i64, i64 } %t25, 0 + %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 + %t30 = load %S.ast.Node, ptr %t29 + %t31 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t30) + %t32 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t31, ptr %a33 + store { ptr, i64, i64 } %t32, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + store { ptr, i64, i64 } %t31, ptr %a37 + call void @finch_str_drop(ptr %a37) + br label %logic.rend3481 +logic.rend3481: + br label %logic.end3478 +logic.end3478: + %t38 = phi i1 [ false, %logic.from3476 ], [ %t36, %logic.rend3481 ] + br i1 %t38, label %then3482, label %endif3484 +then3482: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3484: + %t39 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.2217, i64 6, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br label %logic.from3485 +logic.from3485: + br i1 %t44, label %logic.rhs3486, label %logic.end3487 +logic.rhs3486: + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a17, i32 0, i32 1 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store i64 -1, ptr %a48 + %t49 = load i64, ptr %t45 + %t50 = load ptr, ptr %a17 + store i64 0, ptr %a51 + br label %find.cond3488 +find.cond3488: + %t52 = load i64, ptr %a51 + %t53 = icmp slt i64 %t52, %t49 + br i1 %t53, label %find.body3489, label %find.end3492 +find.body3489: + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 + %t55 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t55, ptr %a56 + store { ptr, i64, i64 } %t47, ptr %a57 + %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) + %t59 = icmp ne i32 %t58, 0 + br i1 %t59, label %find.hit3490, label %find.next3491 +find.hit3490: + store i64 %t52, ptr %a48 + br label %find.end3492 +find.next3491: + %t60 = add i64 %t52, 1 + store i64 %t60, ptr %a51 + br label %find.cond3488 +find.end3492: + %t61 = load i64, ptr %a48 + %t62 = icmp sge i64 %t61, 0 + br label %logic.from3493 +logic.from3493: + br i1 %t62, label %logic.end3495, label %logic.rhs3494 +logic.rhs3494: + %t63 = load ptr, ptr %a1 + %t64 = icmp eq ptr %t63, null + br i1 %t64, label %panic3496, label %ok3497 +panic3496: + call void @finch_panic(ptr @.str.2218, i64 1490, ptr @.str.2219) + unreachable +ok3497: + %t65 = getelementptr inbounds %S.gen.Gen, ptr %t63, i32 0, i32 24 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i32 0, i32 1 + %t67 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 + %t68 = load { ptr, i64, i64 }, ptr %t67 + store i64 -1, ptr %a69 + %t70 = load i64, ptr %t66 + %t71 = load ptr, ptr %t65 + store i64 0, ptr %a72 + br label %find.cond3498 +find.cond3498: + %t73 = load i64, ptr %a72 + %t74 = icmp slt i64 %t73, %t70 + br i1 %t74, label %find.body3499, label %find.end3502 +find.body3499: + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i64 %t73 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } %t76, ptr %a77 + store { ptr, i64, i64 } %t68, ptr %a78 + %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) + %t80 = icmp ne i32 %t79, 0 + br i1 %t80, label %find.hit3500, label %find.next3501 +find.hit3500: + store i64 %t73, ptr %a69 + br label %find.end3502 +find.next3501: + %t81 = add i64 %t73, 1 + store i64 %t81, ptr %a72 + br label %find.cond3498 +find.end3502: + %t82 = load i64, ptr %a69 + %t83 = icmp sge i64 %t82, 0 + br label %logic.rend3503 +logic.rend3503: + br label %logic.end3495 +logic.end3495: + %t84 = phi i1 [ true, %logic.from3493 ], [ %t83, %logic.rend3503 ] + br label %logic.rend3504 +logic.rend3504: + br label %logic.end3487 +logic.end3487: + %t85 = phi i1 [ false, %logic.from3485 ], [ %t84, %logic.rend3504 ] + br label %logic.from3505 +logic.from3505: + br i1 %t85, label %logic.rhs3506, label %logic.end3507 +logic.rhs3506: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t87 = load { ptr, i64, i64 }, ptr %t86 + %t88 = extractvalue { ptr, i64, i64 } %t87, 1 + %t89 = icmp uge i64 0, %t88 + br i1 %t89, label %range3508, label %inrange3509 +range3508: + call void @finch_panic_index(ptr @.str.2220, i64 1490, i64 0, i64 %t88) + unreachable +inrange3509: + %t90 = extractvalue { ptr, i64, i64 } %t87, 0 + %t91 = getelementptr inbounds %S.ast.Node, ptr %t90, i64 0 + %t92 = load %S.ast.Node, ptr %t91 + %t93 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t92) + %t94 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } %t94, ptr %a96 + %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) + %t98 = icmp ne i32 %t97, 0 + store { ptr, i64, i64 } %t93, ptr %a99 + call void @finch_str_drop(ptr %a99) + br label %logic.rend3510 +logic.rend3510: + br label %logic.end3507 +logic.end3507: + %t100 = phi i1 [ false, %logic.from3505 ], [ %t98, %logic.rend3510 ] + br i1 %t100, label %then3511, label %endif3513 +then3511: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3513: + %t101 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 0 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.2221, i64 4, i64 0 }, ptr %a104 + %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) + %t106 = icmp ne i32 %t105, 0 + br label %logic.from3514 +logic.from3514: + br i1 %t106, label %logic.rhs3515, label %logic.end3516 +logic.rhs3515: + %t107 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 1 + %t108 = load { ptr, i64, i64 }, ptr %t107 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2222, i64 4, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br label %logic.rend3517 +logic.rend3517: + br label %logic.end3516 +logic.end3516: + %t113 = phi i1 [ false, %logic.from3514 ], [ %t112, %logic.rend3517 ] + br label %logic.from3518 +logic.from3518: + br i1 %t113, label %logic.rhs3519, label %logic.end3520 +logic.rhs3519: + %t114 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp eq i64 %t116, 1 + br label %logic.rend3521 +logic.rend3521: + br label %logic.end3520 +logic.end3520: + %t118 = phi i1 [ false, %logic.from3518 ], [ %t117, %logic.rend3521 ] + br label %logic.from3522 +logic.from3522: + br i1 %t118, label %logic.rhs3523, label %logic.end3524 +logic.rhs3523: + %t119 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t120 = load { ptr, i64, i64 }, ptr %t119 + %t121 = extractvalue { ptr, i64, i64 } %t120, 1 + %t122 = icmp uge i64 0, %t121 + br i1 %t122, label %range3525, label %inrange3526 +range3525: + call void @finch_panic_index(ptr @.str.2223, i64 1493, i64 0, i64 %t121) + unreachable +inrange3526: + %t123 = extractvalue { ptr, i64, i64 } %t120, 0 + %t124 = getelementptr inbounds %S.ast.Node, ptr %t123, i64 0 + %t125 = load %S.ast.Node, ptr %t124 + %t126 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t125) + %t127 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t126, ptr %a128 + store { ptr, i64, i64 } %t127, ptr %a129 + %t130 = call i32 @finch_str_eq(ptr %a128, ptr %a129) + %t131 = icmp ne i32 %t130, 0 + store { ptr, i64, i64 } %t126, ptr %a132 + call void @finch_str_drop(ptr %a132) + br label %logic.rend3527 +logic.rend3527: + br label %logic.end3524 +logic.end3524: + %t133 = phi i1 [ false, %logic.from3522 ], [ %t131, %logic.rend3527 ] + br i1 %t133, label %then3528, label %endif3530 +then3528: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3530: + %t134 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + store i64 0, ptr %a135 + br label %each.cond3531 +each.cond3531: + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 + %t137 = load i64, ptr %t136 + %t138 = load i64, ptr %a135 + %t139 = icmp slt i64 %t138, %t137 + br i1 %t139, label %each.body3532, label %each.end3534 +each.body3532: + %t140 = load ptr, ptr %t134 + %t141 = getelementptr inbounds %S.ast.Node, ptr %t140, i64 %t138 + %t142 = load %S.ast.Node, ptr %t141 + store %S.ast.Node %t142, ptr %a143 + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a2 + %t146 = load %S.ast.Node, ptr %a143 + %t147 = call i1 @finch.gen.mutates(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Node %t146) + br i1 %t147, label %then3535, label %endif3537 +then3535: + call void @finch.drop.arr_str(ptr %a17) + ret i1 true +endif3537: + br label %each.step3533 +each.step3533: + %t148 = load i64, ptr %a135 + %t149 = add i64 %t148, 1 + store i64 %t149, ptr %a135 + br label %each.cond3531 +each.end3534: + call void @finch.drop.arr_str(ptr %a17) + ret i1 false +} + +define internal void @finch.gen.declare(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a7 = alloca i64, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca i64, align 16 + %a61 = alloca %S.ast.Node, align 16 + %a62 = alloca %S.ast.Node, align 16 + %a64 = alloca %S.ast.Node, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca i64, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca i64, align 16 + %a224 = alloca %S.ast.Node, align 16 + %a225 = alloca %S.ast.Node, align 16 + %a227 = alloca %S.ast.Node, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca %S.gen.SumDef, align 16 + %a278 = alloca i64, align 16 + %a280 = alloca i64, align 16 + %a288 = alloca %S.ast.Node, align 16 + %a293 = alloca i64, align 16 + %a296 = alloca i64, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca %S.gen.SumDef, align 16 + %a374 = alloca %S.gen.SumDef, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca %S.gen.EnumDef, align 16 + %a428 = alloca i64, align 16 + %a430 = alloca i64, align 16 + %a438 = alloca %S.ast.Node, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca i64, align 16 + %a454 = alloca i64, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca i64, align 16 + %a498 = alloca i64, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca %S.gen.EnumDef, align 16 + %a563 = alloca %S.gen.EnumDef, align 16 + %a579 = alloca i64, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca i64, align 16 + %a629 = alloca i64, align 16 + %a646 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a663 = alloca i64, align 16 + %a683 = alloca %S.ast.Node, align 16 + %a684 = alloca %S.ast.Node, align 16 + %a686 = alloca %S.ast.Node, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a712 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a743 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca i1, align 16 + %a817 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a823 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca i64, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a878 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a896 = alloca { ptr, i64, i64 }, align 16 + %a898 = alloca { ptr, i64, i64 }, align 16 + %a899 = alloca { ptr, i64, i64 }, align 16 + %a900 = alloca { ptr, i64, i64 }, align 16 + %a901 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a907 = alloca { ptr, i64, i64 }, align 16 + %a908 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a911 = alloca { ptr, i64, i64 }, align 16 + %a912 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a915 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca i64, align 16 + %a932 = alloca i64, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a949 = alloca { ptr, i64, i64 }, align 16 + %a950 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a955 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a964 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a966 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a969 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a984 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a987 = alloca { ptr, i64, i64 }, align 16 + %a988 = alloca { ptr, i64, i64 }, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a992 = alloca { ptr, i64, i64 }, align 16 + %a1000 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1002 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1005 = alloca { ptr, i64, i64 }, align 16 + %a1006 = alloca { ptr, i64, i64 }, align 16 + %a1007 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1015 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1027 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1032 = alloca { ptr, i64, i64 }, align 16 + %a1047 = alloca %S.gen.FnSig, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1054 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1058 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1060 = alloca { ptr, i64, i64 }, align 16 + %a1061 = alloca { ptr, i64, i64 }, align 16 + %a1065 = alloca { ptr, i64, i64 }, align 16 + %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 + %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1085 = alloca { ptr, i64, i64 }, align 16 + %a1087 = alloca { ptr, i64, i64 }, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca { ptr, i64, i64 }, align 16 + %a1090 = alloca { ptr, i64, i64 }, align 16 + %a1094 = alloca { ptr, i64, i64 }, align 16 + %a1095 = alloca { ptr, i64, i64 }, align 16 + %a1096 = alloca { ptr, i64, i64 }, align 16 + %a1097 = alloca { ptr, i64, i64 }, align 16 + %a1099 = alloca { ptr, i64, i64 }, align 16 + %a1100 = alloca { ptr, i64, i64 }, align 16 + %a1101 = alloca { ptr, i64, i64 }, align 16 + %a1102 = alloca { ptr, i64, i64 }, align 16 + %a1106 = alloca { ptr, i64, i64 }, align 16 + %a1107 = alloca { ptr, i64, i64 }, align 16 + %a1108 = alloca { ptr, i64, i64 }, align 16 + %a1109 = alloca { ptr, i64, i64 }, align 16 + %a1113 = alloca { ptr, i64, i64 }, align 16 + %a1121 = alloca %S.ast.Type, align 16 + %a1126 = alloca i64, align 16 + %a1138 = alloca { ptr, i64, i64 }, align 16 + %a1139 = alloca { ptr, i64, i64 }, align 16 + %a1158 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca { ptr, i64, i64 }, align 16 + %a1160 = alloca { ptr, i64, i64 }, align 16 + %a1162 = alloca { ptr, i64, i64 }, align 16 + %a1163 = alloca { ptr, i64, i64 }, align 16 + %a1164 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca { ptr, i64, i64 }, align 16 + %a1167 = alloca { ptr, i64, i64 }, align 16 + %a1204 = alloca { ptr, i64, i64 }, align 16 + %a1205 = alloca { ptr, i64, i64 }, align 16 + %a1223 = alloca %S.gen.FnSig, align 16 + %a1224 = alloca %S.gen.FnSig, align 16 + %a1234 = alloca i1, align 16 + %a1241 = alloca i64, align 16 + %a1307 = alloca %S.ast.Node, align 16 + %a1308 = alloca %S.ast.Node, align 16 + %a1310 = alloca %S.ast.Node, align 16 + %a1349 = alloca { ptr, i64, i64 }, align 16 + %a1350 = alloca { ptr, i64, i64 }, align 16 + %a1363 = alloca i64, align 16 + %a1376 = alloca %S.gen.Template, align 16 + %a1377 = alloca %S.gen.Template, align 16 + %a1379 = alloca %S.gen.Template, align 16 + %a1407 = alloca %S.ast.Node, align 16 + %a1408 = alloca %S.ast.Node, align 16 + %a1410 = alloca %S.ast.Node, align 16 + %a1440 = alloca { ptr, i64, i64 }, align 16 + %a1441 = alloca { ptr, i64, i64 }, align 16 + %a1454 = alloca i64, align 16 + %a1494 = alloca %S.ast.Node, align 16 + %a1495 = alloca %S.ast.Node, align 16 + %a1497 = alloca %S.ast.Node, align 16 + %a1509 = alloca %S.ast.Node, align 16 + %a1510 = alloca %S.ast.Node, align 16 + %a1512 = alloca %S.ast.Node, align 16 + %a1525 = alloca i64, align 16 + %a1545 = alloca %S.ast.Type, align 16 + %a1546 = alloca %S.ast.Type, align 16 + %a1548 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic3538, label %ok3539 +panic3538: + call void @finch_panic(ptr @.str.2224, i64 1507, ptr @.str.2225) + unreachable +ok3539: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 0 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + store i64 0, ptr %a7 + br label %for.cond3540 +for.cond3540: + %t8 = load i64, ptr %a7 + %t9 = icmp slt i64 %t8, %t6 + br i1 %t9, label %for.body3541, label %for.end3543 +for.body3541: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic3544, label %ok3545 +panic3544: + call void @finch_panic(ptr @.str.2226, i64 1508, ptr @.str.2227) + unreachable +ok3545: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 0 + %t13 = load i64, ptr %a7 + %t14 = load { ptr, i64, i64 }, ptr %t12 + %t15 = extractvalue { ptr, i64, i64 } %t14, 1 + %t16 = icmp uge i64 %t13, %t15 + br i1 %t16, label %range3546, label %inrange3547 +range3546: + call void @finch_panic_index(ptr @.str.2228, i64 1508, i64 %t13, i64 %t15) + unreachable +inrange3547: + %t17 = extractvalue { ptr, i64, i64 } %t14, 0 + %t18 = getelementptr inbounds %S.ast.Program, ptr %t17, i64 %t13 + %t19 = getelementptr inbounds %S.ast.Program, ptr %t18, i32 0, i32 0 + %t20 = load { ptr, i64, i64 }, ptr %t19 + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic3548, label %ok3549 +panic3548: + call void @finch_panic(ptr @.str.2229, i64 1508, ptr @.str.2230) + unreachable +ok3549: + %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 14 + store { ptr, i64, i64 } %t20, ptr %a24 + call void @finch_str_copy(ptr %a25, ptr %a24) + %t26 = load { ptr, i64, i64 }, ptr %a25 + %t27 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t26, ptr %t23 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic3550, label %ok3551 +panic3550: + call void @finch_panic(ptr @.str.2231, i64 1509, ptr @.str.2232) + unreachable +ok3551: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 0 + %t32 = load i64, ptr %a7 + %t33 = load { ptr, i64, i64 }, ptr %t31 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range3552, label %inrange3553 +range3552: + call void @finch_panic_index(ptr @.str.2233, i64 1509, i64 %t32, i64 %t34) + unreachable +inrange3553: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.ast.Program, ptr %t36, i64 %t32 + %t38 = getelementptr inbounds %S.ast.Program, ptr %t37, i32 0, i32 6 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t38, i32 0, i32 1 + %t40 = load i64, ptr %t39 + store i64 0, ptr %a41 + br label %for.cond3554 +for.cond3554: + %t42 = load i64, ptr %a41 + %t43 = icmp slt i64 %t42, %t40 + br i1 %t43, label %for.body3555, label %for.end3557 +for.body3555: + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic3558, label %ok3559 +panic3558: + call void @finch_panic(ptr @.str.2234, i64 1510, ptr @.str.2235) + unreachable +ok3559: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 0 + %t47 = load i64, ptr %a7 + %t48 = load { ptr, i64, i64 }, ptr %t46 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range3560, label %inrange3561 +range3560: + call void @finch_panic_index(ptr @.str.2236, i64 1510, i64 %t47, i64 %t49) + unreachable +inrange3561: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds %S.ast.Program, ptr %t51, i64 %t47 + %t53 = getelementptr inbounds %S.ast.Program, ptr %t52, i32 0, i32 6 + %t54 = load i64, ptr %a41 + %t55 = load { ptr, i64, i64 }, ptr %t53 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range3562, label %inrange3563 +range3562: + call void @finch_panic_index(ptr @.str.2237, i64 1510, i64 %t54, i64 %t56) + unreachable +inrange3563: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 + %t60 = load %S.ast.Node, ptr %t59 + store %S.ast.Node %t60, ptr %a61 + call void @finch.copy.S_ast_Node(ptr %a62, ptr %a61) + %t63 = load %S.ast.Node, ptr %a62 + store %S.ast.Node %t63, ptr %a64 + %t65 = load ptr, ptr %a1 + %t66 = load ptr, ptr %a1 + %t67 = icmp eq ptr %t66, null + br i1 %t67, label %panic3564, label %ok3565 +panic3564: + call void @finch_panic(ptr @.str.2238, i64 1511, ptr @.str.2239) + unreachable +ok3565: + %t68 = getelementptr inbounds %S.gen.Gen, ptr %t66, i32 0, i32 14 + %t69 = load { ptr, i64, i64 }, ptr %t68 + %t70 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t71 = load { ptr, i64, i64 }, ptr %t70 + %t72 = call i64 @finch.gen.findStruct(ptr %t65, { ptr, i64, i64 } %t69, { ptr, i64, i64 } %t71) + %t73 = icmp sge i64 %t72, 0 + br label %logic.from3566 +logic.from3566: + br i1 %t73, label %logic.end3568, label %logic.rhs3567 +logic.rhs3567: + %t74 = load ptr, ptr %a1 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic3569, label %ok3570 +panic3569: + call void @finch_panic(ptr @.str.2240, i64 1511, ptr @.str.2241) + unreachable +ok3570: + %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 14 + %t78 = load { ptr, i64, i64 }, ptr %t77 + %t79 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t80 = load { ptr, i64, i64 }, ptr %t79 + %t81 = call i64 @finch.gen.findTemplate(ptr %t74, { ptr, i64, i64 } %t78, { ptr, i64, i64 } %t80, { ptr, i64, i64 } { ptr @.str.2242, i64 0, i64 0 }, i1 true) + %t82 = icmp sge i64 %t81, 0 + br label %logic.rend3571 +logic.rend3571: + br label %logic.end3568 +logic.end3568: + %t83 = phi i1 [ true, %logic.from3566 ], [ %t82, %logic.rend3571 ] + br i1 %t83, label %then3572, label %endif3574 +then3572: + %t84 = load ptr, ptr %a1 + %t85 = load %S.ast.Node, ptr %a64 + %t86 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } { ptr @.str.2243, i64 12, i64 0 }, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.2244, i64 18, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + call void @finch.gen.fail(ptr %t84, %S.ast.Node %t85, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %endif3574 +endif3574: + %t98 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 + %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 + %t100 = load i64, ptr %t99 + %t101 = icmp sgt i64 %t100, 0 + br i1 %t101, label %then3575, label %endif3577 +then3575: + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic3578, label %ok3579 +panic3578: + call void @finch_panic(ptr @.str.2245, i64 1516, ptr @.str.2246) + unreachable +ok3579: + %t104 = getelementptr inbounds %S.gen.Gen, ptr %t102, i32 0, i32 17 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t106 = load ptr, ptr %a1 + %t107 = icmp eq ptr %t106, null + br i1 %t107, label %panic3580, label %ok3581 +panic3580: + call void @finch_panic(ptr @.str.2247, i64 1516, ptr @.str.2248) + unreachable +ok3581: + %t108 = getelementptr inbounds %S.gen.Gen, ptr %t106, i32 0, i32 14 + %t109 = load { ptr, i64, i64 }, ptr %t108 + store { ptr, i64, i64 } %t109, ptr %a110 + call void @finch_str_copy(ptr %a111, ptr %a110) + %t112 = load { ptr, i64, i64 }, ptr %a111 + %t113 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t112, 0 + %t114 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } %t115, ptr %a116 + call void @finch_str_copy(ptr %a117, ptr %a116) + %t118 = load { ptr, i64, i64 }, ptr %a117 + %t119 = insertvalue %S.gen.Template %t113, { ptr, i64, i64 } %t118, 1 + %t120 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 3 + %t121 = load { ptr, i64, i64 }, ptr %t120 + store { ptr, i64, i64 } %t121, ptr %a122 + call void @finch.copy.arr_str(ptr %a123, ptr %a122) + %t124 = load { ptr, i64, i64 }, ptr %a123 + %t125 = insertvalue %S.gen.Template %t119, { ptr, i64, i64 } %t124, 3 + %t126 = load i64, ptr %a7 + %t127 = insertvalue %S.gen.Template %t125, i64 %t126, 4 + %t128 = load i64, ptr %a41 + %t129 = insertvalue %S.gen.Template %t127, i64 %t128, 5 + %t130 = insertvalue %S.gen.Template %t129, i1 true, 6 + %t131 = load i64, ptr %t105 + %t132 = add i64 %t131, 1 + call void @finch_arr_reserve(ptr %t104, i64 %t132, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) + %t133 = load ptr, ptr %t104 + %t134 = getelementptr inbounds %S.gen.Template, ptr %t133, i64 %t131 + store %S.gen.Template %t130, ptr %t134 + store i64 %t132, ptr %t105 + call void @finch.drop.S_ast_Node(ptr %a64) + br label %for.step3556 +endif3577: + %t135 = load ptr, ptr %a1 + %t136 = icmp eq ptr %t135, null + br i1 %t136, label %panic3582, label %ok3583 +panic3582: + call void @finch_panic(ptr @.str.2249, i64 1519, ptr @.str.2250) + unreachable +ok3583: + %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 16 + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 + %t139 = load ptr, ptr %a1 + %t140 = icmp eq ptr %t139, null + br i1 %t140, label %panic3584, label %ok3585 +panic3584: + call void @finch_panic(ptr @.str.2251, i64 1519, ptr @.str.2252) + unreachable +ok3585: + %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 14 + %t142 = load { ptr, i64, i64 }, ptr %t141 + store { ptr, i64, i64 } %t142, ptr %a143 + call void @finch_str_copy(ptr %a144, ptr %a143) + %t145 = load { ptr, i64, i64 }, ptr %a144 + %t146 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t145, 0 + %t147 = getelementptr inbounds %S.ast.Node, ptr %a64, i32 0, i32 1 + %t148 = load { ptr, i64, i64 }, ptr %t147 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch_str_copy(ptr %a150, ptr %a149) + %t151 = load { ptr, i64, i64 }, ptr %a150 + %t152 = insertvalue %S.gen.StructDef %t146, { ptr, i64, i64 } %t151, 1 + %t153 = load i64, ptr %a7 + %t154 = insertvalue %S.gen.StructDef %t152, i64 %t153, 13 + %t155 = load i64, ptr %a41 + %t156 = insertvalue %S.gen.StructDef %t154, i64 %t155, 14 + %t157 = load i64, ptr %t138 + %t158 = add i64 %t157, 1 + call void @finch_arr_reserve(ptr %t137, i64 %t158, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) + %t159 = load ptr, ptr %t137 + %t160 = getelementptr inbounds %S.gen.StructDef, ptr %t159, i64 %t157 + store %S.gen.StructDef %t156, ptr %t160 + store i64 %t158, ptr %t138 + call void @finch.drop.S_ast_Node(ptr %a64) + br label %for.step3556 +for.step3556: + %t161 = load i64, ptr %a41 + %t162 = add i64 %t161, 1 + store i64 %t162, ptr %a41 + br label %for.cond3554 +for.end3557: + br label %for.step3542 +for.step3542: + %t163 = load i64, ptr %a7 + %t164 = add i64 %t163, 1 + store i64 %t164, ptr %a7 + br label %for.cond3540 +for.end3543: + %t165 = load ptr, ptr %a1 + %t166 = icmp eq ptr %t165, null + br i1 %t166, label %panic3586, label %ok3587 +panic3586: + call void @finch_panic(ptr @.str.2253, i64 1522, ptr @.str.2254) + unreachable +ok3587: + %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 0 + %t168 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t169 = load i64, ptr %t168 + store i64 0, ptr %a170 + br label %for.cond3588 +for.cond3588: + %t171 = load i64, ptr %a170 + %t172 = icmp slt i64 %t171, %t169 + br i1 %t172, label %for.body3589, label %for.end3591 +for.body3589: + %t173 = load ptr, ptr %a1 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic3592, label %ok3593 +panic3592: + call void @finch_panic(ptr @.str.2255, i64 1523, ptr @.str.2256) + unreachable +ok3593: + %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 0 + %t176 = load i64, ptr %a170 + %t177 = load { ptr, i64, i64 }, ptr %t175 + %t178 = extractvalue { ptr, i64, i64 } %t177, 1 + %t179 = icmp uge i64 %t176, %t178 + br i1 %t179, label %range3594, label %inrange3595 +range3594: + call void @finch_panic_index(ptr @.str.2257, i64 1523, i64 %t176, i64 %t178) + unreachable +inrange3595: + %t180 = extractvalue { ptr, i64, i64 } %t177, 0 + %t181 = getelementptr inbounds %S.ast.Program, ptr %t180, i64 %t176 + %t182 = getelementptr inbounds %S.ast.Program, ptr %t181, i32 0, i32 0 + %t183 = load { ptr, i64, i64 }, ptr %t182 + %t184 = load ptr, ptr %a1 + %t185 = icmp eq ptr %t184, null + br i1 %t185, label %panic3596, label %ok3597 +panic3596: + call void @finch_panic(ptr @.str.2258, i64 1523, ptr @.str.2259) + unreachable +ok3597: + %t186 = getelementptr inbounds %S.gen.Gen, ptr %t184, i32 0, i32 14 + store { ptr, i64, i64 } %t183, ptr %a187 + call void @finch_str_copy(ptr %a188, ptr %a187) + %t189 = load { ptr, i64, i64 }, ptr %a188 + %t190 = load { ptr, i64, i64 }, ptr %t186 + store { ptr, i64, i64 } %t189, ptr %t186 + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load ptr, ptr %a1 + %t193 = icmp eq ptr %t192, null + br i1 %t193, label %panic3598, label %ok3599 +panic3598: + call void @finch_panic(ptr @.str.2260, i64 1524, ptr @.str.2261) + unreachable +ok3599: + %t194 = getelementptr inbounds %S.gen.Gen, ptr %t192, i32 0, i32 0 + %t195 = load i64, ptr %a170 + %t196 = load { ptr, i64, i64 }, ptr %t194 + %t197 = extractvalue { ptr, i64, i64 } %t196, 1 + %t198 = icmp uge i64 %t195, %t197 + br i1 %t198, label %range3600, label %inrange3601 +range3600: + call void @finch_panic_index(ptr @.str.2262, i64 1524, i64 %t195, i64 %t197) + unreachable +inrange3601: + %t199 = extractvalue { ptr, i64, i64 } %t196, 0 + %t200 = getelementptr inbounds %S.ast.Program, ptr %t199, i64 %t195 + %t201 = getelementptr inbounds %S.ast.Program, ptr %t200, i32 0, i32 7 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i32 0, i32 1 + %t203 = load i64, ptr %t202 + store i64 0, ptr %a204 + br label %for.cond3602 +for.cond3602: + %t205 = load i64, ptr %a204 + %t206 = icmp slt i64 %t205, %t203 + br i1 %t206, label %for.body3603, label %for.end3605 +for.body3603: + %t207 = load ptr, ptr %a1 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic3606, label %ok3607 +panic3606: + call void @finch_panic(ptr @.str.2263, i64 1525, ptr @.str.2264) + unreachable +ok3607: + %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 0 + %t210 = load i64, ptr %a170 + %t211 = load { ptr, i64, i64 }, ptr %t209 + %t212 = extractvalue { ptr, i64, i64 } %t211, 1 + %t213 = icmp uge i64 %t210, %t212 + br i1 %t213, label %range3608, label %inrange3609 +range3608: + call void @finch_panic_index(ptr @.str.2265, i64 1525, i64 %t210, i64 %t212) + unreachable +inrange3609: + %t214 = extractvalue { ptr, i64, i64 } %t211, 0 + %t215 = getelementptr inbounds %S.ast.Program, ptr %t214, i64 %t210 + %t216 = getelementptr inbounds %S.ast.Program, ptr %t215, i32 0, i32 7 + %t217 = load i64, ptr %a204 + %t218 = load { ptr, i64, i64 }, ptr %t216 + %t219 = extractvalue { ptr, i64, i64 } %t218, 1 + %t220 = icmp uge i64 %t217, %t219 + br i1 %t220, label %range3610, label %inrange3611 +range3610: + call void @finch_panic_index(ptr @.str.2266, i64 1525, i64 %t217, i64 %t219) + unreachable +inrange3611: + %t221 = extractvalue { ptr, i64, i64 } %t218, 0 + %t222 = getelementptr inbounds %S.ast.Node, ptr %t221, i64 %t217 + %t223 = load %S.ast.Node, ptr %t222 + store %S.ast.Node %t223, ptr %a224 + call void @finch.copy.S_ast_Node(ptr %a225, ptr %a224) + %t226 = load %S.ast.Node, ptr %a225 + store %S.ast.Node %t226, ptr %a227 + %t228 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 6 + %t229 = load i1, ptr %t228 + br i1 %t229, label %then3612, label %endif3614 +then3612: + %t230 = load ptr, ptr %a1 + %t231 = load ptr, ptr %a1 + %t232 = icmp eq ptr %t231, null + br i1 %t232, label %panic3615, label %ok3616 +panic3615: + call void @finch_panic(ptr @.str.2267, i64 1527, ptr @.str.2268) + unreachable +ok3616: + %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 14 + %t234 = load { ptr, i64, i64 }, ptr %t233 + %t235 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t236 = load { ptr, i64, i64 }, ptr %t235 + %t237 = call i64 @finch.gen.findEnum(ptr %t230, { ptr, i64, i64 } %t234, { ptr, i64, i64 } %t236) + %t238 = icmp sge i64 %t237, 0 + br label %logic.from3617 +logic.from3617: + br i1 %t238, label %logic.end3619, label %logic.rhs3618 +logic.rhs3618: + %t239 = load ptr, ptr %a1 + %t240 = load ptr, ptr %a1 + %t241 = icmp eq ptr %t240, null + br i1 %t241, label %panic3620, label %ok3621 +panic3620: + call void @finch_panic(ptr @.str.2269, i64 1527, ptr @.str.2270) + unreachable +ok3621: + %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 14 + %t243 = load { ptr, i64, i64 }, ptr %t242 + %t244 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t245 = load { ptr, i64, i64 }, ptr %t244 + %t246 = call i64 @finch.gen.findSum(ptr %t239, { ptr, i64, i64 } %t243, { ptr, i64, i64 } %t245) + %t247 = icmp sge i64 %t246, 0 + br label %logic.rend3622 +logic.rend3622: + br label %logic.end3619 +logic.end3619: + %t248 = phi i1 [ true, %logic.from3617 ], [ %t247, %logic.rend3622 ] + br i1 %t248, label %then3623, label %endif3625 +then3623: + %t249 = load ptr, ptr %a1 + %t250 = load %S.ast.Node, ptr %a227 + %t251 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t252 = load { ptr, i64, i64 }, ptr %t251 + store { ptr, i64, i64 } { ptr @.str.2271, i64 1, i64 0 }, ptr %a254 + store { ptr, i64, i64 } %t252, ptr %a255 + call void @finch_str_concat(ptr %a253, ptr %a254, ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a253 + store { ptr, i64, i64 } %t256, ptr %a258 + store { ptr, i64, i64 } { ptr @.str.2272, i64 18, i64 0 }, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t256, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + call void @finch.gen.fail(ptr %t249, %S.ast.Node %t250, { ptr, i64, i64 } %t261) + store { ptr, i64, i64 } %t261, ptr %a262 + call void @finch_str_drop(ptr %a262) + br label %endif3625 +endif3625: + %t263 = load ptr, ptr %a1 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic3626, label %ok3627 +panic3626: + call void @finch_panic(ptr @.str.2273, i64 1530, ptr @.str.2274) + unreachable +ok3627: + %t265 = getelementptr inbounds %S.gen.Gen, ptr %t263, i32 0, i32 14 + %t266 = load { ptr, i64, i64 }, ptr %t265 + store { ptr, i64, i64 } %t266, ptr %a267 + call void @finch_str_copy(ptr %a268, ptr %a267) + %t269 = load { ptr, i64, i64 }, ptr %a268 + %t270 = insertvalue %S.gen.SumDef zeroinitializer, { ptr, i64, i64 } %t269, 0 + %t271 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } %t272, ptr %a273 + call void @finch_str_copy(ptr %a274, ptr %a273) + %t275 = load { ptr, i64, i64 }, ptr %a274 + %t276 = insertvalue %S.gen.SumDef %t270, { ptr, i64, i64 } %t275, 1 + store %S.gen.SumDef %t276, ptr %a277 + store i64 1, ptr %a278 + %t279 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 + store i64 0, ptr %a280 + br label %each.cond3628 +each.cond3628: + %t281 = getelementptr inbounds { ptr, i64, i64 }, ptr %t279, i32 0, i32 1 + %t282 = load i64, ptr %t281 + %t283 = load i64, ptr %a280 + %t284 = icmp slt i64 %t283, %t282 + br i1 %t284, label %each.body3629, label %each.end3631 +each.body3629: + %t285 = load ptr, ptr %t279 + %t286 = getelementptr inbounds %S.ast.Node, ptr %t285, i64 %t283 + %t287 = load %S.ast.Node, ptr %t286 + store %S.ast.Node %t287, ptr %a288 + %t289 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 + %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 + %t291 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 + %t292 = load { ptr, i64, i64 }, ptr %t291 + store i64 -1, ptr %a293 + %t294 = load i64, ptr %t290 + %t295 = load ptr, ptr %t289 + store i64 0, ptr %a296 + br label %find.cond3632 +find.cond3632: + %t297 = load i64, ptr %a296 + %t298 = icmp slt i64 %t297, %t294 + br i1 %t298, label %find.body3633, label %find.end3636 +find.body3633: + %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t295, i64 %t297 + %t300 = load { ptr, i64, i64 }, ptr %t299 + store { ptr, i64, i64 } %t300, ptr %a301 + store { ptr, i64, i64 } %t292, ptr %a302 + %t303 = call i32 @finch_str_eq(ptr %a301, ptr %a302) + %t304 = icmp ne i32 %t303, 0 + br i1 %t304, label %find.hit3634, label %find.next3635 +find.hit3634: + store i64 %t297, ptr %a293 + br label %find.end3636 +find.next3635: + %t305 = add i64 %t297, 1 + store i64 %t305, ptr %a296 + br label %find.cond3632 +find.end3636: + %t306 = load i64, ptr %a293 + %t307 = icmp sge i64 %t306, 0 + br i1 %t307, label %then3637, label %endif3639 +then3637: + %t308 = load ptr, ptr %a1 + %t309 = load %S.ast.Node, ptr %a288 + %t310 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t311 = load { ptr, i64, i64 }, ptr %t310 + store { ptr, i64, i64 } { ptr @.str.2275, i64 9, i64 0 }, ptr %a313 + store { ptr, i64, i64 } %t311, ptr %a314 + call void @finch_str_concat(ptr %a312, ptr %a313, ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a312 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.2276, i64 17, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + %t321 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 + %t322 = load { ptr, i64, i64 }, ptr %t321 + store { ptr, i64, i64 } %t320, ptr %a324 + store { ptr, i64, i64 } %t322, ptr %a325 + call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) + store { ptr, i64, i64 } %t320, ptr %a326 + call void @finch_str_drop(ptr %a326) + %t327 = load { ptr, i64, i64 }, ptr %a323 + store { ptr, i64, i64 } %t327, ptr %a329 + store { ptr, i64, i64 } { ptr @.str.2277, i64 6, i64 0 }, ptr %a330 + call void @finch_str_concat(ptr %a328, ptr %a329, ptr %a330) + store { ptr, i64, i64 } %t327, ptr %a331 + call void @finch_str_drop(ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a328 + call void @finch.gen.fail(ptr %t308, %S.ast.Node %t309, { ptr, i64, i64 } %t332) + store { ptr, i64, i64 } %t332, ptr %a333 + call void @finch_str_drop(ptr %a333) + br label %endif3639 +endif3639: + %t334 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 2 + %t335 = getelementptr inbounds { ptr, i64, i64 }, ptr %t334, i32 0, i32 1 + %t336 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 1 + %t337 = load { ptr, i64, i64 }, ptr %t336 + store { ptr, i64, i64 } %t337, ptr %a338 + call void @finch_str_copy(ptr %a339, ptr %a338) + %t340 = load { ptr, i64, i64 }, ptr %a339 + %t341 = load i64, ptr %t335 + %t342 = add i64 %t341, 1 + call void @finch_arr_reserve(ptr %t334, i64 %t342, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t343 = load ptr, ptr %t334 + %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %t343, i64 %t341 + store { ptr, i64, i64 } %t340, ptr %t344 + store i64 %t342, ptr %t335 + %t345 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 3 + %t346 = getelementptr inbounds { ptr, i64, i64 }, ptr %t345, i32 0, i32 1 + %t347 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 9 + %t348 = getelementptr inbounds { ptr, i64, i64 }, ptr %t347, i32 0, i32 1 + %t349 = load i64, ptr %t348 + %t350 = load i64, ptr %t346 + %t351 = add i64 %t350, 1 + call void @finch_arr_reserve(ptr %t345, i64 %t351, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t352 = load ptr, ptr %t345 + %t353 = getelementptr inbounds i64, ptr %t352, i64 %t350 + store i64 %t349, ptr %t353 + store i64 %t351, ptr %t346 + %t354 = getelementptr inbounds %S.gen.SumDef, ptr %a277, i32 0, i32 4 + %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i32 0, i32 1 + %t356 = load i64, ptr %a278 + %t357 = load i64, ptr %t355 + %t358 = add i64 %t357, 1 + call void @finch_arr_reserve(ptr %t354, i64 %t358, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t359 = load ptr, ptr %t354 + %t360 = getelementptr inbounds i64, ptr %t359, i64 %t357 + store i64 %t356, ptr %t360 + store i64 %t358, ptr %t355 + %t361 = getelementptr inbounds %S.ast.Node, ptr %a288, i32 0, i32 9 + %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %t361, i32 0, i32 1 + %t363 = load i64, ptr %t362 + %t364 = load i64, ptr %a278 + %t365 = add i64 %t364, %t363 + store i64 %t365, ptr %a278 + br label %each.step3630 +each.step3630: + %t366 = load i64, ptr %a280 + %t367 = add i64 %t366, 1 + store i64 %t367, ptr %a280 + br label %each.cond3628 +each.end3631: + %t368 = load ptr, ptr %a1 + %t369 = icmp eq ptr %t368, null + br i1 %t369, label %panic3640, label %ok3641 +panic3640: + call void @finch_panic(ptr @.str.2278, i64 1541, ptr @.str.2279) + unreachable +ok3641: + %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 22 + %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 + %t372 = load %S.gen.SumDef, ptr %a277 + store %S.gen.SumDef %t372, ptr %a373 + call void @finch.copy.S_gen_SumDef(ptr %a374, ptr %a373) + %t375 = load %S.gen.SumDef, ptr %a374 + %t376 = load i64, ptr %t371 + %t377 = add i64 %t376, 1 + call void @finch_arr_reserve(ptr %t370, i64 %t377, i64 ptrtoint (ptr getelementptr (%S.gen.SumDef, ptr null, i32 1) to i64)) + %t378 = load ptr, ptr %t370 + %t379 = getelementptr inbounds %S.gen.SumDef, ptr %t378, i64 %t376 + store %S.gen.SumDef %t375, ptr %t379 + store i64 %t377, ptr %t371 + call void @finch.drop.S_gen_SumDef(ptr %a277) + call void @finch.drop.S_ast_Node(ptr %a227) + br label %for.step3604 +endif3614: + %t380 = load ptr, ptr %a1 + %t381 = load ptr, ptr %a1 + %t382 = icmp eq ptr %t381, null + br i1 %t382, label %panic3642, label %ok3643 +panic3642: + call void @finch_panic(ptr @.str.2280, i64 1544, ptr @.str.2281) + unreachable +ok3643: + %t383 = getelementptr inbounds %S.gen.Gen, ptr %t381, i32 0, i32 14 + %t384 = load { ptr, i64, i64 }, ptr %t383 + %t385 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t386 = load { ptr, i64, i64 }, ptr %t385 + %t387 = call i64 @finch.gen.findEnum(ptr %t380, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t386) + %t388 = icmp sge i64 %t387, 0 + br label %logic.from3644 +logic.from3644: + br i1 %t388, label %logic.end3646, label %logic.rhs3645 +logic.rhs3645: + %t389 = load ptr, ptr %a1 + %t390 = load ptr, ptr %a1 + %t391 = icmp eq ptr %t390, null + br i1 %t391, label %panic3647, label %ok3648 +panic3647: + call void @finch_panic(ptr @.str.2282, i64 1544, ptr @.str.2283) + unreachable +ok3648: + %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 14 + %t393 = load { ptr, i64, i64 }, ptr %t392 + %t394 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t395 = load { ptr, i64, i64 }, ptr %t394 + %t396 = call i64 @finch.gen.findStruct(ptr %t389, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t395) + %t397 = icmp sge i64 %t396, 0 + br label %logic.rend3649 +logic.rend3649: + br label %logic.end3646 +logic.end3646: + %t398 = phi i1 [ true, %logic.from3644 ], [ %t397, %logic.rend3649 ] + br i1 %t398, label %then3650, label %endif3652 +then3650: + %t399 = load ptr, ptr %a1 + %t400 = load %S.ast.Node, ptr %a227 + %t401 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t402 = load { ptr, i64, i64 }, ptr %t401 + store { ptr, i64, i64 } { ptr @.str.2284, i64 1, i64 0 }, ptr %a404 + store { ptr, i64, i64 } %t402, ptr %a405 + call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a403 + store { ptr, i64, i64 } %t406, ptr %a408 + store { ptr, i64, i64 } { ptr @.str.2285, i64 18, i64 0 }, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + store { ptr, i64, i64 } %t406, ptr %a410 + call void @finch_str_drop(ptr %a410) + %t411 = load { ptr, i64, i64 }, ptr %a407 + call void @finch.gen.fail(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t411) + store { ptr, i64, i64 } %t411, ptr %a412 + call void @finch_str_drop(ptr %a412) + br label %endif3652 +endif3652: + %t413 = load ptr, ptr %a1 + %t414 = icmp eq ptr %t413, null + br i1 %t414, label %panic3653, label %ok3654 +panic3653: + call void @finch_panic(ptr @.str.2286, i64 1547, ptr @.str.2287) + unreachable +ok3654: + %t415 = getelementptr inbounds %S.gen.Gen, ptr %t413, i32 0, i32 14 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t416, ptr %a417 + call void @finch_str_copy(ptr %a418, ptr %a417) + %t419 = load { ptr, i64, i64 }, ptr %a418 + %t420 = insertvalue %S.gen.EnumDef zeroinitializer, { ptr, i64, i64 } %t419, 0 + %t421 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t422 = load { ptr, i64, i64 }, ptr %t421 + store { ptr, i64, i64 } %t422, ptr %a423 + call void @finch_str_copy(ptr %a424, ptr %a423) + %t425 = load { ptr, i64, i64 }, ptr %a424 + %t426 = insertvalue %S.gen.EnumDef %t420, { ptr, i64, i64 } %t425, 1 + store %S.gen.EnumDef %t426, ptr %a427 + store i64 0, ptr %a428 + %t429 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 9 + store i64 0, ptr %a430 + br label %each.cond3655 +each.cond3655: + %t431 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i32 0, i32 1 + %t432 = load i64, ptr %t431 + %t433 = load i64, ptr %a430 + %t434 = icmp slt i64 %t433, %t432 + br i1 %t434, label %each.body3656, label %each.end3658 +each.body3656: + %t435 = load ptr, ptr %t429 + %t436 = getelementptr inbounds %S.ast.Node, ptr %t435, i64 %t433 + %t437 = load %S.ast.Node, ptr %t436 + store %S.ast.Node %t437, ptr %a438 + %t439 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 + %t440 = getelementptr inbounds { ptr, i64, i64 }, ptr %t439, i32 0, i32 1 + %t441 = load i64, ptr %t440 + %t442 = icmp sgt i64 %t441, 0 + br i1 %t442, label %then3659, label %endif3661 +then3659: + %t443 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 4 + %t444 = load { ptr, i64, i64 }, ptr %t443 + store { ptr, i64, i64 } %t444, ptr %a445 + %t446 = call i64 @finch_str_to_int(ptr %a445, ptr @.str.2288, i64 1551) + store i64 %t446, ptr %a428 + br label %endif3661 +endif3661: + %t447 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 + %t448 = getelementptr inbounds { ptr, i64, i64 }, ptr %t447, i32 0, i32 1 + %t449 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 + %t450 = load { ptr, i64, i64 }, ptr %t449 + store i64 -1, ptr %a451 + %t452 = load i64, ptr %t448 + %t453 = load ptr, ptr %t447 + store i64 0, ptr %a454 + br label %find.cond3662 +find.cond3662: + %t455 = load i64, ptr %a454 + %t456 = icmp slt i64 %t455, %t452 + br i1 %t456, label %find.body3663, label %find.end3666 +find.body3663: + %t457 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t455 + %t458 = load { ptr, i64, i64 }, ptr %t457 + store { ptr, i64, i64 } %t458, ptr %a459 + store { ptr, i64, i64 } %t450, ptr %a460 + %t461 = call i32 @finch_str_eq(ptr %a459, ptr %a460) + %t462 = icmp ne i32 %t461, 0 + br i1 %t462, label %find.hit3664, label %find.next3665 +find.hit3664: + store i64 %t455, ptr %a451 + br label %find.end3666 +find.next3665: + %t463 = add i64 %t455, 1 + store i64 %t463, ptr %a454 + br label %find.cond3662 +find.end3666: + %t464 = load i64, ptr %a451 + %t465 = icmp sge i64 %t464, 0 + br i1 %t465, label %then3667, label %endif3669 +then3667: + %t466 = load ptr, ptr %a1 + %t467 = load %S.ast.Node, ptr %a438 + %t468 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t469 = load { ptr, i64, i64 }, ptr %t468 + store { ptr, i64, i64 } { ptr @.str.2289, i64 9, i64 0 }, ptr %a471 + store { ptr, i64, i64 } %t469, ptr %a472 + call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) + %t473 = load { ptr, i64, i64 }, ptr %a470 + store { ptr, i64, i64 } %t473, ptr %a475 + store { ptr, i64, i64 } { ptr @.str.2290, i64 17, i64 0 }, ptr %a476 + call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) + store { ptr, i64, i64 } %t473, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = load { ptr, i64, i64 }, ptr %a474 + %t479 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 + %t480 = load { ptr, i64, i64 }, ptr %t479 + store { ptr, i64, i64 } %t478, ptr %a482 + store { ptr, i64, i64 } %t480, ptr %a483 + call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) + store { ptr, i64, i64 } %t478, ptr %a484 + call void @finch_str_drop(ptr %a484) + %t485 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t485, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.2291, i64 6, i64 0 }, ptr %a488 + call void @finch_str_concat(ptr %a486, ptr %a487, ptr %a488) + store { ptr, i64, i64 } %t485, ptr %a489 + call void @finch_str_drop(ptr %a489) + %t490 = load { ptr, i64, i64 }, ptr %a486 + call void @finch.gen.fail(ptr %t466, %S.ast.Node %t467, { ptr, i64, i64 } %t490) + store { ptr, i64, i64 } %t490, ptr %a491 + call void @finch_str_drop(ptr %a491) + br label %endif3669 +endif3669: + %t492 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 + %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t492, i32 0, i32 1 + %t494 = load i64, ptr %a428 + store i64 -1, ptr %a495 + %t496 = load i64, ptr %t493 + %t497 = load ptr, ptr %t492 + store i64 0, ptr %a498 + br label %find.cond3670 +find.cond3670: + %t499 = load i64, ptr %a498 + %t500 = icmp slt i64 %t499, %t496 + br i1 %t500, label %find.body3671, label %find.end3674 +find.body3671: + %t501 = getelementptr inbounds i64, ptr %t497, i64 %t499 + %t502 = load i64, ptr %t501 + %t503 = icmp eq i64 %t502, %t494 + br i1 %t503, label %find.hit3672, label %find.next3673 +find.hit3672: + store i64 %t499, ptr %a495 + br label %find.end3674 +find.next3673: + %t504 = add i64 %t499, 1 + store i64 %t504, ptr %a498 + br label %find.cond3670 +find.end3674: + %t505 = load i64, ptr %a495 + %t506 = icmp sge i64 %t505, 0 + br i1 %t506, label %then3675, label %endif3677 +then3675: + %t507 = load ptr, ptr %a1 + %t508 = load %S.ast.Node, ptr %a438 + %t509 = getelementptr inbounds %S.ast.Node, ptr %a227, i32 0, i32 1 + %t510 = load { ptr, i64, i64 }, ptr %t509 + store { ptr, i64, i64 } { ptr @.str.2292, i64 16, i64 0 }, ptr %a512 + store { ptr, i64, i64 } %t510, ptr %a513 + call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) + %t514 = load { ptr, i64, i64 }, ptr %a511 + store { ptr, i64, i64 } %t514, ptr %a516 + store { ptr, i64, i64 } { ptr @.str.2293, i64 17, i64 0 }, ptr %a517 + call void @finch_str_concat(ptr %a515, ptr %a516, ptr %a517) + store { ptr, i64, i64 } %t514, ptr %a518 + call void @finch_str_drop(ptr %a518) + %t519 = load { ptr, i64, i64 }, ptr %a515 + %t520 = load i64, ptr %a428 + call void @finch_str_from_int(ptr %a521, i64 %t520) + %t522 = load { ptr, i64, i64 }, ptr %a521 + store { ptr, i64, i64 } %t519, ptr %a524 + store { ptr, i64, i64 } %t522, ptr %a525 + call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) + store { ptr, i64, i64 } %t519, ptr %a526 + call void @finch_str_drop(ptr %a526) + store { ptr, i64, i64 } %t522, ptr %a527 + call void @finch_str_drop(ptr %a527) + %t528 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t528, ptr %a530 + store { ptr, i64, i64 } { ptr @.str.2294, i64 20, i64 0 }, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + call void @finch.gen.fail(ptr %t507, %S.ast.Node %t508, { ptr, i64, i64 } %t533) + store { ptr, i64, i64 } %t533, ptr %a534 + call void @finch_str_drop(ptr %a534) + br label %endif3677 +endif3677: + %t535 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 2 + %t536 = getelementptr inbounds { ptr, i64, i64 }, ptr %t535, i32 0, i32 1 + %t537 = getelementptr inbounds %S.ast.Node, ptr %a438, i32 0, i32 1 + %t538 = load { ptr, i64, i64 }, ptr %t537 + store { ptr, i64, i64 } %t538, ptr %a539 + call void @finch_str_copy(ptr %a540, ptr %a539) + %t541 = load { ptr, i64, i64 }, ptr %a540 + %t542 = load i64, ptr %t536 + %t543 = add i64 %t542, 1 + call void @finch_arr_reserve(ptr %t535, i64 %t543, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t544 = load ptr, ptr %t535 + %t545 = getelementptr inbounds { ptr, i64, i64 }, ptr %t544, i64 %t542 + store { ptr, i64, i64 } %t541, ptr %t545 + store i64 %t543, ptr %t536 + %t546 = getelementptr inbounds %S.gen.EnumDef, ptr %a427, i32 0, i32 3 + %t547 = getelementptr inbounds { ptr, i64, i64 }, ptr %t546, i32 0, i32 1 + %t548 = load i64, ptr %a428 + %t549 = load i64, ptr %t547 + %t550 = add i64 %t549, 1 + call void @finch_arr_reserve(ptr %t546, i64 %t550, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t551 = load ptr, ptr %t546 + %t552 = getelementptr inbounds i64, ptr %t551, i64 %t549 + store i64 %t548, ptr %t552 + store i64 %t550, ptr %t547 + %t553 = load i64, ptr %a428 + %t554 = add i64 %t553, 1 + store i64 %t554, ptr %a428 + br label %each.step3657 +each.step3657: + %t555 = load i64, ptr %a430 + %t556 = add i64 %t555, 1 + store i64 %t556, ptr %a430 + br label %each.cond3655 +each.end3658: + %t557 = load ptr, ptr %a1 + %t558 = icmp eq ptr %t557, null + br i1 %t558, label %panic3678, label %ok3679 +panic3678: + call void @finch_panic(ptr @.str.2295, i64 1563, ptr @.str.2296) + unreachable +ok3679: + %t559 = getelementptr inbounds %S.gen.Gen, ptr %t557, i32 0, i32 21 + %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %t559, i32 0, i32 1 + %t561 = load %S.gen.EnumDef, ptr %a427 + store %S.gen.EnumDef %t561, ptr %a562 + call void @finch.copy.S_gen_EnumDef(ptr %a563, ptr %a562) + %t564 = load %S.gen.EnumDef, ptr %a563 + %t565 = load i64, ptr %t560 + %t566 = add i64 %t565, 1 + call void @finch_arr_reserve(ptr %t559, i64 %t566, i64 ptrtoint (ptr getelementptr (%S.gen.EnumDef, ptr null, i32 1) to i64)) + %t567 = load ptr, ptr %t559 + %t568 = getelementptr inbounds %S.gen.EnumDef, ptr %t567, i64 %t565 + store %S.gen.EnumDef %t564, ptr %t568 + store i64 %t566, ptr %t560 + call void @finch.drop.S_gen_EnumDef(ptr %a427) + call void @finch.drop.S_ast_Node(ptr %a227) + br label %for.step3604 +for.step3604: + %t569 = load i64, ptr %a204 + %t570 = add i64 %t569, 1 + store i64 %t570, ptr %a204 + br label %for.cond3602 +for.end3605: + br label %for.step3590 +for.step3590: + %t571 = load i64, ptr %a170 + %t572 = add i64 %t571, 1 + store i64 %t572, ptr %a170 + br label %for.cond3588 +for.end3591: + %t573 = load ptr, ptr %a1 + %t574 = icmp eq ptr %t573, null + br i1 %t574, label %panic3680, label %ok3681 +panic3680: + call void @finch_panic(ptr @.str.2297, i64 1566, ptr @.str.2298) + unreachable +ok3681: + %t575 = getelementptr inbounds %S.gen.Gen, ptr %t573, i32 0, i32 26 + %t576 = getelementptr inbounds %S.cimport.CImports, ptr %t575, i32 0, i32 4 + %t577 = getelementptr inbounds { ptr, i64, i64 }, ptr %t576, i32 0, i32 1 + %t578 = load i64, ptr %t577 + store i64 0, ptr %a579 + br label %for.cond3682 +for.cond3682: + %t580 = load i64, ptr %a579 + %t581 = icmp slt i64 %t580, %t578 + br i1 %t581, label %for.body3683, label %for.end3685 +for.body3683: + %t582 = load ptr, ptr %a1 + %t583 = icmp eq ptr %t582, null + br i1 %t583, label %panic3686, label %ok3687 +panic3686: + call void @finch_panic(ptr @.str.2299, i64 1567, ptr @.str.2300) + unreachable +ok3687: + %t584 = getelementptr inbounds %S.gen.Gen, ptr %t582, i32 0, i32 16 + %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i32 0, i32 1 + %t586 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } { ptr @.str.2301, i64 1, i64 0 }, 0 + %t587 = load ptr, ptr %a1 + %t588 = icmp eq ptr %t587, null + br i1 %t588, label %panic3688, label %ok3689 +panic3688: + call void @finch_panic(ptr @.str.2302, i64 1567, ptr @.str.2303) + unreachable +ok3689: + %t589 = getelementptr inbounds %S.gen.Gen, ptr %t587, i32 0, i32 26 + %t590 = getelementptr inbounds %S.cimport.CImports, ptr %t589, i32 0, i32 4 + %t591 = load i64, ptr %a579 + %t592 = load { ptr, i64, i64 }, ptr %t590 + %t593 = extractvalue { ptr, i64, i64 } %t592, 1 + %t594 = icmp uge i64 %t591, %t593 + br i1 %t594, label %range3690, label %inrange3691 +range3690: + call void @finch_panic_index(ptr @.str.2304, i64 1567, i64 %t591, i64 %t593) + unreachable +inrange3691: + %t595 = extractvalue { ptr, i64, i64 } %t592, 0 + %t596 = getelementptr inbounds { ptr, i64, i64 }, ptr %t595, i64 %t591 + %t597 = load { ptr, i64, i64 }, ptr %t596 + store { ptr, i64, i64 } %t597, ptr %a598 + call void @finch_str_copy(ptr %a599, ptr %a598) + %t600 = load { ptr, i64, i64 }, ptr %a599 + %t601 = insertvalue %S.gen.StructDef %t586, { ptr, i64, i64 } %t600, 1 + %t602 = insertvalue %S.gen.StructDef %t601, i1 true, 2 + %t603 = insertvalue %S.gen.StructDef %t602, i64 -1, 13 + %t604 = load i64, ptr %a579 + %t605 = insertvalue %S.gen.StructDef %t603, i64 %t604, 14 + %t606 = load i64, ptr %t585 + %t607 = add i64 %t606, 1 + call void @finch_arr_reserve(ptr %t584, i64 %t607, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) + %t608 = load ptr, ptr %t584 + %t609 = getelementptr inbounds %S.gen.StructDef, ptr %t608, i64 %t606 + store %S.gen.StructDef %t605, ptr %t609 + store i64 %t607, ptr %t585 + br label %for.step3684 +for.step3684: + %t610 = load i64, ptr %a579 + %t611 = add i64 %t610, 1 + store i64 %t611, ptr %a579 + br label %for.cond3682 +for.end3685: + %t612 = load ptr, ptr %a1 + %t613 = icmp eq ptr %t612, null + br i1 %t613, label %panic3692, label %ok3693 +panic3692: + call void @finch_panic(ptr @.str.2305, i64 1569, ptr @.str.2306) + unreachable +ok3693: + %t614 = getelementptr inbounds %S.gen.Gen, ptr %t612, i32 0, i32 16 + %t615 = getelementptr inbounds { ptr, i64, i64 }, ptr %t614, i32 0, i32 1 + %t616 = load i64, ptr %t615 + store i64 0, ptr %a617 + br label %for.cond3694 +for.cond3694: + %t618 = load i64, ptr %a617 + %t619 = icmp slt i64 %t618, %t616 + br i1 %t619, label %for.body3695, label %for.end3697 +for.body3695: + %t620 = load ptr, ptr %a1 + %t621 = load i64, ptr %a617 + call void @finch.gen.resolveStruct(ptr %t620, i64 %t621) + br label %for.step3696 +for.step3696: + %t622 = load i64, ptr %a617 + %t623 = add i64 %t622, 1 + store i64 %t623, ptr %a617 + br label %for.cond3694 +for.end3697: + %t624 = load ptr, ptr %a1 + %t625 = icmp eq ptr %t624, null + br i1 %t625, label %panic3698, label %ok3699 +panic3698: + call void @finch_panic(ptr @.str.2307, i64 1572, ptr @.str.2308) + unreachable +ok3699: + %t626 = getelementptr inbounds %S.gen.Gen, ptr %t624, i32 0, i32 0 + %t627 = getelementptr inbounds { ptr, i64, i64 }, ptr %t626, i32 0, i32 1 + %t628 = load i64, ptr %t627 + store i64 0, ptr %a629 + br label %for.cond3700 +for.cond3700: + %t630 = load i64, ptr %a629 + %t631 = icmp slt i64 %t630, %t628 + br i1 %t631, label %for.body3701, label %for.end3703 +for.body3701: + %t632 = load ptr, ptr %a1 + %t633 = icmp eq ptr %t632, null + br i1 %t633, label %panic3704, label %ok3705 +panic3704: + call void @finch_panic(ptr @.str.2309, i64 1573, ptr @.str.2310) + unreachable +ok3705: + %t634 = getelementptr inbounds %S.gen.Gen, ptr %t632, i32 0, i32 0 + %t635 = load i64, ptr %a629 + %t636 = load { ptr, i64, i64 }, ptr %t634 + %t637 = extractvalue { ptr, i64, i64 } %t636, 1 + %t638 = icmp uge i64 %t635, %t637 + br i1 %t638, label %range3706, label %inrange3707 +range3706: + call void @finch_panic_index(ptr @.str.2311, i64 1573, i64 %t635, i64 %t637) + unreachable +inrange3707: + %t639 = extractvalue { ptr, i64, i64 } %t636, 0 + %t640 = getelementptr inbounds %S.ast.Program, ptr %t639, i64 %t635 + %t641 = getelementptr inbounds %S.ast.Program, ptr %t640, i32 0, i32 0 + %t642 = load { ptr, i64, i64 }, ptr %t641 + %t643 = load ptr, ptr %a1 + %t644 = icmp eq ptr %t643, null + br i1 %t644, label %panic3708, label %ok3709 +panic3708: + call void @finch_panic(ptr @.str.2312, i64 1573, ptr @.str.2313) + unreachable +ok3709: + %t645 = getelementptr inbounds %S.gen.Gen, ptr %t643, i32 0, i32 14 + store { ptr, i64, i64 } %t642, ptr %a646 + call void @finch_str_copy(ptr %a647, ptr %a646) + %t648 = load { ptr, i64, i64 }, ptr %a647 + %t649 = load { ptr, i64, i64 }, ptr %t645 + store { ptr, i64, i64 } %t648, ptr %t645 + store { ptr, i64, i64 } %t649, ptr %a650 + call void @finch_str_drop(ptr %a650) + %t651 = load ptr, ptr %a1 + %t652 = icmp eq ptr %t651, null + br i1 %t652, label %panic3710, label %ok3711 +panic3710: + call void @finch_panic(ptr @.str.2314, i64 1574, ptr @.str.2315) + unreachable +ok3711: + %t653 = getelementptr inbounds %S.gen.Gen, ptr %t651, i32 0, i32 0 + %t654 = load i64, ptr %a629 + %t655 = load { ptr, i64, i64 }, ptr %t653 + %t656 = extractvalue { ptr, i64, i64 } %t655, 1 + %t657 = icmp uge i64 %t654, %t656 + br i1 %t657, label %range3712, label %inrange3713 +range3712: + call void @finch_panic_index(ptr @.str.2316, i64 1574, i64 %t654, i64 %t656) + unreachable +inrange3713: + %t658 = extractvalue { ptr, i64, i64 } %t655, 0 + %t659 = getelementptr inbounds %S.ast.Program, ptr %t658, i64 %t654 + %t660 = getelementptr inbounds %S.ast.Program, ptr %t659, i32 0, i32 8 + %t661 = getelementptr inbounds { ptr, i64, i64 }, ptr %t660, i32 0, i32 1 + %t662 = load i64, ptr %t661 + store i64 0, ptr %a663 + br label %for.cond3714 +for.cond3714: + %t664 = load i64, ptr %a663 + %t665 = icmp slt i64 %t664, %t662 + br i1 %t665, label %for.body3715, label %for.end3717 +for.body3715: + %t666 = load ptr, ptr %a1 + %t667 = icmp eq ptr %t666, null + br i1 %t667, label %panic3718, label %ok3719 +panic3718: + call void @finch_panic(ptr @.str.2317, i64 1575, ptr @.str.2318) + unreachable +ok3719: + %t668 = getelementptr inbounds %S.gen.Gen, ptr %t666, i32 0, i32 0 + %t669 = load i64, ptr %a629 + %t670 = load { ptr, i64, i64 }, ptr %t668 + %t671 = extractvalue { ptr, i64, i64 } %t670, 1 + %t672 = icmp uge i64 %t669, %t671 + br i1 %t672, label %range3720, label %inrange3721 +range3720: + call void @finch_panic_index(ptr @.str.2319, i64 1575, i64 %t669, i64 %t671) + unreachable +inrange3721: + %t673 = extractvalue { ptr, i64, i64 } %t670, 0 + %t674 = getelementptr inbounds %S.ast.Program, ptr %t673, i64 %t669 + %t675 = getelementptr inbounds %S.ast.Program, ptr %t674, i32 0, i32 8 + %t676 = load i64, ptr %a663 + %t677 = load { ptr, i64, i64 }, ptr %t675 + %t678 = extractvalue { ptr, i64, i64 } %t677, 1 + %t679 = icmp uge i64 %t676, %t678 + br i1 %t679, label %range3722, label %inrange3723 +range3722: + call void @finch_panic_index(ptr @.str.2320, i64 1575, i64 %t676, i64 %t678) + unreachable +inrange3723: + %t680 = extractvalue { ptr, i64, i64 } %t677, 0 + %t681 = getelementptr inbounds %S.ast.Node, ptr %t680, i64 %t676 + %t682 = load %S.ast.Node, ptr %t681 + store %S.ast.Node %t682, ptr %a683 + call void @finch.copy.S_ast_Node(ptr %a684, ptr %a683) + %t685 = load %S.ast.Node, ptr %a684 + store %S.ast.Node %t685, ptr %a686 + %t687 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 3 + %t688 = getelementptr inbounds { ptr, i64, i64 }, ptr %t687, i32 0, i32 1 + %t689 = load i64, ptr %t688 + %t690 = icmp sgt i64 %t689, 0 + br i1 %t690, label %then3724, label %endif3726 +then3724: + %t691 = load ptr, ptr %a1 + %t692 = load ptr, ptr %a1 + %t693 = icmp eq ptr %t692, null + br i1 %t693, label %panic3727, label %ok3728 +panic3727: + call void @finch_panic(ptr @.str.2321, i64 1578, ptr @.str.2322) + unreachable +ok3728: + %t694 = getelementptr inbounds %S.gen.Gen, ptr %t692, i32 0, i32 14 + %t695 = load { ptr, i64, i64 }, ptr %t694 + %t696 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t697 = load { ptr, i64, i64 }, ptr %t696 + %t698 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t699 = load { ptr, i64, i64 }, ptr %t698 + %t700 = call i64 @finch.gen.findTemplate(ptr %t691, { ptr, i64, i64 } %t695, { ptr, i64, i64 } %t697, { ptr, i64, i64 } %t699, i1 false) + %t701 = icmp sge i64 %t700, 0 + br i1 %t701, label %then3729, label %endif3731 +then3729: + %t702 = load ptr, ptr %a1 + %t703 = load %S.ast.Node, ptr %a686 + %t704 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t705 = load { ptr, i64, i64 }, ptr %t704 + store { ptr, i64, i64 } { ptr @.str.2323, i64 10, i64 0 }, ptr %a707 + store { ptr, i64, i64 } %t705, ptr %a708 + call void @finch_str_concat(ptr %a706, ptr %a707, ptr %a708) + %t709 = load { ptr, i64, i64 }, ptr %a706 + store { ptr, i64, i64 } %t709, ptr %a711 + store { ptr, i64, i64 } { ptr @.str.2324, i64 18, i64 0 }, ptr %a712 + call void @finch_str_concat(ptr %a710, ptr %a711, ptr %a712) + store { ptr, i64, i64 } %t709, ptr %a713 + call void @finch_str_drop(ptr %a713) + %t714 = load { ptr, i64, i64 }, ptr %a710 + call void @finch.gen.fail(ptr %t702, %S.ast.Node %t703, { ptr, i64, i64 } %t714) + store { ptr, i64, i64 } %t714, ptr %a715 + call void @finch_str_drop(ptr %a715) + br label %endif3731 +endif3731: + %t716 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t717 = getelementptr inbounds { ptr, i64, i64 }, ptr %t716, i32 0, i32 1 + %t718 = load i64, ptr %t717 + %t719 = icmp sgt i64 %t718, 0 + br label %logic.from3732 +logic.from3732: + br i1 %t719, label %logic.rhs3733, label %logic.end3734 +logic.rhs3733: + %t720 = load ptr, ptr %a1 + %t721 = load ptr, ptr %a1 + %t722 = icmp eq ptr %t721, null + br i1 %t722, label %panic3735, label %ok3736 +panic3735: + call void @finch_panic(ptr @.str.2325, i64 1581, ptr @.str.2326) + unreachable +ok3736: + %t723 = getelementptr inbounds %S.gen.Gen, ptr %t721, i32 0, i32 14 + %t724 = load { ptr, i64, i64 }, ptr %t723 + %t725 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t726 = load { ptr, i64, i64 }, ptr %t725 + %t727 = call i64 @finch.gen.findTemplate(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t726, { ptr, i64, i64 } { ptr @.str.2327, i64 0, i64 0 }, i1 true) + %t728 = icmp slt i64 %t727, 0 + br label %logic.rend3737 +logic.rend3737: + br label %logic.end3734 +logic.end3734: + %t729 = phi i1 [ false, %logic.from3732 ], [ %t728, %logic.rend3737 ] + br i1 %t729, label %then3738, label %endif3740 +then3738: + %t730 = load ptr, ptr %a1 + %t731 = load %S.ast.Node, ptr %a686 + %t732 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t733 = load { ptr, i64, i64 }, ptr %t732 + store { ptr, i64, i64 } { ptr @.str.2328, i64 34, i64 0 }, ptr %a735 + store { ptr, i64, i64 } %t733, ptr %a736 + call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) + %t737 = load { ptr, i64, i64 }, ptr %a734 + store { ptr, i64, i64 } %t737, ptr %a739 + store { ptr, i64, i64 } { ptr @.str.2329, i64 53, i64 0 }, ptr %a740 + call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) + store { ptr, i64, i64 } %t737, ptr %a741 + call void @finch_str_drop(ptr %a741) + %t742 = load { ptr, i64, i64 }, ptr %a738 + call void @finch.gen.fail(ptr %t730, %S.ast.Node %t731, { ptr, i64, i64 } %t742) + store { ptr, i64, i64 } %t742, ptr %a743 + call void @finch_str_drop(ptr %a743) + br label %endif3740 +endif3740: + %t744 = load ptr, ptr %a1 + %t745 = icmp eq ptr %t744, null + br i1 %t745, label %panic3741, label %ok3742 +panic3741: + call void @finch_panic(ptr @.str.2330, i64 1584, ptr @.str.2331) + unreachable +ok3742: + %t746 = getelementptr inbounds %S.gen.Gen, ptr %t744, i32 0, i32 17 + %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i32 0, i32 1 + %t748 = load ptr, ptr %a1 + %t749 = icmp eq ptr %t748, null + br i1 %t749, label %panic3743, label %ok3744 +panic3743: + call void @finch_panic(ptr @.str.2332, i64 1584, ptr @.str.2333) + unreachable +ok3744: + %t750 = getelementptr inbounds %S.gen.Gen, ptr %t748, i32 0, i32 14 + %t751 = load { ptr, i64, i64 }, ptr %t750 + store { ptr, i64, i64 } %t751, ptr %a752 + call void @finch_str_copy(ptr %a753, ptr %a752) + %t754 = load { ptr, i64, i64 }, ptr %a753 + %t755 = insertvalue %S.gen.Template zeroinitializer, { ptr, i64, i64 } %t754, 0 + %t756 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t757 = load { ptr, i64, i64 }, ptr %t756 + store { ptr, i64, i64 } %t757, ptr %a758 + call void @finch_str_copy(ptr %a759, ptr %a758) + %t760 = load { ptr, i64, i64 }, ptr %a759 + %t761 = insertvalue %S.gen.Template %t755, { ptr, i64, i64 } %t760, 1 + %t762 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t763 = load { ptr, i64, i64 }, ptr %t762 + store { ptr, i64, i64 } %t763, ptr %a764 + call void @finch_str_copy(ptr %a765, ptr %a764) + %t766 = load { ptr, i64, i64 }, ptr %a765 + %t767 = insertvalue %S.gen.Template %t761, { ptr, i64, i64 } %t766, 2 + %t768 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 3 + %t769 = load { ptr, i64, i64 }, ptr %t768 + store { ptr, i64, i64 } %t769, ptr %a770 + call void @finch.copy.arr_str(ptr %a771, ptr %a770) + %t772 = load { ptr, i64, i64 }, ptr %a771 + %t773 = insertvalue %S.gen.Template %t767, { ptr, i64, i64 } %t772, 3 + %t774 = load i64, ptr %a629 + %t775 = insertvalue %S.gen.Template %t773, i64 %t774, 4 + %t776 = load i64, ptr %a663 + %t777 = insertvalue %S.gen.Template %t775, i64 %t776, 5 + %t778 = load i64, ptr %t747 + %t779 = add i64 %t778, 1 + call void @finch_arr_reserve(ptr %t746, i64 %t779, i64 ptrtoint (ptr getelementptr (%S.gen.Template, ptr null, i32 1) to i64)) + %t780 = load ptr, ptr %t746 + %t781 = getelementptr inbounds %S.gen.Template, ptr %t780, i64 %t778 + store %S.gen.Template %t777, ptr %t781 + store i64 %t779, ptr %t747 + call void @finch.drop.S_ast_Node(ptr %a686) + br label %for.step3716 +endif3726: + %t782 = load ptr, ptr %a1 + %t783 = icmp eq ptr %t782, null + br i1 %t783, label %panic3745, label %ok3746 +panic3745: + call void @finch_panic(ptr @.str.2334, i64 1587, ptr @.str.2335) + unreachable +ok3746: + %t784 = getelementptr inbounds %S.gen.Gen, ptr %t782, i32 0, i32 14 + %t785 = load { ptr, i64, i64 }, ptr %t784 + store { ptr, i64, i64 } %t785, ptr %a786 + call void @finch_str_copy(ptr %a787, ptr %a786) + %t788 = load { ptr, i64, i64 }, ptr %a787 + store { ptr, i64, i64 } %t788, ptr %a789 + store i1 false, ptr %a790 + %t791 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t792 = getelementptr inbounds { ptr, i64, i64 }, ptr %t791, i32 0, i32 1 + %t793 = load i64, ptr %t792 + %t794 = icmp sgt i64 %t793, 0 + br label %logic.from3747 +logic.from3747: + br i1 %t794, label %logic.rhs3748, label %logic.end3749 +logic.rhs3748: + %t795 = load ptr, ptr %a1 + %t796 = load ptr, ptr %a1 + %t797 = icmp eq ptr %t796, null + br i1 %t797, label %panic3750, label %ok3751 +panic3750: + call void @finch_panic(ptr @.str.2336, i64 1589, ptr @.str.2337) + unreachable +ok3751: + %t798 = getelementptr inbounds %S.gen.Gen, ptr %t796, i32 0, i32 14 + %t799 = load { ptr, i64, i64 }, ptr %t798 + %t800 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t801 = load { ptr, i64, i64 }, ptr %t800 + %t802 = call i64 @finch.gen.findEnum(ptr %t795, { ptr, i64, i64 } %t799, { ptr, i64, i64 } %t801) + %t803 = icmp sge i64 %t802, 0 + br label %logic.rend3752 +logic.rend3752: + br label %logic.end3749 +logic.end3749: + %t804 = phi i1 [ false, %logic.from3747 ], [ %t803, %logic.rend3752 ] + br i1 %t804, label %then3753, label %else3754 +then3753: + store i1 true, ptr %a790 + %t805 = load ptr, ptr %a1 + %t806 = load { ptr, i64, i64 }, ptr %a789 + %t807 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t808 = load { ptr, i64, i64 }, ptr %t807 + %t809 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t810 = load { ptr, i64, i64 }, ptr %t809 + %t811 = call i64 @finch.gen.findMethod(ptr %t805, { ptr, i64, i64 } %t806, { ptr, i64, i64 } %t808, { ptr, i64, i64 } %t810) + %t812 = icmp sge i64 %t811, 0 + br i1 %t812, label %then3756, label %endif3758 +then3756: + %t813 = load ptr, ptr %a1 + %t814 = load %S.ast.Node, ptr %a686 + %t815 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t816 = load { ptr, i64, i64 }, ptr %t815 + store { ptr, i64, i64 } { ptr @.str.2338, i64 11, i64 0 }, ptr %a818 + store { ptr, i64, i64 } %t816, ptr %a819 + call void @finch_str_concat(ptr %a817, ptr %a818, ptr %a819) + %t820 = load { ptr, i64, i64 }, ptr %a817 + store { ptr, i64, i64 } %t820, ptr %a822 + store { ptr, i64, i64 } { ptr @.str.2339, i64 1, i64 0 }, ptr %a823 + call void @finch_str_concat(ptr %a821, ptr %a822, ptr %a823) + store { ptr, i64, i64 } %t820, ptr %a824 + call void @finch_str_drop(ptr %a824) + %t825 = load { ptr, i64, i64 }, ptr %a821 + %t826 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t827 = load { ptr, i64, i64 }, ptr %t826 + store { ptr, i64, i64 } %t825, ptr %a829 + store { ptr, i64, i64 } %t827, ptr %a830 + call void @finch_str_concat(ptr %a828, ptr %a829, ptr %a830) + store { ptr, i64, i64 } %t825, ptr %a831 + call void @finch_str_drop(ptr %a831) + %t832 = load { ptr, i64, i64 }, ptr %a828 + store { ptr, i64, i64 } %t832, ptr %a834 + store { ptr, i64, i64 } { ptr @.str.2340, i64 17, i64 0 }, ptr %a835 + call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) + store { ptr, i64, i64 } %t832, ptr %a836 + call void @finch_str_drop(ptr %a836) + %t837 = load { ptr, i64, i64 }, ptr %a833 + call void @finch.gen.fail(ptr %t813, %S.ast.Node %t814, { ptr, i64, i64 } %t837) + store { ptr, i64, i64 } %t837, ptr %a838 + call void @finch_str_drop(ptr %a838) + br label %endif3758 +endif3758: + br label %endif3755 +else3754: + %t839 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t840 = getelementptr inbounds { ptr, i64, i64 }, ptr %t839, i32 0, i32 1 + %t841 = load i64, ptr %t840 + %t842 = icmp sgt i64 %t841, 0 + br i1 %t842, label %then3759, label %else3760 +then3759: + %t843 = load ptr, ptr %a1 + %t844 = load ptr, ptr %a1 + %t845 = icmp eq ptr %t844, null + br i1 %t845, label %panic3762, label %ok3763 +panic3762: + call void @finch_panic(ptr @.str.2341, i64 1595, ptr @.str.2342) + unreachable +ok3763: + %t846 = getelementptr inbounds %S.gen.Gen, ptr %t844, i32 0, i32 14 + %t847 = load { ptr, i64, i64 }, ptr %t846 + %t848 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t849 = load { ptr, i64, i64 }, ptr %t848 + %t850 = call i64 @finch.gen.findStruct(ptr %t843, { ptr, i64, i64 } %t847, { ptr, i64, i64 } %t849) + store i64 %t850, ptr %a851 + %t852 = load i64, ptr %a851 + %t853 = icmp slt i64 %t852, 0 + br label %logic.from3764 +logic.from3764: + br i1 %t853, label %logic.rhs3765, label %logic.end3766 +logic.rhs3765: + %t854 = load ptr, ptr %a1 + %t855 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t856 = load { ptr, i64, i64 }, ptr %t855 + %t857 = call i64 @finch.gen.findStruct(ptr %t854, { ptr, i64, i64 } { ptr @.str.2343, i64 1, i64 0 }, { ptr, i64, i64 } %t856) + %t858 = icmp sge i64 %t857, 0 + br label %logic.rend3767 +logic.rend3767: + br label %logic.end3766 +logic.end3766: + %t859 = phi i1 [ false, %logic.from3764 ], [ %t858, %logic.rend3767 ] + br i1 %t859, label %then3768, label %endif3770 +then3768: + %t860 = load ptr, ptr %a1 + %t861 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t862 = load { ptr, i64, i64 }, ptr %t861 + %t863 = call i64 @finch.gen.findStruct(ptr %t860, { ptr, i64, i64 } { ptr @.str.2344, i64 1, i64 0 }, { ptr, i64, i64 } %t862) + store i64 %t863, ptr %a851 + %t864 = load { ptr, i64, i64 }, ptr %a789 + store { ptr, i64, i64 } { ptr @.str.2345, i64 1, i64 0 }, ptr %a789 + store { ptr, i64, i64 } %t864, ptr %a865 + call void @finch_str_drop(ptr %a865) + br label %endif3770 +endif3770: + %t866 = load i64, ptr %a851 + %t867 = icmp slt i64 %t866, 0 + br i1 %t867, label %then3771, label %endif3773 +then3771: + %t868 = load ptr, ptr %a1 + %t869 = load %S.ast.Node, ptr %a686 + %t870 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t871 = load { ptr, i64, i64 }, ptr %t870 + store { ptr, i64, i64 } { ptr @.str.2346, i64 26, i64 0 }, ptr %a873 + store { ptr, i64, i64 } %t871, ptr %a874 + call void @finch_str_concat(ptr %a872, ptr %a873, ptr %a874) + %t875 = load { ptr, i64, i64 }, ptr %a872 + store { ptr, i64, i64 } %t875, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.2347, i64 76, i64 0 }, ptr %a878 + call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878) + store { ptr, i64, i64 } %t875, ptr %a879 + call void @finch_str_drop(ptr %a879) + %t880 = load { ptr, i64, i64 }, ptr %a876 + call void @finch.gen.fail(ptr %t868, %S.ast.Node %t869, { ptr, i64, i64 } %t880) + store { ptr, i64, i64 } %t880, ptr %a881 + call void @finch_str_drop(ptr %a881) + br label %endif3773 +endif3773: + %t882 = load ptr, ptr %a1 + %t883 = load { ptr, i64, i64 }, ptr %a789 + %t884 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t885 = load { ptr, i64, i64 }, ptr %t884 + %t886 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t887 = load { ptr, i64, i64 }, ptr %t886 + %t888 = call i64 @finch.gen.findMethod(ptr %t882, { ptr, i64, i64 } %t883, { ptr, i64, i64 } %t885, { ptr, i64, i64 } %t887) + %t889 = icmp sge i64 %t888, 0 + br i1 %t889, label %then3774, label %endif3776 +then3774: + %t890 = load ptr, ptr %a1 + %t891 = load %S.ast.Node, ptr %a686 + %t892 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t893 = load { ptr, i64, i64 }, ptr %t892 + store { ptr, i64, i64 } { ptr @.str.2348, i64 11, i64 0 }, ptr %a895 + store { ptr, i64, i64 } %t893, ptr %a896 + call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) + %t897 = load { ptr, i64, i64 }, ptr %a894 + store { ptr, i64, i64 } %t897, ptr %a899 + store { ptr, i64, i64 } { ptr @.str.2349, i64 1, i64 0 }, ptr %a900 + call void @finch_str_concat(ptr %a898, ptr %a899, ptr %a900) + store { ptr, i64, i64 } %t897, ptr %a901 + call void @finch_str_drop(ptr %a901) + %t902 = load { ptr, i64, i64 }, ptr %a898 + %t903 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t904 = load { ptr, i64, i64 }, ptr %t903 + store { ptr, i64, i64 } %t902, ptr %a906 + store { ptr, i64, i64 } %t904, ptr %a907 + call void @finch_str_concat(ptr %a905, ptr %a906, ptr %a907) + store { ptr, i64, i64 } %t902, ptr %a908 + call void @finch_str_drop(ptr %a908) + %t909 = load { ptr, i64, i64 }, ptr %a905 + store { ptr, i64, i64 } %t909, ptr %a911 + store { ptr, i64, i64 } { ptr @.str.2350, i64 17, i64 0 }, ptr %a912 + call void @finch_str_concat(ptr %a910, ptr %a911, ptr %a912) + store { ptr, i64, i64 } %t909, ptr %a913 + call void @finch_str_drop(ptr %a913) + %t914 = load { ptr, i64, i64 }, ptr %a910 + call void @finch.gen.fail(ptr %t890, %S.ast.Node %t891, { ptr, i64, i64 } %t914) + store { ptr, i64, i64 } %t914, ptr %a915 + call void @finch_str_drop(ptr %a915) + br label %endif3776 +endif3776: + %t916 = load ptr, ptr %a1 + %t917 = icmp eq ptr %t916, null + br i1 %t917, label %panic3777, label %ok3778 +panic3777: + call void @finch_panic(ptr @.str.2351, i64 1606, ptr @.str.2352) + unreachable +ok3778: + %t918 = getelementptr inbounds %S.gen.Gen, ptr %t916, i32 0, i32 16 + %t919 = load i64, ptr %a851 + %t920 = load { ptr, i64, i64 }, ptr %t918 + %t921 = extractvalue { ptr, i64, i64 } %t920, 1 + %t922 = icmp uge i64 %t919, %t921 + br i1 %t922, label %range3779, label %inrange3780 +range3779: + call void @finch_panic_index(ptr @.str.2353, i64 1606, i64 %t919, i64 %t921) + unreachable +inrange3780: + %t923 = extractvalue { ptr, i64, i64 } %t920, 0 + %t924 = getelementptr inbounds %S.gen.StructDef, ptr %t923, i64 %t919 + %t925 = getelementptr inbounds %S.gen.StructDef, ptr %t924, i32 0, i32 11 + %t926 = getelementptr inbounds { ptr, i64, i64 }, ptr %t925, i32 0, i32 1 + %t927 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t928 = load { ptr, i64, i64 }, ptr %t927 + store i64 -1, ptr %a929 + %t930 = load i64, ptr %t926 + %t931 = load ptr, ptr %t925 + store i64 0, ptr %a932 + br label %find.cond3781 +find.cond3781: + %t933 = load i64, ptr %a932 + %t934 = icmp slt i64 %t933, %t930 + br i1 %t934, label %find.body3782, label %find.end3785 +find.body3782: + %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t931, i64 %t933 + %t936 = load { ptr, i64, i64 }, ptr %t935 + store { ptr, i64, i64 } %t936, ptr %a937 + store { ptr, i64, i64 } %t928, ptr %a938 + %t939 = call i32 @finch_str_eq(ptr %a937, ptr %a938) + %t940 = icmp ne i32 %t939, 0 + br i1 %t940, label %find.hit3783, label %find.next3784 +find.hit3783: + store i64 %t933, ptr %a929 + br label %find.end3785 +find.next3784: + %t941 = add i64 %t933, 1 + store i64 %t941, ptr %a932 + br label %find.cond3781 +find.end3785: + %t942 = load i64, ptr %a929 + %t943 = icmp sge i64 %t942, 0 + br i1 %t943, label %then3786, label %endif3788 +then3786: + %t944 = load ptr, ptr %a1 + %t945 = load %S.ast.Node, ptr %a686 + %t946 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t947 = load { ptr, i64, i64 }, ptr %t946 + store { ptr, i64, i64 } { ptr @.str.2354, i64 11, i64 0 }, ptr %a949 + store { ptr, i64, i64 } %t947, ptr %a950 + call void @finch_str_concat(ptr %a948, ptr %a949, ptr %a950) + %t951 = load { ptr, i64, i64 }, ptr %a948 + store { ptr, i64, i64 } %t951, ptr %a953 + store { ptr, i64, i64 } { ptr @.str.2355, i64 28, i64 0 }, ptr %a954 + call void @finch_str_concat(ptr %a952, ptr %a953, ptr %a954) + store { ptr, i64, i64 } %t951, ptr %a955 + call void @finch_str_drop(ptr %a955) + %t956 = load { ptr, i64, i64 }, ptr %a952 + %t957 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t958 = load { ptr, i64, i64 }, ptr %t957 + store { ptr, i64, i64 } %t956, ptr %a960 + store { ptr, i64, i64 } %t958, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t956, ptr %a962 + call void @finch_str_drop(ptr %a962) + %t963 = load { ptr, i64, i64 }, ptr %a959 + store { ptr, i64, i64 } %t963, ptr %a965 + store { ptr, i64, i64 } { ptr @.str.2356, i64 1, i64 0 }, ptr %a966 + call void @finch_str_concat(ptr %a964, ptr %a965, ptr %a966) + store { ptr, i64, i64 } %t963, ptr %a967 + call void @finch_str_drop(ptr %a967) + %t968 = load { ptr, i64, i64 }, ptr %a964 + call void @finch.gen.fail(ptr %t944, %S.ast.Node %t945, { ptr, i64, i64 } %t968) + store { ptr, i64, i64 } %t968, ptr %a969 + call void @finch_str_drop(ptr %a969) + br label %endif3788 +endif3788: + br label %endif3761 +else3760: + %t970 = load ptr, ptr %a1 + %t971 = load ptr, ptr %a1 + %t972 = icmp eq ptr %t971, null + br i1 %t972, label %panic3789, label %ok3790 +panic3789: + call void @finch_panic(ptr @.str.2357, i64 1610, ptr @.str.2358) + unreachable +ok3790: + %t973 = getelementptr inbounds %S.gen.Gen, ptr %t971, i32 0, i32 14 + %t974 = load { ptr, i64, i64 }, ptr %t973 + %t975 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t976 = load { ptr, i64, i64 }, ptr %t975 + %t977 = call i64 @finch.gen.findFn(ptr %t970, { ptr, i64, i64 } %t974, { ptr, i64, i64 } %t976) + %t978 = icmp sge i64 %t977, 0 + br i1 %t978, label %then3791, label %endif3793 +then3791: + %t979 = load ptr, ptr %a1 + %t980 = load %S.ast.Node, ptr %a686 + %t981 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t982 = load { ptr, i64, i64 }, ptr %t981 + store { ptr, i64, i64 } { ptr @.str.2359, i64 10, i64 0 }, ptr %a984 + store { ptr, i64, i64 } %t982, ptr %a985 + call void @finch_str_concat(ptr %a983, ptr %a984, ptr %a985) + %t986 = load { ptr, i64, i64 }, ptr %a983 + store { ptr, i64, i64 } %t986, ptr %a988 + store { ptr, i64, i64 } { ptr @.str.2360, i64 18, i64 0 }, ptr %a989 + call void @finch_str_concat(ptr %a987, ptr %a988, ptr %a989) + store { ptr, i64, i64 } %t986, ptr %a990 + call void @finch_str_drop(ptr %a990) + %t991 = load { ptr, i64, i64 }, ptr %a987 + call void @finch.gen.fail(ptr %t979, %S.ast.Node %t980, { ptr, i64, i64 } %t991) + store { ptr, i64, i64 } %t991, ptr %a992 + call void @finch_str_drop(ptr %a992) + br label %endif3793 +endif3793: + %t993 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t994 = load { ptr, i64, i64 }, ptr %t993 + %t995 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t994) + br i1 %t995, label %then3794, label %endif3796 +then3794: + %t996 = load ptr, ptr %a1 + %t997 = load %S.ast.Node, ptr %a686 + %t998 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t999 = load { ptr, i64, i64 }, ptr %t998 + store { ptr, i64, i64 } { ptr @.str.2361, i64 1, i64 0 }, ptr %a1001 + store { ptr, i64, i64 } %t999, ptr %a1002 + call void @finch_str_concat(ptr %a1000, ptr %a1001, ptr %a1002) + %t1003 = load { ptr, i64, i64 }, ptr %a1000 + store { ptr, i64, i64 } %t1003, ptr %a1005 + store { ptr, i64, i64 } { ptr @.str.2362, i64 43, i64 0 }, ptr %a1006 + call void @finch_str_concat(ptr %a1004, ptr %a1005, ptr %a1006) + store { ptr, i64, i64 } %t1003, ptr %a1007 + call void @finch_str_drop(ptr %a1007) + %t1008 = load { ptr, i64, i64 }, ptr %a1004 + call void @finch.gen.fail(ptr %t996, %S.ast.Node %t997, { ptr, i64, i64 } %t1008) + store { ptr, i64, i64 } %t1008, ptr %a1009 + call void @finch_str_drop(ptr %a1009) + br label %endif3796 +endif3796: + br label %endif3761 +endif3761: + br label %endif3755 +endif3755: + %t1010 = load ptr, ptr %a1 + %t1011 = icmp eq ptr %t1010, null + br i1 %t1011, label %panic3797, label %ok3798 +panic3797: + call void @finch_panic(ptr @.str.2363, i64 1617, ptr @.str.2364) + unreachable +ok3798: + %t1012 = getelementptr inbounds %S.gen.Gen, ptr %t1010, i32 0, i32 14 + %t1013 = load { ptr, i64, i64 }, ptr %t1012 + store { ptr, i64, i64 } %t1013, ptr %a1014 + call void @finch_str_copy(ptr %a1015, ptr %a1014) + %t1016 = load { ptr, i64, i64 }, ptr %a1015 + %t1017 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t1016, 0 + %t1018 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t1019 = load { ptr, i64, i64 }, ptr %t1018 + store { ptr, i64, i64 } %t1019, ptr %a1020 + call void @finch_str_copy(ptr %a1021, ptr %a1020) + %t1022 = load { ptr, i64, i64 }, ptr %a1021 + %t1023 = insertvalue %S.gen.FnSig %t1017, { ptr, i64, i64 } %t1022, 1 + %t1024 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1025 = load { ptr, i64, i64 }, ptr %t1024 + store { ptr, i64, i64 } %t1025, ptr %a1026 + call void @finch_str_copy(ptr %a1027, ptr %a1026) + %t1028 = load { ptr, i64, i64 }, ptr %a1027 + %t1029 = insertvalue %S.gen.FnSig %t1023, { ptr, i64, i64 } %t1028, 2 + %t1030 = load { ptr, i64, i64 }, ptr %a789 + store { ptr, i64, i64 } %t1030, ptr %a1031 + call void @finch_str_copy(ptr %a1032, ptr %a1031) + %t1033 = load { ptr, i64, i64 }, ptr %a1032 + %t1034 = insertvalue %S.gen.FnSig %t1029, { ptr, i64, i64 } %t1033, 3 + %t1035 = load i1, ptr %a790 + %t1036 = insertvalue %S.gen.FnSig %t1034, i1 %t1035, 4 + %t1037 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 + %t1038 = load i1, ptr %t1037 + %t1039 = insertvalue %S.gen.FnSig %t1036, i1 %t1038, 5 + %t1040 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 7 + %t1041 = load i1, ptr %t1040 + %t1042 = insertvalue %S.gen.FnSig %t1039, i1 %t1041, 9 + %t1043 = load i64, ptr %a629 + %t1044 = insertvalue %S.gen.FnSig %t1042, i64 %t1043, 16 + %t1045 = load i64, ptr %a663 + %t1046 = insertvalue %S.gen.FnSig %t1044, i64 %t1045, 17 + store %S.gen.FnSig %t1046, ptr %a1047 + %t1048 = load ptr, ptr %a1 + %t1049 = icmp eq ptr %t1048, null + br i1 %t1049, label %panic3799, label %ok3800 +panic3799: + call void @finch_panic(ptr @.str.2366, i64 1618, ptr @.str.2367) + unreachable +ok3800: + %t1050 = getelementptr inbounds %S.gen.Gen, ptr %t1048, i32 0, i32 14 + %t1051 = load { ptr, i64, i64 }, ptr %t1050 + %t1052 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1051) + store { ptr, i64, i64 } { ptr @.str.2365, i64 7, i64 0 }, ptr %a1054 + store { ptr, i64, i64 } %t1052, ptr %a1055 + call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) + store { ptr, i64, i64 } %t1052, ptr %a1056 + call void @finch_str_drop(ptr %a1056) + %t1057 = load { ptr, i64, i64 }, ptr %a1053 + store { ptr, i64, i64 } %t1057, ptr %a1059 + store { ptr, i64, i64 } { ptr @.str.2368, i64 1, i64 0 }, ptr %a1060 + call void @finch_str_concat(ptr %a1058, ptr %a1059, ptr %a1060) + store { ptr, i64, i64 } %t1057, ptr %a1061 + call void @finch_str_drop(ptr %a1061) + %t1062 = load { ptr, i64, i64 }, ptr %a1058 + %t1063 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t1064 = load { ptr, i64, i64 }, ptr %t1063 + store { ptr, i64, i64 } %t1062, ptr %a1066 + store { ptr, i64, i64 } %t1064, ptr %a1067 + call void @finch_str_concat(ptr %a1065, ptr %a1066, ptr %a1067) + store { ptr, i64, i64 } %t1062, ptr %a1068 + call void @finch_str_drop(ptr %a1068) + %t1069 = load { ptr, i64, i64 }, ptr %a1065 + %t1070 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 11 + %t1071 = load { ptr, i64, i64 }, ptr %t1070 + store { ptr, i64, i64 } %t1069, ptr %t1070 + store { ptr, i64, i64 } %t1071, ptr %a1072 + call void @finch_str_drop(ptr %a1072) + %t1073 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1074 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1073, i32 0, i32 1 + %t1075 = load i64, ptr %t1074 + %t1076 = icmp sgt i64 %t1075, 0 + br i1 %t1076, label %then3801, label %endif3803 +then3801: + %t1077 = load ptr, ptr %a1 + %t1078 = icmp eq ptr %t1077, null + br i1 %t1078, label %panic3804, label %ok3805 +panic3804: + call void @finch_panic(ptr @.str.2370, i64 1620, ptr @.str.2371) + unreachable +ok3805: + %t1079 = getelementptr inbounds %S.gen.Gen, ptr %t1077, i32 0, i32 14 + %t1080 = load { ptr, i64, i64 }, ptr %t1079 + %t1081 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t1080) + store { ptr, i64, i64 } { ptr @.str.2369, i64 7, i64 0 }, ptr %a1083 + store { ptr, i64, i64 } %t1081, ptr %a1084 + call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084) + store { ptr, i64, i64 } %t1081, ptr %a1085 + call void @finch_str_drop(ptr %a1085) + %t1086 = load { ptr, i64, i64 }, ptr %a1082 + store { ptr, i64, i64 } %t1086, ptr %a1088 + store { ptr, i64, i64 } { ptr @.str.2372, i64 1, i64 0 }, ptr %a1089 + call void @finch_str_concat(ptr %a1087, ptr %a1088, ptr %a1089) + store { ptr, i64, i64 } %t1086, ptr %a1090 + call void @finch_str_drop(ptr %a1090) + %t1091 = load { ptr, i64, i64 }, ptr %a1087 + %t1092 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1093 = load { ptr, i64, i64 }, ptr %t1092 + store { ptr, i64, i64 } %t1091, ptr %a1095 + store { ptr, i64, i64 } %t1093, ptr %a1096 + call void @finch_str_concat(ptr %a1094, ptr %a1095, ptr %a1096) + store { ptr, i64, i64 } %t1091, ptr %a1097 + call void @finch_str_drop(ptr %a1097) + %t1098 = load { ptr, i64, i64 }, ptr %a1094 + store { ptr, i64, i64 } %t1098, ptr %a1100 + store { ptr, i64, i64 } { ptr @.str.2373, i64 1, i64 0 }, ptr %a1101 + call void @finch_str_concat(ptr %a1099, ptr %a1100, ptr %a1101) + store { ptr, i64, i64 } %t1098, ptr %a1102 + call void @finch_str_drop(ptr %a1102) + %t1103 = load { ptr, i64, i64 }, ptr %a1099 + %t1104 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 1 + %t1105 = load { ptr, i64, i64 }, ptr %t1104 + store { ptr, i64, i64 } %t1103, ptr %a1107 + store { ptr, i64, i64 } %t1105, ptr %a1108 + call void @finch_str_concat(ptr %a1106, ptr %a1107, ptr %a1108) + store { ptr, i64, i64 } %t1103, ptr %a1109 + call void @finch_str_drop(ptr %a1109) + %t1110 = load { ptr, i64, i64 }, ptr %a1106 + %t1111 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 11 + %t1112 = load { ptr, i64, i64 }, ptr %t1111 + store { ptr, i64, i64 } %t1110, ptr %t1111 + store { ptr, i64, i64 } %t1112, ptr %a1113 + call void @finch_str_drop(ptr %a1113) + br label %endif3803 +endif3803: + %t1114 = load ptr, ptr %a1 + %t1115 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 5 + %t1116 = load %S.ast.Type, ptr %t1115 + %t1117 = load %S.ast.Node, ptr %a686 + %t1118 = call %S.ast.Type @finch.gen.resolve(ptr %t1114, %S.ast.Type %t1116, %S.ast.Node %t1117) + %t1119 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 12 + %t1120 = load %S.ast.Type, ptr %t1119 + store %S.ast.Type %t1118, ptr %t1119 + store %S.ast.Type %t1120, ptr %a1121 + call void @finch.drop.S_ast_Type(ptr %a1121) + %t1122 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1122, i32 0, i32 1 + %t1124 = load i64, ptr %t1123 + %t1125 = sub i64 %t1124, 1 + store i64 0, ptr %a1126 + br label %for.cond3806 +for.cond3806: + %t1127 = load i64, ptr %a1126 + %t1128 = icmp slt i64 %t1127, %t1125 + br i1 %t1128, label %for.body3807, label %for.end3809 +for.body3807: + %t1129 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1130 = load i64, ptr %a1126 + %t1131 = load { ptr, i64, i64 }, ptr %t1129 + %t1132 = extractvalue { ptr, i64, i64 } %t1131, 1 + %t1133 = icmp uge i64 %t1130, %t1132 + br i1 %t1133, label %range3810, label %inrange3811 +range3810: + call void @finch_panic_index(ptr @.str.2374, i64 1624, i64 %t1130, i64 %t1132) + unreachable +inrange3811: + %t1134 = extractvalue { ptr, i64, i64 } %t1131, 0 + %t1135 = getelementptr inbounds %S.ast.Node, ptr %t1134, i64 %t1130 + %t1136 = getelementptr inbounds %S.ast.Node, ptr %t1135, i32 0, i32 1 + %t1137 = load { ptr, i64, i64 }, ptr %t1136 + store { ptr, i64, i64 } %t1137, ptr %a1138 + store { ptr, i64, i64 } { ptr @.str.2375, i64 4, i64 0 }, ptr %a1139 + %t1140 = call i32 @finch_str_eq(ptr %a1138, ptr %a1139) + %t1141 = icmp ne i32 %t1140, 0 + br label %logic.from3812 +logic.from3812: + br i1 %t1141, label %logic.rhs3813, label %logic.end3814 +logic.rhs3813: + %t1142 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1142, i32 0, i32 1 + %t1144 = load i64, ptr %t1143 + %t1145 = icmp sgt i64 %t1144, 0 + br label %logic.rend3815 +logic.rend3815: + br label %logic.end3814 +logic.end3814: + %t1146 = phi i1 [ false, %logic.from3812 ], [ %t1145, %logic.rend3815 ] + br i1 %t1146, label %then3816, label %endif3818 +then3816: + %t1147 = load ptr, ptr %a1 + %t1148 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1149 = load i64, ptr %a1126 + %t1150 = load { ptr, i64, i64 }, ptr %t1148 + %t1151 = extractvalue { ptr, i64, i64 } %t1150, 1 + %t1152 = icmp uge i64 %t1149, %t1151 + br i1 %t1152, label %range3819, label %inrange3820 +range3819: + call void @finch_panic_index(ptr @.str.2376, i64 1625, i64 %t1149, i64 %t1151) + unreachable +inrange3820: + %t1153 = extractvalue { ptr, i64, i64 } %t1150, 0 + %t1154 = getelementptr inbounds %S.ast.Node, ptr %t1153, i64 %t1149 + %t1155 = load %S.ast.Node, ptr %t1154 + %t1156 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 2 + %t1157 = load { ptr, i64, i64 }, ptr %t1156 + store { ptr, i64, i64 } { ptr @.str.2377, i64 22, i64 0 }, ptr %a1159 + store { ptr, i64, i64 } %t1157, ptr %a1160 + call void @finch_str_concat(ptr %a1158, ptr %a1159, ptr %a1160) + %t1161 = load { ptr, i64, i64 }, ptr %a1158 + store { ptr, i64, i64 } %t1161, ptr %a1163 + store { ptr, i64, i64 } { ptr @.str.2378, i64 24, i64 0 }, ptr %a1164 + call void @finch_str_concat(ptr %a1162, ptr %a1163, ptr %a1164) + store { ptr, i64, i64 } %t1161, ptr %a1165 + call void @finch_str_drop(ptr %a1165) + %t1166 = load { ptr, i64, i64 }, ptr %a1162 + call void @finch.gen.fail(ptr %t1147, %S.ast.Node %t1155, { ptr, i64, i64 } %t1166) + store { ptr, i64, i64 } %t1166, ptr %a1167 + call void @finch_str_drop(ptr %a1167) + br label %endif3818 +endif3818: + %t1168 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 13 + %t1169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1168, i32 0, i32 1 + %t1170 = load ptr, ptr %a1 + %t1171 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1172 = load i64, ptr %a1126 + %t1173 = load { ptr, i64, i64 }, ptr %t1171 + %t1174 = extractvalue { ptr, i64, i64 } %t1173, 1 + %t1175 = icmp uge i64 %t1172, %t1174 + br i1 %t1175, label %range3821, label %inrange3822 +range3821: + call void @finch_panic_index(ptr @.str.2379, i64 1627, i64 %t1172, i64 %t1174) + unreachable +inrange3822: + %t1176 = extractvalue { ptr, i64, i64 } %t1173, 0 + %t1177 = getelementptr inbounds %S.ast.Node, ptr %t1176, i64 %t1172 + %t1178 = getelementptr inbounds %S.ast.Node, ptr %t1177, i32 0, i32 5 + %t1179 = load %S.ast.Type, ptr %t1178 + %t1180 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1181 = load i64, ptr %a1126 + %t1182 = load { ptr, i64, i64 }, ptr %t1180 + %t1183 = extractvalue { ptr, i64, i64 } %t1182, 1 + %t1184 = icmp uge i64 %t1181, %t1183 + br i1 %t1184, label %range3823, label %inrange3824 +range3823: + call void @finch_panic_index(ptr @.str.2380, i64 1627, i64 %t1181, i64 %t1183) + unreachable +inrange3824: + %t1185 = extractvalue { ptr, i64, i64 } %t1182, 0 + %t1186 = getelementptr inbounds %S.ast.Node, ptr %t1185, i64 %t1181 + %t1187 = load %S.ast.Node, ptr %t1186 + %t1188 = call %S.ast.Type @finch.gen.resolve(ptr %t1170, %S.ast.Type %t1179, %S.ast.Node %t1187) + %t1189 = load i64, ptr %t1169 + %t1190 = add i64 %t1189, 1 + call void @finch_arr_reserve(ptr %t1168, i64 %t1190, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t1191 = load ptr, ptr %t1168 + %t1192 = getelementptr inbounds %S.ast.Type, ptr %t1191, i64 %t1189 + store %S.ast.Type %t1188, ptr %t1192 + store i64 %t1190, ptr %t1169 + %t1193 = getelementptr inbounds %S.gen.FnSig, ptr %a1047, i32 0, i32 14 + %t1194 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1193, i32 0, i32 1 + %t1195 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 9 + %t1196 = load i64, ptr %a1126 + %t1197 = load { ptr, i64, i64 }, ptr %t1195 + %t1198 = extractvalue { ptr, i64, i64 } %t1197, 1 + %t1199 = icmp uge i64 %t1196, %t1198 + br i1 %t1199, label %range3825, label %inrange3826 +range3825: + call void @finch_panic_index(ptr @.str.2381, i64 1628, i64 %t1196, i64 %t1198) + unreachable +inrange3826: + %t1200 = extractvalue { ptr, i64, i64 } %t1197, 0 + %t1201 = getelementptr inbounds %S.ast.Node, ptr %t1200, i64 %t1196 + %t1202 = getelementptr inbounds %S.ast.Node, ptr %t1201, i32 0, i32 1 + %t1203 = load { ptr, i64, i64 }, ptr %t1202 + store { ptr, i64, i64 } %t1203, ptr %a1204 + call void @finch_str_copy(ptr %a1205, ptr %a1204) + %t1206 = load { ptr, i64, i64 }, ptr %a1205 + %t1207 = load i64, ptr %t1194 + %t1208 = add i64 %t1207, 1 + call void @finch_arr_reserve(ptr %t1193, i64 %t1208, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1209 = load ptr, ptr %t1193 + %t1210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1209, i64 %t1207 + store { ptr, i64, i64 } %t1206, ptr %t1210 + store i64 %t1208, ptr %t1194 + br label %for.step3808 +for.step3808: + %t1211 = load i64, ptr %a1126 + %t1212 = add i64 %t1211, 1 + store i64 %t1212, ptr %a1126 + br label %for.cond3806 +for.end3809: + %t1213 = getelementptr inbounds %S.ast.Node, ptr %a686, i32 0, i32 8 + %t1214 = load i1, ptr %t1213 + br i1 %t1214, label %then3827, label %endif3829 +then3827: + %t1215 = load ptr, ptr %a1 + %t1216 = load %S.ast.Node, ptr %a686 + %t1217 = load %S.gen.FnSig, ptr %a1047 + call void @finch.gen.checkExport(ptr %t1215, %S.ast.Node %t1216, %S.gen.FnSig %t1217) + br label %endif3829 +endif3829: + %t1218 = load ptr, ptr %a1 + %t1219 = icmp eq ptr %t1218, null + br i1 %t1219, label %panic3830, label %ok3831 +panic3830: + call void @finch_panic(ptr @.str.2382, i64 1633, ptr @.str.2383) + unreachable +ok3831: + %t1220 = getelementptr inbounds %S.gen.Gen, ptr %t1218, i32 0, i32 15 + %t1221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1220, i32 0, i32 1 + %t1222 = load %S.gen.FnSig, ptr %a1047 + store %S.gen.FnSig %t1222, ptr %a1223 + call void @finch.copy.S_gen_FnSig(ptr %a1224, ptr %a1223) + %t1225 = load %S.gen.FnSig, ptr %a1224 + %t1226 = load i64, ptr %t1221 + %t1227 = add i64 %t1226, 1 + call void @finch_arr_reserve(ptr %t1220, i64 %t1227, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) + %t1228 = load ptr, ptr %t1220 + %t1229 = getelementptr inbounds %S.gen.FnSig, ptr %t1228, i64 %t1226 + store %S.gen.FnSig %t1225, ptr %t1229 + store i64 %t1227, ptr %t1221 + call void @finch.drop.S_gen_FnSig(ptr %a1047) + call void @finch_str_drop(ptr %a789) + call void @finch.drop.S_ast_Node(ptr %a686) + br label %for.step3716 +for.step3716: + %t1230 = load i64, ptr %a663 + %t1231 = add i64 %t1230, 1 + store i64 %t1231, ptr %a663 + br label %for.cond3714 +for.end3717: + br label %for.step3702 +for.step3702: + %t1232 = load i64, ptr %a629 + %t1233 = add i64 %t1232, 1 + store i64 %t1233, ptr %a629 + br label %for.cond3700 +for.end3703: + store i1 true, ptr %a1234 + br label %while.cond3832 +while.cond3832: + %t1235 = load i1, ptr %a1234 + br i1 %t1235, label %while.body3833, label %while.end3834 +while.body3833: + store i1 false, ptr %a1234 + %t1236 = load ptr, ptr %a1 + %t1237 = icmp eq ptr %t1236, null + br i1 %t1237, label %panic3835, label %ok3836 +panic3835: + call void @finch_panic(ptr @.str.2384, i64 1641, ptr @.str.2385) + unreachable +ok3836: + %t1238 = getelementptr inbounds %S.gen.Gen, ptr %t1236, i32 0, i32 15 + %t1239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1238, i32 0, i32 1 + %t1240 = load i64, ptr %t1239 + store i64 0, ptr %a1241 + br label %for.cond3837 +for.cond3837: + %t1242 = load i64, ptr %a1241 + %t1243 = icmp slt i64 %t1242, %t1240 + br i1 %t1243, label %for.body3838, label %for.end3840 +for.body3838: + %t1244 = load ptr, ptr %a1 + %t1245 = icmp eq ptr %t1244, null + br i1 %t1245, label %panic3841, label %ok3842 +panic3841: + call void @finch_panic(ptr @.str.2386, i64 1642, ptr @.str.2387) + unreachable +ok3842: + %t1246 = getelementptr inbounds %S.gen.Gen, ptr %t1244, i32 0, i32 15 + %t1247 = load i64, ptr %a1241 + %t1248 = load { ptr, i64, i64 }, ptr %t1246 + %t1249 = extractvalue { ptr, i64, i64 } %t1248, 1 + %t1250 = icmp uge i64 %t1247, %t1249 + br i1 %t1250, label %range3843, label %inrange3844 +range3843: + call void @finch_panic_index(ptr @.str.2388, i64 1642, i64 %t1247, i64 %t1249) + unreachable +inrange3844: + %t1251 = extractvalue { ptr, i64, i64 } %t1248, 0 + %t1252 = getelementptr inbounds %S.gen.FnSig, ptr %t1251, i64 %t1247 + %t1253 = getelementptr inbounds %S.gen.FnSig, ptr %t1252, i32 0, i32 2 + %t1254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1253, i32 0, i32 1 + %t1255 = load i64, ptr %t1254 + %t1256 = icmp sgt i64 %t1255, 0 + br label %logic.from3845 +logic.from3845: + br i1 %t1256, label %logic.rhs3846, label %logic.end3847 +logic.rhs3846: + %t1257 = load ptr, ptr %a1 + %t1258 = icmp eq ptr %t1257, null + br i1 %t1258, label %panic3848, label %ok3849 +panic3848: + call void @finch_panic(ptr @.str.2389, i64 1642, ptr @.str.2390) + unreachable +ok3849: + %t1259 = getelementptr inbounds %S.gen.Gen, ptr %t1257, i32 0, i32 15 + %t1260 = load i64, ptr %a1241 + %t1261 = load { ptr, i64, i64 }, ptr %t1259 + %t1262 = extractvalue { ptr, i64, i64 } %t1261, 1 + %t1263 = icmp uge i64 %t1260, %t1262 + br i1 %t1263, label %range3850, label %inrange3851 +range3850: + call void @finch_panic_index(ptr @.str.2391, i64 1642, i64 %t1260, i64 %t1262) + unreachable +inrange3851: + %t1264 = extractvalue { ptr, i64, i64 } %t1261, 0 + %t1265 = getelementptr inbounds %S.gen.FnSig, ptr %t1264, i64 %t1260 + %t1266 = getelementptr inbounds %S.gen.FnSig, ptr %t1265, i32 0, i32 10 + %t1267 = load i1, ptr %t1266 + %t1268 = xor i1 %t1267, true + br label %logic.rend3852 +logic.rend3852: + br label %logic.end3847 +logic.end3847: + %t1269 = phi i1 [ false, %logic.from3845 ], [ %t1268, %logic.rend3852 ] + br i1 %t1269, label %then3853, label %endif3855 +then3853: + %t1270 = load ptr, ptr %a1 + %t1271 = icmp eq ptr %t1270, null + br i1 %t1271, label %panic3856, label %ok3857 +panic3856: + call void @finch_panic(ptr @.str.2392, i64 1643, ptr @.str.2393) + unreachable +ok3857: + %t1272 = getelementptr inbounds %S.gen.Gen, ptr %t1270, i32 0, i32 0 + %t1273 = load ptr, ptr %a1 + %t1274 = icmp eq ptr %t1273, null + br i1 %t1274, label %panic3858, label %ok3859 +panic3858: + call void @finch_panic(ptr @.str.2394, i64 1643, ptr @.str.2395) + unreachable +ok3859: + %t1275 = getelementptr inbounds %S.gen.Gen, ptr %t1273, i32 0, i32 15 + %t1276 = load i64, ptr %a1241 + %t1277 = load { ptr, i64, i64 }, ptr %t1275 + %t1278 = extractvalue { ptr, i64, i64 } %t1277, 1 + %t1279 = icmp uge i64 %t1276, %t1278 + br i1 %t1279, label %range3860, label %inrange3861 +range3860: + call void @finch_panic_index(ptr @.str.2396, i64 1643, i64 %t1276, i64 %t1278) + unreachable +inrange3861: + %t1280 = extractvalue { ptr, i64, i64 } %t1277, 0 + %t1281 = getelementptr inbounds %S.gen.FnSig, ptr %t1280, i64 %t1276 + %t1282 = getelementptr inbounds %S.gen.FnSig, ptr %t1281, i32 0, i32 16 + %t1283 = load i64, ptr %t1282 + %t1284 = load { ptr, i64, i64 }, ptr %t1272 + %t1285 = extractvalue { ptr, i64, i64 } %t1284, 1 + %t1286 = icmp uge i64 %t1283, %t1285 + br i1 %t1286, label %range3862, label %inrange3863 +range3862: + call void @finch_panic_index(ptr @.str.2397, i64 1643, i64 %t1283, i64 %t1285) + unreachable +inrange3863: + %t1287 = extractvalue { ptr, i64, i64 } %t1284, 0 + %t1288 = getelementptr inbounds %S.ast.Program, ptr %t1287, i64 %t1283 + %t1289 = getelementptr inbounds %S.ast.Program, ptr %t1288, i32 0, i32 8 + %t1290 = load ptr, ptr %a1 + %t1291 = icmp eq ptr %t1290, null + br i1 %t1291, label %panic3864, label %ok3865 +panic3864: + call void @finch_panic(ptr @.str.2398, i64 1643, ptr @.str.2399) + unreachable +ok3865: + %t1292 = getelementptr inbounds %S.gen.Gen, ptr %t1290, i32 0, i32 15 + %t1293 = load i64, ptr %a1241 + %t1294 = load { ptr, i64, i64 }, ptr %t1292 + %t1295 = extractvalue { ptr, i64, i64 } %t1294, 1 + %t1296 = icmp uge i64 %t1293, %t1295 + br i1 %t1296, label %range3866, label %inrange3867 +range3866: + call void @finch_panic_index(ptr @.str.2400, i64 1643, i64 %t1293, i64 %t1295) + unreachable +inrange3867: + %t1297 = extractvalue { ptr, i64, i64 } %t1294, 0 + %t1298 = getelementptr inbounds %S.gen.FnSig, ptr %t1297, i64 %t1293 + %t1299 = getelementptr inbounds %S.gen.FnSig, ptr %t1298, i32 0, i32 17 + %t1300 = load i64, ptr %t1299 + %t1301 = load { ptr, i64, i64 }, ptr %t1289 + %t1302 = extractvalue { ptr, i64, i64 } %t1301, 1 + %t1303 = icmp uge i64 %t1300, %t1302 + br i1 %t1303, label %range3868, label %inrange3869 +range3868: + call void @finch_panic_index(ptr @.str.2401, i64 1643, i64 %t1300, i64 %t1302) + unreachable +inrange3869: + %t1304 = extractvalue { ptr, i64, i64 } %t1301, 0 + %t1305 = getelementptr inbounds %S.ast.Node, ptr %t1304, i64 %t1300 + %t1306 = load %S.ast.Node, ptr %t1305 + store %S.ast.Node %t1306, ptr %a1307 + call void @finch.copy.S_ast_Node(ptr %a1308, ptr %a1307) + %t1309 = load %S.ast.Node, ptr %a1308 + store %S.ast.Node %t1309, ptr %a1310 + %t1311 = load ptr, ptr %a1 + %t1312 = getelementptr inbounds %S.ast.Node, ptr %a1310, i32 0, i32 9 + %t1313 = getelementptr inbounds %S.ast.Node, ptr %a1310, i32 0, i32 9 + %t1314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1313, i32 0, i32 1 + %t1315 = load i64, ptr %t1314 + %t1316 = sub i64 %t1315, 1 + %t1317 = load { ptr, i64, i64 }, ptr %t1312 + %t1318 = extractvalue { ptr, i64, i64 } %t1317, 1 + %t1319 = icmp uge i64 %t1316, %t1318 + br i1 %t1319, label %range3870, label %inrange3871 +range3870: + call void @finch_panic_index(ptr @.str.2403, i64 1644, i64 %t1316, i64 %t1318) + unreachable +inrange3871: + %t1320 = extractvalue { ptr, i64, i64 } %t1317, 0 + %t1321 = getelementptr inbounds %S.ast.Node, ptr %t1320, i64 %t1316 + %t1322 = load %S.ast.Node, ptr %t1321 + %t1323 = call i1 @finch.gen.mutates(ptr %t1311, { ptr, i64, i64 } { ptr @.str.2402, i64 4, i64 0 }, %S.ast.Node %t1322) + br i1 %t1323, label %then3872, label %endif3874 +then3872: + %t1324 = load ptr, ptr %a1 + %t1325 = icmp eq ptr %t1324, null + br i1 %t1325, label %panic3875, label %ok3876 +panic3875: + call void @finch_panic(ptr @.str.2404, i64 1645, ptr @.str.2405) + unreachable +ok3876: + %t1326 = getelementptr inbounds %S.gen.Gen, ptr %t1324, i32 0, i32 15 + %t1327 = load i64, ptr %a1241 + %t1328 = load { ptr, i64, i64 }, ptr %t1326 + %t1329 = extractvalue { ptr, i64, i64 } %t1328, 1 + %t1330 = icmp uge i64 %t1327, %t1329 + br i1 %t1330, label %range3877, label %inrange3878 +range3877: + call void @finch_panic_index(ptr @.str.2406, i64 1645, i64 %t1327, i64 %t1329) + unreachable +inrange3878: + %t1331 = extractvalue { ptr, i64, i64 } %t1328, 0 + %t1332 = getelementptr inbounds %S.gen.FnSig, ptr %t1331, i64 %t1327 + %t1333 = getelementptr inbounds %S.gen.FnSig, ptr %t1332, i32 0, i32 10 + store i1 true, ptr %t1333 + %t1334 = load ptr, ptr %a1 + %t1335 = icmp eq ptr %t1334, null + br i1 %t1335, label %panic3879, label %ok3880 +panic3879: + call void @finch_panic(ptr @.str.2407, i64 1646, ptr @.str.2408) + unreachable +ok3880: + %t1336 = getelementptr inbounds %S.gen.Gen, ptr %t1334, i32 0, i32 24 + %t1337 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1336, i32 0, i32 1 + %t1338 = load ptr, ptr %a1 + %t1339 = icmp eq ptr %t1338, null + br i1 %t1339, label %panic3881, label %ok3882 +panic3881: + call void @finch_panic(ptr @.str.2409, i64 1646, ptr @.str.2410) + unreachable +ok3882: + %t1340 = getelementptr inbounds %S.gen.Gen, ptr %t1338, i32 0, i32 15 + %t1341 = load i64, ptr %a1241 + %t1342 = load { ptr, i64, i64 }, ptr %t1340 + %t1343 = extractvalue { ptr, i64, i64 } %t1342, 1 + %t1344 = icmp uge i64 %t1341, %t1343 + br i1 %t1344, label %range3883, label %inrange3884 +range3883: + call void @finch_panic_index(ptr @.str.2411, i64 1646, i64 %t1341, i64 %t1343) + unreachable +inrange3884: + %t1345 = extractvalue { ptr, i64, i64 } %t1342, 0 + %t1346 = getelementptr inbounds %S.gen.FnSig, ptr %t1345, i64 %t1341 + %t1347 = getelementptr inbounds %S.gen.FnSig, ptr %t1346, i32 0, i32 1 + %t1348 = load { ptr, i64, i64 }, ptr %t1347 + store { ptr, i64, i64 } %t1348, ptr %a1349 + call void @finch_str_copy(ptr %a1350, ptr %a1349) + %t1351 = load { ptr, i64, i64 }, ptr %a1350 + %t1352 = load i64, ptr %t1337 + %t1353 = add i64 %t1352, 1 + call void @finch_arr_reserve(ptr %t1336, i64 %t1353, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1354 = load ptr, ptr %t1336 + %t1355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1354, i64 %t1352 + store { ptr, i64, i64 } %t1351, ptr %t1355 + store i64 %t1353, ptr %t1337 + store i1 true, ptr %a1234 + br label %endif3874 +endif3874: + call void @finch.drop.S_ast_Node(ptr %a1310) + br label %endif3855 +endif3855: + br label %for.step3839 +for.step3839: + %t1356 = load i64, ptr %a1241 + %t1357 = add i64 %t1356, 1 + store i64 %t1357, ptr %a1241 + br label %for.cond3837 +for.end3840: + %t1358 = load ptr, ptr %a1 + %t1359 = icmp eq ptr %t1358, null + br i1 %t1359, label %panic3885, label %ok3886 +panic3885: + call void @finch_panic(ptr @.str.2412, i64 1651, ptr @.str.2413) + unreachable +ok3886: + %t1360 = getelementptr inbounds %S.gen.Gen, ptr %t1358, i32 0, i32 17 + %t1361 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1360, i32 0, i32 1 + %t1362 = load i64, ptr %t1361 + store i64 0, ptr %a1363 + br label %for.cond3887 +for.cond3887: + %t1364 = load i64, ptr %a1363 + %t1365 = icmp slt i64 %t1364, %t1362 + br i1 %t1365, label %for.body3888, label %for.end3890 +for.body3888: + %t1366 = load ptr, ptr %a1 + %t1367 = icmp eq ptr %t1366, null + br i1 %t1367, label %panic3891, label %ok3892 +panic3891: + call void @finch_panic(ptr @.str.2414, i64 1652, ptr @.str.2415) + unreachable +ok3892: + %t1368 = getelementptr inbounds %S.gen.Gen, ptr %t1366, i32 0, i32 17 + %t1369 = load i64, ptr %a1363 + %t1370 = load { ptr, i64, i64 }, ptr %t1368 + %t1371 = extractvalue { ptr, i64, i64 } %t1370, 1 + %t1372 = icmp uge i64 %t1369, %t1371 + br i1 %t1372, label %range3893, label %inrange3894 +range3893: + call void @finch_panic_index(ptr @.str.2416, i64 1652, i64 %t1369, i64 %t1371) + unreachable +inrange3894: + %t1373 = extractvalue { ptr, i64, i64 } %t1370, 0 + %t1374 = getelementptr inbounds %S.gen.Template, ptr %t1373, i64 %t1369 + %t1375 = load %S.gen.Template, ptr %t1374 + store %S.gen.Template %t1375, ptr %a1376 + call void @finch.copy.S_gen_Template(ptr %a1377, ptr %a1376) + %t1378 = load %S.gen.Template, ptr %a1377 + store %S.gen.Template %t1378, ptr %a1379 + %t1380 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 2 + %t1381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1380, i32 0, i32 1 + %t1382 = load i64, ptr %t1381 + %t1383 = icmp sgt i64 %t1382, 0 + br label %logic.from3895 +logic.from3895: + br i1 %t1383, label %logic.rhs3896, label %logic.end3897 +logic.rhs3896: + %t1384 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 7 + %t1385 = load i1, ptr %t1384 + %t1386 = xor i1 %t1385, true + br label %logic.rend3898 +logic.rend3898: + br label %logic.end3897 +logic.end3897: + %t1387 = phi i1 [ false, %logic.from3895 ], [ %t1386, %logic.rend3898 ] + br i1 %t1387, label %then3899, label %endif3901 +then3899: + %t1388 = load ptr, ptr %a1 + %t1389 = icmp eq ptr %t1388, null + br i1 %t1389, label %panic3902, label %ok3903 +panic3902: + call void @finch_panic(ptr @.str.2417, i64 1654, ptr @.str.2418) + unreachable +ok3903: + %t1390 = getelementptr inbounds %S.gen.Gen, ptr %t1388, i32 0, i32 0 + %t1391 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 4 + %t1392 = load i64, ptr %t1391 + %t1393 = load { ptr, i64, i64 }, ptr %t1390 + %t1394 = extractvalue { ptr, i64, i64 } %t1393, 1 + %t1395 = icmp uge i64 %t1392, %t1394 + br i1 %t1395, label %range3904, label %inrange3905 +range3904: + call void @finch_panic_index(ptr @.str.2419, i64 1654, i64 %t1392, i64 %t1394) + unreachable +inrange3905: + %t1396 = extractvalue { ptr, i64, i64 } %t1393, 0 + %t1397 = getelementptr inbounds %S.ast.Program, ptr %t1396, i64 %t1392 + %t1398 = getelementptr inbounds %S.ast.Program, ptr %t1397, i32 0, i32 8 + %t1399 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 5 + %t1400 = load i64, ptr %t1399 + %t1401 = load { ptr, i64, i64 }, ptr %t1398 + %t1402 = extractvalue { ptr, i64, i64 } %t1401, 1 + %t1403 = icmp uge i64 %t1400, %t1402 + br i1 %t1403, label %range3906, label %inrange3907 +range3906: + call void @finch_panic_index(ptr @.str.2420, i64 1654, i64 %t1400, i64 %t1402) + unreachable +inrange3907: + %t1404 = extractvalue { ptr, i64, i64 } %t1401, 0 + %t1405 = getelementptr inbounds %S.ast.Node, ptr %t1404, i64 %t1400 + %t1406 = load %S.ast.Node, ptr %t1405 + store %S.ast.Node %t1406, ptr %a1407 + call void @finch.copy.S_ast_Node(ptr %a1408, ptr %a1407) + %t1409 = load %S.ast.Node, ptr %a1408 + store %S.ast.Node %t1409, ptr %a1410 + %t1411 = load ptr, ptr %a1 + %t1412 = getelementptr inbounds %S.ast.Node, ptr %a1410, i32 0, i32 9 + %t1413 = getelementptr inbounds %S.ast.Node, ptr %a1410, i32 0, i32 9 + %t1414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1413, i32 0, i32 1 + %t1415 = load i64, ptr %t1414 + %t1416 = sub i64 %t1415, 1 + %t1417 = load { ptr, i64, i64 }, ptr %t1412 + %t1418 = extractvalue { ptr, i64, i64 } %t1417, 1 + %t1419 = icmp uge i64 %t1416, %t1418 + br i1 %t1419, label %range3908, label %inrange3909 +range3908: + call void @finch_panic_index(ptr @.str.2422, i64 1655, i64 %t1416, i64 %t1418) + unreachable +inrange3909: + %t1420 = extractvalue { ptr, i64, i64 } %t1417, 0 + %t1421 = getelementptr inbounds %S.ast.Node, ptr %t1420, i64 %t1416 + %t1422 = load %S.ast.Node, ptr %t1421 + %t1423 = call i1 @finch.gen.mutates(ptr %t1411, { ptr, i64, i64 } { ptr @.str.2421, i64 4, i64 0 }, %S.ast.Node %t1422) + br i1 %t1423, label %then3910, label %endif3912 +then3910: + %t1424 = load ptr, ptr %a1 + %t1425 = icmp eq ptr %t1424, null + br i1 %t1425, label %panic3913, label %ok3914 +panic3913: + call void @finch_panic(ptr @.str.2423, i64 1656, ptr @.str.2424) + unreachable +ok3914: + %t1426 = getelementptr inbounds %S.gen.Gen, ptr %t1424, i32 0, i32 17 + %t1427 = load i64, ptr %a1363 + %t1428 = load { ptr, i64, i64 }, ptr %t1426 + %t1429 = extractvalue { ptr, i64, i64 } %t1428, 1 + %t1430 = icmp uge i64 %t1427, %t1429 + br i1 %t1430, label %range3915, label %inrange3916 +range3915: + call void @finch_panic_index(ptr @.str.2425, i64 1656, i64 %t1427, i64 %t1429) + unreachable +inrange3916: + %t1431 = extractvalue { ptr, i64, i64 } %t1428, 0 + %t1432 = getelementptr inbounds %S.gen.Template, ptr %t1431, i64 %t1427 + %t1433 = getelementptr inbounds %S.gen.Template, ptr %t1432, i32 0, i32 7 + store i1 true, ptr %t1433 + %t1434 = load ptr, ptr %a1 + %t1435 = icmp eq ptr %t1434, null + br i1 %t1435, label %panic3917, label %ok3918 +panic3917: + call void @finch_panic(ptr @.str.2426, i64 1657, ptr @.str.2427) + unreachable +ok3918: + %t1436 = getelementptr inbounds %S.gen.Gen, ptr %t1434, i32 0, i32 24 + %t1437 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1436, i32 0, i32 1 + %t1438 = getelementptr inbounds %S.gen.Template, ptr %a1379, i32 0, i32 1 + %t1439 = load { ptr, i64, i64 }, ptr %t1438 + store { ptr, i64, i64 } %t1439, ptr %a1440 + call void @finch_str_copy(ptr %a1441, ptr %a1440) + %t1442 = load { ptr, i64, i64 }, ptr %a1441 + %t1443 = load i64, ptr %t1437 + %t1444 = add i64 %t1443, 1 + call void @finch_arr_reserve(ptr %t1436, i64 %t1444, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t1445 = load ptr, ptr %t1436 + %t1446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1445, i64 %t1443 + store { ptr, i64, i64 } %t1442, ptr %t1446 + store i64 %t1444, ptr %t1437 + store i1 true, ptr %a1234 + br label %endif3912 +endif3912: + call void @finch.drop.S_ast_Node(ptr %a1410) + br label %endif3901 +endif3901: + call void @finch.drop.S_gen_Template(ptr %a1379) + br label %for.step3889 +for.step3889: + %t1447 = load i64, ptr %a1363 + %t1448 = add i64 %t1447, 1 + store i64 %t1448, ptr %a1363 + br label %for.cond3887 +for.end3890: + br label %while.cond3832 +while.end3834: + %t1449 = load ptr, ptr %a1 + %t1450 = icmp eq ptr %t1449, null + br i1 %t1450, label %panic3919, label %ok3920 +panic3919: + call void @finch_panic(ptr @.str.2428, i64 1664, ptr @.str.2429) + unreachable +ok3920: + %t1451 = getelementptr inbounds %S.gen.Gen, ptr %t1449, i32 0, i32 15 + %t1452 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1451, i32 0, i32 1 + %t1453 = load i64, ptr %t1452 + store i64 0, ptr %a1454 + br label %for.cond3921 +for.cond3921: + %t1455 = load i64, ptr %a1454 + %t1456 = icmp slt i64 %t1455, %t1453 + br i1 %t1456, label %for.body3922, label %for.end3924 +for.body3922: + %t1457 = load ptr, ptr %a1 + %t1458 = icmp eq ptr %t1457, null + br i1 %t1458, label %panic3925, label %ok3926 +panic3925: + call void @finch_panic(ptr @.str.2430, i64 1665, ptr @.str.2431) + unreachable +ok3926: + %t1459 = getelementptr inbounds %S.gen.Gen, ptr %t1457, i32 0, i32 0 + %t1460 = load ptr, ptr %a1 + %t1461 = icmp eq ptr %t1460, null + br i1 %t1461, label %panic3927, label %ok3928 +panic3927: + call void @finch_panic(ptr @.str.2432, i64 1665, ptr @.str.2433) + unreachable +ok3928: + %t1462 = getelementptr inbounds %S.gen.Gen, ptr %t1460, i32 0, i32 15 + %t1463 = load i64, ptr %a1454 + %t1464 = load { ptr, i64, i64 }, ptr %t1462 + %t1465 = extractvalue { ptr, i64, i64 } %t1464, 1 + %t1466 = icmp uge i64 %t1463, %t1465 + br i1 %t1466, label %range3929, label %inrange3930 +range3929: + call void @finch_panic_index(ptr @.str.2434, i64 1665, i64 %t1463, i64 %t1465) + unreachable +inrange3930: + %t1467 = extractvalue { ptr, i64, i64 } %t1464, 0 + %t1468 = getelementptr inbounds %S.gen.FnSig, ptr %t1467, i64 %t1463 + %t1469 = getelementptr inbounds %S.gen.FnSig, ptr %t1468, i32 0, i32 16 + %t1470 = load i64, ptr %t1469 + %t1471 = load { ptr, i64, i64 }, ptr %t1459 + %t1472 = extractvalue { ptr, i64, i64 } %t1471, 1 + %t1473 = icmp uge i64 %t1470, %t1472 + br i1 %t1473, label %range3931, label %inrange3932 +range3931: + call void @finch_panic_index(ptr @.str.2435, i64 1665, i64 %t1470, i64 %t1472) + unreachable +inrange3932: + %t1474 = extractvalue { ptr, i64, i64 } %t1471, 0 + %t1475 = getelementptr inbounds %S.ast.Program, ptr %t1474, i64 %t1470 + %t1476 = getelementptr inbounds %S.ast.Program, ptr %t1475, i32 0, i32 8 + %t1477 = load ptr, ptr %a1 + %t1478 = icmp eq ptr %t1477, null + br i1 %t1478, label %panic3933, label %ok3934 +panic3933: + call void @finch_panic(ptr @.str.2436, i64 1665, ptr @.str.2437) + unreachable +ok3934: + %t1479 = getelementptr inbounds %S.gen.Gen, ptr %t1477, i32 0, i32 15 + %t1480 = load i64, ptr %a1454 + %t1481 = load { ptr, i64, i64 }, ptr %t1479 + %t1482 = extractvalue { ptr, i64, i64 } %t1481, 1 + %t1483 = icmp uge i64 %t1480, %t1482 + br i1 %t1483, label %range3935, label %inrange3936 +range3935: + call void @finch_panic_index(ptr @.str.2438, i64 1665, i64 %t1480, i64 %t1482) + unreachable +inrange3936: + %t1484 = extractvalue { ptr, i64, i64 } %t1481, 0 + %t1485 = getelementptr inbounds %S.gen.FnSig, ptr %t1484, i64 %t1480 + %t1486 = getelementptr inbounds %S.gen.FnSig, ptr %t1485, i32 0, i32 17 + %t1487 = load i64, ptr %t1486 + %t1488 = load { ptr, i64, i64 }, ptr %t1476 + %t1489 = extractvalue { ptr, i64, i64 } %t1488, 1 + %t1490 = icmp uge i64 %t1487, %t1489 + br i1 %t1490, label %range3937, label %inrange3938 +range3937: + call void @finch_panic_index(ptr @.str.2439, i64 1665, i64 %t1487, i64 %t1489) + unreachable +inrange3938: + %t1491 = extractvalue { ptr, i64, i64 } %t1488, 0 + %t1492 = getelementptr inbounds %S.ast.Node, ptr %t1491, i64 %t1487 + %t1493 = load %S.ast.Node, ptr %t1492 + store %S.ast.Node %t1493, ptr %a1494 + call void @finch.copy.S_ast_Node(ptr %a1495, ptr %a1494) + %t1496 = load %S.ast.Node, ptr %a1495 + store %S.ast.Node %t1496, ptr %a1497 + %t1498 = getelementptr inbounds %S.ast.Node, ptr %a1497, i32 0, i32 9 + %t1499 = getelementptr inbounds %S.ast.Node, ptr %a1497, i32 0, i32 9 + %t1500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1499, i32 0, i32 1 + %t1501 = load i64, ptr %t1500 + %t1502 = sub i64 %t1501, 1 + %t1503 = load { ptr, i64, i64 }, ptr %t1498 + %t1504 = extractvalue { ptr, i64, i64 } %t1503, 1 + %t1505 = icmp uge i64 %t1502, %t1504 + br i1 %t1505, label %range3939, label %inrange3940 +range3939: + call void @finch_panic_index(ptr @.str.2440, i64 1666, i64 %t1502, i64 %t1504) + unreachable +inrange3940: + %t1506 = extractvalue { ptr, i64, i64 } %t1503, 0 + %t1507 = getelementptr inbounds %S.ast.Node, ptr %t1506, i64 %t1502 + %t1508 = load %S.ast.Node, ptr %t1507 + store %S.ast.Node %t1508, ptr %a1509 + call void @finch.copy.S_ast_Node(ptr %a1510, ptr %a1509) + %t1511 = load %S.ast.Node, ptr %a1510 + store %S.ast.Node %t1511, ptr %a1512 + %t1513 = load ptr, ptr %a1 + %t1514 = icmp eq ptr %t1513, null + br i1 %t1514, label %panic3941, label %ok3942 +panic3941: + call void @finch_panic(ptr @.str.2441, i64 1667, ptr @.str.2442) + unreachable +ok3942: + %t1515 = getelementptr inbounds %S.gen.Gen, ptr %t1513, i32 0, i32 15 + %t1516 = load i64, ptr %a1454 + %t1517 = load { ptr, i64, i64 }, ptr %t1515 + %t1518 = extractvalue { ptr, i64, i64 } %t1517, 1 + %t1519 = icmp uge i64 %t1516, %t1518 + br i1 %t1519, label %range3943, label %inrange3944 +range3943: + call void @finch_panic_index(ptr @.str.2443, i64 1667, i64 %t1516, i64 %t1518) + unreachable +inrange3944: + %t1520 = extractvalue { ptr, i64, i64 } %t1517, 0 + %t1521 = getelementptr inbounds %S.gen.FnSig, ptr %t1520, i64 %t1516 + %t1522 = getelementptr inbounds %S.gen.FnSig, ptr %t1521, i32 0, i32 13 + %t1523 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1522, i32 0, i32 1 + %t1524 = load i64, ptr %t1523 + store i64 0, ptr %a1525 + br label %for.cond3945 +for.cond3945: + %t1526 = load i64, ptr %a1525 + %t1527 = icmp slt i64 %t1526, %t1524 + br i1 %t1527, label %for.body3946, label %for.end3948 +for.body3946: + %t1528 = load ptr, ptr %a1 + %t1529 = icmp eq ptr %t1528, null + br i1 %t1529, label %panic3949, label %ok3950 +panic3949: + call void @finch_panic(ptr @.str.2444, i64 1668, ptr @.str.2445) + unreachable +ok3950: + %t1530 = getelementptr inbounds %S.gen.Gen, ptr %t1528, i32 0, i32 15 + %t1531 = load i64, ptr %a1454 + %t1532 = load { ptr, i64, i64 }, ptr %t1530 + %t1533 = extractvalue { ptr, i64, i64 } %t1532, 1 + %t1534 = icmp uge i64 %t1531, %t1533 + br i1 %t1534, label %range3951, label %inrange3952 +range3951: + call void @finch_panic_index(ptr @.str.2446, i64 1668, i64 %t1531, i64 %t1533) + unreachable +inrange3952: + %t1535 = extractvalue { ptr, i64, i64 } %t1532, 0 + %t1536 = getelementptr inbounds %S.gen.FnSig, ptr %t1535, i64 %t1531 + %t1537 = getelementptr inbounds %S.gen.FnSig, ptr %t1536, i32 0, i32 13 + %t1538 = load i64, ptr %a1525 + %t1539 = load { ptr, i64, i64 }, ptr %t1537 + %t1540 = extractvalue { ptr, i64, i64 } %t1539, 1 + %t1541 = icmp uge i64 %t1538, %t1540 + br i1 %t1541, label %range3953, label %inrange3954 +range3953: + call void @finch_panic_index(ptr @.str.2447, i64 1668, i64 %t1538, i64 %t1540) + unreachable +inrange3954: + %t1542 = extractvalue { ptr, i64, i64 } %t1539, 0 + %t1543 = getelementptr inbounds %S.ast.Type, ptr %t1542, i64 %t1538 + %t1544 = load %S.ast.Type, ptr %t1543 + store %S.ast.Type %t1544, ptr %a1545 + call void @finch.copy.S_ast_Type(ptr %a1546, ptr %a1545) + %t1547 = load %S.ast.Type, ptr %a1546 + store %S.ast.Type %t1547, ptr %a1548 + %t1549 = load ptr, ptr %a1 + %t1550 = icmp eq ptr %t1549, null + br i1 %t1550, label %panic3955, label %ok3956 +panic3955: + call void @finch_panic(ptr @.str.2448, i64 1669, ptr @.str.2449) + unreachable +ok3956: + %t1551 = getelementptr inbounds %S.gen.Gen, ptr %t1549, i32 0, i32 15 + %t1552 = load i64, ptr %a1454 + %t1553 = load { ptr, i64, i64 }, ptr %t1551 + %t1554 = extractvalue { ptr, i64, i64 } %t1553, 1 + %t1555 = icmp uge i64 %t1552, %t1554 + br i1 %t1555, label %range3957, label %inrange3958 +range3957: + call void @finch_panic_index(ptr @.str.2450, i64 1669, i64 %t1552, i64 %t1554) + unreachable +inrange3958: + %t1556 = extractvalue { ptr, i64, i64 } %t1553, 0 + %t1557 = getelementptr inbounds %S.gen.FnSig, ptr %t1556, i64 %t1552 + %t1558 = getelementptr inbounds %S.gen.FnSig, ptr %t1557, i32 0, i32 15 + %t1559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1558, i32 0, i32 1 + %t1560 = load ptr, ptr %a1 + %t1561 = load %S.ast.Type, ptr %a1548 + %t1562 = call i1 @finch.gen.owning(ptr %t1560, %S.ast.Type %t1561) + br label %logic.from3959 +logic.from3959: + br i1 %t1562, label %logic.rhs3960, label %logic.end3961 +logic.rhs3960: + %t1563 = load ptr, ptr %a1 + %t1564 = load ptr, ptr %a1 + %t1565 = icmp eq ptr %t1564, null + br i1 %t1565, label %panic3962, label %ok3963 +panic3962: + call void @finch_panic(ptr @.str.2451, i64 1669, ptr @.str.2452) + unreachable +ok3963: + %t1566 = getelementptr inbounds %S.gen.Gen, ptr %t1564, i32 0, i32 15 + %t1567 = load i64, ptr %a1454 + %t1568 = load { ptr, i64, i64 }, ptr %t1566 + %t1569 = extractvalue { ptr, i64, i64 } %t1568, 1 + %t1570 = icmp uge i64 %t1567, %t1569 + br i1 %t1570, label %range3964, label %inrange3965 +range3964: + call void @finch_panic_index(ptr @.str.2453, i64 1669, i64 %t1567, i64 %t1569) + unreachable +inrange3965: + %t1571 = extractvalue { ptr, i64, i64 } %t1568, 0 + %t1572 = getelementptr inbounds %S.gen.FnSig, ptr %t1571, i64 %t1567 + %t1573 = getelementptr inbounds %S.gen.FnSig, ptr %t1572, i32 0, i32 14 + %t1574 = load i64, ptr %a1525 + %t1575 = load { ptr, i64, i64 }, ptr %t1573 + %t1576 = extractvalue { ptr, i64, i64 } %t1575, 1 + %t1577 = icmp uge i64 %t1574, %t1576 + br i1 %t1577, label %range3966, label %inrange3967 +range3966: + call void @finch_panic_index(ptr @.str.2454, i64 1669, i64 %t1574, i64 %t1576) + unreachable +inrange3967: + %t1578 = extractvalue { ptr, i64, i64 } %t1575, 0 + %t1579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1578, i64 %t1574 + %t1580 = load { ptr, i64, i64 }, ptr %t1579 + %t1581 = load %S.ast.Node, ptr %a1512 + %t1582 = call i1 @finch.gen.mutates(ptr %t1563, { ptr, i64, i64 } %t1580, %S.ast.Node %t1581) + %t1583 = xor i1 %t1582, true + br label %logic.rend3968 +logic.rend3968: + br label %logic.end3961 +logic.end3961: + %t1584 = phi i1 [ false, %logic.from3959 ], [ %t1583, %logic.rend3968 ] + %t1585 = load i64, ptr %t1559 + %t1586 = add i64 %t1585, 1 + call void @finch_arr_reserve(ptr %t1558, i64 %t1586, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + %t1587 = load ptr, ptr %t1558 + %t1588 = getelementptr inbounds i1, ptr %t1587, i64 %t1585 + store i1 %t1584, ptr %t1588 + store i64 %t1586, ptr %t1559 + call void @finch.drop.S_ast_Type(ptr %a1548) + br label %for.step3947 +for.step3947: + %t1589 = load i64, ptr %a1525 + %t1590 = add i64 %t1589, 1 + store i64 %t1590, ptr %a1525 + br label %for.cond3945 +for.end3948: + call void @finch.drop.S_ast_Node(ptr %a1512) + call void @finch.drop.S_ast_Node(ptr %a1497) + br label %for.step3923 +for.step3923: + %t1591 = load i64, ptr %a1454 + %t1592 = add i64 %t1591, 1 + store i64 %t1592, ptr %a1454 + br label %for.cond3921 +for.end3924: + ret void +} + +define internal i64 @finch.gen.findTemplate(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i1, align 16 + %a11 = alloca i64, align 16 + %a24 = alloca %S.gen.Template, align 16 + %a25 = alloca %S.gen.Template, align 16 + %a27 = alloca %S.gen.Template, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic3969, label %ok3970 +panic3969: + call void @finch_panic(ptr @.str.2455, i64 1675, ptr @.str.2456) + unreachable +ok3970: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + store i64 0, ptr %a11 + br label %for.cond3971 +for.cond3971: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t10 + br i1 %t13, label %for.body3972, label %for.end3974 +for.body3972: + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic3975, label %ok3976 +panic3975: + call void @finch_panic(ptr @.str.2457, i64 1676, ptr @.str.2458) + unreachable +ok3976: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 17 + %t17 = load i64, ptr %a11 + %t18 = load { ptr, i64, i64 }, ptr %t16 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 %t17, %t19 + br i1 %t20, label %range3977, label %inrange3978 +range3977: + call void @finch_panic_index(ptr @.str.2459, i64 1676, i64 %t17, i64 %t19) + unreachable +inrange3978: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.gen.Template, ptr %t21, i64 %t17 + %t23 = load %S.gen.Template, ptr %t22 + store %S.gen.Template %t23, ptr %a24 + call void @finch.copy.S_gen_Template(ptr %a25, ptr %a24) + %t26 = load %S.gen.Template, ptr %a25 + store %S.gen.Template %t26, ptr %a27 + %t28 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 0 + %t29 = load { ptr, i64, i64 }, ptr %t28 + %t30 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } %t30, ptr %a32 + %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) + %t34 = icmp ne i32 %t33, 0 + br label %logic.from3979 +logic.from3979: + br i1 %t34, label %logic.rhs3980, label %logic.end3981 +logic.rhs3980: + %t35 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 1 + %t36 = load { ptr, i64, i64 }, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t36, ptr %a38 + store { ptr, i64, i64 } %t37, ptr %a39 + %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) + %t41 = icmp ne i32 %t40, 0 + br label %logic.rend3982 +logic.rend3982: + br label %logic.end3981 +logic.end3981: + %t42 = phi i1 [ false, %logic.from3979 ], [ %t41, %logic.rend3982 ] + br label %logic.from3983 +logic.from3983: + br i1 %t42, label %logic.rhs3984, label %logic.end3985 +logic.rhs3984: + %t43 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 2 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t44, ptr %a46 + store { ptr, i64, i64 } %t45, ptr %a47 + %t48 = call i32 @finch_str_eq(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + br label %logic.rend3986 +logic.rend3986: + br label %logic.end3985 +logic.end3985: + %t50 = phi i1 [ false, %logic.from3983 ], [ %t49, %logic.rend3986 ] + br label %logic.from3987 +logic.from3987: + br i1 %t50, label %logic.rhs3988, label %logic.end3989 +logic.rhs3988: + %t51 = getelementptr inbounds %S.gen.Template, ptr %a27, i32 0, i32 6 + %t52 = load i1, ptr %t51 + %t53 = load i1, ptr %a5 + %t54 = icmp eq i1 %t52, %t53 + br label %logic.rend3990 +logic.rend3990: + br label %logic.end3989 +logic.end3989: + %t55 = phi i1 [ false, %logic.from3987 ], [ %t54, %logic.rend3990 ] + br i1 %t55, label %then3991, label %endif3993 +then3991: + %t56 = load i64, ptr %a11 + call void @finch.drop.S_gen_Template(ptr %a27) + ret i64 %t56 +endif3993: + call void @finch.drop.S_gen_Template(ptr %a27) + br label %for.step3973 +for.step3973: + %t57 = load i64, ptr %a11 + %t58 = add i64 %t57, 1 + store i64 %t58, ptr %a11 + br label %for.cond3971 +for.end3974: + ret i64 -1 +} + +define internal { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond3994 +each.cond3994: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body3995, label %each.end3997 +each.body3995: + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 %t6 + %t10 = load %S.ast.Type, ptr %t9 + store %S.ast.Type %t10, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t13 = load %S.ast.Type, ptr %a11 + %t14 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t13) + %t15 = load i64, ptr %t12 + %t16 = add i64 %t15, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t16, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t17 = load ptr, ptr %a2 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t15 + store { ptr, i64, i64 } %t14, ptr %t18 + store i64 %t16, ptr %t12 + br label %each.step3996 +each.step3996: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %each.cond3994 +each.end3997: + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2460, i64 2, i64 0 }, ptr %a22 + call void @finch_str_join(ptr %a23, ptr %a2, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t24 +} + +define internal %S.ast.Type @finch.gen.instStruct(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a10 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca %S.gen.Template, align 16 + %a48 = alloca %S.gen.Template, align 16 + %a50 = alloca %S.gen.Template, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + %t8 = load { ptr, i64, i64 }, ptr %a3 + %t9 = call i64 @finch.gen.findTemplate(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, { ptr, i64, i64 } { ptr @.str.2461, i64 0, i64 0 }, i1 true) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br i1 %t12, label %then3998, label %endif4000 +then3998: + %t13 = load ptr, ptr %a1 + %t14 = load %S.ast.Node, ptr %a5 + %t15 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2462, i64 34, i64 0 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.2463, i64 28, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + %t25 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t24, ptr %a27 + store { ptr, i64, i64 } %t25, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t24, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.2464, i64 34, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + call void @finch.gen.fail(ptr %t13, %S.ast.Node %t14, { ptr, i64, i64 } %t35) + store { ptr, i64, i64 } %t35, ptr %a36 + call void @finch_str_drop(ptr %a36) + br label %endif4000 +endif4000: + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic4001, label %ok4002 +panic4001: + call void @finch_panic(ptr @.str.2465, i64 1698, ptr @.str.2466) + unreachable +ok4002: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 17 + %t40 = load i64, ptr %a10 + %t41 = load { ptr, i64, i64 }, ptr %t39 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 %t40, %t42 + br i1 %t43, label %range4003, label %inrange4004 +range4003: + call void @finch_panic_index(ptr @.str.2467, i64 1698, i64 %t40, i64 %t42) + unreachable +inrange4004: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds %S.gen.Template, ptr %t44, i64 %t40 + %t46 = load %S.gen.Template, ptr %t45 + store %S.gen.Template %t46, ptr %a47 + call void @finch.copy.S_gen_Template(ptr %a48, ptr %a47) + %t49 = load %S.gen.Template, ptr %a48 + store %S.gen.Template %t49, ptr %a50 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = icmp ne i64 %t52, %t55 + br i1 %t56, label %then4005, label %endif4007 +then4005: + %t57 = load ptr, ptr %a1 + %t58 = load %S.ast.Node, ptr %a5 + %t59 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t59, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.2468, i64 7, i64 0 }, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a60 + %t64 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 + %t66 = load i64, ptr %t65 + call void @finch_str_from_int(ptr %a67, i64 %t66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t63, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t63, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t68, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.2469, i64 24, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + %t80 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t79, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t79, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.2470, i64 1, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2471, i64 2, i64 0 }, ptr %a93 + call void @finch_str_join(ptr %a94, ptr %t91, ptr %a93) + %t95 = load { ptr, i64, i64 }, ptr %a94 + store { ptr, i64, i64 } %t90, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t90, ptr %a99 + call void @finch_str_drop(ptr %a99) + store { ptr, i64, i64 } %t95, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t101, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.2472, i64 11, i64 0 }, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t101, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t108 = load i64, ptr %t107 + call void @finch_str_from_int(ptr %a109, i64 %t108) + %t110 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t106, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t106, ptr %a114 + call void @finch_str_drop(ptr %a114) + store { ptr, i64, i64 } %t110, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.fail(ptr %t57, %S.ast.Node %t58, { ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + br label %endif4007 +endif4007: + %t118 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.2473, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a119 + %t123 = load { ptr, i64, i64 }, ptr %a4 + %t124 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t123) + store { ptr, i64, i64 } %t122, ptr %a126 + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t122, ptr %a128 + call void @finch_str_drop(ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a125 + store { ptr, i64, i64 } %t130, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.2474, i64 1, i64 0 }, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t130, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + store { ptr, i64, i64 } %t135, ptr %a136 + %t137 = load ptr, ptr %a1 + %t138 = load { ptr, i64, i64 }, ptr %a2 + %t139 = load { ptr, i64, i64 }, ptr %a136 + %t140 = call i64 @finch.gen.findStruct(ptr %t137, { ptr, i64, i64 } %t138, { ptr, i64, i64 } %t139) + %t141 = icmp slt i64 %t140, 0 + br i1 %t141, label %then4008, label %endif4010 +then4008: + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic4011, label %ok4012 +panic4011: + call void @finch_panic(ptr @.str.2475, i64 1704, ptr @.str.2476) + unreachable +ok4012: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 16 + %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 + %t146 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t146, ptr %a147 + call void @finch_str_copy(ptr %a148, ptr %a147) + %t149 = load { ptr, i64, i64 }, ptr %a148 + %t150 = insertvalue %S.gen.StructDef zeroinitializer, { ptr, i64, i64 } %t149, 0 + %t151 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t151, ptr %a152 + call void @finch_str_copy(ptr %a153, ptr %a152) + %t154 = load { ptr, i64, i64 }, ptr %a153 + %t155 = insertvalue %S.gen.StructDef %t150, { ptr, i64, i64 } %t154, 1 + %t156 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t156, ptr %a157 + call void @finch_str_copy(ptr %a158, ptr %a157) + %t159 = load { ptr, i64, i64 }, ptr %a158 + %t160 = insertvalue %S.gen.StructDef %t155, { ptr, i64, i64 } %t159, 5 + %t161 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 3 + %t162 = load { ptr, i64, i64 }, ptr %t161 + store { ptr, i64, i64 } %t162, ptr %a163 + call void @finch.copy.arr_str(ptr %a164, ptr %a163) + %t165 = load { ptr, i64, i64 }, ptr %a164 + %t166 = insertvalue %S.gen.StructDef %t160, { ptr, i64, i64 } %t165, 6 + %t167 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t167, ptr %a168 + call void @finch.copy.arr_S_ast_Type(ptr %a169, ptr %a168) + %t170 = load { ptr, i64, i64 }, ptr %a169 + %t171 = insertvalue %S.gen.StructDef %t166, { ptr, i64, i64 } %t170, 7 + %t172 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 4 + %t173 = load i64, ptr %t172 + %t174 = insertvalue %S.gen.StructDef %t171, i64 %t173, 13 + %t175 = getelementptr inbounds %S.gen.Template, ptr %a50, i32 0, i32 5 + %t176 = load i64, ptr %t175 + %t177 = insertvalue %S.gen.StructDef %t174, i64 %t176, 14 + %t178 = load i64, ptr %t145 + %t179 = add i64 %t178, 1 + call void @finch_arr_reserve(ptr %t144, i64 %t179, i64 ptrtoint (ptr getelementptr (%S.gen.StructDef, ptr null, i32 1) to i64)) + %t180 = load ptr, ptr %t144 + %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t178 + store %S.gen.StructDef %t177, ptr %t181 + store i64 %t179, ptr %t145 + %t182 = load ptr, ptr %a1 + %t183 = load ptr, ptr %a1 + %t184 = icmp eq ptr %t183, null + br i1 %t184, label %panic4013, label %ok4014 +panic4013: + call void @finch_panic(ptr @.str.2477, i64 1705, ptr @.str.2478) + unreachable +ok4014: + %t185 = getelementptr inbounds %S.gen.Gen, ptr %t183, i32 0, i32 16 + %t186 = getelementptr inbounds { ptr, i64, i64 }, ptr %t185, i32 0, i32 1 + %t187 = load i64, ptr %t186 + %t188 = sub i64 %t187, 1 + call void @finch.gen.resolveStruct(ptr %t182, i64 %t188) + br label %endif4010 +endif4010: + %t189 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.2479, i64 6, i64 0 }, 0 + %t190 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_copy(ptr %a192, ptr %a191) + %t193 = load { ptr, i64, i64 }, ptr %a192 + %t194 = insertvalue %S.ast.Type %t189, { ptr, i64, i64 } %t193, 2 + %t195 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t195, ptr %a196 + call void @finch_str_copy(ptr %a197, ptr %a196) + %t198 = load { ptr, i64, i64 }, ptr %a197 + %t199 = insertvalue %S.ast.Type %t194, { ptr, i64, i64 } %t198, 3 + call void @finch_str_drop(ptr %a136) + call void @finch.drop.S_gen_Template(ptr %a50) + ret %S.ast.Type %t199 +} + +define internal i64 @finch.gen.instFn(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a16 = alloca %S.gen.Template, align 16 + %a17 = alloca %S.gen.Template, align 16 + %a19 = alloca %S.gen.Template, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca i64, align 16 + %a61 = alloca i64, align 16 + %a84 = alloca %S.ast.Node, align 16 + %a85 = alloca %S.ast.Node, align 16 + %a87 = alloca %S.ast.Node, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca %S.gen.FnSig, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca %S.ast.Type, align 16 + %a327 = alloca %S.ast.Node, align 16 + %a328 = alloca %S.ast.Node, align 16 + %a330 = alloca %S.ast.Node, align 16 + %a335 = alloca i64, align 16 + %a357 = alloca %S.ast.Type, align 16 + %a361 = alloca %S.ast.Type, align 16 + %a362 = alloca %S.ast.Type, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca %S.gen.FnSig, align 16 + %a453 = alloca %S.gen.FnSig, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4015, label %ok4016 +panic4015: + call void @finch_panic(ptr @.str.2480, i64 1712, ptr @.str.2481) + unreachable +ok4016: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range4017, label %inrange4018 +range4017: + call void @finch_panic_index(ptr @.str.2482, i64 1712, i64 %t9, i64 %t11) + unreachable +inrange4018: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 + %t15 = load %S.gen.Template, ptr %t14 + store %S.gen.Template %t15, ptr %a16 + call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) + %t18 = load %S.gen.Template, ptr %a17 + store %S.gen.Template %t18, ptr %a19 + %t20 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.2483, i64 1, i64 0 }, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a22 + %t26 = load { ptr, i64, i64 }, ptr %a3 + %t27 = call { ptr, i64, i64 } @finch.gen.shownTypes({ ptr, i64, i64 } %t26) + store { ptr, i64, i64 } %t25, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + store { ptr, i64, i64 } %t25, ptr %a31 + call void @finch_str_drop(ptr %a31) + store { ptr, i64, i64 } %t27, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t33, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.2484, i64 1, i64 0 }, ptr %a36 + call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = icmp sgt i64 %t42, 0 + br i1 %t43, label %then4019, label %else4020 +then4019: + %t44 = load ptr, ptr %a1 + %t45 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t48 = load { ptr, i64, i64 }, ptr %t47 + %t49 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + %t51 = call i64 @finch.gen.findMethod(ptr %t44, { ptr, i64, i64 } %t46, { ptr, i64, i64 } %t48, { ptr, i64, i64 } %t50) + store i64 %t51, ptr %a52 + %t53 = load i64, ptr %a52 + %t54 = icmp sge i64 %t53, 0 + br i1 %t54, label %then4022, label %endif4024 +then4022: + %t55 = load i64, ptr %a52 + call void @finch_str_drop(ptr %a39) + call void @finch.drop.S_gen_Template(ptr %a19) + ret i64 %t55 +endif4024: + br label %endif4021 +else4020: + %t56 = load ptr, ptr %a1 + %t57 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t58 = load { ptr, i64, i64 }, ptr %t57 + %t59 = load { ptr, i64, i64 }, ptr %a39 + %t60 = call i64 @finch.gen.findFn(ptr %t56, { ptr, i64, i64 } %t58, { ptr, i64, i64 } %t59) + store i64 %t60, ptr %a61 + %t62 = load i64, ptr %a61 + %t63 = icmp sge i64 %t62, 0 + br i1 %t63, label %then4025, label %endif4027 +then4025: + %t64 = load i64, ptr %a61 + call void @finch_str_drop(ptr %a39) + call void @finch.drop.S_gen_Template(ptr %a19) + ret i64 %t64 +endif4027: + br label %endif4021 +endif4021: + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic4028, label %ok4029 +panic4028: + call void @finch_panic(ptr @.str.2485, i64 1725, ptr @.str.2486) + unreachable +ok4029: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 0 + %t68 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 + %t69 = load i64, ptr %t68 + %t70 = load { ptr, i64, i64 }, ptr %t67 + %t71 = extractvalue { ptr, i64, i64 } %t70, 1 + %t72 = icmp uge i64 %t69, %t71 + br i1 %t72, label %range4030, label %inrange4031 +range4030: + call void @finch_panic_index(ptr @.str.2487, i64 1725, i64 %t69, i64 %t71) + unreachable +inrange4031: + %t73 = extractvalue { ptr, i64, i64 } %t70, 0 + %t74 = getelementptr inbounds %S.ast.Program, ptr %t73, i64 %t69 + %t75 = getelementptr inbounds %S.ast.Program, ptr %t74, i32 0, i32 8 + %t76 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 + %t77 = load i64, ptr %t76 + %t78 = load { ptr, i64, i64 }, ptr %t75 + %t79 = extractvalue { ptr, i64, i64 } %t78, 1 + %t80 = icmp uge i64 %t77, %t79 + br i1 %t80, label %range4032, label %inrange4033 +range4032: + call void @finch_panic_index(ptr @.str.2488, i64 1725, i64 %t77, i64 %t79) + unreachable +inrange4033: + %t81 = extractvalue { ptr, i64, i64 } %t78, 0 + %t82 = getelementptr inbounds %S.ast.Node, ptr %t81, i64 %t77 + %t83 = load %S.ast.Node, ptr %t82 + store %S.ast.Node %t83, ptr %a84 + call void @finch.copy.S_ast_Node(ptr %a85, ptr %a84) + %t86 = load %S.ast.Node, ptr %a85 + store %S.ast.Node %t86, ptr %a87 + %t88 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + call void @finch_str_copy(ptr %a91, ptr %a90) + %t92 = load { ptr, i64, i64 }, ptr %a91 + %t93 = insertvalue %S.gen.FnSig zeroinitializer, { ptr, i64, i64 } %t92, 0 + %t94 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t94, ptr %a95 + call void @finch_str_copy(ptr %a96, ptr %a95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + %t98 = insertvalue %S.gen.FnSig %t93, { ptr, i64, i64 } %t97, 1 + %t99 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t100 = load { ptr, i64, i64 }, ptr %t99 + store { ptr, i64, i64 } %t100, ptr %a101 + call void @finch_str_copy(ptr %a102, ptr %a101) + %t103 = load { ptr, i64, i64 }, ptr %a102 + %t104 = insertvalue %S.gen.FnSig %t98, { ptr, i64, i64 } %t103, 3 + %t105 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t106 = load { ptr, i64, i64 }, ptr %t105 + store { ptr, i64, i64 } %t106, ptr %a107 + call void @finch.copy.arr_str(ptr %a108, ptr %a107) + %t109 = load { ptr, i64, i64 }, ptr %a108 + %t110 = insertvalue %S.gen.FnSig %t104, { ptr, i64, i64 } %t109, 6 + %t111 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch.copy.arr_S_ast_Type(ptr %a113, ptr %a112) + %t114 = load { ptr, i64, i64 }, ptr %a113 + %t115 = insertvalue %S.gen.FnSig %t110, { ptr, i64, i64 } %t114, 7 + %t116 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_copy(ptr %a118, ptr %a117) + %t119 = load { ptr, i64, i64 }, ptr %a118 + %t120 = insertvalue %S.gen.FnSig %t115, { ptr, i64, i64 } %t119, 8 + %t121 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 7 + %t122 = load i1, ptr %t121 + %t123 = insertvalue %S.gen.FnSig %t120, i1 %t122, 9 + %t124 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 7 + %t125 = load i1, ptr %t124 + %t126 = insertvalue %S.gen.FnSig %t123, i1 %t125, 10 + %t127 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 + %t128 = load i64, ptr %t127 + %t129 = insertvalue %S.gen.FnSig %t126, i64 %t128, 16 + %t130 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 + %t131 = load i64, ptr %t130 + %t132 = insertvalue %S.gen.FnSig %t129, i64 %t131, 17 + store %S.gen.FnSig %t132, ptr %a133 + %t134 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t135 = load { ptr, i64, i64 }, ptr %t134 + %t136 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t135) + store { ptr, i64, i64 } { ptr @.str.2489, i64 7, i64 0 }, ptr %a138 + store { ptr, i64, i64 } %t136, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t141, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.2490, i64 1, i64 0 }, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + %t147 = load { ptr, i64, i64 }, ptr %a39 + %t148 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t147) + store { ptr, i64, i64 } %t146, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + store { ptr, i64, i64 } %t146, ptr %a152 + call void @finch_str_drop(ptr %a152) + store { ptr, i64, i64 } %t148, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a149 + %t155 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 11 + %t156 = load { ptr, i64, i64 }, ptr %t155 + store { ptr, i64, i64 } %t154, ptr %t155 + store { ptr, i64, i64 } %t156, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 2 + %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i32 0, i32 1 + %t160 = load i64, ptr %t159 + %t161 = icmp sgt i64 %t160, 0 + br i1 %t161, label %then4034, label %endif4036 +then4034: + %t162 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 1 + store { ptr, i64, i64 } %t163, ptr %a165 + call void @finch_str_copy(ptr %a166, ptr %a165) + %t167 = load { ptr, i64, i64 }, ptr %a166 + %t168 = load { ptr, i64, i64 }, ptr %t164 + store { ptr, i64, i64 } %t167, ptr %t164 + store { ptr, i64, i64 } %t168, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t171 = load { ptr, i64, i64 }, ptr %t170 + %t172 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 2 + store { ptr, i64, i64 } %t171, ptr %a173 + call void @finch_str_copy(ptr %a174, ptr %a173) + %t175 = load { ptr, i64, i64 }, ptr %a174 + %t176 = load { ptr, i64, i64 }, ptr %t172 + store { ptr, i64, i64 } %t175, ptr %t172 + store { ptr, i64, i64 } %t176, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t179 = load { ptr, i64, i64 }, ptr %t178 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.2491, i64 1, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a180 + %t184 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t185 = load { ptr, i64, i64 }, ptr %t184 + store { ptr, i64, i64 } %t183, ptr %a187 + store { ptr, i64, i64 } %t185, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t183, ptr %a189 + call void @finch_str_drop(ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a186 + %t191 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 8 + %t192 = load { ptr, i64, i64 }, ptr %t191 + store { ptr, i64, i64 } %t190, ptr %t191 + store { ptr, i64, i64 } %t192, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t195 = load { ptr, i64, i64 }, ptr %t194 + %t196 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t195) + store { ptr, i64, i64 } { ptr @.str.2492, i64 7, i64 0 }, ptr %a198 + store { ptr, i64, i64 } %t196, ptr %a199 + call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) + store { ptr, i64, i64 } %t196, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load { ptr, i64, i64 }, ptr %a197 + store { ptr, i64, i64 } %t201, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.2493, i64 1, i64 0 }, ptr %a204 + call void @finch_str_concat(ptr %a202, ptr %a203, ptr %a204) + store { ptr, i64, i64 } %t201, ptr %a205 + call void @finch_str_drop(ptr %a205) + %t206 = load { ptr, i64, i64 }, ptr %a202 + %t207 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t208 = load { ptr, i64, i64 }, ptr %t207 + %t209 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t208) + store { ptr, i64, i64 } %t206, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t206, ptr %a213 + call void @finch_str_drop(ptr %a213) + store { ptr, i64, i64 } %t209, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.2494, i64 1, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load { ptr, i64, i64 }, ptr %a216 + %t221 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t222 = load { ptr, i64, i64 }, ptr %t221 + store { ptr, i64, i64 } %t220, ptr %a224 + store { ptr, i64, i64 } %t222, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t220, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 11 + %t229 = load { ptr, i64, i64 }, ptr %t228 + store { ptr, i64, i64 } %t227, ptr %t228 + store { ptr, i64, i64 } %t229, ptr %a230 + call void @finch_str_drop(ptr %a230) + br label %endif4036 +endif4036: + %t231 = load ptr, ptr %a1 + %t232 = icmp eq ptr %t231, null + br i1 %t232, label %panic4037, label %ok4038 +panic4037: + call void @finch_panic(ptr @.str.2495, i64 1734, ptr @.str.2496) + unreachable +ok4038: + %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 18 + %t234 = load { ptr, i64, i64 }, ptr %t233 + store { ptr, i64, i64 } %t234, ptr %a235 + call void @finch.copy.arr_str(ptr %a236, ptr %a235) + %t237 = load { ptr, i64, i64 }, ptr %a236 + store { ptr, i64, i64 } %t237, ptr %a238 + %t239 = load ptr, ptr %a1 + %t240 = icmp eq ptr %t239, null + br i1 %t240, label %panic4039, label %ok4040 +panic4039: + call void @finch_panic(ptr @.str.2497, i64 1735, ptr @.str.2498) + unreachable +ok4040: + %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 19 + %t242 = load { ptr, i64, i64 }, ptr %t241 + store { ptr, i64, i64 } %t242, ptr %a243 + call void @finch.copy.arr_S_ast_Type(ptr %a244, ptr %a243) + %t245 = load { ptr, i64, i64 }, ptr %a244 + store { ptr, i64, i64 } %t245, ptr %a246 + %t247 = load ptr, ptr %a1 + %t248 = icmp eq ptr %t247, null + br i1 %t248, label %panic4041, label %ok4042 +panic4041: + call void @finch_panic(ptr @.str.2499, i64 1736, ptr @.str.2500) + unreachable +ok4042: + %t249 = getelementptr inbounds %S.gen.Gen, ptr %t247, i32 0, i32 14 + %t250 = load { ptr, i64, i64 }, ptr %t249 + store { ptr, i64, i64 } %t250, ptr %a251 + call void @finch_str_copy(ptr %a252, ptr %a251) + %t253 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t253, ptr %a254 + %t255 = load ptr, ptr %a1 + %t256 = icmp eq ptr %t255, null + br i1 %t256, label %panic4043, label %ok4044 +panic4043: + call void @finch_panic(ptr @.str.2501, i64 1737, ptr @.str.2502) + unreachable +ok4044: + %t257 = getelementptr inbounds %S.gen.Gen, ptr %t255, i32 0, i32 20 + %t258 = load { ptr, i64, i64 }, ptr %t257 + store { ptr, i64, i64 } %t258, ptr %a259 + call void @finch_str_copy(ptr %a260, ptr %a259) + %t261 = load { ptr, i64, i64 }, ptr %a260 + store { ptr, i64, i64 } %t261, ptr %a262 + %t263 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = load ptr, ptr %a1 + %t266 = icmp eq ptr %t265, null + br i1 %t266, label %panic4045, label %ok4046 +panic4045: + call void @finch_panic(ptr @.str.2503, i64 1738, ptr @.str.2504) + unreachable +ok4046: + %t267 = getelementptr inbounds %S.gen.Gen, ptr %t265, i32 0, i32 18 + store { ptr, i64, i64 } %t264, ptr %a268 + call void @finch.copy.arr_str(ptr %a269, ptr %a268) + %t270 = load { ptr, i64, i64 }, ptr %a269 + %t271 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t270, ptr %t267 + store { ptr, i64, i64 } %t271, ptr %a272 + call void @finch.drop.arr_str(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a3 + %t274 = load ptr, ptr %a1 + %t275 = icmp eq ptr %t274, null + br i1 %t275, label %panic4047, label %ok4048 +panic4047: + call void @finch_panic(ptr @.str.2505, i64 1739, ptr @.str.2506) + unreachable +ok4048: + %t276 = getelementptr inbounds %S.gen.Gen, ptr %t274, i32 0, i32 19 + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch.copy.arr_S_ast_Type(ptr %a278, ptr %a277) + %t279 = load { ptr, i64, i64 }, ptr %a278 + %t280 = load { ptr, i64, i64 }, ptr %t276 + store { ptr, i64, i64 } %t279, ptr %t276 + store { ptr, i64, i64 } %t280, ptr %a281 + call void @finch.drop.arr_S_ast_Type(ptr %a281) + %t282 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 0 + %t283 = load { ptr, i64, i64 }, ptr %t282 + %t284 = load ptr, ptr %a1 + %t285 = icmp eq ptr %t284, null + br i1 %t285, label %panic4049, label %ok4050 +panic4049: + call void @finch_panic(ptr @.str.2507, i64 1740, ptr @.str.2508) + unreachable +ok4050: + %t286 = getelementptr inbounds %S.gen.Gen, ptr %t284, i32 0, i32 14 + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_copy(ptr %a288, ptr %a287) + %t289 = load { ptr, i64, i64 }, ptr %a288 + %t290 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t289, ptr %t286 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 8 + %t293 = load { ptr, i64, i64 }, ptr %t292 + store { ptr, i64, i64 } { ptr @.str.2509, i64 17, i64 0 }, ptr %a295 + store { ptr, i64, i64 } %t293, ptr %a296 + call void @finch_str_concat(ptr %a294, ptr %a295, ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a294 + store { ptr, i64, i64 } %t297, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.2510, i64 1, i64 0 }, ptr %a300 + call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) + store { ptr, i64, i64 } %t297, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a298 + %t303 = load ptr, ptr %a1 + %t304 = icmp eq ptr %t303, null + br i1 %t304, label %panic4051, label %ok4052 +panic4051: + call void @finch_panic(ptr @.str.2511, i64 1741, ptr @.str.2512) + unreachable +ok4052: + %t305 = getelementptr inbounds %S.gen.Gen, ptr %t303, i32 0, i32 20 + %t306 = load { ptr, i64, i64 }, ptr %t305 + store { ptr, i64, i64 } %t302, ptr %t305 + store { ptr, i64, i64 } %t306, ptr %a307 + call void @finch_str_drop(ptr %a307) + %t308 = load ptr, ptr %a1 + %t309 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 5 + %t310 = load %S.ast.Type, ptr %t309 + %t311 = load %S.ast.Node, ptr %a87 + %t312 = call %S.ast.Type @finch.gen.resolve(ptr %t308, %S.ast.Type %t310, %S.ast.Node %t311) + %t313 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 12 + %t314 = load %S.ast.Type, ptr %t313 + store %S.ast.Type %t312, ptr %t313 + store %S.ast.Type %t314, ptr %a315 + call void @finch.drop.S_ast_Type(ptr %a315) + %t316 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t317 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 + %t319 = load i64, ptr %t318 + %t320 = sub i64 %t319, 1 + %t321 = load { ptr, i64, i64 }, ptr %t316 + %t322 = extractvalue { ptr, i64, i64 } %t321, 1 + %t323 = icmp uge i64 %t320, %t322 + br i1 %t323, label %range4053, label %inrange4054 +range4053: + call void @finch_panic_index(ptr @.str.2513, i64 1743, i64 %t320, i64 %t322) + unreachable +inrange4054: + %t324 = extractvalue { ptr, i64, i64 } %t321, 0 + %t325 = getelementptr inbounds %S.ast.Node, ptr %t324, i64 %t320 + %t326 = load %S.ast.Node, ptr %t325 + store %S.ast.Node %t326, ptr %a327 + call void @finch.copy.S_ast_Node(ptr %a328, ptr %a327) + %t329 = load %S.ast.Node, ptr %a328 + store %S.ast.Node %t329, ptr %a330 + %t331 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 + %t333 = load i64, ptr %t332 + %t334 = sub i64 %t333, 1 + store i64 0, ptr %a335 + br label %for.cond4055 +for.cond4055: + %t336 = load i64, ptr %a335 + %t337 = icmp slt i64 %t336, %t334 + br i1 %t337, label %for.body4056, label %for.end4058 +for.body4056: + %t338 = load ptr, ptr %a1 + %t339 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t340 = load i64, ptr %a335 + %t341 = load { ptr, i64, i64 }, ptr %t339 + %t342 = extractvalue { ptr, i64, i64 } %t341, 1 + %t343 = icmp uge i64 %t340, %t342 + br i1 %t343, label %range4059, label %inrange4060 +range4059: + call void @finch_panic_index(ptr @.str.2514, i64 1745, i64 %t340, i64 %t342) + unreachable +inrange4060: + %t344 = extractvalue { ptr, i64, i64 } %t341, 0 + %t345 = getelementptr inbounds %S.ast.Node, ptr %t344, i64 %t340 + %t346 = getelementptr inbounds %S.ast.Node, ptr %t345, i32 0, i32 5 + %t347 = load %S.ast.Type, ptr %t346 + %t348 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t349 = load i64, ptr %a335 + %t350 = load { ptr, i64, i64 }, ptr %t348 + %t351 = extractvalue { ptr, i64, i64 } %t350, 1 + %t352 = icmp uge i64 %t349, %t351 + br i1 %t352, label %range4061, label %inrange4062 +range4061: + call void @finch_panic_index(ptr @.str.2515, i64 1745, i64 %t349, i64 %t351) + unreachable +inrange4062: + %t353 = extractvalue { ptr, i64, i64 } %t350, 0 + %t354 = getelementptr inbounds %S.ast.Node, ptr %t353, i64 %t349 + %t355 = load %S.ast.Node, ptr %t354 + %t356 = call %S.ast.Type @finch.gen.resolve(ptr %t338, %S.ast.Type %t347, %S.ast.Node %t355) + store %S.ast.Type %t356, ptr %a357 + %t358 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 13 + %t359 = getelementptr inbounds { ptr, i64, i64 }, ptr %t358, i32 0, i32 1 + %t360 = load %S.ast.Type, ptr %a357 + store %S.ast.Type %t360, ptr %a361 + call void @finch.copy.S_ast_Type(ptr %a362, ptr %a361) + %t363 = load %S.ast.Type, ptr %a362 + %t364 = load i64, ptr %t359 + %t365 = add i64 %t364, 1 + call void @finch_arr_reserve(ptr %t358, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t366 = load ptr, ptr %t358 + %t367 = getelementptr inbounds %S.ast.Type, ptr %t366, i64 %t364 + store %S.ast.Type %t363, ptr %t367 + store i64 %t365, ptr %t359 + %t368 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 14 + %t369 = getelementptr inbounds { ptr, i64, i64 }, ptr %t368, i32 0, i32 1 + %t370 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t371 = load i64, ptr %a335 + %t372 = load { ptr, i64, i64 }, ptr %t370 + %t373 = extractvalue { ptr, i64, i64 } %t372, 1 + %t374 = icmp uge i64 %t371, %t373 + br i1 %t374, label %range4063, label %inrange4064 +range4063: + call void @finch_panic_index(ptr @.str.2516, i64 1747, i64 %t371, i64 %t373) + unreachable +inrange4064: + %t375 = extractvalue { ptr, i64, i64 } %t372, 0 + %t376 = getelementptr inbounds %S.ast.Node, ptr %t375, i64 %t371 + %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i32 0, i32 1 + %t378 = load { ptr, i64, i64 }, ptr %t377 + store { ptr, i64, i64 } %t378, ptr %a379 + call void @finch_str_copy(ptr %a380, ptr %a379) + %t381 = load { ptr, i64, i64 }, ptr %a380 + %t382 = load i64, ptr %t369 + %t383 = add i64 %t382, 1 + call void @finch_arr_reserve(ptr %t368, i64 %t383, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t384 = load ptr, ptr %t368 + %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t382 + store { ptr, i64, i64 } %t381, ptr %t385 + store i64 %t383, ptr %t369 + %t386 = getelementptr inbounds %S.gen.FnSig, ptr %a133, i32 0, i32 15 + %t387 = getelementptr inbounds { ptr, i64, i64 }, ptr %t386, i32 0, i32 1 + %t388 = load ptr, ptr %a1 + %t389 = load %S.ast.Type, ptr %a357 + %t390 = call i1 @finch.gen.owning(ptr %t388, %S.ast.Type %t389) + br label %logic.from4065 +logic.from4065: + br i1 %t390, label %logic.rhs4066, label %logic.end4067 +logic.rhs4066: + %t391 = load ptr, ptr %a1 + %t392 = getelementptr inbounds %S.ast.Node, ptr %a87, i32 0, i32 9 + %t393 = load i64, ptr %a335 + %t394 = load { ptr, i64, i64 }, ptr %t392 + %t395 = extractvalue { ptr, i64, i64 } %t394, 1 + %t396 = icmp uge i64 %t393, %t395 + br i1 %t396, label %range4068, label %inrange4069 +range4068: + call void @finch_panic_index(ptr @.str.2517, i64 1748, i64 %t393, i64 %t395) + unreachable +inrange4069: + %t397 = extractvalue { ptr, i64, i64 } %t394, 0 + %t398 = getelementptr inbounds %S.ast.Node, ptr %t397, i64 %t393 + %t399 = getelementptr inbounds %S.ast.Node, ptr %t398, i32 0, i32 1 + %t400 = load { ptr, i64, i64 }, ptr %t399 + %t401 = load %S.ast.Node, ptr %a330 + %t402 = call i1 @finch.gen.mutates(ptr %t391, { ptr, i64, i64 } %t400, %S.ast.Node %t401) + %t403 = xor i1 %t402, true + br label %logic.rend4070 +logic.rend4070: + br label %logic.end4067 +logic.end4067: + %t404 = phi i1 [ false, %logic.from4065 ], [ %t403, %logic.rend4070 ] + %t405 = load i64, ptr %t387 + %t406 = add i64 %t405, 1 + call void @finch_arr_reserve(ptr %t386, i64 %t406, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + %t407 = load ptr, ptr %t386 + %t408 = getelementptr inbounds i1, ptr %t407, i64 %t405 + store i1 %t404, ptr %t408 + store i64 %t406, ptr %t387 + call void @finch.drop.S_ast_Type(ptr %a357) + br label %for.step4057 +for.step4057: + %t409 = load i64, ptr %a335 + %t410 = add i64 %t409, 1 + store i64 %t410, ptr %a335 + br label %for.cond4055 +for.end4058: + %t411 = load { ptr, i64, i64 }, ptr %a238 + %t412 = load ptr, ptr %a1 + %t413 = icmp eq ptr %t412, null + br i1 %t413, label %panic4071, label %ok4072 +panic4071: + call void @finch_panic(ptr @.str.2518, i64 1750, ptr @.str.2519) + unreachable +ok4072: + %t414 = getelementptr inbounds %S.gen.Gen, ptr %t412, i32 0, i32 18 + store { ptr, i64, i64 } %t411, ptr %a415 + call void @finch.copy.arr_str(ptr %a416, ptr %a415) + %t417 = load { ptr, i64, i64 }, ptr %a416 + %t418 = load { ptr, i64, i64 }, ptr %t414 + store { ptr, i64, i64 } %t417, ptr %t414 + store { ptr, i64, i64 } %t418, ptr %a419 + call void @finch.drop.arr_str(ptr %a419) + %t420 = load { ptr, i64, i64 }, ptr %a246 + %t421 = load ptr, ptr %a1 + %t422 = icmp eq ptr %t421, null + br i1 %t422, label %panic4073, label %ok4074 +panic4073: + call void @finch_panic(ptr @.str.2520, i64 1751, ptr @.str.2521) + unreachable +ok4074: + %t423 = getelementptr inbounds %S.gen.Gen, ptr %t421, i32 0, i32 19 + store { ptr, i64, i64 } %t420, ptr %a424 + call void @finch.copy.arr_S_ast_Type(ptr %a425, ptr %a424) + %t426 = load { ptr, i64, i64 }, ptr %a425 + %t427 = load { ptr, i64, i64 }, ptr %t423 + store { ptr, i64, i64 } %t426, ptr %t423 + store { ptr, i64, i64 } %t427, ptr %a428 + call void @finch.drop.arr_S_ast_Type(ptr %a428) + %t429 = load { ptr, i64, i64 }, ptr %a254 + %t430 = load ptr, ptr %a1 + %t431 = icmp eq ptr %t430, null + br i1 %t431, label %panic4075, label %ok4076 +panic4075: + call void @finch_panic(ptr @.str.2522, i64 1752, ptr @.str.2523) + unreachable +ok4076: + %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 14 + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch_str_copy(ptr %a434, ptr %a433) + %t435 = load { ptr, i64, i64 }, ptr %a434 + %t436 = load { ptr, i64, i64 }, ptr %t432 + store { ptr, i64, i64 } %t435, ptr %t432 + store { ptr, i64, i64 } %t436, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a262 + %t439 = load ptr, ptr %a1 + %t440 = icmp eq ptr %t439, null + br i1 %t440, label %panic4077, label %ok4078 +panic4077: + call void @finch_panic(ptr @.str.2524, i64 1753, ptr @.str.2525) + unreachable +ok4078: + %t441 = getelementptr inbounds %S.gen.Gen, ptr %t439, i32 0, i32 20 + store { ptr, i64, i64 } %t438, ptr %a442 + call void @finch_str_copy(ptr %a443, ptr %a442) + %t444 = load { ptr, i64, i64 }, ptr %a443 + %t445 = load { ptr, i64, i64 }, ptr %t441 + store { ptr, i64, i64 } %t444, ptr %t441 + store { ptr, i64, i64 } %t445, ptr %a446 + call void @finch_str_drop(ptr %a446) + %t447 = load ptr, ptr %a1 + %t448 = icmp eq ptr %t447, null + br i1 %t448, label %panic4079, label %ok4080 +panic4079: + call void @finch_panic(ptr @.str.2526, i64 1754, ptr @.str.2527) + unreachable +ok4080: + %t449 = getelementptr inbounds %S.gen.Gen, ptr %t447, i32 0, i32 15 + %t450 = getelementptr inbounds { ptr, i64, i64 }, ptr %t449, i32 0, i32 1 + %t451 = load %S.gen.FnSig, ptr %a133 + store %S.gen.FnSig %t451, ptr %a452 + call void @finch.copy.S_gen_FnSig(ptr %a453, ptr %a452) + %t454 = load %S.gen.FnSig, ptr %a453 + %t455 = load i64, ptr %t450 + %t456 = add i64 %t455, 1 + call void @finch_arr_reserve(ptr %t449, i64 %t456, i64 ptrtoint (ptr getelementptr (%S.gen.FnSig, ptr null, i32 1) to i64)) + %t457 = load ptr, ptr %t449 + %t458 = getelementptr inbounds %S.gen.FnSig, ptr %t457, i64 %t455 + store %S.gen.FnSig %t454, ptr %t458 + store i64 %t456, ptr %t450 + %t459 = load ptr, ptr %a1 + %t460 = icmp eq ptr %t459, null + br i1 %t460, label %panic4081, label %ok4082 +panic4081: + call void @finch_panic(ptr @.str.2528, i64 1755, ptr @.str.2529) + unreachable +ok4082: + %t461 = getelementptr inbounds %S.gen.Gen, ptr %t459, i32 0, i32 15 + %t462 = getelementptr inbounds { ptr, i64, i64 }, ptr %t461, i32 0, i32 1 + %t463 = load i64, ptr %t462 + %t464 = sub i64 %t463, 1 + call void @finch.drop.S_ast_Node(ptr %a330) + call void @finch_str_drop(ptr %a262) + call void @finch_str_drop(ptr %a254) + call void @finch.drop.arr_S_ast_Type(ptr %a246) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_gen_FnSig(ptr %a133) + call void @finch.drop.S_ast_Node(ptr %a87) + call void @finch_str_drop(ptr %a39) + call void @finch.drop.S_gen_Template(ptr %a19) + ret i64 %t464 +} + +define internal void @finch.gen.bindType(ptr %p0, %S.ast.Type %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3, ptr %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca ptr, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca i64, align 16 + %a28 = alloca i64, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca i64, align 16 + %a47 = alloca i64, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca i64, align 16 + %a80 = alloca %S.ast.Type, align 16 + %a81 = alloca %S.ast.Type, align 16 + %a84 = alloca %S.ast.Type, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca %S.gen.StructDef, align 16 + %a231 = alloca %S.gen.StructDef, align 16 + %a233 = alloca %S.gen.StructDef, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store ptr %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.2530, i64 5, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br label %logic.from4083 +logic.from4083: + br i1 %t11, label %logic.rhs4084, label %logic.end4085 +logic.rhs4084: + %t12 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp eq i64 %t14, 0 + br label %logic.rend4086 +logic.rend4086: + br label %logic.end4085 +logic.end4085: + %t16 = phi i1 [ false, %logic.from4083 ], [ %t15, %logic.rend4086 ] + br label %logic.from4087 +logic.from4087: + br i1 %t16, label %logic.rhs4088, label %logic.end4089 +logic.rhs4088: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp eq i64 %t19, 0 + br label %logic.rend4090 +logic.rend4090: + br label %logic.end4089 +logic.end4089: + %t21 = phi i1 [ false, %logic.from4087 ], [ %t20, %logic.rend4090 ] + br label %logic.from4091 +logic.from4091: + br i1 %t21, label %logic.rhs4092, label %logic.end4093 +logic.rhs4092: + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store i64 -1, ptr %a25 + %t26 = load i64, ptr %t22 + %t27 = load ptr, ptr %a4 + store i64 0, ptr %a28 + br label %find.cond4094 +find.cond4094: + %t29 = load i64, ptr %a28 + %t30 = icmp slt i64 %t29, %t26 + br i1 %t30, label %find.body4095, label %find.end4098 +find.body4095: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t27, i64 %t29 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } %t24, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br i1 %t36, label %find.hit4096, label %find.next4097 +find.hit4096: + store i64 %t29, ptr %a25 + br label %find.end4098 +find.next4097: + %t37 = add i64 %t29, 1 + store i64 %t37, ptr %a28 + br label %find.cond4094 +find.end4098: + %t38 = load i64, ptr %a25 + %t39 = icmp sge i64 %t38, 0 + br label %logic.rend4099 +logic.rend4099: + br label %logic.end4093 +logic.end4093: + %t40 = phi i1 [ false, %logic.from4091 ], [ %t39, %logic.rend4099 ] + br i1 %t40, label %then4100, label %endif4102 +then4100: + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t42 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store i64 -1, ptr %a44 + %t45 = load i64, ptr %t41 + %t46 = load ptr, ptr %a4 + store i64 0, ptr %a47 + br label %find.cond4103 +find.cond4103: + %t48 = load i64, ptr %a47 + %t49 = icmp slt i64 %t48, %t45 + br i1 %t49, label %find.body4104, label %find.end4107 +find.body4104: + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i64 %t48 + %t51 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } %t51, ptr %a52 + store { ptr, i64, i64 } %t43, ptr %a53 + %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) + %t55 = icmp ne i32 %t54, 0 + br i1 %t55, label %find.hit4105, label %find.next4106 +find.hit4105: + store i64 %t48, ptr %a44 + br label %find.end4107 +find.next4106: + %t56 = add i64 %t48, 1 + store i64 %t56, ptr %a47 + br label %find.cond4103 +find.end4107: + %t57 = load i64, ptr %a44 + store i64 %t57, ptr %a58 + %t59 = load ptr, ptr %a5 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic4108, label %ok4109 +panic4108: + call void @finch_panic(ptr @.str.2531, i64 1762, ptr @.str.2532) + unreachable +ok4109: + %t61 = getelementptr inbounds %S.gen.Binds, ptr %t59, i32 0, i32 1 + %t62 = load i64, ptr %a58 + %t63 = load { ptr, i64, i64 }, ptr %t61 + %t64 = extractvalue { ptr, i64, i64 } %t63, 1 + %t65 = icmp uge i64 %t62, %t64 + br i1 %t65, label %range4110, label %inrange4111 +range4110: + call void @finch_panic_index(ptr @.str.2533, i64 1762, i64 %t62, i64 %t64) + unreachable +inrange4111: + %t66 = extractvalue { ptr, i64, i64 } %t63, 0 + %t67 = getelementptr inbounds i1, ptr %t66, i64 %t62 + %t68 = load i1, ptr %t67 + %t69 = xor i1 %t68, true + br i1 %t69, label %then4112, label %endif4114 +then4112: + %t70 = load %S.ast.Type, ptr %a3 + %t71 = load ptr, ptr %a5 + %t72 = icmp eq ptr %t71, null + br i1 %t72, label %panic4115, label %ok4116 +panic4115: + call void @finch_panic(ptr @.str.2534, i64 1763, ptr @.str.2535) + unreachable +ok4116: + %t73 = getelementptr inbounds %S.gen.Binds, ptr %t71, i32 0, i32 0 + %t74 = load i64, ptr %a58 + %t75 = load { ptr, i64, i64 }, ptr %t73 + %t76 = extractvalue { ptr, i64, i64 } %t75, 1 + %t77 = icmp uge i64 %t74, %t76 + br i1 %t77, label %range4117, label %inrange4118 +range4117: + call void @finch_panic_index(ptr @.str.2536, i64 1763, i64 %t74, i64 %t76) + unreachable +inrange4118: + %t78 = extractvalue { ptr, i64, i64 } %t75, 0 + %t79 = getelementptr inbounds %S.ast.Type, ptr %t78, i64 %t74 + store %S.ast.Type %t70, ptr %a80 + call void @finch.copy.S_ast_Type(ptr %a81, ptr %a80) + %t82 = load %S.ast.Type, ptr %a81 + %t83 = load %S.ast.Type, ptr %t79 + store %S.ast.Type %t82, ptr %t79 + store %S.ast.Type %t83, ptr %a84 + call void @finch.drop.S_ast_Type(ptr %a84) + %t85 = load ptr, ptr %a5 + %t86 = icmp eq ptr %t85, null + br i1 %t86, label %panic4119, label %ok4120 +panic4119: + call void @finch_panic(ptr @.str.2537, i64 1764, ptr @.str.2538) + unreachable +ok4120: + %t87 = getelementptr inbounds %S.gen.Binds, ptr %t85, i32 0, i32 1 + %t88 = load i64, ptr %a58 + %t89 = load { ptr, i64, i64 }, ptr %t87 + %t90 = extractvalue { ptr, i64, i64 } %t89, 1 + %t91 = icmp uge i64 %t88, %t90 + br i1 %t91, label %range4121, label %inrange4122 +range4121: + call void @finch_panic_index(ptr @.str.2539, i64 1764, i64 %t88, i64 %t90) + unreachable +inrange4122: + %t92 = extractvalue { ptr, i64, i64 } %t89, 0 + %t93 = getelementptr inbounds i1, ptr %t92, i64 %t88 + store i1 true, ptr %t93 + br label %endif4114 +endif4114: + ret void +endif4102: + %t94 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t95 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.2540, i64 5, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br label %logic.from4123 +logic.from4123: + br i1 %t99, label %logic.end4125, label %logic.rhs4124 +logic.rhs4124: + %t100 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t101 = load { ptr, i64, i64 }, ptr %t100 + store { ptr, i64, i64 } %t101, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.2541, i64 3, i64 0 }, ptr %a103 + %t104 = call i32 @finch_str_eq(ptr %a102, ptr %a103) + %t105 = icmp ne i32 %t104, 0 + br label %logic.rend4126 +logic.rend4126: + br label %logic.end4125 +logic.end4125: + %t106 = phi i1 [ true, %logic.from4123 ], [ %t105, %logic.rend4126 ] + br label %logic.from4127 +logic.from4127: + br i1 %t106, label %logic.end4129, label %logic.rhs4128 +logic.rhs4128: + %t107 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t108 = load { ptr, i64, i64 }, ptr %t107 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2542, i64 5, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br label %logic.rend4130 +logic.rend4130: + br label %logic.end4129 +logic.end4129: + %t113 = phi i1 [ true, %logic.from4127 ], [ %t112, %logic.rend4130 ] + br label %logic.from4131 +logic.from4131: + br i1 %t113, label %logic.rhs4132, label %logic.end4133 +logic.rhs4132: + %t114 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = icmp sgt i64 %t116, 0 + br label %logic.rend4134 +logic.rend4134: + br label %logic.end4133 +logic.end4133: + %t118 = phi i1 [ false, %logic.from4131 ], [ %t117, %logic.rend4134 ] + br label %logic.from4135 +logic.from4135: + br i1 %t118, label %logic.rhs4136, label %logic.end4137 +logic.rhs4136: + %t119 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t120 = load { ptr, i64, i64 }, ptr %t119 + %t121 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t122 = load { ptr, i64, i64 }, ptr %t121 + store { ptr, i64, i64 } %t120, ptr %a123 + store { ptr, i64, i64 } %t122, ptr %a124 + %t125 = call i32 @finch_str_eq(ptr %a123, ptr %a124) + %t126 = icmp ne i32 %t125, 0 + br label %logic.rend4138 +logic.rend4138: + br label %logic.end4137 +logic.end4137: + %t127 = phi i1 [ false, %logic.from4135 ], [ %t126, %logic.rend4138 ] + br label %logic.from4139 +logic.from4139: + br i1 %t127, label %logic.rhs4140, label %logic.end4141 +logic.rhs4140: + %t128 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 + %t130 = load i64, ptr %t129 + %t131 = icmp sgt i64 %t130, 0 + br label %logic.rend4142 +logic.rend4142: + br label %logic.end4141 +logic.end4141: + %t132 = phi i1 [ false, %logic.from4139 ], [ %t131, %logic.rend4142 ] + br i1 %t132, label %then4143, label %endif4145 +then4143: + %t133 = load ptr, ptr %a1 + %t134 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t135 = load { ptr, i64, i64 }, ptr %t134 + %t136 = extractvalue { ptr, i64, i64 } %t135, 1 + %t137 = icmp uge i64 0, %t136 + br i1 %t137, label %range4146, label %inrange4147 +range4146: + call void @finch_panic_index(ptr @.str.2543, i64 1769, i64 0, i64 %t136) + unreachable +inrange4147: + %t138 = extractvalue { ptr, i64, i64 } %t135, 0 + %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i64 0 + %t140 = load %S.ast.Type, ptr %t139 + %t141 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t142 = load { ptr, i64, i64 }, ptr %t141 + %t143 = extractvalue { ptr, i64, i64 } %t142, 1 + %t144 = icmp uge i64 0, %t143 + br i1 %t144, label %range4148, label %inrange4149 +range4148: + call void @finch_panic_index(ptr @.str.2544, i64 1769, i64 0, i64 %t143) + unreachable +inrange4149: + %t145 = extractvalue { ptr, i64, i64 } %t142, 0 + %t146 = getelementptr inbounds %S.ast.Type, ptr %t145, i64 0 + %t147 = load %S.ast.Type, ptr %t146 + %t148 = load { ptr, i64, i64 }, ptr %a4 + %t149 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t133, %S.ast.Type %t140, %S.ast.Type %t147, { ptr, i64, i64 } %t148, ptr %t149) + ret void +endif4145: + %t150 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t151 = load { ptr, i64, i64 }, ptr %t150 + store { ptr, i64, i64 } %t151, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.2545, i64 3, i64 0 }, ptr %a153 + %t154 = call i32 @finch_str_eq(ptr %a152, ptr %a153) + %t155 = icmp ne i32 %t154, 0 + br label %logic.from4150 +logic.from4150: + br i1 %t155, label %logic.rhs4151, label %logic.end4152 +logic.rhs4151: + %t156 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.2546, i64 3, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) + %t161 = icmp ne i32 %t160, 0 + br label %logic.rend4153 +logic.rend4153: + br label %logic.end4152 +logic.end4152: + %t162 = phi i1 [ false, %logic.from4150 ], [ %t161, %logic.rend4153 ] + br i1 %t162, label %then4154, label %endif4156 +then4154: + %t163 = load ptr, ptr %a1 + %t164 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t165 = load { ptr, i64, i64 }, ptr %t164 + %t166 = extractvalue { ptr, i64, i64 } %t165, 1 + %t167 = icmp uge i64 0, %t166 + br i1 %t167, label %range4157, label %inrange4158 +range4157: + call void @finch_panic_index(ptr @.str.2547, i64 1773, i64 0, i64 %t166) + unreachable +inrange4158: + %t168 = extractvalue { ptr, i64, i64 } %t165, 0 + %t169 = getelementptr inbounds %S.ast.Type, ptr %t168, i64 0 + %t170 = load %S.ast.Type, ptr %t169 + %t171 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t172 = load { ptr, i64, i64 }, ptr %t171 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 0, %t173 + br i1 %t174, label %range4159, label %inrange4160 +range4159: + call void @finch_panic_index(ptr @.str.2548, i64 1773, i64 0, i64 %t173) + unreachable +inrange4160: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds %S.ast.Type, ptr %t175, i64 0 + %t177 = load %S.ast.Type, ptr %t176 + %t178 = load { ptr, i64, i64 }, ptr %a4 + %t179 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t163, %S.ast.Type %t170, %S.ast.Type %t177, { ptr, i64, i64 } %t178, ptr %t179) + %t180 = load ptr, ptr %a1 + %t181 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t182 = load { ptr, i64, i64 }, ptr %t181 + %t183 = extractvalue { ptr, i64, i64 } %t182, 1 + %t184 = icmp uge i64 1, %t183 + br i1 %t184, label %range4161, label %inrange4162 +range4161: + call void @finch_panic_index(ptr @.str.2549, i64 1774, i64 1, i64 %t183) + unreachable +inrange4162: + %t185 = extractvalue { ptr, i64, i64 } %t182, 0 + %t186 = getelementptr inbounds %S.ast.Type, ptr %t185, i64 1 + %t187 = load %S.ast.Type, ptr %t186 + %t188 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t189 = load { ptr, i64, i64 }, ptr %t188 + %t190 = extractvalue { ptr, i64, i64 } %t189, 1 + %t191 = icmp uge i64 1, %t190 + br i1 %t191, label %range4163, label %inrange4164 +range4163: + call void @finch_panic_index(ptr @.str.2550, i64 1774, i64 1, i64 %t190) + unreachable +inrange4164: + %t192 = extractvalue { ptr, i64, i64 } %t189, 0 + %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i64 1 + %t194 = load %S.ast.Type, ptr %t193 + %t195 = load { ptr, i64, i64 }, ptr %a4 + %t196 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t180, %S.ast.Type %t187, %S.ast.Type %t194, { ptr, i64, i64 } %t195, ptr %t196) + ret void +endif4156: + %t197 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t198 = load { ptr, i64, i64 }, ptr %t197 + store { ptr, i64, i64 } %t198, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.2551, i64 5, i64 0 }, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp ne i32 %t201, 0 + br label %logic.from4165 +logic.from4165: + br i1 %t202, label %logic.rhs4166, label %logic.end4167 +logic.rhs4166: + %t203 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 + %t205 = load i64, ptr %t204 + %t206 = icmp sgt i64 %t205, 0 + br label %logic.rend4168 +logic.rend4168: + br label %logic.end4167 +logic.end4167: + %t207 = phi i1 [ false, %logic.from4165 ], [ %t206, %logic.rend4168 ] + br label %logic.from4169 +logic.from4169: + br i1 %t207, label %logic.rhs4170, label %logic.end4171 +logic.rhs4170: + %t208 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t209 = load { ptr, i64, i64 }, ptr %t208 + store { ptr, i64, i64 } %t209, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.2552, i64 6, i64 0 }, ptr %a211 + %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) + %t213 = icmp ne i32 %t212, 0 + br label %logic.rend4172 +logic.rend4172: + br label %logic.end4171 +logic.end4171: + %t214 = phi i1 [ false, %logic.from4169 ], [ %t213, %logic.rend4172 ] + br i1 %t214, label %then4173, label %endif4175 +then4173: + %t215 = load ptr, ptr %a1 + %t216 = icmp eq ptr %t215, null + br i1 %t216, label %panic4176, label %ok4177 +panic4176: + call void @finch_panic(ptr @.str.2553, i64 1778, ptr @.str.2554) + unreachable +ok4177: + %t217 = getelementptr inbounds %S.gen.Gen, ptr %t215, i32 0, i32 16 + %t218 = load ptr, ptr %a1 + %t219 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 + %t220 = load { ptr, i64, i64 }, ptr %t219 + %t221 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 + %t222 = load { ptr, i64, i64 }, ptr %t221 + %t223 = call i64 @finch.gen.findStruct(ptr %t218, { ptr, i64, i64 } %t220, { ptr, i64, i64 } %t222) + %t224 = load { ptr, i64, i64 }, ptr %t217 + %t225 = extractvalue { ptr, i64, i64 } %t224, 1 + %t226 = icmp uge i64 %t223, %t225 + br i1 %t226, label %range4178, label %inrange4179 +range4178: + call void @finch_panic_index(ptr @.str.2555, i64 1778, i64 %t223, i64 %t225) + unreachable +inrange4179: + %t227 = extractvalue { ptr, i64, i64 } %t224, 0 + %t228 = getelementptr inbounds %S.gen.StructDef, ptr %t227, i64 %t223 + %t229 = load %S.gen.StructDef, ptr %t228 + store %S.gen.StructDef %t229, ptr %a230 + call void @finch.copy.S_gen_StructDef(ptr %a231, ptr %a230) + %t232 = load %S.gen.StructDef, ptr %a231 + store %S.gen.StructDef %t232, ptr %a233 + %t234 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 5 + %t235 = load { ptr, i64, i64 }, ptr %t234 + %t236 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t237 = load { ptr, i64, i64 }, ptr %t236 + store { ptr, i64, i64 } %t235, ptr %a238 + store { ptr, i64, i64 } %t237, ptr %a239 + %t240 = call i32 @finch_str_eq(ptr %a238, ptr %a239) + %t241 = icmp ne i32 %t240, 0 + br label %logic.from4180 +logic.from4180: + br i1 %t241, label %logic.rhs4181, label %logic.end4182 +logic.rhs4181: + %t242 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 + %t244 = load i64, ptr %t243 + %t245 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %t245, i32 0, i32 1 + %t247 = load i64, ptr %t246 + %t248 = icmp eq i64 %t244, %t247 + br label %logic.rend4183 +logic.rend4183: + br label %logic.end4182 +logic.end4182: + %t249 = phi i1 [ false, %logic.from4180 ], [ %t248, %logic.rend4183 ] + br i1 %t249, label %then4184, label %endif4186 +then4184: + %t250 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t251 = getelementptr inbounds { ptr, i64, i64 }, ptr %t250, i32 0, i32 1 + %t252 = load i64, ptr %t251 + store i64 0, ptr %a253 + br label %for.cond4187 +for.cond4187: + %t254 = load i64, ptr %a253 + %t255 = icmp slt i64 %t254, %t252 + br i1 %t255, label %for.body4188, label %for.end4190 +for.body4188: + %t256 = load ptr, ptr %a1 + %t257 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t258 = load i64, ptr %a253 + %t259 = load { ptr, i64, i64 }, ptr %t257 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 %t258, %t260 + br i1 %t261, label %range4191, label %inrange4192 +range4191: + call void @finch_panic_index(ptr @.str.2556, i64 1781, i64 %t258, i64 %t260) + unreachable +inrange4192: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds %S.ast.Type, ptr %t262, i64 %t258 + %t264 = load %S.ast.Type, ptr %t263 + %t265 = getelementptr inbounds %S.gen.StructDef, ptr %a233, i32 0, i32 7 + %t266 = load i64, ptr %a253 + %t267 = load { ptr, i64, i64 }, ptr %t265 + %t268 = extractvalue { ptr, i64, i64 } %t267, 1 + %t269 = icmp uge i64 %t266, %t268 + br i1 %t269, label %range4193, label %inrange4194 +range4193: + call void @finch_panic_index(ptr @.str.2557, i64 1781, i64 %t266, i64 %t268) + unreachable +inrange4194: + %t270 = extractvalue { ptr, i64, i64 } %t267, 0 + %t271 = getelementptr inbounds %S.ast.Type, ptr %t270, i64 %t266 + %t272 = load %S.ast.Type, ptr %t271 + %t273 = load { ptr, i64, i64 }, ptr %a4 + %t274 = load ptr, ptr %a5 + call void @finch.gen.bindType(ptr %t256, %S.ast.Type %t264, %S.ast.Type %t272, { ptr, i64, i64 } %t273, ptr %t274) + br label %for.step4189 +for.step4189: + %t275 = load i64, ptr %a253 + %t276 = add i64 %t275, 1 + store i64 %t276, ptr %a253 + br label %for.cond4187 +for.end4190: + br label %endif4186 +endif4186: + call void @finch.drop.S_gen_StructDef(ptr %a233) + br label %endif4175 +endif4175: + ret void +} + +define internal void @finch.drop.arr_S_gen_Val(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond4271 +n.cond4271: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body4272, label %n.end4273 +n.body4272: + %t7 = getelementptr inbounds %S.gen.Val, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Val(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond4271 +n.end4273: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Binds(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Binds, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_ast_Type(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Binds, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_bool(ptr %t2) + ret void +} + +define internal %S.gen.Val @finch.gen.genericCall(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.gen.Template, align 16 + %a17 = alloca %S.gen.Template, align 16 + %a19 = alloca %S.gen.Template, align 16 + %a39 = alloca %S.ast.Node, align 16 + %a40 = alloca %S.ast.Node, align 16 + %a42 = alloca %S.ast.Node, align 16 + %a47 = alloca i64, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca i64, align 16 + %a113 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.ast.Type, align 16 + %a137 = alloca %S.gen.Binds, align 16 + %a141 = alloca i64, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca i64, align 16 + %a167 = alloca i64, align 16 + %a182 = alloca %S.gen.Val, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca %S.gen.Val, align 16 + %a228 = alloca %S.gen.Val, align 16 + %a255 = alloca i64, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a309 = alloca i64, align 16 + %a320 = alloca %S.gen.FnSig, align 16 + %a321 = alloca %S.gen.FnSig, align 16 + %a323 = alloca %S.gen.FnSig, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca i64, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca %S.gen.Val, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca %S.gen.Val, align 16 + %a414 = alloca i64, align 16 + %a422 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4195, label %ok4196 +panic4195: + call void @finch_panic(ptr @.str.2558, i64 1789, ptr @.str.2559) + unreachable +ok4196: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 17 + %t9 = load i64, ptr %a3 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range4197, label %inrange4198 +range4197: + call void @finch_panic_index(ptr @.str.2560, i64 1789, i64 %t9, i64 %t11) + unreachable +inrange4198: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.Template, ptr %t13, i64 %t9 + %t15 = load %S.gen.Template, ptr %t14 + store %S.gen.Template %t15, ptr %a16 + call void @finch.copy.S_gen_Template(ptr %a17, ptr %a16) + %t18 = load %S.gen.Template, ptr %a17 + store %S.gen.Template %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic4199, label %ok4200 +panic4199: + call void @finch_panic(ptr @.str.2561, i64 1790, ptr @.str.2562) + unreachable +ok4200: + %t22 = getelementptr inbounds %S.gen.Gen, ptr %t20, i32 0, i32 0 + %t23 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 4 + %t24 = load i64, ptr %t23 + %t25 = load { ptr, i64, i64 }, ptr %t22 + %t26 = extractvalue { ptr, i64, i64 } %t25, 1 + %t27 = icmp uge i64 %t24, %t26 + br i1 %t27, label %range4201, label %inrange4202 +range4201: + call void @finch_panic_index(ptr @.str.2563, i64 1790, i64 %t24, i64 %t26) + unreachable +inrange4202: + %t28 = extractvalue { ptr, i64, i64 } %t25, 0 + %t29 = getelementptr inbounds %S.ast.Program, ptr %t28, i64 %t24 + %t30 = getelementptr inbounds %S.ast.Program, ptr %t29, i32 0, i32 8 + %t31 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 5 + %t32 = load i64, ptr %t31 + %t33 = load { ptr, i64, i64 }, ptr %t30 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range4203, label %inrange4204 +range4203: + call void @finch_panic_index(ptr @.str.2564, i64 1790, i64 %t32, i64 %t34) + unreachable +inrange4204: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 %t32 + %t38 = load %S.ast.Node, ptr %t37 + store %S.ast.Node %t38, ptr %a39 + call void @finch.copy.S_ast_Node(ptr %a40, ptr %a39) + %t41 = load %S.ast.Node, ptr %a40 + store %S.ast.Node %t41, ptr %a42 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = sub i64 %t45, 1 + store i64 %t46, ptr %a47 + %t48 = load ptr, ptr %a1 + %t49 = load %S.ast.Node, ptr %a2 + %t50 = load i64, ptr %a4 + %t51 = load i64, ptr %a47 + %t52 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.checkArgs(ptr %t48, %S.ast.Node %t49, i64 %t50, i64 %t51, { ptr, i64, i64 } %t52) + store { ptr, i64, i64 } zeroinitializer, ptr %a53 + %t54 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t55 = getelementptr inbounds %S.ast.Type, ptr %t54, i32 0, i32 1 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i32 0, i32 1 + %t57 = load i64, ptr %t56 + %t58 = icmp sgt i64 %t57, 0 + br i1 %t58, label %then4205, label %endif4207 +then4205: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t60 = getelementptr inbounds %S.ast.Type, ptr %t59, i32 0, i32 1 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 + %t62 = load i64, ptr %t61 + %t63 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + %t65 = load i64, ptr %t64 + %t66 = icmp ne i64 %t62, %t65 + br i1 %t66, label %then4208, label %endif4210 +then4208: + %t67 = load ptr, ptr %a1 + %t68 = load %S.ast.Node, ptr %a2 + %t69 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.2565, i64 7, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a70 + %t74 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i32 0, i32 1 + %t76 = load i64, ptr %t75 + call void @finch_str_from_int(ptr %a77, i64 %t76) + %t78 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t73, ptr %a80 + store { ptr, i64, i64 } %t78, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + store { ptr, i64, i64 } %t73, ptr %a82 + call void @finch_str_drop(ptr %a82) + store { ptr, i64, i64 } %t78, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t84, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.2566, i64 27, i64 0 }, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + %t90 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i32 0, i32 1 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i32 0, i32 1 + %t93 = load i64, ptr %t92 + call void @finch_str_from_int(ptr %a94, i64 %t93) + %t95 = load { ptr, i64, i64 }, ptr %a94 + store { ptr, i64, i64 } %t89, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t89, ptr %a99 + call void @finch_str_drop(ptr %a99) + store { ptr, i64, i64 } %t95, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.gen.fail(ptr %t67, %S.ast.Node %t68, { ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t101, ptr %a102 + call void @finch_str_drop(ptr %a102) + br label %endif4210 +endif4210: + %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t104 = getelementptr inbounds %S.ast.Type, ptr %t103, i32 0, i32 1 + store i64 0, ptr %a105 + br label %each.cond4211 +each.cond4211: + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t107 = load i64, ptr %t106 + %t108 = load i64, ptr %a105 + %t109 = icmp slt i64 %t108, %t107 + br i1 %t109, label %each.body4212, label %each.end4214 +each.body4212: + %t110 = load ptr, ptr %t104 + %t111 = getelementptr inbounds %S.ast.Type, ptr %t110, i64 %t108 + %t112 = load %S.ast.Type, ptr %t111 + store %S.ast.Type %t112, ptr %a113 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 + %t115 = load ptr, ptr %a1 + %t116 = load %S.ast.Type, ptr %a113 + %t117 = load %S.ast.Node, ptr %a2 + %t118 = call %S.ast.Type @finch.gen.resolve(ptr %t115, %S.ast.Type %t116, %S.ast.Node %t117) + %t119 = load i64, ptr %t114 + %t120 = add i64 %t119, 1 + call void @finch_arr_reserve(ptr %a53, i64 %t120, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t121 = load ptr, ptr %a53 + %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 %t119 + store %S.ast.Type %t118, ptr %t122 + store i64 %t120, ptr %t114 + br label %each.step4213 +each.step4213: + %t123 = load i64, ptr %a105 + %t124 = add i64 %t123, 1 + store i64 %t124, ptr %a105 + br label %each.cond4211 +each.end4214: + %t125 = load ptr, ptr %a1 + %t126 = load ptr, ptr %a1 + %t127 = load i64, ptr %a3 + %t128 = load { ptr, i64, i64 }, ptr %a53 + %t129 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2567, i64 4, i64 0 }) + %t130 = load %S.ast.Node, ptr %a2 + %t131 = call i64 @finch.gen.instFn(ptr %t126, i64 %t127, { ptr, i64, i64 } %t128, %S.ast.Type %t129, %S.ast.Node %t130) + store %S.ast.Type %t129, ptr %a132 + call void @finch.drop.S_ast_Type(ptr %a132) + %t133 = load %S.ast.Node, ptr %a2 + %t134 = load i64, ptr %a4 + %t135 = load { ptr, i64, i64 }, ptr %a5 + %t136 = call %S.gen.Val @finch.gen.callFn(ptr %t125, i64 %t131, %S.ast.Node %t133, i64 %t134, { ptr, i64, i64 } %t135, { ptr, i64, i64 } { ptr @.str.2568, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.2569, i64 0, i64 0 }) + call void @finch.drop.arr_S_ast_Type(ptr %a53) + call void @finch.drop.S_ast_Node(ptr %a42) + call void @finch.drop.S_gen_Template(ptr %a19) + ret %S.gen.Val %t136 +endif4207: + store %S.gen.Binds zeroinitializer, ptr %a137 + %t138 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 + %t140 = load i64, ptr %t139 + store i64 0, ptr %a141 + br label %for.cond4215 +for.cond4215: + %t142 = load i64, ptr %a141 + %t143 = icmp slt i64 %t142, %t140 + br i1 %t143, label %for.body4216, label %for.end4218 +for.body4216: + %t144 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 + %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 + %t146 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2570, i64 4, i64 0 }) + %t147 = load i64, ptr %t145 + %t148 = add i64 %t147, 1 + call void @finch_arr_reserve(ptr %t144, i64 %t148, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t149 = load ptr, ptr %t144 + %t150 = getelementptr inbounds %S.ast.Type, ptr %t149, i64 %t147 + store %S.ast.Type %t146, ptr %t150 + store i64 %t148, ptr %t145 + %t151 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load i64, ptr %t152 + %t154 = add i64 %t153, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t154, i64 ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64)) + %t155 = load ptr, ptr %t151 + %t156 = getelementptr inbounds i1, ptr %t155, i64 %t153 + store i1 false, ptr %t156 + store i64 %t154, ptr %t152 + br label %for.step4217 +for.step4217: + %t157 = load i64, ptr %a141 + %t158 = add i64 %t157, 1 + store i64 %t158, ptr %a141 + br label %for.cond4215 +for.end4218: + store { ptr, i64, i64 } zeroinitializer, ptr %a159 + %t160 = load ptr, ptr %a1 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic4219, label %ok4220 +panic4219: + call void @finch_panic(ptr @.str.2571, i64 1809, ptr @.str.2572) + unreachable +ok4220: + %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 11 + %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i32 0, i32 1 + %t164 = load i64, ptr %t163 + store i64 %t164, ptr %a165 + %t166 = load i64, ptr %a47 + store i64 0, ptr %a167 + br label %for.cond4221 +for.cond4221: + %t168 = load i64, ptr %a167 + %t169 = icmp slt i64 %t168, %t166 + br i1 %t169, label %for.body4222, label %for.end4224 +for.body4222: + %t170 = load ptr, ptr %a1 + %t171 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t172 = load i64, ptr %a4 + %t173 = load i64, ptr %a167 + %t174 = add i64 %t172, %t173 + %t175 = load { ptr, i64, i64 }, ptr %t171 + %t176 = extractvalue { ptr, i64, i64 } %t175, 1 + %t177 = icmp uge i64 %t174, %t176 + br i1 %t177, label %range4225, label %inrange4226 +range4225: + call void @finch_panic_index(ptr @.str.2573, i64 1811, i64 %t174, i64 %t176) + unreachable +inrange4226: + %t178 = extractvalue { ptr, i64, i64 } %t175, 0 + %t179 = getelementptr inbounds %S.ast.Node, ptr %t178, i64 %t174 + %t180 = load %S.ast.Node, ptr %t179 + %t181 = call %S.gen.Val @finch.gen.expr(ptr %t170, %S.ast.Node %t180) + store %S.gen.Val %t181, ptr %a182 + %t183 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 + %t184 = getelementptr inbounds %S.ast.Type, ptr %t183, i32 0, i32 0 + %t185 = load { ptr, i64, i64 }, ptr %t184 + store { ptr, i64, i64 } %t185, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.2574, i64 4, i64 0 }, ptr %a187 + %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) + %t189 = icmp ne i32 %t188, 0 + br label %logic.from4227 +logic.from4227: + br i1 %t189, label %logic.end4229, label %logic.rhs4228 +logic.rhs4228: + %t190 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 + %t191 = getelementptr inbounds %S.ast.Type, ptr %t190, i32 0, i32 0 + %t192 = load { ptr, i64, i64 }, ptr %t191 + store { ptr, i64, i64 } %t192, ptr %a193 + store { ptr, i64, i64 } { ptr @.str.2575, i64 4, i64 0 }, ptr %a194 + %t195 = call i32 @finch_str_eq(ptr %a193, ptr %a194) + %t196 = icmp ne i32 %t195, 0 + br label %logic.rend4230 +logic.rend4230: + br label %logic.end4229 +logic.end4229: + %t197 = phi i1 [ true, %logic.from4227 ], [ %t196, %logic.rend4230 ] + br i1 %t197, label %then4231, label %endif4233 +then4231: + %t198 = load ptr, ptr %a1 + %t199 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t200 = load i64, ptr %a4 + %t201 = load i64, ptr %a167 + %t202 = add i64 %t200, %t201 + %t203 = load { ptr, i64, i64 }, ptr %t199 + %t204 = extractvalue { ptr, i64, i64 } %t203, 1 + %t205 = icmp uge i64 %t202, %t204 + br i1 %t205, label %range4234, label %inrange4235 +range4234: + call void @finch_panic_index(ptr @.str.2576, i64 1813, i64 %t202, i64 %t204) + unreachable +inrange4235: + %t206 = extractvalue { ptr, i64, i64 } %t203, 0 + %t207 = getelementptr inbounds %S.ast.Node, ptr %t206, i64 %t202 + %t208 = load %S.ast.Node, ptr %t207 + %t209 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2578, i64 2, i64 0 }, ptr %a211 + call void @finch_str_join(ptr %a212, ptr %t209, ptr %a211) + %t213 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } { ptr @.str.2577, i64 29, i64 0 }, ptr %a215 + store { ptr, i64, i64 } %t213, ptr %a216 + call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) + store { ptr, i64, i64 } %t213, ptr %a217 + call void @finch_str_drop(ptr %a217) + %t218 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t218, ptr %a220 + store { ptr, i64, i64 } { ptr @.str.2579, i64 5, i64 0 }, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t218, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.fail(ptr %t198, %S.ast.Node %t208, { ptr, i64, i64 } %t223) + store { ptr, i64, i64 } %t223, ptr %a224 + call void @finch_str_drop(ptr %a224) + br label %endif4233 +endif4233: + %t225 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 + %t226 = load %S.gen.Val, ptr %a182 + store %S.gen.Val %t226, ptr %a227 + call void @finch.copy.S_gen_Val(ptr %a228, ptr %a227) + %t229 = load %S.gen.Val, ptr %a228 + %t230 = load i64, ptr %t225 + %t231 = add i64 %t230, 1 + call void @finch_arr_reserve(ptr %a159, i64 %t231, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t232 = load ptr, ptr %a159 + %t233 = getelementptr inbounds %S.gen.Val, ptr %t232, i64 %t230 + store %S.gen.Val %t229, ptr %t233 + store i64 %t231, ptr %t225 + %t234 = load ptr, ptr %a1 + %t235 = load %S.gen.Val, ptr %a182 + call void @finch.gen.hold(ptr %t234, %S.gen.Val %t235) + %t236 = load ptr, ptr %a1 + %t237 = getelementptr inbounds %S.ast.Node, ptr %a42, i32 0, i32 9 + %t238 = load i64, ptr %a167 + %t239 = load { ptr, i64, i64 }, ptr %t237 + %t240 = extractvalue { ptr, i64, i64 } %t239, 1 + %t241 = icmp uge i64 %t238, %t240 + br i1 %t241, label %range4236, label %inrange4237 +range4236: + call void @finch_panic_index(ptr @.str.2580, i64 1817, i64 %t238, i64 %t240) + unreachable +inrange4237: + %t242 = extractvalue { ptr, i64, i64 } %t239, 0 + %t243 = getelementptr inbounds %S.ast.Node, ptr %t242, i64 %t238 + %t244 = getelementptr inbounds %S.ast.Node, ptr %t243, i32 0, i32 5 + %t245 = load %S.ast.Type, ptr %t244 + %t246 = getelementptr inbounds %S.gen.Val, ptr %a182, i32 0, i32 1 + %t247 = load %S.ast.Type, ptr %t246 + %t248 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t249 = load { ptr, i64, i64 }, ptr %t248 + call void @finch.gen.bindType(ptr %t236, %S.ast.Type %t245, %S.ast.Type %t247, { ptr, i64, i64 } %t249, ptr %a137) + call void @finch.drop.S_gen_Val(ptr %a182) + br label %for.step4223 +for.step4223: + %t250 = load i64, ptr %a167 + %t251 = add i64 %t250, 1 + store i64 %t251, ptr %a167 + br label %for.cond4221 +for.end4224: + %t252 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i32 0, i32 1 + %t254 = load i64, ptr %t253 + store i64 0, ptr %a255 + br label %for.cond4238 +for.cond4238: + %t256 = load i64, ptr %a255 + %t257 = icmp slt i64 %t256, %t254 + br i1 %t257, label %for.body4239, label %for.end4241 +for.body4239: + %t258 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 1 + %t259 = load i64, ptr %a255 + %t260 = load { ptr, i64, i64 }, ptr %t258 + %t261 = extractvalue { ptr, i64, i64 } %t260, 1 + %t262 = icmp uge i64 %t259, %t261 + br i1 %t262, label %range4242, label %inrange4243 +range4242: + call void @finch_panic_index(ptr @.str.2581, i64 1820, i64 %t259, i64 %t261) + unreachable +inrange4243: + %t263 = extractvalue { ptr, i64, i64 } %t260, 0 + %t264 = getelementptr inbounds i1, ptr %t263, i64 %t259 + %t265 = load i1, ptr %t264 + %t266 = xor i1 %t265, true + br i1 %t266, label %then4244, label %endif4246 +then4244: + %t267 = load ptr, ptr %a1 + %t268 = load %S.ast.Node, ptr %a2 + %t269 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 3 + %t270 = load i64, ptr %a255 + %t271 = load { ptr, i64, i64 }, ptr %t269 + %t272 = extractvalue { ptr, i64, i64 } %t271, 1 + %t273 = icmp uge i64 %t270, %t272 + br i1 %t273, label %range4247, label %inrange4248 +range4247: + call void @finch_panic_index(ptr @.str.2583, i64 1821, i64 %t270, i64 %t272) + unreachable +inrange4248: + %t274 = extractvalue { ptr, i64, i64 } %t271, 0 + %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %t274, i64 %t270 + %t276 = load { ptr, i64, i64 }, ptr %t275 + store { ptr, i64, i64 } { ptr @.str.2582, i64 16, i64 0 }, ptr %a278 + store { ptr, i64, i64 } %t276, ptr %a279 + call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) + %t280 = load { ptr, i64, i64 }, ptr %a277 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.2584, i64 24, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t280, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + %t286 = getelementptr inbounds %S.gen.Template, ptr %a19, i32 0, i32 1 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } %t285, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t285, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t292, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.2585, i64 10, i64 0 }, ptr %a295 + call void @finch_str_concat(ptr %a293, ptr %a294, ptr %a295) + store { ptr, i64, i64 } %t292, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a293 + call void @finch.gen.fail(ptr %t267, %S.ast.Node %t268, { ptr, i64, i64 } %t297) + store { ptr, i64, i64 } %t297, ptr %a298 + call void @finch_str_drop(ptr %a298) + br label %endif4246 +endif4246: + br label %for.step4240 +for.step4240: + %t299 = load i64, ptr %a255 + %t300 = add i64 %t299, 1 + store i64 %t300, ptr %a255 + br label %for.cond4238 +for.end4241: + %t301 = load ptr, ptr %a1 + %t302 = load i64, ptr %a3 + %t303 = getelementptr inbounds %S.gen.Binds, ptr %a137, i32 0, i32 0 + %t304 = load { ptr, i64, i64 }, ptr %t303 + %t305 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.2586, i64 4, i64 0 }) + %t306 = load %S.ast.Node, ptr %a2 + %t307 = call i64 @finch.gen.instFn(ptr %t301, i64 %t302, { ptr, i64, i64 } %t304, %S.ast.Type %t305, %S.ast.Node %t306) + store %S.ast.Type %t305, ptr %a308 + call void @finch.drop.S_ast_Type(ptr %a308) + store i64 %t307, ptr %a309 + %t310 = load ptr, ptr %a1 + %t311 = icmp eq ptr %t310, null + br i1 %t311, label %panic4249, label %ok4250 +panic4249: + call void @finch_panic(ptr @.str.2587, i64 1825, ptr @.str.2588) + unreachable +ok4250: + %t312 = getelementptr inbounds %S.gen.Gen, ptr %t310, i32 0, i32 15 + %t313 = load i64, ptr %a309 + %t314 = load { ptr, i64, i64 }, ptr %t312 + %t315 = extractvalue { ptr, i64, i64 } %t314, 1 + %t316 = icmp uge i64 %t313, %t315 + br i1 %t316, label %range4251, label %inrange4252 +range4251: + call void @finch_panic_index(ptr @.str.2589, i64 1825, i64 %t313, i64 %t315) + unreachable +inrange4252: + %t317 = extractvalue { ptr, i64, i64 } %t314, 0 + %t318 = getelementptr inbounds %S.gen.FnSig, ptr %t317, i64 %t313 + %t319 = load %S.gen.FnSig, ptr %t318 + store %S.gen.FnSig %t319, ptr %a320 + call void @finch.copy.S_gen_FnSig(ptr %a321, ptr %a320) + %t322 = load %S.gen.FnSig, ptr %a321 + store %S.gen.FnSig %t322, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = load %S.ast.Node, ptr %a2 + %t326 = load %S.gen.FnSig, ptr %a323 + call void @finch.gen.noteCall(ptr %t324, %S.ast.Node %t325, %S.gen.FnSig %t326) + store { ptr, i64, i64 } zeroinitializer, ptr %a327 + %t328 = load i64, ptr %a47 + store i64 0, ptr %a329 + br label %for.cond4253 +for.cond4253: + %t330 = load i64, ptr %a329 + %t331 = icmp slt i64 %t330, %t328 + br i1 %t331, label %for.body4254, label %for.end4256 +for.body4254: + %t332 = load ptr, ptr %a1 + %t333 = load i64, ptr %a329 + %t334 = load { ptr, i64, i64 }, ptr %a159 + %t335 = extractvalue { ptr, i64, i64 } %t334, 1 + %t336 = icmp uge i64 %t333, %t335 + br i1 %t336, label %range4257, label %inrange4258 +range4257: + call void @finch_panic_index(ptr @.str.2590, i64 1829, i64 %t333, i64 %t335) + unreachable +inrange4258: + %t337 = extractvalue { ptr, i64, i64 } %t334, 0 + %t338 = getelementptr inbounds %S.gen.Val, ptr %t337, i64 %t333 + %t339 = load %S.gen.Val, ptr %t338 + %t340 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 13 + %t341 = load i64, ptr %a329 + %t342 = load { ptr, i64, i64 }, ptr %t340 + %t343 = extractvalue { ptr, i64, i64 } %t342, 1 + %t344 = icmp uge i64 %t341, %t343 + br i1 %t344, label %range4259, label %inrange4260 +range4259: + call void @finch_panic_index(ptr @.str.2591, i64 1829, i64 %t341, i64 %t343) + unreachable +inrange4260: + %t345 = extractvalue { ptr, i64, i64 } %t342, 0 + %t346 = getelementptr inbounds %S.ast.Type, ptr %t345, i64 %t341 + %t347 = load %S.ast.Type, ptr %t346 + %t348 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t349 = load i64, ptr %a4 + %t350 = load i64, ptr %a329 + %t351 = add i64 %t349, %t350 + %t352 = load { ptr, i64, i64 }, ptr %t348 + %t353 = extractvalue { ptr, i64, i64 } %t352, 1 + %t354 = icmp uge i64 %t351, %t353 + br i1 %t354, label %range4261, label %inrange4262 +range4261: + call void @finch_panic_index(ptr @.str.2592, i64 1829, i64 %t351, i64 %t353) + unreachable +inrange4262: + %t355 = extractvalue { ptr, i64, i64 } %t352, 0 + %t356 = getelementptr inbounds %S.ast.Node, ptr %t355, i64 %t351 + %t357 = load %S.ast.Node, ptr %t356 + %t358 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 14 + %t359 = load i64, ptr %a329 + %t360 = load { ptr, i64, i64 }, ptr %t358 + %t361 = extractvalue { ptr, i64, i64 } %t360, 1 + %t362 = icmp uge i64 %t359, %t361 + br i1 %t362, label %range4263, label %inrange4264 +range4263: + call void @finch_panic_index(ptr @.str.2594, i64 1829, i64 %t359, i64 %t361) + unreachable +inrange4264: + %t363 = extractvalue { ptr, i64, i64 } %t360, 0 + %t364 = getelementptr inbounds { ptr, i64, i64 }, ptr %t363, i64 %t359 + %t365 = load { ptr, i64, i64 }, ptr %t364 + store { ptr, i64, i64 } { ptr @.str.2593, i64 10, i64 0 }, ptr %a367 + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a366 + store { ptr, i64, i64 } %t369, ptr %a371 + store { ptr, i64, i64 } { ptr @.str.2595, i64 1, i64 0 }, ptr %a372 + call void @finch_str_concat(ptr %a370, ptr %a371, ptr %a372) + store { ptr, i64, i64 } %t369, ptr %a373 + call void @finch_str_drop(ptr %a373) + %t374 = load { ptr, i64, i64 }, ptr %a370 + %t375 = call %S.gen.Val @finch.gen.coerce(ptr %t332, %S.gen.Val %t339, %S.ast.Type %t347, %S.ast.Node %t357, { ptr, i64, i64 } %t374) + store { ptr, i64, i64 } %t374, ptr %a376 + call void @finch_str_drop(ptr %a376) + store %S.gen.Val %t375, ptr %a377 + %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %a327, i32 0, i32 1 + %t379 = load ptr, ptr %a1 + %t380 = getelementptr inbounds %S.gen.FnSig, ptr %a323, i32 0, i32 13 + %t381 = load i64, ptr %a329 + %t382 = load { ptr, i64, i64 }, ptr %t380 + %t383 = extractvalue { ptr, i64, i64 } %t382, 1 + %t384 = icmp uge i64 %t381, %t383 + br i1 %t384, label %range4265, label %inrange4266 +range4265: + call void @finch_panic_index(ptr @.str.2596, i64 1830, i64 %t381, i64 %t383) + unreachable +inrange4266: + %t385 = extractvalue { ptr, i64, i64 } %t382, 0 + %t386 = getelementptr inbounds %S.ast.Type, ptr %t385, i64 %t381 + %t387 = load %S.ast.Type, ptr %t386 + %t388 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t379, %S.ast.Type %t387) + store { ptr, i64, i64 } %t388, ptr %a390 + store { ptr, i64, i64 } { ptr @.str.2597, i64 1, i64 0 }, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t388, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + %t394 = getelementptr inbounds %S.gen.Val, ptr %a377, i32 0, i32 0 + %t395 = load { ptr, i64, i64 }, ptr %t394 + store { ptr, i64, i64 } %t393, ptr %a397 + store { ptr, i64, i64 } %t395, ptr %a398 + call void @finch_str_concat(ptr %a396, ptr %a397, ptr %a398) + store { ptr, i64, i64 } %t393, ptr %a399 + call void @finch_str_drop(ptr %a399) + %t400 = load { ptr, i64, i64 }, ptr %a396 + %t401 = load i64, ptr %t378 + %t402 = add i64 %t401, 1 + call void @finch_arr_reserve(ptr %a327, i64 %t402, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t403 = load ptr, ptr %a327 + %t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %t403, i64 %t401 + store { ptr, i64, i64 } %t400, ptr %t404 + store i64 %t402, ptr %t378 + call void @finch.drop.S_gen_Val(ptr %a377) + br label %for.step4255 +for.step4255: + %t405 = load i64, ptr %a329 + %t406 = add i64 %t405, 1 + store i64 %t406, ptr %a329 + br label %for.cond4253 +for.end4256: + %t407 = load ptr, ptr %a1 + %t408 = load %S.gen.FnSig, ptr %a323 + %t409 = load %S.ast.Node, ptr %a2 + %t410 = load { ptr, i64, i64 }, ptr %a327 + %t411 = load { ptr, i64, i64 }, ptr %a5 + %t412 = call %S.gen.Val @finch.gen.emitCall(ptr %t407, %S.gen.FnSig %t408, %S.ast.Node %t409, { ptr, i64, i64 } %t410, { ptr, i64, i64 } %t411) + store %S.gen.Val %t412, ptr %a413 + store i64 0, ptr %a414 + br label %each.cond4267 +each.cond4267: + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %a159, i32 0, i32 1 + %t416 = load i64, ptr %t415 + %t417 = load i64, ptr %a414 + %t418 = icmp slt i64 %t417, %t416 + br i1 %t418, label %each.body4268, label %each.end4270 +each.body4268: + %t419 = load ptr, ptr %a159 + %t420 = getelementptr inbounds %S.gen.Val, ptr %t419, i64 %t417 + %t421 = load %S.gen.Val, ptr %t420 + store %S.gen.Val %t421, ptr %a422 + %t423 = load ptr, ptr %a1 + %t424 = load %S.gen.Val, ptr %a422 + call void @finch.gen.release(ptr %t423, %S.gen.Val %t424) + br label %each.step4269 +each.step4269: + %t425 = load i64, ptr %a414 + %t426 = add i64 %t425, 1 + store i64 %t426, ptr %a414 + br label %each.cond4267 +each.end4270: + %t427 = load ptr, ptr %a1 + %t428 = load i64, ptr %a165 + call void @finch.gen.heldEnd(ptr %t427, i64 %t428) + %t429 = load %S.gen.Val, ptr %a413 + call void @finch.drop.arr_str(ptr %a327) + call void @finch.drop.S_gen_FnSig(ptr %a323) + call void @finch.drop.arr_S_gen_Val(ptr %a159) + call void @finch.drop.S_gen_Binds(ptr %a137) + call void @finch.drop.arr_S_ast_Type(ptr %a53) + call void @finch.drop.S_ast_Node(ptr %a42) + call void @finch.drop.S_gen_Template(ptr %a19) + ret %S.gen.Val %t429 +} + +define internal void @finch.copy.S_cimport_CField(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CField, ptr %src + store %S.cimport.CField %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CField, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CField, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.copy.arr_S_cimport_CField(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond4282 +n.cond4282: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body4283, label %n.end4284 +n.body4283: + %t8 = getelementptr inbounds %S.cimport.CField, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.cimport.CField, ptr %t2, i64 %t6 + call void @finch.copy.S_cimport_CField(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond4282 +n.end4284: + ret void +} + +define internal void @finch.copy.S_cimport_CStruct(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CStruct, ptr %src + store %S.cimport.CStruct %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_cimport_CField(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.cimport.CStruct, ptr %dst, i32 0, i32 4 + %t7 = getelementptr inbounds %S.cimport.CStruct, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal void @finch.gen.resolveCStruct(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca %S.cimport.CStruct, align 16 + %a29 = alloca %S.cimport.CStruct, align 16 + %a31 = alloca %S.cimport.CStruct, align 16 + %a42 = alloca i64, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca i64, align 16 + %a53 = alloca %S.cimport.CField, align 16 + %a60 = alloca %S.ast.Type, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.ast.Type, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4274, label %ok4275 +panic4274: + call void @finch_panic(ptr @.str.2598, i64 1843, ptr @.str.2599) + unreachable +ok4275: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 26 + %t6 = getelementptr inbounds %S.cimport.CImports, ptr %t5, i32 0, i32 3 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic4276, label %ok4277 +panic4276: + call void @finch_panic(ptr @.str.2600, i64 1843, ptr @.str.2601) + unreachable +ok4277: + %t9 = getelementptr inbounds %S.gen.Gen, ptr %t7, i32 0, i32 16 + %t10 = load i64, ptr %a2 + %t11 = load { ptr, i64, i64 }, ptr %t9 + %t12 = extractvalue { ptr, i64, i64 } %t11, 1 + %t13 = icmp uge i64 %t10, %t12 + br i1 %t13, label %range4278, label %inrange4279 +range4278: + call void @finch_panic_index(ptr @.str.2602, i64 1843, i64 %t10, i64 %t12) + unreachable +inrange4279: + %t14 = extractvalue { ptr, i64, i64 } %t11, 0 + %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i64 %t10 + %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i32 0, i32 1 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = call i64 @finch_map_find(ptr %t6, ptr %a18, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t20 = icmp slt i64 %t19, 0 + br i1 %t20, label %map.missing4280, label %map.found4281 +map.missing4280: + store { ptr, i64, i64 } zeroinitializer, ptr %a21 + store { ptr, i64, i64 } %t17, ptr %a22 + call void @finch_buf_str(ptr %a21, ptr %a22, i32 1) + call void @finch_map_missing(ptr @.str.2603, i64 1843, ptr %a21) + unreachable +map.found4281: + %t23 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 + %t24 = load ptr, ptr %t23 + %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t24, i64 %t19 + %t26 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t25, i32 0, i32 2 + %t27 = load %S.cimport.CStruct, ptr %t26 + store %S.cimport.CStruct %t27, ptr %a28 + call void @finch.copy.S_cimport_CStruct(ptr %a29, ptr %a28) + %t30 = load %S.cimport.CStruct, ptr %a29 + store %S.cimport.CStruct %t30, ptr %a31 + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic4285, label %ok4286 +panic4285: + call void @finch_panic(ptr @.str.2604, i64 1844, ptr @.str.2605) + unreachable +ok4286: + %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 16 + %t35 = load i64, ptr %a2 + %t36 = load { ptr, i64, i64 }, ptr %t34 + %t37 = extractvalue { ptr, i64, i64 } %t36, 1 + %t38 = icmp uge i64 %t35, %t37 + br i1 %t38, label %range4287, label %inrange4288 +range4287: + call void @finch_panic_index(ptr @.str.2606, i64 1844, i64 %t35, i64 %t37) + unreachable +inrange4288: + %t39 = extractvalue { ptr, i64, i64 } %t36, 0 + %t40 = getelementptr inbounds %S.gen.StructDef, ptr %t39, i64 %t35 + %t41 = getelementptr inbounds %S.gen.StructDef, ptr %t40, i32 0, i32 15 + store i64 1, ptr %t41 + store i64 0, ptr %a42 + store { ptr, i64, i64 } zeroinitializer, ptr %a43 + %t44 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 1 + store i64 0, ptr %a45 + br label %each.cond4289 +each.cond4289: + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = load i64, ptr %a45 + %t49 = icmp slt i64 %t48, %t47 + br i1 %t49, label %each.body4290, label %each.end4292 +each.body4290: + %t50 = load ptr, ptr %t44 + %t51 = getelementptr inbounds %S.cimport.CField, ptr %t50, i64 %t48 + %t52 = load %S.cimport.CField, ptr %t51 + store %S.cimport.CField %t52, ptr %a53 + %t54 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 5 + %t55 = load i1, ptr %t54 + br i1 %t55, label %then4293, label %endif4295 +then4293: + br label %each.step4291 +endif4295: + %t56 = load ptr, ptr %a1 + %t57 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 1 + %t58 = load %S.ast.Type, ptr %t57 + %t59 = call %S.ast.Type @finch.gen.resolve(ptr %t56, %S.ast.Type %t58, %S.ast.Node zeroinitializer) + store %S.ast.Type %t59, ptr %a60 + %t61 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.2607, i64 6, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br i1 %t66, label %then4296, label %endif4298 +then4296: + %t67 = load ptr, ptr %a1 + %t68 = load ptr, ptr %a1 + %t69 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 3 + %t70 = load { ptr, i64, i64 }, ptr %t69 + %t71 = getelementptr inbounds %S.ast.Type, ptr %a60, i32 0, i32 2 + %t72 = load { ptr, i64, i64 }, ptr %t71 + %t73 = call i64 @finch.gen.findStruct(ptr %t68, { ptr, i64, i64 } %t70, { ptr, i64, i64 } %t72) + call void @finch.gen.resolveStruct(ptr %t67, i64 %t73) + br label %endif4298 +endif4298: + %t74 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t75 = load i64, ptr %t74 + %t76 = load i64, ptr %a42 + %t77 = icmp sgt i64 %t75, %t76 + br i1 %t77, label %then4299, label %endif4301 +then4299: + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t79 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t80 = load i64, ptr %t79 + %t81 = load i64, ptr %a42 + %t82 = sub i64 %t80, %t81 + call void @finch_str_from_int(ptr %a83, i64 %t82) + %t84 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.2608, i64 1, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.2609, i64 6, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + %t95 = load i64, ptr %t78 + %t96 = add i64 %t95, 1 + call void @finch_arr_reserve(ptr %a43, i64 %t96, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t97 = load ptr, ptr %a43 + %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i64 %t95 + store { ptr, i64, i64 } %t94, ptr %t98 + store i64 %t96, ptr %t78 + br label %endif4301 +endif4301: + %t99 = load ptr, ptr %a1 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic4302, label %ok4303 +panic4302: + call void @finch_panic(ptr @.str.2610, i64 1858, ptr @.str.2611) + unreachable +ok4303: + %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 16 + %t102 = load i64, ptr %a2 + %t103 = load { ptr, i64, i64 }, ptr %t101 + %t104 = extractvalue { ptr, i64, i64 } %t103, 1 + %t105 = icmp uge i64 %t102, %t104 + br i1 %t105, label %range4304, label %inrange4305 +range4304: + call void @finch_panic_index(ptr @.str.2612, i64 1858, i64 %t102, i64 %t104) + unreachable +inrange4305: + %t106 = extractvalue { ptr, i64, i64 } %t103, 0 + %t107 = getelementptr inbounds %S.gen.StructDef, ptr %t106, i64 %t102 + %t108 = getelementptr inbounds %S.gen.StructDef, ptr %t107, i32 0, i32 11 + %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t108, i32 0, i32 1 + %t110 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 0 + %t111 = load { ptr, i64, i64 }, ptr %t110 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_copy(ptr %a113, ptr %a112) + %t114 = load { ptr, i64, i64 }, ptr %a113 + %t115 = load i64, ptr %t109 + %t116 = add i64 %t115, 1 + call void @finch_arr_reserve(ptr %t108, i64 %t116, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t117 = load ptr, ptr %t108 + %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t117, i64 %t115 + store { ptr, i64, i64 } %t114, ptr %t118 + store i64 %t116, ptr %t109 + %t119 = load ptr, ptr %a1 + %t120 = icmp eq ptr %t119, null + br i1 %t120, label %panic4306, label %ok4307 +panic4306: + call void @finch_panic(ptr @.str.2613, i64 1859, ptr @.str.2614) + unreachable +ok4307: + %t121 = getelementptr inbounds %S.gen.Gen, ptr %t119, i32 0, i32 16 + %t122 = load i64, ptr %a2 + %t123 = load { ptr, i64, i64 }, ptr %t121 + %t124 = extractvalue { ptr, i64, i64 } %t123, 1 + %t125 = icmp uge i64 %t122, %t124 + br i1 %t125, label %range4308, label %inrange4309 +range4308: + call void @finch_panic_index(ptr @.str.2615, i64 1859, i64 %t122, i64 %t124) + unreachable +inrange4309: + %t126 = extractvalue { ptr, i64, i64 } %t123, 0 + %t127 = getelementptr inbounds %S.gen.StructDef, ptr %t126, i64 %t122 + %t128 = getelementptr inbounds %S.gen.StructDef, ptr %t127, i32 0, i32 12 + %t129 = getelementptr inbounds { ptr, i64, i64 }, ptr %t128, i32 0, i32 1 + %t130 = load %S.ast.Type, ptr %a60 + store %S.ast.Type %t130, ptr %a131 + call void @finch.copy.S_ast_Type(ptr %a132, ptr %a131) + %t133 = load %S.ast.Type, ptr %a132 + %t134 = load i64, ptr %t129 + %t135 = add i64 %t134, 1 + call void @finch_arr_reserve(ptr %t128, i64 %t135, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t136 = load ptr, ptr %t128 + %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 %t134 + store %S.ast.Type %t133, ptr %t137 + store i64 %t135, ptr %t129 + %t138 = load ptr, ptr %a1 + %t139 = icmp eq ptr %t138, null + br i1 %t139, label %panic4310, label %ok4311 +panic4310: + call void @finch_panic(ptr @.str.2616, i64 1860, ptr @.str.2617) + unreachable +ok4311: + %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 + %t141 = load i64, ptr %a2 + %t142 = load { ptr, i64, i64 }, ptr %t140 + %t143 = extractvalue { ptr, i64, i64 } %t142, 1 + %t144 = icmp uge i64 %t141, %t143 + br i1 %t144, label %range4312, label %inrange4313 +range4312: + call void @finch_panic_index(ptr @.str.2618, i64 1860, i64 %t141, i64 %t143) + unreachable +inrange4313: + %t145 = extractvalue { ptr, i64, i64 } %t142, 0 + %t146 = getelementptr inbounds %S.gen.StructDef, ptr %t145, i64 %t141 + %t147 = getelementptr inbounds %S.gen.StructDef, ptr %t146, i32 0, i32 3 + %t148 = getelementptr inbounds { ptr, i64, i64 }, ptr %t147, i32 0, i32 1 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t150 = load i64, ptr %t149 + %t151 = load i64, ptr %t148 + %t152 = add i64 %t151, 1 + call void @finch_arr_reserve(ptr %t147, i64 %t152, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t153 = load ptr, ptr %t147 + %t154 = getelementptr inbounds i64, ptr %t153, i64 %t151 + store i64 %t150, ptr %t154 + store i64 %t152, ptr %t148 + %t155 = load ptr, ptr %a1 + %t156 = icmp eq ptr %t155, null + br i1 %t156, label %panic4314, label %ok4315 +panic4314: + call void @finch_panic(ptr @.str.2619, i64 1861, ptr @.str.2620) + unreachable +ok4315: + %t157 = getelementptr inbounds %S.gen.Gen, ptr %t155, i32 0, i32 16 + %t158 = load i64, ptr %a2 + %t159 = load { ptr, i64, i64 }, ptr %t157 + %t160 = extractvalue { ptr, i64, i64 } %t159, 1 + %t161 = icmp uge i64 %t158, %t160 + br i1 %t161, label %range4316, label %inrange4317 +range4316: + call void @finch_panic_index(ptr @.str.2621, i64 1861, i64 %t158, i64 %t160) + unreachable +inrange4317: + %t162 = extractvalue { ptr, i64, i64 } %t159, 0 + %t163 = getelementptr inbounds %S.gen.StructDef, ptr %t162, i64 %t158 + %t164 = getelementptr inbounds %S.gen.StructDef, ptr %t163, i32 0, i32 4 + %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %t164, i32 0, i32 1 + %t166 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t167 = load i64, ptr %t166 + %t168 = load i64, ptr %t165 + %t169 = add i64 %t168, 1 + call void @finch_arr_reserve(ptr %t164, i64 %t169, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t170 = load ptr, ptr %t164 + %t171 = getelementptr inbounds i64, ptr %t170, i64 %t168 + store i64 %t167, ptr %t171 + store i64 %t169, ptr %t165 + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t173 = load ptr, ptr %a1 + %t174 = load %S.ast.Type, ptr %a60 + %t175 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t174) + %t176 = load i64, ptr %t172 + %t177 = add i64 %t176, 1 + call void @finch_arr_reserve(ptr %a43, i64 %t177, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t178 = load ptr, ptr %a43 + %t179 = getelementptr inbounds { ptr, i64, i64 }, ptr %t178, i64 %t176 + store { ptr, i64, i64 } %t175, ptr %t179 + store i64 %t177, ptr %t172 + %t180 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 2 + %t181 = load i64, ptr %t180 + %t182 = getelementptr inbounds %S.cimport.CField, ptr %a53, i32 0, i32 3 + %t183 = load i64, ptr %t182 + %t184 = add i64 %t181, %t183 + store i64 %t184, ptr %a42 + call void @finch.drop.S_ast_Type(ptr %a60) + br label %each.step4291 +each.step4291: + %t185 = load i64, ptr %a45 + %t186 = add i64 %t185, 1 + store i64 %t186, ptr %a45 + br label %each.cond4289 +each.end4292: + %t187 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 + %t188 = load i64, ptr %t187 + %t189 = load i64, ptr %a42 + %t190 = icmp sgt i64 %t188, %t189 + br i1 %t190, label %then4318, label %endif4320 +then4318: + %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t192 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 + %t193 = load i64, ptr %t192 + %t194 = load i64, ptr %a42 + %t195 = sub i64 %t193, %t194 + call void @finch_str_from_int(ptr %a196, i64 %t195) + %t197 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.2622, i64 1, i64 0 }, ptr %a199 + store { ptr, i64, i64 } %t197, ptr %a200 + call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) + store { ptr, i64, i64 } %t197, ptr %a201 + call void @finch_str_drop(ptr %a201) + %t202 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t202, ptr %a204 + store { ptr, i64, i64 } { ptr @.str.2623, i64 6, i64 0 }, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + %t208 = load i64, ptr %t191 + %t209 = add i64 %t208, 1 + call void @finch_arr_reserve(ptr %a43, i64 %t209, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t210 = load ptr, ptr %a43 + %t211 = getelementptr inbounds { ptr, i64, i64 }, ptr %t210, i64 %t208 + store { ptr, i64, i64 } %t207, ptr %t211 + store i64 %t209, ptr %t191 + br label %endif4320 +endif4320: + %t212 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 + %t213 = load { ptr, i64, i64 }, ptr %t212 + %t214 = load ptr, ptr %a1 + %t215 = icmp eq ptr %t214, null + br i1 %t215, label %panic4321, label %ok4322 +panic4321: + call void @finch_panic(ptr @.str.2624, i64 1868, ptr @.str.2625) + unreachable +ok4322: + %t216 = getelementptr inbounds %S.gen.Gen, ptr %t214, i32 0, i32 16 + %t217 = load i64, ptr %a2 + %t218 = load { ptr, i64, i64 }, ptr %t216 + %t219 = extractvalue { ptr, i64, i64 } %t218, 1 + %t220 = icmp uge i64 %t217, %t219 + br i1 %t220, label %range4323, label %inrange4324 +range4323: + call void @finch_panic_index(ptr @.str.2626, i64 1868, i64 %t217, i64 %t219) + unreachable +inrange4324: + %t221 = extractvalue { ptr, i64, i64 } %t218, 0 + %t222 = getelementptr inbounds %S.gen.StructDef, ptr %t221, i64 %t217 + %t223 = getelementptr inbounds %S.gen.StructDef, ptr %t222, i32 0, i32 8 + store { ptr, i64, i64 } %t213, ptr %a224 + call void @finch_str_copy(ptr %a225, ptr %a224) + %t226 = load { ptr, i64, i64 }, ptr %a225 + %t227 = load { ptr, i64, i64 }, ptr %t223 + store { ptr, i64, i64 } %t226, ptr %t223 + store { ptr, i64, i64 } %t227, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 5 + %t230 = load i1, ptr %t229 + br label %logic.from4325 +logic.from4325: + br i1 %t230, label %logic.rhs4326, label %logic.end4327 +logic.rhs4326: + %t231 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 4 + %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i32 0, i32 1 + %t233 = load i64, ptr %t232 + %t234 = icmp eq i64 %t233, 0 + br label %logic.rend4328 +logic.rend4328: + br label %logic.end4327 +logic.end4327: + %t235 = phi i1 [ false, %logic.from4325 ], [ %t234, %logic.rend4328 ] + br i1 %t235, label %then4329, label %endif4331 +then4329: + %t236 = load ptr, ptr %a1 + %t237 = icmp eq ptr %t236, null + br i1 %t237, label %panic4332, label %ok4333 +panic4332: + call void @finch_panic(ptr @.str.2628, i64 1870, ptr @.str.2629) + unreachable +ok4333: + %t238 = getelementptr inbounds %S.gen.Gen, ptr %t236, i32 0, i32 16 + %t239 = load i64, ptr %a2 + %t240 = load { ptr, i64, i64 }, ptr %t238 + %t241 = extractvalue { ptr, i64, i64 } %t240, 1 + %t242 = icmp uge i64 %t239, %t241 + br i1 %t242, label %range4334, label %inrange4335 +range4334: + call void @finch_panic_index(ptr @.str.2630, i64 1870, i64 %t239, i64 %t241) + unreachable +inrange4335: + %t243 = extractvalue { ptr, i64, i64 } %t240, 0 + %t244 = getelementptr inbounds %S.gen.StructDef, ptr %t243, i64 %t239 + %t245 = getelementptr inbounds %S.gen.StructDef, ptr %t244, i32 0, i32 8 + %t246 = load { ptr, i64, i64 }, ptr %t245 + store { ptr, i64, i64 } { ptr @.str.2627, i64 49, i64 0 }, ptr %t245 + store { ptr, i64, i64 } %t246, ptr %a247 + call void @finch_str_drop(ptr %a247) + br label %endif4331 +endif4331: + %t248 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 2 + %t249 = load i64, ptr %t248 + %t250 = load ptr, ptr %a1 + %t251 = icmp eq ptr %t250, null + br i1 %t251, label %panic4336, label %ok4337 +panic4336: + call void @finch_panic(ptr @.str.2631, i64 1872, ptr @.str.2632) + unreachable +ok4337: + %t252 = getelementptr inbounds %S.gen.Gen, ptr %t250, i32 0, i32 16 + %t253 = load i64, ptr %a2 + %t254 = load { ptr, i64, i64 }, ptr %t252 + %t255 = extractvalue { ptr, i64, i64 } %t254, 1 + %t256 = icmp uge i64 %t253, %t255 + br i1 %t256, label %range4338, label %inrange4339 +range4338: + call void @finch_panic_index(ptr @.str.2633, i64 1872, i64 %t253, i64 %t255) + unreachable +inrange4339: + %t257 = extractvalue { ptr, i64, i64 } %t254, 0 + %t258 = getelementptr inbounds %S.gen.StructDef, ptr %t257, i64 %t253 + %t259 = getelementptr inbounds %S.gen.StructDef, ptr %t258, i32 0, i32 9 + store i64 %t249, ptr %t259 + %t260 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 3 + %t261 = load i64, ptr %t260 + %t262 = load ptr, ptr %a1 + %t263 = icmp eq ptr %t262, null + br i1 %t263, label %panic4340, label %ok4341 +panic4340: + call void @finch_panic(ptr @.str.2634, i64 1873, ptr @.str.2635) + unreachable +ok4341: + %t264 = getelementptr inbounds %S.gen.Gen, ptr %t262, i32 0, i32 16 + %t265 = load i64, ptr %a2 + %t266 = load { ptr, i64, i64 }, ptr %t264 + %t267 = extractvalue { ptr, i64, i64 } %t266, 1 + %t268 = icmp uge i64 %t265, %t267 + br i1 %t268, label %range4342, label %inrange4343 +range4342: + call void @finch_panic_index(ptr @.str.2636, i64 1873, i64 %t265, i64 %t267) + unreachable +inrange4343: + %t269 = extractvalue { ptr, i64, i64 } %t266, 0 + %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i64 %t265 + %t271 = getelementptr inbounds %S.gen.StructDef, ptr %t270, i32 0, i32 10 + store i64 %t261, ptr %t271 + %t272 = load ptr, ptr %a1 + %t273 = icmp eq ptr %t272, null + br i1 %t273, label %panic4344, label %ok4345 +panic4344: + call void @finch_panic(ptr @.str.2637, i64 1874, ptr @.str.2638) + unreachable +ok4345: + %t274 = getelementptr inbounds %S.gen.Gen, ptr %t272, i32 0, i32 16 + %t275 = load i64, ptr %a2 + %t276 = load { ptr, i64, i64 }, ptr %t274 + %t277 = extractvalue { ptr, i64, i64 } %t276, 1 + %t278 = icmp uge i64 %t275, %t277 + br i1 %t278, label %range4346, label %inrange4347 +range4346: + call void @finch_panic_index(ptr @.str.2639, i64 1874, i64 %t275, i64 %t277) + unreachable +inrange4347: + %t279 = extractvalue { ptr, i64, i64 } %t276, 0 + %t280 = getelementptr inbounds %S.gen.StructDef, ptr %t279, i64 %t275 + %t281 = getelementptr inbounds %S.gen.StructDef, ptr %t280, i32 0, i32 15 + store i64 2, ptr %t281 + %t282 = load ptr, ptr %a1 + %t283 = icmp eq ptr %t282, null + br i1 %t283, label %panic4348, label %ok4349 +panic4348: + call void @finch_panic(ptr @.str.2640, i64 1875, ptr @.str.2641) + unreachable +ok4349: + %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 2 + %t285 = getelementptr inbounds { ptr, i64, i64 }, ptr %t284, i32 0, i32 1 + %t286 = getelementptr inbounds %S.cimport.CStruct, ptr %a31, i32 0, i32 0 + %t287 = load { ptr, i64, i64 }, ptr %t286 + store { ptr, i64, i64 } { ptr @.str.2642, i64 5, i64 0 }, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a288 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.2643, i64 10, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2644, i64 2, i64 0 }, ptr %a298 + call void @finch_str_join(ptr %a299, ptr %a43, ptr %a298) + %t300 = load { ptr, i64, i64 }, ptr %a299 + store { ptr, i64, i64 } %t296, ptr %a302 + store { ptr, i64, i64 } %t300, ptr %a303 + call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) + store { ptr, i64, i64 } %t296, ptr %a304 + call void @finch_str_drop(ptr %a304) + store { ptr, i64, i64 } %t300, ptr %a305 + call void @finch_str_drop(ptr %a305) + %t306 = load { ptr, i64, i64 }, ptr %a301 + store { ptr, i64, i64 } %t306, ptr %a308 + store { ptr, i64, i64 } { ptr @.str.2645, i64 2, i64 0 }, ptr %a309 + call void @finch_str_concat(ptr %a307, ptr %a308, ptr %a309) + store { ptr, i64, i64 } %t306, ptr %a310 + call void @finch_str_drop(ptr %a310) + %t311 = load { ptr, i64, i64 }, ptr %a307 + %t312 = load i64, ptr %t285 + %t313 = add i64 %t312, 1 + call void @finch_arr_reserve(ptr %t284, i64 %t313, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t314 = load ptr, ptr %t284 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i64 %t312 + store { ptr, i64, i64 } %t311, ptr %t315 + store i64 %t313, ptr %t285 + call void @finch.drop.arr_str(ptr %a43) + call void @finch.drop.S_cimport_CStruct(ptr %a31) + ret void +} + +define internal void @finch.gen.resolveStruct(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4350, label %ok4351 +panic4350: + call void @finch_panic(ptr @.str.2646, i64 1879, ptr @.str.2647) + unreachable +ok4351: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 + %t6 = load i64, ptr %a2 + %t7 = load { ptr, i64, i64 }, ptr %t5 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 %t6, %t8 + br i1 %t9, label %range4352, label %inrange4353 +range4352: + call void @finch_panic_index(ptr @.str.2648, i64 1879, i64 %t6, i64 %t8) + unreachable +inrange4353: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.gen.StructDef, ptr %t10, i64 %t6 + %t12 = getelementptr inbounds %S.gen.StructDef, ptr %t11, i32 0, i32 15 + %t13 = load i64, ptr %t12 + %t14 = icmp eq i64 %t13, 2 + br i1 %t14, label %then4354, label %endif4356 +then4354: + ret void +endif4356: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic4357, label %ok4358 +panic4357: + call void @finch_panic(ptr @.str.2649, i64 1882, ptr @.str.2650) + unreachable +ok4358: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 16 + %t18 = load i64, ptr %a2 + %t19 = load { ptr, i64, i64 }, ptr %t17 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range4359, label %inrange4360 +range4359: + call void @finch_panic_index(ptr @.str.2651, i64 1882, i64 %t18, i64 %t20) + unreachable +inrange4360: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i64 %t18 + %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i32 0, i32 2 + %t25 = load i1, ptr %t24 + br i1 %t25, label %then4361, label %endif4363 +then4361: + %t26 = load ptr, ptr %a1 + %t27 = load i64, ptr %a2 + call void @finch.gen.resolveCStruct(ptr %t26, i64 %t27) + ret void +endif4363: + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic4364, label %ok4365 +panic4364: + call void @finch_panic(ptr @.str.2652, i64 1886, ptr @.str.2653) + unreachable +ok4365: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 16 + %t31 = load i64, ptr %a2 + %t32 = load { ptr, i64, i64 }, ptr %t30 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range4366, label %inrange4367 +range4366: + call void @finch_panic_index(ptr @.str.2654, i64 1886, i64 %t31, i64 %t33) + unreachable +inrange4367: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.StructDef, ptr %t35, i64 %t31 + %t37 = getelementptr inbounds %S.gen.StructDef, ptr %t36, i32 0, i32 5 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 + %t39 = load i64, ptr %t38 + %t40 = icmp eq i64 %t39, 0 + br i1 %t40, label %then4368, label %endif4370 +then4368: + %t41 = load ptr, ptr %a1 + %t42 = load i64, ptr %a2 + call void @finch.gen.resolveStructBody(ptr %t41, i64 %t42) + ret void +endif4370: + %t43 = load ptr, ptr %a1 + %t44 = icmp eq ptr %t43, null + br i1 %t44, label %panic4371, label %ok4372 +panic4371: + call void @finch_panic(ptr @.str.2655, i64 1891, ptr @.str.2656) + unreachable +ok4372: + %t45 = getelementptr inbounds %S.gen.Gen, ptr %t43, i32 0, i32 18 + %t46 = load { ptr, i64, i64 }, ptr %t45 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch.copy.arr_str(ptr %a48, ptr %a47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t49, ptr %a50 + %t51 = load ptr, ptr %a1 + %t52 = icmp eq ptr %t51, null + br i1 %t52, label %panic4373, label %ok4374 +panic4373: + call void @finch_panic(ptr @.str.2657, i64 1892, ptr @.str.2658) + unreachable +ok4374: + %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 19 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t57, ptr %a58 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic4375, label %ok4376 +panic4375: + call void @finch_panic(ptr @.str.2659, i64 1893, ptr @.str.2660) + unreachable +ok4376: + %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 20 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t65, ptr %a66 + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic4377, label %ok4378 +panic4377: + call void @finch_panic(ptr @.str.2661, i64 1894, ptr @.str.2662) + unreachable +ok4378: + %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 16 + %t70 = load i64, ptr %a2 + %t71 = load { ptr, i64, i64 }, ptr %t69 + %t72 = extractvalue { ptr, i64, i64 } %t71, 1 + %t73 = icmp uge i64 %t70, %t72 + br i1 %t73, label %range4379, label %inrange4380 +range4379: + call void @finch_panic_index(ptr @.str.2663, i64 1894, i64 %t70, i64 %t72) + unreachable +inrange4380: + %t74 = extractvalue { ptr, i64, i64 } %t71, 0 + %t75 = getelementptr inbounds %S.gen.StructDef, ptr %t74, i64 %t70 + %t76 = getelementptr inbounds %S.gen.StructDef, ptr %t75, i32 0, i32 6 + %t77 = load { ptr, i64, i64 }, ptr %t76 + %t78 = load ptr, ptr %a1 + %t79 = icmp eq ptr %t78, null + br i1 %t79, label %panic4381, label %ok4382 +panic4381: + call void @finch_panic(ptr @.str.2664, i64 1894, ptr @.str.2665) + unreachable +ok4382: + %t80 = getelementptr inbounds %S.gen.Gen, ptr %t78, i32 0, i32 18 + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch.copy.arr_str(ptr %a82, ptr %a81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } %t83, ptr %t80 + store { ptr, i64, i64 } %t84, ptr %a85 + call void @finch.drop.arr_str(ptr %a85) + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic4383, label %ok4384 +panic4383: + call void @finch_panic(ptr @.str.2666, i64 1895, ptr @.str.2667) + unreachable +ok4384: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 16 + %t89 = load i64, ptr %a2 + %t90 = load { ptr, i64, i64 }, ptr %t88 + %t91 = extractvalue { ptr, i64, i64 } %t90, 1 + %t92 = icmp uge i64 %t89, %t91 + br i1 %t92, label %range4385, label %inrange4386 +range4385: + call void @finch_panic_index(ptr @.str.2668, i64 1895, i64 %t89, i64 %t91) + unreachable +inrange4386: + %t93 = extractvalue { ptr, i64, i64 } %t90, 0 + %t94 = getelementptr inbounds %S.gen.StructDef, ptr %t93, i64 %t89 + %t95 = getelementptr inbounds %S.gen.StructDef, ptr %t94, i32 0, i32 7 + %t96 = load { ptr, i64, i64 }, ptr %t95 + %t97 = load ptr, ptr %a1 + %t98 = icmp eq ptr %t97, null + br i1 %t98, label %panic4387, label %ok4388 +panic4387: + call void @finch_panic(ptr @.str.2669, i64 1895, ptr @.str.2670) + unreachable +ok4388: + %t99 = getelementptr inbounds %S.gen.Gen, ptr %t97, i32 0, i32 19 + store { ptr, i64, i64 } %t96, ptr %a100 + call void @finch.copy.arr_S_ast_Type(ptr %a101, ptr %a100) + %t102 = load { ptr, i64, i64 }, ptr %a101 + %t103 = load { ptr, i64, i64 }, ptr %t99 + store { ptr, i64, i64 } %t102, ptr %t99 + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch.drop.arr_S_ast_Type(ptr %a104) + %t105 = load ptr, ptr %a1 + %t106 = icmp eq ptr %t105, null + br i1 %t106, label %panic4389, label %ok4390 +panic4389: + call void @finch_panic(ptr @.str.2672, i64 1896, ptr @.str.2673) + unreachable +ok4390: + %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 16 + %t108 = load i64, ptr %a2 + %t109 = load { ptr, i64, i64 }, ptr %t107 + %t110 = extractvalue { ptr, i64, i64 } %t109, 1 + %t111 = icmp uge i64 %t108, %t110 + br i1 %t111, label %range4391, label %inrange4392 +range4391: + call void @finch_panic_index(ptr @.str.2674, i64 1896, i64 %t108, i64 %t110) + unreachable +inrange4392: + %t112 = extractvalue { ptr, i64, i64 } %t109, 0 + %t113 = getelementptr inbounds %S.gen.StructDef, ptr %t112, i64 %t108 + %t114 = getelementptr inbounds %S.gen.StructDef, ptr %t113, i32 0, i32 1 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } { ptr @.str.2671, i64 17, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.2675, i64 1, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = load ptr, ptr %a1 + %t126 = icmp eq ptr %t125, null + br i1 %t126, label %panic4393, label %ok4394 +panic4393: + call void @finch_panic(ptr @.str.2676, i64 1896, ptr @.str.2677) + unreachable +ok4394: + %t127 = getelementptr inbounds %S.gen.Gen, ptr %t125, i32 0, i32 20 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t124, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load ptr, ptr %a1 + %t131 = load i64, ptr %a2 + call void @finch.gen.resolveStructBody(ptr %t130, i64 %t131) + %t132 = load { ptr, i64, i64 }, ptr %a50 + %t133 = load ptr, ptr %a1 + %t134 = icmp eq ptr %t133, null + br i1 %t134, label %panic4395, label %ok4396 +panic4395: + call void @finch_panic(ptr @.str.2678, i64 1898, ptr @.str.2679) + unreachable +ok4396: + %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 18 + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch.copy.arr_str(ptr %a137, ptr %a136) + %t138 = load { ptr, i64, i64 }, ptr %a137 + %t139 = load { ptr, i64, i64 }, ptr %t135 + store { ptr, i64, i64 } %t138, ptr %t135 + store { ptr, i64, i64 } %t139, ptr %a140 + call void @finch.drop.arr_str(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a58 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic4397, label %ok4398 +panic4397: + call void @finch_panic(ptr @.str.2680, i64 1899, ptr @.str.2681) + unreachable +ok4398: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 19 + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch.copy.arr_S_ast_Type(ptr %a146, ptr %a145) + %t147 = load { ptr, i64, i64 }, ptr %a146 + %t148 = load { ptr, i64, i64 }, ptr %t144 + store { ptr, i64, i64 } %t147, ptr %t144 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch.drop.arr_S_ast_Type(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a66 + %t151 = load ptr, ptr %a1 + %t152 = icmp eq ptr %t151, null + br i1 %t152, label %panic4399, label %ok4400 +panic4399: + call void @finch_panic(ptr @.str.2682, i64 1900, ptr @.str.2683) + unreachable +ok4400: + %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 20 + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_copy(ptr %a155, ptr %a154) + %t156 = load { ptr, i64, i64 }, ptr %a155 + %t157 = load { ptr, i64, i64 }, ptr %t153 + store { ptr, i64, i64 } %t156, ptr %t153 + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_drop(ptr %a158) + call void @finch_str_drop(ptr %a66) + call void @finch.drop.arr_S_ast_Type(ptr %a58) + call void @finch.drop.arr_str(ptr %a50) + ret void +} + +define internal void @finch.gen.resolveStructBody(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a40 = alloca %S.ast.Node, align 16 + %a41 = alloca %S.ast.Node, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca i1, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca i64, align 16 + %a142 = alloca %S.ast.Node, align 16 + %a148 = alloca %S.ast.Type, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca %S.ast.Type, align 16 + %a222 = alloca %S.ast.Type, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4401, label %ok4402 +panic4401: + call void @finch_panic(ptr @.str.2684, i64 1904, ptr @.str.2685) + unreachable +ok4402: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 0 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4403, label %ok4404 +panic4403: + call void @finch_panic(ptr @.str.2686, i64 1904, ptr @.str.2687) + unreachable +ok4404: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range4405, label %inrange4406 +range4405: + call void @finch_panic_index(ptr @.str.2688, i64 1904, i64 %t9, i64 %t11) + unreachable +inrange4406: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 + %t15 = getelementptr inbounds %S.gen.StructDef, ptr %t14, i32 0, i32 13 + %t16 = load i64, ptr %t15 + %t17 = load { ptr, i64, i64 }, ptr %t5 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range4407, label %inrange4408 +range4407: + call void @finch_panic_index(ptr @.str.2689, i64 1904, i64 %t16, i64 %t18) + unreachable +inrange4408: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.ast.Program, ptr %t20, i64 %t16 + %t22 = getelementptr inbounds %S.ast.Program, ptr %t21, i32 0, i32 6 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic4409, label %ok4410 +panic4409: + call void @finch_panic(ptr @.str.2690, i64 1904, ptr @.str.2691) + unreachable +ok4410: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 16 + %t26 = load i64, ptr %a2 + %t27 = load { ptr, i64, i64 }, ptr %t25 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 %t26, %t28 + br i1 %t29, label %range4411, label %inrange4412 +range4411: + call void @finch_panic_index(ptr @.str.2692, i64 1904, i64 %t26, i64 %t28) + unreachable +inrange4412: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds %S.gen.StructDef, ptr %t30, i64 %t26 + %t32 = getelementptr inbounds %S.gen.StructDef, ptr %t31, i32 0, i32 14 + %t33 = load i64, ptr %t32 + %t34 = load { ptr, i64, i64 }, ptr %t22 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 %t33, %t35 + br i1 %t36, label %range4413, label %inrange4414 +range4413: + call void @finch_panic_index(ptr @.str.2693, i64 1904, i64 %t33, i64 %t35) + unreachable +inrange4414: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds %S.ast.Node, ptr %t37, i64 %t33 + %t39 = load %S.ast.Node, ptr %t38 + store %S.ast.Node %t39, ptr %a40 + call void @finch.copy.S_ast_Node(ptr %a41, ptr %a40) + %t42 = load %S.ast.Node, ptr %a41 + store %S.ast.Node %t42, ptr %a43 + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic4415, label %ok4416 +panic4415: + call void @finch_panic(ptr @.str.2694, i64 1905, ptr @.str.2695) + unreachable +ok4416: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 16 + %t47 = load i64, ptr %a2 + %t48 = load { ptr, i64, i64 }, ptr %t46 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range4417, label %inrange4418 +range4417: + call void @finch_panic_index(ptr @.str.2696, i64 1905, i64 %t47, i64 %t49) + unreachable +inrange4418: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds %S.gen.StructDef, ptr %t51, i64 %t47 + %t53 = getelementptr inbounds %S.gen.StructDef, ptr %t52, i32 0, i32 15 + %t54 = load i64, ptr %t53 + %t55 = icmp eq i64 %t54, 1 + br i1 %t55, label %then4419, label %endif4421 +then4419: + %t56 = load ptr, ptr %a1 + %t57 = load %S.ast.Node, ptr %a43 + %t58 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } { ptr @.str.2697, i64 11, i64 0 }, ptr %a61 + store { ptr, i64, i64 } %t59, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t63, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.2698, i64 26, i64 0 }, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t63, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a64 + %t69 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t70 = load { ptr, i64, i64 }, ptr %t69 + store { ptr, i64, i64 } %t68, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t68, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t75, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.2699, i64 7, i64 0 }, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 1 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t80, ptr %a84 + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t80, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t87, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.2700, i64 15, i64 0 }, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t87, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + call void @finch.gen.fail(ptr %t56, %S.ast.Node %t57, { ptr, i64, i64 } %t92) + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + br label %endif4421 +endif4421: + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic4422, label %ok4423 +panic4422: + call void @finch_panic(ptr @.str.2701, i64 1908, ptr @.str.2702) + unreachable +ok4423: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 16 + %t97 = load i64, ptr %a2 + %t98 = load { ptr, i64, i64 }, ptr %t96 + %t99 = extractvalue { ptr, i64, i64 } %t98, 1 + %t100 = icmp uge i64 %t97, %t99 + br i1 %t100, label %range4424, label %inrange4425 +range4424: + call void @finch_panic_index(ptr @.str.2703, i64 1908, i64 %t97, i64 %t99) + unreachable +inrange4425: + %t101 = extractvalue { ptr, i64, i64 } %t98, 0 + %t102 = getelementptr inbounds %S.gen.StructDef, ptr %t101, i64 %t97 + %t103 = getelementptr inbounds %S.gen.StructDef, ptr %t102, i32 0, i32 15 + store i64 1, ptr %t103 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic4426, label %ok4427 +panic4426: + call void @finch_panic(ptr @.str.2704, i64 1909, ptr @.str.2705) + unreachable +ok4427: + %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 14 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_copy(ptr %a109, ptr %a108) + %t110 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t110, ptr %a111 + %t112 = load ptr, ptr %a1 + %t113 = icmp eq ptr %t112, null + br i1 %t113, label %panic4428, label %ok4429 +panic4428: + call void @finch_panic(ptr @.str.2706, i64 1910, ptr @.str.2707) + unreachable +ok4429: + %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 16 + %t115 = load i64, ptr %a2 + %t116 = load { ptr, i64, i64 }, ptr %t114 + %t117 = extractvalue { ptr, i64, i64 } %t116, 1 + %t118 = icmp uge i64 %t115, %t117 + br i1 %t118, label %range4430, label %inrange4431 +range4430: + call void @finch_panic_index(ptr @.str.2708, i64 1910, i64 %t115, i64 %t117) + unreachable +inrange4431: + %t119 = extractvalue { ptr, i64, i64 } %t116, 0 + %t120 = getelementptr inbounds %S.gen.StructDef, ptr %t119, i64 %t115 + %t121 = getelementptr inbounds %S.gen.StructDef, ptr %t120, i32 0, i32 0 + %t122 = load { ptr, i64, i64 }, ptr %t121 + %t123 = load ptr, ptr %a1 + %t124 = icmp eq ptr %t123, null + br i1 %t124, label %panic4432, label %ok4433 +panic4432: + call void @finch_panic(ptr @.str.2709, i64 1910, ptr @.str.2710) + unreachable +ok4433: + %t125 = getelementptr inbounds %S.gen.Gen, ptr %t123, i32 0, i32 14 + store { ptr, i64, i64 } %t122, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + %t129 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t128, ptr %t125 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + store i1 false, ptr %a131 + store { ptr, i64, i64 } zeroinitializer, ptr %a132 + %t133 = getelementptr inbounds %S.ast.Node, ptr %a43, i32 0, i32 9 + store i64 0, ptr %a134 + br label %each.cond4434 +each.cond4434: + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = load i64, ptr %a134 + %t138 = icmp slt i64 %t137, %t136 + br i1 %t138, label %each.body4435, label %each.end4437 +each.body4435: + %t139 = load ptr, ptr %t133 + %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 %t137 + %t141 = load %S.ast.Node, ptr %t140 + store %S.ast.Node %t141, ptr %a142 + %t143 = load ptr, ptr %a1 + %t144 = getelementptr inbounds %S.ast.Node, ptr %a142, i32 0, i32 5 + %t145 = load %S.ast.Type, ptr %t144 + %t146 = load %S.ast.Node, ptr %a142 + %t147 = call %S.ast.Type @finch.gen.resolve(ptr %t143, %S.ast.Type %t145, %S.ast.Node %t146) + store %S.ast.Type %t147, ptr %a148 + %t149 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 0 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.2711, i64 6, i64 0 }, ptr %a152 + %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) + %t154 = icmp ne i32 %t153, 0 + br i1 %t154, label %then4438, label %endif4440 +then4438: + %t155 = load ptr, ptr %a1 + %t156 = load ptr, ptr %a1 + %t157 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 3 + %t158 = load { ptr, i64, i64 }, ptr %t157 + %t159 = getelementptr inbounds %S.ast.Type, ptr %a148, i32 0, i32 2 + %t160 = load { ptr, i64, i64 }, ptr %t159 + %t161 = call i64 @finch.gen.findStruct(ptr %t156, { ptr, i64, i64 } %t158, { ptr, i64, i64 } %t160) + call void @finch.gen.resolveStruct(ptr %t155, i64 %t161) + br label %endif4440 +endif4440: + %t162 = load ptr, ptr %a1 + %t163 = icmp eq ptr %t162, null + br i1 %t163, label %panic4441, label %ok4442 +panic4441: + call void @finch_panic(ptr @.str.2712, i64 1918, ptr @.str.2713) + unreachable +ok4442: + %t164 = getelementptr inbounds %S.gen.Gen, ptr %t162, i32 0, i32 16 + %t165 = load i64, ptr %a2 + %t166 = load { ptr, i64, i64 }, ptr %t164 + %t167 = extractvalue { ptr, i64, i64 } %t166, 1 + %t168 = icmp uge i64 %t165, %t167 + br i1 %t168, label %range4443, label %inrange4444 +range4443: + call void @finch_panic_index(ptr @.str.2714, i64 1918, i64 %t165, i64 %t167) + unreachable +inrange4444: + %t169 = extractvalue { ptr, i64, i64 } %t166, 0 + %t170 = getelementptr inbounds %S.gen.StructDef, ptr %t169, i64 %t165 + %t171 = getelementptr inbounds %S.gen.StructDef, ptr %t170, i32 0, i32 3 + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 + %t173 = load ptr, ptr %a1 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic4445, label %ok4446 +panic4445: + call void @finch_panic(ptr @.str.2715, i64 1918, ptr @.str.2716) + unreachable +ok4446: + %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 16 + %t176 = load i64, ptr %a2 + %t177 = load { ptr, i64, i64 }, ptr %t175 + %t178 = extractvalue { ptr, i64, i64 } %t177, 1 + %t179 = icmp uge i64 %t176, %t178 + br i1 %t179, label %range4447, label %inrange4448 +range4447: + call void @finch_panic_index(ptr @.str.2717, i64 1918, i64 %t176, i64 %t178) + unreachable +inrange4448: + %t180 = extractvalue { ptr, i64, i64 } %t177, 0 + %t181 = getelementptr inbounds %S.gen.StructDef, ptr %t180, i64 %t176 + %t182 = getelementptr inbounds %S.gen.StructDef, ptr %t181, i32 0, i32 11 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i32 0, i32 1 + %t184 = load i64, ptr %t183 + %t185 = load i64, ptr %t172 + %t186 = add i64 %t185, 1 + call void @finch_arr_reserve(ptr %t171, i64 %t186, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t187 = load ptr, ptr %t171 + %t188 = getelementptr inbounds i64, ptr %t187, i64 %t185 + store i64 %t184, ptr %t188 + store i64 %t186, ptr %t172 + %t189 = load ptr, ptr %a1 + %t190 = icmp eq ptr %t189, null + br i1 %t190, label %panic4449, label %ok4450 +panic4449: + call void @finch_panic(ptr @.str.2718, i64 1919, ptr @.str.2719) + unreachable +ok4450: + %t191 = getelementptr inbounds %S.gen.Gen, ptr %t189, i32 0, i32 16 + %t192 = load i64, ptr %a2 + %t193 = load { ptr, i64, i64 }, ptr %t191 + %t194 = extractvalue { ptr, i64, i64 } %t193, 1 + %t195 = icmp uge i64 %t192, %t194 + br i1 %t195, label %range4451, label %inrange4452 +range4451: + call void @finch_panic_index(ptr @.str.2720, i64 1919, i64 %t192, i64 %t194) + unreachable +inrange4452: + %t196 = extractvalue { ptr, i64, i64 } %t193, 0 + %t197 = getelementptr inbounds %S.gen.StructDef, ptr %t196, i64 %t192 + %t198 = getelementptr inbounds %S.gen.StructDef, ptr %t197, i32 0, i32 11 + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t198, i32 0, i32 1 + %t200 = getelementptr inbounds %S.ast.Node, ptr %a142, i32 0, i32 1 + %t201 = load { ptr, i64, i64 }, ptr %t200 + store { ptr, i64, i64 } %t201, ptr %a202 + call void @finch_str_copy(ptr %a203, ptr %a202) + %t204 = load { ptr, i64, i64 }, ptr %a203 + %t205 = load i64, ptr %t199 + %t206 = add i64 %t205, 1 + call void @finch_arr_reserve(ptr %t198, i64 %t206, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t207 = load ptr, ptr %t198 + %t208 = getelementptr inbounds { ptr, i64, i64 }, ptr %t207, i64 %t205 + store { ptr, i64, i64 } %t204, ptr %t208 + store i64 %t206, ptr %t199 + %t209 = load ptr, ptr %a1 + %t210 = icmp eq ptr %t209, null + br i1 %t210, label %panic4453, label %ok4454 +panic4453: + call void @finch_panic(ptr @.str.2721, i64 1920, ptr @.str.2722) + unreachable +ok4454: + %t211 = getelementptr inbounds %S.gen.Gen, ptr %t209, i32 0, i32 16 + %t212 = load i64, ptr %a2 + %t213 = load { ptr, i64, i64 }, ptr %t211 + %t214 = extractvalue { ptr, i64, i64 } %t213, 1 + %t215 = icmp uge i64 %t212, %t214 + br i1 %t215, label %range4455, label %inrange4456 +range4455: + call void @finch_panic_index(ptr @.str.2723, i64 1920, i64 %t212, i64 %t214) + unreachable +inrange4456: + %t216 = extractvalue { ptr, i64, i64 } %t213, 0 + %t217 = getelementptr inbounds %S.gen.StructDef, ptr %t216, i64 %t212 + %t218 = getelementptr inbounds %S.gen.StructDef, ptr %t217, i32 0, i32 12 + %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i32 0, i32 1 + %t220 = load %S.ast.Type, ptr %a148 + store %S.ast.Type %t220, ptr %a221 + call void @finch.copy.S_ast_Type(ptr %a222, ptr %a221) + %t223 = load %S.ast.Type, ptr %a222 + %t224 = load i64, ptr %t219 + %t225 = add i64 %t224, 1 + call void @finch_arr_reserve(ptr %t218, i64 %t225, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t226 = load ptr, ptr %t218 + %t227 = getelementptr inbounds %S.ast.Type, ptr %t226, i64 %t224 + store %S.ast.Type %t223, ptr %t227 + store i64 %t225, ptr %t219 + %t228 = load ptr, ptr %a1 + %t229 = load %S.ast.Type, ptr %a148 + %t230 = call i1 @finch.gen.owning(ptr %t228, %S.ast.Type %t229) + br i1 %t230, label %then4457, label %endif4459 +then4457: + store i1 true, ptr %a131 + br label %endif4459 +endif4459: + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + %t232 = load ptr, ptr %a1 + %t233 = load %S.ast.Type, ptr %a148 + %t234 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t232, %S.ast.Type %t233) + %t235 = load i64, ptr %t231 + %t236 = add i64 %t235, 1 + call void @finch_arr_reserve(ptr %a132, i64 %t236, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t237 = load ptr, ptr %a132 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t235 + store { ptr, i64, i64 } %t234, ptr %t238 + store i64 %t236, ptr %t231 + call void @finch.drop.S_ast_Type(ptr %a148) + br label %each.step4436 +each.step4436: + %t239 = load i64, ptr %a134 + %t240 = add i64 %t239, 1 + store i64 %t240, ptr %a134 + br label %each.cond4434 +each.end4437: + %t241 = load i1, ptr %a131 + %t242 = load ptr, ptr %a1 + %t243 = icmp eq ptr %t242, null + br i1 %t243, label %panic4460, label %ok4461 +panic4460: + call void @finch_panic(ptr @.str.2724, i64 1926, ptr @.str.2725) + unreachable +ok4461: + %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 16 + %t245 = load i64, ptr %a2 + %t246 = load { ptr, i64, i64 }, ptr %t244 + %t247 = extractvalue { ptr, i64, i64 } %t246, 1 + %t248 = icmp uge i64 %t245, %t247 + br i1 %t248, label %range4462, label %inrange4463 +range4462: + call void @finch_panic_index(ptr @.str.2726, i64 1926, i64 %t245, i64 %t247) + unreachable +inrange4463: + %t249 = extractvalue { ptr, i64, i64 } %t246, 0 + %t250 = getelementptr inbounds %S.gen.StructDef, ptr %t249, i64 %t245 + %t251 = getelementptr inbounds %S.gen.StructDef, ptr %t250, i32 0, i32 16 + store i1 %t241, ptr %t251 + %t252 = load { ptr, i64, i64 }, ptr %a111 + %t253 = load ptr, ptr %a1 + %t254 = icmp eq ptr %t253, null + br i1 %t254, label %panic4464, label %ok4465 +panic4464: + call void @finch_panic(ptr @.str.2727, i64 1927, ptr @.str.2728) + unreachable +ok4465: + %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 14 + store { ptr, i64, i64 } %t252, ptr %a256 + call void @finch_str_copy(ptr %a257, ptr %a256) + %t258 = load { ptr, i64, i64 }, ptr %a257 + %t259 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t258, ptr %t255 + store { ptr, i64, i64 } %t259, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load ptr, ptr %a1 + %t262 = icmp eq ptr %t261, null + br i1 %t262, label %panic4466, label %ok4467 +panic4466: + call void @finch_panic(ptr @.str.2729, i64 1928, ptr @.str.2730) + unreachable +ok4467: + %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 16 + %t264 = load i64, ptr %a2 + %t265 = load { ptr, i64, i64 }, ptr %t263 + %t266 = extractvalue { ptr, i64, i64 } %t265, 1 + %t267 = icmp uge i64 %t264, %t266 + br i1 %t267, label %range4468, label %inrange4469 +range4468: + call void @finch_panic_index(ptr @.str.2731, i64 1928, i64 %t264, i64 %t266) + unreachable +inrange4469: + %t268 = extractvalue { ptr, i64, i64 } %t265, 0 + %t269 = getelementptr inbounds %S.gen.StructDef, ptr %t268, i64 %t264 + %t270 = getelementptr inbounds %S.gen.StructDef, ptr %t269, i32 0, i32 15 + store i64 2, ptr %t270 + %t271 = load ptr, ptr %a1 + %t272 = icmp eq ptr %t271, null + br i1 %t272, label %panic4470, label %ok4471 +panic4470: + call void @finch_panic(ptr @.str.2732, i64 1929, ptr @.str.2733) + unreachable +ok4471: + %t273 = getelementptr inbounds %S.gen.Gen, ptr %t271, i32 0, i32 2 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i32 0, i32 1 + %t275 = load ptr, ptr %a1 + %t276 = icmp eq ptr %t275, null + br i1 %t276, label %panic4472, label %ok4473 +panic4472: + call void @finch_panic(ptr @.str.2735, i64 1929, ptr @.str.2736) + unreachable +ok4473: + %t277 = getelementptr inbounds %S.gen.Gen, ptr %t275, i32 0, i32 16 + %t278 = load i64, ptr %a2 + %t279 = load { ptr, i64, i64 }, ptr %t277 + %t280 = extractvalue { ptr, i64, i64 } %t279, 1 + %t281 = icmp uge i64 %t278, %t280 + br i1 %t281, label %range4474, label %inrange4475 +range4474: + call void @finch_panic_index(ptr @.str.2737, i64 1929, i64 %t278, i64 %t280) + unreachable +inrange4475: + %t282 = extractvalue { ptr, i64, i64 } %t279, 0 + %t283 = getelementptr inbounds %S.gen.StructDef, ptr %t282, i64 %t278 + %t284 = getelementptr inbounds %S.gen.StructDef, ptr %t283, i32 0, i32 0 + %t285 = load { ptr, i64, i64 }, ptr %t284 + %t286 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t285) + store { ptr, i64, i64 } { ptr @.str.2734, i64 3, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t286, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.2738, i64 1, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load ptr, ptr %a1 + %t298 = icmp eq ptr %t297, null + br i1 %t298, label %panic4476, label %ok4477 +panic4476: + call void @finch_panic(ptr @.str.2739, i64 1929, ptr @.str.2740) + unreachable +ok4477: + %t299 = getelementptr inbounds %S.gen.Gen, ptr %t297, i32 0, i32 16 + %t300 = load i64, ptr %a2 + %t301 = load { ptr, i64, i64 }, ptr %t299 + %t302 = extractvalue { ptr, i64, i64 } %t301, 1 + %t303 = icmp uge i64 %t300, %t302 + br i1 %t303, label %range4478, label %inrange4479 +range4478: + call void @finch_panic_index(ptr @.str.2741, i64 1929, i64 %t300, i64 %t302) + unreachable +inrange4479: + %t304 = extractvalue { ptr, i64, i64 } %t301, 0 + %t305 = getelementptr inbounds %S.gen.StructDef, ptr %t304, i64 %t300 + %t306 = getelementptr inbounds %S.gen.StructDef, ptr %t305, i32 0, i32 1 + %t307 = load { ptr, i64, i64 }, ptr %t306 + %t308 = call { ptr, i64, i64 } @finch.gen.mangle({ ptr, i64, i64 } %t307) + store { ptr, i64, i64 } %t296, ptr %a310 + store { ptr, i64, i64 } %t308, ptr %a311 + call void @finch_str_concat(ptr %a309, ptr %a310, ptr %a311) + store { ptr, i64, i64 } %t296, ptr %a312 + call void @finch_str_drop(ptr %a312) + store { ptr, i64, i64 } %t308, ptr %a313 + call void @finch_str_drop(ptr %a313) + %t314 = load { ptr, i64, i64 }, ptr %a309 + store { ptr, i64, i64 } %t314, ptr %a316 + store { ptr, i64, i64 } { ptr @.str.2742, i64 10, i64 0 }, ptr %a317 + call void @finch_str_concat(ptr %a315, ptr %a316, ptr %a317) + store { ptr, i64, i64 } %t314, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a315 + %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2743, i64 2, i64 0 }, ptr %a321 + call void @finch_str_join(ptr %a322, ptr %a132, ptr %a321) + %t323 = load { ptr, i64, i64 }, ptr %a322 + store { ptr, i64, i64 } %t319, ptr %a325 + store { ptr, i64, i64 } %t323, ptr %a326 + call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) + store { ptr, i64, i64 } %t319, ptr %a327 + call void @finch_str_drop(ptr %a327) + store { ptr, i64, i64 } %t323, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t329, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.2744, i64 2, i64 0 }, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + store { ptr, i64, i64 } %t329, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = load { ptr, i64, i64 }, ptr %a330 + %t335 = load i64, ptr %t274 + %t336 = add i64 %t335, 1 + call void @finch_arr_reserve(ptr %t273, i64 %t336, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t337 = load ptr, ptr %t273 + %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t335 + store { ptr, i64, i64 } %t334, ptr %t338 + store i64 %t336, ptr %t274 + call void @finch.drop.arr_str(ptr %a132) + call void @finch_str_drop(ptr %a111) + call void @finch.drop.S_ast_Node(ptr %a43) + ret void +} + +define internal i64 @finch.gen.md(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4480, label %ok4481 +panic4480: + call void @finch_panic(ptr @.str.2745, i64 1938, ptr @.str.2746) + unreachable +ok4481: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 33 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t7, ptr %a8 + call void @finch_str_copy(ptr %a9, ptr %a8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + %t11 = load i64, ptr %t6 + %t12 = add i64 %t11, 1 + call void @finch_arr_reserve(ptr %t5, i64 %t12, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t13 = load ptr, ptr %t5 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 %t11 + store { ptr, i64, i64 } %t10, ptr %t14 + store i64 %t12, ptr %t6 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic4482, label %ok4483 +panic4482: + call void @finch_panic(ptr @.str.2747, i64 1939, ptr @.str.2748) + unreachable +ok4483: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 33 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = sub i64 %t19, 1 + ret i64 %t20 +} + +define internal { ptr, i64, i64 } @finch.gen.mdRef(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + %t2 = load i64, ptr %a1 + %t3 = icmp slt i64 %t2, 0 + br i1 %t3, label %then4484, label %endif4486 +then4484: + ret { ptr, i64, i64 } { ptr @.str.2749, i64 4, i64 0 } +endif4486: + %t4 = load i64, ptr %a1 + call void @finch_str_from_int(ptr %a5, i64 %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.2750, i64 1, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + store { ptr, i64, i64 } %t6, ptr %a10 + call void @finch_str_drop(ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a7 + ret { ptr, i64, i64 } %t11 +} + +define internal i64 @finch.gen.alignUp(i64 %p0, i64 %p1) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i64, align 16 + store i64 %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load i64, ptr %a2 + %t4 = icmp sle i64 %t3, 1 + br i1 %t4, label %then4487, label %endif4489 +then4487: + %t5 = load i64, ptr %a1 + ret i64 %t5 +endif4489: + %t6 = load i64, ptr %a1 + %t7 = load i64, ptr %a2 + %t8 = add i64 %t6, %t7 + %t9 = sub i64 %t8, 1 + %t10 = load i64, ptr %a2 + %t11 = icmp eq i64 %t10, 0 + br i1 %t11, label %panic4490, label %ok4491 +panic4490: + call void @finch_panic(ptr @.str.2751, i64 1958, ptr @.str.2752) + unreachable +ok4491: + %t12 = sdiv i64 %t9, %t10 + %t13 = load i64, ptr %a2 + %t14 = mul i64 %t12, %t13 + ret i64 %t14 +} + +define internal %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca %S.gen.SizeAlign, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca %S.gen.StructDef, align 16 + %a137 = alloca %S.gen.StructDef, align 16 + %a139 = alloca %S.gen.StructDef, align 16 + %a148 = alloca i64, align 16 + %a149 = alloca i64, align 16 + %a151 = alloca i64, align 16 + %a159 = alloca %S.ast.Type, align 16 + %a163 = alloca %S.gen.SizeAlign, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.2753, i64 4, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from4492 +logic.from4492: + br i1 %t13, label %logic.end4494, label %logic.rhs4493 +logic.rhs4493: + %t14 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.2754, i64 4, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.rend4495 +logic.rend4495: + br label %logic.end4494 +logic.end4494: + %t19 = phi i1 [ true, %logic.from4492 ], [ %t18, %logic.rend4495 ] + br label %logic.from4496 +logic.from4496: + br i1 %t19, label %logic.end4498, label %logic.rhs4497 +logic.rhs4497: + %t20 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.2755, i64 2, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_eq(ptr %a21, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br label %logic.rend4499 +logic.rend4499: + br label %logic.end4498 +logic.end4498: + %t25 = phi i1 [ true, %logic.from4496 ], [ %t24, %logic.rend4499 ] + br label %logic.from4500 +logic.from4500: + br i1 %t25, label %logic.end4502, label %logic.rhs4501 +logic.rhs4501: + %t26 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.2756, i64 2, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br label %logic.rend4503 +logic.rend4503: + br label %logic.end4502 +logic.end4502: + %t31 = phi i1 [ true, %logic.from4500 ], [ %t30, %logic.rend4503 ] + br i1 %t31, label %then4504, label %endif4506 +then4504: + %t32 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 1, 0 + %t33 = insertvalue %S.gen.SizeAlign %t32, i64 1, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t33 +endif4506: + %t34 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.2757, i64 3, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.from4507 +logic.from4507: + br i1 %t38, label %logic.end4509, label %logic.rhs4508 +logic.rhs4508: + %t39 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t39, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.2758, i64 3, i64 0 }, ptr %a41 + %t42 = call i32 @finch_str_eq(ptr %a40, ptr %a41) + %t43 = icmp ne i32 %t42, 0 + br label %logic.rend4510 +logic.rend4510: + br label %logic.end4509 +logic.end4509: + %t44 = phi i1 [ true, %logic.from4507 ], [ %t43, %logic.rend4510 ] + br i1 %t44, label %then4511, label %endif4513 +then4511: + %t45 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 2, 0 + %t46 = insertvalue %S.gen.SizeAlign %t45, i64 2, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t46 +endif4513: + %t47 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t47, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.2759, i64 3, i64 0 }, ptr %a49 + %t50 = call i32 @finch_str_eq(ptr %a48, ptr %a49) + %t51 = icmp ne i32 %t50, 0 + br label %logic.from4514 +logic.from4514: + br i1 %t51, label %logic.end4516, label %logic.rhs4515 +logic.rhs4515: + %t52 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.2760, i64 3, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br label %logic.rend4517 +logic.rend4517: + br label %logic.end4516 +logic.end4516: + %t57 = phi i1 [ true, %logic.from4514 ], [ %t56, %logic.rend4517 ] + br label %logic.from4518 +logic.from4518: + br i1 %t57, label %logic.end4520, label %logic.rhs4519 +logic.rhs4519: + %t58 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t58, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.2761, i64 3, i64 0 }, ptr %a60 + %t61 = call i32 @finch_str_eq(ptr %a59, ptr %a60) + %t62 = icmp ne i32 %t61, 0 + br label %logic.rend4521 +logic.rend4521: + br label %logic.end4520 +logic.end4520: + %t63 = phi i1 [ true, %logic.from4518 ], [ %t62, %logic.rend4521 ] + br label %logic.from4522 +logic.from4522: + br i1 %t63, label %logic.end4524, label %logic.rhs4523 +logic.rhs4523: + %t64 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.2762, i64 4, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp ne i32 %t67, 0 + br label %logic.rend4525 +logic.rend4525: + br label %logic.end4524 +logic.end4524: + %t69 = phi i1 [ true, %logic.from4522 ], [ %t68, %logic.rend4525 ] + br i1 %t69, label %then4526, label %endif4528 +then4526: + %t70 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 4, 0 + %t71 = insertvalue %S.gen.SizeAlign %t70, i64 4, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t71 +endif4528: + %t72 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t72, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.2763, i64 3, i64 0 }, ptr %a74 + %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) + %t76 = icmp ne i32 %t75, 0 + br label %logic.from4529 +logic.from4529: + br i1 %t76, label %logic.end4531, label %logic.rhs4530 +logic.rhs4530: + %t77 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t77, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.2764, i64 5, i64 0 }, ptr %a79 + %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) + %t81 = icmp ne i32 %t80, 0 + br label %logic.rend4532 +logic.rend4532: + br label %logic.end4531 +logic.end4531: + %t82 = phi i1 [ true, %logic.from4529 ], [ %t81, %logic.rend4532 ] + br i1 %t82, label %then4533, label %endif4535 +then4533: + %t83 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 24, 0 + %t84 = insertvalue %S.gen.SizeAlign %t83, i64 8, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t84 +endif4535: + %t85 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.2765, i64 3, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + br i1 %t89, label %then4536, label %endif4538 +then4536: + %t90 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 56, 0 + %t91 = insertvalue %S.gen.SizeAlign %t90, i64 8, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t91 +endif4538: + %t92 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t92, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.2766, i64 5, i64 0 }, ptr %a94 + %t95 = call i32 @finch_str_eq(ptr %a93, ptr %a94) + %t96 = icmp ne i32 %t95, 0 + br i1 %t96, label %then4539, label %endif4541 +then4539: + %t97 = load ptr, ptr %a1 + %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t99 = load { ptr, i64, i64 }, ptr %t98 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 0, %t100 + br i1 %t101, label %range4542, label %inrange4543 +range4542: + call void @finch_panic_index(ptr @.str.2767, i64 1980, i64 0, i64 %t100) + unreachable +inrange4543: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 + %t104 = load %S.ast.Type, ptr %t103 + %t105 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t97, %S.ast.Type %t104) + store %S.gen.SizeAlign %t105, ptr %a106 + %t107 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 0 + %t108 = load i64, ptr %t107 + %t109 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t110 = load i64, ptr %t109 + %t111 = mul i64 %t108, %t110 + %t112 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t111, 0 + %t113 = getelementptr inbounds %S.gen.SizeAlign, ptr %a106, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = insertvalue %S.gen.SizeAlign %t112, i64 %t114, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t115 +endif4541: + %t116 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t116, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.2768, i64 6, i64 0 }, ptr %a118 + %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) + %t120 = icmp ne i32 %t119, 0 + br i1 %t120, label %then4544, label %endif4546 +then4544: + %t121 = load ptr, ptr %a1 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic4547, label %ok4548 +panic4547: + call void @finch_panic(ptr @.str.2769, i64 1984, ptr @.str.2770) + unreachable +ok4548: + %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 16 + %t124 = load ptr, ptr %a1 + %t125 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t126 = load { ptr, i64, i64 }, ptr %t125 + %t127 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + %t129 = call i64 @finch.gen.findStruct(ptr %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t128) + %t130 = load { ptr, i64, i64 }, ptr %t123 + %t131 = extractvalue { ptr, i64, i64 } %t130, 1 + %t132 = icmp uge i64 %t129, %t131 + br i1 %t132, label %range4549, label %inrange4550 +range4549: + call void @finch_panic_index(ptr @.str.2771, i64 1984, i64 %t129, i64 %t131) + unreachable +inrange4550: + %t133 = extractvalue { ptr, i64, i64 } %t130, 0 + %t134 = getelementptr inbounds %S.gen.StructDef, ptr %t133, i64 %t129 + %t135 = load %S.gen.StructDef, ptr %t134 + store %S.gen.StructDef %t135, ptr %a136 + call void @finch.copy.S_gen_StructDef(ptr %a137, ptr %a136) + %t138 = load %S.gen.StructDef, ptr %a137 + store %S.gen.StructDef %t138, ptr %a139 + %t140 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 2 + %t141 = load i1, ptr %t140 + br i1 %t141, label %then4551, label %endif4553 +then4551: + %t142 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 9 + %t143 = load i64, ptr %t142 + %t144 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t143, 0 + %t145 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 10 + %t146 = load i64, ptr %t145 + %t147 = insertvalue %S.gen.SizeAlign %t144, i64 %t146, 1 + call void @finch.drop.S_gen_StructDef(ptr %a139) + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t147 +endif4553: + store i64 0, ptr %a148 + store i64 1, ptr %a149 + %t150 = getelementptr inbounds %S.gen.StructDef, ptr %a139, i32 0, i32 12 + store i64 0, ptr %a151 + br label %each.cond4554 +each.cond4554: + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 + %t153 = load i64, ptr %t152 + %t154 = load i64, ptr %a151 + %t155 = icmp slt i64 %t154, %t153 + br i1 %t155, label %each.body4555, label %each.end4557 +each.body4555: + %t156 = load ptr, ptr %t150 + %t157 = getelementptr inbounds %S.ast.Type, ptr %t156, i64 %t154 + %t158 = load %S.ast.Type, ptr %t157 + store %S.ast.Type %t158, ptr %a159 + %t160 = load ptr, ptr %a1 + %t161 = load %S.ast.Type, ptr %a159 + %t162 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t160, %S.ast.Type %t161) + store %S.gen.SizeAlign %t162, ptr %a163 + %t164 = load i64, ptr %a148 + %t165 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 + %t166 = load i64, ptr %t165 + %t167 = call i64 @finch.gen.alignUp(i64 %t164, i64 %t166) + %t168 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 0 + %t169 = load i64, ptr %t168 + %t170 = add i64 %t167, %t169 + store i64 %t170, ptr %a148 + %t171 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 + %t172 = load i64, ptr %t171 + %t173 = load i64, ptr %a149 + %t174 = icmp sgt i64 %t172, %t173 + br i1 %t174, label %then4558, label %endif4560 +then4558: + %t175 = getelementptr inbounds %S.gen.SizeAlign, ptr %a163, i32 0, i32 1 + %t176 = load i64, ptr %t175 + store i64 %t176, ptr %a149 + br label %endif4560 +endif4560: + br label %each.step4556 +each.step4556: + %t177 = load i64, ptr %a151 + %t178 = add i64 %t177, 1 + store i64 %t178, ptr %a151 + br label %each.cond4554 +each.end4557: + %t179 = load i64, ptr %a148 + %t180 = load i64, ptr %a149 + %t181 = call i64 @finch.gen.alignUp(i64 %t179, i64 %t180) + %t182 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 %t181, 0 + %t183 = load i64, ptr %a149 + %t184 = insertvalue %S.gen.SizeAlign %t182, i64 %t183, 1 + call void @finch.drop.S_gen_StructDef(ptr %a139) + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t184 +endif4546: + %t185 = insertvalue %S.gen.SizeAlign zeroinitializer, i64 8, 0 + %t186 = insertvalue %S.gen.SizeAlign %t185, i64 8, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.SizeAlign %t186 +} + +define internal { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %p0, %S.gen.StructDef %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.StructDef, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca i64, align 16 + %a13 = alloca i64, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.gen.SizeAlign, align 16 + store ptr %p0, ptr %a1 + store %S.gen.StructDef %p1, ptr %a2 + %t3 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 2 + %t4 = load i1, ptr %t3 + br i1 %t4, label %then4561, label %endif4563 +then4561: + %t5 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 4 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch.copy.arr_int(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + ret { ptr, i64, i64 } %t9 +endif4563: + store { ptr, i64, i64 } zeroinitializer, ptr %a10 + store i64 0, ptr %a11 + %t12 = getelementptr inbounds %S.gen.StructDef, ptr %a2, i32 0, i32 12 + store i64 0, ptr %a13 + br label %each.cond4564 +each.cond4564: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = load i64, ptr %a13 + %t17 = icmp slt i64 %t16, %t15 + br i1 %t17, label %each.body4565, label %each.end4567 +each.body4565: + %t18 = load ptr, ptr %t12 + %t19 = getelementptr inbounds %S.ast.Type, ptr %t18, i64 %t16 + %t20 = load %S.ast.Type, ptr %t19 + store %S.ast.Type %t20, ptr %a21 + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Type, ptr %a21 + %t24 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t22, %S.ast.Type %t23) + store %S.gen.SizeAlign %t24, ptr %a25 + %t26 = load i64, ptr %a11 + %t27 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = call i64 @finch.gen.alignUp(i64 %t26, i64 %t28) + store i64 %t29, ptr %a11 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t31 = load i64, ptr %a11 + %t32 = load i64, ptr %t30 + %t33 = add i64 %t32, 1 + call void @finch_arr_reserve(ptr %a10, i64 %t33, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t34 = load ptr, ptr %a10 + %t35 = getelementptr inbounds i64, ptr %t34, i64 %t32 + store i64 %t31, ptr %t35 + store i64 %t33, ptr %t30 + %t36 = getelementptr inbounds %S.gen.SizeAlign, ptr %a25, i32 0, i32 0 + %t37 = load i64, ptr %t36 + %t38 = load i64, ptr %a11 + %t39 = add i64 %t38, %t37 + store i64 %t39, ptr %a11 + br label %each.step4566 +each.step4566: + %t40 = load i64, ptr %a13 + %t41 = add i64 %t40, 1 + store i64 %t41, ptr %a13 + br label %each.cond4564 +each.end4567: + %t42 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t42 +} + +define internal i64 @finch.gen.dbgMember(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3, i64 %p4, i64 %p5, i64 %p6, i64 %p7) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a6 = alloca i64, align 16 + %a7 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + store i64 %p5, ptr %a6 + store i64 %p6, ptr %a7 + store i64 %p7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.2772, i64 42, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t10, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.2773, i64 11, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + %t20 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a21, i64 %t20) + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + store { ptr, i64, i64 } %t19, ptr %a26 + call void @finch_str_drop(ptr %a26) + store { ptr, i64, i64 } %t22, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.2774, i64 9, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a35, i64 %t34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t33, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t33, ptr %a40 + call void @finch_str_drop(ptr %a40) + store { ptr, i64, i64 } %t36, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t42, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.2775, i64 8, i64 0 }, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + store { ptr, i64, i64 } %t42, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a43 + %t48 = load i64, ptr %a5 + call void @finch_str_from_int(ptr %a49, i64 %t48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t47, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t47, ptr %a54 + call void @finch_str_drop(ptr %a54) + store { ptr, i64, i64 } %t50, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.2776, i64 12, i64 0 }, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t56, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = load i64, ptr %a6 + %t63 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t62) + store { ptr, i64, i64 } %t61, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t61, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.2777, i64 8, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load i64, ptr %a7 + call void @finch_str_from_int(ptr %a76, i64 %t75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t74, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t74, ptr %a81 + call void @finch_str_drop(ptr %a81) + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.2778, i64 10, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + %t89 = load i64, ptr %a8 + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t88, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.2779, i64 1, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = call i64 @finch.gen.md(ptr %t9, { ptr, i64, i64 } %t102) + store { ptr, i64, i64 } %t102, ptr %a104 + call void @finch_str_drop(ptr %a104) + ret i64 %t103 +} + +define internal i64 @finch.gen.basicType(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.2780, i64 20, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.2781, i64 9, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a17, i64 %t16) + %t18 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a20 + store { ptr, i64, i64 } %t18, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t15, ptr %a22 + call void @finch_str_drop(ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.2782, i64 12, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t29, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.2783, i64 1, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = call i64 @finch.gen.md(ptr %t5, { ptr, i64, i64 } %t40) + store { ptr, i64, i64 } %t40, ptr %a42 + call void @finch_str_drop(ptr %a42) + ret i64 %t41 +} + +define internal i64 @finch.gen.diType(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i64, align 16 + %a59 = alloca i64, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.gen.EnumDef, align 16 + %a129 = alloca %S.gen.EnumDef, align 16 + %a131 = alloca %S.gen.EnumDef, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca i64, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca i32, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca i64, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca %S.gen.SizeAlign, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca i64, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca %S.ast.Type, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca %S.ast.Type, align 16 + %a414 = alloca %S.ast.Type, align 16 + %a417 = alloca %S.ast.Type, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca i64, align 16 + %a439 = alloca %S.ast.Type, align 16 + %a440 = alloca i64, align 16 + %a446 = alloca i64, align 16 + %a452 = alloca i64, align 16 + %a458 = alloca i64, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca %S.ast.Type, align 16 + %a547 = alloca i64, align 16 + %a550 = alloca i64, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca i64, align 16 + %a569 = alloca i64, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a613 = alloca { ptr, i64, i64 }, align 16 + %a614 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a634 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca %S.gen.StructDef, align 16 + %a677 = alloca %S.gen.StructDef, align 16 + %a679 = alloca %S.gen.StructDef, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a687 = alloca %S.gen.SizeAlign, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca i64, align 16 + %a705 = alloca %S.gen.SizeAlign, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a743 = alloca { ptr, i64, i64 }, align 16 + %a744 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a805 = alloca { ptr, i64, i64 }, align 16 + %a806 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a823 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a840 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca i32, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.2784, i64 4, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from4568 +logic.from4568: + br i1 %t13, label %logic.end4570, label %logic.rhs4569 +logic.rhs4569: + %t14 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.2785, i64 4, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.rend4571 +logic.rend4571: + br label %logic.end4570 +logic.end4570: + %t19 = phi i1 [ true, %logic.from4568 ], [ %t18, %logic.rend4571 ] + br i1 %t19, label %then4572, label %endif4574 +then4572: + call void @finch_str_drop(ptr %a8) + ret i64 -1 +endif4574: + %t20 = load %S.ast.Type, ptr %a2 + %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) + store { ptr, i64, i64 } { ptr @.str.2786, i64 2, i64 0 }, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a27 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic4575, label %ok4576 +panic4575: + call void @finch_panic(ptr @.str.2787, i64 2033, ptr @.str.2788) + unreachable +ok4576: + %t30 = getelementptr inbounds %S.gen.Gen, ptr %t28, i32 0, i32 34 + %t31 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t31, ptr %a32 + %t33 = call i64 @finch_map_find(ptr %t30, ptr %a32, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t34 = icmp sge i64 %t33, 0 + br i1 %t34, label %then4577, label %endif4579 +then4577: + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic4580, label %ok4581 +panic4580: + call void @finch_panic(ptr @.str.2789, i64 2034, ptr @.str.2790) + unreachable +ok4581: + %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 34 + %t38 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = call i64 @finch_map_find(ptr %t37, ptr %a39, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t41 = icmp slt i64 %t40, 0 + br i1 %t41, label %map.missing4582, label %map.found4583 +map.missing4582: + store { ptr, i64, i64 } zeroinitializer, ptr %a42 + store { ptr, i64, i64 } %t38, ptr %a43 + call void @finch_buf_str(ptr %a42, ptr %a43, i32 1) + call void @finch_map_missing(ptr @.str.2791, i64 2034, ptr %a42) + unreachable +map.found4583: + %t44 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t37, i32 0, i32 0 + %t45 = load ptr, ptr %t44 + %t46 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t45, i64 %t40 + %t47 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t46, i32 0, i32 2 + %t48 = load i64, ptr %t47 + call void @finch_str_drop(ptr %a27) + call void @finch_str_drop(ptr %a8) + ret i64 %t48 +endif4579: + store i64 -1, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = icmp eq ptr %t50, null + br i1 %t51, label %panic4584, label %ok4585 +panic4584: + call void @finch_panic(ptr @.str.2792, i64 2037, ptr @.str.2793) + unreachable +ok4585: + %t52 = getelementptr inbounds %S.gen.Gen, ptr %t50, i32 0, i32 35 + %t53 = load { ptr, i64, i64 }, ptr %t52 + %t54 = extractvalue { ptr, i64, i64 } %t53, 1 + %t55 = icmp uge i64 0, %t54 + br i1 %t55, label %range4586, label %inrange4587 +range4586: + call void @finch_panic_index(ptr @.str.2794, i64 2037, i64 0, i64 %t54) + unreachable +inrange4587: + %t56 = extractvalue { ptr, i64, i64 } %t53, 0 + %t57 = getelementptr inbounds i64, ptr %t56, i64 0 + %t58 = load i64, ptr %t57 + store i64 %t58, ptr %a59 + %t60 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.2795, i64 4, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br i1 %t64, label %then4588, label %else4589 +then4588: + %t65 = load ptr, ptr %a1 + %t66 = call i64 @finch.gen.basicType(ptr %t65, { ptr, i64, i64 } { ptr @.str.2796, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2797, i64 14, i64 0 }) + store i64 %t66, ptr %a49 + br label %endif4590 +else4589: + %t67 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t67, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.2798, i64 4, i64 0 }, ptr %a69 + %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) + %t71 = icmp ne i32 %t70, 0 + br i1 %t71, label %then4591, label %else4592 +then4591: + %t72 = load ptr, ptr %a1 + %t73 = call i64 @finch.gen.basicType(ptr %t72, { ptr, i64, i64 } { ptr @.str.2799, i64 4, i64 0 }, i64 8, { ptr, i64, i64 } { ptr @.str.2800, i64 18, i64 0 }) + store i64 %t73, ptr %a49 + br label %endif4593 +else4592: + %t74 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.2801, i64 3, i64 0 }, ptr %a76 + %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) + %t78 = icmp ne i32 %t77, 0 + br i1 %t78, label %then4594, label %else4595 +then4594: + %t79 = load ptr, ptr %a1 + %t80 = call i64 @finch.gen.basicType(ptr %t79, { ptr, i64, i64 } { ptr @.str.2802, i64 3, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2803, i64 13, i64 0 }) + store i64 %t80, ptr %a49 + br label %endif4596 +else4595: + %t81 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.2804, i64 5, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br i1 %t85, label %then4597, label %else4598 +then4597: + %t86 = load ptr, ptr %a1 + %t87 = call i64 @finch.gen.basicType(ptr %t86, { ptr, i64, i64 } { ptr @.str.2805, i64 5, i64 0 }, i64 64, { ptr, i64, i64 } { ptr @.str.2806, i64 12, i64 0 }) + store i64 %t87, ptr %a49 + br label %endif4599 +else4598: + %t88 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t88, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.2807, i64 3, i64 0 }, ptr %a90 + %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then4600, label %else4601 +then4600: + %t93 = load ptr, ptr %a1 + %t94 = call i64 @finch.gen.basicType(ptr %t93, { ptr, i64, i64 } { ptr @.str.2808, i64 3, i64 0 }, i64 32, { ptr, i64, i64 } { ptr @.str.2809, i64 12, i64 0 }) + store i64 %t94, ptr %a49 + br label %endif4602 +else4601: + %t95 = load %S.ast.Type, ptr %a2 + %t96 = call i1 @finch.gen.isInt(%S.ast.Type %t95) + br i1 %t96, label %then4603, label %else4604 +then4603: + store { ptr, i64, i64 } { ptr @.str.2810, i64 15, i64 0 }, ptr %a97 + %t98 = load %S.ast.Type, ptr %a2 + %t99 = call i1 @finch.gen.isSigned(%S.ast.Type %t98) + br i1 %t99, label %then4606, label %endif4608 +then4606: + %t100 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.2811, i64 13, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t100, ptr %a101 + call void @finch_str_drop(ptr %a101) + br label %endif4608 +endif4608: + %t102 = load ptr, ptr %a1 + %t103 = load { ptr, i64, i64 }, ptr %a8 + %t104 = load %S.ast.Type, ptr %a2 + %t105 = call i64 @finch.gen.bitsOf(%S.ast.Type %t104) + %t106 = load { ptr, i64, i64 }, ptr %a97 + %t107 = call i64 @finch.gen.basicType(ptr %t102, { ptr, i64, i64 } %t103, i64 %t105, { ptr, i64, i64 } %t106) + store i64 %t107, ptr %a49 + call void @finch_str_drop(ptr %a97) + br label %endif4605 +else4604: + %t108 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2812, i64 4, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br i1 %t112, label %then4609, label %else4610 +then4609: + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic4612, label %ok4613 +panic4612: + call void @finch_panic(ptr @.str.2813, i64 2055, ptr @.str.2814) + unreachable +ok4613: + %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 21 + %t116 = load ptr, ptr %a1 + %t117 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t120 = load { ptr, i64, i64 }, ptr %t119 + %t121 = call i64 @finch.gen.findEnum(ptr %t116, { ptr, i64, i64 } %t118, { ptr, i64, i64 } %t120) + %t122 = load { ptr, i64, i64 }, ptr %t115 + %t123 = extractvalue { ptr, i64, i64 } %t122, 1 + %t124 = icmp uge i64 %t121, %t123 + br i1 %t124, label %range4614, label %inrange4615 +range4614: + call void @finch_panic_index(ptr @.str.2815, i64 2055, i64 %t121, i64 %t123) + unreachable +inrange4615: + %t125 = extractvalue { ptr, i64, i64 } %t122, 0 + %t126 = getelementptr inbounds %S.gen.EnumDef, ptr %t125, i64 %t121 + %t127 = load %S.gen.EnumDef, ptr %t126 + store %S.gen.EnumDef %t127, ptr %a128 + call void @finch.copy.S_gen_EnumDef(ptr %a129, ptr %a128) + %t130 = load %S.gen.EnumDef, ptr %a129 + store %S.gen.EnumDef %t130, ptr %a131 + store { ptr, i64, i64 } zeroinitializer, ptr %a132 + %t133 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load i64, ptr %t134 + store i64 0, ptr %a136 + br label %for.cond4616 +for.cond4616: + %t137 = load i64, ptr %a136 + %t138 = icmp slt i64 %t137, %t135 + br i1 %t138, label %for.body4617, label %for.end4619 +for.body4617: + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + %t140 = load ptr, ptr %a1 + %t141 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 2 + %t142 = load i64, ptr %a136 + %t143 = load { ptr, i64, i64 }, ptr %t141 + %t144 = extractvalue { ptr, i64, i64 } %t143, 1 + %t145 = icmp uge i64 %t142, %t144 + br i1 %t145, label %range4620, label %inrange4621 +range4620: + call void @finch_panic_index(ptr @.str.2817, i64 2058, i64 %t142, i64 %t144) + unreachable +inrange4621: + %t146 = extractvalue { ptr, i64, i64 } %t143, 0 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i64 %t142 + %t148 = load { ptr, i64, i64 }, ptr %t147 + store { ptr, i64, i64 } { ptr @.str.2816, i64 21, i64 0 }, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.2818, i64 10, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + %t158 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 3 + %t159 = load i64, ptr %a136 + %t160 = load { ptr, i64, i64 }, ptr %t158 + %t161 = extractvalue { ptr, i64, i64 } %t160, 1 + %t162 = icmp uge i64 %t159, %t161 + br i1 %t162, label %range4622, label %inrange4623 +range4622: + call void @finch_panic_index(ptr @.str.2819, i64 2058, i64 %t159, i64 %t161) + unreachable +inrange4623: + %t163 = extractvalue { ptr, i64, i64 } %t160, 0 + %t164 = getelementptr inbounds i64, ptr %t163, i64 %t159 + %t165 = load i64, ptr %t164 + call void @finch_str_from_int(ptr %a166, i64 %t165) + %t167 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t157, ptr %a169 + store { ptr, i64, i64 } %t167, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t157, ptr %a171 + call void @finch_str_drop(ptr %a171) + store { ptr, i64, i64 } %t167, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t173, ptr %a175 + store { ptr, i64, i64 } { ptr @.str.2820, i64 1, i64 0 }, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t173, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + %t179 = call i64 @finch.gen.md(ptr %t140, { ptr, i64, i64 } %t178) + store { ptr, i64, i64 } %t178, ptr %a180 + call void @finch_str_drop(ptr %a180) + %t181 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t179) + %t182 = load i64, ptr %t139 + %t183 = add i64 %t182, 1 + call void @finch_arr_reserve(ptr %a132, i64 %t183, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t184 = load ptr, ptr %a132 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 + store { ptr, i64, i64 } %t181, ptr %t185 + store i64 %t183, ptr %t139 + br label %for.step4618 +for.step4618: + %t186 = load i64, ptr %a136 + %t187 = add i64 %t186, 1 + store i64 %t187, ptr %a136 + br label %for.cond4616 +for.end4619: + %t188 = load ptr, ptr %a1 + %t189 = getelementptr inbounds %S.gen.EnumDef, ptr %a131, i32 0, i32 1 + %t190 = load { ptr, i64, i64 }, ptr %t189 + store { ptr, i64, i64 } { ptr @.str.2821, i64 54, i64 0 }, ptr %a192 + store { ptr, i64, i64 } %t190, ptr %a193 + call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) + %t194 = load { ptr, i64, i64 }, ptr %a191 + store { ptr, i64, i64 } %t194, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.2822, i64 10, i64 0 }, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t194, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + %t200 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a201, i64 %t200) + %t202 = load { ptr, i64, i64 }, ptr %a201 + store { ptr, i64, i64 } %t199, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t199, ptr %a206 + call void @finch_str_drop(ptr %a206) + store { ptr, i64, i64 } %t202, ptr %a207 + call void @finch_str_drop(ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t208, ptr %a210 + store { ptr, i64, i64 } { ptr @.str.2823, i64 24, i64 0 }, ptr %a211 + call void @finch_str_concat(ptr %a209, ptr %a210, ptr %a211) + store { ptr, i64, i64 } %t208, ptr %a212 + call void @finch_str_drop(ptr %a212) + %t213 = load { ptr, i64, i64 }, ptr %a209 + %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %a132, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2824, i64 2, i64 0 }, ptr %a215 + call void @finch_str_join(ptr %a216, ptr %a132, ptr %a215) + %t217 = load { ptr, i64, i64 }, ptr %a216 + store { ptr, i64, i64 } %t213, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t213, ptr %a221 + call void @finch_str_drop(ptr %a221) + store { ptr, i64, i64 } %t217, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.2825, i64 2, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = call i64 @finch.gen.md(ptr %t188, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t228, ptr %a230 + call void @finch_str_drop(ptr %a230) + store i64 %t229, ptr %a49 + call void @finch.drop.arr_str(ptr %a132) + call void @finch.drop.S_gen_EnumDef(ptr %a131) + br label %endif4611 +else4610: + %t231 = load ptr, ptr %a1 + %t232 = call i64 @finch.gen.md(ptr %t231, { ptr, i64, i64 } { ptr @.str.2826, i64 0, i64 0 }) + store i64 %t232, ptr %a49 + %t233 = load i64, ptr %a49 + %t234 = load ptr, ptr %a1 + %t235 = icmp eq ptr %t234, null + br i1 %t235, label %panic4624, label %ok4625 +panic4624: + call void @finch_panic(ptr @.str.2827, i64 2064, ptr @.str.2828) + unreachable +ok4625: + %t236 = getelementptr inbounds %S.gen.Gen, ptr %t234, i32 0, i32 34 + %t237 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t237, ptr %a238 + store i32 0, ptr %a239 + %t240 = call i64 @finch_map_slot(ptr %t236, ptr %a238, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a239) + %t241 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t236, i32 0, i32 0 + %t242 = load ptr, ptr %t241 + %t243 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t242, i64 %t240 + %t244 = load i32, ptr %a239 + %t245 = icmp ne i32 %t244, 0 + br i1 %t245, label %map.new4626, label %map.have4627 +map.new4626: + %t246 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 1 + call void @finch_str_copy(ptr %t246, ptr %a238) + %t247 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 + store i64 0, ptr %t247 + br label %map.have4627 +map.have4627: + %t248 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t243, i32 0, i32 2 + store i64 %t233, ptr %t248 + %t249 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t249, ptr %a250 + store { ptr, i64, i64 } { ptr @.str.2829, i64 3, i64 0 }, ptr %a251 + %t252 = call i32 @finch_str_eq(ptr %a250, ptr %a251) + %t253 = icmp ne i32 %t252, 0 + br i1 %t253, label %then4628, label %else4629 +then4628: + store i64 -1, ptr %a254 + %t255 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t256 = getelementptr inbounds { ptr, i64, i64 }, ptr %t255, i32 0, i32 1 + %t257 = load i64, ptr %t256 + %t258 = icmp sgt i64 %t257, 0 + br i1 %t258, label %then4631, label %endif4633 +then4631: + %t259 = load ptr, ptr %a1 + %t260 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t261 = load { ptr, i64, i64 }, ptr %t260 + %t262 = extractvalue { ptr, i64, i64 } %t261, 1 + %t263 = icmp uge i64 0, %t262 + br i1 %t263, label %range4634, label %inrange4635 +range4634: + call void @finch_panic_index(ptr @.str.2830, i64 2068, i64 0, i64 %t262) + unreachable +inrange4635: + %t264 = extractvalue { ptr, i64, i64 } %t261, 0 + %t265 = getelementptr inbounds %S.ast.Type, ptr %t264, i64 0 + %t266 = load %S.ast.Type, ptr %t265 + %t267 = call i64 @finch.gen.diType(ptr %t259, %S.ast.Type %t266) + store i64 %t267, ptr %a254 + br label %endif4633 +endif4633: + %t268 = load i64, ptr %a254 + %t269 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t268) + store { ptr, i64, i64 } { ptr @.str.2831, i64 51, i64 0 }, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t269, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.2832, i64 11, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + store { ptr, i64, i64 } %t274, ptr %a278 + call void @finch_str_drop(ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a275 + %t280 = load ptr, ptr %a1 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic4636, label %ok4637 +panic4636: + call void @finch_panic(ptr @.str.2833, i64 2070, ptr @.str.2834) + unreachable +ok4637: + %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 33 + %t283 = load i64, ptr %a49 + %t284 = load { ptr, i64, i64 }, ptr %t282 + %t285 = extractvalue { ptr, i64, i64 } %t284, 1 + %t286 = icmp uge i64 %t283, %t285 + br i1 %t286, label %range4638, label %inrange4639 +range4638: + call void @finch_panic_index(ptr @.str.2835, i64 2070, i64 %t283, i64 %t285) + unreachable +inrange4639: + %t287 = extractvalue { ptr, i64, i64 } %t284, 0 + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 %t283 + %t289 = load { ptr, i64, i64 }, ptr %t288 + store { ptr, i64, i64 } %t279, ptr %t288 + store { ptr, i64, i64 } %t289, ptr %a290 + call void @finch_str_drop(ptr %a290) + br label %endif4630 +else4629: + %t291 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t291, ptr %a292 + store { ptr, i64, i64 } { ptr @.str.2836, i64 5, i64 0 }, ptr %a293 + %t294 = call i32 @finch_str_eq(ptr %a292, ptr %a293) + %t295 = icmp ne i32 %t294, 0 + br i1 %t295, label %then4640, label %else4641 +then4640: + %t296 = load ptr, ptr %a1 + %t297 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t298 = load { ptr, i64, i64 }, ptr %t297 + %t299 = extractvalue { ptr, i64, i64 } %t298, 1 + %t300 = icmp uge i64 0, %t299 + br i1 %t300, label %range4643, label %inrange4644 +range4643: + call void @finch_panic_index(ptr @.str.2837, i64 2072, i64 0, i64 %t299) + unreachable +inrange4644: + %t301 = extractvalue { ptr, i64, i64 } %t298, 0 + %t302 = getelementptr inbounds %S.ast.Type, ptr %t301, i64 0 + %t303 = load %S.ast.Type, ptr %t302 + %t304 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t296, %S.ast.Type %t303) + store %S.gen.SizeAlign %t304, ptr %a305 + %t306 = load ptr, ptr %a1 + %t307 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t308 = load i64, ptr %t307 + call void @finch_str_from_int(ptr %a309, i64 %t308) + %t310 = load { ptr, i64, i64 }, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.2838, i64 19, i64 0 }, ptr %a312 + store { ptr, i64, i64 } %t310, ptr %a313 + call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) + store { ptr, i64, i64 } %t310, ptr %a314 + call void @finch_str_drop(ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a311 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.2839, i64 1, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + %t321 = call i64 @finch.gen.md(ptr %t306, { ptr, i64, i64 } %t320) + store { ptr, i64, i64 } %t320, ptr %a322 + call void @finch_str_drop(ptr %a322) + store i64 %t321, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t326 = load { ptr, i64, i64 }, ptr %t325 + %t327 = extractvalue { ptr, i64, i64 } %t326, 1 + %t328 = icmp uge i64 0, %t327 + br i1 %t328, label %range4645, label %inrange4646 +range4645: + call void @finch_panic_index(ptr @.str.2841, i64 2074, i64 0, i64 %t327) + unreachable +inrange4646: + %t329 = extractvalue { ptr, i64, i64 } %t326, 0 + %t330 = getelementptr inbounds %S.ast.Type, ptr %t329, i64 0 + %t331 = load %S.ast.Type, ptr %t330 + %t332 = call i64 @finch.gen.diType(ptr %t324, %S.ast.Type %t331) + %t333 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t332) + store { ptr, i64, i64 } { ptr @.str.2840, i64 51, i64 0 }, ptr %a335 + store { ptr, i64, i64 } %t333, ptr %a336 + call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336) + store { ptr, i64, i64 } %t333, ptr %a337 + call void @finch_str_drop(ptr %a337) + %t338 = load { ptr, i64, i64 }, ptr %a334 + store { ptr, i64, i64 } %t338, ptr %a340 + store { ptr, i64, i64 } { ptr @.str.2842, i64 8, i64 0 }, ptr %a341 + call void @finch_str_concat(ptr %a339, ptr %a340, ptr %a341) + store { ptr, i64, i64 } %t338, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load { ptr, i64, i64 }, ptr %a339 + %t344 = getelementptr inbounds %S.gen.SizeAlign, ptr %a305, i32 0, i32 0 + %t345 = load i64, ptr %t344 + %t346 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t347 = load i64, ptr %t346 + %t348 = mul i64 %t345, %t347 + %t349 = mul i64 %t348, 8 + call void @finch_str_from_int(ptr %a350, i64 %t349) + %t351 = load { ptr, i64, i64 }, ptr %a350 + store { ptr, i64, i64 } %t343, ptr %a353 + store { ptr, i64, i64 } %t351, ptr %a354 + call void @finch_str_concat(ptr %a352, ptr %a353, ptr %a354) + store { ptr, i64, i64 } %t343, ptr %a355 + call void @finch_str_drop(ptr %a355) + store { ptr, i64, i64 } %t351, ptr %a356 + call void @finch_str_drop(ptr %a356) + %t357 = load { ptr, i64, i64 }, ptr %a352 + store { ptr, i64, i64 } %t357, ptr %a359 + store { ptr, i64, i64 } { ptr @.str.2843, i64 15, i64 0 }, ptr %a360 + call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) + store { ptr, i64, i64 } %t357, ptr %a361 + call void @finch_str_drop(ptr %a361) + %t362 = load { ptr, i64, i64 }, ptr %a358 + %t363 = load i64, ptr %a323 + call void @finch_str_from_int(ptr %a364, i64 %t363) + %t365 = load { ptr, i64, i64 }, ptr %a364 + store { ptr, i64, i64 } %t362, ptr %a367 + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + store { ptr, i64, i64 } %t362, ptr %a369 + call void @finch_str_drop(ptr %a369) + store { ptr, i64, i64 } %t365, ptr %a370 + call void @finch_str_drop(ptr %a370) + %t371 = load { ptr, i64, i64 }, ptr %a366 + store { ptr, i64, i64 } %t371, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.2844, i64 2, i64 0 }, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t371, ptr %a375 + call void @finch_str_drop(ptr %a375) + %t376 = load { ptr, i64, i64 }, ptr %a372 + %t377 = load ptr, ptr %a1 + %t378 = icmp eq ptr %t377, null + br i1 %t378, label %panic4647, label %ok4648 +panic4647: + call void @finch_panic(ptr @.str.2845, i64 2074, ptr @.str.2846) + unreachable +ok4648: + %t379 = getelementptr inbounds %S.gen.Gen, ptr %t377, i32 0, i32 33 + %t380 = load i64, ptr %a49 + %t381 = load { ptr, i64, i64 }, ptr %t379 + %t382 = extractvalue { ptr, i64, i64 } %t381, 1 + %t383 = icmp uge i64 %t380, %t382 + br i1 %t383, label %range4649, label %inrange4650 +range4649: + call void @finch_panic_index(ptr @.str.2847, i64 2074, i64 %t380, i64 %t382) + unreachable +inrange4650: + %t384 = extractvalue { ptr, i64, i64 } %t381, 0 + %t385 = getelementptr inbounds { ptr, i64, i64 }, ptr %t384, i64 %t380 + %t386 = load { ptr, i64, i64 }, ptr %t385 + store { ptr, i64, i64 } %t376, ptr %t385 + store { ptr, i64, i64 } %t386, ptr %a387 + call void @finch_str_drop(ptr %a387) + br label %endif4642 +else4641: + %t388 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t388, ptr %a389 + store { ptr, i64, i64 } { ptr @.str.2848, i64 3, i64 0 }, ptr %a390 + %t391 = call i32 @finch_str_eq(ptr %a389, ptr %a390) + %t392 = icmp ne i32 %t391, 0 + br label %logic.from4651 +logic.from4651: + br i1 %t392, label %logic.end4653, label %logic.rhs4652 +logic.rhs4652: + %t393 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t393, ptr %a394 + store { ptr, i64, i64 } { ptr @.str.2849, i64 5, i64 0 }, ptr %a395 + %t396 = call i32 @finch_str_eq(ptr %a394, ptr %a395) + %t397 = icmp ne i32 %t396, 0 + br label %logic.rend4654 +logic.rend4654: + br label %logic.end4653 +logic.end4653: + %t398 = phi i1 [ true, %logic.from4651 ], [ %t397, %logic.rend4654 ] + br i1 %t398, label %then4655, label %else4656 +then4655: + %t399 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2850, i64 4, i64 0 }) + store %S.ast.Type %t399, ptr %a400 + %t401 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t401, ptr %a402 + store { ptr, i64, i64 } { ptr @.str.2851, i64 5, i64 0 }, ptr %a403 + %t404 = call i32 @finch_str_eq(ptr %a402, ptr %a403) + %t405 = icmp ne i32 %t404, 0 + br i1 %t405, label %then4658, label %endif4660 +then4658: + %t406 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t407 = load { ptr, i64, i64 }, ptr %t406 + %t408 = extractvalue { ptr, i64, i64 } %t407, 1 + %t409 = icmp uge i64 0, %t408 + br i1 %t409, label %range4661, label %inrange4662 +range4661: + call void @finch_panic_index(ptr @.str.2852, i64 2078, i64 0, i64 %t408) + unreachable +inrange4662: + %t410 = extractvalue { ptr, i64, i64 } %t407, 0 + %t411 = getelementptr inbounds %S.ast.Type, ptr %t410, i64 0 + %t412 = load %S.ast.Type, ptr %t411 + store %S.ast.Type %t412, ptr %a413 + call void @finch.copy.S_ast_Type(ptr %a414, ptr %a413) + %t415 = load %S.ast.Type, ptr %a414 + %t416 = load %S.ast.Type, ptr %a400 + store %S.ast.Type %t415, ptr %a400 + store %S.ast.Type %t416, ptr %a417 + call void @finch.drop.S_ast_Type(ptr %a417) + br label %endif4660 +endif4660: + %t418 = load ptr, ptr %a1 + %t419 = load ptr, ptr %a1 + %t420 = load %S.ast.Type, ptr %a400 + %t421 = call i64 @finch.gen.diType(ptr %t419, %S.ast.Type %t420) + %t422 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t421) + store { ptr, i64, i64 } { ptr @.str.2853, i64 51, i64 0 }, ptr %a424 + store { ptr, i64, i64 } %t422, ptr %a425 + call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) + store { ptr, i64, i64 } %t422, ptr %a426 + call void @finch_str_drop(ptr %a426) + %t427 = load { ptr, i64, i64 }, ptr %a423 + store { ptr, i64, i64 } %t427, ptr %a429 + store { ptr, i64, i64 } { ptr @.str.2854, i64 11, i64 0 }, ptr %a430 + call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) + store { ptr, i64, i64 } %t427, ptr %a431 + call void @finch_str_drop(ptr %a431) + %t432 = load { ptr, i64, i64 }, ptr %a428 + %t433 = call i64 @finch.gen.md(ptr %t418, { ptr, i64, i64 } %t432) + store { ptr, i64, i64 } %t432, ptr %a434 + call void @finch_str_drop(ptr %a434) + store i64 %t433, ptr %a435 + %t436 = load ptr, ptr %a1 + %t437 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2855, i64 3, i64 0 }) + %t438 = call i64 @finch.gen.diType(ptr %t436, %S.ast.Type %t437) + store %S.ast.Type %t437, ptr %a439 + call void @finch.drop.S_ast_Type(ptr %a439) + store i64 %t438, ptr %a440 + %t441 = load ptr, ptr %a1 + %t442 = load i64, ptr %a49 + %t443 = load i64, ptr %a59 + %t444 = load i64, ptr %a435 + %t445 = call i64 @finch.gen.dbgMember(ptr %t441, { ptr, i64, i64 } { ptr @.str.2856, i64 3, i64 0 }, i64 %t442, i64 %t443, i64 0, i64 %t444, i64 64, i64 0) + store i64 %t445, ptr %a446 + %t447 = load ptr, ptr %a1 + %t448 = load i64, ptr %a49 + %t449 = load i64, ptr %a59 + %t450 = load i64, ptr %a440 + %t451 = call i64 @finch.gen.dbgMember(ptr %t447, { ptr, i64, i64 } { ptr @.str.2857, i64 3, i64 0 }, i64 %t448, i64 %t449, i64 0, i64 %t450, i64 64, i64 64) + store i64 %t451, ptr %a452 + %t453 = load ptr, ptr %a1 + %t454 = load i64, ptr %a49 + %t455 = load i64, ptr %a59 + %t456 = load i64, ptr %a440 + %t457 = call i64 @finch.gen.dbgMember(ptr %t453, { ptr, i64, i64 } { ptr @.str.2858, i64 3, i64 0 }, i64 %t454, i64 %t455, i64 0, i64 %t456, i64 64, i64 128) + store i64 %t457, ptr %a458 + %t459 = load %S.ast.Type, ptr %a2 + %t460 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t459) + store { ptr, i64, i64 } { ptr @.str.2859, i64 52, i64 0 }, ptr %a462 + store { ptr, i64, i64 } %t460, ptr %a463 + call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) + store { ptr, i64, i64 } %t460, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } %t465, ptr %a467 + store { ptr, i64, i64 } { ptr @.str.2860, i64 10, i64 0 }, ptr %a468 + call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) + store { ptr, i64, i64 } %t465, ptr %a469 + call void @finch_str_drop(ptr %a469) + %t470 = load { ptr, i64, i64 }, ptr %a466 + %t471 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a472, i64 %t471) + %t473 = load { ptr, i64, i64 }, ptr %a472 + store { ptr, i64, i64 } %t470, ptr %a475 + store { ptr, i64, i64 } %t473, ptr %a476 + call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) + store { ptr, i64, i64 } %t470, ptr %a477 + call void @finch_str_drop(ptr %a477) + store { ptr, i64, i64 } %t473, ptr %a478 + call void @finch_str_drop(ptr %a478) + %t479 = load { ptr, i64, i64 }, ptr %a474 + store { ptr, i64, i64 } %t479, ptr %a481 + store { ptr, i64, i64 } { ptr @.str.2861, i64 37, i64 0 }, ptr %a482 + call void @finch_str_concat(ptr %a480, ptr %a481, ptr %a482) + store { ptr, i64, i64 } %t479, ptr %a483 + call void @finch_str_drop(ptr %a483) + %t484 = load { ptr, i64, i64 }, ptr %a480 + %t485 = load i64, ptr %a446 + call void @finch_str_from_int(ptr %a486, i64 %t485) + %t487 = load { ptr, i64, i64 }, ptr %a486 + store { ptr, i64, i64 } %t484, ptr %a489 + store { ptr, i64, i64 } %t487, ptr %a490 + call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) + store { ptr, i64, i64 } %t484, ptr %a491 + call void @finch_str_drop(ptr %a491) + store { ptr, i64, i64 } %t487, ptr %a492 + call void @finch_str_drop(ptr %a492) + %t493 = load { ptr, i64, i64 }, ptr %a488 + store { ptr, i64, i64 } %t493, ptr %a495 + store { ptr, i64, i64 } { ptr @.str.2862, i64 3, i64 0 }, ptr %a496 + call void @finch_str_concat(ptr %a494, ptr %a495, ptr %a496) + store { ptr, i64, i64 } %t493, ptr %a497 + call void @finch_str_drop(ptr %a497) + %t498 = load { ptr, i64, i64 }, ptr %a494 + %t499 = load i64, ptr %a452 + call void @finch_str_from_int(ptr %a500, i64 %t499) + %t501 = load { ptr, i64, i64 }, ptr %a500 + store { ptr, i64, i64 } %t498, ptr %a503 + store { ptr, i64, i64 } %t501, ptr %a504 + call void @finch_str_concat(ptr %a502, ptr %a503, ptr %a504) + store { ptr, i64, i64 } %t498, ptr %a505 + call void @finch_str_drop(ptr %a505) + store { ptr, i64, i64 } %t501, ptr %a506 + call void @finch_str_drop(ptr %a506) + %t507 = load { ptr, i64, i64 }, ptr %a502 + store { ptr, i64, i64 } %t507, ptr %a509 + store { ptr, i64, i64 } { ptr @.str.2863, i64 3, i64 0 }, ptr %a510 + call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510) + store { ptr, i64, i64 } %t507, ptr %a511 + call void @finch_str_drop(ptr %a511) + %t512 = load { ptr, i64, i64 }, ptr %a508 + %t513 = load i64, ptr %a458 + call void @finch_str_from_int(ptr %a514, i64 %t513) + %t515 = load { ptr, i64, i64 }, ptr %a514 + store { ptr, i64, i64 } %t512, ptr %a517 + store { ptr, i64, i64 } %t515, ptr %a518 + call void @finch_str_concat(ptr %a516, ptr %a517, ptr %a518) + store { ptr, i64, i64 } %t512, ptr %a519 + call void @finch_str_drop(ptr %a519) + store { ptr, i64, i64 } %t515, ptr %a520 + call void @finch_str_drop(ptr %a520) + %t521 = load { ptr, i64, i64 }, ptr %a516 + store { ptr, i64, i64 } %t521, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.2864, i64 2, i64 0 }, ptr %a524 + call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) + store { ptr, i64, i64 } %t521, ptr %a525 + call void @finch_str_drop(ptr %a525) + %t526 = load { ptr, i64, i64 }, ptr %a522 + %t527 = load ptr, ptr %a1 + %t528 = icmp eq ptr %t527, null + br i1 %t528, label %panic4663, label %ok4664 +panic4663: + call void @finch_panic(ptr @.str.2865, i64 2085, ptr @.str.2866) + unreachable +ok4664: + %t529 = getelementptr inbounds %S.gen.Gen, ptr %t527, i32 0, i32 33 + %t530 = load i64, ptr %a49 + %t531 = load { ptr, i64, i64 }, ptr %t529 + %t532 = extractvalue { ptr, i64, i64 } %t531, 1 + %t533 = icmp uge i64 %t530, %t532 + br i1 %t533, label %range4665, label %inrange4666 +range4665: + call void @finch_panic_index(ptr @.str.2867, i64 2085, i64 %t530, i64 %t532) + unreachable +inrange4666: + %t534 = extractvalue { ptr, i64, i64 } %t531, 0 + %t535 = getelementptr inbounds { ptr, i64, i64 }, ptr %t534, i64 %t530 + %t536 = load { ptr, i64, i64 }, ptr %t535 + store { ptr, i64, i64 } %t526, ptr %t535 + store { ptr, i64, i64 } %t536, ptr %a537 + call void @finch_str_drop(ptr %a537) + call void @finch.drop.S_ast_Type(ptr %a400) + br label %endif4657 +else4656: + %t538 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t538, ptr %a539 + store { ptr, i64, i64 } { ptr @.str.2868, i64 3, i64 0 }, ptr %a540 + %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) + %t542 = icmp ne i32 %t541, 0 + br i1 %t542, label %then4667, label %else4668 +then4667: + %t543 = load ptr, ptr %a1 + %t544 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.2869, i64 3, i64 0 }) + %t545 = call i64 @finch.gen.diType(ptr %t543, %S.ast.Type %t544) + store %S.ast.Type %t544, ptr %a546 + call void @finch.drop.S_ast_Type(ptr %a546) + store i64 %t545, ptr %a547 + %t548 = load ptr, ptr %a1 + %t549 = call i64 @finch.gen.md(ptr %t548, { ptr, i64, i64 } { ptr @.str.2870, i64 66, i64 0 }) + store i64 %t549, ptr %a550 + %t551 = mul i64 7, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t552 = call ptr @finch_alloc(i64 %t551) + %t553 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 0 + store { ptr, i64, i64 } { ptr @.str.2871, i64 7, i64 0 }, ptr %t553 + %t554 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 1 + store { ptr, i64, i64 } { ptr @.str.2872, i64 3, i64 0 }, ptr %t554 + %t555 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 2 + store { ptr, i64, i64 } { ptr @.str.2873, i64 4, i64 0 }, ptr %t555 + %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 3 + store { ptr, i64, i64 } { ptr @.str.2874, i64 3, i64 0 }, ptr %t556 + %t557 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 4 + store { ptr, i64, i64 } { ptr @.str.2875, i64 5, i64 0 }, ptr %t557 + %t558 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 5 + store { ptr, i64, i64 } { ptr @.str.2876, i64 4, i64 0 }, ptr %t558 + %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t552, i64 6 + store { ptr, i64, i64 } { ptr @.str.2877, i64 4, i64 0 }, ptr %t559 + %t560 = insertvalue { ptr, i64, i64 } undef, ptr %t552, 0 + %t561 = insertvalue { ptr, i64, i64 } %t560, i64 7, 1 + %t562 = insertvalue { ptr, i64, i64 } %t561, i64 7, 2 + store { ptr, i64, i64 } %t562, ptr %a563 + store { ptr, i64, i64 } zeroinitializer, ptr %a564 + store i64 0, ptr %a565 + br label %for.cond4670 +for.cond4670: + %t566 = load i64, ptr %a565 + %t567 = icmp slt i64 %t566, 7 + br i1 %t567, label %for.body4671, label %for.end4673 +for.body4671: + %t568 = load i64, ptr %a547 + store i64 %t568, ptr %a569 + %t570 = load i64, ptr %a565 + %t571 = icmp eq i64 %t570, 0 + br label %logic.from4674 +logic.from4674: + br i1 %t571, label %logic.end4676, label %logic.rhs4675 +logic.rhs4675: + %t572 = load i64, ptr %a565 + %t573 = icmp eq i64 %t572, 4 + br label %logic.rend4677 +logic.rend4677: + br label %logic.end4676 +logic.end4676: + %t574 = phi i1 [ true, %logic.from4674 ], [ %t573, %logic.rend4677 ] + br i1 %t574, label %then4678, label %endif4680 +then4678: + %t575 = load i64, ptr %a550 + store i64 %t575, ptr %a569 + br label %endif4680 +endif4680: + %t576 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 + %t577 = load ptr, ptr %a1 + %t578 = load i64, ptr %a565 + %t579 = load { ptr, i64, i64 }, ptr %a563 + %t580 = extractvalue { ptr, i64, i64 } %t579, 1 + %t581 = icmp uge i64 %t578, %t580 + br i1 %t581, label %range4681, label %inrange4682 +range4681: + call void @finch_panic_index(ptr @.str.2879, i64 2096, i64 %t578, i64 %t580) + unreachable +inrange4682: + %t582 = extractvalue { ptr, i64, i64 } %t579, 0 + %t583 = getelementptr inbounds { ptr, i64, i64 }, ptr %t582, i64 %t578 + %t584 = load { ptr, i64, i64 }, ptr %t583 + %t585 = load i64, ptr %a49 + %t586 = load i64, ptr %a59 + %t587 = load i64, ptr %a569 + %t588 = load i64, ptr %a565 + %t589 = mul i64 64, %t588 + %t590 = call i64 @finch.gen.dbgMember(ptr %t577, { ptr, i64, i64 } %t584, i64 %t585, i64 %t586, i64 0, i64 %t587, i64 64, i64 %t589) + call void @finch_str_from_int(ptr %a591, i64 %t590) + %t592 = load { ptr, i64, i64 }, ptr %a591 + store { ptr, i64, i64 } { ptr @.str.2878, i64 1, i64 0 }, ptr %a594 + store { ptr, i64, i64 } %t592, ptr %a595 + call void @finch_str_concat(ptr %a593, ptr %a594, ptr %a595) + store { ptr, i64, i64 } %t592, ptr %a596 + call void @finch_str_drop(ptr %a596) + %t597 = load { ptr, i64, i64 }, ptr %a593 + %t598 = load i64, ptr %t576 + %t599 = add i64 %t598, 1 + call void @finch_arr_reserve(ptr %a564, i64 %t599, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t600 = load ptr, ptr %a564 + %t601 = getelementptr inbounds { ptr, i64, i64 }, ptr %t600, i64 %t598 + store { ptr, i64, i64 } %t597, ptr %t601 + store i64 %t599, ptr %t576 + br label %for.step4672 +for.step4672: + %t602 = load i64, ptr %a565 + %t603 = add i64 %t602, 1 + store i64 %t603, ptr %a565 + br label %for.cond4670 +for.end4673: + %t604 = load %S.ast.Type, ptr %a2 + %t605 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t604) + store { ptr, i64, i64 } { ptr @.str.2880, i64 52, i64 0 }, ptr %a607 + store { ptr, i64, i64 } %t605, ptr %a608 + call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) + store { ptr, i64, i64 } %t605, ptr %a609 + call void @finch_str_drop(ptr %a609) + %t610 = load { ptr, i64, i64 }, ptr %a606 + store { ptr, i64, i64 } %t610, ptr %a612 + store { ptr, i64, i64 } { ptr @.str.2881, i64 10, i64 0 }, ptr %a613 + call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) + store { ptr, i64, i64 } %t610, ptr %a614 + call void @finch_str_drop(ptr %a614) + %t615 = load { ptr, i64, i64 }, ptr %a611 + %t616 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a617, i64 %t616) + %t618 = load { ptr, i64, i64 }, ptr %a617 + store { ptr, i64, i64 } %t615, ptr %a620 + store { ptr, i64, i64 } %t618, ptr %a621 + call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) + store { ptr, i64, i64 } %t615, ptr %a622 + call void @finch_str_drop(ptr %a622) + store { ptr, i64, i64 } %t618, ptr %a623 + call void @finch_str_drop(ptr %a623) + %t624 = load { ptr, i64, i64 }, ptr %a619 + store { ptr, i64, i64 } %t624, ptr %a626 + store { ptr, i64, i64 } { ptr @.str.2882, i64 36, i64 0 }, ptr %a627 + call void @finch_str_concat(ptr %a625, ptr %a626, ptr %a627) + store { ptr, i64, i64 } %t624, ptr %a628 + call void @finch_str_drop(ptr %a628) + %t629 = load { ptr, i64, i64 }, ptr %a625 + %t630 = getelementptr inbounds { ptr, i64, i64 }, ptr %a564, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2883, i64 2, i64 0 }, ptr %a631 + call void @finch_str_join(ptr %a632, ptr %a564, ptr %a631) + %t633 = load { ptr, i64, i64 }, ptr %a632 + store { ptr, i64, i64 } %t629, ptr %a635 + store { ptr, i64, i64 } %t633, ptr %a636 + call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636) + store { ptr, i64, i64 } %t629, ptr %a637 + call void @finch_str_drop(ptr %a637) + store { ptr, i64, i64 } %t633, ptr %a638 + call void @finch_str_drop(ptr %a638) + %t639 = load { ptr, i64, i64 }, ptr %a634 + store { ptr, i64, i64 } %t639, ptr %a641 + store { ptr, i64, i64 } { ptr @.str.2884, i64 2, i64 0 }, ptr %a642 + call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) + store { ptr, i64, i64 } %t639, ptr %a643 + call void @finch_str_drop(ptr %a643) + %t644 = load { ptr, i64, i64 }, ptr %a640 + %t645 = load ptr, ptr %a1 + %t646 = icmp eq ptr %t645, null + br i1 %t646, label %panic4683, label %ok4684 +panic4683: + call void @finch_panic(ptr @.str.2885, i64 2098, ptr @.str.2886) + unreachable +ok4684: + %t647 = getelementptr inbounds %S.gen.Gen, ptr %t645, i32 0, i32 33 + %t648 = load i64, ptr %a49 + %t649 = load { ptr, i64, i64 }, ptr %t647 + %t650 = extractvalue { ptr, i64, i64 } %t649, 1 + %t651 = icmp uge i64 %t648, %t650 + br i1 %t651, label %range4685, label %inrange4686 +range4685: + call void @finch_panic_index(ptr @.str.2887, i64 2098, i64 %t648, i64 %t650) + unreachable +inrange4686: + %t652 = extractvalue { ptr, i64, i64 } %t649, 0 + %t653 = getelementptr inbounds { ptr, i64, i64 }, ptr %t652, i64 %t648 + %t654 = load { ptr, i64, i64 }, ptr %t653 + store { ptr, i64, i64 } %t644, ptr %t653 + store { ptr, i64, i64 } %t654, ptr %a655 + call void @finch_str_drop(ptr %a655) + call void @finch.drop.arr_str(ptr %a564) + call void @finch.drop.arr_str(ptr %a563) + br label %endif4669 +else4668: + %t656 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t656, ptr %a657 + store { ptr, i64, i64 } { ptr @.str.2888, i64 6, i64 0 }, ptr %a658 + %t659 = call i32 @finch_str_eq(ptr %a657, ptr %a658) + %t660 = icmp ne i32 %t659, 0 + br i1 %t660, label %then4687, label %else4688 +then4687: + %t661 = load ptr, ptr %a1 + %t662 = icmp eq ptr %t661, null + br i1 %t662, label %panic4690, label %ok4691 +panic4690: + call void @finch_panic(ptr @.str.2889, i64 2100, ptr @.str.2890) + unreachable +ok4691: + %t663 = getelementptr inbounds %S.gen.Gen, ptr %t661, i32 0, i32 16 + %t664 = load ptr, ptr %a1 + %t665 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t666 = load { ptr, i64, i64 }, ptr %t665 + %t667 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t668 = load { ptr, i64, i64 }, ptr %t667 + %t669 = call i64 @finch.gen.findStruct(ptr %t664, { ptr, i64, i64 } %t666, { ptr, i64, i64 } %t668) + %t670 = load { ptr, i64, i64 }, ptr %t663 + %t671 = extractvalue { ptr, i64, i64 } %t670, 1 + %t672 = icmp uge i64 %t669, %t671 + br i1 %t672, label %range4692, label %inrange4693 +range4692: + call void @finch_panic_index(ptr @.str.2891, i64 2100, i64 %t669, i64 %t671) + unreachable +inrange4693: + %t673 = extractvalue { ptr, i64, i64 } %t670, 0 + %t674 = getelementptr inbounds %S.gen.StructDef, ptr %t673, i64 %t669 + %t675 = load %S.gen.StructDef, ptr %t674 + store %S.gen.StructDef %t675, ptr %a676 + call void @finch.copy.S_gen_StructDef(ptr %a677, ptr %a676) + %t678 = load %S.gen.StructDef, ptr %a677 + store %S.gen.StructDef %t678, ptr %a679 + %t680 = load ptr, ptr %a1 + %t681 = load %S.gen.StructDef, ptr %a679 + %t682 = call { ptr, i64, i64 } @finch.gen.fieldOffsets(ptr %t680, %S.gen.StructDef %t681) + store { ptr, i64, i64 } %t682, ptr %a683 + %t684 = load ptr, ptr %a1 + %t685 = load %S.ast.Type, ptr %a2 + %t686 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t684, %S.ast.Type %t685) + store %S.gen.SizeAlign %t686, ptr %a687 + store { ptr, i64, i64 } zeroinitializer, ptr %a688 + %t689 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 + %t690 = getelementptr inbounds { ptr, i64, i64 }, ptr %t689, i32 0, i32 1 + %t691 = load i64, ptr %t690 + store i64 0, ptr %a692 + br label %for.cond4694 +for.cond4694: + %t693 = load i64, ptr %a692 + %t694 = icmp slt i64 %t693, %t691 + br i1 %t694, label %for.body4695, label %for.end4697 +for.body4695: + %t695 = load ptr, ptr %a1 + %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 + %t697 = load i64, ptr %a692 + %t698 = load { ptr, i64, i64 }, ptr %t696 + %t699 = extractvalue { ptr, i64, i64 } %t698, 1 + %t700 = icmp uge i64 %t697, %t699 + br i1 %t700, label %range4698, label %inrange4699 +range4698: + call void @finch_panic_index(ptr @.str.2892, i64 2105, i64 %t697, i64 %t699) + unreachable +inrange4699: + %t701 = extractvalue { ptr, i64, i64 } %t698, 0 + %t702 = getelementptr inbounds %S.ast.Type, ptr %t701, i64 %t697 + %t703 = load %S.ast.Type, ptr %t702 + %t704 = call %S.gen.SizeAlign @finch.gen.sizeAlign(ptr %t695, %S.ast.Type %t703) + store %S.gen.SizeAlign %t704, ptr %a705 + %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %a688, i32 0, i32 1 + %t707 = load ptr, ptr %a1 + %t708 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 11 + %t709 = load i64, ptr %a692 + %t710 = load { ptr, i64, i64 }, ptr %t708 + %t711 = extractvalue { ptr, i64, i64 } %t710, 1 + %t712 = icmp uge i64 %t709, %t711 + br i1 %t712, label %range4700, label %inrange4701 +range4700: + call void @finch_panic_index(ptr @.str.2894, i64 2106, i64 %t709, i64 %t711) + unreachable +inrange4701: + %t713 = extractvalue { ptr, i64, i64 } %t710, 0 + %t714 = getelementptr inbounds { ptr, i64, i64 }, ptr %t713, i64 %t709 + %t715 = load { ptr, i64, i64 }, ptr %t714 + %t716 = load i64, ptr %a49 + %t717 = load i64, ptr %a59 + %t718 = load ptr, ptr %a1 + %t719 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 12 + %t720 = load i64, ptr %a692 + %t721 = load { ptr, i64, i64 }, ptr %t719 + %t722 = extractvalue { ptr, i64, i64 } %t721, 1 + %t723 = icmp uge i64 %t720, %t722 + br i1 %t723, label %range4702, label %inrange4703 +range4702: + call void @finch_panic_index(ptr @.str.2895, i64 2106, i64 %t720, i64 %t722) + unreachable +inrange4703: + %t724 = extractvalue { ptr, i64, i64 } %t721, 0 + %t725 = getelementptr inbounds %S.ast.Type, ptr %t724, i64 %t720 + %t726 = load %S.ast.Type, ptr %t725 + %t727 = call i64 @finch.gen.diType(ptr %t718, %S.ast.Type %t726) + %t728 = getelementptr inbounds %S.gen.SizeAlign, ptr %a705, i32 0, i32 0 + %t729 = load i64, ptr %t728 + %t730 = mul i64 %t729, 8 + %t731 = load i64, ptr %a692 + %t732 = load { ptr, i64, i64 }, ptr %a683 + %t733 = extractvalue { ptr, i64, i64 } %t732, 1 + %t734 = icmp uge i64 %t731, %t733 + br i1 %t734, label %range4704, label %inrange4705 +range4704: + call void @finch_panic_index(ptr @.str.2896, i64 2106, i64 %t731, i64 %t733) + unreachable +inrange4705: + %t735 = extractvalue { ptr, i64, i64 } %t732, 0 + %t736 = getelementptr inbounds i64, ptr %t735, i64 %t731 + %t737 = load i64, ptr %t736 + %t738 = mul i64 %t737, 8 + %t739 = call i64 @finch.gen.dbgMember(ptr %t707, { ptr, i64, i64 } %t715, i64 %t716, i64 %t717, i64 0, i64 %t727, i64 %t730, i64 %t738) + call void @finch_str_from_int(ptr %a740, i64 %t739) + %t741 = load { ptr, i64, i64 }, ptr %a740 + store { ptr, i64, i64 } { ptr @.str.2893, i64 1, i64 0 }, ptr %a743 + store { ptr, i64, i64 } %t741, ptr %a744 + call void @finch_str_concat(ptr %a742, ptr %a743, ptr %a744) + store { ptr, i64, i64 } %t741, ptr %a745 + call void @finch_str_drop(ptr %a745) + %t746 = load { ptr, i64, i64 }, ptr %a742 + %t747 = load i64, ptr %t706 + %t748 = add i64 %t747, 1 + call void @finch_arr_reserve(ptr %a688, i64 %t748, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t749 = load ptr, ptr %a688 + %t750 = getelementptr inbounds { ptr, i64, i64 }, ptr %t749, i64 %t747 + store { ptr, i64, i64 } %t746, ptr %t750 + store i64 %t748, ptr %t706 + br label %for.step4696 +for.step4696: + %t751 = load i64, ptr %a692 + %t752 = add i64 %t751, 1 + store i64 %t752, ptr %a692 + br label %for.cond4694 +for.end4697: + %t753 = getelementptr inbounds %S.gen.StructDef, ptr %a679, i32 0, i32 1 + %t754 = load { ptr, i64, i64 }, ptr %t753 + store { ptr, i64, i64 } { ptr @.str.2897, i64 52, i64 0 }, ptr %a756 + store { ptr, i64, i64 } %t754, ptr %a757 + call void @finch_str_concat(ptr %a755, ptr %a756, ptr %a757) + %t758 = load { ptr, i64, i64 }, ptr %a755 + store { ptr, i64, i64 } %t758, ptr %a760 + store { ptr, i64, i64 } { ptr @.str.2898, i64 10, i64 0 }, ptr %a761 + call void @finch_str_concat(ptr %a759, ptr %a760, ptr %a761) + store { ptr, i64, i64 } %t758, ptr %a762 + call void @finch_str_drop(ptr %a762) + %t763 = load { ptr, i64, i64 }, ptr %a759 + %t764 = load i64, ptr %a59 + call void @finch_str_from_int(ptr %a765, i64 %t764) + %t766 = load { ptr, i64, i64 }, ptr %a765 + store { ptr, i64, i64 } %t763, ptr %a768 + store { ptr, i64, i64 } %t766, ptr %a769 + call void @finch_str_concat(ptr %a767, ptr %a768, ptr %a769) + store { ptr, i64, i64 } %t763, ptr %a770 + call void @finch_str_drop(ptr %a770) + store { ptr, i64, i64 } %t766, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t772, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.2899, i64 8, i64 0 }, ptr %a775 + call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) + store { ptr, i64, i64 } %t772, ptr %a776 + call void @finch_str_drop(ptr %a776) + %t777 = load { ptr, i64, i64 }, ptr %a773 + %t778 = getelementptr inbounds %S.gen.SizeAlign, ptr %a687, i32 0, i32 0 + %t779 = load i64, ptr %t778 + %t780 = mul i64 %t779, 8 + call void @finch_str_from_int(ptr %a781, i64 %t780) + %t782 = load { ptr, i64, i64 }, ptr %a781 + store { ptr, i64, i64 } %t777, ptr %a784 + store { ptr, i64, i64 } %t782, ptr %a785 + call void @finch_str_concat(ptr %a783, ptr %a784, ptr %a785) + store { ptr, i64, i64 } %t777, ptr %a786 + call void @finch_str_drop(ptr %a786) + store { ptr, i64, i64 } %t782, ptr %a787 + call void @finch_str_drop(ptr %a787) + %t788 = load { ptr, i64, i64 }, ptr %a783 + store { ptr, i64, i64 } %t788, ptr %a790 + store { ptr, i64, i64 } { ptr @.str.2900, i64 24, i64 0 }, ptr %a791 + call void @finch_str_concat(ptr %a789, ptr %a790, ptr %a791) + store { ptr, i64, i64 } %t788, ptr %a792 + call void @finch_str_drop(ptr %a792) + %t793 = load { ptr, i64, i64 }, ptr %a789 + %t794 = getelementptr inbounds { ptr, i64, i64 }, ptr %a688, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2901, i64 2, i64 0 }, ptr %a795 + call void @finch_str_join(ptr %a796, ptr %a688, ptr %a795) + %t797 = load { ptr, i64, i64 }, ptr %a796 + store { ptr, i64, i64 } %t793, ptr %a799 + store { ptr, i64, i64 } %t797, ptr %a800 + call void @finch_str_concat(ptr %a798, ptr %a799, ptr %a800) + store { ptr, i64, i64 } %t793, ptr %a801 + call void @finch_str_drop(ptr %a801) + store { ptr, i64, i64 } %t797, ptr %a802 + call void @finch_str_drop(ptr %a802) + %t803 = load { ptr, i64, i64 }, ptr %a798 + store { ptr, i64, i64 } %t803, ptr %a805 + store { ptr, i64, i64 } { ptr @.str.2902, i64 2, i64 0 }, ptr %a806 + call void @finch_str_concat(ptr %a804, ptr %a805, ptr %a806) + store { ptr, i64, i64 } %t803, ptr %a807 + call void @finch_str_drop(ptr %a807) + %t808 = load { ptr, i64, i64 }, ptr %a804 + %t809 = load ptr, ptr %a1 + %t810 = icmp eq ptr %t809, null + br i1 %t810, label %panic4706, label %ok4707 +panic4706: + call void @finch_panic(ptr @.str.2903, i64 2108, ptr @.str.2904) + unreachable +ok4707: + %t811 = getelementptr inbounds %S.gen.Gen, ptr %t809, i32 0, i32 33 + %t812 = load i64, ptr %a49 + %t813 = load { ptr, i64, i64 }, ptr %t811 + %t814 = extractvalue { ptr, i64, i64 } %t813, 1 + %t815 = icmp uge i64 %t812, %t814 + br i1 %t815, label %range4708, label %inrange4709 +range4708: + call void @finch_panic_index(ptr @.str.2905, i64 2108, i64 %t812, i64 %t814) + unreachable +inrange4709: + %t816 = extractvalue { ptr, i64, i64 } %t813, 0 + %t817 = getelementptr inbounds { ptr, i64, i64 }, ptr %t816, i64 %t812 + %t818 = load { ptr, i64, i64 }, ptr %t817 + store { ptr, i64, i64 } %t808, ptr %t817 + store { ptr, i64, i64 } %t818, ptr %a819 + call void @finch_str_drop(ptr %a819) + call void @finch.drop.arr_str(ptr %a688) + call void @finch.drop.arr_int(ptr %a683) + call void @finch.drop.S_gen_StructDef(ptr %a679) + br label %endif4689 +else4688: + %t820 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.2906, i64 20, i64 0 }, ptr %a822 + store { ptr, i64, i64 } %t820, ptr %a823 + call void @finch_str_concat(ptr %a821, ptr %a822, ptr %a823) + %t824 = load { ptr, i64, i64 }, ptr %a821 + store { ptr, i64, i64 } %t824, ptr %a826 + store { ptr, i64, i64 } { ptr @.str.2907, i64 39, i64 0 }, ptr %a827 + call void @finch_str_concat(ptr %a825, ptr %a826, ptr %a827) + store { ptr, i64, i64 } %t824, ptr %a828 + call void @finch_str_drop(ptr %a828) + %t829 = load { ptr, i64, i64 }, ptr %a825 + %t830 = load ptr, ptr %a1 + %t831 = icmp eq ptr %t830, null + br i1 %t831, label %panic4710, label %ok4711 +panic4710: + call void @finch_panic(ptr @.str.2908, i64 2110, ptr @.str.2909) + unreachable +ok4711: + %t832 = getelementptr inbounds %S.gen.Gen, ptr %t830, i32 0, i32 33 + %t833 = load i64, ptr %a49 + %t834 = load { ptr, i64, i64 }, ptr %t832 + %t835 = extractvalue { ptr, i64, i64 } %t834, 1 + %t836 = icmp uge i64 %t833, %t835 + br i1 %t836, label %range4712, label %inrange4713 +range4712: + call void @finch_panic_index(ptr @.str.2910, i64 2110, i64 %t833, i64 %t835) + unreachable +inrange4713: + %t837 = extractvalue { ptr, i64, i64 } %t834, 0 + %t838 = getelementptr inbounds { ptr, i64, i64 }, ptr %t837, i64 %t833 + %t839 = load { ptr, i64, i64 }, ptr %t838 + store { ptr, i64, i64 } %t829, ptr %t838 + store { ptr, i64, i64 } %t839, ptr %a840 + call void @finch_str_drop(ptr %a840) + br label %endif4689 +endif4689: + br label %endif4669 +endif4669: + br label %endif4657 +endif4657: + br label %endif4642 +endif4642: + br label %endif4630 +endif4630: + %t841 = load i64, ptr %a49 + call void @finch_str_drop(ptr %a27) + call void @finch_str_drop(ptr %a8) + ret i64 %t841 +endif4611: + br label %endif4605 +endif4605: + br label %endif4602 +endif4602: + br label %endif4599 +endif4599: + br label %endif4596 +endif4596: + br label %endif4593 +endif4593: + br label %endif4590 +endif4590: + %t842 = load i64, ptr %a49 + %t843 = load ptr, ptr %a1 + %t844 = icmp eq ptr %t843, null + br i1 %t844, label %panic4714, label %ok4715 +panic4714: + call void @finch_panic(ptr @.str.2911, i64 2114, ptr @.str.2912) + unreachable +ok4715: + %t845 = getelementptr inbounds %S.gen.Gen, ptr %t843, i32 0, i32 34 + %t846 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t846, ptr %a847 + store i32 0, ptr %a848 + %t849 = call i64 @finch_map_slot(ptr %t845, ptr %a847, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a848) + %t850 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t845, i32 0, i32 0 + %t851 = load ptr, ptr %t850 + %t852 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t851, i64 %t849 + %t853 = load i32, ptr %a848 + %t854 = icmp ne i32 %t853, 0 + br i1 %t854, label %map.new4716, label %map.have4717 +map.new4716: + %t855 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 1 + call void @finch_str_copy(ptr %t855, ptr %a847) + %t856 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 + store i64 0, ptr %t856 + br label %map.have4717 +map.have4717: + %t857 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t852, i32 0, i32 2 + store i64 %t842, ptr %t857 + %t858 = load i64, ptr %a49 + call void @finch_str_drop(ptr %a27) + call void @finch_str_drop(ptr %a8) + ret i64 %t858 +} + +define internal i64 @finch.gen.dbgLocation(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca i64, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca i32, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic4718, label %ok4719 +panic4718: + call void @finch_panic(ptr @.str.2914, i64 2119, ptr @.str.2915) + unreachable +ok4719: + %t4 = getelementptr inbounds %S.gen.Gen, ptr %t2, i32 0, i32 37 + %t5 = load i64, ptr %t4 + call void @finch_str_from_int(ptr %a6, i64 %t5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.2913, i64 2, i64 0 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.2916, i64 1, i64 0 }, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic4720, label %ok4721 +panic4720: + call void @finch_panic(ptr @.str.2917, i64 2119, ptr @.str.2918) + unreachable +ok4721: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 38 + %t21 = load i64, ptr %t20 + call void @finch_str_from_int(ptr %a22, i64 %t21) + %t23 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t17, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t17, ptr %a27 + call void @finch_str_drop(ptr %a27) + store { ptr, i64, i64 } %t23, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.2919, i64 1, i64 0 }, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic4722, label %ok4723 +panic4722: + call void @finch_panic(ptr @.str.2920, i64 2119, ptr @.str.2921) + unreachable +ok4723: + %t37 = getelementptr inbounds %S.gen.Gen, ptr %t35, i32 0, i32 36 + %t38 = load i64, ptr %t37 + call void @finch_str_from_int(ptr %a39, i64 %t38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t34, ptr %a42 + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t34, ptr %a44 + call void @finch_str_drop(ptr %a44) + store { ptr, i64, i64 } %t40, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t46, ptr %a47 + %t48 = load ptr, ptr %a1 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic4724, label %ok4725 +panic4724: + call void @finch_panic(ptr @.str.2922, i64 2120, ptr @.str.2923) + unreachable +ok4725: + %t50 = getelementptr inbounds %S.gen.Gen, ptr %t48, i32 0, i32 34 + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = call i64 @finch_map_find(ptr %t50, ptr %a52, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t54 = icmp sge i64 %t53, 0 + br i1 %t54, label %then4726, label %endif4728 +then4726: + %t55 = load ptr, ptr %a1 + %t56 = icmp eq ptr %t55, null + br i1 %t56, label %panic4729, label %ok4730 +panic4729: + call void @finch_panic(ptr @.str.2924, i64 2121, ptr @.str.2925) + unreachable +ok4730: + %t57 = getelementptr inbounds %S.gen.Gen, ptr %t55, i32 0, i32 34 + %t58 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t58, ptr %a59 + %t60 = call i64 @finch_map_find(ptr %t57, ptr %a59, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t61 = icmp slt i64 %t60, 0 + br i1 %t61, label %map.missing4731, label %map.found4732 +map.missing4731: + store { ptr, i64, i64 } zeroinitializer, ptr %a62 + store { ptr, i64, i64 } %t58, ptr %a63 + call void @finch_buf_str(ptr %a62, ptr %a63, i32 1) + call void @finch_map_missing(ptr @.str.2926, i64 2121, ptr %a62) + unreachable +map.found4732: + %t64 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t57, i32 0, i32 0 + %t65 = load ptr, ptr %t64 + %t66 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t65, i64 %t60 + %t67 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t66, i32 0, i32 2 + %t68 = load i64, ptr %t67 + call void @finch_str_drop(ptr %a47) + ret i64 %t68 +endif4728: + %t69 = load ptr, ptr %a1 + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic4733, label %ok4734 +panic4733: + call void @finch_panic(ptr @.str.2928, i64 2123, ptr @.str.2929) + unreachable +ok4734: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 37 + %t73 = load i64, ptr %t72 + call void @finch_str_from_int(ptr %a74, i64 %t73) + %t75 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.2927, i64 18, i64 0 }, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.2930, i64 10, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic4735, label %ok4736 +panic4735: + call void @finch_panic(ptr @.str.2931, i64 2123, ptr @.str.2932) + unreachable +ok4736: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 38 + %t89 = load i64, ptr %t88 + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t85, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t85, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.2933, i64 10, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = load ptr, ptr %a1 + %t104 = icmp eq ptr %t103, null + br i1 %t104, label %panic4737, label %ok4738 +panic4737: + call void @finch_panic(ptr @.str.2934, i64 2123, ptr @.str.2935) + unreachable +ok4738: + %t105 = getelementptr inbounds %S.gen.Gen, ptr %t103, i32 0, i32 36 + %t106 = load i64, ptr %t105 + call void @finch_str_from_int(ptr %a107, i64 %t106) + %t108 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t102, ptr %a110 + store { ptr, i64, i64 } %t108, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t102, ptr %a112 + call void @finch_str_drop(ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.2936, i64 1, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = call i64 @finch.gen.md(ptr %t69, { ptr, i64, i64 } %t119) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + store i64 %t120, ptr %a122 + %t123 = load i64, ptr %a122 + %t124 = load ptr, ptr %a1 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic4739, label %ok4740 +panic4739: + call void @finch_panic(ptr @.str.2937, i64 2124, ptr @.str.2938) + unreachable +ok4740: + %t126 = getelementptr inbounds %S.gen.Gen, ptr %t124, i32 0, i32 34 + %t127 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t127, ptr %a128 + store i32 0, ptr %a129 + %t130 = call i64 @finch_map_slot(ptr %t126, ptr %a128, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i64 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a129) + %t131 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t126, i32 0, i32 0 + %t132 = load ptr, ptr %t131 + %t133 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t132, i64 %t130 + %t134 = load i32, ptr %a129 + %t135 = icmp ne i32 %t134, 0 + br i1 %t135, label %map.new4741, label %map.have4742 +map.new4741: + %t136 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 1 + call void @finch_str_copy(ptr %t136, ptr %a128) + %t137 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 + store i64 0, ptr %t137 + br label %map.have4742 +map.have4742: + %t138 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t133, i32 0, i32 2 + store i64 %t123, ptr %t138 + %t139 = load i64, ptr %a122 + call void @finch_str_drop(ptr %a47) + ret i64 %t139 +} + +define internal i64 @finch.gen.dbgSubprogram(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a7 = alloca %S.gen.FnSig, align 16 + %a8 = alloca %S.gen.FnSig, align 16 + %a10 = alloca %S.gen.FnSig, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca i64, align 16 + %a40 = alloca %S.ast.Type, align 16 + %a63 = alloca i64, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca i64, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4743, label %ok4744 +panic4743: + call void @finch_panic(ptr @.str.2939, i64 2129, ptr @.str.2940) + unreachable +ok4744: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 + %t6 = load %S.gen.FnSig, ptr %t5 + store %S.gen.FnSig %t6, ptr %a7 + call void @finch.copy.S_gen_FnSig(ptr %a8, ptr %a7) + %t9 = load %S.gen.FnSig, ptr %a8 + store %S.gen.FnSig %t9, ptr %a10 + store { ptr, i64, i64 } zeroinitializer, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t13 = load ptr, ptr %a1 + %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 12 + %t15 = load %S.ast.Type, ptr %t14 + %t16 = call i64 @finch.gen.diType(ptr %t13, %S.ast.Type %t15) + %t17 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t16) + %t18 = load i64, ptr %t12 + %t19 = add i64 %t18, 1 + call void @finch_arr_reserve(ptr %a11, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t20 = load ptr, ptr %a11 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + store { ptr, i64, i64 } %t17, ptr %t21 + store i64 %t19, ptr %t12 + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 2 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = icmp sgt i64 %t24, 0 + br i1 %t25, label %then4745, label %endif4747 +then4745: + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = add i64 %t27, 1 + call void @finch_arr_reserve(ptr %a11, i64 %t28, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t29 = load ptr, ptr %a11 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 %t27 + store { ptr, i64, i64 } { ptr @.str.2941, i64 4, i64 0 }, ptr %t30 + store i64 %t28, ptr %t26 + br label %endif4747 +endif4747: + %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 13 + store i64 0, ptr %a32 + br label %each.cond4748 +each.cond4748: + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i32 0, i32 1 + %t34 = load i64, ptr %t33 + %t35 = load i64, ptr %a32 + %t36 = icmp slt i64 %t35, %t34 + br i1 %t36, label %each.body4749, label %each.end4751 +each.body4749: + %t37 = load ptr, ptr %t31 + %t38 = getelementptr inbounds %S.ast.Type, ptr %t37, i64 %t35 + %t39 = load %S.ast.Type, ptr %t38 + store %S.ast.Type %t39, ptr %a40 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t42 = load ptr, ptr %a1 + %t43 = load %S.ast.Type, ptr %a40 + %t44 = call i64 @finch.gen.diType(ptr %t42, %S.ast.Type %t43) + %t45 = call { ptr, i64, i64 } @finch.gen.mdRef(i64 %t44) + %t46 = load i64, ptr %t41 + %t47 = add i64 %t46, 1 + call void @finch_arr_reserve(ptr %a11, i64 %t47, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t48 = load ptr, ptr %a11 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t46 + store { ptr, i64, i64 } %t45, ptr %t49 + store i64 %t47, ptr %t41 + br label %each.step4750 +each.step4750: + %t50 = load i64, ptr %a32 + %t51 = add i64 %t50, 1 + store i64 %t51, ptr %a32 + br label %each.cond4748 +each.end4751: + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic4752, label %ok4753 +panic4752: + call void @finch_panic(ptr @.str.2942, i64 2138, ptr @.str.2943) + unreachable +ok4753: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 35 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t56 = load i64, ptr %t55 + %t57 = load { ptr, i64, i64 }, ptr %t54 + %t58 = extractvalue { ptr, i64, i64 } %t57, 1 + %t59 = icmp uge i64 %t56, %t58 + br i1 %t59, label %range4754, label %inrange4755 +range4754: + call void @finch_panic_index(ptr @.str.2944, i64 2138, i64 %t56, i64 %t58) + unreachable +inrange4755: + %t60 = extractvalue { ptr, i64, i64 } %t57, 0 + %t61 = getelementptr inbounds i64, ptr %t60, i64 %t56 + %t62 = load i64, ptr %t61 + store i64 %t62, ptr %a63 + %t64 = load ptr, ptr %a1 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2946, i64 2, i64 0 }, ptr %a66 + call void @finch_str_join(ptr %a67, ptr %a11, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.2945, i64 27, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.2947, i64 2, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = call i64 @finch.gen.md(ptr %t64, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a80 + call void @finch_str_drop(ptr %a80) + store i64 %t79, ptr %a81 + %t82 = load ptr, ptr %a1 + %t83 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 1 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } { ptr @.str.2948, i64 30, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.2949, i64 17, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + %t94 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 + %t95 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t95, ptr %a96 + %t98 = getelementptr inbounds %S.gen.FnSig, ptr %a10, i32 0, i32 11 + %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t98, i32 0, i32 1 + %t100 = load i64, ptr %t99 + call void @finch_str_sub(ptr %a97, ptr %a96, i64 1, i64 %t100, ptr @.str.2950, i64 2140) + %t101 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t93, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t93, ptr %a105 + call void @finch_str_drop(ptr %a105) + store { ptr, i64, i64 } %t101, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.2951, i64 11, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a108 + %t113 = load i64, ptr %a63 + call void @finch_str_from_int(ptr %a114, i64 %t113) + %t115 = load { ptr, i64, i64 }, ptr %a114 + store { ptr, i64, i64 } %t112, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t112, ptr %a119 + call void @finch_str_drop(ptr %a119) + store { ptr, i64, i64 } %t115, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.2952, i64 9, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = load i64, ptr %a63 + call void @finch_str_from_int(ptr %a128, i64 %t127) + %t129 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t126, ptr %a131 + store { ptr, i64, i64 } %t129, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + store { ptr, i64, i64 } %t126, ptr %a133 + call void @finch_str_drop(ptr %a133) + store { ptr, i64, i64 } %t129, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t135, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.2953, i64 8, i64 0 }, ptr %a138 + call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) + store { ptr, i64, i64 } %t135, ptr %a139 + call void @finch_str_drop(ptr %a139) + %t140 = load { ptr, i64, i64 }, ptr %a136 + %t141 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t142 = load i64, ptr %t141 + call void @finch_str_from_int(ptr %a143, i64 %t142) + %t144 = load { ptr, i64, i64 }, ptr %a143 + store { ptr, i64, i64 } %t140, ptr %a146 + store { ptr, i64, i64 } %t144, ptr %a147 + call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) + store { ptr, i64, i64 } %t140, ptr %a148 + call void @finch_str_drop(ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.2954, i64 9, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load i64, ptr %a81 + call void @finch_str_from_int(ptr %a157, i64 %t156) + %t158 = load { ptr, i64, i64 }, ptr %a157 + store { ptr, i64, i64 } %t155, ptr %a160 + store { ptr, i64, i64 } %t158, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t155, ptr %a162 + call void @finch_str_drop(ptr %a162) + store { ptr, i64, i64 } %t158, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a159 + store { ptr, i64, i64 } %t164, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.2955, i64 13, i64 0 }, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t164, ptr %a168 + call void @finch_str_drop(ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a165 + %t170 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t171 = load i64, ptr %t170 + call void @finch_str_from_int(ptr %a172, i64 %t171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + store { ptr, i64, i64 } %t169, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t169, ptr %a177 + call void @finch_str_drop(ptr %a177) + store { ptr, i64, i64 } %t173, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.2956, i64 87, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + store { ptr, i64, i64 } %t179, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a180 + %t185 = call i64 @finch.gen.md(ptr %t82, { ptr, i64, i64 } %t184) + store { ptr, i64, i64 } %t184, ptr %a186 + call void @finch_str_drop(ptr %a186) + call void @finch.drop.arr_str(ptr %a11) + call void @finch.drop.S_gen_FnSig(ptr %a10) + ret i64 %t185 +} + +define internal void @finch.gen.dbgVariable(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca i64, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic4756, label %ok4757 +panic4756: + call void @finch_panic(ptr @.str.2957, i64 2144, ptr @.str.2958) + unreachable +ok4757: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 30 + %t9 = load i1, ptr %t8 + %t10 = xor i1 %t9, true + br label %logic.from4758 +logic.from4758: + br i1 %t10, label %logic.end4760, label %logic.rhs4759 +logic.rhs4759: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic4761, label %ok4762 +panic4761: + call void @finch_panic(ptr @.str.2959, i64 2144, ptr @.str.2960) + unreachable +ok4762: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 36 + %t14 = load i64, ptr %t13 + %t15 = icmp slt i64 %t14, 0 + br label %logic.rend4763 +logic.rend4763: + br label %logic.end4760 +logic.end4760: + %t16 = phi i1 [ true, %logic.from4758 ], [ %t15, %logic.rend4763 ] + br i1 %t16, label %then4764, label %endif4766 +then4764: + ret void +endif4766: + %t17 = load ptr, ptr %a1 + %t18 = load %S.ast.Type, ptr %a4 + %t19 = call i64 @finch.gen.diType(ptr %t17, %S.ast.Type %t18) + store i64 %t19, ptr %a20 + %t21 = load i64, ptr %a20 + %t22 = icmp slt i64 %t21, 0 + br i1 %t22, label %then4767, label %endif4769 +then4767: + ret void +endif4769: + store { ptr, i64, i64 } { ptr @.str.2961, i64 0, i64 0 }, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic4770, label %ok4771 +panic4770: + call void @finch_panic(ptr @.str.2962, i64 2152, ptr @.str.2963) + unreachable +ok4771: + %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 39 + %t27 = load i64, ptr %t26 + %t28 = icmp sgt i64 %t27, 0 + br i1 %t28, label %then4772, label %endif4774 +then4772: + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic4775, label %ok4776 +panic4775: + call void @finch_panic(ptr @.str.2965, i64 2153, ptr @.str.2966) + unreachable +ok4776: + %t31 = getelementptr inbounds %S.gen.Gen, ptr %t29, i32 0, i32 39 + %t32 = load i64, ptr %t31 + call void @finch_str_from_int(ptr %a33, i64 %t32) + %t34 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.2964, i64 7, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + %t40 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t39, ptr %a23 + store { ptr, i64, i64 } %t40, ptr %a41 + call void @finch_str_drop(ptr %a41) + br label %endif4774 +endif4774: + %t42 = load ptr, ptr %a1 + %t43 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.2967, i64 24, i64 0 }, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.2968, i64 11, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = load ptr, ptr %a1 + %t54 = icmp eq ptr %t53, null + br i1 %t54, label %panic4777, label %ok4778 +panic4777: + call void @finch_panic(ptr @.str.2969, i64 2155, ptr @.str.2970) + unreachable +ok4778: + %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 36 + %t56 = load i64, ptr %t55 + call void @finch_str_from_int(ptr %a57, i64 %t56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t52, ptr %a60 + store { ptr, i64, i64 } %t58, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t52, ptr %a62 + call void @finch_str_drop(ptr %a62) + store { ptr, i64, i64 } %t58, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t64, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.2971, i64 9, i64 0 }, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic4779, label %ok4780 +panic4779: + call void @finch_panic(ptr @.str.2972, i64 2155, ptr @.str.2973) + unreachable +ok4780: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 35 + %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t74 = load i64, ptr %t73 + %t75 = load { ptr, i64, i64 }, ptr %t72 + %t76 = extractvalue { ptr, i64, i64 } %t75, 1 + %t77 = icmp uge i64 %t74, %t76 + br i1 %t77, label %range4781, label %inrange4782 +range4781: + call void @finch_panic_index(ptr @.str.2974, i64 2155, i64 %t74, i64 %t76) + unreachable +inrange4782: + %t78 = extractvalue { ptr, i64, i64 } %t75, 0 + %t79 = getelementptr inbounds i64, ptr %t78, i64 %t74 + %t80 = load i64, ptr %t79 + call void @finch_str_from_int(ptr %a81, i64 %t80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t69, ptr %a84 + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t69, ptr %a86 + call void @finch_str_drop(ptr %a86) + store { ptr, i64, i64 } %t82, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.2975, i64 8, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + %t94 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t95 = load i64, ptr %t94 + call void @finch_str_from_int(ptr %a96, i64 %t95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t93, ptr %a99 + store { ptr, i64, i64 } %t97, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t93, ptr %a101 + call void @finch_str_drop(ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.2976, i64 9, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load i64, ptr %a20 + call void @finch_str_from_int(ptr %a110, i64 %t109) + %t111 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t108, ptr %a113 + store { ptr, i64, i64 } %t111, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t108, ptr %a115 + call void @finch_str_drop(ptr %a115) + store { ptr, i64, i64 } %t111, ptr %a116 + call void @finch_str_drop(ptr %a116) + %t117 = load { ptr, i64, i64 }, ptr %a112 + %t118 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t117, ptr %a120 + store { ptr, i64, i64 } %t118, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t117, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.2977, i64 1, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = call i64 @finch.gen.md(ptr %t42, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t128, ptr %a130 + call void @finch_str_drop(ptr %a130) + store i64 %t129, ptr %a131 + %t132 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t133 = load i64, ptr %t132 + %t134 = load ptr, ptr %a1 + %t135 = icmp eq ptr %t134, null + br i1 %t135, label %panic4783, label %ok4784 +panic4783: + call void @finch_panic(ptr @.str.2978, i64 2156, ptr @.str.2979) + unreachable +ok4784: + %t136 = getelementptr inbounds %S.gen.Gen, ptr %t134, i32 0, i32 37 + store i64 %t133, ptr %t136 + %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t138 = load i64, ptr %t137 + %t139 = load ptr, ptr %a1 + %t140 = icmp eq ptr %t139, null + br i1 %t140, label %panic4785, label %ok4786 +panic4785: + call void @finch_panic(ptr @.str.2980, i64 2157, ptr @.str.2981) + unreachable +ok4786: + %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 38 + store i64 %t138, ptr %t141 + %t142 = load ptr, ptr %a1 + %t143 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.2982, i64 41, i64 0 }, ptr %a145 + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a144 + store { ptr, i64, i64 } %t147, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.2983, i64 12, i64 0 }, ptr %a150 + call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) + store { ptr, i64, i64 } %t147, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a148 + %t153 = load i64, ptr %a131 + call void @finch_str_from_int(ptr %a154, i64 %t153) + %t155 = load { ptr, i64, i64 }, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a157 + store { ptr, i64, i64 } %t155, ptr %a158 + call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) + store { ptr, i64, i64 } %t152, ptr %a159 + call void @finch_str_drop(ptr %a159) + store { ptr, i64, i64 } %t155, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a156 + store { ptr, i64, i64 } %t161, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.2984, i64 27, i64 0 }, ptr %a164 + call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) + store { ptr, i64, i64 } %t161, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = load { ptr, i64, i64 }, ptr %a162 + call void @finch.gen.emit(ptr %t142, { ptr, i64, i64 } %t166) + store { ptr, i64, i64 } %t166, ptr %a167 + call void @finch_str_drop(ptr %a167) + call void @finch_str_drop(ptr %a23) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.dbgModule(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca i64, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = mul i64 2, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.2985, i64 20, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.2986, i64 30, i64 0 }, ptr %t5 + %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 2, 1 + %t8 = insertvalue { ptr, i64, i64 } %t7, i64 2, 2 + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic4787, label %ok4788 +panic4787: + call void @finch_panic(ptr @.str.2987, i64 2164, ptr @.str.2988) + unreachable +ok4788: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 33 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + store i64 0, ptr %a15 + br label %for.cond4789 +for.cond4789: + %t16 = load i64, ptr %a15 + %t17 = icmp slt i64 %t16, %t14 + br i1 %t17, label %for.body4790, label %for.end4792 +for.body4790: + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t19 = load i64, ptr %a15 + call void @finch_str_from_int(ptr %a20, i64 %t19) + %t21 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.2989, i64 1, i64 0 }, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.2990, i64 3, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic4793, label %ok4794 +panic4793: + call void @finch_panic(ptr @.str.2991, i64 2165, ptr @.str.2992) + unreachable +ok4794: + %t34 = getelementptr inbounds %S.gen.Gen, ptr %t32, i32 0, i32 33 + %t35 = load i64, ptr %a15 + %t36 = load { ptr, i64, i64 }, ptr %t34 + %t37 = extractvalue { ptr, i64, i64 } %t36, 1 + %t38 = icmp uge i64 %t35, %t37 + br i1 %t38, label %range4795, label %inrange4796 +range4795: + call void @finch_panic_index(ptr @.str.2993, i64 2165, i64 %t35, i64 %t37) + unreachable +inrange4796: + %t39 = extractvalue { ptr, i64, i64 } %t36, 0 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i64 %t35 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t31, ptr %a43 + store { ptr, i64, i64 } %t41, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t31, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = load i64, ptr %t18 + %t48 = add i64 %t47, 1 + call void @finch_arr_reserve(ptr %a9, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t49 = load ptr, ptr %a9 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 + store { ptr, i64, i64 } %t46, ptr %t50 + store i64 %t48, ptr %t18 + br label %for.step4791 +for.step4791: + %t51 = load i64, ptr %a15 + %t52 = add i64 %t51, 1 + store i64 %t52, ptr %a15 + br label %for.cond4789 +for.end4792: + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.2994, i64 1, i64 0 }, ptr %a54 + call void @finch_str_join(ptr %a55, ptr %a9, ptr %a54) + %t56 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t56, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.2995, i64 1, i64 0 }, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t56, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.drop.arr_str(ptr %a9) + ret { ptr, i64, i64 } %t61 +} + +define internal void @finch.copy.arr_S_gen_Var(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond4868 +n.cond4868: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body4869, label %n.end4870 +n.body4869: + %t8 = getelementptr inbounds %S.gen.Var, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.gen.Var, ptr %t2, i64 %t6 + call void @finch.copy.S_gen_Var(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond4868 +n.end4870: + ret void +} + +define internal void @finch.copy.arr_S_gen_Cleanup(ptr %dst, ptr %src) { +entry: + + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) + ret void +} + +define internal void @finch.copy.S_gen_Scope(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Scope, ptr %src + store %S.gen.Scope %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 0 + call void @finch.copy.arr_S_gen_Var(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_ast_Node(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_int(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.gen.Scope, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.gen.Scope, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_S_gen_Cleanup(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.arr_S_gen_Scope(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.gen.Scope, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond4865 +n.cond4865: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body4866, label %n.end4867 +n.body4866: + %t8 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.gen.Scope, ptr %t2, i64 %t6 + call void @finch.copy.S_gen_Scope(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond4865 +n.end4867: + ret void +} + +define internal void @finch.drop.arr_S_gen_Scope(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond4871 +n.cond4871: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body4872, label %n.end4873 +n.body4872: + %t7 = getelementptr inbounds %S.gen.Scope, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Scope(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond4871 +n.end4873: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.gen.define(ptr %p0, i64 %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a16 = alloca %S.gen.FnSig, align 16 + %a17 = alloca %S.gen.FnSig, align 16 + %a20 = alloca %S.gen.FnSig, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca %S.ast.Node, align 16 + %a117 = alloca %S.ast.Node, align 16 + %a119 = alloca %S.ast.Node, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca i64, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca %S.ast.Type, align 16 + %a247 = alloca %S.ast.Type, align 16 + %a248 = alloca %S.ast.Type, align 16 + %a270 = alloca i64, align 16 + %a284 = alloca %S.ast.Type, align 16 + %a285 = alloca %S.ast.Type, align 16 + %a287 = alloca %S.ast.Type, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a450 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a543 = alloca { ptr, i64, i64 }, align 16 + %a544 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic4797, label %ok4798 +panic4797: + call void @finch_panic(ptr @.str.2996, i64 2171, ptr @.str.2997) + unreachable +ok4798: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 15 + %t6 = load i64, ptr %a2 + %t7 = load { ptr, i64, i64 }, ptr %t5 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 %t6, %t8 + br i1 %t9, label %range4799, label %inrange4800 +range4799: + call void @finch_panic_index(ptr @.str.2998, i64 2171, i64 %t6, i64 %t8) + unreachable +inrange4800: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.gen.FnSig, ptr %t10, i64 %t6 + %t12 = load %S.gen.FnSig, ptr %t11 + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic4801, label %ok4802 +panic4801: + call void @finch_panic(ptr @.str.2999, i64 2171, ptr @.str.3000) + unreachable +ok4802: + %t15 = getelementptr inbounds %S.gen.Gen, ptr %t13, i32 0, i32 13 + store %S.gen.FnSig %t12, ptr %a16 + call void @finch.copy.S_gen_FnSig(ptr %a17, ptr %a16) + %t18 = load %S.gen.FnSig, ptr %a17 + %t19 = load %S.gen.FnSig, ptr %t15 + store %S.gen.FnSig %t18, ptr %t15 + store %S.gen.FnSig %t19, ptr %a20 + call void @finch.drop.S_gen_FnSig(ptr %a20) + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic4803, label %ok4804 +panic4803: + call void @finch_panic(ptr @.str.3001, i64 2172, ptr @.str.3002) + unreachable +ok4804: + %t23 = getelementptr inbounds %S.gen.Gen, ptr %t21, i32 0, i32 13 + %t24 = getelementptr inbounds %S.gen.FnSig, ptr %t23, i32 0, i32 0 + %t25 = load { ptr, i64, i64 }, ptr %t24 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic4805, label %ok4806 +panic4805: + call void @finch_panic(ptr @.str.3003, i64 2172, ptr @.str.3004) + unreachable +ok4806: + %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 14 + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_copy(ptr %a30, ptr %a29) + %t31 = load { ptr, i64, i64 }, ptr %a30 + %t32 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t31, ptr %t28 + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic4807, label %ok4808 +panic4807: + call void @finch_panic(ptr @.str.3005, i64 2173, ptr @.str.3006) + unreachable +ok4808: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 13 + %t37 = getelementptr inbounds %S.gen.FnSig, ptr %t36, i32 0, i32 6 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic4809, label %ok4810 +panic4809: + call void @finch_panic(ptr @.str.3007, i64 2173, ptr @.str.3008) + unreachable +ok4810: + %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 18 + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch.copy.arr_str(ptr %a43, ptr %a42) + %t44 = load { ptr, i64, i64 }, ptr %a43 + %t45 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } %t44, ptr %t41 + store { ptr, i64, i64 } %t45, ptr %a46 + call void @finch.drop.arr_str(ptr %a46) + %t47 = load ptr, ptr %a1 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic4811, label %ok4812 +panic4811: + call void @finch_panic(ptr @.str.3009, i64 2174, ptr @.str.3010) + unreachable +ok4812: + %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 13 + %t50 = getelementptr inbounds %S.gen.FnSig, ptr %t49, i32 0, i32 7 + %t51 = load { ptr, i64, i64 }, ptr %t50 + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic4813, label %ok4814 +panic4813: + call void @finch_panic(ptr @.str.3011, i64 2174, ptr @.str.3012) + unreachable +ok4814: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 19 + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch.copy.arr_S_ast_Type(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + %t58 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t57, ptr %t54 + store { ptr, i64, i64 } %t58, ptr %a59 + call void @finch.drop.arr_S_ast_Type(ptr %a59) + %t60 = load ptr, ptr %a1 + %t61 = icmp eq ptr %t60, null + br i1 %t61, label %panic4815, label %ok4816 +panic4815: + call void @finch_panic(ptr @.str.3014, i64 2175, ptr @.str.3015) + unreachable +ok4816: + %t62 = getelementptr inbounds %S.gen.Gen, ptr %t60, i32 0, i32 20 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } { ptr @.str.3013, i64 0, i64 0 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic4817, label %ok4818 +panic4817: + call void @finch_panic(ptr @.str.3016, i64 2176, ptr @.str.3017) + unreachable +ok4818: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 13 + %t68 = getelementptr inbounds %S.gen.FnSig, ptr %t67, i32 0, i32 7 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t68, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = icmp sgt i64 %t70, 0 + br i1 %t71, label %then4819, label %endif4821 +then4819: + %t72 = load ptr, ptr %a1 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic4822, label %ok4823 +panic4822: + call void @finch_panic(ptr @.str.3019, i64 2177, ptr @.str.3020) + unreachable +ok4823: + %t74 = getelementptr inbounds %S.gen.Gen, ptr %t72, i32 0, i32 13 + %t75 = getelementptr inbounds %S.gen.FnSig, ptr %t74, i32 0, i32 8 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } { ptr @.str.3018, i64 17, i64 0 }, ptr %a78 + store { ptr, i64, i64 } %t76, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.3021, i64 1, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic4824, label %ok4825 +panic4824: + call void @finch_panic(ptr @.str.3022, i64 2177, ptr @.str.3023) + unreachable +ok4825: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 20 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t85, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + call void @finch_str_drop(ptr %a90) + br label %endif4821 +endif4821: + %t91 = load ptr, ptr %a1 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic4826, label %ok4827 +panic4826: + call void @finch_panic(ptr @.str.3024, i64 2179, ptr @.str.3025) + unreachable +ok4827: + %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 0 + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic4828, label %ok4829 +panic4828: + call void @finch_panic(ptr @.str.3026, i64 2179, ptr @.str.3027) + unreachable +ok4829: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 13 + %t97 = getelementptr inbounds %S.gen.FnSig, ptr %t96, i32 0, i32 16 + %t98 = load i64, ptr %t97 + %t99 = load { ptr, i64, i64 }, ptr %t93 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 %t98, %t100 + br i1 %t101, label %range4830, label %inrange4831 +range4830: + call void @finch_panic_index(ptr @.str.3028, i64 2179, i64 %t98, i64 %t100) + unreachable +inrange4831: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Program, ptr %t102, i64 %t98 + %t104 = getelementptr inbounds %S.ast.Program, ptr %t103, i32 0, i32 8 + %t105 = load ptr, ptr %a1 + %t106 = icmp eq ptr %t105, null + br i1 %t106, label %panic4832, label %ok4833 +panic4832: + call void @finch_panic(ptr @.str.3029, i64 2179, ptr @.str.3030) + unreachable +ok4833: + %t107 = getelementptr inbounds %S.gen.Gen, ptr %t105, i32 0, i32 13 + %t108 = getelementptr inbounds %S.gen.FnSig, ptr %t107, i32 0, i32 17 + %t109 = load i64, ptr %t108 + %t110 = load { ptr, i64, i64 }, ptr %t104 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range4834, label %inrange4835 +range4834: + call void @finch_panic_index(ptr @.str.3031, i64 2179, i64 %t109, i64 %t111) + unreachable +inrange4835: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds %S.ast.Node, ptr %t113, i64 %t109 + %t115 = load %S.ast.Node, ptr %t114 + store %S.ast.Node %t115, ptr %a116 + call void @finch.copy.S_ast_Node(ptr %a117, ptr %a116) + %t118 = load %S.ast.Node, ptr %a117 + store %S.ast.Node %t118, ptr %a119 + store { ptr, i64, i64 } zeroinitializer, ptr %a120 + %t121 = load { ptr, i64, i64 }, ptr %a120 + %t122 = load ptr, ptr %a1 + %t123 = icmp eq ptr %t122, null + br i1 %t123, label %panic4836, label %ok4837 +panic4836: + call void @finch_panic(ptr @.str.3032, i64 2181, ptr @.str.3033) + unreachable +ok4837: + %t124 = getelementptr inbounds %S.gen.Gen, ptr %t122, i32 0, i32 4 + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch.copy.arr_str(ptr %a126, ptr %a125) + %t127 = load { ptr, i64, i64 }, ptr %a126 + %t128 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t127, ptr %t124 + store { ptr, i64, i64 } %t128, ptr %a129 + call void @finch.drop.arr_str(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a120 + %t131 = load ptr, ptr %a1 + %t132 = icmp eq ptr %t131, null + br i1 %t132, label %panic4838, label %ok4839 +panic4838: + call void @finch_panic(ptr @.str.3034, i64 2182, ptr @.str.3035) + unreachable +ok4839: + %t133 = getelementptr inbounds %S.gen.Gen, ptr %t131, i32 0, i32 5 + store { ptr, i64, i64 } %t130, ptr %a134 + call void @finch.copy.arr_str(ptr %a135, ptr %a134) + %t136 = load { ptr, i64, i64 }, ptr %a135 + %t137 = load { ptr, i64, i64 }, ptr %t133 + store { ptr, i64, i64 } %t136, ptr %t133 + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch.drop.arr_str(ptr %a138) + %t139 = load ptr, ptr %a1 + %t140 = icmp eq ptr %t139, null + br i1 %t140, label %panic4840, label %ok4841 +panic4840: + call void @finch_panic(ptr @.str.3036, i64 2183, ptr @.str.3037) + unreachable +ok4841: + %t141 = getelementptr inbounds %S.gen.Gen, ptr %t139, i32 0, i32 6 + store i64 0, ptr %t141 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic4842, label %ok4843 +panic4842: + call void @finch_panic(ptr @.str.3038, i64 2184, ptr @.str.3039) + unreachable +ok4843: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 9 + store i1 false, ptr %t144 + %t145 = load ptr, ptr %a1 + %t146 = icmp eq ptr %t145, null + br i1 %t146, label %panic4844, label %ok4845 +panic4844: + call void @finch_panic(ptr @.str.3040, i64 2185, ptr @.str.3041) + unreachable +ok4845: + %t147 = getelementptr inbounds %S.gen.Gen, ptr %t145, i32 0, i32 25 + store i64 0, ptr %t147 + %t148 = load ptr, ptr %a1 + %t149 = icmp eq ptr %t148, null + br i1 %t149, label %panic4846, label %ok4847 +panic4846: + call void @finch_panic(ptr @.str.3042, i64 2186, ptr @.str.3043) + unreachable +ok4847: + %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 36 + store i64 -1, ptr %t150 + store i64 -1, ptr %a151 + %t152 = load ptr, ptr %a1 + %t153 = icmp eq ptr %t152, null + br i1 %t153, label %panic4848, label %ok4849 +panic4848: + call void @finch_panic(ptr @.str.3044, i64 2188, ptr @.str.3045) + unreachable +ok4849: + %t154 = getelementptr inbounds %S.gen.Gen, ptr %t152, i32 0, i32 30 + %t155 = load i1, ptr %t154 + br i1 %t155, label %then4850, label %endif4852 +then4850: + %t156 = load ptr, ptr %a1 + %t157 = load %S.ast.Node, ptr %a119 + %t158 = call i64 @finch.gen.dbgSubprogram(ptr %t156, %S.ast.Node %t157) + store i64 %t158, ptr %a151 + %t159 = load i64, ptr %a151 + %t160 = load ptr, ptr %a1 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic4853, label %ok4854 +panic4853: + call void @finch_panic(ptr @.str.3046, i64 2190, ptr @.str.3047) + unreachable +ok4854: + %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 36 + store i64 %t159, ptr %t162 + %t163 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 11 + %t164 = load i64, ptr %t163 + %t165 = load ptr, ptr %a1 + %t166 = icmp eq ptr %t165, null + br i1 %t166, label %panic4855, label %ok4856 +panic4855: + call void @finch_panic(ptr @.str.3048, i64 2191, ptr @.str.3049) + unreachable +ok4856: + %t167 = getelementptr inbounds %S.gen.Gen, ptr %t165, i32 0, i32 37 + store i64 %t164, ptr %t167 + %t168 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 12 + %t169 = load i64, ptr %t168 + %t170 = load ptr, ptr %a1 + %t171 = icmp eq ptr %t170, null + br i1 %t171, label %panic4857, label %ok4858 +panic4857: + call void @finch_panic(ptr @.str.3050, i64 2192, ptr @.str.3051) + unreachable +ok4858: + %t172 = getelementptr inbounds %S.gen.Gen, ptr %t170, i32 0, i32 38 + store i64 %t169, ptr %t172 + br label %endif4852 +endif4852: + %t173 = load ptr, ptr %a1 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic4859, label %ok4860 +panic4859: + call void @finch_panic(ptr @.str.3052, i64 2194, ptr @.str.3053) + unreachable +ok4860: + %t175 = getelementptr inbounds %S.gen.Gen, ptr %t173, i32 0, i32 44 + store i1 false, ptr %t175 + %t176 = load ptr, ptr %a1 + %t177 = icmp eq ptr %t176, null + br i1 %t177, label %panic4861, label %ok4862 +panic4861: + call void @finch_panic(ptr @.str.3054, i64 2195, ptr @.str.3055) + unreachable +ok4862: + %t178 = getelementptr inbounds %S.gen.Gen, ptr %t176, i32 0, i32 46 + store i64 0, ptr %t178 + store { ptr, i64, i64 } zeroinitializer, ptr %a179 + %t180 = load { ptr, i64, i64 }, ptr %a179 + %t181 = load ptr, ptr %a1 + %t182 = icmp eq ptr %t181, null + br i1 %t182, label %panic4863, label %ok4864 +panic4863: + call void @finch_panic(ptr @.str.3056, i64 2197, ptr @.str.3057) + unreachable +ok4864: + %t183 = getelementptr inbounds %S.gen.Gen, ptr %t181, i32 0, i32 10 + store { ptr, i64, i64 } %t180, ptr %a184 + call void @finch.copy.arr_S_gen_Scope(ptr %a185, ptr %a184) + %t186 = load { ptr, i64, i64 }, ptr %a185 + %t187 = load { ptr, i64, i64 }, ptr %t183 + store { ptr, i64, i64 } %t186, ptr %t183 + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch.drop.arr_S_gen_Scope(ptr %a188) + %t189 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t189) + store { ptr, i64, i64 } zeroinitializer, ptr %a190 + %t191 = load ptr, ptr %a1 + %t192 = icmp eq ptr %t191, null + br i1 %t192, label %panic4874, label %ok4875 +panic4874: + call void @finch_panic(ptr @.str.3058, i64 2200, ptr @.str.3059) + unreachable +ok4875: + %t193 = getelementptr inbounds %S.gen.Gen, ptr %t191, i32 0, i32 13 + %t194 = getelementptr inbounds %S.gen.FnSig, ptr %t193, i32 0, i32 2 + %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 + %t196 = load i64, ptr %t195 + %t197 = icmp sgt i64 %t196, 0 + br i1 %t197, label %then4876, label %endif4878 +then4876: + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 + %t199 = load i64, ptr %t198 + %t200 = add i64 %t199, 1 + call void @finch_arr_reserve(ptr %a190, i64 %t200, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t201 = load ptr, ptr %a190 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %t201, i64 %t199 + store { ptr, i64, i64 } { ptr @.str.3060, i64 9, i64 0 }, ptr %t202 + store i64 %t200, ptr %t198 + store { ptr, i64, i64 } { ptr @.str.3061, i64 6, i64 0 }, ptr %a203 + %t204 = load ptr, ptr %a1 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic4879, label %ok4880 +panic4879: + call void @finch_panic(ptr @.str.3062, i64 2204, ptr @.str.3063) + unreachable +ok4880: + %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 13 + %t207 = getelementptr inbounds %S.gen.FnSig, ptr %t206, i32 0, i32 4 + %t208 = load i1, ptr %t207 + br i1 %t208, label %then4881, label %endif4883 +then4881: + %t209 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.3064, i64 4, i64 0 }, ptr %a203 + store { ptr, i64, i64 } %t209, ptr %a210 + call void @finch_str_drop(ptr %a210) + br label %endif4883 +endif4883: + %t211 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t211, ptr %a212 + call void @finch_str_copy(ptr %a213, ptr %a212) + %t214 = load { ptr, i64, i64 }, ptr %a213 + %t215 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } %t214, 0 + %t216 = load ptr, ptr %a1 + %t217 = icmp eq ptr %t216, null + br i1 %t217, label %panic4884, label %ok4885 +panic4884: + call void @finch_panic(ptr @.str.3065, i64 2207, ptr @.str.3066) + unreachable +ok4885: + %t218 = getelementptr inbounds %S.gen.Gen, ptr %t216, i32 0, i32 13 + %t219 = getelementptr inbounds %S.gen.FnSig, ptr %t218, i32 0, i32 2 + %t220 = load { ptr, i64, i64 }, ptr %t219 + store { ptr, i64, i64 } %t220, ptr %a221 + call void @finch_str_copy(ptr %a222, ptr %a221) + %t223 = load { ptr, i64, i64 }, ptr %a222 + %t224 = insertvalue %S.ast.Type %t215, { ptr, i64, i64 } %t223, 2 + %t225 = load ptr, ptr %a1 + %t226 = icmp eq ptr %t225, null + br i1 %t226, label %panic4886, label %ok4887 +panic4886: + call void @finch_panic(ptr @.str.3067, i64 2207, ptr @.str.3068) + unreachable +ok4887: + %t227 = getelementptr inbounds %S.gen.Gen, ptr %t225, i32 0, i32 13 + %t228 = getelementptr inbounds %S.gen.FnSig, ptr %t227, i32 0, i32 3 + %t229 = load { ptr, i64, i64 }, ptr %t228 + store { ptr, i64, i64 } %t229, ptr %a230 + call void @finch_str_copy(ptr %a231, ptr %a230) + %t232 = load { ptr, i64, i64 }, ptr %a231 + %t233 = insertvalue %S.ast.Type %t224, { ptr, i64, i64 } %t232, 3 + store %S.ast.Type %t233, ptr %a234 + %t235 = load ptr, ptr %a1 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic4888, label %ok4889 +panic4888: + call void @finch_panic(ptr @.str.3069, i64 2208, ptr @.str.3070) + unreachable +ok4889: + %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 10 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = extractvalue { ptr, i64, i64 } %t238, 1 + %t240 = icmp uge i64 0, %t239 + br i1 %t240, label %range4890, label %inrange4891 +range4890: + call void @finch_panic_index(ptr @.str.3071, i64 2208, i64 0, i64 %t239) + unreachable +inrange4891: + %t241 = extractvalue { ptr, i64, i64 } %t238, 0 + %t242 = getelementptr inbounds %S.gen.Scope, ptr %t241, i64 0 + %t243 = getelementptr inbounds %S.gen.Scope, ptr %t242, i32 0, i32 0 + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %t243, i32 0, i32 1 + %t245 = insertvalue %S.gen.Var zeroinitializer, { ptr, i64, i64 } { ptr @.str.3072, i64 4, i64 0 }, 0 + %t246 = load %S.ast.Type, ptr %a234 + store %S.ast.Type %t246, ptr %a247 + call void @finch.copy.S_ast_Type(ptr %a248, ptr %a247) + %t249 = load %S.ast.Type, ptr %a248 + %t250 = insertvalue %S.gen.Var %t245, %S.ast.Type %t249, 1 + %t251 = insertvalue %S.gen.Var %t250, { ptr, i64, i64 } { ptr @.str.3073, i64 5, i64 0 }, 2 + %t252 = insertvalue %S.gen.Var %t251, i1 false, 3 + %t253 = load i64, ptr %t244 + %t254 = add i64 %t253, 1 + call void @finch_arr_reserve(ptr %t243, i64 %t254, i64 ptrtoint (ptr getelementptr (%S.gen.Var, ptr null, i32 1) to i64)) + %t255 = load ptr, ptr %t243 + %t256 = getelementptr inbounds %S.gen.Var, ptr %t255, i64 %t253 + store %S.gen.Var %t252, ptr %t256 + store i64 %t254, ptr %t244 + %t257 = load ptr, ptr %a1 + %t258 = icmp eq ptr %t257, null + br i1 %t258, label %panic4892, label %ok4893 +panic4892: + call void @finch_panic(ptr @.str.3074, i64 2209, ptr @.str.3075) + unreachable +ok4893: + %t259 = getelementptr inbounds %S.gen.Gen, ptr %t257, i32 0, i32 30 + %t260 = load i1, ptr %t259 + br i1 %t260, label %then4894, label %endif4896 +then4894: + %t261 = load ptr, ptr %a1 + %t262 = load %S.ast.Node, ptr %a119 + %t263 = load %S.ast.Type, ptr %a234 + call void @finch.gen.dbgVariable(ptr %t261, %S.ast.Node %t262, { ptr, i64, i64 } { ptr @.str.3076, i64 4, i64 0 }, %S.ast.Type %t263, { ptr, i64, i64 } { ptr @.str.3077, i64 5, i64 0 }) + br label %endif4896 +endif4896: + call void @finch.drop.S_ast_Type(ptr %a234) + call void @finch_str_drop(ptr %a203) + br label %endif4878 +endif4878: + %t264 = load ptr, ptr %a1 + %t265 = icmp eq ptr %t264, null + br i1 %t265, label %panic4897, label %ok4898 +panic4897: + call void @finch_panic(ptr @.str.3078, i64 2214, ptr @.str.3079) + unreachable +ok4898: + %t266 = getelementptr inbounds %S.gen.Gen, ptr %t264, i32 0, i32 13 + %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i32 0, i32 13 + %t268 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i32 0, i32 1 + %t269 = load i64, ptr %t268 + store i64 0, ptr %a270 + br label %for.cond4899 +for.cond4899: + %t271 = load i64, ptr %a270 + %t272 = icmp slt i64 %t271, %t269 + br i1 %t272, label %for.body4900, label %for.end4902 +for.body4900: + %t273 = load ptr, ptr %a1 + %t274 = icmp eq ptr %t273, null + br i1 %t274, label %panic4903, label %ok4904 +panic4903: + call void @finch_panic(ptr @.str.3080, i64 2215, ptr @.str.3081) + unreachable +ok4904: + %t275 = getelementptr inbounds %S.gen.Gen, ptr %t273, i32 0, i32 13 + %t276 = getelementptr inbounds %S.gen.FnSig, ptr %t275, i32 0, i32 13 + %t277 = load i64, ptr %a270 + %t278 = load { ptr, i64, i64 }, ptr %t276 + %t279 = extractvalue { ptr, i64, i64 } %t278, 1 + %t280 = icmp uge i64 %t277, %t279 + br i1 %t280, label %range4905, label %inrange4906 +range4905: + call void @finch_panic_index(ptr @.str.3082, i64 2215, i64 %t277, i64 %t279) + unreachable +inrange4906: + %t281 = extractvalue { ptr, i64, i64 } %t278, 0 + %t282 = getelementptr inbounds %S.ast.Type, ptr %t281, i64 %t277 + %t283 = load %S.ast.Type, ptr %t282 + store %S.ast.Type %t283, ptr %a284 + call void @finch.copy.S_ast_Type(ptr %a285, ptr %a284) + %t286 = load %S.ast.Type, ptr %a285 + store %S.ast.Type %t286, ptr %a287 + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 + %t289 = load ptr, ptr %a1 + %t290 = load %S.ast.Type, ptr %a287 + %t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t289, %S.ast.Type %t290) + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.3083, i64 3, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load i64, ptr %a270 + call void @finch_str_from_int(ptr %a298, i64 %t297) + %t299 = load { ptr, i64, i64 }, ptr %a298 + store { ptr, i64, i64 } %t296, ptr %a301 + store { ptr, i64, i64 } %t299, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t296, ptr %a303 + call void @finch_str_drop(ptr %a303) + store { ptr, i64, i64 } %t299, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load { ptr, i64, i64 }, ptr %a300 + %t306 = load i64, ptr %t288 + %t307 = add i64 %t306, 1 + call void @finch_arr_reserve(ptr %a190, i64 %t307, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t308 = load ptr, ptr %a190 + %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t306 + store { ptr, i64, i64 } %t305, ptr %t309 + store i64 %t307, ptr %t288 + %t310 = load i64, ptr %a270 + call void @finch_str_from_int(ptr %a311, i64 %t310) + %t312 = load { ptr, i64, i64 }, ptr %a311 + store { ptr, i64, i64 } { ptr @.str.3084, i64 2, i64 0 }, ptr %a314 + store { ptr, i64, i64 } %t312, ptr %a315 + call void @finch_str_concat(ptr %a313, ptr %a314, ptr %a315) + store { ptr, i64, i64 } %t312, ptr %a316 + call void @finch_str_drop(ptr %a316) + %t317 = load { ptr, i64, i64 }, ptr %a313 + store { ptr, i64, i64 } %t317, ptr %a318 + %t319 = load ptr, ptr %a1 + %t320 = load %S.ast.Type, ptr %a287 + %t321 = call i1 @finch.gen.owning(ptr %t319, %S.ast.Type %t320) + br label %logic.from4907 +logic.from4907: + br i1 %t321, label %logic.rhs4908, label %logic.end4909 +logic.rhs4908: + %t322 = load ptr, ptr %a1 + %t323 = icmp eq ptr %t322, null + br i1 %t323, label %panic4910, label %ok4911 +panic4910: + call void @finch_panic(ptr @.str.3085, i64 2218, ptr @.str.3086) + unreachable +ok4911: + %t324 = getelementptr inbounds %S.gen.Gen, ptr %t322, i32 0, i32 13 + %t325 = getelementptr inbounds %S.gen.FnSig, ptr %t324, i32 0, i32 15 + %t326 = load i64, ptr %a270 + %t327 = load { ptr, i64, i64 }, ptr %t325 + %t328 = extractvalue { ptr, i64, i64 } %t327, 1 + %t329 = icmp uge i64 %t326, %t328 + br i1 %t329, label %range4912, label %inrange4913 +range4912: + call void @finch_panic_index(ptr @.str.3087, i64 2218, i64 %t326, i64 %t328) + unreachable +inrange4913: + %t330 = extractvalue { ptr, i64, i64 } %t327, 0 + %t331 = getelementptr inbounds i1, ptr %t330, i64 %t326 + %t332 = load i1, ptr %t331 + %t333 = xor i1 %t332, true + br label %logic.rend4914 +logic.rend4914: + br label %logic.end4909 +logic.end4909: + %t334 = phi i1 [ false, %logic.from4907 ], [ %t333, %logic.rend4914 ] + br i1 %t334, label %then4915, label %endif4917 +then4915: + %t335 = load ptr, ptr %a1 + %t336 = load { ptr, i64, i64 }, ptr %a318 + %t337 = load %S.ast.Type, ptr %a287 + %t338 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t335, { ptr, i64, i64 } %t336, %S.ast.Type %t337) + %t339 = load { ptr, i64, i64 }, ptr %a318 + store { ptr, i64, i64 } %t338, ptr %a318 + store { ptr, i64, i64 } %t339, ptr %a340 + call void @finch_str_drop(ptr %a340) + br label %endif4917 +endif4917: + %t341 = load i64, ptr %a270 + %t342 = add i64 %t341, 1 + %t343 = load ptr, ptr %a1 + %t344 = icmp eq ptr %t343, null + br i1 %t344, label %panic4918, label %ok4919 +panic4918: + call void @finch_panic(ptr @.str.3088, i64 2221, ptr @.str.3089) + unreachable +ok4919: + %t345 = getelementptr inbounds %S.gen.Gen, ptr %t343, i32 0, i32 39 + store i64 %t342, ptr %t345 + %t346 = load ptr, ptr %a1 + %t347 = icmp eq ptr %t346, null + br i1 %t347, label %panic4920, label %ok4921 +panic4920: + call void @finch_panic(ptr @.str.3090, i64 2222, ptr @.str.3091) + unreachable +ok4921: + %t348 = getelementptr inbounds %S.gen.Gen, ptr %t346, i32 0, i32 13 + %t349 = getelementptr inbounds %S.gen.FnSig, ptr %t348, i32 0, i32 2 + %t350 = getelementptr inbounds { ptr, i64, i64 }, ptr %t349, i32 0, i32 1 + %t351 = load i64, ptr %t350 + %t352 = icmp sgt i64 %t351, 0 + br i1 %t352, label %then4922, label %endif4924 +then4922: + %t353 = load i64, ptr %a270 + %t354 = add i64 %t353, 2 + %t355 = load ptr, ptr %a1 + %t356 = icmp eq ptr %t355, null + br i1 %t356, label %panic4925, label %ok4926 +panic4925: + call void @finch_panic(ptr @.str.3092, i64 2223, ptr @.str.3093) + unreachable +ok4926: + %t357 = getelementptr inbounds %S.gen.Gen, ptr %t355, i32 0, i32 39 + store i64 %t354, ptr %t357 + br label %endif4924 +endif4924: + %t358 = load ptr, ptr %a1 + %t359 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 + %t360 = load i64, ptr %a270 + %t361 = load { ptr, i64, i64 }, ptr %t359 + %t362 = extractvalue { ptr, i64, i64 } %t361, 1 + %t363 = icmp uge i64 %t360, %t362 + br i1 %t363, label %range4927, label %inrange4928 +range4927: + call void @finch_panic_index(ptr @.str.3094, i64 2225, i64 %t360, i64 %t362) + unreachable +inrange4928: + %t364 = extractvalue { ptr, i64, i64 } %t361, 0 + %t365 = getelementptr inbounds %S.ast.Node, ptr %t364, i64 %t360 + %t366 = load %S.ast.Node, ptr %t365 + %t367 = load ptr, ptr %a1 + %t368 = icmp eq ptr %t367, null + br i1 %t368, label %panic4929, label %ok4930 +panic4929: + call void @finch_panic(ptr @.str.3095, i64 2225, ptr @.str.3096) + unreachable +ok4930: + %t369 = getelementptr inbounds %S.gen.Gen, ptr %t367, i32 0, i32 13 + %t370 = getelementptr inbounds %S.gen.FnSig, ptr %t369, i32 0, i32 14 + %t371 = load i64, ptr %a270 + %t372 = load { ptr, i64, i64 }, ptr %t370 + %t373 = extractvalue { ptr, i64, i64 } %t372, 1 + %t374 = icmp uge i64 %t371, %t373 + br i1 %t374, label %range4931, label %inrange4932 +range4931: + call void @finch_panic_index(ptr @.str.3097, i64 2225, i64 %t371, i64 %t373) + unreachable +inrange4932: + %t375 = extractvalue { ptr, i64, i64 } %t372, 0 + %t376 = getelementptr inbounds { ptr, i64, i64 }, ptr %t375, i64 %t371 + %t377 = load { ptr, i64, i64 }, ptr %t376 + %t378 = load %S.ast.Type, ptr %a287 + %t379 = load { ptr, i64, i64 }, ptr %a318 + %t380 = load ptr, ptr %a1 + %t381 = load %S.ast.Type, ptr %a287 + %t382 = call i1 @finch.gen.owning(ptr %t380, %S.ast.Type %t381) + br label %logic.from4933 +logic.from4933: + br i1 %t382, label %logic.rhs4934, label %logic.end4935 +logic.rhs4934: + %t383 = load ptr, ptr %a1 + %t384 = icmp eq ptr %t383, null + br i1 %t384, label %panic4936, label %ok4937 +panic4936: + call void @finch_panic(ptr @.str.3098, i64 2225, ptr @.str.3099) + unreachable +ok4937: + %t385 = getelementptr inbounds %S.gen.Gen, ptr %t383, i32 0, i32 13 + %t386 = getelementptr inbounds %S.gen.FnSig, ptr %t385, i32 0, i32 15 + %t387 = load i64, ptr %a270 + %t388 = load { ptr, i64, i64 }, ptr %t386 + %t389 = extractvalue { ptr, i64, i64 } %t388, 1 + %t390 = icmp uge i64 %t387, %t389 + br i1 %t390, label %range4938, label %inrange4939 +range4938: + call void @finch_panic_index(ptr @.str.3100, i64 2225, i64 %t387, i64 %t389) + unreachable +inrange4939: + %t391 = extractvalue { ptr, i64, i64 } %t388, 0 + %t392 = getelementptr inbounds i1, ptr %t391, i64 %t387 + %t393 = load i1, ptr %t392 + %t394 = xor i1 %t393, true + br label %logic.rend4940 +logic.rend4940: + br label %logic.end4935 +logic.end4935: + %t395 = phi i1 [ false, %logic.from4933 ], [ %t394, %logic.rend4940 ] + %t396 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t358, %S.ast.Node %t366, { ptr, i64, i64 } %t377, %S.ast.Type %t378, { ptr, i64, i64 } %t379, i1 false, i1 %t395) + store { ptr, i64, i64 } %t396, ptr %a397 + call void @finch_str_drop(ptr %a397) + %t398 = load ptr, ptr %a1 + %t399 = icmp eq ptr %t398, null + br i1 %t399, label %panic4941, label %ok4942 +panic4941: + call void @finch_panic(ptr @.str.3101, i64 2226, ptr @.str.3102) + unreachable +ok4942: + %t400 = getelementptr inbounds %S.gen.Gen, ptr %t398, i32 0, i32 39 + store i64 0, ptr %t400 + call void @finch_str_drop(ptr %a318) + call void @finch.drop.S_ast_Type(ptr %a287) + br label %for.step4901 +for.step4901: + %t401 = load i64, ptr %a270 + %t402 = add i64 %t401, 1 + store i64 %t402, ptr %a270 + br label %for.cond4899 +for.end4902: + %t403 = load ptr, ptr %a1 + %t404 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 + %t405 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 9 + %t406 = getelementptr inbounds { ptr, i64, i64 }, ptr %t405, i32 0, i32 1 + %t407 = load i64, ptr %t406 + %t408 = sub i64 %t407, 1 + %t409 = load { ptr, i64, i64 }, ptr %t404 + %t410 = extractvalue { ptr, i64, i64 } %t409, 1 + %t411 = icmp uge i64 %t408, %t410 + br i1 %t411, label %range4943, label %inrange4944 +range4943: + call void @finch_panic_index(ptr @.str.3103, i64 2228, i64 %t408, i64 %t410) + unreachable +inrange4944: + %t412 = extractvalue { ptr, i64, i64 } %t409, 0 + %t413 = getelementptr inbounds %S.ast.Node, ptr %t412, i64 %t408 + %t414 = load %S.ast.Node, ptr %t413 + call void @finch.gen.block(ptr %t403, %S.ast.Node %t414, i1 false) + %t415 = load ptr, ptr %a1 + %t416 = icmp eq ptr %t415, null + br i1 %t416, label %panic4945, label %ok4946 +panic4945: + call void @finch_panic(ptr @.str.3104, i64 2229, ptr @.str.3105) + unreachable +ok4946: + %t417 = getelementptr inbounds %S.gen.Gen, ptr %t415, i32 0, i32 9 + %t418 = load i1, ptr %t417 + %t419 = xor i1 %t418, true + br i1 %t419, label %then4947, label %endif4949 +then4947: + %t420 = load ptr, ptr %a1 + %t421 = icmp eq ptr %t420, null + br i1 %t421, label %panic4950, label %ok4951 +panic4950: + call void @finch_panic(ptr @.str.3106, i64 2230, ptr @.str.3107) + unreachable +ok4951: + %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 13 + %t423 = getelementptr inbounds %S.gen.FnSig, ptr %t422, i32 0, i32 12 + %t424 = getelementptr inbounds %S.ast.Type, ptr %t423, i32 0, i32 0 + %t425 = load { ptr, i64, i64 }, ptr %t424 + store { ptr, i64, i64 } %t425, ptr %a426 + store { ptr, i64, i64 } { ptr @.str.3108, i64 4, i64 0 }, ptr %a427 + %t428 = call i32 @finch_str_eq(ptr %a426, ptr %a427) + %t429 = icmp eq i32 %t428, 0 + br i1 %t429, label %then4952, label %endif4954 +then4952: + %t430 = load ptr, ptr %a1 + %t431 = load %S.ast.Node, ptr %a119 + %t432 = getelementptr inbounds %S.ast.Node, ptr %a119, i32 0, i32 1 + %t433 = load { ptr, i64, i64 }, ptr %t432 + store { ptr, i64, i64 } { ptr @.str.3109, i64 10, i64 0 }, ptr %a435 + store { ptr, i64, i64 } %t433, ptr %a436 + call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) + %t437 = load { ptr, i64, i64 }, ptr %a434 + store { ptr, i64, i64 } %t437, ptr %a439 + store { ptr, i64, i64 } { ptr @.str.3110, i64 38, i64 0 }, ptr %a440 + call void @finch_str_concat(ptr %a438, ptr %a439, ptr %a440) + store { ptr, i64, i64 } %t437, ptr %a441 + call void @finch_str_drop(ptr %a441) + %t442 = load { ptr, i64, i64 }, ptr %a438 + %t443 = load ptr, ptr %a1 + %t444 = icmp eq ptr %t443, null + br i1 %t444, label %panic4955, label %ok4956 +panic4955: + call void @finch_panic(ptr @.str.3111, i64 2231, ptr @.str.3112) + unreachable +ok4956: + %t445 = getelementptr inbounds %S.gen.Gen, ptr %t443, i32 0, i32 13 + %t446 = getelementptr inbounds %S.gen.FnSig, ptr %t445, i32 0, i32 12 + %t447 = load %S.ast.Type, ptr %t446 + %t448 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t447) + store { ptr, i64, i64 } %t442, ptr %a450 + store { ptr, i64, i64 } %t448, ptr %a451 + call void @finch_str_concat(ptr %a449, ptr %a450, ptr %a451) + store { ptr, i64, i64 } %t442, ptr %a452 + call void @finch_str_drop(ptr %a452) + store { ptr, i64, i64 } %t448, ptr %a453 + call void @finch_str_drop(ptr %a453) + %t454 = load { ptr, i64, i64 }, ptr %a449 + call void @finch.gen.fail(ptr %t430, %S.ast.Node %t431, { ptr, i64, i64 } %t454) + store { ptr, i64, i64 } %t454, ptr %a455 + call void @finch_str_drop(ptr %a455) + br label %endif4954 +endif4954: + %t456 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t456, i64 0) + %t457 = load ptr, ptr %a1 + %t458 = icmp eq ptr %t457, null + br i1 %t458, label %panic4957, label %ok4958 +panic4957: + call void @finch_panic(ptr @.str.3113, i64 2234, ptr @.str.3114) + unreachable +ok4958: + %t459 = getelementptr inbounds %S.gen.Gen, ptr %t457, i32 0, i32 13 + %t460 = getelementptr inbounds %S.gen.FnSig, ptr %t459, i32 0, i32 9 + %t461 = load i1, ptr %t460 + br i1 %t461, label %then4959, label %else4960 +then4959: + %t462 = load ptr, ptr %a1 + %t463 = load ptr, ptr %a1 + %t464 = load ptr, ptr %a1 + %t465 = icmp eq ptr %t464, null + br i1 %t465, label %panic4962, label %ok4963 +panic4962: + call void @finch_panic(ptr @.str.3116, i64 2235, ptr @.str.3117) + unreachable +ok4963: + %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 13 + %t467 = load %S.gen.FnSig, ptr %t466 + %t468 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t463, %S.gen.FnSig %t467) + store { ptr, i64, i64 } { ptr @.str.3115, i64 4, i64 0 }, ptr %a470 + store { ptr, i64, i64 } %t468, ptr %a471 + call void @finch_str_concat(ptr %a469, ptr %a470, ptr %a471) + store { ptr, i64, i64 } %t468, ptr %a472 + call void @finch_str_drop(ptr %a472) + %t473 = load { ptr, i64, i64 }, ptr %a469 + store { ptr, i64, i64 } %t473, ptr %a475 + store { ptr, i64, i64 } { ptr @.str.3118, i64 53, i64 0 }, ptr %a476 + call void @finch_str_concat(ptr %a474, ptr %a475, ptr %a476) + store { ptr, i64, i64 } %t473, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = load { ptr, i64, i64 }, ptr %a474 + call void @finch.gen.emit(ptr %t462, { ptr, i64, i64 } %t478) + store { ptr, i64, i64 } %t478, ptr %a479 + call void @finch_str_drop(ptr %a479) + br label %endif4961 +else4960: + %t480 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t480, { ptr, i64, i64 } { ptr @.str.3119, i64 8, i64 0 }) + br label %endif4961 +endif4961: + br label %endif4949 +endif4949: + store { ptr, i64, i64 } { ptr @.str.3120, i64 0, i64 0 }, ptr %a481 + %t482 = load i64, ptr %a151 + %t483 = icmp sge i64 %t482, 0 + br i1 %t483, label %then4964, label %endif4966 +then4964: + %t484 = load i64, ptr %a151 + call void @finch_str_from_int(ptr %a485, i64 %t484) + %t486 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.3121, i64 7, i64 0 }, ptr %a488 + store { ptr, i64, i64 } %t486, ptr %a489 + call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) + store { ptr, i64, i64 } %t486, ptr %a490 + call void @finch_str_drop(ptr %a490) + %t491 = load { ptr, i64, i64 }, ptr %a487 + %t492 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t491, ptr %a481 + store { ptr, i64, i64 } %t492, ptr %a493 + call void @finch_str_drop(ptr %a493) + br label %endif4966 +endif4966: + %t494 = load ptr, ptr %a1 + %t495 = icmp eq ptr %t494, null + br i1 %t495, label %panic4967, label %ok4968 +panic4967: + call void @finch_panic(ptr @.str.3122, i64 2244, ptr @.str.3123) + unreachable +ok4968: + %t496 = getelementptr inbounds %S.gen.Gen, ptr %t494, i32 0, i32 36 + store i64 -1, ptr %t496 + %t497 = load ptr, ptr %a1 + %t498 = icmp eq ptr %t497, null + br i1 %t498, label %panic4969, label %ok4970 +panic4969: + call void @finch_panic(ptr @.str.3124, i64 2245, ptr @.str.3125) + unreachable +ok4970: + %t499 = getelementptr inbounds %S.gen.Gen, ptr %t497, i32 0, i32 3 + %t500 = getelementptr inbounds { ptr, i64, i64 }, ptr %t499, i32 0, i32 1 + %t501 = load ptr, ptr %a1 + %t502 = load ptr, ptr %a1 + %t503 = icmp eq ptr %t502, null + br i1 %t503, label %panic4971, label %ok4972 +panic4971: + call void @finch_panic(ptr @.str.3127, i64 2245, ptr @.str.3128) + unreachable +ok4972: + %t504 = getelementptr inbounds %S.gen.Gen, ptr %t502, i32 0, i32 13 + %t505 = load %S.gen.FnSig, ptr %t504 + %t506 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t501, %S.gen.FnSig %t505) + store { ptr, i64, i64 } { ptr @.str.3126, i64 16, i64 0 }, ptr %a508 + store { ptr, i64, i64 } %t506, ptr %a509 + call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) + store { ptr, i64, i64 } %t506, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a507 + store { ptr, i64, i64 } %t511, ptr %a513 + store { ptr, i64, i64 } { ptr @.str.3129, i64 1, i64 0 }, ptr %a514 + call void @finch_str_concat(ptr %a512, ptr %a513, ptr %a514) + store { ptr, i64, i64 } %t511, ptr %a515 + call void @finch_str_drop(ptr %a515) + %t516 = load { ptr, i64, i64 }, ptr %a512 + %t517 = load ptr, ptr %a1 + %t518 = icmp eq ptr %t517, null + br i1 %t518, label %panic4973, label %ok4974 +panic4973: + call void @finch_panic(ptr @.str.3130, i64 2245, ptr @.str.3131) + unreachable +ok4974: + %t519 = getelementptr inbounds %S.gen.Gen, ptr %t517, i32 0, i32 13 + %t520 = getelementptr inbounds %S.gen.FnSig, ptr %t519, i32 0, i32 11 + %t521 = load { ptr, i64, i64 }, ptr %t520 + store { ptr, i64, i64 } %t516, ptr %a523 + store { ptr, i64, i64 } %t521, ptr %a524 + call void @finch_str_concat(ptr %a522, ptr %a523, ptr %a524) + store { ptr, i64, i64 } %t516, ptr %a525 + call void @finch_str_drop(ptr %a525) + %t526 = load { ptr, i64, i64 }, ptr %a522 + store { ptr, i64, i64 } %t526, ptr %a528 + store { ptr, i64, i64 } { ptr @.str.3132, i64 1, i64 0 }, ptr %a529 + call void @finch_str_concat(ptr %a527, ptr %a528, ptr %a529) + store { ptr, i64, i64 } %t526, ptr %a530 + call void @finch_str_drop(ptr %a530) + %t531 = load { ptr, i64, i64 }, ptr %a527 + %t532 = getelementptr inbounds { ptr, i64, i64 }, ptr %a190, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3133, i64 2, i64 0 }, ptr %a533 + call void @finch_str_join(ptr %a534, ptr %a190, ptr %a533) + %t535 = load { ptr, i64, i64 }, ptr %a534 + store { ptr, i64, i64 } %t531, ptr %a537 + store { ptr, i64, i64 } %t535, ptr %a538 + call void @finch_str_concat(ptr %a536, ptr %a537, ptr %a538) + store { ptr, i64, i64 } %t531, ptr %a539 + call void @finch_str_drop(ptr %a539) + store { ptr, i64, i64 } %t535, ptr %a540 + call void @finch_str_drop(ptr %a540) + %t541 = load { ptr, i64, i64 }, ptr %a536 + store { ptr, i64, i64 } %t541, ptr %a543 + store { ptr, i64, i64 } { ptr @.str.3134, i64 1, i64 0 }, ptr %a544 + call void @finch_str_concat(ptr %a542, ptr %a543, ptr %a544) + store { ptr, i64, i64 } %t541, ptr %a545 + call void @finch_str_drop(ptr %a545) + %t546 = load { ptr, i64, i64 }, ptr %a542 + %t547 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t546, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + store { ptr, i64, i64 } %t546, ptr %a551 + call void @finch_str_drop(ptr %a551) + %t552 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t552, ptr %a554 + store { ptr, i64, i64 } { ptr @.str.3135, i64 10, i64 0 }, ptr %a555 + call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) + store { ptr, i64, i64 } %t552, ptr %a556 + call void @finch_str_drop(ptr %a556) + %t557 = load { ptr, i64, i64 }, ptr %a553 + %t558 = load ptr, ptr %a1 + %t559 = icmp eq ptr %t558, null + br i1 %t559, label %panic4975, label %ok4976 +panic4975: + call void @finch_panic(ptr @.str.3136, i64 2246, ptr @.str.3137) + unreachable +ok4976: + %t560 = getelementptr inbounds %S.gen.Gen, ptr %t558, i32 0, i32 5 + %t561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t560, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3138, i64 1, i64 0 }, ptr %a562 + call void @finch_str_join(ptr %a563, ptr %t560, ptr %a562) + %t564 = load { ptr, i64, i64 }, ptr %a563 + store { ptr, i64, i64 } %t557, ptr %a566 + store { ptr, i64, i64 } %t564, ptr %a567 + call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) + store { ptr, i64, i64 } %t557, ptr %a568 + call void @finch_str_drop(ptr %a568) + store { ptr, i64, i64 } %t564, ptr %a569 + call void @finch_str_drop(ptr %a569) + %t570 = load { ptr, i64, i64 }, ptr %a565 + store { ptr, i64, i64 } %t570, ptr %a572 + store { ptr, i64, i64 } { ptr @.str.3139, i64 1, i64 0 }, ptr %a573 + call void @finch_str_concat(ptr %a571, ptr %a572, ptr %a573) + store { ptr, i64, i64 } %t570, ptr %a574 + call void @finch_str_drop(ptr %a574) + %t575 = load { ptr, i64, i64 }, ptr %a571 + %t576 = load ptr, ptr %a1 + %t577 = icmp eq ptr %t576, null + br i1 %t577, label %panic4977, label %ok4978 +panic4977: + call void @finch_panic(ptr @.str.3140, i64 2246, ptr @.str.3141) + unreachable +ok4978: + %t578 = getelementptr inbounds %S.gen.Gen, ptr %t576, i32 0, i32 4 + %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %t578, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3142, i64 1, i64 0 }, ptr %a580 + call void @finch_str_join(ptr %a581, ptr %t578, ptr %a580) + %t582 = load { ptr, i64, i64 }, ptr %a581 + store { ptr, i64, i64 } %t575, ptr %a584 + store { ptr, i64, i64 } %t582, ptr %a585 + call void @finch_str_concat(ptr %a583, ptr %a584, ptr %a585) + store { ptr, i64, i64 } %t575, ptr %a586 + call void @finch_str_drop(ptr %a586) + store { ptr, i64, i64 } %t582, ptr %a587 + call void @finch_str_drop(ptr %a587) + %t588 = load { ptr, i64, i64 }, ptr %a583 + store { ptr, i64, i64 } %t588, ptr %a590 + store { ptr, i64, i64 } { ptr @.str.3143, i64 3, i64 0 }, ptr %a591 + call void @finch_str_concat(ptr %a589, ptr %a590, ptr %a591) + store { ptr, i64, i64 } %t588, ptr %a592 + call void @finch_str_drop(ptr %a592) + %t593 = load { ptr, i64, i64 }, ptr %a589 + %t594 = load i64, ptr %t500 + %t595 = add i64 %t594, 1 + call void @finch_arr_reserve(ptr %t499, i64 %t595, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t596 = load ptr, ptr %t499 + %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 + store { ptr, i64, i64 } %t593, ptr %t597 + store i64 %t595, ptr %t500 + call void @finch_str_drop(ptr %a481) + call void @finch.drop.arr_str(ptr %a190) + call void @finch.drop.arr_S_gen_Scope(ptr %a179) + call void @finch.drop.arr_str(ptr %a120) + call void @finch.drop.S_ast_Node(ptr %a119) + ret void +} + +define internal void @finch.gen.block(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a7 = alloca i64, align 16 + %a15 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load i1, ptr %a3 + br i1 %t4, label %then4979, label %endif4981 +then4979: + %t5 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t5) + br label %endif4981 +endif4981: + %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + store i64 0, ptr %a7 + br label %each.cond4982 +each.cond4982: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load i64, ptr %a7 + %t11 = icmp slt i64 %t10, %t9 + br i1 %t11, label %each.body4983, label %each.end4985 +each.body4983: + %t12 = load ptr, ptr %t6 + %t13 = getelementptr inbounds %S.ast.Node, ptr %t12, i64 %t10 + %t14 = load %S.ast.Node, ptr %t13 + store %S.ast.Node %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic4986, label %ok4987 +panic4986: + call void @finch_panic(ptr @.str.3144, i64 2256, ptr @.str.3145) + unreachable +ok4987: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 9 + %t19 = load i1, ptr %t18 + br i1 %t19, label %then4988, label %endif4990 +then4988: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Node, ptr %a15 + call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } { ptr @.str.3146, i64 66, i64 0 }) + br label %endif4990 +endif4990: + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Node, ptr %a15 + call void @finch.gen.stmt(ptr %t22, %S.ast.Node %t23) + br label %each.step4984 +each.step4984: + %t24 = load i64, ptr %a7 + %t25 = add i64 %t24, 1 + store i64 %t25, ptr %a7 + br label %each.cond4982 +each.end4985: + %t26 = load i1, ptr %a3 + br i1 %t26, label %then4991, label %endif4993 +then4991: + %t27 = load ptr, ptr %a1 + call void @finch.gen.endScope(ptr %t27) + br label %endif4993 +endif4993: + ret void +} + +define internal void @finch.copy.S_gen_Loop(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Loop, ptr %src + store %S.gen.Loop %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Loop, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Loop, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.drop.S_gen_Loop(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Loop, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Loop, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal void @finch.gen.stmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca %S.gen.Val, align 16 + %a78 = alloca %S.gen.Val, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca %S.gen.Val, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca i64, align 16 + %a189 = alloca %S.ast.Node, align 16 + %a190 = alloca %S.ast.Node, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca %S.gen.Loop, align 16 + %a269 = alloca %S.gen.Loop, align 16 + %a271 = alloca %S.gen.Loop, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t4 = load i64, ptr %t3 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic4994, label %ok4995 +panic4994: + call void @finch_panic(ptr @.str.3147, i64 2267, ptr @.str.3148) + unreachable +ok4995: + %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 37 + store i64 %t4, ptr %t7 + %t8 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t9 = load i64, ptr %t8 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic4996, label %ok4997 +panic4996: + call void @finch_panic(ptr @.str.3149, i64 2268, ptr @.str.3150) + unreachable +ok4997: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 38 + store i64 %t9, ptr %t12 + %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_copy(ptr %a16, ptr %a15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.3151, i64 5, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br i1 %t23, label %then4998, label %else4999 +then4998: + %t24 = load ptr, ptr %a1 + %t25 = load %S.ast.Node, ptr %a2 + call void @finch.gen.block(ptr %t24, %S.ast.Node %t25, i1 true) + br label %endif5000 +else4999: + %t26 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.3152, i64 4, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br i1 %t30, label %then5001, label %else5002 +then5001: + %t31 = load ptr, ptr %a1 + %t32 = load %S.ast.Node, ptr %a2 + call void @finch.gen.declStmt(ptr %t31, %S.ast.Node %t32) + br label %endif5003 +else5002: + %t33 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3153, i64 6, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %then5004, label %else5005 +then5004: + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Node, ptr %a2 + call void @finch.gen.assignStmt(ptr %t38, %S.ast.Node %t39) + br label %endif5006 +else5005: + %t40 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.3154, i64 4, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then5007, label %else5008 +then5007: + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 0, %t47 + br i1 %t48, label %range5010, label %inrange5011 +range5010: + call void @finch_panic_index(ptr @.str.3155, i64 2277, i64 0, i64 %t47) + unreachable +inrange5011: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 0 + %t51 = getelementptr inbounds %S.ast.Node, ptr %t50, i32 0, i32 0 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.3156, i64 2, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then5012, label %else5013 +then5012: + %t57 = load ptr, ptr %a1 + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = extractvalue { ptr, i64, i64 } %t60, 1 + %t62 = icmp uge i64 0, %t61 + br i1 %t62, label %range5015, label %inrange5016 +range5015: + call void @finch_panic_index(ptr @.str.3157, i64 2278, i64 0, i64 %t61) + unreachable +inrange5016: + %t63 = extractvalue { ptr, i64, i64 } %t60, 0 + %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 0 + %t65 = load %S.ast.Node, ptr %t64 + %t66 = call %S.gen.Val @finch.gen.orElse(ptr %t58, %S.ast.Node %t65, i1 true) + call void @finch.gen.release(ptr %t57, %S.gen.Val %t66) + store %S.gen.Val %t66, ptr %a67 + call void @finch.drop.S_gen_Val(ptr %a67) + br label %endif5014 +else5013: + %t68 = load ptr, ptr %a1 + %t69 = load ptr, ptr %a1 + %t70 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t71 = load { ptr, i64, i64 }, ptr %t70 + %t72 = extractvalue { ptr, i64, i64 } %t71, 1 + %t73 = icmp uge i64 0, %t72 + br i1 %t73, label %range5017, label %inrange5018 +range5017: + call void @finch_panic_index(ptr @.str.3158, i64 2280, i64 0, i64 %t72) + unreachable +inrange5018: + %t74 = extractvalue { ptr, i64, i64 } %t71, 0 + %t75 = getelementptr inbounds %S.ast.Node, ptr %t74, i64 0 + %t76 = load %S.ast.Node, ptr %t75 + %t77 = call %S.gen.Val @finch.gen.expr(ptr %t69, %S.ast.Node %t76) + call void @finch.gen.release(ptr %t68, %S.gen.Val %t77) + store %S.gen.Val %t77, ptr %a78 + call void @finch.drop.S_gen_Val(ptr %a78) + br label %endif5014 +endif5014: + br label %endif5009 +else5008: + %t79 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t79, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.3159, i64 5, i64 0 }, ptr %a81 + %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) + %t83 = icmp ne i32 %t82, 0 + br i1 %t83, label %then5019, label %else5020 +then5019: + %t84 = load ptr, ptr %a1 + %t85 = load %S.ast.Node, ptr %a2 + %t86 = call %S.gen.Val @finch.gen.matchGen(ptr %t84, %S.ast.Node %t85, i1 false) + store %S.gen.Val %t86, ptr %a87 + call void @finch.drop.S_gen_Val(ptr %a87) + br label %endif5021 +else5020: + %t88 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t88, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.3160, i64 2, i64 0 }, ptr %a90 + %t91 = call i32 @finch_str_eq(ptr %a89, ptr %a90) + %t92 = icmp ne i32 %t91, 0 + br i1 %t92, label %then5022, label %else5023 +then5022: + %t93 = load ptr, ptr %a1 + %t94 = load %S.ast.Node, ptr %a2 + call void @finch.gen.ifStmt(ptr %t93, %S.ast.Node %t94) + br label %endif5024 +else5023: + %t95 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.3161, i64 5, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then5025, label %else5026 +then5025: + %t100 = load ptr, ptr %a1 + %t101 = load %S.ast.Node, ptr %a2 + call void @finch.gen.whileStmt(ptr %t100, %S.ast.Node %t101) + br label %endif5027 +else5026: + %t102 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.3162, i64 3, i64 0 }, ptr %a104 + %t105 = call i32 @finch_str_eq(ptr %a103, ptr %a104) + %t106 = icmp ne i32 %t105, 0 + br i1 %t106, label %then5028, label %else5029 +then5028: + %t107 = load ptr, ptr %a1 + %t108 = load %S.ast.Node, ptr %a2 + call void @finch.gen.forStmt(ptr %t107, %S.ast.Node %t108) + br label %endif5030 +else5029: + %t109 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t109, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.3163, i64 4, i64 0 }, ptr %a111 + %t112 = call i32 @finch_str_eq(ptr %a110, ptr %a111) + %t113 = icmp ne i32 %t112, 0 + br i1 %t113, label %then5031, label %else5032 +then5031: + %t114 = load ptr, ptr %a1 + %t115 = load %S.ast.Node, ptr %a2 + call void @finch.gen.eachStmt(ptr %t114, %S.ast.Node %t115) + br label %endif5033 +else5032: + %t116 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t116, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.3164, i64 6, i64 0 }, ptr %a118 + %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) + %t120 = icmp ne i32 %t119, 0 + br i1 %t120, label %then5034, label %else5035 +then5034: + %t121 = load ptr, ptr %a1 + %t122 = load %S.ast.Node, ptr %a2 + call void @finch.gen.returnStmt(ptr %t121, %S.ast.Node %t122) + br label %endif5036 +else5035: + %t123 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t123, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.3165, i64 5, i64 0 }, ptr %a125 + %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) + %t127 = icmp ne i32 %t126, 0 + br i1 %t127, label %then5037, label %else5038 +then5037: + %t128 = load ptr, ptr %a1 + %t129 = icmp eq ptr %t128, null + br i1 %t129, label %panic5040, label %ok5041 +panic5040: + call void @finch_panic(ptr @.str.3166, i64 2295, ptr @.str.3167) + unreachable +ok5041: + %t130 = getelementptr inbounds %S.gen.Gen, ptr %t128, i32 0, i32 46 + %t131 = load i64, ptr %t130 + %t132 = icmp sgt i64 %t131, 0 + br i1 %t132, label %then5042, label %endif5044 +then5042: + %t133 = load ptr, ptr %a1 + %t134 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } { ptr @.str.3168, i64 33, i64 0 }) + br label %endif5044 +endif5044: + %t135 = load ptr, ptr %a1 + %t136 = icmp eq ptr %t135, null + br i1 %t136, label %panic5045, label %ok5046 +panic5045: + call void @finch_panic(ptr @.str.3169, i64 2298, ptr @.str.3170) + unreachable +ok5046: + %t137 = getelementptr inbounds %S.gen.Gen, ptr %t135, i32 0, i32 10 + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 + %t139 = load i64, ptr %t138 + %t140 = sub i64 %t139, 1 + store i64 %t140, ptr %a141 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic5047, label %ok5048 +panic5047: + call void @finch_panic(ptr @.str.3171, i64 2299, ptr @.str.3172) + unreachable +ok5048: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 10 + %t145 = load i64, ptr %a141 + %t146 = load { ptr, i64, i64 }, ptr %t144 + %t147 = extractvalue { ptr, i64, i64 } %t146, 1 + %t148 = icmp uge i64 %t145, %t147 + br i1 %t148, label %range5049, label %inrange5050 +range5049: + call void @finch_panic_index(ptr @.str.3173, i64 2299, i64 %t145, i64 %t147) + unreachable +inrange5050: + %t149 = extractvalue { ptr, i64, i64 } %t146, 0 + %t150 = getelementptr inbounds %S.gen.Scope, ptr %t149, i64 %t145 + %t151 = getelementptr inbounds %S.gen.Scope, ptr %t150, i32 0, i32 3 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = insertvalue %S.gen.Cleanup zeroinitializer, i1 true, 0 + %t154 = load ptr, ptr %a1 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic5051, label %ok5052 +panic5051: + call void @finch_panic(ptr @.str.3174, i64 2299, ptr @.str.3175) + unreachable +ok5052: + %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 10 + %t157 = load i64, ptr %a141 + %t158 = load { ptr, i64, i64 }, ptr %t156 + %t159 = extractvalue { ptr, i64, i64 } %t158, 1 + %t160 = icmp uge i64 %t157, %t159 + br i1 %t160, label %range5053, label %inrange5054 +range5053: + call void @finch_panic_index(ptr @.str.3176, i64 2299, i64 %t157, i64 %t159) + unreachable +inrange5054: + %t161 = extractvalue { ptr, i64, i64 } %t158, 0 + %t162 = getelementptr inbounds %S.gen.Scope, ptr %t161, i64 %t157 + %t163 = getelementptr inbounds %S.gen.Scope, ptr %t162, i32 0, i32 1 + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i32 0, i32 1 + %t165 = load i64, ptr %t164 + %t166 = insertvalue %S.gen.Cleanup %t153, i64 %t165, 1 + %t167 = load i64, ptr %t152 + %t168 = add i64 %t167, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t168, i64 ptrtoint (ptr getelementptr (%S.gen.Cleanup, ptr null, i32 1) to i64)) + %t169 = load ptr, ptr %t151 + %t170 = getelementptr inbounds %S.gen.Cleanup, ptr %t169, i64 %t167 + store %S.gen.Cleanup %t166, ptr %t170 + store i64 %t168, ptr %t152 + %t171 = load ptr, ptr %a1 + %t172 = icmp eq ptr %t171, null + br i1 %t172, label %panic5055, label %ok5056 +panic5055: + call void @finch_panic(ptr @.str.3177, i64 2300, ptr @.str.3178) + unreachable +ok5056: + %t173 = getelementptr inbounds %S.gen.Gen, ptr %t171, i32 0, i32 10 + %t174 = load i64, ptr %a141 + %t175 = load { ptr, i64, i64 }, ptr %t173 + %t176 = extractvalue { ptr, i64, i64 } %t175, 1 + %t177 = icmp uge i64 %t174, %t176 + br i1 %t177, label %range5057, label %inrange5058 +range5057: + call void @finch_panic_index(ptr @.str.3179, i64 2300, i64 %t174, i64 %t176) + unreachable +inrange5058: + %t178 = extractvalue { ptr, i64, i64 } %t175, 0 + %t179 = getelementptr inbounds %S.gen.Scope, ptr %t178, i64 %t174 + %t180 = getelementptr inbounds %S.gen.Scope, ptr %t179, i32 0, i32 1 + %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t180, i32 0, i32 1 + %t182 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t183 = load { ptr, i64, i64 }, ptr %t182 + %t184 = extractvalue { ptr, i64, i64 } %t183, 1 + %t185 = icmp uge i64 0, %t184 + br i1 %t185, label %range5059, label %inrange5060 +range5059: + call void @finch_panic_index(ptr @.str.3180, i64 2300, i64 0, i64 %t184) + unreachable +inrange5060: + %t186 = extractvalue { ptr, i64, i64 } %t183, 0 + %t187 = getelementptr inbounds %S.ast.Node, ptr %t186, i64 0 + %t188 = load %S.ast.Node, ptr %t187 + store %S.ast.Node %t188, ptr %a189 + call void @finch.copy.S_ast_Node(ptr %a190, ptr %a189) + %t191 = load %S.ast.Node, ptr %a190 + %t192 = load i64, ptr %t181 + %t193 = add i64 %t192, 1 + call void @finch_arr_reserve(ptr %t180, i64 %t193, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t194 = load ptr, ptr %t180 + %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t192 + store %S.ast.Node %t191, ptr %t195 + store i64 %t193, ptr %t181 + %t196 = load ptr, ptr %a1 + %t197 = icmp eq ptr %t196, null + br i1 %t197, label %panic5061, label %ok5062 +panic5061: + call void @finch_panic(ptr @.str.3181, i64 2301, ptr @.str.3182) + unreachable +ok5062: + %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 10 + %t199 = load i64, ptr %a141 + %t200 = load { ptr, i64, i64 }, ptr %t198 + %t201 = extractvalue { ptr, i64, i64 } %t200, 1 + %t202 = icmp uge i64 %t199, %t201 + br i1 %t202, label %range5063, label %inrange5064 +range5063: + call void @finch_panic_index(ptr @.str.3183, i64 2301, i64 %t199, i64 %t201) + unreachable +inrange5064: + %t203 = extractvalue { ptr, i64, i64 } %t200, 0 + %t204 = getelementptr inbounds %S.gen.Scope, ptr %t203, i64 %t199 + %t205 = getelementptr inbounds %S.gen.Scope, ptr %t204, i32 0, i32 2 + %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i32 0, i32 1 + %t207 = load ptr, ptr %a1 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic5065, label %ok5066 +panic5065: + call void @finch_panic(ptr @.str.3184, i64 2301, ptr @.str.3185) + unreachable +ok5066: + %t209 = getelementptr inbounds %S.gen.Gen, ptr %t207, i32 0, i32 25 + %t210 = load i64, ptr %t209 + %t211 = load i64, ptr %t206 + %t212 = add i64 %t211, 1 + call void @finch_arr_reserve(ptr %t205, i64 %t212, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t213 = load ptr, ptr %t205 + %t214 = getelementptr inbounds i64, ptr %t213, i64 %t211 + store i64 %t210, ptr %t214 + store i64 %t212, ptr %t206 + br label %endif5039 +else5038: + %t215 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t215, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.3186, i64 5, i64 0 }, ptr %a217 + %t218 = call i32 @finch_str_eq(ptr %a216, ptr %a217) + %t219 = icmp ne i32 %t218, 0 + br label %logic.from5067 +logic.from5067: + br i1 %t219, label %logic.end5069, label %logic.rhs5068 +logic.rhs5068: + %t220 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t220, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.3187, i64 8, i64 0 }, ptr %a222 + %t223 = call i32 @finch_str_eq(ptr %a221, ptr %a222) + %t224 = icmp ne i32 %t223, 0 + br label %logic.rend5070 +logic.rend5070: + br label %logic.end5069 +logic.end5069: + %t225 = phi i1 [ true, %logic.from5067 ], [ %t224, %logic.rend5070 ] + br i1 %t225, label %then5071, label %else5072 +then5071: + %t226 = load ptr, ptr %a1 + %t227 = icmp eq ptr %t226, null + br i1 %t227, label %panic5074, label %ok5075 +panic5074: + call void @finch_panic(ptr @.str.3188, i64 2303, ptr @.str.3189) + unreachable +ok5075: + %t228 = getelementptr inbounds %S.gen.Gen, ptr %t226, i32 0, i32 46 + %t229 = load i64, ptr %t228 + %t230 = icmp sgt i64 %t229, 0 + br i1 %t230, label %then5076, label %endif5078 +then5076: + %t231 = load ptr, ptr %a1 + %t232 = load %S.ast.Node, ptr %a2 + %t233 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.3190, i64 27, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + %t237 = load { ptr, i64, i64 }, ptr %a234 + call void @finch.gen.fail(ptr %t231, %S.ast.Node %t232, { ptr, i64, i64 } %t237) + store { ptr, i64, i64 } %t237, ptr %a238 + call void @finch_str_drop(ptr %a238) + br label %endif5078 +endif5078: + %t239 = load ptr, ptr %a1 + %t240 = icmp eq ptr %t239, null + br i1 %t240, label %panic5079, label %ok5080 +panic5079: + call void @finch_panic(ptr @.str.3191, i64 2306, ptr @.str.3192) + unreachable +ok5080: + %t241 = getelementptr inbounds %S.gen.Gen, ptr %t239, i32 0, i32 12 + %t242 = getelementptr inbounds { ptr, i64, i64 }, ptr %t241, i32 0, i32 1 + %t243 = load i64, ptr %t242 + %t244 = icmp eq i64 %t243, 0 + br i1 %t244, label %then5081, label %endif5083 +then5081: + %t245 = load ptr, ptr %a1 + %t246 = load %S.ast.Node, ptr %a2 + %t247 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t247, ptr %a249 + store { ptr, i64, i64 } { ptr @.str.3193, i64 31, i64 0 }, ptr %a250 + call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a248 + call void @finch.gen.fail(ptr %t245, %S.ast.Node %t246, { ptr, i64, i64 } %t251) + store { ptr, i64, i64 } %t251, ptr %a252 + call void @finch_str_drop(ptr %a252) + br label %endif5083 +endif5083: + %t253 = load ptr, ptr %a1 + %t254 = icmp eq ptr %t253, null + br i1 %t254, label %panic5084, label %ok5085 +panic5084: + call void @finch_panic(ptr @.str.3194, i64 2309, ptr @.str.3195) + unreachable +ok5085: + %t255 = getelementptr inbounds %S.gen.Gen, ptr %t253, i32 0, i32 12 + %t256 = load ptr, ptr %a1 + %t257 = icmp eq ptr %t256, null + br i1 %t257, label %panic5086, label %ok5087 +panic5086: + call void @finch_panic(ptr @.str.3196, i64 2309, ptr @.str.3197) + unreachable +ok5087: + %t258 = getelementptr inbounds %S.gen.Gen, ptr %t256, i32 0, i32 12 + %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 + %t260 = load i64, ptr %t259 + %t261 = sub i64 %t260, 1 + %t262 = load { ptr, i64, i64 }, ptr %t255 + %t263 = extractvalue { ptr, i64, i64 } %t262, 1 + %t264 = icmp uge i64 %t261, %t263 + br i1 %t264, label %range5088, label %inrange5089 +range5088: + call void @finch_panic_index(ptr @.str.3198, i64 2309, i64 %t261, i64 %t263) + unreachable +inrange5089: + %t265 = extractvalue { ptr, i64, i64 } %t262, 0 + %t266 = getelementptr inbounds %S.gen.Loop, ptr %t265, i64 %t261 + %t267 = load %S.gen.Loop, ptr %t266 + store %S.gen.Loop %t267, ptr %a268 + call void @finch.copy.S_gen_Loop(ptr %a269, ptr %a268) + %t270 = load %S.gen.Loop, ptr %a269 + store %S.gen.Loop %t270, ptr %a271 + %t272 = load ptr, ptr %a1 + %t273 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 3 + %t274 = load i64, ptr %t273 + call void @finch.gen.dropPending(ptr %t272, i64 %t274) + %t275 = load ptr, ptr %a1 + %t276 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 2 + %t277 = load i64, ptr %t276 + call void @finch.gen.unwind(ptr %t275, i64 %t277) + %t278 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t278, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.3199, i64 5, i64 0 }, ptr %a280 + %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) + %t282 = icmp ne i32 %t281, 0 + br i1 %t282, label %then5090, label %else5091 +then5090: + %t283 = load ptr, ptr %a1 + %t284 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 1 + %t285 = load { ptr, i64, i64 }, ptr %t284 + call void @finch.gen.br(ptr %t283, { ptr, i64, i64 } %t285) + br label %endif5092 +else5091: + %t286 = load ptr, ptr %a1 + %t287 = getelementptr inbounds %S.gen.Loop, ptr %a271, i32 0, i32 0 + %t288 = load { ptr, i64, i64 }, ptr %t287 + call void @finch.gen.br(ptr %t286, { ptr, i64, i64 } %t288) + br label %endif5092 +endif5092: + call void @finch.drop.S_gen_Loop(ptr %a271) + br label %endif5073 +else5072: + %t289 = load ptr, ptr %a1 + %t290 = load %S.ast.Node, ptr %a2 + %t291 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.3200, i64 18, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a292 + call void @finch.gen.fail(ptr %t289, %S.ast.Node %t290, { ptr, i64, i64 } %t295) + store { ptr, i64, i64 } %t295, ptr %a296 + call void @finch_str_drop(ptr %a296) + br label %endif5073 +endif5073: + br label %endif5039 +endif5039: + br label %endif5036 +endif5036: + br label %endif5033 +endif5033: + br label %endif5030 +endif5030: + br label %endif5027 +endif5027: + br label %endif5024 +endif5024: + br label %endif5021 +endif5021: + br label %endif5009 +endif5009: + br label %endif5006 +endif5006: + br label %endif5003 +endif5003: + br label %endif5000 +endif5000: + call void @finch_str_drop(ptr %a18) + ret void +} + +define internal void @finch.gen.declStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a15 = alloca %S.gen.Val, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca %S.gen.Val, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca %S.gen.Val, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca %S.gen.Val, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 + %t4 = load i1, ptr %t3 + %t5 = xor i1 %t4, true + br i1 %t5, label %then5093, label %endif5095 +then5093: + %t6 = load ptr, ptr %a1 + %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t8 = load { ptr, i64, i64 }, ptr %t7 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 0, %t9 + br i1 %t10, label %range5096, label %inrange5097 +range5096: + call void @finch_panic_index(ptr @.str.3201, i64 2324, i64 0, i64 %t9) + unreachable +inrange5097: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.ast.Node, ptr %t11, i64 0 + %t13 = load %S.ast.Node, ptr %t12 + %t14 = call %S.gen.Val @finch.gen.expr(ptr %t6, %S.ast.Node %t13) + store %S.gen.Val %t14, ptr %a15 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 + %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.3202, i64 4, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br i1 %t22, label %then5098, label %endif5100 +then5098: + %t23 = load ptr, ptr %a1 + %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t25 = load { ptr, i64, i64 }, ptr %t24 + %t26 = extractvalue { ptr, i64, i64 } %t25, 1 + %t27 = icmp uge i64 0, %t26 + br i1 %t27, label %range5101, label %inrange5102 +range5101: + call void @finch_panic_index(ptr @.str.3203, i64 2326, i64 0, i64 %t26) + unreachable +inrange5102: + %t28 = extractvalue { ptr, i64, i64 } %t25, 0 + %t29 = getelementptr inbounds %S.ast.Node, ptr %t28, i64 0 + %t30 = load %S.ast.Node, ptr %t29 + call void @finch.gen.fail(ptr %t23, %S.ast.Node %t30, { ptr, i64, i64 } { ptr @.str.3204, i64 46, i64 0 }) + br label %endif5100 +endif5100: + %t31 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3205, i64 4, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %then5103, label %endif5105 +then5103: + %t38 = load ptr, ptr %a1 + %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = extractvalue { ptr, i64, i64 } %t40, 1 + %t42 = icmp uge i64 0, %t41 + br i1 %t42, label %range5106, label %inrange5107 +range5106: + call void @finch_panic_index(ptr @.str.3206, i64 2329, i64 0, i64 %t41) + unreachable +inrange5107: + %t43 = extractvalue { ptr, i64, i64 } %t40, 0 + %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 0 + %t45 = load %S.ast.Node, ptr %t44 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store { ptr, i64, i64 } { ptr @.str.3207, i64 34, i64 0 }, ptr %a49 + store { ptr, i64, i64 } %t47, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.3208, i64 7, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + call void @finch.gen.fail(ptr %t38, %S.ast.Node %t45, { ptr, i64, i64 } %t56) + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_drop(ptr %a57) + br label %endif5105 +endif5105: + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Node, ptr %a2 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = getelementptr inbounds %S.gen.Val, ptr %a15, i32 0, i32 1 + %t63 = load %S.ast.Type, ptr %t62 + %t64 = load ptr, ptr %a1 + %t65 = load %S.gen.Val, ptr %a15 + %t66 = call { ptr, i64, i64 } @finch.gen.own(ptr %t64, %S.gen.Val %t65) + %t67 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t58, %S.ast.Node %t59, { ptr, i64, i64 } %t61, %S.ast.Type %t63, { ptr, i64, i64 } %t66, i1 false, i1 true) + store { ptr, i64, i64 } %t66, ptr %a68 + call void @finch_str_drop(ptr %a68) + store { ptr, i64, i64 } %t67, ptr %a69 + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_gen_Val(ptr %a15) + ret void +endif5095: + %t70 = load ptr, ptr %a1 + %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t72 = load %S.ast.Type, ptr %t71 + %t73 = load %S.ast.Node, ptr %a2 + %t74 = call %S.ast.Type @finch.gen.resolve(ptr %t70, %S.ast.Type %t72, %S.ast.Node %t73) + store %S.ast.Type %t74, ptr %a75 + %t76 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = load i64, ptr %t77 + %t79 = icmp eq i64 %t78, 0 + br i1 %t79, label %then5108, label %endif5110 +then5108: + %t80 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 0 + %t81 = load { ptr, i64, i64 }, ptr %t80 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.3209, i64 6, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.from5111 +logic.from5111: + br i1 %t85, label %logic.rhs5112, label %logic.end5113 +logic.rhs5112: + %t86 = load ptr, ptr %a1 + %t87 = load %S.ast.Type, ptr %a75 + %t88 = call i1 @finch.gen.hasDefaults(ptr %t86, %S.ast.Type %t87) + br label %logic.rend5114 +logic.rend5114: + br label %logic.end5113 +logic.end5113: + %t89 = phi i1 [ false, %logic.from5111 ], [ %t88, %logic.rend5114 ] + br i1 %t89, label %then5115, label %endif5117 +then5115: + store { ptr, i64, i64 } zeroinitializer, ptr %a90 + store { ptr, i64, i64 } zeroinitializer, ptr %a91 + %t92 = load ptr, ptr %a1 + %t93 = load ptr, ptr %a1 + %t94 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 3 + %t95 = load { ptr, i64, i64 }, ptr %t94 + %t96 = getelementptr inbounds %S.ast.Type, ptr %a75, i32 0, i32 2 + %t97 = load { ptr, i64, i64 }, ptr %t96 + %t98 = call i64 @finch.gen.findStruct(ptr %t93, { ptr, i64, i64 } %t95, { ptr, i64, i64 } %t97) + %t99 = load { ptr, i64, i64 }, ptr %a90 + %t100 = load { ptr, i64, i64 }, ptr %a91 + %t101 = load %S.ast.Node, ptr %a2 + %t102 = call %S.gen.Val @finch.gen.construct(ptr %t92, i64 %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t100, %S.ast.Node %t101) + store %S.gen.Val %t102, ptr %a103 + %t104 = load ptr, ptr %a1 + %t105 = load %S.ast.Node, ptr %a2 + %t106 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t107 = load { ptr, i64, i64 }, ptr %t106 + %t108 = load %S.ast.Type, ptr %a75 + %t109 = getelementptr inbounds %S.gen.Val, ptr %a103, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + %t111 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t104, %S.ast.Node %t105, { ptr, i64, i64 } %t107, %S.ast.Type %t108, { ptr, i64, i64 } %t110, i1 false, i1 true) + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + call void @finch.drop.S_gen_Val(ptr %a103) + call void @finch.drop.arr_str(ptr %a91) + call void @finch.drop.arr_S_ast_Node(ptr %a90) + call void @finch.drop.S_ast_Type(ptr %a75) + ret void +endif5117: + %t113 = load ptr, ptr %a1 + %t114 = load %S.ast.Node, ptr %a2 + %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t116 = load { ptr, i64, i64 }, ptr %t115 + %t117 = load %S.ast.Type, ptr %a75 + %t118 = load %S.ast.Type, ptr %a75 + %t119 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t118) + %t120 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t113, %S.ast.Node %t114, { ptr, i64, i64 } %t116, %S.ast.Type %t117, { ptr, i64, i64 } %t119, i1 false, i1 true) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t120, ptr %a122 + call void @finch_str_drop(ptr %a122) + call void @finch.drop.S_ast_Type(ptr %a75) + ret void +endif5110: + %t123 = load ptr, ptr %a1 + %t124 = load ptr, ptr %a1 + %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t126 = load { ptr, i64, i64 }, ptr %t125 + %t127 = extractvalue { ptr, i64, i64 } %t126, 1 + %t128 = icmp uge i64 0, %t127 + br i1 %t128, label %range5118, label %inrange5119 +range5118: + call void @finch_panic_index(ptr @.str.3210, i64 2346, i64 0, i64 %t127) + unreachable +inrange5119: + %t129 = extractvalue { ptr, i64, i64 } %t126, 0 + %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 0 + %t131 = load %S.ast.Node, ptr %t130 + %t132 = load %S.ast.Type, ptr %a75 + %t133 = call %S.gen.Val @finch.gen.exprWant(ptr %t124, %S.ast.Node %t131, %S.ast.Type %t132) + %t134 = load %S.ast.Type, ptr %a75 + %t135 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t136 = load { ptr, i64, i64 }, ptr %t135 + %t137 = extractvalue { ptr, i64, i64 } %t136, 1 + %t138 = icmp uge i64 0, %t137 + br i1 %t138, label %range5120, label %inrange5121 +range5120: + call void @finch_panic_index(ptr @.str.3211, i64 2346, i64 0, i64 %t137) + unreachable +inrange5121: + %t139 = extractvalue { ptr, i64, i64 } %t136, 0 + %t140 = getelementptr inbounds %S.ast.Node, ptr %t139, i64 0 + %t141 = load %S.ast.Node, ptr %t140 + %t142 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t143 = load { ptr, i64, i64 }, ptr %t142 + store { ptr, i64, i64 } { ptr @.str.3212, i64 1, i64 0 }, ptr %a145 + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a144 + store { ptr, i64, i64 } %t147, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.3213, i64 1, i64 0 }, ptr %a150 + call void @finch_str_concat(ptr %a148, ptr %a149, ptr %a150) + store { ptr, i64, i64 } %t147, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a148 + %t153 = call %S.gen.Val @finch.gen.coerce(ptr %t123, %S.gen.Val %t133, %S.ast.Type %t134, %S.ast.Node %t141, { ptr, i64, i64 } %t152) + store %S.gen.Val %t133, ptr %a154 + call void @finch.drop.S_gen_Val(ptr %a154) + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_drop(ptr %a155) + store %S.gen.Val %t153, ptr %a156 + %t157 = load ptr, ptr %a1 + %t158 = load %S.ast.Node, ptr %a2 + %t159 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + %t161 = load %S.ast.Type, ptr %a75 + %t162 = load ptr, ptr %a1 + %t163 = load %S.gen.Val, ptr %a156 + %t164 = call { ptr, i64, i64 } @finch.gen.own(ptr %t162, %S.gen.Val %t163) + %t165 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t160, %S.ast.Type %t161, { ptr, i64, i64 } %t164, i1 false, i1 true) + store { ptr, i64, i64 } %t164, ptr %a166 + call void @finch_str_drop(ptr %a166) + store { ptr, i64, i64 } %t165, ptr %a167 + call void @finch_str_drop(ptr %a167) + call void @finch.drop.S_gen_Val(ptr %a156) + call void @finch.drop.S_ast_Type(ptr %a75) + ret void +} + +define internal i1 @finch.gen.hasDefaults(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.gen.StructDef, align 16 + %a19 = alloca %S.gen.StructDef, align 16 + %a21 = alloca %S.gen.StructDef, align 16 + %a43 = alloca i64, align 16 + %a51 = alloca %S.ast.Node, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic5122, label %ok5123 +panic5122: + call void @finch_panic(ptr @.str.3214, i64 2351, ptr @.str.3215) + unreachable +ok5123: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 16 + %t6 = load ptr, ptr %a1 + %t7 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t8 = load { ptr, i64, i64 }, ptr %t7 + %t9 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t10 = load { ptr, i64, i64 }, ptr %t9 + %t11 = call i64 @finch.gen.findStruct(ptr %t6, { ptr, i64, i64 } %t8, { ptr, i64, i64 } %t10) + %t12 = load { ptr, i64, i64 }, ptr %t5 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range5124, label %inrange5125 +range5124: + call void @finch_panic_index(ptr @.str.3216, i64 2351, i64 %t11, i64 %t13) + unreachable +inrange5125: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.gen.StructDef, ptr %t15, i64 %t11 + %t17 = load %S.gen.StructDef, ptr %t16 + store %S.gen.StructDef %t17, ptr %a18 + call void @finch.copy.S_gen_StructDef(ptr %a19, ptr %a18) + %t20 = load %S.gen.StructDef, ptr %a19 + store %S.gen.StructDef %t20, ptr %a21 + %t22 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 2 + %t23 = load i1, ptr %t22 + br i1 %t23, label %then5126, label %endif5128 +then5126: + call void @finch.drop.S_gen_StructDef(ptr %a21) + ret i1 false +endif5128: + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic5129, label %ok5130 +panic5129: + call void @finch_panic(ptr @.str.3217, i64 2355, ptr @.str.3218) + unreachable +ok5130: + %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 13 + %t28 = load i64, ptr %t27 + %t29 = load { ptr, i64, i64 }, ptr %t26 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range5131, label %inrange5132 +range5131: + call void @finch_panic_index(ptr @.str.3219, i64 2355, i64 %t28, i64 %t30) + unreachable +inrange5132: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 + %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 + %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a21, i32 0, i32 14 + %t36 = load i64, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %t34 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range5133, label %inrange5134 +range5133: + call void @finch_panic_index(ptr @.str.3220, i64 2355, i64 %t36, i64 %t38) + unreachable +inrange5134: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i32 0, i32 9 + store i64 0, ptr %a43 + br label %each.cond5135 +each.cond5135: + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = load i64, ptr %a43 + %t47 = icmp slt i64 %t46, %t45 + br i1 %t47, label %each.body5136, label %each.end5138 +each.body5136: + %t48 = load ptr, ptr %t42 + %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i64 %t46 + %t50 = load %S.ast.Node, ptr %t49 + store %S.ast.Node %t50, ptr %a51 + %t52 = getelementptr inbounds %S.ast.Node, ptr %a51, i32 0, i32 9 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 + %t54 = load i64, ptr %t53 + %t55 = icmp sgt i64 %t54, 0 + br i1 %t55, label %then5139, label %endif5141 +then5139: + call void @finch.drop.S_gen_StructDef(ptr %a21) + ret i1 true +endif5141: + br label %each.step5137 +each.step5137: + %t56 = load i64, ptr %a43 + %t57 = add i64 %t56, 1 + store i64 %t57, ptr %a43 + br label %each.cond5135 +each.end5138: + call void @finch.drop.S_gen_StructDef(ptr %a21) + ret i1 false +} + +define internal void @finch.drop.S_gen_Place(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Place, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Place, ptr %a, i32 0, i32 1 + call void @finch.drop.S_ast_Type(ptr %t2) + ret void +} + +define internal void @finch.gen.assignStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.ast.Node, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca %S.ast.Node, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca i64, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca %S.gen.Var, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca %S.ast.Type, align 16 + %a105 = alloca i1, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca i64, align 16 + %a122 = alloca %S.ast.Type, align 16 + %a123 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.gen.Var, align 16 + %a127 = alloca %S.ast.Type, align 16 + %a128 = alloca %S.gen.Val, align 16 + %a141 = alloca %S.gen.Val, align 16 + %a152 = alloca %S.gen.Val, align 16 + %a158 = alloca i64, align 16 + %a164 = alloca %S.gen.Place, align 16 + %a179 = alloca %S.gen.Val, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca %S.gen.Val, align 16 + %a237 = alloca i64, align 16 + %a243 = alloca %S.gen.Place, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca %S.ast.Type, align 16 + %a257 = alloca %S.ast.Type, align 16 + %a260 = alloca %S.gen.Val, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca %S.gen.Val, align 16 + %a280 = alloca %S.gen.Val, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t4 = load { ptr, i64, i64 }, ptr %t3 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 0, %t5 + br i1 %t6, label %range5142, label %inrange5143 +range5142: + call void @finch_panic_index(ptr @.str.3221, i64 2364, i64 0, i64 %t5) + unreachable +inrange5143: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 + %t9 = load %S.ast.Node, ptr %t8 + store %S.ast.Node %t9, ptr %a10 + call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) + %t12 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t12, ptr %a13 + %t14 = load %S.ast.Node, ptr %a13 + %t15 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t14) + store { ptr, i64, i64 } %t15, ptr %a16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a16, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = icmp sgt i64 %t18, 0 + br i1 %t19, label %then5144, label %endif5146 +then5144: + %t20 = load ptr, ptr %a1 + %t21 = load { ptr, i64, i64 }, ptr %a16 + %t22 = call i64 @finch.gen.lookup(ptr %t20, { ptr, i64, i64 } %t21) + store i64 %t22, ptr %a23 + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, 0 + br label %logic.from5147 +logic.from5147: + br i1 %t25, label %logic.rhs5148, label %logic.end5149 +logic.rhs5148: + %t26 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.3222, i64 3, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend5150 +logic.rend5150: + br label %logic.end5149 +logic.end5149: + %t32 = phi i1 [ false, %logic.from5147 ], [ %t31, %logic.rend5150 ] + br i1 %t32, label %then5151, label %endif5153 +then5151: + %t33 = load ptr, ptr %a1 + %t34 = load %S.ast.Node, ptr %a2 + %t35 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3223, i64 28, i64 0 }, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a36 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.3224, i64 18, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t44, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t44, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.3225, i64 8, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_drop(ptr %a56) + br label %endif5153 +endif5153: + %t57 = load i64, ptr %a23 + %t58 = icmp sge i64 %t57, 0 + br label %logic.from5154 +logic.from5154: + br i1 %t58, label %logic.rhs5155, label %logic.end5156 +logic.rhs5155: + %t59 = load ptr, ptr %a1 + %t60 = load i64, ptr %a23 + %t61 = call %S.gen.Var @finch.gen.varAt(ptr %t59, i64 %t60) + %t62 = extractvalue %S.gen.Var %t61, 3 + store %S.gen.Var %t61, ptr %a63 + call void @finch.drop.S_gen_Var(ptr %a63) + br label %logic.rend5157 +logic.rend5157: + br label %logic.end5156 +logic.end5156: + %t64 = phi i1 [ false, %logic.from5154 ], [ %t62, %logic.rend5157 ] + br i1 %t64, label %then5158, label %endif5160 +then5158: + %t65 = load ptr, ptr %a1 + %t66 = load %S.ast.Node, ptr %a2 + %t67 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3226, i64 19, i64 0 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.3227, i64 18, i64 0 }, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t71, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.fail(ptr %t65, %S.ast.Node %t66, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t76, ptr %a77 + call void @finch_str_drop(ptr %a77) + br label %endif5160 +endif5160: + br label %endif5146 +endif5146: + store { ptr, i64, i64 } { ptr @.str.3228, i64 9, i64 0 }, ptr %a78 + %t79 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3229, i64 3, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %then5161, label %endif5163 +then5161: + %t85 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3230, i64 1, i64 0 }, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.3231, i64 1, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + %t95 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t94, ptr %a78 + store { ptr, i64, i64 } %t95, ptr %a96 + call void @finch_str_drop(ptr %a96) + br label %endif5163 +endif5163: + %t97 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t98 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t98, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.3232, i64 1, i64 0 }, ptr %a100 + %t101 = call i32 @finch_str_eq(ptr %a99, ptr %a100) + %t102 = icmp ne i32 %t101, 0 + br i1 %t102, label %then5164, label %endif5166 +then5164: + %t103 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3233, i64 4, i64 0 }) + store %S.ast.Type %t103, ptr %a104 + store i1 false, ptr %a105 + %t106 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.3234, i64 3, i64 0 }, ptr %a109 + %t110 = call i32 @finch_str_eq(ptr %a108, ptr %a109) + %t111 = icmp ne i32 %t110, 0 + br i1 %t111, label %then5167, label %endif5169 +then5167: + %t112 = load ptr, ptr %a1 + %t113 = load { ptr, i64, i64 }, ptr %a16 + %t114 = call i64 @finch.gen.lookup(ptr %t112, { ptr, i64, i64 } %t113) + store i64 %t114, ptr %a115 + %t116 = load i64, ptr %a115 + %t117 = icmp sge i64 %t116, 0 + br i1 %t117, label %then5170, label %endif5172 +then5170: + %t118 = load ptr, ptr %a1 + %t119 = load i64, ptr %a115 + %t120 = call %S.gen.Var @finch.gen.varAt(ptr %t118, i64 %t119) + %t121 = extractvalue %S.gen.Var %t120, 1 + store %S.ast.Type %t121, ptr %a122 + call void @finch.copy.S_ast_Type(ptr %a123, ptr %a122) + %t124 = load %S.ast.Type, ptr %a123 + store %S.gen.Var %t120, ptr %a125 + call void @finch.drop.S_gen_Var(ptr %a125) + %t126 = load %S.ast.Type, ptr %a104 + store %S.ast.Type %t124, ptr %a104 + store %S.ast.Type %t126, ptr %a127 + call void @finch.drop.S_ast_Type(ptr %a127) + store i1 true, ptr %a105 + br label %endif5172 +endif5172: + br label %endif5169 +endif5169: + store %S.gen.Val zeroinitializer, ptr %a128 + %t129 = load i1, ptr %a105 + br i1 %t129, label %then5173, label %else5174 +then5173: + %t130 = load ptr, ptr %a1 + %t131 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t132 = load { ptr, i64, i64 }, ptr %t131 + %t133 = extractvalue { ptr, i64, i64 } %t132, 1 + %t134 = icmp uge i64 1, %t133 + br i1 %t134, label %range5176, label %inrange5177 +range5176: + call void @finch_panic_index(ptr @.str.3235, i64 2392, i64 1, i64 %t133) + unreachable +inrange5177: + %t135 = extractvalue { ptr, i64, i64 } %t132, 0 + %t136 = getelementptr inbounds %S.ast.Node, ptr %t135, i64 1 + %t137 = load %S.ast.Node, ptr %t136 + %t138 = load %S.ast.Type, ptr %a104 + %t139 = call %S.gen.Val @finch.gen.exprWant(ptr %t130, %S.ast.Node %t137, %S.ast.Type %t138) + %t140 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t139, ptr %a128 + store %S.gen.Val %t140, ptr %a141 + call void @finch.drop.S_gen_Val(ptr %a141) + br label %endif5175 +else5174: + %t142 = load ptr, ptr %a1 + %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t144 = load { ptr, i64, i64 }, ptr %t143 + %t145 = extractvalue { ptr, i64, i64 } %t144, 1 + %t146 = icmp uge i64 1, %t145 + br i1 %t146, label %range5178, label %inrange5179 +range5178: + call void @finch_panic_index(ptr @.str.3236, i64 2394, i64 1, i64 %t145) + unreachable +inrange5179: + %t147 = extractvalue { ptr, i64, i64 } %t144, 0 + %t148 = getelementptr inbounds %S.ast.Node, ptr %t147, i64 1 + %t149 = load %S.ast.Node, ptr %t148 + %t150 = call %S.gen.Val @finch.gen.expr(ptr %t142, %S.ast.Node %t149) + %t151 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t150, ptr %a128 + store %S.gen.Val %t151, ptr %a152 + call void @finch.drop.S_gen_Val(ptr %a152) + br label %endif5175 +endif5175: + %t153 = load ptr, ptr %a1 + %t154 = icmp eq ptr %t153, null + br i1 %t154, label %panic5180, label %ok5181 +panic5180: + call void @finch_panic(ptr @.str.3237, i64 2396, ptr @.str.3238) + unreachable +ok5181: + %t155 = getelementptr inbounds %S.gen.Gen, ptr %t153, i32 0, i32 11 + %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i32 0, i32 1 + %t157 = load i64, ptr %t156 + store i64 %t157, ptr %a158 + %t159 = load ptr, ptr %a1 + %t160 = load %S.gen.Val, ptr %a128 + call void @finch.gen.hold(ptr %t159, %S.gen.Val %t160) + %t161 = load ptr, ptr %a1 + %t162 = load %S.ast.Node, ptr %a13 + %t163 = call %S.gen.Place @finch.gen.place(ptr %t161, %S.ast.Node %t162, i1 true) + store %S.gen.Place %t163, ptr %a164 + %t165 = load ptr, ptr %a1 + %t166 = load %S.gen.Val, ptr %a128 + %t167 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t168 = load %S.ast.Type, ptr %t167 + %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t170 = load { ptr, i64, i64 }, ptr %t169 + %t171 = extractvalue { ptr, i64, i64 } %t170, 1 + %t172 = icmp uge i64 1, %t171 + br i1 %t172, label %range5182, label %inrange5183 +range5182: + call void @finch_panic_index(ptr @.str.3239, i64 2399, i64 1, i64 %t171) + unreachable +inrange5183: + %t173 = extractvalue { ptr, i64, i64 } %t170, 0 + %t174 = getelementptr inbounds %S.ast.Node, ptr %t173, i64 1 + %t175 = load %S.ast.Node, ptr %t174 + %t176 = load { ptr, i64, i64 }, ptr %a78 + %t177 = call %S.gen.Val @finch.gen.coerce(ptr %t165, %S.gen.Val %t166, %S.ast.Type %t168, %S.ast.Node %t175, { ptr, i64, i64 } %t176) + %t178 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t177, ptr %a128 + store %S.gen.Val %t178, ptr %a179 + call void @finch.drop.S_gen_Val(ptr %a179) + %t180 = load ptr, ptr %a1 + %t181 = load %S.gen.Val, ptr %a128 + %t182 = call { ptr, i64, i64 } @finch.gen.own(ptr %t180, %S.gen.Val %t181) + store { ptr, i64, i64 } %t182, ptr %a183 + %t184 = load ptr, ptr %a1 + %t185 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t186 = load %S.ast.Type, ptr %t185 + %t187 = call i1 @finch.gen.owning(ptr %t184, %S.ast.Type %t186) + br i1 %t187, label %then5184, label %else5185 +then5184: + %t188 = load ptr, ptr %a1 + %t189 = load ptr, ptr %a1 + %t190 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t191 = load %S.ast.Type, ptr %t190 + %t192 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t189, %S.ast.Type %t191) + %t193 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 + %t194 = load { ptr, i64, i64 }, ptr %t193 + %t195 = call { ptr, i64, i64 } @finch.gen.load(ptr %t188, { ptr, i64, i64 } %t192, { ptr, i64, i64 } %t194) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + store { ptr, i64, i64 } %t195, ptr %a197 + %t198 = load ptr, ptr %a1 + %t199 = load ptr, ptr %a1 + %t200 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t201 = load %S.ast.Type, ptr %t200 + %t202 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t199, %S.ast.Type %t201) + %t203 = load { ptr, i64, i64 }, ptr %a183 + %t204 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 + %t205 = load { ptr, i64, i64 }, ptr %t204 + call void @finch.gen.store(ptr %t198, { ptr, i64, i64 } %t202, { ptr, i64, i64 } %t203, { ptr, i64, i64 } %t205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load ptr, ptr %a1 + %t208 = load { ptr, i64, i64 }, ptr %a197 + %t209 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t210 = load %S.ast.Type, ptr %t209 + call void @finch.gen.dropValue(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t210) + call void @finch_str_drop(ptr %a197) + br label %endif5186 +else5185: + %t211 = load ptr, ptr %a1 + %t212 = load ptr, ptr %a1 + %t213 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 1 + %t214 = load %S.ast.Type, ptr %t213 + %t215 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t212, %S.ast.Type %t214) + %t216 = load { ptr, i64, i64 }, ptr %a183 + %t217 = getelementptr inbounds %S.gen.Place, ptr %a164, i32 0, i32 0 + %t218 = load { ptr, i64, i64 }, ptr %t217 + call void @finch.gen.store(ptr %t211, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + br label %endif5186 +endif5186: + %t220 = load ptr, ptr %a1 + %t221 = load i64, ptr %a158 + call void @finch.gen.heldEnd(ptr %t220, i64 %t221) + call void @finch_str_drop(ptr %a183) + call void @finch.drop.S_gen_Place(ptr %a164) + call void @finch.drop.S_gen_Val(ptr %a128) + call void @finch.drop.S_ast_Type(ptr %a104) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a16) + call void @finch.drop.S_ast_Node(ptr %a13) + ret void +endif5166: + %t222 = load ptr, ptr %a1 + %t223 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t224 = load { ptr, i64, i64 }, ptr %t223 + %t225 = extractvalue { ptr, i64, i64 } %t224, 1 + %t226 = icmp uge i64 1, %t225 + br i1 %t226, label %range5187, label %inrange5188 +range5187: + call void @finch_panic_index(ptr @.str.3240, i64 2411, i64 1, i64 %t225) + unreachable +inrange5188: + %t227 = extractvalue { ptr, i64, i64 } %t224, 0 + %t228 = getelementptr inbounds %S.ast.Node, ptr %t227, i64 1 + %t229 = load %S.ast.Node, ptr %t228 + %t230 = call %S.gen.Val @finch.gen.expr(ptr %t222, %S.ast.Node %t229) + store %S.gen.Val %t230, ptr %a231 + %t232 = load ptr, ptr %a1 + %t233 = icmp eq ptr %t232, null + br i1 %t233, label %panic5189, label %ok5190 +panic5189: + call void @finch_panic(ptr @.str.3241, i64 2412, ptr @.str.3242) + unreachable +ok5190: + %t234 = getelementptr inbounds %S.gen.Gen, ptr %t232, i32 0, i32 11 + %t235 = getelementptr inbounds { ptr, i64, i64 }, ptr %t234, i32 0, i32 1 + %t236 = load i64, ptr %t235 + store i64 %t236, ptr %a237 + %t238 = load ptr, ptr %a1 + %t239 = load %S.gen.Val, ptr %a231 + call void @finch.gen.hold(ptr %t238, %S.gen.Val %t239) + %t240 = load ptr, ptr %a1 + %t241 = load %S.ast.Node, ptr %a13 + %t242 = call %S.gen.Place @finch.gen.place(ptr %t240, %S.ast.Node %t241, i1 true) + store %S.gen.Place %t242, ptr %a243 + %t244 = load ptr, ptr %a1 + %t245 = load ptr, ptr %a1 + %t246 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t247 = load %S.ast.Type, ptr %t246 + %t248 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t245, %S.ast.Type %t247) + %t249 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 0 + %t250 = load { ptr, i64, i64 }, ptr %t249 + %t251 = call { ptr, i64, i64 } @finch.gen.load(ptr %t244, { ptr, i64, i64 } %t248, { ptr, i64, i64 } %t250) + store { ptr, i64, i64 } %t248, ptr %a252 + call void @finch_str_drop(ptr %a252) + %t253 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t251, 0 + %t254 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t255 = load %S.ast.Type, ptr %t254 + store %S.ast.Type %t255, ptr %a256 + call void @finch.copy.S_ast_Type(ptr %a257, ptr %a256) + %t258 = load %S.ast.Type, ptr %a257 + %t259 = insertvalue %S.gen.Val %t253, %S.ast.Type %t258, 1 + store %S.gen.Val %t259, ptr %a260 + %t261 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t262 = load { ptr, i64, i64 }, ptr %t261 + store { ptr, i64, i64 } %t262, ptr %a263 + call void @finch_str_sub(ptr %a264, ptr %a263, i64 0, i64 1, ptr @.str.3243, i64 2416) + %t265 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t265, ptr %a266 + %t267 = load ptr, ptr %a1 + %t268 = load ptr, ptr %a1 + %t269 = load { ptr, i64, i64 }, ptr %a266 + %t270 = load %S.gen.Val, ptr %a260 + %t271 = load %S.gen.Val, ptr %a231 + %t272 = load %S.ast.Node, ptr %a2 + %t273 = call %S.gen.Val @finch.gen.arith(ptr %t268, { ptr, i64, i64 } %t269, %S.gen.Val %t270, %S.gen.Val %t271, %S.ast.Node %t272) + %t274 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t275 = load %S.ast.Type, ptr %t274 + %t276 = load %S.ast.Node, ptr %a2 + %t277 = load { ptr, i64, i64 }, ptr %a78 + %t278 = call %S.gen.Val @finch.gen.coerce(ptr %t267, %S.gen.Val %t273, %S.ast.Type %t275, %S.ast.Node %t276, { ptr, i64, i64 } %t277) + store %S.gen.Val %t273, ptr %a279 + call void @finch.drop.S_gen_Val(ptr %a279) + store %S.gen.Val %t278, ptr %a280 + %t281 = load ptr, ptr %a1 + %t282 = load %S.gen.Val, ptr %a280 + %t283 = call { ptr, i64, i64 } @finch.gen.own(ptr %t281, %S.gen.Val %t282) + store { ptr, i64, i64 } %t283, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = load ptr, ptr %a1 + %t287 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t288 = load %S.ast.Type, ptr %t287 + %t289 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t286, %S.ast.Type %t288) + %t290 = load { ptr, i64, i64 }, ptr %a284 + %t291 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 0 + %t292 = load { ptr, i64, i64 }, ptr %t291 + call void @finch.gen.store(ptr %t285, { ptr, i64, i64 } %t289, { ptr, i64, i64 } %t290, { ptr, i64, i64 } %t292) + store { ptr, i64, i64 } %t289, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load ptr, ptr %a1 + %t295 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t296 = load %S.ast.Type, ptr %t295 + %t297 = call i1 @finch.gen.owning(ptr %t294, %S.ast.Type %t296) + br i1 %t297, label %then5191, label %endif5193 +then5191: + %t298 = load ptr, ptr %a1 + %t299 = getelementptr inbounds %S.gen.Val, ptr %a260, i32 0, i32 0 + %t300 = load { ptr, i64, i64 }, ptr %t299 + %t301 = getelementptr inbounds %S.gen.Place, ptr %a243, i32 0, i32 1 + %t302 = load %S.ast.Type, ptr %t301 + call void @finch.gen.dropValue(ptr %t298, { ptr, i64, i64 } %t300, %S.ast.Type %t302) + br label %endif5193 +endif5193: + %t303 = load ptr, ptr %a1 + %t304 = load i64, ptr %a237 + call void @finch.gen.heldEnd(ptr %t303, i64 %t304) + call void @finch_str_drop(ptr %a284) + call void @finch.drop.S_gen_Val(ptr %a280) + call void @finch_str_drop(ptr %a266) + call void @finch.drop.S_gen_Val(ptr %a260) + call void @finch.drop.S_gen_Place(ptr %a243) + call void @finch.drop.S_gen_Val(ptr %a231) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a16) + call void @finch.drop.S_ast_Node(ptr %a13) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.condition(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Node, ptr %a2 + %t6 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t5) + %t7 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3244, i64 4, i64 0 }) + %t8 = load %S.ast.Node, ptr %a2 + %t9 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t6, %S.ast.Type %t7, %S.ast.Node %t8, { ptr, i64, i64 } { ptr @.str.3245, i64 11, i64 0 }) + store %S.gen.Val %t6, ptr %a10 + call void @finch.drop.S_gen_Val(ptr %a10) + store %S.ast.Type %t7, ptr %a11 + call void @finch.drop.S_ast_Type(ptr %a11) + %t12 = extractvalue %S.gen.Val %t9, 0 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store %S.gen.Val %t9, ptr %a16 + call void @finch.drop.S_gen_Val(ptr %a16) + ret { ptr, i64, i64 } %t15 +} + +define internal void @finch.gen.ifStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i1, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t5 = load { ptr, i64, i64 }, ptr %t4 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 0, %t6 + br i1 %t7, label %range5194, label %inrange5195 +range5194: + call void @finch_panic_index(ptr @.str.3246, i64 2431, i64 0, i64 %t6) + unreachable +inrange5195: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 + %t10 = load %S.ast.Node, ptr %t9 + %t11 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t3, %S.ast.Node %t10) + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t13, { ptr, i64, i64 } { ptr @.str.3247, i64 4, i64 0 }) + store { ptr, i64, i64 } %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t16, { ptr, i64, i64 } { ptr @.str.3248, i64 4, i64 0 }) + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load ptr, ptr %a1 + %t20 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t19, { ptr, i64, i64 } { ptr @.str.3249, i64 5, i64 0 }) + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = icmp sgt i64 %t24, 2 + br i1 %t25, label %then5196, label %else5197 +then5196: + %t26 = load ptr, ptr %a1 + %t27 = load { ptr, i64, i64 }, ptr %a12 + %t28 = load { ptr, i64, i64 }, ptr %a15 + %t29 = load { ptr, i64, i64 }, ptr %a18 + call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t27, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29) + br label %endif5198 +else5197: + %t30 = load ptr, ptr %a1 + %t31 = load { ptr, i64, i64 }, ptr %a12 + %t32 = load { ptr, i64, i64 }, ptr %a15 + %t33 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.condBr(ptr %t30, { ptr, i64, i64 } %t31, { ptr, i64, i64 } %t32, { ptr, i64, i64 } %t33) + br label %endif5198 +endif5198: + %t34 = load ptr, ptr %a1 + %t35 = load { ptr, i64, i64 }, ptr %a15 + call void @finch.gen.label(ptr %t34, { ptr, i64, i64 } %t35) + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 1, %t39 + br i1 %t40, label %range5199, label %inrange5200 +range5199: + call void @finch_panic_index(ptr @.str.3250, i64 2441, i64 1, i64 %t39) + unreachable +inrange5200: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 1 + %t43 = load %S.ast.Node, ptr %t42 + call void @finch.gen.block(ptr %t36, %S.ast.Node %t43, i1 true) + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic5201, label %ok5202 +panic5201: + call void @finch_panic(ptr @.str.3251, i64 2442, ptr @.str.3252) + unreachable +ok5202: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 9 + %t47 = load i1, ptr %t46 + %t48 = xor i1 %t47, true + store i1 %t48, ptr %a49 + %t50 = load ptr, ptr %a1 + %t51 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.br(ptr %t50, { ptr, i64, i64 } %t51) + %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i32 0, i32 1 + %t54 = load i64, ptr %t53 + %t55 = icmp sgt i64 %t54, 2 + br i1 %t55, label %then5203, label %else5204 +then5203: + %t56 = load ptr, ptr %a1 + %t57 = load { ptr, i64, i64 }, ptr %a18 + call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = extractvalue { ptr, i64, i64 } %t60, 1 + %t62 = icmp uge i64 2, %t61 + br i1 %t62, label %range5206, label %inrange5207 +range5206: + call void @finch_panic_index(ptr @.str.3253, i64 2446, i64 2, i64 %t61) + unreachable +inrange5207: + %t63 = extractvalue { ptr, i64, i64 } %t60, 0 + %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 2 + %t65 = load %S.ast.Node, ptr %t64 + call void @finch.gen.stmt(ptr %t58, %S.ast.Node %t65) + %t66 = load i1, ptr %a49 + br label %logic.from5208 +logic.from5208: + br i1 %t66, label %logic.end5210, label %logic.rhs5209 +logic.rhs5209: + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic5211, label %ok5212 +panic5211: + call void @finch_panic(ptr @.str.3254, i64 2447, ptr @.str.3255) + unreachable +ok5212: + %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 9 + %t70 = load i1, ptr %t69 + %t71 = xor i1 %t70, true + br label %logic.rend5213 +logic.rend5213: + br label %logic.end5210 +logic.end5210: + %t72 = phi i1 [ true, %logic.from5208 ], [ %t71, %logic.rend5213 ] + store i1 %t72, ptr %a49 + %t73 = load ptr, ptr %a1 + %t74 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.br(ptr %t73, { ptr, i64, i64 } %t74) + br label %endif5205 +else5204: + store i1 true, ptr %a49 + br label %endif5205 +endif5205: + %t75 = load i1, ptr %a49 + br i1 %t75, label %then5214, label %endif5216 +then5214: + %t76 = load ptr, ptr %a1 + %t77 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.gen.label(ptr %t76, { ptr, i64, i64 } %t77) + br label %endif5216 +endif5216: + call void @finch_str_drop(ptr %a21) + call void @finch_str_drop(ptr %a18) + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a12) + ret void +} + +define internal void @finch.gen.whileStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca i1, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca i1, align 16 + %a118 = alloca %S.gen.Loop, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t3, { ptr, i64, i64 } { ptr @.str.3256, i64 10, i64 0 }) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t6, { ptr, i64, i64 } { ptr @.str.3257, i64 10, i64 0 }) + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t9, { ptr, i64, i64 } { ptr @.str.3258, i64 9, i64 0 }) + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load ptr, ptr %a1 + %t13 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.br(ptr %t12, { ptr, i64, i64 } %t13) + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.label(ptr %t14, { ptr, i64, i64 } %t15) + %t16 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 0, %t18 + br i1 %t19, label %range5217, label %inrange5218 +range5217: + call void @finch_panic_index(ptr @.str.3259, i64 2463, i64 0, i64 %t18) + unreachable +inrange5218: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.ast.Node, ptr %t20, i64 0 + %t22 = getelementptr inbounds %S.ast.Node, ptr %t21, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.3260, i64 4, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.from5219 +logic.from5219: + br i1 %t27, label %logic.rhs5220, label %logic.end5221 +logic.rhs5220: + %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t29 = load { ptr, i64, i64 }, ptr %t28 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 0, %t30 + br i1 %t31, label %range5222, label %inrange5223 +range5222: + call void @finch_panic_index(ptr @.str.3261, i64 2463, i64 0, i64 %t30) + unreachable +inrange5223: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i64 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i32 0, i32 4 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.3262, i64 4, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.rend5224 +logic.rend5224: + br label %logic.end5221 +logic.end5221: + %t40 = phi i1 [ false, %logic.from5219 ], [ %t39, %logic.rend5224 ] + store i1 %t40, ptr %a41 + %t42 = load ptr, ptr %a1 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 0, %t45 + br i1 %t46, label %range5225, label %inrange5226 +range5225: + call void @finch_panic_index(ptr @.str.3263, i64 2464, i64 0, i64 %t45) + unreachable +inrange5226: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 + %t49 = load %S.ast.Node, ptr %t48 + %t50 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t42, %S.ast.Node %t49) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load i1, ptr %a41 + br i1 %t52, label %then5227, label %else5228 +then5227: + %t53 = load ptr, ptr %a1 + %t54 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.br(ptr %t53, { ptr, i64, i64 } %t54) + br label %endif5229 +else5228: + %t55 = load ptr, ptr %a1 + %t56 = load { ptr, i64, i64 }, ptr %a51 + %t57 = load { ptr, i64, i64 }, ptr %a8 + %t58 = load { ptr, i64, i64 }, ptr %a11 + call void @finch.gen.condBr(ptr %t55, { ptr, i64, i64 } %t56, { ptr, i64, i64 } %t57, { ptr, i64, i64 } %t58) + br label %endif5229 +endif5229: + %t59 = load ptr, ptr %a1 + %t60 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.label(ptr %t59, { ptr, i64, i64 } %t60) + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic5230, label %ok5231 +panic5230: + call void @finch_panic(ptr @.str.3264, i64 2471, ptr @.str.3265) + unreachable +ok5231: + %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 12 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + %t65 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_copy(ptr %a67, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + %t69 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t68, 0 + %t70 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_copy(ptr %a72, ptr %a71) + %t73 = load { ptr, i64, i64 }, ptr %a72 + %t74 = insertvalue %S.gen.Loop %t69, { ptr, i64, i64 } %t73, 1 + %t75 = load ptr, ptr %a1 + %t76 = icmp eq ptr %t75, null + br i1 %t76, label %panic5232, label %ok5233 +panic5232: + call void @finch_panic(ptr @.str.3266, i64 2471, ptr @.str.3267) + unreachable +ok5233: + %t77 = getelementptr inbounds %S.gen.Gen, ptr %t75, i32 0, i32 10 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i32 0, i32 1 + %t79 = load i64, ptr %t78 + %t80 = insertvalue %S.gen.Loop %t74, i64 %t79, 2 + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic5234, label %ok5235 +panic5234: + call void @finch_panic(ptr @.str.3268, i64 2471, ptr @.str.3269) + unreachable +ok5235: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 11 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i32 0, i32 1 + %t85 = load i64, ptr %t84 + %t86 = insertvalue %S.gen.Loop %t80, i64 %t85, 3 + %t87 = load i64, ptr %t64 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %t63, i64 %t88, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %t63 + %t90 = getelementptr inbounds %S.gen.Loop, ptr %t89, i64 %t87 + store %S.gen.Loop %t86, ptr %t90 + store i64 %t88, ptr %t64 + %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t92 = load { ptr, i64, i64 }, ptr %t91 + %t93 = extractvalue { ptr, i64, i64 } %t92, 1 + %t94 = icmp uge i64 1, %t93 + br i1 %t94, label %range5236, label %inrange5237 +range5236: + call void @finch_panic_index(ptr @.str.3270, i64 2472, i64 1, i64 %t93) + unreachable +inrange5237: + %t95 = extractvalue { ptr, i64, i64 } %t92, 0 + %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 1 + %t97 = load %S.ast.Node, ptr %t96 + %t98 = call i1 @finch.gen.countBreaks(%S.ast.Node %t97) + store i1 %t98, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t102 = load { ptr, i64, i64 }, ptr %t101 + %t103 = extractvalue { ptr, i64, i64 } %t102, 1 + %t104 = icmp uge i64 1, %t103 + br i1 %t104, label %range5238, label %inrange5239 +range5238: + call void @finch_panic_index(ptr @.str.3271, i64 2473, i64 1, i64 %t103) + unreachable +inrange5239: + %t105 = extractvalue { ptr, i64, i64 } %t102, 0 + %t106 = getelementptr inbounds %S.ast.Node, ptr %t105, i64 1 + %t107 = load %S.ast.Node, ptr %t106 + call void @finch.gen.block(ptr %t100, %S.ast.Node %t107, i1 true) + %t108 = load ptr, ptr %a1 + %t109 = icmp eq ptr %t108, null + br i1 %t109, label %panic5240, label %ok5241 +panic5240: + call void @finch_panic(ptr @.str.3272, i64 2474, ptr @.str.3273) + unreachable +ok5241: + %t110 = getelementptr inbounds %S.gen.Gen, ptr %t108, i32 0, i32 12 + %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i32 0, i32 1 + %t112 = load i64, ptr %t111 + %t113 = icmp eq i64 %t112, 0 + br i1 %t113, label %panic5242, label %ok5243 +panic5242: + call void @finch_panic(ptr @.str.3274, i64 2474, ptr @.str.3275) + unreachable +ok5243: + %t114 = sub i64 %t112, 1 + %t115 = load ptr, ptr %t110 + %t116 = getelementptr inbounds %S.gen.Loop, ptr %t115, i64 %t114 + %t117 = load %S.gen.Loop, ptr %t116 + store i64 %t114, ptr %t111 + store %S.gen.Loop %t117, ptr %a118 + call void @finch.drop.S_gen_Loop(ptr %a118) + %t119 = load ptr, ptr %a1 + %t120 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.br(ptr %t119, { ptr, i64, i64 } %t120) + %t121 = load i1, ptr %a41 + %t122 = xor i1 %t121, true + br label %logic.from5244 +logic.from5244: + br i1 %t122, label %logic.end5246, label %logic.rhs5245 +logic.rhs5245: + %t123 = load i1, ptr %a99 + br label %logic.rend5247 +logic.rend5247: + br label %logic.end5246 +logic.end5246: + %t124 = phi i1 [ true, %logic.from5244 ], [ %t123, %logic.rend5247 ] + br i1 %t124, label %then5248, label %endif5250 +then5248: + %t125 = load ptr, ptr %a1 + %t126 = load { ptr, i64, i64 }, ptr %a11 + call void @finch.gen.label(ptr %t125, { ptr, i64, i64 } %t126) + br label %endif5250 +endif5250: + call void @finch_str_drop(ptr %a51) + call void @finch_str_drop(ptr %a11) + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a5) + ret void +} + +define internal i1 @finch.gen.countBreaks(%S.ast.Node %p0) { +entry: + %a1 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca i64, align 16 + %a37 = alloca %S.ast.Node, align 16 + store %S.ast.Node %p0, ptr %a1 + %t2 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.3276, i64 5, i64 0 }, ptr %a5 + %t6 = call i32 @finch_str_eq(ptr %a4, ptr %a5) + %t7 = icmp ne i32 %t6, 0 + br i1 %t7, label %then5251, label %endif5253 +then5251: + ret i1 true +endif5253: + %t8 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t9 = load { ptr, i64, i64 }, ptr %t8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.3277, i64 5, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from5254 +logic.from5254: + br i1 %t13, label %logic.end5256, label %logic.rhs5255 +logic.rhs5255: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3278, i64 3, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br label %logic.rend5257 +logic.rend5257: + br label %logic.end5256 +logic.end5256: + %t20 = phi i1 [ true, %logic.from5254 ], [ %t19, %logic.rend5257 ] + br label %logic.from5258 +logic.from5258: + br i1 %t20, label %logic.end5260, label %logic.rhs5259 +logic.rhs5259: + %t21 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.3279, i64 4, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br label %logic.rend5261 +logic.rend5261: + br label %logic.end5260 +logic.end5260: + %t27 = phi i1 [ true, %logic.from5258 ], [ %t26, %logic.rend5261 ] + br i1 %t27, label %then5262, label %endif5264 +then5262: + ret i1 false +endif5264: + %t28 = getelementptr inbounds %S.ast.Node, ptr %a1, i32 0, i32 9 + store i64 0, ptr %a29 + br label %each.cond5265 +each.cond5265: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = load i64, ptr %a29 + %t33 = icmp slt i64 %t32, %t31 + br i1 %t33, label %each.body5266, label %each.end5268 +each.body5266: + %t34 = load ptr, ptr %t28 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 %t32 + %t36 = load %S.ast.Node, ptr %t35 + store %S.ast.Node %t36, ptr %a37 + %t38 = load %S.ast.Node, ptr %a37 + %t39 = call i1 @finch.gen.countBreaks(%S.ast.Node %t38) + br i1 %t39, label %then5269, label %endif5271 +then5269: + ret i1 true +endif5271: + br label %each.step5267 +each.step5267: + %t40 = load i64, ptr %a29 + %t41 = add i64 %t40, 1 + store i64 %t41, ptr %a29 + br label %each.cond5265 +each.end5268: + ret i1 false +} + +define internal void @finch.gen.forStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a22 = alloca %S.gen.Val, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca %S.gen.Val, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.gen.Val, align 16 + %a50 = alloca %S.ast.Type, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca %S.gen.Val, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca %S.ast.Type, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca %S.gen.Loop, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range5272, label %inrange5273 +range5272: + call void @finch_panic_index(ptr @.str.3280, i64 2498, i64 0, i64 %t7) + unreachable +inrange5273: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) + %t13 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3281, i64 3, i64 0 }) + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t15 = load { ptr, i64, i64 }, ptr %t14 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 0, %t16 + br i1 %t17, label %range5274, label %inrange5275 +range5274: + call void @finch_panic_index(ptr @.str.3282, i64 2498, i64 0, i64 %t16) + unreachable +inrange5275: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 + %t20 = load %S.ast.Node, ptr %t19 + %t21 = call %S.gen.Val @finch.gen.coerce(ptr %t3, %S.gen.Val %t12, %S.ast.Type %t13, %S.ast.Node %t20, { ptr, i64, i64 } { ptr @.str.3283, i64 20, i64 0 }) + store %S.gen.Val %t12, ptr %a22 + call void @finch.drop.S_gen_Val(ptr %a22) + store %S.ast.Type %t13, ptr %a23 + call void @finch.drop.S_ast_Type(ptr %a23) + %t24 = extractvalue %S.gen.Val %t21, 0 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store %S.gen.Val %t21, ptr %a28 + call void @finch.drop.S_gen_Val(ptr %a28) + store { ptr, i64, i64 } %t27, ptr %a29 + %t30 = load ptr, ptr %a1 + %t31 = load ptr, ptr %a1 + %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t33 = load { ptr, i64, i64 }, ptr %t32 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 1, %t34 + br i1 %t35, label %range5276, label %inrange5277 +range5276: + call void @finch_panic_index(ptr @.str.3284, i64 2499, i64 1, i64 %t34) + unreachable +inrange5277: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds %S.ast.Node, ptr %t36, i64 1 + %t38 = load %S.ast.Node, ptr %t37 + %t39 = call %S.gen.Val @finch.gen.expr(ptr %t31, %S.ast.Node %t38) + %t40 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3285, i64 3, i64 0 }) + %t41 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t42 = load { ptr, i64, i64 }, ptr %t41 + %t43 = extractvalue { ptr, i64, i64 } %t42, 1 + %t44 = icmp uge i64 1, %t43 + br i1 %t44, label %range5278, label %inrange5279 +range5278: + call void @finch_panic_index(ptr @.str.3286, i64 2499, i64 1, i64 %t43) + unreachable +inrange5279: + %t45 = extractvalue { ptr, i64, i64 } %t42, 0 + %t46 = getelementptr inbounds %S.ast.Node, ptr %t45, i64 1 + %t47 = load %S.ast.Node, ptr %t46 + %t48 = call %S.gen.Val @finch.gen.coerce(ptr %t30, %S.gen.Val %t39, %S.ast.Type %t40, %S.ast.Node %t47, { ptr, i64, i64 } { ptr @.str.3287, i64 18, i64 0 }) + store %S.gen.Val %t39, ptr %a49 + call void @finch.drop.S_gen_Val(ptr %a49) + store %S.ast.Type %t40, ptr %a50 + call void @finch.drop.S_ast_Type(ptr %a50) + %t51 = extractvalue %S.gen.Val %t48, 0 + store { ptr, i64, i64 } %t51, ptr %a52 + call void @finch_str_copy(ptr %a53, ptr %a52) + %t54 = load { ptr, i64, i64 }, ptr %a53 + store %S.gen.Val %t48, ptr %a55 + call void @finch.drop.S_gen_Val(ptr %a55) + store { ptr, i64, i64 } %t54, ptr %a56 + %t57 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t57) + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Node, ptr %a2 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3288, i64 3, i64 0 }) + %t63 = load { ptr, i64, i64 }, ptr %a29 + %t64 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t58, %S.ast.Node %t59, { ptr, i64, i64 } %t61, %S.ast.Type %t62, { ptr, i64, i64 } %t63, i1 true, i1 false) + store %S.ast.Type %t62, ptr %a65 + call void @finch.drop.S_ast_Type(ptr %a65) + store { ptr, i64, i64 } %t64, ptr %a66 + %t67 = load ptr, ptr %a1 + %t68 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t67, { ptr, i64, i64 } { ptr @.str.3289, i64 8, i64 0 }) + store { ptr, i64, i64 } %t68, ptr %a69 + %t70 = load ptr, ptr %a1 + %t71 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t70, { ptr, i64, i64 } { ptr @.str.3290, i64 8, i64 0 }) + store { ptr, i64, i64 } %t71, ptr %a72 + %t73 = load ptr, ptr %a1 + %t74 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t73, { ptr, i64, i64 } { ptr @.str.3291, i64 8, i64 0 }) + store { ptr, i64, i64 } %t74, ptr %a75 + %t76 = load ptr, ptr %a1 + %t77 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t76, { ptr, i64, i64 } { ptr @.str.3292, i64 7, i64 0 }) + store { ptr, i64, i64 } %t77, ptr %a78 + %t79 = load ptr, ptr %a1 + %t80 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.br(ptr %t79, { ptr, i64, i64 } %t80) + %t81 = load ptr, ptr %a1 + %t82 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.label(ptr %t81, { ptr, i64, i64 } %t82) + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a66 + %t85 = call { ptr, i64, i64 } @finch.gen.load(ptr %t83, { ptr, i64, i64 } { ptr @.str.3293, i64 3, i64 0 }, { ptr, i64, i64 } %t84) + store { ptr, i64, i64 } %t85, ptr %a86 + %t87 = load ptr, ptr %a1 + %t88 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.3294, i64 13, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.3295, i64 2, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t97, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + %t104 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t103, ptr %a105 + call void @finch_str_drop(ptr %a105) + store { ptr, i64, i64 } %t104, ptr %a106 + %t107 = load ptr, ptr %a1 + %t108 = load { ptr, i64, i64 }, ptr %a106 + %t109 = load { ptr, i64, i64 }, ptr %a72 + %t110 = load { ptr, i64, i64 }, ptr %a78 + call void @finch.gen.condBr(ptr %t107, { ptr, i64, i64 } %t108, { ptr, i64, i64 } %t109, { ptr, i64, i64 } %t110) + %t111 = load ptr, ptr %a1 + %t112 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.label(ptr %t111, { ptr, i64, i64 } %t112) + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic5280, label %ok5281 +panic5280: + call void @finch_panic(ptr @.str.3296, i64 2512, ptr @.str.3297) + unreachable +ok5281: + %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 12 + %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i32 0, i32 1 + %t117 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_copy(ptr %a119, ptr %a118) + %t120 = load { ptr, i64, i64 }, ptr %a119 + %t121 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t120, 0 + %t122 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t122, ptr %a123 + call void @finch_str_copy(ptr %a124, ptr %a123) + %t125 = load { ptr, i64, i64 }, ptr %a124 + %t126 = insertvalue %S.gen.Loop %t121, { ptr, i64, i64 } %t125, 1 + %t127 = load ptr, ptr %a1 + %t128 = icmp eq ptr %t127, null + br i1 %t128, label %panic5282, label %ok5283 +panic5282: + call void @finch_panic(ptr @.str.3298, i64 2512, ptr @.str.3299) + unreachable +ok5283: + %t129 = getelementptr inbounds %S.gen.Gen, ptr %t127, i32 0, i32 10 + %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i32 0, i32 1 + %t131 = load i64, ptr %t130 + %t132 = insertvalue %S.gen.Loop %t126, i64 %t131, 2 + %t133 = load ptr, ptr %a1 + %t134 = icmp eq ptr %t133, null + br i1 %t134, label %panic5284, label %ok5285 +panic5284: + call void @finch_panic(ptr @.str.3300, i64 2512, ptr @.str.3301) + unreachable +ok5285: + %t135 = getelementptr inbounds %S.gen.Gen, ptr %t133, i32 0, i32 11 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i32 0, i32 1 + %t137 = load i64, ptr %t136 + %t138 = insertvalue %S.gen.Loop %t132, i64 %t137, 3 + %t139 = load i64, ptr %t116 + %t140 = add i64 %t139, 1 + call void @finch_arr_reserve(ptr %t115, i64 %t140, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t141 = load ptr, ptr %t115 + %t142 = getelementptr inbounds %S.gen.Loop, ptr %t141, i64 %t139 + store %S.gen.Loop %t138, ptr %t142 + store i64 %t140, ptr %t116 + %t143 = load ptr, ptr %a1 + %t144 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t145 = load { ptr, i64, i64 }, ptr %t144 + %t146 = extractvalue { ptr, i64, i64 } %t145, 1 + %t147 = icmp uge i64 2, %t146 + br i1 %t147, label %range5286, label %inrange5287 +range5286: + call void @finch_panic_index(ptr @.str.3302, i64 2513, i64 2, i64 %t146) + unreachable +inrange5287: + %t148 = extractvalue { ptr, i64, i64 } %t145, 0 + %t149 = getelementptr inbounds %S.ast.Node, ptr %t148, i64 2 + %t150 = load %S.ast.Node, ptr %t149 + call void @finch.gen.block(ptr %t143, %S.ast.Node %t150, i1 true) + %t151 = load ptr, ptr %a1 + %t152 = icmp eq ptr %t151, null + br i1 %t152, label %panic5288, label %ok5289 +panic5288: + call void @finch_panic(ptr @.str.3303, i64 2514, ptr @.str.3304) + unreachable +ok5289: + %t153 = getelementptr inbounds %S.gen.Gen, ptr %t151, i32 0, i32 12 + %t154 = getelementptr inbounds { ptr, i64, i64 }, ptr %t153, i32 0, i32 1 + %t155 = load i64, ptr %t154 + %t156 = icmp eq i64 %t155, 0 + br i1 %t156, label %panic5290, label %ok5291 +panic5290: + call void @finch_panic(ptr @.str.3305, i64 2514, ptr @.str.3306) + unreachable +ok5291: + %t157 = sub i64 %t155, 1 + %t158 = load ptr, ptr %t153 + %t159 = getelementptr inbounds %S.gen.Loop, ptr %t158, i64 %t157 + %t160 = load %S.gen.Loop, ptr %t159 + store i64 %t157, ptr %t154 + store %S.gen.Loop %t160, ptr %a161 + call void @finch.drop.S_gen_Loop(ptr %a161) + %t162 = load ptr, ptr %a1 + %t163 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.gen.br(ptr %t162, { ptr, i64, i64 } %t163) + %t164 = load ptr, ptr %a1 + %t165 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.gen.label(ptr %t164, { ptr, i64, i64 } %t165) + %t166 = load ptr, ptr %a1 + %t167 = load { ptr, i64, i64 }, ptr %a66 + %t168 = call { ptr, i64, i64 } @finch.gen.load(ptr %t166, { ptr, i64, i64 } { ptr @.str.3307, i64 3, i64 0 }, { ptr, i64, i64 } %t167) + store { ptr, i64, i64 } %t168, ptr %a169 + %t170 = load ptr, ptr %a1 + %t171 = load ptr, ptr %a1 + %t172 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.3309, i64 8, i64 0 }, ptr %a174 + store { ptr, i64, i64 } %t172, ptr %a175 + call void @finch_str_concat(ptr %a173, ptr %a174, ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a173 + store { ptr, i64, i64 } %t176, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.3310, i64 3, i64 0 }, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t176, ptr %a180 + call void @finch_str_drop(ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a177 + %t182 = call { ptr, i64, i64 } @finch.gen.op(ptr %t171, { ptr, i64, i64 } %t181) + store { ptr, i64, i64 } %t181, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a66 + call void @finch.gen.store(ptr %t170, { ptr, i64, i64 } { ptr @.str.3308, i64 3, i64 0 }, { ptr, i64, i64 } %t182, { ptr, i64, i64 } %t184) + store { ptr, i64, i64 } %t182, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load ptr, ptr %a1 + %t187 = load { ptr, i64, i64 }, ptr %a69 + call void @finch.gen.br(ptr %t186, { ptr, i64, i64 } %t187) + %t188 = load ptr, ptr %a1 + %t189 = load { ptr, i64, i64 }, ptr %a78 + call void @finch.gen.label(ptr %t188, { ptr, i64, i64 } %t189) + %t190 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t190) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a106) + call void @finch_str_drop(ptr %a86) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a72) + call void @finch_str_drop(ptr %a69) + call void @finch_str_drop(ptr %a66) + call void @finch_str_drop(ptr %a56) + call void @finch_str_drop(ptr %a29) + ret void +} + +define internal void @finch.gen.eachMap(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca i1, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a14 = alloca %S.ast.Type, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a24 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.ast.Type, align 16 + %a27 = alloca %S.ast.Type, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i1, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca %S.gen.Loop, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 0, %t8 + br i1 %t9, label %range5292, label %inrange5293 +range5292: + call void @finch_panic_index(ptr @.str.3311, i64 2526, i64 0, i64 %t8) + unreachable +inrange5293: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 + %t12 = load %S.ast.Type, ptr %t11 + store %S.ast.Type %t12, ptr %a13 + call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) + %t15 = load %S.ast.Type, ptr %a14 + store %S.ast.Type %t15, ptr %a16 + %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 1, %t19 + br i1 %t20, label %range5294, label %inrange5295 +range5294: + call void @finch_panic_index(ptr @.str.3312, i64 2527, i64 1, i64 %t19) + unreachable +inrange5295: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 + %t23 = load %S.ast.Type, ptr %t22 + store %S.ast.Type %t23, ptr %a24 + call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) + %t26 = load %S.ast.Type, ptr %a25 + store %S.ast.Type %t26, ptr %a27 + %t28 = load i1, ptr %a5 + br label %logic.from5296 +logic.from5296: + br i1 %t28, label %logic.rhs5297, label %logic.end5298 +logic.rhs5297: + %t29 = load ptr, ptr %a1 + %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t31 = load { ptr, i64, i64 }, ptr %t30 + %t32 = extractvalue { ptr, i64, i64 } %t31, 1 + %t33 = icmp uge i64 0, %t32 + br i1 %t33, label %range5299, label %inrange5300 +range5299: + call void @finch_panic_index(ptr @.str.3313, i64 2528, i64 0, i64 %t32) + unreachable +inrange5300: + %t34 = extractvalue { ptr, i64, i64 } %t31, 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 0 + %t36 = load %S.ast.Node, ptr %t35 + %t37 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t36) + %t38 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t39 = load { ptr, i64, i64 }, ptr %t38 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 1, %t40 + br i1 %t41, label %range5301, label %inrange5302 +range5301: + call void @finch_panic_index(ptr @.str.3314, i64 2528, i64 1, i64 %t40) + unreachable +inrange5302: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 1 + %t44 = load %S.ast.Node, ptr %t43 + %t45 = call i1 @finch.gen.mutates(ptr %t29, { ptr, i64, i64 } %t37, %S.ast.Node %t44) + store { ptr, i64, i64 } %t37, ptr %a46 + call void @finch_str_drop(ptr %a46) + br label %logic.rend5303 +logic.rend5303: + br label %logic.end5298 +logic.end5298: + %t47 = phi i1 [ false, %logic.from5296 ], [ %t45, %logic.rend5303 ] + store i1 %t47, ptr %a48 + %t49 = load ptr, ptr %a1 + %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.3315, i64 3, i64 0 }) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.3316, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3317, i64 1, i64 0 }, { ptr, i64, i64 } %t53) + store { ptr, i64, i64 } { ptr @.str.3318, i64 0, i64 0 }, ptr %a54 + %t55 = load i1, ptr %a5 + br i1 %t55, label %then5304, label %endif5306 +then5304: + %t56 = load ptr, ptr %a1 + %t57 = load ptr, ptr %a1 + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Type, ptr %a4 + %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) + store { ptr, i64, i64 } { ptr @.str.3320, i64 23, i64 0 }, ptr %a62 + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t65, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.3321, i64 6, i64 0 }, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t65, ptr %a69 + call void @finch_str_drop(ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a66 + %t71 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t70, ptr %a73 + store { ptr, i64, i64 } %t71, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a72 + store { ptr, i64, i64 } %t76, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.3322, i64 14, i64 0 }, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + store { ptr, i64, i64 } %t76, ptr %a80 + call void @finch_str_drop(ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a77 + %t82 = call { ptr, i64, i64 } @finch.gen.op(ptr %t57, { ptr, i64, i64 } %t81) + store { ptr, i64, i64 } %t81, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = call { ptr, i64, i64 } @finch.gen.load(ptr %t56, { ptr, i64, i64 } { ptr @.str.3319, i64 3, i64 0 }, { ptr, i64, i64 } %t82) + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t84, ptr %a54 + store { ptr, i64, i64 } %t86, ptr %a87 + call void @finch_str_drop(ptr %a87) + br label %endif5306 +endif5306: + %t88 = load ptr, ptr %a1 + %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3323, i64 8, i64 0 }) + store { ptr, i64, i64 } %t89, ptr %a90 + %t91 = load ptr, ptr %a1 + %t92 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t91, { ptr, i64, i64 } { ptr @.str.3324, i64 9, i64 0 }) + store { ptr, i64, i64 } %t92, ptr %a93 + %t94 = load ptr, ptr %a1 + %t95 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t94, { ptr, i64, i64 } { ptr @.str.3325, i64 8, i64 0 }) + store { ptr, i64, i64 } %t95, ptr %a96 + %t97 = load ptr, ptr %a1 + %t98 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t97, { ptr, i64, i64 } { ptr @.str.3326, i64 8, i64 0 }) + store { ptr, i64, i64 } %t98, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t100, { ptr, i64, i64 } { ptr @.str.3327, i64 7, i64 0 }) + store { ptr, i64, i64 } %t101, ptr %a102 + %t103 = load ptr, ptr %a1 + %t104 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) + %t105 = load ptr, ptr %a1 + %t106 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) + %t107 = load i1, ptr %a5 + br label %logic.from5307 +logic.from5307: + br i1 %t107, label %logic.rhs5308, label %logic.end5309 +logic.rhs5308: + %t108 = load i1, ptr %a48 + br label %logic.rend5310 +logic.rend5310: + br label %logic.end5309 +logic.end5309: + %t109 = phi i1 [ false, %logic.from5307 ], [ %t108, %logic.rend5310 ] + br i1 %t109, label %then5311, label %endif5313 +then5311: + %t110 = load ptr, ptr %a1 + %t111 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t110, { ptr, i64, i64 } { ptr @.str.3328, i64 11, i64 0 }) + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load ptr, ptr %a1 + %t114 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t113, { ptr, i64, i64 } { ptr @.str.3329, i64 8, i64 0 }) + store { ptr, i64, i64 } %t114, ptr %a115 + %t116 = load ptr, ptr %a1 + %t117 = load ptr, ptr %a1 + %t118 = load ptr, ptr %a1 + %t119 = load %S.ast.Type, ptr %a4 + %t120 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t118, %S.ast.Type %t119) + store { ptr, i64, i64 } { ptr @.str.3331, i64 23, i64 0 }, ptr %a122 + store { ptr, i64, i64 } %t120, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t120, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + store { ptr, i64, i64 } %t125, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.3332, i64 6, i64 0 }, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t125, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t130, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.3333, i64 14, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = call { ptr, i64, i64 } @finch.gen.op(ptr %t117, { ptr, i64, i64 } %t141) + store { ptr, i64, i64 } %t141, ptr %a143 + call void @finch_str_drop(ptr %a143) + %t144 = call { ptr, i64, i64 } @finch.gen.load(ptr %t116, { ptr, i64, i64 } { ptr @.str.3330, i64 3, i64 0 }, { ptr, i64, i64 } %t142) + store { ptr, i64, i64 } %t142, ptr %a145 + call void @finch_str_drop(ptr %a145) + store { ptr, i64, i64 } %t144, ptr %a146 + %t147 = load ptr, ptr %a1 + %t148 = load ptr, ptr %a1 + %t149 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } { ptr @.str.3334, i64 12, i64 0 }, ptr %a151 + store { ptr, i64, i64 } %t149, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + %t153 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t153, ptr %a155 + store { ptr, i64, i64 } { ptr @.str.3335, i64 2, i64 0 }, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + store { ptr, i64, i64 } %t153, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a154 + %t159 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t158, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + store { ptr, i64, i64 } %t158, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a160 + %t165 = call { ptr, i64, i64 } @finch.gen.op(ptr %t148, { ptr, i64, i64 } %t164) + store { ptr, i64, i64 } %t164, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a112 + %t168 = load { ptr, i64, i64 }, ptr %a115 + call void @finch.gen.condBr(ptr %t147, { ptr, i64, i64 } %t165, { ptr, i64, i64 } %t167, { ptr, i64, i64 } %t168) + store { ptr, i64, i64 } %t165, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load ptr, ptr %a1 + %t171 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.gen.label(ptr %t170, { ptr, i64, i64 } %t171) + %t172 = load ptr, ptr %a1 + %t173 = load ptr, ptr %a1 + %t174 = load ptr, ptr %a1 + %t175 = icmp eq ptr %t174, null + br i1 %t175, label %panic5314, label %ok5315 +panic5314: + call void @finch_panic(ptr @.str.3337, i64 2549, ptr @.str.3338) + unreachable +ok5315: + %t176 = getelementptr inbounds %S.gen.Gen, ptr %t174, i32 0, i32 1 + %t177 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t178 = load i64, ptr %t177 + %t179 = load { ptr, i64, i64 }, ptr %t176 + %t180 = extractvalue { ptr, i64, i64 } %t179, 1 + %t181 = icmp uge i64 %t178, %t180 + br i1 %t181, label %range5316, label %inrange5317 +range5316: + call void @finch_panic_index(ptr @.str.3339, i64 2549, i64 %t178, i64 %t180) + unreachable +inrange5317: + %t182 = extractvalue { ptr, i64, i64 } %t179, 0 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %t182, i64 %t178 + %t184 = load { ptr, i64, i64 }, ptr %t183 + %t185 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t173, { ptr, i64, i64 } %t184) + store { ptr, i64, i64 } { ptr @.str.3336, i64 33, i64 0 }, ptr %a187 + store { ptr, i64, i64 } %t185, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t185, ptr %a189 + call void @finch_str_drop(ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a186 + store { ptr, i64, i64 } %t190, ptr %a192 + store { ptr, i64, i64 } { ptr @.str.3340, i64 6, i64 0 }, ptr %a193 + call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) + store { ptr, i64, i64 } %t190, ptr %a194 + call void @finch_str_drop(ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a191 + %t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t197 = load i64, ptr %t196 + call void @finch_str_from_int(ptr %a198, i64 %t197) + %t199 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t195, ptr %a201 + store { ptr, i64, i64 } %t199, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t195, ptr %a203 + call void @finch_str_drop(ptr %a203) + store { ptr, i64, i64 } %t199, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a200 + store { ptr, i64, i64 } %t205, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.3341, i64 1, i64 0 }, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + store { ptr, i64, i64 } %t205, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a206 + call void @finch.gen.emit(ptr %t172, { ptr, i64, i64 } %t210) + store { ptr, i64, i64 } %t210, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t212, { ptr, i64, i64 } { ptr @.str.3342, i64 11, i64 0 }) + %t213 = load ptr, ptr %a1 + %t214 = icmp eq ptr %t213, null + br i1 %t214, label %panic5318, label %ok5319 +panic5318: + call void @finch_panic(ptr @.str.3343, i64 2551, ptr @.str.3344) + unreachable +ok5319: + %t215 = getelementptr inbounds %S.gen.Gen, ptr %t213, i32 0, i32 9 + store i1 true, ptr %t215 + %t216 = load ptr, ptr %a1 + %t217 = load { ptr, i64, i64 }, ptr %a115 + call void @finch.gen.label(ptr %t216, { ptr, i64, i64 } %t217) + call void @finch_str_drop(ptr %a146) + call void @finch_str_drop(ptr %a115) + call void @finch_str_drop(ptr %a112) + br label %endif5313 +endif5313: + %t218 = load ptr, ptr %a1 + %t219 = load { ptr, i64, i64 }, ptr %a51 + %t220 = call { ptr, i64, i64 } @finch.gen.load(ptr %t218, { ptr, i64, i64 } { ptr @.str.3345, i64 3, i64 0 }, { ptr, i64, i64 } %t219) + store { ptr, i64, i64 } %t220, ptr %a221 + %t222 = load ptr, ptr %a1 + %t223 = load ptr, ptr %a1 + %t224 = load ptr, ptr %a1 + %t225 = load %S.ast.Type, ptr %a4 + %t226 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t224, %S.ast.Type %t225) + store { ptr, i64, i64 } { ptr @.str.3347, i64 23, i64 0 }, ptr %a228 + store { ptr, i64, i64 } %t226, ptr %a229 + call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) + store { ptr, i64, i64 } %t226, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a227 + store { ptr, i64, i64 } %t231, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.3348, i64 6, i64 0 }, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t231, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + %t237 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t236, ptr %a239 + store { ptr, i64, i64 } %t237, ptr %a240 + call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240) + store { ptr, i64, i64 } %t236, ptr %a241 + call void @finch_str_drop(ptr %a241) + %t242 = load { ptr, i64, i64 }, ptr %a238 + store { ptr, i64, i64 } %t242, ptr %a244 + store { ptr, i64, i64 } { ptr @.str.3349, i64 14, i64 0 }, ptr %a245 + call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) + store { ptr, i64, i64 } %t242, ptr %a246 + call void @finch_str_drop(ptr %a246) + %t247 = load { ptr, i64, i64 }, ptr %a243 + %t248 = call { ptr, i64, i64 } @finch.gen.op(ptr %t223, { ptr, i64, i64 } %t247) + store { ptr, i64, i64 } %t247, ptr %a249 + call void @finch_str_drop(ptr %a249) + %t250 = call { ptr, i64, i64 } @finch.gen.load(ptr %t222, { ptr, i64, i64 } { ptr @.str.3346, i64 3, i64 0 }, { ptr, i64, i64 } %t248) + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_drop(ptr %a251) + store { ptr, i64, i64 } %t250, ptr %a252 + %t253 = load ptr, ptr %a1 + %t254 = load ptr, ptr %a1 + %t255 = load { ptr, i64, i64 }, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.3350, i64 13, i64 0 }, ptr %a257 + store { ptr, i64, i64 } %t255, ptr %a258 + call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) + %t259 = load { ptr, i64, i64 }, ptr %a256 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.3351, i64 2, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + store { ptr, i64, i64 } %t259, ptr %a263 + call void @finch_str_drop(ptr %a263) + %t264 = load { ptr, i64, i64 }, ptr %a260 + %t265 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t264, ptr %a267 + store { ptr, i64, i64 } %t265, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t264, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + %t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t254, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a93 + %t274 = load { ptr, i64, i64 }, ptr %a102 + call void @finch.gen.condBr(ptr %t253, { ptr, i64, i64 } %t271, { ptr, i64, i64 } %t273, { ptr, i64, i64 } %t274) + store { ptr, i64, i64 } %t271, ptr %a275 + call void @finch_str_drop(ptr %a275) + %t276 = load ptr, ptr %a1 + %t277 = load { ptr, i64, i64 }, ptr %a93 + call void @finch.gen.label(ptr %t276, { ptr, i64, i64 } %t277) + %t278 = load ptr, ptr %a1 + %t279 = load { ptr, i64, i64 }, ptr %a3 + %t280 = load %S.ast.Type, ptr %a4 + %t281 = load { ptr, i64, i64 }, ptr %a221 + %t282 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t278, { ptr, i64, i64 } %t279, %S.ast.Type %t280, { ptr, i64, i64 } %t281) + store { ptr, i64, i64 } %t282, ptr %a283 + %t284 = load ptr, ptr %a1 + %t285 = load ptr, ptr %a1 + %t286 = load { ptr, i64, i64 }, ptr %a283 + %t287 = load %S.ast.Type, ptr %a4 + %t288 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t285, { ptr, i64, i64 } %t286, %S.ast.Type %t287, i64 0) + %t289 = call { ptr, i64, i64 } @finch.gen.load(ptr %t284, { ptr, i64, i64 } { ptr @.str.3352, i64 3, i64 0 }, { ptr, i64, i64 } %t288) + store { ptr, i64, i64 } %t288, ptr %a290 + call void @finch_str_drop(ptr %a290) + store { ptr, i64, i64 } %t289, ptr %a291 + %t292 = load ptr, ptr %a1 + %t293 = load ptr, ptr %a1 + %t294 = load { ptr, i64, i64 }, ptr %a291 + store { ptr, i64, i64 } { ptr @.str.3353, i64 12, i64 0 }, ptr %a296 + store { ptr, i64, i64 } %t294, ptr %a297 + call void @finch_str_concat(ptr %a295, ptr %a296, ptr %a297) + %t298 = load { ptr, i64, i64 }, ptr %a295 + store { ptr, i64, i64 } %t298, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.3354, i64 3, i64 0 }, ptr %a301 + call void @finch_str_concat(ptr %a299, ptr %a300, ptr %a301) + store { ptr, i64, i64 } %t298, ptr %a302 + call void @finch_str_drop(ptr %a302) + %t303 = load { ptr, i64, i64 }, ptr %a299 + %t304 = call { ptr, i64, i64 } @finch.gen.op(ptr %t293, { ptr, i64, i64 } %t303) + store { ptr, i64, i64 } %t303, ptr %a305 + call void @finch_str_drop(ptr %a305) + %t306 = load { ptr, i64, i64 }, ptr %a99 + %t307 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.gen.condBr(ptr %t292, { ptr, i64, i64 } %t304, { ptr, i64, i64 } %t306, { ptr, i64, i64 } %t307) + store { ptr, i64, i64 } %t304, ptr %a308 + call void @finch_str_drop(ptr %a308) + %t309 = load ptr, ptr %a1 + %t310 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.gen.label(ptr %t309, { ptr, i64, i64 } %t310) + %t311 = load ptr, ptr %a1 + %t312 = icmp eq ptr %t311, null + br i1 %t312, label %panic5320, label %ok5321 +panic5320: + call void @finch_panic(ptr @.str.3355, i64 2562, ptr @.str.3356) + unreachable +ok5321: + %t313 = getelementptr inbounds %S.gen.Gen, ptr %t311, i32 0, i32 12 + %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i32 0, i32 1 + %t315 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t315, ptr %a316 + call void @finch_str_copy(ptr %a317, ptr %a316) + %t318 = load { ptr, i64, i64 }, ptr %a317 + %t319 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t318, 0 + %t320 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t320, ptr %a321 + call void @finch_str_copy(ptr %a322, ptr %a321) + %t323 = load { ptr, i64, i64 }, ptr %a322 + %t324 = insertvalue %S.gen.Loop %t319, { ptr, i64, i64 } %t323, 1 + %t325 = load ptr, ptr %a1 + %t326 = icmp eq ptr %t325, null + br i1 %t326, label %panic5322, label %ok5323 +panic5322: + call void @finch_panic(ptr @.str.3357, i64 2562, ptr @.str.3358) + unreachable +ok5323: + %t327 = getelementptr inbounds %S.gen.Gen, ptr %t325, i32 0, i32 10 + %t328 = getelementptr inbounds { ptr, i64, i64 }, ptr %t327, i32 0, i32 1 + %t329 = load i64, ptr %t328 + %t330 = insertvalue %S.gen.Loop %t324, i64 %t329, 2 + %t331 = load ptr, ptr %a1 + %t332 = icmp eq ptr %t331, null + br i1 %t332, label %panic5324, label %ok5325 +panic5324: + call void @finch_panic(ptr @.str.3359, i64 2562, ptr @.str.3360) + unreachable +ok5325: + %t333 = getelementptr inbounds %S.gen.Gen, ptr %t331, i32 0, i32 11 + %t334 = getelementptr inbounds { ptr, i64, i64 }, ptr %t333, i32 0, i32 1 + %t335 = load i64, ptr %t334 + %t336 = insertvalue %S.gen.Loop %t330, i64 %t335, 3 + %t337 = load i64, ptr %t314 + %t338 = add i64 %t337, 1 + call void @finch_arr_reserve(ptr %t313, i64 %t338, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t339 = load ptr, ptr %t313 + %t340 = getelementptr inbounds %S.gen.Loop, ptr %t339, i64 %t337 + store %S.gen.Loop %t336, ptr %t340 + store i64 %t338, ptr %t314 + %t341 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t341) + %t342 = load ptr, ptr %a1 + %t343 = load ptr, ptr %a1 + %t344 = load %S.ast.Type, ptr %a16 + %t345 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t343, %S.ast.Type %t344) + %t346 = load ptr, ptr %a1 + %t347 = load { ptr, i64, i64 }, ptr %a283 + %t348 = load %S.ast.Type, ptr %a4 + %t349 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t346, { ptr, i64, i64 } %t347, %S.ast.Type %t348, i64 1) + %t350 = call { ptr, i64, i64 } @finch.gen.load(ptr %t342, { ptr, i64, i64 } %t345, { ptr, i64, i64 } %t349) + store { ptr, i64, i64 } %t345, ptr %a351 + call void @finch_str_drop(ptr %a351) + store { ptr, i64, i64 } %t349, ptr %a352 + call void @finch_str_drop(ptr %a352) + store { ptr, i64, i64 } %t350, ptr %a353 + %t354 = load i1, ptr %a48 + br i1 %t354, label %then5326, label %endif5328 +then5326: + %t355 = load ptr, ptr %a1 + %t356 = load { ptr, i64, i64 }, ptr %a353 + %t357 = load %S.ast.Type, ptr %a16 + %t358 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t355, { ptr, i64, i64 } %t356, %S.ast.Type %t357) + %t359 = load { ptr, i64, i64 }, ptr %a353 + store { ptr, i64, i64 } %t358, ptr %a353 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + br label %endif5328 +endif5328: + %t361 = load ptr, ptr %a1 + %t362 = load %S.ast.Node, ptr %a2 + %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t364 = load { ptr, i64, i64 }, ptr %t363 + %t365 = load %S.ast.Type, ptr %a16 + %t366 = load { ptr, i64, i64 }, ptr %a353 + %t367 = load i1, ptr %a48 + %t368 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t361, %S.ast.Node %t362, { ptr, i64, i64 } %t364, %S.ast.Type %t365, { ptr, i64, i64 } %t366, i1 true, i1 %t367) + store { ptr, i64, i64 } %t368, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t371 = getelementptr inbounds { ptr, i64, i64 }, ptr %t370, i32 0, i32 1 + %t372 = load i64, ptr %t371 + %t373 = icmp sgt i64 %t372, 0 + br i1 %t373, label %then5329, label %endif5331 +then5329: + %t374 = load ptr, ptr %a1 + %t375 = load ptr, ptr %a1 + %t376 = load %S.ast.Type, ptr %a27 + %t377 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t375, %S.ast.Type %t376) + %t378 = load ptr, ptr %a1 + %t379 = load { ptr, i64, i64 }, ptr %a283 + %t380 = load %S.ast.Type, ptr %a4 + %t381 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t378, { ptr, i64, i64 } %t379, %S.ast.Type %t380, i64 2) + %t382 = call { ptr, i64, i64 } @finch.gen.load(ptr %t374, { ptr, i64, i64 } %t377, { ptr, i64, i64 } %t381) + store { ptr, i64, i64 } %t377, ptr %a383 + call void @finch_str_drop(ptr %a383) + store { ptr, i64, i64 } %t381, ptr %a384 + call void @finch_str_drop(ptr %a384) + store { ptr, i64, i64 } %t382, ptr %a385 + %t386 = load i1, ptr %a48 + br i1 %t386, label %then5332, label %endif5334 +then5332: + %t387 = load ptr, ptr %a1 + %t388 = load { ptr, i64, i64 }, ptr %a385 + %t389 = load %S.ast.Type, ptr %a27 + %t390 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t387, { ptr, i64, i64 } %t388, %S.ast.Type %t389) + %t391 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t390, ptr %a385 + store { ptr, i64, i64 } %t391, ptr %a392 + call void @finch_str_drop(ptr %a392) + br label %endif5334 +endif5334: + %t393 = load ptr, ptr %a1 + %t394 = load %S.ast.Node, ptr %a2 + %t395 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t396 = load { ptr, i64, i64 }, ptr %t395 + %t397 = load %S.ast.Type, ptr %a27 + %t398 = load { ptr, i64, i64 }, ptr %a385 + %t399 = load i1, ptr %a48 + %t400 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t393, %S.ast.Node %t394, { ptr, i64, i64 } %t396, %S.ast.Type %t397, { ptr, i64, i64 } %t398, i1 true, i1 %t399) + store { ptr, i64, i64 } %t400, ptr %a401 + call void @finch_str_drop(ptr %a401) + call void @finch_str_drop(ptr %a385) + br label %endif5331 +endif5331: + %t402 = load ptr, ptr %a1 + %t403 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t404 = load { ptr, i64, i64 }, ptr %t403 + %t405 = extractvalue { ptr, i64, i64 } %t404, 1 + %t406 = icmp uge i64 1, %t405 + br i1 %t406, label %range5335, label %inrange5336 +range5335: + call void @finch_panic_index(ptr @.str.3361, i64 2576, i64 1, i64 %t405) + unreachable +inrange5336: + %t407 = extractvalue { ptr, i64, i64 } %t404, 0 + %t408 = getelementptr inbounds %S.ast.Node, ptr %t407, i64 1 + %t409 = load %S.ast.Node, ptr %t408 + call void @finch.gen.block(ptr %t402, %S.ast.Node %t409, i1 true) + %t410 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t410) + %t411 = load ptr, ptr %a1 + %t412 = icmp eq ptr %t411, null + br i1 %t412, label %panic5337, label %ok5338 +panic5337: + call void @finch_panic(ptr @.str.3362, i64 2578, ptr @.str.3363) + unreachable +ok5338: + %t413 = getelementptr inbounds %S.gen.Gen, ptr %t411, i32 0, i32 12 + %t414 = getelementptr inbounds { ptr, i64, i64 }, ptr %t413, i32 0, i32 1 + %t415 = load i64, ptr %t414 + %t416 = icmp eq i64 %t415, 0 + br i1 %t416, label %panic5339, label %ok5340 +panic5339: + call void @finch_panic(ptr @.str.3364, i64 2578, ptr @.str.3365) + unreachable +ok5340: + %t417 = sub i64 %t415, 1 + %t418 = load ptr, ptr %t413 + %t419 = getelementptr inbounds %S.gen.Loop, ptr %t418, i64 %t417 + %t420 = load %S.gen.Loop, ptr %t419 + store i64 %t417, ptr %t414 + store %S.gen.Loop %t420, ptr %a421 + call void @finch.drop.S_gen_Loop(ptr %a421) + %t422 = load ptr, ptr %a1 + %t423 = load { ptr, i64, i64 }, ptr %a99 + call void @finch.gen.br(ptr %t422, { ptr, i64, i64 } %t423) + %t424 = load ptr, ptr %a1 + %t425 = load { ptr, i64, i64 }, ptr %a99 + call void @finch.gen.label(ptr %t424, { ptr, i64, i64 } %t425) + %t426 = load ptr, ptr %a1 + %t427 = load { ptr, i64, i64 }, ptr %a51 + %t428 = call { ptr, i64, i64 } @finch.gen.load(ptr %t426, { ptr, i64, i64 } { ptr @.str.3366, i64 3, i64 0 }, { ptr, i64, i64 } %t427) + store { ptr, i64, i64 } %t428, ptr %a429 + %t430 = load ptr, ptr %a1 + %t431 = load ptr, ptr %a1 + %t432 = load { ptr, i64, i64 }, ptr %a429 + store { ptr, i64, i64 } { ptr @.str.3368, i64 8, i64 0 }, ptr %a434 + store { ptr, i64, i64 } %t432, ptr %a435 + call void @finch_str_concat(ptr %a433, ptr %a434, ptr %a435) + %t436 = load { ptr, i64, i64 }, ptr %a433 + store { ptr, i64, i64 } %t436, ptr %a438 + store { ptr, i64, i64 } { ptr @.str.3369, i64 3, i64 0 }, ptr %a439 + call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) + store { ptr, i64, i64 } %t436, ptr %a440 + call void @finch_str_drop(ptr %a440) + %t441 = load { ptr, i64, i64 }, ptr %a437 + %t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t431, { ptr, i64, i64 } %t441) + store { ptr, i64, i64 } %t441, ptr %a443 + call void @finch_str_drop(ptr %a443) + %t444 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.store(ptr %t430, { ptr, i64, i64 } { ptr @.str.3367, i64 3, i64 0 }, { ptr, i64, i64 } %t442, { ptr, i64, i64 } %t444) + store { ptr, i64, i64 } %t442, ptr %a445 + call void @finch_str_drop(ptr %a445) + %t446 = load ptr, ptr %a1 + %t447 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t446, { ptr, i64, i64 } %t447) + %t448 = load ptr, ptr %a1 + %t449 = load { ptr, i64, i64 }, ptr %a102 + call void @finch.gen.label(ptr %t448, { ptr, i64, i64 } %t449) + call void @finch_str_drop(ptr %a429) + call void @finch_str_drop(ptr %a353) + call void @finch_str_drop(ptr %a291) + call void @finch_str_drop(ptr %a283) + call void @finch_str_drop(ptr %a252) + call void @finch_str_drop(ptr %a221) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a96) + call void @finch_str_drop(ptr %a93) + call void @finch_str_drop(ptr %a90) + call void @finch_str_drop(ptr %a54) + call void @finch_str_drop(ptr %a51) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret void +} + +define internal void @finch.drop.S_gen_Ref(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Ref, ptr %a, i32 0, i32 1 + call void @finch.drop.S_gen_Place(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Ref, ptr %a, i32 0, i32 2 + call void @finch.drop.S_gen_Val(ptr %t2) + ret void +} + +define internal void @finch.gen.eachStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a13 = alloca %S.gen.Ref, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a31 = alloca %S.ast.Type, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a38 = alloca %S.ast.Type, align 16 + %a39 = alloca %S.ast.Type, align 16 + %a42 = alloca %S.ast.Type, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca %S.ast.Type, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.ast.Type, align 16 + %a129 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.ast.Type, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca i1, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca %S.ast.Type, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca %S.gen.Loop, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t3) + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range5341, label %inrange5342 +range5341: + call void @finch_panic_index(ptr @.str.3370, i64 2589, i64 0, i64 %t7) + unreachable +inrange5342: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 false) + store %S.gen.Ref %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.3371, i64 0, i64 0 }, ptr %a14 + %t15 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3372, i64 4, i64 0 }) + store %S.ast.Type %t15, ptr %a16 + %t17 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 + %t18 = load i1, ptr %t17 + br i1 %t18, label %then5343, label %else5344 +then5343: + %t19 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 + %t20 = getelementptr inbounds %S.gen.Place, ptr %t19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + call void @finch_str_copy(ptr %a23, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + %t25 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t24, ptr %a14 + store { ptr, i64, i64 } %t25, ptr %a26 + call void @finch_str_drop(ptr %a26) + %t27 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 1 + %t28 = getelementptr inbounds %S.gen.Place, ptr %t27, i32 0, i32 1 + %t29 = load %S.ast.Type, ptr %t28 + store %S.ast.Type %t29, ptr %a30 + call void @finch.copy.S_ast_Type(ptr %a31, ptr %a30) + %t32 = load %S.ast.Type, ptr %a31 + %t33 = load %S.ast.Type, ptr %a16 + store %S.ast.Type %t32, ptr %a16 + store %S.ast.Type %t33, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + br label %endif5345 +else5344: + %t35 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 + %t36 = getelementptr inbounds %S.gen.Val, ptr %t35, i32 0, i32 1 + %t37 = load %S.ast.Type, ptr %t36 + store %S.ast.Type %t37, ptr %a38 + call void @finch.copy.S_ast_Type(ptr %a39, ptr %a38) + %t40 = load %S.ast.Type, ptr %a39 + %t41 = load %S.ast.Type, ptr %a16 + store %S.ast.Type %t40, ptr %a16 + store %S.ast.Type %t41, ptr %a42 + call void @finch.drop.S_ast_Type(ptr %a42) + %t43 = load ptr, ptr %a1 + %t44 = load %S.ast.Node, ptr %a2 + %t45 = load ptr, ptr %a1 + %t46 = icmp eq ptr %t45, null + br i1 %t46, label %panic5346, label %ok5347 +panic5346: + call void @finch_panic(ptr @.str.3374, i64 2597, ptr @.str.3375) + unreachable +ok5347: + %t47 = getelementptr inbounds %S.gen.Gen, ptr %t45, i32 0, i32 25 + %t48 = load i64, ptr %t47 + call void @finch_str_from_int(ptr %a49, i64 %t48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.3373, i64 5, i64 0 }, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load %S.ast.Type, ptr %a16 + %t57 = load ptr, ptr %a1 + %t58 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 2 + %t59 = load %S.gen.Val, ptr %t58 + %t60 = call { ptr, i64, i64 } @finch.gen.own(ptr %t57, %S.gen.Val %t59) + %t61 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t55, %S.ast.Type %t56, { ptr, i64, i64 } %t60, i1 false, i1 true) + store { ptr, i64, i64 } %t55, ptr %a62 + call void @finch_str_drop(ptr %a62) + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t61, ptr %a14 + store { ptr, i64, i64 } %t64, ptr %a65 + call void @finch_str_drop(ptr %a65) + br label %endif5345 +endif5345: + %t66 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t67 = load { ptr, i64, i64 }, ptr %t66 + store { ptr, i64, i64 } %t67, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.3376, i64 3, i64 0 }, ptr %a69 + %t70 = call i32 @finch_str_eq(ptr %a68, ptr %a69) + %t71 = icmp ne i32 %t70, 0 + br i1 %t71, label %then5348, label %endif5350 +then5348: + %t72 = load ptr, ptr %a1 + %t73 = load %S.ast.Node, ptr %a2 + %t74 = load { ptr, i64, i64 }, ptr %a14 + %t75 = load %S.ast.Type, ptr %a16 + %t76 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 + %t77 = load i1, ptr %t76 + call void @finch.gen.eachMap(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t74, %S.ast.Type %t75, i1 %t77) + %t78 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t78) + call void @finch.drop.S_ast_Type(ptr %a16) + call void @finch_str_drop(ptr %a14) + call void @finch.drop.S_gen_Ref(ptr %a13) + ret void +endif5350: + %t79 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3377, i64 5, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp eq i32 %t83, 0 + br label %logic.from5351 +logic.from5351: + br i1 %t84, label %logic.rhs5352, label %logic.end5353 +logic.rhs5352: + %t85 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.3378, i64 3, i64 0 }, ptr %a88 + %t89 = call i32 @finch_str_eq(ptr %a87, ptr %a88) + %t90 = icmp eq i32 %t89, 0 + br label %logic.rend5354 +logic.rend5354: + br label %logic.end5353 +logic.end5353: + %t91 = phi i1 [ false, %logic.from5351 ], [ %t90, %logic.rend5354 ] + br i1 %t91, label %then5355, label %endif5357 +then5355: + %t92 = load ptr, ptr %a1 + %t93 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t94 = load { ptr, i64, i64 }, ptr %t93 + %t95 = extractvalue { ptr, i64, i64 } %t94, 1 + %t96 = icmp uge i64 0, %t95 + br i1 %t96, label %range5358, label %inrange5359 +range5358: + call void @finch_panic_index(ptr @.str.3379, i64 2605, i64 0, i64 %t95) + unreachable +inrange5359: + %t97 = extractvalue { ptr, i64, i64 } %t94, 0 + %t98 = getelementptr inbounds %S.ast.Node, ptr %t97, i64 0 + %t99 = load %S.ast.Node, ptr %t98 + %t100 = load %S.ast.Type, ptr %a16 + %t101 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t100) + store { ptr, i64, i64 } { ptr @.str.3380, i64 55, i64 0 }, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t101, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.3381, i64 36, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + call void @finch.gen.fail(ptr %t92, %S.ast.Node %t99, { ptr, i64, i64 } %t111) + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + br label %endif5357 +endif5357: + %t113 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3382, i64 4, i64 0 }) + store %S.ast.Type %t113, ptr %a114 + %t115 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 0 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.3383, i64 5, i64 0 }, ptr %a118 + %t119 = call i32 @finch_str_eq(ptr %a117, ptr %a118) + %t120 = icmp ne i32 %t119, 0 + br i1 %t120, label %then5360, label %endif5362 +then5360: + %t121 = getelementptr inbounds %S.ast.Type, ptr %a16, i32 0, i32 1 + %t122 = load { ptr, i64, i64 }, ptr %t121 + %t123 = extractvalue { ptr, i64, i64 } %t122, 1 + %t124 = icmp uge i64 0, %t123 + br i1 %t124, label %range5363, label %inrange5364 +range5363: + call void @finch_panic_index(ptr @.str.3384, i64 2609, i64 0, i64 %t123) + unreachable +inrange5364: + %t125 = extractvalue { ptr, i64, i64 } %t122, 0 + %t126 = getelementptr inbounds %S.ast.Type, ptr %t125, i64 0 + %t127 = load %S.ast.Type, ptr %t126 + store %S.ast.Type %t127, ptr %a128 + call void @finch.copy.S_ast_Type(ptr %a129, ptr %a128) + %t130 = load %S.ast.Type, ptr %a129 + %t131 = load %S.ast.Type, ptr %a114 + store %S.ast.Type %t130, ptr %a114 + store %S.ast.Type %t131, ptr %a132 + call void @finch.drop.S_ast_Type(ptr %a132) + br label %endif5362 +endif5362: + %t133 = getelementptr inbounds %S.gen.Ref, ptr %a13, i32 0, i32 0 + %t134 = load i1, ptr %t133 + br label %logic.from5365 +logic.from5365: + br i1 %t134, label %logic.rhs5366, label %logic.end5367 +logic.rhs5366: + %t135 = load ptr, ptr %a1 + %t136 = load %S.ast.Type, ptr %a114 + %t137 = call i1 @finch.gen.owning(ptr %t135, %S.ast.Type %t136) + br label %logic.rend5368 +logic.rend5368: + br label %logic.end5367 +logic.end5367: + %t138 = phi i1 [ false, %logic.from5365 ], [ %t137, %logic.rend5368 ] + br label %logic.from5369 +logic.from5369: + br i1 %t138, label %logic.rhs5370, label %logic.end5371 +logic.rhs5370: + %t139 = load ptr, ptr %a1 + %t140 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t141 = load { ptr, i64, i64 }, ptr %t140 + %t142 = extractvalue { ptr, i64, i64 } %t141, 1 + %t143 = icmp uge i64 0, %t142 + br i1 %t143, label %range5372, label %inrange5373 +range5372: + call void @finch_panic_index(ptr @.str.3385, i64 2611, i64 0, i64 %t142) + unreachable +inrange5373: + %t144 = extractvalue { ptr, i64, i64 } %t141, 0 + %t145 = getelementptr inbounds %S.ast.Node, ptr %t144, i64 0 + %t146 = load %S.ast.Node, ptr %t145 + %t147 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t146) + %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t149 = load { ptr, i64, i64 }, ptr %t148 + %t150 = extractvalue { ptr, i64, i64 } %t149, 1 + %t151 = icmp uge i64 1, %t150 + br i1 %t151, label %range5374, label %inrange5375 +range5374: + call void @finch_panic_index(ptr @.str.3386, i64 2611, i64 1, i64 %t150) + unreachable +inrange5375: + %t152 = extractvalue { ptr, i64, i64 } %t149, 0 + %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 1 + %t154 = load %S.ast.Node, ptr %t153 + %t155 = call i1 @finch.gen.mutates(ptr %t139, { ptr, i64, i64 } %t147, %S.ast.Node %t154) + store { ptr, i64, i64 } %t147, ptr %a156 + call void @finch_str_drop(ptr %a156) + br label %logic.rend5376 +logic.rend5376: + br label %logic.end5371 +logic.end5371: + %t157 = phi i1 [ false, %logic.from5369 ], [ %t155, %logic.rend5376 ] + store i1 %t157, ptr %a158 + %t159 = load ptr, ptr %a1 + %t160 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t159, { ptr, i64, i64 } { ptr @.str.3387, i64 3, i64 0 }) + store { ptr, i64, i64 } %t160, ptr %a161 + %t162 = load ptr, ptr %a1 + %t163 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.store(ptr %t162, { ptr, i64, i64 } { ptr @.str.3388, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3389, i64 1, i64 0 }, { ptr, i64, i64 } %t163) + %t164 = load ptr, ptr %a1 + %t165 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t164, { ptr, i64, i64 } { ptr @.str.3390, i64 9, i64 0 }) + store { ptr, i64, i64 } %t165, ptr %a166 + %t167 = load ptr, ptr %a1 + %t168 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t167, { ptr, i64, i64 } { ptr @.str.3391, i64 9, i64 0 }) + store { ptr, i64, i64 } %t168, ptr %a169 + %t170 = load ptr, ptr %a1 + %t171 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t170, { ptr, i64, i64 } { ptr @.str.3392, i64 9, i64 0 }) + store { ptr, i64, i64 } %t171, ptr %a172 + %t173 = load ptr, ptr %a1 + %t174 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t173, { ptr, i64, i64 } { ptr @.str.3393, i64 8, i64 0 }) + store { ptr, i64, i64 } %t174, ptr %a175 + %t176 = load ptr, ptr %a1 + %t177 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t176, { ptr, i64, i64 } %t177) + %t178 = load ptr, ptr %a1 + %t179 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.label(ptr %t178, { ptr, i64, i64 } %t179) + %t180 = load ptr, ptr %a1 + %t181 = load ptr, ptr %a1 + %t182 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.3395, i64 46, i64 0 }, ptr %a184 + store { ptr, i64, i64 } %t182, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a183 + store { ptr, i64, i64 } %t186, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.3396, i64 14, i64 0 }, ptr %a189 + call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) + store { ptr, i64, i64 } %t186, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a187 + %t192 = call { ptr, i64, i64 } @finch.gen.op(ptr %t181, { ptr, i64, i64 } %t191) + store { ptr, i64, i64 } %t191, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = call { ptr, i64, i64 } @finch.gen.load(ptr %t180, { ptr, i64, i64 } { ptr @.str.3394, i64 3, i64 0 }, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a195 + call void @finch_str_drop(ptr %a195) + store { ptr, i64, i64 } %t194, ptr %a196 + %t197 = load ptr, ptr %a1 + %t198 = load { ptr, i64, i64 }, ptr %a161 + %t199 = call { ptr, i64, i64 } @finch.gen.load(ptr %t197, { ptr, i64, i64 } { ptr @.str.3397, i64 3, i64 0 }, { ptr, i64, i64 } %t198) + store { ptr, i64, i64 } %t199, ptr %a200 + %t201 = load ptr, ptr %a1 + %t202 = load { ptr, i64, i64 }, ptr %a200 + store { ptr, i64, i64 } { ptr @.str.3398, i64 13, i64 0 }, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + %t206 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t206, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.3399, i64 2, i64 0 }, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t206, ptr %a210 + call void @finch_str_drop(ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a207 + %t212 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } %t211, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t211, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + %t218 = call { ptr, i64, i64 } @finch.gen.op(ptr %t201, { ptr, i64, i64 } %t217) + store { ptr, i64, i64 } %t217, ptr %a219 + call void @finch_str_drop(ptr %a219) + store { ptr, i64, i64 } %t218, ptr %a220 + %t221 = load ptr, ptr %a1 + %t222 = load { ptr, i64, i64 }, ptr %a220 + %t223 = load { ptr, i64, i64 }, ptr %a169 + %t224 = load { ptr, i64, i64 }, ptr %a175 + call void @finch.gen.condBr(ptr %t221, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t223, { ptr, i64, i64 } %t224) + %t225 = load ptr, ptr %a1 + %t226 = load { ptr, i64, i64 }, ptr %a169 + call void @finch.gen.label(ptr %t225, { ptr, i64, i64 } %t226) + %t227 = load ptr, ptr %a1 + %t228 = load { ptr, i64, i64 }, ptr %a14 + %t229 = call { ptr, i64, i64 } @finch.gen.load(ptr %t227, { ptr, i64, i64 } { ptr @.str.3400, i64 3, i64 0 }, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t229, ptr %a230 + %t231 = load ptr, ptr %a1 + %t232 = load ptr, ptr %a1 + %t233 = load %S.ast.Type, ptr %a114 + %t234 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t232, %S.ast.Type %t233) + store { ptr, i64, i64 } { ptr @.str.3401, i64 23, i64 0 }, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t234, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t239, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.3402, i64 6, i64 0 }, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + store { ptr, i64, i64 } %t239, ptr %a243 + call void @finch_str_drop(ptr %a243) + %t244 = load { ptr, i64, i64 }, ptr %a240 + %t245 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t244, ptr %a247 + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t244, ptr %a249 + call void @finch_str_drop(ptr %a249) + %t250 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t250, ptr %a252 + store { ptr, i64, i64 } { ptr @.str.3403, i64 6, i64 0 }, ptr %a253 + call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) + store { ptr, i64, i64 } %t250, ptr %a254 + call void @finch_str_drop(ptr %a254) + %t255 = load { ptr, i64, i64 }, ptr %a251 + %t256 = load { ptr, i64, i64 }, ptr %a200 + store { ptr, i64, i64 } %t255, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + %t262 = call { ptr, i64, i64 } @finch.gen.op(ptr %t231, { ptr, i64, i64 } %t261) + store { ptr, i64, i64 } %t261, ptr %a263 + call void @finch_str_drop(ptr %a263) + store { ptr, i64, i64 } %t262, ptr %a264 + %t265 = load ptr, ptr %a1 + %t266 = load ptr, ptr %a1 + %t267 = load %S.ast.Type, ptr %a114 + %t268 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t266, %S.ast.Type %t267) + %t269 = load { ptr, i64, i64 }, ptr %a264 + %t270 = call { ptr, i64, i64 } @finch.gen.load(ptr %t265, { ptr, i64, i64 } %t268, { ptr, i64, i64 } %t269) + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_drop(ptr %a271) + store { ptr, i64, i64 } %t270, ptr %a272 + %t273 = load i1, ptr %a158 + br i1 %t273, label %then5377, label %endif5379 +then5377: + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a272 + %t276 = load %S.ast.Type, ptr %a114 + %t277 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t274, { ptr, i64, i64 } %t275, %S.ast.Type %t276) + %t278 = load { ptr, i64, i64 }, ptr %a272 + store { ptr, i64, i64 } %t277, ptr %a272 + store { ptr, i64, i64 } %t278, ptr %a279 + call void @finch_str_drop(ptr %a279) + br label %endif5379 +endif5379: + %t280 = load ptr, ptr %a1 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic5380, label %ok5381 +panic5380: + call void @finch_panic(ptr @.str.3404, i64 2631, ptr @.str.3405) + unreachable +ok5381: + %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 12 + %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 + %t284 = load { ptr, i64, i64 }, ptr %a172 + store { ptr, i64, i64 } %t284, ptr %a285 + call void @finch_str_copy(ptr %a286, ptr %a285) + %t287 = load { ptr, i64, i64 }, ptr %a286 + %t288 = insertvalue %S.gen.Loop zeroinitializer, { ptr, i64, i64 } %t287, 0 + %t289 = load { ptr, i64, i64 }, ptr %a175 + store { ptr, i64, i64 } %t289, ptr %a290 + call void @finch_str_copy(ptr %a291, ptr %a290) + %t292 = load { ptr, i64, i64 }, ptr %a291 + %t293 = insertvalue %S.gen.Loop %t288, { ptr, i64, i64 } %t292, 1 + %t294 = load ptr, ptr %a1 + %t295 = icmp eq ptr %t294, null + br i1 %t295, label %panic5382, label %ok5383 +panic5382: + call void @finch_panic(ptr @.str.3406, i64 2631, ptr @.str.3407) + unreachable +ok5383: + %t296 = getelementptr inbounds %S.gen.Gen, ptr %t294, i32 0, i32 10 + %t297 = getelementptr inbounds { ptr, i64, i64 }, ptr %t296, i32 0, i32 1 + %t298 = load i64, ptr %t297 + %t299 = insertvalue %S.gen.Loop %t293, i64 %t298, 2 + %t300 = load ptr, ptr %a1 + %t301 = icmp eq ptr %t300, null + br i1 %t301, label %panic5384, label %ok5385 +panic5384: + call void @finch_panic(ptr @.str.3408, i64 2631, ptr @.str.3409) + unreachable +ok5385: + %t302 = getelementptr inbounds %S.gen.Gen, ptr %t300, i32 0, i32 11 + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t302, i32 0, i32 1 + %t304 = load i64, ptr %t303 + %t305 = insertvalue %S.gen.Loop %t299, i64 %t304, 3 + %t306 = load i64, ptr %t283 + %t307 = add i64 %t306, 1 + call void @finch_arr_reserve(ptr %t282, i64 %t307, i64 ptrtoint (ptr getelementptr (%S.gen.Loop, ptr null, i32 1) to i64)) + %t308 = load ptr, ptr %t282 + %t309 = getelementptr inbounds %S.gen.Loop, ptr %t308, i64 %t306 + store %S.gen.Loop %t305, ptr %t309 + store i64 %t307, ptr %t283 + %t310 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t310) + %t311 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t312 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t312, ptr %a313 + call void @finch_str_copy(ptr %a314, ptr %a313) + %t315 = load { ptr, i64, i64 }, ptr %a314 + store { ptr, i64, i64 } %t315, ptr %a316 + %t317 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i32 0, i32 1 + %t319 = load i64, ptr %t318 + %t320 = icmp sgt i64 %t319, 0 + br i1 %t320, label %then5386, label %endif5388 +then5386: + %t321 = load ptr, ptr %a1 + %t322 = load %S.ast.Node, ptr %a2 + %t323 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t324 = load { ptr, i64, i64 }, ptr %t323 + %t325 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3410, i64 3, i64 0 }) + %t326 = load { ptr, i64, i64 }, ptr %a200 + %t327 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t321, %S.ast.Node %t322, { ptr, i64, i64 } %t324, %S.ast.Type %t325, { ptr, i64, i64 } %t326, i1 true, i1 false) + store %S.ast.Type %t325, ptr %a328 + call void @finch.drop.S_ast_Type(ptr %a328) + store { ptr, i64, i64 } %t327, ptr %a329 + call void @finch_str_drop(ptr %a329) + %t330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t331 = load { ptr, i64, i64 }, ptr %t330 + store { ptr, i64, i64 } %t331, ptr %a332 + call void @finch_str_copy(ptr %a333, ptr %a332) + %t334 = load { ptr, i64, i64 }, ptr %a333 + %t335 = load { ptr, i64, i64 }, ptr %a316 + store { ptr, i64, i64 } %t334, ptr %a316 + store { ptr, i64, i64 } %t335, ptr %a336 + call void @finch_str_drop(ptr %a336) + br label %endif5388 +endif5388: + %t337 = load ptr, ptr %a1 + %t338 = load %S.ast.Node, ptr %a2 + %t339 = load { ptr, i64, i64 }, ptr %a316 + %t340 = load %S.ast.Type, ptr %a114 + %t341 = load { ptr, i64, i64 }, ptr %a272 + %t342 = load i1, ptr %a158 + %t343 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t337, %S.ast.Node %t338, { ptr, i64, i64 } %t339, %S.ast.Type %t340, { ptr, i64, i64 } %t341, i1 true, i1 %t342) + store { ptr, i64, i64 } %t343, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load ptr, ptr %a1 + %t346 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t347 = load { ptr, i64, i64 }, ptr %t346 + %t348 = extractvalue { ptr, i64, i64 } %t347, 1 + %t349 = icmp uge i64 1, %t348 + br i1 %t349, label %range5389, label %inrange5390 +range5389: + call void @finch_panic_index(ptr @.str.3411, i64 2639, i64 1, i64 %t348) + unreachable +inrange5390: + %t350 = extractvalue { ptr, i64, i64 } %t347, 0 + %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 1 + %t352 = load %S.ast.Node, ptr %t351 + call void @finch.gen.block(ptr %t345, %S.ast.Node %t352, i1 true) + %t353 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t353) + %t354 = load ptr, ptr %a1 + %t355 = icmp eq ptr %t354, null + br i1 %t355, label %panic5391, label %ok5392 +panic5391: + call void @finch_panic(ptr @.str.3412, i64 2641, ptr @.str.3413) + unreachable +ok5392: + %t356 = getelementptr inbounds %S.gen.Gen, ptr %t354, i32 0, i32 12 + %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 + %t358 = load i64, ptr %t357 + %t359 = icmp eq i64 %t358, 0 + br i1 %t359, label %panic5393, label %ok5394 +panic5393: + call void @finch_panic(ptr @.str.3414, i64 2641, ptr @.str.3415) + unreachable +ok5394: + %t360 = sub i64 %t358, 1 + %t361 = load ptr, ptr %t356 + %t362 = getelementptr inbounds %S.gen.Loop, ptr %t361, i64 %t360 + %t363 = load %S.gen.Loop, ptr %t362 + store i64 %t360, ptr %t357 + store %S.gen.Loop %t363, ptr %a364 + call void @finch.drop.S_gen_Loop(ptr %a364) + %t365 = load ptr, ptr %a1 + %t366 = load { ptr, i64, i64 }, ptr %a172 + call void @finch.gen.br(ptr %t365, { ptr, i64, i64 } %t366) + %t367 = load ptr, ptr %a1 + %t368 = load { ptr, i64, i64 }, ptr %a172 + call void @finch.gen.label(ptr %t367, { ptr, i64, i64 } %t368) + %t369 = load ptr, ptr %a1 + %t370 = load { ptr, i64, i64 }, ptr %a161 + %t371 = call { ptr, i64, i64 } @finch.gen.load(ptr %t369, { ptr, i64, i64 } { ptr @.str.3416, i64 3, i64 0 }, { ptr, i64, i64 } %t370) + store { ptr, i64, i64 } %t371, ptr %a372 + %t373 = load ptr, ptr %a1 + %t374 = load ptr, ptr %a1 + %t375 = load { ptr, i64, i64 }, ptr %a372 + store { ptr, i64, i64 } { ptr @.str.3418, i64 8, i64 0 }, ptr %a377 + store { ptr, i64, i64 } %t375, ptr %a378 + call void @finch_str_concat(ptr %a376, ptr %a377, ptr %a378) + %t379 = load { ptr, i64, i64 }, ptr %a376 + store { ptr, i64, i64 } %t379, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.3419, i64 3, i64 0 }, ptr %a382 + call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) + store { ptr, i64, i64 } %t379, ptr %a383 + call void @finch_str_drop(ptr %a383) + %t384 = load { ptr, i64, i64 }, ptr %a380 + %t385 = call { ptr, i64, i64 } @finch.gen.op(ptr %t374, { ptr, i64, i64 } %t384) + store { ptr, i64, i64 } %t384, ptr %a386 + call void @finch_str_drop(ptr %a386) + %t387 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.store(ptr %t373, { ptr, i64, i64 } { ptr @.str.3417, i64 3, i64 0 }, { ptr, i64, i64 } %t385, { ptr, i64, i64 } %t387) + store { ptr, i64, i64 } %t385, ptr %a388 + call void @finch_str_drop(ptr %a388) + %t389 = load ptr, ptr %a1 + %t390 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t389, { ptr, i64, i64 } %t390) + %t391 = load ptr, ptr %a1 + %t392 = load { ptr, i64, i64 }, ptr %a175 + call void @finch.gen.label(ptr %t391, { ptr, i64, i64 } %t392) + %t393 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t393) + call void @finch_str_drop(ptr %a372) + call void @finch_str_drop(ptr %a316) + call void @finch_str_drop(ptr %a272) + call void @finch_str_drop(ptr %a264) + call void @finch_str_drop(ptr %a230) + call void @finch_str_drop(ptr %a220) + call void @finch_str_drop(ptr %a200) + call void @finch_str_drop(ptr %a196) + call void @finch_str_drop(ptr %a175) + call void @finch_str_drop(ptr %a172) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a166) + call void @finch_str_drop(ptr %a161) + call void @finch.drop.S_ast_Type(ptr %a114) + call void @finch.drop.S_ast_Type(ptr %a16) + call void @finch_str_drop(ptr %a14) + call void @finch.drop.S_gen_Ref(ptr %a13) + ret void +} + +define internal void @finch.gen.returnStmt(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca %S.ast.Node, align 16 + %a48 = alloca %S.ast.Node, align 16 + %a50 = alloca %S.ast.Node, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca %S.gen.Val, align 16 + %a131 = alloca %S.ast.Type, align 16 + %a132 = alloca %S.gen.Val, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca i64, align 16 + %a329 = alloca i64, align 16 + %a342 = alloca i64, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca %S.gen.Var, align 16 + %a421 = alloca %S.gen.Var, align 16 + %a423 = alloca %S.gen.Var, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca %S.gen.Val, align 16 + %a512 = alloca %S.gen.Val, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic5395, label %ok5396 +panic5395: + call void @finch_panic(ptr @.str.3420, i64 2652, ptr @.str.3421) + unreachable +ok5396: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 + %t6 = load i64, ptr %t5 + %t7 = icmp sgt i64 %t6, 0 + br i1 %t7, label %then5397, label %endif5399 +then5397: + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3422, i64 33, i64 0 }) + br label %endif5399 +endif5399: + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br label %logic.from5400 +logic.from5400: + br i1 %t13, label %logic.rhs5401, label %logic.end5402 +logic.rhs5401: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t15 = load { ptr, i64, i64 }, ptr %t14 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 0, %t16 + br i1 %t17, label %range5403, label %inrange5404 +range5403: + call void @finch_panic_index(ptr @.str.3423, i64 2656, i64 0, i64 %t16) + unreachable +inrange5404: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.ast.Node, ptr %t18, i64 0 + %t20 = getelementptr inbounds %S.ast.Node, ptr %t19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.3424, i64 4, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br label %logic.rend5405 +logic.rend5405: + br label %logic.end5402 +logic.end5402: + %t26 = phi i1 [ false, %logic.from5400 ], [ %t25, %logic.rend5405 ] + br label %logic.from5406 +logic.from5406: + br i1 %t26, label %logic.rhs5407, label %logic.end5408 +logic.rhs5407: + %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 0, %t29 + br i1 %t30, label %range5409, label %inrange5410 +range5409: + call void @finch_panic_index(ptr @.str.3425, i64 2656, i64 0, i64 %t29) + unreachable +inrange5410: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.ast.Node, ptr %t31, i64 0 + %t33 = getelementptr inbounds %S.ast.Node, ptr %t32, i32 0, i32 1 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.3426, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br label %logic.rend5411 +logic.rend5411: + br label %logic.end5408 +logic.end5408: + %t39 = phi i1 [ false, %logic.from5406 ], [ %t38, %logic.rend5411 ] + br i1 %t39, label %then5412, label %endif5414 +then5412: + %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 0, %t42 + br i1 %t43, label %range5415, label %inrange5416 +range5415: + call void @finch_panic_index(ptr @.str.3427, i64 2657, i64 0, i64 %t42) + unreachable +inrange5416: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 0 + %t46 = load %S.ast.Node, ptr %t45 + store %S.ast.Node %t46, ptr %a47 + call void @finch.copy.S_ast_Node(ptr %a48, ptr %a47) + %t49 = load %S.ast.Node, ptr %a48 + store %S.ast.Node %t49, ptr %a50 + %t51 = load ptr, ptr %a1 + %t52 = icmp eq ptr %t51, null + br i1 %t52, label %panic5417, label %ok5418 +panic5417: + call void @finch_panic(ptr @.str.3428, i64 2658, ptr @.str.3429) + unreachable +ok5418: + %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 13 + %t54 = getelementptr inbounds %S.gen.FnSig, ptr %t53, i32 0, i32 9 + %t55 = load i1, ptr %t54 + %t56 = xor i1 %t55, true + br i1 %t56, label %then5419, label %endif5421 +then5419: + store { ptr, i64, i64 } { ptr @.str.3430, i64 1, i64 0 }, ptr %a57 + %t58 = load ptr, ptr %a1 + %t59 = icmp eq ptr %t58, null + br i1 %t59, label %panic5422, label %ok5423 +panic5422: + call void @finch_panic(ptr @.str.3431, i64 2660, ptr @.str.3432) + unreachable +ok5423: + %t60 = getelementptr inbounds %S.gen.Gen, ptr %t58, i32 0, i32 13 + %t61 = getelementptr inbounds %S.gen.FnSig, ptr %t60, i32 0, i32 12 + %t62 = getelementptr inbounds %S.ast.Type, ptr %t61, i32 0, i32 0 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.3433, i64 4, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) + %t67 = icmp eq i32 %t66, 0 + br i1 %t67, label %then5424, label %endif5426 +then5424: + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic5427, label %ok5428 +panic5427: + call void @finch_panic(ptr @.str.3434, i64 2661, ptr @.str.3435) + unreachable +ok5428: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 13 + %t71 = getelementptr inbounds %S.gen.FnSig, ptr %t70, i32 0, i32 12 + %t72 = load %S.ast.Type, ptr %t71 + %t73 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t72) + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.3436, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t78, ptr %a57 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif5426 +endif5426: + %t81 = load ptr, ptr %a1 + %t82 = load %S.ast.Node, ptr %a50 + %t83 = load ptr, ptr %a1 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic5429, label %ok5430 +panic5429: + call void @finch_panic(ptr @.str.3438, i64 2663, ptr @.str.3439) + unreachable +ok5430: + %t85 = getelementptr inbounds %S.gen.Gen, ptr %t83, i32 0, i32 13 + %t86 = getelementptr inbounds %S.gen.FnSig, ptr %t85, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } { ptr @.str.3437, i64 1, i64 0 }, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.3440, i64 64, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + %t97 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t96, ptr %a99 + store { ptr, i64, i64 } %t97, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t96, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t102, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.3441, i64 1, i64 0 }, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + store { ptr, i64, i64 } %t102, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a103 + call void @finch.gen.fail(ptr %t81, %S.ast.Node %t82, { ptr, i64, i64 } %t107) + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a57) + br label %endif5421 +endif5421: + %t109 = load ptr, ptr %a1 + %t110 = load %S.ast.Node, ptr %a50 + call void @finch.gen.checkArgs(ptr %t109, %S.ast.Node %t110, i64 0, i64 1, { ptr, i64, i64 } { ptr @.str.3442, i64 5, i64 0 }) + %t111 = load ptr, ptr %a1 + %t112 = load ptr, ptr %a1 + %t113 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 + %t114 = load { ptr, i64, i64 }, ptr %t113 + %t115 = extractvalue { ptr, i64, i64 } %t114, 1 + %t116 = icmp uge i64 0, %t115 + br i1 %t116, label %range5431, label %inrange5432 +range5431: + call void @finch_panic_index(ptr @.str.3443, i64 2666, i64 0, i64 %t115) + unreachable +inrange5432: + %t117 = extractvalue { ptr, i64, i64 } %t114, 0 + %t118 = getelementptr inbounds %S.ast.Node, ptr %t117, i64 0 + %t119 = load %S.ast.Node, ptr %t118 + %t120 = call %S.gen.Val @finch.gen.expr(ptr %t112, %S.ast.Node %t119) + %t121 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3444, i64 3, i64 0 }) + %t122 = getelementptr inbounds %S.ast.Node, ptr %a50, i32 0, i32 9 + %t123 = load { ptr, i64, i64 }, ptr %t122 + %t124 = extractvalue { ptr, i64, i64 } %t123, 1 + %t125 = icmp uge i64 0, %t124 + br i1 %t125, label %range5433, label %inrange5434 +range5433: + call void @finch_panic_index(ptr @.str.3445, i64 2666, i64 0, i64 %t124) + unreachable +inrange5434: + %t126 = extractvalue { ptr, i64, i64 } %t123, 0 + %t127 = getelementptr inbounds %S.ast.Node, ptr %t126, i64 0 + %t128 = load %S.ast.Node, ptr %t127 + %t129 = call %S.gen.Val @finch.gen.coerce(ptr %t111, %S.gen.Val %t120, %S.ast.Type %t121, %S.ast.Node %t128, { ptr, i64, i64 } { ptr @.str.3446, i64 17, i64 0 }) + store %S.gen.Val %t120, ptr %a130 + call void @finch.drop.S_gen_Val(ptr %a130) + store %S.ast.Type %t121, ptr %a131 + call void @finch.drop.S_ast_Type(ptr %a131) + store %S.gen.Val %t129, ptr %a132 + %t133 = load ptr, ptr %a1 + %t134 = load %S.gen.Val, ptr %a132 + %t135 = call { ptr, i64, i64 } @finch.gen.own(ptr %t133, %S.gen.Val %t134) + store { ptr, i64, i64 } %t135, ptr %a136 + %t137 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t137, i64 0) + %t138 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t138, i64 0) + %t139 = load ptr, ptr %a1 + %t140 = load ptr, ptr %a1 + %t141 = load ptr, ptr %a1 + %t142 = icmp eq ptr %t141, null + br i1 %t142, label %panic5435, label %ok5436 +panic5435: + call void @finch_panic(ptr @.str.3448, i64 2670, ptr @.str.3449) + unreachable +ok5436: + %t143 = getelementptr inbounds %S.gen.Gen, ptr %t141, i32 0, i32 13 + %t144 = load %S.gen.FnSig, ptr %t143 + %t145 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t140, %S.gen.FnSig %t144) + store { ptr, i64, i64 } { ptr @.str.3447, i64 4, i64 0 }, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + store { ptr, i64, i64 } %t145, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.3450, i64 1, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load ptr, ptr %a1 + %t157 = load ptr, ptr %a1 + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic5437, label %ok5438 +panic5437: + call void @finch_panic(ptr @.str.3452, i64 2670, ptr @.str.3453) + unreachable +ok5438: + %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 13 + %t161 = load %S.gen.FnSig, ptr %t160 + %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t157, %S.gen.FnSig %t161) + store { ptr, i64, i64 } { ptr @.str.3451, i64 12, i64 0 }, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t162, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t167, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.3454, i64 36, i64 0 }, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t167, ptr %a171 + call void @finch_str_drop(ptr %a171) + %t172 = load { ptr, i64, i64 }, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t172, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t172, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.3455, i64 3, i64 0 }, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t178, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t156, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + store { ptr, i64, i64 } %t155, ptr %a187 + store { ptr, i64, i64 } %t184, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t155, ptr %a189 + call void @finch_str_drop(ptr %a189) + store { ptr, i64, i64 } %t184, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a186 + call void @finch.gen.emit(ptr %t139, { ptr, i64, i64 } %t191) + store { ptr, i64, i64 } %t191, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load ptr, ptr %a1 + %t194 = icmp eq ptr %t193, null + br i1 %t194, label %panic5439, label %ok5440 +panic5439: + call void @finch_panic(ptr @.str.3456, i64 2671, ptr @.str.3457) + unreachable +ok5440: + %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 + store i1 true, ptr %t195 + call void @finch_str_drop(ptr %a136) + call void @finch.drop.S_gen_Val(ptr %a132) + call void @finch.drop.S_ast_Node(ptr %a50) + ret void +endif5414: + %t196 = load ptr, ptr %a1 + %t197 = icmp eq ptr %t196, null + br i1 %t197, label %panic5441, label %ok5442 +panic5441: + call void @finch_panic(ptr @.str.3458, i64 2674, ptr @.str.3459) + unreachable +ok5442: + %t198 = getelementptr inbounds %S.gen.Gen, ptr %t196, i32 0, i32 13 + %t199 = getelementptr inbounds %S.gen.FnSig, ptr %t198, i32 0, i32 12 + %t200 = getelementptr inbounds %S.ast.Type, ptr %t199, i32 0, i32 0 + %t201 = load { ptr, i64, i64 }, ptr %t200 + store { ptr, i64, i64 } %t201, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.3460, i64 4, i64 0 }, ptr %a203 + %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) + %t205 = icmp ne i32 %t204, 0 + br i1 %t205, label %then5443, label %endif5445 +then5443: + %t206 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 + %t208 = load i64, ptr %t207 + %t209 = icmp sgt i64 %t208, 0 + br i1 %t209, label %then5446, label %endif5448 +then5446: + %t210 = load ptr, ptr %a1 + %t211 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t212 = load { ptr, i64, i64 }, ptr %t211 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 0, %t213 + br i1 %t214, label %range5449, label %inrange5450 +range5449: + call void @finch_panic_index(ptr @.str.3461, i64 2676, i64 0, i64 %t213) + unreachable +inrange5450: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 0 + %t217 = load %S.ast.Node, ptr %t216 + %t218 = load ptr, ptr %a1 + %t219 = icmp eq ptr %t218, null + br i1 %t219, label %panic5451, label %ok5452 +panic5451: + call void @finch_panic(ptr @.str.3463, i64 2676, ptr @.str.3464) + unreachable +ok5452: + %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 13 + %t221 = getelementptr inbounds %S.gen.FnSig, ptr %t220, i32 0, i32 1 + %t222 = load { ptr, i64, i64 }, ptr %t221 + store { ptr, i64, i64 } { ptr @.str.3462, i64 1, i64 0 }, ptr %a224 + store { ptr, i64, i64 } %t222, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + %t226 = load { ptr, i64, i64 }, ptr %a223 + store { ptr, i64, i64 } %t226, ptr %a228 + store { ptr, i64, i64 } { ptr @.str.3465, i64 46, i64 0 }, ptr %a229 + call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) + store { ptr, i64, i64 } %t226, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a227 + call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t231) + store { ptr, i64, i64 } %t231, ptr %a232 + call void @finch_str_drop(ptr %a232) + br label %endif5448 +endif5448: + %t233 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t233, i64 0) + %t234 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t234, i64 0) + %t235 = load ptr, ptr %a1 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic5453, label %ok5454 +panic5453: + call void @finch_panic(ptr @.str.3466, i64 2680, ptr @.str.3467) + unreachable +ok5454: + %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 13 + %t238 = getelementptr inbounds %S.gen.FnSig, ptr %t237, i32 0, i32 9 + %t239 = load i1, ptr %t238 + br i1 %t239, label %then5455, label %else5456 +then5455: + %t240 = load ptr, ptr %a1 + %t241 = load ptr, ptr %a1 + %t242 = load ptr, ptr %a1 + %t243 = icmp eq ptr %t242, null + br i1 %t243, label %panic5458, label %ok5459 +panic5458: + call void @finch_panic(ptr @.str.3469, i64 2681, ptr @.str.3470) + unreachable +ok5459: + %t244 = getelementptr inbounds %S.gen.Gen, ptr %t242, i32 0, i32 13 + %t245 = load %S.gen.FnSig, ptr %t244 + %t246 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t241, %S.gen.FnSig %t245) + store { ptr, i64, i64 } { ptr @.str.3468, i64 4, i64 0 }, ptr %a248 + store { ptr, i64, i64 } %t246, ptr %a249 + call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) + store { ptr, i64, i64 } %t246, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.3471, i64 53, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + call void @finch.gen.emit(ptr %t240, { ptr, i64, i64 } %t256) + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch_str_drop(ptr %a257) + br label %endif5457 +else5456: + %t258 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t258, { ptr, i64, i64 } { ptr @.str.3472, i64 8, i64 0 }) + br label %endif5457 +endif5457: + %t259 = load ptr, ptr %a1 + %t260 = icmp eq ptr %t259, null + br i1 %t260, label %panic5460, label %ok5461 +panic5460: + call void @finch_panic(ptr @.str.3473, i64 2685, ptr @.str.3474) + unreachable +ok5461: + %t261 = getelementptr inbounds %S.gen.Gen, ptr %t259, i32 0, i32 9 + store i1 true, ptr %t261 + ret void +endif5445: + %t262 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i32 0, i32 1 + %t264 = load i64, ptr %t263 + %t265 = icmp eq i64 %t264, 0 + br i1 %t265, label %then5462, label %endif5464 +then5462: + %t266 = load ptr, ptr %a1 + %t267 = load %S.ast.Node, ptr %a2 + %t268 = load ptr, ptr %a1 + %t269 = icmp eq ptr %t268, null + br i1 %t269, label %panic5465, label %ok5466 +panic5465: + call void @finch_panic(ptr @.str.3476, i64 2689, ptr @.str.3477) + unreachable +ok5466: + %t270 = getelementptr inbounds %S.gen.Gen, ptr %t268, i32 0, i32 13 + %t271 = getelementptr inbounds %S.gen.FnSig, ptr %t270, i32 0, i32 1 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } { ptr @.str.3475, i64 1, i64 0 }, ptr %a274 + store { ptr, i64, i64 } %t272, ptr %a275 + call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) + %t276 = load { ptr, i64, i64 }, ptr %a273 + store { ptr, i64, i64 } %t276, ptr %a278 + store { ptr, i64, i64 } { ptr @.str.3478, i64 14, i64 0 }, ptr %a279 + call void @finch_str_concat(ptr %a277, ptr %a278, ptr %a279) + store { ptr, i64, i64 } %t276, ptr %a280 + call void @finch_str_drop(ptr %a280) + %t281 = load { ptr, i64, i64 }, ptr %a277 + %t282 = load ptr, ptr %a1 + %t283 = icmp eq ptr %t282, null + br i1 %t283, label %panic5467, label %ok5468 +panic5467: + call void @finch_panic(ptr @.str.3479, i64 2689, ptr @.str.3480) + unreachable +ok5468: + %t284 = getelementptr inbounds %S.gen.Gen, ptr %t282, i32 0, i32 13 + %t285 = getelementptr inbounds %S.gen.FnSig, ptr %t284, i32 0, i32 12 + %t286 = load %S.ast.Type, ptr %t285 + %t287 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t286) + store { ptr, i64, i64 } %t281, ptr %a289 + store { ptr, i64, i64 } %t287, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t281, ptr %a291 + call void @finch_str_drop(ptr %a291) + store { ptr, i64, i64 } %t287, ptr %a292 + call void @finch_str_drop(ptr %a292) + %t293 = load { ptr, i64, i64 }, ptr %a288 + call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t293) + store { ptr, i64, i64 } %t293, ptr %a294 + call void @finch_str_drop(ptr %a294) + br label %endif5464 +endif5464: + %t295 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t296 = load { ptr, i64, i64 }, ptr %t295 + %t297 = extractvalue { ptr, i64, i64 } %t296, 1 + %t298 = icmp uge i64 0, %t297 + br i1 %t298, label %range5469, label %inrange5470 +range5469: + call void @finch_panic_index(ptr @.str.3481, i64 2692, i64 0, i64 %t297) + unreachable +inrange5470: + %t299 = extractvalue { ptr, i64, i64 } %t296, 0 + %t300 = getelementptr inbounds %S.ast.Node, ptr %t299, i64 0 + %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i32 0, i32 0 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store { ptr, i64, i64 } %t302, ptr %a303 + store { ptr, i64, i64 } { ptr @.str.3482, i64 3, i64 0 }, ptr %a304 + %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) + %t306 = icmp ne i32 %t305, 0 + br i1 %t306, label %then5471, label %endif5473 +then5471: + %t307 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t308 = load { ptr, i64, i64 }, ptr %t307 + %t309 = extractvalue { ptr, i64, i64 } %t308, 1 + %t310 = icmp uge i64 0, %t309 + br i1 %t310, label %range5474, label %inrange5475 +range5474: + call void @finch_panic_index(ptr @.str.3483, i64 2693, i64 0, i64 %t309) + unreachable +inrange5475: + %t311 = extractvalue { ptr, i64, i64 } %t308, 0 + %t312 = getelementptr inbounds %S.ast.Node, ptr %t311, i64 0 + %t313 = getelementptr inbounds %S.ast.Node, ptr %t312, i32 0, i32 1 + %t314 = load { ptr, i64, i64 }, ptr %t313 + store { ptr, i64, i64 } %t314, ptr %a315 + call void @finch_str_copy(ptr %a316, ptr %a315) + %t317 = load { ptr, i64, i64 }, ptr %a316 + store { ptr, i64, i64 } %t317, ptr %a318 + %t319 = load ptr, ptr %a1 + %t320 = icmp eq ptr %t319, null + br i1 %t320, label %panic5476, label %ok5477 +panic5476: + call void @finch_panic(ptr @.str.3484, i64 2694, ptr @.str.3485) + unreachable +ok5477: + %t321 = getelementptr inbounds %S.gen.Gen, ptr %t319, i32 0, i32 10 + %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i32 0, i32 1 + %t323 = load i64, ptr %t322 + store i64 %t323, ptr %a324 + br label %while.cond5478 +while.cond5478: + %t325 = load i64, ptr %a324 + %t326 = icmp sgt i64 %t325, 0 + br i1 %t326, label %while.body5479, label %while.end5480 +while.body5479: + %t327 = load i64, ptr %a324 + %t328 = sub i64 %t327, 1 + store i64 %t328, ptr %a324 + store i64 -1, ptr %a329 + %t330 = load ptr, ptr %a1 + %t331 = icmp eq ptr %t330, null + br i1 %t331, label %panic5481, label %ok5482 +panic5481: + call void @finch_panic(ptr @.str.3486, i64 2698, ptr @.str.3487) + unreachable +ok5482: + %t332 = getelementptr inbounds %S.gen.Gen, ptr %t330, i32 0, i32 10 + %t333 = load i64, ptr %a324 + %t334 = load { ptr, i64, i64 }, ptr %t332 + %t335 = extractvalue { ptr, i64, i64 } %t334, 1 + %t336 = icmp uge i64 %t333, %t335 + br i1 %t336, label %range5483, label %inrange5484 +range5483: + call void @finch_panic_index(ptr @.str.3488, i64 2698, i64 %t333, i64 %t335) + unreachable +inrange5484: + %t337 = extractvalue { ptr, i64, i64 } %t334, 0 + %t338 = getelementptr inbounds %S.gen.Scope, ptr %t337, i64 %t333 + %t339 = getelementptr inbounds %S.gen.Scope, ptr %t338, i32 0, i32 0 + %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %t339, i32 0, i32 1 + %t341 = load i64, ptr %t340 + store i64 0, ptr %a342 + br label %for.cond5485 +for.cond5485: + %t343 = load i64, ptr %a342 + %t344 = icmp slt i64 %t343, %t341 + br i1 %t344, label %for.body5486, label %for.end5488 +for.body5486: + %t345 = load ptr, ptr %a1 + %t346 = icmp eq ptr %t345, null + br i1 %t346, label %panic5489, label %ok5490 +panic5489: + call void @finch_panic(ptr @.str.3489, i64 2699, ptr @.str.3490) + unreachable +ok5490: + %t347 = getelementptr inbounds %S.gen.Gen, ptr %t345, i32 0, i32 10 + %t348 = load i64, ptr %a324 + %t349 = load { ptr, i64, i64 }, ptr %t347 + %t350 = extractvalue { ptr, i64, i64 } %t349, 1 + %t351 = icmp uge i64 %t348, %t350 + br i1 %t351, label %range5491, label %inrange5492 +range5491: + call void @finch_panic_index(ptr @.str.3491, i64 2699, i64 %t348, i64 %t350) + unreachable +inrange5492: + %t352 = extractvalue { ptr, i64, i64 } %t349, 0 + %t353 = getelementptr inbounds %S.gen.Scope, ptr %t352, i64 %t348 + %t354 = getelementptr inbounds %S.gen.Scope, ptr %t353, i32 0, i32 0 + %t355 = load i64, ptr %a342 + %t356 = load { ptr, i64, i64 }, ptr %t354 + %t357 = extractvalue { ptr, i64, i64 } %t356, 1 + %t358 = icmp uge i64 %t355, %t357 + br i1 %t358, label %range5493, label %inrange5494 +range5493: + call void @finch_panic_index(ptr @.str.3492, i64 2699, i64 %t355, i64 %t357) + unreachable +inrange5494: + %t359 = extractvalue { ptr, i64, i64 } %t356, 0 + %t360 = getelementptr inbounds %S.gen.Var, ptr %t359, i64 %t355 + %t361 = getelementptr inbounds %S.gen.Var, ptr %t360, i32 0, i32 0 + %t362 = load { ptr, i64, i64 }, ptr %t361 + %t363 = load { ptr, i64, i64 }, ptr %a318 + store { ptr, i64, i64 } %t362, ptr %a364 + store { ptr, i64, i64 } %t363, ptr %a365 + %t366 = call i32 @finch_str_eq(ptr %a364, ptr %a365) + %t367 = icmp ne i32 %t366, 0 + br label %logic.from5495 +logic.from5495: + br i1 %t367, label %logic.rhs5496, label %logic.end5497 +logic.rhs5496: + %t368 = load ptr, ptr %a1 + %t369 = icmp eq ptr %t368, null + br i1 %t369, label %panic5498, label %ok5499 +panic5498: + call void @finch_panic(ptr @.str.3493, i64 2699, ptr @.str.3494) + unreachable +ok5499: + %t370 = getelementptr inbounds %S.gen.Gen, ptr %t368, i32 0, i32 44 + %t371 = load i1, ptr %t370 + br label %logic.from5500 +logic.from5500: + br i1 %t371, label %logic.rhs5501, label %logic.end5502 +logic.rhs5501: + %t372 = load ptr, ptr %a1 + %t373 = icmp eq ptr %t372, null + br i1 %t373, label %panic5503, label %ok5504 +panic5503: + call void @finch_panic(ptr @.str.3495, i64 2699, ptr @.str.3496) + unreachable +ok5504: + %t374 = getelementptr inbounds %S.gen.Gen, ptr %t372, i32 0, i32 10 + %t375 = load i64, ptr %a324 + %t376 = load { ptr, i64, i64 }, ptr %t374 + %t377 = extractvalue { ptr, i64, i64 } %t376, 1 + %t378 = icmp uge i64 %t375, %t377 + br i1 %t378, label %range5505, label %inrange5506 +range5505: + call void @finch_panic_index(ptr @.str.3497, i64 2699, i64 %t375, i64 %t377) + unreachable +inrange5506: + %t379 = extractvalue { ptr, i64, i64 } %t376, 0 + %t380 = getelementptr inbounds %S.gen.Scope, ptr %t379, i64 %t375 + %t381 = getelementptr inbounds %S.gen.Scope, ptr %t380, i32 0, i32 0 + %t382 = load i64, ptr %a342 + %t383 = load { ptr, i64, i64 }, ptr %t381 + %t384 = extractvalue { ptr, i64, i64 } %t383, 1 + %t385 = icmp uge i64 %t382, %t384 + br i1 %t385, label %range5507, label %inrange5508 +range5507: + call void @finch_panic_index(ptr @.str.3498, i64 2699, i64 %t382, i64 %t384) + unreachable +inrange5508: + %t386 = extractvalue { ptr, i64, i64 } %t383, 0 + %t387 = getelementptr inbounds %S.gen.Var, ptr %t386, i64 %t382 + %t388 = getelementptr inbounds %S.gen.Var, ptr %t387, i32 0, i32 4 + %t389 = load i64, ptr %t388 + %t390 = load ptr, ptr %a1 + %t391 = icmp eq ptr %t390, null + br i1 %t391, label %panic5509, label %ok5510 +panic5509: + call void @finch_panic(ptr @.str.3499, i64 2699, ptr @.str.3500) + unreachable +ok5510: + %t392 = getelementptr inbounds %S.gen.Gen, ptr %t390, i32 0, i32 45 + %t393 = load i64, ptr %t392 + %t394 = icmp sge i64 %t389, %t393 + br label %logic.rend5511 +logic.rend5511: + br label %logic.end5502 +logic.end5502: + %t395 = phi i1 [ false, %logic.from5500 ], [ %t394, %logic.rend5511 ] + %t396 = xor i1 %t395, true + br label %logic.rend5512 +logic.rend5512: + br label %logic.end5497 +logic.end5497: + %t397 = phi i1 [ false, %logic.from5495 ], [ %t396, %logic.rend5512 ] + br i1 %t397, label %then5513, label %endif5515 +then5513: + %t398 = load i64, ptr %a342 + store i64 %t398, ptr %a329 + br label %endif5515 +endif5515: + br label %for.step5487 +for.step5487: + %t399 = load i64, ptr %a342 + %t400 = add i64 %t399, 1 + store i64 %t400, ptr %a342 + br label %for.cond5485 +for.end5488: + %t401 = load i64, ptr %a329 + %t402 = icmp slt i64 %t401, 0 + br i1 %t402, label %then5516, label %endif5518 +then5516: + br label %while.cond5478 +endif5518: + %t403 = load ptr, ptr %a1 + %t404 = icmp eq ptr %t403, null + br i1 %t404, label %panic5519, label %ok5520 +panic5519: + call void @finch_panic(ptr @.str.3501, i64 2706, ptr @.str.3502) + unreachable +ok5520: + %t405 = getelementptr inbounds %S.gen.Gen, ptr %t403, i32 0, i32 10 + %t406 = load i64, ptr %a324 + %t407 = load { ptr, i64, i64 }, ptr %t405 + %t408 = extractvalue { ptr, i64, i64 } %t407, 1 + %t409 = icmp uge i64 %t406, %t408 + br i1 %t409, label %range5521, label %inrange5522 +range5521: + call void @finch_panic_index(ptr @.str.3503, i64 2706, i64 %t406, i64 %t408) + unreachable +inrange5522: + %t410 = extractvalue { ptr, i64, i64 } %t407, 0 + %t411 = getelementptr inbounds %S.gen.Scope, ptr %t410, i64 %t406 + %t412 = getelementptr inbounds %S.gen.Scope, ptr %t411, i32 0, i32 0 + %t413 = load i64, ptr %a329 + %t414 = load { ptr, i64, i64 }, ptr %t412 + %t415 = extractvalue { ptr, i64, i64 } %t414, 1 + %t416 = icmp uge i64 %t413, %t415 + br i1 %t416, label %range5523, label %inrange5524 +range5523: + call void @finch_panic_index(ptr @.str.3504, i64 2706, i64 %t413, i64 %t415) + unreachable +inrange5524: + %t417 = extractvalue { ptr, i64, i64 } %t414, 0 + %t418 = getelementptr inbounds %S.gen.Var, ptr %t417, i64 %t413 + %t419 = load %S.gen.Var, ptr %t418 + store %S.gen.Var %t419, ptr %a420 + call void @finch.copy.S_gen_Var(ptr %a421, ptr %a420) + %t422 = load %S.gen.Var, ptr %a421 + store %S.gen.Var %t422, ptr %a423 + %t424 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 5 + %t425 = load i1, ptr %t424 + br label %logic.from5525 +logic.from5525: + br i1 %t425, label %logic.rhs5526, label %logic.end5527 +logic.rhs5526: + %t426 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 + %t427 = load %S.ast.Type, ptr %t426 + %t428 = load ptr, ptr %a1 + %t429 = icmp eq ptr %t428, null + br i1 %t429, label %panic5528, label %ok5529 +panic5528: + call void @finch_panic(ptr @.str.3505, i64 2707, ptr @.str.3506) + unreachable +ok5529: + %t430 = getelementptr inbounds %S.gen.Gen, ptr %t428, i32 0, i32 13 + %t431 = getelementptr inbounds %S.gen.FnSig, ptr %t430, i32 0, i32 12 + %t432 = load %S.ast.Type, ptr %t431 + %t433 = call i1 @finch.ast.same(%S.ast.Type %t427, %S.ast.Type %t432) + br label %logic.rend5530 +logic.rend5530: + br label %logic.end5527 +logic.end5527: + %t434 = phi i1 [ false, %logic.from5525 ], [ %t433, %logic.rend5530 ] + br i1 %t434, label %then5531, label %endif5533 +then5531: + %t435 = load ptr, ptr %a1 + %t436 = load ptr, ptr %a1 + %t437 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 1 + %t438 = load %S.ast.Type, ptr %t437 + %t439 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t436, %S.ast.Type %t438) + %t440 = getelementptr inbounds %S.gen.Var, ptr %a423, i32 0, i32 2 + %t441 = load { ptr, i64, i64 }, ptr %t440 + %t442 = call { ptr, i64, i64 } @finch.gen.load(ptr %t435, { ptr, i64, i64 } %t439, { ptr, i64, i64 } %t441) + store { ptr, i64, i64 } %t439, ptr %a443 + call void @finch_str_drop(ptr %a443) + store { ptr, i64, i64 } %t442, ptr %a444 + %t445 = load ptr, ptr %a1 + %t446 = icmp eq ptr %t445, null + br i1 %t446, label %panic5534, label %ok5535 +panic5534: + call void @finch_panic(ptr @.str.3507, i64 2709, ptr @.str.3508) + unreachable +ok5535: + %t447 = getelementptr inbounds %S.gen.Gen, ptr %t445, i32 0, i32 10 + %t448 = load i64, ptr %a324 + %t449 = load { ptr, i64, i64 }, ptr %t447 + %t450 = extractvalue { ptr, i64, i64 } %t449, 1 + %t451 = icmp uge i64 %t448, %t450 + br i1 %t451, label %range5536, label %inrange5537 +range5536: + call void @finch_panic_index(ptr @.str.3509, i64 2709, i64 %t448, i64 %t450) + unreachable +inrange5537: + %t452 = extractvalue { ptr, i64, i64 } %t449, 0 + %t453 = getelementptr inbounds %S.gen.Scope, ptr %t452, i64 %t448 + %t454 = getelementptr inbounds %S.gen.Scope, ptr %t453, i32 0, i32 0 + %t455 = load i64, ptr %a329 + %t456 = load { ptr, i64, i64 }, ptr %t454 + %t457 = extractvalue { ptr, i64, i64 } %t456, 1 + %t458 = icmp uge i64 %t455, %t457 + br i1 %t458, label %range5538, label %inrange5539 +range5538: + call void @finch_panic_index(ptr @.str.3510, i64 2709, i64 %t455, i64 %t457) + unreachable +inrange5539: + %t459 = extractvalue { ptr, i64, i64 } %t456, 0 + %t460 = getelementptr inbounds %S.gen.Var, ptr %t459, i64 %t455 + %t461 = getelementptr inbounds %S.gen.Var, ptr %t460, i32 0, i32 6 + store i1 true, ptr %t461 + %t462 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t462, i64 0) + %t463 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t463, i64 0) + %t464 = load ptr, ptr %a1 + %t465 = icmp eq ptr %t464, null + br i1 %t465, label %panic5540, label %ok5541 +panic5540: + call void @finch_panic(ptr @.str.3511, i64 2712, ptr @.str.3512) + unreachable +ok5541: + %t466 = getelementptr inbounds %S.gen.Gen, ptr %t464, i32 0, i32 10 + %t467 = load i64, ptr %a324 + %t468 = load { ptr, i64, i64 }, ptr %t466 + %t469 = extractvalue { ptr, i64, i64 } %t468, 1 + %t470 = icmp uge i64 %t467, %t469 + br i1 %t470, label %range5542, label %inrange5543 +range5542: + call void @finch_panic_index(ptr @.str.3513, i64 2712, i64 %t467, i64 %t469) + unreachable +inrange5543: + %t471 = extractvalue { ptr, i64, i64 } %t468, 0 + %t472 = getelementptr inbounds %S.gen.Scope, ptr %t471, i64 %t467 + %t473 = getelementptr inbounds %S.gen.Scope, ptr %t472, i32 0, i32 0 + %t474 = load i64, ptr %a329 + %t475 = load { ptr, i64, i64 }, ptr %t473 + %t476 = extractvalue { ptr, i64, i64 } %t475, 1 + %t477 = icmp uge i64 %t474, %t476 + br i1 %t477, label %range5544, label %inrange5545 +range5544: + call void @finch_panic_index(ptr @.str.3514, i64 2712, i64 %t474, i64 %t476) + unreachable +inrange5545: + %t478 = extractvalue { ptr, i64, i64 } %t475, 0 + %t479 = getelementptr inbounds %S.gen.Var, ptr %t478, i64 %t474 + %t480 = getelementptr inbounds %S.gen.Var, ptr %t479, i32 0, i32 6 + store i1 false, ptr %t480 + %t481 = load ptr, ptr %a1 + %t482 = load { ptr, i64, i64 }, ptr %a444 + call void @finch.gen.finishReturn(ptr %t481, { ptr, i64, i64 } %t482) + call void @finch_str_drop(ptr %a444) + call void @finch.drop.S_gen_Var(ptr %a423) + call void @finch_str_drop(ptr %a318) + ret void +endif5533: + call void @finch.drop.S_gen_Var(ptr %a423) + br label %while.end5480 +while.end5480: + call void @finch_str_drop(ptr %a318) + br label %endif5473 +endif5473: + %t483 = load ptr, ptr %a1 + %t484 = load ptr, ptr %a1 + %t485 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t486 = load { ptr, i64, i64 }, ptr %t485 + %t487 = extractvalue { ptr, i64, i64 } %t486, 1 + %t488 = icmp uge i64 0, %t487 + br i1 %t488, label %range5546, label %inrange5547 +range5546: + call void @finch_panic_index(ptr @.str.3515, i64 2719, i64 0, i64 %t487) + unreachable +inrange5547: + %t489 = extractvalue { ptr, i64, i64 } %t486, 0 + %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 + %t491 = load %S.ast.Node, ptr %t490 + %t492 = load ptr, ptr %a1 + %t493 = icmp eq ptr %t492, null + br i1 %t493, label %panic5548, label %ok5549 +panic5548: + call void @finch_panic(ptr @.str.3516, i64 2719, ptr @.str.3517) + unreachable +ok5549: + %t494 = getelementptr inbounds %S.gen.Gen, ptr %t492, i32 0, i32 13 + %t495 = getelementptr inbounds %S.gen.FnSig, ptr %t494, i32 0, i32 12 + %t496 = load %S.ast.Type, ptr %t495 + %t497 = call %S.gen.Val @finch.gen.exprWant(ptr %t484, %S.ast.Node %t491, %S.ast.Type %t496) + %t498 = load ptr, ptr %a1 + %t499 = icmp eq ptr %t498, null + br i1 %t499, label %panic5550, label %ok5551 +panic5550: + call void @finch_panic(ptr @.str.3518, i64 2719, ptr @.str.3519) + unreachable +ok5551: + %t500 = getelementptr inbounds %S.gen.Gen, ptr %t498, i32 0, i32 13 + %t501 = getelementptr inbounds %S.gen.FnSig, ptr %t500, i32 0, i32 12 + %t502 = load %S.ast.Type, ptr %t501 + %t503 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t504 = load { ptr, i64, i64 }, ptr %t503 + %t505 = extractvalue { ptr, i64, i64 } %t504, 1 + %t506 = icmp uge i64 0, %t505 + br i1 %t506, label %range5552, label %inrange5553 +range5552: + call void @finch_panic_index(ptr @.str.3520, i64 2719, i64 0, i64 %t505) + unreachable +inrange5553: + %t507 = extractvalue { ptr, i64, i64 } %t504, 0 + %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 0 + %t509 = load %S.ast.Node, ptr %t508 + %t510 = call %S.gen.Val @finch.gen.coerce(ptr %t483, %S.gen.Val %t497, %S.ast.Type %t502, %S.ast.Node %t509, { ptr, i64, i64 } { ptr @.str.3521, i64 18, i64 0 }) + store %S.gen.Val %t497, ptr %a511 + call void @finch.drop.S_gen_Val(ptr %a511) + store %S.gen.Val %t510, ptr %a512 + %t513 = load ptr, ptr %a1 + %t514 = load %S.gen.Val, ptr %a512 + %t515 = call { ptr, i64, i64 } @finch.gen.own(ptr %t513, %S.gen.Val %t514) + store { ptr, i64, i64 } %t515, ptr %a516 + %t517 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t517, i64 0) + %t518 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t518, i64 0) + %t519 = load ptr, ptr %a1 + %t520 = load { ptr, i64, i64 }, ptr %a516 + call void @finch.gen.finishReturn(ptr %t519, { ptr, i64, i64 } %t520) + call void @finch_str_drop(ptr %a516) + call void @finch.drop.S_gen_Val(ptr %a512) + ret void +} + +define internal void @finch.gen.finishReturn(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic5554, label %ok5555 +panic5554: + call void @finch_panic(ptr @.str.3522, i64 2727, ptr @.str.3523) + unreachable +ok5555: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 13 + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %t5, i32 0, i32 9 + %t7 = load i1, ptr %t6 + br i1 %t7, label %then5556, label %else5557 +then5556: + %t8 = load ptr, ptr %a1 + %t9 = load ptr, ptr %a1 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic5559, label %ok5560 +panic5559: + call void @finch_panic(ptr @.str.3525, i64 2728, ptr @.str.3526) + unreachable +ok5560: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 + %t13 = load %S.gen.FnSig, ptr %t12 + %t14 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t9, %S.gen.FnSig %t13) + store { ptr, i64, i64 } { ptr @.str.3524, i64 12, i64 0 }, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.3527, i64 28, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + %t25 = call { ptr, i64, i64 } @finch.gen.op(ptr %t8, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t24, ptr %a26 + call void @finch_str_drop(ptr %a26) + store { ptr, i64, i64 } %t25, ptr %a27 + %t28 = load ptr, ptr %a1 + %t29 = load ptr, ptr %a1 + %t30 = load ptr, ptr %a1 + %t31 = icmp eq ptr %t30, null + br i1 %t31, label %panic5561, label %ok5562 +panic5561: + call void @finch_panic(ptr @.str.3529, i64 2729, ptr @.str.3530) + unreachable +ok5562: + %t32 = getelementptr inbounds %S.gen.Gen, ptr %t30, i32 0, i32 13 + %t33 = load %S.gen.FnSig, ptr %t32 + %t34 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t29, %S.gen.FnSig %t33) + store { ptr, i64, i64 } { ptr @.str.3528, i64 12, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t34, ptr %a38 + call void @finch_str_drop(ptr %a38) + %t39 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t39, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.3531, i64 1, i64 0 }, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + %t45 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t44, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + store { ptr, i64, i64 } %t44, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.3532, i64 2, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load ptr, ptr %a1 + %t57 = load ptr, ptr %a1 + %t58 = icmp eq ptr %t57, null + br i1 %t58, label %panic5563, label %ok5564 +panic5563: + call void @finch_panic(ptr @.str.3533, i64 2729, ptr @.str.3534) + unreachable +ok5564: + %t59 = getelementptr inbounds %S.gen.Gen, ptr %t57, i32 0, i32 13 + %t60 = getelementptr inbounds %S.gen.FnSig, ptr %t59, i32 0, i32 12 + %t61 = load %S.ast.Type, ptr %t60 + %t62 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t56, %S.ast.Type %t61) + store { ptr, i64, i64 } %t55, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t55, ptr %a66 + call void @finch_str_drop(ptr %a66) + store { ptr, i64, i64 } %t62, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t68, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.3535, i64 1, i64 0 }, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + %t74 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t73, ptr %a76 + store { ptr, i64, i64 } %t74, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t73, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3536, i64 3, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + %t85 = call { ptr, i64, i64 } @finch.gen.op(ptr %t28, { ptr, i64, i64 } %t84) + store { ptr, i64, i64 } %t84, ptr %a86 + call void @finch_str_drop(ptr %a86) + store { ptr, i64, i64 } %t85, ptr %a87 + %t88 = load ptr, ptr %a1 + %t89 = load ptr, ptr %a1 + %t90 = load ptr, ptr %a1 + %t91 = icmp eq ptr %t90, null + br i1 %t91, label %panic5565, label %ok5566 +panic5565: + call void @finch_panic(ptr @.str.3538, i64 2730, ptr @.str.3539) + unreachable +ok5566: + %t92 = getelementptr inbounds %S.gen.Gen, ptr %t90, i32 0, i32 13 + %t93 = load %S.gen.FnSig, ptr %t92 + %t94 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t89, %S.gen.FnSig %t93) + store { ptr, i64, i64 } { ptr @.str.3537, i64 4, i64 0 }, ptr %a96 + store { ptr, i64, i64 } %t94, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t99, ptr %a101 + store { ptr, i64, i64 } { ptr @.str.3540, i64 1, i64 0 }, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t99, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + %t105 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t104, ptr %a107 + store { ptr, i64, i64 } %t105, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } %t110) + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_drop(ptr %a111) + call void @finch_str_drop(ptr %a87) + call void @finch_str_drop(ptr %a27) + br label %endif5558 +else5557: + %t112 = load ptr, ptr %a1 + %t113 = load ptr, ptr %a1 + %t114 = load ptr, ptr %a1 + %t115 = icmp eq ptr %t114, null + br i1 %t115, label %panic5567, label %ok5568 +panic5567: + call void @finch_panic(ptr @.str.3542, i64 2732, ptr @.str.3543) + unreachable +ok5568: + %t116 = getelementptr inbounds %S.gen.Gen, ptr %t114, i32 0, i32 13 + %t117 = getelementptr inbounds %S.gen.FnSig, ptr %t116, i32 0, i32 12 + %t118 = load %S.ast.Type, ptr %t117 + %t119 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t113, %S.ast.Type %t118) + store { ptr, i64, i64 } { ptr @.str.3541, i64 4, i64 0 }, ptr %a121 + store { ptr, i64, i64 } %t119, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t124, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.3544, i64 1, i64 0 }, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load { ptr, i64, i64 }, ptr %a125 + %t130 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t129, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t129, ptr %a134 + call void @finch_str_drop(ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a131 + call void @finch.gen.emit(ptr %t112, { ptr, i64, i64 } %t135) + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_drop(ptr %a136) + br label %endif5558 +endif5558: + %t137 = load ptr, ptr %a1 + %t138 = icmp eq ptr %t137, null + br i1 %t138, label %panic5569, label %ok5570 +panic5569: + call void @finch_panic(ptr @.str.3545, i64 2734, ptr @.str.3546) + unreachable +ok5570: + %t139 = getelementptr inbounds %S.gen.Gen, ptr %t137, i32 0, i32 9 + store i1 true, ptr %t139 + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.entryTy(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t5 = load { ptr, i64, i64 }, ptr %t4 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 0, %t6 + br i1 %t7, label %range5571, label %inrange5572 +range5571: + call void @finch_panic_index(ptr @.str.3548, i64 2746, i64 0, i64 %t6) + unreachable +inrange5572: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds %S.ast.Type, ptr %t8, i64 0 + %t10 = load %S.ast.Type, ptr %t9 + %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t3, %S.ast.Type %t10) + store { ptr, i64, i64 } { ptr @.str.3547, i64 7, i64 0 }, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t11, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.3549, i64 2, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a17 + %t22 = load ptr, ptr %a1 + %t23 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t24 = load { ptr, i64, i64 }, ptr %t23 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 1, %t25 + br i1 %t26, label %range5573, label %inrange5574 +range5573: + call void @finch_panic_index(ptr @.str.3550, i64 2746, i64 1, i64 %t25) + unreachable +inrange5574: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.ast.Type, ptr %t27, i64 1 + %t29 = load %S.ast.Type, ptr %t28 + %t30 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t22, %S.ast.Type %t29) + store { ptr, i64, i64 } %t21, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t21, ptr %a34 + call void @finch_str_drop(ptr %a34) + store { ptr, i64, i64 } %t30, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t36, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.3551, i64 2, i64 0 }, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + store { ptr, i64, i64 } %t36, ptr %a40 + call void @finch_str_drop(ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a37 + ret { ptr, i64, i64 } %t41 +} + +define internal { ptr, i64, i64 } @finch.gen.entrySize(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load %S.ast.Type, ptr %a2 + %t5 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t3, %S.ast.Type %t4) + store { ptr, i64, i64 } { ptr @.str.3552, i64 29, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t5, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t5, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.3553, i64 26, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + ret { ptr, i64, i64 } %t15 +} + +define internal { ptr, i64, i64 } @finch.gen.entryAt(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load ptr, ptr %a1 + %t7 = load ptr, ptr %a1 + %t8 = load %S.ast.Type, ptr %a3 + %t9 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t7, %S.ast.Type %t8) + store { ptr, i64, i64 } { ptr @.str.3555, i64 23, i64 0 }, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t9, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3556, i64 6, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t14, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + %t20 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t19, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t19, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.3557, i64 14, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + %t31 = call { ptr, i64, i64 } @finch.gen.op(ptr %t6, { ptr, i64, i64 } %t30) + store { ptr, i64, i64 } %t30, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = call { ptr, i64, i64 } @finch.gen.load(ptr %t5, { ptr, i64, i64 } { ptr @.str.3554, i64 3, i64 0 }, { ptr, i64, i64 } %t31) + store { ptr, i64, i64 } %t31, ptr %a34 + call void @finch_str_drop(ptr %a34) + store { ptr, i64, i64 } %t33, ptr %a35 + %t36 = load ptr, ptr %a1 + %t37 = load ptr, ptr %a1 + %t38 = load %S.ast.Type, ptr %a3 + %t39 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t37, %S.ast.Type %t38) + store { ptr, i64, i64 } { ptr @.str.3558, i64 23, i64 0 }, ptr %a41 + store { ptr, i64, i64 } %t39, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t44, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.3559, i64 6, i64 0 }, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + store { ptr, i64, i64 } %t44, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a45 + %t50 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t49, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.3560, i64 6, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t60, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = call { ptr, i64, i64 } @finch.gen.op(ptr %t36, { ptr, i64, i64 } %t66) + store { ptr, i64, i64 } %t66, ptr %a68 + call void @finch_str_drop(ptr %a68) + call void @finch_str_drop(ptr %a35) + ret { ptr, i64, i64 } %t67 +} + +define internal { ptr, i64, i64 } @finch.gen.entryField(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, i64 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca i64, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load ptr, ptr %a1 + %t7 = load %S.ast.Type, ptr %a3 + %t8 = call { ptr, i64, i64 } @finch.gen.entryTy(ptr %t6, %S.ast.Type %t7) + store { ptr, i64, i64 } { ptr @.str.3561, i64 23, i64 0 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.3562, i64 6, i64 0 }, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + %t19 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t18, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.3563, i64 13, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t29, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + %t39 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t38) + store { ptr, i64, i64 } %t38, ptr %a40 + call void @finch_str_drop(ptr %a40) + ret { ptr, i64, i64 } %t39 +} + +define internal { ptr, i64, i64 } @finch.gen.mapArgs(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.3564, i64 1, i64 0 }, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 0, %t8 + br i1 %t9, label %range5575, label %inrange5576 +range5575: + call void @finch_panic_index(ptr @.str.3565, i64 2766, i64 0, i64 %t8) + unreachable +inrange5576: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 + %t12 = getelementptr inbounds %S.ast.Type, ptr %t11, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.3566, i64 3, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br i1 %t17, label %then5577, label %endif5579 +then5577: + %t18 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.3567, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t18, ptr %a19 + call void @finch_str_drop(ptr %a19) + br label %endif5579 +endif5579: + %t20 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.3568, i64 4, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.3569, i64 6, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t29, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t29, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.3570, i64 6, i64 0 }, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load ptr, ptr %a1 + %t42 = load %S.ast.Type, ptr %a4 + %t43 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t41, %S.ast.Type %t42) + store { ptr, i64, i64 } %t40, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t40, ptr %a47 + call void @finch_str_drop(ptr %a47) + store { ptr, i64, i64 } %t43, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.3571, i64 6, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + %t55 = load ptr, ptr %a1 + %t56 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t57 = load { ptr, i64, i64 }, ptr %t56 + %t58 = extractvalue { ptr, i64, i64 } %t57, 1 + %t59 = icmp uge i64 0, %t58 + br i1 %t59, label %range5580, label %inrange5581 +range5580: + call void @finch_panic_index(ptr @.str.3572, i64 2769, i64 0, i64 %t58) + unreachable +inrange5581: + %t60 = extractvalue { ptr, i64, i64 } %t57, 0 + %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i64 0 + %t62 = load %S.ast.Type, ptr %t61 + %t63 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t55, %S.ast.Type %t62) + store { ptr, i64, i64 } %t54, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t54, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.3573, i64 6, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t74, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t74, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + call void @finch_str_drop(ptr %a5) + ret { ptr, i64, i64 } %t80 +} + +define internal { ptr, i64, i64 } @finch.gen.mapFind(ptr %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = load ptr, ptr %a1 + %t7 = load { ptr, i64, i64 }, ptr %a2 + %t8 = load { ptr, i64, i64 }, ptr %a3 + %t9 = load %S.ast.Type, ptr %a4 + %t10 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t6, { ptr, i64, i64 } %t7, { ptr, i64, i64 } %t8, %S.ast.Type %t9) + store { ptr, i64, i64 } { ptr @.str.3574, i64 25, i64 0 }, ptr %a12 + store { ptr, i64, i64 } %t10, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.3575, i64 1, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + %t21 = call { ptr, i64, i64 } @finch.gen.op(ptr %t5, { ptr, i64, i64 } %t20) + store { ptr, i64, i64 } %t20, ptr %a22 + call void @finch_str_drop(ptr %a22) + ret { ptr, i64, i64 } %t21 +} + +define internal { ptr, i64, i64 } @finch.gen.defaultVal(ptr %p0, %S.ast.Type %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.3576, i64 6, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.from5582 +logic.from5582: + br i1 %t9, label %logic.rhs5583, label %logic.end5584 +logic.rhs5583: + %t10 = load ptr, ptr %a1 + %t11 = load %S.ast.Type, ptr %a2 + %t12 = call i1 @finch.gen.hasDefaults(ptr %t10, %S.ast.Type %t11) + br label %logic.rend5585 +logic.rend5585: + br label %logic.end5584 +logic.end5584: + %t13 = phi i1 [ false, %logic.from5582 ], [ %t12, %logic.rend5585 ] + br i1 %t13, label %then5586, label %endif5588 +then5586: + store { ptr, i64, i64 } zeroinitializer, ptr %a14 + store { ptr, i64, i64 } zeroinitializer, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = load ptr, ptr %a1 + %t18 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = call i64 @finch.gen.findStruct(ptr %t17, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) + %t23 = load { ptr, i64, i64 }, ptr %a14 + %t24 = load { ptr, i64, i64 }, ptr %a15 + %t25 = load %S.ast.Node, ptr %a3 + %t26 = call %S.gen.Val @finch.gen.construct(ptr %t16, i64 %t22, { ptr, i64, i64 } %t23, { ptr, i64, i64 } %t24, %S.ast.Node %t25) + %t27 = extractvalue %S.gen.Val %t26, 0 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_copy(ptr %a29, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store %S.gen.Val %t26, ptr %a31 + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.arr_str(ptr %a15) + call void @finch.drop.arr_S_ast_Node(ptr %a14) + ret { ptr, i64, i64 } %t30 +endif5588: + %t32 = load %S.ast.Type, ptr %a2 + %t33 = call { ptr, i64, i64 } @finch.gen.zeroOf(%S.ast.Type %t32) + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.gen.mapSlot(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, %S.gen.Val %p3, i1 %p4, %S.ast.Node %p5) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a5 = alloca i1, align 16 + %a6 = alloca %S.ast.Node, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.ast.Type, align 16 + %a130 = alloca %S.gen.Val, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store %S.gen.Val %p3, ptr %a4 + store i1 %p4, ptr %a5 + store %S.ast.Node %p5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = load %S.gen.Val, ptr %a4 + %t9 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t7, %S.gen.Val %t8) + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t11, { ptr, i64, i64 } { ptr @.str.3577, i64 3, i64 0 }) + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = load { ptr, i64, i64 }, ptr %a13 + call void @finch.gen.store(ptr %t14, { ptr, i64, i64 } { ptr @.str.3578, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3579, i64 1, i64 0 }, { ptr, i64, i64 } %t15) + %t16 = load ptr, ptr %a1 + %t17 = load ptr, ptr %a1 + %t18 = load { ptr, i64, i64 }, ptr %a2 + %t19 = load { ptr, i64, i64 }, ptr %a10 + %t20 = load %S.ast.Type, ptr %a3 + %t21 = call { ptr, i64, i64 } @finch.gen.mapArgs(ptr %t17, { ptr, i64, i64 } %t18, { ptr, i64, i64 } %t19, %S.ast.Type %t20) + store { ptr, i64, i64 } { ptr @.str.3580, i64 25, i64 0 }, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + store { ptr, i64, i64 } %t21, ptr %a25 + call void @finch_str_drop(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.3581, i64 6, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t31, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t31, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.3582, i64 1, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + %t43 = call { ptr, i64, i64 } @finch.gen.op(ptr %t16, { ptr, i64, i64 } %t42) + store { ptr, i64, i64 } %t42, ptr %a44 + call void @finch_str_drop(ptr %a44) + store { ptr, i64, i64 } %t43, ptr %a45 + %t46 = load ptr, ptr %a1 + %t47 = load { ptr, i64, i64 }, ptr %a2 + %t48 = load %S.ast.Type, ptr %a3 + %t49 = load { ptr, i64, i64 }, ptr %a45 + %t50 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t46, { ptr, i64, i64 } %t47, %S.ast.Type %t48, { ptr, i64, i64 } %t49) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t52, { ptr, i64, i64 } { ptr @.str.3583, i64 7, i64 0 }) + store { ptr, i64, i64 } %t53, ptr %a54 + %t55 = load ptr, ptr %a1 + %t56 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t55, { ptr, i64, i64 } { ptr @.str.3584, i64 8, i64 0 }) + store { ptr, i64, i64 } %t56, ptr %a57 + %t58 = load ptr, ptr %a1 + %t59 = load ptr, ptr %a1 + %t60 = load ptr, ptr %a1 + %t61 = load { ptr, i64, i64 }, ptr %a13 + %t62 = call { ptr, i64, i64 } @finch.gen.load(ptr %t60, { ptr, i64, i64 } { ptr @.str.3586, i64 3, i64 0 }, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } { ptr @.str.3585, i64 12, i64 0 }, ptr %a64 + store { ptr, i64, i64 } %t62, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } %t67, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.3587, i64 3, i64 0 }, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + %t73 = call { ptr, i64, i64 } @finch.gen.op(ptr %t59, { ptr, i64, i64 } %t72) + store { ptr, i64, i64 } %t72, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a54 + %t76 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.gen.condBr(ptr %t58, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75, { ptr, i64, i64 } %t76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load ptr, ptr %a1 + %t79 = load { ptr, i64, i64 }, ptr %a54 + call void @finch.gen.label(ptr %t78, { ptr, i64, i64 } %t79) + %t80 = load ptr, ptr %a1 + %t81 = load ptr, ptr %a1 + %t82 = load { ptr, i64, i64 }, ptr %a51 + %t83 = load %S.ast.Type, ptr %a3 + %t84 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t81, { ptr, i64, i64 } %t82, %S.ast.Type %t83, i64 1) + %t85 = load { ptr, i64, i64 }, ptr %a10 + %t86 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + %t88 = extractvalue { ptr, i64, i64 } %t87, 1 + %t89 = icmp uge i64 0, %t88 + br i1 %t89, label %range5589, label %inrange5590 +range5589: + call void @finch_panic_index(ptr @.str.3588, i64 2797, i64 0, i64 %t88) + unreachable +inrange5590: + %t90 = extractvalue { ptr, i64, i64 } %t87, 0 + %t91 = getelementptr inbounds %S.ast.Type, ptr %t90, i64 0 + %t92 = load %S.ast.Type, ptr %t91 + call void @finch.gen.copyAt(ptr %t80, { ptr, i64, i64 } %t84, { ptr, i64, i64 } %t85, %S.ast.Type %t92) + store { ptr, i64, i64 } %t84, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load i1, ptr %a5 + br i1 %t94, label %then5591, label %endif5593 +then5591: + %t95 = load ptr, ptr %a1 + %t96 = load ptr, ptr %a1 + %t97 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t98 = load { ptr, i64, i64 }, ptr %t97 + %t99 = extractvalue { ptr, i64, i64 } %t98, 1 + %t100 = icmp uge i64 1, %t99 + br i1 %t100, label %range5594, label %inrange5595 +range5594: + call void @finch_panic_index(ptr @.str.3589, i64 2799, i64 1, i64 %t99) + unreachable +inrange5595: + %t101 = extractvalue { ptr, i64, i64 } %t98, 0 + %t102 = getelementptr inbounds %S.ast.Type, ptr %t101, i64 1 + %t103 = load %S.ast.Type, ptr %t102 + %t104 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t96, %S.ast.Type %t103) + %t105 = load ptr, ptr %a1 + %t106 = load ptr, ptr %a1 + %t107 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t108 = load { ptr, i64, i64 }, ptr %t107 + %t109 = extractvalue { ptr, i64, i64 } %t108, 1 + %t110 = icmp uge i64 1, %t109 + br i1 %t110, label %range5596, label %inrange5597 +range5596: + call void @finch_panic_index(ptr @.str.3590, i64 2799, i64 1, i64 %t109) + unreachable +inrange5597: + %t111 = extractvalue { ptr, i64, i64 } %t108, 0 + %t112 = getelementptr inbounds %S.ast.Type, ptr %t111, i64 1 + %t113 = load %S.ast.Type, ptr %t112 + %t114 = load %S.ast.Node, ptr %a6 + %t115 = call { ptr, i64, i64 } @finch.gen.defaultVal(ptr %t106, %S.ast.Type %t113, %S.ast.Node %t114) + %t116 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t115, 0 + %t117 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t118 = load { ptr, i64, i64 }, ptr %t117 + %t119 = extractvalue { ptr, i64, i64 } %t118, 1 + %t120 = icmp uge i64 1, %t119 + br i1 %t120, label %range5598, label %inrange5599 +range5598: + call void @finch_panic_index(ptr @.str.3591, i64 2799, i64 1, i64 %t119) + unreachable +inrange5599: + %t121 = extractvalue { ptr, i64, i64 } %t118, 0 + %t122 = getelementptr inbounds %S.ast.Type, ptr %t121, i64 1 + %t123 = load %S.ast.Type, ptr %t122 + store %S.ast.Type %t123, ptr %a124 + call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) + %t126 = load %S.ast.Type, ptr %a125 + %t127 = insertvalue %S.gen.Val %t116, %S.ast.Type %t126, 1 + %t128 = insertvalue %S.gen.Val %t127, i1 true, 2 + %t129 = call { ptr, i64, i64 } @finch.gen.own(ptr %t105, %S.gen.Val %t128) + store %S.gen.Val %t128, ptr %a130 + call void @finch.drop.S_gen_Val(ptr %a130) + %t131 = load ptr, ptr %a1 + %t132 = load { ptr, i64, i64 }, ptr %a51 + %t133 = load %S.ast.Type, ptr %a3 + %t134 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t131, { ptr, i64, i64 } %t132, %S.ast.Type %t133, i64 2) + call void @finch.gen.store(ptr %t95, { ptr, i64, i64 } %t104, { ptr, i64, i64 } %t129, { ptr, i64, i64 } %t134) + store { ptr, i64, i64 } %t104, ptr %a135 + call void @finch_str_drop(ptr %a135) + store { ptr, i64, i64 } %t129, ptr %a136 + call void @finch_str_drop(ptr %a136) + store { ptr, i64, i64 } %t134, ptr %a137 + call void @finch_str_drop(ptr %a137) + br label %endif5593 +endif5593: + %t138 = load ptr, ptr %a1 + %t139 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.gen.br(ptr %t138, { ptr, i64, i64 } %t139) + %t140 = load ptr, ptr %a1 + %t141 = load { ptr, i64, i64 }, ptr %a57 + call void @finch.gen.label(ptr %t140, { ptr, i64, i64 } %t141) + %t142 = load { ptr, i64, i64 }, ptr %a51 + call void @finch_str_drop(ptr %a57) + call void @finch_str_drop(ptr %a54) + call void @finch_str_drop(ptr %a45) + call void @finch_str_drop(ptr %a13) + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t142 +} + +define internal %S.gen.Ref @finch.gen.mapIndex(ptr %p0, %S.ast.Node %p1, %S.gen.Ref %p2, %S.ast.Type %p3, i1 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.Ref, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca i1, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a14 = alloca %S.ast.Type, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a24 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.ast.Type, align 16 + %a27 = alloca %S.ast.Type, align 16 + %a48 = alloca %S.gen.Val, align 16 + %a49 = alloca %S.gen.Val, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca %S.ast.Type, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a220 = alloca %S.ast.Type, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca %S.ast.Type, align 16 + %a239 = alloca %S.ast.Type, align 16 + %a242 = alloca %S.gen.Val, align 16 + %a256 = alloca %S.ast.Type, align 16 + %a257 = alloca %S.ast.Type, align 16 + %a262 = alloca %S.gen.Val, align 16 + %a268 = alloca %S.gen.Val, align 16 + %a269 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.Ref %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store i1 %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + %t8 = extractvalue { ptr, i64, i64 } %t7, 1 + %t9 = icmp uge i64 0, %t8 + br i1 %t9, label %range5600, label %inrange5601 +range5600: + call void @finch_panic_index(ptr @.str.3592, i64 2808, i64 0, i64 %t8) + unreachable +inrange5601: + %t10 = extractvalue { ptr, i64, i64 } %t7, 0 + %t11 = getelementptr inbounds %S.ast.Type, ptr %t10, i64 0 + %t12 = load %S.ast.Type, ptr %t11 + store %S.ast.Type %t12, ptr %a13 + call void @finch.copy.S_ast_Type(ptr %a14, ptr %a13) + %t15 = load %S.ast.Type, ptr %a14 + store %S.ast.Type %t15, ptr %a16 + %t17 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 1, %t19 + br i1 %t20, label %range5602, label %inrange5603 +range5602: + call void @finch_panic_index(ptr @.str.3593, i64 2809, i64 1, i64 %t19) + unreachable +inrange5603: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.ast.Type, ptr %t21, i64 1 + %t23 = load %S.ast.Type, ptr %t22 + store %S.ast.Type %t23, ptr %a24 + call void @finch.copy.S_ast_Type(ptr %a25, ptr %a24) + %t26 = load %S.ast.Type, ptr %a25 + store %S.ast.Type %t26, ptr %a27 + %t28 = load ptr, ptr %a1 + %t29 = load ptr, ptr %a1 + %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t31 = load { ptr, i64, i64 }, ptr %t30 + %t32 = extractvalue { ptr, i64, i64 } %t31, 1 + %t33 = icmp uge i64 1, %t32 + br i1 %t33, label %range5604, label %inrange5605 +range5604: + call void @finch_panic_index(ptr @.str.3594, i64 2810, i64 1, i64 %t32) + unreachable +inrange5605: + %t34 = extractvalue { ptr, i64, i64 } %t31, 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i64 1 + %t36 = load %S.ast.Node, ptr %t35 + %t37 = load %S.ast.Type, ptr %a16 + %t38 = call %S.gen.Val @finch.gen.exprWant(ptr %t29, %S.ast.Node %t36, %S.ast.Type %t37) + %t39 = load %S.ast.Type, ptr %a16 + %t40 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = extractvalue { ptr, i64, i64 } %t41, 1 + %t43 = icmp uge i64 1, %t42 + br i1 %t43, label %range5606, label %inrange5607 +range5606: + call void @finch_panic_index(ptr @.str.3595, i64 2810, i64 1, i64 %t42) + unreachable +inrange5607: + %t44 = extractvalue { ptr, i64, i64 } %t41, 0 + %t45 = getelementptr inbounds %S.ast.Node, ptr %t44, i64 1 + %t46 = load %S.ast.Node, ptr %t45 + %t47 = call %S.gen.Val @finch.gen.coerce(ptr %t28, %S.gen.Val %t38, %S.ast.Type %t39, %S.ast.Node %t46, { ptr, i64, i64 } { ptr @.str.3596, i64 7, i64 0 }) + store %S.gen.Val %t38, ptr %a48 + call void @finch.drop.S_gen_Val(ptr %a48) + store %S.gen.Val %t47, ptr %a49 + %t50 = load i1, ptr %a5 + br i1 %t50, label %then5608, label %endif5610 +then5608: + %t51 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t52 = load i1, ptr %t51 + %t53 = xor i1 %t52, true + br i1 %t53, label %then5611, label %endif5613 +then5611: + %t54 = load ptr, ptr %a1 + %t55 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t54, %S.ast.Node %t55, { ptr, i64, i64 } { ptr @.str.3597, i64 44, i64 0 }) + br label %endif5613 +endif5613: + %t56 = load ptr, ptr %a1 + %t57 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t58 = getelementptr inbounds %S.gen.Place, ptr %t57, i32 0, i32 0 + %t59 = load { ptr, i64, i64 }, ptr %t58 + %t60 = load %S.ast.Type, ptr %a4 + %t61 = load %S.gen.Val, ptr %a49 + %t62 = load %S.ast.Node, ptr %a2 + %t63 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t56, { ptr, i64, i64 } %t59, %S.ast.Type %t60, %S.gen.Val %t61, i1 true, %S.ast.Node %t62) + store { ptr, i64, i64 } %t63, ptr %a64 + %t65 = load ptr, ptr %a1 + %t66 = load %S.gen.Val, ptr %a49 + call void @finch.gen.release(ptr %t65, %S.gen.Val %t66) + %t67 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t68 = load ptr, ptr %a1 + %t69 = load { ptr, i64, i64 }, ptr %a64 + %t70 = load %S.ast.Type, ptr %a4 + %t71 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t68, { ptr, i64, i64 } %t69, %S.ast.Type %t70, i64 2) + %t72 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t71, 0 + %t73 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t73, ptr %a74 + call void @finch.copy.S_ast_Type(ptr %a75, ptr %a74) + %t76 = load %S.ast.Type, ptr %a75 + %t77 = insertvalue %S.gen.Place %t72, %S.ast.Type %t76, 1 + %t78 = insertvalue %S.gen.Ref %t67, %S.gen.Place %t77, 1 + call void @finch_str_drop(ptr %a64) + call void @finch.drop.S_gen_Val(ptr %a49) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret %S.gen.Ref %t78 +endif5610: + store { ptr, i64, i64 } { ptr @.str.3598, i64 0, i64 0 }, ptr %a79 + %t80 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t81 = load i1, ptr %t80 + br i1 %t81, label %then5614, label %else5615 +then5614: + %t82 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t83 = getelementptr inbounds %S.gen.Place, ptr %t82, i32 0, i32 0 + %t84 = load { ptr, i64, i64 }, ptr %t83 + store { ptr, i64, i64 } %t84, ptr %a85 + call void @finch_str_copy(ptr %a86, ptr %a85) + %t87 = load { ptr, i64, i64 }, ptr %a86 + %t88 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t87, ptr %a79 + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_drop(ptr %a89) + br label %endif5616 +else5615: + %t90 = load ptr, ptr %a1 + %t91 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t92 = load %S.gen.Val, ptr %t91 + %t93 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t90, %S.gen.Val %t92) + %t94 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t93, ptr %a79 + store { ptr, i64, i64 } %t94, ptr %a95 + call void @finch_str_drop(ptr %a95) + br label %endif5616 +endif5616: + %t96 = load ptr, ptr %a1 + %t97 = load %S.gen.Val, ptr %a49 + %t98 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t96, %S.gen.Val %t97) + store { ptr, i64, i64 } %t98, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = load { ptr, i64, i64 }, ptr %a79 + %t102 = load { ptr, i64, i64 }, ptr %a99 + %t103 = load %S.ast.Type, ptr %a4 + %t104 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t100, { ptr, i64, i64 } %t101, { ptr, i64, i64 } %t102, %S.ast.Type %t103) + store { ptr, i64, i64 } %t104, ptr %a105 + %t106 = load ptr, ptr %a1 + %t107 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t106, { ptr, i64, i64 } { ptr @.str.3599, i64 11, i64 0 }) + store { ptr, i64, i64 } %t107, ptr %a108 + %t109 = load ptr, ptr %a1 + %t110 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t109, { ptr, i64, i64 } { ptr @.str.3600, i64 9, i64 0 }) + store { ptr, i64, i64 } %t110, ptr %a111 + %t112 = load ptr, ptr %a1 + %t113 = load ptr, ptr %a1 + %t114 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.3601, i64 13, i64 0 }, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.3602, i64 3, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = call { ptr, i64, i64 } @finch.gen.op(ptr %t113, { ptr, i64, i64 } %t123) + store { ptr, i64, i64 } %t123, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a108 + %t127 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.condBr(ptr %t112, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } %t127) + store { ptr, i64, i64 } %t124, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load ptr, ptr %a1 + %t130 = load { ptr, i64, i64 }, ptr %a108 + call void @finch.gen.label(ptr %t129, { ptr, i64, i64 } %t130) + %t131 = load ptr, ptr %a1 + %t132 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t131, { ptr, i64, i64 } { ptr @.str.3603, i64 17, i64 0 }) + store { ptr, i64, i64 } %t132, ptr %a133 + %t134 = load ptr, ptr %a1 + %t135 = load { ptr, i64, i64 }, ptr %a133 + call void @finch.gen.store(ptr %t134, { ptr, i64, i64 } { ptr @.str.3604, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3605, i64 15, i64 0 }, { ptr, i64, i64 } %t135) + %t136 = load ptr, ptr %a1 + %t137 = load { ptr, i64, i64 }, ptr %a133 + %t138 = getelementptr inbounds %S.gen.Val, ptr %a49, i32 0, i32 0 + %t139 = load { ptr, i64, i64 }, ptr %t138 + %t140 = load %S.ast.Type, ptr %a16 + call void @finch.gen.emitFormat(ptr %t136, { ptr, i64, i64 } %t137, { ptr, i64, i64 } %t139, %S.ast.Type %t140, i1 true) + %t141 = load ptr, ptr %a1 + %t142 = load ptr, ptr %a1 + %t143 = load ptr, ptr %a1 + %t144 = icmp eq ptr %t143, null + br i1 %t144, label %panic5617, label %ok5618 +panic5617: + call void @finch_panic(ptr @.str.3607, i64 2834, ptr @.str.3608) + unreachable +ok5618: + %t145 = getelementptr inbounds %S.gen.Gen, ptr %t143, i32 0, i32 1 + %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t147 = load i64, ptr %t146 + %t148 = load { ptr, i64, i64 }, ptr %t145 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 %t147, %t149 + br i1 %t150, label %range5619, label %inrange5620 +range5619: + call void @finch_panic_index(ptr @.str.3609, i64 2834, i64 %t147, i64 %t149) + unreachable +inrange5620: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i64 %t147 + %t153 = load { ptr, i64, i64 }, ptr %t152 + %t154 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t142, { ptr, i64, i64 } %t153) + store { ptr, i64, i64 } { ptr @.str.3606, i64 33, i64 0 }, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t154, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t159, ptr %a161 + store { ptr, i64, i64 } { ptr @.str.3610, i64 6, i64 0 }, ptr %a162 + call void @finch_str_concat(ptr %a160, ptr %a161, ptr %a162) + store { ptr, i64, i64 } %t159, ptr %a163 + call void @finch_str_drop(ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a160 + %t165 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t166 = load i64, ptr %t165 + call void @finch_str_from_int(ptr %a167, i64 %t166) + %t168 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t164, ptr %a170 + store { ptr, i64, i64 } %t168, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t164, ptr %a172 + call void @finch_str_drop(ptr %a172) + store { ptr, i64, i64 } %t168, ptr %a173 + call void @finch_str_drop(ptr %a173) + %t174 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t174, ptr %a176 + store { ptr, i64, i64 } { ptr @.str.3611, i64 6, i64 0 }, ptr %a177 + call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) + store { ptr, i64, i64 } %t174, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a175 + %t180 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t179, ptr %a182 + store { ptr, i64, i64 } %t180, ptr %a183 + call void @finch_str_concat(ptr %a181, ptr %a182, ptr %a183) + store { ptr, i64, i64 } %t179, ptr %a184 + call void @finch_str_drop(ptr %a184) + %t185 = load { ptr, i64, i64 }, ptr %a181 + store { ptr, i64, i64 } %t185, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.3612, i64 1, i64 0 }, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + store { ptr, i64, i64 } %t185, ptr %a189 + call void @finch_str_drop(ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a186 + call void @finch.gen.emit(ptr %t141, { ptr, i64, i64 } %t190) + store { ptr, i64, i64 } %t190, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t192, { ptr, i64, i64 } { ptr @.str.3613, i64 11, i64 0 }) + %t193 = load ptr, ptr %a1 + %t194 = icmp eq ptr %t193, null + br i1 %t194, label %panic5621, label %ok5622 +panic5621: + call void @finch_panic(ptr @.str.3614, i64 2836, ptr @.str.3615) + unreachable +ok5622: + %t195 = getelementptr inbounds %S.gen.Gen, ptr %t193, i32 0, i32 9 + store i1 true, ptr %t195 + %t196 = load ptr, ptr %a1 + %t197 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.label(ptr %t196, { ptr, i64, i64 } %t197) + %t198 = load ptr, ptr %a1 + %t199 = load %S.gen.Val, ptr %a49 + call void @finch.gen.release(ptr %t198, %S.gen.Val %t199) + %t200 = load ptr, ptr %a1 + %t201 = load ptr, ptr %a1 + %t202 = load { ptr, i64, i64 }, ptr %a79 + %t203 = load %S.ast.Type, ptr %a4 + %t204 = load { ptr, i64, i64 }, ptr %a105 + %t205 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t201, { ptr, i64, i64 } %t202, %S.ast.Type %t203, { ptr, i64, i64 } %t204) + %t206 = load %S.ast.Type, ptr %a4 + %t207 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t200, { ptr, i64, i64 } %t205, %S.ast.Type %t206, i64 2) + store { ptr, i64, i64 } %t205, ptr %a208 + call void @finch_str_drop(ptr %a208) + store { ptr, i64, i64 } %t207, ptr %a209 + %t210 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t211 = load i1, ptr %t210 + br i1 %t211, label %then5623, label %endif5625 +then5623: + %t212 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t213 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t213, ptr %a214 + call void @finch_str_copy(ptr %a215, ptr %a214) + %t216 = load { ptr, i64, i64 }, ptr %a215 + %t217 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t216, 0 + %t218 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t218, ptr %a219 + call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) + %t221 = load %S.ast.Type, ptr %a220 + %t222 = insertvalue %S.gen.Place %t217, %S.ast.Type %t221, 1 + %t223 = insertvalue %S.gen.Ref %t212, %S.gen.Place %t222, 1 + call void @finch_str_drop(ptr %a209) + call void @finch_str_drop(ptr %a133) + call void @finch_str_drop(ptr %a111) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a105) + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a79) + call void @finch.drop.S_gen_Val(ptr %a49) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret %S.gen.Ref %t223 +endif5625: + %t224 = load ptr, ptr %a1 + %t225 = load ptr, ptr %a1 + %t226 = load %S.ast.Type, ptr %a27 + %t227 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t225, %S.ast.Type %t226) + %t228 = load { ptr, i64, i64 }, ptr %a209 + %t229 = call { ptr, i64, i64 } @finch.gen.load(ptr %t224, { ptr, i64, i64 } %t227, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t227, ptr %a230 + call void @finch_str_drop(ptr %a230) + store { ptr, i64, i64 } %t229, ptr %a231 + %t232 = load { ptr, i64, i64 }, ptr %a231 + store { ptr, i64, i64 } %t232, ptr %a233 + call void @finch_str_copy(ptr %a234, ptr %a233) + %t235 = load { ptr, i64, i64 }, ptr %a234 + %t236 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t235, 0 + %t237 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t237, ptr %a238 + call void @finch.copy.S_ast_Type(ptr %a239, ptr %a238) + %t240 = load %S.ast.Type, ptr %a239 + %t241 = insertvalue %S.gen.Val %t236, %S.ast.Type %t240, 1 + store %S.gen.Val %t241, ptr %a242 + %t243 = load ptr, ptr %a1 + %t244 = load %S.ast.Type, ptr %a27 + %t245 = call i1 @finch.gen.owning(ptr %t243, %S.ast.Type %t244) + br label %logic.from5626 +logic.from5626: + br i1 %t245, label %logic.rhs5627, label %logic.end5628 +logic.rhs5627: + %t246 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t247 = getelementptr inbounds %S.gen.Val, ptr %t246, i32 0, i32 2 + %t248 = load i1, ptr %t247 + br label %logic.rend5629 +logic.rend5629: + br label %logic.end5628 +logic.end5628: + %t249 = phi i1 [ false, %logic.from5626 ], [ %t248, %logic.rend5629 ] + br i1 %t249, label %then5630, label %endif5632 +then5630: + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a231 + %t252 = load %S.ast.Type, ptr %a27 + %t253 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t250, { ptr, i64, i64 } %t251, %S.ast.Type %t252) + %t254 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t253, 0 + %t255 = load %S.ast.Type, ptr %a27 + store %S.ast.Type %t255, ptr %a256 + call void @finch.copy.S_ast_Type(ptr %a257, ptr %a256) + %t258 = load %S.ast.Type, ptr %a257 + %t259 = insertvalue %S.gen.Val %t254, %S.ast.Type %t258, 1 + %t260 = insertvalue %S.gen.Val %t259, i1 true, 2 + %t261 = load %S.gen.Val, ptr %a242 + store %S.gen.Val %t260, ptr %a242 + store %S.gen.Val %t261, ptr %a262 + call void @finch.drop.S_gen_Val(ptr %a262) + br label %endif5632 +endif5632: + %t263 = load ptr, ptr %a1 + %t264 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t265 = load %S.gen.Val, ptr %t264 + call void @finch.gen.release(ptr %t263, %S.gen.Val %t265) + %t266 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t267 = load %S.gen.Val, ptr %a242 + store %S.gen.Val %t267, ptr %a268 + call void @finch.copy.S_gen_Val(ptr %a269, ptr %a268) + %t270 = load %S.gen.Val, ptr %a269 + %t271 = insertvalue %S.gen.Ref %t266, %S.gen.Val %t270, 2 + call void @finch.drop.S_gen_Val(ptr %a242) + call void @finch_str_drop(ptr %a231) + call void @finch_str_drop(ptr %a209) + call void @finch_str_drop(ptr %a133) + call void @finch_str_drop(ptr %a111) + call void @finch_str_drop(ptr %a108) + call void @finch_str_drop(ptr %a105) + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a79) + call void @finch.drop.S_gen_Val(ptr %a49) + call void @finch.drop.S_ast_Type(ptr %a27) + call void @finch.drop.S_ast_Type(ptr %a16) + ret %S.gen.Ref %t271 +} + +define internal %S.gen.Val @finch.gen.mapLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a5 = alloca %S.ast.Type, align 16 + %a6 = alloca %S.ast.Type, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a9 = alloca i1, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.gen.Val, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca i1, align 16 + %a25 = alloca i1, align 16 + %a30 = alloca i64, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a44 = alloca %S.ast.Node, align 16 + %a46 = alloca %S.ast.Node, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca %S.ast.Node, align 16 + %a68 = alloca %S.ast.Node, align 16 + %a71 = alloca %S.ast.Node, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca %S.gen.Val, align 16 + %a107 = alloca %S.gen.Val, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca %S.ast.Type, align 16 + %a157 = alloca %S.ast.Type, align 16 + %a159 = alloca %S.ast.Type, align 16 + %a165 = alloca %S.ast.Type, align 16 + %a171 = alloca %S.ast.Type, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca i64, align 16 + %a198 = alloca i64, align 16 + %a206 = alloca i64, align 16 + %a208 = alloca %S.gen.Val, align 16 + %a209 = alloca %S.gen.Val, align 16 + %a211 = alloca %S.gen.Val, align 16 + %a236 = alloca %S.gen.Val, align 16 + %a257 = alloca %S.gen.Val, align 16 + %a261 = alloca %S.gen.Val, align 16 + %a262 = alloca %S.gen.Val, align 16 + %a264 = alloca %S.gen.Val, align 16 + %a290 = alloca %S.gen.Val, align 16 + %a312 = alloca %S.gen.Val, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca %S.ast.Type, align 16 + %a369 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t4, ptr %a5 + call void @finch.copy.S_ast_Type(ptr %a6, ptr %a5) + %t7 = load %S.ast.Type, ptr %a6 + store %S.ast.Type %t7, ptr %a8 + store i1 false, ptr %a9 + store %S.gen.Val zeroinitializer, ptr %a10 + store %S.gen.Val zeroinitializer, ptr %a11 + %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.3616, i64 3, i64 0 }, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp eq i32 %t16, 0 + br i1 %t17, label %then5633, label %endif5635 +then5633: + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 + %t20 = load i64, ptr %t19 + %t21 = icmp eq i64 %t20, 0 + br i1 %t21, label %then5636, label %endif5638 +then5636: + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t22, %S.ast.Node %t23, { ptr, i64, i64 } { ptr @.str.3617, i64 52, i64 0 }) + br label %endif5638 +endif5638: + store i1 true, ptr %a24 + store i1 false, ptr %a25 + %t26 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = sdiv i64 %t28, 2 + store i64 0, ptr %a30 + br label %for.cond5639 +for.cond5639: + %t31 = load i64, ptr %a30 + %t32 = icmp slt i64 %t31, %t29 + br i1 %t32, label %for.body5640, label %for.end5642 +for.body5640: + %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t34 = load i64, ptr %a30 + %t35 = mul i64 2, %t34 + %t36 = add i64 %t35, 1 + %t37 = load { ptr, i64, i64 }, ptr %t33 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range5643, label %inrange5644 +range5643: + call void @finch_panic_index(ptr @.str.3618, i64 2866, i64 %t36, i64 %t38) + unreachable +inrange5644: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 + %t42 = load %S.ast.Node, ptr %t41 + store %S.ast.Node %t42, ptr %a43 + call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) + %t45 = load %S.ast.Node, ptr %a44 + store %S.ast.Node %t45, ptr %a46 + %t47 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 + %t48 = load { ptr, i64, i64 }, ptr %t47 + store { ptr, i64, i64 } %t48, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.3619, i64 5, i64 0 }, ptr %a50 + %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) + %t52 = icmp ne i32 %t51, 0 + br label %logic.from5645 +logic.from5645: + br i1 %t52, label %logic.rhs5646, label %logic.end5647 +logic.rhs5646: + %t53 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 1 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.3620, i64 1, i64 0 }, ptr %a56 + %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) + %t58 = icmp ne i32 %t57, 0 + br label %logic.rend5648 +logic.rend5648: + br label %logic.end5647 +logic.end5647: + %t59 = phi i1 [ false, %logic.from5645 ], [ %t58, %logic.rend5648 ] + br i1 %t59, label %then5649, label %endif5651 +then5649: + %t60 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 9 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 0, %t62 + br i1 %t63, label %range5652, label %inrange5653 +range5652: + call void @finch_panic_index(ptr @.str.3621, i64 2868, i64 0, i64 %t62) + unreachable +inrange5653: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 0 + %t66 = load %S.ast.Node, ptr %t65 + store %S.ast.Node %t66, ptr %a67 + call void @finch.copy.S_ast_Node(ptr %a68, ptr %a67) + %t69 = load %S.ast.Node, ptr %a68 + %t70 = load %S.ast.Node, ptr %a46 + store %S.ast.Node %t69, ptr %a46 + store %S.ast.Node %t70, ptr %a71 + call void @finch.drop.S_ast_Node(ptr %a71) + br label %endif5651 +endif5651: + %t72 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 + %t73 = load { ptr, i64, i64 }, ptr %t72 + store { ptr, i64, i64 } %t73, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.3622, i64 5, i64 0 }, ptr %a75 + %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + br i1 %t77, label %then5654, label %else5655 +then5654: + store i1 true, ptr %a25 + br label %endif5656 +else5655: + %t78 = getelementptr inbounds %S.ast.Node, ptr %a46, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.3623, i64 3, i64 0 }, ptr %a81 + %t82 = call i32 @finch_str_eq(ptr %a80, ptr %a81) + %t83 = icmp eq i32 %t82, 0 + br i1 %t83, label %then5657, label %endif5659 +then5657: + store i1 false, ptr %a24 + br label %endif5659 +endif5659: + br label %endif5656 +endif5656: + call void @finch.drop.S_ast_Node(ptr %a46) + br label %for.step5641 +for.step5641: + %t84 = load i64, ptr %a30 + %t85 = add i64 %t84, 1 + store i64 %t85, ptr %a30 + br label %for.cond5639 +for.end5642: + %t86 = load ptr, ptr %a1 + %t87 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t88 = load { ptr, i64, i64 }, ptr %t87 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 0, %t89 + br i1 %t90, label %range5660, label %inrange5661 +range5660: + call void @finch_panic_index(ptr @.str.3624, i64 2876, i64 0, i64 %t89) + unreachable +inrange5661: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds %S.ast.Node, ptr %t91, i64 0 + %t93 = load %S.ast.Node, ptr %t92 + %t94 = call %S.gen.Val @finch.gen.expr(ptr %t86, %S.ast.Node %t93) + %t95 = load %S.gen.Val, ptr %a10 + store %S.gen.Val %t94, ptr %a10 + store %S.gen.Val %t95, ptr %a96 + call void @finch.drop.S_gen_Val(ptr %a96) + %t97 = load ptr, ptr %a1 + %t98 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t99 = load { ptr, i64, i64 }, ptr %t98 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 1, %t100 + br i1 %t101, label %range5662, label %inrange5663 +range5662: + call void @finch_panic_index(ptr @.str.3625, i64 2877, i64 1, i64 %t100) + unreachable +inrange5663: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Node, ptr %t102, i64 1 + %t104 = load %S.ast.Node, ptr %t103 + %t105 = call %S.gen.Val @finch.gen.expr(ptr %t97, %S.ast.Node %t104) + %t106 = load %S.gen.Val, ptr %a11 + store %S.gen.Val %t105, ptr %a11 + store %S.gen.Val %t106, ptr %a107 + call void @finch.drop.S_gen_Val(ptr %a107) + %t108 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } %t110, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.3626, i64 4, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br label %logic.from5664 +logic.from5664: + br i1 %t114, label %logic.end5666, label %logic.rhs5665 +logic.rhs5665: + %t115 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t116 = getelementptr inbounds %S.ast.Type, ptr %t115, i32 0, i32 0 + %t117 = load { ptr, i64, i64 }, ptr %t116 + store { ptr, i64, i64 } %t117, ptr %a118 + store { ptr, i64, i64 } { ptr @.str.3627, i64 4, i64 0 }, ptr %a119 + %t120 = call i32 @finch_str_eq(ptr %a118, ptr %a119) + %t121 = icmp ne i32 %t120, 0 + br label %logic.rend5667 +logic.rend5667: + br label %logic.end5666 +logic.end5666: + %t122 = phi i1 [ true, %logic.from5664 ], [ %t121, %logic.rend5667 ] + br i1 %t122, label %then5668, label %endif5670 +then5668: + %t123 = load ptr, ptr %a1 + %t124 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t125 = load { ptr, i64, i64 }, ptr %t124 + %t126 = extractvalue { ptr, i64, i64 } %t125, 1 + %t127 = icmp uge i64 0, %t126 + br i1 %t127, label %range5671, label %inrange5672 +range5671: + call void @finch_panic_index(ptr @.str.3628, i64 2879, i64 0, i64 %t126) + unreachable +inrange5672: + %t128 = extractvalue { ptr, i64, i64 } %t125, 0 + %t129 = getelementptr inbounds %S.ast.Node, ptr %t128, i64 0 + %t130 = load %S.ast.Node, ptr %t129 + call void @finch.gen.fail(ptr %t123, %S.ast.Node %t130, { ptr, i64, i64 } { ptr @.str.3629, i64 35, i64 0 }) + br label %endif5670 +endif5670: + %t131 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 + %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.3630, i64 4, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp ne i32 %t136, 0 + br label %logic.from5673 +logic.from5673: + br i1 %t137, label %logic.end5675, label %logic.rhs5674 +logic.rhs5674: + %t138 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 + %t139 = getelementptr inbounds %S.ast.Type, ptr %t138, i32 0, i32 0 + %t140 = load { ptr, i64, i64 }, ptr %t139 + store { ptr, i64, i64 } %t140, ptr %a141 + store { ptr, i64, i64 } { ptr @.str.3631, i64 4, i64 0 }, ptr %a142 + %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) + %t144 = icmp ne i32 %t143, 0 + br label %logic.rend5676 +logic.rend5676: + br label %logic.end5675 +logic.end5675: + %t145 = phi i1 [ true, %logic.from5673 ], [ %t144, %logic.rend5676 ] + br i1 %t145, label %then5677, label %endif5679 +then5677: + %t146 = load ptr, ptr %a1 + %t147 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t148 = load { ptr, i64, i64 }, ptr %t147 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 1, %t149 + br i1 %t150, label %range5680, label %inrange5681 +range5680: + call void @finch_panic_index(ptr @.str.3632, i64 2882, i64 1, i64 %t149) + unreachable +inrange5681: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds %S.ast.Node, ptr %t151, i64 1 + %t153 = load %S.ast.Node, ptr %t152 + call void @finch.gen.fail(ptr %t146, %S.ast.Node %t153, { ptr, i64, i64 } { ptr @.str.3633, i64 37, i64 0 }) + br label %endif5679 +endif5679: + %t154 = getelementptr inbounds %S.gen.Val, ptr %a11, i32 0, i32 1 + %t155 = load %S.ast.Type, ptr %t154 + store %S.ast.Type %t155, ptr %a156 + call void @finch.copy.S_ast_Type(ptr %a157, ptr %a156) + %t158 = load %S.ast.Type, ptr %a157 + store %S.ast.Type %t158, ptr %a159 + %t160 = load i1, ptr %a24 + br label %logic.from5682 +logic.from5682: + br i1 %t160, label %logic.rhs5683, label %logic.end5684 +logic.rhs5683: + %t161 = load i1, ptr %a25 + br label %logic.rend5685 +logic.rend5685: + br label %logic.end5684 +logic.end5684: + %t162 = phi i1 [ false, %logic.from5682 ], [ %t161, %logic.rend5685 ] + br i1 %t162, label %then5686, label %endif5688 +then5686: + %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3634, i64 5, i64 0 }) + %t164 = load %S.ast.Type, ptr %a159 + store %S.ast.Type %t163, ptr %a159 + store %S.ast.Type %t164, ptr %a165 + call void @finch.drop.S_ast_Type(ptr %a165) + br label %endif5688 +endif5688: + %t166 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t167 = load %S.ast.Type, ptr %t166 + %t168 = load %S.ast.Type, ptr %a159 + %t169 = call %S.ast.Type @finch.ast.mapOf(%S.ast.Type %t167, %S.ast.Type %t168) + %t170 = load %S.ast.Type, ptr %a8 + store %S.ast.Type %t169, ptr %a8 + store %S.ast.Type %t170, ptr %a171 + call void @finch.drop.S_ast_Type(ptr %a171) + store i1 true, ptr %a9 + call void @finch.drop.S_ast_Type(ptr %a159) + br label %endif5635 +endif5635: + %t172 = load ptr, ptr %a1 + %t173 = load ptr, ptr %a1 + %t174 = load %S.ast.Type, ptr %a8 + %t175 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t174) + %t176 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t172, { ptr, i64, i64 } %t175) + store { ptr, i64, i64 } %t175, ptr %a177 + call void @finch_str_drop(ptr %a177) + store { ptr, i64, i64 } %t176, ptr %a178 + %t179 = load ptr, ptr %a1 + %t180 = load ptr, ptr %a1 + %t181 = load %S.ast.Type, ptr %a8 + %t182 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t180, %S.ast.Type %t181) + %t183 = load { ptr, i64, i64 }, ptr %a178 + call void @finch.gen.store(ptr %t179, { ptr, i64, i64 } %t182, { ptr, i64, i64 } { ptr @.str.3635, i64 15, i64 0 }, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t182, ptr %a184 + call void @finch_str_drop(ptr %a184) + %t185 = load ptr, ptr %a1 + %t186 = icmp eq ptr %t185, null + br i1 %t186, label %panic5689, label %ok5690 +panic5689: + call void @finch_panic(ptr @.str.3636, i64 2893, ptr @.str.3637) + unreachable +ok5690: + %t187 = getelementptr inbounds %S.gen.Gen, ptr %t185, i32 0, i32 11 + %t188 = getelementptr inbounds { ptr, i64, i64 }, ptr %t187, i32 0, i32 1 + %t189 = load i64, ptr %t188 + store i64 %t189, ptr %a190 + %t191 = load ptr, ptr %a1 + %t192 = load { ptr, i64, i64 }, ptr %a178 + %t193 = load %S.ast.Type, ptr %a8 + call void @finch.gen.holdAddr(ptr %t191, { ptr, i64, i64 } %t192, %S.ast.Type %t193) + %t194 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t195 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 + %t196 = load i64, ptr %t195 + %t197 = sdiv i64 %t196, 2 + store i64 0, ptr %a198 + br label %for.cond5691 +for.cond5691: + %t199 = load i64, ptr %a198 + %t200 = icmp slt i64 %t199, %t197 + br i1 %t200, label %for.body5692, label %for.end5694 +for.body5692: + %t201 = load ptr, ptr %a1 + %t202 = icmp eq ptr %t201, null + br i1 %t202, label %panic5695, label %ok5696 +panic5695: + call void @finch_panic(ptr @.str.3638, i64 2896, ptr @.str.3639) + unreachable +ok5696: + %t203 = getelementptr inbounds %S.gen.Gen, ptr %t201, i32 0, i32 11 + %t204 = getelementptr inbounds { ptr, i64, i64 }, ptr %t203, i32 0, i32 1 + %t205 = load i64, ptr %t204 + store i64 %t205, ptr %a206 + %t207 = load %S.gen.Val, ptr %a10 + store %S.gen.Val %t207, ptr %a208 + call void @finch.copy.S_gen_Val(ptr %a209, ptr %a208) + %t210 = load %S.gen.Val, ptr %a209 + store %S.gen.Val %t210, ptr %a211 + %t212 = load i64, ptr %a198 + %t213 = icmp eq i64 %t212, 0 + br label %logic.from5697 +logic.from5697: + br i1 %t213, label %logic.rhs5698, label %logic.end5699 +logic.rhs5698: + %t214 = load i1, ptr %a9 + br label %logic.rend5700 +logic.rend5700: + br label %logic.end5699 +logic.end5699: + %t215 = phi i1 [ false, %logic.from5697 ], [ %t214, %logic.rend5700 ] + %t216 = xor i1 %t215, true + br i1 %t216, label %then5701, label %endif5703 +then5701: + %t217 = load ptr, ptr %a1 + %t218 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t219 = load i64, ptr %a198 + %t220 = mul i64 2, %t219 + %t221 = load { ptr, i64, i64 }, ptr %t218 + %t222 = extractvalue { ptr, i64, i64 } %t221, 1 + %t223 = icmp uge i64 %t220, %t222 + br i1 %t223, label %range5704, label %inrange5705 +range5704: + call void @finch_panic_index(ptr @.str.3640, i64 2899, i64 %t220, i64 %t222) + unreachable +inrange5705: + %t224 = extractvalue { ptr, i64, i64 } %t221, 0 + %t225 = getelementptr inbounds %S.ast.Node, ptr %t224, i64 %t220 + %t226 = load %S.ast.Node, ptr %t225 + %t227 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t228 = load { ptr, i64, i64 }, ptr %t227 + %t229 = extractvalue { ptr, i64, i64 } %t228, 1 + %t230 = icmp uge i64 0, %t229 + br i1 %t230, label %range5706, label %inrange5707 +range5706: + call void @finch_panic_index(ptr @.str.3641, i64 2899, i64 0, i64 %t229) + unreachable +inrange5707: + %t231 = extractvalue { ptr, i64, i64 } %t228, 0 + %t232 = getelementptr inbounds %S.ast.Type, ptr %t231, i64 0 + %t233 = load %S.ast.Type, ptr %t232 + %t234 = call %S.gen.Val @finch.gen.exprWant(ptr %t217, %S.ast.Node %t226, %S.ast.Type %t233) + %t235 = load %S.gen.Val, ptr %a211 + store %S.gen.Val %t234, ptr %a211 + store %S.gen.Val %t235, ptr %a236 + call void @finch.drop.S_gen_Val(ptr %a236) + br label %endif5703 +endif5703: + %t237 = load ptr, ptr %a1 + %t238 = load %S.gen.Val, ptr %a211 + %t239 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = extractvalue { ptr, i64, i64 } %t240, 1 + %t242 = icmp uge i64 0, %t241 + br i1 %t242, label %range5708, label %inrange5709 +range5708: + call void @finch_panic_index(ptr @.str.3642, i64 2901, i64 0, i64 %t241) + unreachable +inrange5709: + %t243 = extractvalue { ptr, i64, i64 } %t240, 0 + %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i64 0 + %t245 = load %S.ast.Type, ptr %t244 + %t246 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t247 = load i64, ptr %a198 + %t248 = mul i64 2, %t247 + %t249 = load { ptr, i64, i64 }, ptr %t246 + %t250 = extractvalue { ptr, i64, i64 } %t249, 1 + %t251 = icmp uge i64 %t248, %t250 + br i1 %t251, label %range5710, label %inrange5711 +range5710: + call void @finch_panic_index(ptr @.str.3643, i64 2901, i64 %t248, i64 %t250) + unreachable +inrange5711: + %t252 = extractvalue { ptr, i64, i64 } %t249, 0 + %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 + %t254 = load %S.ast.Node, ptr %t253 + %t255 = call %S.gen.Val @finch.gen.coerce(ptr %t237, %S.gen.Val %t238, %S.ast.Type %t245, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3644, i64 21, i64 0 }) + %t256 = load %S.gen.Val, ptr %a211 + store %S.gen.Val %t255, ptr %a211 + store %S.gen.Val %t256, ptr %a257 + call void @finch.drop.S_gen_Val(ptr %a257) + %t258 = load ptr, ptr %a1 + %t259 = load %S.gen.Val, ptr %a211 + call void @finch.gen.hold(ptr %t258, %S.gen.Val %t259) + %t260 = load %S.gen.Val, ptr %a11 + store %S.gen.Val %t260, ptr %a261 + call void @finch.copy.S_gen_Val(ptr %a262, ptr %a261) + %t263 = load %S.gen.Val, ptr %a262 + store %S.gen.Val %t263, ptr %a264 + %t265 = load i64, ptr %a198 + %t266 = icmp eq i64 %t265, 0 + br label %logic.from5712 +logic.from5712: + br i1 %t266, label %logic.rhs5713, label %logic.end5714 +logic.rhs5713: + %t267 = load i1, ptr %a9 + br label %logic.rend5715 +logic.rend5715: + br label %logic.end5714 +logic.end5714: + %t268 = phi i1 [ false, %logic.from5712 ], [ %t267, %logic.rend5715 ] + %t269 = xor i1 %t268, true + br i1 %t269, label %then5716, label %endif5718 +then5716: + %t270 = load ptr, ptr %a1 + %t271 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t272 = load i64, ptr %a198 + %t273 = mul i64 2, %t272 + %t274 = add i64 %t273, 1 + %t275 = load { ptr, i64, i64 }, ptr %t271 + %t276 = extractvalue { ptr, i64, i64 } %t275, 1 + %t277 = icmp uge i64 %t274, %t276 + br i1 %t277, label %range5719, label %inrange5720 +range5719: + call void @finch_panic_index(ptr @.str.3645, i64 2905, i64 %t274, i64 %t276) + unreachable +inrange5720: + %t278 = extractvalue { ptr, i64, i64 } %t275, 0 + %t279 = getelementptr inbounds %S.ast.Node, ptr %t278, i64 %t274 + %t280 = load %S.ast.Node, ptr %t279 + %t281 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t282 = load { ptr, i64, i64 }, ptr %t281 + %t283 = extractvalue { ptr, i64, i64 } %t282, 1 + %t284 = icmp uge i64 1, %t283 + br i1 %t284, label %range5721, label %inrange5722 +range5721: + call void @finch_panic_index(ptr @.str.3646, i64 2905, i64 1, i64 %t283) + unreachable +inrange5722: + %t285 = extractvalue { ptr, i64, i64 } %t282, 0 + %t286 = getelementptr inbounds %S.ast.Type, ptr %t285, i64 1 + %t287 = load %S.ast.Type, ptr %t286 + %t288 = call %S.gen.Val @finch.gen.exprWant(ptr %t270, %S.ast.Node %t280, %S.ast.Type %t287) + %t289 = load %S.gen.Val, ptr %a264 + store %S.gen.Val %t288, ptr %a264 + store %S.gen.Val %t289, ptr %a290 + call void @finch.drop.S_gen_Val(ptr %a290) + br label %endif5718 +endif5718: + %t291 = load ptr, ptr %a1 + %t292 = load %S.gen.Val, ptr %a264 + %t293 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t294 = load { ptr, i64, i64 }, ptr %t293 + %t295 = extractvalue { ptr, i64, i64 } %t294, 1 + %t296 = icmp uge i64 1, %t295 + br i1 %t296, label %range5723, label %inrange5724 +range5723: + call void @finch_panic_index(ptr @.str.3647, i64 2907, i64 1, i64 %t295) + unreachable +inrange5724: + %t297 = extractvalue { ptr, i64, i64 } %t294, 0 + %t298 = getelementptr inbounds %S.ast.Type, ptr %t297, i64 1 + %t299 = load %S.ast.Type, ptr %t298 + %t300 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t301 = load i64, ptr %a198 + %t302 = mul i64 2, %t301 + %t303 = add i64 %t302, 1 + %t304 = load { ptr, i64, i64 }, ptr %t300 + %t305 = extractvalue { ptr, i64, i64 } %t304, 1 + %t306 = icmp uge i64 %t303, %t305 + br i1 %t306, label %range5725, label %inrange5726 +range5725: + call void @finch_panic_index(ptr @.str.3648, i64 2907, i64 %t303, i64 %t305) + unreachable +inrange5726: + %t307 = extractvalue { ptr, i64, i64 } %t304, 0 + %t308 = getelementptr inbounds %S.ast.Node, ptr %t307, i64 %t303 + %t309 = load %S.ast.Node, ptr %t308 + %t310 = call %S.gen.Val @finch.gen.coerce(ptr %t291, %S.gen.Val %t292, %S.ast.Type %t299, %S.ast.Node %t309, { ptr, i64, i64 } { ptr @.str.3649, i64 23, i64 0 }) + %t311 = load %S.gen.Val, ptr %a264 + store %S.gen.Val %t310, ptr %a264 + store %S.gen.Val %t311, ptr %a312 + call void @finch.drop.S_gen_Val(ptr %a312) + %t313 = load ptr, ptr %a1 + %t314 = load %S.gen.Val, ptr %a264 + %t315 = call { ptr, i64, i64 } @finch.gen.own(ptr %t313, %S.gen.Val %t314) + store { ptr, i64, i64 } %t315, ptr %a316 + %t317 = load ptr, ptr %a1 + %t318 = load { ptr, i64, i64 }, ptr %a178 + %t319 = load %S.ast.Type, ptr %a8 + %t320 = load %S.gen.Val, ptr %a211 + %t321 = load %S.ast.Node, ptr %a2 + %t322 = call { ptr, i64, i64 } @finch.gen.mapSlot(ptr %t317, { ptr, i64, i64 } %t318, %S.ast.Type %t319, %S.gen.Val %t320, i1 false, %S.ast.Node %t321) + store { ptr, i64, i64 } %t322, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = load { ptr, i64, i64 }, ptr %a323 + %t326 = load %S.ast.Type, ptr %a8 + %t327 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t324, { ptr, i64, i64 } %t325, %S.ast.Type %t326, i64 2) + store { ptr, i64, i64 } %t327, ptr %a328 + %t329 = load ptr, ptr %a1 + %t330 = load { ptr, i64, i64 }, ptr %a328 + %t331 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t332 = load { ptr, i64, i64 }, ptr %t331 + %t333 = extractvalue { ptr, i64, i64 } %t332, 1 + %t334 = icmp uge i64 1, %t333 + br i1 %t334, label %range5727, label %inrange5728 +range5727: + call void @finch_panic_index(ptr @.str.3650, i64 2911, i64 1, i64 %t333) + unreachable +inrange5728: + %t335 = extractvalue { ptr, i64, i64 } %t332, 0 + %t336 = getelementptr inbounds %S.ast.Type, ptr %t335, i64 1 + %t337 = load %S.ast.Type, ptr %t336 + call void @finch.gen.dropAt(ptr %t329, { ptr, i64, i64 } %t330, %S.ast.Type %t337) + %t338 = load ptr, ptr %a1 + %t339 = load ptr, ptr %a1 + %t340 = getelementptr inbounds %S.ast.Type, ptr %a8, i32 0, i32 1 + %t341 = load { ptr, i64, i64 }, ptr %t340 + %t342 = extractvalue { ptr, i64, i64 } %t341, 1 + %t343 = icmp uge i64 1, %t342 + br i1 %t343, label %range5729, label %inrange5730 +range5729: + call void @finch_panic_index(ptr @.str.3651, i64 2912, i64 1, i64 %t342) + unreachable +inrange5730: + %t344 = extractvalue { ptr, i64, i64 } %t341, 0 + %t345 = getelementptr inbounds %S.ast.Type, ptr %t344, i64 1 + %t346 = load %S.ast.Type, ptr %t345 + %t347 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t339, %S.ast.Type %t346) + %t348 = load { ptr, i64, i64 }, ptr %a316 + %t349 = load { ptr, i64, i64 }, ptr %a328 + call void @finch.gen.store(ptr %t338, { ptr, i64, i64 } %t347, { ptr, i64, i64 } %t348, { ptr, i64, i64 } %t349) + store { ptr, i64, i64 } %t347, ptr %a350 + call void @finch_str_drop(ptr %a350) + %t351 = load ptr, ptr %a1 + %t352 = load %S.gen.Val, ptr %a211 + call void @finch.gen.release(ptr %t351, %S.gen.Val %t352) + %t353 = load ptr, ptr %a1 + %t354 = load i64, ptr %a206 + call void @finch.gen.heldEnd(ptr %t353, i64 %t354) + call void @finch_str_drop(ptr %a328) + call void @finch_str_drop(ptr %a323) + call void @finch_str_drop(ptr %a316) + call void @finch.drop.S_gen_Val(ptr %a264) + call void @finch.drop.S_gen_Val(ptr %a211) + br label %for.step5693 +for.step5693: + %t355 = load i64, ptr %a198 + %t356 = add i64 %t355, 1 + store i64 %t356, ptr %a198 + br label %for.cond5691 +for.end5694: + %t357 = load ptr, ptr %a1 + %t358 = load i64, ptr %a190 + call void @finch.gen.heldEnd(ptr %t357, i64 %t358) + %t359 = load ptr, ptr %a1 + %t360 = load ptr, ptr %a1 + %t361 = load %S.ast.Type, ptr %a8 + %t362 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t360, %S.ast.Type %t361) + %t363 = load { ptr, i64, i64 }, ptr %a178 + %t364 = call { ptr, i64, i64 } @finch.gen.load(ptr %t359, { ptr, i64, i64 } %t362, { ptr, i64, i64 } %t363) + store { ptr, i64, i64 } %t362, ptr %a365 + call void @finch_str_drop(ptr %a365) + %t366 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t364, 0 + %t367 = load %S.ast.Type, ptr %a8 + store %S.ast.Type %t367, ptr %a368 + call void @finch.copy.S_ast_Type(ptr %a369, ptr %a368) + %t370 = load %S.ast.Type, ptr %a369 + %t371 = insertvalue %S.gen.Val %t366, %S.ast.Type %t370, 1 + %t372 = insertvalue %S.gen.Val %t371, i1 true, 2 + call void @finch_str_drop(ptr %a178) + call void @finch.drop.S_gen_Val(ptr %a11) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_ast_Type(ptr %a8) + ret %S.gen.Val %t372 +} + +define internal %S.gen.Val @finch.gen.mapMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a29 = alloca %S.ast.Type, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a32 = alloca %S.ast.Type, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca %S.gen.Val, align 16 + %a82 = alloca %S.gen.Val, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca %S.gen.Val, align 16 + %a278 = alloca %S.gen.Val, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca %S.ast.Type, align 16 + %a351 = alloca %S.ast.Type, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca i64, align 16 + %a501 = alloca %S.ast.Type, align 16 + %a502 = alloca %S.ast.Type, align 16 + %a504 = alloca %S.ast.Type, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca %S.ast.Type, align 16 + %a512 = alloca %S.ast.Type, align 16 + %a515 = alloca %S.ast.Type, align 16 + %a518 = alloca %S.ast.Type, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a543 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a613 = alloca { ptr, i64, i64 }, align 16 + %a614 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a618 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a646 = alloca { ptr, i64, i64 }, align 16 + %a649 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a663 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a699 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a702 = alloca { ptr, i64, i64 }, align 16 + %a704 = alloca { ptr, i64, i64 }, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a712 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a716 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a732 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca %S.ast.Type, align 16 + %a753 = alloca %S.ast.Type, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a766 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 0, %t13 + br i1 %t14, label %range5731, label %inrange5732 +range5731: + call void @finch_panic_index(ptr @.str.3652, i64 2922, i64 0, i64 %t13) + unreachable +inrange5732: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 0 + %t17 = load %S.ast.Type, ptr %t16 + store %S.ast.Type %t17, ptr %a18 + call void @finch.copy.S_ast_Type(ptr %a19, ptr %a18) + %t20 = load %S.ast.Type, ptr %a19 + store %S.ast.Type %t20, ptr %a21 + %t22 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 1, %t24 + br i1 %t25, label %range5733, label %inrange5734 +range5733: + call void @finch_panic_index(ptr @.str.3653, i64 2923, i64 1, i64 %t24) + unreachable +inrange5734: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds %S.ast.Type, ptr %t26, i64 1 + %t28 = load %S.ast.Type, ptr %t27 + store %S.ast.Type %t28, ptr %a29 + call void @finch.copy.S_ast_Type(ptr %a30, ptr %a29) + %t31 = load %S.ast.Type, ptr %a30 + store %S.ast.Type %t31, ptr %a32 + %t33 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3654, i64 3, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br label %logic.from5735 +logic.from5735: + br i1 %t37, label %logic.end5737, label %logic.rhs5736 +logic.rhs5736: + %t38 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t38, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.3655, i64 3, i64 0 }, ptr %a40 + %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br label %logic.rend5738 +logic.rend5738: + br label %logic.end5737 +logic.end5737: + %t43 = phi i1 [ true, %logic.from5735 ], [ %t42, %logic.rend5738 ] + br label %logic.from5739 +logic.from5739: + br i1 %t43, label %logic.end5741, label %logic.rhs5740 +logic.rhs5740: + %t44 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t44, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.3656, i64 6, i64 0 }, ptr %a46 + %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) + %t48 = icmp ne i32 %t47, 0 + br label %logic.rend5742 +logic.rend5742: + br label %logic.end5741 +logic.end5741: + %t49 = phi i1 [ true, %logic.from5739 ], [ %t48, %logic.rend5742 ] + br i1 %t49, label %then5743, label %endif5745 +then5743: + %t50 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.3657, i64 3, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then5746, label %else5747 +then5746: + %t55 = load ptr, ptr %a1 + %t56 = load %S.ast.Node, ptr %a2 + %t57 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t55, %S.ast.Node %t56, i64 1, i64 2, { ptr, i64, i64 } %t57) + br label %endif5748 +else5747: + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Node, ptr %a2 + %t60 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t58, %S.ast.Node %t59, i64 1, i64 1, { ptr, i64, i64 } %t60) + br label %endif5748 +endif5748: + %t61 = load ptr, ptr %a1 + %t62 = load ptr, ptr %a1 + %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = extractvalue { ptr, i64, i64 } %t64, 1 + %t66 = icmp uge i64 1, %t65 + br i1 %t66, label %range5749, label %inrange5750 +range5749: + call void @finch_panic_index(ptr @.str.3658, i64 2930, i64 1, i64 %t65) + unreachable +inrange5750: + %t67 = extractvalue { ptr, i64, i64 } %t64, 0 + %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 1 + %t69 = load %S.ast.Node, ptr %t68 + %t70 = load %S.ast.Type, ptr %a21 + %t71 = call %S.gen.Val @finch.gen.exprWant(ptr %t62, %S.ast.Node %t69, %S.ast.Type %t70) + %t72 = load %S.ast.Type, ptr %a21 + %t73 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t74 = load { ptr, i64, i64 }, ptr %t73 + %t75 = extractvalue { ptr, i64, i64 } %t74, 1 + %t76 = icmp uge i64 1, %t75 + br i1 %t76, label %range5751, label %inrange5752 +range5751: + call void @finch_panic_index(ptr @.str.3659, i64 2930, i64 1, i64 %t75) + unreachable +inrange5752: + %t77 = extractvalue { ptr, i64, i64 } %t74, 0 + %t78 = getelementptr inbounds %S.ast.Node, ptr %t77, i64 1 + %t79 = load %S.ast.Node, ptr %t78 + %t80 = call %S.gen.Val @finch.gen.coerce(ptr %t61, %S.gen.Val %t71, %S.ast.Type %t72, %S.ast.Node %t79, { ptr, i64, i64 } { ptr @.str.3660, i64 7, i64 0 }) + store %S.gen.Val %t71, ptr %a81 + call void @finch.drop.S_gen_Val(ptr %a81) + store %S.gen.Val %t80, ptr %a82 + %t83 = load ptr, ptr %a1 + %t84 = load { ptr, i64, i64 }, ptr %a3 + %t85 = load ptr, ptr %a1 + %t86 = load %S.gen.Val, ptr %a82 + %t87 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t85, %S.gen.Val %t86) + %t88 = load %S.ast.Type, ptr %a4 + %t89 = call { ptr, i64, i64 } @finch.gen.mapFind(ptr %t83, { ptr, i64, i64 } %t84, { ptr, i64, i64 } %t87, %S.ast.Type %t88) + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_drop(ptr %a90) + store { ptr, i64, i64 } %t89, ptr %a91 + %t92 = load ptr, ptr %a1 + %t93 = load %S.gen.Val, ptr %a82 + call void @finch.gen.release(ptr %t92, %S.gen.Val %t93) + %t94 = load ptr, ptr %a1 + %t95 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.3661, i64 13, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t99, ptr %a101 + store { ptr, i64, i64 } { ptr @.str.3662, i64 3, i64 0 }, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t99, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + %t105 = call { ptr, i64, i64 } @finch.gen.op(ptr %t94, { ptr, i64, i64 } %t104) + store { ptr, i64, i64 } %t104, ptr %a106 + call void @finch_str_drop(ptr %a106) + store { ptr, i64, i64 } %t105, ptr %a107 + %t108 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.3663, i64 3, i64 0 }, ptr %a110 + %t111 = call i32 @finch_str_eq(ptr %a109, ptr %a110) + %t112 = icmp ne i32 %t111, 0 + br i1 %t112, label %then5753, label %endif5755 +then5753: + %t113 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t113, ptr %a114 + call void @finch_str_copy(ptr %a115, ptr %a114) + %t116 = load { ptr, i64, i64 }, ptr %a115 + %t117 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t116, 0 + %t118 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3664, i64 4, i64 0 }) + %t119 = insertvalue %S.gen.Val %t117, %S.ast.Type %t118, 1 + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a91) + call void @finch.drop.S_gen_Val(ptr %a82) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t119 +endif5755: + %t120 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t120, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.3665, i64 6, i64 0 }, ptr %a122 + %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) + %t124 = icmp ne i32 %t123, 0 + br i1 %t124, label %then5756, label %endif5758 +then5756: + %t125 = load ptr, ptr %a1 + %t126 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t125, { ptr, i64, i64 } { ptr @.str.3666, i64 10, i64 0 }) + store { ptr, i64, i64 } %t126, ptr %a127 + %t128 = load ptr, ptr %a1 + %t129 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t128, { ptr, i64, i64 } { ptr @.str.3667, i64 10, i64 0 }) + store { ptr, i64, i64 } %t129, ptr %a130 + %t131 = load ptr, ptr %a1 + %t132 = load { ptr, i64, i64 }, ptr %a107 + %t133 = load { ptr, i64, i64 }, ptr %a127 + %t134 = load { ptr, i64, i64 }, ptr %a130 + call void @finch.gen.condBr(ptr %t131, { ptr, i64, i64 } %t132, { ptr, i64, i64 } %t133, { ptr, i64, i64 } %t134) + %t135 = load ptr, ptr %a1 + %t136 = load { ptr, i64, i64 }, ptr %a127 + call void @finch.gen.label(ptr %t135, { ptr, i64, i64 } %t136) + %t137 = load ptr, ptr %a1 + %t138 = load { ptr, i64, i64 }, ptr %a3 + %t139 = load %S.ast.Type, ptr %a4 + %t140 = load { ptr, i64, i64 }, ptr %a91 + %t141 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t137, { ptr, i64, i64 } %t138, %S.ast.Type %t139, { ptr, i64, i64 } %t140) + store { ptr, i64, i64 } %t141, ptr %a142 + %t143 = load ptr, ptr %a1 + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a142 + %t146 = load %S.ast.Type, ptr %a4 + %t147 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t144, { ptr, i64, i64 } %t145, %S.ast.Type %t146, i64 1) + %t148 = load %S.ast.Type, ptr %a21 + call void @finch.gen.dropAt(ptr %t143, { ptr, i64, i64 } %t147, %S.ast.Type %t148) + store { ptr, i64, i64 } %t147, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load ptr, ptr %a1 + %t151 = load ptr, ptr %a1 + %t152 = load { ptr, i64, i64 }, ptr %a142 + %t153 = load %S.ast.Type, ptr %a4 + %t154 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t151, { ptr, i64, i64 } %t152, %S.ast.Type %t153, i64 2) + %t155 = load %S.ast.Type, ptr %a32 + call void @finch.gen.dropAt(ptr %t150, { ptr, i64, i64 } %t154, %S.ast.Type %t155) + store { ptr, i64, i64 } %t154, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load ptr, ptr %a1 + %t158 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.3668, i64 35, i64 0 }, ptr %a160 + store { ptr, i64, i64 } %t158, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + %t162 = load { ptr, i64, i64 }, ptr %a159 + store { ptr, i64, i64 } %t162, ptr %a164 + store { ptr, i64, i64 } { ptr @.str.3669, i64 6, i64 0 }, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t162, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + %t168 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } %t167, ptr %a170 + store { ptr, i64, i64 } %t168, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t167, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t173, ptr %a175 + store { ptr, i64, i64 } { ptr @.str.3670, i64 6, i64 0 }, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t173, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + %t179 = load ptr, ptr %a1 + %t180 = load %S.ast.Type, ptr %a4 + %t181 = call { ptr, i64, i64 } @finch.gen.entrySize(ptr %t179, %S.ast.Type %t180) + store { ptr, i64, i64 } %t178, ptr %a183 + store { ptr, i64, i64 } %t181, ptr %a184 + call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) + store { ptr, i64, i64 } %t178, ptr %a185 + call void @finch_str_drop(ptr %a185) + store { ptr, i64, i64 } %t181, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a182 + store { ptr, i64, i64 } %t187, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.3671, i64 1, i64 0 }, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + call void @finch.gen.emit(ptr %t157, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = load ptr, ptr %a1 + %t195 = load { ptr, i64, i64 }, ptr %a130 + call void @finch.gen.br(ptr %t194, { ptr, i64, i64 } %t195) + %t196 = load ptr, ptr %a1 + %t197 = load { ptr, i64, i64 }, ptr %a130 + call void @finch.gen.label(ptr %t196, { ptr, i64, i64 } %t197) + %t198 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t198, ptr %a199 + call void @finch_str_copy(ptr %a200, ptr %a199) + %t201 = load { ptr, i64, i64 }, ptr %a200 + %t202 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t201, 0 + %t203 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3672, i64 4, i64 0 }) + %t204 = insertvalue %S.gen.Val %t202, %S.ast.Type %t203, 1 + call void @finch_str_drop(ptr %a142) + call void @finch_str_drop(ptr %a130) + call void @finch_str_drop(ptr %a127) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a91) + call void @finch.drop.S_gen_Val(ptr %a82) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t204 +endif5758: + %t205 = load ptr, ptr %a1 + %t206 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t205, { ptr, i64, i64 } { ptr @.str.3673, i64 9, i64 0 }) + store { ptr, i64, i64 } %t206, ptr %a207 + %t208 = load ptr, ptr %a1 + %t209 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t208, { ptr, i64, i64 } { ptr @.str.3674, i64 11, i64 0 }) + store { ptr, i64, i64 } %t209, ptr %a210 + %t211 = load ptr, ptr %a1 + %t212 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t211, { ptr, i64, i64 } { ptr @.str.3675, i64 8, i64 0 }) + store { ptr, i64, i64 } %t212, ptr %a213 + %t214 = load ptr, ptr %a1 + %t215 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t214, { ptr, i64, i64 } { ptr @.str.3676, i64 8, i64 0 }) + store { ptr, i64, i64 } %t215, ptr %a216 + %t217 = load ptr, ptr %a1 + %t218 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t217, { ptr, i64, i64 } { ptr @.str.3677, i64 7, i64 0 }) + store { ptr, i64, i64 } %t218, ptr %a219 + %t220 = load ptr, ptr %a1 + %t221 = load { ptr, i64, i64 }, ptr %a107 + %t222 = load { ptr, i64, i64 }, ptr %a207 + %t223 = load { ptr, i64, i64 }, ptr %a210 + call void @finch.gen.condBr(ptr %t220, { ptr, i64, i64 } %t221, { ptr, i64, i64 } %t222, { ptr, i64, i64 } %t223) + %t224 = load ptr, ptr %a1 + %t225 = load { ptr, i64, i64 }, ptr %a207 + call void @finch.gen.label(ptr %t224, { ptr, i64, i64 } %t225) + %t226 = load ptr, ptr %a1 + %t227 = load ptr, ptr %a1 + %t228 = load ptr, ptr %a1 + %t229 = load %S.ast.Type, ptr %a32 + %t230 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t228, %S.ast.Type %t229) + %t231 = load ptr, ptr %a1 + %t232 = load ptr, ptr %a1 + %t233 = load { ptr, i64, i64 }, ptr %a3 + %t234 = load %S.ast.Type, ptr %a4 + %t235 = load { ptr, i64, i64 }, ptr %a91 + %t236 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t232, { ptr, i64, i64 } %t233, %S.ast.Type %t234, { ptr, i64, i64 } %t235) + %t237 = load %S.ast.Type, ptr %a4 + %t238 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t231, { ptr, i64, i64 } %t236, %S.ast.Type %t237, i64 2) + store { ptr, i64, i64 } %t236, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = call { ptr, i64, i64 } @finch.gen.load(ptr %t227, { ptr, i64, i64 } %t230, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t230, ptr %a241 + call void @finch_str_drop(ptr %a241) + store { ptr, i64, i64 } %t238, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load %S.ast.Type, ptr %a32 + %t244 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t226, { ptr, i64, i64 } %t240, %S.ast.Type %t243) + store { ptr, i64, i64 } %t240, ptr %a245 + call void @finch_str_drop(ptr %a245) + store { ptr, i64, i64 } %t244, ptr %a246 + %t247 = load ptr, ptr %a1 + %t248 = load { ptr, i64, i64 }, ptr %a213 + call void @finch.gen.br(ptr %t247, { ptr, i64, i64 } %t248) + %t249 = load ptr, ptr %a1 + %t250 = load { ptr, i64, i64 }, ptr %a213 + call void @finch.gen.label(ptr %t249, { ptr, i64, i64 } %t250) + %t251 = load ptr, ptr %a1 + %t252 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.br(ptr %t251, { ptr, i64, i64 } %t252) + %t253 = load ptr, ptr %a1 + %t254 = load { ptr, i64, i64 }, ptr %a210 + call void @finch.gen.label(ptr %t253, { ptr, i64, i64 } %t254) + %t255 = load ptr, ptr %a1 + %t256 = load ptr, ptr %a1 + %t257 = load ptr, ptr %a1 + %t258 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t259 = load { ptr, i64, i64 }, ptr %t258 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 2, %t260 + br i1 %t261, label %range5759, label %inrange5760 +range5759: + call void @finch_panic_index(ptr @.str.3678, i64 2963, i64 2, i64 %t260) + unreachable +inrange5760: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds %S.ast.Node, ptr %t262, i64 2 + %t264 = load %S.ast.Node, ptr %t263 + %t265 = load %S.ast.Type, ptr %a32 + %t266 = call %S.gen.Val @finch.gen.exprWant(ptr %t257, %S.ast.Node %t264, %S.ast.Type %t265) + %t267 = load %S.ast.Type, ptr %a32 + %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t269 = load { ptr, i64, i64 }, ptr %t268 + %t270 = extractvalue { ptr, i64, i64 } %t269, 1 + %t271 = icmp uge i64 2, %t270 + br i1 %t271, label %range5761, label %inrange5762 +range5761: + call void @finch_panic_index(ptr @.str.3679, i64 2963, i64 2, i64 %t270) + unreachable +inrange5762: + %t272 = extractvalue { ptr, i64, i64 } %t269, 0 + %t273 = getelementptr inbounds %S.ast.Node, ptr %t272, i64 2 + %t274 = load %S.ast.Node, ptr %t273 + %t275 = call %S.gen.Val @finch.gen.coerce(ptr %t256, %S.gen.Val %t266, %S.ast.Type %t267, %S.ast.Node %t274, { ptr, i64, i64 } { ptr @.str.3680, i64 11, i64 0 }) + store %S.gen.Val %t266, ptr %a276 + call void @finch.drop.S_gen_Val(ptr %a276) + %t277 = call { ptr, i64, i64 } @finch.gen.own(ptr %t255, %S.gen.Val %t275) + store %S.gen.Val %t275, ptr %a278 + call void @finch.drop.S_gen_Val(ptr %a278) + store { ptr, i64, i64 } %t277, ptr %a279 + %t280 = load ptr, ptr %a1 + %t281 = load { ptr, i64, i64 }, ptr %a216 + call void @finch.gen.br(ptr %t280, { ptr, i64, i64 } %t281) + %t282 = load ptr, ptr %a1 + %t283 = load { ptr, i64, i64 }, ptr %a216 + call void @finch.gen.label(ptr %t282, { ptr, i64, i64 } %t283) + %t284 = load ptr, ptr %a1 + %t285 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.br(ptr %t284, { ptr, i64, i64 } %t285) + %t286 = load ptr, ptr %a1 + %t287 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.label(ptr %t286, { ptr, i64, i64 } %t287) + %t288 = load ptr, ptr %a1 + %t289 = load ptr, ptr %a1 + %t290 = load %S.ast.Type, ptr %a32 + %t291 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t289, %S.ast.Type %t290) + store { ptr, i64, i64 } { ptr @.str.3681, i64 4, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.3682, i64 3, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + store { ptr, i64, i64 } %t296, ptr %a300 + call void @finch_str_drop(ptr %a300) + %t301 = load { ptr, i64, i64 }, ptr %a297 + %t302 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t301, ptr %a304 + store { ptr, i64, i64 } %t302, ptr %a305 + call void @finch_str_concat(ptr %a303, ptr %a304, ptr %a305) + store { ptr, i64, i64 } %t301, ptr %a306 + call void @finch_str_drop(ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a303 + store { ptr, i64, i64 } %t307, ptr %a309 + store { ptr, i64, i64 } { ptr @.str.3683, i64 3, i64 0 }, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t307, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = load { ptr, i64, i64 }, ptr %a308 + %t313 = load { ptr, i64, i64 }, ptr %a213 + store { ptr, i64, i64 } %t312, ptr %a315 + store { ptr, i64, i64 } %t313, ptr %a316 + call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) + store { ptr, i64, i64 } %t312, ptr %a317 + call void @finch_str_drop(ptr %a317) + %t318 = load { ptr, i64, i64 }, ptr %a314 + store { ptr, i64, i64 } %t318, ptr %a320 + store { ptr, i64, i64 } { ptr @.str.3684, i64 6, i64 0 }, ptr %a321 + call void @finch_str_concat(ptr %a319, ptr %a320, ptr %a321) + store { ptr, i64, i64 } %t318, ptr %a322 + call void @finch_str_drop(ptr %a322) + %t323 = load { ptr, i64, i64 }, ptr %a319 + %t324 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t323, ptr %a326 + store { ptr, i64, i64 } %t324, ptr %a327 + call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) + store { ptr, i64, i64 } %t323, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a325 + store { ptr, i64, i64 } %t329, ptr %a331 + store { ptr, i64, i64 } { ptr @.str.3685, i64 3, i64 0 }, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + store { ptr, i64, i64 } %t329, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = load { ptr, i64, i64 }, ptr %a330 + %t335 = load { ptr, i64, i64 }, ptr %a216 + store { ptr, i64, i64 } %t334, ptr %a337 + store { ptr, i64, i64 } %t335, ptr %a338 + call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) + store { ptr, i64, i64 } %t334, ptr %a339 + call void @finch_str_drop(ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t340, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.3686, i64 2, i64 0 }, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t340, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load { ptr, i64, i64 }, ptr %a341 + %t346 = call { ptr, i64, i64 } @finch.gen.op(ptr %t288, { ptr, i64, i64 } %t345) + store { ptr, i64, i64 } %t345, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t346, 0 + %t349 = load %S.ast.Type, ptr %a32 + store %S.ast.Type %t349, ptr %a350 + call void @finch.copy.S_ast_Type(ptr %a351, ptr %a350) + %t352 = load %S.ast.Type, ptr %a351 + %t353 = insertvalue %S.gen.Val %t348, %S.ast.Type %t352, 1 + %t354 = load ptr, ptr %a1 + %t355 = load %S.ast.Type, ptr %a32 + %t356 = call i1 @finch.gen.owning(ptr %t354, %S.ast.Type %t355) + %t357 = insertvalue %S.gen.Val %t353, i1 %t356, 2 + call void @finch_str_drop(ptr %a279) + call void @finch_str_drop(ptr %a246) + call void @finch_str_drop(ptr %a219) + call void @finch_str_drop(ptr %a216) + call void @finch_str_drop(ptr %a213) + call void @finch_str_drop(ptr %a210) + call void @finch_str_drop(ptr %a207) + call void @finch_str_drop(ptr %a107) + call void @finch_str_drop(ptr %a91) + call void @finch.drop.S_gen_Val(ptr %a82) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t357 +endif5745: + %t358 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t358, ptr %a359 + store { ptr, i64, i64 } { ptr @.str.3687, i64 5, i64 0 }, ptr %a360 + %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) + %t362 = icmp ne i32 %t361, 0 + br i1 %t362, label %then5763, label %endif5765 +then5763: + %t363 = load ptr, ptr %a1 + %t364 = load %S.ast.Node, ptr %a2 + %t365 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t363, %S.ast.Node %t364, i64 1, i64 0, { ptr, i64, i64 } %t365) + %t366 = load ptr, ptr %a1 + %t367 = load %S.ast.Type, ptr %a21 + %t368 = call i1 @finch.gen.owning(ptr %t366, %S.ast.Type %t367) + br label %logic.from5766 +logic.from5766: + br i1 %t368, label %logic.end5768, label %logic.rhs5767 +logic.rhs5767: + %t369 = load ptr, ptr %a1 + %t370 = load %S.ast.Type, ptr %a32 + %t371 = call i1 @finch.gen.owning(ptr %t369, %S.ast.Type %t370) + br label %logic.rend5769 +logic.rend5769: + br label %logic.end5768 +logic.end5768: + %t372 = phi i1 [ true, %logic.from5766 ], [ %t371, %logic.rend5769 ] + br i1 %t372, label %then5770, label %endif5772 +then5770: + %t373 = load ptr, ptr %a1 + %t374 = load ptr, ptr %a1 + %t375 = load ptr, ptr %a1 + %t376 = load %S.ast.Type, ptr %a4 + %t377 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t375, %S.ast.Type %t376) + store { ptr, i64, i64 } { ptr @.str.3689, i64 23, i64 0 }, ptr %a379 + store { ptr, i64, i64 } %t377, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + store { ptr, i64, i64 } %t382, ptr %a384 + store { ptr, i64, i64 } { ptr @.str.3690, i64 6, i64 0 }, ptr %a385 + call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) + store { ptr, i64, i64 } %t382, ptr %a386 + call void @finch_str_drop(ptr %a386) + %t387 = load { ptr, i64, i64 }, ptr %a383 + %t388 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t387, ptr %a390 + store { ptr, i64, i64 } %t388, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t387, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + store { ptr, i64, i64 } %t393, ptr %a395 + store { ptr, i64, i64 } { ptr @.str.3691, i64 14, i64 0 }, ptr %a396 + call void @finch_str_concat(ptr %a394, ptr %a395, ptr %a396) + store { ptr, i64, i64 } %t393, ptr %a397 + call void @finch_str_drop(ptr %a397) + %t398 = load { ptr, i64, i64 }, ptr %a394 + %t399 = call { ptr, i64, i64 } @finch.gen.op(ptr %t374, { ptr, i64, i64 } %t398) + store { ptr, i64, i64 } %t398, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = call { ptr, i64, i64 } @finch.gen.load(ptr %t373, { ptr, i64, i64 } { ptr @.str.3688, i64 3, i64 0 }, { ptr, i64, i64 } %t399) + store { ptr, i64, i64 } %t399, ptr %a402 + call void @finch_str_drop(ptr %a402) + store { ptr, i64, i64 } %t401, ptr %a403 + %t404 = load ptr, ptr %a1 + %t405 = load { ptr, i64, i64 }, ptr %a403 + %t406 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t404, { ptr, i64, i64 } %t405) + store { ptr, i64, i64 } %t406, ptr %a407 + %t408 = load ptr, ptr %a1 + %t409 = load { ptr, i64, i64 }, ptr %a3 + %t410 = load %S.ast.Type, ptr %a4 + %t411 = load { ptr, i64, i64 }, ptr %a407 + %t412 = extractvalue { ptr, i64, i64 } %t411, 1 + %t413 = icmp uge i64 3, %t412 + br i1 %t413, label %range5773, label %inrange5774 +range5773: + call void @finch_panic_index(ptr @.str.3692, i64 2975, i64 3, i64 %t412) + unreachable +inrange5774: + %t414 = extractvalue { ptr, i64, i64 } %t411, 0 + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 3 + %t416 = load { ptr, i64, i64 }, ptr %t415 + %t417 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t408, { ptr, i64, i64 } %t409, %S.ast.Type %t410, { ptr, i64, i64 } %t416) + store { ptr, i64, i64 } %t417, ptr %a418 + %t419 = load ptr, ptr %a1 + %t420 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t419, { ptr, i64, i64 } { ptr @.str.3693, i64 10, i64 0 }) + store { ptr, i64, i64 } %t420, ptr %a421 + %t422 = load ptr, ptr %a1 + %t423 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t422, { ptr, i64, i64 } { ptr @.str.3694, i64 10, i64 0 }) + store { ptr, i64, i64 } %t423, ptr %a424 + %t425 = load ptr, ptr %a1 + %t426 = load ptr, ptr %a1 + %t427 = load ptr, ptr %a1 + %t428 = load ptr, ptr %a1 + %t429 = load { ptr, i64, i64 }, ptr %a418 + %t430 = load %S.ast.Type, ptr %a4 + %t431 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t428, { ptr, i64, i64 } %t429, %S.ast.Type %t430, i64 0) + %t432 = call { ptr, i64, i64 } @finch.gen.load(ptr %t427, { ptr, i64, i64 } { ptr @.str.3696, i64 3, i64 0 }, { ptr, i64, i64 } %t431) + store { ptr, i64, i64 } %t431, ptr %a433 + call void @finch_str_drop(ptr %a433) + store { ptr, i64, i64 } { ptr @.str.3695, i64 12, i64 0 }, ptr %a435 + store { ptr, i64, i64 } %t432, ptr %a436 + call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) + store { ptr, i64, i64 } %t432, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a434 + store { ptr, i64, i64 } %t438, ptr %a440 + store { ptr, i64, i64 } { ptr @.str.3697, i64 3, i64 0 }, ptr %a441 + call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) + store { ptr, i64, i64 } %t438, ptr %a442 + call void @finch_str_drop(ptr %a442) + %t443 = load { ptr, i64, i64 }, ptr %a439 + %t444 = call { ptr, i64, i64 } @finch.gen.op(ptr %t426, { ptr, i64, i64 } %t443) + store { ptr, i64, i64 } %t443, ptr %a445 + call void @finch_str_drop(ptr %a445) + %t446 = load { ptr, i64, i64 }, ptr %a421 + %t447 = load { ptr, i64, i64 }, ptr %a424 + call void @finch.gen.condBr(ptr %t425, { ptr, i64, i64 } %t444, { ptr, i64, i64 } %t446, { ptr, i64, i64 } %t447) + store { ptr, i64, i64 } %t444, ptr %a448 + call void @finch_str_drop(ptr %a448) + %t449 = load ptr, ptr %a1 + %t450 = load { ptr, i64, i64 }, ptr %a421 + call void @finch.gen.label(ptr %t449, { ptr, i64, i64 } %t450) + %t451 = load ptr, ptr %a1 + %t452 = load ptr, ptr %a1 + %t453 = load { ptr, i64, i64 }, ptr %a418 + %t454 = load %S.ast.Type, ptr %a4 + %t455 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t452, { ptr, i64, i64 } %t453, %S.ast.Type %t454, i64 1) + %t456 = load %S.ast.Type, ptr %a21 + call void @finch.gen.dropAt(ptr %t451, { ptr, i64, i64 } %t455, %S.ast.Type %t456) + store { ptr, i64, i64 } %t455, ptr %a457 + call void @finch_str_drop(ptr %a457) + %t458 = load ptr, ptr %a1 + %t459 = load ptr, ptr %a1 + %t460 = load { ptr, i64, i64 }, ptr %a418 + %t461 = load %S.ast.Type, ptr %a4 + %t462 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t459, { ptr, i64, i64 } %t460, %S.ast.Type %t461, i64 2) + %t463 = load %S.ast.Type, ptr %a32 + call void @finch.gen.dropAt(ptr %t458, { ptr, i64, i64 } %t462, %S.ast.Type %t463) + store { ptr, i64, i64 } %t462, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = load ptr, ptr %a1 + %t466 = load { ptr, i64, i64 }, ptr %a424 + call void @finch.gen.br(ptr %t465, { ptr, i64, i64 } %t466) + %t467 = load ptr, ptr %a1 + %t468 = load { ptr, i64, i64 }, ptr %a424 + call void @finch.gen.label(ptr %t467, { ptr, i64, i64 } %t468) + %t469 = load ptr, ptr %a1 + %t470 = load { ptr, i64, i64 }, ptr %a407 + call void @finch.gen.loopEnd(ptr %t469, { ptr, i64, i64 } %t470) + call void @finch_str_drop(ptr %a424) + call void @finch_str_drop(ptr %a421) + call void @finch_str_drop(ptr %a418) + call void @finch.drop.arr_str(ptr %a407) + call void @finch_str_drop(ptr %a403) + br label %endif5772 +endif5772: + %t471 = load ptr, ptr %a1 + %t472 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.3698, i64 31, i64 0 }, ptr %a474 + store { ptr, i64, i64 } %t472, ptr %a475 + call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) + %t476 = load { ptr, i64, i64 }, ptr %a473 + store { ptr, i64, i64 } %t476, ptr %a478 + store { ptr, i64, i64 } { ptr @.str.3699, i64 1, i64 0 }, ptr %a479 + call void @finch_str_concat(ptr %a477, ptr %a478, ptr %a479) + store { ptr, i64, i64 } %t476, ptr %a480 + call void @finch_str_drop(ptr %a480) + %t481 = load { ptr, i64, i64 }, ptr %a477 + call void @finch.gen.emit(ptr %t471, { ptr, i64, i64 } %t481) + store { ptr, i64, i64 } %t481, ptr %a482 + call void @finch_str_drop(ptr %a482) + %t483 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3700, i64 4, i64 0 }) + %t484 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t483, 1 + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t484 +endif5765: + %t485 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t485, ptr %a486 + store { ptr, i64, i64 } { ptr @.str.3701, i64 4, i64 0 }, ptr %a487 + %t488 = call i32 @finch_str_eq(ptr %a486, ptr %a487) + %t489 = icmp ne i32 %t488, 0 + br label %logic.from5775 +logic.from5775: + br i1 %t489, label %logic.end5777, label %logic.rhs5776 +logic.rhs5776: + %t490 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t490, ptr %a491 + store { ptr, i64, i64 } { ptr @.str.3702, i64 6, i64 0 }, ptr %a492 + %t493 = call i32 @finch_str_eq(ptr %a491, ptr %a492) + %t494 = icmp ne i32 %t493, 0 + br label %logic.rend5778 +logic.rend5778: + br label %logic.end5777 +logic.end5777: + %t495 = phi i1 [ true, %logic.from5775 ], [ %t494, %logic.rend5778 ] + br i1 %t495, label %then5779, label %endif5781 +then5779: + %t496 = load ptr, ptr %a1 + %t497 = load %S.ast.Node, ptr %a2 + %t498 = load { ptr, i64, i64 }, ptr %a10 + call void @finch.gen.checkArgs(ptr %t496, %S.ast.Node %t497, i64 1, i64 0, { ptr, i64, i64 } %t498) + store i64 1, ptr %a499 + %t500 = load %S.ast.Type, ptr %a21 + store %S.ast.Type %t500, ptr %a501 + call void @finch.copy.S_ast_Type(ptr %a502, ptr %a501) + %t503 = load %S.ast.Type, ptr %a502 + store %S.ast.Type %t503, ptr %a504 + %t505 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t505, ptr %a506 + store { ptr, i64, i64 } { ptr @.str.3703, i64 6, i64 0 }, ptr %a507 + %t508 = call i32 @finch_str_eq(ptr %a506, ptr %a507) + %t509 = icmp ne i32 %t508, 0 + br i1 %t509, label %then5782, label %endif5784 +then5782: + store i64 2, ptr %a499 + %t510 = load %S.ast.Type, ptr %a32 + store %S.ast.Type %t510, ptr %a511 + call void @finch.copy.S_ast_Type(ptr %a512, ptr %a511) + %t513 = load %S.ast.Type, ptr %a512 + %t514 = load %S.ast.Type, ptr %a504 + store %S.ast.Type %t513, ptr %a504 + store %S.ast.Type %t514, ptr %a515 + call void @finch.drop.S_ast_Type(ptr %a515) + br label %endif5784 +endif5784: + %t516 = load %S.ast.Type, ptr %a504 + %t517 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t516) + store %S.ast.Type %t517, ptr %a518 + %t519 = load ptr, ptr %a1 + %t520 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t519, { ptr, i64, i64 } { ptr @.str.3704, i64 17, i64 0 }) + store { ptr, i64, i64 } %t520, ptr %a521 + %t522 = load ptr, ptr %a1 + %t523 = load { ptr, i64, i64 }, ptr %a521 + call void @finch.gen.store(ptr %t522, { ptr, i64, i64 } { ptr @.str.3705, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.3706, i64 15, i64 0 }, { ptr, i64, i64 } %t523) + %t524 = load ptr, ptr %a1 + %t525 = load ptr, ptr %a1 + %t526 = load ptr, ptr %a1 + %t527 = load %S.ast.Type, ptr %a4 + %t528 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t526, %S.ast.Type %t527) + store { ptr, i64, i64 } { ptr @.str.3708, i64 23, i64 0 }, ptr %a530 + store { ptr, i64, i64 } %t528, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + store { ptr, i64, i64 } %t533, ptr %a535 + store { ptr, i64, i64 } { ptr @.str.3709, i64 6, i64 0 }, ptr %a536 + call void @finch_str_concat(ptr %a534, ptr %a535, ptr %a536) + store { ptr, i64, i64 } %t533, ptr %a537 + call void @finch_str_drop(ptr %a537) + %t538 = load { ptr, i64, i64 }, ptr %a534 + %t539 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t538, ptr %a541 + store { ptr, i64, i64 } %t539, ptr %a542 + call void @finch_str_concat(ptr %a540, ptr %a541, ptr %a542) + store { ptr, i64, i64 } %t538, ptr %a543 + call void @finch_str_drop(ptr %a543) + %t544 = load { ptr, i64, i64 }, ptr %a540 + store { ptr, i64, i64 } %t544, ptr %a546 + store { ptr, i64, i64 } { ptr @.str.3710, i64 14, i64 0 }, ptr %a547 + call void @finch_str_concat(ptr %a545, ptr %a546, ptr %a547) + store { ptr, i64, i64 } %t544, ptr %a548 + call void @finch_str_drop(ptr %a548) + %t549 = load { ptr, i64, i64 }, ptr %a545 + %t550 = call { ptr, i64, i64 } @finch.gen.op(ptr %t525, { ptr, i64, i64 } %t549) + store { ptr, i64, i64 } %t549, ptr %a551 + call void @finch_str_drop(ptr %a551) + %t552 = call { ptr, i64, i64 } @finch.gen.load(ptr %t524, { ptr, i64, i64 } { ptr @.str.3707, i64 3, i64 0 }, { ptr, i64, i64 } %t550) + store { ptr, i64, i64 } %t550, ptr %a553 + call void @finch_str_drop(ptr %a553) + store { ptr, i64, i64 } %t552, ptr %a554 + %t555 = load ptr, ptr %a1 + %t556 = load { ptr, i64, i64 }, ptr %a521 + store { ptr, i64, i64 } { ptr @.str.3711, i64 30, i64 0 }, ptr %a558 + store { ptr, i64, i64 } %t556, ptr %a559 + call void @finch_str_concat(ptr %a557, ptr %a558, ptr %a559) + %t560 = load { ptr, i64, i64 }, ptr %a557 + store { ptr, i64, i64 } %t560, ptr %a562 + store { ptr, i64, i64 } { ptr @.str.3712, i64 6, i64 0 }, ptr %a563 + call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) + store { ptr, i64, i64 } %t560, ptr %a564 + call void @finch_str_drop(ptr %a564) + %t565 = load { ptr, i64, i64 }, ptr %a561 + %t566 = load { ptr, i64, i64 }, ptr %a554 + store { ptr, i64, i64 } %t565, ptr %a568 + store { ptr, i64, i64 } %t566, ptr %a569 + call void @finch_str_concat(ptr %a567, ptr %a568, ptr %a569) + store { ptr, i64, i64 } %t565, ptr %a570 + call void @finch_str_drop(ptr %a570) + %t571 = load { ptr, i64, i64 }, ptr %a567 + store { ptr, i64, i64 } %t571, ptr %a573 + store { ptr, i64, i64 } { ptr @.str.3713, i64 6, i64 0 }, ptr %a574 + call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) + store { ptr, i64, i64 } %t571, ptr %a575 + call void @finch_str_drop(ptr %a575) + %t576 = load { ptr, i64, i64 }, ptr %a572 + %t577 = load ptr, ptr %a1 + %t578 = load %S.ast.Type, ptr %a504 + %t579 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t577, %S.ast.Type %t578) + store { ptr, i64, i64 } %t576, ptr %a581 + store { ptr, i64, i64 } %t579, ptr %a582 + call void @finch_str_concat(ptr %a580, ptr %a581, ptr %a582) + store { ptr, i64, i64 } %t576, ptr %a583 + call void @finch_str_drop(ptr %a583) + store { ptr, i64, i64 } %t579, ptr %a584 + call void @finch_str_drop(ptr %a584) + %t585 = load { ptr, i64, i64 }, ptr %a580 + store { ptr, i64, i64 } %t585, ptr %a587 + store { ptr, i64, i64 } { ptr @.str.3714, i64 1, i64 0 }, ptr %a588 + call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588) + store { ptr, i64, i64 } %t585, ptr %a589 + call void @finch_str_drop(ptr %a589) + %t590 = load { ptr, i64, i64 }, ptr %a586 + call void @finch.gen.emit(ptr %t555, { ptr, i64, i64 } %t590) + store { ptr, i64, i64 } %t590, ptr %a591 + call void @finch_str_drop(ptr %a591) + %t592 = load ptr, ptr %a1 + %t593 = load { ptr, i64, i64 }, ptr %a521 + %t594 = call { ptr, i64, i64 } @finch.gen.load(ptr %t592, { ptr, i64, i64 } { ptr @.str.3715, i64 3, i64 0 }, { ptr, i64, i64 } %t593) + store { ptr, i64, i64 } %t594, ptr %a595 + %t596 = load ptr, ptr %a1 + %t597 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t596, { ptr, i64, i64 } { ptr @.str.3716, i64 3, i64 0 }) + store { ptr, i64, i64 } %t597, ptr %a598 + %t599 = load ptr, ptr %a1 + %t600 = load { ptr, i64, i64 }, ptr %a598 + call void @finch.gen.store(ptr %t599, { ptr, i64, i64 } { ptr @.str.3717, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.3718, i64 1, i64 0 }, { ptr, i64, i64 } %t600) + %t601 = load ptr, ptr %a1 + %t602 = load ptr, ptr %a1 + %t603 = load ptr, ptr %a1 + %t604 = load %S.ast.Type, ptr %a4 + %t605 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t603, %S.ast.Type %t604) + store { ptr, i64, i64 } { ptr @.str.3720, i64 23, i64 0 }, ptr %a607 + store { ptr, i64, i64 } %t605, ptr %a608 + call void @finch_str_concat(ptr %a606, ptr %a607, ptr %a608) + store { ptr, i64, i64 } %t605, ptr %a609 + call void @finch_str_drop(ptr %a609) + %t610 = load { ptr, i64, i64 }, ptr %a606 + store { ptr, i64, i64 } %t610, ptr %a612 + store { ptr, i64, i64 } { ptr @.str.3721, i64 6, i64 0 }, ptr %a613 + call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) + store { ptr, i64, i64 } %t610, ptr %a614 + call void @finch_str_drop(ptr %a614) + %t615 = load { ptr, i64, i64 }, ptr %a611 + %t616 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t615, ptr %a618 + store { ptr, i64, i64 } %t616, ptr %a619 + call void @finch_str_concat(ptr %a617, ptr %a618, ptr %a619) + store { ptr, i64, i64 } %t615, ptr %a620 + call void @finch_str_drop(ptr %a620) + %t621 = load { ptr, i64, i64 }, ptr %a617 + store { ptr, i64, i64 } %t621, ptr %a623 + store { ptr, i64, i64 } { ptr @.str.3722, i64 14, i64 0 }, ptr %a624 + call void @finch_str_concat(ptr %a622, ptr %a623, ptr %a624) + store { ptr, i64, i64 } %t621, ptr %a625 + call void @finch_str_drop(ptr %a625) + %t626 = load { ptr, i64, i64 }, ptr %a622 + %t627 = call { ptr, i64, i64 } @finch.gen.op(ptr %t602, { ptr, i64, i64 } %t626) + store { ptr, i64, i64 } %t626, ptr %a628 + call void @finch_str_drop(ptr %a628) + %t629 = call { ptr, i64, i64 } @finch.gen.load(ptr %t601, { ptr, i64, i64 } { ptr @.str.3719, i64 3, i64 0 }, { ptr, i64, i64 } %t627) + store { ptr, i64, i64 } %t627, ptr %a630 + call void @finch_str_drop(ptr %a630) + store { ptr, i64, i64 } %t629, ptr %a631 + %t632 = load ptr, ptr %a1 + %t633 = load { ptr, i64, i64 }, ptr %a631 + %t634 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t632, { ptr, i64, i64 } %t633) + store { ptr, i64, i64 } %t634, ptr %a635 + %t636 = load ptr, ptr %a1 + %t637 = load { ptr, i64, i64 }, ptr %a3 + %t638 = load %S.ast.Type, ptr %a4 + %t639 = load { ptr, i64, i64 }, ptr %a635 + %t640 = extractvalue { ptr, i64, i64 } %t639, 1 + %t641 = icmp uge i64 3, %t640 + br i1 %t641, label %range5785, label %inrange5786 +range5785: + call void @finch_panic_index(ptr @.str.3723, i64 3007, i64 3, i64 %t640) + unreachable +inrange5786: + %t642 = extractvalue { ptr, i64, i64 } %t639, 0 + %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %t642, i64 3 + %t644 = load { ptr, i64, i64 }, ptr %t643 + %t645 = call { ptr, i64, i64 } @finch.gen.entryAt(ptr %t636, { ptr, i64, i64 } %t637, %S.ast.Type %t638, { ptr, i64, i64 } %t644) + store { ptr, i64, i64 } %t645, ptr %a646 + %t647 = load ptr, ptr %a1 + %t648 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t647, { ptr, i64, i64 } { ptr @.str.3724, i64 10, i64 0 }) + store { ptr, i64, i64 } %t648, ptr %a649 + %t650 = load ptr, ptr %a1 + %t651 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t650, { ptr, i64, i64 } { ptr @.str.3725, i64 10, i64 0 }) + store { ptr, i64, i64 } %t651, ptr %a652 + %t653 = load ptr, ptr %a1 + %t654 = load ptr, ptr %a1 + %t655 = load ptr, ptr %a1 + %t656 = load ptr, ptr %a1 + %t657 = load { ptr, i64, i64 }, ptr %a646 + %t658 = load %S.ast.Type, ptr %a4 + %t659 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t656, { ptr, i64, i64 } %t657, %S.ast.Type %t658, i64 0) + %t660 = call { ptr, i64, i64 } @finch.gen.load(ptr %t655, { ptr, i64, i64 } { ptr @.str.3727, i64 3, i64 0 }, { ptr, i64, i64 } %t659) + store { ptr, i64, i64 } %t659, ptr %a661 + call void @finch_str_drop(ptr %a661) + store { ptr, i64, i64 } { ptr @.str.3726, i64 12, i64 0 }, ptr %a663 + store { ptr, i64, i64 } %t660, ptr %a664 + call void @finch_str_concat(ptr %a662, ptr %a663, ptr %a664) + store { ptr, i64, i64 } %t660, ptr %a665 + call void @finch_str_drop(ptr %a665) + %t666 = load { ptr, i64, i64 }, ptr %a662 + store { ptr, i64, i64 } %t666, ptr %a668 + store { ptr, i64, i64 } { ptr @.str.3728, i64 3, i64 0 }, ptr %a669 + call void @finch_str_concat(ptr %a667, ptr %a668, ptr %a669) + store { ptr, i64, i64 } %t666, ptr %a670 + call void @finch_str_drop(ptr %a670) + %t671 = load { ptr, i64, i64 }, ptr %a667 + %t672 = call { ptr, i64, i64 } @finch.gen.op(ptr %t654, { ptr, i64, i64 } %t671) + store { ptr, i64, i64 } %t671, ptr %a673 + call void @finch_str_drop(ptr %a673) + %t674 = load { ptr, i64, i64 }, ptr %a649 + %t675 = load { ptr, i64, i64 }, ptr %a652 + call void @finch.gen.condBr(ptr %t653, { ptr, i64, i64 } %t672, { ptr, i64, i64 } %t674, { ptr, i64, i64 } %t675) + store { ptr, i64, i64 } %t672, ptr %a676 + call void @finch_str_drop(ptr %a676) + %t677 = load ptr, ptr %a1 + %t678 = load { ptr, i64, i64 }, ptr %a649 + call void @finch.gen.label(ptr %t677, { ptr, i64, i64 } %t678) + %t679 = load ptr, ptr %a1 + %t680 = load { ptr, i64, i64 }, ptr %a598 + %t681 = call { ptr, i64, i64 } @finch.gen.load(ptr %t679, { ptr, i64, i64 } { ptr @.str.3729, i64 3, i64 0 }, { ptr, i64, i64 } %t680) + store { ptr, i64, i64 } %t681, ptr %a682 + %t683 = load ptr, ptr %a1 + %t684 = load ptr, ptr %a1 + %t685 = load ptr, ptr %a1 + %t686 = load %S.ast.Type, ptr %a504 + %t687 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t685, %S.ast.Type %t686) + store { ptr, i64, i64 } { ptr @.str.3730, i64 23, i64 0 }, ptr %a689 + store { ptr, i64, i64 } %t687, ptr %a690 + call void @finch_str_concat(ptr %a688, ptr %a689, ptr %a690) + store { ptr, i64, i64 } %t687, ptr %a691 + call void @finch_str_drop(ptr %a691) + %t692 = load { ptr, i64, i64 }, ptr %a688 + store { ptr, i64, i64 } %t692, ptr %a694 + store { ptr, i64, i64 } { ptr @.str.3731, i64 6, i64 0 }, ptr %a695 + call void @finch_str_concat(ptr %a693, ptr %a694, ptr %a695) + store { ptr, i64, i64 } %t692, ptr %a696 + call void @finch_str_drop(ptr %a696) + %t697 = load { ptr, i64, i64 }, ptr %a693 + %t698 = load { ptr, i64, i64 }, ptr %a595 + store { ptr, i64, i64 } %t697, ptr %a700 + store { ptr, i64, i64 } %t698, ptr %a701 + call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) + store { ptr, i64, i64 } %t697, ptr %a702 + call void @finch_str_drop(ptr %a702) + %t703 = load { ptr, i64, i64 }, ptr %a699 + store { ptr, i64, i64 } %t703, ptr %a705 + store { ptr, i64, i64 } { ptr @.str.3732, i64 6, i64 0 }, ptr %a706 + call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) + store { ptr, i64, i64 } %t703, ptr %a707 + call void @finch_str_drop(ptr %a707) + %t708 = load { ptr, i64, i64 }, ptr %a704 + %t709 = load { ptr, i64, i64 }, ptr %a682 + store { ptr, i64, i64 } %t708, ptr %a711 + store { ptr, i64, i64 } %t709, ptr %a712 + call void @finch_str_concat(ptr %a710, ptr %a711, ptr %a712) + store { ptr, i64, i64 } %t708, ptr %a713 + call void @finch_str_drop(ptr %a713) + %t714 = load { ptr, i64, i64 }, ptr %a710 + %t715 = call { ptr, i64, i64 } @finch.gen.op(ptr %t684, { ptr, i64, i64 } %t714) + store { ptr, i64, i64 } %t714, ptr %a716 + call void @finch_str_drop(ptr %a716) + %t717 = load ptr, ptr %a1 + %t718 = load { ptr, i64, i64 }, ptr %a646 + %t719 = load %S.ast.Type, ptr %a4 + %t720 = load i64, ptr %a499 + %t721 = call { ptr, i64, i64 } @finch.gen.entryField(ptr %t717, { ptr, i64, i64 } %t718, %S.ast.Type %t719, i64 %t720) + %t722 = load %S.ast.Type, ptr %a504 + call void @finch.gen.copyAt(ptr %t683, { ptr, i64, i64 } %t715, { ptr, i64, i64 } %t721, %S.ast.Type %t722) + store { ptr, i64, i64 } %t715, ptr %a723 + call void @finch_str_drop(ptr %a723) + store { ptr, i64, i64 } %t721, ptr %a724 + call void @finch_str_drop(ptr %a724) + %t725 = load ptr, ptr %a1 + %t726 = load ptr, ptr %a1 + %t727 = load { ptr, i64, i64 }, ptr %a682 + store { ptr, i64, i64 } { ptr @.str.3734, i64 8, i64 0 }, ptr %a729 + store { ptr, i64, i64 } %t727, ptr %a730 + call void @finch_str_concat(ptr %a728, ptr %a729, ptr %a730) + %t731 = load { ptr, i64, i64 }, ptr %a728 + store { ptr, i64, i64 } %t731, ptr %a733 + store { ptr, i64, i64 } { ptr @.str.3735, i64 3, i64 0 }, ptr %a734 + call void @finch_str_concat(ptr %a732, ptr %a733, ptr %a734) + store { ptr, i64, i64 } %t731, ptr %a735 + call void @finch_str_drop(ptr %a735) + %t736 = load { ptr, i64, i64 }, ptr %a732 + %t737 = call { ptr, i64, i64 } @finch.gen.op(ptr %t726, { ptr, i64, i64 } %t736) + store { ptr, i64, i64 } %t736, ptr %a738 + call void @finch_str_drop(ptr %a738) + %t739 = load { ptr, i64, i64 }, ptr %a598 + call void @finch.gen.store(ptr %t725, { ptr, i64, i64 } { ptr @.str.3733, i64 3, i64 0 }, { ptr, i64, i64 } %t737, { ptr, i64, i64 } %t739) + store { ptr, i64, i64 } %t737, ptr %a740 + call void @finch_str_drop(ptr %a740) + %t741 = load ptr, ptr %a1 + %t742 = load { ptr, i64, i64 }, ptr %a652 + call void @finch.gen.br(ptr %t741, { ptr, i64, i64 } %t742) + %t743 = load ptr, ptr %a1 + %t744 = load { ptr, i64, i64 }, ptr %a652 + call void @finch.gen.label(ptr %t743, { ptr, i64, i64 } %t744) + %t745 = load ptr, ptr %a1 + %t746 = load { ptr, i64, i64 }, ptr %a635 + call void @finch.gen.loopEnd(ptr %t745, { ptr, i64, i64 } %t746) + %t747 = load ptr, ptr %a1 + %t748 = load { ptr, i64, i64 }, ptr %a521 + %t749 = call { ptr, i64, i64 } @finch.gen.load(ptr %t747, { ptr, i64, i64 } { ptr @.str.3736, i64 17, i64 0 }, { ptr, i64, i64 } %t748) + %t750 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t749, 0 + %t751 = load %S.ast.Type, ptr %a518 + store %S.ast.Type %t751, ptr %a752 + call void @finch.copy.S_ast_Type(ptr %a753, ptr %a752) + %t754 = load %S.ast.Type, ptr %a753 + %t755 = insertvalue %S.gen.Val %t750, %S.ast.Type %t754, 1 + %t756 = insertvalue %S.gen.Val %t755, i1 true, 2 + call void @finch_str_drop(ptr %a682) + call void @finch_str_drop(ptr %a652) + call void @finch_str_drop(ptr %a649) + call void @finch_str_drop(ptr %a646) + call void @finch.drop.arr_str(ptr %a635) + call void @finch_str_drop(ptr %a631) + call void @finch_str_drop(ptr %a598) + call void @finch_str_drop(ptr %a595) + call void @finch_str_drop(ptr %a554) + call void @finch_str_drop(ptr %a521) + call void @finch.drop.S_ast_Type(ptr %a518) + call void @finch.drop.S_ast_Type(ptr %a504) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val %t756 +endif5781: + %t757 = load ptr, ptr %a1 + %t758 = load %S.ast.Node, ptr %a2 + %t759 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.3737, i64 21, i64 0 }, ptr %a761 + store { ptr, i64, i64 } %t759, ptr %a762 + call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) + %t763 = load { ptr, i64, i64 }, ptr %a760 + store { ptr, i64, i64 } %t763, ptr %a765 + store { ptr, i64, i64 } { ptr @.str.3738, i64 49, i64 0 }, ptr %a766 + call void @finch_str_concat(ptr %a764, ptr %a765, ptr %a766) + store { ptr, i64, i64 } %t763, ptr %a767 + call void @finch_str_drop(ptr %a767) + %t768 = load { ptr, i64, i64 }, ptr %a764 + call void @finch.gen.fail(ptr %t757, %S.ast.Node %t758, { ptr, i64, i64 } %t768) + store { ptr, i64, i64 } %t768, ptr %a769 + call void @finch_str_drop(ptr %a769) + call void @finch.drop.S_ast_Type(ptr %a32) + call void @finch.drop.S_ast_Type(ptr %a21) + call void @finch_str_drop(ptr %a10) + ret %S.gen.Val zeroinitializer +} + +define internal %S.gen.Val @finch.gen.patternValue(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca %S.gen.EnumDef, align 16 + %a39 = alloca %S.gen.EnumDef, align 16 + %a41 = alloca %S.gen.EnumDef, align 16 + %a46 = alloca i64, align 16 + %a49 = alloca i64, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca i64, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca %S.ast.Type, align 16 + %a118 = alloca %S.ast.Type, align 16 + %a129 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.3739, i64 4, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.from5787 +logic.from5787: + br i1 %t9, label %logic.rhs5788, label %logic.end5789 +logic.rhs5788: + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t11 = load { ptr, i64, i64 }, ptr %t10 + store { ptr, i64, i64 } %t11, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.3740, i64 3, i64 0 }, ptr %a13 + %t14 = call i32 @finch_str_eq(ptr %a12, ptr %a13) + %t15 = icmp ne i32 %t14, 0 + br label %logic.rend5790 +logic.rend5790: + br label %logic.end5789 +logic.end5789: + %t16 = phi i1 [ false, %logic.from5787 ], [ %t15, %logic.rend5790 ] + br label %logic.from5791 +logic.from5791: + br i1 %t16, label %logic.rhs5792, label %logic.end5793 +logic.rhs5792: + %t17 = load ptr, ptr %a1 + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call i64 @finch.gen.lookup(ptr %t17, { ptr, i64, i64 } %t19) + %t21 = icmp slt i64 %t20, 0 + br label %logic.rend5794 +logic.rend5794: + br label %logic.end5793 +logic.end5793: + %t22 = phi i1 [ false, %logic.from5791 ], [ %t21, %logic.rend5794 ] + br i1 %t22, label %then5795, label %endif5797 +then5795: + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic5798, label %ok5799 +panic5798: + call void @finch_panic(ptr @.str.3741, i64 3029, ptr @.str.3742) + unreachable +ok5799: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 21 + %t26 = load ptr, ptr %a1 + %t27 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 3 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 2 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = call i64 @finch.gen.findEnum(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t30) + %t32 = load { ptr, i64, i64 }, ptr %t25 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range5800, label %inrange5801 +range5800: + call void @finch_panic_index(ptr @.str.3743, i64 3029, i64 %t31, i64 %t33) + unreachable +inrange5801: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds %S.gen.EnumDef, ptr %t35, i64 %t31 + %t37 = load %S.gen.EnumDef, ptr %t36 + store %S.gen.EnumDef %t37, ptr %a38 + call void @finch.copy.S_gen_EnumDef(ptr %a39, ptr %a38) + %t40 = load %S.gen.EnumDef, ptr %a39 + store %S.gen.EnumDef %t40, ptr %a41 + %t42 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i32 0, i32 1 + %t44 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store i64 -1, ptr %a46 + %t47 = load i64, ptr %t43 + %t48 = load ptr, ptr %t42 + store i64 0, ptr %a49 + br label %find.cond5802 +find.cond5802: + %t50 = load i64, ptr %a49 + %t51 = icmp slt i64 %t50, %t47 + br i1 %t51, label %find.body5803, label %find.end5806 +find.body5803: + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i64 %t50 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t53, ptr %a54 + store { ptr, i64, i64 } %t45, ptr %a55 + %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) + %t57 = icmp ne i32 %t56, 0 + br i1 %t57, label %find.hit5804, label %find.next5805 +find.hit5804: + store i64 %t50, ptr %a46 + br label %find.end5806 +find.next5805: + %t58 = add i64 %t50, 1 + store i64 %t58, ptr %a49 + br label %find.cond5802 +find.end5806: + %t59 = load i64, ptr %a46 + store i64 %t59, ptr %a60 + %t61 = load i64, ptr %a60 + %t62 = icmp slt i64 %t61, 0 + br i1 %t62, label %then5807, label %endif5809 +then5807: + %t63 = load ptr, ptr %a1 + %t64 = load %S.ast.Node, ptr %a2 + %t65 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t66 = load { ptr, i64, i64 }, ptr %t65 + store { ptr, i64, i64 } { ptr @.str.3744, i64 1, i64 0 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.3745, i64 22, i64 0 }, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t70, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 1 + %t77 = load { ptr, i64, i64 }, ptr %t76 + store { ptr, i64, i64 } %t75, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t75, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t82, ptr %a84 + store { ptr, i64, i64 } { ptr @.str.3746, i64 10, i64 0 }, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t82, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a83 + %t88 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 2 + %t89 = getelementptr inbounds { ptr, i64, i64 }, ptr %t88, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3747, i64 2, i64 0 }, ptr %a90 + call void @finch_str_join(ptr %a91, ptr %t88, ptr %a90) + %t92 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } %t87, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t87, ptr %a96 + call void @finch_str_drop(ptr %a96) + store { ptr, i64, i64 } %t92, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.3748, i64 1, i64 0 }, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + call void @finch.gen.fail(ptr %t63, %S.ast.Node %t64, { ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch_str_drop(ptr %a104) + br label %endif5809 +endif5809: + %t105 = getelementptr inbounds %S.gen.EnumDef, ptr %a41, i32 0, i32 3 + %t106 = load i64, ptr %a60 + %t107 = load { ptr, i64, i64 }, ptr %t105 + %t108 = extractvalue { ptr, i64, i64 } %t107, 1 + %t109 = icmp uge i64 %t106, %t108 + br i1 %t109, label %range5810, label %inrange5811 +range5810: + call void @finch_panic_index(ptr @.str.3749, i64 3034, i64 %t106, i64 %t108) + unreachable +inrange5811: + %t110 = extractvalue { ptr, i64, i64 } %t107, 0 + %t111 = getelementptr inbounds i64, ptr %t110, i64 %t106 + %t112 = load i64, ptr %t111 + call void @finch_str_from_int(ptr %a113, i64 %t112) + %t114 = load { ptr, i64, i64 }, ptr %a113 + %t115 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t114, 0 + %t116 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t116, ptr %a117 + call void @finch.copy.S_ast_Type(ptr %a118, ptr %a117) + %t119 = load %S.ast.Type, ptr %a118 + %t120 = insertvalue %S.gen.Val %t115, %S.ast.Type %t119, 1 + call void @finch.drop.S_gen_EnumDef(ptr %a41) + ret %S.gen.Val %t120 +endif5797: + %t121 = load ptr, ptr %a1 + %t122 = load ptr, ptr %a1 + %t123 = load %S.ast.Node, ptr %a2 + %t124 = load %S.ast.Type, ptr %a3 + %t125 = call %S.gen.Val @finch.gen.exprWant(ptr %t122, %S.ast.Node %t123, %S.ast.Type %t124) + %t126 = load %S.ast.Type, ptr %a3 + %t127 = load %S.ast.Node, ptr %a2 + %t128 = call %S.gen.Val @finch.gen.coerce(ptr %t121, %S.gen.Val %t125, %S.ast.Type %t126, %S.ast.Node %t127, { ptr, i64, i64 } { ptr @.str.3750, i64 12, i64 0 }) + store %S.gen.Val %t125, ptr %a129 + call void @finch.drop.S_gen_Val(ptr %a129) + ret %S.gen.Val %t128 +} + +define internal void @finch.drop.S_gen_SumPat(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.SumPat, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_ast_Node(ptr %t1) + ret void +} + +define internal %S.gen.Val @finch.gen.matchGen(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a13 = alloca %S.gen.Val, align 16 + %a16 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca i64, align 16 + %a49 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca i1, align 16 + %a128 = alloca i1, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca %S.ast.Type, align 16 + %a138 = alloca i64, align 16 + %a140 = alloca i64, align 16 + %a152 = alloca %S.ast.Node, align 16 + %a153 = alloca %S.ast.Node, align 16 + %a155 = alloca %S.ast.Node, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca i64, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca i64, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca %S.gen.SumPat, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca i64, align 16 + %a210 = alloca i64, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca %S.gen.Val, align 16 + %a303 = alloca i64, align 16 + %a306 = alloca i64, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca %S.gen.Val, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca i1, align 16 + %a404 = alloca %S.gen.StructDef, align 16 + %a405 = alloca %S.gen.StructDef, align 16 + %a407 = alloca %S.gen.StructDef, align 16 + %a410 = alloca i64, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca i64, align 16 + %a453 = alloca %S.ast.Type, align 16 + %a454 = alloca %S.ast.Type, align 16 + %a456 = alloca %S.ast.Type, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca %S.ast.Node, align 16 + %a536 = alloca %S.ast.Node, align 16 + %a538 = alloca %S.ast.Node, align 16 + %a543 = alloca %S.gen.Val, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca %S.ast.Type, align 16 + %a573 = alloca %S.ast.Type, align 16 + %a576 = alloca %S.ast.Type, align 16 + %a583 = alloca %S.gen.Val, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca i64, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca i64, align 16 + %a670 = alloca i64, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a702 = alloca { ptr, i64, i64 }, align 16 + %a703 = alloca { ptr, i64, i64 }, align 16 + %a717 = alloca { ptr, i64, i64 }, align 16 + %a718 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca %S.gen.EnumDef, align 16 + %a753 = alloca %S.gen.EnumDef, align 16 + %a755 = alloca %S.gen.EnumDef, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca i64, align 16 + %a772 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca i64, align 16 + %a777 = alloca i64, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a823 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a839 = alloca { ptr, i64, i64 }, align 16 + %a840 = alloca { ptr, i64, i64 }, align 16 + %a841 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a867 = alloca { ptr, i64, i64 }, align 16 + %a868 = alloca { ptr, i64, i64 }, align 16 + %a869 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a880 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a882 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a887 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca %S.ast.Type, align 16 + %a891 = alloca %S.ast.Type, align 16 + %a898 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range5812, label %inrange5813 +range5812: + call void @finch_panic_index(ptr @.str.3751, i64 3042, i64 0, i64 %t7) + unreachable +inrange5813: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Val @finch.gen.expr(ptr %t4, %S.ast.Node %t11) + store %S.gen.Val %t12, ptr %a13 + %t14 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 1 + %t15 = load %S.ast.Type, ptr %t14 + store %S.ast.Type %t15, ptr %a16 + call void @finch.copy.S_ast_Type(ptr %a17, ptr %a16) + %t18 = load %S.ast.Type, ptr %a17 + store %S.ast.Type %t18, ptr %a19 + %t20 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.3752, i64 4, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br label %logic.from5814 +logic.from5814: + br i1 %t25, label %logic.end5816, label %logic.rhs5815 +logic.rhs5815: + %t26 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.3753, i64 4, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend5817 +logic.rend5817: + br label %logic.end5816 +logic.end5816: + %t32 = phi i1 [ true, %logic.from5814 ], [ %t31, %logic.rend5817 ] + br i1 %t32, label %then5818, label %endif5820 +then5818: + %t33 = load ptr, ptr %a1 + %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 0, %t36 + br i1 %t37, label %range5821, label %inrange5822 +range5821: + call void @finch_panic_index(ptr @.str.3754, i64 3045, i64 0, i64 %t36) + unreachable +inrange5822: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds %S.ast.Node, ptr %t38, i64 0 + %t40 = load %S.ast.Node, ptr %t39 + call void @finch.gen.fail(ptr %t33, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.3755, i64 30, i64 0 }) + br label %endif5820 +endif5820: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic5823, label %ok5824 +panic5823: + call void @finch_panic(ptr @.str.3756, i64 3047, ptr @.str.3757) + unreachable +ok5824: + %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 11 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + store i64 %t45, ptr %a46 + %t47 = load ptr, ptr %a1 + %t48 = load %S.gen.Val, ptr %a13 + call void @finch.gen.hold(ptr %t47, %S.gen.Val %t48) + store i64 -1, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.3758, i64 0, i64 0 }, ptr %a50 + %t51 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.3759, i64 6, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then5825, label %endif5827 +then5825: + %t57 = load ptr, ptr %a1 + %t58 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t59 = load { ptr, i64, i64 }, ptr %t58 + %t60 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = call i64 @finch.gen.findSum(ptr %t57, { ptr, i64, i64 } %t59, { ptr, i64, i64 } %t61) + store i64 %t62, ptr %a49 + %t63 = load i64, ptr %a49 + %t64 = icmp sge i64 %t63, 0 + br i1 %t64, label %then5828, label %endif5830 +then5828: + %t65 = load ptr, ptr %a1 + %t66 = load ptr, ptr %a1 + %t67 = load %S.ast.Type, ptr %a19 + %t68 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t66, %S.ast.Type %t67) + store { ptr, i64, i64 } { ptr @.str.3760, i64 13, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.3761, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 0 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t78, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t78, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.3762, i64 2, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = load ptr, ptr %a1 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic5831, label %ok5832 +panic5831: + call void @finch_panic(ptr @.str.3763, i64 3054, ptr @.str.3764) + unreachable +ok5832: + %t93 = getelementptr inbounds %S.gen.Gen, ptr %t91, i32 0, i32 16 + %t94 = load ptr, ptr %a1 + %t95 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t96 = load { ptr, i64, i64 }, ptr %t95 + %t97 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t98 = load { ptr, i64, i64 }, ptr %t97 + %t99 = call i64 @finch.gen.findStruct(ptr %t94, { ptr, i64, i64 } %t96, { ptr, i64, i64 } %t98) + %t100 = load { ptr, i64, i64 }, ptr %t93 + %t101 = extractvalue { ptr, i64, i64 } %t100, 1 + %t102 = icmp uge i64 %t99, %t101 + br i1 %t102, label %range5833, label %inrange5834 +range5833: + call void @finch_panic_index(ptr @.str.3765, i64 3054, i64 %t99, i64 %t101) + unreachable +inrange5834: + %t103 = extractvalue { ptr, i64, i64 } %t100, 0 + %t104 = getelementptr inbounds %S.gen.StructDef, ptr %t103, i64 %t99 + %t105 = getelementptr inbounds %S.gen.StructDef, ptr %t104, i32 0, i32 3 + %t106 = load { ptr, i64, i64 }, ptr %t105 + %t107 = extractvalue { ptr, i64, i64 } %t106, 1 + %t108 = icmp uge i64 0, %t107 + br i1 %t108, label %range5835, label %inrange5836 +range5835: + call void @finch_panic_index(ptr @.str.3766, i64 3054, i64 0, i64 %t107) + unreachable +inrange5836: + %t109 = extractvalue { ptr, i64, i64 } %t106, 0 + %t110 = getelementptr inbounds i64, ptr %t109, i64 0 + %t111 = load i64, ptr %t110 + call void @finch_str_from_int(ptr %a112, i64 %t111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t90, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t90, ptr %a117 + call void @finch_str_drop(ptr %a117) + store { ptr, i64, i64 } %t113, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a114 + %t120 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t119) + store { ptr, i64, i64 } %t119, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t120, ptr %a50 + store { ptr, i64, i64 } %t122, ptr %a123 + call void @finch_str_drop(ptr %a123) + br label %endif5830 +endif5830: + br label %endif5827 +endif5827: + %t124 = load ptr, ptr %a1 + %t125 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t124, { ptr, i64, i64 } { ptr @.str.3767, i64 9, i64 0 }) + store { ptr, i64, i64 } %t125, ptr %a126 + store i1 false, ptr %a127 + store i1 false, ptr %a128 + store { ptr, i64, i64 } zeroinitializer, ptr %a129 + store { ptr, i64, i64 } zeroinitializer, ptr %a130 + store { ptr, i64, i64 } zeroinitializer, ptr %a131 + %t132 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3768, i64 4, i64 0 }) + store %S.ast.Type %t132, ptr %a133 + %t134 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = sub i64 %t136, 1 + store i64 %t137, ptr %a138 + %t139 = load i64, ptr %a138 + store i64 0, ptr %a140 + br label %for.cond5837 +for.cond5837: + %t141 = load i64, ptr %a140 + %t142 = icmp slt i64 %t141, %t139 + br i1 %t142, label %for.body5838, label %for.end5840 +for.body5838: + %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t144 = load i64, ptr %a140 + %t145 = add i64 1, %t144 + %t146 = load { ptr, i64, i64 }, ptr %t143 + %t147 = extractvalue { ptr, i64, i64 } %t146, 1 + %t148 = icmp uge i64 %t145, %t147 + br i1 %t148, label %range5841, label %inrange5842 +range5841: + call void @finch_panic_index(ptr @.str.3769, i64 3066, i64 %t145, i64 %t147) + unreachable +inrange5842: + %t149 = extractvalue { ptr, i64, i64 } %t146, 0 + %t150 = getelementptr inbounds %S.ast.Node, ptr %t149, i64 %t145 + %t151 = load %S.ast.Node, ptr %t150 + store %S.ast.Node %t151, ptr %a152 + call void @finch.copy.S_ast_Node(ptr %a153, ptr %a152) + %t154 = load %S.ast.Node, ptr %a153 + store %S.ast.Node %t154, ptr %a155 + %t156 = load i1, ptr %a127 + br i1 %t156, label %then5843, label %endif5845 +then5843: + %t157 = load ptr, ptr %a1 + %t158 = load %S.ast.Node, ptr %a155 + call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } { ptr @.str.3770, i64 72, i64 0 }) + br label %endif5845 +endif5845: + %t159 = load ptr, ptr %a1 + %t160 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t159, { ptr, i64, i64 } { ptr @.str.3771, i64 9, i64 0 }) + store { ptr, i64, i64 } %t160, ptr %a161 + %t162 = load ptr, ptr %a1 + %t163 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t162, { ptr, i64, i64 } { ptr @.str.3772, i64 10, i64 0 }) + store { ptr, i64, i64 } %t163, ptr %a164 + store { ptr, i64, i64 } zeroinitializer, ptr %a165 + store i64 -1, ptr %a166 + %t167 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 + %t168 = load i1, ptr %t167 + br i1 %t168, label %then5846, label %else5847 +then5846: + store i1 true, ptr %a127 + %t169 = load ptr, ptr %a1 + %t170 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.br(ptr %t169, { ptr, i64, i64 } %t170) + br label %endif5848 +else5847: + %t171 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 + %t172 = load { ptr, i64, i64 }, ptr %t171 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 0, %t173 + br i1 %t174, label %range5849, label %inrange5850 +range5849: + call void @finch_panic_index(ptr @.str.3773, i64 3078, i64 0, i64 %t173) + unreachable +inrange5850: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 0 + %t177 = getelementptr inbounds %S.ast.Node, ptr %t176, i32 0, i32 9 + %t178 = load { ptr, i64, i64 }, ptr %t177 + store { ptr, i64, i64 } %t178, ptr %a179 + call void @finch.copy.arr_S_ast_Node(ptr %a180, ptr %a179) + %t181 = load { ptr, i64, i64 }, ptr %a180 + store { ptr, i64, i64 } %t181, ptr %a182 + %t183 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 + %t184 = load i64, ptr %t183 + store i64 0, ptr %a185 + br label %for.cond5851 +for.cond5851: + %t186 = load i64, ptr %a185 + %t187 = icmp slt i64 %t186, %t184 + br i1 %t187, label %for.body5852, label %for.end5854 +for.body5852: + store { ptr, i64, i64 } { ptr @.str.3774, i64 0, i64 0 }, ptr %a188 + %t189 = load i64, ptr %a49 + %t190 = icmp sge i64 %t189, 0 + br i1 %t190, label %then5855, label %else5856 +then5855: + %t191 = load ptr, ptr %a1 + %t192 = load i64, ptr %a185 + %t193 = load { ptr, i64, i64 }, ptr %a182 + %t194 = extractvalue { ptr, i64, i64 } %t193, 1 + %t195 = icmp uge i64 %t192, %t194 + br i1 %t195, label %range5858, label %inrange5859 +range5858: + call void @finch_panic_index(ptr @.str.3775, i64 3082, i64 %t192, i64 %t194) + unreachable +inrange5859: + %t196 = extractvalue { ptr, i64, i64 } %t193, 0 + %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 %t192 + %t198 = load %S.ast.Node, ptr %t197 + %t199 = load i64, ptr %a49 + %t200 = call %S.gen.SumPat @finch.gen.sumPattern(ptr %t191, %S.ast.Node %t198, i64 %t199) + store %S.gen.SumPat %t200, ptr %a201 + %t202 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t203 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t204 = load i64, ptr %t203 + call void @finch_str_from_int(ptr %a205, i64 %t204) + %t206 = load { ptr, i64, i64 }, ptr %a205 + store i64 -1, ptr %a207 + %t208 = load i64, ptr %t202 + %t209 = load ptr, ptr %a129 + store i64 0, ptr %a210 + br label %find.cond5860 +find.cond5860: + %t211 = load i64, ptr %a210 + %t212 = icmp slt i64 %t211, %t208 + br i1 %t212, label %find.body5861, label %find.end5864 +find.body5861: + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i64 %t211 + %t214 = load { ptr, i64, i64 }, ptr %t213 + store { ptr, i64, i64 } %t214, ptr %a215 + store { ptr, i64, i64 } %t206, ptr %a216 + %t217 = call i32 @finch_str_eq(ptr %a215, ptr %a216) + %t218 = icmp ne i32 %t217, 0 + br i1 %t218, label %find.hit5862, label %find.next5863 +find.hit5862: + store i64 %t211, ptr %a207 + br label %find.end5864 +find.next5863: + %t219 = add i64 %t211, 1 + store i64 %t219, ptr %a210 + br label %find.cond5860 +find.end5864: + store { ptr, i64, i64 } %t206, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load i64, ptr %a207 + %t222 = icmp sge i64 %t221, 0 + br i1 %t222, label %then5865, label %endif5867 +then5865: + %t223 = load ptr, ptr %a1 + %t224 = load i64, ptr %a185 + %t225 = load { ptr, i64, i64 }, ptr %a182 + %t226 = extractvalue { ptr, i64, i64 } %t225, 1 + %t227 = icmp uge i64 %t224, %t226 + br i1 %t227, label %range5868, label %inrange5869 +range5868: + call void @finch_panic_index(ptr @.str.3776, i64 3084, i64 %t224, i64 %t226) + unreachable +inrange5869: + %t228 = extractvalue { ptr, i64, i64 } %t225, 0 + %t229 = getelementptr inbounds %S.ast.Node, ptr %t228, i64 %t224 + %t230 = load %S.ast.Node, ptr %t229 + call void @finch.gen.fail(ptr %t223, %S.ast.Node %t230, { ptr, i64, i64 } { ptr @.str.3777, i64 49, i64 0 }) + br label %endif5867 +endif5867: + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t232 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t233 = load i64, ptr %t232 + call void @finch_str_from_int(ptr %a234, i64 %t233) + %t235 = load { ptr, i64, i64 }, ptr %a234 + %t236 = load i64, ptr %t231 + %t237 = add i64 %t236, 1 + call void @finch_arr_reserve(ptr %a129, i64 %t237, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t238 = load ptr, ptr %a129 + %t239 = getelementptr inbounds { ptr, i64, i64 }, ptr %t238, i64 %t236 + store { ptr, i64, i64 } %t235, ptr %t239 + store i64 %t237, ptr %t231 + %t240 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i32 0, i32 1 + %t242 = load i64, ptr %t241 + %t243 = icmp sgt i64 %t242, 0 + br i1 %t243, label %then5870, label %endif5872 +then5870: + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 + %t245 = load i64, ptr %t244 + %t246 = icmp sgt i64 %t245, 1 + br i1 %t246, label %then5873, label %endif5875 +then5873: + %t247 = load ptr, ptr %a1 + %t248 = load i64, ptr %a185 + %t249 = load { ptr, i64, i64 }, ptr %a182 + %t250 = extractvalue { ptr, i64, i64 } %t249, 1 + %t251 = icmp uge i64 %t248, %t250 + br i1 %t251, label %range5876, label %inrange5877 +range5876: + call void @finch_panic_index(ptr @.str.3778, i64 3089, i64 %t248, i64 %t250) + unreachable +inrange5877: + %t252 = extractvalue { ptr, i64, i64 } %t249, 0 + %t253 = getelementptr inbounds %S.ast.Node, ptr %t252, i64 %t248 + %t254 = load %S.ast.Node, ptr %t253 + call void @finch.gen.fail(ptr %t247, %S.ast.Node %t254, { ptr, i64, i64 } { ptr @.str.3779, i64 52, i64 0 }) + br label %endif5875 +endif5875: + %t255 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 1 + %t256 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch.copy.arr_S_ast_Node(ptr %a258, ptr %a257) + %t259 = load { ptr, i64, i64 }, ptr %a258 + %t260 = load { ptr, i64, i64 }, ptr %a165 + store { ptr, i64, i64 } %t259, ptr %a165 + store { ptr, i64, i64 } %t260, ptr %a261 + call void @finch.drop.arr_S_ast_Node(ptr %a261) + %t262 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t263 = load i64, ptr %t262 + store i64 %t263, ptr %a166 + br label %endif5872 +endif5872: + %t264 = load ptr, ptr %a1 + %t265 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.3780, i64 12, i64 0 }, ptr %a267 + store { ptr, i64, i64 } %t265, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + %t269 = load { ptr, i64, i64 }, ptr %a266 + store { ptr, i64, i64 } %t269, ptr %a271 + store { ptr, i64, i64 } { ptr @.str.3781, i64 2, i64 0 }, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t269, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + %t275 = getelementptr inbounds %S.gen.SumPat, ptr %a201, i32 0, i32 0 + %t276 = load i64, ptr %t275 + call void @finch_str_from_int(ptr %a277, i64 %t276) + %t278 = load { ptr, i64, i64 }, ptr %a277 + store { ptr, i64, i64 } %t274, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t274, ptr %a282 + call void @finch_str_drop(ptr %a282) + store { ptr, i64, i64 } %t278, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a279 + %t285 = call { ptr, i64, i64 } @finch.gen.op(ptr %t264, { ptr, i64, i64 } %t284) + store { ptr, i64, i64 } %t284, ptr %a286 + call void @finch_str_drop(ptr %a286) + %t287 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t285, ptr %a188 + store { ptr, i64, i64 } %t287, ptr %a288 + call void @finch_str_drop(ptr %a288) + call void @finch.drop.S_gen_SumPat(ptr %a201) + br label %endif5857 +else5856: + %t289 = load ptr, ptr %a1 + %t290 = load i64, ptr %a185 + %t291 = load { ptr, i64, i64 }, ptr %a182 + %t292 = extractvalue { ptr, i64, i64 } %t291, 1 + %t293 = icmp uge i64 %t290, %t292 + br i1 %t293, label %range5878, label %inrange5879 +range5878: + call void @finch_panic_index(ptr @.str.3782, i64 3096, i64 %t290, i64 %t292) + unreachable +inrange5879: + %t294 = extractvalue { ptr, i64, i64 } %t291, 0 + %t295 = getelementptr inbounds %S.ast.Node, ptr %t294, i64 %t290 + %t296 = load %S.ast.Node, ptr %t295 + %t297 = load %S.ast.Type, ptr %a19 + %t298 = call %S.gen.Val @finch.gen.patternValue(ptr %t289, %S.ast.Node %t296, %S.ast.Type %t297) + store %S.gen.Val %t298, ptr %a299 + %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t301 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store i64 -1, ptr %a303 + %t304 = load i64, ptr %t300 + %t305 = load ptr, ptr %a129 + store i64 0, ptr %a306 + br label %find.cond5880 +find.cond5880: + %t307 = load i64, ptr %a306 + %t308 = icmp slt i64 %t307, %t304 + br i1 %t308, label %find.body5881, label %find.end5884 +find.body5881: + %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t305, i64 %t307 + %t310 = load { ptr, i64, i64 }, ptr %t309 + store { ptr, i64, i64 } %t310, ptr %a311 + store { ptr, i64, i64 } %t302, ptr %a312 + %t313 = call i32 @finch_str_eq(ptr %a311, ptr %a312) + %t314 = icmp ne i32 %t313, 0 + br i1 %t314, label %find.hit5882, label %find.next5883 +find.hit5882: + store i64 %t307, ptr %a303 + br label %find.end5884 +find.next5883: + %t315 = add i64 %t307, 1 + store i64 %t315, ptr %a306 + br label %find.cond5880 +find.end5884: + %t316 = load i64, ptr %a303 + %t317 = icmp sge i64 %t316, 0 + br label %logic.from5885 +logic.from5885: + br i1 %t317, label %logic.rhs5886, label %logic.end5887 +logic.rhs5886: + %t318 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t319 = load { ptr, i64, i64 }, ptr %t318 + store { ptr, i64, i64 } %t319, ptr %a320 + store { ptr, i64, i64 } { ptr @.str.3783, i64 4, i64 0 }, ptr %a321 + %t322 = call i32 @finch_str_eq(ptr %a320, ptr %a321) + %t323 = icmp ne i32 %t322, 0 + br label %logic.rend5888 +logic.rend5888: + br label %logic.end5887 +logic.end5887: + %t324 = phi i1 [ false, %logic.from5885 ], [ %t323, %logic.rend5888 ] + br i1 %t324, label %then5889, label %endif5891 +then5889: + %t325 = load ptr, ptr %a1 + %t326 = load i64, ptr %a185 + %t327 = load { ptr, i64, i64 }, ptr %a182 + %t328 = extractvalue { ptr, i64, i64 } %t327, 1 + %t329 = icmp uge i64 %t326, %t328 + br i1 %t329, label %range5892, label %inrange5893 +range5892: + call void @finch_panic_index(ptr @.str.3784, i64 3098, i64 %t326, i64 %t328) + unreachable +inrange5893: + %t330 = extractvalue { ptr, i64, i64 } %t327, 0 + %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 + %t332 = load %S.ast.Node, ptr %t331 + call void @finch.gen.fail(ptr %t325, %S.ast.Node %t332, { ptr, i64, i64 } { ptr @.str.3785, i64 49, i64 0 }) + br label %endif5891 +endif5891: + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t334 = getelementptr inbounds %S.gen.Val, ptr %a299, i32 0, i32 0 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t335, ptr %a336 + call void @finch_str_copy(ptr %a337, ptr %a336) + %t338 = load { ptr, i64, i64 }, ptr %a337 + %t339 = load i64, ptr %t333 + %t340 = add i64 %t339, 1 + call void @finch_arr_reserve(ptr %a129, i64 %t340, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t341 = load ptr, ptr %a129 + %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 %t339 + store { ptr, i64, i64 } %t338, ptr %t342 + store i64 %t340, ptr %t333 + %t343 = load ptr, ptr %a1 + %t344 = load %S.gen.Val, ptr %a13 + %t345 = load %S.gen.Val, ptr %a299 + %t346 = load i64, ptr %a185 + %t347 = load { ptr, i64, i64 }, ptr %a182 + %t348 = extractvalue { ptr, i64, i64 } %t347, 1 + %t349 = icmp uge i64 %t346, %t348 + br i1 %t349, label %range5894, label %inrange5895 +range5894: + call void @finch_panic_index(ptr @.str.3787, i64 3101, i64 %t346, i64 %t348) + unreachable +inrange5895: + %t350 = extractvalue { ptr, i64, i64 } %t347, 0 + %t351 = getelementptr inbounds %S.ast.Node, ptr %t350, i64 %t346 + %t352 = load %S.ast.Node, ptr %t351 + %t353 = call %S.gen.Val @finch.gen.compare(ptr %t343, { ptr, i64, i64 } { ptr @.str.3786, i64 2, i64 0 }, %S.gen.Val %t344, %S.gen.Val %t345, %S.ast.Node %t352) + %t354 = extractvalue %S.gen.Val %t353, 0 + store { ptr, i64, i64 } %t354, ptr %a355 + call void @finch_str_copy(ptr %a356, ptr %a355) + %t357 = load { ptr, i64, i64 }, ptr %a356 + store %S.gen.Val %t353, ptr %a358 + call void @finch.drop.S_gen_Val(ptr %a358) + %t359 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t357, ptr %a188 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + call void @finch.drop.S_gen_Val(ptr %a299) + br label %endif5857 +endif5857: + %t361 = load i64, ptr %a185 + %t362 = getelementptr inbounds { ptr, i64, i64 }, ptr %a182, i32 0, i32 1 + %t363 = load i64, ptr %t362 + %t364 = sub i64 %t363, 1 + %t365 = icmp eq i64 %t361, %t364 + br i1 %t365, label %then5896, label %else5897 +then5896: + %t366 = load ptr, ptr %a1 + %t367 = load { ptr, i64, i64 }, ptr %a188 + %t368 = load { ptr, i64, i64 }, ptr %a161 + %t369 = load { ptr, i64, i64 }, ptr %a164 + call void @finch.gen.condBr(ptr %t366, { ptr, i64, i64 } %t367, { ptr, i64, i64 } %t368, { ptr, i64, i64 } %t369) + br label %endif5898 +else5897: + %t370 = load ptr, ptr %a1 + %t371 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t370, { ptr, i64, i64 } { ptr @.str.3788, i64 8, i64 0 }) + store { ptr, i64, i64 } %t371, ptr %a372 + %t373 = load ptr, ptr %a1 + %t374 = load { ptr, i64, i64 }, ptr %a188 + %t375 = load { ptr, i64, i64 }, ptr %a161 + %t376 = load { ptr, i64, i64 }, ptr %a372 + call void @finch.gen.condBr(ptr %t373, { ptr, i64, i64 } %t374, { ptr, i64, i64 } %t375, { ptr, i64, i64 } %t376) + %t377 = load ptr, ptr %a1 + %t378 = load { ptr, i64, i64 }, ptr %a372 + call void @finch.gen.label(ptr %t377, { ptr, i64, i64 } %t378) + call void @finch_str_drop(ptr %a372) + br label %endif5898 +endif5898: + call void @finch_str_drop(ptr %a188) + br label %for.step5853 +for.step5853: + %t379 = load i64, ptr %a185 + %t380 = add i64 %t379, 1 + store i64 %t380, ptr %a185 + br label %for.cond5851 +for.end5854: + call void @finch.drop.arr_S_ast_Node(ptr %a182) + br label %endif5848 +endif5848: + %t381 = load ptr, ptr %a1 + %t382 = load { ptr, i64, i64 }, ptr %a161 + call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) + %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 + %t384 = load i64, ptr %t383 + %t385 = icmp sgt i64 %t384, 0 + store i1 %t385, ptr %a386 + %t387 = load i1, ptr %a386 + br i1 %t387, label %then5899, label %endif5901 +then5899: + %t388 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t388) + %t389 = load ptr, ptr %a1 + %t390 = icmp eq ptr %t389, null + br i1 %t390, label %panic5902, label %ok5903 +panic5902: + call void @finch_panic(ptr @.str.3789, i64 3116, ptr @.str.3790) + unreachable +ok5903: + %t391 = getelementptr inbounds %S.gen.Gen, ptr %t389, i32 0, i32 16 + %t392 = load ptr, ptr %a1 + %t393 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t394 = load { ptr, i64, i64 }, ptr %t393 + %t395 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t396 = load { ptr, i64, i64 }, ptr %t395 + %t397 = call i64 @finch.gen.findStruct(ptr %t392, { ptr, i64, i64 } %t394, { ptr, i64, i64 } %t396) + %t398 = load { ptr, i64, i64 }, ptr %t391 + %t399 = extractvalue { ptr, i64, i64 } %t398, 1 + %t400 = icmp uge i64 %t397, %t399 + br i1 %t400, label %range5904, label %inrange5905 +range5904: + call void @finch_panic_index(ptr @.str.3791, i64 3116, i64 %t397, i64 %t399) + unreachable +inrange5905: + %t401 = extractvalue { ptr, i64, i64 } %t398, 0 + %t402 = getelementptr inbounds %S.gen.StructDef, ptr %t401, i64 %t397 + %t403 = load %S.gen.StructDef, ptr %t402 + store %S.gen.StructDef %t403, ptr %a404 + call void @finch.copy.S_gen_StructDef(ptr %a405, ptr %a404) + %t406 = load %S.gen.StructDef, ptr %a405 + store %S.gen.StructDef %t406, ptr %a407 + %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %a165, i32 0, i32 1 + %t409 = load i64, ptr %t408 + store i64 0, ptr %a410 + br label %for.cond5906 +for.cond5906: + %t411 = load i64, ptr %a410 + %t412 = icmp slt i64 %t411, %t409 + br i1 %t412, label %for.body5907, label %for.end5909 +for.body5907: + %t413 = load i64, ptr %a410 + %t414 = load { ptr, i64, i64 }, ptr %a165 + %t415 = extractvalue { ptr, i64, i64 } %t414, 1 + %t416 = icmp uge i64 %t413, %t415 + br i1 %t416, label %range5910, label %inrange5911 +range5910: + call void @finch_panic_index(ptr @.str.3792, i64 3118, i64 %t413, i64 %t415) + unreachable +inrange5911: + %t417 = extractvalue { ptr, i64, i64 } %t414, 0 + %t418 = getelementptr inbounds %S.ast.Node, ptr %t417, i64 %t413 + %t419 = getelementptr inbounds %S.ast.Node, ptr %t418, i32 0, i32 1 + %t420 = load { ptr, i64, i64 }, ptr %t419 + store { ptr, i64, i64 } %t420, ptr %a421 + store { ptr, i64, i64 } { ptr @.str.3793, i64 1, i64 0 }, ptr %a422 + %t423 = call i32 @finch_str_eq(ptr %a421, ptr %a422) + %t424 = icmp ne i32 %t423, 0 + br i1 %t424, label %then5912, label %endif5914 +then5912: + br label %for.step5908 +endif5914: + %t425 = load ptr, ptr %a1 + %t426 = icmp eq ptr %t425, null + br i1 %t426, label %panic5915, label %ok5916 +panic5915: + call void @finch_panic(ptr @.str.3794, i64 3121, ptr @.str.3795) + unreachable +ok5916: + %t427 = getelementptr inbounds %S.gen.Gen, ptr %t425, i32 0, i32 22 + %t428 = load i64, ptr %a49 + %t429 = load { ptr, i64, i64 }, ptr %t427 + %t430 = extractvalue { ptr, i64, i64 } %t429, 1 + %t431 = icmp uge i64 %t428, %t430 + br i1 %t431, label %range5917, label %inrange5918 +range5917: + call void @finch_panic_index(ptr @.str.3796, i64 3121, i64 %t428, i64 %t430) + unreachable +inrange5918: + %t432 = extractvalue { ptr, i64, i64 } %t429, 0 + %t433 = getelementptr inbounds %S.gen.SumDef, ptr %t432, i64 %t428 + %t434 = getelementptr inbounds %S.gen.SumDef, ptr %t433, i32 0, i32 4 + %t435 = load i64, ptr %a166 + %t436 = load { ptr, i64, i64 }, ptr %t434 + %t437 = extractvalue { ptr, i64, i64 } %t436, 1 + %t438 = icmp uge i64 %t435, %t437 + br i1 %t438, label %range5919, label %inrange5920 +range5919: + call void @finch_panic_index(ptr @.str.3797, i64 3121, i64 %t435, i64 %t437) + unreachable +inrange5920: + %t439 = extractvalue { ptr, i64, i64 } %t436, 0 + %t440 = getelementptr inbounds i64, ptr %t439, i64 %t435 + %t441 = load i64, ptr %t440 + %t442 = load i64, ptr %a410 + %t443 = add i64 %t441, %t442 + store i64 %t443, ptr %a444 + %t445 = getelementptr inbounds %S.gen.StructDef, ptr %a407, i32 0, i32 12 + %t446 = load i64, ptr %a444 + %t447 = load { ptr, i64, i64 }, ptr %t445 + %t448 = extractvalue { ptr, i64, i64 } %t447, 1 + %t449 = icmp uge i64 %t446, %t448 + br i1 %t449, label %range5921, label %inrange5922 +range5921: + call void @finch_panic_index(ptr @.str.3798, i64 3122, i64 %t446, i64 %t448) + unreachable +inrange5922: + %t450 = extractvalue { ptr, i64, i64 } %t447, 0 + %t451 = getelementptr inbounds %S.ast.Type, ptr %t450, i64 %t446 + %t452 = load %S.ast.Type, ptr %t451 + store %S.ast.Type %t452, ptr %a453 + call void @finch.copy.S_ast_Type(ptr %a454, ptr %a453) + %t455 = load %S.ast.Type, ptr %a454 + store %S.ast.Type %t455, ptr %a456 + %t457 = load ptr, ptr %a1 + %t458 = load ptr, ptr %a1 + %t459 = load %S.ast.Type, ptr %a19 + %t460 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t458, %S.ast.Type %t459) + store { ptr, i64, i64 } { ptr @.str.3799, i64 13, i64 0 }, ptr %a462 + store { ptr, i64, i64 } %t460, ptr %a463 + call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) + store { ptr, i64, i64 } %t460, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } %t465, ptr %a467 + store { ptr, i64, i64 } { ptr @.str.3800, i64 1, i64 0 }, ptr %a468 + call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) + store { ptr, i64, i64 } %t465, ptr %a469 + call void @finch_str_drop(ptr %a469) + %t470 = load { ptr, i64, i64 }, ptr %a466 + %t471 = getelementptr inbounds %S.gen.Val, ptr %a13, i32 0, i32 0 + %t472 = load { ptr, i64, i64 }, ptr %t471 + store { ptr, i64, i64 } %t470, ptr %a474 + store { ptr, i64, i64 } %t472, ptr %a475 + call void @finch_str_concat(ptr %a473, ptr %a474, ptr %a475) + store { ptr, i64, i64 } %t470, ptr %a476 + call void @finch_str_drop(ptr %a476) + %t477 = load { ptr, i64, i64 }, ptr %a473 + store { ptr, i64, i64 } %t477, ptr %a479 + store { ptr, i64, i64 } { ptr @.str.3801, i64 2, i64 0 }, ptr %a480 + call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480) + store { ptr, i64, i64 } %t477, ptr %a481 + call void @finch_str_drop(ptr %a481) + %t482 = load { ptr, i64, i64 }, ptr %a478 + %t483 = getelementptr inbounds %S.gen.StructDef, ptr %a407, i32 0, i32 3 + %t484 = load i64, ptr %a444 + %t485 = load { ptr, i64, i64 }, ptr %t483 + %t486 = extractvalue { ptr, i64, i64 } %t485, 1 + %t487 = icmp uge i64 %t484, %t486 + br i1 %t487, label %range5923, label %inrange5924 +range5923: + call void @finch_panic_index(ptr @.str.3802, i64 3123, i64 %t484, i64 %t486) + unreachable +inrange5924: + %t488 = extractvalue { ptr, i64, i64 } %t485, 0 + %t489 = getelementptr inbounds i64, ptr %t488, i64 %t484 + %t490 = load i64, ptr %t489 + call void @finch_str_from_int(ptr %a491, i64 %t490) + %t492 = load { ptr, i64, i64 }, ptr %a491 + store { ptr, i64, i64 } %t482, ptr %a494 + store { ptr, i64, i64 } %t492, ptr %a495 + call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) + store { ptr, i64, i64 } %t482, ptr %a496 + call void @finch_str_drop(ptr %a496) + store { ptr, i64, i64 } %t492, ptr %a497 + call void @finch_str_drop(ptr %a497) + %t498 = load { ptr, i64, i64 }, ptr %a493 + %t499 = call { ptr, i64, i64 } @finch.gen.op(ptr %t457, { ptr, i64, i64 } %t498) + store { ptr, i64, i64 } %t498, ptr %a500 + call void @finch_str_drop(ptr %a500) + store { ptr, i64, i64 } %t499, ptr %a501 + %t502 = load ptr, ptr %a1 + %t503 = load i64, ptr %a410 + %t504 = load { ptr, i64, i64 }, ptr %a165 + %t505 = extractvalue { ptr, i64, i64 } %t504, 1 + %t506 = icmp uge i64 %t503, %t505 + br i1 %t506, label %range5925, label %inrange5926 +range5925: + call void @finch_panic_index(ptr @.str.3803, i64 3124, i64 %t503, i64 %t505) + unreachable +inrange5926: + %t507 = extractvalue { ptr, i64, i64 } %t504, 0 + %t508 = getelementptr inbounds %S.ast.Node, ptr %t507, i64 %t503 + %t509 = load %S.ast.Node, ptr %t508 + %t510 = load i64, ptr %a410 + %t511 = load { ptr, i64, i64 }, ptr %a165 + %t512 = extractvalue { ptr, i64, i64 } %t511, 1 + %t513 = icmp uge i64 %t510, %t512 + br i1 %t513, label %range5927, label %inrange5928 +range5927: + call void @finch_panic_index(ptr @.str.3804, i64 3124, i64 %t510, i64 %t512) + unreachable +inrange5928: + %t514 = extractvalue { ptr, i64, i64 } %t511, 0 + %t515 = getelementptr inbounds %S.ast.Node, ptr %t514, i64 %t510 + %t516 = getelementptr inbounds %S.ast.Node, ptr %t515, i32 0, i32 1 + %t517 = load { ptr, i64, i64 }, ptr %t516 + %t518 = load %S.ast.Type, ptr %a456 + %t519 = load ptr, ptr %a1 + %t520 = load { ptr, i64, i64 }, ptr %a501 + %t521 = load %S.ast.Type, ptr %a456 + %t522 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t519, { ptr, i64, i64 } %t520, %S.ast.Type %t521) + %t523 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t502, %S.ast.Node %t509, { ptr, i64, i64 } %t517, %S.ast.Type %t518, { ptr, i64, i64 } %t522, i1 true, i1 true) + store { ptr, i64, i64 } %t522, ptr %a524 + call void @finch_str_drop(ptr %a524) + store { ptr, i64, i64 } %t523, ptr %a525 + call void @finch_str_drop(ptr %a525) + call void @finch_str_drop(ptr %a501) + call void @finch.drop.S_ast_Type(ptr %a456) + br label %for.step5908 +for.step5908: + %t526 = load i64, ptr %a410 + %t527 = add i64 %t526, 1 + store i64 %t527, ptr %a410 + br label %for.cond5906 +for.end5909: + call void @finch.drop.S_gen_StructDef(ptr %a407) + br label %endif5901 +endif5901: + %t528 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 9 + %t529 = load { ptr, i64, i64 }, ptr %t528 + %t530 = extractvalue { ptr, i64, i64 } %t529, 1 + %t531 = icmp uge i64 1, %t530 + br i1 %t531, label %range5929, label %inrange5930 +range5929: + call void @finch_panic_index(ptr @.str.3805, i64 3127, i64 1, i64 %t530) + unreachable +inrange5930: + %t532 = extractvalue { ptr, i64, i64 } %t529, 0 + %t533 = getelementptr inbounds %S.ast.Node, ptr %t532, i64 1 + %t534 = load %S.ast.Node, ptr %t533 + store %S.ast.Node %t534, ptr %a535 + call void @finch.copy.S_ast_Node(ptr %a536, ptr %a535) + %t537 = load %S.ast.Node, ptr %a536 + store %S.ast.Node %t537, ptr %a538 + %t539 = load i1, ptr %a3 + br i1 %t539, label %then5931, label %else5932 +then5931: + %t540 = load ptr, ptr %a1 + %t541 = load %S.ast.Node, ptr %a538 + %t542 = call %S.gen.Val @finch.gen.expr(ptr %t540, %S.ast.Node %t541) + store %S.gen.Val %t542, ptr %a543 + %t544 = load i64, ptr %a140 + %t545 = icmp eq i64 %t544, 0 + br label %logic.from5934 +logic.from5934: + br i1 %t545, label %logic.end5936, label %logic.rhs5935 +logic.rhs5935: + %t546 = getelementptr inbounds %S.ast.Type, ptr %a133, i32 0, i32 0 + %t547 = load { ptr, i64, i64 }, ptr %t546 + store { ptr, i64, i64 } %t547, ptr %a548 + store { ptr, i64, i64 } { ptr @.str.3806, i64 4, i64 0 }, ptr %a549 + %t550 = call i32 @finch_str_eq(ptr %a548, ptr %a549) + %t551 = icmp ne i32 %t550, 0 + br label %logic.rend5937 +logic.rend5937: + br label %logic.end5936 +logic.end5936: + %t552 = phi i1 [ true, %logic.from5934 ], [ %t551, %logic.rend5937 ] + br i1 %t552, label %then5938, label %endif5940 +then5938: + %t553 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 + %t554 = getelementptr inbounds %S.ast.Type, ptr %t553, i32 0, i32 0 + %t555 = load { ptr, i64, i64 }, ptr %t554 + store { ptr, i64, i64 } %t555, ptr %a556 + store { ptr, i64, i64 } { ptr @.str.3807, i64 4, i64 0 }, ptr %a557 + %t558 = call i32 @finch_str_eq(ptr %a556, ptr %a557) + %t559 = icmp ne i32 %t558, 0 + br label %logic.from5941 +logic.from5941: + br i1 %t559, label %logic.end5943, label %logic.rhs5942 +logic.rhs5942: + %t560 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 + %t561 = getelementptr inbounds %S.ast.Type, ptr %t560, i32 0, i32 0 + %t562 = load { ptr, i64, i64 }, ptr %t561 + store { ptr, i64, i64 } %t562, ptr %a563 + store { ptr, i64, i64 } { ptr @.str.3808, i64 4, i64 0 }, ptr %a564 + %t565 = call i32 @finch_str_eq(ptr %a563, ptr %a564) + %t566 = icmp ne i32 %t565, 0 + br label %logic.rend5944 +logic.rend5944: + br label %logic.end5943 +logic.end5943: + %t567 = phi i1 [ true, %logic.from5941 ], [ %t566, %logic.rend5944 ] + br i1 %t567, label %then5945, label %endif5947 +then5945: + %t568 = load ptr, ptr %a1 + %t569 = load %S.ast.Node, ptr %a538 + call void @finch.gen.fail(ptr %t568, %S.ast.Node %t569, { ptr, i64, i64 } { ptr @.str.3809, i64 52, i64 0 }) + br label %endif5947 +endif5947: + %t570 = getelementptr inbounds %S.gen.Val, ptr %a543, i32 0, i32 1 + %t571 = load %S.ast.Type, ptr %t570 + store %S.ast.Type %t571, ptr %a572 + call void @finch.copy.S_ast_Type(ptr %a573, ptr %a572) + %t574 = load %S.ast.Type, ptr %a573 + %t575 = load %S.ast.Type, ptr %a133 + store %S.ast.Type %t574, ptr %a133 + store %S.ast.Type %t575, ptr %a576 + call void @finch.drop.S_ast_Type(ptr %a576) + br label %endif5940 +endif5940: + %t577 = load ptr, ptr %a1 + %t578 = load %S.gen.Val, ptr %a543 + %t579 = load %S.ast.Type, ptr %a133 + %t580 = load %S.ast.Node, ptr %a538 + %t581 = call %S.gen.Val @finch.gen.coerce(ptr %t577, %S.gen.Val %t578, %S.ast.Type %t579, %S.ast.Node %t580, { ptr, i64, i64 } { ptr @.str.3810, i64 57, i64 0 }) + %t582 = load %S.gen.Val, ptr %a543 + store %S.gen.Val %t581, ptr %a543 + store %S.gen.Val %t582, ptr %a583 + call void @finch.drop.S_gen_Val(ptr %a583) + %t584 = load ptr, ptr %a1 + %t585 = load %S.gen.Val, ptr %a543 + %t586 = call { ptr, i64, i64 } @finch.gen.own(ptr %t584, %S.gen.Val %t585) + store { ptr, i64, i64 } %t586, ptr %a587 + %t588 = load i1, ptr %a386 + br i1 %t588, label %then5948, label %endif5950 +then5948: + %t589 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t589) + br label %endif5950 +endif5950: + %t590 = load ptr, ptr %a1 + %t591 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t590, { ptr, i64, i64 } { ptr @.str.3811, i64 10, i64 0 }) + store { ptr, i64, i64 } %t591, ptr %a592 + %t593 = load ptr, ptr %a1 + %t594 = load { ptr, i64, i64 }, ptr %a592 + call void @finch.gen.br(ptr %t593, { ptr, i64, i64 } %t594) + %t595 = load ptr, ptr %a1 + %t596 = load { ptr, i64, i64 }, ptr %a592 + call void @finch.gen.label(ptr %t595, { ptr, i64, i64 } %t596) + %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %a130, i32 0, i32 1 + %t598 = load { ptr, i64, i64 }, ptr %a587 + store { ptr, i64, i64 } %t598, ptr %a599 + call void @finch_str_copy(ptr %a600, ptr %a599) + %t601 = load { ptr, i64, i64 }, ptr %a600 + %t602 = load i64, ptr %t597 + %t603 = add i64 %t602, 1 + call void @finch_arr_reserve(ptr %a130, i64 %t603, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t604 = load ptr, ptr %a130 + %t605 = getelementptr inbounds { ptr, i64, i64 }, ptr %t604, i64 %t602 + store { ptr, i64, i64 } %t601, ptr %t605 + store i64 %t603, ptr %t597 + %t606 = getelementptr inbounds { ptr, i64, i64 }, ptr %a131, i32 0, i32 1 + %t607 = load { ptr, i64, i64 }, ptr %a592 + store { ptr, i64, i64 } %t607, ptr %a608 + call void @finch_str_copy(ptr %a609, ptr %a608) + %t610 = load { ptr, i64, i64 }, ptr %a609 + %t611 = load i64, ptr %t606 + %t612 = add i64 %t611, 1 + call void @finch_arr_reserve(ptr %a131, i64 %t612, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t613 = load ptr, ptr %a131 + %t614 = getelementptr inbounds { ptr, i64, i64 }, ptr %t613, i64 %t611 + store { ptr, i64, i64 } %t610, ptr %t614 + store i64 %t612, ptr %t606 + %t615 = load ptr, ptr %a1 + %t616 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.br(ptr %t615, { ptr, i64, i64 } %t616) + store i1 true, ptr %a128 + call void @finch_str_drop(ptr %a592) + call void @finch_str_drop(ptr %a587) + call void @finch.drop.S_gen_Val(ptr %a543) + br label %endif5933 +else5932: + %t617 = getelementptr inbounds %S.ast.Node, ptr %a538, i32 0, i32 0 + %t618 = load { ptr, i64, i64 }, ptr %t617 + store { ptr, i64, i64 } %t618, ptr %a619 + store { ptr, i64, i64 } { ptr @.str.3812, i64 5, i64 0 }, ptr %a620 + %t621 = call i32 @finch_str_eq(ptr %a619, ptr %a620) + %t622 = icmp ne i32 %t621, 0 + br i1 %t622, label %then5951, label %else5952 +then5951: + %t623 = load ptr, ptr %a1 + %t624 = load %S.ast.Node, ptr %a538 + call void @finch.gen.block(ptr %t623, %S.ast.Node %t624, i1 true) + br label %endif5953 +else5952: + %t625 = load ptr, ptr %a1 + %t626 = load %S.ast.Node, ptr %a538 + call void @finch.gen.stmt(ptr %t625, %S.ast.Node %t626) + br label %endif5953 +endif5953: + %t627 = load ptr, ptr %a1 + %t628 = icmp eq ptr %t627, null + br i1 %t628, label %panic5954, label %ok5955 +panic5954: + call void @finch_panic(ptr @.str.3813, i64 3154, ptr @.str.3814) + unreachable +ok5955: + %t629 = getelementptr inbounds %S.gen.Gen, ptr %t627, i32 0, i32 9 + %t630 = load i1, ptr %t629 + %t631 = xor i1 %t630, true + br i1 %t631, label %then5956, label %endif5958 +then5956: + store i1 true, ptr %a128 + br label %endif5958 +endif5958: + %t632 = load i1, ptr %a386 + br i1 %t632, label %then5959, label %endif5961 +then5959: + %t633 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t633) + br label %endif5961 +endif5961: + %t634 = load ptr, ptr %a1 + %t635 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.br(ptr %t634, { ptr, i64, i64 } %t635) + br label %endif5933 +endif5933: + %t636 = getelementptr inbounds %S.ast.Node, ptr %a155, i32 0, i32 6 + %t637 = load i1, ptr %t636 + %t638 = xor i1 %t637, true + br i1 %t638, label %then5962, label %endif5964 +then5962: + %t639 = load ptr, ptr %a1 + %t640 = load { ptr, i64, i64 }, ptr %a164 + call void @finch.gen.label(ptr %t639, { ptr, i64, i64 } %t640) + br label %endif5964 +endif5964: + call void @finch.drop.S_ast_Node(ptr %a538) + call void @finch.drop.arr_S_ast_Node(ptr %a165) + call void @finch_str_drop(ptr %a164) + call void @finch_str_drop(ptr %a161) + call void @finch.drop.S_ast_Node(ptr %a155) + br label %for.step5839 +for.step5839: + %t641 = load i64, ptr %a140 + %t642 = add i64 %t641, 1 + store i64 %t642, ptr %a140 + br label %for.cond5837 +for.end5840: + %t643 = load i1, ptr %a127 + %t644 = xor i1 %t643, true + br i1 %t644, label %then5965, label %endif5967 +then5965: + %t645 = load i64, ptr %a49 + %t646 = icmp sge i64 %t645, 0 + br i1 %t646, label %then5968, label %else5969 +then5968: + store { ptr, i64, i64 } zeroinitializer, ptr %a647 + %t648 = load ptr, ptr %a1 + %t649 = icmp eq ptr %t648, null + br i1 %t649, label %panic5971, label %ok5972 +panic5971: + call void @finch_panic(ptr @.str.3815, i64 3169, ptr @.str.3816) + unreachable +ok5972: + %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 22 + %t651 = load i64, ptr %a49 + %t652 = load { ptr, i64, i64 }, ptr %t650 + %t653 = extractvalue { ptr, i64, i64 } %t652, 1 + %t654 = icmp uge i64 %t651, %t653 + br i1 %t654, label %range5973, label %inrange5974 +range5973: + call void @finch_panic_index(ptr @.str.3817, i64 3169, i64 %t651, i64 %t653) + unreachable +inrange5974: + %t655 = extractvalue { ptr, i64, i64 } %t652, 0 + %t656 = getelementptr inbounds %S.gen.SumDef, ptr %t655, i64 %t651 + %t657 = getelementptr inbounds %S.gen.SumDef, ptr %t656, i32 0, i32 2 + %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i32 0, i32 1 + %t659 = load i64, ptr %t658 + store i64 0, ptr %a660 + br label %for.cond5975 +for.cond5975: + %t661 = load i64, ptr %a660 + %t662 = icmp slt i64 %t661, %t659 + br i1 %t662, label %for.body5976, label %for.end5978 +for.body5976: + %t663 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t664 = load i64, ptr %a660 + call void @finch_str_from_int(ptr %a665, i64 %t664) + %t666 = load { ptr, i64, i64 }, ptr %a665 + store i64 -1, ptr %a667 + %t668 = load i64, ptr %t663 + %t669 = load ptr, ptr %a129 + store i64 0, ptr %a670 + br label %find.cond5979 +find.cond5979: + %t671 = load i64, ptr %a670 + %t672 = icmp slt i64 %t671, %t668 + br i1 %t672, label %find.body5980, label %find.end5983 +find.body5980: + %t673 = getelementptr inbounds { ptr, i64, i64 }, ptr %t669, i64 %t671 + %t674 = load { ptr, i64, i64 }, ptr %t673 + store { ptr, i64, i64 } %t674, ptr %a675 + store { ptr, i64, i64 } %t666, ptr %a676 + %t677 = call i32 @finch_str_eq(ptr %a675, ptr %a676) + %t678 = icmp ne i32 %t677, 0 + br i1 %t678, label %find.hit5981, label %find.next5982 +find.hit5981: + store i64 %t671, ptr %a667 + br label %find.end5983 +find.next5982: + %t679 = add i64 %t671, 1 + store i64 %t679, ptr %a670 + br label %find.cond5979 +find.end5983: + store { ptr, i64, i64 } %t666, ptr %a680 + call void @finch_str_drop(ptr %a680) + %t681 = load i64, ptr %a667 + %t682 = icmp sge i64 %t681, 0 + %t683 = xor i1 %t682, true + br i1 %t683, label %then5984, label %endif5986 +then5984: + %t684 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 + %t685 = load ptr, ptr %a1 + %t686 = icmp eq ptr %t685, null + br i1 %t686, label %panic5987, label %ok5988 +panic5987: + call void @finch_panic(ptr @.str.3818, i64 3171, ptr @.str.3819) + unreachable +ok5988: + %t687 = getelementptr inbounds %S.gen.Gen, ptr %t685, i32 0, i32 22 + %t688 = load i64, ptr %a49 + %t689 = load { ptr, i64, i64 }, ptr %t687 + %t690 = extractvalue { ptr, i64, i64 } %t689, 1 + %t691 = icmp uge i64 %t688, %t690 + br i1 %t691, label %range5989, label %inrange5990 +range5989: + call void @finch_panic_index(ptr @.str.3820, i64 3171, i64 %t688, i64 %t690) + unreachable +inrange5990: + %t692 = extractvalue { ptr, i64, i64 } %t689, 0 + %t693 = getelementptr inbounds %S.gen.SumDef, ptr %t692, i64 %t688 + %t694 = getelementptr inbounds %S.gen.SumDef, ptr %t693, i32 0, i32 2 + %t695 = load i64, ptr %a660 + %t696 = load { ptr, i64, i64 }, ptr %t694 + %t697 = extractvalue { ptr, i64, i64 } %t696, 1 + %t698 = icmp uge i64 %t695, %t697 + br i1 %t698, label %range5991, label %inrange5992 +range5991: + call void @finch_panic_index(ptr @.str.3821, i64 3171, i64 %t695, i64 %t697) + unreachable +inrange5992: + %t699 = extractvalue { ptr, i64, i64 } %t696, 0 + %t700 = getelementptr inbounds { ptr, i64, i64 }, ptr %t699, i64 %t695 + %t701 = load { ptr, i64, i64 }, ptr %t700 + store { ptr, i64, i64 } %t701, ptr %a702 + call void @finch_str_copy(ptr %a703, ptr %a702) + %t704 = load { ptr, i64, i64 }, ptr %a703 + %t705 = load i64, ptr %t684 + %t706 = add i64 %t705, 1 + call void @finch_arr_reserve(ptr %a647, i64 %t706, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t707 = load ptr, ptr %a647 + %t708 = getelementptr inbounds { ptr, i64, i64 }, ptr %t707, i64 %t705 + store { ptr, i64, i64 } %t704, ptr %t708 + store i64 %t706, ptr %t684 + br label %endif5986 +endif5986: + br label %for.step5977 +for.step5977: + %t709 = load i64, ptr %a660 + %t710 = add i64 %t709, 1 + store i64 %t710, ptr %a660 + br label %for.cond5975 +for.end5978: + %t711 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 + %t712 = load i64, ptr %t711 + %t713 = icmp sgt i64 %t712, 0 + br i1 %t713, label %then5993, label %endif5995 +then5993: + %t714 = load ptr, ptr %a1 + %t715 = load %S.ast.Node, ptr %a2 + %t716 = getelementptr inbounds { ptr, i64, i64 }, ptr %a647, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3823, i64 2, i64 0 }, ptr %a717 + call void @finch_str_join(ptr %a718, ptr %a647, ptr %a717) + %t719 = load { ptr, i64, i64 }, ptr %a718 + store { ptr, i64, i64 } { ptr @.str.3822, i64 26, i64 0 }, ptr %a721 + store { ptr, i64, i64 } %t719, ptr %a722 + call void @finch_str_concat(ptr %a720, ptr %a721, ptr %a722) + store { ptr, i64, i64 } %t719, ptr %a723 + call void @finch_str_drop(ptr %a723) + %t724 = load { ptr, i64, i64 }, ptr %a720 + store { ptr, i64, i64 } %t724, ptr %a726 + store { ptr, i64, i64 } { ptr @.str.3824, i64 29, i64 0 }, ptr %a727 + call void @finch_str_concat(ptr %a725, ptr %a726, ptr %a727) + store { ptr, i64, i64 } %t724, ptr %a728 + call void @finch_str_drop(ptr %a728) + %t729 = load { ptr, i64, i64 }, ptr %a725 + call void @finch.gen.fail(ptr %t714, %S.ast.Node %t715, { ptr, i64, i64 } %t729) + store { ptr, i64, i64 } %t729, ptr %a730 + call void @finch_str_drop(ptr %a730) + br label %endif5995 +endif5995: + call void @finch.drop.arr_str(ptr %a647) + br label %endif5970 +else5969: + %t731 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 0 + %t732 = load { ptr, i64, i64 }, ptr %t731 + store { ptr, i64, i64 } %t732, ptr %a733 + store { ptr, i64, i64 } { ptr @.str.3825, i64 4, i64 0 }, ptr %a734 + %t735 = call i32 @finch_str_eq(ptr %a733, ptr %a734) + %t736 = icmp ne i32 %t735, 0 + br i1 %t736, label %then5996, label %else5997 +then5996: + %t737 = load ptr, ptr %a1 + %t738 = icmp eq ptr %t737, null + br i1 %t738, label %panic5999, label %ok6000 +panic5999: + call void @finch_panic(ptr @.str.3826, i64 3178, ptr @.str.3827) + unreachable +ok6000: + %t739 = getelementptr inbounds %S.gen.Gen, ptr %t737, i32 0, i32 21 + %t740 = load ptr, ptr %a1 + %t741 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 3 + %t742 = load { ptr, i64, i64 }, ptr %t741 + %t743 = getelementptr inbounds %S.ast.Type, ptr %a19, i32 0, i32 2 + %t744 = load { ptr, i64, i64 }, ptr %t743 + %t745 = call i64 @finch.gen.findEnum(ptr %t740, { ptr, i64, i64 } %t742, { ptr, i64, i64 } %t744) + %t746 = load { ptr, i64, i64 }, ptr %t739 + %t747 = extractvalue { ptr, i64, i64 } %t746, 1 + %t748 = icmp uge i64 %t745, %t747 + br i1 %t748, label %range6001, label %inrange6002 +range6001: + call void @finch_panic_index(ptr @.str.3828, i64 3178, i64 %t745, i64 %t747) + unreachable +inrange6002: + %t749 = extractvalue { ptr, i64, i64 } %t746, 0 + %t750 = getelementptr inbounds %S.gen.EnumDef, ptr %t749, i64 %t745 + %t751 = load %S.gen.EnumDef, ptr %t750 + store %S.gen.EnumDef %t751, ptr %a752 + call void @finch.copy.S_gen_EnumDef(ptr %a753, ptr %a752) + %t754 = load %S.gen.EnumDef, ptr %a753 + store %S.gen.EnumDef %t754, ptr %a755 + store { ptr, i64, i64 } zeroinitializer, ptr %a756 + %t757 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 + %t758 = getelementptr inbounds { ptr, i64, i64 }, ptr %t757, i32 0, i32 1 + %t759 = load i64, ptr %t758 + store i64 0, ptr %a760 + br label %for.cond6003 +for.cond6003: + %t761 = load i64, ptr %a760 + %t762 = icmp slt i64 %t761, %t759 + br i1 %t762, label %for.body6004, label %for.end6006 +for.body6004: + %t763 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t764 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 3 + %t765 = load i64, ptr %a760 + %t766 = load { ptr, i64, i64 }, ptr %t764 + %t767 = extractvalue { ptr, i64, i64 } %t766, 1 + %t768 = icmp uge i64 %t765, %t767 + br i1 %t768, label %range6007, label %inrange6008 +range6007: + call void @finch_panic_index(ptr @.str.3829, i64 3181, i64 %t765, i64 %t767) + unreachable +inrange6008: + %t769 = extractvalue { ptr, i64, i64 } %t766, 0 + %t770 = getelementptr inbounds i64, ptr %t769, i64 %t765 + %t771 = load i64, ptr %t770 + call void @finch_str_from_int(ptr %a772, i64 %t771) + %t773 = load { ptr, i64, i64 }, ptr %a772 + store i64 -1, ptr %a774 + %t775 = load i64, ptr %t763 + %t776 = load ptr, ptr %a129 + store i64 0, ptr %a777 + br label %find.cond6009 +find.cond6009: + %t778 = load i64, ptr %a777 + %t779 = icmp slt i64 %t778, %t775 + br i1 %t779, label %find.body6010, label %find.end6013 +find.body6010: + %t780 = getelementptr inbounds { ptr, i64, i64 }, ptr %t776, i64 %t778 + %t781 = load { ptr, i64, i64 }, ptr %t780 + store { ptr, i64, i64 } %t781, ptr %a782 + store { ptr, i64, i64 } %t773, ptr %a783 + %t784 = call i32 @finch_str_eq(ptr %a782, ptr %a783) + %t785 = icmp ne i32 %t784, 0 + br i1 %t785, label %find.hit6011, label %find.next6012 +find.hit6011: + store i64 %t778, ptr %a774 + br label %find.end6013 +find.next6012: + %t786 = add i64 %t778, 1 + store i64 %t786, ptr %a777 + br label %find.cond6009 +find.end6013: + store { ptr, i64, i64 } %t773, ptr %a787 + call void @finch_str_drop(ptr %a787) + %t788 = load i64, ptr %a774 + %t789 = icmp sge i64 %t788, 0 + %t790 = xor i1 %t789, true + br i1 %t790, label %then6014, label %endif6016 +then6014: + %t791 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 + %t792 = getelementptr inbounds %S.gen.EnumDef, ptr %a755, i32 0, i32 2 + %t793 = load i64, ptr %a760 + %t794 = load { ptr, i64, i64 }, ptr %t792 + %t795 = extractvalue { ptr, i64, i64 } %t794, 1 + %t796 = icmp uge i64 %t793, %t795 + br i1 %t796, label %range6017, label %inrange6018 +range6017: + call void @finch_panic_index(ptr @.str.3830, i64 3182, i64 %t793, i64 %t795) + unreachable +inrange6018: + %t797 = extractvalue { ptr, i64, i64 } %t794, 0 + %t798 = getelementptr inbounds { ptr, i64, i64 }, ptr %t797, i64 %t793 + %t799 = load { ptr, i64, i64 }, ptr %t798 + store { ptr, i64, i64 } %t799, ptr %a800 + call void @finch_str_copy(ptr %a801, ptr %a800) + %t802 = load { ptr, i64, i64 }, ptr %a801 + %t803 = load i64, ptr %t791 + %t804 = add i64 %t803, 1 + call void @finch_arr_reserve(ptr %a756, i64 %t804, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t805 = load ptr, ptr %a756 + %t806 = getelementptr inbounds { ptr, i64, i64 }, ptr %t805, i64 %t803 + store { ptr, i64, i64 } %t802, ptr %t806 + store i64 %t804, ptr %t791 + br label %endif6016 +endif6016: + br label %for.step6005 +for.step6005: + %t807 = load i64, ptr %a760 + %t808 = add i64 %t807, 1 + store i64 %t808, ptr %a760 + br label %for.cond6003 +for.end6006: + %t809 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 + %t810 = load i64, ptr %t809 + %t811 = icmp sgt i64 %t810, 0 + br i1 %t811, label %then6019, label %endif6021 +then6019: + %t812 = load ptr, ptr %a1 + %t813 = load %S.ast.Node, ptr %a2 + %t814 = getelementptr inbounds { ptr, i64, i64 }, ptr %a756, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3832, i64 2, i64 0 }, ptr %a815 + call void @finch_str_join(ptr %a816, ptr %a756, ptr %a815) + %t817 = load { ptr, i64, i64 }, ptr %a816 + store { ptr, i64, i64 } { ptr @.str.3831, i64 26, i64 0 }, ptr %a819 + store { ptr, i64, i64 } %t817, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t817, ptr %a821 + call void @finch_str_drop(ptr %a821) + %t822 = load { ptr, i64, i64 }, ptr %a818 + store { ptr, i64, i64 } %t822, ptr %a824 + store { ptr, i64, i64 } { ptr @.str.3833, i64 29, i64 0 }, ptr %a825 + call void @finch_str_concat(ptr %a823, ptr %a824, ptr %a825) + store { ptr, i64, i64 } %t822, ptr %a826 + call void @finch_str_drop(ptr %a826) + %t827 = load { ptr, i64, i64 }, ptr %a823 + call void @finch.gen.fail(ptr %t812, %S.ast.Node %t813, { ptr, i64, i64 } %t827) + store { ptr, i64, i64 } %t827, ptr %a828 + call void @finch_str_drop(ptr %a828) + br label %endif6021 +endif6021: + call void @finch.drop.arr_str(ptr %a756) + call void @finch.drop.S_gen_EnumDef(ptr %a755) + br label %endif5998 +else5997: + %t829 = load ptr, ptr %a1 + %t830 = load %S.ast.Node, ptr %a2 + %t831 = load %S.ast.Type, ptr %a19 + %t832 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t831) + store { ptr, i64, i64 } { ptr @.str.3834, i64 11, i64 0 }, ptr %a834 + store { ptr, i64, i64 } %t832, ptr %a835 + call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) + store { ptr, i64, i64 } %t832, ptr %a836 + call void @finch_str_drop(ptr %a836) + %t837 = load { ptr, i64, i64 }, ptr %a833 + store { ptr, i64, i64 } %t837, ptr %a839 + store { ptr, i64, i64 } { ptr @.str.3835, i64 54, i64 0 }, ptr %a840 + call void @finch_str_concat(ptr %a838, ptr %a839, ptr %a840) + store { ptr, i64, i64 } %t837, ptr %a841 + call void @finch_str_drop(ptr %a841) + %t842 = load { ptr, i64, i64 }, ptr %a838 + call void @finch.gen.fail(ptr %t829, %S.ast.Node %t830, { ptr, i64, i64 } %t842) + store { ptr, i64, i64 } %t842, ptr %a843 + call void @finch_str_drop(ptr %a843) + br label %endif5998 +endif5998: + br label %endif5970 +endif5970: + %t844 = load ptr, ptr %a1 + %t845 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t844, { ptr, i64, i64 } { ptr @.str.3836, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.3837, i64 35, i64 0 }, %S.ast.Node %t845) + %t846 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t846, { ptr, i64, i64 } { ptr @.str.3838, i64 11, i64 0 }) + %t847 = load ptr, ptr %a1 + %t848 = icmp eq ptr %t847, null + br i1 %t848, label %panic6022, label %ok6023 +panic6022: + call void @finch_panic(ptr @.str.3839, i64 3194, ptr @.str.3840) + unreachable +ok6023: + %t849 = getelementptr inbounds %S.gen.Gen, ptr %t847, i32 0, i32 9 + store i1 true, ptr %t849 + br label %endif5967 +endif5967: + %t850 = load ptr, ptr %a1 + %t851 = load i64, ptr %a46 + call void @finch.gen.heldEnd(ptr %t850, i64 %t851) + %t852 = load ptr, ptr %a1 + %t853 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.label(ptr %t852, { ptr, i64, i64 } %t853) + %t854 = load i1, ptr %a128 + %t855 = xor i1 %t854, true + br i1 %t855, label %then6024, label %endif6026 +then6024: + %t856 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t856, { ptr, i64, i64 } { ptr @.str.3841, i64 11, i64 0 }) + %t857 = load ptr, ptr %a1 + %t858 = icmp eq ptr %t857, null + br i1 %t858, label %panic6027, label %ok6028 +panic6027: + call void @finch_panic(ptr @.str.3842, i64 3200, ptr @.str.3843) + unreachable +ok6028: + %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 9 + store i1 true, ptr %t859 + %t860 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3844, i64 4, i64 0 }) + %t861 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t860, 1 + call void @finch.drop.S_ast_Type(ptr %a133) + call void @finch.drop.arr_str(ptr %a131) + call void @finch.drop.arr_str(ptr %a130) + call void @finch.drop.arr_str(ptr %a129) + call void @finch_str_drop(ptr %a126) + call void @finch_str_drop(ptr %a50) + call void @finch.drop.S_ast_Type(ptr %a19) + call void @finch.drop.S_gen_Val(ptr %a13) + ret %S.gen.Val %t861 +endif6026: + %t862 = load i1, ptr %a3 + br i1 %t862, label %then6029, label %endif6031 +then6029: + %t863 = load ptr, ptr %a1 + %t864 = load ptr, ptr %a1 + %t865 = load %S.ast.Type, ptr %a133 + %t866 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t864, %S.ast.Type %t865) + store { ptr, i64, i64 } { ptr @.str.3845, i64 4, i64 0 }, ptr %a868 + store { ptr, i64, i64 } %t866, ptr %a869 + call void @finch_str_concat(ptr %a867, ptr %a868, ptr %a869) + store { ptr, i64, i64 } %t866, ptr %a870 + call void @finch_str_drop(ptr %a870) + %t871 = load { ptr, i64, i64 }, ptr %a867 + store { ptr, i64, i64 } %t871, ptr %a873 + store { ptr, i64, i64 } { ptr @.str.3846, i64 1, i64 0 }, ptr %a874 + call void @finch_str_concat(ptr %a872, ptr %a873, ptr %a874) + store { ptr, i64, i64 } %t871, ptr %a875 + call void @finch_str_drop(ptr %a875) + %t876 = load { ptr, i64, i64 }, ptr %a872 + %t877 = load { ptr, i64, i64 }, ptr %a130 + %t878 = load { ptr, i64, i64 }, ptr %a131 + %t879 = call { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %t877, { ptr, i64, i64 } %t878) + store { ptr, i64, i64 } %t876, ptr %a881 + store { ptr, i64, i64 } %t879, ptr %a882 + call void @finch_str_concat(ptr %a880, ptr %a881, ptr %a882) + store { ptr, i64, i64 } %t876, ptr %a883 + call void @finch_str_drop(ptr %a883) + store { ptr, i64, i64 } %t879, ptr %a884 + call void @finch_str_drop(ptr %a884) + %t885 = load { ptr, i64, i64 }, ptr %a880 + %t886 = call { ptr, i64, i64 } @finch.gen.op(ptr %t863, { ptr, i64, i64 } %t885) + store { ptr, i64, i64 } %t885, ptr %a887 + call void @finch_str_drop(ptr %a887) + %t888 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t886, 0 + %t889 = load %S.ast.Type, ptr %a133 + store %S.ast.Type %t889, ptr %a890 + call void @finch.copy.S_ast_Type(ptr %a891, ptr %a890) + %t892 = load %S.ast.Type, ptr %a891 + %t893 = insertvalue %S.gen.Val %t888, %S.ast.Type %t892, 1 + %t894 = load ptr, ptr %a1 + %t895 = load %S.ast.Type, ptr %a133 + %t896 = call i1 @finch.gen.owning(ptr %t894, %S.ast.Type %t895) + %t897 = insertvalue %S.gen.Val %t893, i1 %t896, 2 + store %S.gen.Val %t897, ptr %a898 + %t899 = load ptr, ptr %a1 + %t900 = load %S.gen.Val, ptr %a13 + call void @finch.gen.release(ptr %t899, %S.gen.Val %t900) + %t901 = load %S.gen.Val, ptr %a898 + call void @finch.drop.S_ast_Type(ptr %a133) + call void @finch.drop.arr_str(ptr %a131) + call void @finch.drop.arr_str(ptr %a130) + call void @finch.drop.arr_str(ptr %a129) + call void @finch_str_drop(ptr %a126) + call void @finch_str_drop(ptr %a50) + call void @finch.drop.S_ast_Type(ptr %a19) + call void @finch.drop.S_gen_Val(ptr %a13) + ret %S.gen.Val %t901 +endif6031: + %t902 = load ptr, ptr %a1 + %t903 = load %S.gen.Val, ptr %a13 + call void @finch.gen.release(ptr %t902, %S.gen.Val %t903) + %t904 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3847, i64 4, i64 0 }) + %t905 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t904, 1 + call void @finch.drop.S_ast_Type(ptr %a133) + call void @finch.drop.arr_str(ptr %a131) + call void @finch.drop.arr_str(ptr %a130) + call void @finch.drop.arr_str(ptr %a129) + call void @finch_str_drop(ptr %a126) + call void @finch_str_drop(ptr %a50) + call void @finch.drop.S_ast_Type(ptr %a19) + call void @finch.drop.S_gen_Val(ptr %a13) + ret %S.gen.Val %t905 +} + +define internal { ptr, i64, i64 } @finch.gen.phiList({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca i64, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } zeroinitializer, ptr %a3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + store i64 0, ptr %a6 + br label %for.cond6032 +for.cond6032: + %t7 = load i64, ptr %a6 + %t8 = icmp slt i64 %t7, %t5 + br i1 %t8, label %for.body6033, label %for.end6035 +for.body6033: + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t10 = load i64, ptr %a6 + %t11 = load { ptr, i64, i64 }, ptr %a1 + %t12 = extractvalue { ptr, i64, i64 } %t11, 1 + %t13 = icmp uge i64 %t10, %t12 + br i1 %t13, label %range6036, label %inrange6037 +range6036: + call void @finch_panic_index(ptr @.str.3849, i64 3215, i64 %t10, i64 %t12) + unreachable +inrange6037: + %t14 = extractvalue { ptr, i64, i64 } %t11, 0 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t10 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } { ptr @.str.3848, i64 2, i64 0 }, ptr %a18 + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a17 + store { ptr, i64, i64 } %t20, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.3850, i64 3, i64 0 }, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t20, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + %t26 = load i64, ptr %a6 + %t27 = load { ptr, i64, i64 }, ptr %a2 + %t28 = extractvalue { ptr, i64, i64 } %t27, 1 + %t29 = icmp uge i64 %t26, %t28 + br i1 %t29, label %range6038, label %inrange6039 +range6038: + call void @finch_panic_index(ptr @.str.3851, i64 3215, i64 %t26, i64 %t28) + unreachable +inrange6039: + %t30 = extractvalue { ptr, i64, i64 } %t27, 0 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t26 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t25, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t25, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.3852, i64 2, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + %t43 = load i64, ptr %t9 + %t44 = add i64 %t43, 1 + call void @finch_arr_reserve(ptr %a3, i64 %t44, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t45 = load ptr, ptr %a3 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t43 + store { ptr, i64, i64 } %t42, ptr %t46 + store i64 %t44, ptr %t9 + br label %for.step6034 +for.step6034: + %t47 = load i64, ptr %a6 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a6 + br label %for.cond6032 +for.end6035: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.3853, i64 2, i64 0 }, ptr %a50 + call void @finch_str_join(ptr %a51, ptr %a3, ptr %a50) + %t52 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.drop.arr_str(ptr %a3) + ret { ptr, i64, i64 } %t52 +} + +define internal %S.gen.Fallible @finch.gen.fallibleCall(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca %S.gen.Val, align 16 + %a64 = alloca %S.gen.Val, align 16 + %a65 = alloca %S.gen.Val, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca %S.gen.Fallible, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.3854, i64 4, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp eq i32 %t7, 0 + br label %logic.from6040 +logic.from6040: + br i1 %t8, label %logic.rhs6041, label %logic.end6042 +logic.rhs6041: + %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t10 = load { ptr, i64, i64 }, ptr %t9 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.3855, i64 6, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp eq i32 %t13, 0 + br label %logic.rend6043 +logic.rend6043: + br label %logic.end6042 +logic.end6042: + %t15 = phi i1 [ false, %logic.from6040 ], [ %t14, %logic.rend6043 ] + br i1 %t15, label %then6044, label %endif6046 +then6044: + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } { ptr @.str.3856, i64 80, i64 0 }) + br label %endif6046 +endif6046: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic6047, label %ok6048 +panic6047: + call void @finch_panic(ptr @.str.3857, i64 3233, ptr @.str.3858) + unreachable +ok6048: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 41 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + call void @finch_str_copy(ptr %a23, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic6049, label %ok6050 +panic6049: + call void @finch_panic(ptr @.str.3859, i64 3234, ptr @.str.3860) + unreachable +ok6050: + %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 42 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + call void @finch_str_copy(ptr %a31, ptr %a30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t32, ptr %a33 + %t34 = load ptr, ptr %a1 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic6051, label %ok6052 +panic6051: + call void @finch_panic(ptr @.str.3861, i64 3235, ptr @.str.3862) + unreachable +ok6052: + %t36 = getelementptr inbounds %S.gen.Gen, ptr %t34, i32 0, i32 43 + %t37 = load { ptr, i64, i64 }, ptr %t36 + store { ptr, i64, i64 } %t37, ptr %a38 + call void @finch_str_copy(ptr %a39, ptr %a38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t40, ptr %a41 + %t42 = load %S.ast.Node, ptr %a2 + %t43 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t42) + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic6053, label %ok6054 +panic6053: + call void @finch_panic(ptr @.str.3863, i64 3236, ptr @.str.3864) + unreachable +ok6054: + %t46 = getelementptr inbounds %S.gen.Gen, ptr %t44, i32 0, i32 41 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store { ptr, i64, i64 } %t43, ptr %t46 + store { ptr, i64, i64 } %t47, ptr %a48 + call void @finch_str_drop(ptr %a48) + %t49 = load ptr, ptr %a1 + %t50 = icmp eq ptr %t49, null + br i1 %t50, label %panic6055, label %ok6056 +panic6055: + call void @finch_panic(ptr @.str.3866, i64 3237, ptr @.str.3867) + unreachable +ok6056: + %t51 = getelementptr inbounds %S.gen.Gen, ptr %t49, i32 0, i32 42 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } { ptr @.str.3865, i64 0, i64 0 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load ptr, ptr %a1 + %t55 = icmp eq ptr %t54, null + br i1 %t55, label %panic6057, label %ok6058 +panic6057: + call void @finch_panic(ptr @.str.3869, i64 3238, ptr @.str.3870) + unreachable +ok6058: + %t56 = getelementptr inbounds %S.gen.Gen, ptr %t54, i32 0, i32 43 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } { ptr @.str.3868, i64 0, i64 0 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Node, ptr %a2 + %t61 = call %S.gen.Val @finch.gen.expr(ptr %t59, %S.ast.Node %t60) + store %S.gen.Val %t61, ptr %a62 + %t63 = load %S.gen.Val, ptr %a62 + store %S.gen.Val %t63, ptr %a64 + call void @finch.copy.S_gen_Val(ptr %a65, ptr %a64) + %t66 = load %S.gen.Val, ptr %a65 + %t67 = insertvalue %S.gen.Fallible zeroinitializer, %S.gen.Val %t66, 0 + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic6059, label %ok6060 +panic6059: + call void @finch_panic(ptr @.str.3871, i64 3240, ptr @.str.3872) + unreachable +ok6060: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 42 + %t71 = load { ptr, i64, i64 }, ptr %t70 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_copy(ptr %a73, ptr %a72) + %t74 = load { ptr, i64, i64 }, ptr %a73 + %t75 = insertvalue %S.gen.Fallible %t67, { ptr, i64, i64 } %t74, 1 + %t76 = load ptr, ptr %a1 + %t77 = icmp eq ptr %t76, null + br i1 %t77, label %panic6061, label %ok6062 +panic6061: + call void @finch_panic(ptr @.str.3873, i64 3240, ptr @.str.3874) + unreachable +ok6062: + %t78 = getelementptr inbounds %S.gen.Gen, ptr %t76, i32 0, i32 43 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_copy(ptr %a81, ptr %a80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + %t83 = insertvalue %S.gen.Fallible %t75, { ptr, i64, i64 } %t82, 2 + store %S.gen.Fallible %t83, ptr %a84 + %t85 = load { ptr, i64, i64 }, ptr %a25 + %t86 = load ptr, ptr %a1 + %t87 = icmp eq ptr %t86, null + br i1 %t87, label %panic6063, label %ok6064 +panic6063: + call void @finch_panic(ptr @.str.3875, i64 3241, ptr @.str.3876) + unreachable +ok6064: + %t88 = getelementptr inbounds %S.gen.Gen, ptr %t86, i32 0, i32 41 + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_copy(ptr %a90, ptr %a89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t91, ptr %t88 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a33 + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic6065, label %ok6066 +panic6065: + call void @finch_panic(ptr @.str.3877, i64 3242, ptr @.str.3878) + unreachable +ok6066: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 42 + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_copy(ptr %a99, ptr %a98) + %t100 = load { ptr, i64, i64 }, ptr %a99 + %t101 = load { ptr, i64, i64 }, ptr %t97 + store { ptr, i64, i64 } %t100, ptr %t97 + store { ptr, i64, i64 } %t101, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a41 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic6067, label %ok6068 +panic6067: + call void @finch_panic(ptr @.str.3879, i64 3243, ptr @.str.3880) + unreachable +ok6068: + %t106 = getelementptr inbounds %S.gen.Gen, ptr %t104, i32 0, i32 43 + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_copy(ptr %a108, ptr %a107) + %t109 = load { ptr, i64, i64 }, ptr %a108 + %t110 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t109, ptr %t106 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = getelementptr inbounds %S.gen.Fallible, ptr %a84, i32 0, i32 1 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = icmp eq i64 %t114, 0 + br i1 %t115, label %then6069, label %endif6071 +then6069: + %t116 = load ptr, ptr %a1 + %t117 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t116, %S.ast.Node %t117, { ptr, i64, i64 } { ptr @.str.3881, i64 50, i64 0 }) + br label %endif6071 +endif6071: + %t118 = load %S.gen.Fallible, ptr %a84 + call void @finch.drop.S_gen_Val(ptr %a62) + call void @finch_str_drop(ptr %a41) + call void @finch_str_drop(ptr %a33) + call void @finch_str_drop(ptr %a25) + ret %S.gen.Fallible %t118 +} + +define internal void @finch.drop.S_gen_Fallible(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 0 + call void @finch.drop.S_gen_Val(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Fallible, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal %S.gen.Val @finch.gen.tryExpr(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca %S.gen.Fallible, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca %S.gen.Val, align 16 + %a156 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic6072, label %ok6073 +panic6072: + call void @finch_panic(ptr @.str.3882, i64 3252, ptr @.str.3883) + unreachable +ok6073: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 46 + %t6 = load i64, ptr %t5 + %t7 = icmp sgt i64 %t6, 0 + br i1 %t7, label %then6074, label %endif6076 +then6074: + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.3884, i64 30, i64 0 }) + br label %endif6076 +endif6076: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic6077, label %ok6078 +panic6077: + call void @finch_panic(ptr @.str.3885, i64 3255, ptr @.str.3886) + unreachable +ok6078: + %t12 = getelementptr inbounds %S.gen.Gen, ptr %t10, i32 0, i32 13 + %t13 = getelementptr inbounds %S.gen.FnSig, ptr %t12, i32 0, i32 9 + %t14 = load i1, ptr %t13 + %t15 = xor i1 %t14, true + br i1 %t15, label %then6079, label %endif6081 +then6079: + store { ptr, i64, i64 } { ptr @.str.3887, i64 1, i64 0 }, ptr %a16 + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic6082, label %ok6083 +panic6082: + call void @finch_panic(ptr @.str.3888, i64 3257, ptr @.str.3889) + unreachable +ok6083: + %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 13 + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %t19, i32 0, i32 12 + %t21 = getelementptr inbounds %S.ast.Type, ptr %t20, i32 0, i32 0 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.3890, i64 4, i64 0 }, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp eq i32 %t25, 0 + br i1 %t26, label %then6084, label %endif6086 +then6084: + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic6087, label %ok6088 +panic6087: + call void @finch_panic(ptr @.str.3891, i64 3258, ptr @.str.3892) + unreachable +ok6088: + %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 13 + %t30 = getelementptr inbounds %S.gen.FnSig, ptr %t29, i32 0, i32 12 + %t31 = load %S.ast.Type, ptr %t30 + %t32 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t31) + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.3893, i64 1, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t32, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + %t38 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t37, ptr %a16 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_drop(ptr %a39) + br label %endif6086 +endif6086: + %t40 = load ptr, ptr %a1 + %t41 = load %S.ast.Node, ptr %a2 + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic6089, label %ok6090 +panic6089: + call void @finch_panic(ptr @.str.3895, i64 3260, ptr @.str.3896) + unreachable +ok6090: + %t44 = getelementptr inbounds %S.gen.Gen, ptr %t42, i32 0, i32 13 + %t45 = getelementptr inbounds %S.gen.FnSig, ptr %t44, i32 0, i32 1 + %t46 = load { ptr, i64, i64 }, ptr %t45 + store { ptr, i64, i64 } { ptr @.str.3894, i64 29, i64 0 }, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.3897, i64 31, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t55, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.3898, i64 55, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + call void @finch.gen.fail(ptr %t40, %S.ast.Node %t41, { ptr, i64, i64 } %t66) + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + call void @finch_str_drop(ptr %a16) + br label %endif6081 +endif6081: + %t68 = load ptr, ptr %a1 + %t69 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t70 = load { ptr, i64, i64 }, ptr %t69 + %t71 = extractvalue { ptr, i64, i64 } %t70, 1 + %t72 = icmp uge i64 0, %t71 + br i1 %t72, label %range6091, label %inrange6092 +range6091: + call void @finch_panic_index(ptr @.str.3899, i64 3262, i64 0, i64 %t71) + unreachable +inrange6092: + %t73 = extractvalue { ptr, i64, i64 } %t70, 0 + %t74 = getelementptr inbounds %S.ast.Node, ptr %t73, i64 0 + %t75 = load %S.ast.Node, ptr %t74 + %t76 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t68, %S.ast.Node %t75) + store %S.gen.Fallible %t76, ptr %a77 + %t78 = load ptr, ptr %a1 + %t79 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t78, { ptr, i64, i64 } { ptr @.str.3900, i64 10, i64 0 }) + store { ptr, i64, i64 } %t79, ptr %a80 + %t81 = load ptr, ptr %a1 + %t82 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t81, { ptr, i64, i64 } { ptr @.str.3901, i64 6, i64 0 }) + store { ptr, i64, i64 } %t82, ptr %a83 + %t84 = load ptr, ptr %a1 + %t85 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 1 + %t86 = load { ptr, i64, i64 }, ptr %t85 + %t87 = load { ptr, i64, i64 }, ptr %a80 + %t88 = load { ptr, i64, i64 }, ptr %a83 + call void @finch.gen.condBr(ptr %t84, { ptr, i64, i64 } %t86, { ptr, i64, i64 } %t87, { ptr, i64, i64 } %t88) + %t89 = load ptr, ptr %a1 + %t90 = load { ptr, i64, i64 }, ptr %a80 + call void @finch.gen.label(ptr %t89, { ptr, i64, i64 } %t90) + %t91 = load ptr, ptr %a1 + call void @finch.gen.dropPending(ptr %t91, i64 0) + %t92 = load ptr, ptr %a1 + call void @finch.gen.unwind(ptr %t92, i64 0) + %t93 = load ptr, ptr %a1 + %t94 = load ptr, ptr %a1 + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic6093, label %ok6094 +panic6093: + call void @finch_panic(ptr @.str.3903, i64 3269, ptr @.str.3904) + unreachable +ok6094: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 13 + %t98 = load %S.gen.FnSig, ptr %t97 + %t99 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t94, %S.gen.FnSig %t98) + store { ptr, i64, i64 } { ptr @.str.3902, i64 4, i64 0 }, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t99, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.3905, i64 1, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = load ptr, ptr %a1 + %t111 = load ptr, ptr %a1 + %t112 = load ptr, ptr %a1 + %t113 = icmp eq ptr %t112, null + br i1 %t113, label %panic6095, label %ok6096 +panic6095: + call void @finch_panic(ptr @.str.3907, i64 3269, ptr @.str.3908) + unreachable +ok6096: + %t114 = getelementptr inbounds %S.gen.Gen, ptr %t112, i32 0, i32 13 + %t115 = load %S.gen.FnSig, ptr %t114 + %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t111, %S.gen.FnSig %t115) + store { ptr, i64, i64 } { ptr @.str.3906, i64 12, i64 0 }, ptr %a118 + store { ptr, i64, i64 } %t116, ptr %a119 + call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) + store { ptr, i64, i64 } %t116, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.3909, i64 36, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t126, ptr %a130 + store { ptr, i64, i64 } %t128, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + store { ptr, i64, i64 } %t126, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t133, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.3910, i64 3, i64 0 }, ptr %a136 + call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) + store { ptr, i64, i64 } %t133, ptr %a137 + call void @finch_str_drop(ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a134 + %t139 = call { ptr, i64, i64 } @finch.gen.op(ptr %t110, { ptr, i64, i64 } %t138) + store { ptr, i64, i64 } %t138, ptr %a140 + call void @finch_str_drop(ptr %a140) + store { ptr, i64, i64 } %t109, ptr %a142 + store { ptr, i64, i64 } %t139, ptr %a143 + call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) + store { ptr, i64, i64 } %t109, ptr %a144 + call void @finch_str_drop(ptr %a144) + store { ptr, i64, i64 } %t139, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a141 + call void @finch.gen.emit(ptr %t93, { ptr, i64, i64 } %t146) + store { ptr, i64, i64 } %t146, ptr %a147 + call void @finch_str_drop(ptr %a147) + %t148 = load ptr, ptr %a1 + %t149 = icmp eq ptr %t148, null + br i1 %t149, label %panic6097, label %ok6098 +panic6097: + call void @finch_panic(ptr @.str.3911, i64 3270, ptr @.str.3912) + unreachable +ok6098: + %t150 = getelementptr inbounds %S.gen.Gen, ptr %t148, i32 0, i32 9 + store i1 true, ptr %t150 + %t151 = load ptr, ptr %a1 + %t152 = load { ptr, i64, i64 }, ptr %a83 + call void @finch.gen.label(ptr %t151, { ptr, i64, i64 } %t152) + %t153 = getelementptr inbounds %S.gen.Fallible, ptr %a77, i32 0, i32 0 + %t154 = load %S.gen.Val, ptr %t153 + store %S.gen.Val %t154, ptr %a155 + call void @finch.copy.S_gen_Val(ptr %a156, ptr %a155) + %t157 = load %S.gen.Val, ptr %a156 + call void @finch_str_drop(ptr %a83) + call void @finch_str_drop(ptr %a80) + call void @finch.drop.S_gen_Fallible(ptr %a77) + ret %S.gen.Val %t157 +} + +define internal %S.gen.Val @finch.gen.orElse(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a13 = alloca %S.gen.Fallible, align 16 + %a16 = alloca %S.gen.Val, align 16 + %a17 = alloca %S.gen.Val, align 16 + %a19 = alloca %S.gen.Val, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca %S.ast.Type, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca i1, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca %S.ast.Type, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca %S.gen.Val, align 16 + %a155 = alloca %S.gen.Val, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca %S.ast.Type, align 16 + %a245 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range6099, label %inrange6100 +range6099: + call void @finch_panic_index(ptr @.str.3913, i64 3277, i64 0, i64 %t7) + unreachable +inrange6100: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call %S.gen.Fallible @finch.gen.fallibleCall(ptr %t4, %S.ast.Node %t11) + store %S.gen.Fallible %t12, ptr %a13 + %t14 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 0 + %t15 = load %S.gen.Val, ptr %t14 + store %S.gen.Val %t15, ptr %a16 + call void @finch.copy.S_gen_Val(ptr %a17, ptr %a16) + %t18 = load %S.gen.Val, ptr %a17 + store %S.gen.Val %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t20, { ptr, i64, i64 } { ptr @.str.3914, i64 9, i64 0 }) + store { ptr, i64, i64 } %t21, ptr %a22 + %t23 = load ptr, ptr %a1 + %t24 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t23, { ptr, i64, i64 } { ptr @.str.3915, i64 5, i64 0 }) + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 1 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = load { ptr, i64, i64 }, ptr %a22 + %t30 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.condBr(ptr %t26, { ptr, i64, i64 } %t28, { ptr, i64, i64 } %t29, { ptr, i64, i64 } %t30) + %t31 = load ptr, ptr %a1 + %t32 = load { ptr, i64, i64 }, ptr %a22 + call void @finch.gen.label(ptr %t31, { ptr, i64, i64 } %t32) + %t33 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 6 + %t34 = load i1, ptr %t33 + br i1 %t34, label %then6101, label %endif6103 +then6101: + %t35 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t35) + %t36 = load ptr, ptr %a1 + %t37 = load %S.ast.Node, ptr %a2 + %t38 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3917, i64 3, i64 0 }) + %t39 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t36, %S.ast.Node %t37, { ptr, i64, i64 } { ptr @.str.3916, i64 3, i64 0 }, %S.ast.Type %t38, { ptr, i64, i64 } %t40, i1 true, i1 true) + store %S.ast.Type %t38, ptr %a42 + call void @finch.drop.S_ast_Type(ptr %a42) + store { ptr, i64, i64 } %t41, ptr %a43 + call void @finch_str_drop(ptr %a43) + %t44 = load ptr, ptr %a1 + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range6104, label %inrange6105 +range6104: + call void @finch_panic_index(ptr @.str.3918, i64 3286, i64 1, i64 %t47) + unreachable +inrange6105: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 + %t51 = load %S.ast.Node, ptr %t50 + call void @finch.gen.block(ptr %t44, %S.ast.Node %t51, i1 true) + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic6106, label %ok6107 +panic6106: + call void @finch_panic(ptr @.str.3919, i64 3287, ptr @.str.3920) + unreachable +ok6107: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 9 + %t55 = load i1, ptr %t54 + store i1 %t55, ptr %a56 + %t57 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t57) + %t58 = load i1, ptr %a56 + %t59 = xor i1 %t58, true + br label %logic.from6108 +logic.from6108: + br i1 %t59, label %logic.rhs6109, label %logic.end6110 +logic.rhs6109: + %t60 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.3921, i64 4, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp eq i32 %t65, 0 + br label %logic.rend6111 +logic.rend6111: + br label %logic.end6110 +logic.end6110: + %t67 = phi i1 [ false, %logic.from6108 ], [ %t66, %logic.rend6111 ] + br label %logic.from6112 +logic.from6112: + br i1 %t67, label %logic.rhs6113, label %logic.end6114 +logic.rhs6113: + %t68 = load i1, ptr %a3 + %t69 = xor i1 %t68, true + br label %logic.rend6115 +logic.rend6115: + br label %logic.end6114 +logic.end6114: + %t70 = phi i1 [ false, %logic.from6112 ], [ %t69, %logic.rend6115 ] + br i1 %t70, label %then6116, label %endif6118 +then6116: + %t71 = load ptr, ptr %a1 + %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 1, %t74 + br i1 %t75, label %range6119, label %inrange6120 +range6119: + call void @finch_panic_index(ptr @.str.3922, i64 3290, i64 1, i64 %t74) + unreachable +inrange6120: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 1 + %t78 = load %S.ast.Node, ptr %t77 + call void @finch.gen.fail(ptr %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.3923, i64 142, i64 0 }) + br label %endif6118 +endif6118: + %t79 = load i1, ptr %a3 + br label %logic.from6121 +logic.from6121: + br i1 %t79, label %logic.rhs6122, label %logic.end6123 +logic.rhs6122: + %t80 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t81 = getelementptr inbounds %S.ast.Type, ptr %t80, i32 0, i32 0 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t82, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.3924, i64 4, i64 0 }, ptr %a84 + %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) + %t86 = icmp eq i32 %t85, 0 + br label %logic.rend6124 +logic.rend6124: + br label %logic.end6123 +logic.end6123: + %t87 = phi i1 [ false, %logic.from6121 ], [ %t86, %logic.rend6124 ] + br i1 %t87, label %then6125, label %endif6127 +then6125: + %t88 = load ptr, ptr %a1 + %t89 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t88, { ptr, i64, i64 } { ptr @.str.3925, i64 6, i64 0 }) + store { ptr, i64, i64 } %t89, ptr %a90 + %t91 = load ptr, ptr %a1 + %t92 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t91, { ptr, i64, i64 } %t92) + %t93 = load ptr, ptr %a1 + %t94 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.label(ptr %t93, { ptr, i64, i64 } %t94) + %t95 = load ptr, ptr %a1 + %t96 = load %S.gen.Val, ptr %a19 + call void @finch.gen.release(ptr %t95, %S.gen.Val %t96) + %t97 = load ptr, ptr %a1 + %t98 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.br(ptr %t97, { ptr, i64, i64 } %t98) + %t99 = load ptr, ptr %a1 + %t100 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.gen.label(ptr %t99, { ptr, i64, i64 } %t100) + %t101 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3926, i64 4, i64 0 }) + %t102 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t101, 1 + call void @finch_str_drop(ptr %a90) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a22) + call void @finch.drop.S_gen_Val(ptr %a19) + call void @finch.drop.S_gen_Fallible(ptr %a13) + ret %S.gen.Val %t102 +endif6127: + %t103 = load ptr, ptr %a1 + %t104 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.br(ptr %t103, { ptr, i64, i64 } %t104) + %t105 = load ptr, ptr %a1 + %t106 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.label(ptr %t105, { ptr, i64, i64 } %t106) + %t107 = load %S.gen.Val, ptr %a19 + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a22) + call void @finch.drop.S_gen_Fallible(ptr %a13) + ret %S.gen.Val %t107 +endif6103: + %t108 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t109 = getelementptr inbounds %S.ast.Type, ptr %t108, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } %t110, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.3927, i64 4, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br i1 %t114, label %then6128, label %endif6130 +then6128: + %t115 = load ptr, ptr %a1 + %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t117 = load { ptr, i64, i64 }, ptr %t116 + %t118 = extractvalue { ptr, i64, i64 } %t117, 1 + %t119 = icmp uge i64 1, %t118 + br i1 %t119, label %range6131, label %inrange6132 +range6131: + call void @finch_panic_index(ptr @.str.3928, i64 3306, i64 1, i64 %t118) + unreachable +inrange6132: + %t120 = extractvalue { ptr, i64, i64 } %t117, 0 + %t121 = getelementptr inbounds %S.ast.Node, ptr %t120, i64 1 + %t122 = load %S.ast.Node, ptr %t121 + call void @finch.gen.fail(ptr %t115, %S.ast.Node %t122, { ptr, i64, i64 } { ptr @.str.3929, i64 98, i64 0 }) + br label %endif6130 +endif6130: + %t123 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t123) + %t124 = load ptr, ptr %a1 + %t125 = load %S.ast.Node, ptr %a2 + %t126 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3931, i64 3, i64 0 }) + %t127 = getelementptr inbounds %S.gen.Fallible, ptr %a13, i32 0, i32 2 + %t128 = load { ptr, i64, i64 }, ptr %t127 + %t129 = call { ptr, i64, i64 } @finch.gen.addVar(ptr %t124, %S.ast.Node %t125, { ptr, i64, i64 } { ptr @.str.3930, i64 3, i64 0 }, %S.ast.Type %t126, { ptr, i64, i64 } %t128, i1 true, i1 true) + store %S.ast.Type %t126, ptr %a130 + call void @finch.drop.S_ast_Type(ptr %a130) + store { ptr, i64, i64 } %t129, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load ptr, ptr %a1 + %t133 = load ptr, ptr %a1 + %t134 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t135 = load { ptr, i64, i64 }, ptr %t134 + %t136 = extractvalue { ptr, i64, i64 } %t135, 1 + %t137 = icmp uge i64 1, %t136 + br i1 %t137, label %range6133, label %inrange6134 +range6133: + call void @finch_panic_index(ptr @.str.3932, i64 3310, i64 1, i64 %t136) + unreachable +inrange6134: + %t138 = extractvalue { ptr, i64, i64 } %t135, 0 + %t139 = getelementptr inbounds %S.ast.Node, ptr %t138, i64 1 + %t140 = load %S.ast.Node, ptr %t139 + %t141 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t142 = load %S.ast.Type, ptr %t141 + %t143 = call %S.gen.Val @finch.gen.exprWant(ptr %t133, %S.ast.Node %t140, %S.ast.Type %t142) + %t144 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t145 = load %S.ast.Type, ptr %t144 + %t146 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t147 = load { ptr, i64, i64 }, ptr %t146 + %t148 = extractvalue { ptr, i64, i64 } %t147, 1 + %t149 = icmp uge i64 1, %t148 + br i1 %t149, label %range6135, label %inrange6136 +range6135: + call void @finch_panic_index(ptr @.str.3933, i64 3310, i64 1, i64 %t148) + unreachable +inrange6136: + %t150 = extractvalue { ptr, i64, i64 } %t147, 0 + %t151 = getelementptr inbounds %S.ast.Node, ptr %t150, i64 1 + %t152 = load %S.ast.Node, ptr %t151 + %t153 = call %S.gen.Val @finch.gen.coerce(ptr %t132, %S.gen.Val %t143, %S.ast.Type %t145, %S.ast.Node %t152, { ptr, i64, i64 } { ptr @.str.3934, i64 20, i64 0 }) + store %S.gen.Val %t143, ptr %a154 + call void @finch.drop.S_gen_Val(ptr %a154) + store %S.gen.Val %t153, ptr %a155 + %t156 = load ptr, ptr %a1 + %t157 = load %S.gen.Val, ptr %a155 + %t158 = call { ptr, i64, i64 } @finch.gen.own(ptr %t156, %S.gen.Val %t157) + store { ptr, i64, i64 } %t158, ptr %a159 + %t160 = load ptr, ptr %a1 + call void @finch.gen.popScope(ptr %t160) + %t161 = load ptr, ptr %a1 + %t162 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t161, { ptr, i64, i64 } { ptr @.str.3935, i64 7, i64 0 }) + store { ptr, i64, i64 } %t162, ptr %a163 + %t164 = load ptr, ptr %a1 + %t165 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t164, { ptr, i64, i64 } { ptr @.str.3936, i64 6, i64 0 }) + store { ptr, i64, i64 } %t165, ptr %a166 + %t167 = load ptr, ptr %a1 + %t168 = load { ptr, i64, i64 }, ptr %a163 + call void @finch.gen.br(ptr %t167, { ptr, i64, i64 } %t168) + %t169 = load ptr, ptr %a1 + %t170 = load { ptr, i64, i64 }, ptr %a163 + call void @finch.gen.label(ptr %t169, { ptr, i64, i64 } %t170) + %t171 = load ptr, ptr %a1 + %t172 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t171, { ptr, i64, i64 } %t172) + %t173 = load ptr, ptr %a1 + %t174 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.label(ptr %t173, { ptr, i64, i64 } %t174) + %t175 = load ptr, ptr %a1 + %t176 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.br(ptr %t175, { ptr, i64, i64 } %t176) + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a166 + call void @finch.gen.label(ptr %t177, { ptr, i64, i64 } %t178) + %t179 = load ptr, ptr %a1 + %t180 = load ptr, ptr %a1 + %t181 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t182 = load %S.ast.Type, ptr %t181 + %t183 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t180, %S.ast.Type %t182) + store { ptr, i64, i64 } { ptr @.str.3937, i64 4, i64 0 }, ptr %a185 + store { ptr, i64, i64 } %t183, ptr %a186 + call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) + store { ptr, i64, i64 } %t183, ptr %a187 + call void @finch_str_drop(ptr %a187) + %t188 = load { ptr, i64, i64 }, ptr %a184 + store { ptr, i64, i64 } %t188, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.3938, i64 3, i64 0 }, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t188, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load { ptr, i64, i64 }, ptr %a189 + %t194 = load { ptr, i64, i64 }, ptr %a159 + store { ptr, i64, i64 } %t193, ptr %a196 + store { ptr, i64, i64 } %t194, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t193, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a195 + store { ptr, i64, i64 } %t199, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.3939, i64 3, i64 0 }, ptr %a202 + call void @finch_str_concat(ptr %a200, ptr %a201, ptr %a202) + store { ptr, i64, i64 } %t199, ptr %a203 + call void @finch_str_drop(ptr %a203) + %t204 = load { ptr, i64, i64 }, ptr %a200 + %t205 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t204, ptr %a207 + store { ptr, i64, i64 } %t205, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + store { ptr, i64, i64 } %t204, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t210, ptr %a212 + store { ptr, i64, i64 } { ptr @.str.3940, i64 6, i64 0 }, ptr %a213 + call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) + store { ptr, i64, i64 } %t210, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a211 + %t216 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 0 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t215, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t215, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.3941, i64 3, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t227, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t227, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.3942, i64 2, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t179, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t238, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t239, 0 + %t242 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t243 = load %S.ast.Type, ptr %t242 + store %S.ast.Type %t243, ptr %a244 + call void @finch.copy.S_ast_Type(ptr %a245, ptr %a244) + %t246 = load %S.ast.Type, ptr %a245 + %t247 = insertvalue %S.gen.Val %t241, %S.ast.Type %t246, 1 + %t248 = load ptr, ptr %a1 + %t249 = getelementptr inbounds %S.gen.Val, ptr %a19, i32 0, i32 1 + %t250 = load %S.ast.Type, ptr %t249 + %t251 = call i1 @finch.gen.owning(ptr %t248, %S.ast.Type %t250) + %t252 = insertvalue %S.gen.Val %t247, i1 %t251, 2 + call void @finch_str_drop(ptr %a166) + call void @finch_str_drop(ptr %a163) + call void @finch_str_drop(ptr %a159) + call void @finch.drop.S_gen_Val(ptr %a155) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a22) + call void @finch.drop.S_gen_Val(ptr %a19) + call void @finch.drop.S_gen_Fallible(ptr %a13) + ret %S.gen.Val %t252 +} + +define internal %S.gen.Val @finch.gen.exprWant(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.3943, i64 5, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then6137, label %endif6139 +then6137: + %t10 = load ptr, ptr %a1 + %t11 = load %S.ast.Node, ptr %a2 + %t12 = load %S.ast.Type, ptr %a3 + %t13 = call %S.gen.Val @finch.gen.arrayLit(ptr %t10, %S.ast.Node %t11, %S.ast.Type %t12) + ret %S.gen.Val %t13 +endif6139: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3944, i64 3, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then6140, label %endif6142 +then6140: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Node, ptr %a2 + %t22 = load %S.ast.Type, ptr %a3 + %t23 = call %S.gen.Val @finch.gen.mapLit(ptr %t20, %S.ast.Node %t21, %S.ast.Type %t22) + ret %S.gen.Val %t23 +endif6142: + %t24 = load ptr, ptr %a1 + %t25 = load %S.ast.Node, ptr %a2 + %t26 = call %S.gen.Val @finch.gen.expr(ptr %t24, %S.ast.Node %t25) + ret %S.gen.Val %t26 +} + +define internal %S.gen.Val @finch.gen.expr(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca i64, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca i64, align 16 + %a47 = alloca i8, align 16 + %a52 = alloca i64, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca i64, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca %S.gen.Ref, align 16 + %a186 = alloca %S.gen.Val, align 16 + %a187 = alloca %S.gen.Val, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca %S.ast.Type, align 16 + %a205 = alloca %S.ast.Type, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca %S.ast.Type, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca %S.ast.Type, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.3945, i64 3, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br i1 %t13, label %then6143, label %endif6145 +then6143: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.3947, i64 2, i64 0 }, ptr %a18 + %t19 = call i32 @finch_str_starts(ptr %a16, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br label %logic.from6146 +logic.from6146: + br i1 %t20, label %logic.end6148, label %logic.rhs6147 +logic.rhs6147: + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.3949, i64 2, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_starts(ptr %a23, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br label %logic.rend6149 +logic.rend6149: + br label %logic.end6148 +logic.end6148: + %t28 = phi i1 [ true, %logic.from6146 ], [ %t27, %logic.rend6149 ] + br i1 %t28, label %then6150, label %endif6152 +then6150: + store i64 0, ptr %a29 + %t30 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t31 = load { ptr, i64, i64 }, ptr %t30 + store { ptr, i64, i64 } %t31, ptr %a32 + %t34 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i32 0, i32 1 + %t36 = load i64, ptr %t35 + call void @finch_str_sub(ptr %a33, ptr %a32, i64 2, i64 %t36, ptr @.str.3950, i64 3339) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a38 + store i64 0, ptr %a39 + br label %each.cond6153 +each.cond6153: + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a38, i32 0, i32 1 + %t41 = load i64, ptr %t40 + %t42 = load i64, ptr %a39 + %t43 = icmp slt i64 %t42, %t41 + br i1 %t43, label %each.body6154, label %each.end6156 +each.body6154: + %t44 = load ptr, ptr %a38 + %t45 = getelementptr inbounds i8, ptr %t44, i64 %t42 + %t46 = load i8, ptr %t45 + store i8 %t46, ptr %a47 + %t48 = load i8, ptr %a47 + %t49 = zext i8 %t48 to i64 + %t50 = zext i8 48 to i64 + %t51 = sub i64 %t49, %t50 + store i64 %t51, ptr %a52 + %t53 = load i8, ptr %a47 + %t54 = icmp uge i8 %t53, 97 + br label %logic.from6157 +logic.from6157: + br i1 %t54, label %logic.rhs6158, label %logic.end6159 +logic.rhs6158: + %t55 = load i8, ptr %a47 + %t56 = icmp ule i8 %t55, 102 + br label %logic.rend6160 +logic.rend6160: + br label %logic.end6159 +logic.end6159: + %t57 = phi i1 [ false, %logic.from6157 ], [ %t56, %logic.rend6160 ] + br i1 %t57, label %then6161, label %endif6163 +then6161: + %t58 = load i8, ptr %a47 + %t59 = zext i8 %t58 to i64 + %t60 = zext i8 97 to i64 + %t61 = sub i64 %t59, %t60 + %t62 = add i64 %t61, 10 + store i64 %t62, ptr %a52 + br label %endif6163 +endif6163: + %t63 = load i8, ptr %a47 + %t64 = icmp uge i8 %t63, 65 + br label %logic.from6164 +logic.from6164: + br i1 %t64, label %logic.rhs6165, label %logic.end6166 +logic.rhs6165: + %t65 = load i8, ptr %a47 + %t66 = icmp ule i8 %t65, 70 + br label %logic.rend6167 +logic.rend6167: + br label %logic.end6166 +logic.end6166: + %t67 = phi i1 [ false, %logic.from6164 ], [ %t66, %logic.rend6167 ] + br i1 %t67, label %then6168, label %endif6170 +then6168: + %t68 = load i8, ptr %a47 + %t69 = zext i8 %t68 to i64 + %t70 = zext i8 65 to i64 + %t71 = sub i64 %t69, %t70 + %t72 = add i64 %t71, 10 + store i64 %t72, ptr %a52 + br label %endif6170 +endif6170: + %t73 = load i64, ptr %a29 + %t74 = mul i64 %t73, 16 + %t75 = load i64, ptr %a52 + %t76 = add i64 %t74, %t75 + store i64 %t76, ptr %a29 + br label %each.step6155 +each.step6155: + %t77 = load i64, ptr %a39 + %t78 = add i64 %t77, 1 + store i64 %t78, ptr %a39 + br label %each.cond6153 +each.end6156: + call void @finch_str_drop(ptr %a38) + %t79 = load i64, ptr %a29 + call void @finch_str_from_int(ptr %a80, i64 %t79) + %t81 = load { ptr, i64, i64 }, ptr %a80 + %t82 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t81, 0 + %t83 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3951, i64 3, i64 0 }) + %t84 = insertvalue %S.gen.Val %t82, %S.ast.Type %t83, 1 + %t85 = insertvalue %S.gen.Val %t84, i1 true, 3 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t85 +endif6152: + %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } %t87, ptr %a88 + %t89 = call i64 @finch_str_to_int(ptr %a88, ptr @.str.3952, i64 3351) + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t91, 0 + %t93 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3953, i64 3, i64 0 }) + %t94 = insertvalue %S.gen.Val %t92, %S.ast.Type %t93, 1 + %t95 = insertvalue %S.gen.Val %t94, i1 true, 3 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t95 +endif6145: + %t96 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.3954, i64 5, i64 0 }, ptr %a98 + %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) + %t100 = icmp ne i32 %t99, 0 + br i1 %t100, label %then6171, label %endif6173 +then6171: + %t101 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } %t102, ptr %a103 + call void @finch_str_copy(ptr %a104, ptr %a103) + %t105 = load { ptr, i64, i64 }, ptr %a104 + %t106 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t105, 0 + %t107 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3955, i64 5, i64 0 }) + %t108 = insertvalue %S.gen.Val %t106, %S.ast.Type %t107, 1 + %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t109 +endif6173: + %t110 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t110, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.3956, i64 4, i64 0 }, ptr %a112 + %t113 = call i32 @finch_str_eq(ptr %a111, ptr %a112) + %t114 = icmp ne i32 %t113, 0 + br i1 %t114, label %then6174, label %endif6176 +then6174: + %t115 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_copy(ptr %a118, ptr %a117) + %t119 = load { ptr, i64, i64 }, ptr %a118 + %t120 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t119, 0 + %t121 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3957, i64 4, i64 0 }) + %t122 = insertvalue %S.gen.Val %t120, %S.ast.Type %t121, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t122 +endif6176: + %t123 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t123, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.3958, i64 4, i64 0 }, ptr %a125 + %t126 = call i32 @finch_str_eq(ptr %a124, ptr %a125) + %t127 = icmp ne i32 %t126, 0 + br i1 %t127, label %then6177, label %endif6179 +then6177: + %t128 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t129 = load { ptr, i64, i64 }, ptr %t128 + %t130 = extractvalue { ptr, i64, i64 } %t129, 1 + %t131 = icmp uge i64 0, %t130 + br i1 %t131, label %range6180, label %inrange6181 +range6180: + call void @finch_panic_index(ptr @.str.3959, i64 3360, i64 0, i64 %t130) + unreachable +inrange6181: + %t132 = extractvalue { ptr, i64, i64 } %t129, 0 + %t133 = getelementptr inbounds i8, ptr %t132, i64 0 + %t134 = load i8, ptr %t133 + %t135 = zext i8 %t134 to i64 + store i64 %t135, ptr %a136 + %t137 = load i64, ptr %a136 + call void @finch_str_from_int(ptr %a138, i64 %t137) + %t139 = load { ptr, i64, i64 }, ptr %a138 + %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t141 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3960, i64 4, i64 0 }) + %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t142 +endif6179: + %t143 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t143, ptr %a144 + store { ptr, i64, i64 } { ptr @.str.3961, i64 3, i64 0 }, ptr %a145 + %t146 = call i32 @finch_str_eq(ptr %a144, ptr %a145) + %t147 = icmp ne i32 %t146, 0 + br i1 %t147, label %then6182, label %endif6184 +then6182: + %t148 = load ptr, ptr %a1 + %t149 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 4 + %t150 = load { ptr, i64, i64 }, ptr %t149 + %t151 = call %S.gen.Val @finch.gen.strConst(ptr %t148, { ptr, i64, i64 } %t150) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t151 +endif6184: + %t152 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t152, ptr %a153 + store { ptr, i64, i64 } { ptr @.str.3962, i64 4, i64 0 }, ptr %a154 + %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) + %t156 = icmp ne i32 %t155, 0 + br i1 %t156, label %then6185, label %endif6187 +then6185: + %t157 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } { ptr @.str.3963, i64 4, i64 0 }, 0 + %t158 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3964, i64 4, i64 0 }) + %t159 = insertvalue %S.gen.Val %t157, %S.ast.Type %t158, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t159 +endif6187: + %t160 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t160, ptr %a161 + store { ptr, i64, i64 } { ptr @.str.3965, i64 3, i64 0 }, ptr %a162 + %t163 = call i32 @finch_str_eq(ptr %a161, ptr %a162) + %t164 = icmp ne i32 %t163, 0 + br label %logic.from6188 +logic.from6188: + br i1 %t164, label %logic.end6190, label %logic.rhs6189 +logic.rhs6189: + %t165 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t165, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.3966, i64 6, i64 0 }, ptr %a167 + %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) + %t169 = icmp ne i32 %t168, 0 + br label %logic.rend6191 +logic.rend6191: + br label %logic.end6190 +logic.end6190: + %t170 = phi i1 [ true, %logic.from6188 ], [ %t169, %logic.rend6191 ] + br label %logic.from6192 +logic.from6192: + br i1 %t170, label %logic.end6194, label %logic.rhs6193 +logic.rhs6193: + %t171 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.3967, i64 5, i64 0 }, ptr %a173 + %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) + %t175 = icmp ne i32 %t174, 0 + br label %logic.rend6195 +logic.rend6195: + br label %logic.end6194 +logic.end6194: + %t176 = phi i1 [ true, %logic.from6192 ], [ %t175, %logic.rend6195 ] + br i1 %t176, label %then6196, label %endif6198 +then6196: + %t177 = load ptr, ptr %a1 + %t178 = load %S.ast.Node, ptr %a2 + %t179 = call %S.gen.Ref @finch.gen.ref(ptr %t177, %S.ast.Node %t178, i1 false) + store %S.gen.Ref %t179, ptr %a180 + %t181 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 0 + %t182 = load i1, ptr %t181 + %t183 = xor i1 %t182, true + br i1 %t183, label %then6199, label %endif6201 +then6199: + %t184 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 2 + %t185 = load %S.gen.Val, ptr %t184 + store %S.gen.Val %t185, ptr %a186 + call void @finch.copy.S_gen_Val(ptr %a187, ptr %a186) + %t188 = load %S.gen.Val, ptr %a187 + call void @finch.drop.S_gen_Ref(ptr %a180) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t188 +endif6201: + %t189 = load ptr, ptr %a1 + %t190 = load ptr, ptr %a1 + %t191 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 + %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 1 + %t193 = load %S.ast.Type, ptr %t192 + %t194 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t190, %S.ast.Type %t193) + %t195 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 + %t196 = getelementptr inbounds %S.gen.Place, ptr %t195, i32 0, i32 0 + %t197 = load { ptr, i64, i64 }, ptr %t196 + %t198 = call { ptr, i64, i64 } @finch.gen.load(ptr %t189, { ptr, i64, i64 } %t194, { ptr, i64, i64 } %t197) + store { ptr, i64, i64 } %t194, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t198, 0 + %t201 = getelementptr inbounds %S.gen.Ref, ptr %a180, i32 0, i32 1 + %t202 = getelementptr inbounds %S.gen.Place, ptr %t201, i32 0, i32 1 + %t203 = load %S.ast.Type, ptr %t202 + store %S.ast.Type %t203, ptr %a204 + call void @finch.copy.S_ast_Type(ptr %a205, ptr %a204) + %t206 = load %S.ast.Type, ptr %a205 + %t207 = insertvalue %S.gen.Val %t200, %S.ast.Type %t206, 1 + call void @finch.drop.S_gen_Ref(ptr %a180) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t207 +endif6198: + %t208 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.3968, i64 5, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br i1 %t212, label %then6202, label %endif6204 +then6202: + %t213 = load ptr, ptr %a1 + %t214 = load %S.ast.Node, ptr %a2 + %t215 = call %S.gen.Val @finch.gen.matchGen(ptr %t213, %S.ast.Node %t214, i1 true) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t215 +endif6204: + %t216 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t216, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.3969, i64 3, i64 0 }, ptr %a218 + %t219 = call i32 @finch_str_eq(ptr %a217, ptr %a218) + %t220 = icmp ne i32 %t219, 0 + br i1 %t220, label %then6205, label %endif6207 +then6205: + %t221 = load ptr, ptr %a1 + %t222 = load %S.ast.Node, ptr %a2 + %t223 = call %S.gen.Val @finch.gen.tryExpr(ptr %t221, %S.ast.Node %t222) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t223 +endif6207: + %t224 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t224, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.3970, i64 2, i64 0 }, ptr %a226 + %t227 = call i32 @finch_str_eq(ptr %a225, ptr %a226) + %t228 = icmp ne i32 %t227, 0 + br i1 %t228, label %then6208, label %endif6210 +then6208: + %t229 = load ptr, ptr %a1 + %t230 = load %S.ast.Node, ptr %a2 + %t231 = call %S.gen.Val @finch.gen.orElse(ptr %t229, %S.ast.Node %t230, i1 false) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t231 +endif6210: + %t232 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t232, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.3971, i64 5, i64 0 }, ptr %a234 + %t235 = call i32 @finch_str_eq(ptr %a233, ptr %a234) + %t236 = icmp ne i32 %t235, 0 + br i1 %t236, label %then6211, label %endif6213 +then6211: + %t237 = load ptr, ptr %a1 + %t238 = load %S.ast.Node, ptr %a2 + %t239 = call %S.gen.Val @finch.gen.unary(ptr %t237, %S.ast.Node %t238) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t239 +endif6213: + %t240 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t240, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.3972, i64 6, i64 0 }, ptr %a242 + %t243 = call i32 @finch_str_eq(ptr %a241, ptr %a242) + %t244 = icmp ne i32 %t243, 0 + br i1 %t244, label %then6214, label %endif6216 +then6214: + %t245 = load ptr, ptr %a1 + %t246 = load %S.ast.Node, ptr %a2 + %t247 = call %S.gen.Val @finch.gen.binary(ptr %t245, %S.ast.Node %t246) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t247 +endif6216: + %t248 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t248, ptr %a249 + store { ptr, i64, i64 } { ptr @.str.3973, i64 4, i64 0 }, ptr %a250 + %t251 = call i32 @finch_str_eq(ptr %a249, ptr %a250) + %t252 = icmp ne i32 %t251, 0 + br i1 %t252, label %then6217, label %endif6219 +then6217: + %t253 = load ptr, ptr %a1 + %t254 = load %S.ast.Node, ptr %a2 + %t255 = call %S.gen.Val @finch.gen.call(ptr %t253, %S.ast.Node %t254) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t255 +endif6219: + %t256 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t256, ptr %a257 + store { ptr, i64, i64 } { ptr @.str.3974, i64 6, i64 0 }, ptr %a258 + %t259 = call i32 @finch_str_eq(ptr %a257, ptr %a258) + %t260 = icmp ne i32 %t259, 0 + br i1 %t260, label %then6220, label %endif6222 +then6220: + %t261 = load ptr, ptr %a1 + %t262 = load %S.ast.Node, ptr %a2 + %t263 = call %S.gen.Val @finch.gen.method(ptr %t261, %S.ast.Node %t262) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t263 +endif6222: + %t264 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t264, ptr %a265 + store { ptr, i64, i64 } { ptr @.str.3975, i64 5, i64 0 }, ptr %a266 + %t267 = call i32 @finch_str_eq(ptr %a265, ptr %a266) + %t268 = icmp ne i32 %t267, 0 + br i1 %t268, label %then6223, label %endif6225 +then6223: + %t269 = load ptr, ptr %a1 + %t270 = load %S.ast.Node, ptr %a2 + %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3976, i64 4, i64 0 }) + %t272 = call %S.gen.Val @finch.gen.arrayLit(ptr %t269, %S.ast.Node %t270, %S.ast.Type %t271) + store %S.ast.Type %t271, ptr %a273 + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t272 +endif6225: + %t274 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t274, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.3977, i64 3, i64 0 }, ptr %a276 + %t277 = call i32 @finch_str_eq(ptr %a275, ptr %a276) + %t278 = icmp ne i32 %t277, 0 + br i1 %t278, label %then6226, label %endif6228 +then6226: + %t279 = load ptr, ptr %a1 + %t280 = load %S.ast.Node, ptr %a2 + %t281 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3978, i64 4, i64 0 }) + %t282 = call %S.gen.Val @finch.gen.mapLit(ptr %t279, %S.ast.Node %t280, %S.ast.Type %t281) + store %S.ast.Type %t281, ptr %a283 + call void @finch.drop.S_ast_Type(ptr %a283) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t282 +endif6228: + %t284 = load ptr, ptr %a1 + %t285 = load %S.ast.Node, ptr %a2 + %t286 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.3979, i64 19, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a287 + call void @finch.gen.fail(ptr %t284, %S.ast.Node %t285, { ptr, i64, i64 } %t290) + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val zeroinitializer +} + +define internal %S.gen.Val @finch.gen.unary(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a12 = alloca %S.gen.Val, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.ast.Type, align 16 + %a31 = alloca %S.gen.Val, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a103 = alloca %S.ast.Type, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca %S.ast.Type, align 16 + %a144 = alloca %S.ast.Type, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca %S.ast.Type, align 16 + %a158 = alloca %S.ast.Type, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca %S.ast.Type, align 16 + %a190 = alloca %S.ast.Type, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca %S.ast.Type, align 16 + %a224 = alloca %S.ast.Type, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t5 = load { ptr, i64, i64 }, ptr %t4 + %t6 = extractvalue { ptr, i64, i64 } %t5, 1 + %t7 = icmp uge i64 0, %t6 + br i1 %t7, label %range6229, label %inrange6230 +range6229: + call void @finch_panic_index(ptr @.str.3980, i64 3408, i64 0, i64 %t6) + unreachable +inrange6230: + %t8 = extractvalue { ptr, i64, i64 } %t5, 0 + %t9 = getelementptr inbounds %S.ast.Node, ptr %t8, i64 0 + %t10 = load %S.ast.Node, ptr %t9 + %t11 = call %S.gen.Val @finch.gen.expr(ptr %t3, %S.ast.Node %t10) + store %S.gen.Val %t11, ptr %a12 + %t13 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.3981, i64 1, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br i1 %t18, label %then6231, label %endif6233 +then6231: + %t19 = load ptr, ptr %a1 + %t20 = load %S.gen.Val, ptr %a12 + %t21 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3982, i64 4, i64 0 }) + %t22 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 0, %t24 + br i1 %t25, label %range6234, label %inrange6235 +range6234: + call void @finch_panic_index(ptr @.str.3983, i64 3410, i64 0, i64 %t24) + unreachable +inrange6235: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds %S.ast.Node, ptr %t26, i64 0 + %t28 = load %S.ast.Node, ptr %t27 + %t29 = call %S.gen.Val @finch.gen.coerce(ptr %t19, %S.gen.Val %t20, %S.ast.Type %t21, %S.ast.Node %t28, { ptr, i64, i64 } { ptr @.str.3984, i64 19, i64 0 }) + store %S.ast.Type %t21, ptr %a30 + call void @finch.drop.S_ast_Type(ptr %a30) + store %S.gen.Val %t29, ptr %a31 + %t32 = load ptr, ptr %a1 + %t33 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } { ptr @.str.3985, i64 7, i64 0 }, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.3986, i64 6, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + %t44 = call { ptr, i64, i64 } @finch.gen.op(ptr %t32, { ptr, i64, i64 } %t43) + store { ptr, i64, i64 } %t43, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t44, 0 + %t47 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.3987, i64 4, i64 0 }) + %t48 = insertvalue %S.gen.Val %t46, %S.ast.Type %t47, 1 + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t48 +endif6233: + %t49 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.3988, i64 1, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %then6236, label %endif6238 +then6236: + %t55 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t56 = load %S.ast.Type, ptr %t55 + %t57 = call i1 @finch.gen.isInt(%S.ast.Type %t56) + %t58 = xor i1 %t57, true + br i1 %t58, label %then6239, label %endif6241 +then6239: + %t59 = load ptr, ptr %a1 + %t60 = load %S.ast.Node, ptr %a2 + %t61 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t62 = load %S.ast.Type, ptr %t61 + %t63 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t62) + store { ptr, i64, i64 } { ptr @.str.3989, i64 45, i64 0 }, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t63, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a64 + call void @finch.gen.fail(ptr %t59, %S.ast.Node %t60, { ptr, i64, i64 } %t68) + store { ptr, i64, i64 } %t68, ptr %a69 + call void @finch_str_drop(ptr %a69) + br label %endif6241 +endif6241: + %t70 = load ptr, ptr %a1 + %t71 = load ptr, ptr %a1 + %t72 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t73 = load %S.ast.Type, ptr %t72 + %t74 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t71, %S.ast.Type %t73) + store { ptr, i64, i64 } { ptr @.str.3990, i64 4, i64 0 }, ptr %a76 + store { ptr, i64, i64 } %t74, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.3991, i64 1, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + %t85 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t86 = load { ptr, i64, i64 }, ptr %t85 + store { ptr, i64, i64 } %t84, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t84, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.3992, i64 4, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + %t97 = call { ptr, i64, i64 } @finch.gen.op(ptr %t70, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t97, 0 + %t100 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t101 = load %S.ast.Type, ptr %t100 + store %S.ast.Type %t101, ptr %a102 + call void @finch.copy.S_ast_Type(ptr %a103, ptr %a102) + %t104 = load %S.ast.Type, ptr %a103 + %t105 = insertvalue %S.gen.Val %t99, %S.ast.Type %t104, 1 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t105 +endif6238: + %t106 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t107 = load %S.ast.Type, ptr %t106 + %t108 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t107) + br i1 %t108, label %then6242, label %endif6244 +then6242: + %t109 = load ptr, ptr %a1 + %t110 = load %S.ast.Node, ptr %a2 + %t111 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t112 = load %S.ast.Type, ptr %t111 + %t113 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t112) + store { ptr, i64, i64 } %t113, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.3993, i64 34, i64 0 }, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t113, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a114 + call void @finch.gen.fail(ptr %t109, %S.ast.Node %t110, { ptr, i64, i64 } %t118) + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_drop(ptr %a119) + br label %endif6244 +endif6244: + %t120 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t121 = load %S.ast.Type, ptr %t120 + %t122 = call i1 @finch.gen.isSigned(%S.ast.Type %t121) + br i1 %t122, label %then6245, label %endif6247 +then6245: + %t123 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 3 + %t124 = load i1, ptr %t123 + br i1 %t124, label %then6248, label %endif6250 +then6248: + %t125 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t126, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.3995, i64 1, i64 0 }, ptr %a129 + %t130 = call i32 @finch_str_starts(ptr %a127, ptr %a129) + %t131 = icmp ne i32 %t130, 0 + br i1 %t131, label %then6251, label %endif6253 +then6251: + %t132 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + %t136 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t136, i32 0, i32 1 + %t138 = load i64, ptr %t137 + call void @finch_str_sub(ptr %a135, ptr %a134, i64 1, i64 %t138, ptr @.str.3996, i64 3425) + %t139 = load { ptr, i64, i64 }, ptr %a135 + %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t141 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t142 = load %S.ast.Type, ptr %t141 + store %S.ast.Type %t142, ptr %a143 + call void @finch.copy.S_ast_Type(ptr %a144, ptr %a143) + %t145 = load %S.ast.Type, ptr %a144 + %t146 = insertvalue %S.gen.Val %t140, %S.ast.Type %t145, 1 + %t147 = insertvalue %S.gen.Val %t146, i1 true, 3 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t147 +endif6253: + %t148 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t149 = load { ptr, i64, i64 }, ptr %t148 + store { ptr, i64, i64 } { ptr @.str.3997, i64 1, i64 0 }, ptr %a151 + store { ptr, i64, i64 } %t149, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + %t153 = load { ptr, i64, i64 }, ptr %a150 + %t154 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t153, 0 + %t155 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t156 = load %S.ast.Type, ptr %t155 + store %S.ast.Type %t156, ptr %a157 + call void @finch.copy.S_ast_Type(ptr %a158, ptr %a157) + %t159 = load %S.ast.Type, ptr %a158 + %t160 = insertvalue %S.gen.Val %t154, %S.ast.Type %t159, 1 + %t161 = insertvalue %S.gen.Val %t160, i1 true, 3 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t161 +endif6250: + %t162 = load ptr, ptr %a1 + %t163 = load ptr, ptr %a1 + %t164 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t165 = load %S.ast.Type, ptr %t164 + %t166 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t163, %S.ast.Type %t165) + store { ptr, i64, i64 } { ptr @.str.3998, i64 4, i64 0 }, ptr %a168 + store { ptr, i64, i64 } %t166, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t166, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t171, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.3999, i64 4, i64 0 }, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t171, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a172 + %t177 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t178 = load { ptr, i64, i64 }, ptr %t177 + store { ptr, i64, i64 } %t176, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t176, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t162, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t184, 0 + %t187 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t188 = load %S.ast.Type, ptr %t187 + store %S.ast.Type %t188, ptr %a189 + call void @finch.copy.S_ast_Type(ptr %a190, ptr %a189) + %t191 = load %S.ast.Type, ptr %a190 + %t192 = insertvalue %S.gen.Val %t186, %S.ast.Type %t191, 1 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t192 +endif6247: + %t193 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t194 = load %S.ast.Type, ptr %t193 + %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) + br i1 %t195, label %then6254, label %endif6256 +then6254: + %t196 = load ptr, ptr %a1 + %t197 = load ptr, ptr %a1 + %t198 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t199 = load %S.ast.Type, ptr %t198 + %t200 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t197, %S.ast.Type %t199) + store { ptr, i64, i64 } { ptr @.str.4000, i64 5, i64 0 }, ptr %a202 + store { ptr, i64, i64 } %t200, ptr %a203 + call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) + store { ptr, i64, i64 } %t200, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a201 + store { ptr, i64, i64 } %t205, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.4001, i64 1, i64 0 }, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + store { ptr, i64, i64 } %t205, ptr %a209 + call void @finch_str_drop(ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a206 + %t211 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 0 + %t212 = load { ptr, i64, i64 }, ptr %t211 + store { ptr, i64, i64 } %t210, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t210, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + %t218 = call { ptr, i64, i64 } @finch.gen.op(ptr %t196, { ptr, i64, i64 } %t217) + store { ptr, i64, i64 } %t217, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t218, 0 + %t221 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t222 = load %S.ast.Type, ptr %t221 + store %S.ast.Type %t222, ptr %a223 + call void @finch.copy.S_ast_Type(ptr %a224, ptr %a223) + %t225 = load %S.ast.Type, ptr %a224 + %t226 = insertvalue %S.gen.Val %t220, %S.ast.Type %t225, 1 + call void @finch.drop.S_gen_Val(ptr %a12) + ret %S.gen.Val %t226 +endif6256: + %t227 = load ptr, ptr %a1 + %t228 = load %S.ast.Node, ptr %a2 + %t229 = getelementptr inbounds %S.gen.Val, ptr %a12, i32 0, i32 1 + %t230 = load %S.ast.Type, ptr %t229 + %t231 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t230) + store { ptr, i64, i64 } { ptr @.str.4002, i64 26, i64 0 }, ptr %a233 + store { ptr, i64, i64 } %t231, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t231, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + call void @finch.gen.fail(ptr %t227, %S.ast.Node %t228, { ptr, i64, i64 } %t236) + store { ptr, i64, i64 } %t236, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load %S.gen.Val, ptr %a12 + ret %S.gen.Val %t238 +} + +define internal void @finch.gen.badOperands(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.gen.Val, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.gen.Val %p2, ptr %a3 + store %S.gen.Val %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.4003, i64 11, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.4004, i64 5, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t17 = load %S.ast.Type, ptr %t16 + %t18 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t17) + store { ptr, i64, i64 } %t15, ptr %a20 + store { ptr, i64, i64 } %t18, ptr %a21 + call void @finch_str_concat(ptr %a19, ptr %a20, ptr %a21) + store { ptr, i64, i64 } %t15, ptr %a22 + call void @finch_str_drop(ptr %a22) + store { ptr, i64, i64 } %t18, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t27 = load %S.ast.Type, ptr %t26 + %t28 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 + %t29 = load %S.ast.Type, ptr %t28 + %t30 = call i1 @finch.ast.same(%S.ast.Type %t27, %S.ast.Type %t29) + %t31 = xor i1 %t30, true + br i1 %t31, label %then6257, label %endif6259 +then6257: + %t32 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t32, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.4005, i64 5, i64 0 }, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a33 + %t37 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 + %t38 = load %S.ast.Type, ptr %t37 + %t39 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t38) + store { ptr, i64, i64 } %t36, ptr %a41 + store { ptr, i64, i64 } %t39, ptr %a42 + call void @finch_str_concat(ptr %a40, ptr %a41, ptr %a42) + store { ptr, i64, i64 } %t36, ptr %a43 + call void @finch_str_drop(ptr %a43) + store { ptr, i64, i64 } %t39, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a40 + %t46 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t45, ptr %a25 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %endif6259 +endif6259: + %t48 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t48, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.4006, i64 1, i64 0 }, ptr %a50 + %t51 = call i32 @finch_str_eq(ptr %a49, ptr %a50) + %t52 = icmp ne i32 %t51, 0 + br label %logic.from6260 +logic.from6260: + br i1 %t52, label %logic.rhs6261, label %logic.end6262 +logic.rhs6261: + %t53 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t54 = getelementptr inbounds %S.ast.Type, ptr %t53, i32 0, i32 0 + %t55 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t55, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.4007, i64 3, i64 0 }, ptr %a57 + %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) + %t59 = icmp ne i32 %t58, 0 + br label %logic.from6263 +logic.from6263: + br i1 %t59, label %logic.end6265, label %logic.rhs6264 +logic.rhs6264: + %t60 = getelementptr inbounds %S.gen.Val, ptr %a4, i32 0, i32 1 + %t61 = getelementptr inbounds %S.ast.Type, ptr %t60, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.4008, i64 3, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br label %logic.rend6266 +logic.rend6266: + br label %logic.end6265 +logic.end6265: + %t67 = phi i1 [ true, %logic.from6263 ], [ %t66, %logic.rend6266 ] + br label %logic.rend6267 +logic.rend6267: + br label %logic.end6262 +logic.end6262: + %t68 = phi i1 [ false, %logic.from6260 ], [ %t67, %logic.rend6267 ] + br i1 %t68, label %then6268, label %endif6270 +then6268: + %t69 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.4009, i64 48, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a70 + %t74 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t73, ptr %a25 + store { ptr, i64, i64 } %t74, ptr %a75 + call void @finch_str_drop(ptr %a75) + br label %endif6270 +endif6270: + %t76 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.4010, i64 1, i64 0 }, ptr %a78 + %t79 = call i32 @finch_str_eq(ptr %a77, ptr %a78) + %t80 = icmp ne i32 %t79, 0 + br label %logic.from6271 +logic.from6271: + br i1 %t80, label %logic.end6273, label %logic.rhs6272 +logic.rhs6272: + %t81 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.4011, i64 1, i64 0 }, ptr %a83 + %t84 = call i32 @finch_str_eq(ptr %a82, ptr %a83) + %t85 = icmp ne i32 %t84, 0 + br label %logic.rend6274 +logic.rend6274: + br label %logic.end6273 +logic.end6273: + %t86 = phi i1 [ true, %logic.from6271 ], [ %t85, %logic.rend6274 ] + br label %logic.from6275 +logic.from6275: + br i1 %t86, label %logic.rhs6276, label %logic.end6277 +logic.rhs6276: + %t87 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i32 0, i32 0 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.4012, i64 4, i64 0 }, ptr %a91 + %t92 = call i32 @finch_str_eq(ptr %a90, ptr %a91) + %t93 = icmp ne i32 %t92, 0 + br label %logic.rend6278 +logic.rend6278: + br label %logic.end6277 +logic.end6277: + %t94 = phi i1 [ false, %logic.from6275 ], [ %t93, %logic.rend6278 ] + br i1 %t94, label %then6279, label %else6280 +then6279: + %t95 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t95, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.4013, i64 1, i64 0 }, ptr %a97 + %t98 = call i32 @finch_str_eq(ptr %a96, ptr %a97) + %t99 = icmp ne i32 %t98, 0 + br i1 %t99, label %then6282, label %else6283 +then6282: + %t100 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.4014, i64 26, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a101 + %t105 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t104, ptr %a25 + store { ptr, i64, i64 } %t105, ptr %a106 + call void @finch_str_drop(ptr %a106) + br label %endif6284 +else6283: + %t107 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.4015, i64 26, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + %t112 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t111, ptr %a25 + store { ptr, i64, i64 } %t112, ptr %a113 + call void @finch_str_drop(ptr %a113) + br label %endif6284 +endif6284: + br label %endif6281 +else6280: + %t114 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.4016, i64 1, i64 0 }, ptr %a116 + %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) + %t118 = icmp ne i32 %t117, 0 + br label %logic.from6285 +logic.from6285: + br i1 %t118, label %logic.end6287, label %logic.rhs6286 +logic.rhs6286: + %t119 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t119, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.4017, i64 1, i64 0 }, ptr %a121 + %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) + %t123 = icmp ne i32 %t122, 0 + br label %logic.rend6288 +logic.rend6288: + br label %logic.end6287 +logic.end6287: + %t124 = phi i1 [ true, %logic.from6285 ], [ %t123, %logic.rend6288 ] + br label %logic.from6289 +logic.from6289: + br i1 %t124, label %logic.end6291, label %logic.rhs6290 +logic.rhs6290: + %t125 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t125, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.4018, i64 1, i64 0 }, ptr %a127 + %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) + %t129 = icmp ne i32 %t128, 0 + br label %logic.rend6292 +logic.rend6292: + br label %logic.end6291 +logic.end6291: + %t130 = phi i1 [ true, %logic.from6289 ], [ %t129, %logic.rend6292 ] + br label %logic.from6293 +logic.from6293: + br i1 %t130, label %logic.end6295, label %logic.rhs6294 +logic.rhs6294: + %t131 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t131, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.4019, i64 2, i64 0 }, ptr %a133 + %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) + %t135 = icmp ne i32 %t134, 0 + br label %logic.rend6296 +logic.rend6296: + br label %logic.end6295 +logic.end6295: + %t136 = phi i1 [ true, %logic.from6293 ], [ %t135, %logic.rend6296 ] + br label %logic.from6297 +logic.from6297: + br i1 %t136, label %logic.end6299, label %logic.rhs6298 +logic.rhs6298: + %t137 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t137, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.4020, i64 2, i64 0 }, ptr %a139 + %t140 = call i32 @finch_str_eq(ptr %a138, ptr %a139) + %t141 = icmp ne i32 %t140, 0 + br label %logic.rend6300 +logic.rend6300: + br label %logic.end6299 +logic.end6299: + %t142 = phi i1 [ true, %logic.from6297 ], [ %t141, %logic.rend6300 ] + br i1 %t142, label %then6301, label %endif6303 +then6301: + %t143 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t143, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.4021, i64 43, i64 0 }, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + %t147 = load { ptr, i64, i64 }, ptr %a144 + %t148 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t147, ptr %a25 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch_str_drop(ptr %a149) + br label %endif6303 +endif6303: + br label %endif6281 +endif6281: + %t150 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t151 = getelementptr inbounds %S.ast.Type, ptr %t150, i32 0, i32 0 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t152, ptr %a153 + store { ptr, i64, i64 } { ptr @.str.4022, i64 6, i64 0 }, ptr %a154 + %t155 = call i32 @finch_str_eq(ptr %a153, ptr %a154) + %t156 = icmp ne i32 %t155, 0 + br label %logic.from6304 +logic.from6304: + br i1 %t156, label %logic.end6306, label %logic.rhs6305 +logic.rhs6305: + %t157 = getelementptr inbounds %S.gen.Val, ptr %a3, i32 0, i32 1 + %t158 = getelementptr inbounds %S.ast.Type, ptr %t157, i32 0, i32 0 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.4023, i64 5, i64 0 }, ptr %a161 + %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) + %t163 = icmp ne i32 %t162, 0 + br label %logic.rend6307 +logic.rend6307: + br label %logic.end6306 +logic.end6306: + %t164 = phi i1 [ true, %logic.from6304 ], [ %t163, %logic.rend6307 ] + br label %logic.from6308 +logic.from6308: + br i1 %t164, label %logic.rhs6309, label %logic.end6310 +logic.rhs6309: + %t165 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t165, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.4024, i64 2, i64 0 }, ptr %a167 + %t168 = call i32 @finch_str_eq(ptr %a166, ptr %a167) + %t169 = icmp ne i32 %t168, 0 + br label %logic.from6311 +logic.from6311: + br i1 %t169, label %logic.end6313, label %logic.rhs6312 +logic.rhs6312: + %t170 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.4025, i64 2, i64 0 }, ptr %a172 + %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) + %t174 = icmp ne i32 %t173, 0 + br label %logic.rend6314 +logic.rend6314: + br label %logic.end6313 +logic.end6313: + %t175 = phi i1 [ true, %logic.from6311 ], [ %t174, %logic.rend6314 ] + br label %logic.rend6315 +logic.rend6315: + br label %logic.end6310 +logic.end6310: + %t176 = phi i1 [ false, %logic.from6308 ], [ %t175, %logic.rend6315 ] + br i1 %t176, label %then6316, label %endif6318 +then6316: + %t177 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t177, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.4026, i64 31, i64 0 }, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a178 + %t182 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t181, ptr %a25 + store { ptr, i64, i64 } %t182, ptr %a183 + call void @finch_str_drop(ptr %a183) + br label %endif6318 +endif6318: + %t184 = load ptr, ptr %a1 + %t185 = load %S.ast.Node, ptr %a5 + %t186 = load { ptr, i64, i64 }, ptr %a25 + call void @finch.gen.fail(ptr %t184, %S.ast.Node %t185, { ptr, i64, i64 } %t186) + call void @finch_str_drop(ptr %a25) + ret void +} + +define internal i1 @finch.gen.unify(ptr %p0, ptr %p1, ptr %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca ptr, align 16 + %a3 = alloca ptr, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.ast.Type, align 16 + %a61 = alloca %S.ast.Type, align 16 + %a68 = alloca %S.gen.Val, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca %S.ast.Type, align 16 + %a106 = alloca %S.ast.Type, align 16 + %a113 = alloca %S.gen.Val, align 16 + %a142 = alloca %S.ast.Type, align 16 + %a143 = alloca %S.ast.Type, align 16 + %a149 = alloca %S.gen.Val, align 16 + %a178 = alloca %S.ast.Type, align 16 + %a179 = alloca %S.ast.Type, align 16 + %a185 = alloca %S.gen.Val, align 16 + %a207 = alloca %S.ast.Node, align 16 + %a211 = alloca %S.gen.Val, align 16 + %a233 = alloca %S.ast.Node, align 16 + %a237 = alloca %S.gen.Val, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca %S.ast.Type, align 16 + %a276 = alloca %S.gen.Val, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca %S.ast.Type, align 16 + %a304 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store ptr %p1, ptr %a2 + store ptr %p2, ptr %a3 + %t4 = load ptr, ptr %a2 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic6319, label %ok6320 +panic6319: + call void @finch_panic(ptr @.str.4027, i64 3462, ptr @.str.4028) + unreachable +ok6320: + %t6 = getelementptr inbounds %S.gen.Val, ptr %t4, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %t6 + %t8 = load ptr, ptr %a3 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic6321, label %ok6322 +panic6321: + call void @finch_panic(ptr @.str.4029, i64 3462, ptr @.str.4030) + unreachable +ok6322: + %t10 = getelementptr inbounds %S.gen.Val, ptr %t8, i32 0, i32 1 + %t11 = load %S.ast.Type, ptr %t10 + %t12 = call i1 @finch.ast.same(%S.ast.Type %t7, %S.ast.Type %t11) + br i1 %t12, label %then6323, label %endif6325 +then6323: + ret i1 true +endif6325: + %t13 = load ptr, ptr %a2 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic6326, label %ok6327 +panic6326: + call void @finch_panic(ptr @.str.4031, i64 3465, ptr @.str.4032) + unreachable +ok6327: + %t15 = getelementptr inbounds %S.gen.Val, ptr %t13, i32 0, i32 1 + %t16 = load %S.ast.Type, ptr %t15 + %t17 = call i1 @finch.gen.isInt(%S.ast.Type %t16) + br label %logic.from6328 +logic.from6328: + br i1 %t17, label %logic.rhs6329, label %logic.end6330 +logic.rhs6329: + %t18 = load ptr, ptr %a3 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic6331, label %ok6332 +panic6331: + call void @finch_panic(ptr @.str.4033, i64 3465, ptr @.str.4034) + unreachable +ok6332: + %t20 = getelementptr inbounds %S.gen.Val, ptr %t18, i32 0, i32 1 + %t21 = load %S.ast.Type, ptr %t20 + %t22 = call i1 @finch.gen.isInt(%S.ast.Type %t21) + br label %logic.rend6333 +logic.rend6333: + br label %logic.end6330 +logic.end6330: + %t23 = phi i1 [ false, %logic.from6328 ], [ %t22, %logic.rend6333 ] + br i1 %t23, label %then6334, label %endif6336 +then6334: + %t24 = load ptr, ptr %a2 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic6337, label %ok6338 +panic6337: + call void @finch_panic(ptr @.str.4035, i64 3468, ptr @.str.4036) + unreachable +ok6338: + %t26 = getelementptr inbounds %S.gen.Val, ptr %t24, i32 0, i32 3 + %t27 = load i1, ptr %t26 + br label %logic.from6339 +logic.from6339: + br i1 %t27, label %logic.rhs6340, label %logic.end6341 +logic.rhs6340: + %t28 = load ptr, ptr %a3 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic6342, label %ok6343 +panic6342: + call void @finch_panic(ptr @.str.4037, i64 3468, ptr @.str.4038) + unreachable +ok6343: + %t30 = getelementptr inbounds %S.gen.Val, ptr %t28, i32 0, i32 3 + %t31 = load i1, ptr %t30 + %t32 = xor i1 %t31, true + br label %logic.rend6344 +logic.rend6344: + br label %logic.end6341 +logic.end6341: + %t33 = phi i1 [ false, %logic.from6339 ], [ %t32, %logic.rend6344 ] + br label %logic.from6345 +logic.from6345: + br i1 %t33, label %logic.rhs6346, label %logic.end6347 +logic.rhs6346: + %t34 = load ptr, ptr %a2 + %t35 = icmp eq ptr %t34, null + br i1 %t35, label %panic6348, label %ok6349 +panic6348: + call void @finch_panic(ptr @.str.4039, i64 3468, ptr @.str.4040) + unreachable +ok6349: + %t36 = getelementptr inbounds %S.gen.Val, ptr %t34, i32 0, i32 0 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = load ptr, ptr %a2 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic6350, label %ok6351 +panic6350: + call void @finch_panic(ptr @.str.4041, i64 3468, ptr @.str.4042) + unreachable +ok6351: + %t40 = getelementptr inbounds %S.gen.Val, ptr %t38, i32 0, i32 1 + %t41 = load %S.ast.Type, ptr %t40 + %t42 = load ptr, ptr %a3 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic6352, label %ok6353 +panic6352: + call void @finch_panic(ptr @.str.4043, i64 3468, ptr @.str.4044) + unreachable +ok6353: + %t44 = getelementptr inbounds %S.gen.Val, ptr %t42, i32 0, i32 1 + %t45 = load %S.ast.Type, ptr %t44 + %t46 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t37, %S.ast.Type %t41, %S.ast.Type %t45) + br label %logic.rend6354 +logic.rend6354: + br label %logic.end6347 +logic.end6347: + %t47 = phi i1 [ false, %logic.from6345 ], [ %t46, %logic.rend6354 ] + br i1 %t47, label %then6355, label %endif6357 +then6355: + %t48 = load ptr, ptr %a2 + %t49 = icmp eq ptr %t48, null + br i1 %t49, label %panic6358, label %ok6359 +panic6358: + call void @finch_panic(ptr @.str.4045, i64 3469, ptr @.str.4046) + unreachable +ok6359: + %t50 = getelementptr inbounds %S.gen.Val, ptr %t48, i32 0, i32 0 + %t51 = load { ptr, i64, i64 }, ptr %t50 + store { ptr, i64, i64 } %t51, ptr %a52 + call void @finch_str_copy(ptr %a53, ptr %a52) + %t54 = load { ptr, i64, i64 }, ptr %a53 + %t55 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t54, 0 + %t56 = load ptr, ptr %a3 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic6360, label %ok6361 +panic6360: + call void @finch_panic(ptr @.str.4047, i64 3469, ptr @.str.4048) + unreachable +ok6361: + %t58 = getelementptr inbounds %S.gen.Val, ptr %t56, i32 0, i32 1 + %t59 = load %S.ast.Type, ptr %t58 + store %S.ast.Type %t59, ptr %a60 + call void @finch.copy.S_ast_Type(ptr %a61, ptr %a60) + %t62 = load %S.ast.Type, ptr %a61 + %t63 = insertvalue %S.gen.Val %t55, %S.ast.Type %t62, 1 + %t64 = insertvalue %S.gen.Val %t63, i1 true, 3 + %t65 = load ptr, ptr %a2 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic6362, label %ok6363 +panic6362: + call void @finch_panic(ptr @.str.4049, i64 3469, ptr @.str.4050) + unreachable +ok6363: + %t67 = load %S.gen.Val, ptr %t65 + store %S.gen.Val %t64, ptr %t65 + store %S.gen.Val %t67, ptr %a68 + call void @finch.drop.S_gen_Val(ptr %a68) + ret i1 true +endif6357: + %t69 = load ptr, ptr %a3 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic6364, label %ok6365 +panic6364: + call void @finch_panic(ptr @.str.4051, i64 3472, ptr @.str.4052) + unreachable +ok6365: + %t71 = getelementptr inbounds %S.gen.Val, ptr %t69, i32 0, i32 3 + %t72 = load i1, ptr %t71 + br label %logic.from6366 +logic.from6366: + br i1 %t72, label %logic.rhs6367, label %logic.end6368 +logic.rhs6367: + %t73 = load ptr, ptr %a2 + %t74 = icmp eq ptr %t73, null + br i1 %t74, label %panic6369, label %ok6370 +panic6369: + call void @finch_panic(ptr @.str.4053, i64 3472, ptr @.str.4054) + unreachable +ok6370: + %t75 = getelementptr inbounds %S.gen.Val, ptr %t73, i32 0, i32 3 + %t76 = load i1, ptr %t75 + %t77 = xor i1 %t76, true + br label %logic.rend6371 +logic.rend6371: + br label %logic.end6368 +logic.end6368: + %t78 = phi i1 [ false, %logic.from6366 ], [ %t77, %logic.rend6371 ] + br label %logic.from6372 +logic.from6372: + br i1 %t78, label %logic.rhs6373, label %logic.end6374 +logic.rhs6373: + %t79 = load ptr, ptr %a3 + %t80 = icmp eq ptr %t79, null + br i1 %t80, label %panic6375, label %ok6376 +panic6375: + call void @finch_panic(ptr @.str.4055, i64 3472, ptr @.str.4056) + unreachable +ok6376: + %t81 = getelementptr inbounds %S.gen.Val, ptr %t79, i32 0, i32 0 + %t82 = load { ptr, i64, i64 }, ptr %t81 + %t83 = load ptr, ptr %a3 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic6377, label %ok6378 +panic6377: + call void @finch_panic(ptr @.str.4057, i64 3472, ptr @.str.4058) + unreachable +ok6378: + %t85 = getelementptr inbounds %S.gen.Val, ptr %t83, i32 0, i32 1 + %t86 = load %S.ast.Type, ptr %t85 + %t87 = load ptr, ptr %a2 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic6379, label %ok6380 +panic6379: + call void @finch_panic(ptr @.str.4059, i64 3472, ptr @.str.4060) + unreachable +ok6380: + %t89 = getelementptr inbounds %S.gen.Val, ptr %t87, i32 0, i32 1 + %t90 = load %S.ast.Type, ptr %t89 + %t91 = call i1 @finch.gen.fits({ ptr, i64, i64 } %t82, %S.ast.Type %t86, %S.ast.Type %t90) + br label %logic.rend6381 +logic.rend6381: + br label %logic.end6374 +logic.end6374: + %t92 = phi i1 [ false, %logic.from6372 ], [ %t91, %logic.rend6381 ] + br i1 %t92, label %then6382, label %endif6384 +then6382: + %t93 = load ptr, ptr %a3 + %t94 = icmp eq ptr %t93, null + br i1 %t94, label %panic6385, label %ok6386 +panic6385: + call void @finch_panic(ptr @.str.4061, i64 3473, ptr @.str.4062) + unreachable +ok6386: + %t95 = getelementptr inbounds %S.gen.Val, ptr %t93, i32 0, i32 0 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_copy(ptr %a98, ptr %a97) + %t99 = load { ptr, i64, i64 }, ptr %a98 + %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 + %t101 = load ptr, ptr %a2 + %t102 = icmp eq ptr %t101, null + br i1 %t102, label %panic6387, label %ok6388 +panic6387: + call void @finch_panic(ptr @.str.4063, i64 3473, ptr @.str.4064) + unreachable +ok6388: + %t103 = getelementptr inbounds %S.gen.Val, ptr %t101, i32 0, i32 1 + %t104 = load %S.ast.Type, ptr %t103 + store %S.ast.Type %t104, ptr %a105 + call void @finch.copy.S_ast_Type(ptr %a106, ptr %a105) + %t107 = load %S.ast.Type, ptr %a106 + %t108 = insertvalue %S.gen.Val %t100, %S.ast.Type %t107, 1 + %t109 = insertvalue %S.gen.Val %t108, i1 true, 3 + %t110 = load ptr, ptr %a3 + %t111 = icmp eq ptr %t110, null + br i1 %t111, label %panic6389, label %ok6390 +panic6389: + call void @finch_panic(ptr @.str.4065, i64 3473, ptr @.str.4066) + unreachable +ok6390: + %t112 = load %S.gen.Val, ptr %t110 + store %S.gen.Val %t109, ptr %t110 + store %S.gen.Val %t112, ptr %a113 + call void @finch.drop.S_gen_Val(ptr %a113) + ret i1 true +endif6384: + %t114 = load ptr, ptr %a2 + %t115 = icmp eq ptr %t114, null + br i1 %t115, label %panic6391, label %ok6392 +panic6391: + call void @finch_panic(ptr @.str.4067, i64 3476, ptr @.str.4068) + unreachable +ok6392: + %t116 = getelementptr inbounds %S.gen.Val, ptr %t114, i32 0, i32 1 + %t117 = load %S.ast.Type, ptr %t116 + %t118 = load ptr, ptr %a3 + %t119 = icmp eq ptr %t118, null + br i1 %t119, label %panic6393, label %ok6394 +panic6393: + call void @finch_panic(ptr @.str.4069, i64 3476, ptr @.str.4070) + unreachable +ok6394: + %t120 = getelementptr inbounds %S.gen.Val, ptr %t118, i32 0, i32 1 + %t121 = load %S.ast.Type, ptr %t120 + %t122 = call i1 @finch.gen.widens(%S.ast.Type %t117, %S.ast.Type %t121) + br i1 %t122, label %then6395, label %endif6397 +then6395: + %t123 = load ptr, ptr %a1 + %t124 = load ptr, ptr %a2 + %t125 = icmp eq ptr %t124, null + br i1 %t125, label %panic6398, label %ok6399 +panic6398: + call void @finch_panic(ptr @.str.4071, i64 3477, ptr @.str.4072) + unreachable +ok6399: + %t126 = getelementptr inbounds %S.gen.Val, ptr %t124, i32 0, i32 0 + %t127 = load { ptr, i64, i64 }, ptr %t126 + %t128 = load ptr, ptr %a2 + %t129 = icmp eq ptr %t128, null + br i1 %t129, label %panic6400, label %ok6401 +panic6400: + call void @finch_panic(ptr @.str.4073, i64 3477, ptr @.str.4074) + unreachable +ok6401: + %t130 = getelementptr inbounds %S.gen.Val, ptr %t128, i32 0, i32 1 + %t131 = load %S.ast.Type, ptr %t130 + %t132 = load ptr, ptr %a3 + %t133 = icmp eq ptr %t132, null + br i1 %t133, label %panic6402, label %ok6403 +panic6402: + call void @finch_panic(ptr @.str.4075, i64 3477, ptr @.str.4076) + unreachable +ok6403: + %t134 = getelementptr inbounds %S.gen.Val, ptr %t132, i32 0, i32 1 + %t135 = load %S.ast.Type, ptr %t134 + %t136 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t123, { ptr, i64, i64 } %t127, %S.ast.Type %t131, %S.ast.Type %t135) + %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t136, 0 + %t138 = load ptr, ptr %a3 + %t139 = icmp eq ptr %t138, null + br i1 %t139, label %panic6404, label %ok6405 +panic6404: + call void @finch_panic(ptr @.str.4077, i64 3477, ptr @.str.4078) + unreachable +ok6405: + %t140 = getelementptr inbounds %S.gen.Val, ptr %t138, i32 0, i32 1 + %t141 = load %S.ast.Type, ptr %t140 + store %S.ast.Type %t141, ptr %a142 + call void @finch.copy.S_ast_Type(ptr %a143, ptr %a142) + %t144 = load %S.ast.Type, ptr %a143 + %t145 = insertvalue %S.gen.Val %t137, %S.ast.Type %t144, 1 + %t146 = load ptr, ptr %a2 + %t147 = icmp eq ptr %t146, null + br i1 %t147, label %panic6406, label %ok6407 +panic6406: + call void @finch_panic(ptr @.str.4079, i64 3477, ptr @.str.4080) + unreachable +ok6407: + %t148 = load %S.gen.Val, ptr %t146 + store %S.gen.Val %t145, ptr %t146 + store %S.gen.Val %t148, ptr %a149 + call void @finch.drop.S_gen_Val(ptr %a149) + ret i1 true +endif6397: + %t150 = load ptr, ptr %a3 + %t151 = icmp eq ptr %t150, null + br i1 %t151, label %panic6408, label %ok6409 +panic6408: + call void @finch_panic(ptr @.str.4081, i64 3480, ptr @.str.4082) + unreachable +ok6409: + %t152 = getelementptr inbounds %S.gen.Val, ptr %t150, i32 0, i32 1 + %t153 = load %S.ast.Type, ptr %t152 + %t154 = load ptr, ptr %a2 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic6410, label %ok6411 +panic6410: + call void @finch_panic(ptr @.str.4083, i64 3480, ptr @.str.4084) + unreachable +ok6411: + %t156 = getelementptr inbounds %S.gen.Val, ptr %t154, i32 0, i32 1 + %t157 = load %S.ast.Type, ptr %t156 + %t158 = call i1 @finch.gen.widens(%S.ast.Type %t153, %S.ast.Type %t157) + br i1 %t158, label %then6412, label %endif6414 +then6412: + %t159 = load ptr, ptr %a1 + %t160 = load ptr, ptr %a3 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic6415, label %ok6416 +panic6415: + call void @finch_panic(ptr @.str.4085, i64 3481, ptr @.str.4086) + unreachable +ok6416: + %t162 = getelementptr inbounds %S.gen.Val, ptr %t160, i32 0, i32 0 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = load ptr, ptr %a3 + %t165 = icmp eq ptr %t164, null + br i1 %t165, label %panic6417, label %ok6418 +panic6417: + call void @finch_panic(ptr @.str.4087, i64 3481, ptr @.str.4088) + unreachable +ok6418: + %t166 = getelementptr inbounds %S.gen.Val, ptr %t164, i32 0, i32 1 + %t167 = load %S.ast.Type, ptr %t166 + %t168 = load ptr, ptr %a2 + %t169 = icmp eq ptr %t168, null + br i1 %t169, label %panic6419, label %ok6420 +panic6419: + call void @finch_panic(ptr @.str.4089, i64 3481, ptr @.str.4090) + unreachable +ok6420: + %t170 = getelementptr inbounds %S.gen.Val, ptr %t168, i32 0, i32 1 + %t171 = load %S.ast.Type, ptr %t170 + %t172 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t159, { ptr, i64, i64 } %t163, %S.ast.Type %t167, %S.ast.Type %t171) + %t173 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t172, 0 + %t174 = load ptr, ptr %a2 + %t175 = icmp eq ptr %t174, null + br i1 %t175, label %panic6421, label %ok6422 +panic6421: + call void @finch_panic(ptr @.str.4091, i64 3481, ptr @.str.4092) + unreachable +ok6422: + %t176 = getelementptr inbounds %S.gen.Val, ptr %t174, i32 0, i32 1 + %t177 = load %S.ast.Type, ptr %t176 + store %S.ast.Type %t177, ptr %a178 + call void @finch.copy.S_ast_Type(ptr %a179, ptr %a178) + %t180 = load %S.ast.Type, ptr %a179 + %t181 = insertvalue %S.gen.Val %t173, %S.ast.Type %t180, 1 + %t182 = load ptr, ptr %a3 + %t183 = icmp eq ptr %t182, null + br i1 %t183, label %panic6423, label %ok6424 +panic6423: + call void @finch_panic(ptr @.str.4093, i64 3481, ptr @.str.4094) + unreachable +ok6424: + %t184 = load %S.gen.Val, ptr %t182 + store %S.gen.Val %t181, ptr %t182 + store %S.gen.Val %t184, ptr %a185 + call void @finch.drop.S_gen_Val(ptr %a185) + ret i1 true +endif6414: + ret i1 false +endif6336: + %t186 = load ptr, ptr %a2 + %t187 = icmp eq ptr %t186, null + br i1 %t187, label %panic6425, label %ok6426 +panic6425: + call void @finch_panic(ptr @.str.4095, i64 3486, ptr @.str.4096) + unreachable +ok6426: + %t188 = getelementptr inbounds %S.gen.Val, ptr %t186, i32 0, i32 1 + %t189 = load %S.ast.Type, ptr %t188 + %t190 = call i1 @finch.gen.isInt(%S.ast.Type %t189) + br label %logic.from6427 +logic.from6427: + br i1 %t190, label %logic.rhs6428, label %logic.end6429 +logic.rhs6428: + %t191 = load ptr, ptr %a3 + %t192 = icmp eq ptr %t191, null + br i1 %t192, label %panic6430, label %ok6431 +panic6430: + call void @finch_panic(ptr @.str.4097, i64 3486, ptr @.str.4098) + unreachable +ok6431: + %t193 = getelementptr inbounds %S.gen.Val, ptr %t191, i32 0, i32 1 + %t194 = load %S.ast.Type, ptr %t193 + %t195 = call i1 @finch.gen.isFloat(%S.ast.Type %t194) + br label %logic.rend6432 +logic.rend6432: + br label %logic.end6429 +logic.end6429: + %t196 = phi i1 [ false, %logic.from6427 ], [ %t195, %logic.rend6432 ] + br i1 %t196, label %then6433, label %endif6435 +then6433: + %t197 = load ptr, ptr %a1 + %t198 = load ptr, ptr %a2 + %t199 = icmp eq ptr %t198, null + br i1 %t199, label %panic6436, label %ok6437 +panic6436: + call void @finch_panic(ptr @.str.4099, i64 3487, ptr @.str.4100) + unreachable +ok6437: + %t200 = load %S.gen.Val, ptr %t198 + %t201 = load ptr, ptr %a3 + %t202 = icmp eq ptr %t201, null + br i1 %t202, label %panic6438, label %ok6439 +panic6438: + call void @finch_panic(ptr @.str.4101, i64 3487, ptr @.str.4102) + unreachable +ok6439: + %t203 = getelementptr inbounds %S.gen.Val, ptr %t201, i32 0, i32 1 + %t204 = load %S.ast.Type, ptr %t203 + %t205 = call %S.ast.Node @finch.gen.Node0() + %t206 = call %S.gen.Val @finch.gen.coerce(ptr %t197, %S.gen.Val %t200, %S.ast.Type %t204, %S.ast.Node %t205, { ptr, i64, i64 } { ptr @.str.4103, i64 0, i64 0 }) + store %S.ast.Node %t205, ptr %a207 + call void @finch.drop.S_ast_Node(ptr %a207) + %t208 = load ptr, ptr %a2 + %t209 = icmp eq ptr %t208, null + br i1 %t209, label %panic6440, label %ok6441 +panic6440: + call void @finch_panic(ptr @.str.4104, i64 3487, ptr @.str.4105) + unreachable +ok6441: + %t210 = load %S.gen.Val, ptr %t208 + store %S.gen.Val %t206, ptr %t208 + store %S.gen.Val %t210, ptr %a211 + call void @finch.drop.S_gen_Val(ptr %a211) + ret i1 true +endif6435: + %t212 = load ptr, ptr %a2 + %t213 = icmp eq ptr %t212, null + br i1 %t213, label %panic6442, label %ok6443 +panic6442: + call void @finch_panic(ptr @.str.4106, i64 3490, ptr @.str.4107) + unreachable +ok6443: + %t214 = getelementptr inbounds %S.gen.Val, ptr %t212, i32 0, i32 1 + %t215 = load %S.ast.Type, ptr %t214 + %t216 = call i1 @finch.gen.isFloat(%S.ast.Type %t215) + br label %logic.from6444 +logic.from6444: + br i1 %t216, label %logic.rhs6445, label %logic.end6446 +logic.rhs6445: + %t217 = load ptr, ptr %a3 + %t218 = icmp eq ptr %t217, null + br i1 %t218, label %panic6447, label %ok6448 +panic6447: + call void @finch_panic(ptr @.str.4108, i64 3490, ptr @.str.4109) + unreachable +ok6448: + %t219 = getelementptr inbounds %S.gen.Val, ptr %t217, i32 0, i32 1 + %t220 = load %S.ast.Type, ptr %t219 + %t221 = call i1 @finch.gen.isInt(%S.ast.Type %t220) + br label %logic.rend6449 +logic.rend6449: + br label %logic.end6446 +logic.end6446: + %t222 = phi i1 [ false, %logic.from6444 ], [ %t221, %logic.rend6449 ] + br i1 %t222, label %then6450, label %endif6452 +then6450: + %t223 = load ptr, ptr %a1 + %t224 = load ptr, ptr %a3 + %t225 = icmp eq ptr %t224, null + br i1 %t225, label %panic6453, label %ok6454 +panic6453: + call void @finch_panic(ptr @.str.4110, i64 3491, ptr @.str.4111) + unreachable +ok6454: + %t226 = load %S.gen.Val, ptr %t224 + %t227 = load ptr, ptr %a2 + %t228 = icmp eq ptr %t227, null + br i1 %t228, label %panic6455, label %ok6456 +panic6455: + call void @finch_panic(ptr @.str.4112, i64 3491, ptr @.str.4113) + unreachable +ok6456: + %t229 = getelementptr inbounds %S.gen.Val, ptr %t227, i32 0, i32 1 + %t230 = load %S.ast.Type, ptr %t229 + %t231 = call %S.ast.Node @finch.gen.Node0() + %t232 = call %S.gen.Val @finch.gen.coerce(ptr %t223, %S.gen.Val %t226, %S.ast.Type %t230, %S.ast.Node %t231, { ptr, i64, i64 } { ptr @.str.4114, i64 0, i64 0 }) + store %S.ast.Node %t231, ptr %a233 + call void @finch.drop.S_ast_Node(ptr %a233) + %t234 = load ptr, ptr %a3 + %t235 = icmp eq ptr %t234, null + br i1 %t235, label %panic6457, label %ok6458 +panic6457: + call void @finch_panic(ptr @.str.4115, i64 3491, ptr @.str.4116) + unreachable +ok6458: + %t236 = load %S.gen.Val, ptr %t234 + store %S.gen.Val %t232, ptr %t234 + store %S.gen.Val %t236, ptr %a237 + call void @finch.drop.S_gen_Val(ptr %a237) + ret i1 true +endif6452: + %t238 = load ptr, ptr %a2 + %t239 = icmp eq ptr %t238, null + br i1 %t239, label %panic6459, label %ok6460 +panic6459: + call void @finch_panic(ptr @.str.4117, i64 3494, ptr @.str.4118) + unreachable +ok6460: + %t240 = getelementptr inbounds %S.gen.Val, ptr %t238, i32 0, i32 1 + %t241 = load %S.ast.Type, ptr %t240 + %t242 = call i1 @finch.gen.isFloat(%S.ast.Type %t241) + br label %logic.from6461 +logic.from6461: + br i1 %t242, label %logic.rhs6462, label %logic.end6463 +logic.rhs6462: + %t243 = load ptr, ptr %a3 + %t244 = icmp eq ptr %t243, null + br i1 %t244, label %panic6464, label %ok6465 +panic6464: + call void @finch_panic(ptr @.str.4119, i64 3494, ptr @.str.4120) + unreachable +ok6465: + %t245 = getelementptr inbounds %S.gen.Val, ptr %t243, i32 0, i32 1 + %t246 = load %S.ast.Type, ptr %t245 + %t247 = call i1 @finch.gen.isFloat(%S.ast.Type %t246) + br label %logic.rend6466 +logic.rend6466: + br label %logic.end6463 +logic.end6463: + %t248 = phi i1 [ false, %logic.from6461 ], [ %t247, %logic.rend6466 ] + br i1 %t248, label %then6467, label %endif6469 +then6467: + %t249 = load ptr, ptr %a2 + %t250 = icmp eq ptr %t249, null + br i1 %t250, label %panic6470, label %ok6471 +panic6470: + call void @finch_panic(ptr @.str.4121, i64 3495, ptr @.str.4122) + unreachable +ok6471: + %t251 = getelementptr inbounds %S.gen.Val, ptr %t249, i32 0, i32 1 + %t252 = getelementptr inbounds %S.ast.Type, ptr %t251, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.4123, i64 3, i64 0 }, ptr %a255 + %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) + %t257 = icmp ne i32 %t256, 0 + br i1 %t257, label %then6472, label %endif6474 +then6472: + %t258 = load ptr, ptr %a1 + %t259 = load ptr, ptr %a2 + %t260 = icmp eq ptr %t259, null + br i1 %t260, label %panic6475, label %ok6476 +panic6475: + call void @finch_panic(ptr @.str.4124, i64 3496, ptr @.str.4125) + unreachable +ok6476: + %t261 = getelementptr inbounds %S.gen.Val, ptr %t259, i32 0, i32 0 + %t262 = load { ptr, i64, i64 }, ptr %t261 + %t263 = load ptr, ptr %a2 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic6477, label %ok6478 +panic6477: + call void @finch_panic(ptr @.str.4126, i64 3496, ptr @.str.4127) + unreachable +ok6478: + %t265 = getelementptr inbounds %S.gen.Val, ptr %t263, i32 0, i32 1 + %t266 = load %S.ast.Type, ptr %t265 + %t267 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4128, i64 5, i64 0 }) + %t268 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t258, { ptr, i64, i64 } %t262, %S.ast.Type %t266, %S.ast.Type %t267) + store %S.ast.Type %t267, ptr %a269 + call void @finch.drop.S_ast_Type(ptr %a269) + %t270 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t268, 0 + %t271 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4129, i64 5, i64 0 }) + %t272 = insertvalue %S.gen.Val %t270, %S.ast.Type %t271, 1 + %t273 = load ptr, ptr %a2 + %t274 = icmp eq ptr %t273, null + br i1 %t274, label %panic6479, label %ok6480 +panic6479: + call void @finch_panic(ptr @.str.4130, i64 3496, ptr @.str.4131) + unreachable +ok6480: + %t275 = load %S.gen.Val, ptr %t273 + store %S.gen.Val %t272, ptr %t273 + store %S.gen.Val %t275, ptr %a276 + call void @finch.drop.S_gen_Val(ptr %a276) + br label %endif6474 +endif6474: + %t277 = load ptr, ptr %a3 + %t278 = icmp eq ptr %t277, null + br i1 %t278, label %panic6481, label %ok6482 +panic6481: + call void @finch_panic(ptr @.str.4132, i64 3498, ptr @.str.4133) + unreachable +ok6482: + %t279 = getelementptr inbounds %S.gen.Val, ptr %t277, i32 0, i32 1 + %t280 = getelementptr inbounds %S.ast.Type, ptr %t279, i32 0, i32 0 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.4134, i64 3, i64 0 }, ptr %a283 + %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) + %t285 = icmp ne i32 %t284, 0 + br i1 %t285, label %then6483, label %endif6485 +then6483: + %t286 = load ptr, ptr %a1 + %t287 = load ptr, ptr %a3 + %t288 = icmp eq ptr %t287, null + br i1 %t288, label %panic6486, label %ok6487 +panic6486: + call void @finch_panic(ptr @.str.4135, i64 3499, ptr @.str.4136) + unreachable +ok6487: + %t289 = getelementptr inbounds %S.gen.Val, ptr %t287, i32 0, i32 0 + %t290 = load { ptr, i64, i64 }, ptr %t289 + %t291 = load ptr, ptr %a3 + %t292 = icmp eq ptr %t291, null + br i1 %t292, label %panic6488, label %ok6489 +panic6488: + call void @finch_panic(ptr @.str.4137, i64 3499, ptr @.str.4138) + unreachable +ok6489: + %t293 = getelementptr inbounds %S.gen.Val, ptr %t291, i32 0, i32 1 + %t294 = load %S.ast.Type, ptr %t293 + %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4139, i64 5, i64 0 }) + %t296 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t286, { ptr, i64, i64 } %t290, %S.ast.Type %t294, %S.ast.Type %t295) + store %S.ast.Type %t295, ptr %a297 + call void @finch.drop.S_ast_Type(ptr %a297) + %t298 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t296, 0 + %t299 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4140, i64 5, i64 0 }) + %t300 = insertvalue %S.gen.Val %t298, %S.ast.Type %t299, 1 + %t301 = load ptr, ptr %a3 + %t302 = icmp eq ptr %t301, null + br i1 %t302, label %panic6490, label %ok6491 +panic6490: + call void @finch_panic(ptr @.str.4141, i64 3499, ptr @.str.4142) + unreachable +ok6491: + %t303 = load %S.gen.Val, ptr %t301 + store %S.gen.Val %t300, ptr %t301 + store %S.gen.Val %t303, ptr %a304 + call void @finch.drop.S_gen_Val(ptr %a304) + br label %endif6485 +endif6485: + ret i1 true +endif6469: + ret i1 false +} + +define internal %S.ast.Node @finch.gen.Node0() { +entry: + + ret %S.ast.Node zeroinitializer +} + +define internal %S.gen.Val @finch.gen.arith(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.gen.Val, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a6 = alloca %S.gen.Val, align 16 + %a7 = alloca %S.gen.Val, align 16 + %a8 = alloca %S.gen.Val, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca i64, align 16 + %a155 = alloca i64, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca i64, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca %S.ast.Type, align 16 + %a280 = alloca %S.ast.Type, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca i64, align 16 + %a313 = alloca i64, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca i64, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca %S.ast.Type, align 16 + %a384 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.gen.Val %p2, ptr %a3 + call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) + %t5 = load %S.gen.Val, ptr %a4 + store %S.gen.Val %t5, ptr %a6 + store %S.gen.Val %p3, ptr %a7 + call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) + %t9 = load %S.gen.Val, ptr %a8 + store %S.gen.Val %t9, ptr %a10 + store %S.ast.Node %p4, ptr %a11 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.4143, i64 1, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from6492 +logic.from6492: + br i1 %t16, label %logic.rhs6493, label %logic.end6494 +logic.rhs6493: + %t17 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t18 = getelementptr inbounds %S.ast.Type, ptr %t17, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.4144, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend6495 +logic.rend6495: + br label %logic.end6494 +logic.end6494: + %t24 = phi i1 [ false, %logic.from6492 ], [ %t23, %logic.rend6495 ] + br label %logic.from6496 +logic.from6496: + br i1 %t24, label %logic.rhs6497, label %logic.end6498 +logic.rhs6497: + %t25 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t26 = getelementptr inbounds %S.ast.Type, ptr %t25, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.4145, i64 3, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend6499 +logic.rend6499: + br label %logic.end6498 +logic.end6498: + %t32 = phi i1 [ false, %logic.from6496 ], [ %t31, %logic.rend6499 ] + br i1 %t32, label %then6500, label %endif6502 +then6500: + %t33 = load ptr, ptr %a1 + %t34 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t33, { ptr, i64, i64 } { ptr @.str.4146, i64 17, i64 0 }) + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = load ptr, ptr %a1 + %t37 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.4147, i64 32, i64 0 }, ptr %a39 + store { ptr, i64, i64 } %t37, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + %t41 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.4148, i64 6, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + store { ptr, i64, i64 } %t41, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a42 + %t47 = load ptr, ptr %a1 + %t48 = load %S.gen.Val, ptr %a6 + %t49 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t47, %S.gen.Val %t48) + store { ptr, i64, i64 } %t46, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t46, ptr %a53 + call void @finch_str_drop(ptr %a53) + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.4149, i64 6, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load ptr, ptr %a1 + %t62 = load %S.gen.Val, ptr %a10 + %t63 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t61, %S.gen.Val %t62) + store { ptr, i64, i64 } %t60, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t60, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.4150, i64 1, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + call void @finch.gen.emit(ptr %t36, { ptr, i64, i64 } %t74) + store { ptr, i64, i64 } %t74, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load ptr, ptr %a1 + %t77 = load %S.gen.Val, ptr %a6 + call void @finch.gen.release(ptr %t76, %S.gen.Val %t77) + %t78 = load ptr, ptr %a1 + %t79 = load %S.gen.Val, ptr %a10 + call void @finch.gen.release(ptr %t78, %S.gen.Val %t79) + %t80 = load ptr, ptr %a1 + %t81 = load { ptr, i64, i64 }, ptr %a35 + %t82 = call { ptr, i64, i64 } @finch.gen.load(ptr %t80, { ptr, i64, i64 } { ptr @.str.4151, i64 17, i64 0 }, { ptr, i64, i64 } %t81) + %t83 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t82, 0 + %t84 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4152, i64 3, i64 0 }) + %t85 = insertvalue %S.gen.Val %t83, %S.ast.Type %t84, 1 + %t86 = insertvalue %S.gen.Val %t85, i1 true, 2 + call void @finch_str_drop(ptr %a35) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t86 +endif6502: + %t87 = load ptr, ptr %a1 + %t88 = call i1 @finch.gen.unify(ptr %t87, ptr %a6, ptr %a10) + %t89 = xor i1 %t88, true + br i1 %t89, label %then6503, label %endif6505 +then6503: + %t90 = load ptr, ptr %a1 + %t91 = load { ptr, i64, i64 }, ptr %a2 + %t92 = load %S.gen.Val, ptr %a6 + %t93 = load %S.gen.Val, ptr %a10 + %t94 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t90, { ptr, i64, i64 } %t91, %S.gen.Val %t92, %S.gen.Val %t93, %S.ast.Node %t94) + br label %endif6505 +endif6505: + %t95 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t96 = load %S.ast.Type, ptr %t95 + %t97 = call i1 @finch.gen.isInt(%S.ast.Type %t96) + br i1 %t97, label %then6506, label %endif6508 +then6506: + %t98 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t99 = call ptr @finch_alloc(i64 %t98) + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 0 + store { ptr, i64, i64 } { ptr @.str.4153, i64 1, i64 0 }, ptr %t100 + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 1 + store { ptr, i64, i64 } { ptr @.str.4154, i64 1, i64 0 }, ptr %t101 + %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 2 + store { ptr, i64, i64 } { ptr @.str.4155, i64 1, i64 0 }, ptr %t102 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 3 + store { ptr, i64, i64 } { ptr @.str.4156, i64 1, i64 0 }, ptr %t103 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 4 + store { ptr, i64, i64 } { ptr @.str.4157, i64 1, i64 0 }, ptr %t104 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 5 + store { ptr, i64, i64 } { ptr @.str.4158, i64 1, i64 0 }, ptr %t105 + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 6 + store { ptr, i64, i64 } { ptr @.str.4159, i64 1, i64 0 }, ptr %t106 + %t107 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 7 + store { ptr, i64, i64 } { ptr @.str.4160, i64 1, i64 0 }, ptr %t107 + %t108 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 8 + store { ptr, i64, i64 } { ptr @.str.4161, i64 2, i64 0 }, ptr %t108 + %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i64 9 + store { ptr, i64, i64 } { ptr @.str.4162, i64 2, i64 0 }, ptr %t109 + %t110 = insertvalue { ptr, i64, i64 } undef, ptr %t99, 0 + %t111 = insertvalue { ptr, i64, i64 } %t110, i64 10, 1 + %t112 = insertvalue { ptr, i64, i64 } %t111, i64 10, 2 + store { ptr, i64, i64 } %t112, ptr %a113 + %t114 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t115 = call ptr @finch_alloc(i64 %t114) + %t116 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 0 + store { ptr, i64, i64 } { ptr @.str.4163, i64 3, i64 0 }, ptr %t116 + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 1 + store { ptr, i64, i64 } { ptr @.str.4164, i64 3, i64 0 }, ptr %t117 + %t118 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 2 + store { ptr, i64, i64 } { ptr @.str.4165, i64 3, i64 0 }, ptr %t118 + %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 3 + store { ptr, i64, i64 } { ptr @.str.4166, i64 4, i64 0 }, ptr %t119 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 4 + store { ptr, i64, i64 } { ptr @.str.4167, i64 4, i64 0 }, ptr %t120 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 5 + store { ptr, i64, i64 } { ptr @.str.4168, i64 3, i64 0 }, ptr %t121 + %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 6 + store { ptr, i64, i64 } { ptr @.str.4169, i64 2, i64 0 }, ptr %t122 + %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 7 + store { ptr, i64, i64 } { ptr @.str.4170, i64 3, i64 0 }, ptr %t123 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 8 + store { ptr, i64, i64 } { ptr @.str.4171, i64 3, i64 0 }, ptr %t124 + %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t115, i64 9 + store { ptr, i64, i64 } { ptr @.str.4172, i64 4, i64 0 }, ptr %t125 + %t126 = insertvalue { ptr, i64, i64 } undef, ptr %t115, 0 + %t127 = insertvalue { ptr, i64, i64 } %t126, i64 10, 1 + %t128 = insertvalue { ptr, i64, i64 } %t127, i64 10, 2 + store { ptr, i64, i64 } %t128, ptr %a129 + %t130 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t131 = load %S.ast.Type, ptr %t130 + %t132 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t131) + br i1 %t132, label %then6509, label %endif6511 +then6509: + %t133 = mul i64 10, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t134 = call ptr @finch_alloc(i64 %t133) + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 0 + store { ptr, i64, i64 } { ptr @.str.4173, i64 3, i64 0 }, ptr %t135 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 1 + store { ptr, i64, i64 } { ptr @.str.4174, i64 3, i64 0 }, ptr %t136 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 2 + store { ptr, i64, i64 } { ptr @.str.4175, i64 3, i64 0 }, ptr %t137 + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 3 + store { ptr, i64, i64 } { ptr @.str.4176, i64 4, i64 0 }, ptr %t138 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 4 + store { ptr, i64, i64 } { ptr @.str.4177, i64 4, i64 0 }, ptr %t139 + %t140 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 5 + store { ptr, i64, i64 } { ptr @.str.4178, i64 3, i64 0 }, ptr %t140 + %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 6 + store { ptr, i64, i64 } { ptr @.str.4179, i64 2, i64 0 }, ptr %t141 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 7 + store { ptr, i64, i64 } { ptr @.str.4180, i64 3, i64 0 }, ptr %t142 + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 8 + store { ptr, i64, i64 } { ptr @.str.4181, i64 3, i64 0 }, ptr %t143 + %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t134, i64 9 + store { ptr, i64, i64 } { ptr @.str.4182, i64 4, i64 0 }, ptr %t144 + %t145 = insertvalue { ptr, i64, i64 } undef, ptr %t134, 0 + %t146 = insertvalue { ptr, i64, i64 } %t145, i64 10, 1 + %t147 = insertvalue { ptr, i64, i64 } %t146, i64 10, 2 + %t148 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t147, ptr %a129 + store { ptr, i64, i64 } %t148, ptr %a149 + call void @finch.drop.arr_str(ptr %a149) + br label %endif6511 +endif6511: + %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %a113, i32 0, i32 1 + %t151 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a152 + %t153 = load i64, ptr %t150 + %t154 = load ptr, ptr %a113 + store i64 0, ptr %a155 + br label %find.cond6512 +find.cond6512: + %t156 = load i64, ptr %a155 + %t157 = icmp slt i64 %t156, %t153 + br i1 %t157, label %find.body6513, label %find.end6516 +find.body6513: + %t158 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i64 %t156 + %t159 = load { ptr, i64, i64 }, ptr %t158 + store { ptr, i64, i64 } %t159, ptr %a160 + store { ptr, i64, i64 } %t151, ptr %a161 + %t162 = call i32 @finch_str_eq(ptr %a160, ptr %a161) + %t163 = icmp ne i32 %t162, 0 + br i1 %t163, label %find.hit6514, label %find.next6515 +find.hit6514: + store i64 %t156, ptr %a152 + br label %find.end6516 +find.next6515: + %t164 = add i64 %t156, 1 + store i64 %t164, ptr %a155 + br label %find.cond6512 +find.end6516: + %t165 = load i64, ptr %a152 + store i64 %t165, ptr %a166 + %t167 = load i64, ptr %a166 + %t168 = icmp slt i64 %t167, 0 + br i1 %t168, label %then6517, label %endif6519 +then6517: + %t169 = load ptr, ptr %a1 + %t170 = load { ptr, i64, i64 }, ptr %a2 + %t171 = load %S.gen.Val, ptr %a6 + %t172 = load %S.gen.Val, ptr %a10 + %t173 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t169, { ptr, i64, i64 } %t170, %S.gen.Val %t171, %S.gen.Val %t172, %S.ast.Node %t173) + br label %endif6519 +endif6519: + %t174 = load ptr, ptr %a1 + %t175 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t176 = load %S.ast.Type, ptr %t175 + %t177 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t174, %S.ast.Type %t176) + store { ptr, i64, i64 } %t177, ptr %a178 + %t179 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t179, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.4183, i64 1, i64 0 }, ptr %a181 + %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + br label %logic.from6520 +logic.from6520: + br i1 %t183, label %logic.end6522, label %logic.rhs6521 +logic.rhs6521: + %t184 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } { ptr @.str.4184, i64 1, i64 0 }, ptr %a186 + %t187 = call i32 @finch_str_eq(ptr %a185, ptr %a186) + %t188 = icmp ne i32 %t187, 0 + br label %logic.rend6523 +logic.rend6523: + br label %logic.end6522 +logic.end6522: + %t189 = phi i1 [ true, %logic.from6520 ], [ %t188, %logic.rend6523 ] + br i1 %t189, label %then6524, label %endif6526 +then6524: + %t190 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 + %t191 = load i1, ptr %t190 + br label %logic.from6527 +logic.from6527: + br i1 %t191, label %logic.rhs6528, label %logic.end6529 +logic.rhs6528: + %t192 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + store { ptr, i64, i64 } %t193, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.4185, i64 1, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br label %logic.rend6530 +logic.rend6530: + br label %logic.end6529 +logic.end6529: + %t198 = phi i1 [ false, %logic.from6527 ], [ %t197, %logic.rend6530 ] + br i1 %t198, label %then6531, label %endif6533 +then6531: + %t199 = load ptr, ptr %a1 + %t200 = load %S.ast.Node, ptr %a11 + call void @finch.gen.fail(ptr %t199, %S.ast.Node %t200, { ptr, i64, i64 } { ptr @.str.4186, i64 16, i64 0 }) + br label %endif6533 +endif6533: + %t201 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 3 + %t202 = load i1, ptr %t201 + %t203 = xor i1 %t202, true + br i1 %t203, label %then6534, label %endif6536 +then6534: + %t204 = load ptr, ptr %a1 + %t205 = load ptr, ptr %a1 + %t206 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.4187, i64 8, i64 0 }, ptr %a208 + store { ptr, i64, i64 } %t206, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + %t210 = load { ptr, i64, i64 }, ptr %a207 + store { ptr, i64, i64 } %t210, ptr %a212 + store { ptr, i64, i64 } { ptr @.str.4188, i64 1, i64 0 }, ptr %a213 + call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) + store { ptr, i64, i64 } %t210, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a211 + %t216 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t215, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t215, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.4189, i64 3, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = call { ptr, i64, i64 } @finch.gen.op(ptr %t205, { ptr, i64, i64 } %t227) + store { ptr, i64, i64 } %t227, ptr %a229 + call void @finch_str_drop(ptr %a229) + %t230 = load %S.ast.Node, ptr %a11 + call void @finch.gen.panicIf(ptr %t204, { ptr, i64, i64 } %t228, { ptr, i64, i64 } { ptr @.str.4190, i64 16, i64 0 }, %S.ast.Node %t230) + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_drop(ptr %a231) + br label %endif6536 +endif6536: + br label %endif6526 +endif6526: + %t232 = load ptr, ptr %a1 + %t233 = load i64, ptr %a166 + %t234 = load { ptr, i64, i64 }, ptr %a129 + %t235 = extractvalue { ptr, i64, i64 } %t234, 1 + %t236 = icmp uge i64 %t233, %t235 + br i1 %t236, label %range6537, label %inrange6538 +range6537: + call void @finch_panic_index(ptr @.str.4191, i64 3540, i64 %t233, i64 %t235) + unreachable +inrange6538: + %t237 = extractvalue { ptr, i64, i64 } %t234, 0 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t233 + %t239 = load { ptr, i64, i64 }, ptr %t238 + store { ptr, i64, i64 } %t239, ptr %a241 + store { ptr, i64, i64 } { ptr @.str.4192, i64 1, i64 0 }, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a240 + %t244 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t243, ptr %a246 + store { ptr, i64, i64 } %t244, ptr %a247 + call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) + store { ptr, i64, i64 } %t243, ptr %a248 + call void @finch_str_drop(ptr %a248) + %t249 = load { ptr, i64, i64 }, ptr %a245 + store { ptr, i64, i64 } %t249, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.4193, i64 1, i64 0 }, ptr %a252 + call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) + store { ptr, i64, i64 } %t249, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a250 + %t255 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t256 = load { ptr, i64, i64 }, ptr %t255 + store { ptr, i64, i64 } %t254, ptr %a258 + store { ptr, i64, i64 } %t256, ptr %a259 + call void @finch_str_concat(ptr %a257, ptr %a258, ptr %a259) + store { ptr, i64, i64 } %t254, ptr %a260 + call void @finch_str_drop(ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } %t261, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.4194, i64 2, i64 0 }, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + store { ptr, i64, i64 } %t261, ptr %a265 + call void @finch_str_drop(ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a262 + %t267 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t266, ptr %a270 + store { ptr, i64, i64 } %t268, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t266, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + %t274 = call { ptr, i64, i64 } @finch.gen.op(ptr %t232, { ptr, i64, i64 } %t273) + store { ptr, i64, i64 } %t273, ptr %a275 + call void @finch_str_drop(ptr %a275) + %t276 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t274, 0 + %t277 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t278 = load %S.ast.Type, ptr %t277 + store %S.ast.Type %t278, ptr %a279 + call void @finch.copy.S_ast_Type(ptr %a280, ptr %a279) + %t281 = load %S.ast.Type, ptr %a280 + %t282 = insertvalue %S.gen.Val %t276, %S.ast.Type %t281, 1 + call void @finch_str_drop(ptr %a178) + call void @finch.drop.arr_str(ptr %a129) + call void @finch.drop.arr_str(ptr %a113) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t282 +endif6508: + %t283 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t284 = load %S.ast.Type, ptr %t283 + %t285 = call i1 @finch.gen.isFloat(%S.ast.Type %t284) + br i1 %t285, label %then6539, label %endif6541 +then6539: + %t286 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t287 = call ptr @finch_alloc(i64 %t286) + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 0 + store { ptr, i64, i64 } { ptr @.str.4195, i64 1, i64 0 }, ptr %t288 + %t289 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 1 + store { ptr, i64, i64 } { ptr @.str.4196, i64 1, i64 0 }, ptr %t289 + %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 2 + store { ptr, i64, i64 } { ptr @.str.4197, i64 1, i64 0 }, ptr %t290 + %t291 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 3 + store { ptr, i64, i64 } { ptr @.str.4198, i64 1, i64 0 }, ptr %t291 + %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i64 4 + store { ptr, i64, i64 } { ptr @.str.4199, i64 1, i64 0 }, ptr %t292 + %t293 = insertvalue { ptr, i64, i64 } undef, ptr %t287, 0 + %t294 = insertvalue { ptr, i64, i64 } %t293, i64 5, 1 + %t295 = insertvalue { ptr, i64, i64 } %t294, i64 5, 2 + store { ptr, i64, i64 } %t295, ptr %a296 + %t297 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t298 = call ptr @finch_alloc(i64 %t297) + %t299 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 0 + store { ptr, i64, i64 } { ptr @.str.4200, i64 4, i64 0 }, ptr %t299 + %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 1 + store { ptr, i64, i64 } { ptr @.str.4201, i64 4, i64 0 }, ptr %t300 + %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 2 + store { ptr, i64, i64 } { ptr @.str.4202, i64 4, i64 0 }, ptr %t301 + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 3 + store { ptr, i64, i64 } { ptr @.str.4203, i64 4, i64 0 }, ptr %t302 + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t298, i64 4 + store { ptr, i64, i64 } { ptr @.str.4204, i64 4, i64 0 }, ptr %t303 + %t304 = insertvalue { ptr, i64, i64 } undef, ptr %t298, 0 + %t305 = insertvalue { ptr, i64, i64 } %t304, i64 5, 1 + %t306 = insertvalue { ptr, i64, i64 } %t305, i64 5, 2 + store { ptr, i64, i64 } %t306, ptr %a307 + %t308 = getelementptr inbounds { ptr, i64, i64 }, ptr %a296, i32 0, i32 1 + %t309 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a310 + %t311 = load i64, ptr %t308 + %t312 = load ptr, ptr %a296 + store i64 0, ptr %a313 + br label %find.cond6542 +find.cond6542: + %t314 = load i64, ptr %a313 + %t315 = icmp slt i64 %t314, %t311 + br i1 %t315, label %find.body6543, label %find.end6546 +find.body6543: + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t312, i64 %t314 + %t317 = load { ptr, i64, i64 }, ptr %t316 + store { ptr, i64, i64 } %t317, ptr %a318 + store { ptr, i64, i64 } %t309, ptr %a319 + %t320 = call i32 @finch_str_eq(ptr %a318, ptr %a319) + %t321 = icmp ne i32 %t320, 0 + br i1 %t321, label %find.hit6544, label %find.next6545 +find.hit6544: + store i64 %t314, ptr %a310 + br label %find.end6546 +find.next6545: + %t322 = add i64 %t314, 1 + store i64 %t322, ptr %a313 + br label %find.cond6542 +find.end6546: + %t323 = load i64, ptr %a310 + store i64 %t323, ptr %a324 + %t325 = load i64, ptr %a324 + %t326 = icmp slt i64 %t325, 0 + br i1 %t326, label %then6547, label %endif6549 +then6547: + %t327 = load ptr, ptr %a1 + %t328 = load { ptr, i64, i64 }, ptr %a2 + %t329 = load %S.gen.Val, ptr %a6 + %t330 = load %S.gen.Val, ptr %a10 + %t331 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t327, { ptr, i64, i64 } %t328, %S.gen.Val %t329, %S.gen.Val %t330, %S.ast.Node %t331) + br label %endif6549 +endif6549: + %t332 = load ptr, ptr %a1 + %t333 = load i64, ptr %a324 + %t334 = load { ptr, i64, i64 }, ptr %a307 + %t335 = extractvalue { ptr, i64, i64 } %t334, 1 + %t336 = icmp uge i64 %t333, %t335 + br i1 %t336, label %range6550, label %inrange6551 +range6550: + call void @finch_panic_index(ptr @.str.4205, i64 3549, i64 %t333, i64 %t335) + unreachable +inrange6551: + %t337 = extractvalue { ptr, i64, i64 } %t334, 0 + %t338 = getelementptr inbounds { ptr, i64, i64 }, ptr %t337, i64 %t333 + %t339 = load { ptr, i64, i64 }, ptr %t338 + store { ptr, i64, i64 } %t339, ptr %a341 + store { ptr, i64, i64 } { ptr @.str.4206, i64 1, i64 0 }, ptr %a342 + call void @finch_str_concat(ptr %a340, ptr %a341, ptr %a342) + %t343 = load { ptr, i64, i64 }, ptr %a340 + %t344 = load ptr, ptr %a1 + %t345 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t346 = load %S.ast.Type, ptr %t345 + %t347 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t344, %S.ast.Type %t346) + store { ptr, i64, i64 } %t343, ptr %a349 + store { ptr, i64, i64 } %t347, ptr %a350 + call void @finch_str_concat(ptr %a348, ptr %a349, ptr %a350) + store { ptr, i64, i64 } %t343, ptr %a351 + call void @finch_str_drop(ptr %a351) + store { ptr, i64, i64 } %t347, ptr %a352 + call void @finch_str_drop(ptr %a352) + %t353 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t353, ptr %a355 + store { ptr, i64, i64 } { ptr @.str.4207, i64 1, i64 0 }, ptr %a356 + call void @finch_str_concat(ptr %a354, ptr %a355, ptr %a356) + store { ptr, i64, i64 } %t353, ptr %a357 + call void @finch_str_drop(ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a354 + %t359 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t360 = load { ptr, i64, i64 }, ptr %t359 + store { ptr, i64, i64 } %t358, ptr %a362 + store { ptr, i64, i64 } %t360, ptr %a363 + call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) + store { ptr, i64, i64 } %t358, ptr %a364 + call void @finch_str_drop(ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a361 + store { ptr, i64, i64 } %t365, ptr %a367 + store { ptr, i64, i64 } { ptr @.str.4208, i64 2, i64 0 }, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + store { ptr, i64, i64 } %t365, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = load { ptr, i64, i64 }, ptr %a366 + %t371 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t372 = load { ptr, i64, i64 }, ptr %t371 + store { ptr, i64, i64 } %t370, ptr %a374 + store { ptr, i64, i64 } %t372, ptr %a375 + call void @finch_str_concat(ptr %a373, ptr %a374, ptr %a375) + store { ptr, i64, i64 } %t370, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a373 + %t378 = call { ptr, i64, i64 } @finch.gen.op(ptr %t332, { ptr, i64, i64 } %t377) + store { ptr, i64, i64 } %t377, ptr %a379 + call void @finch_str_drop(ptr %a379) + %t380 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t378, 0 + %t381 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t382 = load %S.ast.Type, ptr %t381 + store %S.ast.Type %t382, ptr %a383 + call void @finch.copy.S_ast_Type(ptr %a384, ptr %a383) + %t385 = load %S.ast.Type, ptr %a384 + %t386 = insertvalue %S.gen.Val %t380, %S.ast.Type %t385, 1 + call void @finch.drop.arr_str(ptr %a307) + call void @finch.drop.arr_str(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t386 +endif6541: + %t387 = load ptr, ptr %a1 + %t388 = load { ptr, i64, i64 }, ptr %a2 + %t389 = load %S.gen.Val, ptr %a6 + %t390 = load %S.gen.Val, ptr %a10 + %t391 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t387, { ptr, i64, i64 } %t388, %S.gen.Val %t389, %S.gen.Val %t390, %S.ast.Node %t391) + %t392 = load %S.gen.Val, ptr %a6 + call void @finch.drop.S_gen_Val(ptr %a10) + ret %S.gen.Val %t392 +} + +define internal %S.gen.Val @finch.gen.compare(ptr %p0, { ptr, i64, i64 } %p1, %S.gen.Val %p2, %S.gen.Val %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.gen.Val, align 16 + %a4 = alloca %S.gen.Val, align 16 + %a6 = alloca %S.gen.Val, align 16 + %a7 = alloca %S.gen.Val, align 16 + %a8 = alloca %S.gen.Val, align 16 + %a10 = alloca %S.gen.Val, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca i1, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca i64, align 16 + %a330 = alloca i64, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a520 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.gen.Val %p2, ptr %a3 + call void @finch.copy.S_gen_Val(ptr %a4, ptr %a3) + %t5 = load %S.gen.Val, ptr %a4 + store %S.gen.Val %t5, ptr %a6 + store %S.gen.Val %p3, ptr %a7 + call void @finch.copy.S_gen_Val(ptr %a8, ptr %a7) + %t9 = load %S.gen.Val, ptr %a8 + store %S.gen.Val %t9, ptr %a10 + store %S.ast.Node %p4, ptr %a11 + %t12 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.4209, i64 2, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.from6552 +logic.from6552: + br i1 %t16, label %logic.end6554, label %logic.rhs6553 +logic.rhs6553: + %t17 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.4210, i64 2, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp ne i32 %t20, 0 + br label %logic.rend6555 +logic.rend6555: + br label %logic.end6554 +logic.end6554: + %t22 = phi i1 [ true, %logic.from6552 ], [ %t21, %logic.rend6555 ] + store i1 %t22, ptr %a23 + %t24 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t25 = getelementptr inbounds %S.ast.Type, ptr %t24, i32 0, i32 0 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.4211, i64 3, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br label %logic.from6556 +logic.from6556: + br i1 %t30, label %logic.end6558, label %logic.rhs6557 +logic.rhs6557: + %t31 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i32 0, i32 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.4212, i64 3, i64 0 }, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br label %logic.rend6559 +logic.rend6559: + br label %logic.end6558 +logic.end6558: + %t38 = phi i1 [ true, %logic.from6556 ], [ %t37, %logic.rend6559 ] + br label %logic.from6560 +logic.from6560: + br i1 %t38, label %logic.end6562, label %logic.rhs6561 +logic.rhs6561: + %t39 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t40 = getelementptr inbounds %S.ast.Type, ptr %t39, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.4213, i64 4, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br label %logic.rend6563 +logic.rend6563: + br label %logic.end6562 +logic.end6562: + %t46 = phi i1 [ true, %logic.from6560 ], [ %t45, %logic.rend6563 ] + br label %logic.from6564 +logic.from6564: + br i1 %t46, label %logic.end6566, label %logic.rhs6565 +logic.rhs6565: + %t47 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t48 = getelementptr inbounds %S.ast.Type, ptr %t47, i32 0, i32 0 + %t49 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.4214, i64 4, i64 0 }, ptr %a51 + %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) + %t53 = icmp ne i32 %t52, 0 + br label %logic.rend6567 +logic.rend6567: + br label %logic.end6566 +logic.end6566: + %t54 = phi i1 [ true, %logic.from6564 ], [ %t53, %logic.rend6567 ] + br i1 %t54, label %then6568, label %endif6570 +then6568: + %t55 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t56 = getelementptr inbounds %S.ast.Type, ptr %t55, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.4215, i64 3, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.from6571 +logic.from6571: + br i1 %t61, label %logic.end6573, label %logic.rhs6572 +logic.rhs6572: + %t62 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t63 = getelementptr inbounds %S.ast.Type, ptr %t62, i32 0, i32 0 + %t64 = load { ptr, i64, i64 }, ptr %t63 + store { ptr, i64, i64 } %t64, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.4216, i64 3, i64 0 }, ptr %a66 + %t67 = call i32 @finch_str_eq(ptr %a65, ptr %a66) + %t68 = icmp ne i32 %t67, 0 + br label %logic.rend6574 +logic.rend6574: + br label %logic.end6573 +logic.end6573: + %t69 = phi i1 [ true, %logic.from6571 ], [ %t68, %logic.rend6574 ] + br i1 %t69, label %then6575, label %endif6577 +then6575: + %t70 = load ptr, ptr %a1 + %t71 = load %S.ast.Node, ptr %a11 + call void @finch.gen.fail(ptr %t70, %S.ast.Node %t71, { ptr, i64, i64 } { ptr @.str.4217, i64 59, i64 0 }) + br label %endif6577 +endif6577: + %t72 = load i1, ptr %a23 + %t73 = xor i1 %t72, true + br i1 %t73, label %then6578, label %endif6580 +then6578: + %t74 = load ptr, ptr %a1 + %t75 = load { ptr, i64, i64 }, ptr %a2 + %t76 = load %S.gen.Val, ptr %a6 + %t77 = load %S.gen.Val, ptr %a10 + %t78 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t74, { ptr, i64, i64 } %t75, %S.gen.Val %t76, %S.gen.Val %t77, %S.ast.Node %t78) + br label %endif6580 +endif6580: + store { ptr, i64, i64 } { ptr @.str.4218, i64 2, i64 0 }, ptr %a79 + %t80 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.4219, i64 2, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %then6581, label %endif6583 +then6581: + %t85 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4220, i64 2, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + br label %endif6583 +endif6583: + %t87 = load ptr, ptr %a1 + %t88 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4221, i64 5, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4222, i64 5, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t99 = load { ptr, i64, i64 }, ptr %t98 + store { ptr, i64, i64 } %t97, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t97, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.4223, i64 2, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t111 = load { ptr, i64, i64 }, ptr %t110 + store { ptr, i64, i64 } %t109, ptr %a113 + store { ptr, i64, i64 } %t111, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t109, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a112 + %t117 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t116, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t117, 0 + %t120 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4224, i64 4, i64 0 }) + %t121 = insertvalue %S.gen.Val %t119, %S.ast.Type %t120, 1 + call void @finch_str_drop(ptr %a79) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t121 +endif6570: + %t122 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t123 = getelementptr inbounds %S.ast.Type, ptr %t122, i32 0, i32 0 + %t124 = load { ptr, i64, i64 }, ptr %t123 + store { ptr, i64, i64 } %t124, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.4225, i64 3, i64 0 }, ptr %a126 + %t127 = call i32 @finch_str_eq(ptr %a125, ptr %a126) + %t128 = icmp ne i32 %t127, 0 + br label %logic.from6584 +logic.from6584: + br i1 %t128, label %logic.rhs6585, label %logic.end6586 +logic.rhs6585: + %t129 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 1 + %t130 = getelementptr inbounds %S.ast.Type, ptr %t129, i32 0, i32 0 + %t131 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t131, ptr %a132 + store { ptr, i64, i64 } { ptr @.str.4226, i64 3, i64 0 }, ptr %a133 + %t134 = call i32 @finch_str_eq(ptr %a132, ptr %a133) + %t135 = icmp ne i32 %t134, 0 + br label %logic.rend6587 +logic.rend6587: + br label %logic.end6586 +logic.end6586: + %t136 = phi i1 [ false, %logic.from6584 ], [ %t135, %logic.rend6587 ] + br i1 %t136, label %then6588, label %endif6590 +then6588: + %t137 = load i1, ptr %a23 + br i1 %t137, label %then6591, label %endif6593 +then6591: + %t138 = load ptr, ptr %a1 + %t139 = load ptr, ptr %a1 + %t140 = load %S.gen.Val, ptr %a6 + %t141 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t139, %S.gen.Val %t140) + store { ptr, i64, i64 } { ptr @.str.4227, i64 27, i64 0 }, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.4228, i64 6, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = load ptr, ptr %a1 + %t153 = load %S.gen.Val, ptr %a10 + %t154 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t152, %S.gen.Val %t153) + store { ptr, i64, i64 } %t151, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t151, ptr %a158 + call void @finch_str_drop(ptr %a158) + store { ptr, i64, i64 } %t154, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.4229, i64 1, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + store { ptr, i64, i64 } %t160, ptr %a164 + call void @finch_str_drop(ptr %a164) + %t165 = load { ptr, i64, i64 }, ptr %a161 + %t166 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t165) + store { ptr, i64, i64 } %t165, ptr %a167 + call void @finch_str_drop(ptr %a167) + store { ptr, i64, i64 } %t166, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4230, i64 2, i64 0 }, ptr %a169 + %t170 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.4231, i64 2, i64 0 }, ptr %a172 + %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) + %t174 = icmp ne i32 %t173, 0 + br i1 %t174, label %then6594, label %endif6596 +then6594: + %t175 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4232, i64 2, i64 0 }, ptr %a169 + store { ptr, i64, i64 } %t175, ptr %a176 + call void @finch_str_drop(ptr %a176) + br label %endif6596 +endif6596: + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4233, i64 5, i64 0 }, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.4234, i64 5, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t187, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + store { ptr, i64, i64 } %t187, ptr %a192 + call void @finch_str_drop(ptr %a192) + %t193 = load { ptr, i64, i64 }, ptr %a189 + store { ptr, i64, i64 } %t193, ptr %a195 + store { ptr, i64, i64 } { ptr @.str.4235, i64 3, i64 0 }, ptr %a196 + call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) + store { ptr, i64, i64 } %t193, ptr %a197 + call void @finch_str_drop(ptr %a197) + %t198 = load { ptr, i64, i64 }, ptr %a194 + %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t177, { ptr, i64, i64 } %t198) + store { ptr, i64, i64 } %t198, ptr %a200 + call void @finch_str_drop(ptr %a200) + store { ptr, i64, i64 } %t199, ptr %a201 + %t202 = load ptr, ptr %a1 + %t203 = load %S.gen.Val, ptr %a6 + call void @finch.gen.release(ptr %t202, %S.gen.Val %t203) + %t204 = load ptr, ptr %a1 + %t205 = load %S.gen.Val, ptr %a10 + call void @finch.gen.release(ptr %t204, %S.gen.Val %t205) + %t206 = load { ptr, i64, i64 }, ptr %a201 + store { ptr, i64, i64 } %t206, ptr %a207 + call void @finch_str_copy(ptr %a208, ptr %a207) + %t209 = load { ptr, i64, i64 }, ptr %a208 + %t210 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t209, 0 + %t211 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4236, i64 4, i64 0 }) + %t212 = insertvalue %S.gen.Val %t210, %S.ast.Type %t211, 1 + call void @finch_str_drop(ptr %a201) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a168) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t212 +endif6593: + %t213 = load ptr, ptr %a1 + %t214 = load ptr, ptr %a1 + %t215 = load %S.gen.Val, ptr %a6 + %t216 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t214, %S.gen.Val %t215) + store { ptr, i64, i64 } { ptr @.str.4237, i64 28, i64 0 }, ptr %a218 + store { ptr, i64, i64 } %t216, ptr %a219 + call void @finch_str_concat(ptr %a217, ptr %a218, ptr %a219) + store { ptr, i64, i64 } %t216, ptr %a220 + call void @finch_str_drop(ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a217 + store { ptr, i64, i64 } %t221, ptr %a223 + store { ptr, i64, i64 } { ptr @.str.4238, i64 6, i64 0 }, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t221, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load { ptr, i64, i64 }, ptr %a222 + %t227 = load ptr, ptr %a1 + %t228 = load %S.gen.Val, ptr %a10 + %t229 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t227, %S.gen.Val %t228) + store { ptr, i64, i64 } %t226, ptr %a231 + store { ptr, i64, i64 } %t229, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + store { ptr, i64, i64 } %t226, ptr %a233 + call void @finch_str_drop(ptr %a233) + store { ptr, i64, i64 } %t229, ptr %a234 + call void @finch_str_drop(ptr %a234) + %t235 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t235, ptr %a237 + store { ptr, i64, i64 } { ptr @.str.4239, i64 1, i64 0 }, ptr %a238 + call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) + store { ptr, i64, i64 } %t235, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a236 + %t241 = call { ptr, i64, i64 } @finch.gen.op(ptr %t213, { ptr, i64, i64 } %t240) + store { ptr, i64, i64 } %t240, ptr %a242 + call void @finch_str_drop(ptr %a242) + store { ptr, i64, i64 } %t241, ptr %a243 + %t244 = load ptr, ptr %a1 + %t245 = load { ptr, i64, i64 }, ptr %a2 + %t246 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t245, i1 true) + store { ptr, i64, i64 } { ptr @.str.4240, i64 5, i64 0 }, ptr %a248 + store { ptr, i64, i64 } %t246, ptr %a249 + call void @finch_str_concat(ptr %a247, ptr %a248, ptr %a249) + store { ptr, i64, i64 } %t246, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.4241, i64 5, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + %t257 = load { ptr, i64, i64 }, ptr %a243 + store { ptr, i64, i64 } %t256, ptr %a259 + store { ptr, i64, i64 } %t257, ptr %a260 + call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) + store { ptr, i64, i64 } %t256, ptr %a261 + call void @finch_str_drop(ptr %a261) + %t262 = load { ptr, i64, i64 }, ptr %a258 + store { ptr, i64, i64 } %t262, ptr %a264 + store { ptr, i64, i64 } { ptr @.str.4242, i64 3, i64 0 }, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + store { ptr, i64, i64 } %t262, ptr %a266 + call void @finch_str_drop(ptr %a266) + %t267 = load { ptr, i64, i64 }, ptr %a263 + %t268 = call { ptr, i64, i64 } @finch.gen.op(ptr %t244, { ptr, i64, i64 } %t267) + store { ptr, i64, i64 } %t267, ptr %a269 + call void @finch_str_drop(ptr %a269) + store { ptr, i64, i64 } %t268, ptr %a270 + %t271 = load ptr, ptr %a1 + %t272 = load %S.gen.Val, ptr %a6 + call void @finch.gen.release(ptr %t271, %S.gen.Val %t272) + %t273 = load ptr, ptr %a1 + %t274 = load %S.gen.Val, ptr %a10 + call void @finch.gen.release(ptr %t273, %S.gen.Val %t274) + %t275 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t275, ptr %a276 + call void @finch_str_copy(ptr %a277, ptr %a276) + %t278 = load { ptr, i64, i64 }, ptr %a277 + %t279 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t278, 0 + %t280 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4243, i64 4, i64 0 }) + %t281 = insertvalue %S.gen.Val %t279, %S.ast.Type %t280, 1 + call void @finch_str_drop(ptr %a270) + call void @finch_str_drop(ptr %a243) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t281 +endif6590: + %t282 = load ptr, ptr %a1 + %t283 = call i1 @finch.gen.unify(ptr %t282, ptr %a6, ptr %a10) + %t284 = xor i1 %t283, true + br i1 %t284, label %then6597, label %endif6599 +then6597: + %t285 = load ptr, ptr %a1 + %t286 = load { ptr, i64, i64 }, ptr %a2 + %t287 = load %S.gen.Val, ptr %a6 + %t288 = load %S.gen.Val, ptr %a10 + %t289 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t285, { ptr, i64, i64 } %t286, %S.gen.Val %t287, %S.gen.Val %t288, %S.ast.Node %t289) + br label %endif6599 +endif6599: + %t290 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t291 = getelementptr inbounds %S.ast.Type, ptr %t290, i32 0, i32 0 + %t292 = load { ptr, i64, i64 }, ptr %t291 + store { ptr, i64, i64 } %t292, ptr %a293 + call void @finch_str_copy(ptr %a294, ptr %a293) + %t295 = load { ptr, i64, i64 }, ptr %a294 + store { ptr, i64, i64 } %t295, ptr %a296 + %t297 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t298 = load %S.ast.Type, ptr %t297 + %t299 = call i1 @finch.gen.isFloat(%S.ast.Type %t298) + br i1 %t299, label %then6600, label %endif6602 +then6600: + %t300 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t301 = call ptr @finch_alloc(i64 %t300) + %t302 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 0 + store { ptr, i64, i64 } { ptr @.str.4244, i64 2, i64 0 }, ptr %t302 + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 1 + store { ptr, i64, i64 } { ptr @.str.4245, i64 2, i64 0 }, ptr %t303 + %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 2 + store { ptr, i64, i64 } { ptr @.str.4246, i64 1, i64 0 }, ptr %t304 + %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 3 + store { ptr, i64, i64 } { ptr @.str.4247, i64 2, i64 0 }, ptr %t305 + %t306 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 4 + store { ptr, i64, i64 } { ptr @.str.4248, i64 1, i64 0 }, ptr %t306 + %t307 = getelementptr inbounds { ptr, i64, i64 }, ptr %t301, i64 5 + store { ptr, i64, i64 } { ptr @.str.4249, i64 2, i64 0 }, ptr %t307 + %t308 = insertvalue { ptr, i64, i64 } undef, ptr %t301, 0 + %t309 = insertvalue { ptr, i64, i64 } %t308, i64 6, 1 + %t310 = insertvalue { ptr, i64, i64 } %t309, i64 6, 2 + store { ptr, i64, i64 } %t310, ptr %a311 + %t312 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t313 = call ptr @finch_alloc(i64 %t312) + %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 0 + store { ptr, i64, i64 } { ptr @.str.4250, i64 3, i64 0 }, ptr %t314 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 1 + store { ptr, i64, i64 } { ptr @.str.4251, i64 3, i64 0 }, ptr %t315 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 2 + store { ptr, i64, i64 } { ptr @.str.4252, i64 3, i64 0 }, ptr %t316 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 3 + store { ptr, i64, i64 } { ptr @.str.4253, i64 3, i64 0 }, ptr %t317 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 4 + store { ptr, i64, i64 } { ptr @.str.4254, i64 3, i64 0 }, ptr %t318 + %t319 = getelementptr inbounds { ptr, i64, i64 }, ptr %t313, i64 5 + store { ptr, i64, i64 } { ptr @.str.4255, i64 3, i64 0 }, ptr %t319 + %t320 = insertvalue { ptr, i64, i64 } undef, ptr %t313, 0 + %t321 = insertvalue { ptr, i64, i64 } %t320, i64 6, 1 + %t322 = insertvalue { ptr, i64, i64 } %t321, i64 6, 2 + store { ptr, i64, i64 } %t322, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a311, i32 0, i32 1 + %t326 = load { ptr, i64, i64 }, ptr %a2 + store i64 -1, ptr %a327 + %t328 = load i64, ptr %t325 + %t329 = load ptr, ptr %a311 + store i64 0, ptr %a330 + br label %find.cond6603 +find.cond6603: + %t331 = load i64, ptr %a330 + %t332 = icmp slt i64 %t331, %t328 + br i1 %t332, label %find.body6604, label %find.end6607 +find.body6604: + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %t329, i64 %t331 + %t334 = load { ptr, i64, i64 }, ptr %t333 + store { ptr, i64, i64 } %t334, ptr %a335 + store { ptr, i64, i64 } %t326, ptr %a336 + %t337 = call i32 @finch_str_eq(ptr %a335, ptr %a336) + %t338 = icmp ne i32 %t337, 0 + br i1 %t338, label %find.hit6605, label %find.next6606 +find.hit6605: + store i64 %t331, ptr %a327 + br label %find.end6607 +find.next6606: + %t339 = add i64 %t331, 1 + store i64 %t339, ptr %a330 + br label %find.cond6603 +find.end6607: + %t340 = load i64, ptr %a327 + %t341 = load { ptr, i64, i64 }, ptr %a323 + %t342 = extractvalue { ptr, i64, i64 } %t341, 1 + %t343 = icmp uge i64 %t340, %t342 + br i1 %t343, label %range6608, label %inrange6609 +range6608: + call void @finch_panic_index(ptr @.str.4257, i64 3595, i64 %t340, i64 %t342) + unreachable +inrange6609: + %t344 = extractvalue { ptr, i64, i64 } %t341, 0 + %t345 = getelementptr inbounds { ptr, i64, i64 }, ptr %t344, i64 %t340 + %t346 = load { ptr, i64, i64 }, ptr %t345 + store { ptr, i64, i64 } { ptr @.str.4256, i64 5, i64 0 }, ptr %a348 + store { ptr, i64, i64 } %t346, ptr %a349 + call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) + %t350 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t350, ptr %a352 + store { ptr, i64, i64 } { ptr @.str.4258, i64 1, i64 0 }, ptr %a353 + call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) + store { ptr, i64, i64 } %t350, ptr %a354 + call void @finch_str_drop(ptr %a354) + %t355 = load { ptr, i64, i64 }, ptr %a351 + %t356 = load ptr, ptr %a1 + %t357 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t358 = load %S.ast.Type, ptr %t357 + %t359 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t356, %S.ast.Type %t358) + store { ptr, i64, i64 } %t355, ptr %a361 + store { ptr, i64, i64 } %t359, ptr %a362 + call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) + store { ptr, i64, i64 } %t355, ptr %a363 + call void @finch_str_drop(ptr %a363) + store { ptr, i64, i64 } %t359, ptr %a364 + call void @finch_str_drop(ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a360 + store { ptr, i64, i64 } %t365, ptr %a367 + store { ptr, i64, i64 } { ptr @.str.4259, i64 1, i64 0 }, ptr %a368 + call void @finch_str_concat(ptr %a366, ptr %a367, ptr %a368) + store { ptr, i64, i64 } %t365, ptr %a369 + call void @finch_str_drop(ptr %a369) + %t370 = load { ptr, i64, i64 }, ptr %a366 + %t371 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t372 = load { ptr, i64, i64 }, ptr %t371 + store { ptr, i64, i64 } %t370, ptr %a374 + store { ptr, i64, i64 } %t372, ptr %a375 + call void @finch_str_concat(ptr %a373, ptr %a374, ptr %a375) + store { ptr, i64, i64 } %t370, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a373 + store { ptr, i64, i64 } %t377, ptr %a379 + store { ptr, i64, i64 } { ptr @.str.4260, i64 2, i64 0 }, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + %t383 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t384 = load { ptr, i64, i64 }, ptr %t383 + store { ptr, i64, i64 } %t382, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + store { ptr, i64, i64 } %t382, ptr %a388 + call void @finch_str_drop(ptr %a388) + %t389 = load { ptr, i64, i64 }, ptr %a385 + %t390 = call { ptr, i64, i64 } @finch.gen.op(ptr %t324, { ptr, i64, i64 } %t389) + store { ptr, i64, i64 } %t389, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t390, 0 + %t393 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4261, i64 4, i64 0 }) + %t394 = insertvalue %S.gen.Val %t392, %S.ast.Type %t393, 1 + call void @finch.drop.arr_str(ptr %a323) + call void @finch.drop.arr_str(ptr %a311) + call void @finch_str_drop(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t394 +endif6602: + %t395 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t395, ptr %a396 + store { ptr, i64, i64 } { ptr @.str.4262, i64 4, i64 0 }, ptr %a397 + %t398 = call i32 @finch_str_eq(ptr %a396, ptr %a397) + %t399 = icmp ne i32 %t398, 0 + br i1 %t399, label %then6610, label %endif6612 +then6610: + %t400 = load i1, ptr %a23 + %t401 = xor i1 %t400, true + br i1 %t401, label %then6613, label %endif6615 +then6613: + %t402 = load ptr, ptr %a1 + %t403 = load %S.ast.Node, ptr %a11 + call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4263, i64 115, i64 0 }) + br label %endif6615 +endif6615: + store { ptr, i64, i64 } { ptr @.str.4264, i64 2, i64 0 }, ptr %a404 + %t405 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t405, ptr %a406 + store { ptr, i64, i64 } { ptr @.str.4265, i64 2, i64 0 }, ptr %a407 + %t408 = call i32 @finch_str_eq(ptr %a406, ptr %a407) + %t409 = icmp ne i32 %t408, 0 + br i1 %t409, label %then6616, label %endif6618 +then6616: + %t410 = load { ptr, i64, i64 }, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.4266, i64 2, i64 0 }, ptr %a404 + store { ptr, i64, i64 } %t410, ptr %a411 + call void @finch_str_drop(ptr %a411) + br label %endif6618 +endif6618: + %t412 = load ptr, ptr %a1 + %t413 = load { ptr, i64, i64 }, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.4267, i64 5, i64 0 }, ptr %a415 + store { ptr, i64, i64 } %t413, ptr %a416 + call void @finch_str_concat(ptr %a414, ptr %a415, ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a414 + store { ptr, i64, i64 } %t417, ptr %a419 + store { ptr, i64, i64 } { ptr @.str.4268, i64 5, i64 0 }, ptr %a420 + call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420) + store { ptr, i64, i64 } %t417, ptr %a421 + call void @finch_str_drop(ptr %a421) + %t422 = load { ptr, i64, i64 }, ptr %a418 + %t423 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t424 = load { ptr, i64, i64 }, ptr %t423 + store { ptr, i64, i64 } %t422, ptr %a426 + store { ptr, i64, i64 } %t424, ptr %a427 + call void @finch_str_concat(ptr %a425, ptr %a426, ptr %a427) + store { ptr, i64, i64 } %t422, ptr %a428 + call void @finch_str_drop(ptr %a428) + %t429 = load { ptr, i64, i64 }, ptr %a425 + store { ptr, i64, i64 } %t429, ptr %a431 + store { ptr, i64, i64 } { ptr @.str.4269, i64 2, i64 0 }, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t436 = load { ptr, i64, i64 }, ptr %t435 + store { ptr, i64, i64 } %t434, ptr %a438 + store { ptr, i64, i64 } %t436, ptr %a439 + call void @finch_str_concat(ptr %a437, ptr %a438, ptr %a439) + store { ptr, i64, i64 } %t434, ptr %a440 + call void @finch_str_drop(ptr %a440) + %t441 = load { ptr, i64, i64 }, ptr %a437 + %t442 = call { ptr, i64, i64 } @finch.gen.op(ptr %t412, { ptr, i64, i64 } %t441) + store { ptr, i64, i64 } %t441, ptr %a443 + call void @finch_str_drop(ptr %a443) + %t444 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t442, 0 + %t445 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4270, i64 4, i64 0 }) + %t446 = insertvalue %S.gen.Val %t444, %S.ast.Type %t445, 1 + call void @finch_str_drop(ptr %a404) + call void @finch_str_drop(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t446 +endif6612: + %t447 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t447, ptr %a448 + store { ptr, i64, i64 } { ptr @.str.4271, i64 4, i64 0 }, ptr %a449 + %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) + %t451 = icmp ne i32 %t450, 0 + br label %logic.from6619 +logic.from6619: + br i1 %t451, label %logic.rhs6620, label %logic.end6621 +logic.rhs6620: + %t452 = load i1, ptr %a23 + %t453 = xor i1 %t452, true + br label %logic.rend6622 +logic.rend6622: + br label %logic.end6621 +logic.end6621: + %t454 = phi i1 [ false, %logic.from6619 ], [ %t453, %logic.rend6622 ] + br i1 %t454, label %then6623, label %endif6625 +then6623: + %t455 = load ptr, ptr %a1 + %t456 = load { ptr, i64, i64 }, ptr %a2 + %t457 = load %S.gen.Val, ptr %a6 + %t458 = load %S.gen.Val, ptr %a10 + %t459 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t455, { ptr, i64, i64 } %t456, %S.gen.Val %t457, %S.gen.Val %t458, %S.ast.Node %t459) + br label %endif6625 +endif6625: + %t460 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t461 = load %S.ast.Type, ptr %t460 + %t462 = call i1 @finch.gen.isInt(%S.ast.Type %t461) + %t463 = xor i1 %t462, true + br label %logic.from6626 +logic.from6626: + br i1 %t463, label %logic.rhs6627, label %logic.end6628 +logic.rhs6627: + %t464 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t464, ptr %a465 + store { ptr, i64, i64 } { ptr @.str.4272, i64 4, i64 0 }, ptr %a466 + %t467 = call i32 @finch_str_eq(ptr %a465, ptr %a466) + %t468 = icmp eq i32 %t467, 0 + br label %logic.rend6629 +logic.rend6629: + br label %logic.end6628 +logic.end6628: + %t469 = phi i1 [ false, %logic.from6626 ], [ %t468, %logic.rend6629 ] + br label %logic.from6630 +logic.from6630: + br i1 %t469, label %logic.rhs6631, label %logic.end6632 +logic.rhs6631: + %t470 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t470, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.4273, i64 4, i64 0 }, ptr %a472 + %t473 = call i32 @finch_str_eq(ptr %a471, ptr %a472) + %t474 = icmp eq i32 %t473, 0 + br label %logic.rend6633 +logic.rend6633: + br label %logic.end6632 +logic.end6632: + %t475 = phi i1 [ false, %logic.from6630 ], [ %t474, %logic.rend6633 ] + br i1 %t475, label %then6634, label %endif6636 +then6634: + %t476 = load ptr, ptr %a1 + %t477 = load { ptr, i64, i64 }, ptr %a2 + %t478 = load %S.gen.Val, ptr %a6 + %t479 = load %S.gen.Val, ptr %a10 + %t480 = load %S.ast.Node, ptr %a11 + call void @finch.gen.badOperands(ptr %t476, { ptr, i64, i64 } %t477, %S.gen.Val %t478, %S.gen.Val %t479, %S.ast.Node %t480) + br label %endif6636 +endif6636: + %t481 = load ptr, ptr %a1 + %t482 = load { ptr, i64, i64 }, ptr %a2 + %t483 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t484 = load %S.ast.Type, ptr %t483 + %t485 = call i1 @finch.gen.isSigned(%S.ast.Type %t484) + %t486 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %t482, i1 %t485) + store { ptr, i64, i64 } { ptr @.str.4274, i64 5, i64 0 }, ptr %a488 + store { ptr, i64, i64 } %t486, ptr %a489 + call void @finch_str_concat(ptr %a487, ptr %a488, ptr %a489) + store { ptr, i64, i64 } %t486, ptr %a490 + call void @finch_str_drop(ptr %a490) + %t491 = load { ptr, i64, i64 }, ptr %a487 + store { ptr, i64, i64 } %t491, ptr %a493 + store { ptr, i64, i64 } { ptr @.str.4275, i64 1, i64 0 }, ptr %a494 + call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) + store { ptr, i64, i64 } %t491, ptr %a495 + call void @finch_str_drop(ptr %a495) + %t496 = load { ptr, i64, i64 }, ptr %a492 + %t497 = load ptr, ptr %a1 + %t498 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 1 + %t499 = load %S.ast.Type, ptr %t498 + %t500 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t497, %S.ast.Type %t499) + store { ptr, i64, i64 } %t496, ptr %a502 + store { ptr, i64, i64 } %t500, ptr %a503 + call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) + store { ptr, i64, i64 } %t496, ptr %a504 + call void @finch_str_drop(ptr %a504) + store { ptr, i64, i64 } %t500, ptr %a505 + call void @finch_str_drop(ptr %a505) + %t506 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t506, ptr %a508 + store { ptr, i64, i64 } { ptr @.str.4276, i64 1, i64 0 }, ptr %a509 + call void @finch_str_concat(ptr %a507, ptr %a508, ptr %a509) + store { ptr, i64, i64 } %t506, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a507 + %t512 = getelementptr inbounds %S.gen.Val, ptr %a6, i32 0, i32 0 + %t513 = load { ptr, i64, i64 }, ptr %t512 + store { ptr, i64, i64 } %t511, ptr %a515 + store { ptr, i64, i64 } %t513, ptr %a516 + call void @finch_str_concat(ptr %a514, ptr %a515, ptr %a516) + store { ptr, i64, i64 } %t511, ptr %a517 + call void @finch_str_drop(ptr %a517) + %t518 = load { ptr, i64, i64 }, ptr %a514 + store { ptr, i64, i64 } %t518, ptr %a520 + store { ptr, i64, i64 } { ptr @.str.4277, i64 2, i64 0 }, ptr %a521 + call void @finch_str_concat(ptr %a519, ptr %a520, ptr %a521) + store { ptr, i64, i64 } %t518, ptr %a522 + call void @finch_str_drop(ptr %a522) + %t523 = load { ptr, i64, i64 }, ptr %a519 + %t524 = getelementptr inbounds %S.gen.Val, ptr %a10, i32 0, i32 0 + %t525 = load { ptr, i64, i64 }, ptr %t524 + store { ptr, i64, i64 } %t523, ptr %a527 + store { ptr, i64, i64 } %t525, ptr %a528 + call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) + store { ptr, i64, i64 } %t523, ptr %a529 + call void @finch_str_drop(ptr %a529) + %t530 = load { ptr, i64, i64 }, ptr %a526 + %t531 = call { ptr, i64, i64 } @finch.gen.op(ptr %t481, { ptr, i64, i64 } %t530) + store { ptr, i64, i64 } %t530, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t531, 0 + %t534 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4278, i64 4, i64 0 }) + %t535 = insertvalue %S.gen.Val %t533, %S.ast.Type %t534, 1 + call void @finch_str_drop(ptr %a296) + call void @finch.drop.S_gen_Val(ptr %a10) + call void @finch.drop.S_gen_Val(ptr %a6) + ret %S.gen.Val %t535 +} + +define internal { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } %p0, i1 %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i1, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca i64, align 16 + %a46 = alloca i64, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i1 %p1, ptr %a2 + %t3 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t4 = call ptr @finch_alloc(i64 %t3) + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 + store { ptr, i64, i64 } { ptr @.str.4279, i64 2, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 1 + store { ptr, i64, i64 } { ptr @.str.4280, i64 2, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 2 + store { ptr, i64, i64 } { ptr @.str.4281, i64 1, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 3 + store { ptr, i64, i64 } { ptr @.str.4282, i64 2, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 4 + store { ptr, i64, i64 } { ptr @.str.4283, i64 1, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 5 + store { ptr, i64, i64 } { ptr @.str.4284, i64 2, i64 0 }, ptr %t10 + %t11 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 + %t12 = insertvalue { ptr, i64, i64 } %t11, i64 6, 1 + %t13 = insertvalue { ptr, i64, i64 } %t12, i64 6, 2 + store { ptr, i64, i64 } %t13, ptr %a14 + %t15 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t16 = call ptr @finch_alloc(i64 %t15) + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 + store { ptr, i64, i64 } { ptr @.str.4285, i64 2, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 1 + store { ptr, i64, i64 } { ptr @.str.4286, i64 2, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 2 + store { ptr, i64, i64 } { ptr @.str.4287, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 3 + store { ptr, i64, i64 } { ptr @.str.4288, i64 3, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 4 + store { ptr, i64, i64 } { ptr @.str.4289, i64 3, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 5 + store { ptr, i64, i64 } { ptr @.str.4290, i64 3, i64 0 }, ptr %t22 + %t23 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 + %t24 = insertvalue { ptr, i64, i64 } %t23, i64 6, 1 + %t25 = insertvalue { ptr, i64, i64 } %t24, i64 6, 2 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load i1, ptr %a2 + br i1 %t27, label %then6637, label %endif6639 +then6637: + %t28 = mul i64 6, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t29 = call ptr @finch_alloc(i64 %t28) + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 0 + store { ptr, i64, i64 } { ptr @.str.4291, i64 2, i64 0 }, ptr %t30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 1 + store { ptr, i64, i64 } { ptr @.str.4292, i64 2, i64 0 }, ptr %t31 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 2 + store { ptr, i64, i64 } { ptr @.str.4293, i64 3, i64 0 }, ptr %t32 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 3 + store { ptr, i64, i64 } { ptr @.str.4294, i64 3, i64 0 }, ptr %t33 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 4 + store { ptr, i64, i64 } { ptr @.str.4295, i64 3, i64 0 }, ptr %t34 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i64 5 + store { ptr, i64, i64 } { ptr @.str.4296, i64 3, i64 0 }, ptr %t35 + %t36 = insertvalue { ptr, i64, i64 } undef, ptr %t29, 0 + %t37 = insertvalue { ptr, i64, i64 } %t36, i64 6, 1 + %t38 = insertvalue { ptr, i64, i64 } %t37, i64 6, 2 + %t39 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t38, ptr %a26 + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch.drop.arr_str(ptr %a40) + br label %endif6639 +endif6639: + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a43 + %t44 = load i64, ptr %t41 + %t45 = load ptr, ptr %a14 + store i64 0, ptr %a46 + br label %find.cond6640 +find.cond6640: + %t47 = load i64, ptr %a46 + %t48 = icmp slt i64 %t47, %t44 + br i1 %t48, label %find.body6641, label %find.end6644 +find.body6641: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t45, i64 %t47 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } %t42, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br i1 %t54, label %find.hit6642, label %find.next6643 +find.hit6642: + store i64 %t47, ptr %a43 + br label %find.end6644 +find.next6643: + %t55 = add i64 %t47, 1 + store i64 %t55, ptr %a46 + br label %find.cond6640 +find.end6644: + %t56 = load i64, ptr %a43 + %t57 = load { ptr, i64, i64 }, ptr %a26 + %t58 = extractvalue { ptr, i64, i64 } %t57, 1 + %t59 = icmp uge i64 %t56, %t58 + br i1 %t59, label %range6645, label %inrange6646 +range6645: + call void @finch_panic_index(ptr @.str.4297, i64 3622, i64 %t56, i64 %t58) + unreachable +inrange6646: + %t60 = extractvalue { ptr, i64, i64 } %t57, 0 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i64 %t56 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + call void @finch.drop.arr_str(ptr %a26) + call void @finch.drop.arr_str(ptr %a14) + ret { ptr, i64, i64 } %t65 +} + +define internal %S.gen.Val @finch.gen.binary(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca %S.gen.Val, align 16 + %a151 = alloca i64, align 16 + %a163 = alloca %S.gen.Val, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.4298, i64 2, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_eq(ptr %a10, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from6647 +logic.from6647: + br i1 %t13, label %logic.end6649, label %logic.rhs6648 +logic.rhs6648: + %t14 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.4299, i64 2, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br label %logic.rend6650 +logic.rend6650: + br label %logic.end6649 +logic.end6649: + %t19 = phi i1 [ true, %logic.from6647 ], [ %t18, %logic.rend6650 ] + br i1 %t19, label %then6651, label %endif6653 +then6651: + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = extractvalue { ptr, i64, i64 } %t22, 1 + %t24 = icmp uge i64 0, %t23 + br i1 %t24, label %range6654, label %inrange6655 +range6654: + call void @finch_panic_index(ptr @.str.4300, i64 3628, i64 0, i64 %t23) + unreachable +inrange6655: + %t25 = extractvalue { ptr, i64, i64 } %t22, 0 + %t26 = getelementptr inbounds %S.ast.Node, ptr %t25, i64 0 + %t27 = load %S.ast.Node, ptr %t26 + %t28 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t20, %S.ast.Node %t27) + store { ptr, i64, i64 } %t28, ptr %a29 + %t30 = load ptr, ptr %a1 + %t31 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t30, { ptr, i64, i64 } { ptr @.str.4301, i64 10, i64 0 }) + store { ptr, i64, i64 } %t31, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t33, { ptr, i64, i64 } { ptr @.str.4302, i64 9, i64 0 }) + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = load ptr, ptr %a1 + %t37 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t36, { ptr, i64, i64 } { ptr @.str.4303, i64 9, i64 0 }) + store { ptr, i64, i64 } %t37, ptr %a38 + %t39 = load ptr, ptr %a1 + %t40 = load { ptr, i64, i64 }, ptr %a32 + call void @finch.gen.br(ptr %t39, { ptr, i64, i64 } %t40) + %t41 = load ptr, ptr %a1 + %t42 = load { ptr, i64, i64 }, ptr %a32 + call void @finch.gen.label(ptr %t41, { ptr, i64, i64 } %t42) + %t43 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.4304, i64 2, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp ne i32 %t46, 0 + br i1 %t47, label %then6656, label %else6657 +then6656: + %t48 = load ptr, ptr %a1 + %t49 = load { ptr, i64, i64 }, ptr %a29 + %t50 = load { ptr, i64, i64 }, ptr %a35 + %t51 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.gen.condBr(ptr %t48, { ptr, i64, i64 } %t49, { ptr, i64, i64 } %t50, { ptr, i64, i64 } %t51) + br label %endif6658 +else6657: + %t52 = load ptr, ptr %a1 + %t53 = load { ptr, i64, i64 }, ptr %a29 + %t54 = load { ptr, i64, i64 }, ptr %a38 + %t55 = load { ptr, i64, i64 }, ptr %a35 + call void @finch.gen.condBr(ptr %t52, { ptr, i64, i64 } %t53, { ptr, i64, i64 } %t54, { ptr, i64, i64 } %t55) + br label %endif6658 +endif6658: + %t56 = load ptr, ptr %a1 + %t57 = load { ptr, i64, i64 }, ptr %a35 + call void @finch.gen.label(ptr %t56, { ptr, i64, i64 } %t57) + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = extractvalue { ptr, i64, i64 } %t60, 1 + %t62 = icmp uge i64 1, %t61 + br i1 %t62, label %range6659, label %inrange6660 +range6659: + call void @finch_panic_index(ptr @.str.4305, i64 3640, i64 1, i64 %t61) + unreachable +inrange6660: + %t63 = extractvalue { ptr, i64, i64 } %t60, 0 + %t64 = getelementptr inbounds %S.ast.Node, ptr %t63, i64 1 + %t65 = load %S.ast.Node, ptr %t64 + %t66 = call { ptr, i64, i64 } @finch.gen.condition(ptr %t58, %S.ast.Node %t65) + store { ptr, i64, i64 } %t66, ptr %a67 + %t68 = load ptr, ptr %a1 + %t69 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t68, { ptr, i64, i64 } { ptr @.str.4306, i64 10, i64 0 }) + store { ptr, i64, i64 } %t69, ptr %a70 + %t71 = load ptr, ptr %a1 + %t72 = load { ptr, i64, i64 }, ptr %a70 + call void @finch.gen.br(ptr %t71, { ptr, i64, i64 } %t72) + %t73 = load ptr, ptr %a1 + %t74 = load { ptr, i64, i64 }, ptr %a70 + call void @finch.gen.label(ptr %t73, { ptr, i64, i64 } %t74) + %t75 = load ptr, ptr %a1 + %t76 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.gen.br(ptr %t75, { ptr, i64, i64 } %t76) + %t77 = load ptr, ptr %a1 + %t78 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.gen.label(ptr %t77, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } { ptr @.str.4307, i64 4, i64 0 }, ptr %a79 + %t80 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t80, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.4308, i64 2, i64 0 }, ptr %a82 + %t83 = call i32 @finch_str_eq(ptr %a81, ptr %a82) + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %then6661, label %endif6663 +then6661: + %t85 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4309, i64 5, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + br label %endif6663 +endif6663: + %t87 = load ptr, ptr %a1 + %t88 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } { ptr @.str.4310, i64 9, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4311, i64 3, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load { ptr, i64, i64 }, ptr %a32 + store { ptr, i64, i64 } %t97, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + store { ptr, i64, i64 } %t97, ptr %a102 + call void @finch_str_drop(ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } %t103, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.4312, i64 6, i64 0 }, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t103, ptr %a107 + call void @finch_str_drop(ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a104 + %t109 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t108, ptr %a111 + store { ptr, i64, i64 } %t109, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t108, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.4313, i64 3, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t119, ptr %a122 + store { ptr, i64, i64 } %t120, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t119, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + store { ptr, i64, i64 } %t125, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.4314, i64 2, i64 0 }, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t125, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = call { ptr, i64, i64 } @finch.gen.op(ptr %t87, { ptr, i64, i64 } %t130) + store { ptr, i64, i64 } %t130, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t131, 0 + %t134 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4315, i64 4, i64 0 }) + %t135 = insertvalue %S.gen.Val %t133, %S.ast.Type %t134, 1 + call void @finch_str_drop(ptr %a79) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a67) + call void @finch_str_drop(ptr %a38) + call void @finch_str_drop(ptr %a35) + call void @finch_str_drop(ptr %a32) + call void @finch_str_drop(ptr %a29) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t135 +endif6653: + %t136 = load ptr, ptr %a1 + %t137 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t138 = load { ptr, i64, i64 }, ptr %t137 + %t139 = extractvalue { ptr, i64, i64 } %t138, 1 + %t140 = icmp uge i64 0, %t139 + br i1 %t140, label %range6664, label %inrange6665 +range6664: + call void @finch_panic_index(ptr @.str.4316, i64 3652, i64 0, i64 %t139) + unreachable +inrange6665: + %t141 = extractvalue { ptr, i64, i64 } %t138, 0 + %t142 = getelementptr inbounds %S.ast.Node, ptr %t141, i64 0 + %t143 = load %S.ast.Node, ptr %t142 + %t144 = call %S.gen.Val @finch.gen.expr(ptr %t136, %S.ast.Node %t143) + store %S.gen.Val %t144, ptr %a145 + %t146 = load ptr, ptr %a1 + %t147 = icmp eq ptr %t146, null + br i1 %t147, label %panic6666, label %ok6667 +panic6666: + call void @finch_panic(ptr @.str.4317, i64 3653, ptr @.str.4318) + unreachable +ok6667: + %t148 = getelementptr inbounds %S.gen.Gen, ptr %t146, i32 0, i32 11 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i32 0, i32 1 + %t150 = load i64, ptr %t149 + store i64 %t150, ptr %a151 + %t152 = load ptr, ptr %a1 + %t153 = load %S.gen.Val, ptr %a145 + call void @finch.gen.hold(ptr %t152, %S.gen.Val %t153) + %t154 = load ptr, ptr %a1 + %t155 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t156 = load { ptr, i64, i64 }, ptr %t155 + %t157 = extractvalue { ptr, i64, i64 } %t156, 1 + %t158 = icmp uge i64 1, %t157 + br i1 %t158, label %range6668, label %inrange6669 +range6668: + call void @finch_panic_index(ptr @.str.4319, i64 3655, i64 1, i64 %t157) + unreachable +inrange6669: + %t159 = extractvalue { ptr, i64, i64 } %t156, 0 + %t160 = getelementptr inbounds %S.ast.Node, ptr %t159, i64 1 + %t161 = load %S.ast.Node, ptr %t160 + %t162 = call %S.gen.Val @finch.gen.expr(ptr %t154, %S.ast.Node %t161) + store %S.gen.Val %t162, ptr %a163 + %t164 = load ptr, ptr %a1 + %t165 = load i64, ptr %a151 + call void @finch.gen.heldEnd(ptr %t164, i64 %t165) + %t166 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.4320, i64 2, i64 0 }, ptr %a168 + %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) + %t170 = icmp ne i32 %t169, 0 + br label %logic.from6670 +logic.from6670: + br i1 %t170, label %logic.end6672, label %logic.rhs6671 +logic.rhs6671: + %t171 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.4321, i64 2, i64 0 }, ptr %a173 + %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) + %t175 = icmp ne i32 %t174, 0 + br label %logic.rend6673 +logic.rend6673: + br label %logic.end6672 +logic.end6672: + %t176 = phi i1 [ true, %logic.from6670 ], [ %t175, %logic.rend6673 ] + br label %logic.from6674 +logic.from6674: + br i1 %t176, label %logic.end6676, label %logic.rhs6675 +logic.rhs6675: + %t177 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t177, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.4322, i64 1, i64 0 }, ptr %a179 + %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) + %t181 = icmp ne i32 %t180, 0 + br label %logic.rend6677 +logic.rend6677: + br label %logic.end6676 +logic.end6676: + %t182 = phi i1 [ true, %logic.from6674 ], [ %t181, %logic.rend6677 ] + br label %logic.from6678 +logic.from6678: + br i1 %t182, label %logic.end6680, label %logic.rhs6679 +logic.rhs6679: + %t183 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t183, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.4323, i64 2, i64 0 }, ptr %a185 + %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) + %t187 = icmp ne i32 %t186, 0 + br label %logic.rend6681 +logic.rend6681: + br label %logic.end6680 +logic.end6680: + %t188 = phi i1 [ true, %logic.from6678 ], [ %t187, %logic.rend6681 ] + br label %logic.from6682 +logic.from6682: + br i1 %t188, label %logic.end6684, label %logic.rhs6683 +logic.rhs6683: + %t189 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t189, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.4324, i64 1, i64 0 }, ptr %a191 + %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) + %t193 = icmp ne i32 %t192, 0 + br label %logic.rend6685 +logic.rend6685: + br label %logic.end6684 +logic.end6684: + %t194 = phi i1 [ true, %logic.from6682 ], [ %t193, %logic.rend6685 ] + br label %logic.from6686 +logic.from6686: + br i1 %t194, label %logic.end6688, label %logic.rhs6687 +logic.rhs6687: + %t195 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t195, ptr %a196 + store { ptr, i64, i64 } { ptr @.str.4325, i64 2, i64 0 }, ptr %a197 + %t198 = call i32 @finch_str_eq(ptr %a196, ptr %a197) + %t199 = icmp ne i32 %t198, 0 + br label %logic.rend6689 +logic.rend6689: + br label %logic.end6688 +logic.end6688: + %t200 = phi i1 [ true, %logic.from6686 ], [ %t199, %logic.rend6689 ] + br i1 %t200, label %then6690, label %endif6692 +then6690: + %t201 = load ptr, ptr %a1 + %t202 = load { ptr, i64, i64 }, ptr %a8 + %t203 = load %S.gen.Val, ptr %a145 + %t204 = load %S.gen.Val, ptr %a163 + %t205 = load %S.ast.Node, ptr %a2 + %t206 = call %S.gen.Val @finch.gen.compare(ptr %t201, { ptr, i64, i64 } %t202, %S.gen.Val %t203, %S.gen.Val %t204, %S.ast.Node %t205) + call void @finch.drop.S_gen_Val(ptr %a163) + call void @finch.drop.S_gen_Val(ptr %a145) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t206 +endif6692: + %t207 = load ptr, ptr %a1 + %t208 = load { ptr, i64, i64 }, ptr %a8 + %t209 = load %S.gen.Val, ptr %a145 + %t210 = load %S.gen.Val, ptr %a163 + %t211 = load %S.ast.Node, ptr %a2 + %t212 = call %S.gen.Val @finch.gen.arith(ptr %t207, { ptr, i64, i64 } %t208, %S.gen.Val %t209, %S.gen.Val %t210, %S.ast.Node %t211) + call void @finch.drop.S_gen_Val(ptr %a163) + call void @finch.drop.S_gen_Val(ptr %a145) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t212 +} + +define internal %S.gen.Val @finch.gen.arrayLit(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a5 = alloca %S.ast.Type, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca i64, align 16 + %a38 = alloca i64, align 16 + %a46 = alloca %S.ast.Node, align 16 + %a47 = alloca %S.gen.Val, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca %S.gen.Val, align 16 + %a61 = alloca %S.ast.Type, align 16 + %a62 = alloca %S.ast.Type, align 16 + %a65 = alloca %S.ast.Type, align 16 + %a71 = alloca %S.gen.Val, align 16 + %a78 = alloca %S.gen.Val, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca %S.ast.Type, align 16 + %a103 = alloca %S.ast.Type, align 16 + %a107 = alloca %S.gen.Val, align 16 + %a114 = alloca %S.ast.Type, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca i64, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca %S.ast.Type, align 16 + %a290 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4326, i64 4, i64 0 }) + store %S.ast.Type %t4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4327, i64 5, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then6693, label %else6694 +then6693: + %t12 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t13 = load { ptr, i64, i64 }, ptr %t12 + %t14 = extractvalue { ptr, i64, i64 } %t13, 1 + %t15 = icmp uge i64 0, %t14 + br i1 %t15, label %range6696, label %inrange6697 +range6696: + call void @finch_panic_index(ptr @.str.4328, i64 3666, i64 0, i64 %t14) + unreachable +inrange6697: + %t16 = extractvalue { ptr, i64, i64 } %t13, 0 + %t17 = getelementptr inbounds %S.ast.Type, ptr %t16, i64 0 + %t18 = load %S.ast.Type, ptr %t17 + store %S.ast.Type %t18, ptr %a19 + call void @finch.copy.S_ast_Type(ptr %a20, ptr %a19) + %t21 = load %S.ast.Type, ptr %a20 + %t22 = load %S.ast.Type, ptr %a5 + store %S.ast.Type %t21, ptr %a5 + store %S.ast.Type %t22, ptr %a23 + call void @finch.drop.S_ast_Type(ptr %a23) + br label %endif6695 +else6694: + %t24 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i32 0, i32 1 + %t26 = load i64, ptr %t25 + %t27 = icmp eq i64 %t26, 0 + br i1 %t27, label %then6698, label %endif6700 +then6698: + %t28 = load ptr, ptr %a1 + %t29 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t28, %S.ast.Node %t29, { ptr, i64, i64 } { ptr @.str.4329, i64 47, i64 0 }) + br label %endif6700 +endif6700: + br label %endif6695 +endif6695: + store { ptr, i64, i64 } zeroinitializer, ptr %a30 + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic6701, label %ok6702 +panic6701: + call void @finch_panic(ptr @.str.4330, i64 3671, ptr @.str.4331) + unreachable +ok6702: + %t33 = getelementptr inbounds %S.gen.Gen, ptr %t31, i32 0, i32 11 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i32 0, i32 1 + %t35 = load i64, ptr %t34 + store i64 %t35, ptr %a36 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + store i64 0, ptr %a38 + br label %each.cond6703 +each.cond6703: + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i32 0, i32 1 + %t40 = load i64, ptr %t39 + %t41 = load i64, ptr %a38 + %t42 = icmp slt i64 %t41, %t40 + br i1 %t42, label %each.body6704, label %each.end6706 +each.body6704: + %t43 = load ptr, ptr %t37 + %t44 = getelementptr inbounds %S.ast.Node, ptr %t43, i64 %t41 + %t45 = load %S.ast.Node, ptr %t44 + store %S.ast.Node %t45, ptr %a46 + store %S.gen.Val zeroinitializer, ptr %a47 + %t48 = getelementptr inbounds %S.ast.Type, ptr %a5, i32 0, i32 0 + %t49 = load { ptr, i64, i64 }, ptr %t48 + store { ptr, i64, i64 } %t49, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.4332, i64 4, i64 0 }, ptr %a51 + %t52 = call i32 @finch_str_eq(ptr %a50, ptr %a51) + %t53 = icmp ne i32 %t52, 0 + br i1 %t53, label %then6707, label %else6708 +then6707: + %t54 = load ptr, ptr %a1 + %t55 = load %S.ast.Node, ptr %a46 + %t56 = call %S.gen.Val @finch.gen.expr(ptr %t54, %S.ast.Node %t55) + %t57 = load %S.gen.Val, ptr %a47 + store %S.gen.Val %t56, ptr %a47 + store %S.gen.Val %t57, ptr %a58 + call void @finch.drop.S_gen_Val(ptr %a58) + %t59 = getelementptr inbounds %S.gen.Val, ptr %a47, i32 0, i32 1 + %t60 = load %S.ast.Type, ptr %t59 + store %S.ast.Type %t60, ptr %a61 + call void @finch.copy.S_ast_Type(ptr %a62, ptr %a61) + %t63 = load %S.ast.Type, ptr %a62 + %t64 = load %S.ast.Type, ptr %a5 + store %S.ast.Type %t63, ptr %a5 + store %S.ast.Type %t64, ptr %a65 + call void @finch.drop.S_ast_Type(ptr %a65) + br label %endif6709 +else6708: + %t66 = load ptr, ptr %a1 + %t67 = load %S.ast.Node, ptr %a46 + %t68 = load %S.ast.Type, ptr %a5 + %t69 = call %S.gen.Val @finch.gen.exprWant(ptr %t66, %S.ast.Node %t67, %S.ast.Type %t68) + %t70 = load %S.gen.Val, ptr %a47 + store %S.gen.Val %t69, ptr %a47 + store %S.gen.Val %t70, ptr %a71 + call void @finch.drop.S_gen_Val(ptr %a71) + br label %endif6709 +endif6709: + %t72 = load ptr, ptr %a1 + %t73 = load %S.gen.Val, ptr %a47 + %t74 = load %S.ast.Type, ptr %a5 + %t75 = load %S.ast.Node, ptr %a46 + %t76 = call %S.gen.Val @finch.gen.coerce(ptr %t72, %S.gen.Val %t73, %S.ast.Type %t74, %S.ast.Node %t75, { ptr, i64, i64 } { ptr @.str.4333, i64 27, i64 0 }) + %t77 = load %S.gen.Val, ptr %a47 + store %S.gen.Val %t76, ptr %a47 + store %S.gen.Val %t77, ptr %a78 + call void @finch.drop.S_gen_Val(ptr %a78) + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t80 = load ptr, ptr %a1 + %t81 = load %S.gen.Val, ptr %a47 + %t82 = call { ptr, i64, i64 } @finch.gen.own(ptr %t80, %S.gen.Val %t81) + %t83 = load i64, ptr %t79 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %a30, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %a30 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 + store { ptr, i64, i64 } %t82, ptr %t86 + store i64 %t84, ptr %t79 + %t87 = load ptr, ptr %a1 + %t88 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t89 = load i64, ptr %t88 + %t90 = sub i64 %t89, 1 + %t91 = load { ptr, i64, i64 }, ptr %a30 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 %t90, %t92 + br i1 %t93, label %range6710, label %inrange6711 +range6710: + call void @finch_panic_index(ptr @.str.4334, i64 3682, i64 %t90, i64 %t92) + unreachable +inrange6711: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i64 %t90 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_copy(ptr %a98, ptr %a97) + %t99 = load { ptr, i64, i64 }, ptr %a98 + %t100 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t99, 0 + %t101 = load %S.ast.Type, ptr %a5 + store %S.ast.Type %t101, ptr %a102 + call void @finch.copy.S_ast_Type(ptr %a103, ptr %a102) + %t104 = load %S.ast.Type, ptr %a103 + %t105 = insertvalue %S.gen.Val %t100, %S.ast.Type %t104, 1 + %t106 = insertvalue %S.gen.Val %t105, i1 true, 2 + call void @finch.gen.hold(ptr %t87, %S.gen.Val %t106) + store %S.gen.Val %t106, ptr %a107 + call void @finch.drop.S_gen_Val(ptr %a107) + call void @finch.drop.S_gen_Val(ptr %a47) + br label %each.step6705 +each.step6705: + %t108 = load i64, ptr %a38 + %t109 = add i64 %t108, 1 + store i64 %t109, ptr %a38 + br label %each.cond6703 +each.end6706: + %t110 = load ptr, ptr %a1 + %t111 = load i64, ptr %a36 + call void @finch.gen.heldEnd(ptr %t110, i64 %t111) + %t112 = load %S.ast.Type, ptr %a5 + %t113 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t112) + store %S.ast.Type %t113, ptr %a114 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t116 = load i64, ptr %t115 + call void @finch_str_from_int(ptr %a117, i64 %t116) + %t118 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t118, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.4335, i64 4, i64 0 }, ptr %a120 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t122 = load i64, ptr %t121 + %t123 = icmp sgt i64 %t122, 0 + br i1 %t123, label %then6712, label %endif6714 +then6712: + %t124 = load ptr, ptr %a1 + %t125 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.4336, i64 8, i64 0 }, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + %t129 = load { ptr, i64, i64 }, ptr %a126 + store { ptr, i64, i64 } %t129, ptr %a131 + store { ptr, i64, i64 } { ptr @.str.4337, i64 2, i64 0 }, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + store { ptr, i64, i64 } %t129, ptr %a133 + call void @finch_str_drop(ptr %a133) + %t134 = load { ptr, i64, i64 }, ptr %a130 + %t135 = load ptr, ptr %a1 + %t136 = load %S.ast.Type, ptr %a5 + %t137 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t135, %S.ast.Type %t136) + store { ptr, i64, i64 } %t134, ptr %a139 + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t134, ptr %a141 + call void @finch_str_drop(ptr %a141) + store { ptr, i64, i64 } %t137, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a138 + %t144 = call { ptr, i64, i64 } @finch.gen.op(ptr %t124, { ptr, i64, i64 } %t143) + store { ptr, i64, i64 } %t143, ptr %a145 + call void @finch_str_drop(ptr %a145) + store { ptr, i64, i64 } %t144, ptr %a146 + %t147 = load ptr, ptr %a1 + %t148 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } { ptr @.str.4338, i64 26, i64 0 }, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.4339, i64 1, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + %t158 = call { ptr, i64, i64 } @finch.gen.op(ptr %t147, { ptr, i64, i64 } %t157) + store { ptr, i64, i64 } %t157, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t158, ptr %a120 + store { ptr, i64, i64 } %t160, ptr %a161 + call void @finch_str_drop(ptr %a161) + call void @finch_str_drop(ptr %a146) + br label %endif6714 +endif6714: + %t162 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t163 = load i64, ptr %t162 + store i64 0, ptr %a164 + br label %for.cond6715 +for.cond6715: + %t165 = load i64, ptr %a164 + %t166 = icmp slt i64 %t165, %t163 + br i1 %t166, label %for.body6716, label %for.end6718 +for.body6716: + %t167 = load ptr, ptr %a1 + %t168 = load ptr, ptr %a1 + %t169 = load %S.ast.Type, ptr %a5 + %t170 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t168, %S.ast.Type %t169) + store { ptr, i64, i64 } { ptr @.str.4340, i64 23, i64 0 }, ptr %a172 + store { ptr, i64, i64 } %t170, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t170, ptr %a174 + call void @finch_str_drop(ptr %a174) + %t175 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } %t175, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.4341, i64 6, i64 0 }, ptr %a178 + call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) + store { ptr, i64, i64 } %t175, ptr %a179 + call void @finch_str_drop(ptr %a179) + %t180 = load { ptr, i64, i64 }, ptr %a176 + %t181 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t180, ptr %a183 + store { ptr, i64, i64 } %t181, ptr %a184 + call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) + store { ptr, i64, i64 } %t180, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a182 + store { ptr, i64, i64 } %t186, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.4342, i64 6, i64 0 }, ptr %a189 + call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) + store { ptr, i64, i64 } %t186, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a187 + %t192 = load i64, ptr %a164 + call void @finch_str_from_int(ptr %a193, i64 %t192) + %t194 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t191, ptr %a196 + store { ptr, i64, i64 } %t194, ptr %a197 + call void @finch_str_concat(ptr %a195, ptr %a196, ptr %a197) + store { ptr, i64, i64 } %t191, ptr %a198 + call void @finch_str_drop(ptr %a198) + store { ptr, i64, i64 } %t194, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a195 + %t201 = call { ptr, i64, i64 } @finch.gen.op(ptr %t167, { ptr, i64, i64 } %t200) + store { ptr, i64, i64 } %t200, ptr %a202 + call void @finch_str_drop(ptr %a202) + store { ptr, i64, i64 } %t201, ptr %a203 + %t204 = load ptr, ptr %a1 + %t205 = load ptr, ptr %a1 + %t206 = load %S.ast.Type, ptr %a5 + %t207 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t205, %S.ast.Type %t206) + %t208 = load i64, ptr %a164 + %t209 = load { ptr, i64, i64 }, ptr %a30 + %t210 = extractvalue { ptr, i64, i64 } %t209, 1 + %t211 = icmp uge i64 %t208, %t210 + br i1 %t211, label %range6719, label %inrange6720 +range6719: + call void @finch_panic_index(ptr @.str.4343, i64 3694, i64 %t208, i64 %t210) + unreachable +inrange6720: + %t212 = extractvalue { ptr, i64, i64 } %t209, 0 + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i64 %t208 + %t214 = load { ptr, i64, i64 }, ptr %t213 + %t215 = load { ptr, i64, i64 }, ptr %a203 + call void @finch.gen.store(ptr %t204, { ptr, i64, i64 } %t207, { ptr, i64, i64 } %t214, { ptr, i64, i64 } %t215) + store { ptr, i64, i64 } %t207, ptr %a216 + call void @finch_str_drop(ptr %a216) + call void @finch_str_drop(ptr %a203) + br label %for.step6717 +for.step6717: + %t217 = load i64, ptr %a164 + %t218 = add i64 %t217, 1 + store i64 %t218, ptr %a164 + br label %for.cond6715 +for.end6718: + %t219 = load ptr, ptr %a1 + %t220 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.4344, i64 41, i64 0 }, ptr %a222 + store { ptr, i64, i64 } %t220, ptr %a223 + call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) + %t224 = load { ptr, i64, i64 }, ptr %a221 + store { ptr, i64, i64 } %t224, ptr %a226 + store { ptr, i64, i64 } { ptr @.str.4345, i64 3, i64 0 }, ptr %a227 + call void @finch_str_concat(ptr %a225, ptr %a226, ptr %a227) + store { ptr, i64, i64 } %t224, ptr %a228 + call void @finch_str_drop(ptr %a228) + %t229 = load { ptr, i64, i64 }, ptr %a225 + %t230 = call { ptr, i64, i64 } @finch.gen.op(ptr %t219, { ptr, i64, i64 } %t229) + store { ptr, i64, i64 } %t229, ptr %a231 + call void @finch_str_drop(ptr %a231) + store { ptr, i64, i64 } %t230, ptr %a232 + %t233 = load ptr, ptr %a1 + %t234 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.4346, i64 30, i64 0 }, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t238, ptr %a240 + store { ptr, i64, i64 } { ptr @.str.4347, i64 6, i64 0 }, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t238, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + %t244 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } %t243, ptr %a246 + store { ptr, i64, i64 } %t244, ptr %a247 + call void @finch_str_concat(ptr %a245, ptr %a246, ptr %a247) + store { ptr, i64, i64 } %t243, ptr %a248 + call void @finch_str_drop(ptr %a248) + %t249 = load { ptr, i64, i64 }, ptr %a245 + store { ptr, i64, i64 } %t249, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.4348, i64 3, i64 0 }, ptr %a252 + call void @finch_str_concat(ptr %a250, ptr %a251, ptr %a252) + store { ptr, i64, i64 } %t249, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a250 + %t255 = call { ptr, i64, i64 } @finch.gen.op(ptr %t233, { ptr, i64, i64 } %t254) + store { ptr, i64, i64 } %t254, ptr %a256 + call void @finch_str_drop(ptr %a256) + store { ptr, i64, i64 } %t255, ptr %a257 + %t258 = load ptr, ptr %a1 + %t259 = load { ptr, i64, i64 }, ptr %a257 + store { ptr, i64, i64 } { ptr @.str.4349, i64 30, i64 0 }, ptr %a261 + store { ptr, i64, i64 } %t259, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a260 + store { ptr, i64, i64 } %t263, ptr %a265 + store { ptr, i64, i64 } { ptr @.str.4350, i64 6, i64 0 }, ptr %a266 + call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) + store { ptr, i64, i64 } %t263, ptr %a267 + call void @finch_str_drop(ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a264 + %t269 = load { ptr, i64, i64 }, ptr %a119 + store { ptr, i64, i64 } %t268, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t268, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.4351, i64 3, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + store { ptr, i64, i64 } %t274, ptr %a278 + call void @finch_str_drop(ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a275 + %t280 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t279) + store { ptr, i64, i64 } %t279, ptr %a281 + call void @finch_str_drop(ptr %a281) + store { ptr, i64, i64 } %t280, ptr %a282 + %t283 = load { ptr, i64, i64 }, ptr %a282 + store { ptr, i64, i64 } %t283, ptr %a284 + call void @finch_str_copy(ptr %a285, ptr %a284) + %t286 = load { ptr, i64, i64 }, ptr %a285 + %t287 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t286, 0 + %t288 = load %S.ast.Type, ptr %a114 + store %S.ast.Type %t288, ptr %a289 + call void @finch.copy.S_ast_Type(ptr %a290, ptr %a289) + %t291 = load %S.ast.Type, ptr %a290 + %t292 = insertvalue %S.gen.Val %t287, %S.ast.Type %t291, 1 + %t293 = insertvalue %S.gen.Val %t292, i1 true, 2 + call void @finch_str_drop(ptr %a282) + call void @finch_str_drop(ptr %a257) + call void @finch_str_drop(ptr %a232) + call void @finch_str_drop(ptr %a120) + call void @finch_str_drop(ptr %a119) + call void @finch.drop.S_ast_Type(ptr %a114) + call void @finch.drop.arr_str(ptr %a30) + call void @finch.drop.S_ast_Type(ptr %a5) + ret %S.gen.Val %t293 +} + +define internal void @finch.copy.S_gen_Place(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Place, ptr %src + store %S.gen.Place %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Place, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Place, ptr %src, i32 0, i32 1 + call void @finch.copy.S_ast_Type(ptr %t4, ptr %t5) + ret void +} + +define internal %S.gen.Place @finch.gen.place(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca %S.gen.Ref, align 16 + %a42 = alloca %S.gen.Place, align 16 + %a43 = alloca %S.gen.Place, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4352, i64 3, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.from6721 +logic.from6721: + br i1 %t9, label %logic.rhs6722, label %logic.end6723 +logic.rhs6722: + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) + %t14 = icmp slt i64 %t13, 0 + br label %logic.rend6724 +logic.rend6724: + br label %logic.end6723 +logic.end6723: + %t15 = phi i1 [ false, %logic.from6721 ], [ %t14, %logic.rend6724 ] + br i1 %t15, label %then6725, label %endif6727 +then6725: + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Node, ptr %a2 + %t18 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } { ptr @.str.4353, i64 28, i64 0 }, ptr %a21 + store { ptr, i64, i64 } %t19, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + %t23 = load { ptr, i64, i64 }, ptr %a20 + store { ptr, i64, i64 } %t23, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.4354, i64 1, i64 0 }, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + call void @finch.gen.fail(ptr %t16, %S.ast.Node %t17, { ptr, i64, i64 } %t28) + store { ptr, i64, i64 } %t28, ptr %a29 + call void @finch_str_drop(ptr %a29) + br label %endif6727 +endif6727: + %t30 = load ptr, ptr %a1 + %t31 = load %S.ast.Node, ptr %a2 + %t32 = load i1, ptr %a3 + %t33 = call %S.gen.Ref @finch.gen.ref(ptr %t30, %S.ast.Node %t31, i1 %t32) + store %S.gen.Ref %t33, ptr %a34 + %t35 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 0 + %t36 = load i1, ptr %t35 + %t37 = xor i1 %t36, true + br i1 %t37, label %then6728, label %endif6730 +then6728: + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t38, %S.ast.Node %t39, { ptr, i64, i64 } { ptr @.str.4355, i64 60, i64 0 }) + br label %endif6730 +endif6730: + %t40 = getelementptr inbounds %S.gen.Ref, ptr %a34, i32 0, i32 1 + %t41 = load %S.gen.Place, ptr %t40 + store %S.gen.Place %t41, ptr %a42 + call void @finch.copy.S_gen_Place(ptr %a43, ptr %a42) + %t44 = load %S.gen.Place, ptr %a43 + call void @finch.drop.S_gen_Ref(ptr %a34) + ret %S.gen.Place %t44 +} + +define internal void @finch.copy.S_cimport_CConst(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CConst, ptr %src + store %S.cimport.CConst %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CConst, ptr %dst, i32 0, i32 3 + %t3 = getelementptr inbounds %S.cimport.CConst, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t2, ptr %t3) + ret void +} + +define internal %S.gen.Ref @finch.gen.ref(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca %S.cimport.CConst, align 16 + %a44 = alloca %S.cimport.CConst, align 16 + %a46 = alloca %S.cimport.CConst, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca %S.ast.Type, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca i64, align 16 + %a190 = alloca i64, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca %S.ast.Type, align 16 + %a256 = alloca %S.ast.Type, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca %S.gen.Var, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca %S.ast.Type, align 16 + %a359 = alloca %S.ast.Type, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4356, i64 3, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br i1 %t9, label %then6731, label %endif6733 +then6731: + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t12 = load { ptr, i64, i64 }, ptr %t11 + %t13 = call i64 @finch.gen.lookup(ptr %t10, { ptr, i64, i64 } %t12) + store i64 %t13, ptr %a14 + %t15 = load i64, ptr %a14 + %t16 = icmp slt i64 %t15, 0 + br label %logic.from6734 +logic.from6734: + br i1 %t16, label %logic.rhs6735, label %logic.end6736 +logic.rhs6735: + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic6737, label %ok6738 +panic6737: + call void @finch_panic(ptr @.str.4357, i64 3718, ptr @.str.4358) + unreachable +ok6738: + %t19 = getelementptr inbounds %S.gen.Gen, ptr %t17, i32 0, i32 26 + %t20 = getelementptr inbounds %S.cimport.CImports, ptr %t19, i32 0, i32 1 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = call i64 @finch_map_find(ptr %t20, ptr %a23, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t25 = icmp sge i64 %t24, 0 + br label %logic.rend6739 +logic.rend6739: + br label %logic.end6736 +logic.end6736: + %t26 = phi i1 [ false, %logic.from6734 ], [ %t25, %logic.rend6739 ] + br i1 %t26, label %then6740, label %endif6742 +then6740: + %t27 = load ptr, ptr %a1 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic6743, label %ok6744 +panic6743: + call void @finch_panic(ptr @.str.4359, i64 3719, ptr @.str.4360) + unreachable +ok6744: + %t29 = getelementptr inbounds %S.gen.Gen, ptr %t27, i32 0, i32 26 + %t30 = getelementptr inbounds %S.cimport.CImports, ptr %t29, i32 0, i32 1 + %t31 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t32, ptr %a33 + %t34 = call i64 @finch_map_find(ptr %t30, ptr %a33, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t35 = icmp slt i64 %t34, 0 + br i1 %t35, label %map.missing6745, label %map.found6746 +map.missing6745: + store { ptr, i64, i64 } zeroinitializer, ptr %a36 + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_buf_str(ptr %a36, ptr %a37, i32 1) + call void @finch_map_missing(ptr @.str.4361, i64 3719, ptr %a36) + unreachable +map.found6746: + %t38 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t30, i32 0, i32 0 + %t39 = load ptr, ptr %t38 + %t40 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t39, i64 %t34 + %t41 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t40, i32 0, i32 2 + %t42 = load %S.cimport.CConst, ptr %t41 + store %S.cimport.CConst %t42, ptr %a43 + call void @finch.copy.S_cimport_CConst(ptr %a44, ptr %a43) + %t45 = load %S.cimport.CConst, ptr %a44 + store %S.cimport.CConst %t45, ptr %a46 + %t47 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 0 + %t48 = load i1, ptr %t47 + br i1 %t48, label %then6747, label %endif6749 +then6747: + %t49 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t50 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 3 + %t51 = load { ptr, i64, i64 }, ptr %t50 + %t52 = call { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %t51) + %t53 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t52, 0 + %t54 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4362, i64 5, i64 0 }) + %t55 = insertvalue %S.gen.Val %t53, %S.ast.Type %t54, 1 + %t56 = insertvalue %S.gen.Val %t55, i1 true, 3 + %t57 = insertvalue %S.gen.Ref %t49, %S.gen.Val %t56, 2 + call void @finch.drop.S_cimport_CConst(ptr %a46) + ret %S.gen.Ref %t57 +endif6749: + %t58 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t59 = getelementptr inbounds %S.cimport.CConst, ptr %a46, i32 0, i32 1 + %t60 = load i64, ptr %t59 + call void @finch_str_from_int(ptr %a61, i64 %t60) + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t62, 0 + %t64 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4363, i64 3, i64 0 }) + %t65 = insertvalue %S.gen.Val %t63, %S.ast.Type %t64, 1 + %t66 = insertvalue %S.gen.Val %t65, i1 true, 3 + %t67 = insertvalue %S.gen.Ref %t58, %S.gen.Val %t66, 2 + call void @finch.drop.S_cimport_CConst(ptr %a46) + ret %S.gen.Ref %t67 +endif6742: + %t68 = load i64, ptr %a14 + %t69 = icmp slt i64 %t68, 0 + br label %logic.from6750 +logic.from6750: + br i1 %t69, label %logic.rhs6751, label %logic.end6752 +logic.rhs6751: + %t70 = load ptr, ptr %a1 + %t71 = icmp eq ptr %t70, null + br i1 %t71, label %panic6753, label %ok6754 +panic6753: + call void @finch_panic(ptr @.str.4364, i64 3726, ptr @.str.4365) + unreachable +ok6754: + %t72 = getelementptr inbounds %S.gen.Gen, ptr %t70, i32 0, i32 26 + %t73 = getelementptr inbounds %S.cimport.CImports, ptr %t72, i32 0, i32 2 + %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + store { ptr, i64, i64 } %t75, ptr %a76 + %t77 = call i64 @finch_map_find(ptr %t73, ptr %a76, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t78 = icmp sge i64 %t77, 0 + %t79 = xor i1 %t78, true + br label %logic.rend6755 +logic.rend6755: + br label %logic.end6752 +logic.end6752: + %t80 = phi i1 [ false, %logic.from6750 ], [ %t79, %logic.rend6755 ] + br label %logic.from6756 +logic.from6756: + br i1 %t80, label %logic.rhs6757, label %logic.end6758 +logic.rhs6757: + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic6759, label %ok6760 +panic6759: + call void @finch_panic(ptr @.str.4366, i64 3726, ptr @.str.4367) + unreachable +ok6760: + %t83 = getelementptr inbounds %S.gen.Gen, ptr %t81, i32 0, i32 26 + %t84 = getelementptr inbounds %S.cimport.CImports, ptr %t83, i32 0, i32 0 + store { ptr, i64, i64 } { ptr @.str.4368, i64 7, i64 0 }, ptr %a85 + %t86 = call i64 @finch_map_find(ptr %t84, ptr %a85, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t87 = icmp sge i64 %t86, 0 + br label %logic.rend6761 +logic.rend6761: + br label %logic.end6758 +logic.end6758: + %t88 = phi i1 [ false, %logic.from6756 ], [ %t87, %logic.rend6761 ] + br label %logic.from6762 +logic.from6762: + br i1 %t88, label %logic.rhs6763, label %logic.end6764 +logic.rhs6763: + %t89 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t90 = load { ptr, i64, i64 }, ptr %t89 + store { ptr, i64, i64 } %t90, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.4369, i64 5, i64 0 }, ptr %a92 + %t93 = call i32 @finch_str_eq(ptr %a91, ptr %a92) + %t94 = icmp ne i32 %t93, 0 + br label %logic.from6765 +logic.from6765: + br i1 %t94, label %logic.end6767, label %logic.rhs6766 +logic.rhs6766: + %t95 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t96 = load { ptr, i64, i64 }, ptr %t95 + store { ptr, i64, i64 } %t96, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.4370, i64 6, i64 0 }, ptr %a98 + %t99 = call i32 @finch_str_eq(ptr %a97, ptr %a98) + %t100 = icmp ne i32 %t99, 0 + br label %logic.rend6768 +logic.rend6768: + br label %logic.end6767 +logic.end6767: + %t101 = phi i1 [ true, %logic.from6765 ], [ %t100, %logic.rend6768 ] + br label %logic.from6769 +logic.from6769: + br i1 %t101, label %logic.end6771, label %logic.rhs6770 +logic.rhs6770: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + store { ptr, i64, i64 } { ptr @.str.4371, i64 6, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_eq(ptr %a104, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br label %logic.rend6772 +logic.rend6772: + br label %logic.end6771 +logic.end6771: + %t108 = phi i1 [ true, %logic.from6769 ], [ %t107, %logic.rend6772 ] + br label %logic.rend6773 +logic.rend6773: + br label %logic.end6764 +logic.end6764: + %t109 = phi i1 [ false, %logic.from6762 ], [ %t108, %logic.rend6773 ] + br i1 %t109, label %then6774, label %endif6776 +then6774: + store { ptr, i64, i64 } { ptr @.str.4372, i64 1, i64 0 }, ptr %a110 + %t111 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.4373, i64 5, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br i1 %t116, label %then6777, label %else6778 +then6777: + %t117 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.4374, i64 1, i64 0 }, ptr %a110 + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_drop(ptr %a118) + br label %endif6779 +else6778: + %t119 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t120 = load { ptr, i64, i64 }, ptr %t119 + store { ptr, i64, i64 } %t120, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.4375, i64 6, i64 0 }, ptr %a122 + %t123 = call i32 @finch_str_eq(ptr %a121, ptr %a122) + %t124 = icmp ne i32 %t123, 0 + br i1 %t124, label %then6780, label %endif6782 +then6780: + %t125 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.4376, i64 1, i64 0 }, ptr %a110 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_drop(ptr %a126) + br label %endif6782 +endif6782: + br label %endif6779 +endif6779: + %t127 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t128 = load ptr, ptr %a1 + %t129 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } { ptr @.str.4377, i64 31, i64 0 }, ptr %a131 + store { ptr, i64, i64 } %t129, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t133, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.4378, i64 1, i64 0 }, ptr %a136 + call void @finch_str_concat(ptr %a134, ptr %a135, ptr %a136) + store { ptr, i64, i64 } %t133, ptr %a137 + call void @finch_str_drop(ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a134 + %t139 = call { ptr, i64, i64 } @finch.gen.op(ptr %t128, { ptr, i64, i64 } %t138) + store { ptr, i64, i64 } %t138, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t142 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4379, i64 3, i64 0 }) + %t143 = insertvalue %S.gen.Val %t141, %S.ast.Type %t142, 1 + %t144 = insertvalue %S.gen.Ref %t127, %S.gen.Val %t143, 2 + call void @finch_str_drop(ptr %a110) + ret %S.gen.Ref %t144 +endif6776: + %t145 = load i64, ptr %a14 + %t146 = icmp slt i64 %t145, 0 + br label %logic.from6783 +logic.from6783: + br i1 %t146, label %logic.rhs6784, label %logic.end6785 +logic.rhs6784: + %t147 = load ptr, ptr %a1 + %t148 = icmp eq ptr %t147, null + br i1 %t148, label %panic6786, label %ok6787 +panic6786: + call void @finch_panic(ptr @.str.4380, i64 3735, ptr @.str.4381) + unreachable +ok6787: + %t149 = getelementptr inbounds %S.gen.Gen, ptr %t147, i32 0, i32 26 + %t150 = getelementptr inbounds %S.cimport.CImports, ptr %t149, i32 0, i32 2 + %t151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t152 = load { ptr, i64, i64 }, ptr %t151 + store { ptr, i64, i64 } %t152, ptr %a153 + %t154 = call i64 @finch_map_find(ptr %t150, ptr %a153, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t155 = icmp sge i64 %t154, 0 + br label %logic.rend6788 +logic.rend6788: + br label %logic.end6785 +logic.end6785: + %t156 = phi i1 [ false, %logic.from6783 ], [ %t155, %logic.rend6788 ] + br i1 %t156, label %then6789, label %endif6791 +then6789: + %t157 = load ptr, ptr %a1 + %t158 = load ptr, ptr %a1 + %t159 = icmp eq ptr %t158, null + br i1 %t159, label %panic6792, label %ok6793 +panic6792: + call void @finch_panic(ptr @.str.4382, i64 3736, ptr @.str.4383) + unreachable +ok6793: + %t160 = getelementptr inbounds %S.gen.Gen, ptr %t158, i32 0, i32 26 + %t161 = getelementptr inbounds %S.cimport.CImports, ptr %t160, i32 0, i32 2 + %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t163 = load { ptr, i64, i64 }, ptr %t162 + store { ptr, i64, i64 } %t163, ptr %a164 + %t165 = call i64 @finch_map_find(ptr %t161, ptr %a164, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t166 = icmp slt i64 %t165, 0 + br i1 %t166, label %map.missing6794, label %map.found6795 +map.missing6794: + store { ptr, i64, i64 } zeroinitializer, ptr %a167 + store { ptr, i64, i64 } %t163, ptr %a168 + call void @finch_buf_str(ptr %a167, ptr %a168, i32 1) + call void @finch_map_missing(ptr @.str.4384, i64 3736, ptr %a167) + unreachable +map.found6795: + %t169 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t161, i32 0, i32 0 + %t170 = load ptr, ptr %t169 + %t171 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t170, i64 %t165 + %t172 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t171, i32 0, i32 2 + %t173 = load %S.ast.Type, ptr %t172 + %t174 = load %S.ast.Node, ptr %a2 + %t175 = call %S.ast.Type @finch.gen.resolve(ptr %t157, %S.ast.Type %t173, %S.ast.Node %t174) + store %S.ast.Type %t175, ptr %a176 + %t177 = load ptr, ptr %a1 + %t178 = icmp eq ptr %t177, null + br i1 %t178, label %panic6796, label %ok6797 +panic6796: + call void @finch_panic(ptr @.str.4385, i64 3737, ptr @.str.4386) + unreachable +ok6797: + %t179 = getelementptr inbounds %S.gen.Gen, ptr %t177, i32 0, i32 40 + %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 + %t181 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t182 = load { ptr, i64, i64 }, ptr %t181 + store { ptr, i64, i64 } { ptr @.str.4387, i64 2, i64 0 }, ptr %a184 + store { ptr, i64, i64 } %t182, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a183 + store i64 -1, ptr %a187 + %t188 = load i64, ptr %t180 + %t189 = load ptr, ptr %t179 + store i64 0, ptr %a190 + br label %find.cond6798 +find.cond6798: + %t191 = load i64, ptr %a190 + %t192 = icmp slt i64 %t191, %t188 + br i1 %t192, label %find.body6799, label %find.end6802 +find.body6799: + %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t189, i64 %t191 + %t194 = load { ptr, i64, i64 }, ptr %t193 + store { ptr, i64, i64 } %t194, ptr %a195 + store { ptr, i64, i64 } %t186, ptr %a196 + %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) + %t198 = icmp ne i32 %t197, 0 + br i1 %t198, label %find.hit6800, label %find.next6801 +find.hit6800: + store i64 %t191, ptr %a187 + br label %find.end6802 +find.next6801: + %t199 = add i64 %t191, 1 + store i64 %t199, ptr %a190 + br label %find.cond6798 +find.end6802: + store { ptr, i64, i64 } %t186, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load i64, ptr %a187 + %t202 = icmp sge i64 %t201, 0 + %t203 = xor i1 %t202, true + br i1 %t203, label %then6803, label %endif6805 +then6803: + %t204 = load ptr, ptr %a1 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic6806, label %ok6807 +panic6806: + call void @finch_panic(ptr @.str.4388, i64 3738, ptr @.str.4389) + unreachable +ok6807: + %t206 = getelementptr inbounds %S.gen.Gen, ptr %t204, i32 0, i32 40 + %t207 = getelementptr inbounds { ptr, i64, i64 }, ptr %t206, i32 0, i32 1 + %t208 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t209 = load { ptr, i64, i64 }, ptr %t208 + store { ptr, i64, i64 } { ptr @.str.4390, i64 2, i64 0 }, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + %t213 = load { ptr, i64, i64 }, ptr %a210 + %t214 = load i64, ptr %t207 + %t215 = add i64 %t214, 1 + call void @finch_arr_reserve(ptr %t206, i64 %t215, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t216 = load ptr, ptr %t206 + %t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %t216, i64 %t214 + store { ptr, i64, i64 } %t213, ptr %t217 + store i64 %t215, ptr %t207 + %t218 = load ptr, ptr %a1 + %t219 = icmp eq ptr %t218, null + br i1 %t219, label %panic6808, label %ok6809 +panic6808: + call void @finch_panic(ptr @.str.4391, i64 3739, ptr @.str.4392) + unreachable +ok6809: + %t220 = getelementptr inbounds %S.gen.Gen, ptr %t218, i32 0, i32 2 + %t221 = getelementptr inbounds { ptr, i64, i64 }, ptr %t220, i32 0, i32 1 + %t222 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t223 = load { ptr, i64, i64 }, ptr %t222 + store { ptr, i64, i64 } { ptr @.str.4393, i64 1, i64 0 }, ptr %a225 + store { ptr, i64, i64 } %t223, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a224 + store { ptr, i64, i64 } %t227, ptr %a229 + store { ptr, i64, i64 } { ptr @.str.4394, i64 19, i64 0 }, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + store { ptr, i64, i64 } %t227, ptr %a231 + call void @finch_str_drop(ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a228 + %t233 = load ptr, ptr %a1 + %t234 = load %S.ast.Type, ptr %a176 + %t235 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t233, %S.ast.Type %t234) + store { ptr, i64, i64 } %t232, ptr %a237 + store { ptr, i64, i64 } %t235, ptr %a238 + call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) + store { ptr, i64, i64 } %t232, ptr %a239 + call void @finch_str_drop(ptr %a239) + store { ptr, i64, i64 } %t235, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = load { ptr, i64, i64 }, ptr %a236 + %t242 = load i64, ptr %t221 + %t243 = add i64 %t242, 1 + call void @finch_arr_reserve(ptr %t220, i64 %t243, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t244 = load ptr, ptr %t220 + %t245 = getelementptr inbounds { ptr, i64, i64 }, ptr %t244, i64 %t242 + store { ptr, i64, i64 } %t241, ptr %t245 + store i64 %t243, ptr %t221 + br label %endif6805 +endif6805: + %t246 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t247 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t248 = load { ptr, i64, i64 }, ptr %t247 + store { ptr, i64, i64 } { ptr @.str.4395, i64 1, i64 0 }, ptr %a250 + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + %t252 = load { ptr, i64, i64 }, ptr %a249 + %t253 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t252, 0 + %t254 = load %S.ast.Type, ptr %a176 + store %S.ast.Type %t254, ptr %a255 + call void @finch.copy.S_ast_Type(ptr %a256, ptr %a255) + %t257 = load %S.ast.Type, ptr %a256 + %t258 = insertvalue %S.gen.Place %t253, %S.ast.Type %t257, 1 + %t259 = insertvalue %S.gen.Ref %t246, %S.gen.Place %t258, 1 + call void @finch.drop.S_ast_Type(ptr %a176) + ret %S.gen.Ref %t259 +endif6791: + %t260 = load i64, ptr %a14 + %t261 = icmp slt i64 %t260, 0 + br i1 %t261, label %then6810, label %endif6812 +then6810: + %t262 = load ptr, ptr %a1 + %t263 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = call i1 @finch.gen.imports(ptr %t262, { ptr, i64, i64 } %t264) + br i1 %t265, label %then6813, label %endif6815 +then6813: + %t266 = load ptr, ptr %a1 + %t267 = load %S.ast.Node, ptr %a2 + %t268 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t269 = load { ptr, i64, i64 }, ptr %t268 + store { ptr, i64, i64 } { ptr @.str.4396, i64 1, i64 0 }, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t273, ptr %a275 + store { ptr, i64, i64 } { ptr @.str.4397, i64 43, i64 0 }, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t273, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + %t279 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t280 = load { ptr, i64, i64 }, ptr %t279 + store { ptr, i64, i64 } %t278, ptr %a282 + store { ptr, i64, i64 } %t280, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + store { ptr, i64, i64 } %t278, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a281 + store { ptr, i64, i64 } %t285, ptr %a287 + store { ptr, i64, i64 } { ptr @.str.4398, i64 10, i64 0 }, ptr %a288 + call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) + store { ptr, i64, i64 } %t285, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a286 + call void @finch.gen.fail(ptr %t266, %S.ast.Node %t267, { ptr, i64, i64 } %t290) + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + br label %endif6815 +endif6815: + %t292 = load ptr, ptr %a1 + %t293 = load %S.ast.Node, ptr %a2 + %t294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t295 = load { ptr, i64, i64 }, ptr %t294 + store { ptr, i64, i64 } { ptr @.str.4399, i64 28, i64 0 }, ptr %a297 + store { ptr, i64, i64 } %t295, ptr %a298 + call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) + %t299 = load { ptr, i64, i64 }, ptr %a296 + store { ptr, i64, i64 } %t299, ptr %a301 + store { ptr, i64, i64 } { ptr @.str.4400, i64 1, i64 0 }, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t299, ptr %a303 + call void @finch_str_drop(ptr %a303) + %t304 = load { ptr, i64, i64 }, ptr %a300 + call void @finch.gen.fail(ptr %t292, %S.ast.Node %t293, { ptr, i64, i64 } %t304) + store { ptr, i64, i64 } %t304, ptr %a305 + call void @finch_str_drop(ptr %a305) + br label %endif6812 +endif6812: + %t306 = load ptr, ptr %a1 + %t307 = load i64, ptr %a14 + %t308 = call %S.gen.Var @finch.gen.varAt(ptr %t306, i64 %t307) + store %S.gen.Var %t308, ptr %a309 + %t310 = load ptr, ptr %a1 + %t311 = load %S.ast.Node, ptr %a2 + %t312 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t313 = load i64, ptr %t312 + %t314 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t315 = getelementptr inbounds { ptr, i64, i64 }, ptr %t314, i32 0, i32 1 + %t316 = load i64, ptr %t315 + %t317 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 1 + %t318 = load %S.ast.Type, ptr %t317 + %t319 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t318) + store { ptr, i64, i64 } { ptr @.str.4401, i64 9, i64 0 }, ptr %a321 + store { ptr, i64, i64 } %t319, ptr %a322 + call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) + store { ptr, i64, i64 } %t319, ptr %a323 + call void @finch_str_drop(ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t324, ptr %a326 + store { ptr, i64, i64 } { ptr @.str.4402, i64 1, i64 0 }, ptr %a327 + call void @finch_str_concat(ptr %a325, ptr %a326, ptr %a327) + store { ptr, i64, i64 } %t324, ptr %a328 + call void @finch_str_drop(ptr %a328) + %t329 = load { ptr, i64, i64 }, ptr %a325 + %t330 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t331 = load { ptr, i64, i64 }, ptr %t330 + store { ptr, i64, i64 } %t329, ptr %a333 + store { ptr, i64, i64 } %t331, ptr %a334 + call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) + store { ptr, i64, i64 } %t329, ptr %a335 + call void @finch_str_drop(ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a332 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.4403, i64 4, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t336, ptr %a340 + call void @finch_str_drop(ptr %a340) + %t341 = load { ptr, i64, i64 }, ptr %a337 + %t342 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 7 + %t343 = load { ptr, i64, i64 }, ptr %t342 + %t344 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 8 + %t345 = load i64, ptr %t344 + %t346 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 9 + %t347 = load i64, ptr %t346 + call void @finch.gen.noteRef(ptr %t310, %S.ast.Node %t311, i64 %t313, i64 %t316, { ptr, i64, i64 } %t341, { ptr, i64, i64 } %t343, i64 %t345, i64 %t347) + store { ptr, i64, i64 } %t341, ptr %a348 + call void @finch_str_drop(ptr %a348) + %t349 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t350 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 2 + %t351 = load { ptr, i64, i64 }, ptr %t350 + store { ptr, i64, i64 } %t351, ptr %a352 + call void @finch_str_copy(ptr %a353, ptr %a352) + %t354 = load { ptr, i64, i64 }, ptr %a353 + %t355 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t354, 0 + %t356 = getelementptr inbounds %S.gen.Var, ptr %a309, i32 0, i32 1 + %t357 = load %S.ast.Type, ptr %t356 + store %S.ast.Type %t357, ptr %a358 + call void @finch.copy.S_ast_Type(ptr %a359, ptr %a358) + %t360 = load %S.ast.Type, ptr %a359 + %t361 = insertvalue %S.gen.Place %t355, %S.ast.Type %t360, 1 + %t362 = insertvalue %S.gen.Ref %t349, %S.gen.Place %t361, 1 + call void @finch.drop.S_gen_Var(ptr %a309) + ret %S.gen.Ref %t362 +endif6733: + %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t364 = load { ptr, i64, i64 }, ptr %t363 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.4404, i64 6, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br i1 %t368, label %then6816, label %endif6818 +then6816: + %t369 = load ptr, ptr %a1 + %t370 = load %S.ast.Node, ptr %a2 + %t371 = load i1, ptr %a3 + %t372 = call %S.gen.Ref @finch.gen.member(ptr %t369, %S.ast.Node %t370, i1 %t371) + ret %S.gen.Ref %t372 +endif6818: + %t373 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t374 = load { ptr, i64, i64 }, ptr %t373 + store { ptr, i64, i64 } %t374, ptr %a375 + store { ptr, i64, i64 } { ptr @.str.4405, i64 5, i64 0 }, ptr %a376 + %t377 = call i32 @finch_str_eq(ptr %a375, ptr %a376) + %t378 = icmp ne i32 %t377, 0 + br i1 %t378, label %then6819, label %endif6821 +then6819: + %t379 = load ptr, ptr %a1 + %t380 = load %S.ast.Node, ptr %a2 + %t381 = load i1, ptr %a3 + %t382 = call %S.gen.Ref @finch.gen.index(ptr %t379, %S.ast.Node %t380, i1 %t381) + ret %S.gen.Ref %t382 +endif6821: + %t383 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t384 = load ptr, ptr %a1 + %t385 = load %S.ast.Node, ptr %a2 + %t386 = call %S.gen.Val @finch.gen.expr(ptr %t384, %S.ast.Node %t385) + %t387 = insertvalue %S.gen.Ref %t383, %S.gen.Val %t386, 2 + ret %S.gen.Ref %t387 +} + +define internal { ptr, i64, i64 } @finch.gen.llFloat({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca i64, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4407, i64 1, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then6822, label %endif6824 +then6822: + %t13 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4408, i64 1, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a14 + %t18 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t17, ptr %a6 + store { ptr, i64, i64 } %t18, ptr %a19 + call void @finch_str_drop(ptr %a19) + br label %endif6824 +endif6824: + %t20 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.4410, i64 1, i64 0 }, ptr %a23 + %t24 = call i64 @finch_str_find(ptr %a21, ptr %a23) + %t25 = icmp sge i64 %t24, 0 + %t26 = xor i1 %t25, true + br i1 %t26, label %then6825, label %endif6827 +then6825: + %t27 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.4412, i64 1, i64 0 }, ptr %a30 + %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) + store i64 %t31, ptr %a32 + %t33 = load i64, ptr %a32 + %t34 = icmp slt i64 %t33, 0 + br i1 %t34, label %then6828, label %endif6830 +then6828: + %t35 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.4414, i64 1, i64 0 }, ptr %a38 + %t39 = call i64 @finch_str_find(ptr %a36, ptr %a38) + store i64 %t39, ptr %a32 + br label %endif6830 +endif6830: + %t40 = load i64, ptr %a32 + %t41 = icmp slt i64 %t40, 0 + br i1 %t41, label %then6831, label %endif6833 +then6831: + %t42 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t42, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.4415, i64 2, i64 0 }, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a43 + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t46 +endif6833: + %t47 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t47, ptr %a48 + %t50 = load i64, ptr %a32 + call void @finch_str_sub(ptr %a49, ptr %a48, i64 0, i64 %t50, ptr @.str.4416, i64 3776) + %t51 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.4417, i64 2, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + %t57 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t57, ptr %a58 + %t60 = load i64, ptr %a32 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t62 = load i64, ptr %t61 + call void @finch_str_sub(ptr %a59, ptr %a58, i64 %t60, i64 %t62, ptr @.str.4418, i64 3776) + %t63 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t56, ptr %a65 + store { ptr, i64, i64 } %t63, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t56, ptr %a67 + call void @finch_str_drop(ptr %a67) + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a64 + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t69 +endif6827: + %t70 = load { ptr, i64, i64 }, ptr %a6 + ret { ptr, i64, i64 } %t70 +} + +define internal i64 @finch.gen.enumNamed(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4419, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from6834 +logic.from6834: + br i1 %t8, label %logic.rhs6835, label %logic.end6836 +logic.rhs6835: + %t9 = load ptr, ptr %a1 + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) + %t13 = icmp slt i64 %t12, 0 + br label %logic.rend6837 +logic.rend6837: + br label %logic.end6836 +logic.end6836: + %t14 = phi i1 [ false, %logic.from6834 ], [ %t13, %logic.rend6837 ] + br i1 %t14, label %then6838, label %endif6840 +then6838: + %t15 = load ptr, ptr %a1 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic6841, label %ok6842 +panic6841: + call void @finch_panic(ptr @.str.4420, i64 3784, ptr @.str.4421) + unreachable +ok6842: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = call i64 @finch.gen.findEnum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) + ret i64 %t22 +endif6840: + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.4422, i64 6, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.from6843 +logic.from6843: + br i1 %t28, label %logic.rhs6844, label %logic.end6845 +logic.rhs6844: + %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 0, %t31 + br i1 %t32, label %range6846, label %inrange6847 +range6846: + call void @finch_panic_index(ptr @.str.4423, i64 3786, i64 0, i64 %t31) + unreachable +inrange6847: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 + %t36 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.4424, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.rend6848 +logic.rend6848: + br label %logic.end6845 +logic.end6845: + %t41 = phi i1 [ false, %logic.from6843 ], [ %t40, %logic.rend6848 ] + br label %logic.from6849 +logic.from6849: + br i1 %t41, label %logic.rhs6850, label %logic.end6851 +logic.rhs6850: + %t42 = load ptr, ptr %a1 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 0, %t45 + br i1 %t46, label %range6852, label %inrange6853 +range6852: + call void @finch_panic_index(ptr @.str.4425, i64 3786, i64 0, i64 %t45) + unreachable +inrange6853: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 + %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) + %t52 = icmp slt i64 %t51, 0 + br label %logic.rend6854 +logic.rend6854: + br label %logic.end6851 +logic.end6851: + %t53 = phi i1 [ false, %logic.from6849 ], [ %t52, %logic.rend6854 ] + br label %logic.from6855 +logic.from6855: + br i1 %t53, label %logic.rhs6856, label %logic.end6857 +logic.rhs6856: + %t54 = load ptr, ptr %a1 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t56 = load { ptr, i64, i64 }, ptr %t55 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 0, %t57 + br i1 %t58, label %range6858, label %inrange6859 +range6858: + call void @finch_panic_index(ptr @.str.4426, i64 3786, i64 0, i64 %t57) + unreachable +inrange6859: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 + %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) + br label %logic.rend6860 +logic.rend6860: + br label %logic.end6857 +logic.end6857: + %t64 = phi i1 [ false, %logic.from6855 ], [ %t63, %logic.rend6860 ] + br i1 %t64, label %then6861, label %endif6863 +then6861: + %t65 = load ptr, ptr %a1 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t67 = load { ptr, i64, i64 }, ptr %t66 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 0, %t68 + br i1 %t69, label %range6864, label %inrange6865 +range6864: + call void @finch_panic_index(ptr @.str.4427, i64 3787, i64 0, i64 %t68) + unreachable +inrange6865: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 + %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + %t76 = call i64 @finch.gen.findEnum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) + ret i64 %t76 +endif6863: + ret i64 -1 +} + +define internal i64 @finch.gen.sumNamed(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4428, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from6866 +logic.from6866: + br i1 %t8, label %logic.rhs6867, label %logic.end6868 +logic.rhs6867: + %t9 = load ptr, ptr %a1 + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call i64 @finch.gen.lookup(ptr %t9, { ptr, i64, i64 } %t11) + %t13 = icmp slt i64 %t12, 0 + br label %logic.rend6869 +logic.rend6869: + br label %logic.end6868 +logic.end6868: + %t14 = phi i1 [ false, %logic.from6866 ], [ %t13, %logic.rend6869 ] + br i1 %t14, label %then6870, label %endif6872 +then6870: + %t15 = load ptr, ptr %a1 + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic6873, label %ok6874 +panic6873: + call void @finch_panic(ptr @.str.4429, i64 3795, ptr @.str.4430) + unreachable +ok6874: + %t18 = getelementptr inbounds %S.gen.Gen, ptr %t16, i32 0, i32 14 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + %t22 = call i64 @finch.gen.findSum(ptr %t15, { ptr, i64, i64 } %t19, { ptr, i64, i64 } %t21) + ret i64 %t22 +endif6872: + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.4431, i64 6, i64 0 }, ptr %a26 + %t27 = call i32 @finch_str_eq(ptr %a25, ptr %a26) + %t28 = icmp ne i32 %t27, 0 + br label %logic.from6875 +logic.from6875: + br i1 %t28, label %logic.rhs6876, label %logic.end6877 +logic.rhs6876: + %t29 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t30 = load { ptr, i64, i64 }, ptr %t29 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 0, %t31 + br i1 %t32, label %range6878, label %inrange6879 +range6878: + call void @finch_panic_index(ptr @.str.4432, i64 3797, i64 0, i64 %t31) + unreachable +inrange6879: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 0 + %t35 = getelementptr inbounds %S.ast.Node, ptr %t34, i32 0, i32 0 + %t36 = load { ptr, i64, i64 }, ptr %t35 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.4433, i64 3, i64 0 }, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.rend6880 +logic.rend6880: + br label %logic.end6877 +logic.end6877: + %t41 = phi i1 [ false, %logic.from6875 ], [ %t40, %logic.rend6880 ] + br label %logic.from6881 +logic.from6881: + br i1 %t41, label %logic.rhs6882, label %logic.end6883 +logic.rhs6882: + %t42 = load ptr, ptr %a1 + %t43 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t44 = load { ptr, i64, i64 }, ptr %t43 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 0, %t45 + br i1 %t46, label %range6884, label %inrange6885 +range6884: + call void @finch_panic_index(ptr @.str.4434, i64 3797, i64 0, i64 %t45) + unreachable +inrange6885: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds %S.ast.Node, ptr %t47, i64 0 + %t49 = getelementptr inbounds %S.ast.Node, ptr %t48, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + %t51 = call i64 @finch.gen.lookup(ptr %t42, { ptr, i64, i64 } %t50) + %t52 = icmp slt i64 %t51, 0 + br label %logic.rend6886 +logic.rend6886: + br label %logic.end6883 +logic.end6883: + %t53 = phi i1 [ false, %logic.from6881 ], [ %t52, %logic.rend6886 ] + br label %logic.from6887 +logic.from6887: + br i1 %t53, label %logic.rhs6888, label %logic.end6889 +logic.rhs6888: + %t54 = load ptr, ptr %a1 + %t55 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t56 = load { ptr, i64, i64 }, ptr %t55 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 0, %t57 + br i1 %t58, label %range6890, label %inrange6891 +range6890: + call void @finch_panic_index(ptr @.str.4435, i64 3797, i64 0, i64 %t57) + unreachable +inrange6891: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds %S.ast.Node, ptr %t59, i64 0 + %t61 = getelementptr inbounds %S.ast.Node, ptr %t60, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + %t63 = call i1 @finch.gen.imports(ptr %t54, { ptr, i64, i64 } %t62) + br label %logic.rend6892 +logic.rend6892: + br label %logic.end6889 +logic.end6889: + %t64 = phi i1 [ false, %logic.from6887 ], [ %t63, %logic.rend6892 ] + br i1 %t64, label %then6893, label %endif6895 +then6893: + %t65 = load ptr, ptr %a1 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t67 = load { ptr, i64, i64 }, ptr %t66 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 0, %t68 + br i1 %t69, label %range6896, label %inrange6897 +range6896: + call void @finch_panic_index(ptr @.str.4436, i64 3798, i64 0, i64 %t68) + unreachable +inrange6897: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 + %t72 = getelementptr inbounds %S.ast.Node, ptr %t71, i32 0, i32 1 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t75 = load { ptr, i64, i64 }, ptr %t74 + %t76 = call i64 @finch.gen.findSum(ptr %t65, { ptr, i64, i64 } %t73, { ptr, i64, i64 } %t75) + ret i64 %t76 +endif6895: + ret i64 -1 +} + +define internal i64 @finch.gen.sumVariant(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, %S.ast.Node %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Node, align 16 + %a15 = alloca %S.gen.SumDef, align 16 + %a16 = alloca %S.gen.SumDef, align 16 + %a18 = alloca %S.gen.SumDef, align 16 + %a22 = alloca i64, align 16 + %a25 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca i64, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Node %p3, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic6898, label %ok6899 +panic6898: + call void @finch_panic(ptr @.str.4437, i64 3804, ptr @.str.4438) + unreachable +ok6899: + %t7 = getelementptr inbounds %S.gen.Gen, ptr %t5, i32 0, i32 22 + %t8 = load i64, ptr %a2 + %t9 = load { ptr, i64, i64 }, ptr %t7 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range6900, label %inrange6901 +range6900: + call void @finch_panic_index(ptr @.str.4439, i64 3804, i64 %t8, i64 %t10) + unreachable +inrange6901: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds %S.gen.SumDef, ptr %t12, i64 %t8 + %t14 = load %S.gen.SumDef, ptr %t13 + store %S.gen.SumDef %t14, ptr %a15 + call void @finch.copy.S_gen_SumDef(ptr %a16, ptr %a15) + %t17 = load %S.gen.SumDef, ptr %a16 + store %S.gen.SumDef %t17, ptr %a18 + %t19 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 2 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %a3 + store i64 -1, ptr %a22 + %t23 = load i64, ptr %t20 + %t24 = load ptr, ptr %t19 + store i64 0, ptr %a25 + br label %find.cond6902 +find.cond6902: + %t26 = load i64, ptr %a25 + %t27 = icmp slt i64 %t26, %t23 + br i1 %t27, label %find.body6903, label %find.end6906 +find.body6903: + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } %t21, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br i1 %t33, label %find.hit6904, label %find.next6905 +find.hit6904: + store i64 %t26, ptr %a22 + br label %find.end6906 +find.next6905: + %t34 = add i64 %t26, 1 + store i64 %t34, ptr %a25 + br label %find.cond6902 +find.end6906: + %t35 = load i64, ptr %a22 + store i64 %t35, ptr %a36 + %t37 = load i64, ptr %a36 + %t38 = icmp slt i64 %t37, 0 + br i1 %t38, label %then6907, label %endif6909 +then6907: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a4 + %t41 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.4440, i64 9, i64 0 }, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t46, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.4441, i64 17, i64 0 }, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + %t52 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t51, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t51, ptr %a56 + call void @finch_str_drop(ptr %a56) + %t57 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } %t57, ptr %a59 + store { ptr, i64, i64 } { ptr @.str.4442, i64 11, i64 0 }, ptr %a60 + call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) + store { ptr, i64, i64 } %t57, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load { ptr, i64, i64 }, ptr %a58 + %t63 = getelementptr inbounds %S.gen.SumDef, ptr %a18, i32 0, i32 2 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4443, i64 2, i64 0 }, ptr %a65 + call void @finch_str_join(ptr %a66, ptr %t63, ptr %a65) + %t67 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } %t62, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t62, ptr %a71 + call void @finch_str_drop(ptr %a71) + store { ptr, i64, i64 } %t67, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.4444, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif6909 +endif6909: + %t80 = load i64, ptr %a36 + call void @finch.drop.S_gen_SumDef(ptr %a18) + ret i64 %t80 +} + +define internal %S.gen.Val @finch.gen.sumMake(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a16 = alloca %S.gen.SumDef, align 16 + %a17 = alloca %S.gen.SumDef, align 16 + %a19 = alloca %S.gen.SumDef, align 16 + %a25 = alloca i64, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca i64, align 16 + %a178 = alloca %S.ast.Node, align 16 + %a179 = alloca %S.ast.Node, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic6910, label %ok6911 +panic6910: + call void @finch_panic(ptr @.str.4445, i64 3814, ptr @.str.4446) + unreachable +ok6911: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 22 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range6912, label %inrange6913 +range6912: + call void @finch_panic_index(ptr @.str.4447, i64 3814, i64 %t9, i64 %t11) + unreachable +inrange6913: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.SumDef, ptr %t13, i64 %t9 + %t15 = load %S.gen.SumDef, ptr %t14 + store %S.gen.SumDef %t15, ptr %a16 + call void @finch.copy.S_gen_SumDef(ptr %a17, ptr %a16) + %t18 = load %S.gen.SumDef, ptr %a17 + store %S.gen.SumDef %t18, ptr %a19 + %t20 = load ptr, ptr %a1 + %t21 = load i64, ptr %a2 + %t22 = load { ptr, i64, i64 }, ptr %a3 + %t23 = load %S.ast.Node, ptr %a5 + %t24 = call i64 @finch.gen.sumVariant(ptr %t20, i64 %t21, { ptr, i64, i64 } %t22, %S.ast.Node %t23) + store i64 %t24, ptr %a25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 + %t29 = load i64, ptr %a25 + %t30 = load { ptr, i64, i64 }, ptr %t28 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 %t29, %t31 + br i1 %t32, label %range6914, label %inrange6915 +range6914: + call void @finch_panic_index(ptr @.str.4448, i64 3816, i64 %t29, i64 %t31) + unreachable +inrange6915: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds i64, ptr %t33, i64 %t29 + %t35 = load i64, ptr %t34 + %t36 = icmp ne i64 %t27, %t35 + br i1 %t36, label %then6916, label %endif6918 +then6916: + %t37 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 + %t38 = load i64, ptr %a25 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range6919, label %inrange6920 +range6919: + call void @finch_panic_index(ptr @.str.4449, i64 3817, i64 %t38, i64 %t40) + unreachable +inrange6920: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds i64, ptr %t42, i64 %t38 + %t44 = load i64, ptr %t43 + %t45 = icmp eq i64 %t44, 0 + br i1 %t45, label %then6921, label %endif6923 +then6921: + %t46 = load ptr, ptr %a1 + %t47 = load %S.ast.Node, ptr %a5 + %t48 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.4450, i64 22, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a49 + %t53 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t52, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t52, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t59, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.4451, i64 1, i64 0 }, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + store { ptr, i64, i64 } %t59, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a60 + %t65 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t64, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a68 + call void @finch_str_concat(ptr %a66, ptr %a67, ptr %a68) + store { ptr, i64, i64 } %t64, ptr %a69 + call void @finch_str_drop(ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a66 + call void @finch.gen.fail(ptr %t46, %S.ast.Node %t47, { ptr, i64, i64 } %t70) + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + br label %endif6923 +endif6923: + %t72 = load ptr, ptr %a1 + %t73 = load %S.ast.Node, ptr %a5 + %t74 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.4452, i64 7, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a75 + %t79 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 3 + %t80 = load i64, ptr %a25 + %t81 = load { ptr, i64, i64 }, ptr %t79 + %t82 = extractvalue { ptr, i64, i64 } %t81, 1 + %t83 = icmp uge i64 %t80, %t82 + br i1 %t83, label %range6924, label %inrange6925 +range6924: + call void @finch_panic_index(ptr @.str.4453, i64 3820, i64 %t80, i64 %t82) + unreachable +inrange6925: + %t84 = extractvalue { ptr, i64, i64 } %t81, 0 + %t85 = getelementptr inbounds i64, ptr %t84, i64 %t80 + %t86 = load i64, ptr %t85 + call void @finch_str_from_int(ptr %a87, i64 %t86) + %t88 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t78, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t78, ptr %a92 + call void @finch_str_drop(ptr %a92) + store { ptr, i64, i64 } %t88, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t94, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.4454, i64 19, i64 0 }, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a95 + %t100 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t101 = load i64, ptr %t100 + call void @finch_str_from_int(ptr %a102, i64 %t101) + %t103 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t99, ptr %a105 + store { ptr, i64, i64 } %t103, ptr %a106 + call void @finch_str_concat(ptr %a104, ptr %a105, ptr %a106) + store { ptr, i64, i64 } %t99, ptr %a107 + call void @finch_str_drop(ptr %a107) + store { ptr, i64, i64 } %t103, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a104 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.4455, i64 2, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t109, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + %t115 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t114, ptr %a118 + store { ptr, i64, i64 } %t116, ptr %a119 + call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) + store { ptr, i64, i64 } %t114, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.4456, i64 1, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t126, ptr %a129 + store { ptr, i64, i64 } %t127, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t126, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t132, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.4457, i64 5, i64 0 }, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + call void @finch.gen.fail(ptr %t72, %S.ast.Node %t73, { ptr, i64, i64 } %t137) + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_drop(ptr %a138) + br label %endif6918 +endif6918: + store { ptr, i64, i64 } zeroinitializer, ptr %a139 + store { ptr, i64, i64 } zeroinitializer, ptr %a140 + %t141 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 + %t142 = insertvalue %S.ast.Node zeroinitializer, { ptr, i64, i64 } { ptr @.str.4458, i64 3, i64 0 }, 0 + %t143 = load i64, ptr %a25 + call void @finch_str_from_int(ptr %a144, i64 %t143) + %t145 = load { ptr, i64, i64 }, ptr %a144 + %t146 = insertvalue %S.ast.Node %t142, { ptr, i64, i64 } %t145, 4 + %t147 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 11 + %t148 = load i64, ptr %t147 + %t149 = insertvalue %S.ast.Node %t146, i64 %t148, 11 + %t150 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 + %t151 = load i64, ptr %t150 + %t152 = insertvalue %S.ast.Node %t149, i64 %t151, 12 + %t153 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 13 + %t154 = load i64, ptr %t153 + %t155 = insertvalue %S.ast.Node %t152, i64 %t154, 13 + %t156 = load i64, ptr %t141 + %t157 = add i64 %t156, 1 + call void @finch_arr_reserve(ptr %a139, i64 %t157, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t158 = load ptr, ptr %a139 + %t159 = getelementptr inbounds %S.ast.Node, ptr %t158, i64 %t156 + store %S.ast.Node %t155, ptr %t159 + store i64 %t157, ptr %t141 + %t160 = getelementptr inbounds { ptr, i64, i64 }, ptr %a140, i32 0, i32 1 + %t161 = load i64, ptr %t160 + %t162 = add i64 %t161, 1 + call void @finch_arr_reserve(ptr %a140, i64 %t162, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t163 = load ptr, ptr %a140 + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %t163, i64 %t161 + store { ptr, i64, i64 } { ptr @.str.4459, i64 3, i64 0 }, ptr %t164 + store i64 %t162, ptr %t160 + %t165 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t166 = load i64, ptr %t165 + store i64 0, ptr %a167 + br label %for.cond6926 +for.cond6926: + %t168 = load i64, ptr %a167 + %t169 = icmp slt i64 %t168, %t166 + br i1 %t169, label %for.body6927, label %for.end6929 +for.body6927: + %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %a139, i32 0, i32 1 + %t171 = load i64, ptr %a167 + %t172 = load { ptr, i64, i64 }, ptr %a4 + %t173 = extractvalue { ptr, i64, i64 } %t172, 1 + %t174 = icmp uge i64 %t171, %t173 + br i1 %t174, label %range6930, label %inrange6931 +range6930: + call void @finch_panic_index(ptr @.str.4460, i64 3827, i64 %t171, i64 %t173) + unreachable +inrange6931: + %t175 = extractvalue { ptr, i64, i64 } %t172, 0 + %t176 = getelementptr inbounds %S.ast.Node, ptr %t175, i64 %t171 + %t177 = load %S.ast.Node, ptr %t176 + store %S.ast.Node %t177, ptr %a178 + call void @finch.copy.S_ast_Node(ptr %a179, ptr %a178) + %t180 = load %S.ast.Node, ptr %a179 + %t181 = load i64, ptr %t170 + %t182 = add i64 %t181, 1 + call void @finch_arr_reserve(ptr %a139, i64 %t182, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t183 = load ptr, ptr %a139 + %t184 = getelementptr inbounds %S.ast.Node, ptr %t183, i64 %t181 + store %S.ast.Node %t180, ptr %t184 + store i64 %t182, ptr %t170 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %a140, i32 0, i32 1 + %t186 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t186, ptr %a188 + store { ptr, i64, i64 } { ptr @.str.4461, i64 1, i64 0 }, ptr %a189 + call void @finch_str_concat(ptr %a187, ptr %a188, ptr %a189) + %t190 = load { ptr, i64, i64 }, ptr %a187 + %t191 = load i64, ptr %a167 + call void @finch_str_from_int(ptr %a192, i64 %t191) + %t193 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } %t190, ptr %a195 + store { ptr, i64, i64 } %t193, ptr %a196 + call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) + store { ptr, i64, i64 } %t190, ptr %a197 + call void @finch_str_drop(ptr %a197) + store { ptr, i64, i64 } %t193, ptr %a198 + call void @finch_str_drop(ptr %a198) + %t199 = load { ptr, i64, i64 }, ptr %a194 + %t200 = load i64, ptr %t185 + %t201 = add i64 %t200, 1 + call void @finch_arr_reserve(ptr %a140, i64 %t201, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t202 = load ptr, ptr %a140 + %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 %t200 + store { ptr, i64, i64 } %t199, ptr %t203 + store i64 %t201, ptr %t185 + br label %for.step6928 +for.step6928: + %t204 = load i64, ptr %a167 + %t205 = add i64 %t204, 1 + store i64 %t205, ptr %a167 + br label %for.cond6926 +for.end6929: + %t206 = load ptr, ptr %a1 + %t207 = load %S.ast.Node, ptr %a5 + %t208 = getelementptr inbounds %S.ast.Node, ptr %a5, i32 0, i32 12 + %t209 = load i64, ptr %t208 + %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t211 = load i64, ptr %t210 + %t212 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t213 = load { ptr, i64, i64 }, ptr %t212 + store { ptr, i64, i64 } { ptr @.str.4462, i64 9, i64 0 }, ptr %a215 + store { ptr, i64, i64 } %t213, ptr %a216 + call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t217, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.4463, i64 1, i64 0 }, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + store { ptr, i64, i64 } %t217, ptr %a221 + call void @finch_str_drop(ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a218 + %t223 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t222, ptr %a225 + store { ptr, i64, i64 } %t223, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t222, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + store { ptr, i64, i64 } %t228, ptr %a230 + store { ptr, i64, i64 } { ptr @.str.4464, i64 4, i64 0 }, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t228, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + call void @finch.gen.noteRef(ptr %t206, %S.ast.Node %t207, i64 %t209, i64 %t211, { ptr, i64, i64 } %t233, { ptr, i64, i64 } { ptr @.str.4465, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t233, ptr %a234 + call void @finch_str_drop(ptr %a234) + %t235 = load ptr, ptr %a1 + %t236 = load ptr, ptr %a1 + %t237 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = getelementptr inbounds %S.gen.SumDef, ptr %a19, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = call i64 @finch.gen.findStruct(ptr %t236, { ptr, i64, i64 } %t238, { ptr, i64, i64 } %t240) + %t242 = load { ptr, i64, i64 }, ptr %a139 + %t243 = load { ptr, i64, i64 }, ptr %a140 + %t244 = load %S.ast.Node, ptr %a5 + %t245 = call %S.gen.Val @finch.gen.construct(ptr %t235, i64 %t241, { ptr, i64, i64 } %t242, { ptr, i64, i64 } %t243, %S.ast.Node %t244) + call void @finch.drop.arr_str(ptr %a140) + call void @finch.drop.arr_S_ast_Node(ptr %a139) + call void @finch.drop.S_gen_SumDef(ptr %a19) + ret %S.gen.Val %t245 +} + +define internal %S.gen.SumPat @finch.gen.sumPattern(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a14 = alloca %S.gen.SumDef, align 16 + %a15 = alloca %S.gen.SumDef, align 16 + %a17 = alloca %S.gen.SumDef, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca i64, align 16 + %a124 = alloca %S.ast.Node, align 16 + %a125 = alloca %S.ast.Node, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca i64, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca i64, align 16 + %a251 = alloca %S.ast.Node, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic6932, label %ok6933 +panic6932: + call void @finch_panic(ptr @.str.4466, i64 3836, ptr @.str.4467) + unreachable +ok6933: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 22 + %t7 = load i64, ptr %a3 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range6934, label %inrange6935 +range6934: + call void @finch_panic_index(ptr @.str.4468, i64 3836, i64 %t7, i64 %t9) + unreachable +inrange6935: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.SumDef, ptr %t11, i64 %t7 + %t13 = load %S.gen.SumDef, ptr %t12 + store %S.gen.SumDef %t13, ptr %a14 + call void @finch.copy.S_gen_SumDef(ptr %a15, ptr %a14) + %t16 = load %S.gen.SumDef, ptr %a15 + store %S.gen.SumDef %t16, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.4469, i64 0, i64 0 }, ptr %a18 + store { ptr, i64, i64 } zeroinitializer, ptr %a19 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + store { ptr, i64, i64 } { ptr @.str.4470, i64 3, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_eq(ptr %a22, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br label %logic.from6936 +logic.from6936: + br i1 %t25, label %logic.rhs6937, label %logic.end6938 +logic.rhs6937: + %t26 = load ptr, ptr %a1 + %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = call i64 @finch.gen.lookup(ptr %t26, { ptr, i64, i64 } %t28) + %t30 = icmp slt i64 %t29, 0 + br label %logic.rend6939 +logic.rend6939: + br label %logic.end6938 +logic.end6938: + %t31 = phi i1 [ false, %logic.from6936 ], [ %t30, %logic.rend6939 ] + br i1 %t31, label %then6940, label %else6941 +then6940: + %t32 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_copy(ptr %a35, ptr %a34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + %t37 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t36, ptr %a18 + store { ptr, i64, i64 } %t37, ptr %a38 + call void @finch_str_drop(ptr %a38) + br label %endif6942 +else6941: + %t39 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.4471, i64 4, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then6943, label %else6944 +then6943: + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t46 = load { ptr, i64, i64 }, ptr %t45 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_copy(ptr %a48, ptr %a47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + %t50 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t49, ptr %a18 + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t53, ptr %a54 + call void @finch.copy.arr_S_ast_Node(ptr %a55, ptr %a54) + %t56 = load { ptr, i64, i64 }, ptr %a55 + %t57 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t56, ptr %a19 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch.drop.arr_S_ast_Node(ptr %a58) + br label %endif6945 +else6944: + %t59 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.4472, i64 6, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br label %logic.from6946 +logic.from6946: + br i1 %t64, label %logic.rhs6947, label %logic.end6948 +logic.rhs6947: + %t65 = load ptr, ptr %a1 + %t66 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t67 = load { ptr, i64, i64 }, ptr %t66 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 0, %t68 + br i1 %t69, label %range6949, label %inrange6950 +range6949: + call void @finch_panic_index(ptr @.str.4473, i64 3844, i64 0, i64 %t68) + unreachable +inrange6950: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds %S.ast.Node, ptr %t70, i64 0 + %t72 = load %S.ast.Node, ptr %t71 + %t73 = call i64 @finch.gen.sumNamed(ptr %t65, %S.ast.Node %t72) + %t74 = load i64, ptr %a3 + %t75 = icmp eq i64 %t73, %t74 + br label %logic.rend6951 +logic.rend6951: + br label %logic.end6948 +logic.end6948: + %t76 = phi i1 [ false, %logic.from6946 ], [ %t75, %logic.rend6951 ] + br i1 %t76, label %then6952, label %else6953 +then6952: + %t77 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t78 = load { ptr, i64, i64 }, ptr %t77 + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_copy(ptr %a80, ptr %a79) + %t81 = load { ptr, i64, i64 }, ptr %a80 + %t82 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t81, ptr %a18 + store { ptr, i64, i64 } %t82, ptr %a83 + call void @finch_str_drop(ptr %a83) + br label %endif6954 +else6953: + %t84 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } %t85, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.4474, i64 6, i64 0 }, ptr %a87 + %t88 = call i32 @finch_str_eq(ptr %a86, ptr %a87) + %t89 = icmp ne i32 %t88, 0 + br label %logic.from6955 +logic.from6955: + br i1 %t89, label %logic.rhs6956, label %logic.end6957 +logic.rhs6956: + %t90 = load ptr, ptr %a1 + %t91 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t92 = load { ptr, i64, i64 }, ptr %t91 + %t93 = extractvalue { ptr, i64, i64 } %t92, 1 + %t94 = icmp uge i64 0, %t93 + br i1 %t94, label %range6958, label %inrange6959 +range6958: + call void @finch_panic_index(ptr @.str.4475, i64 3846, i64 0, i64 %t93) + unreachable +inrange6959: + %t95 = extractvalue { ptr, i64, i64 } %t92, 0 + %t96 = getelementptr inbounds %S.ast.Node, ptr %t95, i64 0 + %t97 = load %S.ast.Node, ptr %t96 + %t98 = call i64 @finch.gen.sumNamed(ptr %t90, %S.ast.Node %t97) + %t99 = load i64, ptr %a3 + %t100 = icmp eq i64 %t98, %t99 + br label %logic.rend6960 +logic.rend6960: + br label %logic.end6957 +logic.end6957: + %t101 = phi i1 [ false, %logic.from6955 ], [ %t100, %logic.rend6960 ] + br i1 %t101, label %then6961, label %else6962 +then6961: + %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t103 = load { ptr, i64, i64 }, ptr %t102 + store { ptr, i64, i64 } %t103, ptr %a104 + call void @finch_str_copy(ptr %a105, ptr %a104) + %t106 = load { ptr, i64, i64 }, ptr %a105 + %t107 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t106, ptr %a18 + store { ptr, i64, i64 } %t107, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %t109, i32 0, i32 1 + %t111 = load i64, ptr %t110 + store i64 1, ptr %a112 + br label %for.cond6964 +for.cond6964: + %t113 = load i64, ptr %a112 + %t114 = icmp slt i64 %t113, %t111 + br i1 %t114, label %for.body6965, label %for.end6967 +for.body6965: + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t116 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t117 = load i64, ptr %a112 + %t118 = load { ptr, i64, i64 }, ptr %t116 + %t119 = extractvalue { ptr, i64, i64 } %t118, 1 + %t120 = icmp uge i64 %t117, %t119 + br i1 %t120, label %range6968, label %inrange6969 +range6968: + call void @finch_panic_index(ptr @.str.4476, i64 3849, i64 %t117, i64 %t119) + unreachable +inrange6969: + %t121 = extractvalue { ptr, i64, i64 } %t118, 0 + %t122 = getelementptr inbounds %S.ast.Node, ptr %t121, i64 %t117 + %t123 = load %S.ast.Node, ptr %t122 + store %S.ast.Node %t123, ptr %a124 + call void @finch.copy.S_ast_Node(ptr %a125, ptr %a124) + %t126 = load %S.ast.Node, ptr %a125 + %t127 = load i64, ptr %t115 + %t128 = add i64 %t127, 1 + call void @finch_arr_reserve(ptr %a19, i64 %t128, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t129 = load ptr, ptr %a19 + %t130 = getelementptr inbounds %S.ast.Node, ptr %t129, i64 %t127 + store %S.ast.Node %t126, ptr %t130 + store i64 %t128, ptr %t115 + br label %for.step6966 +for.step6966: + %t131 = load i64, ptr %a112 + %t132 = add i64 %t131, 1 + store i64 %t132, ptr %a112 + br label %for.cond6964 +for.end6967: + br label %endif6963 +else6962: + %t133 = load ptr, ptr %a1 + %t134 = load %S.ast.Node, ptr %a2 + %t135 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 1 + %t136 = load { ptr, i64, i64 }, ptr %t135 + store { ptr, i64, i64 } { ptr @.str.4477, i64 33, i64 0 }, ptr %a138 + store { ptr, i64, i64 } %t136, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + %t140 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t140, ptr %a142 + store { ptr, i64, i64 } { ptr @.str.4478, i64 10, i64 0 }, ptr %a143 + call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) + store { ptr, i64, i64 } %t140, ptr %a144 + call void @finch_str_drop(ptr %a144) + %t145 = load { ptr, i64, i64 }, ptr %a141 + %t146 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 2 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %t146, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4479, i64 2, i64 0 }, ptr %a148 + call void @finch_str_join(ptr %a149, ptr %t146, ptr %a148) + %t150 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t145, ptr %a152 + store { ptr, i64, i64 } %t150, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t145, ptr %a154 + call void @finch_str_drop(ptr %a154) + store { ptr, i64, i64 } %t150, ptr %a155 + call void @finch_str_drop(ptr %a155) + %t156 = load { ptr, i64, i64 }, ptr %a151 + store { ptr, i64, i64 } %t156, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.4480, i64 1, i64 0 }, ptr %a159 + call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) + store { ptr, i64, i64 } %t156, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a157 + call void @finch.gen.fail(ptr %t133, %S.ast.Node %t134, { ptr, i64, i64 } %t161) + store { ptr, i64, i64 } %t161, ptr %a162 + call void @finch_str_drop(ptr %a162) + br label %endif6963 +endif6963: + br label %endif6954 +endif6954: + br label %endif6945 +endif6945: + br label %endif6942 +endif6942: + %t163 = load ptr, ptr %a1 + %t164 = load i64, ptr %a3 + %t165 = load { ptr, i64, i64 }, ptr %a18 + %t166 = load %S.ast.Node, ptr %a2 + %t167 = call i64 @finch.gen.sumVariant(ptr %t163, i64 %t164, { ptr, i64, i64 } %t165, %S.ast.Node %t166) + store i64 %t167, ptr %a168 + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 + %t172 = load i64, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %t171 + %t174 = extractvalue { ptr, i64, i64 } %t173, 1 + %t175 = icmp uge i64 %t172, %t174 + br i1 %t175, label %range6970, label %inrange6971 +range6970: + call void @finch_panic_index(ptr @.str.4481, i64 3855, i64 %t172, i64 %t174) + unreachable +inrange6971: + %t176 = extractvalue { ptr, i64, i64 } %t173, 0 + %t177 = getelementptr inbounds i64, ptr %t176, i64 %t172 + %t178 = load i64, ptr %t177 + %t179 = icmp ne i64 %t170, %t178 + br i1 %t179, label %then6972, label %endif6974 +then6972: + %t180 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 + %t181 = load i64, ptr %a168 + %t182 = load { ptr, i64, i64 }, ptr %t180 + %t183 = extractvalue { ptr, i64, i64 } %t182, 1 + %t184 = icmp uge i64 %t181, %t183 + br i1 %t184, label %range6975, label %inrange6976 +range6975: + call void @finch_panic_index(ptr @.str.4482, i64 3856, i64 %t181, i64 %t183) + unreachable +inrange6976: + %t185 = extractvalue { ptr, i64, i64 } %t182, 0 + %t186 = getelementptr inbounds i64, ptr %t185, i64 %t181 + %t187 = load i64, ptr %t186 + %t188 = icmp eq i64 %t187, 0 + br i1 %t188, label %then6977, label %endif6979 +then6977: + %t189 = load ptr, ptr %a1 + %t190 = load %S.ast.Node, ptr %a2 + %t191 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t191, ptr %a193 + store { ptr, i64, i64 } { ptr @.str.4483, i64 27, i64 0 }, ptr %a194 + call void @finch_str_concat(ptr %a192, ptr %a193, ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a192 + %t196 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t195, ptr %a198 + store { ptr, i64, i64 } %t196, ptr %a199 + call void @finch_str_concat(ptr %a197, ptr %a198, ptr %a199) + store { ptr, i64, i64 } %t195, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load { ptr, i64, i64 }, ptr %a197 + call void @finch.gen.fail(ptr %t189, %S.ast.Node %t190, { ptr, i64, i64 } %t201) + store { ptr, i64, i64 } %t201, ptr %a202 + call void @finch_str_drop(ptr %a202) + br label %endif6979 +endif6979: + %t203 = load ptr, ptr %a1 + %t204 = load %S.ast.Node, ptr %a2 + %t205 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t205, ptr %a207 + store { ptr, i64, i64 } { ptr @.str.4484, i64 7, i64 0 }, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + %t209 = load { ptr, i64, i64 }, ptr %a206 + %t210 = getelementptr inbounds %S.gen.SumDef, ptr %a17, i32 0, i32 3 + %t211 = load i64, ptr %a168 + %t212 = load { ptr, i64, i64 }, ptr %t210 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 %t211, %t213 + br i1 %t214, label %range6980, label %inrange6981 +range6980: + call void @finch_panic_index(ptr @.str.4485, i64 3859, i64 %t211, i64 %t213) + unreachable +inrange6981: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds i64, ptr %t215, i64 %t211 + %t217 = load i64, ptr %t216 + call void @finch_str_from_int(ptr %a218, i64 %t217) + %t219 = load { ptr, i64, i64 }, ptr %a218 + store { ptr, i64, i64 } %t209, ptr %a221 + store { ptr, i64, i64 } %t219, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + store { ptr, i64, i64 } %t209, ptr %a223 + call void @finch_str_drop(ptr %a223) + store { ptr, i64, i64 } %t219, ptr %a224 + call void @finch_str_drop(ptr %a224) + %t225 = load { ptr, i64, i64 }, ptr %a220 + store { ptr, i64, i64 } %t225, ptr %a227 + store { ptr, i64, i64 } { ptr @.str.4486, i64 27, i64 0 }, ptr %a228 + call void @finch_str_concat(ptr %a226, ptr %a227, ptr %a228) + store { ptr, i64, i64 } %t225, ptr %a229 + call void @finch_str_drop(ptr %a229) + %t230 = load { ptr, i64, i64 }, ptr %a226 + %t231 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t230, ptr %a233 + store { ptr, i64, i64 } %t231, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t230, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t236, ptr %a238 + store { ptr, i64, i64 } { ptr @.str.4487, i64 27, i64 0 }, ptr %a239 + call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) + store { ptr, i64, i64 } %t236, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = load { ptr, i64, i64 }, ptr %a237 + call void @finch.gen.fail(ptr %t203, %S.ast.Node %t204, { ptr, i64, i64 } %t241) + store { ptr, i64, i64 } %t241, ptr %a242 + call void @finch_str_drop(ptr %a242) + br label %endif6974 +endif6974: + store i64 0, ptr %a243 + br label %each.cond6982 +each.cond6982: + %t244 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t245 = load i64, ptr %t244 + %t246 = load i64, ptr %a243 + %t247 = icmp slt i64 %t246, %t245 + br i1 %t247, label %each.body6983, label %each.end6985 +each.body6983: + %t248 = load ptr, ptr %a19 + %t249 = getelementptr inbounds %S.ast.Node, ptr %t248, i64 %t246 + %t250 = load %S.ast.Node, ptr %t249 + store %S.ast.Node %t250, ptr %a251 + %t252 = getelementptr inbounds %S.ast.Node, ptr %a251, i32 0, i32 0 + %t253 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t253, ptr %a254 + store { ptr, i64, i64 } { ptr @.str.4488, i64 3, i64 0 }, ptr %a255 + %t256 = call i32 @finch_str_eq(ptr %a254, ptr %a255) + %t257 = icmp eq i32 %t256, 0 + br i1 %t257, label %then6986, label %endif6988 +then6986: + %t258 = load ptr, ptr %a1 + %t259 = load %S.ast.Node, ptr %a251 + call void @finch.gen.fail(ptr %t258, %S.ast.Node %t259, { ptr, i64, i64 } { ptr @.str.4489, i64 50, i64 0 }) + br label %endif6988 +endif6988: + br label %each.step6984 +each.step6984: + %t260 = load i64, ptr %a243 + %t261 = add i64 %t260, 1 + store i64 %t261, ptr %a243 + br label %each.cond6982 +each.end6985: + %t262 = load i64, ptr %a168 + %t263 = insertvalue %S.gen.SumPat zeroinitializer, i64 %t262, 0 + %t264 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t264, ptr %a265 + call void @finch.copy.arr_S_ast_Node(ptr %a266, ptr %a265) + %t267 = load { ptr, i64, i64 }, ptr %a266 + %t268 = insertvalue %S.gen.SumPat %t263, { ptr, i64, i64 } %t267, 1 + call void @finch.drop.arr_S_ast_Node(ptr %a19) + call void @finch_str_drop(ptr %a18) + call void @finch.drop.S_gen_SumDef(ptr %a17) + ret %S.gen.SumPat %t268 +} + +define internal %S.gen.Val @finch.gen.enumValue(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a14 = alloca %S.gen.EnumDef, align 16 + %a15 = alloca %S.gen.EnumDef, align 16 + %a17 = alloca %S.gen.EnumDef, align 16 + %a22 = alloca i64, align 16 + %a25 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca i64, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic6989, label %ok6990 +panic6989: + call void @finch_panic(ptr @.str.4490, i64 3871, ptr @.str.4491) + unreachable +ok6990: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 + %t7 = load i64, ptr %a3 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range6991, label %inrange6992 +range6991: + call void @finch_panic_index(ptr @.str.4492, i64 3871, i64 %t7, i64 %t9) + unreachable +inrange6992: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 + %t13 = load %S.gen.EnumDef, ptr %t12 + store %S.gen.EnumDef %t13, ptr %a14 + call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) + %t16 = load %S.gen.EnumDef, ptr %a15 + store %S.gen.EnumDef %t16, ptr %a17 + %t18 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i32 0, i32 1 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store i64 -1, ptr %a22 + %t23 = load i64, ptr %t19 + %t24 = load ptr, ptr %t18 + store i64 0, ptr %a25 + br label %find.cond6993 +find.cond6993: + %t26 = load i64, ptr %a25 + %t27 = icmp slt i64 %t26, %t23 + br i1 %t27, label %find.body6994, label %find.end6997 +find.body6994: + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t26 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } %t21, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br i1 %t33, label %find.hit6995, label %find.next6996 +find.hit6995: + store i64 %t26, ptr %a22 + br label %find.end6997 +find.next6996: + %t34 = add i64 %t26, 1 + store i64 %t34, ptr %a25 + br label %find.cond6993 +find.end6997: + %t35 = load i64, ptr %a22 + store i64 %t35, ptr %a36 + %t37 = load i64, ptr %a36 + %t38 = icmp slt i64 %t37, 0 + br i1 %t38, label %then6998, label %endif7000 +then6998: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a2 + %t41 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t42 = load { ptr, i64, i64 }, ptr %t41 + store { ptr, i64, i64 } { ptr @.str.4493, i64 9, i64 0 }, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t46, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.4494, i64 17, i64 0 }, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + %t52 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t51, ptr %a55 + store { ptr, i64, i64 } %t53, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t51, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t58, ptr %a60 + store { ptr, i64, i64 } { ptr @.str.4495, i64 11, i64 0 }, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + %t64 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 2 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4496, i64 2, i64 0 }, ptr %a66 + call void @finch_str_join(ptr %a67, ptr %t64, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t63, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t63, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t68, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t74, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.4497, i64 1, i64 0 }, ptr %a77 + call void @finch_str_concat(ptr %a75, ptr %a76, ptr %a77) + store { ptr, i64, i64 } %t74, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } %t79) + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif7000 +endif7000: + %t81 = load ptr, ptr %a1 + %t82 = load %S.ast.Node, ptr %a2 + %t83 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t84 = load i64, ptr %t83 + %t85 = add i64 %t84, 1 + %t86 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load i64, ptr %t87 + %t89 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t90 = load { ptr, i64, i64 }, ptr %t89 + store { ptr, i64, i64 } { ptr @.str.4498, i64 9, i64 0 }, ptr %a92 + store { ptr, i64, i64 } %t90, ptr %a93 + call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a91 + store { ptr, i64, i64 } %t94, ptr %a96 + store { ptr, i64, i64 } { ptr @.str.4499, i64 1, i64 0 }, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_drop(ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a95 + %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t101 = load { ptr, i64, i64 }, ptr %t100 + store { ptr, i64, i64 } %t99, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t99, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.4500, i64 3, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t113 = load i64, ptr %a36 + %t114 = load { ptr, i64, i64 }, ptr %t112 + %t115 = extractvalue { ptr, i64, i64 } %t114, 1 + %t116 = icmp uge i64 %t113, %t115 + br i1 %t116, label %range7001, label %inrange7002 +range7001: + call void @finch_panic_index(ptr @.str.4501, i64 3876, i64 %t113, i64 %t115) + unreachable +inrange7002: + %t117 = extractvalue { ptr, i64, i64 } %t114, 0 + %t118 = getelementptr inbounds i64, ptr %t117, i64 %t113 + %t119 = load i64, ptr %t118 + call void @finch_str_from_int(ptr %a120, i64 %t119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t111, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t111, ptr %a125 + call void @finch_str_drop(ptr %a125) + store { ptr, i64, i64 } %t121, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t127, ptr %a129 + store { ptr, i64, i64 } { ptr @.str.4502, i64 4, i64 0 }, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t127, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + call void @finch.gen.noteRef(ptr %t81, %S.ast.Node %t82, i64 %t85, i64 %t88, { ptr, i64, i64 } %t132, { ptr, i64, i64 } { ptr @.str.4503, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t132, ptr %a133 + call void @finch_str_drop(ptr %a133) + %t134 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t135 = load i64, ptr %a36 + %t136 = load { ptr, i64, i64 }, ptr %t134 + %t137 = extractvalue { ptr, i64, i64 } %t136, 1 + %t138 = icmp uge i64 %t135, %t137 + br i1 %t138, label %range7003, label %inrange7004 +range7003: + call void @finch_panic_index(ptr @.str.4504, i64 3877, i64 %t135, i64 %t137) + unreachable +inrange7004: + %t139 = extractvalue { ptr, i64, i64 } %t136, 0 + %t140 = getelementptr inbounds i64, ptr %t139, i64 %t135 + %t141 = load i64, ptr %t140 + call void @finch_str_from_int(ptr %a142, i64 %t141) + %t143 = load { ptr, i64, i64 }, ptr %a142 + %t144 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t143, 0 + %t145 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4505, i64 4, i64 0 }, 0 + %t146 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t147 = load { ptr, i64, i64 }, ptr %t146 + store { ptr, i64, i64 } %t147, ptr %a148 + call void @finch_str_copy(ptr %a149, ptr %a148) + %t150 = load { ptr, i64, i64 }, ptr %a149 + %t151 = insertvalue %S.ast.Type %t145, { ptr, i64, i64 } %t150, 2 + %t152 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 + %t153 = load { ptr, i64, i64 }, ptr %t152 + store { ptr, i64, i64 } %t153, ptr %a154 + call void @finch_str_copy(ptr %a155, ptr %a154) + %t156 = load { ptr, i64, i64 }, ptr %a155 + %t157 = insertvalue %S.ast.Type %t151, { ptr, i64, i64 } %t156, 3 + %t158 = insertvalue %S.gen.Val %t144, %S.ast.Type %t157, 1 + call void @finch.drop.S_gen_EnumDef(ptr %a17) + ret %S.gen.Val %t158 +} + +define internal %S.gen.Ref @finch.gen.member(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a13 = alloca i64, align 16 + %a25 = alloca i64, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca i64, align 16 + %a157 = alloca %S.gen.Ref, align 16 + %a161 = alloca %S.ast.Type, align 16 + %a162 = alloca %S.ast.Type, align 16 + %a164 = alloca %S.ast.Type, align 16 + %a170 = alloca %S.ast.Type, align 16 + %a171 = alloca %S.ast.Type, align 16 + %a174 = alloca %S.ast.Type, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca %S.ast.Type, align 16 + %a239 = alloca %S.ast.Type, align 16 + %a241 = alloca %S.ast.Type, align 16 + %a242 = alloca i1, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca i64, align 16 + %a268 = alloca i64, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca %S.ast.Type, align 16 + %a297 = alloca %S.ast.Type, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca %S.ast.Type, align 16 + %a330 = alloca %S.ast.Type, align 16 + %a335 = alloca %S.gen.Ref, align 16 + %a337 = alloca %S.ast.Type, align 16 + %a338 = alloca %S.ast.Type, align 16 + %a341 = alloca %S.ast.Type, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca %S.ast.Type, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a613 = alloca { ptr, i64, i64 }, align 16 + %a614 = alloca { ptr, i64, i64 }, align 16 + %a616 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a618 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca %S.gen.StructDef, align 16 + %a693 = alloca %S.gen.StructDef, align 16 + %a695 = alloca %S.gen.StructDef, align 16 + %a700 = alloca i64, align 16 + %a703 = alloca i64, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca i64, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a746 = alloca { ptr, i64, i64 }, align 16 + %a748 = alloca { ptr, i64, i64 }, align 16 + %a749 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca %S.ast.Type, align 16 + %a769 = alloca %S.ast.Type, align 16 + %a771 = alloca %S.ast.Type, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca { ptr, i64, i64 }, align 16 + %a813 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a817 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a832 = alloca { ptr, i64, i64 }, align 16 + %a842 = alloca { ptr, i64, i64 }, align 16 + %a844 = alloca { ptr, i64, i64 }, align 16 + %a845 = alloca { ptr, i64, i64 }, align 16 + %a846 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a852 = alloca { ptr, i64, i64 }, align 16 + %a855 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca { ptr, i64, i64 }, align 16 + %a860 = alloca %S.ast.Type, align 16 + %a861 = alloca %S.ast.Type, align 16 + %a869 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a871 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a882 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a885 = alloca { ptr, i64, i64 }, align 16 + %a887 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca { ptr, i64, i64 }, align 16 + %a900 = alloca { ptr, i64, i64 }, align 16 + %a902 = alloca { ptr, i64, i64 }, align 16 + %a903 = alloca { ptr, i64, i64 }, align 16 + %a904 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a912 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a917 = alloca %S.ast.Type, align 16 + %a918 = alloca %S.ast.Type, align 16 + %a921 = alloca %S.gen.Val, align 16 + %a935 = alloca %S.ast.Type, align 16 + %a936 = alloca %S.ast.Type, align 16 + %a941 = alloca %S.gen.Val, align 16 + %a947 = alloca %S.gen.Val, align 16 + %a948 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range7005, label %inrange7006 +range7005: + call void @finch_panic_index(ptr @.str.4506, i64 3881, i64 0, i64 %t7) + unreachable +inrange7006: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = call i64 @finch.gen.sumNamed(ptr %t4, %S.ast.Node %t11) + store i64 %t12, ptr %a13 + %t14 = load i64, ptr %a13 + %t15 = icmp sge i64 %t14, 0 + br i1 %t15, label %then7007, label %endif7009 +then7007: + %t16 = load i1, ptr %a3 + br i1 %t16, label %then7010, label %endif7012 +then7010: + %t17 = load ptr, ptr %a1 + %t18 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t17, %S.ast.Node %t18, { ptr, i64, i64 } { ptr @.str.4507, i64 37, i64 0 }) + br label %endif7012 +endif7012: + %t19 = load ptr, ptr %a1 + %t20 = load i64, ptr %a13 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %t21 + %t23 = load %S.ast.Node, ptr %a2 + %t24 = call i64 @finch.gen.sumVariant(ptr %t19, i64 %t20, { ptr, i64, i64 } %t22, %S.ast.Node %t23) + store i64 %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic7013, label %ok7014 +panic7013: + call void @finch_panic(ptr @.str.4508, i64 3887, ptr @.str.4509) + unreachable +ok7014: + %t28 = getelementptr inbounds %S.gen.Gen, ptr %t26, i32 0, i32 22 + %t29 = load i64, ptr %a13 + %t30 = load { ptr, i64, i64 }, ptr %t28 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 %t29, %t31 + br i1 %t32, label %range7015, label %inrange7016 +range7015: + call void @finch_panic_index(ptr @.str.4510, i64 3887, i64 %t29, i64 %t31) + unreachable +inrange7016: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.gen.SumDef, ptr %t33, i64 %t29 + %t35 = getelementptr inbounds %S.gen.SumDef, ptr %t34, i32 0, i32 3 + %t36 = load i64, ptr %a25 + %t37 = load { ptr, i64, i64 }, ptr %t35 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range7017, label %inrange7018 +range7017: + call void @finch_panic_index(ptr @.str.4511, i64 3887, i64 %t36, i64 %t38) + unreachable +inrange7018: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds i64, ptr %t40, i64 %t36 + %t42 = load i64, ptr %t41 + %t43 = icmp sgt i64 %t42, 0 + br i1 %t43, label %then7019, label %endif7021 +then7019: + %t44 = load ptr, ptr %a1 + %t45 = load %S.ast.Node, ptr %a2 + %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t47 = load { ptr, i64, i64 }, ptr %t46 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.4512, i64 7, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a48 + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic7022, label %ok7023 +panic7022: + call void @finch_panic(ptr @.str.4513, i64 3888, ptr @.str.4514) + unreachable +ok7023: + %t54 = getelementptr inbounds %S.gen.Gen, ptr %t52, i32 0, i32 22 + %t55 = load i64, ptr %a13 + %t56 = load { ptr, i64, i64 }, ptr %t54 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 %t55, %t57 + br i1 %t58, label %range7024, label %inrange7025 +range7024: + call void @finch_panic_index(ptr @.str.4515, i64 3888, i64 %t55, i64 %t57) + unreachable +inrange7025: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds %S.gen.SumDef, ptr %t59, i64 %t55 + %t61 = getelementptr inbounds %S.gen.SumDef, ptr %t60, i32 0, i32 3 + %t62 = load i64, ptr %a25 + %t63 = load { ptr, i64, i64 }, ptr %t61 + %t64 = extractvalue { ptr, i64, i64 } %t63, 1 + %t65 = icmp uge i64 %t62, %t64 + br i1 %t65, label %range7026, label %inrange7027 +range7026: + call void @finch_panic_index(ptr @.str.4516, i64 3888, i64 %t62, i64 %t64) + unreachable +inrange7027: + %t66 = extractvalue { ptr, i64, i64 } %t63, 0 + %t67 = getelementptr inbounds i64, ptr %t66, i64 %t62 + %t68 = load i64, ptr %t67 + call void @finch_str_from_int(ptr %a69, i64 %t68) + %t70 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t51, ptr %a72 + store { ptr, i64, i64 } %t70, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t51, ptr %a74 + call void @finch_str_drop(ptr %a74) + store { ptr, i64, i64 } %t70, ptr %a75 + call void @finch_str_drop(ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t76, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.4517, i64 11, i64 0 }, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + store { ptr, i64, i64 } %t76, ptr %a80 + call void @finch_str_drop(ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a77 + %t82 = load ptr, ptr %a1 + %t83 = icmp eq ptr %t82, null + br i1 %t83, label %panic7028, label %ok7029 +panic7028: + call void @finch_panic(ptr @.str.4518, i64 3888, ptr @.str.4519) + unreachable +ok7029: + %t84 = getelementptr inbounds %S.gen.Gen, ptr %t82, i32 0, i32 22 + %t85 = load i64, ptr %a13 + %t86 = load { ptr, i64, i64 }, ptr %t84 + %t87 = extractvalue { ptr, i64, i64 } %t86, 1 + %t88 = icmp uge i64 %t85, %t87 + br i1 %t88, label %range7030, label %inrange7031 +range7030: + call void @finch_panic_index(ptr @.str.4520, i64 3888, i64 %t85, i64 %t87) + unreachable +inrange7031: + %t89 = extractvalue { ptr, i64, i64 } %t86, 0 + %t90 = getelementptr inbounds %S.gen.SumDef, ptr %t89, i64 %t85 + %t91 = getelementptr inbounds %S.gen.SumDef, ptr %t90, i32 0, i32 1 + %t92 = load { ptr, i64, i64 }, ptr %t91 + store { ptr, i64, i64 } %t81, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t81, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.4521, i64 1, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.4522, i64 5, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + store { ptr, i64, i64 } %t109, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a110 + call void @finch.gen.fail(ptr %t44, %S.ast.Node %t45, { ptr, i64, i64 } %t114) + store { ptr, i64, i64 } %t114, ptr %a115 + call void @finch_str_drop(ptr %a115) + br label %endif7021 +endif7021: + store { ptr, i64, i64 } zeroinitializer, ptr %a116 + %t117 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t118 = load ptr, ptr %a1 + %t119 = load i64, ptr %a13 + %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %t120 + %t122 = load { ptr, i64, i64 }, ptr %a116 + %t123 = load %S.ast.Node, ptr %a2 + %t124 = call %S.gen.Val @finch.gen.sumMake(ptr %t118, i64 %t119, { ptr, i64, i64 } %t121, { ptr, i64, i64 } %t122, %S.ast.Node %t123) + %t125 = insertvalue %S.gen.Ref %t117, %S.gen.Val %t124, 2 + call void @finch.drop.arr_S_ast_Node(ptr %a116) + ret %S.gen.Ref %t125 +endif7009: + %t126 = load ptr, ptr %a1 + %t127 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t128 = load { ptr, i64, i64 }, ptr %t127 + %t129 = extractvalue { ptr, i64, i64 } %t128, 1 + %t130 = icmp uge i64 0, %t129 + br i1 %t130, label %range7032, label %inrange7033 +range7032: + call void @finch_panic_index(ptr @.str.4523, i64 3893, i64 0, i64 %t129) + unreachable +inrange7033: + %t131 = extractvalue { ptr, i64, i64 } %t128, 0 + %t132 = getelementptr inbounds %S.ast.Node, ptr %t131, i64 0 + %t133 = load %S.ast.Node, ptr %t132 + %t134 = call i64 @finch.gen.enumNamed(ptr %t126, %S.ast.Node %t133) + store i64 %t134, ptr %a135 + %t136 = load i64, ptr %a135 + %t137 = icmp sge i64 %t136, 0 + br i1 %t137, label %then7034, label %endif7036 +then7034: + %t138 = load i1, ptr %a3 + br i1 %t138, label %then7037, label %endif7039 +then7037: + %t139 = load ptr, ptr %a1 + %t140 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t139, %S.ast.Node %t140, { ptr, i64, i64 } { ptr @.str.4524, i64 37, i64 0 }) + br label %endif7039 +endif7039: + %t141 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t142 = load ptr, ptr %a1 + %t143 = load %S.ast.Node, ptr %a2 + %t144 = load i64, ptr %a135 + %t145 = call %S.gen.Val @finch.gen.enumValue(ptr %t142, %S.ast.Node %t143, i64 %t144) + %t146 = insertvalue %S.gen.Ref %t141, %S.gen.Val %t145, 2 + ret %S.gen.Ref %t146 +endif7036: + %t147 = load ptr, ptr %a1 + %t148 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t149 = load { ptr, i64, i64 }, ptr %t148 + %t150 = extractvalue { ptr, i64, i64 } %t149, 1 + %t151 = icmp uge i64 0, %t150 + br i1 %t151, label %range7040, label %inrange7041 +range7040: + call void @finch_panic_index(ptr @.str.4525, i64 3900, i64 0, i64 %t150) + unreachable +inrange7041: + %t152 = extractvalue { ptr, i64, i64 } %t149, 0 + %t153 = getelementptr inbounds %S.ast.Node, ptr %t152, i64 0 + %t154 = load %S.ast.Node, ptr %t153 + %t155 = load i1, ptr %a3 + %t156 = call %S.gen.Ref @finch.gen.ref(ptr %t147, %S.ast.Node %t154, i1 %t155) + store %S.gen.Ref %t156, ptr %a157 + %t158 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t159 = getelementptr inbounds %S.gen.Val, ptr %t158, i32 0, i32 1 + %t160 = load %S.ast.Type, ptr %t159 + store %S.ast.Type %t160, ptr %a161 + call void @finch.copy.S_ast_Type(ptr %a162, ptr %a161) + %t163 = load %S.ast.Type, ptr %a162 + store %S.ast.Type %t163, ptr %a164 + %t165 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t166 = load i1, ptr %t165 + br i1 %t166, label %then7042, label %endif7044 +then7042: + %t167 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t168 = getelementptr inbounds %S.gen.Place, ptr %t167, i32 0, i32 1 + %t169 = load %S.ast.Type, ptr %t168 + store %S.ast.Type %t169, ptr %a170 + call void @finch.copy.S_ast_Type(ptr %a171, ptr %a170) + %t172 = load %S.ast.Type, ptr %a171 + %t173 = load %S.ast.Type, ptr %a164 + store %S.ast.Type %t172, ptr %a164 + store %S.ast.Type %t173, ptr %a174 + call void @finch.drop.S_ast_Type(ptr %a174) + br label %endif7044 +endif7044: + %t175 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t176 = load { ptr, i64, i64 }, ptr %t175 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.4526, i64 3, i64 0 }, ptr %a178 + %t179 = call i32 @finch_str_eq(ptr %a177, ptr %a178) + %t180 = icmp ne i32 %t179, 0 + br i1 %t180, label %then7045, label %endif7047 +then7045: + %t181 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t182 = getelementptr inbounds %S.gen.Val, ptr %t181, i32 0, i32 0 + %t183 = load { ptr, i64, i64 }, ptr %t182 + store { ptr, i64, i64 } %t183, ptr %a184 + call void @finch_str_copy(ptr %a185, ptr %a184) + %t186 = load { ptr, i64, i64 }, ptr %a185 + store { ptr, i64, i64 } %t186, ptr %a187 + %t188 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t189 = load i1, ptr %t188 + br i1 %t189, label %then7048, label %endif7050 +then7048: + %t190 = load ptr, ptr %a1 + %t191 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t192 = getelementptr inbounds %S.gen.Place, ptr %t191, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + %t194 = call { ptr, i64, i64 } @finch.gen.load(ptr %t190, { ptr, i64, i64 } { ptr @.str.4527, i64 3, i64 0 }, { ptr, i64, i64 } %t193) + %t195 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t194, ptr %a187 + store { ptr, i64, i64 } %t195, ptr %a196 + call void @finch_str_drop(ptr %a196) + br label %endif7050 +endif7050: + %t197 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 + %t199 = load i64, ptr %t198 + %t200 = icmp eq i64 %t199, 0 + br i1 %t200, label %then7051, label %endif7053 +then7051: + %t201 = load ptr, ptr %a1 + %t202 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t201, %S.ast.Node %t202, { ptr, i64, i64 } { ptr @.str.4528, i64 57, i64 0 }) + br label %endif7053 +endif7053: + %t203 = load ptr, ptr %a1 + %t204 = load ptr, ptr %a1 + %t205 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.4529, i64 12, i64 0 }, ptr %a207 + store { ptr, i64, i64 } %t205, ptr %a208 + call void @finch_str_concat(ptr %a206, ptr %a207, ptr %a208) + %t209 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t209, ptr %a211 + store { ptr, i64, i64 } { ptr @.str.4530, i64 6, i64 0 }, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t209, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + %t215 = call { ptr, i64, i64 } @finch.gen.op(ptr %t204, { ptr, i64, i64 } %t214) + store { ptr, i64, i64 } %t214, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t218 = load { ptr, i64, i64 }, ptr %t217 + store { ptr, i64, i64 } { ptr @.str.4531, i64 6, i64 0 }, ptr %a220 + store { ptr, i64, i64 } %t218, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.4532, i64 18, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t203, { ptr, i64, i64 } %t215, { ptr, i64, i64 } %t227, %S.ast.Node %t228) + store { ptr, i64, i64 } %t215, ptr %a229 + call void @finch_str_drop(ptr %a229) + store { ptr, i64, i64 } %t227, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t232 = load { ptr, i64, i64 }, ptr %t231 + %t233 = extractvalue { ptr, i64, i64 } %t232, 1 + %t234 = icmp uge i64 0, %t233 + br i1 %t234, label %range7054, label %inrange7055 +range7054: + call void @finch_panic_index(ptr @.str.4533, i64 3914, i64 0, i64 %t233) + unreachable +inrange7055: + %t235 = extractvalue { ptr, i64, i64 } %t232, 0 + %t236 = getelementptr inbounds %S.ast.Type, ptr %t235, i64 0 + %t237 = load %S.ast.Type, ptr %t236 + store %S.ast.Type %t237, ptr %a238 + call void @finch.copy.S_ast_Type(ptr %a239, ptr %a238) + %t240 = load %S.ast.Type, ptr %a239 + store %S.ast.Type %t240, ptr %a241 + store i1 false, ptr %a242 + %t243 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 + %t244 = load { ptr, i64, i64 }, ptr %t243 + store { ptr, i64, i64 } %t244, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.4534, i64 6, i64 0 }, ptr %a246 + %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) + %t248 = icmp ne i32 %t247, 0 + br i1 %t248, label %then7056, label %endif7058 +then7056: + %t249 = load ptr, ptr %a1 + %t250 = icmp eq ptr %t249, null + br i1 %t250, label %panic7059, label %ok7060 +panic7059: + call void @finch_panic(ptr @.str.4535, i64 3917, ptr @.str.4536) + unreachable +ok7060: + %t251 = getelementptr inbounds %S.gen.Gen, ptr %t249, i32 0, i32 16 + %t252 = load ptr, ptr %a1 + %t253 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 3 + %t254 = load { ptr, i64, i64 }, ptr %t253 + %t255 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 2 + %t256 = load { ptr, i64, i64 }, ptr %t255 + %t257 = call i64 @finch.gen.findStruct(ptr %t252, { ptr, i64, i64 } %t254, { ptr, i64, i64 } %t256) + %t258 = load { ptr, i64, i64 }, ptr %t251 + %t259 = extractvalue { ptr, i64, i64 } %t258, 1 + %t260 = icmp uge i64 %t257, %t259 + br i1 %t260, label %range7061, label %inrange7062 +range7061: + call void @finch_panic_index(ptr @.str.4537, i64 3917, i64 %t257, i64 %t259) + unreachable +inrange7062: + %t261 = extractvalue { ptr, i64, i64 } %t258, 0 + %t262 = getelementptr inbounds %S.gen.StructDef, ptr %t261, i64 %t257 + %t263 = getelementptr inbounds %S.gen.StructDef, ptr %t262, i32 0, i32 11 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + store i64 -1, ptr %a265 + %t266 = load i64, ptr %t264 + %t267 = load ptr, ptr %t263 + store i64 0, ptr %a268 + br label %find.cond7063 +find.cond7063: + %t269 = load i64, ptr %a268 + %t270 = icmp slt i64 %t269, %t266 + br i1 %t270, label %find.body7064, label %find.end7067 +find.body7064: + %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t267, i64 %t269 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } %t272, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.4538, i64 5, i64 0 }, ptr %a274 + %t275 = call i32 @finch_str_eq(ptr %a273, ptr %a274) + %t276 = icmp ne i32 %t275, 0 + br i1 %t276, label %find.hit7065, label %find.next7066 +find.hit7065: + store i64 %t269, ptr %a265 + br label %find.end7067 +find.next7066: + %t277 = add i64 %t269, 1 + store i64 %t277, ptr %a268 + br label %find.cond7063 +find.end7067: + %t278 = load i64, ptr %a265 + %t279 = icmp sge i64 %t278, 0 + store i1 %t279, ptr %a242 + br label %endif7058 +endif7058: + %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t281 = load { ptr, i64, i64 }, ptr %t280 + store { ptr, i64, i64 } %t281, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.4539, i64 5, i64 0 }, ptr %a283 + %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) + %t285 = icmp ne i32 %t284, 0 + br label %logic.from7068 +logic.from7068: + br i1 %t285, label %logic.rhs7069, label %logic.end7070 +logic.rhs7069: + %t286 = load i1, ptr %a242 + %t287 = xor i1 %t286, true + br label %logic.rend7071 +logic.rend7071: + br label %logic.end7070 +logic.end7070: + %t288 = phi i1 [ false, %logic.from7068 ], [ %t287, %logic.rend7071 ] + br i1 %t288, label %then7072, label %endif7074 +then7072: + %t289 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t290 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_copy(ptr %a292, ptr %a291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + %t294 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t293, 0 + %t295 = load %S.ast.Type, ptr %a241 + store %S.ast.Type %t295, ptr %a296 + call void @finch.copy.S_ast_Type(ptr %a297, ptr %a296) + %t298 = load %S.ast.Type, ptr %a297 + %t299 = insertvalue %S.gen.Place %t294, %S.ast.Type %t298, 1 + %t300 = insertvalue %S.gen.Ref %t289, %S.gen.Place %t299, 1 + call void @finch.drop.S_ast_Type(ptr %a241) + call void @finch_str_drop(ptr %a187) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t300 +endif7074: + %t301 = getelementptr inbounds %S.ast.Type, ptr %a241, i32 0, i32 0 + %t302 = load { ptr, i64, i64 }, ptr %t301 + store { ptr, i64, i64 } %t302, ptr %a303 + store { ptr, i64, i64 } { ptr @.str.4540, i64 6, i64 0 }, ptr %a304 + %t305 = call i32 @finch_str_eq(ptr %a303, ptr %a304) + %t306 = icmp eq i32 %t305, 0 + br i1 %t306, label %then7075, label %endif7077 +then7075: + %t307 = load ptr, ptr %a1 + %t308 = load %S.ast.Node, ptr %a2 + %t309 = load %S.ast.Type, ptr %a164 + %t310 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t309) + store { ptr, i64, i64 } { ptr @.str.4541, i64 2, i64 0 }, ptr %a312 + store { ptr, i64, i64 } %t310, ptr %a313 + call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) + store { ptr, i64, i64 } %t310, ptr %a314 + call void @finch_str_drop(ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a311 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.4542, i64 43, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + call void @finch.gen.fail(ptr %t307, %S.ast.Node %t308, { ptr, i64, i64 } %t320) + store { ptr, i64, i64 } %t320, ptr %a321 + call void @finch_str_drop(ptr %a321) + br label %endif7077 +endif7077: + %t322 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t323 = load { ptr, i64, i64 }, ptr %a187 + store { ptr, i64, i64 } %t323, ptr %a324 + call void @finch_str_copy(ptr %a325, ptr %a324) + %t326 = load { ptr, i64, i64 }, ptr %a325 + %t327 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t326, 0 + %t328 = load %S.ast.Type, ptr %a241 + store %S.ast.Type %t328, ptr %a329 + call void @finch.copy.S_ast_Type(ptr %a330, ptr %a329) + %t331 = load %S.ast.Type, ptr %a330 + %t332 = insertvalue %S.gen.Place %t327, %S.ast.Type %t331, 1 + %t333 = insertvalue %S.gen.Ref %t322, %S.gen.Place %t332, 1 + %t334 = load %S.gen.Ref, ptr %a157 + store %S.gen.Ref %t333, ptr %a157 + store %S.gen.Ref %t334, ptr %a335 + call void @finch.drop.S_gen_Ref(ptr %a335) + %t336 = load %S.ast.Type, ptr %a241 + store %S.ast.Type %t336, ptr %a337 + call void @finch.copy.S_ast_Type(ptr %a338, ptr %a337) + %t339 = load %S.ast.Type, ptr %a338 + %t340 = load %S.ast.Type, ptr %a164 + store %S.ast.Type %t339, ptr %a164 + store %S.ast.Type %t340, ptr %a341 + call void @finch.drop.S_ast_Type(ptr %a341) + call void @finch.drop.S_ast_Type(ptr %a241) + call void @finch_str_drop(ptr %a187) + br label %endif7047 +endif7047: + %t342 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t343 = load { ptr, i64, i64 }, ptr %t342 + store { ptr, i64, i64 } %t343, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.4543, i64 5, i64 0 }, ptr %a345 + %t346 = call i32 @finch_str_eq(ptr %a344, ptr %a345) + %t347 = icmp ne i32 %t346, 0 + br i1 %t347, label %then7078, label %endif7080 +then7078: + %t348 = load i1, ptr %a3 + br i1 %t348, label %then7081, label %endif7083 +then7081: + %t349 = load ptr, ptr %a1 + %t350 = load %S.ast.Node, ptr %a2 + %t351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t352 = load { ptr, i64, i64 }, ptr %t351 + store { ptr, i64, i64 } { ptr @.str.4544, i64 1, i64 0 }, ptr %a354 + store { ptr, i64, i64 } %t352, ptr %a355 + call void @finch_str_concat(ptr %a353, ptr %a354, ptr %a355) + %t356 = load { ptr, i64, i64 }, ptr %a353 + store { ptr, i64, i64 } %t356, ptr %a358 + store { ptr, i64, i64 } { ptr @.str.4545, i64 26, i64 0 }, ptr %a359 + call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) + store { ptr, i64, i64 } %t356, ptr %a360 + call void @finch_str_drop(ptr %a360) + %t361 = load { ptr, i64, i64 }, ptr %a357 + call void @finch.gen.fail(ptr %t349, %S.ast.Node %t350, { ptr, i64, i64 } %t361) + store { ptr, i64, i64 } %t361, ptr %a362 + call void @finch_str_drop(ptr %a362) + br label %endif7083 +endif7083: + %t363 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t364 = load { ptr, i64, i64 }, ptr %t363 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.4546, i64 3, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br i1 %t368, label %then7084, label %endif7086 +then7084: + %t369 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t370 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 4 + %t371 = load i64, ptr %t370 + call void @finch_str_from_int(ptr %a372, i64 %t371) + %t373 = load { ptr, i64, i64 }, ptr %a372 + %t374 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t373, 0 + %t375 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4547, i64 3, i64 0 }) + %t376 = insertvalue %S.gen.Val %t374, %S.ast.Type %t375, 1 + %t377 = insertvalue %S.gen.Val %t376, i1 true, 3 + %t378 = insertvalue %S.gen.Ref %t369, %S.gen.Val %t377, 2 + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t378 +endif7086: + %t379 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t380 = load { ptr, i64, i64 }, ptr %t379 + store { ptr, i64, i64 } %t380, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.4548, i64 3, i64 0 }, ptr %a382 + %t383 = call i32 @finch_str_eq(ptr %a381, ptr %a382) + %t384 = icmp eq i32 %t383, 0 + br i1 %t384, label %then7087, label %endif7089 +then7087: + %t385 = load ptr, ptr %a1 + %t386 = load %S.ast.Node, ptr %a2 + %t387 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t388 = load { ptr, i64, i64 }, ptr %t387 + store { ptr, i64, i64 } { ptr @.str.4549, i64 34, i64 0 }, ptr %a390 + store { ptr, i64, i64 } %t388, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a389 + store { ptr, i64, i64 } %t392, ptr %a394 + store { ptr, i64, i64 } { ptr @.str.4550, i64 1, i64 0 }, ptr %a395 + call void @finch_str_concat(ptr %a393, ptr %a394, ptr %a395) + store { ptr, i64, i64 } %t392, ptr %a396 + call void @finch_str_drop(ptr %a396) + %t397 = load { ptr, i64, i64 }, ptr %a393 + call void @finch.gen.fail(ptr %t385, %S.ast.Node %t386, { ptr, i64, i64 } %t397) + store { ptr, i64, i64 } %t397, ptr %a398 + call void @finch_str_drop(ptr %a398) + br label %endif7089 +endif7089: + %t399 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t400 = load i1, ptr %t399 + %t401 = xor i1 %t400, true + br i1 %t401, label %then7090, label %endif7092 +then7090: + %t402 = load ptr, ptr %a1 + %t403 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t402, %S.ast.Node %t403, { ptr, i64, i64 } { ptr @.str.4551, i64 48, i64 0 }) + br label %endif7092 +endif7092: + %t404 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t405 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t406 = getelementptr inbounds %S.gen.Place, ptr %t405, i32 0, i32 0 + %t407 = load { ptr, i64, i64 }, ptr %t406 + store { ptr, i64, i64 } %t407, ptr %a408 + call void @finch_str_copy(ptr %a409, ptr %a408) + %t410 = load { ptr, i64, i64 }, ptr %a409 + %t411 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t410, 0 + %t412 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t413 = load { ptr, i64, i64 }, ptr %t412 + %t414 = extractvalue { ptr, i64, i64 } %t413, 1 + %t415 = icmp uge i64 0, %t414 + br i1 %t415, label %range7093, label %inrange7094 +range7093: + call void @finch_panic_index(ptr @.str.4552, i64 3941, i64 0, i64 %t414) + unreachable +inrange7094: + %t416 = extractvalue { ptr, i64, i64 } %t413, 0 + %t417 = getelementptr inbounds %S.ast.Type, ptr %t416, i64 0 + %t418 = load %S.ast.Type, ptr %t417 + %t419 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t418) + %t420 = insertvalue %S.gen.Val %t411, %S.ast.Type %t419, 1 + %t421 = insertvalue %S.gen.Ref %t404, %S.gen.Val %t420, 2 + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t421 +endif7080: + %t422 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t423 = load { ptr, i64, i64 }, ptr %t422 + store { ptr, i64, i64 } %t423, ptr %a424 + store { ptr, i64, i64 } { ptr @.str.4553, i64 5, i64 0 }, ptr %a425 + %t426 = call i32 @finch_str_eq(ptr %a424, ptr %a425) + %t427 = icmp ne i32 %t426, 0 + br label %logic.from7095 +logic.from7095: + br i1 %t427, label %logic.end7097, label %logic.rhs7096 +logic.rhs7096: + %t428 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t429 = load { ptr, i64, i64 }, ptr %t428 + store { ptr, i64, i64 } %t429, ptr %a430 + store { ptr, i64, i64 } { ptr @.str.4554, i64 3, i64 0 }, ptr %a431 + %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) + %t433 = icmp ne i32 %t432, 0 + br label %logic.rend7098 +logic.rend7098: + br label %logic.end7097 +logic.end7097: + %t434 = phi i1 [ true, %logic.from7095 ], [ %t433, %logic.rend7098 ] + br label %logic.from7099 +logic.from7099: + br i1 %t434, label %logic.rhs7100, label %logic.end7101 +logic.rhs7100: + %t435 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t436 = load { ptr, i64, i64 }, ptr %t435 + store { ptr, i64, i64 } %t436, ptr %a437 + store { ptr, i64, i64 } { ptr @.str.4555, i64 3, i64 0 }, ptr %a438 + %t439 = call i32 @finch_str_eq(ptr %a437, ptr %a438) + %t440 = icmp ne i32 %t439, 0 + br label %logic.rend7102 +logic.rend7102: + br label %logic.end7101 +logic.end7101: + %t441 = phi i1 [ false, %logic.from7099 ], [ %t440, %logic.rend7102 ] + br i1 %t441, label %then7103, label %endif7105 +then7103: + %t442 = load i1, ptr %a3 + br i1 %t442, label %then7106, label %endif7108 +then7106: + %t443 = load ptr, ptr %a1 + %t444 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t443, %S.ast.Node %t444, { ptr, i64, i64 } { ptr @.str.4556, i64 30, i64 0 }) + br label %endif7108 +endif7108: + %t445 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t446 = load i1, ptr %t445 + %t447 = xor i1 %t446, true + br label %logic.from7109 +logic.from7109: + br i1 %t447, label %logic.rhs7110, label %logic.end7111 +logic.rhs7110: + %t448 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t449 = getelementptr inbounds %S.gen.Val, ptr %t448, i32 0, i32 2 + %t450 = load i1, ptr %t449 + br label %logic.rend7112 +logic.rend7112: + br label %logic.end7111 +logic.end7111: + %t451 = phi i1 [ false, %logic.from7109 ], [ %t450, %logic.rend7112 ] + br label %logic.from7113 +logic.from7113: + br i1 %t451, label %logic.rhs7114, label %logic.end7115 +logic.rhs7114: + %t452 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t453 = getelementptr inbounds %S.gen.Val, ptr %t452, i32 0, i32 0 + %t454 = load { ptr, i64, i64 }, ptr %t453 + store { ptr, i64, i64 } %t454, ptr %a455 + store { ptr, i64, i64 } { ptr @.str.4558, i64 1, i64 0 }, ptr %a457 + %t458 = call i32 @finch_str_starts(ptr %a455, ptr %a457) + %t459 = icmp ne i32 %t458, 0 + br label %logic.rend7116 +logic.rend7116: + br label %logic.end7115 +logic.end7115: + %t460 = phi i1 [ false, %logic.from7113 ], [ %t459, %logic.rend7116 ] + br i1 %t460, label %then7117, label %endif7119 +then7117: + %t461 = load ptr, ptr %a1 + %t462 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t461, %S.ast.Node %t462, { ptr, i64, i64 } { ptr @.str.4559, i64 53, i64 0 }) + br label %endif7119 +endif7119: + %t463 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t464 = getelementptr inbounds %S.gen.Val, ptr %t463, i32 0, i32 0 + %t465 = load { ptr, i64, i64 }, ptr %t464 + store { ptr, i64, i64 } %t465, ptr %a466 + call void @finch_str_copy(ptr %a467, ptr %a466) + %t468 = load { ptr, i64, i64 }, ptr %a467 + store { ptr, i64, i64 } %t468, ptr %a469 + %t470 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t471 = load i1, ptr %t470 + br i1 %t471, label %then7120, label %endif7122 +then7120: + %t472 = load ptr, ptr %a1 + %t473 = load ptr, ptr %a1 + %t474 = load %S.ast.Type, ptr %a164 + %t475 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t473, %S.ast.Type %t474) + %t476 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t477 = getelementptr inbounds %S.gen.Place, ptr %t476, i32 0, i32 0 + %t478 = load { ptr, i64, i64 }, ptr %t477 + %t479 = call { ptr, i64, i64 } @finch.gen.load(ptr %t472, { ptr, i64, i64 } %t475, { ptr, i64, i64 } %t478) + store { ptr, i64, i64 } %t475, ptr %a480 + call void @finch_str_drop(ptr %a480) + %t481 = load { ptr, i64, i64 }, ptr %a469 + store { ptr, i64, i64 } %t479, ptr %a469 + store { ptr, i64, i64 } %t481, ptr %a482 + call void @finch_str_drop(ptr %a482) + br label %endif7122 +endif7122: + %t483 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t484 = load { ptr, i64, i64 }, ptr %t483 + store { ptr, i64, i64 } %t484, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.4560, i64 3, i64 0 }, ptr %a486 + %t487 = call i32 @finch_str_eq(ptr %a485, ptr %a486) + %t488 = icmp ne i32 %t487, 0 + br i1 %t488, label %then7123, label %endif7125 +then7123: + %t489 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t490 = load ptr, ptr %a1 + %t491 = load { ptr, i64, i64 }, ptr %a469 + %t492 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t490, { ptr, i64, i64 } %t491) + %t493 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t492, 0 + %t494 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4561, i64 4, i64 0 }) + %t495 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t494) + store %S.ast.Type %t494, ptr %a496 + call void @finch.drop.S_ast_Type(ptr %a496) + %t497 = insertvalue %S.gen.Val %t493, %S.ast.Type %t495, 1 + %t498 = insertvalue %S.gen.Ref %t489, %S.gen.Val %t497, 2 + call void @finch_str_drop(ptr %a469) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t498 +endif7125: + %t499 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t500 = load ptr, ptr %a1 + %t501 = load { ptr, i64, i64 }, ptr %a469 + store { ptr, i64, i64 } { ptr @.str.4562, i64 31, i64 0 }, ptr %a503 + store { ptr, i64, i64 } %t501, ptr %a504 + call void @finch_str_concat(ptr %a502, ptr %a503, ptr %a504) + %t505 = load { ptr, i64, i64 }, ptr %a502 + store { ptr, i64, i64 } %t505, ptr %a507 + store { ptr, i64, i64 } { ptr @.str.4563, i64 3, i64 0 }, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t505, ptr %a509 + call void @finch_str_drop(ptr %a509) + %t510 = load { ptr, i64, i64 }, ptr %a506 + %t511 = call { ptr, i64, i64 } @finch.gen.op(ptr %t500, { ptr, i64, i64 } %t510) + store { ptr, i64, i64 } %t510, ptr %a512 + call void @finch_str_drop(ptr %a512) + %t513 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t511, 0 + %t514 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 1 + %t515 = load { ptr, i64, i64 }, ptr %t514 + %t516 = extractvalue { ptr, i64, i64 } %t515, 1 + %t517 = icmp uge i64 0, %t516 + br i1 %t517, label %range7126, label %inrange7127 +range7126: + call void @finch_panic_index(ptr @.str.4564, i64 3959, i64 0, i64 %t516) + unreachable +inrange7127: + %t518 = extractvalue { ptr, i64, i64 } %t515, 0 + %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 + %t520 = load %S.ast.Type, ptr %t519 + %t521 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t520) + %t522 = insertvalue %S.gen.Val %t513, %S.ast.Type %t521, 1 + %t523 = insertvalue %S.gen.Ref %t499, %S.gen.Val %t522, 2 + call void @finch_str_drop(ptr %a469) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t523 +endif7105: + %t524 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t525 = load { ptr, i64, i64 }, ptr %t524 + store { ptr, i64, i64 } %t525, ptr %a526 + store { ptr, i64, i64 } { ptr @.str.4565, i64 5, i64 0 }, ptr %a527 + %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) + %t529 = icmp ne i32 %t528, 0 + br label %logic.from7128 +logic.from7128: + br i1 %t529, label %logic.end7130, label %logic.rhs7129 +logic.rhs7129: + %t530 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t531 = load { ptr, i64, i64 }, ptr %t530 + store { ptr, i64, i64 } %t531, ptr %a532 + store { ptr, i64, i64 } { ptr @.str.4566, i64 3, i64 0 }, ptr %a533 + %t534 = call i32 @finch_str_eq(ptr %a532, ptr %a533) + %t535 = icmp ne i32 %t534, 0 + br label %logic.rend7131 +logic.rend7131: + br label %logic.end7130 +logic.end7130: + %t536 = phi i1 [ true, %logic.from7128 ], [ %t535, %logic.rend7131 ] + br label %logic.from7132 +logic.from7132: + br i1 %t536, label %logic.end7134, label %logic.rhs7133 +logic.rhs7133: + %t537 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t538 = load { ptr, i64, i64 }, ptr %t537 + store { ptr, i64, i64 } %t538, ptr %a539 + store { ptr, i64, i64 } { ptr @.str.4567, i64 3, i64 0 }, ptr %a540 + %t541 = call i32 @finch_str_eq(ptr %a539, ptr %a540) + %t542 = icmp ne i32 %t541, 0 + br label %logic.rend7135 +logic.rend7135: + br label %logic.end7134 +logic.end7134: + %t543 = phi i1 [ true, %logic.from7132 ], [ %t542, %logic.rend7135 ] + br i1 %t543, label %then7136, label %endif7138 +then7136: + %t544 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t545 = load { ptr, i64, i64 }, ptr %t544 + store { ptr, i64, i64 } %t545, ptr %a546 + store { ptr, i64, i64 } { ptr @.str.4568, i64 3, i64 0 }, ptr %a547 + %t548 = call i32 @finch_str_eq(ptr %a546, ptr %a547) + %t549 = icmp eq i32 %t548, 0 + br i1 %t549, label %then7139, label %endif7141 +then7139: + %t550 = load ptr, ptr %a1 + %t551 = load %S.ast.Node, ptr %a2 + %t552 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t553 = load { ptr, i64, i64 }, ptr %t552 + store { ptr, i64, i64 } { ptr @.str.4569, i64 37, i64 0 }, ptr %a555 + store { ptr, i64, i64 } %t553, ptr %a556 + call void @finch_str_concat(ptr %a554, ptr %a555, ptr %a556) + %t557 = load { ptr, i64, i64 }, ptr %a554 + store { ptr, i64, i64 } %t557, ptr %a559 + store { ptr, i64, i64 } { ptr @.str.4570, i64 1, i64 0 }, ptr %a560 + call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) + store { ptr, i64, i64 } %t557, ptr %a561 + call void @finch_str_drop(ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a558 + call void @finch.gen.fail(ptr %t550, %S.ast.Node %t551, { ptr, i64, i64 } %t562) + store { ptr, i64, i64 } %t562, ptr %a563 + call void @finch_str_drop(ptr %a563) + br label %endif7141 +endif7141: + %t564 = load i1, ptr %a3 + br i1 %t564, label %then7142, label %endif7144 +then7142: + %t565 = load ptr, ptr %a1 + %t566 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t565, %S.ast.Node %t566, { ptr, i64, i64 } { ptr @.str.4571, i64 48, i64 0 }) + br label %endif7144 +endif7144: + %t567 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t568 = load i1, ptr %t567 + br i1 %t568, label %then7145, label %endif7147 +then7145: + %t569 = load ptr, ptr %a1 + %t570 = load ptr, ptr %a1 + %t571 = load %S.ast.Type, ptr %a164 + %t572 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t570, %S.ast.Type %t571) + store { ptr, i64, i64 } { ptr @.str.4572, i64 23, i64 0 }, ptr %a574 + store { ptr, i64, i64 } %t572, ptr %a575 + call void @finch_str_concat(ptr %a573, ptr %a574, ptr %a575) + store { ptr, i64, i64 } %t572, ptr %a576 + call void @finch_str_drop(ptr %a576) + %t577 = load { ptr, i64, i64 }, ptr %a573 + store { ptr, i64, i64 } %t577, ptr %a579 + store { ptr, i64, i64 } { ptr @.str.4573, i64 6, i64 0 }, ptr %a580 + call void @finch_str_concat(ptr %a578, ptr %a579, ptr %a580) + store { ptr, i64, i64 } %t577, ptr %a581 + call void @finch_str_drop(ptr %a581) + %t582 = load { ptr, i64, i64 }, ptr %a578 + %t583 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t584 = getelementptr inbounds %S.gen.Place, ptr %t583, i32 0, i32 0 + %t585 = load { ptr, i64, i64 }, ptr %t584 + store { ptr, i64, i64 } %t582, ptr %a587 + store { ptr, i64, i64 } %t585, ptr %a588 + call void @finch_str_concat(ptr %a586, ptr %a587, ptr %a588) + store { ptr, i64, i64 } %t582, ptr %a589 + call void @finch_str_drop(ptr %a589) + %t590 = load { ptr, i64, i64 }, ptr %a586 + store { ptr, i64, i64 } %t590, ptr %a592 + store { ptr, i64, i64 } { ptr @.str.4574, i64 14, i64 0 }, ptr %a593 + call void @finch_str_concat(ptr %a591, ptr %a592, ptr %a593) + store { ptr, i64, i64 } %t590, ptr %a594 + call void @finch_str_drop(ptr %a594) + %t595 = load { ptr, i64, i64 }, ptr %a591 + %t596 = call { ptr, i64, i64 } @finch.gen.op(ptr %t569, { ptr, i64, i64 } %t595) + store { ptr, i64, i64 } %t595, ptr %a597 + call void @finch_str_drop(ptr %a597) + store { ptr, i64, i64 } %t596, ptr %a598 + %t599 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t600 = load ptr, ptr %a1 + %t601 = load { ptr, i64, i64 }, ptr %a598 + %t602 = call { ptr, i64, i64 } @finch.gen.load(ptr %t600, { ptr, i64, i64 } { ptr @.str.4575, i64 3, i64 0 }, { ptr, i64, i64 } %t601) + %t603 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t602, 0 + %t604 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4576, i64 3, i64 0 }) + %t605 = insertvalue %S.gen.Val %t603, %S.ast.Type %t604, 1 + %t606 = insertvalue %S.gen.Ref %t599, %S.gen.Val %t605, 2 + call void @finch_str_drop(ptr %a598) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t606 +endif7147: + %t607 = load ptr, ptr %a1 + %t608 = load ptr, ptr %a1 + %t609 = load %S.ast.Type, ptr %a164 + %t610 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t608, %S.ast.Type %t609) + store { ptr, i64, i64 } { ptr @.str.4577, i64 13, i64 0 }, ptr %a612 + store { ptr, i64, i64 } %t610, ptr %a613 + call void @finch_str_concat(ptr %a611, ptr %a612, ptr %a613) + store { ptr, i64, i64 } %t610, ptr %a614 + call void @finch_str_drop(ptr %a614) + %t615 = load { ptr, i64, i64 }, ptr %a611 + store { ptr, i64, i64 } %t615, ptr %a617 + store { ptr, i64, i64 } { ptr @.str.4578, i64 1, i64 0 }, ptr %a618 + call void @finch_str_concat(ptr %a616, ptr %a617, ptr %a618) + store { ptr, i64, i64 } %t615, ptr %a619 + call void @finch_str_drop(ptr %a619) + %t620 = load { ptr, i64, i64 }, ptr %a616 + %t621 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t622 = getelementptr inbounds %S.gen.Val, ptr %t621, i32 0, i32 0 + %t623 = load { ptr, i64, i64 }, ptr %t622 + store { ptr, i64, i64 } %t620, ptr %a625 + store { ptr, i64, i64 } %t623, ptr %a626 + call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626) + store { ptr, i64, i64 } %t620, ptr %a627 + call void @finch_str_drop(ptr %a627) + %t628 = load { ptr, i64, i64 }, ptr %a624 + store { ptr, i64, i64 } %t628, ptr %a630 + store { ptr, i64, i64 } { ptr @.str.4579, i64 3, i64 0 }, ptr %a631 + call void @finch_str_concat(ptr %a629, ptr %a630, ptr %a631) + store { ptr, i64, i64 } %t628, ptr %a632 + call void @finch_str_drop(ptr %a632) + %t633 = load { ptr, i64, i64 }, ptr %a629 + %t634 = call { ptr, i64, i64 } @finch.gen.op(ptr %t607, { ptr, i64, i64 } %t633) + store { ptr, i64, i64 } %t633, ptr %a635 + call void @finch_str_drop(ptr %a635) + store { ptr, i64, i64 } %t634, ptr %a636 + %t637 = load ptr, ptr %a1 + %t638 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t639 = load %S.gen.Val, ptr %t638 + call void @finch.gen.release(ptr %t637, %S.gen.Val %t639) + %t640 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t641 = load { ptr, i64, i64 }, ptr %a636 + store { ptr, i64, i64 } %t641, ptr %a642 + call void @finch_str_copy(ptr %a643, ptr %a642) + %t644 = load { ptr, i64, i64 }, ptr %a643 + %t645 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t644, 0 + %t646 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4580, i64 3, i64 0 }) + %t647 = insertvalue %S.gen.Val %t645, %S.ast.Type %t646, 1 + %t648 = insertvalue %S.gen.Ref %t640, %S.gen.Val %t647, 2 + call void @finch_str_drop(ptr %a636) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t648 +endif7138: + %t649 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 0 + %t650 = load { ptr, i64, i64 }, ptr %t649 + store { ptr, i64, i64 } %t650, ptr %a651 + store { ptr, i64, i64 } { ptr @.str.4581, i64 6, i64 0 }, ptr %a652 + %t653 = call i32 @finch_str_eq(ptr %a651, ptr %a652) + %t654 = icmp eq i32 %t653, 0 + br i1 %t654, label %then7148, label %endif7150 +then7148: + %t655 = load ptr, ptr %a1 + %t656 = load %S.ast.Node, ptr %a2 + %t657 = load %S.ast.Type, ptr %a164 + %t658 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t657) + store { ptr, i64, i64 } %t658, ptr %a660 + store { ptr, i64, i64 } { ptr @.str.4582, i64 21, i64 0 }, ptr %a661 + call void @finch_str_concat(ptr %a659, ptr %a660, ptr %a661) + store { ptr, i64, i64 } %t658, ptr %a662 + call void @finch_str_drop(ptr %a662) + %t663 = load { ptr, i64, i64 }, ptr %a659 + %t664 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t665 = load { ptr, i64, i64 }, ptr %t664 + store { ptr, i64, i64 } %t663, ptr %a667 + store { ptr, i64, i64 } %t665, ptr %a668 + call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) + store { ptr, i64, i64 } %t663, ptr %a669 + call void @finch_str_drop(ptr %a669) + %t670 = load { ptr, i64, i64 }, ptr %a666 + store { ptr, i64, i64 } %t670, ptr %a672 + store { ptr, i64, i64 } { ptr @.str.4583, i64 2, i64 0 }, ptr %a673 + call void @finch_str_concat(ptr %a671, ptr %a672, ptr %a673) + store { ptr, i64, i64 } %t670, ptr %a674 + call void @finch_str_drop(ptr %a674) + %t675 = load { ptr, i64, i64 }, ptr %a671 + call void @finch.gen.fail(ptr %t655, %S.ast.Node %t656, { ptr, i64, i64 } %t675) + store { ptr, i64, i64 } %t675, ptr %a676 + call void @finch_str_drop(ptr %a676) + br label %endif7150 +endif7150: + %t677 = load ptr, ptr %a1 + %t678 = icmp eq ptr %t677, null + br i1 %t678, label %panic7151, label %ok7152 +panic7151: + call void @finch_panic(ptr @.str.4584, i64 3979, ptr @.str.4585) + unreachable +ok7152: + %t679 = getelementptr inbounds %S.gen.Gen, ptr %t677, i32 0, i32 16 + %t680 = load ptr, ptr %a1 + %t681 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 3 + %t682 = load { ptr, i64, i64 }, ptr %t681 + %t683 = getelementptr inbounds %S.ast.Type, ptr %a164, i32 0, i32 2 + %t684 = load { ptr, i64, i64 }, ptr %t683 + %t685 = call i64 @finch.gen.findStruct(ptr %t680, { ptr, i64, i64 } %t682, { ptr, i64, i64 } %t684) + %t686 = load { ptr, i64, i64 }, ptr %t679 + %t687 = extractvalue { ptr, i64, i64 } %t686, 1 + %t688 = icmp uge i64 %t685, %t687 + br i1 %t688, label %range7153, label %inrange7154 +range7153: + call void @finch_panic_index(ptr @.str.4586, i64 3979, i64 %t685, i64 %t687) + unreachable +inrange7154: + %t689 = extractvalue { ptr, i64, i64 } %t686, 0 + %t690 = getelementptr inbounds %S.gen.StructDef, ptr %t689, i64 %t685 + %t691 = load %S.gen.StructDef, ptr %t690 + store %S.gen.StructDef %t691, ptr %a692 + call void @finch.copy.S_gen_StructDef(ptr %a693, ptr %a692) + %t694 = load %S.gen.StructDef, ptr %a693 + store %S.gen.StructDef %t694, ptr %a695 + %t696 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 11 + %t697 = getelementptr inbounds { ptr, i64, i64 }, ptr %t696, i32 0, i32 1 + %t698 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t699 = load { ptr, i64, i64 }, ptr %t698 + store i64 -1, ptr %a700 + %t701 = load i64, ptr %t697 + %t702 = load ptr, ptr %t696 + store i64 0, ptr %a703 + br label %find.cond7155 +find.cond7155: + %t704 = load i64, ptr %a703 + %t705 = icmp slt i64 %t704, %t701 + br i1 %t705, label %find.body7156, label %find.end7159 +find.body7156: + %t706 = getelementptr inbounds { ptr, i64, i64 }, ptr %t702, i64 %t704 + %t707 = load { ptr, i64, i64 }, ptr %t706 + store { ptr, i64, i64 } %t707, ptr %a708 + store { ptr, i64, i64 } %t699, ptr %a709 + %t710 = call i32 @finch_str_eq(ptr %a708, ptr %a709) + %t711 = icmp ne i32 %t710, 0 + br i1 %t711, label %find.hit7157, label %find.next7158 +find.hit7157: + store i64 %t704, ptr %a700 + br label %find.end7159 +find.next7158: + %t712 = add i64 %t704, 1 + store i64 %t712, ptr %a703 + br label %find.cond7155 +find.end7159: + %t713 = load i64, ptr %a700 + store i64 %t713, ptr %a714 + %t715 = load i64, ptr %a714 + %t716 = icmp slt i64 %t715, 0 + br i1 %t716, label %then7160, label %endif7162 +then7160: + %t717 = load ptr, ptr %a1 + %t718 = load %S.ast.Node, ptr %a2 + %t719 = load %S.ast.Type, ptr %a164 + %t720 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t719) + store { ptr, i64, i64 } { ptr @.str.4587, i64 11, i64 0 }, ptr %a722 + store { ptr, i64, i64 } %t720, ptr %a723 + call void @finch_str_concat(ptr %a721, ptr %a722, ptr %a723) + store { ptr, i64, i64 } %t720, ptr %a724 + call void @finch_str_drop(ptr %a724) + %t725 = load { ptr, i64, i64 }, ptr %a721 + store { ptr, i64, i64 } %t725, ptr %a727 + store { ptr, i64, i64 } { ptr @.str.4588, i64 15, i64 0 }, ptr %a728 + call void @finch_str_concat(ptr %a726, ptr %a727, ptr %a728) + store { ptr, i64, i64 } %t725, ptr %a729 + call void @finch_str_drop(ptr %a729) + %t730 = load { ptr, i64, i64 }, ptr %a726 + %t731 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t732 = load { ptr, i64, i64 }, ptr %t731 + store { ptr, i64, i64 } %t730, ptr %a734 + store { ptr, i64, i64 } %t732, ptr %a735 + call void @finch_str_concat(ptr %a733, ptr %a734, ptr %a735) + store { ptr, i64, i64 } %t730, ptr %a736 + call void @finch_str_drop(ptr %a736) + %t737 = load { ptr, i64, i64 }, ptr %a733 + store { ptr, i64, i64 } %t737, ptr %a739 + store { ptr, i64, i64 } { ptr @.str.4589, i64 11, i64 0 }, ptr %a740 + call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) + store { ptr, i64, i64 } %t737, ptr %a741 + call void @finch_str_drop(ptr %a741) + %t742 = load { ptr, i64, i64 }, ptr %a738 + %t743 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 11 + %t744 = getelementptr inbounds { ptr, i64, i64 }, ptr %t743, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4590, i64 2, i64 0 }, ptr %a745 + call void @finch_str_join(ptr %a746, ptr %t743, ptr %a745) + %t747 = load { ptr, i64, i64 }, ptr %a746 + store { ptr, i64, i64 } %t742, ptr %a749 + store { ptr, i64, i64 } %t747, ptr %a750 + call void @finch_str_concat(ptr %a748, ptr %a749, ptr %a750) + store { ptr, i64, i64 } %t742, ptr %a751 + call void @finch_str_drop(ptr %a751) + store { ptr, i64, i64 } %t747, ptr %a752 + call void @finch_str_drop(ptr %a752) + %t753 = load { ptr, i64, i64 }, ptr %a748 + store { ptr, i64, i64 } %t753, ptr %a755 + store { ptr, i64, i64 } { ptr @.str.4591, i64 1, i64 0 }, ptr %a756 + call void @finch_str_concat(ptr %a754, ptr %a755, ptr %a756) + store { ptr, i64, i64 } %t753, ptr %a757 + call void @finch_str_drop(ptr %a757) + %t758 = load { ptr, i64, i64 }, ptr %a754 + call void @finch.gen.fail(ptr %t717, %S.ast.Node %t718, { ptr, i64, i64 } %t758) + store { ptr, i64, i64 } %t758, ptr %a759 + call void @finch_str_drop(ptr %a759) + br label %endif7162 +endif7162: + %t760 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 12 + %t761 = load i64, ptr %a714 + %t762 = load { ptr, i64, i64 }, ptr %t760 + %t763 = extractvalue { ptr, i64, i64 } %t762, 1 + %t764 = icmp uge i64 %t761, %t763 + br i1 %t764, label %range7163, label %inrange7164 +range7163: + call void @finch_panic_index(ptr @.str.4592, i64 3984, i64 %t761, i64 %t763) + unreachable +inrange7164: + %t765 = extractvalue { ptr, i64, i64 } %t762, 0 + %t766 = getelementptr inbounds %S.ast.Type, ptr %t765, i64 %t761 + %t767 = load %S.ast.Type, ptr %t766 + store %S.ast.Type %t767, ptr %a768 + call void @finch.copy.S_ast_Type(ptr %a769, ptr %a768) + %t770 = load %S.ast.Type, ptr %a769 + store %S.ast.Type %t770, ptr %a771 + %t772 = load ptr, ptr %a1 + %t773 = load %S.ast.Node, ptr %a2 + %t774 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t775 = load i64, ptr %t774 + %t776 = add i64 %t775, 1 + %t777 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t778 = getelementptr inbounds { ptr, i64, i64 }, ptr %t777, i32 0, i32 1 + %t779 = load i64, ptr %t778 + %t780 = load %S.ast.Type, ptr %a771 + %t781 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t780) + store { ptr, i64, i64 } { ptr @.str.4593, i64 9, i64 0 }, ptr %a783 + store { ptr, i64, i64 } %t781, ptr %a784 + call void @finch_str_concat(ptr %a782, ptr %a783, ptr %a784) + store { ptr, i64, i64 } %t781, ptr %a785 + call void @finch_str_drop(ptr %a785) + %t786 = load { ptr, i64, i64 }, ptr %a782 + store { ptr, i64, i64 } %t786, ptr %a788 + store { ptr, i64, i64 } { ptr @.str.4594, i64 1, i64 0 }, ptr %a789 + call void @finch_str_concat(ptr %a787, ptr %a788, ptr %a789) + store { ptr, i64, i64 } %t786, ptr %a790 + call void @finch_str_drop(ptr %a790) + %t791 = load { ptr, i64, i64 }, ptr %a787 + %t792 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t793 = load { ptr, i64, i64 }, ptr %t792 + store { ptr, i64, i64 } %t791, ptr %a795 + store { ptr, i64, i64 } %t793, ptr %a796 + call void @finch_str_concat(ptr %a794, ptr %a795, ptr %a796) + store { ptr, i64, i64 } %t791, ptr %a797 + call void @finch_str_drop(ptr %a797) + %t798 = load { ptr, i64, i64 }, ptr %a794 + store { ptr, i64, i64 } %t798, ptr %a800 + store { ptr, i64, i64 } { ptr @.str.4595, i64 4, i64 0 }, ptr %a801 + call void @finch_str_concat(ptr %a799, ptr %a800, ptr %a801) + store { ptr, i64, i64 } %t798, ptr %a802 + call void @finch_str_drop(ptr %a802) + %t803 = load { ptr, i64, i64 }, ptr %a799 + call void @finch.gen.noteRef(ptr %t772, %S.ast.Node %t773, i64 %t776, i64 %t779, { ptr, i64, i64 } %t803, { ptr, i64, i64 } { ptr @.str.4596, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t803, ptr %a804 + call void @finch_str_drop(ptr %a804) + %t805 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 0 + %t806 = load i1, ptr %t805 + br i1 %t806, label %then7165, label %endif7167 +then7165: + %t807 = load ptr, ptr %a1 + %t808 = load ptr, ptr %a1 + %t809 = load %S.ast.Type, ptr %a164 + %t810 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t808, %S.ast.Type %t809) + store { ptr, i64, i64 } { ptr @.str.4597, i64 23, i64 0 }, ptr %a812 + store { ptr, i64, i64 } %t810, ptr %a813 + call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813) + store { ptr, i64, i64 } %t810, ptr %a814 + call void @finch_str_drop(ptr %a814) + %t815 = load { ptr, i64, i64 }, ptr %a811 + store { ptr, i64, i64 } %t815, ptr %a817 + store { ptr, i64, i64 } { ptr @.str.4598, i64 6, i64 0 }, ptr %a818 + call void @finch_str_concat(ptr %a816, ptr %a817, ptr %a818) + store { ptr, i64, i64 } %t815, ptr %a819 + call void @finch_str_drop(ptr %a819) + %t820 = load { ptr, i64, i64 }, ptr %a816 + %t821 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 1 + %t822 = getelementptr inbounds %S.gen.Place, ptr %t821, i32 0, i32 0 + %t823 = load { ptr, i64, i64 }, ptr %t822 + store { ptr, i64, i64 } %t820, ptr %a825 + store { ptr, i64, i64 } %t823, ptr %a826 + call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) + store { ptr, i64, i64 } %t820, ptr %a827 + call void @finch_str_drop(ptr %a827) + %t828 = load { ptr, i64, i64 }, ptr %a824 + store { ptr, i64, i64 } %t828, ptr %a830 + store { ptr, i64, i64 } { ptr @.str.4599, i64 13, i64 0 }, ptr %a831 + call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) + store { ptr, i64, i64 } %t828, ptr %a832 + call void @finch_str_drop(ptr %a832) + %t833 = load { ptr, i64, i64 }, ptr %a829 + %t834 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 3 + %t835 = load i64, ptr %a714 + %t836 = load { ptr, i64, i64 }, ptr %t834 + %t837 = extractvalue { ptr, i64, i64 } %t836, 1 + %t838 = icmp uge i64 %t835, %t837 + br i1 %t838, label %range7168, label %inrange7169 +range7168: + call void @finch_panic_index(ptr @.str.4600, i64 3987, i64 %t835, i64 %t837) + unreachable +inrange7169: + %t839 = extractvalue { ptr, i64, i64 } %t836, 0 + %t840 = getelementptr inbounds i64, ptr %t839, i64 %t835 + %t841 = load i64, ptr %t840 + call void @finch_str_from_int(ptr %a842, i64 %t841) + %t843 = load { ptr, i64, i64 }, ptr %a842 + store { ptr, i64, i64 } %t833, ptr %a845 + store { ptr, i64, i64 } %t843, ptr %a846 + call void @finch_str_concat(ptr %a844, ptr %a845, ptr %a846) + store { ptr, i64, i64 } %t833, ptr %a847 + call void @finch_str_drop(ptr %a847) + store { ptr, i64, i64 } %t843, ptr %a848 + call void @finch_str_drop(ptr %a848) + %t849 = load { ptr, i64, i64 }, ptr %a844 + %t850 = call { ptr, i64, i64 } @finch.gen.op(ptr %t807, { ptr, i64, i64 } %t849) + store { ptr, i64, i64 } %t849, ptr %a851 + call void @finch_str_drop(ptr %a851) + store { ptr, i64, i64 } %t850, ptr %a852 + %t853 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t854 = load { ptr, i64, i64 }, ptr %a852 + store { ptr, i64, i64 } %t854, ptr %a855 + call void @finch_str_copy(ptr %a856, ptr %a855) + %t857 = load { ptr, i64, i64 }, ptr %a856 + %t858 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t857, 0 + %t859 = load %S.ast.Type, ptr %a771 + store %S.ast.Type %t859, ptr %a860 + call void @finch.copy.S_ast_Type(ptr %a861, ptr %a860) + %t862 = load %S.ast.Type, ptr %a861 + %t863 = insertvalue %S.gen.Place %t858, %S.ast.Type %t862, 1 + %t864 = insertvalue %S.gen.Ref %t853, %S.gen.Place %t863, 1 + call void @finch_str_drop(ptr %a852) + call void @finch.drop.S_ast_Type(ptr %a771) + call void @finch.drop.S_gen_StructDef(ptr %a695) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t864 +endif7167: + %t865 = load ptr, ptr %a1 + %t866 = load ptr, ptr %a1 + %t867 = load %S.ast.Type, ptr %a164 + %t868 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t866, %S.ast.Type %t867) + store { ptr, i64, i64 } { ptr @.str.4601, i64 13, i64 0 }, ptr %a870 + store { ptr, i64, i64 } %t868, ptr %a871 + call void @finch_str_concat(ptr %a869, ptr %a870, ptr %a871) + store { ptr, i64, i64 } %t868, ptr %a872 + call void @finch_str_drop(ptr %a872) + %t873 = load { ptr, i64, i64 }, ptr %a869 + store { ptr, i64, i64 } %t873, ptr %a875 + store { ptr, i64, i64 } { ptr @.str.4602, i64 1, i64 0 }, ptr %a876 + call void @finch_str_concat(ptr %a874, ptr %a875, ptr %a876) + store { ptr, i64, i64 } %t873, ptr %a877 + call void @finch_str_drop(ptr %a877) + %t878 = load { ptr, i64, i64 }, ptr %a874 + %t879 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t880 = getelementptr inbounds %S.gen.Val, ptr %t879, i32 0, i32 0 + %t881 = load { ptr, i64, i64 }, ptr %t880 + store { ptr, i64, i64 } %t878, ptr %a883 + store { ptr, i64, i64 } %t881, ptr %a884 + call void @finch_str_concat(ptr %a882, ptr %a883, ptr %a884) + store { ptr, i64, i64 } %t878, ptr %a885 + call void @finch_str_drop(ptr %a885) + %t886 = load { ptr, i64, i64 }, ptr %a882 + store { ptr, i64, i64 } %t886, ptr %a888 + store { ptr, i64, i64 } { ptr @.str.4603, i64 2, i64 0 }, ptr %a889 + call void @finch_str_concat(ptr %a887, ptr %a888, ptr %a889) + store { ptr, i64, i64 } %t886, ptr %a890 + call void @finch_str_drop(ptr %a890) + %t891 = load { ptr, i64, i64 }, ptr %a887 + %t892 = getelementptr inbounds %S.gen.StructDef, ptr %a695, i32 0, i32 3 + %t893 = load i64, ptr %a714 + %t894 = load { ptr, i64, i64 }, ptr %t892 + %t895 = extractvalue { ptr, i64, i64 } %t894, 1 + %t896 = icmp uge i64 %t893, %t895 + br i1 %t896, label %range7170, label %inrange7171 +range7170: + call void @finch_panic_index(ptr @.str.4604, i64 3990, i64 %t893, i64 %t895) + unreachable +inrange7171: + %t897 = extractvalue { ptr, i64, i64 } %t894, 0 + %t898 = getelementptr inbounds i64, ptr %t897, i64 %t893 + %t899 = load i64, ptr %t898 + call void @finch_str_from_int(ptr %a900, i64 %t899) + %t901 = load { ptr, i64, i64 }, ptr %a900 + store { ptr, i64, i64 } %t891, ptr %a903 + store { ptr, i64, i64 } %t901, ptr %a904 + call void @finch_str_concat(ptr %a902, ptr %a903, ptr %a904) + store { ptr, i64, i64 } %t891, ptr %a905 + call void @finch_str_drop(ptr %a905) + store { ptr, i64, i64 } %t901, ptr %a906 + call void @finch_str_drop(ptr %a906) + %t907 = load { ptr, i64, i64 }, ptr %a902 + %t908 = call { ptr, i64, i64 } @finch.gen.op(ptr %t865, { ptr, i64, i64 } %t907) + store { ptr, i64, i64 } %t907, ptr %a909 + call void @finch_str_drop(ptr %a909) + store { ptr, i64, i64 } %t908, ptr %a910 + %t911 = load { ptr, i64, i64 }, ptr %a910 + store { ptr, i64, i64 } %t911, ptr %a912 + call void @finch_str_copy(ptr %a913, ptr %a912) + %t914 = load { ptr, i64, i64 }, ptr %a913 + %t915 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t914, 0 + %t916 = load %S.ast.Type, ptr %a771 + store %S.ast.Type %t916, ptr %a917 + call void @finch.copy.S_ast_Type(ptr %a918, ptr %a917) + %t919 = load %S.ast.Type, ptr %a918 + %t920 = insertvalue %S.gen.Val %t915, %S.ast.Type %t919, 1 + store %S.gen.Val %t920, ptr %a921 + %t922 = load ptr, ptr %a1 + %t923 = load %S.ast.Type, ptr %a771 + %t924 = call i1 @finch.gen.owning(ptr %t922, %S.ast.Type %t923) + br label %logic.from7172 +logic.from7172: + br i1 %t924, label %logic.rhs7173, label %logic.end7174 +logic.rhs7173: + %t925 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t926 = getelementptr inbounds %S.gen.Val, ptr %t925, i32 0, i32 2 + %t927 = load i1, ptr %t926 + br label %logic.rend7175 +logic.rend7175: + br label %logic.end7174 +logic.end7174: + %t928 = phi i1 [ false, %logic.from7172 ], [ %t927, %logic.rend7175 ] + br i1 %t928, label %then7176, label %endif7178 +then7176: + %t929 = load ptr, ptr %a1 + %t930 = load { ptr, i64, i64 }, ptr %a910 + %t931 = load %S.ast.Type, ptr %a771 + %t932 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t929, { ptr, i64, i64 } %t930, %S.ast.Type %t931) + %t933 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t932, 0 + %t934 = load %S.ast.Type, ptr %a771 + store %S.ast.Type %t934, ptr %a935 + call void @finch.copy.S_ast_Type(ptr %a936, ptr %a935) + %t937 = load %S.ast.Type, ptr %a936 + %t938 = insertvalue %S.gen.Val %t933, %S.ast.Type %t937, 1 + %t939 = insertvalue %S.gen.Val %t938, i1 true, 2 + %t940 = load %S.gen.Val, ptr %a921 + store %S.gen.Val %t939, ptr %a921 + store %S.gen.Val %t940, ptr %a941 + call void @finch.drop.S_gen_Val(ptr %a941) + br label %endif7178 +endif7178: + %t942 = load ptr, ptr %a1 + %t943 = getelementptr inbounds %S.gen.Ref, ptr %a157, i32 0, i32 2 + %t944 = load %S.gen.Val, ptr %t943 + call void @finch.gen.release(ptr %t942, %S.gen.Val %t944) + %t945 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t946 = load %S.gen.Val, ptr %a921 + store %S.gen.Val %t946, ptr %a947 + call void @finch.copy.S_gen_Val(ptr %a948, ptr %a947) + %t949 = load %S.gen.Val, ptr %a948 + %t950 = insertvalue %S.gen.Ref %t945, %S.gen.Val %t949, 2 + call void @finch.drop.S_gen_Val(ptr %a921) + call void @finch_str_drop(ptr %a910) + call void @finch.drop.S_ast_Type(ptr %a771) + call void @finch.drop.S_gen_StructDef(ptr %a695) + call void @finch.drop.S_ast_Type(ptr %a164) + call void @finch.drop.S_gen_Ref(ptr %a157) + ret %S.gen.Ref %t950 +} + +define internal %S.gen.Ref @finch.gen.index(ptr %p0, %S.ast.Node %p1, i1 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i1, align 16 + %a14 = alloca %S.gen.Ref, align 16 + %a20 = alloca i64, align 16 + %a32 = alloca %S.gen.Ref, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i1 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range7179, label %inrange7180 +range7179: + call void @finch_panic_index(ptr @.str.4605, i64 4000, i64 0, i64 %t7) + unreachable +inrange7180: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Node, ptr %t9, i64 0 + %t11 = load %S.ast.Node, ptr %t10 + %t12 = load i1, ptr %a3 + %t13 = call %S.gen.Ref @finch.gen.ref(ptr %t4, %S.ast.Node %t11, i1 %t12) + store %S.gen.Ref %t13, ptr %a14 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic7181, label %ok7182 +panic7181: + call void @finch_panic(ptr @.str.4606, i64 4001, ptr @.str.4607) + unreachable +ok7182: + %t17 = getelementptr inbounds %S.gen.Gen, ptr %t15, i32 0, i32 11 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + store i64 %t19, ptr %a20 + %t21 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 0 + %t22 = load i1, ptr %t21 + %t23 = xor i1 %t22, true + br i1 %t23, label %then7183, label %endif7185 +then7183: + %t24 = load ptr, ptr %a1 + %t25 = getelementptr inbounds %S.gen.Ref, ptr %a14, i32 0, i32 2 + %t26 = load %S.gen.Val, ptr %t25 + call void @finch.gen.hold(ptr %t24, %S.gen.Val %t26) + br label %endif7185 +endif7185: + %t27 = load ptr, ptr %a1 + %t28 = load %S.ast.Node, ptr %a2 + %t29 = load %S.gen.Ref, ptr %a14 + %t30 = load i1, ptr %a3 + %t31 = call %S.gen.Ref @finch.gen.indexOf(ptr %t27, %S.ast.Node %t28, %S.gen.Ref %t29, i1 %t30) + store %S.gen.Ref %t31, ptr %a32 + %t33 = load ptr, ptr %a1 + %t34 = load i64, ptr %a20 + call void @finch.gen.heldEnd(ptr %t33, i64 %t34) + %t35 = load %S.gen.Ref, ptr %a32 + call void @finch.drop.S_gen_Ref(ptr %a14) + ret %S.gen.Ref %t35 +} + +define internal %S.gen.Ref @finch.gen.indexOf(ptr %p0, %S.ast.Node %p1, %S.gen.Ref %p2, i1 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.Ref, align 16 + %a4 = alloca i1, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a9 = alloca %S.ast.Type, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca %S.gen.Val, align 16 + %a54 = alloca %S.ast.Type, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca %S.gen.Val, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca %S.ast.Type, align 16 + %a140 = alloca %S.ast.Type, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca %S.ast.Type, align 16 + %a180 = alloca %S.ast.Type, align 16 + %a182 = alloca %S.ast.Type, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a220 = alloca %S.ast.Type, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca %S.ast.Type, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca %S.ast.Type, align 16 + %a263 = alloca %S.ast.Type, align 16 + %a266 = alloca %S.ast.Type, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca %S.ast.Type, align 16 + %a386 = alloca %S.ast.Type, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca %S.ast.Type, align 16 + %a405 = alloca %S.ast.Type, align 16 + %a408 = alloca %S.gen.Val, align 16 + %a422 = alloca %S.ast.Type, align 16 + %a423 = alloca %S.ast.Type, align 16 + %a428 = alloca %S.gen.Val, align 16 + %a434 = alloca %S.gen.Val, align 16 + %a435 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.Ref %p2, ptr %a3 + store i1 %p3, ptr %a4 + %t5 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t6 = getelementptr inbounds %S.gen.Val, ptr %t5, i32 0, i32 1 + %t7 = load %S.ast.Type, ptr %t6 + store %S.ast.Type %t7, ptr %a8 + call void @finch.copy.S_ast_Type(ptr %a9, ptr %a8) + %t10 = load %S.ast.Type, ptr %a9 + store %S.ast.Type %t10, ptr %a11 + %t12 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t13 = load i1, ptr %t12 + br i1 %t13, label %then7186, label %endif7188 +then7186: + %t14 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t15 = getelementptr inbounds %S.gen.Place, ptr %t14, i32 0, i32 1 + %t16 = load %S.ast.Type, ptr %t15 + store %S.ast.Type %t16, ptr %a17 + call void @finch.copy.S_ast_Type(ptr %a18, ptr %a17) + %t19 = load %S.ast.Type, ptr %a18 + %t20 = load %S.ast.Type, ptr %a11 + store %S.ast.Type %t19, ptr %a11 + store %S.ast.Type %t20, ptr %a21 + call void @finch.drop.S_ast_Type(ptr %a21) + br label %endif7188 +endif7188: + %t22 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t23, ptr %a24 + store { ptr, i64, i64 } { ptr @.str.4608, i64 3, i64 0 }, ptr %a25 + %t26 = call i32 @finch_str_eq(ptr %a24, ptr %a25) + %t27 = icmp ne i32 %t26, 0 + br i1 %t27, label %then7189, label %endif7191 +then7189: + %t28 = load ptr, ptr %a1 + %t29 = load %S.ast.Node, ptr %a2 + %t30 = load %S.gen.Ref, ptr %a3 + %t31 = load %S.ast.Type, ptr %a11 + %t32 = load i1, ptr %a4 + %t33 = call %S.gen.Ref @finch.gen.mapIndex(ptr %t28, %S.ast.Node %t29, %S.gen.Ref %t30, %S.ast.Type %t31, i1 %t32) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t33 +endif7191: + %t34 = load ptr, ptr %a1 + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 1, %t38 + br i1 %t39, label %range7192, label %inrange7193 +range7192: + call void @finch_panic_index(ptr @.str.4609, i64 4018, i64 1, i64 %t38) + unreachable +inrange7193: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 + %t42 = load %S.ast.Node, ptr %t41 + %t43 = call %S.gen.Val @finch.gen.expr(ptr %t35, %S.ast.Node %t42) + %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4610, i64 3, i64 0 }) + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range7194, label %inrange7195 +range7194: + call void @finch_panic_index(ptr @.str.4611, i64 4018, i64 1, i64 %t47) + unreachable +inrange7195: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 + %t51 = load %S.ast.Node, ptr %t50 + %t52 = call %S.gen.Val @finch.gen.coerce(ptr %t34, %S.gen.Val %t43, %S.ast.Type %t44, %S.ast.Node %t51, { ptr, i64, i64 } { ptr @.str.4612, i64 8, i64 0 }) + store %S.gen.Val %t43, ptr %a53 + call void @finch.drop.S_gen_Val(ptr %a53) + store %S.ast.Type %t44, ptr %a54 + call void @finch.drop.S_ast_Type(ptr %a54) + %t55 = extractvalue %S.gen.Val %t52, 0 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_copy(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + store %S.gen.Val %t52, ptr %a59 + call void @finch.drop.S_gen_Val(ptr %a59) + store { ptr, i64, i64 } %t58, ptr %a60 + %t61 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.4613, i64 5, i64 0 }, ptr %a64 + %t65 = call i32 @finch_str_eq(ptr %a63, ptr %a64) + %t66 = icmp ne i32 %t65, 0 + br i1 %t66, label %then7196, label %endif7198 +then7196: + store { ptr, i64, i64 } { ptr @.str.4614, i64 0, i64 0 }, ptr %a67 + %t68 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t69 = load i1, ptr %t68 + br i1 %t69, label %then7199, label %else7200 +then7199: + %t70 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t71 = getelementptr inbounds %S.gen.Place, ptr %t70, i32 0, i32 0 + %t72 = load { ptr, i64, i64 }, ptr %t71 + store { ptr, i64, i64 } %t72, ptr %a73 + call void @finch_str_copy(ptr %a74, ptr %a73) + %t75 = load { ptr, i64, i64 }, ptr %a74 + %t76 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t75, ptr %a67 + store { ptr, i64, i64 } %t76, ptr %a77 + call void @finch_str_drop(ptr %a77) + br label %endif7201 +else7200: + %t78 = load ptr, ptr %a1 + %t79 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t80 = load %S.gen.Val, ptr %t79 + %t81 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t78, %S.gen.Val %t80) + %t82 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t81, ptr %a67 + store { ptr, i64, i64 } %t82, ptr %a83 + call void @finch_str_drop(ptr %a83) + br label %endif7201 +endif7201: + %t84 = load ptr, ptr %a1 + %t85 = load { ptr, i64, i64 }, ptr %a60 + %t86 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 4 + %t87 = load i64, ptr %t86 + call void @finch_str_from_int(ptr %a88, i64 %t87) + %t89 = load { ptr, i64, i64 }, ptr %a88 + %t90 = load %S.ast.Node, ptr %a2 + call void @finch.gen.boundsCheck(ptr %t84, { ptr, i64, i64 } %t85, { ptr, i64, i64 } %t89, %S.ast.Node %t90) + store { ptr, i64, i64 } %t89, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load ptr, ptr %a1 + %t93 = load ptr, ptr %a1 + %t94 = load %S.ast.Type, ptr %a11 + %t95 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t93, %S.ast.Type %t94) + store { ptr, i64, i64 } { ptr @.str.4615, i64 23, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.4616, i64 6, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + store { ptr, i64, i64 } %t100, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a101 + %t106 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t105, ptr %a108 + store { ptr, i64, i64 } %t106, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t105, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + store { ptr, i64, i64 } %t111, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.4617, i64 13, i64 0 }, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t111, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a112 + %t117 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t116, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t116, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + %t123 = call { ptr, i64, i64 } @finch.gen.op(ptr %t92, { ptr, i64, i64 } %t122) + store { ptr, i64, i64 } %t122, ptr %a124 + call void @finch_str_drop(ptr %a124) + store { ptr, i64, i64 } %t123, ptr %a125 + %t126 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t127 = load { ptr, i64, i64 }, ptr %a125 + store { ptr, i64, i64 } %t127, ptr %a128 + call void @finch_str_copy(ptr %a129, ptr %a128) + %t130 = load { ptr, i64, i64 }, ptr %a129 + %t131 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t130, 0 + %t132 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t133 = load { ptr, i64, i64 }, ptr %t132 + %t134 = extractvalue { ptr, i64, i64 } %t133, 1 + %t135 = icmp uge i64 0, %t134 + br i1 %t135, label %range7202, label %inrange7203 +range7202: + call void @finch_panic_index(ptr @.str.4618, i64 4028, i64 0, i64 %t134) + unreachable +inrange7203: + %t136 = extractvalue { ptr, i64, i64 } %t133, 0 + %t137 = getelementptr inbounds %S.ast.Type, ptr %t136, i64 0 + %t138 = load %S.ast.Type, ptr %t137 + store %S.ast.Type %t138, ptr %a139 + call void @finch.copy.S_ast_Type(ptr %a140, ptr %a139) + %t141 = load %S.ast.Type, ptr %a140 + %t142 = insertvalue %S.gen.Place %t131, %S.ast.Type %t141, 1 + %t143 = insertvalue %S.gen.Ref %t126, %S.gen.Place %t142, 1 + call void @finch_str_drop(ptr %a125) + call void @finch_str_drop(ptr %a67) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t143 +endif7198: + %t144 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t145 = load { ptr, i64, i64 }, ptr %t144 + store { ptr, i64, i64 } %t145, ptr %a146 + store { ptr, i64, i64 } { ptr @.str.4619, i64 3, i64 0 }, ptr %a147 + %t148 = call i32 @finch_str_eq(ptr %a146, ptr %a147) + %t149 = icmp ne i32 %t148, 0 + br i1 %t149, label %then7204, label %endif7206 +then7204: + %t150 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %t150, i32 0, i32 1 + %t152 = load i64, ptr %t151 + %t153 = icmp eq i64 %t152, 0 + br i1 %t153, label %then7207, label %endif7209 +then7207: + %t154 = load ptr, ptr %a1 + %t155 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t154, %S.ast.Node %t155, { ptr, i64, i64 } { ptr @.str.4620, i64 57, i64 0 }) + br label %endif7209 +endif7209: + %t156 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t157 = getelementptr inbounds %S.gen.Val, ptr %t156, i32 0, i32 0 + %t158 = load { ptr, i64, i64 }, ptr %t157 + store { ptr, i64, i64 } %t158, ptr %a159 + call void @finch_str_copy(ptr %a160, ptr %a159) + %t161 = load { ptr, i64, i64 }, ptr %a160 + store { ptr, i64, i64 } %t161, ptr %a162 + %t163 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t164 = load i1, ptr %t163 + br i1 %t164, label %then7210, label %endif7212 +then7210: + %t165 = load ptr, ptr %a1 + %t166 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t167 = getelementptr inbounds %S.gen.Place, ptr %t166, i32 0, i32 0 + %t168 = load { ptr, i64, i64 }, ptr %t167 + %t169 = call { ptr, i64, i64 } @finch.gen.load(ptr %t165, { ptr, i64, i64 } { ptr @.str.4621, i64 3, i64 0 }, { ptr, i64, i64 } %t168) + %t170 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t169, ptr %a162 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_drop(ptr %a171) + br label %endif7212 +endif7212: + %t172 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t173 = load { ptr, i64, i64 }, ptr %t172 + %t174 = extractvalue { ptr, i64, i64 } %t173, 1 + %t175 = icmp uge i64 0, %t174 + br i1 %t175, label %range7213, label %inrange7214 +range7213: + call void @finch_panic_index(ptr @.str.4622, i64 4038, i64 0, i64 %t174) + unreachable +inrange7214: + %t176 = extractvalue { ptr, i64, i64 } %t173, 0 + %t177 = getelementptr inbounds %S.ast.Type, ptr %t176, i64 0 + %t178 = load %S.ast.Type, ptr %t177 + store %S.ast.Type %t178, ptr %a179 + call void @finch.copy.S_ast_Type(ptr %a180, ptr %a179) + %t181 = load %S.ast.Type, ptr %a180 + store %S.ast.Type %t181, ptr %a182 + %t183 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t184 = load ptr, ptr %a1 + %t185 = load ptr, ptr %a1 + %t186 = load %S.ast.Type, ptr %a182 + %t187 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t185, %S.ast.Type %t186) + store { ptr, i64, i64 } { ptr @.str.4623, i64 23, i64 0 }, ptr %a189 + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.4624, i64 6, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load { ptr, i64, i64 }, ptr %a193 + %t198 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t197, ptr %a200 + store { ptr, i64, i64 } %t198, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + store { ptr, i64, i64 } %t197, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t203, ptr %a205 + store { ptr, i64, i64 } { ptr @.str.4625, i64 6, i64 0 }, ptr %a206 + call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) + store { ptr, i64, i64 } %t203, ptr %a207 + call void @finch_str_drop(ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a204 + %t209 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t208, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t208, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + %t215 = call { ptr, i64, i64 } @finch.gen.op(ptr %t184, { ptr, i64, i64 } %t214) + store { ptr, i64, i64 } %t214, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t215, 0 + %t218 = load %S.ast.Type, ptr %a182 + store %S.ast.Type %t218, ptr %a219 + call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) + %t221 = load %S.ast.Type, ptr %a220 + %t222 = insertvalue %S.gen.Place %t217, %S.ast.Type %t221, 1 + %t223 = insertvalue %S.gen.Ref %t183, %S.gen.Place %t222, 1 + call void @finch.drop.S_ast_Type(ptr %a182) + call void @finch_str_drop(ptr %a162) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t223 +endif7206: + %t224 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t225 = load { ptr, i64, i64 }, ptr %t224 + store { ptr, i64, i64 } %t225, ptr %a226 + store { ptr, i64, i64 } { ptr @.str.4626, i64 5, i64 0 }, ptr %a227 + %t228 = call i32 @finch_str_eq(ptr %a226, ptr %a227) + %t229 = icmp eq i32 %t228, 0 + br label %logic.from7215 +logic.from7215: + br i1 %t229, label %logic.rhs7216, label %logic.end7217 +logic.rhs7216: + %t230 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t231 = load { ptr, i64, i64 }, ptr %t230 + store { ptr, i64, i64 } %t231, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.4627, i64 3, i64 0 }, ptr %a233 + %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) + %t235 = icmp eq i32 %t234, 0 + br label %logic.rend7218 +logic.rend7218: + br label %logic.end7217 +logic.end7217: + %t236 = phi i1 [ false, %logic.from7215 ], [ %t235, %logic.rend7218 ] + br i1 %t236, label %then7219, label %endif7221 +then7219: + %t237 = load ptr, ptr %a1 + %t238 = load %S.ast.Node, ptr %a2 + %t239 = load %S.ast.Type, ptr %a11 + %t240 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t239) + store { ptr, i64, i64 } { ptr @.str.4628, i64 46, i64 0 }, ptr %a242 + store { ptr, i64, i64 } %t240, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t240, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + call void @finch.gen.fail(ptr %t237, %S.ast.Node %t238, { ptr, i64, i64 } %t245) + store { ptr, i64, i64 } %t245, ptr %a246 + call void @finch_str_drop(ptr %a246) + br label %endif7221 +endif7221: + %t247 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4629, i64 4, i64 0 }) + store %S.ast.Type %t247, ptr %a248 + %t249 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t250 = load { ptr, i64, i64 }, ptr %t249 + store { ptr, i64, i64 } %t250, ptr %a251 + store { ptr, i64, i64 } { ptr @.str.4630, i64 5, i64 0 }, ptr %a252 + %t253 = call i32 @finch_str_eq(ptr %a251, ptr %a252) + %t254 = icmp ne i32 %t253, 0 + br i1 %t254, label %then7222, label %endif7224 +then7222: + %t255 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 1 + %t256 = load { ptr, i64, i64 }, ptr %t255 + %t257 = extractvalue { ptr, i64, i64 } %t256, 1 + %t258 = icmp uge i64 0, %t257 + br i1 %t258, label %range7225, label %inrange7226 +range7225: + call void @finch_panic_index(ptr @.str.4631, i64 4046, i64 0, i64 %t257) + unreachable +inrange7226: + %t259 = extractvalue { ptr, i64, i64 } %t256, 0 + %t260 = getelementptr inbounds %S.ast.Type, ptr %t259, i64 0 + %t261 = load %S.ast.Type, ptr %t260 + store %S.ast.Type %t261, ptr %a262 + call void @finch.copy.S_ast_Type(ptr %a263, ptr %a262) + %t264 = load %S.ast.Type, ptr %a263 + %t265 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t264, ptr %a248 + store %S.ast.Type %t265, ptr %a266 + call void @finch.drop.S_ast_Type(ptr %a266) + br label %endif7224 +endif7224: + %t267 = getelementptr inbounds %S.ast.Type, ptr %a11, i32 0, i32 0 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t268, ptr %a269 + store { ptr, i64, i64 } { ptr @.str.4632, i64 3, i64 0 }, ptr %a270 + %t271 = call i32 @finch_str_eq(ptr %a269, ptr %a270) + %t272 = icmp ne i32 %t271, 0 + br label %logic.from7227 +logic.from7227: + br i1 %t272, label %logic.rhs7228, label %logic.end7229 +logic.rhs7228: + %t273 = load i1, ptr %a4 + br label %logic.rend7230 +logic.rend7230: + br label %logic.end7229 +logic.end7229: + %t274 = phi i1 [ false, %logic.from7227 ], [ %t273, %logic.rend7230 ] + br i1 %t274, label %then7231, label %endif7233 +then7231: + %t275 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t276 = load i1, ptr %t275 + %t277 = xor i1 %t276, true + br i1 %t277, label %then7234, label %endif7236 +then7234: + %t278 = load ptr, ptr %a1 + %t279 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t278, %S.ast.Node %t279, { ptr, i64, i64 } { ptr @.str.4633, i64 44, i64 0 }) + br label %endif7236 +endif7236: + %t280 = load ptr, ptr %a1 + %t281 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t282 = getelementptr inbounds %S.gen.Place, ptr %t281, i32 0, i32 0 + %t283 = load { ptr, i64, i64 }, ptr %t282 + store { ptr, i64, i64 } { ptr @.str.4634, i64 29, i64 0 }, ptr %a285 + store { ptr, i64, i64 } %t283, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + %t287 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t287, ptr %a289 + store { ptr, i64, i64 } { ptr @.str.4635, i64 1, i64 0 }, ptr %a290 + call void @finch_str_concat(ptr %a288, ptr %a289, ptr %a290) + store { ptr, i64, i64 } %t287, ptr %a291 + call void @finch_str_drop(ptr %a291) + %t292 = load { ptr, i64, i64 }, ptr %a288 + call void @finch.gen.emit(ptr %t280, { ptr, i64, i64 } %t292) + store { ptr, i64, i64 } %t292, ptr %a293 + call void @finch_str_drop(ptr %a293) + br label %endif7233 +endif7233: + %t294 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t295 = getelementptr inbounds %S.gen.Val, ptr %t294, i32 0, i32 0 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_copy(ptr %a298, ptr %a297) + %t299 = load { ptr, i64, i64 }, ptr %a298 + store { ptr, i64, i64 } %t299, ptr %a300 + %t301 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t302 = load i1, ptr %t301 + br i1 %t302, label %then7237, label %endif7239 +then7237: + %t303 = load ptr, ptr %a1 + %t304 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 1 + %t305 = getelementptr inbounds %S.gen.Place, ptr %t304, i32 0, i32 0 + %t306 = load { ptr, i64, i64 }, ptr %t305 + %t307 = call { ptr, i64, i64 } @finch.gen.load(ptr %t303, { ptr, i64, i64 } { ptr @.str.4636, i64 17, i64 0 }, { ptr, i64, i64 } %t306) + %t308 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } %t307, ptr %a300 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif7239 +endif7239: + %t310 = load ptr, ptr %a1 + %t311 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.4637, i64 31, i64 0 }, ptr %a313 + store { ptr, i64, i64 } %t311, ptr %a314 + call void @finch_str_concat(ptr %a312, ptr %a313, ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a312 + store { ptr, i64, i64 } %t315, ptr %a317 + store { ptr, i64, i64 } { ptr @.str.4638, i64 3, i64 0 }, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + %t321 = call { ptr, i64, i64 } @finch.gen.op(ptr %t310, { ptr, i64, i64 } %t320) + store { ptr, i64, i64 } %t320, ptr %a322 + call void @finch_str_drop(ptr %a322) + store { ptr, i64, i64 } %t321, ptr %a323 + %t324 = load ptr, ptr %a1 + %t325 = load { ptr, i64, i64 }, ptr %a60 + %t326 = load { ptr, i64, i64 }, ptr %a323 + %t327 = load %S.ast.Node, ptr %a2 + call void @finch.gen.boundsCheck(ptr %t324, { ptr, i64, i64 } %t325, { ptr, i64, i64 } %t326, %S.ast.Node %t327) + %t328 = load ptr, ptr %a1 + %t329 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } { ptr @.str.4639, i64 31, i64 0 }, ptr %a331 + store { ptr, i64, i64 } %t329, ptr %a332 + call void @finch_str_concat(ptr %a330, ptr %a331, ptr %a332) + %t333 = load { ptr, i64, i64 }, ptr %a330 + store { ptr, i64, i64 } %t333, ptr %a335 + store { ptr, i64, i64 } { ptr @.str.4640, i64 3, i64 0 }, ptr %a336 + call void @finch_str_concat(ptr %a334, ptr %a335, ptr %a336) + store { ptr, i64, i64 } %t333, ptr %a337 + call void @finch_str_drop(ptr %a337) + %t338 = load { ptr, i64, i64 }, ptr %a334 + %t339 = call { ptr, i64, i64 } @finch.gen.op(ptr %t328, { ptr, i64, i64 } %t338) + store { ptr, i64, i64 } %t338, ptr %a340 + call void @finch_str_drop(ptr %a340) + store { ptr, i64, i64 } %t339, ptr %a341 + %t342 = load ptr, ptr %a1 + %t343 = load ptr, ptr %a1 + %t344 = load %S.ast.Type, ptr %a248 + %t345 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t343, %S.ast.Type %t344) + store { ptr, i64, i64 } { ptr @.str.4641, i64 23, i64 0 }, ptr %a347 + store { ptr, i64, i64 } %t345, ptr %a348 + call void @finch_str_concat(ptr %a346, ptr %a347, ptr %a348) + store { ptr, i64, i64 } %t345, ptr %a349 + call void @finch_str_drop(ptr %a349) + %t350 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t350, ptr %a352 + store { ptr, i64, i64 } { ptr @.str.4642, i64 6, i64 0 }, ptr %a353 + call void @finch_str_concat(ptr %a351, ptr %a352, ptr %a353) + store { ptr, i64, i64 } %t350, ptr %a354 + call void @finch_str_drop(ptr %a354) + %t355 = load { ptr, i64, i64 }, ptr %a351 + %t356 = load { ptr, i64, i64 }, ptr %a341 + store { ptr, i64, i64 } %t355, ptr %a358 + store { ptr, i64, i64 } %t356, ptr %a359 + call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) + store { ptr, i64, i64 } %t355, ptr %a360 + call void @finch_str_drop(ptr %a360) + %t361 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t361, ptr %a363 + store { ptr, i64, i64 } { ptr @.str.4643, i64 6, i64 0 }, ptr %a364 + call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) + store { ptr, i64, i64 } %t361, ptr %a365 + call void @finch_str_drop(ptr %a365) + %t366 = load { ptr, i64, i64 }, ptr %a362 + %t367 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t366, ptr %a369 + store { ptr, i64, i64 } %t367, ptr %a370 + call void @finch_str_concat(ptr %a368, ptr %a369, ptr %a370) + store { ptr, i64, i64 } %t366, ptr %a371 + call void @finch_str_drop(ptr %a371) + %t372 = load { ptr, i64, i64 }, ptr %a368 + %t373 = call { ptr, i64, i64 } @finch.gen.op(ptr %t342, { ptr, i64, i64 } %t372) + store { ptr, i64, i64 } %t372, ptr %a374 + call void @finch_str_drop(ptr %a374) + store { ptr, i64, i64 } %t373, ptr %a375 + %t376 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 0 + %t377 = load i1, ptr %t376 + br i1 %t377, label %then7240, label %endif7242 +then7240: + %t378 = insertvalue %S.gen.Ref zeroinitializer, i1 true, 0 + %t379 = load { ptr, i64, i64 }, ptr %a375 + store { ptr, i64, i64 } %t379, ptr %a380 + call void @finch_str_copy(ptr %a381, ptr %a380) + %t382 = load { ptr, i64, i64 }, ptr %a381 + %t383 = insertvalue %S.gen.Place zeroinitializer, { ptr, i64, i64 } %t382, 0 + %t384 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t384, ptr %a385 + call void @finch.copy.S_ast_Type(ptr %a386, ptr %a385) + %t387 = load %S.ast.Type, ptr %a386 + %t388 = insertvalue %S.gen.Place %t383, %S.ast.Type %t387, 1 + %t389 = insertvalue %S.gen.Ref %t378, %S.gen.Place %t388, 1 + call void @finch_str_drop(ptr %a375) + call void @finch_str_drop(ptr %a341) + call void @finch_str_drop(ptr %a323) + call void @finch_str_drop(ptr %a300) + call void @finch.drop.S_ast_Type(ptr %a248) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t389 +endif7242: + %t390 = load ptr, ptr %a1 + %t391 = load ptr, ptr %a1 + %t392 = load %S.ast.Type, ptr %a248 + %t393 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t391, %S.ast.Type %t392) + %t394 = load { ptr, i64, i64 }, ptr %a375 + %t395 = call { ptr, i64, i64 } @finch.gen.load(ptr %t390, { ptr, i64, i64 } %t393, { ptr, i64, i64 } %t394) + store { ptr, i64, i64 } %t393, ptr %a396 + call void @finch_str_drop(ptr %a396) + store { ptr, i64, i64 } %t395, ptr %a397 + %t398 = load { ptr, i64, i64 }, ptr %a397 + store { ptr, i64, i64 } %t398, ptr %a399 + call void @finch_str_copy(ptr %a400, ptr %a399) + %t401 = load { ptr, i64, i64 }, ptr %a400 + %t402 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t401, 0 + %t403 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t403, ptr %a404 + call void @finch.copy.S_ast_Type(ptr %a405, ptr %a404) + %t406 = load %S.ast.Type, ptr %a405 + %t407 = insertvalue %S.gen.Val %t402, %S.ast.Type %t406, 1 + store %S.gen.Val %t407, ptr %a408 + %t409 = load ptr, ptr %a1 + %t410 = load %S.ast.Type, ptr %a248 + %t411 = call i1 @finch.gen.owning(ptr %t409, %S.ast.Type %t410) + br label %logic.from7243 +logic.from7243: + br i1 %t411, label %logic.rhs7244, label %logic.end7245 +logic.rhs7244: + %t412 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t413 = getelementptr inbounds %S.gen.Val, ptr %t412, i32 0, i32 2 + %t414 = load i1, ptr %t413 + br label %logic.rend7246 +logic.rend7246: + br label %logic.end7245 +logic.end7245: + %t415 = phi i1 [ false, %logic.from7243 ], [ %t414, %logic.rend7246 ] + br i1 %t415, label %then7247, label %endif7249 +then7247: + %t416 = load ptr, ptr %a1 + %t417 = load { ptr, i64, i64 }, ptr %a397 + %t418 = load %S.ast.Type, ptr %a248 + %t419 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t416, { ptr, i64, i64 } %t417, %S.ast.Type %t418) + %t420 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t419, 0 + %t421 = load %S.ast.Type, ptr %a248 + store %S.ast.Type %t421, ptr %a422 + call void @finch.copy.S_ast_Type(ptr %a423, ptr %a422) + %t424 = load %S.ast.Type, ptr %a423 + %t425 = insertvalue %S.gen.Val %t420, %S.ast.Type %t424, 1 + %t426 = insertvalue %S.gen.Val %t425, i1 true, 2 + %t427 = load %S.gen.Val, ptr %a408 + store %S.gen.Val %t426, ptr %a408 + store %S.gen.Val %t427, ptr %a428 + call void @finch.drop.S_gen_Val(ptr %a428) + br label %endif7249 +endif7249: + %t429 = load ptr, ptr %a1 + %t430 = getelementptr inbounds %S.gen.Ref, ptr %a3, i32 0, i32 2 + %t431 = load %S.gen.Val, ptr %t430 + call void @finch.gen.release(ptr %t429, %S.gen.Val %t431) + %t432 = insertvalue %S.gen.Ref zeroinitializer, i1 false, 0 + %t433 = load %S.gen.Val, ptr %a408 + store %S.gen.Val %t433, ptr %a434 + call void @finch.copy.S_gen_Val(ptr %a435, ptr %a434) + %t436 = load %S.gen.Val, ptr %a435 + %t437 = insertvalue %S.gen.Ref %t432, %S.gen.Val %t436, 2 + call void @finch.drop.S_gen_Val(ptr %a408) + call void @finch_str_drop(ptr %a397) + call void @finch_str_drop(ptr %a375) + call void @finch_str_drop(ptr %a341) + call void @finch_str_drop(ptr %a323) + call void @finch_str_drop(ptr %a300) + call void @finch.drop.S_ast_Type(ptr %a248) + call void @finch_str_drop(ptr %a60) + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.gen.Ref %t437 +} + +define internal void @finch.gen.checkArgs(ptr %p0, %S.ast.Node %p1, i64 %p2, i64 %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca i64, align 16 + %a13 = alloca i64, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load i64, ptr %a3 + %t10 = sub i64 %t8, %t9 + store i64 %t10, ptr %a11 + %t12 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + store i64 0, ptr %a13 + br label %each.cond7250 +each.cond7250: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = load i64, ptr %a13 + %t17 = icmp slt i64 %t16, %t15 + br i1 %t17, label %each.body7251, label %each.end7253 +each.body7251: + %t18 = load ptr, ptr %t12 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = icmp sgt i64 %t23, 0 + br i1 %t24, label %then7254, label %endif7256 +then7254: + %t25 = load ptr, ptr %a1 + %t26 = load %S.ast.Node, ptr %a2 + %t27 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.4644, i64 17, i64 0 }, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t31, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.4645, i64 36, i64 0 }, ptr %a34 + call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) + store { ptr, i64, i64 } %t31, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a32 + call void @finch.gen.fail(ptr %t25, %S.ast.Node %t26, { ptr, i64, i64 } %t36) + store { ptr, i64, i64 } %t36, ptr %a37 + call void @finch_str_drop(ptr %a37) + br label %endif7256 +endif7256: + br label %each.step7252 +each.step7252: + %t38 = load i64, ptr %a13 + %t39 = add i64 %t38, 1 + store i64 %t39, ptr %a13 + br label %each.cond7250 +each.end7253: + %t40 = load i64, ptr %a11 + %t41 = load i64, ptr %a4 + %t42 = icmp ne i64 %t40, %t41 + br i1 %t42, label %then7257, label %endif7259 +then7257: + %t43 = load ptr, ptr %a1 + %t44 = load %S.ast.Node, ptr %a2 + %t45 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4646, i64 1, i64 0 }, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t49, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.4647, i64 8, i64 0 }, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + %t55 = load i64, ptr %a4 + call void @finch_str_from_int(ptr %a56, i64 %t55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a59 + store { ptr, i64, i64 } %t57, ptr %a60 + call void @finch_str_concat(ptr %a58, ptr %a59, ptr %a60) + store { ptr, i64, i64 } %t54, ptr %a61 + call void @finch_str_drop(ptr %a61) + store { ptr, i64, i64 } %t57, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a58 + store { ptr, i64, i64 } %t63, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.4648, i64 22, i64 0 }, ptr %a66 + call void @finch_str_concat(ptr %a64, ptr %a65, ptr %a66) + store { ptr, i64, i64 } %t63, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load { ptr, i64, i64 }, ptr %a64 + %t69 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a70, i64 %t69) + %t71 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a73 + store { ptr, i64, i64 } %t71, ptr %a74 + call void @finch_str_concat(ptr %a72, ptr %a73, ptr %a74) + store { ptr, i64, i64 } %t68, ptr %a75 + call void @finch_str_drop(ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a72 + call void @finch.gen.fail(ptr %t43, %S.ast.Node %t44, { ptr, i64, i64 } %t77) + store { ptr, i64, i64 } %t77, ptr %a78 + call void @finch_str_drop(ptr %a78) + br label %endif7259 +endif7259: + ret void +} + +define internal %S.gen.Val @finch.gen.strArg(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca %S.gen.Val, align 16 + %a13 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load ptr, ptr %a1 + %t6 = load %S.ast.Node, ptr %a2 + %t7 = call %S.gen.Val @finch.gen.expr(ptr %t5, %S.ast.Node %t6) + %t8 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4649, i64 3, i64 0 }) + %t9 = load %S.ast.Node, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %a3 + %t11 = call %S.gen.Val @finch.gen.coerce(ptr %t4, %S.gen.Val %t7, %S.ast.Type %t8, %S.ast.Node %t9, { ptr, i64, i64 } %t10) + store %S.gen.Val %t7, ptr %a12 + call void @finch.drop.S_gen_Val(ptr %a12) + store %S.ast.Type %t8, ptr %a13 + call void @finch.drop.S_ast_Type(ptr %a13) + ret %S.gen.Val %t11 +} + +define internal { ptr, i64, i64 } @finch.gen.strOut(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t2, { ptr, i64, i64 } { ptr @.str.4650, i64 17, i64 0 }) + ret { ptr, i64, i64 } %t3 +} + +define internal { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca i64, align 16 + %a36 = alloca i64, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.4651, i64 3, i64 0 }, ptr %a4 + %t5 = call i32 @finch_str_eq(ptr %a3, ptr %a4) + %t6 = icmp ne i32 %t5, 0 + br i1 %t6, label %then7260, label %endif7262 +then7260: + ret { ptr, i64, i64 } { ptr @.str.4652, i64 3, i64 0 } +endif7262: + %t7 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4653, i64 3, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then7263, label %endif7265 +then7263: + ret { ptr, i64, i64 } { ptr @.str.4654, i64 5, i64 0 } +endif7265: + %t12 = mul i64 13, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t13 = call ptr @finch_alloc(i64 %t12) + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 0 + store { ptr, i64, i64 } { ptr @.str.4655, i64 3, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 1 + store { ptr, i64, i64 } { ptr @.str.4656, i64 5, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 2 + store { ptr, i64, i64 } { ptr @.str.4657, i64 4, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 3 + store { ptr, i64, i64 } { ptr @.str.4658, i64 4, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 4 + store { ptr, i64, i64 } { ptr @.str.4659, i64 2, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 5 + store { ptr, i64, i64 } { ptr @.str.4660, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 6 + store { ptr, i64, i64 } { ptr @.str.4661, i64 3, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 7 + store { ptr, i64, i64 } { ptr @.str.4662, i64 2, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 8 + store { ptr, i64, i64 } { ptr @.str.4663, i64 3, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 9 + store { ptr, i64, i64 } { ptr @.str.4664, i64 3, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 10 + store { ptr, i64, i64 } { ptr @.str.4665, i64 3, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 11 + store { ptr, i64, i64 } { ptr @.str.4666, i64 3, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t13, i64 12 + store { ptr, i64, i64 } { ptr @.str.4667, i64 3, i64 0 }, ptr %t26 + %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t13, 0 + %t28 = insertvalue { ptr, i64, i64 } %t27, i64 13, 1 + %t29 = insertvalue { ptr, i64, i64 } %t28, i64 13, 2 + store { ptr, i64, i64 } %t29, ptr %a30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a33 + %t34 = load i64, ptr %t31 + %t35 = load ptr, ptr %a30 + store i64 0, ptr %a36 + br label %find.cond7266 +find.cond7266: + %t37 = load i64, ptr %a36 + %t38 = icmp slt i64 %t37, %t34 + br i1 %t38, label %find.body7267, label %find.end7270 +find.body7267: + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t37 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } %t32, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %find.hit7268, label %find.next7269 +find.hit7268: + store i64 %t37, ptr %a33 + br label %find.end7270 +find.next7269: + %t45 = add i64 %t37, 1 + store i64 %t45, ptr %a36 + br label %find.cond7266 +find.end7270: + %t46 = load i64, ptr %a33 + %t47 = icmp sge i64 %t46, 0 + br i1 %t47, label %then7271, label %endif7273 +then7271: + %t48 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t48, ptr %a49 + call void @finch_str_copy(ptr %a50, ptr %a49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } %t51 +endif7273: + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } { ptr @.str.4668, i64 0, i64 0 } +} + +define internal %S.gen.Val @finch.gen.convert(ptr %p0, %S.ast.Node %p1, %S.ast.Type %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.gen.Val, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca %S.ast.Type, align 16 + %a139 = alloca %S.ast.Type, align 16 + %a140 = alloca %S.ast.Type, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca %S.ast.Type, align 16 + %a226 = alloca %S.ast.Type, align 16 + %a227 = alloca %S.ast.Type, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca %S.ast.Type, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a309 = alloca %S.ast.Type, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca %S.ast.Type, align 16 + %a365 = alloca %S.ast.Type, align 16 + %a366 = alloca %S.ast.Type, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca %S.ast.Type, align 16 + %a387 = alloca %S.ast.Type, align 16 + %a388 = alloca %S.ast.Type, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca %S.ast.Type, align 16 + %a418 = alloca %S.ast.Type, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a452 = alloca %S.ast.Type, align 16 + %a453 = alloca %S.ast.Type, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca %S.ast.Type, align 16 + %a512 = alloca %S.ast.Type, align 16 + %a527 = alloca %S.ast.Type, align 16 + %a528 = alloca %S.ast.Type, align 16 + %a541 = alloca %S.ast.Type, align 16 + %a542 = alloca %S.ast.Type, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca %S.ast.Type, align 16 + %a585 = alloca %S.ast.Type, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a615 = alloca %S.ast.Type, align 16 + %a616 = alloca %S.ast.Type, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca %S.ast.Type, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a644 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca %S.ast.Type, align 16 + %a651 = alloca %S.ast.Type, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca %S.ast.Type, align 16 + %a689 = alloca %S.ast.Type, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a726 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a731 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a737 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Node, ptr %a2 + %t6 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %t6 + call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 0, i64 1, { ptr, i64, i64 } %t7) + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t10 = load { ptr, i64, i64 }, ptr %t9 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 0, %t11 + br i1 %t12, label %range7274, label %inrange7275 +range7274: + call void @finch_panic_index(ptr @.str.4669, i64 4116, i64 0, i64 %t11) + unreachable +inrange7275: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.ast.Node, ptr %t13, i64 0 + %t15 = load %S.ast.Node, ptr %t14 + %t16 = call %S.gen.Val @finch.gen.expr(ptr %t8, %S.ast.Node %t15) + store %S.gen.Val %t16, ptr %a17 + %t18 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 1 + %t19 = load %S.ast.Type, ptr %t18 + store %S.ast.Type %t19, ptr %a20 + call void @finch.copy.S_ast_Type(ptr %a21, ptr %a20) + %t22 = load %S.ast.Type, ptr %a21 + store %S.ast.Type %t22, ptr %a23 + %t24 = load %S.ast.Type, ptr %a23 + %t25 = load %S.ast.Type, ptr %a3 + %t26 = call i1 @finch.ast.same(%S.ast.Type %t24, %S.ast.Type %t25) + br i1 %t26, label %then7276, label %endif7278 +then7276: + %t27 = load %S.gen.Val, ptr %a17 + call void @finch.drop.S_ast_Type(ptr %a23) + ret %S.gen.Val %t27 +endif7278: + %t28 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t29 = load { ptr, i64, i64 }, ptr %t28 + store { ptr, i64, i64 } %t29, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.4670, i64 3, i64 0 }, ptr %a31 + %t32 = call i32 @finch_str_eq(ptr %a30, ptr %a31) + %t33 = icmp ne i32 %t32, 0 + br label %logic.from7279 +logic.from7279: + br i1 %t33, label %logic.rhs7280, label %logic.end7281 +logic.rhs7280: + %t34 = load %S.ast.Type, ptr %a3 + %t35 = call i1 @finch.gen.isNumber(%S.ast.Type %t34) + br label %logic.rend7282 +logic.rend7282: + br label %logic.end7281 +logic.end7281: + %t36 = phi i1 [ false, %logic.from7279 ], [ %t35, %logic.rend7282 ] + br label %logic.from7283 +logic.from7283: + br i1 %t36, label %logic.rhs7284, label %logic.end7285 +logic.rhs7284: + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic7286, label %ok7287 +panic7286: + call void @finch_panic(ptr @.str.4671, i64 4121, ptr @.str.4672) + unreachable +ok7287: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 41 + %t40 = load { ptr, i64, i64 }, ptr %t39 + %t41 = load %S.ast.Node, ptr %a2 + %t42 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t41) + store { ptr, i64, i64 } %t40, ptr %a43 + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + store { ptr, i64, i64 } %t42, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %logic.rend7288 +logic.rend7288: + br label %logic.end7285 +logic.end7285: + %t48 = phi i1 [ false, %logic.from7283 ], [ %t46, %logic.rend7288 ] + br i1 %t48, label %then7289, label %endif7291 +then7289: + %t49 = load ptr, ptr %a1 + %t50 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t49, { ptr, i64, i64 } { ptr @.str.4673, i64 17, i64 0 }) + store { ptr, i64, i64 } %t50, ptr %a51 + %t52 = load ptr, ptr %a1 + %t53 = load { ptr, i64, i64 }, ptr %a51 + call void @finch.gen.store(ptr %t52, { ptr, i64, i64 } { ptr @.str.4674, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.4675, i64 15, i64 0 }, { ptr, i64, i64 } %t53) + %t54 = load %S.ast.Type, ptr %a3 + %t55 = call i1 @finch.gen.isInt(%S.ast.Type %t54) + br i1 %t55, label %then7292, label %endif7294 +then7292: + %t56 = load ptr, ptr %a1 + %t57 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t56, { ptr, i64, i64 } { ptr @.str.4676, i64 3, i64 0 }) + store { ptr, i64, i64 } %t57, ptr %a58 + %t59 = load ptr, ptr %a1 + %t60 = load { ptr, i64, i64 }, ptr %a58 + call void @finch.gen.store(ptr %t59, { ptr, i64, i64 } { ptr @.str.4677, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.4678, i64 1, i64 0 }, { ptr, i64, i64 } %t60) + %t61 = load ptr, ptr %a1 + %t62 = load ptr, ptr %a1 + %t63 = load %S.gen.Val, ptr %a17 + %t64 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t62, %S.gen.Val %t63) + store { ptr, i64, i64 } { ptr @.str.4679, i64 32, i64 0 }, ptr %a66 + store { ptr, i64, i64 } %t64, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t69, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.4680, i64 6, i64 0 }, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t69, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a70 + %t75 = load { ptr, i64, i64 }, ptr %a58 + store { ptr, i64, i64 } %t74, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t74, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.4681, i64 6, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t85, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.4682, i64 1, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + %t97 = call { ptr, i64, i64 } @finch.gen.op(ptr %t61, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a98 + call void @finch_str_drop(ptr %a98) + store { ptr, i64, i64 } %t97, ptr %a99 + %t100 = load ptr, ptr %a1 + %t101 = load { ptr, i64, i64 }, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.4683, i64 12, i64 0 }, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.4684, i64 3, i64 0 }, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t105, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t100, { ptr, i64, i64 } %t110) + store { ptr, i64, i64 } %t110, ptr %a112 + call void @finch_str_drop(ptr %a112) + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic7295, label %ok7296 +panic7295: + call void @finch_panic(ptr @.str.4685, i64 4129, ptr @.str.4686) + unreachable +ok7296: + %t115 = getelementptr inbounds %S.gen.Gen, ptr %t113, i32 0, i32 42 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t111, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load ptr, ptr %a1 + %t119 = load { ptr, i64, i64 }, ptr %a51 + %t120 = call { ptr, i64, i64 } @finch.gen.load(ptr %t118, { ptr, i64, i64 } { ptr @.str.4687, i64 17, i64 0 }, { ptr, i64, i64 } %t119) + %t121 = load ptr, ptr %a1 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic7297, label %ok7298 +panic7297: + call void @finch_panic(ptr @.str.4688, i64 4130, ptr @.str.4689) + unreachable +ok7298: + %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 43 + %t124 = load { ptr, i64, i64 }, ptr %t123 + store { ptr, i64, i64 } %t120, ptr %t123 + store { ptr, i64, i64 } %t124, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load ptr, ptr %a1 + %t127 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t126, %S.gen.Val %t127) + %t128 = load ptr, ptr %a1 + %t129 = load ptr, ptr %a1 + %t130 = load { ptr, i64, i64 }, ptr %a58 + %t131 = call { ptr, i64, i64 } @finch.gen.load(ptr %t129, { ptr, i64, i64 } { ptr @.str.4690, i64 3, i64 0 }, { ptr, i64, i64 } %t130) + %t132 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4691, i64 3, i64 0 }) + %t133 = load %S.ast.Type, ptr %a3 + %t134 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t128, { ptr, i64, i64 } %t131, %S.ast.Type %t132, %S.ast.Type %t133) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + store %S.ast.Type %t132, ptr %a136 + call void @finch.drop.S_ast_Type(ptr %a136) + %t137 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t134, 0 + %t138 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t138, ptr %a139 + call void @finch.copy.S_ast_Type(ptr %a140, ptr %a139) + %t141 = load %S.ast.Type, ptr %a140 + %t142 = insertvalue %S.gen.Val %t137, %S.ast.Type %t141, 1 + call void @finch_str_drop(ptr %a99) + call void @finch_str_drop(ptr %a58) + call void @finch_str_drop(ptr %a51) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t142 +endif7294: + %t143 = load ptr, ptr %a1 + %t144 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t143, { ptr, i64, i64 } { ptr @.str.4692, i64 6, i64 0 }) + store { ptr, i64, i64 } %t144, ptr %a145 + %t146 = load ptr, ptr %a1 + %t147 = load { ptr, i64, i64 }, ptr %a145 + call void @finch.gen.store(ptr %t146, { ptr, i64, i64 } { ptr @.str.4693, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.4694, i64 3, i64 0 }, { ptr, i64, i64 } %t147) + %t148 = load ptr, ptr %a1 + %t149 = load ptr, ptr %a1 + %t150 = load %S.gen.Val, ptr %a17 + %t151 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t149, %S.gen.Val %t150) + store { ptr, i64, i64 } { ptr @.str.4695, i64 34, i64 0 }, ptr %a153 + store { ptr, i64, i64 } %t151, ptr %a154 + call void @finch_str_concat(ptr %a152, ptr %a153, ptr %a154) + store { ptr, i64, i64 } %t151, ptr %a155 + call void @finch_str_drop(ptr %a155) + %t156 = load { ptr, i64, i64 }, ptr %a152 + store { ptr, i64, i64 } %t156, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.4696, i64 6, i64 0 }, ptr %a159 + call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) + store { ptr, i64, i64 } %t156, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a157 + %t162 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t161, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t161, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t167, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4697, i64 6, i64 0 }, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t167, ptr %a171 + call void @finch_str_drop(ptr %a171) + %t172 = load { ptr, i64, i64 }, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t172, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t172, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.4698, i64 1, i64 0 }, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t178, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t148, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + store { ptr, i64, i64 } %t184, ptr %a186 + %t187 = load ptr, ptr %a1 + %t188 = load { ptr, i64, i64 }, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.4699, i64 12, i64 0 }, ptr %a190 + store { ptr, i64, i64 } %t188, ptr %a191 + call void @finch_str_concat(ptr %a189, ptr %a190, ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a189 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.4700, i64 3, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load { ptr, i64, i64 }, ptr %a193 + %t198 = call { ptr, i64, i64 } @finch.gen.op(ptr %t187, { ptr, i64, i64 } %t197) + store { ptr, i64, i64 } %t197, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load ptr, ptr %a1 + %t201 = icmp eq ptr %t200, null + br i1 %t201, label %panic7299, label %ok7300 +panic7299: + call void @finch_panic(ptr @.str.4701, i64 4137, ptr @.str.4702) + unreachable +ok7300: + %t202 = getelementptr inbounds %S.gen.Gen, ptr %t200, i32 0, i32 42 + %t203 = load { ptr, i64, i64 }, ptr %t202 + store { ptr, i64, i64 } %t198, ptr %t202 + store { ptr, i64, i64 } %t203, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load ptr, ptr %a1 + %t206 = load { ptr, i64, i64 }, ptr %a51 + %t207 = call { ptr, i64, i64 } @finch.gen.load(ptr %t205, { ptr, i64, i64 } { ptr @.str.4703, i64 17, i64 0 }, { ptr, i64, i64 } %t206) + %t208 = load ptr, ptr %a1 + %t209 = icmp eq ptr %t208, null + br i1 %t209, label %panic7301, label %ok7302 +panic7301: + call void @finch_panic(ptr @.str.4704, i64 4138, ptr @.str.4705) + unreachable +ok7302: + %t210 = getelementptr inbounds %S.gen.Gen, ptr %t208, i32 0, i32 43 + %t211 = load { ptr, i64, i64 }, ptr %t210 + store { ptr, i64, i64 } %t207, ptr %t210 + store { ptr, i64, i64 } %t211, ptr %a212 + call void @finch_str_drop(ptr %a212) + %t213 = load ptr, ptr %a1 + %t214 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t213, %S.gen.Val %t214) + %t215 = load ptr, ptr %a1 + %t216 = load ptr, ptr %a1 + %t217 = load { ptr, i64, i64 }, ptr %a145 + %t218 = call { ptr, i64, i64 } @finch.gen.load(ptr %t216, { ptr, i64, i64 } { ptr @.str.4706, i64 6, i64 0 }, { ptr, i64, i64 } %t217) + %t219 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4707, i64 5, i64 0 }) + %t220 = load %S.ast.Type, ptr %a3 + %t221 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t215, { ptr, i64, i64 } %t218, %S.ast.Type %t219, %S.ast.Type %t220) + store { ptr, i64, i64 } %t218, ptr %a222 + call void @finch_str_drop(ptr %a222) + store %S.ast.Type %t219, ptr %a223 + call void @finch.drop.S_ast_Type(ptr %a223) + %t224 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t221, 0 + %t225 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t225, ptr %a226 + call void @finch.copy.S_ast_Type(ptr %a227, ptr %a226) + %t228 = load %S.ast.Type, ptr %a227 + %t229 = insertvalue %S.gen.Val %t224, %S.ast.Type %t228, 1 + call void @finch_str_drop(ptr %a186) + call void @finch_str_drop(ptr %a145) + call void @finch_str_drop(ptr %a51) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t229 +endif7291: + %t230 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t231 = load { ptr, i64, i64 }, ptr %t230 + store { ptr, i64, i64 } %t231, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.4708, i64 3, i64 0 }, ptr %a233 + %t234 = call i32 @finch_str_eq(ptr %a232, ptr %a233) + %t235 = icmp ne i32 %t234, 0 + br label %logic.from7303 +logic.from7303: + br i1 %t235, label %logic.rhs7304, label %logic.end7305 +logic.rhs7304: + %t236 = load %S.ast.Type, ptr %a3 + %t237 = call i1 @finch.gen.isNumber(%S.ast.Type %t236) + br label %logic.rend7306 +logic.rend7306: + br label %logic.end7305 +logic.end7305: + %t238 = phi i1 [ false, %logic.from7303 ], [ %t237, %logic.rend7306 ] + br i1 %t238, label %then7307, label %endif7309 +then7307: + %t239 = load ptr, ptr %a1 + %t240 = load ptr, ptr %a1 + %t241 = icmp eq ptr %t240, null + br i1 %t241, label %panic7310, label %ok7311 +panic7310: + call void @finch_panic(ptr @.str.4709, i64 4143, ptr @.str.4710) + unreachable +ok7311: + %t242 = getelementptr inbounds %S.gen.Gen, ptr %t240, i32 0, i32 1 + %t243 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t244 = load i64, ptr %t243 + %t245 = load { ptr, i64, i64 }, ptr %t242 + %t246 = extractvalue { ptr, i64, i64 } %t245, 1 + %t247 = icmp uge i64 %t244, %t246 + br i1 %t247, label %range7312, label %inrange7313 +range7312: + call void @finch_panic_index(ptr @.str.4711, i64 4143, i64 %t244, i64 %t246) + unreachable +inrange7313: + %t248 = extractvalue { ptr, i64, i64 } %t245, 0 + %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t244 + %t250 = load { ptr, i64, i64 }, ptr %t249 + %t251 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t239, { ptr, i64, i64 } %t250) + store { ptr, i64, i64 } %t251, ptr %a252 + %t253 = load %S.ast.Type, ptr %a3 + %t254 = call i1 @finch.gen.isInt(%S.ast.Type %t253) + br i1 %t254, label %then7314, label %endif7316 +then7314: + %t255 = load ptr, ptr %a1 + %t256 = load ptr, ptr %a1 + %t257 = load %S.gen.Val, ptr %a17 + %t258 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t256, %S.gen.Val %t257) + store { ptr, i64, i64 } { ptr @.str.4712, i64 31, i64 0 }, ptr %a260 + store { ptr, i64, i64 } %t258, ptr %a261 + call void @finch_str_concat(ptr %a259, ptr %a260, ptr %a261) + store { ptr, i64, i64 } %t258, ptr %a262 + call void @finch_str_drop(ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a259 + store { ptr, i64, i64 } %t263, ptr %a265 + store { ptr, i64, i64 } { ptr @.str.4713, i64 6, i64 0 }, ptr %a266 + call void @finch_str_concat(ptr %a264, ptr %a265, ptr %a266) + store { ptr, i64, i64 } %t263, ptr %a267 + call void @finch_str_drop(ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a264 + %t269 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t268, ptr %a271 + store { ptr, i64, i64 } %t269, ptr %a272 + call void @finch_str_concat(ptr %a270, ptr %a271, ptr %a272) + store { ptr, i64, i64 } %t268, ptr %a273 + call void @finch_str_drop(ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a270 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.4714, i64 6, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + store { ptr, i64, i64 } %t274, ptr %a278 + call void @finch_str_drop(ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a275 + %t280 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t281 = load i64, ptr %t280 + call void @finch_str_from_int(ptr %a282, i64 %t281) + %t283 = load { ptr, i64, i64 }, ptr %a282 + store { ptr, i64, i64 } %t279, ptr %a285 + store { ptr, i64, i64 } %t283, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t279, ptr %a287 + call void @finch_str_drop(ptr %a287) + store { ptr, i64, i64 } %t283, ptr %a288 + call void @finch_str_drop(ptr %a288) + %t289 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t289, ptr %a291 + store { ptr, i64, i64 } { ptr @.str.4715, i64 1, i64 0 }, ptr %a292 + call void @finch_str_concat(ptr %a290, ptr %a291, ptr %a292) + store { ptr, i64, i64 } %t289, ptr %a293 + call void @finch_str_drop(ptr %a293) + %t294 = load { ptr, i64, i64 }, ptr %a290 + %t295 = call { ptr, i64, i64 } @finch.gen.op(ptr %t255, { ptr, i64, i64 } %t294) + store { ptr, i64, i64 } %t294, ptr %a296 + call void @finch_str_drop(ptr %a296) + store { ptr, i64, i64 } %t295, ptr %a297 + %t298 = load ptr, ptr %a1 + %t299 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t298, %S.gen.Val %t299) + %t300 = load ptr, ptr %a1 + %t301 = load { ptr, i64, i64 }, ptr %a297 + %t302 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4716, i64 3, i64 0 }) + %t303 = load %S.ast.Type, ptr %a3 + %t304 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t300, { ptr, i64, i64 } %t301, %S.ast.Type %t302, %S.ast.Type %t303) + store %S.ast.Type %t302, ptr %a305 + call void @finch.drop.S_ast_Type(ptr %a305) + %t306 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t304, 0 + %t307 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t307, ptr %a308 + call void @finch.copy.S_ast_Type(ptr %a309, ptr %a308) + %t310 = load %S.ast.Type, ptr %a309 + %t311 = insertvalue %S.gen.Val %t306, %S.ast.Type %t310, 1 + call void @finch_str_drop(ptr %a297) + call void @finch_str_drop(ptr %a252) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t311 +endif7316: + %t312 = load ptr, ptr %a1 + %t313 = load ptr, ptr %a1 + %t314 = load %S.gen.Val, ptr %a17 + %t315 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t313, %S.gen.Val %t314) + store { ptr, i64, i64 } { ptr @.str.4717, i64 36, i64 0 }, ptr %a317 + store { ptr, i64, i64 } %t315, ptr %a318 + call void @finch_str_concat(ptr %a316, ptr %a317, ptr %a318) + store { ptr, i64, i64 } %t315, ptr %a319 + call void @finch_str_drop(ptr %a319) + %t320 = load { ptr, i64, i64 }, ptr %a316 + store { ptr, i64, i64 } %t320, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.4718, i64 6, i64 0 }, ptr %a323 + call void @finch_str_concat(ptr %a321, ptr %a322, ptr %a323) + store { ptr, i64, i64 } %t320, ptr %a324 + call void @finch_str_drop(ptr %a324) + %t325 = load { ptr, i64, i64 }, ptr %a321 + %t326 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } %t325, ptr %a328 + store { ptr, i64, i64 } %t326, ptr %a329 + call void @finch_str_concat(ptr %a327, ptr %a328, ptr %a329) + store { ptr, i64, i64 } %t325, ptr %a330 + call void @finch_str_drop(ptr %a330) + %t331 = load { ptr, i64, i64 }, ptr %a327 + store { ptr, i64, i64 } %t331, ptr %a333 + store { ptr, i64, i64 } { ptr @.str.4719, i64 6, i64 0 }, ptr %a334 + call void @finch_str_concat(ptr %a332, ptr %a333, ptr %a334) + store { ptr, i64, i64 } %t331, ptr %a335 + call void @finch_str_drop(ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a332 + %t337 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t338 = load i64, ptr %t337 + call void @finch_str_from_int(ptr %a339, i64 %t338) + %t340 = load { ptr, i64, i64 }, ptr %a339 + store { ptr, i64, i64 } %t336, ptr %a342 + store { ptr, i64, i64 } %t340, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t336, ptr %a344 + call void @finch_str_drop(ptr %a344) + store { ptr, i64, i64 } %t340, ptr %a345 + call void @finch_str_drop(ptr %a345) + %t346 = load { ptr, i64, i64 }, ptr %a341 + store { ptr, i64, i64 } %t346, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.4720, i64 1, i64 0 }, ptr %a349 + call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) + store { ptr, i64, i64 } %t346, ptr %a350 + call void @finch_str_drop(ptr %a350) + %t351 = load { ptr, i64, i64 }, ptr %a347 + %t352 = call { ptr, i64, i64 } @finch.gen.op(ptr %t312, { ptr, i64, i64 } %t351) + store { ptr, i64, i64 } %t351, ptr %a353 + call void @finch_str_drop(ptr %a353) + store { ptr, i64, i64 } %t352, ptr %a354 + %t355 = load ptr, ptr %a1 + %t356 = load %S.gen.Val, ptr %a17 + call void @finch.gen.release(ptr %t355, %S.gen.Val %t356) + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a354 + %t359 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4721, i64 5, i64 0 }) + %t360 = load %S.ast.Type, ptr %a3 + %t361 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359, %S.ast.Type %t360) + store %S.ast.Type %t359, ptr %a362 + call void @finch.drop.S_ast_Type(ptr %a362) + %t363 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t361, 0 + %t364 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t364, ptr %a365 + call void @finch.copy.S_ast_Type(ptr %a366, ptr %a365) + %t367 = load %S.ast.Type, ptr %a366 + %t368 = insertvalue %S.gen.Val %t363, %S.ast.Type %t367, 1 + call void @finch_str_drop(ptr %a354) + call void @finch_str_drop(ptr %a252) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t368 +endif7309: + %t369 = load %S.ast.Type, ptr %a3 + %t370 = call i1 @finch.gen.isInt(%S.ast.Type %t369) + br label %logic.from7317 +logic.from7317: + br i1 %t370, label %logic.rhs7318, label %logic.end7319 +logic.rhs7318: + %t371 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t372 = load { ptr, i64, i64 }, ptr %t371 + store { ptr, i64, i64 } %t372, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.4722, i64 4, i64 0 }, ptr %a374 + %t375 = call i32 @finch_str_eq(ptr %a373, ptr %a374) + %t376 = icmp ne i32 %t375, 0 + br label %logic.rend7320 +logic.rend7320: + br label %logic.end7319 +logic.end7319: + %t377 = phi i1 [ false, %logic.from7317 ], [ %t376, %logic.rend7320 ] + br i1 %t377, label %then7321, label %endif7323 +then7321: + %t378 = load ptr, ptr %a1 + %t379 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t380 = load { ptr, i64, i64 }, ptr %t379 + %t381 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4723, i64 3, i64 0 }) + %t382 = load %S.ast.Type, ptr %a3 + %t383 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t378, { ptr, i64, i64 } %t380, %S.ast.Type %t381, %S.ast.Type %t382) + store %S.ast.Type %t381, ptr %a384 + call void @finch.drop.S_ast_Type(ptr %a384) + %t385 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t383, 0 + %t386 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t386, ptr %a387 + call void @finch.copy.S_ast_Type(ptr %a388, ptr %a387) + %t389 = load %S.ast.Type, ptr %a388 + %t390 = insertvalue %S.gen.Val %t385, %S.ast.Type %t389, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t390 +endif7323: + %t391 = load %S.ast.Type, ptr %a3 + %t392 = call i1 @finch.gen.isInt(%S.ast.Type %t391) + br label %logic.from7324 +logic.from7324: + br i1 %t392, label %logic.end7326, label %logic.rhs7325 +logic.rhs7325: + %t393 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t394 = load { ptr, i64, i64 }, ptr %t393 + store { ptr, i64, i64 } %t394, ptr %a395 + store { ptr, i64, i64 } { ptr @.str.4724, i64 4, i64 0 }, ptr %a396 + %t397 = call i32 @finch_str_eq(ptr %a395, ptr %a396) + %t398 = icmp ne i32 %t397, 0 + br label %logic.rend7327 +logic.rend7327: + br label %logic.end7326 +logic.end7326: + %t399 = phi i1 [ true, %logic.from7324 ], [ %t398, %logic.rend7327 ] + br i1 %t399, label %then7328, label %endif7330 +then7328: + %t400 = load %S.ast.Type, ptr %a23 + %t401 = call i1 @finch.gen.isInt(%S.ast.Type %t400) + br label %logic.from7331 +logic.from7331: + br i1 %t401, label %logic.end7333, label %logic.rhs7332 +logic.rhs7332: + %t402 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t403 = load { ptr, i64, i64 }, ptr %t402 + store { ptr, i64, i64 } %t403, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.4725, i64 4, i64 0 }, ptr %a405 + %t406 = call i32 @finch_str_eq(ptr %a404, ptr %a405) + %t407 = icmp ne i32 %t406, 0 + br label %logic.rend7334 +logic.rend7334: + br label %logic.end7333 +logic.end7333: + %t408 = phi i1 [ true, %logic.from7331 ], [ %t407, %logic.rend7334 ] + br i1 %t408, label %then7335, label %endif7337 +then7335: + %t409 = load ptr, ptr %a1 + %t410 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t411 = load { ptr, i64, i64 }, ptr %t410 + %t412 = load %S.ast.Type, ptr %a23 + %t413 = load %S.ast.Type, ptr %a3 + %t414 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t409, { ptr, i64, i64 } %t411, %S.ast.Type %t412, %S.ast.Type %t413) + %t415 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t414, 0 + %t416 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t416, ptr %a417 + call void @finch.copy.S_ast_Type(ptr %a418, ptr %a417) + %t419 = load %S.ast.Type, ptr %a418 + %t420 = insertvalue %S.gen.Val %t415, %S.ast.Type %t419, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t420 +endif7337: + %t421 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t422 = load { ptr, i64, i64 }, ptr %t421 + store { ptr, i64, i64 } %t422, ptr %a423 + store { ptr, i64, i64 } { ptr @.str.4726, i64 4, i64 0 }, ptr %a424 + %t425 = call i32 @finch_str_eq(ptr %a423, ptr %a424) + %t426 = icmp ne i32 %t425, 0 + br i1 %t426, label %then7338, label %endif7340 +then7338: + %t427 = load ptr, ptr %a1 + %t428 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t429 = load { ptr, i64, i64 }, ptr %t428 + store { ptr, i64, i64 } { ptr @.str.4727, i64 8, i64 0 }, ptr %a431 + store { ptr, i64, i64 } %t429, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + %t433 = load { ptr, i64, i64 }, ptr %a430 + store { ptr, i64, i64 } %t433, ptr %a435 + store { ptr, i64, i64 } { ptr @.str.4728, i64 4, i64 0 }, ptr %a436 + call void @finch_str_concat(ptr %a434, ptr %a435, ptr %a436) + store { ptr, i64, i64 } %t433, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a434 + %t439 = load ptr, ptr %a1 + %t440 = load %S.ast.Type, ptr %a3 + %t441 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t439, %S.ast.Type %t440) + store { ptr, i64, i64 } %t438, ptr %a443 + store { ptr, i64, i64 } %t441, ptr %a444 + call void @finch_str_concat(ptr %a442, ptr %a443, ptr %a444) + store { ptr, i64, i64 } %t438, ptr %a445 + call void @finch_str_drop(ptr %a445) + store { ptr, i64, i64 } %t441, ptr %a446 + call void @finch_str_drop(ptr %a446) + %t447 = load { ptr, i64, i64 }, ptr %a442 + %t448 = call { ptr, i64, i64 } @finch.gen.op(ptr %t427, { ptr, i64, i64 } %t447) + store { ptr, i64, i64 } %t447, ptr %a449 + call void @finch_str_drop(ptr %a449) + %t450 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t448, 0 + %t451 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t451, ptr %a452 + call void @finch.copy.S_ast_Type(ptr %a453, ptr %a452) + %t454 = load %S.ast.Type, ptr %a453 + %t455 = insertvalue %S.gen.Val %t450, %S.ast.Type %t454, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t455 +endif7340: + %t456 = load %S.ast.Type, ptr %a23 + %t457 = call i1 @finch.gen.isFloat(%S.ast.Type %t456) + br label %logic.from7341 +logic.from7341: + br i1 %t457, label %logic.rhs7342, label %logic.end7343 +logic.rhs7342: + %t458 = load %S.ast.Type, ptr %a3 + %t459 = call i1 @finch.gen.isInt(%S.ast.Type %t458) + br label %logic.rend7344 +logic.rend7344: + br label %logic.end7343 +logic.end7343: + %t460 = phi i1 [ false, %logic.from7341 ], [ %t459, %logic.rend7344 ] + br i1 %t460, label %then7345, label %endif7347 +then7345: + store { ptr, i64, i64 } { ptr @.str.4729, i64 6, i64 0 }, ptr %a461 + %t462 = load %S.ast.Type, ptr %a3 + %t463 = call i1 @finch.gen.isSigned(%S.ast.Type %t462) + br i1 %t463, label %then7348, label %endif7350 +then7348: + %t464 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } { ptr @.str.4730, i64 6, i64 0 }, ptr %a461 + store { ptr, i64, i64 } %t464, ptr %a465 + call void @finch_str_drop(ptr %a465) + br label %endif7350 +endif7350: + %t466 = load ptr, ptr %a1 + %t467 = load { ptr, i64, i64 }, ptr %a461 + store { ptr, i64, i64 } %t467, ptr %a469 + store { ptr, i64, i64 } { ptr @.str.4731, i64 1, i64 0 }, ptr %a470 + call void @finch_str_concat(ptr %a468, ptr %a469, ptr %a470) + %t471 = load { ptr, i64, i64 }, ptr %a468 + %t472 = load ptr, ptr %a1 + %t473 = load %S.ast.Type, ptr %a23 + %t474 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t472, %S.ast.Type %t473) + store { ptr, i64, i64 } %t471, ptr %a476 + store { ptr, i64, i64 } %t474, ptr %a477 + call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) + store { ptr, i64, i64 } %t471, ptr %a478 + call void @finch_str_drop(ptr %a478) + store { ptr, i64, i64 } %t474, ptr %a479 + call void @finch_str_drop(ptr %a479) + %t480 = load { ptr, i64, i64 }, ptr %a475 + store { ptr, i64, i64 } %t480, ptr %a482 + store { ptr, i64, i64 } { ptr @.str.4732, i64 1, i64 0 }, ptr %a483 + call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) + store { ptr, i64, i64 } %t480, ptr %a484 + call void @finch_str_drop(ptr %a484) + %t485 = load { ptr, i64, i64 }, ptr %a481 + %t486 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t487 = load { ptr, i64, i64 }, ptr %t486 + store { ptr, i64, i64 } %t485, ptr %a489 + store { ptr, i64, i64 } %t487, ptr %a490 + call void @finch_str_concat(ptr %a488, ptr %a489, ptr %a490) + store { ptr, i64, i64 } %t485, ptr %a491 + call void @finch_str_drop(ptr %a491) + %t492 = load { ptr, i64, i64 }, ptr %a488 + store { ptr, i64, i64 } %t492, ptr %a494 + store { ptr, i64, i64 } { ptr @.str.4733, i64 4, i64 0 }, ptr %a495 + call void @finch_str_concat(ptr %a493, ptr %a494, ptr %a495) + store { ptr, i64, i64 } %t492, ptr %a496 + call void @finch_str_drop(ptr %a496) + %t497 = load { ptr, i64, i64 }, ptr %a493 + %t498 = load ptr, ptr %a1 + %t499 = load %S.ast.Type, ptr %a3 + %t500 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t498, %S.ast.Type %t499) + store { ptr, i64, i64 } %t497, ptr %a502 + store { ptr, i64, i64 } %t500, ptr %a503 + call void @finch_str_concat(ptr %a501, ptr %a502, ptr %a503) + store { ptr, i64, i64 } %t497, ptr %a504 + call void @finch_str_drop(ptr %a504) + store { ptr, i64, i64 } %t500, ptr %a505 + call void @finch_str_drop(ptr %a505) + %t506 = load { ptr, i64, i64 }, ptr %a501 + %t507 = call { ptr, i64, i64 } @finch.gen.op(ptr %t466, { ptr, i64, i64 } %t506) + store { ptr, i64, i64 } %t506, ptr %a508 + call void @finch_str_drop(ptr %a508) + %t509 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t507, 0 + %t510 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t510, ptr %a511 + call void @finch.copy.S_ast_Type(ptr %a512, ptr %a511) + %t513 = load %S.ast.Type, ptr %a512 + %t514 = insertvalue %S.gen.Val %t509, %S.ast.Type %t513, 1 + call void @finch_str_drop(ptr %a461) + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t514 +endif7347: + br label %endif7330 +endif7330: + %t515 = load %S.ast.Type, ptr %a3 + %t516 = call i1 @finch.gen.isFloat(%S.ast.Type %t515) + br i1 %t516, label %then7351, label %endif7353 +then7351: + %t517 = load %S.ast.Type, ptr %a23 + %t518 = call i1 @finch.gen.isInt(%S.ast.Type %t517) + br i1 %t518, label %then7354, label %endif7356 +then7354: + %t519 = load ptr, ptr %a1 + %t520 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t521 = load { ptr, i64, i64 }, ptr %t520 + %t522 = load %S.ast.Type, ptr %a23 + %t523 = load %S.ast.Type, ptr %a3 + %t524 = call { ptr, i64, i64 } @finch.gen.intToFloat(ptr %t519, { ptr, i64, i64 } %t521, %S.ast.Type %t522, %S.ast.Type %t523) + %t525 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t524, 0 + %t526 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t526, ptr %a527 + call void @finch.copy.S_ast_Type(ptr %a528, ptr %a527) + %t529 = load %S.ast.Type, ptr %a528 + %t530 = insertvalue %S.gen.Val %t525, %S.ast.Type %t529, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t530 +endif7356: + %t531 = load %S.ast.Type, ptr %a23 + %t532 = call i1 @finch.gen.isFloat(%S.ast.Type %t531) + br i1 %t532, label %then7357, label %endif7359 +then7357: + %t533 = load ptr, ptr %a1 + %t534 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t535 = load { ptr, i64, i64 }, ptr %t534 + %t536 = load %S.ast.Type, ptr %a23 + %t537 = load %S.ast.Type, ptr %a3 + %t538 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t533, { ptr, i64, i64 } %t535, %S.ast.Type %t536, %S.ast.Type %t537) + %t539 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t538, 0 + %t540 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t540, ptr %a541 + call void @finch.copy.S_ast_Type(ptr %a542, ptr %a541) + %t543 = load %S.ast.Type, ptr %a542 + %t544 = insertvalue %S.gen.Val %t539, %S.ast.Type %t543, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t544 +endif7359: + br label %endif7353 +endif7353: + %t545 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t546 = load { ptr, i64, i64 }, ptr %t545 + store { ptr, i64, i64 } %t546, ptr %a547 + store { ptr, i64, i64 } { ptr @.str.4734, i64 4, i64 0 }, ptr %a548 + %t549 = call i32 @finch_str_eq(ptr %a547, ptr %a548) + %t550 = icmp ne i32 %t549, 0 + br label %logic.from7360 +logic.from7360: + br i1 %t550, label %logic.rhs7361, label %logic.end7362 +logic.rhs7361: + %t551 = load %S.ast.Type, ptr %a23 + %t552 = call i1 @finch.gen.isInt(%S.ast.Type %t551) + br label %logic.rend7363 +logic.rend7363: + br label %logic.end7362 +logic.end7362: + %t553 = phi i1 [ false, %logic.from7360 ], [ %t552, %logic.rend7363 ] + br i1 %t553, label %then7364, label %endif7366 +then7364: + %t554 = load ptr, ptr %a1 + %t555 = load ptr, ptr %a1 + %t556 = load %S.ast.Type, ptr %a23 + %t557 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t555, %S.ast.Type %t556) + store { ptr, i64, i64 } { ptr @.str.4735, i64 8, i64 0 }, ptr %a559 + store { ptr, i64, i64 } %t557, ptr %a560 + call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) + store { ptr, i64, i64 } %t557, ptr %a561 + call void @finch_str_drop(ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a558 + store { ptr, i64, i64 } %t562, ptr %a564 + store { ptr, i64, i64 } { ptr @.str.4736, i64 1, i64 0 }, ptr %a565 + call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) + store { ptr, i64, i64 } %t562, ptr %a566 + call void @finch_str_drop(ptr %a566) + %t567 = load { ptr, i64, i64 }, ptr %a563 + %t568 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t569 = load { ptr, i64, i64 }, ptr %t568 + store { ptr, i64, i64 } %t567, ptr %a571 + store { ptr, i64, i64 } %t569, ptr %a572 + call void @finch_str_concat(ptr %a570, ptr %a571, ptr %a572) + store { ptr, i64, i64 } %t567, ptr %a573 + call void @finch_str_drop(ptr %a573) + %t574 = load { ptr, i64, i64 }, ptr %a570 + store { ptr, i64, i64 } %t574, ptr %a576 + store { ptr, i64, i64 } { ptr @.str.4737, i64 3, i64 0 }, ptr %a577 + call void @finch_str_concat(ptr %a575, ptr %a576, ptr %a577) + store { ptr, i64, i64 } %t574, ptr %a578 + call void @finch_str_drop(ptr %a578) + %t579 = load { ptr, i64, i64 }, ptr %a575 + %t580 = call { ptr, i64, i64 } @finch.gen.op(ptr %t554, { ptr, i64, i64 } %t579) + store { ptr, i64, i64 } %t579, ptr %a581 + call void @finch_str_drop(ptr %a581) + %t582 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t580, 0 + %t583 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t583, ptr %a584 + call void @finch.copy.S_ast_Type(ptr %a585, ptr %a584) + %t586 = load %S.ast.Type, ptr %a585 + %t587 = insertvalue %S.gen.Val %t582, %S.ast.Type %t586, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t587 +endif7366: + %t588 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t589 = load { ptr, i64, i64 }, ptr %t588 + store { ptr, i64, i64 } %t589, ptr %a590 + store { ptr, i64, i64 } { ptr @.str.4738, i64 3, i64 0 }, ptr %a591 + %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) + %t593 = icmp ne i32 %t592, 0 + br label %logic.from7367 +logic.from7367: + br i1 %t593, label %logic.rhs7368, label %logic.end7369 +logic.rhs7368: + %t594 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t595 = load { ptr, i64, i64 }, ptr %t594 + store { ptr, i64, i64 } %t595, ptr %a596 + store { ptr, i64, i64 } { ptr @.str.4739, i64 3, i64 0 }, ptr %a597 + %t598 = call i32 @finch_str_eq(ptr %a596, ptr %a597) + %t599 = icmp ne i32 %t598, 0 + br label %logic.from7370 +logic.from7370: + br i1 %t599, label %logic.end7372, label %logic.rhs7371 +logic.rhs7371: + %t600 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t601 = load { ptr, i64, i64 }, ptr %t600 + store { ptr, i64, i64 } %t601, ptr %a602 + store { ptr, i64, i64 } { ptr @.str.4740, i64 4, i64 0 }, ptr %a603 + %t604 = call i32 @finch_str_eq(ptr %a602, ptr %a603) + %t605 = icmp ne i32 %t604, 0 + br label %logic.rend7373 +logic.rend7373: + br label %logic.end7372 +logic.end7372: + %t606 = phi i1 [ true, %logic.from7370 ], [ %t605, %logic.rend7373 ] + br label %logic.rend7374 +logic.rend7374: + br label %logic.end7369 +logic.end7369: + %t607 = phi i1 [ false, %logic.from7367 ], [ %t606, %logic.rend7374 ] + br i1 %t607, label %then7375, label %endif7377 +then7375: + %t608 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t609 = load { ptr, i64, i64 }, ptr %t608 + store { ptr, i64, i64 } %t609, ptr %a610 + call void @finch_str_copy(ptr %a611, ptr %a610) + %t612 = load { ptr, i64, i64 }, ptr %a611 + %t613 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t612, 0 + %t614 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t614, ptr %a615 + call void @finch.copy.S_ast_Type(ptr %a616, ptr %a615) + %t617 = load %S.ast.Type, ptr %a616 + %t618 = insertvalue %S.gen.Val %t613, %S.ast.Type %t617, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t618 +endif7377: + %t619 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t620 = load { ptr, i64, i64 }, ptr %t619 + store { ptr, i64, i64 } %t620, ptr %a621 + store { ptr, i64, i64 } { ptr @.str.4741, i64 3, i64 0 }, ptr %a622 + %t623 = call i32 @finch_str_eq(ptr %a621, ptr %a622) + %t624 = icmp ne i32 %t623, 0 + br label %logic.from7378 +logic.from7378: + br i1 %t624, label %logic.rhs7379, label %logic.end7380 +logic.rhs7379: + %t625 = load %S.ast.Type, ptr %a23 + %t626 = call i1 @finch.gen.isInt(%S.ast.Type %t625) + br label %logic.rend7381 +logic.rend7381: + br label %logic.end7380 +logic.end7380: + %t627 = phi i1 [ false, %logic.from7378 ], [ %t626, %logic.rend7381 ] + br i1 %t627, label %then7382, label %endif7384 +then7382: + %t628 = load ptr, ptr %a1 + %t629 = load ptr, ptr %a1 + %t630 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t631 = load { ptr, i64, i64 }, ptr %t630 + %t632 = load %S.ast.Type, ptr %a23 + %t633 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4743, i64 3, i64 0 }) + %t634 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t629, { ptr, i64, i64 } %t631, %S.ast.Type %t632, %S.ast.Type %t633) + store %S.ast.Type %t633, ptr %a635 + call void @finch.drop.S_ast_Type(ptr %a635) + store { ptr, i64, i64 } { ptr @.str.4742, i64 13, i64 0 }, ptr %a637 + store { ptr, i64, i64 } %t634, ptr %a638 + call void @finch_str_concat(ptr %a636, ptr %a637, ptr %a638) + store { ptr, i64, i64 } %t634, ptr %a639 + call void @finch_str_drop(ptr %a639) + %t640 = load { ptr, i64, i64 }, ptr %a636 + store { ptr, i64, i64 } %t640, ptr %a642 + store { ptr, i64, i64 } { ptr @.str.4744, i64 7, i64 0 }, ptr %a643 + call void @finch_str_concat(ptr %a641, ptr %a642, ptr %a643) + store { ptr, i64, i64 } %t640, ptr %a644 + call void @finch_str_drop(ptr %a644) + %t645 = load { ptr, i64, i64 }, ptr %a641 + %t646 = call { ptr, i64, i64 } @finch.gen.op(ptr %t628, { ptr, i64, i64 } %t645) + store { ptr, i64, i64 } %t645, ptr %a647 + call void @finch_str_drop(ptr %a647) + %t648 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t646, 0 + %t649 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t649, ptr %a650 + call void @finch.copy.S_ast_Type(ptr %a651, ptr %a650) + %t652 = load %S.ast.Type, ptr %a651 + %t653 = insertvalue %S.gen.Val %t648, %S.ast.Type %t652, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t653 +endif7384: + %t654 = load %S.ast.Type, ptr %a3 + %t655 = call i1 @finch.gen.isInt(%S.ast.Type %t654) + br label %logic.from7385 +logic.from7385: + br i1 %t655, label %logic.rhs7386, label %logic.end7387 +logic.rhs7386: + %t656 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t657 = load { ptr, i64, i64 }, ptr %t656 + store { ptr, i64, i64 } %t657, ptr %a658 + store { ptr, i64, i64 } { ptr @.str.4745, i64 3, i64 0 }, ptr %a659 + %t660 = call i32 @finch_str_eq(ptr %a658, ptr %a659) + %t661 = icmp ne i32 %t660, 0 + br label %logic.rend7388 +logic.rend7388: + br label %logic.end7387 +logic.end7387: + %t662 = phi i1 [ false, %logic.from7385 ], [ %t661, %logic.rend7388 ] + br i1 %t662, label %then7389, label %endif7391 +then7389: + %t663 = load ptr, ptr %a1 + %t664 = getelementptr inbounds %S.gen.Val, ptr %a17, i32 0, i32 0 + %t665 = load { ptr, i64, i64 }, ptr %t664 + store { ptr, i64, i64 } { ptr @.str.4746, i64 13, i64 0 }, ptr %a667 + store { ptr, i64, i64 } %t665, ptr %a668 + call void @finch_str_concat(ptr %a666, ptr %a667, ptr %a668) + %t669 = load { ptr, i64, i64 }, ptr %a666 + store { ptr, i64, i64 } %t669, ptr %a671 + store { ptr, i64, i64 } { ptr @.str.4747, i64 4, i64 0 }, ptr %a672 + call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672) + store { ptr, i64, i64 } %t669, ptr %a673 + call void @finch_str_drop(ptr %a673) + %t674 = load { ptr, i64, i64 }, ptr %a670 + %t675 = load ptr, ptr %a1 + %t676 = load %S.ast.Type, ptr %a3 + %t677 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t675, %S.ast.Type %t676) + store { ptr, i64, i64 } %t674, ptr %a679 + store { ptr, i64, i64 } %t677, ptr %a680 + call void @finch_str_concat(ptr %a678, ptr %a679, ptr %a680) + store { ptr, i64, i64 } %t674, ptr %a681 + call void @finch_str_drop(ptr %a681) + store { ptr, i64, i64 } %t677, ptr %a682 + call void @finch_str_drop(ptr %a682) + %t683 = load { ptr, i64, i64 }, ptr %a678 + %t684 = call { ptr, i64, i64 } @finch.gen.op(ptr %t663, { ptr, i64, i64 } %t683) + store { ptr, i64, i64 } %t683, ptr %a685 + call void @finch_str_drop(ptr %a685) + %t686 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t684, 0 + %t687 = load %S.ast.Type, ptr %a3 + store %S.ast.Type %t687, ptr %a688 + call void @finch.copy.S_ast_Type(ptr %a689, ptr %a688) + %t690 = load %S.ast.Type, ptr %a689 + %t691 = insertvalue %S.gen.Val %t686, %S.ast.Type %t690, 1 + call void @finch.drop.S_ast_Type(ptr %a23) + call void @finch.drop.S_gen_Val(ptr %a17) + ret %S.gen.Val %t691 +endif7391: + %t692 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 0 + %t693 = load { ptr, i64, i64 }, ptr %t692 + store { ptr, i64, i64 } %t693, ptr %a694 + store { ptr, i64, i64 } { ptr @.str.4748, i64 3, i64 0 }, ptr %a695 + %t696 = call i32 @finch_str_eq(ptr %a694, ptr %a695) + %t697 = icmp ne i32 %t696, 0 + br label %logic.from7392 +logic.from7392: + br i1 %t697, label %logic.rhs7393, label %logic.end7394 +logic.rhs7393: + %t698 = getelementptr inbounds %S.ast.Type, ptr %a23, i32 0, i32 0 + %t699 = load { ptr, i64, i64 }, ptr %t698 + store { ptr, i64, i64 } %t699, ptr %a700 + store { ptr, i64, i64 } { ptr @.str.4749, i64 3, i64 0 }, ptr %a701 + %t702 = call i32 @finch_str_eq(ptr %a700, ptr %a701) + %t703 = icmp ne i32 %t702, 0 + br label %logic.rend7395 +logic.rend7395: + br label %logic.end7394 +logic.end7394: + %t704 = phi i1 [ false, %logic.from7392 ], [ %t703, %logic.rend7395 ] + br i1 %t704, label %then7396, label %endif7398 +then7396: + %t705 = load ptr, ptr %a1 + %t706 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t707 = load { ptr, i64, i64 }, ptr %t706 + %t708 = extractvalue { ptr, i64, i64 } %t707, 1 + %t709 = icmp uge i64 0, %t708 + br i1 %t709, label %range7399, label %inrange7400 +range7399: + call void @finch_panic_index(ptr @.str.4750, i64 4192, i64 0, i64 %t708) + unreachable +inrange7400: + %t710 = extractvalue { ptr, i64, i64 } %t707, 0 + %t711 = getelementptr inbounds %S.ast.Node, ptr %t710, i64 0 + %t712 = load %S.ast.Node, ptr %t711 + call void @finch.gen.fail(ptr %t705, %S.ast.Node %t712, { ptr, i64, i64 } { ptr @.str.4751, i64 70, i64 0 }) + br label %endif7398 +endif7398: + %t713 = load ptr, ptr %a1 + %t714 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t715 = load { ptr, i64, i64 }, ptr %t714 + %t716 = extractvalue { ptr, i64, i64 } %t715, 1 + %t717 = icmp uge i64 0, %t716 + br i1 %t717, label %range7401, label %inrange7402 +range7401: + call void @finch_panic_index(ptr @.str.4752, i64 4194, i64 0, i64 %t716) + unreachable +inrange7402: + %t718 = extractvalue { ptr, i64, i64 } %t715, 0 + %t719 = getelementptr inbounds %S.ast.Node, ptr %t718, i64 0 + %t720 = load %S.ast.Node, ptr %t719 + %t721 = load %S.ast.Type, ptr %a23 + %t722 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t721) + store { ptr, i64, i64 } { ptr @.str.4753, i64 11, i64 0 }, ptr %a724 + store { ptr, i64, i64 } %t722, ptr %a725 + call void @finch_str_concat(ptr %a723, ptr %a724, ptr %a725) + store { ptr, i64, i64 } %t722, ptr %a726 + call void @finch_str_drop(ptr %a726) + %t727 = load { ptr, i64, i64 }, ptr %a723 + store { ptr, i64, i64 } %t727, ptr %a729 + store { ptr, i64, i64 } { ptr @.str.4754, i64 6, i64 0 }, ptr %a730 + call void @finch_str_concat(ptr %a728, ptr %a729, ptr %a730) + store { ptr, i64, i64 } %t727, ptr %a731 + call void @finch_str_drop(ptr %a731) + %t732 = load { ptr, i64, i64 }, ptr %a728 + %t733 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t734 = load { ptr, i64, i64 }, ptr %t733 + store { ptr, i64, i64 } %t732, ptr %a736 + store { ptr, i64, i64 } %t734, ptr %a737 + call void @finch_str_concat(ptr %a735, ptr %a736, ptr %a737) + store { ptr, i64, i64 } %t732, ptr %a738 + call void @finch_str_drop(ptr %a738) + %t739 = load { ptr, i64, i64 }, ptr %a735 + call void @finch.gen.fail(ptr %t713, %S.ast.Node %t720, { ptr, i64, i64 } %t739) + store { ptr, i64, i64 } %t739, ptr %a740 + call void @finch_str_drop(ptr %a740) + %t741 = load %S.gen.Val, ptr %a17 + call void @finch.drop.S_ast_Type(ptr %a23) + ret %S.gen.Val %t741 +} + +define internal i64 @finch.gen.sizeBytes(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.4755, i64 6, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then7403, label %endif7405 +then7403: + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic7406, label %ok7407 +panic7406: + call void @finch_panic(ptr @.str.4756, i64 4227, ptr @.str.4757) + unreachable +ok7407: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 16 + %t12 = load ptr, ptr %a1 + %t13 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = call i64 @finch.gen.findStruct(ptr %t12, { ptr, i64, i64 } %t14, { ptr, i64, i64 } %t16) + %t18 = load { ptr, i64, i64 }, ptr %t11 + %t19 = extractvalue { ptr, i64, i64 } %t18, 1 + %t20 = icmp uge i64 %t17, %t19 + br i1 %t20, label %range7408, label %inrange7409 +range7408: + call void @finch_panic_index(ptr @.str.4758, i64 4227, i64 %t17, i64 %t19) + unreachable +inrange7409: + %t21 = extractvalue { ptr, i64, i64 } %t18, 0 + %t22 = getelementptr inbounds %S.gen.StructDef, ptr %t21, i64 %t17 + %t23 = getelementptr inbounds %S.gen.StructDef, ptr %t22, i32 0, i32 9 + %t24 = load i64, ptr %t23 + ret i64 %t24 +endif7405: + %t25 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.4759, i64 5, i64 0 }, ptr %a28 + %t29 = call i32 @finch_str_eq(ptr %a27, ptr %a28) + %t30 = icmp ne i32 %t29, 0 + br i1 %t30, label %then7410, label %endif7412 +then7410: + %t31 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t32 = load i64, ptr %t31 + %t33 = load ptr, ptr %a1 + %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 0, %t36 + br i1 %t37, label %range7413, label %inrange7414 +range7413: + call void @finch_panic_index(ptr @.str.4760, i64 4230, i64 0, i64 %t36) + unreachable +inrange7414: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds %S.ast.Type, ptr %t38, i64 0 + %t40 = load %S.ast.Type, ptr %t39 + %t41 = call i64 @finch.gen.sizeBytes(ptr %t33, %S.ast.Type %t40) + %t42 = mul i64 %t32, %t41 + ret i64 %t42 +endif7412: + %t43 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t44 = load { ptr, i64, i64 }, ptr %t43 + store { ptr, i64, i64 } %t44, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.4761, i64 3, i64 0 }, ptr %a46 + %t47 = call i32 @finch_str_eq(ptr %a45, ptr %a46) + %t48 = icmp ne i32 %t47, 0 + br label %logic.from7415 +logic.from7415: + br i1 %t48, label %logic.end7417, label %logic.rhs7416 +logic.rhs7416: + %t49 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + store { ptr, i64, i64 } { ptr @.str.4762, i64 3, i64 0 }, ptr %a52 + %t53 = call i32 @finch_str_eq(ptr %a51, ptr %a52) + %t54 = icmp ne i32 %t53, 0 + br label %logic.rend7418 +logic.rend7418: + br label %logic.end7417 +logic.end7417: + %t55 = phi i1 [ true, %logic.from7415 ], [ %t54, %logic.rend7418 ] + br i1 %t55, label %then7419, label %endif7421 +then7419: + ret i64 8 +endif7421: + %t56 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t57 = load { ptr, i64, i64 }, ptr %t56 + store { ptr, i64, i64 } %t57, ptr %a58 + store { ptr, i64, i64 } { ptr @.str.4763, i64 5, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_eq(ptr %a58, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br i1 %t61, label %then7422, label %endif7424 +then7422: + ret i64 8 +endif7424: + %t62 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t63 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t63, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.4764, i64 3, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_eq(ptr %a64, ptr %a65) + %t67 = icmp ne i32 %t66, 0 + br i1 %t67, label %then7425, label %endif7427 +then7425: + ret i64 4 +endif7427: + %t68 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t69 = load { ptr, i64, i64 }, ptr %t68 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.4765, i64 4, i64 0 }, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %then7428, label %endif7430 +then7428: + ret i64 1 +endif7430: + %t74 = load %S.ast.Type, ptr %a2 + %t75 = call i64 @finch.gen.bitsOf(%S.ast.Type %t74) + %t76 = sdiv i64 %t75, 8 + ret i64 %t76 +} + +define internal void @finch.drop.arr_S_gen_Leaf(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.leavesOf(ptr %p0, %S.ast.Type %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca %S.gen.StructDef, align 16 + %a27 = alloca %S.gen.StructDef, align 16 + %a29 = alloca %S.gen.StructDef, align 16 + %a33 = alloca i64, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca i64, align 16 + %a65 = alloca %S.gen.Leaf, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca i64, align 16 + %a94 = alloca i64, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca i64, align 16 + %a120 = alloca %S.gen.Leaf, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store i64 %p2, ptr %a3 + store { ptr, i64, i64 } zeroinitializer, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.4766, i64 6, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp ne i32 %t9, 0 + br i1 %t10, label %then7431, label %else7432 +then7431: + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic7434, label %ok7435 +panic7434: + call void @finch_panic(ptr @.str.4767, i64 4251, ptr @.str.4768) + unreachable +ok7435: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 16 + %t14 = load ptr, ptr %a1 + %t15 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t18 = load { ptr, i64, i64 }, ptr %t17 + %t19 = call i64 @finch.gen.findStruct(ptr %t14, { ptr, i64, i64 } %t16, { ptr, i64, i64 } %t18) + %t20 = load { ptr, i64, i64 }, ptr %t13 + %t21 = extractvalue { ptr, i64, i64 } %t20, 1 + %t22 = icmp uge i64 %t19, %t21 + br i1 %t22, label %range7436, label %inrange7437 +range7436: + call void @finch_panic_index(ptr @.str.4769, i64 4251, i64 %t19, i64 %t21) + unreachable +inrange7437: + %t23 = extractvalue { ptr, i64, i64 } %t20, 0 + %t24 = getelementptr inbounds %S.gen.StructDef, ptr %t23, i64 %t19 + %t25 = load %S.gen.StructDef, ptr %t24 + store %S.gen.StructDef %t25, ptr %a26 + call void @finch.copy.S_gen_StructDef(ptr %a27, ptr %a26) + %t28 = load %S.gen.StructDef, ptr %a27 + store %S.gen.StructDef %t28, ptr %a29 + %t30 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i32 0, i32 1 + %t32 = load i64, ptr %t31 + store i64 0, ptr %a33 + br label %for.cond7438 +for.cond7438: + %t34 = load i64, ptr %a33 + %t35 = icmp slt i64 %t34, %t32 + br i1 %t35, label %for.body7439, label %for.end7441 +for.body7439: + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 12 + %t38 = load i64, ptr %a33 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range7442, label %inrange7443 +range7442: + call void @finch_panic_index(ptr @.str.4770, i64 4253, i64 %t38, i64 %t40) + unreachable +inrange7443: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.ast.Type, ptr %t42, i64 %t38 + %t44 = load %S.ast.Type, ptr %t43 + %t45 = load i64, ptr %a3 + %t46 = getelementptr inbounds %S.gen.StructDef, ptr %a29, i32 0, i32 4 + %t47 = load i64, ptr %a33 + %t48 = load { ptr, i64, i64 }, ptr %t46 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range7444, label %inrange7445 +range7444: + call void @finch_panic_index(ptr @.str.4771, i64 4253, i64 %t47, i64 %t49) + unreachable +inrange7445: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds i64, ptr %t51, i64 %t47 + %t53 = load i64, ptr %t52 + %t54 = add i64 %t45, %t53 + %t55 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t36, %S.ast.Type %t44, i64 %t54) + store { ptr, i64, i64 } %t55, ptr %a56 + store i64 0, ptr %a57 + br label %each.cond7446 +each.cond7446: + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a56, i32 0, i32 1 + %t59 = load i64, ptr %t58 + %t60 = load i64, ptr %a57 + %t61 = icmp slt i64 %t60, %t59 + br i1 %t61, label %each.body7447, label %each.end7449 +each.body7447: + %t62 = load ptr, ptr %a56 + %t63 = getelementptr inbounds %S.gen.Leaf, ptr %t62, i64 %t60 + %t64 = load %S.gen.Leaf, ptr %t63 + store %S.gen.Leaf %t64, ptr %a65 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t67 = load %S.gen.Leaf, ptr %a65 + %t68 = load i64, ptr %t66 + %t69 = add i64 %t68, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t69, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) + %t70 = load ptr, ptr %a4 + %t71 = getelementptr inbounds %S.gen.Leaf, ptr %t70, i64 %t68 + store %S.gen.Leaf %t67, ptr %t71 + store i64 %t69, ptr %t66 + br label %each.step7448 +each.step7448: + %t72 = load i64, ptr %a57 + %t73 = add i64 %t72, 1 + store i64 %t73, ptr %a57 + br label %each.cond7446 +each.end7449: + call void @finch.drop.arr_S_gen_Leaf(ptr %a56) + br label %for.step7440 +for.step7440: + %t74 = load i64, ptr %a33 + %t75 = add i64 %t74, 1 + store i64 %t75, ptr %a33 + br label %for.cond7438 +for.end7441: + call void @finch.drop.S_gen_StructDef(ptr %a29) + br label %endif7433 +else7432: + %t76 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t77 = load { ptr, i64, i64 }, ptr %t76 + store { ptr, i64, i64 } %t77, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.4772, i64 5, i64 0 }, ptr %a79 + %t80 = call i32 @finch_str_eq(ptr %a78, ptr %a79) + %t81 = icmp ne i32 %t80, 0 + br i1 %t81, label %then7450, label %else7451 +then7450: + %t82 = load ptr, ptr %a1 + %t83 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t84 = load { ptr, i64, i64 }, ptr %t83 + %t85 = extractvalue { ptr, i64, i64 } %t84, 1 + %t86 = icmp uge i64 0, %t85 + br i1 %t86, label %range7453, label %inrange7454 +range7453: + call void @finch_panic_index(ptr @.str.4773, i64 4258, i64 0, i64 %t85) + unreachable +inrange7454: + %t87 = extractvalue { ptr, i64, i64 } %t84, 0 + %t88 = getelementptr inbounds %S.ast.Type, ptr %t87, i64 0 + %t89 = load %S.ast.Type, ptr %t88 + %t90 = call i64 @finch.gen.sizeBytes(ptr %t82, %S.ast.Type %t89) + store i64 %t90, ptr %a91 + %t92 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 4 + %t93 = load i64, ptr %t92 + store i64 0, ptr %a94 + br label %for.cond7455 +for.cond7455: + %t95 = load i64, ptr %a94 + %t96 = icmp slt i64 %t95, %t93 + br i1 %t96, label %for.body7456, label %for.end7458 +for.body7456: + %t97 = load ptr, ptr %a1 + %t98 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 1 + %t99 = load { ptr, i64, i64 }, ptr %t98 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 0, %t100 + br i1 %t101, label %range7459, label %inrange7460 +range7459: + call void @finch_panic_index(ptr @.str.4774, i64 4260, i64 0, i64 %t100) + unreachable +inrange7460: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds %S.ast.Type, ptr %t102, i64 0 + %t104 = load %S.ast.Type, ptr %t103 + %t105 = load i64, ptr %a3 + %t106 = load i64, ptr %a94 + %t107 = load i64, ptr %a91 + %t108 = mul i64 %t106, %t107 + %t109 = add i64 %t105, %t108 + %t110 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t97, %S.ast.Type %t104, i64 %t109) + store { ptr, i64, i64 } %t110, ptr %a111 + store i64 0, ptr %a112 + br label %each.cond7461 +each.cond7461: + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %a111, i32 0, i32 1 + %t114 = load i64, ptr %t113 + %t115 = load i64, ptr %a112 + %t116 = icmp slt i64 %t115, %t114 + br i1 %t116, label %each.body7462, label %each.end7464 +each.body7462: + %t117 = load ptr, ptr %a111 + %t118 = getelementptr inbounds %S.gen.Leaf, ptr %t117, i64 %t115 + %t119 = load %S.gen.Leaf, ptr %t118 + store %S.gen.Leaf %t119, ptr %a120 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t122 = load %S.gen.Leaf, ptr %a120 + %t123 = load i64, ptr %t121 + %t124 = add i64 %t123, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t124, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) + %t125 = load ptr, ptr %a4 + %t126 = getelementptr inbounds %S.gen.Leaf, ptr %t125, i64 %t123 + store %S.gen.Leaf %t122, ptr %t126 + store i64 %t124, ptr %t121 + br label %each.step7463 +each.step7463: + %t127 = load i64, ptr %a112 + %t128 = add i64 %t127, 1 + store i64 %t128, ptr %a112 + br label %each.cond7461 +each.end7464: + call void @finch.drop.arr_S_gen_Leaf(ptr %a111) + br label %for.step7457 +for.step7457: + %t129 = load i64, ptr %a94 + %t130 = add i64 %t129, 1 + store i64 %t130, ptr %a94 + br label %for.cond7455 +for.end7458: + br label %endif7452 +else7451: + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t132 = load i64, ptr %a3 + %t133 = insertvalue %S.gen.Leaf zeroinitializer, i64 %t132, 0 + %t134 = load ptr, ptr %a1 + %t135 = load %S.ast.Type, ptr %a2 + %t136 = call i64 @finch.gen.sizeBytes(ptr %t134, %S.ast.Type %t135) + %t137 = insertvalue %S.gen.Leaf %t133, i64 %t136, 1 + %t138 = load %S.ast.Type, ptr %a2 + %t139 = call i1 @finch.gen.isFloat(%S.ast.Type %t138) + %t140 = insertvalue %S.gen.Leaf %t137, i1 %t139, 2 + %t141 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t142 = load { ptr, i64, i64 }, ptr %t141 + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.4775, i64 5, i64 0 }, ptr %a144 + %t145 = call i32 @finch_str_eq(ptr %a143, ptr %a144) + %t146 = icmp ne i32 %t145, 0 + %t147 = insertvalue %S.gen.Leaf %t140, i1 %t146, 3 + %t148 = load i64, ptr %t131 + %t149 = add i64 %t148, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t149, i64 ptrtoint (ptr getelementptr (%S.gen.Leaf, ptr null, i32 1) to i64)) + %t150 = load ptr, ptr %a4 + %t151 = getelementptr inbounds %S.gen.Leaf, ptr %t150, i64 %t148 + store %S.gen.Leaf %t147, ptr %t151 + store i64 %t149, ptr %t131 + br label %endif7452 +endif7452: + br label %endif7433 +endif7433: + %t152 = load { ptr, i64, i64 }, ptr %a4 + ret { ptr, i64, i64 } %t152 +} + +define internal void @finch.copy.S_gen_Abi(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.gen.Abi, ptr %src + store %S.gen.Abi %t1, ptr %dst + %t2 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_str(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.gen.Abi, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.gen.Abi, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal %S.gen.Abi @finch.gen.classifyArm64(ptr %p0, %S.ast.Type %p1, %S.gen.Abi %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.gen.Abi, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca %S.gen.Abi, align 16 + %a8 = alloca %S.gen.Abi, align 16 + %a10 = alloca %S.gen.Abi, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i1, align 16 + %a23 = alloca i64, align 16 + %a31 = alloca %S.gen.Leaf, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca i64, align 16 + %a102 = alloca %S.gen.Leaf, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store %S.gen.Abi %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = load %S.gen.Abi, ptr %a3 + store %S.gen.Abi %t6, ptr %a7 + call void @finch.copy.S_gen_Abi(ptr %a8, ptr %a7) + %t9 = load %S.gen.Abi, ptr %a8 + store %S.gen.Abi %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = load %S.ast.Type, ptr %a2 + %t13 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t11, %S.ast.Type %t12, i64 0) + store { ptr, i64, i64 } %t13, ptr %a14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp sgt i64 %t16, 0 + br label %logic.from7465 +logic.from7465: + br i1 %t17, label %logic.rhs7466, label %logic.end7467 +logic.rhs7466: + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp sle i64 %t19, 4 + br label %logic.rend7468 +logic.rend7468: + br label %logic.end7467 +logic.end7467: + %t21 = phi i1 [ false, %logic.from7465 ], [ %t20, %logic.rend7468 ] + store i1 %t21, ptr %a22 + store i64 0, ptr %a23 + br label %each.cond7469 +each.cond7469: + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = load i64, ptr %a23 + %t27 = icmp slt i64 %t26, %t25 + br i1 %t27, label %each.body7470, label %each.end7472 +each.body7470: + %t28 = load ptr, ptr %a14 + %t29 = getelementptr inbounds %S.gen.Leaf, ptr %t28, i64 %t26 + %t30 = load %S.gen.Leaf, ptr %t29 + store %S.gen.Leaf %t30, ptr %a31 + %t32 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 2 + %t33 = load i1, ptr %t32 + %t34 = xor i1 %t33, true + br label %logic.from7473 +logic.from7473: + br i1 %t34, label %logic.end7475, label %logic.rhs7474 +logic.rhs7474: + %t35 = getelementptr inbounds %S.gen.Leaf, ptr %a31, i32 0, i32 3 + %t36 = load i1, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %a14 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 0, %t38 + br i1 %t39, label %range7476, label %inrange7477 +range7476: + call void @finch_panic_index(ptr @.str.4776, i64 4277, i64 0, i64 %t38) + unreachable +inrange7477: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.gen.Leaf, ptr %t40, i64 0 + %t42 = getelementptr inbounds %S.gen.Leaf, ptr %t41, i32 0, i32 3 + %t43 = load i1, ptr %t42 + %t44 = icmp ne i1 %t36, %t43 + br label %logic.rend7478 +logic.rend7478: + br label %logic.end7475 +logic.end7475: + %t45 = phi i1 [ true, %logic.from7473 ], [ %t44, %logic.rend7478 ] + br i1 %t45, label %then7479, label %endif7481 +then7479: + store i1 false, ptr %a22 + br label %endif7481 +endif7481: + br label %each.step7471 +each.step7471: + %t46 = load i64, ptr %a23 + %t47 = add i64 %t46, 1 + store i64 %t47, ptr %a23 + br label %each.cond7469 +each.end7472: + %t48 = load i1, ptr %a22 + br i1 %t48, label %then7482, label %endif7484 +then7482: + store { ptr, i64, i64 } { ptr @.str.4777, i64 5, i64 0 }, ptr %a49 + %t50 = load { ptr, i64, i64 }, ptr %a14 + %t51 = extractvalue { ptr, i64, i64 } %t50, 1 + %t52 = icmp uge i64 0, %t51 + br i1 %t52, label %range7485, label %inrange7486 +range7485: + call void @finch_panic_index(ptr @.str.4778, i64 4283, i64 0, i64 %t51) + unreachable +inrange7486: + %t53 = extractvalue { ptr, i64, i64 } %t50, 0 + %t54 = getelementptr inbounds %S.gen.Leaf, ptr %t53, i64 0 + %t55 = getelementptr inbounds %S.gen.Leaf, ptr %t54, i32 0, i32 3 + %t56 = load i1, ptr %t55 + br i1 %t56, label %then7487, label %endif7489 +then7487: + %t57 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.4779, i64 6, i64 0 }, ptr %a49 + store { ptr, i64, i64 } %t57, ptr %a58 + call void @finch_str_drop(ptr %a58) + br label %endif7489 +endif7489: + %t59 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } { ptr @.str.4780, i64 6, i64 0 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i32 0, i32 1 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t65 = load i64, ptr %t64 + call void @finch_str_from_int(ptr %a66, i64 %t65) + %t67 = load { ptr, i64, i64 }, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.4781, i64 1, i64 0 }, ptr %a69 + store { ptr, i64, i64 } %t67, ptr %a70 + call void @finch_str_concat(ptr %a68, ptr %a69, ptr %a70) + store { ptr, i64, i64 } %t67, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = load { ptr, i64, i64 }, ptr %a68 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.4782, i64 3, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t72, ptr %a76 + call void @finch_str_drop(ptr %a76) + %t77 = load { ptr, i64, i64 }, ptr %a73 + %t78 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t77, ptr %a80 + store { ptr, i64, i64 } %t78, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a79 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.4783, i64 1, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + %t89 = load i64, ptr %t63 + %t90 = add i64 %t89, 1 + call void @finch_arr_reserve(ptr %t62, i64 %t90, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t91 = load ptr, ptr %t62 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t89 + store { ptr, i64, i64 } %t88, ptr %t92 + store i64 %t90, ptr %t63 + store { ptr, i64, i64 } zeroinitializer, ptr %a93 + store i64 0, ptr %a94 + br label %each.cond7490 +each.cond7490: + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t96 = load i64, ptr %t95 + %t97 = load i64, ptr %a94 + %t98 = icmp slt i64 %t97, %t96 + br i1 %t98, label %each.body7491, label %each.end7493 +each.body7491: + %t99 = load ptr, ptr %a14 + %t100 = getelementptr inbounds %S.gen.Leaf, ptr %t99, i64 %t97 + %t101 = load %S.gen.Leaf, ptr %t100 + store %S.gen.Leaf %t101, ptr %a102 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 + %t104 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_copy(ptr %a106, ptr %a105) + %t107 = load { ptr, i64, i64 }, ptr %a106 + %t108 = load i64, ptr %t103 + %t109 = add i64 %t108, 1 + call void @finch_arr_reserve(ptr %a93, i64 %t109, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t110 = load ptr, ptr %a93 + %t111 = getelementptr inbounds { ptr, i64, i64 }, ptr %t110, i64 %t108 + store { ptr, i64, i64 } %t107, ptr %t111 + store i64 %t109, ptr %t103 + br label %each.step7492 +each.step7492: + %t112 = load i64, ptr %a94 + %t113 = add i64 %t112, 1 + store i64 %t113, ptr %a94 + br label %each.cond7490 +each.end7493: + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %a93, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4785, i64 2, i64 0 }, ptr %a115 + call void @finch_str_join(ptr %a116, ptr %a93, ptr %a115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.4784, i64 2, i64 0 }, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t122, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.4786, i64 2, i64 0 }, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + store { ptr, i64, i64 } %t122, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a123 + %t128 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t129 = load { ptr, i64, i64 }, ptr %t128 + store { ptr, i64, i64 } %t127, ptr %t128 + store { ptr, i64, i64 } %t129, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load %S.gen.Abi, ptr %a10 + call void @finch.drop.arr_str(ptr %a93) + call void @finch_str_drop(ptr %a49) + call void @finch.drop.arr_S_gen_Leaf(ptr %a14) + ret %S.gen.Abi %t131 +endif7484: + %t132 = load i64, ptr %a4 + %t133 = icmp sgt i64 %t132, 16 + br i1 %t133, label %then7494, label %endif7496 +then7494: + %t134 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 + %t135 = load { ptr, i64, i64 }, ptr %t134 + store { ptr, i64, i64 } { ptr @.str.4787, i64 8, i64 0 }, ptr %t134 + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load %S.gen.Abi, ptr %a10 + call void @finch.drop.arr_S_gen_Leaf(ptr %a14) + ret %S.gen.Abi %t137 +endif7496: + %t138 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 0 + %t139 = load { ptr, i64, i64 }, ptr %t138 + store { ptr, i64, i64 } { ptr @.str.4788, i64 6, i64 0 }, ptr %t138 + store { ptr, i64, i64 } %t139, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load i64, ptr %a5 + %t142 = icmp sge i64 %t141, 16 + br i1 %t142, label %then7497, label %else7498 +then7497: + %t143 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t144 = getelementptr inbounds { ptr, i64, i64 }, ptr %t143, i32 0, i32 1 + %t145 = load i64, ptr %t144 + %t146 = add i64 %t145, 1 + call void @finch_arr_reserve(ptr %t143, i64 %t146, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t147 = load ptr, ptr %t143 + %t148 = getelementptr inbounds { ptr, i64, i64 }, ptr %t147, i64 %t145 + store { ptr, i64, i64 } { ptr @.str.4789, i64 4, i64 0 }, ptr %t148 + store i64 %t146, ptr %t144 + %t149 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } { ptr @.str.4790, i64 4, i64 0 }, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + call void @finch_str_drop(ptr %a151) + br label %endif7499 +else7498: + %t152 = load i64, ptr %a4 + %t153 = icmp sle i64 %t152, 8 + br i1 %t153, label %then7500, label %else7501 +then7500: + %t154 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 + %t156 = load i64, ptr %t155 + %t157 = add i64 %t156, 1 + call void @finch_arr_reserve(ptr %t154, i64 %t157, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t158 = load ptr, ptr %t154 + %t159 = getelementptr inbounds { ptr, i64, i64 }, ptr %t158, i64 %t156 + store { ptr, i64, i64 } { ptr @.str.4791, i64 3, i64 0 }, ptr %t159 + store i64 %t157, ptr %t155 + %t160 = load i64, ptr %a4 + %t161 = mul i64 %t160, 8 + call void @finch_str_from_int(ptr %a162, i64 %t161) + %t163 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.4792, i64 1, i64 0 }, ptr %a165 + store { ptr, i64, i64 } %t163, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t170 = load { ptr, i64, i64 }, ptr %t169 + store { ptr, i64, i64 } %t168, ptr %t169 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_drop(ptr %a171) + br label %endif7502 +else7501: + %t172 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 1 + %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i32 0, i32 1 + %t174 = load i64, ptr %t173 + %t175 = add i64 %t174, 1 + call void @finch_arr_reserve(ptr %t172, i64 %t175, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t176 = load ptr, ptr %t172 + %t177 = getelementptr inbounds { ptr, i64, i64 }, ptr %t176, i64 %t174 + store { ptr, i64, i64 } { ptr @.str.4793, i64 9, i64 0 }, ptr %t177 + store i64 %t175, ptr %t173 + %t178 = getelementptr inbounds %S.gen.Abi, ptr %a10, i32 0, i32 2 + %t179 = load { ptr, i64, i64 }, ptr %t178 + store { ptr, i64, i64 } { ptr @.str.4794, i64 9, i64 0 }, ptr %t178 + store { ptr, i64, i64 } %t179, ptr %a180 + call void @finch_str_drop(ptr %a180) + br label %endif7502 +endif7502: + br label %endif7499 +endif7499: + %t181 = load %S.gen.Abi, ptr %a10 + call void @finch.drop.arr_S_gen_Leaf(ptr %a14) + ret %S.gen.Abi %t181 +} + +define internal void @finch.drop.S_gen_Abi(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Abi, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal %S.gen.Abi @finch.gen.classify(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.gen.Abi, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca %S.gen.StructDef, align 16 + %a28 = alloca %S.gen.StructDef, align 16 + %a30 = alloca %S.gen.StructDef, align 16 + %a33 = alloca i64, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca i64, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca i64, align 16 + %a145 = alloca %S.gen.Leaf, align 16 + %a148 = alloca i64, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca i64, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca i64, align 16 + %a210 = alloca i64, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = insertvalue %S.gen.Abi zeroinitializer, { ptr, i64, i64 } { ptr @.str.4795, i64 6, i64 0 }, 0 + store %S.gen.Abi %t3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.4796, i64 6, i64 0 }, ptr %a8 + %t9 = call i32 @finch_str_eq(ptr %a7, ptr %a8) + %t10 = icmp eq i32 %t9, 0 + br i1 %t10, label %then7503, label %endif7505 +then7503: + %t11 = load %S.gen.Abi, ptr %a4 + ret %S.gen.Abi %t11 +endif7505: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic7506, label %ok7507 +panic7506: + call void @finch_panic(ptr @.str.4797, i64 4318, ptr @.str.4798) + unreachable +ok7507: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 3 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 2 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call i64 @finch.gen.findStruct(ptr %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t19) + %t21 = load { ptr, i64, i64 }, ptr %t14 + %t22 = extractvalue { ptr, i64, i64 } %t21, 1 + %t23 = icmp uge i64 %t20, %t22 + br i1 %t23, label %range7508, label %inrange7509 +range7508: + call void @finch_panic_index(ptr @.str.4799, i64 4318, i64 %t20, i64 %t22) + unreachable +inrange7509: + %t24 = extractvalue { ptr, i64, i64 } %t21, 0 + %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 + %t26 = load %S.gen.StructDef, ptr %t25 + store %S.gen.StructDef %t26, ptr %a27 + call void @finch.copy.S_gen_StructDef(ptr %a28, ptr %a27) + %t29 = load %S.gen.StructDef, ptr %a28 + store %S.gen.StructDef %t29, ptr %a30 + %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 9 + %t32 = load i64, ptr %t31 + store i64 %t32, ptr %a33 + %t34 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 + store i64 8, ptr %t34 + %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 + %t36 = load i64, ptr %t35 + %t37 = icmp sgt i64 %t36, 8 + br i1 %t37, label %then7510, label %endif7512 +then7510: + %t38 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 + %t39 = load i64, ptr %t38 + %t40 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 3 + store i64 %t39, ptr %t40 + br label %endif7512 +endif7512: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic7513, label %ok7514 +panic7513: + call void @finch_panic(ptr @.str.4800, i64 4324, ptr @.str.4801) + unreachable +ok7514: + %t43 = getelementptr inbounds %S.gen.Gen, ptr %t41, i32 0, i32 31 + %t44 = getelementptr inbounds %S.platform.Target, ptr %t43, i32 0, i32 4 + %t45 = load i1, ptr %t44 + br i1 %t45, label %then7515, label %endif7517 +then7515: + %t46 = load ptr, ptr %a1 + %t47 = load %S.ast.Type, ptr %a2 + %t48 = load %S.gen.Abi, ptr %a4 + %t49 = load i64, ptr %a33 + %t50 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 10 + %t51 = load i64, ptr %t50 + %t52 = call %S.gen.Abi @finch.gen.classifyArm64(ptr %t46, %S.ast.Type %t47, %S.gen.Abi %t48, i64 %t49, i64 %t51) + call void @finch.drop.S_gen_StructDef(ptr %a30) + call void @finch.drop.S_gen_Abi(ptr %a4) + ret %S.gen.Abi %t52 +endif7517: + %t53 = load ptr, ptr %a1 + %t54 = icmp eq ptr %t53, null + br i1 %t54, label %panic7518, label %ok7519 +panic7518: + call void @finch_panic(ptr @.str.4802, i64 4327, ptr @.str.4803) + unreachable +ok7519: + %t55 = getelementptr inbounds %S.gen.Gen, ptr %t53, i32 0, i32 31 + %t56 = getelementptr inbounds %S.platform.Target, ptr %t55, i32 0, i32 1 + %t57 = load i1, ptr %t56 + br i1 %t57, label %then7520, label %endif7522 +then7520: + %t58 = load i64, ptr %a33 + %t59 = icmp eq i64 %t58, 1 + br label %logic.from7523 +logic.from7523: + br i1 %t59, label %logic.end7525, label %logic.rhs7524 +logic.rhs7524: + %t60 = load i64, ptr %a33 + %t61 = icmp eq i64 %t60, 2 + br label %logic.rend7526 +logic.rend7526: + br label %logic.end7525 +logic.end7525: + %t62 = phi i1 [ true, %logic.from7523 ], [ %t61, %logic.rend7526 ] + br label %logic.from7527 +logic.from7527: + br i1 %t62, label %logic.end7529, label %logic.rhs7528 +logic.rhs7528: + %t63 = load i64, ptr %a33 + %t64 = icmp eq i64 %t63, 4 + br label %logic.rend7530 +logic.rend7530: + br label %logic.end7529 +logic.end7529: + %t65 = phi i1 [ true, %logic.from7527 ], [ %t64, %logic.rend7530 ] + br label %logic.from7531 +logic.from7531: + br i1 %t65, label %logic.end7533, label %logic.rhs7532 +logic.rhs7532: + %t66 = load i64, ptr %a33 + %t67 = icmp eq i64 %t66, 8 + br label %logic.rend7534 +logic.rend7534: + br label %logic.end7533 +logic.end7533: + %t68 = phi i1 [ true, %logic.from7531 ], [ %t67, %logic.rend7534 ] + br i1 %t68, label %then7535, label %else7536 +then7535: + %t69 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t70 = load { ptr, i64, i64 }, ptr %t69 + store { ptr, i64, i64 } { ptr @.str.4804, i64 6, i64 0 }, ptr %t69 + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + %t72 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i32 0, i32 1 + %t74 = load i64, ptr %a33 + %t75 = mul i64 %t74, 8 + call void @finch_str_from_int(ptr %a76, i64 %t75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.4805, i64 1, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t77, ptr %a81 + call void @finch_str_drop(ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a78 + %t83 = load i64, ptr %t73 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %t72, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %t72 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 + store { ptr, i64, i64 } %t82, ptr %t86 + store i64 %t84, ptr %t73 + %t87 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t88 = load { ptr, i64, i64 }, ptr %t87 + %t89 = extractvalue { ptr, i64, i64 } %t88, 1 + %t90 = icmp uge i64 0, %t89 + br i1 %t90, label %range7538, label %inrange7539 +range7538: + call void @finch_panic_index(ptr @.str.4806, i64 4333, i64 0, i64 %t89) + unreachable +inrange7539: + %t91 = extractvalue { ptr, i64, i64 } %t88, 0 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 0 + %t93 = load { ptr, i64, i64 }, ptr %t92 + %t94 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t93, ptr %a95 + call void @finch_str_copy(ptr %a96, ptr %a95) + %t97 = load { ptr, i64, i64 }, ptr %a96 + %t98 = load { ptr, i64, i64 }, ptr %t94 + store { ptr, i64, i64 } %t97, ptr %t94 + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_drop(ptr %a99) + br label %endif7537 +else7536: + %t100 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t101 = load { ptr, i64, i64 }, ptr %t100 + store { ptr, i64, i64 } { ptr @.str.4807, i64 8, i64 0 }, ptr %t100 + store { ptr, i64, i64 } %t101, ptr %a102 + call void @finch_str_drop(ptr %a102) + br label %endif7537 +endif7537: + %t103 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t103 +endif7522: + %t104 = load i64, ptr %a33 + %t105 = icmp sgt i64 %t104, 16 + br label %logic.from7540 +logic.from7540: + br i1 %t105, label %logic.end7542, label %logic.rhs7541 +logic.rhs7541: + %t106 = load i64, ptr %a33 + %t107 = icmp eq i64 %t106, 0 + br label %logic.rend7543 +logic.rend7543: + br label %logic.end7542 +logic.end7542: + %t108 = phi i1 [ true, %logic.from7540 ], [ %t107, %logic.rend7543 ] + br i1 %t108, label %then7544, label %endif7546 +then7544: + %t109 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } { ptr @.str.4808, i64 6, i64 0 }, ptr %t109 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t112 +endif7546: + %t113 = load ptr, ptr %a1 + %t114 = load %S.ast.Type, ptr %a2 + %t115 = call { ptr, i64, i64 } @finch.gen.leavesOf(ptr %t113, %S.ast.Type %t114, i64 0) + store { ptr, i64, i64 } %t115, ptr %a116 + %t117 = load i64, ptr %a33 + %t118 = add i64 %t117, 7 + %t119 = sdiv i64 %t118, 8 + store i64 %t119, ptr %a120 + %t121 = mul i64 2, ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64) + %t122 = call ptr @finch_alloc(i64 %t121) + %t123 = getelementptr inbounds i64, ptr %t122, i64 0 + store i64 0, ptr %t123 + %t124 = getelementptr inbounds i64, ptr %t122, i64 1 + store i64 0, ptr %t124 + %t125 = insertvalue { ptr, i64, i64 } undef, ptr %t122, 0 + %t126 = insertvalue { ptr, i64, i64 } %t125, i64 2, 1 + %t127 = insertvalue { ptr, i64, i64 } %t126, i64 2, 2 + store { ptr, i64, i64 } %t127, ptr %a128 + %t129 = mul i64 2, ptrtoint (ptr getelementptr (i1, ptr null, i32 1) to i64) + %t130 = call ptr @finch_alloc(i64 %t129) + %t131 = getelementptr inbounds i1, ptr %t130, i64 0 + store i1 false, ptr %t131 + %t132 = getelementptr inbounds i1, ptr %t130, i64 1 + store i1 false, ptr %t132 + %t133 = insertvalue { ptr, i64, i64 } undef, ptr %t130, 0 + %t134 = insertvalue { ptr, i64, i64 } %t133, i64 2, 1 + %t135 = insertvalue { ptr, i64, i64 } %t134, i64 2, 2 + store { ptr, i64, i64 } %t135, ptr %a136 + store i64 0, ptr %a137 + br label %each.cond7547 +each.cond7547: + %t138 = getelementptr inbounds { ptr, i64, i64 }, ptr %a116, i32 0, i32 1 + %t139 = load i64, ptr %t138 + %t140 = load i64, ptr %a137 + %t141 = icmp slt i64 %t140, %t139 + br i1 %t141, label %each.body7548, label %each.end7550 +each.body7548: + %t142 = load ptr, ptr %a116 + %t143 = getelementptr inbounds %S.gen.Leaf, ptr %t142, i64 %t140 + %t144 = load %S.gen.Leaf, ptr %t143 + store %S.gen.Leaf %t144, ptr %a145 + %t146 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 1 + %t147 = load i64, ptr %t146 + store i64 %t147, ptr %a148 + %t149 = load i64, ptr %a148 + %t150 = icmp sgt i64 %t149, 8 + br i1 %t150, label %then7551, label %endif7553 +then7551: + store i64 8, ptr %a148 + br label %endif7553 +endif7553: + %t151 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 + %t152 = load i64, ptr %t151 + %t153 = load i64, ptr %a148 + %t154 = icmp eq i64 %t153, 0 + br i1 %t154, label %panic7554, label %ok7555 +panic7554: + call void @finch_panic(ptr @.str.4809, i64 4352, ptr @.str.4810) + unreachable +ok7555: + %t155 = srem i64 %t152, %t153 + %t156 = icmp ne i64 %t155, 0 + br i1 %t156, label %then7556, label %endif7558 +then7556: + %t157 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t158 = load { ptr, i64, i64 }, ptr %t157 + store { ptr, i64, i64 } { ptr @.str.4811, i64 6, i64 0 }, ptr %t157 + store { ptr, i64, i64 } %t158, ptr %a159 + call void @finch_str_drop(ptr %a159) + %t160 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.arr_bool(ptr %a136) + call void @finch.drop.arr_int(ptr %a128) + call void @finch.drop.arr_S_gen_Leaf(ptr %a116) + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t160 +endif7558: + %t161 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 0 + %t162 = load i64, ptr %t161 + %t163 = sdiv i64 %t162, 8 + store i64 %t163, ptr %a164 + %t165 = load i64, ptr %a164 + %t166 = load { ptr, i64, i64 }, ptr %a128 + %t167 = extractvalue { ptr, i64, i64 } %t166, 1 + %t168 = icmp uge i64 %t165, %t167 + br i1 %t168, label %range7559, label %inrange7560 +range7559: + call void @finch_panic_index(ptr @.str.4812, i64 4357, i64 %t165, i64 %t167) + unreachable +inrange7560: + %t169 = extractvalue { ptr, i64, i64 } %t166, 0 + %t170 = getelementptr inbounds i64, ptr %t169, i64 %t165 + %t171 = load i64, ptr %t170 + %t172 = icmp eq i64 %t171, 1 + br label %logic.from7561 +logic.from7561: + br i1 %t172, label %logic.end7563, label %logic.rhs7562 +logic.rhs7562: + %t173 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 2 + %t174 = load i1, ptr %t173 + %t175 = xor i1 %t174, true + br label %logic.rend7564 +logic.rend7564: + br label %logic.end7563 +logic.end7563: + %t176 = phi i1 [ true, %logic.from7561 ], [ %t175, %logic.rend7564 ] + br i1 %t176, label %then7565, label %else7566 +then7565: + %t177 = load i64, ptr %a164 + %t178 = load { ptr, i64, i64 }, ptr %a128 + %t179 = extractvalue { ptr, i64, i64 } %t178, 1 + %t180 = icmp uge i64 %t177, %t179 + br i1 %t180, label %range7568, label %inrange7569 +range7568: + call void @finch_panic_index(ptr @.str.4813, i64 4358, i64 %t177, i64 %t179) + unreachable +inrange7569: + %t181 = extractvalue { ptr, i64, i64 } %t178, 0 + %t182 = getelementptr inbounds i64, ptr %t181, i64 %t177 + store i64 1, ptr %t182 + br label %endif7567 +else7566: + %t183 = load i64, ptr %a164 + %t184 = load { ptr, i64, i64 }, ptr %a128 + %t185 = extractvalue { ptr, i64, i64 } %t184, 1 + %t186 = icmp uge i64 %t183, %t185 + br i1 %t186, label %range7570, label %inrange7571 +range7570: + call void @finch_panic_index(ptr @.str.4814, i64 4360, i64 %t183, i64 %t185) + unreachable +inrange7571: + %t187 = extractvalue { ptr, i64, i64 } %t184, 0 + %t188 = getelementptr inbounds i64, ptr %t187, i64 %t183 + store i64 2, ptr %t188 + br label %endif7567 +endif7567: + %t189 = getelementptr inbounds %S.gen.Leaf, ptr %a145, i32 0, i32 3 + %t190 = load i1, ptr %t189 + br i1 %t190, label %then7572, label %endif7574 +then7572: + %t191 = load i64, ptr %a164 + %t192 = load { ptr, i64, i64 }, ptr %a136 + %t193 = extractvalue { ptr, i64, i64 } %t192, 1 + %t194 = icmp uge i64 %t191, %t193 + br i1 %t194, label %range7575, label %inrange7576 +range7575: + call void @finch_panic_index(ptr @.str.4815, i64 4363, i64 %t191, i64 %t193) + unreachable +inrange7576: + %t195 = extractvalue { ptr, i64, i64 } %t192, 0 + %t196 = getelementptr inbounds i1, ptr %t195, i64 %t191 + store i1 true, ptr %t196 + br label %endif7574 +endif7574: + br label %each.step7549 +each.step7549: + %t197 = load i64, ptr %a137 + %t198 = add i64 %t197, 1 + store i64 %t198, ptr %a137 + br label %each.cond7547 +each.end7550: + %t199 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 0 + %t200 = load { ptr, i64, i64 }, ptr %t199 + store { ptr, i64, i64 } { ptr @.str.4816, i64 6, i64 0 }, ptr %t199 + store { ptr, i64, i64 } %t200, ptr %a201 + call void @finch_str_drop(ptr %a201) + %t202 = load i64, ptr %a120 + store i64 0, ptr %a203 + br label %for.cond7577 +for.cond7577: + %t204 = load i64, ptr %a203 + %t205 = icmp slt i64 %t204, %t202 + br i1 %t205, label %for.body7578, label %for.end7580 +for.body7578: + %t206 = load i64, ptr %a33 + %t207 = load i64, ptr %a203 + %t208 = mul i64 8, %t207 + %t209 = sub i64 %t206, %t208 + store i64 %t209, ptr %a210 + %t211 = load i64, ptr %a210 + %t212 = icmp sgt i64 %t211, 8 + br i1 %t212, label %then7581, label %endif7583 +then7581: + store i64 8, ptr %a210 + br label %endif7583 +endif7583: + %t213 = load i64, ptr %a203 + %t214 = load { ptr, i64, i64 }, ptr %a128 + %t215 = extractvalue { ptr, i64, i64 } %t214, 1 + %t216 = icmp uge i64 %t213, %t215 + br i1 %t216, label %range7584, label %inrange7585 +range7584: + call void @finch_panic_index(ptr @.str.4817, i64 4372, i64 %t213, i64 %t215) + unreachable +inrange7585: + %t217 = extractvalue { ptr, i64, i64 } %t214, 0 + %t218 = getelementptr inbounds i64, ptr %t217, i64 %t213 + %t219 = load i64, ptr %t218 + %t220 = icmp eq i64 %t219, 2 + br i1 %t220, label %then7586, label %else7587 +then7586: + %t221 = load i64, ptr %a203 + %t222 = load { ptr, i64, i64 }, ptr %a136 + %t223 = extractvalue { ptr, i64, i64 } %t222, 1 + %t224 = icmp uge i64 %t221, %t223 + br i1 %t224, label %range7589, label %inrange7590 +range7589: + call void @finch_panic_index(ptr @.str.4818, i64 4373, i64 %t221, i64 %t223) + unreachable +inrange7590: + %t225 = extractvalue { ptr, i64, i64 } %t222, 0 + %t226 = getelementptr inbounds i1, ptr %t225, i64 %t221 + %t227 = load i1, ptr %t226 + br i1 %t227, label %then7591, label %else7592 +then7591: + %t228 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i32 0, i32 1 + %t230 = load i64, ptr %t229 + %t231 = add i64 %t230, 1 + call void @finch_arr_reserve(ptr %t228, i64 %t231, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t232 = load ptr, ptr %t228 + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 %t230 + store { ptr, i64, i64 } { ptr @.str.4819, i64 6, i64 0 }, ptr %t233 + store i64 %t231, ptr %t229 + br label %endif7593 +else7592: + %t234 = load i64, ptr %a210 + %t235 = icmp sgt i64 %t234, 4 + br i1 %t235, label %then7594, label %else7595 +then7594: + %t236 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1 + %t238 = load i64, ptr %t237 + %t239 = add i64 %t238, 1 + call void @finch_arr_reserve(ptr %t236, i64 %t239, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t240 = load ptr, ptr %t236 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t240, i64 %t238 + store { ptr, i64, i64 } { ptr @.str.4820, i64 11, i64 0 }, ptr %t241 + store i64 %t239, ptr %t237 + br label %endif7596 +else7595: + %t242 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i32 0, i32 1 + %t244 = load i64, ptr %t243 + %t245 = add i64 %t244, 1 + call void @finch_arr_reserve(ptr %t242, i64 %t245, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t246 = load ptr, ptr %t242 + %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t244 + store { ptr, i64, i64 } { ptr @.str.4821, i64 5, i64 0 }, ptr %t247 + store i64 %t245, ptr %t243 + br label %endif7596 +endif7596: + br label %endif7593 +endif7593: + br label %endif7588 +else7587: + %t248 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i32 0, i32 1 + %t250 = load i64, ptr %a210 + %t251 = mul i64 %t250, 8 + call void @finch_str_from_int(ptr %a252, i64 %t251) + %t253 = load { ptr, i64, i64 }, ptr %a252 + store { ptr, i64, i64 } { ptr @.str.4822, i64 1, i64 0 }, ptr %a255 + store { ptr, i64, i64 } %t253, ptr %a256 + call void @finch_str_concat(ptr %a254, ptr %a255, ptr %a256) + store { ptr, i64, i64 } %t253, ptr %a257 + call void @finch_str_drop(ptr %a257) + %t258 = load { ptr, i64, i64 }, ptr %a254 + %t259 = load i64, ptr %t249 + %t260 = add i64 %t259, 1 + call void @finch_arr_reserve(ptr %t248, i64 %t260, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t261 = load ptr, ptr %t248 + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t261, i64 %t259 + store { ptr, i64, i64 } %t258, ptr %t262 + store i64 %t260, ptr %t249 + br label %endif7588 +endif7588: + br label %for.step7579 +for.step7579: + %t263 = load i64, ptr %a203 + %t264 = add i64 %t263, 1 + store i64 %t264, ptr %a203 + br label %for.cond7577 +for.end7580: + %t265 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %t265, i32 0, i32 1 + %t267 = load i64, ptr %t266 + %t268 = icmp eq i64 %t267, 1 + br i1 %t268, label %then7597, label %else7598 +then7597: + %t269 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t270 = load { ptr, i64, i64 }, ptr %t269 + %t271 = extractvalue { ptr, i64, i64 } %t270, 1 + %t272 = icmp uge i64 0, %t271 + br i1 %t272, label %range7600, label %inrange7601 +range7600: + call void @finch_panic_index(ptr @.str.4823, i64 4385, i64 0, i64 %t271) + unreachable +inrange7601: + %t273 = extractvalue { ptr, i64, i64 } %t270, 0 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 0 + %t275 = load { ptr, i64, i64 }, ptr %t274 + %t276 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t275, ptr %a277 + call void @finch_str_copy(ptr %a278, ptr %a277) + %t279 = load { ptr, i64, i64 }, ptr %a278 + %t280 = load { ptr, i64, i64 }, ptr %t276 + store { ptr, i64, i64 } %t279, ptr %t276 + store { ptr, i64, i64 } %t280, ptr %a281 + call void @finch_str_drop(ptr %a281) + br label %endif7599 +else7598: + %t282 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 1 + %t283 = getelementptr inbounds { ptr, i64, i64 }, ptr %t282, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4825, i64 2, i64 0 }, ptr %a284 + call void @finch_str_join(ptr %a285, ptr %t282, ptr %a284) + %t286 = load { ptr, i64, i64 }, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.4824, i64 2, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t286, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.4826, i64 2, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = getelementptr inbounds %S.gen.Abi, ptr %a4, i32 0, i32 2 + %t298 = load { ptr, i64, i64 }, ptr %t297 + store { ptr, i64, i64 } %t296, ptr %t297 + store { ptr, i64, i64 } %t298, ptr %a299 + call void @finch_str_drop(ptr %a299) + br label %endif7599 +endif7599: + %t300 = load %S.gen.Abi, ptr %a4 + call void @finch.drop.arr_bool(ptr %a136) + call void @finch.drop.arr_int(ptr %a128) + call void @finch.drop.arr_S_gen_Leaf(ptr %a116) + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret %S.gen.Abi %t300 +} + +define internal %S.gen.Plan @finch.gen.makePlan(ptr %p0, %S.ast.Type %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.gen.Plan, align 16 + %a5 = alloca i64, align 16 + %a6 = alloca i64, align 16 + %a12 = alloca %S.gen.Abi, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca i64, align 16 + %a76 = alloca %S.ast.Type, align 16 + %a80 = alloca %S.gen.Abi, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca i64, align 16 + %a88 = alloca i64, align 16 + %a90 = alloca i64, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca %S.gen.Abi, align 16 + %a155 = alloca %S.gen.Abi, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.gen.Plan zeroinitializer, ptr %a4 + store i64 6, ptr %a5 + store i64 8, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = load %S.ast.Type, ptr %a2 + %t9 = call %S.gen.Abi @finch.gen.classify(ptr %t7, %S.ast.Type %t8) + %t10 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t11 = load %S.gen.Abi, ptr %t10 + store %S.gen.Abi %t9, ptr %t10 + store %S.gen.Abi %t11, ptr %a12 + call void @finch.drop.S_gen_Abi(ptr %a12) + %t13 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } { ptr @.str.4827, i64 4, i64 0 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_drop(ptr %a15) + %t16 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.4828, i64 4, i64 0 }, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp eq i32 %t20, 0 + br i1 %t21, label %then7602, label %endif7604 +then7602: + %t22 = load ptr, ptr %a1 + %t23 = load %S.ast.Type, ptr %a2 + %t24 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t22, %S.ast.Type %t23) + %t25 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + %t26 = load { ptr, i64, i64 }, ptr %t25 + store { ptr, i64, i64 } %t24, ptr %t25 + store { ptr, i64, i64 } %t26, ptr %a27 + call void @finch_str_drop(ptr %a27) + br label %endif7604 +endif7604: + %t28 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t29 = getelementptr inbounds %S.gen.Abi, ptr %t28, i32 0, i32 0 + %t30 = load { ptr, i64, i64 }, ptr %t29 + store { ptr, i64, i64 } %t30, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.4829, i64 8, i64 0 }, ptr %a32 + %t33 = call i32 @finch_str_eq(ptr %a31, ptr %a32) + %t34 = icmp ne i32 %t33, 0 + br i1 %t34, label %then7605, label %endif7607 +then7605: + %t35 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t36 = getelementptr inbounds %S.gen.Abi, ptr %t35, i32 0, i32 0 + %t37 = load { ptr, i64, i64 }, ptr %t36 + store { ptr, i64, i64 } { ptr @.str.4830, i64 6, i64 0 }, ptr %t36 + store { ptr, i64, i64 } %t37, ptr %a38 + call void @finch_str_drop(ptr %a38) + br label %endif7607 +endif7607: + %t39 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t40 = getelementptr inbounds %S.gen.Abi, ptr %t39, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.4831, i64 6, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br i1 %t45, label %then7608, label %else7609 +then7608: + %t46 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 3 + store i1 true, ptr %t46 + %t47 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + %t48 = load { ptr, i64, i64 }, ptr %t47 + store { ptr, i64, i64 } { ptr @.str.4832, i64 4, i64 0 }, ptr %t47 + store { ptr, i64, i64 } %t48, ptr %a49 + call void @finch_str_drop(ptr %a49) + %t50 = load i64, ptr %a5 + %t51 = sub i64 %t50, 1 + store i64 %t51, ptr %a5 + br label %endif7610 +else7609: + %t52 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t53 = getelementptr inbounds %S.gen.Abi, ptr %t52, i32 0, i32 0 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.4833, i64 6, i64 0 }, ptr %a56 + %t57 = call i32 @finch_str_eq(ptr %a55, ptr %a56) + %t58 = icmp ne i32 %t57, 0 + br i1 %t58, label %then7611, label %endif7613 +then7611: + %t59 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 0 + %t60 = getelementptr inbounds %S.gen.Abi, ptr %t59, i32 0, i32 2 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 2 + store { ptr, i64, i64 } %t61, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + %t66 = load { ptr, i64, i64 }, ptr %t62 + store { ptr, i64, i64 } %t65, ptr %t62 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + br label %endif7613 +endif7613: + br label %endif7610 +endif7610: + store i64 0, ptr %a68 + br label %each.cond7614 +each.cond7614: + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t70 = load i64, ptr %t69 + %t71 = load i64, ptr %a68 + %t72 = icmp slt i64 %t71, %t70 + br i1 %t72, label %each.body7615, label %each.end7617 +each.body7615: + %t73 = load ptr, ptr %a3 + %t74 = getelementptr inbounds %S.ast.Type, ptr %t73, i64 %t71 + %t75 = load %S.ast.Type, ptr %t74 + store %S.ast.Type %t75, ptr %a76 + %t77 = load ptr, ptr %a1 + %t78 = load %S.ast.Type, ptr %a76 + %t79 = call %S.gen.Abi @finch.gen.classify(ptr %t77, %S.ast.Type %t78) + store %S.gen.Abi %t79, ptr %a80 + %t81 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t82, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.4834, i64 6, i64 0 }, ptr %a84 + %t85 = call i32 @finch_str_eq(ptr %a83, ptr %a84) + %t86 = icmp ne i32 %t85, 0 + br i1 %t86, label %then7618, label %else7619 +then7618: + store i64 0, ptr %a87 + store i64 0, ptr %a88 + %t89 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 1 + store i64 0, ptr %a90 + br label %each.cond7621 +each.cond7621: + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i32 0, i32 1 + %t92 = load i64, ptr %t91 + %t93 = load i64, ptr %a90 + %t94 = icmp slt i64 %t93, %t92 + br i1 %t94, label %each.body7622, label %each.end7624 +each.body7622: + %t95 = load ptr, ptr %t89 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i64 %t93 + %t97 = load { ptr, i64, i64 }, ptr %t96 + store { ptr, i64, i64 } %t97, ptr %a98 + %t99 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t99, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.4836, i64 1, i64 0 }, ptr %a102 + %t103 = call i32 @finch_str_starts(ptr %a100, ptr %a102) + %t104 = icmp ne i32 %t103, 0 + br i1 %t104, label %then7625, label %else7626 +then7625: + %t105 = load i64, ptr %a87 + %t106 = add i64 %t105, 1 + store i64 %t106, ptr %a87 + br label %endif7627 +else7626: + %t107 = load i64, ptr %a88 + %t108 = add i64 %t107, 1 + store i64 %t108, ptr %a88 + br label %endif7627 +endif7627: + br label %each.step7623 +each.step7623: + %t109 = load i64, ptr %a90 + %t110 = add i64 %t109, 1 + store i64 %t110, ptr %a90 + br label %each.cond7621 +each.end7624: + %t111 = load ptr, ptr %a1 + %t112 = icmp eq ptr %t111, null + br i1 %t112, label %panic7628, label %ok7629 +panic7628: + call void @finch_panic(ptr @.str.4837, i64 4425, ptr @.str.4838) + unreachable +ok7629: + %t113 = getelementptr inbounds %S.gen.Gen, ptr %t111, i32 0, i32 31 + %t114 = getelementptr inbounds %S.platform.Target, ptr %t113, i32 0, i32 1 + %t115 = load i1, ptr %t114 + br label %logic.from7630 +logic.from7630: + br i1 %t115, label %logic.end7632, label %logic.rhs7631 +logic.rhs7631: + %t116 = load ptr, ptr %a1 + %t117 = icmp eq ptr %t116, null + br i1 %t117, label %panic7633, label %ok7634 +panic7633: + call void @finch_panic(ptr @.str.4839, i64 4425, ptr @.str.4840) + unreachable +ok7634: + %t118 = getelementptr inbounds %S.gen.Gen, ptr %t116, i32 0, i32 31 + %t119 = getelementptr inbounds %S.platform.Target, ptr %t118, i32 0, i32 4 + %t120 = load i1, ptr %t119 + br label %logic.rend7635 +logic.rend7635: + br label %logic.end7632 +logic.end7632: + %t121 = phi i1 [ true, %logic.from7630 ], [ %t120, %logic.rend7635 ] + br label %logic.from7636 +logic.from7636: + br i1 %t121, label %logic.end7638, label %logic.rhs7637 +logic.rhs7637: + %t122 = load i64, ptr %a87 + %t123 = load i64, ptr %a5 + %t124 = icmp sle i64 %t122, %t123 + br label %logic.from7639 +logic.from7639: + br i1 %t124, label %logic.rhs7640, label %logic.end7641 +logic.rhs7640: + %t125 = load i64, ptr %a88 + %t126 = load i64, ptr %a6 + %t127 = icmp sle i64 %t125, %t126 + br label %logic.rend7642 +logic.rend7642: + br label %logic.end7641 +logic.end7641: + %t128 = phi i1 [ false, %logic.from7639 ], [ %t127, %logic.rend7642 ] + br label %logic.rend7643 +logic.rend7643: + br label %logic.end7638 +logic.end7638: + %t129 = phi i1 [ true, %logic.from7636 ], [ %t128, %logic.rend7643 ] + br i1 %t129, label %then7644, label %else7645 +then7644: + %t130 = load i64, ptr %a87 + %t131 = load i64, ptr %a5 + %t132 = sub i64 %t131, %t130 + store i64 %t132, ptr %a5 + %t133 = load i64, ptr %a88 + %t134 = load i64, ptr %a6 + %t135 = sub i64 %t134, %t133 + store i64 %t135, ptr %a6 + br label %endif7646 +else7645: + %t136 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 + %t137 = load { ptr, i64, i64 }, ptr %t136 + store { ptr, i64, i64 } { ptr @.str.4841, i64 6, i64 0 }, ptr %t136 + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_drop(ptr %a138) + br label %endif7646 +endif7646: + br label %endif7620 +else7619: + %t139 = getelementptr inbounds %S.gen.Abi, ptr %a80, i32 0, i32 0 + %t140 = load { ptr, i64, i64 }, ptr %t139 + store { ptr, i64, i64 } %t140, ptr %a141 + store { ptr, i64, i64 } { ptr @.str.4842, i64 6, i64 0 }, ptr %a142 + %t143 = call i32 @finch_str_eq(ptr %a141, ptr %a142) + %t144 = icmp ne i32 %t143, 0 + br i1 %t144, label %then7647, label %endif7649 +then7647: + %t145 = load %S.ast.Type, ptr %a76 + %t146 = call i1 @finch.gen.isFloat(%S.ast.Type %t145) + br i1 %t146, label %then7650, label %else7651 +then7650: + %t147 = load i64, ptr %a6 + %t148 = sub i64 %t147, 1 + store i64 %t148, ptr %a6 + br label %endif7652 +else7651: + %t149 = load i64, ptr %a5 + %t150 = sub i64 %t149, 1 + store i64 %t150, ptr %a5 + br label %endif7652 +endif7652: + br label %endif7649 +endif7649: + br label %endif7620 +endif7620: + %t151 = getelementptr inbounds %S.gen.Plan, ptr %a4, i32 0, i32 1 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load %S.gen.Abi, ptr %a80 + store %S.gen.Abi %t153, ptr %a154 + call void @finch.copy.S_gen_Abi(ptr %a155, ptr %a154) + %t156 = load %S.gen.Abi, ptr %a155 + %t157 = load i64, ptr %t152 + %t158 = add i64 %t157, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t158, i64 ptrtoint (ptr getelementptr (%S.gen.Abi, ptr null, i32 1) to i64)) + %t159 = load ptr, ptr %t151 + %t160 = getelementptr inbounds %S.gen.Abi, ptr %t159, i64 %t157 + store %S.gen.Abi %t156, ptr %t160 + store i64 %t158, ptr %t152 + call void @finch.drop.S_gen_Abi(ptr %a80) + br label %each.step7616 +each.step7616: + %t161 = load i64, ptr %a68 + %t162 = add i64 %t161, 1 + store i64 %t162, ptr %a68 + br label %each.cond7614 +each.end7617: + %t163 = load %S.gen.Plan, ptr %a4 + ret %S.gen.Plan %t163 +} + +define internal void @finch.gen.checkByValue(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca %S.gen.StructDef, align 16 + %a28 = alloca %S.gen.StructDef, align 16 + %a30 = alloca %S.gen.StructDef, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 0 + %t7 = load { ptr, i64, i64 }, ptr %t6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.4843, i64 6, i64 0 }, ptr %a9 + %t10 = call i32 @finch_str_eq(ptr %a8, ptr %a9) + %t11 = icmp eq i32 %t10, 0 + br i1 %t11, label %then7653, label %endif7655 +then7653: + ret void +endif7655: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic7656, label %ok7657 +panic7656: + call void @finch_panic(ptr @.str.4844, i64 4447, ptr @.str.4845) + unreachable +ok7657: + %t14 = getelementptr inbounds %S.gen.Gen, ptr %t12, i32 0, i32 16 + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 3 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 2 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call i64 @finch.gen.findStruct(ptr %t15, { ptr, i64, i64 } %t17, { ptr, i64, i64 } %t19) + %t21 = load { ptr, i64, i64 }, ptr %t14 + %t22 = extractvalue { ptr, i64, i64 } %t21, 1 + %t23 = icmp uge i64 %t20, %t22 + br i1 %t23, label %range7658, label %inrange7659 +range7658: + call void @finch_panic_index(ptr @.str.4846, i64 4447, i64 %t20, i64 %t22) + unreachable +inrange7659: + %t24 = extractvalue { ptr, i64, i64 } %t21, 0 + %t25 = getelementptr inbounds %S.gen.StructDef, ptr %t24, i64 %t20 + %t26 = load %S.gen.StructDef, ptr %t25 + store %S.gen.StructDef %t26, ptr %a27 + call void @finch.copy.S_gen_StructDef(ptr %a28, ptr %a27) + %t29 = load %S.gen.StructDef, ptr %a28 + store %S.gen.StructDef %t29, ptr %a30 + %t31 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 2 + %t32 = load i1, ptr %t31 + %t33 = xor i1 %t32, true + br i1 %t33, label %then7660, label %endif7662 +then7660: + %t34 = load ptr, ptr %a1 + %t35 = load %S.ast.Node, ptr %a2 + %t36 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.4847, i64 16, i64 0 }, ptr %a38 + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_concat(ptr %a37, ptr %a38, ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.4848, i64 2, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t45, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t45, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.4849, i64 18, i64 0 }, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t51, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a52 + %t57 = load %S.ast.Type, ptr %a4 + %t58 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t57) + store { ptr, i64, i64 } %t56, ptr %a60 + store { ptr, i64, i64 } %t58, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t56, ptr %a62 + call void @finch_str_drop(ptr %a62) + store { ptr, i64, i64 } %t58, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a59 + store { ptr, i64, i64 } %t64, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.4850, i64 20, i64 0 }, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + call void @finch.gen.fail(ptr %t34, %S.ast.Node %t35, { ptr, i64, i64 } %t69) + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_drop(ptr %a70) + br label %endif7662 +endif7662: + %t71 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t71, i32 0, i32 1 + %t73 = load i64, ptr %t72 + %t74 = icmp sgt i64 %t73, 0 + br i1 %t74, label %then7663, label %endif7665 +then7663: + %t75 = load ptr, ptr %a1 + %t76 = load %S.ast.Node, ptr %a2 + %t77 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.4851, i64 16, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t81, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.4852, i64 2, i64 0 }, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t81, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a82 + %t87 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t86, ptr %a89 + store { ptr, i64, i64 } %t87, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + store { ptr, i64, i64 } %t86, ptr %a91 + call void @finch_str_drop(ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a88 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4853, i64 12, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + %t98 = load %S.ast.Type, ptr %a4 + %t99 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t98) + store { ptr, i64, i64 } %t97, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t97, ptr %a103 + call void @finch_str_drop(ptr %a103) + store { ptr, i64, i64 } %t99, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.4854, i64 40, i64 0 }, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t105, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = getelementptr inbounds %S.gen.StructDef, ptr %a30, i32 0, i32 8 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t110, ptr %a114 + store { ptr, i64, i64 } %t112, ptr %a115 + call void @finch_str_concat(ptr %a113, ptr %a114, ptr %a115) + store { ptr, i64, i64 } %t110, ptr %a116 + call void @finch_str_drop(ptr %a116) + %t117 = load { ptr, i64, i64 }, ptr %a113 + call void @finch.gen.fail(ptr %t75, %S.ast.Node %t76, { ptr, i64, i64 } %t117) + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_drop(ptr %a118) + br label %endif7665 +endif7665: + call void @finch.drop.S_gen_StructDef(ptr %a30) + ret void +} + +define internal i1 @finch.gen.cPlain(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + %t3 = call i1 @finch.gen.isNumber(%S.ast.Type %t2) + br label %logic.from7666 +logic.from7666: + br i1 %t3, label %logic.end7668, label %logic.rhs7667 +logic.rhs7667: + %t4 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.4855, i64 4, i64 0 }, ptr %a7 + %t8 = call i32 @finch_str_eq(ptr %a6, ptr %a7) + %t9 = icmp ne i32 %t8, 0 + br label %logic.rend7669 +logic.rend7669: + br label %logic.end7668 +logic.end7668: + %t10 = phi i1 [ true, %logic.from7666 ], [ %t9, %logic.rend7669 ] + br label %logic.from7670 +logic.from7670: + br i1 %t10, label %logic.end7672, label %logic.rhs7671 +logic.rhs7671: + %t11 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.4856, i64 4, i64 0 }, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br label %logic.rend7673 +logic.rend7673: + br label %logic.end7672 +logic.end7672: + %t17 = phi i1 [ true, %logic.from7670 ], [ %t16, %logic.rend7673 ] + br label %logic.from7674 +logic.from7674: + br i1 %t17, label %logic.end7676, label %logic.rhs7675 +logic.rhs7675: + %t18 = getelementptr inbounds %S.ast.Type, ptr %a1, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.4857, i64 3, i64 0 }, ptr %a21 + %t22 = call i32 @finch_str_eq(ptr %a20, ptr %a21) + %t23 = icmp ne i32 %t22, 0 + br label %logic.rend7677 +logic.rend7677: + br label %logic.end7676 +logic.end7676: + %t24 = phi i1 [ true, %logic.from7674 ], [ %t23, %logic.rend7677 ] + ret i1 %t24 +} + +define internal void @finch.gen.checkExport(ptr %p0, %S.ast.Node %p1, %S.gen.FnSig %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.gen.FnSig, align 16 + %a23 = alloca i64, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca i64, align 16 + %a106 = alloca %S.gen.FnSig, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.gen.FnSig %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 2 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = icmp sgt i64 %t6, 0 + br i1 %t7, label %then7678, label %endif7680 +then7678: + %t8 = load ptr, ptr %a1 + %t9 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t8, %S.ast.Node %t9, { ptr, i64, i64 } { ptr @.str.4858, i64 59, i64 0 }) + br label %endif7680 +endif7680: + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 7 + %t11 = load i1, ptr %t10 + br i1 %t11, label %then7681, label %endif7683 +then7681: + %t12 = load ptr, ptr %a1 + %t13 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t12, %S.ast.Node %t13, { ptr, i64, i64 } { ptr @.str.4859, i64 74, i64 0 }) + br label %endif7683 +endif7683: + %t14 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 3 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp sgt i64 %t16, 0 + br i1 %t17, label %then7684, label %endif7686 +then7684: + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t18, %S.ast.Node %t19, { ptr, i64, i64 } { ptr @.str.4860, i64 29, i64 0 }) + br label %endif7686 +endif7686: + %t20 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load i64, ptr %t21 + store i64 0, ptr %a23 + br label %for.cond7687 +for.cond7687: + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, %t22 + br i1 %t25, label %for.body7688, label %for.end7690 +for.body7688: + %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 + %t27 = load i64, ptr %a23 + %t28 = load { ptr, i64, i64 }, ptr %t26 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 %t27, %t29 + br i1 %t30, label %range7691, label %inrange7692 +range7691: + call void @finch_panic_index(ptr @.str.4861, i64 4472, i64 %t27, i64 %t29) + unreachable +inrange7692: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.ast.Type, ptr %t31, i64 %t27 + %t33 = load %S.ast.Type, ptr %t32 + %t34 = call i1 @finch.gen.cPlain(%S.ast.Type %t33) + %t35 = xor i1 %t34, true + br i1 %t35, label %then7693, label %endif7695 +then7693: + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t38 = load i64, ptr %a23 + %t39 = load { ptr, i64, i64 }, ptr %t37 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range7696, label %inrange7697 +range7696: + call void @finch_panic_index(ptr @.str.4862, i64 4473, i64 %t38, i64 %t40) + unreachable +inrange7697: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds %S.ast.Node, ptr %t42, i64 %t38 + %t44 = load %S.ast.Node, ptr %t43 + %t45 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 13 + %t46 = load i64, ptr %a23 + %t47 = load { ptr, i64, i64 }, ptr %t45 + %t48 = extractvalue { ptr, i64, i64 } %t47, 1 + %t49 = icmp uge i64 %t46, %t48 + br i1 %t49, label %range7698, label %inrange7699 +range7698: + call void @finch_panic_index(ptr @.str.4864, i64 4473, i64 %t46, i64 %t48) + unreachable +inrange7699: + %t50 = extractvalue { ptr, i64, i64 } %t47, 0 + %t51 = getelementptr inbounds %S.ast.Type, ptr %t50, i64 %t46 + %t52 = load %S.ast.Type, ptr %t51 + %t53 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t52) + store { ptr, i64, i64 } { ptr @.str.4863, i64 66, i64 0 }, ptr %a55 + store { ptr, i64, i64 } %t53, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t53, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + store { ptr, i64, i64 } %t58, ptr %a60 + store { ptr, i64, i64 } { ptr @.str.4865, i64 50, i64 0 }, ptr %a61 + call void @finch_str_concat(ptr %a59, ptr %a60, ptr %a61) + store { ptr, i64, i64 } %t58, ptr %a62 + call void @finch_str_drop(ptr %a62) + %t63 = load { ptr, i64, i64 }, ptr %a59 + call void @finch.gen.fail(ptr %t36, %S.ast.Node %t44, { ptr, i64, i64 } %t63) + store { ptr, i64, i64 } %t63, ptr %a64 + call void @finch_str_drop(ptr %a64) + br label %endif7695 +endif7695: + br label %for.step7689 +for.step7689: + %t65 = load i64, ptr %a23 + %t66 = add i64 %t65, 1 + store i64 %t66, ptr %a23 + br label %for.cond7687 +for.end7690: + %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 + %t68 = getelementptr inbounds %S.ast.Type, ptr %t67, i32 0, i32 0 + %t69 = load { ptr, i64, i64 }, ptr %t68 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.4866, i64 4, i64 0 }, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp eq i32 %t72, 0 + br label %logic.from7700 +logic.from7700: + br i1 %t73, label %logic.rhs7701, label %logic.end7702 +logic.rhs7701: + %t74 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 + %t75 = load %S.ast.Type, ptr %t74 + %t76 = call i1 @finch.gen.cPlain(%S.ast.Type %t75) + %t77 = xor i1 %t76, true + br label %logic.rend7703 +logic.rend7703: + br label %logic.end7702 +logic.end7702: + %t78 = phi i1 [ false, %logic.from7700 ], [ %t77, %logic.rend7703 ] + br i1 %t78, label %then7704, label %endif7706 +then7704: + %t79 = load ptr, ptr %a1 + %t80 = load %S.ast.Node, ptr %a2 + %t81 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 12 + %t82 = load %S.ast.Type, ptr %t81 + %t83 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t82) + store { ptr, i64, i64 } { ptr @.str.4867, i64 69, i64 0 }, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.4868, i64 1, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + call void @finch.gen.fail(ptr %t79, %S.ast.Node %t80, { ptr, i64, i64 } %t93) + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + br label %endif7706 +endif7706: + %t95 = load ptr, ptr %a1 + %t96 = icmp eq ptr %t95, null + br i1 %t96, label %panic7707, label %ok7708 +panic7707: + call void @finch_panic(ptr @.str.4869, i64 4479, ptr @.str.4870) + unreachable +ok7708: + %t97 = getelementptr inbounds %S.gen.Gen, ptr %t95, i32 0, i32 15 + store i64 0, ptr %a98 + br label %each.cond7709 +each.cond7709: + %t99 = getelementptr inbounds { ptr, i64, i64 }, ptr %t97, i32 0, i32 1 + %t100 = load i64, ptr %t99 + %t101 = load i64, ptr %a98 + %t102 = icmp slt i64 %t101, %t100 + br i1 %t102, label %each.body7710, label %each.end7712 +each.body7710: + %t103 = load ptr, ptr %t97 + %t104 = getelementptr inbounds %S.gen.FnSig, ptr %t103, i64 %t101 + %t105 = load %S.gen.FnSig, ptr %t104 + store %S.gen.FnSig %t105, ptr %a106 + %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 5 + %t108 = load i1, ptr %t107 + br label %logic.from7713 +logic.from7713: + br i1 %t108, label %logic.rhs7714, label %logic.end7715 +logic.rhs7714: + %t109 = getelementptr inbounds %S.gen.FnSig, ptr %a106, i32 0, i32 1 + %t110 = load { ptr, i64, i64 }, ptr %t109 + %t111 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t110, ptr %a113 + store { ptr, i64, i64 } %t112, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br label %logic.rend7716 +logic.rend7716: + br label %logic.end7715 +logic.end7715: + %t117 = phi i1 [ false, %logic.from7713 ], [ %t116, %logic.rend7716 ] + br i1 %t117, label %then7717, label %endif7719 +then7717: + %t118 = load ptr, ptr %a1 + %t119 = load %S.ast.Node, ptr %a2 + %t120 = getelementptr inbounds %S.gen.FnSig, ptr %a3, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %t120 + store { ptr, i64, i64 } { ptr @.str.4871, i64 1, i64 0 }, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t125, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.4872, i64 38, i64 0 }, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t125, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + call void @finch.gen.fail(ptr %t118, %S.ast.Node %t119, { ptr, i64, i64 } %t130) + store { ptr, i64, i64 } %t130, ptr %a131 + call void @finch_str_drop(ptr %a131) + br label %endif7719 +endif7719: + br label %each.step7711 +each.step7711: + %t132 = load i64, ptr %a98 + %t133 = add i64 %t132, 1 + store i64 %t133, ptr %a98 + br label %each.cond7709 +each.end7712: + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %p0, %S.gen.FnSig %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.FnSig, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca %S.gen.Saved, align 16 + %a11 = alloca i64, align 16 + %a22 = alloca %S.ast.Type, align 16 + %a23 = alloca %S.ast.Type, align 16 + %a25 = alloca %S.ast.Type, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.gen.FnSig %p1, ptr %a2 + store { ptr, i64, i64 } zeroinitializer, ptr %a3 + store { ptr, i64, i64 } zeroinitializer, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t5) + store %S.gen.Saved %t6, ptr %a7 + %t8 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + store i64 0, ptr %a11 + br label %for.cond7720 +for.cond7720: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t10 + br i1 %t13, label %for.body7721, label %for.end7723 +for.body7721: + %t14 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 13 + %t15 = load i64, ptr %a11 + %t16 = load { ptr, i64, i64 }, ptr %t14 + %t17 = extractvalue { ptr, i64, i64 } %t16, 1 + %t18 = icmp uge i64 %t15, %t17 + br i1 %t18, label %range7724, label %inrange7725 +range7724: + call void @finch_panic_index(ptr @.str.4873, i64 4492, i64 %t15, i64 %t17) + unreachable +inrange7725: + %t19 = extractvalue { ptr, i64, i64 } %t16, 0 + %t20 = getelementptr inbounds %S.ast.Type, ptr %t19, i64 %t15 + %t21 = load %S.ast.Type, ptr %t20 + store %S.ast.Type %t21, ptr %a22 + call void @finch.copy.S_ast_Type(ptr %a23, ptr %a22) + %t24 = load %S.ast.Type, ptr %a23 + store %S.ast.Type %t24, ptr %a25 + %t26 = getelementptr inbounds %S.ast.Type, ptr %a25, i32 0, i32 0 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.4874, i64 4, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %then7726, label %else7727 +then7726: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t33 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a34, i64 %t33) + %t35 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } { ptr @.str.4875, i64 13, i64 0 }, ptr %a37 + store { ptr, i64, i64 } %t35, ptr %a38 + call void @finch_str_concat(ptr %a36, ptr %a37, ptr %a38) + store { ptr, i64, i64 } %t35, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a36 + %t41 = load i64, ptr %t32 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a3, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a3 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } %t40, ptr %t44 + store i64 %t42, ptr %t32 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t46 = load ptr, ptr %a1 + %t47 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a48, i64 %t47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.4877, i64 13, i64 0 }, ptr %a51 + store { ptr, i64, i64 } %t49, ptr %a52 + call void @finch_str_concat(ptr %a50, ptr %a51, ptr %a52) + store { ptr, i64, i64 } %t49, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.4878, i64 3, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + %t60 = call { ptr, i64, i64 } @finch.gen.op(ptr %t46, { ptr, i64, i64 } %t59) + store { ptr, i64, i64 } %t59, ptr %a61 + call void @finch_str_drop(ptr %a61) + store { ptr, i64, i64 } { ptr @.str.4876, i64 3, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = load i64, ptr %t45 + %t68 = add i64 %t67, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t68, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t69 = load ptr, ptr %a4 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t67 + store { ptr, i64, i64 } %t66, ptr %t70 + store i64 %t68, ptr %t45 + br label %endif7728 +else7727: + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t72 = load ptr, ptr %a1 + %t73 = load %S.ast.Type, ptr %a25 + %t74 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t72, %S.ast.Type %t73) + %t75 = load ptr, ptr %a1 + %t76 = load %S.ast.Type, ptr %a25 + %t77 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t75, %S.ast.Type %t76) + store { ptr, i64, i64 } %t74, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + store { ptr, i64, i64 } %t74, ptr %a81 + call void @finch_str_drop(ptr %a81) + store { ptr, i64, i64 } %t77, ptr %a82 + call void @finch_str_drop(ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.4879, i64 3, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t83, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a84 + %t89 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a90, i64 %t89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t88, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a92 + %t98 = load i64, ptr %t71 + %t99 = add i64 %t98, 1 + call void @finch_arr_reserve(ptr %a3, i64 %t99, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t100 = load ptr, ptr %a3 + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t98 + store { ptr, i64, i64 } %t97, ptr %t101 + store i64 %t99, ptr %t71 + %t102 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t103 = load ptr, ptr %a1 + %t104 = load %S.ast.Type, ptr %a25 + %t105 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t103, %S.ast.Type %t104) + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.4880, i64 3, i64 0 }, ptr %a108 + call void @finch_str_concat(ptr %a106, ptr %a107, ptr %a108) + store { ptr, i64, i64 } %t105, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = load i64, ptr %a11 + call void @finch_str_from_int(ptr %a112, i64 %t111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t110, ptr %a117 + call void @finch_str_drop(ptr %a117) + store { ptr, i64, i64 } %t113, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a114 + %t120 = load i64, ptr %t102 + %t121 = add i64 %t120, 1 + call void @finch_arr_reserve(ptr %a4, i64 %t121, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t122 = load ptr, ptr %a4 + %t123 = getelementptr inbounds { ptr, i64, i64 }, ptr %t122, i64 %t120 + store { ptr, i64, i64 } %t119, ptr %t123 + store i64 %t121, ptr %t102 + br label %endif7728 +endif7728: + call void @finch.drop.S_ast_Type(ptr %a25) + br label %for.step7722 +for.step7722: + %t124 = load i64, ptr %a11 + %t125 = add i64 %t124, 1 + store i64 %t125, ptr %a11 + br label %for.cond7720 +for.end7723: + %t126 = load ptr, ptr %a1 + %t127 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t128 = load %S.ast.Type, ptr %t127 + %t129 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t126, %S.ast.Type %t128) + store { ptr, i64, i64 } { ptr @.str.4881, i64 5, i64 0 }, ptr %a131 + store { ptr, i64, i64 } %t129, ptr %a132 + call void @finch_str_concat(ptr %a130, ptr %a131, ptr %a132) + store { ptr, i64, i64 } %t129, ptr %a133 + call void @finch_str_drop(ptr %a133) + %t134 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t134, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.4882, i64 1, i64 0 }, ptr %a137 + call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) + store { ptr, i64, i64 } %t134, ptr %a138 + call void @finch_str_drop(ptr %a138) + %t139 = load { ptr, i64, i64 }, ptr %a135 + %t140 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 + %t141 = load { ptr, i64, i64 }, ptr %t140 + store { ptr, i64, i64 } %t139, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t139, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.4883, i64 1, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4884, i64 2, i64 0 }, ptr %a153 + call void @finch_str_join(ptr %a154, ptr %a4, ptr %a153) + %t155 = load { ptr, i64, i64 }, ptr %a154 + store { ptr, i64, i64 } %t151, ptr %a157 + store { ptr, i64, i64 } %t155, ptr %a158 + call void @finch_str_concat(ptr %a156, ptr %a157, ptr %a158) + store { ptr, i64, i64 } %t151, ptr %a159 + call void @finch_str_drop(ptr %a159) + store { ptr, i64, i64 } %t155, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a156 + store { ptr, i64, i64 } %t161, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.4885, i64 1, i64 0 }, ptr %a164 + call void @finch_str_concat(ptr %a162, ptr %a163, ptr %a164) + store { ptr, i64, i64 } %t161, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = load { ptr, i64, i64 }, ptr %a162 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.4886, i64 4, i64 0 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4887, i64 0, i64 0 }, ptr %a169 + %t170 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t171 = getelementptr inbounds %S.ast.Type, ptr %t170, i32 0, i32 0 + %t172 = load { ptr, i64, i64 }, ptr %t171 + store { ptr, i64, i64 } %t172, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.4888, i64 4, i64 0 }, ptr %a174 + %t175 = call i32 @finch_str_eq(ptr %a173, ptr %a174) + %t176 = icmp ne i32 %t175, 0 + br i1 %t176, label %then7729, label %else7730 +then7729: + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a167 + call void @finch.gen.emit(ptr %t177, { ptr, i64, i64 } %t178) + %t179 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t179, { ptr, i64, i64 } { ptr @.str.4889, i64 8, i64 0 }) + br label %endif7731 +else7730: + %t180 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t181 = getelementptr inbounds %S.ast.Type, ptr %t180, i32 0, i32 0 + %t182 = load { ptr, i64, i64 }, ptr %t181 + store { ptr, i64, i64 } %t182, ptr %a183 + store { ptr, i64, i64 } { ptr @.str.4890, i64 4, i64 0 }, ptr %a184 + %t185 = call i32 @finch_str_eq(ptr %a183, ptr %a184) + %t186 = icmp ne i32 %t185, 0 + br i1 %t186, label %then7732, label %else7733 +then7732: + %t187 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4891, i64 2, i64 0 }, ptr %a168 + store { ptr, i64, i64 } %t187, ptr %a188 + call void @finch_str_drop(ptr %a188) + %t189 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.4892, i64 8, i64 0 }, ptr %a169 + store { ptr, i64, i64 } %t189, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = load ptr, ptr %a1 + %t192 = load ptr, ptr %a1 + %t193 = load ptr, ptr %a1 + %t194 = load { ptr, i64, i64 }, ptr %a167 + %t195 = call { ptr, i64, i64 } @finch.gen.op(ptr %t193, { ptr, i64, i64 } %t194) + store { ptr, i64, i64 } { ptr @.str.4894, i64 8, i64 0 }, ptr %a197 + store { ptr, i64, i64 } %t195, ptr %a198 + call void @finch_str_concat(ptr %a196, ptr %a197, ptr %a198) + store { ptr, i64, i64 } %t195, ptr %a199 + call void @finch_str_drop(ptr %a199) + %t200 = load { ptr, i64, i64 }, ptr %a196 + store { ptr, i64, i64 } %t200, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.4895, i64 6, i64 0 }, ptr %a203 + call void @finch_str_concat(ptr %a201, ptr %a202, ptr %a203) + store { ptr, i64, i64 } %t200, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = load { ptr, i64, i64 }, ptr %a201 + %t206 = call { ptr, i64, i64 } @finch.gen.op(ptr %t192, { ptr, i64, i64 } %t205) + store { ptr, i64, i64 } %t205, ptr %a207 + call void @finch_str_drop(ptr %a207) + store { ptr, i64, i64 } { ptr @.str.4893, i64 7, i64 0 }, ptr %a209 + store { ptr, i64, i64 } %t206, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + store { ptr, i64, i64 } %t206, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a208 + call void @finch.gen.emit(ptr %t191, { ptr, i64, i64 } %t212) + store { ptr, i64, i64 } %t212, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %endif7734 +else7733: + %t214 = load ptr, ptr %a1 + %t215 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t216 = load %S.ast.Type, ptr %t215 + %t217 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t214, %S.ast.Type %t216) + %t218 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t217, ptr %a168 + store { ptr, i64, i64 } %t218, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load ptr, ptr %a1 + %t221 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t222 = load %S.ast.Type, ptr %t221 + %t223 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t220, %S.ast.Type %t222) + %t224 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t223, ptr %a169 + store { ptr, i64, i64 } %t224, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load ptr, ptr %a1 + %t227 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } { ptr @.str.4896, i64 4, i64 0 }, ptr %a229 + store { ptr, i64, i64 } %t227, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a228 + store { ptr, i64, i64 } %t231, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.4897, i64 1, i64 0 }, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + store { ptr, i64, i64 } %t231, ptr %a235 + call void @finch_str_drop(ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a232 + %t237 = load ptr, ptr %a1 + %t238 = load { ptr, i64, i64 }, ptr %a167 + %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t237, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t236, ptr %a241 + store { ptr, i64, i64 } %t239, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + store { ptr, i64, i64 } %t236, ptr %a243 + call void @finch_str_drop(ptr %a243) + store { ptr, i64, i64 } %t239, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a240 + call void @finch.gen.emit(ptr %t226, { ptr, i64, i64 } %t245) + store { ptr, i64, i64 } %t245, ptr %a246 + call void @finch_str_drop(ptr %a246) + br label %endif7734 +endif7734: + br label %endif7731 +endif7731: + store { ptr, i64, i64 } { ptr @.str.4898, i64 0, i64 0 }, ptr %a247 + %t248 = load ptr, ptr %a1 + %t249 = icmp eq ptr %t248, null + br i1 %t249, label %panic7735, label %ok7736 +panic7735: + call void @finch_panic(ptr @.str.4899, i64 4517, ptr @.str.4900) + unreachable +ok7736: + %t250 = getelementptr inbounds %S.gen.Gen, ptr %t248, i32 0, i32 31 + %t251 = getelementptr inbounds %S.platform.Target, ptr %t250, i32 0, i32 1 + %t252 = load i1, ptr %t251 + br i1 %t252, label %then7737, label %endif7739 +then7737: + %t253 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.4901, i64 10, i64 0 }, ptr %a247 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_drop(ptr %a254) + br label %endif7739 +endif7739: + %t255 = load ptr, ptr %a1 + %t256 = load %S.gen.Saved, ptr %a7 + %t257 = load { ptr, i64, i64 }, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.4902, i64 6, i64 0 }, ptr %a259 + store { ptr, i64, i64 } %t257, ptr %a260 + call void @finch_str_concat(ptr %a258, ptr %a259, ptr %a260) + %t261 = load { ptr, i64, i64 }, ptr %a258 + %t262 = load { ptr, i64, i64 }, ptr %a169 + store { ptr, i64, i64 } %t261, ptr %a264 + store { ptr, i64, i64 } %t262, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + store { ptr, i64, i64 } %t261, ptr %a266 + call void @finch_str_drop(ptr %a266) + %t267 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t267, ptr %a269 + store { ptr, i64, i64 } { ptr @.str.4903, i64 1, i64 0 }, ptr %a270 + call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) + store { ptr, i64, i64 } %t267, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load { ptr, i64, i64 }, ptr %a268 + %t273 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t272, ptr %a275 + store { ptr, i64, i64 } %t273, ptr %a276 + call void @finch_str_concat(ptr %a274, ptr %a275, ptr %a276) + store { ptr, i64, i64 } %t272, ptr %a277 + call void @finch_str_drop(ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a274 + store { ptr, i64, i64 } %t278, ptr %a280 + store { ptr, i64, i64 } { ptr @.str.4904, i64 2, i64 0 }, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } %t283, ptr %a287 + store { ptr, i64, i64 } %t285, ptr %a288 + call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) + store { ptr, i64, i64 } %t283, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a286 + store { ptr, i64, i64 } %t290, ptr %a292 + store { ptr, i64, i64 } { ptr @.str.4905, i64 1, i64 0 }, ptr %a293 + call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293) + store { ptr, i64, i64 } %t290, ptr %a294 + call void @finch_str_drop(ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a291 + %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4906, i64 2, i64 0 }, ptr %a297 + call void @finch_str_join(ptr %a298, ptr %a3, ptr %a297) + %t299 = load { ptr, i64, i64 }, ptr %a298 + store { ptr, i64, i64 } %t295, ptr %a301 + store { ptr, i64, i64 } %t299, ptr %a302 + call void @finch_str_concat(ptr %a300, ptr %a301, ptr %a302) + store { ptr, i64, i64 } %t295, ptr %a303 + call void @finch_str_drop(ptr %a303) + store { ptr, i64, i64 } %t299, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load { ptr, i64, i64 }, ptr %a300 + store { ptr, i64, i64 } %t305, ptr %a307 + store { ptr, i64, i64 } { ptr @.str.4907, i64 1, i64 0 }, ptr %a308 + call void @finch_str_concat(ptr %a306, ptr %a307, ptr %a308) + store { ptr, i64, i64 } %t305, ptr %a309 + call void @finch_str_drop(ptr %a309) + %t310 = load { ptr, i64, i64 }, ptr %a306 + call void @finch.gen.endHelper(ptr %t255, %S.gen.Saved %t256, { ptr, i64, i64 } %t310) + store { ptr, i64, i64 } %t310, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 1 + %t313 = load { ptr, i64, i64 }, ptr %t312 + store { ptr, i64, i64 } %t313, ptr %a314 + call void @finch_str_copy(ptr %a315, ptr %a314) + %t316 = load { ptr, i64, i64 }, ptr %a315 + call void @finch_str_drop(ptr %a247) + call void @finch_str_drop(ptr %a169) + call void @finch_str_drop(ptr %a168) + call void @finch_str_drop(ptr %a167) + call void @finch.drop.S_gen_Saved(ptr %a7) + call void @finch.drop.arr_str(ptr %a4) + call void @finch.drop.arr_str(ptr %a3) + ret { ptr, i64, i64 } %t316 +} + +define internal void @finch.drop.arr_S_gen_Abi(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond7862 +n.cond7862: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body7863, label %n.end7864 +n.body7863: + %t7 = getelementptr inbounds %S.gen.Abi, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Abi(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond7862 +n.end7864: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Plan(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 0 + call void @finch.drop.S_gen_Abi(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_gen_Abi(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Plan, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.cThunk(ptr %p0, i64 %p1, %S.ast.Node %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a14 = alloca %S.gen.FnSig, align 16 + %a15 = alloca %S.gen.FnSig, align 16 + %a17 = alloca %S.gen.FnSig, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i64, align 16 + %a51 = alloca i64, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca i64, align 16 + %a108 = alloca %S.ast.Type, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca %S.gen.Plan, align 16 + %a276 = alloca %S.gen.Saved, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca i64, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca i64, align 16 + %a318 = alloca %S.ast.Type, align 16 + %a319 = alloca %S.ast.Type, align 16 + %a321 = alloca %S.ast.Type, align 16 + %a330 = alloca %S.gen.Abi, align 16 + %a331 = alloca %S.gen.Abi, align 16 + %a333 = alloca %S.gen.Abi, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca i64, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a534 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a544 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a602 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a648 = alloca { ptr, i64, i64 }, align 16 + %a649 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a653 = alloca { ptr, i64, i64 }, align 16 + %a654 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a660 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a662 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a684 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a729 = alloca { ptr, i64, i64 }, align 16 + %a730 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a737 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a742 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a793 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a803 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a805 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a808 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a810 = alloca { ptr, i64, i64 }, align 16 + %a813 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a828 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic7740, label %ok7741 +panic7740: + call void @finch_panic(ptr @.str.4908, i64 4526, ptr @.str.4909) + unreachable +ok7741: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 15 + %t7 = load i64, ptr %a2 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range7742, label %inrange7743 +range7742: + call void @finch_panic_index(ptr @.str.4910, i64 4526, i64 %t7, i64 %t9) + unreachable +inrange7743: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.FnSig, ptr %t11, i64 %t7 + %t13 = load %S.gen.FnSig, ptr %t12 + store %S.gen.FnSig %t13, ptr %a14 + call void @finch.copy.S_gen_FnSig(ptr %a15, ptr %a14) + %t16 = load %S.gen.FnSig, ptr %a15 + store %S.gen.FnSig %t16, ptr %a17 + %t18 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + %t20 = call { ptr, i64, i64 } @finch.gen.modName({ ptr, i64, i64 } %t19) + store { ptr, i64, i64 } { ptr @.str.4911, i64 9, i64 0 }, ptr %a22 + store { ptr, i64, i64 } %t20, ptr %a23 + call void @finch_str_concat(ptr %a21, ptr %a22, ptr %a23) + store { ptr, i64, i64 } %t20, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.4912, i64 1, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + %t31 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t32 = load { ptr, i64, i64 }, ptr %t31 + store { ptr, i64, i64 } %t30, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t30, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a38 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic7744, label %ok7745 +panic7744: + call void @finch_panic(ptr @.str.4913, i64 4528, ptr @.str.4914) + unreachable +ok7745: + %t41 = getelementptr inbounds %S.gen.Gen, ptr %t39, i32 0, i32 40 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 + %t43 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.4915, i64 2, i64 0 }, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a44 + store i64 -1, ptr %a48 + %t49 = load i64, ptr %t42 + %t50 = load ptr, ptr %t41 + store i64 0, ptr %a51 + br label %find.cond7746 +find.cond7746: + %t52 = load i64, ptr %a51 + %t53 = icmp slt i64 %t52, %t49 + br i1 %t53, label %find.body7747, label %find.end7750 +find.body7747: + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t52 + %t55 = load { ptr, i64, i64 }, ptr %t54 + store { ptr, i64, i64 } %t55, ptr %a56 + store { ptr, i64, i64 } %t47, ptr %a57 + %t58 = call i32 @finch_str_eq(ptr %a56, ptr %a57) + %t59 = icmp ne i32 %t58, 0 + br i1 %t59, label %find.hit7748, label %find.next7749 +find.hit7748: + store i64 %t52, ptr %a48 + br label %find.end7750 +find.next7749: + %t60 = add i64 %t52, 1 + store i64 %t60, ptr %a51 + br label %find.cond7746 +find.end7750: + store { ptr, i64, i64 } %t47, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load i64, ptr %a48 + %t63 = icmp sge i64 %t62, 0 + br i1 %t63, label %then7751, label %endif7753 +then7751: + %t64 = load { ptr, i64, i64 }, ptr %a38 + call void @finch.drop.S_gen_FnSig(ptr %a17) + ret { ptr, i64, i64 } %t64 +endif7753: + %t65 = load ptr, ptr %a1 + %t66 = icmp eq ptr %t65, null + br i1 %t66, label %panic7754, label %ok7755 +panic7754: + call void @finch_panic(ptr @.str.4916, i64 4531, ptr @.str.4917) + unreachable +ok7755: + %t67 = getelementptr inbounds %S.gen.Gen, ptr %t65, i32 0, i32 40 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 + %t69 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.4918, i64 2, i64 0 }, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a70 + %t74 = load i64, ptr %t68 + %t75 = add i64 %t74, 1 + call void @finch_arr_reserve(ptr %t67, i64 %t75, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t76 = load ptr, ptr %t67 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 + store { ptr, i64, i64 } %t73, ptr %t77 + store i64 %t75, ptr %t68 + %t78 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 2 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i32 0, i32 1 + %t80 = load i64, ptr %t79 + %t81 = icmp sgt i64 %t80, 0 + br label %logic.from7756 +logic.from7756: + br i1 %t81, label %logic.end7758, label %logic.rhs7757 +logic.rhs7757: + %t82 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 9 + %t83 = load i1, ptr %t82 + br label %logic.rend7759 +logic.rend7759: + br label %logic.end7758 +logic.end7758: + %t84 = phi i1 [ true, %logic.from7756 ], [ %t83, %logic.rend7759 ] + br i1 %t84, label %then7760, label %endif7762 +then7760: + %t85 = load ptr, ptr %a1 + %t86 = load %S.ast.Node, ptr %a3 + %t87 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t88 = load { ptr, i64, i64 }, ptr %t87 + store { ptr, i64, i64 } { ptr @.str.4919, i64 5, i64 0 }, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + %t92 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t92, ptr %a94 + store { ptr, i64, i64 } { ptr @.str.4920, i64 81, i64 0 }, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t92, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + call void @finch.gen.fail(ptr %t85, %S.ast.Node %t86, { ptr, i64, i64 } %t97) + store { ptr, i64, i64 } %t97, ptr %a98 + call void @finch_str_drop(ptr %a98) + br label %endif7762 +endif7762: + %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + store i64 0, ptr %a100 + br label %each.cond7763 +each.cond7763: + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t99, i32 0, i32 1 + %t102 = load i64, ptr %t101 + %t103 = load i64, ptr %a100 + %t104 = icmp slt i64 %t103, %t102 + br i1 %t104, label %each.body7764, label %each.end7766 +each.body7764: + %t105 = load ptr, ptr %t99 + %t106 = getelementptr inbounds %S.ast.Type, ptr %t105, i64 %t103 + %t107 = load %S.ast.Type, ptr %t106 + store %S.ast.Type %t107, ptr %a108 + %t109 = load %S.ast.Type, ptr %a108 + %t110 = call i1 @finch.gen.isNumber(%S.ast.Type %t109) + br label %logic.from7767 +logic.from7767: + br i1 %t110, label %logic.end7769, label %logic.rhs7768 +logic.rhs7768: + %t111 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t112 = load { ptr, i64, i64 }, ptr %t111 + store { ptr, i64, i64 } %t112, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.4921, i64 4, i64 0 }, ptr %a114 + %t115 = call i32 @finch_str_eq(ptr %a113, ptr %a114) + %t116 = icmp ne i32 %t115, 0 + br label %logic.rend7770 +logic.rend7770: + br label %logic.end7769 +logic.end7769: + %t117 = phi i1 [ true, %logic.from7767 ], [ %t116, %logic.rend7770 ] + br label %logic.from7771 +logic.from7771: + br i1 %t117, label %logic.end7773, label %logic.rhs7772 +logic.rhs7772: + %t118 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t119 = load { ptr, i64, i64 }, ptr %t118 + store { ptr, i64, i64 } %t119, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.4922, i64 4, i64 0 }, ptr %a121 + %t122 = call i32 @finch_str_eq(ptr %a120, ptr %a121) + %t123 = icmp ne i32 %t122, 0 + br label %logic.rend7774 +logic.rend7774: + br label %logic.end7773 +logic.end7773: + %t124 = phi i1 [ true, %logic.from7771 ], [ %t123, %logic.rend7774 ] + br label %logic.from7775 +logic.from7775: + br i1 %t124, label %logic.end7777, label %logic.rhs7776 +logic.rhs7776: + %t125 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t126 = load { ptr, i64, i64 }, ptr %t125 + store { ptr, i64, i64 } %t126, ptr %a127 + store { ptr, i64, i64 } { ptr @.str.4923, i64 3, i64 0 }, ptr %a128 + %t129 = call i32 @finch_str_eq(ptr %a127, ptr %a128) + %t130 = icmp ne i32 %t129, 0 + br label %logic.rend7778 +logic.rend7778: + br label %logic.end7777 +logic.end7777: + %t131 = phi i1 [ true, %logic.from7775 ], [ %t130, %logic.rend7778 ] + br label %logic.from7779 +logic.from7779: + br i1 %t131, label %logic.end7781, label %logic.rhs7780 +logic.rhs7780: + %t132 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.4924, i64 6, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp ne i32 %t136, 0 + br label %logic.from7782 +logic.from7782: + br i1 %t137, label %logic.rhs7783, label %logic.end7784 +logic.rhs7783: + %t138 = load ptr, ptr %a1 + %t139 = icmp eq ptr %t138, null + br i1 %t139, label %panic7785, label %ok7786 +panic7785: + call void @finch_panic(ptr @.str.4925, i64 4536, ptr @.str.4926) + unreachable +ok7786: + %t140 = getelementptr inbounds %S.gen.Gen, ptr %t138, i32 0, i32 16 + %t141 = load ptr, ptr %a1 + %t142 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 3 + %t143 = load { ptr, i64, i64 }, ptr %t142 + %t144 = getelementptr inbounds %S.ast.Type, ptr %a108, i32 0, i32 2 + %t145 = load { ptr, i64, i64 }, ptr %t144 + %t146 = call i64 @finch.gen.findStruct(ptr %t141, { ptr, i64, i64 } %t143, { ptr, i64, i64 } %t145) + %t147 = load { ptr, i64, i64 }, ptr %t140 + %t148 = extractvalue { ptr, i64, i64 } %t147, 1 + %t149 = icmp uge i64 %t146, %t148 + br i1 %t149, label %range7787, label %inrange7788 +range7787: + call void @finch_panic_index(ptr @.str.4927, i64 4536, i64 %t146, i64 %t148) + unreachable +inrange7788: + %t150 = extractvalue { ptr, i64, i64 } %t147, 0 + %t151 = getelementptr inbounds %S.gen.StructDef, ptr %t150, i64 %t146 + %t152 = getelementptr inbounds %S.gen.StructDef, ptr %t151, i32 0, i32 2 + %t153 = load i1, ptr %t152 + br label %logic.rend7789 +logic.rend7789: + br label %logic.end7784 +logic.end7784: + %t154 = phi i1 [ false, %logic.from7782 ], [ %t153, %logic.rend7789 ] + br label %logic.rend7790 +logic.rend7790: + br label %logic.end7781 +logic.end7781: + %t155 = phi i1 [ true, %logic.from7779 ], [ %t154, %logic.rend7790 ] + %t156 = xor i1 %t155, true + br i1 %t156, label %then7791, label %endif7793 +then7791: + %t157 = load ptr, ptr %a1 + %t158 = load %S.ast.Node, ptr %a3 + %t159 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + store { ptr, i64, i64 } { ptr @.str.4928, i64 5, i64 0 }, ptr %a162 + store { ptr, i64, i64 } %t160, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + store { ptr, i64, i64 } %t164, ptr %a166 + store { ptr, i64, i64 } { ptr @.str.4929, i64 95, i64 0 }, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t164, ptr %a168 + call void @finch_str_drop(ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a165 + %t170 = load %S.ast.Type, ptr %a108 + %t171 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t170) + store { ptr, i64, i64 } %t169, ptr %a173 + store { ptr, i64, i64 } %t171, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t169, ptr %a175 + call void @finch_str_drop(ptr %a175) + store { ptr, i64, i64 } %t171, ptr %a176 + call void @finch_str_drop(ptr %a176) + %t177 = load { ptr, i64, i64 }, ptr %a172 + call void @finch.gen.fail(ptr %t157, %S.ast.Node %t158, { ptr, i64, i64 } %t177) + store { ptr, i64, i64 } %t177, ptr %a178 + call void @finch_str_drop(ptr %a178) + br label %endif7793 +endif7793: + br label %each.step7765 +each.step7765: + %t179 = load i64, ptr %a100 + %t180 = add i64 %t179, 1 + store i64 %t180, ptr %a100 + br label %each.cond7763 +each.end7766: + %t181 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t182 = load %S.ast.Type, ptr %t181 + %t183 = call i1 @finch.gen.isNumber(%S.ast.Type %t182) + br label %logic.from7794 +logic.from7794: + br i1 %t183, label %logic.end7796, label %logic.rhs7795 +logic.rhs7795: + %t184 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t185 = getelementptr inbounds %S.ast.Type, ptr %t184, i32 0, i32 0 + %t186 = load { ptr, i64, i64 }, ptr %t185 + store { ptr, i64, i64 } %t186, ptr %a187 + store { ptr, i64, i64 } { ptr @.str.4930, i64 4, i64 0 }, ptr %a188 + %t189 = call i32 @finch_str_eq(ptr %a187, ptr %a188) + %t190 = icmp ne i32 %t189, 0 + br label %logic.rend7797 +logic.rend7797: + br label %logic.end7796 +logic.end7796: + %t191 = phi i1 [ true, %logic.from7794 ], [ %t190, %logic.rend7797 ] + br label %logic.from7798 +logic.from7798: + br i1 %t191, label %logic.end7800, label %logic.rhs7799 +logic.rhs7799: + %t192 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t193 = getelementptr inbounds %S.ast.Type, ptr %t192, i32 0, i32 0 + %t194 = load { ptr, i64, i64 }, ptr %t193 + store { ptr, i64, i64 } %t194, ptr %a195 + store { ptr, i64, i64 } { ptr @.str.4931, i64 4, i64 0 }, ptr %a196 + %t197 = call i32 @finch_str_eq(ptr %a195, ptr %a196) + %t198 = icmp ne i32 %t197, 0 + br label %logic.rend7801 +logic.rend7801: + br label %logic.end7800 +logic.end7800: + %t199 = phi i1 [ true, %logic.from7798 ], [ %t198, %logic.rend7801 ] + br label %logic.from7802 +logic.from7802: + br i1 %t199, label %logic.end7804, label %logic.rhs7803 +logic.rhs7803: + %t200 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 + %t202 = load { ptr, i64, i64 }, ptr %t201 + store { ptr, i64, i64 } %t202, ptr %a203 + store { ptr, i64, i64 } { ptr @.str.4932, i64 3, i64 0 }, ptr %a204 + %t205 = call i32 @finch_str_eq(ptr %a203, ptr %a204) + %t206 = icmp ne i32 %t205, 0 + br label %logic.rend7805 +logic.rend7805: + br label %logic.end7804 +logic.end7804: + %t207 = phi i1 [ true, %logic.from7802 ], [ %t206, %logic.rend7805 ] + br label %logic.from7806 +logic.from7806: + br i1 %t207, label %logic.end7808, label %logic.rhs7807 +logic.rhs7807: + %t208 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t209 = getelementptr inbounds %S.ast.Type, ptr %t208, i32 0, i32 0 + %t210 = load { ptr, i64, i64 }, ptr %t209 + store { ptr, i64, i64 } %t210, ptr %a211 + store { ptr, i64, i64 } { ptr @.str.4933, i64 4, i64 0 }, ptr %a212 + %t213 = call i32 @finch_str_eq(ptr %a211, ptr %a212) + %t214 = icmp ne i32 %t213, 0 + br label %logic.rend7809 +logic.rend7809: + br label %logic.end7808 +logic.end7808: + %t215 = phi i1 [ true, %logic.from7806 ], [ %t214, %logic.rend7809 ] + br label %logic.from7810 +logic.from7810: + br i1 %t215, label %logic.end7812, label %logic.rhs7811 +logic.rhs7811: + %t216 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t217 = getelementptr inbounds %S.ast.Type, ptr %t216, i32 0, i32 0 + %t218 = load { ptr, i64, i64 }, ptr %t217 + store { ptr, i64, i64 } %t218, ptr %a219 + store { ptr, i64, i64 } { ptr @.str.4934, i64 6, i64 0 }, ptr %a220 + %t221 = call i32 @finch_str_eq(ptr %a219, ptr %a220) + %t222 = icmp ne i32 %t221, 0 + br label %logic.from7813 +logic.from7813: + br i1 %t222, label %logic.rhs7814, label %logic.end7815 +logic.rhs7814: + %t223 = load ptr, ptr %a1 + %t224 = icmp eq ptr %t223, null + br i1 %t224, label %panic7816, label %ok7817 +panic7816: + call void @finch_panic(ptr @.str.4935, i64 4540, ptr @.str.4936) + unreachable +ok7817: + %t225 = getelementptr inbounds %S.gen.Gen, ptr %t223, i32 0, i32 16 + %t226 = load ptr, ptr %a1 + %t227 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t228 = getelementptr inbounds %S.ast.Type, ptr %t227, i32 0, i32 3 + %t229 = load { ptr, i64, i64 }, ptr %t228 + %t230 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t231 = getelementptr inbounds %S.ast.Type, ptr %t230, i32 0, i32 2 + %t232 = load { ptr, i64, i64 }, ptr %t231 + %t233 = call i64 @finch.gen.findStruct(ptr %t226, { ptr, i64, i64 } %t229, { ptr, i64, i64 } %t232) + %t234 = load { ptr, i64, i64 }, ptr %t225 + %t235 = extractvalue { ptr, i64, i64 } %t234, 1 + %t236 = icmp uge i64 %t233, %t235 + br i1 %t236, label %range7818, label %inrange7819 +range7818: + call void @finch_panic_index(ptr @.str.4937, i64 4540, i64 %t233, i64 %t235) + unreachable +inrange7819: + %t237 = extractvalue { ptr, i64, i64 } %t234, 0 + %t238 = getelementptr inbounds %S.gen.StructDef, ptr %t237, i64 %t233 + %t239 = getelementptr inbounds %S.gen.StructDef, ptr %t238, i32 0, i32 2 + %t240 = load i1, ptr %t239 + br label %logic.rend7820 +logic.rend7820: + br label %logic.end7815 +logic.end7815: + %t241 = phi i1 [ false, %logic.from7813 ], [ %t240, %logic.rend7820 ] + br label %logic.rend7821 +logic.rend7821: + br label %logic.end7812 +logic.end7812: + %t242 = phi i1 [ true, %logic.from7810 ], [ %t241, %logic.rend7821 ] + %t243 = xor i1 %t242, true + br i1 %t243, label %then7822, label %endif7824 +then7822: + %t244 = load ptr, ptr %a1 + %t245 = load %S.ast.Node, ptr %a3 + %t246 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 1 + %t247 = load { ptr, i64, i64 }, ptr %t246 + store { ptr, i64, i64 } { ptr @.str.4938, i64 5, i64 0 }, ptr %a249 + store { ptr, i64, i64 } %t247, ptr %a250 + call void @finch_str_concat(ptr %a248, ptr %a249, ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a248 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.4939, i64 38, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + %t257 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t258 = load %S.ast.Type, ptr %t257 + %t259 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t258) + store { ptr, i64, i64 } %t256, ptr %a261 + store { ptr, i64, i64 } %t259, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + store { ptr, i64, i64 } %t256, ptr %a263 + call void @finch_str_drop(ptr %a263) + store { ptr, i64, i64 } %t259, ptr %a264 + call void @finch_str_drop(ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a260 + call void @finch.gen.fail(ptr %t244, %S.ast.Node %t245, { ptr, i64, i64 } %t265) + store { ptr, i64, i64 } %t265, ptr %a266 + call void @finch_str_drop(ptr %a266) + br label %endif7824 +endif7824: + %t267 = load ptr, ptr %a1 + %t268 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t269 = load %S.ast.Type, ptr %t268 + %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + %t271 = load { ptr, i64, i64 }, ptr %t270 + %t272 = call %S.gen.Plan @finch.gen.makePlan(ptr %t267, %S.ast.Type %t269, { ptr, i64, i64 } %t271) + store %S.gen.Plan %t272, ptr %a273 + %t274 = load ptr, ptr %a1 + %t275 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t274) + store %S.gen.Saved %t275, ptr %a276 + store { ptr, i64, i64 } zeroinitializer, ptr %a277 + store i64 0, ptr %a278 + store { ptr, i64, i64 } { ptr @.str.4940, i64 0, i64 0 }, ptr %a279 + %t280 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 + %t281 = load i1, ptr %t280 + br i1 %t281, label %then7825, label %endif7827 +then7825: + %t282 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t283 = load ptr, ptr %a1 + %t284 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t285 = load %S.ast.Type, ptr %t284 + %t286 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t283, %S.ast.Type %t285) + store { ptr, i64, i64 } { ptr @.str.4941, i64 9, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t286, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.4942, i64 14, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load i64, ptr %t282 + %t298 = add i64 %t297, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t298, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t299 = load ptr, ptr %a277 + %t300 = getelementptr inbounds { ptr, i64, i64 }, ptr %t299, i64 %t297 + store { ptr, i64, i64 } %t296, ptr %t300 + store i64 %t298, ptr %t282 + %t301 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.4943, i64 3, i64 0 }, ptr %a279 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + store i64 1, ptr %a278 + br label %endif7827 +endif7827: + store { ptr, i64, i64 } zeroinitializer, ptr %a303 + %t304 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + %t305 = getelementptr inbounds { ptr, i64, i64 }, ptr %t304, i32 0, i32 1 + %t306 = load i64, ptr %t305 + store i64 0, ptr %a307 + br label %for.cond7828 +for.cond7828: + %t308 = load i64, ptr %a307 + %t309 = icmp slt i64 %t308, %t306 + br i1 %t309, label %for.body7829, label %for.end7831 +for.body7829: + %t310 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 13 + %t311 = load i64, ptr %a307 + %t312 = load { ptr, i64, i64 }, ptr %t310 + %t313 = extractvalue { ptr, i64, i64 } %t312, 1 + %t314 = icmp uge i64 %t311, %t313 + br i1 %t314, label %range7832, label %inrange7833 +range7832: + call void @finch_panic_index(ptr @.str.4944, i64 4555, i64 %t311, i64 %t313) + unreachable +inrange7833: + %t315 = extractvalue { ptr, i64, i64 } %t312, 0 + %t316 = getelementptr inbounds %S.ast.Type, ptr %t315, i64 %t311 + %t317 = load %S.ast.Type, ptr %t316 + store %S.ast.Type %t317, ptr %a318 + call void @finch.copy.S_ast_Type(ptr %a319, ptr %a318) + %t320 = load %S.ast.Type, ptr %a319 + store %S.ast.Type %t320, ptr %a321 + %t322 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 1 + %t323 = load i64, ptr %a307 + %t324 = load { ptr, i64, i64 }, ptr %t322 + %t325 = extractvalue { ptr, i64, i64 } %t324, 1 + %t326 = icmp uge i64 %t323, %t325 + br i1 %t326, label %range7834, label %inrange7835 +range7834: + call void @finch_panic_index(ptr @.str.4945, i64 4556, i64 %t323, i64 %t325) + unreachable +inrange7835: + %t327 = extractvalue { ptr, i64, i64 } %t324, 0 + %t328 = getelementptr inbounds %S.gen.Abi, ptr %t327, i64 %t323 + %t329 = load %S.gen.Abi, ptr %t328 + store %S.gen.Abi %t329, ptr %a330 + call void @finch.copy.S_gen_Abi(ptr %a331, ptr %a330) + %t332 = load %S.gen.Abi, ptr %a331 + store %S.gen.Abi %t332, ptr %a333 + %t334 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t335, ptr %a336 + store { ptr, i64, i64 } { ptr @.str.4946, i64 6, i64 0 }, ptr %a337 + %t338 = call i32 @finch_str_eq(ptr %a336, ptr %a337) + %t339 = icmp ne i32 %t338, 0 + br i1 %t339, label %then7836, label %else7837 +then7836: + %t340 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t341 = load ptr, ptr %a1 + %t342 = load %S.ast.Type, ptr %a321 + %t343 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t341, %S.ast.Type %t342) + store { ptr, i64, i64 } { ptr @.str.4947, i64 10, i64 0 }, ptr %a345 + store { ptr, i64, i64 } %t343, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t343, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = load { ptr, i64, i64 }, ptr %a344 + store { ptr, i64, i64 } %t348, ptr %a350 + store { ptr, i64, i64 } { ptr @.str.4948, i64 8, i64 0 }, ptr %a351 + call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) + store { ptr, i64, i64 } %t348, ptr %a352 + call void @finch_str_drop(ptr %a352) + %t353 = load { ptr, i64, i64 }, ptr %a349 + %t354 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 3 + %t355 = load i64, ptr %t354 + call void @finch_str_from_int(ptr %a356, i64 %t355) + %t357 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } %t353, ptr %a359 + store { ptr, i64, i64 } %t357, ptr %a360 + call void @finch_str_concat(ptr %a358, ptr %a359, ptr %a360) + store { ptr, i64, i64 } %t353, ptr %a361 + call void @finch_str_drop(ptr %a361) + store { ptr, i64, i64 } %t357, ptr %a362 + call void @finch_str_drop(ptr %a362) + %t363 = load { ptr, i64, i64 }, ptr %a358 + store { ptr, i64, i64 } %t363, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.4949, i64 3, i64 0 }, ptr %a366 + call void @finch_str_concat(ptr %a364, ptr %a365, ptr %a366) + store { ptr, i64, i64 } %t363, ptr %a367 + call void @finch_str_drop(ptr %a367) + %t368 = load { ptr, i64, i64 }, ptr %a364 + %t369 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a370, i64 %t369) + %t371 = load { ptr, i64, i64 }, ptr %a370 + store { ptr, i64, i64 } %t368, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t368, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t371, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a372 + %t378 = load i64, ptr %t340 + %t379 = add i64 %t378, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t379, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t380 = load ptr, ptr %a277 + %t381 = getelementptr inbounds { ptr, i64, i64 }, ptr %t380, i64 %t378 + store { ptr, i64, i64 } %t377, ptr %t381 + store i64 %t379, ptr %t340 + %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t383 = load ptr, ptr %a1 + %t384 = load %S.ast.Type, ptr %a321 + %t385 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t383, %S.ast.Type %t384) + store { ptr, i64, i64 } %t385, ptr %a387 + store { ptr, i64, i64 } { ptr @.str.4950, i64 1, i64 0 }, ptr %a388 + call void @finch_str_concat(ptr %a386, ptr %a387, ptr %a388) + store { ptr, i64, i64 } %t385, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a386 + %t391 = load ptr, ptr %a1 + %t392 = load ptr, ptr %a1 + %t393 = load %S.ast.Type, ptr %a321 + %t394 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t392, %S.ast.Type %t393) + %t395 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a396, i64 %t395) + %t397 = load { ptr, i64, i64 }, ptr %a396 + store { ptr, i64, i64 } { ptr @.str.4951, i64 2, i64 0 }, ptr %a399 + store { ptr, i64, i64 } %t397, ptr %a400 + call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) + store { ptr, i64, i64 } %t397, ptr %a401 + call void @finch_str_drop(ptr %a401) + %t402 = load { ptr, i64, i64 }, ptr %a398 + %t403 = call { ptr, i64, i64 } @finch.gen.load(ptr %t391, { ptr, i64, i64 } %t394, { ptr, i64, i64 } %t402) + store { ptr, i64, i64 } %t394, ptr %a404 + call void @finch_str_drop(ptr %a404) + store { ptr, i64, i64 } %t402, ptr %a405 + call void @finch_str_drop(ptr %a405) + store { ptr, i64, i64 } %t390, ptr %a407 + store { ptr, i64, i64 } %t403, ptr %a408 + call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408) + store { ptr, i64, i64 } %t390, ptr %a409 + call void @finch_str_drop(ptr %a409) + store { ptr, i64, i64 } %t403, ptr %a410 + call void @finch_str_drop(ptr %a410) + %t411 = load { ptr, i64, i64 }, ptr %a406 + %t412 = load i64, ptr %t382 + %t413 = add i64 %t412, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t413, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t414 = load ptr, ptr %a303 + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t412 + store { ptr, i64, i64 } %t411, ptr %t415 + store i64 %t413, ptr %t382 + %t416 = load i64, ptr %a278 + %t417 = add i64 %t416, 1 + store i64 %t417, ptr %a278 + br label %endif7838 +else7837: + %t418 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 + %t419 = load { ptr, i64, i64 }, ptr %t418 + store { ptr, i64, i64 } %t419, ptr %a420 + store { ptr, i64, i64 } { ptr @.str.4952, i64 8, i64 0 }, ptr %a421 + %t422 = call i32 @finch_str_eq(ptr %a420, ptr %a421) + %t423 = icmp ne i32 %t422, 0 + br i1 %t423, label %then7839, label %else7840 +then7839: + %t424 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t425 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a426, i64 %t425) + %t427 = load { ptr, i64, i64 }, ptr %a426 + store { ptr, i64, i64 } { ptr @.str.4953, i64 6, i64 0 }, ptr %a429 + store { ptr, i64, i64 } %t427, ptr %a430 + call void @finch_str_concat(ptr %a428, ptr %a429, ptr %a430) + store { ptr, i64, i64 } %t427, ptr %a431 + call void @finch_str_drop(ptr %a431) + %t432 = load { ptr, i64, i64 }, ptr %a428 + %t433 = load i64, ptr %t424 + %t434 = add i64 %t433, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t434, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t435 = load ptr, ptr %a277 + %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %t435, i64 %t433 + store { ptr, i64, i64 } %t432, ptr %t436 + store i64 %t434, ptr %t424 + %t437 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t438 = load ptr, ptr %a1 + %t439 = load %S.ast.Type, ptr %a321 + %t440 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t438, %S.ast.Type %t439) + store { ptr, i64, i64 } %t440, ptr %a442 + store { ptr, i64, i64 } { ptr @.str.4954, i64 1, i64 0 }, ptr %a443 + call void @finch_str_concat(ptr %a441, ptr %a442, ptr %a443) + store { ptr, i64, i64 } %t440, ptr %a444 + call void @finch_str_drop(ptr %a444) + %t445 = load { ptr, i64, i64 }, ptr %a441 + %t446 = load ptr, ptr %a1 + %t447 = load ptr, ptr %a1 + %t448 = load %S.ast.Type, ptr %a321 + %t449 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t447, %S.ast.Type %t448) + %t450 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a451, i64 %t450) + %t452 = load { ptr, i64, i64 }, ptr %a451 + store { ptr, i64, i64 } { ptr @.str.4955, i64 2, i64 0 }, ptr %a454 + store { ptr, i64, i64 } %t452, ptr %a455 + call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) + store { ptr, i64, i64 } %t452, ptr %a456 + call void @finch_str_drop(ptr %a456) + %t457 = load { ptr, i64, i64 }, ptr %a453 + %t458 = call { ptr, i64, i64 } @finch.gen.load(ptr %t446, { ptr, i64, i64 } %t449, { ptr, i64, i64 } %t457) + store { ptr, i64, i64 } %t449, ptr %a459 + call void @finch_str_drop(ptr %a459) + store { ptr, i64, i64 } %t457, ptr %a460 + call void @finch_str_drop(ptr %a460) + store { ptr, i64, i64 } %t445, ptr %a462 + store { ptr, i64, i64 } %t458, ptr %a463 + call void @finch_str_concat(ptr %a461, ptr %a462, ptr %a463) + store { ptr, i64, i64 } %t445, ptr %a464 + call void @finch_str_drop(ptr %a464) + store { ptr, i64, i64 } %t458, ptr %a465 + call void @finch_str_drop(ptr %a465) + %t466 = load { ptr, i64, i64 }, ptr %a461 + %t467 = load i64, ptr %t437 + %t468 = add i64 %t467, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t468, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t469 = load ptr, ptr %a303 + %t470 = getelementptr inbounds { ptr, i64, i64 }, ptr %t469, i64 %t467 + store { ptr, i64, i64 } %t466, ptr %t470 + store i64 %t468, ptr %t437 + %t471 = load i64, ptr %a278 + %t472 = add i64 %t471, 1 + store i64 %t472, ptr %a278 + br label %endif7841 +else7840: + %t473 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 0 + %t474 = load { ptr, i64, i64 }, ptr %t473 + store { ptr, i64, i64 } %t474, ptr %a475 + store { ptr, i64, i64 } { ptr @.str.4956, i64 6, i64 0 }, ptr %a476 + %t477 = call i32 @finch_str_eq(ptr %a475, ptr %a476) + %t478 = icmp ne i32 %t477, 0 + br i1 %t478, label %then7842, label %else7843 +then7842: + %t479 = load ptr, ptr %a1 + %t480 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t479, { ptr, i64, i64 } { ptr @.str.4957, i64 9, i64 0 }) + store { ptr, i64, i64 } %t480, ptr %a481 + %t482 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 + %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 + %t484 = load i64, ptr %t483 + store i64 0, ptr %a485 + br label %for.cond7845 +for.cond7845: + %t486 = load i64, ptr %a485 + %t487 = icmp slt i64 %t486, %t484 + br i1 %t487, label %for.body7846, label %for.end7848 +for.body7846: + %t488 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t489 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 + %t490 = load i64, ptr %a485 + %t491 = load { ptr, i64, i64 }, ptr %t489 + %t492 = extractvalue { ptr, i64, i64 } %t491, 1 + %t493 = icmp uge i64 %t490, %t492 + br i1 %t493, label %range7849, label %inrange7850 +range7849: + call void @finch_panic_index(ptr @.str.4958, i64 4568, i64 %t490, i64 %t492) + unreachable +inrange7850: + %t494 = extractvalue { ptr, i64, i64 } %t491, 0 + %t495 = getelementptr inbounds { ptr, i64, i64 }, ptr %t494, i64 %t490 + %t496 = load { ptr, i64, i64 }, ptr %t495 + store { ptr, i64, i64 } %t496, ptr %a498 + store { ptr, i64, i64 } { ptr @.str.4959, i64 3, i64 0 }, ptr %a499 + call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499) + %t500 = load { ptr, i64, i64 }, ptr %a497 + %t501 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a502, i64 %t501) + %t503 = load { ptr, i64, i64 }, ptr %a502 + store { ptr, i64, i64 } %t500, ptr %a505 + store { ptr, i64, i64 } %t503, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t500, ptr %a507 + call void @finch_str_drop(ptr %a507) + store { ptr, i64, i64 } %t503, ptr %a508 + call void @finch_str_drop(ptr %a508) + %t509 = load { ptr, i64, i64 }, ptr %a504 + %t510 = load i64, ptr %t488 + %t511 = add i64 %t510, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t511, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t512 = load ptr, ptr %a277 + %t513 = getelementptr inbounds { ptr, i64, i64 }, ptr %t512, i64 %t510 + store { ptr, i64, i64 } %t509, ptr %t513 + store i64 %t511, ptr %t488 + %t514 = load ptr, ptr %a1 + %t515 = getelementptr inbounds %S.gen.Abi, ptr %a333, i32 0, i32 1 + %t516 = load i64, ptr %a485 + %t517 = load { ptr, i64, i64 }, ptr %t515 + %t518 = extractvalue { ptr, i64, i64 } %t517, 1 + %t519 = icmp uge i64 %t516, %t518 + br i1 %t519, label %range7851, label %inrange7852 +range7851: + call void @finch_panic_index(ptr @.str.4960, i64 4569, i64 %t516, i64 %t518) + unreachable +inrange7852: + %t520 = extractvalue { ptr, i64, i64 } %t517, 0 + %t521 = getelementptr inbounds { ptr, i64, i64 }, ptr %t520, i64 %t516 + %t522 = load { ptr, i64, i64 }, ptr %t521 + %t523 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a524, i64 %t523) + %t525 = load { ptr, i64, i64 }, ptr %a524 + store { ptr, i64, i64 } { ptr @.str.4961, i64 2, i64 0 }, ptr %a527 + store { ptr, i64, i64 } %t525, ptr %a528 + call void @finch_str_concat(ptr %a526, ptr %a527, ptr %a528) + store { ptr, i64, i64 } %t525, ptr %a529 + call void @finch_str_drop(ptr %a529) + %t530 = load { ptr, i64, i64 }, ptr %a526 + %t531 = load ptr, ptr %a1 + %t532 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } { ptr @.str.4962, i64 31, i64 0 }, ptr %a534 + store { ptr, i64, i64 } %t532, ptr %a535 + call void @finch_str_concat(ptr %a533, ptr %a534, ptr %a535) + %t536 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } %t536, ptr %a538 + store { ptr, i64, i64 } { ptr @.str.4963, i64 6, i64 0 }, ptr %a539 + call void @finch_str_concat(ptr %a537, ptr %a538, ptr %a539) + store { ptr, i64, i64 } %t536, ptr %a540 + call void @finch_str_drop(ptr %a540) + %t541 = load { ptr, i64, i64 }, ptr %a537 + %t542 = load i64, ptr %a485 + %t543 = mul i64 8, %t542 + call void @finch_str_from_int(ptr %a544, i64 %t543) + %t545 = load { ptr, i64, i64 }, ptr %a544 + store { ptr, i64, i64 } %t541, ptr %a547 + store { ptr, i64, i64 } %t545, ptr %a548 + call void @finch_str_concat(ptr %a546, ptr %a547, ptr %a548) + store { ptr, i64, i64 } %t541, ptr %a549 + call void @finch_str_drop(ptr %a549) + store { ptr, i64, i64 } %t545, ptr %a550 + call void @finch_str_drop(ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a546 + %t552 = call { ptr, i64, i64 } @finch.gen.op(ptr %t531, { ptr, i64, i64 } %t551) + store { ptr, i64, i64 } %t551, ptr %a553 + call void @finch_str_drop(ptr %a553) + call void @finch.gen.store(ptr %t514, { ptr, i64, i64 } %t522, { ptr, i64, i64 } %t530, { ptr, i64, i64 } %t552) + store { ptr, i64, i64 } %t530, ptr %a554 + call void @finch_str_drop(ptr %a554) + store { ptr, i64, i64 } %t552, ptr %a555 + call void @finch_str_drop(ptr %a555) + %t556 = load i64, ptr %a278 + %t557 = add i64 %t556, 1 + store i64 %t557, ptr %a278 + br label %for.step7847 +for.step7847: + %t558 = load i64, ptr %a485 + %t559 = add i64 %t558, 1 + store i64 %t559, ptr %a485 + br label %for.cond7845 +for.end7848: + %t560 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t561 = load ptr, ptr %a1 + %t562 = load %S.ast.Type, ptr %a321 + %t563 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t561, %S.ast.Type %t562) + store { ptr, i64, i64 } %t563, ptr %a565 + store { ptr, i64, i64 } { ptr @.str.4964, i64 1, i64 0 }, ptr %a566 + call void @finch_str_concat(ptr %a564, ptr %a565, ptr %a566) + store { ptr, i64, i64 } %t563, ptr %a567 + call void @finch_str_drop(ptr %a567) + %t568 = load { ptr, i64, i64 }, ptr %a564 + %t569 = load ptr, ptr %a1 + %t570 = load ptr, ptr %a1 + %t571 = load %S.ast.Type, ptr %a321 + %t572 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t570, %S.ast.Type %t571) + %t573 = load { ptr, i64, i64 }, ptr %a481 + %t574 = call { ptr, i64, i64 } @finch.gen.load(ptr %t569, { ptr, i64, i64 } %t572, { ptr, i64, i64 } %t573) + store { ptr, i64, i64 } %t572, ptr %a575 + call void @finch_str_drop(ptr %a575) + store { ptr, i64, i64 } %t568, ptr %a577 + store { ptr, i64, i64 } %t574, ptr %a578 + call void @finch_str_concat(ptr %a576, ptr %a577, ptr %a578) + store { ptr, i64, i64 } %t568, ptr %a579 + call void @finch_str_drop(ptr %a579) + store { ptr, i64, i64 } %t574, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = load { ptr, i64, i64 }, ptr %a576 + %t582 = load i64, ptr %t560 + %t583 = add i64 %t582, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t583, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t584 = load ptr, ptr %a303 + %t585 = getelementptr inbounds { ptr, i64, i64 }, ptr %t584, i64 %t582 + store { ptr, i64, i64 } %t581, ptr %t585 + store i64 %t583, ptr %t560 + call void @finch_str_drop(ptr %a481) + br label %endif7844 +else7843: + %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + %t587 = load ptr, ptr %a1 + %t588 = load %S.ast.Type, ptr %a321 + %t589 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t587, %S.ast.Type %t588) + %t590 = load ptr, ptr %a1 + %t591 = load %S.ast.Type, ptr %a321 + %t592 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t590, %S.ast.Type %t591) + store { ptr, i64, i64 } %t589, ptr %a594 + store { ptr, i64, i64 } %t592, ptr %a595 + call void @finch_str_concat(ptr %a593, ptr %a594, ptr %a595) + store { ptr, i64, i64 } %t589, ptr %a596 + call void @finch_str_drop(ptr %a596) + store { ptr, i64, i64 } %t592, ptr %a597 + call void @finch_str_drop(ptr %a597) + %t598 = load { ptr, i64, i64 }, ptr %a593 + store { ptr, i64, i64 } %t598, ptr %a600 + store { ptr, i64, i64 } { ptr @.str.4965, i64 3, i64 0 }, ptr %a601 + call void @finch_str_concat(ptr %a599, ptr %a600, ptr %a601) + store { ptr, i64, i64 } %t598, ptr %a602 + call void @finch_str_drop(ptr %a602) + %t603 = load { ptr, i64, i64 }, ptr %a599 + %t604 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a605, i64 %t604) + %t606 = load { ptr, i64, i64 }, ptr %a605 + store { ptr, i64, i64 } %t603, ptr %a608 + store { ptr, i64, i64 } %t606, ptr %a609 + call void @finch_str_concat(ptr %a607, ptr %a608, ptr %a609) + store { ptr, i64, i64 } %t603, ptr %a610 + call void @finch_str_drop(ptr %a610) + store { ptr, i64, i64 } %t606, ptr %a611 + call void @finch_str_drop(ptr %a611) + %t612 = load { ptr, i64, i64 }, ptr %a607 + %t613 = load i64, ptr %t586 + %t614 = add i64 %t613, 1 + call void @finch_arr_reserve(ptr %a277, i64 %t614, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t615 = load ptr, ptr %a277 + %t616 = getelementptr inbounds { ptr, i64, i64 }, ptr %t615, i64 %t613 + store { ptr, i64, i64 } %t612, ptr %t616 + store i64 %t614, ptr %t586 + %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + %t618 = load ptr, ptr %a1 + %t619 = load %S.ast.Type, ptr %a321 + %t620 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t618, %S.ast.Type %t619) + store { ptr, i64, i64 } %t620, ptr %a622 + store { ptr, i64, i64 } { ptr @.str.4966, i64 3, i64 0 }, ptr %a623 + call void @finch_str_concat(ptr %a621, ptr %a622, ptr %a623) + store { ptr, i64, i64 } %t620, ptr %a624 + call void @finch_str_drop(ptr %a624) + %t625 = load { ptr, i64, i64 }, ptr %a621 + %t626 = load i64, ptr %a278 + call void @finch_str_from_int(ptr %a627, i64 %t626) + %t628 = load { ptr, i64, i64 }, ptr %a627 + store { ptr, i64, i64 } %t625, ptr %a630 + store { ptr, i64, i64 } %t628, ptr %a631 + call void @finch_str_concat(ptr %a629, ptr %a630, ptr %a631) + store { ptr, i64, i64 } %t625, ptr %a632 + call void @finch_str_drop(ptr %a632) + store { ptr, i64, i64 } %t628, ptr %a633 + call void @finch_str_drop(ptr %a633) + %t634 = load { ptr, i64, i64 }, ptr %a629 + %t635 = load i64, ptr %t617 + %t636 = add i64 %t635, 1 + call void @finch_arr_reserve(ptr %a303, i64 %t636, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t637 = load ptr, ptr %a303 + %t638 = getelementptr inbounds { ptr, i64, i64 }, ptr %t637, i64 %t635 + store { ptr, i64, i64 } %t634, ptr %t638 + store i64 %t636, ptr %t617 + %t639 = load i64, ptr %a278 + %t640 = add i64 %t639, 1 + store i64 %t640, ptr %a278 + br label %endif7844 +endif7844: + br label %endif7841 +endif7841: + br label %endif7838 +endif7838: + call void @finch.drop.S_gen_Abi(ptr %a333) + call void @finch.drop.S_ast_Type(ptr %a321) + br label %for.step7830 +for.step7830: + %t641 = load i64, ptr %a307 + %t642 = add i64 %t641, 1 + store i64 %t642, ptr %a307 + br label %for.cond7828 +for.end7831: + %t643 = load ptr, ptr %a1 + %t644 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t645 = load %S.ast.Type, ptr %t644 + %t646 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t643, %S.ast.Type %t645) + store { ptr, i64, i64 } { ptr @.str.4967, i64 5, i64 0 }, ptr %a648 + store { ptr, i64, i64 } %t646, ptr %a649 + call void @finch_str_concat(ptr %a647, ptr %a648, ptr %a649) + store { ptr, i64, i64 } %t646, ptr %a650 + call void @finch_str_drop(ptr %a650) + %t651 = load { ptr, i64, i64 }, ptr %a647 + store { ptr, i64, i64 } %t651, ptr %a653 + store { ptr, i64, i64 } { ptr @.str.4968, i64 1, i64 0 }, ptr %a654 + call void @finch_str_concat(ptr %a652, ptr %a653, ptr %a654) + store { ptr, i64, i64 } %t651, ptr %a655 + call void @finch_str_drop(ptr %a655) + %t656 = load { ptr, i64, i64 }, ptr %a652 + %t657 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 11 + %t658 = load { ptr, i64, i64 }, ptr %t657 + store { ptr, i64, i64 } %t656, ptr %a660 + store { ptr, i64, i64 } %t658, ptr %a661 + call void @finch_str_concat(ptr %a659, ptr %a660, ptr %a661) + store { ptr, i64, i64 } %t656, ptr %a662 + call void @finch_str_drop(ptr %a662) + %t663 = load { ptr, i64, i64 }, ptr %a659 + store { ptr, i64, i64 } %t663, ptr %a665 + store { ptr, i64, i64 } { ptr @.str.4969, i64 1, i64 0 }, ptr %a666 + call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) + store { ptr, i64, i64 } %t663, ptr %a667 + call void @finch_str_drop(ptr %a667) + %t668 = load { ptr, i64, i64 }, ptr %a664 + %t669 = getelementptr inbounds { ptr, i64, i64 }, ptr %a303, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4970, i64 2, i64 0 }, ptr %a670 + call void @finch_str_join(ptr %a671, ptr %a303, ptr %a670) + %t672 = load { ptr, i64, i64 }, ptr %a671 + store { ptr, i64, i64 } %t668, ptr %a674 + store { ptr, i64, i64 } %t672, ptr %a675 + call void @finch_str_concat(ptr %a673, ptr %a674, ptr %a675) + store { ptr, i64, i64 } %t668, ptr %a676 + call void @finch_str_drop(ptr %a676) + store { ptr, i64, i64 } %t672, ptr %a677 + call void @finch_str_drop(ptr %a677) + %t678 = load { ptr, i64, i64 }, ptr %a673 + store { ptr, i64, i64 } %t678, ptr %a680 + store { ptr, i64, i64 } { ptr @.str.4971, i64 1, i64 0 }, ptr %a681 + call void @finch_str_concat(ptr %a679, ptr %a680, ptr %a681) + store { ptr, i64, i64 } %t678, ptr %a682 + call void @finch_str_drop(ptr %a682) + %t683 = load { ptr, i64, i64 }, ptr %a679 + store { ptr, i64, i64 } %t683, ptr %a684 + store { ptr, i64, i64 } { ptr @.str.4972, i64 0, i64 0 }, ptr %a685 + %t686 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t687 = getelementptr inbounds %S.ast.Type, ptr %t686, i32 0, i32 0 + %t688 = load { ptr, i64, i64 }, ptr %t687 + store { ptr, i64, i64 } %t688, ptr %a689 + store { ptr, i64, i64 } { ptr @.str.4973, i64 4, i64 0 }, ptr %a690 + %t691 = call i32 @finch_str_eq(ptr %a689, ptr %a690) + %t692 = icmp ne i32 %t691, 0 + br i1 %t692, label %then7853, label %else7854 +then7853: + %t693 = load ptr, ptr %a1 + %t694 = load { ptr, i64, i64 }, ptr %a684 + call void @finch.gen.emit(ptr %t693, { ptr, i64, i64 } %t694) + %t695 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t695, { ptr, i64, i64 } { ptr @.str.4974, i64 8, i64 0 }) + br label %endif7855 +else7854: + %t696 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 3 + %t697 = load i1, ptr %t696 + br i1 %t697, label %then7856, label %else7857 +then7856: + %t698 = load ptr, ptr %a1 + %t699 = load ptr, ptr %a1 + %t700 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t701 = load %S.ast.Type, ptr %t700 + %t702 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t699, %S.ast.Type %t701) + %t703 = load ptr, ptr %a1 + %t704 = load { ptr, i64, i64 }, ptr %a684 + %t705 = call { ptr, i64, i64 } @finch.gen.op(ptr %t703, { ptr, i64, i64 } %t704) + %t706 = load { ptr, i64, i64 }, ptr %a279 + call void @finch.gen.store(ptr %t698, { ptr, i64, i64 } %t702, { ptr, i64, i64 } %t705, { ptr, i64, i64 } %t706) + store { ptr, i64, i64 } %t702, ptr %a707 + call void @finch_str_drop(ptr %a707) + store { ptr, i64, i64 } %t705, ptr %a708 + call void @finch_str_drop(ptr %a708) + %t709 = load ptr, ptr %a1 + call void @finch.gen.emit(ptr %t709, { ptr, i64, i64 } { ptr @.str.4975, i64 8, i64 0 }) + br label %endif7858 +else7857: + %t710 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 + %t711 = getelementptr inbounds %S.gen.Abi, ptr %t710, i32 0, i32 0 + %t712 = load { ptr, i64, i64 }, ptr %t711 + store { ptr, i64, i64 } %t712, ptr %a713 + store { ptr, i64, i64 } { ptr @.str.4976, i64 6, i64 0 }, ptr %a714 + %t715 = call i32 @finch_str_eq(ptr %a713, ptr %a714) + %t716 = icmp ne i32 %t715, 0 + br i1 %t716, label %then7859, label %else7860 +then7859: + %t717 = load ptr, ptr %a1 + %t718 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t717, { ptr, i64, i64 } { ptr @.str.4977, i64 9, i64 0 }) + store { ptr, i64, i64 } %t718, ptr %a719 + %t720 = load ptr, ptr %a1 + %t721 = load ptr, ptr %a1 + %t722 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t723 = load %S.ast.Type, ptr %t722 + %t724 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t721, %S.ast.Type %t723) + %t725 = load ptr, ptr %a1 + %t726 = load { ptr, i64, i64 }, ptr %a684 + %t727 = call { ptr, i64, i64 } @finch.gen.op(ptr %t725, { ptr, i64, i64 } %t726) + %t728 = load { ptr, i64, i64 }, ptr %a719 + call void @finch.gen.store(ptr %t720, { ptr, i64, i64 } %t724, { ptr, i64, i64 } %t727, { ptr, i64, i64 } %t728) + store { ptr, i64, i64 } %t724, ptr %a729 + call void @finch_str_drop(ptr %a729) + store { ptr, i64, i64 } %t727, ptr %a730 + call void @finch_str_drop(ptr %a730) + %t731 = load ptr, ptr %a1 + %t732 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 + %t733 = getelementptr inbounds %S.gen.Abi, ptr %t732, i32 0, i32 2 + %t734 = load { ptr, i64, i64 }, ptr %t733 + store { ptr, i64, i64 } { ptr @.str.4978, i64 4, i64 0 }, ptr %a736 + store { ptr, i64, i64 } %t734, ptr %a737 + call void @finch_str_concat(ptr %a735, ptr %a736, ptr %a737) + %t738 = load { ptr, i64, i64 }, ptr %a735 + store { ptr, i64, i64 } %t738, ptr %a740 + store { ptr, i64, i64 } { ptr @.str.4979, i64 1, i64 0 }, ptr %a741 + call void @finch_str_concat(ptr %a739, ptr %a740, ptr %a741) + store { ptr, i64, i64 } %t738, ptr %a742 + call void @finch_str_drop(ptr %a742) + %t743 = load { ptr, i64, i64 }, ptr %a739 + %t744 = load ptr, ptr %a1 + %t745 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 0 + %t746 = getelementptr inbounds %S.gen.Abi, ptr %t745, i32 0, i32 2 + %t747 = load { ptr, i64, i64 }, ptr %t746 + %t748 = load { ptr, i64, i64 }, ptr %a719 + %t749 = call { ptr, i64, i64 } @finch.gen.load(ptr %t744, { ptr, i64, i64 } %t747, { ptr, i64, i64 } %t748) + store { ptr, i64, i64 } %t743, ptr %a751 + store { ptr, i64, i64 } %t749, ptr %a752 + call void @finch_str_concat(ptr %a750, ptr %a751, ptr %a752) + store { ptr, i64, i64 } %t743, ptr %a753 + call void @finch_str_drop(ptr %a753) + store { ptr, i64, i64 } %t749, ptr %a754 + call void @finch_str_drop(ptr %a754) + %t755 = load { ptr, i64, i64 }, ptr %a750 + call void @finch.gen.emit(ptr %t731, { ptr, i64, i64 } %t755) + store { ptr, i64, i64 } %t755, ptr %a756 + call void @finch_str_drop(ptr %a756) + call void @finch_str_drop(ptr %a719) + br label %endif7861 +else7860: + %t757 = load ptr, ptr %a1 + %t758 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t759 = load %S.ast.Type, ptr %t758 + %t760 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t757, %S.ast.Type %t759) + %t761 = load { ptr, i64, i64 }, ptr %a685 + store { ptr, i64, i64 } %t760, ptr %a685 + store { ptr, i64, i64 } %t761, ptr %a762 + call void @finch_str_drop(ptr %a762) + %t763 = load ptr, ptr %a1 + %t764 = load ptr, ptr %a1 + %t765 = getelementptr inbounds %S.gen.FnSig, ptr %a17, i32 0, i32 12 + %t766 = load %S.ast.Type, ptr %t765 + %t767 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t764, %S.ast.Type %t766) + store { ptr, i64, i64 } { ptr @.str.4980, i64 4, i64 0 }, ptr %a769 + store { ptr, i64, i64 } %t767, ptr %a770 + call void @finch_str_concat(ptr %a768, ptr %a769, ptr %a770) + store { ptr, i64, i64 } %t767, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a768 + store { ptr, i64, i64 } %t772, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.4981, i64 1, i64 0 }, ptr %a775 + call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) + store { ptr, i64, i64 } %t772, ptr %a776 + call void @finch_str_drop(ptr %a776) + %t777 = load { ptr, i64, i64 }, ptr %a773 + %t778 = load ptr, ptr %a1 + %t779 = load { ptr, i64, i64 }, ptr %a684 + %t780 = call { ptr, i64, i64 } @finch.gen.op(ptr %t778, { ptr, i64, i64 } %t779) + store { ptr, i64, i64 } %t777, ptr %a782 + store { ptr, i64, i64 } %t780, ptr %a783 + call void @finch_str_concat(ptr %a781, ptr %a782, ptr %a783) + store { ptr, i64, i64 } %t777, ptr %a784 + call void @finch_str_drop(ptr %a784) + store { ptr, i64, i64 } %t780, ptr %a785 + call void @finch_str_drop(ptr %a785) + %t786 = load { ptr, i64, i64 }, ptr %a781 + call void @finch.gen.emit(ptr %t763, { ptr, i64, i64 } %t786) + store { ptr, i64, i64 } %t786, ptr %a787 + call void @finch_str_drop(ptr %a787) + br label %endif7861 +endif7861: + br label %endif7858 +endif7858: + br label %endif7855 +endif7855: + %t788 = load ptr, ptr %a1 + %t789 = load %S.gen.Saved, ptr %a276 + %t790 = load { ptr, i64, i64 }, ptr %a685 + store { ptr, i64, i64 } { ptr @.str.4982, i64 15, i64 0 }, ptr %a792 + store { ptr, i64, i64 } %t790, ptr %a793 + call void @finch_str_concat(ptr %a791, ptr %a792, ptr %a793) + %t794 = load { ptr, i64, i64 }, ptr %a791 + store { ptr, i64, i64 } %t794, ptr %a796 + store { ptr, i64, i64 } { ptr @.str.4983, i64 1, i64 0 }, ptr %a797 + call void @finch_str_concat(ptr %a795, ptr %a796, ptr %a797) + store { ptr, i64, i64 } %t794, ptr %a798 + call void @finch_str_drop(ptr %a798) + %t799 = load { ptr, i64, i64 }, ptr %a795 + %t800 = getelementptr inbounds %S.gen.Plan, ptr %a273, i32 0, i32 2 + %t801 = load { ptr, i64, i64 }, ptr %t800 + store { ptr, i64, i64 } %t799, ptr %a803 + store { ptr, i64, i64 } %t801, ptr %a804 + call void @finch_str_concat(ptr %a802, ptr %a803, ptr %a804) + store { ptr, i64, i64 } %t799, ptr %a805 + call void @finch_str_drop(ptr %a805) + %t806 = load { ptr, i64, i64 }, ptr %a802 + store { ptr, i64, i64 } %t806, ptr %a808 + store { ptr, i64, i64 } { ptr @.str.4984, i64 1, i64 0 }, ptr %a809 + call void @finch_str_concat(ptr %a807, ptr %a808, ptr %a809) + store { ptr, i64, i64 } %t806, ptr %a810 + call void @finch_str_drop(ptr %a810) + %t811 = load { ptr, i64, i64 }, ptr %a807 + %t812 = load { ptr, i64, i64 }, ptr %a38 + store { ptr, i64, i64 } %t811, ptr %a814 + store { ptr, i64, i64 } %t812, ptr %a815 + call void @finch_str_concat(ptr %a813, ptr %a814, ptr %a815) + store { ptr, i64, i64 } %t811, ptr %a816 + call void @finch_str_drop(ptr %a816) + %t817 = load { ptr, i64, i64 }, ptr %a813 + store { ptr, i64, i64 } %t817, ptr %a819 + store { ptr, i64, i64 } { ptr @.str.4985, i64 1, i64 0 }, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t817, ptr %a821 + call void @finch_str_drop(ptr %a821) + %t822 = load { ptr, i64, i64 }, ptr %a818 + %t823 = getelementptr inbounds { ptr, i64, i64 }, ptr %a277, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.4986, i64 2, i64 0 }, ptr %a824 + call void @finch_str_join(ptr %a825, ptr %a277, ptr %a824) + %t826 = load { ptr, i64, i64 }, ptr %a825 + store { ptr, i64, i64 } %t822, ptr %a828 + store { ptr, i64, i64 } %t826, ptr %a829 + call void @finch_str_concat(ptr %a827, ptr %a828, ptr %a829) + store { ptr, i64, i64 } %t822, ptr %a830 + call void @finch_str_drop(ptr %a830) + store { ptr, i64, i64 } %t826, ptr %a831 + call void @finch_str_drop(ptr %a831) + %t832 = load { ptr, i64, i64 }, ptr %a827 + store { ptr, i64, i64 } %t832, ptr %a834 + store { ptr, i64, i64 } { ptr @.str.4987, i64 1, i64 0 }, ptr %a835 + call void @finch_str_concat(ptr %a833, ptr %a834, ptr %a835) + store { ptr, i64, i64 } %t832, ptr %a836 + call void @finch_str_drop(ptr %a836) + %t837 = load { ptr, i64, i64 }, ptr %a833 + call void @finch.gen.endHelper(ptr %t788, %S.gen.Saved %t789, { ptr, i64, i64 } %t837) + store { ptr, i64, i64 } %t837, ptr %a838 + call void @finch_str_drop(ptr %a838) + %t839 = load { ptr, i64, i64 }, ptr %a38 + call void @finch_str_drop(ptr %a685) + call void @finch_str_drop(ptr %a684) + call void @finch.drop.arr_str(ptr %a303) + call void @finch_str_drop(ptr %a279) + call void @finch.drop.arr_str(ptr %a277) + call void @finch.drop.S_gen_Saved(ptr %a276) + call void @finch.drop.S_gen_Plan(ptr %a273) + call void @finch.drop.S_gen_FnSig(ptr %a17) + ret { ptr, i64, i64 } %t839 +} + +define internal %S.gen.Val @finch.gen.enumFrom(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + %a14 = alloca %S.gen.EnumDef, align 16 + %a15 = alloca %S.gen.EnumDef, align 16 + %a17 = alloca %S.gen.EnumDef, align 16 + %a31 = alloca %S.gen.Val, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca %S.ast.Type, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca i64, align 16 + %a85 = alloca i64, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.ast.Type, align 16 + %a125 = alloca %S.ast.Type, align 16 + %a135 = alloca %S.ast.Type, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca i64, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca %S.ast.Type, align 16 + %a244 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic7865, label %ok7866 +panic7865: + call void @finch_panic(ptr @.str.4988, i64 4601, ptr @.str.4989) + unreachable +ok7866: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 21 + %t7 = load i64, ptr %a3 + %t8 = load { ptr, i64, i64 }, ptr %t6 + %t9 = extractvalue { ptr, i64, i64 } %t8, 1 + %t10 = icmp uge i64 %t7, %t9 + br i1 %t10, label %range7867, label %inrange7868 +range7867: + call void @finch_panic_index(ptr @.str.4990, i64 4601, i64 %t7, i64 %t9) + unreachable +inrange7868: + %t11 = extractvalue { ptr, i64, i64 } %t8, 0 + %t12 = getelementptr inbounds %S.gen.EnumDef, ptr %t11, i64 %t7 + %t13 = load %S.gen.EnumDef, ptr %t12 + store %S.gen.EnumDef %t13, ptr %a14 + call void @finch.copy.S_gen_EnumDef(ptr %a15, ptr %a14) + %t16 = load %S.gen.EnumDef, ptr %a15 + store %S.gen.EnumDef %t16, ptr %a17 + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + %t20 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + call void @finch.gen.checkArgs(ptr %t18, %S.ast.Node %t19, i64 0, i64 1, { ptr, i64, i64 } %t21) + %t22 = load ptr, ptr %a1 + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t24 = load { ptr, i64, i64 }, ptr %t23 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 0, %t25 + br i1 %t26, label %range7869, label %inrange7870 +range7869: + call void @finch_panic_index(ptr @.str.4991, i64 4603, i64 0, i64 %t25) + unreachable +inrange7870: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds %S.ast.Node, ptr %t27, i64 0 + %t29 = load %S.ast.Node, ptr %t28 + %t30 = call %S.gen.Val @finch.gen.expr(ptr %t22, %S.ast.Node %t29) + store %S.gen.Val %t30, ptr %a31 + %t32 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 + %t33 = load %S.ast.Type, ptr %t32 + %t34 = call i1 @finch.gen.isInt(%S.ast.Type %t33) + %t35 = xor i1 %t34, true + br i1 %t35, label %then7871, label %endif7873 +then7871: + %t36 = load ptr, ptr %a1 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t38 = load { ptr, i64, i64 }, ptr %t37 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 0, %t39 + br i1 %t40, label %range7874, label %inrange7875 +range7874: + call void @finch_panic_index(ptr @.str.4992, i64 4605, i64 0, i64 %t39) + unreachable +inrange7875: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 0 + %t43 = load %S.ast.Node, ptr %t42 + %t44 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t45 = load { ptr, i64, i64 }, ptr %t44 + store { ptr, i64, i64 } %t45, ptr %a47 + store { ptr, i64, i64 } { ptr @.str.4993, i64 54, i64 0 }, ptr %a48 + call void @finch_str_concat(ptr %a46, ptr %a47, ptr %a48) + %t49 = load { ptr, i64, i64 }, ptr %a46 + %t50 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 + %t51 = load %S.ast.Type, ptr %t50 + %t52 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t51) + store { ptr, i64, i64 } %t49, ptr %a54 + store { ptr, i64, i64 } %t52, ptr %a55 + call void @finch_str_concat(ptr %a53, ptr %a54, ptr %a55) + store { ptr, i64, i64 } %t49, ptr %a56 + call void @finch_str_drop(ptr %a56) + store { ptr, i64, i64 } %t52, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a53 + call void @finch.gen.fail(ptr %t36, %S.ast.Node %t43, { ptr, i64, i64 } %t58) + store { ptr, i64, i64 } %t58, ptr %a59 + call void @finch_str_drop(ptr %a59) + br label %endif7873 +endif7873: + %t60 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.4994, i64 4, i64 0 }, 0 + %t61 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t62 = load { ptr, i64, i64 }, ptr %t61 + store { ptr, i64, i64 } %t62, ptr %a63 + call void @finch_str_copy(ptr %a64, ptr %a63) + %t65 = load { ptr, i64, i64 }, ptr %a64 + %t66 = insertvalue %S.ast.Type %t60, { ptr, i64, i64 } %t65, 2 + %t67 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 0 + %t68 = load { ptr, i64, i64 }, ptr %t67 + store { ptr, i64, i64 } %t68, ptr %a69 + call void @finch_str_copy(ptr %a70, ptr %a69) + %t71 = load { ptr, i64, i64 }, ptr %a70 + %t72 = insertvalue %S.ast.Type %t66, { ptr, i64, i64 } %t71, 3 + store %S.ast.Type %t72, ptr %a73 + %t74 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 3 + %t75 = load i1, ptr %t74 + br i1 %t75, label %then7876, label %endif7878 +then7876: + %t76 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i32 0, i32 1 + %t78 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a80 + %t81 = call i64 @finch_str_to_int(ptr %a80, ptr @.str.4995, i64 4609) + store i64 -1, ptr %a82 + %t83 = load i64, ptr %t77 + %t84 = load ptr, ptr %t76 + store i64 0, ptr %a85 + br label %find.cond7879 +find.cond7879: + %t86 = load i64, ptr %a85 + %t87 = icmp slt i64 %t86, %t83 + br i1 %t87, label %find.body7880, label %find.end7883 +find.body7880: + %t88 = getelementptr inbounds i64, ptr %t84, i64 %t86 + %t89 = load i64, ptr %t88 + %t90 = icmp eq i64 %t89, %t81 + br i1 %t90, label %find.hit7881, label %find.next7882 +find.hit7881: + store i64 %t86, ptr %a82 + br label %find.end7883 +find.next7882: + %t91 = add i64 %t86, 1 + store i64 %t91, ptr %a85 + br label %find.cond7879 +find.end7883: + %t92 = load i64, ptr %a82 + %t93 = icmp sge i64 %t92, 0 + %t94 = xor i1 %t93, true + br i1 %t94, label %then7884, label %endif7886 +then7884: + %t95 = load ptr, ptr %a1 + %t96 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t97 = load { ptr, i64, i64 }, ptr %t96 + %t98 = extractvalue { ptr, i64, i64 } %t97, 1 + %t99 = icmp uge i64 0, %t98 + br i1 %t99, label %range7887, label %inrange7888 +range7887: + call void @finch_panic_index(ptr @.str.4996, i64 4610, i64 0, i64 %t98) + unreachable +inrange7888: + %t100 = extractvalue { ptr, i64, i64 } %t97, 0 + %t101 = getelementptr inbounds %S.ast.Node, ptr %t100, i64 0 + %t102 = load %S.ast.Node, ptr %t101 + %t103 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.4997, i64 37, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + %t108 = load { ptr, i64, i64 }, ptr %a105 + %t109 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t110 = load { ptr, i64, i64 }, ptr %t109 + store { ptr, i64, i64 } %t108, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t108, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + call void @finch.gen.fail(ptr %t95, %S.ast.Node %t102, { ptr, i64, i64 } %t115) + store { ptr, i64, i64 } %t115, ptr %a116 + call void @finch_str_drop(ptr %a116) + br label %endif7886 +endif7886: + %t117 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t118 = load { ptr, i64, i64 }, ptr %t117 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_copy(ptr %a120, ptr %a119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + %t122 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t121, 0 + %t123 = load %S.ast.Type, ptr %a73 + store %S.ast.Type %t123, ptr %a124 + call void @finch.copy.S_ast_Type(ptr %a125, ptr %a124) + %t126 = load %S.ast.Type, ptr %a125 + %t127 = insertvalue %S.gen.Val %t122, %S.ast.Type %t126, 1 + call void @finch.drop.S_ast_Type(ptr %a73) + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.S_gen_EnumDef(ptr %a17) + ret %S.gen.Val %t127 +endif7878: + %t128 = load ptr, ptr %a1 + %t129 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 0 + %t130 = load { ptr, i64, i64 }, ptr %t129 + %t131 = getelementptr inbounds %S.gen.Val, ptr %a31, i32 0, i32 1 + %t132 = load %S.ast.Type, ptr %t131 + %t133 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.4998, i64 3, i64 0 }) + %t134 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t128, { ptr, i64, i64 } %t130, %S.ast.Type %t132, %S.ast.Type %t133) + store %S.ast.Type %t133, ptr %a135 + call void @finch.drop.S_ast_Type(ptr %a135) + store { ptr, i64, i64 } %t134, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.4999, i64 0, i64 0 }, ptr %a137 + %t138 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i32 0, i32 1 + %t140 = load i64, ptr %t139 + store i64 0, ptr %a141 + br label %for.cond7889 +for.cond7889: + %t142 = load i64, ptr %a141 + %t143 = icmp slt i64 %t142, %t140 + br i1 %t143, label %for.body7890, label %for.end7892 +for.body7890: + %t144 = load ptr, ptr %a1 + %t145 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.5000, i64 12, i64 0 }, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + %t149 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t149, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.5001, i64 2, i64 0 }, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + store { ptr, i64, i64 } %t149, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a150 + %t155 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 3 + %t156 = load i64, ptr %a141 + %t157 = load { ptr, i64, i64 }, ptr %t155 + %t158 = extractvalue { ptr, i64, i64 } %t157, 1 + %t159 = icmp uge i64 %t156, %t158 + br i1 %t159, label %range7893, label %inrange7894 +range7893: + call void @finch_panic_index(ptr @.str.5002, i64 4617, i64 %t156, i64 %t158) + unreachable +inrange7894: + %t160 = extractvalue { ptr, i64, i64 } %t157, 0 + %t161 = getelementptr inbounds i64, ptr %t160, i64 %t156 + %t162 = load i64, ptr %t161 + call void @finch_str_from_int(ptr %a163, i64 %t162) + %t164 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t154, ptr %a166 + store { ptr, i64, i64 } %t164, ptr %a167 + call void @finch_str_concat(ptr %a165, ptr %a166, ptr %a167) + store { ptr, i64, i64 } %t154, ptr %a168 + call void @finch_str_drop(ptr %a168) + store { ptr, i64, i64 } %t164, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load { ptr, i64, i64 }, ptr %a165 + %t171 = call { ptr, i64, i64 } @finch.gen.op(ptr %t144, { ptr, i64, i64 } %t170) + store { ptr, i64, i64 } %t170, ptr %a172 + call void @finch_str_drop(ptr %a172) + store { ptr, i64, i64 } %t171, ptr %a173 + %t174 = load i64, ptr %a141 + %t175 = icmp eq i64 %t174, 0 + br i1 %t175, label %then7895, label %else7896 +then7895: + %t176 = load { ptr, i64, i64 }, ptr %a173 + store { ptr, i64, i64 } %t176, ptr %a177 + call void @finch_str_copy(ptr %a178, ptr %a177) + %t179 = load { ptr, i64, i64 }, ptr %a178 + %t180 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t179, ptr %a137 + store { ptr, i64, i64 } %t180, ptr %a181 + call void @finch_str_drop(ptr %a181) + br label %endif7897 +else7896: + %t182 = load ptr, ptr %a1 + %t183 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.5003, i64 6, i64 0 }, ptr %a185 + store { ptr, i64, i64 } %t183, ptr %a186 + call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a184 + store { ptr, i64, i64 } %t187, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.5004, i64 2, i64 0 }, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + %t193 = load { ptr, i64, i64 }, ptr %a173 + store { ptr, i64, i64 } %t192, ptr %a195 + store { ptr, i64, i64 } %t193, ptr %a196 + call void @finch_str_concat(ptr %a194, ptr %a195, ptr %a196) + store { ptr, i64, i64 } %t192, ptr %a197 + call void @finch_str_drop(ptr %a197) + %t198 = load { ptr, i64, i64 }, ptr %a194 + %t199 = call { ptr, i64, i64 } @finch.gen.op(ptr %t182, { ptr, i64, i64 } %t198) + store { ptr, i64, i64 } %t198, ptr %a200 + call void @finch_str_drop(ptr %a200) + %t201 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } %t199, ptr %a137 + store { ptr, i64, i64 } %t201, ptr %a202 + call void @finch_str_drop(ptr %a202) + br label %endif7897 +endif7897: + call void @finch_str_drop(ptr %a173) + br label %for.step7891 +for.step7891: + %t203 = load i64, ptr %a141 + %t204 = add i64 %t203, 1 + store i64 %t204, ptr %a141 + br label %for.cond7889 +for.end7892: + %t205 = load ptr, ptr %a1 + %t206 = load ptr, ptr %a1 + %t207 = load { ptr, i64, i64 }, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.5005, i64 7, i64 0 }, ptr %a209 + store { ptr, i64, i64 } %t207, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t211, ptr %a213 + store { ptr, i64, i64 } { ptr @.str.5006, i64 6, i64 0 }, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + store { ptr, i64, i64 } %t211, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a212 + %t217 = call { ptr, i64, i64 } @finch.gen.op(ptr %t206, { ptr, i64, i64 } %t216) + store { ptr, i64, i64 } %t216, ptr %a218 + call void @finch_str_drop(ptr %a218) + %t219 = getelementptr inbounds %S.gen.EnumDef, ptr %a17, i32 0, i32 1 + %t220 = load { ptr, i64, i64 }, ptr %t219 + store { ptr, i64, i64 } { ptr @.str.5007, i64 32, i64 0 }, ptr %a222 + store { ptr, i64, i64 } %t220, ptr %a223 + call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) + %t224 = load { ptr, i64, i64 }, ptr %a221 + %t225 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t205, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t224, %S.ast.Node %t225) + store { ptr, i64, i64 } %t217, ptr %a226 + call void @finch_str_drop(ptr %a226) + store { ptr, i64, i64 } %t224, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load ptr, ptr %a1 + %t229 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.5008, i64 10, i64 0 }, ptr %a231 + store { ptr, i64, i64 } %t229, ptr %a232 + call void @finch_str_concat(ptr %a230, ptr %a231, ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a230 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.5009, i64 7, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + %t239 = call { ptr, i64, i64 } @finch.gen.op(ptr %t228, { ptr, i64, i64 } %t238) + store { ptr, i64, i64 } %t238, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t239, 0 + %t242 = load %S.ast.Type, ptr %a73 + store %S.ast.Type %t242, ptr %a243 + call void @finch.copy.S_ast_Type(ptr %a244, ptr %a243) + %t245 = load %S.ast.Type, ptr %a244 + %t246 = insertvalue %S.gen.Val %t241, %S.ast.Type %t245, 1 + call void @finch_str_drop(ptr %a137) + call void @finch_str_drop(ptr %a136) + call void @finch.drop.S_ast_Type(ptr %a73) + call void @finch.drop.S_gen_Val(ptr %a31) + call void @finch.drop.S_gen_EnumDef(ptr %a17) + ret %S.gen.Val %t246 +} + +define internal { ptr, i64, i64 } @finch.gen.cExt(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.5010, i64 4, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br label %logic.from7898 +logic.from7898: + br i1 %t8, label %logic.end7900, label %logic.rhs7899 +logic.rhs7899: + %t9 = load %S.ast.Type, ptr %a2 + %t10 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t9) + br label %logic.rend7901 +logic.rend7901: + br label %logic.end7900 +logic.end7900: + %t11 = phi i1 [ true, %logic.from7898 ], [ %t10, %logic.rend7901 ] + br i1 %t11, label %then7902, label %endif7904 +then7902: + %t12 = load %S.ast.Type, ptr %a2 + %t13 = call i64 @finch.gen.bitsOf(%S.ast.Type %t12) + %t14 = icmp slt i64 %t13, 32 + br i1 %t14, label %then7905, label %endif7907 +then7905: + ret { ptr, i64, i64 } { ptr @.str.5011, i64 8, i64 0 } +endif7907: + br label %endif7904 +endif7904: + %t15 = load %S.ast.Type, ptr %a2 + %t16 = call i1 @finch.gen.isSigned(%S.ast.Type %t15) + br label %logic.from7908 +logic.from7908: + br i1 %t16, label %logic.end7910, label %logic.rhs7909 +logic.rhs7909: + %t17 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5012, i64 4, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.from7911 +logic.from7911: + br i1 %t22, label %logic.rhs7912, label %logic.end7913 +logic.rhs7912: + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic7914, label %ok7915 +panic7914: + call void @finch_panic(ptr @.str.5013, i64 4637, ptr @.str.5014) + unreachable +ok7915: + %t25 = getelementptr inbounds %S.gen.Gen, ptr %t23, i32 0, i32 31 + %t26 = load %S.platform.Target, ptr %t25 + %t27 = call i1 @finch.platform.charIsSigned(%S.platform.Target %t26) + br label %logic.rend7916 +logic.rend7916: + br label %logic.end7913 +logic.end7913: + %t28 = phi i1 [ false, %logic.from7911 ], [ %t27, %logic.rend7916 ] + br label %logic.rend7917 +logic.rend7917: + br label %logic.end7910 +logic.end7910: + %t29 = phi i1 [ true, %logic.from7908 ], [ %t28, %logic.rend7917 ] + br label %logic.from7918 +logic.from7918: + br i1 %t29, label %logic.rhs7919, label %logic.end7920 +logic.rhs7919: + %t30 = load %S.ast.Type, ptr %a2 + %t31 = call i64 @finch.gen.bitsOf(%S.ast.Type %t30) + %t32 = icmp slt i64 %t31, 32 + br label %logic.rend7921 +logic.rend7921: + br label %logic.end7920 +logic.end7920: + %t33 = phi i1 [ false, %logic.from7918 ], [ %t32, %logic.rend7921 ] + br i1 %t33, label %then7922, label %endif7924 +then7922: + ret { ptr, i64, i64 } { ptr @.str.5015, i64 8, i64 0 } +endif7924: + %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.5016, i64 4, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br label %logic.from7925 +logic.from7925: + br i1 %t39, label %logic.rhs7926, label %logic.end7927 +logic.rhs7926: + %t40 = load %S.ast.Type, ptr %a2 + %t41 = call i64 @finch.gen.bitsOf(%S.ast.Type %t40) + %t42 = icmp slt i64 %t41, 32 + br label %logic.rend7928 +logic.rend7928: + br label %logic.end7927 +logic.end7927: + %t43 = phi i1 [ false, %logic.from7925 ], [ %t42, %logic.rend7928 ] + br i1 %t43, label %then7929, label %endif7931 +then7929: + ret { ptr, i64, i64 } { ptr @.str.5017, i64 8, i64 0 } +endif7931: + ret { ptr, i64, i64 } { ptr @.str.5018, i64 0, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.gen.cLL(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.5019, i64 3, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_eq(ptr %a5, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then7932, label %endif7934 +then7932: + ret { ptr, i64, i64 } { ptr @.str.5020, i64 3, i64 0 } +endif7934: + %t9 = load ptr, ptr %a1 + %t10 = load %S.ast.Type, ptr %a2 + %t11 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t9, %S.ast.Type %t10) + ret { ptr, i64, i64 } %t11 +} + +define internal %S.gen.Val @finch.gen.callC(ptr %p0, %S.ast.Node %p1, %S.cimport.CFunc %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca %S.cimport.CFunc, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a18 = alloca %S.ast.Type, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca i64, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca i64, align 16 + %a235 = alloca %S.ast.Type, align 16 + %a240 = alloca %S.ast.Type, align 16 + %a248 = alloca %S.ast.Type, align 16 + %a249 = alloca %S.ast.Type, align 16 + %a261 = alloca %S.gen.Plan, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca i64, align 16 + %a327 = alloca i64, align 16 + %a342 = alloca %S.ast.Type, align 16 + %a343 = alloca %S.ast.Type, align 16 + %a345 = alloca %S.ast.Type, align 16 + %a354 = alloca %S.gen.Abi, align 16 + %a355 = alloca %S.gen.Abi, align 16 + %a357 = alloca %S.gen.Abi, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca %S.gen.Val, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca %S.gen.Val, align 16 + %a406 = alloca %S.gen.Val, align 16 + %a407 = alloca %S.gen.Val, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a451 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca i64, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a589 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a629 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a648 = alloca { ptr, i64, i64 }, align 16 + %a649 = alloca { ptr, i64, i64 }, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a667 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca %S.gen.Val, align 16 + %a699 = alloca %S.ast.Type, align 16 + %a700 = alloca %S.ast.Type, align 16 + %a702 = alloca %S.ast.Type, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca %S.gen.Val, align 16 + %a721 = alloca %S.gen.Val, align 16 + %a731 = alloca { ptr, i64, i64 }, align 16 + %a732 = alloca { ptr, i64, i64 }, align 16 + %a737 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca %S.ast.Type, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca %S.ast.Type, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a784 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca %S.ast.Type, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a801 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a803 = alloca { ptr, i64, i64 }, align 16 + %a804 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca %S.ast.Type, align 16 + %a817 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca %S.ast.Type, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca %S.ast.Type, align 16 + %a841 = alloca { ptr, i64, i64 }, align 16 + %a842 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a844 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a850 = alloca { ptr, i64, i64 }, align 16 + %a860 = alloca { ptr, i64, i64 }, align 16 + %a861 = alloca { ptr, i64, i64 }, align 16 + %a863 = alloca { ptr, i64, i64 }, align 16 + %a864 = alloca { ptr, i64, i64 }, align 16 + %a868 = alloca { ptr, i64, i64 }, align 16 + %a869 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a886 = alloca { ptr, i64, i64 }, align 16 + %a893 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a897 = alloca i64, align 16 + %a900 = alloca i64, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a920 = alloca { ptr, i64, i64 }, align 16 + %a921 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca { ptr, i64, i64 }, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a939 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a944 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a949 = alloca { ptr, i64, i64 }, align 16 + %a950 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a955 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a964 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a966 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a970 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a973 = alloca { ptr, i64, i64 }, align 16 + %a974 = alloca { ptr, i64, i64 }, align 16 + %a975 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a977 = alloca { ptr, i64, i64 }, align 16 + %a980 = alloca { ptr, i64, i64 }, align 16 + %a981 = alloca { ptr, i64, i64 }, align 16 + %a982 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a986 = alloca { ptr, i64, i64 }, align 16 + %a987 = alloca { ptr, i64, i64 }, align 16 + %a988 = alloca { ptr, i64, i64 }, align 16 + %a994 = alloca { ptr, i64, i64 }, align 16 + %a998 = alloca { ptr, i64, i64 }, align 16 + %a999 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1002 = alloca { ptr, i64, i64 }, align 16 + %a1003 = alloca { ptr, i64, i64 }, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1007 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1010 = alloca { ptr, i64, i64 }, align 16 + %a1012 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1015 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1022 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1025 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1027 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1031 = alloca { ptr, i64, i64 }, align 16 + %a1032 = alloca { ptr, i64, i64 }, align 16 + %a1033 = alloca { ptr, i64, i64 }, align 16 + %a1036 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca { ptr, i64, i64 }, align 16 + %a1038 = alloca { ptr, i64, i64 }, align 16 + %a1039 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1042 = alloca { ptr, i64, i64 }, align 16 + %a1043 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1048 = alloca { ptr, i64, i64 }, align 16 + %a1049 = alloca { ptr, i64, i64 }, align 16 + %a1050 = alloca { ptr, i64, i64 }, align 16 + %a1051 = alloca { ptr, i64, i64 }, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1054 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1060 = alloca { ptr, i64, i64 }, align 16 + %a1062 = alloca { ptr, i64, i64 }, align 16 + %a1063 = alloca { ptr, i64, i64 }, align 16 + %a1064 = alloca { ptr, i64, i64 }, align 16 + %a1065 = alloca { ptr, i64, i64 }, align 16 + %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1068 = alloca { ptr, i64, i64 }, align 16 + %a1069 = alloca { ptr, i64, i64 }, align 16 + %a1070 = alloca { ptr, i64, i64 }, align 16 + %a1071 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1076 = alloca { ptr, i64, i64 }, align 16 + %a1077 = alloca { ptr, i64, i64 }, align 16 + %a1086 = alloca %S.ast.Type, align 16 + %a1087 = alloca %S.ast.Type, align 16 + %a1103 = alloca { ptr, i64, i64 }, align 16 + %a1106 = alloca %S.ast.Type, align 16 + %a1107 = alloca %S.ast.Type, align 16 + %a1113 = alloca { ptr, i64, i64 }, align 16 + %a1120 = alloca { ptr, i64, i64 }, align 16 + %a1121 = alloca { ptr, i64, i64 }, align 16 + %a1126 = alloca { ptr, i64, i64 }, align 16 + %a1139 = alloca { ptr, i64, i64 }, align 16 + %a1142 = alloca %S.ast.Type, align 16 + %a1143 = alloca %S.ast.Type, align 16 + %a1148 = alloca { ptr, i64, i64 }, align 16 + %a1149 = alloca { ptr, i64, i64 }, align 16 + %a1154 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca { ptr, i64, i64 }, align 16 + %a1160 = alloca { ptr, i64, i64 }, align 16 + %a1161 = alloca { ptr, i64, i64 }, align 16 + %a1163 = alloca { ptr, i64, i64 }, align 16 + %a1164 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca { ptr, i64, i64 }, align 16 + %a1166 = alloca { ptr, i64, i64 }, align 16 + %a1169 = alloca { ptr, i64, i64 }, align 16 + %a1170 = alloca { ptr, i64, i64 }, align 16 + %a1171 = alloca { ptr, i64, i64 }, align 16 + %a1172 = alloca { ptr, i64, i64 }, align 16 + %a1174 = alloca { ptr, i64, i64 }, align 16 + %a1175 = alloca { ptr, i64, i64 }, align 16 + %a1176 = alloca { ptr, i64, i64 }, align 16 + %a1177 = alloca { ptr, i64, i64 }, align 16 + %a1179 = alloca { ptr, i64, i64 }, align 16 + %a1185 = alloca %S.ast.Type, align 16 + %a1186 = alloca %S.ast.Type, align 16 + %a1190 = alloca { ptr, i64, i64 }, align 16 + %a1191 = alloca { ptr, i64, i64 }, align 16 + %a1195 = alloca %S.ast.Type, align 16 + %a1196 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store %S.cimport.CFunc %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic7935, label %ok7936 +panic7935: + call void @finch_panic(ptr @.str.5021, i64 4654, ptr @.str.5022) + unreachable +ok7936: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + br i1 %t7, label %then7937, label %endif7939 +then7937: + store { ptr, i64, i64 } zeroinitializer, ptr %a8 + %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + store i64 0, ptr %a10 + br label %each.cond7940 +each.cond7940: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = load i64, ptr %a10 + %t14 = icmp slt i64 %t13, %t12 + br i1 %t14, label %each.body7941, label %each.end7943 +each.body7941: + %t15 = load ptr, ptr %t9 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 + %t17 = load %S.ast.Type, ptr %t16 + store %S.ast.Type %t17, ptr %a18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t20 = load %S.ast.Type, ptr %a18 + %t21 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t20) + %t22 = load i64, ptr %t19 + %t23 = add i64 %t22, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t23, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t24 = load ptr, ptr %a8 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t24, i64 %t22 + store { ptr, i64, i64 } %t21, ptr %t25 + store i64 %t23, ptr %t19 + br label %each.step7942 +each.step7942: + %t26 = load i64, ptr %a10 + %t27 = add i64 %t26, 1 + store i64 %t27, ptr %a10 + br label %each.cond7940 +each.end7943: + %t28 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t29 = load i1, ptr %t28 + br i1 %t29, label %then7944, label %endif7946 +then7944: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %a8 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } { ptr @.str.5023, i64 3, i64 0 }, ptr %t34 + store i64 %t32, ptr %t30 + br label %endif7946 +endif7946: + %t35 = load ptr, ptr %a1 + %t36 = load %S.ast.Node, ptr %a2 + %t37 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t38 = load i64, ptr %t37 + %t39 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 + %t41 = load i64, ptr %t40 + %t42 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 1 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store { ptr, i64, i64 } { ptr @.str.5024, i64 17, i64 0 }, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.5025, i64 7, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 + %t54 = load %S.ast.Type, ptr %t53 + %t55 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t54) + store { ptr, i64, i64 } %t52, ptr %a57 + store { ptr, i64, i64 } %t55, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t52, ptr %a59 + call void @finch_str_drop(ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a56 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.5026, i64 1, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t68 = load { ptr, i64, i64 }, ptr %t67 + store { ptr, i64, i64 } %t66, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t66, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.5027, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5028, i64 2, i64 0 }, ptr %a80 + call void @finch_str_join(ptr %a81, ptr %a8, ptr %a80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t78, ptr %a84 + store { ptr, i64, i64 } %t82, ptr %a85 + call void @finch_str_concat(ptr %a83, ptr %a84, ptr %a85) + store { ptr, i64, i64 } %t78, ptr %a86 + call void @finch_str_drop(ptr %a86) + store { ptr, i64, i64 } %t82, ptr %a87 + call void @finch_str_drop(ptr %a87) + %t88 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t88, ptr %a90 + store { ptr, i64, i64 } { ptr @.str.5029, i64 5, i64 0 }, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t88, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + call void @finch.gen.noteRef(ptr %t35, %S.ast.Node %t36, i64 %t38, i64 %t41, { ptr, i64, i64 } %t93, { ptr, i64, i64 } { ptr @.str.5030, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + call void @finch.drop.arr_str(ptr %a8) + br label %endif7939 +endif7939: + %t95 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t95, i32 0, i32 1 + %t97 = load i64, ptr %t96 + %t98 = icmp sgt i64 %t97, 0 + br i1 %t98, label %then7947, label %endif7949 +then7947: + %t99 = load ptr, ptr %a1 + %t100 = load %S.ast.Node, ptr %a2 + %t101 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } { ptr @.str.5031, i64 16, i64 0 }, ptr %a104 + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.5032, i64 35, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 5 + %t113 = load { ptr, i64, i64 }, ptr %t112 + store { ptr, i64, i64 } %t111, ptr %a115 + store { ptr, i64, i64 } %t113, ptr %a116 + call void @finch_str_concat(ptr %a114, ptr %a115, ptr %a116) + store { ptr, i64, i64 } %t111, ptr %a117 + call void @finch_str_drop(ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a114 + call void @finch.gen.fail(ptr %t99, %S.ast.Node %t100, { ptr, i64, i64 } %t118) + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_drop(ptr %a119) + br label %endif7949 +endif7949: + %t120 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t121 = getelementptr inbounds { ptr, i64, i64 }, ptr %t120, i32 0, i32 1 + %t122 = load i64, ptr %t121 + store i64 %t122, ptr %a123 + %t124 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t125 = load i1, ptr %t124 + br i1 %t125, label %then7950, label %else7951 +then7950: + %t126 = load i64, ptr %a123 + %t127 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t127, i32 0, i32 1 + %t129 = load i64, ptr %t128 + %t130 = icmp slt i64 %t126, %t129 + br i1 %t130, label %then7953, label %endif7955 +then7953: + %t131 = load ptr, ptr %a1 + %t132 = load %S.ast.Node, ptr %a2 + %t133 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t134 = load { ptr, i64, i64 }, ptr %t133 + store { ptr, i64, i64 } { ptr @.str.5033, i64 1, i64 0 }, ptr %a136 + store { ptr, i64, i64 } %t134, ptr %a137 + call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a135 + store { ptr, i64, i64 } %t138, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.5034, i64 17, i64 0 }, ptr %a141 + call void @finch_str_concat(ptr %a139, ptr %a140, ptr %a141) + store { ptr, i64, i64 } %t138, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a139 + %t144 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t145 = getelementptr inbounds { ptr, i64, i64 }, ptr %t144, i32 0, i32 1 + %t146 = load i64, ptr %t145 + call void @finch_str_from_int(ptr %a147, i64 %t146) + %t148 = load { ptr, i64, i64 }, ptr %a147 + store { ptr, i64, i64 } %t143, ptr %a150 + store { ptr, i64, i64 } %t148, ptr %a151 + call void @finch_str_concat(ptr %a149, ptr %a150, ptr %a151) + store { ptr, i64, i64 } %t143, ptr %a152 + call void @finch_str_drop(ptr %a152) + store { ptr, i64, i64 } %t148, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a149 + store { ptr, i64, i64 } %t154, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.5035, i64 22, i64 0 }, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t154, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load { ptr, i64, i64 }, ptr %a155 + %t160 = load i64, ptr %a123 + call void @finch_str_from_int(ptr %a161, i64 %t160) + %t162 = load { ptr, i64, i64 }, ptr %a161 + store { ptr, i64, i64 } %t159, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t159, ptr %a166 + call void @finch_str_drop(ptr %a166) + store { ptr, i64, i64 } %t162, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a163 + call void @finch.gen.fail(ptr %t131, %S.ast.Node %t132, { ptr, i64, i64 } %t168) + store { ptr, i64, i64 } %t168, ptr %a169 + call void @finch_str_drop(ptr %a169) + br label %endif7955 +endif7955: + br label %endif7952 +else7951: + %t170 = load i64, ptr %a123 + %t171 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %t171, i32 0, i32 1 + %t173 = load i64, ptr %t172 + %t174 = icmp ne i64 %t170, %t173 + br i1 %t174, label %then7956, label %endif7958 +then7956: + %t175 = load ptr, ptr %a1 + %t176 = load %S.ast.Node, ptr %a2 + %t177 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t178 = load { ptr, i64, i64 }, ptr %t177 + store { ptr, i64, i64 } { ptr @.str.5036, i64 1, i64 0 }, ptr %a180 + store { ptr, i64, i64 } %t178, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a179 + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.5037, i64 8, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i32 0, i32 1 + %t190 = load i64, ptr %t189 + call void @finch_str_from_int(ptr %a191, i64 %t190) + %t192 = load { ptr, i64, i64 }, ptr %a191 + store { ptr, i64, i64 } %t187, ptr %a194 + store { ptr, i64, i64 } %t192, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t187, ptr %a196 + call void @finch_str_drop(ptr %a196) + store { ptr, i64, i64 } %t192, ptr %a197 + call void @finch_str_drop(ptr %a197) + %t198 = load { ptr, i64, i64 }, ptr %a193 + store { ptr, i64, i64 } %t198, ptr %a200 + store { ptr, i64, i64 } { ptr @.str.5038, i64 22, i64 0 }, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + store { ptr, i64, i64 } %t198, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a199 + %t204 = load i64, ptr %a123 + call void @finch_str_from_int(ptr %a205, i64 %t204) + %t206 = load { ptr, i64, i64 }, ptr %a205 + store { ptr, i64, i64 } %t203, ptr %a208 + store { ptr, i64, i64 } %t206, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t203, ptr %a210 + call void @finch_str_drop(ptr %a210) + store { ptr, i64, i64 } %t206, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a207 + call void @finch.gen.fail(ptr %t175, %S.ast.Node %t176, { ptr, i64, i64 } %t212) + store { ptr, i64, i64 } %t212, ptr %a213 + call void @finch_str_drop(ptr %a213) + br label %endif7958 +endif7958: + br label %endif7952 +endif7952: + %t214 = load ptr, ptr %a1 + %t215 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 2 + %t216 = load %S.ast.Type, ptr %t215 + %t217 = load %S.ast.Node, ptr %a2 + %t218 = call %S.ast.Type @finch.gen.resolve(ptr %t214, %S.ast.Type %t216, %S.ast.Node %t217) + store %S.ast.Type %t218, ptr %a219 + %t220 = load ptr, ptr %a1 + %t221 = load %S.ast.Node, ptr %a2 + %t222 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t223 = load { ptr, i64, i64 }, ptr %t222 + %t224 = load %S.ast.Type, ptr %a219 + call void @finch.gen.checkByValue(ptr %t220, %S.ast.Node %t221, { ptr, i64, i64 } %t223, %S.ast.Type %t224, { ptr, i64, i64 } { ptr @.str.5039, i64 7, i64 0 }) + store { ptr, i64, i64 } zeroinitializer, ptr %a225 + %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + store i64 0, ptr %a227 + br label %each.cond7959 +each.cond7959: + %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i32 0, i32 1 + %t229 = load i64, ptr %t228 + %t230 = load i64, ptr %a227 + %t231 = icmp slt i64 %t230, %t229 + br i1 %t231, label %each.body7960, label %each.end7962 +each.body7960: + %t232 = load ptr, ptr %t226 + %t233 = getelementptr inbounds %S.ast.Type, ptr %t232, i64 %t230 + %t234 = load %S.ast.Type, ptr %t233 + store %S.ast.Type %t234, ptr %a235 + %t236 = load ptr, ptr %a1 + %t237 = load %S.ast.Type, ptr %a235 + %t238 = load %S.ast.Node, ptr %a2 + %t239 = call %S.ast.Type @finch.gen.resolve(ptr %t236, %S.ast.Type %t237, %S.ast.Node %t238) + store %S.ast.Type %t239, ptr %a240 + %t241 = load ptr, ptr %a1 + %t242 = load %S.ast.Node, ptr %a2 + %t243 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t244 = load { ptr, i64, i64 }, ptr %t243 + %t245 = load %S.ast.Type, ptr %a240 + call void @finch.gen.checkByValue(ptr %t241, %S.ast.Node %t242, { ptr, i64, i64 } %t244, %S.ast.Type %t245, { ptr, i64, i64 } { ptr @.str.5040, i64 5, i64 0 }) + %t246 = getelementptr inbounds { ptr, i64, i64 }, ptr %a225, i32 0, i32 1 + %t247 = load %S.ast.Type, ptr %a240 + store %S.ast.Type %t247, ptr %a248 + call void @finch.copy.S_ast_Type(ptr %a249, ptr %a248) + %t250 = load %S.ast.Type, ptr %a249 + %t251 = load i64, ptr %t246 + %t252 = add i64 %t251, 1 + call void @finch_arr_reserve(ptr %a225, i64 %t252, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t253 = load ptr, ptr %a225 + %t254 = getelementptr inbounds %S.ast.Type, ptr %t253, i64 %t251 + store %S.ast.Type %t250, ptr %t254 + store i64 %t252, ptr %t246 + call void @finch.drop.S_ast_Type(ptr %a240) + br label %each.step7961 +each.step7961: + %t255 = load i64, ptr %a227 + %t256 = add i64 %t255, 1 + store i64 %t256, ptr %a227 + br label %each.cond7959 +each.end7962: + %t257 = load ptr, ptr %a1 + %t258 = load %S.ast.Type, ptr %a219 + %t259 = load { ptr, i64, i64 }, ptr %a225 + %t260 = call %S.gen.Plan @finch.gen.makePlan(ptr %t257, %S.ast.Type %t258, { ptr, i64, i64 } %t259) + store %S.gen.Plan %t260, ptr %a261 + store { ptr, i64, i64 } zeroinitializer, ptr %a262 + store { ptr, i64, i64 } zeroinitializer, ptr %a263 + store { ptr, i64, i64 } { ptr @.str.5041, i64 0, i64 0 }, ptr %a264 + %t265 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 + %t266 = load i1, ptr %t265 + br i1 %t266, label %then7963, label %endif7965 +then7963: + %t267 = load ptr, ptr %a1 + %t268 = load ptr, ptr %a1 + %t269 = load %S.ast.Type, ptr %a219 + %t270 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t268, %S.ast.Type %t269) + %t271 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t267, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t271, ptr %a264 + store { ptr, i64, i64 } %t273, ptr %a274 + call void @finch_str_drop(ptr %a274) + %t275 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t276 = load ptr, ptr %a1 + %t277 = load %S.ast.Type, ptr %a219 + %t278 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t276, %S.ast.Type %t277) + store { ptr, i64, i64 } { ptr @.str.5042, i64 9, i64 0 }, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_drop(ptr %a282) + %t283 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } %t283, ptr %a285 + store { ptr, i64, i64 } { ptr @.str.5043, i64 10, i64 0 }, ptr %a286 + call void @finch_str_concat(ptr %a284, ptr %a285, ptr %a286) + store { ptr, i64, i64 } %t283, ptr %a287 + call void @finch_str_drop(ptr %a287) + %t288 = load { ptr, i64, i64 }, ptr %a284 + %t289 = load i64, ptr %t275 + %t290 = add i64 %t289, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t290, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t291 = load ptr, ptr %a262 + %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i64 %t289 + store { ptr, i64, i64 } %t288, ptr %t292 + store i64 %t290, ptr %t275 + %t293 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t294 = load ptr, ptr %a1 + %t295 = load %S.ast.Type, ptr %a219 + %t296 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t294, %S.ast.Type %t295) + store { ptr, i64, i64 } { ptr @.str.5044, i64 9, i64 0 }, ptr %a298 + store { ptr, i64, i64 } %t296, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + store { ptr, i64, i64 } %t296, ptr %a300 + call void @finch_str_drop(ptr %a300) + %t301 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } %t301, ptr %a303 + store { ptr, i64, i64 } { ptr @.str.5045, i64 11, i64 0 }, ptr %a304 + call void @finch_str_concat(ptr %a302, ptr %a303, ptr %a304) + store { ptr, i64, i64 } %t301, ptr %a305 + call void @finch_str_drop(ptr %a305) + %t306 = load { ptr, i64, i64 }, ptr %a302 + %t307 = load { ptr, i64, i64 }, ptr %a264 + store { ptr, i64, i64 } %t306, ptr %a309 + store { ptr, i64, i64 } %t307, ptr %a310 + call void @finch_str_concat(ptr %a308, ptr %a309, ptr %a310) + store { ptr, i64, i64 } %t306, ptr %a311 + call void @finch_str_drop(ptr %a311) + %t312 = load { ptr, i64, i64 }, ptr %a308 + %t313 = load i64, ptr %t293 + %t314 = add i64 %t313, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t314, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t315 = load ptr, ptr %a263 + %t316 = getelementptr inbounds { ptr, i64, i64 }, ptr %t315, i64 %t313 + store { ptr, i64, i64 } %t312, ptr %t316 + store i64 %t314, ptr %t293 + br label %endif7965 +endif7965: + store { ptr, i64, i64 } zeroinitializer, ptr %a317 + %t318 = load ptr, ptr %a1 + %t319 = icmp eq ptr %t318, null + br i1 %t319, label %panic7966, label %ok7967 +panic7966: + call void @finch_panic(ptr @.str.5046, i64 4693, ptr @.str.5047) + unreachable +ok7967: + %t320 = getelementptr inbounds %S.gen.Gen, ptr %t318, i32 0, i32 11 + %t321 = getelementptr inbounds { ptr, i64, i64 }, ptr %t320, i32 0, i32 1 + %t322 = load i64, ptr %t321 + store i64 %t322, ptr %a323 + %t324 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %t324, i32 0, i32 1 + %t326 = load i64, ptr %t325 + store i64 0, ptr %a327 + br label %for.cond7968 +for.cond7968: + %t328 = load i64, ptr %a327 + %t329 = icmp slt i64 %t328, %t326 + br i1 %t329, label %for.body7969, label %for.end7971 +for.body7969: + %t330 = load i64, ptr %a327 + %t331 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 3 + %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i32 0, i32 1 + %t333 = load i64, ptr %t332 + %t334 = icmp slt i64 %t330, %t333 + br i1 %t334, label %then7972, label %endif7974 +then7972: + %t335 = load i64, ptr %a327 + %t336 = load { ptr, i64, i64 }, ptr %a225 + %t337 = extractvalue { ptr, i64, i64 } %t336, 1 + %t338 = icmp uge i64 %t335, %t337 + br i1 %t338, label %range7975, label %inrange7976 +range7975: + call void @finch_panic_index(ptr @.str.5048, i64 4696, i64 %t335, i64 %t337) + unreachable +inrange7976: + %t339 = extractvalue { ptr, i64, i64 } %t336, 0 + %t340 = getelementptr inbounds %S.ast.Type, ptr %t339, i64 %t335 + %t341 = load %S.ast.Type, ptr %t340 + store %S.ast.Type %t341, ptr %a342 + call void @finch.copy.S_ast_Type(ptr %a343, ptr %a342) + %t344 = load %S.ast.Type, ptr %a343 + store %S.ast.Type %t344, ptr %a345 + %t346 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 1 + %t347 = load i64, ptr %a327 + %t348 = load { ptr, i64, i64 }, ptr %t346 + %t349 = extractvalue { ptr, i64, i64 } %t348, 1 + %t350 = icmp uge i64 %t347, %t349 + br i1 %t350, label %range7977, label %inrange7978 +range7977: + call void @finch_panic_index(ptr @.str.5049, i64 4697, i64 %t347, i64 %t349) + unreachable +inrange7978: + %t351 = extractvalue { ptr, i64, i64 } %t348, 0 + %t352 = getelementptr inbounds %S.gen.Abi, ptr %t351, i64 %t347 + %t353 = load %S.gen.Abi, ptr %t352 + store %S.gen.Abi %t353, ptr %a354 + call void @finch.copy.S_gen_Abi(ptr %a355, ptr %a354) + %t356 = load %S.gen.Abi, ptr %a355 + store %S.gen.Abi %t356, ptr %a357 + %t358 = load ptr, ptr %a1 + %t359 = load ptr, ptr %a1 + %t360 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t361 = load i64, ptr %a327 + %t362 = load { ptr, i64, i64 }, ptr %t360 + %t363 = extractvalue { ptr, i64, i64 } %t362, 1 + %t364 = icmp uge i64 %t361, %t363 + br i1 %t364, label %range7979, label %inrange7980 +range7979: + call void @finch_panic_index(ptr @.str.5050, i64 4698, i64 %t361, i64 %t363) + unreachable +inrange7980: + %t365 = extractvalue { ptr, i64, i64 } %t362, 0 + %t366 = getelementptr inbounds %S.ast.Node, ptr %t365, i64 %t361 + %t367 = load %S.ast.Node, ptr %t366 + %t368 = load %S.ast.Type, ptr %a345 + %t369 = call %S.gen.Val @finch.gen.exprWant(ptr %t359, %S.ast.Node %t367, %S.ast.Type %t368) + %t370 = load %S.ast.Type, ptr %a345 + %t371 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t372 = load i64, ptr %a327 + %t373 = load { ptr, i64, i64 }, ptr %t371 + %t374 = extractvalue { ptr, i64, i64 } %t373, 1 + %t375 = icmp uge i64 %t372, %t374 + br i1 %t375, label %range7981, label %inrange7982 +range7981: + call void @finch_panic_index(ptr @.str.5051, i64 4698, i64 %t372, i64 %t374) + unreachable +inrange7982: + %t376 = extractvalue { ptr, i64, i64 } %t373, 0 + %t377 = getelementptr inbounds %S.ast.Node, ptr %t376, i64 %t372 + %t378 = load %S.ast.Node, ptr %t377 + %t379 = load i64, ptr %a327 + %t380 = add i64 %t379, 1 + call void @finch_str_from_int(ptr %a381, i64 %t380) + %t382 = load { ptr, i64, i64 }, ptr %a381 + store { ptr, i64, i64 } { ptr @.str.5052, i64 9, i64 0 }, ptr %a384 + store { ptr, i64, i64 } %t382, ptr %a385 + call void @finch_str_concat(ptr %a383, ptr %a384, ptr %a385) + store { ptr, i64, i64 } %t382, ptr %a386 + call void @finch_str_drop(ptr %a386) + %t387 = load { ptr, i64, i64 }, ptr %a383 + store { ptr, i64, i64 } %t387, ptr %a389 + store { ptr, i64, i64 } { ptr @.str.5053, i64 4, i64 0 }, ptr %a390 + call void @finch_str_concat(ptr %a388, ptr %a389, ptr %a390) + store { ptr, i64, i64 } %t387, ptr %a391 + call void @finch_str_drop(ptr %a391) + %t392 = load { ptr, i64, i64 }, ptr %a388 + %t393 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t394 = load { ptr, i64, i64 }, ptr %t393 + store { ptr, i64, i64 } %t392, ptr %a396 + store { ptr, i64, i64 } %t394, ptr %a397 + call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) + store { ptr, i64, i64 } %t392, ptr %a398 + call void @finch_str_drop(ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a395 + %t400 = call %S.gen.Val @finch.gen.coerce(ptr %t358, %S.gen.Val %t369, %S.ast.Type %t370, %S.ast.Node %t378, { ptr, i64, i64 } %t399) + store %S.gen.Val %t369, ptr %a401 + call void @finch.drop.S_gen_Val(ptr %a401) + store { ptr, i64, i64 } %t399, ptr %a402 + call void @finch_str_drop(ptr %a402) + store %S.gen.Val %t400, ptr %a403 + %t404 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 + %t405 = load %S.gen.Val, ptr %a403 + store %S.gen.Val %t405, ptr %a406 + call void @finch.copy.S_gen_Val(ptr %a407, ptr %a406) + %t408 = load %S.gen.Val, ptr %a407 + %t409 = load i64, ptr %t404 + %t410 = add i64 %t409, 1 + call void @finch_arr_reserve(ptr %a317, i64 %t410, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t411 = load ptr, ptr %a317 + %t412 = getelementptr inbounds %S.gen.Val, ptr %t411, i64 %t409 + store %S.gen.Val %t408, ptr %t412 + store i64 %t410, ptr %t404 + %t413 = load ptr, ptr %a1 + %t414 = load %S.gen.Val, ptr %a403 + call void @finch.gen.hold(ptr %t413, %S.gen.Val %t414) + %t415 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t416, ptr %a417 + store { ptr, i64, i64 } { ptr @.str.5054, i64 6, i64 0 }, ptr %a418 + %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) + %t420 = icmp ne i32 %t419, 0 + br i1 %t420, label %then7983, label %else7984 +then7983: + %t421 = load ptr, ptr %a1 + %t422 = load ptr, ptr %a1 + %t423 = load %S.ast.Type, ptr %a345 + %t424 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t422, %S.ast.Type %t423) + %t425 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t421, { ptr, i64, i64 } %t424) + store { ptr, i64, i64 } %t424, ptr %a426 + call void @finch_str_drop(ptr %a426) + store { ptr, i64, i64 } %t425, ptr %a427 + %t428 = load ptr, ptr %a1 + %t429 = load ptr, ptr %a1 + %t430 = load %S.ast.Type, ptr %a345 + %t431 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t429, %S.ast.Type %t430) + %t432 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t433 = load { ptr, i64, i64 }, ptr %t432 + %t434 = load { ptr, i64, i64 }, ptr %a427 + call void @finch.gen.store(ptr %t428, { ptr, i64, i64 } %t431, { ptr, i64, i64 } %t433, { ptr, i64, i64 } %t434) + store { ptr, i64, i64 } %t431, ptr %a435 + call void @finch_str_drop(ptr %a435) + %t436 = load ptr, ptr %a1 + %t437 = load %S.ast.Type, ptr %a345 + %t438 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t436, %S.ast.Type %t437) + store { ptr, i64, i64 } { ptr @.str.5055, i64 10, i64 0 }, ptr %a440 + store { ptr, i64, i64 } %t438, ptr %a441 + call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) + store { ptr, i64, i64 } %t438, ptr %a442 + call void @finch_str_drop(ptr %a442) + %t443 = load { ptr, i64, i64 }, ptr %a439 + store { ptr, i64, i64 } %t443, ptr %a445 + store { ptr, i64, i64 } { ptr @.str.5056, i64 8, i64 0 }, ptr %a446 + call void @finch_str_concat(ptr %a444, ptr %a445, ptr %a446) + store { ptr, i64, i64 } %t443, ptr %a447 + call void @finch_str_drop(ptr %a447) + %t448 = load { ptr, i64, i64 }, ptr %a444 + %t449 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 3 + %t450 = load i64, ptr %t449 + call void @finch_str_from_int(ptr %a451, i64 %t450) + %t452 = load { ptr, i64, i64 }, ptr %a451 + store { ptr, i64, i64 } %t448, ptr %a454 + store { ptr, i64, i64 } %t452, ptr %a455 + call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) + store { ptr, i64, i64 } %t448, ptr %a456 + call void @finch_str_drop(ptr %a456) + store { ptr, i64, i64 } %t452, ptr %a457 + call void @finch_str_drop(ptr %a457) + %t458 = load { ptr, i64, i64 }, ptr %a453 + store { ptr, i64, i64 } %t458, ptr %a459 + %t460 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t461 = load { ptr, i64, i64 }, ptr %a459 + store { ptr, i64, i64 } %t461, ptr %a462 + call void @finch_str_copy(ptr %a463, ptr %a462) + %t464 = load { ptr, i64, i64 }, ptr %a463 + %t465 = load i64, ptr %t460 + %t466 = add i64 %t465, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t466, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t467 = load ptr, ptr %a262 + %t468 = getelementptr inbounds { ptr, i64, i64 }, ptr %t467, i64 %t465 + store { ptr, i64, i64 } %t464, ptr %t468 + store i64 %t466, ptr %t460 + %t469 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t470 = load { ptr, i64, i64 }, ptr %a459 + store { ptr, i64, i64 } %t470, ptr %a472 + store { ptr, i64, i64 } { ptr @.str.5057, i64 1, i64 0 }, ptr %a473 + call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a471 + %t475 = load { ptr, i64, i64 }, ptr %a427 + store { ptr, i64, i64 } %t474, ptr %a477 + store { ptr, i64, i64 } %t475, ptr %a478 + call void @finch_str_concat(ptr %a476, ptr %a477, ptr %a478) + store { ptr, i64, i64 } %t474, ptr %a479 + call void @finch_str_drop(ptr %a479) + %t480 = load { ptr, i64, i64 }, ptr %a476 + %t481 = load i64, ptr %t469 + %t482 = add i64 %t481, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t482, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t483 = load ptr, ptr %a263 + %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 %t481 + store { ptr, i64, i64 } %t480, ptr %t484 + store i64 %t482, ptr %t469 + call void @finch_str_drop(ptr %a459) + call void @finch_str_drop(ptr %a427) + br label %endif7985 +else7984: + %t485 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 + %t486 = load { ptr, i64, i64 }, ptr %t485 + store { ptr, i64, i64 } %t486, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.5058, i64 8, i64 0 }, ptr %a488 + %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) + %t490 = icmp ne i32 %t489, 0 + br i1 %t490, label %then7986, label %else7987 +then7986: + %t491 = load ptr, ptr %a1 + %t492 = load ptr, ptr %a1 + %t493 = load %S.ast.Type, ptr %a345 + %t494 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t492, %S.ast.Type %t493) + %t495 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t491, { ptr, i64, i64 } %t494) + store { ptr, i64, i64 } %t494, ptr %a496 + call void @finch_str_drop(ptr %a496) + store { ptr, i64, i64 } %t495, ptr %a497 + %t498 = load ptr, ptr %a1 + %t499 = load ptr, ptr %a1 + %t500 = load %S.ast.Type, ptr %a345 + %t501 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t499, %S.ast.Type %t500) + %t502 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t503 = load { ptr, i64, i64 }, ptr %t502 + %t504 = load { ptr, i64, i64 }, ptr %a497 + call void @finch.gen.store(ptr %t498, { ptr, i64, i64 } %t501, { ptr, i64, i64 } %t503, { ptr, i64, i64 } %t504) + store { ptr, i64, i64 } %t501, ptr %a505 + call void @finch_str_drop(ptr %a505) + %t506 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t507 = load i64, ptr %t506 + %t508 = add i64 %t507, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t508, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t509 = load ptr, ptr %a262 + %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i64 %t507 + store { ptr, i64, i64 } { ptr @.str.5059, i64 3, i64 0 }, ptr %t510 + store i64 %t508, ptr %t506 + %t511 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t512 = load { ptr, i64, i64 }, ptr %a497 + store { ptr, i64, i64 } { ptr @.str.5060, i64 4, i64 0 }, ptr %a514 + store { ptr, i64, i64 } %t512, ptr %a515 + call void @finch_str_concat(ptr %a513, ptr %a514, ptr %a515) + %t516 = load { ptr, i64, i64 }, ptr %a513 + %t517 = load i64, ptr %t511 + %t518 = add i64 %t517, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t518, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t519 = load ptr, ptr %a263 + %t520 = getelementptr inbounds { ptr, i64, i64 }, ptr %t519, i64 %t517 + store { ptr, i64, i64 } %t516, ptr %t520 + store i64 %t518, ptr %t511 + call void @finch_str_drop(ptr %a497) + br label %endif7988 +else7987: + %t521 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 0 + %t522 = load { ptr, i64, i64 }, ptr %t521 + store { ptr, i64, i64 } %t522, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.5061, i64 6, i64 0 }, ptr %a524 + %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) + %t526 = icmp ne i32 %t525, 0 + br i1 %t526, label %then7989, label %else7990 +then7989: + %t527 = load ptr, ptr %a1 + %t528 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t527, { ptr, i64, i64 } { ptr @.str.5062, i64 9, i64 0 }) + store { ptr, i64, i64 } %t528, ptr %a529 + %t530 = load ptr, ptr %a1 + %t531 = load ptr, ptr %a1 + %t532 = load %S.ast.Type, ptr %a345 + %t533 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t531, %S.ast.Type %t532) + %t534 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t535 = load { ptr, i64, i64 }, ptr %t534 + %t536 = load { ptr, i64, i64 }, ptr %a529 + call void @finch.gen.store(ptr %t530, { ptr, i64, i64 } %t533, { ptr, i64, i64 } %t535, { ptr, i64, i64 } %t536) + store { ptr, i64, i64 } %t533, ptr %a537 + call void @finch_str_drop(ptr %a537) + %t538 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t539 = getelementptr inbounds { ptr, i64, i64 }, ptr %t538, i32 0, i32 1 + %t540 = load i64, ptr %t539 + store i64 0, ptr %a541 + br label %for.cond7992 +for.cond7992: + %t542 = load i64, ptr %a541 + %t543 = icmp slt i64 %t542, %t540 + br i1 %t543, label %for.body7993, label %for.end7995 +for.body7993: + %t544 = load ptr, ptr %a1 + %t545 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t546 = load i64, ptr %a541 + %t547 = load { ptr, i64, i64 }, ptr %t545 + %t548 = extractvalue { ptr, i64, i64 } %t547, 1 + %t549 = icmp uge i64 %t546, %t548 + br i1 %t549, label %range7996, label %inrange7997 +range7996: + call void @finch_panic_index(ptr @.str.5063, i64 4716, i64 %t546, i64 %t548) + unreachable +inrange7997: + %t550 = extractvalue { ptr, i64, i64 } %t547, 0 + %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %t550, i64 %t546 + %t552 = load { ptr, i64, i64 }, ptr %t551 + %t553 = load ptr, ptr %a1 + %t554 = load { ptr, i64, i64 }, ptr %a529 + store { ptr, i64, i64 } { ptr @.str.5064, i64 31, i64 0 }, ptr %a556 + store { ptr, i64, i64 } %t554, ptr %a557 + call void @finch_str_concat(ptr %a555, ptr %a556, ptr %a557) + %t558 = load { ptr, i64, i64 }, ptr %a555 + store { ptr, i64, i64 } %t558, ptr %a560 + store { ptr, i64, i64 } { ptr @.str.5065, i64 6, i64 0 }, ptr %a561 + call void @finch_str_concat(ptr %a559, ptr %a560, ptr %a561) + store { ptr, i64, i64 } %t558, ptr %a562 + call void @finch_str_drop(ptr %a562) + %t563 = load { ptr, i64, i64 }, ptr %a559 + %t564 = load i64, ptr %a541 + %t565 = mul i64 8, %t564 + call void @finch_str_from_int(ptr %a566, i64 %t565) + %t567 = load { ptr, i64, i64 }, ptr %a566 + store { ptr, i64, i64 } %t563, ptr %a569 + store { ptr, i64, i64 } %t567, ptr %a570 + call void @finch_str_concat(ptr %a568, ptr %a569, ptr %a570) + store { ptr, i64, i64 } %t563, ptr %a571 + call void @finch_str_drop(ptr %a571) + store { ptr, i64, i64 } %t567, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a568 + %t574 = call { ptr, i64, i64 } @finch.gen.op(ptr %t553, { ptr, i64, i64 } %t573) + store { ptr, i64, i64 } %t573, ptr %a575 + call void @finch_str_drop(ptr %a575) + %t576 = call { ptr, i64, i64 } @finch.gen.load(ptr %t544, { ptr, i64, i64 } %t552, { ptr, i64, i64 } %t574) + store { ptr, i64, i64 } %t574, ptr %a577 + call void @finch_str_drop(ptr %a577) + store { ptr, i64, i64 } %t576, ptr %a578 + %t579 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t580 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t581 = load i64, ptr %a541 + %t582 = load { ptr, i64, i64 }, ptr %t580 + %t583 = extractvalue { ptr, i64, i64 } %t582, 1 + %t584 = icmp uge i64 %t581, %t583 + br i1 %t584, label %range7998, label %inrange7999 +range7998: + call void @finch_panic_index(ptr @.str.5066, i64 4717, i64 %t581, i64 %t583) + unreachable +inrange7999: + %t585 = extractvalue { ptr, i64, i64 } %t582, 0 + %t586 = getelementptr inbounds { ptr, i64, i64 }, ptr %t585, i64 %t581 + %t587 = load { ptr, i64, i64 }, ptr %t586 + store { ptr, i64, i64 } %t587, ptr %a588 + call void @finch_str_copy(ptr %a589, ptr %a588) + %t590 = load { ptr, i64, i64 }, ptr %a589 + %t591 = load i64, ptr %t579 + %t592 = add i64 %t591, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t592, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t593 = load ptr, ptr %a262 + %t594 = getelementptr inbounds { ptr, i64, i64 }, ptr %t593, i64 %t591 + store { ptr, i64, i64 } %t590, ptr %t594 + store i64 %t592, ptr %t579 + %t595 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t596 = getelementptr inbounds %S.gen.Abi, ptr %a357, i32 0, i32 1 + %t597 = load i64, ptr %a541 + %t598 = load { ptr, i64, i64 }, ptr %t596 + %t599 = extractvalue { ptr, i64, i64 } %t598, 1 + %t600 = icmp uge i64 %t597, %t599 + br i1 %t600, label %range8000, label %inrange8001 +range8000: + call void @finch_panic_index(ptr @.str.5067, i64 4718, i64 %t597, i64 %t599) + unreachable +inrange8001: + %t601 = extractvalue { ptr, i64, i64 } %t598, 0 + %t602 = getelementptr inbounds { ptr, i64, i64 }, ptr %t601, i64 %t597 + %t603 = load { ptr, i64, i64 }, ptr %t602 + store { ptr, i64, i64 } %t603, ptr %a605 + store { ptr, i64, i64 } { ptr @.str.5068, i64 1, i64 0 }, ptr %a606 + call void @finch_str_concat(ptr %a604, ptr %a605, ptr %a606) + %t607 = load { ptr, i64, i64 }, ptr %a604 + %t608 = load { ptr, i64, i64 }, ptr %a578 + store { ptr, i64, i64 } %t607, ptr %a610 + store { ptr, i64, i64 } %t608, ptr %a611 + call void @finch_str_concat(ptr %a609, ptr %a610, ptr %a611) + store { ptr, i64, i64 } %t607, ptr %a612 + call void @finch_str_drop(ptr %a612) + %t613 = load { ptr, i64, i64 }, ptr %a609 + %t614 = load i64, ptr %t595 + %t615 = add i64 %t614, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t615, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t616 = load ptr, ptr %a263 + %t617 = getelementptr inbounds { ptr, i64, i64 }, ptr %t616, i64 %t614 + store { ptr, i64, i64 } %t613, ptr %t617 + store i64 %t615, ptr %t595 + call void @finch_str_drop(ptr %a578) + br label %for.step7994 +for.step7994: + %t618 = load i64, ptr %a541 + %t619 = add i64 %t618, 1 + store i64 %t619, ptr %a541 + br label %for.cond7992 +for.end7995: + call void @finch_str_drop(ptr %a529) + br label %endif7991 +else7990: + %t620 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t621 = load ptr, ptr %a1 + %t622 = load %S.ast.Type, ptr %a345 + %t623 = call { ptr, i64, i64 } @finch.gen.cLL(ptr %t621, %S.ast.Type %t622) + %t624 = load ptr, ptr %a1 + %t625 = load %S.ast.Type, ptr %a345 + %t626 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t624, %S.ast.Type %t625) + store { ptr, i64, i64 } %t623, ptr %a628 + store { ptr, i64, i64 } %t626, ptr %a629 + call void @finch_str_concat(ptr %a627, ptr %a628, ptr %a629) + store { ptr, i64, i64 } %t623, ptr %a630 + call void @finch_str_drop(ptr %a630) + store { ptr, i64, i64 } %t626, ptr %a631 + call void @finch_str_drop(ptr %a631) + %t632 = load { ptr, i64, i64 }, ptr %a627 + %t633 = load i64, ptr %t620 + %t634 = add i64 %t633, 1 + call void @finch_arr_reserve(ptr %a262, i64 %t634, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t635 = load ptr, ptr %a262 + %t636 = getelementptr inbounds { ptr, i64, i64 }, ptr %t635, i64 %t633 + store { ptr, i64, i64 } %t632, ptr %t636 + store i64 %t634, ptr %t620 + %t637 = getelementptr inbounds %S.ast.Type, ptr %a345, i32 0, i32 0 + %t638 = load { ptr, i64, i64 }, ptr %t637 + store { ptr, i64, i64 } %t638, ptr %a639 + store { ptr, i64, i64 } { ptr @.str.5069, i64 3, i64 0 }, ptr %a640 + %t641 = call i32 @finch_str_eq(ptr %a639, ptr %a640) + %t642 = icmp ne i32 %t641, 0 + br i1 %t642, label %then8002, label %else8003 +then8002: + %t643 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t644 = load ptr, ptr %a1 + %t645 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t646 = load { ptr, i64, i64 }, ptr %t645 + %t647 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t644, { ptr, i64, i64 } %t646) + store { ptr, i64, i64 } { ptr @.str.5070, i64 4, i64 0 }, ptr %a649 + store { ptr, i64, i64 } %t647, ptr %a650 + call void @finch_str_concat(ptr %a648, ptr %a649, ptr %a650) + store { ptr, i64, i64 } %t647, ptr %a651 + call void @finch_str_drop(ptr %a651) + %t652 = load { ptr, i64, i64 }, ptr %a648 + %t653 = load i64, ptr %t643 + %t654 = add i64 %t653, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t654, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t655 = load ptr, ptr %a263 + %t656 = getelementptr inbounds { ptr, i64, i64 }, ptr %t655, i64 %t653 + store { ptr, i64, i64 } %t652, ptr %t656 + store i64 %t654, ptr %t643 + br label %endif8004 +else8003: + %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t658 = load ptr, ptr %a1 + %t659 = load %S.ast.Type, ptr %a345 + %t660 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t658, %S.ast.Type %t659) + %t661 = load ptr, ptr %a1 + %t662 = load %S.ast.Type, ptr %a345 + %t663 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t661, %S.ast.Type %t662) + store { ptr, i64, i64 } %t660, ptr %a665 + store { ptr, i64, i64 } %t663, ptr %a666 + call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) + store { ptr, i64, i64 } %t660, ptr %a667 + call void @finch_str_drop(ptr %a667) + store { ptr, i64, i64 } %t663, ptr %a668 + call void @finch_str_drop(ptr %a668) + %t669 = load { ptr, i64, i64 }, ptr %a664 + store { ptr, i64, i64 } %t669, ptr %a671 + store { ptr, i64, i64 } { ptr @.str.5071, i64 1, i64 0 }, ptr %a672 + call void @finch_str_concat(ptr %a670, ptr %a671, ptr %a672) + store { ptr, i64, i64 } %t669, ptr %a673 + call void @finch_str_drop(ptr %a673) + %t674 = load { ptr, i64, i64 }, ptr %a670 + %t675 = getelementptr inbounds %S.gen.Val, ptr %a403, i32 0, i32 0 + %t676 = load { ptr, i64, i64 }, ptr %t675 + store { ptr, i64, i64 } %t674, ptr %a678 + store { ptr, i64, i64 } %t676, ptr %a679 + call void @finch_str_concat(ptr %a677, ptr %a678, ptr %a679) + store { ptr, i64, i64 } %t674, ptr %a680 + call void @finch_str_drop(ptr %a680) + %t681 = load { ptr, i64, i64 }, ptr %a677 + %t682 = load i64, ptr %t657 + %t683 = add i64 %t682, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t683, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t684 = load ptr, ptr %a263 + %t685 = getelementptr inbounds { ptr, i64, i64 }, ptr %t684, i64 %t682 + store { ptr, i64, i64 } %t681, ptr %t685 + store i64 %t683, ptr %t657 + br label %endif8004 +endif8004: + br label %endif7991 +endif7991: + br label %endif7988 +endif7988: + br label %endif7985 +endif7985: + call void @finch.drop.S_gen_Val(ptr %a403) + call void @finch.drop.S_gen_Abi(ptr %a357) + call void @finch.drop.S_ast_Type(ptr %a345) + br label %for.step7970 +endif7974: + %t686 = load ptr, ptr %a1 + %t687 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t688 = load i64, ptr %a327 + %t689 = load { ptr, i64, i64 }, ptr %t687 + %t690 = extractvalue { ptr, i64, i64 } %t689, 1 + %t691 = icmp uge i64 %t688, %t690 + br i1 %t691, label %range8005, label %inrange8006 +range8005: + call void @finch_panic_index(ptr @.str.5072, i64 4731, i64 %t688, i64 %t690) + unreachable +inrange8006: + %t692 = extractvalue { ptr, i64, i64 } %t689, 0 + %t693 = getelementptr inbounds %S.ast.Node, ptr %t692, i64 %t688 + %t694 = load %S.ast.Node, ptr %t693 + %t695 = call %S.gen.Val @finch.gen.expr(ptr %t686, %S.ast.Node %t694) + store %S.gen.Val %t695, ptr %a696 + %t697 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 1 + %t698 = load %S.ast.Type, ptr %t697 + store %S.ast.Type %t698, ptr %a699 + call void @finch.copy.S_ast_Type(ptr %a700, ptr %a699) + %t701 = load %S.ast.Type, ptr %a700 + store %S.ast.Type %t701, ptr %a702 + %t703 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t704 = load { ptr, i64, i64 }, ptr %t703 + store { ptr, i64, i64 } %t704, ptr %a705 + store { ptr, i64, i64 } { ptr @.str.5073, i64 4, i64 0 }, ptr %a706 + %t707 = call i32 @finch_str_eq(ptr %a705, ptr %a706) + %t708 = icmp ne i32 %t707, 0 + br i1 %t708, label %then8007, label %endif8009 +then8007: + %t709 = load ptr, ptr %a1 + %t710 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t711 = load i64, ptr %a327 + %t712 = load { ptr, i64, i64 }, ptr %t710 + %t713 = extractvalue { ptr, i64, i64 } %t712, 1 + %t714 = icmp uge i64 %t711, %t713 + br i1 %t714, label %range8010, label %inrange8011 +range8010: + call void @finch_panic_index(ptr @.str.5074, i64 4734, i64 %t711, i64 %t713) + unreachable +inrange8011: + %t715 = extractvalue { ptr, i64, i64 } %t712, 0 + %t716 = getelementptr inbounds %S.ast.Node, ptr %t715, i64 %t711 + %t717 = load %S.ast.Node, ptr %t716 + call void @finch.gen.fail(ptr %t709, %S.ast.Node %t717, { ptr, i64, i64 } { ptr @.str.5075, i64 23, i64 0 }) + br label %endif8009 +endif8009: + %t718 = getelementptr inbounds { ptr, i64, i64 }, ptr %a317, i32 0, i32 1 + %t719 = load %S.gen.Val, ptr %a696 + store %S.gen.Val %t719, ptr %a720 + call void @finch.copy.S_gen_Val(ptr %a721, ptr %a720) + %t722 = load %S.gen.Val, ptr %a721 + %t723 = load i64, ptr %t718 + %t724 = add i64 %t723, 1 + call void @finch_arr_reserve(ptr %a317, i64 %t724, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t725 = load ptr, ptr %a317 + %t726 = getelementptr inbounds %S.gen.Val, ptr %t725, i64 %t723 + store %S.gen.Val %t722, ptr %t726 + store i64 %t724, ptr %t718 + %t727 = load ptr, ptr %a1 + %t728 = load %S.gen.Val, ptr %a696 + call void @finch.gen.hold(ptr %t727, %S.gen.Val %t728) + %t729 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t730 = load { ptr, i64, i64 }, ptr %t729 + store { ptr, i64, i64 } %t730, ptr %a731 + store { ptr, i64, i64 } { ptr @.str.5076, i64 6, i64 0 }, ptr %a732 + %t733 = call i32 @finch_str_eq(ptr %a731, ptr %a732) + %t734 = icmp ne i32 %t733, 0 + br label %logic.from8012 +logic.from8012: + br i1 %t734, label %logic.end8014, label %logic.rhs8013 +logic.rhs8013: + %t735 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t736 = load { ptr, i64, i64 }, ptr %t735 + store { ptr, i64, i64 } %t736, ptr %a737 + store { ptr, i64, i64 } { ptr @.str.5077, i64 5, i64 0 }, ptr %a738 + %t739 = call i32 @finch_str_eq(ptr %a737, ptr %a738) + %t740 = icmp ne i32 %t739, 0 + br label %logic.rend8015 +logic.rend8015: + br label %logic.end8014 +logic.end8014: + %t741 = phi i1 [ true, %logic.from8012 ], [ %t740, %logic.rend8015 ] + br i1 %t741, label %then8016, label %endif8018 +then8016: + %t742 = load ptr, ptr %a1 + %t743 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t744 = load i64, ptr %a327 + %t745 = load { ptr, i64, i64 }, ptr %t743 + %t746 = extractvalue { ptr, i64, i64 } %t745, 1 + %t747 = icmp uge i64 %t744, %t746 + br i1 %t747, label %range8019, label %inrange8020 +range8019: + call void @finch_panic_index(ptr @.str.5078, i64 4739, i64 %t744, i64 %t746) + unreachable +inrange8020: + %t748 = extractvalue { ptr, i64, i64 } %t745, 0 + %t749 = getelementptr inbounds %S.ast.Node, ptr %t748, i64 %t744 + %t750 = load %S.ast.Node, ptr %t749 + call void @finch.gen.fail(ptr %t742, %S.ast.Node %t750, { ptr, i64, i64 } { ptr @.str.5079, i64 68, i64 0 }) + br label %endif8018 +endif8018: + %t751 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 + %t752 = load { ptr, i64, i64 }, ptr %t751 + store { ptr, i64, i64 } %t752, ptr %a753 + call void @finch_str_copy(ptr %a754, ptr %a753) + %t755 = load { ptr, i64, i64 }, ptr %a754 + store { ptr, i64, i64 } %t755, ptr %a756 + %t757 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t758 = load { ptr, i64, i64 }, ptr %t757 + store { ptr, i64, i64 } %t758, ptr %a759 + store { ptr, i64, i64 } { ptr @.str.5080, i64 3, i64 0 }, ptr %a760 + %t761 = call i32 @finch_str_eq(ptr %a759, ptr %a760) + %t762 = icmp ne i32 %t761, 0 + br i1 %t762, label %then8021, label %else8022 +then8021: + %t763 = load ptr, ptr %a1 + %t764 = load { ptr, i64, i64 }, ptr %a756 + %t765 = load %S.ast.Type, ptr %a702 + %t766 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5081, i64 5, i64 0 }) + %t767 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t763, { ptr, i64, i64 } %t764, %S.ast.Type %t765, %S.ast.Type %t766) + store %S.ast.Type %t766, ptr %a768 + call void @finch.drop.S_ast_Type(ptr %a768) + %t769 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t767, ptr %a756 + store { ptr, i64, i64 } %t769, ptr %a770 + call void @finch_str_drop(ptr %a770) + %t771 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5082, i64 5, i64 0 }) + %t772 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t771, ptr %a702 + store %S.ast.Type %t772, ptr %a773 + call void @finch.drop.S_ast_Type(ptr %a773) + br label %endif8023 +else8022: + %t774 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t775 = load { ptr, i64, i64 }, ptr %t774 + store { ptr, i64, i64 } %t775, ptr %a776 + store { ptr, i64, i64 } { ptr @.str.5083, i64 3, i64 0 }, ptr %a777 + %t778 = call i32 @finch_str_eq(ptr %a776, ptr %a777) + %t779 = icmp ne i32 %t778, 0 + br i1 %t779, label %then8024, label %else8025 +then8024: + %t780 = load ptr, ptr %a1 + %t781 = load { ptr, i64, i64 }, ptr %a756 + %t782 = call { ptr, i64, i64 } @finch.gen.cstr(ptr %t780, { ptr, i64, i64 } %t781) + %t783 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t782, ptr %a756 + store { ptr, i64, i64 } %t783, ptr %a784 + call void @finch_str_drop(ptr %a784) + %t785 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5084, i64 3, i64 0 }) + %t786 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t785, ptr %a702 + store %S.ast.Type %t786, ptr %a787 + call void @finch.drop.S_ast_Type(ptr %a787) + br label %endif8026 +else8025: + %t788 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t789 = load { ptr, i64, i64 }, ptr %t788 + store { ptr, i64, i64 } %t789, ptr %a790 + store { ptr, i64, i64 } { ptr @.str.5085, i64 4, i64 0 }, ptr %a791 + %t792 = call i32 @finch_str_eq(ptr %a790, ptr %a791) + %t793 = icmp ne i32 %t792, 0 + br i1 %t793, label %then8027, label %else8028 +then8027: + %t794 = load ptr, ptr %a1 + %t795 = getelementptr inbounds %S.gen.Val, ptr %a696, i32 0, i32 0 + %t796 = load { ptr, i64, i64 }, ptr %t795 + store { ptr, i64, i64 } { ptr @.str.5086, i64 8, i64 0 }, ptr %a798 + store { ptr, i64, i64 } %t796, ptr %a799 + call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799) + %t800 = load { ptr, i64, i64 }, ptr %a797 + store { ptr, i64, i64 } %t800, ptr %a802 + store { ptr, i64, i64 } { ptr @.str.5087, i64 7, i64 0 }, ptr %a803 + call void @finch_str_concat(ptr %a801, ptr %a802, ptr %a803) + store { ptr, i64, i64 } %t800, ptr %a804 + call void @finch_str_drop(ptr %a804) + %t805 = load { ptr, i64, i64 }, ptr %a801 + %t806 = call { ptr, i64, i64 } @finch.gen.op(ptr %t794, { ptr, i64, i64 } %t805) + store { ptr, i64, i64 } %t805, ptr %a807 + call void @finch_str_drop(ptr %a807) + %t808 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t806, ptr %a756 + store { ptr, i64, i64 } %t808, ptr %a809 + call void @finch_str_drop(ptr %a809) + %t810 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5088, i64 3, i64 0 }) + %t811 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t810, ptr %a702 + store %S.ast.Type %t811, ptr %a812 + call void @finch.drop.S_ast_Type(ptr %a812) + br label %endif8029 +else8028: + %t813 = load %S.ast.Type, ptr %a702 + %t814 = call i1 @finch.gen.isInt(%S.ast.Type %t813) + br label %logic.from8030 +logic.from8030: + br i1 %t814, label %logic.end8032, label %logic.rhs8031 +logic.rhs8031: + %t815 = getelementptr inbounds %S.ast.Type, ptr %a702, i32 0, i32 0 + %t816 = load { ptr, i64, i64 }, ptr %t815 + store { ptr, i64, i64 } %t816, ptr %a817 + store { ptr, i64, i64 } { ptr @.str.5089, i64 4, i64 0 }, ptr %a818 + %t819 = call i32 @finch_str_eq(ptr %a817, ptr %a818) + %t820 = icmp ne i32 %t819, 0 + br label %logic.rend8033 +logic.rend8033: + br label %logic.end8032 +logic.end8032: + %t821 = phi i1 [ true, %logic.from8030 ], [ %t820, %logic.rend8033 ] + br label %logic.from8034 +logic.from8034: + br i1 %t821, label %logic.rhs8035, label %logic.end8036 +logic.rhs8035: + %t822 = load %S.ast.Type, ptr %a702 + %t823 = call i64 @finch.gen.bitsOf(%S.ast.Type %t822) + %t824 = icmp slt i64 %t823, 32 + br label %logic.rend8037 +logic.rend8037: + br label %logic.end8036 +logic.end8036: + %t825 = phi i1 [ false, %logic.from8034 ], [ %t824, %logic.rend8037 ] + br i1 %t825, label %then8038, label %endif8040 +then8038: + %t826 = load ptr, ptr %a1 + %t827 = load { ptr, i64, i64 }, ptr %a756 + %t828 = load %S.ast.Type, ptr %a702 + %t829 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5090, i64 3, i64 0 }) + %t830 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t826, { ptr, i64, i64 } %t827, %S.ast.Type %t828, %S.ast.Type %t829) + store %S.ast.Type %t829, ptr %a831 + call void @finch.drop.S_ast_Type(ptr %a831) + %t832 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t830, ptr %a756 + store { ptr, i64, i64 } %t832, ptr %a833 + call void @finch_str_drop(ptr %a833) + %t834 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5091, i64 3, i64 0 }) + %t835 = load %S.ast.Type, ptr %a702 + store %S.ast.Type %t834, ptr %a702 + store %S.ast.Type %t835, ptr %a836 + call void @finch.drop.S_ast_Type(ptr %a836) + br label %endif8040 +endif8040: + br label %endif8029 +endif8029: + br label %endif8026 +endif8026: + br label %endif8023 +endif8023: + %t837 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + %t838 = load ptr, ptr %a1 + %t839 = load %S.ast.Type, ptr %a702 + %t840 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t838, %S.ast.Type %t839) + store { ptr, i64, i64 } %t840, ptr %a842 + store { ptr, i64, i64 } { ptr @.str.5092, i64 1, i64 0 }, ptr %a843 + call void @finch_str_concat(ptr %a841, ptr %a842, ptr %a843) + store { ptr, i64, i64 } %t840, ptr %a844 + call void @finch_str_drop(ptr %a844) + %t845 = load { ptr, i64, i64 }, ptr %a841 + %t846 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t845, ptr %a848 + store { ptr, i64, i64 } %t846, ptr %a849 + call void @finch_str_concat(ptr %a847, ptr %a848, ptr %a849) + store { ptr, i64, i64 } %t845, ptr %a850 + call void @finch_str_drop(ptr %a850) + %t851 = load { ptr, i64, i64 }, ptr %a847 + %t852 = load i64, ptr %t837 + %t853 = add i64 %t852, 1 + call void @finch_arr_reserve(ptr %a263, i64 %t853, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t854 = load ptr, ptr %a263 + %t855 = getelementptr inbounds { ptr, i64, i64 }, ptr %t854, i64 %t852 + store { ptr, i64, i64 } %t851, ptr %t855 + store i64 %t853, ptr %t837 + call void @finch_str_drop(ptr %a756) + call void @finch.drop.S_ast_Type(ptr %a702) + call void @finch.drop.S_gen_Val(ptr %a696) + br label %for.step7970 +for.step7970: + %t856 = load i64, ptr %a327 + %t857 = add i64 %t856, 1 + store i64 %t857, ptr %a327 + br label %for.cond7968 +for.end7971: + %t858 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 2 + %t859 = load { ptr, i64, i64 }, ptr %t858 + store { ptr, i64, i64 } %t859, ptr %a860 + call void @finch_str_copy(ptr %a861, ptr %a860) + %t862 = load { ptr, i64, i64 }, ptr %a861 + store { ptr, i64, i64 } %t862, ptr %a863 + store { ptr, i64, i64 } { ptr @.str.5093, i64 0, i64 0 }, ptr %a864 + %t865 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 + %t866 = getelementptr inbounds %S.gen.Abi, ptr %t865, i32 0, i32 0 + %t867 = load { ptr, i64, i64 }, ptr %t866 + store { ptr, i64, i64 } %t867, ptr %a868 + store { ptr, i64, i64 } { ptr @.str.5094, i64 6, i64 0 }, ptr %a869 + %t870 = call i32 @finch_str_eq(ptr %a868, ptr %a869) + %t871 = icmp ne i32 %t870, 0 + br i1 %t871, label %then8041, label %endif8043 +then8041: + %t872 = load ptr, ptr %a1 + %t873 = load %S.ast.Type, ptr %a219 + %t874 = call { ptr, i64, i64 } @finch.gen.cExt(ptr %t872, %S.ast.Type %t873) + %t875 = load { ptr, i64, i64 }, ptr %a864 + store { ptr, i64, i64 } %t874, ptr %a864 + store { ptr, i64, i64 } %t875, ptr %a876 + call void @finch_str_drop(ptr %a876) + br label %endif8043 +endif8043: + store { ptr, i64, i64 } { ptr @.str.5095, i64 0, i64 0 }, ptr %a877 + %t878 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t879 = load i1, ptr %t878 + br i1 %t879, label %then8044, label %endif8046 +then8044: + %t880 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.5096, i64 5, i64 0 }, ptr %a877 + store { ptr, i64, i64 } %t880, ptr %a881 + call void @finch_str_drop(ptr %a881) + %t882 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + %t883 = load i64, ptr %t882 + %t884 = icmp eq i64 %t883, 0 + br i1 %t884, label %then8047, label %endif8049 +then8047: + %t885 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.5097, i64 3, i64 0 }, ptr %a877 + store { ptr, i64, i64 } %t885, ptr %a886 + call void @finch_str_drop(ptr %a886) + br label %endif8049 +endif8049: + br label %endif8046 +endif8046: + %t887 = load ptr, ptr %a1 + %t888 = icmp eq ptr %t887, null + br i1 %t888, label %panic8050, label %ok8051 +panic8050: + call void @finch_panic(ptr @.str.5098, i64 4770, ptr @.str.5099) + unreachable +ok8051: + %t889 = getelementptr inbounds %S.gen.Gen, ptr %t887, i32 0, i32 40 + %t890 = getelementptr inbounds { ptr, i64, i64 }, ptr %t889, i32 0, i32 1 + %t891 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t892 = load { ptr, i64, i64 }, ptr %t891 + store { ptr, i64, i64 } { ptr @.str.5100, i64 2, i64 0 }, ptr %a894 + store { ptr, i64, i64 } %t892, ptr %a895 + call void @finch_str_concat(ptr %a893, ptr %a894, ptr %a895) + %t896 = load { ptr, i64, i64 }, ptr %a893 + store i64 -1, ptr %a897 + %t898 = load i64, ptr %t890 + %t899 = load ptr, ptr %t889 + store i64 0, ptr %a900 + br label %find.cond8052 +find.cond8052: + %t901 = load i64, ptr %a900 + %t902 = icmp slt i64 %t901, %t898 + br i1 %t902, label %find.body8053, label %find.end8056 +find.body8053: + %t903 = getelementptr inbounds { ptr, i64, i64 }, ptr %t899, i64 %t901 + %t904 = load { ptr, i64, i64 }, ptr %t903 + store { ptr, i64, i64 } %t904, ptr %a905 + store { ptr, i64, i64 } %t896, ptr %a906 + %t907 = call i32 @finch_str_eq(ptr %a905, ptr %a906) + %t908 = icmp ne i32 %t907, 0 + br i1 %t908, label %find.hit8054, label %find.next8055 +find.hit8054: + store i64 %t901, ptr %a897 + br label %find.end8056 +find.next8055: + %t909 = add i64 %t901, 1 + store i64 %t909, ptr %a900 + br label %find.cond8052 +find.end8056: + store { ptr, i64, i64 } %t896, ptr %a910 + call void @finch_str_drop(ptr %a910) + %t911 = load i64, ptr %a897 + %t912 = icmp sge i64 %t911, 0 + %t913 = xor i1 %t912, true + br i1 %t913, label %then8057, label %endif8059 +then8057: + %t914 = load ptr, ptr %a1 + %t915 = icmp eq ptr %t914, null + br i1 %t915, label %panic8060, label %ok8061 +panic8060: + call void @finch_panic(ptr @.str.5101, i64 4771, ptr @.str.5102) + unreachable +ok8061: + %t916 = getelementptr inbounds %S.gen.Gen, ptr %t914, i32 0, i32 40 + %t917 = getelementptr inbounds { ptr, i64, i64 }, ptr %t916, i32 0, i32 1 + %t918 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t919 = load { ptr, i64, i64 }, ptr %t918 + store { ptr, i64, i64 } { ptr @.str.5103, i64 2, i64 0 }, ptr %a921 + store { ptr, i64, i64 } %t919, ptr %a922 + call void @finch_str_concat(ptr %a920, ptr %a921, ptr %a922) + %t923 = load { ptr, i64, i64 }, ptr %a920 + %t924 = load i64, ptr %t917 + %t925 = add i64 %t924, 1 + call void @finch_arr_reserve(ptr %t916, i64 %t925, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t926 = load ptr, ptr %t916 + %t927 = getelementptr inbounds { ptr, i64, i64 }, ptr %t926, i64 %t924 + store { ptr, i64, i64 } %t923, ptr %t927 + store i64 %t925, ptr %t917 + %t928 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t929 = load { ptr, i64, i64 }, ptr %t928 + %t930 = call i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %t929) + %t931 = xor i1 %t930, true + br i1 %t931, label %then8062, label %endif8064 +then8062: + %t932 = load ptr, ptr %a1 + %t933 = icmp eq ptr %t932, null + br i1 %t933, label %panic8065, label %ok8066 +panic8065: + call void @finch_panic(ptr @.str.5104, i64 4773, ptr @.str.5105) + unreachable +ok8066: + %t934 = getelementptr inbounds %S.gen.Gen, ptr %t932, i32 0, i32 2 + %t935 = getelementptr inbounds { ptr, i64, i64 }, ptr %t934, i32 0, i32 1 + %t936 = load { ptr, i64, i64 }, ptr %a864 + store { ptr, i64, i64 } { ptr @.str.5106, i64 7, i64 0 }, ptr %a938 + store { ptr, i64, i64 } %t936, ptr %a939 + call void @finch_str_concat(ptr %a937, ptr %a938, ptr %a939) + %t940 = load { ptr, i64, i64 }, ptr %a937 + store { ptr, i64, i64 } %t940, ptr %a942 + store { ptr, i64, i64 } { ptr @.str.5107, i64 1, i64 0 }, ptr %a943 + call void @finch_str_concat(ptr %a941, ptr %a942, ptr %a943) + store { ptr, i64, i64 } %t940, ptr %a944 + call void @finch_str_drop(ptr %a944) + %t945 = load { ptr, i64, i64 }, ptr %a941 + %t946 = load { ptr, i64, i64 }, ptr %a863 + store { ptr, i64, i64 } %t945, ptr %a948 + store { ptr, i64, i64 } %t946, ptr %a949 + call void @finch_str_concat(ptr %a947, ptr %a948, ptr %a949) + store { ptr, i64, i64 } %t945, ptr %a950 + call void @finch_str_drop(ptr %a950) + %t951 = load { ptr, i64, i64 }, ptr %a947 + store { ptr, i64, i64 } %t951, ptr %a953 + store { ptr, i64, i64 } { ptr @.str.5108, i64 2, i64 0 }, ptr %a954 + call void @finch_str_concat(ptr %a952, ptr %a953, ptr %a954) + store { ptr, i64, i64 } %t951, ptr %a955 + call void @finch_str_drop(ptr %a955) + %t956 = load { ptr, i64, i64 }, ptr %a952 + %t957 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t958 = load { ptr, i64, i64 }, ptr %t957 + store { ptr, i64, i64 } %t956, ptr %a960 + store { ptr, i64, i64 } %t958, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t956, ptr %a962 + call void @finch_str_drop(ptr %a962) + %t963 = load { ptr, i64, i64 }, ptr %a959 + store { ptr, i64, i64 } %t963, ptr %a965 + store { ptr, i64, i64 } { ptr @.str.5109, i64 1, i64 0 }, ptr %a966 + call void @finch_str_concat(ptr %a964, ptr %a965, ptr %a966) + store { ptr, i64, i64 } %t963, ptr %a967 + call void @finch_str_drop(ptr %a967) + %t968 = load { ptr, i64, i64 }, ptr %a964 + %t969 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5110, i64 2, i64 0 }, ptr %a970 + call void @finch_str_join(ptr %a971, ptr %a262, ptr %a970) + %t972 = load { ptr, i64, i64 }, ptr %a971 + store { ptr, i64, i64 } %t968, ptr %a974 + store { ptr, i64, i64 } %t972, ptr %a975 + call void @finch_str_concat(ptr %a973, ptr %a974, ptr %a975) + store { ptr, i64, i64 } %t968, ptr %a976 + call void @finch_str_drop(ptr %a976) + store { ptr, i64, i64 } %t972, ptr %a977 + call void @finch_str_drop(ptr %a977) + %t978 = load { ptr, i64, i64 }, ptr %a973 + %t979 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } %t978, ptr %a981 + store { ptr, i64, i64 } %t979, ptr %a982 + call void @finch_str_concat(ptr %a980, ptr %a981, ptr %a982) + store { ptr, i64, i64 } %t978, ptr %a983 + call void @finch_str_drop(ptr %a983) + %t984 = load { ptr, i64, i64 }, ptr %a980 + store { ptr, i64, i64 } %t984, ptr %a986 + store { ptr, i64, i64 } { ptr @.str.5111, i64 1, i64 0 }, ptr %a987 + call void @finch_str_concat(ptr %a985, ptr %a986, ptr %a987) + store { ptr, i64, i64 } %t984, ptr %a988 + call void @finch_str_drop(ptr %a988) + %t989 = load { ptr, i64, i64 }, ptr %a985 + %t990 = load i64, ptr %t935 + %t991 = add i64 %t990, 1 + call void @finch_arr_reserve(ptr %t934, i64 %t991, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t992 = load ptr, ptr %t934 + %t993 = getelementptr inbounds { ptr, i64, i64 }, ptr %t992, i64 %t990 + store { ptr, i64, i64 } %t989, ptr %t993 + store i64 %t991, ptr %t935 + br label %endif8064 +endif8064: + br label %endif8059 +endif8059: + store { ptr, i64, i64 } { ptr @.str.5112, i64 0, i64 0 }, ptr %a994 + %t995 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 4 + %t996 = load i1, ptr %t995 + br i1 %t996, label %then8067, label %endif8069 +then8067: + %t997 = getelementptr inbounds { ptr, i64, i64 }, ptr %a262, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5114, i64 2, i64 0 }, ptr %a998 + call void @finch_str_join(ptr %a999, ptr %a262, ptr %a998) + %t1000 = load { ptr, i64, i64 }, ptr %a999 + store { ptr, i64, i64 } { ptr @.str.5113, i64 2, i64 0 }, ptr %a1002 + store { ptr, i64, i64 } %t1000, ptr %a1003 + call void @finch_str_concat(ptr %a1001, ptr %a1002, ptr %a1003) + store { ptr, i64, i64 } %t1000, ptr %a1004 + call void @finch_str_drop(ptr %a1004) + %t1005 = load { ptr, i64, i64 }, ptr %a1001 + %t1006 = load { ptr, i64, i64 }, ptr %a877 + store { ptr, i64, i64 } %t1005, ptr %a1008 + store { ptr, i64, i64 } %t1006, ptr %a1009 + call void @finch_str_concat(ptr %a1007, ptr %a1008, ptr %a1009) + store { ptr, i64, i64 } %t1005, ptr %a1010 + call void @finch_str_drop(ptr %a1010) + %t1011 = load { ptr, i64, i64 }, ptr %a1007 + store { ptr, i64, i64 } %t1011, ptr %a1013 + store { ptr, i64, i64 } { ptr @.str.5115, i64 1, i64 0 }, ptr %a1014 + call void @finch_str_concat(ptr %a1012, ptr %a1013, ptr %a1014) + store { ptr, i64, i64 } %t1011, ptr %a1015 + call void @finch_str_drop(ptr %a1015) + %t1016 = load { ptr, i64, i64 }, ptr %a1012 + %t1017 = load { ptr, i64, i64 }, ptr %a994 + store { ptr, i64, i64 } %t1016, ptr %a994 + store { ptr, i64, i64 } %t1017, ptr %a1018 + call void @finch_str_drop(ptr %a1018) + br label %endif8069 +endif8069: + %t1019 = load { ptr, i64, i64 }, ptr %a864 + store { ptr, i64, i64 } { ptr @.str.5116, i64 4, i64 0 }, ptr %a1021 + store { ptr, i64, i64 } %t1019, ptr %a1022 + call void @finch_str_concat(ptr %a1020, ptr %a1021, ptr %a1022) + %t1023 = load { ptr, i64, i64 }, ptr %a1020 + store { ptr, i64, i64 } %t1023, ptr %a1025 + store { ptr, i64, i64 } { ptr @.str.5117, i64 1, i64 0 }, ptr %a1026 + call void @finch_str_concat(ptr %a1024, ptr %a1025, ptr %a1026) + store { ptr, i64, i64 } %t1023, ptr %a1027 + call void @finch_str_drop(ptr %a1027) + %t1028 = load { ptr, i64, i64 }, ptr %a1024 + %t1029 = load { ptr, i64, i64 }, ptr %a863 + store { ptr, i64, i64 } %t1028, ptr %a1031 + store { ptr, i64, i64 } %t1029, ptr %a1032 + call void @finch_str_concat(ptr %a1030, ptr %a1031, ptr %a1032) + store { ptr, i64, i64 } %t1028, ptr %a1033 + call void @finch_str_drop(ptr %a1033) + %t1034 = load { ptr, i64, i64 }, ptr %a1030 + %t1035 = load { ptr, i64, i64 }, ptr %a994 + store { ptr, i64, i64 } %t1034, ptr %a1037 + store { ptr, i64, i64 } %t1035, ptr %a1038 + call void @finch_str_concat(ptr %a1036, ptr %a1037, ptr %a1038) + store { ptr, i64, i64 } %t1034, ptr %a1039 + call void @finch_str_drop(ptr %a1039) + %t1040 = load { ptr, i64, i64 }, ptr %a1036 + store { ptr, i64, i64 } %t1040, ptr %a1042 + store { ptr, i64, i64 } { ptr @.str.5118, i64 2, i64 0 }, ptr %a1043 + call void @finch_str_concat(ptr %a1041, ptr %a1042, ptr %a1043) + store { ptr, i64, i64 } %t1040, ptr %a1044 + call void @finch_str_drop(ptr %a1044) + %t1045 = load { ptr, i64, i64 }, ptr %a1041 + %t1046 = getelementptr inbounds %S.cimport.CFunc, ptr %a3, i32 0, i32 0 + %t1047 = load { ptr, i64, i64 }, ptr %t1046 + store { ptr, i64, i64 } %t1045, ptr %a1049 + store { ptr, i64, i64 } %t1047, ptr %a1050 + call void @finch_str_concat(ptr %a1048, ptr %a1049, ptr %a1050) + store { ptr, i64, i64 } %t1045, ptr %a1051 + call void @finch_str_drop(ptr %a1051) + %t1052 = load { ptr, i64, i64 }, ptr %a1048 + store { ptr, i64, i64 } %t1052, ptr %a1054 + store { ptr, i64, i64 } { ptr @.str.5119, i64 1, i64 0 }, ptr %a1055 + call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) + store { ptr, i64, i64 } %t1052, ptr %a1056 + call void @finch_str_drop(ptr %a1056) + %t1057 = load { ptr, i64, i64 }, ptr %a1053 + %t1058 = getelementptr inbounds { ptr, i64, i64 }, ptr %a263, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5120, i64 2, i64 0 }, ptr %a1059 + call void @finch_str_join(ptr %a1060, ptr %a263, ptr %a1059) + %t1061 = load { ptr, i64, i64 }, ptr %a1060 + store { ptr, i64, i64 } %t1057, ptr %a1063 + store { ptr, i64, i64 } %t1061, ptr %a1064 + call void @finch_str_concat(ptr %a1062, ptr %a1063, ptr %a1064) + store { ptr, i64, i64 } %t1057, ptr %a1065 + call void @finch_str_drop(ptr %a1065) + store { ptr, i64, i64 } %t1061, ptr %a1066 + call void @finch_str_drop(ptr %a1066) + %t1067 = load { ptr, i64, i64 }, ptr %a1062 + store { ptr, i64, i64 } %t1067, ptr %a1069 + store { ptr, i64, i64 } { ptr @.str.5121, i64 1, i64 0 }, ptr %a1070 + call void @finch_str_concat(ptr %a1068, ptr %a1069, ptr %a1070) + store { ptr, i64, i64 } %t1067, ptr %a1071 + call void @finch_str_drop(ptr %a1071) + %t1072 = load { ptr, i64, i64 }, ptr %a1068 + store { ptr, i64, i64 } %t1072, ptr %a1073 + %t1074 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 + %t1075 = load { ptr, i64, i64 }, ptr %t1074 + store { ptr, i64, i64 } %t1075, ptr %a1076 + store { ptr, i64, i64 } { ptr @.str.5122, i64 4, i64 0 }, ptr %a1077 + %t1078 = call i32 @finch_str_eq(ptr %a1076, ptr %a1077) + %t1079 = icmp ne i32 %t1078, 0 + br i1 %t1079, label %then8070, label %endif8072 +then8070: + %t1080 = load ptr, ptr %a1 + %t1081 = load { ptr, i64, i64 }, ptr %a1073 + call void @finch.gen.emit(ptr %t1080, { ptr, i64, i64 } %t1081) + %t1082 = load ptr, ptr %a1 + %t1083 = load { ptr, i64, i64 }, ptr %a317 + %t1084 = load i64, ptr %a323 + call void @finch.gen.releaseAll(ptr %t1082, { ptr, i64, i64 } %t1083, i64 %t1084) + %t1085 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1085, ptr %a1086 + call void @finch.copy.S_ast_Type(ptr %a1087, ptr %a1086) + %t1088 = load %S.ast.Type, ptr %a1087 + %t1089 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1088, 1 + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1089 +endif8072: + %t1090 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 3 + %t1091 = load i1, ptr %t1090 + br i1 %t1091, label %then8073, label %endif8075 +then8073: + %t1092 = load ptr, ptr %a1 + %t1093 = load { ptr, i64, i64 }, ptr %a1073 + call void @finch.gen.emit(ptr %t1092, { ptr, i64, i64 } %t1093) + %t1094 = load ptr, ptr %a1 + %t1095 = load { ptr, i64, i64 }, ptr %a317 + %t1096 = load i64, ptr %a323 + call void @finch.gen.releaseAll(ptr %t1094, { ptr, i64, i64 } %t1095, i64 %t1096) + %t1097 = load ptr, ptr %a1 + %t1098 = load ptr, ptr %a1 + %t1099 = load %S.ast.Type, ptr %a219 + %t1100 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1098, %S.ast.Type %t1099) + %t1101 = load { ptr, i64, i64 }, ptr %a264 + %t1102 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1097, { ptr, i64, i64 } %t1100, { ptr, i64, i64 } %t1101) + store { ptr, i64, i64 } %t1100, ptr %a1103 + call void @finch_str_drop(ptr %a1103) + %t1104 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1102, 0 + %t1105 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1105, ptr %a1106 + call void @finch.copy.S_ast_Type(ptr %a1107, ptr %a1106) + %t1108 = load %S.ast.Type, ptr %a1107 + %t1109 = insertvalue %S.gen.Val %t1104, %S.ast.Type %t1108, 1 + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1109 +endif8075: + %t1110 = load ptr, ptr %a1 + %t1111 = load { ptr, i64, i64 }, ptr %a1073 + %t1112 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1110, { ptr, i64, i64 } %t1111) + store { ptr, i64, i64 } %t1112, ptr %a1113 + %t1114 = load ptr, ptr %a1 + %t1115 = load { ptr, i64, i64 }, ptr %a317 + %t1116 = load i64, ptr %a323 + call void @finch.gen.releaseAll(ptr %t1114, { ptr, i64, i64 } %t1115, i64 %t1116) + %t1117 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 + %t1118 = getelementptr inbounds %S.gen.Abi, ptr %t1117, i32 0, i32 0 + %t1119 = load { ptr, i64, i64 }, ptr %t1118 + store { ptr, i64, i64 } %t1119, ptr %a1120 + store { ptr, i64, i64 } { ptr @.str.5123, i64 6, i64 0 }, ptr %a1121 + %t1122 = call i32 @finch_str_eq(ptr %a1120, ptr %a1121) + %t1123 = icmp ne i32 %t1122, 0 + br i1 %t1123, label %then8076, label %endif8078 +then8076: + %t1124 = load ptr, ptr %a1 + %t1125 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1124, { ptr, i64, i64 } { ptr @.str.5124, i64 9, i64 0 }) + store { ptr, i64, i64 } %t1125, ptr %a1126 + %t1127 = load ptr, ptr %a1 + %t1128 = getelementptr inbounds %S.gen.Plan, ptr %a261, i32 0, i32 0 + %t1129 = getelementptr inbounds %S.gen.Abi, ptr %t1128, i32 0, i32 2 + %t1130 = load { ptr, i64, i64 }, ptr %t1129 + %t1131 = load { ptr, i64, i64 }, ptr %a1113 + %t1132 = load { ptr, i64, i64 }, ptr %a1126 + call void @finch.gen.store(ptr %t1127, { ptr, i64, i64 } %t1130, { ptr, i64, i64 } %t1131, { ptr, i64, i64 } %t1132) + %t1133 = load ptr, ptr %a1 + %t1134 = load ptr, ptr %a1 + %t1135 = load %S.ast.Type, ptr %a219 + %t1136 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1134, %S.ast.Type %t1135) + %t1137 = load { ptr, i64, i64 }, ptr %a1126 + %t1138 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1133, { ptr, i64, i64 } %t1136, { ptr, i64, i64 } %t1137) + store { ptr, i64, i64 } %t1136, ptr %a1139 + call void @finch_str_drop(ptr %a1139) + %t1140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1138, 0 + %t1141 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1141, ptr %a1142 + call void @finch.copy.S_ast_Type(ptr %a1143, ptr %a1142) + %t1144 = load %S.ast.Type, ptr %a1143 + %t1145 = insertvalue %S.gen.Val %t1140, %S.ast.Type %t1144, 1 + call void @finch_str_drop(ptr %a1126) + call void @finch_str_drop(ptr %a1113) + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1145 +endif8078: + %t1146 = getelementptr inbounds %S.ast.Type, ptr %a219, i32 0, i32 0 + %t1147 = load { ptr, i64, i64 }, ptr %t1146 + store { ptr, i64, i64 } %t1147, ptr %a1148 + store { ptr, i64, i64 } { ptr @.str.5125, i64 3, i64 0 }, ptr %a1149 + %t1150 = call i32 @finch_str_eq(ptr %a1148, ptr %a1149) + %t1151 = icmp ne i32 %t1150, 0 + br i1 %t1151, label %then8079, label %endif8081 +then8079: + %t1152 = load ptr, ptr %a1 + %t1153 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1152) + store { ptr, i64, i64 } %t1153, ptr %a1154 + %t1155 = load ptr, ptr %a1 + %t1156 = load { ptr, i64, i64 }, ptr %a1154 + call void @finch.gen.store(ptr %t1155, { ptr, i64, i64 } { ptr @.str.5126, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5127, i64 15, i64 0 }, { ptr, i64, i64 } %t1156) + %t1157 = load ptr, ptr %a1 + %t1158 = load { ptr, i64, i64 }, ptr %a1154 + store { ptr, i64, i64 } { ptr @.str.5128, i64 32, i64 0 }, ptr %a1160 + store { ptr, i64, i64 } %t1158, ptr %a1161 + call void @finch_str_concat(ptr %a1159, ptr %a1160, ptr %a1161) + %t1162 = load { ptr, i64, i64 }, ptr %a1159 + store { ptr, i64, i64 } %t1162, ptr %a1164 + store { ptr, i64, i64 } { ptr @.str.5129, i64 6, i64 0 }, ptr %a1165 + call void @finch_str_concat(ptr %a1163, ptr %a1164, ptr %a1165) + store { ptr, i64, i64 } %t1162, ptr %a1166 + call void @finch_str_drop(ptr %a1166) + %t1167 = load { ptr, i64, i64 }, ptr %a1163 + %t1168 = load { ptr, i64, i64 }, ptr %a1113 + store { ptr, i64, i64 } %t1167, ptr %a1170 + store { ptr, i64, i64 } %t1168, ptr %a1171 + call void @finch_str_concat(ptr %a1169, ptr %a1170, ptr %a1171) + store { ptr, i64, i64 } %t1167, ptr %a1172 + call void @finch_str_drop(ptr %a1172) + %t1173 = load { ptr, i64, i64 }, ptr %a1169 + store { ptr, i64, i64 } %t1173, ptr %a1175 + store { ptr, i64, i64 } { ptr @.str.5130, i64 1, i64 0 }, ptr %a1176 + call void @finch_str_concat(ptr %a1174, ptr %a1175, ptr %a1176) + store { ptr, i64, i64 } %t1173, ptr %a1177 + call void @finch_str_drop(ptr %a1177) + %t1178 = load { ptr, i64, i64 }, ptr %a1174 + call void @finch.gen.emit(ptr %t1157, { ptr, i64, i64 } %t1178) + store { ptr, i64, i64 } %t1178, ptr %a1179 + call void @finch_str_drop(ptr %a1179) + %t1180 = load ptr, ptr %a1 + %t1181 = load { ptr, i64, i64 }, ptr %a1154 + %t1182 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1180, { ptr, i64, i64 } { ptr @.str.5131, i64 17, i64 0 }, { ptr, i64, i64 } %t1181) + %t1183 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1182, 0 + %t1184 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1184, ptr %a1185 + call void @finch.copy.S_ast_Type(ptr %a1186, ptr %a1185) + %t1187 = load %S.ast.Type, ptr %a1186 + %t1188 = insertvalue %S.gen.Val %t1183, %S.ast.Type %t1187, 1 + call void @finch_str_drop(ptr %a1154) + call void @finch_str_drop(ptr %a1113) + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1188 +endif8081: + %t1189 = load { ptr, i64, i64 }, ptr %a1113 + store { ptr, i64, i64 } %t1189, ptr %a1190 + call void @finch_str_copy(ptr %a1191, ptr %a1190) + %t1192 = load { ptr, i64, i64 }, ptr %a1191 + %t1193 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1192, 0 + %t1194 = load %S.ast.Type, ptr %a219 + store %S.ast.Type %t1194, ptr %a1195 + call void @finch.copy.S_ast_Type(ptr %a1196, ptr %a1195) + %t1197 = load %S.ast.Type, ptr %a1196 + %t1198 = insertvalue %S.gen.Val %t1193, %S.ast.Type %t1197, 1 + call void @finch_str_drop(ptr %a1113) + call void @finch_str_drop(ptr %a1073) + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a877) + call void @finch_str_drop(ptr %a864) + call void @finch_str_drop(ptr %a863) + call void @finch.drop.arr_S_gen_Val(ptr %a317) + call void @finch_str_drop(ptr %a264) + call void @finch.drop.arr_str(ptr %a263) + call void @finch.drop.arr_str(ptr %a262) + call void @finch.drop.S_gen_Plan(ptr %a261) + call void @finch.drop.arr_S_ast_Type(ptr %a225) + call void @finch.drop.S_ast_Type(ptr %a219) + ret %S.gen.Val %t1198 +} + +define internal void @finch.gen.releaseAll(ptr %p0, { ptr, i64, i64 } %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a12 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 0, ptr %a4 + br label %each.cond8082 +each.cond8082: + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = load i64, ptr %a4 + %t8 = icmp slt i64 %t7, %t6 + br i1 %t8, label %each.body8083, label %each.end8085 +each.body8083: + %t9 = load ptr, ptr %a2 + %t10 = getelementptr inbounds %S.gen.Val, ptr %t9, i64 %t7 + %t11 = load %S.gen.Val, ptr %t10 + store %S.gen.Val %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = load %S.gen.Val, ptr %a12 + call void @finch.gen.release(ptr %t13, %S.gen.Val %t14) + br label %each.step8084 +each.step8084: + %t15 = load i64, ptr %a4 + %t16 = add i64 %t15, 1 + store i64 %t16, ptr %a4 + br label %each.cond8082 +each.end8085: + %t17 = load ptr, ptr %a1 + %t18 = load i64, ptr %a3 + call void @finch.gen.heldEnd(ptr %t17, i64 %t18) + ret void +} + +define internal i1 @finch.gen.runtimeDeclares({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca i64, align 16 + %a18 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 5, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.5132, i64 6, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.5133, i64 6, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.5134, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.5135, i64 4, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.5136, i64 5, i64 0 }, ptr %t8 + %t9 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t10 = insertvalue { ptr, i64, i64 } %t9, i64 5, 1 + %t11 = insertvalue { ptr, i64, i64 } %t10, i64 5, 2 + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 + %t14 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a15 + %t16 = load i64, ptr %t13 + %t17 = load ptr, ptr %a12 + store i64 0, ptr %a18 + br label %find.cond8086 +find.cond8086: + %t19 = load i64, ptr %a18 + %t20 = icmp slt i64 %t19, %t16 + br i1 %t20, label %find.body8087, label %find.end8090 +find.body8087: + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i64 %t19 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + store { ptr, i64, i64 } %t14, ptr %a24 + %t25 = call i32 @finch_str_eq(ptr %a23, ptr %a24) + %t26 = icmp ne i32 %t25, 0 + br i1 %t26, label %find.hit8088, label %find.next8089 +find.hit8088: + store i64 %t19, ptr %a15 + br label %find.end8090 +find.next8089: + %t27 = add i64 %t19, 1 + store i64 %t27, ptr %a18 + br label %find.cond8086 +find.end8090: + %t28 = load i64, ptr %a15 + %t29 = icmp sge i64 %t28, 0 + call void @finch.drop.arr_str(ptr %a12) + ret i1 %t29 +} + +define internal { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca i64, align 16 + %a65 = alloca i64, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca i64, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.5137, i64 6, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 1 + store { ptr, i64, i64 } { ptr @.str.5138, i64 4, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 2 + store { ptr, i64, i64 } { ptr @.str.5139, i64 7, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 3 + store { ptr, i64, i64 } { ptr @.str.5140, i64 5, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 4 + store { ptr, i64, i64 } { ptr @.str.5141, i64 5, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 5 + store { ptr, i64, i64 } { ptr @.str.5142, i64 7, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 6 + store { ptr, i64, i64 } { ptr @.str.5143, i64 4, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 7 + store { ptr, i64, i64 } { ptr @.str.5144, i64 3, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 8 + store { ptr, i64, i64 } { ptr @.str.5145, i64 3, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 9 + store { ptr, i64, i64 } { ptr @.str.5146, i64 3, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 10 + store { ptr, i64, i64 } { ptr @.str.5147, i64 5, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 11 + store { ptr, i64, i64 } { ptr @.str.5148, i64 4, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 12 + store { ptr, i64, i64 } { ptr @.str.5149, i64 6, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 13 + store { ptr, i64, i64 } { ptr @.str.5150, i64 4, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 14 + store { ptr, i64, i64 } { ptr @.str.5151, i64 5, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 15 + store { ptr, i64, i64 } { ptr @.str.5152, i64 3, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 16 + store { ptr, i64, i64 } { ptr @.str.5153, i64 4, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 17 + store { ptr, i64, i64 } { ptr @.str.5154, i64 6, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 18 + store { ptr, i64, i64 } { ptr @.str.5155, i64 6, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 19 + store { ptr, i64, i64 } { ptr @.str.5156, i64 6, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 20 + store { ptr, i64, i64 } { ptr @.str.5157, i64 4, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 21 + store { ptr, i64, i64 } { ptr @.str.5158, i64 5, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 22 + store { ptr, i64, i64 } { ptr @.str.5159, i64 6, i64 0 }, ptr %t26 + %t27 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t28 = insertvalue { ptr, i64, i64 } %t27, i64 23, 1 + %t29 = insertvalue { ptr, i64, i64 } %t28, i64 23, 2 + store { ptr, i64, i64 } %t29, ptr %a30 + %t31 = mul i64 23, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t32 = call ptr @finch_alloc(i64 %t31) + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 0 + store { ptr, i64, i64 } { ptr @.str.5160, i64 7, i64 0 }, ptr %t33 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 1 + store { ptr, i64, i64 } { ptr @.str.5161, i64 7, i64 0 }, ptr %t34 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 2 + store { ptr, i64, i64 } { ptr @.str.5162, i64 7, i64 0 }, ptr %t35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 3 + store { ptr, i64, i64 } { ptr @.str.5163, i64 7, i64 0 }, ptr %t36 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 4 + store { ptr, i64, i64 } { ptr @.str.5164, i64 7, i64 0 }, ptr %t37 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 5 + store { ptr, i64, i64 } { ptr @.str.5165, i64 7, i64 0 }, ptr %t38 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 6 + store { ptr, i64, i64 } { ptr @.str.5166, i64 6, i64 0 }, ptr %t39 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 7 + store { ptr, i64, i64 } { ptr @.str.5167, i64 6, i64 0 }, ptr %t40 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 8 + store { ptr, i64, i64 } { ptr @.str.5168, i64 6, i64 0 }, ptr %t41 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 9 + store { ptr, i64, i64 } { ptr @.str.5169, i64 6, i64 0 }, ptr %t42 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 10 + store { ptr, i64, i64 } { ptr @.str.5170, i64 6, i64 0 }, ptr %t43 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 11 + store { ptr, i64, i64 } { ptr @.str.5171, i64 6, i64 0 }, ptr %t44 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 12 + store { ptr, i64, i64 } { ptr @.str.5172, i64 8, i64 0 }, ptr %t45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 13 + store { ptr, i64, i64 } { ptr @.str.5173, i64 8, i64 0 }, ptr %t46 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 14 + store { ptr, i64, i64 } { ptr @.str.5174, i64 8, i64 0 }, ptr %t47 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 15 + store { ptr, i64, i64 } { ptr @.str.5175, i64 8, i64 0 }, ptr %t48 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 16 + store { ptr, i64, i64 } { ptr @.str.5176, i64 8, i64 0 }, ptr %t49 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 17 + store { ptr, i64, i64 } { ptr @.str.5177, i64 8, i64 0 }, ptr %t50 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 18 + store { ptr, i64, i64 } { ptr @.str.5178, i64 8, i64 0 }, ptr %t51 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 19 + store { ptr, i64, i64 } { ptr @.str.5179, i64 8, i64 0 }, ptr %t52 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 20 + store { ptr, i64, i64 } { ptr @.str.5180, i64 6, i64 0 }, ptr %t53 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 21 + store { ptr, i64, i64 } { ptr @.str.5181, i64 8, i64 0 }, ptr %t54 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t32, i64 22 + store { ptr, i64, i64 } { ptr @.str.5182, i64 8, i64 0 }, ptr %t55 + %t56 = insertvalue { ptr, i64, i64 } undef, ptr %t32, 0 + %t57 = insertvalue { ptr, i64, i64 } %t56, i64 23, 1 + %t58 = insertvalue { ptr, i64, i64 } %t57, i64 23, 2 + store { ptr, i64, i64 } %t58, ptr %a59 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t61 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a62 + %t63 = load i64, ptr %t60 + %t64 = load ptr, ptr %a30 + store i64 0, ptr %a65 + br label %find.cond8091 +find.cond8091: + %t66 = load i64, ptr %a65 + %t67 = icmp slt i64 %t66, %t63 + br i1 %t67, label %find.body8092, label %find.end8095 +find.body8092: + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t66 + %t69 = load { ptr, i64, i64 }, ptr %t68 + store { ptr, i64, i64 } %t69, ptr %a70 + store { ptr, i64, i64 } %t61, ptr %a71 + %t72 = call i32 @finch_str_eq(ptr %a70, ptr %a71) + %t73 = icmp ne i32 %t72, 0 + br i1 %t73, label %find.hit8093, label %find.next8094 +find.hit8093: + store i64 %t66, ptr %a62 + br label %find.end8095 +find.next8094: + %t74 = add i64 %t66, 1 + store i64 %t74, ptr %a65 + br label %find.cond8091 +find.end8095: + %t75 = load i64, ptr %a62 + store i64 %t75, ptr %a76 + %t77 = load i64, ptr %a76 + %t78 = icmp slt i64 %t77, 0 + br i1 %t78, label %then8096, label %endif8098 +then8096: + call void @finch.drop.arr_str(ptr %a59) + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } { ptr @.str.5183, i64 0, i64 0 } +endif8098: + %t79 = load i64, ptr %a76 + %t80 = load { ptr, i64, i64 }, ptr %a59 + %t81 = extractvalue { ptr, i64, i64 } %t80, 1 + %t82 = icmp uge i64 %t79, %t81 + br i1 %t82, label %range8099, label %inrange8100 +range8099: + call void @finch_panic_index(ptr @.str.5185, i64 4830, i64 %t79, i64 %t81) + unreachable +inrange8100: + %t83 = extractvalue { ptr, i64, i64 } %t80, 0 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 %t79 + %t85 = load { ptr, i64, i64 }, ptr %t84 + store { ptr, i64, i64 } { ptr @.str.5184, i64 28, i64 0 }, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.5186, i64 14, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.drop.arr_str(ptr %a59) + call void @finch.drop.arr_str(ptr %a30) + ret { ptr, i64, i64 } %t94 +} + +define internal void @finch.drop.S_docs_Doc(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.docs.Doc, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal void @finch.drop.arr_S_docs_Doc(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond8110 +n.cond8110: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body8111, label %n.end8112 +n.body8111: + %t7 = getelementptr inbounds %S.docs.Doc, ptr %t1, i64 %t5 + call void @finch.drop.S_docs_Doc(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond8110 +n.end8112: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal %S.gen.Val @finch.gen.call(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca %S.docs.Doc, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i64, align 16 + %a62 = alloca %S.gen.Val, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca %S.ast.Node, align 16 + %a110 = alloca %S.ast.Node, align 16 + %a112 = alloca %S.ast.Node, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca i64, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca %S.gen.Place, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca %S.gen.Val, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca i1, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca %S.ast.Type, align 16 + %a220 = alloca %S.ast.Type, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca %S.ast.Type, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca %S.ast.Type, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a303 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca %S.ast.Type, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a420 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca %S.ast.Type, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a603 = alloca %S.gen.Val, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a615 = alloca { ptr, i64, i64 }, align 16 + %a616 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a638 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a654 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a672 = alloca { ptr, i64, i64 }, align 16 + %a673 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a684 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a686 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a697 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a704 = alloca { ptr, i64, i64 }, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca { ptr, i64, i64 }, align 16 + %a709 = alloca { ptr, i64, i64 }, align 16 + %a710 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a727 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a753 = alloca { ptr, i64, i64 }, align 16 + %a754 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a759 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a763 = alloca { ptr, i64, i64 }, align 16 + %a764 = alloca { ptr, i64, i64 }, align 16 + %a765 = alloca { ptr, i64, i64 }, align 16 + %a766 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a777 = alloca { ptr, i64, i64 }, align 16 + %a779 = alloca { ptr, i64, i64 }, align 16 + %a780 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a789 = alloca { ptr, i64, i64 }, align 16 + %a790 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a796 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a810 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca %S.gen.Val, align 16 + %a832 = alloca i64, align 16 + %a844 = alloca %S.gen.Val, align 16 + %a850 = alloca { ptr, i64, i64 }, align 16 + %a854 = alloca { ptr, i64, i64 }, align 16 + %a861 = alloca { ptr, i64, i64 }, align 16 + %a862 = alloca { ptr, i64, i64 }, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a868 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a875 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a878 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a880 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a885 = alloca { ptr, i64, i64 }, align 16 + %a886 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca { ptr, i64, i64 }, align 16 + %a891 = alloca { ptr, i64, i64 }, align 16 + %a894 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a896 = alloca { ptr, i64, i64 }, align 16 + %a897 = alloca { ptr, i64, i64 }, align 16 + %a899 = alloca { ptr, i64, i64 }, align 16 + %a900 = alloca { ptr, i64, i64 }, align 16 + %a901 = alloca { ptr, i64, i64 }, align 16 + %a902 = alloca { ptr, i64, i64 }, align 16 + %a905 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a910 = alloca { ptr, i64, i64 }, align 16 + %a911 = alloca { ptr, i64, i64 }, align 16 + %a913 = alloca { ptr, i64, i64 }, align 16 + %a914 = alloca { ptr, i64, i64 }, align 16 + %a915 = alloca { ptr, i64, i64 }, align 16 + %a916 = alloca { ptr, i64, i64 }, align 16 + %a919 = alloca { ptr, i64, i64 }, align 16 + %a924 = alloca { ptr, i64, i64 }, align 16 + %a932 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a945 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a956 = alloca { ptr, i64, i64 }, align 16 + %a957 = alloca { ptr, i64, i64 }, align 16 + %a958 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a963 = alloca { ptr, i64, i64 }, align 16 + %a970 = alloca { ptr, i64, i64 }, align 16 + %a971 = alloca { ptr, i64, i64 }, align 16 + %a972 = alloca { ptr, i64, i64 }, align 16 + %a974 = alloca { ptr, i64, i64 }, align 16 + %a975 = alloca { ptr, i64, i64 }, align 16 + %a976 = alloca { ptr, i64, i64 }, align 16 + %a977 = alloca { ptr, i64, i64 }, align 16 + %a980 = alloca { ptr, i64, i64 }, align 16 + %a985 = alloca { ptr, i64, i64 }, align 16 + %a986 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca %S.gen.Val, align 16 + %a1004 = alloca { ptr, i64, i64 }, align 16 + %a1007 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1011 = alloca { ptr, i64, i64 }, align 16 + %a1012 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1022 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1025 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1027 = alloca { ptr, i64, i64 }, align 16 + %a1028 = alloca { ptr, i64, i64 }, align 16 + %a1030 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca { ptr, i64, i64 }, align 16 + %a1038 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1044 = alloca { ptr, i64, i64 }, align 16 + %a1049 = alloca { ptr, i64, i64 }, align 16 + %a1050 = alloca { ptr, i64, i64 }, align 16 + %a1051 = alloca { ptr, i64, i64 }, align 16 + %a1053 = alloca { ptr, i64, i64 }, align 16 + %a1054 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1060 = alloca { ptr, i64, i64 }, align 16 + %a1061 = alloca { ptr, i64, i64 }, align 16 + %a1062 = alloca { ptr, i64, i64 }, align 16 + %a1064 = alloca { ptr, i64, i64 }, align 16 + %a1065 = alloca { ptr, i64, i64 }, align 16 + %a1066 = alloca { ptr, i64, i64 }, align 16 + %a1067 = alloca { ptr, i64, i64 }, align 16 + %a1070 = alloca { ptr, i64, i64 }, align 16 + %a1071 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 + %a1075 = alloca { ptr, i64, i64 }, align 16 + %a1076 = alloca { ptr, i64, i64 }, align 16 + %a1078 = alloca { ptr, i64, i64 }, align 16 + %a1079 = alloca { ptr, i64, i64 }, align 16 + %a1080 = alloca { ptr, i64, i64 }, align 16 + %a1081 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca { ptr, i64, i64 }, align 16 + %a1097 = alloca { ptr, i64, i64 }, align 16 + %a1101 = alloca %S.ast.Type, align 16 + %a1108 = alloca { ptr, i64, i64 }, align 16 + %a1109 = alloca { ptr, i64, i64 }, align 16 + %a1110 = alloca { ptr, i64, i64 }, align 16 + %a1112 = alloca { ptr, i64, i64 }, align 16 + %a1113 = alloca { ptr, i64, i64 }, align 16 + %a1114 = alloca { ptr, i64, i64 }, align 16 + %a1115 = alloca { ptr, i64, i64 }, align 16 + %a1118 = alloca { ptr, i64, i64 }, align 16 + %a1119 = alloca { ptr, i64, i64 }, align 16 + %a1123 = alloca %S.ast.Type, align 16 + %a1128 = alloca { ptr, i64, i64 }, align 16 + %a1129 = alloca { ptr, i64, i64 }, align 16 + %a1130 = alloca { ptr, i64, i64 }, align 16 + %a1132 = alloca { ptr, i64, i64 }, align 16 + %a1133 = alloca { ptr, i64, i64 }, align 16 + %a1134 = alloca { ptr, i64, i64 }, align 16 + %a1135 = alloca { ptr, i64, i64 }, align 16 + %a1138 = alloca { ptr, i64, i64 }, align 16 + %a1143 = alloca { ptr, i64, i64 }, align 16 + %a1144 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca %S.gen.Val, align 16 + %a1162 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca { ptr, i64, i64 }, align 16 + %a1166 = alloca { ptr, i64, i64 }, align 16 + %a1167 = alloca { ptr, i64, i64 }, align 16 + %a1169 = alloca { ptr, i64, i64 }, align 16 + %a1170 = alloca { ptr, i64, i64 }, align 16 + %a1171 = alloca { ptr, i64, i64 }, align 16 + %a1172 = alloca { ptr, i64, i64 }, align 16 + %a1177 = alloca { ptr, i64, i64 }, align 16 + %a1178 = alloca { ptr, i64, i64 }, align 16 + %a1179 = alloca { ptr, i64, i64 }, align 16 + %a1180 = alloca { ptr, i64, i64 }, align 16 + %a1181 = alloca { ptr, i64, i64 }, align 16 + %a1183 = alloca { ptr, i64, i64 }, align 16 + %a1184 = alloca { ptr, i64, i64 }, align 16 + %a1185 = alloca { ptr, i64, i64 }, align 16 + %a1186 = alloca { ptr, i64, i64 }, align 16 + %a1188 = alloca { ptr, i64, i64 }, align 16 + %a1191 = alloca { ptr, i64, i64 }, align 16 + %a1192 = alloca { ptr, i64, i64 }, align 16 + %a1193 = alloca { ptr, i64, i64 }, align 16 + %a1195 = alloca { ptr, i64, i64 }, align 16 + %a1196 = alloca { ptr, i64, i64 }, align 16 + %a1197 = alloca { ptr, i64, i64 }, align 16 + %a1198 = alloca { ptr, i64, i64 }, align 16 + %a1201 = alloca { ptr, i64, i64 }, align 16 + %a1202 = alloca { ptr, i64, i64 }, align 16 + %a1206 = alloca %S.ast.Type, align 16 + %a1210 = alloca { ptr, i64, i64 }, align 16 + %a1211 = alloca { ptr, i64, i64 }, align 16 + %a1217 = alloca { ptr, i64, i64 }, align 16 + %a1218 = alloca { ptr, i64, i64 }, align 16 + %a1243 = alloca %S.gen.Val, align 16 + %a1244 = alloca %S.ast.Type, align 16 + %a1245 = alloca %S.gen.Val, align 16 + %a1249 = alloca { ptr, i64, i64 }, align 16 + %a1250 = alloca { ptr, i64, i64 }, align 16 + %a1251 = alloca { ptr, i64, i64 }, align 16 + %a1253 = alloca { ptr, i64, i64 }, align 16 + %a1254 = alloca { ptr, i64, i64 }, align 16 + %a1255 = alloca { ptr, i64, i64 }, align 16 + %a1256 = alloca { ptr, i64, i64 }, align 16 + %a1259 = alloca { ptr, i64, i64 }, align 16 + %a1260 = alloca { ptr, i64, i64 }, align 16 + %a1263 = alloca { ptr, i64, i64 }, align 16 + %a1266 = alloca { ptr, i64, i64 }, align 16 + %a1267 = alloca { ptr, i64, i64 }, align 16 + %a1268 = alloca { ptr, i64, i64 }, align 16 + %a1270 = alloca { ptr, i64, i64 }, align 16 + %a1271 = alloca { ptr, i64, i64 }, align 16 + %a1272 = alloca { ptr, i64, i64 }, align 16 + %a1273 = alloca { ptr, i64, i64 }, align 16 + %a1275 = alloca { ptr, i64, i64 }, align 16 + %a1279 = alloca { ptr, i64, i64 }, align 16 + %a1280 = alloca { ptr, i64, i64 }, align 16 + %a1285 = alloca %S.gen.Val, align 16 + %a1303 = alloca %S.gen.Val, align 16 + %a1306 = alloca { ptr, i64, i64 }, align 16 + %a1309 = alloca { ptr, i64, i64 }, align 16 + %a1310 = alloca { ptr, i64, i64 }, align 16 + %a1311 = alloca { ptr, i64, i64 }, align 16 + %a1313 = alloca { ptr, i64, i64 }, align 16 + %a1314 = alloca { ptr, i64, i64 }, align 16 + %a1315 = alloca { ptr, i64, i64 }, align 16 + %a1316 = alloca { ptr, i64, i64 }, align 16 + %a1321 = alloca { ptr, i64, i64 }, align 16 + %a1322 = alloca { ptr, i64, i64 }, align 16 + %a1323 = alloca { ptr, i64, i64 }, align 16 + %a1324 = alloca { ptr, i64, i64 }, align 16 + %a1325 = alloca { ptr, i64, i64 }, align 16 + %a1327 = alloca { ptr, i64, i64 }, align 16 + %a1328 = alloca { ptr, i64, i64 }, align 16 + %a1329 = alloca { ptr, i64, i64 }, align 16 + %a1330 = alloca { ptr, i64, i64 }, align 16 + %a1332 = alloca { ptr, i64, i64 }, align 16 + %a1343 = alloca { ptr, i64, i64 }, align 16 + %a1344 = alloca { ptr, i64, i64 }, align 16 + %a1359 = alloca %S.gen.Val, align 16 + %a1365 = alloca { ptr, i64, i64 }, align 16 + %a1366 = alloca { ptr, i64, i64 }, align 16 + %a1367 = alloca { ptr, i64, i64 }, align 16 + %a1368 = alloca { ptr, i64, i64 }, align 16 + %a1370 = alloca { ptr, i64, i64 }, align 16 + %a1371 = alloca { ptr, i64, i64 }, align 16 + %a1372 = alloca { ptr, i64, i64 }, align 16 + %a1373 = alloca { ptr, i64, i64 }, align 16 + %a1376 = alloca { ptr, i64, i64 }, align 16 + %a1377 = alloca { ptr, i64, i64 }, align 16 + %a1387 = alloca { ptr, i64, i64 }, align 16 + %a1388 = alloca { ptr, i64, i64 }, align 16 + %a1390 = alloca { ptr, i64, i64 }, align 16 + %a1391 = alloca { ptr, i64, i64 }, align 16 + %a1399 = alloca { ptr, i64, i64 }, align 16 + %a1400 = alloca { ptr, i64, i64 }, align 16 + %a1415 = alloca %S.gen.Val, align 16 + %a1419 = alloca { ptr, i64, i64 }, align 16 + %a1420 = alloca { ptr, i64, i64 }, align 16 + %a1449 = alloca { ptr, i64, i64 }, align 16 + %a1452 = alloca { ptr, i64, i64 }, align 16 + %a1457 = alloca { ptr, i64, i64 }, align 16 + %a1458 = alloca { ptr, i64, i64 }, align 16 + %a1459 = alloca { ptr, i64, i64 }, align 16 + %a1461 = alloca { ptr, i64, i64 }, align 16 + %a1462 = alloca { ptr, i64, i64 }, align 16 + %a1463 = alloca { ptr, i64, i64 }, align 16 + %a1464 = alloca { ptr, i64, i64 }, align 16 + %a1467 = alloca { ptr, i64, i64 }, align 16 + %a1470 = alloca { ptr, i64, i64 }, align 16 + %a1491 = alloca { ptr, i64, i64 }, align 16 + %a1492 = alloca { ptr, i64, i64 }, align 16 + %a1493 = alloca { ptr, i64, i64 }, align 16 + %a1495 = alloca { ptr, i64, i64 }, align 16 + %a1496 = alloca { ptr, i64, i64 }, align 16 + %a1497 = alloca { ptr, i64, i64 }, align 16 + %a1498 = alloca { ptr, i64, i64 }, align 16 + %a1500 = alloca { ptr, i64, i64 }, align 16 + %a1510 = alloca i64, align 16 + %a1521 = alloca { ptr, i64, i64 }, align 16 + %a1522 = alloca { ptr, i64, i64 }, align 16 + %a1523 = alloca { ptr, i64, i64 }, align 16 + %a1525 = alloca { ptr, i64, i64 }, align 16 + %a1526 = alloca { ptr, i64, i64 }, align 16 + %a1527 = alloca { ptr, i64, i64 }, align 16 + %a1528 = alloca { ptr, i64, i64 }, align 16 + %a1530 = alloca { ptr, i64, i64 }, align 16 + %a1543 = alloca i64, align 16 + %a1567 = alloca { ptr, i64, i64 }, align 16 + %a1568 = alloca { ptr, i64, i64 }, align 16 + %a1569 = alloca { ptr, i64, i64 }, align 16 + %a1571 = alloca { ptr, i64, i64 }, align 16 + %a1572 = alloca { ptr, i64, i64 }, align 16 + %a1573 = alloca { ptr, i64, i64 }, align 16 + %a1574 = alloca { ptr, i64, i64 }, align 16 + %a1577 = alloca { ptr, i64, i64 }, align 16 + %a1578 = alloca { ptr, i64, i64 }, align 16 + %a1579 = alloca { ptr, i64, i64 }, align 16 + %a1580 = alloca { ptr, i64, i64 }, align 16 + %a1582 = alloca { ptr, i64, i64 }, align 16 + %a1583 = alloca { ptr, i64, i64 }, align 16 + %a1584 = alloca { ptr, i64, i64 }, align 16 + %a1585 = alloca { ptr, i64, i64 }, align 16 + %a1587 = alloca { ptr, i64, i64 }, align 16 + %a1588 = alloca { ptr, i64, i64 }, align 16 + %a1591 = alloca i64, align 16 + %a1599 = alloca %S.ast.Type, align 16 + %a1620 = alloca %S.ast.Type, align 16 + %a1641 = alloca i64, align 16 + %a1654 = alloca %S.gen.StructDef, align 16 + %a1655 = alloca %S.gen.StructDef, align 16 + %a1657 = alloca %S.gen.StructDef, align 16 + %a1685 = alloca %S.ast.Node, align 16 + %a1686 = alloca %S.ast.Node, align 16 + %a1688 = alloca %S.ast.Node, align 16 + %a1697 = alloca { ptr, i64, i64 }, align 16 + %a1698 = alloca { ptr, i64, i64 }, align 16 + %a1699 = alloca { ptr, i64, i64 }, align 16 + %a1701 = alloca { ptr, i64, i64 }, align 16 + %a1702 = alloca { ptr, i64, i64 }, align 16 + %a1703 = alloca { ptr, i64, i64 }, align 16 + %a1704 = alloca { ptr, i64, i64 }, align 16 + %a1708 = alloca { ptr, i64, i64 }, align 16 + %a1709 = alloca { ptr, i64, i64 }, align 16 + %a1711 = alloca { ptr, i64, i64 }, align 16 + %a1712 = alloca { ptr, i64, i64 }, align 16 + %a1713 = alloca { ptr, i64, i64 }, align 16 + %a1714 = alloca { ptr, i64, i64 }, align 16 + %a1715 = alloca { ptr, i64, i64 }, align 16 + %a1717 = alloca { ptr, i64, i64 }, align 16 + %a1718 = alloca { ptr, i64, i64 }, align 16 + %a1719 = alloca { ptr, i64, i64 }, align 16 + %a1720 = alloca { ptr, i64, i64 }, align 16 + %a1737 = alloca { ptr, i64, i64 }, align 16 + %a1753 = alloca i64, align 16 + %a1765 = alloca { ptr, i64, i64 }, align 16 + %a1775 = alloca { ptr, i64, i64 }, align 16 + %a1778 = alloca { ptr, i64, i64 }, align 16 + %a1779 = alloca { ptr, i64, i64 }, align 16 + %a1806 = alloca { ptr, i64, i64 }, align 16 + %a1807 = alloca { ptr, i64, i64 }, align 16 + %a1808 = alloca { ptr, i64, i64 }, align 16 + %a1810 = alloca { ptr, i64, i64 }, align 16 + %a1811 = alloca { ptr, i64, i64 }, align 16 + %a1812 = alloca { ptr, i64, i64 }, align 16 + %a1813 = alloca { ptr, i64, i64 }, align 16 + %a1815 = alloca { ptr, i64, i64 }, align 16 + %a1819 = alloca { ptr, i64, i64 }, align 16 + %a1820 = alloca { ptr, i64, i64 }, align 16 + %a1821 = alloca { ptr, i64, i64 }, align 16 + %a1823 = alloca { ptr, i64, i64 }, align 16 + %a1824 = alloca { ptr, i64, i64 }, align 16 + %a1825 = alloca { ptr, i64, i64 }, align 16 + %a1826 = alloca { ptr, i64, i64 }, align 16 + %a1830 = alloca { ptr, i64, i64 }, align 16 + %a1831 = alloca { ptr, i64, i64 }, align 16 + %a1832 = alloca { ptr, i64, i64 }, align 16 + %a1833 = alloca { ptr, i64, i64 }, align 16 + %a1834 = alloca { ptr, i64, i64 }, align 16 + %a1836 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %t3 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load ptr, ptr %a1 + %t10 = icmp eq ptr %t9, null + br i1 %t10, label %panic8101, label %ok8102 +panic8101: + call void @finch_panic(ptr @.str.5187, i64 4835, ptr @.str.5188) + unreachable +ok8102: + %t11 = getelementptr inbounds %S.gen.Gen, ptr %t9, i32 0, i32 28 + %t12 = load i1, ptr %t11 + br label %logic.from8103 +logic.from8103: + br i1 %t12, label %logic.rhs8104, label %logic.end8105 +logic.rhs8104: + %t13 = load { ptr, i64, i64 }, ptr %a8 + %t14 = call i1 @finch.gen.isBuiltin({ ptr, i64, i64 } %t13) + br label %logic.rend8106 +logic.rend8106: + br label %logic.end8105 +logic.end8105: + %t15 = phi i1 [ false, %logic.from8103 ], [ %t14, %logic.rend8106 ] + br i1 %t15, label %then8107, label %endif8109 +then8107: + %t16 = call { ptr, i64, i64 } @finch.docs.builtins() + %t17 = load { ptr, i64, i64 }, ptr %a8 + %t18 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t16, { ptr, i64, i64 } %t17) + store { ptr, i64, i64 } %t16, ptr %a19 + call void @finch.drop.arr_S_docs_Doc(ptr %a19) + store %S.docs.Doc %t18, ptr %a20 + %t21 = getelementptr inbounds %S.docs.Doc, ptr %a20, i32 0, i32 0 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = icmp sgt i64 %t23, 0 + br i1 %t24, label %then8113, label %endif8115 +then8113: + %t25 = load ptr, ptr %a1 + %t26 = load %S.ast.Node, ptr %a2 + %t27 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t28 = load i64, ptr %t27 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = load %S.docs.Doc, ptr %a20 + %t32 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t31) + call void @finch.gen.noteRef(ptr %t25, %S.ast.Node %t26, i64 %t28, i64 %t30, { ptr, i64, i64 } %t32, { ptr, i64, i64 } { ptr @.str.5189, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t32, ptr %a33 + call void @finch_str_drop(ptr %a33) + br label %endif8115 +endif8115: + call void @finch.drop.S_docs_Doc(ptr %a20) + br label %endif8109 +endif8109: + %t34 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t34, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.5190, i64 5, i64 0 }, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + br i1 %t38, label %then8116, label %endif8118 +then8116: + %t39 = load ptr, ptr %a1 + %t40 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t39, %S.ast.Node %t40, { ptr, i64, i64 } { ptr @.str.5191, i64 86, i64 0 }) + br label %endif8118 +endif8118: + %t41 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t41, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.5192, i64 5, i64 0 }, ptr %a43 + %t44 = call i32 @finch_str_eq(ptr %a42, ptr %a43) + %t45 = icmp ne i32 %t44, 0 + br i1 %t45, label %then8119, label %endif8121 +then8119: + %t46 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 + %t48 = load i64, ptr %t47 + store i64 0, ptr %a49 + br label %for.cond8122 +for.cond8122: + %t50 = load i64, ptr %a49 + %t51 = icmp slt i64 %t50, %t48 + br i1 %t51, label %for.body8123, label %for.end8125 +for.body8123: + %t52 = load ptr, ptr %a1 + %t53 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t54 = load i64, ptr %a49 + %t55 = load { ptr, i64, i64 }, ptr %t53 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range8126, label %inrange8127 +range8126: + call void @finch_panic_index(ptr @.str.5193, i64 4846, i64 %t54, i64 %t56) + unreachable +inrange8127: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds %S.ast.Node, ptr %t58, i64 %t54 + %t60 = load %S.ast.Node, ptr %t59 + %t61 = call %S.gen.Val @finch.gen.expr(ptr %t52, %S.ast.Node %t60) + store %S.gen.Val %t61, ptr %a62 + %t63 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 1 + %t64 = getelementptr inbounds %S.ast.Type, ptr %t63, i32 0, i32 0 + %t65 = load { ptr, i64, i64 }, ptr %t64 + store { ptr, i64, i64 } %t65, ptr %a66 + store { ptr, i64, i64 } { ptr @.str.5194, i64 4, i64 0 }, ptr %a67 + %t68 = call i32 @finch_str_eq(ptr %a66, ptr %a67) + %t69 = icmp ne i32 %t68, 0 + br i1 %t69, label %then8128, label %endif8130 +then8128: + %t70 = load ptr, ptr %a1 + %t71 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t72 = load i64, ptr %a49 + %t73 = load { ptr, i64, i64 }, ptr %t71 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 %t72, %t74 + br i1 %t75, label %range8131, label %inrange8132 +range8131: + call void @finch_panic_index(ptr @.str.5195, i64 4848, i64 %t72, i64 %t74) + unreachable +inrange8132: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 %t72 + %t78 = load %S.ast.Node, ptr %t77 + call void @finch.gen.fail(ptr %t70, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5196, i64 53, i64 0 }) + br label %endif8130 +endif8130: + %t79 = load i64, ptr %a49 + %t80 = icmp sgt i64 %t79, 0 + br i1 %t80, label %then8133, label %endif8135 +then8133: + %t81 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t81, { ptr, i64, i64 } { ptr @.str.5197, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5198, i64 0, i64 0 }) + br label %endif8135 +endif8135: + %t82 = load ptr, ptr %a1 + %t83 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 0 + %t84 = load { ptr, i64, i64 }, ptr %t83 + %t85 = getelementptr inbounds %S.gen.Val, ptr %a62, i32 0, i32 1 + %t86 = load %S.ast.Type, ptr %t85 + call void @finch.gen.emitPrint(ptr %t82, { ptr, i64, i64 } %t84, %S.ast.Type %t86, i1 false) + %t87 = load ptr, ptr %a1 + %t88 = load %S.gen.Val, ptr %a62 + call void @finch.gen.release(ptr %t87, %S.gen.Val %t88) + call void @finch.drop.S_gen_Val(ptr %a62) + br label %for.step8124 +for.step8124: + %t89 = load i64, ptr %a49 + %t90 = add i64 %t89, 1 + store i64 %t90, ptr %a49 + br label %for.cond8122 +for.end8125: + %t91 = load ptr, ptr %a1 + call void @finch.gen.printf(ptr %t91, { ptr, i64, i64 } { ptr @.str.5199, i64 1, i64 0 }, { ptr, i64, i64 } { ptr @.str.5200, i64 0, i64 0 }) + %t92 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5201, i64 4, i64 0 }) + %t93 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t92, 1 + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t93 +endif8121: + %t94 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t94, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.5202, i64 4, i64 0 }, ptr %a96 + %t97 = call i32 @finch_str_eq(ptr %a95, ptr %a96) + %t98 = icmp ne i32 %t97, 0 + br i1 %t98, label %then8136, label %endif8138 +then8136: + %t99 = load ptr, ptr %a1 + %t100 = load %S.ast.Node, ptr %a2 + %t101 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t99, %S.ast.Node %t100, i64 0, i64 1, { ptr, i64, i64 } %t101) + %t102 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t103 = load { ptr, i64, i64 }, ptr %t102 + %t104 = extractvalue { ptr, i64, i64 } %t103, 1 + %t105 = icmp uge i64 0, %t104 + br i1 %t105, label %range8139, label %inrange8140 +range8139: + call void @finch_panic_index(ptr @.str.5203, i64 4861, i64 0, i64 %t104) + unreachable +inrange8140: + %t106 = extractvalue { ptr, i64, i64 } %t103, 0 + %t107 = getelementptr inbounds %S.ast.Node, ptr %t106, i64 0 + %t108 = load %S.ast.Node, ptr %t107 + store %S.ast.Node %t108, ptr %a109 + call void @finch.copy.S_ast_Node(ptr %a110, ptr %a109) + %t111 = load %S.ast.Node, ptr %a110 + store %S.ast.Node %t111, ptr %a112 + %t113 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t114 = load { ptr, i64, i64 }, ptr %t113 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.5204, i64 3, i64 0 }, ptr %a116 + %t117 = call i32 @finch_str_eq(ptr %a115, ptr %a116) + %t118 = icmp ne i32 %t117, 0 + br label %logic.from8141 +logic.from8141: + br i1 %t118, label %logic.rhs8142, label %logic.end8143 +logic.rhs8142: + %t119 = load ptr, ptr %a1 + %t120 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %t120 + %t122 = call i64 @finch.gen.lookup(ptr %t119, { ptr, i64, i64 } %t121) + %t123 = icmp slt i64 %t122, 0 + br label %logic.rend8144 +logic.rend8144: + br label %logic.end8143 +logic.end8143: + %t124 = phi i1 [ false, %logic.from8141 ], [ %t123, %logic.rend8144 ] + br i1 %t124, label %then8145, label %endif8147 +then8145: + %t125 = load ptr, ptr %a1 + %t126 = load ptr, ptr %a1 + %t127 = icmp eq ptr %t126, null + br i1 %t127, label %panic8148, label %ok8149 +panic8148: + call void @finch_panic(ptr @.str.5205, i64 4863, ptr @.str.5206) + unreachable +ok8149: + %t128 = getelementptr inbounds %S.gen.Gen, ptr %t126, i32 0, i32 14 + %t129 = load { ptr, i64, i64 }, ptr %t128 + %t130 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 1 + %t131 = load { ptr, i64, i64 }, ptr %t130 + %t132 = call i64 @finch.gen.findFn(ptr %t125, { ptr, i64, i64 } %t129, { ptr, i64, i64 } %t131) + store i64 %t132, ptr %a133 + %t134 = load i64, ptr %a133 + %t135 = icmp sge i64 %t134, 0 + br i1 %t135, label %then8150, label %endif8152 +then8150: + %t136 = load ptr, ptr %a1 + %t137 = load i64, ptr %a133 + %t138 = load %S.ast.Node, ptr %a112 + %t139 = call { ptr, i64, i64 } @finch.gen.cThunk(ptr %t136, i64 %t137, %S.ast.Node %t138) + %t140 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t139, 0 + %t141 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5207, i64 3, i64 0 }) + %t142 = insertvalue %S.gen.Val %t140, %S.ast.Type %t141, 1 + call void @finch.drop.S_ast_Node(ptr %a112) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t142 +endif8152: + br label %endif8147 +endif8147: + %t143 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t144 = load { ptr, i64, i64 }, ptr %t143 + store { ptr, i64, i64 } %t144, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.5208, i64 3, i64 0 }, ptr %a146 + %t147 = call i32 @finch_str_eq(ptr %a145, ptr %a146) + %t148 = icmp eq i32 %t147, 0 + br label %logic.from8153 +logic.from8153: + br i1 %t148, label %logic.rhs8154, label %logic.end8155 +logic.rhs8154: + %t149 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.5209, i64 6, i64 0 }, ptr %a152 + %t153 = call i32 @finch_str_eq(ptr %a151, ptr %a152) + %t154 = icmp eq i32 %t153, 0 + br label %logic.rend8156 +logic.rend8156: + br label %logic.end8155 +logic.end8155: + %t155 = phi i1 [ false, %logic.from8153 ], [ %t154, %logic.rend8156 ] + br label %logic.from8157 +logic.from8157: + br i1 %t155, label %logic.rhs8158, label %logic.end8159 +logic.rhs8158: + %t156 = getelementptr inbounds %S.ast.Node, ptr %a112, i32 0, i32 0 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.5210, i64 5, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_eq(ptr %a158, ptr %a159) + %t161 = icmp eq i32 %t160, 0 + br label %logic.rend8160 +logic.rend8160: + br label %logic.end8159 +logic.end8159: + %t162 = phi i1 [ false, %logic.from8157 ], [ %t161, %logic.rend8160 ] + br i1 %t162, label %then8161, label %endif8163 +then8161: + %t163 = load ptr, ptr %a1 + %t164 = load %S.ast.Node, ptr %a112 + call void @finch.gen.fail(ptr %t163, %S.ast.Node %t164, { ptr, i64, i64 } { ptr @.str.5211, i64 63, i64 0 }) + br label %endif8163 +endif8163: + %t165 = load ptr, ptr %a1 + %t166 = load %S.ast.Node, ptr %a112 + %t167 = call %S.gen.Place @finch.gen.place(ptr %t165, %S.ast.Node %t166, i1 true) + store %S.gen.Place %t167, ptr %a168 + %t169 = getelementptr inbounds %S.gen.Place, ptr %a168, i32 0, i32 0 + %t170 = load { ptr, i64, i64 }, ptr %t169 + store { ptr, i64, i64 } %t170, ptr %a171 + call void @finch_str_copy(ptr %a172, ptr %a171) + %t173 = load { ptr, i64, i64 }, ptr %a172 + %t174 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t173, 0 + %t175 = getelementptr inbounds %S.gen.Place, ptr %a168, i32 0, i32 1 + %t176 = load %S.ast.Type, ptr %t175 + %t177 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t176) + %t178 = insertvalue %S.gen.Val %t174, %S.ast.Type %t177, 1 + call void @finch.drop.S_gen_Place(ptr %a168) + call void @finch.drop.S_ast_Node(ptr %a112) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t178 +endif8138: + %t179 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t179, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5212, i64 3, i64 0 }, ptr %a181 + %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + br i1 %t183, label %then8164, label %endif8166 +then8164: + %t184 = load ptr, ptr %a1 + %t185 = load %S.ast.Node, ptr %a2 + %t186 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t184, %S.ast.Node %t185, i64 0, i64 1, { ptr, i64, i64 } %t186) + %t187 = load ptr, ptr %a1 + %t188 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t189 = load { ptr, i64, i64 }, ptr %t188 + %t190 = extractvalue { ptr, i64, i64 } %t189, 1 + %t191 = icmp uge i64 0, %t190 + br i1 %t191, label %range8167, label %inrange8168 +range8167: + call void @finch_panic_index(ptr @.str.5213, i64 4876, i64 0, i64 %t190) + unreachable +inrange8168: + %t192 = extractvalue { ptr, i64, i64 } %t189, 0 + %t193 = getelementptr inbounds %S.ast.Node, ptr %t192, i64 0 + %t194 = load %S.ast.Node, ptr %t193 + %t195 = call %S.gen.Val @finch.gen.expr(ptr %t187, %S.ast.Node %t194) + store %S.gen.Val %t195, ptr %a196 + %t197 = load ptr, ptr %a1 + %t198 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t197) + store { ptr, i64, i64 } %t198, ptr %a199 + %t200 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t201 = getelementptr inbounds %S.ast.Type, ptr %t200, i32 0, i32 0 + %t202 = load { ptr, i64, i64 }, ptr %t201 + store { ptr, i64, i64 } %t202, ptr %a203 + call void @finch_str_copy(ptr %a204, ptr %a203) + %t205 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t205, ptr %a206 + store i1 false, ptr %a207 + %t208 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.5214, i64 3, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br i1 %t212, label %then8169, label %else8170 +then8169: + %t213 = load ptr, ptr %a1 + %t214 = load %S.gen.Val, ptr %a196 + %t215 = call { ptr, i64, i64 } @finch.gen.own(ptr %t213, %S.gen.Val %t214) + %t216 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t215, 0 + %t217 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t218 = load %S.ast.Type, ptr %t217 + store %S.ast.Type %t218, ptr %a219 + call void @finch.copy.S_ast_Type(ptr %a220, ptr %a219) + %t221 = load %S.ast.Type, ptr %a220 + %t222 = insertvalue %S.gen.Val %t216, %S.ast.Type %t221, 1 + %t223 = insertvalue %S.gen.Val %t222, i1 true, 2 + call void @finch_str_drop(ptr %a206) + call void @finch_str_drop(ptr %a199) + call void @finch.drop.S_gen_Val(ptr %a196) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t223 +else8170: + %t224 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t225 = load %S.ast.Type, ptr %t224 + %t226 = call i1 @finch.gen.isSigned(%S.ast.Type %t225) + br i1 %t226, label %then8172, label %else8173 +then8172: + %t227 = load ptr, ptr %a1 + %t228 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5215, i64 34, i64 0 }, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t232, ptr %a234 + store { ptr, i64, i64 } { ptr @.str.5216, i64 6, i64 0 }, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + store { ptr, i64, i64 } %t232, ptr %a236 + call void @finch_str_drop(ptr %a236) + %t237 = load { ptr, i64, i64 }, ptr %a233 + %t238 = load ptr, ptr %a1 + %t239 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t242 = load %S.ast.Type, ptr %t241 + %t243 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5217, i64 3, i64 0 }) + %t244 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t238, { ptr, i64, i64 } %t240, %S.ast.Type %t242, %S.ast.Type %t243) + store %S.ast.Type %t243, ptr %a245 + call void @finch.drop.S_ast_Type(ptr %a245) + store { ptr, i64, i64 } %t237, ptr %a247 + store { ptr, i64, i64 } %t244, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t237, ptr %a249 + call void @finch_str_drop(ptr %a249) + store { ptr, i64, i64 } %t244, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.5218, i64 1, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + call void @finch.gen.emit(ptr %t227, { ptr, i64, i64 } %t256) + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch_str_drop(ptr %a257) + br label %endif8174 +else8173: + %t258 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t259 = load %S.ast.Type, ptr %t258 + %t260 = call i1 @finch.gen.isUnsigned(%S.ast.Type %t259) + br i1 %t260, label %then8175, label %else8176 +then8175: + %t261 = load ptr, ptr %a1 + %t262 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5219, i64 35, i64 0 }, ptr %a264 + store { ptr, i64, i64 } %t262, ptr %a265 + call void @finch_str_concat(ptr %a263, ptr %a264, ptr %a265) + %t266 = load { ptr, i64, i64 }, ptr %a263 + store { ptr, i64, i64 } %t266, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.5220, i64 6, i64 0 }, ptr %a269 + call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) + store { ptr, i64, i64 } %t266, ptr %a270 + call void @finch_str_drop(ptr %a270) + %t271 = load { ptr, i64, i64 }, ptr %a267 + %t272 = load ptr, ptr %a1 + %t273 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t274 = load { ptr, i64, i64 }, ptr %t273 + %t275 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t276 = load %S.ast.Type, ptr %t275 + %t277 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5221, i64 3, i64 0 }) + %t278 = call { ptr, i64, i64 } @finch.gen.intCast(ptr %t272, { ptr, i64, i64 } %t274, %S.ast.Type %t276, %S.ast.Type %t277) + store %S.ast.Type %t277, ptr %a279 + call void @finch.drop.S_ast_Type(ptr %a279) + store { ptr, i64, i64 } %t271, ptr %a281 + store { ptr, i64, i64 } %t278, ptr %a282 + call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) + store { ptr, i64, i64 } %t271, ptr %a283 + call void @finch_str_drop(ptr %a283) + store { ptr, i64, i64 } %t278, ptr %a284 + call void @finch_str_drop(ptr %a284) + %t285 = load { ptr, i64, i64 }, ptr %a280 + store { ptr, i64, i64 } %t285, ptr %a287 + store { ptr, i64, i64 } { ptr @.str.5222, i64 1, i64 0 }, ptr %a288 + call void @finch_str_concat(ptr %a286, ptr %a287, ptr %a288) + store { ptr, i64, i64 } %t285, ptr %a289 + call void @finch_str_drop(ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a286 + call void @finch.gen.emit(ptr %t261, { ptr, i64, i64 } %t290) + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + br label %endif8177 +else8176: + %t292 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t293 = load %S.ast.Type, ptr %t292 + %t294 = call i1 @finch.gen.isFloat(%S.ast.Type %t293) + br i1 %t294, label %then8178, label %else8179 +then8178: + %t295 = load ptr, ptr %a1 + %t296 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5223, i64 36, i64 0 }, ptr %a298 + store { ptr, i64, i64 } %t296, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } %t300, ptr %a302 + store { ptr, i64, i64 } { ptr @.str.5224, i64 9, i64 0 }, ptr %a303 + call void @finch_str_concat(ptr %a301, ptr %a302, ptr %a303) + store { ptr, i64, i64 } %t300, ptr %a304 + call void @finch_str_drop(ptr %a304) + %t305 = load { ptr, i64, i64 }, ptr %a301 + %t306 = load ptr, ptr %a1 + %t307 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t308 = load { ptr, i64, i64 }, ptr %t307 + %t309 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t310 = load %S.ast.Type, ptr %t309 + %t311 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5225, i64 5, i64 0 }) + %t312 = call { ptr, i64, i64 } @finch.gen.floatCast(ptr %t306, { ptr, i64, i64 } %t308, %S.ast.Type %t310, %S.ast.Type %t311) + store %S.ast.Type %t311, ptr %a313 + call void @finch.drop.S_ast_Type(ptr %a313) + store { ptr, i64, i64 } %t305, ptr %a315 + store { ptr, i64, i64 } %t312, ptr %a316 + call void @finch_str_concat(ptr %a314, ptr %a315, ptr %a316) + store { ptr, i64, i64 } %t305, ptr %a317 + call void @finch_str_drop(ptr %a317) + store { ptr, i64, i64 } %t312, ptr %a318 + call void @finch_str_drop(ptr %a318) + %t319 = load { ptr, i64, i64 }, ptr %a314 + store { ptr, i64, i64 } %t319, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.5226, i64 1, i64 0 }, ptr %a322 + call void @finch_str_concat(ptr %a320, ptr %a321, ptr %a322) + store { ptr, i64, i64 } %t319, ptr %a323 + call void @finch_str_drop(ptr %a323) + %t324 = load { ptr, i64, i64 }, ptr %a320 + call void @finch.gen.emit(ptr %t295, { ptr, i64, i64 } %t324) + store { ptr, i64, i64 } %t324, ptr %a325 + call void @finch_str_drop(ptr %a325) + br label %endif8180 +else8179: + %t326 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t326, ptr %a327 + store { ptr, i64, i64 } { ptr @.str.5227, i64 4, i64 0 }, ptr %a328 + %t329 = call i32 @finch_str_eq(ptr %a327, ptr %a328) + %t330 = icmp ne i32 %t329, 0 + br i1 %t330, label %then8181, label %else8182 +then8181: + %t331 = load ptr, ptr %a1 + %t332 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5228, i64 35, i64 0 }, ptr %a334 + store { ptr, i64, i64 } %t332, ptr %a335 + call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) + %t336 = load { ptr, i64, i64 }, ptr %a333 + store { ptr, i64, i64 } %t336, ptr %a338 + store { ptr, i64, i64 } { ptr @.str.5229, i64 13, i64 0 }, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t336, ptr %a340 + call void @finch_str_drop(ptr %a340) + %t341 = load { ptr, i64, i64 }, ptr %a337 + %t342 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t343 = load { ptr, i64, i64 }, ptr %t342 + store { ptr, i64, i64 } %t341, ptr %a345 + store { ptr, i64, i64 } %t343, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t341, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = load { ptr, i64, i64 }, ptr %a344 + store { ptr, i64, i64 } %t348, ptr %a350 + store { ptr, i64, i64 } { ptr @.str.5230, i64 1, i64 0 }, ptr %a351 + call void @finch_str_concat(ptr %a349, ptr %a350, ptr %a351) + store { ptr, i64, i64 } %t348, ptr %a352 + call void @finch_str_drop(ptr %a352) + %t353 = load { ptr, i64, i64 }, ptr %a349 + call void @finch.gen.emit(ptr %t331, { ptr, i64, i64 } %t353) + store { ptr, i64, i64 } %t353, ptr %a354 + call void @finch_str_drop(ptr %a354) + br label %endif8183 +else8182: + %t355 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t355, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.5231, i64 4, i64 0 }, ptr %a357 + %t358 = call i32 @finch_str_eq(ptr %a356, ptr %a357) + %t359 = icmp ne i32 %t358, 0 + br i1 %t359, label %then8184, label %else8185 +then8184: + %t360 = load ptr, ptr %a1 + %t361 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t362 = load { ptr, i64, i64 }, ptr %t361 + store { ptr, i64, i64 } { ptr @.str.5232, i64 8, i64 0 }, ptr %a364 + store { ptr, i64, i64 } %t362, ptr %a365 + call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) + %t366 = load { ptr, i64, i64 }, ptr %a363 + store { ptr, i64, i64 } %t366, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.5233, i64 7, i64 0 }, ptr %a369 + call void @finch_str_concat(ptr %a367, ptr %a368, ptr %a369) + store { ptr, i64, i64 } %t366, ptr %a370 + call void @finch_str_drop(ptr %a370) + %t371 = load { ptr, i64, i64 }, ptr %a367 + %t372 = call { ptr, i64, i64 } @finch.gen.op(ptr %t360, { ptr, i64, i64 } %t371) + store { ptr, i64, i64 } %t371, ptr %a373 + call void @finch_str_drop(ptr %a373) + store { ptr, i64, i64 } %t372, ptr %a374 + %t375 = load ptr, ptr %a1 + %t376 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5234, i64 35, i64 0 }, ptr %a378 + store { ptr, i64, i64 } %t376, ptr %a379 + call void @finch_str_concat(ptr %a377, ptr %a378, ptr %a379) + %t380 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t380, ptr %a382 + store { ptr, i64, i64 } { ptr @.str.5235, i64 6, i64 0 }, ptr %a383 + call void @finch_str_concat(ptr %a381, ptr %a382, ptr %a383) + store { ptr, i64, i64 } %t380, ptr %a384 + call void @finch_str_drop(ptr %a384) + %t385 = load { ptr, i64, i64 }, ptr %a381 + %t386 = load { ptr, i64, i64 }, ptr %a374 + store { ptr, i64, i64 } %t385, ptr %a388 + store { ptr, i64, i64 } %t386, ptr %a389 + call void @finch_str_concat(ptr %a387, ptr %a388, ptr %a389) + store { ptr, i64, i64 } %t385, ptr %a390 + call void @finch_str_drop(ptr %a390) + %t391 = load { ptr, i64, i64 }, ptr %a387 + store { ptr, i64, i64 } %t391, ptr %a393 + store { ptr, i64, i64 } { ptr @.str.5236, i64 1, i64 0 }, ptr %a394 + call void @finch_str_concat(ptr %a392, ptr %a393, ptr %a394) + store { ptr, i64, i64 } %t391, ptr %a395 + call void @finch_str_drop(ptr %a395) + %t396 = load { ptr, i64, i64 }, ptr %a392 + call void @finch.gen.emit(ptr %t375, { ptr, i64, i64 } %t396) + store { ptr, i64, i64 } %t396, ptr %a397 + call void @finch_str_drop(ptr %a397) + call void @finch_str_drop(ptr %a374) + br label %endif8186 +else8185: + %t398 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t398, ptr %a399 + store { ptr, i64, i64 } { ptr @.str.5237, i64 3, i64 0 }, ptr %a400 + %t401 = call i32 @finch_str_eq(ptr %a399, ptr %a400) + %t402 = icmp ne i32 %t401, 0 + br i1 %t402, label %then8187, label %else8188 +then8187: + %t403 = load ptr, ptr %a1 + %t404 = load { ptr, i64, i64 }, ptr %a199 + call void @finch.gen.store(ptr %t403, { ptr, i64, i64 } { ptr @.str.5238, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5239, i64 15, i64 0 }, { ptr, i64, i64 } %t404) + %t405 = load ptr, ptr %a1 + %t406 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5240, i64 32, i64 0 }, ptr %a408 + store { ptr, i64, i64 } %t406, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + %t410 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t410, ptr %a412 + store { ptr, i64, i64 } { ptr @.str.5241, i64 6, i64 0 }, ptr %a413 + call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) + store { ptr, i64, i64 } %t410, ptr %a414 + call void @finch_str_drop(ptr %a414) + %t415 = load { ptr, i64, i64 }, ptr %a411 + %t416 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t417 = load { ptr, i64, i64 }, ptr %t416 + store { ptr, i64, i64 } %t415, ptr %a419 + store { ptr, i64, i64 } %t417, ptr %a420 + call void @finch_str_concat(ptr %a418, ptr %a419, ptr %a420) + store { ptr, i64, i64 } %t415, ptr %a421 + call void @finch_str_drop(ptr %a421) + %t422 = load { ptr, i64, i64 }, ptr %a418 + store { ptr, i64, i64 } %t422, ptr %a424 + store { ptr, i64, i64 } { ptr @.str.5242, i64 1, i64 0 }, ptr %a425 + call void @finch_str_concat(ptr %a423, ptr %a424, ptr %a425) + store { ptr, i64, i64 } %t422, ptr %a426 + call void @finch_str_drop(ptr %a426) + %t427 = load { ptr, i64, i64 }, ptr %a423 + call void @finch.gen.emit(ptr %t405, { ptr, i64, i64 } %t427) + store { ptr, i64, i64 } %t427, ptr %a428 + call void @finch_str_drop(ptr %a428) + store i1 true, ptr %a207 + br label %endif8189 +else8188: + %t429 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t429, ptr %a430 + store { ptr, i64, i64 } { ptr @.str.5243, i64 5, i64 0 }, ptr %a431 + %t432 = call i32 @finch_str_eq(ptr %a430, ptr %a431) + %t433 = icmp ne i32 %t432, 0 + br label %logic.from8190 +logic.from8190: + br i1 %t433, label %logic.rhs8191, label %logic.end8192 +logic.rhs8191: + %t434 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t435 = getelementptr inbounds %S.ast.Type, ptr %t434, i32 0, i32 1 + %t436 = load { ptr, i64, i64 }, ptr %t435 + %t437 = extractvalue { ptr, i64, i64 } %t436, 1 + %t438 = icmp uge i64 0, %t437 + br i1 %t438, label %range8193, label %inrange8194 +range8193: + call void @finch_panic_index(ptr @.str.5244, i64 4898, i64 0, i64 %t437) + unreachable +inrange8194: + %t439 = extractvalue { ptr, i64, i64 } %t436, 0 + %t440 = getelementptr inbounds %S.ast.Type, ptr %t439, i64 0 + %t441 = getelementptr inbounds %S.ast.Type, ptr %t440, i32 0, i32 0 + %t442 = load { ptr, i64, i64 }, ptr %t441 + store { ptr, i64, i64 } %t442, ptr %a443 + store { ptr, i64, i64 } { ptr @.str.5245, i64 2, i64 0 }, ptr %a444 + %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) + %t446 = icmp ne i32 %t445, 0 + br label %logic.from8195 +logic.from8195: + br i1 %t446, label %logic.end8197, label %logic.rhs8196 +logic.rhs8196: + %t447 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t448 = getelementptr inbounds %S.ast.Type, ptr %t447, i32 0, i32 1 + %t449 = load { ptr, i64, i64 }, ptr %t448 + %t450 = extractvalue { ptr, i64, i64 } %t449, 1 + %t451 = icmp uge i64 0, %t450 + br i1 %t451, label %range8198, label %inrange8199 +range8198: + call void @finch_panic_index(ptr @.str.5246, i64 4898, i64 0, i64 %t450) + unreachable +inrange8199: + %t452 = extractvalue { ptr, i64, i64 } %t449, 0 + %t453 = getelementptr inbounds %S.ast.Type, ptr %t452, i64 0 + %t454 = getelementptr inbounds %S.ast.Type, ptr %t453, i32 0, i32 0 + %t455 = load { ptr, i64, i64 }, ptr %t454 + store { ptr, i64, i64 } %t455, ptr %a456 + store { ptr, i64, i64 } { ptr @.str.5247, i64 4, i64 0 }, ptr %a457 + %t458 = call i32 @finch_str_eq(ptr %a456, ptr %a457) + %t459 = icmp ne i32 %t458, 0 + br label %logic.rend8200 +logic.rend8200: + br label %logic.end8197 +logic.end8197: + %t460 = phi i1 [ true, %logic.from8195 ], [ %t459, %logic.rend8200 ] + br label %logic.rend8201 +logic.rend8201: + br label %logic.end8192 +logic.end8192: + %t461 = phi i1 [ false, %logic.from8190 ], [ %t460, %logic.rend8201 ] + br i1 %t461, label %then8202, label %else8203 +then8202: + %t462 = load ptr, ptr %a1 + %t463 = load { ptr, i64, i64 }, ptr %a199 + call void @finch.gen.store(ptr %t462, { ptr, i64, i64 } { ptr @.str.5248, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5249, i64 15, i64 0 }, { ptr, i64, i64 } %t463) + %t464 = load ptr, ptr %a1 + %t465 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } { ptr @.str.5250, i64 36, i64 0 }, ptr %a467 + store { ptr, i64, i64 } %t465, ptr %a468 + call void @finch_str_concat(ptr %a466, ptr %a467, ptr %a468) + %t469 = load { ptr, i64, i64 }, ptr %a466 + store { ptr, i64, i64 } %t469, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.5251, i64 6, i64 0 }, ptr %a472 + call void @finch_str_concat(ptr %a470, ptr %a471, ptr %a472) + store { ptr, i64, i64 } %t469, ptr %a473 + call void @finch_str_drop(ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a470 + %t475 = load ptr, ptr %a1 + %t476 = load %S.gen.Val, ptr %a196 + %t477 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t475, %S.gen.Val %t476) + store { ptr, i64, i64 } %t474, ptr %a479 + store { ptr, i64, i64 } %t477, ptr %a480 + call void @finch_str_concat(ptr %a478, ptr %a479, ptr %a480) + store { ptr, i64, i64 } %t474, ptr %a481 + call void @finch_str_drop(ptr %a481) + store { ptr, i64, i64 } %t477, ptr %a482 + call void @finch_str_drop(ptr %a482) + %t483 = load { ptr, i64, i64 }, ptr %a478 + store { ptr, i64, i64 } %t483, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.5252, i64 1, i64 0 }, ptr %a486 + call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) + store { ptr, i64, i64 } %t483, ptr %a487 + call void @finch_str_drop(ptr %a487) + %t488 = load { ptr, i64, i64 }, ptr %a484 + call void @finch.gen.emit(ptr %t464, { ptr, i64, i64 } %t488) + store { ptr, i64, i64 } %t488, ptr %a489 + call void @finch_str_drop(ptr %a489) + %t490 = load ptr, ptr %a1 + %t491 = load %S.gen.Val, ptr %a196 + call void @finch.gen.release(ptr %t490, %S.gen.Val %t491) + br label %endif8204 +else8203: + %t492 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t492, ptr %a493 + store { ptr, i64, i64 } { ptr @.str.5253, i64 4, i64 0 }, ptr %a494 + %t495 = call i32 @finch_str_eq(ptr %a493, ptr %a494) + %t496 = icmp ne i32 %t495, 0 + br label %logic.from8205 +logic.from8205: + br i1 %t496, label %logic.end8207, label %logic.rhs8206 +logic.rhs8206: + %t497 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t497, ptr %a498 + store { ptr, i64, i64 } { ptr @.str.5254, i64 4, i64 0 }, ptr %a499 + %t500 = call i32 @finch_str_eq(ptr %a498, ptr %a499) + %t501 = icmp ne i32 %t500, 0 + br label %logic.rend8208 +logic.rend8208: + br label %logic.end8207 +logic.end8207: + %t502 = phi i1 [ true, %logic.from8205 ], [ %t501, %logic.rend8208 ] + br label %logic.from8209 +logic.from8209: + br i1 %t502, label %logic.end8211, label %logic.rhs8210 +logic.rhs8210: + %t503 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t503, ptr %a504 + store { ptr, i64, i64 } { ptr @.str.5255, i64 5, i64 0 }, ptr %a505 + %t506 = call i32 @finch_str_eq(ptr %a504, ptr %a505) + %t507 = icmp ne i32 %t506, 0 + br label %logic.rend8212 +logic.rend8212: + br label %logic.end8211 +logic.end8211: + %t508 = phi i1 [ true, %logic.from8209 ], [ %t507, %logic.rend8212 ] + br label %logic.from8213 +logic.from8213: + br i1 %t508, label %logic.end8215, label %logic.rhs8214 +logic.rhs8214: + %t509 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t509, ptr %a510 + store { ptr, i64, i64 } { ptr @.str.5256, i64 3, i64 0 }, ptr %a511 + %t512 = call i32 @finch_str_eq(ptr %a510, ptr %a511) + %t513 = icmp ne i32 %t512, 0 + br label %logic.rend8216 +logic.rend8216: + br label %logic.end8215 +logic.end8215: + %t514 = phi i1 [ true, %logic.from8213 ], [ %t513, %logic.rend8216 ] + br label %logic.from8217 +logic.from8217: + br i1 %t514, label %logic.end8219, label %logic.rhs8218 +logic.rhs8218: + %t515 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t515, ptr %a516 + store { ptr, i64, i64 } { ptr @.str.5257, i64 6, i64 0 }, ptr %a517 + %t518 = call i32 @finch_str_eq(ptr %a516, ptr %a517) + %t519 = icmp ne i32 %t518, 0 + br label %logic.rend8220 +logic.rend8220: + br label %logic.end8219 +logic.end8219: + %t520 = phi i1 [ true, %logic.from8217 ], [ %t519, %logic.rend8220 ] + br label %logic.from8221 +logic.from8221: + br i1 %t520, label %logic.end8223, label %logic.rhs8222 +logic.rhs8222: + %t521 = load { ptr, i64, i64 }, ptr %a206 + store { ptr, i64, i64 } %t521, ptr %a522 + store { ptr, i64, i64 } { ptr @.str.5258, i64 4, i64 0 }, ptr %a523 + %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) + %t525 = icmp ne i32 %t524, 0 + br label %logic.rend8224 +logic.rend8224: + br label %logic.end8223 +logic.end8223: + %t526 = phi i1 [ true, %logic.from8221 ], [ %t525, %logic.rend8224 ] + br i1 %t526, label %then8225, label %else8226 +then8225: + %t527 = load ptr, ptr %a1 + %t528 = load { ptr, i64, i64 }, ptr %a199 + call void @finch.gen.store(ptr %t527, { ptr, i64, i64 } { ptr @.str.5259, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5260, i64 15, i64 0 }, { ptr, i64, i64 } %t528) + %t529 = load ptr, ptr %a1 + %t530 = load { ptr, i64, i64 }, ptr %a199 + %t531 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 0 + %t532 = load { ptr, i64, i64 }, ptr %t531 + %t533 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t534 = load %S.ast.Type, ptr %t533 + call void @finch.gen.emitFormat(ptr %t529, { ptr, i64, i64 } %t530, { ptr, i64, i64 } %t532, %S.ast.Type %t534, i1 false) + %t535 = load ptr, ptr %a1 + %t536 = load %S.gen.Val, ptr %a196 + call void @finch.gen.release(ptr %t535, %S.gen.Val %t536) + br label %endif8227 +else8226: + %t537 = load ptr, ptr %a1 + %t538 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t539 = load { ptr, i64, i64 }, ptr %t538 + %t540 = extractvalue { ptr, i64, i64 } %t539, 1 + %t541 = icmp uge i64 0, %t540 + br i1 %t541, label %range8228, label %inrange8229 +range8228: + call void @finch_panic_index(ptr @.str.5261, i64 4908, i64 0, i64 %t540) + unreachable +inrange8229: + %t542 = extractvalue { ptr, i64, i64 } %t539, 0 + %t543 = getelementptr inbounds %S.ast.Node, ptr %t542, i64 0 + %t544 = load %S.ast.Node, ptr %t543 + %t545 = getelementptr inbounds %S.gen.Val, ptr %a196, i32 0, i32 1 + %t546 = load %S.ast.Type, ptr %t545 + %t547 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t546) + store { ptr, i64, i64 } { ptr @.str.5262, i64 11, i64 0 }, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + store { ptr, i64, i64 } %t547, ptr %a551 + call void @finch_str_drop(ptr %a551) + %t552 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t552, ptr %a554 + store { ptr, i64, i64 } { ptr @.str.5263, i64 9, i64 0 }, ptr %a555 + call void @finch_str_concat(ptr %a553, ptr %a554, ptr %a555) + store { ptr, i64, i64 } %t552, ptr %a556 + call void @finch_str_drop(ptr %a556) + %t557 = load { ptr, i64, i64 }, ptr %a553 + call void @finch.gen.fail(ptr %t537, %S.ast.Node %t544, { ptr, i64, i64 } %t557) + store { ptr, i64, i64 } %t557, ptr %a558 + call void @finch_str_drop(ptr %a558) + br label %endif8227 +endif8227: + br label %endif8204 +endif8204: + br label %endif8189 +endif8189: + br label %endif8186 +endif8186: + br label %endif8183 +endif8183: + br label %endif8180 +endif8180: + br label %endif8177 +endif8177: + br label %endif8174 +endif8174: + br label %endif8171 +endif8171: + %t559 = load ptr, ptr %a1 + %t560 = load { ptr, i64, i64 }, ptr %a199 + %t561 = call { ptr, i64, i64 } @finch.gen.load(ptr %t559, { ptr, i64, i64 } { ptr @.str.5264, i64 17, i64 0 }, { ptr, i64, i64 } %t560) + %t562 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t561, 0 + %t563 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5265, i64 3, i64 0 }) + %t564 = insertvalue %S.gen.Val %t562, %S.ast.Type %t563, 1 + %t565 = load i1, ptr %a207 + %t566 = xor i1 %t565, true + %t567 = insertvalue %S.gen.Val %t564, i1 %t566, 2 + call void @finch_str_drop(ptr %a206) + call void @finch_str_drop(ptr %a199) + call void @finch.drop.S_gen_Val(ptr %a196) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t567 +endif8166: + %t568 = load { ptr, i64, i64 }, ptr %a8 + %t569 = call { ptr, i64, i64 } @finch.gen.numType({ ptr, i64, i64 } %t568) + store { ptr, i64, i64 } %t569, ptr %a570 + %t571 = getelementptr inbounds { ptr, i64, i64 }, ptr %a570, i32 0, i32 1 + %t572 = load i64, ptr %t571 + %t573 = icmp sgt i64 %t572, 0 + br i1 %t573, label %then8230, label %endif8232 +then8230: + %t574 = load ptr, ptr %a1 + %t575 = load %S.ast.Node, ptr %a2 + %t576 = load { ptr, i64, i64 }, ptr %a570 + %t577 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } %t576) + %t578 = call %S.gen.Val @finch.gen.convert(ptr %t574, %S.ast.Node %t575, %S.ast.Type %t577) + store %S.ast.Type %t577, ptr %a579 + call void @finch.drop.S_ast_Type(ptr %a579) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t578 +endif8232: + %t580 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t580, ptr %a581 + store { ptr, i64, i64 } { ptr @.str.5266, i64 9, i64 0 }, ptr %a582 + %t583 = call i32 @finch_str_eq(ptr %a581, ptr %a582) + %t584 = icmp ne i32 %t583, 0 + br label %logic.from8233 +logic.from8233: + br i1 %t584, label %logic.end8235, label %logic.rhs8234 +logic.rhs8234: + %t585 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t585, ptr %a586 + store { ptr, i64, i64 } { ptr @.str.5267, i64 11, i64 0 }, ptr %a587 + %t588 = call i32 @finch_str_eq(ptr %a586, ptr %a587) + %t589 = icmp ne i32 %t588, 0 + br label %logic.rend8236 +logic.rend8236: + br label %logic.end8235 +logic.end8235: + %t590 = phi i1 [ true, %logic.from8233 ], [ %t589, %logic.rend8236 ] + br i1 %t590, label %then8237, label %endif8239 +then8237: + %t591 = load ptr, ptr %a1 + %t592 = load %S.ast.Node, ptr %a2 + %t593 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t591, %S.ast.Node %t592, i64 0, i64 1, { ptr, i64, i64 } %t593) + %t594 = load ptr, ptr %a1 + %t595 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t596 = load { ptr, i64, i64 }, ptr %t595 + %t597 = extractvalue { ptr, i64, i64 } %t596, 1 + %t598 = icmp uge i64 0, %t597 + br i1 %t598, label %range8240, label %inrange8241 +range8240: + call void @finch_panic_index(ptr @.str.5268, i64 4918, i64 0, i64 %t597) + unreachable +inrange8241: + %t599 = extractvalue { ptr, i64, i64 } %t596, 0 + %t600 = getelementptr inbounds %S.ast.Node, ptr %t599, i64 0 + %t601 = load %S.ast.Node, ptr %t600 + %t602 = call %S.gen.Val @finch.gen.strArg(ptr %t594, %S.ast.Node %t601, { ptr, i64, i64 } { ptr @.str.5269, i64 13, i64 0 }) + store %S.gen.Val %t602, ptr %a603 + %t604 = load ptr, ptr %a1 + %t605 = load %S.gen.Val, ptr %a603 + %t606 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t604, %S.gen.Val %t605) + store { ptr, i64, i64 } %t606, ptr %a607 + %t608 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t608, ptr %a609 + store { ptr, i64, i64 } { ptr @.str.5270, i64 11, i64 0 }, ptr %a610 + %t611 = call i32 @finch_str_eq(ptr %a609, ptr %a610) + %t612 = icmp ne i32 %t611, 0 + br i1 %t612, label %then8242, label %endif8244 +then8242: + %t613 = load ptr, ptr %a1 + %t614 = load { ptr, i64, i64 }, ptr %a607 + store { ptr, i64, i64 } { ptr @.str.5271, i64 32, i64 0 }, ptr %a616 + store { ptr, i64, i64 } %t614, ptr %a617 + call void @finch_str_concat(ptr %a615, ptr %a616, ptr %a617) + %t618 = load { ptr, i64, i64 }, ptr %a615 + store { ptr, i64, i64 } %t618, ptr %a620 + store { ptr, i64, i64 } { ptr @.str.5272, i64 1, i64 0 }, ptr %a621 + call void @finch_str_concat(ptr %a619, ptr %a620, ptr %a621) + store { ptr, i64, i64 } %t618, ptr %a622 + call void @finch_str_drop(ptr %a622) + %t623 = load { ptr, i64, i64 }, ptr %a619 + %t624 = call { ptr, i64, i64 } @finch.gen.op(ptr %t613, { ptr, i64, i64 } %t623) + store { ptr, i64, i64 } %t623, ptr %a625 + call void @finch_str_drop(ptr %a625) + store { ptr, i64, i64 } %t624, ptr %a626 + %t627 = load ptr, ptr %a1 + %t628 = load %S.gen.Val, ptr %a603 + call void @finch.gen.release(ptr %t627, %S.gen.Val %t628) + %t629 = load ptr, ptr %a1 + %t630 = load { ptr, i64, i64 }, ptr %a626 + store { ptr, i64, i64 } { ptr @.str.5273, i64 12, i64 0 }, ptr %a632 + store { ptr, i64, i64 } %t630, ptr %a633 + call void @finch_str_concat(ptr %a631, ptr %a632, ptr %a633) + %t634 = load { ptr, i64, i64 }, ptr %a631 + store { ptr, i64, i64 } %t634, ptr %a636 + store { ptr, i64, i64 } { ptr @.str.5274, i64 3, i64 0 }, ptr %a637 + call void @finch_str_concat(ptr %a635, ptr %a636, ptr %a637) + store { ptr, i64, i64 } %t634, ptr %a638 + call void @finch_str_drop(ptr %a638) + %t639 = load { ptr, i64, i64 }, ptr %a635 + %t640 = call { ptr, i64, i64 } @finch.gen.op(ptr %t629, { ptr, i64, i64 } %t639) + store { ptr, i64, i64 } %t639, ptr %a641 + call void @finch_str_drop(ptr %a641) + %t642 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t640, 0 + %t643 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5275, i64 4, i64 0 }) + %t644 = insertvalue %S.gen.Val %t642, %S.ast.Type %t643, 1 + call void @finch_str_drop(ptr %a626) + call void @finch_str_drop(ptr %a607) + call void @finch.drop.S_gen_Val(ptr %a603) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t644 +endif8244: + %t645 = load ptr, ptr %a1 + %t646 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t645) + store { ptr, i64, i64 } %t646, ptr %a647 + %t648 = load ptr, ptr %a1 + %t649 = icmp eq ptr %t648, null + br i1 %t649, label %panic8245, label %ok8246 +panic8245: + call void @finch_panic(ptr @.str.5276, i64 4926, ptr @.str.5277) + unreachable +ok8246: + %t650 = getelementptr inbounds %S.gen.Gen, ptr %t648, i32 0, i32 41 + %t651 = load { ptr, i64, i64 }, ptr %t650 + %t652 = load %S.ast.Node, ptr %a2 + %t653 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t652) + store { ptr, i64, i64 } %t651, ptr %a654 + store { ptr, i64, i64 } %t653, ptr %a655 + %t656 = call i32 @finch_str_eq(ptr %a654, ptr %a655) + %t657 = icmp ne i32 %t656, 0 + store { ptr, i64, i64 } %t653, ptr %a658 + call void @finch_str_drop(ptr %a658) + br i1 %t657, label %then8247, label %endif8249 +then8247: + %t659 = load ptr, ptr %a1 + %t660 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t659, { ptr, i64, i64 } { ptr @.str.5278, i64 17, i64 0 }) + store { ptr, i64, i64 } %t660, ptr %a661 + %t662 = load ptr, ptr %a1 + %t663 = load { ptr, i64, i64 }, ptr %a647 + call void @finch.gen.store(ptr %t662, { ptr, i64, i64 } { ptr @.str.5279, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5280, i64 15, i64 0 }, { ptr, i64, i64 } %t663) + %t664 = load ptr, ptr %a1 + %t665 = load { ptr, i64, i64 }, ptr %a661 + call void @finch.gen.store(ptr %t664, { ptr, i64, i64 } { ptr @.str.5281, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5282, i64 15, i64 0 }, { ptr, i64, i64 } %t665) + %t666 = load ptr, ptr %a1 + %t667 = load { ptr, i64, i64 }, ptr %a647 + store { ptr, i64, i64 } { ptr @.str.5283, i64 34, i64 0 }, ptr %a669 + store { ptr, i64, i64 } %t667, ptr %a670 + call void @finch_str_concat(ptr %a668, ptr %a669, ptr %a670) + %t671 = load { ptr, i64, i64 }, ptr %a668 + store { ptr, i64, i64 } %t671, ptr %a673 + store { ptr, i64, i64 } { ptr @.str.5284, i64 6, i64 0 }, ptr %a674 + call void @finch_str_concat(ptr %a672, ptr %a673, ptr %a674) + store { ptr, i64, i64 } %t671, ptr %a675 + call void @finch_str_drop(ptr %a675) + %t676 = load { ptr, i64, i64 }, ptr %a672 + %t677 = load { ptr, i64, i64 }, ptr %a607 + store { ptr, i64, i64 } %t676, ptr %a679 + store { ptr, i64, i64 } %t677, ptr %a680 + call void @finch_str_concat(ptr %a678, ptr %a679, ptr %a680) + store { ptr, i64, i64 } %t676, ptr %a681 + call void @finch_str_drop(ptr %a681) + %t682 = load { ptr, i64, i64 }, ptr %a678 + store { ptr, i64, i64 } %t682, ptr %a684 + store { ptr, i64, i64 } { ptr @.str.5285, i64 6, i64 0 }, ptr %a685 + call void @finch_str_concat(ptr %a683, ptr %a684, ptr %a685) + store { ptr, i64, i64 } %t682, ptr %a686 + call void @finch_str_drop(ptr %a686) + %t687 = load { ptr, i64, i64 }, ptr %a683 + %t688 = load { ptr, i64, i64 }, ptr %a661 + store { ptr, i64, i64 } %t687, ptr %a690 + store { ptr, i64, i64 } %t688, ptr %a691 + call void @finch_str_concat(ptr %a689, ptr %a690, ptr %a691) + store { ptr, i64, i64 } %t687, ptr %a692 + call void @finch_str_drop(ptr %a692) + %t693 = load { ptr, i64, i64 }, ptr %a689 + store { ptr, i64, i64 } %t693, ptr %a695 + store { ptr, i64, i64 } { ptr @.str.5286, i64 1, i64 0 }, ptr %a696 + call void @finch_str_concat(ptr %a694, ptr %a695, ptr %a696) + store { ptr, i64, i64 } %t693, ptr %a697 + call void @finch_str_drop(ptr %a697) + %t698 = load { ptr, i64, i64 }, ptr %a694 + %t699 = call { ptr, i64, i64 } @finch.gen.op(ptr %t666, { ptr, i64, i64 } %t698) + store { ptr, i64, i64 } %t698, ptr %a700 + call void @finch_str_drop(ptr %a700) + store { ptr, i64, i64 } %t699, ptr %a701 + %t702 = load ptr, ptr %a1 + %t703 = load { ptr, i64, i64 }, ptr %a701 + store { ptr, i64, i64 } { ptr @.str.5287, i64 12, i64 0 }, ptr %a705 + store { ptr, i64, i64 } %t703, ptr %a706 + call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) + %t707 = load { ptr, i64, i64 }, ptr %a704 + store { ptr, i64, i64 } %t707, ptr %a709 + store { ptr, i64, i64 } { ptr @.str.5288, i64 3, i64 0 }, ptr %a710 + call void @finch_str_concat(ptr %a708, ptr %a709, ptr %a710) + store { ptr, i64, i64 } %t707, ptr %a711 + call void @finch_str_drop(ptr %a711) + %t712 = load { ptr, i64, i64 }, ptr %a708 + %t713 = call { ptr, i64, i64 } @finch.gen.op(ptr %t702, { ptr, i64, i64 } %t712) + store { ptr, i64, i64 } %t712, ptr %a714 + call void @finch_str_drop(ptr %a714) + %t715 = load ptr, ptr %a1 + %t716 = icmp eq ptr %t715, null + br i1 %t716, label %panic8250, label %ok8251 +panic8250: + call void @finch_panic(ptr @.str.5289, i64 4931, ptr @.str.5290) + unreachable +ok8251: + %t717 = getelementptr inbounds %S.gen.Gen, ptr %t715, i32 0, i32 42 + %t718 = load { ptr, i64, i64 }, ptr %t717 + store { ptr, i64, i64 } %t713, ptr %t717 + store { ptr, i64, i64 } %t718, ptr %a719 + call void @finch_str_drop(ptr %a719) + %t720 = load ptr, ptr %a1 + %t721 = load { ptr, i64, i64 }, ptr %a661 + %t722 = call { ptr, i64, i64 } @finch.gen.load(ptr %t720, { ptr, i64, i64 } { ptr @.str.5291, i64 17, i64 0 }, { ptr, i64, i64 } %t721) + %t723 = load ptr, ptr %a1 + %t724 = icmp eq ptr %t723, null + br i1 %t724, label %panic8252, label %ok8253 +panic8252: + call void @finch_panic(ptr @.str.5292, i64 4932, ptr @.str.5293) + unreachable +ok8253: + %t725 = getelementptr inbounds %S.gen.Gen, ptr %t723, i32 0, i32 43 + %t726 = load { ptr, i64, i64 }, ptr %t725 + store { ptr, i64, i64 } %t722, ptr %t725 + store { ptr, i64, i64 } %t726, ptr %a727 + call void @finch_str_drop(ptr %a727) + %t728 = load ptr, ptr %a1 + %t729 = load %S.gen.Val, ptr %a603 + call void @finch.gen.release(ptr %t728, %S.gen.Val %t729) + %t730 = load ptr, ptr %a1 + %t731 = load { ptr, i64, i64 }, ptr %a647 + %t732 = call { ptr, i64, i64 } @finch.gen.load(ptr %t730, { ptr, i64, i64 } { ptr @.str.5294, i64 17, i64 0 }, { ptr, i64, i64 } %t731) + %t733 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t732, 0 + %t734 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5295, i64 3, i64 0 }) + %t735 = insertvalue %S.gen.Val %t733, %S.ast.Type %t734, 1 + %t736 = insertvalue %S.gen.Val %t735, i1 true, 2 + call void @finch_str_drop(ptr %a701) + call void @finch_str_drop(ptr %a661) + call void @finch_str_drop(ptr %a647) + call void @finch_str_drop(ptr %a607) + call void @finch.drop.S_gen_Val(ptr %a603) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t736 +endif8249: + %t737 = load ptr, ptr %a1 + %t738 = load ptr, ptr %a1 + %t739 = icmp eq ptr %t738, null + br i1 %t739, label %panic8254, label %ok8255 +panic8254: + call void @finch_panic(ptr @.str.5296, i64 4936, ptr @.str.5297) + unreachable +ok8255: + %t740 = getelementptr inbounds %S.gen.Gen, ptr %t738, i32 0, i32 1 + %t741 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t742 = load i64, ptr %t741 + %t743 = load { ptr, i64, i64 }, ptr %t740 + %t744 = extractvalue { ptr, i64, i64 } %t743, 1 + %t745 = icmp uge i64 %t742, %t744 + br i1 %t745, label %range8256, label %inrange8257 +range8256: + call void @finch_panic_index(ptr @.str.5298, i64 4936, i64 %t742, i64 %t744) + unreachable +inrange8257: + %t746 = extractvalue { ptr, i64, i64 } %t743, 0 + %t747 = getelementptr inbounds { ptr, i64, i64 }, ptr %t746, i64 %t742 + %t748 = load { ptr, i64, i64 }, ptr %t747 + %t749 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t737, { ptr, i64, i64 } %t748) + store { ptr, i64, i64 } %t749, ptr %a750 + %t751 = load ptr, ptr %a1 + %t752 = load { ptr, i64, i64 }, ptr %a647 + store { ptr, i64, i64 } { ptr @.str.5299, i64 31, i64 0 }, ptr %a754 + store { ptr, i64, i64 } %t752, ptr %a755 + call void @finch_str_concat(ptr %a753, ptr %a754, ptr %a755) + %t756 = load { ptr, i64, i64 }, ptr %a753 + store { ptr, i64, i64 } %t756, ptr %a758 + store { ptr, i64, i64 } { ptr @.str.5300, i64 6, i64 0 }, ptr %a759 + call void @finch_str_concat(ptr %a757, ptr %a758, ptr %a759) + store { ptr, i64, i64 } %t756, ptr %a760 + call void @finch_str_drop(ptr %a760) + %t761 = load { ptr, i64, i64 }, ptr %a757 + %t762 = load { ptr, i64, i64 }, ptr %a607 + store { ptr, i64, i64 } %t761, ptr %a764 + store { ptr, i64, i64 } %t762, ptr %a765 + call void @finch_str_concat(ptr %a763, ptr %a764, ptr %a765) + store { ptr, i64, i64 } %t761, ptr %a766 + call void @finch_str_drop(ptr %a766) + %t767 = load { ptr, i64, i64 }, ptr %a763 + store { ptr, i64, i64 } %t767, ptr %a769 + store { ptr, i64, i64 } { ptr @.str.5301, i64 6, i64 0 }, ptr %a770 + call void @finch_str_concat(ptr %a768, ptr %a769, ptr %a770) + store { ptr, i64, i64 } %t767, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a768 + %t773 = load { ptr, i64, i64 }, ptr %a750 + store { ptr, i64, i64 } %t772, ptr %a775 + store { ptr, i64, i64 } %t773, ptr %a776 + call void @finch_str_concat(ptr %a774, ptr %a775, ptr %a776) + store { ptr, i64, i64 } %t772, ptr %a777 + call void @finch_str_drop(ptr %a777) + %t778 = load { ptr, i64, i64 }, ptr %a774 + store { ptr, i64, i64 } %t778, ptr %a780 + store { ptr, i64, i64 } { ptr @.str.5302, i64 6, i64 0 }, ptr %a781 + call void @finch_str_concat(ptr %a779, ptr %a780, ptr %a781) + store { ptr, i64, i64 } %t778, ptr %a782 + call void @finch_str_drop(ptr %a782) + %t783 = load { ptr, i64, i64 }, ptr %a779 + %t784 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t785 = load i64, ptr %t784 + call void @finch_str_from_int(ptr %a786, i64 %t785) + %t787 = load { ptr, i64, i64 }, ptr %a786 + store { ptr, i64, i64 } %t783, ptr %a789 + store { ptr, i64, i64 } %t787, ptr %a790 + call void @finch_str_concat(ptr %a788, ptr %a789, ptr %a790) + store { ptr, i64, i64 } %t783, ptr %a791 + call void @finch_str_drop(ptr %a791) + store { ptr, i64, i64 } %t787, ptr %a792 + call void @finch_str_drop(ptr %a792) + %t793 = load { ptr, i64, i64 }, ptr %a788 + store { ptr, i64, i64 } %t793, ptr %a795 + store { ptr, i64, i64 } { ptr @.str.5303, i64 1, i64 0 }, ptr %a796 + call void @finch_str_concat(ptr %a794, ptr %a795, ptr %a796) + store { ptr, i64, i64 } %t793, ptr %a797 + call void @finch_str_drop(ptr %a797) + %t798 = load { ptr, i64, i64 }, ptr %a794 + call void @finch.gen.emit(ptr %t751, { ptr, i64, i64 } %t798) + store { ptr, i64, i64 } %t798, ptr %a799 + call void @finch_str_drop(ptr %a799) + %t800 = load ptr, ptr %a1 + %t801 = load %S.gen.Val, ptr %a603 + call void @finch.gen.release(ptr %t800, %S.gen.Val %t801) + %t802 = load ptr, ptr %a1 + %t803 = load { ptr, i64, i64 }, ptr %a647 + %t804 = call { ptr, i64, i64 } @finch.gen.load(ptr %t802, { ptr, i64, i64 } { ptr @.str.5304, i64 17, i64 0 }, { ptr, i64, i64 } %t803) + %t805 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t804, 0 + %t806 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5305, i64 3, i64 0 }) + %t807 = insertvalue %S.gen.Val %t805, %S.ast.Type %t806, 1 + %t808 = insertvalue %S.gen.Val %t807, i1 true, 2 + call void @finch_str_drop(ptr %a750) + call void @finch_str_drop(ptr %a647) + call void @finch_str_drop(ptr %a607) + call void @finch.drop.S_gen_Val(ptr %a603) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t808 +endif8239: + %t809 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t809, ptr %a810 + store { ptr, i64, i64 } { ptr @.str.5306, i64 10, i64 0 }, ptr %a811 + %t812 = call i32 @finch_str_eq(ptr %a810, ptr %a811) + %t813 = icmp ne i32 %t812, 0 + br i1 %t813, label %then8258, label %endif8260 +then8258: + %t814 = load ptr, ptr %a1 + %t815 = load %S.ast.Node, ptr %a2 + %t816 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t814, %S.ast.Node %t815, i64 0, i64 2, { ptr, i64, i64 } %t816) + %t817 = load ptr, ptr %a1 + %t818 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t819 = load { ptr, i64, i64 }, ptr %t818 + %t820 = extractvalue { ptr, i64, i64 } %t819, 1 + %t821 = icmp uge i64 0, %t820 + br i1 %t821, label %range8261, label %inrange8262 +range8261: + call void @finch_panic_index(ptr @.str.5307, i64 4943, i64 0, i64 %t820) + unreachable +inrange8262: + %t822 = extractvalue { ptr, i64, i64 } %t819, 0 + %t823 = getelementptr inbounds %S.ast.Node, ptr %t822, i64 0 + %t824 = load %S.ast.Node, ptr %t823 + %t825 = call %S.gen.Val @finch.gen.strArg(ptr %t817, %S.ast.Node %t824, { ptr, i64, i64 } { ptr @.str.5308, i64 13, i64 0 }) + store %S.gen.Val %t825, ptr %a826 + %t827 = load ptr, ptr %a1 + %t828 = icmp eq ptr %t827, null + br i1 %t828, label %panic8263, label %ok8264 +panic8263: + call void @finch_panic(ptr @.str.5309, i64 4944, ptr @.str.5310) + unreachable +ok8264: + %t829 = getelementptr inbounds %S.gen.Gen, ptr %t827, i32 0, i32 11 + %t830 = getelementptr inbounds { ptr, i64, i64 }, ptr %t829, i32 0, i32 1 + %t831 = load i64, ptr %t830 + store i64 %t831, ptr %a832 + %t833 = load ptr, ptr %a1 + %t834 = load %S.gen.Val, ptr %a826 + call void @finch.gen.hold(ptr %t833, %S.gen.Val %t834) + %t835 = load ptr, ptr %a1 + %t836 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t837 = load { ptr, i64, i64 }, ptr %t836 + %t838 = extractvalue { ptr, i64, i64 } %t837, 1 + %t839 = icmp uge i64 1, %t838 + br i1 %t839, label %range8265, label %inrange8266 +range8265: + call void @finch_panic_index(ptr @.str.5311, i64 4946, i64 1, i64 %t838) + unreachable +inrange8266: + %t840 = extractvalue { ptr, i64, i64 } %t837, 0 + %t841 = getelementptr inbounds %S.ast.Node, ptr %t840, i64 1 + %t842 = load %S.ast.Node, ptr %t841 + %t843 = call %S.gen.Val @finch.gen.strArg(ptr %t835, %S.ast.Node %t842, { ptr, i64, i64 } { ptr @.str.5312, i64 8, i64 0 }) + store %S.gen.Val %t843, ptr %a844 + %t845 = load ptr, ptr %a1 + %t846 = load i64, ptr %a832 + call void @finch.gen.heldEnd(ptr %t845, i64 %t846) + %t847 = load ptr, ptr %a1 + %t848 = load %S.gen.Val, ptr %a826 + %t849 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t847, %S.gen.Val %t848) + store { ptr, i64, i64 } %t849, ptr %a850 + %t851 = load ptr, ptr %a1 + %t852 = load %S.gen.Val, ptr %a844 + %t853 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t851, %S.gen.Val %t852) + store { ptr, i64, i64 } %t853, ptr %a854 + %t855 = load ptr, ptr %a1 + %t856 = icmp eq ptr %t855, null + br i1 %t856, label %panic8267, label %ok8268 +panic8267: + call void @finch_panic(ptr @.str.5313, i64 4950, ptr @.str.5314) + unreachable +ok8268: + %t857 = getelementptr inbounds %S.gen.Gen, ptr %t855, i32 0, i32 41 + %t858 = load { ptr, i64, i64 }, ptr %t857 + %t859 = load %S.ast.Node, ptr %a2 + %t860 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t859) + store { ptr, i64, i64 } %t858, ptr %a861 + store { ptr, i64, i64 } %t860, ptr %a862 + %t863 = call i32 @finch_str_eq(ptr %a861, ptr %a862) + %t864 = icmp ne i32 %t863, 0 + store { ptr, i64, i64 } %t860, ptr %a865 + call void @finch_str_drop(ptr %a865) + br i1 %t864, label %then8269, label %endif8271 +then8269: + %t866 = load ptr, ptr %a1 + %t867 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t866, { ptr, i64, i64 } { ptr @.str.5315, i64 17, i64 0 }) + store { ptr, i64, i64 } %t867, ptr %a868 + %t869 = load ptr, ptr %a1 + %t870 = load { ptr, i64, i64 }, ptr %a868 + call void @finch.gen.store(ptr %t869, { ptr, i64, i64 } { ptr @.str.5316, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5317, i64 15, i64 0 }, { ptr, i64, i64 } %t870) + %t871 = load ptr, ptr %a1 + %t872 = load { ptr, i64, i64 }, ptr %a850 + store { ptr, i64, i64 } { ptr @.str.5318, i64 35, i64 0 }, ptr %a874 + store { ptr, i64, i64 } %t872, ptr %a875 + call void @finch_str_concat(ptr %a873, ptr %a874, ptr %a875) + %t876 = load { ptr, i64, i64 }, ptr %a873 + store { ptr, i64, i64 } %t876, ptr %a878 + store { ptr, i64, i64 } { ptr @.str.5319, i64 6, i64 0 }, ptr %a879 + call void @finch_str_concat(ptr %a877, ptr %a878, ptr %a879) + store { ptr, i64, i64 } %t876, ptr %a880 + call void @finch_str_drop(ptr %a880) + %t881 = load { ptr, i64, i64 }, ptr %a877 + %t882 = load { ptr, i64, i64 }, ptr %a854 + store { ptr, i64, i64 } %t881, ptr %a884 + store { ptr, i64, i64 } %t882, ptr %a885 + call void @finch_str_concat(ptr %a883, ptr %a884, ptr %a885) + store { ptr, i64, i64 } %t881, ptr %a886 + call void @finch_str_drop(ptr %a886) + %t887 = load { ptr, i64, i64 }, ptr %a883 + store { ptr, i64, i64 } %t887, ptr %a889 + store { ptr, i64, i64 } { ptr @.str.5320, i64 6, i64 0 }, ptr %a890 + call void @finch_str_concat(ptr %a888, ptr %a889, ptr %a890) + store { ptr, i64, i64 } %t887, ptr %a891 + call void @finch_str_drop(ptr %a891) + %t892 = load { ptr, i64, i64 }, ptr %a888 + %t893 = load { ptr, i64, i64 }, ptr %a868 + store { ptr, i64, i64 } %t892, ptr %a895 + store { ptr, i64, i64 } %t893, ptr %a896 + call void @finch_str_concat(ptr %a894, ptr %a895, ptr %a896) + store { ptr, i64, i64 } %t892, ptr %a897 + call void @finch_str_drop(ptr %a897) + %t898 = load { ptr, i64, i64 }, ptr %a894 + store { ptr, i64, i64 } %t898, ptr %a900 + store { ptr, i64, i64 } { ptr @.str.5321, i64 1, i64 0 }, ptr %a901 + call void @finch_str_concat(ptr %a899, ptr %a900, ptr %a901) + store { ptr, i64, i64 } %t898, ptr %a902 + call void @finch_str_drop(ptr %a902) + %t903 = load { ptr, i64, i64 }, ptr %a899 + %t904 = call { ptr, i64, i64 } @finch.gen.op(ptr %t871, { ptr, i64, i64 } %t903) + store { ptr, i64, i64 } %t903, ptr %a905 + call void @finch_str_drop(ptr %a905) + store { ptr, i64, i64 } %t904, ptr %a906 + %t907 = load ptr, ptr %a1 + %t908 = load { ptr, i64, i64 }, ptr %a906 + store { ptr, i64, i64 } { ptr @.str.5322, i64 12, i64 0 }, ptr %a910 + store { ptr, i64, i64 } %t908, ptr %a911 + call void @finch_str_concat(ptr %a909, ptr %a910, ptr %a911) + %t912 = load { ptr, i64, i64 }, ptr %a909 + store { ptr, i64, i64 } %t912, ptr %a914 + store { ptr, i64, i64 } { ptr @.str.5323, i64 3, i64 0 }, ptr %a915 + call void @finch_str_concat(ptr %a913, ptr %a914, ptr %a915) + store { ptr, i64, i64 } %t912, ptr %a916 + call void @finch_str_drop(ptr %a916) + %t917 = load { ptr, i64, i64 }, ptr %a913 + %t918 = call { ptr, i64, i64 } @finch.gen.op(ptr %t907, { ptr, i64, i64 } %t917) + store { ptr, i64, i64 } %t917, ptr %a919 + call void @finch_str_drop(ptr %a919) + %t920 = load ptr, ptr %a1 + %t921 = icmp eq ptr %t920, null + br i1 %t921, label %panic8272, label %ok8273 +panic8272: + call void @finch_panic(ptr @.str.5324, i64 4954, ptr @.str.5325) + unreachable +ok8273: + %t922 = getelementptr inbounds %S.gen.Gen, ptr %t920, i32 0, i32 42 + %t923 = load { ptr, i64, i64 }, ptr %t922 + store { ptr, i64, i64 } %t918, ptr %t922 + store { ptr, i64, i64 } %t923, ptr %a924 + call void @finch_str_drop(ptr %a924) + %t925 = load ptr, ptr %a1 + %t926 = load { ptr, i64, i64 }, ptr %a868 + %t927 = call { ptr, i64, i64 } @finch.gen.load(ptr %t925, { ptr, i64, i64 } { ptr @.str.5326, i64 17, i64 0 }, { ptr, i64, i64 } %t926) + %t928 = load ptr, ptr %a1 + %t929 = icmp eq ptr %t928, null + br i1 %t929, label %panic8274, label %ok8275 +panic8274: + call void @finch_panic(ptr @.str.5327, i64 4955, ptr @.str.5328) + unreachable +ok8275: + %t930 = getelementptr inbounds %S.gen.Gen, ptr %t928, i32 0, i32 43 + %t931 = load { ptr, i64, i64 }, ptr %t930 + store { ptr, i64, i64 } %t927, ptr %t930 + store { ptr, i64, i64 } %t931, ptr %a932 + call void @finch_str_drop(ptr %a932) + %t933 = load ptr, ptr %a1 + %t934 = load %S.gen.Val, ptr %a826 + call void @finch.gen.release(ptr %t933, %S.gen.Val %t934) + %t935 = load ptr, ptr %a1 + %t936 = load %S.gen.Val, ptr %a844 + call void @finch.gen.release(ptr %t935, %S.gen.Val %t936) + %t937 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5329, i64 4, i64 0 }) + %t938 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t937, 1 + call void @finch_str_drop(ptr %a906) + call void @finch_str_drop(ptr %a868) + call void @finch_str_drop(ptr %a854) + call void @finch_str_drop(ptr %a850) + call void @finch.drop.S_gen_Val(ptr %a844) + call void @finch.drop.S_gen_Val(ptr %a826) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t938 +endif8271: + %t939 = load ptr, ptr %a1 + %t940 = load { ptr, i64, i64 }, ptr %a850 + store { ptr, i64, i64 } { ptr @.str.5330, i64 31, i64 0 }, ptr %a942 + store { ptr, i64, i64 } %t940, ptr %a943 + call void @finch_str_concat(ptr %a941, ptr %a942, ptr %a943) + %t944 = load { ptr, i64, i64 }, ptr %a941 + store { ptr, i64, i64 } %t944, ptr %a946 + store { ptr, i64, i64 } { ptr @.str.5331, i64 6, i64 0 }, ptr %a947 + call void @finch_str_concat(ptr %a945, ptr %a946, ptr %a947) + store { ptr, i64, i64 } %t944, ptr %a948 + call void @finch_str_drop(ptr %a948) + %t949 = load { ptr, i64, i64 }, ptr %a945 + %t950 = load { ptr, i64, i64 }, ptr %a854 + store { ptr, i64, i64 } %t949, ptr %a952 + store { ptr, i64, i64 } %t950, ptr %a953 + call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) + store { ptr, i64, i64 } %t949, ptr %a954 + call void @finch_str_drop(ptr %a954) + %t955 = load { ptr, i64, i64 }, ptr %a951 + store { ptr, i64, i64 } %t955, ptr %a957 + store { ptr, i64, i64 } { ptr @.str.5332, i64 1, i64 0 }, ptr %a958 + call void @finch_str_concat(ptr %a956, ptr %a957, ptr %a958) + store { ptr, i64, i64 } %t955, ptr %a959 + call void @finch_str_drop(ptr %a959) + %t960 = load { ptr, i64, i64 }, ptr %a956 + %t961 = call { ptr, i64, i64 } @finch.gen.op(ptr %t939, { ptr, i64, i64 } %t960) + store { ptr, i64, i64 } %t960, ptr %a962 + call void @finch_str_drop(ptr %a962) + store { ptr, i64, i64 } %t961, ptr %a963 + %t964 = load ptr, ptr %a1 + %t965 = load %S.gen.Val, ptr %a826 + call void @finch.gen.release(ptr %t964, %S.gen.Val %t965) + %t966 = load ptr, ptr %a1 + %t967 = load %S.gen.Val, ptr %a844 + call void @finch.gen.release(ptr %t966, %S.gen.Val %t967) + %t968 = load ptr, ptr %a1 + %t969 = load { ptr, i64, i64 }, ptr %a963 + store { ptr, i64, i64 } { ptr @.str.5333, i64 12, i64 0 }, ptr %a971 + store { ptr, i64, i64 } %t969, ptr %a972 + call void @finch_str_concat(ptr %a970, ptr %a971, ptr %a972) + %t973 = load { ptr, i64, i64 }, ptr %a970 + store { ptr, i64, i64 } %t973, ptr %a975 + store { ptr, i64, i64 } { ptr @.str.5334, i64 3, i64 0 }, ptr %a976 + call void @finch_str_concat(ptr %a974, ptr %a975, ptr %a976) + store { ptr, i64, i64 } %t973, ptr %a977 + call void @finch_str_drop(ptr %a977) + %t978 = load { ptr, i64, i64 }, ptr %a974 + %t979 = call { ptr, i64, i64 } @finch.gen.op(ptr %t968, { ptr, i64, i64 } %t978) + store { ptr, i64, i64 } %t978, ptr %a980 + call void @finch_str_drop(ptr %a980) + %t981 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t979, 0 + %t982 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5335, i64 4, i64 0 }) + %t983 = insertvalue %S.gen.Val %t981, %S.ast.Type %t982, 1 + call void @finch_str_drop(ptr %a963) + call void @finch_str_drop(ptr %a854) + call void @finch_str_drop(ptr %a850) + call void @finch.drop.S_gen_Val(ptr %a844) + call void @finch.drop.S_gen_Val(ptr %a826) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t983 +endif8260: + %t984 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t984, ptr %a985 + store { ptr, i64, i64 } { ptr @.str.5336, i64 11, i64 0 }, ptr %a986 + %t987 = call i32 @finch_str_eq(ptr %a985, ptr %a986) + %t988 = icmp ne i32 %t987, 0 + br i1 %t988, label %then8276, label %endif8278 +then8276: + %t989 = load ptr, ptr %a1 + %t990 = load %S.ast.Node, ptr %a2 + %t991 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t989, %S.ast.Node %t990, i64 0, i64 1, { ptr, i64, i64 } %t991) + %t992 = load ptr, ptr %a1 + %t993 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t994 = load { ptr, i64, i64 }, ptr %t993 + %t995 = extractvalue { ptr, i64, i64 } %t994, 1 + %t996 = icmp uge i64 0, %t995 + br i1 %t996, label %range8279, label %inrange8280 +range8279: + call void @finch_panic_index(ptr @.str.5337, i64 4967, i64 0, i64 %t995) + unreachable +inrange8280: + %t997 = extractvalue { ptr, i64, i64 } %t994, 0 + %t998 = getelementptr inbounds %S.ast.Node, ptr %t997, i64 0 + %t999 = load %S.ast.Node, ptr %t998 + %t1000 = call %S.gen.Val @finch.gen.strArg(ptr %t992, %S.ast.Node %t999, { ptr, i64, i64 } { ptr @.str.5338, i64 13, i64 0 }) + store %S.gen.Val %t1000, ptr %a1001 + %t1002 = load ptr, ptr %a1 + %t1003 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1002) + store { ptr, i64, i64 } %t1003, ptr %a1004 + %t1005 = load ptr, ptr %a1 + %t1006 = load { ptr, i64, i64 }, ptr %a1004 + store { ptr, i64, i64 } { ptr @.str.5339, i64 30, i64 0 }, ptr %a1008 + store { ptr, i64, i64 } %t1006, ptr %a1009 + call void @finch_str_concat(ptr %a1007, ptr %a1008, ptr %a1009) + %t1010 = load { ptr, i64, i64 }, ptr %a1007 + store { ptr, i64, i64 } %t1010, ptr %a1012 + store { ptr, i64, i64 } { ptr @.str.5340, i64 6, i64 0 }, ptr %a1013 + call void @finch_str_concat(ptr %a1011, ptr %a1012, ptr %a1013) + store { ptr, i64, i64 } %t1010, ptr %a1014 + call void @finch_str_drop(ptr %a1014) + %t1015 = load { ptr, i64, i64 }, ptr %a1011 + %t1016 = load ptr, ptr %a1 + %t1017 = load %S.gen.Val, ptr %a1001 + %t1018 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1016, %S.gen.Val %t1017) + store { ptr, i64, i64 } %t1015, ptr %a1020 + store { ptr, i64, i64 } %t1018, ptr %a1021 + call void @finch_str_concat(ptr %a1019, ptr %a1020, ptr %a1021) + store { ptr, i64, i64 } %t1015, ptr %a1022 + call void @finch_str_drop(ptr %a1022) + store { ptr, i64, i64 } %t1018, ptr %a1023 + call void @finch_str_drop(ptr %a1023) + %t1024 = load { ptr, i64, i64 }, ptr %a1019 + store { ptr, i64, i64 } %t1024, ptr %a1026 + store { ptr, i64, i64 } { ptr @.str.5341, i64 1, i64 0 }, ptr %a1027 + call void @finch_str_concat(ptr %a1025, ptr %a1026, ptr %a1027) + store { ptr, i64, i64 } %t1024, ptr %a1028 + call void @finch_str_drop(ptr %a1028) + %t1029 = load { ptr, i64, i64 }, ptr %a1025 + call void @finch.gen.emit(ptr %t1005, { ptr, i64, i64 } %t1029) + store { ptr, i64, i64 } %t1029, ptr %a1030 + call void @finch_str_drop(ptr %a1030) + %t1031 = load ptr, ptr %a1 + %t1032 = icmp eq ptr %t1031, null + br i1 %t1032, label %panic8281, label %ok8282 +panic8281: + call void @finch_panic(ptr @.str.5342, i64 4970, ptr @.str.5343) + unreachable +ok8282: + %t1033 = getelementptr inbounds %S.gen.Gen, ptr %t1031, i32 0, i32 41 + %t1034 = load { ptr, i64, i64 }, ptr %t1033 + %t1035 = load %S.ast.Node, ptr %a2 + %t1036 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t1035) + store { ptr, i64, i64 } %t1034, ptr %a1037 + store { ptr, i64, i64 } %t1036, ptr %a1038 + %t1039 = call i32 @finch_str_eq(ptr %a1037, ptr %a1038) + %t1040 = icmp ne i32 %t1039, 0 + store { ptr, i64, i64 } %t1036, ptr %a1041 + call void @finch_str_drop(ptr %a1041) + br i1 %t1040, label %then8283, label %endif8285 +then8283: + %t1042 = load ptr, ptr %a1 + %t1043 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1042, { ptr, i64, i64 } { ptr @.str.5344, i64 17, i64 0 }) + store { ptr, i64, i64 } %t1043, ptr %a1044 + %t1045 = load ptr, ptr %a1 + %t1046 = load { ptr, i64, i64 }, ptr %a1044 + call void @finch.gen.store(ptr %t1045, { ptr, i64, i64 } { ptr @.str.5345, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.5346, i64 15, i64 0 }, { ptr, i64, i64 } %t1046) + %t1047 = load ptr, ptr %a1 + %t1048 = load { ptr, i64, i64 }, ptr %a1004 + store { ptr, i64, i64 } { ptr @.str.5347, i64 36, i64 0 }, ptr %a1050 + store { ptr, i64, i64 } %t1048, ptr %a1051 + call void @finch_str_concat(ptr %a1049, ptr %a1050, ptr %a1051) + %t1052 = load { ptr, i64, i64 }, ptr %a1049 + store { ptr, i64, i64 } %t1052, ptr %a1054 + store { ptr, i64, i64 } { ptr @.str.5348, i64 6, i64 0 }, ptr %a1055 + call void @finch_str_concat(ptr %a1053, ptr %a1054, ptr %a1055) + store { ptr, i64, i64 } %t1052, ptr %a1056 + call void @finch_str_drop(ptr %a1056) + %t1057 = load { ptr, i64, i64 }, ptr %a1053 + %t1058 = load { ptr, i64, i64 }, ptr %a1044 + store { ptr, i64, i64 } %t1057, ptr %a1060 + store { ptr, i64, i64 } %t1058, ptr %a1061 + call void @finch_str_concat(ptr %a1059, ptr %a1060, ptr %a1061) + store { ptr, i64, i64 } %t1057, ptr %a1062 + call void @finch_str_drop(ptr %a1062) + %t1063 = load { ptr, i64, i64 }, ptr %a1059 + store { ptr, i64, i64 } %t1063, ptr %a1065 + store { ptr, i64, i64 } { ptr @.str.5349, i64 1, i64 0 }, ptr %a1066 + call void @finch_str_concat(ptr %a1064, ptr %a1065, ptr %a1066) + store { ptr, i64, i64 } %t1063, ptr %a1067 + call void @finch_str_drop(ptr %a1067) + %t1068 = load { ptr, i64, i64 }, ptr %a1064 + %t1069 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1047, { ptr, i64, i64 } %t1068) + store { ptr, i64, i64 } %t1068, ptr %a1070 + call void @finch_str_drop(ptr %a1070) + store { ptr, i64, i64 } %t1069, ptr %a1071 + %t1072 = load ptr, ptr %a1 + %t1073 = load { ptr, i64, i64 }, ptr %a1071 + store { ptr, i64, i64 } { ptr @.str.5350, i64 12, i64 0 }, ptr %a1075 + store { ptr, i64, i64 } %t1073, ptr %a1076 + call void @finch_str_concat(ptr %a1074, ptr %a1075, ptr %a1076) + %t1077 = load { ptr, i64, i64 }, ptr %a1074 + store { ptr, i64, i64 } %t1077, ptr %a1079 + store { ptr, i64, i64 } { ptr @.str.5351, i64 3, i64 0 }, ptr %a1080 + call void @finch_str_concat(ptr %a1078, ptr %a1079, ptr %a1080) + store { ptr, i64, i64 } %t1077, ptr %a1081 + call void @finch_str_drop(ptr %a1081) + %t1082 = load { ptr, i64, i64 }, ptr %a1078 + %t1083 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1072, { ptr, i64, i64 } %t1082) + store { ptr, i64, i64 } %t1082, ptr %a1084 + call void @finch_str_drop(ptr %a1084) + %t1085 = load ptr, ptr %a1 + %t1086 = icmp eq ptr %t1085, null + br i1 %t1086, label %panic8286, label %ok8287 +panic8286: + call void @finch_panic(ptr @.str.5352, i64 4974, ptr @.str.5353) + unreachable +ok8287: + %t1087 = getelementptr inbounds %S.gen.Gen, ptr %t1085, i32 0, i32 42 + %t1088 = load { ptr, i64, i64 }, ptr %t1087 + store { ptr, i64, i64 } %t1083, ptr %t1087 + store { ptr, i64, i64 } %t1088, ptr %a1089 + call void @finch_str_drop(ptr %a1089) + %t1090 = load ptr, ptr %a1 + %t1091 = load { ptr, i64, i64 }, ptr %a1044 + %t1092 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1090, { ptr, i64, i64 } { ptr @.str.5354, i64 17, i64 0 }, { ptr, i64, i64 } %t1091) + %t1093 = load ptr, ptr %a1 + %t1094 = icmp eq ptr %t1093, null + br i1 %t1094, label %panic8288, label %ok8289 +panic8288: + call void @finch_panic(ptr @.str.5355, i64 4975, ptr @.str.5356) + unreachable +ok8289: + %t1095 = getelementptr inbounds %S.gen.Gen, ptr %t1093, i32 0, i32 43 + %t1096 = load { ptr, i64, i64 }, ptr %t1095 + store { ptr, i64, i64 } %t1092, ptr %t1095 + store { ptr, i64, i64 } %t1096, ptr %a1097 + call void @finch_str_drop(ptr %a1097) + %t1098 = load ptr, ptr %a1 + %t1099 = load { ptr, i64, i64 }, ptr %a1004 + %t1100 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5357, i64 3, i64 0 }) + call void @finch.gen.dropAt(ptr %t1098, { ptr, i64, i64 } %t1099, %S.ast.Type %t1100) + store %S.ast.Type %t1100, ptr %a1101 + call void @finch.drop.S_ast_Type(ptr %a1101) + %t1102 = load ptr, ptr %a1 + %t1103 = load %S.gen.Val, ptr %a1001 + call void @finch.gen.release(ptr %t1102, %S.gen.Val %t1103) + %t1104 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5358, i64 4, i64 0 }) + %t1105 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1104, 1 + call void @finch_str_drop(ptr %a1071) + call void @finch_str_drop(ptr %a1044) + call void @finch_str_drop(ptr %a1004) + call void @finch.drop.S_gen_Val(ptr %a1001) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1105 +endif8285: + %t1106 = load ptr, ptr %a1 + %t1107 = load { ptr, i64, i64 }, ptr %a1004 + store { ptr, i64, i64 } { ptr @.str.5359, i64 32, i64 0 }, ptr %a1109 + store { ptr, i64, i64 } %t1107, ptr %a1110 + call void @finch_str_concat(ptr %a1108, ptr %a1109, ptr %a1110) + %t1111 = load { ptr, i64, i64 }, ptr %a1108 + store { ptr, i64, i64 } %t1111, ptr %a1113 + store { ptr, i64, i64 } { ptr @.str.5360, i64 1, i64 0 }, ptr %a1114 + call void @finch_str_concat(ptr %a1112, ptr %a1113, ptr %a1114) + store { ptr, i64, i64 } %t1111, ptr %a1115 + call void @finch_str_drop(ptr %a1115) + %t1116 = load { ptr, i64, i64 }, ptr %a1112 + %t1117 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1106, { ptr, i64, i64 } %t1116) + store { ptr, i64, i64 } %t1116, ptr %a1118 + call void @finch_str_drop(ptr %a1118) + store { ptr, i64, i64 } %t1117, ptr %a1119 + %t1120 = load ptr, ptr %a1 + %t1121 = load { ptr, i64, i64 }, ptr %a1004 + %t1122 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5361, i64 3, i64 0 }) + call void @finch.gen.dropAt(ptr %t1120, { ptr, i64, i64 } %t1121, %S.ast.Type %t1122) + store %S.ast.Type %t1122, ptr %a1123 + call void @finch.drop.S_ast_Type(ptr %a1123) + %t1124 = load ptr, ptr %a1 + %t1125 = load %S.gen.Val, ptr %a1001 + call void @finch.gen.release(ptr %t1124, %S.gen.Val %t1125) + %t1126 = load ptr, ptr %a1 + %t1127 = load { ptr, i64, i64 }, ptr %a1119 + store { ptr, i64, i64 } { ptr @.str.5362, i64 12, i64 0 }, ptr %a1129 + store { ptr, i64, i64 } %t1127, ptr %a1130 + call void @finch_str_concat(ptr %a1128, ptr %a1129, ptr %a1130) + %t1131 = load { ptr, i64, i64 }, ptr %a1128 + store { ptr, i64, i64 } %t1131, ptr %a1133 + store { ptr, i64, i64 } { ptr @.str.5363, i64 3, i64 0 }, ptr %a1134 + call void @finch_str_concat(ptr %a1132, ptr %a1133, ptr %a1134) + store { ptr, i64, i64 } %t1131, ptr %a1135 + call void @finch_str_drop(ptr %a1135) + %t1136 = load { ptr, i64, i64 }, ptr %a1132 + %t1137 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1126, { ptr, i64, i64 } %t1136) + store { ptr, i64, i64 } %t1136, ptr %a1138 + call void @finch_str_drop(ptr %a1138) + %t1139 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1137, 0 + %t1140 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5364, i64 4, i64 0 }) + %t1141 = insertvalue %S.gen.Val %t1139, %S.ast.Type %t1140, 1 + call void @finch_str_drop(ptr %a1119) + call void @finch_str_drop(ptr %a1004) + call void @finch.drop.S_gen_Val(ptr %a1001) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1141 +endif8278: + %t1142 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1142, ptr %a1143 + store { ptr, i64, i64 } { ptr @.str.5365, i64 5, i64 0 }, ptr %a1144 + %t1145 = call i32 @finch_str_eq(ptr %a1143, ptr %a1144) + %t1146 = icmp ne i32 %t1145, 0 + br i1 %t1146, label %then8290, label %endif8292 +then8290: + %t1147 = load ptr, ptr %a1 + %t1148 = load %S.ast.Node, ptr %a2 + %t1149 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1147, %S.ast.Node %t1148, i64 0, i64 1, { ptr, i64, i64 } %t1149) + %t1150 = load ptr, ptr %a1 + %t1151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1152 = load { ptr, i64, i64 }, ptr %t1151 + %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 + %t1154 = icmp uge i64 0, %t1153 + br i1 %t1154, label %range8293, label %inrange8294 +range8293: + call void @finch_panic_index(ptr @.str.5366, i64 4987, i64 0, i64 %t1153) + unreachable +inrange8294: + %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 + %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 0 + %t1157 = load %S.ast.Node, ptr %t1156 + %t1158 = call %S.gen.Val @finch.gen.strArg(ptr %t1150, %S.ast.Node %t1157, { ptr, i64, i64 } { ptr @.str.5367, i64 11, i64 0 }) + store %S.gen.Val %t1158, ptr %a1159 + %t1160 = load ptr, ptr %a1 + %t1161 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1160) + store { ptr, i64, i64 } %t1161, ptr %a1162 + %t1163 = load ptr, ptr %a1 + %t1164 = load { ptr, i64, i64 }, ptr %a1162 + store { ptr, i64, i64 } { ptr @.str.5368, i64 30, i64 0 }, ptr %a1166 + store { ptr, i64, i64 } %t1164, ptr %a1167 + call void @finch_str_concat(ptr %a1165, ptr %a1166, ptr %a1167) + %t1168 = load { ptr, i64, i64 }, ptr %a1165 + store { ptr, i64, i64 } %t1168, ptr %a1170 + store { ptr, i64, i64 } { ptr @.str.5369, i64 6, i64 0 }, ptr %a1171 + call void @finch_str_concat(ptr %a1169, ptr %a1170, ptr %a1171) + store { ptr, i64, i64 } %t1168, ptr %a1172 + call void @finch_str_drop(ptr %a1172) + %t1173 = load { ptr, i64, i64 }, ptr %a1169 + %t1174 = load ptr, ptr %a1 + %t1175 = load %S.gen.Val, ptr %a1159 + %t1176 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1174, %S.gen.Val %t1175) + store { ptr, i64, i64 } %t1173, ptr %a1178 + store { ptr, i64, i64 } %t1176, ptr %a1179 + call void @finch_str_concat(ptr %a1177, ptr %a1178, ptr %a1179) + store { ptr, i64, i64 } %t1173, ptr %a1180 + call void @finch_str_drop(ptr %a1180) + store { ptr, i64, i64 } %t1176, ptr %a1181 + call void @finch_str_drop(ptr %a1181) + %t1182 = load { ptr, i64, i64 }, ptr %a1177 + store { ptr, i64, i64 } %t1182, ptr %a1184 + store { ptr, i64, i64 } { ptr @.str.5370, i64 1, i64 0 }, ptr %a1185 + call void @finch_str_concat(ptr %a1183, ptr %a1184, ptr %a1185) + store { ptr, i64, i64 } %t1182, ptr %a1186 + call void @finch_str_drop(ptr %a1186) + %t1187 = load { ptr, i64, i64 }, ptr %a1183 + call void @finch.gen.emit(ptr %t1163, { ptr, i64, i64 } %t1187) + store { ptr, i64, i64 } %t1187, ptr %a1188 + call void @finch_str_drop(ptr %a1188) + %t1189 = load ptr, ptr %a1 + %t1190 = load { ptr, i64, i64 }, ptr %a1162 + store { ptr, i64, i64 } { ptr @.str.5371, i64 26, i64 0 }, ptr %a1192 + store { ptr, i64, i64 } %t1190, ptr %a1193 + call void @finch_str_concat(ptr %a1191, ptr %a1192, ptr %a1193) + %t1194 = load { ptr, i64, i64 }, ptr %a1191 + store { ptr, i64, i64 } %t1194, ptr %a1196 + store { ptr, i64, i64 } { ptr @.str.5372, i64 1, i64 0 }, ptr %a1197 + call void @finch_str_concat(ptr %a1195, ptr %a1196, ptr %a1197) + store { ptr, i64, i64 } %t1194, ptr %a1198 + call void @finch_str_drop(ptr %a1198) + %t1199 = load { ptr, i64, i64 }, ptr %a1195 + %t1200 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1189, { ptr, i64, i64 } %t1199) + store { ptr, i64, i64 } %t1199, ptr %a1201 + call void @finch_str_drop(ptr %a1201) + store { ptr, i64, i64 } %t1200, ptr %a1202 + %t1203 = load ptr, ptr %a1 + %t1204 = load { ptr, i64, i64 }, ptr %a1162 + %t1205 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5373, i64 3, i64 0 }) + call void @finch.gen.dropAt(ptr %t1203, { ptr, i64, i64 } %t1204, %S.ast.Type %t1205) + store %S.ast.Type %t1205, ptr %a1206 + call void @finch.drop.S_ast_Type(ptr %a1206) + %t1207 = load ptr, ptr %a1 + %t1208 = load %S.gen.Val, ptr %a1159 + call void @finch.gen.release(ptr %t1207, %S.gen.Val %t1208) + %t1209 = load { ptr, i64, i64 }, ptr %a1202 + store { ptr, i64, i64 } %t1209, ptr %a1210 + call void @finch_str_copy(ptr %a1211, ptr %a1210) + %t1212 = load { ptr, i64, i64 }, ptr %a1211 + %t1213 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1212, 0 + %t1214 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5374, i64 3, i64 0 }) + %t1215 = insertvalue %S.gen.Val %t1213, %S.ast.Type %t1214, 1 + call void @finch_str_drop(ptr %a1202) + call void @finch_str_drop(ptr %a1162) + call void @finch.drop.S_gen_Val(ptr %a1159) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1215 +endif8292: + %t1216 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1216, ptr %a1217 + store { ptr, i64, i64 } { ptr @.str.5375, i64 4, i64 0 }, ptr %a1218 + %t1219 = call i32 @finch_str_eq(ptr %a1217, ptr %a1218) + %t1220 = icmp ne i32 %t1219, 0 + br i1 %t1220, label %then8295, label %endif8297 +then8295: + %t1221 = load ptr, ptr %a1 + %t1222 = load %S.ast.Node, ptr %a2 + %t1223 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1221, %S.ast.Node %t1222, i64 0, i64 1, { ptr, i64, i64 } %t1223) + %t1224 = load ptr, ptr %a1 + %t1225 = load ptr, ptr %a1 + %t1226 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1227 = load { ptr, i64, i64 }, ptr %t1226 + %t1228 = extractvalue { ptr, i64, i64 } %t1227, 1 + %t1229 = icmp uge i64 0, %t1228 + br i1 %t1229, label %range8298, label %inrange8299 +range8298: + call void @finch_panic_index(ptr @.str.5376, i64 4997, i64 0, i64 %t1228) + unreachable +inrange8299: + %t1230 = extractvalue { ptr, i64, i64 } %t1227, 0 + %t1231 = getelementptr inbounds %S.ast.Node, ptr %t1230, i64 0 + %t1232 = load %S.ast.Node, ptr %t1231 + %t1233 = call %S.gen.Val @finch.gen.expr(ptr %t1225, %S.ast.Node %t1232) + %t1234 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5377, i64 3, i64 0 }) + %t1235 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1236 = load { ptr, i64, i64 }, ptr %t1235 + %t1237 = extractvalue { ptr, i64, i64 } %t1236, 1 + %t1238 = icmp uge i64 0, %t1237 + br i1 %t1238, label %range8300, label %inrange8301 +range8300: + call void @finch_panic_index(ptr @.str.5378, i64 4997, i64 0, i64 %t1237) + unreachable +inrange8301: + %t1239 = extractvalue { ptr, i64, i64 } %t1236, 0 + %t1240 = getelementptr inbounds %S.ast.Node, ptr %t1239, i64 0 + %t1241 = load %S.ast.Node, ptr %t1240 + %t1242 = call %S.gen.Val @finch.gen.coerce(ptr %t1224, %S.gen.Val %t1233, %S.ast.Type %t1234, %S.ast.Node %t1241, { ptr, i64, i64 } { ptr @.str.5379, i64 13, i64 0 }) + store %S.gen.Val %t1233, ptr %a1243 + call void @finch.drop.S_gen_Val(ptr %a1243) + store %S.ast.Type %t1234, ptr %a1244 + call void @finch.drop.S_ast_Type(ptr %a1244) + store %S.gen.Val %t1242, ptr %a1245 + %t1246 = load ptr, ptr %a1 + %t1247 = getelementptr inbounds %S.gen.Val, ptr %a1245, i32 0, i32 0 + %t1248 = load { ptr, i64, i64 }, ptr %t1247 + store { ptr, i64, i64 } { ptr @.str.5380, i64 10, i64 0 }, ptr %a1250 + store { ptr, i64, i64 } %t1248, ptr %a1251 + call void @finch_str_concat(ptr %a1249, ptr %a1250, ptr %a1251) + %t1252 = load { ptr, i64, i64 }, ptr %a1249 + store { ptr, i64, i64 } %t1252, ptr %a1254 + store { ptr, i64, i64 } { ptr @.str.5381, i64 7, i64 0 }, ptr %a1255 + call void @finch_str_concat(ptr %a1253, ptr %a1254, ptr %a1255) + store { ptr, i64, i64 } %t1252, ptr %a1256 + call void @finch_str_drop(ptr %a1256) + %t1257 = load { ptr, i64, i64 }, ptr %a1253 + %t1258 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1246, { ptr, i64, i64 } %t1257) + store { ptr, i64, i64 } %t1257, ptr %a1259 + call void @finch_str_drop(ptr %a1259) + store { ptr, i64, i64 } %t1258, ptr %a1260 + %t1261 = load ptr, ptr %a1 + %t1262 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1261, { ptr, i64, i64 } { ptr @.str.5382, i64 26, i64 0 }) + store { ptr, i64, i64 } %t1262, ptr %a1263 + %t1264 = load ptr, ptr %a1 + %t1265 = load { ptr, i64, i64 }, ptr %a1260 + store { ptr, i64, i64 } { ptr @.str.5383, i64 20, i64 0 }, ptr %a1267 + store { ptr, i64, i64 } %t1265, ptr %a1268 + call void @finch_str_concat(ptr %a1266, ptr %a1267, ptr %a1268) + %t1269 = load { ptr, i64, i64 }, ptr %a1266 + store { ptr, i64, i64 } %t1269, ptr %a1271 + store { ptr, i64, i64 } { ptr @.str.5384, i64 1, i64 0 }, ptr %a1272 + call void @finch_str_concat(ptr %a1270, ptr %a1271, ptr %a1272) + store { ptr, i64, i64 } %t1269, ptr %a1273 + call void @finch_str_drop(ptr %a1273) + %t1274 = load { ptr, i64, i64 }, ptr %a1270 + call void @finch.gen.emit(ptr %t1264, { ptr, i64, i64 } %t1274) + store { ptr, i64, i64 } %t1274, ptr %a1275 + call void @finch_str_drop(ptr %a1275) + %t1276 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5385, i64 4, i64 0 }) + %t1277 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1276, 1 + call void @finch_str_drop(ptr %a1263) + call void @finch_str_drop(ptr %a1260) + call void @finch.drop.S_gen_Val(ptr %a1245) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1277 +endif8297: + %t1278 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1278, ptr %a1279 + store { ptr, i64, i64 } { ptr @.str.5386, i64 5, i64 0 }, ptr %a1280 + %t1281 = call i32 @finch_str_eq(ptr %a1279, ptr %a1280) + %t1282 = icmp ne i32 %t1281, 0 + br i1 %t1282, label %then8302, label %endif8304 +then8302: + %t1283 = load ptr, ptr %a1 + %t1284 = call %S.gen.Val @finch.gen.strConst(ptr %t1283, { ptr, i64, i64 } { ptr @.str.5387, i64 0, i64 0 }) + store %S.gen.Val %t1284, ptr %a1285 + %t1286 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1286, i32 0, i32 1 + %t1288 = load i64, ptr %t1287 + %t1289 = icmp sgt i64 %t1288, 0 + br i1 %t1289, label %then8305, label %endif8307 +then8305: + %t1290 = load ptr, ptr %a1 + %t1291 = load %S.ast.Node, ptr %a2 + %t1292 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1290, %S.ast.Node %t1291, i64 0, i64 1, { ptr, i64, i64 } %t1292) + %t1293 = load ptr, ptr %a1 + %t1294 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1295 = load { ptr, i64, i64 }, ptr %t1294 + %t1296 = extractvalue { ptr, i64, i64 } %t1295, 1 + %t1297 = icmp uge i64 0, %t1296 + br i1 %t1297, label %range8308, label %inrange8309 +range8308: + call void @finch_panic_index(ptr @.str.5388, i64 5007, i64 0, i64 %t1296) + unreachable +inrange8309: + %t1298 = extractvalue { ptr, i64, i64 } %t1295, 0 + %t1299 = getelementptr inbounds %S.ast.Node, ptr %t1298, i64 0 + %t1300 = load %S.ast.Node, ptr %t1299 + %t1301 = call %S.gen.Val @finch.gen.strArg(ptr %t1293, %S.ast.Node %t1300, { ptr, i64, i64 } { ptr @.str.5389, i64 12, i64 0 }) + %t1302 = load %S.gen.Val, ptr %a1285 + store %S.gen.Val %t1301, ptr %a1285 + store %S.gen.Val %t1302, ptr %a1303 + call void @finch.drop.S_gen_Val(ptr %a1303) + br label %endif8307 +endif8307: + %t1304 = load ptr, ptr %a1 + %t1305 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t1304) + store { ptr, i64, i64 } %t1305, ptr %a1306 + %t1307 = load ptr, ptr %a1 + %t1308 = load { ptr, i64, i64 }, ptr %a1306 + store { ptr, i64, i64 } { ptr @.str.5390, i64 27, i64 0 }, ptr %a1310 + store { ptr, i64, i64 } %t1308, ptr %a1311 + call void @finch_str_concat(ptr %a1309, ptr %a1310, ptr %a1311) + %t1312 = load { ptr, i64, i64 }, ptr %a1309 + store { ptr, i64, i64 } %t1312, ptr %a1314 + store { ptr, i64, i64 } { ptr @.str.5391, i64 6, i64 0 }, ptr %a1315 + call void @finch_str_concat(ptr %a1313, ptr %a1314, ptr %a1315) + store { ptr, i64, i64 } %t1312, ptr %a1316 + call void @finch_str_drop(ptr %a1316) + %t1317 = load { ptr, i64, i64 }, ptr %a1313 + %t1318 = load ptr, ptr %a1 + %t1319 = load %S.gen.Val, ptr %a1285 + %t1320 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t1318, %S.gen.Val %t1319) + store { ptr, i64, i64 } %t1317, ptr %a1322 + store { ptr, i64, i64 } %t1320, ptr %a1323 + call void @finch_str_concat(ptr %a1321, ptr %a1322, ptr %a1323) + store { ptr, i64, i64 } %t1317, ptr %a1324 + call void @finch_str_drop(ptr %a1324) + store { ptr, i64, i64 } %t1320, ptr %a1325 + call void @finch_str_drop(ptr %a1325) + %t1326 = load { ptr, i64, i64 }, ptr %a1321 + store { ptr, i64, i64 } %t1326, ptr %a1328 + store { ptr, i64, i64 } { ptr @.str.5392, i64 1, i64 0 }, ptr %a1329 + call void @finch_str_concat(ptr %a1327, ptr %a1328, ptr %a1329) + store { ptr, i64, i64 } %t1326, ptr %a1330 + call void @finch_str_drop(ptr %a1330) + %t1331 = load { ptr, i64, i64 }, ptr %a1327 + call void @finch.gen.emit(ptr %t1307, { ptr, i64, i64 } %t1331) + store { ptr, i64, i64 } %t1331, ptr %a1332 + call void @finch_str_drop(ptr %a1332) + %t1333 = load ptr, ptr %a1 + %t1334 = load %S.gen.Val, ptr %a1285 + call void @finch.gen.release(ptr %t1333, %S.gen.Val %t1334) + %t1335 = load ptr, ptr %a1 + %t1336 = load { ptr, i64, i64 }, ptr %a1306 + %t1337 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1335, { ptr, i64, i64 } { ptr @.str.5393, i64 17, i64 0 }, { ptr, i64, i64 } %t1336) + %t1338 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1337, 0 + %t1339 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5394, i64 3, i64 0 }) + %t1340 = insertvalue %S.gen.Val %t1338, %S.ast.Type %t1339, 1 + %t1341 = insertvalue %S.gen.Val %t1340, i1 true, 2 + call void @finch_str_drop(ptr %a1306) + call void @finch.drop.S_gen_Val(ptr %a1285) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1341 +endif8304: + %t1342 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1342, ptr %a1343 + store { ptr, i64, i64 } { ptr @.str.5395, i64 3, i64 0 }, ptr %a1344 + %t1345 = call i32 @finch_str_eq(ptr %a1343, ptr %a1344) + %t1346 = icmp ne i32 %t1345, 0 + br i1 %t1346, label %then8310, label %endif8312 +then8310: + %t1347 = load ptr, ptr %a1 + %t1348 = load %S.ast.Node, ptr %a2 + %t1349 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1347, %S.ast.Node %t1348, i64 0, i64 1, { ptr, i64, i64 } %t1349) + %t1350 = load ptr, ptr %a1 + %t1351 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1352 = load { ptr, i64, i64 }, ptr %t1351 + %t1353 = extractvalue { ptr, i64, i64 } %t1352, 1 + %t1354 = icmp uge i64 0, %t1353 + br i1 %t1354, label %range8313, label %inrange8314 +range8313: + call void @finch_panic_index(ptr @.str.5396, i64 5016, i64 0, i64 %t1353) + unreachable +inrange8314: + %t1355 = extractvalue { ptr, i64, i64 } %t1352, 0 + %t1356 = getelementptr inbounds %S.ast.Node, ptr %t1355, i64 0 + %t1357 = load %S.ast.Node, ptr %t1356 + %t1358 = call %S.gen.Val @finch.gen.expr(ptr %t1350, %S.ast.Node %t1357) + store %S.gen.Val %t1358, ptr %a1359 + %t1360 = load ptr, ptr %a1 + %t1361 = load ptr, ptr %a1 + %t1362 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 + %t1363 = load %S.ast.Type, ptr %t1362 + %t1364 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1361, %S.ast.Type %t1363) + store { ptr, i64, i64 } { ptr @.str.5397, i64 26, i64 0 }, ptr %a1366 + store { ptr, i64, i64 } %t1364, ptr %a1367 + call void @finch_str_concat(ptr %a1365, ptr %a1366, ptr %a1367) + store { ptr, i64, i64 } %t1364, ptr %a1368 + call void @finch_str_drop(ptr %a1368) + %t1369 = load { ptr, i64, i64 }, ptr %a1365 + store { ptr, i64, i64 } %t1369, ptr %a1371 + store { ptr, i64, i64 } { ptr @.str.5398, i64 1, i64 0 }, ptr %a1372 + call void @finch_str_concat(ptr %a1370, ptr %a1371, ptr %a1372) + store { ptr, i64, i64 } %t1369, ptr %a1373 + call void @finch_str_drop(ptr %a1373) + %t1374 = load { ptr, i64, i64 }, ptr %a1370 + %t1375 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1360, { ptr, i64, i64 } %t1374) + store { ptr, i64, i64 } %t1374, ptr %a1376 + call void @finch_str_drop(ptr %a1376) + store { ptr, i64, i64 } %t1375, ptr %a1377 + %t1378 = load ptr, ptr %a1 + %t1379 = load ptr, ptr %a1 + %t1380 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 + %t1381 = load %S.ast.Type, ptr %t1380 + %t1382 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t1379, %S.ast.Type %t1381) + %t1383 = load ptr, ptr %a1 + %t1384 = load %S.gen.Val, ptr %a1359 + %t1385 = call { ptr, i64, i64 } @finch.gen.own(ptr %t1383, %S.gen.Val %t1384) + %t1386 = load { ptr, i64, i64 }, ptr %a1377 + call void @finch.gen.store(ptr %t1378, { ptr, i64, i64 } %t1382, { ptr, i64, i64 } %t1385, { ptr, i64, i64 } %t1386) + store { ptr, i64, i64 } %t1382, ptr %a1387 + call void @finch_str_drop(ptr %a1387) + store { ptr, i64, i64 } %t1385, ptr %a1388 + call void @finch_str_drop(ptr %a1388) + %t1389 = load { ptr, i64, i64 }, ptr %a1377 + store { ptr, i64, i64 } %t1389, ptr %a1390 + call void @finch_str_copy(ptr %a1391, ptr %a1390) + %t1392 = load { ptr, i64, i64 }, ptr %a1391 + %t1393 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1392, 0 + %t1394 = getelementptr inbounds %S.gen.Val, ptr %a1359, i32 0, i32 1 + %t1395 = load %S.ast.Type, ptr %t1394 + %t1396 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t1395) + %t1397 = insertvalue %S.gen.Val %t1393, %S.ast.Type %t1396, 1 + call void @finch_str_drop(ptr %a1377) + call void @finch.drop.S_gen_Val(ptr %a1359) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1397 +endif8312: + %t1398 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1398, ptr %a1399 + store { ptr, i64, i64 } { ptr @.str.5399, i64 4, i64 0 }, ptr %a1400 + %t1401 = call i32 @finch_str_eq(ptr %a1399, ptr %a1400) + %t1402 = icmp ne i32 %t1401, 0 + br i1 %t1402, label %then8315, label %endif8317 +then8315: + %t1403 = load ptr, ptr %a1 + %t1404 = load %S.ast.Node, ptr %a2 + %t1405 = load { ptr, i64, i64 }, ptr %a8 + call void @finch.gen.checkArgs(ptr %t1403, %S.ast.Node %t1404, i64 0, i64 1, { ptr, i64, i64 } %t1405) + %t1406 = load ptr, ptr %a1 + %t1407 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1408 = load { ptr, i64, i64 }, ptr %t1407 + %t1409 = extractvalue { ptr, i64, i64 } %t1408, 1 + %t1410 = icmp uge i64 0, %t1409 + br i1 %t1410, label %range8318, label %inrange8319 +range8318: + call void @finch_panic_index(ptr @.str.5400, i64 5023, i64 0, i64 %t1409) + unreachable +inrange8319: + %t1411 = extractvalue { ptr, i64, i64 } %t1408, 0 + %t1412 = getelementptr inbounds %S.ast.Node, ptr %t1411, i64 0 + %t1413 = load %S.ast.Node, ptr %t1412 + %t1414 = call %S.gen.Val @finch.gen.expr(ptr %t1406, %S.ast.Node %t1413) + store %S.gen.Val %t1414, ptr %a1415 + %t1416 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1417 = getelementptr inbounds %S.ast.Type, ptr %t1416, i32 0, i32 0 + %t1418 = load { ptr, i64, i64 }, ptr %t1417 + store { ptr, i64, i64 } %t1418, ptr %a1419 + store { ptr, i64, i64 } { ptr @.str.5401, i64 3, i64 0 }, ptr %a1420 + %t1421 = call i32 @finch_str_eq(ptr %a1419, ptr %a1420) + %t1422 = icmp eq i32 %t1421, 0 + br i1 %t1422, label %then8320, label %endif8322 +then8320: + %t1423 = load ptr, ptr %a1 + %t1424 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1425 = load { ptr, i64, i64 }, ptr %t1424 + %t1426 = extractvalue { ptr, i64, i64 } %t1425, 1 + %t1427 = icmp uge i64 0, %t1426 + br i1 %t1427, label %range8323, label %inrange8324 +range8323: + call void @finch_panic_index(ptr @.str.5402, i64 5025, i64 0, i64 %t1426) + unreachable +inrange8324: + %t1428 = extractvalue { ptr, i64, i64 } %t1425, 0 + %t1429 = getelementptr inbounds %S.ast.Node, ptr %t1428, i64 0 + %t1430 = load %S.ast.Node, ptr %t1429 + call void @finch.gen.fail(ptr %t1423, %S.ast.Node %t1430, { ptr, i64, i64 } { ptr @.str.5403, i64 119, i64 0 }) + br label %endif8322 +endif8322: + %t1431 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1432 = getelementptr inbounds %S.ast.Type, ptr %t1431, i32 0, i32 1 + %t1433 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1432, i32 0, i32 1 + %t1434 = load i64, ptr %t1433 + %t1435 = icmp sgt i64 %t1434, 0 + br label %logic.from8325 +logic.from8325: + br i1 %t1435, label %logic.rhs8326, label %logic.end8327 +logic.rhs8326: + %t1436 = load ptr, ptr %a1 + %t1437 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1438 = getelementptr inbounds %S.ast.Type, ptr %t1437, i32 0, i32 1 + %t1439 = load { ptr, i64, i64 }, ptr %t1438 + %t1440 = extractvalue { ptr, i64, i64 } %t1439, 1 + %t1441 = icmp uge i64 0, %t1440 + br i1 %t1441, label %range8328, label %inrange8329 +range8328: + call void @finch_panic_index(ptr @.str.5404, i64 5027, i64 0, i64 %t1440) + unreachable +inrange8329: + %t1442 = extractvalue { ptr, i64, i64 } %t1439, 0 + %t1443 = getelementptr inbounds %S.ast.Type, ptr %t1442, i64 0 + %t1444 = load %S.ast.Type, ptr %t1443 + %t1445 = call i1 @finch.gen.owning(ptr %t1436, %S.ast.Type %t1444) + br label %logic.rend8330 +logic.rend8330: + br label %logic.end8327 +logic.end8327: + %t1446 = phi i1 [ false, %logic.from8325 ], [ %t1445, %logic.rend8330 ] + br i1 %t1446, label %then8331, label %endif8333 +then8331: + %t1447 = load ptr, ptr %a1 + %t1448 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1447, { ptr, i64, i64 } { ptr @.str.5405, i64 9, i64 0 }) + store { ptr, i64, i64 } %t1448, ptr %a1449 + %t1450 = load ptr, ptr %a1 + %t1451 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t1450, { ptr, i64, i64 } { ptr @.str.5406, i64 9, i64 0 }) + store { ptr, i64, i64 } %t1451, ptr %a1452 + %t1453 = load ptr, ptr %a1 + %t1454 = load ptr, ptr %a1 + %t1455 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 + %t1456 = load { ptr, i64, i64 }, ptr %t1455 + store { ptr, i64, i64 } { ptr @.str.5407, i64 12, i64 0 }, ptr %a1458 + store { ptr, i64, i64 } %t1456, ptr %a1459 + call void @finch_str_concat(ptr %a1457, ptr %a1458, ptr %a1459) + %t1460 = load { ptr, i64, i64 }, ptr %a1457 + store { ptr, i64, i64 } %t1460, ptr %a1462 + store { ptr, i64, i64 } { ptr @.str.5408, i64 6, i64 0 }, ptr %a1463 + call void @finch_str_concat(ptr %a1461, ptr %a1462, ptr %a1463) + store { ptr, i64, i64 } %t1460, ptr %a1464 + call void @finch_str_drop(ptr %a1464) + %t1465 = load { ptr, i64, i64 }, ptr %a1461 + %t1466 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1454, { ptr, i64, i64 } %t1465) + store { ptr, i64, i64 } %t1465, ptr %a1467 + call void @finch_str_drop(ptr %a1467) + %t1468 = load { ptr, i64, i64 }, ptr %a1452 + %t1469 = load { ptr, i64, i64 }, ptr %a1449 + call void @finch.gen.condBr(ptr %t1453, { ptr, i64, i64 } %t1466, { ptr, i64, i64 } %t1468, { ptr, i64, i64 } %t1469) + store { ptr, i64, i64 } %t1466, ptr %a1470 + call void @finch_str_drop(ptr %a1470) + %t1471 = load ptr, ptr %a1 + %t1472 = load { ptr, i64, i64 }, ptr %a1449 + call void @finch.gen.label(ptr %t1471, { ptr, i64, i64 } %t1472) + %t1473 = load ptr, ptr %a1 + %t1474 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 + %t1475 = load { ptr, i64, i64 }, ptr %t1474 + %t1476 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 1 + %t1477 = getelementptr inbounds %S.ast.Type, ptr %t1476, i32 0, i32 1 + %t1478 = load { ptr, i64, i64 }, ptr %t1477 + %t1479 = extractvalue { ptr, i64, i64 } %t1478, 1 + %t1480 = icmp uge i64 0, %t1479 + br i1 %t1480, label %range8334, label %inrange8335 +range8334: + call void @finch_panic_index(ptr @.str.5409, i64 5032, i64 0, i64 %t1479) + unreachable +inrange8335: + %t1481 = extractvalue { ptr, i64, i64 } %t1478, 0 + %t1482 = getelementptr inbounds %S.ast.Type, ptr %t1481, i64 0 + %t1483 = load %S.ast.Type, ptr %t1482 + call void @finch.gen.dropAt(ptr %t1473, { ptr, i64, i64 } %t1475, %S.ast.Type %t1483) + %t1484 = load ptr, ptr %a1 + %t1485 = load { ptr, i64, i64 }, ptr %a1452 + call void @finch.gen.br(ptr %t1484, { ptr, i64, i64 } %t1485) + %t1486 = load ptr, ptr %a1 + %t1487 = load { ptr, i64, i64 }, ptr %a1452 + call void @finch.gen.label(ptr %t1486, { ptr, i64, i64 } %t1487) + call void @finch_str_drop(ptr %a1452) + call void @finch_str_drop(ptr %a1449) + br label %endif8333 +endif8333: + %t1488 = load ptr, ptr %a1 + %t1489 = getelementptr inbounds %S.gen.Val, ptr %a1415, i32 0, i32 0 + %t1490 = load { ptr, i64, i64 }, ptr %t1489 + store { ptr, i64, i64 } { ptr @.str.5410, i64 20, i64 0 }, ptr %a1492 + store { ptr, i64, i64 } %t1490, ptr %a1493 + call void @finch_str_concat(ptr %a1491, ptr %a1492, ptr %a1493) + %t1494 = load { ptr, i64, i64 }, ptr %a1491 + store { ptr, i64, i64 } %t1494, ptr %a1496 + store { ptr, i64, i64 } { ptr @.str.5411, i64 1, i64 0 }, ptr %a1497 + call void @finch_str_concat(ptr %a1495, ptr %a1496, ptr %a1497) + store { ptr, i64, i64 } %t1494, ptr %a1498 + call void @finch_str_drop(ptr %a1498) + %t1499 = load { ptr, i64, i64 }, ptr %a1495 + call void @finch.gen.emit(ptr %t1488, { ptr, i64, i64 } %t1499) + store { ptr, i64, i64 } %t1499, ptr %a1500 + call void @finch_str_drop(ptr %a1500) + %t1501 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5412, i64 4, i64 0 }) + %t1502 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1501, 1 + call void @finch.drop.S_gen_Val(ptr %a1415) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1502 +endif8317: + %t1503 = load ptr, ptr %a1 + %t1504 = load ptr, ptr %a1 + %t1505 = icmp eq ptr %t1504, null + br i1 %t1505, label %panic8336, label %ok8337 +panic8336: + call void @finch_panic(ptr @.str.5413, i64 5039, ptr @.str.5414) + unreachable +ok8337: + %t1506 = getelementptr inbounds %S.gen.Gen, ptr %t1504, i32 0, i32 14 + %t1507 = load { ptr, i64, i64 }, ptr %t1506 + %t1508 = load { ptr, i64, i64 }, ptr %a8 + %t1509 = call i64 @finch.gen.findFn(ptr %t1503, { ptr, i64, i64 } %t1507, { ptr, i64, i64 } %t1508) + store i64 %t1509, ptr %a1510 + %t1511 = load i64, ptr %a1510 + %t1512 = icmp sge i64 %t1511, 0 + br i1 %t1512, label %then8338, label %endif8340 +then8338: + %t1513 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t1514 = getelementptr inbounds %S.ast.Type, ptr %t1513, i32 0, i32 1 + %t1515 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1514, i32 0, i32 1 + %t1516 = load i64, ptr %t1515 + %t1517 = icmp sgt i64 %t1516, 0 + br i1 %t1517, label %then8341, label %endif8343 +then8341: + %t1518 = load ptr, ptr %a1 + %t1519 = load %S.ast.Node, ptr %a2 + %t1520 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5415, i64 1, i64 0 }, ptr %a1522 + store { ptr, i64, i64 } %t1520, ptr %a1523 + call void @finch_str_concat(ptr %a1521, ptr %a1522, ptr %a1523) + %t1524 = load { ptr, i64, i64 }, ptr %a1521 + store { ptr, i64, i64 } %t1524, ptr %a1526 + store { ptr, i64, i64 } { ptr @.str.5416, i64 47, i64 0 }, ptr %a1527 + call void @finch_str_concat(ptr %a1525, ptr %a1526, ptr %a1527) + store { ptr, i64, i64 } %t1524, ptr %a1528 + call void @finch_str_drop(ptr %a1528) + %t1529 = load { ptr, i64, i64 }, ptr %a1525 + call void @finch.gen.fail(ptr %t1518, %S.ast.Node %t1519, { ptr, i64, i64 } %t1529) + store { ptr, i64, i64 } %t1529, ptr %a1530 + call void @finch_str_drop(ptr %a1530) + br label %endif8343 +endif8343: + %t1531 = load ptr, ptr %a1 + %t1532 = load i64, ptr %a1510 + %t1533 = load %S.ast.Node, ptr %a2 + %t1534 = load { ptr, i64, i64 }, ptr %a8 + %t1535 = call %S.gen.Val @finch.gen.callFn(ptr %t1531, i64 %t1532, %S.ast.Node %t1533, i64 0, { ptr, i64, i64 } %t1534, { ptr, i64, i64 } { ptr @.str.5417, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5418, i64 0, i64 0 }) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1535 +endif8340: + %t1536 = load ptr, ptr %a1 + %t1537 = load ptr, ptr %a1 + %t1538 = icmp eq ptr %t1537, null + br i1 %t1538, label %panic8344, label %ok8345 +panic8344: + call void @finch_panic(ptr @.str.5419, i64 5046, ptr @.str.5420) + unreachable +ok8345: + %t1539 = getelementptr inbounds %S.gen.Gen, ptr %t1537, i32 0, i32 14 + %t1540 = load { ptr, i64, i64 }, ptr %t1539 + %t1541 = load { ptr, i64, i64 }, ptr %a8 + %t1542 = call i64 @finch.gen.findTemplate(ptr %t1536, { ptr, i64, i64 } %t1540, { ptr, i64, i64 } %t1541, { ptr, i64, i64 } { ptr @.str.5421, i64 0, i64 0 }, i1 false) + store i64 %t1542, ptr %a1543 + %t1544 = load i64, ptr %a1543 + %t1545 = icmp sge i64 %t1544, 0 + br i1 %t1545, label %then8346, label %endif8348 +then8346: + %t1546 = load ptr, ptr %a1 + %t1547 = load %S.ast.Node, ptr %a2 + %t1548 = load i64, ptr %a1543 + %t1549 = load { ptr, i64, i64 }, ptr %a8 + %t1550 = call %S.gen.Val @finch.gen.genericCall(ptr %t1546, %S.ast.Node %t1547, i64 %t1548, i64 0, { ptr, i64, i64 } %t1549) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1550 +endif8348: + %t1551 = load ptr, ptr %a1 + %t1552 = load ptr, ptr %a1 + %t1553 = icmp eq ptr %t1552, null + br i1 %t1553, label %panic8349, label %ok8350 +panic8349: + call void @finch_panic(ptr @.str.5422, i64 5050, ptr @.str.5423) + unreachable +ok8350: + %t1554 = getelementptr inbounds %S.gen.Gen, ptr %t1552, i32 0, i32 14 + %t1555 = load { ptr, i64, i64 }, ptr %t1554 + %t1556 = load { ptr, i64, i64 }, ptr %a8 + %t1557 = call i64 @finch.gen.findTemplate(ptr %t1551, { ptr, i64, i64 } %t1555, { ptr, i64, i64 } %t1556, { ptr, i64, i64 } { ptr @.str.5424, i64 0, i64 0 }, i1 true) + %t1558 = icmp sge i64 %t1557, 0 + br i1 %t1558, label %then8351, label %endif8353 +then8351: + %t1559 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t1560 = getelementptr inbounds %S.ast.Type, ptr %t1559, i32 0, i32 1 + %t1561 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1560, i32 0, i32 1 + %t1562 = load i64, ptr %t1561 + %t1563 = icmp eq i64 %t1562, 0 + br i1 %t1563, label %then8354, label %endif8356 +then8354: + %t1564 = load ptr, ptr %a1 + %t1565 = load %S.ast.Node, ptr %a2 + %t1566 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5425, i64 1, i64 0 }, ptr %a1568 + store { ptr, i64, i64 } %t1566, ptr %a1569 + call void @finch_str_concat(ptr %a1567, ptr %a1568, ptr %a1569) + %t1570 = load { ptr, i64, i64 }, ptr %a1567 + store { ptr, i64, i64 } %t1570, ptr %a1572 + store { ptr, i64, i64 } { ptr @.str.5426, i64 42, i64 0 }, ptr %a1573 + call void @finch_str_concat(ptr %a1571, ptr %a1572, ptr %a1573) + store { ptr, i64, i64 } %t1570, ptr %a1574 + call void @finch_str_drop(ptr %a1574) + %t1575 = load { ptr, i64, i64 }, ptr %a1571 + %t1576 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1575, ptr %a1578 + store { ptr, i64, i64 } %t1576, ptr %a1579 + call void @finch_str_concat(ptr %a1577, ptr %a1578, ptr %a1579) + store { ptr, i64, i64 } %t1575, ptr %a1580 + call void @finch_str_drop(ptr %a1580) + %t1581 = load { ptr, i64, i64 }, ptr %a1577 + store { ptr, i64, i64 } %t1581, ptr %a1583 + store { ptr, i64, i64 } { ptr @.str.5427, i64 10, i64 0 }, ptr %a1584 + call void @finch_str_concat(ptr %a1582, ptr %a1583, ptr %a1584) + store { ptr, i64, i64 } %t1581, ptr %a1585 + call void @finch_str_drop(ptr %a1585) + %t1586 = load { ptr, i64, i64 }, ptr %a1582 + call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1586) + store { ptr, i64, i64 } %t1586, ptr %a1587 + call void @finch_str_drop(ptr %a1587) + br label %endif8356 +endif8356: + store { ptr, i64, i64 } zeroinitializer, ptr %a1588 + %t1589 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 5 + %t1590 = getelementptr inbounds %S.ast.Type, ptr %t1589, i32 0, i32 1 + store i64 0, ptr %a1591 + br label %each.cond8357 +each.cond8357: + %t1592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1590, i32 0, i32 1 + %t1593 = load i64, ptr %t1592 + %t1594 = load i64, ptr %a1591 + %t1595 = icmp slt i64 %t1594, %t1593 + br i1 %t1595, label %each.body8358, label %each.end8360 +each.body8358: + %t1596 = load ptr, ptr %t1590 + %t1597 = getelementptr inbounds %S.ast.Type, ptr %t1596, i64 %t1594 + %t1598 = load %S.ast.Type, ptr %t1597 + store %S.ast.Type %t1598, ptr %a1599 + %t1600 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1588, i32 0, i32 1 + %t1601 = load ptr, ptr %a1 + %t1602 = load %S.ast.Type, ptr %a1599 + %t1603 = load %S.ast.Node, ptr %a2 + %t1604 = call %S.ast.Type @finch.gen.resolve(ptr %t1601, %S.ast.Type %t1602, %S.ast.Node %t1603) + %t1605 = load i64, ptr %t1600 + %t1606 = add i64 %t1605, 1 + call void @finch_arr_reserve(ptr %a1588, i64 %t1606, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t1607 = load ptr, ptr %a1588 + %t1608 = getelementptr inbounds %S.ast.Type, ptr %t1607, i64 %t1605 + store %S.ast.Type %t1604, ptr %t1608 + store i64 %t1606, ptr %t1600 + br label %each.step8359 +each.step8359: + %t1609 = load i64, ptr %a1591 + %t1610 = add i64 %t1609, 1 + store i64 %t1610, ptr %a1591 + br label %each.cond8357 +each.end8360: + %t1611 = load ptr, ptr %a1 + %t1612 = load ptr, ptr %a1 + %t1613 = icmp eq ptr %t1612, null + br i1 %t1613, label %panic8361, label %ok8362 +panic8361: + call void @finch_panic(ptr @.str.5428, i64 5059, ptr @.str.5429) + unreachable +ok8362: + %t1614 = getelementptr inbounds %S.gen.Gen, ptr %t1612, i32 0, i32 14 + %t1615 = load { ptr, i64, i64 }, ptr %t1614 + %t1616 = load { ptr, i64, i64 }, ptr %a8 + %t1617 = load { ptr, i64, i64 }, ptr %a1588 + %t1618 = load %S.ast.Node, ptr %a2 + %t1619 = call %S.ast.Type @finch.gen.instStruct(ptr %t1611, { ptr, i64, i64 } %t1615, { ptr, i64, i64 } %t1616, { ptr, i64, i64 } %t1617, %S.ast.Node %t1618) + store %S.ast.Type %t1619, ptr %a1620 + %t1621 = load ptr, ptr %a1 + %t1622 = load ptr, ptr %a1 + %t1623 = getelementptr inbounds %S.ast.Type, ptr %a1620, i32 0, i32 3 + %t1624 = load { ptr, i64, i64 }, ptr %t1623 + %t1625 = getelementptr inbounds %S.ast.Type, ptr %a1620, i32 0, i32 2 + %t1626 = load { ptr, i64, i64 }, ptr %t1625 + %t1627 = call i64 @finch.gen.findStruct(ptr %t1622, { ptr, i64, i64 } %t1624, { ptr, i64, i64 } %t1626) + %t1628 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1629 = load { ptr, i64, i64 }, ptr %t1628 + %t1630 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t1631 = load { ptr, i64, i64 }, ptr %t1630 + %t1632 = load %S.ast.Node, ptr %a2 + %t1633 = call %S.gen.Val @finch.gen.construct(ptr %t1621, i64 %t1627, { ptr, i64, i64 } %t1629, { ptr, i64, i64 } %t1631, %S.ast.Node %t1632) + call void @finch.drop.S_ast_Type(ptr %a1620) + call void @finch.drop.arr_S_ast_Type(ptr %a1588) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1633 +endif8353: + %t1634 = load ptr, ptr %a1 + %t1635 = load ptr, ptr %a1 + %t1636 = icmp eq ptr %t1635, null + br i1 %t1636, label %panic8363, label %ok8364 +panic8363: + call void @finch_panic(ptr @.str.5430, i64 5062, ptr @.str.5431) + unreachable +ok8364: + %t1637 = getelementptr inbounds %S.gen.Gen, ptr %t1635, i32 0, i32 14 + %t1638 = load { ptr, i64, i64 }, ptr %t1637 + %t1639 = load { ptr, i64, i64 }, ptr %a8 + %t1640 = call i64 @finch.gen.findStruct(ptr %t1634, { ptr, i64, i64 } %t1638, { ptr, i64, i64 } %t1639) + store i64 %t1640, ptr %a1641 + %t1642 = load i64, ptr %a1641 + %t1643 = icmp sge i64 %t1642, 0 + br i1 %t1643, label %then8365, label %endif8367 +then8365: + %t1644 = load ptr, ptr %a1 + %t1645 = icmp eq ptr %t1644, null + br i1 %t1645, label %panic8368, label %ok8369 +panic8368: + call void @finch_panic(ptr @.str.5432, i64 5064, ptr @.str.5433) + unreachable +ok8369: + %t1646 = getelementptr inbounds %S.gen.Gen, ptr %t1644, i32 0, i32 16 + %t1647 = load i64, ptr %a1641 + %t1648 = load { ptr, i64, i64 }, ptr %t1646 + %t1649 = extractvalue { ptr, i64, i64 } %t1648, 1 + %t1650 = icmp uge i64 %t1647, %t1649 + br i1 %t1650, label %range8370, label %inrange8371 +range8370: + call void @finch_panic_index(ptr @.str.5434, i64 5064, i64 %t1647, i64 %t1649) + unreachable +inrange8371: + %t1651 = extractvalue { ptr, i64, i64 } %t1648, 0 + %t1652 = getelementptr inbounds %S.gen.StructDef, ptr %t1651, i64 %t1647 + %t1653 = load %S.gen.StructDef, ptr %t1652 + store %S.gen.StructDef %t1653, ptr %a1654 + call void @finch.copy.S_gen_StructDef(ptr %a1655, ptr %a1654) + %t1656 = load %S.gen.StructDef, ptr %a1655 + store %S.gen.StructDef %t1656, ptr %a1657 + %t1658 = load ptr, ptr %a1 + %t1659 = icmp eq ptr %t1658, null + br i1 %t1659, label %panic8372, label %ok8373 +panic8372: + call void @finch_panic(ptr @.str.5435, i64 5065, ptr @.str.5436) + unreachable +ok8373: + %t1660 = getelementptr inbounds %S.gen.Gen, ptr %t1658, i32 0, i32 28 + %t1661 = load i1, ptr %t1660 + br label %logic.from8374 +logic.from8374: + br i1 %t1661, label %logic.rhs8375, label %logic.end8376 +logic.rhs8375: + %t1662 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 2 + %t1663 = load i1, ptr %t1662 + %t1664 = xor i1 %t1663, true + br label %logic.rend8377 +logic.rend8377: + br label %logic.end8376 +logic.end8376: + %t1665 = phi i1 [ false, %logic.from8374 ], [ %t1664, %logic.rend8377 ] + br i1 %t1665, label %then8378, label %endif8380 +then8378: + %t1666 = load ptr, ptr %a1 + %t1667 = icmp eq ptr %t1666, null + br i1 %t1667, label %panic8381, label %ok8382 +panic8381: + call void @finch_panic(ptr @.str.5437, i64 5066, ptr @.str.5438) + unreachable +ok8382: + %t1668 = getelementptr inbounds %S.gen.Gen, ptr %t1666, i32 0, i32 0 + %t1669 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 13 + %t1670 = load i64, ptr %t1669 + %t1671 = load { ptr, i64, i64 }, ptr %t1668 + %t1672 = extractvalue { ptr, i64, i64 } %t1671, 1 + %t1673 = icmp uge i64 %t1670, %t1672 + br i1 %t1673, label %range8383, label %inrange8384 +range8383: + call void @finch_panic_index(ptr @.str.5439, i64 5066, i64 %t1670, i64 %t1672) + unreachable +inrange8384: + %t1674 = extractvalue { ptr, i64, i64 } %t1671, 0 + %t1675 = getelementptr inbounds %S.ast.Program, ptr %t1674, i64 %t1670 + %t1676 = getelementptr inbounds %S.ast.Program, ptr %t1675, i32 0, i32 6 + %t1677 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 14 + %t1678 = load i64, ptr %t1677 + %t1679 = load { ptr, i64, i64 }, ptr %t1676 + %t1680 = extractvalue { ptr, i64, i64 } %t1679, 1 + %t1681 = icmp uge i64 %t1678, %t1680 + br i1 %t1681, label %range8385, label %inrange8386 +range8385: + call void @finch_panic_index(ptr @.str.5440, i64 5066, i64 %t1678, i64 %t1680) + unreachable +inrange8386: + %t1682 = extractvalue { ptr, i64, i64 } %t1679, 0 + %t1683 = getelementptr inbounds %S.ast.Node, ptr %t1682, i64 %t1678 + %t1684 = load %S.ast.Node, ptr %t1683 + store %S.ast.Node %t1684, ptr %a1685 + call void @finch.copy.S_ast_Node(ptr %a1686, ptr %a1685) + %t1687 = load %S.ast.Node, ptr %a1686 + store %S.ast.Node %t1687, ptr %a1688 + %t1689 = load ptr, ptr %a1 + %t1690 = load %S.ast.Node, ptr %a2 + %t1691 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t1692 = load i64, ptr %t1691 + %t1693 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t1694 = load i64, ptr %t1693 + %t1695 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 1 + %t1696 = load { ptr, i64, i64 }, ptr %t1695 + store { ptr, i64, i64 } { ptr @.str.5441, i64 16, i64 0 }, ptr %a1698 + store { ptr, i64, i64 } %t1696, ptr %a1699 + call void @finch_str_concat(ptr %a1697, ptr %a1698, ptr %a1699) + %t1700 = load { ptr, i64, i64 }, ptr %a1697 + store { ptr, i64, i64 } %t1700, ptr %a1702 + store { ptr, i64, i64 } { ptr @.str.5442, i64 3, i64 0 }, ptr %a1703 + call void @finch_str_concat(ptr %a1701, ptr %a1702, ptr %a1703) + store { ptr, i64, i64 } %t1700, ptr %a1704 + call void @finch_str_drop(ptr %a1704) + %t1705 = load { ptr, i64, i64 }, ptr %a1701 + %t1706 = getelementptr inbounds %S.gen.StructDef, ptr %a1657, i32 0, i32 11 + %t1707 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1706, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5443, i64 2, i64 0 }, ptr %a1708 + call void @finch_str_join(ptr %a1709, ptr %t1706, ptr %a1708) + %t1710 = load { ptr, i64, i64 }, ptr %a1709 + store { ptr, i64, i64 } %t1705, ptr %a1712 + store { ptr, i64, i64 } %t1710, ptr %a1713 + call void @finch_str_concat(ptr %a1711, ptr %a1712, ptr %a1713) + store { ptr, i64, i64 } %t1705, ptr %a1714 + call void @finch_str_drop(ptr %a1714) + store { ptr, i64, i64 } %t1710, ptr %a1715 + call void @finch_str_drop(ptr %a1715) + %t1716 = load { ptr, i64, i64 }, ptr %a1711 + store { ptr, i64, i64 } %t1716, ptr %a1718 + store { ptr, i64, i64 } { ptr @.str.5444, i64 6, i64 0 }, ptr %a1719 + call void @finch_str_concat(ptr %a1717, ptr %a1718, ptr %a1719) + store { ptr, i64, i64 } %t1716, ptr %a1720 + call void @finch_str_drop(ptr %a1720) + %t1721 = load { ptr, i64, i64 }, ptr %a1717 + %t1722 = load ptr, ptr %a1 + %t1723 = icmp eq ptr %t1722, null + br i1 %t1723, label %panic8387, label %ok8388 +panic8387: + call void @finch_panic(ptr @.str.5445, i64 5067, ptr @.str.5446) + unreachable +ok8388: + %t1724 = getelementptr inbounds %S.gen.Gen, ptr %t1722, i32 0, i32 1 + %t1725 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 13 + %t1726 = load i64, ptr %t1725 + %t1727 = load { ptr, i64, i64 }, ptr %t1724 + %t1728 = extractvalue { ptr, i64, i64 } %t1727, 1 + %t1729 = icmp uge i64 %t1726, %t1728 + br i1 %t1729, label %range8389, label %inrange8390 +range8389: + call void @finch_panic_index(ptr @.str.5447, i64 5067, i64 %t1726, i64 %t1728) + unreachable +inrange8390: + %t1730 = extractvalue { ptr, i64, i64 } %t1727, 0 + %t1731 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1730, i64 %t1726 + %t1732 = load { ptr, i64, i64 }, ptr %t1731 + %t1733 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 11 + %t1734 = load i64, ptr %t1733 + %t1735 = getelementptr inbounds %S.ast.Node, ptr %a1688, i32 0, i32 12 + %t1736 = load i64, ptr %t1735 + call void @finch.gen.noteRef(ptr %t1689, %S.ast.Node %t1690, i64 %t1692, i64 %t1694, { ptr, i64, i64 } %t1721, { ptr, i64, i64 } %t1732, i64 %t1734, i64 %t1736) + store { ptr, i64, i64 } %t1721, ptr %a1737 + call void @finch_str_drop(ptr %a1737) + call void @finch.drop.S_ast_Node(ptr %a1688) + br label %endif8380 +endif8380: + %t1738 = load ptr, ptr %a1 + %t1739 = load i64, ptr %a1641 + %t1740 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1741 = load { ptr, i64, i64 }, ptr %t1740 + %t1742 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t1743 = load { ptr, i64, i64 }, ptr %t1742 + %t1744 = load %S.ast.Node, ptr %a2 + %t1745 = call %S.gen.Val @finch.gen.construct(ptr %t1738, i64 %t1739, { ptr, i64, i64 } %t1741, { ptr, i64, i64 } %t1743, %S.ast.Node %t1744) + call void @finch.drop.S_gen_StructDef(ptr %a1657) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1745 +endif8367: + %t1746 = load ptr, ptr %a1 + %t1747 = load ptr, ptr %a1 + %t1748 = icmp eq ptr %t1747, null + br i1 %t1748, label %panic8391, label %ok8392 +panic8391: + call void @finch_panic(ptr @.str.5448, i64 5071, ptr @.str.5449) + unreachable +ok8392: + %t1749 = getelementptr inbounds %S.gen.Gen, ptr %t1747, i32 0, i32 14 + %t1750 = load { ptr, i64, i64 }, ptr %t1749 + %t1751 = load { ptr, i64, i64 }, ptr %a8 + %t1752 = call i64 @finch.gen.findEnum(ptr %t1746, { ptr, i64, i64 } %t1750, { ptr, i64, i64 } %t1751) + store i64 %t1752, ptr %a1753 + %t1754 = load i64, ptr %a1753 + %t1755 = icmp sge i64 %t1754, 0 + br i1 %t1755, label %then8393, label %endif8395 +then8393: + %t1756 = load ptr, ptr %a1 + %t1757 = load %S.ast.Node, ptr %a2 + %t1758 = load i64, ptr %a1753 + %t1759 = call %S.gen.Val @finch.gen.enumFrom(ptr %t1756, %S.ast.Node %t1757, i64 %t1758) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1759 +endif8395: + %t1760 = load ptr, ptr %a1 + %t1761 = icmp eq ptr %t1760, null + br i1 %t1761, label %panic8396, label %ok8397 +panic8396: + call void @finch_panic(ptr @.str.5450, i64 5075, ptr @.str.5451) + unreachable +ok8397: + %t1762 = getelementptr inbounds %S.gen.Gen, ptr %t1760, i32 0, i32 26 + %t1763 = getelementptr inbounds %S.cimport.CImports, ptr %t1762, i32 0, i32 0 + %t1764 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1764, ptr %a1765 + %t1766 = call i64 @finch_map_find(ptr %t1763, ptr %a1765, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t1767 = icmp sge i64 %t1766, 0 + br i1 %t1767, label %then8398, label %endif8400 +then8398: + %t1768 = load ptr, ptr %a1 + %t1769 = load %S.ast.Node, ptr %a2 + %t1770 = load ptr, ptr %a1 + %t1771 = icmp eq ptr %t1770, null + br i1 %t1771, label %panic8401, label %ok8402 +panic8401: + call void @finch_panic(ptr @.str.5452, i64 5076, ptr @.str.5453) + unreachable +ok8402: + %t1772 = getelementptr inbounds %S.gen.Gen, ptr %t1770, i32 0, i32 26 + %t1773 = getelementptr inbounds %S.cimport.CImports, ptr %t1772, i32 0, i32 0 + %t1774 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t1774, ptr %a1775 + %t1776 = call i64 @finch_map_find(ptr %t1773, ptr %a1775, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t1777 = icmp slt i64 %t1776, 0 + br i1 %t1777, label %map.missing8403, label %map.found8404 +map.missing8403: + store { ptr, i64, i64 } zeroinitializer, ptr %a1778 + store { ptr, i64, i64 } %t1774, ptr %a1779 + call void @finch_buf_str(ptr %a1778, ptr %a1779, i32 1) + call void @finch_map_missing(ptr @.str.5454, i64 5076, ptr %a1778) + unreachable +map.found8404: + %t1780 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t1773, i32 0, i32 0 + %t1781 = load ptr, ptr %t1780 + %t1782 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1781, i64 %t1776 + %t1783 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t1782, i32 0, i32 2 + %t1784 = load %S.cimport.CFunc, ptr %t1783 + %t1785 = call %S.gen.Val @finch.gen.callC(ptr %t1768, %S.ast.Node %t1769, %S.cimport.CFunc %t1784) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1785 +endif8400: + %t1786 = load ptr, ptr %a1 + %t1787 = load { ptr, i64, i64 }, ptr %a8 + %t1788 = call i64 @finch.gen.findStruct(ptr %t1786, { ptr, i64, i64 } { ptr @.str.5455, i64 1, i64 0 }, { ptr, i64, i64 } %t1787) + store i64 %t1788, ptr %a1641 + %t1789 = load i64, ptr %a1641 + %t1790 = icmp sge i64 %t1789, 0 + br i1 %t1790, label %then8405, label %endif8407 +then8405: + %t1791 = load ptr, ptr %a1 + %t1792 = load i64, ptr %a1641 + %t1793 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1794 = load { ptr, i64, i64 }, ptr %t1793 + %t1795 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t1796 = load { ptr, i64, i64 }, ptr %t1795 + %t1797 = load %S.ast.Node, ptr %a2 + %t1798 = call %S.gen.Val @finch.gen.construct(ptr %t1791, i64 %t1792, { ptr, i64, i64 } %t1794, { ptr, i64, i64 } %t1796, %S.ast.Node %t1797) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val %t1798 +endif8407: + %t1799 = load ptr, ptr %a1 + %t1800 = load { ptr, i64, i64 }, ptr %a8 + %t1801 = call i64 @finch.gen.lookup(ptr %t1799, { ptr, i64, i64 } %t1800) + %t1802 = icmp sge i64 %t1801, 0 + br i1 %t1802, label %then8408, label %endif8410 +then8408: + %t1803 = load ptr, ptr %a1 + %t1804 = load %S.ast.Node, ptr %a2 + %t1805 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5456, i64 1, i64 0 }, ptr %a1807 + store { ptr, i64, i64 } %t1805, ptr %a1808 + call void @finch_str_concat(ptr %a1806, ptr %a1807, ptr %a1808) + %t1809 = load { ptr, i64, i64 }, ptr %a1806 + store { ptr, i64, i64 } %t1809, ptr %a1811 + store { ptr, i64, i64 } { ptr @.str.5457, i64 31, i64 0 }, ptr %a1812 + call void @finch_str_concat(ptr %a1810, ptr %a1811, ptr %a1812) + store { ptr, i64, i64 } %t1809, ptr %a1813 + call void @finch_str_drop(ptr %a1813) + %t1814 = load { ptr, i64, i64 }, ptr %a1810 + call void @finch.gen.fail(ptr %t1803, %S.ast.Node %t1804, { ptr, i64, i64 } %t1814) + store { ptr, i64, i64 } %t1814, ptr %a1815 + call void @finch_str_drop(ptr %a1815) + br label %endif8410 +endif8410: + %t1816 = load ptr, ptr %a1 + %t1817 = load %S.ast.Node, ptr %a2 + %t1818 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.5458, i64 28, i64 0 }, ptr %a1820 + store { ptr, i64, i64 } %t1818, ptr %a1821 + call void @finch_str_concat(ptr %a1819, ptr %a1820, ptr %a1821) + %t1822 = load { ptr, i64, i64 }, ptr %a1819 + store { ptr, i64, i64 } %t1822, ptr %a1824 + store { ptr, i64, i64 } { ptr @.str.5459, i64 1, i64 0 }, ptr %a1825 + call void @finch_str_concat(ptr %a1823, ptr %a1824, ptr %a1825) + store { ptr, i64, i64 } %t1822, ptr %a1826 + call void @finch_str_drop(ptr %a1826) + %t1827 = load { ptr, i64, i64 }, ptr %a1823 + %t1828 = load { ptr, i64, i64 }, ptr %a8 + %t1829 = call { ptr, i64, i64 } @finch.gen.headerHint({ ptr, i64, i64 } %t1828) + store { ptr, i64, i64 } %t1827, ptr %a1831 + store { ptr, i64, i64 } %t1829, ptr %a1832 + call void @finch_str_concat(ptr %a1830, ptr %a1831, ptr %a1832) + store { ptr, i64, i64 } %t1827, ptr %a1833 + call void @finch_str_drop(ptr %a1833) + store { ptr, i64, i64 } %t1829, ptr %a1834 + call void @finch_str_drop(ptr %a1834) + %t1835 = load { ptr, i64, i64 }, ptr %a1830 + call void @finch.gen.fail(ptr %t1816, %S.ast.Node %t1817, { ptr, i64, i64 } %t1835) + store { ptr, i64, i64 } %t1835, ptr %a1836 + call void @finch_str_drop(ptr %a1836) + call void @finch_str_drop(ptr %a570) + call void @finch_str_drop(ptr %a8) + ret %S.gen.Val zeroinitializer +} + +define internal %S.gen.Val @finch.gen.callFn(ptr %p0, i64 %p1, %S.ast.Node %p2, i64 %p3, { ptr, i64, i64 } %p4, { ptr, i64, i64 } %p5, { ptr, i64, i64 } %p6) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca %S.gen.FnSig, align 16 + %a19 = alloca %S.gen.FnSig, align 16 + %a21 = alloca %S.gen.FnSig, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca i64, align 16 + %a70 = alloca i64, align 16 + %a83 = alloca %S.ast.Node, align 16 + %a84 = alloca %S.ast.Node, align 16 + %a86 = alloca %S.ast.Node, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca %S.gen.Val, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca %S.gen.Val, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca %S.ast.Type, align 16 + %a166 = alloca %S.ast.Type, align 16 + %a171 = alloca %S.gen.Val, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca %S.gen.Val, align 16 + %a204 = alloca %S.gen.Val, align 16 + %a220 = alloca %S.gen.Val, align 16 + %a221 = alloca i64, align 16 + %a229 = alloca %S.gen.Val, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + store i64 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store { ptr, i64, i64 } %p5, ptr %a6 + store { ptr, i64, i64 } %p6, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic8411, label %ok8412 +panic8411: + call void @finch_panic(ptr @.str.5460, i64 5090, ptr @.str.5461) + unreachable +ok8412: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 15 + %t11 = load i64, ptr %a2 + %t12 = load { ptr, i64, i64 }, ptr %t10 + %t13 = extractvalue { ptr, i64, i64 } %t12, 1 + %t14 = icmp uge i64 %t11, %t13 + br i1 %t14, label %range8413, label %inrange8414 +range8413: + call void @finch_panic_index(ptr @.str.5462, i64 5090, i64 %t11, i64 %t13) + unreachable +inrange8414: + %t15 = extractvalue { ptr, i64, i64 } %t12, 0 + %t16 = getelementptr inbounds %S.gen.FnSig, ptr %t15, i64 %t11 + %t17 = load %S.gen.FnSig, ptr %t16 + store %S.gen.FnSig %t17, ptr %a18 + call void @finch.copy.S_gen_FnSig(ptr %a19, ptr %a18) + %t20 = load %S.gen.FnSig, ptr %a19 + store %S.gen.FnSig %t20, ptr %a21 + %t22 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 0 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = icmp eq i64 %t24, 0 + br label %logic.from8415 +logic.from8415: + br i1 %t25, label %logic.rhs8416, label %logic.end8417 +logic.rhs8416: + %t26 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 1 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.5463, i64 4, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br label %logic.rend8418 +logic.rend8418: + br label %logic.end8417 +logic.end8417: + %t32 = phi i1 [ false, %logic.from8415 ], [ %t31, %logic.rend8418 ] + br i1 %t32, label %then8419, label %endif8421 +then8419: + %t33 = load ptr, ptr %a1 + %t34 = load %S.ast.Node, ptr %a3 + call void @finch.gen.fail(ptr %t33, %S.ast.Node %t34, { ptr, i64, i64 } { ptr @.str.5464, i64 52, i64 0 }) + br label %endif8421 +endif8421: + %t35 = load ptr, ptr %a1 + %t36 = load %S.ast.Node, ptr %a3 + %t37 = load %S.gen.FnSig, ptr %a21 + call void @finch.gen.noteCall(ptr %t35, %S.ast.Node %t36, %S.gen.FnSig %t37) + %t38 = load ptr, ptr %a1 + %t39 = load %S.ast.Node, ptr %a3 + %t40 = load i64, ptr %a4 + %t41 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i32 0, i32 1 + %t43 = load i64, ptr %t42 + %t44 = load { ptr, i64, i64 }, ptr %a5 + call void @finch.gen.checkArgs(ptr %t38, %S.ast.Node %t39, i64 %t40, i64 %t43, { ptr, i64, i64 } %t44) + store { ptr, i64, i64 } zeroinitializer, ptr %a45 + %t46 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 2 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 + %t48 = load i64, ptr %t47 + %t49 = icmp sgt i64 %t48, 0 + br i1 %t49, label %then8422, label %endif8424 +then8422: + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 + %t51 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.5465, i64 4, i64 0 }, ptr %a53 + store { ptr, i64, i64 } %t51, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a52 + %t56 = load i64, ptr %t50 + %t57 = add i64 %t56, 1 + call void @finch_arr_reserve(ptr %a45, i64 %t57, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t58 = load ptr, ptr %a45 + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 %t56 + store { ptr, i64, i64 } %t55, ptr %t59 + store i64 %t57, ptr %t50 + br label %endif8424 +endif8424: + store { ptr, i64, i64 } zeroinitializer, ptr %a60 + %t61 = load ptr, ptr %a1 + %t62 = icmp eq ptr %t61, null + br i1 %t62, label %panic8425, label %ok8426 +panic8425: + call void @finch_panic(ptr @.str.5466, i64 5101, ptr @.str.5467) + unreachable +ok8426: + %t63 = getelementptr inbounds %S.gen.Gen, ptr %t61, i32 0, i32 11 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t63, i32 0, i32 1 + %t65 = load i64, ptr %t64 + store i64 %t65, ptr %a66 + %t67 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i32 0, i32 1 + %t69 = load i64, ptr %t68 + store i64 0, ptr %a70 + br label %for.cond8427 +for.cond8427: + %t71 = load i64, ptr %a70 + %t72 = icmp slt i64 %t71, %t69 + br i1 %t72, label %for.body8428, label %for.end8430 +for.body8428: + %t73 = getelementptr inbounds %S.ast.Node, ptr %a3, i32 0, i32 9 + %t74 = load i64, ptr %a4 + %t75 = load i64, ptr %a70 + %t76 = add i64 %t74, %t75 + %t77 = load { ptr, i64, i64 }, ptr %t73 + %t78 = extractvalue { ptr, i64, i64 } %t77, 1 + %t79 = icmp uge i64 %t76, %t78 + br i1 %t79, label %range8431, label %inrange8432 +range8431: + call void @finch_panic_index(ptr @.str.5468, i64 5103, i64 %t76, i64 %t78) + unreachable +inrange8432: + %t80 = extractvalue { ptr, i64, i64 } %t77, 0 + %t81 = getelementptr inbounds %S.ast.Node, ptr %t80, i64 %t76 + %t82 = load %S.ast.Node, ptr %t81 + store %S.ast.Node %t82, ptr %a83 + call void @finch.copy.S_ast_Node(ptr %a84, ptr %a83) + %t85 = load %S.ast.Node, ptr %a84 + store %S.ast.Node %t85, ptr %a86 + %t87 = load ptr, ptr %a1 + %t88 = load ptr, ptr %a1 + %t89 = load %S.ast.Node, ptr %a86 + %t90 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t91 = load i64, ptr %a70 + %t92 = load { ptr, i64, i64 }, ptr %t90 + %t93 = extractvalue { ptr, i64, i64 } %t92, 1 + %t94 = icmp uge i64 %t91, %t93 + br i1 %t94, label %range8433, label %inrange8434 +range8433: + call void @finch_panic_index(ptr @.str.5469, i64 5104, i64 %t91, i64 %t93) + unreachable +inrange8434: + %t95 = extractvalue { ptr, i64, i64 } %t92, 0 + %t96 = getelementptr inbounds %S.ast.Type, ptr %t95, i64 %t91 + %t97 = load %S.ast.Type, ptr %t96 + %t98 = call %S.gen.Val @finch.gen.exprWant(ptr %t88, %S.ast.Node %t89, %S.ast.Type %t97) + %t99 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t100 = load i64, ptr %a70 + %t101 = load { ptr, i64, i64 }, ptr %t99 + %t102 = extractvalue { ptr, i64, i64 } %t101, 1 + %t103 = icmp uge i64 %t100, %t102 + br i1 %t103, label %range8435, label %inrange8436 +range8435: + call void @finch_panic_index(ptr @.str.5470, i64 5104, i64 %t100, i64 %t102) + unreachable +inrange8436: + %t104 = extractvalue { ptr, i64, i64 } %t101, 0 + %t105 = getelementptr inbounds %S.ast.Type, ptr %t104, i64 %t100 + %t106 = load %S.ast.Type, ptr %t105 + %t107 = load %S.ast.Node, ptr %a86 + %t108 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 14 + %t109 = load i64, ptr %a70 + %t110 = load { ptr, i64, i64 }, ptr %t108 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range8437, label %inrange8438 +range8437: + call void @finch_panic_index(ptr @.str.5472, i64 5104, i64 %t109, i64 %t111) + unreachable +inrange8438: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i64 %t109 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } { ptr @.str.5471, i64 10, i64 0 }, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t119, ptr %a121 + store { ptr, i64, i64 } { ptr @.str.5473, i64 1, i64 0 }, ptr %a122 + call void @finch_str_concat(ptr %a120, ptr %a121, ptr %a122) + store { ptr, i64, i64 } %t119, ptr %a123 + call void @finch_str_drop(ptr %a123) + %t124 = load { ptr, i64, i64 }, ptr %a120 + %t125 = call %S.gen.Val @finch.gen.coerce(ptr %t87, %S.gen.Val %t98, %S.ast.Type %t106, %S.ast.Node %t107, { ptr, i64, i64 } %t124) + store %S.gen.Val %t98, ptr %a126 + call void @finch.drop.S_gen_Val(ptr %a126) + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_drop(ptr %a127) + store %S.gen.Val %t125, ptr %a128 + %t129 = load ptr, ptr %a1 + %t130 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t131 = load i64, ptr %a70 + %t132 = load { ptr, i64, i64 }, ptr %t130 + %t133 = extractvalue { ptr, i64, i64 } %t132, 1 + %t134 = icmp uge i64 %t131, %t133 + br i1 %t134, label %range8439, label %inrange8440 +range8439: + call void @finch_panic_index(ptr @.str.5474, i64 5106, i64 %t131, i64 %t133) + unreachable +inrange8440: + %t135 = extractvalue { ptr, i64, i64 } %t132, 0 + %t136 = getelementptr inbounds %S.ast.Type, ptr %t135, i64 %t131 + %t137 = load %S.ast.Type, ptr %t136 + %t138 = call i1 @finch.gen.owning(ptr %t129, %S.ast.Type %t137) + br label %logic.from8441 +logic.from8441: + br i1 %t138, label %logic.rhs8442, label %logic.end8443 +logic.rhs8442: + %t139 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 + %t140 = load i1, ptr %t139 + %t141 = xor i1 %t140, true + br label %logic.rend8444 +logic.rend8444: + br label %logic.end8443 +logic.end8443: + %t142 = phi i1 [ false, %logic.from8441 ], [ %t141, %logic.rend8444 ] + br label %logic.from8445 +logic.from8445: + br i1 %t142, label %logic.rhs8446, label %logic.end8447 +logic.rhs8446: + %t143 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t144 = load i64, ptr %t143 + %t145 = icmp sgt i64 %t144, 0 + br label %logic.rend8448 +logic.rend8448: + br label %logic.end8447 +logic.end8447: + %t146 = phi i1 [ false, %logic.from8445 ], [ %t145, %logic.rend8448 ] + br label %logic.from8449 +logic.from8449: + br i1 %t146, label %logic.rhs8450, label %logic.end8451 +logic.rhs8450: + %t147 = load %S.ast.Node, ptr %a86 + %t148 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t147) + %t149 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t148, ptr %a150 + store { ptr, i64, i64 } %t149, ptr %a151 + %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + store { ptr, i64, i64 } %t148, ptr %a154 + call void @finch_str_drop(ptr %a154) + br label %logic.rend8452 +logic.rend8452: + br label %logic.end8451 +logic.end8451: + %t155 = phi i1 [ false, %logic.from8449 ], [ %t153, %logic.rend8452 ] + br i1 %t155, label %then8453, label %endif8455 +then8453: + %t156 = load ptr, ptr %a1 + %t157 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 + %t158 = load { ptr, i64, i64 }, ptr %t157 + %t159 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 1 + %t160 = load %S.ast.Type, ptr %t159 + %t161 = call { ptr, i64, i64 } @finch.gen.copyValue(ptr %t156, { ptr, i64, i64 } %t158, %S.ast.Type %t160) + %t162 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t161, 0 + %t163 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 1 + %t164 = load %S.ast.Type, ptr %t163 + store %S.ast.Type %t164, ptr %a165 + call void @finch.copy.S_ast_Type(ptr %a166, ptr %a165) + %t167 = load %S.ast.Type, ptr %a166 + %t168 = insertvalue %S.gen.Val %t162, %S.ast.Type %t167, 1 + %t169 = insertvalue %S.gen.Val %t168, i1 true, 2 + %t170 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t169, ptr %a128 + store %S.gen.Val %t170, ptr %a171 + call void @finch.drop.S_gen_Val(ptr %a171) + br label %endif8455 +endif8455: + %t172 = getelementptr inbounds { ptr, i64, i64 }, ptr %a45, i32 0, i32 1 + %t173 = load ptr, ptr %a1 + %t174 = getelementptr inbounds %S.gen.FnSig, ptr %a21, i32 0, i32 13 + %t175 = load i64, ptr %a70 + %t176 = load { ptr, i64, i64 }, ptr %t174 + %t177 = extractvalue { ptr, i64, i64 } %t176, 1 + %t178 = icmp uge i64 %t175, %t177 + br i1 %t178, label %range8456, label %inrange8457 +range8456: + call void @finch_panic_index(ptr @.str.5475, i64 5109, i64 %t175, i64 %t177) + unreachable +inrange8457: + %t179 = extractvalue { ptr, i64, i64 } %t176, 0 + %t180 = getelementptr inbounds %S.ast.Type, ptr %t179, i64 %t175 + %t181 = load %S.ast.Type, ptr %t180 + %t182 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t173, %S.ast.Type %t181) + store { ptr, i64, i64 } %t182, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.5476, i64 1, i64 0 }, ptr %a185 + call void @finch_str_concat(ptr %a183, ptr %a184, ptr %a185) + store { ptr, i64, i64 } %t182, ptr %a186 + call void @finch_str_drop(ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a183 + %t188 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 0 + %t189 = load { ptr, i64, i64 }, ptr %t188 + store { ptr, i64, i64 } %t187, ptr %a191 + store { ptr, i64, i64 } %t189, ptr %a192 + call void @finch_str_concat(ptr %a190, ptr %a191, ptr %a192) + store { ptr, i64, i64 } %t187, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = load { ptr, i64, i64 }, ptr %a190 + %t195 = load i64, ptr %t172 + %t196 = add i64 %t195, 1 + call void @finch_arr_reserve(ptr %a45, i64 %t196, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t197 = load ptr, ptr %a45 + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i64 %t195 + store { ptr, i64, i64 } %t194, ptr %t198 + store i64 %t196, ptr %t172 + %t199 = getelementptr inbounds %S.gen.Val, ptr %a128, i32 0, i32 2 + %t200 = load i1, ptr %t199 + br i1 %t200, label %then8458, label %endif8460 +then8458: + %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 + %t202 = load %S.gen.Val, ptr %a128 + store %S.gen.Val %t202, ptr %a203 + call void @finch.copy.S_gen_Val(ptr %a204, ptr %a203) + %t205 = load %S.gen.Val, ptr %a204 + %t206 = load i64, ptr %t201 + %t207 = add i64 %t206, 1 + call void @finch_arr_reserve(ptr %a60, i64 %t207, i64 ptrtoint (ptr getelementptr (%S.gen.Val, ptr null, i32 1) to i64)) + %t208 = load ptr, ptr %a60 + %t209 = getelementptr inbounds %S.gen.Val, ptr %t208, i64 %t206 + store %S.gen.Val %t205, ptr %t209 + store i64 %t207, ptr %t201 + br label %endif8460 +endif8460: + %t210 = load ptr, ptr %a1 + %t211 = load %S.gen.Val, ptr %a128 + call void @finch.gen.hold(ptr %t210, %S.gen.Val %t211) + call void @finch.drop.S_gen_Val(ptr %a128) + call void @finch.drop.S_ast_Node(ptr %a86) + br label %for.step8429 +for.step8429: + %t212 = load i64, ptr %a70 + %t213 = add i64 %t212, 1 + store i64 %t213, ptr %a70 + br label %for.cond8427 +for.end8430: + %t214 = load ptr, ptr %a1 + %t215 = load %S.gen.FnSig, ptr %a21 + %t216 = load %S.ast.Node, ptr %a3 + %t217 = load { ptr, i64, i64 }, ptr %a45 + %t218 = load { ptr, i64, i64 }, ptr %a5 + %t219 = call %S.gen.Val @finch.gen.emitCall(ptr %t214, %S.gen.FnSig %t215, %S.ast.Node %t216, { ptr, i64, i64 } %t217, { ptr, i64, i64 } %t218) + store %S.gen.Val %t219, ptr %a220 + store i64 0, ptr %a221 + br label %each.cond8461 +each.cond8461: + %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a60, i32 0, i32 1 + %t223 = load i64, ptr %t222 + %t224 = load i64, ptr %a221 + %t225 = icmp slt i64 %t224, %t223 + br i1 %t225, label %each.body8462, label %each.end8464 +each.body8462: + %t226 = load ptr, ptr %a60 + %t227 = getelementptr inbounds %S.gen.Val, ptr %t226, i64 %t224 + %t228 = load %S.gen.Val, ptr %t227 + store %S.gen.Val %t228, ptr %a229 + %t230 = load ptr, ptr %a1 + %t231 = load %S.gen.Val, ptr %a229 + call void @finch.gen.release(ptr %t230, %S.gen.Val %t231) + br label %each.step8463 +each.step8463: + %t232 = load i64, ptr %a221 + %t233 = add i64 %t232, 1 + store i64 %t233, ptr %a221 + br label %each.cond8461 +each.end8464: + %t234 = load ptr, ptr %a1 + %t235 = load i64, ptr %a66 + call void @finch.gen.heldEnd(ptr %t234, i64 %t235) + %t236 = load %S.gen.Val, ptr %a220 + call void @finch.drop.arr_S_gen_Val(ptr %a60) + call void @finch.drop.arr_str(ptr %a45) + call void @finch.drop.S_gen_FnSig(ptr %a21) + ret %S.gen.Val %t236 +} + +define internal %S.gen.Val @finch.gen.emitCall(ptr %p0, %S.gen.FnSig %p1, %S.ast.Node %p2, { ptr, i64, i64 } %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.gen.FnSig, align 16 + %a3 = alloca %S.ast.Node, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca %S.ast.Type, align 16 + %a201 = alloca %S.ast.Type, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca %S.ast.Type, align 16 + %a235 = alloca %S.ast.Type, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca %S.ast.Type, align 16 + %a255 = alloca %S.ast.Type, align 16 + %a264 = alloca %S.ast.Type, align 16 + %a265 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store %S.gen.FnSig %p1, ptr %a2 + store %S.ast.Node %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + %t6 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 + %t7 = load i1, ptr %t6 + br label %logic.from8465 +logic.from8465: + br i1 %t7, label %logic.rhs8466, label %logic.end8467 +logic.rhs8466: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic8468, label %ok8469 +panic8468: + call void @finch_panic(ptr @.str.5477, i64 5125, ptr @.str.5478) + unreachable +ok8469: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 41 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = load %S.ast.Node, ptr %a3 + %t13 = call { ptr, i64, i64 } @finch.gen.nodeKey(%S.ast.Node %t12) + store { ptr, i64, i64 } %t11, ptr %a14 + store { ptr, i64, i64 } %t13, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp eq i32 %t16, 0 + store { ptr, i64, i64 } %t13, ptr %a18 + call void @finch_str_drop(ptr %a18) + br label %logic.rend8470 +logic.rend8470: + br label %logic.end8467 +logic.end8467: + %t19 = phi i1 [ false, %logic.from8465 ], [ %t17, %logic.rend8470 ] + br i1 %t19, label %then8471, label %endif8473 +then8471: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Node, ptr %a3 + %t22 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.5479, i64 1, i64 0 }, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.5480, i64 39, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t31, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t31, ptr %a36 + call void @finch_str_drop(ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t37, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.5481, i64 19, i64 0 }, ptr %a40 + call void @finch_str_concat(ptr %a38, ptr %a39, ptr %a40) + store { ptr, i64, i64 } %t37, ptr %a41 + call void @finch_str_drop(ptr %a41) + %t42 = load { ptr, i64, i64 }, ptr %a38 + %t43 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t42, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t42, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.5482, i64 27, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t53, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t53, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t59, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.5483, i64 5, i64 0 }, ptr %a62 + call void @finch_str_concat(ptr %a60, ptr %a61, ptr %a62) + store { ptr, i64, i64 } %t59, ptr %a63 + call void @finch_str_drop(ptr %a63) + %t64 = load { ptr, i64, i64 }, ptr %a60 + call void @finch.gen.fail(ptr %t20, %S.ast.Node %t21, { ptr, i64, i64 } %t64) + store { ptr, i64, i64 } %t64, ptr %a65 + call void @finch_str_drop(ptr %a65) + br label %endif8473 +endif8473: + %t66 = load ptr, ptr %a1 + %t67 = load %S.gen.FnSig, ptr %a2 + %t68 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t66, %S.gen.FnSig %t67) + store { ptr, i64, i64 } { ptr @.str.5484, i64 5, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t73, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.5485, i64 1, i64 0 }, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t73, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a74 + %t79 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 11 + %t80 = load { ptr, i64, i64 }, ptr %t79 + store { ptr, i64, i64 } %t78, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t78, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t85, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.5486, i64 1, i64 0 }, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t85, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5487, i64 2, i64 0 }, ptr %a92 + call void @finch_str_join(ptr %a93, ptr %a4, ptr %a92) + %t94 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t90, ptr %a96 + store { ptr, i64, i64 } %t94, ptr %a97 + call void @finch_str_concat(ptr %a95, ptr %a96, ptr %a97) + store { ptr, i64, i64 } %t90, ptr %a98 + call void @finch_str_drop(ptr %a98) + store { ptr, i64, i64 } %t94, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a95 + store { ptr, i64, i64 } %t100, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.5488, i64 1, i64 0 }, ptr %a103 + call void @finch_str_concat(ptr %a101, ptr %a102, ptr %a103) + store { ptr, i64, i64 } %t100, ptr %a104 + call void @finch_str_drop(ptr %a104) + %t105 = load { ptr, i64, i64 }, ptr %a101 + store { ptr, i64, i64 } %t105, ptr %a106 + %t107 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 9 + %t108 = load i1, ptr %t107 + br i1 %t108, label %then8474, label %endif8476 +then8474: + %t109 = load ptr, ptr %a1 + %t110 = load { ptr, i64, i64 }, ptr %a106 + %t111 = call { ptr, i64, i64 } @finch.gen.op(ptr %t109, { ptr, i64, i64 } %t110) + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load ptr, ptr %a1 + %t114 = load ptr, ptr %a1 + %t115 = load %S.gen.FnSig, ptr %a2 + %t116 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t114, %S.gen.FnSig %t115) + store { ptr, i64, i64 } { ptr @.str.5489, i64 13, i64 0 }, ptr %a118 + store { ptr, i64, i64 } %t116, ptr %a119 + call void @finch_str_concat(ptr %a117, ptr %a118, ptr %a119) + store { ptr, i64, i64 } %t116, ptr %a120 + call void @finch_str_drop(ptr %a120) + %t121 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t121, ptr %a123 + store { ptr, i64, i64 } { ptr @.str.5490, i64 1, i64 0 }, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t121, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + %t127 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t126, ptr %a129 + store { ptr, i64, i64 } %t127, ptr %a130 + call void @finch_str_concat(ptr %a128, ptr %a129, ptr %a130) + store { ptr, i64, i64 } %t126, ptr %a131 + call void @finch_str_drop(ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t132, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.5491, i64 3, i64 0 }, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t132, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + %t138 = call { ptr, i64, i64 } @finch.gen.op(ptr %t113, { ptr, i64, i64 } %t137) + store { ptr, i64, i64 } %t137, ptr %a139 + call void @finch_str_drop(ptr %a139) + store { ptr, i64, i64 } %t138, ptr %a140 + %t141 = load ptr, ptr %a1 + %t142 = load { ptr, i64, i64 }, ptr %a140 + store { ptr, i64, i64 } { ptr @.str.5492, i64 7, i64 0 }, ptr %a144 + store { ptr, i64, i64 } %t142, ptr %a145 + call void @finch_str_concat(ptr %a143, ptr %a144, ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a143 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.5493, i64 6, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = call { ptr, i64, i64 } @finch.gen.op(ptr %t141, { ptr, i64, i64 } %t151) + store { ptr, i64, i64 } %t151, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load ptr, ptr %a1 + %t155 = icmp eq ptr %t154, null + br i1 %t155, label %panic8477, label %ok8478 +panic8477: + call void @finch_panic(ptr @.str.5494, i64 5132, ptr @.str.5495) + unreachable +ok8478: + %t156 = getelementptr inbounds %S.gen.Gen, ptr %t154, i32 0, i32 42 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t152, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load ptr, ptr %a1 + %t160 = load ptr, ptr %a1 + %t161 = load %S.gen.FnSig, ptr %a2 + %t162 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t160, %S.gen.FnSig %t161) + store { ptr, i64, i64 } { ptr @.str.5496, i64 13, i64 0 }, ptr %a164 + store { ptr, i64, i64 } %t162, ptr %a165 + call void @finch_str_concat(ptr %a163, ptr %a164, ptr %a165) + store { ptr, i64, i64 } %t162, ptr %a166 + call void @finch_str_drop(ptr %a166) + %t167 = load { ptr, i64, i64 }, ptr %a163 + store { ptr, i64, i64 } %t167, ptr %a169 + store { ptr, i64, i64 } { ptr @.str.5497, i64 1, i64 0 }, ptr %a170 + call void @finch_str_concat(ptr %a168, ptr %a169, ptr %a170) + store { ptr, i64, i64 } %t167, ptr %a171 + call void @finch_str_drop(ptr %a171) + %t172 = load { ptr, i64, i64 }, ptr %a168 + %t173 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t172, ptr %a175 + store { ptr, i64, i64 } %t173, ptr %a176 + call void @finch_str_concat(ptr %a174, ptr %a175, ptr %a176) + store { ptr, i64, i64 } %t172, ptr %a177 + call void @finch_str_drop(ptr %a177) + %t178 = load { ptr, i64, i64 }, ptr %a174 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5498, i64 3, i64 0 }, ptr %a181 + call void @finch_str_concat(ptr %a179, ptr %a180, ptr %a181) + store { ptr, i64, i64 } %t178, ptr %a182 + call void @finch_str_drop(ptr %a182) + %t183 = load { ptr, i64, i64 }, ptr %a179 + %t184 = call { ptr, i64, i64 } @finch.gen.op(ptr %t159, { ptr, i64, i64 } %t183) + store { ptr, i64, i64 } %t183, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load ptr, ptr %a1 + %t187 = icmp eq ptr %t186, null + br i1 %t187, label %panic8479, label %ok8480 +panic8479: + call void @finch_panic(ptr @.str.5499, i64 5133, ptr @.str.5500) + unreachable +ok8480: + %t188 = getelementptr inbounds %S.gen.Gen, ptr %t186, i32 0, i32 43 + %t189 = load { ptr, i64, i64 }, ptr %t188 + store { ptr, i64, i64 } %t184, ptr %t188 + store { ptr, i64, i64 } %t189, ptr %a190 + call void @finch_str_drop(ptr %a190) + %t191 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t192 = getelementptr inbounds %S.ast.Type, ptr %t191, i32 0, i32 0 + %t193 = load { ptr, i64, i64 }, ptr %t192 + store { ptr, i64, i64 } %t193, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.5501, i64 4, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br i1 %t197, label %then8481, label %endif8483 +then8481: + %t198 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t199 = load %S.ast.Type, ptr %t198 + store %S.ast.Type %t199, ptr %a200 + call void @finch.copy.S_ast_Type(ptr %a201, ptr %a200) + %t202 = load %S.ast.Type, ptr %a201 + %t203 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t202, 1 + call void @finch_str_drop(ptr %a140) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t203 +endif8483: + %t204 = load ptr, ptr %a1 + %t205 = load ptr, ptr %a1 + %t206 = load %S.gen.FnSig, ptr %a2 + %t207 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t205, %S.gen.FnSig %t206) + store { ptr, i64, i64 } { ptr @.str.5502, i64 13, i64 0 }, ptr %a209 + store { ptr, i64, i64 } %t207, ptr %a210 + call void @finch_str_concat(ptr %a208, ptr %a209, ptr %a210) + store { ptr, i64, i64 } %t207, ptr %a211 + call void @finch_str_drop(ptr %a211) + %t212 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t212, ptr %a214 + store { ptr, i64, i64 } { ptr @.str.5503, i64 1, i64 0 }, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + store { ptr, i64, i64 } %t212, ptr %a216 + call void @finch_str_drop(ptr %a216) + %t217 = load { ptr, i64, i64 }, ptr %a213 + %t218 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t217, ptr %a220 + store { ptr, i64, i64 } %t218, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t217, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t223, ptr %a225 + store { ptr, i64, i64 } { ptr @.str.5504, i64 3, i64 0 }, ptr %a226 + call void @finch_str_concat(ptr %a224, ptr %a225, ptr %a226) + store { ptr, i64, i64 } %t223, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a224 + %t229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t204, { ptr, i64, i64 } %t228) + store { ptr, i64, i64 } %t228, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t229, 0 + %t232 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t233 = load %S.ast.Type, ptr %t232 + store %S.ast.Type %t233, ptr %a234 + call void @finch.copy.S_ast_Type(ptr %a235, ptr %a234) + %t236 = load %S.ast.Type, ptr %a235 + %t237 = insertvalue %S.gen.Val %t231, %S.ast.Type %t236, 1 + %t238 = load ptr, ptr %a1 + %t239 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t240 = load %S.ast.Type, ptr %t239 + %t241 = call i1 @finch.gen.owning(ptr %t238, %S.ast.Type %t240) + %t242 = insertvalue %S.gen.Val %t237, i1 %t241, 2 + call void @finch_str_drop(ptr %a140) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t242 +endif8476: + %t243 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t244 = getelementptr inbounds %S.ast.Type, ptr %t243, i32 0, i32 0 + %t245 = load { ptr, i64, i64 }, ptr %t244 + store { ptr, i64, i64 } %t245, ptr %a246 + store { ptr, i64, i64 } { ptr @.str.5505, i64 4, i64 0 }, ptr %a247 + %t248 = call i32 @finch_str_eq(ptr %a246, ptr %a247) + %t249 = icmp ne i32 %t248, 0 + br i1 %t249, label %then8484, label %endif8486 +then8484: + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a106 + call void @finch.gen.emit(ptr %t250, { ptr, i64, i64 } %t251) + %t252 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t253 = load %S.ast.Type, ptr %t252 + store %S.ast.Type %t253, ptr %a254 + call void @finch.copy.S_ast_Type(ptr %a255, ptr %a254) + %t256 = load %S.ast.Type, ptr %a255 + %t257 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t256, 1 + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t257 +endif8486: + %t258 = load ptr, ptr %a1 + %t259 = load { ptr, i64, i64 }, ptr %a106 + %t260 = call { ptr, i64, i64 } @finch.gen.op(ptr %t258, { ptr, i64, i64 } %t259) + %t261 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t260, 0 + %t262 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t263 = load %S.ast.Type, ptr %t262 + store %S.ast.Type %t263, ptr %a264 + call void @finch.copy.S_ast_Type(ptr %a265, ptr %a264) + %t266 = load %S.ast.Type, ptr %a265 + %t267 = insertvalue %S.gen.Val %t261, %S.ast.Type %t266, 1 + %t268 = load ptr, ptr %a1 + %t269 = getelementptr inbounds %S.gen.FnSig, ptr %a2, i32 0, i32 12 + %t270 = load %S.ast.Type, ptr %t269 + %t271 = call i1 @finch.gen.owning(ptr %t268, %S.ast.Type %t270) + %t272 = insertvalue %S.gen.Val %t267, i1 %t271, 2 + call void @finch_str_drop(ptr %a106) + ret %S.gen.Val %t272 +} + +define internal %S.gen.Val @finch.gen.construct(ptr %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3, %S.ast.Node %p4) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca %S.ast.Node, align 16 + %a16 = alloca %S.gen.StructDef, align 16 + %a17 = alloca %S.gen.StructDef, align 16 + %a19 = alloca %S.gen.StructDef, align 16 + %a20 = alloca %S.ast.Node, align 16 + %a43 = alloca %S.ast.Node, align 16 + %a44 = alloca %S.ast.Node, align 16 + %a47 = alloca %S.ast.Node, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca %S.ast.Type, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca i1, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca i64, align 16 + %a95 = alloca i64, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca i64, align 16 + %a196 = alloca i64, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca i64, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca i64, align 16 + %a294 = alloca i64, align 16 + %a305 = alloca %S.ast.Type, align 16 + %a306 = alloca %S.ast.Type, align 16 + %a308 = alloca %S.ast.Type, align 16 + %a309 = alloca %S.gen.Val, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca %S.gen.Val, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca %S.gen.Val, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a438 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a447 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca %S.gen.Val, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca %S.gen.Val, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a528 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca %S.ast.Type, align 16 + %a562 = alloca %S.ast.Type, align 16 + %a566 = alloca %S.gen.Val, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a593 = alloca { ptr, i64, i64 }, align 16 + %a594 = alloca { ptr, i64, i64 }, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a600 = alloca { ptr, i64, i64 }, align 16 + %a601 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca { ptr, i64, i64 }, align 16 + %a605 = alloca { ptr, i64, i64 }, align 16 + %a606 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca { ptr, i64, i64 }, align 16 + %a610 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a612 = alloca { ptr, i64, i64 }, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a625 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a628 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a644 = alloca %S.ast.Type, align 16 + %a645 = alloca %S.ast.Type, align 16 + store ptr %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + store %S.ast.Node %p4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic8487, label %ok8488 +panic8487: + call void @finch_panic(ptr @.str.5506, i64 5147, ptr @.str.5507) + unreachable +ok8488: + %t8 = getelementptr inbounds %S.gen.Gen, ptr %t6, i32 0, i32 16 + %t9 = load i64, ptr %a2 + %t10 = load { ptr, i64, i64 }, ptr %t8 + %t11 = extractvalue { ptr, i64, i64 } %t10, 1 + %t12 = icmp uge i64 %t9, %t11 + br i1 %t12, label %range8489, label %inrange8490 +range8489: + call void @finch_panic_index(ptr @.str.5508, i64 5147, i64 %t9, i64 %t11) + unreachable +inrange8490: + %t13 = extractvalue { ptr, i64, i64 } %t10, 0 + %t14 = getelementptr inbounds %S.gen.StructDef, ptr %t13, i64 %t9 + %t15 = load %S.gen.StructDef, ptr %t14 + store %S.gen.StructDef %t15, ptr %a16 + call void @finch.copy.S_gen_StructDef(ptr %a17, ptr %a16) + %t18 = load %S.gen.StructDef, ptr %a17 + store %S.gen.StructDef %t18, ptr %a19 + store %S.ast.Node zeroinitializer, ptr %a20 + %t21 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 + %t22 = load i1, ptr %t21 + %t23 = xor i1 %t22, true + br i1 %t23, label %then8491, label %endif8493 +then8491: + %t24 = load ptr, ptr %a1 + %t25 = icmp eq ptr %t24, null + br i1 %t25, label %panic8494, label %ok8495 +panic8494: + call void @finch_panic(ptr @.str.5509, i64 5150, ptr @.str.5510) + unreachable +ok8495: + %t26 = getelementptr inbounds %S.gen.Gen, ptr %t24, i32 0, i32 0 + %t27 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 13 + %t28 = load i64, ptr %t27 + %t29 = load { ptr, i64, i64 }, ptr %t26 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range8496, label %inrange8497 +range8496: + call void @finch_panic_index(ptr @.str.5511, i64 5150, i64 %t28, i64 %t30) + unreachable +inrange8497: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.ast.Program, ptr %t32, i64 %t28 + %t34 = getelementptr inbounds %S.ast.Program, ptr %t33, i32 0, i32 6 + %t35 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 14 + %t36 = load i64, ptr %t35 + %t37 = load { ptr, i64, i64 }, ptr %t34 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 %t36, %t38 + br i1 %t39, label %range8498, label %inrange8499 +range8498: + call void @finch_panic_index(ptr @.str.5512, i64 5150, i64 %t36, i64 %t38) + unreachable +inrange8499: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 %t36 + %t42 = load %S.ast.Node, ptr %t41 + store %S.ast.Node %t42, ptr %a43 + call void @finch.copy.S_ast_Node(ptr %a44, ptr %a43) + %t45 = load %S.ast.Node, ptr %a44 + %t46 = load %S.ast.Node, ptr %a20 + store %S.ast.Node %t45, ptr %a20 + store %S.ast.Node %t46, ptr %a47 + call void @finch.drop.S_ast_Node(ptr %a47) + br label %endif8493 +endif8493: + %t48 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.5513, i64 6, i64 0 }, 0 + %t49 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t50 = load { ptr, i64, i64 }, ptr %t49 + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_copy(ptr %a52, ptr %a51) + %t53 = load { ptr, i64, i64 }, ptr %a52 + %t54 = insertvalue %S.ast.Type %t48, { ptr, i64, i64 } %t53, 2 + %t55 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 + %t56 = load { ptr, i64, i64 }, ptr %t55 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_copy(ptr %a58, ptr %a57) + %t59 = load { ptr, i64, i64 }, ptr %a58 + %t60 = insertvalue %S.ast.Type %t54, { ptr, i64, i64 } %t59, 3 + store %S.ast.Type %t60, ptr %a61 + %t62 = load ptr, ptr %a1 + %t63 = load %S.ast.Type, ptr %a61 + %t64 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t62, %S.ast.Type %t63) + store { ptr, i64, i64 } %t64, ptr %a65 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t67 = load i64, ptr %t66 + %t68 = icmp sgt i64 %t67, 0 + br label %logic.from8500 +logic.from8500: + br i1 %t68, label %logic.rhs8501, label %logic.end8502 +logic.rhs8501: + %t69 = load { ptr, i64, i64 }, ptr %a4 + %t70 = extractvalue { ptr, i64, i64 } %t69, 1 + %t71 = icmp uge i64 0, %t70 + br i1 %t71, label %range8503, label %inrange8504 +range8503: + call void @finch_panic_index(ptr @.str.5514, i64 5154, i64 0, i64 %t70) + unreachable +inrange8504: + %t72 = extractvalue { ptr, i64, i64 } %t69, 0 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i64 0 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = icmp sgt i64 %t75, 0 + br label %logic.rend8505 +logic.rend8505: + br label %logic.end8502 +logic.end8502: + %t77 = phi i1 [ false, %logic.from8500 ], [ %t76, %logic.rend8505 ] + store i1 %t77, ptr %a78 + store { ptr, i64, i64 } zeroinitializer, ptr %a79 + %t80 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i32 0, i32 1 + %t82 = load i64, ptr %t81 + store i64 0, ptr %a83 + br label %for.cond8506 +for.cond8506: + %t84 = load i64, ptr %a83 + %t85 = icmp slt i64 %t84, %t82 + br i1 %t85, label %for.body8507, label %for.end8509 +for.body8507: + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %a79, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %a79, i64 %t88, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %a79 + %t90 = getelementptr inbounds i64, ptr %t89, i64 %t87 + store i64 -1, ptr %t90 + store i64 %t88, ptr %t86 + br label %for.step8508 +for.step8508: + %t91 = load i64, ptr %a83 + %t92 = add i64 %t91, 1 + store i64 %t92, ptr %a83 + br label %for.cond8506 +for.end8509: + %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t94 = load i64, ptr %t93 + store i64 0, ptr %a95 + br label %for.cond8510 +for.cond8510: + %t96 = load i64, ptr %a95 + %t97 = icmp slt i64 %t96, %t94 + br i1 %t97, label %for.body8511, label %for.end8513 +for.body8511: + %t98 = load i64, ptr %a95 + %t99 = load { ptr, i64, i64 }, ptr %a4 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 %t98, %t100 + br i1 %t101, label %range8514, label %inrange8515 +range8514: + call void @finch_panic_index(ptr @.str.5515, i64 5160, i64 %t98, i64 %t100) + unreachable +inrange8515: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t98 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %t103, i32 0, i32 1 + %t105 = load i64, ptr %t104 + %t106 = icmp sgt i64 %t105, 0 + %t107 = load i1, ptr %a78 + %t108 = icmp ne i1 %t106, %t107 + br i1 %t108, label %then8516, label %endif8518 +then8516: + %t109 = load ptr, ptr %a1 + %t110 = load i64, ptr %a95 + %t111 = load { ptr, i64, i64 }, ptr %a3 + %t112 = extractvalue { ptr, i64, i64 } %t111, 1 + %t113 = icmp uge i64 %t110, %t112 + br i1 %t113, label %range8519, label %inrange8520 +range8519: + call void @finch_panic_index(ptr @.str.5516, i64 5161, i64 %t110, i64 %t112) + unreachable +inrange8520: + %t114 = extractvalue { ptr, i64, i64 } %t111, 0 + %t115 = getelementptr inbounds %S.ast.Node, ptr %t114, i64 %t110 + %t116 = load %S.ast.Node, ptr %t115 + call void @finch.gen.fail(ptr %t109, %S.ast.Node %t116, { ptr, i64, i64 } { ptr @.str.5517, i64 69, i64 0 }) + br label %endif8518 +endif8518: + %t117 = load i1, ptr %a78 + %t118 = xor i1 %t117, true + br i1 %t118, label %then8521, label %endif8523 +then8521: + %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t120 = load i64, ptr %t119 + %t121 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t122 = getelementptr inbounds { ptr, i64, i64 }, ptr %t121, i32 0, i32 1 + %t123 = load i64, ptr %t122 + %t124 = icmp ne i64 %t120, %t123 + br i1 %t124, label %then8524, label %endif8526 +then8524: + %t125 = load ptr, ptr %a1 + %t126 = load %S.ast.Node, ptr %a5 + %t127 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t128 = load { ptr, i64, i64 }, ptr %t127 + store { ptr, i64, i64 } %t128, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.5518, i64 5, i64 0 }, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + %t132 = load { ptr, i64, i64 }, ptr %a129 + %t133 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load i64, ptr %t134 + call void @finch_str_from_int(ptr %a136, i64 %t135) + %t137 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t132, ptr %a139 + store { ptr, i64, i64 } %t137, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t132, ptr %a141 + call void @finch_str_drop(ptr %a141) + store { ptr, i64, i64 } %t137, ptr %a142 + call void @finch_str_drop(ptr %a142) + %t143 = load { ptr, i64, i64 }, ptr %a138 + store { ptr, i64, i64 } %t143, ptr %a145 + store { ptr, i64, i64 } { ptr @.str.5519, i64 17, i64 0 }, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + store { ptr, i64, i64 } %t143, ptr %a147 + call void @finch_str_drop(ptr %a147) + %t148 = load { ptr, i64, i64 }, ptr %a144 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t150 = load i64, ptr %t149 + call void @finch_str_from_int(ptr %a151, i64 %t150) + %t152 = load { ptr, i64, i64 }, ptr %a151 + store { ptr, i64, i64 } %t148, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t148, ptr %a156 + call void @finch_str_drop(ptr %a156) + store { ptr, i64, i64 } %t152, ptr %a157 + call void @finch_str_drop(ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a153 + store { ptr, i64, i64 } %t158, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.5520, i64 23, i64 0 }, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t158, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a159 + %t164 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t165 = load { ptr, i64, i64 }, ptr %t164 + store { ptr, i64, i64 } %t163, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + store { ptr, i64, i64 } %t163, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t170, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.5521, i64 15, i64 0 }, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t170, ptr %a174 + call void @finch_str_drop(ptr %a174) + %t175 = load { ptr, i64, i64 }, ptr %a171 + call void @finch.gen.fail(ptr %t125, %S.ast.Node %t126, { ptr, i64, i64 } %t175) + store { ptr, i64, i64 } %t175, ptr %a176 + call void @finch_str_drop(ptr %a176) + br label %endif8526 +endif8526: + %t177 = load i64, ptr %a95 + %t178 = load i64, ptr %a95 + %t179 = load { ptr, i64, i64 }, ptr %a79 + %t180 = extractvalue { ptr, i64, i64 } %t179, 1 + %t181 = icmp uge i64 %t178, %t180 + br i1 %t181, label %range8527, label %inrange8528 +range8527: + call void @finch_panic_index(ptr @.str.5522, i64 5167, i64 %t178, i64 %t180) + unreachable +inrange8528: + %t182 = extractvalue { ptr, i64, i64 } %t179, 0 + %t183 = getelementptr inbounds i64, ptr %t182, i64 %t178 + store i64 %t177, ptr %t183 + br label %for.step8512 +endif8523: + %t184 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i32 0, i32 1 + %t186 = load i64, ptr %a95 + %t187 = load { ptr, i64, i64 }, ptr %a4 + %t188 = extractvalue { ptr, i64, i64 } %t187, 1 + %t189 = icmp uge i64 %t186, %t188 + br i1 %t189, label %range8529, label %inrange8530 +range8529: + call void @finch_panic_index(ptr @.str.5523, i64 5170, i64 %t186, i64 %t188) + unreachable +inrange8530: + %t190 = extractvalue { ptr, i64, i64 } %t187, 0 + %t191 = getelementptr inbounds { ptr, i64, i64 }, ptr %t190, i64 %t186 + %t192 = load { ptr, i64, i64 }, ptr %t191 + store i64 -1, ptr %a193 + %t194 = load i64, ptr %t185 + %t195 = load ptr, ptr %t184 + store i64 0, ptr %a196 + br label %find.cond8531 +find.cond8531: + %t197 = load i64, ptr %a196 + %t198 = icmp slt i64 %t197, %t194 + br i1 %t198, label %find.body8532, label %find.end8535 +find.body8532: + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t195, i64 %t197 + %t200 = load { ptr, i64, i64 }, ptr %t199 + store { ptr, i64, i64 } %t200, ptr %a201 + store { ptr, i64, i64 } %t192, ptr %a202 + %t203 = call i32 @finch_str_eq(ptr %a201, ptr %a202) + %t204 = icmp ne i32 %t203, 0 + br i1 %t204, label %find.hit8533, label %find.next8534 +find.hit8533: + store i64 %t197, ptr %a193 + br label %find.end8535 +find.next8534: + %t205 = add i64 %t197, 1 + store i64 %t205, ptr %a196 + br label %find.cond8531 +find.end8535: + %t206 = load i64, ptr %a193 + store i64 %t206, ptr %a207 + %t208 = load i64, ptr %a207 + %t209 = icmp slt i64 %t208, 0 + br i1 %t209, label %then8536, label %endif8538 +then8536: + %t210 = load ptr, ptr %a1 + %t211 = load i64, ptr %a95 + %t212 = load { ptr, i64, i64 }, ptr %a3 + %t213 = extractvalue { ptr, i64, i64 } %t212, 1 + %t214 = icmp uge i64 %t211, %t213 + br i1 %t214, label %range8539, label %inrange8540 +range8539: + call void @finch_panic_index(ptr @.str.5524, i64 5172, i64 %t211, i64 %t213) + unreachable +inrange8540: + %t215 = extractvalue { ptr, i64, i64 } %t212, 0 + %t216 = getelementptr inbounds %S.ast.Node, ptr %t215, i64 %t211 + %t217 = load %S.ast.Node, ptr %t216 + %t218 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 1 + %t219 = load { ptr, i64, i64 }, ptr %t218 + store { ptr, i64, i64 } %t219, ptr %a221 + store { ptr, i64, i64 } { ptr @.str.5525, i64 15, i64 0 }, ptr %a222 + call void @finch_str_concat(ptr %a220, ptr %a221, ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a220 + %t224 = load i64, ptr %a95 + %t225 = load { ptr, i64, i64 }, ptr %a4 + %t226 = extractvalue { ptr, i64, i64 } %t225, 1 + %t227 = icmp uge i64 %t224, %t226 + br i1 %t227, label %range8541, label %inrange8542 +range8541: + call void @finch_panic_index(ptr @.str.5526, i64 5172, i64 %t224, i64 %t226) + unreachable +inrange8542: + %t228 = extractvalue { ptr, i64, i64 } %t225, 0 + %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t228, i64 %t224 + %t230 = load { ptr, i64, i64 }, ptr %t229 + store { ptr, i64, i64 } %t223, ptr %a232 + store { ptr, i64, i64 } %t230, ptr %a233 + call void @finch_str_concat(ptr %a231, ptr %a232, ptr %a233) + store { ptr, i64, i64 } %t223, ptr %a234 + call void @finch_str_drop(ptr %a234) + %t235 = load { ptr, i64, i64 }, ptr %a231 + store { ptr, i64, i64 } %t235, ptr %a237 + store { ptr, i64, i64 } { ptr @.str.5527, i64 1, i64 0 }, ptr %a238 + call void @finch_str_concat(ptr %a236, ptr %a237, ptr %a238) + store { ptr, i64, i64 } %t235, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a236 + call void @finch.gen.fail(ptr %t210, %S.ast.Node %t217, { ptr, i64, i64 } %t240) + store { ptr, i64, i64 } %t240, ptr %a241 + call void @finch_str_drop(ptr %a241) + br label %endif8538 +endif8538: + %t242 = load i64, ptr %a207 + %t243 = load { ptr, i64, i64 }, ptr %a79 + %t244 = extractvalue { ptr, i64, i64 } %t243, 1 + %t245 = icmp uge i64 %t242, %t244 + br i1 %t245, label %range8543, label %inrange8544 +range8543: + call void @finch_panic_index(ptr @.str.5528, i64 5174, i64 %t242, i64 %t244) + unreachable +inrange8544: + %t246 = extractvalue { ptr, i64, i64 } %t243, 0 + %t247 = getelementptr inbounds i64, ptr %t246, i64 %t242 + %t248 = load i64, ptr %t247 + %t249 = icmp sge i64 %t248, 0 + br i1 %t249, label %then8545, label %endif8547 +then8545: + %t250 = load ptr, ptr %a1 + %t251 = load i64, ptr %a95 + %t252 = load { ptr, i64, i64 }, ptr %a3 + %t253 = extractvalue { ptr, i64, i64 } %t252, 1 + %t254 = icmp uge i64 %t251, %t253 + br i1 %t254, label %range8548, label %inrange8549 +range8548: + call void @finch_panic_index(ptr @.str.5529, i64 5175, i64 %t251, i64 %t253) + unreachable +inrange8549: + %t255 = extractvalue { ptr, i64, i64 } %t252, 0 + %t256 = getelementptr inbounds %S.ast.Node, ptr %t255, i64 %t251 + %t257 = load %S.ast.Node, ptr %t256 + %t258 = load i64, ptr %a95 + %t259 = load { ptr, i64, i64 }, ptr %a4 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 %t258, %t260 + br i1 %t261, label %range8550, label %inrange8551 +range8550: + call void @finch_panic_index(ptr @.str.5531, i64 5175, i64 %t258, i64 %t260) + unreachable +inrange8551: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 %t258 + %t264 = load { ptr, i64, i64 }, ptr %t263 + store { ptr, i64, i64 } { ptr @.str.5530, i64 11, i64 0 }, ptr %a266 + store { ptr, i64, i64 } %t264, ptr %a267 + call void @finch_str_concat(ptr %a265, ptr %a266, ptr %a267) + %t268 = load { ptr, i64, i64 }, ptr %a265 + store { ptr, i64, i64 } %t268, ptr %a270 + store { ptr, i64, i64 } { ptr @.str.5532, i64 16, i64 0 }, ptr %a271 + call void @finch_str_concat(ptr %a269, ptr %a270, ptr %a271) + store { ptr, i64, i64 } %t268, ptr %a272 + call void @finch_str_drop(ptr %a272) + %t273 = load { ptr, i64, i64 }, ptr %a269 + call void @finch.gen.fail(ptr %t250, %S.ast.Node %t257, { ptr, i64, i64 } %t273) + store { ptr, i64, i64 } %t273, ptr %a274 + call void @finch_str_drop(ptr %a274) + br label %endif8547 +endif8547: + %t275 = load i64, ptr %a95 + %t276 = load i64, ptr %a207 + %t277 = load { ptr, i64, i64 }, ptr %a79 + %t278 = extractvalue { ptr, i64, i64 } %t277, 1 + %t279 = icmp uge i64 %t276, %t278 + br i1 %t279, label %range8552, label %inrange8553 +range8552: + call void @finch_panic_index(ptr @.str.5533, i64 5177, i64 %t276, i64 %t278) + unreachable +inrange8553: + %t280 = extractvalue { ptr, i64, i64 } %t277, 0 + %t281 = getelementptr inbounds i64, ptr %t280, i64 %t276 + store i64 %t275, ptr %t281 + br label %for.step8512 +for.step8512: + %t282 = load i64, ptr %a95 + %t283 = add i64 %t282, 1 + store i64 %t283, ptr %a95 + br label %for.cond8510 +for.end8513: + store { ptr, i64, i64 } { ptr @.str.5534, i64 15, i64 0 }, ptr %a284 + %t285 = load ptr, ptr %a1 + %t286 = icmp eq ptr %t285, null + br i1 %t286, label %panic8554, label %ok8555 +panic8554: + call void @finch_panic(ptr @.str.5535, i64 5180, ptr @.str.5536) + unreachable +ok8555: + %t287 = getelementptr inbounds %S.gen.Gen, ptr %t285, i32 0, i32 11 + %t288 = getelementptr inbounds { ptr, i64, i64 }, ptr %t287, i32 0, i32 1 + %t289 = load i64, ptr %t288 + store i64 %t289, ptr %a290 + %t291 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t292 = getelementptr inbounds { ptr, i64, i64 }, ptr %t291, i32 0, i32 1 + %t293 = load i64, ptr %t292 + store i64 0, ptr %a294 + br label %for.cond8556 +for.cond8556: + %t295 = load i64, ptr %a294 + %t296 = icmp slt i64 %t295, %t293 + br i1 %t296, label %for.body8557, label %for.end8559 +for.body8557: + %t297 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 12 + %t298 = load i64, ptr %a294 + %t299 = load { ptr, i64, i64 }, ptr %t297 + %t300 = extractvalue { ptr, i64, i64 } %t299, 1 + %t301 = icmp uge i64 %t298, %t300 + br i1 %t301, label %range8560, label %inrange8561 +range8560: + call void @finch_panic_index(ptr @.str.5537, i64 5182, i64 %t298, i64 %t300) + unreachable +inrange8561: + %t302 = extractvalue { ptr, i64, i64 } %t299, 0 + %t303 = getelementptr inbounds %S.ast.Type, ptr %t302, i64 %t298 + %t304 = load %S.ast.Type, ptr %t303 + store %S.ast.Type %t304, ptr %a305 + call void @finch.copy.S_ast_Type(ptr %a306, ptr %a305) + %t307 = load %S.ast.Type, ptr %a306 + store %S.ast.Type %t307, ptr %a308 + store %S.gen.Val zeroinitializer, ptr %a309 + %t310 = load i64, ptr %a294 + %t311 = load { ptr, i64, i64 }, ptr %a79 + %t312 = extractvalue { ptr, i64, i64 } %t311, 1 + %t313 = icmp uge i64 %t310, %t312 + br i1 %t313, label %range8562, label %inrange8563 +range8562: + call void @finch_panic_index(ptr @.str.5538, i64 5184, i64 %t310, i64 %t312) + unreachable +inrange8563: + %t314 = extractvalue { ptr, i64, i64 } %t311, 0 + %t315 = getelementptr inbounds i64, ptr %t314, i64 %t310 + %t316 = load i64, ptr %t315 + %t317 = icmp sge i64 %t316, 0 + br i1 %t317, label %then8564, label %else8565 +then8564: + %t318 = load ptr, ptr %a1 + %t319 = load ptr, ptr %a1 + %t320 = load i64, ptr %a294 + %t321 = load { ptr, i64, i64 }, ptr %a79 + %t322 = extractvalue { ptr, i64, i64 } %t321, 1 + %t323 = icmp uge i64 %t320, %t322 + br i1 %t323, label %range8567, label %inrange8568 +range8567: + call void @finch_panic_index(ptr @.str.5539, i64 5185, i64 %t320, i64 %t322) + unreachable +inrange8568: + %t324 = extractvalue { ptr, i64, i64 } %t321, 0 + %t325 = getelementptr inbounds i64, ptr %t324, i64 %t320 + %t326 = load i64, ptr %t325 + %t327 = load { ptr, i64, i64 }, ptr %a3 + %t328 = extractvalue { ptr, i64, i64 } %t327, 1 + %t329 = icmp uge i64 %t326, %t328 + br i1 %t329, label %range8569, label %inrange8570 +range8569: + call void @finch_panic_index(ptr @.str.5540, i64 5185, i64 %t326, i64 %t328) + unreachable +inrange8570: + %t330 = extractvalue { ptr, i64, i64 } %t327, 0 + %t331 = getelementptr inbounds %S.ast.Node, ptr %t330, i64 %t326 + %t332 = load %S.ast.Node, ptr %t331 + %t333 = load %S.ast.Type, ptr %a308 + %t334 = call %S.gen.Val @finch.gen.exprWant(ptr %t319, %S.ast.Node %t332, %S.ast.Type %t333) + %t335 = load %S.ast.Type, ptr %a308 + %t336 = load i64, ptr %a294 + %t337 = load { ptr, i64, i64 }, ptr %a79 + %t338 = extractvalue { ptr, i64, i64 } %t337, 1 + %t339 = icmp uge i64 %t336, %t338 + br i1 %t339, label %range8571, label %inrange8572 +range8571: + call void @finch_panic_index(ptr @.str.5541, i64 5185, i64 %t336, i64 %t338) + unreachable +inrange8572: + %t340 = extractvalue { ptr, i64, i64 } %t337, 0 + %t341 = getelementptr inbounds i64, ptr %t340, i64 %t336 + %t342 = load i64, ptr %t341 + %t343 = load { ptr, i64, i64 }, ptr %a3 + %t344 = extractvalue { ptr, i64, i64 } %t343, 1 + %t345 = icmp uge i64 %t342, %t344 + br i1 %t345, label %range8573, label %inrange8574 +range8573: + call void @finch_panic_index(ptr @.str.5542, i64 5185, i64 %t342, i64 %t344) + unreachable +inrange8574: + %t346 = extractvalue { ptr, i64, i64 } %t343, 0 + %t347 = getelementptr inbounds %S.ast.Node, ptr %t346, i64 %t342 + %t348 = load %S.ast.Node, ptr %t347 + %t349 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t350 = load i64, ptr %a294 + %t351 = load { ptr, i64, i64 }, ptr %t349 + %t352 = extractvalue { ptr, i64, i64 } %t351, 1 + %t353 = icmp uge i64 %t350, %t352 + br i1 %t353, label %range8575, label %inrange8576 +range8575: + call void @finch_panic_index(ptr @.str.5544, i64 5185, i64 %t350, i64 %t352) + unreachable +inrange8576: + %t354 = extractvalue { ptr, i64, i64 } %t351, 0 + %t355 = getelementptr inbounds { ptr, i64, i64 }, ptr %t354, i64 %t350 + %t356 = load { ptr, i64, i64 }, ptr %t355 + store { ptr, i64, i64 } { ptr @.str.5543, i64 11, i64 0 }, ptr %a358 + store { ptr, i64, i64 } %t356, ptr %a359 + call void @finch_str_concat(ptr %a357, ptr %a358, ptr %a359) + %t360 = load { ptr, i64, i64 }, ptr %a357 + store { ptr, i64, i64 } %t360, ptr %a362 + store { ptr, i64, i64 } { ptr @.str.5545, i64 1, i64 0 }, ptr %a363 + call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) + store { ptr, i64, i64 } %t360, ptr %a364 + call void @finch_str_drop(ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a361 + %t366 = call %S.gen.Val @finch.gen.coerce(ptr %t318, %S.gen.Val %t334, %S.ast.Type %t335, %S.ast.Node %t348, { ptr, i64, i64 } %t365) + store %S.gen.Val %t334, ptr %a367 + call void @finch.drop.S_gen_Val(ptr %a367) + store { ptr, i64, i64 } %t365, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load %S.gen.Val, ptr %a309 + store %S.gen.Val %t366, ptr %a309 + store %S.gen.Val %t369, ptr %a370 + call void @finch.drop.S_gen_Val(ptr %a370) + br label %endif8566 +else8565: + %t371 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 2 + %t372 = load i1, ptr %t371 + %t373 = xor i1 %t372, true + br label %logic.from8577 +logic.from8577: + br i1 %t373, label %logic.rhs8578, label %logic.end8579 +logic.rhs8578: + %t374 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 + %t375 = load i64, ptr %a294 + %t376 = load { ptr, i64, i64 }, ptr %t374 + %t377 = extractvalue { ptr, i64, i64 } %t376, 1 + %t378 = icmp uge i64 %t375, %t377 + br i1 %t378, label %range8580, label %inrange8581 +range8580: + call void @finch_panic_index(ptr @.str.5546, i64 5186, i64 %t375, i64 %t377) + unreachable +inrange8581: + %t379 = extractvalue { ptr, i64, i64 } %t376, 0 + %t380 = getelementptr inbounds %S.ast.Node, ptr %t379, i64 %t375 + %t381 = getelementptr inbounds %S.ast.Node, ptr %t380, i32 0, i32 9 + %t382 = getelementptr inbounds { ptr, i64, i64 }, ptr %t381, i32 0, i32 1 + %t383 = load i64, ptr %t382 + %t384 = icmp sgt i64 %t383, 0 + br label %logic.rend8582 +logic.rend8582: + br label %logic.end8579 +logic.end8579: + %t385 = phi i1 [ false, %logic.from8577 ], [ %t384, %logic.rend8582 ] + br i1 %t385, label %then8583, label %else8584 +then8583: + %t386 = load ptr, ptr %a1 + %t387 = icmp eq ptr %t386, null + br i1 %t387, label %panic8586, label %ok8587 +panic8586: + call void @finch_panic(ptr @.str.5547, i64 5188, ptr @.str.5548) + unreachable +ok8587: + %t388 = getelementptr inbounds %S.gen.Gen, ptr %t386, i32 0, i32 10 + %t389 = load { ptr, i64, i64 }, ptr %t388 + store { ptr, i64, i64 } %t389, ptr %a390 + call void @finch.copy.arr_S_gen_Scope(ptr %a391, ptr %a390) + %t392 = load { ptr, i64, i64 }, ptr %a391 + store { ptr, i64, i64 } %t392, ptr %a393 + %t394 = load ptr, ptr %a1 + %t395 = icmp eq ptr %t394, null + br i1 %t395, label %panic8588, label %ok8589 +panic8588: + call void @finch_panic(ptr @.str.5549, i64 5189, ptr @.str.5550) + unreachable +ok8589: + %t396 = getelementptr inbounds %S.gen.Gen, ptr %t394, i32 0, i32 14 + %t397 = load { ptr, i64, i64 }, ptr %t396 + store { ptr, i64, i64 } %t397, ptr %a398 + call void @finch_str_copy(ptr %a399, ptr %a398) + %t400 = load { ptr, i64, i64 }, ptr %a399 + store { ptr, i64, i64 } %t400, ptr %a401 + %t402 = load ptr, ptr %a1 + %t403 = icmp eq ptr %t402, null + br i1 %t403, label %panic8590, label %ok8591 +panic8590: + call void @finch_panic(ptr @.str.5551, i64 5190, ptr @.str.5552) + unreachable +ok8591: + %t404 = getelementptr inbounds %S.gen.Gen, ptr %t402, i32 0, i32 18 + %t405 = load { ptr, i64, i64 }, ptr %t404 + store { ptr, i64, i64 } %t405, ptr %a406 + call void @finch.copy.arr_str(ptr %a407, ptr %a406) + %t408 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t408, ptr %a409 + %t410 = load ptr, ptr %a1 + %t411 = icmp eq ptr %t410, null + br i1 %t411, label %panic8592, label %ok8593 +panic8592: + call void @finch_panic(ptr @.str.5553, i64 5191, ptr @.str.5554) + unreachable +ok8593: + %t412 = getelementptr inbounds %S.gen.Gen, ptr %t410, i32 0, i32 19 + %t413 = load { ptr, i64, i64 }, ptr %t412 + store { ptr, i64, i64 } %t413, ptr %a414 + call void @finch.copy.arr_S_ast_Type(ptr %a415, ptr %a414) + %t416 = load { ptr, i64, i64 }, ptr %a415 + store { ptr, i64, i64 } %t416, ptr %a417 + %t418 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 6 + %t419 = load { ptr, i64, i64 }, ptr %t418 + %t420 = load ptr, ptr %a1 + %t421 = icmp eq ptr %t420, null + br i1 %t421, label %panic8594, label %ok8595 +panic8594: + call void @finch_panic(ptr @.str.5555, i64 5192, ptr @.str.5556) + unreachable +ok8595: + %t422 = getelementptr inbounds %S.gen.Gen, ptr %t420, i32 0, i32 18 + store { ptr, i64, i64 } %t419, ptr %a423 + call void @finch.copy.arr_str(ptr %a424, ptr %a423) + %t425 = load { ptr, i64, i64 }, ptr %a424 + %t426 = load { ptr, i64, i64 }, ptr %t422 + store { ptr, i64, i64 } %t425, ptr %t422 + store { ptr, i64, i64 } %t426, ptr %a427 + call void @finch.drop.arr_str(ptr %a427) + %t428 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 7 + %t429 = load { ptr, i64, i64 }, ptr %t428 + %t430 = load ptr, ptr %a1 + %t431 = icmp eq ptr %t430, null + br i1 %t431, label %panic8596, label %ok8597 +panic8596: + call void @finch_panic(ptr @.str.5557, i64 5193, ptr @.str.5558) + unreachable +ok8597: + %t432 = getelementptr inbounds %S.gen.Gen, ptr %t430, i32 0, i32 19 + store { ptr, i64, i64 } %t429, ptr %a433 + call void @finch.copy.arr_S_ast_Type(ptr %a434, ptr %a433) + %t435 = load { ptr, i64, i64 }, ptr %a434 + %t436 = load { ptr, i64, i64 }, ptr %t432 + store { ptr, i64, i64 } %t435, ptr %t432 + store { ptr, i64, i64 } %t436, ptr %a437 + call void @finch.drop.arr_S_ast_Type(ptr %a437) + store { ptr, i64, i64 } zeroinitializer, ptr %a438 + %t439 = load { ptr, i64, i64 }, ptr %a438 + %t440 = load ptr, ptr %a1 + %t441 = icmp eq ptr %t440, null + br i1 %t441, label %panic8598, label %ok8599 +panic8598: + call void @finch_panic(ptr @.str.5559, i64 5195, ptr @.str.5560) + unreachable +ok8599: + %t442 = getelementptr inbounds %S.gen.Gen, ptr %t440, i32 0, i32 10 + store { ptr, i64, i64 } %t439, ptr %a443 + call void @finch.copy.arr_S_gen_Scope(ptr %a444, ptr %a443) + %t445 = load { ptr, i64, i64 }, ptr %a444 + %t446 = load { ptr, i64, i64 }, ptr %t442 + store { ptr, i64, i64 } %t445, ptr %t442 + store { ptr, i64, i64 } %t446, ptr %a447 + call void @finch.drop.arr_S_gen_Scope(ptr %a447) + %t448 = load ptr, ptr %a1 + call void @finch.gen.pushScope(ptr %t448) + %t449 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 0 + %t450 = load { ptr, i64, i64 }, ptr %t449 + %t451 = load ptr, ptr %a1 + %t452 = icmp eq ptr %t451, null + br i1 %t452, label %panic8600, label %ok8601 +panic8600: + call void @finch_panic(ptr @.str.5561, i64 5197, ptr @.str.5562) + unreachable +ok8601: + %t453 = getelementptr inbounds %S.gen.Gen, ptr %t451, i32 0, i32 14 + store { ptr, i64, i64 } %t450, ptr %a454 + call void @finch_str_copy(ptr %a455, ptr %a454) + %t456 = load { ptr, i64, i64 }, ptr %a455 + %t457 = load { ptr, i64, i64 }, ptr %t453 + store { ptr, i64, i64 } %t456, ptr %t453 + store { ptr, i64, i64 } %t457, ptr %a458 + call void @finch_str_drop(ptr %a458) + %t459 = load ptr, ptr %a1 + %t460 = load ptr, ptr %a1 + %t461 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 + %t462 = load i64, ptr %a294 + %t463 = load { ptr, i64, i64 }, ptr %t461 + %t464 = extractvalue { ptr, i64, i64 } %t463, 1 + %t465 = icmp uge i64 %t462, %t464 + br i1 %t465, label %range8602, label %inrange8603 +range8602: + call void @finch_panic_index(ptr @.str.5563, i64 5198, i64 %t462, i64 %t464) + unreachable +inrange8603: + %t466 = extractvalue { ptr, i64, i64 } %t463, 0 + %t467 = getelementptr inbounds %S.ast.Node, ptr %t466, i64 %t462 + %t468 = getelementptr inbounds %S.ast.Node, ptr %t467, i32 0, i32 9 + %t469 = load { ptr, i64, i64 }, ptr %t468 + %t470 = extractvalue { ptr, i64, i64 } %t469, 1 + %t471 = icmp uge i64 0, %t470 + br i1 %t471, label %range8604, label %inrange8605 +range8604: + call void @finch_panic_index(ptr @.str.5564, i64 5198, i64 0, i64 %t470) + unreachable +inrange8605: + %t472 = extractvalue { ptr, i64, i64 } %t469, 0 + %t473 = getelementptr inbounds %S.ast.Node, ptr %t472, i64 0 + %t474 = load %S.ast.Node, ptr %t473 + %t475 = load %S.ast.Type, ptr %a308 + %t476 = call %S.gen.Val @finch.gen.exprWant(ptr %t460, %S.ast.Node %t474, %S.ast.Type %t475) + %t477 = load %S.ast.Type, ptr %a308 + %t478 = getelementptr inbounds %S.ast.Node, ptr %a20, i32 0, i32 9 + %t479 = load i64, ptr %a294 + %t480 = load { ptr, i64, i64 }, ptr %t478 + %t481 = extractvalue { ptr, i64, i64 } %t480, 1 + %t482 = icmp uge i64 %t479, %t481 + br i1 %t482, label %range8606, label %inrange8607 +range8606: + call void @finch_panic_index(ptr @.str.5565, i64 5198, i64 %t479, i64 %t481) + unreachable +inrange8607: + %t483 = extractvalue { ptr, i64, i64 } %t480, 0 + %t484 = getelementptr inbounds %S.ast.Node, ptr %t483, i64 %t479 + %t485 = getelementptr inbounds %S.ast.Node, ptr %t484, i32 0, i32 9 + %t486 = load { ptr, i64, i64 }, ptr %t485 + %t487 = extractvalue { ptr, i64, i64 } %t486, 1 + %t488 = icmp uge i64 0, %t487 + br i1 %t488, label %range8608, label %inrange8609 +range8608: + call void @finch_panic_index(ptr @.str.5566, i64 5198, i64 0, i64 %t487) + unreachable +inrange8609: + %t489 = extractvalue { ptr, i64, i64 } %t486, 0 + %t490 = getelementptr inbounds %S.ast.Node, ptr %t489, i64 0 + %t491 = load %S.ast.Node, ptr %t490 + %t492 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 11 + %t493 = load i64, ptr %a294 + %t494 = load { ptr, i64, i64 }, ptr %t492 + %t495 = extractvalue { ptr, i64, i64 } %t494, 1 + %t496 = icmp uge i64 %t493, %t495 + br i1 %t496, label %range8610, label %inrange8611 +range8610: + call void @finch_panic_index(ptr @.str.5568, i64 5198, i64 %t493, i64 %t495) + unreachable +inrange8611: + %t497 = extractvalue { ptr, i64, i64 } %t494, 0 + %t498 = getelementptr inbounds { ptr, i64, i64 }, ptr %t497, i64 %t493 + %t499 = load { ptr, i64, i64 }, ptr %t498 + store { ptr, i64, i64 } { ptr @.str.5567, i64 16, i64 0 }, ptr %a501 + store { ptr, i64, i64 } %t499, ptr %a502 + call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) + %t503 = load { ptr, i64, i64 }, ptr %a500 + store { ptr, i64, i64 } %t503, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.5569, i64 1, i64 0 }, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t503, ptr %a507 + call void @finch_str_drop(ptr %a507) + %t508 = load { ptr, i64, i64 }, ptr %a504 + %t509 = call %S.gen.Val @finch.gen.coerce(ptr %t459, %S.gen.Val %t476, %S.ast.Type %t477, %S.ast.Node %t491, { ptr, i64, i64 } %t508) + store %S.gen.Val %t476, ptr %a510 + call void @finch.drop.S_gen_Val(ptr %a510) + store { ptr, i64, i64 } %t508, ptr %a511 + call void @finch_str_drop(ptr %a511) + %t512 = load %S.gen.Val, ptr %a309 + store %S.gen.Val %t509, ptr %a309 + store %S.gen.Val %t512, ptr %a513 + call void @finch.drop.S_gen_Val(ptr %a513) + %t514 = load { ptr, i64, i64 }, ptr %a401 + %t515 = load ptr, ptr %a1 + %t516 = icmp eq ptr %t515, null + br i1 %t516, label %panic8612, label %ok8613 +panic8612: + call void @finch_panic(ptr @.str.5570, i64 5199, ptr @.str.5571) + unreachable +ok8613: + %t517 = getelementptr inbounds %S.gen.Gen, ptr %t515, i32 0, i32 14 + store { ptr, i64, i64 } %t514, ptr %a518 + call void @finch_str_copy(ptr %a519, ptr %a518) + %t520 = load { ptr, i64, i64 }, ptr %a519 + %t521 = load { ptr, i64, i64 }, ptr %t517 + store { ptr, i64, i64 } %t520, ptr %t517 + store { ptr, i64, i64 } %t521, ptr %a522 + call void @finch_str_drop(ptr %a522) + %t523 = load { ptr, i64, i64 }, ptr %a409 + %t524 = load ptr, ptr %a1 + %t525 = icmp eq ptr %t524, null + br i1 %t525, label %panic8614, label %ok8615 +panic8614: + call void @finch_panic(ptr @.str.5572, i64 5200, ptr @.str.5573) + unreachable +ok8615: + %t526 = getelementptr inbounds %S.gen.Gen, ptr %t524, i32 0, i32 18 + store { ptr, i64, i64 } %t523, ptr %a527 + call void @finch.copy.arr_str(ptr %a528, ptr %a527) + %t529 = load { ptr, i64, i64 }, ptr %a528 + %t530 = load { ptr, i64, i64 }, ptr %t526 + store { ptr, i64, i64 } %t529, ptr %t526 + store { ptr, i64, i64 } %t530, ptr %a531 + call void @finch.drop.arr_str(ptr %a531) + %t532 = load { ptr, i64, i64 }, ptr %a417 + %t533 = load ptr, ptr %a1 + %t534 = icmp eq ptr %t533, null + br i1 %t534, label %panic8616, label %ok8617 +panic8616: + call void @finch_panic(ptr @.str.5574, i64 5201, ptr @.str.5575) + unreachable +ok8617: + %t535 = getelementptr inbounds %S.gen.Gen, ptr %t533, i32 0, i32 19 + store { ptr, i64, i64 } %t532, ptr %a536 + call void @finch.copy.arr_S_ast_Type(ptr %a537, ptr %a536) + %t538 = load { ptr, i64, i64 }, ptr %a537 + %t539 = load { ptr, i64, i64 }, ptr %t535 + store { ptr, i64, i64 } %t538, ptr %t535 + store { ptr, i64, i64 } %t539, ptr %a540 + call void @finch.drop.arr_S_ast_Type(ptr %a540) + %t541 = load { ptr, i64, i64 }, ptr %a393 + %t542 = load ptr, ptr %a1 + %t543 = icmp eq ptr %t542, null + br i1 %t543, label %panic8618, label %ok8619 +panic8618: + call void @finch_panic(ptr @.str.5576, i64 5202, ptr @.str.5577) + unreachable +ok8619: + %t544 = getelementptr inbounds %S.gen.Gen, ptr %t542, i32 0, i32 10 + store { ptr, i64, i64 } %t541, ptr %a545 + call void @finch.copy.arr_S_gen_Scope(ptr %a546, ptr %a545) + %t547 = load { ptr, i64, i64 }, ptr %a546 + %t548 = load { ptr, i64, i64 }, ptr %t544 + store { ptr, i64, i64 } %t547, ptr %t544 + store { ptr, i64, i64 } %t548, ptr %a549 + call void @finch.drop.arr_S_gen_Scope(ptr %a549) + call void @finch.drop.arr_S_gen_Scope(ptr %a438) + call void @finch.drop.arr_S_ast_Type(ptr %a417) + call void @finch.drop.arr_str(ptr %a409) + call void @finch_str_drop(ptr %a401) + call void @finch.drop.arr_S_gen_Scope(ptr %a393) + br label %endif8585 +else8584: + call void @finch.drop.S_gen_Val(ptr %a309) + call void @finch.drop.S_ast_Type(ptr %a308) + br label %for.step8558 +endif8585: + br label %endif8566 +endif8566: + %t550 = load ptr, ptr %a1 + %t551 = load %S.gen.Val, ptr %a309 + %t552 = call { ptr, i64, i64 } @finch.gen.own(ptr %t550, %S.gen.Val %t551) + store { ptr, i64, i64 } %t552, ptr %a553 + %t554 = load ptr, ptr %a1 + %t555 = load { ptr, i64, i64 }, ptr %a553 + store { ptr, i64, i64 } %t555, ptr %a556 + call void @finch_str_copy(ptr %a557, ptr %a556) + %t558 = load { ptr, i64, i64 }, ptr %a557 + %t559 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t558, 0 + %t560 = load %S.ast.Type, ptr %a308 + store %S.ast.Type %t560, ptr %a561 + call void @finch.copy.S_ast_Type(ptr %a562, ptr %a561) + %t563 = load %S.ast.Type, ptr %a562 + %t564 = insertvalue %S.gen.Val %t559, %S.ast.Type %t563, 1 + %t565 = insertvalue %S.gen.Val %t564, i1 true, 2 + call void @finch.gen.hold(ptr %t554, %S.gen.Val %t565) + store %S.gen.Val %t565, ptr %a566 + call void @finch.drop.S_gen_Val(ptr %a566) + %t567 = load ptr, ptr %a1 + %t568 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } { ptr @.str.5578, i64 12, i64 0 }, ptr %a570 + store { ptr, i64, i64 } %t568, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + %t572 = load { ptr, i64, i64 }, ptr %a569 + store { ptr, i64, i64 } %t572, ptr %a574 + store { ptr, i64, i64 } { ptr @.str.5579, i64 1, i64 0 }, ptr %a575 + call void @finch_str_concat(ptr %a573, ptr %a574, ptr %a575) + store { ptr, i64, i64 } %t572, ptr %a576 + call void @finch_str_drop(ptr %a576) + %t577 = load { ptr, i64, i64 }, ptr %a573 + %t578 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t577, ptr %a580 + store { ptr, i64, i64 } %t578, ptr %a581 + call void @finch_str_concat(ptr %a579, ptr %a580, ptr %a581) + store { ptr, i64, i64 } %t577, ptr %a582 + call void @finch_str_drop(ptr %a582) + %t583 = load { ptr, i64, i64 }, ptr %a579 + store { ptr, i64, i64 } %t583, ptr %a585 + store { ptr, i64, i64 } { ptr @.str.5580, i64 2, i64 0 }, ptr %a586 + call void @finch_str_concat(ptr %a584, ptr %a585, ptr %a586) + store { ptr, i64, i64 } %t583, ptr %a587 + call void @finch_str_drop(ptr %a587) + %t588 = load { ptr, i64, i64 }, ptr %a584 + %t589 = load ptr, ptr %a1 + %t590 = load %S.ast.Type, ptr %a308 + %t591 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t589, %S.ast.Type %t590) + store { ptr, i64, i64 } %t588, ptr %a593 + store { ptr, i64, i64 } %t591, ptr %a594 + call void @finch_str_concat(ptr %a592, ptr %a593, ptr %a594) + store { ptr, i64, i64 } %t588, ptr %a595 + call void @finch_str_drop(ptr %a595) + store { ptr, i64, i64 } %t591, ptr %a596 + call void @finch_str_drop(ptr %a596) + %t597 = load { ptr, i64, i64 }, ptr %a592 + store { ptr, i64, i64 } %t597, ptr %a599 + store { ptr, i64, i64 } { ptr @.str.5581, i64 1, i64 0 }, ptr %a600 + call void @finch_str_concat(ptr %a598, ptr %a599, ptr %a600) + store { ptr, i64, i64 } %t597, ptr %a601 + call void @finch_str_drop(ptr %a601) + %t602 = load { ptr, i64, i64 }, ptr %a598 + %t603 = load { ptr, i64, i64 }, ptr %a553 + store { ptr, i64, i64 } %t602, ptr %a605 + store { ptr, i64, i64 } %t603, ptr %a606 + call void @finch_str_concat(ptr %a604, ptr %a605, ptr %a606) + store { ptr, i64, i64 } %t602, ptr %a607 + call void @finch_str_drop(ptr %a607) + %t608 = load { ptr, i64, i64 }, ptr %a604 + store { ptr, i64, i64 } %t608, ptr %a610 + store { ptr, i64, i64 } { ptr @.str.5582, i64 2, i64 0 }, ptr %a611 + call void @finch_str_concat(ptr %a609, ptr %a610, ptr %a611) + store { ptr, i64, i64 } %t608, ptr %a612 + call void @finch_str_drop(ptr %a612) + %t613 = load { ptr, i64, i64 }, ptr %a609 + %t614 = getelementptr inbounds %S.gen.StructDef, ptr %a19, i32 0, i32 3 + %t615 = load i64, ptr %a294 + %t616 = load { ptr, i64, i64 }, ptr %t614 + %t617 = extractvalue { ptr, i64, i64 } %t616, 1 + %t618 = icmp uge i64 %t615, %t617 + br i1 %t618, label %range8620, label %inrange8621 +range8620: + call void @finch_panic_index(ptr @.str.5583, i64 5208, i64 %t615, i64 %t617) + unreachable +inrange8621: + %t619 = extractvalue { ptr, i64, i64 } %t616, 0 + %t620 = getelementptr inbounds i64, ptr %t619, i64 %t615 + %t621 = load i64, ptr %t620 + call void @finch_str_from_int(ptr %a622, i64 %t621) + %t623 = load { ptr, i64, i64 }, ptr %a622 + store { ptr, i64, i64 } %t613, ptr %a625 + store { ptr, i64, i64 } %t623, ptr %a626 + call void @finch_str_concat(ptr %a624, ptr %a625, ptr %a626) + store { ptr, i64, i64 } %t613, ptr %a627 + call void @finch_str_drop(ptr %a627) + store { ptr, i64, i64 } %t623, ptr %a628 + call void @finch_str_drop(ptr %a628) + %t629 = load { ptr, i64, i64 }, ptr %a624 + %t630 = call { ptr, i64, i64 } @finch.gen.op(ptr %t567, { ptr, i64, i64 } %t629) + store { ptr, i64, i64 } %t629, ptr %a631 + call void @finch_str_drop(ptr %a631) + %t632 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t630, ptr %a284 + store { ptr, i64, i64 } %t632, ptr %a633 + call void @finch_str_drop(ptr %a633) + call void @finch_str_drop(ptr %a553) + call void @finch.drop.S_gen_Val(ptr %a309) + call void @finch.drop.S_ast_Type(ptr %a308) + br label %for.step8558 +for.step8558: + %t634 = load i64, ptr %a294 + %t635 = add i64 %t634, 1 + store i64 %t635, ptr %a294 + br label %for.cond8556 +for.end8559: + %t636 = load ptr, ptr %a1 + %t637 = load i64, ptr %a290 + call void @finch.gen.heldEnd(ptr %t636, i64 %t637) + %t638 = load { ptr, i64, i64 }, ptr %a284 + store { ptr, i64, i64 } %t638, ptr %a639 + call void @finch_str_copy(ptr %a640, ptr %a639) + %t641 = load { ptr, i64, i64 }, ptr %a640 + %t642 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t641, 0 + %t643 = load %S.ast.Type, ptr %a61 + store %S.ast.Type %t643, ptr %a644 + call void @finch.copy.S_ast_Type(ptr %a645, ptr %a644) + %t646 = load %S.ast.Type, ptr %a645 + %t647 = insertvalue %S.gen.Val %t642, %S.ast.Type %t646, 1 + %t648 = load ptr, ptr %a1 + %t649 = load %S.ast.Type, ptr %a61 + %t650 = call i1 @finch.gen.owning(ptr %t648, %S.ast.Type %t649) + %t651 = insertvalue %S.gen.Val %t647, i1 %t650, 2 + call void @finch_str_drop(ptr %a284) + call void @finch.drop.arr_int(ptr %a79) + call void @finch_str_drop(ptr %a65) + call void @finch.drop.S_ast_Type(ptr %a61) + call void @finch.drop.S_ast_Node(ptr %a20) + call void @finch.drop.S_gen_StructDef(ptr %a19) + ret %S.gen.Val %t651 +} + +define internal void @finch.gen.noteMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca %S.docs.Doc, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic8622, label %ok8623 +panic8622: + call void @finch_panic(ptr @.str.5584, i64 5218, ptr @.str.5585) + unreachable +ok8623: + %t6 = getelementptr inbounds %S.gen.Gen, ptr %t4, i32 0, i32 28 + %t7 = load i1, ptr %t6 + %t8 = xor i1 %t7, true + br i1 %t8, label %then8624, label %endif8626 +then8624: + ret void +endif8626: + %t9 = load { ptr, i64, i64 }, ptr %a3 + %t10 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t11 = load { ptr, i64, i64 }, ptr %t10 + %t12 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t9, { ptr, i64, i64 } %t11) + store %S.docs.Doc %t12, ptr %a13 + %t14 = getelementptr inbounds %S.docs.Doc, ptr %a13, i32 0, i32 0 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp sgt i64 %t16, 0 + br i1 %t17, label %then8627, label %endif8629 +then8627: + %t18 = load ptr, ptr %a1 + %t19 = load %S.ast.Node, ptr %a2 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 12 + %t21 = load i64, ptr %t20 + %t22 = add i64 %t21, 1 + %t23 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t23, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = load %S.docs.Doc, ptr %a13 + %t27 = call { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %t26) + call void @finch.gen.noteRef(ptr %t18, %S.ast.Node %t19, i64 %t22, i64 %t25, { ptr, i64, i64 } %t27, { ptr, i64, i64 } { ptr @.str.5586, i64 0, i64 0 }, i64 0, i64 0) + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_drop(ptr %a28) + br label %endif8629 +endif8629: + call void @finch.drop.S_docs_Doc(ptr %a13) + ret void +} + +define internal %S.gen.Val @finch.gen.method(ptr %p0, %S.ast.Node %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a10 = alloca %S.ast.Node, align 16 + %a11 = alloca %S.ast.Node, align 16 + %a13 = alloca %S.ast.Node, align 16 + %a17 = alloca i64, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca i64, align 16 + %a36 = alloca %S.ast.Node, align 16 + %a37 = alloca %S.ast.Node, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca i64, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca i64, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca i64, align 16 + %a165 = alloca i64, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca i64, align 16 + %a184 = alloca %S.ast.Node, align 16 + %a185 = alloca %S.ast.Node, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca i64, align 16 + %a247 = alloca i64, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca %S.gen.Ref, align 16 + %a266 = alloca i64, align 16 + %a270 = alloca %S.ast.Type, align 16 + %a271 = alloca %S.ast.Type, align 16 + %a273 = alloca %S.ast.Type, align 16 + %a279 = alloca %S.ast.Type, align 16 + %a280 = alloca %S.ast.Type, align 16 + %a283 = alloca %S.ast.Type, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca i64, align 16 + %a307 = alloca i64, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca %S.gen.Val, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca %S.gen.Val, align 16 + %a372 = alloca %S.gen.Val, align 16 + %a374 = alloca %S.gen.Val, align 16 + %a384 = alloca %S.ast.Type, align 16 + %a385 = alloca %S.ast.Type, align 16 + %a389 = alloca %S.gen.Val, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca %S.gen.Val, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a418 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a435 = alloca i64, align 16 + %a438 = alloca i64, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a480 = alloca %S.gen.Val, align 16 + %a497 = alloca %S.ast.Type, align 16 + %a498 = alloca %S.ast.Type, align 16 + %a500 = alloca %S.ast.Type, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca i1, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a533 = alloca { ptr, i64, i64 }, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a546 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca %S.ast.Type, align 16 + %a579 = alloca %S.ast.Type, align 16 + %a582 = alloca %S.ast.Type, align 16 + %a584 = alloca { ptr, i64, i64 }, align 16 + %a585 = alloca { ptr, i64, i64 }, align 16 + %a588 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a592 = alloca { ptr, i64, i64 }, align 16 + %a597 = alloca { ptr, i64, i64 }, align 16 + %a598 = alloca { ptr, i64, i64 }, align 16 + %a607 = alloca { ptr, i64, i64 }, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a611 = alloca { ptr, i64, i64 }, align 16 + %a617 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca { ptr, i64, i64 }, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a639 = alloca i64, align 16 + %a644 = alloca { ptr, i64, i64 }, align 16 + %a645 = alloca { ptr, i64, i64 }, align 16 + %a655 = alloca i64, align 16 + %a686 = alloca i64, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca i64, align 16 + %a719 = alloca %S.gen.FnSig, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a725 = alloca { ptr, i64, i64 }, align 16 + %a732 = alloca { ptr, i64, i64 }, align 16 + %a733 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a760 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a763 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a768 = alloca { ptr, i64, i64 }, align 16 + %a769 = alloca { ptr, i64, i64 }, align 16 + %a770 = alloca { ptr, i64, i64 }, align 16 + %a771 = alloca { ptr, i64, i64 }, align 16 + %a773 = alloca { ptr, i64, i64 }, align 16 + %a774 = alloca { ptr, i64, i64 }, align 16 + %a775 = alloca { ptr, i64, i64 }, align 16 + %a776 = alloca { ptr, i64, i64 }, align 16 + %a780 = alloca { ptr, i64, i64 }, align 16 + %a781 = alloca { ptr, i64, i64 }, align 16 + %a782 = alloca { ptr, i64, i64 }, align 16 + %a783 = alloca { ptr, i64, i64 }, align 16 + %a785 = alloca { ptr, i64, i64 }, align 16 + %a786 = alloca { ptr, i64, i64 }, align 16 + %a787 = alloca { ptr, i64, i64 }, align 16 + %a788 = alloca { ptr, i64, i64 }, align 16 + %a792 = alloca { ptr, i64, i64 }, align 16 + %a793 = alloca { ptr, i64, i64 }, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca { ptr, i64, i64 }, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a799 = alloca { ptr, i64, i64 }, align 16 + %a800 = alloca { ptr, i64, i64 }, align 16 + %a802 = alloca { ptr, i64, i64 }, align 16 + %a807 = alloca { ptr, i64, i64 }, align 16 + %a808 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a811 = alloca { ptr, i64, i64 }, align 16 + %a812 = alloca { ptr, i64, i64 }, align 16 + %a813 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a822 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a832 = alloca { ptr, i64, i64 }, align 16 + %a833 = alloca { ptr, i64, i64 }, align 16 + %a834 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a837 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a839 = alloca { ptr, i64, i64 }, align 16 + %a842 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a845 = alloca { ptr, i64, i64 }, align 16 + %a846 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a852 = alloca { ptr, i64, i64 }, align 16 + %a853 = alloca { ptr, i64, i64 }, align 16 + %a854 = alloca { ptr, i64, i64 }, align 16 + %a856 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a871 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a889 = alloca { ptr, i64, i64 }, align 16 + %a890 = alloca { ptr, i64, i64 }, align 16 + %a891 = alloca { ptr, i64, i64 }, align 16 + %a895 = alloca { ptr, i64, i64 }, align 16 + %a896 = alloca { ptr, i64, i64 }, align 16 + %a897 = alloca { ptr, i64, i64 }, align 16 + %a898 = alloca { ptr, i64, i64 }, align 16 + %a899 = alloca { ptr, i64, i64 }, align 16 + %a901 = alloca { ptr, i64, i64 }, align 16 + %a902 = alloca { ptr, i64, i64 }, align 16 + %a903 = alloca { ptr, i64, i64 }, align 16 + %a904 = alloca { ptr, i64, i64 }, align 16 + %a906 = alloca { ptr, i64, i64 }, align 16 + %a909 = alloca { ptr, i64, i64 }, align 16 + %a916 = alloca i64, align 16 + %a923 = alloca %S.gen.Var, align 16 + %a928 = alloca { ptr, i64, i64 }, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a930 = alloca { ptr, i64, i64 }, align 16 + %a932 = alloca { ptr, i64, i64 }, align 16 + %a933 = alloca { ptr, i64, i64 }, align 16 + %a934 = alloca { ptr, i64, i64 }, align 16 + %a935 = alloca { ptr, i64, i64 }, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a958 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a968 = alloca { ptr, i64, i64 }, align 16 + %a969 = alloca %S.gen.Val, align 16 + %a989 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a991 = alloca { ptr, i64, i64 }, align 16 + %a992 = alloca { ptr, i64, i64 }, align 16 + %a994 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + %t3 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t4 = load { ptr, i64, i64 }, ptr %t3 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 0, %t5 + br i1 %t6, label %range8630, label %inrange8631 +range8630: + call void @finch_panic_index(ptr @.str.5587, i64 5228, i64 0, i64 %t5) + unreachable +inrange8631: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds %S.ast.Node, ptr %t7, i64 0 + %t9 = load %S.ast.Node, ptr %t8 + store %S.ast.Node %t9, ptr %a10 + call void @finch.copy.S_ast_Node(ptr %a11, ptr %a10) + %t12 = load %S.ast.Node, ptr %a11 + store %S.ast.Node %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = load %S.ast.Node, ptr %a13 + %t16 = call i64 @finch.gen.sumNamed(ptr %t14, %S.ast.Node %t15) + store i64 %t16, ptr %a17 + %t18 = load i64, ptr %a17 + %t19 = icmp sge i64 %t18, 0 + br i1 %t19, label %then8632, label %endif8634 +then8632: + store { ptr, i64, i64 } zeroinitializer, ptr %a20 + %t21 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + store i64 1, ptr %a24 + br label %for.cond8635 +for.cond8635: + %t25 = load i64, ptr %a24 + %t26 = icmp slt i64 %t25, %t23 + br i1 %t26, label %for.body8636, label %for.end8638 +for.body8636: + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t28 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t29 = load i64, ptr %a24 + %t30 = load { ptr, i64, i64 }, ptr %t28 + %t31 = extractvalue { ptr, i64, i64 } %t30, 1 + %t32 = icmp uge i64 %t29, %t31 + br i1 %t32, label %range8639, label %inrange8640 +range8639: + call void @finch_panic_index(ptr @.str.5588, i64 5233, i64 %t29, i64 %t31) + unreachable +inrange8640: + %t33 = extractvalue { ptr, i64, i64 } %t30, 0 + %t34 = getelementptr inbounds %S.ast.Node, ptr %t33, i64 %t29 + %t35 = load %S.ast.Node, ptr %t34 + store %S.ast.Node %t35, ptr %a36 + call void @finch.copy.S_ast_Node(ptr %a37, ptr %a36) + %t38 = load %S.ast.Node, ptr %a37 + %t39 = load i64, ptr %t27 + %t40 = add i64 %t39, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t40, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t41 = load ptr, ptr %a20 + %t42 = getelementptr inbounds %S.ast.Node, ptr %t41, i64 %t39 + store %S.ast.Node %t38, ptr %t42 + store i64 %t40, ptr %t27 + br label %for.step8637 +for.step8637: + %t43 = load i64, ptr %a24 + %t44 = add i64 %t43, 1 + store i64 %t44, ptr %a24 + br label %for.cond8635 +for.end8638: + %t45 = load ptr, ptr %a1 + %t46 = load i64, ptr %a17 + %t47 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t48 = load { ptr, i64, i64 }, ptr %t47 + %t49 = load { ptr, i64, i64 }, ptr %a20 + %t50 = load %S.ast.Node, ptr %a2 + %t51 = call %S.gen.Val @finch.gen.sumMake(ptr %t45, i64 %t46, { ptr, i64, i64 } %t48, { ptr, i64, i64 } %t49, %S.ast.Node %t50) + call void @finch.drop.arr_S_ast_Node(ptr %a20) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t51 +endif8634: + %t52 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 0 + %t53 = load { ptr, i64, i64 }, ptr %t52 + store { ptr, i64, i64 } %t53, ptr %a54 + store { ptr, i64, i64 } { ptr @.str.5589, i64 3, i64 0 }, ptr %a55 + %t56 = call i32 @finch_str_eq(ptr %a54, ptr %a55) + %t57 = icmp ne i32 %t56, 0 + br label %logic.from8641 +logic.from8641: + br i1 %t57, label %logic.rhs8642, label %logic.end8643 +logic.rhs8642: + %t58 = load ptr, ptr %a1 + %t59 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 + %t60 = load { ptr, i64, i64 }, ptr %t59 + %t61 = call i64 @finch.gen.lookup(ptr %t58, { ptr, i64, i64 } %t60) + %t62 = icmp slt i64 %t61, 0 + br label %logic.rend8644 +logic.rend8644: + br label %logic.end8643 +logic.end8643: + %t63 = phi i1 [ false, %logic.from8641 ], [ %t62, %logic.rend8644 ] + br i1 %t63, label %then8645, label %endif8647 +then8645: + %t64 = getelementptr inbounds %S.ast.Node, ptr %a13, i32 0, i32 1 + %t65 = load { ptr, i64, i64 }, ptr %t64 + store { ptr, i64, i64 } %t65, ptr %a66 + call void @finch_str_copy(ptr %a67, ptr %a66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t68, ptr %a69 + %t70 = load ptr, ptr %a1 + %t71 = load { ptr, i64, i64 }, ptr %a69 + %t72 = call i1 @finch.gen.imports(ptr %t70, { ptr, i64, i64 } %t71) + %t73 = xor i1 %t72, true + br i1 %t73, label %then8648, label %endif8650 +then8648: + %t74 = load ptr, ptr %a1 + %t75 = load %S.ast.Node, ptr %a13 + %t76 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.5590, i64 38, i64 0 }, ptr %a78 + store { ptr, i64, i64 } %t76, ptr %a79 + call void @finch_str_concat(ptr %a77, ptr %a78, ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t80, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.5591, i64 32, i64 0 }, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + store { ptr, i64, i64 } %t80, ptr %a84 + call void @finch_str_drop(ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a81 + %t86 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t85, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t85, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t91, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.5592, i64 13, i64 0 }, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + store { ptr, i64, i64 } %t91, ptr %a95 + call void @finch_str_drop(ptr %a95) + %t96 = load { ptr, i64, i64 }, ptr %a92 + call void @finch.gen.fail(ptr %t74, %S.ast.Node %t75, { ptr, i64, i64 } %t96) + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %endif8650 +endif8650: + %t98 = load ptr, ptr %a1 + %t99 = load { ptr, i64, i64 }, ptr %a69 + %t100 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t101 = load { ptr, i64, i64 }, ptr %t100 + %t102 = call i64 @finch.gen.findFn(ptr %t98, { ptr, i64, i64 } %t99, { ptr, i64, i64 } %t101) + store i64 %t102, ptr %a103 + %t104 = load i64, ptr %a103 + %t105 = icmp sge i64 %t104, 0 + br i1 %t105, label %then8651, label %endif8653 +then8651: + %t106 = load ptr, ptr %a1 + %t107 = load i64, ptr %a103 + %t108 = load %S.ast.Node, ptr %a2 + %t109 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.5593, i64 1, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a110 + %t114 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t115 = load { ptr, i64, i64 }, ptr %t114 + store { ptr, i64, i64 } %t113, ptr %a117 + store { ptr, i64, i64 } %t115, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t113, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a116 + %t121 = call %S.gen.Val @finch.gen.callFn(ptr %t106, i64 %t107, %S.ast.Node %t108, i64 1, { ptr, i64, i64 } %t120, { ptr, i64, i64 } { ptr @.str.5594, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.5595, i64 0, i64 0 }) + store { ptr, i64, i64 } %t120, ptr %a122 + call void @finch_str_drop(ptr %a122) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t121 +endif8653: + %t123 = load ptr, ptr %a1 + %t124 = load { ptr, i64, i64 }, ptr %a69 + %t125 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t126 = load { ptr, i64, i64 }, ptr %t125 + %t127 = call i64 @finch.gen.findTemplate(ptr %t123, { ptr, i64, i64 } %t124, { ptr, i64, i64 } %t126, { ptr, i64, i64 } { ptr @.str.5596, i64 0, i64 0 }, i1 false) + store i64 %t127, ptr %a128 + %t129 = load i64, ptr %a128 + %t130 = icmp sge i64 %t129, 0 + br i1 %t130, label %then8654, label %endif8656 +then8654: + %t131 = load ptr, ptr %a1 + %t132 = load %S.ast.Node, ptr %a2 + %t133 = load i64, ptr %a128 + %t134 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t134, ptr %a136 + store { ptr, i64, i64 } { ptr @.str.5597, i64 1, i64 0 }, ptr %a137 + call void @finch_str_concat(ptr %a135, ptr %a136, ptr %a137) + %t138 = load { ptr, i64, i64 }, ptr %a135 + %t139 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t140 = load { ptr, i64, i64 }, ptr %t139 + store { ptr, i64, i64 } %t138, ptr %a142 + store { ptr, i64, i64 } %t140, ptr %a143 + call void @finch_str_concat(ptr %a141, ptr %a142, ptr %a143) + store { ptr, i64, i64 } %t138, ptr %a144 + call void @finch_str_drop(ptr %a144) + %t145 = load { ptr, i64, i64 }, ptr %a141 + %t146 = call %S.gen.Val @finch.gen.genericCall(ptr %t131, %S.ast.Node %t132, i64 %t133, i64 1, { ptr, i64, i64 } %t145) + store { ptr, i64, i64 } %t145, ptr %a147 + call void @finch_str_drop(ptr %a147) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t146 +endif8656: + %t148 = load ptr, ptr %a1 + %t149 = load { ptr, i64, i64 }, ptr %a69 + %t150 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t151 = load { ptr, i64, i64 }, ptr %t150 + %t152 = call i64 @finch.gen.findEnum(ptr %t148, { ptr, i64, i64 } %t149, { ptr, i64, i64 } %t151) + store i64 %t152, ptr %a153 + %t154 = load i64, ptr %a153 + %t155 = icmp sge i64 %t154, 0 + br i1 %t155, label %then8657, label %endif8659 +then8657: + %t156 = load ptr, ptr %a1 + %t157 = load %S.ast.Node, ptr %a2 + %t158 = load i64, ptr %a153 + %t159 = call %S.gen.Val @finch.gen.enumFrom(ptr %t156, %S.ast.Node %t157, i64 %t158) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t159 +endif8659: + %t160 = load ptr, ptr %a1 + %t161 = load { ptr, i64, i64 }, ptr %a69 + %t162 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t163 = load { ptr, i64, i64 }, ptr %t162 + %t164 = call i64 @finch.gen.findStruct(ptr %t160, { ptr, i64, i64 } %t161, { ptr, i64, i64 } %t163) + store i64 %t164, ptr %a165 + %t166 = load i64, ptr %a165 + %t167 = icmp sge i64 %t166, 0 + br i1 %t167, label %then8660, label %endif8662 +then8660: + store { ptr, i64, i64 } zeroinitializer, ptr %a168 + %t169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 + %t171 = load i64, ptr %t170 + store i64 1, ptr %a172 + br label %for.cond8663 +for.cond8663: + %t173 = load i64, ptr %a172 + %t174 = icmp slt i64 %t173, %t171 + br i1 %t174, label %for.body8664, label %for.end8666 +for.body8664: + %t175 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 + %t176 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t177 = load i64, ptr %a172 + %t178 = load { ptr, i64, i64 }, ptr %t176 + %t179 = extractvalue { ptr, i64, i64 } %t178, 1 + %t180 = icmp uge i64 %t177, %t179 + br i1 %t180, label %range8667, label %inrange8668 +range8667: + call void @finch_panic_index(ptr @.str.5598, i64 5258, i64 %t177, i64 %t179) + unreachable +inrange8668: + %t181 = extractvalue { ptr, i64, i64 } %t178, 0 + %t182 = getelementptr inbounds %S.ast.Node, ptr %t181, i64 %t177 + %t183 = load %S.ast.Node, ptr %t182 + store %S.ast.Node %t183, ptr %a184 + call void @finch.copy.S_ast_Node(ptr %a185, ptr %a184) + %t186 = load %S.ast.Node, ptr %a185 + %t187 = load i64, ptr %t175 + %t188 = add i64 %t187, 1 + call void @finch_arr_reserve(ptr %a168, i64 %t188, i64 ptrtoint (ptr getelementptr (%S.ast.Node, ptr null, i32 1) to i64)) + %t189 = load ptr, ptr %a168 + %t190 = getelementptr inbounds %S.ast.Node, ptr %t189, i64 %t187 + store %S.ast.Node %t186, ptr %t190 + store i64 %t188, ptr %t175 + br label %for.step8665 +for.step8665: + %t191 = load i64, ptr %a172 + %t192 = add i64 %t191, 1 + store i64 %t192, ptr %a172 + br label %for.cond8663 +for.end8666: + %t193 = load ptr, ptr %a1 + %t194 = load i64, ptr %a165 + %t195 = load { ptr, i64, i64 }, ptr %a168 + %t196 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 10 + %t197 = load { ptr, i64, i64 }, ptr %t196 + %t198 = load %S.ast.Node, ptr %a2 + %t199 = call %S.gen.Val @finch.gen.construct(ptr %t193, i64 %t194, { ptr, i64, i64 } %t195, { ptr, i64, i64 } %t197, %S.ast.Node %t198) + call void @finch.drop.arr_S_ast_Node(ptr %a168) + call void @finch_str_drop(ptr %a69) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t199 +endif8662: + %t200 = load ptr, ptr %a1 + %t201 = load %S.ast.Node, ptr %a2 + %t202 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.5599, i64 12, i64 0 }, ptr %a204 + store { ptr, i64, i64 } %t202, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + %t206 = load { ptr, i64, i64 }, ptr %a203 + store { ptr, i64, i64 } %t206, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.5600, i64 35, i64 0 }, ptr %a209 + call void @finch_str_concat(ptr %a207, ptr %a208, ptr %a209) + store { ptr, i64, i64 } %t206, ptr %a210 + call void @finch_str_drop(ptr %a210) + %t211 = load { ptr, i64, i64 }, ptr %a207 + %t212 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t213 = load { ptr, i64, i64 }, ptr %t212 + store { ptr, i64, i64 } %t211, ptr %a215 + store { ptr, i64, i64 } %t213, ptr %a216 + call void @finch_str_concat(ptr %a214, ptr %a215, ptr %a216) + store { ptr, i64, i64 } %t211, ptr %a217 + call void @finch_str_drop(ptr %a217) + %t218 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t218, ptr %a220 + store { ptr, i64, i64 } { ptr @.str.5601, i64 1, i64 0 }, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + store { ptr, i64, i64 } %t218, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = load { ptr, i64, i64 }, ptr %a219 + call void @finch.gen.fail(ptr %t200, %S.ast.Node %t201, { ptr, i64, i64 } %t223) + store { ptr, i64, i64 } %t223, ptr %a224 + call void @finch_str_drop(ptr %a224) + call void @finch_str_drop(ptr %a69) + br label %endif8647 +endif8647: + %t225 = mul i64 8, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t226 = call ptr @finch_alloc(i64 %t225) + %t227 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 0 + store { ptr, i64, i64 } { ptr @.str.5602, i64 4, i64 0 }, ptr %t227 + %t228 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 1 + store { ptr, i64, i64 } { ptr @.str.5603, i64 3, i64 0 }, ptr %t228 + %t229 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 2 + store { ptr, i64, i64 } { ptr @.str.5604, i64 6, i64 0 }, ptr %t229 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 3 + store { ptr, i64, i64 } { ptr @.str.5605, i64 6, i64 0 }, ptr %t230 + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 4 + store { ptr, i64, i64 } { ptr @.str.5606, i64 5, i64 0 }, ptr %t231 + %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 5 + store { ptr, i64, i64 } { ptr @.str.5607, i64 6, i64 0 }, ptr %t232 + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 6 + store { ptr, i64, i64 } { ptr @.str.5608, i64 4, i64 0 }, ptr %t233 + %t234 = getelementptr inbounds { ptr, i64, i64 }, ptr %t226, i64 7 + store { ptr, i64, i64 } { ptr @.str.5609, i64 7, i64 0 }, ptr %t234 + %t235 = insertvalue { ptr, i64, i64 } undef, ptr %t226, 0 + %t236 = insertvalue { ptr, i64, i64 } %t235, i64 8, 1 + %t237 = insertvalue { ptr, i64, i64 } %t236, i64 8, 2 + store { ptr, i64, i64 } %t237, ptr %a238 + %t239 = load ptr, ptr %a1 + %t240 = load %S.ast.Node, ptr %a13 + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 + %t242 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t243 = load { ptr, i64, i64 }, ptr %t242 + store i64 -1, ptr %a244 + %t245 = load i64, ptr %t241 + %t246 = load ptr, ptr %a238 + store i64 0, ptr %a247 + br label %find.cond8669 +find.cond8669: + %t248 = load i64, ptr %a247 + %t249 = icmp slt i64 %t248, %t245 + br i1 %t249, label %find.body8670, label %find.end8673 +find.body8670: + %t250 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i64 %t248 + %t251 = load { ptr, i64, i64 }, ptr %t250 + store { ptr, i64, i64 } %t251, ptr %a252 + store { ptr, i64, i64 } %t243, ptr %a253 + %t254 = call i32 @finch_str_eq(ptr %a252, ptr %a253) + %t255 = icmp ne i32 %t254, 0 + br i1 %t255, label %find.hit8671, label %find.next8672 +find.hit8671: + store i64 %t248, ptr %a244 + br label %find.end8673 +find.next8672: + %t256 = add i64 %t248, 1 + store i64 %t256, ptr %a247 + br label %find.cond8669 +find.end8673: + %t257 = load i64, ptr %a244 + %t258 = icmp sge i64 %t257, 0 + %t259 = call %S.gen.Ref @finch.gen.ref(ptr %t239, %S.ast.Node %t240, i1 %t258) + store %S.gen.Ref %t259, ptr %a260 + %t261 = load ptr, ptr %a1 + %t262 = icmp eq ptr %t261, null + br i1 %t262, label %panic8674, label %ok8675 +panic8674: + call void @finch_panic(ptr @.str.5610, i64 5266, ptr @.str.5611) + unreachable +ok8675: + %t263 = getelementptr inbounds %S.gen.Gen, ptr %t261, i32 0, i32 11 + %t264 = getelementptr inbounds { ptr, i64, i64 }, ptr %t263, i32 0, i32 1 + %t265 = load i64, ptr %t264 + store i64 %t265, ptr %a266 + %t267 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t268 = getelementptr inbounds %S.gen.Val, ptr %t267, i32 0, i32 1 + %t269 = load %S.ast.Type, ptr %t268 + store %S.ast.Type %t269, ptr %a270 + call void @finch.copy.S_ast_Type(ptr %a271, ptr %a270) + %t272 = load %S.ast.Type, ptr %a271 + store %S.ast.Type %t272, ptr %a273 + %t274 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t275 = load i1, ptr %t274 + br i1 %t275, label %then8676, label %endif8678 +then8676: + %t276 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t277 = getelementptr inbounds %S.gen.Place, ptr %t276, i32 0, i32 1 + %t278 = load %S.ast.Type, ptr %t277 + store %S.ast.Type %t278, ptr %a279 + call void @finch.copy.S_ast_Type(ptr %a280, ptr %a279) + %t281 = load %S.ast.Type, ptr %a280 + %t282 = load %S.ast.Type, ptr %a273 + store %S.ast.Type %t281, ptr %a273 + store %S.ast.Type %t282, ptr %a283 + call void @finch.drop.S_ast_Type(ptr %a283) + br label %endif8678 +endif8678: + %t284 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + store { ptr, i64, i64 } { ptr @.str.5612, i64 5, i64 0 }, ptr %a287 + %t288 = call i32 @finch_str_eq(ptr %a286, ptr %a287) + %t289 = icmp ne i32 %t288, 0 + br i1 %t289, label %then8679, label %endif8681 +then8679: + store { ptr, i64, i64 } { ptr @.str.5613, i64 0, i64 0 }, ptr %a290 + %t291 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t292 = load i1, ptr %t291 + br i1 %t292, label %then8682, label %else8683 +then8682: + %t293 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t294 = getelementptr inbounds %S.gen.Place, ptr %t293, i32 0, i32 0 + %t295 = load { ptr, i64, i64 }, ptr %t294 + store { ptr, i64, i64 } %t295, ptr %a296 + call void @finch_str_copy(ptr %a297, ptr %a296) + %t298 = load { ptr, i64, i64 }, ptr %a297 + %t299 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t298, ptr %a290 + store { ptr, i64, i64 } %t299, ptr %a300 + call void @finch_str_drop(ptr %a300) + br label %endif8684 +else8683: + %t301 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 + %t302 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t303 = load { ptr, i64, i64 }, ptr %t302 + store i64 -1, ptr %a304 + %t305 = load i64, ptr %t301 + %t306 = load ptr, ptr %a238 + store i64 0, ptr %a307 + br label %find.cond8685 +find.cond8685: + %t308 = load i64, ptr %a307 + %t309 = icmp slt i64 %t308, %t305 + br i1 %t309, label %find.body8686, label %find.end8689 +find.body8686: + %t310 = getelementptr inbounds { ptr, i64, i64 }, ptr %t306, i64 %t308 + %t311 = load { ptr, i64, i64 }, ptr %t310 + store { ptr, i64, i64 } %t311, ptr %a312 + store { ptr, i64, i64 } %t303, ptr %a313 + %t314 = call i32 @finch_str_eq(ptr %a312, ptr %a313) + %t315 = icmp ne i32 %t314, 0 + br i1 %t315, label %find.hit8687, label %find.next8688 +find.hit8687: + store i64 %t308, ptr %a304 + br label %find.end8689 +find.next8688: + %t316 = add i64 %t308, 1 + store i64 %t316, ptr %a307 + br label %find.cond8685 +find.end8689: + %t317 = load i64, ptr %a304 + %t318 = icmp sge i64 %t317, 0 + br i1 %t318, label %then8690, label %endif8692 +then8690: + %t319 = load ptr, ptr %a1 + %t320 = load %S.ast.Node, ptr %a2 + %t321 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t322 = load { ptr, i64, i64 }, ptr %t321 + store { ptr, i64, i64 } %t322, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.5614, i64 63, i64 0 }, ptr %a325 + call void @finch_str_concat(ptr %a323, ptr %a324, ptr %a325) + %t326 = load { ptr, i64, i64 }, ptr %a323 + call void @finch.gen.fail(ptr %t319, %S.ast.Node %t320, { ptr, i64, i64 } %t326) + store { ptr, i64, i64 } %t326, ptr %a327 + call void @finch_str_drop(ptr %a327) + br label %endif8692 +endif8692: + %t328 = load ptr, ptr %a1 + %t329 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t330 = load %S.gen.Val, ptr %t329 + %t331 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t328, %S.gen.Val %t330) + %t332 = load { ptr, i64, i64 }, ptr %a290 + store { ptr, i64, i64 } %t331, ptr %a290 + store { ptr, i64, i64 } %t332, ptr %a333 + call void @finch_str_drop(ptr %a333) + %t334 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t335 = getelementptr inbounds %S.gen.Val, ptr %t334, i32 0, i32 2 + %t336 = load i1, ptr %t335 + br i1 %t336, label %then8693, label %endif8695 +then8693: + %t337 = load ptr, ptr %a1 + %t338 = load { ptr, i64, i64 }, ptr %a290 + %t339 = load %S.ast.Type, ptr %a273 + call void @finch.gen.holdAddr(ptr %t337, { ptr, i64, i64 } %t338, %S.ast.Type %t339) + br label %endif8695 +endif8695: + br label %endif8684 +endif8684: + %t340 = load ptr, ptr %a1 + %t341 = load %S.ast.Node, ptr %a2 + %t342 = call { ptr, i64, i64 } @finch.docs.arrayMethods() + call void @finch.gen.noteMethod(ptr %t340, %S.ast.Node %t341, { ptr, i64, i64 } %t342) + store { ptr, i64, i64 } %t342, ptr %a343 + call void @finch.drop.arr_S_docs_Doc(ptr %a343) + %t344 = load ptr, ptr %a1 + %t345 = load %S.ast.Node, ptr %a2 + %t346 = load { ptr, i64, i64 }, ptr %a290 + %t347 = load %S.ast.Type, ptr %a273 + %t348 = call %S.gen.Val @finch.gen.arrayMethod(ptr %t344, %S.ast.Node %t345, { ptr, i64, i64 } %t346, %S.ast.Type %t347) + store %S.gen.Val %t348, ptr %a349 + %t350 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t351 = load i1, ptr %t350 + %t352 = xor i1 %t351, true + br label %logic.from8696 +logic.from8696: + br i1 %t352, label %logic.rhs8697, label %logic.end8698 +logic.rhs8697: + %t353 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t354 = getelementptr inbounds %S.gen.Val, ptr %t353, i32 0, i32 2 + %t355 = load i1, ptr %t354 + br label %logic.rend8699 +logic.rend8699: + br label %logic.end8698 +logic.end8698: + %t356 = phi i1 [ false, %logic.from8696 ], [ %t355, %logic.rend8699 ] + br i1 %t356, label %then8700, label %endif8702 +then8700: + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a290 + %t359 = load %S.ast.Type, ptr %a273 + call void @finch.gen.dropAt(ptr %t357, { ptr, i64, i64 } %t358, %S.ast.Type %t359) + br label %endif8702 +endif8702: + %t360 = load ptr, ptr %a1 + %t361 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t360, i64 %t361) + %t362 = load %S.gen.Val, ptr %a349 + call void @finch_str_drop(ptr %a290) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t362 +endif8681: + %t363 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t364 = load { ptr, i64, i64 }, ptr %t363 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.5615, i64 3, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br i1 %t368, label %then8703, label %endif8705 +then8703: + %t369 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t370 = load %S.gen.Val, ptr %t369 + store %S.gen.Val %t370, ptr %a371 + call void @finch.copy.S_gen_Val(ptr %a372, ptr %a371) + %t373 = load %S.gen.Val, ptr %a372 + store %S.gen.Val %t373, ptr %a374 + %t375 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t376 = load i1, ptr %t375 + br i1 %t376, label %then8706, label %endif8708 +then8706: + %t377 = load ptr, ptr %a1 + %t378 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t379 = getelementptr inbounds %S.gen.Place, ptr %t378, i32 0, i32 0 + %t380 = load { ptr, i64, i64 }, ptr %t379 + %t381 = call { ptr, i64, i64 } @finch.gen.load(ptr %t377, { ptr, i64, i64 } { ptr @.str.5616, i64 17, i64 0 }, { ptr, i64, i64 } %t380) + %t382 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t381, 0 + %t383 = load %S.ast.Type, ptr %a273 + store %S.ast.Type %t383, ptr %a384 + call void @finch.copy.S_ast_Type(ptr %a385, ptr %a384) + %t386 = load %S.ast.Type, ptr %a385 + %t387 = insertvalue %S.gen.Val %t382, %S.ast.Type %t386, 1 + %t388 = load %S.gen.Val, ptr %a374 + store %S.gen.Val %t387, ptr %a374 + store %S.gen.Val %t388, ptr %a389 + call void @finch.drop.S_gen_Val(ptr %a389) + br label %endif8708 +endif8708: + %t390 = load ptr, ptr %a1 + %t391 = load %S.ast.Node, ptr %a2 + %t392 = call { ptr, i64, i64 } @finch.docs.strMethods() + call void @finch.gen.noteMethod(ptr %t390, %S.ast.Node %t391, { ptr, i64, i64 } %t392) + store { ptr, i64, i64 } %t392, ptr %a393 + call void @finch.drop.arr_S_docs_Doc(ptr %a393) + %t394 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t395 = load i1, ptr %t394 + %t396 = xor i1 %t395, true + br i1 %t396, label %then8709, label %endif8711 +then8709: + %t397 = load ptr, ptr %a1 + %t398 = load %S.gen.Val, ptr %a374 + call void @finch.gen.hold(ptr %t397, %S.gen.Val %t398) + br label %endif8711 +endif8711: + %t399 = load ptr, ptr %a1 + %t400 = load %S.ast.Node, ptr %a2 + %t401 = load ptr, ptr %a1 + %t402 = load %S.gen.Val, ptr %a374 + %t403 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t401, %S.gen.Val %t402) + %t404 = call %S.gen.Val @finch.gen.strMethod(ptr %t399, %S.ast.Node %t400, { ptr, i64, i64 } %t403) + store { ptr, i64, i64 } %t403, ptr %a405 + call void @finch_str_drop(ptr %a405) + store %S.gen.Val %t404, ptr %a406 + %t407 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t408 = load i1, ptr %t407 + %t409 = xor i1 %t408, true + br i1 %t409, label %then8712, label %endif8714 +then8712: + %t410 = load ptr, ptr %a1 + %t411 = load %S.gen.Val, ptr %a374 + call void @finch.gen.release(ptr %t410, %S.gen.Val %t411) + br label %endif8714 +endif8714: + %t412 = load ptr, ptr %a1 + %t413 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t412, i64 %t413) + %t414 = load %S.gen.Val, ptr %a406 + call void @finch.drop.S_gen_Val(ptr %a374) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t414 +endif8705: + %t415 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t416 = load { ptr, i64, i64 }, ptr %t415 + store { ptr, i64, i64 } %t416, ptr %a417 + store { ptr, i64, i64 } { ptr @.str.5617, i64 3, i64 0 }, ptr %a418 + %t419 = call i32 @finch_str_eq(ptr %a417, ptr %a418) + %t420 = icmp ne i32 %t419, 0 + br i1 %t420, label %then8715, label %endif8717 +then8715: + store { ptr, i64, i64 } { ptr @.str.5618, i64 0, i64 0 }, ptr %a421 + %t422 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t423 = load i1, ptr %t422 + br i1 %t423, label %then8718, label %else8719 +then8718: + %t424 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t425 = getelementptr inbounds %S.gen.Place, ptr %t424, i32 0, i32 0 + %t426 = load { ptr, i64, i64 }, ptr %t425 + store { ptr, i64, i64 } %t426, ptr %a427 + call void @finch_str_copy(ptr %a428, ptr %a427) + %t429 = load { ptr, i64, i64 }, ptr %a428 + %t430 = load { ptr, i64, i64 }, ptr %a421 + store { ptr, i64, i64 } %t429, ptr %a421 + store { ptr, i64, i64 } %t430, ptr %a431 + call void @finch_str_drop(ptr %a431) + br label %endif8720 +else8719: + %t432 = getelementptr inbounds { ptr, i64, i64 }, ptr %a238, i32 0, i32 1 + %t433 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t434 = load { ptr, i64, i64 }, ptr %t433 + store i64 -1, ptr %a435 + %t436 = load i64, ptr %t432 + %t437 = load ptr, ptr %a238 + store i64 0, ptr %a438 + br label %find.cond8721 +find.cond8721: + %t439 = load i64, ptr %a438 + %t440 = icmp slt i64 %t439, %t436 + br i1 %t440, label %find.body8722, label %find.end8725 +find.body8722: + %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t437, i64 %t439 + %t442 = load { ptr, i64, i64 }, ptr %t441 + store { ptr, i64, i64 } %t442, ptr %a443 + store { ptr, i64, i64 } %t434, ptr %a444 + %t445 = call i32 @finch_str_eq(ptr %a443, ptr %a444) + %t446 = icmp ne i32 %t445, 0 + br i1 %t446, label %find.hit8723, label %find.next8724 +find.hit8723: + store i64 %t439, ptr %a435 + br label %find.end8725 +find.next8724: + %t447 = add i64 %t439, 1 + store i64 %t447, ptr %a438 + br label %find.cond8721 +find.end8725: + %t448 = load i64, ptr %a435 + %t449 = icmp sge i64 %t448, 0 + br i1 %t449, label %then8726, label %endif8728 +then8726: + %t450 = load ptr, ptr %a1 + %t451 = load %S.ast.Node, ptr %a2 + %t452 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t453 = load { ptr, i64, i64 }, ptr %t452 + store { ptr, i64, i64 } %t453, ptr %a455 + store { ptr, i64, i64 } { ptr @.str.5619, i64 61, i64 0 }, ptr %a456 + call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) + %t457 = load { ptr, i64, i64 }, ptr %a454 + call void @finch.gen.fail(ptr %t450, %S.ast.Node %t451, { ptr, i64, i64 } %t457) + store { ptr, i64, i64 } %t457, ptr %a458 + call void @finch_str_drop(ptr %a458) + br label %endif8728 +endif8728: + %t459 = load ptr, ptr %a1 + %t460 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t461 = load %S.gen.Val, ptr %t460 + %t462 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t459, %S.gen.Val %t461) + %t463 = load { ptr, i64, i64 }, ptr %a421 + store { ptr, i64, i64 } %t462, ptr %a421 + store { ptr, i64, i64 } %t463, ptr %a464 + call void @finch_str_drop(ptr %a464) + %t465 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t466 = getelementptr inbounds %S.gen.Val, ptr %t465, i32 0, i32 2 + %t467 = load i1, ptr %t466 + br i1 %t467, label %then8729, label %endif8731 +then8729: + %t468 = load ptr, ptr %a1 + %t469 = load { ptr, i64, i64 }, ptr %a421 + %t470 = load %S.ast.Type, ptr %a273 + call void @finch.gen.holdAddr(ptr %t468, { ptr, i64, i64 } %t469, %S.ast.Type %t470) + br label %endif8731 +endif8731: + br label %endif8720 +endif8720: + %t471 = load ptr, ptr %a1 + %t472 = load %S.ast.Node, ptr %a2 + %t473 = call { ptr, i64, i64 } @finch.docs.mapMethods() + call void @finch.gen.noteMethod(ptr %t471, %S.ast.Node %t472, { ptr, i64, i64 } %t473) + store { ptr, i64, i64 } %t473, ptr %a474 + call void @finch.drop.arr_S_docs_Doc(ptr %a474) + %t475 = load ptr, ptr %a1 + %t476 = load %S.ast.Node, ptr %a2 + %t477 = load { ptr, i64, i64 }, ptr %a421 + %t478 = load %S.ast.Type, ptr %a273 + %t479 = call %S.gen.Val @finch.gen.mapMethod(ptr %t475, %S.ast.Node %t476, { ptr, i64, i64 } %t477, %S.ast.Type %t478) + store %S.gen.Val %t479, ptr %a480 + %t481 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t482 = load i1, ptr %t481 + %t483 = xor i1 %t482, true + br label %logic.from8732 +logic.from8732: + br i1 %t483, label %logic.rhs8733, label %logic.end8734 +logic.rhs8733: + %t484 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t485 = getelementptr inbounds %S.gen.Val, ptr %t484, i32 0, i32 2 + %t486 = load i1, ptr %t485 + br label %logic.rend8735 +logic.rend8735: + br label %logic.end8734 +logic.end8734: + %t487 = phi i1 [ false, %logic.from8732 ], [ %t486, %logic.rend8735 ] + br i1 %t487, label %then8736, label %endif8738 +then8736: + %t488 = load ptr, ptr %a1 + %t489 = load { ptr, i64, i64 }, ptr %a421 + %t490 = load %S.ast.Type, ptr %a273 + call void @finch.gen.dropAt(ptr %t488, { ptr, i64, i64 } %t489, %S.ast.Type %t490) + br label %endif8738 +endif8738: + %t491 = load ptr, ptr %a1 + %t492 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t491, i64 %t492) + %t493 = load %S.gen.Val, ptr %a480 + call void @finch_str_drop(ptr %a421) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t493 +endif8717: + %t494 = load ptr, ptr %a1 + %t495 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t494, i64 %t495) + %t496 = load %S.ast.Type, ptr %a273 + store %S.ast.Type %t496, ptr %a497 + call void @finch.copy.S_ast_Type(ptr %a498, ptr %a497) + %t499 = load %S.ast.Type, ptr %a498 + store %S.ast.Type %t499, ptr %a500 + store { ptr, i64, i64 } { ptr @.str.5620, i64 0, i64 0 }, ptr %a501 + store i1 false, ptr %a502 + %t503 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t504 = load { ptr, i64, i64 }, ptr %t503 + store { ptr, i64, i64 } %t504, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.5621, i64 3, i64 0 }, ptr %a506 + %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) + %t508 = icmp ne i32 %t507, 0 + br label %logic.from8739 +logic.from8739: + br i1 %t508, label %logic.rhs8740, label %logic.end8741 +logic.rhs8740: + %t509 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 + %t510 = getelementptr inbounds { ptr, i64, i64 }, ptr %t509, i32 0, i32 1 + %t511 = load i64, ptr %t510 + %t512 = icmp sgt i64 %t511, 0 + br label %logic.rend8742 +logic.rend8742: + br label %logic.end8741 +logic.end8741: + %t513 = phi i1 [ false, %logic.from8739 ], [ %t512, %logic.rend8742 ] + br label %logic.from8743 +logic.from8743: + br i1 %t513, label %logic.rhs8744, label %logic.end8745 +logic.rhs8744: + %t514 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 + %t515 = load { ptr, i64, i64 }, ptr %t514 + %t516 = extractvalue { ptr, i64, i64 } %t515, 1 + %t517 = icmp uge i64 0, %t516 + br i1 %t517, label %range8746, label %inrange8747 +range8746: + call void @finch_panic_index(ptr @.str.5622, i64 5333, i64 0, i64 %t516) + unreachable +inrange8747: + %t518 = extractvalue { ptr, i64, i64 } %t515, 0 + %t519 = getelementptr inbounds %S.ast.Type, ptr %t518, i64 0 + %t520 = getelementptr inbounds %S.ast.Type, ptr %t519, i32 0, i32 0 + %t521 = load { ptr, i64, i64 }, ptr %t520 + store { ptr, i64, i64 } %t521, ptr %a522 + store { ptr, i64, i64 } { ptr @.str.5623, i64 6, i64 0 }, ptr %a523 + %t524 = call i32 @finch_str_eq(ptr %a522, ptr %a523) + %t525 = icmp ne i32 %t524, 0 + br label %logic.rend8748 +logic.rend8748: + br label %logic.end8745 +logic.end8745: + %t526 = phi i1 [ false, %logic.from8743 ], [ %t525, %logic.rend8748 ] + br i1 %t526, label %then8749, label %else8750 +then8749: + %t527 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t528 = getelementptr inbounds %S.gen.Val, ptr %t527, i32 0, i32 0 + %t529 = load { ptr, i64, i64 }, ptr %t528 + store { ptr, i64, i64 } %t529, ptr %a530 + call void @finch_str_copy(ptr %a531, ptr %a530) + %t532 = load { ptr, i64, i64 }, ptr %a531 + store { ptr, i64, i64 } %t532, ptr %a533 + %t534 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t535 = load i1, ptr %t534 + br i1 %t535, label %then8752, label %endif8754 +then8752: + %t536 = load ptr, ptr %a1 + %t537 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t538 = getelementptr inbounds %S.gen.Place, ptr %t537, i32 0, i32 0 + %t539 = load { ptr, i64, i64 }, ptr %t538 + %t540 = call { ptr, i64, i64 } @finch.gen.load(ptr %t536, { ptr, i64, i64 } { ptr @.str.5624, i64 3, i64 0 }, { ptr, i64, i64 } %t539) + %t541 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } %t540, ptr %a533 + store { ptr, i64, i64 } %t541, ptr %a542 + call void @finch_str_drop(ptr %a542) + br label %endif8754 +endif8754: + %t543 = load ptr, ptr %a1 + %t544 = load ptr, ptr %a1 + %t545 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } { ptr @.str.5625, i64 12, i64 0 }, ptr %a547 + store { ptr, i64, i64 } %t545, ptr %a548 + call void @finch_str_concat(ptr %a546, ptr %a547, ptr %a548) + %t549 = load { ptr, i64, i64 }, ptr %a546 + store { ptr, i64, i64 } %t549, ptr %a551 + store { ptr, i64, i64 } { ptr @.str.5626, i64 6, i64 0 }, ptr %a552 + call void @finch_str_concat(ptr %a550, ptr %a551, ptr %a552) + store { ptr, i64, i64 } %t549, ptr %a553 + call void @finch_str_drop(ptr %a553) + %t554 = load { ptr, i64, i64 }, ptr %a550 + %t555 = call { ptr, i64, i64 } @finch.gen.op(ptr %t544, { ptr, i64, i64 } %t554) + store { ptr, i64, i64 } %t554, ptr %a556 + call void @finch_str_drop(ptr %a556) + %t557 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t558 = load { ptr, i64, i64 }, ptr %t557 + store { ptr, i64, i64 } { ptr @.str.5627, i64 8, i64 0 }, ptr %a560 + store { ptr, i64, i64 } %t558, ptr %a561 + call void @finch_str_concat(ptr %a559, ptr %a560, ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a559 + store { ptr, i64, i64 } %t562, ptr %a564 + store { ptr, i64, i64 } { ptr @.str.5628, i64 20, i64 0 }, ptr %a565 + call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) + store { ptr, i64, i64 } %t562, ptr %a566 + call void @finch_str_drop(ptr %a566) + %t567 = load { ptr, i64, i64 }, ptr %a563 + %t568 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t543, { ptr, i64, i64 } %t555, { ptr, i64, i64 } %t567, %S.ast.Node %t568) + store { ptr, i64, i64 } %t555, ptr %a569 + call void @finch_str_drop(ptr %a569) + store { ptr, i64, i64 } %t567, ptr %a570 + call void @finch_str_drop(ptr %a570) + %t571 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 1 + %t572 = load { ptr, i64, i64 }, ptr %t571 + %t573 = extractvalue { ptr, i64, i64 } %t572, 1 + %t574 = icmp uge i64 0, %t573 + br i1 %t574, label %range8755, label %inrange8756 +range8755: + call void @finch_panic_index(ptr @.str.5629, i64 5339, i64 0, i64 %t573) + unreachable +inrange8756: + %t575 = extractvalue { ptr, i64, i64 } %t572, 0 + %t576 = getelementptr inbounds %S.ast.Type, ptr %t575, i64 0 + %t577 = load %S.ast.Type, ptr %t576 + store %S.ast.Type %t577, ptr %a578 + call void @finch.copy.S_ast_Type(ptr %a579, ptr %a578) + %t580 = load %S.ast.Type, ptr %a579 + %t581 = load %S.ast.Type, ptr %a500 + store %S.ast.Type %t580, ptr %a500 + store %S.ast.Type %t581, ptr %a582 + call void @finch.drop.S_ast_Type(ptr %a582) + %t583 = load { ptr, i64, i64 }, ptr %a533 + store { ptr, i64, i64 } %t583, ptr %a584 + call void @finch_str_copy(ptr %a585, ptr %a584) + %t586 = load { ptr, i64, i64 }, ptr %a585 + %t587 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t586, ptr %a501 + store { ptr, i64, i64 } %t587, ptr %a588 + call void @finch_str_drop(ptr %a588) + call void @finch_str_drop(ptr %a533) + br label %endif8751 +else8750: + %t589 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t590 = load { ptr, i64, i64 }, ptr %t589 + store { ptr, i64, i64 } %t590, ptr %a591 + store { ptr, i64, i64 } { ptr @.str.5630, i64 6, i64 0 }, ptr %a592 + %t593 = call i32 @finch_str_eq(ptr %a591, ptr %a592) + %t594 = icmp ne i32 %t593, 0 + br label %logic.from8757 +logic.from8757: + br i1 %t594, label %logic.end8759, label %logic.rhs8758 +logic.rhs8758: + %t595 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t596 = load { ptr, i64, i64 }, ptr %t595 + store { ptr, i64, i64 } %t596, ptr %a597 + store { ptr, i64, i64 } { ptr @.str.5631, i64 4, i64 0 }, ptr %a598 + %t599 = call i32 @finch_str_eq(ptr %a597, ptr %a598) + %t600 = icmp ne i32 %t599, 0 + br label %logic.rend8760 +logic.rend8760: + br label %logic.end8759 +logic.end8759: + %t601 = phi i1 [ true, %logic.from8757 ], [ %t600, %logic.rend8760 ] + br i1 %t601, label %then8761, label %endif8763 +then8761: + %t602 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t603 = load i1, ptr %t602 + br i1 %t603, label %then8764, label %else8765 +then8764: + %t604 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 1 + %t605 = getelementptr inbounds %S.gen.Place, ptr %t604, i32 0, i32 0 + %t606 = load { ptr, i64, i64 }, ptr %t605 + store { ptr, i64, i64 } %t606, ptr %a607 + call void @finch_str_copy(ptr %a608, ptr %a607) + %t609 = load { ptr, i64, i64 }, ptr %a608 + %t610 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t609, ptr %a501 + store { ptr, i64, i64 } %t610, ptr %a611 + call void @finch_str_drop(ptr %a611) + br label %endif8766 +else8765: + %t612 = load ptr, ptr %a1 + %t613 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t614 = load %S.gen.Val, ptr %t613 + %t615 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t612, %S.gen.Val %t614) + %t616 = load { ptr, i64, i64 }, ptr %a501 + store { ptr, i64, i64 } %t615, ptr %a501 + store { ptr, i64, i64 } %t616, ptr %a617 + call void @finch_str_drop(ptr %a617) + store i1 true, ptr %a502 + br label %endif8766 +endif8766: + br label %endif8763 +endif8763: + br label %endif8751 +endif8751: + %t618 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t619 = load { ptr, i64, i64 }, ptr %t618 + store { ptr, i64, i64 } %t619, ptr %a620 + store { ptr, i64, i64 } { ptr @.str.5632, i64 6, i64 0 }, ptr %a621 + %t622 = call i32 @finch_str_eq(ptr %a620, ptr %a621) + %t623 = icmp ne i32 %t622, 0 + br label %logic.from8767 +logic.from8767: + br i1 %t623, label %logic.end8769, label %logic.rhs8768 +logic.rhs8768: + %t624 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t625 = load { ptr, i64, i64 }, ptr %t624 + store { ptr, i64, i64 } %t625, ptr %a626 + store { ptr, i64, i64 } { ptr @.str.5633, i64 4, i64 0 }, ptr %a627 + %t628 = call i32 @finch_str_eq(ptr %a626, ptr %a627) + %t629 = icmp ne i32 %t628, 0 + br label %logic.rend8770 +logic.rend8770: + br label %logic.end8769 +logic.end8769: + %t630 = phi i1 [ true, %logic.from8767 ], [ %t629, %logic.rend8770 ] + br i1 %t630, label %then8771, label %endif8773 +then8771: + %t631 = load ptr, ptr %a1 + %t632 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t633 = load { ptr, i64, i64 }, ptr %t632 + %t634 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t635 = load { ptr, i64, i64 }, ptr %t634 + %t636 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t637 = load { ptr, i64, i64 }, ptr %t636 + %t638 = call i64 @finch.gen.findMethod(ptr %t631, { ptr, i64, i64 } %t633, { ptr, i64, i64 } %t635, { ptr, i64, i64 } %t637) + store i64 %t638, ptr %a639 + %t640 = load i64, ptr %a639 + %t641 = icmp slt i64 %t640, 0 + br label %logic.from8774 +logic.from8774: + br i1 %t641, label %logic.rhs8775, label %logic.end8776 +logic.rhs8775: + %t642 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t643 = load { ptr, i64, i64 }, ptr %t642 + store { ptr, i64, i64 } %t643, ptr %a644 + store { ptr, i64, i64 } { ptr @.str.5634, i64 6, i64 0 }, ptr %a645 + %t646 = call i32 @finch_str_eq(ptr %a644, ptr %a645) + %t647 = icmp ne i32 %t646, 0 + br label %logic.rend8777 +logic.rend8777: + br label %logic.end8776 +logic.end8776: + %t648 = phi i1 [ false, %logic.from8774 ], [ %t647, %logic.rend8777 ] + br i1 %t648, label %then8778, label %endif8780 +then8778: + %t649 = load ptr, ptr %a1 + %t650 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t651 = load { ptr, i64, i64 }, ptr %t650 + %t652 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t653 = load { ptr, i64, i64 }, ptr %t652 + %t654 = call i64 @finch.gen.findStruct(ptr %t649, { ptr, i64, i64 } %t651, { ptr, i64, i64 } %t653) + store i64 %t654, ptr %a655 + %t656 = load ptr, ptr %a1 + %t657 = icmp eq ptr %t656, null + br i1 %t657, label %panic8781, label %ok8782 +panic8781: + call void @finch_panic(ptr @.str.5635, i64 5353, ptr @.str.5636) + unreachable +ok8782: + %t658 = getelementptr inbounds %S.gen.Gen, ptr %t656, i32 0, i32 16 + %t659 = load i64, ptr %a655 + %t660 = load { ptr, i64, i64 }, ptr %t658 + %t661 = extractvalue { ptr, i64, i64 } %t660, 1 + %t662 = icmp uge i64 %t659, %t661 + br i1 %t662, label %range8783, label %inrange8784 +range8783: + call void @finch_panic_index(ptr @.str.5637, i64 5353, i64 %t659, i64 %t661) + unreachable +inrange8784: + %t663 = extractvalue { ptr, i64, i64 } %t660, 0 + %t664 = getelementptr inbounds %S.gen.StructDef, ptr %t663, i64 %t659 + %t665 = getelementptr inbounds %S.gen.StructDef, ptr %t664, i32 0, i32 5 + %t666 = getelementptr inbounds { ptr, i64, i64 }, ptr %t665, i32 0, i32 1 + %t667 = load i64, ptr %t666 + %t668 = icmp sgt i64 %t667, 0 + br i1 %t668, label %then8785, label %endif8787 +then8785: + %t669 = load ptr, ptr %a1 + %t670 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t671 = load { ptr, i64, i64 }, ptr %t670 + %t672 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t673 = load { ptr, i64, i64 }, ptr %t672 + %t674 = load ptr, ptr %a1 + %t675 = icmp eq ptr %t674, null + br i1 %t675, label %panic8788, label %ok8789 +panic8788: + call void @finch_panic(ptr @.str.5638, i64 5354, ptr @.str.5639) + unreachable +ok8789: + %t676 = getelementptr inbounds %S.gen.Gen, ptr %t674, i32 0, i32 16 + %t677 = load i64, ptr %a655 + %t678 = load { ptr, i64, i64 }, ptr %t676 + %t679 = extractvalue { ptr, i64, i64 } %t678, 1 + %t680 = icmp uge i64 %t677, %t679 + br i1 %t680, label %range8790, label %inrange8791 +range8790: + call void @finch_panic_index(ptr @.str.5640, i64 5354, i64 %t677, i64 %t679) + unreachable +inrange8791: + %t681 = extractvalue { ptr, i64, i64 } %t678, 0 + %t682 = getelementptr inbounds %S.gen.StructDef, ptr %t681, i64 %t677 + %t683 = getelementptr inbounds %S.gen.StructDef, ptr %t682, i32 0, i32 5 + %t684 = load { ptr, i64, i64 }, ptr %t683 + %t685 = call i64 @finch.gen.findTemplate(ptr %t669, { ptr, i64, i64 } %t671, { ptr, i64, i64 } %t673, { ptr, i64, i64 } %t684, i1 false) + store i64 %t685, ptr %a686 + %t687 = load i64, ptr %a686 + %t688 = icmp sge i64 %t687, 0 + br i1 %t688, label %then8792, label %endif8794 +then8792: + %t689 = load ptr, ptr %a1 + %t690 = load i64, ptr %a686 + %t691 = load ptr, ptr %a1 + %t692 = icmp eq ptr %t691, null + br i1 %t692, label %panic8795, label %ok8796 +panic8795: + call void @finch_panic(ptr @.str.5641, i64 5356, ptr @.str.5642) + unreachable +ok8796: + %t693 = getelementptr inbounds %S.gen.Gen, ptr %t691, i32 0, i32 16 + %t694 = load i64, ptr %a655 + %t695 = load { ptr, i64, i64 }, ptr %t693 + %t696 = extractvalue { ptr, i64, i64 } %t695, 1 + %t697 = icmp uge i64 %t694, %t696 + br i1 %t697, label %range8797, label %inrange8798 +range8797: + call void @finch_panic_index(ptr @.str.5643, i64 5356, i64 %t694, i64 %t696) + unreachable +inrange8798: + %t698 = extractvalue { ptr, i64, i64 } %t695, 0 + %t699 = getelementptr inbounds %S.gen.StructDef, ptr %t698, i64 %t694 + %t700 = getelementptr inbounds %S.gen.StructDef, ptr %t699, i32 0, i32 7 + %t701 = load { ptr, i64, i64 }, ptr %t700 + %t702 = load %S.ast.Type, ptr %a500 + %t703 = load %S.ast.Node, ptr %a2 + %t704 = call i64 @finch.gen.instFn(ptr %t689, i64 %t690, { ptr, i64, i64 } %t701, %S.ast.Type %t702, %S.ast.Node %t703) + store i64 %t704, ptr %a639 + br label %endif8794 +endif8794: + br label %endif8787 +endif8787: + br label %endif8780 +endif8780: + %t705 = load i64, ptr %a639 + %t706 = icmp slt i64 %t705, 0 + br i1 %t706, label %then8799, label %endif8801 +then8799: + store { ptr, i64, i64 } zeroinitializer, ptr %a707 + %t708 = load ptr, ptr %a1 + %t709 = icmp eq ptr %t708, null + br i1 %t709, label %panic8802, label %ok8803 +panic8802: + call void @finch_panic(ptr @.str.5644, i64 5362, ptr @.str.5645) + unreachable +ok8803: + %t710 = getelementptr inbounds %S.gen.Gen, ptr %t708, i32 0, i32 15 + store i64 0, ptr %a711 + br label %each.cond8804 +each.cond8804: + %t712 = getelementptr inbounds { ptr, i64, i64 }, ptr %t710, i32 0, i32 1 + %t713 = load i64, ptr %t712 + %t714 = load i64, ptr %a711 + %t715 = icmp slt i64 %t714, %t713 + br i1 %t715, label %each.body8805, label %each.end8807 +each.body8805: + %t716 = load ptr, ptr %t710 + %t717 = getelementptr inbounds %S.gen.FnSig, ptr %t716, i64 %t714 + %t718 = load %S.gen.FnSig, ptr %t717 + store %S.gen.FnSig %t718, ptr %a719 + %t720 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 2 + %t721 = load { ptr, i64, i64 }, ptr %t720 + %t722 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t723 = load { ptr, i64, i64 }, ptr %t722 + store { ptr, i64, i64 } %t721, ptr %a724 + store { ptr, i64, i64 } %t723, ptr %a725 + %t726 = call i32 @finch_str_eq(ptr %a724, ptr %a725) + %t727 = icmp ne i32 %t726, 0 + br label %logic.from8808 +logic.from8808: + br i1 %t727, label %logic.rhs8809, label %logic.end8810 +logic.rhs8809: + %t728 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 3 + %t729 = load { ptr, i64, i64 }, ptr %t728 + %t730 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 3 + %t731 = load { ptr, i64, i64 }, ptr %t730 + store { ptr, i64, i64 } %t729, ptr %a732 + store { ptr, i64, i64 } %t731, ptr %a733 + %t734 = call i32 @finch_str_eq(ptr %a732, ptr %a733) + %t735 = icmp ne i32 %t734, 0 + br label %logic.rend8811 +logic.rend8811: + br label %logic.end8810 +logic.end8810: + %t736 = phi i1 [ false, %logic.from8808 ], [ %t735, %logic.rend8811 ] + br i1 %t736, label %then8812, label %endif8814 +then8812: + %t737 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 + %t738 = getelementptr inbounds %S.gen.FnSig, ptr %a719, i32 0, i32 1 + %t739 = load { ptr, i64, i64 }, ptr %t738 + store { ptr, i64, i64 } %t739, ptr %a740 + call void @finch_str_copy(ptr %a741, ptr %a740) + %t742 = load { ptr, i64, i64 }, ptr %a741 + %t743 = load i64, ptr %t737 + %t744 = add i64 %t743, 1 + call void @finch_arr_reserve(ptr %a707, i64 %t744, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t745 = load ptr, ptr %a707 + %t746 = getelementptr inbounds { ptr, i64, i64 }, ptr %t745, i64 %t743 + store { ptr, i64, i64 } %t742, ptr %t746 + store i64 %t744, ptr %t737 + br label %endif8814 +endif8814: + br label %each.step8806 +each.step8806: + %t747 = load i64, ptr %a711 + %t748 = add i64 %t747, 1 + store i64 %t748, ptr %a711 + br label %each.cond8804 +each.end8807: + %t749 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 + %t750 = load i64, ptr %t749 + %t751 = icmp eq i64 %t750, 0 + br i1 %t751, label %then8815, label %endif8817 +then8815: + %t752 = load ptr, ptr %a1 + %t753 = load %S.ast.Node, ptr %a2 + %t754 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t755 = load { ptr, i64, i64 }, ptr %t754 + store { ptr, i64, i64 } { ptr @.str.5646, i64 4, i64 0 }, ptr %a757 + store { ptr, i64, i64 } %t755, ptr %a758 + call void @finch_str_concat(ptr %a756, ptr %a757, ptr %a758) + %t759 = load { ptr, i64, i64 }, ptr %a756 + store { ptr, i64, i64 } %t759, ptr %a761 + store { ptr, i64, i64 } { ptr @.str.5647, i64 1, i64 0 }, ptr %a762 + call void @finch_str_concat(ptr %a760, ptr %a761, ptr %a762) + store { ptr, i64, i64 } %t759, ptr %a763 + call void @finch_str_drop(ptr %a763) + %t764 = load { ptr, i64, i64 }, ptr %a760 + %t765 = load %S.ast.Type, ptr %a500 + %t766 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t765) + store { ptr, i64, i64 } %t764, ptr %a768 + store { ptr, i64, i64 } %t766, ptr %a769 + call void @finch_str_concat(ptr %a767, ptr %a768, ptr %a769) + store { ptr, i64, i64 } %t764, ptr %a770 + call void @finch_str_drop(ptr %a770) + store { ptr, i64, i64 } %t766, ptr %a771 + call void @finch_str_drop(ptr %a771) + %t772 = load { ptr, i64, i64 }, ptr %a767 + store { ptr, i64, i64 } %t772, ptr %a774 + store { ptr, i64, i64 } { ptr @.str.5648, i64 34, i64 0 }, ptr %a775 + call void @finch_str_concat(ptr %a773, ptr %a774, ptr %a775) + store { ptr, i64, i64 } %t772, ptr %a776 + call void @finch_str_drop(ptr %a776) + %t777 = load { ptr, i64, i64 }, ptr %a773 + %t778 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 2 + %t779 = load { ptr, i64, i64 }, ptr %t778 + store { ptr, i64, i64 } %t777, ptr %a781 + store { ptr, i64, i64 } %t779, ptr %a782 + call void @finch_str_concat(ptr %a780, ptr %a781, ptr %a782) + store { ptr, i64, i64 } %t777, ptr %a783 + call void @finch_str_drop(ptr %a783) + %t784 = load { ptr, i64, i64 }, ptr %a780 + store { ptr, i64, i64 } %t784, ptr %a786 + store { ptr, i64, i64 } { ptr @.str.5649, i64 1, i64 0 }, ptr %a787 + call void @finch_str_concat(ptr %a785, ptr %a786, ptr %a787) + store { ptr, i64, i64 } %t784, ptr %a788 + call void @finch_str_drop(ptr %a788) + %t789 = load { ptr, i64, i64 }, ptr %a785 + %t790 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t791 = load { ptr, i64, i64 }, ptr %t790 + store { ptr, i64, i64 } %t789, ptr %a793 + store { ptr, i64, i64 } %t791, ptr %a794 + call void @finch_str_concat(ptr %a792, ptr %a793, ptr %a794) + store { ptr, i64, i64 } %t789, ptr %a795 + call void @finch_str_drop(ptr %a795) + %t796 = load { ptr, i64, i64 }, ptr %a792 + store { ptr, i64, i64 } %t796, ptr %a798 + store { ptr, i64, i64 } { ptr @.str.5650, i64 13, i64 0 }, ptr %a799 + call void @finch_str_concat(ptr %a797, ptr %a798, ptr %a799) + store { ptr, i64, i64 } %t796, ptr %a800 + call void @finch_str_drop(ptr %a800) + %t801 = load { ptr, i64, i64 }, ptr %a797 + call void @finch.gen.fail(ptr %t752, %S.ast.Node %t753, { ptr, i64, i64 } %t801) + store { ptr, i64, i64 } %t801, ptr %a802 + call void @finch_str_drop(ptr %a802) + br label %endif8817 +endif8817: + %t803 = load ptr, ptr %a1 + %t804 = load %S.ast.Node, ptr %a2 + %t805 = getelementptr inbounds %S.ast.Type, ptr %a500, i32 0, i32 0 + %t806 = load { ptr, i64, i64 }, ptr %t805 + store { ptr, i64, i64 } { ptr @.str.5651, i64 4, i64 0 }, ptr %a808 + store { ptr, i64, i64 } %t806, ptr %a809 + call void @finch_str_concat(ptr %a807, ptr %a808, ptr %a809) + %t810 = load { ptr, i64, i64 }, ptr %a807 + store { ptr, i64, i64 } %t810, ptr %a812 + store { ptr, i64, i64 } { ptr @.str.5652, i64 1, i64 0 }, ptr %a813 + call void @finch_str_concat(ptr %a811, ptr %a812, ptr %a813) + store { ptr, i64, i64 } %t810, ptr %a814 + call void @finch_str_drop(ptr %a814) + %t815 = load { ptr, i64, i64 }, ptr %a811 + %t816 = load %S.ast.Type, ptr %a500 + %t817 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t816) + store { ptr, i64, i64 } %t815, ptr %a819 + store { ptr, i64, i64 } %t817, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t815, ptr %a821 + call void @finch_str_drop(ptr %a821) + store { ptr, i64, i64 } %t817, ptr %a822 + call void @finch_str_drop(ptr %a822) + %t823 = load { ptr, i64, i64 }, ptr %a818 + store { ptr, i64, i64 } %t823, ptr %a825 + store { ptr, i64, i64 } { ptr @.str.5653, i64 16, i64 0 }, ptr %a826 + call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) + store { ptr, i64, i64 } %t823, ptr %a827 + call void @finch_str_drop(ptr %a827) + %t828 = load { ptr, i64, i64 }, ptr %a824 + %t829 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t830 = load { ptr, i64, i64 }, ptr %t829 + store { ptr, i64, i64 } %t828, ptr %a832 + store { ptr, i64, i64 } %t830, ptr %a833 + call void @finch_str_concat(ptr %a831, ptr %a832, ptr %a833) + store { ptr, i64, i64 } %t828, ptr %a834 + call void @finch_str_drop(ptr %a834) + %t835 = load { ptr, i64, i64 }, ptr %a831 + store { ptr, i64, i64 } %t835, ptr %a837 + store { ptr, i64, i64 } { ptr @.str.5654, i64 11, i64 0 }, ptr %a838 + call void @finch_str_concat(ptr %a836, ptr %a837, ptr %a838) + store { ptr, i64, i64 } %t835, ptr %a839 + call void @finch_str_drop(ptr %a839) + %t840 = load { ptr, i64, i64 }, ptr %a836 + %t841 = getelementptr inbounds { ptr, i64, i64 }, ptr %a707, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.5655, i64 2, i64 0 }, ptr %a842 + call void @finch_str_join(ptr %a843, ptr %a707, ptr %a842) + %t844 = load { ptr, i64, i64 }, ptr %a843 + store { ptr, i64, i64 } %t840, ptr %a846 + store { ptr, i64, i64 } %t844, ptr %a847 + call void @finch_str_concat(ptr %a845, ptr %a846, ptr %a847) + store { ptr, i64, i64 } %t840, ptr %a848 + call void @finch_str_drop(ptr %a848) + store { ptr, i64, i64 } %t844, ptr %a849 + call void @finch_str_drop(ptr %a849) + %t850 = load { ptr, i64, i64 }, ptr %a845 + store { ptr, i64, i64 } %t850, ptr %a852 + store { ptr, i64, i64 } { ptr @.str.5656, i64 1, i64 0 }, ptr %a853 + call void @finch_str_concat(ptr %a851, ptr %a852, ptr %a853) + store { ptr, i64, i64 } %t850, ptr %a854 + call void @finch_str_drop(ptr %a854) + %t855 = load { ptr, i64, i64 }, ptr %a851 + call void @finch.gen.fail(ptr %t803, %S.ast.Node %t804, { ptr, i64, i64 } %t855) + store { ptr, i64, i64 } %t855, ptr %a856 + call void @finch_str_drop(ptr %a856) + call void @finch.drop.arr_str(ptr %a707) + br label %endif8801 +endif8801: + %t857 = load ptr, ptr %a1 + %t858 = icmp eq ptr %t857, null + br i1 %t858, label %panic8818, label %ok8819 +panic8818: + call void @finch_panic(ptr @.str.5657, i64 5373, ptr @.str.5658) + unreachable +ok8819: + %t859 = getelementptr inbounds %S.gen.Gen, ptr %t857, i32 0, i32 15 + %t860 = load i64, ptr %a639 + %t861 = load { ptr, i64, i64 }, ptr %t859 + %t862 = extractvalue { ptr, i64, i64 } %t861, 1 + %t863 = icmp uge i64 %t860, %t862 + br i1 %t863, label %range8820, label %inrange8821 +range8820: + call void @finch_panic_index(ptr @.str.5659, i64 5373, i64 %t860, i64 %t862) + unreachable +inrange8821: + %t864 = extractvalue { ptr, i64, i64 } %t861, 0 + %t865 = getelementptr inbounds %S.gen.FnSig, ptr %t864, i64 %t860 + %t866 = getelementptr inbounds %S.gen.FnSig, ptr %t865, i32 0, i32 10 + %t867 = load i1, ptr %t866 + br label %logic.from8822 +logic.from8822: + br i1 %t867, label %logic.rhs8823, label %logic.end8824 +logic.rhs8823: + %t868 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t869 = load { ptr, i64, i64 }, ptr %t868 + store { ptr, i64, i64 } %t869, ptr %a870 + store { ptr, i64, i64 } { ptr @.str.5660, i64 6, i64 0 }, ptr %a871 + %t872 = call i32 @finch_str_eq(ptr %a870, ptr %a871) + %t873 = icmp ne i32 %t872, 0 + br label %logic.from8825 +logic.from8825: + br i1 %t873, label %logic.end8827, label %logic.rhs8826 +logic.rhs8826: + %t874 = getelementptr inbounds %S.ast.Type, ptr %a273, i32 0, i32 0 + %t875 = load { ptr, i64, i64 }, ptr %t874 + store { ptr, i64, i64 } %t875, ptr %a876 + store { ptr, i64, i64 } { ptr @.str.5661, i64 4, i64 0 }, ptr %a877 + %t878 = call i32 @finch_str_eq(ptr %a876, ptr %a877) + %t879 = icmp ne i32 %t878, 0 + br label %logic.rend8828 +logic.rend8828: + br label %logic.end8827 +logic.end8827: + %t880 = phi i1 [ true, %logic.from8825 ], [ %t879, %logic.rend8828 ] + br label %logic.rend8829 +logic.rend8829: + br label %logic.end8824 +logic.end8824: + %t881 = phi i1 [ false, %logic.from8822 ], [ %t880, %logic.rend8829 ] + br i1 %t881, label %then8830, label %endif8832 +then8830: + %t882 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 0 + %t883 = load i1, ptr %t882 + %t884 = xor i1 %t883, true + br i1 %t884, label %then8833, label %endif8835 +then8833: + %t885 = load ptr, ptr %a1 + %t886 = load %S.ast.Node, ptr %a2 + %t887 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t888 = load { ptr, i64, i64 }, ptr %t887 + store { ptr, i64, i64 } %t888, ptr %a890 + store { ptr, i64, i64 } { ptr @.str.5662, i64 28, i64 0 }, ptr %a891 + call void @finch_str_concat(ptr %a889, ptr %a890, ptr %a891) + %t892 = load { ptr, i64, i64 }, ptr %a889 + %t893 = load %S.ast.Type, ptr %a500 + %t894 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t893) + store { ptr, i64, i64 } %t892, ptr %a896 + store { ptr, i64, i64 } %t894, ptr %a897 + call void @finch_str_concat(ptr %a895, ptr %a896, ptr %a897) + store { ptr, i64, i64 } %t892, ptr %a898 + call void @finch_str_drop(ptr %a898) + store { ptr, i64, i64 } %t894, ptr %a899 + call void @finch_str_drop(ptr %a899) + %t900 = load { ptr, i64, i64 }, ptr %a895 + store { ptr, i64, i64 } %t900, ptr %a902 + store { ptr, i64, i64 } { ptr @.str.5663, i64 30, i64 0 }, ptr %a903 + call void @finch_str_concat(ptr %a901, ptr %a902, ptr %a903) + store { ptr, i64, i64 } %t900, ptr %a904 + call void @finch_str_drop(ptr %a904) + %t905 = load { ptr, i64, i64 }, ptr %a901 + call void @finch.gen.fail(ptr %t885, %S.ast.Node %t886, { ptr, i64, i64 } %t905) + store { ptr, i64, i64 } %t905, ptr %a906 + call void @finch_str_drop(ptr %a906) + br label %endif8835 +endif8835: + %t907 = load %S.ast.Node, ptr %a13 + %t908 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t907) + store { ptr, i64, i64 } %t908, ptr %a909 + %t910 = getelementptr inbounds { ptr, i64, i64 }, ptr %a909, i32 0, i32 1 + %t911 = load i64, ptr %t910 + %t912 = icmp sgt i64 %t911, 0 + br i1 %t912, label %then8836, label %endif8838 +then8836: + %t913 = load ptr, ptr %a1 + %t914 = load { ptr, i64, i64 }, ptr %a909 + %t915 = call i64 @finch.gen.lookup(ptr %t913, { ptr, i64, i64 } %t914) + store i64 %t915, ptr %a916 + %t917 = load i64, ptr %a916 + %t918 = icmp sge i64 %t917, 0 + br label %logic.from8839 +logic.from8839: + br i1 %t918, label %logic.rhs8840, label %logic.end8841 +logic.rhs8840: + %t919 = load ptr, ptr %a1 + %t920 = load i64, ptr %a916 + %t921 = call %S.gen.Var @finch.gen.varAt(ptr %t919, i64 %t920) + %t922 = extractvalue %S.gen.Var %t921, 3 + store %S.gen.Var %t921, ptr %a923 + call void @finch.drop.S_gen_Var(ptr %a923) + br label %logic.rend8842 +logic.rend8842: + br label %logic.end8841 +logic.end8841: + %t924 = phi i1 [ false, %logic.from8839 ], [ %t922, %logic.rend8842 ] + br i1 %t924, label %then8843, label %endif8845 +then8843: + %t925 = load ptr, ptr %a1 + %t926 = load %S.ast.Node, ptr %a2 + %t927 = load { ptr, i64, i64 }, ptr %a909 + store { ptr, i64, i64 } { ptr @.str.5664, i64 19, i64 0 }, ptr %a929 + store { ptr, i64, i64 } %t927, ptr %a930 + call void @finch_str_concat(ptr %a928, ptr %a929, ptr %a930) + %t931 = load { ptr, i64, i64 }, ptr %a928 + store { ptr, i64, i64 } %t931, ptr %a933 + store { ptr, i64, i64 } { ptr @.str.5665, i64 18, i64 0 }, ptr %a934 + call void @finch_str_concat(ptr %a932, ptr %a933, ptr %a934) + store { ptr, i64, i64 } %t931, ptr %a935 + call void @finch_str_drop(ptr %a935) + %t936 = load { ptr, i64, i64 }, ptr %a932 + call void @finch.gen.fail(ptr %t925, %S.ast.Node %t926, { ptr, i64, i64 } %t936) + store { ptr, i64, i64 } %t936, ptr %a937 + call void @finch_str_drop(ptr %a937) + br label %endif8845 +endif8845: + br label %endif8838 +endif8838: + call void @finch_str_drop(ptr %a909) + br label %endif8832 +endif8832: + %t938 = load i1, ptr %a502 + br label %logic.from8846 +logic.from8846: + br i1 %t938, label %logic.rhs8847, label %logic.end8848 +logic.rhs8847: + %t939 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t940 = getelementptr inbounds %S.gen.Val, ptr %t939, i32 0, i32 2 + %t941 = load i1, ptr %t940 + br label %logic.rend8849 +logic.rend8849: + br label %logic.end8848 +logic.end8848: + %t942 = phi i1 [ false, %logic.from8846 ], [ %t941, %logic.rend8849 ] + br i1 %t942, label %then8850, label %endif8852 +then8850: + %t943 = load ptr, ptr %a1 + %t944 = load { ptr, i64, i64 }, ptr %a501 + %t945 = load %S.ast.Type, ptr %a500 + call void @finch.gen.holdAddr(ptr %t943, { ptr, i64, i64 } %t944, %S.ast.Type %t945) + br label %endif8852 +endif8852: + %t946 = load ptr, ptr %a1 + %t947 = load i64, ptr %a639 + %t948 = load %S.ast.Node, ptr %a2 + %t949 = load %S.ast.Type, ptr %a500 + %t950 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t949) + store { ptr, i64, i64 } %t950, ptr %a952 + store { ptr, i64, i64 } { ptr @.str.5666, i64 1, i64 0 }, ptr %a953 + call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) + store { ptr, i64, i64 } %t950, ptr %a954 + call void @finch_str_drop(ptr %a954) + %t955 = load { ptr, i64, i64 }, ptr %a951 + %t956 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t957 = load { ptr, i64, i64 }, ptr %t956 + store { ptr, i64, i64 } %t955, ptr %a959 + store { ptr, i64, i64 } %t957, ptr %a960 + call void @finch_str_concat(ptr %a958, ptr %a959, ptr %a960) + store { ptr, i64, i64 } %t955, ptr %a961 + call void @finch_str_drop(ptr %a961) + %t962 = load { ptr, i64, i64 }, ptr %a958 + %t963 = load { ptr, i64, i64 }, ptr %a501 + %t964 = load %S.ast.Node, ptr %a13 + %t965 = call { ptr, i64, i64 } @finch.gen.rootVar(%S.ast.Node %t964) + %t966 = call %S.gen.Val @finch.gen.callFn(ptr %t946, i64 %t947, %S.ast.Node %t948, i64 1, { ptr, i64, i64 } %t962, { ptr, i64, i64 } %t963, { ptr, i64, i64 } %t965) + store { ptr, i64, i64 } %t962, ptr %a967 + call void @finch_str_drop(ptr %a967) + store { ptr, i64, i64 } %t965, ptr %a968 + call void @finch_str_drop(ptr %a968) + store %S.gen.Val %t966, ptr %a969 + %t970 = load i1, ptr %a502 + br label %logic.from8853 +logic.from8853: + br i1 %t970, label %logic.rhs8854, label %logic.end8855 +logic.rhs8854: + %t971 = getelementptr inbounds %S.gen.Ref, ptr %a260, i32 0, i32 2 + %t972 = getelementptr inbounds %S.gen.Val, ptr %t971, i32 0, i32 2 + %t973 = load i1, ptr %t972 + br label %logic.rend8856 +logic.rend8856: + br label %logic.end8855 +logic.end8855: + %t974 = phi i1 [ false, %logic.from8853 ], [ %t973, %logic.rend8856 ] + br label %logic.from8857 +logic.from8857: + br i1 %t974, label %logic.rhs8858, label %logic.end8859 +logic.rhs8858: + %t975 = load ptr, ptr %a1 + %t976 = load %S.ast.Type, ptr %a500 + %t977 = call i1 @finch.gen.owning(ptr %t975, %S.ast.Type %t976) + br label %logic.rend8860 +logic.rend8860: + br label %logic.end8859 +logic.end8859: + %t978 = phi i1 [ false, %logic.from8857 ], [ %t977, %logic.rend8860 ] + br i1 %t978, label %then8861, label %endif8863 +then8861: + %t979 = load ptr, ptr %a1 + %t980 = load { ptr, i64, i64 }, ptr %a501 + %t981 = load %S.ast.Type, ptr %a500 + call void @finch.gen.dropAt(ptr %t979, { ptr, i64, i64 } %t980, %S.ast.Type %t981) + br label %endif8863 +endif8863: + %t982 = load ptr, ptr %a1 + %t983 = load i64, ptr %a266 + call void @finch.gen.heldEnd(ptr %t982, i64 %t983) + %t984 = load %S.gen.Val, ptr %a969 + call void @finch_str_drop(ptr %a501) + call void @finch.drop.S_ast_Type(ptr %a500) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val %t984 +endif8773: + %t985 = load ptr, ptr %a1 + %t986 = load %S.ast.Node, ptr %a2 + %t987 = load %S.ast.Type, ptr %a273 + %t988 = call { ptr, i64, i64 } @finch.ast.show(%S.ast.Type %t987) + store { ptr, i64, i64 } %t988, ptr %a990 + store { ptr, i64, i64 } { ptr @.str.5667, i64 15, i64 0 }, ptr %a991 + call void @finch_str_concat(ptr %a989, ptr %a990, ptr %a991) + store { ptr, i64, i64 } %t988, ptr %a992 + call void @finch_str_drop(ptr %a992) + %t993 = load { ptr, i64, i64 }, ptr %a989 + call void @finch.gen.fail(ptr %t985, %S.ast.Node %t986, { ptr, i64, i64 } %t993) + store { ptr, i64, i64 } %t993, ptr %a994 + call void @finch_str_drop(ptr %a994) + call void @finch_str_drop(ptr %a501) + call void @finch.drop.S_ast_Type(ptr %a500) + call void @finch.drop.S_ast_Type(ptr %a273) + call void @finch.drop.S_gen_Ref(ptr %a260) + call void @finch.drop.arr_str(ptr %a238) + call void @finch.drop.S_ast_Node(ptr %a13) + ret %S.gen.Val zeroinitializer +} + +define internal void @finch.gen.need(ptr %p0, %S.ast.Node %p1, i64 %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = load %S.ast.Node, ptr %a2 + %t6 = load i64, ptr %a3 + %t7 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %t7 + call void @finch.gen.checkArgs(ptr %t4, %S.ast.Node %t5, i64 1, i64 %t6, { ptr, i64, i64 } %t8) + ret void +} + +define internal %S.gen.Val @finch.gen.arrayMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2, %S.ast.Type %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.ast.Type, align 16 + %a12 = alloca %S.ast.Type, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a15 = alloca %S.ast.Type, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca %S.gen.Val, align 16 + %a70 = alloca %S.gen.Val, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca %S.ast.Type, align 16 + %a260 = alloca %S.ast.Type, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca %S.gen.Val, align 16 + %a315 = alloca %S.gen.Val, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca %S.ast.Type, align 16 + %a420 = alloca %S.ast.Type, align 16 + %a423 = alloca %S.gen.Val, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca %S.ast.Type, align 16 + %a435 = alloca %S.ast.Type, align 16 + %a440 = alloca %S.gen.Val, align 16 + %a442 = alloca { ptr, i64, i64 }, align 16 + %a443 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca %S.gen.Val, align 16 + %a446 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a515 = alloca { ptr, i64, i64 }, align 16 + %a516 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a538 = alloca %S.gen.Val, align 16 + %a542 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a559 = alloca { ptr, i64, i64 }, align 16 + %a560 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a576 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a590 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca { ptr, i64, i64 }, align 16 + %a615 = alloca %S.gen.Val, align 16 + %a616 = alloca %S.ast.Type, align 16 + %a618 = alloca { ptr, i64, i64 }, align 16 + %a619 = alloca { ptr, i64, i64 }, align 16 + %a621 = alloca %S.gen.Val, align 16 + %a622 = alloca { ptr, i64, i64 }, align 16 + %a644 = alloca %S.gen.Val, align 16 + %a646 = alloca %S.gen.Val, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca { ptr, i64, i64 }, align 16 + %a665 = alloca { ptr, i64, i64 }, align 16 + %a666 = alloca { ptr, i64, i64 }, align 16 + %a668 = alloca { ptr, i64, i64 }, align 16 + %a669 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a674 = alloca { ptr, i64, i64 }, align 16 + %a675 = alloca { ptr, i64, i64 }, align 16 + %a676 = alloca { ptr, i64, i64 }, align 16 + %a677 = alloca { ptr, i64, i64 }, align 16 + %a679 = alloca { ptr, i64, i64 }, align 16 + %a680 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a687 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a689 = alloca { ptr, i64, i64 }, align 16 + %a690 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a695 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a699 = alloca { ptr, i64, i64 }, align 16 + %a700 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a702 = alloca { ptr, i64, i64 }, align 16 + %a704 = alloca { ptr, i64, i64 }, align 16 + %a705 = alloca { ptr, i64, i64 }, align 16 + %a706 = alloca { ptr, i64, i64 }, align 16 + %a707 = alloca { ptr, i64, i64 }, align 16 + %a711 = alloca { ptr, i64, i64 }, align 16 + %a713 = alloca { ptr, i64, i64 }, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a716 = alloca { ptr, i64, i64 }, align 16 + %a717 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a722 = alloca { ptr, i64, i64 }, align 16 + %a724 = alloca { ptr, i64, i64 }, align 16 + %a728 = alloca { ptr, i64, i64 }, align 16 + %a734 = alloca { ptr, i64, i64 }, align 16 + %a735 = alloca { ptr, i64, i64 }, align 16 + %a736 = alloca { ptr, i64, i64 }, align 16 + %a738 = alloca { ptr, i64, i64 }, align 16 + %a739 = alloca { ptr, i64, i64 }, align 16 + %a740 = alloca { ptr, i64, i64 }, align 16 + %a741 = alloca { ptr, i64, i64 }, align 16 + %a744 = alloca { ptr, i64, i64 }, align 16 + %a745 = alloca { ptr, i64, i64 }, align 16 + %a746 = alloca { ptr, i64, i64 }, align 16 + %a747 = alloca { ptr, i64, i64 }, align 16 + %a749 = alloca { ptr, i64, i64 }, align 16 + %a750 = alloca { ptr, i64, i64 }, align 16 + %a751 = alloca { ptr, i64, i64 }, align 16 + %a752 = alloca { ptr, i64, i64 }, align 16 + %a755 = alloca { ptr, i64, i64 }, align 16 + %a756 = alloca { ptr, i64, i64 }, align 16 + %a757 = alloca { ptr, i64, i64 }, align 16 + %a758 = alloca { ptr, i64, i64 }, align 16 + %a761 = alloca { ptr, i64, i64 }, align 16 + %a762 = alloca { ptr, i64, i64 }, align 16 + %a766 = alloca { ptr, i64, i64 }, align 16 + %a767 = alloca { ptr, i64, i64 }, align 16 + %a791 = alloca %S.gen.Val, align 16 + %a792 = alloca %S.ast.Type, align 16 + %a794 = alloca { ptr, i64, i64 }, align 16 + %a795 = alloca { ptr, i64, i64 }, align 16 + %a797 = alloca %S.gen.Val, align 16 + %a798 = alloca { ptr, i64, i64 }, align 16 + %a805 = alloca { ptr, i64, i64 }, align 16 + %a809 = alloca { ptr, i64, i64 }, align 16 + %a814 = alloca { ptr, i64, i64 }, align 16 + %a815 = alloca { ptr, i64, i64 }, align 16 + %a816 = alloca { ptr, i64, i64 }, align 16 + %a818 = alloca { ptr, i64, i64 }, align 16 + %a819 = alloca { ptr, i64, i64 }, align 16 + %a820 = alloca { ptr, i64, i64 }, align 16 + %a821 = alloca { ptr, i64, i64 }, align 16 + %a824 = alloca { ptr, i64, i64 }, align 16 + %a825 = alloca { ptr, i64, i64 }, align 16 + %a826 = alloca { ptr, i64, i64 }, align 16 + %a827 = alloca { ptr, i64, i64 }, align 16 + %a829 = alloca { ptr, i64, i64 }, align 16 + %a830 = alloca { ptr, i64, i64 }, align 16 + %a831 = alloca { ptr, i64, i64 }, align 16 + %a832 = alloca { ptr, i64, i64 }, align 16 + %a835 = alloca { ptr, i64, i64 }, align 16 + %a836 = alloca { ptr, i64, i64 }, align 16 + %a837 = alloca { ptr, i64, i64 }, align 16 + %a838 = alloca { ptr, i64, i64 }, align 16 + %a841 = alloca { ptr, i64, i64 }, align 16 + %a843 = alloca { ptr, i64, i64 }, align 16 + %a844 = alloca { ptr, i64, i64 }, align 16 + %a847 = alloca { ptr, i64, i64 }, align 16 + %a848 = alloca { ptr, i64, i64 }, align 16 + %a849 = alloca { ptr, i64, i64 }, align 16 + %a851 = alloca { ptr, i64, i64 }, align 16 + %a852 = alloca { ptr, i64, i64 }, align 16 + %a853 = alloca { ptr, i64, i64 }, align 16 + %a854 = alloca { ptr, i64, i64 }, align 16 + %a857 = alloca { ptr, i64, i64 }, align 16 + %a858 = alloca { ptr, i64, i64 }, align 16 + %a859 = alloca { ptr, i64, i64 }, align 16 + %a860 = alloca { ptr, i64, i64 }, align 16 + %a862 = alloca { ptr, i64, i64 }, align 16 + %a863 = alloca { ptr, i64, i64 }, align 16 + %a864 = alloca { ptr, i64, i64 }, align 16 + %a865 = alloca { ptr, i64, i64 }, align 16 + %a870 = alloca { ptr, i64, i64 }, align 16 + %a871 = alloca { ptr, i64, i64 }, align 16 + %a872 = alloca { ptr, i64, i64 }, align 16 + %a873 = alloca { ptr, i64, i64 }, align 16 + %a874 = alloca { ptr, i64, i64 }, align 16 + %a876 = alloca { ptr, i64, i64 }, align 16 + %a877 = alloca { ptr, i64, i64 }, align 16 + %a878 = alloca { ptr, i64, i64 }, align 16 + %a879 = alloca { ptr, i64, i64 }, align 16 + %a881 = alloca { ptr, i64, i64 }, align 16 + %a883 = alloca { ptr, i64, i64 }, align 16 + %a884 = alloca { ptr, i64, i64 }, align 16 + %a888 = alloca %S.ast.Type, align 16 + %a889 = alloca %S.ast.Type, align 16 + %a897 = alloca { ptr, i64, i64 }, align 16 + %a898 = alloca { ptr, i64, i64 }, align 16 + %a922 = alloca %S.gen.Val, align 16 + %a923 = alloca %S.ast.Type, align 16 + %a925 = alloca { ptr, i64, i64 }, align 16 + %a926 = alloca { ptr, i64, i64 }, align 16 + %a928 = alloca %S.gen.Val, align 16 + %a929 = alloca { ptr, i64, i64 }, align 16 + %a936 = alloca { ptr, i64, i64 }, align 16 + %a937 = alloca { ptr, i64, i64 }, align 16 + %a938 = alloca { ptr, i64, i64 }, align 16 + %a940 = alloca { ptr, i64, i64 }, align 16 + %a941 = alloca { ptr, i64, i64 }, align 16 + %a942 = alloca { ptr, i64, i64 }, align 16 + %a943 = alloca { ptr, i64, i64 }, align 16 + %a946 = alloca { ptr, i64, i64 }, align 16 + %a947 = alloca { ptr, i64, i64 }, align 16 + %a948 = alloca { ptr, i64, i64 }, align 16 + %a949 = alloca { ptr, i64, i64 }, align 16 + %a951 = alloca { ptr, i64, i64 }, align 16 + %a952 = alloca { ptr, i64, i64 }, align 16 + %a953 = alloca { ptr, i64, i64 }, align 16 + %a954 = alloca { ptr, i64, i64 }, align 16 + %a959 = alloca { ptr, i64, i64 }, align 16 + %a960 = alloca { ptr, i64, i64 }, align 16 + %a961 = alloca { ptr, i64, i64 }, align 16 + %a962 = alloca { ptr, i64, i64 }, align 16 + %a963 = alloca { ptr, i64, i64 }, align 16 + %a965 = alloca { ptr, i64, i64 }, align 16 + %a966 = alloca { ptr, i64, i64 }, align 16 + %a967 = alloca { ptr, i64, i64 }, align 16 + %a968 = alloca { ptr, i64, i64 }, align 16 + %a970 = alloca { ptr, i64, i64 }, align 16 + %a974 = alloca { ptr, i64, i64 }, align 16 + %a975 = alloca { ptr, i64, i64 }, align 16 + %a983 = alloca { ptr, i64, i64 }, align 16 + %a987 = alloca { ptr, i64, i64 }, align 16 + %a990 = alloca { ptr, i64, i64 }, align 16 + %a991 = alloca { ptr, i64, i64 }, align 16 + %a992 = alloca { ptr, i64, i64 }, align 16 + %a994 = alloca { ptr, i64, i64 }, align 16 + %a995 = alloca { ptr, i64, i64 }, align 16 + %a996 = alloca { ptr, i64, i64 }, align 16 + %a997 = alloca { ptr, i64, i64 }, align 16 + %a1000 = alloca { ptr, i64, i64 }, align 16 + %a1001 = alloca { ptr, i64, i64 }, align 16 + %a1005 = alloca { ptr, i64, i64 }, align 16 + %a1008 = alloca { ptr, i64, i64 }, align 16 + %a1009 = alloca { ptr, i64, i64 }, align 16 + %a1010 = alloca { ptr, i64, i64 }, align 16 + %a1012 = alloca { ptr, i64, i64 }, align 16 + %a1013 = alloca { ptr, i64, i64 }, align 16 + %a1014 = alloca { ptr, i64, i64 }, align 16 + %a1015 = alloca { ptr, i64, i64 }, align 16 + %a1018 = alloca { ptr, i64, i64 }, align 16 + %a1019 = alloca { ptr, i64, i64 }, align 16 + %a1020 = alloca { ptr, i64, i64 }, align 16 + %a1021 = alloca { ptr, i64, i64 }, align 16 + %a1023 = alloca { ptr, i64, i64 }, align 16 + %a1024 = alloca { ptr, i64, i64 }, align 16 + %a1025 = alloca { ptr, i64, i64 }, align 16 + %a1026 = alloca { ptr, i64, i64 }, align 16 + %a1034 = alloca { ptr, i64, i64 }, align 16 + %a1035 = alloca { ptr, i64, i64 }, align 16 + %a1036 = alloca { ptr, i64, i64 }, align 16 + %a1037 = alloca { ptr, i64, i64 }, align 16 + %a1040 = alloca { ptr, i64, i64 }, align 16 + %a1041 = alloca { ptr, i64, i64 }, align 16 + %a1045 = alloca { ptr, i64, i64 }, align 16 + %a1046 = alloca { ptr, i64, i64 }, align 16 + %a1047 = alloca { ptr, i64, i64 }, align 16 + %a1049 = alloca { ptr, i64, i64 }, align 16 + %a1050 = alloca { ptr, i64, i64 }, align 16 + %a1051 = alloca { ptr, i64, i64 }, align 16 + %a1052 = alloca { ptr, i64, i64 }, align 16 + %a1055 = alloca { ptr, i64, i64 }, align 16 + %a1056 = alloca { ptr, i64, i64 }, align 16 + %a1057 = alloca { ptr, i64, i64 }, align 16 + %a1058 = alloca { ptr, i64, i64 }, align 16 + %a1059 = alloca { ptr, i64, i64 }, align 16 + %a1061 = alloca { ptr, i64, i64 }, align 16 + %a1062 = alloca { ptr, i64, i64 }, align 16 + %a1063 = alloca { ptr, i64, i64 }, align 16 + %a1064 = alloca { ptr, i64, i64 }, align 16 + %a1072 = alloca { ptr, i64, i64 }, align 16 + %a1073 = alloca { ptr, i64, i64 }, align 16 + %a1074 = alloca { ptr, i64, i64 }, align 16 + %a1075 = alloca { ptr, i64, i64 }, align 16 + %a1078 = alloca { ptr, i64, i64 }, align 16 + %a1079 = alloca { ptr, i64, i64 }, align 16 + %a1082 = alloca { ptr, i64, i64 }, align 16 + %a1083 = alloca { ptr, i64, i64 }, align 16 + %a1084 = alloca { ptr, i64, i64 }, align 16 + %a1086 = alloca { ptr, i64, i64 }, align 16 + %a1087 = alloca { ptr, i64, i64 }, align 16 + %a1088 = alloca { ptr, i64, i64 }, align 16 + %a1089 = alloca { ptr, i64, i64 }, align 16 + %a1092 = alloca { ptr, i64, i64 }, align 16 + %a1093 = alloca { ptr, i64, i64 }, align 16 + %a1094 = alloca { ptr, i64, i64 }, align 16 + %a1095 = alloca { ptr, i64, i64 }, align 16 + %a1097 = alloca { ptr, i64, i64 }, align 16 + %a1098 = alloca { ptr, i64, i64 }, align 16 + %a1099 = alloca { ptr, i64, i64 }, align 16 + %a1100 = alloca { ptr, i64, i64 }, align 16 + %a1103 = alloca { ptr, i64, i64 }, align 16 + %a1104 = alloca { ptr, i64, i64 }, align 16 + %a1105 = alloca { ptr, i64, i64 }, align 16 + %a1106 = alloca { ptr, i64, i64 }, align 16 + %a1109 = alloca { ptr, i64, i64 }, align 16 + %a1110 = alloca { ptr, i64, i64 }, align 16 + %a1115 = alloca { ptr, i64, i64 }, align 16 + %a1120 = alloca { ptr, i64, i64 }, align 16 + %a1134 = alloca { ptr, i64, i64 }, align 16 + %a1135 = alloca { ptr, i64, i64 }, align 16 + %a1159 = alloca %S.gen.Val, align 16 + %a1160 = alloca %S.ast.Type, align 16 + %a1162 = alloca { ptr, i64, i64 }, align 16 + %a1163 = alloca { ptr, i64, i64 }, align 16 + %a1165 = alloca %S.gen.Val, align 16 + %a1166 = alloca { ptr, i64, i64 }, align 16 + %a1186 = alloca %S.gen.Val, align 16 + %a1187 = alloca %S.ast.Type, align 16 + %a1189 = alloca { ptr, i64, i64 }, align 16 + %a1190 = alloca { ptr, i64, i64 }, align 16 + %a1192 = alloca %S.gen.Val, align 16 + %a1193 = alloca { ptr, i64, i64 }, align 16 + %a1197 = alloca { ptr, i64, i64 }, align 16 + %a1200 = alloca { ptr, i64, i64 }, align 16 + %a1201 = alloca { ptr, i64, i64 }, align 16 + %a1202 = alloca { ptr, i64, i64 }, align 16 + %a1204 = alloca { ptr, i64, i64 }, align 16 + %a1205 = alloca { ptr, i64, i64 }, align 16 + %a1206 = alloca { ptr, i64, i64 }, align 16 + %a1207 = alloca { ptr, i64, i64 }, align 16 + %a1210 = alloca { ptr, i64, i64 }, align 16 + %a1211 = alloca { ptr, i64, i64 }, align 16 + %a1214 = alloca { ptr, i64, i64 }, align 16 + %a1215 = alloca { ptr, i64, i64 }, align 16 + %a1216 = alloca { ptr, i64, i64 }, align 16 + %a1218 = alloca { ptr, i64, i64 }, align 16 + %a1219 = alloca { ptr, i64, i64 }, align 16 + %a1220 = alloca { ptr, i64, i64 }, align 16 + %a1221 = alloca { ptr, i64, i64 }, align 16 + %a1224 = alloca { ptr, i64, i64 }, align 16 + %a1225 = alloca { ptr, i64, i64 }, align 16 + %a1226 = alloca { ptr, i64, i64 }, align 16 + %a1227 = alloca { ptr, i64, i64 }, align 16 + %a1230 = alloca { ptr, i64, i64 }, align 16 + %a1231 = alloca { ptr, i64, i64 }, align 16 + %a1234 = alloca { ptr, i64, i64 }, align 16 + %a1235 = alloca { ptr, i64, i64 }, align 16 + %a1236 = alloca { ptr, i64, i64 }, align 16 + %a1238 = alloca { ptr, i64, i64 }, align 16 + %a1239 = alloca { ptr, i64, i64 }, align 16 + %a1240 = alloca { ptr, i64, i64 }, align 16 + %a1241 = alloca { ptr, i64, i64 }, align 16 + %a1244 = alloca { ptr, i64, i64 }, align 16 + %a1245 = alloca { ptr, i64, i64 }, align 16 + %a1246 = alloca { ptr, i64, i64 }, align 16 + %a1247 = alloca { ptr, i64, i64 }, align 16 + %a1250 = alloca { ptr, i64, i64 }, align 16 + %a1251 = alloca { ptr, i64, i64 }, align 16 + %a1256 = alloca { ptr, i64, i64 }, align 16 + %a1257 = alloca { ptr, i64, i64 }, align 16 + %a1258 = alloca { ptr, i64, i64 }, align 16 + %a1260 = alloca { ptr, i64, i64 }, align 16 + %a1261 = alloca { ptr, i64, i64 }, align 16 + %a1262 = alloca { ptr, i64, i64 }, align 16 + %a1263 = alloca { ptr, i64, i64 }, align 16 + %a1266 = alloca { ptr, i64, i64 }, align 16 + %a1267 = alloca { ptr, i64, i64 }, align 16 + %a1268 = alloca { ptr, i64, i64 }, align 16 + %a1269 = alloca { ptr, i64, i64 }, align 16 + %a1272 = alloca { ptr, i64, i64 }, align 16 + %a1273 = alloca { ptr, i64, i64 }, align 16 + %a1274 = alloca { ptr, i64, i64 }, align 16 + %a1275 = alloca { ptr, i64, i64 }, align 16 + %a1276 = alloca { ptr, i64, i64 }, align 16 + %a1278 = alloca { ptr, i64, i64 }, align 16 + %a1279 = alloca { ptr, i64, i64 }, align 16 + %a1280 = alloca { ptr, i64, i64 }, align 16 + %a1281 = alloca { ptr, i64, i64 }, align 16 + %a1284 = alloca { ptr, i64, i64 }, align 16 + %a1285 = alloca { ptr, i64, i64 }, align 16 + %a1286 = alloca { ptr, i64, i64 }, align 16 + %a1287 = alloca { ptr, i64, i64 }, align 16 + %a1290 = alloca { ptr, i64, i64 }, align 16 + %a1292 = alloca { ptr, i64, i64 }, align 16 + %a1295 = alloca { ptr, i64, i64 }, align 16 + %a1296 = alloca { ptr, i64, i64 }, align 16 + %a1297 = alloca { ptr, i64, i64 }, align 16 + %a1299 = alloca { ptr, i64, i64 }, align 16 + %a1300 = alloca { ptr, i64, i64 }, align 16 + %a1301 = alloca { ptr, i64, i64 }, align 16 + %a1302 = alloca { ptr, i64, i64 }, align 16 + %a1305 = alloca { ptr, i64, i64 }, align 16 + %a1306 = alloca { ptr, i64, i64 }, align 16 + %a1307 = alloca { ptr, i64, i64 }, align 16 + %a1308 = alloca { ptr, i64, i64 }, align 16 + %a1311 = alloca { ptr, i64, i64 }, align 16 + %a1312 = alloca { ptr, i64, i64 }, align 16 + %a1315 = alloca { ptr, i64, i64 }, align 16 + %a1318 = alloca { ptr, i64, i64 }, align 16 + %a1319 = alloca { ptr, i64, i64 }, align 16 + %a1320 = alloca { ptr, i64, i64 }, align 16 + %a1322 = alloca { ptr, i64, i64 }, align 16 + %a1323 = alloca { ptr, i64, i64 }, align 16 + %a1324 = alloca { ptr, i64, i64 }, align 16 + %a1325 = alloca { ptr, i64, i64 }, align 16 + %a1328 = alloca { ptr, i64, i64 }, align 16 + %a1329 = alloca { ptr, i64, i64 }, align 16 + %a1330 = alloca { ptr, i64, i64 }, align 16 + %a1331 = alloca { ptr, i64, i64 }, align 16 + %a1333 = alloca { ptr, i64, i64 }, align 16 + %a1334 = alloca { ptr, i64, i64 }, align 16 + %a1335 = alloca { ptr, i64, i64 }, align 16 + %a1336 = alloca { ptr, i64, i64 }, align 16 + %a1341 = alloca { ptr, i64, i64 }, align 16 + %a1342 = alloca { ptr, i64, i64 }, align 16 + %a1343 = alloca { ptr, i64, i64 }, align 16 + %a1344 = alloca { ptr, i64, i64 }, align 16 + %a1345 = alloca { ptr, i64, i64 }, align 16 + %a1347 = alloca { ptr, i64, i64 }, align 16 + %a1348 = alloca { ptr, i64, i64 }, align 16 + %a1349 = alloca { ptr, i64, i64 }, align 16 + %a1350 = alloca { ptr, i64, i64 }, align 16 + %a1352 = alloca { ptr, i64, i64 }, align 16 + %a1356 = alloca { ptr, i64, i64 }, align 16 + %a1360 = alloca { ptr, i64, i64 }, align 16 + %a1364 = alloca { ptr, i64, i64 }, align 16 + %a1367 = alloca { ptr, i64, i64 }, align 16 + %a1368 = alloca { ptr, i64, i64 }, align 16 + %a1369 = alloca { ptr, i64, i64 }, align 16 + %a1371 = alloca { ptr, i64, i64 }, align 16 + %a1372 = alloca { ptr, i64, i64 }, align 16 + %a1373 = alloca { ptr, i64, i64 }, align 16 + %a1374 = alloca { ptr, i64, i64 }, align 16 + %a1377 = alloca { ptr, i64, i64 }, align 16 + %a1378 = alloca { ptr, i64, i64 }, align 16 + %a1379 = alloca { ptr, i64, i64 }, align 16 + %a1380 = alloca { ptr, i64, i64 }, align 16 + %a1382 = alloca { ptr, i64, i64 }, align 16 + %a1383 = alloca { ptr, i64, i64 }, align 16 + %a1384 = alloca { ptr, i64, i64 }, align 16 + %a1385 = alloca { ptr, i64, i64 }, align 16 + %a1393 = alloca { ptr, i64, i64 }, align 16 + %a1394 = alloca { ptr, i64, i64 }, align 16 + %a1395 = alloca { ptr, i64, i64 }, align 16 + %a1396 = alloca { ptr, i64, i64 }, align 16 + %a1399 = alloca { ptr, i64, i64 }, align 16 + %a1400 = alloca { ptr, i64, i64 }, align 16 + %a1403 = alloca { ptr, i64, i64 }, align 16 + %a1404 = alloca { ptr, i64, i64 }, align 16 + %a1405 = alloca { ptr, i64, i64 }, align 16 + %a1407 = alloca { ptr, i64, i64 }, align 16 + %a1408 = alloca { ptr, i64, i64 }, align 16 + %a1409 = alloca { ptr, i64, i64 }, align 16 + %a1410 = alloca { ptr, i64, i64 }, align 16 + %a1413 = alloca { ptr, i64, i64 }, align 16 + %a1414 = alloca { ptr, i64, i64 }, align 16 + %a1415 = alloca { ptr, i64, i64 }, align 16 + %a1416 = alloca { ptr, i64, i64 }, align 16 + %a1418 = alloca { ptr, i64, i64 }, align 16 + %a1419 = alloca { ptr, i64, i64 }, align 16 + %a1420 = alloca { ptr, i64, i64 }, align 16 + %a1421 = alloca { ptr, i64, i64 }, align 16 + %a1425 = alloca { ptr, i64, i64 }, align 16 + %a1426 = alloca { ptr, i64, i64 }, align 16 + %a1427 = alloca { ptr, i64, i64 }, align 16 + %a1429 = alloca { ptr, i64, i64 }, align 16 + %a1430 = alloca { ptr, i64, i64 }, align 16 + %a1431 = alloca { ptr, i64, i64 }, align 16 + %a1432 = alloca { ptr, i64, i64 }, align 16 + %a1440 = alloca { ptr, i64, i64 }, align 16 + %a1441 = alloca { ptr, i64, i64 }, align 16 + %a1442 = alloca { ptr, i64, i64 }, align 16 + %a1443 = alloca { ptr, i64, i64 }, align 16 + %a1446 = alloca { ptr, i64, i64 }, align 16 + %a1447 = alloca { ptr, i64, i64 }, align 16 + %a1448 = alloca { ptr, i64, i64 }, align 16 + %a1449 = alloca { ptr, i64, i64 }, align 16 + %a1450 = alloca { ptr, i64, i64 }, align 16 + %a1451 = alloca { ptr, i64, i64 }, align 16 + %a1454 = alloca { ptr, i64, i64 }, align 16 + %a1455 = alloca { ptr, i64, i64 }, align 16 + %a1467 = alloca %S.ast.Type, align 16 + %a1468 = alloca %S.ast.Type, align 16 + %a1473 = alloca { ptr, i64, i64 }, align 16 + %a1474 = alloca { ptr, i64, i64 }, align 16 + %a1481 = alloca { ptr, i64, i64 }, align 16 + %a1482 = alloca { ptr, i64, i64 }, align 16 + %a1484 = alloca { ptr, i64, i64 }, align 16 + %a1489 = alloca { ptr, i64, i64 }, align 16 + %a1490 = alloca { ptr, i64, i64 }, align 16 + %a1495 = alloca { ptr, i64, i64 }, align 16 + %a1496 = alloca { ptr, i64, i64 }, align 16 + %a1505 = alloca { ptr, i64, i64 }, align 16 + %a1509 = alloca { ptr, i64, i64 }, align 16 + %a1513 = alloca { ptr, i64, i64 }, align 16 + %a1516 = alloca { ptr, i64, i64 }, align 16 + %a1517 = alloca { ptr, i64, i64 }, align 16 + %a1518 = alloca { ptr, i64, i64 }, align 16 + %a1520 = alloca { ptr, i64, i64 }, align 16 + %a1521 = alloca { ptr, i64, i64 }, align 16 + %a1522 = alloca { ptr, i64, i64 }, align 16 + %a1523 = alloca { ptr, i64, i64 }, align 16 + %a1526 = alloca { ptr, i64, i64 }, align 16 + %a1527 = alloca { ptr, i64, i64 }, align 16 + %a1528 = alloca { ptr, i64, i64 }, align 16 + %a1529 = alloca { ptr, i64, i64 }, align 16 + %a1531 = alloca { ptr, i64, i64 }, align 16 + %a1532 = alloca { ptr, i64, i64 }, align 16 + %a1533 = alloca { ptr, i64, i64 }, align 16 + %a1534 = alloca { ptr, i64, i64 }, align 16 + %a1539 = alloca { ptr, i64, i64 }, align 16 + %a1540 = alloca { ptr, i64, i64 }, align 16 + %a1541 = alloca { ptr, i64, i64 }, align 16 + %a1542 = alloca { ptr, i64, i64 }, align 16 + %a1543 = alloca { ptr, i64, i64 }, align 16 + %a1545 = alloca { ptr, i64, i64 }, align 16 + %a1546 = alloca { ptr, i64, i64 }, align 16 + %a1547 = alloca { ptr, i64, i64 }, align 16 + %a1548 = alloca { ptr, i64, i64 }, align 16 + %a1551 = alloca { ptr, i64, i64 }, align 16 + %a1552 = alloca { ptr, i64, i64 }, align 16 + %a1553 = alloca { ptr, i64, i64 }, align 16 + %a1554 = alloca { ptr, i64, i64 }, align 16 + %a1556 = alloca { ptr, i64, i64 }, align 16 + %a1557 = alloca { ptr, i64, i64 }, align 16 + %a1558 = alloca { ptr, i64, i64 }, align 16 + %a1559 = alloca { ptr, i64, i64 }, align 16 + %a1561 = alloca { ptr, i64, i64 }, align 16 + %a1567 = alloca { ptr, i64, i64 }, align 16 + %a1568 = alloca { ptr, i64, i64 }, align 16 + %a1569 = alloca { ptr, i64, i64 }, align 16 + %a1571 = alloca { ptr, i64, i64 }, align 16 + %a1572 = alloca { ptr, i64, i64 }, align 16 + %a1573 = alloca { ptr, i64, i64 }, align 16 + %a1574 = alloca { ptr, i64, i64 }, align 16 + %a1576 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store %S.ast.Type %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a4, i32 0, i32 1 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range8864, label %inrange8865 +range8864: + call void @finch_panic_index(ptr @.str.5668, i64 5404, i64 0, i64 %t7) + unreachable +inrange8865: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 + %t11 = load %S.ast.Type, ptr %t10 + store %S.ast.Type %t11, ptr %a12 + call void @finch.copy.S_ast_Type(ptr %a13, ptr %a12) + %t14 = load %S.ast.Type, ptr %a13 + store %S.ast.Type %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Type, ptr %a15 + %t18 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t16, %S.ast.Type %t17) + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t21 = load { ptr, i64, i64 }, ptr %t20 + store { ptr, i64, i64 } %t21, ptr %a22 + call void @finch_str_copy(ptr %a23, ptr %a22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load ptr, ptr %a1 + %t27 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5669, i64 46, i64 0 }, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a30 + call void @finch_str_concat(ptr %a28, ptr %a29, ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t31, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.5670, i64 14, i64 0 }, ptr %a34 + call void @finch_str_concat(ptr %a32, ptr %a33, ptr %a34) + store { ptr, i64, i64 } %t31, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load { ptr, i64, i64 }, ptr %a32 + %t37 = call { ptr, i64, i64 } @finch.gen.op(ptr %t26, { ptr, i64, i64 } %t36) + store { ptr, i64, i64 } %t36, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t37, ptr %a39 + %t40 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t40, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.5671, i64 4, i64 0 }, ptr %a42 + %t43 = call i32 @finch_str_eq(ptr %a41, ptr %a42) + %t44 = icmp ne i32 %t43, 0 + br i1 %t44, label %then8866, label %endif8868 +then8866: + %t45 = load ptr, ptr %a1 + %t46 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t45, %S.ast.Node %t46, i64 1) + %t47 = load ptr, ptr %a1 + %t48 = load ptr, ptr %a1 + %t49 = load ptr, ptr %a1 + %t50 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t51 = load { ptr, i64, i64 }, ptr %t50 + %t52 = extractvalue { ptr, i64, i64 } %t51, 1 + %t53 = icmp uge i64 1, %t52 + br i1 %t53, label %range8869, label %inrange8870 +range8869: + call void @finch_panic_index(ptr @.str.5672, i64 5410, i64 1, i64 %t52) + unreachable +inrange8870: + %t54 = extractvalue { ptr, i64, i64 } %t51, 0 + %t55 = getelementptr inbounds %S.ast.Node, ptr %t54, i64 1 + %t56 = load %S.ast.Node, ptr %t55 + %t57 = load %S.ast.Type, ptr %a15 + %t58 = call %S.gen.Val @finch.gen.exprWant(ptr %t49, %S.ast.Node %t56, %S.ast.Type %t57) + %t59 = load %S.ast.Type, ptr %a15 + %t60 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t61 = load { ptr, i64, i64 }, ptr %t60 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 1, %t62 + br i1 %t63, label %range8871, label %inrange8872 +range8871: + call void @finch_panic_index(ptr @.str.5673, i64 5410, i64 1, i64 %t62) + unreachable +inrange8872: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds %S.ast.Node, ptr %t64, i64 1 + %t66 = load %S.ast.Node, ptr %t65 + %t67 = call %S.gen.Val @finch.gen.coerce(ptr %t48, %S.gen.Val %t58, %S.ast.Type %t59, %S.ast.Node %t66, { ptr, i64, i64 } { ptr @.str.5674, i64 11, i64 0 }) + store %S.gen.Val %t58, ptr %a68 + call void @finch.drop.S_gen_Val(ptr %a68) + %t69 = call { ptr, i64, i64 } @finch.gen.own(ptr %t47, %S.gen.Val %t67) + store %S.gen.Val %t67, ptr %a70 + call void @finch.drop.S_gen_Val(ptr %a70) + store { ptr, i64, i64 } %t69, ptr %a71 + %t72 = load ptr, ptr %a1 + %t73 = load { ptr, i64, i64 }, ptr %a39 + %t74 = call { ptr, i64, i64 } @finch.gen.load(ptr %t72, { ptr, i64, i64 } { ptr @.str.5675, i64 3, i64 0 }, { ptr, i64, i64 } %t73) + store { ptr, i64, i64 } %t74, ptr %a75 + %t76 = load ptr, ptr %a1 + %t77 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.5676, i64 8, i64 0 }, ptr %a79 + store { ptr, i64, i64 } %t77, ptr %a80 + call void @finch_str_concat(ptr %a78, ptr %a79, ptr %a80) + %t81 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } %t81, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.5677, i64 3, i64 0 }, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t81, ptr %a85 + call void @finch_str_drop(ptr %a85) + %t86 = load { ptr, i64, i64 }, ptr %a82 + %t87 = call { ptr, i64, i64 } @finch.gen.op(ptr %t76, { ptr, i64, i64 } %t86) + store { ptr, i64, i64 } %t86, ptr %a88 + call void @finch_str_drop(ptr %a88) + store { ptr, i64, i64 } %t87, ptr %a89 + %t90 = load ptr, ptr %a1 + %t91 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5678, i64 33, i64 0 }, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t95, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.5679, i64 6, i64 0 }, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + %t101 = load { ptr, i64, i64 }, ptr %a89 + store { ptr, i64, i64 } %t100, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t100, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t106, ptr %a108 + store { ptr, i64, i64 } { ptr @.str.5680, i64 6, i64 0 }, ptr %a109 + call void @finch_str_concat(ptr %a107, ptr %a108, ptr %a109) + store { ptr, i64, i64 } %t106, ptr %a110 + call void @finch_str_drop(ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a107 + %t112 = load ptr, ptr %a1 + %t113 = load %S.ast.Type, ptr %a15 + %t114 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t112, %S.ast.Type %t113) + store { ptr, i64, i64 } %t111, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t111, ptr %a118 + call void @finch_str_drop(ptr %a118) + store { ptr, i64, i64 } %t114, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t120, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.5681, i64 1, i64 0 }, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t120, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + call void @finch.gen.emit(ptr %t90, { ptr, i64, i64 } %t125) + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load ptr, ptr %a1 + %t128 = load { ptr, i64, i64 }, ptr %a3 + %t129 = call { ptr, i64, i64 } @finch.gen.load(ptr %t127, { ptr, i64, i64 } { ptr @.str.5682, i64 3, i64 0 }, { ptr, i64, i64 } %t128) + store { ptr, i64, i64 } %t129, ptr %a130 + %t131 = load ptr, ptr %a1 + %t132 = load { ptr, i64, i64 }, ptr %a19 + %t133 = load { ptr, i64, i64 }, ptr %a71 + %t134 = load ptr, ptr %a1 + %t135 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5683, i64 23, i64 0 }, ptr %a137 + store { ptr, i64, i64 } %t135, ptr %a138 + call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) + %t139 = load { ptr, i64, i64 }, ptr %a136 + store { ptr, i64, i64 } %t139, ptr %a141 + store { ptr, i64, i64 } { ptr @.str.5684, i64 6, i64 0 }, ptr %a142 + call void @finch_str_concat(ptr %a140, ptr %a141, ptr %a142) + store { ptr, i64, i64 } %t139, ptr %a143 + call void @finch_str_drop(ptr %a143) + %t144 = load { ptr, i64, i64 }, ptr %a140 + %t145 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } %t144, ptr %a147 + store { ptr, i64, i64 } %t145, ptr %a148 + call void @finch_str_concat(ptr %a146, ptr %a147, ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a146 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.5685, i64 6, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t155, ptr %a158 + store { ptr, i64, i64 } %t156, ptr %a159 + call void @finch_str_concat(ptr %a157, ptr %a158, ptr %a159) + store { ptr, i64, i64 } %t155, ptr %a160 + call void @finch_str_drop(ptr %a160) + %t161 = load { ptr, i64, i64 }, ptr %a157 + %t162 = call { ptr, i64, i64 } @finch.gen.op(ptr %t134, { ptr, i64, i64 } %t161) + store { ptr, i64, i64 } %t161, ptr %a163 + call void @finch_str_drop(ptr %a163) + call void @finch.gen.store(ptr %t131, { ptr, i64, i64 } %t132, { ptr, i64, i64 } %t133, { ptr, i64, i64 } %t162) + store { ptr, i64, i64 } %t162, ptr %a164 + call void @finch_str_drop(ptr %a164) + %t165 = load ptr, ptr %a1 + %t166 = load { ptr, i64, i64 }, ptr %a89 + %t167 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.store(ptr %t165, { ptr, i64, i64 } { ptr @.str.5686, i64 3, i64 0 }, { ptr, i64, i64 } %t166, { ptr, i64, i64 } %t167) + %t168 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5687, i64 4, i64 0 }) + %t169 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t168, 1 + call void @finch_str_drop(ptr %a130) + call void @finch_str_drop(ptr %a89) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a71) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t169 +endif8868: + %t170 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.5688, i64 3, i64 0 }, ptr %a172 + %t173 = call i32 @finch_str_eq(ptr %a171, ptr %a172) + %t174 = icmp ne i32 %t173, 0 + br i1 %t174, label %then8873, label %endif8875 +then8873: + %t175 = load ptr, ptr %a1 + %t176 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t175, %S.ast.Node %t176, i64 0) + %t177 = load ptr, ptr %a1 + %t178 = load { ptr, i64, i64 }, ptr %a39 + %t179 = call { ptr, i64, i64 } @finch.gen.load(ptr %t177, { ptr, i64, i64 } { ptr @.str.5689, i64 3, i64 0 }, { ptr, i64, i64 } %t178) + store { ptr, i64, i64 } %t179, ptr %a180 + %t181 = load ptr, ptr %a1 + %t182 = load ptr, ptr %a1 + %t183 = load { ptr, i64, i64 }, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5690, i64 12, i64 0 }, ptr %a185 + store { ptr, i64, i64 } %t183, ptr %a186 + call void @finch_str_concat(ptr %a184, ptr %a185, ptr %a186) + %t187 = load { ptr, i64, i64 }, ptr %a184 + store { ptr, i64, i64 } %t187, ptr %a189 + store { ptr, i64, i64 } { ptr @.str.5691, i64 3, i64 0 }, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + %t193 = call { ptr, i64, i64 } @finch.gen.op(ptr %t182, { ptr, i64, i64 } %t192) + store { ptr, i64, i64 } %t192, ptr %a194 + call void @finch_str_drop(ptr %a194) + %t195 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t181, { ptr, i64, i64 } %t193, { ptr, i64, i64 } { ptr @.str.5692, i64 23, i64 0 }, %S.ast.Node %t195) + store { ptr, i64, i64 } %t193, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load ptr, ptr %a1 + %t198 = load { ptr, i64, i64 }, ptr %a180 + store { ptr, i64, i64 } { ptr @.str.5693, i64 8, i64 0 }, ptr %a200 + store { ptr, i64, i64 } %t198, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + %t202 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t202, ptr %a204 + store { ptr, i64, i64 } { ptr @.str.5694, i64 3, i64 0 }, ptr %a205 + call void @finch_str_concat(ptr %a203, ptr %a204, ptr %a205) + store { ptr, i64, i64 } %t202, ptr %a206 + call void @finch_str_drop(ptr %a206) + %t207 = load { ptr, i64, i64 }, ptr %a203 + %t208 = call { ptr, i64, i64 } @finch.gen.op(ptr %t197, { ptr, i64, i64 } %t207) + store { ptr, i64, i64 } %t207, ptr %a209 + call void @finch_str_drop(ptr %a209) + store { ptr, i64, i64 } %t208, ptr %a210 + %t211 = load ptr, ptr %a1 + %t212 = load { ptr, i64, i64 }, ptr %a3 + %t213 = call { ptr, i64, i64 } @finch.gen.load(ptr %t211, { ptr, i64, i64 } { ptr @.str.5695, i64 3, i64 0 }, { ptr, i64, i64 } %t212) + store { ptr, i64, i64 } %t213, ptr %a214 + %t215 = load ptr, ptr %a1 + %t216 = load { ptr, i64, i64 }, ptr %a19 + %t217 = load ptr, ptr %a1 + %t218 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5696, i64 23, i64 0 }, ptr %a220 + store { ptr, i64, i64 } %t218, ptr %a221 + call void @finch_str_concat(ptr %a219, ptr %a220, ptr %a221) + %t222 = load { ptr, i64, i64 }, ptr %a219 + store { ptr, i64, i64 } %t222, ptr %a224 + store { ptr, i64, i64 } { ptr @.str.5697, i64 6, i64 0 }, ptr %a225 + call void @finch_str_concat(ptr %a223, ptr %a224, ptr %a225) + store { ptr, i64, i64 } %t222, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a223 + %t228 = load { ptr, i64, i64 }, ptr %a214 + store { ptr, i64, i64 } %t227, ptr %a230 + store { ptr, i64, i64 } %t228, ptr %a231 + call void @finch_str_concat(ptr %a229, ptr %a230, ptr %a231) + store { ptr, i64, i64 } %t227, ptr %a232 + call void @finch_str_drop(ptr %a232) + %t233 = load { ptr, i64, i64 }, ptr %a229 + store { ptr, i64, i64 } %t233, ptr %a235 + store { ptr, i64, i64 } { ptr @.str.5698, i64 6, i64 0 }, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + %t239 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } %t238, ptr %a241 + store { ptr, i64, i64 } %t239, ptr %a242 + call void @finch_str_concat(ptr %a240, ptr %a241, ptr %a242) + store { ptr, i64, i64 } %t238, ptr %a243 + call void @finch_str_drop(ptr %a243) + %t244 = load { ptr, i64, i64 }, ptr %a240 + %t245 = call { ptr, i64, i64 } @finch.gen.op(ptr %t217, { ptr, i64, i64 } %t244) + store { ptr, i64, i64 } %t244, ptr %a246 + call void @finch_str_drop(ptr %a246) + %t247 = call { ptr, i64, i64 } @finch.gen.load(ptr %t215, { ptr, i64, i64 } %t216, { ptr, i64, i64 } %t245) + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_drop(ptr %a248) + store { ptr, i64, i64 } %t247, ptr %a249 + %t250 = load ptr, ptr %a1 + %t251 = load { ptr, i64, i64 }, ptr %a210 + %t252 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.store(ptr %t250, { ptr, i64, i64 } { ptr @.str.5699, i64 3, i64 0 }, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252) + %t253 = load { ptr, i64, i64 }, ptr %a249 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_copy(ptr %a255, ptr %a254) + %t256 = load { ptr, i64, i64 }, ptr %a255 + %t257 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t256, 0 + %t258 = load %S.ast.Type, ptr %a15 + store %S.ast.Type %t258, ptr %a259 + call void @finch.copy.S_ast_Type(ptr %a260, ptr %a259) + %t261 = load %S.ast.Type, ptr %a260 + %t262 = insertvalue %S.gen.Val %t257, %S.ast.Type %t261, 1 + %t263 = load ptr, ptr %a1 + %t264 = load %S.ast.Type, ptr %a15 + %t265 = call i1 @finch.gen.owning(ptr %t263, %S.ast.Type %t264) + %t266 = insertvalue %S.gen.Val %t262, i1 %t265, 2 + call void @finch_str_drop(ptr %a249) + call void @finch_str_drop(ptr %a214) + call void @finch_str_drop(ptr %a210) + call void @finch_str_drop(ptr %a180) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t266 +endif8875: + %t267 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t267, ptr %a268 + store { ptr, i64, i64 } { ptr @.str.5700, i64 5, i64 0 }, ptr %a269 + %t270 = call i32 @finch_str_eq(ptr %a268, ptr %a269) + %t271 = icmp ne i32 %t270, 0 + br i1 %t271, label %then8876, label %endif8878 +then8876: + %t272 = load ptr, ptr %a1 + %t273 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t272, %S.ast.Node %t273, i64 0) + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a3 + %t276 = load %S.ast.Type, ptr %a4 + call void @finch.gen.dropFrom(ptr %t274, { ptr, i64, i64 } %t275, %S.ast.Type %t276, { ptr, i64, i64 } { ptr @.str.5701, i64 1, i64 0 }) + %t277 = load ptr, ptr %a1 + %t278 = load { ptr, i64, i64 }, ptr %a39 + call void @finch.gen.store(ptr %t277, { ptr, i64, i64 } { ptr @.str.5702, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5703, i64 1, i64 0 }, { ptr, i64, i64 } %t278) + %t279 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5704, i64 4, i64 0 }) + %t280 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t279, 1 + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t280 +endif8878: + %t281 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t281, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.5705, i64 4, i64 0 }, ptr %a283 + %t284 = call i32 @finch_str_eq(ptr %a282, ptr %a283) + %t285 = icmp ne i32 %t284, 0 + br label %logic.from8879 +logic.from8879: + br i1 %t285, label %logic.end8881, label %logic.rhs8880 +logic.rhs8880: + %t286 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t286, ptr %a287 + store { ptr, i64, i64 } { ptr @.str.5706, i64 8, i64 0 }, ptr %a288 + %t289 = call i32 @finch_str_eq(ptr %a287, ptr %a288) + %t290 = icmp ne i32 %t289, 0 + br label %logic.rend8882 +logic.rend8882: + br label %logic.end8881 +logic.end8881: + %t291 = phi i1 [ true, %logic.from8879 ], [ %t290, %logic.rend8882 ] + br i1 %t291, label %then8883, label %endif8885 +then8883: + %t292 = load ptr, ptr %a1 + %t293 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t292, %S.ast.Node %t293, i64 1) + %t294 = load ptr, ptr %a1 + %t295 = load ptr, ptr %a1 + %t296 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t297 = load { ptr, i64, i64 }, ptr %t296 + %t298 = extractvalue { ptr, i64, i64 } %t297, 1 + %t299 = icmp uge i64 1, %t298 + br i1 %t299, label %range8886, label %inrange8887 +range8886: + call void @finch_panic_index(ptr @.str.5707, i64 5437, i64 1, i64 %t298) + unreachable +inrange8887: + %t300 = extractvalue { ptr, i64, i64 } %t297, 0 + %t301 = getelementptr inbounds %S.ast.Node, ptr %t300, i64 1 + %t302 = load %S.ast.Node, ptr %t301 + %t303 = load %S.ast.Type, ptr %a15 + %t304 = call %S.gen.Val @finch.gen.exprWant(ptr %t295, %S.ast.Node %t302, %S.ast.Type %t303) + %t305 = load %S.ast.Type, ptr %a15 + %t306 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t307 = load { ptr, i64, i64 }, ptr %t306 + %t308 = extractvalue { ptr, i64, i64 } %t307, 1 + %t309 = icmp uge i64 1, %t308 + br i1 %t309, label %range8888, label %inrange8889 +range8888: + call void @finch_panic_index(ptr @.str.5708, i64 5437, i64 1, i64 %t308) + unreachable +inrange8889: + %t310 = extractvalue { ptr, i64, i64 } %t307, 0 + %t311 = getelementptr inbounds %S.ast.Node, ptr %t310, i64 1 + %t312 = load %S.ast.Node, ptr %t311 + %t313 = call %S.gen.Val @finch.gen.coerce(ptr %t294, %S.gen.Val %t304, %S.ast.Type %t305, %S.ast.Node %t312, { ptr, i64, i64 } { ptr @.str.5709, i64 21, i64 0 }) + store %S.gen.Val %t304, ptr %a314 + call void @finch.drop.S_gen_Val(ptr %a314) + store %S.gen.Val %t313, ptr %a315 + %t316 = load ptr, ptr %a1 + %t317 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t316, { ptr, i64, i64 } { ptr @.str.5710, i64 3, i64 0 }) + store { ptr, i64, i64 } %t317, ptr %a318 + %t319 = load ptr, ptr %a1 + %t320 = load { ptr, i64, i64 }, ptr %a318 + call void @finch.gen.store(ptr %t319, { ptr, i64, i64 } { ptr @.str.5711, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5712, i64 2, i64 0 }, { ptr, i64, i64 } %t320) + %t321 = load ptr, ptr %a1 + %t322 = load { ptr, i64, i64 }, ptr %a39 + %t323 = call { ptr, i64, i64 } @finch.gen.load(ptr %t321, { ptr, i64, i64 } { ptr @.str.5713, i64 3, i64 0 }, { ptr, i64, i64 } %t322) + store { ptr, i64, i64 } %t323, ptr %a324 + %t325 = load ptr, ptr %a1 + %t326 = load { ptr, i64, i64 }, ptr %a3 + %t327 = call { ptr, i64, i64 } @finch.gen.load(ptr %t325, { ptr, i64, i64 } { ptr @.str.5714, i64 3, i64 0 }, { ptr, i64, i64 } %t326) + store { ptr, i64, i64 } %t327, ptr %a328 + %t329 = load ptr, ptr %a1 + %t330 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t329, { ptr, i64, i64 } { ptr @.str.5715, i64 3, i64 0 }) + store { ptr, i64, i64 } %t330, ptr %a331 + %t332 = load ptr, ptr %a1 + %t333 = load { ptr, i64, i64 }, ptr %a331 + call void @finch.gen.store(ptr %t332, { ptr, i64, i64 } { ptr @.str.5716, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.5717, i64 1, i64 0 }, { ptr, i64, i64 } %t333) + %t334 = load ptr, ptr %a1 + %t335 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t334, { ptr, i64, i64 } { ptr @.str.5718, i64 9, i64 0 }) + store { ptr, i64, i64 } %t335, ptr %a336 + %t337 = load ptr, ptr %a1 + %t338 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t337, { ptr, i64, i64 } { ptr @.str.5719, i64 9, i64 0 }) + store { ptr, i64, i64 } %t338, ptr %a339 + %t340 = load ptr, ptr %a1 + %t341 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t340, { ptr, i64, i64 } { ptr @.str.5720, i64 8, i64 0 }) + store { ptr, i64, i64 } %t341, ptr %a342 + %t343 = load ptr, ptr %a1 + %t344 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t343, { ptr, i64, i64 } { ptr @.str.5721, i64 9, i64 0 }) + store { ptr, i64, i64 } %t344, ptr %a345 + %t346 = load ptr, ptr %a1 + %t347 = call { ptr, i64, i64 } @finch.gen.newLabel(ptr %t346, { ptr, i64, i64 } { ptr @.str.5722, i64 8, i64 0 }) + store { ptr, i64, i64 } %t347, ptr %a348 + %t349 = load ptr, ptr %a1 + %t350 = load { ptr, i64, i64 }, ptr %a336 + call void @finch.gen.br(ptr %t349, { ptr, i64, i64 } %t350) + %t351 = load ptr, ptr %a1 + %t352 = load { ptr, i64, i64 }, ptr %a336 + call void @finch.gen.label(ptr %t351, { ptr, i64, i64 } %t352) + %t353 = load ptr, ptr %a1 + %t354 = load { ptr, i64, i64 }, ptr %a331 + %t355 = call { ptr, i64, i64 } @finch.gen.load(ptr %t353, { ptr, i64, i64 } { ptr @.str.5723, i64 3, i64 0 }, { ptr, i64, i64 } %t354) + store { ptr, i64, i64 } %t355, ptr %a356 + %t357 = load ptr, ptr %a1 + %t358 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.5724, i64 13, i64 0 }, ptr %a360 + store { ptr, i64, i64 } %t358, ptr %a361 + call void @finch_str_concat(ptr %a359, ptr %a360, ptr %a361) + %t362 = load { ptr, i64, i64 }, ptr %a359 + store { ptr, i64, i64 } %t362, ptr %a364 + store { ptr, i64, i64 } { ptr @.str.5725, i64 2, i64 0 }, ptr %a365 + call void @finch_str_concat(ptr %a363, ptr %a364, ptr %a365) + store { ptr, i64, i64 } %t362, ptr %a366 + call void @finch_str_drop(ptr %a366) + %t367 = load { ptr, i64, i64 }, ptr %a363 + %t368 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t367, ptr %a370 + store { ptr, i64, i64 } %t368, ptr %a371 + call void @finch_str_concat(ptr %a369, ptr %a370, ptr %a371) + store { ptr, i64, i64 } %t367, ptr %a372 + call void @finch_str_drop(ptr %a372) + %t373 = load { ptr, i64, i64 }, ptr %a369 + %t374 = call { ptr, i64, i64 } @finch.gen.op(ptr %t357, { ptr, i64, i64 } %t373) + store { ptr, i64, i64 } %t373, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t374, ptr %a376 + %t377 = load ptr, ptr %a1 + %t378 = load { ptr, i64, i64 }, ptr %a376 + %t379 = load { ptr, i64, i64 }, ptr %a339 + %t380 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.gen.condBr(ptr %t377, { ptr, i64, i64 } %t378, { ptr, i64, i64 } %t379, { ptr, i64, i64 } %t380) + %t381 = load ptr, ptr %a1 + %t382 = load { ptr, i64, i64 }, ptr %a339 + call void @finch.gen.label(ptr %t381, { ptr, i64, i64 } %t382) + %t383 = load ptr, ptr %a1 + %t384 = load { ptr, i64, i64 }, ptr %a19 + %t385 = load ptr, ptr %a1 + %t386 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5726, i64 23, i64 0 }, ptr %a388 + store { ptr, i64, i64 } %t386, ptr %a389 + call void @finch_str_concat(ptr %a387, ptr %a388, ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a387 + store { ptr, i64, i64 } %t390, ptr %a392 + store { ptr, i64, i64 } { ptr @.str.5727, i64 6, i64 0 }, ptr %a393 + call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) + store { ptr, i64, i64 } %t390, ptr %a394 + call void @finch_str_drop(ptr %a394) + %t395 = load { ptr, i64, i64 }, ptr %a391 + %t396 = load { ptr, i64, i64 }, ptr %a328 + store { ptr, i64, i64 } %t395, ptr %a398 + store { ptr, i64, i64 } %t396, ptr %a399 + call void @finch_str_concat(ptr %a397, ptr %a398, ptr %a399) + store { ptr, i64, i64 } %t395, ptr %a400 + call void @finch_str_drop(ptr %a400) + %t401 = load { ptr, i64, i64 }, ptr %a397 + store { ptr, i64, i64 } %t401, ptr %a403 + store { ptr, i64, i64 } { ptr @.str.5728, i64 6, i64 0 }, ptr %a404 + call void @finch_str_concat(ptr %a402, ptr %a403, ptr %a404) + store { ptr, i64, i64 } %t401, ptr %a405 + call void @finch_str_drop(ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a402 + %t407 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } %t406, ptr %a409 + store { ptr, i64, i64 } %t407, ptr %a410 + call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410) + store { ptr, i64, i64 } %t406, ptr %a411 + call void @finch_str_drop(ptr %a411) + %t412 = load { ptr, i64, i64 }, ptr %a408 + %t413 = call { ptr, i64, i64 } @finch.gen.op(ptr %t385, { ptr, i64, i64 } %t412) + store { ptr, i64, i64 } %t412, ptr %a414 + call void @finch_str_drop(ptr %a414) + %t415 = call { ptr, i64, i64 } @finch.gen.load(ptr %t383, { ptr, i64, i64 } %t384, { ptr, i64, i64 } %t413) + store { ptr, i64, i64 } %t413, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t415, 0 + %t418 = load %S.ast.Type, ptr %a15 + store %S.ast.Type %t418, ptr %a419 + call void @finch.copy.S_ast_Type(ptr %a420, ptr %a419) + %t421 = load %S.ast.Type, ptr %a420 + %t422 = insertvalue %S.gen.Val %t417, %S.ast.Type %t421, 1 + store %S.gen.Val %t422, ptr %a423 + %t424 = load ptr, ptr %a1 + %t425 = load %S.gen.Val, ptr %a423 + %t426 = getelementptr inbounds %S.gen.Val, ptr %a315, i32 0, i32 0 + %t427 = load { ptr, i64, i64 }, ptr %t426 + store { ptr, i64, i64 } %t427, ptr %a428 + call void @finch_str_copy(ptr %a429, ptr %a428) + %t430 = load { ptr, i64, i64 }, ptr %a429 + %t431 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t430, 0 + %t432 = getelementptr inbounds %S.gen.Val, ptr %a315, i32 0, i32 1 + %t433 = load %S.ast.Type, ptr %t432 + store %S.ast.Type %t433, ptr %a434 + call void @finch.copy.S_ast_Type(ptr %a435, ptr %a434) + %t436 = load %S.ast.Type, ptr %a435 + %t437 = insertvalue %S.gen.Val %t431, %S.ast.Type %t436, 1 + %t438 = load %S.ast.Node, ptr %a2 + %t439 = call %S.gen.Val @finch.gen.compare(ptr %t424, { ptr, i64, i64 } { ptr @.str.5729, i64 2, i64 0 }, %S.gen.Val %t425, %S.gen.Val %t437, %S.ast.Node %t438) + store %S.gen.Val %t437, ptr %a440 + call void @finch.drop.S_gen_Val(ptr %a440) + %t441 = extractvalue %S.gen.Val %t439, 0 + store { ptr, i64, i64 } %t441, ptr %a442 + call void @finch_str_copy(ptr %a443, ptr %a442) + %t444 = load { ptr, i64, i64 }, ptr %a443 + store %S.gen.Val %t439, ptr %a445 + call void @finch.drop.S_gen_Val(ptr %a445) + store { ptr, i64, i64 } %t444, ptr %a446 + %t447 = load ptr, ptr %a1 + %t448 = load { ptr, i64, i64 }, ptr %a446 + %t449 = load { ptr, i64, i64 }, ptr %a342 + %t450 = load { ptr, i64, i64 }, ptr %a345 + call void @finch.gen.condBr(ptr %t447, { ptr, i64, i64 } %t448, { ptr, i64, i64 } %t449, { ptr, i64, i64 } %t450) + %t451 = load ptr, ptr %a1 + %t452 = load { ptr, i64, i64 }, ptr %a342 + call void @finch.gen.label(ptr %t451, { ptr, i64, i64 } %t452) + %t453 = load ptr, ptr %a1 + %t454 = load { ptr, i64, i64 }, ptr %a356 + %t455 = load { ptr, i64, i64 }, ptr %a318 + call void @finch.gen.store(ptr %t453, { ptr, i64, i64 } { ptr @.str.5730, i64 3, i64 0 }, { ptr, i64, i64 } %t454, { ptr, i64, i64 } %t455) + %t456 = load ptr, ptr %a1 + %t457 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.gen.br(ptr %t456, { ptr, i64, i64 } %t457) + %t458 = load ptr, ptr %a1 + %t459 = load { ptr, i64, i64 }, ptr %a345 + call void @finch.gen.label(ptr %t458, { ptr, i64, i64 } %t459) + %t460 = load ptr, ptr %a1 + %t461 = load ptr, ptr %a1 + %t462 = load { ptr, i64, i64 }, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.5732, i64 8, i64 0 }, ptr %a464 + store { ptr, i64, i64 } %t462, ptr %a465 + call void @finch_str_concat(ptr %a463, ptr %a464, ptr %a465) + %t466 = load { ptr, i64, i64 }, ptr %a463 + store { ptr, i64, i64 } %t466, ptr %a468 + store { ptr, i64, i64 } { ptr @.str.5733, i64 3, i64 0 }, ptr %a469 + call void @finch_str_concat(ptr %a467, ptr %a468, ptr %a469) + store { ptr, i64, i64 } %t466, ptr %a470 + call void @finch_str_drop(ptr %a470) + %t471 = load { ptr, i64, i64 }, ptr %a467 + %t472 = call { ptr, i64, i64 } @finch.gen.op(ptr %t461, { ptr, i64, i64 } %t471) + store { ptr, i64, i64 } %t471, ptr %a473 + call void @finch_str_drop(ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a331 + call void @finch.gen.store(ptr %t460, { ptr, i64, i64 } { ptr @.str.5731, i64 3, i64 0 }, { ptr, i64, i64 } %t472, { ptr, i64, i64 } %t474) + store { ptr, i64, i64 } %t472, ptr %a475 + call void @finch_str_drop(ptr %a475) + %t476 = load ptr, ptr %a1 + %t477 = load { ptr, i64, i64 }, ptr %a336 + call void @finch.gen.br(ptr %t476, { ptr, i64, i64 } %t477) + %t478 = load ptr, ptr %a1 + %t479 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.gen.label(ptr %t478, { ptr, i64, i64 } %t479) + %t480 = load ptr, ptr %a1 + %t481 = load %S.gen.Val, ptr %a315 + call void @finch.gen.release(ptr %t480, %S.gen.Val %t481) + %t482 = load ptr, ptr %a1 + %t483 = load { ptr, i64, i64 }, ptr %a318 + %t484 = call { ptr, i64, i64 } @finch.gen.load(ptr %t482, { ptr, i64, i64 } { ptr @.str.5734, i64 3, i64 0 }, { ptr, i64, i64 } %t483) + store { ptr, i64, i64 } %t484, ptr %a485 + %t486 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t486, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.5735, i64 4, i64 0 }, ptr %a488 + %t489 = call i32 @finch_str_eq(ptr %a487, ptr %a488) + %t490 = icmp ne i32 %t489, 0 + br i1 %t490, label %then8890, label %endif8892 +then8890: + %t491 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } %t491, ptr %a492 + call void @finch_str_copy(ptr %a493, ptr %a492) + %t494 = load { ptr, i64, i64 }, ptr %a493 + %t495 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t494, 0 + %t496 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5736, i64 3, i64 0 }) + %t497 = insertvalue %S.gen.Val %t495, %S.ast.Type %t496, 1 + call void @finch_str_drop(ptr %a485) + call void @finch_str_drop(ptr %a446) + call void @finch.drop.S_gen_Val(ptr %a423) + call void @finch_str_drop(ptr %a376) + call void @finch_str_drop(ptr %a356) + call void @finch_str_drop(ptr %a348) + call void @finch_str_drop(ptr %a345) + call void @finch_str_drop(ptr %a342) + call void @finch_str_drop(ptr %a339) + call void @finch_str_drop(ptr %a336) + call void @finch_str_drop(ptr %a331) + call void @finch_str_drop(ptr %a328) + call void @finch_str_drop(ptr %a324) + call void @finch_str_drop(ptr %a318) + call void @finch.drop.S_gen_Val(ptr %a315) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t497 +endif8892: + %t498 = load ptr, ptr %a1 + %t499 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.5737, i64 13, i64 0 }, ptr %a501 + store { ptr, i64, i64 } %t499, ptr %a502 + call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) + %t503 = load { ptr, i64, i64 }, ptr %a500 + store { ptr, i64, i64 } %t503, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.5738, i64 3, i64 0 }, ptr %a506 + call void @finch_str_concat(ptr %a504, ptr %a505, ptr %a506) + store { ptr, i64, i64 } %t503, ptr %a507 + call void @finch_str_drop(ptr %a507) + %t508 = load { ptr, i64, i64 }, ptr %a504 + %t509 = call { ptr, i64, i64 } @finch.gen.op(ptr %t498, { ptr, i64, i64 } %t508) + store { ptr, i64, i64 } %t508, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t509, 0 + %t512 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5739, i64 4, i64 0 }) + %t513 = insertvalue %S.gen.Val %t511, %S.ast.Type %t512, 1 + call void @finch_str_drop(ptr %a485) + call void @finch_str_drop(ptr %a446) + call void @finch.drop.S_gen_Val(ptr %a423) + call void @finch_str_drop(ptr %a376) + call void @finch_str_drop(ptr %a356) + call void @finch_str_drop(ptr %a348) + call void @finch_str_drop(ptr %a345) + call void @finch_str_drop(ptr %a342) + call void @finch_str_drop(ptr %a339) + call void @finch_str_drop(ptr %a336) + call void @finch_str_drop(ptr %a331) + call void @finch_str_drop(ptr %a328) + call void @finch_str_drop(ptr %a324) + call void @finch_str_drop(ptr %a318) + call void @finch.drop.S_gen_Val(ptr %a315) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t513 +endif8885: + %t514 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t514, ptr %a515 + store { ptr, i64, i64 } { ptr @.str.5740, i64 4, i64 0 }, ptr %a516 + %t517 = call i32 @finch_str_eq(ptr %a515, ptr %a516) + %t518 = icmp ne i32 %t517, 0 + br i1 %t518, label %then8893, label %endif8895 +then8893: + %t519 = load ptr, ptr %a1 + %t520 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t519, %S.ast.Node %t520, i64 1) + %t521 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 + %t522 = load { ptr, i64, i64 }, ptr %t521 + store { ptr, i64, i64 } %t522, ptr %a523 + store { ptr, i64, i64 } { ptr @.str.5741, i64 3, i64 0 }, ptr %a524 + %t525 = call i32 @finch_str_eq(ptr %a523, ptr %a524) + %t526 = icmp eq i32 %t525, 0 + br i1 %t526, label %then8896, label %endif8898 +then8896: + %t527 = load ptr, ptr %a1 + %t528 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t527, %S.ast.Node %t528, { ptr, i64, i64 } { ptr @.str.5742, i64 31, i64 0 }) + br label %endif8898 +endif8898: + %t529 = load ptr, ptr %a1 + %t530 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t531 = load { ptr, i64, i64 }, ptr %t530 + %t532 = extractvalue { ptr, i64, i64 } %t531, 1 + %t533 = icmp uge i64 1, %t532 + br i1 %t533, label %range8899, label %inrange8900 +range8899: + call void @finch_panic_index(ptr @.str.5743, i64 5477, i64 1, i64 %t532) + unreachable +inrange8900: + %t534 = extractvalue { ptr, i64, i64 } %t531, 0 + %t535 = getelementptr inbounds %S.ast.Node, ptr %t534, i64 1 + %t536 = load %S.ast.Node, ptr %t535 + %t537 = call %S.gen.Val @finch.gen.strArg(ptr %t529, %S.ast.Node %t536, { ptr, i64, i64 } { ptr @.str.5744, i64 13, i64 0 }) + store %S.gen.Val %t537, ptr %a538 + %t539 = load ptr, ptr %a1 + %t540 = load %S.gen.Val, ptr %a538 + %t541 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t539, %S.gen.Val %t540) + store { ptr, i64, i64 } %t541, ptr %a542 + %t543 = load ptr, ptr %a1 + %t544 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t543) + store { ptr, i64, i64 } %t544, ptr %a545 + %t546 = load ptr, ptr %a1 + %t547 = load { ptr, i64, i64 }, ptr %a545 + store { ptr, i64, i64 } { ptr @.str.5745, i64 30, i64 0 }, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } %t551, ptr %a553 + store { ptr, i64, i64 } { ptr @.str.5746, i64 6, i64 0 }, ptr %a554 + call void @finch_str_concat(ptr %a552, ptr %a553, ptr %a554) + store { ptr, i64, i64 } %t551, ptr %a555 + call void @finch_str_drop(ptr %a555) + %t556 = load { ptr, i64, i64 }, ptr %a552 + %t557 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t556, ptr %a559 + store { ptr, i64, i64 } %t557, ptr %a560 + call void @finch_str_concat(ptr %a558, ptr %a559, ptr %a560) + store { ptr, i64, i64 } %t556, ptr %a561 + call void @finch_str_drop(ptr %a561) + %t562 = load { ptr, i64, i64 }, ptr %a558 + store { ptr, i64, i64 } %t562, ptr %a564 + store { ptr, i64, i64 } { ptr @.str.5747, i64 6, i64 0 }, ptr %a565 + call void @finch_str_concat(ptr %a563, ptr %a564, ptr %a565) + store { ptr, i64, i64 } %t562, ptr %a566 + call void @finch_str_drop(ptr %a566) + %t567 = load { ptr, i64, i64 }, ptr %a563 + %t568 = load { ptr, i64, i64 }, ptr %a542 + store { ptr, i64, i64 } %t567, ptr %a570 + store { ptr, i64, i64 } %t568, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + store { ptr, i64, i64 } %t567, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a569 + store { ptr, i64, i64 } %t573, ptr %a575 + store { ptr, i64, i64 } { ptr @.str.5748, i64 1, i64 0 }, ptr %a576 + call void @finch_str_concat(ptr %a574, ptr %a575, ptr %a576) + store { ptr, i64, i64 } %t573, ptr %a577 + call void @finch_str_drop(ptr %a577) + %t578 = load { ptr, i64, i64 }, ptr %a574 + call void @finch.gen.emit(ptr %t546, { ptr, i64, i64 } %t578) + store { ptr, i64, i64 } %t578, ptr %a579 + call void @finch_str_drop(ptr %a579) + %t580 = load ptr, ptr %a1 + %t581 = load %S.gen.Val, ptr %a538 + call void @finch.gen.release(ptr %t580, %S.gen.Val %t581) + %t582 = load ptr, ptr %a1 + %t583 = load { ptr, i64, i64 }, ptr %a545 + %t584 = call { ptr, i64, i64 } @finch.gen.load(ptr %t582, { ptr, i64, i64 } { ptr @.str.5749, i64 17, i64 0 }, { ptr, i64, i64 } %t583) + %t585 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t584, 0 + %t586 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5750, i64 3, i64 0 }) + %t587 = insertvalue %S.gen.Val %t585, %S.ast.Type %t586, 1 + %t588 = insertvalue %S.gen.Val %t587, i1 true, 2 + call void @finch_str_drop(ptr %a545) + call void @finch_str_drop(ptr %a542) + call void @finch.drop.S_gen_Val(ptr %a538) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t588 +endif8895: + %t589 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t589, ptr %a590 + store { ptr, i64, i64 } { ptr @.str.5751, i64 6, i64 0 }, ptr %a591 + %t592 = call i32 @finch_str_eq(ptr %a590, ptr %a591) + %t593 = icmp ne i32 %t592, 0 + br i1 %t593, label %then8901, label %endif8903 +then8901: + %t594 = load ptr, ptr %a1 + %t595 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t594, %S.ast.Node %t595, i64 2) + %t596 = load ptr, ptr %a1 + %t597 = load ptr, ptr %a1 + %t598 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t599 = load { ptr, i64, i64 }, ptr %t598 + %t600 = extractvalue { ptr, i64, i64 } %t599, 1 + %t601 = icmp uge i64 1, %t600 + br i1 %t601, label %range8904, label %inrange8905 +range8904: + call void @finch_panic_index(ptr @.str.5752, i64 5486, i64 1, i64 %t600) + unreachable +inrange8905: + %t602 = extractvalue { ptr, i64, i64 } %t599, 0 + %t603 = getelementptr inbounds %S.ast.Node, ptr %t602, i64 1 + %t604 = load %S.ast.Node, ptr %t603 + %t605 = call %S.gen.Val @finch.gen.expr(ptr %t597, %S.ast.Node %t604) + %t606 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5753, i64 3, i64 0 }) + %t607 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t608 = load { ptr, i64, i64 }, ptr %t607 + %t609 = extractvalue { ptr, i64, i64 } %t608, 1 + %t610 = icmp uge i64 1, %t609 + br i1 %t610, label %range8906, label %inrange8907 +range8906: + call void @finch_panic_index(ptr @.str.5754, i64 5486, i64 1, i64 %t609) + unreachable +inrange8907: + %t611 = extractvalue { ptr, i64, i64 } %t608, 0 + %t612 = getelementptr inbounds %S.ast.Node, ptr %t611, i64 1 + %t613 = load %S.ast.Node, ptr %t612 + %t614 = call %S.gen.Val @finch.gen.coerce(ptr %t596, %S.gen.Val %t605, %S.ast.Type %t606, %S.ast.Node %t613, { ptr, i64, i64 } { ptr @.str.5755, i64 12, i64 0 }) + store %S.gen.Val %t605, ptr %a615 + call void @finch.drop.S_gen_Val(ptr %a615) + store %S.ast.Type %t606, ptr %a616 + call void @finch.drop.S_ast_Type(ptr %a616) + %t617 = extractvalue %S.gen.Val %t614, 0 + store { ptr, i64, i64 } %t617, ptr %a618 + call void @finch_str_copy(ptr %a619, ptr %a618) + %t620 = load { ptr, i64, i64 }, ptr %a619 + store %S.gen.Val %t614, ptr %a621 + call void @finch.drop.S_gen_Val(ptr %a621) + store { ptr, i64, i64 } %t620, ptr %a622 + %t623 = load ptr, ptr %a1 + %t624 = load ptr, ptr %a1 + %t625 = load ptr, ptr %a1 + %t626 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t627 = load { ptr, i64, i64 }, ptr %t626 + %t628 = extractvalue { ptr, i64, i64 } %t627, 1 + %t629 = icmp uge i64 2, %t628 + br i1 %t629, label %range8908, label %inrange8909 +range8908: + call void @finch_panic_index(ptr @.str.5756, i64 5487, i64 2, i64 %t628) + unreachable +inrange8909: + %t630 = extractvalue { ptr, i64, i64 } %t627, 0 + %t631 = getelementptr inbounds %S.ast.Node, ptr %t630, i64 2 + %t632 = load %S.ast.Node, ptr %t631 + %t633 = load %S.ast.Type, ptr %a15 + %t634 = call %S.gen.Val @finch.gen.exprWant(ptr %t625, %S.ast.Node %t632, %S.ast.Type %t633) + %t635 = load %S.ast.Type, ptr %a15 + %t636 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t637 = load { ptr, i64, i64 }, ptr %t636 + %t638 = extractvalue { ptr, i64, i64 } %t637, 1 + %t639 = icmp uge i64 2, %t638 + br i1 %t639, label %range8910, label %inrange8911 +range8910: + call void @finch_panic_index(ptr @.str.5757, i64 5487, i64 2, i64 %t638) + unreachable +inrange8911: + %t640 = extractvalue { ptr, i64, i64 } %t637, 0 + %t641 = getelementptr inbounds %S.ast.Node, ptr %t640, i64 2 + %t642 = load %S.ast.Node, ptr %t641 + %t643 = call %S.gen.Val @finch.gen.coerce(ptr %t624, %S.gen.Val %t634, %S.ast.Type %t635, %S.ast.Node %t642, { ptr, i64, i64 } { ptr @.str.5758, i64 11, i64 0 }) + store %S.gen.Val %t634, ptr %a644 + call void @finch.drop.S_gen_Val(ptr %a644) + %t645 = call { ptr, i64, i64 } @finch.gen.own(ptr %t623, %S.gen.Val %t643) + store %S.gen.Val %t643, ptr %a646 + call void @finch.drop.S_gen_Val(ptr %a646) + store { ptr, i64, i64 } %t645, ptr %a647 + %t648 = load ptr, ptr %a1 + %t649 = load ptr, ptr %a1 + %t650 = icmp eq ptr %t649, null + br i1 %t650, label %panic8912, label %ok8913 +panic8912: + call void @finch_panic(ptr @.str.5759, i64 5488, ptr @.str.5760) + unreachable +ok8913: + %t651 = getelementptr inbounds %S.gen.Gen, ptr %t649, i32 0, i32 1 + %t652 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t653 = load i64, ptr %t652 + %t654 = load { ptr, i64, i64 }, ptr %t651 + %t655 = extractvalue { ptr, i64, i64 } %t654, 1 + %t656 = icmp uge i64 %t653, %t655 + br i1 %t656, label %range8914, label %inrange8915 +range8914: + call void @finch_panic_index(ptr @.str.5761, i64 5488, i64 %t653, i64 %t655) + unreachable +inrange8915: + %t657 = extractvalue { ptr, i64, i64 } %t654, 0 + %t658 = getelementptr inbounds { ptr, i64, i64 }, ptr %t657, i64 %t653 + %t659 = load { ptr, i64, i64 }, ptr %t658 + %t660 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t648, { ptr, i64, i64 } %t659) + store { ptr, i64, i64 } %t660, ptr %a661 + %t662 = load ptr, ptr %a1 + %t663 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5762, i64 36, i64 0 }, ptr %a665 + store { ptr, i64, i64 } %t663, ptr %a666 + call void @finch_str_concat(ptr %a664, ptr %a665, ptr %a666) + %t667 = load { ptr, i64, i64 }, ptr %a664 + store { ptr, i64, i64 } %t667, ptr %a669 + store { ptr, i64, i64 } { ptr @.str.5763, i64 6, i64 0 }, ptr %a670 + call void @finch_str_concat(ptr %a668, ptr %a669, ptr %a670) + store { ptr, i64, i64 } %t667, ptr %a671 + call void @finch_str_drop(ptr %a671) + %t672 = load { ptr, i64, i64 }, ptr %a668 + %t673 = load { ptr, i64, i64 }, ptr %a622 + store { ptr, i64, i64 } %t672, ptr %a675 + store { ptr, i64, i64 } %t673, ptr %a676 + call void @finch_str_concat(ptr %a674, ptr %a675, ptr %a676) + store { ptr, i64, i64 } %t672, ptr %a677 + call void @finch_str_drop(ptr %a677) + %t678 = load { ptr, i64, i64 }, ptr %a674 + store { ptr, i64, i64 } %t678, ptr %a680 + store { ptr, i64, i64 } { ptr @.str.5764, i64 6, i64 0 }, ptr %a681 + call void @finch_str_concat(ptr %a679, ptr %a680, ptr %a681) + store { ptr, i64, i64 } %t678, ptr %a682 + call void @finch_str_drop(ptr %a682) + %t683 = load { ptr, i64, i64 }, ptr %a679 + %t684 = load ptr, ptr %a1 + %t685 = load %S.ast.Type, ptr %a15 + %t686 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t684, %S.ast.Type %t685) + store { ptr, i64, i64 } %t683, ptr %a688 + store { ptr, i64, i64 } %t686, ptr %a689 + call void @finch_str_concat(ptr %a687, ptr %a688, ptr %a689) + store { ptr, i64, i64 } %t683, ptr %a690 + call void @finch_str_drop(ptr %a690) + store { ptr, i64, i64 } %t686, ptr %a691 + call void @finch_str_drop(ptr %a691) + %t692 = load { ptr, i64, i64 }, ptr %a687 + store { ptr, i64, i64 } %t692, ptr %a694 + store { ptr, i64, i64 } { ptr @.str.5765, i64 6, i64 0 }, ptr %a695 + call void @finch_str_concat(ptr %a693, ptr %a694, ptr %a695) + store { ptr, i64, i64 } %t692, ptr %a696 + call void @finch_str_drop(ptr %a696) + %t697 = load { ptr, i64, i64 }, ptr %a693 + %t698 = load { ptr, i64, i64 }, ptr %a661 + store { ptr, i64, i64 } %t697, ptr %a700 + store { ptr, i64, i64 } %t698, ptr %a701 + call void @finch_str_concat(ptr %a699, ptr %a700, ptr %a701) + store { ptr, i64, i64 } %t697, ptr %a702 + call void @finch_str_drop(ptr %a702) + %t703 = load { ptr, i64, i64 }, ptr %a699 + store { ptr, i64, i64 } %t703, ptr %a705 + store { ptr, i64, i64 } { ptr @.str.5766, i64 6, i64 0 }, ptr %a706 + call void @finch_str_concat(ptr %a704, ptr %a705, ptr %a706) + store { ptr, i64, i64 } %t703, ptr %a707 + call void @finch_str_drop(ptr %a707) + %t708 = load { ptr, i64, i64 }, ptr %a704 + %t709 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t710 = load i64, ptr %t709 + call void @finch_str_from_int(ptr %a711, i64 %t710) + %t712 = load { ptr, i64, i64 }, ptr %a711 + store { ptr, i64, i64 } %t708, ptr %a714 + store { ptr, i64, i64 } %t712, ptr %a715 + call void @finch_str_concat(ptr %a713, ptr %a714, ptr %a715) + store { ptr, i64, i64 } %t708, ptr %a716 + call void @finch_str_drop(ptr %a716) + store { ptr, i64, i64 } %t712, ptr %a717 + call void @finch_str_drop(ptr %a717) + %t718 = load { ptr, i64, i64 }, ptr %a713 + store { ptr, i64, i64 } %t718, ptr %a720 + store { ptr, i64, i64 } { ptr @.str.5767, i64 1, i64 0 }, ptr %a721 + call void @finch_str_concat(ptr %a719, ptr %a720, ptr %a721) + store { ptr, i64, i64 } %t718, ptr %a722 + call void @finch_str_drop(ptr %a722) + %t723 = load { ptr, i64, i64 }, ptr %a719 + call void @finch.gen.emit(ptr %t662, { ptr, i64, i64 } %t723) + store { ptr, i64, i64 } %t723, ptr %a724 + call void @finch_str_drop(ptr %a724) + %t725 = load ptr, ptr %a1 + %t726 = load { ptr, i64, i64 }, ptr %a3 + %t727 = call { ptr, i64, i64 } @finch.gen.load(ptr %t725, { ptr, i64, i64 } { ptr @.str.5768, i64 3, i64 0 }, { ptr, i64, i64 } %t726) + store { ptr, i64, i64 } %t727, ptr %a728 + %t729 = load ptr, ptr %a1 + %t730 = load { ptr, i64, i64 }, ptr %a19 + %t731 = load { ptr, i64, i64 }, ptr %a647 + %t732 = load ptr, ptr %a1 + %t733 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5769, i64 23, i64 0 }, ptr %a735 + store { ptr, i64, i64 } %t733, ptr %a736 + call void @finch_str_concat(ptr %a734, ptr %a735, ptr %a736) + %t737 = load { ptr, i64, i64 }, ptr %a734 + store { ptr, i64, i64 } %t737, ptr %a739 + store { ptr, i64, i64 } { ptr @.str.5770, i64 6, i64 0 }, ptr %a740 + call void @finch_str_concat(ptr %a738, ptr %a739, ptr %a740) + store { ptr, i64, i64 } %t737, ptr %a741 + call void @finch_str_drop(ptr %a741) + %t742 = load { ptr, i64, i64 }, ptr %a738 + %t743 = load { ptr, i64, i64 }, ptr %a728 + store { ptr, i64, i64 } %t742, ptr %a745 + store { ptr, i64, i64 } %t743, ptr %a746 + call void @finch_str_concat(ptr %a744, ptr %a745, ptr %a746) + store { ptr, i64, i64 } %t742, ptr %a747 + call void @finch_str_drop(ptr %a747) + %t748 = load { ptr, i64, i64 }, ptr %a744 + store { ptr, i64, i64 } %t748, ptr %a750 + store { ptr, i64, i64 } { ptr @.str.5771, i64 6, i64 0 }, ptr %a751 + call void @finch_str_concat(ptr %a749, ptr %a750, ptr %a751) + store { ptr, i64, i64 } %t748, ptr %a752 + call void @finch_str_drop(ptr %a752) + %t753 = load { ptr, i64, i64 }, ptr %a749 + %t754 = load { ptr, i64, i64 }, ptr %a622 + store { ptr, i64, i64 } %t753, ptr %a756 + store { ptr, i64, i64 } %t754, ptr %a757 + call void @finch_str_concat(ptr %a755, ptr %a756, ptr %a757) + store { ptr, i64, i64 } %t753, ptr %a758 + call void @finch_str_drop(ptr %a758) + %t759 = load { ptr, i64, i64 }, ptr %a755 + %t760 = call { ptr, i64, i64 } @finch.gen.op(ptr %t732, { ptr, i64, i64 } %t759) + store { ptr, i64, i64 } %t759, ptr %a761 + call void @finch_str_drop(ptr %a761) + call void @finch.gen.store(ptr %t729, { ptr, i64, i64 } %t730, { ptr, i64, i64 } %t731, { ptr, i64, i64 } %t760) + store { ptr, i64, i64 } %t760, ptr %a762 + call void @finch_str_drop(ptr %a762) + %t763 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5772, i64 4, i64 0 }) + %t764 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t763, 1 + call void @finch_str_drop(ptr %a728) + call void @finch_str_drop(ptr %a661) + call void @finch_str_drop(ptr %a647) + call void @finch_str_drop(ptr %a622) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t764 +endif8903: + %t765 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t765, ptr %a766 + store { ptr, i64, i64 } { ptr @.str.5773, i64 6, i64 0 }, ptr %a767 + %t768 = call i32 @finch_str_eq(ptr %a766, ptr %a767) + %t769 = icmp ne i32 %t768, 0 + br i1 %t769, label %then8916, label %endif8918 +then8916: + %t770 = load ptr, ptr %a1 + %t771 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t770, %S.ast.Node %t771, i64 1) + %t772 = load ptr, ptr %a1 + %t773 = load ptr, ptr %a1 + %t774 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t775 = load { ptr, i64, i64 }, ptr %t774 + %t776 = extractvalue { ptr, i64, i64 } %t775, 1 + %t777 = icmp uge i64 1, %t776 + br i1 %t777, label %range8919, label %inrange8920 +range8919: + call void @finch_panic_index(ptr @.str.5774, i64 5496, i64 1, i64 %t776) + unreachable +inrange8920: + %t778 = extractvalue { ptr, i64, i64 } %t775, 0 + %t779 = getelementptr inbounds %S.ast.Node, ptr %t778, i64 1 + %t780 = load %S.ast.Node, ptr %t779 + %t781 = call %S.gen.Val @finch.gen.expr(ptr %t773, %S.ast.Node %t780) + %t782 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5775, i64 3, i64 0 }) + %t783 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t784 = load { ptr, i64, i64 }, ptr %t783 + %t785 = extractvalue { ptr, i64, i64 } %t784, 1 + %t786 = icmp uge i64 1, %t785 + br i1 %t786, label %range8921, label %inrange8922 +range8921: + call void @finch_panic_index(ptr @.str.5776, i64 5496, i64 1, i64 %t785) + unreachable +inrange8922: + %t787 = extractvalue { ptr, i64, i64 } %t784, 0 + %t788 = getelementptr inbounds %S.ast.Node, ptr %t787, i64 1 + %t789 = load %S.ast.Node, ptr %t788 + %t790 = call %S.gen.Val @finch.gen.coerce(ptr %t772, %S.gen.Val %t781, %S.ast.Type %t782, %S.ast.Node %t789, { ptr, i64, i64 } { ptr @.str.5777, i64 12, i64 0 }) + store %S.gen.Val %t781, ptr %a791 + call void @finch.drop.S_gen_Val(ptr %a791) + store %S.ast.Type %t782, ptr %a792 + call void @finch.drop.S_ast_Type(ptr %a792) + %t793 = extractvalue %S.gen.Val %t790, 0 + store { ptr, i64, i64 } %t793, ptr %a794 + call void @finch_str_copy(ptr %a795, ptr %a794) + %t796 = load { ptr, i64, i64 }, ptr %a795 + store %S.gen.Val %t790, ptr %a797 + call void @finch.drop.S_gen_Val(ptr %a797) + store { ptr, i64, i64 } %t796, ptr %a798 + %t799 = load ptr, ptr %a1 + %t800 = load { ptr, i64, i64 }, ptr %a798 + %t801 = load ptr, ptr %a1 + %t802 = load { ptr, i64, i64 }, ptr %a39 + %t803 = call { ptr, i64, i64 } @finch.gen.load(ptr %t801, { ptr, i64, i64 } { ptr @.str.5778, i64 3, i64 0 }, { ptr, i64, i64 } %t802) + %t804 = load %S.ast.Node, ptr %a2 + call void @finch.gen.boundsCheck(ptr %t799, { ptr, i64, i64 } %t800, { ptr, i64, i64 } %t803, %S.ast.Node %t804) + store { ptr, i64, i64 } %t803, ptr %a805 + call void @finch_str_drop(ptr %a805) + %t806 = load ptr, ptr %a1 + %t807 = load { ptr, i64, i64 }, ptr %a3 + %t808 = call { ptr, i64, i64 } @finch.gen.load(ptr %t806, { ptr, i64, i64 } { ptr @.str.5779, i64 3, i64 0 }, { ptr, i64, i64 } %t807) + store { ptr, i64, i64 } %t808, ptr %a809 + %t810 = load ptr, ptr %a1 + %t811 = load { ptr, i64, i64 }, ptr %a19 + %t812 = load ptr, ptr %a1 + %t813 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5780, i64 23, i64 0 }, ptr %a815 + store { ptr, i64, i64 } %t813, ptr %a816 + call void @finch_str_concat(ptr %a814, ptr %a815, ptr %a816) + %t817 = load { ptr, i64, i64 }, ptr %a814 + store { ptr, i64, i64 } %t817, ptr %a819 + store { ptr, i64, i64 } { ptr @.str.5781, i64 6, i64 0 }, ptr %a820 + call void @finch_str_concat(ptr %a818, ptr %a819, ptr %a820) + store { ptr, i64, i64 } %t817, ptr %a821 + call void @finch_str_drop(ptr %a821) + %t822 = load { ptr, i64, i64 }, ptr %a818 + %t823 = load { ptr, i64, i64 }, ptr %a809 + store { ptr, i64, i64 } %t822, ptr %a825 + store { ptr, i64, i64 } %t823, ptr %a826 + call void @finch_str_concat(ptr %a824, ptr %a825, ptr %a826) + store { ptr, i64, i64 } %t822, ptr %a827 + call void @finch_str_drop(ptr %a827) + %t828 = load { ptr, i64, i64 }, ptr %a824 + store { ptr, i64, i64 } %t828, ptr %a830 + store { ptr, i64, i64 } { ptr @.str.5782, i64 6, i64 0 }, ptr %a831 + call void @finch_str_concat(ptr %a829, ptr %a830, ptr %a831) + store { ptr, i64, i64 } %t828, ptr %a832 + call void @finch_str_drop(ptr %a832) + %t833 = load { ptr, i64, i64 }, ptr %a829 + %t834 = load { ptr, i64, i64 }, ptr %a798 + store { ptr, i64, i64 } %t833, ptr %a836 + store { ptr, i64, i64 } %t834, ptr %a837 + call void @finch_str_concat(ptr %a835, ptr %a836, ptr %a837) + store { ptr, i64, i64 } %t833, ptr %a838 + call void @finch_str_drop(ptr %a838) + %t839 = load { ptr, i64, i64 }, ptr %a835 + %t840 = call { ptr, i64, i64 } @finch.gen.op(ptr %t812, { ptr, i64, i64 } %t839) + store { ptr, i64, i64 } %t839, ptr %a841 + call void @finch_str_drop(ptr %a841) + %t842 = call { ptr, i64, i64 } @finch.gen.load(ptr %t810, { ptr, i64, i64 } %t811, { ptr, i64, i64 } %t840) + store { ptr, i64, i64 } %t840, ptr %a843 + call void @finch_str_drop(ptr %a843) + store { ptr, i64, i64 } %t842, ptr %a844 + %t845 = load ptr, ptr %a1 + %t846 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5783, i64 36, i64 0 }, ptr %a848 + store { ptr, i64, i64 } %t846, ptr %a849 + call void @finch_str_concat(ptr %a847, ptr %a848, ptr %a849) + %t850 = load { ptr, i64, i64 }, ptr %a847 + store { ptr, i64, i64 } %t850, ptr %a852 + store { ptr, i64, i64 } { ptr @.str.5784, i64 6, i64 0 }, ptr %a853 + call void @finch_str_concat(ptr %a851, ptr %a852, ptr %a853) + store { ptr, i64, i64 } %t850, ptr %a854 + call void @finch_str_drop(ptr %a854) + %t855 = load { ptr, i64, i64 }, ptr %a851 + %t856 = load { ptr, i64, i64 }, ptr %a798 + store { ptr, i64, i64 } %t855, ptr %a858 + store { ptr, i64, i64 } %t856, ptr %a859 + call void @finch_str_concat(ptr %a857, ptr %a858, ptr %a859) + store { ptr, i64, i64 } %t855, ptr %a860 + call void @finch_str_drop(ptr %a860) + %t861 = load { ptr, i64, i64 }, ptr %a857 + store { ptr, i64, i64 } %t861, ptr %a863 + store { ptr, i64, i64 } { ptr @.str.5785, i64 6, i64 0 }, ptr %a864 + call void @finch_str_concat(ptr %a862, ptr %a863, ptr %a864) + store { ptr, i64, i64 } %t861, ptr %a865 + call void @finch_str_drop(ptr %a865) + %t866 = load { ptr, i64, i64 }, ptr %a862 + %t867 = load ptr, ptr %a1 + %t868 = load %S.ast.Type, ptr %a15 + %t869 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t867, %S.ast.Type %t868) + store { ptr, i64, i64 } %t866, ptr %a871 + store { ptr, i64, i64 } %t869, ptr %a872 + call void @finch_str_concat(ptr %a870, ptr %a871, ptr %a872) + store { ptr, i64, i64 } %t866, ptr %a873 + call void @finch_str_drop(ptr %a873) + store { ptr, i64, i64 } %t869, ptr %a874 + call void @finch_str_drop(ptr %a874) + %t875 = load { ptr, i64, i64 }, ptr %a870 + store { ptr, i64, i64 } %t875, ptr %a877 + store { ptr, i64, i64 } { ptr @.str.5786, i64 1, i64 0 }, ptr %a878 + call void @finch_str_concat(ptr %a876, ptr %a877, ptr %a878) + store { ptr, i64, i64 } %t875, ptr %a879 + call void @finch_str_drop(ptr %a879) + %t880 = load { ptr, i64, i64 }, ptr %a876 + call void @finch.gen.emit(ptr %t845, { ptr, i64, i64 } %t880) + store { ptr, i64, i64 } %t880, ptr %a881 + call void @finch_str_drop(ptr %a881) + %t882 = load { ptr, i64, i64 }, ptr %a844 + store { ptr, i64, i64 } %t882, ptr %a883 + call void @finch_str_copy(ptr %a884, ptr %a883) + %t885 = load { ptr, i64, i64 }, ptr %a884 + %t886 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t885, 0 + %t887 = load %S.ast.Type, ptr %a15 + store %S.ast.Type %t887, ptr %a888 + call void @finch.copy.S_ast_Type(ptr %a889, ptr %a888) + %t890 = load %S.ast.Type, ptr %a889 + %t891 = insertvalue %S.gen.Val %t886, %S.ast.Type %t890, 1 + %t892 = load ptr, ptr %a1 + %t893 = load %S.ast.Type, ptr %a15 + %t894 = call i1 @finch.gen.owning(ptr %t892, %S.ast.Type %t893) + %t895 = insertvalue %S.gen.Val %t891, i1 %t894, 2 + call void @finch_str_drop(ptr %a844) + call void @finch_str_drop(ptr %a809) + call void @finch_str_drop(ptr %a798) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t895 +endif8918: + %t896 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t896, ptr %a897 + store { ptr, i64, i64 } { ptr @.str.5787, i64 6, i64 0 }, ptr %a898 + %t899 = call i32 @finch_str_eq(ptr %a897, ptr %a898) + %t900 = icmp ne i32 %t899, 0 + br i1 %t900, label %then8923, label %endif8925 +then8923: + %t901 = load ptr, ptr %a1 + %t902 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t901, %S.ast.Node %t902, i64 1) + %t903 = load ptr, ptr %a1 + %t904 = load ptr, ptr %a1 + %t905 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t906 = load { ptr, i64, i64 }, ptr %t905 + %t907 = extractvalue { ptr, i64, i64 } %t906, 1 + %t908 = icmp uge i64 1, %t907 + br i1 %t908, label %range8926, label %inrange8927 +range8926: + call void @finch_panic_index(ptr @.str.5788, i64 5505, i64 1, i64 %t907) + unreachable +inrange8927: + %t909 = extractvalue { ptr, i64, i64 } %t906, 0 + %t910 = getelementptr inbounds %S.ast.Node, ptr %t909, i64 1 + %t911 = load %S.ast.Node, ptr %t910 + %t912 = call %S.gen.Val @finch.gen.expr(ptr %t904, %S.ast.Node %t911) + %t913 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5789, i64 3, i64 0 }) + %t914 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t915 = load { ptr, i64, i64 }, ptr %t914 + %t916 = extractvalue { ptr, i64, i64 } %t915, 1 + %t917 = icmp uge i64 1, %t916 + br i1 %t917, label %range8928, label %inrange8929 +range8928: + call void @finch_panic_index(ptr @.str.5790, i64 5505, i64 1, i64 %t916) + unreachable +inrange8929: + %t918 = extractvalue { ptr, i64, i64 } %t915, 0 + %t919 = getelementptr inbounds %S.ast.Node, ptr %t918, i64 1 + %t920 = load %S.ast.Node, ptr %t919 + %t921 = call %S.gen.Val @finch.gen.coerce(ptr %t903, %S.gen.Val %t912, %S.ast.Type %t913, %S.ast.Node %t920, { ptr, i64, i64 } { ptr @.str.5791, i64 14, i64 0 }) + store %S.gen.Val %t912, ptr %a922 + call void @finch.drop.S_gen_Val(ptr %a922) + store %S.ast.Type %t913, ptr %a923 + call void @finch.drop.S_ast_Type(ptr %a923) + %t924 = extractvalue %S.gen.Val %t921, 0 + store { ptr, i64, i64 } %t924, ptr %a925 + call void @finch_str_copy(ptr %a926, ptr %a925) + %t927 = load { ptr, i64, i64 }, ptr %a926 + store %S.gen.Val %t921, ptr %a928 + call void @finch.drop.S_gen_Val(ptr %a928) + store { ptr, i64, i64 } %t927, ptr %a929 + %t930 = load ptr, ptr %a1 + %t931 = load { ptr, i64, i64 }, ptr %a3 + %t932 = load %S.ast.Type, ptr %a4 + %t933 = load { ptr, i64, i64 }, ptr %a929 + call void @finch.gen.dropFrom(ptr %t930, { ptr, i64, i64 } %t931, %S.ast.Type %t932, { ptr, i64, i64 } %t933) + %t934 = load ptr, ptr %a1 + %t935 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5792, i64 32, i64 0 }, ptr %a937 + store { ptr, i64, i64 } %t935, ptr %a938 + call void @finch_str_concat(ptr %a936, ptr %a937, ptr %a938) + %t939 = load { ptr, i64, i64 }, ptr %a936 + store { ptr, i64, i64 } %t939, ptr %a941 + store { ptr, i64, i64 } { ptr @.str.5793, i64 6, i64 0 }, ptr %a942 + call void @finch_str_concat(ptr %a940, ptr %a941, ptr %a942) + store { ptr, i64, i64 } %t939, ptr %a943 + call void @finch_str_drop(ptr %a943) + %t944 = load { ptr, i64, i64 }, ptr %a940 + %t945 = load { ptr, i64, i64 }, ptr %a929 + store { ptr, i64, i64 } %t944, ptr %a947 + store { ptr, i64, i64 } %t945, ptr %a948 + call void @finch_str_concat(ptr %a946, ptr %a947, ptr %a948) + store { ptr, i64, i64 } %t944, ptr %a949 + call void @finch_str_drop(ptr %a949) + %t950 = load { ptr, i64, i64 }, ptr %a946 + store { ptr, i64, i64 } %t950, ptr %a952 + store { ptr, i64, i64 } { ptr @.str.5794, i64 6, i64 0 }, ptr %a953 + call void @finch_str_concat(ptr %a951, ptr %a952, ptr %a953) + store { ptr, i64, i64 } %t950, ptr %a954 + call void @finch_str_drop(ptr %a954) + %t955 = load { ptr, i64, i64 }, ptr %a951 + %t956 = load ptr, ptr %a1 + %t957 = load %S.ast.Type, ptr %a15 + %t958 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t956, %S.ast.Type %t957) + store { ptr, i64, i64 } %t955, ptr %a960 + store { ptr, i64, i64 } %t958, ptr %a961 + call void @finch_str_concat(ptr %a959, ptr %a960, ptr %a961) + store { ptr, i64, i64 } %t955, ptr %a962 + call void @finch_str_drop(ptr %a962) + store { ptr, i64, i64 } %t958, ptr %a963 + call void @finch_str_drop(ptr %a963) + %t964 = load { ptr, i64, i64 }, ptr %a959 + store { ptr, i64, i64 } %t964, ptr %a966 + store { ptr, i64, i64 } { ptr @.str.5795, i64 1, i64 0 }, ptr %a967 + call void @finch_str_concat(ptr %a965, ptr %a966, ptr %a967) + store { ptr, i64, i64 } %t964, ptr %a968 + call void @finch_str_drop(ptr %a968) + %t969 = load { ptr, i64, i64 }, ptr %a965 + call void @finch.gen.emit(ptr %t934, { ptr, i64, i64 } %t969) + store { ptr, i64, i64 } %t969, ptr %a970 + call void @finch_str_drop(ptr %a970) + %t971 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5796, i64 4, i64 0 }) + %t972 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t971, 1 + call void @finch_str_drop(ptr %a929) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t972 +endif8925: + %t973 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t973, ptr %a974 + store { ptr, i64, i64 } { ptr @.str.5797, i64 7, i64 0 }, ptr %a975 + %t976 = call i32 @finch_str_eq(ptr %a974, ptr %a975) + %t977 = icmp ne i32 %t976, 0 + br i1 %t977, label %then8930, label %endif8932 +then8930: + %t978 = load ptr, ptr %a1 + %t979 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t978, %S.ast.Node %t979, i64 0) + %t980 = load ptr, ptr %a1 + %t981 = load { ptr, i64, i64 }, ptr %a39 + %t982 = call { ptr, i64, i64 } @finch.gen.load(ptr %t980, { ptr, i64, i64 } { ptr @.str.5798, i64 3, i64 0 }, { ptr, i64, i64 } %t981) + store { ptr, i64, i64 } %t982, ptr %a983 + %t984 = load ptr, ptr %a1 + %t985 = load { ptr, i64, i64 }, ptr %a3 + %t986 = call { ptr, i64, i64 } @finch.gen.load(ptr %t984, { ptr, i64, i64 } { ptr @.str.5799, i64 3, i64 0 }, { ptr, i64, i64 } %t985) + store { ptr, i64, i64 } %t986, ptr %a987 + %t988 = load ptr, ptr %a1 + %t989 = load { ptr, i64, i64 }, ptr %a983 + store { ptr, i64, i64 } { ptr @.str.5800, i64 9, i64 0 }, ptr %a991 + store { ptr, i64, i64 } %t989, ptr %a992 + call void @finch_str_concat(ptr %a990, ptr %a991, ptr %a992) + %t993 = load { ptr, i64, i64 }, ptr %a990 + store { ptr, i64, i64 } %t993, ptr %a995 + store { ptr, i64, i64 } { ptr @.str.5801, i64 3, i64 0 }, ptr %a996 + call void @finch_str_concat(ptr %a994, ptr %a995, ptr %a996) + store { ptr, i64, i64 } %t993, ptr %a997 + call void @finch_str_drop(ptr %a997) + %t998 = load { ptr, i64, i64 }, ptr %a994 + %t999 = call { ptr, i64, i64 } @finch.gen.op(ptr %t988, { ptr, i64, i64 } %t998) + store { ptr, i64, i64 } %t998, ptr %a1000 + call void @finch_str_drop(ptr %a1000) + store { ptr, i64, i64 } %t999, ptr %a1001 + %t1002 = load ptr, ptr %a1 + %t1003 = load { ptr, i64, i64 }, ptr %a1001 + %t1004 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1002, { ptr, i64, i64 } %t1003) + store { ptr, i64, i64 } %t1004, ptr %a1005 + %t1006 = load ptr, ptr %a1 + %t1007 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5802, i64 23, i64 0 }, ptr %a1009 + store { ptr, i64, i64 } %t1007, ptr %a1010 + call void @finch_str_concat(ptr %a1008, ptr %a1009, ptr %a1010) + %t1011 = load { ptr, i64, i64 }, ptr %a1008 + store { ptr, i64, i64 } %t1011, ptr %a1013 + store { ptr, i64, i64 } { ptr @.str.5803, i64 6, i64 0 }, ptr %a1014 + call void @finch_str_concat(ptr %a1012, ptr %a1013, ptr %a1014) + store { ptr, i64, i64 } %t1011, ptr %a1015 + call void @finch_str_drop(ptr %a1015) + %t1016 = load { ptr, i64, i64 }, ptr %a1012 + %t1017 = load { ptr, i64, i64 }, ptr %a987 + store { ptr, i64, i64 } %t1016, ptr %a1019 + store { ptr, i64, i64 } %t1017, ptr %a1020 + call void @finch_str_concat(ptr %a1018, ptr %a1019, ptr %a1020) + store { ptr, i64, i64 } %t1016, ptr %a1021 + call void @finch_str_drop(ptr %a1021) + %t1022 = load { ptr, i64, i64 }, ptr %a1018 + store { ptr, i64, i64 } %t1022, ptr %a1024 + store { ptr, i64, i64 } { ptr @.str.5804, i64 6, i64 0 }, ptr %a1025 + call void @finch_str_concat(ptr %a1023, ptr %a1024, ptr %a1025) + store { ptr, i64, i64 } %t1022, ptr %a1026 + call void @finch_str_drop(ptr %a1026) + %t1027 = load { ptr, i64, i64 }, ptr %a1023 + %t1028 = load { ptr, i64, i64 }, ptr %a1005 + %t1029 = extractvalue { ptr, i64, i64 } %t1028, 1 + %t1030 = icmp uge i64 3, %t1029 + br i1 %t1030, label %range8933, label %inrange8934 +range8933: + call void @finch_panic_index(ptr @.str.5805, i64 5516, i64 3, i64 %t1029) + unreachable +inrange8934: + %t1031 = extractvalue { ptr, i64, i64 } %t1028, 0 + %t1032 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1031, i64 3 + %t1033 = load { ptr, i64, i64 }, ptr %t1032 + store { ptr, i64, i64 } %t1027, ptr %a1035 + store { ptr, i64, i64 } %t1033, ptr %a1036 + call void @finch_str_concat(ptr %a1034, ptr %a1035, ptr %a1036) + store { ptr, i64, i64 } %t1027, ptr %a1037 + call void @finch_str_drop(ptr %a1037) + %t1038 = load { ptr, i64, i64 }, ptr %a1034 + %t1039 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1006, { ptr, i64, i64 } %t1038) + store { ptr, i64, i64 } %t1038, ptr %a1040 + call void @finch_str_drop(ptr %a1040) + store { ptr, i64, i64 } %t1039, ptr %a1041 + %t1042 = load ptr, ptr %a1 + %t1043 = load ptr, ptr %a1 + %t1044 = load { ptr, i64, i64 }, ptr %a983 + store { ptr, i64, i64 } { ptr @.str.5807, i64 8, i64 0 }, ptr %a1046 + store { ptr, i64, i64 } %t1044, ptr %a1047 + call void @finch_str_concat(ptr %a1045, ptr %a1046, ptr %a1047) + %t1048 = load { ptr, i64, i64 }, ptr %a1045 + store { ptr, i64, i64 } %t1048, ptr %a1050 + store { ptr, i64, i64 } { ptr @.str.5808, i64 3, i64 0 }, ptr %a1051 + call void @finch_str_concat(ptr %a1049, ptr %a1050, ptr %a1051) + store { ptr, i64, i64 } %t1048, ptr %a1052 + call void @finch_str_drop(ptr %a1052) + %t1053 = load { ptr, i64, i64 }, ptr %a1049 + %t1054 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1043, { ptr, i64, i64 } %t1053) + store { ptr, i64, i64 } %t1053, ptr %a1055 + call void @finch_str_drop(ptr %a1055) + store { ptr, i64, i64 } { ptr @.str.5806, i64 8, i64 0 }, ptr %a1057 + store { ptr, i64, i64 } %t1054, ptr %a1058 + call void @finch_str_concat(ptr %a1056, ptr %a1057, ptr %a1058) + store { ptr, i64, i64 } %t1054, ptr %a1059 + call void @finch_str_drop(ptr %a1059) + %t1060 = load { ptr, i64, i64 }, ptr %a1056 + store { ptr, i64, i64 } %t1060, ptr %a1062 + store { ptr, i64, i64 } { ptr @.str.5809, i64 2, i64 0 }, ptr %a1063 + call void @finch_str_concat(ptr %a1061, ptr %a1062, ptr %a1063) + store { ptr, i64, i64 } %t1060, ptr %a1064 + call void @finch_str_drop(ptr %a1064) + %t1065 = load { ptr, i64, i64 }, ptr %a1061 + %t1066 = load { ptr, i64, i64 }, ptr %a1005 + %t1067 = extractvalue { ptr, i64, i64 } %t1066, 1 + %t1068 = icmp uge i64 3, %t1067 + br i1 %t1068, label %range8935, label %inrange8936 +range8935: + call void @finch_panic_index(ptr @.str.5810, i64 5517, i64 3, i64 %t1067) + unreachable +inrange8936: + %t1069 = extractvalue { ptr, i64, i64 } %t1066, 0 + %t1070 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1069, i64 3 + %t1071 = load { ptr, i64, i64 }, ptr %t1070 + store { ptr, i64, i64 } %t1065, ptr %a1073 + store { ptr, i64, i64 } %t1071, ptr %a1074 + call void @finch_str_concat(ptr %a1072, ptr %a1073, ptr %a1074) + store { ptr, i64, i64 } %t1065, ptr %a1075 + call void @finch_str_drop(ptr %a1075) + %t1076 = load { ptr, i64, i64 }, ptr %a1072 + %t1077 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1042, { ptr, i64, i64 } %t1076) + store { ptr, i64, i64 } %t1076, ptr %a1078 + call void @finch_str_drop(ptr %a1078) + store { ptr, i64, i64 } %t1077, ptr %a1079 + %t1080 = load ptr, ptr %a1 + %t1081 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5811, i64 23, i64 0 }, ptr %a1083 + store { ptr, i64, i64 } %t1081, ptr %a1084 + call void @finch_str_concat(ptr %a1082, ptr %a1083, ptr %a1084) + %t1085 = load { ptr, i64, i64 }, ptr %a1082 + store { ptr, i64, i64 } %t1085, ptr %a1087 + store { ptr, i64, i64 } { ptr @.str.5812, i64 6, i64 0 }, ptr %a1088 + call void @finch_str_concat(ptr %a1086, ptr %a1087, ptr %a1088) + store { ptr, i64, i64 } %t1085, ptr %a1089 + call void @finch_str_drop(ptr %a1089) + %t1090 = load { ptr, i64, i64 }, ptr %a1086 + %t1091 = load { ptr, i64, i64 }, ptr %a987 + store { ptr, i64, i64 } %t1090, ptr %a1093 + store { ptr, i64, i64 } %t1091, ptr %a1094 + call void @finch_str_concat(ptr %a1092, ptr %a1093, ptr %a1094) + store { ptr, i64, i64 } %t1090, ptr %a1095 + call void @finch_str_drop(ptr %a1095) + %t1096 = load { ptr, i64, i64 }, ptr %a1092 + store { ptr, i64, i64 } %t1096, ptr %a1098 + store { ptr, i64, i64 } { ptr @.str.5813, i64 6, i64 0 }, ptr %a1099 + call void @finch_str_concat(ptr %a1097, ptr %a1098, ptr %a1099) + store { ptr, i64, i64 } %t1096, ptr %a1100 + call void @finch_str_drop(ptr %a1100) + %t1101 = load { ptr, i64, i64 }, ptr %a1097 + %t1102 = load { ptr, i64, i64 }, ptr %a1079 + store { ptr, i64, i64 } %t1101, ptr %a1104 + store { ptr, i64, i64 } %t1102, ptr %a1105 + call void @finch_str_concat(ptr %a1103, ptr %a1104, ptr %a1105) + store { ptr, i64, i64 } %t1101, ptr %a1106 + call void @finch_str_drop(ptr %a1106) + %t1107 = load { ptr, i64, i64 }, ptr %a1103 + %t1108 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1080, { ptr, i64, i64 } %t1107) + store { ptr, i64, i64 } %t1107, ptr %a1109 + call void @finch_str_drop(ptr %a1109) + store { ptr, i64, i64 } %t1108, ptr %a1110 + %t1111 = load ptr, ptr %a1 + %t1112 = load { ptr, i64, i64 }, ptr %a19 + %t1113 = load { ptr, i64, i64 }, ptr %a1041 + %t1114 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1111, { ptr, i64, i64 } %t1112, { ptr, i64, i64 } %t1113) + store { ptr, i64, i64 } %t1114, ptr %a1115 + %t1116 = load ptr, ptr %a1 + %t1117 = load { ptr, i64, i64 }, ptr %a19 + %t1118 = load { ptr, i64, i64 }, ptr %a1110 + %t1119 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1116, { ptr, i64, i64 } %t1117, { ptr, i64, i64 } %t1118) + store { ptr, i64, i64 } %t1119, ptr %a1120 + %t1121 = load ptr, ptr %a1 + %t1122 = load { ptr, i64, i64 }, ptr %a19 + %t1123 = load { ptr, i64, i64 }, ptr %a1120 + %t1124 = load { ptr, i64, i64 }, ptr %a1041 + call void @finch.gen.store(ptr %t1121, { ptr, i64, i64 } %t1122, { ptr, i64, i64 } %t1123, { ptr, i64, i64 } %t1124) + %t1125 = load ptr, ptr %a1 + %t1126 = load { ptr, i64, i64 }, ptr %a19 + %t1127 = load { ptr, i64, i64 }, ptr %a1115 + %t1128 = load { ptr, i64, i64 }, ptr %a1110 + call void @finch.gen.store(ptr %t1125, { ptr, i64, i64 } %t1126, { ptr, i64, i64 } %t1127, { ptr, i64, i64 } %t1128) + %t1129 = load ptr, ptr %a1 + %t1130 = load { ptr, i64, i64 }, ptr %a1005 + call void @finch.gen.loopEnd(ptr %t1129, { ptr, i64, i64 } %t1130) + %t1131 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5814, i64 4, i64 0 }) + %t1132 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1131, 1 + call void @finch_str_drop(ptr %a1120) + call void @finch_str_drop(ptr %a1115) + call void @finch_str_drop(ptr %a1110) + call void @finch_str_drop(ptr %a1079) + call void @finch_str_drop(ptr %a1041) + call void @finch.drop.arr_str(ptr %a1005) + call void @finch_str_drop(ptr %a1001) + call void @finch_str_drop(ptr %a987) + call void @finch_str_drop(ptr %a983) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t1132 +endif8932: + %t1133 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t1133, ptr %a1134 + store { ptr, i64, i64 } { ptr @.str.5815, i64 5, i64 0 }, ptr %a1135 + %t1136 = call i32 @finch_str_eq(ptr %a1134, ptr %a1135) + %t1137 = icmp ne i32 %t1136, 0 + br i1 %t1137, label %then8937, label %endif8939 +then8937: + %t1138 = load ptr, ptr %a1 + %t1139 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t1138, %S.ast.Node %t1139, i64 2) + %t1140 = load ptr, ptr %a1 + %t1141 = load ptr, ptr %a1 + %t1142 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1143 = load { ptr, i64, i64 }, ptr %t1142 + %t1144 = extractvalue { ptr, i64, i64 } %t1143, 1 + %t1145 = icmp uge i64 1, %t1144 + br i1 %t1145, label %range8940, label %inrange8941 +range8940: + call void @finch_panic_index(ptr @.str.5816, i64 5528, i64 1, i64 %t1144) + unreachable +inrange8941: + %t1146 = extractvalue { ptr, i64, i64 } %t1143, 0 + %t1147 = getelementptr inbounds %S.ast.Node, ptr %t1146, i64 1 + %t1148 = load %S.ast.Node, ptr %t1147 + %t1149 = call %S.gen.Val @finch.gen.expr(ptr %t1141, %S.ast.Node %t1148) + %t1150 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5817, i64 3, i64 0 }) + %t1151 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1152 = load { ptr, i64, i64 }, ptr %t1151 + %t1153 = extractvalue { ptr, i64, i64 } %t1152, 1 + %t1154 = icmp uge i64 1, %t1153 + br i1 %t1154, label %range8942, label %inrange8943 +range8942: + call void @finch_panic_index(ptr @.str.5818, i64 5528, i64 1, i64 %t1153) + unreachable +inrange8943: + %t1155 = extractvalue { ptr, i64, i64 } %t1152, 0 + %t1156 = getelementptr inbounds %S.ast.Node, ptr %t1155, i64 1 + %t1157 = load %S.ast.Node, ptr %t1156 + %t1158 = call %S.gen.Val @finch.gen.coerce(ptr %t1140, %S.gen.Val %t1149, %S.ast.Type %t1150, %S.ast.Node %t1157, { ptr, i64, i64 } { ptr @.str.5819, i64 9, i64 0 }) + store %S.gen.Val %t1149, ptr %a1159 + call void @finch.drop.S_gen_Val(ptr %a1159) + store %S.ast.Type %t1150, ptr %a1160 + call void @finch.drop.S_ast_Type(ptr %a1160) + %t1161 = extractvalue %S.gen.Val %t1158, 0 + store { ptr, i64, i64 } %t1161, ptr %a1162 + call void @finch_str_copy(ptr %a1163, ptr %a1162) + %t1164 = load { ptr, i64, i64 }, ptr %a1163 + store %S.gen.Val %t1158, ptr %a1165 + call void @finch.drop.S_gen_Val(ptr %a1165) + store { ptr, i64, i64 } %t1164, ptr %a1166 + %t1167 = load ptr, ptr %a1 + %t1168 = load ptr, ptr %a1 + %t1169 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1170 = load { ptr, i64, i64 }, ptr %t1169 + %t1171 = extractvalue { ptr, i64, i64 } %t1170, 1 + %t1172 = icmp uge i64 2, %t1171 + br i1 %t1172, label %range8944, label %inrange8945 +range8944: + call void @finch_panic_index(ptr @.str.5820, i64 5529, i64 2, i64 %t1171) + unreachable +inrange8945: + %t1173 = extractvalue { ptr, i64, i64 } %t1170, 0 + %t1174 = getelementptr inbounds %S.ast.Node, ptr %t1173, i64 2 + %t1175 = load %S.ast.Node, ptr %t1174 + %t1176 = call %S.gen.Val @finch.gen.expr(ptr %t1168, %S.ast.Node %t1175) + %t1177 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5821, i64 3, i64 0 }) + %t1178 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t1179 = load { ptr, i64, i64 }, ptr %t1178 + %t1180 = extractvalue { ptr, i64, i64 } %t1179, 1 + %t1181 = icmp uge i64 2, %t1180 + br i1 %t1181, label %range8946, label %inrange8947 +range8946: + call void @finch_panic_index(ptr @.str.5822, i64 5529, i64 2, i64 %t1180) + unreachable +inrange8947: + %t1182 = extractvalue { ptr, i64, i64 } %t1179, 0 + %t1183 = getelementptr inbounds %S.ast.Node, ptr %t1182, i64 2 + %t1184 = load %S.ast.Node, ptr %t1183 + %t1185 = call %S.gen.Val @finch.gen.coerce(ptr %t1167, %S.gen.Val %t1176, %S.ast.Type %t1177, %S.ast.Node %t1184, { ptr, i64, i64 } { ptr @.str.5823, i64 7, i64 0 }) + store %S.gen.Val %t1176, ptr %a1186 + call void @finch.drop.S_gen_Val(ptr %a1186) + store %S.ast.Type %t1177, ptr %a1187 + call void @finch.drop.S_ast_Type(ptr %a1187) + %t1188 = extractvalue %S.gen.Val %t1185, 0 + store { ptr, i64, i64 } %t1188, ptr %a1189 + call void @finch_str_copy(ptr %a1190, ptr %a1189) + %t1191 = load { ptr, i64, i64 }, ptr %a1190 + store %S.gen.Val %t1185, ptr %a1192 + call void @finch.drop.S_gen_Val(ptr %a1192) + store { ptr, i64, i64 } %t1191, ptr %a1193 + %t1194 = load ptr, ptr %a1 + %t1195 = load { ptr, i64, i64 }, ptr %a39 + %t1196 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1194, { ptr, i64, i64 } { ptr @.str.5824, i64 3, i64 0 }, { ptr, i64, i64 } %t1195) + store { ptr, i64, i64 } %t1196, ptr %a1197 + %t1198 = load ptr, ptr %a1 + %t1199 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } { ptr @.str.5825, i64 13, i64 0 }, ptr %a1201 + store { ptr, i64, i64 } %t1199, ptr %a1202 + call void @finch_str_concat(ptr %a1200, ptr %a1201, ptr %a1202) + %t1203 = load { ptr, i64, i64 }, ptr %a1200 + store { ptr, i64, i64 } %t1203, ptr %a1205 + store { ptr, i64, i64 } { ptr @.str.5826, i64 3, i64 0 }, ptr %a1206 + call void @finch_str_concat(ptr %a1204, ptr %a1205, ptr %a1206) + store { ptr, i64, i64 } %t1203, ptr %a1207 + call void @finch_str_drop(ptr %a1207) + %t1208 = load { ptr, i64, i64 }, ptr %a1204 + %t1209 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1198, { ptr, i64, i64 } %t1208) + store { ptr, i64, i64 } %t1208, ptr %a1210 + call void @finch_str_drop(ptr %a1210) + store { ptr, i64, i64 } %t1209, ptr %a1211 + %t1212 = load ptr, ptr %a1 + %t1213 = load { ptr, i64, i64 }, ptr %a1193 + store { ptr, i64, i64 } { ptr @.str.5827, i64 13, i64 0 }, ptr %a1215 + store { ptr, i64, i64 } %t1213, ptr %a1216 + call void @finch_str_concat(ptr %a1214, ptr %a1215, ptr %a1216) + %t1217 = load { ptr, i64, i64 }, ptr %a1214 + store { ptr, i64, i64 } %t1217, ptr %a1219 + store { ptr, i64, i64 } { ptr @.str.5828, i64 2, i64 0 }, ptr %a1220 + call void @finch_str_concat(ptr %a1218, ptr %a1219, ptr %a1220) + store { ptr, i64, i64 } %t1217, ptr %a1221 + call void @finch_str_drop(ptr %a1221) + %t1222 = load { ptr, i64, i64 }, ptr %a1218 + %t1223 = load { ptr, i64, i64 }, ptr %a1197 + store { ptr, i64, i64 } %t1222, ptr %a1225 + store { ptr, i64, i64 } %t1223, ptr %a1226 + call void @finch_str_concat(ptr %a1224, ptr %a1225, ptr %a1226) + store { ptr, i64, i64 } %t1222, ptr %a1227 + call void @finch_str_drop(ptr %a1227) + %t1228 = load { ptr, i64, i64 }, ptr %a1224 + %t1229 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1212, { ptr, i64, i64 } %t1228) + store { ptr, i64, i64 } %t1228, ptr %a1230 + call void @finch_str_drop(ptr %a1230) + store { ptr, i64, i64 } %t1229, ptr %a1231 + %t1232 = load ptr, ptr %a1 + %t1233 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } { ptr @.str.5829, i64 13, i64 0 }, ptr %a1235 + store { ptr, i64, i64 } %t1233, ptr %a1236 + call void @finch_str_concat(ptr %a1234, ptr %a1235, ptr %a1236) + %t1237 = load { ptr, i64, i64 }, ptr %a1234 + store { ptr, i64, i64 } %t1237, ptr %a1239 + store { ptr, i64, i64 } { ptr @.str.5830, i64 2, i64 0 }, ptr %a1240 + call void @finch_str_concat(ptr %a1238, ptr %a1239, ptr %a1240) + store { ptr, i64, i64 } %t1237, ptr %a1241 + call void @finch_str_drop(ptr %a1241) + %t1242 = load { ptr, i64, i64 }, ptr %a1238 + %t1243 = load { ptr, i64, i64 }, ptr %a1193 + store { ptr, i64, i64 } %t1242, ptr %a1245 + store { ptr, i64, i64 } %t1243, ptr %a1246 + call void @finch_str_concat(ptr %a1244, ptr %a1245, ptr %a1246) + store { ptr, i64, i64 } %t1242, ptr %a1247 + call void @finch_str_drop(ptr %a1247) + %t1248 = load { ptr, i64, i64 }, ptr %a1244 + %t1249 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1232, { ptr, i64, i64 } %t1248) + store { ptr, i64, i64 } %t1248, ptr %a1250 + call void @finch_str_drop(ptr %a1250) + store { ptr, i64, i64 } %t1249, ptr %a1251 + %t1252 = load ptr, ptr %a1 + %t1253 = load ptr, ptr %a1 + %t1254 = load ptr, ptr %a1 + %t1255 = load { ptr, i64, i64 }, ptr %a1211 + store { ptr, i64, i64 } { ptr @.str.5832, i64 6, i64 0 }, ptr %a1257 + store { ptr, i64, i64 } %t1255, ptr %a1258 + call void @finch_str_concat(ptr %a1256, ptr %a1257, ptr %a1258) + %t1259 = load { ptr, i64, i64 }, ptr %a1256 + store { ptr, i64, i64 } %t1259, ptr %a1261 + store { ptr, i64, i64 } { ptr @.str.5833, i64 2, i64 0 }, ptr %a1262 + call void @finch_str_concat(ptr %a1260, ptr %a1261, ptr %a1262) + store { ptr, i64, i64 } %t1259, ptr %a1263 + call void @finch_str_drop(ptr %a1263) + %t1264 = load { ptr, i64, i64 }, ptr %a1260 + %t1265 = load { ptr, i64, i64 }, ptr %a1231 + store { ptr, i64, i64 } %t1264, ptr %a1267 + store { ptr, i64, i64 } %t1265, ptr %a1268 + call void @finch_str_concat(ptr %a1266, ptr %a1267, ptr %a1268) + store { ptr, i64, i64 } %t1264, ptr %a1269 + call void @finch_str_drop(ptr %a1269) + %t1270 = load { ptr, i64, i64 }, ptr %a1266 + %t1271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1254, { ptr, i64, i64 } %t1270) + store { ptr, i64, i64 } %t1270, ptr %a1272 + call void @finch_str_drop(ptr %a1272) + store { ptr, i64, i64 } { ptr @.str.5831, i64 6, i64 0 }, ptr %a1274 + store { ptr, i64, i64 } %t1271, ptr %a1275 + call void @finch_str_concat(ptr %a1273, ptr %a1274, ptr %a1275) + store { ptr, i64, i64 } %t1271, ptr %a1276 + call void @finch_str_drop(ptr %a1276) + %t1277 = load { ptr, i64, i64 }, ptr %a1273 + store { ptr, i64, i64 } %t1277, ptr %a1279 + store { ptr, i64, i64 } { ptr @.str.5834, i64 2, i64 0 }, ptr %a1280 + call void @finch_str_concat(ptr %a1278, ptr %a1279, ptr %a1280) + store { ptr, i64, i64 } %t1277, ptr %a1281 + call void @finch_str_drop(ptr %a1281) + %t1282 = load { ptr, i64, i64 }, ptr %a1278 + %t1283 = load { ptr, i64, i64 }, ptr %a1251 + store { ptr, i64, i64 } %t1282, ptr %a1285 + store { ptr, i64, i64 } %t1283, ptr %a1286 + call void @finch_str_concat(ptr %a1284, ptr %a1285, ptr %a1286) + store { ptr, i64, i64 } %t1282, ptr %a1287 + call void @finch_str_drop(ptr %a1287) + %t1288 = load { ptr, i64, i64 }, ptr %a1284 + %t1289 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1253, { ptr, i64, i64 } %t1288) + store { ptr, i64, i64 } %t1288, ptr %a1290 + call void @finch_str_drop(ptr %a1290) + %t1291 = load %S.ast.Node, ptr %a2 + call void @finch.gen.panicIf(ptr %t1252, { ptr, i64, i64 } %t1289, { ptr, i64, i64 } { ptr @.str.5835, i64 33, i64 0 }, %S.ast.Node %t1291) + store { ptr, i64, i64 } %t1289, ptr %a1292 + call void @finch_str_drop(ptr %a1292) + %t1293 = load ptr, ptr %a1 + %t1294 = load { ptr, i64, i64 }, ptr %a1193 + store { ptr, i64, i64 } { ptr @.str.5836, i64 8, i64 0 }, ptr %a1296 + store { ptr, i64, i64 } %t1294, ptr %a1297 + call void @finch_str_concat(ptr %a1295, ptr %a1296, ptr %a1297) + %t1298 = load { ptr, i64, i64 }, ptr %a1295 + store { ptr, i64, i64 } %t1298, ptr %a1300 + store { ptr, i64, i64 } { ptr @.str.5837, i64 2, i64 0 }, ptr %a1301 + call void @finch_str_concat(ptr %a1299, ptr %a1300, ptr %a1301) + store { ptr, i64, i64 } %t1298, ptr %a1302 + call void @finch_str_drop(ptr %a1302) + %t1303 = load { ptr, i64, i64 }, ptr %a1299 + %t1304 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } %t1303, ptr %a1306 + store { ptr, i64, i64 } %t1304, ptr %a1307 + call void @finch_str_concat(ptr %a1305, ptr %a1306, ptr %a1307) + store { ptr, i64, i64 } %t1303, ptr %a1308 + call void @finch_str_drop(ptr %a1308) + %t1309 = load { ptr, i64, i64 }, ptr %a1305 + %t1310 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1293, { ptr, i64, i64 } %t1309) + store { ptr, i64, i64 } %t1309, ptr %a1311 + call void @finch_str_drop(ptr %a1311) + store { ptr, i64, i64 } %t1310, ptr %a1312 + %t1313 = load ptr, ptr %a1 + %t1314 = call { ptr, i64, i64 } @finch.gen.alloca(ptr %t1313, { ptr, i64, i64 } { ptr @.str.5838, i64 17, i64 0 }) + store { ptr, i64, i64 } %t1314, ptr %a1315 + %t1316 = load ptr, ptr %a1 + %t1317 = load { ptr, i64, i64 }, ptr %a1315 + store { ptr, i64, i64 } { ptr @.str.5839, i64 30, i64 0 }, ptr %a1319 + store { ptr, i64, i64 } %t1317, ptr %a1320 + call void @finch_str_concat(ptr %a1318, ptr %a1319, ptr %a1320) + %t1321 = load { ptr, i64, i64 }, ptr %a1318 + store { ptr, i64, i64 } %t1321, ptr %a1323 + store { ptr, i64, i64 } { ptr @.str.5840, i64 6, i64 0 }, ptr %a1324 + call void @finch_str_concat(ptr %a1322, ptr %a1323, ptr %a1324) + store { ptr, i64, i64 } %t1321, ptr %a1325 + call void @finch_str_drop(ptr %a1325) + %t1326 = load { ptr, i64, i64 }, ptr %a1322 + %t1327 = load { ptr, i64, i64 }, ptr %a1312 + store { ptr, i64, i64 } %t1326, ptr %a1329 + store { ptr, i64, i64 } %t1327, ptr %a1330 + call void @finch_str_concat(ptr %a1328, ptr %a1329, ptr %a1330) + store { ptr, i64, i64 } %t1326, ptr %a1331 + call void @finch_str_drop(ptr %a1331) + %t1332 = load { ptr, i64, i64 }, ptr %a1328 + store { ptr, i64, i64 } %t1332, ptr %a1334 + store { ptr, i64, i64 } { ptr @.str.5841, i64 6, i64 0 }, ptr %a1335 + call void @finch_str_concat(ptr %a1333, ptr %a1334, ptr %a1335) + store { ptr, i64, i64 } %t1332, ptr %a1336 + call void @finch_str_drop(ptr %a1336) + %t1337 = load { ptr, i64, i64 }, ptr %a1333 + %t1338 = load ptr, ptr %a1 + %t1339 = load %S.ast.Type, ptr %a15 + %t1340 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1338, %S.ast.Type %t1339) + store { ptr, i64, i64 } %t1337, ptr %a1342 + store { ptr, i64, i64 } %t1340, ptr %a1343 + call void @finch_str_concat(ptr %a1341, ptr %a1342, ptr %a1343) + store { ptr, i64, i64 } %t1337, ptr %a1344 + call void @finch_str_drop(ptr %a1344) + store { ptr, i64, i64 } %t1340, ptr %a1345 + call void @finch_str_drop(ptr %a1345) + %t1346 = load { ptr, i64, i64 }, ptr %a1341 + store { ptr, i64, i64 } %t1346, ptr %a1348 + store { ptr, i64, i64 } { ptr @.str.5842, i64 1, i64 0 }, ptr %a1349 + call void @finch_str_concat(ptr %a1347, ptr %a1348, ptr %a1349) + store { ptr, i64, i64 } %t1346, ptr %a1350 + call void @finch_str_drop(ptr %a1350) + %t1351 = load { ptr, i64, i64 }, ptr %a1347 + call void @finch.gen.emit(ptr %t1316, { ptr, i64, i64 } %t1351) + store { ptr, i64, i64 } %t1351, ptr %a1352 + call void @finch_str_drop(ptr %a1352) + %t1353 = load ptr, ptr %a1 + %t1354 = load { ptr, i64, i64 }, ptr %a3 + %t1355 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1353, { ptr, i64, i64 } { ptr @.str.5843, i64 3, i64 0 }, { ptr, i64, i64 } %t1354) + store { ptr, i64, i64 } %t1355, ptr %a1356 + %t1357 = load ptr, ptr %a1 + %t1358 = load { ptr, i64, i64 }, ptr %a1315 + %t1359 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1357, { ptr, i64, i64 } { ptr @.str.5844, i64 3, i64 0 }, { ptr, i64, i64 } %t1358) + store { ptr, i64, i64 } %t1359, ptr %a1360 + %t1361 = load ptr, ptr %a1 + %t1362 = load { ptr, i64, i64 }, ptr %a1312 + %t1363 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t1361, { ptr, i64, i64 } %t1362) + store { ptr, i64, i64 } %t1363, ptr %a1364 + %t1365 = load ptr, ptr %a1 + %t1366 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5845, i64 23, i64 0 }, ptr %a1368 + store { ptr, i64, i64 } %t1366, ptr %a1369 + call void @finch_str_concat(ptr %a1367, ptr %a1368, ptr %a1369) + %t1370 = load { ptr, i64, i64 }, ptr %a1367 + store { ptr, i64, i64 } %t1370, ptr %a1372 + store { ptr, i64, i64 } { ptr @.str.5846, i64 6, i64 0 }, ptr %a1373 + call void @finch_str_concat(ptr %a1371, ptr %a1372, ptr %a1373) + store { ptr, i64, i64 } %t1370, ptr %a1374 + call void @finch_str_drop(ptr %a1374) + %t1375 = load { ptr, i64, i64 }, ptr %a1371 + %t1376 = load { ptr, i64, i64 }, ptr %a1360 + store { ptr, i64, i64 } %t1375, ptr %a1378 + store { ptr, i64, i64 } %t1376, ptr %a1379 + call void @finch_str_concat(ptr %a1377, ptr %a1378, ptr %a1379) + store { ptr, i64, i64 } %t1375, ptr %a1380 + call void @finch_str_drop(ptr %a1380) + %t1381 = load { ptr, i64, i64 }, ptr %a1377 + store { ptr, i64, i64 } %t1381, ptr %a1383 + store { ptr, i64, i64 } { ptr @.str.5847, i64 6, i64 0 }, ptr %a1384 + call void @finch_str_concat(ptr %a1382, ptr %a1383, ptr %a1384) + store { ptr, i64, i64 } %t1381, ptr %a1385 + call void @finch_str_drop(ptr %a1385) + %t1386 = load { ptr, i64, i64 }, ptr %a1382 + %t1387 = load { ptr, i64, i64 }, ptr %a1364 + %t1388 = extractvalue { ptr, i64, i64 } %t1387, 1 + %t1389 = icmp uge i64 3, %t1388 + br i1 %t1389, label %range8948, label %inrange8949 +range8948: + call void @finch_panic_index(ptr @.str.5848, i64 5541, i64 3, i64 %t1388) + unreachable +inrange8949: + %t1390 = extractvalue { ptr, i64, i64 } %t1387, 0 + %t1391 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1390, i64 3 + %t1392 = load { ptr, i64, i64 }, ptr %t1391 + store { ptr, i64, i64 } %t1386, ptr %a1394 + store { ptr, i64, i64 } %t1392, ptr %a1395 + call void @finch_str_concat(ptr %a1393, ptr %a1394, ptr %a1395) + store { ptr, i64, i64 } %t1386, ptr %a1396 + call void @finch_str_drop(ptr %a1396) + %t1397 = load { ptr, i64, i64 }, ptr %a1393 + %t1398 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1365, { ptr, i64, i64 } %t1397) + store { ptr, i64, i64 } %t1397, ptr %a1399 + call void @finch_str_drop(ptr %a1399) + store { ptr, i64, i64 } %t1398, ptr %a1400 + %t1401 = load ptr, ptr %a1 + %t1402 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.5849, i64 23, i64 0 }, ptr %a1404 + store { ptr, i64, i64 } %t1402, ptr %a1405 + call void @finch_str_concat(ptr %a1403, ptr %a1404, ptr %a1405) + %t1406 = load { ptr, i64, i64 }, ptr %a1403 + store { ptr, i64, i64 } %t1406, ptr %a1408 + store { ptr, i64, i64 } { ptr @.str.5850, i64 6, i64 0 }, ptr %a1409 + call void @finch_str_concat(ptr %a1407, ptr %a1408, ptr %a1409) + store { ptr, i64, i64 } %t1406, ptr %a1410 + call void @finch_str_drop(ptr %a1410) + %t1411 = load { ptr, i64, i64 }, ptr %a1407 + %t1412 = load { ptr, i64, i64 }, ptr %a1356 + store { ptr, i64, i64 } %t1411, ptr %a1414 + store { ptr, i64, i64 } %t1412, ptr %a1415 + call void @finch_str_concat(ptr %a1413, ptr %a1414, ptr %a1415) + store { ptr, i64, i64 } %t1411, ptr %a1416 + call void @finch_str_drop(ptr %a1416) + %t1417 = load { ptr, i64, i64 }, ptr %a1413 + store { ptr, i64, i64 } %t1417, ptr %a1419 + store { ptr, i64, i64 } { ptr @.str.5851, i64 6, i64 0 }, ptr %a1420 + call void @finch_str_concat(ptr %a1418, ptr %a1419, ptr %a1420) + store { ptr, i64, i64 } %t1417, ptr %a1421 + call void @finch_str_drop(ptr %a1421) + %t1422 = load { ptr, i64, i64 }, ptr %a1418 + %t1423 = load ptr, ptr %a1 + %t1424 = load { ptr, i64, i64 }, ptr %a1166 + store { ptr, i64, i64 } { ptr @.str.5852, i64 8, i64 0 }, ptr %a1426 + store { ptr, i64, i64 } %t1424, ptr %a1427 + call void @finch_str_concat(ptr %a1425, ptr %a1426, ptr %a1427) + %t1428 = load { ptr, i64, i64 }, ptr %a1425 + store { ptr, i64, i64 } %t1428, ptr %a1430 + store { ptr, i64, i64 } { ptr @.str.5853, i64 2, i64 0 }, ptr %a1431 + call void @finch_str_concat(ptr %a1429, ptr %a1430, ptr %a1431) + store { ptr, i64, i64 } %t1428, ptr %a1432 + call void @finch_str_drop(ptr %a1432) + %t1433 = load { ptr, i64, i64 }, ptr %a1429 + %t1434 = load { ptr, i64, i64 }, ptr %a1364 + %t1435 = extractvalue { ptr, i64, i64 } %t1434, 1 + %t1436 = icmp uge i64 3, %t1435 + br i1 %t1436, label %range8950, label %inrange8951 +range8950: + call void @finch_panic_index(ptr @.str.5854, i64 5542, i64 3, i64 %t1435) + unreachable +inrange8951: + %t1437 = extractvalue { ptr, i64, i64 } %t1434, 0 + %t1438 = getelementptr inbounds { ptr, i64, i64 }, ptr %t1437, i64 3 + %t1439 = load { ptr, i64, i64 }, ptr %t1438 + store { ptr, i64, i64 } %t1433, ptr %a1441 + store { ptr, i64, i64 } %t1439, ptr %a1442 + call void @finch_str_concat(ptr %a1440, ptr %a1441, ptr %a1442) + store { ptr, i64, i64 } %t1433, ptr %a1443 + call void @finch_str_drop(ptr %a1443) + %t1444 = load { ptr, i64, i64 }, ptr %a1440 + %t1445 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1423, { ptr, i64, i64 } %t1444) + store { ptr, i64, i64 } %t1444, ptr %a1446 + call void @finch_str_drop(ptr %a1446) + store { ptr, i64, i64 } %t1422, ptr %a1448 + store { ptr, i64, i64 } %t1445, ptr %a1449 + call void @finch_str_concat(ptr %a1447, ptr %a1448, ptr %a1449) + store { ptr, i64, i64 } %t1422, ptr %a1450 + call void @finch_str_drop(ptr %a1450) + store { ptr, i64, i64 } %t1445, ptr %a1451 + call void @finch_str_drop(ptr %a1451) + %t1452 = load { ptr, i64, i64 }, ptr %a1447 + %t1453 = call { ptr, i64, i64 } @finch.gen.op(ptr %t1401, { ptr, i64, i64 } %t1452) + store { ptr, i64, i64 } %t1452, ptr %a1454 + call void @finch_str_drop(ptr %a1454) + store { ptr, i64, i64 } %t1453, ptr %a1455 + %t1456 = load ptr, ptr %a1 + %t1457 = load { ptr, i64, i64 }, ptr %a1400 + %t1458 = load { ptr, i64, i64 }, ptr %a1455 + %t1459 = load %S.ast.Type, ptr %a15 + call void @finch.gen.copyAt(ptr %t1456, { ptr, i64, i64 } %t1457, { ptr, i64, i64 } %t1458, %S.ast.Type %t1459) + %t1460 = load ptr, ptr %a1 + %t1461 = load { ptr, i64, i64 }, ptr %a1364 + call void @finch.gen.loopEnd(ptr %t1460, { ptr, i64, i64 } %t1461) + %t1462 = load ptr, ptr %a1 + %t1463 = load { ptr, i64, i64 }, ptr %a1315 + %t1464 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1462, { ptr, i64, i64 } { ptr @.str.5855, i64 17, i64 0 }, { ptr, i64, i64 } %t1463) + %t1465 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t1464, 0 + %t1466 = load %S.ast.Type, ptr %a4 + store %S.ast.Type %t1466, ptr %a1467 + call void @finch.copy.S_ast_Type(ptr %a1468, ptr %a1467) + %t1469 = load %S.ast.Type, ptr %a1468 + %t1470 = insertvalue %S.gen.Val %t1465, %S.ast.Type %t1469, 1 + %t1471 = insertvalue %S.gen.Val %t1470, i1 true, 2 + call void @finch_str_drop(ptr %a1455) + call void @finch_str_drop(ptr %a1400) + call void @finch.drop.arr_str(ptr %a1364) + call void @finch_str_drop(ptr %a1360) + call void @finch_str_drop(ptr %a1356) + call void @finch_str_drop(ptr %a1315) + call void @finch_str_drop(ptr %a1312) + call void @finch_str_drop(ptr %a1251) + call void @finch_str_drop(ptr %a1231) + call void @finch_str_drop(ptr %a1211) + call void @finch_str_drop(ptr %a1197) + call void @finch_str_drop(ptr %a1193) + call void @finch_str_drop(ptr %a1166) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t1471 +endif8939: + %t1472 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t1472, ptr %a1473 + store { ptr, i64, i64 } { ptr @.str.5856, i64 4, i64 0 }, ptr %a1474 + %t1475 = call i32 @finch_str_eq(ptr %a1473, ptr %a1474) + %t1476 = icmp ne i32 %t1475, 0 + br i1 %t1476, label %then8952, label %endif8954 +then8952: + %t1477 = load ptr, ptr %a1 + %t1478 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t1477, %S.ast.Node %t1478, i64 0) + %t1479 = getelementptr inbounds %S.ast.Type, ptr %a15, i32 0, i32 0 + %t1480 = load { ptr, i64, i64 }, ptr %t1479 + store { ptr, i64, i64 } %t1480, ptr %a1481 + call void @finch_str_copy(ptr %a1482, ptr %a1481) + %t1483 = load { ptr, i64, i64 }, ptr %a1482 + store { ptr, i64, i64 } %t1483, ptr %a1484 + %t1485 = load %S.ast.Type, ptr %a15 + %t1486 = call i1 @finch.gen.isNumber(%S.ast.Type %t1485) + %t1487 = xor i1 %t1486, true + br label %logic.from8955 +logic.from8955: + br i1 %t1487, label %logic.rhs8956, label %logic.end8957 +logic.rhs8956: + %t1488 = load { ptr, i64, i64 }, ptr %a1484 + store { ptr, i64, i64 } %t1488, ptr %a1489 + store { ptr, i64, i64 } { ptr @.str.5857, i64 4, i64 0 }, ptr %a1490 + %t1491 = call i32 @finch_str_eq(ptr %a1489, ptr %a1490) + %t1492 = icmp eq i32 %t1491, 0 + br label %logic.rend8958 +logic.rend8958: + br label %logic.end8957 +logic.end8957: + %t1493 = phi i1 [ false, %logic.from8955 ], [ %t1492, %logic.rend8958 ] + br label %logic.from8959 +logic.from8959: + br i1 %t1493, label %logic.rhs8960, label %logic.end8961 +logic.rhs8960: + %t1494 = load { ptr, i64, i64 }, ptr %a1484 + store { ptr, i64, i64 } %t1494, ptr %a1495 + store { ptr, i64, i64 } { ptr @.str.5858, i64 3, i64 0 }, ptr %a1496 + %t1497 = call i32 @finch_str_eq(ptr %a1495, ptr %a1496) + %t1498 = icmp eq i32 %t1497, 0 + br label %logic.rend8962 +logic.rend8962: + br label %logic.end8961 +logic.end8961: + %t1499 = phi i1 [ false, %logic.from8959 ], [ %t1498, %logic.rend8962 ] + br i1 %t1499, label %then8963, label %endif8965 +then8963: + %t1500 = load ptr, ptr %a1 + %t1501 = load %S.ast.Node, ptr %a2 + call void @finch.gen.fail(ptr %t1500, %S.ast.Node %t1501, { ptr, i64, i64 } { ptr @.str.5859, i64 47, i64 0 }) + br label %endif8965 +endif8965: + %t1502 = load ptr, ptr %a1 + %t1503 = load %S.ast.Type, ptr %a15 + %t1504 = call { ptr, i64, i64 } @finch.gen.cmpFn(ptr %t1502, %S.ast.Type %t1503) + store { ptr, i64, i64 } %t1504, ptr %a1505 + %t1506 = load ptr, ptr %a1 + %t1507 = load { ptr, i64, i64 }, ptr %a39 + %t1508 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1506, { ptr, i64, i64 } { ptr @.str.5860, i64 3, i64 0 }, { ptr, i64, i64 } %t1507) + store { ptr, i64, i64 } %t1508, ptr %a1509 + %t1510 = load ptr, ptr %a1 + %t1511 = load { ptr, i64, i64 }, ptr %a3 + %t1512 = call { ptr, i64, i64 } @finch.gen.load(ptr %t1510, { ptr, i64, i64 } { ptr @.str.5861, i64 3, i64 0 }, { ptr, i64, i64 } %t1511) + store { ptr, i64, i64 } %t1512, ptr %a1513 + %t1514 = load ptr, ptr %a1 + %t1515 = load { ptr, i64, i64 }, ptr %a1513 + store { ptr, i64, i64 } { ptr @.str.5862, i64 21, i64 0 }, ptr %a1517 + store { ptr, i64, i64 } %t1515, ptr %a1518 + call void @finch_str_concat(ptr %a1516, ptr %a1517, ptr %a1518) + %t1519 = load { ptr, i64, i64 }, ptr %a1516 + store { ptr, i64, i64 } %t1519, ptr %a1521 + store { ptr, i64, i64 } { ptr @.str.5863, i64 6, i64 0 }, ptr %a1522 + call void @finch_str_concat(ptr %a1520, ptr %a1521, ptr %a1522) + store { ptr, i64, i64 } %t1519, ptr %a1523 + call void @finch_str_drop(ptr %a1523) + %t1524 = load { ptr, i64, i64 }, ptr %a1520 + %t1525 = load { ptr, i64, i64 }, ptr %a1509 + store { ptr, i64, i64 } %t1524, ptr %a1527 + store { ptr, i64, i64 } %t1525, ptr %a1528 + call void @finch_str_concat(ptr %a1526, ptr %a1527, ptr %a1528) + store { ptr, i64, i64 } %t1524, ptr %a1529 + call void @finch_str_drop(ptr %a1529) + %t1530 = load { ptr, i64, i64 }, ptr %a1526 + store { ptr, i64, i64 } %t1530, ptr %a1532 + store { ptr, i64, i64 } { ptr @.str.5864, i64 6, i64 0 }, ptr %a1533 + call void @finch_str_concat(ptr %a1531, ptr %a1532, ptr %a1533) + store { ptr, i64, i64 } %t1530, ptr %a1534 + call void @finch_str_drop(ptr %a1534) + %t1535 = load { ptr, i64, i64 }, ptr %a1531 + %t1536 = load ptr, ptr %a1 + %t1537 = load %S.ast.Type, ptr %a15 + %t1538 = call { ptr, i64, i64 } @finch.gen.sizeOf(ptr %t1536, %S.ast.Type %t1537) + store { ptr, i64, i64 } %t1535, ptr %a1540 + store { ptr, i64, i64 } %t1538, ptr %a1541 + call void @finch_str_concat(ptr %a1539, ptr %a1540, ptr %a1541) + store { ptr, i64, i64 } %t1535, ptr %a1542 + call void @finch_str_drop(ptr %a1542) + store { ptr, i64, i64 } %t1538, ptr %a1543 + call void @finch_str_drop(ptr %a1543) + %t1544 = load { ptr, i64, i64 }, ptr %a1539 + store { ptr, i64, i64 } %t1544, ptr %a1546 + store { ptr, i64, i64 } { ptr @.str.5865, i64 6, i64 0 }, ptr %a1547 + call void @finch_str_concat(ptr %a1545, ptr %a1546, ptr %a1547) + store { ptr, i64, i64 } %t1544, ptr %a1548 + call void @finch_str_drop(ptr %a1548) + %t1549 = load { ptr, i64, i64 }, ptr %a1545 + %t1550 = load { ptr, i64, i64 }, ptr %a1505 + store { ptr, i64, i64 } %t1549, ptr %a1552 + store { ptr, i64, i64 } %t1550, ptr %a1553 + call void @finch_str_concat(ptr %a1551, ptr %a1552, ptr %a1553) + store { ptr, i64, i64 } %t1549, ptr %a1554 + call void @finch_str_drop(ptr %a1554) + %t1555 = load { ptr, i64, i64 }, ptr %a1551 + store { ptr, i64, i64 } %t1555, ptr %a1557 + store { ptr, i64, i64 } { ptr @.str.5866, i64 1, i64 0 }, ptr %a1558 + call void @finch_str_concat(ptr %a1556, ptr %a1557, ptr %a1558) + store { ptr, i64, i64 } %t1555, ptr %a1559 + call void @finch_str_drop(ptr %a1559) + %t1560 = load { ptr, i64, i64 }, ptr %a1556 + call void @finch.gen.emit(ptr %t1514, { ptr, i64, i64 } %t1560) + store { ptr, i64, i64 } %t1560, ptr %a1561 + call void @finch_str_drop(ptr %a1561) + %t1562 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5867, i64 4, i64 0 }) + %t1563 = insertvalue %S.gen.Val zeroinitializer, %S.ast.Type %t1562, 1 + call void @finch_str_drop(ptr %a1513) + call void @finch_str_drop(ptr %a1509) + call void @finch_str_drop(ptr %a1505) + call void @finch_str_drop(ptr %a1484) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val %t1563 +endif8954: + %t1564 = load ptr, ptr %a1 + %t1565 = load %S.ast.Node, ptr %a2 + %t1566 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } { ptr @.str.5868, i64 24, i64 0 }, ptr %a1568 + store { ptr, i64, i64 } %t1566, ptr %a1569 + call void @finch_str_concat(ptr %a1567, ptr %a1568, ptr %a1569) + %t1570 = load { ptr, i64, i64 }, ptr %a1567 + store { ptr, i64, i64 } %t1570, ptr %a1572 + store { ptr, i64, i64 } { ptr @.str.5869, i64 96, i64 0 }, ptr %a1573 + call void @finch_str_concat(ptr %a1571, ptr %a1572, ptr %a1573) + store { ptr, i64, i64 } %t1570, ptr %a1574 + call void @finch_str_drop(ptr %a1574) + %t1575 = load { ptr, i64, i64 }, ptr %a1571 + call void @finch.gen.fail(ptr %t1564, %S.ast.Node %t1565, { ptr, i64, i64 } %t1575) + store { ptr, i64, i64 } %t1575, ptr %a1576 + call void @finch_str_drop(ptr %a1576) + call void @finch_str_drop(ptr %a39) + call void @finch_str_drop(ptr %a25) + call void @finch_str_drop(ptr %a19) + call void @finch.drop.S_ast_Type(ptr %a15) + ret %S.gen.Val zeroinitializer +} + +define internal void @finch.gen.dropFrom(ptr %p0, { ptr, i64, i64 } %p1, %S.ast.Type %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca %S.ast.Type, align 16 + %a13 = alloca %S.ast.Type, align 16 + %a15 = alloca %S.ast.Type, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.ast.Type %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = getelementptr inbounds %S.ast.Type, ptr %a3, i32 0, i32 1 + %t6 = load { ptr, i64, i64 }, ptr %t5 + %t7 = extractvalue { ptr, i64, i64 } %t6, 1 + %t8 = icmp uge i64 0, %t7 + br i1 %t8, label %range8966, label %inrange8967 +range8966: + call void @finch_panic_index(ptr @.str.5870, i64 5565, i64 0, i64 %t7) + unreachable +inrange8967: + %t9 = extractvalue { ptr, i64, i64 } %t6, 0 + %t10 = getelementptr inbounds %S.ast.Type, ptr %t9, i64 0 + %t11 = load %S.ast.Type, ptr %t10 + store %S.ast.Type %t11, ptr %a12 + call void @finch.copy.S_ast_Type(ptr %a13, ptr %a12) + %t14 = load %S.ast.Type, ptr %a13 + store %S.ast.Type %t14, ptr %a15 + %t16 = load ptr, ptr %a1 + %t17 = load %S.ast.Type, ptr %a15 + %t18 = call i1 @finch.gen.owning(ptr %t16, %S.ast.Type %t17) + %t19 = xor i1 %t18, true + br i1 %t19, label %then8968, label %endif8970 +then8968: + call void @finch.drop.S_ast_Type(ptr %a15) + ret void +endif8970: + %t20 = load ptr, ptr %a1 + %t21 = load %S.ast.Type, ptr %a15 + %t22 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t20, %S.ast.Type %t21) + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = load ptr, ptr %a1 + %t25 = load ptr, ptr %a1 + %t26 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.5872, i64 46, i64 0 }, ptr %a28 + store { ptr, i64, i64 } %t26, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a27 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.5873, i64 14, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + %t36 = call { ptr, i64, i64 } @finch.gen.op(ptr %t25, { ptr, i64, i64 } %t35) + store { ptr, i64, i64 } %t35, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = call { ptr, i64, i64 } @finch.gen.load(ptr %t24, { ptr, i64, i64 } { ptr @.str.5871, i64 3, i64 0 }, { ptr, i64, i64 } %t36) + store { ptr, i64, i64 } %t36, ptr %a39 + call void @finch_str_drop(ptr %a39) + store { ptr, i64, i64 } %t38, ptr %a40 + %t41 = load ptr, ptr %a1 + %t42 = load { ptr, i64, i64 }, ptr %a2 + %t43 = call { ptr, i64, i64 } @finch.gen.load(ptr %t41, { ptr, i64, i64 } { ptr @.str.5874, i64 3, i64 0 }, { ptr, i64, i64 } %t42) + store { ptr, i64, i64 } %t43, ptr %a44 + %t45 = load ptr, ptr %a1 + %t46 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.5875, i64 13, i64 0 }, ptr %a48 + store { ptr, i64, i64 } %t46, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + %t50 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.5876, i64 2, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + %t56 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t55, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t55, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a57 + %t62 = call { ptr, i64, i64 } @finch.gen.op(ptr %t45, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t61, ptr %a63 + call void @finch_str_drop(ptr %a63) + store { ptr, i64, i64 } %t62, ptr %a64 + %t65 = load ptr, ptr %a1 + %t66 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.5877, i64 13, i64 0 }, ptr %a68 + store { ptr, i64, i64 } %t66, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + %t70 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } { ptr @.str.5878, i64 3, i64 0 }, ptr %a73 + call void @finch_str_concat(ptr %a71, ptr %a72, ptr %a73) + store { ptr, i64, i64 } %t70, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a71 + %t76 = call { ptr, i64, i64 } @finch.gen.op(ptr %t65, { ptr, i64, i64 } %t75) + store { ptr, i64, i64 } %t75, ptr %a77 + call void @finch_str_drop(ptr %a77) + store { ptr, i64, i64 } %t76, ptr %a78 + %t79 = load ptr, ptr %a1 + %t80 = load { ptr, i64, i64 }, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.5879, i64 10, i64 0 }, ptr %a82 + store { ptr, i64, i64 } %t80, ptr %a83 + call void @finch_str_concat(ptr %a81, ptr %a82, ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a81 + store { ptr, i64, i64 } %t84, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.5880, i64 6, i64 0 }, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + %t90 = load ptr, ptr %a1 + %t91 = load { ptr, i64, i64 }, ptr %a78 + store { ptr, i64, i64 } { ptr @.str.5881, i64 10, i64 0 }, ptr %a93 + store { ptr, i64, i64 } %t91, ptr %a94 + call void @finch_str_concat(ptr %a92, ptr %a93, ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t95, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.5882, i64 13, i64 0 }, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + %t101 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t100, ptr %a103 + store { ptr, i64, i64 } %t101, ptr %a104 + call void @finch_str_concat(ptr %a102, ptr %a103, ptr %a104) + store { ptr, i64, i64 } %t100, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load { ptr, i64, i64 }, ptr %a102 + %t107 = call { ptr, i64, i64 } @finch.gen.op(ptr %t90, { ptr, i64, i64 } %t106) + store { ptr, i64, i64 } %t106, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t89, ptr %a110 + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch_str_concat(ptr %a109, ptr %a110, ptr %a111) + store { ptr, i64, i64 } %t89, ptr %a112 + call void @finch_str_drop(ptr %a112) + store { ptr, i64, i64 } %t107, ptr %a113 + call void @finch_str_drop(ptr %a113) + %t114 = load { ptr, i64, i64 }, ptr %a109 + store { ptr, i64, i64 } %t114, ptr %a116 + store { ptr, i64, i64 } { ptr @.str.5883, i64 6, i64 0 }, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + store { ptr, i64, i64 } %t114, ptr %a118 + call void @finch_str_drop(ptr %a118) + %t119 = load { ptr, i64, i64 }, ptr %a115 + %t120 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } %t119, ptr %a122 + store { ptr, i64, i64 } %t120, ptr %a123 + call void @finch_str_concat(ptr %a121, ptr %a122, ptr %a123) + store { ptr, i64, i64 } %t119, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a121 + %t126 = call { ptr, i64, i64 } @finch.gen.op(ptr %t79, { ptr, i64, i64 } %t125) + store { ptr, i64, i64 } %t125, ptr %a127 + call void @finch_str_drop(ptr %a127) + store { ptr, i64, i64 } %t126, ptr %a128 + %t129 = load ptr, ptr %a1 + %t130 = load ptr, ptr %a1 + %t131 = load { ptr, i64, i64 }, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.5884, i64 8, i64 0 }, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + %t135 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t135, ptr %a137 + store { ptr, i64, i64 } { ptr @.str.5885, i64 2, i64 0 }, ptr %a138 + call void @finch_str_concat(ptr %a136, ptr %a137, ptr %a138) + store { ptr, i64, i64 } %t135, ptr %a139 + call void @finch_str_drop(ptr %a139) + %t140 = load { ptr, i64, i64 }, ptr %a136 + %t141 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } %t140, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t140, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + %t147 = call { ptr, i64, i64 } @finch.gen.op(ptr %t130, { ptr, i64, i64 } %t146) + store { ptr, i64, i64 } %t146, ptr %a148 + call void @finch_str_drop(ptr %a148) + %t149 = call { ptr, i64, i64 } @finch.gen.loopStart(ptr %t129, { ptr, i64, i64 } %t147) + store { ptr, i64, i64 } %t147, ptr %a150 + call void @finch_str_drop(ptr %a150) + store { ptr, i64, i64 } %t149, ptr %a151 + %t152 = load ptr, ptr %a1 + %t153 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.5886, i64 23, i64 0 }, ptr %a155 + store { ptr, i64, i64 } %t153, ptr %a156 + call void @finch_str_concat(ptr %a154, ptr %a155, ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a154 + store { ptr, i64, i64 } %t157, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.5887, i64 6, i64 0 }, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t157, ptr %a161 + call void @finch_str_drop(ptr %a161) + %t162 = load { ptr, i64, i64 }, ptr %a158 + %t163 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t162, ptr %a165 + store { ptr, i64, i64 } %t163, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t162, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + store { ptr, i64, i64 } %t168, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.5888, i64 6, i64 0 }, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t168, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a169 + %t174 = load ptr, ptr %a1 + %t175 = load { ptr, i64, i64 }, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.5889, i64 8, i64 0 }, ptr %a177 + store { ptr, i64, i64 } %t175, ptr %a178 + call void @finch_str_concat(ptr %a176, ptr %a177, ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a176 + store { ptr, i64, i64 } %t179, ptr %a181 + store { ptr, i64, i64 } { ptr @.str.5890, i64 2, i64 0 }, ptr %a182 + call void @finch_str_concat(ptr %a180, ptr %a181, ptr %a182) + store { ptr, i64, i64 } %t179, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load { ptr, i64, i64 }, ptr %a180 + %t185 = load { ptr, i64, i64 }, ptr %a151 + %t186 = extractvalue { ptr, i64, i64 } %t185, 1 + %t187 = icmp uge i64 3, %t186 + br i1 %t187, label %range8971, label %inrange8972 +range8971: + call void @finch_panic_index(ptr @.str.5891, i64 5576, i64 3, i64 %t186) + unreachable +inrange8972: + %t188 = extractvalue { ptr, i64, i64 } %t185, 0 + %t189 = getelementptr inbounds { ptr, i64, i64 }, ptr %t188, i64 3 + %t190 = load { ptr, i64, i64 }, ptr %t189 + store { ptr, i64, i64 } %t184, ptr %a192 + store { ptr, i64, i64 } %t190, ptr %a193 + call void @finch_str_concat(ptr %a191, ptr %a192, ptr %a193) + store { ptr, i64, i64 } %t184, ptr %a194 + call void @finch_str_drop(ptr %a194) + %t195 = load { ptr, i64, i64 }, ptr %a191 + %t196 = call { ptr, i64, i64 } @finch.gen.op(ptr %t174, { ptr, i64, i64 } %t195) + store { ptr, i64, i64 } %t195, ptr %a197 + call void @finch_str_drop(ptr %a197) + store { ptr, i64, i64 } %t173, ptr %a199 + store { ptr, i64, i64 } %t196, ptr %a200 + call void @finch_str_concat(ptr %a198, ptr %a199, ptr %a200) + store { ptr, i64, i64 } %t173, ptr %a201 + call void @finch_str_drop(ptr %a201) + store { ptr, i64, i64 } %t196, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a198 + %t204 = call { ptr, i64, i64 } @finch.gen.op(ptr %t152, { ptr, i64, i64 } %t203) + store { ptr, i64, i64 } %t203, ptr %a205 + call void @finch_str_drop(ptr %a205) + store { ptr, i64, i64 } %t204, ptr %a206 + %t207 = load ptr, ptr %a1 + %t208 = load { ptr, i64, i64 }, ptr %a206 + %t209 = load %S.ast.Type, ptr %a15 + call void @finch.gen.dropAt(ptr %t207, { ptr, i64, i64 } %t208, %S.ast.Type %t209) + %t210 = load ptr, ptr %a1 + %t211 = load { ptr, i64, i64 }, ptr %a151 + call void @finch.gen.loopEnd(ptr %t210, { ptr, i64, i64 } %t211) + call void @finch_str_drop(ptr %a206) + call void @finch.drop.arr_str(ptr %a151) + call void @finch_str_drop(ptr %a128) + call void @finch_str_drop(ptr %a78) + call void @finch_str_drop(ptr %a64) + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a40) + call void @finch_str_drop(ptr %a23) + call void @finch.drop.S_ast_Type(ptr %a15) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.cmpFn(ptr %p0, %S.ast.Type %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Type, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca %S.gen.Saved, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Type %p1, ptr %a2 + %t3 = load %S.ast.Type, ptr %a2 + %t4 = call { ptr, i64, i64 } @finch.gen.typeKey(%S.ast.Type %t3) + store { ptr, i64, i64 } { ptr @.str.5892, i64 11, i64 0 }, ptr %a6 + store { ptr, i64, i64 } %t4, ptr %a7 + call void @finch_str_concat(ptr %a5, ptr %a6, ptr %a7) + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_drop(ptr %a8) + %t9 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load ptr, ptr %a1 + %t12 = icmp eq ptr %t11, null + br i1 %t12, label %panic8973, label %ok8974 +panic8973: + call void @finch_panic(ptr @.str.5893, i64 5584, ptr @.str.5894) + unreachable +ok8974: + %t13 = getelementptr inbounds %S.gen.Gen, ptr %t11, i32 0, i32 23 + %t14 = load { ptr, i64, i64 }, ptr %t13 + %t15 = load { ptr, i64, i64 }, ptr %a10 + %t16 = call i1 @finch.gen.has({ ptr, i64, i64 } %t14, { ptr, i64, i64 } %t15) + br i1 %t16, label %then8975, label %endif8977 +then8975: + %t17 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t17 +endif8977: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic8978, label %ok8979 +panic8978: + call void @finch_panic(ptr @.str.5895, i64 5587, ptr @.str.5896) + unreachable +ok8979: + %t20 = getelementptr inbounds %S.gen.Gen, ptr %t18, i32 0, i32 23 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + %t30 = load ptr, ptr %a1 + %t31 = call %S.gen.Saved @finch.gen.beginHelper(ptr %t30) + store %S.gen.Saved %t31, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.5897, i64 0, i64 0 }, ptr %a33 + %t34 = getelementptr inbounds %S.ast.Type, ptr %a2, i32 0, i32 0 + %t35 = load { ptr, i64, i64 }, ptr %t34 + store { ptr, i64, i64 } %t35, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.5898, i64 3, i64 0 }, ptr %a37 + %t38 = call i32 @finch_str_eq(ptr %a36, ptr %a37) + %t39 = icmp ne i32 %t38, 0 + br i1 %t39, label %then8980, label %else8981 +then8980: + %t40 = load ptr, ptr %a1 + %t41 = call { ptr, i64, i64 } @finch.gen.op(ptr %t40, { ptr, i64, i64 } { ptr @.str.5899, i64 39, i64 0 }) + store { ptr, i64, i64 } %t41, ptr %a42 + %t43 = load ptr, ptr %a1 + %t44 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.5900, i64 10, i64 0 }, ptr %a46 + store { ptr, i64, i64 } %t44, ptr %a47 + call void @finch_str_concat(ptr %a45, ptr %a46, ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.5901, i64 7, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = call { ptr, i64, i64 } @finch.gen.op(ptr %t43, { ptr, i64, i64 } %t53) + store { ptr, i64, i64 } %t53, ptr %a55 + call void @finch_str_drop(ptr %a55) + %t56 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t54, ptr %a33 + store { ptr, i64, i64 } %t56, ptr %a57 + call void @finch_str_drop(ptr %a57) + call void @finch_str_drop(ptr %a42) + br label %endif8982 +else8981: + %t58 = load ptr, ptr %a1 + %t59 = load %S.ast.Type, ptr %a2 + %t60 = call { ptr, i64, i64 } @finch.gen.llty(ptr %t58, %S.ast.Type %t59) + store { ptr, i64, i64 } %t60, ptr %a61 + %t62 = load ptr, ptr %a1 + %t63 = load { ptr, i64, i64 }, ptr %a61 + %t64 = call { ptr, i64, i64 } @finch.gen.load(ptr %t62, { ptr, i64, i64 } %t63, { ptr, i64, i64 } { ptr @.str.5902, i64 2, i64 0 }) + store { ptr, i64, i64 } %t64, ptr %a65 + %t66 = load ptr, ptr %a1 + %t67 = load { ptr, i64, i64 }, ptr %a61 + %t68 = call { ptr, i64, i64 } @finch.gen.load(ptr %t66, { ptr, i64, i64 } %t67, { ptr, i64, i64 } { ptr @.str.5903, i64 2, i64 0 }) + store { ptr, i64, i64 } %t68, ptr %a69 + store { ptr, i64, i64 } { ptr @.str.5904, i64 0, i64 0 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.5905, i64 0, i64 0 }, ptr %a71 + %t72 = load %S.ast.Type, ptr %a2 + %t73 = call i1 @finch.gen.isFloat(%S.ast.Type %t72) + br i1 %t73, label %then8983, label %else8984 +then8983: + %t74 = load ptr, ptr %a1 + %t75 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.5906, i64 9, i64 0 }, ptr %a77 + store { ptr, i64, i64 } %t75, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.5907, i64 1, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + %t85 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t84, ptr %a87 + store { ptr, i64, i64 } %t85, ptr %a88 + call void @finch_str_concat(ptr %a86, ptr %a87, ptr %a88) + store { ptr, i64, i64 } %t84, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t90, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.5908, i64 2, i64 0 }, ptr %a93 + call void @finch_str_concat(ptr %a91, ptr %a92, ptr %a93) + store { ptr, i64, i64 } %t90, ptr %a94 + call void @finch_str_drop(ptr %a94) + %t95 = load { ptr, i64, i64 }, ptr %a91 + %t96 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t95, ptr %a98 + store { ptr, i64, i64 } %t96, ptr %a99 + call void @finch_str_concat(ptr %a97, ptr %a98, ptr %a99) + store { ptr, i64, i64 } %t95, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a97 + %t102 = call { ptr, i64, i64 } @finch.gen.op(ptr %t74, { ptr, i64, i64 } %t101) + store { ptr, i64, i64 } %t101, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t102, ptr %a70 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + %t106 = load ptr, ptr %a1 + %t107 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.5909, i64 9, i64 0 }, ptr %a109 + store { ptr, i64, i64 } %t107, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t111, ptr %a113 + store { ptr, i64, i64 } { ptr @.str.5910, i64 1, i64 0 }, ptr %a114 + call void @finch_str_concat(ptr %a112, ptr %a113, ptr %a114) + store { ptr, i64, i64 } %t111, ptr %a115 + call void @finch_str_drop(ptr %a115) + %t116 = load { ptr, i64, i64 }, ptr %a112 + %t117 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t116, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t116, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t122, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.5911, i64 2, i64 0 }, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + store { ptr, i64, i64 } %t122, ptr %a126 + call void @finch_str_drop(ptr %a126) + %t127 = load { ptr, i64, i64 }, ptr %a123 + %t128 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t127, ptr %a130 + store { ptr, i64, i64 } %t128, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + store { ptr, i64, i64 } %t127, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a129 + %t134 = call { ptr, i64, i64 } @finch.gen.op(ptr %t106, { ptr, i64, i64 } %t133) + store { ptr, i64, i64 } %t133, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t134, ptr %a71 + store { ptr, i64, i64 } %t136, ptr %a137 + call void @finch_str_drop(ptr %a137) + br label %endif8985 +else8984: + %t138 = load ptr, ptr %a1 + %t139 = load %S.ast.Type, ptr %a2 + %t140 = call i1 @finch.gen.isSigned(%S.ast.Type %t139) + %t141 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5913, i64 1, i64 0 }, i1 %t140) + store { ptr, i64, i64 } { ptr @.str.5912, i64 5, i64 0 }, ptr %a143 + store { ptr, i64, i64 } %t141, ptr %a144 + call void @finch_str_concat(ptr %a142, ptr %a143, ptr %a144) + store { ptr, i64, i64 } %t141, ptr %a145 + call void @finch_str_drop(ptr %a145) + %t146 = load { ptr, i64, i64 }, ptr %a142 + store { ptr, i64, i64 } %t146, ptr %a148 + store { ptr, i64, i64 } { ptr @.str.5914, i64 1, i64 0 }, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t146, ptr %a150 + call void @finch_str_drop(ptr %a150) + %t151 = load { ptr, i64, i64 }, ptr %a147 + %t152 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t151, ptr %a154 + store { ptr, i64, i64 } %t152, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t151, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + store { ptr, i64, i64 } %t157, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.5915, i64 1, i64 0 }, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t157, ptr %a161 + call void @finch_str_drop(ptr %a161) + %t162 = load { ptr, i64, i64 }, ptr %a158 + %t163 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t162, ptr %a165 + store { ptr, i64, i64 } %t163, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t162, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + store { ptr, i64, i64 } %t168, ptr %a170 + store { ptr, i64, i64 } { ptr @.str.5916, i64 2, i64 0 }, ptr %a171 + call void @finch_str_concat(ptr %a169, ptr %a170, ptr %a171) + store { ptr, i64, i64 } %t168, ptr %a172 + call void @finch_str_drop(ptr %a172) + %t173 = load { ptr, i64, i64 }, ptr %a169 + %t174 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t173, ptr %a176 + store { ptr, i64, i64 } %t174, ptr %a177 + call void @finch_str_concat(ptr %a175, ptr %a176, ptr %a177) + store { ptr, i64, i64 } %t173, ptr %a178 + call void @finch_str_drop(ptr %a178) + %t179 = load { ptr, i64, i64 }, ptr %a175 + %t180 = call { ptr, i64, i64 } @finch.gen.op(ptr %t138, { ptr, i64, i64 } %t179) + store { ptr, i64, i64 } %t179, ptr %a181 + call void @finch_str_drop(ptr %a181) + %t182 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t180, ptr %a70 + store { ptr, i64, i64 } %t182, ptr %a183 + call void @finch_str_drop(ptr %a183) + %t184 = load ptr, ptr %a1 + %t185 = load %S.ast.Type, ptr %a2 + %t186 = call i1 @finch.gen.isSigned(%S.ast.Type %t185) + %t187 = call { ptr, i64, i64 } @finch.gen.intPred({ ptr, i64, i64 } { ptr @.str.5918, i64 1, i64 0 }, i1 %t186) + store { ptr, i64, i64 } { ptr @.str.5917, i64 5, i64 0 }, ptr %a189 + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + store { ptr, i64, i64 } %t187, ptr %a191 + call void @finch_str_drop(ptr %a191) + %t192 = load { ptr, i64, i64 }, ptr %a188 + store { ptr, i64, i64 } %t192, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.5919, i64 1, i64 0 }, ptr %a195 + call void @finch_str_concat(ptr %a193, ptr %a194, ptr %a195) + store { ptr, i64, i64 } %t192, ptr %a196 + call void @finch_str_drop(ptr %a196) + %t197 = load { ptr, i64, i64 }, ptr %a193 + %t198 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t197, ptr %a200 + store { ptr, i64, i64 } %t198, ptr %a201 + call void @finch_str_concat(ptr %a199, ptr %a200, ptr %a201) + store { ptr, i64, i64 } %t197, ptr %a202 + call void @finch_str_drop(ptr %a202) + %t203 = load { ptr, i64, i64 }, ptr %a199 + store { ptr, i64, i64 } %t203, ptr %a205 + store { ptr, i64, i64 } { ptr @.str.5920, i64 1, i64 0 }, ptr %a206 + call void @finch_str_concat(ptr %a204, ptr %a205, ptr %a206) + store { ptr, i64, i64 } %t203, ptr %a207 + call void @finch_str_drop(ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a204 + %t209 = load { ptr, i64, i64 }, ptr %a65 + store { ptr, i64, i64 } %t208, ptr %a211 + store { ptr, i64, i64 } %t209, ptr %a212 + call void @finch_str_concat(ptr %a210, ptr %a211, ptr %a212) + store { ptr, i64, i64 } %t208, ptr %a213 + call void @finch_str_drop(ptr %a213) + %t214 = load { ptr, i64, i64 }, ptr %a210 + store { ptr, i64, i64 } %t214, ptr %a216 + store { ptr, i64, i64 } { ptr @.str.5921, i64 2, i64 0 }, ptr %a217 + call void @finch_str_concat(ptr %a215, ptr %a216, ptr %a217) + store { ptr, i64, i64 } %t214, ptr %a218 + call void @finch_str_drop(ptr %a218) + %t219 = load { ptr, i64, i64 }, ptr %a215 + %t220 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t219, ptr %a222 + store { ptr, i64, i64 } %t220, ptr %a223 + call void @finch_str_concat(ptr %a221, ptr %a222, ptr %a223) + store { ptr, i64, i64 } %t219, ptr %a224 + call void @finch_str_drop(ptr %a224) + %t225 = load { ptr, i64, i64 }, ptr %a221 + %t226 = call { ptr, i64, i64 } @finch.gen.op(ptr %t184, { ptr, i64, i64 } %t225) + store { ptr, i64, i64 } %t225, ptr %a227 + call void @finch_str_drop(ptr %a227) + %t228 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } %t226, ptr %a71 + store { ptr, i64, i64 } %t228, ptr %a229 + call void @finch_str_drop(ptr %a229) + br label %endif8985 +endif8985: + %t230 = load ptr, ptr %a1 + %t231 = load ptr, ptr %a1 + %t232 = load { ptr, i64, i64 }, ptr %a71 + store { ptr, i64, i64 } { ptr @.str.5923, i64 8, i64 0 }, ptr %a234 + store { ptr, i64, i64 } %t232, ptr %a235 + call void @finch_str_concat(ptr %a233, ptr %a234, ptr %a235) + %t236 = load { ptr, i64, i64 }, ptr %a233 + store { ptr, i64, i64 } %t236, ptr %a238 + store { ptr, i64, i64 } { ptr @.str.5924, i64 7, i64 0 }, ptr %a239 + call void @finch_str_concat(ptr %a237, ptr %a238, ptr %a239) + store { ptr, i64, i64 } %t236, ptr %a240 + call void @finch_str_drop(ptr %a240) + %t241 = load { ptr, i64, i64 }, ptr %a237 + %t242 = call { ptr, i64, i64 } @finch.gen.op(ptr %t231, { ptr, i64, i64 } %t241) + store { ptr, i64, i64 } %t241, ptr %a243 + call void @finch_str_drop(ptr %a243) + store { ptr, i64, i64 } { ptr @.str.5922, i64 8, i64 0 }, ptr %a245 + store { ptr, i64, i64 } %t242, ptr %a246 + call void @finch_str_concat(ptr %a244, ptr %a245, ptr %a246) + store { ptr, i64, i64 } %t242, ptr %a247 + call void @finch_str_drop(ptr %a247) + %t248 = load { ptr, i64, i64 }, ptr %a244 + store { ptr, i64, i64 } %t248, ptr %a250 + store { ptr, i64, i64 } { ptr @.str.5925, i64 2, i64 0 }, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t248, ptr %a252 + call void @finch_str_drop(ptr %a252) + %t253 = load { ptr, i64, i64 }, ptr %a249 + %t254 = load ptr, ptr %a1 + %t255 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } { ptr @.str.5926, i64 8, i64 0 }, ptr %a257 + store { ptr, i64, i64 } %t255, ptr %a258 + call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) + %t259 = load { ptr, i64, i64 }, ptr %a256 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.5927, i64 7, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + store { ptr, i64, i64 } %t259, ptr %a263 + call void @finch_str_drop(ptr %a263) + %t264 = load { ptr, i64, i64 }, ptr %a260 + %t265 = call { ptr, i64, i64 } @finch.gen.op(ptr %t254, { ptr, i64, i64 } %t264) + store { ptr, i64, i64 } %t264, ptr %a266 + call void @finch_str_drop(ptr %a266) + store { ptr, i64, i64 } %t253, ptr %a268 + store { ptr, i64, i64 } %t265, ptr %a269 + call void @finch_str_concat(ptr %a267, ptr %a268, ptr %a269) + store { ptr, i64, i64 } %t253, ptr %a270 + call void @finch_str_drop(ptr %a270) + store { ptr, i64, i64 } %t265, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load { ptr, i64, i64 }, ptr %a267 + %t273 = call { ptr, i64, i64 } @finch.gen.op(ptr %t230, { ptr, i64, i64 } %t272) + store { ptr, i64, i64 } %t272, ptr %a274 + call void @finch_str_drop(ptr %a274) + %t275 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t273, ptr %a33 + store { ptr, i64, i64 } %t275, ptr %a276 + call void @finch_str_drop(ptr %a276) + call void @finch_str_drop(ptr %a71) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a69) + call void @finch_str_drop(ptr %a65) + call void @finch_str_drop(ptr %a61) + br label %endif8982 +endif8982: + %t277 = load ptr, ptr %a1 + %t278 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.5928, i64 8, i64 0 }, ptr %a280 + store { ptr, i64, i64 } %t278, ptr %a281 + call void @finch_str_concat(ptr %a279, ptr %a280, ptr %a281) + %t282 = load { ptr, i64, i64 }, ptr %a279 + call void @finch.gen.emit(ptr %t277, { ptr, i64, i64 } %t282) + store { ptr, i64, i64 } %t282, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load ptr, ptr %a1 + %t285 = load %S.gen.Saved, ptr %a32 + %t286 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } { ptr @.str.5929, i64 20, i64 0 }, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + %t290 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t290, ptr %a292 + store { ptr, i64, i64 } { ptr @.str.5930, i64 16, i64 0 }, ptr %a293 + call void @finch_str_concat(ptr %a291, ptr %a292, ptr %a293) + store { ptr, i64, i64 } %t290, ptr %a294 + call void @finch_str_drop(ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a291 + call void @finch.gen.endHelper(ptr %t284, %S.gen.Saved %t285, { ptr, i64, i64 } %t295) + store { ptr, i64, i64 } %t295, ptr %a296 + call void @finch_str_drop(ptr %a296) + %t297 = load { ptr, i64, i64 }, ptr %a10 + call void @finch_str_drop(ptr %a33) + call void @finch.drop.S_gen_Saved(ptr %a32) + ret { ptr, i64, i64 } %t297 +} + +define internal %S.gen.Val @finch.gen.strMethod(ptr %p0, %S.ast.Node %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.ast.Node, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca %S.gen.Val, align 16 + %a54 = alloca %S.ast.Type, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca %S.gen.Val, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca %S.gen.Val, align 16 + %a81 = alloca %S.ast.Type, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca %S.gen.Val, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca %S.gen.Val, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a319 = alloca { ptr, i64, i64 }, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a328 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a333 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a358 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca %S.gen.Val, align 16 + %a446 = alloca i64, align 16 + %a458 = alloca %S.gen.Val, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a476 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a481 = alloca { ptr, i64, i64 }, align 16 + %a482 = alloca { ptr, i64, i64 }, align 16 + %a483 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a504 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a541 = alloca %S.gen.Val, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a551 = alloca { ptr, i64, i64 }, align 16 + %a552 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a555 = alloca { ptr, i64, i64 }, align 16 + %a556 = alloca { ptr, i64, i64 }, align 16 + %a557 = alloca { ptr, i64, i64 }, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a561 = alloca { ptr, i64, i64 }, align 16 + %a562 = alloca { ptr, i64, i64 }, align 16 + %a563 = alloca { ptr, i64, i64 }, align 16 + %a564 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a568 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a573 = alloca { ptr, i64, i64 }, align 16 + %a574 = alloca { ptr, i64, i64 }, align 16 + %a575 = alloca { ptr, i64, i64 }, align 16 + %a577 = alloca { ptr, i64, i64 }, align 16 + %a578 = alloca { ptr, i64, i64 }, align 16 + %a579 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a591 = alloca %S.ast.Type, align 16 + %a595 = alloca { ptr, i64, i64 }, align 16 + %a596 = alloca { ptr, i64, i64 }, align 16 + %a620 = alloca %S.gen.Val, align 16 + %a621 = alloca %S.ast.Type, align 16 + %a623 = alloca { ptr, i64, i64 }, align 16 + %a624 = alloca { ptr, i64, i64 }, align 16 + %a626 = alloca %S.gen.Val, align 16 + %a627 = alloca { ptr, i64, i64 }, align 16 + %a630 = alloca { ptr, i64, i64 }, align 16 + %a631 = alloca { ptr, i64, i64 }, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a634 = alloca { ptr, i64, i64 }, align 16 + %a635 = alloca { ptr, i64, i64 }, align 16 + %a636 = alloca { ptr, i64, i64 }, align 16 + %a637 = alloca { ptr, i64, i64 }, align 16 + %a640 = alloca { ptr, i64, i64 }, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a642 = alloca { ptr, i64, i64 }, align 16 + %a643 = alloca { ptr, i64, i64 }, align 16 + %a645 = alloca { ptr, i64, i64 }, align 16 + %a646 = alloca { ptr, i64, i64 }, align 16 + %a647 = alloca { ptr, i64, i64 }, align 16 + %a648 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca { ptr, i64, i64 }, align 16 + %a652 = alloca { ptr, i64, i64 }, align 16 + %a653 = alloca { ptr, i64, i64 }, align 16 + %a654 = alloca { ptr, i64, i64 }, align 16 + %a656 = alloca { ptr, i64, i64 }, align 16 + %a657 = alloca { ptr, i64, i64 }, align 16 + %a658 = alloca { ptr, i64, i64 }, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a661 = alloca { ptr, i64, i64 }, align 16 + %a670 = alloca { ptr, i64, i64 }, align 16 + %a671 = alloca { ptr, i64, i64 }, align 16 + %a678 = alloca { ptr, i64, i64 }, align 16 + %a681 = alloca { ptr, i64, i64 }, align 16 + %a682 = alloca { ptr, i64, i64 }, align 16 + %a683 = alloca { ptr, i64, i64 }, align 16 + %a685 = alloca { ptr, i64, i64 }, align 16 + %a686 = alloca { ptr, i64, i64 }, align 16 + %a687 = alloca { ptr, i64, i64 }, align 16 + %a688 = alloca { ptr, i64, i64 }, align 16 + %a691 = alloca { ptr, i64, i64 }, align 16 + %a692 = alloca { ptr, i64, i64 }, align 16 + %a693 = alloca { ptr, i64, i64 }, align 16 + %a694 = alloca { ptr, i64, i64 }, align 16 + %a696 = alloca { ptr, i64, i64 }, align 16 + %a697 = alloca { ptr, i64, i64 }, align 16 + %a698 = alloca { ptr, i64, i64 }, align 16 + %a699 = alloca { ptr, i64, i64 }, align 16 + %a701 = alloca { ptr, i64, i64 }, align 16 + %a708 = alloca %S.ast.Type, align 16 + %a714 = alloca { ptr, i64, i64 }, align 16 + %a715 = alloca { ptr, i64, i64 }, align 16 + %a716 = alloca { ptr, i64, i64 }, align 16 + %a718 = alloca { ptr, i64, i64 }, align 16 + %a719 = alloca { ptr, i64, i64 }, align 16 + %a720 = alloca { ptr, i64, i64 }, align 16 + %a721 = alloca { ptr, i64, i64 }, align 16 + %a723 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.ast.Node %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 1 + %t5 = load { ptr, i64, i64 }, ptr %t4 + store { ptr, i64, i64 } %t5, ptr %a6 + call void @finch_str_copy(ptr %a7, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load ptr, ptr %a1 + %t11 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t10) + store { ptr, i64, i64 } %t11, ptr %a12 + %t13 = load ptr, ptr %a1 + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic8986, label %ok8987 +panic8986: + call void @finch_panic(ptr @.str.5931, i64 5616, ptr @.str.5932) + unreachable +ok8987: + %t16 = getelementptr inbounds %S.gen.Gen, ptr %t14, i32 0, i32 1 + %t17 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 13 + %t18 = load i64, ptr %t17 + %t19 = load { ptr, i64, i64 }, ptr %t16 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range8988, label %inrange8989 +range8988: + call void @finch_panic_index(ptr @.str.5933, i64 5616, i64 %t18, i64 %t20) + unreachable +inrange8989: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 + %t24 = load { ptr, i64, i64 }, ptr %t23 + %t25 = call { ptr, i64, i64 } @finch.gen.strGlobal(ptr %t13, { ptr, i64, i64 } %t24) + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.5934, i64 3, i64 0 }, ptr %a29 + %t30 = call i32 @finch_str_eq(ptr %a28, ptr %a29) + %t31 = icmp ne i32 %t30, 0 + br i1 %t31, label %then8990, label %endif8992 +then8990: + %t32 = load ptr, ptr %a1 + %t33 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t32, %S.ast.Node %t33, i64 2) + %t34 = load ptr, ptr %a1 + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t37 = load { ptr, i64, i64 }, ptr %t36 + %t38 = extractvalue { ptr, i64, i64 } %t37, 1 + %t39 = icmp uge i64 1, %t38 + br i1 %t39, label %range8993, label %inrange8994 +range8993: + call void @finch_panic_index(ptr @.str.5935, i64 5619, i64 1, i64 %t38) + unreachable +inrange8994: + %t40 = extractvalue { ptr, i64, i64 } %t37, 0 + %t41 = getelementptr inbounds %S.ast.Node, ptr %t40, i64 1 + %t42 = load %S.ast.Node, ptr %t41 + %t43 = call %S.gen.Val @finch.gen.expr(ptr %t35, %S.ast.Node %t42) + %t44 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5936, i64 3, i64 0 }) + %t45 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t46 = load { ptr, i64, i64 }, ptr %t45 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 1, %t47 + br i1 %t48, label %range8995, label %inrange8996 +range8995: + call void @finch_panic_index(ptr @.str.5937, i64 5619, i64 1, i64 %t47) + unreachable +inrange8996: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds %S.ast.Node, ptr %t49, i64 1 + %t51 = load %S.ast.Node, ptr %t50 + %t52 = call %S.gen.Val @finch.gen.coerce(ptr %t34, %S.gen.Val %t43, %S.ast.Type %t44, %S.ast.Node %t51, { ptr, i64, i64 } { ptr @.str.5938, i64 9, i64 0 }) + store %S.gen.Val %t43, ptr %a53 + call void @finch.drop.S_gen_Val(ptr %a53) + store %S.ast.Type %t44, ptr %a54 + call void @finch.drop.S_ast_Type(ptr %a54) + %t55 = extractvalue %S.gen.Val %t52, 0 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_copy(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + store %S.gen.Val %t52, ptr %a59 + call void @finch.drop.S_gen_Val(ptr %a59) + store { ptr, i64, i64 } %t58, ptr %a60 + %t61 = load ptr, ptr %a1 + %t62 = load ptr, ptr %a1 + %t63 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = extractvalue { ptr, i64, i64 } %t64, 1 + %t66 = icmp uge i64 2, %t65 + br i1 %t66, label %range8997, label %inrange8998 +range8997: + call void @finch_panic_index(ptr @.str.5939, i64 5620, i64 2, i64 %t65) + unreachable +inrange8998: + %t67 = extractvalue { ptr, i64, i64 } %t64, 0 + %t68 = getelementptr inbounds %S.ast.Node, ptr %t67, i64 2 + %t69 = load %S.ast.Node, ptr %t68 + %t70 = call %S.gen.Val @finch.gen.expr(ptr %t62, %S.ast.Node %t69) + %t71 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5940, i64 3, i64 0 }) + %t72 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t73 = load { ptr, i64, i64 }, ptr %t72 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 2, %t74 + br i1 %t75, label %range8999, label %inrange9000 +range8999: + call void @finch_panic_index(ptr @.str.5941, i64 5620, i64 2, i64 %t74) + unreachable +inrange9000: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds %S.ast.Node, ptr %t76, i64 2 + %t78 = load %S.ast.Node, ptr %t77 + %t79 = call %S.gen.Val @finch.gen.coerce(ptr %t61, %S.gen.Val %t70, %S.ast.Type %t71, %S.ast.Node %t78, { ptr, i64, i64 } { ptr @.str.5942, i64 7, i64 0 }) + store %S.gen.Val %t70, ptr %a80 + call void @finch.drop.S_gen_Val(ptr %a80) + store %S.ast.Type %t71, ptr %a81 + call void @finch.drop.S_ast_Type(ptr %a81) + %t82 = extractvalue %S.gen.Val %t79, 0 + store { ptr, i64, i64 } %t82, ptr %a83 + call void @finch_str_copy(ptr %a84, ptr %a83) + %t85 = load { ptr, i64, i64 }, ptr %a84 + store %S.gen.Val %t79, ptr %a86 + call void @finch.drop.S_gen_Val(ptr %a86) + store { ptr, i64, i64 } %t85, ptr %a87 + %t88 = load ptr, ptr %a1 + %t89 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.5943, i64 29, i64 0 }, ptr %a91 + store { ptr, i64, i64 } %t89, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.5944, i64 6, i64 0 }, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + %t99 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t98, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + store { ptr, i64, i64 } %t98, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t104, ptr %a106 + store { ptr, i64, i64 } { ptr @.str.5945, i64 6, i64 0 }, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t104, ptr %a108 + call void @finch_str_drop(ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a105 + %t110 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t109, ptr %a112 + store { ptr, i64, i64 } %t110, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t109, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + store { ptr, i64, i64 } %t115, ptr %a117 + store { ptr, i64, i64 } { ptr @.str.5946, i64 6, i64 0 }, ptr %a118 + call void @finch_str_concat(ptr %a116, ptr %a117, ptr %a118) + store { ptr, i64, i64 } %t115, ptr %a119 + call void @finch_str_drop(ptr %a119) + %t120 = load { ptr, i64, i64 }, ptr %a116 + %t121 = load { ptr, i64, i64 }, ptr %a87 + store { ptr, i64, i64 } %t120, ptr %a123 + store { ptr, i64, i64 } %t121, ptr %a124 + call void @finch_str_concat(ptr %a122, ptr %a123, ptr %a124) + store { ptr, i64, i64 } %t120, ptr %a125 + call void @finch_str_drop(ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t126, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.5947, i64 6, i64 0 }, ptr %a129 + call void @finch_str_concat(ptr %a127, ptr %a128, ptr %a129) + store { ptr, i64, i64 } %t126, ptr %a130 + call void @finch_str_drop(ptr %a130) + %t131 = load { ptr, i64, i64 }, ptr %a127 + %t132 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t131, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t131, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.5948, i64 6, i64 0 }, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t137, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + %t143 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 11 + %t144 = load i64, ptr %t143 + call void @finch_str_from_int(ptr %a145, i64 %t144) + %t146 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t142, ptr %a148 + store { ptr, i64, i64 } %t146, ptr %a149 + call void @finch_str_concat(ptr %a147, ptr %a148, ptr %a149) + store { ptr, i64, i64 } %t142, ptr %a150 + call void @finch_str_drop(ptr %a150) + store { ptr, i64, i64 } %t146, ptr %a151 + call void @finch_str_drop(ptr %a151) + %t152 = load { ptr, i64, i64 }, ptr %a147 + store { ptr, i64, i64 } %t152, ptr %a154 + store { ptr, i64, i64 } { ptr @.str.5949, i64 1, i64 0 }, ptr %a155 + call void @finch_str_concat(ptr %a153, ptr %a154, ptr %a155) + store { ptr, i64, i64 } %t152, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a153 + call void @finch.gen.emit(ptr %t88, { ptr, i64, i64 } %t157) + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load ptr, ptr %a1 + %t160 = load { ptr, i64, i64 }, ptr %a12 + %t161 = call { ptr, i64, i64 } @finch.gen.load(ptr %t159, { ptr, i64, i64 } { ptr @.str.5950, i64 17, i64 0 }, { ptr, i64, i64 } %t160) + %t162 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t161, 0 + %t163 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5951, i64 3, i64 0 }) + %t164 = insertvalue %S.gen.Val %t162, %S.ast.Type %t163, 1 + %t165 = insertvalue %S.gen.Val %t164, i1 true, 2 + call void @finch_str_drop(ptr %a87) + call void @finch_str_drop(ptr %a60) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t165 +endif8992: + %t166 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t166, ptr %a167 + store { ptr, i64, i64 } { ptr @.str.5952, i64 4, i64 0 }, ptr %a168 + %t169 = call i32 @finch_str_eq(ptr %a167, ptr %a168) + %t170 = icmp ne i32 %t169, 0 + br label %logic.from9001 +logic.from9001: + br i1 %t170, label %logic.end9003, label %logic.rhs9002 +logic.rhs9002: + %t171 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.5953, i64 8, i64 0 }, ptr %a173 + %t174 = call i32 @finch_str_eq(ptr %a172, ptr %a173) + %t175 = icmp ne i32 %t174, 0 + br label %logic.rend9004 +logic.rend9004: + br label %logic.end9003 +logic.end9003: + %t176 = phi i1 [ true, %logic.from9001 ], [ %t175, %logic.rend9004 ] + br label %logic.from9005 +logic.from9005: + br i1 %t176, label %logic.end9007, label %logic.rhs9006 +logic.rhs9006: + %t177 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t177, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.5954, i64 11, i64 0 }, ptr %a179 + %t180 = call i32 @finch_str_eq(ptr %a178, ptr %a179) + %t181 = icmp ne i32 %t180, 0 + br label %logic.rend9008 +logic.rend9008: + br label %logic.end9007 +logic.end9007: + %t182 = phi i1 [ true, %logic.from9005 ], [ %t181, %logic.rend9008 ] + br label %logic.from9009 +logic.from9009: + br i1 %t182, label %logic.end9011, label %logic.rhs9010 +logic.rhs9010: + %t183 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t183, ptr %a184 + store { ptr, i64, i64 } { ptr @.str.5955, i64 9, i64 0 }, ptr %a185 + %t186 = call i32 @finch_str_eq(ptr %a184, ptr %a185) + %t187 = icmp ne i32 %t186, 0 + br label %logic.rend9012 +logic.rend9012: + br label %logic.end9011 +logic.end9011: + %t188 = phi i1 [ true, %logic.from9009 ], [ %t187, %logic.rend9012 ] + br i1 %t188, label %then9013, label %endif9015 +then9013: + %t189 = load ptr, ptr %a1 + %t190 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t189, %S.ast.Node %t190, i64 1) + %t191 = load ptr, ptr %a1 + %t192 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t193 = load { ptr, i64, i64 }, ptr %t192 + %t194 = extractvalue { ptr, i64, i64 } %t193, 1 + %t195 = icmp uge i64 1, %t194 + br i1 %t195, label %range9016, label %inrange9017 +range9016: + call void @finch_panic_index(ptr @.str.5956, i64 5626, i64 1, i64 %t194) + unreachable +inrange9017: + %t196 = extractvalue { ptr, i64, i64 } %t193, 0 + %t197 = getelementptr inbounds %S.ast.Node, ptr %t196, i64 1 + %t198 = load %S.ast.Node, ptr %t197 + %t199 = call %S.gen.Val @finch.gen.strArg(ptr %t191, %S.ast.Node %t198, { ptr, i64, i64 } { ptr @.str.5957, i64 20, i64 0 }) + store %S.gen.Val %t199, ptr %a200 + %t201 = load ptr, ptr %a1 + %t202 = load %S.gen.Val, ptr %a200 + %t203 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t201, %S.gen.Val %t202) + store { ptr, i64, i64 } %t203, ptr %a204 + %t205 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t205, ptr %a206 + store { ptr, i64, i64 } { ptr @.str.5958, i64 4, i64 0 }, ptr %a207 + %t208 = call i32 @finch_str_eq(ptr %a206, ptr %a207) + %t209 = icmp ne i32 %t208, 0 + br i1 %t209, label %then9018, label %endif9020 +then9018: + %t210 = load ptr, ptr %a1 + %t211 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5959, i64 29, i64 0 }, ptr %a213 + store { ptr, i64, i64 } %t211, ptr %a214 + call void @finch_str_concat(ptr %a212, ptr %a213, ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a212 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.5960, i64 6, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load { ptr, i64, i64 }, ptr %a216 + %t221 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t220, ptr %a223 + store { ptr, i64, i64 } %t221, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t220, ptr %a225 + call void @finch_str_drop(ptr %a225) + %t226 = load { ptr, i64, i64 }, ptr %a222 + store { ptr, i64, i64 } %t226, ptr %a228 + store { ptr, i64, i64 } { ptr @.str.5961, i64 1, i64 0 }, ptr %a229 + call void @finch_str_concat(ptr %a227, ptr %a228, ptr %a229) + store { ptr, i64, i64 } %t226, ptr %a230 + call void @finch_str_drop(ptr %a230) + %t231 = load { ptr, i64, i64 }, ptr %a227 + %t232 = call { ptr, i64, i64 } @finch.gen.op(ptr %t210, { ptr, i64, i64 } %t231) + store { ptr, i64, i64 } %t231, ptr %a233 + call void @finch_str_drop(ptr %a233) + store { ptr, i64, i64 } %t232, ptr %a234 + %t235 = load ptr, ptr %a1 + %t236 = load %S.gen.Val, ptr %a200 + call void @finch.gen.release(ptr %t235, %S.gen.Val %t236) + %t237 = load { ptr, i64, i64 }, ptr %a234 + store { ptr, i64, i64 } %t237, ptr %a238 + call void @finch_str_copy(ptr %a239, ptr %a238) + %t240 = load { ptr, i64, i64 }, ptr %a239 + %t241 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t240, 0 + %t242 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5962, i64 3, i64 0 }) + %t243 = insertvalue %S.gen.Val %t241, %S.ast.Type %t242, 1 + call void @finch_str_drop(ptr %a234) + call void @finch_str_drop(ptr %a204) + call void @finch.drop.S_gen_Val(ptr %a200) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t243 +endif9020: + %t244 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t244, ptr %a245 + store { ptr, i64, i64 } { ptr @.str.5963, i64 8, i64 0 }, ptr %a246 + %t247 = call i32 @finch_str_eq(ptr %a245, ptr %a246) + %t248 = icmp ne i32 %t247, 0 + br i1 %t248, label %then9021, label %endif9023 +then9021: + %t249 = load ptr, ptr %a1 + %t250 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.5964, i64 29, i64 0 }, ptr %a252 + store { ptr, i64, i64 } %t250, ptr %a253 + call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a251 + store { ptr, i64, i64 } %t254, ptr %a256 + store { ptr, i64, i64 } { ptr @.str.5965, i64 6, i64 0 }, ptr %a257 + call void @finch_str_concat(ptr %a255, ptr %a256, ptr %a257) + store { ptr, i64, i64 } %t254, ptr %a258 + call void @finch_str_drop(ptr %a258) + %t259 = load { ptr, i64, i64 }, ptr %a255 + %t260 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t259, ptr %a262 + store { ptr, i64, i64 } %t260, ptr %a263 + call void @finch_str_concat(ptr %a261, ptr %a262, ptr %a263) + store { ptr, i64, i64 } %t259, ptr %a264 + call void @finch_str_drop(ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a261 + store { ptr, i64, i64 } %t265, ptr %a267 + store { ptr, i64, i64 } { ptr @.str.5966, i64 1, i64 0 }, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t265, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + %t271 = call { ptr, i64, i64 } @finch.gen.op(ptr %t249, { ptr, i64, i64 } %t270) + store { ptr, i64, i64 } %t270, ptr %a272 + call void @finch_str_drop(ptr %a272) + store { ptr, i64, i64 } %t271, ptr %a273 + %t274 = load ptr, ptr %a1 + %t275 = load { ptr, i64, i64 }, ptr %a273 + store { ptr, i64, i64 } { ptr @.str.5967, i64 13, i64 0 }, ptr %a277 + store { ptr, i64, i64 } %t275, ptr %a278 + call void @finch_str_concat(ptr %a276, ptr %a277, ptr %a278) + %t279 = load { ptr, i64, i64 }, ptr %a276 + store { ptr, i64, i64 } %t279, ptr %a281 + store { ptr, i64, i64 } { ptr @.str.5968, i64 3, i64 0 }, ptr %a282 + call void @finch_str_concat(ptr %a280, ptr %a281, ptr %a282) + store { ptr, i64, i64 } %t279, ptr %a283 + call void @finch_str_drop(ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a280 + %t285 = call { ptr, i64, i64 } @finch.gen.op(ptr %t274, { ptr, i64, i64 } %t284) + store { ptr, i64, i64 } %t284, ptr %a286 + call void @finch_str_drop(ptr %a286) + store { ptr, i64, i64 } %t285, ptr %a287 + %t288 = load ptr, ptr %a1 + %t289 = load %S.gen.Val, ptr %a200 + call void @finch.gen.release(ptr %t288, %S.gen.Val %t289) + %t290 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_copy(ptr %a292, ptr %a291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + %t294 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t293, 0 + %t295 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5969, i64 4, i64 0 }) + %t296 = insertvalue %S.gen.Val %t294, %S.ast.Type %t295, 1 + call void @finch_str_drop(ptr %a287) + call void @finch_str_drop(ptr %a273) + call void @finch_str_drop(ptr %a204) + call void @finch.drop.S_gen_Val(ptr %a200) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t296 +endif9023: + store { ptr, i64, i64 } { ptr @.str.5970, i64 17, i64 0 }, ptr %a297 + %t298 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t298, ptr %a299 + store { ptr, i64, i64 } { ptr @.str.5971, i64 9, i64 0 }, ptr %a300 + %t301 = call i32 @finch_str_eq(ptr %a299, ptr %a300) + %t302 = icmp ne i32 %t301, 0 + br i1 %t302, label %then9024, label %endif9026 +then9024: + %t303 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.5972, i64 15, i64 0 }, ptr %a297 + store { ptr, i64, i64 } %t303, ptr %a304 + call void @finch_str_drop(ptr %a304) + br label %endif9026 +endif9026: + %t305 = load ptr, ptr %a1 + %t306 = load { ptr, i64, i64 }, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.5973, i64 9, i64 0 }, ptr %a308 + store { ptr, i64, i64 } %t306, ptr %a309 + call void @finch_str_concat(ptr %a307, ptr %a308, ptr %a309) + %t310 = load { ptr, i64, i64 }, ptr %a307 + store { ptr, i64, i64 } %t310, ptr %a312 + store { ptr, i64, i64 } { ptr @.str.5974, i64 5, i64 0 }, ptr %a313 + call void @finch_str_concat(ptr %a311, ptr %a312, ptr %a313) + store { ptr, i64, i64 } %t310, ptr %a314 + call void @finch_str_drop(ptr %a314) + %t315 = load { ptr, i64, i64 }, ptr %a311 + %t316 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t315, ptr %a318 + store { ptr, i64, i64 } %t316, ptr %a319 + call void @finch_str_concat(ptr %a317, ptr %a318, ptr %a319) + store { ptr, i64, i64 } %t315, ptr %a320 + call void @finch_str_drop(ptr %a320) + %t321 = load { ptr, i64, i64 }, ptr %a317 + store { ptr, i64, i64 } %t321, ptr %a323 + store { ptr, i64, i64 } { ptr @.str.5975, i64 6, i64 0 }, ptr %a324 + call void @finch_str_concat(ptr %a322, ptr %a323, ptr %a324) + store { ptr, i64, i64 } %t321, ptr %a325 + call void @finch_str_drop(ptr %a325) + %t326 = load { ptr, i64, i64 }, ptr %a322 + %t327 = load { ptr, i64, i64 }, ptr %a204 + store { ptr, i64, i64 } %t326, ptr %a329 + store { ptr, i64, i64 } %t327, ptr %a330 + call void @finch_str_concat(ptr %a328, ptr %a329, ptr %a330) + store { ptr, i64, i64 } %t326, ptr %a331 + call void @finch_str_drop(ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a328 + store { ptr, i64, i64 } %t332, ptr %a334 + store { ptr, i64, i64 } { ptr @.str.5976, i64 1, i64 0 }, ptr %a335 + call void @finch_str_concat(ptr %a333, ptr %a334, ptr %a335) + store { ptr, i64, i64 } %t332, ptr %a336 + call void @finch_str_drop(ptr %a336) + %t337 = load { ptr, i64, i64 }, ptr %a333 + %t338 = call { ptr, i64, i64 } @finch.gen.op(ptr %t305, { ptr, i64, i64 } %t337) + store { ptr, i64, i64 } %t337, ptr %a339 + call void @finch_str_drop(ptr %a339) + store { ptr, i64, i64 } %t338, ptr %a340 + %t341 = load ptr, ptr %a1 + %t342 = load { ptr, i64, i64 }, ptr %a340 + store { ptr, i64, i64 } { ptr @.str.5977, i64 12, i64 0 }, ptr %a344 + store { ptr, i64, i64 } %t342, ptr %a345 + call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) + %t346 = load { ptr, i64, i64 }, ptr %a343 + store { ptr, i64, i64 } %t346, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.5978, i64 3, i64 0 }, ptr %a349 + call void @finch_str_concat(ptr %a347, ptr %a348, ptr %a349) + store { ptr, i64, i64 } %t346, ptr %a350 + call void @finch_str_drop(ptr %a350) + %t351 = load { ptr, i64, i64 }, ptr %a347 + %t352 = call { ptr, i64, i64 } @finch.gen.op(ptr %t341, { ptr, i64, i64 } %t351) + store { ptr, i64, i64 } %t351, ptr %a353 + call void @finch_str_drop(ptr %a353) + store { ptr, i64, i64 } %t352, ptr %a354 + %t355 = load ptr, ptr %a1 + %t356 = load %S.gen.Val, ptr %a200 + call void @finch.gen.release(ptr %t355, %S.gen.Val %t356) + %t357 = load { ptr, i64, i64 }, ptr %a354 + store { ptr, i64, i64 } %t357, ptr %a358 + call void @finch_str_copy(ptr %a359, ptr %a358) + %t360 = load { ptr, i64, i64 }, ptr %a359 + %t361 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t360, 0 + %t362 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5979, i64 4, i64 0 }) + %t363 = insertvalue %S.gen.Val %t361, %S.ast.Type %t362, 1 + call void @finch_str_drop(ptr %a354) + call void @finch_str_drop(ptr %a340) + call void @finch_str_drop(ptr %a297) + call void @finch_str_drop(ptr %a204) + call void @finch.drop.S_gen_Val(ptr %a200) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t363 +endif9015: + %t364 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t364, ptr %a365 + store { ptr, i64, i64 } { ptr @.str.5980, i64 4, i64 0 }, ptr %a366 + %t367 = call i32 @finch_str_eq(ptr %a365, ptr %a366) + %t368 = icmp ne i32 %t367, 0 + br label %logic.from9027 +logic.from9027: + br i1 %t368, label %logic.end9029, label %logic.rhs9028 +logic.rhs9028: + %t369 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t369, ptr %a370 + store { ptr, i64, i64 } { ptr @.str.5981, i64 5, i64 0 }, ptr %a371 + %t372 = call i32 @finch_str_eq(ptr %a370, ptr %a371) + %t373 = icmp ne i32 %t372, 0 + br label %logic.rend9030 +logic.rend9030: + br label %logic.end9029 +logic.end9029: + %t374 = phi i1 [ true, %logic.from9027 ], [ %t373, %logic.rend9030 ] + br label %logic.from9031 +logic.from9031: + br i1 %t374, label %logic.end9033, label %logic.rhs9032 +logic.rhs9032: + %t375 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t375, ptr %a376 + store { ptr, i64, i64 } { ptr @.str.5982, i64 5, i64 0 }, ptr %a377 + %t378 = call i32 @finch_str_eq(ptr %a376, ptr %a377) + %t379 = icmp ne i32 %t378, 0 + br label %logic.rend9034 +logic.rend9034: + br label %logic.end9033 +logic.end9033: + %t380 = phi i1 [ true, %logic.from9031 ], [ %t379, %logic.rend9034 ] + br i1 %t380, label %then9035, label %endif9037 +then9035: + %t381 = load ptr, ptr %a1 + %t382 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t381, %S.ast.Node %t382, i64 0) + %t383 = load ptr, ptr %a1 + %t384 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.5983, i64 21, i64 0 }, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + %t388 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t388, ptr %a390 + store { ptr, i64, i64 } { ptr @.str.5984, i64 5, i64 0 }, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t388, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + %t394 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t393, ptr %a396 + store { ptr, i64, i64 } %t394, ptr %a397 + call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) + store { ptr, i64, i64 } %t393, ptr %a398 + call void @finch_str_drop(ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a395 + store { ptr, i64, i64 } %t399, ptr %a401 + store { ptr, i64, i64 } { ptr @.str.5985, i64 6, i64 0 }, ptr %a402 + call void @finch_str_concat(ptr %a400, ptr %a401, ptr %a402) + store { ptr, i64, i64 } %t399, ptr %a403 + call void @finch_str_drop(ptr %a403) + %t404 = load { ptr, i64, i64 }, ptr %a400 + %t405 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t404, ptr %a407 + store { ptr, i64, i64 } %t405, ptr %a408 + call void @finch_str_concat(ptr %a406, ptr %a407, ptr %a408) + store { ptr, i64, i64 } %t404, ptr %a409 + call void @finch_str_drop(ptr %a409) + %t410 = load { ptr, i64, i64 }, ptr %a406 + store { ptr, i64, i64 } %t410, ptr %a412 + store { ptr, i64, i64 } { ptr @.str.5986, i64 1, i64 0 }, ptr %a413 + call void @finch_str_concat(ptr %a411, ptr %a412, ptr %a413) + store { ptr, i64, i64 } %t410, ptr %a414 + call void @finch_str_drop(ptr %a414) + %t415 = load { ptr, i64, i64 }, ptr %a411 + call void @finch.gen.emit(ptr %t383, { ptr, i64, i64 } %t415) + store { ptr, i64, i64 } %t415, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = load ptr, ptr %a1 + %t418 = load { ptr, i64, i64 }, ptr %a12 + %t419 = call { ptr, i64, i64 } @finch.gen.load(ptr %t417, { ptr, i64, i64 } { ptr @.str.5987, i64 17, i64 0 }, { ptr, i64, i64 } %t418) + %t420 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t419, 0 + %t421 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.5988, i64 3, i64 0 }) + %t422 = insertvalue %S.gen.Val %t420, %S.ast.Type %t421, 1 + %t423 = insertvalue %S.gen.Val %t422, i1 true, 2 + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t423 +endif9037: + %t424 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t424, ptr %a425 + store { ptr, i64, i64 } { ptr @.str.5989, i64 7, i64 0 }, ptr %a426 + %t427 = call i32 @finch_str_eq(ptr %a425, ptr %a426) + %t428 = icmp ne i32 %t427, 0 + br i1 %t428, label %then9038, label %endif9040 +then9038: + %t429 = load ptr, ptr %a1 + %t430 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t429, %S.ast.Node %t430, i64 2) + %t431 = load ptr, ptr %a1 + %t432 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t433 = load { ptr, i64, i64 }, ptr %t432 + %t434 = extractvalue { ptr, i64, i64 } %t433, 1 + %t435 = icmp uge i64 1, %t434 + br i1 %t435, label %range9041, label %inrange9042 +range9041: + call void @finch_panic_index(ptr @.str.5990, i64 5655, i64 1, i64 %t434) + unreachable +inrange9042: + %t436 = extractvalue { ptr, i64, i64 } %t433, 0 + %t437 = getelementptr inbounds %S.ast.Node, ptr %t436, i64 1 + %t438 = load %S.ast.Node, ptr %t437 + %t439 = call %S.gen.Val @finch.gen.strArg(ptr %t431, %S.ast.Node %t438, { ptr, i64, i64 } { ptr @.str.5991, i64 19, i64 0 }) + store %S.gen.Val %t439, ptr %a440 + %t441 = load ptr, ptr %a1 + %t442 = icmp eq ptr %t441, null + br i1 %t442, label %panic9043, label %ok9044 +panic9043: + call void @finch_panic(ptr @.str.5992, i64 5656, ptr @.str.5993) + unreachable +ok9044: + %t443 = getelementptr inbounds %S.gen.Gen, ptr %t441, i32 0, i32 11 + %t444 = getelementptr inbounds { ptr, i64, i64 }, ptr %t443, i32 0, i32 1 + %t445 = load i64, ptr %t444 + store i64 %t445, ptr %a446 + %t447 = load ptr, ptr %a1 + %t448 = load %S.gen.Val, ptr %a440 + call void @finch.gen.hold(ptr %t447, %S.gen.Val %t448) + %t449 = load ptr, ptr %a1 + %t450 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t451 = load { ptr, i64, i64 }, ptr %t450 + %t452 = extractvalue { ptr, i64, i64 } %t451, 1 + %t453 = icmp uge i64 2, %t452 + br i1 %t453, label %range9045, label %inrange9046 +range9045: + call void @finch_panic_index(ptr @.str.5994, i64 5658, i64 2, i64 %t452) + unreachable +inrange9046: + %t454 = extractvalue { ptr, i64, i64 } %t451, 0 + %t455 = getelementptr inbounds %S.ast.Node, ptr %t454, i64 2 + %t456 = load %S.ast.Node, ptr %t455 + %t457 = call %S.gen.Val @finch.gen.strArg(ptr %t449, %S.ast.Node %t456, { ptr, i64, i64 } { ptr @.str.5995, i64 12, i64 0 }) + store %S.gen.Val %t457, ptr %a458 + %t459 = load ptr, ptr %a1 + %t460 = load i64, ptr %a446 + call void @finch.gen.heldEnd(ptr %t459, i64 %t460) + %t461 = load ptr, ptr %a1 + %t462 = load %S.gen.Val, ptr %a440 + %t463 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t461, %S.gen.Val %t462) + store { ptr, i64, i64 } %t463, ptr %a464 + %t465 = load ptr, ptr %a1 + %t466 = load %S.gen.Val, ptr %a458 + %t467 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t465, %S.gen.Val %t466) + store { ptr, i64, i64 } %t467, ptr %a468 + %t469 = load ptr, ptr %a1 + %t470 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.5996, i64 33, i64 0 }, ptr %a472 + store { ptr, i64, i64 } %t470, ptr %a473 + call void @finch_str_concat(ptr %a471, ptr %a472, ptr %a473) + %t474 = load { ptr, i64, i64 }, ptr %a471 + store { ptr, i64, i64 } %t474, ptr %a476 + store { ptr, i64, i64 } { ptr @.str.5997, i64 6, i64 0 }, ptr %a477 + call void @finch_str_concat(ptr %a475, ptr %a476, ptr %a477) + store { ptr, i64, i64 } %t474, ptr %a478 + call void @finch_str_drop(ptr %a478) + %t479 = load { ptr, i64, i64 }, ptr %a475 + %t480 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t479, ptr %a482 + store { ptr, i64, i64 } %t480, ptr %a483 + call void @finch_str_concat(ptr %a481, ptr %a482, ptr %a483) + store { ptr, i64, i64 } %t479, ptr %a484 + call void @finch_str_drop(ptr %a484) + %t485 = load { ptr, i64, i64 }, ptr %a481 + store { ptr, i64, i64 } %t485, ptr %a487 + store { ptr, i64, i64 } { ptr @.str.5998, i64 6, i64 0 }, ptr %a488 + call void @finch_str_concat(ptr %a486, ptr %a487, ptr %a488) + store { ptr, i64, i64 } %t485, ptr %a489 + call void @finch_str_drop(ptr %a489) + %t490 = load { ptr, i64, i64 }, ptr %a486 + %t491 = load { ptr, i64, i64 }, ptr %a464 + store { ptr, i64, i64 } %t490, ptr %a493 + store { ptr, i64, i64 } %t491, ptr %a494 + call void @finch_str_concat(ptr %a492, ptr %a493, ptr %a494) + store { ptr, i64, i64 } %t490, ptr %a495 + call void @finch_str_drop(ptr %a495) + %t496 = load { ptr, i64, i64 }, ptr %a492 + store { ptr, i64, i64 } %t496, ptr %a498 + store { ptr, i64, i64 } { ptr @.str.5999, i64 6, i64 0 }, ptr %a499 + call void @finch_str_concat(ptr %a497, ptr %a498, ptr %a499) + store { ptr, i64, i64 } %t496, ptr %a500 + call void @finch_str_drop(ptr %a500) + %t501 = load { ptr, i64, i64 }, ptr %a497 + %t502 = load { ptr, i64, i64 }, ptr %a468 + store { ptr, i64, i64 } %t501, ptr %a504 + store { ptr, i64, i64 } %t502, ptr %a505 + call void @finch_str_concat(ptr %a503, ptr %a504, ptr %a505) + store { ptr, i64, i64 } %t501, ptr %a506 + call void @finch_str_drop(ptr %a506) + %t507 = load { ptr, i64, i64 }, ptr %a503 + store { ptr, i64, i64 } %t507, ptr %a509 + store { ptr, i64, i64 } { ptr @.str.6000, i64 1, i64 0 }, ptr %a510 + call void @finch_str_concat(ptr %a508, ptr %a509, ptr %a510) + store { ptr, i64, i64 } %t507, ptr %a511 + call void @finch_str_drop(ptr %a511) + %t512 = load { ptr, i64, i64 }, ptr %a508 + call void @finch.gen.emit(ptr %t469, { ptr, i64, i64 } %t512) + store { ptr, i64, i64 } %t512, ptr %a513 + call void @finch_str_drop(ptr %a513) + %t514 = load ptr, ptr %a1 + %t515 = load %S.gen.Val, ptr %a440 + call void @finch.gen.release(ptr %t514, %S.gen.Val %t515) + %t516 = load ptr, ptr %a1 + %t517 = load %S.gen.Val, ptr %a458 + call void @finch.gen.release(ptr %t516, %S.gen.Val %t517) + %t518 = load ptr, ptr %a1 + %t519 = load { ptr, i64, i64 }, ptr %a12 + %t520 = call { ptr, i64, i64 } @finch.gen.load(ptr %t518, { ptr, i64, i64 } { ptr @.str.6001, i64 17, i64 0 }, { ptr, i64, i64 } %t519) + %t521 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t520, 0 + %t522 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6002, i64 3, i64 0 }) + %t523 = insertvalue %S.gen.Val %t521, %S.ast.Type %t522, 1 + %t524 = insertvalue %S.gen.Val %t523, i1 true, 2 + call void @finch_str_drop(ptr %a468) + call void @finch_str_drop(ptr %a464) + call void @finch.drop.S_gen_Val(ptr %a458) + call void @finch.drop.S_gen_Val(ptr %a440) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t524 +endif9040: + %t525 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t525, ptr %a526 + store { ptr, i64, i64 } { ptr @.str.6003, i64 5, i64 0 }, ptr %a527 + %t528 = call i32 @finch_str_eq(ptr %a526, ptr %a527) + %t529 = icmp ne i32 %t528, 0 + br i1 %t529, label %then9047, label %endif9049 +then9047: + %t530 = load ptr, ptr %a1 + %t531 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t530, %S.ast.Node %t531, i64 1) + %t532 = load ptr, ptr %a1 + %t533 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t534 = load { ptr, i64, i64 }, ptr %t533 + %t535 = extractvalue { ptr, i64, i64 } %t534, 1 + %t536 = icmp uge i64 1, %t535 + br i1 %t536, label %range9050, label %inrange9051 +range9050: + call void @finch_panic_index(ptr @.str.6004, i64 5669, i64 1, i64 %t535) + unreachable +inrange9051: + %t537 = extractvalue { ptr, i64, i64 } %t534, 0 + %t538 = getelementptr inbounds %S.ast.Node, ptr %t537, i64 1 + %t539 = load %S.ast.Node, ptr %t538 + %t540 = call %S.gen.Val @finch.gen.strArg(ptr %t532, %S.ast.Node %t539, { ptr, i64, i64 } { ptr @.str.6005, i64 13, i64 0 }) + store %S.gen.Val %t540, ptr %a541 + %t542 = load ptr, ptr %a1 + %t543 = load %S.gen.Val, ptr %a541 + %t544 = call { ptr, i64, i64 } @finch.gen.spill(ptr %t542, %S.gen.Val %t543) + store { ptr, i64, i64 } %t544, ptr %a545 + %t546 = load ptr, ptr %a1 + %t547 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t546) + store { ptr, i64, i64 } %t547, ptr %a548 + %t549 = load ptr, ptr %a1 + %t550 = load { ptr, i64, i64 }, ptr %a548 + store { ptr, i64, i64 } { ptr @.str.6006, i64 31, i64 0 }, ptr %a552 + store { ptr, i64, i64 } %t550, ptr %a553 + call void @finch_str_concat(ptr %a551, ptr %a552, ptr %a553) + %t554 = load { ptr, i64, i64 }, ptr %a551 + store { ptr, i64, i64 } %t554, ptr %a556 + store { ptr, i64, i64 } { ptr @.str.6007, i64 6, i64 0 }, ptr %a557 + call void @finch_str_concat(ptr %a555, ptr %a556, ptr %a557) + store { ptr, i64, i64 } %t554, ptr %a558 + call void @finch_str_drop(ptr %a558) + %t559 = load { ptr, i64, i64 }, ptr %a555 + %t560 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t559, ptr %a562 + store { ptr, i64, i64 } %t560, ptr %a563 + call void @finch_str_concat(ptr %a561, ptr %a562, ptr %a563) + store { ptr, i64, i64 } %t559, ptr %a564 + call void @finch_str_drop(ptr %a564) + %t565 = load { ptr, i64, i64 }, ptr %a561 + store { ptr, i64, i64 } %t565, ptr %a567 + store { ptr, i64, i64 } { ptr @.str.6008, i64 6, i64 0 }, ptr %a568 + call void @finch_str_concat(ptr %a566, ptr %a567, ptr %a568) + store { ptr, i64, i64 } %t565, ptr %a569 + call void @finch_str_drop(ptr %a569) + %t570 = load { ptr, i64, i64 }, ptr %a566 + %t571 = load { ptr, i64, i64 }, ptr %a545 + store { ptr, i64, i64 } %t570, ptr %a573 + store { ptr, i64, i64 } %t571, ptr %a574 + call void @finch_str_concat(ptr %a572, ptr %a573, ptr %a574) + store { ptr, i64, i64 } %t570, ptr %a575 + call void @finch_str_drop(ptr %a575) + %t576 = load { ptr, i64, i64 }, ptr %a572 + store { ptr, i64, i64 } %t576, ptr %a578 + store { ptr, i64, i64 } { ptr @.str.6009, i64 1, i64 0 }, ptr %a579 + call void @finch_str_concat(ptr %a577, ptr %a578, ptr %a579) + store { ptr, i64, i64 } %t576, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = load { ptr, i64, i64 }, ptr %a577 + call void @finch.gen.emit(ptr %t549, { ptr, i64, i64 } %t581) + store { ptr, i64, i64 } %t581, ptr %a582 + call void @finch_str_drop(ptr %a582) + %t583 = load ptr, ptr %a1 + %t584 = load %S.gen.Val, ptr %a541 + call void @finch.gen.release(ptr %t583, %S.gen.Val %t584) + %t585 = load ptr, ptr %a1 + %t586 = load { ptr, i64, i64 }, ptr %a548 + %t587 = call { ptr, i64, i64 } @finch.gen.load(ptr %t585, { ptr, i64, i64 } { ptr @.str.6010, i64 17, i64 0 }, { ptr, i64, i64 } %t586) + %t588 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t587, 0 + %t589 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6011, i64 3, i64 0 }) + %t590 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t589) + store %S.ast.Type %t589, ptr %a591 + call void @finch.drop.S_ast_Type(ptr %a591) + %t592 = insertvalue %S.gen.Val %t588, %S.ast.Type %t590, 1 + %t593 = insertvalue %S.gen.Val %t592, i1 true, 2 + call void @finch_str_drop(ptr %a548) + call void @finch_str_drop(ptr %a545) + call void @finch.drop.S_gen_Val(ptr %a541) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t593 +endif9049: + %t594 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t594, ptr %a595 + store { ptr, i64, i64 } { ptr @.str.6012, i64 6, i64 0 }, ptr %a596 + %t597 = call i32 @finch_str_eq(ptr %a595, ptr %a596) + %t598 = icmp ne i32 %t597, 0 + br i1 %t598, label %then9052, label %endif9054 +then9052: + %t599 = load ptr, ptr %a1 + %t600 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t599, %S.ast.Node %t600, i64 1) + %t601 = load ptr, ptr %a1 + %t602 = load ptr, ptr %a1 + %t603 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t604 = load { ptr, i64, i64 }, ptr %t603 + %t605 = extractvalue { ptr, i64, i64 } %t604, 1 + %t606 = icmp uge i64 1, %t605 + br i1 %t606, label %range9055, label %inrange9056 +range9055: + call void @finch_panic_index(ptr @.str.6013, i64 5678, i64 1, i64 %t605) + unreachable +inrange9056: + %t607 = extractvalue { ptr, i64, i64 } %t604, 0 + %t608 = getelementptr inbounds %S.ast.Node, ptr %t607, i64 1 + %t609 = load %S.ast.Node, ptr %t608 + %t610 = call %S.gen.Val @finch.gen.expr(ptr %t602, %S.ast.Node %t609) + %t611 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6014, i64 3, i64 0 }) + %t612 = getelementptr inbounds %S.ast.Node, ptr %a2, i32 0, i32 9 + %t613 = load { ptr, i64, i64 }, ptr %t612 + %t614 = extractvalue { ptr, i64, i64 } %t613, 1 + %t615 = icmp uge i64 1, %t614 + br i1 %t615, label %range9057, label %inrange9058 +range9057: + call void @finch_panic_index(ptr @.str.6015, i64 5678, i64 1, i64 %t614) + unreachable +inrange9058: + %t616 = extractvalue { ptr, i64, i64 } %t613, 0 + %t617 = getelementptr inbounds %S.ast.Node, ptr %t616, i64 1 + %t618 = load %S.ast.Node, ptr %t617 + %t619 = call %S.gen.Val @finch.gen.coerce(ptr %t601, %S.gen.Val %t610, %S.ast.Type %t611, %S.ast.Node %t618, { ptr, i64, i64 } { ptr @.str.6016, i64 9, i64 0 }) + store %S.gen.Val %t610, ptr %a620 + call void @finch.drop.S_gen_Val(ptr %a620) + store %S.ast.Type %t611, ptr %a621 + call void @finch.drop.S_ast_Type(ptr %a621) + %t622 = extractvalue %S.gen.Val %t619, 0 + store { ptr, i64, i64 } %t622, ptr %a623 + call void @finch_str_copy(ptr %a624, ptr %a623) + %t625 = load { ptr, i64, i64 }, ptr %a624 + store %S.gen.Val %t619, ptr %a626 + call void @finch.drop.S_gen_Val(ptr %a626) + store { ptr, i64, i64 } %t625, ptr %a627 + %t628 = load ptr, ptr %a1 + %t629 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.6017, i64 32, i64 0 }, ptr %a631 + store { ptr, i64, i64 } %t629, ptr %a632 + call void @finch_str_concat(ptr %a630, ptr %a631, ptr %a632) + %t633 = load { ptr, i64, i64 }, ptr %a630 + store { ptr, i64, i64 } %t633, ptr %a635 + store { ptr, i64, i64 } { ptr @.str.6018, i64 6, i64 0 }, ptr %a636 + call void @finch_str_concat(ptr %a634, ptr %a635, ptr %a636) + store { ptr, i64, i64 } %t633, ptr %a637 + call void @finch_str_drop(ptr %a637) + %t638 = load { ptr, i64, i64 }, ptr %a634 + %t639 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t638, ptr %a641 + store { ptr, i64, i64 } %t639, ptr %a642 + call void @finch_str_concat(ptr %a640, ptr %a641, ptr %a642) + store { ptr, i64, i64 } %t638, ptr %a643 + call void @finch_str_drop(ptr %a643) + %t644 = load { ptr, i64, i64 }, ptr %a640 + store { ptr, i64, i64 } %t644, ptr %a646 + store { ptr, i64, i64 } { ptr @.str.6019, i64 6, i64 0 }, ptr %a647 + call void @finch_str_concat(ptr %a645, ptr %a646, ptr %a647) + store { ptr, i64, i64 } %t644, ptr %a648 + call void @finch_str_drop(ptr %a648) + %t649 = load { ptr, i64, i64 }, ptr %a645 + %t650 = load { ptr, i64, i64 }, ptr %a627 + store { ptr, i64, i64 } %t649, ptr %a652 + store { ptr, i64, i64 } %t650, ptr %a653 + call void @finch_str_concat(ptr %a651, ptr %a652, ptr %a653) + store { ptr, i64, i64 } %t649, ptr %a654 + call void @finch_str_drop(ptr %a654) + %t655 = load { ptr, i64, i64 }, ptr %a651 + store { ptr, i64, i64 } %t655, ptr %a657 + store { ptr, i64, i64 } { ptr @.str.6020, i64 1, i64 0 }, ptr %a658 + call void @finch_str_concat(ptr %a656, ptr %a657, ptr %a658) + store { ptr, i64, i64 } %t655, ptr %a659 + call void @finch_str_drop(ptr %a659) + %t660 = load { ptr, i64, i64 }, ptr %a656 + call void @finch.gen.emit(ptr %t628, { ptr, i64, i64 } %t660) + store { ptr, i64, i64 } %t660, ptr %a661 + call void @finch_str_drop(ptr %a661) + %t662 = load ptr, ptr %a1 + %t663 = load { ptr, i64, i64 }, ptr %a12 + %t664 = call { ptr, i64, i64 } @finch.gen.load(ptr %t662, { ptr, i64, i64 } { ptr @.str.6021, i64 17, i64 0 }, { ptr, i64, i64 } %t663) + %t665 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t664, 0 + %t666 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6022, i64 3, i64 0 }) + %t667 = insertvalue %S.gen.Val %t665, %S.ast.Type %t666, 1 + %t668 = insertvalue %S.gen.Val %t667, i1 true, 2 + call void @finch_str_drop(ptr %a627) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t668 +endif9054: + %t669 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t669, ptr %a670 + store { ptr, i64, i64 } { ptr @.str.6023, i64 5, i64 0 }, ptr %a671 + %t672 = call i32 @finch_str_eq(ptr %a670, ptr %a671) + %t673 = icmp ne i32 %t672, 0 + br i1 %t673, label %then9059, label %endif9061 +then9059: + %t674 = load ptr, ptr %a1 + %t675 = load %S.ast.Node, ptr %a2 + call void @finch.gen.need(ptr %t674, %S.ast.Node %t675, i64 0) + %t676 = load ptr, ptr %a1 + %t677 = call { ptr, i64, i64 } @finch.gen.strOut(ptr %t676) + store { ptr, i64, i64 } %t677, ptr %a678 + %t679 = load ptr, ptr %a1 + %t680 = load { ptr, i64, i64 }, ptr %a678 + store { ptr, i64, i64 } { ptr @.str.6024, i64 36, i64 0 }, ptr %a682 + store { ptr, i64, i64 } %t680, ptr %a683 + call void @finch_str_concat(ptr %a681, ptr %a682, ptr %a683) + %t684 = load { ptr, i64, i64 }, ptr %a681 + store { ptr, i64, i64 } %t684, ptr %a686 + store { ptr, i64, i64 } { ptr @.str.6025, i64 6, i64 0 }, ptr %a687 + call void @finch_str_concat(ptr %a685, ptr %a686, ptr %a687) + store { ptr, i64, i64 } %t684, ptr %a688 + call void @finch_str_drop(ptr %a688) + %t689 = load { ptr, i64, i64 }, ptr %a685 + %t690 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t689, ptr %a692 + store { ptr, i64, i64 } %t690, ptr %a693 + call void @finch_str_concat(ptr %a691, ptr %a692, ptr %a693) + store { ptr, i64, i64 } %t689, ptr %a694 + call void @finch_str_drop(ptr %a694) + %t695 = load { ptr, i64, i64 }, ptr %a691 + store { ptr, i64, i64 } %t695, ptr %a697 + store { ptr, i64, i64 } { ptr @.str.6026, i64 1, i64 0 }, ptr %a698 + call void @finch_str_concat(ptr %a696, ptr %a697, ptr %a698) + store { ptr, i64, i64 } %t695, ptr %a699 + call void @finch_str_drop(ptr %a699) + %t700 = load { ptr, i64, i64 }, ptr %a696 + call void @finch.gen.emit(ptr %t679, { ptr, i64, i64 } %t700) + store { ptr, i64, i64 } %t700, ptr %a701 + call void @finch_str_drop(ptr %a701) + %t702 = load ptr, ptr %a1 + %t703 = load { ptr, i64, i64 }, ptr %a678 + %t704 = call { ptr, i64, i64 } @finch.gen.load(ptr %t702, { ptr, i64, i64 } { ptr @.str.6027, i64 17, i64 0 }, { ptr, i64, i64 } %t703) + %t705 = insertvalue %S.gen.Val zeroinitializer, { ptr, i64, i64 } %t704, 0 + %t706 = call %S.ast.Type @finch.gen.T({ ptr, i64, i64 } { ptr @.str.6028, i64 2, i64 0 }) + %t707 = call %S.ast.Type @finch.ast.arrayOf(%S.ast.Type %t706) + store %S.ast.Type %t706, ptr %a708 + call void @finch.drop.S_ast_Type(ptr %a708) + %t709 = insertvalue %S.gen.Val %t705, %S.ast.Type %t707, 1 + %t710 = insertvalue %S.gen.Val %t709, i1 true, 2 + call void @finch_str_drop(ptr %a678) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val %t710 +endif9061: + %t711 = load ptr, ptr %a1 + %t712 = load %S.ast.Node, ptr %a2 + %t713 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6029, i64 21, i64 0 }, ptr %a715 + store { ptr, i64, i64 } %t713, ptr %a716 + call void @finch_str_concat(ptr %a714, ptr %a715, ptr %a716) + %t717 = load { ptr, i64, i64 }, ptr %a714 + store { ptr, i64, i64 } %t717, ptr %a719 + store { ptr, i64, i64 } { ptr @.str.6030, i64 106, i64 0 }, ptr %a720 + call void @finch_str_concat(ptr %a718, ptr %a719, ptr %a720) + store { ptr, i64, i64 } %t717, ptr %a721 + call void @finch_str_drop(ptr %a721) + %t722 = load { ptr, i64, i64 }, ptr %a718 + call void @finch.gen.fail(ptr %t711, %S.ast.Node %t712, { ptr, i64, i64 } %t722) + store { ptr, i64, i64 } %t722, ptr %a723 + call void @finch_str_drop(ptr %a723) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a12) + call void @finch_str_drop(ptr %a9) + ret %S.gen.Val zeroinitializer +} + +define internal { ptr, i64, i64 } @finch.gen.runtimeDecls() { +entry: + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %t1 = mul i64 74, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6031, i64 54, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6032, i64 65, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 + store { ptr, i64, i64 } { ptr @.str.6033, i64 29, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 + store { ptr, i64, i64 } { ptr @.str.6034, i64 38, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 + store { ptr, i64, i64 } { ptr @.str.6035, i64 33, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 + store { ptr, i64, i64 } { ptr @.str.6036, i64 33, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 + store { ptr, i64, i64 } { ptr @.str.6037, i64 33, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 + store { ptr, i64, i64 } { ptr @.str.6038, i64 32, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 + store { ptr, i64, i64 } { ptr @.str.6039, i64 45, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 + store { ptr, i64, i64 } { ptr @.str.6040, i64 35, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 + store { ptr, i64, i64 } { ptr @.str.6041, i64 36, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 + store { ptr, i64, i64 } { ptr @.str.6042, i64 42, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 + store { ptr, i64, i64 } { ptr @.str.6043, i64 37, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 + store { ptr, i64, i64 } { ptr @.str.6044, i64 38, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 + store { ptr, i64, i64 } { ptr @.str.6045, i64 42, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 + store { ptr, i64, i64 } { ptr @.str.6046, i64 38, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 + store { ptr, i64, i64 } { ptr @.str.6047, i64 37, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 + store { ptr, i64, i64 } { ptr @.str.6048, i64 42, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 + store { ptr, i64, i64 } { ptr @.str.6049, i64 42, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 + store { ptr, i64, i64 } { ptr @.str.6050, i64 34, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 + store { ptr, i64, i64 } { ptr @.str.6051, i64 42, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 + store { ptr, i64, i64 } { ptr @.str.6052, i64 43, i64 0 }, ptr %t24 + %t25 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 22 + store { ptr, i64, i64 } { ptr @.str.6053, i64 47, i64 0 }, ptr %t25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 23 + store { ptr, i64, i64 } { ptr @.str.6054, i64 50, i64 0 }, ptr %t26 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 24 + store { ptr, i64, i64 } { ptr @.str.6055, i64 43, i64 0 }, ptr %t27 + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 25 + store { ptr, i64, i64 } { ptr @.str.6056, i64 44, i64 0 }, ptr %t28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 26 + store { ptr, i64, i64 } { ptr @.str.6057, i64 49, i64 0 }, ptr %t29 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 27 + store { ptr, i64, i64 } { ptr @.str.6058, i64 57, i64 0 }, ptr %t30 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 28 + store { ptr, i64, i64 } { ptr @.str.6059, i64 37, i64 0 }, ptr %t31 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 29 + store { ptr, i64, i64 } { ptr @.str.6060, i64 39, i64 0 }, ptr %t32 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 30 + store { ptr, i64, i64 } { ptr @.str.6061, i64 37, i64 0 }, ptr %t33 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 31 + store { ptr, i64, i64 } { ptr @.str.6062, i64 38, i64 0 }, ptr %t34 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 32 + store { ptr, i64, i64 } { ptr @.str.6063, i64 39, i64 0 }, ptr %t35 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 33 + store { ptr, i64, i64 } { ptr @.str.6064, i64 39, i64 0 }, ptr %t36 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 34 + store { ptr, i64, i64 } { ptr @.str.6065, i64 51, i64 0 }, ptr %t37 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 35 + store { ptr, i64, i64 } { ptr @.str.6066, i64 44, i64 0 }, ptr %t38 + %t39 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 36 + store { ptr, i64, i64 } { ptr @.str.6067, i64 43, i64 0 }, ptr %t39 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 37 + store { ptr, i64, i64 } { ptr @.str.6068, i64 45, i64 0 }, ptr %t40 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 38 + store { ptr, i64, i64 } { ptr @.str.6069, i64 44, i64 0 }, ptr %t41 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 39 + store { ptr, i64, i64 } { ptr @.str.6070, i64 52, i64 0 }, ptr %t42 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 40 + store { ptr, i64, i64 } { ptr @.str.6071, i64 57, i64 0 }, ptr %t43 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 41 + store { ptr, i64, i64 } { ptr @.str.6072, i64 48, i64 0 }, ptr %t44 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 42 + store { ptr, i64, i64 } { ptr @.str.6073, i64 34, i64 0 }, ptr %t45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 43 + store { ptr, i64, i64 } { ptr @.str.6074, i64 48, i64 0 }, ptr %t46 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 44 + store { ptr, i64, i64 } { ptr @.str.6075, i64 60, i64 0 }, ptr %t47 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 45 + store { ptr, i64, i64 } { ptr @.str.6076, i64 55, i64 0 }, ptr %t48 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 46 + store { ptr, i64, i64 } { ptr @.str.6077, i64 46, i64 0 }, ptr %t49 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 47 + store { ptr, i64, i64 } { ptr @.str.6078, i64 48, i64 0 }, ptr %t50 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 48 + store { ptr, i64, i64 } { ptr @.str.6079, i64 43, i64 0 }, ptr %t51 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 49 + store { ptr, i64, i64 } { ptr @.str.6080, i64 45, i64 0 }, ptr %t52 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 50 + store { ptr, i64, i64 } { ptr @.str.6081, i64 59, i64 0 }, ptr %t53 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 51 + store { ptr, i64, i64 } { ptr @.str.6082, i64 49, i64 0 }, ptr %t54 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 52 + store { ptr, i64, i64 } { ptr @.str.6083, i64 39, i64 0 }, ptr %t55 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 53 + store { ptr, i64, i64 } { ptr @.str.6084, i64 39, i64 0 }, ptr %t56 + %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 54 + store { ptr, i64, i64 } { ptr @.str.6085, i64 35, i64 0 }, ptr %t57 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 55 + store { ptr, i64, i64 } { ptr @.str.6086, i64 35, i64 0 }, ptr %t58 + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 56 + store { ptr, i64, i64 } { ptr @.str.6087, i64 45, i64 0 }, ptr %t59 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 57 + store { ptr, i64, i64 } { ptr @.str.6088, i64 47, i64 0 }, ptr %t60 + %t61 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 58 + store { ptr, i64, i64 } { ptr @.str.6089, i64 47, i64 0 }, ptr %t61 + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 59 + store { ptr, i64, i64 } { ptr @.str.6090, i64 48, i64 0 }, ptr %t62 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 60 + store { ptr, i64, i64 } { ptr @.str.6091, i64 44, i64 0 }, ptr %t63 + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 61 + store { ptr, i64, i64 } { ptr @.str.6092, i64 37, i64 0 }, ptr %t64 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 62 + store { ptr, i64, i64 } { ptr @.str.6093, i64 49, i64 0 }, ptr %t65 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 63 + store { ptr, i64, i64 } { ptr @.str.6094, i64 39, i64 0 }, ptr %t66 + %t67 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 64 + store { ptr, i64, i64 } { ptr @.str.6095, i64 29, i64 0 }, ptr %t67 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 65 + store { ptr, i64, i64 } { ptr @.str.6096, i64 35, i64 0 }, ptr %t68 + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 66 + store { ptr, i64, i64 } { ptr @.str.6097, i64 29, i64 0 }, ptr %t69 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 67 + store { ptr, i64, i64 } { ptr @.str.6098, i64 24, i64 0 }, ptr %t70 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 68 + store { ptr, i64, i64 } { ptr @.str.6099, i64 40, i64 0 }, ptr %t71 + %t72 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 69 + store { ptr, i64, i64 } { ptr @.str.6100, i64 33, i64 0 }, ptr %t72 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 70 + store { ptr, i64, i64 } { ptr @.str.6101, i64 34, i64 0 }, ptr %t73 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 71 + store { ptr, i64, i64 } { ptr @.str.6102, i64 44, i64 0 }, ptr %t74 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 72 + store { ptr, i64, i64 } { ptr @.str.6103, i64 32, i64 0 }, ptr %t75 + %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 73 + store { ptr, i64, i64 } { ptr @.str.6104, i64 23, i64 0 }, ptr %t76 + %t77 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t78 = insertvalue { ptr, i64, i64 } %t77, i64 74, 1 + %t79 = insertvalue { ptr, i64, i64 } %t78, i64 74, 2 + store { ptr, i64, i64 } %t79, ptr %a80 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a80, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6105, i64 1, i64 0 }, ptr %a82 + call void @finch_str_join(ptr %a83, ptr %a80, ptr %a82) + %t84 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } %t84, ptr %a86 + store { ptr, i64, i64 } { ptr @.str.6106, i64 1, i64 0 }, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + call void @finch.drop.arr_str(ptr %a80) + ret { ptr, i64, i64 } %t89 +} + +define internal { ptr, i64, i64 } @finch.gen.assemble(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6107, i64 52, i64 0 }, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic9062, label %ok9063 +panic9062: + call void @finch_panic(ptr @.str.6108, i64 5776, ptr @.str.6109) + unreachable +ok9063: + %t5 = getelementptr inbounds %S.gen.Gen, ptr %t3, i32 0, i32 31 + %t6 = getelementptr inbounds %S.platform.Target, ptr %t5, i32 0, i32 5 + %t7 = load i1, ptr %t6 + br label %logic.from9064 +logic.from9064: + br i1 %t7, label %logic.end9066, label %logic.rhs9065 +logic.rhs9065: + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic9067, label %ok9068 +panic9067: + call void @finch_panic(ptr @.str.6110, i64 5776, ptr @.str.6111) + unreachable +ok9068: + %t10 = getelementptr inbounds %S.gen.Gen, ptr %t8, i32 0, i32 31 + %t11 = getelementptr inbounds %S.platform.Target, ptr %t10, i32 0, i32 1 + %t12 = load i1, ptr %t11 + br label %logic.rend9069 +logic.rend9069: + br label %logic.end9066 +logic.end9066: + %t13 = phi i1 [ true, %logic.from9064 ], [ %t12, %logic.rend9069 ] + br i1 %t13, label %then9070, label %endif9072 +then9070: + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a16 + store { ptr, i64, i64 } { ptr @.str.6112, i64 17, i64 0 }, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a15 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic9073, label %ok9074 +panic9073: + call void @finch_panic(ptr @.str.6113, i64 5777, ptr @.str.6114) + unreachable +ok9074: + %t21 = getelementptr inbounds %S.gen.Gen, ptr %t19, i32 0, i32 31 + %t22 = getelementptr inbounds %S.platform.Target, ptr %t21, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + store { ptr, i64, i64 } %t18, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t18, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6115, i64 3, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a2 + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_str_drop(ptr %a35) + br label %endif9072 +endif9072: + %t36 = load { ptr, i64, i64 }, ptr %a2 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic9075, label %ok9076 +panic9075: + call void @finch_panic(ptr @.str.6116, i64 5779, ptr @.str.6117) + unreachable +ok9076: + %t39 = getelementptr inbounds %S.gen.Gen, ptr %t37, i32 0, i32 2 + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %t39, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6118, i64 1, i64 0 }, ptr %a41 + call void @finch_str_join(ptr %a42, ptr %t39, ptr %a41) + %t43 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t36, ptr %a45 + store { ptr, i64, i64 } %t43, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t48, ptr %a50 + store { ptr, i64, i64 } { ptr @.str.6119, i64 2, i64 0 }, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + %t54 = call { ptr, i64, i64 } @finch.gen.runtimeDecls() + store { ptr, i64, i64 } %t53, ptr %a56 + store { ptr, i64, i64 } %t54, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t53, ptr %a58 + call void @finch_str_drop(ptr %a58) + store { ptr, i64, i64 } %t54, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t60, ptr %a62 + store { ptr, i64, i64 } { ptr @.str.6120, i64 1, i64 0 }, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t60, ptr %a64 + call void @finch_str_drop(ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t65, ptr %a2 + store { ptr, i64, i64 } %t66, ptr %a67 + call void @finch_str_drop(ptr %a67) + %t68 = load ptr, ptr %a1 + %t69 = icmp eq ptr %t68, null + br i1 %t69, label %panic9077, label %ok9078 +panic9077: + call void @finch_panic(ptr @.str.6121, i64 5780, ptr @.str.6122) + unreachable +ok9078: + %t70 = getelementptr inbounds %S.gen.Gen, ptr %t68, i32 0, i32 30 + %t71 = load i1, ptr %t70 + br i1 %t71, label %then9079, label %endif9081 +then9079: + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6123, i64 62, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a73 + %t77 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t76, ptr %a2 + store { ptr, i64, i64 } %t77, ptr %a78 + call void @finch_str_drop(ptr %a78) + br label %endif9081 +endif9081: + %t79 = load { ptr, i64, i64 }, ptr %a2 + %t80 = load ptr, ptr %a1 + %t81 = icmp eq ptr %t80, null + br i1 %t81, label %panic9082, label %ok9083 +panic9082: + call void @finch_panic(ptr @.str.6124, i64 5783, ptr @.str.6125) + unreachable +ok9083: + %t82 = getelementptr inbounds %S.gen.Gen, ptr %t80, i32 0, i32 3 + %t83 = getelementptr inbounds { ptr, i64, i64 }, ptr %t82, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6126, i64 1, i64 0 }, ptr %a84 + call void @finch_str_join(ptr %a85, ptr %t82, ptr %a84) + %t86 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t79, ptr %a88 + store { ptr, i64, i64 } %t86, ptr %a89 + call void @finch_str_concat(ptr %a87, ptr %a88, ptr %a89) + store { ptr, i64, i64 } %t86, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a87 + %t92 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t91, ptr %a2 + store { ptr, i64, i64 } %t92, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load ptr, ptr %a1 + %t95 = icmp eq ptr %t94, null + br i1 %t95, label %panic9084, label %ok9085 +panic9084: + call void @finch_panic(ptr @.str.6127, i64 5784, ptr @.str.6128) + unreachable +ok9085: + %t96 = getelementptr inbounds %S.gen.Gen, ptr %t94, i32 0, i32 30 + %t97 = load i1, ptr %t96 + br i1 %t97, label %then9086, label %endif9088 +then9086: + %t98 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t98, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6129, i64 1, i64 0 }, ptr %a101 + call void @finch_str_concat(ptr %a99, ptr %a100, ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a99 + %t103 = load ptr, ptr %a1 + %t104 = call { ptr, i64, i64 } @finch.gen.dbgModule(ptr %t103) + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a105 + %t111 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t110, ptr %a2 + store { ptr, i64, i64 } %t111, ptr %a112 + call void @finch_str_drop(ptr %a112) + br label %endif9088 +endif9088: + %t113 = load { ptr, i64, i64 }, ptr %a2 + ret { ptr, i64, i64 } %t113 +} + +define internal void @finch.copy.arr_S_ast_Program(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.ast.Program, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond9089 +n.cond9089: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body9090, label %n.end9091 +n.body9090: + %t8 = getelementptr inbounds %S.ast.Program, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.ast.Program, ptr %t2, i64 %t6 + call void @finch.copy.S_ast_Program(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond9089 +n.end9091: + ret void +} + +define internal void @finch.copy.S_cimport_CFunc(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CFunc, ptr %src + store %S.cimport.CFunc %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 2 + call void @finch.copy.S_ast_Type(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_S_ast_Type(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.cimport.CFunc, ptr %dst, i32 0, i32 5 + %t11 = getelementptr inbounds %S.cimport.CFunc, ptr %src, i32 0, i32 5 + call void @finch_str_copy(ptr %t10, ptr %t11) + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CFunc(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9092 +n.cond9092: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9093, label %n.end9094 +n.body9093: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9095, label %entry.next9096 +entry.live9095: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CFunc(ptr %t17, ptr %t18) + br label %entry.next9096 +entry.next9096: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9092 +n.end9094: + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CConst(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9097 +n.cond9097: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9098, label %n.end9099 +n.body9098: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9100, label %entry.next9101 +entry.live9100: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CConst(ptr %t17, ptr %t18) + br label %entry.next9101 +entry.next9101: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9097 +n.end9099: + ret void +} + +define internal void @finch.copy.map_str_S_ast_Type(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9102 +n.cond9102: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9103, label %n.end9104 +n.body9103: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9105, label %entry.next9106 +entry.live9105: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_ast_Type(ptr %t17, ptr %t18) + br label %entry.next9106 +entry.next9106: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9102 +n.end9104: + ret void +} + +define internal void @finch.copy.map_str_S_cimport_CStruct(ptr %dst, ptr %src) { +entry: + %a3 = alloca i64, align 16 + call void @finch_map_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64)) + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9107 +n.cond9107: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9108, label %n.end9109 +n.body9108: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %src, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %dst, i32 0, i32 0 + %t10 = load ptr, ptr %t9 + %t11 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t10, i64 %t4 + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 0 + %t13 = load i64, ptr %t12 + %t14 = icmp ne i64 %t13, 0 + br i1 %t14, label %entry.live9110, label %entry.next9111 +entry.live9110: + %t15 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 1 + %t16 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 1 + call void @finch_str_copy(ptr %t15, ptr %t16) + %t17 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t11, i32 0, i32 2 + %t18 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t8, i32 0, i32 2 + call void @finch.copy.S_cimport_CStruct(ptr %t17, ptr %t18) + br label %entry.next9111 +entry.next9111: + %t19 = load i64, ptr %a3 + %t20 = add i64 %t19, 1 + store i64 %t20, ptr %a3 + br label %n.cond9107 +n.end9109: + ret void +} + +define internal void @finch.copy.S_cimport_CImports(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.cimport.CImports, ptr %src + store %S.cimport.CImports %t1, ptr %dst + %t2 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 0 + call void @finch.copy.map_str_S_cimport_CFunc(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 1 + call void @finch.copy.map_str_S_cimport_CConst(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 2 + call void @finch.copy.map_str_S_ast_Type(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 3 + call void @finch.copy.map_str_S_cimport_CStruct(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.cimport.CImports, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.cimport.CImports, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + ret void +} + +define internal void @finch.drop.arr_S_gen_Pending(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9180 +n.cond9180: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9181, label %n.end9182 +n.body9181: + %t7 = getelementptr inbounds %S.gen.Pending, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Pending(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9180 +n.end9182: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_Loop(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9183 +n.cond9183: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9184, label %n.end9185 +n.body9184: + %t7 = getelementptr inbounds %S.gen.Loop, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Loop(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9183 +n.end9185: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_FnSig(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9186 +n.cond9186: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9187, label %n.end9188 +n.body9187: + %t7 = getelementptr inbounds %S.gen.FnSig, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_FnSig(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9186 +n.end9188: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_StructDef(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9189 +n.cond9189: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9190, label %n.end9191 +n.body9190: + %t7 = getelementptr inbounds %S.gen.StructDef, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_StructDef(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9189 +n.end9191: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_Template(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9192 +n.cond9192: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9193, label %n.end9194 +n.body9193: + %t7 = getelementptr inbounds %S.gen.Template, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_Template(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9192 +n.end9194: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_EnumDef(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9195 +n.cond9195: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9196, label %n.end9197 +n.body9196: + %t7 = getelementptr inbounds %S.gen.EnumDef, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_EnumDef(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9195 +n.end9197: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.arr_S_gen_SumDef(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond9198 +n.cond9198: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body9199, label %n.end9200 +n.body9199: + %t7 = getelementptr inbounds %S.gen.SumDef, ptr %t1, i64 %t5 + call void @finch.drop.S_gen_SumDef(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond9198 +n.end9200: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.map_str_int(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9201 +n.cond9201: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9202, label %n.end9203 +n.body9202: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live9204, label %entry.next9205 +entry.live9204: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i64 }, ptr %t8, i32 0, i32 2 + br label %entry.next9205 +entry.next9205: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond9201 +n.end9203: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_gen_Gen(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_ast_Program(ptr %t1) + %t2 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_str(ptr %t2) + %t3 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_str(ptr %t3) + %t4 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_str(ptr %t5) + %t6 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 10 + call void @finch.drop.arr_S_gen_Scope(ptr %t7) + %t8 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 11 + call void @finch.drop.arr_S_gen_Pending(ptr %t8) + %t9 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 12 + call void @finch.drop.arr_S_gen_Loop(ptr %t9) + %t10 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 13 + call void @finch.drop.S_gen_FnSig(ptr %t10) + %t11 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 14 + call void @finch_str_drop(ptr %t11) + %t12 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 15 + call void @finch.drop.arr_S_gen_FnSig(ptr %t12) + %t13 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 16 + call void @finch.drop.arr_S_gen_StructDef(ptr %t13) + %t14 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 17 + call void @finch.drop.arr_S_gen_Template(ptr %t14) + %t15 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 18 + call void @finch.drop.arr_str(ptr %t15) + %t16 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 19 + call void @finch.drop.arr_S_ast_Type(ptr %t16) + %t17 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 20 + call void @finch_str_drop(ptr %t17) + %t18 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 21 + call void @finch.drop.arr_S_gen_EnumDef(ptr %t18) + %t19 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 22 + call void @finch.drop.arr_S_gen_SumDef(ptr %t19) + %t20 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 23 + call void @finch.drop.arr_str(ptr %t20) + %t21 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 24 + call void @finch.drop.arr_str(ptr %t21) + %t22 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 26 + call void @finch.drop.S_cimport_CImports(ptr %t22) + %t23 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 29 + call void @finch.drop.arr_str(ptr %t23) + %t24 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 31 + call void @finch.drop.S_platform_Target(ptr %t24) + %t25 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 32 + call void @finch_str_drop(ptr %t25) + %t26 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 33 + call void @finch.drop.arr_str(ptr %t26) + %t27 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 34 + call void @finch.drop.map_str_int(ptr %t27) + %t28 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 35 + call void @finch.drop.arr_int(ptr %t28) + %t29 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 40 + call void @finch.drop.arr_str(ptr %t29) + %t30 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 41 + call void @finch_str_drop(ptr %t30) + %t31 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 42 + call void @finch_str_drop(ptr %t31) + %t32 = getelementptr inbounds %S.gen.Gen, ptr %a, i32 0, i32 43 + call void @finch_str_drop(ptr %t32) + ret void +} + +define internal { ptr, i64, i64 } @finch.gen.generate({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, %S.cimport.CImports %p2, %S.gen.Options %p3) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca %S.cimport.CImports, align 16 + %a4 = alloca %S.gen.Options, align 16 + %a7 = alloca i1, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca %S.cimport.CImports, align 16 + %a20 = alloca %S.cimport.CImports, align 16 + %a34 = alloca %S.platform.Target, align 16 + %a35 = alloca %S.platform.Target, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca %S.gen.Gen, align 16 + %a46 = alloca ptr, align 16 + %a75 = alloca i64, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca i64, align 16 + %a205 = alloca { ptr, i64, i64 }, align 16 + %a206 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca i64, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca i64, align 16 + %a269 = alloca %S.gen.FnSig, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a296 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca %S.gen.FnSig, align 16 + %a318 = alloca %S.gen.FnSig, align 16 + %a320 = alloca %S.gen.FnSig, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a326 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a332 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a419 = alloca { ptr, i64, i64 }, align 16 + %a421 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a428 = alloca { ptr, i64, i64 }, align 16 + %a429 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a434 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a439 = alloca { ptr, i64, i64 }, align 16 + %a440 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a444 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a453 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a467 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a487 = alloca { ptr, i64, i64 }, align 16 + %a489 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a498 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a502 = alloca { ptr, i64, i64 }, align 16 + %a503 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a511 = alloca { ptr, i64, i64 }, align 16 + %a512 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a514 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store %S.cimport.CImports %p2, ptr %a3 + store %S.gen.Options %p3, ptr %a4 + %t5 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 + %t6 = load i1, ptr %t5 + store i1 %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t8, ptr %a9 + call void @finch.copy.arr_S_ast_Program(ptr %a10, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + %t12 = insertvalue %S.gen.Gen zeroinitializer, { ptr, i64, i64 } %t11, 0 + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a14 + call void @finch.copy.arr_str(ptr %a15, ptr %a14) + %t16 = load { ptr, i64, i64 }, ptr %a15 + %t17 = insertvalue %S.gen.Gen %t12, { ptr, i64, i64 } %t16, 1 + %t18 = load %S.cimport.CImports, ptr %a3 + store %S.cimport.CImports %t18, ptr %a19 + call void @finch.copy.S_cimport_CImports(ptr %a20, ptr %a19) + %t21 = load %S.cimport.CImports, ptr %a20 + %t22 = insertvalue %S.gen.Gen %t17, %S.cimport.CImports %t21, 26 + %t23 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 0 + %t24 = load i1, ptr %t23 + %t25 = insertvalue %S.gen.Gen %t22, i1 %t24, 27 + %t26 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 1 + %t27 = load i1, ptr %t26 + %t28 = insertvalue %S.gen.Gen %t25, i1 %t27, 28 + %t29 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 2 + %t30 = load i1, ptr %t29 + %t31 = insertvalue %S.gen.Gen %t28, i1 %t30, 30 + %t32 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 4 + %t33 = load %S.platform.Target, ptr %t32 + store %S.platform.Target %t33, ptr %a34 + call void @finch.copy.S_platform_Target(ptr %a35, ptr %a34) + %t36 = load %S.platform.Target, ptr %a35 + %t37 = insertvalue %S.gen.Gen %t31, %S.platform.Target %t36, 31 + %t38 = getelementptr inbounds %S.gen.Options, ptr %a4, i32 0, i32 3 + %t39 = load { ptr, i64, i64 }, ptr %t38 + store { ptr, i64, i64 } %t39, ptr %a40 + call void @finch_str_copy(ptr %a41, ptr %a40) + %t42 = load { ptr, i64, i64 }, ptr %a41 + %t43 = insertvalue %S.gen.Gen %t37, { ptr, i64, i64 } %t42, 32 + %t44 = insertvalue %S.gen.Gen %t43, i64 -1, 36 + store %S.gen.Gen %t44, ptr %a45 + store ptr %a45, ptr %a46 + %t47 = load ptr, ptr %a46 + %t48 = icmp eq ptr %t47, null + br i1 %t48, label %panic9112, label %ok9113 +panic9112: + call void @finch_panic(ptr @.str.6130, i64 5794, ptr @.str.6131) + unreachable +ok9113: + %t49 = getelementptr inbounds %S.gen.Gen, ptr %t47, i32 0, i32 30 + %t50 = load i1, ptr %t49 + br i1 %t50, label %then9114, label %endif9116 +then9114: + %t51 = load ptr, ptr %a46 + %t52 = icmp eq ptr %t51, null + br i1 %t52, label %panic9117, label %ok9118 +panic9117: + call void @finch_panic(ptr @.str.6132, i64 5796, ptr @.str.6133) + unreachable +ok9118: + %t53 = getelementptr inbounds %S.gen.Gen, ptr %t51, i32 0, i32 33 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %t53, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = add i64 %t55, 1 + call void @finch_arr_reserve(ptr %t53, i64 %t56, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t57 = load ptr, ptr %t53 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i64 %t55 + store { ptr, i64, i64 } { ptr @.str.6134, i64 0, i64 0 }, ptr %t58 + store i64 %t56, ptr %t54 + %t59 = load ptr, ptr %a46 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic9119, label %ok9120 +panic9119: + call void @finch_panic(ptr @.str.6135, i64 5797, ptr @.str.6136) + unreachable +ok9120: + %t61 = getelementptr inbounds %S.gen.Gen, ptr %t59, i32 0, i32 33 + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t61, i32 0, i32 1 + %t63 = load i64, ptr %t62 + %t64 = add i64 %t63, 1 + call void @finch_arr_reserve(ptr %t61, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t65 = load ptr, ptr %t61 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 + store { ptr, i64, i64 } { ptr @.str.6137, i64 33, i64 0 }, ptr %t66 + store i64 %t64, ptr %t62 + %t67 = load ptr, ptr %a46 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic9121, label %ok9122 +panic9121: + call void @finch_panic(ptr @.str.6138, i64 5798, ptr @.str.6139) + unreachable +ok9122: + %t69 = getelementptr inbounds %S.gen.Gen, ptr %t67, i32 0, i32 33 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 + %t71 = load i64, ptr %t70 + %t72 = add i64 %t71, 1 + call void @finch_arr_reserve(ptr %t69, i64 %t72, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t73 = load ptr, ptr %t69 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %t73, i64 %t71 + store { ptr, i64, i64 } { ptr @.str.6140, i64 38, i64 0 }, ptr %t74 + store i64 %t72, ptr %t70 + store i64 0, ptr %a75 + br label %each.cond9123 +each.cond9123: + %t76 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t77 = load i64, ptr %t76 + %t78 = load i64, ptr %a75 + %t79 = icmp slt i64 %t78, %t77 + br i1 %t79, label %each.body9124, label %each.end9126 +each.body9124: + %t80 = load ptr, ptr %a2 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %t80, i64 %t78 + %t82 = load { ptr, i64, i64 }, ptr %t81 + store { ptr, i64, i64 } %t82, ptr %a83 + %t84 = load ptr, ptr %a46 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic9127, label %ok9128 +panic9127: + call void @finch_panic(ptr @.str.6141, i64 5800, ptr @.str.6142) + unreachable +ok9128: + %t86 = getelementptr inbounds %S.gen.Gen, ptr %t84, i32 0, i32 35 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i32 0, i32 1 + %t88 = load ptr, ptr %a46 + %t89 = load { ptr, i64, i64 }, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.6143, i64 19, i64 0 }, ptr %a91 + store { ptr, i64, i64 } %t89, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a90 + store { ptr, i64, i64 } %t93, ptr %a95 + store { ptr, i64, i64 } { ptr @.str.6144, i64 15, i64 0 }, ptr %a96 + call void @finch_str_concat(ptr %a94, ptr %a95, ptr %a96) + store { ptr, i64, i64 } %t93, ptr %a97 + call void @finch_str_drop(ptr %a97) + %t98 = load { ptr, i64, i64 }, ptr %a94 + %t99 = load ptr, ptr %a46 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic9129, label %ok9130 +panic9129: + call void @finch_panic(ptr @.str.6145, i64 5800, ptr @.str.6146) + unreachable +ok9130: + %t101 = getelementptr inbounds %S.gen.Gen, ptr %t99, i32 0, i32 32 + %t102 = load { ptr, i64, i64 }, ptr %t101 + store { ptr, i64, i64 } %t98, ptr %a104 + store { ptr, i64, i64 } %t102, ptr %a105 + call void @finch_str_concat(ptr %a103, ptr %a104, ptr %a105) + store { ptr, i64, i64 } %t98, ptr %a106 + call void @finch_str_drop(ptr %a106) + %t107 = load { ptr, i64, i64 }, ptr %a103 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6147, i64 2, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + store { ptr, i64, i64 } %t107, ptr %a111 + call void @finch_str_drop(ptr %a111) + %t112 = load { ptr, i64, i64 }, ptr %a108 + %t113 = call i64 @finch.gen.md(ptr %t88, { ptr, i64, i64 } %t112) + store { ptr, i64, i64 } %t112, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load i64, ptr %t87 + %t116 = add i64 %t115, 1 + call void @finch_arr_reserve(ptr %t86, i64 %t116, i64 ptrtoint (ptr getelementptr (i64, ptr null, i32 1) to i64)) + %t117 = load ptr, ptr %t86 + %t118 = getelementptr inbounds i64, ptr %t117, i64 %t115 + store i64 %t113, ptr %t118 + store i64 %t116, ptr %t87 + br label %each.step9125 +each.step9125: + %t119 = load i64, ptr %a75 + %t120 = add i64 %t119, 1 + store i64 %t120, ptr %a75 + br label %each.cond9123 +each.end9126: + %t121 = load ptr, ptr %a46 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic9131, label %ok9132 +panic9131: + call void @finch_panic(ptr @.str.6149, i64 5802, ptr @.str.6150) + unreachable +ok9132: + %t123 = getelementptr inbounds %S.gen.Gen, ptr %t121, i32 0, i32 35 + %t124 = load { ptr, i64, i64 }, ptr %t123 + %t125 = extractvalue { ptr, i64, i64 } %t124, 1 + %t126 = icmp uge i64 0, %t125 + br i1 %t126, label %range9133, label %inrange9134 +range9133: + call void @finch_panic_index(ptr @.str.6151, i64 5802, i64 0, i64 %t125) + unreachable +inrange9134: + %t127 = extractvalue { ptr, i64, i64 } %t124, 0 + %t128 = getelementptr inbounds i64, ptr %t127, i64 0 + %t129 = load i64, ptr %t128 + call void @finch_str_from_int(ptr %a130, i64 %t129) + %t131 = load { ptr, i64, i64 }, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6148, i64 52, i64 0 }, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t131, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.6152, i64 84, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = load ptr, ptr %a46 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic9135, label %ok9136 +panic9135: + call void @finch_panic(ptr @.str.6153, i64 5802, ptr @.str.6154) + unreachable +ok9136: + %t144 = getelementptr inbounds %S.gen.Gen, ptr %t142, i32 0, i32 33 + %t145 = load { ptr, i64, i64 }, ptr %t144 + %t146 = extractvalue { ptr, i64, i64 } %t145, 1 + %t147 = icmp uge i64 0, %t146 + br i1 %t147, label %range9137, label %inrange9138 +range9137: + call void @finch_panic_index(ptr @.str.6155, i64 5802, i64 0, i64 %t146) + unreachable +inrange9138: + %t148 = extractvalue { ptr, i64, i64 } %t145, 0 + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %t148, i64 0 + %t150 = load { ptr, i64, i64 }, ptr %t149 + store { ptr, i64, i64 } %t141, ptr %t149 + store { ptr, i64, i64 } %t150, ptr %a151 + call void @finch_str_drop(ptr %a151) + br label %endif9116 +endif9116: + %t152 = load ptr, ptr %a46 + call void @finch.gen.declare(ptr %t152) + %t153 = load ptr, ptr %a46 + %t154 = call i64 @finch.gen.findFn(ptr %t153, { ptr, i64, i64 } { ptr @.str.6156, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.6157, i64 4, i64 0 }) + store i64 %t154, ptr %a155 + %t156 = load i1, ptr %a7 + br i1 %t156, label %then9139, label %else9140 +then9139: + %t157 = load i64, ptr %a155 + %t158 = icmp sge i64 %t157, 0 + br i1 %t158, label %then9142, label %endif9144 +then9142: + %t159 = load ptr, ptr %a46 + %t160 = load ptr, ptr %a46 + %t161 = icmp eq ptr %t160, null + br i1 %t161, label %panic9145, label %ok9146 +panic9145: + call void @finch_panic(ptr @.str.6158, i64 5808, ptr @.str.6159) + unreachable +ok9146: + %t162 = getelementptr inbounds %S.gen.Gen, ptr %t160, i32 0, i32 0 + %t163 = load ptr, ptr %a46 + %t164 = icmp eq ptr %t163, null + br i1 %t164, label %panic9147, label %ok9148 +panic9147: + call void @finch_panic(ptr @.str.6160, i64 5808, ptr @.str.6161) + unreachable +ok9148: + %t165 = getelementptr inbounds %S.gen.Gen, ptr %t163, i32 0, i32 15 + %t166 = load i64, ptr %a155 + %t167 = load { ptr, i64, i64 }, ptr %t165 + %t168 = extractvalue { ptr, i64, i64 } %t167, 1 + %t169 = icmp uge i64 %t166, %t168 + br i1 %t169, label %range9149, label %inrange9150 +range9149: + call void @finch_panic_index(ptr @.str.6162, i64 5808, i64 %t166, i64 %t168) + unreachable +inrange9150: + %t170 = extractvalue { ptr, i64, i64 } %t167, 0 + %t171 = getelementptr inbounds %S.gen.FnSig, ptr %t170, i64 %t166 + %t172 = getelementptr inbounds %S.gen.FnSig, ptr %t171, i32 0, i32 16 + %t173 = load i64, ptr %t172 + %t174 = load { ptr, i64, i64 }, ptr %t162 + %t175 = extractvalue { ptr, i64, i64 } %t174, 1 + %t176 = icmp uge i64 %t173, %t175 + br i1 %t176, label %range9151, label %inrange9152 +range9151: + call void @finch_panic_index(ptr @.str.6163, i64 5808, i64 %t173, i64 %t175) + unreachable +inrange9152: + %t177 = extractvalue { ptr, i64, i64 } %t174, 0 + %t178 = getelementptr inbounds %S.ast.Program, ptr %t177, i64 %t173 + %t179 = getelementptr inbounds %S.ast.Program, ptr %t178, i32 0, i32 8 + %t180 = load ptr, ptr %a46 + %t181 = icmp eq ptr %t180, null + br i1 %t181, label %panic9153, label %ok9154 +panic9153: + call void @finch_panic(ptr @.str.6164, i64 5808, ptr @.str.6165) + unreachable +ok9154: + %t182 = getelementptr inbounds %S.gen.Gen, ptr %t180, i32 0, i32 15 + %t183 = load i64, ptr %a155 + %t184 = load { ptr, i64, i64 }, ptr %t182 + %t185 = extractvalue { ptr, i64, i64 } %t184, 1 + %t186 = icmp uge i64 %t183, %t185 + br i1 %t186, label %range9155, label %inrange9156 +range9155: + call void @finch_panic_index(ptr @.str.6166, i64 5808, i64 %t183, i64 %t185) + unreachable +inrange9156: + %t187 = extractvalue { ptr, i64, i64 } %t184, 0 + %t188 = getelementptr inbounds %S.gen.FnSig, ptr %t187, i64 %t183 + %t189 = getelementptr inbounds %S.gen.FnSig, ptr %t188, i32 0, i32 17 + %t190 = load i64, ptr %t189 + %t191 = load { ptr, i64, i64 }, ptr %t179 + %t192 = extractvalue { ptr, i64, i64 } %t191, 1 + %t193 = icmp uge i64 %t190, %t192 + br i1 %t193, label %range9157, label %inrange9158 +range9157: + call void @finch_panic_index(ptr @.str.6167, i64 5808, i64 %t190, i64 %t192) + unreachable +inrange9158: + %t194 = extractvalue { ptr, i64, i64 } %t191, 0 + %t195 = getelementptr inbounds %S.ast.Node, ptr %t194, i64 %t190 + %t196 = load %S.ast.Node, ptr %t195 + call void @finch.gen.fail(ptr %t159, %S.ast.Node %t196, { ptr, i64, i64 } { ptr @.str.6168, i64 82, i64 0 }) + br label %endif9144 +endif9144: + br label %endif9141 +else9140: + %t197 = load i64, ptr %a155 + %t198 = icmp slt i64 %t197, 0 + br i1 %t198, label %then9159, label %endif9161 +then9159: + %t199 = load { ptr, i64, i64 }, ptr %a2 + %t200 = extractvalue { ptr, i64, i64 } %t199, 1 + %t201 = icmp uge i64 0, %t200 + br i1 %t201, label %range9162, label %inrange9163 +range9162: + call void @finch_panic_index(ptr @.str.6169, i64 5811, i64 0, i64 %t200) + unreachable +inrange9163: + %t202 = extractvalue { ptr, i64, i64 } %t199, 0 + %t203 = getelementptr inbounds { ptr, i64, i64 }, ptr %t202, i64 0 + %t204 = load { ptr, i64, i64 }, ptr %t203 + store { ptr, i64, i64 } %t204, ptr %a206 + store { ptr, i64, i64 } { ptr @.str.6170, i64 64, i64 0 }, ptr %a207 + call void @finch_str_concat(ptr %a205, ptr %a206, ptr %a207) + %t208 = load { ptr, i64, i64 }, ptr %a205 + %t209 = extractvalue { ptr, i64, i64 } %t208, 1 + %t210 = trunc i64 %t209 to i32 + %t211 = extractvalue { ptr, i64, i64 } %t208, 0 + %t212 = icmp eq ptr %t211, null + %t213 = select i1 %t212, ptr @.str.6171, ptr %t211 + %t214 = call i32 (ptr, ...) @printf(ptr @.str.6172, i32 %t210, ptr %t213) + store { ptr, i64, i64 } %t208, ptr %a215 + call void @finch_str_drop(ptr %a215) + %t216 = call i32 (ptr, ...) @printf(ptr @.str.6173) + %t217 = trunc i64 1 to i32 + %t218 = call i32 @fflush(ptr null) + call void @exit(i32 %t217) + br label %endif9161 +endif9161: + br label %endif9141 +endif9141: + store i64 0, ptr %a219 + br label %while.cond9164 +while.cond9164: + %t220 = load i64, ptr %a219 + %t221 = load ptr, ptr %a46 + %t222 = icmp eq ptr %t221, null + br i1 %t222, label %panic9167, label %ok9168 +panic9167: + call void @finch_panic(ptr @.str.6174, i64 5816, ptr @.str.6175) + unreachable +ok9168: + %t223 = getelementptr inbounds %S.gen.Gen, ptr %t221, i32 0, i32 15 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 + %t225 = load i64, ptr %t224 + %t226 = icmp slt i64 %t220, %t225 + br i1 %t226, label %while.body9165, label %while.end9166 +while.body9165: + %t227 = load ptr, ptr %a46 + %t228 = load i64, ptr %a219 + call void @finch.gen.define(ptr %t227, i64 %t228) + %t229 = load i64, ptr %a219 + %t230 = add i64 %t229, 1 + store i64 %t230, ptr %a219 + br label %while.cond9164 +while.end9166: + %t231 = load ptr, ptr %a46 + %t232 = icmp eq ptr %t231, null + br i1 %t232, label %panic9169, label %ok9170 +panic9169: + call void @finch_panic(ptr @.str.6176, i64 5820, ptr @.str.6177) + unreachable +ok9170: + %t233 = getelementptr inbounds %S.gen.Gen, ptr %t231, i32 0, i32 28 + %t234 = load i1, ptr %t233 + br i1 %t234, label %then9171, label %endif9173 +then9171: + %t235 = load ptr, ptr %a46 + %t236 = icmp eq ptr %t235, null + br i1 %t236, label %panic9174, label %ok9175 +panic9174: + call void @finch_panic(ptr @.str.6178, i64 5821, ptr @.str.6179) + unreachable +ok9175: + %t237 = getelementptr inbounds %S.gen.Gen, ptr %t235, i32 0, i32 0 + %t238 = load { ptr, i64, i64 }, ptr %t237 + %t239 = extractvalue { ptr, i64, i64 } %t238, 1 + %t240 = icmp uge i64 0, %t239 + br i1 %t240, label %range9176, label %inrange9177 +range9176: + call void @finch_panic_index(ptr @.str.6180, i64 5821, i64 0, i64 %t239) + unreachable +inrange9177: + %t241 = extractvalue { ptr, i64, i64 } %t238, 0 + %t242 = getelementptr inbounds %S.ast.Program, ptr %t241, i64 0 + %t243 = getelementptr inbounds %S.ast.Program, ptr %t242, i32 0, i32 2 + %t244 = load { ptr, i64, i64 }, ptr %t243 + store { ptr, i64, i64 } %t244, ptr %a245 + call void @finch.copy.arr_str(ptr %a246, ptr %a245) + %t247 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t247, ptr %a248 + %t249 = load ptr, ptr %a46 + %t250 = load { ptr, i64, i64 }, ptr %a248 + call void @finch.gen.indexAll(ptr %t249, { ptr, i64, i64 } %t250) + %t251 = load ptr, ptr %a46 + %t252 = icmp eq ptr %t251, null + br i1 %t252, label %panic9178, label %ok9179 +panic9178: + call void @finch_panic(ptr @.str.6181, i64 5823, ptr @.str.6182) + unreachable +ok9179: + %t253 = getelementptr inbounds %S.gen.Gen, ptr %t251, i32 0, i32 29 + %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6183, i64 1, i64 0 }, ptr %a255 + call void @finch_str_join(ptr %a256, ptr %t253, ptr %a255) + %t257 = load { ptr, i64, i64 }, ptr %a256 + call void @finch.drop.arr_str(ptr %a248) + call void @finch.drop.S_gen_Gen(ptr %a45) + ret { ptr, i64, i64 } %t257 +endif9173: + %t258 = load ptr, ptr %a46 + %t259 = icmp eq ptr %t258, null + br i1 %t259, label %panic9206, label %ok9207 +panic9206: + call void @finch_panic(ptr @.str.6184, i64 5825, ptr @.str.6185) + unreachable +ok9207: + %t260 = getelementptr inbounds %S.gen.Gen, ptr %t258, i32 0, i32 15 + store i64 0, ptr %a261 + br label %each.cond9208 +each.cond9208: + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 + %t263 = load i64, ptr %t262 + %t264 = load i64, ptr %a261 + %t265 = icmp slt i64 %t264, %t263 + br i1 %t265, label %each.body9209, label %each.end9211 +each.body9209: + %t266 = load ptr, ptr %t260 + %t267 = getelementptr inbounds %S.gen.FnSig, ptr %t266, i64 %t264 + %t268 = load %S.gen.FnSig, ptr %t267 + store %S.gen.FnSig %t268, ptr %a269 + %t270 = getelementptr inbounds %S.gen.FnSig, ptr %a269, i32 0, i32 5 + %t271 = load i1, ptr %t270 + br i1 %t271, label %then9212, label %endif9214 +then9212: + %t272 = load ptr, ptr %a46 + %t273 = load %S.gen.FnSig, ptr %a269 + %t274 = call { ptr, i64, i64 } @finch.gen.exportWrapper(ptr %t272, %S.gen.FnSig %t273) + store { ptr, i64, i64 } %t274, ptr %a275 + call void @finch_str_drop(ptr %a275) + br label %endif9214 +endif9214: + br label %each.step9210 +each.step9210: + %t276 = load i64, ptr %a261 + %t277 = add i64 %t276, 1 + store i64 %t277, ptr %a261 + br label %each.cond9208 +each.end9211: + %t278 = load i1, ptr %a7 + br i1 %t278, label %then9215, label %endif9217 +then9215: + store { ptr, i64, i64 } { ptr @.str.6186, i64 0, i64 0 }, ptr %a279 + %t280 = load ptr, ptr %a46 + %t281 = icmp eq ptr %t280, null + br i1 %t281, label %panic9218, label %ok9219 +panic9218: + call void @finch_panic(ptr @.str.6187, i64 5833, ptr @.str.6188) + unreachable +ok9219: + %t282 = getelementptr inbounds %S.gen.Gen, ptr %t280, i32 0, i32 31 + %t283 = getelementptr inbounds %S.platform.Target, ptr %t282, i32 0, i32 1 + %t284 = load i1, ptr %t283 + br i1 %t284, label %then9220, label %endif9222 +then9220: + %t285 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6189, i64 10, i64 0 }, ptr %a279 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + br label %endif9222 +endif9222: + %t287 = load ptr, ptr %a46 + %t288 = icmp eq ptr %t287, null + br i1 %t288, label %panic9223, label %ok9224 +panic9223: + call void @finch_panic(ptr @.str.6190, i64 5836, ptr @.str.6191) + unreachable +ok9224: + %t289 = getelementptr inbounds %S.gen.Gen, ptr %t287, i32 0, i32 3 + %t290 = getelementptr inbounds { ptr, i64, i64 }, ptr %t289, i32 0, i32 1 + %t291 = load { ptr, i64, i64 }, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6192, i64 6, i64 0 }, ptr %a293 + store { ptr, i64, i64 } %t291, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + %t295 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t295, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.6193, i64 107, i64 0 }, ptr %a298 + call void @finch_str_concat(ptr %a296, ptr %a297, ptr %a298) + store { ptr, i64, i64 } %t295, ptr %a299 + call void @finch_str_drop(ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a296 + %t301 = load i64, ptr %t290 + %t302 = add i64 %t301, 1 + call void @finch_arr_reserve(ptr %t289, i64 %t302, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t303 = load ptr, ptr %t289 + %t304 = getelementptr inbounds { ptr, i64, i64 }, ptr %t303, i64 %t301 + store { ptr, i64, i64 } %t300, ptr %t304 + store i64 %t302, ptr %t290 + %t305 = load ptr, ptr %a46 + %t306 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t305) + call void @finch_str_drop(ptr %a279) + call void @finch.drop.S_gen_Gen(ptr %a45) + ret { ptr, i64, i64 } %t306 +endif9217: + %t307 = load ptr, ptr %a46 + %t308 = icmp eq ptr %t307, null + br i1 %t308, label %panic9225, label %ok9226 +panic9225: + call void @finch_panic(ptr @.str.6194, i64 5840, ptr @.str.6195) + unreachable +ok9226: + %t309 = getelementptr inbounds %S.gen.Gen, ptr %t307, i32 0, i32 15 + %t310 = load i64, ptr %a155 + %t311 = load { ptr, i64, i64 }, ptr %t309 + %t312 = extractvalue { ptr, i64, i64 } %t311, 1 + %t313 = icmp uge i64 %t310, %t312 + br i1 %t313, label %range9227, label %inrange9228 +range9227: + call void @finch_panic_index(ptr @.str.6196, i64 5840, i64 %t310, i64 %t312) + unreachable +inrange9228: + %t314 = extractvalue { ptr, i64, i64 } %t311, 0 + %t315 = getelementptr inbounds %S.gen.FnSig, ptr %t314, i64 %t310 + %t316 = load %S.gen.FnSig, ptr %t315 + store %S.gen.FnSig %t316, ptr %a317 + call void @finch.copy.S_gen_FnSig(ptr %a318, ptr %a317) + %t319 = load %S.gen.FnSig, ptr %a318 + store %S.gen.FnSig %t319, ptr %a320 + %t321 = load ptr, ptr %a46 + %t322 = load %S.gen.FnSig, ptr %a320 + %t323 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t321, %S.gen.FnSig %t322) + store { ptr, i64, i64 } { ptr @.str.6197, i64 5, i64 0 }, ptr %a325 + store { ptr, i64, i64 } %t323, ptr %a326 + call void @finch_str_concat(ptr %a324, ptr %a325, ptr %a326) + store { ptr, i64, i64 } %t323, ptr %a327 + call void @finch_str_drop(ptr %a327) + %t328 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6198, i64 1, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + store { ptr, i64, i64 } %t328, ptr %a332 + call void @finch_str_drop(ptr %a332) + %t333 = load { ptr, i64, i64 }, ptr %a329 + %t334 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 11 + %t335 = load { ptr, i64, i64 }, ptr %t334 + store { ptr, i64, i64 } %t333, ptr %a337 + store { ptr, i64, i64 } %t335, ptr %a338 + call void @finch_str_concat(ptr %a336, ptr %a337, ptr %a338) + store { ptr, i64, i64 } %t333, ptr %a339 + call void @finch_str_drop(ptr %a339) + %t340 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t340, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.6199, i64 1, i64 0 }, ptr %a343 + call void @finch_str_concat(ptr %a341, ptr %a342, ptr %a343) + store { ptr, i64, i64 } %t340, ptr %a344 + call void @finch_str_drop(ptr %a344) + %t345 = load { ptr, i64, i64 }, ptr %a341 + store { ptr, i64, i64 } %t345, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6200, i64 0, i64 0 }, ptr %a347 + %t348 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 13 + %t349 = getelementptr inbounds { ptr, i64, i64 }, ptr %t348, i32 0, i32 1 + %t350 = load i64, ptr %t349 + %t351 = icmp eq i64 %t350, 1 + br i1 %t351, label %then9229, label %endif9231 +then9229: + %t352 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6201, i64 133, i64 0 }, ptr %a347 + store { ptr, i64, i64 } %t352, ptr %a353 + call void @finch_str_drop(ptr %a353) + %t354 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t354, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.6202, i64 20, i64 0 }, ptr %a357 + call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a355 + %t359 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t358, ptr %a346 + store { ptr, i64, i64 } %t359, ptr %a360 + call void @finch_str_drop(ptr %a360) + br label %endif9231 +endif9231: + %t361 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t361, ptr %a363 + store { ptr, i64, i64 } { ptr @.str.6203, i64 1, i64 0 }, ptr %a364 + call void @finch_str_concat(ptr %a362, ptr %a363, ptr %a364) + %t365 = load { ptr, i64, i64 }, ptr %a362 + %t366 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t365, ptr %a346 + store { ptr, i64, i64 } %t366, ptr %a367 + call void @finch_str_drop(ptr %a367) + store { ptr, i64, i64 } { ptr @.str.6204, i64 12, i64 0 }, ptr %a368 + %t369 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 9 + %t370 = load i1, ptr %t369 + br i1 %t370, label %then9232, label %else9233 +then9232: + %t371 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6205, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + %t375 = load { ptr, i64, i64 }, ptr %a372 + %t376 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t375, ptr %a346 + store { ptr, i64, i64 } %t376, ptr %a377 + call void @finch_str_drop(ptr %a377) + %t378 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t378, ptr %a380 + store { ptr, i64, i64 } { ptr @.str.6206, i64 2, i64 0 }, ptr %a381 + call void @finch_str_concat(ptr %a379, ptr %a380, ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a379 + %t383 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t382, ptr %a385 + store { ptr, i64, i64 } %t383, ptr %a386 + call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) + store { ptr, i64, i64 } %t382, ptr %a387 + call void @finch_str_drop(ptr %a387) + %t388 = load { ptr, i64, i64 }, ptr %a384 + store { ptr, i64, i64 } %t388, ptr %a390 + store { ptr, i64, i64 } { ptr @.str.6207, i64 1, i64 0 }, ptr %a391 + call void @finch_str_concat(ptr %a389, ptr %a390, ptr %a391) + store { ptr, i64, i64 } %t388, ptr %a392 + call void @finch_str_drop(ptr %a392) + %t393 = load { ptr, i64, i64 }, ptr %a389 + %t394 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t393, ptr %a347 + store { ptr, i64, i64 } %t394, ptr %a395 + call void @finch_str_drop(ptr %a395) + %t396 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6208, i64 0, i64 0 }, ptr %a346 + store { ptr, i64, i64 } %t396, ptr %a397 + call void @finch_str_drop(ptr %a397) + %t398 = load ptr, ptr %a46 + %t399 = load %S.gen.FnSig, ptr %a320 + %t400 = call { ptr, i64, i64 } @finch.gen.retTy(ptr %t398, %S.gen.FnSig %t399) + store { ptr, i64, i64 } %t400, ptr %a401 + %t402 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t402, ptr %a404 + store { ptr, i64, i64 } { ptr @.str.6209, i64 21, i64 0 }, ptr %a405 + call void @finch_str_concat(ptr %a403, ptr %a404, ptr %a405) + %t406 = load { ptr, i64, i64 }, ptr %a403 + %t407 = load { ptr, i64, i64 }, ptr %a401 + store { ptr, i64, i64 } %t406, ptr %a409 + store { ptr, i64, i64 } %t407, ptr %a410 + call void @finch_str_concat(ptr %a408, ptr %a409, ptr %a410) + store { ptr, i64, i64 } %t406, ptr %a411 + call void @finch_str_drop(ptr %a411) + %t412 = load { ptr, i64, i64 }, ptr %a408 + store { ptr, i64, i64 } %t412, ptr %a414 + store { ptr, i64, i64 } { ptr @.str.6210, i64 62, i64 0 }, ptr %a415 + call void @finch_str_concat(ptr %a413, ptr %a414, ptr %a415) + store { ptr, i64, i64 } %t412, ptr %a416 + call void @finch_str_drop(ptr %a416) + %t417 = load { ptr, i64, i64 }, ptr %a413 + %t418 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t417, ptr %a347 + store { ptr, i64, i64 } %t418, ptr %a419 + call void @finch_str_drop(ptr %a419) + %t420 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t420, ptr %a422 + store { ptr, i64, i64 } { ptr @.str.6211, i64 20, i64 0 }, ptr %a423 + call void @finch_str_concat(ptr %a421, ptr %a422, ptr %a423) + %t424 = load { ptr, i64, i64 }, ptr %a421 + %t425 = load { ptr, i64, i64 }, ptr %a401 + store { ptr, i64, i64 } %t424, ptr %a427 + store { ptr, i64, i64 } %t425, ptr %a428 + call void @finch_str_concat(ptr %a426, ptr %a427, ptr %a428) + store { ptr, i64, i64 } %t424, ptr %a429 + call void @finch_str_drop(ptr %a429) + %t430 = load { ptr, i64, i64 }, ptr %a426 + store { ptr, i64, i64 } %t430, ptr %a432 + store { ptr, i64, i64 } { ptr @.str.6212, i64 78, i64 0 }, ptr %a433 + call void @finch_str_concat(ptr %a431, ptr %a432, ptr %a433) + store { ptr, i64, i64 } %t430, ptr %a434 + call void @finch_str_drop(ptr %a434) + %t435 = load { ptr, i64, i64 }, ptr %a431 + %t436 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t435, ptr %a347 + store { ptr, i64, i64 } %t436, ptr %a437 + call void @finch_str_drop(ptr %a437) + %t438 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t438, ptr %a440 + store { ptr, i64, i64 } { ptr @.str.6213, i64 62, i64 0 }, ptr %a441 + call void @finch_str_concat(ptr %a439, ptr %a440, ptr %a441) + %t442 = load { ptr, i64, i64 }, ptr %a439 + %t443 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } %t442, ptr %a347 + store { ptr, i64, i64 } %t443, ptr %a444 + call void @finch_str_drop(ptr %a444) + %t445 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 + %t446 = getelementptr inbounds %S.ast.Type, ptr %t445, i32 0, i32 0 + %t447 = load { ptr, i64, i64 }, ptr %t446 + store { ptr, i64, i64 } %t447, ptr %a448 + store { ptr, i64, i64 } { ptr @.str.6214, i64 3, i64 0 }, ptr %a449 + %t450 = call i32 @finch_str_eq(ptr %a448, ptr %a449) + %t451 = icmp ne i32 %t450, 0 + br i1 %t451, label %then9235, label %endif9237 +then9235: + %t452 = load { ptr, i64, i64 }, ptr %a401 + store { ptr, i64, i64 } { ptr @.str.6215, i64 20, i64 0 }, ptr %a454 + store { ptr, i64, i64 } %t452, ptr %a455 + call void @finch_str_concat(ptr %a453, ptr %a454, ptr %a455) + %t456 = load { ptr, i64, i64 }, ptr %a453 + store { ptr, i64, i64 } %t456, ptr %a458 + store { ptr, i64, i64 } { ptr @.str.6216, i64 53, i64 0 }, ptr %a459 + call void @finch_str_concat(ptr %a457, ptr %a458, ptr %a459) + store { ptr, i64, i64 } %t456, ptr %a460 + call void @finch_str_drop(ptr %a460) + %t461 = load { ptr, i64, i64 }, ptr %a457 + %t462 = load { ptr, i64, i64 }, ptr %a368 + store { ptr, i64, i64 } %t461, ptr %a368 + store { ptr, i64, i64 } %t462, ptr %a463 + call void @finch_str_drop(ptr %a463) + br label %endif9237 +endif9237: + call void @finch_str_drop(ptr %a401) + br label %endif9234 +else9233: + %t464 = getelementptr inbounds %S.gen.FnSig, ptr %a320, i32 0, i32 12 + %t465 = getelementptr inbounds %S.ast.Type, ptr %t464, i32 0, i32 0 + %t466 = load { ptr, i64, i64 }, ptr %t465 + store { ptr, i64, i64 } %t466, ptr %a467 + store { ptr, i64, i64 } { ptr @.str.6217, i64 3, i64 0 }, ptr %a468 + %t469 = call i32 @finch_str_eq(ptr %a467, ptr %a468) + %t470 = icmp ne i32 %t469, 0 + br i1 %t470, label %then9238, label %endif9240 +then9238: + %t471 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } { ptr @.str.6218, i64 5, i64 0 }, ptr %a473 + store { ptr, i64, i64 } %t471, ptr %a474 + call void @finch_str_concat(ptr %a472, ptr %a473, ptr %a474) + %t475 = load { ptr, i64, i64 }, ptr %a472 + %t476 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t475, ptr %a346 + store { ptr, i64, i64 } %t476, ptr %a477 + call void @finch_str_drop(ptr %a477) + %t478 = load { ptr, i64, i64 }, ptr %a368 + store { ptr, i64, i64 } { ptr @.str.6219, i64 46, i64 0 }, ptr %a368 + store { ptr, i64, i64 } %t478, ptr %a479 + call void @finch_str_drop(ptr %a479) + br label %endif9240 +endif9240: + br label %endif9234 +endif9234: + %t480 = load ptr, ptr %a46 + %t481 = icmp eq ptr %t480, null + br i1 %t481, label %panic9241, label %ok9242 +panic9241: + call void @finch_panic(ptr @.str.6220, i64 5865, ptr @.str.6221) + unreachable +ok9242: + %t482 = getelementptr inbounds %S.gen.Gen, ptr %t480, i32 0, i32 3 + %t483 = getelementptr inbounds { ptr, i64, i64 }, ptr %t482, i32 0, i32 1 + %t484 = load { ptr, i64, i64 }, ptr %a347 + store { ptr, i64, i64 } { ptr @.str.6222, i64 48, i64 0 }, ptr %a486 + store { ptr, i64, i64 } %t484, ptr %a487 + call void @finch_str_concat(ptr %a485, ptr %a486, ptr %a487) + %t488 = load { ptr, i64, i64 }, ptr %a485 + store { ptr, i64, i64 } %t488, ptr %a490 + store { ptr, i64, i64 } { ptr @.str.6223, i64 2, i64 0 }, ptr %a491 + call void @finch_str_concat(ptr %a489, ptr %a490, ptr %a491) + store { ptr, i64, i64 } %t488, ptr %a492 + call void @finch_str_drop(ptr %a492) + %t493 = load { ptr, i64, i64 }, ptr %a489 + %t494 = load { ptr, i64, i64 }, ptr %a346 + store { ptr, i64, i64 } %t493, ptr %a496 + store { ptr, i64, i64 } %t494, ptr %a497 + call void @finch_str_concat(ptr %a495, ptr %a496, ptr %a497) + store { ptr, i64, i64 } %t493, ptr %a498 + call void @finch_str_drop(ptr %a498) + %t499 = load { ptr, i64, i64 }, ptr %a495 + store { ptr, i64, i64 } %t499, ptr %a501 + store { ptr, i64, i64 } { ptr @.str.6224, i64 1, i64 0 }, ptr %a502 + call void @finch_str_concat(ptr %a500, ptr %a501, ptr %a502) + store { ptr, i64, i64 } %t499, ptr %a503 + call void @finch_str_drop(ptr %a503) + %t504 = load { ptr, i64, i64 }, ptr %a500 + %t505 = load { ptr, i64, i64 }, ptr %a368 + store { ptr, i64, i64 } %t504, ptr %a507 + store { ptr, i64, i64 } %t505, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t504, ptr %a509 + call void @finch_str_drop(ptr %a509) + %t510 = load { ptr, i64, i64 }, ptr %a506 + store { ptr, i64, i64 } %t510, ptr %a512 + store { ptr, i64, i64 } { ptr @.str.6225, i64 2, i64 0 }, ptr %a513 + call void @finch_str_concat(ptr %a511, ptr %a512, ptr %a513) + store { ptr, i64, i64 } %t510, ptr %a514 + call void @finch_str_drop(ptr %a514) + %t515 = load { ptr, i64, i64 }, ptr %a511 + %t516 = load i64, ptr %t483 + %t517 = add i64 %t516, 1 + call void @finch_arr_reserve(ptr %t482, i64 %t517, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t518 = load ptr, ptr %t482 + %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 %t516 + store { ptr, i64, i64 } %t515, ptr %t519 + store i64 %t517, ptr %t483 + %t520 = load ptr, ptr %a46 + %t521 = call { ptr, i64, i64 } @finch.gen.assemble(ptr %t520) + call void @finch_str_drop(ptr %a368) + call void @finch_str_drop(ptr %a347) + call void @finch_str_drop(ptr %a346) + call void @finch.drop.S_gen_FnSig(ptr %a320) + call void @finch.drop.S_gen_Gen(ptr %a45) + ret { ptr, i64, i64 } %t521 +} + +define internal %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + %t8 = insertvalue %S.docs.Doc zeroinitializer, { ptr, i64, i64 } %t7, 0 + %t9 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + %t13 = insertvalue %S.docs.Doc %t8, { ptr, i64, i64 } %t12, 1 + %t14 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t14, ptr %a15 + call void @finch_str_copy(ptr %a16, ptr %a15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + %t18 = insertvalue %S.docs.Doc %t13, { ptr, i64, i64 } %t17, 2 + ret %S.docs.Doc %t18 +} + +define internal { ptr, i64, i64 } @finch.docs.builtins() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6226, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6227, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6228, i64 78, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6229, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6230, i64 31, i64 0 }, { ptr, i64, i64 } { ptr @.str.6231, i64 77, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6232, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6233, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6234, i64 121, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6235, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6236, i64 38, i64 0 }, { ptr, i64, i64 } { ptr @.str.6237, i64 83, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6238, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6239, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6240, i64 29, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6241, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6242, i64 29, i64 0 }, { ptr, i64, i64 } { ptr @.str.6243, i64 73, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6244, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6245, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6246, i64 98, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6247, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6248, i64 25, i64 0 }, { ptr, i64, i64 } { ptr @.str.6249, i64 66, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6250, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6251, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6252, i64 48, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6253, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6254, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6255, i64 77, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6256, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6257, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6258, i64 66, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6259, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6260, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6261, i64 73, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6262, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6263, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6264, i64 61, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6265, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6266, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6267, i64 130, i64 0 }) + %t15 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6268, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6269, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6270, i64 75, i64 0 }) + %t16 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6271, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6272, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6273, i64 29, i64 0 }) + %t17 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6274, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6275, i64 19, i64 0 }, { ptr, i64, i64 } { ptr @.str.6276, i64 26, i64 0 }) + %t18 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6277, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6278, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6279, i64 88, i64 0 }) + %t19 = mul i64 18, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t20 = call ptr @finch_alloc(i64 %t19) + %t21 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 0 + store %S.docs.Doc %t1, ptr %t21 + %t22 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 1 + store %S.docs.Doc %t2, ptr %t22 + %t23 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 2 + store %S.docs.Doc %t3, ptr %t23 + %t24 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 3 + store %S.docs.Doc %t4, ptr %t24 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 4 + store %S.docs.Doc %t5, ptr %t25 + %t26 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 5 + store %S.docs.Doc %t6, ptr %t26 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 6 + store %S.docs.Doc %t7, ptr %t27 + %t28 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 7 + store %S.docs.Doc %t8, ptr %t28 + %t29 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 8 + store %S.docs.Doc %t9, ptr %t29 + %t30 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 9 + store %S.docs.Doc %t10, ptr %t30 + %t31 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 10 + store %S.docs.Doc %t11, ptr %t31 + %t32 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 11 + store %S.docs.Doc %t12, ptr %t32 + %t33 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 12 + store %S.docs.Doc %t13, ptr %t33 + %t34 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 13 + store %S.docs.Doc %t14, ptr %t34 + %t35 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 14 + store %S.docs.Doc %t15, ptr %t35 + %t36 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 15 + store %S.docs.Doc %t16, ptr %t36 + %t37 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 16 + store %S.docs.Doc %t17, ptr %t37 + %t38 = getelementptr inbounds %S.docs.Doc, ptr %t20, i64 17 + store %S.docs.Doc %t18, ptr %t38 + %t39 = insertvalue { ptr, i64, i64 } undef, ptr %t20, 0 + %t40 = insertvalue { ptr, i64, i64 } %t39, i64 18, 1 + %t41 = insertvalue { ptr, i64, i64 } %t40, i64 18, 2 + ret { ptr, i64, i64 } %t41 +} + +define internal { ptr, i64, i64 } @finch.docs.arrayMethods() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6280, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6281, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6282, i64 23, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6283, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6284, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6285, i64 40, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6286, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6287, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6288, i64 18, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6289, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6290, i64 10, i64 0 }, { ptr, i64, i64 } { ptr @.str.6291, i64 43, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6292, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6293, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6294, i64 38, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6295, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6296, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6297, i64 37, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6298, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6299, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6300, i64 19, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6301, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6302, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6303, i64 46, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6304, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6305, i64 16, i64 0 }, { ptr, i64, i64 } { ptr @.str.6306, i64 22, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6307, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6308, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6309, i64 18, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6310, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6311, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6312, i64 37, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6313, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6314, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6315, i64 18, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6316, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6317, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6318, i64 45, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6319, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6320, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6321, i64 47, i64 0 }) + %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t16 = call ptr @finch_alloc(i64 %t15) + %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 + store %S.docs.Doc %t1, ptr %t17 + %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 + store %S.docs.Doc %t2, ptr %t18 + %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 + store %S.docs.Doc %t3, ptr %t19 + %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 + store %S.docs.Doc %t4, ptr %t20 + %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 + store %S.docs.Doc %t5, ptr %t21 + %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 + store %S.docs.Doc %t6, ptr %t22 + %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 + store %S.docs.Doc %t7, ptr %t23 + %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 + store %S.docs.Doc %t8, ptr %t24 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 + store %S.docs.Doc %t9, ptr %t25 + %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 + store %S.docs.Doc %t10, ptr %t26 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 + store %S.docs.Doc %t11, ptr %t27 + %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 + store %S.docs.Doc %t12, ptr %t28 + %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 + store %S.docs.Doc %t13, ptr %t29 + %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 + store %S.docs.Doc %t14, ptr %t30 + %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 + %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 + %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.docs.strMethods() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6322, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6323, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6324, i64 20, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6325, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6326, i64 17, i64 0 }, { ptr, i64, i64 } { ptr @.str.6327, i64 59, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6328, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6329, i64 30, i64 0 }, { ptr, i64, i64 } { ptr @.str.6330, i64 29, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6331, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6332, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6333, i64 22, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6334, i64 8, i64 0 }, { ptr, i64, i64 } { ptr @.str.6335, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6336, i64 24, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6337, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6338, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6339, i64 27, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6340, i64 9, i64 0 }, { ptr, i64, i64 } { ptr @.str.6341, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6342, i64 25, i64 0 }) + %t8 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6343, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6344, i64 23, i64 0 }, { ptr, i64, i64 } { ptr @.str.6345, i64 62, i64 0 }) + %t9 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6346, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6347, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6348, i64 41, i64 0 }) + %t10 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6349, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6350, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6351, i64 24, i64 0 }) + %t11 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6352, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6353, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6354, i64 24, i64 0 }) + %t12 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6355, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6356, i64 32, i64 0 }, { ptr, i64, i64 } { ptr @.str.6357, i64 26, i64 0 }) + %t13 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6358, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6359, i64 20, i64 0 }, { ptr, i64, i64 } { ptr @.str.6360, i64 17, i64 0 }) + %t14 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6361, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6362, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6363, i64 22, i64 0 }) + %t15 = mul i64 14, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t16 = call ptr @finch_alloc(i64 %t15) + %t17 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 0 + store %S.docs.Doc %t1, ptr %t17 + %t18 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 1 + store %S.docs.Doc %t2, ptr %t18 + %t19 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 2 + store %S.docs.Doc %t3, ptr %t19 + %t20 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 3 + store %S.docs.Doc %t4, ptr %t20 + %t21 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 4 + store %S.docs.Doc %t5, ptr %t21 + %t22 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 5 + store %S.docs.Doc %t6, ptr %t22 + %t23 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 6 + store %S.docs.Doc %t7, ptr %t23 + %t24 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 7 + store %S.docs.Doc %t8, ptr %t24 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 8 + store %S.docs.Doc %t9, ptr %t25 + %t26 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 9 + store %S.docs.Doc %t10, ptr %t26 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 10 + store %S.docs.Doc %t11, ptr %t27 + %t28 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 11 + store %S.docs.Doc %t12, ptr %t28 + %t29 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 12 + store %S.docs.Doc %t13, ptr %t29 + %t30 = getelementptr inbounds %S.docs.Doc, ptr %t16, i64 13 + store %S.docs.Doc %t14, ptr %t30 + %t31 = insertvalue { ptr, i64, i64 } undef, ptr %t16, 0 + %t32 = insertvalue { ptr, i64, i64 } %t31, i64 14, 1 + %t33 = insertvalue { ptr, i64, i64 } %t32, i64 14, 2 + ret { ptr, i64, i64 } %t33 +} + +define internal { ptr, i64, i64 } @finch.docs.mapMethods() { +entry: + + %t1 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6364, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6365, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6366, i64 19, i64 0 }) + %t2 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6367, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6368, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6369, i64 22, i64 0 }) + %t3 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6370, i64 3, i64 0 }, { ptr, i64, i64 } { ptr @.str.6371, i64 26, i64 0 }, { ptr, i64, i64 } { ptr @.str.6372, i64 53, i64 0 }) + %t4 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6373, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6374, i64 21, i64 0 }, { ptr, i64, i64 } { ptr @.str.6375, i64 52, i64 0 }) + %t5 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6376, i64 5, i64 0 }, { ptr, i64, i64 } { ptr @.str.6377, i64 7, i64 0 }, { ptr, i64, i64 } { ptr @.str.6378, i64 19, i64 0 }) + %t6 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6379, i64 4, i64 0 }, { ptr, i64, i64 } { ptr @.str.6380, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6381, i64 39, i64 0 }) + %t7 = call %S.docs.Doc @finch.docs.doc({ ptr, i64, i64 } { ptr @.str.6382, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.6383, i64 15, i64 0 }, { ptr, i64, i64 } { ptr @.str.6384, i64 47, i64 0 }) + %t8 = mul i64 7, ptrtoint (ptr getelementptr (%S.docs.Doc, ptr null, i32 1) to i64) + %t9 = call ptr @finch_alloc(i64 %t8) + %t10 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 0 + store %S.docs.Doc %t1, ptr %t10 + %t11 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 1 + store %S.docs.Doc %t2, ptr %t11 + %t12 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 2 + store %S.docs.Doc %t3, ptr %t12 + %t13 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 3 + store %S.docs.Doc %t4, ptr %t13 + %t14 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 4 + store %S.docs.Doc %t5, ptr %t14 + %t15 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 5 + store %S.docs.Doc %t6, ptr %t15 + %t16 = getelementptr inbounds %S.docs.Doc, ptr %t9, i64 6 + store %S.docs.Doc %t7, ptr %t16 + %t17 = insertvalue { ptr, i64, i64 } undef, ptr %t9, 0 + %t18 = insertvalue { ptr, i64, i64 } %t17, i64 7, 1 + %t19 = insertvalue { ptr, i64, i64 } %t18, i64 7, 2 + ret { ptr, i64, i64 } %t19 +} + +define internal { ptr, i64, i64 } @finch.docs.keywords() { +entry: + + %t1 = mul i64 22, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6385, i64 2, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6386, i64 6, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 + store { ptr, i64, i64 } { ptr @.str.6387, i64 2, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 + store { ptr, i64, i64 } { ptr @.str.6388, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 + store { ptr, i64, i64 } { ptr @.str.6389, i64 5, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 + store { ptr, i64, i64 } { ptr @.str.6390, i64 3, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 + store { ptr, i64, i64 } { ptr @.str.6391, i64 2, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 + store { ptr, i64, i64 } { ptr @.str.6392, i64 5, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 + store { ptr, i64, i64 } { ptr @.str.6393, i64 8, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 + store { ptr, i64, i64 } { ptr @.str.6394, i64 4, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 + store { ptr, i64, i64 } { ptr @.str.6395, i64 5, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 + store { ptr, i64, i64 } { ptr @.str.6396, i64 4, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 + store { ptr, i64, i64 } { ptr @.str.6397, i64 6, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 + store { ptr, i64, i64 } { ptr @.str.6398, i64 4, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 + store { ptr, i64, i64 } { ptr @.str.6399, i64 6, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 + store { ptr, i64, i64 } { ptr @.str.6400, i64 4, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 + store { ptr, i64, i64 } { ptr @.str.6401, i64 5, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 17 + store { ptr, i64, i64 } { ptr @.str.6402, i64 6, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 18 + store { ptr, i64, i64 } { ptr @.str.6403, i64 5, i64 0 }, ptr %t21 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 19 + store { ptr, i64, i64 } { ptr @.str.6404, i64 2, i64 0 }, ptr %t22 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 20 + store { ptr, i64, i64 } { ptr @.str.6405, i64 3, i64 0 }, ptr %t23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 21 + store { ptr, i64, i64 } { ptr @.str.6406, i64 4, i64 0 }, ptr %t24 + %t25 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t26 = insertvalue { ptr, i64, i64 } %t25, i64 22, 1 + %t27 = insertvalue { ptr, i64, i64 } %t26, i64 22, 2 + ret { ptr, i64, i64 } %t27 +} + +define internal { ptr, i64, i64 } @finch.docs.typeNames() { +entry: + + %t1 = mul i64 17, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6407, i64 3, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6408, i64 5, i64 0 }, ptr %t4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 2 + store { ptr, i64, i64 } { ptr @.str.6409, i64 4, i64 0 }, ptr %t5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 3 + store { ptr, i64, i64 } { ptr @.str.6410, i64 4, i64 0 }, ptr %t6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 4 + store { ptr, i64, i64 } { ptr @.str.6411, i64 3, i64 0 }, ptr %t7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 5 + store { ptr, i64, i64 } { ptr @.str.6412, i64 3, i64 0 }, ptr %t8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 6 + store { ptr, i64, i64 } { ptr @.str.6413, i64 3, i64 0 }, ptr %t9 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 7 + store { ptr, i64, i64 } { ptr @.str.6414, i64 2, i64 0 }, ptr %t10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 8 + store { ptr, i64, i64 } { ptr @.str.6415, i64 3, i64 0 }, ptr %t11 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 9 + store { ptr, i64, i64 } { ptr @.str.6416, i64 3, i64 0 }, ptr %t12 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 10 + store { ptr, i64, i64 } { ptr @.str.6417, i64 3, i64 0 }, ptr %t13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 11 + store { ptr, i64, i64 } { ptr @.str.6418, i64 2, i64 0 }, ptr %t14 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 12 + store { ptr, i64, i64 } { ptr @.str.6419, i64 3, i64 0 }, ptr %t15 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 13 + store { ptr, i64, i64 } { ptr @.str.6420, i64 3, i64 0 }, ptr %t16 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 14 + store { ptr, i64, i64 } { ptr @.str.6421, i64 3, i64 0 }, ptr %t17 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 15 + store { ptr, i64, i64 } { ptr @.str.6422, i64 3, i64 0 }, ptr %t18 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 16 + store { ptr, i64, i64 } { ptr @.str.6423, i64 3, i64 0 }, ptr %t19 + %t20 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t21 = insertvalue { ptr, i64, i64 } %t20, i64 17, 1 + %t22 = insertvalue { ptr, i64, i64 } %t21, i64 17, 2 + ret { ptr, i64, i64 } %t22 +} + +define internal void @finch.copy.S_docs_Doc(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.docs.Doc, ptr %src + store %S.docs.Doc %t1, ptr %dst + %t2 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.docs.Doc, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.docs.Doc, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca %S.docs.Doc, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca %S.docs.Doc, align 16 + %a21 = alloca %S.docs.Doc, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond9243 +each.cond9243: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body9244, label %each.end9246 +each.body9244: + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 + %t10 = load %S.docs.Doc, ptr %t9 + store %S.docs.Doc %t10, ptr %a11 + %t12 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 + %t13 = load { ptr, i64, i64 }, ptr %t12 + %t14 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } %t14, ptr %a16 + %t17 = call i32 @finch_str_eq(ptr %a15, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br i1 %t18, label %then9247, label %endif9249 +then9247: + %t19 = load %S.docs.Doc, ptr %a11 + store %S.docs.Doc %t19, ptr %a20 + call void @finch.copy.S_docs_Doc(ptr %a21, ptr %a20) + %t22 = load %S.docs.Doc, ptr %a21 + ret %S.docs.Doc %t22 +endif9249: + br label %each.step9245 +each.step9245: + %t23 = load i64, ptr %a3 + %t24 = add i64 %t23, 1 + store i64 %t24, ptr %a3 + br label %each.cond9243 +each.end9246: + ret %S.docs.Doc zeroinitializer +} + +define internal { ptr, i64, i64 } @finch.docs.hover(%S.docs.Doc %p0) { +entry: + %a1 = alloca %S.docs.Doc, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + store %S.docs.Doc %p0, ptr %a1 + %t2 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 1 + %t3 = load { ptr, i64, i64 }, ptr %t2 + store { ptr, i64, i64 } { ptr @.str.6424, i64 9, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t3, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6425, i64 5, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + %t13 = getelementptr inbounds %S.docs.Doc, ptr %a1, i32 0, i32 2 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t12, ptr %a16 + store { ptr, i64, i64 } %t14, ptr %a17 + call void @finch_str_concat(ptr %a15, ptr %a16, ptr %a17) + store { ptr, i64, i64 } %t12, ptr %a18 + call void @finch_str_drop(ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a15 + ret { ptr, i64, i64 } %t19 +} + +define internal { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %p0) { +entry: + %a1 = alloca %S.C.CXString, align 16 + %a3 = alloca %S.C.CXString, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca %S.C.CXString, align 16 + store %S.C.CXString %p0, ptr %a1 + %t2 = load %S.C.CXString, ptr %a1 + store %S.C.CXString %t2, ptr %a3 + %t4 = call ptr @clang_getCString(ptr %a3) + store { ptr, i64, i64 } zeroinitializer, ptr %a5 + call void @finch_str_from_c(ptr %a5, ptr %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = load %S.C.CXString, ptr %a1 + store %S.C.CXString %t11, ptr %a12 + call void @clang_disposeString(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a10 + ret { ptr, i64, i64 } %t13 +} + +define internal %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %p0) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a3 = alloca %S.ast.Type, align 16 + %a4 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + %t2 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t2, ptr %a3 + call void @finch.copy.S_ast_Type(ptr %a4, ptr %a3) + %t5 = load %S.ast.Type, ptr %a4 + %t6 = insertvalue %S.cimport.Mapped zeroinitializer, %S.ast.Type %t5, 0 + %t7 = insertvalue %S.cimport.Mapped %t6, i1 true, 2 + ret %S.cimport.Mapped %t7 +} + +define internal %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.cimport.Mapped zeroinitializer, { ptr, i64, i64 } %t5, 1 + %t7 = insertvalue %S.cimport.Mapped %t6, i1 false, 2 + ret %S.cimport.Mapped %t7 +} + +define internal %S.ast.Type @finch.cimport.fixed(%S.ast.Type %p0, i64 %p1) { +entry: + %a1 = alloca %S.ast.Type, align 16 + %a2 = alloca i64, align 16 + %a6 = alloca %S.ast.Type, align 16 + %a10 = alloca %S.ast.Type, align 16 + %a11 = alloca %S.ast.Type, align 16 + store %S.ast.Type %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6426, i64 5, i64 0 }, 0 + %t4 = load i64, ptr %a2 + %t5 = insertvalue %S.ast.Type %t3, i64 %t4, 4 + store %S.ast.Type %t5, ptr %a6 + %t7 = getelementptr inbounds %S.ast.Type, ptr %a6, i32 0, i32 1 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i32 0, i32 1 + %t9 = load %S.ast.Type, ptr %a1 + store %S.ast.Type %t9, ptr %a10 + call void @finch.copy.S_ast_Type(ptr %a11, ptr %a10) + %t12 = load %S.ast.Type, ptr %a11 + %t13 = load i64, ptr %t8 + %t14 = add i64 %t13, 1 + call void @finch_arr_reserve(ptr %t7, i64 %t14, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t15 = load ptr, ptr %t7 + %t16 = getelementptr inbounds %S.ast.Type, ptr %t15, i64 %t13 + store %S.ast.Type %t12, ptr %t16 + store i64 %t14, ptr %t8 + %t17 = load %S.ast.Type, ptr %a6 + ret %S.ast.Type %t17 +} + +define internal { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca i1, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca i64, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t3, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6427, i64 15, i64 0 }, ptr %a6 + call void @finch_str_concat(ptr %a4, ptr %a5, ptr %a6) + store { ptr, i64, i64 } %t3, ptr %a7 + call void @finch_str_drop(ptr %a7) + %t8 = load { ptr, i64, i64 }, ptr %a4 + %t9 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a10, i64 %t9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a13 + store { ptr, i64, i64 } %t11, ptr %a14 + call void @finch_str_concat(ptr %a12, ptr %a13, ptr %a14) + store { ptr, i64, i64 } %t8, ptr %a15 + call void @finch_str_drop(ptr %a15) + store { ptr, i64, i64 } %t11, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6428, i64 4, i64 0 }, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t24, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.6429, i64 13, i64 0 }, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + %t30 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a31, i64 %t30) + %t32 = load { ptr, i64, i64 }, ptr %a31 + store { ptr, i64, i64 } %t29, ptr %a34 + store { ptr, i64, i64 } %t32, ptr %a35 + call void @finch_str_concat(ptr %a33, ptr %a34, ptr %a35) + store { ptr, i64, i64 } %t29, ptr %a36 + call void @finch_str_drop(ptr %a36) + store { ptr, i64, i64 } %t32, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t38, ptr %a40 + store { ptr, i64, i64 } { ptr @.str.6430, i64 2, i64 0 }, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t43, ptr %a44 + %t45 = load { ptr, i64, i64 }, ptr %a44 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.6431, i64 0, i64 0 }, ptr %a47 + %t48 = call i32 @finch_write_file(ptr %a46, ptr %a47) + %t49 = icmp ne i32 %t48, 0 + %t50 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t50, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6432, i64 12, i64 0 }, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a51 + %t55 = load { ptr, i64, i64 }, ptr %a44 + %t56 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t55) + store { ptr, i64, i64 } %t54, ptr %a58 + store { ptr, i64, i64 } %t56, ptr %a59 + call void @finch_str_concat(ptr %a57, ptr %a58, ptr %a59) + store { ptr, i64, i64 } %t54, ptr %a60 + call void @finch_str_drop(ptr %a60) + store { ptr, i64, i64 } %t56, ptr %a61 + call void @finch_str_drop(ptr %a61) + %t62 = load { ptr, i64, i64 }, ptr %a57 + store { ptr, i64, i64 } %t62, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.6433, i64 4, i64 0 }, ptr %a65 + call void @finch_str_concat(ptr %a63, ptr %a64, ptr %a65) + store { ptr, i64, i64 } %t62, ptr %a66 + call void @finch_str_drop(ptr %a66) + %t67 = load { ptr, i64, i64 }, ptr %a63 + %t68 = load { ptr, i64, i64 }, ptr %a23 + %t69 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t68) + store { ptr, i64, i64 } %t67, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t67, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t69, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a70 + store { ptr, i64, i64 } %t75, ptr %a77 + store { ptr, i64, i64 } { ptr @.str.6434, i64 3, i64 0 }, ptr %a78 + call void @finch_str_concat(ptr %a76, ptr %a77, ptr %a78) + store { ptr, i64, i64 } %t75, ptr %a79 + call void @finch_str_drop(ptr %a79) + %t80 = load { ptr, i64, i64 }, ptr %a76 + %t81 = call { ptr, i64, i64 } @finch.host.nullDevice() + store { ptr, i64, i64 } %t80, ptr %a83 + store { ptr, i64, i64 } %t81, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + store { ptr, i64, i64 } %t80, ptr %a85 + call void @finch_str_drop(ptr %a85) + store { ptr, i64, i64 } %t81, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a82 + %t88 = call i64 @finch.host.run({ ptr, i64, i64 } %t87) + store { ptr, i64, i64 } %t87, ptr %a89 + call void @finch_str_drop(ptr %a89) + %t90 = load { ptr, i64, i64 }, ptr %a44 + call void @finch.host.remove({ ptr, i64, i64 } %t90) + %t91 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t91, ptr %a92 + %t93 = call i32 @finch_file_exists(ptr %a92) + %t94 = icmp ne i32 %t93, 0 + %t95 = xor i1 %t94, true + br i1 %t95, label %then9250, label %endif9252 +then9250: + %t96 = load { ptr, i64, i64 }, ptr %a2 + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a23) + ret { ptr, i64, i64 } %t96 +endif9252: + store i1 false, ptr %a97 + %t98 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_read_file(ptr %a100, ptr %a99, ptr @.str.6435, i64 114) + %t101 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t101, ptr %a102 + store { ptr, i64, i64 } { ptr @.str.6437, i64 1, i64 0 }, ptr %a104 + call void @finch_str_split(ptr %a105, ptr %a102, ptr %a104) + %t106 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } %t101, ptr %a107 + call void @finch_str_drop(ptr %a107) + store { ptr, i64, i64 } %t106, ptr %a108 + store i64 0, ptr %a109 + br label %each.cond9253 +each.cond9253: + %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %a108, i32 0, i32 1 + %t111 = load i64, ptr %t110 + %t112 = load i64, ptr %a109 + %t113 = icmp slt i64 %t112, %t111 + br i1 %t113, label %each.body9254, label %each.end9256 +each.body9254: + %t114 = load ptr, ptr %a108 + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %t114, i64 %t112 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + %t118 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t118, ptr %a119 + call void @finch_str_trim(ptr %a120, ptr %a119) + %t121 = load { ptr, i64, i64 }, ptr %a120 + store { ptr, i64, i64 } %t121, ptr %a122 + %t123 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t123, ptr %a124 + store { ptr, i64, i64 } { ptr @.str.6440, i64 34, i64 0 }, ptr %a126 + %t127 = call i32 @finch_str_starts(ptr %a124, ptr %a126) + %t128 = icmp ne i32 %t127, 0 + br i1 %t128, label %then9257, label %endif9259 +then9257: + store i1 true, ptr %a97 + call void @finch_str_drop(ptr %a122) + br label %each.step9255 +endif9259: + %t129 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t129, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6442, i64 19, i64 0 }, ptr %a132 + %t133 = call i32 @finch_str_starts(ptr %a130, ptr %a132) + %t134 = icmp ne i32 %t133, 0 + br i1 %t134, label %then9260, label %endif9262 +then9260: + call void @finch_str_drop(ptr %a122) + br label %each.end9256 +endif9262: + %t135 = load i1, ptr %a97 + %t136 = xor i1 %t135, true + br label %logic.from9263 +logic.from9263: + br i1 %t136, label %logic.end9265, label %logic.rhs9264 +logic.rhs9264: + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 + %t138 = load i64, ptr %t137 + %t139 = icmp eq i64 %t138, 0 + br label %logic.rend9266 +logic.rend9266: + br label %logic.end9265 +logic.end9265: + %t140 = phi i1 [ true, %logic.from9263 ], [ %t139, %logic.rend9266 ] + br i1 %t140, label %then9267, label %endif9269 +then9267: + call void @finch_str_drop(ptr %a122) + br label %each.step9255 +endif9269: + %t141 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t141, ptr %a142 + store { ptr, i64, i64 } { ptr @.str.6444, i64 22, i64 0 }, ptr %a144 + %t145 = call i32 @finch_str_ends(ptr %a142, ptr %a144) + %t146 = icmp ne i32 %t145, 0 + br i1 %t146, label %then9270, label %else9271 +then9270: + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t148 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } %t148, ptr %a149 + %t151 = getelementptr inbounds { ptr, i64, i64 }, ptr %a122, i32 0, i32 1 + %t152 = load i64, ptr %t151 + %t153 = sub i64 %t152, 22 + call void @finch_str_sub(ptr %a150, ptr %a149, i64 0, i64 %t153, ptr @.str.6446, i64 128) + %t154 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } { ptr @.str.6445, i64 11, i64 0 }, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + store { ptr, i64, i64 } %t154, ptr %a158 + call void @finch_str_drop(ptr %a158) + %t159 = load { ptr, i64, i64 }, ptr %a155 + %t160 = load i64, ptr %t147 + %t161 = add i64 %t160, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t161, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t162 = load ptr, ptr %a2 + %t163 = getelementptr inbounds { ptr, i64, i64 }, ptr %t162, i64 %t160 + store { ptr, i64, i64 } %t159, ptr %t163 + store i64 %t161, ptr %t147 + br label %endif9272 +else9271: + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t165 = load { ptr, i64, i64 }, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.6447, i64 8, i64 0 }, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + %t169 = load { ptr, i64, i64 }, ptr %a166 + %t170 = load i64, ptr %t164 + %t171 = add i64 %t170, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t171, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t172 = load ptr, ptr %a2 + %t173 = getelementptr inbounds { ptr, i64, i64 }, ptr %t172, i64 %t170 + store { ptr, i64, i64 } %t169, ptr %t173 + store i64 %t171, ptr %t164 + br label %endif9272 +endif9272: + call void @finch_str_drop(ptr %a122) + br label %each.step9255 +each.step9255: + %t174 = load i64, ptr %a109 + %t175 = add i64 %t174, 1 + store i64 %t175, ptr %a109 + br label %each.cond9253 +each.end9256: + call void @finch.drop.arr_str(ptr %a108) + %t176 = load { ptr, i64, i64 }, ptr %a23 + call void @finch.host.remove({ ptr, i64, i64 } %t176) + %t177 = load { ptr, i64, i64 }, ptr %a2 + call void @finch_str_drop(ptr %a44) + call void @finch_str_drop(ptr %a23) + ret { ptr, i64, i64 } %t177 +} + +define internal { ptr, i64, i64 } @finch.cimport.recordName(ptr %p0, %S.C.CXType %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXType, align 16 + %a3 = alloca %S.C.CXCursor, align 16 + %a5 = alloca %S.C.CXType, align 16 + %a7 = alloca %S.C.CXCursor, align 16 + %a8 = alloca %S.C.CXString, align 16 + %a10 = alloca %S.C.CXCursor, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca %S.C.CXString, align 16 + %a40 = alloca %S.C.CXCursor, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca i32, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXType %p1, ptr %a2 + %t4 = load %S.C.CXType, ptr %a2 + store %S.C.CXType %t4, ptr %a5 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a3, ptr %a5) + %t6 = load %S.C.CXCursor, ptr %a3 + store %S.C.CXCursor %t6, ptr %a7 + %t9 = load %S.C.CXCursor, ptr %a7 + store %S.C.CXCursor %t9, ptr %a10 + call void @clang_getCursorUSR(ptr sret(%S.C.CXString) align 16 %a8, ptr %a10) + %t11 = load %S.C.CXString, ptr %a8 + %t12 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t11) + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = load ptr, ptr %a1 + %t15 = icmp eq ptr %t14, null + br i1 %t15, label %panic9273, label %ok9274 +panic9273: + call void @finch_panic(ptr @.str.6448, i64 143, ptr @.str.6449) + unreachable +ok9274: + %t16 = getelementptr inbounds %S.cimport.Importer, ptr %t14, i32 0, i32 3 + %t17 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = call i64 @finch_map_find(ptr %t16, ptr %a18, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t20 = icmp sge i64 %t19, 0 + br i1 %t20, label %then9275, label %endif9277 +then9275: + %t21 = load ptr, ptr %a1 + %t22 = icmp eq ptr %t21, null + br i1 %t22, label %panic9278, label %ok9279 +panic9278: + call void @finch_panic(ptr @.str.6450, i64 144, ptr @.str.6451) + unreachable +ok9279: + %t23 = getelementptr inbounds %S.cimport.Importer, ptr %t21, i32 0, i32 3 + %t24 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = call i64 @finch_map_find(ptr %t23, ptr %a25, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t27 = icmp slt i64 %t26, 0 + br i1 %t27, label %map.missing9280, label %map.found9281 +map.missing9280: + store { ptr, i64, i64 } zeroinitializer, ptr %a28 + store { ptr, i64, i64 } %t24, ptr %a29 + call void @finch_buf_str(ptr %a28, ptr %a29, i32 1) + call void @finch_map_missing(ptr @.str.6452, i64 144, ptr %a28) + unreachable +map.found9281: + %t30 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t23, i32 0, i32 0 + %t31 = load ptr, ptr %t30 + %t32 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t31, i64 %t26 + %t33 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t32, i32 0, i32 2 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_str_copy(ptr %a36, ptr %a35) + %t37 = load { ptr, i64, i64 }, ptr %a36 + call void @finch_str_drop(ptr %a13) + ret { ptr, i64, i64 } %t37 +endif9277: + %t39 = load %S.C.CXCursor, ptr %a7 + store %S.C.CXCursor %t39, ptr %a40 + call void @clang_getCursorSpelling(ptr sret(%S.C.CXString) align 16 %a38, ptr %a40) + %t41 = load %S.C.CXString, ptr %a38 + %t42 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t41) + store { ptr, i64, i64 } %t42, ptr %a43 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a43, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = icmp eq i64 %t45, 0 + br label %logic.from9282 +logic.from9282: + br i1 %t46, label %logic.end9284, label %logic.rhs9283 +logic.rhs9283: + %t47 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t47, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.6454, i64 1, i64 0 }, ptr %a50 + %t51 = call i64 @finch_str_find(ptr %a48, ptr %a50) + %t52 = icmp sge i64 %t51, 0 + br label %logic.rend9285 +logic.rend9285: + br label %logic.end9284 +logic.end9284: + %t53 = phi i1 [ true, %logic.from9282 ], [ %t52, %logic.rend9285 ] + br i1 %t53, label %then9286, label %endif9288 +then9286: + %t54 = load ptr, ptr %a1 + %t55 = icmp eq ptr %t54, null + br i1 %t55, label %panic9289, label %ok9290 +panic9289: + call void @finch_panic(ptr @.str.6455, i64 148, ptr @.str.6456) + unreachable +ok9290: + %t56 = getelementptr inbounds %S.cimport.Importer, ptr %t54, i32 0, i32 5 + %t57 = load i64, ptr %t56 + %t58 = add i64 %t57, 1 + store i64 %t58, ptr %t56 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic9291, label %ok9292 +panic9291: + call void @finch_panic(ptr @.str.6458, i64 149, ptr @.str.6459) + unreachable +ok9292: + %t61 = getelementptr inbounds %S.cimport.Importer, ptr %t59, i32 0, i32 5 + %t62 = load i64, ptr %t61 + call void @finch_str_from_int(ptr %a63, i64 %t62) + %t64 = load { ptr, i64, i64 }, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6457, i64 12, i64 0 }, ptr %a66 + store { ptr, i64, i64 } %t64, ptr %a67 + call void @finch_str_concat(ptr %a65, ptr %a66, ptr %a67) + store { ptr, i64, i64 } %t64, ptr %a68 + call void @finch_str_drop(ptr %a68) + %t69 = load { ptr, i64, i64 }, ptr %a65 + %t70 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t69, ptr %a43 + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + br label %endif9288 +endif9288: + %t72 = load { ptr, i64, i64 }, ptr %a43 + %t73 = load ptr, ptr %a1 + %t74 = icmp eq ptr %t73, null + br i1 %t74, label %panic9293, label %ok9294 +panic9293: + call void @finch_panic(ptr @.str.6460, i64 151, ptr @.str.6461) + unreachable +ok9294: + %t75 = getelementptr inbounds %S.cimport.Importer, ptr %t73, i32 0, i32 3 + %t76 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t76, ptr %a77 + store i32 0, ptr %a78 + %t79 = call i64 @finch_map_slot(ptr %t75, ptr %a77, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a78) + %t80 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t75, i32 0, i32 0 + %t81 = load ptr, ptr %t80 + %t82 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t81, i64 %t79 + %t83 = load i32, ptr %a78 + %t84 = icmp ne i32 %t83, 0 + br i1 %t84, label %map.new9295, label %map.have9296 +map.new9295: + %t85 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t82, i32 0, i32 1 + call void @finch_str_copy(ptr %t85, ptr %a77) + %t86 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t82, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t86 + br label %map.have9296 +map.have9296: + %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t82, i32 0, i32 2 + store { ptr, i64, i64 } %t72, ptr %a88 + call void @finch_str_copy(ptr %a89, ptr %a88) + %t90 = load { ptr, i64, i64 }, ptr %a89 + %t91 = load { ptr, i64, i64 }, ptr %t87 + store { ptr, i64, i64 } %t90, ptr %t87 + store { ptr, i64, i64 } %t91, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a43 + call void @finch_str_drop(ptr %a13) + ret { ptr, i64, i64 } %t93 +} + +define internal i32 @finch.c.cimport.visitField(ptr %c0, ptr %c1) { +entry: + + %t1 = load %S.C.CXCursor, ptr %c0 + %t2 = call i32 @finch.cimport.visitField(%S.C.CXCursor %t1, ptr %c1) + ret i32 %t2 +} + +define internal { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %p0, %S.C.CXType %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXType, align 16 + %a3 = alloca %S.C.CXType, align 16 + %a5 = alloca %S.C.CXType, align 16 + %a7 = alloca %S.C.CXType, align 16 + %a8 = alloca %S.C.CXCursor, align 16 + %a10 = alloca %S.C.CXType, align 16 + %a12 = alloca %S.C.CXCursor, align 16 + %a13 = alloca %S.C.CXString, align 16 + %a15 = alloca %S.C.CXCursor, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca %S.C.CXType, align 16 + %a43 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca i32, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca %S.C.CXType, align 16 + %a72 = alloca %S.cimport.CStruct, align 16 + %a74 = alloca %S.C.CXCursor, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca %S.cimport.FieldCtx, align 16 + %a85 = alloca %S.C.CXType, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca i32, align 16 + %a116 = alloca %S.cimport.CStruct, align 16 + %a117 = alloca %S.cimport.CStruct, align 16 + %a120 = alloca %S.cimport.CStruct, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXType %p1, ptr %a2 + %t4 = load %S.C.CXType, ptr %a2 + store %S.C.CXType %t4, ptr %a5 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a3, ptr %a5) + %t6 = load %S.C.CXType, ptr %a3 + store %S.C.CXType %t6, ptr %a7 + %t9 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t9, ptr %a10 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a8, ptr %a10) + %t11 = load %S.C.CXCursor, ptr %a8 + store %S.C.CXCursor %t11, ptr %a12 + %t14 = load %S.C.CXCursor, ptr %a12 + store %S.C.CXCursor %t14, ptr %a15 + call void @clang_getCursorUSR(ptr sret(%S.C.CXString) align 16 %a13, ptr %a15) + %t16 = load %S.C.CXString, ptr %a13 + %t17 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t16) + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load ptr, ptr %a1 + %t20 = load %S.C.CXType, ptr %a7 + %t21 = call { ptr, i64, i64 } @finch.cimport.recordName(ptr %t19, %S.C.CXType %t20) + store { ptr, i64, i64 } %t21, ptr %a22 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic9297, label %ok9298 +panic9297: + call void @finch_panic(ptr @.str.6462, i64 161, ptr @.str.6463) + unreachable +ok9298: + %t25 = getelementptr inbounds %S.cimport.Importer, ptr %t23, i32 0, i32 0 + %t26 = getelementptr inbounds %S.cimport.CImports, ptr %t25, i32 0, i32 3 + %t27 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = call i64 @finch_map_find(ptr %t26, ptr %a28, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t30 = icmp sge i64 %t29, 0 + br label %logic.from9299 +logic.from9299: + br i1 %t30, label %logic.end9301, label %logic.rhs9300 +logic.rhs9300: + %t31 = load ptr, ptr %a1 + %t32 = icmp eq ptr %t31, null + br i1 %t32, label %panic9302, label %ok9303 +panic9302: + call void @finch_panic(ptr @.str.6464, i64 161, ptr @.str.6465) + unreachable +ok9303: + %t33 = getelementptr inbounds %S.cimport.Importer, ptr %t31, i32 0, i32 4 + %t34 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t34, ptr %a35 + %t36 = call i64 @finch_map_find(ptr %t33, ptr %a35, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t37 = icmp sge i64 %t36, 0 + br label %logic.rend9304 +logic.rend9304: + br label %logic.end9301 +logic.end9301: + %t38 = phi i1 [ true, %logic.from9299 ], [ %t37, %logic.rend9304 ] + br i1 %t38, label %then9305, label %endif9307 +then9305: + %t39 = load { ptr, i64, i64 }, ptr %a22 + call void @finch_str_drop(ptr %a18) + ret { ptr, i64, i64 } %t39 +endif9307: + %t40 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t40, ptr %a41 + %t42 = call i64 @clang_Type_getSizeOf(ptr %a41) + store i64 %t42, ptr %a43 + %t44 = load i64, ptr %a43 + %t45 = icmp slt i64 %t44, 0 + br i1 %t45, label %then9308, label %endif9310 +then9308: + call void @finch_str_drop(ptr %a22) + call void @finch_str_drop(ptr %a18) + ret { ptr, i64, i64 } { ptr @.str.6466, i64 0, i64 0 } +endif9310: + %t46 = load ptr, ptr %a1 + %t47 = icmp eq ptr %t46, null + br i1 %t47, label %panic9311, label %ok9312 +panic9311: + call void @finch_panic(ptr @.str.6467, i64 168, ptr @.str.6468) + unreachable +ok9312: + %t48 = getelementptr inbounds %S.cimport.Importer, ptr %t46, i32 0, i32 4 + %t49 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t49, ptr %a50 + store i32 0, ptr %a51 + %t52 = call i64 @finch_map_slot(ptr %t48, ptr %a50, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a51) + %t53 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t48, i32 0, i32 0 + %t54 = load ptr, ptr %t53 + %t55 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t54, i64 %t52 + %t56 = load i32, ptr %a51 + %t57 = icmp ne i32 %t56, 0 + br i1 %t57, label %map.new9313, label %map.have9314 +map.new9313: + %t58 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t55, i32 0, i32 1 + call void @finch_str_copy(ptr %t58, ptr %a50) + %t59 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t55, i32 0, i32 2 + store i1 false, ptr %t59 + br label %map.have9314 +map.have9314: + %t60 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t55, i32 0, i32 2 + store i1 true, ptr %t60 + %t61 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t61, ptr %a62 + call void @finch_str_copy(ptr %a63, ptr %a62) + %t64 = load { ptr, i64, i64 }, ptr %a63 + %t65 = insertvalue %S.cimport.CStruct zeroinitializer, { ptr, i64, i64 } %t64, 0 + %t66 = load i64, ptr %a43 + %t67 = insertvalue %S.cimport.CStruct %t65, i64 %t66, 2 + %t68 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t68, ptr %a69 + %t70 = call i64 @clang_Type_getAlignOf(ptr %a69) + %t71 = insertvalue %S.cimport.CStruct %t67, i64 %t70, 3 + store %S.cimport.CStruct %t71, ptr %a72 + %t73 = load %S.C.CXCursor, ptr %a12 + store %S.C.CXCursor %t73, ptr %a74 + %t75 = call i32 @clang_getCursorKind(ptr %a74) + %t76 = icmp eq i32 %t75, 3 + br i1 %t76, label %then9315, label %endif9317 +then9315: + %t77 = getelementptr inbounds %S.cimport.CStruct, ptr %a72, i32 0, i32 4 + %t78 = load { ptr, i64, i64 }, ptr %t77 + store { ptr, i64, i64 } { ptr @.str.6469, i64 12, i64 0 }, ptr %t77 + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif9317 +endif9317: + %t80 = load ptr, ptr %a1 + %t81 = insertvalue %S.cimport.FieldCtx zeroinitializer, ptr %t80, 0 + %t82 = insertvalue %S.cimport.FieldCtx %t81, ptr %a72, 1 + store %S.cimport.FieldCtx %t82, ptr %a83 + %t84 = load %S.C.CXType, ptr %a7 + store %S.C.CXType %t84, ptr %a85 + %t86 = call i32 @clang_Type_visitFields(ptr %a85, ptr @finch.c.cimport.visitField, ptr %a83) + %t87 = load ptr, ptr %a1 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic9318, label %ok9319 +panic9318: + call void @finch_panic(ptr @.str.6470, i64 176, ptr @.str.6471) + unreachable +ok9319: + %t89 = getelementptr inbounds %S.cimport.Importer, ptr %t87, i32 0, i32 4 + %t90 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t90, ptr %a91 + %t92 = call i64 @finch_map_find(ptr %t89, ptr %a91, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t93 = icmp sge i64 %t92, 0 + br i1 %t93, label %remove.hit9320, label %remove.end9321 +remove.hit9320: + %t94 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t89, i32 0, i32 0 + %t95 = load ptr, ptr %t94 + %t96 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t95, i64 %t92 + %t97 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t96, i32 0, i32 1 + call void @finch_str_drop(ptr %t97) + %t98 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t96, i32 0, i32 2 + call void @finch_map_remove_at(ptr %t89, i64 %t92, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, i1 }, ptr null, i32 1) to i64)) + br label %remove.end9321 +remove.end9321: + %t99 = load %S.cimport.CStruct, ptr %a72 + %t100 = load ptr, ptr %a1 + %t101 = icmp eq ptr %t100, null + br i1 %t101, label %panic9322, label %ok9323 +panic9322: + call void @finch_panic(ptr @.str.6472, i64 177, ptr @.str.6473) + unreachable +ok9323: + %t102 = getelementptr inbounds %S.cimport.Importer, ptr %t100, i32 0, i32 0 + %t103 = getelementptr inbounds %S.cimport.CImports, ptr %t102, i32 0, i32 3 + %t104 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t104, ptr %a105 + store i32 0, ptr %a106 + %t107 = call i64 @finch_map_slot(ptr %t103, ptr %a105, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a106) + %t108 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t103, i32 0, i32 0 + %t109 = load ptr, ptr %t108 + %t110 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t109, i64 %t107 + %t111 = load i32, ptr %a106 + %t112 = icmp ne i32 %t111, 0 + br i1 %t112, label %map.new9324, label %map.have9325 +map.new9324: + %t113 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t110, i32 0, i32 1 + call void @finch_str_copy(ptr %t113, ptr %a105) + %t114 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t110, i32 0, i32 2 + store %S.cimport.CStruct zeroinitializer, ptr %t114 + br label %map.have9325 +map.have9325: + %t115 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr %t110, i32 0, i32 2 + store %S.cimport.CStruct %t99, ptr %a116 + call void @finch.copy.S_cimport_CStruct(ptr %a117, ptr %a116) + %t118 = load %S.cimport.CStruct, ptr %a117 + %t119 = load %S.cimport.CStruct, ptr %t115 + store %S.cimport.CStruct %t118, ptr %t115 + store %S.cimport.CStruct %t119, ptr %a120 + call void @finch.drop.S_cimport_CStruct(ptr %a120) + %t121 = load ptr, ptr %a1 + %t122 = icmp eq ptr %t121, null + br i1 %t122, label %panic9326, label %ok9327 +panic9326: + call void @finch_panic(ptr @.str.6474, i64 178, ptr @.str.6475) + unreachable +ok9327: + %t123 = getelementptr inbounds %S.cimport.Importer, ptr %t121, i32 0, i32 0 + %t124 = getelementptr inbounds %S.cimport.CImports, ptr %t123, i32 0, i32 4 + %t125 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i32 0, i32 1 + %t126 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t126, ptr %a127 + call void @finch_str_copy(ptr %a128, ptr %a127) + %t129 = load { ptr, i64, i64 }, ptr %a128 + %t130 = load i64, ptr %t125 + %t131 = add i64 %t130, 1 + call void @finch_arr_reserve(ptr %t124, i64 %t131, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t132 = load ptr, ptr %t124 + %t133 = getelementptr inbounds { ptr, i64, i64 }, ptr %t132, i64 %t130 + store { ptr, i64, i64 } %t129, ptr %t133 + store i64 %t131, ptr %t125 + %t134 = load { ptr, i64, i64 }, ptr %a22 + call void @finch.drop.S_cimport_CStruct(ptr %a72) + call void @finch_str_drop(ptr %a18) + ret { ptr, i64, i64 } %t134 +} + +define internal void @finch.drop.S_cimport_Mapped(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Mapped, ptr %a, i32 0, i32 0 + call void @finch.drop.S_ast_Type(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.Mapped, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal i32 @finch.cimport.visitField(%S.C.CXCursor %p0, ptr %p1) { +entry: + %a1 = alloca %S.C.CXCursor, align 16 + %a2 = alloca ptr, align 16 + %a4 = alloca ptr, align 16 + %a5 = alloca %S.C.CXString, align 16 + %a7 = alloca %S.C.CXCursor, align 16 + %a11 = alloca %S.cimport.CField, align 16 + %a12 = alloca %S.C.CXType, align 16 + %a13 = alloca %S.C.CXType, align 16 + %a15 = alloca %S.C.CXCursor, align 16 + %a17 = alloca %S.C.CXType, align 16 + %a19 = alloca %S.C.CXType, align 16 + %a21 = alloca %S.C.CXCursor, align 16 + %a26 = alloca %S.C.CXType, align 16 + %a30 = alloca %S.C.CXType, align 16 + %a34 = alloca %S.C.CXCursor, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.C.CXCursor, align 16 + %a51 = alloca %S.C.CXType, align 16 + %a53 = alloca %S.C.CXCursor, align 16 + %a64 = alloca %S.cimport.Mapped, align 16 + %a70 = alloca %S.ast.Type, align 16 + %a71 = alloca %S.ast.Type, align 16 + %a74 = alloca %S.ast.Type, align 16 + %a97 = alloca %S.cimport.CField, align 16 + %a98 = alloca %S.cimport.CField, align 16 + store %S.C.CXCursor %p0, ptr %a1 + store ptr %p1, ptr %a2 + %t3 = load ptr, ptr %a2 + store ptr %t3, ptr %a4 + %t6 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t6, ptr %a7 + call void @clang_getCursorSpelling(ptr sret(%S.C.CXString) align 16 %a5, ptr %a7) + %t8 = load %S.C.CXString, ptr %a5 + %t9 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t8) + %t10 = insertvalue %S.cimport.CField zeroinitializer, { ptr, i64, i64 } %t9, 0 + store %S.cimport.CField %t10, ptr %a11 + %t14 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t14, ptr %a15 + call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a13, ptr %a15) + %t16 = load %S.C.CXType, ptr %a13 + store %S.C.CXType %t16, ptr %a17 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a12, ptr %a17) + %t18 = load %S.C.CXType, ptr %a12 + store %S.C.CXType %t18, ptr %a19 + %t20 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t20, ptr %a21 + %t22 = call i64 @clang_Cursor_getOffsetOfField(ptr %a21) + %t23 = sdiv i64 %t22, 8 + %t24 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 2 + store i64 %t23, ptr %t24 + %t25 = load %S.C.CXType, ptr %a19 + store %S.C.CXType %t25, ptr %a26 + %t27 = call i64 @clang_Type_getSizeOf(ptr %a26) + %t28 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 3 + store i64 %t27, ptr %t28 + %t29 = load %S.C.CXType, ptr %a19 + store %S.C.CXType %t29, ptr %a30 + %t31 = call i64 @clang_Type_getAlignOf(ptr %a30) + %t32 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 4 + store i64 %t31, ptr %t32 + %t33 = load %S.C.CXCursor, ptr %a1 + store %S.C.CXCursor %t33, ptr %a34 + %t35 = call i32 @clang_Cursor_isBitField(ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br i1 %t36, label %then9328, label %else9329 +then9328: + %t37 = load ptr, ptr %a4 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic9331, label %ok9332 +panic9331: + call void @finch_panic(ptr @.str.6477, i64 195, ptr @.str.6478) + unreachable +ok9332: + %t39 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t37, i32 0, i32 1 + %t40 = load ptr, ptr %t39 + %t41 = icmp eq ptr %t40, null + br i1 %t41, label %panic9333, label %ok9334 +panic9333: + call void @finch_panic(ptr @.str.6479, i64 195, ptr @.str.6480) + unreachable +ok9334: + %t42 = getelementptr inbounds %S.cimport.CStruct, ptr %t40, i32 0, i32 4 + %t43 = load { ptr, i64, i64 }, ptr %t42 + store { ptr, i64, i64 } { ptr @.str.6476, i64 14, i64 0 }, ptr %t42 + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 5 + store i1 true, ptr %t45 + br label %endif9330 +else9329: + %t46 = getelementptr inbounds %S.C.CXType, ptr %a19, i32 0, i32 0 + %t47 = load i32, ptr %t46 + %t48 = icmp eq i32 %t47, 105 + br label %logic.from9335 +logic.from9335: + br i1 %t48, label %logic.rhs9336, label %logic.end9337 +logic.rhs9336: + %t50 = load %S.C.CXType, ptr %a19 + store %S.C.CXType %t50, ptr %a51 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a49, ptr %a51) + %t52 = load %S.C.CXCursor, ptr %a49 + store %S.C.CXCursor %t52, ptr %a53 + %t54 = call i32 @clang_getCursorKind(ptr %a53) + %t55 = icmp eq i32 %t54, 3 + br label %logic.rend9338 +logic.rend9338: + br label %logic.end9337 +logic.end9337: + %t56 = phi i1 [ false, %logic.from9335 ], [ %t55, %logic.rend9338 ] + br i1 %t56, label %then9339, label %else9340 +then9339: + %t57 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 5 + store i1 true, ptr %t57 + br label %endif9341 +else9340: + %t58 = load ptr, ptr %a4 + %t59 = icmp eq ptr %t58, null + br i1 %t59, label %panic9342, label %ok9343 +panic9342: + call void @finch_panic(ptr @.str.6481, i64 200, ptr @.str.6482) + unreachable +ok9343: + %t60 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t58, i32 0, i32 0 + %t61 = load ptr, ptr %t60 + %t62 = load %S.C.CXType, ptr %a19 + %t63 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t61, %S.C.CXType %t62, i1 false, i1 false) + store %S.cimport.Mapped %t63, ptr %a64 + %t65 = getelementptr inbounds %S.cimport.Mapped, ptr %a64, i32 0, i32 2 + %t66 = load i1, ptr %t65 + br i1 %t66, label %then9344, label %else9345 +then9344: + %t67 = getelementptr inbounds %S.cimport.Mapped, ptr %a64, i32 0, i32 0 + %t68 = load %S.ast.Type, ptr %t67 + %t69 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 1 + store %S.ast.Type %t68, ptr %a70 + call void @finch.copy.S_ast_Type(ptr %a71, ptr %a70) + %t72 = load %S.ast.Type, ptr %a71 + %t73 = load %S.ast.Type, ptr %t69 + store %S.ast.Type %t72, ptr %t69 + store %S.ast.Type %t73, ptr %a74 + call void @finch.drop.S_ast_Type(ptr %a74) + br label %endif9346 +else9345: + %t75 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 5 + store i1 true, ptr %t75 + br label %endif9346 +endif9346: + call void @finch.drop.S_cimport_Mapped(ptr %a64) + br label %endif9341 +endif9341: + br label %endif9330 +endif9330: + %t76 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 5 + %t77 = load i1, ptr %t76 + br i1 %t77, label %then9347, label %endif9349 +then9347: + %t78 = load ptr, ptr %a4 + %t79 = icmp eq ptr %t78, null + br i1 %t79, label %panic9350, label %ok9351 +panic9350: + call void @finch_panic(ptr @.str.6483, i64 208, ptr @.str.6484) + unreachable +ok9351: + %t80 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t78, i32 0, i32 1 + %t81 = load ptr, ptr %t80 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic9352, label %ok9353 +panic9352: + call void @finch_panic(ptr @.str.6485, i64 208, ptr @.str.6486) + unreachable +ok9353: + %t83 = getelementptr inbounds %S.cimport.CStruct, ptr %t81, i32 0, i32 5 + store i1 true, ptr %t83 + br label %endif9349 +endif9349: + %t84 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 0 + %t85 = getelementptr inbounds { ptr, i64, i64 }, ptr %t84, i32 0, i32 1 + %t86 = load i64, ptr %t85 + %t87 = icmp eq i64 %t86, 0 + br i1 %t87, label %then9354, label %endif9356 +then9354: + %t88 = getelementptr inbounds %S.cimport.CField, ptr %a11, i32 0, i32 5 + store i1 true, ptr %t88 + br label %endif9356 +endif9356: + %t89 = load ptr, ptr %a4 + %t90 = icmp eq ptr %t89, null + br i1 %t90, label %panic9357, label %ok9358 +panic9357: + call void @finch_panic(ptr @.str.6487, i64 213, ptr @.str.6488) + unreachable +ok9358: + %t91 = getelementptr inbounds %S.cimport.FieldCtx, ptr %t89, i32 0, i32 1 + %t92 = load ptr, ptr %t91 + %t93 = icmp eq ptr %t92, null + br i1 %t93, label %panic9359, label %ok9360 +panic9359: + call void @finch_panic(ptr @.str.6489, i64 213, ptr @.str.6490) + unreachable +ok9360: + %t94 = getelementptr inbounds %S.cimport.CStruct, ptr %t92, i32 0, i32 1 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t96 = load %S.cimport.CField, ptr %a11 + store %S.cimport.CField %t96, ptr %a97 + call void @finch.copy.S_cimport_CField(ptr %a98, ptr %a97) + %t99 = load %S.cimport.CField, ptr %a98 + %t100 = load i64, ptr %t95 + %t101 = add i64 %t100, 1 + call void @finch_arr_reserve(ptr %t94, i64 %t101, i64 ptrtoint (ptr getelementptr (%S.cimport.CField, ptr null, i32 1) to i64)) + %t102 = load ptr, ptr %t94 + %t103 = getelementptr inbounds %S.cimport.CField, ptr %t102, i64 %t100 + store %S.cimport.CField %t99, ptr %t103 + store i64 %t101, ptr %t95 + call void @finch.drop.S_cimport_CField(ptr %a11) + ret i32 1 +} + +define internal %S.cimport.Mapped @finch.cimport.sized(i64 %p0, i1 %p1) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i1, align 16 + %a8 = alloca %S.ast.Type, align 16 + %a11 = alloca %S.ast.Type, align 16 + %a17 = alloca %S.ast.Type, align 16 + %a20 = alloca %S.ast.Type, align 16 + %a26 = alloca %S.ast.Type, align 16 + %a29 = alloca %S.ast.Type, align 16 + %a35 = alloca %S.ast.Type, align 16 + %a38 = alloca %S.ast.Type, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store i1 %p1, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = icmp eq i64 %t3, 1 + br i1 %t4, label %then9361, label %endif9363 +then9361: + %t5 = load i1, ptr %a2 + br i1 %t5, label %then9364, label %endif9366 +then9364: + %t6 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6491, i64 2, i64 0 }) + %t7 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t6) + store %S.ast.Type %t6, ptr %a8 + call void @finch.drop.S_ast_Type(ptr %a8) + ret %S.cimport.Mapped %t7 +endif9366: + %t9 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6492, i64 2, i64 0 }) + %t10 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t9) + store %S.ast.Type %t9, ptr %a11 + call void @finch.drop.S_ast_Type(ptr %a11) + ret %S.cimport.Mapped %t10 +endif9363: + %t12 = load i64, ptr %a1 + %t13 = icmp eq i64 %t12, 2 + br i1 %t13, label %then9367, label %endif9369 +then9367: + %t14 = load i1, ptr %a2 + br i1 %t14, label %then9370, label %endif9372 +then9370: + %t15 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6493, i64 3, i64 0 }) + %t16 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t15) + store %S.ast.Type %t15, ptr %a17 + call void @finch.drop.S_ast_Type(ptr %a17) + ret %S.cimport.Mapped %t16 +endif9372: + %t18 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6494, i64 3, i64 0 }) + %t19 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t18) + store %S.ast.Type %t18, ptr %a20 + call void @finch.drop.S_ast_Type(ptr %a20) + ret %S.cimport.Mapped %t19 +endif9369: + %t21 = load i64, ptr %a1 + %t22 = icmp eq i64 %t21, 4 + br i1 %t22, label %then9373, label %endif9375 +then9373: + %t23 = load i1, ptr %a2 + br i1 %t23, label %then9376, label %endif9378 +then9376: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6495, i64 3, i64 0 }) + %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) + store %S.ast.Type %t24, ptr %a26 + call void @finch.drop.S_ast_Type(ptr %a26) + ret %S.cimport.Mapped %t25 +endif9378: + %t27 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6496, i64 3, i64 0 }) + %t28 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t27) + store %S.ast.Type %t27, ptr %a29 + call void @finch.drop.S_ast_Type(ptr %a29) + ret %S.cimport.Mapped %t28 +endif9375: + %t30 = load i64, ptr %a1 + %t31 = icmp eq i64 %t30, 8 + br i1 %t31, label %then9379, label %endif9381 +then9379: + %t32 = load i1, ptr %a2 + br i1 %t32, label %then9382, label %endif9384 +then9382: + %t33 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6497, i64 3, i64 0 }) + %t34 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t33) + store %S.ast.Type %t33, ptr %a35 + call void @finch.drop.S_ast_Type(ptr %a35) + ret %S.cimport.Mapped %t34 +endif9384: + %t36 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6498, i64 3, i64 0 }) + %t37 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t36) + store %S.ast.Type %t36, ptr %a38 + call void @finch.drop.S_ast_Type(ptr %a38) + ret %S.cimport.Mapped %t37 +endif9381: + %t39 = load i64, ptr %a1 + %t40 = mul i64 %t39, 8 + call void @finch_str_from_int(ptr %a41, i64 %t40) + %t42 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } { ptr @.str.6499, i64 7, i64 0 }, ptr %a44 + store { ptr, i64, i64 } %t42, ptr %a45 + call void @finch_str_concat(ptr %a43, ptr %a44, ptr %a45) + store { ptr, i64, i64 } %t42, ptr %a46 + call void @finch_str_drop(ptr %a46) + %t47 = load { ptr, i64, i64 }, ptr %a43 + store { ptr, i64, i64 } %t47, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.6500, i64 11, i64 0 }, ptr %a50 + call void @finch_str_concat(ptr %a48, ptr %a49, ptr %a50) + store { ptr, i64, i64 } %t47, ptr %a51 + call void @finch_str_drop(ptr %a51) + %t52 = load { ptr, i64, i64 }, ptr %a48 + %t53 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t52) + store { ptr, i64, i64 } %t52, ptr %a54 + call void @finch_str_drop(ptr %a54) + ret %S.cimport.Mapped %t53 +} + +define internal %S.cimport.Mapped @finch.cimport.mapType(ptr %p0, %S.C.CXType %p1, i1 %p2, i1 %p3) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXType, align 16 + %a3 = alloca i1, align 16 + %a4 = alloca i1, align 16 + %a5 = alloca %S.C.CXType, align 16 + %a7 = alloca %S.C.CXType, align 16 + %a9 = alloca %S.C.CXType, align 16 + %a11 = alloca %S.C.CXType, align 16 + %a13 = alloca i64, align 16 + %a16 = alloca i32, align 16 + %a21 = alloca %S.ast.Type, align 16 + %a26 = alloca %S.ast.Type, align 16 + %a34 = alloca %S.ast.Type, align 16 + %a75 = alloca %S.ast.Type, align 16 + %a80 = alloca %S.ast.Type, align 16 + %a83 = alloca %S.C.CXType, align 16 + %a84 = alloca %S.C.CXType, align 16 + %a86 = alloca %S.C.CXType, align 16 + %a88 = alloca %S.C.CXType, align 16 + %a90 = alloca %S.C.CXType, align 16 + %a103 = alloca %S.C.CXType, align 16 + %a109 = alloca %S.ast.Type, align 16 + %a123 = alloca %S.ast.Type, align 16 + %a127 = alloca %S.cimport.Mapped, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a142 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca %S.ast.Type, align 16 + %a154 = alloca %S.ast.Type, align 16 + %a157 = alloca %S.C.CXCursor, align 16 + %a159 = alloca %S.C.CXType, align 16 + %a161 = alloca %S.C.CXCursor, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca %S.ast.Type, align 16 + %a185 = alloca %S.C.CXType, align 16 + %a187 = alloca %S.C.CXType, align 16 + %a190 = alloca %S.cimport.Mapped, align 16 + %a198 = alloca %S.C.CXType, align 16 + %a202 = alloca %S.ast.Type, align 16 + %a206 = alloca %S.C.CXString, align 16 + %a208 = alloca %S.C.CXType, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXType %p1, ptr %a2 + store i1 %p2, ptr %a3 + store i1 %p3, ptr %a4 + %t6 = load %S.C.CXType, ptr %a2 + store %S.C.CXType %t6, ptr %a7 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a5, ptr %a7) + %t8 = load %S.C.CXType, ptr %a5 + store %S.C.CXType %t8, ptr %a9 + %t10 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t10, ptr %a11 + %t12 = call i64 @clang_Type_getSizeOf(ptr %a11) + store i64 %t12, ptr %a13 + %t14 = getelementptr inbounds %S.C.CXType, ptr %a9, i32 0, i32 0 + %t15 = load i32, ptr %t14 + store i32 %t15, ptr %a16 + %t17 = load i32, ptr %a16 + %t18 = icmp eq i32 %t17, 2 + br i1 %t18, label %then9385, label %endif9387 +then9385: + %t19 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6501, i64 4, i64 0 }) + %t20 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t19) + store %S.ast.Type %t19, ptr %a21 + call void @finch.drop.S_ast_Type(ptr %a21) + ret %S.cimport.Mapped %t20 +endif9387: + %t22 = load i32, ptr %a16 + %t23 = icmp eq i32 %t22, 3 + br i1 %t23, label %then9388, label %endif9390 +then9388: + %t24 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6502, i64 4, i64 0 }) + %t25 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t24) + store %S.ast.Type %t24, ptr %a26 + call void @finch.drop.S_ast_Type(ptr %a26) + ret %S.cimport.Mapped %t25 +endif9390: + %t27 = load i32, ptr %a16 + %t28 = icmp eq i32 %t27, 13 + br label %logic.from9391 +logic.from9391: + br i1 %t28, label %logic.end9393, label %logic.rhs9392 +logic.rhs9392: + %t29 = load i32, ptr %a16 + %t30 = icmp eq i32 %t29, 4 + br label %logic.rend9394 +logic.rend9394: + br label %logic.end9393 +logic.end9393: + %t31 = phi i1 [ true, %logic.from9391 ], [ %t30, %logic.rend9394 ] + br i1 %t31, label %then9395, label %endif9397 +then9395: + %t32 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6503, i64 4, i64 0 }) + %t33 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t32) + store %S.ast.Type %t32, ptr %a34 + call void @finch.drop.S_ast_Type(ptr %a34) + ret %S.cimport.Mapped %t33 +endif9397: + %t35 = load i32, ptr %a16 + %t36 = icmp eq i32 %t35, 14 + br label %logic.from9398 +logic.from9398: + br i1 %t36, label %logic.end9400, label %logic.rhs9399 +logic.rhs9399: + %t37 = load i32, ptr %a16 + %t38 = icmp eq i32 %t37, 16 + br label %logic.rend9401 +logic.rend9401: + br label %logic.end9400 +logic.end9400: + %t39 = phi i1 [ true, %logic.from9398 ], [ %t38, %logic.rend9401 ] + br label %logic.from9402 +logic.from9402: + br i1 %t39, label %logic.end9404, label %logic.rhs9403 +logic.rhs9403: + %t40 = load i32, ptr %a16 + %t41 = icmp eq i32 %t40, 17 + br label %logic.rend9405 +logic.rend9405: + br label %logic.end9404 +logic.end9404: + %t42 = phi i1 [ true, %logic.from9402 ], [ %t41, %logic.rend9405 ] + br label %logic.from9406 +logic.from9406: + br i1 %t42, label %logic.end9408, label %logic.rhs9407 +logic.rhs9407: + %t43 = load i32, ptr %a16 + %t44 = icmp eq i32 %t43, 18 + br label %logic.rend9409 +logic.rend9409: + br label %logic.end9408 +logic.end9408: + %t45 = phi i1 [ true, %logic.from9406 ], [ %t44, %logic.rend9409 ] + br label %logic.from9410 +logic.from9410: + br i1 %t45, label %logic.end9412, label %logic.rhs9411 +logic.rhs9411: + %t46 = load i32, ptr %a16 + %t47 = icmp eq i32 %t46, 19 + br label %logic.rend9413 +logic.rend9413: + br label %logic.end9412 +logic.end9412: + %t48 = phi i1 [ true, %logic.from9410 ], [ %t47, %logic.rend9413 ] + br i1 %t48, label %then9414, label %endif9416 +then9414: + %t49 = load i64, ptr %a13 + %t50 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t49, i1 true) + ret %S.cimport.Mapped %t50 +endif9416: + %t51 = load i32, ptr %a16 + %t52 = icmp eq i32 %t51, 5 + br label %logic.from9417 +logic.from9417: + br i1 %t52, label %logic.end9419, label %logic.rhs9418 +logic.rhs9418: + %t53 = load i32, ptr %a16 + %t54 = icmp eq i32 %t53, 8 + br label %logic.rend9420 +logic.rend9420: + br label %logic.end9419 +logic.end9419: + %t55 = phi i1 [ true, %logic.from9417 ], [ %t54, %logic.rend9420 ] + br label %logic.from9421 +logic.from9421: + br i1 %t55, label %logic.end9423, label %logic.rhs9422 +logic.rhs9422: + %t56 = load i32, ptr %a16 + %t57 = icmp eq i32 %t56, 9 + br label %logic.rend9424 +logic.rend9424: + br label %logic.end9423 +logic.end9423: + %t58 = phi i1 [ true, %logic.from9421 ], [ %t57, %logic.rend9424 ] + br label %logic.from9425 +logic.from9425: + br i1 %t58, label %logic.end9427, label %logic.rhs9426 +logic.rhs9426: + %t59 = load i32, ptr %a16 + %t60 = icmp eq i32 %t59, 10 + br label %logic.rend9428 +logic.rend9428: + br label %logic.end9427 +logic.end9427: + %t61 = phi i1 [ true, %logic.from9425 ], [ %t60, %logic.rend9428 ] + br label %logic.from9429 +logic.from9429: + br i1 %t61, label %logic.end9431, label %logic.rhs9430 +logic.rhs9430: + %t62 = load i32, ptr %a16 + %t63 = icmp eq i32 %t62, 11 + br label %logic.rend9432 +logic.rend9432: + br label %logic.end9431 +logic.end9431: + %t64 = phi i1 [ true, %logic.from9429 ], [ %t63, %logic.rend9432 ] + br i1 %t64, label %then9433, label %endif9435 +then9433: + %t65 = load i64, ptr %a13 + %t66 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t65, i1 false) + ret %S.cimport.Mapped %t66 +endif9435: + %t67 = load i32, ptr %a16 + %t68 = icmp eq i32 %t67, 106 + br i1 %t68, label %then9436, label %endif9438 +then9436: + %t69 = load i64, ptr %a13 + %t70 = call %S.cimport.Mapped @finch.cimport.sized(i64 %t69, i1 true) + ret %S.cimport.Mapped %t70 +endif9438: + %t71 = load i32, ptr %a16 + %t72 = icmp eq i32 %t71, 21 + br i1 %t72, label %then9439, label %endif9441 +then9439: + %t73 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6504, i64 3, i64 0 }) + %t74 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t73) + store %S.ast.Type %t73, ptr %a75 + call void @finch.drop.S_ast_Type(ptr %a75) + ret %S.cimport.Mapped %t74 +endif9441: + %t76 = load i32, ptr %a16 + %t77 = icmp eq i32 %t76, 22 + br i1 %t77, label %then9442, label %endif9444 +then9442: + %t78 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6505, i64 5, i64 0 }) + %t79 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t78) + store %S.ast.Type %t78, ptr %a80 + call void @finch.drop.S_ast_Type(ptr %a80) + ret %S.cimport.Mapped %t79 +endif9444: + %t81 = load i32, ptr %a16 + %t82 = icmp eq i32 %t81, 101 + br i1 %t82, label %then9445, label %endif9447 +then9445: + %t85 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t85, ptr %a86 + call void @clang_getPointeeType(ptr sret(%S.C.CXType) align 16 %a84, ptr %a86) + %t87 = load %S.C.CXType, ptr %a84 + store %S.C.CXType %t87, ptr %a88 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a83, ptr %a88) + %t89 = load %S.C.CXType, ptr %a83 + store %S.C.CXType %t89, ptr %a90 + %t91 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t92 = load i32, ptr %t91 + %t93 = icmp eq i32 %t92, 13 + br label %logic.from9448 +logic.from9448: + br i1 %t93, label %logic.end9450, label %logic.rhs9449 +logic.rhs9449: + %t94 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t95 = load i32, ptr %t94 + %t96 = icmp eq i32 %t95, 4 + br label %logic.rend9451 +logic.rend9451: + br label %logic.end9450 +logic.end9450: + %t97 = phi i1 [ true, %logic.from9448 ], [ %t96, %logic.rend9451 ] + br label %logic.from9452 +logic.from9452: + br i1 %t97, label %logic.rhs9453, label %logic.end9454 +logic.rhs9453: + %t98 = load i1, ptr %a3 + br label %logic.rend9455 +logic.rend9455: + br label %logic.end9454 +logic.end9454: + %t99 = phi i1 [ false, %logic.from9452 ], [ %t98, %logic.rend9455 ] + br i1 %t99, label %then9456, label %endif9458 +then9456: + %t100 = load i1, ptr %a4 + %t101 = xor i1 %t100, true + br label %logic.from9459 +logic.from9459: + br i1 %t101, label %logic.end9461, label %logic.rhs9460 +logic.rhs9460: + %t102 = load %S.C.CXType, ptr %a90 + store %S.C.CXType %t102, ptr %a103 + %t104 = call i32 @clang_isConstQualifiedType(ptr %a103) + %t105 = icmp ne i32 %t104, 0 + br label %logic.rend9462 +logic.rend9462: + br label %logic.end9461 +logic.end9461: + %t106 = phi i1 [ true, %logic.from9459 ], [ %t105, %logic.rend9462 ] + br i1 %t106, label %then9463, label %endif9465 +then9463: + %t107 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6506, i64 3, i64 0 }) + %t108 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t107) + store %S.ast.Type %t107, ptr %a109 + call void @finch.drop.S_ast_Type(ptr %a109) + ret %S.cimport.Mapped %t108 +endif9465: + br label %endif9458 +endif9458: + %t110 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t111 = load i32, ptr %t110 + %t112 = icmp eq i32 %t111, 2 + br label %logic.from9466 +logic.from9466: + br i1 %t112, label %logic.end9468, label %logic.rhs9467 +logic.rhs9467: + %t113 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t114 = load i32, ptr %t113 + %t115 = icmp eq i32 %t114, 111 + br label %logic.rend9469 +logic.rend9469: + br label %logic.end9468 +logic.end9468: + %t116 = phi i1 [ true, %logic.from9466 ], [ %t115, %logic.rend9469 ] + br label %logic.from9470 +logic.from9470: + br i1 %t116, label %logic.end9472, label %logic.rhs9471 +logic.rhs9471: + %t117 = getelementptr inbounds %S.C.CXType, ptr %a90, i32 0, i32 0 + %t118 = load i32, ptr %t117 + %t119 = icmp eq i32 %t118, 110 + br label %logic.rend9473 +logic.rend9473: + br label %logic.end9472 +logic.end9472: + %t120 = phi i1 [ true, %logic.from9470 ], [ %t119, %logic.rend9473 ] + br i1 %t120, label %then9474, label %endif9476 +then9474: + %t121 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6507, i64 3, i64 0 }) + %t122 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t121) + store %S.ast.Type %t121, ptr %a123 + call void @finch.drop.S_ast_Type(ptr %a123) + ret %S.cimport.Mapped %t122 +endif9476: + %t124 = load ptr, ptr %a1 + %t125 = load %S.C.CXType, ptr %a90 + %t126 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t124, %S.C.CXType %t125, i1 false, i1 false) + store %S.cimport.Mapped %t126, ptr %a127 + %t128 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 2 + %t129 = load i1, ptr %t128 + %t130 = xor i1 %t129, true + br label %logic.from9477 +logic.from9477: + br i1 %t130, label %logic.end9479, label %logic.rhs9478 +logic.rhs9478: + %t131 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 + %t132 = getelementptr inbounds %S.ast.Type, ptr %t131, i32 0, i32 0 + %t133 = load { ptr, i64, i64 }, ptr %t132 + store { ptr, i64, i64 } %t133, ptr %a134 + store { ptr, i64, i64 } { ptr @.str.6508, i64 4, i64 0 }, ptr %a135 + %t136 = call i32 @finch_str_eq(ptr %a134, ptr %a135) + %t137 = icmp ne i32 %t136, 0 + br label %logic.rend9480 +logic.rend9480: + br label %logic.end9479 +logic.end9479: + %t138 = phi i1 [ true, %logic.from9477 ], [ %t137, %logic.rend9480 ] + br label %logic.from9481 +logic.from9481: + br i1 %t138, label %logic.end9483, label %logic.rhs9482 +logic.rhs9482: + %t139 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 + %t140 = getelementptr inbounds %S.ast.Type, ptr %t139, i32 0, i32 0 + %t141 = load { ptr, i64, i64 }, ptr %t140 + store { ptr, i64, i64 } %t141, ptr %a142 + store { ptr, i64, i64 } { ptr @.str.6509, i64 5, i64 0 }, ptr %a143 + %t144 = call i32 @finch_str_eq(ptr %a142, ptr %a143) + %t145 = icmp ne i32 %t144, 0 + br label %logic.rend9484 +logic.rend9484: + br label %logic.end9483 +logic.end9483: + %t146 = phi i1 [ true, %logic.from9481 ], [ %t145, %logic.rend9484 ] + br i1 %t146, label %then9485, label %endif9487 +then9485: + %t147 = call %S.ast.Type @finch.ast.simple({ ptr, i64, i64 } { ptr @.str.6510, i64 3, i64 0 }) + %t148 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t147) + store %S.ast.Type %t147, ptr %a149 + call void @finch.drop.S_ast_Type(ptr %a149) + call void @finch.drop.S_cimport_Mapped(ptr %a127) + ret %S.cimport.Mapped %t148 +endif9487: + %t150 = getelementptr inbounds %S.cimport.Mapped, ptr %a127, i32 0, i32 0 + %t151 = load %S.ast.Type, ptr %t150 + %t152 = call %S.ast.Type @finch.ast.ptrTo(%S.ast.Type %t151) + %t153 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t152) + store %S.ast.Type %t152, ptr %a154 + call void @finch.drop.S_ast_Type(ptr %a154) + call void @finch.drop.S_cimport_Mapped(ptr %a127) + ret %S.cimport.Mapped %t153 +endif9447: + %t155 = load i32, ptr %a16 + %t156 = icmp eq i32 %t155, 105 + br i1 %t156, label %then9488, label %endif9490 +then9488: + %t158 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t158, ptr %a159 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a157, ptr %a159) + %t160 = load %S.C.CXCursor, ptr %a157 + store %S.C.CXCursor %t160, ptr %a161 + %t162 = call i32 @clang_getCursorKind(ptr %a161) + %t163 = icmp eq i32 %t162, 3 + br i1 %t163, label %then9491, label %endif9493 +then9491: + %t164 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6511, i64 23, i64 0 }) + ret %S.cimport.Mapped %t164 +endif9493: + %t165 = load ptr, ptr %a1 + %t166 = load %S.C.CXType, ptr %a9 + %t167 = call { ptr, i64, i64 } @finch.cimport.defineRecord(ptr %t165, %S.C.CXType %t166) + store { ptr, i64, i64 } %t167, ptr %a168 + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %a168, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = icmp eq i64 %t170, 0 + br i1 %t171, label %then9494, label %endif9496 +then9494: + %t172 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6512, i64 36, i64 0 }) + call void @finch_str_drop(ptr %a168) + ret %S.cimport.Mapped %t172 +endif9496: + %t173 = insertvalue %S.ast.Type zeroinitializer, { ptr, i64, i64 } { ptr @.str.6513, i64 5, i64 0 }, 0 + %t174 = load { ptr, i64, i64 }, ptr %a168 + store { ptr, i64, i64 } %t174, ptr %a175 + call void @finch_str_copy(ptr %a176, ptr %a175) + %t177 = load { ptr, i64, i64 }, ptr %a176 + %t178 = insertvalue %S.ast.Type %t173, { ptr, i64, i64 } %t177, 2 + %t179 = insertvalue %S.ast.Type %t178, { ptr, i64, i64 } { ptr @.str.6514, i64 1, i64 0 }, 3 + %t180 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t179) + store %S.ast.Type %t179, ptr %a181 + call void @finch.drop.S_ast_Type(ptr %a181) + call void @finch_str_drop(ptr %a168) + ret %S.cimport.Mapped %t180 +endif9490: + %t182 = load i32, ptr %a16 + %t183 = icmp eq i32 %t182, 112 + br i1 %t183, label %then9497, label %endif9499 +then9497: + %t184 = load ptr, ptr %a1 + %t186 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t186, ptr %a187 + call void @clang_getArrayElementType(ptr sret(%S.C.CXType) align 16 %a185, ptr %a187) + %t188 = load %S.C.CXType, ptr %a185 + %t189 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t184, %S.C.CXType %t188, i1 false, i1 false) + store %S.cimport.Mapped %t189, ptr %a190 + %t191 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 2 + %t192 = load i1, ptr %t191 + %t193 = xor i1 %t192, true + br i1 %t193, label %then9500, label %endif9502 +then9500: + %t194 = load %S.cimport.Mapped, ptr %a190 + ret %S.cimport.Mapped %t194 +endif9502: + %t195 = getelementptr inbounds %S.cimport.Mapped, ptr %a190, i32 0, i32 0 + %t196 = load %S.ast.Type, ptr %t195 + %t197 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t197, ptr %a198 + %t199 = call i64 @clang_getArraySize(ptr %a198) + %t200 = call %S.ast.Type @finch.cimport.fixed(%S.ast.Type %t196, i64 %t199) + %t201 = call %S.cimport.Mapped @finch.cimport.ok(%S.ast.Type %t200) + store %S.ast.Type %t200, ptr %a202 + call void @finch.drop.S_ast_Type(ptr %a202) + call void @finch.drop.S_cimport_Mapped(ptr %a190) + ret %S.cimport.Mapped %t201 +endif9499: + %t203 = load i32, ptr %a16 + %t204 = icmp eq i32 %t203, 23 + br i1 %t204, label %then9503, label %endif9505 +then9503: + %t205 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } { ptr @.str.6515, i64 16, i64 0 }) + ret %S.cimport.Mapped %t205 +endif9505: + %t207 = load %S.C.CXType, ptr %a9 + store %S.C.CXType %t207, ptr %a208 + call void @clang_getTypeSpelling(ptr sret(%S.C.CXString) align 16 %a206, ptr %a208) + %t209 = load %S.C.CXString, ptr %a206 + %t210 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t209) + store { ptr, i64, i64 } { ptr @.str.6516, i64 17, i64 0 }, ptr %a212 + store { ptr, i64, i64 } %t210, ptr %a213 + call void @finch_str_concat(ptr %a211, ptr %a212, ptr %a213) + store { ptr, i64, i64 } %t210, ptr %a214 + call void @finch_str_drop(ptr %a214) + %t215 = load { ptr, i64, i64 }, ptr %a211 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.6517, i64 1, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + store { ptr, i64, i64 } %t215, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = load { ptr, i64, i64 }, ptr %a216 + %t221 = call %S.cimport.Mapped @finch.cimport.no({ ptr, i64, i64 } %t220) + store { ptr, i64, i64 } %t220, ptr %a222 + call void @finch_str_drop(ptr %a222) + ret %S.cimport.Mapped %t221 +} + +define internal %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca i64, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca i64, align 16 + %a49 = alloca i1, align 16 + %a50 = alloca i64, align 16 + %a62 = alloca i8, align 16 + %a63 = alloca i64, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + store i64 10, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t8, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.6519, i64 2, i64 0 }, ptr %a11 + %t12 = call i32 @finch_str_starts(ptr %a9, ptr %a11) + %t13 = icmp ne i32 %t12, 0 + br label %logic.from9506 +logic.from9506: + br i1 %t13, label %logic.end9508, label %logic.rhs9507 +logic.rhs9507: + %t14 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6521, i64 2, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br label %logic.rend9509 +logic.rend9509: + br label %logic.end9508 +logic.end9508: + %t20 = phi i1 [ true, %logic.from9506 ], [ %t19, %logic.rend9509 ] + br i1 %t20, label %then9510, label %else9511 +then9510: + store i64 16, ptr %a7 + %t21 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t21, ptr %a22 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t25 = load i64, ptr %t24 + call void @finch_str_sub(ptr %a23, ptr %a22, i64 2, i64 %t25, ptr @.str.6522, i64 331) + %t26 = load { ptr, i64, i64 }, ptr %a23 + %t27 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t26, ptr %a6 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_drop(ptr %a28) + br label %endif9512 +else9511: + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = icmp sgt i64 %t30, 1 + br label %logic.from9513 +logic.from9513: + br i1 %t31, label %logic.rhs9514, label %logic.end9515 +logic.rhs9514: + %t32 = load { ptr, i64, i64 }, ptr %a6 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 0, %t33 + br i1 %t34, label %range9516, label %inrange9517 +range9516: + call void @finch_panic_index(ptr @.str.6523, i64 332, i64 0, i64 %t33) + unreachable +inrange9517: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds i8, ptr %t35, i64 0 + %t37 = load i8, ptr %t36 + %t38 = icmp eq i8 %t37, 48 + br label %logic.rend9518 +logic.rend9518: + br label %logic.end9515 +logic.end9515: + %t39 = phi i1 [ false, %logic.from9513 ], [ %t38, %logic.rend9518 ] + br i1 %t39, label %then9519, label %endif9521 +then9519: + store i64 8, ptr %a7 + %t40 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t40, ptr %a41 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t44 = load i64, ptr %t43 + call void @finch_str_sub(ptr %a42, ptr %a41, i64 1, i64 %t44, ptr @.str.6524, i64 334) + %t45 = load { ptr, i64, i64 }, ptr %a42 + %t46 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t45, ptr %a6 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %endif9521 +endif9521: + br label %endif9512 +endif9512: + store i64 0, ptr %a48 + store i1 false, ptr %a49 + store i64 0, ptr %a50 + br label %while.cond9522 +while.cond9522: + %t51 = load i64, ptr %a50 + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t53 = load i64, ptr %t52 + %t54 = icmp slt i64 %t51, %t53 + br i1 %t54, label %while.body9523, label %while.end9524 +while.body9523: + %t55 = load i64, ptr %a50 + %t56 = load { ptr, i64, i64 }, ptr %a6 + %t57 = extractvalue { ptr, i64, i64 } %t56, 1 + %t58 = icmp uge i64 %t55, %t57 + br i1 %t58, label %range9525, label %inrange9526 +range9525: + call void @finch_panic_index(ptr @.str.6525, i64 340, i64 %t55, i64 %t57) + unreachable +inrange9526: + %t59 = extractvalue { ptr, i64, i64 } %t56, 0 + %t60 = getelementptr inbounds i8, ptr %t59, i64 %t55 + %t61 = load i8, ptr %t60 + store i8 %t61, ptr %a62 + store i64 99, ptr %a63 + %t64 = load i8, ptr %a62 + %t65 = icmp uge i8 %t64, 48 + br label %logic.from9527 +logic.from9527: + br i1 %t65, label %logic.rhs9528, label %logic.end9529 +logic.rhs9528: + %t66 = load i8, ptr %a62 + %t67 = icmp ule i8 %t66, 57 + br label %logic.rend9530 +logic.rend9530: + br label %logic.end9529 +logic.end9529: + %t68 = phi i1 [ false, %logic.from9527 ], [ %t67, %logic.rend9530 ] + br i1 %t68, label %then9531, label %else9532 +then9531: + %t69 = load i8, ptr %a62 + %t70 = zext i8 %t69 to i64 + %t71 = zext i8 48 to i64 + %t72 = sub i64 %t70, %t71 + store i64 %t72, ptr %a63 + br label %endif9533 +else9532: + %t73 = load i8, ptr %a62 + %t74 = icmp uge i8 %t73, 97 + br label %logic.from9534 +logic.from9534: + br i1 %t74, label %logic.rhs9535, label %logic.end9536 +logic.rhs9535: + %t75 = load i8, ptr %a62 + %t76 = icmp ule i8 %t75, 102 + br label %logic.rend9537 +logic.rend9537: + br label %logic.end9536 +logic.end9536: + %t77 = phi i1 [ false, %logic.from9534 ], [ %t76, %logic.rend9537 ] + br i1 %t77, label %then9538, label %else9539 +then9538: + %t78 = load i8, ptr %a62 + %t79 = zext i8 %t78 to i64 + %t80 = zext i8 97 to i64 + %t81 = sub i64 %t79, %t80 + %t82 = add i64 %t81, 10 + store i64 %t82, ptr %a63 + br label %endif9540 +else9539: + %t83 = load i8, ptr %a62 + %t84 = icmp uge i8 %t83, 65 + br label %logic.from9541 +logic.from9541: + br i1 %t84, label %logic.rhs9542, label %logic.end9543 +logic.rhs9542: + %t85 = load i8, ptr %a62 + %t86 = icmp ule i8 %t85, 70 + br label %logic.rend9544 +logic.rend9544: + br label %logic.end9543 +logic.end9543: + %t87 = phi i1 [ false, %logic.from9541 ], [ %t86, %logic.rend9544 ] + br i1 %t87, label %then9545, label %endif9547 +then9545: + %t88 = load i8, ptr %a62 + %t89 = zext i8 %t88 to i64 + %t90 = zext i8 65 to i64 + %t91 = sub i64 %t89, %t90 + %t92 = add i64 %t91, 10 + store i64 %t92, ptr %a63 + br label %endif9547 +endif9547: + br label %endif9540 +endif9540: + br label %endif9533 +endif9533: + %t93 = load i64, ptr %a63 + %t94 = load i64, ptr %a7 + %t95 = icmp sge i64 %t93, %t94 + br i1 %t95, label %then9548, label %endif9550 +then9548: + br label %while.end9524 +endif9550: + %t96 = load i64, ptr %a48 + %t97 = load i64, ptr %a7 + %t98 = mul i64 %t96, %t97 + %t99 = load i64, ptr %a63 + %t100 = add i64 %t98, %t99 + store i64 %t100, ptr %a48 + store i1 true, ptr %a49 + %t101 = load i64, ptr %a50 + %t102 = add i64 %t101, 1 + store i64 %t102, ptr %a50 + br label %while.cond9522 +while.end9524: + br label %while.cond9551 +while.cond9551: + %t103 = load i64, ptr %a50 + %t104 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t105 = load i64, ptr %t104 + %t106 = icmp slt i64 %t103, %t105 + br i1 %t106, label %while.body9552, label %while.end9553 +while.body9552: + store { ptr, i64, i64 } { ptr @.str.6526, i64 4, i64 0 }, ptr %a107 + %t109 = load i64, ptr %a50 + %t110 = load { ptr, i64, i64 }, ptr %a6 + %t111 = extractvalue { ptr, i64, i64 } %t110, 1 + %t112 = icmp uge i64 %t109, %t111 + br i1 %t112, label %range9554, label %inrange9555 +range9554: + call void @finch_panic_index(ptr @.str.6528, i64 358, i64 %t109, i64 %t111) + unreachable +inrange9555: + %t113 = extractvalue { ptr, i64, i64 } %t110, 0 + %t114 = getelementptr inbounds i8, ptr %t113, i64 %t109 + %t115 = load i8, ptr %t114 + call void @finch_str_from_char(ptr %a116, i8 signext %t115) + %t117 = load { ptr, i64, i64 }, ptr %a116 + store { ptr, i64, i64 } %t117, ptr %a118 + %t119 = call i64 @finch_str_find(ptr %a107, ptr %a118) + %t120 = icmp sge i64 %t119, 0 + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = xor i1 %t120, true + br i1 %t122, label %then9556, label %endif9558 +then9556: + call void @finch_str_drop(ptr %a6) + ret %S.cimport.Number zeroinitializer +endif9558: + %t123 = load i64, ptr %a50 + %t124 = add i64 %t123, 1 + store i64 %t124, ptr %a50 + br label %while.cond9551 +while.end9553: + %t125 = load i1, ptr %a49 + %t126 = xor i1 %t125, true + br label %logic.from9559 +logic.from9559: + br i1 %t126, label %logic.rhs9560, label %logic.end9561 +logic.rhs9560: + %t127 = load i64, ptr %a7 + %t128 = icmp ne i64 %t127, 8 + br label %logic.rend9562 +logic.rend9562: + br label %logic.end9561 +logic.end9561: + %t129 = phi i1 [ false, %logic.from9559 ], [ %t128, %logic.rend9562 ] + br i1 %t129, label %then9563, label %endif9565 +then9563: + call void @finch_str_drop(ptr %a6) + ret %S.cimport.Number zeroinitializer +endif9565: + %t130 = load i64, ptr %a48 + %t131 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t130, 1 + %t132 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t131, 0 + %t133 = insertvalue %S.cimport.Number %t132, i1 true, 1 + call void @finch_str_drop(ptr %a6) + ret %S.cimport.Number %t133 +} + +define internal %S.cimport.Number @finch.cimport.macroValue(ptr %p0, %S.C.CXCursor %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXCursor, align 16 + %a3 = alloca ptr, align 16 + %a4 = alloca i32, align 16 + %a9 = alloca %S.C.CXSourceRange, align 16 + %a11 = alloca %S.C.CXCursor, align 16 + %a13 = alloca %S.C.CXSourceRange, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca i64, align 16 + %a24 = alloca %S.C.CXToken, align 16 + %a28 = alloca %S.C.CXString, align 16 + %a37 = alloca %S.C.CXToken, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca i1, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca i1, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca double, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca double, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca %S.cimport.Number, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXCursor %p1, ptr %a2 + store ptr null, ptr %a3 + store i32 0, ptr %a4 + %t5 = load ptr, ptr %a1 + %t6 = icmp eq ptr %t5, null + br i1 %t6, label %panic9566, label %ok9567 +panic9566: + call void @finch_panic(ptr @.str.6529, i64 373, ptr @.str.6530) + unreachable +ok9567: + %t7 = getelementptr inbounds %S.cimport.Importer, ptr %t5, i32 0, i32 1 + %t8 = load ptr, ptr %t7 + %t10 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t10, ptr %a11 + call void @clang_getCursorExtent(ptr sret(%S.C.CXSourceRange) align 16 %a9, ptr %a11) + %t12 = load %S.C.CXSourceRange, ptr %a9 + store %S.C.CXSourceRange %t12, ptr %a13 + call void @clang_tokenize(ptr %t8, ptr %a13, ptr %a3, ptr %a4) + store { ptr, i64, i64 } zeroinitializer, ptr %a14 + %t15 = load i32, ptr %a4 + %t16 = zext i32 %t15 to i64 + store i64 1, ptr %a17 + br label %for.cond9568 +for.cond9568: + %t18 = load i64, ptr %a17 + %t19 = icmp slt i64 %t18, %t16 + br i1 %t19, label %for.body9569, label %for.end9571 +for.body9569: + %t20 = load i64, ptr %a17 + %t21 = load ptr, ptr %a3 + %t22 = getelementptr inbounds %S.C.CXToken, ptr %t21, i64 %t20 + %t23 = load %S.C.CXToken, ptr %t22 + store %S.C.CXToken %t23, ptr %a24 + %t25 = call i32 @clang_getTokenKind(ptr %a24) + %t26 = icmp eq i32 %t25, 4 + br i1 %t26, label %then9572, label %endif9574 +then9572: + br label %for.step9570 +endif9574: + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic9575, label %ok9576 +panic9575: + call void @finch_panic(ptr @.str.6531, i64 379, ptr @.str.6532) + unreachable +ok9576: + %t31 = getelementptr inbounds %S.cimport.Importer, ptr %t29, i32 0, i32 1 + %t32 = load ptr, ptr %t31 + %t33 = load i64, ptr %a17 + %t34 = load ptr, ptr %a3 + %t35 = getelementptr inbounds %S.C.CXToken, ptr %t34, i64 %t33 + %t36 = load %S.C.CXToken, ptr %t35 + store %S.C.CXToken %t36, ptr %a37 + call void @clang_getTokenSpelling(ptr sret(%S.C.CXString) align 16 %a28, ptr %t32, ptr %a37) + %t38 = load %S.C.CXString, ptr %a28 + %t39 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t38) + %t40 = load i64, ptr %t27 + %t41 = add i64 %t40, 1 + call void @finch_arr_reserve(ptr %a14, i64 %t41, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t42 = load ptr, ptr %a14 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %t42, i64 %t40 + store { ptr, i64, i64 } %t39, ptr %t43 + store i64 %t41, ptr %t27 + br label %for.step9570 +for.step9570: + %t44 = load i64, ptr %a17 + %t45 = add i64 %t44, 1 + store i64 %t45, ptr %a17 + br label %for.cond9568 +for.end9571: + %t46 = load ptr, ptr %a1 + %t47 = icmp eq ptr %t46, null + br i1 %t47, label %panic9577, label %ok9578 +panic9577: + call void @finch_panic(ptr @.str.6533, i64 381, ptr @.str.6534) + unreachable +ok9578: + %t48 = getelementptr inbounds %S.cimport.Importer, ptr %t46, i32 0, i32 1 + %t49 = load ptr, ptr %t48 + %t50 = load ptr, ptr %a3 + %t51 = load i32, ptr %a4 + call void @clang_disposeTokens(ptr %t49, ptr %t50, i32 %t51) + br label %while.cond9579 +while.cond9579: + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t53 = load i64, ptr %t52 + %t54 = icmp sge i64 %t53, 2 + br label %logic.from9582 +logic.from9582: + br i1 %t54, label %logic.rhs9583, label %logic.end9584 +logic.rhs9583: + %t55 = load { ptr, i64, i64 }, ptr %a14 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 0, %t56 + br i1 %t57, label %range9585, label %inrange9586 +range9585: + call void @finch_panic_index(ptr @.str.6535, i64 383, i64 0, i64 %t56) + unreachable +inrange9586: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %t58, i64 0 + %t60 = load { ptr, i64, i64 }, ptr %t59 + store { ptr, i64, i64 } %t60, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.6536, i64 1, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br label %logic.rend9587 +logic.rend9587: + br label %logic.end9584 +logic.end9584: + %t65 = phi i1 [ false, %logic.from9582 ], [ %t64, %logic.rend9587 ] + br label %logic.from9588 +logic.from9588: + br i1 %t65, label %logic.rhs9589, label %logic.end9590 +logic.rhs9589: + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t67 = load i64, ptr %t66 + %t68 = sub i64 %t67, 1 + %t69 = load { ptr, i64, i64 }, ptr %a14 + %t70 = extractvalue { ptr, i64, i64 } %t69, 1 + %t71 = icmp uge i64 %t68, %t70 + br i1 %t71, label %range9591, label %inrange9592 +range9591: + call void @finch_panic_index(ptr @.str.6537, i64 383, i64 %t68, i64 %t70) + unreachable +inrange9592: + %t72 = extractvalue { ptr, i64, i64 } %t69, 0 + %t73 = getelementptr inbounds { ptr, i64, i64 }, ptr %t72, i64 %t68 + %t74 = load { ptr, i64, i64 }, ptr %t73 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.6538, i64 1, i64 0 }, ptr %a76 + %t77 = call i32 @finch_str_eq(ptr %a75, ptr %a76) + %t78 = icmp ne i32 %t77, 0 + br label %logic.rend9593 +logic.rend9593: + br label %logic.end9590 +logic.end9590: + %t79 = phi i1 [ false, %logic.from9588 ], [ %t78, %logic.rend9593 ] + br i1 %t79, label %while.body9580, label %while.end9581 +while.body9580: + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t81 = load i64, ptr %t80 + %t82 = icmp uge i64 0, %t81 + br i1 %t82, label %range9594, label %inrange9595 +range9594: + call void @finch_panic_index(ptr @.str.6539, i64 384, i64 0, i64 %t81) + unreachable +inrange9595: + %t83 = load ptr, ptr %a14 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %t83, i64 0 + %t85 = load { ptr, i64, i64 }, ptr %t84 + call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + store { ptr, i64, i64 } %t85, ptr %a86 + call void @finch_str_drop(ptr %a86) + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t88 = load i64, ptr %t87 + %t89 = icmp eq i64 %t88, 0 + br i1 %t89, label %panic9596, label %ok9597 +panic9596: + call void @finch_panic(ptr @.str.6540, i64 385, ptr @.str.6541) + unreachable +ok9597: + %t90 = sub i64 %t88, 1 + %t91 = load ptr, ptr %a14 + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %t91, i64 %t90 + %t93 = load { ptr, i64, i64 }, ptr %t92 + store i64 %t90, ptr %t87 + store { ptr, i64, i64 } %t93, ptr %a94 + call void @finch_str_drop(ptr %a94) + br label %while.cond9579 +while.end9581: + store i1 false, ptr %a95 + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t97 = load i64, ptr %t96 + %t98 = icmp eq i64 %t97, 2 + br label %logic.from9598 +logic.from9598: + br i1 %t98, label %logic.rhs9599, label %logic.end9600 +logic.rhs9599: + %t99 = load { ptr, i64, i64 }, ptr %a14 + %t100 = extractvalue { ptr, i64, i64 } %t99, 1 + %t101 = icmp uge i64 0, %t100 + br i1 %t101, label %range9601, label %inrange9602 +range9601: + call void @finch_panic_index(ptr @.str.6542, i64 388, i64 0, i64 %t100) + unreachable +inrange9602: + %t102 = extractvalue { ptr, i64, i64 } %t99, 0 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 0 + %t104 = load { ptr, i64, i64 }, ptr %t103 + store { ptr, i64, i64 } %t104, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.6543, i64 1, i64 0 }, ptr %a106 + %t107 = call i32 @finch_str_eq(ptr %a105, ptr %a106) + %t108 = icmp ne i32 %t107, 0 + br label %logic.rend9603 +logic.rend9603: + br label %logic.end9600 +logic.end9600: + %t109 = phi i1 [ false, %logic.from9598 ], [ %t108, %logic.rend9603 ] + br i1 %t109, label %then9604, label %endif9606 +then9604: + store i1 true, ptr %a95 + %t110 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t111 = load i64, ptr %t110 + %t112 = icmp uge i64 0, %t111 + br i1 %t112, label %range9607, label %inrange9608 +range9607: + call void @finch_panic_index(ptr @.str.6544, i64 390, i64 0, i64 %t111) + unreachable +inrange9608: + %t113 = load ptr, ptr %a14 + %t114 = getelementptr inbounds { ptr, i64, i64 }, ptr %t113, i64 0 + %t115 = load { ptr, i64, i64 }, ptr %t114 + call void @finch_arr_remove_gap(ptr %a14, i64 0, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + store { ptr, i64, i64 } %t115, ptr %a116 + call void @finch_str_drop(ptr %a116) + br label %endif9606 +endif9606: + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %a14, i32 0, i32 1 + %t118 = load i64, ptr %t117 + %t119 = icmp ne i64 %t118, 1 + br i1 %t119, label %then9609, label %endif9611 +then9609: + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number zeroinitializer +endif9611: + %t120 = load { ptr, i64, i64 }, ptr %a14 + %t121 = extractvalue { ptr, i64, i64 } %t120, 1 + %t122 = icmp uge i64 0, %t121 + br i1 %t122, label %range9612, label %inrange9613 +range9612: + call void @finch_panic_index(ptr @.str.6545, i64 395, i64 0, i64 %t121) + unreachable +inrange9613: + %t123 = extractvalue { ptr, i64, i64 } %t120, 0 + %t124 = getelementptr inbounds { ptr, i64, i64 }, ptr %t123, i64 0 + %t125 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t125, ptr %a126 + call void @finch_str_copy(ptr %a127, ptr %a126) + %t128 = load { ptr, i64, i64 }, ptr %a127 + store { ptr, i64, i64 } %t128, ptr %a129 + %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %a129, i32 0, i32 1 + %t131 = load i64, ptr %t130 + %t132 = icmp eq i64 %t131, 0 + br label %logic.from9614 +logic.from9614: + br i1 %t132, label %logic.end9616, label %logic.rhs9615 +logic.rhs9615: + %t133 = load { ptr, i64, i64 }, ptr %a129 + %t134 = extractvalue { ptr, i64, i64 } %t133, 1 + %t135 = icmp uge i64 0, %t134 + br i1 %t135, label %range9617, label %inrange9618 +range9617: + call void @finch_panic_index(ptr @.str.6546, i64 396, i64 0, i64 %t134) + unreachable +inrange9618: + %t136 = extractvalue { ptr, i64, i64 } %t133, 0 + %t137 = getelementptr inbounds i8, ptr %t136, i64 0 + %t138 = load i8, ptr %t137 + %t139 = icmp uge i8 %t138, 48 + br label %logic.from9619 +logic.from9619: + br i1 %t139, label %logic.rhs9620, label %logic.end9621 +logic.rhs9620: + %t140 = load { ptr, i64, i64 }, ptr %a129 + %t141 = extractvalue { ptr, i64, i64 } %t140, 1 + %t142 = icmp uge i64 0, %t141 + br i1 %t142, label %range9622, label %inrange9623 +range9622: + call void @finch_panic_index(ptr @.str.6547, i64 396, i64 0, i64 %t141) + unreachable +inrange9623: + %t143 = extractvalue { ptr, i64, i64 } %t140, 0 + %t144 = getelementptr inbounds i8, ptr %t143, i64 0 + %t145 = load i8, ptr %t144 + %t146 = icmp ule i8 %t145, 57 + br label %logic.rend9624 +logic.rend9624: + br label %logic.end9621 +logic.end9621: + %t147 = phi i1 [ false, %logic.from9619 ], [ %t146, %logic.rend9624 ] + br label %logic.from9625 +logic.from9625: + br i1 %t147, label %logic.end9627, label %logic.rhs9626 +logic.rhs9626: + %t148 = load { ptr, i64, i64 }, ptr %a129 + %t149 = extractvalue { ptr, i64, i64 } %t148, 1 + %t150 = icmp uge i64 0, %t149 + br i1 %t150, label %range9628, label %inrange9629 +range9628: + call void @finch_panic_index(ptr @.str.6548, i64 396, i64 0, i64 %t149) + unreachable +inrange9629: + %t151 = extractvalue { ptr, i64, i64 } %t148, 0 + %t152 = getelementptr inbounds i8, ptr %t151, i64 0 + %t153 = load i8, ptr %t152 + %t154 = icmp eq i8 %t153, 46 + br label %logic.rend9630 +logic.rend9630: + br label %logic.end9627 +logic.end9627: + %t155 = phi i1 [ true, %logic.from9625 ], [ %t154, %logic.rend9630 ] + %t156 = xor i1 %t155, true + br label %logic.rend9631 +logic.rend9631: + br label %logic.end9616 +logic.end9616: + %t157 = phi i1 [ true, %logic.from9614 ], [ %t156, %logic.rend9631 ] + br i1 %t157, label %then9632, label %endif9634 +then9632: + call void @finch_str_drop(ptr %a129) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number zeroinitializer +endif9634: + %t158 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t158, ptr %a159 + store { ptr, i64, i64 } { ptr @.str.6550, i64 1, i64 0 }, ptr %a161 + %t162 = call i64 @finch_str_find(ptr %a159, ptr %a161) + %t163 = icmp sge i64 %t162, 0 + br label %logic.from9635 +logic.from9635: + br i1 %t163, label %logic.end9637, label %logic.rhs9636 +logic.rhs9636: + %t164 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t164, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.6552, i64 1, i64 0 }, ptr %a167 + %t168 = call i64 @finch_str_find(ptr %a165, ptr %a167) + %t169 = icmp sge i64 %t168, 0 + br label %logic.rend9638 +logic.rend9638: + br label %logic.end9637 +logic.end9637: + %t170 = phi i1 [ true, %logic.from9635 ], [ %t169, %logic.rend9638 ] + br label %logic.from9639 +logic.from9639: + br i1 %t170, label %logic.end9641, label %logic.rhs9640 +logic.rhs9640: + %t171 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t171, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.6554, i64 1, i64 0 }, ptr %a174 + %t175 = call i64 @finch_str_find(ptr %a172, ptr %a174) + %t176 = icmp sge i64 %t175, 0 + br label %logic.rend9642 +logic.rend9642: + br label %logic.end9641 +logic.end9641: + %t177 = phi i1 [ true, %logic.from9639 ], [ %t176, %logic.rend9642 ] + br label %logic.from9643 +logic.from9643: + br i1 %t177, label %logic.rhs9644, label %logic.end9645 +logic.rhs9644: + %t178 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t178, ptr %a179 + store { ptr, i64, i64 } { ptr @.str.6556, i64 2, i64 0 }, ptr %a181 + %t182 = call i32 @finch_str_starts(ptr %a179, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + %t184 = xor i1 %t183, true + br label %logic.rend9646 +logic.rend9646: + br label %logic.end9645 +logic.end9645: + %t185 = phi i1 [ false, %logic.from9643 ], [ %t184, %logic.rend9646 ] + store i1 %t185, ptr %a186 + %t187 = load i1, ptr %a186 + br i1 %t187, label %then9647, label %endif9649 +then9647: + %t188 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t188, ptr %a189 + call void @finch_str_copy(ptr %a190, ptr %a189) + %t191 = load { ptr, i64, i64 }, ptr %a190 + store { ptr, i64, i64 } %t191, ptr %a192 + br label %while.cond9650 +while.cond9650: + %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %a192, i32 0, i32 1 + %t194 = load i64, ptr %t193 + %t195 = icmp sgt i64 %t194, 0 + br label %logic.from9653 +logic.from9653: + br i1 %t195, label %logic.rhs9654, label %logic.end9655 +logic.rhs9654: + store { ptr, i64, i64 } { ptr @.str.6557, i64 4, i64 0 }, ptr %a196 + %t198 = getelementptr inbounds { ptr, i64, i64 }, ptr %a192, i32 0, i32 1 + %t199 = load i64, ptr %t198 + %t200 = sub i64 %t199, 1 + %t201 = load { ptr, i64, i64 }, ptr %a192 + %t202 = extractvalue { ptr, i64, i64 } %t201, 1 + %t203 = icmp uge i64 %t200, %t202 + br i1 %t203, label %range9656, label %inrange9657 +range9656: + call void @finch_panic_index(ptr @.str.6559, i64 402, i64 %t200, i64 %t202) + unreachable +inrange9657: + %t204 = extractvalue { ptr, i64, i64 } %t201, 0 + %t205 = getelementptr inbounds i8, ptr %t204, i64 %t200 + %t206 = load i8, ptr %t205 + call void @finch_str_from_char(ptr %a207, i8 signext %t206) + %t208 = load { ptr, i64, i64 }, ptr %a207 + store { ptr, i64, i64 } %t208, ptr %a209 + %t210 = call i64 @finch_str_find(ptr %a196, ptr %a209) + %t211 = icmp sge i64 %t210, 0 + store { ptr, i64, i64 } %t208, ptr %a212 + call void @finch_str_drop(ptr %a212) + br label %logic.rend9658 +logic.rend9658: + br label %logic.end9655 +logic.end9655: + %t213 = phi i1 [ false, %logic.from9653 ], [ %t211, %logic.rend9658 ] + br i1 %t213, label %while.body9651, label %while.end9652 +while.body9651: + %t214 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } %t214, ptr %a215 + %t217 = getelementptr inbounds { ptr, i64, i64 }, ptr %a192, i32 0, i32 1 + %t218 = load i64, ptr %t217 + %t219 = sub i64 %t218, 1 + call void @finch_str_sub(ptr %a216, ptr %a215, i64 0, i64 %t219, ptr @.str.6560, i64 403) + %t220 = load { ptr, i64, i64 }, ptr %a216 + %t221 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } %t220, ptr %a192 + store { ptr, i64, i64 } %t221, ptr %a222 + call void @finch_str_drop(ptr %a222) + br label %while.cond9650 +while.end9652: + %t223 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } zeroinitializer, ptr %a224 + store double 0.0, ptr %a225 + store { ptr, i64, i64 } %t223, ptr %a226 + %t227 = call i32 @finch_str_try_float(ptr %a226, ptr %a225, ptr %a224) + %t228 = icmp eq i32 %t227, 0 + %t229 = load { ptr, i64, i64 }, ptr %a224 + %t230 = load double, ptr %a225 + br i1 %t228, label %or.failed9659, label %or.ok9660 +or.failed9659: + store { ptr, i64, i64 } %t229, ptr %a231 + call void @finch_str_drop(ptr %a231) + call void @finch_str_drop(ptr %a192) + call void @finch_str_drop(ptr %a129) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number zeroinitializer +or.ok9660: + store double %t230, ptr %a232 + %t233 = load i1, ptr %a95 + br i1 %t233, label %then9661, label %endif9663 +then9661: + %t234 = load double, ptr %a232 + %t235 = fsub double 0.0, %t234 + store double %t235, ptr %a232 + br label %endif9663 +endif9663: + %t236 = insertvalue %S.cimport.CConst zeroinitializer, i1 true, 0 + %t237 = load double, ptr %a232 + %t238 = insertvalue %S.cimport.CConst %t236, double %t237, 2 + %t239 = load { ptr, i64, i64 }, ptr %a192 + store { ptr, i64, i64 } %t239, ptr %a240 + call void @finch_str_copy(ptr %a241, ptr %a240) + %t242 = load { ptr, i64, i64 }, ptr %a241 + %t243 = insertvalue %S.cimport.CConst %t238, { ptr, i64, i64 } %t242, 3 + %t244 = insertvalue %S.cimport.Number zeroinitializer, %S.cimport.CConst %t243, 0 + %t245 = insertvalue %S.cimport.Number %t244, i1 true, 1 + call void @finch_str_drop(ptr %a192) + call void @finch_str_drop(ptr %a129) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number %t245 +endif9649: + %t246 = load { ptr, i64, i64 }, ptr %a129 + %t247 = call %S.cimport.Number @finch.cimport.parseInt({ ptr, i64, i64 } %t246) + store %S.cimport.Number %t247, ptr %a248 + %t249 = getelementptr inbounds %S.cimport.Number, ptr %a248, i32 0, i32 1 + %t250 = load i1, ptr %t249 + br label %logic.from9664 +logic.from9664: + br i1 %t250, label %logic.rhs9665, label %logic.end9666 +logic.rhs9665: + %t251 = load i1, ptr %a95 + br label %logic.rend9667 +logic.rend9667: + br label %logic.end9666 +logic.end9666: + %t252 = phi i1 [ false, %logic.from9664 ], [ %t251, %logic.rend9667 ] + br i1 %t252, label %then9668, label %endif9670 +then9668: + %t253 = getelementptr inbounds %S.cimport.Number, ptr %a248, i32 0, i32 0 + %t254 = getelementptr inbounds %S.cimport.CConst, ptr %t253, i32 0, i32 1 + %t255 = load i64, ptr %t254 + %t256 = sub i64 0, %t255 + %t257 = getelementptr inbounds %S.cimport.Number, ptr %a248, i32 0, i32 0 + %t258 = getelementptr inbounds %S.cimport.CConst, ptr %t257, i32 0, i32 1 + store i64 %t256, ptr %t258 + br label %endif9670 +endif9670: + %t259 = load %S.cimport.Number, ptr %a248 + call void @finch_str_drop(ptr %a129) + call void @finch.drop.arr_str(ptr %a14) + ret %S.cimport.Number %t259 +} + +define internal i32 @finch.cimport.visitTop(%S.C.CXCursor %p0, %S.C.CXCursor %p1, ptr %p2) { +entry: + %a1 = alloca %S.C.CXCursor, align 16 + %a2 = alloca %S.C.CXCursor, align 16 + %a3 = alloca ptr, align 16 + %a5 = alloca ptr, align 16 + store %S.C.CXCursor %p0, ptr %a1 + store %S.C.CXCursor %p1, ptr %a2 + store ptr %p2, ptr %a3 + %t4 = load ptr, ptr %a3 + store ptr %t4, ptr %a5 + %t6 = load ptr, ptr %a5 + %t7 = load %S.C.CXCursor, ptr %a1 + call void @finch.cimport.visit(ptr %t6, %S.C.CXCursor %t7) + ret i32 1 +} + +define internal i32 @finch.c.cimport.visitTop(ptr %c0, ptr %c1, ptr %c2) { +entry: + + %t1 = load %S.C.CXCursor, ptr %c0 + %t2 = load %S.C.CXCursor, ptr %c1 + %t3 = call i32 @finch.cimport.visitTop(%S.C.CXCursor %t1, %S.C.CXCursor %t2, ptr %c2) + ret i32 %t3 +} + +define internal void @finch.drop.S_cimport_Number(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Number, ptr %a, i32 0, i32 0 + call void @finch.drop.S_cimport_CConst(ptr %t1) + ret void +} + +define internal void @finch.cimport.visit(ptr %p0, %S.C.CXCursor %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca %S.C.CXCursor, align 16 + %a3 = alloca %S.C.CXString, align 16 + %a5 = alloca %S.C.CXCursor, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca %S.C.CXCursor, align 16 + %a12 = alloca i32, align 16 + %a15 = alloca %S.C.CXType, align 16 + %a16 = alloca %S.C.CXType, align 16 + %a18 = alloca %S.C.CXCursor, align 16 + %a20 = alloca %S.C.CXType, align 16 + %a22 = alloca %S.C.CXType, align 16 + %a26 = alloca %S.C.CXString, align 16 + %a27 = alloca %S.C.CXCursor, align 16 + %a29 = alloca %S.C.CXType, align 16 + %a31 = alloca %S.C.CXCursor, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca i1, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca i32, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca %S.cimport.CFunc, align 16 + %a123 = alloca %S.C.CXCursor, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca i32, align 16 + %a146 = alloca %S.cimport.CFunc, align 16 + %a147 = alloca %S.cimport.CFunc, align 16 + %a150 = alloca %S.cimport.CFunc, align 16 + %a151 = alloca %S.C.CXType, align 16 + %a152 = alloca %S.C.CXType, align 16 + %a154 = alloca %S.C.CXCursor, align 16 + %a156 = alloca %S.C.CXType, align 16 + %a158 = alloca %S.C.CXType, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca i32, align 16 + %a182 = alloca %S.cimport.CFunc, align 16 + %a183 = alloca %S.cimport.CFunc, align 16 + %a186 = alloca %S.cimport.CFunc, align 16 + %a188 = alloca %S.C.CXType, align 16 + %a190 = alloca %S.C.CXType, align 16 + %a193 = alloca %S.cimport.Mapped, align 16 + %a199 = alloca %S.ast.Type, align 16 + %a200 = alloca %S.ast.Type, align 16 + %a203 = alloca %S.ast.Type, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a213 = alloca %S.C.CXType, align 16 + %a216 = alloca i64, align 16 + %a218 = alloca i64, align 16 + %a226 = alloca %S.C.CXType, align 16 + %a228 = alloca %S.C.CXType, align 16 + %a233 = alloca %S.cimport.Mapped, align 16 + %a240 = alloca %S.ast.Type, align 16 + %a241 = alloca %S.ast.Type, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca %S.C.CXType, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca i32, align 16 + %a279 = alloca %S.cimport.CFunc, align 16 + %a280 = alloca %S.cimport.CFunc, align 16 + %a283 = alloca %S.cimport.CFunc, align 16 + %a287 = alloca %S.C.CXCursor, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca %S.C.CXType, align 16 + %a302 = alloca %S.C.CXCursor, align 16 + %a305 = alloca %S.cimport.Mapped, align 16 + %a315 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca i32, align 16 + %a326 = alloca %S.ast.Type, align 16 + %a327 = alloca %S.ast.Type, align 16 + %a330 = alloca %S.ast.Type, align 16 + %a334 = alloca %S.C.CXCursor, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca %S.C.CXString, align 16 + %a351 = alloca %S.C.CXCursor, align 16 + %a354 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca i32, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a383 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca %S.C.CXCursor, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca %S.C.CXCursor, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca i32, align 16 + %a422 = alloca %S.cimport.CConst, align 16 + %a426 = alloca %S.C.CXCursor, align 16 + %a430 = alloca %S.C.CXCursor, align 16 + %a437 = alloca %S.cimport.Number, align 16 + %a445 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca i32, align 16 + %a468 = alloca %S.cimport.CConst, align 16 + %a469 = alloca %S.cimport.CConst, align 16 + %a472 = alloca %S.cimport.CConst, align 16 + store ptr %p0, ptr %a1 + store %S.C.CXCursor %p1, ptr %a2 + %t4 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t4, ptr %a5 + call void @clang_getCursorSpelling(ptr sret(%S.C.CXString) align 16 %a3, ptr %a5) + %t6 = load %S.C.CXString, ptr %a3 + %t7 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t6) + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t9, ptr %a10 + %t11 = call i32 @clang_getCursorKind(ptr %a10) + store i32 %t11, ptr %a12 + %t13 = load i32, ptr %a12 + %t14 = icmp eq i32 %t13, 20 + br i1 %t14, label %then9671, label %else9672 +then9671: + %t17 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t17, ptr %a18 + call void @clang_getTypedefDeclUnderlyingType(ptr sret(%S.C.CXType) align 16 %a16, ptr %a18) + %t19 = load %S.C.CXType, ptr %a16 + store %S.C.CXType %t19, ptr %a20 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a15, ptr %a20) + %t21 = load %S.C.CXType, ptr %a15 + store %S.C.CXType %t21, ptr %a22 + %t23 = getelementptr inbounds %S.C.CXType, ptr %a22, i32 0, i32 0 + %t24 = load i32, ptr %t23 + %t25 = icmp eq i32 %t24, 105 + br i1 %t25, label %then9674, label %endif9676 +then9674: + %t28 = load %S.C.CXType, ptr %a22 + store %S.C.CXType %t28, ptr %a29 + call void @clang_getTypeDeclaration(ptr sret(%S.C.CXCursor) align 16 %a27, ptr %a29) + %t30 = load %S.C.CXCursor, ptr %a27 + store %S.C.CXCursor %t30, ptr %a31 + call void @clang_getCursorUSR(ptr sret(%S.C.CXString) align 16 %a26, ptr %a31) + %t32 = load %S.C.CXString, ptr %a26 + %t33 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t32) + store { ptr, i64, i64 } %t33, ptr %a34 + %t35 = load ptr, ptr %a1 + %t36 = icmp eq ptr %t35, null + br i1 %t36, label %panic9677, label %ok9678 +panic9677: + call void @finch_panic(ptr @.str.6561, i64 437, ptr @.str.6562) + unreachable +ok9678: + %t37 = getelementptr inbounds %S.cimport.Importer, ptr %t35, i32 0, i32 3 + %t38 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = call i64 @finch_map_find(ptr %t37, ptr %a39, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t41 = icmp sge i64 %t40, 0 + br label %logic.from9679 +logic.from9679: + br i1 %t41, label %logic.rhs9680, label %logic.end9681 +logic.rhs9680: + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic9682, label %ok9683 +panic9682: + call void @finch_panic(ptr @.str.6563, i64 437, ptr @.str.6564) + unreachable +ok9683: + %t44 = getelementptr inbounds %S.cimport.Importer, ptr %t42, i32 0, i32 0 + %t45 = getelementptr inbounds %S.cimport.CImports, ptr %t44, i32 0, i32 3 + %t46 = load ptr, ptr %a1 + %t47 = icmp eq ptr %t46, null + br i1 %t47, label %panic9684, label %ok9685 +panic9684: + call void @finch_panic(ptr @.str.6565, i64 437, ptr @.str.6566) + unreachable +ok9685: + %t48 = getelementptr inbounds %S.cimport.Importer, ptr %t46, i32 0, i32 3 + %t49 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } %t49, ptr %a50 + %t51 = call i64 @finch_map_find(ptr %t48, ptr %a50, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t52 = icmp slt i64 %t51, 0 + br i1 %t52, label %map.missing9686, label %map.found9687 +map.missing9686: + store { ptr, i64, i64 } zeroinitializer, ptr %a53 + store { ptr, i64, i64 } %t49, ptr %a54 + call void @finch_buf_str(ptr %a53, ptr %a54, i32 1) + call void @finch_map_missing(ptr @.str.6567, i64 437, ptr %a53) + unreachable +map.found9687: + %t55 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t48, i32 0, i32 0 + %t56 = load ptr, ptr %t55 + %t57 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t56, i64 %t51 + %t58 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t57, i32 0, i32 2 + %t59 = load { ptr, i64, i64 }, ptr %t58 + store { ptr, i64, i64 } %t59, ptr %a60 + %t61 = call i64 @finch_map_find(ptr %t45, ptr %a60, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t62 = icmp sge i64 %t61, 0 + br label %logic.rend9688 +logic.rend9688: + br label %logic.end9681 +logic.end9681: + %t63 = phi i1 [ false, %logic.from9679 ], [ %t62, %logic.rend9688 ] + store i1 %t63, ptr %a64 + %t65 = load i1, ptr %a64 + %t66 = xor i1 %t65, true + br label %logic.from9689 +logic.from9689: + br i1 %t66, label %logic.rhs9690, label %logic.end9691 +logic.rhs9690: + %t67 = load ptr, ptr %a1 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic9692, label %ok9693 +panic9692: + call void @finch_panic(ptr @.str.6568, i64 438, ptr @.str.6569) + unreachable +ok9693: + %t69 = getelementptr inbounds %S.cimport.Importer, ptr %t67, i32 0, i32 0 + %t70 = getelementptr inbounds %S.cimport.CImports, ptr %t69, i32 0, i32 3 + %t71 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t71, ptr %a72 + %t73 = call i64 @finch_map_find(ptr %t70, ptr %a72, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CStruct }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t74 = icmp sge i64 %t73, 0 + %t75 = xor i1 %t74, true + br label %logic.rend9694 +logic.rend9694: + br label %logic.end9691 +logic.end9691: + %t76 = phi i1 [ false, %logic.from9689 ], [ %t75, %logic.rend9694 ] + br i1 %t76, label %then9695, label %endif9697 +then9695: + %t77 = load { ptr, i64, i64 }, ptr %a8 + %t78 = load ptr, ptr %a1 + %t79 = icmp eq ptr %t78, null + br i1 %t79, label %panic9698, label %ok9699 +panic9698: + call void @finch_panic(ptr @.str.6570, i64 439, ptr @.str.6571) + unreachable +ok9699: + %t80 = getelementptr inbounds %S.cimport.Importer, ptr %t78, i32 0, i32 3 + %t81 = load { ptr, i64, i64 }, ptr %a34 + store { ptr, i64, i64 } %t81, ptr %a82 + store i32 0, ptr %a83 + %t84 = call i64 @finch_map_slot(ptr %t80, ptr %a82, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a83) + %t85 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t80, i32 0, i32 0 + %t86 = load ptr, ptr %t85 + %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t86, i64 %t84 + %t88 = load i32, ptr %a83 + %t89 = icmp ne i32 %t88, 0 + br i1 %t89, label %map.new9700, label %map.have9701 +map.new9700: + %t90 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t87, i32 0, i32 1 + call void @finch_str_copy(ptr %t90, ptr %a82) + %t91 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t87, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t91 + br label %map.have9701 +map.have9701: + %t92 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t87, i32 0, i32 2 + store { ptr, i64, i64 } %t77, ptr %a93 + call void @finch_str_copy(ptr %a94, ptr %a93) + %t95 = load { ptr, i64, i64 }, ptr %a94 + %t96 = load { ptr, i64, i64 }, ptr %t92 + store { ptr, i64, i64 } %t95, ptr %t92 + store { ptr, i64, i64 } %t96, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %endif9697 +endif9697: + call void @finch_str_drop(ptr %a34) + br label %endif9676 +endif9676: + br label %endif9673 +else9672: + %t98 = load i32, ptr %a12 + %t99 = icmp eq i32 %t98, 8 + br i1 %t99, label %then9702, label %else9703 +then9702: + %t100 = load ptr, ptr %a1 + %t101 = icmp eq ptr %t100, null + br i1 %t101, label %panic9705, label %ok9706 +panic9705: + call void @finch_panic(ptr @.str.6572, i64 443, ptr @.str.6573) + unreachable +ok9706: + %t102 = getelementptr inbounds %S.cimport.Importer, ptr %t100, i32 0, i32 0 + %t103 = getelementptr inbounds %S.cimport.CImports, ptr %t102, i32 0, i32 0 + %t104 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t104, ptr %a105 + %t106 = call i64 @finch_map_find(ptr %t103, ptr %a105, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t107 = icmp sge i64 %t106, 0 + br i1 %t107, label %then9707, label %endif9709 +then9707: + call void @finch_str_drop(ptr %a8) + ret void +endif9709: + %t108 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t108, ptr %a109 + call void @finch_str_copy(ptr %a110, ptr %a109) + %t111 = load { ptr, i64, i64 }, ptr %a110 + %t112 = insertvalue %S.cimport.CFunc zeroinitializer, { ptr, i64, i64 } %t111, 0 + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic9710, label %ok9711 +panic9710: + call void @finch_panic(ptr @.str.6574, i64 446, ptr @.str.6575) + unreachable +ok9711: + %t115 = getelementptr inbounds %S.cimport.Importer, ptr %t113, i32 0, i32 2 + %t116 = load { ptr, i64, i64 }, ptr %t115 + store { ptr, i64, i64 } %t116, ptr %a117 + call void @finch_str_copy(ptr %a118, ptr %a117) + %t119 = load { ptr, i64, i64 }, ptr %a118 + %t120 = insertvalue %S.cimport.CFunc %t112, { ptr, i64, i64 } %t119, 1 + store %S.cimport.CFunc %t120, ptr %a121 + %t122 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t122, ptr %a123 + %t124 = call i32 @clang_Cursor_getStorageClass(ptr %a123) + %t125 = icmp eq i32 %t124, 3 + br i1 %t125, label %then9712, label %endif9714 +then9712: + %t126 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 + %t127 = load { ptr, i64, i64 }, ptr %t126 + store { ptr, i64, i64 } { ptr @.str.6576, i64 62, i64 0 }, ptr %t126 + store { ptr, i64, i64 } %t127, ptr %a128 + call void @finch_str_drop(ptr %a128) + %t129 = load %S.cimport.CFunc, ptr %a121 + %t130 = load ptr, ptr %a1 + %t131 = icmp eq ptr %t130, null + br i1 %t131, label %panic9715, label %ok9716 +panic9715: + call void @finch_panic(ptr @.str.6577, i64 449, ptr @.str.6578) + unreachable +ok9716: + %t132 = getelementptr inbounds %S.cimport.Importer, ptr %t130, i32 0, i32 0 + %t133 = getelementptr inbounds %S.cimport.CImports, ptr %t132, i32 0, i32 0 + %t134 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t134, ptr %a135 + store i32 0, ptr %a136 + %t137 = call i64 @finch_map_slot(ptr %t133, ptr %a135, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a136) + %t138 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t133, i32 0, i32 0 + %t139 = load ptr, ptr %t138 + %t140 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t139, i64 %t137 + %t141 = load i32, ptr %a136 + %t142 = icmp ne i32 %t141, 0 + br i1 %t142, label %map.new9717, label %map.have9718 +map.new9717: + %t143 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t140, i32 0, i32 1 + call void @finch_str_copy(ptr %t143, ptr %a135) + %t144 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t140, i32 0, i32 2 + store %S.cimport.CFunc zeroinitializer, ptr %t144 + br label %map.have9718 +map.have9718: + %t145 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t140, i32 0, i32 2 + store %S.cimport.CFunc %t129, ptr %a146 + call void @finch.copy.S_cimport_CFunc(ptr %a147, ptr %a146) + %t148 = load %S.cimport.CFunc, ptr %a147 + %t149 = load %S.cimport.CFunc, ptr %t145 + store %S.cimport.CFunc %t148, ptr %t145 + store %S.cimport.CFunc %t149, ptr %a150 + call void @finch.drop.S_cimport_CFunc(ptr %a150) + call void @finch.drop.S_cimport_CFunc(ptr %a121) + call void @finch_str_drop(ptr %a8) + ret void +endif9714: + %t153 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t153, ptr %a154 + call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a152, ptr %a154) + %t155 = load %S.C.CXType, ptr %a152 + store %S.C.CXType %t155, ptr %a156 + call void @clang_getCanonicalType(ptr sret(%S.C.CXType) align 16 %a151, ptr %a156) + %t157 = load %S.C.CXType, ptr %a151 + store %S.C.CXType %t157, ptr %a158 + %t159 = getelementptr inbounds %S.C.CXType, ptr %a158, i32 0, i32 0 + %t160 = load i32, ptr %t159 + %t161 = icmp eq i32 %t160, 110 + br i1 %t161, label %then9719, label %endif9721 +then9719: + %t162 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 + %t163 = load { ptr, i64, i64 }, ptr %t162 + store { ptr, i64, i64 } { ptr @.str.6579, i64 42, i64 0 }, ptr %t162 + store { ptr, i64, i64 } %t163, ptr %a164 + call void @finch_str_drop(ptr %a164) + %t165 = load %S.cimport.CFunc, ptr %a121 + %t166 = load ptr, ptr %a1 + %t167 = icmp eq ptr %t166, null + br i1 %t167, label %panic9722, label %ok9723 +panic9722: + call void @finch_panic(ptr @.str.6580, i64 455, ptr @.str.6581) + unreachable +ok9723: + %t168 = getelementptr inbounds %S.cimport.Importer, ptr %t166, i32 0, i32 0 + %t169 = getelementptr inbounds %S.cimport.CImports, ptr %t168, i32 0, i32 0 + %t170 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t170, ptr %a171 + store i32 0, ptr %a172 + %t173 = call i64 @finch_map_slot(ptr %t169, ptr %a171, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a172) + %t174 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t169, i32 0, i32 0 + %t175 = load ptr, ptr %t174 + %t176 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t175, i64 %t173 + %t177 = load i32, ptr %a172 + %t178 = icmp ne i32 %t177, 0 + br i1 %t178, label %map.new9724, label %map.have9725 +map.new9724: + %t179 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t176, i32 0, i32 1 + call void @finch_str_copy(ptr %t179, ptr %a171) + %t180 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t176, i32 0, i32 2 + store %S.cimport.CFunc zeroinitializer, ptr %t180 + br label %map.have9725 +map.have9725: + %t181 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t176, i32 0, i32 2 + store %S.cimport.CFunc %t165, ptr %a182 + call void @finch.copy.S_cimport_CFunc(ptr %a183, ptr %a182) + %t184 = load %S.cimport.CFunc, ptr %a183 + %t185 = load %S.cimport.CFunc, ptr %t181 + store %S.cimport.CFunc %t184, ptr %t181 + store %S.cimport.CFunc %t185, ptr %a186 + call void @finch.drop.S_cimport_CFunc(ptr %a186) + call void @finch.drop.S_cimport_CFunc(ptr %a121) + call void @finch_str_drop(ptr %a8) + ret void +endif9721: + %t187 = load ptr, ptr %a1 + %t189 = load %S.C.CXType, ptr %a158 + store %S.C.CXType %t189, ptr %a190 + call void @clang_getResultType(ptr sret(%S.C.CXType) align 16 %a188, ptr %a190) + %t191 = load %S.C.CXType, ptr %a188 + %t192 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t187, %S.C.CXType %t191, i1 true, i1 false) + store %S.cimport.Mapped %t192, ptr %a193 + %t194 = getelementptr inbounds %S.cimport.Mapped, ptr %a193, i32 0, i32 2 + %t195 = load i1, ptr %t194 + br i1 %t195, label %then9726, label %else9727 +then9726: + %t196 = getelementptr inbounds %S.cimport.Mapped, ptr %a193, i32 0, i32 0 + %t197 = load %S.ast.Type, ptr %t196 + %t198 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 2 + store %S.ast.Type %t197, ptr %a199 + call void @finch.copy.S_ast_Type(ptr %a200, ptr %a199) + %t201 = load %S.ast.Type, ptr %a200 + %t202 = load %S.ast.Type, ptr %t198 + store %S.ast.Type %t201, ptr %t198 + store %S.ast.Type %t202, ptr %a203 + call void @finch.drop.S_ast_Type(ptr %a203) + br label %endif9728 +else9727: + %t204 = getelementptr inbounds %S.cimport.Mapped, ptr %a193, i32 0, i32 1 + %t205 = load { ptr, i64, i64 }, ptr %t204 + %t206 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 + store { ptr, i64, i64 } %t205, ptr %a207 + call void @finch_str_copy(ptr %a208, ptr %a207) + %t209 = load { ptr, i64, i64 }, ptr %a208 + %t210 = load { ptr, i64, i64 }, ptr %t206 + store { ptr, i64, i64 } %t209, ptr %t206 + store { ptr, i64, i64 } %t210, ptr %a211 + call void @finch_str_drop(ptr %a211) + br label %endif9728 +endif9728: + %t212 = load %S.C.CXType, ptr %a158 + store %S.C.CXType %t212, ptr %a213 + %t214 = call i32 @clang_getNumArgTypes(ptr %a213) + %t215 = sext i32 %t214 to i64 + store i64 %t215, ptr %a216 + %t217 = load i64, ptr %a216 + store i64 0, ptr %a218 + br label %for.cond9729 +for.cond9729: + %t219 = load i64, ptr %a218 + %t220 = icmp slt i64 %t219, %t217 + br i1 %t220, label %for.body9730, label %for.end9732 +for.body9730: + %t221 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 + %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %t221, i32 0, i32 1 + %t223 = load i64, ptr %t222 + %t224 = icmp sgt i64 %t223, 0 + br i1 %t224, label %then9733, label %endif9735 +then9733: + br label %for.end9732 +endif9735: + %t225 = load ptr, ptr %a1 + %t227 = load %S.C.CXType, ptr %a158 + store %S.C.CXType %t227, ptr %a228 + %t229 = load i64, ptr %a218 + %t230 = trunc i64 %t229 to i32 + call void @clang_getArgType(ptr sret(%S.C.CXType) align 16 %a226, ptr %a228, i32 %t230) + %t231 = load %S.C.CXType, ptr %a226 + %t232 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t225, %S.C.CXType %t231, i1 true, i1 true) + store %S.cimport.Mapped %t232, ptr %a233 + %t234 = getelementptr inbounds %S.cimport.Mapped, ptr %a233, i32 0, i32 2 + %t235 = load i1, ptr %t234 + br i1 %t235, label %then9736, label %else9737 +then9736: + %t236 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 3 + %t237 = getelementptr inbounds { ptr, i64, i64 }, ptr %t236, i32 0, i32 1 + %t238 = getelementptr inbounds %S.cimport.Mapped, ptr %a233, i32 0, i32 0 + %t239 = load %S.ast.Type, ptr %t238 + store %S.ast.Type %t239, ptr %a240 + call void @finch.copy.S_ast_Type(ptr %a241, ptr %a240) + %t242 = load %S.ast.Type, ptr %a241 + %t243 = load i64, ptr %t237 + %t244 = add i64 %t243, 1 + call void @finch_arr_reserve(ptr %t236, i64 %t244, i64 ptrtoint (ptr getelementptr (%S.ast.Type, ptr null, i32 1) to i64)) + %t245 = load ptr, ptr %t236 + %t246 = getelementptr inbounds %S.ast.Type, ptr %t245, i64 %t243 + store %S.ast.Type %t242, ptr %t246 + store i64 %t244, ptr %t237 + br label %endif9738 +else9737: + %t247 = getelementptr inbounds %S.cimport.Mapped, ptr %a233, i32 0, i32 1 + %t248 = load { ptr, i64, i64 }, ptr %t247 + %t249 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 5 + store { ptr, i64, i64 } %t248, ptr %a250 + call void @finch_str_copy(ptr %a251, ptr %a250) + %t252 = load { ptr, i64, i64 }, ptr %a251 + %t253 = load { ptr, i64, i64 }, ptr %t249 + store { ptr, i64, i64 } %t252, ptr %t249 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_drop(ptr %a254) + br label %endif9738 +endif9738: + call void @finch.drop.S_cimport_Mapped(ptr %a233) + br label %for.step9731 +for.step9731: + %t255 = load i64, ptr %a218 + %t256 = add i64 %t255, 1 + store i64 %t256, ptr %a218 + br label %for.cond9729 +for.end9732: + %t257 = load %S.C.CXType, ptr %a158 + store %S.C.CXType %t257, ptr %a258 + %t259 = call i32 @clang_isFunctionTypeVariadic(ptr %a258) + %t260 = icmp ne i32 %t259, 0 + %t261 = getelementptr inbounds %S.cimport.CFunc, ptr %a121, i32 0, i32 4 + store i1 %t260, ptr %t261 + %t262 = load %S.cimport.CFunc, ptr %a121 + %t263 = load ptr, ptr %a1 + %t264 = icmp eq ptr %t263, null + br i1 %t264, label %panic9739, label %ok9740 +panic9739: + call void @finch_panic(ptr @.str.6582, i64 477, ptr @.str.6583) + unreachable +ok9740: + %t265 = getelementptr inbounds %S.cimport.Importer, ptr %t263, i32 0, i32 0 + %t266 = getelementptr inbounds %S.cimport.CImports, ptr %t265, i32 0, i32 0 + %t267 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t267, ptr %a268 + store i32 0, ptr %a269 + %t270 = call i64 @finch_map_slot(ptr %t266, ptr %a268, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a269) + %t271 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t266, i32 0, i32 0 + %t272 = load ptr, ptr %t271 + %t273 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t272, i64 %t270 + %t274 = load i32, ptr %a269 + %t275 = icmp ne i32 %t274, 0 + br i1 %t275, label %map.new9741, label %map.have9742 +map.new9741: + %t276 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t273, i32 0, i32 1 + call void @finch_str_copy(ptr %t276, ptr %a268) + %t277 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t273, i32 0, i32 2 + store %S.cimport.CFunc zeroinitializer, ptr %t277 + br label %map.have9742 +map.have9742: + %t278 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t273, i32 0, i32 2 + store %S.cimport.CFunc %t262, ptr %a279 + call void @finch.copy.S_cimport_CFunc(ptr %a280, ptr %a279) + %t281 = load %S.cimport.CFunc, ptr %a280 + %t282 = load %S.cimport.CFunc, ptr %t278 + store %S.cimport.CFunc %t281, ptr %t278 + store %S.cimport.CFunc %t282, ptr %a283 + call void @finch.drop.S_cimport_CFunc(ptr %a283) + call void @finch.drop.S_cimport_Mapped(ptr %a193) + call void @finch.drop.S_cimport_CFunc(ptr %a121) + br label %endif9704 +else9703: + %t284 = load i32, ptr %a12 + %t285 = icmp eq i32 %t284, 9 + br i1 %t285, label %then9743, label %else9744 +then9743: + %t286 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t286, ptr %a287 + %t288 = call i32 @clang_Cursor_getStorageClass(ptr %a287) + %t289 = icmp ne i32 %t288, 2 + br label %logic.from9746 +logic.from9746: + br i1 %t289, label %logic.end9748, label %logic.rhs9747 +logic.rhs9747: + %t290 = load ptr, ptr %a1 + %t291 = icmp eq ptr %t290, null + br i1 %t291, label %panic9749, label %ok9750 +panic9749: + call void @finch_panic(ptr @.str.6584, i64 479, ptr @.str.6585) + unreachable +ok9750: + %t292 = getelementptr inbounds %S.cimport.Importer, ptr %t290, i32 0, i32 0 + %t293 = getelementptr inbounds %S.cimport.CImports, ptr %t292, i32 0, i32 2 + %t294 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t294, ptr %a295 + %t296 = call i64 @finch_map_find(ptr %t293, ptr %a295, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t297 = icmp sge i64 %t296, 0 + br label %logic.rend9751 +logic.rend9751: + br label %logic.end9748 +logic.end9748: + %t298 = phi i1 [ true, %logic.from9746 ], [ %t297, %logic.rend9751 ] + br i1 %t298, label %then9752, label %endif9754 +then9752: + call void @finch_str_drop(ptr %a8) + ret void +endif9754: + %t299 = load ptr, ptr %a1 + %t301 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t301, ptr %a302 + call void @clang_getCursorType(ptr sret(%S.C.CXType) align 16 %a300, ptr %a302) + %t303 = load %S.C.CXType, ptr %a300 + %t304 = call %S.cimport.Mapped @finch.cimport.mapType(ptr %t299, %S.C.CXType %t303, i1 false, i1 false) + store %S.cimport.Mapped %t304, ptr %a305 + %t306 = getelementptr inbounds %S.cimport.Mapped, ptr %a305, i32 0, i32 2 + %t307 = load i1, ptr %t306 + br i1 %t307, label %then9755, label %endif9757 +then9755: + %t308 = getelementptr inbounds %S.cimport.Mapped, ptr %a305, i32 0, i32 0 + %t309 = load %S.ast.Type, ptr %t308 + %t310 = load ptr, ptr %a1 + %t311 = icmp eq ptr %t310, null + br i1 %t311, label %panic9758, label %ok9759 +panic9758: + call void @finch_panic(ptr @.str.6586, i64 484, ptr @.str.6587) + unreachable +ok9759: + %t312 = getelementptr inbounds %S.cimport.Importer, ptr %t310, i32 0, i32 0 + %t313 = getelementptr inbounds %S.cimport.CImports, ptr %t312, i32 0, i32 2 + %t314 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t314, ptr %a315 + store i32 0, ptr %a316 + %t317 = call i64 @finch_map_slot(ptr %t313, ptr %a315, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.ast.Type }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a316) + %t318 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t313, i32 0, i32 0 + %t319 = load ptr, ptr %t318 + %t320 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t319, i64 %t317 + %t321 = load i32, ptr %a316 + %t322 = icmp ne i32 %t321, 0 + br i1 %t322, label %map.new9760, label %map.have9761 +map.new9760: + %t323 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t320, i32 0, i32 1 + call void @finch_str_copy(ptr %t323, ptr %a315) + %t324 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t320, i32 0, i32 2 + store %S.ast.Type zeroinitializer, ptr %t324 + br label %map.have9761 +map.have9761: + %t325 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.ast.Type }, ptr %t320, i32 0, i32 2 + store %S.ast.Type %t309, ptr %a326 + call void @finch.copy.S_ast_Type(ptr %a327, ptr %a326) + %t328 = load %S.ast.Type, ptr %a327 + %t329 = load %S.ast.Type, ptr %t325 + store %S.ast.Type %t328, ptr %t325 + store %S.ast.Type %t329, ptr %a330 + call void @finch.drop.S_ast_Type(ptr %a330) + br label %endif9757 +endif9757: + call void @finch.drop.S_cimport_Mapped(ptr %a305) + br label %endif9745 +else9744: + %t331 = load i32, ptr %a12 + %t332 = icmp eq i32 %t331, 2 + br i1 %t332, label %then9762, label %else9763 +then9762: + %t333 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t333, ptr %a334 + %t335 = call i32 @clang_isCursorDefinition(ptr %a334) + %t336 = icmp ne i32 %t335, 0 + br label %logic.from9765 +logic.from9765: + br i1 %t336, label %logic.rhs9766, label %logic.end9767 +logic.rhs9766: + %t337 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t338 = load i64, ptr %t337 + %t339 = icmp sgt i64 %t338, 0 + br label %logic.rend9768 +logic.rend9768: + br label %logic.end9767 +logic.end9767: + %t340 = phi i1 [ false, %logic.from9765 ], [ %t339, %logic.rend9768 ] + br label %logic.from9769 +logic.from9769: + br i1 %t340, label %logic.rhs9770, label %logic.end9771 +logic.rhs9770: + %t341 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t341, ptr %a342 + store { ptr, i64, i64 } { ptr @.str.6589, i64 1, i64 0 }, ptr %a344 + %t345 = call i64 @finch_str_find(ptr %a342, ptr %a344) + %t346 = icmp sge i64 %t345, 0 + %t347 = xor i1 %t346, true + br label %logic.rend9772 +logic.rend9772: + br label %logic.end9771 +logic.end9771: + %t348 = phi i1 [ false, %logic.from9769 ], [ %t347, %logic.rend9772 ] + br i1 %t348, label %then9773, label %endif9775 +then9773: + %t350 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t350, ptr %a351 + call void @clang_getCursorUSR(ptr sret(%S.C.CXString) align 16 %a349, ptr %a351) + %t352 = load %S.C.CXString, ptr %a349 + %t353 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t352) + store { ptr, i64, i64 } %t353, ptr %a354 + %t355 = load ptr, ptr %a1 + %t356 = icmp eq ptr %t355, null + br i1 %t356, label %panic9776, label %ok9777 +panic9776: + call void @finch_panic(ptr @.str.6590, i64 489, ptr @.str.6591) + unreachable +ok9777: + %t357 = getelementptr inbounds %S.cimport.Importer, ptr %t355, i32 0, i32 3 + %t358 = load { ptr, i64, i64 }, ptr %a354 + store { ptr, i64, i64 } %t358, ptr %a359 + %t360 = call i64 @finch_map_find(ptr %t357, ptr %a359, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t361 = icmp sge i64 %t360, 0 + %t362 = xor i1 %t361, true + br i1 %t362, label %then9778, label %endif9780 +then9778: + %t363 = load { ptr, i64, i64 }, ptr %a8 + %t364 = load ptr, ptr %a1 + %t365 = icmp eq ptr %t364, null + br i1 %t365, label %panic9781, label %ok9782 +panic9781: + call void @finch_panic(ptr @.str.6592, i64 490, ptr @.str.6593) + unreachable +ok9782: + %t366 = getelementptr inbounds %S.cimport.Importer, ptr %t364, i32 0, i32 3 + %t367 = load { ptr, i64, i64 }, ptr %a354 + store { ptr, i64, i64 } %t367, ptr %a368 + store i32 0, ptr %a369 + %t370 = call i64 @finch_map_slot(ptr %t366, ptr %a368, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a369) + %t371 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t366, i32 0, i32 0 + %t372 = load ptr, ptr %t371 + %t373 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t372, i64 %t370 + %t374 = load i32, ptr %a369 + %t375 = icmp ne i32 %t374, 0 + br i1 %t375, label %map.new9783, label %map.have9784 +map.new9783: + %t376 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t373, i32 0, i32 1 + call void @finch_str_copy(ptr %t376, ptr %a368) + %t377 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t373, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t377 + br label %map.have9784 +map.have9784: + %t378 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t373, i32 0, i32 2 + store { ptr, i64, i64 } %t363, ptr %a379 + call void @finch_str_copy(ptr %a380, ptr %a379) + %t381 = load { ptr, i64, i64 }, ptr %a380 + %t382 = load { ptr, i64, i64 }, ptr %t378 + store { ptr, i64, i64 } %t381, ptr %t378 + store { ptr, i64, i64 } %t382, ptr %a383 + call void @finch_str_drop(ptr %a383) + br label %endif9780 +endif9780: + call void @finch_str_drop(ptr %a354) + br label %endif9775 +endif9775: + br label %endif9764 +else9763: + %t384 = load i32, ptr %a12 + %t385 = icmp eq i32 %t384, 5 + br i1 %t385, label %then9785, label %else9786 +then9785: + %t386 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t386, ptr %a387 + %t388 = load ptr, ptr %a1 + %t389 = call i32 @clang_visitChildren(ptr %a387, ptr @finch.c.cimport.visitTop, ptr %t388) + br label %endif9787 +else9786: + %t390 = load i32, ptr %a12 + %t391 = icmp eq i32 %t390, 7 + br i1 %t391, label %then9788, label %else9789 +then9788: + %t392 = load ptr, ptr %a1 + %t393 = icmp eq ptr %t392, null + br i1 %t393, label %panic9791, label %ok9792 +panic9791: + call void @finch_panic(ptr @.str.6594, i64 496, ptr @.str.6595) + unreachable +ok9792: + %t394 = getelementptr inbounds %S.cimport.Importer, ptr %t392, i32 0, i32 0 + %t395 = getelementptr inbounds %S.cimport.CImports, ptr %t394, i32 0, i32 1 + %t396 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t396, ptr %a397 + %t398 = call i64 @finch_map_find(ptr %t395, ptr %a397, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t399 = icmp sge i64 %t398, 0 + %t400 = xor i1 %t399, true + br i1 %t400, label %then9793, label %endif9795 +then9793: + %t401 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t401, ptr %a402 + %t403 = call i64 @clang_getEnumConstantDeclValue(ptr %a402) + %t404 = insertvalue %S.cimport.CConst zeroinitializer, i64 %t403, 1 + %t405 = load ptr, ptr %a1 + %t406 = icmp eq ptr %t405, null + br i1 %t406, label %panic9796, label %ok9797 +panic9796: + call void @finch_panic(ptr @.str.6596, i64 497, ptr @.str.6597) + unreachable +ok9797: + %t407 = getelementptr inbounds %S.cimport.Importer, ptr %t405, i32 0, i32 0 + %t408 = getelementptr inbounds %S.cimport.CImports, ptr %t407, i32 0, i32 1 + %t409 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t409, ptr %a410 + store i32 0, ptr %a411 + %t412 = call i64 @finch_map_slot(ptr %t408, ptr %a410, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a411) + %t413 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t408, i32 0, i32 0 + %t414 = load ptr, ptr %t413 + %t415 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t414, i64 %t412 + %t416 = load i32, ptr %a411 + %t417 = icmp ne i32 %t416, 0 + br i1 %t417, label %map.new9798, label %map.have9799 +map.new9798: + %t418 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t415, i32 0, i32 1 + call void @finch_str_copy(ptr %t418, ptr %a410) + %t419 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t415, i32 0, i32 2 + store %S.cimport.CConst zeroinitializer, ptr %t419 + br label %map.have9799 +map.have9799: + %t420 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t415, i32 0, i32 2 + %t421 = load %S.cimport.CConst, ptr %t420 + store %S.cimport.CConst %t404, ptr %t420 + store %S.cimport.CConst %t421, ptr %a422 + call void @finch.drop.S_cimport_CConst(ptr %a422) + br label %endif9795 +endif9795: + br label %endif9790 +else9789: + %t423 = load i32, ptr %a12 + %t424 = icmp eq i32 %t423, 501 + br i1 %t424, label %then9800, label %endif9802 +then9800: + %t425 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t425, ptr %a426 + %t427 = call i32 @clang_Cursor_isMacroBuiltin(ptr %a426) + %t428 = icmp ne i32 %t427, 0 + br label %logic.from9803 +logic.from9803: + br i1 %t428, label %logic.end9805, label %logic.rhs9804 +logic.rhs9804: + %t429 = load %S.C.CXCursor, ptr %a2 + store %S.C.CXCursor %t429, ptr %a430 + %t431 = call i32 @clang_Cursor_isMacroFunctionLike(ptr %a430) + %t432 = icmp ne i32 %t431, 0 + br label %logic.rend9806 +logic.rend9806: + br label %logic.end9805 +logic.end9805: + %t433 = phi i1 [ true, %logic.from9803 ], [ %t432, %logic.rend9806 ] + br i1 %t433, label %then9807, label %endif9809 +then9807: + call void @finch_str_drop(ptr %a8) + ret void +endif9809: + %t434 = load ptr, ptr %a1 + %t435 = load %S.C.CXCursor, ptr %a2 + %t436 = call %S.cimport.Number @finch.cimport.macroValue(ptr %t434, %S.C.CXCursor %t435) + store %S.cimport.Number %t436, ptr %a437 + %t438 = getelementptr inbounds %S.cimport.Number, ptr %a437, i32 0, i32 1 + %t439 = load i1, ptr %t438 + br label %logic.from9810 +logic.from9810: + br i1 %t439, label %logic.rhs9811, label %logic.end9812 +logic.rhs9811: + %t440 = load ptr, ptr %a1 + %t441 = icmp eq ptr %t440, null + br i1 %t441, label %panic9813, label %ok9814 +panic9813: + call void @finch_panic(ptr @.str.6598, i64 504, ptr @.str.6599) + unreachable +ok9814: + %t442 = getelementptr inbounds %S.cimport.Importer, ptr %t440, i32 0, i32 0 + %t443 = getelementptr inbounds %S.cimport.CImports, ptr %t442, i32 0, i32 1 + %t444 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t444, ptr %a445 + %t446 = call i64 @finch_map_find(ptr %t443, ptr %a445, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t447 = icmp sge i64 %t446, 0 + %t448 = xor i1 %t447, true + br label %logic.rend9815 +logic.rend9815: + br label %logic.end9812 +logic.end9812: + %t449 = phi i1 [ false, %logic.from9810 ], [ %t448, %logic.rend9815 ] + br i1 %t449, label %then9816, label %endif9818 +then9816: + %t450 = getelementptr inbounds %S.cimport.Number, ptr %a437, i32 0, i32 0 + %t451 = load %S.cimport.CConst, ptr %t450 + %t452 = load ptr, ptr %a1 + %t453 = icmp eq ptr %t452, null + br i1 %t453, label %panic9819, label %ok9820 +panic9819: + call void @finch_panic(ptr @.str.6600, i64 505, ptr @.str.6601) + unreachable +ok9820: + %t454 = getelementptr inbounds %S.cimport.Importer, ptr %t452, i32 0, i32 0 + %t455 = getelementptr inbounds %S.cimport.CImports, ptr %t454, i32 0, i32 1 + %t456 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t456, ptr %a457 + store i32 0, ptr %a458 + %t459 = call i64 @finch_map_slot(ptr %t455, ptr %a457, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a458) + %t460 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t455, i32 0, i32 0 + %t461 = load ptr, ptr %t460 + %t462 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t461, i64 %t459 + %t463 = load i32, ptr %a458 + %t464 = icmp ne i32 %t463, 0 + br i1 %t464, label %map.new9821, label %map.have9822 +map.new9821: + %t465 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t462, i32 0, i32 1 + call void @finch_str_copy(ptr %t465, ptr %a457) + %t466 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t462, i32 0, i32 2 + store %S.cimport.CConst zeroinitializer, ptr %t466 + br label %map.have9822 +map.have9822: + %t467 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CConst }, ptr %t462, i32 0, i32 2 + store %S.cimport.CConst %t451, ptr %a468 + call void @finch.copy.S_cimport_CConst(ptr %a469, ptr %a468) + %t470 = load %S.cimport.CConst, ptr %a469 + %t471 = load %S.cimport.CConst, ptr %t467 + store %S.cimport.CConst %t470, ptr %t467 + store %S.cimport.CConst %t471, ptr %a472 + call void @finch.drop.S_cimport_CConst(ptr %a472) + br label %endif9818 +endif9818: + call void @finch.drop.S_cimport_Number(ptr %a437) + br label %endif9802 +endif9802: + br label %endif9790 +endif9790: + br label %endif9787 +endif9787: + br label %endif9764 +endif9764: + br label %endif9745 +endif9745: + br label %endif9704 +endif9704: + br label %endif9673 +endif9673: + call void @finch_str_drop(ptr %a8) + ret void +} + +define internal void @finch.drop.map_str_str(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9826 +n.cond9826: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9827, label %n.end9828 +n.body9827: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live9829, label %entry.next9830 +entry.live9829: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t8, i32 0, i32 2 + call void @finch_str_drop(ptr %t13) + br label %entry.next9830 +entry.next9830: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond9826 +n.end9828: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.map_str_bool(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond9831 +n.cond9831: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body9832, label %n.end9833 +n.body9832: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live9834, label %entry.next9835 +entry.live9834: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, i1 }, ptr %t8, i32 0, i32 2 + br label %entry.next9835 +entry.next9835: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond9831 +n.end9833: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_cimport_Importer(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 0 + call void @finch.drop.S_cimport_CImports(ptr %t1) + %t2 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 3 + call void @finch.drop.map_str_str(ptr %t3) + %t4 = getelementptr inbounds %S.cimport.Importer, ptr %a, i32 0, i32 4 + call void @finch.drop.map_str_bool(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_ptr(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal { i1, %S.cimport.CImports, { ptr, i64, i64 } } @finch.cimport.importHeaders({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i1 %p3, { ptr, i64, i64 } %p4) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i1, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca %S.cimport.Importer, align 16 + %a12 = alloca %S.cimport.CImports, align 16 + %a13 = alloca %S.cimport.CImports, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca i64, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca i64, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca i64, align 16 + %a113 = alloca ptr, align 16 + %a114 = alloca i64, align 16 + %a122 = alloca %S.cimport.Header, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca %S.C.CXUnsavedFile, align 16 + %a138 = alloca ptr, align 16 + %a140 = alloca i64, align 16 + %a153 = alloca i32, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a170 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca i64, align 16 + %a183 = alloca i64, align 16 + %a190 = alloca ptr, align 16 + %a194 = alloca %S.C.CXString, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a201 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a207 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a258 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a290 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a316 = alloca { ptr, i64, i64 }, align 16 + %a317 = alloca %S.C.CXCursor, align 16 + %a320 = alloca %S.C.CXCursor, align 16 + %a328 = alloca %S.cimport.CImports, align 16 + %a329 = alloca %S.cimport.CImports, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i1 %p3, ptr %a4 + store { ptr, i64, i64 } %p4, ptr %a5 + store %S.cimport.Importer zeroinitializer, ptr %a6 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = icmp eq i64 %t8, 0 + br i1 %t9, label %then9823, label %endif9825 +then9823: + %t10 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 + %t11 = load %S.cimport.CImports, ptr %t10 + store %S.cimport.CImports %t11, ptr %a12 + call void @finch.copy.S_cimport_CImports(ptr %a13, ptr %a12) + %t14 = load %S.cimport.CImports, ptr %a13 + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t15 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t16 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t15, %S.cimport.CImports %t14, 1 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t16 +endif9825: + %t17 = mul i64 3, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t18 = call ptr @finch_alloc(i64 %t17) + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 0 + store { ptr, i64, i64 } { ptr @.str.6602, i64 2, i64 0 }, ptr %t19 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 1 + store { ptr, i64, i64 } { ptr @.str.6603, i64 1, i64 0 }, ptr %t20 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 2 + store { ptr, i64, i64 } { ptr @.str.6604, i64 10, i64 0 }, ptr %t21 + %t22 = insertvalue { ptr, i64, i64 } undef, ptr %t18, 0 + %t23 = insertvalue { ptr, i64, i64 } %t22, i64 3, 1 + %t24 = insertvalue { ptr, i64, i64 } %t23, i64 3, 2 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = icmp sgt i64 %t27, 0 + br i1 %t28, label %then9836, label %endif9838 +then9836: + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t30 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6605, i64 9, i64 0 }, ptr %a32 + store { ptr, i64, i64 } %t30, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a31 + %t35 = load i64, ptr %t29 + %t36 = add i64 %t35, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t36, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t37 = load ptr, ptr %a25 + %t38 = getelementptr inbounds { ptr, i64, i64 }, ptr %t37, i64 %t35 + store { ptr, i64, i64 } %t34, ptr %t38 + store i64 %t36, ptr %t29 + br label %endif9838 +endif9838: + %t39 = load i1, ptr %a4 + br i1 %t39, label %then9839, label %endif9841 +then9839: + %t40 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t41 = load i64, ptr %t40 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a25 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } { ptr @.str.6606, i64 19, i64 0 }, ptr %t44 + store i64 %t42, ptr %t40 + br label %endif9841 +endif9841: + store i64 0, ptr %a45 + br label %each.cond9842 +each.cond9842: + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = load i64, ptr %a45 + %t49 = icmp slt i64 %t48, %t47 + br i1 %t49, label %each.body9843, label %each.end9845 +each.body9843: + %t50 = load ptr, ptr %a2 + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %t50, i64 %t48 + %t52 = load { ptr, i64, i64 }, ptr %t51 + store { ptr, i64, i64 } %t52, ptr %a53 + %t54 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t55 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.6607, i64 2, i64 0 }, ptr %a57 + store { ptr, i64, i64 } %t55, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a56 + %t60 = load i64, ptr %t54 + %t61 = add i64 %t60, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t61, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t62 = load ptr, ptr %a25 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 %t60 + store { ptr, i64, i64 } %t59, ptr %t63 + store i64 %t61, ptr %t54 + br label %each.step9844 +each.step9844: + %t64 = load i64, ptr %a45 + %t65 = add i64 %t64, 1 + store i64 %t65, ptr %a45 + br label %each.cond9842 +each.end9845: + %t66 = load { ptr, i64, i64 }, ptr %a5 + %t67 = call { ptr, i64, i64 } @finch.cimport.systemIncludeArgs({ ptr, i64, i64 } %t66) + store { ptr, i64, i64 } %t67, ptr %a68 + store i64 0, ptr %a69 + br label %each.cond9846 +each.cond9846: + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a68, i32 0, i32 1 + %t71 = load i64, ptr %t70 + %t72 = load i64, ptr %a69 + %t73 = icmp slt i64 %t72, %t71 + br i1 %t73, label %each.body9847, label %each.end9849 +each.body9847: + %t74 = load ptr, ptr %a68 + %t75 = getelementptr inbounds { ptr, i64, i64 }, ptr %t74, i64 %t72 + %t76 = load { ptr, i64, i64 }, ptr %t75 + store { ptr, i64, i64 } %t76, ptr %a77 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t79 = load { ptr, i64, i64 }, ptr %a77 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_copy(ptr %a81, ptr %a80) + %t82 = load { ptr, i64, i64 }, ptr %a81 + %t83 = load i64, ptr %t78 + %t84 = add i64 %t83, 1 + call void @finch_arr_reserve(ptr %a25, i64 %t84, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t85 = load ptr, ptr %a25 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i64 %t83 + store { ptr, i64, i64 } %t82, ptr %t86 + store i64 %t84, ptr %t78 + br label %each.step9848 +each.step9848: + %t87 = load i64, ptr %a69 + %t88 = add i64 %t87, 1 + store i64 %t88, ptr %a69 + br label %each.cond9846 +each.end9849: + call void @finch.drop.arr_str(ptr %a68) + store { ptr, i64, i64 } zeroinitializer, ptr %a89 + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t91 = load i64, ptr %t90 + store i64 0, ptr %a92 + br label %for.cond9850 +for.cond9850: + %t93 = load i64, ptr %a92 + %t94 = icmp slt i64 %t93, %t91 + br i1 %t94, label %for.body9851, label %for.end9853 +for.body9851: + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 + %t96 = load i64, ptr %a92 + %t97 = load { ptr, i64, i64 }, ptr %a25 + %t98 = extractvalue { ptr, i64, i64 } %t97, 1 + %t99 = icmp uge i64 %t96, %t98 + br i1 %t99, label %range9854, label %inrange9855 +range9854: + call void @finch_panic_index(ptr @.str.6608, i64 532, i64 %t96, i64 %t98) + unreachable +inrange9855: + %t100 = extractvalue { ptr, i64, i64 } %t97, 0 + %t101 = getelementptr inbounds { ptr, i64, i64 }, ptr %t100, i64 %t96 + %t102 = load { ptr, i64, i64 }, ptr %t101 + %t103 = extractvalue { ptr, i64, i64 } %t102, 0 + %t104 = icmp eq ptr %t103, null + %t105 = select i1 %t104, ptr @.str.6609, ptr %t103 + %t106 = load i64, ptr %t95 + %t107 = add i64 %t106, 1 + call void @finch_arr_reserve(ptr %a89, i64 %t107, i64 ptrtoint (ptr getelementptr (ptr, ptr null, i32 1) to i64)) + %t108 = load ptr, ptr %a89 + %t109 = getelementptr inbounds ptr, ptr %t108, i64 %t106 + store ptr %t105, ptr %t109 + store i64 %t107, ptr %t95 + br label %for.step9852 +for.step9852: + %t110 = load i64, ptr %a92 + %t111 = add i64 %t110, 1 + store i64 %t111, ptr %a92 + br label %for.cond9850 +for.end9853: + %t112 = call ptr @clang_createIndex(i32 0, i32 0) + store ptr %t112, ptr %a113 + store i64 0, ptr %a114 + br label %each.cond9856 +each.cond9856: + %t115 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = load i64, ptr %a114 + %t118 = icmp slt i64 %t117, %t116 + br i1 %t118, label %each.body9857, label %each.end9859 +each.body9857: + %t119 = load ptr, ptr %a1 + %t120 = getelementptr inbounds %S.cimport.Header, ptr %t119, i64 %t117 + %t121 = load %S.cimport.Header, ptr %t120 + store %S.cimport.Header %t121, ptr %a122 + %t123 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t124 = load { ptr, i64, i64 }, ptr %t123 + store { ptr, i64, i64 } { ptr @.str.6610, i64 10, i64 0 }, ptr %a126 + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a125 + store { ptr, i64, i64 } %t128, ptr %a130 + store { ptr, i64, i64 } { ptr @.str.6611, i64 2, i64 0 }, ptr %a131 + call void @finch_str_concat(ptr %a129, ptr %a130, ptr %a131) + store { ptr, i64, i64 } %t128, ptr %a132 + call void @finch_str_drop(ptr %a132) + %t133 = load { ptr, i64, i64 }, ptr %a129 + store { ptr, i64, i64 } %t133, ptr %a134 + %t135 = load { ptr, i64, i64 }, ptr %a134 + %t136 = call %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } { ptr @.str.6612, i64 14, i64 0 }, { ptr, i64, i64 } %t135) + store %S.C.CXUnsavedFile %t136, ptr %a137 + store ptr null, ptr %a138 + %t139 = or i64 1, 64 + store i64 %t139, ptr %a140 + %t141 = load ptr, ptr %a113 + %t142 = extractvalue { ptr, i64, i64 } { ptr @.str.6613, i64 14, i64 0 }, 0 + %t143 = icmp eq ptr %t142, null + %t144 = select i1 %t143, ptr @.str.6614, ptr %t142 + %t145 = load { ptr, i64, i64 }, ptr %a89 + %t146 = extractvalue { ptr, i64, i64 } %t145, 0 + %t147 = getelementptr inbounds { ptr, i64, i64 }, ptr %a89, i32 0, i32 1 + %t148 = load i64, ptr %t147 + %t149 = trunc i64 %t148 to i32 + %t150 = load i64, ptr %a140 + %t151 = trunc i64 %t150 to i32 + %t152 = call i32 @clang_parseTranslationUnit2(ptr %t141, ptr %t144, ptr %t146, i32 %t149, ptr %a137, i32 1, i32 %t151, ptr %a138) + store i32 %t152, ptr %a153 + %t154 = load i32, ptr %a153 + %t155 = icmp ne i32 %t154, 0 + br label %logic.from9860 +logic.from9860: + br i1 %t155, label %logic.end9862, label %logic.rhs9861 +logic.rhs9861: + %t156 = load ptr, ptr %a138 + %t157 = icmp eq ptr %t156, null + br label %logic.rend9863 +logic.rend9863: + br label %logic.end9862 +logic.end9862: + %t158 = phi i1 [ true, %logic.from9860 ], [ %t157, %logic.rend9863 ] + br i1 %t158, label %then9864, label %endif9866 +then9864: + %t159 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6615, i64 33, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t166 = load { ptr, i64, i64 }, ptr %t165 + store { ptr, i64, i64 } %t164, ptr %a168 + store { ptr, i64, i64 } %t166, ptr %a169 + call void @finch_str_concat(ptr %a167, ptr %a168, ptr %a169) + store { ptr, i64, i64 } %t164, ptr %a170 + call void @finch_str_drop(ptr %a170) + %t171 = load { ptr, i64, i64 }, ptr %a167 + store { ptr, i64, i64 } %t171, ptr %a173 + store { ptr, i64, i64 } { ptr @.str.6616, i64 1, i64 0 }, ptr %a174 + call void @finch_str_concat(ptr %a172, ptr %a173, ptr %a174) + store { ptr, i64, i64 } %t171, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a172 + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t177 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t176, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t177 +endif9866: + %t178 = load ptr, ptr %a138 + %t179 = call i32 @clang_getNumDiagnostics(ptr %t178) + %t180 = zext i32 %t179 to i64 + store i64 %t180, ptr %a181 + %t182 = load i64, ptr %a181 + store i64 0, ptr %a183 + br label %for.cond9867 +for.cond9867: + %t184 = load i64, ptr %a183 + %t185 = icmp slt i64 %t184, %t182 + br i1 %t185, label %for.body9868, label %for.end9870 +for.body9868: + %t186 = load ptr, ptr %a138 + %t187 = load i64, ptr %a183 + %t188 = trunc i64 %t187 to i32 + %t189 = call ptr @clang_getDiagnostic(ptr %t186, i32 %t188) + store ptr %t189, ptr %a190 + %t191 = load ptr, ptr %a190 + %t192 = call i32 @clang_getDiagnosticSeverity(ptr %t191) + %t193 = icmp sge i32 %t192, 3 + br i1 %t193, label %then9871, label %endif9873 +then9871: + %t195 = load ptr, ptr %a190 + call void @clang_getDiagnosticSpelling(ptr sret(%S.C.CXString) align 16 %a194, ptr %t195) + %t196 = load %S.C.CXString, ptr %a194 + %t197 = call { ptr, i64, i64 } @finch.cimport.text(%S.C.CXString %t196) + store { ptr, i64, i64 } %t197, ptr %a198 + %t199 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t199) + %t200 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t200, ptr %a201 + store { ptr, i64, i64 } { ptr @.str.6618, i64 14, i64 0 }, ptr %a203 + %t204 = call i64 @finch_str_find(ptr %a201, ptr %a203) + %t205 = icmp sge i64 %t204, 0 + br i1 %t205, label %then9874, label %endif9876 +then9874: + %t206 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t206, ptr %a207 + %t209 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t209, ptr %a210 + %t212 = getelementptr inbounds { ptr, i64, i64 }, ptr %a198, i32 0, i32 1 + %t213 = load i64, ptr %t212 + call void @finch_str_sub(ptr %a211, ptr %a210, i64 1, i64 %t213, ptr @.str.6620, i64 552) + %t214 = load { ptr, i64, i64 }, ptr %a211 + store { ptr, i64, i64 } %t214, ptr %a215 + store { ptr, i64, i64 } { ptr @.str.6622, i64 1, i64 0 }, ptr %a217 + %t218 = call i64 @finch_str_find(ptr %a215, ptr %a217) + store { ptr, i64, i64 } %t214, ptr %a219 + call void @finch_str_drop(ptr %a219) + %t220 = add i64 %t218, 1 + call void @finch_str_sub(ptr %a208, ptr %a207, i64 1, i64 %t220, ptr @.str.6619, i64 552) + %t221 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t221, ptr %a222 + %t223 = load { ptr, i64, i64 }, ptr %a222 + %t224 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t225 = load { ptr, i64, i64 }, ptr %t224 + store { ptr, i64, i64 } %t223, ptr %a226 + store { ptr, i64, i64 } %t225, ptr %a227 + %t228 = call i32 @finch_str_eq(ptr %a226, ptr %a227) + %t229 = icmp ne i32 %t228, 0 + br i1 %t229, label %then9877, label %endif9879 +then9877: + %t230 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t231 = load { ptr, i64, i64 }, ptr %t230 + store { ptr, i64, i64 } %t231, ptr %a233 + store { ptr, i64, i64 } { ptr @.str.6623, i64 34, i64 0 }, ptr %a234 + call void @finch_str_concat(ptr %a232, ptr %a233, ptr %a234) + %t235 = load { ptr, i64, i64 }, ptr %a232 + %t236 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t237 = load { ptr, i64, i64 }, ptr %t236 + store { ptr, i64, i64 } %t235, ptr %a239 + store { ptr, i64, i64 } %t237, ptr %a240 + call void @finch_str_concat(ptr %a238, ptr %a239, ptr %a240) + store { ptr, i64, i64 } %t235, ptr %a241 + call void @finch_str_drop(ptr %a241) + %t242 = load { ptr, i64, i64 }, ptr %a238 + store { ptr, i64, i64 } %t242, ptr %a244 + store { ptr, i64, i64 } { ptr @.str.6624, i64 1, i64 0 }, ptr %a245 + call void @finch_str_concat(ptr %a243, ptr %a244, ptr %a245) + store { ptr, i64, i64 } %t242, ptr %a246 + call void @finch_str_drop(ptr %a246) + %t247 = load { ptr, i64, i64 }, ptr %a243 + call void @finch_str_drop(ptr %a222) + call void @finch_str_drop(ptr %a198) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t248 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t247, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t248 +endif9879: + %t249 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t250 = load { ptr, i64, i64 }, ptr %t249 + store { ptr, i64, i64 } %t250, ptr %a252 + store { ptr, i64, i64 } { ptr @.str.6625, i64 34, i64 0 }, ptr %a253 + call void @finch_str_concat(ptr %a251, ptr %a252, ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a251 + %t255 = load { ptr, i64, i64 }, ptr %a222 + store { ptr, i64, i64 } %t254, ptr %a257 + store { ptr, i64, i64 } %t255, ptr %a258 + call void @finch_str_concat(ptr %a256, ptr %a257, ptr %a258) + store { ptr, i64, i64 } %t254, ptr %a259 + call void @finch_str_drop(ptr %a259) + %t260 = load { ptr, i64, i64 }, ptr %a256 + store { ptr, i64, i64 } %t260, ptr %a262 + store { ptr, i64, i64 } { ptr @.str.6626, i64 10, i64 0 }, ptr %a263 + call void @finch_str_concat(ptr %a261, ptr %a262, ptr %a263) + store { ptr, i64, i64 } %t260, ptr %a264 + call void @finch_str_drop(ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a261 + %t266 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t267 = load { ptr, i64, i64 }, ptr %t266 + store { ptr, i64, i64 } %t265, ptr %a269 + store { ptr, i64, i64 } %t267, ptr %a270 + call void @finch_str_concat(ptr %a268, ptr %a269, ptr %a270) + store { ptr, i64, i64 } %t265, ptr %a271 + call void @finch_str_drop(ptr %a271) + %t272 = load { ptr, i64, i64 }, ptr %a268 + store { ptr, i64, i64 } %t272, ptr %a274 + store { ptr, i64, i64 } { ptr @.str.6627, i64 60, i64 0 }, ptr %a275 + call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) + store { ptr, i64, i64 } %t272, ptr %a276 + call void @finch_str_drop(ptr %a276) + %t277 = load { ptr, i64, i64 }, ptr %a273 + call void @finch_str_drop(ptr %a222) + call void @finch_str_drop(ptr %a198) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t278 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t277, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t278 +endif9876: + %t279 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 1 + %t280 = load { ptr, i64, i64 }, ptr %t279 + store { ptr, i64, i64 } %t280, ptr %a282 + store { ptr, i64, i64 } { ptr @.str.6628, i64 19, i64 0 }, ptr %a283 + call void @finch_str_concat(ptr %a281, ptr %a282, ptr %a283) + %t284 = load { ptr, i64, i64 }, ptr %a281 + %t285 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t286 = load { ptr, i64, i64 }, ptr %t285 + store { ptr, i64, i64 } %t284, ptr %a288 + store { ptr, i64, i64 } %t286, ptr %a289 + call void @finch_str_concat(ptr %a287, ptr %a288, ptr %a289) + store { ptr, i64, i64 } %t284, ptr %a290 + call void @finch_str_drop(ptr %a290) + %t291 = load { ptr, i64, i64 }, ptr %a287 + store { ptr, i64, i64 } %t291, ptr %a293 + store { ptr, i64, i64 } { ptr @.str.6629, i64 16, i64 0 }, ptr %a294 + call void @finch_str_concat(ptr %a292, ptr %a293, ptr %a294) + store { ptr, i64, i64 } %t291, ptr %a295 + call void @finch_str_drop(ptr %a295) + %t296 = load { ptr, i64, i64 }, ptr %a292 + %t297 = load { ptr, i64, i64 }, ptr %a198 + store { ptr, i64, i64 } %t296, ptr %a299 + store { ptr, i64, i64 } %t297, ptr %a300 + call void @finch_str_concat(ptr %a298, ptr %a299, ptr %a300) + store { ptr, i64, i64 } %t296, ptr %a301 + call void @finch_str_drop(ptr %a301) + %t302 = load { ptr, i64, i64 }, ptr %a298 + call void @finch_str_drop(ptr %a198) + call void @finch_str_drop(ptr %a134) + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t303 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t302, 2 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t303 +endif9873: + %t304 = load ptr, ptr %a190 + call void @clang_disposeDiagnostic(ptr %t304) + br label %for.step9869 +for.step9869: + %t305 = load i64, ptr %a183 + %t306 = add i64 %t305, 1 + store i64 %t306, ptr %a183 + br label %for.cond9867 +for.end9870: + %t307 = load ptr, ptr %a138 + %t308 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 1 + store ptr %t307, ptr %t308 + %t309 = getelementptr inbounds %S.cimport.Header, ptr %a122, i32 0, i32 0 + %t310 = load { ptr, i64, i64 }, ptr %t309 + %t311 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 2 + store { ptr, i64, i64 } %t310, ptr %a312 + call void @finch_str_copy(ptr %a313, ptr %a312) + %t314 = load { ptr, i64, i64 }, ptr %a313 + %t315 = load { ptr, i64, i64 }, ptr %t311 + store { ptr, i64, i64 } %t314, ptr %t311 + store { ptr, i64, i64 } %t315, ptr %a316 + call void @finch_str_drop(ptr %a316) + %t318 = load ptr, ptr %a138 + call void @clang_getTranslationUnitCursor(ptr sret(%S.C.CXCursor) align 16 %a317, ptr %t318) + %t319 = load %S.C.CXCursor, ptr %a317 + store %S.C.CXCursor %t319, ptr %a320 + %t321 = call i32 @clang_visitChildren(ptr %a320, ptr @finch.c.cimport.visitTop, ptr %a6) + %t322 = load ptr, ptr %a138 + call void @clang_disposeTranslationUnit(ptr %t322) + call void @finch_str_drop(ptr %a134) + br label %each.step9858 +each.step9858: + %t323 = load i64, ptr %a114 + %t324 = add i64 %t323, 1 + store i64 %t324, ptr %a114 + br label %each.cond9856 +each.end9859: + %t325 = load ptr, ptr %a113 + call void @clang_disposeIndex(ptr %t325) + %t326 = getelementptr inbounds %S.cimport.Importer, ptr %a6, i32 0, i32 0 + %t327 = load %S.cimport.CImports, ptr %t326 + store %S.cimport.CImports %t327, ptr %a328 + call void @finch.copy.S_cimport_CImports(ptr %a329, ptr %a328) + %t330 = load %S.cimport.CImports, ptr %a329 + call void @finch.drop.arr_ptr(ptr %a89) + call void @finch.drop.arr_str(ptr %a25) + call void @finch.drop.S_cimport_Importer(ptr %a6) + %t331 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t332 = insertvalue { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t331, %S.cimport.CImports %t330, 1 + ret { i1, %S.cimport.CImports, { ptr, i64, i64 } } %t332 +} + +define internal %S.C.CXUnsavedFile @finch.host.unsavedFile({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + %t4 = extractvalue { ptr, i64, i64 } %t3, 0 + %t5 = icmp eq ptr %t4, null + %t6 = select i1 %t5, ptr @.str.6630, ptr %t4 + %t7 = insertvalue %S.C.CXUnsavedFile zeroinitializer, ptr %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = extractvalue { ptr, i64, i64 } %t8, 0 + %t10 = icmp eq ptr %t9, null + %t11 = select i1 %t10, ptr @.str.6631, ptr %t9 + %t12 = insertvalue %S.C.CXUnsavedFile %t7, ptr %t11, 1 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = trunc i64 %t14 to i32 + %t16 = insertvalue %S.C.CXUnsavedFile %t12, i32 %t15, 2 + ret %S.C.CXUnsavedFile %t16 +} + +define internal { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6634, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6635, i64 2, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6632, i64 1, i64 0 }, ptr %a9 + store { ptr, i64, i64 } %t7, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.6636, i64 1, i64 0 }, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + ret { ptr, i64, i64 } %t17 +} + +define internal { ptr, i64, i64 } @finch.host.native({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6638, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6639, i64 1, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + ret { ptr, i64, i64 } %t7 +} + +define internal i64 @finch.host.run({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6640, i64 1, i64 0 }, ptr %a4 + store { ptr, i64, i64 } %t2, ptr %a5 + call void @finch_str_concat(ptr %a3, ptr %a4, ptr %a5) + %t6 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t6, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6641, i64 1, i64 0 }, ptr %a9 + call void @finch_str_concat(ptr %a7, ptr %a8, ptr %a9) + store { ptr, i64, i64 } %t6, ptr %a10 + call void @finch_str_drop(ptr %a10) + %t11 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t11, ptr %a13 + call void @finch_str_copy(ptr %a12, ptr %a13) + %t14 = call i64 @finch_shell(ptr %a12) + call void @finch_str_drop(ptr %a12) + store { ptr, i64, i64 } %t11, ptr %a15 + call void @finch_str_drop(ptr %a15) + ret i64 %t14 +} + +define internal { ptr, i64, i64 } @finch.host.nullDevice() { +entry: + + ret { ptr, i64, i64 } { ptr @.str.6642, i64 3, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.host.tempDir() { +entry: + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %t1 = mul i64 2, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t2 = call ptr @finch_alloc(i64 %t1) + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 0 + store { ptr, i64, i64 } { ptr @.str.6643, i64 4, i64 0 }, ptr %t3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i64 1 + store { ptr, i64, i64 } { ptr @.str.6644, i64 3, i64 0 }, ptr %t4 + %t5 = insertvalue { ptr, i64, i64 } undef, ptr %t2, 0 + %t6 = insertvalue { ptr, i64, i64 } %t5, i64 2, 1 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 2, 2 + store { ptr, i64, i64 } %t7, ptr %a8 + store i64 0, ptr %a9 + br label %each.cond9880 +each.cond9880: + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = load i64, ptr %a9 + %t13 = icmp slt i64 %t12, %t11 + br i1 %t13, label %each.body9881, label %each.end9883 +each.body9881: + %t14 = load ptr, ptr %a8 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i64 %t12 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + %t18 = load { ptr, i64, i64 }, ptr %a17 + %t19 = extractvalue { ptr, i64, i64 } %t18, 0 + %t20 = icmp eq ptr %t19, null + %t21 = select i1 %t20, ptr @.str.6645, ptr %t19 + %t22 = call ptr @getenv(ptr %t21) + store { ptr, i64, i64 } zeroinitializer, ptr %a23 + call void @finch_str_from_c(ptr %a23, ptr %t22) + %t24 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a28, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = icmp sgt i64 %t30, 0 + br i1 %t31, label %then9884, label %endif9886 +then9884: + %t32 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.6647, i64 1, i64 0 }, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.6648, i64 1, i64 0 }, ptr %a36 + call void @finch_str_replace(ptr %a34, ptr %a33, ptr %a35, ptr %a36) + %t37 = load { ptr, i64, i64 }, ptr %a34 + call void @finch_str_drop(ptr %a28) + call void @finch.drop.arr_str(ptr %a8) + ret { ptr, i64, i64 } %t37 +endif9886: + call void @finch_str_drop(ptr %a28) + br label %each.step9882 +each.step9882: + %t38 = load i64, ptr %a9 + %t39 = add i64 %t38, 1 + store i64 %t39, ptr %a9 + br label %each.cond9880 +each.end9883: + call void @finch.drop.arr_str(ptr %a8) + ret { ptr, i64, i64 } { ptr @.str.6649, i64 1, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.host.pathSeparator() { +entry: + + ret { ptr, i64, i64 } { ptr @.str.6650, i64 1, i64 0 } +} + +define internal i64 @finch.host.pid() { +entry: + + %t1 = call i32 @getpid() + %t2 = sext i32 %t1 to i64 + ret i64 %t2 +} + +define internal { ptr, i64, i64 } @finch.host.cwd() { +entry: + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %t1 = call ptr @_getcwd(ptr null, i32 0) + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + call void @finch_str_from_c(ptr %a2, ptr %t1) + %t3 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = icmp eq i64 %t9, 0 + br i1 %t10, label %then9887, label %endif9889 +then9887: + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } { ptr @.str.6651, i64 1, i64 0 } +endif9889: + %t11 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t11, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.6653, i64 1, i64 0 }, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.6654, i64 1, i64 0 }, ptr %a15 + call void @finch_str_replace(ptr %a13, ptr %a12, ptr %a14, ptr %a15) + %t16 = load { ptr, i64, i64 }, ptr %a13 + call void @finch_str_drop(ptr %a7) + ret { ptr, i64, i64 } %t16 +} + +define internal { ptr, i64, i64 } @finch.host.cacheDir() { +entry: + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %t1 = extractvalue { ptr, i64, i64 } { ptr @.str.6655, i64 12, i64 0 }, 0 + %t2 = icmp eq ptr %t1, null + %t3 = select i1 %t2, ptr @.str.6656, ptr %t1 + %t4 = call ptr @getenv(ptr %t3) + store { ptr, i64, i64 } zeroinitializer, ptr %a5 + call void @finch_str_from_c(ptr %a5, ptr %t4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a10, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = icmp sgt i64 %t12, 0 + br i1 %t13, label %then9890, label %endif9892 +then9890: + %t14 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.6658, i64 1, i64 0 }, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6659, i64 1, i64 0 }, ptr %a18 + call void @finch_str_replace(ptr %a16, ptr %a15, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t19, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.6660, i64 6, i64 0 }, ptr %a22 + call void @finch_str_concat(ptr %a20, ptr %a21, ptr %a22) + store { ptr, i64, i64 } %t19, ptr %a23 + call void @finch_str_drop(ptr %a23) + %t24 = load { ptr, i64, i64 }, ptr %a20 + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t24 +endif9892: + %t25 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t25, ptr %a27 + store { ptr, i64, i64 } { ptr @.str.6661, i64 12, i64 0 }, ptr %a28 + call void @finch_str_concat(ptr %a26, ptr %a27, ptr %a28) + store { ptr, i64, i64 } %t25, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a26 + call void @finch_str_drop(ptr %a10) + ret { ptr, i64, i64 } %t30 +} + +define internal void @finch.host.binaryStdio() { +entry: + + %t1 = call i32 @_setmode(i32 0, i32 32768) + %t2 = call i32 @_setmode(i32 1, i32 32768) + ret void +} + +define internal void @finch.host.makeDirs({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6663, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.6664, i64 1, i64 0 }, ptr %a6 + call void @finch_str_replace(ptr %a4, ptr %a3, ptr %a5, ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t7, ptr %a8 + store i64 0, ptr %a9 + %t10 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.6666, i64 1, i64 0 }, ptr %a13 + call void @finch_str_split(ptr %a14, ptr %a11, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t15, ptr %a16 + store i64 0, ptr %a17 + br label %each.cond9893 +each.cond9893: + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a16, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = load i64, ptr %a17 + %t21 = icmp slt i64 %t20, %t19 + br i1 %t21, label %each.body9894, label %each.end9896 +each.body9894: + %t22 = load ptr, ptr %a16 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t20 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + %t26 = load i64, ptr %a9 + %t27 = icmp sgt i64 %t26, 0 + br i1 %t27, label %then9897, label %endif9899 +then9897: + %t28 = load i64, ptr %a9 + %t29 = add i64 %t28, 1 + store i64 %t29, ptr %a9 + br label %endif9899 +endif9899: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = load i64, ptr %a9 + %t33 = add i64 %t32, %t31 + store i64 %t33, ptr %a9 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a25, i32 0, i32 1 + %t35 = load i64, ptr %t34 + %t36 = icmp eq i64 %t35, 0 + br label %logic.from9900 +logic.from9900: + br i1 %t36, label %logic.end9902, label %logic.rhs9901 +logic.rhs9901: + %t37 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t37, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.6668, i64 1, i64 0 }, ptr %a40 + %t41 = call i32 @finch_str_ends(ptr %a38, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br label %logic.rend9903 +logic.rend9903: + br label %logic.end9902 +logic.end9902: + %t43 = phi i1 [ true, %logic.from9900 ], [ %t42, %logic.rend9903 ] + br i1 %t43, label %then9904, label %endif9906 +then9904: + br label %each.step9895 +endif9906: + %t44 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t44, ptr %a45 + %t47 = load i64, ptr %a9 + call void @finch_str_sub(ptr %a46, ptr %a45, i64 0, i64 %t47, ptr @.str.6669, i64 87) + %t48 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t48, ptr %a49 + %t50 = load { ptr, i64, i64 }, ptr %a49 + %t51 = extractvalue { ptr, i64, i64 } %t50, 0 + %t52 = icmp eq ptr %t51, null + %t53 = select i1 %t52, ptr @.str.6670, ptr %t51 + %t54 = call i32 @_mkdir(ptr %t53) + call void @finch_str_drop(ptr %a49) + br label %each.step9895 +each.step9895: + %t55 = load i64, ptr %a17 + %t56 = add i64 %t55, 1 + store i64 %t56, ptr %a17 + br label %each.cond9893 +each.end9896: + call void @finch.drop.arr_str(ptr %a16) + call void @finch_str_drop(ptr %a8) + ret void +} + +define internal void @finch.host.remove({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a4 + call void @finch_str_copy(ptr %a3, ptr %a4) + %t5 = call i32 @finch_delete_file(ptr %a3) + call void @finch_str_drop(ptr %a3) + %t6 = icmp ne i32 %t5, 0 + ret void +} + +define internal void @finch.host.removeTree({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.host.native({ ptr, i64, i64 } %t2) + %t4 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t3) + store { ptr, i64, i64 } %t3, ptr %a5 + call void @finch_str_drop(ptr %a5) + store { ptr, i64, i64 } { ptr @.str.6671, i64 13, i64 0 }, ptr %a7 + store { ptr, i64, i64 } %t4, ptr %a8 + call void @finch_str_concat(ptr %a6, ptr %a7, ptr %a8) + store { ptr, i64, i64 } %t4, ptr %a9 + call void @finch_str_drop(ptr %a9) + %t10 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t10, ptr %a12 + store { ptr, i64, i64 } { ptr @.str.6672, i64 8, i64 0 }, ptr %a13 + call void @finch_str_concat(ptr %a11, ptr %a12, ptr %a13) + store { ptr, i64, i64 } %t10, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_copy(ptr %a16, ptr %a17) + %t18 = call i64 @finch_shell(ptr %a16) + call void @finch_str_drop(ptr %a16) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + ret void +} + +define internal void @finch.host.move({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t3, ptr %a5 + call void @finch_str_copy(ptr %a4, ptr %a5) + %t6 = call i32 @finch_delete_file(ptr %a4) + call void @finch_str_drop(ptr %a4) + %t7 = icmp ne i32 %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a1 + %t9 = extractvalue { ptr, i64, i64 } %t8, 0 + %t10 = icmp eq ptr %t9, null + %t11 = select i1 %t10, ptr @.str.6673, ptr %t9 + %t12 = load { ptr, i64, i64 }, ptr %a2 + %t13 = extractvalue { ptr, i64, i64 } %t12, 0 + %t14 = icmp eq ptr %t13, null + %t15 = select i1 %t14, ptr @.str.6674, ptr %t13 + %t16 = call i32 @rename(ptr %t11, ptr %t15) + ret void +} + +define internal { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_trim(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.6677, i64 1, i64 0 }, ptr %a8 + call void @finch_str_split(ptr %a9, ptr %a6, ptr %a8) + %t10 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t5, ptr %a11 + call void @finch_str_drop(ptr %a11) + store { ptr, i64, i64 } %t10, ptr %a12 + %t13 = load { ptr, i64, i64 }, ptr %a12 + %t14 = extractvalue { ptr, i64, i64 } %t13, 1 + %t15 = icmp uge i64 0, %t14 + br i1 %t15, label %range9907, label %inrange9908 +range9907: + call void @finch_panic_index(ptr @.str.6678, i64 21, i64 0, i64 %t14) + unreachable +inrange9908: + %t16 = extractvalue { ptr, i64, i64 } %t13, 0 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %t16, i64 0 + %t18 = load { ptr, i64, i64 }, ptr %t17 + store { ptr, i64, i64 } %t18, ptr %a19 + call void @finch_str_trim(ptr %a20, ptr %a19) + %t21 = load { ptr, i64, i64 }, ptr %a20 + call void @finch.drop.arr_str(ptr %a12) + ret { ptr, i64, i64 } %t21 +} + +define internal { ptr, i64, i64 } @finch.platform.hostTriple() { +entry: + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %t1 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t1, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.6680, i64 14, i64 0 }, ptr %a4 + call void @finch_str_concat(ptr %a2, ptr %a3, ptr %a4) + store { ptr, i64, i64 } %t1, ptr %a5 + call void @finch_str_drop(ptr %a5) + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a8, i64 %t7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t6, ptr %a11 + store { ptr, i64, i64 } %t9, ptr %a12 + call void @finch_str_concat(ptr %a10, ptr %a11, ptr %a12) + store { ptr, i64, i64 } %t6, ptr %a13 + call void @finch_str_drop(ptr %a13) + store { ptr, i64, i64 } %t9, ptr %a14 + call void @finch_str_drop(ptr %a14) + %t15 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t15, ptr %a17 + store { ptr, i64, i64 } { ptr @.str.6681, i64 4, i64 0 }, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t15, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = load { ptr, i64, i64 }, ptr %a21 + %t23 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t22) + store { ptr, i64, i64 } { ptr @.str.6682, i64 21, i64 0 }, ptr %a25 + store { ptr, i64, i64 } %t23, ptr %a26 + call void @finch_str_concat(ptr %a24, ptr %a25, ptr %a26) + store { ptr, i64, i64 } %t23, ptr %a27 + call void @finch_str_drop(ptr %a27) + %t28 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t28, ptr %a30 + store { ptr, i64, i64 } { ptr @.str.6683, i64 4, i64 0 }, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t28, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + %t34 = call { ptr, i64, i64 } @finch.host.nullDevice() + store { ptr, i64, i64 } %t33, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t33, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + %t41 = call i64 @finch.host.run({ ptr, i64, i64 } %t40) + store { ptr, i64, i64 } %t40, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } zeroinitializer, ptr %a45 + store { ptr, i64, i64 } zeroinitializer, ptr %a46 + %t47 = call i32 @finch_try_read_file(ptr %a45, ptr %a44, ptr %a46) + %t48 = icmp eq i32 %t47, 0 + %t49 = load { ptr, i64, i64 }, ptr %a46 + %t50 = load { ptr, i64, i64 }, ptr %a45 + br i1 %t48, label %or.failed9909, label %or.ok9910 +or.failed9909: + store { ptr, i64, i64 } %t49, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %or.bend9911 +or.bend9911: + br label %or.end9912 +or.ok9910: + br label %or.end9912 +or.end9912: + %t52 = phi { ptr, i64, i64 } [ { ptr @.str.6684, i64 0, i64 0 }, %or.bend9911 ], [ %t50, %or.ok9910 ] + store { ptr, i64, i64 } %t52, ptr %a53 + %t54 = load { ptr, i64, i64 }, ptr %a21 + call void @finch.host.remove({ ptr, i64, i64 } %t54) + %t55 = load { ptr, i64, i64 }, ptr %a53 + store { ptr, i64, i64 } %t55, ptr %a56 + call void @finch_str_trim(ptr %a57, ptr %a56) + %t58 = load { ptr, i64, i64 }, ptr %a57 + %t59 = extractvalue { ptr, i64, i64 } %t58, 1 + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_drop(ptr %a60) + %t61 = icmp eq i64 %t59, 0 + br i1 %t61, label %then9913, label %endif9915 +then9913: + call void @finch_str_drop(ptr %a53) + call void @finch_str_drop(ptr %a21) + ret { ptr, i64, i64 } { ptr @.str.6686, i64 24, i64 0 } +endif9915: + %t62 = load { ptr, i64, i64 }, ptr %a53 + %t63 = call { ptr, i64, i64 } @finch.platform.firstLine({ ptr, i64, i64 } %t62) + call void @finch_str_drop(ptr %a53) + call void @finch_str_drop(ptr %a21) + ret { ptr, i64, i64 } %t63 +} + +define internal %S.platform.Target @finch.platform.select({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca %S.platform.Target, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca i1, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca i1, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca i1, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a227 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a271 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a289 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = call { ptr, i64, i64 } @finch.platform.hostTriple() + store { ptr, i64, i64 } %t2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + call void @finch_str_copy(ptr %a6, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp eq i64 %t10, 0 + br i1 %t11, label %then9916, label %else9917 +then9916: + %t12 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_copy(ptr %a14, ptr %a13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + %t16 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t15, ptr %a8 + store { ptr, i64, i64 } %t16, ptr %a17 + call void @finch_str_drop(ptr %a17) + br label %endif9918 +else9917: + %t18 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t18, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.6687, i64 7, i64 0 }, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br i1 %t22, label %then9919, label %else9920 +then9919: + %t23 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6688, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch_str_drop(ptr %a24) + br label %endif9921 +else9920: + %t25 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.6689, i64 5, i64 0 }, ptr %a27 + %t28 = call i32 @finch_str_eq(ptr %a26, ptr %a27) + %t29 = icmp ne i32 %t28, 0 + br i1 %t29, label %then9922, label %else9923 +then9922: + %t30 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6690, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t30, ptr %a31 + call void @finch_str_drop(ptr %a31) + br label %endif9924 +else9923: + %t32 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t32, ptr %a33 + store { ptr, i64, i64 } { ptr @.str.6691, i64 5, i64 0 }, ptr %a34 + %t35 = call i32 @finch_str_eq(ptr %a33, ptr %a34) + %t36 = icmp ne i32 %t35, 0 + br label %logic.from9925 +logic.from9925: + br i1 %t36, label %logic.end9927, label %logic.rhs9926 +logic.rhs9926: + %t37 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t37, ptr %a38 + store { ptr, i64, i64 } { ptr @.str.6692, i64 7, i64 0 }, ptr %a39 + %t40 = call i32 @finch_str_eq(ptr %a38, ptr %a39) + %t41 = icmp ne i32 %t40, 0 + br label %logic.rend9928 +logic.rend9928: + br label %logic.end9927 +logic.end9927: + %t42 = phi i1 [ true, %logic.from9925 ], [ %t41, %logic.rend9928 ] + br label %logic.from9929 +logic.from9929: + br i1 %t42, label %logic.end9931, label %logic.rhs9930 +logic.rhs9930: + %t43 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t43, ptr %a44 + store { ptr, i64, i64 } { ptr @.str.6693, i64 11, i64 0 }, ptr %a45 + %t46 = call i32 @finch_str_eq(ptr %a44, ptr %a45) + %t47 = icmp ne i32 %t46, 0 + br label %logic.rend9932 +logic.rend9932: + br label %logic.end9931 +logic.end9931: + %t48 = phi i1 [ true, %logic.from9929 ], [ %t47, %logic.rend9932 ] + br i1 %t48, label %then9933, label %else9934 +then9933: + %t49 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6694, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t49, ptr %a50 + call void @finch_str_drop(ptr %a50) + br label %endif9935 +else9934: + %t51 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t51, ptr %a52 + store { ptr, i64, i64 } { ptr @.str.6695, i64 5, i64 0 }, ptr %a53 + %t54 = call i32 @finch_str_eq(ptr %a52, ptr %a53) + %t55 = icmp ne i32 %t54, 0 + br i1 %t55, label %then9936, label %endif9938 +then9936: + %t56 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t56, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.6697, i64 7, i64 0 }, ptr %a59 + %t60 = call i32 @finch_str_starts(ptr %a57, ptr %a59) + %t61 = icmp ne i32 %t60, 0 + br label %logic.from9939 +logic.from9939: + br i1 %t61, label %logic.end9941, label %logic.rhs9940 +logic.rhs9940: + %t62 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t62, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6699, i64 5, i64 0 }, ptr %a65 + %t66 = call i32 @finch_str_starts(ptr %a63, ptr %a65) + %t67 = icmp ne i32 %t66, 0 + br label %logic.rend9942 +logic.rend9942: + br label %logic.end9941 +logic.end9941: + %t68 = phi i1 [ true, %logic.from9939 ], [ %t67, %logic.rend9942 ] + br i1 %t68, label %then9943, label %else9944 +then9943: + %t69 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6700, i64 24, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t69, ptr %a70 + call void @finch_str_drop(ptr %a70) + br label %endif9945 +else9944: + %t71 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6701, i64 25, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_drop(ptr %a72) + br label %endif9945 +endif9945: + br label %endif9938 +endif9938: + br label %endif9935 +endif9935: + br label %endif9924 +endif9924: + br label %endif9921 +endif9921: + br label %endif9918 +endif9918: + %t73 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t73, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6702, i64 22, i64 0 }, ptr %a75 + %t76 = call i32 @finch_str_eq(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + br i1 %t77, label %then9946, label %endif9948 +then9946: + %t78 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6703, i64 18, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t78, ptr %a79 + call void @finch_str_drop(ptr %a79) + br label %endif9948 +endif9948: + %t80 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t80, ptr %a81 + call void @finch_str_copy(ptr %a82, ptr %a81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = insertvalue %S.platform.Target zeroinitializer, { ptr, i64, i64 } %t83, 0 + store %S.platform.Target %t84, ptr %a85 + %t86 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t86, ptr %a87 + store { ptr, i64, i64 } { ptr @.str.6705, i64 7, i64 0 }, ptr %a89 + %t90 = call i64 @finch_str_find(ptr %a87, ptr %a89) + %t91 = icmp sge i64 %t90, 0 + br label %logic.from9949 +logic.from9949: + br i1 %t91, label %logic.end9951, label %logic.rhs9950 +logic.rhs9950: + %t92 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t92, ptr %a93 + store { ptr, i64, i64 } { ptr @.str.6707, i64 5, i64 0 }, ptr %a95 + %t96 = call i64 @finch_str_find(ptr %a93, ptr %a95) + %t97 = icmp sge i64 %t96, 0 + br label %logic.rend9952 +logic.rend9952: + br label %logic.end9951 +logic.end9951: + %t98 = phi i1 [ true, %logic.from9949 ], [ %t97, %logic.rend9952 ] + br label %logic.from9953 +logic.from9953: + br i1 %t98, label %logic.end9955, label %logic.rhs9954 +logic.rhs9954: + %t99 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t99, ptr %a100 + store { ptr, i64, i64 } { ptr @.str.6709, i64 4, i64 0 }, ptr %a102 + %t103 = call i64 @finch_str_find(ptr %a100, ptr %a102) + %t104 = icmp sge i64 %t103, 0 + br label %logic.rend9956 +logic.rend9956: + br label %logic.end9955 +logic.end9955: + %t105 = phi i1 [ true, %logic.from9953 ], [ %t104, %logic.rend9956 ] + br label %logic.from9957 +logic.from9957: + br i1 %t105, label %logic.end9959, label %logic.rhs9958 +logic.rhs9958: + %t106 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t106, ptr %a107 + store { ptr, i64, i64 } { ptr @.str.6711, i64 5, i64 0 }, ptr %a109 + %t110 = call i64 @finch_str_find(ptr %a107, ptr %a109) + %t111 = icmp sge i64 %t110, 0 + br label %logic.rend9960 +logic.rend9960: + br label %logic.end9959 +logic.end9959: + %t112 = phi i1 [ true, %logic.from9957 ], [ %t111, %logic.rend9960 ] + %t113 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + store i1 %t112, ptr %t113 + %t114 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t114, ptr %a115 + store { ptr, i64, i64 } { ptr @.str.6713, i64 4, i64 0 }, ptr %a117 + %t118 = call i64 @finch_str_find(ptr %a115, ptr %a117) + %t119 = icmp sge i64 %t118, 0 + %t120 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 2 + store i1 %t119, ptr %t120 + %t121 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.6715, i64 5, i64 0 }, ptr %a124 + %t125 = call i64 @finch_str_find(ptr %a122, ptr %a124) + %t126 = icmp sge i64 %t125, 0 + br label %logic.from9961 +logic.from9961: + br i1 %t126, label %logic.end9963, label %logic.rhs9962 +logic.rhs9962: + %t127 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t127, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.6717, i64 6, i64 0 }, ptr %a130 + %t131 = call i64 @finch_str_find(ptr %a128, ptr %a130) + %t132 = icmp sge i64 %t131, 0 + br label %logic.rend9964 +logic.rend9964: + br label %logic.end9963 +logic.end9963: + %t133 = phi i1 [ true, %logic.from9961 ], [ %t132, %logic.rend9964 ] + br label %logic.from9965 +logic.from9965: + br i1 %t133, label %logic.end9967, label %logic.rhs9966 +logic.rhs9966: + %t134 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t134, ptr %a135 + store { ptr, i64, i64 } { ptr @.str.6719, i64 5, i64 0 }, ptr %a137 + %t138 = call i64 @finch_str_find(ptr %a135, ptr %a137) + %t139 = icmp sge i64 %t138, 0 + br label %logic.rend9968 +logic.rend9968: + br label %logic.end9967 +logic.end9967: + %t140 = phi i1 [ true, %logic.from9965 ], [ %t139, %logic.rend9968 ] + %t141 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + store i1 %t140, ptr %t141 + %t142 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t142, ptr %a143 + store { ptr, i64, i64 } { ptr @.str.6721, i64 7, i64 0 }, ptr %a145 + %t146 = call i32 @finch_str_starts(ptr %a143, ptr %a145) + %t147 = icmp ne i32 %t146, 0 + br label %logic.from9969 +logic.from9969: + br i1 %t147, label %logic.end9971, label %logic.rhs9970 +logic.rhs9970: + %t148 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t148, ptr %a149 + store { ptr, i64, i64 } { ptr @.str.6723, i64 5, i64 0 }, ptr %a151 + %t152 = call i32 @finch_str_starts(ptr %a149, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + br label %logic.rend9972 +logic.rend9972: + br label %logic.end9971 +logic.end9971: + %t154 = phi i1 [ true, %logic.from9969 ], [ %t153, %logic.rend9972 ] + %t155 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + store i1 %t154, ptr %t155 + %t156 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t156, ptr %a157 + store { ptr, i64, i64 } { ptr @.str.6725, i64 7, i64 0 }, ptr %a159 + %t160 = call i32 @finch_str_starts(ptr %a157, ptr %a159) + %t161 = icmp ne i32 %t160, 0 + br label %logic.from9973 +logic.from9973: + br i1 %t161, label %logic.end9975, label %logic.rhs9974 +logic.rhs9974: + %t162 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t162, ptr %a163 + store { ptr, i64, i64 } { ptr @.str.6727, i64 5, i64 0 }, ptr %a165 + %t166 = call i32 @finch_str_starts(ptr %a163, ptr %a165) + %t167 = icmp ne i32 %t166, 0 + br label %logic.rend9976 +logic.rend9976: + br label %logic.end9975 +logic.end9975: + %t168 = phi i1 [ true, %logic.from9973 ], [ %t167, %logic.rend9976 ] + store i1 %t168, ptr %a169 + %t170 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t170, ptr %a171 + store { ptr, i64, i64 } { ptr @.str.6729, i64 5, i64 0 }, ptr %a173 + %t174 = call i64 @finch_str_find(ptr %a171, ptr %a173) + %t175 = icmp sge i64 %t174, 0 + br label %logic.from9977 +logic.from9977: + br i1 %t175, label %logic.end9979, label %logic.rhs9978 +logic.rhs9978: + %t176 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t176, ptr %a177 + store { ptr, i64, i64 } { ptr @.str.6731, i64 6, i64 0 }, ptr %a179 + %t180 = call i64 @finch_str_find(ptr %a177, ptr %a179) + %t181 = icmp sge i64 %t180, 0 + br label %logic.rend9980 +logic.rend9980: + br label %logic.end9979 +logic.end9979: + %t182 = phi i1 [ true, %logic.from9977 ], [ %t181, %logic.rend9980 ] + store i1 %t182, ptr %a183 + %t184 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t184, ptr %a185 + store { ptr, i64, i64 } { ptr @.str.6733, i64 7, i64 0 }, ptr %a187 + %t188 = call i64 @finch_str_find(ptr %a185, ptr %a187) + %t189 = icmp sge i64 %t188, 0 + br label %logic.from9981 +logic.from9981: + br i1 %t189, label %logic.end9983, label %logic.rhs9982 +logic.rhs9982: + %t190 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t190, ptr %a191 + store { ptr, i64, i64 } { ptr @.str.6735, i64 5, i64 0 }, ptr %a193 + %t194 = call i64 @finch_str_find(ptr %a191, ptr %a193) + %t195 = icmp sge i64 %t194, 0 + br label %logic.rend9984 +logic.rend9984: + br label %logic.end9983 +logic.end9983: + %t196 = phi i1 [ true, %logic.from9981 ], [ %t195, %logic.rend9984 ] + br label %logic.from9985 +logic.from9985: + br i1 %t196, label %logic.end9987, label %logic.rhs9986 +logic.rhs9986: + %t197 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t197, ptr %a198 + store { ptr, i64, i64 } { ptr @.str.6737, i64 4, i64 0 }, ptr %a200 + %t201 = call i64 @finch_str_find(ptr %a198, ptr %a200) + %t202 = icmp sge i64 %t201, 0 + br label %logic.rend9988 +logic.rend9988: + br label %logic.end9987 +logic.end9987: + %t203 = phi i1 [ true, %logic.from9985 ], [ %t202, %logic.rend9988 ] + store i1 %t203, ptr %a204 + %t205 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t206 = load i1, ptr %t205 + %t207 = load i1, ptr %a204 + %t208 = icmp ne i1 %t206, %t207 + br label %logic.from9989 +logic.from9989: + br i1 %t208, label %logic.end9991, label %logic.rhs9990 +logic.rhs9990: + %t209 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t210 = load i1, ptr %t209 + %t211 = load i1, ptr %a183 + %t212 = icmp ne i1 %t210, %t211 + br label %logic.rend9992 +logic.rend9992: + br label %logic.end9991 +logic.end9991: + %t213 = phi i1 [ true, %logic.from9989 ], [ %t212, %logic.rend9992 ] + br label %logic.from9993 +logic.from9993: + br i1 %t213, label %logic.end9995, label %logic.rhs9994 +logic.rhs9994: + %t214 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t215 = load i1, ptr %t214 + %t216 = load i1, ptr %a169 + %t217 = icmp ne i1 %t215, %t216 + br label %logic.rend9996 +logic.rend9996: + br label %logic.end9995 +logic.end9995: + %t218 = phi i1 [ true, %logic.from9993 ], [ %t217, %logic.rend9996 ] + %t219 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + store i1 %t218, ptr %t219 + %t220 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t221 = load { ptr, i64, i64 }, ptr %t220 + store { ptr, i64, i64 } { ptr @.str.6738, i64 0, i64 0 }, ptr %t220 + store { ptr, i64, i64 } %t221, ptr %a222 + call void @finch_str_drop(ptr %a222) + %t223 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t224 = load i1, ptr %t223 + br i1 %t224, label %then9997, label %endif9999 +then9997: + %t225 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 6 + %t226 = load { ptr, i64, i64 }, ptr %t225 + store { ptr, i64, i64 } { ptr @.str.6739, i64 4, i64 0 }, ptr %t225 + store { ptr, i64, i64 } %t226, ptr %a227 + call void @finch_str_drop(ptr %a227) + br label %endif9999 +endif9999: + %t228 = extractvalue { ptr, i64, i64 } { ptr @.str.6740, i64 8, i64 0 }, 0 + %t229 = icmp eq ptr %t228, null + %t230 = select i1 %t229, ptr @.str.6741, ptr %t228 + %t231 = call ptr @getenv(ptr %t230) + store { ptr, i64, i64 } zeroinitializer, ptr %a232 + call void @finch_str_from_c(ptr %a232, ptr %t231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } %t233, ptr %a234 + call void @finch_str_copy(ptr %a235, ptr %a234) + %t236 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t236, ptr %a237 + %t238 = getelementptr inbounds { ptr, i64, i64 }, ptr %a237, i32 0, i32 1 + %t239 = load i64, ptr %t238 + %t240 = icmp sgt i64 %t239, 0 + br i1 %t240, label %then10000, label %else10001 +then10000: + %t241 = load { ptr, i64, i64 }, ptr %a237 + %t242 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + store { ptr, i64, i64 } %t241, ptr %a243 + call void @finch_str_copy(ptr %a244, ptr %a243) + %t245 = load { ptr, i64, i64 }, ptr %a244 + %t246 = load { ptr, i64, i64 }, ptr %t242 + store { ptr, i64, i64 } %t245, ptr %t242 + store { ptr, i64, i64 } %t246, ptr %a247 + call void @finch_str_drop(ptr %a247) + br label %endif10002 +else10001: + %t248 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t249 = load i1, ptr %t248 + br label %logic.from10003 +logic.from10003: + br i1 %t249, label %logic.rhs10004, label %logic.end10005 +logic.rhs10004: + %t250 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t251 = load i1, ptr %t250 + br label %logic.rend10006 +logic.rend10006: + br label %logic.end10005 +logic.end10005: + %t252 = phi i1 [ false, %logic.from10003 ], [ %t251, %logic.rend10006 ] + br i1 %t252, label %then10007, label %else10008 +then10007: + %t253 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t254 = load { ptr, i64, i64 }, ptr %t253 + store { ptr, i64, i64 } { ptr @.str.6742, i64 22, i64 0 }, ptr %t253 + store { ptr, i64, i64 } %t254, ptr %a255 + call void @finch_str_drop(ptr %a255) + br label %endif10009 +else10008: + %t256 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t257 = load i1, ptr %t256 + br label %logic.from10010 +logic.from10010: + br i1 %t257, label %logic.rhs10011, label %logic.end10012 +logic.rhs10011: + %t258 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t259 = load i1, ptr %t258 + br label %logic.rend10013 +logic.rend10013: + br label %logic.end10012 +logic.end10012: + %t260 = phi i1 [ false, %logic.from10010 ], [ %t259, %logic.rend10013 ] + br label %logic.from10014 +logic.from10014: + br i1 %t260, label %logic.rhs10015, label %logic.end10016 +logic.rhs10015: + %t261 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t262 = load i1, ptr %t261 + %t263 = xor i1 %t262, true + br label %logic.rend10017 +logic.rend10017: + br label %logic.end10016 +logic.end10016: + %t264 = phi i1 [ false, %logic.from10014 ], [ %t263, %logic.rend10017 ] + br i1 %t264, label %then10018, label %else10019 +then10018: + %t265 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t266 = load { ptr, i64, i64 }, ptr %t265 + store { ptr, i64, i64 } { ptr @.str.6743, i64 21, i64 0 }, ptr %t265 + store { ptr, i64, i64 } %t266, ptr %a267 + call void @finch_str_drop(ptr %a267) + br label %endif10020 +else10019: + %t268 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t269 = load i1, ptr %t268 + br i1 %t269, label %then10021, label %else10022 +then10021: + %t270 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6744, i64 15, i64 0 }, ptr %a272 + store { ptr, i64, i64 } %t270, ptr %a273 + call void @finch_str_concat(ptr %a271, ptr %a272, ptr %a273) + %t274 = load { ptr, i64, i64 }, ptr %a271 + %t275 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t276 = load { ptr, i64, i64 }, ptr %t275 + store { ptr, i64, i64 } %t274, ptr %t275 + store { ptr, i64, i64 } %t276, ptr %a277 + call void @finch_str_drop(ptr %a277) + br label %endif10023 +else10022: + %t278 = call { ptr, i64, i64 } @finch.host.pathSeparator() + store { ptr, i64, i64 } %t278, ptr %a279 + store { ptr, i64, i64 } { ptr @.str.6745, i64 1, i64 0 }, ptr %a280 + %t281 = call i32 @finch_str_eq(ptr %a279, ptr %a280) + %t282 = icmp ne i32 %t281, 0 + store { ptr, i64, i64 } %t278, ptr %a283 + call void @finch_str_drop(ptr %a283) + br i1 %t282, label %then10024, label %else10025 +then10024: + %t284 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t285 = load { ptr, i64, i64 }, ptr %t284 + store { ptr, i64, i64 } { ptr @.str.6746, i64 5, i64 0 }, ptr %t284 + store { ptr, i64, i64 } %t285, ptr %a286 + call void @finch_str_drop(ptr %a286) + br label %endif10026 +else10025: + %t287 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 7 + %t288 = load { ptr, i64, i64 }, ptr %t287 + store { ptr, i64, i64 } { ptr @.str.6747, i64 2, i64 0 }, ptr %t287 + store { ptr, i64, i64 } %t288, ptr %a289 + call void @finch_str_drop(ptr %a289) + br label %endif10026 +endif10026: + br label %endif10023 +endif10023: + br label %endif10020 +endif10020: + br label %endif10009 +endif10009: + br label %endif10002 +endif10002: + %t290 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t291 = load i1, ptr %t290 + br label %logic.from10027 +logic.from10027: + br i1 %t291, label %logic.rhs10028, label %logic.end10029 +logic.rhs10028: + %t292 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 1 + %t293 = load i1, ptr %t292 + br label %logic.rend10030 +logic.rend10030: + br label %logic.end10029 +logic.end10029: + %t294 = phi i1 [ false, %logic.from10027 ], [ %t293, %logic.rend10030 ] + br i1 %t294, label %then10031, label %else10032 +then10031: + %t295 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } { ptr @.str.6748, i64 5, i64 0 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + call void @finch_str_drop(ptr %a297) + br label %endif10033 +else10032: + %t298 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 5 + %t299 = load i1, ptr %t298 + br label %logic.from10034 +logic.from10034: + br i1 %t299, label %logic.rhs10035, label %logic.end10036 +logic.rhs10035: + %t300 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 4 + %t301 = load i1, ptr %t300 + br label %logic.rend10037 +logic.rend10037: + br label %logic.end10036 +logic.end10036: + %t302 = phi i1 [ false, %logic.from10034 ], [ %t301, %logic.rend10037 ] + br label %logic.from10038 +logic.from10038: + br i1 %t302, label %logic.rhs10039, label %logic.end10040 +logic.rhs10039: + %t303 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 3 + %t304 = load i1, ptr %t303 + %t305 = xor i1 %t304, true + br label %logic.rend10041 +logic.rend10041: + br label %logic.end10040 +logic.end10040: + %t306 = phi i1 [ false, %logic.from10038 ], [ %t305, %logic.rend10041 ] + br i1 %t306, label %then10042, label %endif10044 +then10042: + %t307 = getelementptr inbounds %S.platform.Target, ptr %a85, i32 0, i32 8 + %t308 = load { ptr, i64, i64 }, ptr %t307 + store { ptr, i64, i64 } { ptr @.str.6749, i64 13, i64 0 }, ptr %t307 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10044 +endif10044: + br label %endif10033 +endif10033: + %t310 = load %S.platform.Target, ptr %a85 + call void @finch_str_drop(ptr %a237) + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a3) + ret %S.platform.Target %t310 +} + +define internal i1 @finch.platform.charIsSigned(%S.platform.Target %p0) { +entry: + %a1 = alloca %S.platform.Target, align 16 + store %S.platform.Target %p0, ptr %a1 + %t2 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 4 + %t3 = load i1, ptr %t2 + %t4 = xor i1 %t3, true + br label %logic.from10045 +logic.from10045: + br i1 %t4, label %logic.end10047, label %logic.rhs10046 +logic.rhs10046: + %t5 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 3 + %t6 = load i1, ptr %t5 + br label %logic.rend10048 +logic.rend10048: + br label %logic.end10047 +logic.end10047: + %t7 = phi i1 [ true, %logic.from10045 ], [ %t6, %logic.rend10048 ] + br label %logic.from10049 +logic.from10049: + br i1 %t7, label %logic.end10051, label %logic.rhs10050 +logic.rhs10050: + %t8 = getelementptr inbounds %S.platform.Target, ptr %a1, i32 0, i32 1 + %t9 = load i1, ptr %t8 + br label %logic.rend10052 +logic.rend10052: + br label %logic.end10051 +logic.end10051: + %t10 = phi i1 [ true, %logic.from10049 ], [ %t9, %logic.rend10052 ] + ret i1 %t10 +} + +define internal { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i32, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca i8, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i32 2166136261, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond10053 +each.cond10053: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body10054, label %each.end10056 +each.body10054: + %t8 = load ptr, ptr %a1 + %t9 = getelementptr inbounds i8, ptr %t8, i64 %t6 + %t10 = load i8, ptr %t9 + store i8 %t10, ptr %a11 + %t12 = load i32, ptr %a2 + %t13 = load i8, ptr %a11 + %t14 = zext i8 %t13 to i32 + %t15 = xor i32 %t12, %t14 + %t16 = mul i32 %t15, 16777619 + store i32 %t16, ptr %a2 + br label %each.step10055 +each.step10055: + %t17 = load i64, ptr %a3 + %t18 = add i64 %t17, 1 + store i64 %t18, ptr %a3 + br label %each.cond10053 +each.end10056: + store { ptr, i64, i64 } { ptr @.str.6750, i64 16, i64 0 }, ptr %a19 + store { ptr, i64, i64 } zeroinitializer, ptr %a20 + store i64 0, ptr %a21 + br label %for.cond10057 +for.cond10057: + %t22 = load i64, ptr %a21 + %t23 = icmp slt i64 %t22, 8 + br i1 %t23, label %for.body10058, label %for.end10060 +for.body10058: + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + %t25 = load i32, ptr %a2 + %t26 = load i64, ptr %a21 + %t27 = mul i64 4, %t26 + %t28 = sub i64 28, %t27 + %t29 = trunc i64 %t28 to i32 + %t30 = lshr i32 %t25, %t29 + %t31 = and i32 %t30, 15 + %t32 = zext i32 %t31 to i64 + %t33 = load { ptr, i64, i64 }, ptr %a19 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range10061, label %inrange10062 +range10061: + call void @finch_panic_index(ptr @.str.6751, i64 16, i64 %t32, i64 %t34) + unreachable +inrange10062: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 + %t38 = load i8, ptr %t37 + call void @finch_str_from_char(ptr %a39, i8 signext %t38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + %t41 = load i64, ptr %t24 + %t42 = add i64 %t41, 1 + call void @finch_arr_reserve(ptr %a20, i64 %t42, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t43 = load ptr, ptr %a20 + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %t43, i64 %t41 + store { ptr, i64, i64 } %t40, ptr %t44 + store i64 %t42, ptr %t24 + br label %for.step10059 +for.step10059: + %t45 = load i64, ptr %a21 + %t46 = add i64 %t45, 1 + store i64 %t46, ptr %a21 + br label %for.cond10057 +for.end10060: + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %a20, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6752, i64 0, i64 0 }, ptr %a48 + call void @finch_str_join(ptr %a49, ptr %a20, ptr %a48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + call void @finch.drop.arr_str(ptr %a20) + call void @finch_str_drop(ptr %a19) + ret { ptr, i64, i64 } %t50 +} + +define internal { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t2) + ret { ptr, i64, i64 } %t3 +} + +define internal { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %p0, %S.platform.Target %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.platform.Target, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca i64, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.platform.Target %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6754, i64 10, i64 0 }, ptr %a6 + %t7 = call i32 @finch_str_ends(ptr %a4, ptr %a6) + %t8 = icmp ne i32 %t7, 0 + br i1 %t8, label %then10063, label %endif10065 +then10063: + %t9 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t9, ptr %a10 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = sub i64 %t13, 10 + call void @finch_str_sub(ptr %a11, ptr %a10, i64 0, i64 %t14, ptr @.str.6756, i64 28) + %t15 = load { ptr, i64, i64 }, ptr %a11 + %t16 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t15) + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_drop(ptr %a17) + store { ptr, i64, i64 } { ptr @.str.6755, i64 11, i64 0 }, ptr %a19 + store { ptr, i64, i64 } %t16, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t16, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + ret { ptr, i64, i64 } %t22 +endif10065: + %t23 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 + %t24 = load i1, ptr %t23 + %t25 = xor i1 %t24, true + br i1 %t25, label %then10066, label %endif10068 +then10066: + %t26 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t26, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.6757, i64 17, i64 0 }, ptr %a29 + call void @finch_str_concat(ptr %a27, ptr %a28, ptr %a29) + store { ptr, i64, i64 } %t26, ptr %a30 + call void @finch_str_drop(ptr %a30) + %t31 = load { ptr, i64, i64 }, ptr %a27 + %t32 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a33, i64 %t32) + %t34 = load { ptr, i64, i64 }, ptr %a33 + store { ptr, i64, i64 } %t31, ptr %a36 + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + store { ptr, i64, i64 } %t31, ptr %a38 + call void @finch_str_drop(ptr %a38) + store { ptr, i64, i64 } %t34, ptr %a39 + call void @finch_str_drop(ptr %a39) + %t40 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t40, ptr %a42 + store { ptr, i64, i64 } { ptr @.str.6758, i64 4, i64 0 }, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t45, ptr %a46 + %t47 = load { ptr, i64, i64 }, ptr %a1 + %t48 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t47) + store { ptr, i64, i64 } { ptr @.str.6759, i64 18, i64 0 }, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t48, ptr %a52 + call void @finch_str_drop(ptr %a52) + %t53 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t53, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.6760, i64 3, i64 0 }, ptr %a56 + call void @finch_str_concat(ptr %a54, ptr %a55, ptr %a56) + store { ptr, i64, i64 } %t53, ptr %a57 + call void @finch_str_drop(ptr %a57) + %t58 = load { ptr, i64, i64 }, ptr %a54 + %t59 = load { ptr, i64, i64 }, ptr %a46 + %t60 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t59) + store { ptr, i64, i64 } %t58, ptr %a62 + store { ptr, i64, i64 } %t60, ptr %a63 + call void @finch_str_concat(ptr %a61, ptr %a62, ptr %a63) + store { ptr, i64, i64 } %t58, ptr %a64 + call void @finch_str_drop(ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a61 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.6761, i64 4, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = call { ptr, i64, i64 } @finch.host.nullDevice() + store { ptr, i64, i64 } %t71, ptr %a74 + store { ptr, i64, i64 } %t72, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + store { ptr, i64, i64 } %t71, ptr %a76 + call void @finch_str_drop(ptr %a76) + store { ptr, i64, i64 } %t72, ptr %a77 + call void @finch_str_drop(ptr %a77) + %t78 = load { ptr, i64, i64 }, ptr %a73 + %t79 = call i64 @finch.host.run({ ptr, i64, i64 } %t78) + store { ptr, i64, i64 } %t78, ptr %a80 + call void @finch_str_drop(ptr %a80) + store i64 %t79, ptr %a81 + %t82 = load i64, ptr %a81 + %t83 = icmp eq i64 %t82, 0 + br label %logic.from10069 +logic.from10069: + br i1 %t83, label %logic.rhs10070, label %logic.end10071 +logic.rhs10070: + %t84 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t84, ptr %a85 + %t86 = call i32 @finch_file_exists(ptr %a85) + %t87 = icmp ne i32 %t86, 0 + br label %logic.rend10072 +logic.rend10072: + br label %logic.end10071 +logic.end10071: + %t88 = phi i1 [ false, %logic.from10069 ], [ %t87, %logic.rend10072 ] + br i1 %t88, label %then10073, label %endif10075 +then10073: + %t89 = load { ptr, i64, i64 }, ptr %a46 + store { ptr, i64, i64 } %t89, ptr %a90 + store { ptr, i64, i64 } zeroinitializer, ptr %a91 + store { ptr, i64, i64 } zeroinitializer, ptr %a92 + %t93 = call i32 @finch_try_read_file(ptr %a91, ptr %a90, ptr %a92) + %t94 = icmp eq i32 %t93, 0 + %t95 = load { ptr, i64, i64 }, ptr %a92 + %t96 = load { ptr, i64, i64 }, ptr %a91 + br i1 %t94, label %or.failed10076, label %or.ok10077 +or.failed10076: + store { ptr, i64, i64 } %t95, ptr %a97 + call void @finch_str_drop(ptr %a97) + br label %or.bend10078 +or.bend10078: + br label %or.end10079 +or.ok10077: + br label %or.end10079 +or.end10079: + %t98 = phi { ptr, i64, i64 } [ { ptr @.str.6762, i64 0, i64 0 }, %or.bend10078 ], [ %t96, %or.ok10077 ] + store { ptr, i64, i64 } %t98, ptr %a99 + call void @finch_str_trim(ptr %a100, ptr %a99) + %t101 = load { ptr, i64, i64 }, ptr %a100 + store { ptr, i64, i64 } %t98, ptr %a102 + call void @finch_str_drop(ptr %a102) + store { ptr, i64, i64 } %t101, ptr %a103 + %t104 = load { ptr, i64, i64 }, ptr %a46 + call void @finch.host.remove({ ptr, i64, i64 } %t104) + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %a103, i32 0, i32 1 + %t106 = load i64, ptr %t105 + %t107 = icmp sgt i64 %t106, 0 + br i1 %t107, label %then10080, label %endif10082 +then10080: + %t108 = load { ptr, i64, i64 }, ptr %a103 + call void @finch_str_drop(ptr %a46) + ret { ptr, i64, i64 } %t108 +endif10082: + call void @finch_str_drop(ptr %a103) + br label %endif10075 +endif10075: + call void @finch_str_drop(ptr %a46) + br label %endif10068 +endif10068: + %t109 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6764, i64 2, i64 0 }, ptr %a111 + store { ptr, i64, i64 } %t109, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a110 + %t114 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t113) + store { ptr, i64, i64 } %t113, ptr %a115 + call void @finch_str_drop(ptr %a115) + ret { ptr, i64, i64 } %t114 +} + +define internal { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca i64, align 16 + %a35 = alloca i64, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6766, i64 1, i64 0 }, ptr %a10 + %t11 = call i64 @finch_str_find(ptr %a8, ptr %a10) + store i64 %t11, ptr %a12 + br label %while.cond10083 +while.cond10083: + %t13 = load i64, ptr %a12 + %t14 = icmp sge i64 %t13, 0 + br i1 %t14, label %while.body10084, label %while.end10085 +while.body10084: + %t15 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t15, ptr %a16 + %t18 = load i64, ptr %a12 + %t19 = add i64 %t18, 1 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t21 = load i64, ptr %t20 + call void @finch_str_sub(ptr %a17, ptr %a16, i64 %t19, i64 %t21, ptr @.str.6767, i64 49) + %t22 = load { ptr, i64, i64 }, ptr %a17 + %t23 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t22, ptr %a6 + store { ptr, i64, i64 } %t23, ptr %a24 + call void @finch_str_drop(ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.6769, i64 1, i64 0 }, ptr %a28 + %t29 = call i64 @finch_str_find(ptr %a26, ptr %a28) + store i64 %t29, ptr %a12 + br label %while.cond10083 +while.end10085: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t31 = load i64, ptr %t30 + store i64 %t31, ptr %a32 + %t33 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t34 = load i64, ptr %t33 + store i64 0, ptr %a35 + br label %for.cond10086 +for.cond10086: + %t36 = load i64, ptr %a35 + %t37 = icmp slt i64 %t36, %t34 + br i1 %t37, label %for.body10087, label %for.end10089 +for.body10087: + %t38 = load i64, ptr %a35 + %t39 = load { ptr, i64, i64 }, ptr %a6 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range10090, label %inrange10091 +range10090: + call void @finch_panic_index(ptr @.str.6770, i64 54, i64 %t38, i64 %t40) + unreachable +inrange10091: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 + %t44 = load i8, ptr %t43 + %t45 = icmp eq i8 %t44, 46 + br i1 %t45, label %then10092, label %endif10094 +then10092: + %t46 = load i64, ptr %a35 + store i64 %t46, ptr %a32 + br label %endif10094 +endif10094: + br label %for.step10088 +for.step10088: + %t47 = load i64, ptr %a35 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a35 + br label %for.cond10086 +for.end10089: + %t49 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t49, ptr %a50 + %t52 = load i64, ptr %a32 + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6771, i64 58) + %t53 = load { ptr, i64, i64 }, ptr %a51 + %t54 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t53, ptr %a6 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_drop(ptr %a55) + br label %while.cond10095 +while.cond10095: + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t57 = load i64, ptr %t56 + %t58 = icmp sgt i64 %t57, 0 + br label %logic.from10098 +logic.from10098: + br i1 %t58, label %logic.rhs10099, label %logic.end10100 +logic.rhs10099: + %t59 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t60 = load i64, ptr %t59 + %t61 = sub i64 %t60, 1 + %t62 = load { ptr, i64, i64 }, ptr %a6 + %t63 = extractvalue { ptr, i64, i64 } %t62, 1 + %t64 = icmp uge i64 %t61, %t63 + br i1 %t64, label %range10101, label %inrange10102 +range10101: + call void @finch_panic_index(ptr @.str.6772, i64 59, i64 %t61, i64 %t63) + unreachable +inrange10102: + %t65 = extractvalue { ptr, i64, i64 } %t62, 0 + %t66 = getelementptr inbounds i8, ptr %t65, i64 %t61 + %t67 = load i8, ptr %t66 + %t68 = icmp uge i8 %t67, 48 + br label %logic.rend10103 +logic.rend10103: + br label %logic.end10100 +logic.end10100: + %t69 = phi i1 [ false, %logic.from10098 ], [ %t68, %logic.rend10103 ] + br label %logic.from10104 +logic.from10104: + br i1 %t69, label %logic.rhs10105, label %logic.end10106 +logic.rhs10105: + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t71 = load i64, ptr %t70 + %t72 = sub i64 %t71, 1 + %t73 = load { ptr, i64, i64 }, ptr %a6 + %t74 = extractvalue { ptr, i64, i64 } %t73, 1 + %t75 = icmp uge i64 %t72, %t74 + br i1 %t75, label %range10107, label %inrange10108 +range10107: + call void @finch_panic_index(ptr @.str.6773, i64 59, i64 %t72, i64 %t74) + unreachable +inrange10108: + %t76 = extractvalue { ptr, i64, i64 } %t73, 0 + %t77 = getelementptr inbounds i8, ptr %t76, i64 %t72 + %t78 = load i8, ptr %t77 + %t79 = icmp ule i8 %t78, 57 + br label %logic.rend10109 +logic.rend10109: + br label %logic.end10106 +logic.end10106: + %t80 = phi i1 [ false, %logic.from10104 ], [ %t79, %logic.rend10109 ] + br i1 %t80, label %while.body10096, label %while.end10097 +while.body10096: + %t81 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t81, ptr %a82 + %t84 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t85 = load i64, ptr %t84 + %t86 = sub i64 %t85, 1 + call void @finch_str_sub(ptr %a83, ptr %a82, i64 0, i64 %t86, ptr @.str.6774, i64 60) + %t87 = load { ptr, i64, i64 }, ptr %a83 + %t88 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t87, ptr %a6 + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_drop(ptr %a89) + br label %while.cond10095 +while.end10097: + %t90 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t90, ptr %a91 + call void @finch_str_lower(ptr %a92, ptr %a91) + %t93 = load { ptr, i64, i64 }, ptr %a92 + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t93 +} + +define internal void @finch.linker.Names.add(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = icmp sgt i64 %t3, 0 + br label %logic.from10110 +logic.from10110: + br i1 %t4, label %logic.rhs10111, label %logic.end10112 +logic.rhs10111: + %t5 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a8 + %t9 = load i64, ptr %t6 + %t10 = load ptr, ptr %t5 + store i64 0, ptr %a11 + br label %find.cond10113 +find.cond10113: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t9 + br i1 %t13, label %find.body10114, label %find.end10117 +find.body10114: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } %t7, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %find.hit10115, label %find.next10116 +find.hit10115: + store i64 %t12, ptr %a8 + br label %find.end10117 +find.next10116: + %t20 = add i64 %t12, 1 + store i64 %t20, ptr %a11 + br label %find.cond10113 +find.end10117: + %t21 = load i64, ptr %a8 + %t22 = icmp sge i64 %t21, 0 + %t23 = xor i1 %t22, true + br label %logic.rend10118 +logic.rend10118: + br label %logic.end10112 +logic.end10112: + %t24 = phi i1 [ false, %logic.from10110 ], [ %t23, %logic.rend10118 ] + br i1 %t24, label %then10119, label %endif10121 +then10119: + %t25 = getelementptr inbounds %S.linker.Names, ptr %self, i32 0, i32 0 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i32 0, i32 1 + %t27 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_copy(ptr %a29, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + %t31 = load i64, ptr %t26 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %t25, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %t25 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } %t30, ptr %t34 + store i64 %t32, ptr %t26 + br label %endif10121 +endif10121: + ret void +} + +define internal { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + %t7 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t7, ptr %a8 + %t9 = call i64 @finch_str_find(ptr %a5, ptr %a8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br i1 %t12, label %then10122, label %endif10124 +then10122: + ret { ptr, i64, i64 } { ptr @.str.6777, i64 0, i64 0 } +endif10124: + %t13 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t13, ptr %a14 + %t16 = load i64, ptr %a10 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = add i64 %t16, %t18 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t21 = load i64, ptr %t20 + call void @finch_str_sub(ptr %a15, ptr %a14, i64 %t19, i64 %t21, ptr @.str.6778, i64 81) + %t22 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t22, ptr %a23 + store i64 0, ptr %a24 + br label %while.cond10125 +while.cond10125: + %t25 = load i64, ptr %a24 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %a23, i32 0, i32 1 + %t27 = load i64, ptr %t26 + %t28 = icmp slt i64 %t25, %t27 + br label %logic.from10128 +logic.from10128: + br i1 %t28, label %logic.rhs10129, label %logic.end10130 +logic.rhs10129: + %t29 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t29, ptr %a30 + %t32 = load i64, ptr %a24 + %t33 = load { ptr, i64, i64 }, ptr %a23 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range10131, label %inrange10132 +range10131: + call void @finch_panic_index(ptr @.str.6780, i64 83, i64 %t32, i64 %t34) + unreachable +inrange10132: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 + %t38 = load i8, ptr %t37 + call void @finch_str_from_char(ptr %a39, i8 signext %t38) + %t40 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t40, ptr %a41 + %t42 = call i64 @finch_str_find(ptr %a30, ptr %a41) + %t43 = icmp sge i64 %t42, 0 + store { ptr, i64, i64 } %t40, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = xor i1 %t43, true + br label %logic.rend10133 +logic.rend10133: + br label %logic.end10130 +logic.end10130: + %t46 = phi i1 [ false, %logic.from10128 ], [ %t45, %logic.rend10133 ] + br i1 %t46, label %while.body10126, label %while.end10127 +while.body10126: + %t47 = load i64, ptr %a24 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a24 + br label %while.cond10125 +while.end10127: + %t49 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t49, ptr %a50 + %t52 = load i64, ptr %a24 + call void @finch_str_sub(ptr %a51, ptr %a50, i64 0, i64 %t52, ptr @.str.6781, i64 86) + %t53 = load { ptr, i64, i64 }, ptr %a51 + call void @finch_str_drop(ptr %a23) + ret { ptr, i64, i64 } %t53 +} + +define internal void @finch.drop.S_linker_Names(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.linker.Names, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + ret void +} + +define internal void @finch.drop.arr_S_linker_Names(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10237 +n.cond10237: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10238, label %n.end10239 +n.body10238: + %t7 = getelementptr inbounds %S.linker.Names, ptr %t1, i64 %t5 + call void @finch.drop.S_linker_Names(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10237 +n.end10239: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal i64 @finch.linker.linkFailed({ ptr, i64, i64 } %p0, %S.cimport.CImports %p1, %S.platform.Target %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.cimport.CImports, align 16 + %a3 = alloca %S.platform.Target, align 16 + %a4 = alloca %S.linker.Names, align 16 + %a5 = alloca %S.linker.Names, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca i64, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a66 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a104 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca i64, align 16 + %a176 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a197 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca i64, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a212 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca i64, align 16 + %a238 = alloca i64, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca i64, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca i64, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a292 = alloca { ptr, i64, i64 }, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca i64, align 16 + %a311 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a347 = alloca { ptr, i64, i64 }, align 16 + %a350 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a371 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a382 = alloca { ptr, i64, i64 }, align 16 + %a384 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a390 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a395 = alloca { ptr, i64, i64 }, align 16 + %a396 = alloca { ptr, i64, i64 }, align 16 + %a397 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a408 = alloca { ptr, i64, i64 }, align 16 + %a409 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a412 = alloca { ptr, i64, i64 }, align 16 + %a413 = alloca { ptr, i64, i64 }, align 16 + %a414 = alloca { ptr, i64, i64 }, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a423 = alloca { ptr, i64, i64 }, align 16 + %a454 = alloca { ptr, i64, i64 }, align 16 + %a455 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a460 = alloca { ptr, i64, i64 }, align 16 + %a461 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a470 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.cimport.CImports %p1, ptr %a2 + store %S.platform.Target %p2, ptr %a3 + store %S.linker.Names zeroinitializer, ptr %a4 + store %S.linker.Names zeroinitializer, ptr %a5 + %t6 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t6, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.6783, i64 1, i64 0 }, ptr %a9 + call void @finch_str_split(ptr %a10, ptr %a7, ptr %a9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + store { ptr, i64, i64 } %t11, ptr %a12 + store i64 0, ptr %a13 + br label %each.cond10134 +each.cond10134: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a12, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = load i64, ptr %a13 + %t17 = icmp slt i64 %t16, %t15 + br i1 %t17, label %each.body10135, label %each.end10137 +each.body10135: + %t18 = load ptr, ptr %a12 + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %t18, i64 %t16 + %t20 = load { ptr, i64, i64 }, ptr %t19 + store { ptr, i64, i64 } %t20, ptr %a21 + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_trim(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t27, ptr %a28 + store { ptr, i64, i64 } { ptr @.str.6786, i64 24, i64 0 }, ptr %a30 + %t31 = call i64 @finch_str_find(ptr %a28, ptr %a30) + %t32 = icmp sge i64 %t31, 0 + br i1 %t32, label %then10138, label %else10139 +then10138: + %t33 = load { ptr, i64, i64 }, ptr %a26 + %t34 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t33, { ptr, i64, i64 } { ptr @.str.6787, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6788, i64 1, i64 0 }) + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t34) + store { ptr, i64, i64 } %t34, ptr %a35 + call void @finch_str_drop(ptr %a35) + br label %endif10140 +else10139: + %t36 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t36, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.6790, i64 18, i64 0 }, ptr %a39 + %t40 = call i64 @finch_str_find(ptr %a37, ptr %a39) + %t41 = icmp sge i64 %t40, 0 + br i1 %t41, label %then10141, label %else10142 +then10141: + %t42 = load { ptr, i64, i64 }, ptr %a26 + %t43 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t42, { ptr, i64, i64 } { ptr @.str.6791, i64 18, i64 0 }, { ptr, i64, i64 } { ptr @.str.6792, i64 2, i64 0 }) + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t43) + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_drop(ptr %a44) + br label %endif10143 +else10142: + %t45 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t45, ptr %a46 + store { ptr, i64, i64 } { ptr @.str.6794, i64 27, i64 0 }, ptr %a48 + %t49 = call i64 @finch_str_find(ptr %a46, ptr %a48) + %t50 = icmp sge i64 %t49, 0 + br i1 %t50, label %then10144, label %else10145 +then10144: + %t51 = load { ptr, i64, i64 }, ptr %a26 + %t52 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t51, { ptr, i64, i64 } { ptr @.str.6795, i64 27, i64 0 }, { ptr, i64, i64 } { ptr @.str.6796, i64 3, i64 0 }) + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t52) + store { ptr, i64, i64 } %t52, ptr %a53 + call void @finch_str_drop(ptr %a53) + br label %endif10146 +else10145: + %t54 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t54, ptr %a55 + store { ptr, i64, i64 } { ptr @.str.6798, i64 14, i64 0 }, ptr %a57 + %t58 = call i64 @finch_str_find(ptr %a55, ptr %a57) + %t59 = icmp sge i64 %t58, 0 + br i1 %t59, label %then10147, label %else10148 +then10147: + %t60 = load { ptr, i64, i64 }, ptr %a26 + %t61 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t60, { ptr, i64, i64 } { ptr @.str.6799, i64 14, i64 0 }, { ptr, i64, i64 } { ptr @.str.6800, i64 4, i64 0 }) + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t61) + store { ptr, i64, i64 } %t61, ptr %a62 + call void @finch_str_drop(ptr %a62) + br label %endif10149 +else10148: + %t63 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t63, ptr %a64 + store { ptr, i64, i64 } { ptr @.str.6802, i64 24, i64 0 }, ptr %a66 + %t67 = call i64 @finch_str_find(ptr %a64, ptr %a66) + %t68 = icmp sge i64 %t67, 0 + br i1 %t68, label %then10150, label %else10151 +then10150: + %t69 = load { ptr, i64, i64 }, ptr %a26 + %t70 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t69, { ptr, i64, i64 } { ptr @.str.6803, i64 24, i64 0 }, { ptr, i64, i64 } { ptr @.str.6804, i64 4, i64 0 }) + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t70) + store { ptr, i64, i64 } %t70, ptr %a71 + call void @finch_str_drop(ptr %a71) + br label %endif10152 +else10151: + %t72 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t72, ptr %a73 + store { ptr, i64, i64 } { ptr @.str.6806, i64 13, i64 0 }, ptr %a75 + %t76 = call i64 @finch_str_find(ptr %a73, ptr %a75) + %t77 = icmp sge i64 %t76, 0 + br i1 %t77, label %then10153, label %else10154 +then10153: + %t78 = load { ptr, i64, i64 }, ptr %a26 + %t79 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t78, { ptr, i64, i64 } { ptr @.str.6807, i64 13, i64 0 }, { ptr, i64, i64 } { ptr @.str.6808, i64 1, i64 0 }) + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t79) + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif10155 +else10154: + %t81 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t81, ptr %a82 + store { ptr, i64, i64 } { ptr @.str.6810, i64 11, i64 0 }, ptr %a84 + %t85 = call i64 @finch_str_find(ptr %a82, ptr %a84) + %t86 = icmp sge i64 %t85, 0 + br label %logic.from10156 +logic.from10156: + br i1 %t86, label %logic.rhs10157, label %logic.end10158 +logic.rhs10157: + %t87 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t87, ptr %a88 + store { ptr, i64, i64 } { ptr @.str.6812, i64 9, i64 0 }, ptr %a90 + %t91 = call i64 @finch_str_find(ptr %a88, ptr %a90) + %t92 = icmp sge i64 %t91, 0 + br label %logic.rend10159 +logic.rend10159: + br label %logic.end10158 +logic.end10158: + %t93 = phi i1 [ false, %logic.from10156 ], [ %t92, %logic.rend10159 ] + br i1 %t93, label %then10160, label %else10161 +then10160: + %t94 = load { ptr, i64, i64 }, ptr %a26 + %t95 = call { ptr, i64, i64 } @finch.linker.between({ ptr, i64, i64 } %t94, { ptr, i64, i64 } { ptr @.str.6813, i64 11, i64 0 }, { ptr, i64, i64 } { ptr @.str.6814, i64 1, i64 0 }) + store { ptr, i64, i64 } %t95, ptr %a97 + store { ptr, i64, i64 } { ptr @.str.6815, i64 10, i64 0 }, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t95, ptr %a99 + call void @finch_str_drop(ptr %a99) + %t100 = load { ptr, i64, i64 }, ptr %a96 + call void @finch.linker.Names.add(ptr %a5, { ptr, i64, i64 } %t100) + store { ptr, i64, i64 } %t100, ptr %a101 + call void @finch_str_drop(ptr %a101) + br label %endif10162 +else10161: + %t102 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t102, ptr %a103 + store { ptr, i64, i64 } { ptr @.str.6817, i64 1, i64 0 }, ptr %a105 + %t106 = call i32 @finch_str_starts(ptr %a103, ptr %a105) + %t107 = icmp ne i32 %t106, 0 + br label %logic.from10163 +logic.from10163: + br i1 %t107, label %logic.rhs10164, label %logic.end10165 +logic.rhs10164: + %t108 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t108, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6819, i64 19, i64 0 }, ptr %a111 + %t112 = call i64 @finch_str_find(ptr %a109, ptr %a111) + %t113 = icmp sge i64 %t112, 0 + br label %logic.rend10166 +logic.rend10166: + br label %logic.end10165 +logic.end10165: + %t114 = phi i1 [ false, %logic.from10163 ], [ %t113, %logic.rend10166 ] + br i1 %t114, label %then10167, label %endif10169 +then10167: + %t115 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t115, ptr %a116 + %t118 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t118, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.6822, i64 19, i64 0 }, ptr %a121 + %t122 = call i64 @finch_str_find(ptr %a119, ptr %a121) + call void @finch_str_sub(ptr %a117, ptr %a116, i64 1, i64 %t122, ptr @.str.6820, i64 111) + %t123 = load { ptr, i64, i64 }, ptr %a117 + store { ptr, i64, i64 } %t123, ptr %a124 + %t125 = getelementptr inbounds %S.platform.Target, ptr %a3, i32 0, i32 3 + %t126 = load i1, ptr %t125 + br label %logic.from10170 +logic.from10170: + br i1 %t126, label %logic.rhs10171, label %logic.end10172 +logic.rhs10171: + %t127 = load { ptr, i64, i64 }, ptr %a124 + store { ptr, i64, i64 } %t127, ptr %a128 + store { ptr, i64, i64 } { ptr @.str.6824, i64 1, i64 0 }, ptr %a130 + %t131 = call i32 @finch_str_starts(ptr %a128, ptr %a130) + %t132 = icmp ne i32 %t131, 0 + br label %logic.rend10173 +logic.rend10173: + br label %logic.end10172 +logic.end10172: + %t133 = phi i1 [ false, %logic.from10170 ], [ %t132, %logic.rend10173 ] + br i1 %t133, label %then10174, label %endif10176 +then10174: + %t134 = load { ptr, i64, i64 }, ptr %a124 + store { ptr, i64, i64 } %t134, ptr %a135 + %t137 = getelementptr inbounds { ptr, i64, i64 }, ptr %a124, i32 0, i32 1 + %t138 = load i64, ptr %t137 + call void @finch_str_sub(ptr %a136, ptr %a135, i64 1, i64 %t138, ptr @.str.6825, i64 113) + %t139 = load { ptr, i64, i64 }, ptr %a136 + %t140 = load { ptr, i64, i64 }, ptr %a124 + store { ptr, i64, i64 } %t139, ptr %a124 + store { ptr, i64, i64 } %t140, ptr %a141 + call void @finch_str_drop(ptr %a141) + br label %endif10176 +endif10176: + %t142 = load { ptr, i64, i64 }, ptr %a124 + call void @finch.linker.Names.add(ptr %a4, { ptr, i64, i64 } %t142) + call void @finch_str_drop(ptr %a124) + br label %endif10169 +endif10169: + br label %endif10162 +endif10162: + br label %endif10155 +endif10155: + br label %endif10152 +endif10152: + br label %endif10149 +endif10149: + br label %endif10146 +endif10146: + br label %endif10143 +endif10143: + br label %endif10140 +endif10140: + call void @finch_str_drop(ptr %a26) + br label %each.step10136 +each.step10136: + %t143 = load i64, ptr %a13 + %t144 = add i64 %t143, 1 + store i64 %t144, ptr %a13 + br label %each.cond10134 +each.end10137: + call void @finch.drop.arr_str(ptr %a12) + %t145 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i32 0, i32 1 + %t147 = load i64, ptr %t146 + %t148 = icmp eq i64 %t147, 0 + br label %logic.from10177 +logic.from10177: + br i1 %t148, label %logic.rhs10178, label %logic.end10179 +logic.rhs10178: + %t149 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 + %t150 = getelementptr inbounds { ptr, i64, i64 }, ptr %t149, i32 0, i32 1 + %t151 = load i64, ptr %t150 + %t152 = icmp eq i64 %t151, 0 + br label %logic.rend10180 +logic.rend10180: + br label %logic.end10179 +logic.end10179: + %t153 = phi i1 [ false, %logic.from10177 ], [ %t152, %logic.rend10180 ] + br i1 %t153, label %then10181, label %endif10183 +then10181: + %t154 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t154, ptr %a156 + store { ptr, i64, i64 } { ptr @.str.6826, i64 21, i64 0 }, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + %t159 = extractvalue { ptr, i64, i64 } %t158, 1 + %t160 = trunc i64 %t159 to i32 + %t161 = extractvalue { ptr, i64, i64 } %t158, 0 + %t162 = icmp eq ptr %t161, null + %t163 = select i1 %t162, ptr @.str.6827, ptr %t161 + %t164 = call i32 (ptr, ...) @printf(ptr @.str.6828, i32 %t160, ptr %t163) + store { ptr, i64, i64 } %t158, ptr %a165 + call void @finch_str_drop(ptr %a165) + %t166 = call i32 (ptr, ...) @printf(ptr @.str.6829) + call void @finch.drop.S_linker_Names(ptr %a5) + call void @finch.drop.S_linker_Names(ptr %a4) + ret i64 1 +endif10183: + %t167 = getelementptr inbounds %S.linker.Names, ptr %a5, i32 0, i32 0 + store i64 0, ptr %a168 + br label %each.cond10184 +each.cond10184: + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = load i64, ptr %a168 + %t172 = icmp slt i64 %t171, %t170 + br i1 %t172, label %each.body10185, label %each.end10187 +each.body10185: + %t173 = load ptr, ptr %t167 + %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 %t171 + %t175 = load { ptr, i64, i64 }, ptr %t174 + store { ptr, i64, i64 } %t175, ptr %a176 + %t177 = load { ptr, i64, i64 }, ptr %a176 + store { ptr, i64, i64 } { ptr @.str.6830, i64 20, i64 0 }, ptr %a179 + store { ptr, i64, i64 } %t177, ptr %a180 + call void @finch_str_concat(ptr %a178, ptr %a179, ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a178 + store { ptr, i64, i64 } %t181, ptr %a183 + store { ptr, i64, i64 } { ptr @.str.6831, i64 62, i64 0 }, ptr %a184 + call void @finch_str_concat(ptr %a182, ptr %a183, ptr %a184) + store { ptr, i64, i64 } %t181, ptr %a185 + call void @finch_str_drop(ptr %a185) + %t186 = load { ptr, i64, i64 }, ptr %a182 + %t187 = extractvalue { ptr, i64, i64 } %t186, 1 + %t188 = trunc i64 %t187 to i32 + %t189 = extractvalue { ptr, i64, i64 } %t186, 0 + %t190 = icmp eq ptr %t189, null + %t191 = select i1 %t190, ptr @.str.6832, ptr %t189 + %t192 = call i32 (ptr, ...) @printf(ptr @.str.6833, i32 %t188, ptr %t191) + store { ptr, i64, i64 } %t186, ptr %a193 + call void @finch_str_drop(ptr %a193) + %t194 = call i32 (ptr, ...) @printf(ptr @.str.6834) + br label %each.step10186 +each.step10186: + %t195 = load i64, ptr %a168 + %t196 = add i64 %t195, 1 + store i64 %t196, ptr %a168 + br label %each.cond10184 +each.end10187: + store { ptr, i64, i64 } zeroinitializer, ptr %a197 + store { ptr, i64, i64 } zeroinitializer, ptr %a198 + %t199 = getelementptr inbounds %S.linker.Names, ptr %a4, i32 0, i32 0 + store i64 0, ptr %a200 + br label %each.cond10188 +each.cond10188: + %t201 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i32 0, i32 1 + %t202 = load i64, ptr %t201 + %t203 = load i64, ptr %a200 + %t204 = icmp slt i64 %t203, %t202 + br i1 %t204, label %each.body10189, label %each.end10191 +each.body10189: + %t205 = load ptr, ptr %t199 + %t206 = getelementptr inbounds { ptr, i64, i64 }, ptr %t205, i64 %t203 + %t207 = load { ptr, i64, i64 }, ptr %t206 + store { ptr, i64, i64 } %t207, ptr %a208 + store { ptr, i64, i64 } { ptr @.str.6835, i64 0, i64 0 }, ptr %a209 + %t210 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 + %t211 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t211, ptr %a212 + %t213 = call i64 @finch_map_find(ptr %t210, ptr %a212, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t214 = icmp sge i64 %t213, 0 + br i1 %t214, label %then10192, label %endif10194 +then10192: + %t215 = getelementptr inbounds %S.cimport.CImports, ptr %a2, i32 0, i32 0 + %t216 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t216, ptr %a217 + %t218 = call i64 @finch_map_find(ptr %t215, ptr %a217, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t219 = icmp slt i64 %t218, 0 + br i1 %t219, label %map.missing10195, label %map.found10196 +map.missing10195: + store { ptr, i64, i64 } zeroinitializer, ptr %a220 + store { ptr, i64, i64 } %t216, ptr %a221 + call void @finch_buf_str(ptr %a220, ptr %a221, i32 1) + call void @finch_map_missing(ptr @.str.6836, i64 131, ptr %a220) + unreachable +map.found10196: + %t222 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t215, i32 0, i32 0 + %t223 = load ptr, ptr %t222 + %t224 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t223, i64 %t218 + %t225 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.cimport.CFunc }, ptr %t224, i32 0, i32 2 + %t226 = getelementptr inbounds %S.cimport.CFunc, ptr %t225, i32 0, i32 1 + %t227 = load { ptr, i64, i64 }, ptr %t226 + store { ptr, i64, i64 } %t227, ptr %a228 + call void @finch_str_copy(ptr %a229, ptr %a228) + %t230 = load { ptr, i64, i64 }, ptr %a229 + %t231 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t230, ptr %a209 + store { ptr, i64, i64 } %t231, ptr %a232 + call void @finch_str_drop(ptr %a232) + br label %endif10194 +endif10194: + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t234 = load { ptr, i64, i64 }, ptr %a209 + store i64 -1, ptr %a235 + %t236 = load i64, ptr %t233 + %t237 = load ptr, ptr %a197 + store i64 0, ptr %a238 + br label %find.cond10197 +find.cond10197: + %t239 = load i64, ptr %a238 + %t240 = icmp slt i64 %t239, %t236 + br i1 %t240, label %find.body10198, label %find.end10201 +find.body10198: + %t241 = getelementptr inbounds { ptr, i64, i64 }, ptr %t237, i64 %t239 + %t242 = load { ptr, i64, i64 }, ptr %t241 + store { ptr, i64, i64 } %t242, ptr %a243 + store { ptr, i64, i64 } %t234, ptr %a244 + %t245 = call i32 @finch_str_eq(ptr %a243, ptr %a244) + %t246 = icmp ne i32 %t245, 0 + br i1 %t246, label %find.hit10199, label %find.next10200 +find.hit10199: + store i64 %t239, ptr %a235 + br label %find.end10201 +find.next10200: + %t247 = add i64 %t239, 1 + store i64 %t247, ptr %a238 + br label %find.cond10197 +find.end10201: + %t248 = load i64, ptr %a235 + store i64 %t248, ptr %a249 + %t250 = load i64, ptr %a249 + %t251 = icmp slt i64 %t250, 0 + br i1 %t251, label %then10202, label %endif10204 +then10202: + %t252 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t253 = load { ptr, i64, i64 }, ptr %a209 + store { ptr, i64, i64 } %t253, ptr %a254 + call void @finch_str_copy(ptr %a255, ptr %a254) + %t256 = load { ptr, i64, i64 }, ptr %a255 + %t257 = load i64, ptr %t252 + %t258 = add i64 %t257, 1 + call void @finch_arr_reserve(ptr %a197, i64 %t258, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t259 = load ptr, ptr %a197 + %t260 = getelementptr inbounds { ptr, i64, i64 }, ptr %t259, i64 %t257 + store { ptr, i64, i64 } %t256, ptr %t260 + store i64 %t258, ptr %t252 + %t261 = getelementptr inbounds { ptr, i64, i64 }, ptr %a198, i32 0, i32 1 + %t262 = load i64, ptr %t261 + %t263 = add i64 %t262, 1 + call void @finch_arr_reserve(ptr %a198, i64 %t263, i64 ptrtoint (ptr getelementptr (%S.linker.Names, ptr null, i32 1) to i64)) + %t264 = load ptr, ptr %a198 + %t265 = getelementptr inbounds %S.linker.Names, ptr %t264, i64 %t262 + store %S.linker.Names zeroinitializer, ptr %t265 + store i64 %t263, ptr %t261 + %t266 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t267 = load i64, ptr %t266 + %t268 = sub i64 %t267, 1 + store i64 %t268, ptr %a249 + br label %endif10204 +endif10204: + %t269 = load i64, ptr %a249 + %t270 = load { ptr, i64, i64 }, ptr %a198 + %t271 = extractvalue { ptr, i64, i64 } %t270, 1 + %t272 = icmp uge i64 %t269, %t271 + br i1 %t272, label %range10205, label %inrange10206 +range10205: + call void @finch_panic_index(ptr @.str.6837, i64 139, i64 %t269, i64 %t271) + unreachable +inrange10206: + %t273 = extractvalue { ptr, i64, i64 } %t270, 0 + %t274 = getelementptr inbounds %S.linker.Names, ptr %t273, i64 %t269 + %t275 = load { ptr, i64, i64 }, ptr %a208 + call void @finch.linker.Names.add(ptr %t274, { ptr, i64, i64 } %t275) + call void @finch_str_drop(ptr %a209) + br label %each.step10190 +each.step10190: + %t276 = load i64, ptr %a200 + %t277 = add i64 %t276, 1 + store i64 %t277, ptr %a200 + br label %each.cond10188 +each.end10191: + %t278 = getelementptr inbounds { ptr, i64, i64 }, ptr %a197, i32 0, i32 1 + %t279 = load i64, ptr %t278 + store i64 0, ptr %a280 + br label %for.cond10207 +for.cond10207: + %t281 = load i64, ptr %a280 + %t282 = icmp slt i64 %t281, %t279 + br i1 %t282, label %for.body10208, label %for.end10210 +for.body10208: + %t283 = load i64, ptr %a280 + %t284 = load { ptr, i64, i64 }, ptr %a198 + %t285 = extractvalue { ptr, i64, i64 } %t284, 1 + %t286 = icmp uge i64 %t283, %t285 + br i1 %t286, label %range10211, label %inrange10212 +range10211: + call void @finch_panic_index(ptr @.str.6838, i64 142, i64 %t283, i64 %t285) + unreachable +inrange10212: + %t287 = extractvalue { ptr, i64, i64 } %t284, 0 + %t288 = getelementptr inbounds %S.linker.Names, ptr %t287, i64 %t283 + %t289 = getelementptr inbounds %S.linker.Names, ptr %t288, i32 0, i32 0 + %t290 = load { ptr, i64, i64 }, ptr %t289 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch.copy.arr_str(ptr %a292, ptr %a291) + %t293 = load { ptr, i64, i64 }, ptr %a292 + store { ptr, i64, i64 } %t293, ptr %a294 + store { ptr, i64, i64 } zeroinitializer, ptr %a295 + %t296 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t297 = load i64, ptr %t296 + store i64 0, ptr %a298 + br label %for.cond10213 +for.cond10213: + %t299 = load i64, ptr %a298 + %t300 = icmp slt i64 %t299, %t297 + br i1 %t300, label %for.body10214, label %for.end10216 +for.body10214: + %t301 = load i64, ptr %a298 + %t302 = icmp slt i64 %t301, 3 + br i1 %t302, label %then10217, label %endif10219 +then10217: + %t303 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 + %t304 = load i64, ptr %a298 + %t305 = load { ptr, i64, i64 }, ptr %a294 + %t306 = extractvalue { ptr, i64, i64 } %t305, 1 + %t307 = icmp uge i64 %t304, %t306 + br i1 %t307, label %range10220, label %inrange10221 +range10220: + call void @finch_panic_index(ptr @.str.6839, i64 146, i64 %t304, i64 %t306) + unreachable +inrange10221: + %t308 = extractvalue { ptr, i64, i64 } %t305, 0 + %t309 = getelementptr inbounds { ptr, i64, i64 }, ptr %t308, i64 %t304 + %t310 = load { ptr, i64, i64 }, ptr %t309 + store { ptr, i64, i64 } %t310, ptr %a311 + call void @finch_str_copy(ptr %a312, ptr %a311) + %t313 = load { ptr, i64, i64 }, ptr %a312 + %t314 = load i64, ptr %t303 + %t315 = add i64 %t314, 1 + call void @finch_arr_reserve(ptr %a295, i64 %t315, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t316 = load ptr, ptr %a295 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i64 %t314 + store { ptr, i64, i64 } %t313, ptr %t317 + store i64 %t315, ptr %t303 + br label %endif10219 +endif10219: + br label %for.step10215 +for.step10215: + %t318 = load i64, ptr %a298 + %t319 = add i64 %t318, 1 + store i64 %t319, ptr %a298 + br label %for.cond10213 +for.end10216: + %t320 = getelementptr inbounds { ptr, i64, i64 }, ptr %a295, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6840, i64 2, i64 0 }, ptr %a321 + call void @finch_str_join(ptr %a322, ptr %a295, ptr %a321) + %t323 = load { ptr, i64, i64 }, ptr %a322 + store { ptr, i64, i64 } %t323, ptr %a324 + %t325 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t326 = load i64, ptr %t325 + %t327 = icmp sgt i64 %t326, 3 + br i1 %t327, label %then10222, label %endif10224 +then10222: + %t328 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6841, i64 5, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a329 + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t334 = load i64, ptr %t333 + %t335 = sub i64 %t334, 3 + call void @finch_str_from_int(ptr %a336, i64 %t335) + %t337 = load { ptr, i64, i64 }, ptr %a336 + store { ptr, i64, i64 } %t332, ptr %a339 + store { ptr, i64, i64 } %t337, ptr %a340 + call void @finch_str_concat(ptr %a338, ptr %a339, ptr %a340) + store { ptr, i64, i64 } %t332, ptr %a341 + call void @finch_str_drop(ptr %a341) + store { ptr, i64, i64 } %t337, ptr %a342 + call void @finch_str_drop(ptr %a342) + %t343 = load { ptr, i64, i64 }, ptr %a338 + store { ptr, i64, i64 } %t343, ptr %a345 + store { ptr, i64, i64 } { ptr @.str.6842, i64 5, i64 0 }, ptr %a346 + call void @finch_str_concat(ptr %a344, ptr %a345, ptr %a346) + store { ptr, i64, i64 } %t343, ptr %a347 + call void @finch_str_drop(ptr %a347) + %t348 = load { ptr, i64, i64 }, ptr %a344 + %t349 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } %t348, ptr %a324 + store { ptr, i64, i64 } %t349, ptr %a350 + call void @finch_str_drop(ptr %a350) + br label %endif10224 +endif10224: + %t351 = load i64, ptr %a280 + %t352 = load { ptr, i64, i64 }, ptr %a197 + %t353 = extractvalue { ptr, i64, i64 } %t352, 1 + %t354 = icmp uge i64 %t351, %t353 + br i1 %t354, label %range10225, label %inrange10226 +range10225: + call void @finch_panic_index(ptr @.str.6843, i64 153, i64 %t351, i64 %t353) + unreachable +inrange10226: + %t355 = extractvalue { ptr, i64, i64 } %t352, 0 + %t356 = getelementptr inbounds { ptr, i64, i64 }, ptr %t355, i64 %t351 + %t357 = getelementptr inbounds { ptr, i64, i64 }, ptr %t356, i32 0, i32 1 + %t358 = load i64, ptr %t357 + %t359 = icmp eq i64 %t358, 0 + br i1 %t359, label %then10227, label %endif10229 +then10227: + %t360 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.6844, i64 25, i64 0 }, ptr %a362 + store { ptr, i64, i64 } %t360, ptr %a363 + call void @finch_str_concat(ptr %a361, ptr %a362, ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a361 + %t365 = extractvalue { ptr, i64, i64 } %t364, 1 + %t366 = trunc i64 %t365 to i32 + %t367 = extractvalue { ptr, i64, i64 } %t364, 0 + %t368 = icmp eq ptr %t367, null + %t369 = select i1 %t368, ptr @.str.6845, ptr %t367 + %t370 = call i32 (ptr, ...) @printf(ptr @.str.6846, i32 %t366, ptr %t369) + store { ptr, i64, i64 } %t364, ptr %a371 + call void @finch_str_drop(ptr %a371) + %t372 = call i32 (ptr, ...) @printf(ptr @.str.6847) + call void @finch_str_drop(ptr %a324) + call void @finch.drop.arr_str(ptr %a295) + call void @finch.drop.arr_str(ptr %a294) + br label %for.step10209 +endif10229: + store { ptr, i64, i64 } { ptr @.str.6848, i64 4, i64 0 }, ptr %a373 + %t374 = getelementptr inbounds { ptr, i64, i64 }, ptr %a294, i32 0, i32 1 + %t375 = load i64, ptr %t374 + %t376 = icmp eq i64 %t375, 1 + br i1 %t376, label %then10230, label %endif10232 +then10230: + %t377 = load { ptr, i64, i64 }, ptr %a373 + store { ptr, i64, i64 } { ptr @.str.6849, i64 5, i64 0 }, ptr %a373 + store { ptr, i64, i64 } %t377, ptr %a378 + call void @finch_str_drop(ptr %a378) + br label %endif10232 +endif10232: + %t379 = load { ptr, i64, i64 }, ptr %a324 + store { ptr, i64, i64 } { ptr @.str.6850, i64 7, i64 0 }, ptr %a381 + store { ptr, i64, i64 } %t379, ptr %a382 + call void @finch_str_concat(ptr %a380, ptr %a381, ptr %a382) + %t383 = load { ptr, i64, i64 }, ptr %a380 + store { ptr, i64, i64 } %t383, ptr %a385 + store { ptr, i64, i64 } { ptr @.str.6851, i64 1, i64 0 }, ptr %a386 + call void @finch_str_concat(ptr %a384, ptr %a385, ptr %a386) + store { ptr, i64, i64 } %t383, ptr %a387 + call void @finch_str_drop(ptr %a387) + %t388 = load { ptr, i64, i64 }, ptr %a384 + %t389 = load { ptr, i64, i64 }, ptr %a373 + store { ptr, i64, i64 } %t388, ptr %a391 + store { ptr, i64, i64 } %t389, ptr %a392 + call void @finch_str_concat(ptr %a390, ptr %a391, ptr %a392) + store { ptr, i64, i64 } %t388, ptr %a393 + call void @finch_str_drop(ptr %a393) + %t394 = load { ptr, i64, i64 }, ptr %a390 + store { ptr, i64, i64 } %t394, ptr %a396 + store { ptr, i64, i64 } { ptr @.str.6852, i64 7, i64 0 }, ptr %a397 + call void @finch_str_concat(ptr %a395, ptr %a396, ptr %a397) + store { ptr, i64, i64 } %t394, ptr %a398 + call void @finch_str_drop(ptr %a398) + %t399 = load { ptr, i64, i64 }, ptr %a395 + %t400 = load i64, ptr %a280 + %t401 = load { ptr, i64, i64 }, ptr %a197 + %t402 = extractvalue { ptr, i64, i64 } %t401, 1 + %t403 = icmp uge i64 %t400, %t402 + br i1 %t403, label %range10233, label %inrange10234 +range10233: + call void @finch_panic_index(ptr @.str.6853, i64 161, i64 %t400, i64 %t402) + unreachable +inrange10234: + %t404 = extractvalue { ptr, i64, i64 } %t401, 0 + %t405 = getelementptr inbounds { ptr, i64, i64 }, ptr %t404, i64 %t400 + %t406 = load { ptr, i64, i64 }, ptr %t405 + store { ptr, i64, i64 } %t399, ptr %a408 + store { ptr, i64, i64 } %t406, ptr %a409 + call void @finch_str_concat(ptr %a407, ptr %a408, ptr %a409) + store { ptr, i64, i64 } %t399, ptr %a410 + call void @finch_str_drop(ptr %a410) + %t411 = load { ptr, i64, i64 }, ptr %a407 + store { ptr, i64, i64 } %t411, ptr %a413 + store { ptr, i64, i64 } { ptr @.str.6854, i64 31, i64 0 }, ptr %a414 + call void @finch_str_concat(ptr %a412, ptr %a413, ptr %a414) + store { ptr, i64, i64 } %t411, ptr %a415 + call void @finch_str_drop(ptr %a415) + %t416 = load { ptr, i64, i64 }, ptr %a412 + %t417 = extractvalue { ptr, i64, i64 } %t416, 1 + %t418 = trunc i64 %t417 to i32 + %t419 = extractvalue { ptr, i64, i64 } %t416, 0 + %t420 = icmp eq ptr %t419, null + %t421 = select i1 %t420, ptr @.str.6855, ptr %t419 + %t422 = call i32 (ptr, ...) @printf(ptr @.str.6856, i32 %t418, ptr %t421) + store { ptr, i64, i64 } %t416, ptr %a423 + call void @finch_str_drop(ptr %a423) + %t424 = call i32 (ptr, ...) @printf(ptr @.str.6857) + %t425 = extractvalue { ptr, i64, i64 } { ptr @.str.6858, i64 74, i64 0 }, 1 + %t426 = trunc i64 %t425 to i32 + %t427 = extractvalue { ptr, i64, i64 } { ptr @.str.6858, i64 74, i64 0 }, 0 + %t428 = icmp eq ptr %t427, null + %t429 = select i1 %t428, ptr @.str.6859, ptr %t427 + %t430 = call i32 (ptr, ...) @printf(ptr @.str.6860, i32 %t426, ptr %t429) + %t431 = call i32 (ptr, ...) @printf(ptr @.str.6861) + %t432 = extractvalue { ptr, i64, i64 } { ptr @.str.6862, i64 66, i64 0 }, 1 + %t433 = trunc i64 %t432 to i32 + %t434 = extractvalue { ptr, i64, i64 } { ptr @.str.6862, i64 66, i64 0 }, 0 + %t435 = icmp eq ptr %t434, null + %t436 = select i1 %t435, ptr @.str.6863, ptr %t434 + %t437 = call i32 (ptr, ...) @printf(ptr @.str.6864, i32 %t433, ptr %t436) + %t438 = call i32 (ptr, ...) @printf(ptr @.str.6865) + %t439 = extractvalue { ptr, i64, i64 } { ptr @.str.6866, i64 0, i64 0 }, 1 + %t440 = trunc i64 %t439 to i32 + %t441 = extractvalue { ptr, i64, i64 } { ptr @.str.6866, i64 0, i64 0 }, 0 + %t442 = icmp eq ptr %t441, null + %t443 = select i1 %t442, ptr @.str.6867, ptr %t441 + %t444 = call i32 (ptr, ...) @printf(ptr @.str.6868, i32 %t440, ptr %t443) + %t445 = call i32 (ptr, ...) @printf(ptr @.str.6869) + %t446 = load i64, ptr %a280 + %t447 = load { ptr, i64, i64 }, ptr %a197 + %t448 = extractvalue { ptr, i64, i64 } %t447, 1 + %t449 = icmp uge i64 %t446, %t448 + br i1 %t449, label %range10235, label %inrange10236 +range10235: + call void @finch_panic_index(ptr @.str.6871, i64 165, i64 %t446, i64 %t448) + unreachable +inrange10236: + %t450 = extractvalue { ptr, i64, i64 } %t447, 0 + %t451 = getelementptr inbounds { ptr, i64, i64 }, ptr %t450, i64 %t446 + %t452 = load { ptr, i64, i64 }, ptr %t451 + %t453 = call { ptr, i64, i64 } @finch.linker.guessLib({ ptr, i64, i64 } %t452) + store { ptr, i64, i64 } { ptr @.str.6870, i64 12, i64 0 }, ptr %a455 + store { ptr, i64, i64 } %t453, ptr %a456 + call void @finch_str_concat(ptr %a454, ptr %a455, ptr %a456) + store { ptr, i64, i64 } %t453, ptr %a457 + call void @finch_str_drop(ptr %a457) + %t458 = load { ptr, i64, i64 }, ptr %a454 + store { ptr, i64, i64 } %t458, ptr %a460 + store { ptr, i64, i64 } { ptr @.str.6872, i64 1, i64 0 }, ptr %a461 + call void @finch_str_concat(ptr %a459, ptr %a460, ptr %a461) + store { ptr, i64, i64 } %t458, ptr %a462 + call void @finch_str_drop(ptr %a462) + %t463 = load { ptr, i64, i64 }, ptr %a459 + %t464 = extractvalue { ptr, i64, i64 } %t463, 1 + %t465 = trunc i64 %t464 to i32 + %t466 = extractvalue { ptr, i64, i64 } %t463, 0 + %t467 = icmp eq ptr %t466, null + %t468 = select i1 %t467, ptr @.str.6873, ptr %t466 + %t469 = call i32 (ptr, ...) @printf(ptr @.str.6874, i32 %t465, ptr %t468) + store { ptr, i64, i64 } %t463, ptr %a470 + call void @finch_str_drop(ptr %a470) + %t471 = call i32 (ptr, ...) @printf(ptr @.str.6875) + %t472 = extractvalue { ptr, i64, i64 } { ptr @.str.6876, i64 0, i64 0 }, 1 + %t473 = trunc i64 %t472 to i32 + %t474 = extractvalue { ptr, i64, i64 } { ptr @.str.6876, i64 0, i64 0 }, 0 + %t475 = icmp eq ptr %t474, null + %t476 = select i1 %t475, ptr @.str.6877, ptr %t474 + %t477 = call i32 (ptr, ...) @printf(ptr @.str.6878, i32 %t473, ptr %t476) + %t478 = call i32 (ptr, ...) @printf(ptr @.str.6879) + call void @finch_str_drop(ptr %a373) + call void @finch_str_drop(ptr %a324) + call void @finch.drop.arr_str(ptr %a295) + call void @finch.drop.arr_str(ptr %a294) + br label %for.step10209 +for.step10209: + %t479 = load i64, ptr %a280 + %t480 = add i64 %t479, 1 + store i64 %t480, ptr %a280 + br label %for.cond10207 +for.end10210: + call void @finch.drop.arr_S_linker_Names(ptr %a198) + call void @finch.drop.arr_str(ptr %a197) + call void @finch.drop.S_linker_Names(ptr %a5) + call void @finch.drop.S_linker_Names(ptr %a4) + ret i64 1 +} + +define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %p0, %S.platform.Target %p1, { ptr, i64, i64 } %p2) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.platform.Target, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a94 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a143 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca i64, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.platform.Target %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t4, ptr %a5 + store { ptr, i64, i64 } zeroinitializer, ptr %a6 + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + %t8 = call i32 @finch_try_read_file(ptr %a6, ptr %a5, ptr %a7) + %t9 = icmp eq i32 %t8, 0 + %t10 = load { ptr, i64, i64 }, ptr %a7 + %t11 = load { ptr, i64, i64 }, ptr %a6 + br i1 %t9, label %try.failed10240, label %try.ok10241 +try.failed10240: + %t12 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t10, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t12 +try.ok10241: + store { ptr, i64, i64 } %t11, ptr %a13 + %t14 = call { ptr, i64, i64 } @finch.host.cacheDir() + store { ptr, i64, i64 } %t14, ptr %a15 + %t16 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } { ptr @.str.6880, i64 4, i64 0 }, ptr %a19 + call void @finch_str_concat(ptr %a17, ptr %a18, ptr %a19) + %t20 = load { ptr, i64, i64 }, ptr %a17 + %t21 = load { ptr, i64, i64 }, ptr %a13 + %t22 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t21, ptr %a24 + store { ptr, i64, i64 } %t22, ptr %a25 + call void @finch_str_concat(ptr %a23, ptr %a24, ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a23 + %t27 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 + %t28 = load { ptr, i64, i64 }, ptr %t27 + store { ptr, i64, i64 } %t26, ptr %a30 + store { ptr, i64, i64 } %t28, ptr %a31 + call void @finch_str_concat(ptr %a29, ptr %a30, ptr %a31) + store { ptr, i64, i64 } %t26, ptr %a32 + call void @finch_str_drop(ptr %a32) + %t33 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t33, ptr %a35 + store { ptr, i64, i64 } { ptr @.str.6881, i64 3, i64 0 }, ptr %a36 + call void @finch_str_concat(ptr %a34, ptr %a35, ptr %a36) + store { ptr, i64, i64 } %t33, ptr %a37 + call void @finch_str_drop(ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a34 + %t39 = call { ptr, i64, i64 } @finch.linker.fingerprint({ ptr, i64, i64 } %t38) + store { ptr, i64, i64 } %t38, ptr %a40 + call void @finch_str_drop(ptr %a40) + store { ptr, i64, i64 } %t20, ptr %a42 + store { ptr, i64, i64 } %t39, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t20, ptr %a44 + call void @finch_str_drop(ptr %a44) + store { ptr, i64, i64 } %t39, ptr %a45 + call void @finch_str_drop(ptr %a45) + %t46 = load { ptr, i64, i64 }, ptr %a41 + store { ptr, i64, i64 } %t46, ptr %a48 + store { ptr, i64, i64 } { ptr @.str.6882, i64 2, i64 0 }, ptr %a49 + call void @finch_str_concat(ptr %a47, ptr %a48, ptr %a49) + store { ptr, i64, i64 } %t46, ptr %a50 + call void @finch_str_drop(ptr %a50) + %t51 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t51, ptr %a52 + %t53 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t53, ptr %a54 + %t55 = call i32 @finch_file_exists(ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %then10242, label %endif10244 +then10242: + %t57 = load { ptr, i64, i64 }, ptr %a52 + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a13) + %t58 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t59 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t58, { ptr, i64, i64 } %t57, 1 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t59 +endif10244: + %t60 = load { ptr, i64, i64 }, ptr %a15 + call void @finch.host.makeDirs({ ptr, i64, i64 } %t60) + %t61 = load { ptr, i64, i64 }, ptr %a52 + store { ptr, i64, i64 } %t61, ptr %a63 + store { ptr, i64, i64 } { ptr @.str.6883, i64 5, i64 0 }, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + %t65 = load { ptr, i64, i64 }, ptr %a62 + %t66 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a67, i64 %t66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } %t65, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t65, ptr %a72 + call void @finch_str_drop(ptr %a72) + store { ptr, i64, i64 } %t68, ptr %a73 + call void @finch_str_drop(ptr %a73) + %t74 = load { ptr, i64, i64 }, ptr %a69 + store { ptr, i64, i64 } %t74, ptr %a75 + store { ptr, i64, i64 } { ptr @.str.6884, i64 6, i64 0 }, ptr %a76 + %t77 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t78 = load i1, ptr %t77 + br i1 %t78, label %then10245, label %endif10247 +then10245: + %t79 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } { ptr @.str.6885, i64 0, i64 0 }, ptr %a76 + store { ptr, i64, i64 } %t79, ptr %a80 + call void @finch_str_drop(ptr %a80) + br label %endif10247 +endif10247: + %t81 = load { ptr, i64, i64 }, ptr %a75 + store { ptr, i64, i64 } %t81, ptr %a83 + store { ptr, i64, i64 } { ptr @.str.6886, i64 4, i64 0 }, ptr %a84 + call void @finch_str_concat(ptr %a82, ptr %a83, ptr %a84) + %t85 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t85, ptr %a86 + %t87 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t87, ptr %a89 + store { ptr, i64, i64 } { ptr @.str.6887, i64 4, i64 0 }, ptr %a90 + call void @finch_str_concat(ptr %a88, ptr %a89, ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a88 + %t92 = load { ptr, i64, i64 }, ptr %a76 + store { ptr, i64, i64 } %t91, ptr %a94 + store { ptr, i64, i64 } %t92, ptr %a95 + call void @finch_str_concat(ptr %a93, ptr %a94, ptr %a95) + store { ptr, i64, i64 } %t91, ptr %a96 + call void @finch_str_drop(ptr %a96) + %t97 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t97, ptr %a99 + store { ptr, i64, i64 } { ptr @.str.6888, i64 4, i64 0 }, ptr %a100 + call void @finch_str_concat(ptr %a98, ptr %a99, ptr %a100) + store { ptr, i64, i64 } %t97, ptr %a101 + call void @finch_str_drop(ptr %a101) + %t102 = load { ptr, i64, i64 }, ptr %a98 + %t103 = load { ptr, i64, i64 }, ptr %a1 + %t104 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t103) + store { ptr, i64, i64 } %t102, ptr %a106 + store { ptr, i64, i64 } %t104, ptr %a107 + call void @finch_str_concat(ptr %a105, ptr %a106, ptr %a107) + store { ptr, i64, i64 } %t102, ptr %a108 + call void @finch_str_drop(ptr %a108) + store { ptr, i64, i64 } %t104, ptr %a109 + call void @finch_str_drop(ptr %a109) + %t110 = load { ptr, i64, i64 }, ptr %a105 + store { ptr, i64, i64 } %t110, ptr %a112 + store { ptr, i64, i64 } { ptr @.str.6889, i64 4, i64 0 }, ptr %a113 + call void @finch_str_concat(ptr %a111, ptr %a112, ptr %a113) + store { ptr, i64, i64 } %t110, ptr %a114 + call void @finch_str_drop(ptr %a114) + %t115 = load { ptr, i64, i64 }, ptr %a111 + %t116 = load { ptr, i64, i64 }, ptr %a75 + %t117 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t115, ptr %a119 + store { ptr, i64, i64 } %t117, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t115, ptr %a121 + call void @finch_str_drop(ptr %a121) + store { ptr, i64, i64 } %t117, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a118 + store { ptr, i64, i64 } %t123, ptr %a125 + store { ptr, i64, i64 } { ptr @.str.6890, i64 3, i64 0 }, ptr %a126 + call void @finch_str_concat(ptr %a124, ptr %a125, ptr %a126) + store { ptr, i64, i64 } %t123, ptr %a127 + call void @finch_str_drop(ptr %a127) + %t128 = load { ptr, i64, i64 }, ptr %a124 + %t129 = load { ptr, i64, i64 }, ptr %a86 + %t130 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t129) + store { ptr, i64, i64 } %t128, ptr %a132 + store { ptr, i64, i64 } %t130, ptr %a133 + call void @finch_str_concat(ptr %a131, ptr %a132, ptr %a133) + store { ptr, i64, i64 } %t128, ptr %a134 + call void @finch_str_drop(ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a131 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.6891, i64 5, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = call i64 @finch.host.run({ ptr, i64, i64 } %t141) + store { ptr, i64, i64 } %t141, ptr %a143 + call void @finch_str_drop(ptr %a143) + store i64 %t142, ptr %a144 + %t145 = load i64, ptr %a144 + %t146 = icmp ne i64 %t145, 0 + br i1 %t146, label %then10248, label %endif10250 +then10248: + %t147 = load { ptr, i64, i64 }, ptr %a86 + store { ptr, i64, i64 } %t147, ptr %a148 + store { ptr, i64, i64 } zeroinitializer, ptr %a149 + store { ptr, i64, i64 } zeroinitializer, ptr %a150 + %t151 = call i32 @finch_try_read_file(ptr %a149, ptr %a148, ptr %a150) + %t152 = icmp eq i32 %t151, 0 + %t153 = load { ptr, i64, i64 }, ptr %a150 + %t154 = load { ptr, i64, i64 }, ptr %a149 + br i1 %t152, label %or.failed10251, label %or.ok10252 +or.failed10251: + store { ptr, i64, i64 } %t153, ptr %a155 + call void @finch_str_drop(ptr %a155) + br label %or.bend10253 +or.bend10253: + br label %or.end10254 +or.ok10252: + br label %or.end10254 +or.end10254: + %t156 = phi { ptr, i64, i64 } [ { ptr @.str.6892, i64 0, i64 0 }, %or.bend10253 ], [ %t154, %or.ok10252 ] + store { ptr, i64, i64 } %t156, ptr %a157 + %t158 = load { ptr, i64, i64 }, ptr %a75 + call void @finch.host.remove({ ptr, i64, i64 } %t158) + %t159 = load { ptr, i64, i64 }, ptr %a86 + call void @finch.host.remove({ ptr, i64, i64 } %t159) + %t160 = load { ptr, i64, i64 }, ptr %a157 + store { ptr, i64, i64 } %t160, ptr %a162 + store { ptr, i64, i64 } { ptr @.str.6893, i64 46, i64 0 }, ptr %a163 + call void @finch_str_concat(ptr %a161, ptr %a162, ptr %a163) + %t164 = load { ptr, i64, i64 }, ptr %a161 + %t165 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t164, ptr %a167 + store { ptr, i64, i64 } %t165, ptr %a168 + call void @finch_str_concat(ptr %a166, ptr %a167, ptr %a168) + store { ptr, i64, i64 } %t164, ptr %a169 + call void @finch_str_drop(ptr %a169) + %t170 = load { ptr, i64, i64 }, ptr %a166 + store { ptr, i64, i64 } %t170, ptr %a172 + store { ptr, i64, i64 } { ptr @.str.6894, i64 30, i64 0 }, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t170, ptr %a174 + call void @finch_str_drop(ptr %a174) + %t175 = load { ptr, i64, i64 }, ptr %a171 + call void @finch_str_drop(ptr %a157) + call void @finch_str_drop(ptr %a86) + call void @finch_str_drop(ptr %a76) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a52) + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a13) + %t176 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t175, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t176 +endif10250: + %t177 = load { ptr, i64, i64 }, ptr %a86 + call void @finch.host.remove({ ptr, i64, i64 } %t177) + %t178 = load { ptr, i64, i64 }, ptr %a75 + %t179 = load { ptr, i64, i64 }, ptr %a52 + call void @finch.host.move({ ptr, i64, i64 } %t178, { ptr, i64, i64 } %t179) + %t180 = load { ptr, i64, i64 }, ptr %a52 + call void @finch_str_drop(ptr %a86) + call void @finch_str_drop(ptr %a76) + call void @finch_str_drop(ptr %a75) + call void @finch_str_drop(ptr %a15) + call void @finch_str_drop(ptr %a13) + %t181 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t182 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t181, { ptr, i64, i64 } %t180, 1 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t182 +} + +define internal i64 @finch.linker.build(%S.linker.Build %p0, %S.platform.Target %p1, %S.cimport.CImports %p2) { +entry: + %a1 = alloca %S.linker.Build, align 16 + %a2 = alloca %S.platform.Target, align 16 + %a3 = alloca %S.cimport.CImports, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a48 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a115 = alloca { ptr, i64, i64 }, align 16 + %a116 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a141 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a167 = alloca { ptr, i64, i64 }, align 16 + %a171 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a173 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a179 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a183 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca i64, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a196 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a216 = alloca { ptr, i64, i64 }, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a222 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a228 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a230 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a265 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a276 = alloca { ptr, i64, i64 }, align 16 + %a277 = alloca { ptr, i64, i64 }, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca { ptr, i64, i64 }, align 16 + %a286 = alloca { ptr, i64, i64 }, align 16 + %a287 = alloca { ptr, i64, i64 }, align 16 + %a288 = alloca { ptr, i64, i64 }, align 16 + %a291 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a304 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a310 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca i64, align 16 + %a320 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a323 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a338 = alloca { ptr, i64, i64 }, align 16 + %a339 = alloca { ptr, i64, i64 }, align 16 + %a340 = alloca { ptr, i64, i64 }, align 16 + %a341 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a346 = alloca { ptr, i64, i64 }, align 16 + %a348 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a355 = alloca { ptr, i64, i64 }, align 16 + %a356 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a361 = alloca { ptr, i64, i64 }, align 16 + %a362 = alloca { ptr, i64, i64 }, align 16 + %a363 = alloca { ptr, i64, i64 }, align 16 + %a365 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a373 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a376 = alloca { ptr, i64, i64 }, align 16 + %a378 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca { ptr, i64, i64 }, align 16 + %a380 = alloca { ptr, i64, i64 }, align 16 + %a381 = alloca { ptr, i64, i64 }, align 16 + %a385 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca { ptr, i64, i64 }, align 16 + %a387 = alloca { ptr, i64, i64 }, align 16 + %a388 = alloca { ptr, i64, i64 }, align 16 + %a389 = alloca { ptr, i64, i64 }, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a393 = alloca { ptr, i64, i64 }, align 16 + %a394 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca { ptr, i64, i64 }, align 16 + %a399 = alloca { ptr, i64, i64 }, align 16 + %a400 = alloca { ptr, i64, i64 }, align 16 + %a401 = alloca { ptr, i64, i64 }, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a404 = alloca { ptr, i64, i64 }, align 16 + %a405 = alloca { ptr, i64, i64 }, align 16 + %a406 = alloca { ptr, i64, i64 }, align 16 + %a407 = alloca { ptr, i64, i64 }, align 16 + %a410 = alloca { ptr, i64, i64 }, align 16 + %a411 = alloca i64, align 16 + %a415 = alloca { ptr, i64, i64 }, align 16 + %a416 = alloca { ptr, i64, i64 }, align 16 + %a417 = alloca { ptr, i64, i64 }, align 16 + %a422 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a426 = alloca { ptr, i64, i64 }, align 16 + %a427 = alloca { ptr, i64, i64 }, align 16 + %a430 = alloca { ptr, i64, i64 }, align 16 + %a431 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a441 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a456 = alloca { ptr, i64, i64 }, align 16 + %a457 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a462 = alloca { ptr, i64, i64 }, align 16 + %a463 = alloca { ptr, i64, i64 }, align 16 + %a464 = alloca { ptr, i64, i64 }, align 16 + %a465 = alloca { ptr, i64, i64 }, align 16 + %a466 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a471 = alloca { ptr, i64, i64 }, align 16 + %a472 = alloca { ptr, i64, i64 }, align 16 + %a473 = alloca { ptr, i64, i64 }, align 16 + %a477 = alloca { ptr, i64, i64 }, align 16 + %a478 = alloca { ptr, i64, i64 }, align 16 + %a479 = alloca { ptr, i64, i64 }, align 16 + %a484 = alloca { ptr, i64, i64 }, align 16 + %a485 = alloca { ptr, i64, i64 }, align 16 + %a486 = alloca { ptr, i64, i64 }, align 16 + %a490 = alloca { ptr, i64, i64 }, align 16 + %a491 = alloca { ptr, i64, i64 }, align 16 + %a492 = alloca { ptr, i64, i64 }, align 16 + %a493 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a499 = alloca { ptr, i64, i64 }, align 16 + %a500 = alloca { ptr, i64, i64 }, align 16 + %a501 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a509 = alloca { ptr, i64, i64 }, align 16 + %a510 = alloca { ptr, i64, i64 }, align 16 + %a513 = alloca { ptr, i64, i64 }, align 16 + %a517 = alloca { ptr, i64, i64 }, align 16 + %a518 = alloca { ptr, i64, i64 }, align 16 + %a519 = alloca { ptr, i64, i64 }, align 16 + %a523 = alloca { ptr, i64, i64 }, align 16 + %a524 = alloca { ptr, i64, i64 }, align 16 + %a525 = alloca { ptr, i64, i64 }, align 16 + %a526 = alloca { ptr, i64, i64 }, align 16 + %a527 = alloca { ptr, i64, i64 }, align 16 + %a529 = alloca { ptr, i64, i64 }, align 16 + %a530 = alloca { ptr, i64, i64 }, align 16 + %a531 = alloca { ptr, i64, i64 }, align 16 + %a532 = alloca { ptr, i64, i64 }, align 16 + %a535 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca i64, align 16 + %a538 = alloca { ptr, i64, i64 }, align 16 + %a539 = alloca { ptr, i64, i64 }, align 16 + %a540 = alloca { ptr, i64, i64 }, align 16 + %a545 = alloca { ptr, i64, i64 }, align 16 + %a547 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca i64, align 16 + %a558 = alloca { ptr, i64, i64 }, align 16 + %a565 = alloca { ptr, i64, i64 }, align 16 + %a566 = alloca { ptr, i64, i64 }, align 16 + %a567 = alloca { ptr, i64, i64 }, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a571 = alloca { ptr, i64, i64 }, align 16 + %a572 = alloca { ptr, i64, i64 }, align 16 + %a580 = alloca { ptr, i64, i64 }, align 16 + store %S.linker.Build %p0, ptr %a1 + store %S.platform.Target %p1, ptr %a2 + store %S.cimport.CImports %p2, ptr %a3 + %t4 = extractvalue { ptr, i64, i64 } { ptr @.str.6895, i64 11, i64 0 }, 0 + %t5 = icmp eq ptr %t4, null + %t6 = select i1 %t5, ptr @.str.6896, ptr %t4 + %t7 = call ptr @getenv(ptr %t6) + store { ptr, i64, i64 } zeroinitializer, ptr %a8 + call void @finch_str_from_c(ptr %a8, ptr %t7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t9, ptr %a10 + call void @finch_str_copy(ptr %a11, ptr %a10) + %t12 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = icmp eq i64 %t15, 0 + br i1 %t16, label %then10255, label %endif10257 +then10255: + %t17 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } { ptr @.str.6897, i64 5, i64 0 }, ptr %a13 + store { ptr, i64, i64 } %t17, ptr %a18 + call void @finch_str_drop(ptr %a18) + br label %endif10257 +endif10257: + %t19 = load { ptr, i64, i64 }, ptr %a13 + store { ptr, i64, i64 } %t19, ptr %a20 + call void @finch_str_copy(ptr %a21, ptr %a20) + %t22 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 + %t25 = load i1, ptr %t24 + br i1 %t25, label %then10258, label %else10259 +then10258: + %t26 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 7 + %t27 = load { ptr, i64, i64 }, ptr %t26 + store { ptr, i64, i64 } %t27, ptr %a28 + call void @finch_str_copy(ptr %a29, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + %t31 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t30, ptr %a23 + store { ptr, i64, i64 } %t31, ptr %a32 + call void @finch_str_drop(ptr %a32) + br label %endif10260 +else10259: + %t33 = extractvalue { ptr, i64, i64 } { ptr @.str.6898, i64 8, i64 0 }, 0 + %t34 = icmp eq ptr %t33, null + %t35 = select i1 %t34, ptr @.str.6899, ptr %t33 + %t36 = call ptr @getenv(ptr %t35) + store { ptr, i64, i64 } zeroinitializer, ptr %a37 + call void @finch_str_from_c(ptr %a37, ptr %t36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp sgt i64 %t39, 0 + br i1 %t40, label %then10261, label %endif10263 +then10261: + %t41 = extractvalue { ptr, i64, i64 } { ptr @.str.6900, i64 8, i64 0 }, 0 + %t42 = icmp eq ptr %t41, null + %t43 = select i1 %t42, ptr @.str.6901, ptr %t41 + %t44 = call ptr @getenv(ptr %t43) + store { ptr, i64, i64 } zeroinitializer, ptr %a45 + call void @finch_str_from_c(ptr %a45, ptr %t44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_copy(ptr %a48, ptr %a47) + %t49 = load { ptr, i64, i64 }, ptr %a48 + %t50 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t49, ptr %a23 + store { ptr, i64, i64 } %t50, ptr %a51 + call void @finch_str_drop(ptr %a51) + br label %endif10263 +endif10263: + br label %endif10260 +endif10260: + %t52 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 2 + %t53 = load { ptr, i64, i64 }, ptr %t52 + %t54 = load %S.platform.Target, ptr %a2 + %t55 = load { ptr, i64, i64 }, ptr %a23 + %t56 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.linker.runtimeObject({ ptr, i64, i64 } %t53, %S.platform.Target %t54, { ptr, i64, i64 } %t55) + %t57 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 0 + %t58 = xor i1 %t57, true + %t59 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 2 + %t60 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t56, 1 + br i1 %t58, label %or.failed10264, label %or.ok10265 +or.failed10264: + store { ptr, i64, i64 } %t59, ptr %a61 + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = extractvalue { ptr, i64, i64 } %t62, 1 + %t64 = trunc i64 %t63 to i32 + %t65 = extractvalue { ptr, i64, i64 } %t62, 0 + %t66 = icmp eq ptr %t65, null + %t67 = select i1 %t66, ptr @.str.6902, ptr %t65 + %t68 = call i32 (ptr, ...) @printf(ptr @.str.6903, i32 %t64, ptr %t67) + %t69 = call i32 (ptr, ...) @printf(ptr @.str.6904) + call void @finch_str_drop(ptr %a61) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +or.ok10265: + store { ptr, i64, i64 } %t60, ptr %a70 + %t71 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t72 = load { ptr, i64, i64 }, ptr %t71 + store { ptr, i64, i64 } %t72, ptr %a74 + store { ptr, i64, i64 } { ptr @.str.6905, i64 3, i64 0 }, ptr %a75 + call void @finch_str_concat(ptr %a73, ptr %a74, ptr %a75) + %t76 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t76, ptr %a77 + %t78 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t79 = load { ptr, i64, i64 }, ptr %t78 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.6906, i64 2, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + %t83 = load { ptr, i64, i64 }, ptr %a80 + store { ptr, i64, i64 } %t83, ptr %a84 + %t85 = load { ptr, i64, i64 }, ptr %a77 + %t86 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 1 + %t87 = load { ptr, i64, i64 }, ptr %t86 + store { ptr, i64, i64 } %t85, ptr %a88 + store { ptr, i64, i64 } %t87, ptr %a89 + %t90 = call i32 @finch_write_file(ptr %a88, ptr %a89) + %t91 = icmp ne i32 %t90, 0 + store { ptr, i64, i64 } { ptr @.str.6907, i64 0, i64 0 }, ptr %a92 + %t93 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 5 + %t94 = load i1, ptr %t93 + br label %logic.from10266 +logic.from10266: + br i1 %t94, label %logic.end10268, label %logic.rhs10267 +logic.rhs10267: + %t95 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t96 = load i1, ptr %t95 + br label %logic.rend10269 +logic.rend10269: + br label %logic.end10268 +logic.end10268: + %t97 = phi i1 [ true, %logic.from10266 ], [ %t96, %logic.rend10269 ] + br i1 %t97, label %then10270, label %endif10272 +then10270: + %t98 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 0 + %t99 = load { ptr, i64, i64 }, ptr %t98 + store { ptr, i64, i64 } { ptr @.str.6908, i64 10, i64 0 }, ptr %a101 + store { ptr, i64, i64 } %t99, ptr %a102 + call void @finch_str_concat(ptr %a100, ptr %a101, ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a100 + %t104 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t103, ptr %a92 + store { ptr, i64, i64 } %t104, ptr %a105 + call void @finch_str_drop(ptr %a105) + br label %endif10272 +endif10272: + %t106 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a109 + store { ptr, i64, i64 } { ptr @.str.6909, i64 4, i64 0 }, ptr %a110 + call void @finch_str_concat(ptr %a108, ptr %a109, ptr %a110) + %t111 = load { ptr, i64, i64 }, ptr %a108 + store { ptr, i64, i64 } %t111, ptr %a112 + %t113 = load { ptr, i64, i64 }, ptr %a13 + %t114 = load { ptr, i64, i64 }, ptr %a92 + store { ptr, i64, i64 } %t113, ptr %a116 + store { ptr, i64, i64 } %t114, ptr %a117 + call void @finch_str_concat(ptr %a115, ptr %a116, ptr %a117) + %t118 = load { ptr, i64, i64 }, ptr %a115 + store { ptr, i64, i64 } %t118, ptr %a120 + store { ptr, i64, i64 } { ptr @.str.6910, i64 1, i64 0 }, ptr %a121 + call void @finch_str_concat(ptr %a119, ptr %a120, ptr %a121) + store { ptr, i64, i64 } %t118, ptr %a122 + call void @finch_str_drop(ptr %a122) + %t123 = load { ptr, i64, i64 }, ptr %a119 + %t124 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 3 + %t125 = load { ptr, i64, i64 }, ptr %t124 + store { ptr, i64, i64 } %t123, ptr %a127 + store { ptr, i64, i64 } %t125, ptr %a128 + call void @finch_str_concat(ptr %a126, ptr %a127, ptr %a128) + store { ptr, i64, i64 } %t123, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a126 + %t131 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 4 + %t132 = load { ptr, i64, i64 }, ptr %t131 + store { ptr, i64, i64 } %t130, ptr %a134 + store { ptr, i64, i64 } %t132, ptr %a135 + call void @finch_str_concat(ptr %a133, ptr %a134, ptr %a135) + store { ptr, i64, i64 } %t130, ptr %a136 + call void @finch_str_drop(ptr %a136) + %t137 = load { ptr, i64, i64 }, ptr %a133 + store { ptr, i64, i64 } %t137, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.6911, i64 7, i64 0 }, ptr %a140 + call void @finch_str_concat(ptr %a138, ptr %a139, ptr %a140) + store { ptr, i64, i64 } %t137, ptr %a141 + call void @finch_str_drop(ptr %a141) + %t142 = load { ptr, i64, i64 }, ptr %a138 + %t143 = load { ptr, i64, i64 }, ptr %a77 + %t144 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t143) + store { ptr, i64, i64 } %t142, ptr %a146 + store { ptr, i64, i64 } %t144, ptr %a147 + call void @finch_str_concat(ptr %a145, ptr %a146, ptr %a147) + store { ptr, i64, i64 } %t142, ptr %a148 + call void @finch_str_drop(ptr %a148) + store { ptr, i64, i64 } %t144, ptr %a149 + call void @finch_str_drop(ptr %a149) + %t150 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t150, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.6912, i64 4, i64 0 }, ptr %a153 + call void @finch_str_concat(ptr %a151, ptr %a152, ptr %a153) + store { ptr, i64, i64 } %t150, ptr %a154 + call void @finch_str_drop(ptr %a154) + %t155 = load { ptr, i64, i64 }, ptr %a151 + %t156 = load { ptr, i64, i64 }, ptr %a84 + %t157 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t156) + store { ptr, i64, i64 } %t155, ptr %a159 + store { ptr, i64, i64 } %t157, ptr %a160 + call void @finch_str_concat(ptr %a158, ptr %a159, ptr %a160) + store { ptr, i64, i64 } %t155, ptr %a161 + call void @finch_str_drop(ptr %a161) + store { ptr, i64, i64 } %t157, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a158 + store { ptr, i64, i64 } %t163, ptr %a165 + store { ptr, i64, i64 } { ptr @.str.6913, i64 3, i64 0 }, ptr %a166 + call void @finch_str_concat(ptr %a164, ptr %a165, ptr %a166) + store { ptr, i64, i64 } %t163, ptr %a167 + call void @finch_str_drop(ptr %a167) + %t168 = load { ptr, i64, i64 }, ptr %a164 + %t169 = load { ptr, i64, i64 }, ptr %a112 + %t170 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t169) + store { ptr, i64, i64 } %t168, ptr %a172 + store { ptr, i64, i64 } %t170, ptr %a173 + call void @finch_str_concat(ptr %a171, ptr %a172, ptr %a173) + store { ptr, i64, i64 } %t168, ptr %a174 + call void @finch_str_drop(ptr %a174) + store { ptr, i64, i64 } %t170, ptr %a175 + call void @finch_str_drop(ptr %a175) + %t176 = load { ptr, i64, i64 }, ptr %a171 + store { ptr, i64, i64 } %t176, ptr %a178 + store { ptr, i64, i64 } { ptr @.str.6914, i64 5, i64 0 }, ptr %a179 + call void @finch_str_concat(ptr %a177, ptr %a178, ptr %a179) + store { ptr, i64, i64 } %t176, ptr %a180 + call void @finch_str_drop(ptr %a180) + %t181 = load { ptr, i64, i64 }, ptr %a177 + %t182 = call i64 @finch.host.run({ ptr, i64, i64 } %t181) + store { ptr, i64, i64 } %t181, ptr %a183 + call void @finch_str_drop(ptr %a183) + store i64 %t182, ptr %a184 + %t185 = load { ptr, i64, i64 }, ptr %a77 + call void @finch.host.remove({ ptr, i64, i64 } %t185) + %t186 = load i64, ptr %a184 + %t187 = icmp ne i64 %t186, 0 + br i1 %t187, label %then10273, label %endif10275 +then10273: + %t188 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t188, ptr %a189 + store { ptr, i64, i64 } zeroinitializer, ptr %a190 + store { ptr, i64, i64 } zeroinitializer, ptr %a191 + %t192 = call i32 @finch_try_read_file(ptr %a190, ptr %a189, ptr %a191) + %t193 = icmp eq i32 %t192, 0 + %t194 = load { ptr, i64, i64 }, ptr %a191 + %t195 = load { ptr, i64, i64 }, ptr %a190 + br i1 %t193, label %or.failed10276, label %or.ok10277 +or.failed10276: + store { ptr, i64, i64 } %t194, ptr %a196 + call void @finch_str_drop(ptr %a196) + br label %or.bend10278 +or.bend10278: + br label %or.end10279 +or.ok10277: + br label %or.end10279 +or.end10279: + %t197 = phi { ptr, i64, i64 } [ { ptr @.str.6915, i64 0, i64 0 }, %or.bend10278 ], [ %t195, %or.ok10277 ] + %t198 = extractvalue { ptr, i64, i64 } %t197, 1 + %t199 = trunc i64 %t198 to i32 + %t200 = extractvalue { ptr, i64, i64 } %t197, 0 + %t201 = icmp eq ptr %t200, null + %t202 = select i1 %t201, ptr @.str.6916, ptr %t200 + %t203 = call i32 (ptr, ...) @printf(ptr @.str.6917, i32 %t199, ptr %t202) + store { ptr, i64, i64 } %t197, ptr %a204 + call void @finch_str_drop(ptr %a204) + %t205 = call i32 (ptr, ...) @printf(ptr @.str.6918) + %t206 = extractvalue { ptr, i64, i64 } { ptr @.str.6919, i64 46, i64 0 }, 1 + %t207 = trunc i64 %t206 to i32 + %t208 = extractvalue { ptr, i64, i64 } { ptr @.str.6919, i64 46, i64 0 }, 0 + %t209 = icmp eq ptr %t208, null + %t210 = select i1 %t209, ptr @.str.6920, ptr %t208 + %t211 = call i32 (ptr, ...) @printf(ptr @.str.6921, i32 %t207, ptr %t210) + %t212 = call i32 (ptr, ...) @printf(ptr @.str.6922) + %t213 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t213) + %t214 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t214) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +endif10275: + %t215 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t215, ptr %a217 + store { ptr, i64, i64 } { ptr @.str.6923, i64 1, i64 0 }, ptr %a218 + call void @finch_str_concat(ptr %a216, ptr %a217, ptr %a218) + %t219 = load { ptr, i64, i64 }, ptr %a216 + %t220 = load { ptr, i64, i64 }, ptr %a84 + %t221 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t220) + store { ptr, i64, i64 } %t219, ptr %a223 + store { ptr, i64, i64 } %t221, ptr %a224 + call void @finch_str_concat(ptr %a222, ptr %a223, ptr %a224) + store { ptr, i64, i64 } %t219, ptr %a225 + call void @finch_str_drop(ptr %a225) + store { ptr, i64, i64 } %t221, ptr %a226 + call void @finch_str_drop(ptr %a226) + %t227 = load { ptr, i64, i64 }, ptr %a222 + store { ptr, i64, i64 } %t227, ptr %a229 + store { ptr, i64, i64 } { ptr @.str.6924, i64 1, i64 0 }, ptr %a230 + call void @finch_str_concat(ptr %a228, ptr %a229, ptr %a230) + store { ptr, i64, i64 } %t227, ptr %a231 + call void @finch_str_drop(ptr %a231) + %t232 = load { ptr, i64, i64 }, ptr %a228 + %t233 = load { ptr, i64, i64 }, ptr %a70 + %t234 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t233) + store { ptr, i64, i64 } %t232, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t232, ptr %a238 + call void @finch_str_drop(ptr %a238) + store { ptr, i64, i64 } %t234, ptr %a239 + call void @finch_str_drop(ptr %a239) + %t240 = load { ptr, i64, i64 }, ptr %a235 + store { ptr, i64, i64 } %t240, ptr %a242 + store { ptr, i64, i64 } { ptr @.str.6925, i64 4, i64 0 }, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t240, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + %t246 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t247 = load { ptr, i64, i64 }, ptr %t246 + %t248 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t247) + store { ptr, i64, i64 } %t245, ptr %a250 + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch_str_concat(ptr %a249, ptr %a250, ptr %a251) + store { ptr, i64, i64 } %t245, ptr %a252 + call void @finch_str_drop(ptr %a252) + store { ptr, i64, i64 } %t248, ptr %a253 + call void @finch_str_drop(ptr %a253) + %t254 = load { ptr, i64, i64 }, ptr %a249 + store { ptr, i64, i64 } %t254, ptr %a255 + %t256 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 2 + %t257 = load i1, ptr %t256 + %t258 = xor i1 %t257, true + br i1 %t258, label %then10280, label %endif10282 +then10280: + %t259 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t259, ptr %a261 + store { ptr, i64, i64 } { ptr @.str.6926, i64 4, i64 0 }, ptr %a262 + call void @finch_str_concat(ptr %a260, ptr %a261, ptr %a262) + %t263 = load { ptr, i64, i64 }, ptr %a260 + %t264 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t263, ptr %a255 + store { ptr, i64, i64 } %t264, ptr %a265 + call void @finch_str_drop(ptr %a265) + br label %endif10282 +endif10282: + %t266 = extractvalue { ptr, i64, i64 } { ptr @.str.6927, i64 13, i64 0 }, 0 + %t267 = icmp eq ptr %t266, null + %t268 = select i1 %t267, ptr @.str.6928, ptr %t266 + %t269 = call ptr @getenv(ptr %t268) + store { ptr, i64, i64 } zeroinitializer, ptr %a270 + call void @finch_str_from_c(ptr %a270, ptr %t269) + %t271 = load { ptr, i64, i64 }, ptr %a270 + %t272 = extractvalue { ptr, i64, i64 } %t271, 1 + %t273 = icmp sgt i64 %t272, 0 + br i1 %t273, label %then10283, label %endif10285 +then10283: + %t274 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t274, ptr %a276 + store { ptr, i64, i64 } { ptr @.str.6929, i64 1, i64 0 }, ptr %a277 + call void @finch_str_concat(ptr %a275, ptr %a276, ptr %a277) + %t278 = load { ptr, i64, i64 }, ptr %a275 + %t279 = extractvalue { ptr, i64, i64 } { ptr @.str.6930, i64 13, i64 0 }, 0 + %t280 = icmp eq ptr %t279, null + %t281 = select i1 %t280, ptr @.str.6931, ptr %t279 + %t282 = call ptr @getenv(ptr %t281) + store { ptr, i64, i64 } zeroinitializer, ptr %a283 + call void @finch_str_from_c(ptr %a283, ptr %t282) + %t284 = load { ptr, i64, i64 }, ptr %a283 + store { ptr, i64, i64 } %t278, ptr %a286 + store { ptr, i64, i64 } %t284, ptr %a287 + call void @finch_str_concat(ptr %a285, ptr %a286, ptr %a287) + store { ptr, i64, i64 } %t278, ptr %a288 + call void @finch_str_drop(ptr %a288) + %t289 = load { ptr, i64, i64 }, ptr %a285 + %t290 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t289, ptr %a255 + store { ptr, i64, i64 } %t290, ptr %a291 + call void @finch_str_drop(ptr %a291) + br label %endif10285 +endif10285: + %t292 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 5 + %t293 = load i1, ptr %t292 + br i1 %t293, label %then10286, label %endif10288 +then10286: + %t294 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 3 + %t295 = load i1, ptr %t294 + br i1 %t295, label %then10289, label %else10290 +then10289: + %t296 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t296, ptr %a298 + store { ptr, i64, i64 } { ptr @.str.6932, i64 12, i64 0 }, ptr %a299 + call void @finch_str_concat(ptr %a297, ptr %a298, ptr %a299) + %t300 = load { ptr, i64, i64 }, ptr %a297 + %t301 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t300, ptr %a255 + store { ptr, i64, i64 } %t301, ptr %a302 + call void @finch_str_drop(ptr %a302) + br label %endif10291 +else10290: + %t303 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t303, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.6933, i64 8, i64 0 }, ptr %a306 + call void @finch_str_concat(ptr %a304, ptr %a305, ptr %a306) + %t307 = load { ptr, i64, i64 }, ptr %a304 + %t308 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t307, ptr %a255 + store { ptr, i64, i64 } %t308, ptr %a309 + call void @finch_str_drop(ptr %a309) + br label %endif10291 +endif10291: + br label %endif10288 +endif10288: + store { ptr, i64, i64 } zeroinitializer, ptr %a310 + %t311 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 6 + store i64 0, ptr %a312 + br label %each.cond10292 +each.cond10292: + %t313 = getelementptr inbounds { ptr, i64, i64 }, ptr %t311, i32 0, i32 1 + %t314 = load i64, ptr %t313 + %t315 = load i64, ptr %a312 + %t316 = icmp slt i64 %t315, %t314 + br i1 %t316, label %each.body10293, label %each.end10295 +each.body10293: + %t317 = load ptr, ptr %t311 + %t318 = getelementptr inbounds { ptr, i64, i64 }, ptr %t317, i64 %t315 + %t319 = load { ptr, i64, i64 }, ptr %t318 + store { ptr, i64, i64 } %t319, ptr %a320 + %t321 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t321, ptr %a322 + store { ptr, i64, i64 } { ptr @.str.6935, i64 2, i64 0 }, ptr %a324 + %t325 = call i32 @finch_str_ends(ptr %a322, ptr %a324) + %t326 = icmp ne i32 %t325, 0 + br i1 %t326, label %then10296, label %else10297 +then10296: + %t327 = getelementptr inbounds %S.linker.Build, ptr %a1, i32 0, i32 0 + %t328 = load { ptr, i64, i64 }, ptr %t327 + store { ptr, i64, i64 } %t328, ptr %a330 + store { ptr, i64, i64 } { ptr @.str.6936, i64 1, i64 0 }, ptr %a331 + call void @finch_str_concat(ptr %a329, ptr %a330, ptr %a331) + %t332 = load { ptr, i64, i64 }, ptr %a329 + %t333 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t334 = load i64, ptr %t333 + call void @finch_str_from_int(ptr %a335, i64 %t334) + %t336 = load { ptr, i64, i64 }, ptr %a335 + store { ptr, i64, i64 } %t332, ptr %a338 + store { ptr, i64, i64 } %t336, ptr %a339 + call void @finch_str_concat(ptr %a337, ptr %a338, ptr %a339) + store { ptr, i64, i64 } %t332, ptr %a340 + call void @finch_str_drop(ptr %a340) + store { ptr, i64, i64 } %t336, ptr %a341 + call void @finch_str_drop(ptr %a341) + %t342 = load { ptr, i64, i64 }, ptr %a337 + store { ptr, i64, i64 } %t342, ptr %a344 + store { ptr, i64, i64 } { ptr @.str.6937, i64 2, i64 0 }, ptr %a345 + call void @finch_str_concat(ptr %a343, ptr %a344, ptr %a345) + store { ptr, i64, i64 } %t342, ptr %a346 + call void @finch_str_drop(ptr %a346) + %t347 = load { ptr, i64, i64 }, ptr %a343 + store { ptr, i64, i64 } %t347, ptr %a348 + store { ptr, i64, i64 } { ptr @.str.6938, i64 6, i64 0 }, ptr %a349 + %t350 = getelementptr inbounds %S.platform.Target, ptr %a2, i32 0, i32 1 + %t351 = load i1, ptr %t350 + br i1 %t351, label %then10299, label %endif10301 +then10299: + %t352 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } { ptr @.str.6939, i64 0, i64 0 }, ptr %a349 + store { ptr, i64, i64 } %t352, ptr %a353 + call void @finch_str_drop(ptr %a353) + br label %endif10301 +endif10301: + %t354 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t354, ptr %a356 + store { ptr, i64, i64 } { ptr @.str.6940, i64 4, i64 0 }, ptr %a357 + call void @finch_str_concat(ptr %a355, ptr %a356, ptr %a357) + %t358 = load { ptr, i64, i64 }, ptr %a355 + %t359 = load { ptr, i64, i64 }, ptr %a349 + store { ptr, i64, i64 } %t358, ptr %a361 + store { ptr, i64, i64 } %t359, ptr %a362 + call void @finch_str_concat(ptr %a360, ptr %a361, ptr %a362) + store { ptr, i64, i64 } %t358, ptr %a363 + call void @finch_str_drop(ptr %a363) + %t364 = load { ptr, i64, i64 }, ptr %a360 + store { ptr, i64, i64 } %t364, ptr %a366 + store { ptr, i64, i64 } { ptr @.str.6941, i64 4, i64 0 }, ptr %a367 + call void @finch_str_concat(ptr %a365, ptr %a366, ptr %a367) + store { ptr, i64, i64 } %t364, ptr %a368 + call void @finch_str_drop(ptr %a368) + %t369 = load { ptr, i64, i64 }, ptr %a365 + %t370 = load { ptr, i64, i64 }, ptr %a320 + %t371 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t370) + store { ptr, i64, i64 } %t369, ptr %a373 + store { ptr, i64, i64 } %t371, ptr %a374 + call void @finch_str_concat(ptr %a372, ptr %a373, ptr %a374) + store { ptr, i64, i64 } %t369, ptr %a375 + call void @finch_str_drop(ptr %a375) + store { ptr, i64, i64 } %t371, ptr %a376 + call void @finch_str_drop(ptr %a376) + %t377 = load { ptr, i64, i64 }, ptr %a372 + store { ptr, i64, i64 } %t377, ptr %a379 + store { ptr, i64, i64 } { ptr @.str.6942, i64 4, i64 0 }, ptr %a380 + call void @finch_str_concat(ptr %a378, ptr %a379, ptr %a380) + store { ptr, i64, i64 } %t377, ptr %a381 + call void @finch_str_drop(ptr %a381) + %t382 = load { ptr, i64, i64 }, ptr %a378 + %t383 = load { ptr, i64, i64 }, ptr %a348 + %t384 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t383) + store { ptr, i64, i64 } %t382, ptr %a386 + store { ptr, i64, i64 } %t384, ptr %a387 + call void @finch_str_concat(ptr %a385, ptr %a386, ptr %a387) + store { ptr, i64, i64 } %t382, ptr %a388 + call void @finch_str_drop(ptr %a388) + store { ptr, i64, i64 } %t384, ptr %a389 + call void @finch_str_drop(ptr %a389) + %t390 = load { ptr, i64, i64 }, ptr %a385 + store { ptr, i64, i64 } %t390, ptr %a392 + store { ptr, i64, i64 } { ptr @.str.6943, i64 3, i64 0 }, ptr %a393 + call void @finch_str_concat(ptr %a391, ptr %a392, ptr %a393) + store { ptr, i64, i64 } %t390, ptr %a394 + call void @finch_str_drop(ptr %a394) + %t395 = load { ptr, i64, i64 }, ptr %a391 + %t396 = load { ptr, i64, i64 }, ptr %a112 + %t397 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t396) + store { ptr, i64, i64 } %t395, ptr %a399 + store { ptr, i64, i64 } %t397, ptr %a400 + call void @finch_str_concat(ptr %a398, ptr %a399, ptr %a400) + store { ptr, i64, i64 } %t395, ptr %a401 + call void @finch_str_drop(ptr %a401) + store { ptr, i64, i64 } %t397, ptr %a402 + call void @finch_str_drop(ptr %a402) + %t403 = load { ptr, i64, i64 }, ptr %a398 + store { ptr, i64, i64 } %t403, ptr %a405 + store { ptr, i64, i64 } { ptr @.str.6944, i64 5, i64 0 }, ptr %a406 + call void @finch_str_concat(ptr %a404, ptr %a405, ptr %a406) + store { ptr, i64, i64 } %t403, ptr %a407 + call void @finch_str_drop(ptr %a407) + %t408 = load { ptr, i64, i64 }, ptr %a404 + %t409 = call i64 @finch.host.run({ ptr, i64, i64 } %t408) + store { ptr, i64, i64 } %t408, ptr %a410 + call void @finch_str_drop(ptr %a410) + store i64 %t409, ptr %a411 + %t412 = load i64, ptr %a411 + %t413 = icmp ne i64 %t412, 0 + br i1 %t413, label %then10302, label %endif10304 +then10302: + %t414 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t414, ptr %a415 + store { ptr, i64, i64 } zeroinitializer, ptr %a416 + store { ptr, i64, i64 } zeroinitializer, ptr %a417 + %t418 = call i32 @finch_try_read_file(ptr %a416, ptr %a415, ptr %a417) + %t419 = icmp eq i32 %t418, 0 + %t420 = load { ptr, i64, i64 }, ptr %a417 + %t421 = load { ptr, i64, i64 }, ptr %a416 + br i1 %t419, label %or.failed10305, label %or.ok10306 +or.failed10305: + store { ptr, i64, i64 } %t420, ptr %a422 + call void @finch_str_drop(ptr %a422) + br label %or.bend10307 +or.bend10307: + br label %or.end10308 +or.ok10306: + br label %or.end10308 +or.end10308: + %t423 = phi { ptr, i64, i64 } [ { ptr @.str.6945, i64 0, i64 0 }, %or.bend10307 ], [ %t421, %or.ok10306 ] + store { ptr, i64, i64 } %t423, ptr %a425 + store { ptr, i64, i64 } { ptr @.str.6946, i64 24, i64 0 }, ptr %a426 + call void @finch_str_concat(ptr %a424, ptr %a425, ptr %a426) + store { ptr, i64, i64 } %t423, ptr %a427 + call void @finch_str_drop(ptr %a427) + %t428 = load { ptr, i64, i64 }, ptr %a424 + %t429 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t428, ptr %a431 + store { ptr, i64, i64 } %t429, ptr %a432 + call void @finch_str_concat(ptr %a430, ptr %a431, ptr %a432) + store { ptr, i64, i64 } %t428, ptr %a433 + call void @finch_str_drop(ptr %a433) + %t434 = load { ptr, i64, i64 }, ptr %a430 + %t435 = extractvalue { ptr, i64, i64 } %t434, 1 + %t436 = trunc i64 %t435 to i32 + %t437 = extractvalue { ptr, i64, i64 } %t434, 0 + %t438 = icmp eq ptr %t437, null + %t439 = select i1 %t438, ptr @.str.6947, ptr %t437 + %t440 = call i32 (ptr, ...) @printf(ptr @.str.6948, i32 %t436, ptr %t439) + store { ptr, i64, i64 } %t434, ptr %a441 + call void @finch_str_drop(ptr %a441) + %t442 = call i32 (ptr, ...) @printf(ptr @.str.6949) + %t443 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t443) + %t444 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t444) + %t445 = load { ptr, i64, i64 }, ptr %a348 + call void @finch.host.remove({ ptr, i64, i64 } %t445) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +endif10304: + %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t447 = load { ptr, i64, i64 }, ptr %a348 + store { ptr, i64, i64 } %t447, ptr %a448 + call void @finch_str_copy(ptr %a449, ptr %a448) + %t450 = load { ptr, i64, i64 }, ptr %a449 + %t451 = load i64, ptr %t446 + %t452 = add i64 %t451, 1 + call void @finch_arr_reserve(ptr %a310, i64 %t452, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t453 = load ptr, ptr %a310 + %t454 = getelementptr inbounds { ptr, i64, i64 }, ptr %t453, i64 %t451 + store { ptr, i64, i64 } %t450, ptr %t454 + store i64 %t452, ptr %t446 + %t455 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t455, ptr %a457 + store { ptr, i64, i64 } { ptr @.str.6950, i64 1, i64 0 }, ptr %a458 + call void @finch_str_concat(ptr %a456, ptr %a457, ptr %a458) + %t459 = load { ptr, i64, i64 }, ptr %a456 + %t460 = load { ptr, i64, i64 }, ptr %a348 + %t461 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t460) + store { ptr, i64, i64 } %t459, ptr %a463 + store { ptr, i64, i64 } %t461, ptr %a464 + call void @finch_str_concat(ptr %a462, ptr %a463, ptr %a464) + store { ptr, i64, i64 } %t459, ptr %a465 + call void @finch_str_drop(ptr %a465) + store { ptr, i64, i64 } %t461, ptr %a466 + call void @finch_str_drop(ptr %a466) + %t467 = load { ptr, i64, i64 }, ptr %a462 + %t468 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t467, ptr %a255 + store { ptr, i64, i64 } %t468, ptr %a469 + call void @finch_str_drop(ptr %a469) + call void @finch_str_drop(ptr %a349) + call void @finch_str_drop(ptr %a348) + br label %endif10298 +else10297: + %t470 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t470, ptr %a471 + store { ptr, i64, i64 } { ptr @.str.6952, i64 2, i64 0 }, ptr %a473 + %t474 = call i32 @finch_str_ends(ptr %a471, ptr %a473) + %t475 = icmp ne i32 %t474, 0 + br label %logic.from10309 +logic.from10309: + br i1 %t475, label %logic.end10311, label %logic.rhs10310 +logic.rhs10310: + %t476 = load { ptr, i64, i64 }, ptr %a320 + store { ptr, i64, i64 } %t476, ptr %a477 + store { ptr, i64, i64 } { ptr @.str.6954, i64 2, i64 0 }, ptr %a479 + %t480 = call i32 @finch_str_ends(ptr %a477, ptr %a479) + %t481 = icmp ne i32 %t480, 0 + br label %logic.rend10312 +logic.rend10312: + br label %logic.end10311 +logic.end10311: + %t482 = phi i1 [ true, %logic.from10309 ], [ %t481, %logic.rend10312 ] + br i1 %t482, label %then10313, label %else10314 +then10313: + %t483 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t483, ptr %a485 + store { ptr, i64, i64 } { ptr @.str.6955, i64 1, i64 0 }, ptr %a486 + call void @finch_str_concat(ptr %a484, ptr %a485, ptr %a486) + %t487 = load { ptr, i64, i64 }, ptr %a484 + %t488 = load { ptr, i64, i64 }, ptr %a320 + %t489 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t488) + store { ptr, i64, i64 } %t487, ptr %a491 + store { ptr, i64, i64 } %t489, ptr %a492 + call void @finch_str_concat(ptr %a490, ptr %a491, ptr %a492) + store { ptr, i64, i64 } %t487, ptr %a493 + call void @finch_str_drop(ptr %a493) + store { ptr, i64, i64 } %t489, ptr %a494 + call void @finch_str_drop(ptr %a494) + %t495 = load { ptr, i64, i64 }, ptr %a490 + %t496 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t495, ptr %a255 + store { ptr, i64, i64 } %t496, ptr %a497 + call void @finch_str_drop(ptr %a497) + br label %endif10315 +else10314: + %t498 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t498, ptr %a500 + store { ptr, i64, i64 } { ptr @.str.6956, i64 1, i64 0 }, ptr %a501 + call void @finch_str_concat(ptr %a499, ptr %a500, ptr %a501) + %t502 = load { ptr, i64, i64 }, ptr %a499 + %t503 = load { ptr, i64, i64 }, ptr %a320 + %t504 = load %S.platform.Target, ptr %a2 + %t505 = call { ptr, i64, i64 } @finch.linker.libFlags({ ptr, i64, i64 } %t503, %S.platform.Target %t504) + store { ptr, i64, i64 } %t502, ptr %a507 + store { ptr, i64, i64 } %t505, ptr %a508 + call void @finch_str_concat(ptr %a506, ptr %a507, ptr %a508) + store { ptr, i64, i64 } %t502, ptr %a509 + call void @finch_str_drop(ptr %a509) + store { ptr, i64, i64 } %t505, ptr %a510 + call void @finch_str_drop(ptr %a510) + %t511 = load { ptr, i64, i64 }, ptr %a506 + %t512 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t511, ptr %a255 + store { ptr, i64, i64 } %t512, ptr %a513 + call void @finch_str_drop(ptr %a513) + br label %endif10315 +endif10315: + br label %endif10298 +endif10298: + br label %each.step10294 +each.step10294: + %t514 = load i64, ptr %a312 + %t515 = add i64 %t514, 1 + store i64 %t515, ptr %a312 + br label %each.cond10292 +each.end10295: + %t516 = load { ptr, i64, i64 }, ptr %a255 + store { ptr, i64, i64 } %t516, ptr %a518 + store { ptr, i64, i64 } { ptr @.str.6957, i64 3, i64 0 }, ptr %a519 + call void @finch_str_concat(ptr %a517, ptr %a518, ptr %a519) + %t520 = load { ptr, i64, i64 }, ptr %a517 + %t521 = load { ptr, i64, i64 }, ptr %a112 + %t522 = call { ptr, i64, i64 } @finch.linker.quote({ ptr, i64, i64 } %t521) + store { ptr, i64, i64 } %t520, ptr %a524 + store { ptr, i64, i64 } %t522, ptr %a525 + call void @finch_str_concat(ptr %a523, ptr %a524, ptr %a525) + store { ptr, i64, i64 } %t520, ptr %a526 + call void @finch_str_drop(ptr %a526) + store { ptr, i64, i64 } %t522, ptr %a527 + call void @finch_str_drop(ptr %a527) + %t528 = load { ptr, i64, i64 }, ptr %a523 + store { ptr, i64, i64 } %t528, ptr %a530 + store { ptr, i64, i64 } { ptr @.str.6958, i64 5, i64 0 }, ptr %a531 + call void @finch_str_concat(ptr %a529, ptr %a530, ptr %a531) + store { ptr, i64, i64 } %t528, ptr %a532 + call void @finch_str_drop(ptr %a532) + %t533 = load { ptr, i64, i64 }, ptr %a529 + %t534 = call i64 @finch.host.run({ ptr, i64, i64 } %t533) + store { ptr, i64, i64 } %t533, ptr %a535 + call void @finch_str_drop(ptr %a535) + store i64 %t534, ptr %a536 + %t537 = load { ptr, i64, i64 }, ptr %a112 + store { ptr, i64, i64 } %t537, ptr %a538 + store { ptr, i64, i64 } zeroinitializer, ptr %a539 + store { ptr, i64, i64 } zeroinitializer, ptr %a540 + %t541 = call i32 @finch_try_read_file(ptr %a539, ptr %a538, ptr %a540) + %t542 = icmp eq i32 %t541, 0 + %t543 = load { ptr, i64, i64 }, ptr %a540 + %t544 = load { ptr, i64, i64 }, ptr %a539 + br i1 %t542, label %or.failed10316, label %or.ok10317 +or.failed10316: + store { ptr, i64, i64 } %t543, ptr %a545 + call void @finch_str_drop(ptr %a545) + br label %or.bend10318 +or.bend10318: + br label %or.end10319 +or.ok10317: + br label %or.end10319 +or.end10319: + %t546 = phi { ptr, i64, i64 } [ { ptr @.str.6959, i64 0, i64 0 }, %or.bend10318 ], [ %t544, %or.ok10317 ] + store { ptr, i64, i64 } %t546, ptr %a547 + %t548 = load { ptr, i64, i64 }, ptr %a84 + call void @finch.host.remove({ ptr, i64, i64 } %t548) + %t549 = load { ptr, i64, i64 }, ptr %a112 + call void @finch.host.remove({ ptr, i64, i64 } %t549) + store i64 0, ptr %a550 + br label %each.cond10320 +each.cond10320: + %t551 = getelementptr inbounds { ptr, i64, i64 }, ptr %a310, i32 0, i32 1 + %t552 = load i64, ptr %t551 + %t553 = load i64, ptr %a550 + %t554 = icmp slt i64 %t553, %t552 + br i1 %t554, label %each.body10321, label %each.end10323 +each.body10321: + %t555 = load ptr, ptr %a310 + %t556 = getelementptr inbounds { ptr, i64, i64 }, ptr %t555, i64 %t553 + %t557 = load { ptr, i64, i64 }, ptr %t556 + store { ptr, i64, i64 } %t557, ptr %a558 + %t559 = load { ptr, i64, i64 }, ptr %a558 + call void @finch.host.remove({ ptr, i64, i64 } %t559) + br label %each.step10322 +each.step10322: + %t560 = load i64, ptr %a550 + %t561 = add i64 %t560, 1 + store i64 %t561, ptr %a550 + br label %each.cond10320 +each.end10323: + %t562 = load i64, ptr %a536 + %t563 = icmp eq i64 %t562, 127 + br i1 %t563, label %then10324, label %endif10326 +then10324: + %t564 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } { ptr @.str.6960, i64 42, i64 0 }, ptr %a566 + store { ptr, i64, i64 } %t564, ptr %a567 + call void @finch_str_concat(ptr %a565, ptr %a566, ptr %a567) + %t568 = load { ptr, i64, i64 }, ptr %a565 + store { ptr, i64, i64 } %t568, ptr %a570 + store { ptr, i64, i64 } { ptr @.str.6961, i64 32, i64 0 }, ptr %a571 + call void @finch_str_concat(ptr %a569, ptr %a570, ptr %a571) + store { ptr, i64, i64 } %t568, ptr %a572 + call void @finch_str_drop(ptr %a572) + %t573 = load { ptr, i64, i64 }, ptr %a569 + %t574 = extractvalue { ptr, i64, i64 } %t573, 1 + %t575 = trunc i64 %t574 to i32 + %t576 = extractvalue { ptr, i64, i64 } %t573, 0 + %t577 = icmp eq ptr %t576, null + %t578 = select i1 %t577, ptr @.str.6962, ptr %t576 + %t579 = call i32 (ptr, ...) @printf(ptr @.str.6963, i32 %t575, ptr %t578) + store { ptr, i64, i64 } %t573, ptr %a580 + call void @finch_str_drop(ptr %a580) + %t581 = call i32 (ptr, ...) @printf(ptr @.str.6964) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 1 +endif10326: + %t582 = load i64, ptr %a536 + %t583 = icmp ne i64 %t582, 0 + br i1 %t583, label %then10327, label %endif10329 +then10327: + %t584 = load { ptr, i64, i64 }, ptr %a547 + %t585 = load %S.cimport.CImports, ptr %a3 + %t586 = load %S.platform.Target, ptr %a2 + %t587 = call i64 @finch.linker.linkFailed({ ptr, i64, i64 } %t584, %S.cimport.CImports %t585, %S.platform.Target %t586) + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 %t587 +endif10329: + %t588 = getelementptr inbounds { ptr, i64, i64 }, ptr %a547, i32 0, i32 1 + %t589 = load i64, ptr %t588 + %t590 = icmp sgt i64 %t589, 0 + br i1 %t590, label %then10330, label %endif10332 +then10330: + %t591 = load { ptr, i64, i64 }, ptr %a547 + %t592 = extractvalue { ptr, i64, i64 } %t591, 1 + %t593 = trunc i64 %t592 to i32 + %t594 = extractvalue { ptr, i64, i64 } %t591, 0 + %t595 = icmp eq ptr %t594, null + %t596 = select i1 %t595, ptr @.str.6965, ptr %t594 + %t597 = call i32 (ptr, ...) @printf(ptr @.str.6966, i32 %t593, ptr %t596) + %t598 = call i32 (ptr, ...) @printf(ptr @.str.6967) + br label %endif10332 +endif10332: + call void @finch_str_drop(ptr %a547) + call void @finch.drop.arr_str(ptr %a310) + call void @finch_str_drop(ptr %a255) + call void @finch_str_drop(ptr %a112) + call void @finch_str_drop(ptr %a92) + call void @finch_str_drop(ptr %a84) + call void @finch_str_drop(ptr %a77) + call void @finch_str_drop(ptr %a70) + call void @finch_str_drop(ptr %a23) + call void @finch_str_drop(ptr %a13) + ret i64 0 +} + +define internal i64 @finch.lsp.hexval(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 48 + br label %logic.from10333 +logic.from10333: + br i1 %t3, label %logic.rhs10334, label %logic.end10335 +logic.rhs10334: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 57 + br label %logic.rend10336 +logic.rend10336: + br label %logic.end10335 +logic.end10335: + %t6 = phi i1 [ false, %logic.from10333 ], [ %t5, %logic.rend10336 ] + br i1 %t6, label %then10337, label %endif10339 +then10337: + %t7 = load i8, ptr %a1 + %t8 = zext i8 %t7 to i64 + %t9 = zext i8 48 to i64 + %t10 = sub i64 %t8, %t9 + ret i64 %t10 +endif10339: + %t11 = load i8, ptr %a1 + %t12 = icmp uge i8 %t11, 97 + br label %logic.from10340 +logic.from10340: + br i1 %t12, label %logic.rhs10341, label %logic.end10342 +logic.rhs10341: + %t13 = load i8, ptr %a1 + %t14 = icmp ule i8 %t13, 102 + br label %logic.rend10343 +logic.rend10343: + br label %logic.end10342 +logic.end10342: + %t15 = phi i1 [ false, %logic.from10340 ], [ %t14, %logic.rend10343 ] + br i1 %t15, label %then10344, label %endif10346 +then10344: + %t16 = load i8, ptr %a1 + %t17 = zext i8 %t16 to i64 + %t18 = zext i8 97 to i64 + %t19 = sub i64 %t17, %t18 + %t20 = add i64 %t19, 10 + ret i64 %t20 +endif10346: + %t21 = load i8, ptr %a1 + %t22 = icmp uge i8 %t21, 65 + br label %logic.from10347 +logic.from10347: + br i1 %t22, label %logic.rhs10348, label %logic.end10349 +logic.rhs10348: + %t23 = load i8, ptr %a1 + %t24 = icmp ule i8 %t23, 70 + br label %logic.rend10350 +logic.rend10350: + br label %logic.end10349 +logic.end10349: + %t25 = phi i1 [ false, %logic.from10347 ], [ %t24, %logic.rend10350 ] + br i1 %t25, label %then10351, label %endif10353 +then10351: + %t26 = load i8, ptr %a1 + %t27 = zext i8 %t26 to i64 + %t28 = zext i8 65 to i64 + %t29 = sub i64 %t27, %t28 + %t30 = add i64 %t29, 10 + ret i64 %t30 +endif10353: + ret i64 -1 +} + +define internal void @finch.drop.arr_u8(ptr %a) { +entry: + + call void @finch_arr_free(ptr %a) + ret void +} + +define internal { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i64, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t7, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.6969, i64 7, i64 0 }, ptr %a10 + %t11 = call i32 @finch_str_starts(ptr %a8, ptr %a10) + %t12 = icmp ne i32 %t11, 0 + br i1 %t12, label %then10354, label %endif10356 +then10354: + %t13 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t13, ptr %a14 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t17 = load i64, ptr %t16 + call void @finch_str_sub(ptr %a15, ptr %a14, i64 7, i64 %t17, ptr @.str.6970, i64 114) + %t18 = load { ptr, i64, i64 }, ptr %a15 + %t19 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t18, ptr %a6 + store { ptr, i64, i64 } %t19, ptr %a20 + call void @finch_str_drop(ptr %a20) + br label %endif10356 +endif10356: + store { ptr, i64, i64 } zeroinitializer, ptr %a21 + store i64 0, ptr %a22 + br label %while.cond10357 +while.cond10357: + %t23 = load i64, ptr %a22 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = icmp slt i64 %t23, %t25 + br i1 %t26, label %while.body10358, label %while.end10359 +while.body10358: + %t27 = load i64, ptr %a22 + %t28 = load { ptr, i64, i64 }, ptr %a6 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 %t27, %t29 + br i1 %t30, label %range10360, label %inrange10361 +range10360: + call void @finch_panic_index(ptr @.str.6971, i64 119, i64 %t27, i64 %t29) + unreachable +inrange10361: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds i8, ptr %t31, i64 %t27 + %t33 = load i8, ptr %t32 + %t34 = icmp eq i8 %t33, 37 + br label %logic.from10362 +logic.from10362: + br i1 %t34, label %logic.rhs10363, label %logic.end10364 +logic.rhs10363: + %t35 = load i64, ptr %a22 + %t36 = add i64 %t35, 2 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a6, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 0 + %t40 = icmp slt i64 %t36, %t39 + br label %logic.rend10365 +logic.rend10365: + br label %logic.end10364 +logic.end10364: + %t41 = phi i1 [ false, %logic.from10362 ], [ %t40, %logic.rend10365 ] + br label %logic.from10366 +logic.from10366: + br i1 %t41, label %logic.rhs10367, label %logic.end10368 +logic.rhs10367: + %t42 = load i64, ptr %a22 + %t43 = add i64 %t42, 1 + %t44 = load { ptr, i64, i64 }, ptr %a6 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 %t43, %t45 + br i1 %t46, label %range10369, label %inrange10370 +range10369: + call void @finch_panic_index(ptr @.str.6972, i64 119, i64 %t43, i64 %t45) + unreachable +inrange10370: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 + %t49 = load i8, ptr %t48 + %t50 = call i64 @finch.lsp.hexval(i8 %t49) + %t51 = icmp sge i64 %t50, 0 + br label %logic.rend10371 +logic.rend10371: + br label %logic.end10368 +logic.end10368: + %t52 = phi i1 [ false, %logic.from10366 ], [ %t51, %logic.rend10371 ] + br label %logic.from10372 +logic.from10372: + br i1 %t52, label %logic.rhs10373, label %logic.end10374 +logic.rhs10373: + %t53 = load i64, ptr %a22 + %t54 = add i64 %t53, 2 + %t55 = load { ptr, i64, i64 }, ptr %a6 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range10375, label %inrange10376 +range10375: + call void @finch_panic_index(ptr @.str.6973, i64 119, i64 %t54, i64 %t56) + unreachable +inrange10376: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 + %t60 = load i8, ptr %t59 + %t61 = call i64 @finch.lsp.hexval(i8 %t60) + %t62 = icmp sge i64 %t61, 0 + br label %logic.rend10377 +logic.rend10377: + br label %logic.end10374 +logic.end10374: + %t63 = phi i1 [ false, %logic.from10372 ], [ %t62, %logic.rend10377 ] + br i1 %t63, label %then10378, label %else10379 +then10378: + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 + %t65 = load i64, ptr %a22 + %t66 = add i64 %t65, 1 + %t67 = load { ptr, i64, i64 }, ptr %a6 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 %t66, %t68 + br i1 %t69, label %range10381, label %inrange10382 +range10381: + call void @finch_panic_index(ptr @.str.6974, i64 120, i64 %t66, i64 %t68) + unreachable +inrange10382: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds i8, ptr %t70, i64 %t66 + %t72 = load i8, ptr %t71 + %t73 = call i64 @finch.lsp.hexval(i8 %t72) + %t74 = mul i64 %t73, 16 + %t75 = load i64, ptr %a22 + %t76 = add i64 %t75, 2 + %t77 = load { ptr, i64, i64 }, ptr %a6 + %t78 = extractvalue { ptr, i64, i64 } %t77, 1 + %t79 = icmp uge i64 %t76, %t78 + br i1 %t79, label %range10383, label %inrange10384 +range10383: + call void @finch_panic_index(ptr @.str.6975, i64 120, i64 %t76, i64 %t78) + unreachable +inrange10384: + %t80 = extractvalue { ptr, i64, i64 } %t77, 0 + %t81 = getelementptr inbounds i8, ptr %t80, i64 %t76 + %t82 = load i8, ptr %t81 + %t83 = call i64 @finch.lsp.hexval(i8 %t82) + %t84 = add i64 %t74, %t83 + %t85 = trunc i64 %t84 to i8 + %t86 = load i64, ptr %t64 + %t87 = add i64 %t86, 1 + call void @finch_arr_reserve(ptr %a21, i64 %t87, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t88 = load ptr, ptr %a21 + %t89 = getelementptr inbounds i8, ptr %t88, i64 %t86 + store i8 %t85, ptr %t89 + store i64 %t87, ptr %t64 + %t90 = load i64, ptr %a22 + %t91 = add i64 %t90, 3 + store i64 %t91, ptr %a22 + br label %endif10380 +else10379: + %t92 = getelementptr inbounds { ptr, i64, i64 }, ptr %a21, i32 0, i32 1 + %t93 = load i64, ptr %a22 + %t94 = load { ptr, i64, i64 }, ptr %a6 + %t95 = extractvalue { ptr, i64, i64 } %t94, 1 + %t96 = icmp uge i64 %t93, %t95 + br i1 %t96, label %range10385, label %inrange10386 +range10385: + call void @finch_panic_index(ptr @.str.6976, i64 123, i64 %t93, i64 %t95) + unreachable +inrange10386: + %t97 = extractvalue { ptr, i64, i64 } %t94, 0 + %t98 = getelementptr inbounds i8, ptr %t97, i64 %t93 + %t99 = load i8, ptr %t98 + %t100 = load i64, ptr %t92 + %t101 = add i64 %t100, 1 + call void @finch_arr_reserve(ptr %a21, i64 %t101, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t102 = load ptr, ptr %a21 + %t103 = getelementptr inbounds i8, ptr %t102, i64 %t100 + store i8 %t99, ptr %t103 + store i64 %t101, ptr %t92 + %t104 = load i64, ptr %a22 + %t105 = add i64 %t104, 1 + store i64 %t105, ptr %a22 + br label %endif10380 +endif10380: + br label %while.cond10357 +while.end10359: + %t106 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } zeroinitializer, ptr %a107 + store { ptr, i64, i64 } %t106, ptr %a108 + call void @finch_str_from_bytes(ptr %a107, ptr %a108) + %t109 = load { ptr, i64, i64 }, ptr %a107 + call void @finch.drop.arr_u8(ptr %a21) + call void @finch_str_drop(ptr %a6) + ret { ptr, i64, i64 } %t109 +} + +define internal { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a18 = alloca i8, align 16 + %a21 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.6977, i64 16, i64 0 }, ptr %a2 + %t3 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t4 = call ptr @finch_alloc(i64 %t3) + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i64 0 + store { ptr, i64, i64 } { ptr @.str.6978, i64 7, i64 0 }, ptr %t5 + %t6 = insertvalue { ptr, i64, i64 } undef, ptr %t4, 0 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 1 + %t8 = insertvalue { ptr, i64, i64 } %t7, i64 1, 2 + store { ptr, i64, i64 } %t8, ptr %a9 + store i64 0, ptr %a10 + br label %each.cond10387 +each.cond10387: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = load i64, ptr %a10 + %t14 = icmp slt i64 %t13, %t12 + br i1 %t14, label %each.body10388, label %each.end10390 +each.body10388: + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds i8, ptr %t15, i64 %t13 + %t17 = load i8, ptr %t16 + store i8 %t17, ptr %a18 + %t19 = load i8, ptr %a18 + %t20 = zext i8 %t19 to i64 + store i64 %t20, ptr %a21 + %t22 = load i8, ptr %a18 + %t23 = icmp uge i8 %t22, 97 + br label %logic.from10391 +logic.from10391: + br i1 %t23, label %logic.rhs10392, label %logic.end10393 +logic.rhs10392: + %t24 = load i8, ptr %a18 + %t25 = icmp ule i8 %t24, 122 + br label %logic.rend10394 +logic.rend10394: + br label %logic.end10393 +logic.end10393: + %t26 = phi i1 [ false, %logic.from10391 ], [ %t25, %logic.rend10394 ] + br label %logic.from10395 +logic.from10395: + br i1 %t26, label %logic.end10397, label %logic.rhs10396 +logic.rhs10396: + %t27 = load i8, ptr %a18 + %t28 = icmp uge i8 %t27, 65 + br label %logic.from10398 +logic.from10398: + br i1 %t28, label %logic.rhs10399, label %logic.end10400 +logic.rhs10399: + %t29 = load i8, ptr %a18 + %t30 = icmp ule i8 %t29, 90 + br label %logic.rend10401 +logic.rend10401: + br label %logic.end10400 +logic.end10400: + %t31 = phi i1 [ false, %logic.from10398 ], [ %t30, %logic.rend10401 ] + br label %logic.rend10402 +logic.rend10402: + br label %logic.end10397 +logic.end10397: + %t32 = phi i1 [ true, %logic.from10395 ], [ %t31, %logic.rend10402 ] + br label %logic.from10403 +logic.from10403: + br i1 %t32, label %logic.end10405, label %logic.rhs10404 +logic.rhs10404: + %t33 = load i8, ptr %a18 + %t34 = icmp uge i8 %t33, 48 + br label %logic.from10406 +logic.from10406: + br i1 %t34, label %logic.rhs10407, label %logic.end10408 +logic.rhs10407: + %t35 = load i8, ptr %a18 + %t36 = icmp ule i8 %t35, 57 + br label %logic.rend10409 +logic.rend10409: + br label %logic.end10408 +logic.end10408: + %t37 = phi i1 [ false, %logic.from10406 ], [ %t36, %logic.rend10409 ] + br label %logic.rend10410 +logic.rend10410: + br label %logic.end10405 +logic.end10405: + %t38 = phi i1 [ true, %logic.from10403 ], [ %t37, %logic.rend10410 ] + br label %logic.from10411 +logic.from10411: + br i1 %t38, label %logic.end10413, label %logic.rhs10412 +logic.rhs10412: + store { ptr, i64, i64 } { ptr @.str.6979, i64 5, i64 0 }, ptr %a39 + %t41 = load i8, ptr %a18 + call void @finch_str_from_char(ptr %a42, i8 signext %t41) + %t43 = load { ptr, i64, i64 }, ptr %a42 + store { ptr, i64, i64 } %t43, ptr %a44 + %t45 = call i64 @finch_str_find(ptr %a39, ptr %a44) + %t46 = icmp sge i64 %t45, 0 + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %logic.rend10414 +logic.rend10414: + br label %logic.end10413 +logic.end10413: + %t48 = phi i1 [ true, %logic.from10411 ], [ %t46, %logic.rend10414 ] + br i1 %t48, label %then10415, label %else10416 +then10415: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t50 = load i8, ptr %a18 + call void @finch_str_from_char(ptr %a51, i8 signext %t50) + %t52 = load { ptr, i64, i64 }, ptr %a51 + %t53 = load i64, ptr %t49 + %t54 = add i64 %t53, 1 + call void @finch_arr_reserve(ptr %a9, i64 %t54, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t55 = load ptr, ptr %a9 + %t56 = getelementptr inbounds { ptr, i64, i64 }, ptr %t55, i64 %t53 + store { ptr, i64, i64 } %t52, ptr %t56 + store i64 %t54, ptr %t49 + br label %endif10417 +else10416: + %t57 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t58 = load i64, ptr %a21 + %t59 = sdiv i64 %t58, 16 + %t60 = srem i64 %t59, 16 + %t61 = load { ptr, i64, i64 }, ptr %a2 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 %t60, %t62 + br i1 %t63, label %range10418, label %inrange10419 +range10418: + call void @finch_panic_index(ptr @.str.6982, i64 138, i64 %t60, i64 %t62) + unreachable +inrange10419: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 + %t66 = load i8, ptr %t65 + call void @finch_str_from_char(ptr %a67, i8 signext %t66) + %t68 = load { ptr, i64, i64 }, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.6981, i64 1, i64 0 }, ptr %a70 + store { ptr, i64, i64 } %t68, ptr %a71 + call void @finch_str_concat(ptr %a69, ptr %a70, ptr %a71) + store { ptr, i64, i64 } %t68, ptr %a72 + call void @finch_str_drop(ptr %a72) + %t73 = load { ptr, i64, i64 }, ptr %a69 + %t74 = load i64, ptr %a21 + %t75 = srem i64 %t74, 16 + %t76 = load { ptr, i64, i64 }, ptr %a2 + %t77 = extractvalue { ptr, i64, i64 } %t76, 1 + %t78 = icmp uge i64 %t75, %t77 + br i1 %t78, label %range10420, label %inrange10421 +range10420: + call void @finch_panic_index(ptr @.str.6983, i64 138, i64 %t75, i64 %t77) + unreachable +inrange10421: + %t79 = extractvalue { ptr, i64, i64 } %t76, 0 + %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 + %t81 = load i8, ptr %t80 + call void @finch_str_from_char(ptr %a82, i8 signext %t81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + store { ptr, i64, i64 } %t73, ptr %a85 + store { ptr, i64, i64 } %t83, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + store { ptr, i64, i64 } %t73, ptr %a87 + call void @finch_str_drop(ptr %a87) + store { ptr, i64, i64 } %t83, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a84 + %t90 = load i64, ptr %t57 + %t91 = add i64 %t90, 1 + call void @finch_arr_reserve(ptr %a9, i64 %t91, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t92 = load ptr, ptr %a9 + %t93 = getelementptr inbounds { ptr, i64, i64 }, ptr %t92, i64 %t90 + store { ptr, i64, i64 } %t89, ptr %t93 + store i64 %t91, ptr %t57 + br label %endif10417 +endif10417: + br label %each.step10389 +each.step10389: + %t94 = load i64, ptr %a10 + %t95 = add i64 %t94, 1 + store i64 %t95, ptr %a10 + br label %each.cond10387 +each.end10390: + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6984, i64 0, i64 0 }, ptr %a97 + call void @finch_str_join(ptr %a98, ptr %a9, ptr %a97) + %t99 = load { ptr, i64, i64 }, ptr %a98 + call void @finch.drop.arr_str(ptr %a9) + call void @finch_str_drop(ptr %a2) + ret { ptr, i64, i64 } %t99 +} + +define internal { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + store i64 0, ptr %a3 + br label %while.cond10422 +while.cond10422: + %t4 = load i64, ptr %a3 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = icmp slt i64 %t4, %t6 + br i1 %t7, label %while.body10423, label %while.end10424 +while.body10423: + %t8 = load i64, ptr %a3 + %t9 = load { ptr, i64, i64 }, ptr %a1 + %t10 = extractvalue { ptr, i64, i64 } %t9, 1 + %t11 = icmp uge i64 %t8, %t10 + br i1 %t11, label %range10425, label %inrange10426 +range10425: + call void @finch_panic_index(ptr @.str.6985, i64 149, i64 %t8, i64 %t10) + unreachable +inrange10426: + %t12 = extractvalue { ptr, i64, i64 } %t9, 0 + %t13 = getelementptr inbounds i8, ptr %t12, i64 %t8 + %t14 = load i8, ptr %t13 + %t15 = icmp eq i8 %t14, 92 + br label %logic.from10427 +logic.from10427: + br i1 %t15, label %logic.rhs10428, label %logic.end10429 +logic.rhs10428: + %t16 = load i64, ptr %a3 + %t17 = add i64 %t16, 1 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp slt i64 %t17, %t19 + br label %logic.rend10430 +logic.rend10430: + br label %logic.end10429 +logic.end10429: + %t21 = phi i1 [ false, %logic.from10427 ], [ %t20, %logic.rend10430 ] + br i1 %t21, label %then10431, label %else10432 +then10431: + %t22 = load i64, ptr %a3 + %t23 = add i64 %t22, 1 + %t24 = load { ptr, i64, i64 }, ptr %a1 + %t25 = extractvalue { ptr, i64, i64 } %t24, 1 + %t26 = icmp uge i64 %t23, %t25 + br i1 %t26, label %range10434, label %inrange10435 +range10434: + call void @finch_panic_index(ptr @.str.6986, i64 150, i64 %t23, i64 %t25) + unreachable +inrange10435: + %t27 = extractvalue { ptr, i64, i64 } %t24, 0 + %t28 = getelementptr inbounds i8, ptr %t27, i64 %t23 + %t29 = load i8, ptr %t28 + %t30 = icmp eq i8 %t29, 110 + br i1 %t30, label %then10436, label %else10437 +then10436: + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = add i64 %t32, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t33, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t34 = load ptr, ptr %a2 + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %t34, i64 %t32 + store { ptr, i64, i64 } { ptr @.str.6987, i64 1, i64 0 }, ptr %t35 + store i64 %t33, ptr %t31 + br label %endif10438 +else10437: + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t37 = load i64, ptr %a3 + %t38 = add i64 %t37, 1 + %t39 = load { ptr, i64, i64 }, ptr %a1 + %t40 = extractvalue { ptr, i64, i64 } %t39, 1 + %t41 = icmp uge i64 %t38, %t40 + br i1 %t41, label %range10439, label %inrange10440 +range10439: + call void @finch_panic_index(ptr @.str.6988, i64 153, i64 %t38, i64 %t40) + unreachable +inrange10440: + %t42 = extractvalue { ptr, i64, i64 } %t39, 0 + %t43 = getelementptr inbounds i8, ptr %t42, i64 %t38 + %t44 = load i8, ptr %t43 + call void @finch_str_from_char(ptr %a45, i8 signext %t44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + %t47 = load i64, ptr %t36 + %t48 = add i64 %t47, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t49 = load ptr, ptr %a2 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 + store { ptr, i64, i64 } %t46, ptr %t50 + store i64 %t48, ptr %t36 + br label %endif10438 +endif10438: + %t51 = load i64, ptr %a3 + %t52 = add i64 %t51, 2 + store i64 %t52, ptr %a3 + br label %endif10433 +else10432: + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t54 = load i64, ptr %a3 + %t55 = load { ptr, i64, i64 }, ptr %a1 + %t56 = extractvalue { ptr, i64, i64 } %t55, 1 + %t57 = icmp uge i64 %t54, %t56 + br i1 %t57, label %range10441, label %inrange10442 +range10441: + call void @finch_panic_index(ptr @.str.6989, i64 157, i64 %t54, i64 %t56) + unreachable +inrange10442: + %t58 = extractvalue { ptr, i64, i64 } %t55, 0 + %t59 = getelementptr inbounds i8, ptr %t58, i64 %t54 + %t60 = load i8, ptr %t59 + call void @finch_str_from_char(ptr %a61, i8 signext %t60) + %t62 = load { ptr, i64, i64 }, ptr %a61 + %t63 = load i64, ptr %t53 + %t64 = add i64 %t63, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t64, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t65 = load ptr, ptr %a2 + %t66 = getelementptr inbounds { ptr, i64, i64 }, ptr %t65, i64 %t63 + store { ptr, i64, i64 } %t62, ptr %t66 + store i64 %t64, ptr %t53 + %t67 = load i64, ptr %a3 + %t68 = add i64 %t67, 1 + store i64 %t68, ptr %a3 + br label %endif10433 +endif10433: + br label %while.cond10422 +while.end10424: + %t69 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.6990, i64 0, i64 0 }, ptr %a70 + call void @finch_str_join(ptr %a71, ptr %a2, ptr %a70) + %t72 = load { ptr, i64, i64 }, ptr %a71 + call void @finch.drop.arr_str(ptr %a2) + ret { ptr, i64, i64 } %t72 +} + +define internal { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %p0, i64 %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.6992, i64 1, i64 0 }, ptr %a6 + call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load i64, ptr %a2 + %t11 = icmp sge i64 %t10, 1 + br label %logic.from10443 +logic.from10443: + br i1 %t11, label %logic.rhs10444, label %logic.end10445 +logic.rhs10444: + %t12 = load i64, ptr %a2 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sle i64 %t12, %t14 + br label %logic.rend10446 +logic.rend10446: + br label %logic.end10445 +logic.end10445: + %t16 = phi i1 [ false, %logic.from10443 ], [ %t15, %logic.rend10446 ] + br i1 %t16, label %then10447, label %endif10449 +then10447: + %t17 = load i64, ptr %a2 + %t18 = sub i64 %t17, 1 + %t19 = load { ptr, i64, i64 }, ptr %a9 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range10450, label %inrange10451 +range10450: + call void @finch_panic_index(ptr @.str.6993, i64 167, i64 %t18, i64 %t20) + unreachable +inrange10451: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %t22, i64 %t18 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + call void @finch.drop.arr_str(ptr %a9) + ret { ptr, i64, i64 } %t27 +endif10449: + call void @finch.drop.arr_str(ptr %a9) + ret { ptr, i64, i64 } { ptr @.str.6994, i64 0, i64 0 } +} + +define internal { ptr, i64, i64 } @finch.lsp.readLine() { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i32, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } zeroinitializer, ptr %a1 + br label %while.cond10452 +while.cond10452: + br label %while.body10453 +while.body10453: + %t2 = call i32 @getchar() + store i32 %t2, ptr %a3 + %t4 = load i32, ptr %a3 + %t5 = icmp slt i32 %t4, 0 + br i1 %t5, label %then10455, label %endif10457 +then10455: + call void @finch.drop.arr_u8(ptr %a1) + ret { ptr, i64, i64 } { ptr @.str.6995, i64 0, i64 0 } +endif10457: + %t6 = load i32, ptr %a3 + %t7 = icmp eq i32 %t6, 10 + br i1 %t7, label %then10458, label %endif10460 +then10458: + br label %while.end10454 +endif10460: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t9 = load i32, ptr %a3 + %t10 = trunc i32 %t9 to i8 + %t11 = load i64, ptr %t8 + %t12 = add i64 %t11, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t12, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t13 = load ptr, ptr %a1 + %t14 = getelementptr inbounds i8, ptr %t13, i64 %t11 + store i8 %t10, ptr %t14 + store i64 %t12, ptr %t8 + br label %while.cond10452 +while.end10454: + %t15 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a16 + store { ptr, i64, i64 } %t15, ptr %a17 + call void @finch_str_from_bytes(ptr %a16, ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a16 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t20, ptr %a21 + store { ptr, i64, i64 } { ptr @.str.6997, i64 1, i64 0 }, ptr %a23 + %t24 = call i32 @finch_str_ends(ptr %a21, ptr %a23) + %t25 = icmp ne i32 %t24, 0 + br i1 %t25, label %then10461, label %endif10463 +then10461: + %t26 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t26, ptr %a27 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %a19, i32 0, i32 1 + %t30 = load i64, ptr %t29 + %t31 = sub i64 %t30, 1 + call void @finch_str_sub(ptr %a28, ptr %a27, i64 0, i64 %t31, ptr @.str.6998, i64 188) + %t32 = load { ptr, i64, i64 }, ptr %a28 + %t33 = load { ptr, i64, i64 }, ptr %a19 + store { ptr, i64, i64 } %t32, ptr %a19 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_drop(ptr %a34) + br label %endif10463 +endif10463: + %t35 = load { ptr, i64, i64 }, ptr %a19 + call void @finch.drop.arr_u8(ptr %a1) + ret { ptr, i64, i64 } %t35 +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() { +entry: + %a1 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca i64, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca i64, align 16 + %a45 = alloca i32, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + store i64 0, ptr %a1 + br label %while.cond10464 +while.cond10464: + br label %while.body10465 +while.body10465: + %t2 = call { ptr, i64, i64 } @finch.lsp.readLine() + store { ptr, i64, i64 } %t2, ptr %a3 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = icmp eq i64 %t5, 0 + br i1 %t6, label %then10467, label %endif10469 +then10467: + %t7 = load i64, ptr %a1 + %t8 = icmp sgt i64 %t7, 0 + br i1 %t8, label %then10470, label %endif10472 +then10470: + call void @finch_str_drop(ptr %a3) + br label %while.end10466 +endif10472: + %t9 = call ptr @finch_std_stream(i32 0) + %t10 = call i32 @feof(ptr %t9) + %t11 = icmp ne i32 %t10, 0 + br i1 %t11, label %then10473, label %endif10475 +then10473: + call void @finch_str_drop(ptr %a3) + %t12 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.6999, i64 32, i64 0 }, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t12 +endif10475: + call void @finch_str_drop(ptr %a3) + br label %while.cond10464 +endif10469: + %t13 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.7001, i64 15, i64 0 }, ptr %a16 + %t17 = call i32 @finch_str_starts(ptr %a14, ptr %a16) + %t18 = icmp ne i32 %t17, 0 + br i1 %t18, label %then10476, label %endif10478 +then10476: + %t19 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t19, ptr %a20 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t23 = load i64, ptr %t22 + call void @finch_str_sub(ptr %a21, ptr %a20, i64 15, i64 %t23, ptr @.str.7002, i64 208) + %t24 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_trim(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + store { ptr, i64, i64 } zeroinitializer, ptr %a29 + store i64 0, ptr %a30 + store { ptr, i64, i64 } %t27, ptr %a31 + %t32 = call i32 @finch_str_try_int(ptr %a31, ptr %a30, ptr %a29) + %t33 = icmp eq i32 %t32, 0 + %t34 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t27, ptr %a35 + call void @finch_str_drop(ptr %a35) + %t36 = load i64, ptr %a30 + br i1 %t33, label %or.failed10479, label %or.ok10480 +or.failed10479: + store { ptr, i64, i64 } %t34, ptr %a37 + call void @finch_str_drop(ptr %a37) + br label %or.bend10481 +or.bend10481: + br label %or.end10482 +or.ok10480: + br label %or.end10482 +or.end10482: + %t38 = phi i64 [ 0, %or.bend10481 ], [ %t36, %or.ok10480 ] + store i64 %t38, ptr %a1 + br label %endif10478 +endif10478: + call void @finch_str_drop(ptr %a3) + br label %while.cond10464 +while.end10466: + store { ptr, i64, i64 } zeroinitializer, ptr %a39 + %t40 = load i64, ptr %a1 + store i64 0, ptr %a41 + br label %for.cond10483 +for.cond10483: + %t42 = load i64, ptr %a41 + %t43 = icmp slt i64 %t42, %t40 + br i1 %t43, label %for.body10484, label %for.end10486 +for.body10484: + %t44 = call i32 @getchar() + store i32 %t44, ptr %a45 + %t46 = load i32, ptr %a45 + %t47 = icmp slt i32 %t46, 0 + br i1 %t47, label %then10487, label %endif10489 +then10487: + call void @finch.drop.arr_u8(ptr %a39) + %t48 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } { ptr @.str.7004, i64 25, i64 0 }, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t48 +endif10489: + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %a39, i32 0, i32 1 + %t50 = load i32, ptr %a45 + %t51 = trunc i32 %t50 to i8 + %t52 = load i64, ptr %t49 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %a39, i64 %t53, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %a39 + %t55 = getelementptr inbounds i8, ptr %t54, i64 %t52 + store i8 %t51, ptr %t55 + store i64 %t53, ptr %t49 + br label %for.step10485 +for.step10485: + %t56 = load i64, ptr %a41 + %t57 = add i64 %t56, 1 + store i64 %t57, ptr %a41 + br label %for.cond10483 +for.end10486: + %t58 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } zeroinitializer, ptr %a59 + store { ptr, i64, i64 } %t58, ptr %a60 + call void @finch_str_from_bytes(ptr %a59, ptr %a60) + %t61 = load { ptr, i64, i64 }, ptr %a59 + %t62 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %t61) + %t63 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 0 + %t64 = xor i1 %t63, true + %t65 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 2 + %t66 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t62, 1 + store { ptr, i64, i64 } %t61, ptr %a67 + call void @finch_str_drop(ptr %a67) + br i1 %t64, label %try.failed10490, label %try.ok10491 +try.failed10490: + call void @finch.drop.arr_u8(ptr %a39) + %t68 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t65, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t68 +try.ok10491: + call void @finch.drop.arr_u8(ptr %a39) + %t69 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t70 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t69, %S.json.Json %t66, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t70 +} + +define internal void @finch.lsp.send(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = load %S.json.Json, ptr %a1 + %t3 = call { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %t2) + store { ptr, i64, i64 } %t3, ptr %a4 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t6 = load i64, ptr %t5 + call void @finch_str_from_int(ptr %a7, i64 %t6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.7005, i64 16, i64 0 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + store { ptr, i64, i64 } %t8, ptr %a12 + call void @finch_str_drop(ptr %a12) + %t13 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t13, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.7006, i64 4, i64 0 }, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + store { ptr, i64, i64 } %t13, ptr %a17 + call void @finch_str_drop(ptr %a17) + %t18 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t18, ptr %a19 + %t20 = load { ptr, i64, i64 }, ptr %a19 + %t21 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t20, ptr %a23 + store { ptr, i64, i64 } %t21, ptr %a24 + call void @finch_str_concat(ptr %a22, ptr %a23, ptr %a24) + %t25 = load { ptr, i64, i64 }, ptr %a22 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = load { ptr, i64, i64 }, ptr %a26 + %t28 = extractvalue { ptr, i64, i64 } %t27, 0 + %t29 = icmp eq ptr %t28, null + %t30 = select i1 %t29, ptr @.str.7007, ptr %t28 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = call ptr @finch_std_stream(i32 1) + %t34 = call i64 @fwrite(ptr %t30, i64 1, i64 %t32, ptr %t33) + %t35 = call ptr @finch_std_stream(i32 1) + %t36 = call i32 @fflush(ptr %t35) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a19) + call void @finch_str_drop(ptr %a4) + ret void +} + +define internal void @finch.drop.arr_S_json_Json(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10492 +n.cond10492: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10493, label %n.end10494 +n.body10493: + %t7 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t5 + call void @finch.drop.S_json_Json(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10492 +n.end10494: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_json_Json(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_S_json_Json(ptr %t2) + %t3 = getelementptr inbounds %S.json.Json, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t3) + ret void +} + +define internal void @finch.lsp.reply(%S.json.Json %p0, %S.json.Json %p1) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca %S.json.Json, align 16 + %a4 = alloca %S.json.Json, align 16 + %a6 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + store %S.json.Json %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t3, ptr %a4 + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7009, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7008, i64 7, i64 0 }, %S.json.Json %t5) + store %S.json.Json %t5, ptr %a6 + call void @finch.drop.S_json_Json(ptr %a6) + %t7 = load %S.json.Json, ptr %a1 + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7010, i64 2, i64 0 }, %S.json.Json %t7) + %t8 = load %S.json.Json, ptr %a2 + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7011, i64 6, i64 0 }, %S.json.Json %t8) + %t9 = load %S.json.Json, ptr %a4 + call void @finch.lsp.send(%S.json.Json %t9) + call void @finch.drop.S_json_Json(ptr %a4) + ret void +} + +define internal void @finch.lsp.notify({ ptr, i64, i64 } %p0, %S.json.Json %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.json.Json, align 16 + %a4 = alloca %S.json.Json, align 16 + %a6 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.json.Json %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t3, ptr %a4 + %t5 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7013, i64 3, i64 0 }) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7012, i64 7, i64 0 }, %S.json.Json %t5) + store %S.json.Json %t5, ptr %a6 + call void @finch.drop.S_json_Json(ptr %a6) + %t7 = load { ptr, i64, i64 }, ptr %a1 + %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7014, i64 6, i64 0 }, %S.json.Json %t8) + store %S.json.Json %t8, ptr %a9 + call void @finch.drop.S_json_Json(ptr %a9) + %t10 = load %S.json.Json, ptr %a2 + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7015, i64 6, i64 0 }, %S.json.Json %t10) + %t11 = load %S.json.Json, ptr %a4 + call void @finch.lsp.send(%S.json.Json %t11) + call void @finch.drop.S_json_Json(ptr %a4) + ret void +} + +define internal %S.json.Json @finch.lsp.num(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + store i64 %p0, ptr %a1 + %t2 = load i64, ptr %a1 + %t3 = sitofp i64 %t2 to double + %t4 = call %S.json.Json @finch.json.new_number(double %t3) + ret %S.json.Json %t4 +} + +define internal %S.json.Json @finch.lsp.position(i64 %p0, i64 %p1) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i64, align 16 + %a4 = alloca %S.json.Json, align 16 + %a7 = alloca %S.json.Json, align 16 + %a10 = alloca %S.json.Json, align 16 + store i64 %p0, ptr %a1 + store i64 %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t3, ptr %a4 + %t5 = load i64, ptr %a1 + %t6 = call %S.json.Json @finch.lsp.num(i64 %t5) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7016, i64 4, i64 0 }, %S.json.Json %t6) + store %S.json.Json %t6, ptr %a7 + call void @finch.drop.S_json_Json(ptr %a7) + %t8 = load i64, ptr %a2 + %t9 = call %S.json.Json @finch.lsp.num(i64 %t8) + call void @finch.json.Json.set(ptr %a4, { ptr, i64, i64 } { ptr @.str.7017, i64 9, i64 0 }, %S.json.Json %t9) + store %S.json.Json %t9, ptr %a10 + call void @finch.drop.S_json_Json(ptr %a10) + %t11 = load %S.json.Json, ptr %a4 + ret %S.json.Json %t11 +} + +define internal %S.json.Json @finch.lsp.range(i64 %p0, i64 %p1, i64 %p2) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a5 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + %a13 = alloca %S.json.Json, align 16 + store i64 %p0, ptr %a1 + store i64 %p1, ptr %a2 + store i64 %p2, ptr %a3 + %t4 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t4, ptr %a5 + %t6 = load i64, ptr %a1 + %t7 = load i64, ptr %a2 + %t8 = call %S.json.Json @finch.lsp.position(i64 %t6, i64 %t7) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7018, i64 5, i64 0 }, %S.json.Json %t8) + store %S.json.Json %t8, ptr %a9 + call void @finch.drop.S_json_Json(ptr %a9) + %t10 = load i64, ptr %a1 + %t11 = load i64, ptr %a3 + %t12 = call %S.json.Json @finch.lsp.position(i64 %t10, i64 %t11) + call void @finch.json.Json.set(ptr %a5, { ptr, i64, i64 } { ptr @.str.7019, i64 3, i64 0 }, %S.json.Json %t12) + store %S.json.Json %t12, ptr %a13 + call void @finch.drop.S_json_Json(ptr %a13) + %t14 = load %S.json.Json, ptr %a5 + ret %S.json.Json %t14 +} + +define internal { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.7021, i64 1, i64 0 }, ptr %a5 + call void @finch_str_split(ptr %a6, ptr %a3, ptr %a5) + %t7 = load { ptr, i64, i64 }, ptr %a6 + ret { ptr, i64, i64 } %t7 +} + +define internal i64 @finch.lsp.intOf({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a3 + store i64 0, ptr %a4 + store { ptr, i64, i64 } %t2, ptr %a5 + %t6 = call i32 @finch_str_try_int(ptr %a5, ptr %a4, ptr %a3) + %t7 = icmp eq i32 %t6, 0 + %t8 = load { ptr, i64, i64 }, ptr %a3 + %t9 = load i64, ptr %a4 + br i1 %t7, label %or.failed10495, label %or.ok10496 +or.failed10495: + store { ptr, i64, i64 } %t8, ptr %a10 + call void @finch_str_drop(ptr %a10) + br label %or.bend10497 +or.bend10497: + br label %or.end10498 +or.ok10496: + br label %or.end10498 +or.end10498: + %t11 = phi i64 [ 0, %or.bend10497 ], [ %t9, %or.ok10496 ] + ret i64 %t11 +} + +define internal %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca i64, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca i64, align 16 + %a56 = alloca i64, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a61 = alloca i64, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + store { ptr, i64, i64 } { ptr @.str.7023, i64 9, i64 0 }, ptr %a5 + %t6 = call i64 @finch_str_find(ptr %a3, ptr %a5) + store i64 %t6, ptr %a7 + %t8 = load i64, ptr %a7 + %t9 = icmp slt i64 %t8, 0 + br i1 %t9, label %then10499, label %endif10501 +then10499: + ret %S.lsp.Diag zeroinitializer +endif10501: + %t10 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t10, ptr %a11 + %t13 = load i64, ptr %a7 + call void @finch_str_sub(ptr %a12, ptr %a11, i64 0, i64 %t13, ptr @.str.7024, i64 280) + %t14 = load { ptr, i64, i64 }, ptr %a12 + store { ptr, i64, i64 } %t14, ptr %a15 + %t16 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t16, ptr %a17 + %t19 = load i64, ptr %a7 + %t20 = add i64 %t19, 9 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t22 = load i64, ptr %t21 + call void @finch_str_sub(ptr %a18, ptr %a17, i64 %t20, i64 %t22, ptr @.str.7025, i64 281) + %t23 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t23, ptr %a24 + %t25 = load { ptr, i64, i64 }, ptr %a15 + store { ptr, i64, i64 } %t25, ptr %a26 + store { ptr, i64, i64 } { ptr @.str.7027, i64 1, i64 0 }, ptr %a28 + call void @finch_str_split(ptr %a29, ptr %a26, ptr %a28) + %t30 = load { ptr, i64, i64 }, ptr %a29 + store { ptr, i64, i64 } %t30, ptr %a31 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = icmp slt i64 %t33, 3 + br i1 %t34, label %then10502, label %endif10504 +then10502: + call void @finch.drop.arr_str(ptr %a31) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a15) + ret %S.lsp.Diag zeroinitializer +endif10504: + %t35 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t36 = load i64, ptr %t35 + %t37 = sub i64 %t36, 1 + %t38 = load { ptr, i64, i64 }, ptr %a31 + %t39 = extractvalue { ptr, i64, i64 } %t38, 1 + %t40 = icmp uge i64 %t37, %t39 + br i1 %t40, label %range10505, label %inrange10506 +range10505: + call void @finch_panic_index(ptr @.str.7028, i64 287, i64 %t37, i64 %t39) + unreachable +inrange10506: + %t41 = extractvalue { ptr, i64, i64 } %t38, 0 + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %t41, i64 %t37 + %t43 = load { ptr, i64, i64 }, ptr %t42 + %t44 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t43) + store i64 %t44, ptr %a45 + %t46 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = sub i64 %t47, 2 + %t49 = load { ptr, i64, i64 }, ptr %a31 + %t50 = extractvalue { ptr, i64, i64 } %t49, 1 + %t51 = icmp uge i64 %t48, %t50 + br i1 %t51, label %range10507, label %inrange10508 +range10507: + call void @finch_panic_index(ptr @.str.7029, i64 288, i64 %t48, i64 %t50) + unreachable +inrange10508: + %t52 = extractvalue { ptr, i64, i64 } %t49, 0 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t48 + %t54 = load { ptr, i64, i64 }, ptr %t53 + %t55 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t54) + store i64 %t55, ptr %a56 + store { ptr, i64, i64 } zeroinitializer, ptr %a57 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a31, i32 0, i32 1 + %t59 = load i64, ptr %t58 + %t60 = sub i64 %t59, 2 + store i64 0, ptr %a61 + br label %for.cond10509 +for.cond10509: + %t62 = load i64, ptr %a61 + %t63 = icmp slt i64 %t62, %t60 + br i1 %t63, label %for.body10510, label %for.end10512 +for.body10510: + %t64 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 + %t65 = load i64, ptr %a61 + %t66 = load { ptr, i64, i64 }, ptr %a31 + %t67 = extractvalue { ptr, i64, i64 } %t66, 1 + %t68 = icmp uge i64 %t65, %t67 + br i1 %t68, label %range10513, label %inrange10514 +range10513: + call void @finch_panic_index(ptr @.str.7030, i64 291, i64 %t65, i64 %t67) + unreachable +inrange10514: + %t69 = extractvalue { ptr, i64, i64 } %t66, 0 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i64 %t65 + %t71 = load { ptr, i64, i64 }, ptr %t70 + store { ptr, i64, i64 } %t71, ptr %a72 + call void @finch_str_copy(ptr %a73, ptr %a72) + %t74 = load { ptr, i64, i64 }, ptr %a73 + %t75 = load i64, ptr %t64 + %t76 = add i64 %t75, 1 + call void @finch_arr_reserve(ptr %a57, i64 %t76, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t77 = load ptr, ptr %a57 + %t78 = getelementptr inbounds { ptr, i64, i64 }, ptr %t77, i64 %t75 + store { ptr, i64, i64 } %t74, ptr %t78 + store i64 %t76, ptr %t64 + br label %for.step10511 +for.step10511: + %t79 = load i64, ptr %a61 + %t80 = add i64 %t79, 1 + store i64 %t80, ptr %a61 + br label %for.cond10509 +for.end10512: + %t81 = insertvalue %S.lsp.Diag zeroinitializer, i1 true, 0 + %t82 = getelementptr inbounds { ptr, i64, i64 }, ptr %a57, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7031, i64 1, i64 0 }, ptr %a83 + call void @finch_str_join(ptr %a84, ptr %a57, ptr %a83) + %t85 = load { ptr, i64, i64 }, ptr %a84 + %t86 = insertvalue %S.lsp.Diag %t81, { ptr, i64, i64 } %t85, 1 + %t87 = load i64, ptr %a56 + %t88 = insertvalue %S.lsp.Diag %t86, i64 %t87, 2 + %t89 = load i64, ptr %a45 + %t90 = insertvalue %S.lsp.Diag %t88, i64 %t89, 3 + %t91 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t91, ptr %a92 + call void @finch_str_copy(ptr %a93, ptr %a92) + %t94 = load { ptr, i64, i64 }, ptr %a93 + %t95 = insertvalue %S.lsp.Diag %t90, { ptr, i64, i64 } %t94, 4 + call void @finch.drop.arr_str(ptr %a57) + call void @finch.drop.arr_str(ptr %a31) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a15) + ret %S.lsp.Diag %t95 +} + +define internal void @finch.drop.S_lsp_Diag(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Diag, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Diag, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t2) + ret void +} + +define internal %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.lsp.Analysis, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca i64, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca { ptr, i64, i64 }, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a184 = alloca { ptr, i64, i64 }, align 16 + %a185 = alloca { ptr, i64, i64 }, align 16 + %a209 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a297 = alloca { ptr, i64, i64 }, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a300 = alloca { ptr, i64, i64 }, align 16 + %a308 = alloca { ptr, i64, i64 }, align 16 + %a309 = alloca { ptr, i64, i64 }, align 16 + %a324 = alloca { ptr, i64, i64 }, align 16 + %a325 = alloca { ptr, i64, i64 }, align 16 + %a334 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a344 = alloca { ptr, i64, i64 }, align 16 + %a345 = alloca { ptr, i64, i64 }, align 16 + %a369 = alloca { ptr, i64, i64 }, align 16 + %a370 = alloca { ptr, i64, i64 }, align 16 + %a386 = alloca i64, align 16 + %a402 = alloca { ptr, i64, i64 }, align 16 + %a403 = alloca { ptr, i64, i64 }, align 16 + %a424 = alloca { ptr, i64, i64 }, align 16 + %a425 = alloca { ptr, i64, i64 }, align 16 + %a432 = alloca { ptr, i64, i64 }, align 16 + %a433 = alloca { ptr, i64, i64 }, align 16 + %a448 = alloca { ptr, i64, i64 }, align 16 + %a449 = alloca { ptr, i64, i64 }, align 16 + %a458 = alloca { ptr, i64, i64 }, align 16 + %a459 = alloca { ptr, i64, i64 }, align 16 + %a468 = alloca { ptr, i64, i64 }, align 16 + %a469 = alloca { ptr, i64, i64 }, align 16 + %a494 = alloca { ptr, i64, i64 }, align 16 + %a495 = alloca { ptr, i64, i64 }, align 16 + %a496 = alloca { ptr, i64, i64 }, align 16 + %a497 = alloca { ptr, i64, i64 }, align 16 + %a505 = alloca { ptr, i64, i64 }, align 16 + %a506 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca { ptr, i64, i64 }, align 16 + %a522 = alloca { ptr, i64, i64 }, align 16 + %a536 = alloca %S.lsp.Diag, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.lsp.Analysis zeroinitializer, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.7033, i64 1, i64 0 }, ptr %a6 + call void @finch_str_split(ptr %a7, ptr %a4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t8, ptr %a9 + store i64 0, ptr %a10 + br label %each.cond10515 +each.cond10515: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t12 = load i64, ptr %t11 + %t13 = load i64, ptr %a10 + %t14 = icmp slt i64 %t13, %t12 + br i1 %t14, label %each.body10516, label %each.end10518 +each.body10516: + %t15 = load ptr, ptr %a9 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 + %t17 = load { ptr, i64, i64 }, ptr %t16 + store { ptr, i64, i64 } %t17, ptr %a18 + %t19 = load { ptr, i64, i64 }, ptr %a18 + store { ptr, i64, i64 } %t19, ptr %a20 + store { ptr, i64, i64 } { ptr @.str.7035, i64 1, i64 0 }, ptr %a22 + %t23 = call i32 @finch_str_starts(ptr %a20, ptr %a22) + %t24 = icmp ne i32 %t23, 0 + br i1 %t24, label %then10519, label %else10520 +then10519: + %t25 = load { ptr, i64, i64 }, ptr %a18 + %t26 = call { ptr, i64, i64 } @finch.lsp.splitTabs({ ptr, i64, i64 } %t25) + store { ptr, i64, i64 } %t26, ptr %a27 + %t28 = load { ptr, i64, i64 }, ptr %a27 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 0, %t29 + br i1 %t30, label %range10522, label %inrange10523 +range10522: + call void @finch_panic_index(ptr @.str.7036, i64 301, i64 0, i64 %t29) + unreachable +inrange10523: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t31, i64 0 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + call void @finch_str_copy(ptr %a35, ptr %a34) + %t36 = load { ptr, i64, i64 }, ptr %a35 + store { ptr, i64, i64 } %t36, ptr %a37 + %t38 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t38, ptr %a39 + store { ptr, i64, i64 } { ptr @.str.7037, i64 2, i64 0 }, ptr %a40 + %t41 = call i32 @finch_str_eq(ptr %a39, ptr %a40) + %t42 = icmp ne i32 %t41, 0 + br label %logic.from10524 +logic.from10524: + br i1 %t42, label %logic.rhs10525, label %logic.end10526 +logic.rhs10525: + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t44 = load i64, ptr %t43 + %t45 = icmp sge i64 %t44, 9 + br label %logic.rend10527 +logic.rend10527: + br label %logic.end10526 +logic.end10526: + %t46 = phi i1 [ false, %logic.from10524 ], [ %t45, %logic.rend10527 ] + br i1 %t46, label %then10528, label %else10529 +then10528: + %t47 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 0 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i32 0, i32 1 + %t49 = load { ptr, i64, i64 }, ptr %a27 + %t50 = extractvalue { ptr, i64, i64 } %t49, 1 + %t51 = icmp uge i64 1, %t50 + br i1 %t51, label %range10531, label %inrange10532 +range10531: + call void @finch_panic_index(ptr @.str.7038, i64 303, i64 1, i64 %t50) + unreachable +inrange10532: + %t52 = extractvalue { ptr, i64, i64 } %t49, 0 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 1 + %t54 = load { ptr, i64, i64 }, ptr %t53 + store { ptr, i64, i64 } %t54, ptr %a55 + call void @finch_str_copy(ptr %a56, ptr %a55) + %t57 = load { ptr, i64, i64 }, ptr %a56 + %t58 = insertvalue %S.lsp.Ref zeroinitializer, { ptr, i64, i64 } %t57, 0 + %t59 = load { ptr, i64, i64 }, ptr %a27 + %t60 = extractvalue { ptr, i64, i64 } %t59, 1 + %t61 = icmp uge i64 2, %t60 + br i1 %t61, label %range10533, label %inrange10534 +range10533: + call void @finch_panic_index(ptr @.str.7039, i64 303, i64 2, i64 %t60) + unreachable +inrange10534: + %t62 = extractvalue { ptr, i64, i64 } %t59, 0 + %t63 = getelementptr inbounds { ptr, i64, i64 }, ptr %t62, i64 2 + %t64 = load { ptr, i64, i64 }, ptr %t63 + %t65 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t64) + %t66 = insertvalue %S.lsp.Ref %t58, i64 %t65, 1 + %t67 = load { ptr, i64, i64 }, ptr %a27 + %t68 = extractvalue { ptr, i64, i64 } %t67, 1 + %t69 = icmp uge i64 3, %t68 + br i1 %t69, label %range10535, label %inrange10536 +range10535: + call void @finch_panic_index(ptr @.str.7040, i64 303, i64 3, i64 %t68) + unreachable +inrange10536: + %t70 = extractvalue { ptr, i64, i64 } %t67, 0 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %t70, i64 3 + %t72 = load { ptr, i64, i64 }, ptr %t71 + %t73 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t72) + %t74 = insertvalue %S.lsp.Ref %t66, i64 %t73, 2 + %t75 = load { ptr, i64, i64 }, ptr %a27 + %t76 = extractvalue { ptr, i64, i64 } %t75, 1 + %t77 = icmp uge i64 4, %t76 + br i1 %t77, label %range10537, label %inrange10538 +range10537: + call void @finch_panic_index(ptr @.str.7041, i64 303, i64 4, i64 %t76) + unreachable +inrange10538: + %t78 = extractvalue { ptr, i64, i64 } %t75, 0 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 4 + %t80 = load { ptr, i64, i64 }, ptr %t79 + %t81 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t80) + %t82 = insertvalue %S.lsp.Ref %t74, i64 %t81, 3 + %t83 = load { ptr, i64, i64 }, ptr %a27 + %t84 = extractvalue { ptr, i64, i64 } %t83, 1 + %t85 = icmp uge i64 5, %t84 + br i1 %t85, label %range10539, label %inrange10540 +range10539: + call void @finch_panic_index(ptr @.str.7042, i64 303, i64 5, i64 %t84) + unreachable +inrange10540: + %t86 = extractvalue { ptr, i64, i64 } %t83, 0 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 5 + %t88 = load { ptr, i64, i64 }, ptr %t87 + store { ptr, i64, i64 } %t88, ptr %a89 + call void @finch_str_copy(ptr %a90, ptr %a89) + %t91 = load { ptr, i64, i64 }, ptr %a90 + %t92 = insertvalue %S.lsp.Ref %t82, { ptr, i64, i64 } %t91, 4 + %t93 = load { ptr, i64, i64 }, ptr %a27 + %t94 = extractvalue { ptr, i64, i64 } %t93, 1 + %t95 = icmp uge i64 6, %t94 + br i1 %t95, label %range10541, label %inrange10542 +range10541: + call void @finch_panic_index(ptr @.str.7043, i64 303, i64 6, i64 %t94) + unreachable +inrange10542: + %t96 = extractvalue { ptr, i64, i64 } %t93, 0 + %t97 = getelementptr inbounds { ptr, i64, i64 }, ptr %t96, i64 6 + %t98 = load { ptr, i64, i64 }, ptr %t97 + %t99 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t98) + %t100 = insertvalue %S.lsp.Ref %t92, i64 %t99, 5 + %t101 = load { ptr, i64, i64 }, ptr %a27 + %t102 = extractvalue { ptr, i64, i64 } %t101, 1 + %t103 = icmp uge i64 7, %t102 + br i1 %t103, label %range10543, label %inrange10544 +range10543: + call void @finch_panic_index(ptr @.str.7044, i64 303, i64 7, i64 %t102) + unreachable +inrange10544: + %t104 = extractvalue { ptr, i64, i64 } %t101, 0 + %t105 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i64 7 + %t106 = load { ptr, i64, i64 }, ptr %t105 + %t107 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t106) + %t108 = insertvalue %S.lsp.Ref %t100, i64 %t107, 6 + %t109 = load { ptr, i64, i64 }, ptr %a27 + %t110 = extractvalue { ptr, i64, i64 } %t109, 1 + %t111 = icmp uge i64 8, %t110 + br i1 %t111, label %range10545, label %inrange10546 +range10545: + call void @finch_panic_index(ptr @.str.7045, i64 303, i64 8, i64 %t110) + unreachable +inrange10546: + %t112 = extractvalue { ptr, i64, i64 } %t109, 0 + %t113 = getelementptr inbounds { ptr, i64, i64 }, ptr %t112, i64 8 + %t114 = load { ptr, i64, i64 }, ptr %t113 + %t115 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t114) + %t116 = insertvalue %S.lsp.Ref %t108, { ptr, i64, i64 } %t115, 7 + %t117 = load i64, ptr %t48 + %t118 = add i64 %t117, 1 + call void @finch_arr_reserve(ptr %t47, i64 %t118, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) + %t119 = load ptr, ptr %t47 + %t120 = getelementptr inbounds %S.lsp.Ref, ptr %t119, i64 %t117 + store %S.lsp.Ref %t116, ptr %t120 + store i64 %t118, ptr %t48 + br label %endif10530 +else10529: + %t121 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t121, ptr %a122 + store { ptr, i64, i64 } { ptr @.str.7046, i64 2, i64 0 }, ptr %a123 + %t124 = call i32 @finch_str_eq(ptr %a122, ptr %a123) + %t125 = icmp ne i32 %t124, 0 + br label %logic.from10547 +logic.from10547: + br i1 %t125, label %logic.rhs10548, label %logic.end10549 +logic.rhs10548: + %t126 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t127 = load i64, ptr %t126 + %t128 = icmp sge i64 %t127, 9 + br label %logic.rend10550 +logic.rend10550: + br label %logic.end10549 +logic.end10549: + %t129 = phi i1 [ false, %logic.from10547 ], [ %t128, %logic.rend10550 ] + br i1 %t129, label %then10551, label %else10552 +then10551: + %t130 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 1 + %t131 = getelementptr inbounds { ptr, i64, i64 }, ptr %t130, i32 0, i32 1 + %t132 = load { ptr, i64, i64 }, ptr %a27 + %t133 = extractvalue { ptr, i64, i64 } %t132, 1 + %t134 = icmp uge i64 1, %t133 + br i1 %t134, label %range10554, label %inrange10555 +range10554: + call void @finch_panic_index(ptr @.str.7047, i64 305, i64 1, i64 %t133) + unreachable +inrange10555: + %t135 = extractvalue { ptr, i64, i64 } %t132, 0 + %t136 = getelementptr inbounds { ptr, i64, i64 }, ptr %t135, i64 1 + %t137 = load { ptr, i64, i64 }, ptr %t136 + store { ptr, i64, i64 } %t137, ptr %a138 + call void @finch_str_copy(ptr %a139, ptr %a138) + %t140 = load { ptr, i64, i64 }, ptr %a139 + %t141 = insertvalue %S.lsp.VarRec zeroinitializer, { ptr, i64, i64 } %t140, 0 + %t142 = load { ptr, i64, i64 }, ptr %a27 + %t143 = extractvalue { ptr, i64, i64 } %t142, 1 + %t144 = icmp uge i64 2, %t143 + br i1 %t144, label %range10556, label %inrange10557 +range10556: + call void @finch_panic_index(ptr @.str.7048, i64 305, i64 2, i64 %t143) + unreachable +inrange10557: + %t145 = extractvalue { ptr, i64, i64 } %t142, 0 + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 2 + %t147 = load { ptr, i64, i64 }, ptr %t146 + store { ptr, i64, i64 } %t147, ptr %a148 + call void @finch_str_copy(ptr %a149, ptr %a148) + %t150 = load { ptr, i64, i64 }, ptr %a149 + %t151 = insertvalue %S.lsp.VarRec %t141, { ptr, i64, i64 } %t150, 1 + %t152 = load { ptr, i64, i64 }, ptr %a27 + %t153 = extractvalue { ptr, i64, i64 } %t152, 1 + %t154 = icmp uge i64 3, %t153 + br i1 %t154, label %range10558, label %inrange10559 +range10558: + call void @finch_panic_index(ptr @.str.7049, i64 305, i64 3, i64 %t153) + unreachable +inrange10559: + %t155 = extractvalue { ptr, i64, i64 } %t152, 0 + %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %t155, i64 3 + %t157 = load { ptr, i64, i64 }, ptr %t156 + store { ptr, i64, i64 } %t157, ptr %a158 + call void @finch_str_copy(ptr %a159, ptr %a158) + %t160 = load { ptr, i64, i64 }, ptr %a159 + %t161 = insertvalue %S.lsp.VarRec %t151, { ptr, i64, i64 } %t160, 2 + %t162 = load { ptr, i64, i64 }, ptr %a27 + %t163 = extractvalue { ptr, i64, i64 } %t162, 1 + %t164 = icmp uge i64 4, %t163 + br i1 %t164, label %range10560, label %inrange10561 +range10560: + call void @finch_panic_index(ptr @.str.7050, i64 305, i64 4, i64 %t163) + unreachable +inrange10561: + %t165 = extractvalue { ptr, i64, i64 } %t162, 0 + %t166 = getelementptr inbounds { ptr, i64, i64 }, ptr %t165, i64 4 + %t167 = load { ptr, i64, i64 }, ptr %t166 + %t168 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t167) + %t169 = insertvalue %S.lsp.VarRec %t161, i64 %t168, 3 + %t170 = load { ptr, i64, i64 }, ptr %a27 + %t171 = extractvalue { ptr, i64, i64 } %t170, 1 + %t172 = icmp uge i64 5, %t171 + br i1 %t172, label %range10562, label %inrange10563 +range10562: + call void @finch_panic_index(ptr @.str.7051, i64 305, i64 5, i64 %t171) + unreachable +inrange10563: + %t173 = extractvalue { ptr, i64, i64 } %t170, 0 + %t174 = getelementptr inbounds { ptr, i64, i64 }, ptr %t173, i64 5 + %t175 = load { ptr, i64, i64 }, ptr %t174 + %t176 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t175) + %t177 = insertvalue %S.lsp.VarRec %t169, i64 %t176, 4 + %t178 = load { ptr, i64, i64 }, ptr %a27 + %t179 = extractvalue { ptr, i64, i64 } %t178, 1 + %t180 = icmp uge i64 6, %t179 + br i1 %t180, label %range10564, label %inrange10565 +range10564: + call void @finch_panic_index(ptr @.str.7052, i64 305, i64 6, i64 %t179) + unreachable +inrange10565: + %t181 = extractvalue { ptr, i64, i64 } %t178, 0 + %t182 = getelementptr inbounds { ptr, i64, i64 }, ptr %t181, i64 6 + %t183 = load { ptr, i64, i64 }, ptr %t182 + store { ptr, i64, i64 } %t183, ptr %a184 + call void @finch_str_copy(ptr %a185, ptr %a184) + %t186 = load { ptr, i64, i64 }, ptr %a185 + %t187 = insertvalue %S.lsp.VarRec %t177, { ptr, i64, i64 } %t186, 5 + %t188 = load { ptr, i64, i64 }, ptr %a27 + %t189 = extractvalue { ptr, i64, i64 } %t188, 1 + %t190 = icmp uge i64 7, %t189 + br i1 %t190, label %range10566, label %inrange10567 +range10566: + call void @finch_panic_index(ptr @.str.7053, i64 305, i64 7, i64 %t189) + unreachable +inrange10567: + %t191 = extractvalue { ptr, i64, i64 } %t188, 0 + %t192 = getelementptr inbounds { ptr, i64, i64 }, ptr %t191, i64 7 + %t193 = load { ptr, i64, i64 }, ptr %t192 + %t194 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t193) + %t195 = insertvalue %S.lsp.VarRec %t187, i64 %t194, 6 + %t196 = load { ptr, i64, i64 }, ptr %a27 + %t197 = extractvalue { ptr, i64, i64 } %t196, 1 + %t198 = icmp uge i64 8, %t197 + br i1 %t198, label %range10568, label %inrange10569 +range10568: + call void @finch_panic_index(ptr @.str.7054, i64 305, i64 8, i64 %t197) + unreachable +inrange10569: + %t199 = extractvalue { ptr, i64, i64 } %t196, 0 + %t200 = getelementptr inbounds { ptr, i64, i64 }, ptr %t199, i64 8 + %t201 = load { ptr, i64, i64 }, ptr %t200 + %t202 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t201) + %t203 = insertvalue %S.lsp.VarRec %t195, i64 %t202, 7 + %t204 = load i64, ptr %t131 + %t205 = add i64 %t204, 1 + call void @finch_arr_reserve(ptr %t130, i64 %t205, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) + %t206 = load ptr, ptr %t130 + %t207 = getelementptr inbounds %S.lsp.VarRec, ptr %t206, i64 %t204 + store %S.lsp.VarRec %t203, ptr %t207 + store i64 %t205, ptr %t131 + br label %endif10553 +else10552: + %t208 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t208, ptr %a209 + store { ptr, i64, i64 } { ptr @.str.7055, i64 2, i64 0 }, ptr %a210 + %t211 = call i32 @finch_str_eq(ptr %a209, ptr %a210) + %t212 = icmp ne i32 %t211, 0 + br label %logic.from10570 +logic.from10570: + br i1 %t212, label %logic.rhs10571, label %logic.end10572 +logic.rhs10571: + %t213 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t214 = load i64, ptr %t213 + %t215 = icmp sge i64 %t214, 10 + br label %logic.rend10573 +logic.rend10573: + br label %logic.end10572 +logic.end10572: + %t216 = phi i1 [ false, %logic.from10570 ], [ %t215, %logic.rend10573 ] + br i1 %t216, label %then10574, label %else10575 +then10574: + %t217 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 2 + %t218 = getelementptr inbounds { ptr, i64, i64 }, ptr %t217, i32 0, i32 1 + %t219 = load { ptr, i64, i64 }, ptr %a27 + %t220 = extractvalue { ptr, i64, i64 } %t219, 1 + %t221 = icmp uge i64 1, %t220 + br i1 %t221, label %range10577, label %inrange10578 +range10577: + call void @finch_panic_index(ptr @.str.7056, i64 307, i64 1, i64 %t220) + unreachable +inrange10578: + %t222 = extractvalue { ptr, i64, i64 } %t219, 0 + %t223 = getelementptr inbounds { ptr, i64, i64 }, ptr %t222, i64 1 + %t224 = load { ptr, i64, i64 }, ptr %t223 + store { ptr, i64, i64 } %t224, ptr %a225 + call void @finch_str_copy(ptr %a226, ptr %a225) + %t227 = load { ptr, i64, i64 }, ptr %a226 + %t228 = insertvalue %S.lsp.FnRec zeroinitializer, { ptr, i64, i64 } %t227, 0 + %t229 = load { ptr, i64, i64 }, ptr %a27 + %t230 = extractvalue { ptr, i64, i64 } %t229, 1 + %t231 = icmp uge i64 2, %t230 + br i1 %t231, label %range10579, label %inrange10580 +range10579: + call void @finch_panic_index(ptr @.str.7057, i64 307, i64 2, i64 %t230) + unreachable +inrange10580: + %t232 = extractvalue { ptr, i64, i64 } %t229, 0 + %t233 = getelementptr inbounds { ptr, i64, i64 }, ptr %t232, i64 2 + %t234 = load { ptr, i64, i64 }, ptr %t233 + store { ptr, i64, i64 } %t234, ptr %a235 + call void @finch_str_copy(ptr %a236, ptr %a235) + %t237 = load { ptr, i64, i64 }, ptr %a236 + %t238 = insertvalue %S.lsp.FnRec %t228, { ptr, i64, i64 } %t237, 1 + %t239 = load { ptr, i64, i64 }, ptr %a27 + %t240 = extractvalue { ptr, i64, i64 } %t239, 1 + %t241 = icmp uge i64 3, %t240 + br i1 %t241, label %range10581, label %inrange10582 +range10581: + call void @finch_panic_index(ptr @.str.7058, i64 307, i64 3, i64 %t240) + unreachable +inrange10582: + %t242 = extractvalue { ptr, i64, i64 } %t239, 0 + %t243 = getelementptr inbounds { ptr, i64, i64 }, ptr %t242, i64 3 + %t244 = load { ptr, i64, i64 }, ptr %t243 + store { ptr, i64, i64 } %t244, ptr %a245 + call void @finch_str_copy(ptr %a246, ptr %a245) + %t247 = load { ptr, i64, i64 }, ptr %a246 + %t248 = insertvalue %S.lsp.FnRec %t238, { ptr, i64, i64 } %t247, 2 + %t249 = load { ptr, i64, i64 }, ptr %a27 + %t250 = extractvalue { ptr, i64, i64 } %t249, 1 + %t251 = icmp uge i64 4, %t250 + br i1 %t251, label %range10583, label %inrange10584 +range10583: + call void @finch_panic_index(ptr @.str.7059, i64 307, i64 4, i64 %t250) + unreachable +inrange10584: + %t252 = extractvalue { ptr, i64, i64 } %t249, 0 + %t253 = getelementptr inbounds { ptr, i64, i64 }, ptr %t252, i64 4 + %t254 = load { ptr, i64, i64 }, ptr %t253 + store { ptr, i64, i64 } %t254, ptr %a255 + call void @finch_str_copy(ptr %a256, ptr %a255) + %t257 = load { ptr, i64, i64 }, ptr %a256 + %t258 = insertvalue %S.lsp.FnRec %t248, { ptr, i64, i64 } %t257, 3 + %t259 = load { ptr, i64, i64 }, ptr %a27 + %t260 = extractvalue { ptr, i64, i64 } %t259, 1 + %t261 = icmp uge i64 5, %t260 + br i1 %t261, label %range10585, label %inrange10586 +range10585: + call void @finch_panic_index(ptr @.str.7060, i64 307, i64 5, i64 %t260) + unreachable +inrange10586: + %t262 = extractvalue { ptr, i64, i64 } %t259, 0 + %t263 = getelementptr inbounds { ptr, i64, i64 }, ptr %t262, i64 5 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t264) + %t266 = insertvalue %S.lsp.FnRec %t258, i64 %t265, 4 + %t267 = load { ptr, i64, i64 }, ptr %a27 + %t268 = extractvalue { ptr, i64, i64 } %t267, 1 + %t269 = icmp uge i64 6, %t268 + br i1 %t269, label %range10587, label %inrange10588 +range10587: + call void @finch_panic_index(ptr @.str.7061, i64 307, i64 6, i64 %t268) + unreachable +inrange10588: + %t270 = extractvalue { ptr, i64, i64 } %t267, 0 + %t271 = getelementptr inbounds { ptr, i64, i64 }, ptr %t270, i64 6 + %t272 = load { ptr, i64, i64 }, ptr %t271 + %t273 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t272) + %t274 = insertvalue %S.lsp.FnRec %t266, i64 %t273, 5 + %t275 = load { ptr, i64, i64 }, ptr %a27 + %t276 = extractvalue { ptr, i64, i64 } %t275, 1 + %t277 = icmp uge i64 7, %t276 + br i1 %t277, label %range10589, label %inrange10590 +range10589: + call void @finch_panic_index(ptr @.str.7062, i64 307, i64 7, i64 %t276) + unreachable +inrange10590: + %t278 = extractvalue { ptr, i64, i64 } %t275, 0 + %t279 = getelementptr inbounds { ptr, i64, i64 }, ptr %t278, i64 7 + %t280 = load { ptr, i64, i64 }, ptr %t279 + %t281 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t280) + %t282 = insertvalue %S.lsp.FnRec %t274, i64 %t281, 6 + %t283 = load { ptr, i64, i64 }, ptr %a27 + %t284 = extractvalue { ptr, i64, i64 } %t283, 1 + %t285 = icmp uge i64 8, %t284 + br i1 %t285, label %range10591, label %inrange10592 +range10591: + call void @finch_panic_index(ptr @.str.7063, i64 307, i64 8, i64 %t284) + unreachable +inrange10592: + %t286 = extractvalue { ptr, i64, i64 } %t283, 0 + %t287 = getelementptr inbounds { ptr, i64, i64 }, ptr %t286, i64 8 + %t288 = load { ptr, i64, i64 }, ptr %t287 + %t289 = call { ptr, i64, i64 } @finch.lsp.unesc({ ptr, i64, i64 } %t288) + %t290 = insertvalue %S.lsp.FnRec %t282, { ptr, i64, i64 } %t289, 7 + %t291 = load { ptr, i64, i64 }, ptr %a27 + %t292 = extractvalue { ptr, i64, i64 } %t291, 1 + %t293 = icmp uge i64 9, %t292 + br i1 %t293, label %range10593, label %inrange10594 +range10593: + call void @finch_panic_index(ptr @.str.7064, i64 307, i64 9, i64 %t292) + unreachable +inrange10594: + %t294 = extractvalue { ptr, i64, i64 } %t291, 0 + %t295 = getelementptr inbounds { ptr, i64, i64 }, ptr %t294, i64 9 + %t296 = load { ptr, i64, i64 }, ptr %t295 + store { ptr, i64, i64 } %t296, ptr %a297 + store { ptr, i64, i64 } { ptr @.str.7066, i64 1, i64 0 }, ptr %a299 + call void @finch_str_split(ptr %a300, ptr %a297, ptr %a299) + %t301 = load { ptr, i64, i64 }, ptr %a300 + %t302 = insertvalue %S.lsp.FnRec %t290, { ptr, i64, i64 } %t301, 8 + %t303 = load i64, ptr %t218 + %t304 = add i64 %t303, 1 + call void @finch_arr_reserve(ptr %t217, i64 %t304, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) + %t305 = load ptr, ptr %t217 + %t306 = getelementptr inbounds %S.lsp.FnRec, ptr %t305, i64 %t303 + store %S.lsp.FnRec %t302, ptr %t306 + store i64 %t304, ptr %t218 + br label %endif10576 +else10575: + %t307 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t307, ptr %a308 + store { ptr, i64, i64 } { ptr @.str.7067, i64 2, i64 0 }, ptr %a309 + %t310 = call i32 @finch_str_eq(ptr %a308, ptr %a309) + %t311 = icmp ne i32 %t310, 0 + br label %logic.from10595 +logic.from10595: + br i1 %t311, label %logic.rhs10596, label %logic.end10597 +logic.rhs10596: + %t312 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t313 = load i64, ptr %t312 + %t314 = icmp sge i64 %t313, 6 + br label %logic.rend10598 +logic.rend10598: + br label %logic.end10597 +logic.end10597: + %t315 = phi i1 [ false, %logic.from10595 ], [ %t314, %logic.rend10598 ] + br i1 %t315, label %then10599, label %else10600 +then10599: + %t316 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t317 = getelementptr inbounds { ptr, i64, i64 }, ptr %t316, i32 0, i32 1 + %t318 = load { ptr, i64, i64 }, ptr %a27 + %t319 = extractvalue { ptr, i64, i64 } %t318, 1 + %t320 = icmp uge i64 1, %t319 + br i1 %t320, label %range10602, label %inrange10603 +range10602: + call void @finch_panic_index(ptr @.str.7068, i64 309, i64 1, i64 %t319) + unreachable +inrange10603: + %t321 = extractvalue { ptr, i64, i64 } %t318, 0 + %t322 = getelementptr inbounds { ptr, i64, i64 }, ptr %t321, i64 1 + %t323 = load { ptr, i64, i64 }, ptr %t322 + store { ptr, i64, i64 } %t323, ptr %a324 + call void @finch_str_copy(ptr %a325, ptr %a324) + %t326 = load { ptr, i64, i64 }, ptr %a325 + %t327 = insertvalue %S.lsp.StructRec zeroinitializer, { ptr, i64, i64 } %t326, 0 + %t328 = load { ptr, i64, i64 }, ptr %a27 + %t329 = extractvalue { ptr, i64, i64 } %t328, 1 + %t330 = icmp uge i64 2, %t329 + br i1 %t330, label %range10604, label %inrange10605 +range10604: + call void @finch_panic_index(ptr @.str.7069, i64 309, i64 2, i64 %t329) + unreachable +inrange10605: + %t331 = extractvalue { ptr, i64, i64 } %t328, 0 + %t332 = getelementptr inbounds { ptr, i64, i64 }, ptr %t331, i64 2 + %t333 = load { ptr, i64, i64 }, ptr %t332 + store { ptr, i64, i64 } %t333, ptr %a334 + call void @finch_str_copy(ptr %a335, ptr %a334) + %t336 = load { ptr, i64, i64 }, ptr %a335 + %t337 = insertvalue %S.lsp.StructRec %t327, { ptr, i64, i64 } %t336, 1 + %t338 = load { ptr, i64, i64 }, ptr %a27 + %t339 = extractvalue { ptr, i64, i64 } %t338, 1 + %t340 = icmp uge i64 3, %t339 + br i1 %t340, label %range10606, label %inrange10607 +range10606: + call void @finch_panic_index(ptr @.str.7070, i64 309, i64 3, i64 %t339) + unreachable +inrange10607: + %t341 = extractvalue { ptr, i64, i64 } %t338, 0 + %t342 = getelementptr inbounds { ptr, i64, i64 }, ptr %t341, i64 3 + %t343 = load { ptr, i64, i64 }, ptr %t342 + store { ptr, i64, i64 } %t343, ptr %a344 + call void @finch_str_copy(ptr %a345, ptr %a344) + %t346 = load { ptr, i64, i64 }, ptr %a345 + %t347 = insertvalue %S.lsp.StructRec %t337, { ptr, i64, i64 } %t346, 2 + %t348 = load { ptr, i64, i64 }, ptr %a27 + %t349 = extractvalue { ptr, i64, i64 } %t348, 1 + %t350 = icmp uge i64 4, %t349 + br i1 %t350, label %range10608, label %inrange10609 +range10608: + call void @finch_panic_index(ptr @.str.7071, i64 309, i64 4, i64 %t349) + unreachable +inrange10609: + %t351 = extractvalue { ptr, i64, i64 } %t348, 0 + %t352 = getelementptr inbounds { ptr, i64, i64 }, ptr %t351, i64 4 + %t353 = load { ptr, i64, i64 }, ptr %t352 + %t354 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t353) + %t355 = insertvalue %S.lsp.StructRec %t347, i64 %t354, 3 + %t356 = load { ptr, i64, i64 }, ptr %a27 + %t357 = extractvalue { ptr, i64, i64 } %t356, 1 + %t358 = icmp uge i64 5, %t357 + br i1 %t358, label %range10610, label %inrange10611 +range10610: + call void @finch_panic_index(ptr @.str.7072, i64 309, i64 5, i64 %t357) + unreachable +inrange10611: + %t359 = extractvalue { ptr, i64, i64 } %t356, 0 + %t360 = getelementptr inbounds { ptr, i64, i64 }, ptr %t359, i64 5 + %t361 = load { ptr, i64, i64 }, ptr %t360 + %t362 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t361) + %t363 = insertvalue %S.lsp.StructRec %t355, i64 %t362, 4 + %t364 = load i64, ptr %t317 + %t365 = add i64 %t364, 1 + call void @finch_arr_reserve(ptr %t316, i64 %t365, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) + %t366 = load ptr, ptr %t316 + %t367 = getelementptr inbounds %S.lsp.StructRec, ptr %t366, i64 %t364 + store %S.lsp.StructRec %t363, ptr %t367 + store i64 %t365, ptr %t317 + br label %endif10601 +else10600: + %t368 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t368, ptr %a369 + store { ptr, i64, i64 } { ptr @.str.7073, i64 3, i64 0 }, ptr %a370 + %t371 = call i32 @finch_str_eq(ptr %a369, ptr %a370) + %t372 = icmp ne i32 %t371, 0 + br label %logic.from10612 +logic.from10612: + br i1 %t372, label %logic.rhs10613, label %logic.end10614 +logic.rhs10613: + %t373 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t374 = load i64, ptr %t373 + %t375 = icmp sge i64 %t374, 5 + br label %logic.rend10615 +logic.rend10615: + br label %logic.end10614 +logic.end10614: + %t376 = phi i1 [ false, %logic.from10612 ], [ %t375, %logic.rend10615 ] + br label %logic.from10616 +logic.from10616: + br i1 %t376, label %logic.rhs10617, label %logic.end10618 +logic.rhs10617: + %t377 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t378 = getelementptr inbounds { ptr, i64, i64 }, ptr %t377, i32 0, i32 1 + %t379 = load i64, ptr %t378 + %t380 = icmp sgt i64 %t379, 0 + br label %logic.rend10619 +logic.rend10619: + br label %logic.end10618 +logic.end10618: + %t381 = phi i1 [ false, %logic.from10616 ], [ %t380, %logic.rend10619 ] + br i1 %t381, label %then10620, label %else10621 +then10620: + %t382 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t383 = getelementptr inbounds { ptr, i64, i64 }, ptr %t382, i32 0, i32 1 + %t384 = load i64, ptr %t383 + %t385 = sub i64 %t384, 1 + store i64 %t385, ptr %a386 + %t387 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t388 = load i64, ptr %a386 + %t389 = load { ptr, i64, i64 }, ptr %t387 + %t390 = extractvalue { ptr, i64, i64 } %t389, 1 + %t391 = icmp uge i64 %t388, %t390 + br i1 %t391, label %range10623, label %inrange10624 +range10623: + call void @finch_panic_index(ptr @.str.7074, i64 312, i64 %t388, i64 %t390) + unreachable +inrange10624: + %t392 = extractvalue { ptr, i64, i64 } %t389, 0 + %t393 = getelementptr inbounds %S.lsp.StructRec, ptr %t392, i64 %t388 + %t394 = getelementptr inbounds %S.lsp.StructRec, ptr %t393, i32 0, i32 5 + %t395 = getelementptr inbounds { ptr, i64, i64 }, ptr %t394, i32 0, i32 1 + %t396 = load { ptr, i64, i64 }, ptr %a27 + %t397 = extractvalue { ptr, i64, i64 } %t396, 1 + %t398 = icmp uge i64 3, %t397 + br i1 %t398, label %range10625, label %inrange10626 +range10625: + call void @finch_panic_index(ptr @.str.7075, i64 312, i64 3, i64 %t397) + unreachable +inrange10626: + %t399 = extractvalue { ptr, i64, i64 } %t396, 0 + %t400 = getelementptr inbounds { ptr, i64, i64 }, ptr %t399, i64 3 + %t401 = load { ptr, i64, i64 }, ptr %t400 + store { ptr, i64, i64 } %t401, ptr %a402 + call void @finch_str_copy(ptr %a403, ptr %a402) + %t404 = load { ptr, i64, i64 }, ptr %a403 + %t405 = load i64, ptr %t395 + %t406 = add i64 %t405, 1 + call void @finch_arr_reserve(ptr %t394, i64 %t406, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t407 = load ptr, ptr %t394 + %t408 = getelementptr inbounds { ptr, i64, i64 }, ptr %t407, i64 %t405 + store { ptr, i64, i64 } %t404, ptr %t408 + store i64 %t406, ptr %t395 + %t409 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 3 + %t410 = load i64, ptr %a386 + %t411 = load { ptr, i64, i64 }, ptr %t409 + %t412 = extractvalue { ptr, i64, i64 } %t411, 1 + %t413 = icmp uge i64 %t410, %t412 + br i1 %t413, label %range10627, label %inrange10628 +range10627: + call void @finch_panic_index(ptr @.str.7076, i64 313, i64 %t410, i64 %t412) + unreachable +inrange10628: + %t414 = extractvalue { ptr, i64, i64 } %t411, 0 + %t415 = getelementptr inbounds %S.lsp.StructRec, ptr %t414, i64 %t410 + %t416 = getelementptr inbounds %S.lsp.StructRec, ptr %t415, i32 0, i32 6 + %t417 = getelementptr inbounds { ptr, i64, i64 }, ptr %t416, i32 0, i32 1 + %t418 = load { ptr, i64, i64 }, ptr %a27 + %t419 = extractvalue { ptr, i64, i64 } %t418, 1 + %t420 = icmp uge i64 4, %t419 + br i1 %t420, label %range10629, label %inrange10630 +range10629: + call void @finch_panic_index(ptr @.str.7077, i64 313, i64 4, i64 %t419) + unreachable +inrange10630: + %t421 = extractvalue { ptr, i64, i64 } %t418, 0 + %t422 = getelementptr inbounds { ptr, i64, i64 }, ptr %t421, i64 4 + %t423 = load { ptr, i64, i64 }, ptr %t422 + store { ptr, i64, i64 } %t423, ptr %a424 + call void @finch_str_copy(ptr %a425, ptr %a424) + %t426 = load { ptr, i64, i64 }, ptr %a425 + %t427 = load i64, ptr %t417 + %t428 = add i64 %t427, 1 + call void @finch_arr_reserve(ptr %t416, i64 %t428, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t429 = load ptr, ptr %t416 + %t430 = getelementptr inbounds { ptr, i64, i64 }, ptr %t429, i64 %t427 + store { ptr, i64, i64 } %t426, ptr %t430 + store i64 %t428, ptr %t417 + br label %endif10622 +else10621: + %t431 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t431, ptr %a432 + store { ptr, i64, i64 } { ptr @.str.7078, i64 2, i64 0 }, ptr %a433 + %t434 = call i32 @finch_str_eq(ptr %a432, ptr %a433) + %t435 = icmp ne i32 %t434, 0 + br label %logic.from10631 +logic.from10631: + br i1 %t435, label %logic.rhs10632, label %logic.end10633 +logic.rhs10632: + %t436 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t437 = load i64, ptr %t436 + %t438 = icmp sge i64 %t437, 7 + br label %logic.rend10634 +logic.rend10634: + br label %logic.end10633 +logic.end10633: + %t439 = phi i1 [ false, %logic.from10631 ], [ %t438, %logic.rend10634 ] + br i1 %t439, label %then10635, label %else10636 +then10635: + %t440 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 4 + %t441 = getelementptr inbounds { ptr, i64, i64 }, ptr %t440, i32 0, i32 1 + %t442 = load { ptr, i64, i64 }, ptr %a27 + %t443 = extractvalue { ptr, i64, i64 } %t442, 1 + %t444 = icmp uge i64 1, %t443 + br i1 %t444, label %range10638, label %inrange10639 +range10638: + call void @finch_panic_index(ptr @.str.7079, i64 315, i64 1, i64 %t443) + unreachable +inrange10639: + %t445 = extractvalue { ptr, i64, i64 } %t442, 0 + %t446 = getelementptr inbounds { ptr, i64, i64 }, ptr %t445, i64 1 + %t447 = load { ptr, i64, i64 }, ptr %t446 + store { ptr, i64, i64 } %t447, ptr %a448 + call void @finch_str_copy(ptr %a449, ptr %a448) + %t450 = load { ptr, i64, i64 }, ptr %a449 + %t451 = insertvalue %S.lsp.EnumRec zeroinitializer, { ptr, i64, i64 } %t450, 0 + %t452 = load { ptr, i64, i64 }, ptr %a27 + %t453 = extractvalue { ptr, i64, i64 } %t452, 1 + %t454 = icmp uge i64 2, %t453 + br i1 %t454, label %range10640, label %inrange10641 +range10640: + call void @finch_panic_index(ptr @.str.7080, i64 315, i64 2, i64 %t453) + unreachable +inrange10641: + %t455 = extractvalue { ptr, i64, i64 } %t452, 0 + %t456 = getelementptr inbounds { ptr, i64, i64 }, ptr %t455, i64 2 + %t457 = load { ptr, i64, i64 }, ptr %t456 + store { ptr, i64, i64 } %t457, ptr %a458 + call void @finch_str_copy(ptr %a459, ptr %a458) + %t460 = load { ptr, i64, i64 }, ptr %a459 + %t461 = insertvalue %S.lsp.EnumRec %t451, { ptr, i64, i64 } %t460, 1 + %t462 = load { ptr, i64, i64 }, ptr %a27 + %t463 = extractvalue { ptr, i64, i64 } %t462, 1 + %t464 = icmp uge i64 3, %t463 + br i1 %t464, label %range10642, label %inrange10643 +range10642: + call void @finch_panic_index(ptr @.str.7081, i64 315, i64 3, i64 %t463) + unreachable +inrange10643: + %t465 = extractvalue { ptr, i64, i64 } %t462, 0 + %t466 = getelementptr inbounds { ptr, i64, i64 }, ptr %t465, i64 3 + %t467 = load { ptr, i64, i64 }, ptr %t466 + store { ptr, i64, i64 } %t467, ptr %a468 + call void @finch_str_copy(ptr %a469, ptr %a468) + %t470 = load { ptr, i64, i64 }, ptr %a469 + %t471 = insertvalue %S.lsp.EnumRec %t461, { ptr, i64, i64 } %t470, 2 + %t472 = load { ptr, i64, i64 }, ptr %a27 + %t473 = extractvalue { ptr, i64, i64 } %t472, 1 + %t474 = icmp uge i64 4, %t473 + br i1 %t474, label %range10644, label %inrange10645 +range10644: + call void @finch_panic_index(ptr @.str.7082, i64 315, i64 4, i64 %t473) + unreachable +inrange10645: + %t475 = extractvalue { ptr, i64, i64 } %t472, 0 + %t476 = getelementptr inbounds { ptr, i64, i64 }, ptr %t475, i64 4 + %t477 = load { ptr, i64, i64 }, ptr %t476 + %t478 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t477) + %t479 = insertvalue %S.lsp.EnumRec %t471, i64 %t478, 3 + %t480 = load { ptr, i64, i64 }, ptr %a27 + %t481 = extractvalue { ptr, i64, i64 } %t480, 1 + %t482 = icmp uge i64 5, %t481 + br i1 %t482, label %range10646, label %inrange10647 +range10646: + call void @finch_panic_index(ptr @.str.7083, i64 315, i64 5, i64 %t481) + unreachable +inrange10647: + %t483 = extractvalue { ptr, i64, i64 } %t480, 0 + %t484 = getelementptr inbounds { ptr, i64, i64 }, ptr %t483, i64 5 + %t485 = load { ptr, i64, i64 }, ptr %t484 + %t486 = call i64 @finch.lsp.intOf({ ptr, i64, i64 } %t485) + %t487 = insertvalue %S.lsp.EnumRec %t479, i64 %t486, 4 + %t488 = load { ptr, i64, i64 }, ptr %a27 + %t489 = extractvalue { ptr, i64, i64 } %t488, 1 + %t490 = icmp uge i64 6, %t489 + br i1 %t490, label %range10648, label %inrange10649 +range10648: + call void @finch_panic_index(ptr @.str.7084, i64 315, i64 6, i64 %t489) + unreachable +inrange10649: + %t491 = extractvalue { ptr, i64, i64 } %t488, 0 + %t492 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i64 6 + %t493 = load { ptr, i64, i64 }, ptr %t492 + store { ptr, i64, i64 } %t493, ptr %a494 + store { ptr, i64, i64 } { ptr @.str.7086, i64 1, i64 0 }, ptr %a496 + call void @finch_str_split(ptr %a497, ptr %a494, ptr %a496) + %t498 = load { ptr, i64, i64 }, ptr %a497 + %t499 = insertvalue %S.lsp.EnumRec %t487, { ptr, i64, i64 } %t498, 5 + %t500 = load i64, ptr %t441 + %t501 = add i64 %t500, 1 + call void @finch_arr_reserve(ptr %t440, i64 %t501, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) + %t502 = load ptr, ptr %t440 + %t503 = getelementptr inbounds %S.lsp.EnumRec, ptr %t502, i64 %t500 + store %S.lsp.EnumRec %t499, ptr %t503 + store i64 %t501, ptr %t441 + br label %endif10637 +else10636: + %t504 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } %t504, ptr %a505 + store { ptr, i64, i64 } { ptr @.str.7087, i64 2, i64 0 }, ptr %a506 + %t507 = call i32 @finch_str_eq(ptr %a505, ptr %a506) + %t508 = icmp ne i32 %t507, 0 + br label %logic.from10650 +logic.from10650: + br i1 %t508, label %logic.rhs10651, label %logic.end10652 +logic.rhs10651: + %t509 = getelementptr inbounds { ptr, i64, i64 }, ptr %a27, i32 0, i32 1 + %t510 = load i64, ptr %t509 + %t511 = icmp sge i64 %t510, 2 + br label %logic.rend10653 +logic.rend10653: + br label %logic.end10652 +logic.end10652: + %t512 = phi i1 [ false, %logic.from10650 ], [ %t511, %logic.rend10653 ] + br i1 %t512, label %then10654, label %endif10656 +then10654: + %t513 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 5 + %t514 = getelementptr inbounds { ptr, i64, i64 }, ptr %t513, i32 0, i32 1 + %t515 = load { ptr, i64, i64 }, ptr %a27 + %t516 = extractvalue { ptr, i64, i64 } %t515, 1 + %t517 = icmp uge i64 1, %t516 + br i1 %t517, label %range10657, label %inrange10658 +range10657: + call void @finch_panic_index(ptr @.str.7088, i64 317, i64 1, i64 %t516) + unreachable +inrange10658: + %t518 = extractvalue { ptr, i64, i64 } %t515, 0 + %t519 = getelementptr inbounds { ptr, i64, i64 }, ptr %t518, i64 1 + %t520 = load { ptr, i64, i64 }, ptr %t519 + store { ptr, i64, i64 } %t520, ptr %a521 + call void @finch_str_copy(ptr %a522, ptr %a521) + %t523 = load { ptr, i64, i64 }, ptr %a522 + %t524 = load i64, ptr %t514 + %t525 = add i64 %t524, 1 + call void @finch_arr_reserve(ptr %t513, i64 %t525, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t526 = load ptr, ptr %t513 + %t527 = getelementptr inbounds { ptr, i64, i64 }, ptr %t526, i64 %t524 + store { ptr, i64, i64 } %t523, ptr %t527 + store i64 %t525, ptr %t514 + br label %endif10656 +endif10656: + br label %endif10637 +endif10637: + br label %endif10622 +endif10622: + br label %endif10601 +endif10601: + br label %endif10576 +endif10576: + br label %endif10553 +endif10553: + br label %endif10530 +endif10530: + call void @finch_str_drop(ptr %a37) + call void @finch.drop.arr_str(ptr %a27) + br label %endif10521 +else10520: + %t528 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t529 = getelementptr inbounds %S.lsp.Diag, ptr %t528, i32 0, i32 0 + %t530 = load i1, ptr %t529 + %t531 = xor i1 %t530, true + br i1 %t531, label %then10659, label %endif10661 +then10659: + %t532 = load { ptr, i64, i64 }, ptr %a18 + %t533 = call %S.lsp.Diag @finch.lsp.parseDiag({ ptr, i64, i64 } %t532) + %t534 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t535 = load %S.lsp.Diag, ptr %t534 + store %S.lsp.Diag %t533, ptr %t534 + store %S.lsp.Diag %t535, ptr %a536 + call void @finch.drop.S_lsp_Diag(ptr %a536) + br label %endif10661 +endif10661: + br label %endif10521 +endif10521: + br label %each.step10517 +each.step10517: + %t537 = load i64, ptr %a10 + %t538 = add i64 %t537, 1 + store i64 %t538, ptr %a10 + br label %each.cond10515 +each.end10518: + call void @finch.drop.arr_str(ptr %a9) + %t539 = load %S.lsp.Analysis, ptr %a2 + ret %S.lsp.Analysis %t539 +} + +define internal void @finch.copy.S_lsp_Ref(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.Ref, ptr %src + store %S.lsp.Ref %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 4 + %t5 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Ref, ptr %dst, i32 0, i32 7 + %t7 = getelementptr inbounds %S.lsp.Ref, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t6, ptr %t7) + ret void +} + +define internal void @finch.copy.arr_S_lsp_Ref(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.Ref, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10682 +n.cond10682: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10683, label %n.end10684 +n.body10683: + %t8 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.Ref, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_Ref(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10682 +n.end10684: + ret void +} + +define internal void @finch.copy.S_lsp_VarRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.VarRec, ptr %src + store %S.lsp.VarRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %dst, i32 0, i32 5 + %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %src, i32 0, i32 5 + call void @finch_str_copy(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.arr_S_lsp_VarRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.VarRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10685 +n.cond10685: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10686, label %n.end10687 +n.body10686: + %t8 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.VarRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_VarRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10685 +n.end10687: + ret void +} + +define internal void @finch.copy.S_lsp_FnRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.FnRec, ptr %src + store %S.lsp.FnRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 7 + %t11 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 7 + call void @finch_str_copy(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %dst, i32 0, i32 8 + %t13 = getelementptr inbounds %S.lsp.FnRec, ptr %src, i32 0, i32 8 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + ret void +} + +define internal void @finch.copy.arr_S_lsp_FnRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.FnRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10688 +n.cond10688: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10689, label %n.end10690 +n.body10689: + %t8 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.FnRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_FnRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10688 +n.end10690: + ret void +} + +define internal void @finch.copy.S_lsp_StructRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.StructRec, ptr %src + store %S.lsp.StructRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 5 + %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.lsp.StructRec, ptr %dst, i32 0, i32 6 + %t11 = getelementptr inbounds %S.lsp.StructRec, ptr %src, i32 0, i32 6 + call void @finch.copy.arr_str(ptr %t10, ptr %t11) + ret void +} + +define internal void @finch.copy.arr_S_lsp_StructRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.StructRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10691 +n.cond10691: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10692, label %n.end10693 +n.body10692: + %t8 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.StructRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_StructRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10691 +n.end10693: + ret void +} + +define internal void @finch.copy.S_lsp_EnumRec(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.EnumRec, ptr %src + store %S.lsp.EnumRec %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 0 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 2 + call void @finch_str_copy(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %dst, i32 0, i32 5 + %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t8, ptr %t9) + ret void +} + +define internal void @finch.copy.arr_S_lsp_EnumRec(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.lsp.EnumRec, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond10694 +n.cond10694: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body10695, label %n.end10696 +n.body10695: + %t8 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.lsp.EnumRec, ptr %t2, i64 %t6 + call void @finch.copy.S_lsp_EnumRec(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond10694 +n.end10696: + ret void +} + +define internal void @finch.copy.S_lsp_Diag(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.Diag, ptr %src + store %S.lsp.Diag %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 1 + %t3 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 1 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Diag, ptr %dst, i32 0, i32 4 + %t5 = getelementptr inbounds %S.lsp.Diag, ptr %src, i32 0, i32 4 + call void @finch_str_copy(ptr %t4, ptr %t5) + ret void +} + +define internal void @finch.copy.S_lsp_Analysis(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.lsp.Analysis, ptr %src + store %S.lsp.Analysis %t1, ptr %dst + %t2 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 0 + %t3 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 0 + call void @finch.copy.arr_S_lsp_Ref(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 1 + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 1 + call void @finch.copy.arr_S_lsp_VarRec(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 2 + %t7 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 2 + call void @finch.copy.arr_S_lsp_FnRec(ptr %t6, ptr %t7) + %t8 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 3 + %t9 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 3 + call void @finch.copy.arr_S_lsp_StructRec(ptr %t8, ptr %t9) + %t10 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 4 + %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_S_lsp_EnumRec(ptr %t10, ptr %t11) + %t12 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 5 + %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t12, ptr %t13) + %t14 = getelementptr inbounds %S.lsp.Analysis, ptr %dst, i32 0, i32 6 + %t15 = getelementptr inbounds %S.lsp.Analysis, ptr %src, i32 0, i32 6 + call void @finch.copy.S_lsp_Diag(ptr %t14, ptr %t15) + ret void +} + +define internal void @finch.drop.S_lsp_Ref(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 4 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.Ref, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t3) + ret void +} + +define internal void @finch.drop.arr_S_lsp_Ref(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10697 +n.cond10697: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10698, label %n.end10699 +n.body10698: + %t7 = getelementptr inbounds %S.lsp.Ref, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_Ref(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10697 +n.end10699: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_VarRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.VarRec, ptr %a, i32 0, i32 5 + call void @finch_str_drop(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_S_lsp_VarRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10700 +n.cond10700: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10701, label %n.end10702 +n.body10701: + %t7 = getelementptr inbounds %S.lsp.VarRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_VarRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10700 +n.end10702: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_FnRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 3 + call void @finch_str_drop(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 7 + call void @finch_str_drop(ptr %t5) + %t6 = getelementptr inbounds %S.lsp.FnRec, ptr %a, i32 0, i32 8 + call void @finch.drop.arr_str(ptr %t6) + ret void +} + +define internal void @finch.drop.arr_S_lsp_FnRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10703 +n.cond10703: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10704, label %n.end10705 +n.body10704: + %t7 = getelementptr inbounds %S.lsp.FnRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_FnRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10703 +n.end10705: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_StructRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.StructRec, ptr %a, i32 0, i32 6 + call void @finch.drop.arr_str(ptr %t5) + ret void +} + +define internal void @finch.drop.arr_S_lsp_StructRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10706 +n.cond10706: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10707, label %n.end10708 +n.body10707: + %t7 = getelementptr inbounds %S.lsp.StructRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_StructRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10706 +n.end10708: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_EnumRec(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 2 + call void @finch_str_drop(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.EnumRec, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t4) + ret void +} + +define internal void @finch.drop.arr_S_lsp_EnumRec(ptr %a) { +entry: + %a4 = alloca i64, align 16 + %t1 = load ptr, ptr %a + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a, i32 0, i32 1 + %t3 = load i64, ptr %t2 + store i64 0, ptr %a4 + br label %n.cond10709 +n.cond10709: + %t5 = load i64, ptr %a4 + %t6 = icmp slt i64 %t5, %t3 + br i1 %t6, label %n.body10710, label %n.end10711 +n.body10710: + %t7 = getelementptr inbounds %S.lsp.EnumRec, ptr %t1, i64 %t5 + call void @finch.drop.S_lsp_EnumRec(ptr %t7) + %t8 = load i64, ptr %a4 + %t9 = add i64 %t8, 1 + store i64 %t9, ptr %a4 + br label %n.cond10709 +n.end10711: + call void @finch_arr_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_Analysis(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_S_lsp_Ref(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 1 + call void @finch.drop.arr_S_lsp_VarRec(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 2 + call void @finch.drop.arr_S_lsp_FnRec(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 3 + call void @finch.drop.arr_S_lsp_StructRec(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 4 + call void @finch.drop.arr_S_lsp_EnumRec(ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + %t7 = getelementptr inbounds %S.lsp.Analysis, ptr %a, i32 0, i32 6 + call void @finch.drop.S_lsp_Diag(ptr %t7) + ret void +} + +define internal void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca i64, align 16 + %a14 = alloca i64, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca i64, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a84 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a89 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a95 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a99 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca { ptr, i64, i64 }, align 16 + %a110 = alloca { ptr, i64, i64 }, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca { ptr, i64, i64 }, align 16 + %a120 = alloca { ptr, i64, i64 }, align 16 + %a121 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a128 = alloca { ptr, i64, i64 }, align 16 + %a129 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a144 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a169 = alloca %S.lsp.Analysis, align 16 + %a177 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca i32, align 16 + %a188 = alloca %S.lsp.Analysis, align 16 + %a189 = alloca %S.lsp.Analysis, align 16 + %a192 = alloca %S.lsp.Analysis, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a204 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca %S.lsp.Analysis, align 16 + %a211 = alloca %S.lsp.Analysis, align 16 + %a213 = alloca %S.lsp.Analysis, align 16 + %a217 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca { ptr, i64, i64 }, align 16 + %a229 = alloca { ptr, i64, i64 }, align 16 + %a233 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a245 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca i32, align 16 + %a272 = alloca %S.lsp.Analysis, align 16 + %a273 = alloca %S.lsp.Analysis, align 16 + %a276 = alloca %S.lsp.Analysis, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 + %t3 = load { ptr, i64, i64 }, ptr %t2 + call void @finch.host.makeDirs({ ptr, i64, i64 } %t3) + store { ptr, i64, i64 } { ptr @.str.7089, i64 0, i64 0 }, ptr %a4 + store i64 0, ptr %a5 + %t6 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + %t8 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + call void @finch_arr_make(ptr %a7, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a7 + store i64 0, ptr %a11 + %t12 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 2 + %t13 = load i64, ptr %t12 + store i64 0, ptr %a14 + br label %n.cond10662 +n.cond10662: + %t15 = load i64, ptr %a14 + %t16 = icmp slt i64 %t15, %t13 + br i1 %t16, label %n.body10663, label %n.end10664 +n.body10663: + %t17 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t6, i32 0, i32 0 + %t18 = load ptr, ptr %t17 + %t19 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t18, i64 %t15 + %t20 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 0 + %t21 = load i64, ptr %t20 + %t22 = icmp ne i64 %t21, 0 + br i1 %t22, label %entry.live10665, label %entry.next10666 +entry.live10665: + %t23 = load i64, ptr %a11 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t23 + %t25 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t19, i32 0, i32 1 + call void @finch_str_copy(ptr %t24, ptr %t25) + %t26 = add i64 %t23, 1 + store i64 %t26, ptr %a11 + br label %entry.next10666 +entry.next10666: + %t27 = load i64, ptr %a14 + %t28 = add i64 %t27, 1 + store i64 %t28, ptr %a14 + br label %n.cond10662 +n.end10664: + %t29 = load { ptr, i64, i64 }, ptr %a7 + store { ptr, i64, i64 } %t29, ptr %a30 + store i64 0, ptr %a31 + br label %each.cond10667 +each.cond10667: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a30, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = load i64, ptr %a31 + %t35 = icmp slt i64 %t34, %t33 + br i1 %t35, label %each.body10668, label %each.end10670 +each.body10668: + %t36 = load ptr, ptr %a30 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i64 %t34 + %t38 = load { ptr, i64, i64 }, ptr %t37 + store { ptr, i64, i64 } %t38, ptr %a39 + %t40 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 + %t41 = load { ptr, i64, i64 }, ptr %t40 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } { ptr @.str.7090, i64 4, i64 0 }, ptr %a44 + call void @finch_str_concat(ptr %a42, ptr %a43, ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a42 + %t46 = load i64, ptr %a5 + call void @finch_str_from_int(ptr %a47, i64 %t46) + %t48 = load { ptr, i64, i64 }, ptr %a47 + store { ptr, i64, i64 } %t45, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a51 + call void @finch_str_concat(ptr %a49, ptr %a50, ptr %a51) + store { ptr, i64, i64 } %t45, ptr %a52 + call void @finch_str_drop(ptr %a52) + store { ptr, i64, i64 } %t48, ptr %a53 + call void @finch_str_drop(ptr %a53) + %t54 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } %t54, ptr %a56 + store { ptr, i64, i64 } { ptr @.str.7091, i64 4, i64 0 }, ptr %a57 + call void @finch_str_concat(ptr %a55, ptr %a56, ptr %a57) + store { ptr, i64, i64 } %t54, ptr %a58 + call void @finch_str_drop(ptr %a58) + %t59 = load { ptr, i64, i64 }, ptr %a55 + store { ptr, i64, i64 } %t59, ptr %a60 + %t61 = load { ptr, i64, i64 }, ptr %a60 + %t62 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t63 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t63, ptr %a64 + %t65 = call i64 @finch_map_find(ptr %t62, ptr %a64, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t66 = icmp slt i64 %t65, 0 + br i1 %t66, label %map.missing10671, label %map.found10672 +map.missing10671: + store { ptr, i64, i64 } zeroinitializer, ptr %a67 + store { ptr, i64, i64 } %t63, ptr %a68 + call void @finch_buf_str(ptr %a67, ptr %a68, i32 1) + call void @finch_map_missing(ptr @.str.7092, i64 333, ptr %a67) + unreachable +map.found10672: + %t69 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t62, i32 0, i32 0 + %t70 = load ptr, ptr %t69 + %t71 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t70, i64 %t65 + %t72 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t71, i32 0, i32 2 + %t73 = load { ptr, i64, i64 }, ptr %t72 + store { ptr, i64, i64 } %t61, ptr %a74 + store { ptr, i64, i64 } %t73, ptr %a75 + %t76 = call i32 @finch_write_file(ptr %a74, ptr %a75) + %t77 = icmp ne i32 %t76, 0 + %t78 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t78, ptr %a80 + store { ptr, i64, i64 } { ptr @.str.7093, i64 11, i64 0 }, ptr %a81 + call void @finch_str_concat(ptr %a79, ptr %a80, ptr %a81) + %t82 = load { ptr, i64, i64 }, ptr %a79 + %t83 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t83, ptr %a85 + store { ptr, i64, i64 } { ptr @.str.7094, i64 1, i64 0 }, ptr %a86 + call void @finch_str_concat(ptr %a84, ptr %a85, ptr %a86) + %t87 = load { ptr, i64, i64 }, ptr %a84 + %t88 = load { ptr, i64, i64 }, ptr %a60 + store { ptr, i64, i64 } %t87, ptr %a90 + store { ptr, i64, i64 } %t88, ptr %a91 + call void @finch_str_concat(ptr %a89, ptr %a90, ptr %a91) + store { ptr, i64, i64 } %t87, ptr %a92 + call void @finch_str_drop(ptr %a92) + %t93 = load { ptr, i64, i64 }, ptr %a89 + %t94 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t93) + store { ptr, i64, i64 } %t93, ptr %a95 + call void @finch_str_drop(ptr %a95) + store { ptr, i64, i64 } %t82, ptr %a97 + store { ptr, i64, i64 } %t94, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + store { ptr, i64, i64 } %t82, ptr %a99 + call void @finch_str_drop(ptr %a99) + store { ptr, i64, i64 } %t94, ptr %a100 + call void @finch_str_drop(ptr %a100) + %t101 = load { ptr, i64, i64 }, ptr %a96 + %t102 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t101, ptr %a4 + store { ptr, i64, i64 } %t102, ptr %a103 + call void @finch_str_drop(ptr %a103) + %t104 = load i64, ptr %a5 + %t105 = add i64 %t104, 1 + store i64 %t105, ptr %a5 + call void @finch_str_drop(ptr %a60) + br label %each.step10669 +each.step10669: + %t106 = load i64, ptr %a31 + %t107 = add i64 %t106, 1 + store i64 %t107, ptr %a31 + br label %each.cond10667 +each.end10670: + call void @finch.drop.arr_str(ptr %a30) + %t108 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 1 + %t109 = load { ptr, i64, i64 }, ptr %t108 + store { ptr, i64, i64 } %t109, ptr %a111 + store { ptr, i64, i64 } { ptr @.str.7095, i64 8, i64 0 }, ptr %a112 + call void @finch_str_concat(ptr %a110, ptr %a111, ptr %a112) + %t113 = load { ptr, i64, i64 }, ptr %a110 + store { ptr, i64, i64 } %t113, ptr %a114 + %t115 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 0 + %t116 = load { ptr, i64, i64 }, ptr %t115 + %t117 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t116) + store { ptr, i64, i64 } %t117, ptr %a119 + store { ptr, i64, i64 } { ptr @.str.7096, i64 7, i64 0 }, ptr %a120 + call void @finch_str_concat(ptr %a118, ptr %a119, ptr %a120) + store { ptr, i64, i64 } %t117, ptr %a121 + call void @finch_str_drop(ptr %a121) + %t122 = load { ptr, i64, i64 }, ptr %a118 + %t123 = load { ptr, i64, i64 }, ptr %a1 + %t124 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t123) + store { ptr, i64, i64 } %t122, ptr %a126 + store { ptr, i64, i64 } %t124, ptr %a127 + call void @finch_str_concat(ptr %a125, ptr %a126, ptr %a127) + store { ptr, i64, i64 } %t122, ptr %a128 + call void @finch_str_drop(ptr %a128) + store { ptr, i64, i64 } %t124, ptr %a129 + call void @finch_str_drop(ptr %a129) + %t130 = load { ptr, i64, i64 }, ptr %a125 + %t131 = load { ptr, i64, i64 }, ptr %a4 + store { ptr, i64, i64 } %t130, ptr %a133 + store { ptr, i64, i64 } %t131, ptr %a134 + call void @finch_str_concat(ptr %a132, ptr %a133, ptr %a134) + store { ptr, i64, i64 } %t130, ptr %a135 + call void @finch_str_drop(ptr %a135) + %t136 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t136, ptr %a138 + store { ptr, i64, i64 } { ptr @.str.7097, i64 3, i64 0 }, ptr %a139 + call void @finch_str_concat(ptr %a137, ptr %a138, ptr %a139) + store { ptr, i64, i64 } %t136, ptr %a140 + call void @finch_str_drop(ptr %a140) + %t141 = load { ptr, i64, i64 }, ptr %a137 + %t142 = load { ptr, i64, i64 }, ptr %a114 + %t143 = call { ptr, i64, i64 } @finch.host.quote({ ptr, i64, i64 } %t142) + store { ptr, i64, i64 } %t141, ptr %a145 + store { ptr, i64, i64 } %t143, ptr %a146 + call void @finch_str_concat(ptr %a144, ptr %a145, ptr %a146) + store { ptr, i64, i64 } %t141, ptr %a147 + call void @finch_str_drop(ptr %a147) + store { ptr, i64, i64 } %t143, ptr %a148 + call void @finch_str_drop(ptr %a148) + %t149 = load { ptr, i64, i64 }, ptr %a144 + store { ptr, i64, i64 } %t149, ptr %a151 + store { ptr, i64, i64 } { ptr @.str.7098, i64 5, i64 0 }, ptr %a152 + call void @finch_str_concat(ptr %a150, ptr %a151, ptr %a152) + store { ptr, i64, i64 } %t149, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load { ptr, i64, i64 }, ptr %a150 + %t155 = call i64 @finch.host.run({ ptr, i64, i64 } %t154) + store { ptr, i64, i64 } %t154, ptr %a156 + call void @finch_str_drop(ptr %a156) + %t157 = load { ptr, i64, i64 }, ptr %a114 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } zeroinitializer, ptr %a159 + store { ptr, i64, i64 } zeroinitializer, ptr %a160 + %t161 = call i32 @finch_try_read_file(ptr %a159, ptr %a158, ptr %a160) + %t162 = icmp eq i32 %t161, 0 + %t163 = load { ptr, i64, i64 }, ptr %a160 + %t164 = load { ptr, i64, i64 }, ptr %a159 + br i1 %t162, label %or.failed10673, label %or.ok10674 +or.failed10673: + store { ptr, i64, i64 } %t163, ptr %a165 + call void @finch_str_drop(ptr %a165) + br label %or.bend10675 +or.bend10675: + br label %or.end10676 +or.ok10674: + br label %or.end10676 +or.end10676: + %t166 = phi { ptr, i64, i64 } [ { ptr @.str.7099, i64 0, i64 0 }, %or.bend10675 ], [ %t164, %or.ok10674 ] + %t167 = call %S.lsp.Analysis @finch.lsp.parseOutput({ ptr, i64, i64 } %t166) + store { ptr, i64, i64 } %t166, ptr %a168 + call void @finch_str_drop(ptr %a168) + store %S.lsp.Analysis %t167, ptr %a169 + %t170 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 6 + %t171 = getelementptr inbounds %S.lsp.Diag, ptr %t170, i32 0, i32 0 + %t172 = load i1, ptr %t171 + %t173 = xor i1 %t172, true + br i1 %t173, label %then10677, label %else10678 +then10677: + %t174 = load %S.lsp.Analysis, ptr %a169 + %t175 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t176 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t176, ptr %a177 + store i32 0, ptr %a178 + %t179 = call i64 @finch_map_slot(ptr %t175, ptr %a177, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a178) + %t180 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t175, i32 0, i32 0 + %t181 = load ptr, ptr %t180 + %t182 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t181, i64 %t179 + %t183 = load i32, ptr %a178 + %t184 = icmp ne i32 %t183, 0 + br i1 %t184, label %map.new10680, label %map.have10681 +map.new10680: + %t185 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 1 + call void @finch_str_copy(ptr %t185, ptr %a177) + %t186 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 + store %S.lsp.Analysis zeroinitializer, ptr %t186 + br label %map.have10681 +map.have10681: + %t187 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t182, i32 0, i32 2 + store %S.lsp.Analysis %t174, ptr %a188 + call void @finch.copy.S_lsp_Analysis(ptr %a189, ptr %a188) + %t190 = load %S.lsp.Analysis, ptr %a189 + %t191 = load %S.lsp.Analysis, ptr %t187 + store %S.lsp.Analysis %t190, ptr %t187 + store %S.lsp.Analysis %t191, ptr %a192 + call void @finch.drop.S_lsp_Analysis(ptr %a192) + br label %endif10679 +else10678: + %t193 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t194 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t194, ptr %a195 + %t196 = call i64 @finch_map_find(ptr %t193, ptr %a195, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t197 = icmp sge i64 %t196, 0 + br i1 %t197, label %then10712, label %endif10714 +then10712: + %t198 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t199 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t199, ptr %a200 + %t201 = call i64 @finch_map_find(ptr %t198, ptr %a200, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t202 = icmp slt i64 %t201, 0 + br i1 %t202, label %map.missing10715, label %map.found10716 +map.missing10715: + store { ptr, i64, i64 } zeroinitializer, ptr %a203 + store { ptr, i64, i64 } %t199, ptr %a204 + call void @finch_buf_str(ptr %a203, ptr %a204, i32 1) + call void @finch_map_missing(ptr @.str.7100, i64 344, ptr %a203) + unreachable +map.found10716: + %t205 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t198, i32 0, i32 0 + %t206 = load ptr, ptr %t205 + %t207 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t206, i64 %t201 + %t208 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t207, i32 0, i32 2 + %t209 = load %S.lsp.Analysis, ptr %t208 + store %S.lsp.Analysis %t209, ptr %a210 + call void @finch.copy.S_lsp_Analysis(ptr %a211, ptr %a210) + %t212 = load %S.lsp.Analysis, ptr %a211 + store %S.lsp.Analysis %t212, ptr %a213 + %t214 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 2 + %t215 = load { ptr, i64, i64 }, ptr %t214 + %t216 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 2 + store { ptr, i64, i64 } %t215, ptr %a217 + call void @finch.copy.arr_S_lsp_FnRec(ptr %a218, ptr %a217) + %t219 = load { ptr, i64, i64 }, ptr %a218 + %t220 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } %t219, ptr %t216 + store { ptr, i64, i64 } %t220, ptr %a221 + call void @finch.drop.arr_S_lsp_FnRec(ptr %a221) + %t222 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 3 + %t223 = load { ptr, i64, i64 }, ptr %t222 + %t224 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 3 + store { ptr, i64, i64 } %t223, ptr %a225 + call void @finch.copy.arr_S_lsp_StructRec(ptr %a226, ptr %a225) + %t227 = load { ptr, i64, i64 }, ptr %a226 + %t228 = load { ptr, i64, i64 }, ptr %t224 + store { ptr, i64, i64 } %t227, ptr %t224 + store { ptr, i64, i64 } %t228, ptr %a229 + call void @finch.drop.arr_S_lsp_StructRec(ptr %a229) + %t230 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 4 + %t231 = load { ptr, i64, i64 }, ptr %t230 + %t232 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 4 + store { ptr, i64, i64 } %t231, ptr %a233 + call void @finch.copy.arr_S_lsp_EnumRec(ptr %a234, ptr %a233) + %t235 = load { ptr, i64, i64 }, ptr %a234 + %t236 = load { ptr, i64, i64 }, ptr %t232 + store { ptr, i64, i64 } %t235, ptr %t232 + store { ptr, i64, i64 } %t236, ptr %a237 + call void @finch.drop.arr_S_lsp_EnumRec(ptr %a237) + %t238 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 1 + %t239 = load { ptr, i64, i64 }, ptr %t238 + %t240 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 1 + store { ptr, i64, i64 } %t239, ptr %a241 + call void @finch.copy.arr_S_lsp_VarRec(ptr %a242, ptr %a241) + %t243 = load { ptr, i64, i64 }, ptr %a242 + %t244 = load { ptr, i64, i64 }, ptr %t240 + store { ptr, i64, i64 } %t243, ptr %t240 + store { ptr, i64, i64 } %t244, ptr %a245 + call void @finch.drop.arr_S_lsp_VarRec(ptr %a245) + %t246 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 + %t247 = getelementptr inbounds { ptr, i64, i64 }, ptr %t246, i32 0, i32 1 + %t248 = load i64, ptr %t247 + %t249 = icmp eq i64 %t248, 0 + br i1 %t249, label %then10717, label %endif10719 +then10717: + %t250 = getelementptr inbounds %S.lsp.Analysis, ptr %a213, i32 0, i32 5 + %t251 = load { ptr, i64, i64 }, ptr %t250 + %t252 = getelementptr inbounds %S.lsp.Analysis, ptr %a169, i32 0, i32 5 + store { ptr, i64, i64 } %t251, ptr %a253 + call void @finch.copy.arr_str(ptr %a254, ptr %a253) + %t255 = load { ptr, i64, i64 }, ptr %a254 + %t256 = load { ptr, i64, i64 }, ptr %t252 + store { ptr, i64, i64 } %t255, ptr %t252 + store { ptr, i64, i64 } %t256, ptr %a257 + call void @finch.drop.arr_str(ptr %a257) + br label %endif10719 +endif10719: + call void @finch.drop.S_lsp_Analysis(ptr %a213) + br label %endif10714 +endif10714: + br label %endif10679 +endif10679: + %t258 = load %S.lsp.Analysis, ptr %a169 + %t259 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t260 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t260, ptr %a261 + store i32 0, ptr %a262 + %t263 = call i64 @finch_map_slot(ptr %t259, ptr %a261, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a262) + %t264 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t259, i32 0, i32 0 + %t265 = load ptr, ptr %t264 + %t266 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t265, i64 %t263 + %t267 = load i32, ptr %a262 + %t268 = icmp ne i32 %t267, 0 + br i1 %t268, label %map.new10720, label %map.have10721 +map.new10720: + %t269 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 1 + call void @finch_str_copy(ptr %t269, ptr %a261) + %t270 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 + store %S.lsp.Analysis zeroinitializer, ptr %t270 + br label %map.have10721 +map.have10721: + %t271 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t266, i32 0, i32 2 + store %S.lsp.Analysis %t258, ptr %a272 + call void @finch.copy.S_lsp_Analysis(ptr %a273, ptr %a272) + %t274 = load %S.lsp.Analysis, ptr %a273 + %t275 = load %S.lsp.Analysis, ptr %t271 + store %S.lsp.Analysis %t274, ptr %t271 + store %S.lsp.Analysis %t275, ptr %a276 + call void @finch.drop.S_lsp_Analysis(ptr %a276) + %t277 = load { ptr, i64, i64 }, ptr %a1 + %t278 = load %S.lsp.Analysis, ptr %a169 + call void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %t277, %S.lsp.Analysis %t278) + call void @finch.drop.S_lsp_Analysis(ptr %a169) + call void @finch_str_drop(ptr %a114) + call void @finch_str_drop(ptr %a4) + ret void +} + +define internal void @finch.lsp.Server.publish(ptr %self, { ptr, i64, i64 } %p0, %S.lsp.Analysis %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.lsp.Analysis, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca i64, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca i64, align 16 + %a29 = alloca i64, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca i64, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca %S.json.Json, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca i64, align 16 + %a88 = alloca i64, align 16 + %a92 = alloca %S.json.Json, align 16 + %a98 = alloca %S.json.Json, align 16 + %a100 = alloca %S.json.Json, align 16 + %a102 = alloca %S.json.Json, align 16 + %a107 = alloca %S.json.Json, align 16 + %a111 = alloca { ptr, i64, i64 }, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a119 = alloca %S.json.Json, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca %S.json.Json, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.lsp.Analysis %p1, ptr %a2 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + %t7 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t8 = call ptr @finch_alloc(i64 %t7) + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 0 + store { ptr, i64, i64 } %t6, ptr %t9 + %t10 = insertvalue { ptr, i64, i64 } undef, ptr %t8, 0 + %t11 = insertvalue { ptr, i64, i64 } %t10, i64 1, 1 + %t12 = insertvalue { ptr, i64, i64 } %t11, i64 1, 2 + store { ptr, i64, i64 } %t12, ptr %a13 + %t14 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 + store i64 0, ptr %a15 + br label %each.cond10722 +each.cond10722: + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t17 = load i64, ptr %t16 + %t18 = load i64, ptr %a15 + %t19 = icmp slt i64 %t18, %t17 + br i1 %t19, label %each.body10723, label %each.end10725 +each.body10723: + %t20 = load ptr, ptr %t14 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + %t22 = load { ptr, i64, i64 }, ptr %t21 + store { ptr, i64, i64 } %t22, ptr %a23 + %t24 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t25 = load { ptr, i64, i64 }, ptr %a23 + store i64 -1, ptr %a26 + %t27 = load i64, ptr %t24 + %t28 = load ptr, ptr %a13 + store i64 0, ptr %a29 + br label %find.cond10726 +find.cond10726: + %t30 = load i64, ptr %a29 + %t31 = icmp slt i64 %t30, %t27 + br i1 %t31, label %find.body10727, label %find.end10730 +find.body10727: + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t30 + %t33 = load { ptr, i64, i64 }, ptr %t32 + store { ptr, i64, i64 } %t33, ptr %a34 + store { ptr, i64, i64 } %t25, ptr %a35 + %t36 = call i32 @finch_str_eq(ptr %a34, ptr %a35) + %t37 = icmp ne i32 %t36, 0 + br i1 %t37, label %find.hit10728, label %find.next10729 +find.hit10728: + store i64 %t30, ptr %a26 + br label %find.end10730 +find.next10729: + %t38 = add i64 %t30, 1 + store i64 %t38, ptr %a29 + br label %find.cond10726 +find.end10730: + %t39 = load i64, ptr %a26 + %t40 = icmp sge i64 %t39, 0 + %t41 = xor i1 %t40, true + br i1 %t41, label %then10731, label %endif10733 +then10731: + %t42 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t43 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t43, ptr %a44 + call void @finch_str_copy(ptr %a45, ptr %a44) + %t46 = load { ptr, i64, i64 }, ptr %a45 + %t47 = load i64, ptr %t42 + %t48 = add i64 %t47, 1 + call void @finch_arr_reserve(ptr %a13, i64 %t48, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t49 = load ptr, ptr %a13 + %t50 = getelementptr inbounds { ptr, i64, i64 }, ptr %t49, i64 %t47 + store { ptr, i64, i64 } %t46, ptr %t50 + store i64 %t48, ptr %t42 + br label %endif10733 +endif10733: + br label %each.step10724 +each.step10724: + %t51 = load i64, ptr %a15 + %t52 = add i64 %t51, 1 + store i64 %t52, ptr %a15 + br label %each.cond10722 +each.end10725: + store { ptr, i64, i64 } zeroinitializer, ptr %a53 + store i64 0, ptr %a54 + br label %each.cond10734 +each.cond10734: + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %a13, i32 0, i32 1 + %t56 = load i64, ptr %t55 + %t57 = load i64, ptr %a54 + %t58 = icmp slt i64 %t57, %t56 + br i1 %t58, label %each.body10735, label %each.end10737 +each.body10735: + %t59 = load ptr, ptr %a13 + %t60 = getelementptr inbounds { ptr, i64, i64 }, ptr %t59, i64 %t57 + %t61 = load { ptr, i64, i64 }, ptr %t60 + store { ptr, i64, i64 } %t61, ptr %a62 + %t63 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t63, ptr %a64 + %t65 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t66 = getelementptr inbounds %S.lsp.Diag, ptr %t65, i32 0, i32 0 + %t67 = load i1, ptr %t66 + br label %logic.from10738 +logic.from10738: + br i1 %t67, label %logic.rhs10739, label %logic.end10740 +logic.rhs10739: + %t68 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t69 = getelementptr inbounds %S.lsp.Diag, ptr %t68, i32 0, i32 1 + %t70 = load { ptr, i64, i64 }, ptr %t69 + %t71 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t70, ptr %a72 + store { ptr, i64, i64 } %t71, ptr %a73 + %t74 = call i32 @finch_str_eq(ptr %a72, ptr %a73) + %t75 = icmp ne i32 %t74, 0 + br label %logic.rend10741 +logic.rend10741: + br label %logic.end10740 +logic.end10740: + %t76 = phi i1 [ false, %logic.from10738 ], [ %t75, %logic.rend10741 ] + br i1 %t76, label %then10742, label %endif10744 +then10742: + %t77 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t78 = getelementptr inbounds %S.lsp.Diag, ptr %t77, i32 0, i32 2 + %t79 = load i64, ptr %t78 + %t80 = sub i64 %t79, 1 + store i64 %t80, ptr %a81 + %t82 = load i64, ptr %a81 + %t83 = icmp slt i64 %t82, 0 + br i1 %t83, label %then10745, label %endif10747 +then10745: + store i64 0, ptr %a81 + br label %endif10747 +endif10747: + %t84 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t85 = getelementptr inbounds %S.lsp.Diag, ptr %t84, i32 0, i32 3 + %t86 = load i64, ptr %t85 + %t87 = sub i64 %t86, 1 + store i64 %t87, ptr %a88 + %t89 = load i64, ptr %a88 + %t90 = icmp slt i64 %t89, 0 + br i1 %t90, label %then10748, label %endif10750 +then10748: + store i64 0, ptr %a88 + br label %endif10750 +endif10750: + %t91 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t91, ptr %a92 + %t93 = load i64, ptr %a81 + %t94 = load i64, ptr %a88 + %t95 = load i64, ptr %a88 + %t96 = add i64 %t95, 1 + %t97 = call %S.json.Json @finch.lsp.range(i64 %t93, i64 %t94, i64 %t96) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7101, i64 5, i64 0 }, %S.json.Json %t97) + store %S.json.Json %t97, ptr %a98 + call void @finch.drop.S_json_Json(ptr %a98) + %t99 = call %S.json.Json @finch.lsp.num(i64 1) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7102, i64 8, i64 0 }, %S.json.Json %t99) + store %S.json.Json %t99, ptr %a100 + call void @finch.drop.S_json_Json(ptr %a100) + %t101 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7104, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7103, i64 6, i64 0 }, %S.json.Json %t101) + store %S.json.Json %t101, ptr %a102 + call void @finch.drop.S_json_Json(ptr %a102) + %t103 = getelementptr inbounds %S.lsp.Analysis, ptr %a2, i32 0, i32 6 + %t104 = getelementptr inbounds %S.lsp.Diag, ptr %t103, i32 0, i32 4 + %t105 = load { ptr, i64, i64 }, ptr %t104 + %t106 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t105) + call void @finch.json.Json.set(ptr %a92, { ptr, i64, i64 } { ptr @.str.7105, i64 7, i64 0 }, %S.json.Json %t106) + store %S.json.Json %t106, ptr %a107 + call void @finch.drop.S_json_Json(ptr %a107) + %t108 = load %S.json.Json, ptr %a92 + call void @finch.json.Json.push(ptr %a64, %S.json.Json %t108) + %t109 = getelementptr inbounds { ptr, i64, i64 }, ptr %a53, i32 0, i32 1 + %t110 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t110, ptr %a111 + call void @finch_str_copy(ptr %a112, ptr %a111) + %t113 = load { ptr, i64, i64 }, ptr %a112 + %t114 = load i64, ptr %t109 + %t115 = add i64 %t114, 1 + call void @finch_arr_reserve(ptr %a53, i64 %t115, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t116 = load ptr, ptr %a53 + %t117 = getelementptr inbounds { ptr, i64, i64 }, ptr %t116, i64 %t114 + store { ptr, i64, i64 } %t113, ptr %t117 + store i64 %t115, ptr %t109 + call void @finch.drop.S_json_Json(ptr %a92) + br label %endif10744 +endif10744: + %t118 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t118, ptr %a119 + %t120 = load { ptr, i64, i64 }, ptr %a62 + %t121 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t120) + %t122 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t121) + store { ptr, i64, i64 } %t121, ptr %a123 + call void @finch_str_drop(ptr %a123) + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7106, i64 3, i64 0 }, %S.json.Json %t122) + store %S.json.Json %t122, ptr %a124 + call void @finch.drop.S_json_Json(ptr %a124) + %t125 = load %S.json.Json, ptr %a64 + call void @finch.json.Json.set(ptr %a119, { ptr, i64, i64 } { ptr @.str.7107, i64 11, i64 0 }, %S.json.Json %t125) + %t126 = load %S.json.Json, ptr %a119 + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7108, i64 31, i64 0 }, %S.json.Json %t126) + call void @finch.drop.S_json_Json(ptr %a119) + call void @finch.drop.S_json_Json(ptr %a64) + br label %each.step10736 +each.step10736: + %t127 = load i64, ptr %a54 + %t128 = add i64 %t127, 1 + store i64 %t128, ptr %a54 + br label %each.cond10734 +each.end10737: + %t129 = load { ptr, i64, i64 }, ptr %a53 + %t130 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 5 + store { ptr, i64, i64 } %t129, ptr %a131 + call void @finch.copy.arr_str(ptr %a132, ptr %a131) + %t133 = load { ptr, i64, i64 }, ptr %a132 + %t134 = load { ptr, i64, i64 }, ptr %t130 + store { ptr, i64, i64 } %t133, ptr %t130 + store { ptr, i64, i64 } %t134, ptr %a135 + call void @finch.drop.arr_str(ptr %a135) + call void @finch.drop.arr_str(ptr %a53) + call void @finch.drop.arr_str(ptr %a13) + ret void +} + +define internal i64 @finch.lsp.refAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a19 = alloca %S.lsp.Ref, align 16 + %a20 = alloca %S.lsp.Ref, align 16 + %a22 = alloca %S.lsp.Ref, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond10751 +for.cond10751: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body10752, label %for.end10754 +for.body10752: + %t11 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t12 = load i64, ptr %a8 + %t13 = load { ptr, i64, i64 }, ptr %t11 + %t14 = extractvalue { ptr, i64, i64 } %t13, 1 + %t15 = icmp uge i64 %t12, %t14 + br i1 %t15, label %range10755, label %inrange10756 +range10755: + call void @finch_panic_index(ptr @.str.7109, i64 397, i64 %t12, i64 %t14) + unreachable +inrange10756: + %t16 = extractvalue { ptr, i64, i64 } %t13, 0 + %t17 = getelementptr inbounds %S.lsp.Ref, ptr %t16, i64 %t12 + %t18 = load %S.lsp.Ref, ptr %t17 + store %S.lsp.Ref %t18, ptr %a19 + call void @finch.copy.S_lsp_Ref(ptr %a20, ptr %a19) + %t21 = load %S.lsp.Ref, ptr %a20 + store %S.lsp.Ref %t21, ptr %a22 + %t23 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = load i64, ptr %a3 + %t26 = icmp eq i64 %t24, %t25 + br label %logic.from10757 +logic.from10757: + br i1 %t26, label %logic.rhs10758, label %logic.end10759 +logic.rhs10758: + %t27 = load i64, ptr %a4 + %t28 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 + %t29 = load i64, ptr %t28 + %t30 = icmp sge i64 %t27, %t29 + br label %logic.rend10760 +logic.rend10760: + br label %logic.end10759 +logic.end10759: + %t31 = phi i1 [ false, %logic.from10757 ], [ %t30, %logic.rend10760 ] + br label %logic.from10761 +logic.from10761: + br i1 %t31, label %logic.rhs10762, label %logic.end10763 +logic.rhs10762: + %t32 = load i64, ptr %a4 + %t33 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 2 + %t34 = load i64, ptr %t33 + %t35 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 3 + %t36 = load i64, ptr %t35 + %t37 = add i64 %t34, %t36 + %t38 = icmp sle i64 %t32, %t37 + br label %logic.rend10764 +logic.rend10764: + br label %logic.end10763 +logic.end10763: + %t39 = phi i1 [ false, %logic.from10761 ], [ %t38, %logic.rend10764 ] + br label %logic.from10765 +logic.from10765: + br i1 %t39, label %logic.rhs10766, label %logic.end10767 +logic.rhs10766: + %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a22, i32 0, i32 0 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t41, ptr %a43 + store { ptr, i64, i64 } %t42, ptr %a44 + %t45 = call i32 @finch_str_eq(ptr %a43, ptr %a44) + %t46 = icmp ne i32 %t45, 0 + br label %logic.rend10768 +logic.rend10768: + br label %logic.end10767 +logic.end10767: + %t47 = phi i1 [ false, %logic.from10765 ], [ %t46, %logic.rend10768 ] + br i1 %t47, label %then10769, label %endif10771 +then10769: + %t48 = load i64, ptr %a8 + call void @finch.drop.S_lsp_Ref(ptr %a22) + ret i64 %t48 +endif10771: + call void @finch.drop.S_lsp_Ref(ptr %a22) + br label %for.step10753 +for.step10753: + %t49 = load i64, ptr %a8 + %t50 = add i64 %t49, 1 + store i64 %t50, ptr %a8 + br label %for.cond10751 +for.end10754: + ret i64 -1 +} + +define internal %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a10 = alloca i64, align 16 + %a15 = alloca %S.json.Json, align 16 + %a17 = alloca %S.json.Json, align 16 + %a28 = alloca %S.json.Json, align 16 + %a30 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = load %S.lsp.Analysis, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = load i64, ptr %a3 + %t8 = load i64, ptr %a4 + %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br i1 %t12, label %then10772, label %endif10774 +then10772: + %t13 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t13 +endif10774: + %t14 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t14, ptr %a15 + %t16 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7111, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7110, i64 4, i64 0 }, %S.json.Json %t16) + store %S.json.Json %t16, ptr %a17 + call void @finch.drop.S_json_Json(ptr %a17) + %t18 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t19 = load i64, ptr %a10 + %t20 = load { ptr, i64, i64 }, ptr %t18 + %t21 = extractvalue { ptr, i64, i64 } %t20, 1 + %t22 = icmp uge i64 %t19, %t21 + br i1 %t22, label %range10775, label %inrange10776 +range10775: + call void @finch_panic_index(ptr @.str.7113, i64 412, i64 %t19, i64 %t21) + unreachable +inrange10776: + %t23 = extractvalue { ptr, i64, i64 } %t20, 0 + %t24 = getelementptr inbounds %S.lsp.Ref, ptr %t23, i64 %t19 + %t25 = getelementptr inbounds %S.lsp.Ref, ptr %t24, i32 0, i32 7 + %t26 = load { ptr, i64, i64 }, ptr %t25 + %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7112, i64 5, i64 0 }, %S.json.Json %t27) + store %S.json.Json %t27, ptr %a28 + call void @finch.drop.S_json_Json(ptr %a28) + %t29 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t29, ptr %a30 + %t31 = load %S.json.Json, ptr %a15 + call void @finch.json.Json.set(ptr %a30, { ptr, i64, i64 } { ptr @.str.7114, i64 8, i64 0 }, %S.json.Json %t31) + %t32 = load %S.json.Json, ptr %a30 + call void @finch.drop.S_json_Json(ptr %a15) + ret %S.json.Json %t32 +} + +define internal %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, i64 %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a10 = alloca i64, align 16 + %a34 = alloca %S.lsp.Ref, align 16 + %a35 = alloca %S.lsp.Ref, align 16 + %a37 = alloca %S.lsp.Ref, align 16 + %a39 = alloca %S.json.Json, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca %S.json.Json, align 16 + %a56 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + %t5 = load %S.lsp.Analysis, ptr %a1 + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = load i64, ptr %a3 + %t8 = load i64, ptr %a4 + %t9 = call i64 @finch.lsp.refAt(%S.lsp.Analysis %t5, { ptr, i64, i64 } %t6, i64 %t7, i64 %t8) + store i64 %t9, ptr %a10 + %t11 = load i64, ptr %a10 + %t12 = icmp slt i64 %t11, 0 + br label %logic.from10777 +logic.from10777: + br i1 %t12, label %logic.end10779, label %logic.rhs10778 +logic.rhs10778: + %t13 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t14 = load i64, ptr %a10 + %t15 = load { ptr, i64, i64 }, ptr %t13 + %t16 = extractvalue { ptr, i64, i64 } %t15, 1 + %t17 = icmp uge i64 %t14, %t16 + br i1 %t17, label %range10780, label %inrange10781 +range10780: + call void @finch_panic_index(ptr @.str.7115, i64 420, i64 %t14, i64 %t16) + unreachable +inrange10781: + %t18 = extractvalue { ptr, i64, i64 } %t15, 0 + %t19 = getelementptr inbounds %S.lsp.Ref, ptr %t18, i64 %t14 + %t20 = getelementptr inbounds %S.lsp.Ref, ptr %t19, i32 0, i32 4 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = icmp eq i64 %t22, 0 + br label %logic.rend10782 +logic.rend10782: + br label %logic.end10779 +logic.end10779: + %t24 = phi i1 [ true, %logic.from10777 ], [ %t23, %logic.rend10782 ] + br i1 %t24, label %then10783, label %endif10785 +then10783: + %t25 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t25 +endif10785: + %t26 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 0 + %t27 = load i64, ptr %a10 + %t28 = load { ptr, i64, i64 }, ptr %t26 + %t29 = extractvalue { ptr, i64, i64 } %t28, 1 + %t30 = icmp uge i64 %t27, %t29 + br i1 %t30, label %range10786, label %inrange10787 +range10786: + call void @finch_panic_index(ptr @.str.7116, i64 423, i64 %t27, i64 %t29) + unreachable +inrange10787: + %t31 = extractvalue { ptr, i64, i64 } %t28, 0 + %t32 = getelementptr inbounds %S.lsp.Ref, ptr %t31, i64 %t27 + %t33 = load %S.lsp.Ref, ptr %t32 + store %S.lsp.Ref %t33, ptr %a34 + call void @finch.copy.S_lsp_Ref(ptr %a35, ptr %a34) + %t36 = load %S.lsp.Ref, ptr %a35 + store %S.lsp.Ref %t36, ptr %a37 + %t38 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t38, ptr %a39 + %t40 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 4 + %t41 = load { ptr, i64, i64 }, ptr %t40 + %t42 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t41) + %t43 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t42) + store { ptr, i64, i64 } %t42, ptr %a44 + call void @finch_str_drop(ptr %a44) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7117, i64 3, i64 0 }, %S.json.Json %t43) + store %S.json.Json %t43, ptr %a45 + call void @finch.drop.S_json_Json(ptr %a45) + %t46 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 5 + %t47 = load i64, ptr %t46 + %t48 = sub i64 %t47, 1 + %t49 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 + %t50 = load i64, ptr %t49 + %t51 = sub i64 %t50, 1 + %t52 = getelementptr inbounds %S.lsp.Ref, ptr %a37, i32 0, i32 6 + %t53 = load i64, ptr %t52 + %t54 = sub i64 %t53, 1 + %t55 = call %S.json.Json @finch.lsp.range(i64 %t48, i64 %t51, i64 %t54) + call void @finch.json.Json.set(ptr %a39, { ptr, i64, i64 } { ptr @.str.7118, i64 5, i64 0 }, %S.json.Json %t55) + store %S.json.Json %t55, ptr %a56 + call void @finch.drop.S_json_Json(ptr %a56) + %t57 = load %S.json.Json, ptr %a39 + call void @finch.drop.S_lsp_Ref(ptr %a37) + ret %S.json.Json %t57 +} + +define internal %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca %S.json.Json, align 16 + %a6 = alloca i64, align 16 + %a14 = alloca %S.lsp.FnRec, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a22 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca %S.json.Json, align 16 + %a61 = alloca i64, align 16 + %a69 = alloca %S.lsp.StructRec, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca %S.json.Json, align 16 + %a95 = alloca i64, align 16 + %a103 = alloca %S.lsp.EnumRec, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t3, ptr %a4 + %t5 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a6 + br label %each.cond10788 +each.cond10788: + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = load i64, ptr %a6 + %t10 = icmp slt i64 %t9, %t8 + br i1 %t10, label %each.body10789, label %each.end10791 +each.body10789: + %t11 = load ptr, ptr %t5 + %t12 = getelementptr inbounds %S.lsp.FnRec, ptr %t11, i64 %t9 + %t13 = load %S.lsp.FnRec, ptr %t12 + store %S.lsp.FnRec %t13, ptr %a14 + %t15 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 3 + %t16 = load { ptr, i64, i64 }, ptr %t15 + %t17 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t16, ptr %a18 + store { ptr, i64, i64 } %t17, ptr %a19 + %t20 = call i32 @finch_str_eq(ptr %a18, ptr %a19) + %t21 = icmp eq i32 %t20, 0 + br i1 %t21, label %then10792, label %endif10794 +then10792: + br label %each.step10790 +endif10794: + store i64 12, ptr %a22 + %t23 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 + %t24 = load { ptr, i64, i64 }, ptr %t23 + store { ptr, i64, i64 } %t24, ptr %a25 + call void @finch_str_copy(ptr %a26, ptr %a25) + %t27 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t27, ptr %a28 + %t29 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = icmp sgt i64 %t31, 0 + br i1 %t32, label %then10795, label %endif10797 +then10795: + store i64 6, ptr %a22 + %t33 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 2 + %t34 = load { ptr, i64, i64 }, ptr %t33 + store { ptr, i64, i64 } %t34, ptr %a36 + store { ptr, i64, i64 } { ptr @.str.7119, i64 1, i64 0 }, ptr %a37 + call void @finch_str_concat(ptr %a35, ptr %a36, ptr %a37) + %t38 = load { ptr, i64, i64 }, ptr %a35 + %t39 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 1 + %t40 = load { ptr, i64, i64 }, ptr %t39 + store { ptr, i64, i64 } %t38, ptr %a42 + store { ptr, i64, i64 } %t40, ptr %a43 + call void @finch_str_concat(ptr %a41, ptr %a42, ptr %a43) + store { ptr, i64, i64 } %t38, ptr %a44 + call void @finch_str_drop(ptr %a44) + %t45 = load { ptr, i64, i64 }, ptr %a41 + %t46 = load { ptr, i64, i64 }, ptr %a28 + store { ptr, i64, i64 } %t45, ptr %a28 + store { ptr, i64, i64 } %t46, ptr %a47 + call void @finch_str_drop(ptr %a47) + br label %endif10797 +endif10797: + %t48 = load { ptr, i64, i64 }, ptr %a28 + %t49 = load i64, ptr %a22 + %t50 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 4 + %t51 = load i64, ptr %t50 + %t52 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 5 + %t53 = load i64, ptr %t52 + %t54 = getelementptr inbounds %S.lsp.FnRec, ptr %a14, i32 0, i32 6 + %t55 = load i64, ptr %t54 + %t56 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t48, i64 %t49, i64 %t51, i64 %t53, i64 %t55) + call void @finch.json.Json.push(ptr %a4, %S.json.Json %t56) + store %S.json.Json %t56, ptr %a57 + call void @finch.drop.S_json_Json(ptr %a57) + call void @finch_str_drop(ptr %a28) + br label %each.step10790 +each.step10790: + %t58 = load i64, ptr %a6 + %t59 = add i64 %t58, 1 + store i64 %t59, ptr %a6 + br label %each.cond10788 +each.end10791: + %t60 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a61 + br label %each.cond10798 +each.cond10798: + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %t60, i32 0, i32 1 + %t63 = load i64, ptr %t62 + %t64 = load i64, ptr %a61 + %t65 = icmp slt i64 %t64, %t63 + br i1 %t65, label %each.body10799, label %each.end10801 +each.body10799: + %t66 = load ptr, ptr %t60 + %t67 = getelementptr inbounds %S.lsp.StructRec, ptr %t66, i64 %t64 + %t68 = load %S.lsp.StructRec, ptr %t67 + store %S.lsp.StructRec %t68, ptr %a69 + %t70 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 2 + %t71 = load { ptr, i64, i64 }, ptr %t70 + %t72 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t71, ptr %a73 + store { ptr, i64, i64 } %t72, ptr %a74 + %t75 = call i32 @finch_str_eq(ptr %a73, ptr %a74) + %t76 = icmp ne i32 %t75, 0 + br i1 %t76, label %then10802, label %endif10804 +then10802: + %t77 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 1 + %t78 = load { ptr, i64, i64 }, ptr %t77 + %t79 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 + %t80 = load i64, ptr %t79 + %t81 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 4 + %t82 = load i64, ptr %t81 + %t83 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 3 + %t84 = load i64, ptr %t83 + %t85 = getelementptr inbounds %S.lsp.StructRec, ptr %a69, i32 0, i32 5 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = add i64 %t84, %t87 + %t89 = add i64 %t88, 1 + %t90 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t78, i64 23, i64 %t80, i64 %t82, i64 %t89) + call void @finch.json.Json.push(ptr %a4, %S.json.Json %t90) + store %S.json.Json %t90, ptr %a91 + call void @finch.drop.S_json_Json(ptr %a91) + br label %endif10804 +endif10804: + br label %each.step10800 +each.step10800: + %t92 = load i64, ptr %a61 + %t93 = add i64 %t92, 1 + store i64 %t93, ptr %a61 + br label %each.cond10798 +each.end10801: + %t94 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a95 + br label %each.cond10805 +each.cond10805: + %t96 = getelementptr inbounds { ptr, i64, i64 }, ptr %t94, i32 0, i32 1 + %t97 = load i64, ptr %t96 + %t98 = load i64, ptr %a95 + %t99 = icmp slt i64 %t98, %t97 + br i1 %t99, label %each.body10806, label %each.end10808 +each.body10806: + %t100 = load ptr, ptr %t94 + %t101 = getelementptr inbounds %S.lsp.EnumRec, ptr %t100, i64 %t98 + %t102 = load %S.lsp.EnumRec, ptr %t101 + store %S.lsp.EnumRec %t102, ptr %a103 + %t104 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 2 + %t105 = load { ptr, i64, i64 }, ptr %t104 + %t106 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t105, ptr %a107 + store { ptr, i64, i64 } %t106, ptr %a108 + %t109 = call i32 @finch_str_eq(ptr %a107, ptr %a108) + %t110 = icmp ne i32 %t109, 0 + br i1 %t110, label %then10809, label %endif10811 +then10809: + %t111 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 1 + %t112 = load { ptr, i64, i64 }, ptr %t111 + %t113 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 + %t114 = load i64, ptr %t113 + %t115 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 4 + %t116 = load i64, ptr %t115 + %t117 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 3 + %t118 = load i64, ptr %t117 + %t119 = getelementptr inbounds %S.lsp.EnumRec, ptr %a103, i32 0, i32 5 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 + %t121 = load i64, ptr %t120 + %t122 = add i64 %t118, %t121 + %t123 = add i64 %t122, 1 + %t124 = call %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %t112, i64 10, i64 %t114, i64 %t116, i64 %t123) + call void @finch.json.Json.push(ptr %a4, %S.json.Json %t124) + store %S.json.Json %t124, ptr %a125 + call void @finch.drop.S_json_Json(ptr %a125) + br label %endif10811 +endif10811: + br label %each.step10807 +each.step10807: + %t126 = load i64, ptr %a95 + %t127 = add i64 %t126, 1 + store i64 %t127, ptr %a95 + br label %each.cond10805 +each.end10808: + %t128 = load %S.json.Json, ptr %a4 + ret %S.json.Json %t128 +} + +define internal %S.json.Json @finch.lsp.symbol({ ptr, i64, i64 } %p0, i64 %p1, i64 %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca %S.json.Json, align 16 + %a10 = alloca %S.json.Json, align 16 + %a13 = alloca %S.json.Json, align 16 + %a15 = alloca %S.json.Json, align 16 + %a19 = alloca %S.json.Json, align 16 + %a22 = alloca %S.json.Json, align 16 + %a31 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + store i64 %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a1 + %t9 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t8) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7120, i64 4, i64 0 }, %S.json.Json %t9) + store %S.json.Json %t9, ptr %a10 + call void @finch.drop.S_json_Json(ptr %a10) + %t11 = load i64, ptr %a2 + %t12 = call %S.json.Json @finch.lsp.num(i64 %t11) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7121, i64 4, i64 0 }, %S.json.Json %t12) + store %S.json.Json %t12, ptr %a13 + call void @finch.drop.S_json_Json(ptr %a13) + %t14 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t14, ptr %a15 + %t16 = load i64, ptr %a3 + %t17 = sub i64 %t16, 1 + %t18 = call %S.json.Json @finch.lsp.position(i64 %t17, i64 0) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7122, i64 5, i64 0 }, %S.json.Json %t18) + store %S.json.Json %t18, ptr %a19 + call void @finch.drop.S_json_Json(ptr %a19) + %t20 = load i64, ptr %a5 + %t21 = call %S.json.Json @finch.lsp.position(i64 %t20, i64 0) + call void @finch.json.Json.set(ptr %a15, { ptr, i64, i64 } { ptr @.str.7123, i64 3, i64 0 }, %S.json.Json %t21) + store %S.json.Json %t21, ptr %a22 + call void @finch.drop.S_json_Json(ptr %a22) + %t23 = load %S.json.Json, ptr %a15 + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7124, i64 5, i64 0 }, %S.json.Json %t23) + %t24 = load i64, ptr %a3 + %t25 = sub i64 %t24, 1 + %t26 = load i64, ptr %a4 + %t27 = sub i64 %t26, 1 + %t28 = load i64, ptr %a4 + %t29 = sub i64 %t28, 1 + %t30 = call %S.json.Json @finch.lsp.range(i64 %t25, i64 %t27, i64 %t29) + call void @finch.json.Json.set(ptr %a7, { ptr, i64, i64 } { ptr @.str.7125, i64 14, i64 0 }, %S.json.Json %t30) + store %S.json.Json %t30, ptr %a31 + call void @finch.drop.S_json_Json(ptr %a31) + %t32 = load %S.json.Json, ptr %a7 + call void @finch.drop.S_json_Json(ptr %a15) + ret %S.json.Json %t32 +} + +define internal %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %p0, i64 %p1, { ptr, i64, i64 } %p2, { ptr, i64, i64 } %p3) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + %a12 = alloca %S.json.Json, align 16 + %a18 = alloca %S.json.Json, align 16 + %a23 = alloca %S.json.Json, align 16 + %a25 = alloca %S.json.Json, align 16 + %a28 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store i64 %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store { ptr, i64, i64 } %p3, ptr %a4 + %t5 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t5, ptr %a6 + %t7 = load { ptr, i64, i64 }, ptr %a1 + %t8 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t7) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7126, i64 5, i64 0 }, %S.json.Json %t8) + store %S.json.Json %t8, ptr %a9 + call void @finch.drop.S_json_Json(ptr %a9) + %t10 = load i64, ptr %a2 + %t11 = call %S.json.Json @finch.lsp.num(i64 %t10) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7127, i64 4, i64 0 }, %S.json.Json %t11) + store %S.json.Json %t11, ptr %a12 + call void @finch.drop.S_json_Json(ptr %a12) + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a3, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sgt i64 %t14, 0 + br i1 %t15, label %then10812, label %endif10814 +then10812: + %t16 = load { ptr, i64, i64 }, ptr %a3 + %t17 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t16) + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7128, i64 6, i64 0 }, %S.json.Json %t17) + store %S.json.Json %t17, ptr %a18 + call void @finch.drop.S_json_Json(ptr %a18) + br label %endif10814 +endif10814: + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a4, i32 0, i32 1 + %t20 = load i64, ptr %t19 + %t21 = icmp sgt i64 %t20, 0 + br i1 %t21, label %then10815, label %endif10817 +then10815: + %t22 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t22, ptr %a23 + %t24 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7130, i64 8, i64 0 }) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7129, i64 4, i64 0 }, %S.json.Json %t24) + store %S.json.Json %t24, ptr %a25 + call void @finch.drop.S_json_Json(ptr %a25) + %t26 = load { ptr, i64, i64 }, ptr %a4 + %t27 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t26) + call void @finch.json.Json.set(ptr %a23, { ptr, i64, i64 } { ptr @.str.7131, i64 5, i64 0 }, %S.json.Json %t27) + store %S.json.Json %t27, ptr %a28 + call void @finch.drop.S_json_Json(ptr %a28) + %t29 = load %S.json.Json, ptr %a23 + call void @finch.json.Json.set(ptr %a6, { ptr, i64, i64 } { ptr @.str.7132, i64 13, i64 0 }, %S.json.Json %t29) + call void @finch.drop.S_json_Json(ptr %a23) + br label %endif10817 +endif10817: + %t30 = load %S.json.Json, ptr %a6 + ret %S.json.Json %t30 +} + +define internal i1 @finch.lsp.isWordChar(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 97 + br label %logic.from10818 +logic.from10818: + br i1 %t3, label %logic.rhs10819, label %logic.end10820 +logic.rhs10819: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 122 + br label %logic.rend10821 +logic.rend10821: + br label %logic.end10820 +logic.end10820: + %t6 = phi i1 [ false, %logic.from10818 ], [ %t5, %logic.rend10821 ] + br label %logic.from10822 +logic.from10822: + br i1 %t6, label %logic.end10824, label %logic.rhs10823 +logic.rhs10823: + %t7 = load i8, ptr %a1 + %t8 = icmp uge i8 %t7, 65 + br label %logic.from10825 +logic.from10825: + br i1 %t8, label %logic.rhs10826, label %logic.end10827 +logic.rhs10826: + %t9 = load i8, ptr %a1 + %t10 = icmp ule i8 %t9, 90 + br label %logic.rend10828 +logic.rend10828: + br label %logic.end10827 +logic.end10827: + %t11 = phi i1 [ false, %logic.from10825 ], [ %t10, %logic.rend10828 ] + br label %logic.rend10829 +logic.rend10829: + br label %logic.end10824 +logic.end10824: + %t12 = phi i1 [ true, %logic.from10822 ], [ %t11, %logic.rend10829 ] + br label %logic.from10830 +logic.from10830: + br i1 %t12, label %logic.end10832, label %logic.rhs10831 +logic.rhs10831: + %t13 = load i8, ptr %a1 + %t14 = icmp uge i8 %t13, 48 + br label %logic.from10833 +logic.from10833: + br i1 %t14, label %logic.rhs10834, label %logic.end10835 +logic.rhs10834: + %t15 = load i8, ptr %a1 + %t16 = icmp ule i8 %t15, 57 + br label %logic.rend10836 +logic.rend10836: + br label %logic.end10835 +logic.end10835: + %t17 = phi i1 [ false, %logic.from10833 ], [ %t16, %logic.rend10836 ] + br label %logic.rend10837 +logic.rend10837: + br label %logic.end10832 +logic.end10832: + %t18 = phi i1 [ true, %logic.from10830 ], [ %t17, %logic.rend10837 ] + br label %logic.from10838 +logic.from10838: + br i1 %t18, label %logic.end10840, label %logic.rhs10839 +logic.rhs10839: + %t19 = load i8, ptr %a1 + %t20 = icmp eq i8 %t19, 95 + br label %logic.rend10841 +logic.rend10841: + br label %logic.end10840 +logic.end10840: + %t21 = phi i1 [ true, %logic.from10838 ], [ %t20, %logic.rend10841 ] + ret i1 %t21 +} + +define internal void @finch.lsp.methodItems(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca i64, align 16 + %a11 = alloca %S.docs.Doc, align 16 + %a12 = alloca i64, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.json.Json, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store i64 0, ptr %a3 + br label %each.cond10842 +each.cond10842: + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load i64, ptr %a3 + %t7 = icmp slt i64 %t6, %t5 + br i1 %t7, label %each.body10843, label %each.end10845 +each.body10843: + %t8 = load ptr, ptr %a2 + %t9 = getelementptr inbounds %S.docs.Doc, ptr %t8, i64 %t6 + %t10 = load %S.docs.Doc, ptr %t9 + store %S.docs.Doc %t10, ptr %a11 + store i64 2, ptr %a12 + %t13 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 + %t14 = load { ptr, i64, i64 }, ptr %t13 + store { ptr, i64, i64 } %t14, ptr %a15 + store { ptr, i64, i64 } { ptr @.str.7134, i64 1, i64 0 }, ptr %a17 + %t18 = call i32 @finch_str_starts(ptr %a15, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %then10846, label %endif10848 +then10846: + store i64 5, ptr %a12 + br label %endif10848 +endif10848: + %t20 = load ptr, ptr %a1 + %t21 = icmp eq ptr %t20, null + br i1 %t21, label %panic10849, label %ok10850 +panic10849: + call void @finch_panic(ptr @.str.7135, i64 497, ptr @.str.7136) + unreachable +ok10850: + %t22 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 0 + %t23 = load { ptr, i64, i64 }, ptr %t22 + %t24 = load i64, ptr %a12 + %t25 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 1 + %t26 = load { ptr, i64, i64 }, ptr %t25 + %t27 = getelementptr inbounds %S.docs.Doc, ptr %a11, i32 0, i32 2 + %t28 = load { ptr, i64, i64 }, ptr %t27 + %t29 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t23, i64 %t24, { ptr, i64, i64 } %t26, { ptr, i64, i64 } %t28) + call void @finch.json.Json.push(ptr %t20, %S.json.Json %t29) + store %S.json.Json %t29, ptr %a30 + call void @finch.drop.S_json_Json(ptr %a30) + br label %each.step10844 +each.step10844: + %t31 = load i64, ptr %a3 + %t32 = add i64 %t31, 1 + store i64 %t32, ptr %a3 + br label %each.cond10842 +each.end10845: + ret void +} + +define internal %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca %S.lsp.VarRec, align 16 + %a7 = alloca i64, align 16 + %a15 = alloca %S.lsp.VarRec, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a38 = alloca { ptr, i64, i64 }, align 16 + %a43 = alloca %S.lsp.VarRec, align 16 + %a44 = alloca %S.lsp.VarRec, align 16 + %a47 = alloca %S.lsp.VarRec, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i64 %p3, ptr %a4 + store %S.lsp.VarRec zeroinitializer, ptr %a5 + %t6 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 + store i64 0, ptr %a7 + br label %each.cond10851 +each.cond10851: + %t8 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load i64, ptr %a7 + %t11 = icmp slt i64 %t10, %t9 + br i1 %t11, label %each.body10852, label %each.end10854 +each.body10852: + %t12 = load ptr, ptr %t6 + %t13 = getelementptr inbounds %S.lsp.VarRec, ptr %t12, i64 %t10 + %t14 = load %S.lsp.VarRec, ptr %t13 + store %S.lsp.VarRec %t14, ptr %a15 + %t16 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 0 + %t17 = load { ptr, i64, i64 }, ptr %t16 + %t18 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } %t18, ptr %a20 + %t21 = call i32 @finch_str_eq(ptr %a19, ptr %a20) + %t22 = icmp ne i32 %t21, 0 + br label %logic.from10855 +logic.from10855: + br i1 %t22, label %logic.rhs10856, label %logic.end10857 +logic.rhs10856: + %t23 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 3 + %t24 = load i64, ptr %t23 + %t25 = load i64, ptr %a4 + %t26 = icmp sle i64 %t24, %t25 + br label %logic.rend10858 +logic.rend10858: + br label %logic.end10857 +logic.end10857: + %t27 = phi i1 [ false, %logic.from10855 ], [ %t26, %logic.rend10858 ] + br label %logic.from10859 +logic.from10859: + br i1 %t27, label %logic.rhs10860, label %logic.end10861 +logic.rhs10860: + %t28 = load i64, ptr %a4 + %t29 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 7 + %t30 = load i64, ptr %t29 + %t31 = add i64 %t30, 1 + %t32 = icmp sle i64 %t28, %t31 + br label %logic.rend10862 +logic.rend10862: + br label %logic.end10861 +logic.end10861: + %t33 = phi i1 [ false, %logic.from10859 ], [ %t32, %logic.rend10862 ] + br label %logic.from10863 +logic.from10863: + br i1 %t33, label %logic.rhs10864, label %logic.end10865 +logic.rhs10864: + %t34 = getelementptr inbounds %S.lsp.VarRec, ptr %a15, i32 0, i32 5 + %t35 = load { ptr, i64, i64 }, ptr %t34 + %t36 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t35, ptr %a37 + store { ptr, i64, i64 } %t36, ptr %a38 + %t39 = call i32 @finch_str_eq(ptr %a37, ptr %a38) + %t40 = icmp ne i32 %t39, 0 + br label %logic.rend10866 +logic.rend10866: + br label %logic.end10865 +logic.end10865: + %t41 = phi i1 [ false, %logic.from10863 ], [ %t40, %logic.rend10866 ] + br i1 %t41, label %then10867, label %endif10869 +then10867: + %t42 = load %S.lsp.VarRec, ptr %a15 + store %S.lsp.VarRec %t42, ptr %a43 + call void @finch.copy.S_lsp_VarRec(ptr %a44, ptr %a43) + %t45 = load %S.lsp.VarRec, ptr %a44 + %t46 = load %S.lsp.VarRec, ptr %a5 + store %S.lsp.VarRec %t45, ptr %a5 + store %S.lsp.VarRec %t46, ptr %a47 + call void @finch.drop.S_lsp_VarRec(ptr %a47) + br label %endif10869 +endif10869: + br label %each.step10853 +each.step10853: + %t48 = load i64, ptr %a7 + %t49 = add i64 %t48, 1 + store i64 %t49, ptr %a7 + br label %each.cond10851 +each.end10854: + %t50 = load %S.lsp.VarRec, ptr %a5 + ret %S.lsp.VarRec %t50 +} + +define internal void @finch.drop.S_lsp_Names(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Names, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + ret void +} + +define internal %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a7 = alloca %S.json.Json, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca i64, align 16 + %a22 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca i64, align 16 + %a56 = alloca i1, align 16 + %a60 = alloca i64, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a103 = alloca i1, align 16 + %a105 = alloca { ptr, i64, i64 }, align 16 + %a106 = alloca { ptr, i64, i64 }, align 16 + %a107 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca i64, align 16 + %a113 = alloca { ptr, i64, i64 }, align 16 + %a114 = alloca { ptr, i64, i64 }, align 16 + %a118 = alloca { ptr, i64, i64 }, align 16 + %a122 = alloca i64, align 16 + %a125 = alloca i64, align 16 + %a130 = alloca { ptr, i64, i64 }, align 16 + %a131 = alloca { ptr, i64, i64 }, align 16 + %a138 = alloca i64, align 16 + %a146 = alloca %S.lsp.FnRec, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a151 = alloca { ptr, i64, i64 }, align 16 + %a164 = alloca %S.json.Json, align 16 + %a168 = alloca i64, align 16 + %a176 = alloca %S.lsp.StructRec, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a189 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca %S.json.Json, align 16 + %a198 = alloca i64, align 16 + %a206 = alloca %S.lsp.EnumRec, align 16 + %a210 = alloca { ptr, i64, i64 }, align 16 + %a211 = alloca { ptr, i64, i64 }, align 16 + %a218 = alloca { ptr, i64, i64 }, align 16 + %a219 = alloca { ptr, i64, i64 }, align 16 + %a220 = alloca { ptr, i64, i64 }, align 16 + %a223 = alloca { ptr, i64, i64 }, align 16 + %a224 = alloca %S.json.Json, align 16 + %a230 = alloca i64, align 16 + %a238 = alloca %S.lsp.EnumRec, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca %S.lsp.VarRec, align 16 + %a257 = alloca { ptr, i64, i64 }, align 16 + %a261 = alloca i64, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a274 = alloca { ptr, i64, i64 }, align 16 + %a275 = alloca { ptr, i64, i64 }, align 16 + %a278 = alloca { ptr, i64, i64 }, align 16 + %a279 = alloca { ptr, i64, i64 }, align 16 + %a280 = alloca { ptr, i64, i64 }, align 16 + %a281 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a285 = alloca %S.json.Json, align 16 + %a298 = alloca { ptr, i64, i64 }, align 16 + %a299 = alloca { ptr, i64, i64 }, align 16 + %a301 = alloca %S.lsp.VarRec, align 16 + %a302 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca { ptr, i64, i64 }, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a312 = alloca { ptr, i64, i64 }, align 16 + %a313 = alloca { ptr, i64, i64 }, align 16 + %a318 = alloca { ptr, i64, i64 }, align 16 + %a321 = alloca { ptr, i64, i64 }, align 16 + %a322 = alloca { ptr, i64, i64 }, align 16 + %a327 = alloca { ptr, i64, i64 }, align 16 + %a329 = alloca { ptr, i64, i64 }, align 16 + %a330 = alloca { ptr, i64, i64 }, align 16 + %a331 = alloca { ptr, i64, i64 }, align 16 + %a335 = alloca { ptr, i64, i64 }, align 16 + %a336 = alloca { ptr, i64, i64 }, align 16 + %a337 = alloca { ptr, i64, i64 }, align 16 + %a342 = alloca { ptr, i64, i64 }, align 16 + %a343 = alloca { ptr, i64, i64 }, align 16 + %a349 = alloca { ptr, i64, i64 }, align 16 + %a351 = alloca { ptr, i64, i64 }, align 16 + %a352 = alloca { ptr, i64, i64 }, align 16 + %a353 = alloca { ptr, i64, i64 }, align 16 + %a357 = alloca { ptr, i64, i64 }, align 16 + %a359 = alloca { ptr, i64, i64 }, align 16 + %a360 = alloca { ptr, i64, i64 }, align 16 + %a364 = alloca { ptr, i64, i64 }, align 16 + %a366 = alloca { ptr, i64, i64 }, align 16 + %a367 = alloca { ptr, i64, i64 }, align 16 + %a368 = alloca { ptr, i64, i64 }, align 16 + %a372 = alloca { ptr, i64, i64 }, align 16 + %a374 = alloca { ptr, i64, i64 }, align 16 + %a375 = alloca { ptr, i64, i64 }, align 16 + %a377 = alloca { ptr, i64, i64 }, align 16 + %a379 = alloca i64, align 16 + %a387 = alloca %S.lsp.StructRec, align 16 + %a391 = alloca { ptr, i64, i64 }, align 16 + %a392 = alloca { ptr, i64, i64 }, align 16 + %a398 = alloca i64, align 16 + %a418 = alloca %S.json.Json, align 16 + %a424 = alloca i64, align 16 + %a432 = alloca %S.lsp.FnRec, align 16 + %a436 = alloca { ptr, i64, i64 }, align 16 + %a437 = alloca { ptr, i64, i64 }, align 16 + %a445 = alloca %S.json.Json, align 16 + %a450 = alloca %S.lsp.Names, align 16 + %a452 = alloca i64, align 16 + %a460 = alloca %S.lsp.VarRec, align 16 + %a474 = alloca { ptr, i64, i64 }, align 16 + %a475 = alloca { ptr, i64, i64 }, align 16 + %a488 = alloca %S.json.Json, align 16 + %a492 = alloca i64, align 16 + %a500 = alloca %S.lsp.FnRec, align 16 + %a507 = alloca { ptr, i64, i64 }, align 16 + %a508 = alloca { ptr, i64, i64 }, align 16 + %a521 = alloca %S.json.Json, align 16 + %a525 = alloca i64, align 16 + %a533 = alloca %S.lsp.StructRec, align 16 + %a536 = alloca { ptr, i64, i64 }, align 16 + %a537 = alloca { ptr, i64, i64 }, align 16 + %a548 = alloca { ptr, i64, i64 }, align 16 + %a549 = alloca { ptr, i64, i64 }, align 16 + %a550 = alloca { ptr, i64, i64 }, align 16 + %a553 = alloca { ptr, i64, i64 }, align 16 + %a554 = alloca %S.json.Json, align 16 + %a558 = alloca i64, align 16 + %a566 = alloca %S.lsp.EnumRec, align 16 + %a569 = alloca { ptr, i64, i64 }, align 16 + %a570 = alloca { ptr, i64, i64 }, align 16 + %a581 = alloca { ptr, i64, i64 }, align 16 + %a582 = alloca { ptr, i64, i64 }, align 16 + %a583 = alloca { ptr, i64, i64 }, align 16 + %a586 = alloca { ptr, i64, i64 }, align 16 + %a587 = alloca %S.json.Json, align 16 + %a591 = alloca i64, align 16 + %a599 = alloca { ptr, i64, i64 }, align 16 + %a604 = alloca %S.json.Json, align 16 + %a608 = alloca { ptr, i64, i64 }, align 16 + %a609 = alloca i64, align 16 + %a617 = alloca %S.docs.Doc, align 16 + %a628 = alloca %S.json.Json, align 16 + %a632 = alloca { ptr, i64, i64 }, align 16 + %a633 = alloca i64, align 16 + %a641 = alloca { ptr, i64, i64 }, align 16 + %a646 = alloca %S.json.Json, align 16 + %a650 = alloca { ptr, i64, i64 }, align 16 + %a651 = alloca i64, align 16 + %a659 = alloca { ptr, i64, i64 }, align 16 + %a664 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t6, ptr %a7 + %t8 = load { ptr, i64, i64 }, ptr %a2 + %t9 = load i64, ptr %a4 + %t10 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t8, i64 %t9) + store { ptr, i64, i64 } %t10, ptr %a11 + %t12 = load i64, ptr %a5 + %t13 = sub i64 %t12, 1 + store i64 %t13, ptr %a14 + %t15 = load i64, ptr %a14 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t17 = load i64, ptr %t16 + %t18 = icmp sgt i64 %t15, %t17 + br i1 %t18, label %then10870, label %endif10872 +then10870: + %t19 = getelementptr inbounds { ptr, i64, i64 }, ptr %a11, i32 0, i32 1 + %t20 = load i64, ptr %t19 + store i64 %t20, ptr %a14 + br label %endif10872 +endif10872: + %t21 = load { ptr, i64, i64 }, ptr %a11 + store { ptr, i64, i64 } %t21, ptr %a22 + %t24 = load i64, ptr %a14 + call void @finch_str_sub(ptr %a23, ptr %a22, i64 0, i64 %t24, ptr @.str.7137, i64 519) + %t25 = load { ptr, i64, i64 }, ptr %a23 + store { ptr, i64, i64 } %t25, ptr %a26 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a26, i32 0, i32 1 + %t28 = load i64, ptr %t27 + store i64 %t28, ptr %a29 + br label %while.cond10873 +while.cond10873: + %t30 = load i64, ptr %a29 + %t31 = icmp sgt i64 %t30, 0 + br label %logic.from10876 +logic.from10876: + br i1 %t31, label %logic.rhs10877, label %logic.end10878 +logic.rhs10877: + %t32 = load i64, ptr %a29 + %t33 = sub i64 %t32, 1 + %t34 = load { ptr, i64, i64 }, ptr %a26 + %t35 = extractvalue { ptr, i64, i64 } %t34, 1 + %t36 = icmp uge i64 %t33, %t35 + br i1 %t36, label %range10879, label %inrange10880 +range10879: + call void @finch_panic_index(ptr @.str.7138, i64 522, i64 %t33, i64 %t35) + unreachable +inrange10880: + %t37 = extractvalue { ptr, i64, i64 } %t34, 0 + %t38 = getelementptr inbounds i8, ptr %t37, i64 %t33 + %t39 = load i8, ptr %t38 + %t40 = call i1 @finch.lsp.isWordChar(i8 %t39) + br label %logic.rend10881 +logic.rend10881: + br label %logic.end10878 +logic.end10878: + %t41 = phi i1 [ false, %logic.from10876 ], [ %t40, %logic.rend10881 ] + br i1 %t41, label %while.body10874, label %while.end10875 +while.body10874: + %t42 = load i64, ptr %a29 + %t43 = sub i64 %t42, 1 + store i64 %t43, ptr %a29 + br label %while.cond10873 +while.end10875: + %t44 = load i64, ptr %a29 + %t45 = icmp sgt i64 %t44, 0 + br label %logic.from10882 +logic.from10882: + br i1 %t45, label %logic.rhs10883, label %logic.end10884 +logic.rhs10883: + %t46 = load i64, ptr %a29 + %t47 = sub i64 %t46, 1 + %t48 = load { ptr, i64, i64 }, ptr %a26 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range10885, label %inrange10886 +range10885: + call void @finch_panic_index(ptr @.str.7139, i64 525, i64 %t47, i64 %t49) + unreachable +inrange10886: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 + %t53 = load i8, ptr %t52 + %t54 = icmp eq i8 %t53, 46 + br label %logic.rend10887 +logic.rend10887: + br label %logic.end10884 +logic.end10884: + %t55 = phi i1 [ false, %logic.from10882 ], [ %t54, %logic.rend10887 ] + store i1 %t55, ptr %a56 + %t57 = load i1, ptr %a56 + br i1 %t57, label %then10888, label %endif10890 +then10888: + %t58 = load i64, ptr %a29 + %t59 = sub i64 %t58, 1 + store i64 %t59, ptr %a60 + br label %while.cond10891 +while.cond10891: + %t61 = load i64, ptr %a60 + %t62 = icmp sgt i64 %t61, 0 + br label %logic.from10894 +logic.from10894: + br i1 %t62, label %logic.rhs10895, label %logic.end10896 +logic.rhs10895: + %t63 = load i64, ptr %a60 + %t64 = sub i64 %t63, 1 + %t65 = load { ptr, i64, i64 }, ptr %a26 + %t66 = extractvalue { ptr, i64, i64 } %t65, 1 + %t67 = icmp uge i64 %t64, %t66 + br i1 %t67, label %range10897, label %inrange10898 +range10897: + call void @finch_panic_index(ptr @.str.7140, i64 528, i64 %t64, i64 %t66) + unreachable +inrange10898: + %t68 = extractvalue { ptr, i64, i64 } %t65, 0 + %t69 = getelementptr inbounds i8, ptr %t68, i64 %t64 + %t70 = load i8, ptr %t69 + %t71 = call i1 @finch.lsp.isWordChar(i8 %t70) + br label %logic.from10899 +logic.from10899: + br i1 %t71, label %logic.end10901, label %logic.rhs10900 +logic.rhs10900: + %t72 = load i64, ptr %a60 + %t73 = sub i64 %t72, 1 + %t74 = load { ptr, i64, i64 }, ptr %a26 + %t75 = extractvalue { ptr, i64, i64 } %t74, 1 + %t76 = icmp uge i64 %t73, %t75 + br i1 %t76, label %range10902, label %inrange10903 +range10902: + call void @finch_panic_index(ptr @.str.7141, i64 528, i64 %t73, i64 %t75) + unreachable +inrange10903: + %t77 = extractvalue { ptr, i64, i64 } %t74, 0 + %t78 = getelementptr inbounds i8, ptr %t77, i64 %t73 + %t79 = load i8, ptr %t78 + %t80 = icmp eq i8 %t79, 91 + br label %logic.rend10904 +logic.rend10904: + br label %logic.end10901 +logic.end10901: + %t81 = phi i1 [ true, %logic.from10899 ], [ %t80, %logic.rend10904 ] + br label %logic.from10905 +logic.from10905: + br i1 %t81, label %logic.end10907, label %logic.rhs10906 +logic.rhs10906: + %t82 = load i64, ptr %a60 + %t83 = sub i64 %t82, 1 + %t84 = load { ptr, i64, i64 }, ptr %a26 + %t85 = extractvalue { ptr, i64, i64 } %t84, 1 + %t86 = icmp uge i64 %t83, %t85 + br i1 %t86, label %range10908, label %inrange10909 +range10908: + call void @finch_panic_index(ptr @.str.7142, i64 528, i64 %t83, i64 %t85) + unreachable +inrange10909: + %t87 = extractvalue { ptr, i64, i64 } %t84, 0 + %t88 = getelementptr inbounds i8, ptr %t87, i64 %t83 + %t89 = load i8, ptr %t88 + %t90 = icmp eq i8 %t89, 93 + br label %logic.rend10910 +logic.rend10910: + br label %logic.end10907 +logic.end10907: + %t91 = phi i1 [ true, %logic.from10905 ], [ %t90, %logic.rend10910 ] + br label %logic.rend10911 +logic.rend10911: + br label %logic.end10896 +logic.end10896: + %t92 = phi i1 [ false, %logic.from10894 ], [ %t91, %logic.rend10911 ] + br i1 %t92, label %while.body10892, label %while.end10893 +while.body10892: + %t93 = load i64, ptr %a60 + %t94 = sub i64 %t93, 1 + store i64 %t94, ptr %a60 + br label %while.cond10891 +while.end10893: + %t95 = load { ptr, i64, i64 }, ptr %a26 + store { ptr, i64, i64 } %t95, ptr %a96 + %t98 = load i64, ptr %a60 + %t99 = load i64, ptr %a29 + %t100 = sub i64 %t99, 1 + call void @finch_str_sub(ptr %a97, ptr %a96, i64 %t98, i64 %t100, ptr @.str.7143, i64 531) + %t101 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t101, ptr %a102 + store i1 false, ptr %a103 + %t104 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t104, ptr %a105 + store { ptr, i64, i64 } { ptr @.str.7145, i64 1, i64 0 }, ptr %a107 + %t108 = call i64 @finch_str_find(ptr %a105, ptr %a107) + store i64 %t108, ptr %a109 + %t110 = load i64, ptr %a109 + %t111 = icmp sge i64 %t110, 0 + br i1 %t111, label %then10912, label %endif10914 +then10912: + %t112 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t112, ptr %a113 + %t115 = load i64, ptr %a109 + call void @finch_str_sub(ptr %a114, ptr %a113, i64 0, i64 %t115, ptr @.str.7146, i64 535) + %t116 = load { ptr, i64, i64 }, ptr %a114 + %t117 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t116, ptr %a102 + store { ptr, i64, i64 } %t117, ptr %a118 + call void @finch_str_drop(ptr %a118) + store i1 true, ptr %a103 + br label %endif10914 +endif10914: + %t119 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %a102 + store i64 -1, ptr %a122 + %t123 = load i64, ptr %t120 + %t124 = load ptr, ptr %t119 + store i64 0, ptr %a125 + br label %find.cond10915 +find.cond10915: + %t126 = load i64, ptr %a125 + %t127 = icmp slt i64 %t126, %t123 + br i1 %t127, label %find.body10916, label %find.end10919 +find.body10916: + %t128 = getelementptr inbounds { ptr, i64, i64 }, ptr %t124, i64 %t126 + %t129 = load { ptr, i64, i64 }, ptr %t128 + store { ptr, i64, i64 } %t129, ptr %a130 + store { ptr, i64, i64 } %t121, ptr %a131 + %t132 = call i32 @finch_str_eq(ptr %a130, ptr %a131) + %t133 = icmp ne i32 %t132, 0 + br i1 %t133, label %find.hit10917, label %find.next10918 +find.hit10917: + store i64 %t126, ptr %a122 + br label %find.end10919 +find.next10918: + %t134 = add i64 %t126, 1 + store i64 %t134, ptr %a125 + br label %find.cond10915 +find.end10919: + %t135 = load i64, ptr %a122 + %t136 = icmp sge i64 %t135, 0 + br i1 %t136, label %then10920, label %endif10922 +then10920: + %t137 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a138 + br label %each.cond10923 +each.cond10923: + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t137, i32 0, i32 1 + %t140 = load i64, ptr %t139 + %t141 = load i64, ptr %a138 + %t142 = icmp slt i64 %t141, %t140 + br i1 %t142, label %each.body10924, label %each.end10926 +each.body10924: + %t143 = load ptr, ptr %t137 + %t144 = getelementptr inbounds %S.lsp.FnRec, ptr %t143, i64 %t141 + %t145 = load %S.lsp.FnRec, ptr %t144 + store %S.lsp.FnRec %t145, ptr %a146 + %t147 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 0 + %t148 = load { ptr, i64, i64 }, ptr %t147 + %t149 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t148, ptr %a150 + store { ptr, i64, i64 } %t149, ptr %a151 + %t152 = call i32 @finch_str_eq(ptr %a150, ptr %a151) + %t153 = icmp ne i32 %t152, 0 + br label %logic.from10927 +logic.from10927: + br i1 %t153, label %logic.rhs10928, label %logic.end10929 +logic.rhs10928: + %t154 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 2 + %t155 = getelementptr inbounds { ptr, i64, i64 }, ptr %t154, i32 0, i32 1 + %t156 = load i64, ptr %t155 + %t157 = icmp eq i64 %t156, 0 + br label %logic.rend10930 +logic.rend10930: + br label %logic.end10929 +logic.end10929: + %t158 = phi i1 [ false, %logic.from10927 ], [ %t157, %logic.rend10930 ] + br i1 %t158, label %then10931, label %endif10933 +then10931: + %t159 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 1 + %t160 = load { ptr, i64, i64 }, ptr %t159 + %t161 = getelementptr inbounds %S.lsp.FnRec, ptr %a146, i32 0, i32 7 + %t162 = load { ptr, i64, i64 }, ptr %t161 + %t163 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t160, i64 3, { ptr, i64, i64 } %t162, { ptr, i64, i64 } { ptr @.str.7147, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t163) + store %S.json.Json %t163, ptr %a164 + call void @finch.drop.S_json_Json(ptr %a164) + br label %endif10933 +endif10933: + br label %each.step10925 +each.step10925: + %t165 = load i64, ptr %a138 + %t166 = add i64 %t165, 1 + store i64 %t166, ptr %a138 + br label %each.cond10923 +each.end10926: + %t167 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a168 + br label %each.cond10934 +each.cond10934: + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t167, i32 0, i32 1 + %t170 = load i64, ptr %t169 + %t171 = load i64, ptr %a168 + %t172 = icmp slt i64 %t171, %t170 + br i1 %t172, label %each.body10935, label %each.end10937 +each.body10935: + %t173 = load ptr, ptr %t167 + %t174 = getelementptr inbounds %S.lsp.StructRec, ptr %t173, i64 %t171 + %t175 = load %S.lsp.StructRec, ptr %t174 + store %S.lsp.StructRec %t175, ptr %a176 + %t177 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 0 + %t178 = load { ptr, i64, i64 }, ptr %t177 + %t179 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t178, ptr %a180 + store { ptr, i64, i64 } %t179, ptr %a181 + %t182 = call i32 @finch_str_eq(ptr %a180, ptr %a181) + %t183 = icmp ne i32 %t182, 0 + br i1 %t183, label %then10938, label %endif10940 +then10938: + %t184 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 + %t185 = load { ptr, i64, i64 }, ptr %t184 + %t186 = getelementptr inbounds %S.lsp.StructRec, ptr %a176, i32 0, i32 1 + %t187 = load { ptr, i64, i64 }, ptr %t186 + store { ptr, i64, i64 } { ptr @.str.7148, i64 7, i64 0 }, ptr %a189 + store { ptr, i64, i64 } %t187, ptr %a190 + call void @finch_str_concat(ptr %a188, ptr %a189, ptr %a190) + %t191 = load { ptr, i64, i64 }, ptr %a188 + %t192 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t185, i64 22, { ptr, i64, i64 } %t191, { ptr, i64, i64 } { ptr @.str.7149, i64 0, i64 0 }) + store { ptr, i64, i64 } %t191, ptr %a193 + call void @finch_str_drop(ptr %a193) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t192) + store %S.json.Json %t192, ptr %a194 + call void @finch.drop.S_json_Json(ptr %a194) + br label %endif10940 +endif10940: + br label %each.step10936 +each.step10936: + %t195 = load i64, ptr %a168 + %t196 = add i64 %t195, 1 + store i64 %t196, ptr %a168 + br label %each.cond10934 +each.end10937: + %t197 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a198 + br label %each.cond10941 +each.cond10941: + %t199 = getelementptr inbounds { ptr, i64, i64 }, ptr %t197, i32 0, i32 1 + %t200 = load i64, ptr %t199 + %t201 = load i64, ptr %a198 + %t202 = icmp slt i64 %t201, %t200 + br i1 %t202, label %each.body10942, label %each.end10944 +each.body10942: + %t203 = load ptr, ptr %t197 + %t204 = getelementptr inbounds %S.lsp.EnumRec, ptr %t203, i64 %t201 + %t205 = load %S.lsp.EnumRec, ptr %t204 + store %S.lsp.EnumRec %t205, ptr %a206 + %t207 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 0 + %t208 = load { ptr, i64, i64 }, ptr %t207 + %t209 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t208, ptr %a210 + store { ptr, i64, i64 } %t209, ptr %a211 + %t212 = call i32 @finch_str_eq(ptr %a210, ptr %a211) + %t213 = icmp ne i32 %t212, 0 + br i1 %t213, label %then10945, label %endif10947 +then10945: + %t214 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 + %t215 = load { ptr, i64, i64 }, ptr %t214 + %t216 = getelementptr inbounds %S.lsp.EnumRec, ptr %a206, i32 0, i32 1 + %t217 = load { ptr, i64, i64 }, ptr %t216 + store { ptr, i64, i64 } { ptr @.str.7150, i64 5, i64 0 }, ptr %a219 + store { ptr, i64, i64 } %t217, ptr %a220 + call void @finch_str_concat(ptr %a218, ptr %a219, ptr %a220) + %t221 = load { ptr, i64, i64 }, ptr %a218 + %t222 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t215, i64 13, { ptr, i64, i64 } %t221, { ptr, i64, i64 } { ptr @.str.7151, i64 0, i64 0 }) + store { ptr, i64, i64 } %t221, ptr %a223 + call void @finch_str_drop(ptr %a223) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t222) + store %S.json.Json %t222, ptr %a224 + call void @finch.drop.S_json_Json(ptr %a224) + br label %endif10947 +endif10947: + br label %each.step10943 +each.step10943: + %t225 = load i64, ptr %a198 + %t226 = add i64 %t225, 1 + store i64 %t226, ptr %a198 + br label %each.cond10941 +each.end10944: + %t227 = load %S.json.Json, ptr %a7 + %t228 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t227) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t228 +endif10922: + %t229 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a230 + br label %each.cond10948 +each.cond10948: + %t231 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i32 0, i32 1 + %t232 = load i64, ptr %t231 + %t233 = load i64, ptr %a230 + %t234 = icmp slt i64 %t233, %t232 + br i1 %t234, label %each.body10949, label %each.end10951 +each.body10949: + %t235 = load ptr, ptr %t229 + %t236 = getelementptr inbounds %S.lsp.EnumRec, ptr %t235, i64 %t233 + %t237 = load %S.lsp.EnumRec, ptr %t236 + store %S.lsp.EnumRec %t237, ptr %a238 + %t239 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 + %t240 = load { ptr, i64, i64 }, ptr %t239 + %t241 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t240, ptr %a242 + store { ptr, i64, i64 } %t241, ptr %a243 + %t244 = call i32 @finch_str_eq(ptr %a242, ptr %a243) + %t245 = icmp ne i32 %t244, 0 + br label %logic.from10952 +logic.from10952: + br i1 %t245, label %logic.rhs10953, label %logic.end10954 +logic.rhs10953: + %t246 = load %S.lsp.Analysis, ptr %a1 + %t247 = load { ptr, i64, i64 }, ptr %a3 + %t248 = load { ptr, i64, i64 }, ptr %a102 + %t249 = load i64, ptr %a4 + %t250 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t246, { ptr, i64, i64 } %t247, { ptr, i64, i64 } %t248, i64 %t249) + %t251 = extractvalue %S.lsp.VarRec %t250, 0 + store { ptr, i64, i64 } %t251, ptr %a252 + call void @finch_str_copy(ptr %a253, ptr %a252) + %t254 = load { ptr, i64, i64 }, ptr %a253 + store %S.lsp.VarRec %t250, ptr %a255 + call void @finch.drop.S_lsp_VarRec(ptr %a255) + %t256 = extractvalue { ptr, i64, i64 } %t254, 1 + store { ptr, i64, i64 } %t254, ptr %a257 + call void @finch_str_drop(ptr %a257) + %t258 = icmp eq i64 %t256, 0 + br label %logic.rend10955 +logic.rend10955: + br label %logic.end10954 +logic.end10954: + %t259 = phi i1 [ false, %logic.from10952 ], [ %t258, %logic.rend10955 ] + br i1 %t259, label %then10956, label %endif10958 +then10956: + %t260 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 5 + store i64 0, ptr %a261 + br label %each.cond10959 +each.cond10959: + %t262 = getelementptr inbounds { ptr, i64, i64 }, ptr %t260, i32 0, i32 1 + %t263 = load i64, ptr %t262 + %t264 = load i64, ptr %a261 + %t265 = icmp slt i64 %t264, %t263 + br i1 %t265, label %each.body10960, label %each.end10962 +each.body10960: + %t266 = load ptr, ptr %t260 + %t267 = getelementptr inbounds { ptr, i64, i64 }, ptr %t266, i64 %t264 + %t268 = load { ptr, i64, i64 }, ptr %t267 + store { ptr, i64, i64 } %t268, ptr %a269 + %t270 = load { ptr, i64, i64 }, ptr %a269 + %t271 = getelementptr inbounds %S.lsp.EnumRec, ptr %a238, i32 0, i32 1 + %t272 = load { ptr, i64, i64 }, ptr %t271 + store { ptr, i64, i64 } %t272, ptr %a274 + store { ptr, i64, i64 } { ptr @.str.7152, i64 1, i64 0 }, ptr %a275 + call void @finch_str_concat(ptr %a273, ptr %a274, ptr %a275) + %t276 = load { ptr, i64, i64 }, ptr %a273 + %t277 = load { ptr, i64, i64 }, ptr %a269 + store { ptr, i64, i64 } %t276, ptr %a279 + store { ptr, i64, i64 } %t277, ptr %a280 + call void @finch_str_concat(ptr %a278, ptr %a279, ptr %a280) + store { ptr, i64, i64 } %t276, ptr %a281 + call void @finch_str_drop(ptr %a281) + %t282 = load { ptr, i64, i64 }, ptr %a278 + %t283 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t270, i64 20, { ptr, i64, i64 } %t282, { ptr, i64, i64 } { ptr @.str.7153, i64 0, i64 0 }) + store { ptr, i64, i64 } %t282, ptr %a284 + call void @finch_str_drop(ptr %a284) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t283) + store %S.json.Json %t283, ptr %a285 + call void @finch.drop.S_json_Json(ptr %a285) + br label %each.step10961 +each.step10961: + %t286 = load i64, ptr %a261 + %t287 = add i64 %t286, 1 + store i64 %t287, ptr %a261 + br label %each.cond10959 +each.end10962: + %t288 = load %S.json.Json, ptr %a7 + %t289 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t288) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t289 +endif10958: + br label %each.step10950 +each.step10950: + %t290 = load i64, ptr %a230 + %t291 = add i64 %t290, 1 + store i64 %t291, ptr %a230 + br label %each.cond10948 +each.end10951: + %t292 = load %S.lsp.Analysis, ptr %a1 + %t293 = load { ptr, i64, i64 }, ptr %a3 + %t294 = load { ptr, i64, i64 }, ptr %a102 + %t295 = load i64, ptr %a4 + %t296 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t292, { ptr, i64, i64 } %t293, { ptr, i64, i64 } %t294, i64 %t295) + %t297 = extractvalue %S.lsp.VarRec %t296, 1 + store { ptr, i64, i64 } %t297, ptr %a298 + call void @finch_str_copy(ptr %a299, ptr %a298) + %t300 = load { ptr, i64, i64 }, ptr %a299 + store %S.lsp.VarRec %t296, ptr %a301 + call void @finch.drop.S_lsp_VarRec(ptr %a301) + store { ptr, i64, i64 } %t300, ptr %a302 + %t303 = load i1, ptr %a103 + br label %logic.from10963 +logic.from10963: + br i1 %t303, label %logic.rhs10964, label %logic.end10965 +logic.rhs10964: + %t304 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t304, ptr %a305 + store { ptr, i64, i64 } { ptr @.str.7155, i64 2, i64 0 }, ptr %a307 + %t308 = call i32 @finch_str_starts(ptr %a305, ptr %a307) + %t309 = icmp ne i32 %t308, 0 + br label %logic.rend10966 +logic.rend10966: + br label %logic.end10965 +logic.end10965: + %t310 = phi i1 [ false, %logic.from10963 ], [ %t309, %logic.rend10966 ] + br i1 %t310, label %then10967, label %else10968 +then10967: + %t311 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t311, ptr %a312 + %t314 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 + %t315 = load i64, ptr %t314 + call void @finch_str_sub(ptr %a313, ptr %a312, i64 2, i64 %t315, ptr @.str.7156, i64 569) + %t316 = load { ptr, i64, i64 }, ptr %a313 + %t317 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t316, ptr %a302 + store { ptr, i64, i64 } %t317, ptr %a318 + call void @finch_str_drop(ptr %a318) + br label %endif10969 +else10968: + %t319 = load i1, ptr %a103 + br label %logic.from10970 +logic.from10970: + br i1 %t319, label %logic.rhs10971, label %logic.end10972 +logic.rhs10971: + %t320 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t320, ptr %a321 + store { ptr, i64, i64 } { ptr @.str.7157, i64 3, i64 0 }, ptr %a322 + %t323 = call i32 @finch_str_eq(ptr %a321, ptr %a322) + %t324 = icmp ne i32 %t323, 0 + br label %logic.rend10973 +logic.rend10973: + br label %logic.end10972 +logic.end10972: + %t325 = phi i1 [ false, %logic.from10970 ], [ %t324, %logic.rend10973 ] + br i1 %t325, label %then10974, label %endif10976 +then10974: + %t326 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } { ptr @.str.7158, i64 4, i64 0 }, ptr %a302 + store { ptr, i64, i64 } %t326, ptr %a327 + call void @finch_str_drop(ptr %a327) + br label %endif10976 +endif10976: + br label %endif10969 +endif10969: + %t328 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t328, ptr %a329 + store { ptr, i64, i64 } { ptr @.str.7160, i64 4, i64 0 }, ptr %a331 + %t332 = call i32 @finch_str_starts(ptr %a329, ptr %a331) + %t333 = icmp ne i32 %t332, 0 + br label %logic.from10977 +logic.from10977: + br i1 %t333, label %logic.rhs10978, label %logic.end10979 +logic.rhs10978: + %t334 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t334, ptr %a335 + store { ptr, i64, i64 } { ptr @.str.7162, i64 1, i64 0 }, ptr %a337 + %t338 = call i32 @finch_str_ends(ptr %a335, ptr %a337) + %t339 = icmp ne i32 %t338, 0 + br label %logic.rend10980 +logic.rend10980: + br label %logic.end10979 +logic.end10979: + %t340 = phi i1 [ false, %logic.from10977 ], [ %t339, %logic.rend10980 ] + br i1 %t340, label %then10981, label %endif10983 +then10981: + %t341 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t341, ptr %a342 + %t344 = getelementptr inbounds { ptr, i64, i64 }, ptr %a302, i32 0, i32 1 + %t345 = load i64, ptr %t344 + %t346 = sub i64 %t345, 1 + call void @finch_str_sub(ptr %a343, ptr %a342, i64 4, i64 %t346, ptr @.str.7163, i64 574) + %t347 = load { ptr, i64, i64 }, ptr %a343 + %t348 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t347, ptr %a302 + store { ptr, i64, i64 } %t348, ptr %a349 + call void @finch_str_drop(ptr %a349) + br label %endif10983 +endif10983: + %t350 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t350, ptr %a351 + store { ptr, i64, i64 } { ptr @.str.7165, i64 2, i64 0 }, ptr %a353 + %t354 = call i32 @finch_str_starts(ptr %a351, ptr %a353) + %t355 = icmp ne i32 %t354, 0 + br i1 %t355, label %then10984, label %else10985 +then10984: + %t356 = call { ptr, i64, i64 } @finch.docs.arrayMethods() + call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t356) + store { ptr, i64, i64 } %t356, ptr %a357 + call void @finch.drop.arr_S_docs_Doc(ptr %a357) + br label %endif10986 +else10985: + %t358 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t358, ptr %a359 + store { ptr, i64, i64 } { ptr @.str.7166, i64 3, i64 0 }, ptr %a360 + %t361 = call i32 @finch_str_eq(ptr %a359, ptr %a360) + %t362 = icmp ne i32 %t361, 0 + br i1 %t362, label %then10987, label %else10988 +then10987: + %t363 = call { ptr, i64, i64 } @finch.docs.strMethods() + call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t363) + store { ptr, i64, i64 } %t363, ptr %a364 + call void @finch.drop.arr_S_docs_Doc(ptr %a364) + br label %endif10989 +else10988: + %t365 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t365, ptr %a366 + store { ptr, i64, i64 } { ptr @.str.7168, i64 4, i64 0 }, ptr %a368 + %t369 = call i32 @finch_str_starts(ptr %a366, ptr %a368) + %t370 = icmp ne i32 %t369, 0 + br i1 %t370, label %then10990, label %else10991 +then10990: + %t371 = call { ptr, i64, i64 } @finch.docs.mapMethods() + call void @finch.lsp.methodItems(ptr %a7, { ptr, i64, i64 } %t371) + store { ptr, i64, i64 } %t371, ptr %a372 + call void @finch.drop.arr_S_docs_Doc(ptr %a372) + br label %endif10992 +else10991: + %t373 = load { ptr, i64, i64 }, ptr %a302 + store { ptr, i64, i64 } %t373, ptr %a374 + call void @finch_str_copy(ptr %a375, ptr %a374) + %t376 = load { ptr, i64, i64 }, ptr %a375 + store { ptr, i64, i64 } %t376, ptr %a377 + %t378 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a379 + br label %each.cond10993 +each.cond10993: + %t380 = getelementptr inbounds { ptr, i64, i64 }, ptr %t378, i32 0, i32 1 + %t381 = load i64, ptr %t380 + %t382 = load i64, ptr %a379 + %t383 = icmp slt i64 %t382, %t381 + br i1 %t383, label %each.body10994, label %each.end10996 +each.body10994: + %t384 = load ptr, ptr %t378 + %t385 = getelementptr inbounds %S.lsp.StructRec, ptr %t384, i64 %t382 + %t386 = load %S.lsp.StructRec, ptr %t385 + store %S.lsp.StructRec %t386, ptr %a387 + %t388 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 1 + %t389 = load { ptr, i64, i64 }, ptr %t388 + %t390 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t389, ptr %a391 + store { ptr, i64, i64 } %t390, ptr %a392 + %t393 = call i32 @finch_str_eq(ptr %a391, ptr %a392) + %t394 = icmp ne i32 %t393, 0 + br i1 %t394, label %then10997, label %endif10999 +then10997: + %t395 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 + %t396 = getelementptr inbounds { ptr, i64, i64 }, ptr %t395, i32 0, i32 1 + %t397 = load i64, ptr %t396 + store i64 0, ptr %a398 + br label %for.cond11000 +for.cond11000: + %t399 = load i64, ptr %a398 + %t400 = icmp slt i64 %t399, %t397 + br i1 %t400, label %for.body11001, label %for.end11003 +for.body11001: + %t401 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 5 + %t402 = load i64, ptr %a398 + %t403 = load { ptr, i64, i64 }, ptr %t401 + %t404 = extractvalue { ptr, i64, i64 } %t403, 1 + %t405 = icmp uge i64 %t402, %t404 + br i1 %t405, label %range11004, label %inrange11005 +range11004: + call void @finch_panic_index(ptr @.str.7169, i64 587, i64 %t402, i64 %t404) + unreachable +inrange11005: + %t406 = extractvalue { ptr, i64, i64 } %t403, 0 + %t407 = getelementptr inbounds { ptr, i64, i64 }, ptr %t406, i64 %t402 + %t408 = load { ptr, i64, i64 }, ptr %t407 + %t409 = getelementptr inbounds %S.lsp.StructRec, ptr %a387, i32 0, i32 6 + %t410 = load i64, ptr %a398 + %t411 = load { ptr, i64, i64 }, ptr %t409 + %t412 = extractvalue { ptr, i64, i64 } %t411, 1 + %t413 = icmp uge i64 %t410, %t412 + br i1 %t413, label %range11006, label %inrange11007 +range11006: + call void @finch_panic_index(ptr @.str.7170, i64 587, i64 %t410, i64 %t412) + unreachable +inrange11007: + %t414 = extractvalue { ptr, i64, i64 } %t411, 0 + %t415 = getelementptr inbounds { ptr, i64, i64 }, ptr %t414, i64 %t410 + %t416 = load { ptr, i64, i64 }, ptr %t415 + %t417 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t408, i64 5, { ptr, i64, i64 } %t416, { ptr, i64, i64 } { ptr @.str.7171, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t417) + store %S.json.Json %t417, ptr %a418 + call void @finch.drop.S_json_Json(ptr %a418) + br label %for.step11002 +for.step11002: + %t419 = load i64, ptr %a398 + %t420 = add i64 %t419, 1 + store i64 %t420, ptr %a398 + br label %for.cond11000 +for.end11003: + br label %endif10999 +endif10999: + br label %each.step10995 +each.step10995: + %t421 = load i64, ptr %a379 + %t422 = add i64 %t421, 1 + store i64 %t422, ptr %a379 + br label %each.cond10993 +each.end10996: + %t423 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a424 + br label %each.cond11008 +each.cond11008: + %t425 = getelementptr inbounds { ptr, i64, i64 }, ptr %t423, i32 0, i32 1 + %t426 = load i64, ptr %t425 + %t427 = load i64, ptr %a424 + %t428 = icmp slt i64 %t427, %t426 + br i1 %t428, label %each.body11009, label %each.end11011 +each.body11009: + %t429 = load ptr, ptr %t423 + %t430 = getelementptr inbounds %S.lsp.FnRec, ptr %t429, i64 %t427 + %t431 = load %S.lsp.FnRec, ptr %t430 + store %S.lsp.FnRec %t431, ptr %a432 + %t433 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 2 + %t434 = load { ptr, i64, i64 }, ptr %t433 + %t435 = load { ptr, i64, i64 }, ptr %a377 + store { ptr, i64, i64 } %t434, ptr %a436 + store { ptr, i64, i64 } %t435, ptr %a437 + %t438 = call i32 @finch_str_eq(ptr %a436, ptr %a437) + %t439 = icmp ne i32 %t438, 0 + br i1 %t439, label %then11012, label %endif11014 +then11012: + %t440 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 1 + %t441 = load { ptr, i64, i64 }, ptr %t440 + %t442 = getelementptr inbounds %S.lsp.FnRec, ptr %a432, i32 0, i32 7 + %t443 = load { ptr, i64, i64 }, ptr %t442 + %t444 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t441, i64 2, { ptr, i64, i64 } %t443, { ptr, i64, i64 } { ptr @.str.7172, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t444) + store %S.json.Json %t444, ptr %a445 + call void @finch.drop.S_json_Json(ptr %a445) + br label %endif11014 +endif11014: + br label %each.step11010 +each.step11010: + %t446 = load i64, ptr %a424 + %t447 = add i64 %t446, 1 + store i64 %t447, ptr %a424 + br label %each.cond11008 +each.end11011: + call void @finch_str_drop(ptr %a377) + br label %endif10992 +endif10992: + br label %endif10989 +endif10989: + br label %endif10986 +endif10986: + %t448 = load %S.json.Json, ptr %a7 + %t449 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t448) + call void @finch_str_drop(ptr %a302) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t449 +endif10890: + store %S.lsp.Names zeroinitializer, ptr %a450 + %t451 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 1 + store i64 0, ptr %a452 + br label %each.cond11015 +each.cond11015: + %t453 = getelementptr inbounds { ptr, i64, i64 }, ptr %t451, i32 0, i32 1 + %t454 = load i64, ptr %t453 + %t455 = load i64, ptr %a452 + %t456 = icmp slt i64 %t455, %t454 + br i1 %t456, label %each.body11016, label %each.end11018 +each.body11016: + %t457 = load ptr, ptr %t451 + %t458 = getelementptr inbounds %S.lsp.VarRec, ptr %t457, i64 %t455 + %t459 = load %S.lsp.VarRec, ptr %t458 + store %S.lsp.VarRec %t459, ptr %a460 + %t461 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 3 + %t462 = load i64, ptr %t461 + %t463 = load i64, ptr %a4 + %t464 = icmp sle i64 %t462, %t463 + br label %logic.from11019 +logic.from11019: + br i1 %t464, label %logic.rhs11020, label %logic.end11021 +logic.rhs11020: + %t465 = load i64, ptr %a4 + %t466 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 7 + %t467 = load i64, ptr %t466 + %t468 = add i64 %t467, 1 + %t469 = icmp sle i64 %t465, %t468 + br label %logic.rend11022 +logic.rend11022: + br label %logic.end11021 +logic.end11021: + %t470 = phi i1 [ false, %logic.from11019 ], [ %t469, %logic.rend11022 ] + br label %logic.from11023 +logic.from11023: + br i1 %t470, label %logic.rhs11024, label %logic.end11025 +logic.rhs11024: + %t471 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 5 + %t472 = load { ptr, i64, i64 }, ptr %t471 + %t473 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t472, ptr %a474 + store { ptr, i64, i64 } %t473, ptr %a475 + %t476 = call i32 @finch_str_eq(ptr %a474, ptr %a475) + %t477 = icmp ne i32 %t476, 0 + br label %logic.rend11026 +logic.rend11026: + br label %logic.end11025 +logic.end11025: + %t478 = phi i1 [ false, %logic.from11023 ], [ %t477, %logic.rend11026 ] + br label %logic.from11027 +logic.from11027: + br i1 %t478, label %logic.rhs11028, label %logic.end11029 +logic.rhs11028: + %t479 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 + %t480 = load { ptr, i64, i64 }, ptr %t479 + %t481 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t480) + br label %logic.rend11030 +logic.rend11030: + br label %logic.end11029 +logic.end11029: + %t482 = phi i1 [ false, %logic.from11027 ], [ %t481, %logic.rend11030 ] + br i1 %t482, label %then11031, label %endif11033 +then11031: + %t483 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 0 + %t484 = load { ptr, i64, i64 }, ptr %t483 + %t485 = getelementptr inbounds %S.lsp.VarRec, ptr %a460, i32 0, i32 1 + %t486 = load { ptr, i64, i64 }, ptr %t485 + %t487 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t484, i64 6, { ptr, i64, i64 } %t486, { ptr, i64, i64 } { ptr @.str.7173, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t487) + store %S.json.Json %t487, ptr %a488 + call void @finch.drop.S_json_Json(ptr %a488) + br label %endif11033 +endif11033: + br label %each.step11017 +each.step11017: + %t489 = load i64, ptr %a452 + %t490 = add i64 %t489, 1 + store i64 %t490, ptr %a452 + br label %each.cond11015 +each.end11018: + %t491 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a492 + br label %each.cond11034 +each.cond11034: + %t493 = getelementptr inbounds { ptr, i64, i64 }, ptr %t491, i32 0, i32 1 + %t494 = load i64, ptr %t493 + %t495 = load i64, ptr %a492 + %t496 = icmp slt i64 %t495, %t494 + br i1 %t496, label %each.body11035, label %each.end11037 +each.body11035: + %t497 = load ptr, ptr %t491 + %t498 = getelementptr inbounds %S.lsp.FnRec, ptr %t497, i64 %t495 + %t499 = load %S.lsp.FnRec, ptr %t498 + store %S.lsp.FnRec %t499, ptr %a500 + %t501 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 2 + %t502 = getelementptr inbounds { ptr, i64, i64 }, ptr %t501, i32 0, i32 1 + %t503 = load i64, ptr %t502 + %t504 = icmp eq i64 %t503, 0 + br label %logic.from11038 +logic.from11038: + br i1 %t504, label %logic.rhs11039, label %logic.end11040 +logic.rhs11039: + %t505 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 0 + %t506 = load { ptr, i64, i64 }, ptr %t505 + store { ptr, i64, i64 } %t506, ptr %a507 + store { ptr, i64, i64 } { ptr @.str.7174, i64 0, i64 0 }, ptr %a508 + %t509 = call i32 @finch_str_eq(ptr %a507, ptr %a508) + %t510 = icmp ne i32 %t509, 0 + br label %logic.rend11041 +logic.rend11041: + br label %logic.end11040 +logic.end11040: + %t511 = phi i1 [ false, %logic.from11038 ], [ %t510, %logic.rend11041 ] + br label %logic.from11042 +logic.from11042: + br i1 %t511, label %logic.rhs11043, label %logic.end11044 +logic.rhs11043: + %t512 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 + %t513 = load { ptr, i64, i64 }, ptr %t512 + %t514 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t513) + br label %logic.rend11045 +logic.rend11045: + br label %logic.end11044 +logic.end11044: + %t515 = phi i1 [ false, %logic.from11042 ], [ %t514, %logic.rend11045 ] + br i1 %t515, label %then11046, label %endif11048 +then11046: + %t516 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 1 + %t517 = load { ptr, i64, i64 }, ptr %t516 + %t518 = getelementptr inbounds %S.lsp.FnRec, ptr %a500, i32 0, i32 7 + %t519 = load { ptr, i64, i64 }, ptr %t518 + %t520 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t517, i64 3, { ptr, i64, i64 } %t519, { ptr, i64, i64 } { ptr @.str.7175, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t520) + store %S.json.Json %t520, ptr %a521 + call void @finch.drop.S_json_Json(ptr %a521) + br label %endif11048 +endif11048: + br label %each.step11036 +each.step11036: + %t522 = load i64, ptr %a492 + %t523 = add i64 %t522, 1 + store i64 %t523, ptr %a492 + br label %each.cond11034 +each.end11037: + %t524 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 3 + store i64 0, ptr %a525 + br label %each.cond11049 +each.cond11049: + %t526 = getelementptr inbounds { ptr, i64, i64 }, ptr %t524, i32 0, i32 1 + %t527 = load i64, ptr %t526 + %t528 = load i64, ptr %a525 + %t529 = icmp slt i64 %t528, %t527 + br i1 %t529, label %each.body11050, label %each.end11052 +each.body11050: + %t530 = load ptr, ptr %t524 + %t531 = getelementptr inbounds %S.lsp.StructRec, ptr %t530, i64 %t528 + %t532 = load %S.lsp.StructRec, ptr %t531 + store %S.lsp.StructRec %t532, ptr %a533 + %t534 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 0 + %t535 = load { ptr, i64, i64 }, ptr %t534 + store { ptr, i64, i64 } %t535, ptr %a536 + store { ptr, i64, i64 } { ptr @.str.7176, i64 0, i64 0 }, ptr %a537 + %t538 = call i32 @finch_str_eq(ptr %a536, ptr %a537) + %t539 = icmp ne i32 %t538, 0 + br label %logic.from11053 +logic.from11053: + br i1 %t539, label %logic.rhs11054, label %logic.end11055 +logic.rhs11054: + %t540 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 + %t541 = load { ptr, i64, i64 }, ptr %t540 + %t542 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t541) + br label %logic.rend11056 +logic.rend11056: + br label %logic.end11055 +logic.end11055: + %t543 = phi i1 [ false, %logic.from11053 ], [ %t542, %logic.rend11056 ] + br i1 %t543, label %then11057, label %endif11059 +then11057: + %t544 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 + %t545 = load { ptr, i64, i64 }, ptr %t544 + %t546 = getelementptr inbounds %S.lsp.StructRec, ptr %a533, i32 0, i32 1 + %t547 = load { ptr, i64, i64 }, ptr %t546 + store { ptr, i64, i64 } { ptr @.str.7177, i64 7, i64 0 }, ptr %a549 + store { ptr, i64, i64 } %t547, ptr %a550 + call void @finch_str_concat(ptr %a548, ptr %a549, ptr %a550) + %t551 = load { ptr, i64, i64 }, ptr %a548 + %t552 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t545, i64 22, { ptr, i64, i64 } %t551, { ptr, i64, i64 } { ptr @.str.7178, i64 0, i64 0 }) + store { ptr, i64, i64 } %t551, ptr %a553 + call void @finch_str_drop(ptr %a553) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t552) + store %S.json.Json %t552, ptr %a554 + call void @finch.drop.S_json_Json(ptr %a554) + br label %endif11059 +endif11059: + br label %each.step11051 +each.step11051: + %t555 = load i64, ptr %a525 + %t556 = add i64 %t555, 1 + store i64 %t556, ptr %a525 + br label %each.cond11049 +each.end11052: + %t557 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a558 + br label %each.cond11060 +each.cond11060: + %t559 = getelementptr inbounds { ptr, i64, i64 }, ptr %t557, i32 0, i32 1 + %t560 = load i64, ptr %t559 + %t561 = load i64, ptr %a558 + %t562 = icmp slt i64 %t561, %t560 + br i1 %t562, label %each.body11061, label %each.end11063 +each.body11061: + %t563 = load ptr, ptr %t557 + %t564 = getelementptr inbounds %S.lsp.EnumRec, ptr %t563, i64 %t561 + %t565 = load %S.lsp.EnumRec, ptr %t564 + store %S.lsp.EnumRec %t565, ptr %a566 + %t567 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 0 + %t568 = load { ptr, i64, i64 }, ptr %t567 + store { ptr, i64, i64 } %t568, ptr %a569 + store { ptr, i64, i64 } { ptr @.str.7179, i64 0, i64 0 }, ptr %a570 + %t571 = call i32 @finch_str_eq(ptr %a569, ptr %a570) + %t572 = icmp ne i32 %t571, 0 + br label %logic.from11064 +logic.from11064: + br i1 %t572, label %logic.rhs11065, label %logic.end11066 +logic.rhs11065: + %t573 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 + %t574 = load { ptr, i64, i64 }, ptr %t573 + %t575 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t574) + br label %logic.rend11067 +logic.rend11067: + br label %logic.end11066 +logic.end11066: + %t576 = phi i1 [ false, %logic.from11064 ], [ %t575, %logic.rend11067 ] + br i1 %t576, label %then11068, label %endif11070 +then11068: + %t577 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 + %t578 = load { ptr, i64, i64 }, ptr %t577 + %t579 = getelementptr inbounds %S.lsp.EnumRec, ptr %a566, i32 0, i32 1 + %t580 = load { ptr, i64, i64 }, ptr %t579 + store { ptr, i64, i64 } { ptr @.str.7180, i64 5, i64 0 }, ptr %a582 + store { ptr, i64, i64 } %t580, ptr %a583 + call void @finch_str_concat(ptr %a581, ptr %a582, ptr %a583) + %t584 = load { ptr, i64, i64 }, ptr %a581 + %t585 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t578, i64 13, { ptr, i64, i64 } %t584, { ptr, i64, i64 } { ptr @.str.7181, i64 0, i64 0 }) + store { ptr, i64, i64 } %t584, ptr %a586 + call void @finch_str_drop(ptr %a586) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t585) + store %S.json.Json %t585, ptr %a587 + call void @finch.drop.S_json_Json(ptr %a587) + br label %endif11070 +endif11070: + br label %each.step11062 +each.step11062: + %t588 = load i64, ptr %a558 + %t589 = add i64 %t588, 1 + store i64 %t589, ptr %a558 + br label %each.cond11060 +each.end11063: + %t590 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 5 + store i64 0, ptr %a591 + br label %each.cond11071 +each.cond11071: + %t592 = getelementptr inbounds { ptr, i64, i64 }, ptr %t590, i32 0, i32 1 + %t593 = load i64, ptr %t592 + %t594 = load i64, ptr %a591 + %t595 = icmp slt i64 %t594, %t593 + br i1 %t595, label %each.body11072, label %each.end11074 +each.body11072: + %t596 = load ptr, ptr %t590 + %t597 = getelementptr inbounds { ptr, i64, i64 }, ptr %t596, i64 %t594 + %t598 = load { ptr, i64, i64 }, ptr %t597 + store { ptr, i64, i64 } %t598, ptr %a599 + %t600 = load { ptr, i64, i64 }, ptr %a599 + %t601 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t600) + br i1 %t601, label %then11075, label %endif11077 +then11075: + %t602 = load { ptr, i64, i64 }, ptr %a599 + %t603 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t602, i64 9, { ptr, i64, i64 } { ptr @.str.7182, i64 6, i64 0 }, { ptr, i64, i64 } { ptr @.str.7183, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t603) + store %S.json.Json %t603, ptr %a604 + call void @finch.drop.S_json_Json(ptr %a604) + br label %endif11077 +endif11077: + br label %each.step11073 +each.step11073: + %t605 = load i64, ptr %a591 + %t606 = add i64 %t605, 1 + store i64 %t606, ptr %a591 + br label %each.cond11071 +each.end11074: + %t607 = call { ptr, i64, i64 } @finch.docs.builtins() + store { ptr, i64, i64 } %t607, ptr %a608 + store i64 0, ptr %a609 + br label %each.cond11078 +each.cond11078: + %t610 = getelementptr inbounds { ptr, i64, i64 }, ptr %a608, i32 0, i32 1 + %t611 = load i64, ptr %t610 + %t612 = load i64, ptr %a609 + %t613 = icmp slt i64 %t612, %t611 + br i1 %t613, label %each.body11079, label %each.end11081 +each.body11079: + %t614 = load ptr, ptr %a608 + %t615 = getelementptr inbounds %S.docs.Doc, ptr %t614, i64 %t612 + %t616 = load %S.docs.Doc, ptr %t615 + store %S.docs.Doc %t616, ptr %a617 + %t618 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 + %t619 = load { ptr, i64, i64 }, ptr %t618 + %t620 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t619) + br i1 %t620, label %then11082, label %endif11084 +then11082: + %t621 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 0 + %t622 = load { ptr, i64, i64 }, ptr %t621 + %t623 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 1 + %t624 = load { ptr, i64, i64 }, ptr %t623 + %t625 = getelementptr inbounds %S.docs.Doc, ptr %a617, i32 0, i32 2 + %t626 = load { ptr, i64, i64 }, ptr %t625 + %t627 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t622, i64 3, { ptr, i64, i64 } %t624, { ptr, i64, i64 } %t626) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t627) + store %S.json.Json %t627, ptr %a628 + call void @finch.drop.S_json_Json(ptr %a628) + br label %endif11084 +endif11084: + br label %each.step11080 +each.step11080: + %t629 = load i64, ptr %a609 + %t630 = add i64 %t629, 1 + store i64 %t630, ptr %a609 + br label %each.cond11078 +each.end11081: + call void @finch.drop.arr_S_docs_Doc(ptr %a608) + %t631 = call { ptr, i64, i64 } @finch.docs.keywords() + store { ptr, i64, i64 } %t631, ptr %a632 + store i64 0, ptr %a633 + br label %each.cond11085 +each.cond11085: + %t634 = getelementptr inbounds { ptr, i64, i64 }, ptr %a632, i32 0, i32 1 + %t635 = load i64, ptr %t634 + %t636 = load i64, ptr %a633 + %t637 = icmp slt i64 %t636, %t635 + br i1 %t637, label %each.body11086, label %each.end11088 +each.body11086: + %t638 = load ptr, ptr %a632 + %t639 = getelementptr inbounds { ptr, i64, i64 }, ptr %t638, i64 %t636 + %t640 = load { ptr, i64, i64 }, ptr %t639 + store { ptr, i64, i64 } %t640, ptr %a641 + %t642 = load { ptr, i64, i64 }, ptr %a641 + %t643 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t642) + br i1 %t643, label %then11089, label %endif11091 +then11089: + %t644 = load { ptr, i64, i64 }, ptr %a641 + %t645 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t644, i64 14, { ptr, i64, i64 } { ptr @.str.7184, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7185, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t645) + store %S.json.Json %t645, ptr %a646 + call void @finch.drop.S_json_Json(ptr %a646) + br label %endif11091 +endif11091: + br label %each.step11087 +each.step11087: + %t647 = load i64, ptr %a633 + %t648 = add i64 %t647, 1 + store i64 %t648, ptr %a633 + br label %each.cond11085 +each.end11088: + call void @finch.drop.arr_str(ptr %a632) + %t649 = call { ptr, i64, i64 } @finch.docs.typeNames() + store { ptr, i64, i64 } %t649, ptr %a650 + store i64 0, ptr %a651 + br label %each.cond11092 +each.cond11092: + %t652 = getelementptr inbounds { ptr, i64, i64 }, ptr %a650, i32 0, i32 1 + %t653 = load i64, ptr %t652 + %t654 = load i64, ptr %a651 + %t655 = icmp slt i64 %t654, %t653 + br i1 %t655, label %each.body11093, label %each.end11095 +each.body11093: + %t656 = load ptr, ptr %a650 + %t657 = getelementptr inbounds { ptr, i64, i64 }, ptr %t656, i64 %t654 + %t658 = load { ptr, i64, i64 }, ptr %t657 + store { ptr, i64, i64 } %t658, ptr %a659 + %t660 = load { ptr, i64, i64 }, ptr %a659 + %t661 = call i1 @finch.lsp.Names.add(ptr %a450, { ptr, i64, i64 } %t660) + br i1 %t661, label %then11096, label %endif11098 +then11096: + %t662 = load { ptr, i64, i64 }, ptr %a659 + %t663 = call %S.json.Json @finch.lsp.item({ ptr, i64, i64 } %t662, i64 25, { ptr, i64, i64 } { ptr @.str.7186, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7187, i64 0, i64 0 }) + call void @finch.json.Json.push(ptr %a7, %S.json.Json %t663) + store %S.json.Json %t663, ptr %a664 + call void @finch.drop.S_json_Json(ptr %a664) + br label %endif11098 +endif11098: + br label %each.step11094 +each.step11094: + %t665 = load i64, ptr %a651 + %t666 = add i64 %t665, 1 + store i64 %t666, ptr %a651 + br label %each.cond11092 +each.end11095: + call void @finch.drop.arr_str(ptr %a650) + %t667 = load %S.json.Json, ptr %a7 + %t668 = call %S.json.Json @finch.lsp.completionList(%S.json.Json %t667) + call void @finch.drop.S_lsp_Names(ptr %a450) + call void @finch_str_drop(ptr %a26) + call void @finch_str_drop(ptr %a11) + call void @finch.drop.S_json_Json(ptr %a7) + ret %S.json.Json %t668 +} + +define internal i1 @finch.lsp.Names.add(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 + %t4 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a5 + %t6 = load i64, ptr %t3 + %t7 = load ptr, ptr %t2 + store i64 0, ptr %a8 + br label %find.cond11099 +find.cond11099: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t6 + br i1 %t10, label %find.body11100, label %find.end11103 +find.body11100: + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t7, i64 %t9 + %t12 = load { ptr, i64, i64 }, ptr %t11 + store { ptr, i64, i64 } %t12, ptr %a13 + store { ptr, i64, i64 } %t4, ptr %a14 + %t15 = call i32 @finch_str_eq(ptr %a13, ptr %a14) + %t16 = icmp ne i32 %t15, 0 + br i1 %t16, label %find.hit11101, label %find.next11102 +find.hit11101: + store i64 %t9, ptr %a5 + br label %find.end11103 +find.next11102: + %t17 = add i64 %t9, 1 + store i64 %t17, ptr %a8 + br label %find.cond11099 +find.end11103: + %t18 = load i64, ptr %a5 + %t19 = icmp sge i64 %t18, 0 + br i1 %t19, label %then11104, label %endif11106 +then11104: + ret i1 false +endif11106: + %t20 = getelementptr inbounds %S.lsp.Names, ptr %self, i32 0, i32 0 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i32 0, i32 1 + %t22 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_copy(ptr %a24, ptr %a23) + %t25 = load { ptr, i64, i64 }, ptr %a24 + %t26 = load i64, ptr %t21 + %t27 = add i64 %t26, 1 + call void @finch_arr_reserve(ptr %t20, i64 %t27, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t28 = load ptr, ptr %t20 + %t29 = getelementptr inbounds { ptr, i64, i64 }, ptr %t28, i64 %t26 + store { ptr, i64, i64 } %t25, ptr %t29 + store i64 %t27, ptr %t21 + ret i1 true +} + +define internal %S.json.Json @finch.lsp.completionList(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t2, ptr %a3 + %t4 = call %S.json.Json @finch.json.new_bool(i1 false) + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7188, i64 12, i64 0 }, %S.json.Json %t4) + store %S.json.Json %t4, ptr %a5 + call void @finch.drop.S_json_Json(ptr %a5) + %t6 = load %S.json.Json, ptr %a1 + call void @finch.json.Json.set(ptr %a3, { ptr, i64, i64 } { ptr @.str.7189, i64 5, i64 0 }, %S.json.Json %t6) + %t7 = load %S.json.Json, ptr %a3 + ret %S.json.Json %t7 +} + +define internal %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, i64 %p3, i64 %p4) { +entry: + %a1 = alloca %S.lsp.Analysis, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca i64, align 16 + %a5 = alloca i64, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca i64, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a24 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca i64, align 16 + %a26 = alloca i64, align 16 + %a27 = alloca i64, align 16 + %a31 = alloca i64, align 16 + %a41 = alloca i8, align 16 + %a74 = alloca i64, align 16 + %a76 = alloca i64, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + %a117 = alloca i64, align 16 + %a133 = alloca { ptr, i64, i64 }, align 16 + %a134 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a146 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a149 = alloca %S.lsp.VarRec, align 16 + %a150 = alloca { ptr, i64, i64 }, align 16 + %a152 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a154 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a165 = alloca { ptr, i64, i64 }, align 16 + %a166 = alloca { ptr, i64, i64 }, align 16 + %a172 = alloca { ptr, i64, i64 }, align 16 + %a174 = alloca { ptr, i64, i64 }, align 16 + %a175 = alloca { ptr, i64, i64 }, align 16 + %a178 = alloca { ptr, i64, i64 }, align 16 + %a180 = alloca i64, align 16 + %a188 = alloca %S.lsp.FnRec, align 16 + %a192 = alloca { ptr, i64, i64 }, align 16 + %a193 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a200 = alloca { ptr, i64, i64 }, align 16 + %a205 = alloca %S.json.Json, align 16 + %a209 = alloca %S.json.Json, align 16 + %a211 = alloca %S.json.Json, align 16 + %a213 = alloca i64, align 16 + %a221 = alloca { ptr, i64, i64 }, align 16 + %a226 = alloca %S.json.Json, align 16 + %a229 = alloca %S.json.Json, align 16 + %a235 = alloca %S.json.Json, align 16 + %a238 = alloca %S.json.Json, align 16 + %a241 = alloca %S.json.Json, align 16 + %a244 = alloca %S.json.Json, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca %S.docs.Doc, align 16 + %a258 = alloca %S.json.Json, align 16 + %a262 = alloca %S.json.Json, align 16 + %a266 = alloca %S.json.Json, align 16 + %a268 = alloca %S.json.Json, align 16 + %a271 = alloca %S.json.Json, align 16 + %a274 = alloca %S.json.Json, align 16 + %a277 = alloca %S.json.Json, align 16 + store %S.lsp.Analysis %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store i64 %p3, ptr %a4 + store i64 %p4, ptr %a5 + %t6 = load { ptr, i64, i64 }, ptr %a2 + %t7 = load i64, ptr %a4 + %t8 = call { ptr, i64, i64 } @finch.lsp.lineOf({ ptr, i64, i64 } %t6, i64 %t7) + store { ptr, i64, i64 } %t8, ptr %a9 + %t10 = load i64, ptr %a5 + %t11 = sub i64 %t10, 1 + store i64 %t11, ptr %a12 + %t13 = load i64, ptr %a12 + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t15 = load i64, ptr %t14 + %t16 = icmp sgt i64 %t13, %t15 + br i1 %t16, label %then11107, label %endif11109 +then11107: + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a9, i32 0, i32 1 + %t18 = load i64, ptr %t17 + store i64 %t18, ptr %a12 + br label %endif11109 +endif11109: + %t19 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t19, ptr %a20 + %t22 = load i64, ptr %a12 + call void @finch_str_sub(ptr %a21, ptr %a20, i64 0, i64 %t22, ptr @.str.7190, i64 671) + %t23 = load { ptr, i64, i64 }, ptr %a21 + store { ptr, i64, i64 } %t23, ptr %a24 + store i64 0, ptr %a25 + store i64 0, ptr %a26 + store i64 -1, ptr %a27 + %t28 = getelementptr inbounds { ptr, i64, i64 }, ptr %a24, i32 0, i32 1 + %t29 = load i64, ptr %t28 + %t30 = sub i64 %t29, 1 + store i64 %t30, ptr %a31 + br label %while.cond11110 +while.cond11110: + %t32 = load i64, ptr %a31 + %t33 = icmp sge i64 %t32, 0 + br i1 %t33, label %while.body11111, label %while.end11112 +while.body11111: + %t34 = load i64, ptr %a31 + %t35 = load { ptr, i64, i64 }, ptr %a24 + %t36 = extractvalue { ptr, i64, i64 } %t35, 1 + %t37 = icmp uge i64 %t34, %t36 + br i1 %t37, label %range11113, label %inrange11114 +range11113: + call void @finch_panic_index(ptr @.str.7191, i64 678, i64 %t34, i64 %t36) + unreachable +inrange11114: + %t38 = extractvalue { ptr, i64, i64 } %t35, 0 + %t39 = getelementptr inbounds i8, ptr %t38, i64 %t34 + %t40 = load i8, ptr %t39 + store i8 %t40, ptr %a41 + %t42 = load i8, ptr %a41 + %t43 = icmp eq i8 %t42, 41 + br label %logic.from11115 +logic.from11115: + br i1 %t43, label %logic.end11117, label %logic.rhs11116 +logic.rhs11116: + %t44 = load i8, ptr %a41 + %t45 = icmp eq i8 %t44, 93 + br label %logic.rend11118 +logic.rend11118: + br label %logic.end11117 +logic.end11117: + %t46 = phi i1 [ true, %logic.from11115 ], [ %t45, %logic.rend11118 ] + br i1 %t46, label %then11119, label %else11120 +then11119: + %t47 = load i64, ptr %a25 + %t48 = add i64 %t47, 1 + store i64 %t48, ptr %a25 + br label %endif11121 +else11120: + %t49 = load i8, ptr %a41 + %t50 = icmp eq i8 %t49, 40 + br label %logic.from11122 +logic.from11122: + br i1 %t50, label %logic.end11124, label %logic.rhs11123 +logic.rhs11123: + %t51 = load i8, ptr %a41 + %t52 = icmp eq i8 %t51, 91 + br label %logic.rend11125 +logic.rend11125: + br label %logic.end11124 +logic.end11124: + %t53 = phi i1 [ true, %logic.from11122 ], [ %t52, %logic.rend11125 ] + br i1 %t53, label %then11126, label %else11127 +then11126: + %t54 = load i64, ptr %a25 + %t55 = icmp eq i64 %t54, 0 + br i1 %t55, label %then11129, label %else11130 +then11129: + %t56 = load i8, ptr %a41 + %t57 = icmp eq i8 %t56, 40 + br i1 %t57, label %then11132, label %endif11134 +then11132: + %t58 = load i64, ptr %a31 + store i64 %t58, ptr %a27 + br label %while.end11112 +endif11134: + br label %endif11131 +else11130: + %t59 = load i64, ptr %a25 + %t60 = sub i64 %t59, 1 + store i64 %t60, ptr %a25 + br label %endif11131 +endif11131: + br label %endif11128 +else11127: + %t61 = load i8, ptr %a41 + %t62 = icmp eq i8 %t61, 44 + br label %logic.from11135 +logic.from11135: + br i1 %t62, label %logic.rhs11136, label %logic.end11137 +logic.rhs11136: + %t63 = load i64, ptr %a25 + %t64 = icmp eq i64 %t63, 0 + br label %logic.rend11138 +logic.rend11138: + br label %logic.end11137 +logic.end11137: + %t65 = phi i1 [ false, %logic.from11135 ], [ %t64, %logic.rend11138 ] + br i1 %t65, label %then11139, label %endif11141 +then11139: + %t66 = load i64, ptr %a26 + %t67 = add i64 %t66, 1 + store i64 %t67, ptr %a26 + br label %endif11141 +endif11141: + br label %endif11128 +endif11128: + br label %endif11121 +endif11121: + %t68 = load i64, ptr %a31 + %t69 = sub i64 %t68, 1 + store i64 %t69, ptr %a31 + br label %while.cond11110 +while.end11112: + %t70 = load i64, ptr %a27 + %t71 = icmp slt i64 %t70, 0 + br i1 %t71, label %then11142, label %endif11144 +then11142: + %t72 = call %S.json.Json @finch.json.new_null() + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t72 +endif11144: + %t73 = load i64, ptr %a27 + store i64 %t73, ptr %a74 + %t75 = load i64, ptr %a74 + store i64 %t75, ptr %a76 + br label %while.cond11145 +while.cond11145: + %t77 = load i64, ptr %a76 + %t78 = icmp sgt i64 %t77, 0 + br label %logic.from11148 +logic.from11148: + br i1 %t78, label %logic.rhs11149, label %logic.end11150 +logic.rhs11149: + %t79 = load i64, ptr %a76 + %t80 = sub i64 %t79, 1 + %t81 = load { ptr, i64, i64 }, ptr %a24 + %t82 = extractvalue { ptr, i64, i64 } %t81, 1 + %t83 = icmp uge i64 %t80, %t82 + br i1 %t83, label %range11151, label %inrange11152 +range11151: + call void @finch_panic_index(ptr @.str.7192, i64 700, i64 %t80, i64 %t82) + unreachable +inrange11152: + %t84 = extractvalue { ptr, i64, i64 } %t81, 0 + %t85 = getelementptr inbounds i8, ptr %t84, i64 %t80 + %t86 = load i8, ptr %t85 + %t87 = call i1 @finch.lsp.isWordChar(i8 %t86) + br label %logic.rend11153 +logic.rend11153: + br label %logic.end11150 +logic.end11150: + %t88 = phi i1 [ false, %logic.from11148 ], [ %t87, %logic.rend11153 ] + br i1 %t88, label %while.body11146, label %while.end11147 +while.body11146: + %t89 = load i64, ptr %a76 + %t90 = sub i64 %t89, 1 + store i64 %t90, ptr %a76 + br label %while.cond11145 +while.end11147: + %t91 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t91, ptr %a92 + %t94 = load i64, ptr %a76 + %t95 = load i64, ptr %a74 + call void @finch_str_sub(ptr %a93, ptr %a92, i64 %t94, i64 %t95, ptr @.str.7193, i64 703) + %t96 = load { ptr, i64, i64 }, ptr %a93 + store { ptr, i64, i64 } %t96, ptr %a97 + %t98 = getelementptr inbounds { ptr, i64, i64 }, ptr %a97, i32 0, i32 1 + %t99 = load i64, ptr %t98 + %t100 = icmp eq i64 %t99, 0 + br i1 %t100, label %then11154, label %endif11156 +then11154: + %t101 = call %S.json.Json @finch.json.new_null() + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t101 +endif11156: + store { ptr, i64, i64 } { ptr @.str.7194, i64 0, i64 0 }, ptr %a102 + %t103 = load i64, ptr %a76 + %t104 = icmp sgt i64 %t103, 0 + br label %logic.from11157 +logic.from11157: + br i1 %t104, label %logic.rhs11158, label %logic.end11159 +logic.rhs11158: + %t105 = load i64, ptr %a76 + %t106 = sub i64 %t105, 1 + %t107 = load { ptr, i64, i64 }, ptr %a24 + %t108 = extractvalue { ptr, i64, i64 } %t107, 1 + %t109 = icmp uge i64 %t106, %t108 + br i1 %t109, label %range11160, label %inrange11161 +range11160: + call void @finch_panic_index(ptr @.str.7195, i64 708, i64 %t106, i64 %t108) + unreachable +inrange11161: + %t110 = extractvalue { ptr, i64, i64 } %t107, 0 + %t111 = getelementptr inbounds i8, ptr %t110, i64 %t106 + %t112 = load i8, ptr %t111 + %t113 = icmp eq i8 %t112, 46 + br label %logic.rend11162 +logic.rend11162: + br label %logic.end11159 +logic.end11159: + %t114 = phi i1 [ false, %logic.from11157 ], [ %t113, %logic.rend11162 ] + br i1 %t114, label %then11163, label %endif11165 +then11163: + %t115 = load i64, ptr %a76 + %t116 = sub i64 %t115, 1 + store i64 %t116, ptr %a117 + br label %while.cond11166 +while.cond11166: + %t118 = load i64, ptr %a117 + %t119 = icmp sgt i64 %t118, 0 + br label %logic.from11169 +logic.from11169: + br i1 %t119, label %logic.rhs11170, label %logic.end11171 +logic.rhs11170: + %t120 = load i64, ptr %a117 + %t121 = sub i64 %t120, 1 + %t122 = load { ptr, i64, i64 }, ptr %a24 + %t123 = extractvalue { ptr, i64, i64 } %t122, 1 + %t124 = icmp uge i64 %t121, %t123 + br i1 %t124, label %range11172, label %inrange11173 +range11172: + call void @finch_panic_index(ptr @.str.7196, i64 711, i64 %t121, i64 %t123) + unreachable +inrange11173: + %t125 = extractvalue { ptr, i64, i64 } %t122, 0 + %t126 = getelementptr inbounds i8, ptr %t125, i64 %t121 + %t127 = load i8, ptr %t126 + %t128 = call i1 @finch.lsp.isWordChar(i8 %t127) + br label %logic.rend11174 +logic.rend11174: + br label %logic.end11171 +logic.end11171: + %t129 = phi i1 [ false, %logic.from11169 ], [ %t128, %logic.rend11174 ] + br i1 %t129, label %while.body11167, label %while.end11168 +while.body11167: + %t130 = load i64, ptr %a117 + %t131 = sub i64 %t130, 1 + store i64 %t131, ptr %a117 + br label %while.cond11166 +while.end11168: + %t132 = load { ptr, i64, i64 }, ptr %a24 + store { ptr, i64, i64 } %t132, ptr %a133 + %t135 = load i64, ptr %a117 + %t136 = load i64, ptr %a76 + %t137 = sub i64 %t136, 1 + call void @finch_str_sub(ptr %a134, ptr %a133, i64 %t135, i64 %t137, ptr @.str.7197, i64 714) + %t138 = load { ptr, i64, i64 }, ptr %a134 + store { ptr, i64, i64 } %t138, ptr %a139 + %t140 = load %S.lsp.Analysis, ptr %a1 + %t141 = load { ptr, i64, i64 }, ptr %a3 + %t142 = load { ptr, i64, i64 }, ptr %a139 + %t143 = load i64, ptr %a4 + %t144 = call %S.lsp.VarRec @finch.lsp.varNamed(%S.lsp.Analysis %t140, { ptr, i64, i64 } %t141, { ptr, i64, i64 } %t142, i64 %t143) + %t145 = extractvalue %S.lsp.VarRec %t144, 1 + store { ptr, i64, i64 } %t145, ptr %a146 + call void @finch_str_copy(ptr %a147, ptr %a146) + %t148 = load { ptr, i64, i64 }, ptr %a147 + store %S.lsp.VarRec %t144, ptr %a149 + call void @finch.drop.S_lsp_VarRec(ptr %a149) + store { ptr, i64, i64 } %t148, ptr %a150 + %t151 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t151, ptr %a152 + store { ptr, i64, i64 } { ptr @.str.7199, i64 4, i64 0 }, ptr %a154 + %t155 = call i32 @finch_str_starts(ptr %a152, ptr %a154) + %t156 = icmp ne i32 %t155, 0 + br label %logic.from11175 +logic.from11175: + br i1 %t156, label %logic.rhs11176, label %logic.end11177 +logic.rhs11176: + %t157 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t157, ptr %a158 + store { ptr, i64, i64 } { ptr @.str.7201, i64 1, i64 0 }, ptr %a160 + %t161 = call i32 @finch_str_ends(ptr %a158, ptr %a160) + %t162 = icmp ne i32 %t161, 0 + br label %logic.rend11178 +logic.rend11178: + br label %logic.end11177 +logic.end11177: + %t163 = phi i1 [ false, %logic.from11175 ], [ %t162, %logic.rend11178 ] + br i1 %t163, label %then11179, label %endif11181 +then11179: + %t164 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t164, ptr %a165 + %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %a150, i32 0, i32 1 + %t168 = load i64, ptr %t167 + %t169 = sub i64 %t168, 1 + call void @finch_str_sub(ptr %a166, ptr %a165, i64 4, i64 %t169, ptr @.str.7202, i64 717) + %t170 = load { ptr, i64, i64 }, ptr %a166 + %t171 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t170, ptr %a150 + store { ptr, i64, i64 } %t171, ptr %a172 + call void @finch_str_drop(ptr %a172) + br label %endif11181 +endif11181: + %t173 = load { ptr, i64, i64 }, ptr %a150 + store { ptr, i64, i64 } %t173, ptr %a174 + call void @finch_str_copy(ptr %a175, ptr %a174) + %t176 = load { ptr, i64, i64 }, ptr %a175 + %t177 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t176, ptr %a102 + store { ptr, i64, i64 } %t177, ptr %a178 + call void @finch_str_drop(ptr %a178) + call void @finch_str_drop(ptr %a150) + call void @finch_str_drop(ptr %a139) + br label %endif11165 +endif11165: + %t179 = getelementptr inbounds %S.lsp.Analysis, ptr %a1, i32 0, i32 2 + store i64 0, ptr %a180 + br label %each.cond11182 +each.cond11182: + %t181 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i32 0, i32 1 + %t182 = load i64, ptr %t181 + %t183 = load i64, ptr %a180 + %t184 = icmp slt i64 %t183, %t182 + br i1 %t184, label %each.body11183, label %each.end11185 +each.body11183: + %t185 = load ptr, ptr %t179 + %t186 = getelementptr inbounds %S.lsp.FnRec, ptr %t185, i64 %t183 + %t187 = load %S.lsp.FnRec, ptr %t186 + store %S.lsp.FnRec %t187, ptr %a188 + %t189 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 1 + %t190 = load { ptr, i64, i64 }, ptr %t189 + %t191 = load { ptr, i64, i64 }, ptr %a97 + store { ptr, i64, i64 } %t190, ptr %a192 + store { ptr, i64, i64 } %t191, ptr %a193 + %t194 = call i32 @finch_str_eq(ptr %a192, ptr %a193) + %t195 = icmp ne i32 %t194, 0 + br label %logic.from11186 +logic.from11186: + br i1 %t195, label %logic.rhs11187, label %logic.end11188 +logic.rhs11187: + %t196 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 2 + %t197 = load { ptr, i64, i64 }, ptr %t196 + %t198 = load { ptr, i64, i64 }, ptr %a102 + store { ptr, i64, i64 } %t197, ptr %a199 + store { ptr, i64, i64 } %t198, ptr %a200 + %t201 = call i32 @finch_str_eq(ptr %a199, ptr %a200) + %t202 = icmp ne i32 %t201, 0 + br label %logic.rend11189 +logic.rend11189: + br label %logic.end11188 +logic.end11188: + %t203 = phi i1 [ false, %logic.from11186 ], [ %t202, %logic.rend11189 ] + br i1 %t203, label %then11190, label %endif11192 +then11190: + %t204 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t204, ptr %a205 + %t206 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 7 + %t207 = load { ptr, i64, i64 }, ptr %t206 + %t208 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t207) + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7203, i64 5, i64 0 }, %S.json.Json %t208) + store %S.json.Json %t208, ptr %a209 + call void @finch.drop.S_json_Json(ptr %a209) + %t210 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t210, ptr %a211 + %t212 = getelementptr inbounds %S.lsp.FnRec, ptr %a188, i32 0, i32 8 + store i64 0, ptr %a213 + br label %each.cond11193 +each.cond11193: + %t214 = getelementptr inbounds { ptr, i64, i64 }, ptr %t212, i32 0, i32 1 + %t215 = load i64, ptr %t214 + %t216 = load i64, ptr %a213 + %t217 = icmp slt i64 %t216, %t215 + br i1 %t217, label %each.body11194, label %each.end11196 +each.body11194: + %t218 = load ptr, ptr %t212 + %t219 = getelementptr inbounds { ptr, i64, i64 }, ptr %t218, i64 %t216 + %t220 = load { ptr, i64, i64 }, ptr %t219 + store { ptr, i64, i64 } %t220, ptr %a221 + %t222 = getelementptr inbounds { ptr, i64, i64 }, ptr %a221, i32 0, i32 1 + %t223 = load i64, ptr %t222 + %t224 = icmp sgt i64 %t223, 0 + br i1 %t224, label %then11197, label %endif11199 +then11197: + %t225 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t225, ptr %a226 + %t227 = load { ptr, i64, i64 }, ptr %a221 + %t228 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t227) + call void @finch.json.Json.set(ptr %a226, { ptr, i64, i64 } { ptr @.str.7204, i64 5, i64 0 }, %S.json.Json %t228) + store %S.json.Json %t228, ptr %a229 + call void @finch.drop.S_json_Json(ptr %a229) + %t230 = load %S.json.Json, ptr %a226 + call void @finch.json.Json.push(ptr %a211, %S.json.Json %t230) + call void @finch.drop.S_json_Json(ptr %a226) + br label %endif11199 +endif11199: + br label %each.step11195 +each.step11195: + %t231 = load i64, ptr %a213 + %t232 = add i64 %t231, 1 + store i64 %t232, ptr %a213 + br label %each.cond11193 +each.end11196: + %t233 = load %S.json.Json, ptr %a211 + call void @finch.json.Json.set(ptr %a205, { ptr, i64, i64 } { ptr @.str.7205, i64 10, i64 0 }, %S.json.Json %t233) + %t234 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t234, ptr %a235 + %t236 = load %S.json.Json, ptr %a205 + call void @finch.json.Json.push(ptr %a235, %S.json.Json %t236) + %t237 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t237, ptr %a238 + %t239 = load %S.json.Json, ptr %a235 + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7206, i64 10, i64 0 }, %S.json.Json %t239) + %t240 = call %S.json.Json @finch.lsp.num(i64 0) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7207, i64 15, i64 0 }, %S.json.Json %t240) + store %S.json.Json %t240, ptr %a241 + call void @finch.drop.S_json_Json(ptr %a241) + %t242 = load i64, ptr %a26 + %t243 = call %S.json.Json @finch.lsp.num(i64 %t242) + call void @finch.json.Json.set(ptr %a238, { ptr, i64, i64 } { ptr @.str.7208, i64 15, i64 0 }, %S.json.Json %t243) + store %S.json.Json %t243, ptr %a244 + call void @finch.drop.S_json_Json(ptr %a244) + %t245 = load %S.json.Json, ptr %a238 + call void @finch.drop.S_json_Json(ptr %a235) + call void @finch.drop.S_json_Json(ptr %a211) + call void @finch.drop.S_json_Json(ptr %a205) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t245 +endif11192: + br label %each.step11184 +each.step11184: + %t246 = load i64, ptr %a180 + %t247 = add i64 %t246, 1 + store i64 %t247, ptr %a180 + br label %each.cond11182 +each.end11185: + %t248 = call { ptr, i64, i64 } @finch.docs.builtins() + %t249 = load { ptr, i64, i64 }, ptr %a97 + %t250 = call %S.docs.Doc @finch.docs.find({ ptr, i64, i64 } %t248, { ptr, i64, i64 } %t249) + store { ptr, i64, i64 } %t248, ptr %a251 + call void @finch.drop.arr_S_docs_Doc(ptr %a251) + store %S.docs.Doc %t250, ptr %a252 + %t253 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 0 + %t254 = getelementptr inbounds { ptr, i64, i64 }, ptr %t253, i32 0, i32 1 + %t255 = load i64, ptr %t254 + %t256 = icmp sgt i64 %t255, 0 + br i1 %t256, label %then11200, label %endif11202 +then11200: + %t257 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t257, ptr %a258 + %t259 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 1 + %t260 = load { ptr, i64, i64 }, ptr %t259 + %t261 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t260) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7209, i64 5, i64 0 }, %S.json.Json %t261) + store %S.json.Json %t261, ptr %a262 + call void @finch.drop.S_json_Json(ptr %a262) + %t263 = getelementptr inbounds %S.docs.Doc, ptr %a252, i32 0, i32 2 + %t264 = load { ptr, i64, i64 }, ptr %t263 + %t265 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t264) + call void @finch.json.Json.set(ptr %a258, { ptr, i64, i64 } { ptr @.str.7210, i64 13, i64 0 }, %S.json.Json %t265) + store %S.json.Json %t265, ptr %a266 + call void @finch.drop.S_json_Json(ptr %a266) + %t267 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t267, ptr %a268 + %t269 = load %S.json.Json, ptr %a258 + call void @finch.json.Json.push(ptr %a268, %S.json.Json %t269) + %t270 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t270, ptr %a271 + %t272 = load %S.json.Json, ptr %a268 + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7211, i64 10, i64 0 }, %S.json.Json %t272) + %t273 = call %S.json.Json @finch.lsp.num(i64 0) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7212, i64 15, i64 0 }, %S.json.Json %t273) + store %S.json.Json %t273, ptr %a274 + call void @finch.drop.S_json_Json(ptr %a274) + %t275 = load i64, ptr %a26 + %t276 = call %S.json.Json @finch.lsp.num(i64 %t275) + call void @finch.json.Json.set(ptr %a271, { ptr, i64, i64 } { ptr @.str.7213, i64 15, i64 0 }, %S.json.Json %t276) + store %S.json.Json %t276, ptr %a277 + call void @finch.drop.S_json_Json(ptr %a277) + %t278 = load %S.json.Json, ptr %a271 + call void @finch.drop.S_json_Json(ptr %a268) + call void @finch.drop.S_json_Json(ptr %a258) + call void @finch.drop.S_docs_Doc(ptr %a252) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t278 +endif11202: + %t279 = call %S.json.Json @finch.json.new_null() + call void @finch.drop.S_docs_Doc(ptr %a252) + call void @finch_str_drop(ptr %a102) + call void @finch_str_drop(ptr %a97) + call void @finch_str_drop(ptr %a24) + call void @finch_str_drop(ptr %a9) + ret %S.json.Json %t279 +} + +define internal { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7214, i64 12, i64 0 }) + store %S.json.Json %t2, ptr %a3 + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7215, i64 4, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a3) + store %S.json.Json %t4, ptr %a5 + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7216, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a5) + ret { ptr, i64, i64 } %t6 +} + +define internal { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7217, i64 12, i64 0 }) + store %S.json.Json %t2, ptr %a3 + %t4 = call %S.json.Json @finch.json.Json.get(ptr %a3, { ptr, i64, i64 } { ptr @.str.7218, i64 3, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a3) + store %S.json.Json %t4, ptr %a5 + %t6 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a5, { ptr, i64, i64 } { ptr @.str.7219, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a5) + %t7 = call { ptr, i64, i64 } @finch.lsp.uriToPath({ ptr, i64, i64 } %t6) + store { ptr, i64, i64 } %t6, ptr %a8 + call void @finch_str_drop(ptr %a8) + ret { ptr, i64, i64 } %t7 +} + +define internal void @finch.lsp.Server.answer(ptr %self, %S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a3 = alloca %S.json.Json, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca %S.json.Json, align 16 + %a9 = alloca %S.json.Json, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca %S.json.Json, align 16 + %a18 = alloca %S.json.Json, align 16 + %a20 = alloca %S.json.Json, align 16 + %a22 = alloca %S.json.Json, align 16 + %a24 = alloca %S.json.Json, align 16 + %a26 = alloca %S.json.Json, align 16 + %a28 = alloca %S.json.Json, align 16 + %a30 = alloca %S.json.Json, align 16 + %a34 = alloca %S.json.Json, align 16 + %a36 = alloca %S.json.Json, align 16 + %a38 = alloca %S.json.Json, align 16 + %a40 = alloca %S.json.Json, align 16 + %a44 = alloca %S.json.Json, align 16 + %a47 = alloca %S.json.Json, align 16 + %a49 = alloca %S.json.Json, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a60 = alloca %S.json.Json, align 16 + %a61 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a79 = alloca i32, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a100 = alloca %S.json.Json, align 16 + %a106 = alloca %S.json.Json, align 16 + %a108 = alloca %S.json.Json, align 16 + %a112 = alloca { ptr, i64, i64 }, align 16 + %a113 = alloca i32, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a126 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca { ptr, i64, i64 }, align 16 + %a132 = alloca { ptr, i64, i64 }, align 16 + %a135 = alloca { ptr, i64, i64 }, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a145 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca { ptr, i64, i64 }, align 16 + %a158 = alloca { ptr, i64, i64 }, align 16 + %a168 = alloca { ptr, i64, i64 }, align 16 + %a177 = alloca %S.json.Json, align 16 + %a181 = alloca { ptr, i64, i64 }, align 16 + %a182 = alloca %S.json.Json, align 16 + %a184 = alloca %S.json.Json, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a190 = alloca { ptr, i64, i64 }, align 16 + %a191 = alloca { ptr, i64, i64 }, align 16 + %a194 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca { ptr, i64, i64 }, align 16 + %a198 = alloca { ptr, i64, i64 }, align 16 + %a199 = alloca { ptr, i64, i64 }, align 16 + %a202 = alloca { ptr, i64, i64 }, align 16 + %a203 = alloca { ptr, i64, i64 }, align 16 + %a208 = alloca { ptr, i64, i64 }, align 16 + %a210 = alloca %S.json.Json, align 16 + %a212 = alloca %S.json.Json, align 16 + %a215 = alloca i64, align 16 + %a217 = alloca %S.json.Json, align 16 + %a219 = alloca %S.json.Json, align 16 + %a222 = alloca i64, align 16 + %a225 = alloca { ptr, i64, i64 }, align 16 + %a231 = alloca %S.json.Json, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca %S.lsp.Analysis, align 16 + %a245 = alloca %S.lsp.Analysis, align 16 + %a247 = alloca %S.lsp.Analysis, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a251 = alloca { ptr, i64, i64 }, align 16 + %a256 = alloca { ptr, i64, i64 }, align 16 + %a259 = alloca { ptr, i64, i64 }, align 16 + %a260 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a270 = alloca { ptr, i64, i64 }, align 16 + %a272 = alloca { ptr, i64, i64 }, align 16 + %a273 = alloca { ptr, i64, i64 }, align 16 + %a282 = alloca %S.json.Json, align 16 + %a283 = alloca { ptr, i64, i64 }, align 16 + %a284 = alloca { ptr, i64, i64 }, align 16 + %a293 = alloca %S.json.Json, align 16 + %a294 = alloca { ptr, i64, i64 }, align 16 + %a295 = alloca { ptr, i64, i64 }, align 16 + %a305 = alloca %S.json.Json, align 16 + %a306 = alloca { ptr, i64, i64 }, align 16 + %a307 = alloca { ptr, i64, i64 }, align 16 + %a314 = alloca %S.json.Json, align 16 + %a322 = alloca %S.json.Json, align 16 + %a328 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7220, i64 6, i64 0 }) + store %S.json.Json %t2, ptr %a3 + %t4 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a3, { ptr, i64, i64 } { ptr @.str.7221, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a3) + store { ptr, i64, i64 } %t4, ptr %a5 + %t6 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7222, i64 6, i64 0 }) + store %S.json.Json %t6, ptr %a7 + %t8 = call %S.json.Json @finch.json.Json.get(ptr %a1, { ptr, i64, i64 } { ptr @.str.7223, i64 2, i64 0 }) + store %S.json.Json %t8, ptr %a9 + %t10 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t10, ptr %a11 + store { ptr, i64, i64 } { ptr @.str.7224, i64 10, i64 0 }, ptr %a12 + %t13 = call i32 @finch_str_eq(ptr %a11, ptr %a12) + %t14 = icmp ne i32 %t13, 0 + br i1 %t14, label %match.arm11204, label %match.next11205 +match.arm11204: + %t15 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t15, ptr %a16 + %t17 = call %S.json.Json @finch.lsp.num(i64 1) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7225, i64 16, i64 0 }, %S.json.Json %t17) + store %S.json.Json %t17, ptr %a18 + call void @finch.drop.S_json_Json(ptr %a18) + %t19 = call %S.json.Json @finch.json.new_bool(i1 true) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7226, i64 13, i64 0 }, %S.json.Json %t19) + store %S.json.Json %t19, ptr %a20 + call void @finch.drop.S_json_Json(ptr %a20) + %t21 = call %S.json.Json @finch.json.new_bool(i1 true) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7227, i64 18, i64 0 }, %S.json.Json %t21) + store %S.json.Json %t21, ptr %a22 + call void @finch.drop.S_json_Json(ptr %a22) + %t23 = call %S.json.Json @finch.json.new_bool(i1 true) + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7228, i64 22, i64 0 }, %S.json.Json %t23) + store %S.json.Json %t23, ptr %a24 + call void @finch.drop.S_json_Json(ptr %a24) + %t25 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t25, ptr %a26 + %t27 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t27, ptr %a28 + %t29 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7229, i64 1, i64 0 }) + call void @finch.json.Json.push(ptr %a28, %S.json.Json %t29) + store %S.json.Json %t29, ptr %a30 + call void @finch.drop.S_json_Json(ptr %a30) + %t31 = load %S.json.Json, ptr %a28 + call void @finch.json.Json.set(ptr %a26, { ptr, i64, i64 } { ptr @.str.7230, i64 17, i64 0 }, %S.json.Json %t31) + %t32 = load %S.json.Json, ptr %a26 + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7231, i64 18, i64 0 }, %S.json.Json %t32) + %t33 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t33, ptr %a34 + %t35 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t35, ptr %a36 + %t37 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7232, i64 1, i64 0 }) + call void @finch.json.Json.push(ptr %a36, %S.json.Json %t37) + store %S.json.Json %t37, ptr %a38 + call void @finch.drop.S_json_Json(ptr %a38) + %t39 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7233, i64 1, i64 0 }) + call void @finch.json.Json.push(ptr %a36, %S.json.Json %t39) + store %S.json.Json %t39, ptr %a40 + call void @finch.drop.S_json_Json(ptr %a40) + %t41 = load %S.json.Json, ptr %a36 + call void @finch.json.Json.set(ptr %a34, { ptr, i64, i64 } { ptr @.str.7234, i64 17, i64 0 }, %S.json.Json %t41) + %t42 = load %S.json.Json, ptr %a34 + call void @finch.json.Json.set(ptr %a16, { ptr, i64, i64 } { ptr @.str.7235, i64 21, i64 0 }, %S.json.Json %t42) + %t43 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t43, ptr %a44 + %t45 = load %S.json.Json, ptr %a16 + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7236, i64 12, i64 0 }, %S.json.Json %t45) + %t46 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t46, ptr %a47 + %t48 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } { ptr @.str.7238, i64 5, i64 0 }) + call void @finch.json.Json.set(ptr %a47, { ptr, i64, i64 } { ptr @.str.7237, i64 4, i64 0 }, %S.json.Json %t48) + store %S.json.Json %t48, ptr %a49 + call void @finch.drop.S_json_Json(ptr %a49) + %t50 = load %S.json.Json, ptr %a47 + call void @finch.json.Json.set(ptr %a44, { ptr, i64, i64 } { ptr @.str.7239, i64 10, i64 0 }, %S.json.Json %t50) + %t51 = load %S.json.Json, ptr %a9 + %t52 = load %S.json.Json, ptr %a44 + call void @finch.lsp.reply(%S.json.Json %t51, %S.json.Json %t52) + call void @finch.drop.S_json_Json(ptr %a47) + call void @finch.drop.S_json_Json(ptr %a44) + call void @finch.drop.S_json_Json(ptr %a36) + call void @finch.drop.S_json_Json(ptr %a34) + call void @finch.drop.S_json_Json(ptr %a28) + call void @finch.drop.S_json_Json(ptr %a26) + call void @finch.drop.S_json_Json(ptr %a16) + br label %match.end11203 +match.next11205: + store { ptr, i64, i64 } %t10, ptr %a53 + store { ptr, i64, i64 } { ptr @.str.7240, i64 8, i64 0 }, ptr %a54 + %t55 = call i32 @finch_str_eq(ptr %a53, ptr %a54) + %t56 = icmp ne i32 %t55, 0 + br i1 %t56, label %match.arm11206, label %match.next11207 +match.arm11206: + %t57 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 6 + store i1 true, ptr %t57 + %t58 = load %S.json.Json, ptr %a9 + %t59 = call %S.json.Json @finch.json.new_null() + call void @finch.lsp.reply(%S.json.Json %t58, %S.json.Json %t59) + store %S.json.Json %t59, ptr %a60 + call void @finch.drop.S_json_Json(ptr %a60) + br label %match.end11203 +match.next11207: + store { ptr, i64, i64 } %t10, ptr %a61 + store { ptr, i64, i64 } { ptr @.str.7241, i64 4, i64 0 }, ptr %a62 + %t63 = call i32 @finch_str_eq(ptr %a61, ptr %a62) + %t64 = icmp ne i32 %t63, 0 + br i1 %t64, label %match.arm11208, label %match.next11209 +match.arm11208: + %t65 = trunc i64 0 to i32 + %t66 = call i32 @fflush(ptr null) + call void @exit(i32 %t65) + br label %match.end11203 +match.next11209: + store { ptr, i64, i64 } %t10, ptr %a67 + store { ptr, i64, i64 } { ptr @.str.7242, i64 20, i64 0 }, ptr %a68 + %t69 = call i32 @finch_str_eq(ptr %a67, ptr %a68) + %t70 = icmp ne i32 %t69, 0 + br i1 %t70, label %match.arm11210, label %match.next11211 +match.arm11210: + %t71 = load %S.json.Json, ptr %a7 + %t72 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t71) + store { ptr, i64, i64 } %t72, ptr %a73 + %t74 = load %S.json.Json, ptr %a7 + %t75 = call { ptr, i64, i64 } @finch.lsp.textOf(%S.json.Json %t74) + %t76 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t77 = load { ptr, i64, i64 }, ptr %a73 + store { ptr, i64, i64 } %t77, ptr %a78 + store i32 0, ptr %a79 + %t80 = call i64 @finch_map_slot(ptr %t76, ptr %a78, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a79) + %t81 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t76, i32 0, i32 0 + %t82 = load ptr, ptr %t81 + %t83 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t82, i64 %t80 + %t84 = load i32, ptr %a79 + %t85 = icmp ne i32 %t84, 0 + br i1 %t85, label %map.new11212, label %map.have11213 +map.new11212: + %t86 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 1 + call void @finch_str_copy(ptr %t86, ptr %a78) + %t87 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t87 + br label %map.have11213 +map.have11213: + %t88 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t83, i32 0, i32 2 + %t89 = load { ptr, i64, i64 }, ptr %t88 + store { ptr, i64, i64 } %t75, ptr %t88 + store { ptr, i64, i64 } %t89, ptr %a90 + call void @finch_str_drop(ptr %a90) + %t91 = load { ptr, i64, i64 }, ptr %a73 + call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t91) + call void @finch_str_drop(ptr %a73) + br label %match.end11203 +match.next11211: + store { ptr, i64, i64 } %t10, ptr %a92 + store { ptr, i64, i64 } { ptr @.str.7243, i64 22, i64 0 }, ptr %a93 + %t94 = call i32 @finch_str_eq(ptr %a92, ptr %a93) + %t95 = icmp ne i32 %t94, 0 + br i1 %t95, label %match.arm11214, label %match.next11215 +match.arm11214: + %t96 = load %S.json.Json, ptr %a7 + %t97 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t96) + store { ptr, i64, i64 } %t97, ptr %a98 + %t99 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7244, i64 14, i64 0 }) + store %S.json.Json %t99, ptr %a100 + %t101 = call i64 @finch.json.Json.len(ptr %a100) + %t102 = icmp sgt i64 %t101, 0 + br i1 %t102, label %then11216, label %endif11218 +then11216: + %t103 = call i64 @finch.json.Json.len(ptr %a100) + %t104 = sub i64 %t103, 1 + %t105 = call %S.json.Json @finch.json.Json.at(ptr %a100, i64 %t104) + store %S.json.Json %t105, ptr %a106 + %t107 = call %S.json.Json @finch.json.Json.get(ptr %a106, { ptr, i64, i64 } { ptr @.str.7245, i64 4, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a106) + store %S.json.Json %t107, ptr %a108 + %t109 = call { ptr, i64, i64 } @finch.json.Json.str_or(ptr %a108, { ptr, i64, i64 } { ptr @.str.7246, i64 0, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a108) + %t110 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t111 = load { ptr, i64, i64 }, ptr %a98 + store { ptr, i64, i64 } %t111, ptr %a112 + store i32 0, ptr %a113 + %t114 = call i64 @finch_map_slot(ptr %t110, ptr %a112, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1, ptr %a113) + %t115 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t110, i32 0, i32 0 + %t116 = load ptr, ptr %t115 + %t117 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t116, i64 %t114 + %t118 = load i32, ptr %a113 + %t119 = icmp ne i32 %t118, 0 + br i1 %t119, label %map.new11219, label %map.have11220 +map.new11219: + %t120 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 1 + call void @finch_str_copy(ptr %t120, ptr %a112) + %t121 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 + store { ptr, i64, i64 } zeroinitializer, ptr %t121 + br label %map.have11220 +map.have11220: + %t122 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t117, i32 0, i32 2 + %t123 = load { ptr, i64, i64 }, ptr %t122 + store { ptr, i64, i64 } %t109, ptr %t122 + store { ptr, i64, i64 } %t123, ptr %a124 + call void @finch_str_drop(ptr %a124) + %t125 = load { ptr, i64, i64 }, ptr %a98 + call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t125) + br label %endif11218 +endif11218: + call void @finch.drop.S_json_Json(ptr %a100) + call void @finch_str_drop(ptr %a98) + br label %match.end11203 +match.next11215: + store { ptr, i64, i64 } %t10, ptr %a126 + store { ptr, i64, i64 } { ptr @.str.7247, i64 20, i64 0 }, ptr %a127 + %t128 = call i32 @finch_str_eq(ptr %a126, ptr %a127) + %t129 = icmp ne i32 %t128, 0 + br i1 %t129, label %match.arm11221, label %match.next11222 +match.arm11221: + %t130 = load %S.json.Json, ptr %a7 + %t131 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t130) + store { ptr, i64, i64 } %t131, ptr %a132 + %t133 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t134 = load { ptr, i64, i64 }, ptr %a132 + store { ptr, i64, i64 } %t134, ptr %a135 + %t136 = call i64 @finch_map_find(ptr %t133, ptr %a135, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t137 = icmp sge i64 %t136, 0 + br i1 %t137, label %then11223, label %endif11225 +then11223: + %t138 = load { ptr, i64, i64 }, ptr %a132 + call void @finch.lsp.Server.analyse(ptr %self, { ptr, i64, i64 } %t138) + br label %endif11225 +endif11225: + call void @finch_str_drop(ptr %a132) + br label %match.end11203 +match.next11222: + store { ptr, i64, i64 } %t10, ptr %a139 + store { ptr, i64, i64 } { ptr @.str.7248, i64 21, i64 0 }, ptr %a140 + %t141 = call i32 @finch_str_eq(ptr %a139, ptr %a140) + %t142 = icmp ne i32 %t141, 0 + br i1 %t142, label %match.arm11226, label %match.next11227 +match.arm11226: + %t143 = load %S.json.Json, ptr %a7 + %t144 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t143) + store { ptr, i64, i64 } %t144, ptr %a145 + %t146 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t147 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t147, ptr %a148 + %t149 = call i64 @finch_map_find(ptr %t146, ptr %a148, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t150 = icmp sge i64 %t149, 0 + br i1 %t150, label %remove.hit11228, label %remove.end11229 +remove.hit11228: + %t151 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t146, i32 0, i32 0 + %t152 = load ptr, ptr %t151 + %t153 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t152, i64 %t149 + %t154 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 1 + call void @finch_str_drop(ptr %t154) + %t155 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t153, i32 0, i32 2 + call void @finch_str_drop(ptr %t155) + call void @finch_map_remove_at(ptr %t146, i64 %t149, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64)) + br label %remove.end11229 +remove.end11229: + %t156 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t157 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t157, ptr %a158 + %t159 = call i64 @finch_map_find(ptr %t156, ptr %a158, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t160 = icmp sge i64 %t159, 0 + br i1 %t160, label %remove.hit11230, label %remove.end11231 +remove.hit11230: + %t161 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t156, i32 0, i32 0 + %t162 = load ptr, ptr %t161 + %t163 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t162, i64 %t159 + %t164 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 1 + call void @finch_str_drop(ptr %t164) + %t165 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t163, i32 0, i32 2 + call void @finch.drop.S_lsp_Analysis(ptr %t165) + call void @finch_map_remove_at(ptr %t156, i64 %t159, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) + br label %remove.end11231 +remove.end11231: + %t166 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 4 + %t167 = load { ptr, i64, i64 }, ptr %a145 + store { ptr, i64, i64 } %t167, ptr %a168 + %t169 = call i64 @finch_map_find(ptr %t166, ptr %a168, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t170 = icmp sge i64 %t169, 0 + br i1 %t170, label %remove.hit11232, label %remove.end11233 +remove.hit11232: + %t171 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t166, i32 0, i32 0 + %t172 = load ptr, ptr %t171 + %t173 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t172, i64 %t169 + %t174 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 1 + call void @finch_str_drop(ptr %t174) + %t175 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t173, i32 0, i32 2 + call void @finch.drop.S_lsp_Analysis(ptr %t175) + call void @finch_map_remove_at(ptr %t166, i64 %t169, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64)) + br label %remove.end11233 +remove.end11233: + %t176 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t176, ptr %a177 + %t178 = load { ptr, i64, i64 }, ptr %a145 + %t179 = call { ptr, i64, i64 } @finch.lsp.pathToUri({ ptr, i64, i64 } %t178) + %t180 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t179) + store { ptr, i64, i64 } %t179, ptr %a181 + call void @finch_str_drop(ptr %a181) + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7249, i64 3, i64 0 }, %S.json.Json %t180) + store %S.json.Json %t180, ptr %a182 + call void @finch.drop.S_json_Json(ptr %a182) + %t183 = call %S.json.Json @finch.json.new_list() + call void @finch.json.Json.set(ptr %a177, { ptr, i64, i64 } { ptr @.str.7250, i64 11, i64 0 }, %S.json.Json %t183) + store %S.json.Json %t183, ptr %a184 + call void @finch.drop.S_json_Json(ptr %a184) + %t185 = load %S.json.Json, ptr %a177 + call void @finch.lsp.notify({ ptr, i64, i64 } { ptr @.str.7251, i64 31, i64 0 }, %S.json.Json %t185) + call void @finch.drop.S_json_Json(ptr %a177) + call void @finch_str_drop(ptr %a145) + br label %match.end11203 +match.next11227: + store { ptr, i64, i64 } %t10, ptr %a186 + store { ptr, i64, i64 } { ptr @.str.7252, i64 18, i64 0 }, ptr %a187 + %t188 = call i32 @finch_str_eq(ptr %a186, ptr %a187) + %t189 = icmp ne i32 %t188, 0 + br i1 %t189, label %match.arm11234, label %match.or11236 +match.or11236: + store { ptr, i64, i64 } %t10, ptr %a190 + store { ptr, i64, i64 } { ptr @.str.7253, i64 23, i64 0 }, ptr %a191 + %t192 = call i32 @finch_str_eq(ptr %a190, ptr %a191) + %t193 = icmp ne i32 %t192, 0 + br i1 %t193, label %match.arm11234, label %match.or11237 +match.or11237: + store { ptr, i64, i64 } %t10, ptr %a194 + store { ptr, i64, i64 } { ptr @.str.7254, i64 23, i64 0 }, ptr %a195 + %t196 = call i32 @finch_str_eq(ptr %a194, ptr %a195) + %t197 = icmp ne i32 %t196, 0 + br i1 %t197, label %match.arm11234, label %match.or11238 +match.or11238: + store { ptr, i64, i64 } %t10, ptr %a198 + store { ptr, i64, i64 } { ptr @.str.7255, i64 27, i64 0 }, ptr %a199 + %t200 = call i32 @finch_str_eq(ptr %a198, ptr %a199) + %t201 = icmp ne i32 %t200, 0 + br i1 %t201, label %match.arm11234, label %match.or11239 +match.or11239: + store { ptr, i64, i64 } %t10, ptr %a202 + store { ptr, i64, i64 } { ptr @.str.7256, i64 26, i64 0 }, ptr %a203 + %t204 = call i32 @finch_str_eq(ptr %a202, ptr %a203) + %t205 = icmp ne i32 %t204, 0 + br i1 %t205, label %match.arm11234, label %match.next11235 +match.arm11234: + %t206 = load %S.json.Json, ptr %a7 + %t207 = call { ptr, i64, i64 } @finch.lsp.pathOf(%S.json.Json %t206) + store { ptr, i64, i64 } %t207, ptr %a208 + %t209 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7257, i64 8, i64 0 }) + store %S.json.Json %t209, ptr %a210 + %t211 = call %S.json.Json @finch.json.Json.get(ptr %a210, { ptr, i64, i64 } { ptr @.str.7258, i64 4, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a210) + store %S.json.Json %t211, ptr %a212 + %t213 = call i64 @finch.json.Json.int_or(ptr %a212, i64 0) + call void @finch.drop.S_json_Json(ptr %a212) + %t214 = add i64 %t213, 1 + store i64 %t214, ptr %a215 + %t216 = call %S.json.Json @finch.json.Json.get(ptr %a7, { ptr, i64, i64 } { ptr @.str.7259, i64 8, i64 0 }) + store %S.json.Json %t216, ptr %a217 + %t218 = call %S.json.Json @finch.json.Json.get(ptr %a217, { ptr, i64, i64 } { ptr @.str.7260, i64 9, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a217) + store %S.json.Json %t218, ptr %a219 + %t220 = call i64 @finch.json.Json.int_or(ptr %a219, i64 0) + call void @finch.drop.S_json_Json(ptr %a219) + %t221 = add i64 %t220, 1 + store i64 %t221, ptr %a222 + %t223 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t224 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t224, ptr %a225 + %t226 = call i64 @finch_map_find(ptr %t223, ptr %a225, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t227 = icmp sge i64 %t226, 0 + %t228 = xor i1 %t227, true + br i1 %t228, label %then11240, label %endif11242 +then11240: + %t229 = load %S.json.Json, ptr %a9 + %t230 = call %S.json.Json @finch.json.new_null() + call void @finch.lsp.reply(%S.json.Json %t229, %S.json.Json %t230) + store %S.json.Json %t230, ptr %a231 + call void @finch.drop.S_json_Json(ptr %a231) + call void @finch_str_drop(ptr %a208) + call void @finch.drop.S_json_Json(ptr %a9) + call void @finch.drop.S_json_Json(ptr %a7) + call void @finch_str_drop(ptr %a5) + ret void +endif11242: + %t232 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 3 + %t233 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t233, ptr %a234 + %t235 = call i64 @finch_map_find(ptr %t232, ptr %a234, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t236 = icmp slt i64 %t235, 0 + br i1 %t236, label %map.missing11243, label %map.found11244 +map.missing11243: + store { ptr, i64, i64 } zeroinitializer, ptr %a237 + store { ptr, i64, i64 } %t233, ptr %a238 + call void @finch_buf_str(ptr %a237, ptr %a238, i32 1) + call void @finch_map_missing(ptr @.str.7261, i64 842, ptr %a237) + unreachable +map.found11244: + %t239 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t232, i32 0, i32 0 + %t240 = load ptr, ptr %t239 + %t241 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t240, i64 %t235 + %t242 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t241, i32 0, i32 2 + %t243 = load %S.lsp.Analysis, ptr %t242 + store %S.lsp.Analysis %t243, ptr %a244 + call void @finch.copy.S_lsp_Analysis(ptr %a245, ptr %a244) + %t246 = load %S.lsp.Analysis, ptr %a245 + store %S.lsp.Analysis %t246, ptr %a247 + store { ptr, i64, i64 } { ptr @.str.7262, i64 0, i64 0 }, ptr %a248 + %t249 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t250 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t250, ptr %a251 + %t252 = call i64 @finch_map_find(ptr %t249, ptr %a251, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t253 = icmp sge i64 %t252, 0 + br i1 %t253, label %then11245, label %endif11247 +then11245: + %t254 = getelementptr inbounds %S.lsp.Server, ptr %self, i32 0, i32 2 + %t255 = load { ptr, i64, i64 }, ptr %a208 + store { ptr, i64, i64 } %t255, ptr %a256 + %t257 = call i64 @finch_map_find(ptr %t254, ptr %a256, i64 ptrtoint (ptr getelementptr ({ i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr null, i32 1) to i64), i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64), i32 1) + %t258 = icmp slt i64 %t257, 0 + br i1 %t258, label %map.missing11248, label %map.found11249 +map.missing11248: + store { ptr, i64, i64 } zeroinitializer, ptr %a259 + store { ptr, i64, i64 } %t255, ptr %a260 + call void @finch_buf_str(ptr %a259, ptr %a260, i32 1) + call void @finch_map_missing(ptr @.str.7263, i64 845, ptr %a259) + unreachable +map.found11249: + %t261 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %t254, i32 0, i32 0 + %t262 = load ptr, ptr %t261 + %t263 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t262, i64 %t257 + %t264 = getelementptr inbounds { i64, { ptr, i64, i64 }, { ptr, i64, i64 } }, ptr %t263, i32 0, i32 2 + %t265 = load { ptr, i64, i64 }, ptr %t264 + store { ptr, i64, i64 } %t265, ptr %a266 + call void @finch_str_copy(ptr %a267, ptr %a266) + %t268 = load { ptr, i64, i64 }, ptr %a267 + %t269 = load { ptr, i64, i64 }, ptr %a248 + store { ptr, i64, i64 } %t268, ptr %a248 + store { ptr, i64, i64 } %t269, ptr %a270 + call void @finch_str_drop(ptr %a270) + br label %endif11247 +endif11247: + %t271 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t271, ptr %a272 + store { ptr, i64, i64 } { ptr @.str.7264, i64 18, i64 0 }, ptr %a273 + %t274 = call i32 @finch_str_eq(ptr %a272, ptr %a273) + %t275 = icmp ne i32 %t274, 0 + br i1 %t275, label %match.arm11251, label %match.next11252 +match.arm11251: + %t276 = load %S.json.Json, ptr %a9 + %t277 = load %S.lsp.Analysis, ptr %a247 + %t278 = load { ptr, i64, i64 }, ptr %a208 + %t279 = load i64, ptr %a215 + %t280 = load i64, ptr %a222 + %t281 = call %S.json.Json @finch.lsp.hoverAt(%S.lsp.Analysis %t277, { ptr, i64, i64 } %t278, i64 %t279, i64 %t280) + call void @finch.lsp.reply(%S.json.Json %t276, %S.json.Json %t281) + store %S.json.Json %t281, ptr %a282 + call void @finch.drop.S_json_Json(ptr %a282) + br label %match.end11250 +match.next11252: + store { ptr, i64, i64 } %t271, ptr %a283 + store { ptr, i64, i64 } { ptr @.str.7265, i64 23, i64 0 }, ptr %a284 + %t285 = call i32 @finch_str_eq(ptr %a283, ptr %a284) + %t286 = icmp ne i32 %t285, 0 + br i1 %t286, label %match.arm11253, label %match.next11254 +match.arm11253: + %t287 = load %S.json.Json, ptr %a9 + %t288 = load %S.lsp.Analysis, ptr %a247 + %t289 = load { ptr, i64, i64 }, ptr %a208 + %t290 = load i64, ptr %a215 + %t291 = load i64, ptr %a222 + %t292 = call %S.json.Json @finch.lsp.definitionAt(%S.lsp.Analysis %t288, { ptr, i64, i64 } %t289, i64 %t290, i64 %t291) + call void @finch.lsp.reply(%S.json.Json %t287, %S.json.Json %t292) + store %S.json.Json %t292, ptr %a293 + call void @finch.drop.S_json_Json(ptr %a293) + br label %match.end11250 +match.next11254: + store { ptr, i64, i64 } %t271, ptr %a294 + store { ptr, i64, i64 } { ptr @.str.7266, i64 23, i64 0 }, ptr %a295 + %t296 = call i32 @finch_str_eq(ptr %a294, ptr %a295) + %t297 = icmp ne i32 %t296, 0 + br i1 %t297, label %match.arm11255, label %match.next11256 +match.arm11255: + %t298 = load %S.json.Json, ptr %a9 + %t299 = load %S.lsp.Analysis, ptr %a247 + %t300 = load { ptr, i64, i64 }, ptr %a248 + %t301 = load { ptr, i64, i64 }, ptr %a208 + %t302 = load i64, ptr %a215 + %t303 = load i64, ptr %a222 + %t304 = call %S.json.Json @finch.lsp.completionAt(%S.lsp.Analysis %t299, { ptr, i64, i64 } %t300, { ptr, i64, i64 } %t301, i64 %t302, i64 %t303) + call void @finch.lsp.reply(%S.json.Json %t298, %S.json.Json %t304) + store %S.json.Json %t304, ptr %a305 + call void @finch.drop.S_json_Json(ptr %a305) + br label %match.end11250 +match.next11256: + store { ptr, i64, i64 } %t271, ptr %a306 + store { ptr, i64, i64 } { ptr @.str.7267, i64 27, i64 0 }, ptr %a307 + %t308 = call i32 @finch_str_eq(ptr %a306, ptr %a307) + %t309 = icmp ne i32 %t308, 0 + br i1 %t309, label %match.arm11257, label %match.next11258 +match.arm11257: + %t310 = load %S.json.Json, ptr %a9 + %t311 = load %S.lsp.Analysis, ptr %a247 + %t312 = load { ptr, i64, i64 }, ptr %a208 + %t313 = call %S.json.Json @finch.lsp.symbolsOf(%S.lsp.Analysis %t311, { ptr, i64, i64 } %t312) + call void @finch.lsp.reply(%S.json.Json %t310, %S.json.Json %t313) + store %S.json.Json %t313, ptr %a314 + call void @finch.drop.S_json_Json(ptr %a314) + br label %match.end11250 +match.next11258: + br label %match.arm11259 +match.arm11259: + %t315 = load %S.json.Json, ptr %a9 + %t316 = load %S.lsp.Analysis, ptr %a247 + %t317 = load { ptr, i64, i64 }, ptr %a248 + %t318 = load { ptr, i64, i64 }, ptr %a208 + %t319 = load i64, ptr %a215 + %t320 = load i64, ptr %a222 + %t321 = call %S.json.Json @finch.lsp.signatureAt(%S.lsp.Analysis %t316, { ptr, i64, i64 } %t317, { ptr, i64, i64 } %t318, i64 %t319, i64 %t320) + call void @finch.lsp.reply(%S.json.Json %t315, %S.json.Json %t321) + store %S.json.Json %t321, ptr %a322 + call void @finch.drop.S_json_Json(ptr %a322) + br label %match.end11250 +match.end11250: + call void @finch_str_drop(ptr %a248) + call void @finch.drop.S_lsp_Analysis(ptr %a247) + call void @finch_str_drop(ptr %a208) + br label %match.end11203 +match.next11235: + br label %match.arm11261 +match.arm11261: + %t323 = getelementptr inbounds %S.json.Json, ptr %a9, i32 0, i32 0 + %t324 = load i32, ptr %t323 + %t325 = icmp ne i32 %t324, 0 + br i1 %t325, label %then11263, label %endif11265 +then11263: + %t326 = load %S.json.Json, ptr %a9 + %t327 = call %S.json.Json @finch.json.new_null() + call void @finch.lsp.reply(%S.json.Json %t326, %S.json.Json %t327) + store %S.json.Json %t327, ptr %a328 + call void @finch.drop.S_json_Json(ptr %a328) + br label %endif11265 +endif11265: + br label %match.end11203 +match.end11203: + call void @finch.drop.S_json_Json(ptr %a9) + call void @finch.drop.S_json_Json(ptr %a7) + call void @finch_str_drop(ptr %a5) + ret void +} + +define internal void @finch.drop.map_str_S_lsp_Analysis(ptr %a) { +entry: + %a3 = alloca i64, align 16 + %t1 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 2 + %t2 = load i64, ptr %t1 + store i64 0, ptr %a3 + br label %n.cond11271 +n.cond11271: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, %t2 + br i1 %t5, label %n.body11272, label %n.end11273 +n.body11272: + %t6 = getelementptr inbounds { ptr, i64, i64, i64, ptr, i64, i64 }, ptr %a, i32 0, i32 0 + %t7 = load ptr, ptr %t6 + %t8 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t7, i64 %t4 + %t9 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 0 + %t10 = load i64, ptr %t9 + %t11 = icmp ne i64 %t10, 0 + br i1 %t11, label %entry.live11274, label %entry.next11275 +entry.live11274: + %t12 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 1 + call void @finch_str_drop(ptr %t12) + %t13 = getelementptr inbounds { i64, { ptr, i64, i64 }, %S.lsp.Analysis }, ptr %t8, i32 0, i32 2 + call void @finch.drop.S_lsp_Analysis(ptr %t13) + br label %entry.next11275 +entry.next11275: + %t14 = load i64, ptr %a3 + %t15 = add i64 %t14, 1 + store i64 %t15, ptr %a3 + br label %n.cond11271 +n.end11273: + call void @finch_map_free(ptr %a) + ret void +} + +define internal void @finch.drop.S_lsp_Server(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + %t2 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 1 + call void @finch_str_drop(ptr %t2) + %t3 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 2 + call void @finch.drop.map_str_str(ptr %t3) + %t4 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 3 + call void @finch.drop.map_str_S_lsp_Analysis(ptr %t4) + %t5 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 4 + call void @finch.drop.map_str_S_lsp_Analysis(ptr %t5) + %t6 = getelementptr inbounds %S.lsp.Server, ptr %a, i32 0, i32 5 + call void @finch.drop.arr_str(ptr %t6) + ret void +} + +define internal i64 @finch.lsp.run({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca %S.lsp.Server, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + call void @finch.host.binaryStdio() + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.lsp.Server zeroinitializer, { ptr, i64, i64 } %t5, 0 + %t7 = call { ptr, i64, i64 } @finch.host.tempDir() + store { ptr, i64, i64 } %t7, ptr %a9 + store { ptr, i64, i64 } { ptr @.str.7268, i64 11, i64 0 }, ptr %a10 + call void @finch_str_concat(ptr %a8, ptr %a9, ptr %a10) + store { ptr, i64, i64 } %t7, ptr %a11 + call void @finch_str_drop(ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a8 + %t13 = call i64 @finch.host.pid() + call void @finch_str_from_int(ptr %a14, i64 %t13) + %t15 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t12, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + store { ptr, i64, i64 } %t12, ptr %a19 + call void @finch_str_drop(ptr %a19) + store { ptr, i64, i64 } %t15, ptr %a20 + call void @finch_str_drop(ptr %a20) + %t21 = load { ptr, i64, i64 }, ptr %a16 + %t22 = insertvalue %S.lsp.Server %t6, { ptr, i64, i64 } %t21, 1 + store %S.lsp.Server %t22, ptr %a23 + br label %while.cond11266 +while.cond11266: + br label %while.body11267 +while.body11267: + %t24 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.lsp.readMessage() + %t25 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 0 + %t26 = xor i1 %t25, true + %t27 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 2 + %t28 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, 1 + br i1 %t26, label %or.failed11269, label %or.ok11270 +or.failed11269: + store { ptr, i64, i64 } %t27, ptr %a29 + call void @finch_str_drop(ptr %a29) + br label %while.end11268 +or.ok11270: + store %S.json.Json %t28, ptr %a30 + %t31 = load %S.json.Json, ptr %a30 + call void @finch.lsp.Server.answer(ptr %a23, %S.json.Json %t31) + call void @finch.drop.S_json_Json(ptr %a30) + br label %while.cond11266 +while.end11268: + %t32 = getelementptr inbounds %S.lsp.Server, ptr %a23, i32 0, i32 1 + %t33 = load { ptr, i64, i64 }, ptr %t32 + call void @finch.host.removeTree({ ptr, i64, i64 } %t33) + call void @finch.drop.S_lsp_Server(ptr %a23) + ret i64 0 +} + +define internal %S.json.Json @finch.json.new_null() { +entry: + + %t1 = insertvalue %S.json.Json zeroinitializer, i32 0, 0 + ret %S.json.Json %t1 +} + +define internal %S.json.Json @finch.json.new_bool(i1 %p0) { +entry: + %a1 = alloca i1, align 16 + store i1 %p0, ptr %a1 + %t2 = insertvalue %S.json.Json zeroinitializer, i32 1, 0 + %t3 = load i1, ptr %a1 + %t4 = insertvalue %S.json.Json %t2, i1 %t3, 1 + ret %S.json.Json %t4 +} + +define internal %S.json.Json @finch.json.new_number(double %p0) { +entry: + %a1 = alloca double, align 16 + store double %p0, ptr %a1 + %t2 = insertvalue %S.json.Json zeroinitializer, i32 2, 0 + %t3 = load double, ptr %a1 + %t4 = insertvalue %S.json.Json %t2, double %t3, 2 + ret %S.json.Json %t4 +} + +define internal %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = insertvalue %S.json.Json zeroinitializer, i32 3, 0 + %t3 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t3, ptr %a4 + call void @finch_str_copy(ptr %a5, ptr %a4) + %t6 = load { ptr, i64, i64 }, ptr %a5 + %t7 = insertvalue %S.json.Json %t2, { ptr, i64, i64 } %t6, 3 + ret %S.json.Json %t7 +} + +define internal %S.json.Json @finch.json.new_list() { +entry: + + %t1 = insertvalue %S.json.Json zeroinitializer, i32 4, 0 + ret %S.json.Json %t1 +} + +define internal %S.json.Json @finch.json.new_object() { +entry: + + %t1 = insertvalue %S.json.Json zeroinitializer, i32 5, 0 + ret %S.json.Json %t1 +} + +define internal i1 @finch.json.Json.is_null(ptr %self) { +entry: + + %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t2 = load i32, ptr %t1 + %t3 = icmp eq i32 %t2, 0 + ret i1 %t3 +} + +define internal i64 @finch.json.Json.len(ptr %self) { +entry: + + %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t2 = load i32, ptr %t1 + %t3 = icmp eq i32 %t2, 4 + br i1 %t3, label %match.arm11277, label %match.or11279 +match.or11279: + %t4 = icmp eq i32 %t2, 5 + br i1 %t4, label %match.arm11277, label %match.next11278 +match.arm11277: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + br label %match.from11280 +match.from11280: + br label %match.end11276 +match.next11278: + %t8 = icmp eq i32 %t2, 3 + br i1 %t8, label %match.arm11281, label %match.next11282 +match.arm11281: + %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load i64, ptr %t10 + br label %match.from11283 +match.from11283: + br label %match.end11276 +match.next11282: + br label %match.arm11284 +match.arm11284: + br label %match.from11286 +match.from11286: + br label %match.end11276 +match.end11276: + %t12 = phi i64 [ %t7, %match.from11280 ], [ %t11, %match.from11283 ], [ 0, %match.from11286 ] + ret i64 %t12 +} + +define internal i1 @finch.json.Json.has(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca i64, align 16 + %a11 = alloca i64, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 5 + br label %logic.from11287 +logic.from11287: + br i1 %t4, label %logic.rhs11288, label %logic.end11289 +logic.rhs11288: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a8 + %t9 = load i64, ptr %t6 + %t10 = load ptr, ptr %t5 + store i64 0, ptr %a11 + br label %find.cond11290 +find.cond11290: + %t12 = load i64, ptr %a11 + %t13 = icmp slt i64 %t12, %t9 + br i1 %t13, label %find.body11291, label %find.end11294 +find.body11291: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t12 + %t15 = load { ptr, i64, i64 }, ptr %t14 + store { ptr, i64, i64 } %t15, ptr %a16 + store { ptr, i64, i64 } %t7, ptr %a17 + %t18 = call i32 @finch_str_eq(ptr %a16, ptr %a17) + %t19 = icmp ne i32 %t18, 0 + br i1 %t19, label %find.hit11292, label %find.next11293 +find.hit11292: + store i64 %t12, ptr %a8 + br label %find.end11294 +find.next11293: + %t20 = add i64 %t12, 1 + store i64 %t20, ptr %a11 + br label %find.cond11290 +find.end11294: + %t21 = load i64, ptr %a8 + %t22 = icmp sge i64 %t21, 0 + br label %logic.rend11295 +logic.rend11295: + br label %logic.end11289 +logic.end11289: + %t23 = phi i1 [ false, %logic.from11287 ], [ %t22, %logic.rend11295 ] + ret i1 %t23 +} + +define internal void @finch.copy.arr_S_json_Json(ptr %dst, ptr %src) { +entry: + %a5 = alloca i64, align 16 + call void @finch_arr_clone_raw(ptr %dst, ptr %src, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) + %t1 = load ptr, ptr %dst + %t2 = load ptr, ptr %src + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %src, i32 0, i32 1 + %t4 = load i64, ptr %t3 + store i64 0, ptr %a5 + br label %n.cond11309 +n.cond11309: + %t6 = load i64, ptr %a5 + %t7 = icmp slt i64 %t6, %t4 + br i1 %t7, label %n.body11310, label %n.end11311 +n.body11310: + %t8 = getelementptr inbounds %S.json.Json, ptr %t1, i64 %t6 + %t9 = getelementptr inbounds %S.json.Json, ptr %t2, i64 %t6 + call void @finch.copy.S_json_Json(ptr %t8, ptr %t9) + %t10 = load i64, ptr %a5 + %t11 = add i64 %t10, 1 + store i64 %t11, ptr %a5 + br label %n.cond11309 +n.end11311: + ret void +} + +define internal void @finch.copy.S_json_Json(ptr %dst, ptr %src) { +entry: + + %t1 = load %S.json.Json, ptr %src + store %S.json.Json %t1, ptr %dst + %t2 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 3 + %t3 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 3 + call void @finch_str_copy(ptr %t2, ptr %t3) + %t4 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 4 + %t5 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 4 + call void @finch.copy.arr_S_json_Json(ptr %t4, ptr %t5) + %t6 = getelementptr inbounds %S.json.Json, ptr %dst, i32 0, i32 5 + %t7 = getelementptr inbounds %S.json.Json, ptr %src, i32 0, i32 5 + call void @finch.copy.arr_str(ptr %t6, ptr %t7) + ret void +} + +define internal %S.json.Json @finch.json.Json.get(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a12 = alloca i64, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca i64, align 16 + %a35 = alloca %S.json.Json, align 16 + %a36 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp ne i32 %t3, 5 + br i1 %t4, label %then11296, label %endif11298 +then11296: + %t5 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t5 +endif11298: + %t6 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %t6, i32 0, i32 1 + %t8 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a9 + %t10 = load i64, ptr %t7 + %t11 = load ptr, ptr %t6 + store i64 0, ptr %a12 + br label %find.cond11299 +find.cond11299: + %t13 = load i64, ptr %a12 + %t14 = icmp slt i64 %t13, %t10 + br i1 %t14, label %find.body11300, label %find.end11303 +find.body11300: + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t11, i64 %t13 + %t16 = load { ptr, i64, i64 }, ptr %t15 + store { ptr, i64, i64 } %t16, ptr %a17 + store { ptr, i64, i64 } %t8, ptr %a18 + %t19 = call i32 @finch_str_eq(ptr %a17, ptr %a18) + %t20 = icmp ne i32 %t19, 0 + br i1 %t20, label %find.hit11301, label %find.next11302 +find.hit11301: + store i64 %t13, ptr %a9 + br label %find.end11303 +find.next11302: + %t21 = add i64 %t13, 1 + store i64 %t21, ptr %a12 + br label %find.cond11299 +find.end11303: + %t22 = load i64, ptr %a9 + store i64 %t22, ptr %a23 + %t24 = load i64, ptr %a23 + %t25 = icmp slt i64 %t24, 0 + br i1 %t25, label %then11304, label %endif11306 +then11304: + %t26 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t26 +endif11306: + %t27 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t28 = load i64, ptr %a23 + %t29 = load { ptr, i64, i64 }, ptr %t27 + %t30 = extractvalue { ptr, i64, i64 } %t29, 1 + %t31 = icmp uge i64 %t28, %t30 + br i1 %t31, label %range11307, label %inrange11308 +range11307: + call void @finch_panic_index(ptr @.str.7269, i64 84, i64 %t28, i64 %t30) + unreachable +inrange11308: + %t32 = extractvalue { ptr, i64, i64 } %t29, 0 + %t33 = getelementptr inbounds %S.json.Json, ptr %t32, i64 %t28 + %t34 = load %S.json.Json, ptr %t33 + store %S.json.Json %t34, ptr %a35 + call void @finch.copy.S_json_Json(ptr %a36, ptr %a35) + %t37 = load %S.json.Json, ptr %a36 + ret %S.json.Json %t37 +} + +define internal %S.json.Json @finch.json.Json.at(ptr %self, i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a23 = alloca %S.json.Json, align 16 + %a24 = alloca %S.json.Json, align 16 + store i64 %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp ne i32 %t3, 4 + br label %logic.from11312 +logic.from11312: + br i1 %t4, label %logic.end11314, label %logic.rhs11313 +logic.rhs11313: + %t5 = load i64, ptr %a1 + %t6 = icmp slt i64 %t5, 0 + br label %logic.rend11315 +logic.rend11315: + br label %logic.end11314 +logic.end11314: + %t7 = phi i1 [ true, %logic.from11312 ], [ %t6, %logic.rend11315 ] + br label %logic.from11316 +logic.from11316: + br i1 %t7, label %logic.end11318, label %logic.rhs11317 +logic.rhs11317: + %t8 = load i64, ptr %a1 + %t9 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = icmp sge i64 %t8, %t11 + br label %logic.rend11319 +logic.rend11319: + br label %logic.end11318 +logic.end11318: + %t13 = phi i1 [ true, %logic.from11316 ], [ %t12, %logic.rend11319 ] + br i1 %t13, label %then11320, label %endif11322 +then11320: + %t14 = call %S.json.Json @finch.json.new_null() + ret %S.json.Json %t14 +endif11322: + %t15 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t16 = load i64, ptr %a1 + %t17 = load { ptr, i64, i64 }, ptr %t15 + %t18 = extractvalue { ptr, i64, i64 } %t17, 1 + %t19 = icmp uge i64 %t16, %t18 + br i1 %t19, label %range11323, label %inrange11324 +range11323: + call void @finch_panic_index(ptr @.str.7270, i64 92, i64 %t16, i64 %t18) + unreachable +inrange11324: + %t20 = extractvalue { ptr, i64, i64 } %t17, 0 + %t21 = getelementptr inbounds %S.json.Json, ptr %t20, i64 %t16 + %t22 = load %S.json.Json, ptr %t21 + store %S.json.Json %t22, ptr %a23 + call void @finch.copy.S_json_Json(ptr %a24, ptr %a23) + %t25 = load %S.json.Json, ptr %a24 + ret %S.json.Json %t25 +} + +define internal { ptr, i64, i64 } @finch.json.Json.str_or(ptr %self, { ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 3 + br i1 %t4, label %then11325, label %endif11327 +then11325: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 3 + %t6 = load { ptr, i64, i64 }, ptr %t5 + store { ptr, i64, i64 } %t6, ptr %a7 + call void @finch_str_copy(ptr %a8, ptr %a7) + %t9 = load { ptr, i64, i64 }, ptr %a8 + ret { ptr, i64, i64 } %t9 +endif11327: + %t10 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t10, ptr %a11 + call void @finch_str_copy(ptr %a12, ptr %a11) + %t13 = load { ptr, i64, i64 }, ptr %a12 + ret { ptr, i64, i64 } %t13 +} + +define internal double @finch.json.Json.float_or(ptr %self, double %p0) { +entry: + %a1 = alloca double, align 16 + store double %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 2 + br i1 %t4, label %then11328, label %endif11330 +then11328: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 + %t6 = load double, ptr %t5 + ret double %t6 +endif11330: + %t7 = load double, ptr %a1 + ret double %t7 +} + +define internal i64 @finch.json.Json.int_or(ptr %self, i64 %p0) { +entry: + %a1 = alloca i64, align 16 + store i64 %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 2 + br i1 %t4, label %then11331, label %endif11333 +then11331: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 2 + %t6 = load double, ptr %t5 + %t7 = fptosi double %t6 to i64 + ret i64 %t7 +endif11333: + %t8 = load i64, ptr %a1 + ret i64 %t8 +} + +define internal i1 @finch.json.Json.bool_or(ptr %self, i1 %p0) { +entry: + %a1 = alloca i1, align 16 + store i1 %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 0 + %t3 = load i32, ptr %t2 + %t4 = icmp eq i32 %t3, 1 + br i1 %t4, label %then11334, label %endif11336 +then11334: + %t5 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 1 + %t6 = load i1, ptr %t5 + ret i1 %t6 +endif11336: + %t7 = load i1, ptr %a1 + ret i1 %t7 +} + +define internal { ptr, i64, i64 } @finch.json.Json.names(ptr %self) { +entry: + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %t1 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t2 = load { ptr, i64, i64 }, ptr %t1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch.copy.arr_str(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + ret { ptr, i64, i64 } %t5 +} + +define internal void @finch.json.Json.push(ptr %self, %S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a5 = alloca %S.json.Json, align 16 + %a6 = alloca %S.json.Json, align 16 + store %S.json.Json %p0, ptr %a1 + %t2 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t3 = getelementptr inbounds { ptr, i64, i64 }, ptr %t2, i32 0, i32 1 + %t4 = load %S.json.Json, ptr %a1 + store %S.json.Json %t4, ptr %a5 + call void @finch.copy.S_json_Json(ptr %a6, ptr %a5) + %t7 = load %S.json.Json, ptr %a6 + %t8 = load i64, ptr %t3 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %t2, i64 %t9, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %t2 + %t11 = getelementptr inbounds %S.json.Json, ptr %t10, i64 %t8 + store %S.json.Json %t7, ptr %t11 + store i64 %t9, ptr %t3 + ret void +} + +define internal void @finch.json.Json.set(ptr %self, { ptr, i64, i64 } %p0, %S.json.Json %p1) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a2 = alloca %S.json.Json, align 16 + %a6 = alloca i64, align 16 + %a9 = alloca i64, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca i64, align 16 + %a31 = alloca %S.json.Json, align 16 + %a32 = alloca %S.json.Json, align 16 + %a35 = alloca %S.json.Json, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca %S.json.Json, align 16 + %a50 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + store %S.json.Json %p1, ptr %a2 + %t3 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i32 0, i32 1 + %t5 = load { ptr, i64, i64 }, ptr %a1 + store i64 -1, ptr %a6 + %t7 = load i64, ptr %t4 + %t8 = load ptr, ptr %t3 + store i64 0, ptr %a9 + br label %find.cond11337 +find.cond11337: + %t10 = load i64, ptr %a9 + %t11 = icmp slt i64 %t10, %t7 + br i1 %t11, label %find.body11338, label %find.end11341 +find.body11338: + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i64 %t10 + %t13 = load { ptr, i64, i64 }, ptr %t12 + store { ptr, i64, i64 } %t13, ptr %a14 + store { ptr, i64, i64 } %t5, ptr %a15 + %t16 = call i32 @finch_str_eq(ptr %a14, ptr %a15) + %t17 = icmp ne i32 %t16, 0 + br i1 %t17, label %find.hit11339, label %find.next11340 +find.hit11339: + store i64 %t10, ptr %a6 + br label %find.end11341 +find.next11340: + %t18 = add i64 %t10, 1 + store i64 %t18, ptr %a9 + br label %find.cond11337 +find.end11341: + %t19 = load i64, ptr %a6 + store i64 %t19, ptr %a20 + %t21 = load i64, ptr %a20 + %t22 = icmp sge i64 %t21, 0 + br i1 %t22, label %then11342, label %endif11344 +then11342: + %t23 = load %S.json.Json, ptr %a2 + %t24 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t25 = load i64, ptr %a20 + %t26 = load { ptr, i64, i64 }, ptr %t24 + %t27 = extractvalue { ptr, i64, i64 } %t26, 1 + %t28 = icmp uge i64 %t25, %t27 + br i1 %t28, label %range11345, label %inrange11346 +range11345: + call void @finch_panic_index(ptr @.str.7271, i64 140, i64 %t25, i64 %t27) + unreachable +inrange11346: + %t29 = extractvalue { ptr, i64, i64 } %t26, 0 + %t30 = getelementptr inbounds %S.json.Json, ptr %t29, i64 %t25 + store %S.json.Json %t23, ptr %a31 + call void @finch.copy.S_json_Json(ptr %a32, ptr %a31) + %t33 = load %S.json.Json, ptr %a32 + %t34 = load %S.json.Json, ptr %t30 + store %S.json.Json %t33, ptr %t30 + store %S.json.Json %t34, ptr %a35 + call void @finch.drop.S_json_Json(ptr %a35) + ret void +endif11344: + %t36 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 5 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %t36, i32 0, i32 1 + %t38 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t38, ptr %a39 + call void @finch_str_copy(ptr %a40, ptr %a39) + %t41 = load { ptr, i64, i64 }, ptr %a40 + %t42 = load i64, ptr %t37 + %t43 = add i64 %t42, 1 + call void @finch_arr_reserve(ptr %t36, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t44 = load ptr, ptr %t36 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 + store { ptr, i64, i64 } %t41, ptr %t45 + store i64 %t43, ptr %t37 + %t46 = getelementptr inbounds %S.json.Json, ptr %self, i32 0, i32 4 + %t47 = getelementptr inbounds { ptr, i64, i64 }, ptr %t46, i32 0, i32 1 + %t48 = load %S.json.Json, ptr %a2 + store %S.json.Json %t48, ptr %a49 + call void @finch.copy.S_json_Json(ptr %a50, ptr %a49) + %t51 = load %S.json.Json, ptr %a50 + %t52 = load i64, ptr %t47 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %t46, i64 %t53, i64 ptrtoint (ptr getelementptr (%S.json.Json, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %t46 + %t55 = getelementptr inbounds %S.json.Json, ptr %t54, i64 %t52 + store %S.json.Json %t51, ptr %t55 + store i64 %t53, ptr %t47 + ret void +} + +define internal { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca i64, align 16 + %a17 = alloca i8, align 16 + %a20 = alloca i64, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a71 = alloca { ptr, i64, i64 }, align 16 + %a72 = alloca { ptr, i64, i64 }, align 16 + %a73 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = mul i64 1, ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64) + %t3 = call ptr @finch_alloc(i64 %t2) + %t4 = getelementptr inbounds { ptr, i64, i64 }, ptr %t3, i64 0 + store { ptr, i64, i64 } { ptr @.str.7272, i64 1, i64 0 }, ptr %t4 + %t5 = insertvalue { ptr, i64, i64 } undef, ptr %t3, 0 + %t6 = insertvalue { ptr, i64, i64 } %t5, i64 1, 1 + %t7 = insertvalue { ptr, i64, i64 } %t6, i64 1, 2 + store { ptr, i64, i64 } %t7, ptr %a8 + store i64 0, ptr %a9 + br label %each.cond11347 +each.cond11347: + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = load i64, ptr %a9 + %t13 = icmp slt i64 %t12, %t11 + br i1 %t13, label %each.body11348, label %each.end11350 +each.body11348: + %t14 = load ptr, ptr %a1 + %t15 = getelementptr inbounds i8, ptr %t14, i64 %t12 + %t16 = load i8, ptr %t15 + store i8 %t16, ptr %a17 + %t18 = load i8, ptr %a17 + %t19 = zext i8 %t18 to i64 + store i64 %t19, ptr %a20 + %t21 = load i8, ptr %a17 + %t22 = icmp eq i8 %t21, 34 + br i1 %t22, label %then11351, label %else11352 +then11351: + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t24 = load i64, ptr %t23 + %t25 = add i64 %t24, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t25, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t26 = load ptr, ptr %a8 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %t26, i64 %t24 + store { ptr, i64, i64 } { ptr @.str.7273, i64 2, i64 0 }, ptr %t27 + store i64 %t25, ptr %t23 + br label %endif11353 +else11352: + %t28 = load i8, ptr %a17 + %t29 = icmp eq i8 %t28, 92 + br i1 %t29, label %then11354, label %else11355 +then11354: + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %a8 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } { ptr @.str.7274, i64 2, i64 0 }, ptr %t34 + store i64 %t32, ptr %t30 + br label %endif11356 +else11355: + %t35 = load i8, ptr %a17 + %t36 = icmp eq i8 %t35, 10 + br i1 %t36, label %then11357, label %else11358 +then11357: + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t40 = load ptr, ptr %a8 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 + store { ptr, i64, i64 } { ptr @.str.7275, i64 2, i64 0 }, ptr %t41 + store i64 %t39, ptr %t37 + br label %endif11359 +else11358: + %t42 = load i8, ptr %a17 + %t43 = icmp eq i8 %t42, 13 + br i1 %t43, label %then11360, label %else11361 +then11360: + %t44 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = add i64 %t45, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t46, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t47 = load ptr, ptr %a8 + %t48 = getelementptr inbounds { ptr, i64, i64 }, ptr %t47, i64 %t45 + store { ptr, i64, i64 } { ptr @.str.7276, i64 2, i64 0 }, ptr %t48 + store i64 %t46, ptr %t44 + br label %endif11362 +else11361: + %t49 = load i8, ptr %a17 + %t50 = icmp eq i8 %t49, 9 + br i1 %t50, label %then11363, label %else11364 +then11363: + %t51 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t52 = load i64, ptr %t51 + %t53 = add i64 %t52, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t53, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t54 = load ptr, ptr %a8 + %t55 = getelementptr inbounds { ptr, i64, i64 }, ptr %t54, i64 %t52 + store { ptr, i64, i64 } { ptr @.str.7277, i64 2, i64 0 }, ptr %t55 + store i64 %t53, ptr %t51 + br label %endif11365 +else11364: + %t56 = load i64, ptr %a20 + %t57 = icmp slt i64 %t56, 32 + br i1 %t57, label %then11366, label %else11367 +then11366: + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t59 = load i64, ptr %a20 + %t60 = sdiv i64 %t59, 16 + %t61 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t60) + store { ptr, i64, i64 } { ptr @.str.7278, i64 4, i64 0 }, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t61, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + %t67 = load i64, ptr %a20 + %t68 = srem i64 %t67, 16 + %t69 = call { ptr, i64, i64 } @finch.json.hexdigit(i64 %t68) + store { ptr, i64, i64 } %t66, ptr %a71 + store { ptr, i64, i64 } %t69, ptr %a72 + call void @finch_str_concat(ptr %a70, ptr %a71, ptr %a72) + store { ptr, i64, i64 } %t66, ptr %a73 + call void @finch_str_drop(ptr %a73) + store { ptr, i64, i64 } %t69, ptr %a74 + call void @finch_str_drop(ptr %a74) + %t75 = load { ptr, i64, i64 }, ptr %a70 + %t76 = load i64, ptr %t58 + %t77 = add i64 %t76, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t77, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t78 = load ptr, ptr %a8 + %t79 = getelementptr inbounds { ptr, i64, i64 }, ptr %t78, i64 %t76 + store { ptr, i64, i64 } %t75, ptr %t79 + store i64 %t77, ptr %t58 + br label %endif11368 +else11367: + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t81 = load i8, ptr %a17 + call void @finch_str_from_char(ptr %a82, i8 signext %t81) + %t83 = load { ptr, i64, i64 }, ptr %a82 + %t84 = load i64, ptr %t80 + %t85 = add i64 %t84, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t85, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t86 = load ptr, ptr %a8 + %t87 = getelementptr inbounds { ptr, i64, i64 }, ptr %t86, i64 %t84 + store { ptr, i64, i64 } %t83, ptr %t87 + store i64 %t85, ptr %t80 + br label %endif11368 +endif11368: + br label %endif11365 +endif11365: + br label %endif11362 +endif11362: + br label %endif11359 +endif11359: + br label %endif11356 +endif11356: + br label %endif11353 +endif11353: + br label %each.step11349 +each.step11349: + %t88 = load i64, ptr %a9 + %t89 = add i64 %t88, 1 + store i64 %t89, ptr %a9 + br label %each.cond11347 +each.end11350: + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + %t91 = load i64, ptr %t90 + %t92 = add i64 %t91, 1 + call void @finch_arr_reserve(ptr %a8, i64 %t92, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t93 = load ptr, ptr %a8 + %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i64 %t91 + store { ptr, i64, i64 } { ptr @.str.7279, i64 1, i64 0 }, ptr %t94 + store i64 %t92, ptr %t90 + %t95 = getelementptr inbounds { ptr, i64, i64 }, ptr %a8, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7280, i64 0, i64 0 }, ptr %a96 + call void @finch_str_join(ptr %a97, ptr %a8, ptr %a96) + %t98 = load { ptr, i64, i64 }, ptr %a97 + call void @finch.drop.arr_str(ptr %a8) + ret { ptr, i64, i64 } %t98 +} + +define internal { ptr, i64, i64 } @finch.json.hexdigit(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store { ptr, i64, i64 } { ptr @.str.7281, i64 16, i64 0 }, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = extractvalue { ptr, i64, i64 } %t4, 1 + %t6 = icmp uge i64 %t3, %t5 + br i1 %t6, label %range11369, label %inrange11370 +range11369: + call void @finch_panic_index(ptr @.str.7282, i64 175, i64 %t3, i64 %t5) + unreachable +inrange11370: + %t7 = extractvalue { ptr, i64, i64 } %t4, 0 + %t8 = getelementptr inbounds i8, ptr %t7, i64 %t3 + %t9 = load i8, ptr %t8 + call void @finch_str_from_char(ptr %a10, i8 signext %t9) + %t11 = load { ptr, i64, i64 }, ptr %a10 + call void @finch_str_drop(ptr %a2) + ret { ptr, i64, i64 } %t11 +} + +define internal { ptr, i64, i64 } @finch.json.number_text(double %p0) { +entry: + %a1 = alloca double, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store double %p0, ptr %a1 + %t2 = load double, ptr %a1 + %t3 = load double, ptr %a1 + %t4 = fptosi double %t3 to i64 + %t5 = sitofp i64 %t4 to double + %t6 = fcmp oeq double %t2, %t5 + br label %logic.from11371 +logic.from11371: + br i1 %t6, label %logic.rhs11372, label %logic.end11373 +logic.rhs11372: + %t7 = load double, ptr %a1 + %t8 = fneg double 1000000000000000.0 + %t9 = fcmp ogt double %t7, %t8 + br label %logic.rend11374 +logic.rend11374: + br label %logic.end11373 +logic.end11373: + %t10 = phi i1 [ false, %logic.from11371 ], [ %t9, %logic.rend11374 ] + br label %logic.from11375 +logic.from11375: + br i1 %t10, label %logic.rhs11376, label %logic.end11377 +logic.rhs11376: + %t11 = load double, ptr %a1 + %t12 = fcmp olt double %t11, 1000000000000000.0 + br label %logic.rend11378 +logic.rend11378: + br label %logic.end11377 +logic.end11377: + %t13 = phi i1 [ false, %logic.from11375 ], [ %t12, %logic.rend11378 ] + br i1 %t13, label %then11379, label %endif11381 +then11379: + %t14 = load double, ptr %a1 + %t15 = fptosi double %t14 to i64 + call void @finch_str_from_int(ptr %a16, i64 %t15) + %t17 = load { ptr, i64, i64 }, ptr %a16 + ret { ptr, i64, i64 } %t17 +endif11381: + %t18 = load double, ptr %a1 + call void @finch_str_from_float(ptr %a19, double %t18) + %t20 = load { ptr, i64, i64 }, ptr %a19 + ret { ptr, i64, i64 } %t20 +} + +define internal void @finch.json.write(%S.json.Json %p0, { ptr, i64, i64 } %p1, { ptr, i64, i64 } %p2, ptr %p3) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca ptr, align 16 + %a5 = alloca { ptr, i64, i64 }, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a8 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a17 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a23 = alloca { ptr, i64, i64 }, align 16 + %a96 = alloca { ptr, i64, i64 }, align 16 + %a97 = alloca { ptr, i64, i64 }, align 16 + %a98 = alloca { ptr, i64, i64 }, align 16 + %a105 = alloca i64, align 16 + %a113 = alloca i64, align 16 + %a114 = alloca %S.json.Json, align 16 + %a123 = alloca { ptr, i64, i64 }, align 16 + %a124 = alloca { ptr, i64, i64 }, align 16 + %a125 = alloca { ptr, i64, i64 }, align 16 + %a136 = alloca { ptr, i64, i64 }, align 16 + %a137 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a156 = alloca { ptr, i64, i64 }, align 16 + %a157 = alloca { ptr, i64, i64 }, align 16 + %a159 = alloca { ptr, i64, i64 }, align 16 + %a160 = alloca { ptr, i64, i64 }, align 16 + %a161 = alloca { ptr, i64, i64 }, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + %a186 = alloca { ptr, i64, i64 }, align 16 + %a187 = alloca { ptr, i64, i64 }, align 16 + %a188 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca i64, align 16 + %a203 = alloca i64, align 16 + %a204 = alloca %S.json.Json, align 16 + %a213 = alloca { ptr, i64, i64 }, align 16 + %a214 = alloca { ptr, i64, i64 }, align 16 + %a215 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a238 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a243 = alloca { ptr, i64, i64 }, align 16 + %a244 = alloca { ptr, i64, i64 }, align 16 + %a262 = alloca { ptr, i64, i64 }, align 16 + %a263 = alloca { ptr, i64, i64 }, align 16 + %a264 = alloca { ptr, i64, i64 }, align 16 + %a266 = alloca { ptr, i64, i64 }, align 16 + %a267 = alloca { ptr, i64, i64 }, align 16 + %a268 = alloca { ptr, i64, i64 }, align 16 + %a269 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + store { ptr, i64, i64 } %p2, ptr %a3 + store ptr %p3, ptr %a4 + store { ptr, i64, i64 } { ptr @.str.7283, i64 0, i64 0 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7284, i64 0, i64 0 }, ptr %a6 + store { ptr, i64, i64 } { ptr @.str.7285, i64 1, i64 0 }, ptr %a7 + store { ptr, i64, i64 } { ptr @.str.7286, i64 1, i64 0 }, ptr %a8 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp sgt i64 %t10, 0 + br i1 %t11, label %then11382, label %endif11384 +then11382: + %t12 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7287, i64 1, i64 0 }, ptr %a5 + store { ptr, i64, i64 } %t12, ptr %a13 + call void @finch_str_drop(ptr %a13) + %t14 = load { ptr, i64, i64 }, ptr %a3 + %t15 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t14, ptr %a17 + store { ptr, i64, i64 } %t15, ptr %a18 + call void @finch_str_concat(ptr %a16, ptr %a17, ptr %a18) + %t19 = load { ptr, i64, i64 }, ptr %a16 + %t20 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t19, ptr %a6 + store { ptr, i64, i64 } %t20, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } { ptr @.str.7288, i64 2, i64 0 }, ptr %a8 + store { ptr, i64, i64 } %t22, ptr %a23 + call void @finch_str_drop(ptr %a23) + br label %endif11384 +endif11384: + %t24 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 0 + %t25 = load i32, ptr %t24 + %t26 = icmp eq i32 %t25, 0 + br i1 %t26, label %match.arm11386, label %match.next11387 +match.arm11386: + %t27 = load ptr, ptr %a4 + %t28 = icmp eq ptr %t27, null + br i1 %t28, label %panic11388, label %ok11389 +panic11388: + call void @finch_panic(ptr @.str.7289, i64 200, ptr @.str.7290) + unreachable +ok11389: + %t29 = getelementptr inbounds %S.json.Writer, ptr %t27, i32 0, i32 0 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %t29, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t31, 1 + call void @finch_arr_reserve(ptr %t29, i64 %t32, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t33 = load ptr, ptr %t29 + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %t33, i64 %t31 + store { ptr, i64, i64 } { ptr @.str.7291, i64 4, i64 0 }, ptr %t34 + store i64 %t32, ptr %t30 + br label %match.end11385 +match.next11387: + %t35 = icmp eq i32 %t25, 1 + br i1 %t35, label %match.arm11390, label %match.next11391 +match.arm11390: + %t36 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 1 + %t37 = load i1, ptr %t36 + br i1 %t37, label %then11392, label %else11393 +then11392: + %t38 = load ptr, ptr %a4 + %t39 = icmp eq ptr %t38, null + br i1 %t39, label %panic11395, label %ok11396 +panic11395: + call void @finch_panic(ptr @.str.7292, i64 203, ptr @.str.7293) + unreachable +ok11396: + %t40 = getelementptr inbounds %S.json.Writer, ptr %t38, i32 0, i32 0 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = add i64 %t42, 1 + call void @finch_arr_reserve(ptr %t40, i64 %t43, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t44 = load ptr, ptr %t40 + %t45 = getelementptr inbounds { ptr, i64, i64 }, ptr %t44, i64 %t42 + store { ptr, i64, i64 } { ptr @.str.7294, i64 4, i64 0 }, ptr %t45 + store i64 %t43, ptr %t41 + br label %endif11394 +else11393: + %t46 = load ptr, ptr %a4 + %t47 = icmp eq ptr %t46, null + br i1 %t47, label %panic11397, label %ok11398 +panic11397: + call void @finch_panic(ptr @.str.7295, i64 205, ptr @.str.7296) + unreachable +ok11398: + %t48 = getelementptr inbounds %S.json.Writer, ptr %t46, i32 0, i32 0 + %t49 = getelementptr inbounds { ptr, i64, i64 }, ptr %t48, i32 0, i32 1 + %t50 = load i64, ptr %t49 + %t51 = add i64 %t50, 1 + call void @finch_arr_reserve(ptr %t48, i64 %t51, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t52 = load ptr, ptr %t48 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %t52, i64 %t50 + store { ptr, i64, i64 } { ptr @.str.7297, i64 5, i64 0 }, ptr %t53 + store i64 %t51, ptr %t49 + br label %endif11394 +endif11394: + br label %match.end11385 +match.next11391: + %t54 = icmp eq i32 %t25, 2 + br i1 %t54, label %match.arm11399, label %match.next11400 +match.arm11399: + %t55 = load ptr, ptr %a4 + %t56 = icmp eq ptr %t55, null + br i1 %t56, label %panic11401, label %ok11402 +panic11401: + call void @finch_panic(ptr @.str.7298, i64 208, ptr @.str.7299) + unreachable +ok11402: + %t57 = getelementptr inbounds %S.json.Writer, ptr %t55, i32 0, i32 0 + %t58 = getelementptr inbounds { ptr, i64, i64 }, ptr %t57, i32 0, i32 1 + %t59 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 2 + %t60 = load double, ptr %t59 + %t61 = call { ptr, i64, i64 } @finch.json.number_text(double %t60) + %t62 = load i64, ptr %t58 + %t63 = add i64 %t62, 1 + call void @finch_arr_reserve(ptr %t57, i64 %t63, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t64 = load ptr, ptr %t57 + %t65 = getelementptr inbounds { ptr, i64, i64 }, ptr %t64, i64 %t62 + store { ptr, i64, i64 } %t61, ptr %t65 + store i64 %t63, ptr %t58 + br label %match.end11385 +match.next11400: + %t66 = icmp eq i32 %t25, 3 + br i1 %t66, label %match.arm11403, label %match.next11404 +match.arm11403: + %t67 = load ptr, ptr %a4 + %t68 = icmp eq ptr %t67, null + br i1 %t68, label %panic11405, label %ok11406 +panic11405: + call void @finch_panic(ptr @.str.7300, i64 209, ptr @.str.7301) + unreachable +ok11406: + %t69 = getelementptr inbounds %S.json.Writer, ptr %t67, i32 0, i32 0 + %t70 = getelementptr inbounds { ptr, i64, i64 }, ptr %t69, i32 0, i32 1 + %t71 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 3 + %t72 = load { ptr, i64, i64 }, ptr %t71 + %t73 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t72) + %t74 = load i64, ptr %t70 + %t75 = add i64 %t74, 1 + call void @finch_arr_reserve(ptr %t69, i64 %t75, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t76 = load ptr, ptr %t69 + %t77 = getelementptr inbounds { ptr, i64, i64 }, ptr %t76, i64 %t74 + store { ptr, i64, i64 } %t73, ptr %t77 + store i64 %t75, ptr %t70 + br label %match.end11385 +match.next11404: + %t78 = icmp eq i32 %t25, 4 + br i1 %t78, label %match.arm11407, label %match.next11408 +match.arm11407: + %t79 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + %t80 = getelementptr inbounds { ptr, i64, i64 }, ptr %t79, i32 0, i32 1 + %t81 = load i64, ptr %t80 + %t82 = icmp eq i64 %t81, 0 + br i1 %t82, label %then11409, label %endif11411 +then11409: + %t83 = load ptr, ptr %a4 + %t84 = icmp eq ptr %t83, null + br i1 %t84, label %panic11412, label %ok11413 +panic11412: + call void @finch_panic(ptr @.str.7302, i64 212, ptr @.str.7303) + unreachable +ok11413: + %t85 = getelementptr inbounds %S.json.Writer, ptr %t83, i32 0, i32 0 + %t86 = getelementptr inbounds { ptr, i64, i64 }, ptr %t85, i32 0, i32 1 + %t87 = load i64, ptr %t86 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %t85, i64 %t88, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %t85 + %t90 = getelementptr inbounds { ptr, i64, i64 }, ptr %t89, i64 %t87 + store { ptr, i64, i64 } { ptr @.str.7304, i64 2, i64 0 }, ptr %t90 + store i64 %t88, ptr %t86 + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a7) + call void @finch_str_drop(ptr %a6) + call void @finch_str_drop(ptr %a5) + ret void +endif11411: + %t91 = load ptr, ptr %a4 + %t92 = icmp eq ptr %t91, null + br i1 %t92, label %panic11414, label %ok11415 +panic11414: + call void @finch_panic(ptr @.str.7305, i64 215, ptr @.str.7306) + unreachable +ok11415: + %t93 = getelementptr inbounds %S.json.Writer, ptr %t91, i32 0, i32 0 + %t94 = getelementptr inbounds { ptr, i64, i64 }, ptr %t93, i32 0, i32 1 + %t95 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7307, i64 1, i64 0 }, ptr %a97 + store { ptr, i64, i64 } %t95, ptr %a98 + call void @finch_str_concat(ptr %a96, ptr %a97, ptr %a98) + %t99 = load { ptr, i64, i64 }, ptr %a96 + %t100 = load i64, ptr %t94 + %t101 = add i64 %t100, 1 + call void @finch_arr_reserve(ptr %t93, i64 %t101, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t102 = load ptr, ptr %t93 + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %t102, i64 %t100 + store { ptr, i64, i64 } %t99, ptr %t103 + store i64 %t101, ptr %t94 + %t104 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a105 + br label %each.cond11416 +each.cond11416: + %t106 = getelementptr inbounds { ptr, i64, i64 }, ptr %t104, i32 0, i32 1 + %t107 = load i64, ptr %t106 + %t108 = load i64, ptr %a105 + %t109 = icmp slt i64 %t108, %t107 + br i1 %t109, label %each.body11417, label %each.end11419 +each.body11417: + %t110 = load ptr, ptr %t104 + %t111 = getelementptr inbounds %S.json.Json, ptr %t110, i64 %t108 + %t112 = load %S.json.Json, ptr %t111 + store i64 %t108, ptr %a113 + store %S.json.Json %t112, ptr %a114 + %t115 = load i64, ptr %a113 + %t116 = icmp sgt i64 %t115, 0 + br i1 %t116, label %then11420, label %endif11422 +then11420: + %t117 = load ptr, ptr %a4 + %t118 = icmp eq ptr %t117, null + br i1 %t118, label %panic11423, label %ok11424 +panic11423: + call void @finch_panic(ptr @.str.7308, i64 218, ptr @.str.7309) + unreachable +ok11424: + %t119 = getelementptr inbounds %S.json.Writer, ptr %t117, i32 0, i32 0 + %t120 = getelementptr inbounds { ptr, i64, i64 }, ptr %t119, i32 0, i32 1 + %t121 = load { ptr, i64, i64 }, ptr %a7 + %t122 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t121, ptr %a124 + store { ptr, i64, i64 } %t122, ptr %a125 + call void @finch_str_concat(ptr %a123, ptr %a124, ptr %a125) + %t126 = load { ptr, i64, i64 }, ptr %a123 + %t127 = load i64, ptr %t120 + %t128 = add i64 %t127, 1 + call void @finch_arr_reserve(ptr %t119, i64 %t128, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t129 = load ptr, ptr %t119 + %t130 = getelementptr inbounds { ptr, i64, i64 }, ptr %t129, i64 %t127 + store { ptr, i64, i64 } %t126, ptr %t130 + store i64 %t128, ptr %t120 + br label %endif11422 +endif11422: + %t131 = load ptr, ptr %a4 + %t132 = icmp eq ptr %t131, null + br i1 %t132, label %panic11425, label %ok11426 +panic11425: + call void @finch_panic(ptr @.str.7310, i64 220, ptr @.str.7311) + unreachable +ok11426: + %t133 = getelementptr inbounds %S.json.Writer, ptr %t131, i32 0, i32 0 + %t134 = getelementptr inbounds { ptr, i64, i64 }, ptr %t133, i32 0, i32 1 + %t135 = load { ptr, i64, i64 }, ptr %a6 + store { ptr, i64, i64 } %t135, ptr %a136 + call void @finch_str_copy(ptr %a137, ptr %a136) + %t138 = load { ptr, i64, i64 }, ptr %a137 + %t139 = load i64, ptr %t134 + %t140 = add i64 %t139, 1 + call void @finch_arr_reserve(ptr %t133, i64 %t140, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t141 = load ptr, ptr %t133 + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %t141, i64 %t139 + store { ptr, i64, i64 } %t138, ptr %t142 + store i64 %t140, ptr %t134 + %t143 = load %S.json.Json, ptr %a114 + %t144 = load { ptr, i64, i64 }, ptr %a2 + %t145 = load { ptr, i64, i64 }, ptr %a6 + %t146 = load ptr, ptr %a4 + call void @finch.json.write(%S.json.Json %t143, { ptr, i64, i64 } %t144, { ptr, i64, i64 } %t145, ptr %t146) + br label %each.step11418 +each.step11418: + %t147 = load i64, ptr %a105 + %t148 = add i64 %t147, 1 + store i64 %t148, ptr %a105 + br label %each.cond11416 +each.end11419: + %t149 = load ptr, ptr %a4 + %t150 = icmp eq ptr %t149, null + br i1 %t150, label %panic11427, label %ok11428 +panic11427: + call void @finch_panic(ptr @.str.7312, i64 223, ptr @.str.7313) + unreachable +ok11428: + %t151 = getelementptr inbounds %S.json.Writer, ptr %t149, i32 0, i32 0 + %t152 = getelementptr inbounds { ptr, i64, i64 }, ptr %t151, i32 0, i32 1 + %t153 = load { ptr, i64, i64 }, ptr %a5 + %t154 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t153, ptr %a156 + store { ptr, i64, i64 } %t154, ptr %a157 + call void @finch_str_concat(ptr %a155, ptr %a156, ptr %a157) + %t158 = load { ptr, i64, i64 }, ptr %a155 + store { ptr, i64, i64 } %t158, ptr %a160 + store { ptr, i64, i64 } { ptr @.str.7314, i64 1, i64 0 }, ptr %a161 + call void @finch_str_concat(ptr %a159, ptr %a160, ptr %a161) + store { ptr, i64, i64 } %t158, ptr %a162 + call void @finch_str_drop(ptr %a162) + %t163 = load { ptr, i64, i64 }, ptr %a159 + %t164 = load i64, ptr %t152 + %t165 = add i64 %t164, 1 + call void @finch_arr_reserve(ptr %t151, i64 %t165, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t166 = load ptr, ptr %t151 + %t167 = getelementptr inbounds { ptr, i64, i64 }, ptr %t166, i64 %t164 + store { ptr, i64, i64 } %t163, ptr %t167 + store i64 %t165, ptr %t152 + br label %match.end11385 +match.next11408: + %t168 = icmp eq i32 %t25, 5 + br i1 %t168, label %match.arm11429, label %match.next11430 +match.arm11429: + %t169 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + %t170 = getelementptr inbounds { ptr, i64, i64 }, ptr %t169, i32 0, i32 1 + %t171 = load i64, ptr %t170 + %t172 = icmp eq i64 %t171, 0 + br i1 %t172, label %then11431, label %endif11433 +then11431: + %t173 = load ptr, ptr %a4 + %t174 = icmp eq ptr %t173, null + br i1 %t174, label %panic11434, label %ok11435 +panic11434: + call void @finch_panic(ptr @.str.7315, i64 227, ptr @.str.7316) + unreachable +ok11435: + %t175 = getelementptr inbounds %S.json.Writer, ptr %t173, i32 0, i32 0 + %t176 = getelementptr inbounds { ptr, i64, i64 }, ptr %t175, i32 0, i32 1 + %t177 = load i64, ptr %t176 + %t178 = add i64 %t177, 1 + call void @finch_arr_reserve(ptr %t175, i64 %t178, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t179 = load ptr, ptr %t175 + %t180 = getelementptr inbounds { ptr, i64, i64 }, ptr %t179, i64 %t177 + store { ptr, i64, i64 } { ptr @.str.7317, i64 2, i64 0 }, ptr %t180 + store i64 %t178, ptr %t176 + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a7) + call void @finch_str_drop(ptr %a6) + call void @finch_str_drop(ptr %a5) + ret void +endif11433: + %t181 = load ptr, ptr %a4 + %t182 = icmp eq ptr %t181, null + br i1 %t182, label %panic11436, label %ok11437 +panic11436: + call void @finch_panic(ptr @.str.7318, i64 230, ptr @.str.7319) + unreachable +ok11437: + %t183 = getelementptr inbounds %S.json.Writer, ptr %t181, i32 0, i32 0 + %t184 = getelementptr inbounds { ptr, i64, i64 }, ptr %t183, i32 0, i32 1 + %t185 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } { ptr @.str.7320, i64 1, i64 0 }, ptr %a187 + store { ptr, i64, i64 } %t185, ptr %a188 + call void @finch_str_concat(ptr %a186, ptr %a187, ptr %a188) + %t189 = load { ptr, i64, i64 }, ptr %a186 + %t190 = load i64, ptr %t184 + %t191 = add i64 %t190, 1 + call void @finch_arr_reserve(ptr %t183, i64 %t191, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t192 = load ptr, ptr %t183 + %t193 = getelementptr inbounds { ptr, i64, i64 }, ptr %t192, i64 %t190 + store { ptr, i64, i64 } %t189, ptr %t193 + store i64 %t191, ptr %t184 + %t194 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 4 + store i64 0, ptr %a195 + br label %each.cond11438 +each.cond11438: + %t196 = getelementptr inbounds { ptr, i64, i64 }, ptr %t194, i32 0, i32 1 + %t197 = load i64, ptr %t196 + %t198 = load i64, ptr %a195 + %t199 = icmp slt i64 %t198, %t197 + br i1 %t199, label %each.body11439, label %each.end11441 +each.body11439: + %t200 = load ptr, ptr %t194 + %t201 = getelementptr inbounds %S.json.Json, ptr %t200, i64 %t198 + %t202 = load %S.json.Json, ptr %t201 + store i64 %t198, ptr %a203 + store %S.json.Json %t202, ptr %a204 + %t205 = load i64, ptr %a203 + %t206 = icmp sgt i64 %t205, 0 + br i1 %t206, label %then11442, label %endif11444 +then11442: + %t207 = load ptr, ptr %a4 + %t208 = icmp eq ptr %t207, null + br i1 %t208, label %panic11445, label %ok11446 +panic11445: + call void @finch_panic(ptr @.str.7321, i64 233, ptr @.str.7322) + unreachable +ok11446: + %t209 = getelementptr inbounds %S.json.Writer, ptr %t207, i32 0, i32 0 + %t210 = getelementptr inbounds { ptr, i64, i64 }, ptr %t209, i32 0, i32 1 + %t211 = load { ptr, i64, i64 }, ptr %a7 + %t212 = load { ptr, i64, i64 }, ptr %a5 + store { ptr, i64, i64 } %t211, ptr %a214 + store { ptr, i64, i64 } %t212, ptr %a215 + call void @finch_str_concat(ptr %a213, ptr %a214, ptr %a215) + %t216 = load { ptr, i64, i64 }, ptr %a213 + %t217 = load i64, ptr %t210 + %t218 = add i64 %t217, 1 + call void @finch_arr_reserve(ptr %t209, i64 %t218, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t219 = load ptr, ptr %t209 + %t220 = getelementptr inbounds { ptr, i64, i64 }, ptr %t219, i64 %t217 + store { ptr, i64, i64 } %t216, ptr %t220 + store i64 %t218, ptr %t210 + br label %endif11444 +endif11444: + %t221 = load ptr, ptr %a4 + %t222 = icmp eq ptr %t221, null + br i1 %t222, label %panic11447, label %ok11448 +panic11447: + call void @finch_panic(ptr @.str.7323, i64 235, ptr @.str.7324) + unreachable +ok11448: + %t223 = getelementptr inbounds %S.json.Writer, ptr %t221, i32 0, i32 0 + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %t223, i32 0, i32 1 + %t225 = load { ptr, i64, i64 }, ptr %a6 + %t226 = getelementptr inbounds %S.json.Json, ptr %a1, i32 0, i32 5 + %t227 = load i64, ptr %a203 + %t228 = load { ptr, i64, i64 }, ptr %t226 + %t229 = extractvalue { ptr, i64, i64 } %t228, 1 + %t230 = icmp uge i64 %t227, %t229 + br i1 %t230, label %range11449, label %inrange11450 +range11449: + call void @finch_panic_index(ptr @.str.7325, i64 235, i64 %t227, i64 %t229) + unreachable +inrange11450: + %t231 = extractvalue { ptr, i64, i64 } %t228, 0 + %t232 = getelementptr inbounds { ptr, i64, i64 }, ptr %t231, i64 %t227 + %t233 = load { ptr, i64, i64 }, ptr %t232 + %t234 = call { ptr, i64, i64 } @finch.json.quote({ ptr, i64, i64 } %t233) + store { ptr, i64, i64 } %t225, ptr %a236 + store { ptr, i64, i64 } %t234, ptr %a237 + call void @finch_str_concat(ptr %a235, ptr %a236, ptr %a237) + store { ptr, i64, i64 } %t234, ptr %a238 + call void @finch_str_drop(ptr %a238) + %t239 = load { ptr, i64, i64 }, ptr %a235 + %t240 = load { ptr, i64, i64 }, ptr %a8 + store { ptr, i64, i64 } %t239, ptr %a242 + store { ptr, i64, i64 } %t240, ptr %a243 + call void @finch_str_concat(ptr %a241, ptr %a242, ptr %a243) + store { ptr, i64, i64 } %t239, ptr %a244 + call void @finch_str_drop(ptr %a244) + %t245 = load { ptr, i64, i64 }, ptr %a241 + %t246 = load i64, ptr %t224 + %t247 = add i64 %t246, 1 + call void @finch_arr_reserve(ptr %t223, i64 %t247, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t248 = load ptr, ptr %t223 + %t249 = getelementptr inbounds { ptr, i64, i64 }, ptr %t248, i64 %t246 + store { ptr, i64, i64 } %t245, ptr %t249 + store i64 %t247, ptr %t224 + %t250 = load %S.json.Json, ptr %a204 + %t251 = load { ptr, i64, i64 }, ptr %a2 + %t252 = load { ptr, i64, i64 }, ptr %a6 + %t253 = load ptr, ptr %a4 + call void @finch.json.write(%S.json.Json %t250, { ptr, i64, i64 } %t251, { ptr, i64, i64 } %t252, ptr %t253) + br label %each.step11440 +each.step11440: + %t254 = load i64, ptr %a195 + %t255 = add i64 %t254, 1 + store i64 %t255, ptr %a195 + br label %each.cond11438 +each.end11441: + %t256 = load ptr, ptr %a4 + %t257 = icmp eq ptr %t256, null + br i1 %t257, label %panic11451, label %ok11452 +panic11451: + call void @finch_panic(ptr @.str.7326, i64 238, ptr @.str.7327) + unreachable +ok11452: + %t258 = getelementptr inbounds %S.json.Writer, ptr %t256, i32 0, i32 0 + %t259 = getelementptr inbounds { ptr, i64, i64 }, ptr %t258, i32 0, i32 1 + %t260 = load { ptr, i64, i64 }, ptr %a5 + %t261 = load { ptr, i64, i64 }, ptr %a3 + store { ptr, i64, i64 } %t260, ptr %a263 + store { ptr, i64, i64 } %t261, ptr %a264 + call void @finch_str_concat(ptr %a262, ptr %a263, ptr %a264) + %t265 = load { ptr, i64, i64 }, ptr %a262 + store { ptr, i64, i64 } %t265, ptr %a267 + store { ptr, i64, i64 } { ptr @.str.7328, i64 1, i64 0 }, ptr %a268 + call void @finch_str_concat(ptr %a266, ptr %a267, ptr %a268) + store { ptr, i64, i64 } %t265, ptr %a269 + call void @finch_str_drop(ptr %a269) + %t270 = load { ptr, i64, i64 }, ptr %a266 + %t271 = load i64, ptr %t259 + %t272 = add i64 %t271, 1 + call void @finch_arr_reserve(ptr %t258, i64 %t272, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t273 = load ptr, ptr %t258 + %t274 = getelementptr inbounds { ptr, i64, i64 }, ptr %t273, i64 %t271 + store { ptr, i64, i64 } %t270, ptr %t274 + store i64 %t272, ptr %t259 + br label %match.end11385 +match.next11430: + br i1 true, label %panic11453, label %ok11454 +panic11453: + call void @finch_panic(ptr @.str.7329, i64 199, ptr @.str.7330) + unreachable +ok11454: + unreachable +match.end11385: + call void @finch_str_drop(ptr %a8) + call void @finch_str_drop(ptr %a7) + call void @finch_str_drop(ptr %a6) + call void @finch_str_drop(ptr %a5) + ret void +} + +define internal void @finch.drop.S_json_Writer(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.json.Writer, ptr %a, i32 0, i32 0 + call void @finch.drop.arr_str(ptr %t1) + ret void +} + +define internal { ptr, i64, i64 } @finch.json.stringify(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca %S.json.Writer, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + store %S.json.Writer zeroinitializer, ptr %a2 + %t3 = load %S.json.Json, ptr %a1 + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7331, i64 0, i64 0 }, { ptr, i64, i64 } { ptr @.str.7332, i64 0, i64 0 }, ptr %a2) + %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7333, i64 0, i64 0 }, ptr %a6 + call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.drop.S_json_Writer(ptr %a2) + ret { ptr, i64, i64 } %t8 +} + +define internal { ptr, i64, i64 } @finch.json.pretty(%S.json.Json %p0) { +entry: + %a1 = alloca %S.json.Json, align 16 + %a2 = alloca %S.json.Writer, align 16 + %a6 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + store %S.json.Json %p0, ptr %a1 + store %S.json.Writer zeroinitializer, ptr %a2 + %t3 = load %S.json.Json, ptr %a1 + call void @finch.json.write(%S.json.Json %t3, { ptr, i64, i64 } { ptr @.str.7334, i64 2, i64 0 }, { ptr, i64, i64 } { ptr @.str.7335, i64 0, i64 0 }, ptr %a2) + %t4 = getelementptr inbounds %S.json.Writer, ptr %a2, i32 0, i32 0 + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %t4, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7336, i64 0, i64 0 }, ptr %a6 + call void @finch_str_join(ptr %a7, ptr %t4, ptr %a6) + %t8 = load { ptr, i64, i64 }, ptr %a7 + call void @finch.drop.S_json_Writer(ptr %a2) + ret { ptr, i64, i64 } %t8 +} + +define internal { ptr, i64, i64 } @finch.json.where(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + %a8 = alloca i64, align 16 + %a37 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + %a40 = alloca { ptr, i64, i64 }, align 16 + %a41 = alloca { ptr, i64, i64 }, align 16 + %a42 = alloca { ptr, i64, i64 }, align 16 + %a44 = alloca { ptr, i64, i64 }, align 16 + %a45 = alloca { ptr, i64, i64 }, align 16 + %a46 = alloca { ptr, i64, i64 }, align 16 + %a47 = alloca { ptr, i64, i64 }, align 16 + %a50 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a55 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store i64 1, ptr %a2 + store i64 1, ptr %a3 + %t4 = load ptr, ptr %a1 + %t5 = icmp eq ptr %t4, null + br i1 %t5, label %panic11455, label %ok11456 +panic11455: + call void @finch_panic(ptr @.str.7337, i64 268, ptr @.str.7338) + unreachable +ok11456: + %t6 = getelementptr inbounds %S.json.Reader, ptr %t4, i32 0, i32 1 + %t7 = load i64, ptr %t6 + store i64 0, ptr %a8 + br label %for.cond11457 +for.cond11457: + %t9 = load i64, ptr %a8 + %t10 = icmp slt i64 %t9, %t7 + br i1 %t10, label %for.body11458, label %for.end11460 +for.body11458: + %t11 = load i64, ptr %a8 + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic11461, label %ok11462 +panic11461: + call void @finch_panic(ptr @.str.7339, i64 269, ptr @.str.7340) + unreachable +ok11462: + %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 + %t15 = getelementptr inbounds { ptr, i64, i64 }, ptr %t14, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = icmp slt i64 %t11, %t16 + br label %logic.from11463 +logic.from11463: + br i1 %t17, label %logic.rhs11464, label %logic.end11465 +logic.rhs11464: + %t18 = load ptr, ptr %a1 + %t19 = icmp eq ptr %t18, null + br i1 %t19, label %panic11466, label %ok11467 +panic11466: + call void @finch_panic(ptr @.str.7341, i64 269, ptr @.str.7342) + unreachable +ok11467: + %t20 = getelementptr inbounds %S.json.Reader, ptr %t18, i32 0, i32 0 + %t21 = load i64, ptr %a8 + %t22 = load { ptr, i64, i64 }, ptr %t20 + %t23 = extractvalue { ptr, i64, i64 } %t22, 1 + %t24 = icmp uge i64 %t21, %t23 + br i1 %t24, label %range11468, label %inrange11469 +range11468: + call void @finch_panic_index(ptr @.str.7343, i64 269, i64 %t21, i64 %t23) + unreachable +inrange11469: + %t25 = extractvalue { ptr, i64, i64 } %t22, 0 + %t26 = getelementptr inbounds i8, ptr %t25, i64 %t21 + %t27 = load i8, ptr %t26 + %t28 = icmp eq i8 %t27, 10 + br label %logic.rend11470 +logic.rend11470: + br label %logic.end11465 +logic.end11465: + %t29 = phi i1 [ false, %logic.from11463 ], [ %t28, %logic.rend11470 ] + br i1 %t29, label %then11471, label %else11472 +then11471: + %t30 = load i64, ptr %a2 + %t31 = add i64 %t30, 1 + store i64 %t31, ptr %a2 + store i64 1, ptr %a3 + br label %endif11473 +else11472: + %t32 = load i64, ptr %a3 + %t33 = add i64 %t32, 1 + store i64 %t33, ptr %a3 + br label %endif11473 +endif11473: + br label %for.step11459 +for.step11459: + %t34 = load i64, ptr %a8 + %t35 = add i64 %t34, 1 + store i64 %t35, ptr %a8 + br label %for.cond11457 +for.end11460: + %t36 = load i64, ptr %a2 + call void @finch_str_from_int(ptr %a37, i64 %t36) + %t38 = load { ptr, i64, i64 }, ptr %a37 + store { ptr, i64, i64 } { ptr @.str.7344, i64 5, i64 0 }, ptr %a40 + store { ptr, i64, i64 } %t38, ptr %a41 + call void @finch_str_concat(ptr %a39, ptr %a40, ptr %a41) + store { ptr, i64, i64 } %t38, ptr %a42 + call void @finch_str_drop(ptr %a42) + %t43 = load { ptr, i64, i64 }, ptr %a39 + store { ptr, i64, i64 } %t43, ptr %a45 + store { ptr, i64, i64 } { ptr @.str.7345, i64 9, i64 0 }, ptr %a46 + call void @finch_str_concat(ptr %a44, ptr %a45, ptr %a46) + store { ptr, i64, i64 } %t43, ptr %a47 + call void @finch_str_drop(ptr %a47) + %t48 = load { ptr, i64, i64 }, ptr %a44 + %t49 = load i64, ptr %a3 + call void @finch_str_from_int(ptr %a50, i64 %t49) + %t51 = load { ptr, i64, i64 }, ptr %a50 + store { ptr, i64, i64 } %t48, ptr %a53 + store { ptr, i64, i64 } %t51, ptr %a54 + call void @finch_str_concat(ptr %a52, ptr %a53, ptr %a54) + store { ptr, i64, i64 } %t48, ptr %a55 + call void @finch_str_drop(ptr %a55) + store { ptr, i64, i64 } %t51, ptr %a56 + call void @finch_str_drop(ptr %a56) + %t57 = load { ptr, i64, i64 }, ptr %a52 + ret { ptr, i64, i64 } %t57 +} + +define internal i8 @finch.json.peek(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11474, label %ok11475 +panic11474: + call void @finch_panic(ptr @.str.7346, i64 280, ptr @.str.7347) + unreachable +ok11475: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11476, label %ok11477 +panic11476: + call void @finch_panic(ptr @.str.7348, i64 280, ptr @.str.7349) + unreachable +ok11477: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp slt i64 %t5, %t10 + br i1 %t11, label %then11478, label %endif11480 +then11478: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic11481, label %ok11482 +panic11481: + call void @finch_panic(ptr @.str.7350, i64 281, ptr @.str.7351) + unreachable +ok11482: + %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic11483, label %ok11484 +panic11483: + call void @finch_panic(ptr @.str.7352, i64 281, ptr @.str.7353) + unreachable +ok11484: + %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = load { ptr, i64, i64 }, ptr %t14 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range11485, label %inrange11486 +range11485: + call void @finch_panic_index(ptr @.str.7354, i64 281, i64 %t18, i64 %t20) + unreachable +inrange11486: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 + %t24 = load i8, ptr %t23 + ret i8 %t24 +endif11480: + %t25 = trunc i64 0 to i8 + ret i8 %t25 +} + +define internal void @finch.json.skip_space(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + store ptr %p0, ptr %a1 + br label %while.cond11487 +while.cond11487: + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11490, label %ok11491 +panic11490: + call void @finch_panic(ptr @.str.7355, i64 287, ptr @.str.7356) + unreachable +ok11491: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11492, label %ok11493 +panic11492: + call void @finch_panic(ptr @.str.7357, i64 287, ptr @.str.7358) + unreachable +ok11493: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 0 + %t9 = getelementptr inbounds { ptr, i64, i64 }, ptr %t8, i32 0, i32 1 + %t10 = load i64, ptr %t9 + %t11 = icmp slt i64 %t5, %t10 + br label %logic.from11494 +logic.from11494: + br i1 %t11, label %logic.rhs11495, label %logic.end11496 +logic.rhs11495: + %t12 = load ptr, ptr %a1 + %t13 = icmp eq ptr %t12, null + br i1 %t13, label %panic11497, label %ok11498 +panic11497: + call void @finch_panic(ptr @.str.7359, i64 287, ptr @.str.7360) + unreachable +ok11498: + %t14 = getelementptr inbounds %S.json.Reader, ptr %t12, i32 0, i32 0 + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic11499, label %ok11500 +panic11499: + call void @finch_panic(ptr @.str.7361, i64 287, ptr @.str.7362) + unreachable +ok11500: + %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = load { ptr, i64, i64 }, ptr %t14 + %t20 = extractvalue { ptr, i64, i64 } %t19, 1 + %t21 = icmp uge i64 %t18, %t20 + br i1 %t21, label %range11501, label %inrange11502 +range11501: + call void @finch_panic_index(ptr @.str.7363, i64 287, i64 %t18, i64 %t20) + unreachable +inrange11502: + %t22 = extractvalue { ptr, i64, i64 } %t19, 0 + %t23 = getelementptr inbounds i8, ptr %t22, i64 %t18 + %t24 = load i8, ptr %t23 + %t25 = icmp eq i8 %t24, 32 + br label %logic.from11503 +logic.from11503: + br i1 %t25, label %logic.end11505, label %logic.rhs11504 +logic.rhs11504: + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic11506, label %ok11507 +panic11506: + call void @finch_panic(ptr @.str.7364, i64 287, ptr @.str.7365) + unreachable +ok11507: + %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 0 + %t29 = load ptr, ptr %a1 + %t30 = icmp eq ptr %t29, null + br i1 %t30, label %panic11508, label %ok11509 +panic11508: + call void @finch_panic(ptr @.str.7366, i64 287, ptr @.str.7367) + unreachable +ok11509: + %t31 = getelementptr inbounds %S.json.Reader, ptr %t29, i32 0, i32 1 + %t32 = load i64, ptr %t31 + %t33 = load { ptr, i64, i64 }, ptr %t28 + %t34 = extractvalue { ptr, i64, i64 } %t33, 1 + %t35 = icmp uge i64 %t32, %t34 + br i1 %t35, label %range11510, label %inrange11511 +range11510: + call void @finch_panic_index(ptr @.str.7368, i64 287, i64 %t32, i64 %t34) + unreachable +inrange11511: + %t36 = extractvalue { ptr, i64, i64 } %t33, 0 + %t37 = getelementptr inbounds i8, ptr %t36, i64 %t32 + %t38 = load i8, ptr %t37 + %t39 = icmp eq i8 %t38, 10 + br label %logic.rend11512 +logic.rend11512: + br label %logic.end11505 +logic.end11505: + %t40 = phi i1 [ true, %logic.from11503 ], [ %t39, %logic.rend11512 ] + br label %logic.from11513 +logic.from11513: + br i1 %t40, label %logic.end11515, label %logic.rhs11514 +logic.rhs11514: + %t41 = load ptr, ptr %a1 + %t42 = icmp eq ptr %t41, null + br i1 %t42, label %panic11516, label %ok11517 +panic11516: + call void @finch_panic(ptr @.str.7369, i64 287, ptr @.str.7370) + unreachable +ok11517: + %t43 = getelementptr inbounds %S.json.Reader, ptr %t41, i32 0, i32 0 + %t44 = load ptr, ptr %a1 + %t45 = icmp eq ptr %t44, null + br i1 %t45, label %panic11518, label %ok11519 +panic11518: + call void @finch_panic(ptr @.str.7371, i64 287, ptr @.str.7372) + unreachable +ok11519: + %t46 = getelementptr inbounds %S.json.Reader, ptr %t44, i32 0, i32 1 + %t47 = load i64, ptr %t46 + %t48 = load { ptr, i64, i64 }, ptr %t43 + %t49 = extractvalue { ptr, i64, i64 } %t48, 1 + %t50 = icmp uge i64 %t47, %t49 + br i1 %t50, label %range11520, label %inrange11521 +range11520: + call void @finch_panic_index(ptr @.str.7373, i64 287, i64 %t47, i64 %t49) + unreachable +inrange11521: + %t51 = extractvalue { ptr, i64, i64 } %t48, 0 + %t52 = getelementptr inbounds i8, ptr %t51, i64 %t47 + %t53 = load i8, ptr %t52 + %t54 = icmp eq i8 %t53, 9 + br label %logic.rend11522 +logic.rend11522: + br label %logic.end11515 +logic.end11515: + %t55 = phi i1 [ true, %logic.from11513 ], [ %t54, %logic.rend11522 ] + br label %logic.from11523 +logic.from11523: + br i1 %t55, label %logic.end11525, label %logic.rhs11524 +logic.rhs11524: + %t56 = load ptr, ptr %a1 + %t57 = icmp eq ptr %t56, null + br i1 %t57, label %panic11526, label %ok11527 +panic11526: + call void @finch_panic(ptr @.str.7374, i64 287, ptr @.str.7375) + unreachable +ok11527: + %t58 = getelementptr inbounds %S.json.Reader, ptr %t56, i32 0, i32 0 + %t59 = load ptr, ptr %a1 + %t60 = icmp eq ptr %t59, null + br i1 %t60, label %panic11528, label %ok11529 +panic11528: + call void @finch_panic(ptr @.str.7376, i64 287, ptr @.str.7377) + unreachable +ok11529: + %t61 = getelementptr inbounds %S.json.Reader, ptr %t59, i32 0, i32 1 + %t62 = load i64, ptr %t61 + %t63 = load { ptr, i64, i64 }, ptr %t58 + %t64 = extractvalue { ptr, i64, i64 } %t63, 1 + %t65 = icmp uge i64 %t62, %t64 + br i1 %t65, label %range11530, label %inrange11531 +range11530: + call void @finch_panic_index(ptr @.str.7378, i64 287, i64 %t62, i64 %t64) + unreachable +inrange11531: + %t66 = extractvalue { ptr, i64, i64 } %t63, 0 + %t67 = getelementptr inbounds i8, ptr %t66, i64 %t62 + %t68 = load i8, ptr %t67 + %t69 = icmp eq i8 %t68, 13 + br label %logic.rend11532 +logic.rend11532: + br label %logic.end11525 +logic.end11525: + %t70 = phi i1 [ true, %logic.from11523 ], [ %t69, %logic.rend11532 ] + br label %logic.rend11533 +logic.rend11533: + br label %logic.end11496 +logic.end11496: + %t71 = phi i1 [ false, %logic.from11494 ], [ %t70, %logic.rend11533 ] + br i1 %t71, label %while.body11488, label %while.end11489 +while.body11488: + %t72 = load ptr, ptr %a1 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic11534, label %ok11535 +panic11534: + call void @finch_panic(ptr @.str.7379, i64 288, ptr @.str.7380) + unreachable +ok11535: + %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = add i64 %t75, 1 + store i64 %t76, ptr %t74 + br label %while.cond11487 +while.end11489: + ret void +} + +define internal { ptr, i64, i64 } @finch.json.unexpected(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a18 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a29 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a34 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca { ptr, i64, i64 }, align 16 + %a51 = alloca { ptr, i64, i64 }, align 16 + %a52 = alloca { ptr, i64, i64 }, align 16 + %a53 = alloca { ptr, i64, i64 }, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a56 = alloca { ptr, i64, i64 }, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a59 = alloca { ptr, i64, i64 }, align 16 + %a62 = alloca { ptr, i64, i64 }, align 16 + %a63 = alloca { ptr, i64, i64 }, align 16 + %a64 = alloca { ptr, i64, i64 }, align 16 + %a65 = alloca { ptr, i64, i64 }, align 16 + %a67 = alloca { ptr, i64, i64 }, align 16 + %a68 = alloca { ptr, i64, i64 }, align 16 + %a69 = alloca { ptr, i64, i64 }, align 16 + %a70 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a77 = alloca { ptr, i64, i64 }, align 16 + %a78 = alloca { ptr, i64, i64 }, align 16 + %a80 = alloca { ptr, i64, i64 }, align 16 + %a81 = alloca { ptr, i64, i64 }, align 16 + %a82 = alloca { ptr, i64, i64 }, align 16 + %a83 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic11536, label %ok11537 +panic11536: + call void @finch_panic(ptr @.str.7381, i64 293, ptr @.str.7382) + unreachable +ok11537: + %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 1 + %t6 = load i64, ptr %t5 + %t7 = load ptr, ptr %a1 + %t8 = icmp eq ptr %t7, null + br i1 %t8, label %panic11538, label %ok11539 +panic11538: + call void @finch_panic(ptr @.str.7383, i64 293, ptr @.str.7384) + unreachable +ok11539: + %t9 = getelementptr inbounds %S.json.Reader, ptr %t7, i32 0, i32 0 + %t10 = getelementptr inbounds { ptr, i64, i64 }, ptr %t9, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = icmp sge i64 %t6, %t11 + br i1 %t12, label %then11540, label %endif11542 +then11540: + %t13 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.7385, i64 26, i64 0 }, ptr %a15 + store { ptr, i64, i64 } %t13, ptr %a16 + call void @finch_str_concat(ptr %a14, ptr %a15, ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a14 + store { ptr, i64, i64 } %t17, ptr %a19 + store { ptr, i64, i64 } { ptr @.str.7386, i64 12, i64 0 }, ptr %a20 + call void @finch_str_concat(ptr %a18, ptr %a19, ptr %a20) + store { ptr, i64, i64 } %t17, ptr %a21 + call void @finch_str_drop(ptr %a21) + %t22 = load { ptr, i64, i64 }, ptr %a18 + %t23 = load ptr, ptr %a1 + %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) + store { ptr, i64, i64 } %t22, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t22, ptr %a28 + call void @finch_str_drop(ptr %a28) + store { ptr, i64, i64 } %t24, ptr %a29 + call void @finch_str_drop(ptr %a29) + %t30 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t30, ptr %a32 + store { ptr, i64, i64 } { ptr @.str.7387, i64 1, i64 0 }, ptr %a33 + call void @finch_str_concat(ptr %a31, ptr %a32, ptr %a33) + store { ptr, i64, i64 } %t30, ptr %a34 + call void @finch_str_drop(ptr %a34) + %t35 = load { ptr, i64, i64 }, ptr %a31 + ret { ptr, i64, i64 } %t35 +endif11542: + %t36 = load ptr, ptr %a1 + %t37 = icmp eq ptr %t36, null + br i1 %t37, label %panic11543, label %ok11544 +panic11543: + call void @finch_panic(ptr @.str.7389, i64 296, ptr @.str.7390) + unreachable +ok11544: + %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic11545, label %ok11546 +panic11545: + call void @finch_panic(ptr @.str.7391, i64 296, ptr @.str.7392) + unreachable +ok11546: + %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = load { ptr, i64, i64 }, ptr %t38 + %t44 = extractvalue { ptr, i64, i64 } %t43, 1 + %t45 = icmp uge i64 %t42, %t44 + br i1 %t45, label %range11547, label %inrange11548 +range11547: + call void @finch_panic_index(ptr @.str.7393, i64 296, i64 %t42, i64 %t44) + unreachable +inrange11548: + %t46 = extractvalue { ptr, i64, i64 } %t43, 0 + %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 + %t48 = load i8, ptr %t47 + call void @finch_str_from_char(ptr %a49, i8 signext %t48) + %t50 = load { ptr, i64, i64 }, ptr %a49 + store { ptr, i64, i64 } { ptr @.str.7388, i64 13, i64 0 }, ptr %a52 + store { ptr, i64, i64 } %t50, ptr %a53 + call void @finch_str_concat(ptr %a51, ptr %a52, ptr %a53) + store { ptr, i64, i64 } %t50, ptr %a54 + call void @finch_str_drop(ptr %a54) + %t55 = load { ptr, i64, i64 }, ptr %a51 + store { ptr, i64, i64 } %t55, ptr %a57 + store { ptr, i64, i64 } { ptr @.str.7394, i64 8, i64 0 }, ptr %a58 + call void @finch_str_concat(ptr %a56, ptr %a57, ptr %a58) + store { ptr, i64, i64 } %t55, ptr %a59 + call void @finch_str_drop(ptr %a59) + %t60 = load { ptr, i64, i64 }, ptr %a56 + %t61 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t60, ptr %a63 + store { ptr, i64, i64 } %t61, ptr %a64 + call void @finch_str_concat(ptr %a62, ptr %a63, ptr %a64) + store { ptr, i64, i64 } %t60, ptr %a65 + call void @finch_str_drop(ptr %a65) + %t66 = load { ptr, i64, i64 }, ptr %a62 + store { ptr, i64, i64 } %t66, ptr %a68 + store { ptr, i64, i64 } { ptr @.str.7395, i64 12, i64 0 }, ptr %a69 + call void @finch_str_concat(ptr %a67, ptr %a68, ptr %a69) + store { ptr, i64, i64 } %t66, ptr %a70 + call void @finch_str_drop(ptr %a70) + %t71 = load { ptr, i64, i64 }, ptr %a67 + %t72 = load ptr, ptr %a1 + %t73 = call { ptr, i64, i64 } @finch.json.where(ptr %t72) + store { ptr, i64, i64 } %t71, ptr %a75 + store { ptr, i64, i64 } %t73, ptr %a76 + call void @finch_str_concat(ptr %a74, ptr %a75, ptr %a76) + store { ptr, i64, i64 } %t71, ptr %a77 + call void @finch_str_drop(ptr %a77) + store { ptr, i64, i64 } %t73, ptr %a78 + call void @finch_str_drop(ptr %a78) + %t79 = load { ptr, i64, i64 }, ptr %a74 + store { ptr, i64, i64 } %t79, ptr %a81 + store { ptr, i64, i64 } { ptr @.str.7396, i64 1, i64 0 }, ptr %a82 + call void @finch_str_concat(ptr %a80, ptr %a81, ptr %a82) + store { ptr, i64, i64 } %t79, ptr %a83 + call void @finch_str_drop(ptr %a83) + %t84 = load { ptr, i64, i64 }, ptr %a80 + ret { ptr, i64, i64 } %t84 +} + +define internal i1 @finch.json.comes(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a20 = alloca { ptr, i64, i64 }, align 16 + %a21 = alloca { ptr, i64, i64 }, align 16 + %a35 = alloca { ptr, i64, i64 }, align 16 + %a36 = alloca { ptr, i64, i64 }, align 16 + %a39 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = icmp eq ptr %t3, null + br i1 %t4, label %panic11549, label %ok11550 +panic11549: + call void @finch_panic(ptr @.str.7397, i64 301, ptr @.str.7398) + unreachable +ok11550: + %t5 = getelementptr inbounds %S.json.Reader, ptr %t3, i32 0, i32 0 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i32 0, i32 1 + %t7 = load i64, ptr %t6 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic11551, label %ok11552 +panic11551: + call void @finch_panic(ptr @.str.7399, i64 301, ptr @.str.7400) + unreachable +ok11552: + %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 + %t11 = load i64, ptr %t10 + %t12 = sub i64 %t7, %t11 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sge i64 %t12, %t14 + br label %logic.from11553 +logic.from11553: + br i1 %t15, label %logic.rhs11554, label %logic.end11555 +logic.rhs11554: + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic11556, label %ok11557 +panic11556: + call void @finch_panic(ptr @.str.7401, i64 301, ptr @.str.7402) + unreachable +ok11557: + %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 + %t19 = load { ptr, i64, i64 }, ptr %t18 + store { ptr, i64, i64 } %t19, ptr %a20 + %t22 = load ptr, ptr %a1 + %t23 = icmp eq ptr %t22, null + br i1 %t23, label %panic11558, label %ok11559 +panic11558: + call void @finch_panic(ptr @.str.7404, i64 301, ptr @.str.7405) + unreachable +ok11559: + %t24 = getelementptr inbounds %S.json.Reader, ptr %t22, i32 0, i32 1 + %t25 = load i64, ptr %t24 + %t26 = load ptr, ptr %a1 + %t27 = icmp eq ptr %t26, null + br i1 %t27, label %panic11560, label %ok11561 +panic11560: + call void @finch_panic(ptr @.str.7406, i64 301, ptr @.str.7407) + unreachable +ok11561: + %t28 = getelementptr inbounds %S.json.Reader, ptr %t26, i32 0, i32 1 + %t29 = load i64, ptr %t28 + %t30 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = add i64 %t29, %t31 + call void @finch_str_sub(ptr %a21, ptr %a20, i64 %t25, i64 %t32, ptr @.str.7403, i64 301) + %t33 = load { ptr, i64, i64 }, ptr %a21 + %t34 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } %t33, ptr %a35 + store { ptr, i64, i64 } %t34, ptr %a36 + %t37 = call i32 @finch_str_eq(ptr %a35, ptr %a36) + %t38 = icmp ne i32 %t37, 0 + store { ptr, i64, i64 } %t33, ptr %a39 + call void @finch_str_drop(ptr %a39) + br label %logic.rend11562 +logic.rend11562: + br label %logic.end11555 +logic.end11555: + %t40 = phi i1 [ false, %logic.from11553 ], [ %t38, %logic.rend11562 ] + ret i1 %t40 +} + +define internal { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %p0, { ptr, i64, i64 } %p1) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a9 = alloca { ptr, i64, i64 }, align 16 + %a10 = alloca { ptr, i64, i64 }, align 16 + %a11 = alloca { ptr, i64, i64 }, align 16 + %a13 = alloca { ptr, i64, i64 }, align 16 + %a14 = alloca { ptr, i64, i64 }, align 16 + %a15 = alloca { ptr, i64, i64 }, align 16 + %a16 = alloca { ptr, i64, i64 }, align 16 + %a19 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + store { ptr, i64, i64 } %p1, ptr %a2 + %t3 = load ptr, ptr %a1 + %t4 = load { ptr, i64, i64 }, ptr %a2 + %t5 = call i1 @finch.json.comes(ptr %t3, { ptr, i64, i64 } %t4) + %t6 = xor i1 %t5, true + br i1 %t6, label %then11563, label %endif11565 +then11563: + %t7 = load ptr, ptr %a1 + %t8 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } { ptr @.str.7408, i64 1, i64 0 }, ptr %a10 + store { ptr, i64, i64 } %t8, ptr %a11 + call void @finch_str_concat(ptr %a9, ptr %a10, ptr %a11) + %t12 = load { ptr, i64, i64 }, ptr %a9 + store { ptr, i64, i64 } %t12, ptr %a14 + store { ptr, i64, i64 } { ptr @.str.7409, i64 1, i64 0 }, ptr %a15 + call void @finch_str_concat(ptr %a13, ptr %a14, ptr %a15) + store { ptr, i64, i64 } %t12, ptr %a16 + call void @finch_str_drop(ptr %a16) + %t17 = load { ptr, i64, i64 }, ptr %a13 + %t18 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t7, { ptr, i64, i64 } %t17) + store { ptr, i64, i64 } %t17, ptr %a19 + call void @finch_str_drop(ptr %a19) + %t20 = insertvalue { i1, i8, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t18, 2 + ret { i1, i8, { ptr, i64, i64 } } %t20 +endif11565: + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic11566, label %ok11567 +panic11566: + call void @finch_panic(ptr @.str.7410, i64 308, ptr @.str.7411) + unreachable +ok11567: + %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 + %t26 = load i64, ptr %t25 + %t27 = add i64 %t26, %t22 + store i64 %t27, ptr %t25 + ret { i1, i8, { ptr, i64, i64 } } { i1 true, i8 0, { ptr, i64, i64 } zeroinitializer } +} + +define internal i64 @finch.json.hex_value(i8 %p0) { +entry: + %a1 = alloca i8, align 16 + store i8 %p0, ptr %a1 + %t2 = load i8, ptr %a1 + %t3 = icmp uge i8 %t2, 48 + br label %logic.from11568 +logic.from11568: + br i1 %t3, label %logic.rhs11569, label %logic.end11570 +logic.rhs11569: + %t4 = load i8, ptr %a1 + %t5 = icmp ule i8 %t4, 57 + br label %logic.rend11571 +logic.rend11571: + br label %logic.end11570 +logic.end11570: + %t6 = phi i1 [ false, %logic.from11568 ], [ %t5, %logic.rend11571 ] + br i1 %t6, label %then11572, label %endif11574 +then11572: + %t7 = load i8, ptr %a1 + %t8 = zext i8 %t7 to i64 + %t9 = zext i8 48 to i64 + %t10 = sub i64 %t8, %t9 + ret i64 %t10 +endif11574: + %t11 = load i8, ptr %a1 + %t12 = icmp uge i8 %t11, 97 + br label %logic.from11575 +logic.from11575: + br i1 %t12, label %logic.rhs11576, label %logic.end11577 +logic.rhs11576: + %t13 = load i8, ptr %a1 + %t14 = icmp ule i8 %t13, 102 + br label %logic.rend11578 +logic.rend11578: + br label %logic.end11577 +logic.end11577: + %t15 = phi i1 [ false, %logic.from11575 ], [ %t14, %logic.rend11578 ] + br i1 %t15, label %then11579, label %endif11581 +then11579: + %t16 = load i8, ptr %a1 + %t17 = zext i8 %t16 to i64 + %t18 = zext i8 97 to i64 + %t19 = sub i64 %t17, %t18 + %t20 = add i64 %t19, 10 + ret i64 %t20 +endif11581: + %t21 = load i8, ptr %a1 + %t22 = icmp uge i8 %t21, 65 + br label %logic.from11582 +logic.from11582: + br i1 %t22, label %logic.rhs11583, label %logic.end11584 +logic.rhs11583: + %t23 = load i8, ptr %a1 + %t24 = icmp ule i8 %t23, 70 + br label %logic.rend11585 +logic.rend11585: + br label %logic.end11584 +logic.end11584: + %t25 = phi i1 [ false, %logic.from11582 ], [ %t24, %logic.rend11585 ] + br i1 %t25, label %then11586, label %endif11588 +then11586: + %t26 = load i8, ptr %a1 + %t27 = zext i8 %t26 to i64 + %t28 = zext i8 65 to i64 + %t29 = sub i64 %t27, %t28 + %t30 = add i64 %t29, 10 + ret i64 %t30 +endif11588: + ret i64 -1 +} + +define internal { ptr, i64, i64 } @finch.json.utf8(i64 %p0) { +entry: + %a1 = alloca i64, align 16 + %a2 = alloca { ptr, i64, i64 }, align 16 + %a101 = alloca { ptr, i64, i64 }, align 16 + %a102 = alloca { ptr, i64, i64 }, align 16 + store i64 %p0, ptr %a1 + store { ptr, i64, i64 } zeroinitializer, ptr %a2 + %t3 = load i64, ptr %a1 + %t4 = icmp slt i64 %t3, 128 + br i1 %t4, label %then11589, label %else11590 +then11589: + %t5 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t6 = load i64, ptr %a1 + %t7 = trunc i64 %t6 to i8 + %t8 = load i64, ptr %t5 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t9, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a2 + %t11 = getelementptr inbounds i8, ptr %t10, i64 %t8 + store i8 %t7, ptr %t11 + store i64 %t9, ptr %t5 + br label %endif11591 +else11590: + %t12 = load i64, ptr %a1 + %t13 = icmp slt i64 %t12, 2048 + br i1 %t13, label %then11592, label %else11593 +then11592: + %t14 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t15 = load i64, ptr %a1 + %t16 = sdiv i64 %t15, 64 + %t17 = add i64 192, %t16 + %t18 = trunc i64 %t17 to i8 + %t19 = load i64, ptr %t14 + %t20 = add i64 %t19, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t20, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t21 = load ptr, ptr %a2 + %t22 = getelementptr inbounds i8, ptr %t21, i64 %t19 + store i8 %t18, ptr %t22 + store i64 %t20, ptr %t14 + %t23 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t24 = load i64, ptr %a1 + %t25 = srem i64 %t24, 64 + %t26 = add i64 128, %t25 + %t27 = trunc i64 %t26 to i8 + %t28 = load i64, ptr %t23 + %t29 = add i64 %t28, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t29, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t30 = load ptr, ptr %a2 + %t31 = getelementptr inbounds i8, ptr %t30, i64 %t28 + store i8 %t27, ptr %t31 + store i64 %t29, ptr %t23 + br label %endif11594 +else11593: + %t32 = load i64, ptr %a1 + %t33 = icmp slt i64 %t32, 65536 + br i1 %t33, label %then11595, label %else11596 +then11595: + %t34 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t35 = load i64, ptr %a1 + %t36 = sdiv i64 %t35, 4096 + %t37 = add i64 224, %t36 + %t38 = trunc i64 %t37 to i8 + %t39 = load i64, ptr %t34 + %t40 = add i64 %t39, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t40, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t41 = load ptr, ptr %a2 + %t42 = getelementptr inbounds i8, ptr %t41, i64 %t39 + store i8 %t38, ptr %t42 + store i64 %t40, ptr %t34 + %t43 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t44 = load i64, ptr %a1 + %t45 = sdiv i64 %t44, 64 + %t46 = srem i64 %t45, 64 + %t47 = add i64 128, %t46 + %t48 = trunc i64 %t47 to i8 + %t49 = load i64, ptr %t43 + %t50 = add i64 %t49, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t50, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t51 = load ptr, ptr %a2 + %t52 = getelementptr inbounds i8, ptr %t51, i64 %t49 + store i8 %t48, ptr %t52 + store i64 %t50, ptr %t43 + %t53 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t54 = load i64, ptr %a1 + %t55 = srem i64 %t54, 64 + %t56 = add i64 128, %t55 + %t57 = trunc i64 %t56 to i8 + %t58 = load i64, ptr %t53 + %t59 = add i64 %t58, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t59, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t60 = load ptr, ptr %a2 + %t61 = getelementptr inbounds i8, ptr %t60, i64 %t58 + store i8 %t57, ptr %t61 + store i64 %t59, ptr %t53 + br label %endif11597 +else11596: + %t62 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t63 = load i64, ptr %a1 + %t64 = sdiv i64 %t63, 262144 + %t65 = add i64 240, %t64 + %t66 = trunc i64 %t65 to i8 + %t67 = load i64, ptr %t62 + %t68 = add i64 %t67, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t68, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t69 = load ptr, ptr %a2 + %t70 = getelementptr inbounds i8, ptr %t69, i64 %t67 + store i8 %t66, ptr %t70 + store i64 %t68, ptr %t62 + %t71 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t72 = load i64, ptr %a1 + %t73 = sdiv i64 %t72, 4096 + %t74 = srem i64 %t73, 64 + %t75 = add i64 128, %t74 + %t76 = trunc i64 %t75 to i8 + %t77 = load i64, ptr %t71 + %t78 = add i64 %t77, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t78, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t79 = load ptr, ptr %a2 + %t80 = getelementptr inbounds i8, ptr %t79, i64 %t77 + store i8 %t76, ptr %t80 + store i64 %t78, ptr %t71 + %t81 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t82 = load i64, ptr %a1 + %t83 = sdiv i64 %t82, 64 + %t84 = srem i64 %t83, 64 + %t85 = add i64 128, %t84 + %t86 = trunc i64 %t85 to i8 + %t87 = load i64, ptr %t81 + %t88 = add i64 %t87, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t88, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t89 = load ptr, ptr %a2 + %t90 = getelementptr inbounds i8, ptr %t89, i64 %t87 + store i8 %t86, ptr %t90 + store i64 %t88, ptr %t81 + %t91 = getelementptr inbounds { ptr, i64, i64 }, ptr %a2, i32 0, i32 1 + %t92 = load i64, ptr %a1 + %t93 = srem i64 %t92, 64 + %t94 = add i64 128, %t93 + %t95 = trunc i64 %t94 to i8 + %t96 = load i64, ptr %t91 + %t97 = add i64 %t96, 1 + call void @finch_arr_reserve(ptr %a2, i64 %t97, i64 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)) + %t98 = load ptr, ptr %a2 + %t99 = getelementptr inbounds i8, ptr %t98, i64 %t96 + store i8 %t95, ptr %t99 + store i64 %t97, ptr %t91 + br label %endif11597 +endif11597: + br label %endif11594 +endif11594: + br label %endif11591 +endif11591: + %t100 = load { ptr, i64, i64 }, ptr %a2 + store { ptr, i64, i64 } zeroinitializer, ptr %a101 + store { ptr, i64, i64 } %t100, ptr %a102 + call void @finch_str_from_bytes(ptr %a101, ptr %a102) + %t103 = load { ptr, i64, i64 }, ptr %a101 + call void @finch.drop.arr_u8(ptr %a2) + ret { ptr, i64, i64 } %t103 +} + +define internal { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a2 = alloca i64, align 16 + %a3 = alloca i64, align 16 + store ptr %p0, ptr %a1 + store i64 0, ptr %a2 + store i64 0, ptr %a3 + br label %for.cond11598 +for.cond11598: + %t4 = load i64, ptr %a3 + %t5 = icmp slt i64 %t4, 4 + br i1 %t5, label %for.body11599, label %for.end11601 +for.body11599: + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11602, label %ok11603 +panic11602: + call void @finch_panic(ptr @.str.7412, i64 348, ptr @.str.7413) + unreachable +ok11603: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic11604, label %ok11605 +panic11604: + call void @finch_panic(ptr @.str.7414, i64 348, ptr @.str.7415) + unreachable +ok11605: + %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sge i64 %t9, %t14 + br label %logic.from11606 +logic.from11606: + br i1 %t15, label %logic.end11608, label %logic.rhs11607 +logic.rhs11607: + %t16 = load ptr, ptr %a1 + %t17 = icmp eq ptr %t16, null + br i1 %t17, label %panic11609, label %ok11610 +panic11609: + call void @finch_panic(ptr @.str.7416, i64 348, ptr @.str.7417) + unreachable +ok11610: + %t18 = getelementptr inbounds %S.json.Reader, ptr %t16, i32 0, i32 0 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic11611, label %ok11612 +panic11611: + call void @finch_panic(ptr @.str.7418, i64 348, ptr @.str.7419) + unreachable +ok11612: + %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 1 + %t22 = load i64, ptr %t21 + %t23 = load { ptr, i64, i64 }, ptr %t18 + %t24 = extractvalue { ptr, i64, i64 } %t23, 1 + %t25 = icmp uge i64 %t22, %t24 + br i1 %t25, label %range11613, label %inrange11614 +range11613: + call void @finch_panic_index(ptr @.str.7420, i64 348, i64 %t22, i64 %t24) + unreachable +inrange11614: + %t26 = extractvalue { ptr, i64, i64 } %t23, 0 + %t27 = getelementptr inbounds i8, ptr %t26, i64 %t22 + %t28 = load i8, ptr %t27 + %t29 = call i64 @finch.json.hex_value(i8 %t28) + %t30 = icmp slt i64 %t29, 0 + br label %logic.rend11615 +logic.rend11615: + br label %logic.end11608 +logic.end11608: + %t31 = phi i1 [ true, %logic.from11606 ], [ %t30, %logic.rend11615 ] + br i1 %t31, label %then11616, label %endif11618 +then11616: + %t32 = load ptr, ptr %a1 + %t33 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t32, { ptr, i64, i64 } { ptr @.str.7421, i64 19, i64 0 }) + %t34 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t33, 2 + ret { i1, i64, { ptr, i64, i64 } } %t34 +endif11618: + %t35 = load i64, ptr %a2 + %t36 = mul i64 %t35, 16 + %t37 = load ptr, ptr %a1 + %t38 = icmp eq ptr %t37, null + br i1 %t38, label %panic11619, label %ok11620 +panic11619: + call void @finch_panic(ptr @.str.7422, i64 351, ptr @.str.7423) + unreachable +ok11620: + %t39 = getelementptr inbounds %S.json.Reader, ptr %t37, i32 0, i32 0 + %t40 = load ptr, ptr %a1 + %t41 = icmp eq ptr %t40, null + br i1 %t41, label %panic11621, label %ok11622 +panic11621: + call void @finch_panic(ptr @.str.7424, i64 351, ptr @.str.7425) + unreachable +ok11622: + %t42 = getelementptr inbounds %S.json.Reader, ptr %t40, i32 0, i32 1 + %t43 = load i64, ptr %t42 + %t44 = load { ptr, i64, i64 }, ptr %t39 + %t45 = extractvalue { ptr, i64, i64 } %t44, 1 + %t46 = icmp uge i64 %t43, %t45 + br i1 %t46, label %range11623, label %inrange11624 +range11623: + call void @finch_panic_index(ptr @.str.7426, i64 351, i64 %t43, i64 %t45) + unreachable +inrange11624: + %t47 = extractvalue { ptr, i64, i64 } %t44, 0 + %t48 = getelementptr inbounds i8, ptr %t47, i64 %t43 + %t49 = load i8, ptr %t48 + %t50 = call i64 @finch.json.hex_value(i8 %t49) + %t51 = add i64 %t36, %t50 + store i64 %t51, ptr %a2 + %t52 = load ptr, ptr %a1 + %t53 = icmp eq ptr %t52, null + br i1 %t53, label %panic11625, label %ok11626 +panic11625: + call void @finch_panic(ptr @.str.7427, i64 352, ptr @.str.7428) + unreachable +ok11626: + %t54 = getelementptr inbounds %S.json.Reader, ptr %t52, i32 0, i32 1 + %t55 = load i64, ptr %t54 + %t56 = add i64 %t55, 1 + store i64 %t56, ptr %t54 + br label %for.step11600 +for.step11600: + %t57 = load i64, ptr %a3 + %t58 = add i64 %t57, 1 + store i64 %t58, ptr %a3 + br label %for.cond11598 +for.end11601: + %t59 = load i64, ptr %a2 + %t60 = insertvalue { i1, i64, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t61 = insertvalue { i1, i64, { ptr, i64, i64 } } %t60, i64 %t59, 1 + ret { i1, i64, { ptr, i64, i64 } } %t61 +} + +define internal { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a7 = alloca { ptr, i64, i64 }, align 16 + %a12 = alloca i64, align 16 + %a25 = alloca { ptr, i64, i64 }, align 16 + %a26 = alloca { ptr, i64, i64 }, align 16 + %a27 = alloca { ptr, i64, i64 }, align 16 + %a28 = alloca { ptr, i64, i64 }, align 16 + %a30 = alloca { ptr, i64, i64 }, align 16 + %a31 = alloca { ptr, i64, i64 }, align 16 + %a32 = alloca { ptr, i64, i64 }, align 16 + %a33 = alloca { ptr, i64, i64 }, align 16 + %a49 = alloca i8, align 16 + %a57 = alloca { ptr, i64, i64 }, align 16 + %a58 = alloca { ptr, i64, i64 }, align 16 + %a75 = alloca { ptr, i64, i64 }, align 16 + %a76 = alloca { ptr, i64, i64 }, align 16 + %a85 = alloca { ptr, i64, i64 }, align 16 + %a86 = alloca { ptr, i64, i64 }, align 16 + %a87 = alloca { ptr, i64, i64 }, align 16 + %a88 = alloca { ptr, i64, i64 }, align 16 + %a90 = alloca { ptr, i64, i64 }, align 16 + %a91 = alloca { ptr, i64, i64 }, align 16 + %a92 = alloca { ptr, i64, i64 }, align 16 + %a93 = alloca { ptr, i64, i64 }, align 16 + %a108 = alloca { ptr, i64, i64 }, align 16 + %a109 = alloca { ptr, i64, i64 }, align 16 + %a127 = alloca i8, align 16 + %a180 = alloca { ptr, i64, i64 }, align 16 + %a195 = alloca i64, align 16 + %a216 = alloca i64, align 16 + %a232 = alloca { ptr, i64, i64 }, align 16 + %a234 = alloca { ptr, i64, i64 }, align 16 + %a235 = alloca { ptr, i64, i64 }, align 16 + %a236 = alloca { ptr, i64, i64 }, align 16 + %a237 = alloca { ptr, i64, i64 }, align 16 + %a239 = alloca { ptr, i64, i64 }, align 16 + %a240 = alloca { ptr, i64, i64 }, align 16 + %a241 = alloca { ptr, i64, i64 }, align 16 + %a242 = alloca { ptr, i64, i64 }, align 16 + %a246 = alloca { ptr, i64, i64 }, align 16 + %a247 = alloca { ptr, i64, i64 }, align 16 + %a248 = alloca { ptr, i64, i64 }, align 16 + %a249 = alloca { ptr, i64, i64 }, align 16 + %a250 = alloca { ptr, i64, i64 }, align 16 + %a252 = alloca { ptr, i64, i64 }, align 16 + %a253 = alloca { ptr, i64, i64 }, align 16 + %a254 = alloca { ptr, i64, i64 }, align 16 + %a255 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11627, label %ok11628 +panic11627: + call void @finch_panic(ptr @.str.7429, i64 358, ptr @.str.7430) + unreachable +ok11628: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + %t6 = add i64 %t5, 1 + store i64 %t6, ptr %t4 + store { ptr, i64, i64 } zeroinitializer, ptr %a7 + %t8 = load ptr, ptr %a1 + %t9 = icmp eq ptr %t8, null + br i1 %t9, label %panic11629, label %ok11630 +panic11629: + call void @finch_panic(ptr @.str.7431, i64 360, ptr @.str.7432) + unreachable +ok11630: + %t10 = getelementptr inbounds %S.json.Reader, ptr %t8, i32 0, i32 1 + %t11 = load i64, ptr %t10 + store i64 %t11, ptr %a12 + br label %while.cond11631 +while.cond11631: + br label %while.body11632 +while.body11632: + %t13 = load ptr, ptr %a1 + %t14 = icmp eq ptr %t13, null + br i1 %t14, label %panic11634, label %ok11635 +panic11634: + call void @finch_panic(ptr @.str.7433, i64 362, ptr @.str.7434) + unreachable +ok11635: + %t15 = getelementptr inbounds %S.json.Reader, ptr %t13, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = load ptr, ptr %a1 + %t18 = icmp eq ptr %t17, null + br i1 %t18, label %panic11636, label %ok11637 +panic11636: + call void @finch_panic(ptr @.str.7435, i64 362, ptr @.str.7436) + unreachable +ok11637: + %t19 = getelementptr inbounds %S.json.Reader, ptr %t17, i32 0, i32 0 + %t20 = getelementptr inbounds { ptr, i64, i64 }, ptr %t19, i32 0, i32 1 + %t21 = load i64, ptr %t20 + %t22 = icmp sge i64 %t16, %t21 + br i1 %t22, label %then11638, label %endif11640 +then11638: + %t23 = load ptr, ptr %a1 + %t24 = call { ptr, i64, i64 } @finch.json.where(ptr %t23) + store { ptr, i64, i64 } { ptr @.str.7437, i64 30, i64 0 }, ptr %a26 + store { ptr, i64, i64 } %t24, ptr %a27 + call void @finch_str_concat(ptr %a25, ptr %a26, ptr %a27) + store { ptr, i64, i64 } %t24, ptr %a28 + call void @finch_str_drop(ptr %a28) + %t29 = load { ptr, i64, i64 }, ptr %a25 + store { ptr, i64, i64 } %t29, ptr %a31 + store { ptr, i64, i64 } { ptr @.str.7438, i64 1, i64 0 }, ptr %a32 + call void @finch_str_concat(ptr %a30, ptr %a31, ptr %a32) + store { ptr, i64, i64 } %t29, ptr %a33 + call void @finch_str_drop(ptr %a33) + %t34 = load { ptr, i64, i64 }, ptr %a30 + call void @finch.drop.arr_str(ptr %a7) + %t35 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t34, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t35 +endif11640: + %t36 = load ptr, ptr %a1 + %t37 = icmp eq ptr %t36, null + br i1 %t37, label %panic11641, label %ok11642 +panic11641: + call void @finch_panic(ptr @.str.7439, i64 365, ptr @.str.7440) + unreachable +ok11642: + %t38 = getelementptr inbounds %S.json.Reader, ptr %t36, i32 0, i32 0 + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic11643, label %ok11644 +panic11643: + call void @finch_panic(ptr @.str.7441, i64 365, ptr @.str.7442) + unreachable +ok11644: + %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 1 + %t42 = load i64, ptr %t41 + %t43 = load { ptr, i64, i64 }, ptr %t38 + %t44 = extractvalue { ptr, i64, i64 } %t43, 1 + %t45 = icmp uge i64 %t42, %t44 + br i1 %t45, label %range11645, label %inrange11646 +range11645: + call void @finch_panic_index(ptr @.str.7443, i64 365, i64 %t42, i64 %t44) + unreachable +inrange11646: + %t46 = extractvalue { ptr, i64, i64 } %t43, 0 + %t47 = getelementptr inbounds i8, ptr %t46, i64 %t42 + %t48 = load i8, ptr %t47 + store i8 %t48, ptr %a49 + %t50 = load i8, ptr %a49 + %t51 = icmp eq i8 %t50, 34 + br i1 %t51, label %then11647, label %endif11649 +then11647: + %t52 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t53 = load ptr, ptr %a1 + %t54 = icmp eq ptr %t53, null + br i1 %t54, label %panic11650, label %ok11651 +panic11650: + call void @finch_panic(ptr @.str.7444, i64 367, ptr @.str.7445) + unreachable +ok11651: + %t55 = getelementptr inbounds %S.json.Reader, ptr %t53, i32 0, i32 0 + %t56 = load { ptr, i64, i64 }, ptr %t55 + store { ptr, i64, i64 } %t56, ptr %a57 + %t59 = load i64, ptr %a12 + %t60 = load ptr, ptr %a1 + %t61 = icmp eq ptr %t60, null + br i1 %t61, label %panic11652, label %ok11653 +panic11652: + call void @finch_panic(ptr @.str.7447, i64 367, ptr @.str.7448) + unreachable +ok11653: + %t62 = getelementptr inbounds %S.json.Reader, ptr %t60, i32 0, i32 1 + %t63 = load i64, ptr %t62 + call void @finch_str_sub(ptr %a58, ptr %a57, i64 %t59, i64 %t63, ptr @.str.7446, i64 367) + %t64 = load { ptr, i64, i64 }, ptr %a58 + %t65 = load i64, ptr %t52 + %t66 = add i64 %t65, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t66, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t67 = load ptr, ptr %a7 + %t68 = getelementptr inbounds { ptr, i64, i64 }, ptr %t67, i64 %t65 + store { ptr, i64, i64 } %t64, ptr %t68 + store i64 %t66, ptr %t52 + %t69 = load ptr, ptr %a1 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic11654, label %ok11655 +panic11654: + call void @finch_panic(ptr @.str.7449, i64 368, ptr @.str.7450) + unreachable +ok11655: + %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 1 + %t72 = load i64, ptr %t71 + %t73 = add i64 %t72, 1 + store i64 %t73, ptr %t71 + %t74 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + store { ptr, i64, i64 } { ptr @.str.7451, i64 0, i64 0 }, ptr %a75 + call void @finch_str_join(ptr %a76, ptr %a7, ptr %a75) + %t77 = load { ptr, i64, i64 }, ptr %a76 + call void @finch.drop.arr_str(ptr %a7) + %t78 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t79 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t78, { ptr, i64, i64 } %t77, 1 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t79 +endif11649: + %t80 = load i8, ptr %a49 + %t81 = zext i8 %t80 to i64 + %t82 = icmp slt i64 %t81, 32 + br i1 %t82, label %then11656, label %endif11658 +then11656: + %t83 = load ptr, ptr %a1 + %t84 = call { ptr, i64, i64 } @finch.json.where(ptr %t83) + store { ptr, i64, i64 } { ptr @.str.7452, i64 55, i64 0 }, ptr %a86 + store { ptr, i64, i64 } %t84, ptr %a87 + call void @finch_str_concat(ptr %a85, ptr %a86, ptr %a87) + store { ptr, i64, i64 } %t84, ptr %a88 + call void @finch_str_drop(ptr %a88) + %t89 = load { ptr, i64, i64 }, ptr %a85 + store { ptr, i64, i64 } %t89, ptr %a91 + store { ptr, i64, i64 } { ptr @.str.7453, i64 1, i64 0 }, ptr %a92 + call void @finch_str_concat(ptr %a90, ptr %a91, ptr %a92) + store { ptr, i64, i64 } %t89, ptr %a93 + call void @finch_str_drop(ptr %a93) + %t94 = load { ptr, i64, i64 }, ptr %a90 + call void @finch.drop.arr_str(ptr %a7) + %t95 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t94, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t95 +endif11658: + %t96 = load i8, ptr %a49 + %t97 = icmp ne i8 %t96, 92 + br i1 %t97, label %then11659, label %endif11661 +then11659: + %t98 = load ptr, ptr %a1 + %t99 = icmp eq ptr %t98, null + br i1 %t99, label %panic11662, label %ok11663 +panic11662: + call void @finch_panic(ptr @.str.7454, i64 375, ptr @.str.7455) + unreachable +ok11663: + %t100 = getelementptr inbounds %S.json.Reader, ptr %t98, i32 0, i32 1 + %t101 = load i64, ptr %t100 + %t102 = add i64 %t101, 1 + store i64 %t102, ptr %t100 + br label %while.cond11631 +endif11661: + %t103 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic11664, label %ok11665 +panic11664: + call void @finch_panic(ptr @.str.7456, i64 378, ptr @.str.7457) + unreachable +ok11665: + %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 0 + %t107 = load { ptr, i64, i64 }, ptr %t106 + store { ptr, i64, i64 } %t107, ptr %a108 + %t110 = load i64, ptr %a12 + %t111 = load ptr, ptr %a1 + %t112 = icmp eq ptr %t111, null + br i1 %t112, label %panic11666, label %ok11667 +panic11666: + call void @finch_panic(ptr @.str.7459, i64 378, ptr @.str.7460) + unreachable +ok11667: + %t113 = getelementptr inbounds %S.json.Reader, ptr %t111, i32 0, i32 1 + %t114 = load i64, ptr %t113 + call void @finch_str_sub(ptr %a109, ptr %a108, i64 %t110, i64 %t114, ptr @.str.7458, i64 378) + %t115 = load { ptr, i64, i64 }, ptr %a109 + %t116 = load i64, ptr %t103 + %t117 = add i64 %t116, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t117, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t118 = load ptr, ptr %a7 + %t119 = getelementptr inbounds { ptr, i64, i64 }, ptr %t118, i64 %t116 + store { ptr, i64, i64 } %t115, ptr %t119 + store i64 %t117, ptr %t103 + %t120 = load ptr, ptr %a1 + %t121 = icmp eq ptr %t120, null + br i1 %t121, label %panic11668, label %ok11669 +panic11668: + call void @finch_panic(ptr @.str.7461, i64 379, ptr @.str.7462) + unreachable +ok11669: + %t122 = getelementptr inbounds %S.json.Reader, ptr %t120, i32 0, i32 1 + %t123 = load i64, ptr %t122 + %t124 = add i64 %t123, 1 + store i64 %t124, ptr %t122 + %t125 = load ptr, ptr %a1 + %t126 = call i8 @finch.json.peek(ptr %t125) + store i8 %t126, ptr %a127 + %t128 = load ptr, ptr %a1 + %t129 = icmp eq ptr %t128, null + br i1 %t129, label %panic11670, label %ok11671 +panic11670: + call void @finch_panic(ptr @.str.7463, i64 381, ptr @.str.7464) + unreachable +ok11671: + %t130 = getelementptr inbounds %S.json.Reader, ptr %t128, i32 0, i32 1 + %t131 = load i64, ptr %t130 + %t132 = add i64 %t131, 1 + store i64 %t132, ptr %t130 + %t133 = load i8, ptr %a127 + %t134 = icmp eq i8 %t133, 110 + br i1 %t134, label %then11672, label %else11673 +then11672: + %t135 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t136 = load i64, ptr %t135 + %t137 = add i64 %t136, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t137, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t138 = load ptr, ptr %a7 + %t139 = getelementptr inbounds { ptr, i64, i64 }, ptr %t138, i64 %t136 + store { ptr, i64, i64 } { ptr @.str.7465, i64 1, i64 0 }, ptr %t139 + store i64 %t137, ptr %t135 + br label %endif11674 +else11673: + %t140 = load i8, ptr %a127 + %t141 = icmp eq i8 %t140, 116 + br i1 %t141, label %then11675, label %else11676 +then11675: + %t142 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t143 = load i64, ptr %t142 + %t144 = add i64 %t143, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t144, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t145 = load ptr, ptr %a7 + %t146 = getelementptr inbounds { ptr, i64, i64 }, ptr %t145, i64 %t143 + store { ptr, i64, i64 } { ptr @.str.7466, i64 1, i64 0 }, ptr %t146 + store i64 %t144, ptr %t142 + br label %endif11677 +else11676: + %t147 = load i8, ptr %a127 + %t148 = icmp eq i8 %t147, 114 + br i1 %t148, label %then11678, label %else11679 +then11678: + %t149 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t150 = load i64, ptr %t149 + %t151 = add i64 %t150, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t151, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t152 = load ptr, ptr %a7 + %t153 = getelementptr inbounds { ptr, i64, i64 }, ptr %t152, i64 %t150 + store { ptr, i64, i64 } { ptr @.str.7467, i64 1, i64 0 }, ptr %t153 + store i64 %t151, ptr %t149 + br label %endif11680 +else11679: + %t154 = load i8, ptr %a127 + %t155 = icmp eq i8 %t154, 98 + br i1 %t155, label %then11681, label %else11682 +then11681: + %t156 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t157 = call { ptr, i64, i64 } @finch.json.utf8(i64 8) + %t158 = load i64, ptr %t156 + %t159 = add i64 %t158, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t159, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t160 = load ptr, ptr %a7 + %t161 = getelementptr inbounds { ptr, i64, i64 }, ptr %t160, i64 %t158 + store { ptr, i64, i64 } %t157, ptr %t161 + store i64 %t159, ptr %t156 + br label %endif11683 +else11682: + %t162 = load i8, ptr %a127 + %t163 = icmp eq i8 %t162, 102 + br i1 %t163, label %then11684, label %else11685 +then11684: + %t164 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t165 = call { ptr, i64, i64 } @finch.json.utf8(i64 12) + %t166 = load i64, ptr %t164 + %t167 = add i64 %t166, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t167, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t168 = load ptr, ptr %a7 + %t169 = getelementptr inbounds { ptr, i64, i64 }, ptr %t168, i64 %t166 + store { ptr, i64, i64 } %t165, ptr %t169 + store i64 %t167, ptr %t164 + br label %endif11686 +else11685: + %t170 = load i8, ptr %a127 + %t171 = icmp eq i8 %t170, 34 + br label %logic.from11687 +logic.from11687: + br i1 %t171, label %logic.end11689, label %logic.rhs11688 +logic.rhs11688: + %t172 = load i8, ptr %a127 + %t173 = icmp eq i8 %t172, 92 + br label %logic.rend11690 +logic.rend11690: + br label %logic.end11689 +logic.end11689: + %t174 = phi i1 [ true, %logic.from11687 ], [ %t173, %logic.rend11690 ] + br label %logic.from11691 +logic.from11691: + br i1 %t174, label %logic.end11693, label %logic.rhs11692 +logic.rhs11692: + %t175 = load i8, ptr %a127 + %t176 = icmp eq i8 %t175, 47 + br label %logic.rend11694 +logic.rend11694: + br label %logic.end11693 +logic.end11693: + %t177 = phi i1 [ true, %logic.from11691 ], [ %t176, %logic.rend11694 ] + br i1 %t177, label %then11695, label %else11696 +then11695: + %t178 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t179 = load i8, ptr %a127 + call void @finch_str_from_char(ptr %a180, i8 signext %t179) + %t181 = load { ptr, i64, i64 }, ptr %a180 + %t182 = load i64, ptr %t178 + %t183 = add i64 %t182, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t183, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t184 = load ptr, ptr %a7 + %t185 = getelementptr inbounds { ptr, i64, i64 }, ptr %t184, i64 %t182 + store { ptr, i64, i64 } %t181, ptr %t185 + store i64 %t183, ptr %t178 + br label %endif11697 +else11696: + %t186 = load i8, ptr %a127 + %t187 = icmp eq i8 %t186, 117 + br i1 %t187, label %then11698, label %else11699 +then11698: + %t188 = load ptr, ptr %a1 + %t189 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t188) + %t190 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 0 + %t191 = xor i1 %t190, true + %t192 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 2 + %t193 = extractvalue { i1, i64, { ptr, i64, i64 } } %t189, 1 + br i1 %t191, label %try.failed11701, label %try.ok11702 +try.failed11701: + call void @finch.drop.arr_str(ptr %a7) + %t194 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t192, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t194 +try.ok11702: + store i64 %t193, ptr %a195 + %t196 = load i64, ptr %a195 + %t197 = icmp sge i64 %t196, 55296 + br label %logic.from11703 +logic.from11703: + br i1 %t197, label %logic.rhs11704, label %logic.end11705 +logic.rhs11704: + %t198 = load i64, ptr %a195 + %t199 = icmp slt i64 %t198, 56320 + br label %logic.rend11706 +logic.rend11706: + br label %logic.end11705 +logic.end11705: + %t200 = phi i1 [ false, %logic.from11703 ], [ %t199, %logic.rend11706 ] + br label %logic.from11707 +logic.from11707: + br i1 %t200, label %logic.rhs11708, label %logic.end11709 +logic.rhs11708: + %t201 = load ptr, ptr %a1 + %t202 = call i1 @finch.json.comes(ptr %t201, { ptr, i64, i64 } { ptr @.str.7468, i64 2, i64 0 }) + br label %logic.rend11710 +logic.rend11710: + br label %logic.end11709 +logic.end11709: + %t203 = phi i1 [ false, %logic.from11707 ], [ %t202, %logic.rend11710 ] + br i1 %t203, label %then11711, label %endif11713 +then11711: + %t204 = load ptr, ptr %a1 + %t205 = icmp eq ptr %t204, null + br i1 %t205, label %panic11714, label %ok11715 +panic11714: + call void @finch_panic(ptr @.str.7469, i64 398, ptr @.str.7470) + unreachable +ok11715: + %t206 = getelementptr inbounds %S.json.Reader, ptr %t204, i32 0, i32 1 + %t207 = load i64, ptr %t206 + %t208 = add i64 %t207, 2 + store i64 %t208, ptr %t206 + %t209 = load ptr, ptr %a1 + %t210 = call { i1, i64, { ptr, i64, i64 } } @finch.json.read_hex4(ptr %t209) + %t211 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 0 + %t212 = xor i1 %t211, true + %t213 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 2 + %t214 = extractvalue { i1, i64, { ptr, i64, i64 } } %t210, 1 + br i1 %t212, label %try.failed11716, label %try.ok11717 +try.failed11716: + call void @finch.drop.arr_str(ptr %a7) + %t215 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t213, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t215 +try.ok11717: + store i64 %t214, ptr %a216 + %t217 = load i64, ptr %a195 + %t218 = sub i64 %t217, 55296 + %t219 = mul i64 %t218, 1024 + %t220 = add i64 65536, %t219 + %t221 = load i64, ptr %a216 + %t222 = sub i64 %t221, 56320 + %t223 = add i64 %t220, %t222 + store i64 %t223, ptr %a195 + br label %endif11713 +endif11713: + %t224 = getelementptr inbounds { ptr, i64, i64 }, ptr %a7, i32 0, i32 1 + %t225 = load i64, ptr %a195 + %t226 = call { ptr, i64, i64 } @finch.json.utf8(i64 %t225) + %t227 = load i64, ptr %t224 + %t228 = add i64 %t227, 1 + call void @finch_arr_reserve(ptr %a7, i64 %t228, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t229 = load ptr, ptr %a7 + %t230 = getelementptr inbounds { ptr, i64, i64 }, ptr %t229, i64 %t227 + store { ptr, i64, i64 } %t226, ptr %t230 + store i64 %t228, ptr %t224 + br label %endif11700 +else11699: + %t231 = load i8, ptr %a127 + call void @finch_str_from_char(ptr %a232, i8 signext %t231) + %t233 = load { ptr, i64, i64 }, ptr %a232 + store { ptr, i64, i64 } { ptr @.str.7471, i64 22, i64 0 }, ptr %a235 + store { ptr, i64, i64 } %t233, ptr %a236 + call void @finch_str_concat(ptr %a234, ptr %a235, ptr %a236) + store { ptr, i64, i64 } %t233, ptr %a237 + call void @finch_str_drop(ptr %a237) + %t238 = load { ptr, i64, i64 }, ptr %a234 + store { ptr, i64, i64 } %t238, ptr %a240 + store { ptr, i64, i64 } { ptr @.str.7472, i64 12, i64 0 }, ptr %a241 + call void @finch_str_concat(ptr %a239, ptr %a240, ptr %a241) + store { ptr, i64, i64 } %t238, ptr %a242 + call void @finch_str_drop(ptr %a242) + %t243 = load { ptr, i64, i64 }, ptr %a239 + %t244 = load ptr, ptr %a1 + %t245 = call { ptr, i64, i64 } @finch.json.where(ptr %t244) + store { ptr, i64, i64 } %t243, ptr %a247 + store { ptr, i64, i64 } %t245, ptr %a248 + call void @finch_str_concat(ptr %a246, ptr %a247, ptr %a248) + store { ptr, i64, i64 } %t243, ptr %a249 + call void @finch_str_drop(ptr %a249) + store { ptr, i64, i64 } %t245, ptr %a250 + call void @finch_str_drop(ptr %a250) + %t251 = load { ptr, i64, i64 }, ptr %a246 + store { ptr, i64, i64 } %t251, ptr %a253 + store { ptr, i64, i64 } { ptr @.str.7473, i64 1, i64 0 }, ptr %a254 + call void @finch_str_concat(ptr %a252, ptr %a253, ptr %a254) + store { ptr, i64, i64 } %t251, ptr %a255 + call void @finch_str_drop(ptr %a255) + %t256 = load { ptr, i64, i64 }, ptr %a252 + call void @finch.drop.arr_str(ptr %a7) + %t257 = insertvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t256, 2 + ret { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t257 +endif11700: + br label %endif11697 +endif11697: + br label %endif11686 +endif11686: + br label %endif11683 +endif11683: + br label %endif11680 +endif11680: + br label %endif11677 +endif11677: + br label %endif11674 +endif11674: + %t258 = load ptr, ptr %a1 + %t259 = icmp eq ptr %t258, null + br i1 %t259, label %panic11718, label %ok11719 +panic11718: + call void @finch_panic(ptr @.str.7474, i64 406, ptr @.str.7475) + unreachable +ok11719: + %t260 = getelementptr inbounds %S.json.Reader, ptr %t258, i32 0, i32 1 + %t261 = load i64, ptr %t260 + store i64 %t261, ptr %a12 + br label %while.cond11631 +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a6 = alloca i64, align 16 + %a139 = alloca { ptr, i64, i64 }, align 16 + %a140 = alloca { ptr, i64, i64 }, align 16 + %a147 = alloca { ptr, i64, i64 }, align 16 + %a148 = alloca double, align 16 + %a149 = alloca { ptr, i64, i64 }, align 16 + %a153 = alloca { ptr, i64, i64 }, align 16 + %a155 = alloca { ptr, i64, i64 }, align 16 + %a163 = alloca double, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + %t3 = icmp eq ptr %t2, null + br i1 %t3, label %panic11720, label %ok11721 +panic11720: + call void @finch_panic(ptr @.str.7476, i64 411, ptr @.str.7477) + unreachable +ok11721: + %t4 = getelementptr inbounds %S.json.Reader, ptr %t2, i32 0, i32 1 + %t5 = load i64, ptr %t4 + store i64 %t5, ptr %a6 + %t7 = load ptr, ptr %a1 + %t8 = call i8 @finch.json.peek(ptr %t7) + %t9 = icmp eq i8 %t8, 45 + br i1 %t9, label %then11722, label %endif11724 +then11722: + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic11725, label %ok11726 +panic11725: + call void @finch_panic(ptr @.str.7478, i64 413, ptr @.str.7479) + unreachable +ok11726: + %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + store i64 %t14, ptr %t12 + br label %endif11724 +endif11724: + br label %while.cond11727 +while.cond11727: + %t15 = load ptr, ptr %a1 + %t16 = icmp eq ptr %t15, null + br i1 %t16, label %panic11730, label %ok11731 +panic11730: + call void @finch_panic(ptr @.str.7480, i64 415, ptr @.str.7481) + unreachable +ok11731: + %t17 = getelementptr inbounds %S.json.Reader, ptr %t15, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = load ptr, ptr %a1 + %t20 = icmp eq ptr %t19, null + br i1 %t20, label %panic11732, label %ok11733 +panic11732: + call void @finch_panic(ptr @.str.7482, i64 415, ptr @.str.7483) + unreachable +ok11733: + %t21 = getelementptr inbounds %S.json.Reader, ptr %t19, i32 0, i32 0 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %t21, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = icmp slt i64 %t18, %t23 + br label %logic.from11734 +logic.from11734: + br i1 %t24, label %logic.rhs11735, label %logic.end11736 +logic.rhs11735: + %t25 = load ptr, ptr %a1 + %t26 = icmp eq ptr %t25, null + br i1 %t26, label %panic11737, label %ok11738 +panic11737: + call void @finch_panic(ptr @.str.7484, i64 415, ptr @.str.7485) + unreachable +ok11738: + %t27 = getelementptr inbounds %S.json.Reader, ptr %t25, i32 0, i32 0 + %t28 = load ptr, ptr %a1 + %t29 = icmp eq ptr %t28, null + br i1 %t29, label %panic11739, label %ok11740 +panic11739: + call void @finch_panic(ptr @.str.7486, i64 415, ptr @.str.7487) + unreachable +ok11740: + %t30 = getelementptr inbounds %S.json.Reader, ptr %t28, i32 0, i32 1 + %t31 = load i64, ptr %t30 + %t32 = load { ptr, i64, i64 }, ptr %t27 + %t33 = extractvalue { ptr, i64, i64 } %t32, 1 + %t34 = icmp uge i64 %t31, %t33 + br i1 %t34, label %range11741, label %inrange11742 +range11741: + call void @finch_panic_index(ptr @.str.7488, i64 415, i64 %t31, i64 %t33) + unreachable +inrange11742: + %t35 = extractvalue { ptr, i64, i64 } %t32, 0 + %t36 = getelementptr inbounds i8, ptr %t35, i64 %t31 + %t37 = load i8, ptr %t36 + %t38 = icmp uge i8 %t37, 48 + br label %logic.from11743 +logic.from11743: + br i1 %t38, label %logic.rhs11744, label %logic.end11745 +logic.rhs11744: + %t39 = load ptr, ptr %a1 + %t40 = icmp eq ptr %t39, null + br i1 %t40, label %panic11746, label %ok11747 +panic11746: + call void @finch_panic(ptr @.str.7489, i64 415, ptr @.str.7490) + unreachable +ok11747: + %t41 = getelementptr inbounds %S.json.Reader, ptr %t39, i32 0, i32 0 + %t42 = load ptr, ptr %a1 + %t43 = icmp eq ptr %t42, null + br i1 %t43, label %panic11748, label %ok11749 +panic11748: + call void @finch_panic(ptr @.str.7491, i64 415, ptr @.str.7492) + unreachable +ok11749: + %t44 = getelementptr inbounds %S.json.Reader, ptr %t42, i32 0, i32 1 + %t45 = load i64, ptr %t44 + %t46 = load { ptr, i64, i64 }, ptr %t41 + %t47 = extractvalue { ptr, i64, i64 } %t46, 1 + %t48 = icmp uge i64 %t45, %t47 + br i1 %t48, label %range11750, label %inrange11751 +range11750: + call void @finch_panic_index(ptr @.str.7493, i64 415, i64 %t45, i64 %t47) + unreachable +inrange11751: + %t49 = extractvalue { ptr, i64, i64 } %t46, 0 + %t50 = getelementptr inbounds i8, ptr %t49, i64 %t45 + %t51 = load i8, ptr %t50 + %t52 = icmp ule i8 %t51, 57 + br label %logic.rend11752 +logic.rend11752: + br label %logic.end11745 +logic.end11745: + %t53 = phi i1 [ false, %logic.from11743 ], [ %t52, %logic.rend11752 ] + br label %logic.from11753 +logic.from11753: + br i1 %t53, label %logic.end11755, label %logic.rhs11754 +logic.rhs11754: + %t54 = load ptr, ptr %a1 + %t55 = icmp eq ptr %t54, null + br i1 %t55, label %panic11756, label %ok11757 +panic11756: + call void @finch_panic(ptr @.str.7494, i64 415, ptr @.str.7495) + unreachable +ok11757: + %t56 = getelementptr inbounds %S.json.Reader, ptr %t54, i32 0, i32 0 + %t57 = load ptr, ptr %a1 + %t58 = icmp eq ptr %t57, null + br i1 %t58, label %panic11758, label %ok11759 +panic11758: + call void @finch_panic(ptr @.str.7496, i64 415, ptr @.str.7497) + unreachable +ok11759: + %t59 = getelementptr inbounds %S.json.Reader, ptr %t57, i32 0, i32 1 + %t60 = load i64, ptr %t59 + %t61 = load { ptr, i64, i64 }, ptr %t56 + %t62 = extractvalue { ptr, i64, i64 } %t61, 1 + %t63 = icmp uge i64 %t60, %t62 + br i1 %t63, label %range11760, label %inrange11761 +range11760: + call void @finch_panic_index(ptr @.str.7498, i64 415, i64 %t60, i64 %t62) + unreachable +inrange11761: + %t64 = extractvalue { ptr, i64, i64 } %t61, 0 + %t65 = getelementptr inbounds i8, ptr %t64, i64 %t60 + %t66 = load i8, ptr %t65 + %t67 = icmp eq i8 %t66, 46 + br label %logic.rend11762 +logic.rend11762: + br label %logic.end11755 +logic.end11755: + %t68 = phi i1 [ true, %logic.from11753 ], [ %t67, %logic.rend11762 ] + br label %logic.from11763 +logic.from11763: + br i1 %t68, label %logic.end11765, label %logic.rhs11764 +logic.rhs11764: + %t69 = load ptr, ptr %a1 + %t70 = icmp eq ptr %t69, null + br i1 %t70, label %panic11766, label %ok11767 +panic11766: + call void @finch_panic(ptr @.str.7499, i64 415, ptr @.str.7500) + unreachable +ok11767: + %t71 = getelementptr inbounds %S.json.Reader, ptr %t69, i32 0, i32 0 + %t72 = load ptr, ptr %a1 + %t73 = icmp eq ptr %t72, null + br i1 %t73, label %panic11768, label %ok11769 +panic11768: + call void @finch_panic(ptr @.str.7501, i64 415, ptr @.str.7502) + unreachable +ok11769: + %t74 = getelementptr inbounds %S.json.Reader, ptr %t72, i32 0, i32 1 + %t75 = load i64, ptr %t74 + %t76 = load { ptr, i64, i64 }, ptr %t71 + %t77 = extractvalue { ptr, i64, i64 } %t76, 1 + %t78 = icmp uge i64 %t75, %t77 + br i1 %t78, label %range11770, label %inrange11771 +range11770: + call void @finch_panic_index(ptr @.str.7503, i64 415, i64 %t75, i64 %t77) + unreachable +inrange11771: + %t79 = extractvalue { ptr, i64, i64 } %t76, 0 + %t80 = getelementptr inbounds i8, ptr %t79, i64 %t75 + %t81 = load i8, ptr %t80 + %t82 = icmp eq i8 %t81, 101 + br label %logic.rend11772 +logic.rend11772: + br label %logic.end11765 +logic.end11765: + %t83 = phi i1 [ true, %logic.from11763 ], [ %t82, %logic.rend11772 ] + br label %logic.from11773 +logic.from11773: + br i1 %t83, label %logic.end11775, label %logic.rhs11774 +logic.rhs11774: + %t84 = load ptr, ptr %a1 + %t85 = icmp eq ptr %t84, null + br i1 %t85, label %panic11776, label %ok11777 +panic11776: + call void @finch_panic(ptr @.str.7504, i64 415, ptr @.str.7505) + unreachable +ok11777: + %t86 = getelementptr inbounds %S.json.Reader, ptr %t84, i32 0, i32 0 + %t87 = load ptr, ptr %a1 + %t88 = icmp eq ptr %t87, null + br i1 %t88, label %panic11778, label %ok11779 +panic11778: + call void @finch_panic(ptr @.str.7506, i64 415, ptr @.str.7507) + unreachable +ok11779: + %t89 = getelementptr inbounds %S.json.Reader, ptr %t87, i32 0, i32 1 + %t90 = load i64, ptr %t89 + %t91 = load { ptr, i64, i64 }, ptr %t86 + %t92 = extractvalue { ptr, i64, i64 } %t91, 1 + %t93 = icmp uge i64 %t90, %t92 + br i1 %t93, label %range11780, label %inrange11781 +range11780: + call void @finch_panic_index(ptr @.str.7508, i64 415, i64 %t90, i64 %t92) + unreachable +inrange11781: + %t94 = extractvalue { ptr, i64, i64 } %t91, 0 + %t95 = getelementptr inbounds i8, ptr %t94, i64 %t90 + %t96 = load i8, ptr %t95 + %t97 = icmp eq i8 %t96, 69 + br label %logic.rend11782 +logic.rend11782: + br label %logic.end11775 +logic.end11775: + %t98 = phi i1 [ true, %logic.from11773 ], [ %t97, %logic.rend11782 ] + br label %logic.from11783 +logic.from11783: + br i1 %t98, label %logic.end11785, label %logic.rhs11784 +logic.rhs11784: + %t99 = load ptr, ptr %a1 + %t100 = icmp eq ptr %t99, null + br i1 %t100, label %panic11786, label %ok11787 +panic11786: + call void @finch_panic(ptr @.str.7509, i64 415, ptr @.str.7510) + unreachable +ok11787: + %t101 = getelementptr inbounds %S.json.Reader, ptr %t99, i32 0, i32 0 + %t102 = load ptr, ptr %a1 + %t103 = icmp eq ptr %t102, null + br i1 %t103, label %panic11788, label %ok11789 +panic11788: + call void @finch_panic(ptr @.str.7511, i64 415, ptr @.str.7512) + unreachable +ok11789: + %t104 = getelementptr inbounds %S.json.Reader, ptr %t102, i32 0, i32 1 + %t105 = load i64, ptr %t104 + %t106 = load { ptr, i64, i64 }, ptr %t101 + %t107 = extractvalue { ptr, i64, i64 } %t106, 1 + %t108 = icmp uge i64 %t105, %t107 + br i1 %t108, label %range11790, label %inrange11791 +range11790: + call void @finch_panic_index(ptr @.str.7513, i64 415, i64 %t105, i64 %t107) + unreachable +inrange11791: + %t109 = extractvalue { ptr, i64, i64 } %t106, 0 + %t110 = getelementptr inbounds i8, ptr %t109, i64 %t105 + %t111 = load i8, ptr %t110 + %t112 = icmp eq i8 %t111, 43 + br label %logic.rend11792 +logic.rend11792: + br label %logic.end11785 +logic.end11785: + %t113 = phi i1 [ true, %logic.from11783 ], [ %t112, %logic.rend11792 ] + br label %logic.from11793 +logic.from11793: + br i1 %t113, label %logic.end11795, label %logic.rhs11794 +logic.rhs11794: + %t114 = load ptr, ptr %a1 + %t115 = icmp eq ptr %t114, null + br i1 %t115, label %panic11796, label %ok11797 +panic11796: + call void @finch_panic(ptr @.str.7514, i64 415, ptr @.str.7515) + unreachable +ok11797: + %t116 = getelementptr inbounds %S.json.Reader, ptr %t114, i32 0, i32 0 + %t117 = load ptr, ptr %a1 + %t118 = icmp eq ptr %t117, null + br i1 %t118, label %panic11798, label %ok11799 +panic11798: + call void @finch_panic(ptr @.str.7516, i64 415, ptr @.str.7517) + unreachable +ok11799: + %t119 = getelementptr inbounds %S.json.Reader, ptr %t117, i32 0, i32 1 + %t120 = load i64, ptr %t119 + %t121 = load { ptr, i64, i64 }, ptr %t116 + %t122 = extractvalue { ptr, i64, i64 } %t121, 1 + %t123 = icmp uge i64 %t120, %t122 + br i1 %t123, label %range11800, label %inrange11801 +range11800: + call void @finch_panic_index(ptr @.str.7518, i64 415, i64 %t120, i64 %t122) + unreachable +inrange11801: + %t124 = extractvalue { ptr, i64, i64 } %t121, 0 + %t125 = getelementptr inbounds i8, ptr %t124, i64 %t120 + %t126 = load i8, ptr %t125 + %t127 = icmp eq i8 %t126, 45 + br label %logic.rend11802 +logic.rend11802: + br label %logic.end11795 +logic.end11795: + %t128 = phi i1 [ true, %logic.from11793 ], [ %t127, %logic.rend11802 ] + br label %logic.rend11803 +logic.rend11803: + br label %logic.end11736 +logic.end11736: + %t129 = phi i1 [ false, %logic.from11734 ], [ %t128, %logic.rend11803 ] + br i1 %t129, label %while.body11728, label %while.end11729 +while.body11728: + %t130 = load ptr, ptr %a1 + %t131 = icmp eq ptr %t130, null + br i1 %t131, label %panic11804, label %ok11805 +panic11804: + call void @finch_panic(ptr @.str.7519, i64 416, ptr @.str.7520) + unreachable +ok11805: + %t132 = getelementptr inbounds %S.json.Reader, ptr %t130, i32 0, i32 1 + %t133 = load i64, ptr %t132 + %t134 = add i64 %t133, 1 + store i64 %t134, ptr %t132 + br label %while.cond11727 +while.end11729: + %t135 = load ptr, ptr %a1 + %t136 = icmp eq ptr %t135, null + br i1 %t136, label %panic11806, label %ok11807 +panic11806: + call void @finch_panic(ptr @.str.7521, i64 418, ptr @.str.7522) + unreachable +ok11807: + %t137 = getelementptr inbounds %S.json.Reader, ptr %t135, i32 0, i32 0 + %t138 = load { ptr, i64, i64 }, ptr %t137 + store { ptr, i64, i64 } %t138, ptr %a139 + %t141 = load i64, ptr %a6 + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic11808, label %ok11809 +panic11808: + call void @finch_panic(ptr @.str.7524, i64 418, ptr @.str.7525) + unreachable +ok11809: + %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 + %t145 = load i64, ptr %t144 + call void @finch_str_sub(ptr %a140, ptr %a139, i64 %t141, i64 %t145, ptr @.str.7523, i64 418) + %t146 = load { ptr, i64, i64 }, ptr %a140 + store { ptr, i64, i64 } zeroinitializer, ptr %a147 + store double 0.0, ptr %a148 + store { ptr, i64, i64 } %t146, ptr %a149 + %t150 = call i32 @finch_str_try_float(ptr %a149, ptr %a148, ptr %a147) + %t151 = icmp eq i32 %t150, 0 + %t152 = load { ptr, i64, i64 }, ptr %a147 + store { ptr, i64, i64 } %t146, ptr %a153 + call void @finch_str_drop(ptr %a153) + %t154 = load double, ptr %a148 + br i1 %t151, label %or.failed11810, label %or.ok11811 +or.failed11810: + store { ptr, i64, i64 } %t152, ptr %a155 + %t156 = load i64, ptr %a6 + %t157 = load ptr, ptr %a1 + %t158 = icmp eq ptr %t157, null + br i1 %t158, label %panic11812, label %ok11813 +panic11812: + call void @finch_panic(ptr @.str.7526, i64 419, ptr @.str.7527) + unreachable +ok11813: + %t159 = getelementptr inbounds %S.json.Reader, ptr %t157, i32 0, i32 1 + store i64 %t156, ptr %t159 + %t160 = load ptr, ptr %a1 + %t161 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t160, { ptr, i64, i64 } { ptr @.str.7528, i64 8, i64 0 }) + call void @finch_str_drop(ptr %a155) + %t162 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t161, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t162 +or.ok11811: + store double %t154, ptr %a163 + %t164 = load double, ptr %a163 + %t165 = call %S.json.Json @finch.json.new_number(double %t164) + %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t167 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t166, %S.json.Json %t165, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t167 +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %p0) { +entry: + %a1 = alloca ptr, align 16 + %a5 = alloca i8, align 16 + %a22 = alloca %S.json.Json, align 16 + %a54 = alloca { ptr, i64, i64 }, align 16 + %a74 = alloca %S.json.Json, align 16 + %a103 = alloca %S.json.Json, align 16 + %a128 = alloca %S.json.Json, align 16 + %a162 = alloca { ptr, i64, i64 }, align 16 + store ptr %p0, ptr %a1 + %t2 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t2) + %t3 = load ptr, ptr %a1 + %t4 = call i8 @finch.json.peek(ptr %t3) + store i8 %t4, ptr %a5 + %t6 = load ptr, ptr %a1 + %t7 = icmp eq ptr %t6, null + br i1 %t7, label %panic11814, label %ok11815 +panic11814: + call void @finch_panic(ptr @.str.7529, i64 428, ptr @.str.7530) + unreachable +ok11815: + %t8 = getelementptr inbounds %S.json.Reader, ptr %t6, i32 0, i32 1 + %t9 = load i64, ptr %t8 + %t10 = load ptr, ptr %a1 + %t11 = icmp eq ptr %t10, null + br i1 %t11, label %panic11816, label %ok11817 +panic11816: + call void @finch_panic(ptr @.str.7531, i64 428, ptr @.str.7532) + unreachable +ok11817: + %t12 = getelementptr inbounds %S.json.Reader, ptr %t10, i32 0, i32 0 + %t13 = getelementptr inbounds { ptr, i64, i64 }, ptr %t12, i32 0, i32 1 + %t14 = load i64, ptr %t13 + %t15 = icmp sge i64 %t9, %t14 + br i1 %t15, label %then11818, label %endif11820 +then11818: + %t16 = load ptr, ptr %a1 + %t17 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t16, { ptr, i64, i64 } { ptr @.str.7533, i64 7, i64 0 }) + %t18 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t17, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t18 +endif11820: + %t19 = load i8, ptr %a5 + %t20 = icmp eq i8 %t19, 123 + br i1 %t20, label %then11821, label %endif11823 +then11821: + %t21 = call %S.json.Json @finch.json.new_object() + store %S.json.Json %t21, ptr %a22 + %t23 = load ptr, ptr %a1 + %t24 = icmp eq ptr %t23, null + br i1 %t24, label %panic11824, label %ok11825 +panic11824: + call void @finch_panic(ptr @.str.7534, i64 433, ptr @.str.7535) + unreachable +ok11825: + %t25 = getelementptr inbounds %S.json.Reader, ptr %t23, i32 0, i32 1 + %t26 = load i64, ptr %t25 + %t27 = add i64 %t26, 1 + store i64 %t27, ptr %t25 + %t28 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t28) + %t29 = load ptr, ptr %a1 + %t30 = call i8 @finch.json.peek(ptr %t29) + %t31 = icmp eq i8 %t30, 125 + br i1 %t31, label %then11826, label %endif11828 +then11826: + %t32 = load ptr, ptr %a1 + %t33 = icmp eq ptr %t32, null + br i1 %t33, label %panic11829, label %ok11830 +panic11829: + call void @finch_panic(ptr @.str.7536, i64 436, ptr @.str.7537) + unreachable +ok11830: + %t34 = getelementptr inbounds %S.json.Reader, ptr %t32, i32 0, i32 1 + %t35 = load i64, ptr %t34 + %t36 = add i64 %t35, 1 + store i64 %t36, ptr %t34 + %t37 = load %S.json.Json, ptr %a22 + %t38 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t39 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t38, %S.json.Json %t37, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t39 +endif11828: + br label %while.cond11831 +while.cond11831: + br label %while.body11832 +while.body11832: + %t40 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t40) + %t41 = load ptr, ptr %a1 + %t42 = call i8 @finch.json.peek(ptr %t41) + %t43 = icmp ne i8 %t42, 34 + br i1 %t43, label %then11834, label %endif11836 +then11834: + %t44 = load ptr, ptr %a1 + %t45 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t44, { ptr, i64, i64 } { ptr @.str.7538, i64 15, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a22) + %t46 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t45, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t46 +endif11836: + %t47 = load ptr, ptr %a1 + %t48 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t47) + %t49 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 0 + %t50 = xor i1 %t49, true + %t51 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 2 + %t52 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t48, 1 + br i1 %t50, label %try.failed11837, label %try.ok11838 +try.failed11837: + call void @finch.drop.S_json_Json(ptr %a22) + %t53 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t51, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t53 +try.ok11838: + store { ptr, i64, i64 } %t52, ptr %a54 + %t55 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t55) + %t56 = load ptr, ptr %a1 + %t57 = call i8 @finch.json.peek(ptr %t56) + %t58 = icmp ne i8 %t57, 58 + br i1 %t58, label %then11839, label %endif11841 +then11839: + %t59 = load ptr, ptr %a1 + %t60 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t59, { ptr, i64, i64 } { ptr @.str.7539, i64 3, i64 0 }) + call void @finch_str_drop(ptr %a54) + call void @finch.drop.S_json_Json(ptr %a22) + %t61 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t60, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t61 +endif11841: + %t62 = load ptr, ptr %a1 + %t63 = icmp eq ptr %t62, null + br i1 %t63, label %panic11842, label %ok11843 +panic11842: + call void @finch_panic(ptr @.str.7540, i64 449, ptr @.str.7541) + unreachable +ok11843: + %t64 = getelementptr inbounds %S.json.Reader, ptr %t62, i32 0, i32 1 + %t65 = load i64, ptr %t64 + %t66 = add i64 %t65, 1 + store i64 %t66, ptr %t64 + %t67 = load ptr, ptr %a1 + %t68 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t67) + %t69 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 0 + %t70 = xor i1 %t69, true + %t71 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 2 + %t72 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t68, 1 + br i1 %t70, label %try.failed11844, label %try.ok11845 +try.failed11844: + call void @finch_str_drop(ptr %a54) + call void @finch.drop.S_json_Json(ptr %a22) + %t73 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t71, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t73 +try.ok11845: + store %S.json.Json %t72, ptr %a74 + %t75 = load { ptr, i64, i64 }, ptr %a54 + %t76 = load %S.json.Json, ptr %a74 + call void @finch.json.Json.set(ptr %a22, { ptr, i64, i64 } %t75, %S.json.Json %t76) + %t77 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t77) + %t78 = load ptr, ptr %a1 + %t79 = call i8 @finch.json.peek(ptr %t78) + %t80 = icmp eq i8 %t79, 44 + br i1 %t80, label %then11846, label %endif11848 +then11846: + %t81 = load ptr, ptr %a1 + %t82 = icmp eq ptr %t81, null + br i1 %t82, label %panic11849, label %ok11850 +panic11849: + call void @finch_panic(ptr @.str.7542, i64 454, ptr @.str.7543) + unreachable +ok11850: + %t83 = getelementptr inbounds %S.json.Reader, ptr %t81, i32 0, i32 1 + %t84 = load i64, ptr %t83 + %t85 = add i64 %t84, 1 + store i64 %t85, ptr %t83 + call void @finch.drop.S_json_Json(ptr %a74) + call void @finch_str_drop(ptr %a54) + br label %while.cond11831 +endif11848: + %t86 = load ptr, ptr %a1 + %t87 = call i8 @finch.json.peek(ptr %t86) + %t88 = icmp eq i8 %t87, 125 + br i1 %t88, label %then11851, label %endif11853 +then11851: + %t89 = load ptr, ptr %a1 + %t90 = icmp eq ptr %t89, null + br i1 %t90, label %panic11854, label %ok11855 +panic11854: + call void @finch_panic(ptr @.str.7544, i64 458, ptr @.str.7545) + unreachable +ok11855: + %t91 = getelementptr inbounds %S.json.Reader, ptr %t89, i32 0, i32 1 + %t92 = load i64, ptr %t91 + %t93 = add i64 %t92, 1 + store i64 %t93, ptr %t91 + %t94 = load %S.json.Json, ptr %a22 + call void @finch.drop.S_json_Json(ptr %a74) + call void @finch_str_drop(ptr %a54) + %t95 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t96 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t95, %S.json.Json %t94, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t96 +endif11853: + %t97 = load ptr, ptr %a1 + %t98 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t97, { ptr, i64, i64 } { ptr @.str.7546, i64 10, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a74) + call void @finch_str_drop(ptr %a54) + call void @finch.drop.S_json_Json(ptr %a22) + %t99 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t98, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t99 +endif11823: + %t100 = load i8, ptr %a5 + %t101 = icmp eq i8 %t100, 91 + br i1 %t101, label %then11856, label %endif11858 +then11856: + %t102 = call %S.json.Json @finch.json.new_list() + store %S.json.Json %t102, ptr %a103 + %t104 = load ptr, ptr %a1 + %t105 = icmp eq ptr %t104, null + br i1 %t105, label %panic11859, label %ok11860 +panic11859: + call void @finch_panic(ptr @.str.7547, i64 466, ptr @.str.7548) + unreachable +ok11860: + %t106 = getelementptr inbounds %S.json.Reader, ptr %t104, i32 0, i32 1 + %t107 = load i64, ptr %t106 + %t108 = add i64 %t107, 1 + store i64 %t108, ptr %t106 + %t109 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t109) + %t110 = load ptr, ptr %a1 + %t111 = call i8 @finch.json.peek(ptr %t110) + %t112 = icmp eq i8 %t111, 93 + br i1 %t112, label %then11861, label %endif11863 +then11861: + %t113 = load ptr, ptr %a1 + %t114 = icmp eq ptr %t113, null + br i1 %t114, label %panic11864, label %ok11865 +panic11864: + call void @finch_panic(ptr @.str.7549, i64 469, ptr @.str.7550) + unreachable +ok11865: + %t115 = getelementptr inbounds %S.json.Reader, ptr %t113, i32 0, i32 1 + %t116 = load i64, ptr %t115 + %t117 = add i64 %t116, 1 + store i64 %t117, ptr %t115 + %t118 = load %S.json.Json, ptr %a103 + %t119 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t120 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t119, %S.json.Json %t118, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t120 +endif11863: + br label %while.cond11866 +while.cond11866: + br label %while.body11867 +while.body11867: + %t121 = load ptr, ptr %a1 + %t122 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %t121) + %t123 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 0 + %t124 = xor i1 %t123, true + %t125 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 2 + %t126 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t122, 1 + br i1 %t124, label %try.failed11869, label %try.ok11870 +try.failed11869: + call void @finch.drop.S_json_Json(ptr %a103) + %t127 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t125, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t127 +try.ok11870: + store %S.json.Json %t126, ptr %a128 + %t129 = load %S.json.Json, ptr %a128 + call void @finch.json.Json.push(ptr %a103, %S.json.Json %t129) + %t130 = load ptr, ptr %a1 + call void @finch.json.skip_space(ptr %t130) + %t131 = load ptr, ptr %a1 + %t132 = call i8 @finch.json.peek(ptr %t131) + %t133 = icmp eq i8 %t132, 44 + br i1 %t133, label %then11871, label %endif11873 +then11871: + %t134 = load ptr, ptr %a1 + %t135 = icmp eq ptr %t134, null + br i1 %t135, label %panic11874, label %ok11875 +panic11874: + call void @finch_panic(ptr @.str.7551, i64 477, ptr @.str.7552) + unreachable +ok11875: + %t136 = getelementptr inbounds %S.json.Reader, ptr %t134, i32 0, i32 1 + %t137 = load i64, ptr %t136 + %t138 = add i64 %t137, 1 + store i64 %t138, ptr %t136 + call void @finch.drop.S_json_Json(ptr %a128) + br label %while.cond11866 +endif11873: + %t139 = load ptr, ptr %a1 + %t140 = call i8 @finch.json.peek(ptr %t139) + %t141 = icmp eq i8 %t140, 93 + br i1 %t141, label %then11876, label %endif11878 +then11876: + %t142 = load ptr, ptr %a1 + %t143 = icmp eq ptr %t142, null + br i1 %t143, label %panic11879, label %ok11880 +panic11879: + call void @finch_panic(ptr @.str.7553, i64 481, ptr @.str.7554) + unreachable +ok11880: + %t144 = getelementptr inbounds %S.json.Reader, ptr %t142, i32 0, i32 1 + %t145 = load i64, ptr %t144 + %t146 = add i64 %t145, 1 + store i64 %t146, ptr %t144 + %t147 = load %S.json.Json, ptr %a103 + call void @finch.drop.S_json_Json(ptr %a128) + %t148 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t149 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t148, %S.json.Json %t147, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t149 +endif11878: + %t150 = load ptr, ptr %a1 + %t151 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t150, { ptr, i64, i64 } { ptr @.str.7555, i64 10, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a128) + call void @finch.drop.S_json_Json(ptr %a103) + %t152 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t151, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t152 +endif11858: + %t153 = load i8, ptr %a5 + %t154 = icmp eq i8 %t153, 34 + br i1 %t154, label %then11881, label %endif11883 +then11881: + %t155 = load ptr, ptr %a1 + %t156 = call { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } @finch.json.read_string(ptr %t155) + %t157 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 0 + %t158 = xor i1 %t157, true + %t159 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 2 + %t160 = extractvalue { i1, { ptr, i64, i64 }, { ptr, i64, i64 } } %t156, 1 + br i1 %t158, label %try.failed11884, label %try.ok11885 +try.failed11884: + %t161 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t159, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t161 +try.ok11885: + store { ptr, i64, i64 } %t160, ptr %a162 + %t163 = load { ptr, i64, i64 }, ptr %a162 + %t164 = call %S.json.Json @finch.json.new_text({ ptr, i64, i64 } %t163) + call void @finch_str_drop(ptr %a162) + %t165 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t166 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t165, %S.json.Json %t164, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t166 +endif11883: + %t167 = load i8, ptr %a5 + %t168 = icmp eq i8 %t167, 116 + br i1 %t168, label %then11886, label %endif11888 +then11886: + %t169 = load ptr, ptr %a1 + %t170 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t169, { ptr, i64, i64 } { ptr @.str.7556, i64 4, i64 0 }) + %t171 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 0 + %t172 = xor i1 %t171, true + %t173 = extractvalue { i1, i8, { ptr, i64, i64 } } %t170, 2 + br i1 %t172, label %try.failed11889, label %try.ok11890 +try.failed11889: + %t174 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t173, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t174 +try.ok11890: + %t175 = call %S.json.Json @finch.json.new_bool(i1 true) + %t176 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t177 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t176, %S.json.Json %t175, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t177 +endif11888: + %t178 = load i8, ptr %a5 + %t179 = icmp eq i8 %t178, 102 + br i1 %t179, label %then11891, label %endif11893 +then11891: + %t180 = load ptr, ptr %a1 + %t181 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t180, { ptr, i64, i64 } { ptr @.str.7557, i64 5, i64 0 }) + %t182 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 0 + %t183 = xor i1 %t182, true + %t184 = extractvalue { i1, i8, { ptr, i64, i64 } } %t181, 2 + br i1 %t183, label %try.failed11894, label %try.ok11895 +try.failed11894: + %t185 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t184, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t185 +try.ok11895: + %t186 = call %S.json.Json @finch.json.new_bool(i1 false) + %t187 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t188 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t187, %S.json.Json %t186, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t188 +endif11893: + %t189 = load i8, ptr %a5 + %t190 = icmp eq i8 %t189, 110 + br i1 %t190, label %then11896, label %endif11898 +then11896: + %t191 = load ptr, ptr %a1 + %t192 = call { i1, i8, { ptr, i64, i64 } } @finch.json.expect_word(ptr %t191, { ptr, i64, i64 } { ptr @.str.7558, i64 4, i64 0 }) + %t193 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 0 + %t194 = xor i1 %t193, true + %t195 = extractvalue { i1, i8, { ptr, i64, i64 } } %t192, 2 + br i1 %t194, label %try.failed11899, label %try.ok11900 +try.failed11899: + %t196 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t195, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t196 +try.ok11900: + %t197 = call %S.json.Json @finch.json.new_null() + %t198 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t199 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t198, %S.json.Json %t197, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t199 +endif11898: + %t200 = load i8, ptr %a5 + %t201 = icmp eq i8 %t200, 45 + br label %logic.from11901 +logic.from11901: + br i1 %t201, label %logic.end11903, label %logic.rhs11902 +logic.rhs11902: + %t202 = load i8, ptr %a5 + %t203 = icmp uge i8 %t202, 48 + br label %logic.from11904 +logic.from11904: + br i1 %t203, label %logic.rhs11905, label %logic.end11906 +logic.rhs11905: + %t204 = load i8, ptr %a5 + %t205 = icmp ule i8 %t204, 57 + br label %logic.rend11907 +logic.rend11907: + br label %logic.end11906 +logic.end11906: + %t206 = phi i1 [ false, %logic.from11904 ], [ %t205, %logic.rend11907 ] + br label %logic.rend11908 +logic.rend11908: + br label %logic.end11903 +logic.end11903: + %t207 = phi i1 [ true, %logic.from11901 ], [ %t206, %logic.rend11908 ] + br i1 %t207, label %then11909, label %endif11911 +then11909: + %t208 = load ptr, ptr %a1 + %t209 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_number(ptr %t208) + %t210 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 0 + %t211 = xor i1 %t210, true + %t212 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 2 + %t213 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t209, 1 + br i1 %t211, label %try.failed11912, label %try.ok11913 +try.failed11912: + %t214 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t212, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t214 +try.ok11913: + %t215 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t216 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t215, %S.json.Json %t213, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t216 +endif11911: + %t217 = load ptr, ptr %a1 + %t218 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %t217, { ptr, i64, i64 } { ptr @.str.7559, i64 7, i64 0 }) + %t219 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t218, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t219 +} + +define internal void @finch.drop.S_json_Reader(ptr %a) { +entry: + + %t1 = getelementptr inbounds %S.json.Reader, ptr %a, i32 0, i32 0 + call void @finch_str_drop(ptr %t1) + ret void +} + +define internal { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.parse({ ptr, i64, i64 } %p0) { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + %a3 = alloca { ptr, i64, i64 }, align 16 + %a4 = alloca { ptr, i64, i64 }, align 16 + %a7 = alloca %S.json.Reader, align 16 + %a14 = alloca %S.json.Json, align 16 + store { ptr, i64, i64 } %p0, ptr %a1 + %t2 = load { ptr, i64, i64 }, ptr %a1 + store { ptr, i64, i64 } %t2, ptr %a3 + call void @finch_str_copy(ptr %a4, ptr %a3) + %t5 = load { ptr, i64, i64 }, ptr %a4 + %t6 = insertvalue %S.json.Reader zeroinitializer, { ptr, i64, i64 } %t5, 0 + store %S.json.Reader %t6, ptr %a7 + %t8 = call { i1, %S.json.Json, { ptr, i64, i64 } } @finch.json.read_value(ptr %a7) + %t9 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 0 + %t10 = xor i1 %t9, true + %t11 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 2 + %t12 = extractvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t8, 1 + br i1 %t10, label %try.failed11914, label %try.ok11915 +try.failed11914: + call void @finch.drop.S_json_Reader(ptr %a7) + %t13 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t11, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t13 +try.ok11915: + store %S.json.Json %t12, ptr %a14 + call void @finch.json.skip_space(ptr %a7) + %t15 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 1 + %t16 = load i64, ptr %t15 + %t17 = getelementptr inbounds %S.json.Reader, ptr %a7, i32 0, i32 0 + %t18 = getelementptr inbounds { ptr, i64, i64 }, ptr %t17, i32 0, i32 1 + %t19 = load i64, ptr %t18 + %t20 = icmp slt i64 %t16, %t19 + br i1 %t20, label %then11916, label %endif11918 +then11916: + %t21 = call { ptr, i64, i64 } @finch.json.unexpected(ptr %a7, { ptr, i64, i64 } { ptr @.str.7560, i64 19, i64 0 }) + call void @finch.drop.S_json_Json(ptr %a14) + call void @finch.drop.S_json_Reader(ptr %a7) + %t22 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, { ptr, i64, i64 } %t21, 2 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t22 +endif11918: + %t23 = load %S.json.Json, ptr %a14 + call void @finch.drop.S_json_Reader(ptr %a7) + %t24 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } zeroinitializer, i1 true, 0 + %t25 = insertvalue { i1, %S.json.Json, { ptr, i64, i64 } } %t24, %S.json.Json %t23, 1 + ret { i1, %S.json.Json, { ptr, i64, i64 } } %t25 +} + +define internal { ptr, i64, i64 } @finch.embedded.names() { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } zeroinitializer, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = add i64 %t3, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t5 = load ptr, ptr %a1 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 + store { ptr, i64, i64 } { ptr @.str.7561, i64 18, i64 0 }, ptr %t6 + store i64 %t4, ptr %t2 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 + store { ptr, i64, i64 } { ptr @.str.7562, i64 12, i64 0 }, ptr %t11 + store i64 %t9, ptr %t7 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 + store { ptr, i64, i64 } { ptr @.str.7563, i64 12, i64 0 }, ptr %t16 + store i64 %t14, ptr %t12 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = add i64 %t18, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + store { ptr, i64, i64 } { ptr @.str.7564, i64 12, i64 0 }, ptr %t21 + store i64 %t19, ptr %t17 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = add i64 %t23, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t25 = load ptr, ptr %a1 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 + store { ptr, i64, i64 } { ptr @.str.7565, i64 20, i64 0 }, ptr %t26 + store i64 %t24, ptr %t22 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = add i64 %t28, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t30 = load ptr, ptr %a1 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 + store { ptr, i64, i64 } { ptr @.str.7566, i64 12, i64 0 }, ptr %t31 + store i64 %t29, ptr %t27 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = add i64 %t33, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 + store { ptr, i64, i64 } { ptr @.str.7567, i64 20, i64 0 }, ptr %t36 + store i64 %t34, ptr %t32 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t40 = load ptr, ptr %a1 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 + store { ptr, i64, i64 } { ptr @.str.7568, i64 15, i64 0 }, ptr %t41 + store i64 %t39, ptr %t37 + %t42 = load { ptr, i64, i64 }, ptr %a1 + ret { ptr, i64, i64 } %t42 +} + +define internal { ptr, i64, i64 } @finch.embedded.texts() { +entry: + %a1 = alloca { ptr, i64, i64 }, align 16 + store { ptr, i64, i64 } zeroinitializer, ptr %a1 + %t2 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t3 = load i64, ptr %t2 + %t4 = add i64 %t3, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t4, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t5 = load ptr, ptr %a1 + %t6 = getelementptr inbounds { ptr, i64, i64 }, ptr %t5, i64 %t3 + store { ptr, i64, i64 } { ptr @.str.7569, i64 24981, i64 0 }, ptr %t6 + store i64 %t4, ptr %t2 + %t7 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t8 = load i64, ptr %t7 + %t9 = add i64 %t8, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t9, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t10 = load ptr, ptr %a1 + %t11 = getelementptr inbounds { ptr, i64, i64 }, ptr %t10, i64 %t8 + store { ptr, i64, i64 } { ptr @.str.7570, i64 12884, i64 0 }, ptr %t11 + store i64 %t9, ptr %t7 + %t12 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t13 = load i64, ptr %t12 + %t14 = add i64 %t13, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t14, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t15 = load ptr, ptr %a1 + %t16 = getelementptr inbounds { ptr, i64, i64 }, ptr %t15, i64 %t13 + store { ptr, i64, i64 } { ptr @.str.7571, i64 2846, i64 0 }, ptr %t16 + store i64 %t14, ptr %t12 + %t17 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t18 = load i64, ptr %t17 + %t19 = add i64 %t18, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t19, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t20 = load ptr, ptr %a1 + %t21 = getelementptr inbounds { ptr, i64, i64 }, ptr %t20, i64 %t18 + store { ptr, i64, i64 } { ptr @.str.7572, i64 1406, i64 0 }, ptr %t21 + store i64 %t19, ptr %t17 + %t22 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t23 = load i64, ptr %t22 + %t24 = add i64 %t23, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t24, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t25 = load ptr, ptr %a1 + %t26 = getelementptr inbounds { ptr, i64, i64 }, ptr %t25, i64 %t23 + store { ptr, i64, i64 } { ptr @.str.7573, i64 995, i64 0 }, ptr %t26 + store i64 %t24, ptr %t22 + %t27 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t28 = load i64, ptr %t27 + %t29 = add i64 %t28, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t29, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t30 = load ptr, ptr %a1 + %t31 = getelementptr inbounds { ptr, i64, i64 }, ptr %t30, i64 %t28 + store { ptr, i64, i64 } { ptr @.str.7574, i64 2539, i64 0 }, ptr %t31 + store i64 %t29, ptr %t27 + %t32 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t33 = load i64, ptr %t32 + %t34 = add i64 %t33, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t34, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t35 = load ptr, ptr %a1 + %t36 = getelementptr inbounds { ptr, i64, i64 }, ptr %t35, i64 %t33 + store { ptr, i64, i64 } { ptr @.str.7575, i64 1792, i64 0 }, ptr %t36 + store i64 %t34, ptr %t32 + %t37 = getelementptr inbounds { ptr, i64, i64 }, ptr %a1, i32 0, i32 1 + %t38 = load i64, ptr %t37 + %t39 = add i64 %t38, 1 + call void @finch_arr_reserve(ptr %a1, i64 %t39, i64 ptrtoint (ptr getelementptr ({ ptr, i64, i64 }, ptr null, i32 1) to i64)) + %t40 = load ptr, ptr %a1 + %t41 = getelementptr inbounds { ptr, i64, i64 }, ptr %t40, i64 %t38 + store { ptr, i64, i64 } { ptr @.str.7576, i64 365, i64 0 }, ptr %t41 + store i64 %t39, ptr %t37 + %t42 = load { ptr, i64, i64 }, ptr %a1 + ret { ptr, i64, i64 } %t42 +} + +define i32 @main(i32 %argc, ptr %argv) { +entry: + %args = alloca { ptr, i64, i64 } + call void @finch_args(ptr %args, i32 %argc, ptr %argv) + %a = load { ptr, i64, i64 }, ptr %args + %r = call i64 @finch.main.main({ ptr, i64, i64 } %a) + %code = trunc i64 %r to i32 + ret i32 %code +} + diff --git a/bootstrap/winseed.sh b/bootstrap/winseed.sh new file mode 100755 index 0000000..10215ef --- /dev/null +++ b/bootstrap/winseed.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# Makes bootstrap/windows-x86_64.ll from Linux, with a Linux-hosted llvm-mingw (MinGW headers) and the headers of an +# official LLVM for Windows (clang-c/Index.h): +# bootstrap/winseed.sh +set -eu +cd "$(dirname "$0")/.." +finch=$1; mingw=$2; llvm=$3 +PATH="$mingw/bin:$PATH" FINCH_CC="$mingw/bin/x86_64-w64-mingw32-clang" "$finch" ir src/main.fch --target windows -I "$llvm/include" > bootstrap/windows-x86_64.ll +echo "wrote bootstrap/windows-x86_64.ll" diff --git a/src/cimport.fch b/src/cimport.fch index c1dc47b..09d4031 100644 --- a/src/cimport.fch +++ b/src/cimport.fch @@ -534,7 +534,7 @@ fn importHeaders([]Header headers, []str dirs, str target, bool windows, str ccF index := clang_createIndex(0, 0) for h in headers { src := "#include \"" + h.path + "\"\n" - file := CXUnsavedFile(Filename: "finch_import.c".ptr, Contents: src.ptr, Length: u64(src.len)) + file := host.unsavedFile("finch_import.c", src) ptr tu = null flags := CXTranslationUnit_DetailedPreprocessingRecord | CXTranslationUnit_SkipFunctionBodies err := clang_parseTranslationUnit2(index, "finch_import.c", argv.ptr, i32(argv.len), addr(file), 1, u32(flags), addr(tu)) diff --git a/src/gen.fch b/src/gen.fch index 3fb7b65..a375015 100644 --- a/src/gen.fch +++ b/src/gen.fch @@ -5773,7 +5773,7 @@ fn runtimeDecls() -> str { fn assemble(ptr[Gen] g) -> str { text := "; generated by the Finch compiler written in Finch\n\n" - if g.tg.cross { + if g.tg.cross || g.tg.windows { text = text + "target triple = \"" + g.tg.triple + "\"\n\n" } text = text + g.head.join("\n") + "\n\n" + runtimeDecls() + "\n" diff --git a/src/host.fch b/src/host.fch index e2415aa..1b1b8bd 100644 --- a/src/host.fch +++ b/src/host.fch @@ -3,6 +3,12 @@ // the Windows one). import "stdlib.h" import "unistd.h" +import "clang-c/Index.h" + +// libclang's description of a file that isn't on disk: its Length is C's `unsigned long`, which is 64 bits here +fn unsavedFile(str name, str contents) -> CXUnsavedFile { + return CXUnsavedFile(Filename: name.ptr, Contents: contents.ptr, Length: u64(contents.len)) +} fn quote(str a) -> str { return "'" + a.replace("'", "'\\''") + "'" diff --git a/src/host_windows.fch b/src/host_windows.fch index 92b22c2..9801e39 100644 --- a/src/host_windows.fch +++ b/src/host_windows.fch @@ -5,8 +5,14 @@ import "stdio.h" import "process.h" import "direct.h" import "io.h" +import "clang-c/Index.h" // a Windows argument: in double quotes, with the quotes inside doubled up the way CreateProcess reads them +// libclang's description of a file that isn't on disk: its Length is C's `unsigned long`, which is 32 bits on Windows +fn unsavedFile(str name, str contents) -> CXUnsavedFile { + return CXUnsavedFile(Filename: name.ptr, Contents: contents.ptr, Length: u32(contents.len)) +} + fn quote(str a) -> str { return "\"" + a.replace("\"", "\\\"") + "\"" } @@ -78,7 +84,8 @@ fn makeDirs(str path) { if part.len == 0 || part.ends_with(":") { continue // "" before a leading / and the drive letter } - _mkdir(p.sub(0, at).ptr) // fails when it is there already, which is fine + sofar := p.sub(0, at) + _mkdir(sofar) // fails when it is there already, which is fine } } @@ -93,5 +100,5 @@ fn removeTree(str path) { // move a file over another fn move(str from, str to) { delete_file(to) - rename(from.ptr, to.ptr) + rename(from, to) } diff --git a/src/linker.fch b/src/linker.fch index b24545d..ba5592f 100644 --- a/src/linker.fch +++ b/src/linker.fch @@ -226,7 +226,7 @@ fn build(Build b, platform.Target tg, cimport.CImports ci) -> int { obj := b.out + ".o" write_file(ll, b.ir) target := "" - if tg.cross { + if tg.cross || tg.windows { target = " --target=" + tg.triple } log := b.out + ".log" @@ -243,6 +243,9 @@ fn build(Build b, platform.Target tg, cimport.CImports ci) -> int { if !tg.msvc { cmd = cmd + " -lm" } + if getenv("FINCH_LDFLAGS").len > 0 { + cmd = cmd + " " + getenv("FINCH_LDFLAGS") // more flags for the linker, like -L/where/libclang/is + } if b.shared { if tg.darwin { cmd = cmd + " -dynamiclib" diff --git a/src/main.fch b/src/main.fch index 2366843..858271f 100644 --- a/src/main.fch +++ b/src/main.fch @@ -277,8 +277,8 @@ fn main([]str args) -> int { } } triple := "" - if tg.cross { - triple = tg.triple + if tg.cross || tg.windows { + triple = tg.triple // on Windows libclang.dll would otherwise assume MSVC, while clang may be MinGW } ci := cimport.importHeaders(headers, dirs, triple, tg.windows, tg.cc) or { print(err) diff --git a/src/platform.fch b/src/platform.fch index aca3796..b7a6992 100644 --- a/src/platform.fch +++ b/src/platform.fch @@ -52,6 +52,9 @@ fn select(str name) -> Target { t = "x86_64-apple-macosx14.0.0" } } + if t == "x86_64-w64-windows-gnu" { + t = "x86_64-w64-mingw32" // what clang calls the same system when it runs on Windows + } tg := Target(triple: t) tg.windows = t.contains("windows") || t.contains("mingw") || t.contains("msvc") || t.contains("win32") tg.msvc = t.contains("msvc") @@ -59,7 +62,8 @@ fn select(str name) -> Target { tg.arm64 = t.starts_with("aarch64") || t.starts_with("arm64") hostArm := hostName.starts_with("aarch64") || hostName.starts_with("arm64") hostDarwin := hostName.contains("apple") || hostName.contains("darwin") - tg.cross = tg.windows || tg.darwin != hostDarwin || tg.arm64 != hostArm + hostWin := hostName.contains("windows") || hostName.contains("mingw") || hostName.contains("msvc") + tg.cross = tg.windows != hostWin || tg.darwin != hostDarwin || tg.arm64 != hostArm tg.exe = "" if tg.windows { tg.exe = ".exe"